././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383731.252559 ansible-core-2.12.0/0000755000000000000000000000000000000000000014076 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/COPYING0000644000000000000000000010451400000000000015136 0ustar00rootroot00000000000000 GNU 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. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/MANIFEST.in0000644000000000000000000000334400000000000015640 0ustar00rootroot00000000000000include README.rst include COPYING include SYMLINK_CACHE.json include requirements.txt recursive-include docs * include docs/docsite/rst/collections/all_plugins.rst exclude docs/docsite/rst_warnings exclude docs/docsite/rst/conf.py exclude docs/docsite/rst/index.rst recursive-exclude docs/docsite/_build * recursive-exclude docs/docsite/_extensions *.pyc *.pyo include examples/hosts include examples/ansible.cfg include examples/scripts/ConfigureRemotingForAnsible.ps1 include examples/scripts/upgrade_to_ps3.ps1 include lib/ansible/keyword_desc.yml recursive-include lib/ansible/executor/powershell *.ps1 recursive-include lib/ansible/module_utils/csharp *.cs recursive-include lib/ansible/module_utils/powershell *.psm1 recursive-include lib/ansible/modules/windows *.ps1 recursive-include lib/ansible/galaxy/data *.yml *.j2 README.md ansible.cfg inventory .git_keep recursive-include lib/ansible/config *.yml recursive-include licenses *.txt recursive-include packaging * recursive-include test/ansible_test *.py Makefile recursive-include test/integration * recursive-include test/lib/ansible_test/config *.yml *.template recursive-include test/lib/ansible_test/_data *.cfg *.ini *.ps1 *.txt *.yml coveragerc recursive-include test/lib/ansible_test/_util *.cfg *.json *.ps1 *.psd1 *.py *.sh *.txt *.yml recursive-include test/lib/ansible_test/_util/controller/sanity/validate-modules validate-modules recursive-include test/sanity *.json *.py *.txt recursive-include test/support *.py *.ps1 *.psm1 *.cs exclude test/sanity/code-smell/botmeta.* recursive-include test/units * include Makefile include MANIFEST.in include changelogs/CHANGELOG*.rst include changelogs/changelog.yaml recursive-include hacking/build_library *.py include hacking/build-ansible.py ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/Makefile0000644000000000000000000002465600000000000015553 0ustar00rootroot00000000000000# WARN: gmake syntax ######################################################## # Makefile for Ansible # # useful targets: # make clean ---------------- clean up # make webdocs -------------- produce ansible doc at docs/docsite/_build/html # make coredocs ------------- produce core doc at docs/docsite/_build/html # make sdist ---------------- produce a tarball # make deb-src -------------- produce a DEB source # make deb ------------------ produce a DEB # make docs ----------------- rebuild the manpages (results are checked in) # make gettext -------------- produce POT files for docs # make generate-po ---------- generate language specific po file # make needs-translation ---- generate list of file with unstranlated or fuzzy string for a specific language # make tests ---------------- run the tests (see https://docs.ansible.com/ansible/devel/dev_guide/testing_units.html for requirements) ######################################################## # variable section NAME = ansible-core OS = $(shell uname -s) PREFIX ?= '/usr/local' SDIST_DIR ?= 'dist' # This doesn't evaluate until it's called. The -D argument is the # directory of the target file ($@), kinda like `dirname`. MANPAGES ?= $(patsubst %.rst.in,%,$(wildcard ./docs/man/man1/ansible*.1.rst.in)) ifneq ($(shell which rst2man 2>/dev/null),) ASCII2MAN = rst2man $< $@ else ifneq ($(shell which rst2man.py 2>/dev/null),) ASCII2MAN = rst2man.py $< $@ else ASCII2MAN = @echo "ERROR: rst2man from docutils command is not installed but is required to build $(MANPAGES)" && exit 1 endif PYTHON ?= python GENERATE_CLI = hacking/build-ansible.py generate-man # fetch version from project release.py as single source-of-truth VERSION := $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --raw || echo error) ifeq ($(findstring error,$(VERSION)), error) $(error "version_helper failed") endif # Get the branch information from git ifneq ($(shell which git),) GIT_DATE := $(shell git log -n 1 --format="%ci") GIT_HASH := $(shell git log -n 1 --format="%h") GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed 's/[-_.\/]//g') GITINFO = .$(GIT_HASH).$(GIT_BRANCH) else GITINFO = "" endif ifeq ($(shell echo $(OS) | egrep -c 'Darwin|FreeBSD|OpenBSD|DragonFly'),1) DATE := $(shell date -j -r $(shell git log -n 1 --format="%ct") +%Y%m%d%H%M) CPUS ?= $(shell sysctl hw.ncpu|awk '{print $$2}') else DATE := $(shell date --utc --date="$(GIT_DATE)" +%Y%m%d%H%M) CPUS ?= $(shell nproc) endif # Intenationalisation and Localisation LANGUAGES ?= # DEB build parameters DEBUILD_BIN ?= debuild DEBUILD_OPTS = --source-option="-I" DPUT_BIN ?= dput DPUT_OPTS ?= DEB_DATE := $(shell LC_TIME=C date +"%a, %d %b %Y %T %z") DEB_VERSION ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --debversion) ifeq ($(OFFICIAL),yes) DEB_RELEASE ?= $(shell $(PYTHON) packaging/release/versionhelper/version_helper.py --debrelease)ppa # Sign OFFICIAL builds using 'DEBSIGN_KEYID' # DEBSIGN_KEYID is required when signing ifneq ($(DEBSIGN_KEYID),) DEBUILD_OPTS += -k$(DEBSIGN_KEYID) endif else DEB_RELEASE ?= 100.git$(DATE)$(GITINFO) # Do not sign unofficial builds DEBUILD_OPTS += -uc -us DPUT_OPTS += -u endif DEBUILD = $(DEBUILD_BIN) $(DEBUILD_OPTS) DEB_PPA ?= ppa # Choose the desired Ubuntu release: lucid precise saucy trusty DEB_DIST ?= unstable # pbuilder parameters PBUILDER_ARCH ?= amd64 PBUILDER_CACHE_DIR = /var/cache/pbuilder PBUILDER_BIN ?= pbuilder PBUILDER_OPTS ?= --debootstrapopts --variant=buildd --architecture $(PBUILDER_ARCH) --debbuildopts -b # ansible-test parameters ANSIBLE_TEST ?= bin/ansible-test TEST_FLAGS ?= # ansible-test units parameters (make test / make test-py3) PYTHON_VERSION ?= $(shell python2 -c 'import sys; print("%s.%s" % sys.version_info[:2])') PYTHON3_VERSION ?= $(shell python3 -c 'import sys; print("%s.%s" % sys.version_info[:2])') # ansible-test integration parameters (make integration) IMAGE ?= centos7 TARGET ?= ######################################################## .PHONY: all all: clean python .PHONY: tests tests: $(ANSIBLE_TEST) units -v --python $(PYTHON_VERSION) $(TEST_FLAGS) .PHONY: tests-py3 tests-py3: $(ANSIBLE_TEST) units -v --python $(PYTHON3_VERSION) $(TEST_FLAGS) .PHONY: integration integration: $(ANSIBLE_TEST) integration -v --docker $(IMAGE) $(TARGET) $(TEST_FLAGS) # Regenerate %.1.rst if %.1.rst.in has been modified more # recently than %.1.rst. %.1.rst: %.1.rst.in sed "s/%VERSION%/$(VERSION)/" $< > $@ rm $< # Regenerate %.1 if %.1.rst or release.py has been modified more # recently than %.1. (Implicitly runs the %.1.rst recipe) %.1: %.1.rst lib/ansible/release.py $(ASCII2MAN) .PHONY: clean clean: @echo "Cleaning up distutils stuff" rm -rf build rm -rf dist rm -rf lib/ansible*.egg-info/ @echo "Cleaning up byte compiled python stuff" find . -type f -regex ".*\.py[co]$$" -delete find . -type d -name "__pycache__" -delete @echo "Cleaning up editor backup files" find . -type f -not -path ./test/units/inventory_test_data/group_vars/noparse/all.yml~ \( -name "*~" -or -name "#*" \) -delete find . -type f \( -name "*.swp" \) -delete @echo "Cleaning up manpage stuff" find ./docs/man -type f -name "*.xml" -delete find ./docs/man -type f -name "*.rst" -delete find ./docs/man/man3 -type f -name "*.3" -delete rm -f ./docs/man/man1/* @echo "Cleaning up output from test runs" rm -rf test/test_data rm -rf logs/ rm -rf .cache/ rm -f test/units/.coverage* rm -rf test/results/*/* find test/ -type f -name '*.retry' -delete @echo "Cleaning up symlink cache" rm -f SYMLINK_CACHE.json @echo "Cleaning up Debian building stuff" rm -rf debian rm -rf deb-build rm -rf docs/json rm -rf docs/js @echo "Cleaning up docsite" $(MAKE) -C docs/docsite clean .PHONY: python python: $(PYTHON) setup.py build .PHONY: install install: $(PYTHON) setup.py install install_manpages: gzip -9 $(wildcard ./docs/man/man1/ansible*.1) cp $(wildcard ./docs/man/man1/ansible*.1.gz) $(PREFIX)/man/man1/ .PHONY: sdist_check sdist_check: $(PYTHON) -c 'import setuptools, sys; sys.exit(int(not (tuple(map(int, setuptools.__version__.split("."))) > (39, 2, 0))))' $(PYTHON) packaging/sdist/check-link-behavior.py .PHONY: sdist sdist: sdist_check clean docs _ANSIBLE_SDIST_FROM_MAKEFILE=1 $(PYTHON) setup.py sdist --dist-dir=$(SDIST_DIR) # Official releases generate the changelog as the last commit before the release. # Snapshots shouldn't result in new checkins so the changelog is generated as # part of creating the tarball. .PHONY: snapshot snapshot: sdist_check clean docs changelog _ANSIBLE_SDIST_FROM_MAKEFILE=1 $(PYTHON) setup.py sdist --dist-dir=$(SDIST_DIR) .PHONY: sdist_upload sdist_upload: clean docs $(PYTHON) setup.py sdist upload 2>&1 |tee upload.log .PHONY: changelog changelog: PYTHONPATH=./lib antsibull-changelog release -vv --use-ansible-doc && PYTHONPATH=./lib antsibull-changelog generate -vv --use-ansible-doc .PHONY: debian debian: sdist @for DIST in $(DEB_DIST) ; do \ mkdir -p deb-build/$${DIST} ; \ tar -C deb-build/$${DIST} -xvf dist/$(NAME)-$(VERSION).tar.gz ; \ cp -a packaging/debian deb-build/$${DIST}/$(NAME)-$(VERSION)/ ; \ sed -ie "s|%VERSION%|$(DEB_VERSION)|g;s|%RELEASE%|$(DEB_RELEASE)|;s|%DIST%|$${DIST}|g;s|%DATE%|$(DEB_DATE)|g" deb-build/$${DIST}/$(NAME)-$(VERSION)/debian/changelog ; \ done .PHONY: deb deb: deb-src @for DIST in $(DEB_DIST) ; do \ PBUILDER_OPTS="$(PBUILDER_OPTS) --distribution $${DIST} --basetgz $(PBUILDER_CACHE_DIR)/$${DIST}-$(PBUILDER_ARCH)-base.tgz --buildresult $(CURDIR)/deb-build/$${DIST}" ; \ $(PBUILDER_BIN) create $${PBUILDER_OPTS} --othermirror "deb http://archive.ubuntu.com/ubuntu $${DIST} universe" ; \ $(PBUILDER_BIN) update $${PBUILDER_OPTS} ; \ $(PBUILDER_BIN) build $${PBUILDER_OPTS} deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}.dsc ; \ done @echo "#############################################" @echo "Ansible DEB artifacts:" @for DIST in $(DEB_DIST) ; do \ echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \ done @echo "#############################################" # Build package outside of pbuilder, with locally installed dependencies. # Install BuildRequires as noted in packaging/debian/control. .PHONY: local_deb local_deb: debian @for DIST in $(DEB_DIST) ; do \ (cd deb-build/$${DIST}/$(NAME)-$(VERSION)/ && $(DEBUILD) -b) ; \ done @echo "#############################################" @echo "Ansible DEB artifacts:" @for DIST in $(DEB_DIST) ; do \ echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \ done @echo "#############################################" .PHONY: deb-src deb-src: debian @for DIST in $(DEB_DIST) ; do \ (cd deb-build/$${DIST}/$(NAME)-$(VERSION)/ && $(DEBUILD) -S) ; \ done @echo "#############################################" @echo "Ansible DEB artifacts:" @for DIST in $(DEB_DIST) ; do \ echo deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_source.changes ; \ done @echo "#############################################" .PHONY: deb-upload deb-upload: deb @for DIST in $(DEB_DIST) ; do \ $(DPUT_BIN) $(DPUT_OPTS) $(DEB_PPA) deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_amd64.changes ; \ done .PHONY: deb-src-upload deb-src-upload: deb-src @for DIST in $(DEB_DIST) ; do \ $(DPUT_BIN) $(DPUT_OPTS) $(DEB_PPA) deb-build/$${DIST}/$(NAME)_$(DEB_VERSION)-$(DEB_RELEASE)~$${DIST}_source.changes ; \ done .PHONY: epub epub: (cd docs/docsite/; CPUS=$(CPUS) $(MAKE) epub) # for arch or gentoo, read instructions in the appropriate 'packaging' subdirectory directory .PHONY: webdocs webdocs: (cd docs/docsite/; CPUS=$(CPUS) $(MAKE) docs) .PHONY: coredocs coredocs: (cd docs/docsite/; CPUS=$(CPUS) $(MAKE) coredocs) .PHONY: gettext gettext: (cd docs/docsite/; CPUS=$(CPUS) $(MAKE) gettext) .PHONY: generate-po generate-po: (cd docs/docsite/; CPUS=$(CPUS) LANGUAGES=$(LANGUAGES) $(MAKE) generate-po) .PHONY: needs-translation needs-translation: (cd docs/docsite/; CPUS=$(CPUS) LANGUAGES=$(LANGUAGES) $(MAKE) needs-translation) .PHONY: linkcheckdocs linkcheckdocs: (cd docs/docsite/; CPUS=$(CPUS) $(MAKE) linkcheckdocs) .PHONY: generate_rst generate_rst: lib/ansible/cli/*.py mkdir -p ./docs/man/man1/ ; \ $(PYTHON) $(GENERATE_CLI) --template-file=docs/templates/man.j2 --output-dir=docs/man/man1/ --output-format man lib/ansible/cli/*.py docs: generate_rst $(MAKE) $(MANPAGES) .PHONY: alldocs alldocs: docs webdocs version: @echo $(VERSION) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383731.253559 ansible-core-2.12.0/PKG-INFO0000644000000000000000000001764600000000000015211 0ustar00rootroot00000000000000Metadata-Version: 1.2 Name: ansible-core Version: 2.12.0 Summary: Radically simple IT automation Home-page: https://ansible.com/ Author: Ansible, Inc. Author-email: info@ansible.com License: GPLv3+ Project-URL: Bug Tracker, https://github.com/ansible/ansible/issues Project-URL: CI: Azure Pipelines, https://dev.azure.com/ansible/ansible/ Project-URL: Code of Conduct, https://docs.ansible.com/ansible/latest/community/code_of_conduct.html Project-URL: Documentation, https://docs.ansible.com/ansible/ Project-URL: Mailing lists, https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information Project-URL: Source Code, https://github.com/ansible/ansible Description: |PyPI version| |Docs badge| |Chat badge| |Build Status| |Code Of Conduct| |Mailing Lists| |License| |CII Best Practices| ******* Ansible ******* Ansible is a radically simple IT automation system. It handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex changes like zero-downtime rolling updates with load balancers easy. More information on the Ansible `website `_. Design Principles ================= * Have an extremely simple setup process with a minimal learning curve. * Manage machines quickly and in parallel. * Avoid custom-agents and additional open ports, be agentless by leveraging the existing SSH daemon. * Describe infrastructure in a language that is both machine and human friendly. * Focus on security and easy auditability/review/rewriting of content. * Manage new remote machines instantly, without bootstrapping any software. * Allow module development in any dynamic language, not just Python. * Be usable as non-root. * Be the easiest IT automation system to use, ever. Use Ansible =========== You can install a released version of Ansible with ``pip`` or a package manager. See our `installation guide `_ for details on installing Ansible on a variety of platforms. Power users and developers can run the ``devel`` branch, which has the latest features and fixes, directly. Although it is reasonably stable, you are more likely to encounter breaking changes when running the ``devel`` branch. We recommend getting involved in the Ansible community if you want to run the ``devel`` branch. Get Involved ============ * Read `Community Information `_ for all kinds of ways to contribute to and interact with the project, including mailing list information and how to submit bug reports and code to Ansible. * Join a `Working Group `_, an organized community devoted to a specific technology domain or platform. * Submit a proposed code update through a pull request to the ``devel`` branch. * Talk to us before making larger changes to avoid duplicate efforts. This not only helps everyone know what is going on, but it also helps save time and effort if we decide some changes are needed. * For a list of email lists, IRC channels and Working Groups, see the `Communication page `_ Coding Guidelines ================= We document our Coding Guidelines in the `Developer Guide `_. We particularly suggest you review: * `Contributing your module to Ansible `_ * `Conventions, tips, and pitfalls `_ Branch Info =========== * The ``devel`` branch corresponds to the release actively under development. * The ``stable-2.X`` branches correspond to stable releases. * Create a branch based on ``devel`` and set up a `dev environment `_ if you want to open a PR. * See the `Ansible release and maintenance `_ page for information about active branches. Roadmap ======= Based on team and community feedback, an initial roadmap will be published for a major or minor version (ex: 2.7, 2.8). The `Ansible Roadmap page `_ details what is planned and how to influence the roadmap. Authors ======= Ansible was created by `Michael DeHaan `_ and has contributions from over 5000 users (and growing). Thanks everyone! `Ansible `_ is sponsored by `Red Hat, Inc. `_ License ======= GNU General Public License v3.0 or later See `COPYING `_ to see the full text. .. |PyPI version| image:: https://img.shields.io/pypi/v/ansible-core.svg :target: https://pypi.org/project/ansible-core .. |Docs badge| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg :target: https://docs.ansible.com/ansible/latest/ .. |Build Status| image:: https://dev.azure.com/ansible/ansible/_apis/build/status/CI?branchName=devel :target: https://dev.azure.com/ansible/ansible/_build/latest?definitionId=20&branchName=devel .. |Chat badge| image:: https://img.shields.io/badge/chat-IRC-brightgreen.svg :target: https://docs.ansible.com/ansible/latest/community/communication.html .. |Code Of Conduct| image:: https://img.shields.io/badge/code%20of%20conduct-Ansible-silver.svg :target: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html :alt: Ansible Code of Conduct .. |Mailing Lists| image:: https://img.shields.io/badge/mailing%20lists-Ansible-orange.svg :target: https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information :alt: Ansible mailing lists .. |License| image:: https://img.shields.io/badge/license-GPL%20v3.0-brightgreen.svg :target: COPYING :alt: Repository License .. |CII Best Practices| image:: https://bestpractices.coreinfrastructure.org/projects/2372/badge :target: https://bestpractices.coreinfrastructure.org/projects/2372 :alt: Ansible CII Best Practices certification Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) Classifier: Natural Language :: English Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Topic :: System :: Installation/Setup Classifier: Topic :: System :: Systems Administration Classifier: Topic :: Utilities Requires-Python: >=3.8 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/README.rst0000644000000000000000000001310100000000000015561 0ustar00rootroot00000000000000|PyPI version| |Docs badge| |Chat badge| |Build Status| |Code Of Conduct| |Mailing Lists| |License| |CII Best Practices| ******* Ansible ******* Ansible is a radically simple IT automation system. It handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex changes like zero-downtime rolling updates with load balancers easy. More information on the Ansible `website `_. Design Principles ================= * Have an extremely simple setup process with a minimal learning curve. * Manage machines quickly and in parallel. * Avoid custom-agents and additional open ports, be agentless by leveraging the existing SSH daemon. * Describe infrastructure in a language that is both machine and human friendly. * Focus on security and easy auditability/review/rewriting of content. * Manage new remote machines instantly, without bootstrapping any software. * Allow module development in any dynamic language, not just Python. * Be usable as non-root. * Be the easiest IT automation system to use, ever. Use Ansible =========== You can install a released version of Ansible with ``pip`` or a package manager. See our `installation guide `_ for details on installing Ansible on a variety of platforms. Power users and developers can run the ``devel`` branch, which has the latest features and fixes, directly. Although it is reasonably stable, you are more likely to encounter breaking changes when running the ``devel`` branch. We recommend getting involved in the Ansible community if you want to run the ``devel`` branch. Get Involved ============ * Read `Community Information `_ for all kinds of ways to contribute to and interact with the project, including mailing list information and how to submit bug reports and code to Ansible. * Join a `Working Group `_, an organized community devoted to a specific technology domain or platform. * Submit a proposed code update through a pull request to the ``devel`` branch. * Talk to us before making larger changes to avoid duplicate efforts. This not only helps everyone know what is going on, but it also helps save time and effort if we decide some changes are needed. * For a list of email lists, IRC channels and Working Groups, see the `Communication page `_ Coding Guidelines ================= We document our Coding Guidelines in the `Developer Guide `_. We particularly suggest you review: * `Contributing your module to Ansible `_ * `Conventions, tips, and pitfalls `_ Branch Info =========== * The ``devel`` branch corresponds to the release actively under development. * The ``stable-2.X`` branches correspond to stable releases. * Create a branch based on ``devel`` and set up a `dev environment `_ if you want to open a PR. * See the `Ansible release and maintenance `_ page for information about active branches. Roadmap ======= Based on team and community feedback, an initial roadmap will be published for a major or minor version (ex: 2.7, 2.8). The `Ansible Roadmap page `_ details what is planned and how to influence the roadmap. Authors ======= Ansible was created by `Michael DeHaan `_ and has contributions from over 5000 users (and growing). Thanks everyone! `Ansible `_ is sponsored by `Red Hat, Inc. `_ License ======= GNU General Public License v3.0 or later See `COPYING `_ to see the full text. .. |PyPI version| image:: https://img.shields.io/pypi/v/ansible-core.svg :target: https://pypi.org/project/ansible-core .. |Docs badge| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg :target: https://docs.ansible.com/ansible/latest/ .. |Build Status| image:: https://dev.azure.com/ansible/ansible/_apis/build/status/CI?branchName=devel :target: https://dev.azure.com/ansible/ansible/_build/latest?definitionId=20&branchName=devel .. |Chat badge| image:: https://img.shields.io/badge/chat-IRC-brightgreen.svg :target: https://docs.ansible.com/ansible/latest/community/communication.html .. |Code Of Conduct| image:: https://img.shields.io/badge/code%20of%20conduct-Ansible-silver.svg :target: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html :alt: Ansible Code of Conduct .. |Mailing Lists| image:: https://img.shields.io/badge/mailing%20lists-Ansible-orange.svg :target: https://docs.ansible.com/ansible/latest/community/communication.html#mailing-list-information :alt: Ansible mailing lists .. |License| image:: https://img.shields.io/badge/license-GPL%20v3.0-brightgreen.svg :target: COPYING :alt: Repository License .. |CII Best Practices| image:: https://bestpractices.coreinfrastructure.org/projects/2372/badge :target: https://bestpractices.coreinfrastructure.org/projects/2372 :alt: Ansible CII Best Practices certification ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383729.703559 ansible-core-2.12.0/SYMLINK_CACHE.json0000644000000000000000000000063300000000000017004 0ustar00rootroot00000000000000{"script": {"ansible": ["ansible-config", "ansible-console", "ansible-doc", "ansible-galaxy", "ansible-inventory", "ansible-playbook", "ansible-pull", "ansible-vault"]}, "library": {"../release.py": ["ansible/module_utils/ansible_release.py"], "../_util/target/common/constants.py": ["ansible_test/_internal/constants.py"], "main.py": ["ansible_test/_util/controller/sanity/validate-modules/validate-modules"]}}././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.932559 ansible-core-2.12.0/bin/0000755000000000000000000000000000000000000014646 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible0000777000000000000000000000000000000000000026712 2../lib/ansible/cli/scripts/ansible_cli_stub.pyustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-config0000777000000000000000000000000000000000000021006 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-connection0000777000000000000000000000000000000000000033266 2../lib/ansible/cli/scripts/ansible_connection_cli_stub.pyustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-console0000777000000000000000000000000000000000000021203 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-doc0000777000000000000000000000000000000000000020306 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-galaxy0000777000000000000000000000000000000000000021026 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-inventory0000777000000000000000000000000000000000000021576 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-playbook0000777000000000000000000000000000000000000021361 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.413556 ansible-core-2.12.0/bin/ansible-pull0000777000000000000000000000000000000000000020515 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.414556 ansible-core-2.12.0/bin/ansible-test0000777000000000000000000000000000000000000033657 2../test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.pyustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.414556 ansible-core-2.12.0/bin/ansible-vault0000777000000000000000000000000000000000000020674 2ansibleustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.932559 ansible-core-2.12.0/changelogs/0000755000000000000000000000000000000000000016210 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.414556 ansible-core-2.12.0/changelogs/CHANGELOG-v2.12.rst0000644000000000000000000014020000000000000020774 0ustar00rootroot00000000000000==================================================== ansible-core 2.12 "Dazed and Confused" Release Notes ==================================================== .. contents:: Topics v2.12.0 ======= Release Summary --------------- | Release Date: 2021-11-05 | `Porting Guide `__ Major Changes ------------- - Python Controller Requirement - Python 3.8 or newer is required for the control node (the machine that runs Ansible) (https://github.com/ansible/ansible/pull/74013) - ansible-test - All "cloud" plugins which use containers can now be used with all POSIX and Windows hosts. Previously the plugins did not work with Windows at all, and support for hosts created with the ``--remote`` option was inconsistent. - ansible-test - Collections can now specify controller and target specific integration test requirements and constraints. If provided, they take precedence over the previously available requirements and constraints files. - ansible-test - Integration tests run with the ``integration`` command can now be executed on two separate hosts instead of always running on the controller. The target host can be one provided by ``ansible-test`` or by the user, as long as it is accessible using SSH. - ansible-test - Most container features are now supported under Podman. Previously a symbolic link for ``docker`` pointing to ``podman`` was required. - ansible-test - New ``--controller`` and ``--target`` / ``--target-python`` options have been added to allow more control over test environments. - ansible-test - Python 3.8 - 3.10 are now required to run ``ansible-test``, thus matching the Ansible controller Python requirements. Older Python versions (2.6 - 2.7 and 3.5 - 3.10) can still be the target for relevant tests. - ansible-test - SSH port forwarding and redirection is now used exclusively to make container ports available on non-container hosts. When testing on POSIX systems this requires SSH login as root. Previously SSH port forwarding was combined with firewall rules or other port redirection methods, with some platforms being unsupported. - ansible-test - Sanity tests always run in isolated Python virtual environments specific to the requirements of each test. The environments are cached. - ansible-test - Sanity tests are now separated into two categories, controller and target. All tests except ``import`` and ``compile`` are controller tests. The controller tests always run using the same Python version used to run ``ansible-test``. The target tests use the Python version(s) specified by the user, or all available Python versions. - ansible-test - Sanity tests now use fully pinned requirements that are independent of each other and other test types. - ansible-test - Tests run with the ``centos6`` and ``default`` test containers now use a PyPI proxy container to access PyPI when Python 2.6 is used. This allows tests running under Python 2.6 to continue functioning even though PyPI is discontinuing support for non-SNI capable clients. - ansible-test - The ``future-import-boilerplate`` and ``metaclass-boilerplate`` sanity tests are limited to remote-only code. Additionally, they are skipped for collections which declare no support for Python 2.x. - ansible-test - The ``import`` and ``compile`` sanity tests limit remote-only Python version checks to remote-only code. - ansible-test - Unit tests for controller-only code now require Python 3.8 or later. - ansible-test - Version neutral sanity tests now require Python 3.8 or later. - junit callback - The ``junit_xml`` and ``ordereddict`` Python modules are no longer required to use the ``junit`` callback plugin. Minor Changes ------------- - Add ``end_batch`` meta task. - Allow connection and become passwords to be set by file/executable script. Also document this was already the case for vault. - CLI - Remove ``__requires__`` attribute for ``pkg_resources`` - Collections can define action_groups in ``meta/runtime.yml``. - Introduce a config option to enable/disable emitting warning about Jinja2 version being old for ``jinja2_native``. The option is on by default, only in CI it is off. - Make the code structure of ansible-doc's generic snippet feature more maintainable. - On RHEL 9, CentOS Stream 9 etc., use /usr/bin/python3 as the default interpreter; /usr/libexec/platform-python is just a backwards-compatibility symbolic link there. - PowerShell - Added support for optional module_util imports by scanning for ``-Optional`` at the end of the import declaration - Python 2.6 Target Support - Deprecate Python 2.6 for targets, requiring Python 2.7 or newer. ``ansible-core==2.13`` will drop support for Python 2.6. (https://github.com/ansible/ansible/pull/74165) - Task - Add a resolved_action attribute for Task objects to get the final resolved plugin. - Templar - remove ``_fail_on_lookup_errors`` and ``_fail_on_filter_errors`` instance variables that were never used. (https://github.com/ansible/ansible/pull/73785) - The AnsiballZ Python wrapper now changes the working directory to ``~`` or ``/`` if the current one is not accessible. This allows become to drop privileges on macOS when using pipelining. - Update test container ansible-core-test-container to version 3.6.0 - Update test container ansible-core-test-container to version 3.7.0 - Update test container default-test-container to version 3.6.0 - Update test container default-test-container to version 3.7.0 - Update vendored copy of ``six`` to 1.16.0 to eliminate warnings for deprecated python loader methods in Python 3.10+ (https://github.com/ansible/ansible/issues/74659) - Update vendored copy of distro to 1.6.0 - Vendor ``distutils.version`` due to it's deprecation in Python 3.10 and impending removal in Python 3.12 (https://github.com/ansible/ansible/issues/74599) - YAML parsing - Create common utils for loading and dumping YAML that prefer the C extensions if available - ``include_role`` - Allow use of ``omit`` in the ``from_*`` arguments (https://github.com/ansible/ansible/issues/66349) - ``uri``/``get_url`` - Expose ``unredirected_headers`` to modules to allow user control - `ansible.plugins.callback.CallbackBase.host_label()` has been factored out as a static method (https://github.com/ansible/ansible/pull/73814). - action_groups can include actions from other groups by using the special ``metadata`` dictionary field. - add a quick short circuit when checking if a string is a template to improve performance on large strings (https://github.com/ansible/ansible/issues/74336) - add host label to retry print statements - added new function to module utils to choose best possible locale. - adds the ``undef`` keyword to the templating environment. This allows for directly creating Undefined values in templates. It is most useful for providing a hint for variables which must be overridden. - ansbile-doc now also shows snippets for inventory and lookup, adding to existing modules. - ansible adhoc, clarified the help to some options, also added some comments to code. - ansible-cli - remove unnecessary trailing space in ``ansible --version`` (https://github.com/ansible/ansible/issues/74875). - ansible-config can now list and dump for specific documentable plugins by specifying them in the command line - ansible-config has new 'init' option to create, highly commented, example configurations as ini (ansible.cfg), environment variables (shell) or Ansible variable files (YAML) - ansible-config now supports displaying plugin configuration info. - ansible-doc - ``version_added`` in ``attributes`` now comes with ``version_added_collection`` (https://github.com/ansible/ansible/pull/74602). - ansible-doc - show ``version_added`` for the plugin/module itself in text output, and improve ``version_added`` formatting (https://github.com/ansible/ansible/pull/73602). - ansible-doc now supports 'attributes' for plugins as per proposal. - ansible-doc pretty cli options output. - ansible-doc, improve handling of rstisms, try to make the display more meaningfull for the terminal users. - ansible-galaxy - Allow specification of client_id override value for Keycloak Token (https://github.com/ansible/ansible/issues/75593). - ansible-galaxy - Allow validate_certs to be configured for individual Galaxy servers (https://github.com/ansible/ansible/issues/75677). - ansible-galaxy - Installing a collection from a git repository without specifying a version (or using the version ``HEAD``) will clone the repository using --depth=1. - ansible-galaxy - Non-HTTP exceptions from Galaxy servers are now a warning and only fatal if the collection to download|install|verify is not available from any of the servers (https://github.com/ansible/ansible/issues/75443). - ansible-test - A new ``base`` test container is available. It is similar to the ``default`` test container, but contains no pre-installed Python packages other than ``pip`` and its dependencies. - ansible-test - Add RHEL 8.4 as a remote. - ansible-test - Add ``--prime-venvs`` option to create virtual environments without running tests. - ansible-test - Add constraint for ``decorator`` for Python versions prior to 3.5. - ansible-test - Add support for Windows Server 2022. - ansible-test - Add support for an ansible-test configuration file in collections under ``tests/config.yml``. - ansible-test - Add support for testing with Python 3.10. - ansible-test - Added a ``--prime-containers`` option to support downloading containers without running tests. - ansible-test - Adding DigitalOcean cloud support to ansible-test (https://github.com/ansible/ansible/pull/74222). - ansible-test - All "cloud" plugins have been refactored for more consistency. For those that use docker containers, management of the containers has been standardized. - ansible-test - All "cloud" plugins now use fixed hostnames and ports in tests. Previously some tests used IP addresses and/or randomly assigned ports. - ansible-test - Changes made to the ``hosts`` file on test systems are now done using an Ansible playbook for both POSIX and Windows systems. Changes are applied before a test target runs and are reverted after the test target finishes. - ansible-test - Clean up code in the cloud plugins. - ansible-test - Collections can declare their remote-only code (modules/module_utils and related tests) as controller-only. - ansible-test - Collections can limit the Python versions used for testing their remote-only code (modules/module_utils and related tests). - ansible-test - Command line help has been updated to hide the ``--remote`` option (and related options) when the user lacks an API key to use the feature. - ansible-test - Constraints provided by ``ansible-test`` for Python package installs have been reduced. - ansible-test - Default settings are now applied to unknown versions of known ``--remote`` platforms. - ansible-test - Distribution specific test containers have been updated to version 3.0.0. - ansible-test - Environment checking (``pip``, ``python``, ``~/.ssh/known_hosts``, etc.) is no longer performed when running integration tests. - ansible-test - Environment variables exposed by "cloud" plugins are now available to the controller for role based tests. Previously only script based tests had access to the exposed environment variables. - ansible-test - Fedora 32 and 33 (``fedora32`` and ``fedora33``) containers have been updated and now allow for ssh in more container environments. - ansible-test - Fedora 34 (``fedora34``) container has been added. - ansible-test - Installation of ``cryptography`` no longer occurs when it is already installed. This avoids downgrading existing OS packages. - ansible-test - Minor code cleanup. - ansible-test - More efficient string splitting. - ansible-test - Most scripts used internally by ``ansible-test`` no longer have a shebang or the executable bit set. - ansible-test - Move code from ``_data`` directory to ``_util`` directory. - ansible-test - Relocate change classification code. - ansible-test - Remove CI provider support for Shippable, now that the service has been discontinued. - ansible-test - Remove check for legacy ``core`` and ``extras`` directories. - ansible-test - Remove deprecated container ``fedora32``. - ansible-test - Remove deprecated remote platforms ``freebsd/11.4`` and ``rhel/8.3```. - ansible-test - Removed the warning filter for ``PyYAML`` in the ``import`` sanity test. - ansible-test - Removed unused pip constraints. Collections may need to add their own constraints if they depended on any which were removed. - ansible-test - Reorganize code for individual commands. - ansible-test - Reorganize integration test implementation by command. - ansible-test - Rewrite the ``compile`` sanity test to improve error handling and support Python 3.10. - ansible-test - Sanity test warnings relating to Python version support have been improved. - ansible-test - Set minimum version constraints for ``pytest``. - ansible-test - Split out shell command implementation. - ansible-test - The "injector" scripts are now generated at runtime to avoid issues with symlinks and shebangs. - ansible-test - The HTTP Tester can now be used without the ``--docker`` or `--remote`` options. It still requires use of the ``docker`` command to run the container. - ansible-test - The HTTP Tester has been converted to a "cloud" plugin and can now be requested using the ``cloud/httptester`` alias. The original ``needs/httptester`` alias is still supported for backwards compatibility. - ansible-test - The ``--docker-keep-git`` option (used only for testing ansible-core) has been renamed to ``--keep-git``. - ansible-test - The ``--python`` option can be used without another delegation option such as the ``--venv`` or ``--docker`` options. - ansible-test - The ``ansible-test coverage`` commands ``combine``, ``report``, ``html`` and ``xml`` now support delegation. - ansible-test - The ``default`` test container has been updated to version 3.4.0 and now uses Python 3.9 by default instead of Python 3.6. - ansible-test - The ``docker run`` option ``--link`` is no longer used to connect test containers. As a result, changes are made to the ``/etc/hosts`` file as needed on all test containers. Previously containers which were used with the ``--link`` option did not require changes to the ``/etc/hosts`` file. - ansible-test - The ``import`` sanity test now requires that Ansible modules guard instantiation of ``AnsibleModule`` with a ``if __name__ == '__main__'`` conditional, or equivalent logic. - ansible-test - The ``import`` sanity test now requires that non-modules do not instantiate ``AnsibleModule`` on import. - ansible-test - The ``validate-modules`` sanity test codes ``ansible-deprecated-module`` and ``collection-deprecated-module`` have been added. - ansible-test - The ``validate-modules`` sanity test codes ``last-line-main-call``, ``missing-if-name-main`` and ``missing-main-call`` have been removed. - ansible-test - The ``validate-modules`` sanity test no longer enforces the ``missing-if-name-main``, ``last-line-main-call`` or ``missing-main-call`` checks on non-deleted Ansible modules. Modules are still required to instantiate ``AnsibleModule`` when ``__name__ == '__main__'``. - ansible-test - Unit tests are now run in separate contexts (``controller``, ``modules``, ``module_utils``), each using separate invocations of ``pytest``. - ansible-test - Unit tests other than ``modules`` and ``module_utils`` are now run only on Python versions supported by the controller (Python 3.8+). - ansible-test - Update ``typed-ast`` constraint to version 1.4.3 for compatibility with Python 3.10. - ansible-test - Update distribution test containers from version 2.0.1 to 2.0.2. - ansible-test - Update the Ansible Core and Ansible Collection default test containers to 3.2.0 and 3.2.2 respectively. - ansible-test - Update the ``base`` and ``default`` containers from Python 3.10.0rc2 to 3.10.0. - ansible-test - Update the ``import`` sanity test to avoid a new warning in Python 3.10. - ansible-test - Update the ``runtime-metadata`` sanity test to handle a new warning on Python 3.10. - ansible-test - Updated the ``default`` containers to version 4.0.1. - ansible-test - Updated the help message for failed tests in the ``azure`` test plugin. - ansible-test - Upgrade ``pylint`` to version 2.9.3 and update its dependencies to the latest versions as well. - ansible-test - Using an unknown ``--docker`` or ``--remote`` environment now requires specifying a Python version. - ansible-test - add freebsd/13.0 as a remote option. - ansible-test - aws creates and exposes a new tiny_prefix variable to provide a shorter prefix for the AWS tests. - ansible-test - display recent ``ssh`` debug logs after connection failures (https://github.com/ansible/ansible/pull/75374) - ansible-test - validate-modules now properly checks ``attributes`` for plugins (https://github.com/ansible/ansible/pull/74602). - ansible-test - virtualenv-isolated.sh is no longer provided. Prefer virtualenv.sh in its place. - ansible-test validate-modules - enforce that ``_info`` and ``_facts`` modules set ``supports_check_mode=True`` (https://github.com/ansible/ansible/pull/75324). - ansible-vault - remove support for ``PyCrypto`` (https://github.com/ansible/ansible/issues/72646) - apt - added an ``allow_downgrade`` option to enable safe downgrade of packages without using ``force`` which doesn't verify signatures (https://github.com/ansible/ansible/issues/29451, https://github.com/ansible/ansible/pull/74852). - apt, added a 'lock_timeout' to be more resilient when encountering the apt db already locked and handle it w/o haveing to rerun task. - async tasks - the use of the task-level ``ANSIBLE_ASYNC_DIR`` variable within ``environment:`` is no longer valid. Use the shell configuration variable ``async_dir`` instead. - async_wrapper, better reporting on timeout, slight refactor on reporting itself. - basic module_util - Clean up ``selinux`` compat import. - blockinfile - Remove unused code for Ansible 1.x. - cache base - More efficient string splitting. - callback API - implemented ``v2_runner_on_async_ok`` and ``v2_runner_on_async_failed`` callbacks (https://github.com/ansible/ansible/pull/74953). - cli scripts - remove trailing blank space in help after newline when outputting. - collection - match skip message as per role installation. - command - update the user warning message to point out command name (https://github.com/ansible/ansible/pull/74475). - config lookup now can handle plugin settings. - config, default site for ansible-core is now under /ansbile-core/. - connection base - Avoid using deprecated ``@abstractproperty`` decorator. - constructed - a new options ``trailing_separator`` and ``default_value`` to deal with key's value empty on keyed group. - cron - ``name`` is now a required parameter always - cron - ``reboot`` parameter has been dropped in favor of ``special_time: reboot`` - cron, removed previously deprecated 'reboot' and now requires either 'name' as unique identifier. - default callback plugin - displays output for ``v2_runner_on_async_ok`` and ``v2_runner_on_async_failed`` callbacks. - deprecate ``_remote_checksum()`` and remove all internal uses (https://github.com/ansible/ansible/pull/74848) - dnf - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397). - dnf - allow for ``download_only`` to be run without root privileges (https://github.com/ansible/ansible/issues/75530) - encrypt - add new parameter ``ident`` to specify version of BCrypt algorithm to be used (https://github.com/ansible/ansible/issues/74571). - fact cache - Remove deprecated backwards compatibility shim for the FactCache `update` method to accept multiple arguments. - fact cache - Remove the deprecated location for FactCache. Import FactCache from `ansible.vars.fact_cache` instead. - facts - add fiber channel facts for HP-UX (https://github.com/ansible/ansible/pull/57406) - galaxy - support role artifact download from API response ``download_url`` location (https://github.com/ansible/ansible/issues/73103). - get_distribution - ``lib.ansible.module_utils.common.sys_info.get_distribution`` now returns distribution information for all platforms not just Linux (https://github.com/ansible/ansible/issues/17587) - get_distribution_version - ``lib.ansible.module_utils.common.sys_info.get_distribution_version`` now returns the version for all platfroms not just Linux (https://github.com/ansible/ansible/issues/17587) - git - Add ``accept_newhostkey`` option (https://github.com/ansible/ansible/issues/69846). - hostname - add support RedOS (https://github.com/ansible/ansible/issues/74779). - import_role - Template tasks_from, vars_from, defaults_from, and handlers_from with --extra-vars (https://github.com/ansible/ansible/issues/69097). - include_vars - add ``hash_behaviour`` option (https://github.com/ansible/ansible/pull/72944). - ini - added new parameter ``allow_no_value`` to ini lookup plugin (https://github.com/ansible/ansible/issues/50594). - ini lookup - add case sensitive option (https://github.com/ansible/ansible/issues/74601) - interpreter discovery - allow the default list of ``INTERPRETER_PYTHON_FALLBACK`` to be changed using a variable - interpreter discovery - prefer Python 3 over Python 2 - inventory plugins - Remove the deprecated cache interface. Set top level keys in the inventory plugin's `_cache` attribute (a dictionary) instead. - jinja2_native - short-circuit ``ast.literal_eval`` for non-string values - module_utils distro - when a 'distro' package/module is in PYTHONPATH but isn't the real 'distro' package/module that we expect, gracefully fall back to our own bundled distro. - modules - add Anolis distro in hostname.py. project website https://openanolis.org/ - move all builtin modules to use the best possible locale function instead of hardcoding 'C'. - password - add new parameter ``ident`` to specify version of BCrypt algorithm to be used (https://github.com/ansible/ansible/issues/74571). - password - add new parameter ``seed`` in lookup plugin (https://github.com/ansible/ansible/pull/69775). - password_hash uses passlib default if option isn't set - playbook - Error if a playbook is an empty list instead of just skipping - playbook - Error if using ``include`` instead of ``import_playbook`` - replaced examples/ansible.cfg with instructions on how to generate an up to date copy. - service - add description how service module works internally (https://github.com/ansible/ansible/issues/74507). - service_facts now handles more states/statuses from systemd and in a more reliable way (failed, not-found, masked). - setup - add ``epoch_int`` option to date_time facts (https://github.com/ansible/ansible/pull/73822). - ssh - added pkcs11 support by adding the pkcs11_provider option in the ssh connection module. (https://www.github.com/ansible/ansible/pull/32829) - ssh connection, can not configure ssh_transfer_method with a variable. - ssh connection, ssh_transfer_method is now configurable via variable. - subelements lookup - Use generator in instance type check. - tempfile - Remove unnecessary conditional for creating a temporary directory. - template - Add comment attributes (``comment_start_string`` and ``comment_end_string``) - unicode utils - Fix ``__all__`` which was incorrectly declared as a string instead of a tuple. - user - Add ``umask`` option (https://github.com/ansible/ansible/issues/40359). - user module - Remove unused code. - validation testcases for check_* APIs (https://github.com/ansible/ansible/issues/55994). - winrm - Allow explicit environment variables to be passed through to the ``kinit`` call for Kerberos authentication - yaml dumper - YAML representer for AnsibleUndefined (https://github.com/ansible/ansible/issues/75072). - yum - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397). Breaking Changes / Porting Guide -------------------------------- - Action, module, and group names in module_defaults must be static values. Their values can still be templates. - Fully qualified 'ansible.legacy' plugin names are not included implicitly in action_groups. - Unresolvable groups, action plugins, and modules in module_defaults are an error. - ansible-test - Automatic installation of requirements for "cloud" test plugins no longer occurs. The affected test plugins are ``aws``, ``azure``, ``cs``, ``hcloud``, ``nios``, ``opennebula``, ``openshift`` and ``vcenter``. Collections should instead use one of the supported integration test requirements files, such as the ``tests/integration/requirements.txt`` file. - ansible-test - The HTTP Tester is no longer available with the ``ansible-test shell`` command. Only the ``integration`` and ``windows-integration`` commands provide HTTP Tester. - ansible-test - The ``--disable-httptester`` option is no longer available. The HTTP Tester is no longer optional for tests that specify it. - ansible-test - The ``--httptester`` option is no longer available. To override the container used for HTTP Tester tests, set the ``ANSIBLE_HTTP_TEST_CONTAINER`` environment variable instead. - ansible-test - Unit tests for ``modules`` and ``module_utils`` are now limited to importing only ``ansible.module_utils`` from the ``ansible`` module. - conditionals - ``when`` conditionals no longer automatically parse string booleans such as ``"true"`` and ``"false"`` into actual booleans. Any non-empty string is now considered true. The ``CONDITIONAL_BARE_VARS`` configuration variable no longer has any effect. - hostname - Drops any remaining support for Python 2.4 by using ``with open()`` to simplify exception handling code which leaked file handles in several spots - hostname - On FreeBSD, the string ``temporarystub`` no longer gets written to the hostname file in the get methods (and in check_mode). As a result, the default hostname will now appear as ``''`` (empty string) instead of ``temporarystub`` for consistency with other strategies. This means the ``before`` result will be different. - hostname - On OpenRC systems and Solaris, the ``before`` value will now be ``''`` (empty string) if the permanent hostname file does not exist, for consistency with other strategies. - intersect, difference, symmetric_difference, union filters - the default behavior is now to be case-sensitive (https://github.com/ansible/ansible/issues/74255) - unique filter - the default behavior is now to fail if Jinja2's filter fails and explicit ``case_sensitive=False`` as the Ansible's fallback is case-sensitive (https://github.com/ansible/ansible/pull/74256) Deprecated Features ------------------- - ansible-test - The ``--docker-no-pull`` option is deprecated and has no effect. - ansible-test - The ``--no-pip-check`` option is deprecated and has no effect. - include action is deprecated in favor of include_tasks, import_tasks and import_playbook. - module_utils' FileLock is scheduled to be removed, it is not used due to its unreliable nature. Removed Features (previously deprecated) ---------------------------------------- - The built-in module_util ``ansible.module_utils.common.removed`` was previously deprecated and has been removed. - connections, removed password check stubs that had been moved to become plugins. - task, inline parameters being auto coerced into variables has been removed. Security Fixes -------------- - Do not include params in exception when a call to ``set_options`` fails. Additionally, block the exception that is returned from being displayed to stdout. (CVE-2021-3620) - templating engine fix for not preserving usnafe status when trying to preserve newlines. CVE-2021-3583 Bugfixes -------- - Add RockyLinux to fact gathering (https://github.com/ansible/ansible/pull/74530). - Add unicode support to ``ansible-inventory`` CLI (https://github.com/ansible/ansible/issues/57378) - Add yaml representer for VarsWithSources (https://github.com/ansible/ansible/pull/68525). - Added page describing terminal plugins to docsite - AnsibleModule.set_mode_if_different - don't check file existence when check_mode is activated (https://github.com/ansible/ansible/issues/61185). - Apply ``display_failed_stderr`` callback option on loop item results. (https://github.com/ansible/ansible/issues/74864) - Binary GnuPG keys downloaded via URLs by the 'ansible.builtin.apt_key' module were corrupted so 'gpg' could not import them (https://github.com/ansible/ansible/issues/74424). - Ensure end_play ends play, not batch (https://github.com/ansible/ansible/issues/73971) - Ensure we get full path for extra vars into cliargs to avoid realpath issues after initial load. - Fix ``keys()`` implementation of ``BaseFileCacheModule`` to strip the prefix from the key and only return keys that share the same prefix as the cache. - Fix ``when`` evaluation on Native Jinja and Python 3.10. - Fix templating task action with host-specific vars (https://github.com/ansible/ansible/issues/75568) - Fully qualified 'ansible.legacy' and 'ansible.builtin' plugin names work in conjunction with module_defaults. - Give a warning instead of an error if a handler name contains undefined variables and has no listen topics (https://github.com/ansible/ansible/issues/58841). - Improve resilience of ``ansible-galaxy collection`` by increasing the page size to make fewer requests overall and retrying queries with a jittered exponential backoff when rate limiting HTTP codes (520 and 429) occur. (https://github.com/ansible/ansible/issues/74191) - Jinja2 globals should be accessible even when importing a template without the context (https://github.com/ansible/ansible/issues/75371) - PlayContext - Remove deprecated ``make_become_cmd`` (https://github.com/ansible/ansible/issues/74136) - PowerShell - Ignore the ``LIB`` environment variable when compiling C# Ansible code - Prevent ``ansible_failed_task`` from further templating (https://github.com/ansible/ansible/issues/74036) - Remove 'default' from ssh plugin as we want to rely on default from ssh itself or ssh/config. - Replace usage of private dnf.Base() attribute by future dnf API - Save unreachable hosts between plays by adding them to the PlayIterator's _play._removed_hosts (https://github.com/ansible/ansible/issues/66945). - Solaris - correct version check in svcadm_supports_sync (https://github.com/ansible/ansible/pull/73860). - Task depth - Prevent exception when the task depth exceeds Pythons recursion depth (https://github.com/ansible/ansible/issues/73996) - Templating - Ensure we catch exceptions when calling ``.filters()`` or ``.tests()`` on their respective plugins and properly error, instead of aborting which results in no filters being added to the jinja2 environment (https://github.com/ansible/ansible/pull/74127) - The ``apt_key`` module did not properly handle GnuPG errors (https://github.com/ansible/ansible/issues/74477) - The error message about the failure to import a ```gpg`` key by the ``apt_key`` module was incorrect (https://github.com/ansible/ansible/issues/74423). - Update network user guide to explain use of cli_parse and validate plugins. - Variable Manager - Only check if ``play.hosts`` is a template when the play hasn't been finalized (https://github.com/ansible/ansible/issues/73926) - WorkerProcess - Python 3.5 fix for workaround for stdout deadlock in multiprocessing shutdown to avoid process hangs. (https://github.com/ansible/ansible/issues/74149) - ``AnsibleModule.run_command`` - Address thread safety issues, concerning mutating the environment, current working directory, and umask. (https://github.com/ansible/ansible/issues/74783) - ``failed_when``/``changed_when`` - Catch templating errors to prevent masking of module output (https://github.com/ansible/ansible/issues/37187) - ``heuristic_log_sanitize`` - Return the full string if there is no password (https://github.com/ansible/ansible/issues/75542) - ``pip`` now uses the ``pip`` Python module installed for the Ansible module's Python interpreter, if available, unless ``executable`` or ``virtualenv`` were specified. - advanced_host_list inventory plugin - Fixed variable referenced before assignment when hostname/range could not be parsed. - ansiballz - avoid treating path to site_packages as regex; escape it. This prevents a crash when ansible is installed to, or running from, an oddly named directory like ``ansi[ble`` - ansible-doc - in text output, do not show empty ``version_added_collection`` values (https://github.com/ansible/ansible/pull/74999). - ansible-doc can now dump kewyords with --metadata-dump (still just for internal use) - ansible-doc, fix output for internal metadata dump option - ansible-doc, make inventory plugin selection for snippets generic and not a hardcoded list - ansible-galaxy - Fix a bug with build_ignore when installing collections from source (https://github.com/ansible/ansible/issues/75528). - ansible-galaxy - Fix handling HTTP exceptions from Galaxy servers. Continue to the next server in the list until the collection is found. - ansible-galaxy - Improve error message from dependency resolution when a candidate has inconsistent requirements (https://github.com/ansible/ansible/issues/75139). - ansible-inventory - handle an exception while parsing inventory in toml format (https://github.com/ansible/ansible/issues/74404). - ansible-playbook, more robust handling of --list-hosts and undefined vars in hosts keyword. - ansible-pull - update documentation for ``--directory`` option to clarify path must be absolute. - ansible-pull, restore other options to use as repo other than git. - ansible-test - Add constraint for ``pyspnego>=0.1.6`` for Python 3.10 - https://github.com/ansible/ansible/pull/74612 - ansible-test - Avoid publishing the port used by the ``pypi-test-container`` since it is only accessed by other containers. This avoids issues when trying to run tests in parallel on a single host. - ansible-test - Failure to download test results from a remote host no longer hide test failures. If a download failure occurs after tests fail, a warning will be issued instead. - ansible-test - Fix docker container IP address detection. The ``bridge`` network is no longer assumed to be the default. - ansible-test - Fix path to inventory file for ``windows-integration`` and ``network-integration`` commands for collections. - ansible-test - Fix traceback when generating coverage reports and no coverage directory exists. - ansible-test - Random port selection is no longer handled by ``ansible-test``, avoiding possible port conflicts. Previously ``ansible-test`` would, under some circumstances, use one host's available ports to determine those of another host. - ansible-test - Running tests in a single test run with multiple "cloud" plugins no longer results in port conflicts. Previously two or more containers with overlapping ports could not be used in the same test run. - ansible-test - Tab completion after options like ``--docker`` which accept an optional argument will no longer provide incorrect completions. - ansible-test - The ``--python`` and ``--venv`` options are no longer ignored by some commands, such as ``coverage``. - ansible-test - The ``docker inspect`` command is now used to check for existing images instead of the ``docker images`` command. This resolves an issue where a ``docker pull`` would be unnecessarily executed for an image referenced by checksum. - ansible-test - Update distribution test containers to version 3.1.0. - ansible-test - Use ``--strict`` for ``pytest`` on Python 2.6 since ``--strict-markers`` is not available. - ansible-test - Use documented API to retrieve build information from Azure Pipelines. - ansible-test - Use pwsh to generate correct coverage line counts for stub files to get a more accurate coverage result - ansible-test - Use the correct variable to reference the client's SSH key when generating inventory. - ansible-test - add packaging python module to ``ansible-doc`` sanity test requirements. - ansible-test - allow the same listening port on all container interfaces - ansible-test - ensure the correct unit test target is given when the ``__init__.py`` file is modified inside the connection plugins directory - ansible-test - make the ``a/`` and ``b/`` prefixes an optional match since these can be turned off with the ``diff.noprefix`` setting in ``git`` - ansible-test - restrict ``packaging`` to ``< 21.0`` for Python ``< 3.6`` (https://github.com/ansible/ansible/pull/75186). - ansible-test pslint - Fix error when encountering validation results that are highly nested - https://github.com/ansible/ansible/issues/74151 - ansible-test validate-modules - EXAMPLES will no longer be marked as invalid YAML when it uses Ansible-specific YAML tags (https://github.com/ansible/ansible/pull/74384). - ansible-test validate-modules - correctly validate positional parameters to ``AnsibleModules`` (https://github.com/ansible/ansible/pull/75332). - ansible.builtin.cron - Keep non-empty crontabs, when removing cron jobs (https://github.com/ansible/ansible/pull/74497). - ansible.utils.encrypt now handles missing or unusable 'crypt' library. - ansible_test - add constraint for ``MarkupSafe`` (https://github.com/ansible/ansible/pull/74666) - apt_key - set --recv argument as last one in apt-key command when using env var HTTP_PROXY (https://github.com/ansible/ansible/issues/74946) - arg_spec - remove unused imports - async_status, ensure we always get documented returns - async_status, resurrected module to deprecate for those that were invoking it directly. - basic - skip over module parameters which are used in ``journal.send`` API call (https://github.com/ansible/ansible/issues/71343). - become - fix a regression on Solaris where chmod can return 5 which we interpret as auth failure and stop trying become tmpdir permission fallbacks - become - work around setfacl not existing on modern Solaris (and possibly failing on some filesystems even when it does exist) - callbacks, restore displaying delegation to host as host label. - cli defaults for ssh args set to None as '' was bypassing normal default. - command - remove unreachable code path when trying to convert the value for ``chdir`` to bytes (https://github.com/ansible/ansible/pull/75036) - command module, clarify order of remove/creates checks. - command module, correctly handles chdir to symlinks. - command module, move to standarized messages in 'msg' vs abusing 'stdout'. - command module, now all options work in ad-hoc execution. - command module, now always returns what we documented as 'returns always'. - config - use ``callbacks_enabled`` instead ``callback_enabled`` in a deprecated message (https://github.com/ansible/ansible/issues/70028). - config lookup, can also handle collection plugins now - config, ensure 'quoted' lists from ini or env do not take the quotes literally as part of the list item. - connection ssh, no ssh_args cli option, so removed doc entry. - constants, internal _deprecated function always requires version. - correct doc links for become on warnings over world readable settings. - correctly use world readable setting since old constant is not 'settable' anymore. - dnf - align the return value of the list argument with the ``yum`` module (https://github.com/ansible/ansible/issues/75483) - dnf - properly capture transaction error (https://github.com/ansible/ansible/issues/72651) - dnf - refactor code to use `dnf whatprovides` API (https://github.com/ansible/ansible/issues/73503). - dnf - support non-english environments (https://github.com/ansible/ansible/issues/75021) - dnf module - Use all components of a package name to determine if it's installed (https://github.com/ansible/ansible/issues/75311). - do not trigger interpreter discovery in the forced_local module path as they should use the ansible playbook python unless otherwise configured. - facts - detect homebrew installed at /opt/homebrew/bin/brew - facts, service_mgr, handle issues if ps command fails or returns empty. - filter plugins - patch new versions of Jinja2 to prevent warnings/errors on renamed filter decorators (https://github.com/ansible/ansible/issues/74667) - find - fix a bug where ``size`` argument was ignored for regular files with ``file_type`` of ``any``. - find action, correctly convert path to text when warning about skiping. - find does not ignore errors from os.walk anymore and issues warnings as expected. - gather_facts, improved message on timeout. - gather_facts, package, service - fix using module_defaults for the modules in addition to the action plugins. (https://github.com/ansible/ansible/issues/72918) - get_bin_path, clarify with quotes what the missing required executable is. - get_url - Fixed checksum validation for binary files (leading asterisk) in checksum files (https://github.com/ansible/ansible/pull/74502). - getent, fix return data for when there are multiple results for the same key - git - Fix git path used when .git file is present (https://github.com/ansible/ansible/issues/75608). - host_group_vars vars plugin fixed ini entry, section and key were reversed. - hostname - Add Rocky Linux support - hostname - No longer modifies system files in get_* methods and therefore when consulted in check_mode (https://github.com/ansible/ansible/issues/66432) - include - Remove deprecated ``static`` argument for ``include`` (https://github.com/ansible/ansible/issues/74135) - includes - Remove the deprecated ability to specify ``tags`` as ``vars`` on includes (https://github.com/ansible/ansible/issues/74144) - ini lookup - better error on mixed/bad parameters - ini lookup - handle errors for duplicate keys and missing sections (https://github.com/ansible/ansible/issues/74601) - interpreter discovery - Debian 8 and lower will avoid unsupported Python3 version in interpreter discovery - interpreter discovery is now handling special (ansible_network_os) cases in less noisy ways. - interpreter_discovery - hide warning 'No python interpreters...' when ANSIBLE_PYTHON_INTERPRETER=auto_silent (https://github.com/ansible/ansible/issues/74274). - module_common - handle exception when multiple workers try to create the cache directory - module_defaults - Fix action defaults for legacy actions/modules (https://github.com/ansible/ansible/issues/75279). - module_utils - detect symlinked init systems, even if unable to read /proc/1/comm (https://github.com/ansible/ansible/issues/74866). - netconf - catch and handle exception to prevent stack trace when running in FIPS mode - network module_utils - fix bug where ``to_bits()`` returned the ``str`` type instead of a useful value. - paramiko_ssh - mark connection as connected when ``_connect()`` is called (https://github.com/ansible/ansible/issues/74081) - password - Handle passlib wrapped algos bsd_nthash, django_argon2, django_bcrypt, ldap_bcrypt, ldap_bsdi_crypt, ldap_des_crypt, ldap_hex_md5, ldap_hex_sha1, ldap_md5_crypt, ldap_pbkdf2_sha1, ldap_pbkdf2_sha256, ldap_pbkdf2_sha512, ldap_sha1_crypt, ldap_sha256_crypt, ldap_sha512_crypt, roundup_plaintext (https://github.com/ansible/ansible/pull/75527). - pause - ensure control characters are always set to an appropriate value (https://github.com/ansible/ansible/issues/73264) - pkg_mgr.py - Lower the priority of rpm-ostree detection to avoid false positives on systems not using it as the main package manager (https://github.com/ansible/ansible/issues/74578) - play - validate the ``hosts`` entry in a play (https://github.com/ansible/ansible/issues/65386) - playbook loaded from collection subdir now does not ignore subdirs. - plugin config now allows list type options to have multiple valid choices (#74225). - psrp - Always cleanup the last run pipeline if a second pipeline is invoked to avoid violating any resource limits. - psrp - Fix error when resetting a connection that was initialised but not connected - (https://github.com/ansible/ansible/issues/74092). - psrp - Try to clean up any server-side resources when resetting a connection. - recursive_diff - handle condition when parameters are not dict (https://github.com/ansible/ansible/issues/56249). - register - Ensure that ``register`` used on ``set_fact`` or ``include_vars`` does not automatically wrap the facts as unsafe. (https://github.com/ansible/ansible/issues/21088) - rekey_on_member - handle undefined positional arguments better. - remote tmpdir permissions - fix type error in macOS chmod ACL fallback (https://github.com/ansible/ansible/pull/74613). - replace - better handling of file operation exceptions (https://github.com/ansible/ansible/pull/74686). - roles - allow for role arg specs in new meta file (https://github.com/ansible/ansible/issues/74525). - roles - fix unexpected ``AttributeError`` when an empty ``argument_specs.yml`` is present (https://github.com/ansible/ansible/pull/75604). - roles - make sure argspec validation task is tagged with ``always`` (https://github.com/ansible/ansible/pull/74994). - roles - make sure argspec validation task templates suboptions (https://github.com/ansible/ansible/issues/75070). - schema validation now uses dynamic range of versions for valid deprecation entries vs hardcoded out of date list. - script inventory plugin - Remove deprecated caching support (https://github.com/ansible/ansible/issues/74143) - sequence - fix error message so that unrecognized options to the plugin display correctly as a list and normalize error messages. - service - compare version without LooseVersion API (https://github.com/ansible/ansible/issues/74488). - set ssh host_key_checking defaults to True, restoring original behaviour (https://github.com/ansible/ansible/issues/75168) - setup module should now not truncate hpux interface names. - setup module, fix filter to adjust for missing ``ansible_`` prefix on query. - setup, while gathering linux hardware facts be more resilient to errors and try to return more info. - slurp - Fix error messages for unreadable files and directories(https://github.com/ansible/ansible/issues/67340). - slurp - handle error when ``path`` is a directory and not a file (https://github.com/ansible/ansible/pull/74930). - slurp - improve the logic in the error handling and remove ``os.stat()`` call (https://github.com/ansible/ansible/pull/75038) - ssh connection now correctly handle ssh_transfer_method and scp_if_ssh interactions. - ssh connection, fix interaction between trasnfer settings options. - ssh connection, use self.host which has the most up2date info instead of pc.remote_addr - ssh_connection - rename ``retries`` to ``reconnection_retries`` to avoid conflicts with task vars (https://github.com/ansible/ansible/issues/75142). - ssh_connection - set the default for ``reconnection_retries`` back to ``0`` (https://github.com/ansible/ansible/issues/75142). - subversion - fix stack trace when getting information about the repository (https://github.com/ansible/ansible/issues/36498) - system_service - use a context manager for file handling. - task_executor, Actions using AnsibleActionFail/Skip will now propagate 'results' if given - task_executor/ssh_connection - use the ``retries`` value from ``ssh_connection`` settings, not the default from the ``Task`` field attributes (https://github.com/ansible/ansible/issues/75142). - template - ensure Jinja2 overrides from template header are used (https://github.com/ansible/ansible/issues/75275) - unarchive - allow extracting archives that contain files which size exceeds free system memory (https://github.com/ansible/ansible/issues/73985). - unarchive - fail when zipinfo binary is not found in executable paths (https://github.com/ansible/ansible/issues/39029). - unarchive - move failure for missing binary to ``can_handle_archive()`` rather than ``__init__()`` - uri - Fix traceback and provide error message when trying to use non-string or mapping for ``form-multipart`` body - https://github.com/ansible/ansible/issues/74276 - urls - Fix logic in matching ``unredirected_headers`` to perform case insensitive matching - validate_argument_spec, correct variable precedence and merge method and add missing examples - variable manager, avoid sourcing delegated variables when no inventory hostname is present. This affects scenarios like syntax check and imports. - version test - improve error message when an empty version is provided - yum - Fixed typo in failure message (https://github.com/ansible/ansible/pull/72964). - yum - When upgrading, every architecture of a package is now included in the module results, instead of just one (https://github.com/ansible/ansible/issues/73284). - yum - fix ``yumstate`` return value when wildcards are used in the ``list`` argument (https://github.com/ansible/ansible/issues/74557) - yum - fix parsing of multiple subsequent empty lines from ``yum check-update`` output (https://github.com/ansible/ansible/issues/70949) - yum - yum action plugin changes to support 'use' as an alias of 'use_backend' (https://github.com/ansible/ansible/issues/70774). Known Issues ------------ - ansible-test - Tab completion anywhere other than the end of the command with the new composite options will provide incorrect results. See https://github.com/kislyuk/argcomplete/issues/351 for additional details. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.414556 ansible-core-2.12.0/changelogs/CHANGELOG.rst0000644000000000000000000000051700000000000020234 0ustar00rootroot00000000000000Placeholder changelog ===================== This file is a placeholder; a version-specific ``CHANGELOG-vX.Y.rst`` will be generated during releases from fragments under changelogs/fragments. On release branches once a release has been created, consult the branch's version-specific file for changes that have occurred in that branch. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.415556 ansible-core-2.12.0/changelogs/changelog.yaml0000644000000000000000000020230400000000000021024 0ustar00rootroot00000000000000ancestor: 2.11.0 releases: 2.12.0: changes: release_summary: '| Release Date: 2021-11-05 | `Porting Guide `__ ' codename: Dazed and Confused fragments: - v2.12.0_summary.yaml release_date: '2021-11-05' 2.12.0b1: changes: breaking_changes: - Action, module, and group names in module_defaults must be static values. Their values can still be templates. - Fully qualified 'ansible.legacy' plugin names are not included implicitly in action_groups. - Unresolvable groups, action plugins, and modules in module_defaults are an error. - ansible-test - Automatic installation of requirements for "cloud" test plugins no longer occurs. The affected test plugins are ``aws``, ``azure``, ``cs``, ``hcloud``, ``nios``, ``opennebula``, ``openshift`` and ``vcenter``. Collections should instead use one of the supported integration test requirements files, such as the ``tests/integration/requirements.txt`` file. - ansible-test - The HTTP Tester is no longer available with the ``ansible-test shell`` command. Only the ``integration`` and ``windows-integration`` commands provide HTTP Tester. - ansible-test - The ``--disable-httptester`` option is no longer available. The HTTP Tester is no longer optional for tests that specify it. - ansible-test - The ``--httptester`` option is no longer available. To override the container used for HTTP Tester tests, set the ``ANSIBLE_HTTP_TEST_CONTAINER`` environment variable instead. - ansible-test - Unit tests for ``modules`` and ``module_utils`` are now limited to importing only ``ansible.module_utils`` from the ``ansible`` module. - conditionals - ``when`` conditionals no longer automatically parse string booleans such as ``"true"`` and ``"false"`` into actual booleans. Any non-empty string is now considered true. The ``CONDITIONAL_BARE_VARS`` configuration variable no longer has any effect. - hostname - Drops any remaining support for Python 2.4 by using ``with open()`` to simplify exception handling code which leaked file handles in several spots - hostname - On FreeBSD, the string ``temporarystub`` no longer gets written to the hostname file in the get methods (and in check_mode). As a result, the default hostname will now appear as ``''`` (empty string) instead of ``temporarystub`` for consistency with other strategies. This means the ``before`` result will be different. - hostname - On OpenRC systems and Solaris, the ``before`` value will now be ``''`` (empty string) if the permanent hostname file does not exist, for consistency with other strategies. - intersect, difference, symmetric_difference, union filters - the default behavior is now to be case-sensitive (https://github.com/ansible/ansible/issues/74255) - unique filter - the default behavior is now to fail if Jinja2's filter fails and explicit ``case_sensitive=False`` as the Ansible's fallback is case-sensitive (https://github.com/ansible/ansible/pull/74256) bugfixes: - Add RockyLinux to fact gathering (https://github.com/ansible/ansible/pull/74530). - Add unicode support to ``ansible-inventory`` CLI (https://github.com/ansible/ansible/issues/57378) - Add yaml representer for VarsWithSources (https://github.com/ansible/ansible/pull/68525). - Added page describing terminal plugins to docsite - AnsibleModule.set_mode_if_different - don't check file existence when check_mode is activated (https://github.com/ansible/ansible/issues/61185). - Apply ``display_failed_stderr`` callback option on loop item results. (https://github.com/ansible/ansible/issues/74864) - Binary GnuPG keys downloaded via URLs by the 'ansible.builtin.apt_key' module were corrupted so 'gpg' could not import them (https://github.com/ansible/ansible/issues/74424). - Ensure end_play ends play, not batch (https://github.com/ansible/ansible/issues/73971) - Ensure we get full path for extra vars into cliargs to avoid realpath issues after initial load. - Fix ``keys()`` implementation of ``BaseFileCacheModule`` to strip the prefix from the key and only return keys that share the same prefix as the cache. - Fix ``when`` evaluation on Native Jinja and Python 3.10. - Fix templating task action with host-specific vars (https://github.com/ansible/ansible/issues/75568) - Fully qualified 'ansible.legacy' and 'ansible.builtin' plugin names work in conjunction with module_defaults. - Give a warning instead of an error if a handler name contains undefined variables and has no listen topics (https://github.com/ansible/ansible/issues/58841). - Improve resilience of ``ansible-galaxy collection`` by increasing the page size to make fewer requests overall and retrying queries with a jittered exponential backoff when rate limiting HTTP codes (520 and 429) occur. (https://github.com/ansible/ansible/issues/74191) - Jinja2 globals should be accessible even when importing a template without the context (https://github.com/ansible/ansible/issues/75371) - PlayContext - Remove deprecated ``make_become_cmd`` (https://github.com/ansible/ansible/issues/74136) - PowerShell - Ignore the ``LIB`` environment variable when compiling C# Ansible code - Prevent ``ansible_failed_task`` from further templating (https://github.com/ansible/ansible/issues/74036) - Remove 'default' from ssh plugin as we want to rely on default from ssh itself or ssh/config. - Replace usage of private dnf.Base() attribute by future dnf API - Save unreachable hosts between plays by adding them to the PlayIterator's _play._removed_hosts (https://github.com/ansible/ansible/issues/66945). - Solaris - correct version check in svcadm_supports_sync (https://github.com/ansible/ansible/pull/73860). - Task depth - Prevent exception when the task depth exceeds Pythons recursion depth (https://github.com/ansible/ansible/issues/73996) - Templating - Ensure we catch exceptions when calling ``.filters()`` or ``.tests()`` on their respective plugins and properly error, instead of aborting which results in no filters being added to the jinja2 environment (https://github.com/ansible/ansible/pull/74127) - The ``apt_key`` module did not properly handle GnuPG errors (https://github.com/ansible/ansible/issues/74477) - The error message about the failure to import a ```gpg`` key by the ``apt_key`` module was incorrect (https://github.com/ansible/ansible/issues/74423). - Update network user guide to explain use of cli_parse and validate plugins. - Variable Manager - Only check if ``play.hosts`` is a template when the play hasn't been finalized (https://github.com/ansible/ansible/issues/73926) - WorkerProcess - Python 3.5 fix for workaround for stdout deadlock in multiprocessing shutdown to avoid process hangs. (https://github.com/ansible/ansible/issues/74149) - '``AnsibleModule.run_command`` - Address thread safety issues, concerning mutating the environment, current working directory, and umask. (https://github.com/ansible/ansible/issues/74783) ' - '``failed_when``/``changed_when`` - Catch templating errors to prevent masking of module output (https://github.com/ansible/ansible/issues/37187)' - '``heuristic_log_sanitize`` - Return the full string if there is no password (https://github.com/ansible/ansible/issues/75542) ' - '``pip`` now uses the ``pip`` Python module installed for the Ansible module''s Python interpreter, if available, unless ``executable`` or ``virtualenv`` were specified.' - advanced_host_list inventory plugin - Fixed variable referenced before assignment when hostname/range could not be parsed. - ansiballz - avoid treating path to site_packages as regex; escape it. This prevents a crash when ansible is installed to, or running from, an oddly named directory like ``ansi[ble`` - ansible-doc - in text output, do not show empty ``version_added_collection`` values (https://github.com/ansible/ansible/pull/74999). - ansible-doc can now dump kewyords with --metadata-dump (still just for internal use) - ansible-doc, fix output for internal metadata dump option - ansible-doc, make inventory plugin selection for snippets generic and not a hardcoded list - ansible-galaxy - Fix a bug with build_ignore when installing collections from source (https://github.com/ansible/ansible/issues/75528). - ansible-galaxy - Fix handling HTTP exceptions from Galaxy servers. Continue to the next server in the list until the collection is found. - ansible-galaxy - Improve error message from dependency resolution when a candidate has inconsistent requirements (https://github.com/ansible/ansible/issues/75139). - ansible-inventory - handle an exception while parsing inventory in toml format (https://github.com/ansible/ansible/issues/74404). - ansible-playbook, more robust handling of --list-hosts and undefined vars in hosts keyword. - ansible-pull - update documentation for ``--directory`` option to clarify path must be absolute. - ansible-pull, restore other options to use as repo other than git. - ansible-test - Add constraint for ``pyspnego>=0.1.6`` for Python 3.10 - https://github.com/ansible/ansible/pull/74612 - ansible-test - Avoid publishing the port used by the ``pypi-test-container`` since it is only accessed by other containers. This avoids issues when trying to run tests in parallel on a single host. - ansible-test - Failure to download test results from a remote host no longer hide test failures. If a download failure occurs after tests fail, a warning will be issued instead. - ansible-test - Fix docker container IP address detection. The ``bridge`` network is no longer assumed to be the default. - ansible-test - Fix traceback when generating coverage reports and no coverage directory exists. - ansible-test - Random port selection is no longer handled by ``ansible-test``, avoiding possible port conflicts. Previously ``ansible-test`` would, under some circumstances, use one host's available ports to determine those of another host. - ansible-test - Running tests in a single test run with multiple "cloud" plugins no longer results in port conflicts. Previously two or more containers with overlapping ports could not be used in the same test run. - ansible-test - Tab completion after options like ``--docker`` which accept an optional argument will no longer provide incorrect completions. - ansible-test - The ``--python`` and ``--venv`` options are no longer ignored by some commands, such as ``coverage``. - ansible-test - The ``docker inspect`` command is now used to check for existing images instead of the ``docker images`` command. This resolves an issue where a ``docker pull`` would be unnecessarily executed for an image referenced by checksum. - ansible-test - Use ``--strict`` for ``pytest`` on Python 2.6 since ``--strict-markers`` is not available. - ansible-test - Use documented API to retrieve build information from Azure Pipelines. - ansible-test - Use pwsh to generate correct coverage line counts for stub files to get a more accurate coverage result - ansible-test - add packaging python module to ``ansible-doc`` sanity test requirements. - ansible-test - allow the same listening port on all container interfaces - ansible-test - ensure the correct unit test target is given when the ``__init__.py`` file is modified inside the connection plugins directory - ansible-test - make the ``a/`` and ``b/`` prefixes an optional match since these can be turned off with the ``diff.noprefix`` setting in ``git`` - ansible-test - restrict ``packaging`` to ``< 21.0`` for Python ``< 3.6`` (https://github.com/ansible/ansible/pull/75186). - ansible-test validate-modules - EXAMPLES will no longer be marked as invalid YAML when it uses Ansible-specific YAML tags (https://github.com/ansible/ansible/pull/74384). - ansible-test validate-modules - correctly validate positional parameters to ``AnsibleModules`` (https://github.com/ansible/ansible/pull/75332). - ansible.builtin.cron - Keep non-empty crontabs, when removing cron jobs (https://github.com/ansible/ansible/pull/74497). - ansible.utils.encrypt now handles missing or unusable 'crypt' library. - ansible_test - add constraint for ``MarkupSafe`` (https://github.com/ansible/ansible/pull/74666) - apt_key - set --recv argument as last one in apt-key command when using env var HTTP_PROXY (https://github.com/ansible/ansible/issues/74946) - arg_spec - remove unused imports - async_status, ensure we always get documented returns - async_status, resurrected module to deprecate for those that were invoking it directly. - basic - skip over module parameters which are used in ``journal.send`` API call (https://github.com/ansible/ansible/issues/71343). - become - fix a regression on Solaris where chmod can return 5 which we interpret as auth failure and stop trying become tmpdir permission fallbacks - become - work around setfacl not existing on modern Solaris (and possibly failing on some filesystems even when it does exist) - callbacks, restore displaying delegation to host as host label. - cli defaults for ssh args set to None as '' was bypassing normal default. - command - remove unreachable code path when trying to convert the value for ``chdir`` to bytes (https://github.com/ansible/ansible/pull/75036) - command module, clarify order of remove/creates checks. - command module, correctly handles chdir to symlinks. - command module, move to standarized messages in 'msg' vs abusing 'stdout'. - command module, now all options work in ad-hoc execution. - command module, now always returns what we documented as 'returns always'. - config - use ``callbacks_enabled`` instead ``callback_enabled`` in a deprecated message (https://github.com/ansible/ansible/issues/70028). - config lookup, can also handle collection plugins now - config, ensure 'quoted' lists from ini or env do not take the quotes literally as part of the list item. - connection ssh, no ssh_args cli option, so removed doc entry. - constants, internal _deprecated function always requires version. - correct doc links for become on warnings over world readable settings. - correctly use world readable setting since old constant is not 'settable' anymore. - dnf - align the return value of the list argument with the ``yum`` module (https://github.com/ansible/ansible/issues/75483) - dnf - properly capture transaction error (https://github.com/ansible/ansible/issues/72651) - dnf - refactor code to use `dnf whatprovides` API (https://github.com/ansible/ansible/issues/73503). - dnf - support non-english environments (https://github.com/ansible/ansible/issues/75021) - dnf module - Use all components of a package name to determine if it's installed (https://github.com/ansible/ansible/issues/75311). - do not trigger interpreter discovery in the forced_local module path as they should use the ansible playbook python unless otherwise configured. - facts - detect homebrew installed at /opt/homebrew/bin/brew - facts, service_mgr, handle issues if ps command fails or returns empty. - filter plugins - patch new versions of Jinja2 to prevent warnings/errors on renamed filter decorators (https://github.com/ansible/ansible/issues/74667) - find - fix a bug where ``size`` argument was ignored for regular files with ``file_type`` of ``any``. - find action, correctly convert path to text when warning about skiping. - find does not ignore errors from os.walk anymore and issues warnings as expected. - gather_facts, improved message on timeout. - gather_facts, package, service - fix using module_defaults for the modules in addition to the action plugins. (https://github.com/ansible/ansible/issues/72918) - get_bin_path, clarify with quotes what the missing required executable is. - get_url - Fixed checksum validation for binary files (leading asterisk) in checksum files (https://github.com/ansible/ansible/pull/74502). - getent, fix return data for when there are multiple results for the same key - git - Fix git path used when .git file is present (https://github.com/ansible/ansible/issues/75608). - host_group_vars vars plugin fixed ini entry, section and key were reversed. - hostname - Add Rocky Linux support - hostname - No longer modifies system files in get_* methods and therefore when consulted in check_mode (https://github.com/ansible/ansible/issues/66432) - include - Remove deprecated ``static`` argument for ``include`` (https://github.com/ansible/ansible/issues/74135) - includes - Remove the deprecated ability to specify ``tags`` as ``vars`` on includes (https://github.com/ansible/ansible/issues/74144) - ini lookup - better error on mixed/bad parameters - ini lookup - handle errors for duplicate keys and missing sections (https://github.com/ansible/ansible/issues/74601) - interpreter discovery - Debian 8 and lower will avoid unsupported Python3 version in interpreter discovery - interpreter discovery is now handling special (ansible_network_os) cases in less noisy ways. - interpreter_discovery - hide warning 'No python interpreters...' when ANSIBLE_PYTHON_INTERPRETER=auto_silent (https://github.com/ansible/ansible/issues/74274). - module_common - handle exception when multiple workers try to create the cache directory - module_defaults - Fix action defaults for legacy actions/modules (https://github.com/ansible/ansible/issues/75279). - module_utils - detect symlinked init systems, even if unable to read /proc/1/comm (https://github.com/ansible/ansible/issues/74866). - netconf - catch and handle exception to prevent stack trace when running in FIPS mode - network module_utils - fix bug where ``to_bits()`` returned the ``str`` type instead of a useful value. - paramiko_ssh - mark connection as connected when ``_connect()`` is called (https://github.com/ansible/ansible/issues/74081) - password - Handle passlib wrapped algos bsd_nthash, django_argon2, django_bcrypt, ldap_bcrypt, ldap_bsdi_crypt, ldap_des_crypt, ldap_hex_md5, ldap_hex_sha1, ldap_md5_crypt, ldap_pbkdf2_sha1, ldap_pbkdf2_sha256, ldap_pbkdf2_sha512, ldap_sha1_crypt, ldap_sha256_crypt, ldap_sha512_crypt, roundup_plaintext (https://github.com/ansible/ansible/pull/75527). - pause - ensure control characters are always set to an appropriate value (https://github.com/ansible/ansible/issues/73264) - pkg_mgr.py - Lower the priority of rpm-ostree detection to avoid false positives on systems not using it as the main package manager (https://github.com/ansible/ansible/issues/74578) - play - validate the ``hosts`` entry in a play (https://github.com/ansible/ansible/issues/65386) - playbook loaded from collection subdir now does not ignore subdirs. - plugin config now allows list type options to have multiple valid choices (#74225). - psrp - Always cleanup the last run pipeline if a second pipeline is invoked to avoid violating any resource limits. - psrp - Fix error when resetting a connection that was initialised but not connected - (https://github.com/ansible/ansible/issues/74092). - psrp - Try to clean up any server-side resources when resetting a connection. - recursive_diff - handle condition when parameters are not dict (https://github.com/ansible/ansible/issues/56249). - register - Ensure that ``register`` used on ``set_fact`` or ``include_vars`` does not automatically wrap the facts as unsafe. (https://github.com/ansible/ansible/issues/21088) - rekey_on_member - handle undefined positional arguments better. - remote tmpdir permissions - fix type error in macOS chmod ACL fallback (https://github.com/ansible/ansible/pull/74613). - replace - better handling of file operation exceptions (https://github.com/ansible/ansible/pull/74686). - roles - allow for role arg specs in new meta file (https://github.com/ansible/ansible/issues/74525). - roles - fix unexpected ``AttributeError`` when an empty ``argument_specs.yml`` is present (https://github.com/ansible/ansible/pull/75604). - roles - make sure argspec validation task is tagged with ``always`` (https://github.com/ansible/ansible/pull/74994). - roles - make sure argspec validation task templates suboptions (https://github.com/ansible/ansible/issues/75070). - schema validation now uses dynamic range of versions for valid deprecation entries vs hardcoded out of date list. - script inventory plugin - Remove deprecated caching support (https://github.com/ansible/ansible/issues/74143) - sequence - fix error message so that unrecognized options to the plugin display correctly as a list and normalize error messages. - service - compare version without LooseVersion API (https://github.com/ansible/ansible/issues/74488). - set ssh host_key_checking defaults to True, restoring original behaviour (https://github.com/ansible/ansible/issues/75168) - setup module should now not truncate hpux interface names. - setup module, fix filter to adjust for missing ``ansible_`` prefix on query. - setup, while gathering linux hardware facts be more resilient to errors and try to return more info. - slurp - Fix error messages for unreadable files and directories(https://github.com/ansible/ansible/issues/67340). - slurp - handle error when ``path`` is a directory and not a file (https://github.com/ansible/ansible/pull/74930). - slurp - improve the logic in the error handling and remove ``os.stat()`` call (https://github.com/ansible/ansible/pull/75038) - ssh connection now correctly handle ssh_transfer_method and scp_if_ssh interactions. - ssh connection, fix interaction between trasnfer settings options. - ssh connection, use self.host which has the most up2date info instead of pc.remote_addr - ssh_connection - rename ``retries`` to ``reconnection_retries`` to avoid conflicts with task vars (https://github.com/ansible/ansible/issues/75142). - ssh_connection - set the default for ``reconnection_retries`` back to ``0`` (https://github.com/ansible/ansible/issues/75142). - subversion - fix stack trace when getting information about the repository (https://github.com/ansible/ansible/issues/36498) - system_service - use a context manager for file handling. - task_executor, Actions using AnsibleActionFail/Skip will now propagate 'results' if given - task_executor/ssh_connection - use the ``retries`` value from ``ssh_connection`` settings, not the default from the ``Task`` field attributes (https://github.com/ansible/ansible/issues/75142). - template - ensure Jinja2 overrides from template header are used (https://github.com/ansible/ansible/issues/75275) - unarchive - allow extracting archives that contain files which size exceeds free system memory (https://github.com/ansible/ansible/issues/73985). - unarchive - fail when zipinfo binary is not found in executable paths (https://github.com/ansible/ansible/issues/39029). - unarchive - move failure for missing binary to ``can_handle_archive()`` rather than ``__init__()`` - uri - Fix traceback and provide error message when trying to use non-string or mapping for ``form-multipart`` body - https://github.com/ansible/ansible/issues/74276 - urls - Fix logic in matching ``unredirected_headers`` to perform case insensitive matching - validate_argument_spec, correct variable precedence and merge method and add missing examples - variable manager, avoid sourcing delegated variables when no inventory hostname is present. This affects scenarios like syntax check and imports. - version test - improve error message when an empty version is provided - yum - Fixed typo in failure message (https://github.com/ansible/ansible/pull/72964). - yum - When upgrading, every architecture of a package is now included in the module results, instead of just one (https://github.com/ansible/ansible/issues/73284). - yum - fix ``yumstate`` return value when wildcards are used in the ``list`` argument (https://github.com/ansible/ansible/issues/74557) - yum - fix parsing of multiple subsequent empty lines from ``yum check-update`` output (https://github.com/ansible/ansible/issues/70949) - yum - yum action plugin changes to support 'use' as an alias of 'use_backend' (https://github.com/ansible/ansible/issues/70774). deprecated_features: - ansible-test - The ``--docker-no-pull`` option is deprecated and has no effect. - ansible-test - The ``--no-pip-check`` option is deprecated and has no effect. - include action is deprecated in favor of include_tasks, import_tasks and import_playbook. - module_utils' FileLock is scheduled to be removed, it is not used due to its unreliable nature. known_issues: - ansible-test - Tab completion anywhere other than the end of the command with the new composite options will provide incorrect results. See https://github.com/kislyuk/argcomplete/issues/351 for additional details. major_changes: - Python Controller Requirement - Python 3.8 or newer is required for the control node (the machine that runs Ansible) (https://github.com/ansible/ansible/pull/74013) - ansible-test - All "cloud" plugins which use containers can now be used with all POSIX and Windows hosts. Previously the plugins did not work with Windows at all, and support for hosts created with the ``--remote`` option was inconsistent. - ansible-test - Collections can now specify controller and target specific integration test requirements and constraints. If provided, they take precedence over the previously available requirements and constraints files. - ansible-test - Integration tests run with the ``integration`` command can now be executed on two separate hosts instead of always running on the controller. The target host can be one provided by ``ansible-test`` or by the user, as long as it is accessible using SSH. - ansible-test - Most container features are now supported under Podman. Previously a symbolic link for ``docker`` pointing to ``podman`` was required. - ansible-test - New ``--controller`` and ``--target`` / ``--target-python`` options have been added to allow more control over test environments. - ansible-test - Python 3.8 - 3.10 are now required to run ``ansible-test``, thus matching the Ansible controller Python requirements. Older Python versions (2.6 - 2.7 and 3.5 - 3.10) can still be the target for relevant tests. - ansible-test - SSH port forwarding and redirection is now used exclusively to make container ports available on non-container hosts. When testing on POSIX systems this requires SSH login as root. Previously SSH port forwarding was combined with firewall rules or other port redirection methods, with some platforms being unsupported. - ansible-test - Sanity tests always run in isolated Python virtual environments specific to the requirements of each test. The environments are cached. - ansible-test - Sanity tests are now separated into two categories, controller and target. All tests except ``import`` and ``compile`` are controller tests. The controller tests always run using the same Python version used to run ``ansible-test``. The target tests use the Python version(s) specified by the user, or all available Python versions. - ansible-test - Sanity tests now use fully pinned requirements that are independent of each other and other test types. - ansible-test - Tests run with the ``centos6`` and ``default`` test containers now use a PyPI proxy container to access PyPI when Python 2.6 is used. This allows tests running under Python 2.6 to continue functioning even though PyPI is discontinuing support for non-SNI capable clients. - ansible-test - The ``future-import-boilerplate`` and ``metaclass-boilerplate`` sanity tests are limited to remote-only code. Additionally, they are skipped for collections which declare no support for Python 2.x. - ansible-test - The ``import`` and ``compile`` sanity tests limit remote-only Python version checks to remote-only code. - ansible-test - Unit tests for controller-only code now require Python 3.8 or later. - ansible-test - Version neutral sanity tests now require Python 3.8 or later. - junit callback - The ``junit_xml`` and ``ordereddict`` Python modules are no longer required to use the ``junit`` callback plugin. minor_changes: - Add ``end_batch`` meta task. - Allow connection and become passwords to be set by file/executable script. Also document this was already the case for vault. - CLI - Remove ``__requires__`` attribute for ``pkg_resources`` - Collections can define action_groups in ``meta/runtime.yml``. - Introduce a config option to enable/disable emitting warning about Jinja2 version being old for ``jinja2_native``. The option is on by default, only in CI it is off. - Make the code structure of ansible-doc's generic snippet feature more maintainable. - On RHEL 9, CentOS Stream 9 etc., use /usr/bin/python3 as the default interpreter; /usr/libexec/platform-python is just a backwards-compatibility symbolic link there. - PowerShell - Added support for optional module_util imports by scanning for ``-Optional`` at the end of the import declaration - Python 2.6 Target Support - Deprecate Python 2.6 for targets, requiring Python 2.7 or newer. ``ansible-core==2.13`` will drop support for Python 2.6. (https://github.com/ansible/ansible/pull/74165) - Task - Add a resolved_action attribute for Task objects to get the final resolved plugin. - Templar - remove ``_fail_on_lookup_errors`` and ``_fail_on_filter_errors`` instance variables that were never used. (https://github.com/ansible/ansible/pull/73785) - The AnsiballZ Python wrapper now changes the working directory to ``~`` or ``/`` if the current one is not accessible. This allows become to drop privileges on macOS when using pipelining. - Update test container ansible-core-test-container to version 3.6.0 - Update test container ansible-core-test-container to version 3.7.0 - Update test container default-test-container to version 3.6.0 - Update test container default-test-container to version 3.7.0 - Update vendored copy of ``six`` to 1.16.0 to eliminate warnings for deprecated python loader methods in Python 3.10+ (https://github.com/ansible/ansible/issues/74659) - Update vendored copy of distro to 1.6.0 - Vendor ``distutils.version`` due to it's deprecation in Python 3.10 and impending removal in Python 3.12 (https://github.com/ansible/ansible/issues/74599) - YAML parsing - Create common utils for loading and dumping YAML that prefer the C extensions if available - '``include_role`` - Allow use of ``omit`` in the ``from_*`` arguments (https://github.com/ansible/ansible/issues/66349)' - '``uri``/``get_url`` - Expose ``unredirected_headers`` to modules to allow user control ' - '`ansible.plugins.callback.CallbackBase.host_label()` has been factored out as a static method (https://github.com/ansible/ansible/pull/73814).' - action_groups can include actions from other groups by using the special ``metadata`` dictionary field. - add a quick short circuit when checking if a string is a template to improve performance on large strings (https://github.com/ansible/ansible/issues/74336) - add host label to retry print statements - added new function to module utils to choose best possible locale. - adds the ``undef`` keyword to the templating environment. This allows for directly creating Undefined values in templates. It is most useful for providing a hint for variables which must be overridden. - ansbile-doc now also shows snippets for inventory and lookup, adding to existing modules. - ansible adhoc, clarified the help to some options, also added some comments to code. - ansible-cli - remove unnecessary trailing space in ``ansible --version`` (https://github.com/ansible/ansible/issues/74875). - ansible-config can now list and dump for specific documentable plugins by specifying them in the command line - ansible-config has new 'init' option to create, highly commented, example configurations as ini (ansible.cfg), environment variables (shell) or Ansible variable files (YAML) - ansible-config now supports displaying plugin configuration info. - ansible-doc - ``version_added`` in ``attributes`` now comes with ``version_added_collection`` (https://github.com/ansible/ansible/pull/74602). - ansible-doc - show ``version_added`` for the plugin/module itself in text output, and improve ``version_added`` formatting (https://github.com/ansible/ansible/pull/73602). - ansible-doc now supports 'attributes' for plugins as per proposal. - ansible-doc pretty cli options output. - ansible-doc, improve handling of rstisms, try to make the display more meaningfull for the terminal users. - ansible-galaxy - Allow specification of client_id override value for Keycloak Token (https://github.com/ansible/ansible/issues/75593). - ansible-galaxy - Allow validate_certs to be configured for individual Galaxy servers (https://github.com/ansible/ansible/issues/75677). - ansible-galaxy - Installing a collection from a git repository without specifying a version (or using the version ``HEAD``) will clone the repository using --depth=1. - ansible-galaxy - Non-HTTP exceptions from Galaxy servers are now a warning and only fatal if the collection to download|install|verify is not available from any of the servers (https://github.com/ansible/ansible/issues/75443). - ansible-test - A new ``base`` test container is available. It is similar to the ``default`` test container, but contains no pre-installed Python packages other than ``pip`` and its dependencies. - ansible-test - Add RHEL 8.4 as a remote. - ansible-test - Add ``--prime-venvs`` option to create virtual environments without running tests. - ansible-test - Add constraint for ``decorator`` for Python versions prior to 3.5. - ansible-test - Add support for Windows Server 2022. - ansible-test - Add support for an ansible-test configuration file in collections under ``tests/config.yml``. - ansible-test - Add support for testing with Python 3.10. - ansible-test - Added a ``--prime-containers`` option to support downloading containers without running tests. - ansible-test - Adding DigitalOcean cloud support to ansible-test (https://github.com/ansible/ansible/pull/74222). - ansible-test - All "cloud" plugins have been refactored for more consistency. For those that use docker containers, management of the containers has been standardized. - ansible-test - All "cloud" plugins now use fixed hostnames and ports in tests. Previously some tests used IP addresses and/or randomly assigned ports. - ansible-test - Changes made to the ``hosts`` file on test systems are now done using an Ansible playbook for both POSIX and Windows systems. Changes are applied before a test target runs and are reverted after the test target finishes. - ansible-test - Clean up code in the cloud plugins. - ansible-test - Collections can declare their remote-only code (modules/module_utils and related tests) as controller-only. - ansible-test - Collections can limit the Python versions used for testing their remote-only code (modules/module_utils and related tests). - ansible-test - Command line help has been updated to hide the ``--remote`` option (and related options) when the user lacks an API key to use the feature. - ansible-test - Constraints provided by ``ansible-test`` for Python package installs have been reduced. - ansible-test - Default settings are now applied to unknown versions of known ``--remote`` platforms. - ansible-test - Distribution specific test containers have been updated to version 3.0.0. - ansible-test - Environment checking (``pip``, ``python``, ``~/.ssh/known_hosts``, etc.) is no longer performed when running integration tests. - ansible-test - Environment variables exposed by "cloud" plugins are now available to the controller for role based tests. Previously only script based tests had access to the exposed environment variables. - ansible-test - Fedora 32 and 33 (``fedora32`` and ``fedora33``) containers have been updated and now allow for ssh in more container environments. - ansible-test - Fedora 34 (``fedora34``) container has been added. - ansible-test - Installation of ``cryptography`` no longer occurs when it is already installed. This avoids downgrading existing OS packages. - ansible-test - Minor code cleanup. - ansible-test - More efficient string splitting. - ansible-test - Most scripts used internally by ``ansible-test`` no longer have a shebang or the executable bit set. - ansible-test - Move code from ``_data`` directory to ``_util`` directory. - ansible-test - Relocate change classification code. - ansible-test - Remove CI provider support for Shippable, now that the service has been discontinued. - ansible-test - Remove check for legacy ``core`` and ``extras`` directories. - ansible-test - Remove deprecated container ``fedora32``. - ansible-test - Remove deprecated remote platforms ``freebsd/11.4`` and ``rhel/8.3```. - ansible-test - Removed the warning filter for ``PyYAML`` in the ``import`` sanity test. - ansible-test - Removed unused pip constraints. Collections may need to add their own constraints if they depended on any which were removed. - ansible-test - Reorganize code for individual commands. - ansible-test - Reorganize integration test implementation by command. - ansible-test - Rewrite the ``compile`` sanity test to improve error handling and support Python 3.10. - ansible-test - Sanity test warnings relating to Python version support have been improved. - ansible-test - Set minimum version constraints for ``pytest``. - ansible-test - Split out shell command implementation. - ansible-test - The "injector" scripts are now generated at runtime to avoid issues with symlinks and shebangs. - ansible-test - The HTTP Tester can now be used without the ``--docker`` or `--remote`` options. It still requires use of the ``docker`` command to run the container. - ansible-test - The HTTP Tester has been converted to a "cloud" plugin and can now be requested using the ``cloud/httptester`` alias. The original ``needs/httptester`` alias is still supported for backwards compatibility. - ansible-test - The ``--docker-keep-git`` option (used only for testing ansible-core) has been renamed to ``--keep-git``. - ansible-test - The ``--python`` option can be used without another delegation option such as the ``--venv`` or ``--docker`` options. - ansible-test - The ``ansible-test coverage`` commands ``combine``, ``report``, ``html`` and ``xml`` now support delegation. - ansible-test - The ``default`` test container has been updated to version 3.4.0 and now uses Python 3.9 by default instead of Python 3.6. - ansible-test - The ``docker run`` option ``--link`` is no longer used to connect test containers. As a result, changes are made to the ``/etc/hosts`` file as needed on all test containers. Previously containers which were used with the ``--link`` option did not require changes to the ``/etc/hosts`` file. - ansible-test - The ``import`` sanity test now requires that Ansible modules guard instantiation of ``AnsibleModule`` with a ``if __name__ == '__main__'`` conditional, or equivalent logic. - ansible-test - The ``import`` sanity test now requires that non-modules do not instantiate ``AnsibleModule`` on import. - ansible-test - The ``validate-modules`` sanity test codes ``ansible-deprecated-module`` and ``collection-deprecated-module`` have been added. - ansible-test - The ``validate-modules`` sanity test codes ``last-line-main-call``, ``missing-if-name-main`` and ``missing-main-call`` have been removed. - ansible-test - The ``validate-modules`` sanity test no longer enforces the ``missing-if-name-main``, ``last-line-main-call`` or ``missing-main-call`` checks on non-deleted Ansible modules. Modules are still required to instantiate ``AnsibleModule`` when ``__name__ == '__main__'``. - ansible-test - Unit tests are now run in separate contexts (``controller``, ``modules``, ``module_utils``), each using separate invocations of ``pytest``. - ansible-test - Unit tests other than ``modules`` and ``module_utils`` are now run only on Python versions supported by the controller (Python 3.8+). - ansible-test - Update ``typed-ast`` constraint to version 1.4.3 for compatibility with Python 3.10. - ansible-test - Update distribution test containers from version 2.0.1 to 2.0.2. - ansible-test - Update the Ansible Core and Ansible Collection default test containers to 3.2.0 and 3.2.2 respectively. - ansible-test - Update the ``import`` sanity test to avoid a new warning in Python 3.10. - ansible-test - Update the ``runtime-metadata`` sanity test to handle a new warning on Python 3.10. - ansible-test - Updated the ``default`` containers to version 4.0.1. - ansible-test - Updated the help message for failed tests in the ``azure`` test plugin. - ansible-test - Upgrade ``pylint`` to version 2.9.3 and update its dependencies to the latest versions as well. - ansible-test - Using an unknown ``--docker`` or ``--remote`` environment now requires specifying a Python version. - ansible-test - add freebsd/13.0 as a remote option. - ansible-test - aws creates and exposes a new tiny_prefix variable to provide a shorter prefix for the AWS tests. - ansible-test - display recent ``ssh`` debug logs after connection failures (https://github.com/ansible/ansible/pull/75374) - ansible-test - validate-modules now properly checks ``attributes`` for plugins (https://github.com/ansible/ansible/pull/74602). - ansible-test - virtualenv-isolated.sh is no longer provided. Prefer virtualenv.sh in its place. - ansible-test validate-modules - enforce that ``_info`` and ``_facts`` modules set ``supports_check_mode=True`` (https://github.com/ansible/ansible/pull/75324). - ansible-vault - remove support for ``PyCrypto`` (https://github.com/ansible/ansible/issues/72646) - apt - added an ``allow_downgrade`` option to enable safe downgrade of packages without using ``force`` which doesn't verify signatures (https://github.com/ansible/ansible/issues/29451, https://github.com/ansible/ansible/pull/74852). - apt, added a 'lock_timeout' to be more resilient when encountering the apt db already locked and handle it w/o haveing to rerun task. - async tasks - the use of the task-level ``ANSIBLE_ASYNC_DIR`` variable within ``environment:`` is no longer valid. Use the shell configuration variable ``async_dir`` instead. - async_wrapper, better reporting on timeout, slight refactor on reporting itself. - basic module_util - Clean up ``selinux`` compat import. - blockinfile - Remove unused code for Ansible 1.x. - cache base - More efficient string splitting. - callback API - implemented ``v2_runner_on_async_ok`` and ``v2_runner_on_async_failed`` callbacks (https://github.com/ansible/ansible/pull/74953). - cli scripts - remove trailing blank space in help after newline when outputting. - collection - match skip message as per role installation. - command - update the user warning message to point out command name (https://github.com/ansible/ansible/pull/74475). - config lookup now can handle plugin settings. - config, default site for ansible-core is now under /ansbile-core/. - connection base - Avoid using deprecated ``@abstractproperty`` decorator. - constructed - a new options ``trailing_separator`` and ``default_value`` to deal with key's value empty on keyed group. - cron - ``name`` is now a required parameter always - 'cron - ``reboot`` parameter has been dropped in favor of ``special_time: reboot``' - cron, removed previously deprecated 'reboot' and now requires either 'name' as unique identifier. - default callback plugin - displays output for ``v2_runner_on_async_ok`` and ``v2_runner_on_async_failed`` callbacks. - deprecate ``_remote_checksum()`` and remove all internal uses (https://github.com/ansible/ansible/pull/74848) - dnf - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397). - dnf - allow for ``download_only`` to be run without root privileges (https://github.com/ansible/ansible/issues/75530) - encrypt - add new parameter ``ident`` to specify version of BCrypt algorithm to be used (https://github.com/ansible/ansible/issues/74571). - fact cache - Remove deprecated backwards compatibility shim for the FactCache `update` method to accept multiple arguments. - fact cache - Remove the deprecated location for FactCache. Import FactCache from `ansible.vars.fact_cache` instead. - facts - add fiber channel facts for HP-UX (https://github.com/ansible/ansible/pull/57406) - galaxy - support role artifact download from API response ``download_url`` location (https://github.com/ansible/ansible/issues/73103). - 'get_distribution - ``lib.ansible.module_utils.common.sys_info.get_distribution`` now returns distribution information for all platforms not just Linux (https://github.com/ansible/ansible/issues/17587) ' - 'get_distribution_version - ``lib.ansible.module_utils.common.sys_info.get_distribution_version`` now returns the version for all platfroms not just Linux (https://github.com/ansible/ansible/issues/17587) ' - git - Add ``accept_newhostkey`` option (https://github.com/ansible/ansible/issues/69846). - hostname - add support RedOS (https://github.com/ansible/ansible/issues/74779). - import_role - Template tasks_from, vars_from, defaults_from, and handlers_from with --extra-vars (https://github.com/ansible/ansible/issues/69097). - include_vars - add ``hash_behaviour`` option (https://github.com/ansible/ansible/pull/72944). - ini - added new parameter ``allow_no_value`` to ini lookup plugin (https://github.com/ansible/ansible/issues/50594). - ini lookup - add case sensitive option (https://github.com/ansible/ansible/issues/74601) - interpreter discovery - allow the default list of ``INTERPRETER_PYTHON_FALLBACK`` to be changed using a variable - interpreter discovery - prefer Python 3 over Python 2 - inventory plugins - Remove the deprecated cache interface. Set top level keys in the inventory plugin's `_cache` attribute (a dictionary) instead. - jinja2_native - short-circuit ``ast.literal_eval`` for non-string values - module_utils distro - when a 'distro' package/module is in PYTHONPATH but isn't the real 'distro' package/module that we expect, gracefully fall back to our own bundled distro. - modules - add Anolis distro in hostname.py. project website https://openanolis.org/ - move all builtin modules to use the best possible locale function instead of hardcoding 'C'. - password - add new parameter ``ident`` to specify version of BCrypt algorithm to be used (https://github.com/ansible/ansible/issues/74571). - password - add new parameter ``seed`` in lookup plugin (https://github.com/ansible/ansible/pull/69775). - password_hash uses passlib default if option isn't set - playbook - Error if a playbook is an empty list instead of just skipping - playbook - Error if using ``include`` instead of ``import_playbook`` - replaced examples/ansible.cfg with instructions on how to generate an up to date copy. - service - add description how service module works internally (https://github.com/ansible/ansible/issues/74507). - service_facts now handles more states/statuses from systemd and in a more reliable way (failed, not-found, masked). - setup - add ``epoch_int`` option to date_time facts (https://github.com/ansible/ansible/pull/73822). - ssh - added pkcs11 support by adding the pkcs11_provider option in the ssh connection module. (https://www.github.com/ansible/ansible/pull/32829) - ssh connection, can not configure ssh_transfer_method with a variable. - ssh connection, ssh_transfer_method is now configurable via variable. - subelements lookup - Use generator in instance type check. - tempfile - Remove unnecessary conditional for creating a temporary directory. - template - Add comment attributes (``comment_start_string`` and ``comment_end_string``) - unicode utils - Fix ``__all__`` which was incorrectly declared as a string instead of a tuple. - user - Add ``umask`` option (https://github.com/ansible/ansible/issues/40359). - user module - Remove unused code. - validation testcases for check_* APIs (https://github.com/ansible/ansible/issues/55994). - winrm - Allow explicit environment variables to be passed through to the ``kinit`` call for Kerberos authentication - yaml dumper - YAML representer for AnsibleUndefined (https://github.com/ansible/ansible/issues/75072). - yum - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397). release_summary: '| Release Date: 2021-09-27 | `Porting Guide `__ ' removed_features: - The built-in module_util ``ansible.module_utils.common.removed`` was previously deprecated and has been removed. - connections, removed password check stubs that had been moved to become plugins. - task, inline parameters being auto coerced into variables has been removed. security_fixes: - templating engine fix for not preserving usnafe status when trying to preserve newlines. CVE-2021-3583 codename: Dazed and Confused fragments: - 17587-get-distribution-more-distros.yml - 21088-no-auto-unsafe-set-fact-include-vars-with-register.yml - 212-py26-deprecation.yml - 29457-deprecate-remote_checksum.yml - 32829-ssh-connection-module-add-pkcs11-support.yml - 36498-subversion-fix-info-parsing.yml - 37187-catch-cond-tmpl-errors.yml - 39029_unarchive.yml - 50594_ini.yml - 55994_testcases.yml - 56249_recursive_diff.yml - 57378-inventory-cli-unicode.yml - 57406-hpux-fc-info.yml - 61185-basic.py-fix-check_mode.yaml - 65227.yml - 65386-validate-hosts.yml - 66349-include-role-omit.yml - 66432_hostname_check_mode_writes.yml - 67340-slurp_error_message.yml - 67943_collection_skip.yml - 68525-add-varswithsources-yaml-representer.yml - 69253-template-comment-attribute.yml - 70028-config-small-typo-fix.yml - 70792-yum-action-plugin-use-as-alias-of-use-backend.yml - 70949-yum-parsing-check-update-output-multiple-empty-lines.yml - 71343_yum_repository.yml - 72607.yml - 72651-dnf-capture-transaction-failure.yml - 72944-include_vars-add-hash_behaviour-option.yml - 72964-fixed-typo-in-yum-failure-message.yml - 73114-fix-ansible-role-download.yaml - 73264-pause-emacs.yml - 73284-yum-multiarch.yml - 73503_dnf_whatprovides.yml - 73602-ansible-doc-version-added.yml - 73814-host_label.yaml - 73819-git-accept_new_host_key.yaml - 73820-yumdnf-add_cacheonly_option.yaml - 73821-user-add_umask_option.yaml - 73822-date_time_facts_add_epoch_int.yaml - 73860-solaris-correct-version-check-in-svcadm_supports_sync.yml - 73864-action-plugin-module-defaults.yml - 73887.mac-m1-homebrew.yaml - 73926-is-template-play-hosts.yml - 73971-non-batch-end_play.yml - 73985-let-unarchive-handle-huge-files.yml - 73996-recursion-depth.yml - 74005-keyed_groups-specific-options-for-empty-value.yml - 74013-controller-py38-min.yml - 74036-unsafe-ansible_failed_task.yml - 74039_enable_module_defaults_for_collections.yml - 74081-paramiko-mark-connected.yml - 74127-bad-filter.yml - 74135-remove-include-deprecations.yml - 74136-remove-playcontext-make-become-cmd.yml - 74143-remove-script-cache.yml - 74144-remove-include-vartags.yml - 74222-ansible-test-digitalocean.yml - 74240-ansible-galaxy-increase-pagesize-and-handle-throttling.yml - 74241-find-checks-size-with-any.yml - 74256-set-theory-filters-behavior.yml - 74274_interpreter_discovery.yml - 74336-is_template-quick-check.yml - 74361-install-collection-from-shallow-git-clone.yml - 74384-validate-modules-yaml.yml - 74404_ansible_inventory.yml - 74472-sequence-lookup.yaml - 74474-apt_key-gpg-binary-import.yaml - 74476-apt_key-gpg-inline-data.yaml - 74478-apt_key-gpg-error-check.yaml - 74488_solaris_looseversion.yml - 74497-keep-non-empty-crontabs.yml - 74502-get_url-filx-checksum-binary.yml - 74507_service.yml - 74547-use-python3-on-rhel-9.yaml - 74557-yum-list-wildcard.yml - 74578-fix-ostree-detection.yml - 74582-role-argspec-new-file.yml - 74599-vendor-distutils.yml - 74601-ini-lookup-add-case-sensitive.yml - 74601-ini-lookup-handle-errors.yml - 74613-actionfixup_perms2_macos_remote_paths_ensure_list.yml - 74625-fix-ansible_play_batch-between-plays.yml - 74626-remove-pycrypto.yml - 74659-update-six.yml - 74686-replace-handle-file-exc.yml - 74709-task-resolved_action.yml - 74783-run-command-thread-safety.yml - 74852-apt-allow-downgrade.yaml - 74864-display_failed_stderr-per-item.yml - 74867-service_mgr_runit_detection_fallback.yaml - 74875_ansible_version.yml - 74932-fix-structure-of-snippets.yml - 74949-apt_key_recv_last_arg.yml - 74953-implement-async-callbacks.yml - 74999-ansible-doc-version_added_collection.yml - 75021-dnf-support-non-english-env.yml - 75072_undefined_yaml.yml - 75073-role-argspec-suboption-variables.yaml - 75131-fix-rekey_on_member-lazy-evaluation.yaml - 75142-ssh-retries-collision.yml - 75186-ansible-test-packaging-constraint.yml - 75235-ansible-galaxy-inconsistent-candidate-error.yml - 75244-fix-templated-handler-names.yaml - 75269-import_role-support-from-files-templates.yml - 75275-ensure-jinja2-header-overrides-used.yml - 75284-fix-legacy-module_defaults.yaml - 75324-ansible-test-validate-modules-info-facts-check_mode.yml - 75332-ansible-test-validate-modules-AnsibleModule-args.yml - 75356-add-requirement-to-ansible-test.yml - 75359-update-test-containers.yaml - 75362-add-rhel-8.4-remote.yml - 75371-import_template_globals.yml - 75435-creating-Undefined.yml - 75447-update-test-containers.yaml - 75468_fix_galaxy_server_fallback.yaml - 75483-dnf-align-return-with-yum.yml - 75527_password_lookup_handle_wrapped_algo.yml - 75530-dnf-download_only-non-root.yml - 75547-fix-installing-collections-from-source.yaml - 75568-fix-templating-task-action-host-specific-vars.yml - 75593-ansible-galaxy-keycloak-clientid.yml - 75604-empty-argument-specs.yml - 75608-git-fix-submodule-path.yml - 75710-ansible-galaxy-validate-certs.yml - Templar-remove-fail-on-errors.yml - add-anolis-distro-in-hostname.yaml - adhoc_help_clarify.yml - adoc_dumps_keywords.yml - advanced-host-list-ref-before-assignment.yml - allow_lists_of_config_choices.yml - ansiballz-chdir.yml - ansiballz-re-escape-site-packages.yml - ansible-pull-doc-update.yml - ansible-test-add-ssh-debug-logging.yml - ansible-test-azp-build-api.yml - ansible-test-azure-plugin-help-cleanup.yml - ansible-test-cache-plugin.yml - ansible-test-change-classification-reorg.yml - ansible-test-cleanup-deprecated.yml - ansible-test-cloud-plugin-code-cleanup.yml - ansible-test-code-cleanup.yml - ansible-test-config.yml - ansible-test-connection-units-init.yml - ansible-test-constraints.yaml - ansible-test-container-overhaul.yml - ansible-test-coverage-delegation.yml - ansible-test-coverage-traceback.yml - ansible-test-decorator-constraint.yml - ansible-test-default-container.yml - ansible-test-default-containers-3.2.yml - ansible-test-default-containers.yml - ansible-test-diff-prefix-optional.yml - ansible-test-distro-containers-2.0.2.yml - ansible-test-distro-containers.yaml - ansible-test-docker-network-detect.yml - ansible-test-fedora-34.yml - ansible-test-freebsd-13.yml - ansible-test-import-pyyaml-warning.yml - ansible-test-injector.yml - ansible-test-main-check.yml - ansible-test-markupsafe-constraint.yml - ansible-test-min-controller-python.yml - ansible-test-no-cryptograpy-downgrade.yml - ansible-test-nuke-venv-isolated.yml - ansible-test-prime-containers.yml - ansible-test-pylint-typed-ast.yml - ansible-test-pylint-upgrade.yml - ansible-test-pypi-container-no-publish.yml - ansible-test-pypi-test-container.yml - ansible-test-pytest-constraints.yml - ansible-test-python-3.10.yml - ansible-test-refactor-commands.yml - ansible-test-refactor-integration.yml - ansible-test-remove-legacy-check.yml - ansible-test-remove-shippable.yml - ansible-test-removed-module.yml - ansible-test-sanity-compile.yml - ansible-test-sanity-import-python-3.10.yml - ansible-test-sanity-prime-venvs.yml - ansible-test-sanity-runtime-metadata.yml - ansible-test-shell-command.yml - ansible-test-split-controller-target.yaml - ansible-test-split-unit-tests.yml - ansible-test-utils.yml - ansible-test-windows-server-2022.yaml - ansible-test_inspect-ports-on-all-interfaces.yml - ansible_config_plugins.yml - apt_lock_timeout.yml - arg_spec-remove-unused-imports.yml - async_status_fixes.yml - async_unremove_redeprecate.yml - async_wrapper_reporting.yml - aws_tiny_prefix.yaml - best_locale.yml - better_timeout_msg.yml - blockinfile-unused-code.yml - blowfish_ident.yml - c_deprecatd.yml - cache-deprecations.yml - clarify_missing_exe.yml - cli-space-after-help-text.yml - cmd_wording.yml - code-cleanup.yml - coll_pb_subdir_fixes.yml - command-remove-unreachable-code.yml - command_deliver_promisses.yml - concurrency-cache-dir-collision.yml - conditional-bare-vars.yml - config_lists_unquote.yml - config_lookup_fix.yml - config_lookup_plugins.yml - config_updates.yml - coverage-pwsh-stubs.yml - cron-deprecations.yml - cron_removals.yml - crypt_missing.yml - debian8_discovery.yml - deprecate-ansible-async-dir-envvar.yml - deprecate_include.yml - deprecated_task_parameters.yml - distro-1.6.0.yml - dnf-security.yaml - doc_knows_cli.yml - doc_split.yml - end_batch-meta-task.yml - example_ansible_cfg_remoed.yml - expose-unredirected-headers.yml - extra_vars_unfrack.yml - filelock_bye.yml - find_error_fix.yml - find_walk_warnings.yml - fips-ncclient-import-error.yaml - fix-dnf-filtering-for-installed-package-name.yml - fix-for-workerprocess-stdout-deadlock-fix.yml - fix_cli_ssh_defaults.yml - fix_host_list.yml - fix_module_schema.yml - fix_scp_ssh_settings.yml - fix_syntax_check.yml - fix_unsafe_newline.yml - getent_multiple_entries_fix.yml - heuristic_log_sanitize--missing-pass.yml - host_group_vars_cfg_fix.yaml - hpux_iface_facts_length.yml - improve_derstification.yml - ini_lookup_baduser.yml - interepreter-discovery-prefer-python3.yml - jinja2_decorator_renames.yml - jinja2_native-warning-config-toggle.yml - linux_hw_facts_fix.yml - macos-solaris-regression.yml - metadump_fix.yml - native-types-short-circuit-literal-eval.yml - no-requires.yml - no_ssh_args.yml - nonstandard-distro-fallback.yml - parseable_locale.yml - passlib-defaults.yml - password_file_options.yml - password_seed.yml - pip-entry-point.yml - playbook-deprecations.yml - plugin_attributes-extension.yml - plugin_attributes.yml - powershell-addtype-env-vars.yml - psrp-cleanup.yml - psrp-reset.yml - pull_repo_choices.yml - pwsh-optional-imp.yml - pyspnego-py310.yaml - redos_hostname.yml - remove_connection_become_checks.yml - restore_delegate_label.yml - retry-print-host.yml - role_argspec_tagged_always.yml - service_facts_systemd_improve.yml - service_mgr_facts_fix.yml - set-ssh-host_key_checking-defaults.yaml - setup_filter_smarter.yml - skip_local_discovery.yml - slurp-handle-error-with-dir.yml - slurp-improve-error-handling-readability.yml - snippets.yml - snippets_inv_select.yml - solaris-setfacl-chmod-fallback.yml - ssh_cleanup.yml - ssh_conn_fixes.yml - ssh_port_default_fix.yml - support_rocky_linux_hostname.yml - support_rockylinux.yml - tempfile.yml - terminal-documentation.yaml - to_bits-does-nothing.yml - tweaking_interpreter_discovery.yaml - unarchive-fix-bin-checking.yml - update_doc_for_utils_plugins.yaml - uri-multipart-int-value.yml - v2.12.0-initial-commit.yaml - v2.12.0b1_summary.yaml - vas_fixes.yml - vaultfilters.yml - version_compare-error-on-empty.yml - when-eval-native-py310.yml - winrm-kinit-env.yml - world_readable_fixes.yml release_date: '2021-09-27' 2.12.0b2: changes: bugfixes: - ansible-test - Fix path to inventory file for ``windows-integration`` and ``network-integration`` commands for collections. - ansible-test - Update distribution test containers to version 3.1.0. - ansible-test - Use the correct variable to reference the client's SSH key when generating inventory. - ansible-test pslint - Fix error when encountering validation results that are highly nested - https://github.com/ansible/ansible/issues/74151 minor_changes: - ansible-test - Update the ``base`` and ``default`` containers from Python 3.10.0rc2 to 3.10.0. release_summary: '| Release Date: 2021-10-11 | `Porting Guide `__ ' security_fixes: - Do not include params in exception when a call to ``set_options`` fails. Additionally, block the exception that is returned from being displayed to stdout. (CVE-2021-3620) codename: Dazed and Confused fragments: - ansible-test-default-base-containers-python-3.10.yaml - ansible-test-distro-containers-3.1.0.yaml - ansible-test-inventory-path.yaml - ansible-test-inventory-ssh-key.yml - avoid-set_options-leak.yaml - pslint-sanity-warning.yml - v2.12.0b2_summary.yaml release_date: '2021-10-11' 2.12.0rc1: changes: release_summary: '| Release Date: 2021-10-18 | `Porting Guide `__ ' codename: Dazed and Confused fragments: - v2.12.0rc1_summary.yaml release_date: '2021-10-18' ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.665559 ansible-core-2.12.0/docs/0000755000000000000000000000000000000000000015026 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.932559 ansible-core-2.12.0/docs/bin/0000755000000000000000000000000000000000000015576 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/bin/find-plugin-refs.py0000755000000000000000000000654200000000000021333 0ustar00rootroot00000000000000#!/usr/bin/env python # To run this script, first make webdocs in the toplevel of the checkout. This will generate all # rst files from their sources. Then run this script ./docs/bin/find-plugin-refs.py # # No output means that there are no longer any bare module and plugin names referenced via :ref: # # For my listing of what needs to be changed after running this script, see the comment at the end # of the file from __future__ import (absolute_import, division, print_function) __metaclass__ = type import glob import os import re from ansible.module_utils._text import to_text TOPDIR = os.path.join(os.path.dirname(__file__), '..', 'docsite', 'rst') def plugin_names(topdir): plugins = set() # Modules are in a separate directory for module_filename in glob.glob(os.path.join(topdir, 'modules', '*_module.rst')): module_filename = os.path.basename(module_filename) module_name = module_filename[:module_filename.index('_module.rst')] plugins.add(module_name) for plugin_filename in glob.glob(os.path.join(topdir, 'plugins', '*', '*.rst')): plugin_filename = os.path.basename(plugin_filename) plugin_name = plugin_filename[:plugin_filename.index('.rst')] plugins.add(plugin_name) return plugins def process_refs(topdir, plugin_names): REF_RE = re.compile(':ref:`([^`]*)`') LABEL_RE = re.compile('<([^>]*)>$') # Walk the whole docs tree looking for :ref:. Anywhere those are found, search for `([^`]*)` for dirpath, dirnames, filenames in os.walk(topdir): for filename in filenames: with open(os.path.join(dirpath, filename), 'rb') as f: data = f.read() data = to_text(data) for ref_match in re.finditer(REF_RE, data): label = ref_match.group(1) # If the ref label includes "<", then search for the label inside of the "<>" label_match = re.search(LABEL_RE, label) if label_match: label = label_match.group(1) # If the ref label is listed in plugins, then print that the file contains an unported ref if label in plugin_names: print(':ref:`{0}` matching plugin {1} was found in {2}'.format(ref_match.group(1), label, os.path.join(dirpath, filename))) if __name__ == '__main__': plugins = plugin_names(TOPDIR) process_refs(TOPDIR, plugins) # Fixes needed: docs/bin/plugin_formatter.py # - t = _MODULE.sub(r":ref:`\1 <\1>`", t) # + t = _MODULE.sub(r":ref:`\1 `", t) # # These have @{module}@ in the template and need to have something like module_@{module}@ # If any of these list plugins as well as modules, they will need to have a conditional or extra # data passed in to handle that in a generic fashion: # # docs/templates/list_of_CATEGORY_modules.rst.j2 # docs/templates/list_of_CATEGORY_plugins.rst.j2 # docs/templates/modules_by_support.rst.j2 # # These are just a simple manual fix: # :ref:`command` matching plugin command was found in ./../docsite/rst/user_guide/intro_adhoc.rst # :ref:`shell` matching plugin shell was found in ./../docsite/rst/user_guide/intro_adhoc.rst # :ref:`config` matching plugin config was found in ./../docsite/rst/installation_guide/intro_configuration.rst ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/bin/testing_formatter.sh0000755000000000000000000000231400000000000021675 0ustar00rootroot00000000000000#!/bin/sh set -eux FILENAME=../docsite/rst/dev_guide/testing/sanity/index.rst cat <<- EOF >$FILENAME.new .. _all_sanity_tests: Sanity Tests ============ The following sanity tests are available as \`\`--test\`\` options for \`\`ansible-test sanity\`\`. This list is also available using \`\`ansible-test sanity --list-tests --allow-disabled\`\`. For information on how to run these tests, see :ref:\`sanity testing guide \`. .. toctree:: :maxdepth: 1 $(for test in $(../../bin/ansible-test sanity --list-tests --allow-disabled); do echo " ${test}"; done) EOF # By default use sha1sum which exists on Linux, if not present select the correct binary # based on platform defaults SHA_CMD="sha1sum" if ! command -v ${SHA_CMD} > /dev/null 2>&1; then if command -v sha1 > /dev/null 2>&1; then SHA_CMD="sha1" elif command -v shasum > /dev/null 2>&1; then SHA_CMD="shasum" else # exit early with an error if no hashing binary can be found since it is required later exit 1 fi fi # Put file into place if it has changed if [ ! -f "${FILENAME}" ] || [ "$(${SHA_CMD} <$FILENAME)" != "$(${SHA_CMD} <$FILENAME.new)" ]; then mv -f $FILENAME.new $FILENAME fi ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.934559 ansible-core-2.12.0/docs/docsite/0000755000000000000000000000000000000000000016460 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/.gitignore0000644000000000000000000000044300000000000020451 0ustar00rootroot00000000000000# Old compiled python stuff *.py[co] # package building stuff build # Emacs backup files... *~ .\#* .doctrees # Generated docs stuff ansible*.xml .buildinfo objects.inv .doctrees rst/dev_guide/testing/sanity/index.rst rst/modules/*.rst rst/playbooks_keywords.rst rst/collections/ *.min.css ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/.nojekyll0000644000000000000000000000000000000000000020276 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.934559 ansible-core-2.12.0/docs/docsite/.templates/0000755000000000000000000000000000000000000020534 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/.templates/banner.html0000644000000000000000000001006700000000000022673 0ustar00rootroot00000000000000{% if is_eol %} {# Creates a banner at the top of the page for EOL versions. #} {% else %} {% endif %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/.templates/breadcrumbs.html0000644000000000000000000000727000000000000023721 0ustar00rootroot00000000000000{%- extends "!breadcrumbs.html" %} {%- block breadcrumbs_aside %}
  • {%- if hasdoc(pagename) and display_vcs_links %} {%- if display_github %} {%- if check_meta and 'github_url' in meta %} {{ _('Edit on GitHub') }} {%- else %} {% if check_meta and pagename.endswith(( '_module', '_become', '_cache', '_callback', '_connection', '_inventory', '_lookup', '_shell', '_strategy', '_vars', )) %}
    {% elif check_meta and pagename.startswith('cli') and meta.get('source', None) %} {{ _('Edit on GitHub') }} {% elif (not 'list_of' in pagename) and (not 'category' in pagename) %} {{ _('Edit on GitHub') }} {% endif %} {%- endif %} {%- elif display_bitbucket %} {%- if check_meta and 'bitbucket_url' in meta %} {{ _('Edit on Bitbucket') }} {%- else %} {{ _('Edit on Bitbucket') }} {%- endif %} {%- elif display_gitlab %} {%- if check_meta and 'gitlab_url' in meta %} {{ _('Edit on GitLab') }} {%- else %} {{ _('Edit on GitLab') }} {%- endif %} {%- elif show_source and source_url_prefix %} {{ _('View page source') }} {%- elif show_source and has_source and sourcename %} {{ _('View page source') }} {%- endif %} {%- endif %}
  • {%- endblock %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/.templates/version_chooser.html0000644000000000000000000000023400000000000024630 0ustar00rootroot00000000000000{# https://jinja.palletsprojects.com/en/3.0.x/tricks/#null-default-fallback #} {%- if not is_eol %} {%- extends "!version_chooser.html" %} {%- endif %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/Makefile0000644000000000000000000001731700000000000020131 0ustar00rootroot00000000000000OS := $(shell uname -s) SITELIB = $(shell python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"): PLUGIN_FORMATTER=../../hacking/build-ansible.py docs-build TESTING_FORMATTER=../bin/testing_formatter.sh KEYWORD_DUMPER=../../hacking/build-ansible.py document-keywords CONFIG_DUMPER=../../hacking/build-ansible.py document-config GENERATE_CLI=../../hacking/build-ansible.py generate-man COLLECTION_DUMPER=../../hacking/build-ansible.py collection-meta ifeq ($(shell echo $(OS) | egrep -ic 'Darwin|FreeBSD|OpenBSD|DragonFly'),1) CPUS ?= $(shell sysctl hw.ncpu|awk '{print $$2}') else CPUS ?= $(shell nproc) endif # Intenationalisation and Localisation LANGUAGES ?= # Sets the build output directory for the main docsite if it's not already specified ifndef BUILDDIR BUILDDIR = _build endif ifndef POTDIR POTDIR = $(BUILDDIR)/gettext endif # Backwards compat for separate VARS PLUGIN_ARGS= ifdef MODULES ifndef PLUGINS PLUGIN_ARGS = -l $(MODULES) else PLUGIN_ARGS = -l $(MODULES),$(PLUGINS) endif else ifdef PLUGINS PLUGIN_ARGS = -l $(PLUGINS) endif endif ANSIBLE_VERSION_ARGS= ifdef ANSIBLE_VERSION ANSIBLE_VERSION_ARGS=--ansible-version=$(ANSIBLE_VERSION) endif DOC_PLUGINS ?= become cache callback cliconf connection httpapi inventory lookup netconf shell strategy vars PYTHON=python # fetch version from project release.py as single source-of-truth VERSION := $(shell $(PYTHON) ../../packaging/release/versionhelper/version_helper.py --raw || echo error) ifeq ($(findstring error,$(VERSION)), error) $(error "version_helper failed") endif MAJOR_VERSION := $(shell $(PYTHON) ../../packaging/release/versionhelper/version_helper.py --majorversion || echo error) ifeq ($(findstring error,$(MAJOR_VERSION)), error) $(error "version_helper failed to determine major version") endif assertrst: ifndef rst $(error specify document or pattern with rst=somefile.rst) endif all: docs docs: htmldocs coredocs: core_htmldocs generate_rst: collections_meta config cli keywords plugins testing core_generate_rst: collections_meta config cli keywords base_plugins testing # At the moment localizing the plugins and collections is not required for the ongoing # localisation effort. It will come at a later time. gettext_generate_rst: collections_meta config cli keywords testing # The following two symlinks are necessary to produce two different docsets # from the same set of rst files (Ansible the package docs, and core docs). # Symlink the relevant index into place for building Ansible docs ansible_structure: # We must have python and python-packaging for the version_helper # script so use it for version comparison if python -c "import sys, packaging.version as p; sys.exit(not p.Version('$(MAJOR_VERSION)') > p.Version('2.10'))" ; then \ echo "Creating symlinks in ansible_structure"; \ ln -sf ../rst/ansible_index.rst rst/index.rst; \ ln -sf ../sphinx_conf/ansible_conf.py rst/conf.py; \ else \ echo 'Creating symlinks for older ansible in ansible_structure'; \ ln -sf ../rst/2.10_index.rst rst/index.rst; \ ln -sf ../sphinx_conf/2.10_conf.py rst/conf.py; \ fi # Symlink the relevant index into place for building core docs core_structure: @echo "Creating symlinks in core_structure" -ln -sf ../rst/core_index.rst rst/index.rst -ln -sf ../sphinx_conf/core_conf.py rst/conf.py # Symlink the relevant index into place for building core docs gettext_structure: @echo "Creating symlinks in gettext_structure" -ln -sf ../rst/core_index.rst rst/index.rst -ln -sf ../sphinx_conf/all_conf.py rst/conf.py gettext: gettext_structure gettext_generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx gettext # if msgcat is installed handle all indexes, otherwise use the index from gettext_structure. -msgcat "$(POTDIR)/core_index.pot" "$(POTDIR)/ansible_index.pot" "$(POTDIR)/2.10_index.pot" > "$(POTDIR)/tmp_index.pot" && mv "$(POTDIR)/tmp_index.pot" "$(POTDIR)/index.pot" rm "$(POTDIR)/core_index.pot" "$(POTDIR)/ansible_index.pot" "$(POTDIR)/2.10_index.pot" generate-po: ifeq ($(LANGUAGES),) @echo 'LANGUAGES is not defined. It is mandatory. LANGUAGES should be a comma separated list of languages to support. (Exampe: fr,es)' else (cd docs/docsite/; sphinx-intl update -w 0 -d rst/locales -p "$(POTDIR)" -l $(LANGUAGES)) endif needs-translation: ifeq ($(LANGUAGES),) @echo 'LANGUAGES is not defined. It is mandatory. LANGUAGES should be a comma separated list of languages to support. (Exampe: fr,es)' else (cd docs/docsite/; sphinx-intl stat -d rst/locales -l $(LANGUAGES) | grep -E ' [1-9][0-9]* (fuzzy|untranslated)' | sort) endif htmldocs: ansible_structure generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx html core_htmldocs: core_structure core_generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx html singlehtmldocs: ansible_structure generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx singlehtml core_singlehtmldocs: core_structure core_generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx singlehtml # Note: The linkcheckdocs and htmlsingle targets depend on gettext_structure # because that one does not exclude any rst files in its conf.py. linkcheckdocs: gettext_structure generate_rst CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx linkcheck htmlsingle: assertrst gettext_structure sphinx-build -j $(CPUS) -b html -d $(BUILDDIR)/doctrees ./rst $(BUILDDIR)/html rst/$(rst) @echo "Output is in $(BUILDDIR)/html/$(rst:.rst=.html)" webdocs: docs #TODO: leaving htmlout removal for those having older versions, should eventually be removed also clean: @echo "Cleaning $(BUILDDIR)" -rm -rf $(BUILDDIR)/doctrees -rm -rf $(BUILDDIR)/html -rm -rf htmlout -rm -rf module_docs -rm -rf $(BUILDDIR) -rm -f .buildinfo -rm -f objects.inv -rm -rf *.doctrees @echo "Cleaning up minified css files" find . -type f -name "*.min.css" -delete @echo "Cleaning up byte compiled python stuff" find . -regex ".*\.py[co]$$" -delete @echo "Cleaning up editor backup files" find . -type f \( -name "*~" -or -name "#*" \) -delete find . -type f \( -name "*.swp" \) -delete @echo "Cleaning up generated rst" rm -f rst/playbooks_directives.rst rm -f rst/reference_appendices/config.rst rm -f rst/reference_appendices/playbooks_keywords.rst rm -f rst/dev_guide/collections_galaxy_meta.rst rm -f rst/cli/*.rst for filename in `ls rst/collections/` ; do \ if test x"$$filename" != x'all_plugins.rst' ; then \ rm -rf "rst/collections/$$filename"; \ fi \ done @echo "Cleanning up generated ansible_structure" find . -type l -delete @echo "Cleaning up legacy generated rst locations" rm -rf rst/modules rm -f rst/plugins/*/*.rst .PHONY: docs clean collections_meta: ../templates/collections_galaxy_meta.rst.j2 $(COLLECTION_DUMPER) --template-file=../templates/collections_galaxy_meta.rst.j2 --output-dir=rst/dev_guide/ $(EXTRA_COLLECTION_META_ARGS) ../../lib/ansible/galaxy/data/collections_galaxy_meta.yml # TODO: make generate_man output dir cli option cli: mkdir -p rst/cli $(GENERATE_CLI) --template-file=../templates/cli_rst.j2 --output-dir=rst/cli/ --output-format rst $(EXTRA_CLI_DUMPER_ARGS) ../../lib/ansible/cli/*.py keywords: ../templates/playbooks_keywords.rst.j2 $(KEYWORD_DUMPER) --template-dir=../templates --output-dir=rst/reference_appendices/ ../../lib/ansible/keyword_desc.yml $(EXTRA_KEYWORD_DUMPER_ARGS) config: ../templates/config.rst.j2 $(CONFIG_DUMPER) --template-file=../templates/config.rst.j2 --output-dir=rst/reference_appendices/ $(EXTRA_CONFIG_DUMPER_ARGS) ../../lib/ansible/config/base.yml plugins: $(PLUGIN_FORMATTER) full -o rst $(ANSIBLE_VERSION_ARGS) $(EXTRA_PLUGIN_FORMATTER_ARGS) $(PLUGIN_ARGS) # This only builds the plugin docs included with ansible-core base_plugins: $(PLUGIN_FORMATTER) base -o rst $(EXTRA_PLUGIN_FORMATTER_ARGS) $(PLUGIN_ARGS) testing: $(TESTING_FORMATTER) epub: (CPUS=$(CPUS) $(MAKE) -f Makefile.sphinx epub) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/Makefile.sphinx0000644000000000000000000000146600000000000021437 0ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXCONFDIR = rst LANGOPTS ?= SPHINXOPTS ?= -j $(CPUS) -n -w rst_warnings -c "$(SPHINXCONFDIR)" $(LANGOPTS) SPHINXBUILD = sphinx-build SPHINXPROJ = sdfsdf SOURCEDIR = rst # Sets the build output directory if it's not specified on the command line ifndef BUILDDIR BUILDDIR = _build endif # Put it first so that "make" without argument is like "make help". help: $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile.sphinx # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile.sphinx $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.437556 ansible-core-2.12.0/docs/docsite/README.md0000644000000000000000000000420100000000000017734 0ustar00rootroot00000000000000Ansible documentation ===================== This project hosts the source behind the general pages of [docs.ansible.com](https://docs.ansible.com/). Module-specific documentation is hosted in the various collections repositories. See [Ansible Galaxy](https://galaxy.ansible.com/), the list of [Ansible-maintained collections](https://docs.ansible.com/ansible/devel/community/contributing_maintained_collections.html), and the [ansible-collections organization](https://github.com/ansible-collections) for collections sources. To create clear, concise, and consistent contributions to Ansible documentation, please refer to the following information. Contributions ============= Contributions to the documentation are welcome. The Ansible community produces guidance on contributions, building documentation, and submitting pull requests, which you can find in [Contributing to the Ansible Documentation](https://docs.ansible.com/ansible/latest/community/documentation_contributions.html). You can also join the [Docs Working Group](https://github.com/ansible/community/wiki/Docs) and/or the ``#ansible-docs`` IRC channel on [irc.libera.chat](https://libera.chat/) Ansible style guide =================== Ansible documentation is written in ReStructuredText(RST). The [Ansible style guide](https://docs.ansible.com/ansible/latest/dev_guide/style_guide/index.html#linguistic-guidelines) provides linguistic direction and technical guidelines for working with reStructuredText, in addition to other resources. Tools ===== The Ansible community uses a range of tools and programs for working with Ansible documentation. Learn more about [Other Tools and Programs](https://docs.ansible.com/ansible/latest/community/other_tools_and_programs.html#popular-editors) in the Ansible Community Guide. GitHub ====== [Ansible documentation](https://github.com/ansible/ansible/tree/devel/docs/docsite) is hosted on the Ansible GitHub project and various collection repositories, especially those in the [ansible-collections organization](https://github.com/ansible-collections). For general GitHub workflows and other information, see the [GitHub Guides](https://guides.github.com/). ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.659559 ansible-core-2.12.0/docs/docsite/_static/0000755000000000000000000000000000000000000020106 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.934559 ansible-core-2.12.0/docs/docsite/_static/css/0000755000000000000000000000000000000000000020676 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.438556 ansible-core-2.12.0/docs/docsite/_static/css/core-color-scheme.css0000644000000000000000000000052000000000000024713 0ustar00rootroot00000000000000.DocSiteProduct-header--core { background-color: #161b1f; border-color: #161b1f; } .wy-nav-top, .wy-side-nav-search { background-color: #161b1f; } .wy-nav-side { background-color: #999999; } .wy-menu-vertical header, .wy-menu-vertical p.caption { color: #161b1f; } .ansibleNav ul li a:hover { color: #161b1f; } ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4395561 ansible-core-2.12.0/docs/docsite/ansible_2_10.inv0000644000000000000000000072414200000000000021346 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 2.10 # The remainder of this file is compressed using zlib. xÚĽÛrÜȺçw¿žBÏÅ̤½›cïˆ}3Á–ØjNS¢LR«WÛá@ PYUh¢4(Š}åGñ³ùIœœ‘(äw()biµüþùûg&òŒÄu&“M*ÞîEn’,,¢êð¦xýÏ£¨ùöÍ¿¿‰Šä]’mÅ··‡ê˜þ¯ÿåMðkó)ßÖ©Ð?§‘”?û6ÜŠM½×!QU•ɦ®„_X²ÛÁ£¤H“¬þÊBÄI”†;‰Ðx•i¾wQœ¤Iõ ˆìŸÂ“(e’gàø.ü ä­â…dyØÄ€ÐЍŒŽð,-ë,Œóã1ʶk˜Mæ½=šÈ°®’Ô¤gÿüæß¦1öз›H&ñH ;QŠ,aT"Û&±ïF1þÂo¯??Þþ|wþóæáñöþ³GΜ³ÿôK”¦›(~þœW¿äµÍ2ñ-E¥kÓ¿ûXIìñæîöó×…_nÞß^ß…¿<ÒàU}жa_Avu7À0!‘Ô³g³`"Äã\·{J?”õÆ´bB^,™"ª]^/’ÀAÔe"«$Ör(£,©’¿ÅE’²eÛ˜é2î"I•☟Tã¥õ… ¦Í©ðY¼r§P—©gkeûV|KªðOi»‰s cóó»(I½~^õ„»·ªÈ|ú¯îg7yþìûóU$½~öU¾mG+?úßÿí¿¿‘Õö?·yü&ø÷7êæßÞÜç…ü_þÑ6µ×ïŸTK~¹ûúñöó£ PMÆ)*—Š/γ]²·ÉØŸ40Ñûýúáóíç‚?ß?>ݾ¾yÿé&üòpÿé˃îç?›‡‡û‡Çð—ë§ë;ÅÇßÂ/×>†O÷áãÓ–A|««›ü/7Â_ïŸ8Ìß¿y¸þøéæóß3÷áë5òV£˜ðëOwŠýýSøÛÍtá›Ïf"ó¤×L…ÿÈ1ƒ5Ã…ÐŽßU Õ°óëò×ÏÔñ³*8žÎáæ_7ï¿>ñtÖ̽‚–cjq¹½{ºyà«—¿Ü?¼oF\bMUáûAæãõÝõ¿þèÚ 5×ùøpóÈ'|ûñóýà ›Üƒž=þ¦ºÕ'ŽNÕ¥ÊüxóðOŽÆa$òŒͧûßn¸e•ÊÍK¿m¥Âǯ??Þ<±É±-”5ÏrxûùýÝ×7ªóV¡÷¿†?ßüzýÏÛû¯ 5GwþºC ßÿzóþ7–¢1’ªÂ¨ö–së×§§/×_nùšðÛÏÿS Àm'ÃÓ•Þ~þçõÝí;¨Pðpûó×'ÝÝÞq,=)y5¶ºøƒQÊlk}ýüEùW#ŠÛG~X»Í.Ⱥ?ÕæÚ‚pë²-òOåÙš¯^Ø“YëÃÍ¿¾Ü?°BrõÊSÅðáæã k916^­d÷ðr=¹ÿS5Œ×?©bzºù¬÷"Ù$?«>ciö·››/f÷É ì9¦w·??\s´¬J蟷OáݿއŸïoÞß]ÿ|ÃpXàîþúÃöÊîé±Ù–TŒdøtóé ‡ÖÇfêÆ£Å3޽»¿ÿíë¾Bøtý/»vôxû2<vþmÖØÄšQ5 |š_ŸnïÔ>ß<ñnͶ‚j¨Íµt®4W³òðãýª9l+$Ÿï™– ´Ðï,@ú9cÑyRøæIïó(~½»S†{=ªžóšgàx÷¡;bG¥w7× Å¡ºôëO·¿Ý÷ó³ë¯O÷<»¯¶nÆôZ‘Ög(ú/úèÂã“^þmwÆØ¤#m3îWEù¤F?—LáBÚO÷w¦#Rm>GU¹ý¢Ï’³tÝzïg]+xÈZ5=»îï9²ò^=Å·ŸÕ€àŸG0õÕ͇›Ïïo8´nÿ©7*ôÓªG¥|Šf ’g‰âËO¿êuLƒÊ<ËÀªÑlzõ‡»ÛO·OªçɃf˜Ï3elÄxN+ÚÈÌ?ø¦ÉCÑÇëÞ0Xu â:Põðõ³ê›9Æ–ZÉ´ lC·Ç÷_Â[3rcК¿¢C×üåéKø³^Õ Ããñøëýïáû¯O÷ŸÌ3ão·_˜ øñÿøª×«í=-Æ2­iÆö]_̯ÈÓ‡jUÎZ­Ç9bÐzºÍº½a*”§õ§_nØN¼ÛcÝÒ ‡àƒê”?þÁ§ÄØþ=éí5]ÛƒÄ×LKäòÓ_ÚÍtܯ f~¨·qnïnŸþ`|ºùÄxditƤ[I1¯1‰³o3U¶ùª,Ÿnõ™F¶zþtóÈxȈϨi¼î>u[v½çý¯,ƒw#Ï3VC`Ç”—§—6C:¶1ïѾ%§&||y oÕÔѰº—Òc:ÒÑŠ†L[òý+‡¿ß?|`šô6G½›ª™ä’d)—ßoU—úøÇç÷º©}xRÏ6[ã¡×‡õ‘–_¿ªËïŸíRÇûû¯Ÿ/¥ýáæîš!KÌÁL]öŸ¯Í+”\棩Ü{qÌ‹øÿ×ÿ÷ÿü¿ÿ· O£HõK×™¨^òòù]-Eîëd+Þuïý^×N¶W*>ìÏ«~ý±[ßPÕñ ¥F. 326y]…&ÙŸÑOcïcÏæexª°$Ú¤¢yóßDMôSeRgM’íßt?øæ%©oþ§ý‘]’V¢”Mª¬GÂIV•ù0Ñ>øVÿÓ›*ÓýÕ?¢XY–á¾Ìë¢c§â̤]ôW“†Œ@Ð üš¿¼Ùæonߨ~½1?ЙýMÂ*ô /E*¾u©‡Û¨Š9Ü `GÁ‡Æ†ÎóLÈJlû¬W4I¸'›Æ8íî¯ß©ß‰4/4³½UAå›ÈD¥¡Šo)’@ý\`…>toÞ'2Îߨ±þ›&vœ¦-6¶”+g |[›[*&é5×OȪTÿ\—|¦ƒæ²Š^¹7ý¦ûË M¥ DçD+øÔüW3¤É¦ŒÊ×7í½¶E.c‘©ª‘Û“ï,ã(%ÕêGýç^/Œjõ,£Dª5õoDV%qÔ•Ÿ Òw"Õ™¾c —B¯“i®zÓýí %Q–y)‘É4Á×_ÔÄÎüþÍQ=¡Ñ^ 2ÞUï½°±¿¢êM"…ñ?úÏYþ’…‰”úZ\2F"h$~Óxcÿ0H¦©–ÈÚ诺ýz£J}ÖPØÐ¼À¦ #ï õÄ誥oÄ·H7’CñR=*Hujá5øƒšäÚÞ¬©[*sQŽVWÝÚq±[é[÷gñªÛ¦q×A¶6BªC¬÷I6ÉŒæ/ßÙŸiõïƒöç¯-ÇûÇVí%*3Å.=ú½áà Ñî¢'7Âü#Ú¾9äñºé}š«Ç¢|X¶U~·ÛðË*ìÐaœ§©°MÙ»æZ¡w›Z’ìÝ$°!Þj]Y5ÎêëV5ÊâƒzVÃrZú6XV¯ª¿°¿Œè¬@ÐZàÚüÕ›æ¯T'õ[Ñउú¿$;©†-/_!~–UZûÖ¡þ‰ O'è1jÝùTô2ú6Q¶¡×ÍUWüG´ÏrsÖF¨&T„E©Æ´.5" ÷@ÿˆÒ$NózŽ»¯§· m’mþL„®']O›žkíNÆ5,iµ•åS¢o>œ @IŒd¾ þð}y[;|ˆ²­»ÕAÐüP›HÚ¶ÕªÆo»fåV?ªýÎwoÔ´ ÷soaÛÔè›ãô b¯f°#—³fàòÎþìèIS‰Û¿ ¬Â£ùƒâýü%TMfºU-y´5#éêX¨‰„7lZ+0ZA«tZöR$5Ÿ¼û ¦W×ì눟¾˜½_Å¡°,ªtS¡ÀÂ,:®éþç¾gò~óU¯$—L#?ç¤Õ&óþb£×Lþv±ç§‹õíOkJ6›ÀÅ—Ÿuì.6%8\l:\ltþ|é…Žôb£ñúbÙ‰»‰Ý6GœË_êçK_ú/=æ˜]ìœCýÓ¨2YEóY ‚âŸ3E=‹¡(¦NŰßËDêîfºGQEúx Yý§H…fÉxÎÛÖ™ {ÏÕV”æh6™%E!H%*g¢Õk!(ŠÕLÑg,´"zr‰®ŽÖDgã#ý kMþÄZ¯¬-ÌŸ¬­KÊÚ²HÖZ]±ÖèWUì›;»ûïóÇþýpw[ÇÚêƒ"Y]®ªÎ´ƒ*™Ã./cq‚WêÉ>ËKÕµ‹reå{AäuUè#þký Ža¨îC#EyZYOÀH¯ämÍù52þQõ`÷£žùÝ {›¿dú³¢jƒZyBtQìb¯ìËr±v©C‰}Q²<ØŠâBÞ…S”âBER _†RüU'¥8ЬòX¢D•¾<h©;ïç—¿½F=½ñ}J²ûx?¶¹*ìƒ Ä#dIu¡îKK{Tþ†`ð7òY¤¢Ê3~W"lüƒ{C³óIûb]¨Í/ý“ì£ £ÚK{p\ £0é{=!üèùˆLÙï~L­—ß¿e¥éÅZB£îUØ-Çàþ%ž= TxÂ\¢´;A ßãäÆw,“4üÈ.Ø@[¬2xMš›$ñ$¹Ä\«eð}~¸gZÝ#³2Ñê .;ÏjyJOš‹tžÁ÷I¹D nXãùŒî~dšüÈ6!û‘Añ#;ÏòG>öò<ðÍ;j—H™Éë{÷–\÷7ì#(CRøP\l|0{·nám¿IÜ«ð·ú Zÿ˜^Kš«i&ºšÓLÍ 4Ÿãï›·òû䪈³×ßv|&_»”7¥¾¬‹7áFs%å <9MúñZÒls™aª‹“˜qÚæOÝ•rl©÷²+é³¶Mâ«õ[VQU3—r£¹’2g{x®âï[£åw*Ïl—ó·VJô|žÚT/Ñ^è¤ãóÉæ»]šd‚3ÅVòlºú÷\{ø}ÒÅùDyàJUb}<ý*Rüý*OñýŠN~ŸBK.0Z9s i˜*Ói’>ÍÝùô.ÒÞ$gÚröcs}šgÌ ÓænëT¢km]Ò‰øÎoö©…Ï207}Iµöñ6}~ÏÐê«Ð$µÞ¹ãï÷äì¾_Û ¿O5a?\8Ô]©.ÌgøF)ïüRå<·7NíÄÞ„æ"=Áâ wâ\‹ê£Ô“ÕÔŸ…(ÍåÌ©ïWSg;8Jw½Ò›?òlŒR.½Rfõ/;š$ÍÜ.žù™$ËÛ š¶ø{?Ê»ïÝŒî¿÷›|ïö)ûÞMCñ½Ëò{7Aò;µÜçý:ѳOÿEN×õIÇç“eoÝ—Nx em×—Îv älÑ= 4þ~…X|¿¢“ߣÐJqÌOü{¨VölÑu)_àil’×’f"›„‹µ„YŸÊ&ÑÕ"æ|2ßB-¾oQÊïSˆRDe|`N­ìÙbìS®«C^ò&Üh®¤Üüeí%oòCᆠ´R D¼–tûjæt{Ù•ôY«&ñÕD9+@-¿oÙÊï•«U]\ ñPª+¹jÓ½ÈãW^½Çš <Ÿ¦mÉYSm$WÒåÌØ´‹•d™[äZ5æm<+qü=+nñ=‹P^¸ð|îüõJåà’ö¹4ÕKý´ ¾z{ªŸúìÕ6Ãe2æÄ›#K_<hN>gü_\Ѱ„Mç ýç~Î~«k9ùÕO…]A|Ó笸’mÔÜIí˨8p¥dÅÜ ­>á€tÓÈ%[®-w2~Ÿ©¤•¬%´¾ÛÄÚúg¤‰¤‹‰ðÑd¬5MÆã›UÀÄfß­&iï’åJ®Qs'å}': Á…ûчÉVù1åJÎh¹“9E%[©­¥d<¾ÝJjöýžyr~_ð§ºô7€ßw|.á1ƒ$¼œÌê¨ ’Ìll6Lì5â{,^Ýi.Üs&î[Ò w+§ W¨×K”oÛâ.˜ÛŸ˜—»}%x,8í:çå´øq|Ag’–ç4”ââ|1íÕ9{ú_ öNss. Ÿû§´ðÙàyª«_僦9ùrð Åõoz§/¤à÷õ`ÿd\_ò¤·úaï” É~…ruæŒp'³Kk}¡D¤Jˆ'¡ ;Es²óeÛTp™›h.¥ûÌ•œ;…ÕÙµww~s^ïT’•TÖ‡§Ô¤¼>Ðìˆû‹¼ƒäÖ'×Þi¥K)xMyý“qMx§é­n¹Â’›l´ÎS“ϼÉi=gz¾ß3óNðèNÇ÷ËÐ|5ðqhïD?=Lð}hÿ„¿=Lù9)kj/çN ðAjÿ4?I=I™=ƒ—¾J=L·ŠÊ*ˆìóÄ”ìHr!UQp%6úö0 ßïaû§åþ"ö M¾Šº\G}®óOÆß¿v'ീçˆcùn––ßê0É¥e3gê~Kw ðX·óOu1 É6‰š/Ùõ)½¿ätðÃ%§f¿]ruçÓ%:O—lk6—\)‰¿Ë¬^\rª½»äÜópÉygrÉ9àówXÆL/9ç«.5¶"Y\~¶iÑ Ã]^ ¤«ÒÝ2ŠŸYo¨Ô½Î,º$öñµCsu1wUtrBÃêú­á®i»Ön‡úžë¶~É,®–NSô\«åIÕg}v5%§®¹M_=ïÔñÆXÊ•’$O/«¾Fý=÷Të7î)û'îaÊwÛõ•»Q‰/6•ÜrÏô÷ünÇ=µ;pO¿îiÑó…£RîiÐñró’œ{² ¹ÇŠÕFSõF'¾®Ît°ËËÆæŸçëÆ¶[ŽKÙOŒø¯ˆçtCÙóË”gV—H/!²¸|-*¿a?ÂLv€9aßý˜Ðt—Æ|‹~#N^Œ­0eÃþ4º>Õo ã!@ax¼ Hzö*à49®Jß&¸Xë§I²Uûqʾî"¶ µ×¢>•Í™8G…p·ø&ùÕö¾Iœ5Q¿Äتü M¯jvÊî]¦oËÙ§ºe—kãQì¿Ñ[¯ûo7Ó&¸ÐÍôÉq;õpÈýÌe€Ö=»`7ƒ eU&ÙþbÏ •<K@œO$êRÏgƒä[‰{ ÕO8D¶ž*oѤ{¾©è/ÊüXp'^¬§«L²Kdø@xâBÏ¿Â]¨ñq›® 6¥¬ì»?–ÅÅŸ‰R<‹WöΨú4Çîä9º0wG`VÛÿ6ùL¼0'=R\O–õi›œÐZ^ÿ«Þ™¾aª¿ÈxˆS"^Ø|-êóÐ9çxì\5Î$»XáF‰±Õ·Aš^%}Úæ‹àsôÓ#¹ƒC×çDƒ·ôêQéÙaƒ&ÃòãĘú]9™µ¤Uü_cX|ž b•æÄ VðœìR›né‰l¢øy_æu†ߌµV¯ZÔ±‘s1K„Îkή ò¿)hEx¼wìóVÇ’`<–ñzbQËqtÅãˆ%¹qÆù½”°¤5.ßÕ‹k–dv#™µ>bIå0Rñz`ñ 6·Ôjoé§çsâñ<‚ë”¶Ïÿ%Át"ãs¦QËq’ßÿÿ’ªóˆŒÿ©ýEÙ‘Xžiü ˜”|¯[]©;7FE~þuœEÁ±ŠßûÐúçŒIyéð>ìÜþ¢úÒi}Ø÷Eù¥cî îçÔ—Ø=ïY”vÞ0âw¦}I³ •õT™¸¡¶s¯G*>s½ócãdëôšÏ×]˜;ÁçlèdÖ'Q‹ÒS!‰ì̦IoƒŸÉÃØ÷ä!ÜòHë7ò|ç¹—ûBî>žÈíADžHnx¦#1ßX\ÇÎ;ò°ù@2'ä‘í3×L<%dŒ#Íœ<(¬8:ÀšÜù¨M»Í °®’TŽÏ@—b'J‘Å"ŒŠBdÛ$òÝðÇ­ü$§­ÐµýË7­Æ¾ùdþýÍWõïI•Ù„Wa™GÛcTL’·ùîýýÝÝÍû§ÛûÏêGÿmœèUÐÆ¶)eþ§zœß\½ý·.…X ³í#E¹a)þª“RÕpbZøê,©^ß©v¡*“ò“íÃc”¨A•šLlb“ èÿ!0©£T†¨ò7æGÞ¼æuùæËƒƒT¾ŽÑßyö6z‘úWÅq^gUUK„©šRÔÅ”¿xgÞ©àwç–\ÈÀ *Øþ²A'4ÿßá.Š+ÚŠâ=Žó§ý;0qMÅô†L²]Ž`„Auˆ0ŽÔ?•¸¬tÄz³ÚXD–6‰b²u Åg¯ˆ —¾dµ :ŠòfTQƒ5-/¼r+x£(o<ÆR5hºÇ°ÿnJP/^û£.)øc7 A£t ^ä´–vÞˆò T'¥ˆKQA›ûQ”?š‰5ìúûŽjl&EXê 1$œÔ-€6ARVÆ/`â.ÄŸQ½©â4¯·úË»‘³€Ûú3ñ^¼ãx`›?IÚî/‡cÐAíÿ$i<4ž×Uw8Ñ1W W ¨î¬T °2´ÉAk#D *÷61 B%ÒM¨þEy³©¨@ý„—!kà4Ð2ÃÔ@¦Nâ@”à¨Cð!Ð TúÔA+äy¨7¥ E´MSÔ³H +¸¸m‚(J „íY¼BÉúo.½g¡:Š*ÚFU„«ÎhoÖ6Q'¡œ@0‰Ì¢Bò —ÎhoÎ6‘]˜çÚ ‡?Ý]²X\,)²Šö¨<ÄyCª8xNêÄ|4Õ)OqOÑ4ЛP"ž¦ˆ'q JpëÄ|4U‡ÛC\„vóYÜgDüÉ‹8Ð"A³ƒ¨ T•XÖ@;W• ÑJž‰ _¦Á jŒ¬6:Ylu™Ä‚‰QÕC'ŠdEbB e½!ÕG<ˆÙÆ#ëC“8¶JÌÃ1訊Ñ$‡Æóú¢Ê«pSÇÏ0Êi ¼ lÐ [sJ`S'i•(Èí6Ô§×ùlà»&ðÝ$ð c{ºÇ*Ð~GÈyвX4iêCÌ^Ûf3èeˆ«bm˜Õ«ÛjS;Eå7)ŸÅ‹Êczî€ÄbàÀ`¥(r™è,G1ÎÂa¸}8\JqÔ?fh›@8gY¡(Ë ÅXBë€|ÍTC^EU-œ³`­ l0¹®rT³5Šª8pÓ´IöIFòyšÄðÇkAÀÛ¨l>V–É6yϱ˜Ýsæ¤öƒ9÷Õ‘=‡‚«x|šÇÏjô– Ú´y,º…ÇÇm(böY±3œ]ˆ?ž l*žTùñe[pŽã|6˜u¹ÊïýúÑŠã ‚¨ÃVŽXÌ eUÖq¥†xˆvÖ"nÃÁ­nœ¯ˆÒ/^E_[Ô¸ôY˜™²•>Ë1S¶rufÊ&O¦ýWÊQ€ÐÆÁªåVltmçá8β‰ƒå¤ ª÷Äz¬÷<õ|E•Ø¿BÛ8(b—ž/äN¿¿åsJr†9Ž„€îì Ï+§"§¨I\ŸšAPŸ̳‚yNÀÏHñ¬ê’hÿ錫ø ‡Á‹ì.ð>ÆRÅÀŠ[|+Ô?3sÀ3a°¬ÛEI æùÓé ›¨ân ÓQ@cš«G.œÜüí8‰PêHç…gQâ¨û?`£9ŒòG´Q S¿N ~XA¸*‚= G5f9êÒ7çÓH¥„6éêéÒg Ë(ÌÒ†Á™<º@dæ4ÒŸ³‰„ff¡~4Ú ä^…+Ú¹‰ÆìV´ c±¨@È2:&Ïy(åÕ€.@°­@s­7°9m/X?j“@os¥3èq+¢ZbªB!TQÀj`®Ò„ÒõA8ýQ< [@+d ~"bBžˆ(òQšƒËÐCÒÓHe :2]ȲÀ5=ã@¨ „75e”mócr}%´Ü]ÑþÄ6:°Ñ°šPF/àǧ ¾ÀŸRlò¾«; à™0(a‘F±@ ã Œ&YQo ŽãÅþbYg‘ ¸òCDuÔìú³x2.“µ‡;ôÇ´‘àõá&AhiÂÀ ²–â¯Ú\Nm"'Ê&Ö0¶—›â¦®h±½1­hÆcQöå(‚iïM€sê@% t #5‘`TÄžaz€GÍþ€Í6€u ,í œcƒ(šöÂr,­KD¢x: ˆ‡\À® ¦ÿú9‚gaÀSAÀ ¬Áž.ÀU‡:µâ°»€wгXg ì¦ëMó*xAOCA¸M(´Ð·9¢Ø» á6ý«¬Ä~È ´qÀ |•§$Cœö‚0M ŒS9+P;‹“@Î6ΙF|4> „qê@ØcÞ%‡ÉÏA ‚–Ÿù^˜—Àù9p6ÀüÌ)fB;ŽƒPSðdVu ±5  ê×d€{Ou•ñ!9Áëå4ÒŸ³‹„ÕÌ:3ßœWÌqÓ~ãT-ë2çd™Àó°L€¹W¦ðœëb `)0ÇÔže}MÁ2핸ƒ€“@Æ6–‡æp,‚Åd{‰ýzb9˜4‹{Yß\kè¯Ê&a°ÊÐA éÑÈ0Î$+¨©í4@ª#áÓÛ×׉ãü1u¸­à"ïcpõVÐ:Âí‚Îp.ôvÁLTöÃæoã4 ¡wIuÑïæÑëÜ]t ¢a÷JM±Í5QXêA0ÚÜ4…`.T³-ÈÃX(±‰…·W̘¿ÉvÞI(·½ž¦MÕ—Vdúì»÷šHÏ: „Ú@¿µ‘žóPUET$ Ž¡‡GCˆ›hÿ¢ÇN“ t¥¶§žC m0†9‹Š(="™gÁfŒbU¸‰TX‰h&fÁ fQ6ÚPèd÷¢BïE…¤Ýû^^=FM²J”;È‹1ð4ŠÝÅcàÓŸÈü ¨…ô'¢‹+º‹+º‹+¢‹${Žö{¬Q4˜ÝF£°ÓmAÏ~—Ø„!Æ 8 pchóýrv<Š3Ûh vg.ðÀ–¶ÆöD}$˜µFõDz³7‰Ã2¯+ìsè€Â[‰ÀH \˜ý7,ÿ0Ln‚1Ì ÕÎ11hÍsÌë¿ò9¦=¥Q†¤„Biu(жÜaaË–µÜ!PÍe¹èu§Ü\»‹[O$™ÞÌ¢‘äˆ ŽI=a˜Dc°q“pYÄì>ƒ­¢Ø/yù6k^¸ŠâPâk…vé Za }>Fšàpœ½†¿’ØÐ¸ ZdSÓàZG8 ñØvI7K_(ì&Åܦë \‰4Ceò(‚jý2Vo3|{ÅþÇ]MÄ»>bÌD*„TA‰*(,‹êê—Éßb zi¦as{svÁþ¯ÏXæØÞl¨Z;ÕQ‰8*Gf,ø²‚/½UÐ-®êî´‚ïAšÆ‚ÿñð†Øÿtxèy8ÜòØ @³qåKf?@Ê®]RаVÐiœ/b©–»Z¨}„?¨XõAàRù‚é X™ó:ƒ6†Ã_2)Ç"‚Ü;oÁ†1¾`&Vææ ¬¾P‚‹Õí k£Í%„VÐmÂöA,ö8Šmo!aKý‚l* xç‹ÚÅAª„ÔˆÔßÀˆÃ(@Â{NŠâ\æ“0o@,å×,>”y¦Æ!ÐLœEzsö‘ Ì|•q•‚)Aþ€:ÂV%GQ‚ËyåKg¢|Kù%ɶù‹Ôÿ õà>É¢L*ý™[ïœl4Þ-k¬£7ú¿fÊ0ÐðËç©,< ‹²JvI¬_EU^âò{If` „à᳑ àѳ:äàÙðá½1-àã{cTßð 9·™Ôkvï- igá0fØpy~ŒL~eU©´ÄXPú0*A¯‚¶sǾ¶pËÃÎLe§WÁÛ!x €ƒieŒC•1ŽSÆpH‘5n9bŸÕy< z‡ß‰¨ª‘½Ð8ÝÄ"€!oSŽh!oSŽP½ß¦s"»EÐDzƜ˜úå¡!*ôëCCZЈFÀöc3´öxAhÁ~À†ÐÃ>·ã0€§†¢‚?¬2¤\e ûÀÊ9/ô¿E)©•[yhEðí^þ’!‡RÃH õK†2A¯4ÂB¯5â‚®6W$mu@¢V'ä$߈rŽoÄé}ŠoÈ ¼³oH ¼·oÈ ¹»oL»A7ÄŒyGÁPâ=àÆ˜ ³Ø&häA,˜XÇÂÛ{Å’l—£¨0ôö†2-€ç§ S¨áÀ‡Ùá #°:ƒ ¹kŒ ¹…kŒê}×ÛN Û\û¾wfÈ ¾{fÈ »fÊ ºÛeÊ ºßeÊìÇ˹.¶*N¢Ç±0â& ¸Yc ¸]cê{ÃÆR"‡º ÃÝ#L‰èšäÊd¨ð´Ãp³ ‡“ƒoarƒobRÃnc1ò舫½£P ¯ ]¡-ÕL¿¹|kwšW¢<ÚùNE¾sFža5‘ŠlvÎÚH*ŠåãûÒlãû¦läõzìi_„Ñv[ )êé+o)Úu_Mt`£AØû4ßD)wåi£@x@. /‰÷ÞeOã½eÙùíT©üŽ™¡üŽ•™<Ž‘÷HB_Yü¼Žþy˜\†øFv1Úߨ6 c`1ˆ00xã;‹ò†6Â&!RC|VÁß ·ðFÙ B6Îm‚F„*N“•[lÆHÍÏ{ó´ú~0ðžcæìAlRÐ^dàƒõ&*!p2ŽñF÷,ž_y“y~ÜaŒæóM‡1Ûú;Pc¬õ÷žÆD+ï:aPŒ©—NŒñ|/šXà”hP‰&…•/ìn˜1,ìR˜1.à6˜e`I!–d`&_2ùŠÉWØL¾¢dò%“¯Ð™Å…ÚîÏ­ÂIä\ # lOÊÑ=)C÷èüô½ciÂë{¹ÒÔëV¥ ¡¾G74Ÿ‡ú“ê+ˆƒóñ½MEL¨£ Ÿ$œƒ‹aùÞê4aó½Îi‚çuÓ˜0—ÅŽPèîpobŽ-t{ú ÜE8O?Áñ®PxW(¼+ì~©1$ìb©1*àF©e`I!–dXõ½þjëyïÕ„Òç«1žßVèÎotŒæ±:ó»Ôj æw›ÕÌã«9˜ÄI ¬²yÝ­5!ó¹Tkµz›VO^ð/vÀ:P“3Ô¬ >ÃuÁ¸žÑáb×°k¨uôšz½·V€]'À® ÖÐkèuÜša=€°€]€®@çÿ ¹?~ÞŸó#çûˆ¹>bžã#ç÷ȹ=f^O˜ÓæóعÃpþ[#¤¸[‘UI¤O¹é;ñe^—>“˜æy_ô^%0*Uäðí ã¬^ Bv¢Ä:‚-¾yYiGA¾6ÂæùvüÍó½ø™Ïñ#0ýF:kâ‹¥C TÉQ”£ _2bóø:å˜Ëã³”c¦µïQºy Ù5‰Ó¡2 ׄ/„ÑáöŸù&Œõ-nÐF{èK«åL£:ó¹ÙtÆ9 „pÚ@0gnt&a ÆÖøè¤ü_àœQú¿¾9#õ|ysFkÞbƒ“ ”æµ7¡¡â c|ÙL ,‰E&¡e<Žò†³Q¼£¨" Û ÄL‡@¨²¼¹hÑë³Ý#:G¨/å0B›—û(KþÆÐ:B}i‡¡Ú¢ÌÿTÿGù26Q¼RÄ"9AŸ—q”/^ÂËS0[ž‚ÁòD%ãƒÐ? $›„ùÒµa(²Ôÿ[pƒiM0de@ ŸwVƤÂç}•1ŸX}WeBUUI¶—`²Q˜? ƒV":é!¾d:D•? hó<ŒñæÒ10¿¥Ô—ßjêËcAuD¥¿aµKóÊHõœ†/w«»º!²|Ëãf D³¤…P¾P2w4Ø|jÖ%L­SÔúäY—þ®K¡þ¿ÿ;ûWay £mI©·ž×téÀwC­w+ZgLéÀ`¨ÕüUy z-ŸË»ü 2yc²EpÔ\V”I'…Y®'Ý9M¬×©&¹(gÌž™íâ>K†2‹ ]=Kj©=K² ª üIJRÍl9Êá…6ÕhQK§(öªy‰^iÞ¦2H[ ÉQÚ,€H×eR½Ú "zz(£};•é…ë¾H.\$(ÞÛöXŸ”à(ü=´ã½ ‡pŒ>-âÝÕU~4u#ŠcóÝ;ziž“DºJRËt†Èk˜×+ɦŒ£TðêL oÐH1¢Eâ1Æã oç%Š>IUû,Çs¸,ˆ49¤ßÓ*§K¼Aý›ö¯ Ź$‡´9”£åÏ$Ÿ?´5ýñ¿º0<é…¸(‡39’#âÏ$Ÿ?‚µ*>pôô!¬±^ï+Þf"ÛyÂ1l[Ãùˆ«å‹Ë—3Š©ö‹ÃåæÐB›k¿eL.µŠÉ“-¼£<«¢$e’IûQVzÉ“D:JRËq†Èk˜×+Ýf)ö‰¬ÊWÆÂuI ·’\…Û!òæõÊg³Ý‚ØÊyA)êÜ¥?¿XŽ\,3øòáElyþ|ªáPfʉF™»J´ÀÉ…‹dÁ»<ær»a[=#ˆõ<$—õÓ*§K´Á­jòWó`rYºµp{-b  ˜¼1Ù"8:UBVÊG‘¹´°ÞZ-r‘uPLÞ˜l18ŠÊcw䊱ôd©Ž²le•U¢oçâµ?פ{·šìÆ›÷â.`®Ì• ÍËxÊŠ‹äÂE2€Á{\Ë*?&Gý½aÆ:° Kõ?e+ý!*¿y~ß –EvJÊ<ãg­ÈRÍdÙ }ˆÊožß7ƒå"WóîWÎòž+R-[E¶RnYݲeðؽGÅX°.Mªãî•-®Âõ?æ™Ù.ƒSÕ Tu”£ød¬½¬Lõ?Vf+ô ðErá"Àç=•~ßåÕÀ¡Ì” 2w5h/’ ɼ÷L–"ÎË-Ë1³%5¤Ûµˆ‡`lÙÌQ|ý³´Ýs!´/-D//ƒÃa‰Ã ÚÈ®ÎÌßDË b8k1ba ±¸ìq9C›ÚGêï86ÿB8[±°ZKn¨F˜–˜–ÔHæ8”F`lÙ̱øb{õoE”î—çe@&·mnÇh³‡m¢"ö‡*NkY™»óˆ¥|NgxªH,ß «[V£hLí.SƒËÑÒÒ›XzÛJlT}®=Çïq1è9øµkBϑ畚Ü&;†N)¤£VŠZµ:$c<žèv¬©‘Ñš!<Ô–ª8ÑAS:ôJ¨aü0X!ºˆÕÕGQÒ_³_Ö£øéáÍ>‹×ST§ +s.%œÁV‰X; W,†È^ÔùJj"Fó¦þËT^‹Ë—3²))âR0>es=šI«ÇT‚ £OF‹hwim7Qªßýa˜b.©á<Õˆ…8csÈfŽà+~æ(¶ø™£¸âgr1ÅÏt'dþ}”Eék•Äú½gYDS³UY¬W‡,¹]¨üæù}£-•Ø^l·‰dxÄpFbÄbbqÙãrF4¥ôÑçCn-йN‹b°LT/£fU»d_—L¯k®©bMÏUÉ•ÖÊîœÝ4Õï6ª¢M$[I»I~[Ažòíð8­rº¤l¯à)YΕ®ˆ’,Ey w„Ém›Û1Õ¬¾Žc¶(G²jåxеAã3Éço-Ï’*/Õè’ãÞ–%5¤Å©Áæ«ü+åRœÕDZžiR«î’Ù3³]šSÆaÄ’Á)×b„Æg’ÏÍóÐáœ$Á,ç°a†Èk˜×+Í&ÛpÁ-F0É3T`qÙãr†6Õ¼yd•(w,‹ƒçqF§ŠÄrœ²ºe5Šö˜"“‡dW5 S'ØÎkâ/h⹬ö¥àzã²`A˜XÉ—p/‘—pÏ`œoÀx^“jœièè€döÌl—Á)ïpr]—êq`¹{ÿ°Îàšk°yN‘ê™eØ9duËjï±LNQ%xßb]Ezž‹RË×Ém›Û1ƒYž÷]—õ¨fÞ~À1úd´ˆwWoÒD¸o»UmÃøÎ"Ž©¥9Áã´ÊémP?Þªm>B%™Ž,¯Êâl;e‰EìFå7Ïï›`y›È8Š‚£¤]ZX›­¹L;(&oL¶±üÏJRòŒü›[¡íWÔ¤LöL÷Ó­ëbý»tɕ٠{ÿ°Îâz«ªS–ð,é­ëÒý÷ºŒE?€½€ÿ X'¸æº€Ö¥„õÈrÁlÄâŠÅÙ Ó—ƒåhþ8¾ªÄKôÊhr¬ÈáµQä²\Q&Ùž»;d9Ì7²¬UºEå7Ïïoù¸‰âçºhŽÐK{Qiw¤G-ß1£OF‹hw/bÃòáá¹ΗÕ!YÃà‡Á Ñ…L‰‡ef27Zæ¼£ø âçЬ¿=î•ý »ű~%=^EZ?Š8{§åÞùÈ-;4ÑA³Š­ä‚^.°r‘ ŒÙ©9!Áft¦FòiN\0Úä2Èe mêËŠ¡Ðf28KZ†ZL…ì…ìÏ_UET$HvŒänR†3ç›?Õ1Ô#‡΋¢Ö¥²ÎB»ÏMr5“ÁyR2•Á;’ªÉðY¤:gg¬óÒhàT‘|f¨p3œ-ƒ«ljØ¥þË3ZXÓ‚x+ìéã5S$;úíD¦âšIái)ŽÂ2H,¾XѼÔ|%Uó•TÍTR5GIÕ%USKJÚ$Ûëà5:XSÛm¨U¡Ï‡b—ÍD0v¶Û@‰«Ÿˆ=ëE¿ÆB_­ÝŽÖH¶õµ^`õÚA ÞlUÔGk®‚4¦THWsE^e{zC¸(†3g.Ü3b´Æp„ÅäŽÉÖÑ1ÉìM@9}\¸(†r7#–Ú‹É“/¤£¢H“Ø^ê.“JEE•Øçå+¹½„1®{á@ ­0­dq/ðÎ䚻й˚µˆíÜ–çªÆí- °ÏmœÛ2“Y>›|‘ÖÌeQá>Í7Q.´Z¶x^cÕhV1ð½ÞjѲcàM|jW–ƒyÊÓº©P•<sê`ì⤬᜗­Iâ­²ÍÎDúÍ-„wHœ¦™Ë~Ë-ÁÏHãà `ù3nóc”däÖÄ­„q¤þÑ*ÑZˆÃ‡¤‘×,:&1W«¿¬†1gÕXZû1—A.k8Sâ[,ì;¼,ísr‹ÃÐzŠÆæ‘ÍÎ×|DH,Ãó‚Ÿó&¥ÇÔŒƒi®Q4ËSÈòìÑŸ8âsF|ºHÏ”Iú%©úiOks<¥PÎh¢=jÍ Ód(² $¯e^³8›¤SjKKøóiCš<»ª †Y— ƈ–!nËšW™Ò4ô<è¾hÉ©ƒðÔè>GÜWMÉ|W½D¥‹(~Ž([a+Š£­bÐ("-·’Ú0L%¦”©Y8Öi•Ä‘dÞ¦õ‘Ÿme·n—PÙ½³»ÆùíÖ›ˆEìÔA¸ë–­(…¨aÈÄ\i‡ÖA´¯ZRËÇ!ƒñÓ¼­I*Ï÷PW½]àøÛ®‡X".„—¶Û¢”¹{&÷Æ´Î×|2Sü# ¿@ó«ABÙ=˜( ¨E‚Þ/Я$jP]Ûˆ²#ëÔAØÑï((ÀêL¡_»XÒ@šÁ½pÑ@´ŸkÍ׆‰ ײÂZ+˜S±1“;&_XGæ.øp«~•EL/·e9”C#(¹@ÉËnŒÆæ‘ÍÍËêì²Á}µvŒÅäŽÉÍQ‹ÿ«ÔæbwFŒ¥Ô,“;&_tGœ…ÆYflEÆdÇÍN^è¯.‹Ì1–"³XLî˜|Ñ1ŽGÇ"\ã–1Ëøƒ>öqÅÖδδKa(k<¦hvª˜­¸¦RcJŠ¥°4‹/G4/õ–­¤¦R_JŠ¥¤4‹/GX/’ã†KåG’ZèKzé‡*(?õ˜±<ä/lï[/‹aÌ)1ž7¯ ÓÉ…E-¬CŽ3 ŠeÏmA k޾ûf€f‡¶¢Š’T}®ÈbMÏ44²”0·ÓÐÜ$°ÎÌå6D’Á†dð.ŽäX¨Ÿm/¥¥vlËjsF-h¯·%usc0.ƒ\Öp¦ªhO-°©Š’ F ñ“ȑ̇RDÃøÔb8§‡qfôûI4…ã³Égd-ɶú][úMgõð6;=Žrìáølò$Yc¹enQ o~ËÜŠÇ)’ö;g<%æRÃÛk¿˜ÆPj¾ˆó5Èejªj&UùI”e²e1¸ I2Ûh­&Í8ÇéÖ%)¼Mò×!‹/GH/É‘^DS Œ¥A+ A³@ƒÇa×ÿ«š‹&×[ªIv¯ä—o\2{V†öêMƒÂWŽçñ.¹J°ÈÔªjT*ë…<ˆ-µ)YÕĸ.² Ó ¬&©©qBòZæ5ËaS=ü%oéÎÉvµ"cÉ@N³œ6q_’tkî†!–¤Sa¬Õ!•ZC·C7²b!WŒ*ñ:üíK¢jJ÷Gퟅ¾6bøÛsZçlµÃß*­Ñ¿-ƒ¾uÏßoõó°çU}Ü©¹þ¿‘Õ¡cðÈâÅÝ‹Ìë2f*®‘Ñ™ÕZ1˜È8ʼnþFQÖR”a,Ê*ÙéeB_Zâ ·"qÆŽ–T¸ýE–(Hr$-„Оs(ò² 7i®º”*ý%ÜOÎÛ‘=8¡##Tùè/‘NT¢/íSí¤hç[©ˆvþkv‹®=¥19 ¼wÒíôNK{®ì¹rCÖî²÷‘ºW’Lu@PS¢€2‹ФòÈ÷&¾Ü4‚©2Òëæ½108 Á9ÊÀÍ6ÜÔà×Ñ\±¾”›m c S‚Ñ`<êËDÇÅèlRÕôô*¯˜“H¨zBL$5NózÆÉÚíÏ}AM` œÕ7d¯·¤®¾aú/›¸ <%[ËèI0 » †3—bïušÂA< …ñÚP8-ªep„ÂháíƒMR¯Syör ÏãaÜzmËïp—Þï…sµß+æ\—ÊÇœv¦T? ¿` …uF{Û›6-³¨‡¼ÂaO¢Øm4»*£Á; €š0¡z^ý.%v“ŽÃÁÄM8‰\ TTÁ»’5!´5ô°B_¨ijþŸ84ɨ Y¬&Ež§8R—[宑´ÎÅ)2š‰©܃V[@g?:ÓqY=HÎóö¼%ZÏ»ò–˜}nÆ“{(l±‡ò{8R–Ty™d{ï³ H· »Õð;¥03¢ž¾›‹$¼Ù>+±¢žÁ¾ç4"$/44z06ª³qÅ‘á]Ï.Ú”IfùÚˆÌ#}amd #¨2>Sâx§á@è.Dn‡=BÕ'hÃâõ&¶c$Š Eq¢AlåÑœ’ò¼ iÂèögµÁ^cÆŽ1ÙÆ1¦¹Èe±£Úh }h ’ÓDLJ(ËèC mÌ4ñÝ`wÛ0‡Ã‰Íbw1Ê£úGòR¯È—¤Š¬m=Hž­¼^³°òÔ!ýI;Ä· ¾ÀèõudB §Å`bø `Wøl¼Âgã2‡IâW WdP.ë‡ êt;Ì?c`Nó}Gé 9é:Åq^Nò„™k-ÑI_ÿiá~1–0Ô`05_¨„¹ µ^sV†nD̽2ðÕ‹!«¨JbK#QF\ 0VÁš‘ z5¾Y”ŸË¥x_üA<|9O±tyVoº€9Ä@=‹ðg¡ÚÞ B|u„ªy²6ú¶šÌtðaÃ9 _îæùl4Ì Ø@¢âš±m7ôúX–ð¶aGÂfÜá.èó¶?ÏØ~Œ£‡ƒ{Q0ͪ· ΧS nY7¼òUVâõ4 òæ6A¶*Úäè¶3Ø—Õ£Õ¦Ù­ÂÈ–¯¹‹÷\¬ y{1B²» ž‹Gª­W¿7P¨ÎmUèKA'„èì”/œMQn%nïäœ\kJÞÈ !d“L50F”—}†¡xÎ Ò,êã:˜‚ëFÚc|öeB˜Ås¾®ú–ö< }e †@a\Š­nÌ"0©+Ø÷x ú`s Ý¡è#¼éJ¿Ý)$ï|“Ñ»þ§WQd¤PR†„qHˆô&‘QÌ”Q„0slÎ$áP ŒŠÕè!Ïv¾DÍûÒ´ê^$ùñe[`£¼¹l(£†Á{Ñ_FÓO6h™ÐíÈ)…óe¥ K…nw§¤¬j=!Û$⨅gqNÁÀBjf.Í|³Ûà÷í‹Tà;gà*.ÍD«pé€LÞ$}Ø®°Œ|hl€7Ͼ÷i¾ñ^p1LÓ /®}Ø  F㉙kØÈ\ãFæ 02·D€‘¹ò™kÈÈ\ã@FæšÆ{d®aú#Lþ@Ó¨þdLbÈ$Í?Ór¢[óÅ`/Vt«Þ$‹ Eð¨À­ü,È— ÖÚ›d0-¾3ЛÜò·ÉÁád$ÏÒ–Çs´…ñY íHÀ}Ò<Ê› Ö7Ù„€ýÓ,ÈÒOéd }Õ4Æ— Ög©DPý–#ÎÞ “XJ‰Åefú:?¡¾¬éO¸\&) ¸’À ËÞ+|ö^á³÷ ™½W„ì½"dï6{£¸ ;£½¡U4ÁŠQí)y¹§d囓Iöí¡=è8Ê›ÒFðôK®¨Aä<ÒS¿ FšñÅïŒ!#+€ÿ«È#V „*ßïõÑq Ø(Ê›ÍFAðô = ­ðÅÒË÷$óþ1ºú¹£}QÍ{˸ê§CO?!hO?! O?Ù®0lW¶+[: ø£QŸ‹ákY@:G¨/åðU.,­$àJ/èa½DБB^"è½_"hÙ~iÉ}i¹|?øÒR™s¥0ªAˆ/•9… ¤’,‰àU0ÿS¦–÷)ÓÊFBέ‘ójÌœ;ŸÆÎ¥Qóhä9ÆÌ±ófìœ5_ÆÏ•ñódä8?Î!óbôœ=ÆÍ…áó`ø8ÿÅÍ}qó^Äœ?ßÅÏu‘ó\à8¿…ÌmáóZøœ8Ÿ…ÍeaóXÀ<Oa@à 8¹‚L¬“*ä„ 3™ÂN¤°“(Ô ÆœWXÎ+,甹ùÐá"7!:jÌfDܔ詛=.d“¢ã„mVt”°M‹Ž°y¡ñcü9ƃñ`äЗ2è¥ wÑ]ð<¸… k ZÂP;ˆÅ_±WÔ•2X¥ SÑTÌÐ3(G1C>Ì`<Ì£ ð(C;ô 1œC ä C8Äà 1lƒØðC5ü 9(ïß!ά8UÀf´JЩÀílÅ)‰qÅ1 …ÛP8í.)ÅK¤~fk®­Kü{Õ1ú²ÌG¯´:pSª§.ki¾iQŠSóy Œ«3B0[PÐ Á}£Ô|žce £ob1ÀY´Gý\Bw§ô‹BP+­lpâËì9µuçÈ%ôb¦ï­ÊE ý`ÔÌD ýRÔÌC úDÔÌ‚U¥j‰50‰ã·ñ8x™lÑà},ZÅ"€e{3pšHÜ0É)Ä—íÂZåñÎÛÌ⸙èÛps#úÛõÑ~_Š}„îå–uà†”N0ÐA™|p}fð¡õ¼ïÖgÀjéýAžñ0Œl‚‘Ìyy´_fËS<û\áA‰΋ùŸù`;ÖÈTî¢S@XøÆ4 :#4ôc*¤p؆âçµÀî˜äß07¼ÍŒ!^IŸ‚¾Ÿ>7BÐ~£h¿´ á?è.þƒîâ?h.H½o´¹Þ7Âtï[˜E–º«P­LôÏsû_j½9'v¤EôÍIui„u*2{½Í™ÒÁ™‚¿õ:7vnø>ìÌH]˜¡÷&ʶ/ɶ:`Í,è€ Y Ó¡˜¢Y¡À`ÞtA^{!û¾;ƶ´ØfÕÆf¢zÉK\UÇam,8/÷Q–üŸL;`èC8?KkÏÒÔÓÛy™ dVNì"z·|Gî4É=&­»´Slòä¢ Ð‹‘¡-E6(øõ#‡Êr©Kžº–tF釴¦D\P"®&Q–’ä«LsÜâÑ(HlBá´èz¸…k½ˆÍ!Ïqè8FÛÄzKóKÍâçÚ»Û”æ×8hQÚ_6¶=ÄE˜fhú]˹(àˬ+øÆÜþæOd#‚›æOPS¥H£WB™8âA&L<¶DF‰e~J¶Þá–]L„ðvZ!ˆ/C ´0Œñ¥510óµN× ÄË|ÎB•û`h©rÿ -UîyD¡¡’ñA# ×(È—Ì!ØÌ /ÊŠPûp›£$Ãñ. =˜é¢ ”P`…¨¾è†èNˆ¤Ð?œ— ^&RS­Ù™¦"Úqø›Š‘vb<!SŠU ƪGïéÆ9õ&,þ†B$oFˆâ‹f†æ‰½Ù†éU^S b"1°ÙF‚à‚ÄO"Ç3“Ÿ©Ò­æ‹o•(³(åê|Îéa ¶z,ÝÞÞÕÿÖQ®ÿ-¤.dÏ[I—°K±×3Ü8Ù–D s%¬«h%.käçÿ¬ ‡QZË0À;Ôèßy¿sA¢_%Ú <ï—Å#‹/¸—î¯vˆeÖÆ£YS×ä€þº—ÇÚq[+Çá”Ç /;´ÞxMŽjÐÏÑMéy1²Kl:¢£»!XÀÐçX¨ú0y–F°ÝÐëU×ÛcÛDkn5¬Á®Q·j›[Q¤ù+ÑÝHkÊŠP¼ŒæFLÝò9M¬ÓÑœ‹£ƒA2úe´É厩ÓfœF»ýrtßcHŽvY‘Ç4¹Õmåø*2_=&Vã¦åêq§¶·)¬¹¦1Rw„uR§Öv¥´¿¹#Ù—v-kAk¦Q!١٠áã±õ<Ÿ©wHa é…Žþ½øèP xX@¬ï"v+º•È¢ ZAFA¾d6Á†È¸y$š€û®ZFÀW-œ÷W ÕI”¾Z8Žòek¢|ð2i~…Q 8°¦ÞÍ‚ÖàT€ùeƒ l Ïn´l On´lþŸÛhÙþª…÷¨EÆø’™˜<ä/@®Aˆ/–P©š™ì ù5 ò%³A^lßrù6Š"sC•j¹÷Y6úκʩBØÐ@‡bhq 8Fo¼á­@„Ž@?Èá°pœ *Ѥ„ äBH YÍ ÿl}Ìà€> f€ü¿f‘v[ØÈk凶ÛîCîðpuÞ鉨óúÃhÞgÿ,â0Âm_~§ø:$Dáî Láî páz€®ãAH2‘웼Dâ<Ô›° …k—$Ëé ûPžáƒ}!Ï >×PAç 22·LÞÃrd/=Ò$µoó0/¸A˜7¡ÐoOÃÛ‘y˜¡ƒ¶$&©S–€ñú6ã ù¶¡¡‚|ÔÐ yÍÐòˆ¨ªKÐ(wâÇdCü©óoÅ+ˆkäG–˜+ü§ZûÔÆö?îÅ£~DÒÝRÚ_% „[Tðæíî9ío¡õµpeϹC½ u(fDg’„"B¹|a’ý±ÀMS‘^€:1Q5 B¡X ™åyáaO5 ôÇký93Yé«¶rÐS1‹ò#´QA.x˜š‡ªtðúÖ%¸tu¸ruBé{áêU¢0% Ñ¿”÷@@ÄÝzßã Rb)%™WÈ̼Bfæ&3¯°™y…ÍÌ+Tf¢¾ÕfIQŸj³¬ð/µõ´PD(—?Ìs{tÆíQù–dÏÑÔMCüàlˆ?øÃq– üÝ8Kûl\Oˆ,cÔGãzRL)ë$¡ˆP.oÐ÷ë,èóuÉÿëu†*«Š0ª½oÒ4X“/.è ˆ!±ÅH(Ñ8Ì›¬ ó'ü %©a€•ð¨iaëøL¼'-ayš8›€ £Ån,/F˜Q[Ìó„%[ÒÀ%œƒ‹a„‚¡2•}ÀLƒoJÏÃüù€ÛÓ6)Ôµ;@ ß­î’$<>ø}kÊæµM¼ƒ=Âö²»¤°5µ«ÝÚî’Ä`bøÀ`Èíî3ñ0`ÌÆ÷` ˜ÄøãAŽt‰ÐάËÀð § áÈÀ™xØÃ}â(b&Œ­ªŠ¨H\6ÀÔ¤àǃ?à°îÏŠ<êÐ'âEQÂÙ0Ç£´àƒ6aÔiw(~.¢I]kñYWÑg%–Ã1РSã¤%žZâ‰U{’b)ØŸu¦b–¬$AK54«¯(Y}EÉê+tV_‘²úŠ”ÕWø¬ÆŸÂ8@GžÇèG£0l{Z¾îiÙºÇç*üȆ#À <¼aÃàXˆÀ"Îrô‰R*þTéhGŸ8Š… cƒ÷pÄ¡?tb¨ÓŽ@Lø969 "† †9⎅ÂO‰èDáGE&QHø¡3Ø'4Gîxd3[À6G¨‰jzŸÔ˜dü¯$šðùßD4aô¼€hÌyú EÙ…ÁO?!¯p„W8Â+ áI”úÓ\Èqˆ3@lÃQ£‘"9¦X®hndé„1°D0X©zêí¶Ô_oÅ0ÎÂa¸¥êîm8”1vB-Â× K±Ésø^Ç(̟φ Õ¿mü¿’;`(›@ gpú]|p䱃õ1þ`*–E…< jß$€ØB9…9ÅQgIõŠ u„C˜EÐ…£È³ÊÿVÊ÷0Lm‚̨SÖÓH -üdµI0Íãr±Þw Dn£ØU©ó0lB´€ '°€{'¬¾×?PÍ÷ôBó‘{8í<l‚Œg–$hI¢†ÖŠWY x‡; €š0a%Rqþwg÷ÓHÎ.†ZoÓ-a®â ÷‡ÖáØÙŠIÅ‹¢„±aÚ,Tso©Niï°Aþl:Î&QpElyNELxV\ÑÜ"Æ>):a ,Vî0ÇéGa¼r><¯“"”¸#Æ‹-ñ—«D â€ß ‚=àw’˜†QbF n«ö¥öá4ÀY€¯±i‹HÊ—¼Ü¢x'Á0â6Î »Å}Œ »Ë}L ¹Ñ½þ¦ûäS%Ô4€«CЦżžà GQƒ_Uø;Ï„ù?)àëŽ`j4ÁÞÌ„­G®#vú×Ýfí0b61ûŠà-Eøn"|#¸‡ß>„ï7 ñû…ø­Bä.!zƒ½7ˆÛî7!û€ø-@üîrãºçÝîíôÁ7ùàû{À­=Ì®fC¼—ÜÆîàA6ï€ûvÀ-;Ènf£³GÞžÃïÌá7åûqØ­8ì.jµ÷†Úvƒï¸¡7ÛÐûl¸-6Üînc ±§†ÚNCí¤Á7ѰûgØ­3Ô®zà ½W†Û&ƒïÁ7Ç€ûb¨-1Ôn|# ¿†ßþBî|A7½ û] ­.hSmE@ t[ º£ÚÌïc·°`»Wè+ôžn» ¸Sܤ‚ìOÁ·¦à»RÀ )ô^z ·\A.žAÖÍ »MÐ&Ðt{ º³ÚTÂí'á¶’»HØ $ìÞjÛ¹c„Ü,Âìᶈp»Cˆ!üž~;¹„ÝÂîÿ@·~êXê_á6‘Ïá^MÔs§Iì;ÜV±ïÎůA«XóKÇ&>°ñ x5ÝVÜQO½qÕßøßTÜrîÕ¬û¨ßÄ‘jfPù|F—½•´"·]Äy Gù²&º:ä)O?àqžeú_Oþ+|-çB¸/°n$†áòccrvæKªÂÀykïÛ†ùæOá_êŠöç5ÑA ÁÖo£Ú‡Y /¬~?Þ>äåØGø’©äCö-äCö-–÷‡ì[0I{Ì%í1—„Ç\Æe½ÁµþŽPobŠhíU-N¢Ô¼kÚF÷9oFÄ윛fåÅ<Ê‘ž›fQæ=øp <˜6¡€ò'*ÍöÆH5ñÈã²¹14r^ âH)u×O”(Öve~ +q,Ò¨Ds.-¬=­´ZƒLÞ˜l¡™9T¬ú -¸cuÅz³›X˜Xp•—jÑ_¸ CvF{CÛèþ–V¶Ýbù+‡Ž·fÞ°v‹æ¯4ʪ’£0ÓVå$Ì—± ƒÖu²ÅŒ°§q¾Œ:<Æ>6¶upÅúÂêXT;`6Dv‰÷-÷ì$ÎTwþ: YåÍt ‚­òfi, zÌM»­ŸŽXoPÝæ£ê§Dä¤D䤿äËK†i&a¾x*̧-Józ+ãHÿõÁþiøw»4WC»l¯—sV©‡RöOïÎJqÒ…ñÁþiøw­”^.¢¸K²“ÈTGýŠ6Õ) ½ô ( Í Å³™;oÆ¡…¶ÕL||šA/ƒ<ÖxLQìœò´> ª‘ ÚŽUÛ¡6 Ô–€ôøwÏöéwÀð»0Ô³Ÿ‰ê%/ŸQ?Ž…Q7±ð oWý9¨0ôvÙ㘃ŸÜÂ’›UZ[Jh@ ­&¶©”õ&óÙ9uÑC´&NKhÍ M¸W»Ý>½Hý+Œâ£ï×”ÚØw*î+ö owè]ÅÙ_ñÑëËJNà$ÛåHÞA(W‡bhq 8F(^‘„{5‘z‰^1˜³hn‘M4»H“æT¾~ ô¨ÁwGÂábE fª 1¿Š™ÇMTÅýžI¡¦‹ì””yæ÷u©™Å5-ˆC£4ZÁ@ gðÏ|nÅ.Qÿäµ±àÍ)·¥d‚^ïè¯ZÔ‚df¨€óa â|+6uâsJ|?…`w±`ý·I…$C‘m0†¹H ¡Z¤ž„C¹Ûp8¹ùØg´ß—bo›L}}^&GÈç×SæÐ|[t Œ$‰®}¾ƒ»fÓçs¸k¾V¿Š»dd«Êþ¤gÄýyðogA aªU %¤µR=’~‘K–& +­ÖB ~ z‚Û„m¢ Wí1ËQ»c5¨FÁWbÑj¶çu‚F3è5éÆ9 så1ˆŸ(œ"XCN&8úG£þÇsQgÍæY]‚k­;êÜ|–€Ö2A ã«:J!o­ù_’$Xo$½ß*š¹ÏúcﵬP]Ä<âEEM4;d•Ä™Of>ëI+†Ydd"£g½PGû´´&Ó­ñ¡Í£Ðs5${ †Öó; m’ÉBý«xVQ¹˜éÒ‚„¾“¬ÔÅóQ¢—+§±n‹[®Ô‰"—+'¡P\Ìr¥NŠcâ©O?éØ à‡Ûp\5h’FÖ„y4‚SäU¸©ãgõ¨cóÜ­Á—WUÀå|€Ì|§Î²Ôt™õƒH ±Ž£Š¸Du,£@¨ „sª†u+²Êë…í,Æ¬Úæ&œDŽÞñXVAûÀíqh³`!‘Õf5`<$¢ í_ðMâ$ļA6ƒ*Ql8…â¢=9\ìÁŽ"A¬r¸B-¢2: =+Ôü1Sçe¨…Nżlž KýRü®Î옯´ýnéAo6ˆo"®‘Ó50È´~¿6W^‰ :aÖ|`vÏìèô%Úé'f‹Ý€uÅC¼¨ø ‹ÇÀcÛái,ÕëD‘íð$Š‹i‡u’ÈýˆI(”³¡“|›0ŠS$ð8ʬ¢ Á6G·vyy´+Äâ[‘—jÅ`]É×ÎX)h”Àõg¤Ú¨ø1Ð[‘Aš22ПÕ(ó¬ÒTe²Át†çU`~´J0TAÚÁ4¡ áà†t4úI™F#¸qOD“ð)J“mD«?”^i'/“}’©¦3Öw¤#çÖ¾z‹V/°z¨Ù·«Ê(I1®† |æ|чÀ„~‹Ó{Ÿ‘±÷àÞ¼Oó½ Õÿ5›§è†jM îL‹êÿšíW\#æÂÂ6i+Zd‡¨æÎ¥¯×Mâp—¤ðmX(Ù² ¬(w&·Lþü©þ! ‘§]±¾ì:6ÀœWÜe(²m‘'à3ÓŽPoÜ£ ÚP(m)'Ñík+˜Jã!q3j߈Wž×,R?¾ «hîœÁÞšàÀ㘫M\¥hÞ Ôï‹ø§0:&ê' è¸ËêK«BèP0­Ü£ºsW,ˆWîáu›(¢ov„Bq¡=o›dšìDü«Ÿ=äù3’Û)uЉZã£âŵ¬ò£~™³9؈­Ög… &Z¡î„$ªÂÏpµÿœÉ湘Á0øa°t!’]˦±n‹«K:Qdõ™„Bq1•D$ÇÅK7øÒŸÄ‚PÓ ²ôU¢ØÒ‡BqQ¥Ÿn 8F ^¢OÝêK'±UÀ)np•¡KY#\ñ(zLÝè'p´iTgñpO× Ú­a· ¾wvÍ-Äèz> AǸº­“ôºÏ ëu ž“uý<*òGQ1]ã(Q€@¶fÝ1J£òˆ t„Cx›J%Wc,Ì-øµõ5ˆ—N»¢î‚AVñ32K˜Ê?E¡›¡ûZ Ýѱ(1€¿‹Ã$ß~‘¹ºæŠÑ·_·Å¬³U¥þ¹Š:‰?#±ÒȦðSºº ýé9±7_Oö/Nˆý5;+(»C‚í8EÀ>Ú T—1Â@>Kh'˜çbAô@ÄG'È#õKñPös´~˜8¡ê$¸#öCtl…Á7?øvÙàdúh&¥ŠÌ àZ_ILò„Z2GÑcëI?UëE!£h+ònÌ9¸Š¶3…!U#ò(nj _©(£8·ÅÂB!Àg˜¡PhŠ¥Õ)Ê3áÒÀðëùúYh!ÏCk[ÿÕdº͹J‘,é@ýæ¨ ºh†0„âY¡Xâ(&ºº„…qt}"Ž®O”Ñõ‰6º>ÑF×'Âèú„]ŸÐ£ënt}*2Z )2Z )2B )2R )2R )2| )24žˆú’d€OªÏxáhîûõ ¹ £Ê¾oºç±þÌ2èb¡À¸ûÉæ‘XĽd:Ac0û(¢Š‚ⵟIÄ5kîxrû}ED³Ö'ŽjÖœátx³Ö'‡ÆóQ«hÀì£ ˆ* Ž'ŸQ|ò(Ÿ1„ƒ‹×±OÚ¨ƒÁýí¨çn‚‚|ü–U~0ã„ì„l¿ÃÝö7ó¦Ý!nùÓ‰a*Éõr¾FWƒ&á\${…h½óB¼7n(ñA☒w‡cÐÁ5a4Ï‹DíoFBYUÂXéïY‚‰uGCðž&3ݬ üÛŠ+2(7È·õ îá×€°§ìÏËø;ÚŒ>'„:{?GA5XçT~àÍ× „ì„lÈ«Š*“˜R¹$  t¥ +”[éS‘$z8ûöÁ<‹zû@%Ù~X•ó`qûYRx77›cMG8„»¹õH6IÎrŸA¸Àžâžb ˜% ´L#3‚ z âãÈi™OËvB†£‰Ñ°Ns)©Óè¸ÙFPVW°7¯ l0„9‰Ža,J\Ëè öeVÁ†·$]²HZ$'Ó6Lã ŒàÖ@'vŒ²h/¶¸78 Øâ “ü. ·½tFäaVW™ˆvyYéÚ>82†ÔíK£+·[‚Ümnãªw“.²RÌ£Aè–SðŽÎgTö–yŠo7fÁ^Œk+L²È 1c*ƒIÉŠÄÊ蘆;±%æÞÖe·Vz°QžDi†7ÉN/báëõŠÈ”‘ R¸:ï@B>畈Þ0OG­t°f¦±|‹F²"1„ÏI&d¢?ÄP ð¨ÄìKÛ6ÂÜÌø¢4‰ Ï«#Ô—·™*šP­½BE; ÒÚ[‡á´˜¶Ð ¤·uM’ˆæ` d…6¨5ÔÚ|M£I5 uÅIácÑ4Ù* ¿ƒ|ç ÚÆA Ë­¤]Qµ(à‹­WT’Gt®x=æ¡Cžãq„¢¡´øó: á jäùœRlå!ÙUa\æ²û*n›àï¥æí«Q ŒZûÍÝN eõ»‚Á&àÏo›,æÙuÄ‚‰ÁÏl›(’‰‰!¤<¬g4ÀìèÇV¿¹ú¿]᪳#ÖÜÆ"*s“èADiuトŸ‘Ü (¾•ŒÆ扜‡B©ÁÏc“$LjÀû;üÄ Õ¡Úþ“åYÞ¬:Â׫ϊø:è¿}>zé¿@v0 p÷Ÿ,Òæû½¾VÎ: „Ú@ §½:Têo·î’}]"ëÈ9€‡F&ÉÉ×,†DxuïEldR!*ñ8Ù‚83hÝGx“eŠTåE#À†q<‚üK†Õ¢ï$Îò/˜8¤CERÖGÙmuG{«1˜ï½ê„¥R7,Uþ,2¸+‚ÞÄ&ÞþïºöÿÃòFψ×uð»E / :¸ùÿò( àxî:¦œ›€-ç@#Ì™…“(%ê…å™—ÎR£D-ˆ\H!š1J‘õ/ÝH×¥úäI÷‰M]Œë]Zá.Á‹ÚC–3 hÕ ¹é¡H£Œ¡ð—Ôp~jÔ‚‚‘‹wAŒn’R”u•Û¯±Gqœ×˜{¤'>Ï b¼Nie:Ã#ë9=·ÄÂÕwî ŽB !í!r!ZzáÍtH®(…uŠ…Ÿ¤êߤ ?‡gä0Çr´â›  qYÁ'¡@ãm†¿œìqI ap E*Ä!­”ˆÞhW”ù.¡·› J8kµÔZ r¡9„hÆ(E–gU”dú`ì™§‰¿³‚ŸSAZ9ÎðˆÅyNÅ-Gáêý|Y•¯l…ë¤Ømy ·Ãc*\—‹[RáÊc.·¦éÇ99”Õ‘±XÇhÔB]TcðI(Ð­š“æ¯æCgIJ\PBØë•H%8¢ž[ˆfŒTd§JÈJy ™S å¬U"YD-2—ÍK‘Eå±û.,[é-‰’üD™ÊtˆÉU¼ šlΙ ½Jtr–¸C‘hÚ*²•uÈWÐsAìE,óºŒA;tYÜ[]æBo`¹‹~.Ë™,Õ ®e•“c´g¬K¢$÷Q¦Òbrý‚&›s–BÙ))óŒg½&J²>e*ô!&W¡/h²9g)ôæ-F¶òvè‘ 7oJò”2ò®”¯\e‹¹MeÉ©ŒB+ð¬S‘ä·Ud*Ü«x]‚<†YŠX5U¥Ç(>$cAŸÑ%¹ë2ú–«è—e9³€³´w¦rW—.G´×´²Vƒ–¹8d9³€R 2YŠ8/· {÷‹Z¯-Z¡ˆÅº EµG+>ój½äf28Wæm#byrQMU~´«3ó#QA>mº$…06"Ö‰V` JDo„‚;lõãûCÕ~Xzgõ6§z¤rœÁÑ óœ‡UB±²¬H±¬@ÑWœ8V˜8V”È+Him7Qª\Ÿ³E-„±¡©¤FP´[’¢Ú#_üL/¶ø™^\ñ3±˜âgrñÄÏäb‰Ÿiű²(}­’X_ ü,‹ˆ¾³.Šrê%–  “Z¤+šlÎ …Þ^‘¾M$ùY\ÔBmo^×Z¤’AñXã1E²ÃX\Œ¥ÅUX‰öð-(½Ñ4–jÈR I•°LÔ`|û¹6®h¢œÎ5‰õÓI­¨ç%¹l“ª®ÑÛFU´‰¤`*i§Þm+ÇQ¾KѺÔ|Ò t—”â%JÓ’a»nMox(ÉQ¸#D–^RdòL/èæbyž"vˆá6Õ3kƒÅR s-²CJ!¾Ê¿RÞ¾ö¼"ÆìL‘V¦s@bÁžä1L-b¶þuQ ë“§oa1'W¿:rH-DÖ>õ¬ Ö*_:Ãc(Tξtæ–Z¸Lýè‚Ö"G:@b(DžþsàPpÍY‡$«D¹cXÐ<«‡°9Õ#•ã ŽV˜çä8¬еÈeµ/÷ÈÈGá|A–TÖK¨´"÷PeôÏR¸ÆM+Š$Û,#( Wa3¥†YŠ˜sTå¡JrÎ6¾Zå*rƑւy–¢çsÕ#9f}Íช˜e6³J)Öz“&qRDÛ­R$_LzNãt,G+Ó ±H—Õ| ´ÛDÆQ| 7Ë J{½©@´Âs ÑŒ‘ŠŒç[§ÊÃ+´ µ¨X^‘í,1Ë…³Ëbwô«eÇXÊ»0ʸ"ʶʶʳøÉµêɵÜɲÎ)«¼Œö‚é’×3jƒ#5ZÙÁˆ¸(F7I)Jû[jÎU0®ìÇpIEfAˆE5Á›!MUFÿ?mg¢åªŽ&ë'âìî>Õµn?— ²­“L3s?ý•Ø Âéˆ_Õ«ëì)#ˆ BÃåbòq>C—jó7\ Ú¸«¨(‚ÊŠögÓtðÉŠ>Ñö?›ŠÙSlj™²ØÓlu'úfm$ýÕëÚ‚ûÇ®±p$ 7 -=Ó +xÚ¶.«•t1­¤Kh¥[8k+l ”`ñ¤wlåܳmÊR~DMΞœ:ïóæ’´Äã¶böç+]‰?£¦¼À£® ù“]òÉŸWÉWiŸVI–ÌùÉRÌ,_N'1eO±ÔNŒ9YÅþÏ<Êþ3O²ÿÀƒì4e¡ÇLÓÁ§/úÔØ©‰SÂþ‡žä¯í“ŠÿÄ“}ý?q-ügžôûó’üêHµKàžì´$Ù¿ï‡àÿ‰Ê’hg¿Nмª$Z>9í¢É —JNº@rÒe‘Ó-†¼vjµßòš¶Dc¦bæÉ4aùÎ1SsÄ3¹ Ð?õ9Áâ¼nt•ãDVp{)š¼ûnûæ/•WúÄ~t=~z¼C2zdÞ#£>°Æ@À"‰q€Ã‡ @–ˆk¿¹•Éý¶x\ô½á Eèô½ùHA²2’F×M¹©¯c°ÓM—­îX´^0Ýì8³Ñ‹t­ËÖý‰´V£“Œ½¬!îÛR÷áÜš‡øÑ @ZV¸Ù+ ^  Î­ì–7Pœà†à_4U ;-˜zÔ‚¯º—ð¸ÝNx9|X¿Ÿ‹É‰ì{1Û‹³Q fnZ][{o…pèˆH=©Ç['ûC·Êt|òµ~2 ò—«Úʵù~p‚‰ÊÕ@´c’P%"Yl'-ÛI‹Åv¢â°,½(8Ÿ¹5­–_8齉PÜZÕ©Š'X“™¿ýÈíÿ¥'Òz6|gîî¢w·háÕ7bpF’ky'R 1ˆì:ÉWý¸Ú†¬|6 ËlARø)Ôª÷Ý|²«'êCð<|$×Î3Lž(Å×ÿþ×ÿ%h4¾²h¼´¹¸‹"‡‘s¸{Ù+ q£t¥¨z­å0AWòÕÉšÍç}3ja®¦We“kUÏ8…?Ñ2––¿~¶|ni9ÿ!ÿD}æxƒ¬mo@ƒð f¤N¾@>‡Í¿¦)ki˜c–Bè`9O¬K@½¼»%¬âG¶BúåM4UU<»ß<éª<ûd?9yrh9ïÔ‡ž°®G…ÄS_}ª>LW¹÷†i€UiøËϨ))vÿˆ–ˆpe&EÍ0Î+6¤¼R£žBâÙ3ÙÕú™îzY¦ÂNtÍ^ÊFõa|Y›´Äl¥ô“mfÚt很š°èã® ùÿ 9yrh9/7/ë/7+ë/1'ëGÞt›šõ#m¢Êì÷æ>Ñ{¢¿ >6â{ãŒÛ-ýíó®ð}“ž…D•! q<9K§¯ÌŒ«`G!å蘬OÓUÞ½aàDÕÕš?IŸK;?!­÷KV¸!\º¢ÝÚ¥@MU¬µjí­IÚ‘õ”2OžéŠx™°˜#–©°S·½ù/Õ) {ï(eŽé z ˜°˜w†i€ÓqJÔ””rÀ^]SVà­ÓÙ%«º>Zºz»qKÀ™¨Æú`É“ÁɹîM9TIMG!é蘬ÆNÓUÚ½a`¨ê6ù‡îþʇ®ó›^äMÝ+S3oðÁè×k£·ø‚Q6e#°G®ñ—“jOT?àDõÅô‹Óg‹ãcáýü¡Æj¼,¢z<ü¤çÎü¸í¦ ûBÎD÷r:9]_$uEPOæK½Em³ïm(Œéº%nG»(r9‡ Áo«pw7´¦û`,\(~g†9 †skl/«^[Ã;*×+¿bà:âWDß{„B ËNÅ.›+6La{©Æc5û¹¤+} ï,p€çZ°ÜÅK.…³æ —ÀY“0KßÄY¤R.|Sï@[À9Hο J/ Nen»¡æC/Õxê æb[wØÈ§Uî•>ÊÉä½Ê…·›Aà-U}Œ eÄî•MR[ÅûHÊâSu•gkA x‹tcbcÀp ‰ñð²{ÁiŸö§KQ‰"V,Ðd%®Ts¤4`i˜(²·uCv°®Pø>Õu!ƒ0þ›É/MçþÊþuQð5d&ñ¯øÔ“8sbp ™GæêÚÍÇ…{ÙL g2C`=1–q'UÊÒƒ%wa€Èdá±Û®¹›°øs¯«¶Ä& ÅH Y¸‡a6R¼—ÏæüÏIE§­ec&0W0É&‹iÛ¦)ÿ-cY›,“‰˜%J ÞB‰à ” Ø>‰°ÜM+㸛VÆp7-™¿u5Á´÷ñ‚À9dÞA€Ðº·J¬+ɳ§<{ýíäºklküæÚ©ðcÀð 8¶Hf›ìióî…ð 2ݹS.I¡Û²ù®4´WÌèÐâ™\²§ Žó5u0Så²Scñ¿¦¾hËÄöíJûm{]‘Éwhø§“߸¿éÕ™ ¿V£É'5»¼_ÉÈO%×)¹¨P×÷:+Ôã½û~G÷#miNô®›ÜG&Ai2nÍ( ø!>Š~ˆ’ ⣠Ba|8y¯»Ú=àîÜm}/Ç’?åpòVå7Ý‡ßøñ< †ÑÃÇÇÞ÷# N&£xN‰çÿ BPI?ðxý©Ó-uoYK± }æ¥TÚ¶bö›µÅ[&]~s.u¥„¢ŽJ8jßT&§¦{=2Ç- ðÁŸðµ¡œh€…šÈ¦Fq±Ñ E›Ü茢MphJÑ#yXà‘ˆ¼ÐAYÃê`ȳVs¿XêAG„ì¾ó›ê¹ +-vÔÂ͵Uu¡˜¼k)w’âiûóèÞ/ ïÇEa‹˜<“Ú`“M6ÚdÀÒ%{"¿±Cé'¶…mo°mðö`Gnßì‘ ò^aÖÍgÍÞäßñ“¢z?êA wW ÝIP7nBÐÙ Æl>©ÆRE÷:8äP%s¥„‚ŽJ8ê*æ*â8^®ªÖ¯ÜLdÜH‘ ³OÛª³)Mo¨÷ýˆKý”ãÉ»^[V*m>†‹½Öb™'m6÷ýÀ½j‡²§NóJŠÅ¥ðéqèªé¾Ý[¯+*êÒ+ˆc|²àƒTÊoúr*Ü9«+SmörÁɳIWž[×4=¸FÌ3÷FŒ¥öbd•˜GfÓ9Õ`Oª®›>|4cêþ¡ D1¹dOøŠ06oüà™îƒÂت±øN5ûSŸõ{©Æc5»ÌOJÚ¦49óîÓCÑË(ÏÃý¾„zìÕ!*¸ ôØäƒ/#tìæª¹ŒÌ\öKÀ?V–çrG,ÐøK †ÂIÌå;Ì ¢1b(Çè‘ ȸc®a«ÐFŽÆŸåLrѹtþlO‡}¬o- ¿q!) cÃ8ÍP„ñ$¡UL?xåƒ!9Ÿ0B%4³¹AÁäR*÷^Ô4ÍÖÆÈ$…Gþæ|.ÃbŠÀjì[1”{«|l3Ûï:gÎø^ÎäörölÓÃÉ¢\zf8Ù´Ö*u]K±Ì£O[ÿ3tÏ~]â>ê€e÷ÏÞ`ôEÞýõPžT^R§|#ƒ;qæÄÄi÷‡ý¸s'|¥%ÜÉ“üqçÏñÇ?Åwò Óié¨\N«­%{sbDîÉ€Èßë/×ÌÐUÃugÆ ÀüÞ óD¦ßÛÝruU_qŒ"xd“Òªšz\.tP`¯ƒkK§ Û+{cî{-vÖÂ÷½®©Ýƒ‰9¯+%6(ñsûÝ’ƒØ7R,ì(…Ó~ŸÝ¯ÝG«¬ýlº‚©q (ýÆ­þ¥¨h®'}çæžÄôHþIŸ=ZóÁ«ÆýuÓ â¯€ÉFð‹s1Á:(®×Á!um¹Ùbk%Ô+ñ‡È8yétÓeK½ÁÄôXl¯ÏF=|ž ó ò©‚‚øƒãz畇'>ÝÃ󳈳؄frãz{âÁȹ'?šÉ!™Ù(ëXç²É?NÖݾ¸¯9?»ñ”Á-›Üd˜¹îzs1¹_í.M­=räqŽ)jï2`’|`˜X^“—ñR¢¦¤M¥L¨úFÌxÄÑ,E¥b%©¯{/1¡¼–N¡±%Â’uM[ê^Ž´ò0>2¨Ç×ü4W[ÔŽG|ŒHpÅ=¢%¹æbn 8å×Ý¥lTï—û3mª2=pàNŽ™i“”ì"`šÂ¦N[Ä)QSRŠÇInijïÞ‹gÏ%¨±ÔÞh¯ø’ÔR|¯´8atzŒRJSŒÇž<¯÷ÌC¡ë:d’â=´L…-/n)¢”G¾ÓWÿA.M%˜ñX£YŠj9ÅJR÷^bBy ´æOªÇÅΊÇóV)Š/DJRx['![‚‚›Çñ%*¼˜r˜¢çhi 2â–€3AÚ›ŸQœ¨8÷fÈ`–¤(ÇXi rç%&LVˆ‰Øa‰ˆzuMT'·N<—sJQ} $Uqc$“WB'R È´±Xšê1ãѦ=ËTBn¹—ˆIª"±©Ü°Òµk†æãÛ ?áŽ}0°…º-rê^’oo&<Ž7ÁY¾¹á –ø›ªñª¯®‡uŒ™sÑC¡ƒ>õðv?UµÔª$)y’i+Uh­ì7x£3Ïj"vÿÕ3Cb–B0¬ÂceOgíþ;¯O”Ñɲéhï' yN“,˜:3ÀR‡½@'¸&̇÷ÔÜÅ·ÓÜ¥GvÒ܇'j؉¹ØèB ÏÃNk²í—>É´0"ÕnÙ†IÀ“…£ËuÉJekAP„E¾e!üœudBH>`-cÈŠDöÉjI".!ƒ0>—¼l®ÜÀš½œHädòJå7¿@5G÷ȃ`˜<ˆ»Sˆù5NvD\˜ùUPp-Þnc2SHïI[ †ÁYˆJÁGȲs±Ûn¨¹—r"x“É­Î;n<_DOdõtxt{ç]ztkç]|h[çmþ^åÒè΃¡ð’Ëv !dÆ—$ï•MS[#šÆ‰JäSu•iëÁÐx |kiã € [Jca1K@ròç»dŠÚñ¢™æ›¯¸vÉŸ#1G$ü udBÐH><­bH1¤høöãz*ÌÝ/àHDß©¡àNj8¶eÖxyª ˜^×¥øS4LßûSt2´ï=|7 ›oQ;…DäHâðÝe’£E¯ÿQç³îŠÓÀ-ÓCÙ'}6 CéRÙÞäVû Nm9p=C/l ”¥M6ÚÀDU~º×_'{õkgŸ¹"9ð€Xª0ù{÷{æf¶Õ¢©ƒ®ÌeóéߨS½’bqG)|zW,Ô€¶µÊ:*ᨃkæÚÃm-²WC‘:ój|0Ûe¨Ý#•â±Õb‘–àqÍ ¾ìÄHäkÎ.çrÍýêÉ{ýê *õNŽåöK/r.ùŸ¦Ötî…OíÅxf}ÒÔ4êµK«3O‘ö4Õ•ŒúT¢Q’Š:oäíÚ|mÉ­UóÊƘwŸ}¨Û’$+1S™ÏlÞ3›õÌä¬ [·+ÃÖíÊPu›ŒÉEÄãÕÔGíµYã²ýÛ‚LÚdж`r ¶­ˆÈÑÌìFþÐÜ<ªµÍKÌ™ºúaÇ}Ó”ÿC¥Ýˆ±À³ÏÜž|Z×…à3Ú± FÑf“ ûÍq/4Ÿª+ü‚0ÝP²8qçé’yç¦UÙßò›¦^bã(ÆÂA˜ßA|Ñqp`BÌ/3ÞíFðzÕ]ýÅ]óõM–DÄ¥-²`Á”ÅЕ§Jµ$ÀZfwêÌ©‰ØÃÙgzøyÔ  ¸açÓõcz*=ó)ÿqpAnAd8­mUÍMÙj±¼“L}ǸR0®ø—‹«éùÉ\;1Öôä4.§¼¹J7­έqä8y¥qbý‡)ÄÍ=ª,ϰ”ñƒœLn¬4Ÿ|)'’9™\TkDÕ…¯'.µ²‚ó½6 ²OdþO}ö•~Jº$“ ÷Ä\“ˆ!ðü.¨øþõ)œ‡ìþéCóz:¼ · 2›¶§>ÌGäTêÿ4kjý}VÅÕÝHÇŽÚŠÛŸú¥Fó0ÊžF0Wëž·§sC–Û‰¡ü^œy1—™#±Wã©©ÑãÙFÉVŒ‡¦šmSçêé½RbiƒŽÚ‡-ç™1ª)v’Âi?ó“ÎísÄ<‘:n¥ÿÌ3gñoÏPÜí©0Ü“s/‡ÓßmæåLòy!¼{›“á÷hþy-=çÀ ت>õMkX€­ïôYÐ3áýYãæóìÕhp¾‰y=ó}—©1;Ís ÄœÉiž{G£5ˆ§éDMÇ'ïÌ=l.©R;Šb4Éø Ö5C¯K=Côlx«ó¡sÿ@¿iÄàÌFÜ7ýƒ8ä ûŸÝ2ƒðÁ†37+)j@Á4¿9W'«øÍÌcz$½ÓgV‘Û—O+ ÓÑj"xX:]Ûß»­0üÒƒE$HÛ4%°P὚Œ}oØÉQ"ü½¡¦<,/Ê.Ê fÎ]3KýÏé¢U?tÌ# ÉE`o7{9žºáÊý·ŒêSqç>f¥÷ÙlÀåïtq1öæ·¯©T]ÐqœfòÉ&)9â…‰™[±ŽÂö5»ð;p'¼Éýš3Üj¡;1<ˆ™õBMë?¿×TËq-…ò¶YÂg¸U‚~‘­K¬Ø>wØ¢¶ôò¦1=šü¡'Ó+œîÕDpfS`ö«éV‹F¦¾úƒÞÎ*'?†FähìYN%'ßãZþ[[K~h›)©[=“›®$]CW…ì¥LZ~‰À½ÍL. <œsņ^háÈ^Ë.š¼*èÈK5:¨±%cÄ‚ /I¯Ü·7r&={ßfß!×R41õæè9Nåâ.µhÞq’)Ø\¾ù/^;5Ú©É/\­ÿ–dIò½>°ù+ÃÎÃØj±Ô•¡fa„ƒ¶Í'y!nÄpä Æ3÷~±ë7ÁåºqbXöÑ xþϼ4þ̈́ʾc¹½Ø¿ÕÀ™;fpúS¥ìàèÆ6§¼ÓduØŠ¡°¶ÉF1“Yõ¢FžïÕhêIÆ7O¤æ°n¤HàQŠÏ`‰Ÿß•H ŸUS’=w)–Õ”L¯Ý?ê®N9·ãìV‹å½«,'v› ýÐß~Qm͆Þèáà³n,ó¨Xê °^‡Ôõ‡q¥~áë#(üè‘9® · A±:°`1˜áUË2Yv26½¯nÔ€ Ïí¥;Þæk# ò¯ ˜ü£œßtLÇÓBeu24á‡ki•%sU®•HÎI GÕ]­ËÓ¹t –ÒP]ÔPø`‘=,pŠï¼lÔ?Ì.î€1ŒäàºMÁöh¯Hìi@l'fÔ€¡:0:LœÅWîY+ÁÄaŠ-¸zχ9«Zñ¦˜Šôäƒéç³vE~¨  vȦc½o8ë»ñƒp sZWŸ˜ Ç.PüÉ%s.ÙèŸí9µ¨ì^MÅÇ’}¸í´¥æŽÆ¨ø£}æÛ{.ÊÏEáï9œZõ}¯¦rãk¼?,yªxPô“tq¯$÷JþO…(• ‹×OÐ TPÂóÇ+T{R}ÏôÁnµPT§Í¼–l%‰­$²¥2»‡=5d~'†31•™^ìk¯†SsK~…[­ºüÆÆ^©áØ£ŽmÎ~í䓪ë¦Wa2‘þÈ‚M²§ ÎR7…æÚÖ[-–Ük‰võtPæ„/„DTîÄÞÿÅG}h‰´÷ám¯ëi¹ö«Ã¡ †àM¦EK¨ïeY0ý7 ”×Éà„Uq>}Ü™–æJ åtÊìã·3›\¹rdNéV bÿGøô6ד{sù¶Ô·õ½K}Í‚ÿÂî¤E­ØÌK)ØI©´¾µb4}–·r0õ$%gªôFL¦Æ«ôã°ö*Ìm¯ÂìöJä7yÕ¸¿k:þùrdr¼®5@4îÀœ‘ÓSñ™¹ÉNl.MYýò)9HÑžùJqœ«ÖDeî;óE%\±^HäìuWq ŸìÄ`ÞIŒg¾ëú¤ºÞ\¸9Q,»3Èf8¿®r÷²¡ÝÛ¡ÿJ¾–B™gi6HëG`ú‰Â&Ôy€ùý8N?çxô N{Jê~ ³ïØ~øW>ÐìÃõÆoÃ3Í^ØH˜gS”i na!E\žioIMAdų7áaEÖA£÷Õ94!XšjÜ;Ë2YzAlz)¾C‚[”¯ú°ß–™VºB™ƒÎÙî…ìLÕ“µÊ:Iñ´îTÔ§Ëéþ‡üÝSŸ2(¢“Á ­ý]ž ªz®¥PR/Í ¼Š~ói¿ù´ß’´ì³p+ÆSϾpXv9ñ½OM-$>¸Ómirv¸î‘ްðà@Ø~•­Nõ¨„ÃÞUgÆe¢Øà[<ýÃEðÃꊦ?©ëµÓWnZÖ‘‚áÇè9ìáÁ‚¸ú§k+ÁX;0“0Ô’øC-‰>Ôlìß}§%ç}©g¢=ÞR³ùöj&¸ÅgóÍ&ï—9œ¹g®M®|äA30ëÏ!îM9TŠ•ƒ0ùýØ“öäî¶7AOÌ+&ød£×S««i8Š…‹í…pNÝçCK.í¸Cyƒ˜YÚ±ÖŸv¶SáZyÍwÅ-òrì‚QŒ.ÙÓÇùª à©Ã";òj꯰üèÀO\:4â{“l4!¯Íe òåðȃ&a^k“÷ŠÜq«…‚ÏZ<°»µ)¾?1¦Ç‚»;¤"{ǃ»ÿ“æßYàîÿ$y­*-ĈxÀÁCâ=w£?YˆðO/¯§Â_Ì—.Nª(:M-—yhc“l2¡X¶$² µ·€9Â'‚ê„HYÈà´à@”p¨JWÜòÀ{5œwTS'¶úVŽ­þKR1jÕö!âSˆî?›îƒfXÉñø£\”\r»xÐ ômßµ¿û“iÙ›ÍZNÄÿêývrÌÍ'z>‡’økŽa. IJ#¡#r<¾¥FA‡CËoCò›ðd»»aç#8 Bÿ%mìì`ç A Ç£lµplf,J]©–[=g­„Â:%±rN]ùÍNˆóºÐa1ýþ(èùl*UHÖ‹@±½½Vüóð’è’Ôp`{£²ÚÓÂËmÕ-Õ‰ÔRÝG-ÞqÔ-5—p%„B:!>—°¶C[¯×R(ë$…ÏêPr34WB(©âgµa—%hØU jQ‚&7§{Î|3_+±¤&sJ´è›âÌ,7¼A! Nx¹ø½Lÿþ÷ÿÎeØø˜¨&×O^KðÊœWöðʼ xSLKa!ƒb;œÐµ »YñN ¥õbjÃâ¦Ò§B‡mpÉÆMÜK¯³ÑjÞøÖ5{Ò×R(´k—S'ÜÒTêÊÏs‰; Ùƒ÷Að€­21€­0ãá%Ñ%©‰ÀüV×{5šÜêÚ˜žµ¢añAYN¥êÂôb:ýéš[ã¬÷o.úK/fôÊf¯q&ý7æøU©êœú,òÚ‰ƒ sg'mZ|Îo“ ôŽÜ8ħ›¸ÛÎÜýkÿeâ'/qòb¿Y,B g?ÌÈ´2´ \|ÿ?3Í ”°¬,8ir!NQ÷Ý®‚ÖJÔä˜=èË#ßf‰Y°d»åÿœ´W³ÙÁOHËwêSýéÀÆwBøZ¨^åºîÃn°¡ÂWÕ§}ul#ñÉ '!yÉ„@ºÎËÆ—[܉A{8ÉJíHXhQ#˜¨Èührךx´NÄ%÷Ê✠mY9nãI‹ó…_Ú¤…›3!"IwÉ“UÚ+†î’§©¨‹HÂ*w²Iªå"Pª$@4K£VÃ3Ž­Ñ©ªâ"–¸2ƽĄ² Ùè$U²ÑI*e£¥Õ2l üB®M7}šÖÉ”VÒ7­òÉ:[ZO‹sŠ*ð‹ÈÂêüžsâs!©ê/ÿGÎÂäìó¥éWÿ‘^G^ é|­û…Dõ|JX±¬¤x’ª»Œ”, ‰cýî¦aÅRy7Ç‘ƒfýæ©£—¬6.C kã•OR—‘Ò€¥a‚qJS“»@nµXt¯%ƲN.xìB@HH\¡/“†»4BŒ°î„°`vIX»BR(!„¬H¶,U­®OÆæ–еCÉ8 b&óÙ§öãJ†^«ÑÔN95»øçäǺߴ]Ó’é£&(DñO¶0aX>;ßê£RŒÈÑüNžbYņ­5du!ê‰ý:ú¢†’»9îåPbû•Ír&¹UßÔÀì­Íì´ÄðìûÍK¸(S6äЀ¨þ~ó£føœüÈqàŽ'3]Ù<Ï+;ne7ßwÒª©û[ù}:›²ôÉ8À¸ Ê5¹d“ ŽcÜP].þ.ö} ñùÑOfœ3Ëf³,˜‘m¤1Vk¤`‚¦5„¼¬h¨Á¡ Ž2¹HpR žxe„C‰NŒqŒým-g!¡ÐþuWˆ±÷À9‚‡äË•g­Êç†OB¨—~àä÷ÜLJ+üpràCI>…„a†Œcgc„ R ¿Å†h~Çk+’j²’б(ln*¤ø‹÷¡  ûÆ=1¹eã@`˜\‚Ðê®2ÖúõÉe$F8ÐÓHÂõ{hz%DÚ{à4ÁCbýîSC¹˜ë ƒzí‡>ýæÙØZµöÖH6Qm²M‰iÓ!×±A7=s¦€0öºjK?e% eÔŽçœíRÞ«DŒ#žî^I¸zumpç BHSùUº•MöA,n“>‡…âKE|‰È.{Õ6M)fØ™0Þ„ciU®ý^èÝ£Ç G9ò@H>+äÃoŠ©ÉùÖ1=ðá7ÔÔÌœëéà¦=Ùá\Sã‘,Óf£IÑvÍ?:0¬ ‚É€ÌoííCóñWz"ý¨'ÃOÛ[¨¾WùÜ4à+iÚ3ãi%£“"I9ð𕪹ÔO!·R5žóª»bè¿OªÔWsbXòÉ! “&ÿð?äÚQXÌ…JtÙx¼÷CÔô)Ã"øÍÓÔ×¢©¨K%–3(ñ¨íÉ7?+·X`áÛl² ·×ÿe’?ePZ'£†¥ƒìkÃÄ àÔ"¿©¹Ø¦æÒššI Å[êÀøp;'zSr1J0¨WÂQ+òé_‘OÿŠyú7]Ï­Û¸VBAG%|>ÌÔ¶÷+rq×j4ò¤ÆcÛþÚi¿»uÞ´ÔkcÔ‹?;dÞA€PœeÅY¿8 Âû_DéŸd|¿o Ÿß_²üO2¿3ä'›HQ–€i =”Š{FFHï @wQ³7j=ÈW>$ÎÓGÕ|Ö\Ã0nA¢ E{=ÝÎJ†±ò 9Úkæ<$ Fz™´Fz™´Ft™øåW­aaÁBx EXoUùŸ²ìŒX¢§‘€ë÷ ;a[jiA² …‡W ¯÷•É1zH@´;5÷qÿÐ……™\D8½”¤—BHжl¤O–À9H†³Í;ÓÊï\'iá$@ë•ÿqÓÒ‚„ R ëÇ%@YúHx‚ŠýDu A¨¤›ÍùŸ“íUŸà•ëÐO‚çü2ïǽŽuÍÅôçÎäv9u‘À|é.œ–³ %hB!„$¹Ÿ!#Lÿ´  ü, Ån•¸HiÆÝè-›9 f4ç«j¾æéìýïÐÄñ.ól ò^‚ˆV°<4a`øu)çÔd;1“_‚l>ìµíÒ^ͤþÀ7`šÌGæã’Q“8øÌ &ücI!YGìȃá Wóß¾Ý7¯3.G>ú^Y¡XÞê±èÌdEÓ]Ëæ¬ÊÓ]u&¼7Hð¼(¾Ñ+{xÑ€ã‘~·Ñ‹¹JèbFÚh”F<×÷üR"*³½ Çô=¿Òð%5öCvƒ°îm(¢±K3ØÐDn}Å·ðæçš "¸—ŽçÂ1{:ÒÈÓŒjö-4nB=L`–á\çÓ¹lȗψ"úlÔãáËÖ×ê¹»Ñb¡ËÖ×%ü9;´-×˼bQ½ÏÙé ¿(CDŽeörrú¤×žeÉϲäg6¹½÷\ý؈±Ô³˜ÉL.¾¸‘¢y™åÛïþæ%þ=˜N=1tEùÁ â ^ÙÒ‹¬B‘PìkÉk+)ó’ò{8»VδQ„ûg«Eòm¶8î»;õuÊÏVØ—xì‚@8—̹Hú ç <›‰ZœCïþYYÍfÞ[Àá‹s6[°|x>3•ü”‘3¡™háÐ%}’Kú$—g6jÝÚ /õLì gÃ[[ ¢?ÕLp§fb5{¶ŸJ4®S²Q;û~ùÄ+&øhÀäg›c[-ššjn…ƒš’¾—Z8°)µ psöëqÈ‚¯=8€Éƒ1…kÄjJ~DŽÆŸåLòýÝ*Ã>'×j4÷¤fbWºWdæ… ì¥TZ.(—‘‰WŸT©ºŠºÖã‘ë,èÙðùMç‚ðK=>èÙð¢;Ç΀‰Ïß=üáë¦7~„÷ †ei“„¨-U2¬…—˜Í{1€üγ{5 Aî3ëü{Ðûê¼Ô¢‘ƒ– ls–Ëe·;=ò@&n3ÓeˆiÝ_ÉÊ„E™V FY´*N¹½3k)”ÛI3'ÅÓco'ÿ/ŠÚ'î€eÙäÀ##¢óÅ><ýÑ3é¹÷Áéàd—{DÎDgºÖö¦zéô‹cùˆ¦]8 cñ%y20°±à‚<ã¡øŠb¬ šËVwX|5®¥O ®¾5Œ=§ìéDÏäMS#K—:(¤×á!ë°àb­©Û \g“š‰Ýé«!—NŽÈÑà³On+wìR“¬ör,¹­²IN&okü8k>üÆÈ?;ÀFQïgOÖÉà„_ñ6÷OX"çV ¥}ˆñÌ~SÏîTè¶l¾ÉÕM0†`’=M`–¡.|—•ÊKÁ{Ù‘ Ä2šd΄}/›bð+ƒÇ rmðnà¶/^êÀ¸ø†ÅV•½í•;Oܰ•˜ ýÐ3ÃWØÝ€Ù€©]€ýÁðJðT¡Ñ à€ô§?!MÕÔ<— (ød‘M4Åc0Œ/#ª‹í+Šê1¾f´¢éL%Ùoð… El¸ŽˆMò5óØEÀüx>ƒ0s÷j.><‹ðyà6A¥jÔ¨VZZy]jå©Ö¢V ËÎÆ¦Æ¨íÕTl|¬ÚãÀMwUµù3~Œ_‡nÖÒMxi¬‚I/’#39¤è±::ÿÙ[¶]ò;~éì'ÙFù(œ´HíR ¦,Ötéø¡ù Ž ùv) ½€ÔONqMî|H6ï#¾Cùµ·µ‘ É®5é¶¹¯8.Ñæ¹û@ââŠÉÀdEÆî>wàH¨è´ ÿ–,¡ØšP a††7¡Y¦e†Ä×Oć"š,’];S镳·‘ ‰®zM©¸ƒ„EЗ¼©{nÙø þã™Ã?Þ5×a»Sc©'5Ñy«KS_§Vw•±Ö'`Nù áM²§ Q ·ßËZ ¦nˆ=_¬®‹kg *ëJŠ…¥DZ;ÐÃÍ÷j0³¸¡æÓKÃ}ôŒÈ‰àAÎ%¿©ºàV6‰éñ쓞 oMI.LÓãá'=^6 ïЄÀŒÁ³ÚoŸCå_±Ì^ˆçôou¥¶Tkr+ÆòÎb<³+a|©… Ë骸Ô½œTž7ƒ¿y…À¨É‘ ”þ’M&ÓZdø-å2=?žßÐ-GsdòŒÏ£… AôxÉžWŽ’•ÓOv áãÍ}¶”ݼünžûËtê™”°þlÒÎËùùÇSÊ›1 rÓå]ûIÂĈãŠþ£címè‹æ“zh¯¥XÞQ ŸáòD B^ê œe†B¶eüļԮ”XÐ0` ~™ dΧâÞMBLæ|¶W6çS GuR8m¥º¾±Ò9‡.Ãè"–³ Âvö™ð0TGŸ{B3éŸ2(¯“á +Á7ê­K[±_Ÿ›RuÆžþ45õòº—C¹Gyæåxò.ç6çZ+±¼A GmÝ¿uCu*ôÝpQ(úä8B9Ôäsq-ÅB{)ñdl›°îI}Ú“.•í =ÔàµF3ZeÎ*[XÁeaO·ª;å-õTÝ©!›yuæÔpl?,¼è ·zç^ Å~ª©Ø&,ÍÆ^©áØ&,MÅnU{ŒâæÆ²ÛÀ Þæ1 œÝÚ«~°Æµ>”©{]+²¿õØ$ 6ÙÂ/£BwwS]K±ä^JÜT‡ªñ_r.ðN ežÕLìVwwãÝ=3¯4¦Ç¢/ôp ¹3;\=UPÐ{ŽÇëþE¾Û­”XÌ „£~º¥¶«\+¡¨£:´Ô§Ò…‹étpÈoë.ÈÓ?Ö¯¬ÅÜ"z(tÐg^OÜ‚˜ì¬ÜhñÐLçä·uOÏüÆå]JÁ¸AJ¤Úk§ Íå]‹ÁÄ“ÍÜ+sU'c-µÕ^¤ê,¨áغԎ—éVÝH¡À“OÛuêÒt\ܵË;iáÀ¦Òd×ÈF ŤpZˬ–òTA-¼RJÿiJÃô@®„PÈ „Oãw«{U2]ë)”u’¢i‡¢’-Â5@’;Á"ÌóáÉË,"g²3—›?4Û­´Õ¢™©Ž#P{S{ž—Z4pÐ2Éþ7R4.³°ÿpùd‚>TPÆË'¯6_Üú k%Ó+ñöùÐúG`ל©¶½ŠüTÃg¸k+Ã^è ¨^‡ì«“RJ6ËðЊßW™3Ì(\ÇbH ˆð¹»†ýl\w½¤<^y¡P¹;ý ïE—Î.T"¶DX‘ol"r”À·U˜ÏþÐó²Î¾¿º»¨\ŸTQt~H™ Ö½eŠRÎKH?L³É”®‡Ç1Sc§&&`Ã&'5ô·SØêžšƒüÒÅ F™7Ê&#žK嚪~ìÂ=\xœKçg`Õ…ä"…`N'drÖ®Éî'ÄöºjKðµb‘úÀe˜l²Ù† ¡-‡±Ò‚ÙG-øL†=“AÏDÈÊõ¹2d}® SŸkÝs9ŸB0§9±ùžÏ˜Ø|ÏgJ`¾ç3äcÉ=*êF ~¬Ï‡ÇîYWŸB0¬Â9ÛÇ]‚nu€’·'1´Ýa8Ûጷ4{=?èÁÖæ&<Ú˹Ɏönn¢C½š›ä|h>ï»Q;uQµš=©ºnz5®G õ¨Œú_¯|ÞÂõ_>@˪PövnTW ×îhëÁÀ<<Þ¾~A€*uT®C²šù]?l3tØ21;’ ‡2›°,—¦,°·á ÇÊ€a Øüî33 ÍoîŠÓ¥€æ…ö´Ë&;–´-pW† ÛÊ€¡ Øü½ÆVؤ_È™ì^Î&Gæm’£ó6É‘y7wk3§»Ê~ù{àɱPýÚ;¼“?¨² ZýþͧÆ-Ìüë¢LÙ„½Îไ£Ã¯‡·ÆYš³ºOkA”^Ìl:ýéZ*ì9ȑܓœ:Ûó¡ùÐ|^,ê8ƒÃ9EÝ(¨ãß·ù1œuWë^Û¿nº¬Ðúð”ÿÚÊß ý”g^Õ‡mr>4Ÿ—Œ:=¡…çzï L{É™‡[,$b2?õéeË@}{Ùrà_,ÿÏŽS-)ˆLïÔãìL.v^¶Ç÷MÝĸ“ {Eø úKç<ÆBMÄ÷j26Úñ¶Éö»m‚CÝn›ä²z#«/‚z5 v¡ÆÁ.2Ñ<ðõ+.Ò§ù)&"ûµ¹“üþ;Ñ.ﻯB»¬o½mrÒç•>§ÜùìÔ'Ÿõ)&ò:1›¹;eÁ×LúÉD{Äòù—r"|³ÉýòŹ$ûÊ€I?0ùÝoý²ÍØ`­eþš4@n-ò7­®íÍ\zúYq Üs瀺“oåtxü®þ<4}ÏŒYÐÜýóAp Š›Ð$ðíÈÏi}üæ”æ4´e£ ƫۼËãÕÏß8›l´á‰à«{M_Úkìº^'o;m¡A6ûô+ Ž`´àÏ{Ïe÷\–ÿžóá;+ÊÞYQôÎòɉQ†ûüÄÃ=:ÂpÏr¯D÷J”ÿýKsÁ§_±[Ï$úµ¿“z=~}ÿ¶³Í\~å`“n|íÀ¤wH£n‹ð[WƒacÁ@x †"ÿýê>'_È´á?`õ‡Â†®Rb@WI! «´a¦w¡…ó†9o®šúÚçù×ÓY•~„6òÝ}’þ:°x'þ$}ü:[°oÏ:Üf{âá6ñ{s·9M]è/Á©^ê™ÔAÏžd°“wŸêåÝG¿›w›üý×mè÷ßY·yß|]ÝFåöFÛÆæ¶FÛ";£mqšë²Þ‚,õ Bгá[Õ©J÷¢›ãÖƒxx° nK“+ì=oK²3aPž&,‹ß‡ `,õ AÐóá54rf^CãgöáuYòááÍê÷ùáMë÷Øæõ;Š°ï£„ai@>¿n¥¥°¶àF –ê¹%‡znÓ#C=«oû»ÿ‹­$¿6·ÒzÉôß÷WK[æD[j‹¤h+m‘j¡-Òþ°mÀ—q—Z4oÐ2§‡¸ð2öÞ ¿p`Ðëo‘½ö¡Ùëî®:£ÜZ2òVæ~èß ?íð—úïÿ:MK4©/Õš¿€ÉãבÇ;ó®Î#›Vw= "Qt2³ÿtn0³¾õ`üph£™%È´(¬¬¢&(ÊdŠét㇠¿d°RB©ƒ2›‰Fuÿ  =¶‰WLðÑ€=Õa‘xIü…žJïõpøÖéÈŠ²–B‘G)^UæCòu%ê@e'kK7œuº—B(°â§z<¢#z"µè$ÓWä^ÎD§®Ç»9kí†GðÂb¹›lçCA•ºëe8;äé@#h¿³œcoCÁ,lh"›w¦MP4ŠiéÃC…ä@í}8¨…U«ò»7¹Å7*[1Åm`¤ EÔ×@¶{»_Áì`ŽÖd“‹àÚæB„µƒ09pþÖ»Ø^×¹V²7W™YŸÛ´’ÛÓVÏä¦oGq¡Û²ù]Í’ëá'?nëGÁv¦ñW¼ÒŠ0fc­L–®¡¯î…Íí¥LZ›ß´±o[=šû¡§ÂkqwjÄFвîÓqxñãÓ¦è*å…sE¼X@×2ÓõÕÔZ¶õ`€bÉ“åÐH„D?kl]µ}§ZYÛ$î­]([~èoU‹¶,Ó± ±"é„å´5 H$¥Ów¦¾Š®žLðt ¾m¯«#1Ž`¤½ƒVA`ûMVb`S™;uq×S^6µðóбL³wbÐc,£*Øq^§ò¼è´w`²OBYU:4 *Ò4—MöÁ+j‚ò¬M(–îâ‡.è/¶–í `†‡•߆]Ö {¾“:]8œ»iiˆ»iéèwC=¾?õùÖ4lOïZ†žÔhìs~9ÙO¾É©wb$´g£Îl®Õ¸çašG9”;ȳ '“Óoâ1=‘{ãv7f¥Ô<óùÖXæsh‚`¸»»3™§O{‹CJ@„ÏË“*îàgËô;4~^f“™ß¯ŒÖ]”„`kA0<,H :;Ïy¾§kÙœw§S;}6êÉðüd²¨ŸœJ6þnô'~¡&’{5ûÚžÔ… ½Ô¢‘¯m¦.d`:-•ËYks½›Nt†÷&DþÙ„?çr9Ž@,×ðTQÑ…üèUvb4,·>C8,9«o«…3³öÜA‹²h¥Í‘¨à=D ’‚χƣêþv껡þàònå`h'Ï‚œI~oëÓÙ=–kCfß éAvvöÚÐùÙ§åFM%§ž›w0y× Ãw›_Ò ß0ùév8ºµæ"9º­æ"3´¥æ2­ ?Õ~“‰7r4µ ?Õ2},aùÐ\û§À©Ðç|Ù€$aEÒÑ& 6B"Épè#`¢/‡elö"l•ö`©ö?DB³pÐx GÔ’6â$í·ç¡Û^¤ñ4ƒ÷`@Äíi#nMY[ÚØðÿµíù^Ö¨ŠaÃÿOYqDMHi¡ðÝi;=E@v©•*'o­ %Ø+™¨Æ½YÁëü/ï ÐàÎ\ç™?Á}™à¾”¾Ñ—ô}I¿Ñ—Ü}UÔÒS³Ã; Ñ ¯Juõ`í PgÀ÷e…ÃK‹!æÁPˆ ¢Èô!¹˜œCÙûýxzÑ»Í J0»ðï5Ï æZµ']ûUû¥L{+Ì[e£Aç~KôöO*0ó|,<wº×b.,wJmßiUÔÕÔW:{ÄgM²`"bÑ_mÓõR˜• M3ºˆp$·¦‡¾5=ƒ›&Gˆ}“£HèÖÉK¨¾ Ër’(k5 зaAO26˜‹çäûQøÞ²Ï$ðÞIâ>ÕLd§&bwúÜ4är¥#Z&°û¿¼(y­FCOj"¶½” Ùë±”‚ƒ”I[»ßã_ÈØ14¿óXmcG‚Ô½Ê{ÆÒƒ,BÙäì|² b¶`)zÕ]u/||à°Œ.ìðã1H§Z+Yè)¯gÓSÈ"r&:3•ÌÚ•Z?m—µM=йÌîå×=y†~ʆ¹àÎ% .ax©GŽ"Ç`èDתæ„ù5ü›ìN¦~è‰ð÷R‘O«… ì•LT×îf‡ò®´h\×b§îúƒ ;‰cD|I1ý²D¿'q¯H÷®kÙ ]Ë&í˜;ÆýË_;ŠÎ»‘£¡½i„¥ÔTlé;ˆô½Cô®Á~<ÝháÐÔgSлN^háÀ^Ë®kA`î~B~ÍXKñ¸ÄöÔçÒXjÐâV %n³I g¾Ï‹µ… ØÕ¤] Šû¼ðÛÃÅ)JUT~ ÝÙ~`¶{Œ; Á!{8p¦í©‡ÿ^Gj.¶ñ›3ÐÉ7xøÙ€ËOÞwb<7s{œ[»–ù)&2;1šYWÍõ¸¯•HÚQ ÷ºÏ¤{¬£Lp®wúqx²û6¦§Ò3]¸ÓÁٮЈœˆNu‡zí´ú/YË×j4÷´x0SÛ§KNzÄ‚ž|ò^w ˜»º&¿Hjò‹¤f¾HjÙI-û"©_$µè“–}ÒÒü'--ù0¤%†4ýaHw®q¡sW·¨ú¼SC©: j¼n/Ì×ð#‚¬í_äÍ䋼™|17“/ÙÍäKv3ùÜL¾D7“/ÑÍä‹¿™|In&_’›É}3ñ‡õ[Š«ÖÀq'œt>rùI•>Á18þòÃ,wÂç=zØåÎá?r/Ÿ”IÔ†£–‹oXÒK1œ>ˆÑÌõçThr'¤ÉìÄÙ(†3—ͧï"!¯”PÚQ G­®Ý|Šè§Ñ¡ àLæóÍ=›–1ØM ›ó?'U¶–eŒ™À\Á$›L,¦õ†ÿ[Ʋ6!Y&1K ”$~7ÀC…Ü pƒÛƒ.j@2»ÑM‡o]M0íý_<ÀÆ p™w ´*ÿàFÝš “ ÅrS,ÀC §¾)*êãià <<ò€ã/=(߃¦FÆïÄpô ¦2{f²¡Wj8õ¨æbëÜo#{Rm›÷ý‹Ûà £M6ÙȈîb˜»˜ã.B(j+e(j+…(j+¢0­˜Â´b ÓÊ(æ]›E/}¯Ìh²yhþ5pëë;Û×w¦¯o‹mU%EYxÐ$ÞCbK÷¿›˜eeÃãØÒýï&"º7F|-ñµD6êFÐr‰¹X¼‹ GŸÅ,ú,ÑðÐÊKÓõFÕªüþã7YÆ¿%E ‚¥üu)¨+'¿ âoôpúI‡ï‹©[yèØ÷Ž< ˆ¾ÈVp-r!BÛ¢h>kr&ב š%³ 2´RŒ•1:0Ì…ð”¡a™j6©)Kò¯ÕhÞIžX£ÚqY¿“ÿ#¹Äê¡ áLÆ5³Ù„aé›]“K-šu†Ý¢ÎÍÿEØ-¸«Ø’cÂÿE¶pqZ?Òcb(¶b(¼‡T|fr sÔ€ËÎLao.trs¡3› ›Vt®Wr&5žE¹E©©Ì]SªNSïè-”xÒâoëƒò¯ìq .>ùòþŒÀ>Œ¢$õ`šЯÈ1 €zY®ó’Ù0u!C²zœP‡-òJP×< ìÁ#Ë+¶¶ûÿrUºfinO*'Û0Ç. Ìè’å6]D8mãn`ßRœ• 3ºˆpîÓz=Bžµ 4ÙðDW[ž£«_qTÞˆe½cúP¦OAdz)NŠª1@‰«_éG3¸kdT;Ž©ô#‚ˆ(E9%*¥eäþºkNþ=hj“¼×NWpÊ&'-,PJ·0_ùpXaÑS®µ¹#¯} jž´Ö¥x&¥x‰ŸD“;8÷¥‘‰”»ˆcËS®»þCËw{’Ê–ÙäC@Ýuâ«Ã-üŽO.tD®sÄ,s$[åH¶È‘`#ÑG¢ŽøŽ$ëI–7¢W7ªm#xÉÝŠ¡È¶a_iÝaùб£™ÉŠáËÎWÛjÑÄÔl5P¿€:™w!Eãz)“Ö5qÌ…=¿+1šxÙ?cõn[f3‚ÊìÅ™£™›úûë¤3Ùu#Eòziæ¤TZnOåNKìž<’Úrn#ÅÓâ[·.¿^6·°Áž>Xd̲!Ñz[êà¼hûm<Ý€‹ÈñÈ\n:4ù¨Þ«‰ÜÌÃ:˜mÆíÄphª!k®U+”xìSx~hâ3ˆBLŽ/ŠpÑ™±FãáÅUG\kDF¸—Ü‘L!ÙKn ñw¿€ü-¡‡Gäx|n€ñxèÕ:‰4@ÌçX-¶ÈãH $Ñ™À•â›Â -Øk¹À~#$ÓÒ-áî7Srz><·VLÏ…'Ö ¯{:÷S GvR:íøEÆžZíÿ+È3¢H&£,Q\m/,ÊB §÷Z*p{Éå7ø˜ ŒàL„·÷¶kú&ç_Ã7zœ`Òsá{ÁòÌq gg~×¥>A[ÁƒÈêÒ%=¥pn'¥ÒÚÚ½2ÝË¿¬ïàìÞ! <‚$¼$6ØÏ¿‘ó¥>8pß¶l®aábïc°|„¤ÓUÓk!ÉÊ„EM(–¾S—‹ÉOy©,]*1˜e2É‚ Åâ«f­*ºH6z˜`ÖSá%}X’î+ºçêþ%Iü%‰üÅfþüçÆ&~Já¼N §m¿N9µ<ãZ em¿²_Œ±éŠZÕ’âPôÉýú0 ¿@Ä (êKD«üHUT†¹ ÷j$yPgAMÇn? Iî§œ îä\r?ÞîtÕ5¹ ä¡ NáM2g¬9Ÿéüƒ‡X¨‰ô^MÆvoz>÷RNr.yAíÿ¾Õâ™ |ÿ÷çA{uµ¢Ô .º7àò›ªm:¾ª¬äxöQN&ôrĈülÿÆ ¤öšÞjñØ%¾ÓôtÐFù…¿D×z"ø¨çÂWÊoCÛ9!g#‹Ì[מnRƆÙC¨U/+†à EМÿq?B§_Éñ죜LÞò©[>qË¥mù:Þò•»%kõ82Ú×*¾1°÷À󣬃Òéq™Qb­Ç&=Þ VЀ´lÒê|èÜ_Ëîˆ1brÜ­î½ :^aê“Ês¿»\il¢Æy@u6zdÞ#ÃÇlBˆ)ÄDþÐÏÂÏï<°@B 9»sÁŽ›2šJ7C/£‰Y‘TvÜÙq´âéÆ/4¨¥Ç2~àÁòr°=5z'ƒOb&sS×ã„e!Ãm²75×åð³Êõ° +N†q°cHÛþâ‘£$íÀ}e›]]«^çA0x¤¸å­ÿŽL_${Ád£“ߺÃWŠ|”oÔhr§v¯÷­$vÛ™ñ×.,†s!q.êÜ™üT695’*îbŒYp Â[7 ¹öðfQÌ E{ÿ÷óÕ@]Õ$̱Ê´pÊ&§Thl_öÏv) ©¾îƒhäÀˆ7ìR2Ã'\4ß,TCaú“þÊuK®ðÒ¤óÍÌ`”=Œ.rDòZ &gF#OTV|Ü…šˆìÕDìp¥òýâ10|¸¸É^ñÇáíéü)Ê¿0àòÛìü)Éß©^ϯB’ˆËä­æ7†®Óó%è]Ù $Á€í]Y~úk9ÇÚHÀ3ÿ5ÎÕ5%ÙY´P‚ɽ’ˆJ.a²V‚Q™LüýèÇ¿¡ch|?°úù/$Hßù}ÓLý!Ùz0 Þ#ó,È]å•€a!gâ{9“¼'ßemO¾¾Ú¾%sò/5‘˜|5°ŸÆHpO¶=Ï{4~pÈ‚Ðw{m.¥`è %Ò’;̬•`VfwÀ{Ø"²Wþ‡ç Ü©äÇF H0Ê‚Ñcx‚«TdËr¡D“—êÊE­é¨5•yE½‡¢:rݧ¨|4`Ö€Ú^ÔÄ=6ððMÜ9Îs¬¢Pĉ${Ž~4’"+›¦=«üC6¢ó ?söŒö|†‘‰0øÌ¾_æß²äK 2°RÈ!ä „ÖÕBÝŸ:]ªoJĉD²à$A3•¨ÿîЇÅ2ß›7™HŸ¥ÒG©èIjd‹‘])Fp™”gaö…—Þ0ù{ÍV˜§Mì”hÔÒÏ2k ‘7"GBÏòÌÉéäÄR›[-•]róyPzÙÍ .>·üæ#;“4j@P3ImùÅÕ™•É„pm™GW•˜žHÍU’ùàd "g¢3OüñÐlÝÞ«ñÜ‚Z-yéŠ;àñé«1€pµÍCD²Þæãï,§`ù[ÌB¯¹Óܪ›ÓÁ¹u*wb"6±RåxX²¿q'Æ33½ŽVÖ®±²6´g¦C³OªNô êøç”?°ûÜŠYèà¨óñ û‘Ð…GžÝ=ëÑ3|/LççvÒ 0D ø“¹Ã|xòcQDÎdg> ͇_ªøô †`¶€)K½g,uP^§ƒß2ƃÑ÷íˆÌÝ·§C“÷í½šÈÍÜ·ÃÙ׋ ½\4Å_ÿÏžÔÐ#«ÿ8Ù¯ìœN–9YæehB<ž ˆÔä‹©Yï¦Z‰Þ Öä‹Y[ïekumoæÒ3Å¿uÃEü<¬©ïºî›îOüâyŸGÅÒ¶]fâ²'y­ÇsOzîT‡n6:úRêwc·í¯¶¿ËÅoÝ϶Èwµ§òWÜ䈧rù[o"c)Îb’‡ÏQœeú«c<=xç!1Å—äéÁƒ8!H}iä$OŠ3‘±” š¤gY˜ð,ÞDÆRéê¬;w+lÅD;+žëi%£k>khðLléÂ3N{=ÝÎJ̳²áÚkæl„D&Á¥N”= 1ÒK©íÌÝÊa.ï"ÄÎî _³) v^´§— ÝÏ8ކîl‡‚ö8ŽãØü¦+ùÍaeÃ6B"íNK }Ð:`Z ¨&#)WŸ©O@#lÚ²I@ò4 8!Ëp¶ygÚ$÷»ˆ™€ma&cìÁ.î8\örÇ©z¤£ûŽmUžˆii% V2:pÎPœ œ>'Bf½`iÎÿ„µ£Ò¼ Z 9eX’ {O욯ïÀ<ýæä?êºxlpàN¿~ðz‹s²xþfòzì—GNÛ•ÝUgB…˜qˆÓ6h3ž±Rµº{qìcNÝè~Š }Ï‘¬äö>$Ö÷| Ê‹[KwÅ­§»‡"ÖÔÝCuº}¼;ÝÂͪZßKKua™=-yjÿþà¥të±=\ÞÅéÔùlúê÷ã7§³© ¬«c–þ:ðxe–>3yð ú+¿©úªE$e6áY¦§N«:Uil–ÝžéÀŒc›a3ž±lš¡åF-G0œ¦4ÒC‚óß–ÃÚH*²´ A‚…€¢q7÷oÅÒ‚¤ ßsí.ÁXy£âÚƒì¼tà ‚¾Ýî À7Û=òV»Ï÷œSi* ¯ÚsDŒ8ž`”FR.9œä]„iŠÖ_جÂYö ›MÈÌ"|$Ä?>RâÙÉw´èÈÁGVtÔ 7Éî‘“™œùÈÊÌÎ|ä…§gÚïÂÜõüë)Wm?tÈ|RþŠ;¼“~R>~Þ=í[]\%ùr&¼—³ÉßooC¿ß.Þæ}³U¼Z7…ä$/äLh/÷$ß«OÕé¿î¹:]… Gݯ•.sºìòI„ô[‚Q)ŸB0¦ßC ÏyWmË](Á¤^ GÕ~îß©h*e¦ÅËBOÚçÿxà~Ùè76ƒÔÛ¿Õ_½®Ã~+è#sC7"ðFØ#õKVxQU’ÂJÀ“…£¸4e½?mVz"ÿ¨'ûƒƒ×|úµ2@ó‡_Nêì·Tb/õ#„bü%xpø2ymX°Ì=FÈU¯¯M÷-,‘¨ N3ÛHÊåET41O‚“ˆ!¸ü—kø?´<ÁÖ‚`¸\³Ñ‚¤˜v!+:Á5²ó 8¦ ÍŠÎÊ@„—{Ä…‡‘\ìS›³Ü”ä¦d²;ÖÞ„'ܯàÍþâRQø»Uµ˜`aÂcx’¥qµº?º-›ïSs¿œz]µ¥ê5ö£'A:zf£gæ<³Ù3 xjèÔÀi`KsÑslÆcNf’[Ê&Ö8†«K†¹ö““N~l¡z5½¨‰Ê2îƒÃ=}%¸“€' MaûfùÖÄŸ9Æàø|Jkã&`:Ôtˆ24Y[8î#Á´‡ŸaÄ7Ivë£ø>gwŸUu®+ì‹Î\ÜQ¹q$‘Ÿ­+šqkA@=ÛcEM¬ú³¡¨‰¥65ºþφ½¬ŸL„w‰¨Áã^üÇO.’»Ä#Œì.³‘ î(âGò“„Kö~’#ÉQX?Œ?Á5´³á`¼ô QÄÐÖEÀ#¸|îöŽ\Û¬ ˆ»Íqkûü~3·$wêC/Žêá%ªoëP÷’Ï@Ãâ^â™÷‡É½¢“]RGVR:ÙÅõŒ”, ‹3î^(-§ …3îƒ(*1H©òV޳pàx!Ž˜D !Ë_›&—C,\$ÞEˆÓúµº­hå#@}„PCë{÷ "‰¹¶V´Ñʯ¯DÑé{¨1|ÿÂÆ'qß{ ¿Â¦¸’ÞƒÁ,øÞƒ‹é\k2/•µ§ÂØšåÀ' FY0ʼÉ5=;÷Í8n^íÎë¹i¤ƒ¹Œp¤`”y#IK{GTHqU’Â’öZ‰ÐD=$c$ÿÎï fÛ±dO#Wç×wÏ”¼lj-e‹™Ñ|Þ,s«`&blßT'Õ÷9ûåˆ }‘ÞQ^yÒÄÁ3{xfÞ3%xjèÔÀ `ÍŸqåŒOcGðä(ެ&x ¦–>bB +EÉîŒX¾ÐT—cˆ“ ø¶>"ª$…•€'Š€"EmKQÑÄu,ìßÓ´ºCÅÌh4¿5ÐÃLÆ(è¹ÞYð×öÿTe™¤äb^,Þä%/»9T‚‹XIñR_’VÒ›”QÞRº}·ºëoVàö5Ȩ‰¸öšöþoÖ„ñ›[“à*Ûù°8ÞGz}að$@á)>tWëD÷ˆ¨É5z%¸?”MþQ4Ÿµ mãBBÍ."œëy¨‹2E‹#êE£M^ÒËê*[",žHÄ!JÏg®û6E³okCr8qcÏG‘_2ð2ñAÄ$b>«ò¿ßh‚J³"™&+qe›#É+\ÄIÈ&¬xaÐWu­z|˵^ÜEœÝÀØŽ0e£íâ>4ÁX»Ææª¾•ŒhmBâL&"kõ)Ǭh®ÑJz•ùͯMžäö³béF+ñíqŽ” èöNB¶D—ä…*n&”¿RÙº6>,s t¦¹ ,„·PØ$³[–ÆÊ»d}”w›¢#Öóï÷Ê?)ÑÞˆ„ FâbãÈ jç#¢Vmò4…µ5¢±œQ‚ÂòqRÖÆGD%(¬¾oUkŠQHÄžŽˆå,›\•§®/Êx`„s£ÌI*Õ"ލRÅ}DT|¥Z„‘6Ý­Dh¢fÛ)lN˜¢*îŒX²°½¡¸*†8 ªâÖGD%­ŠãîáIªbÄJ„&ªŠ©–Oµ°x’åÄ+sí|Ͻ⧛î=˜ÑÃý‘œjÚœÿq?rêÜ ©ø²‰¹à0£K6ºÈpü½¸Õ]e¬•Ì/}iÇúÛûÓŽ#Mµ4oªey“,É›hÁÚD‹Õ¦X¨V¾H­|Záâ´¶ÍÐå>I#í~8ö±f¯Ì{IjÝ:”¨æZIñø¸Ž”, …Ó+éÌ­Žá$õÍÕ²À×(xiCuïÁQˆš¦!„@œ Ü]µŸWU7µñ-}é•ðÂŽÁòvÙÃNvl¢ /˜c·œ‚K)L€Î›º’@Û88aîô"†p]„j»&,%*¨f8Ø=t:>ÌÅ4oónuß›új¥Çn å¸ýÞì–3a28W¯zc{“' ÛZ ØV$]%| l ’Jr«w‡'_Í;÷8bFÏ8›kÞˆå’Ý&*á¡’Ü üÁﮂ6aÏÚéw$Ä·„™ÔÏßáPö¦ËRR$K #Ð…âgåúáÓè9i;¶ãØF»y4ž¨úm¢¥ƒLÇÇ¢¹ÿOq³ÛÛPPîÿÅ7º»ß ân}Úª¨Gæ·•¸ÛG/9I7Ms‘>d#6 Õ4QFôÀ¢ï{ä^1i¥›£ZIÀZÑf©Hb&1 ™¿-ñ¹Ö3é~Ï»Uµx—îˆ áLd{s‡7­Ê^¸ÍÜÉ4I.Ûº›õÙtüw÷VidéÈ9õJˆÄ…èIv¿žÔP˜Ç,2ûíŒüµBâ~Í‚Óüv8:ñhàëáž|1܃ ¯„ëü}ã'dCÏãuþž¿o²`ÀäÏu×›‹Éýë'øàZRØ , èáµ"jªvðíÏBÛ¼3-Ø$_Q[Ád“U¶°¢è:]èº÷‹®“L[˜äaÀä÷Ëí¹ÓYø]Vs%(›C#”Çe+#ŠK_:èûŠe)†ó1•ù–·§R+ËÞ{wpvg*?³[Ø*?³KØ*?¼;Ø.¿©|­ ÿÒ€Ê ¨üµ=u:÷72ÿÖÎïþe4`óÿÁ6Åܦÿƒmƒ¹ÍþØør•¼ñC»ŸÏ' ês—çŽÇ™†~êê¬;{3­ ëÀÄ›•>Üä˜ ØÑÓxqA›ñЈ$š†œ³íÆ)Î8¡D´p IÆ™( B_ëþT_5ݪÚ9àÞ!ó ‚öŸ»ÝÛÌÉýí°¤ˆš  ³ILD,B a~"yèKòwôîk^Ø $¡ojaCÝݽ[H³¶ H& Žb^©”$XÉñôóʦ‚ä‚®ž˜ÍÀvø\š®R=K°Ãу˜ÉìGx±ïHK-š8h¹ÀýÅ|щb<²S™û¾=µ]óÅ>µvpvg&¿1öt7]?¨’ÙµgIò erVÙÖŠ¥ûÔgÕJû²µ‘Œ œóg§<ÅyO–³û+l¹ëËÚ„d™L,ÖôZ²p )¼…àß$7´ àß$øšû£JóG£[Õ¯!b.8ÉìmX¿Ä)ÝÙpﶆn>í Pˆ§“¿rw]œŠÎÜY‚ˆÊ0ZdÁ‚¢°ìé©„3[êä¯>U¨ÖwíÍppÑPAON­<8´³i,³P^MŶ–ýp¿Â”IÛª«Ün6r4õ,ç’w½´ñ¶z<û¤§ÂkËwé¯ÄplmÉü°‚ï©-}Æ·pvoy*ç4y/ú˜ó€)Fþ“"=ªi'†£Ó£›Z;Š$ßb8Á¨£¿ }”§ì ¤WìµÁ5}éY¹1˜:ŸM_ývm‹ájX¼¸ Š5»d£ …SX¿Õ4‹±RÃñ ëw¦fcw¢Ø(vÇÇ&ˆØf'–†Ø ‹B¬(ô•¿°Wb8y“™+ÝÑã6r"wSÉ›s#hAmäpòIÎ%èÎê¥ÏÐ5h-‡&9•Ûýf•Ûöf•Øïf™¶7•ŒßÞÈÑÔ³œJÞ(ËV¥ÎìµLà¡þCÇ^jÑÀAKöƒpç¥õÈÜ{ 8¾È;¯ÉGP|*ÓûAc>Fî^‰I’”ÆÛøQhÙdÃ}è¦æ?lõ8ä§ÂëskòŠî²‘ÃÑ'9“ü«bÇ=•h^§|7êß3ò5ýrR9Ø5ê~Åäï„uó/£œK^׺ëîæº&ˆÚà$h°ëšˆ[wí¹¿f!ÖÛ€ýÍ1°»9†ô6Ç(d²ìTì°Ve˜`eEp`„ÄE/G#Aq„8²‹cgA².A^,òò„(½(8¹Ry';íK.}pà Ñ{cáÁ‚´€Vœ¼£Vº0ªÿnç}ã@„Ÿ8thñ:>:®xT¼ŽmóNk¾uº’ãÁG9™|Þr™¾ÒÙç]š™ð½®Ú’X¥fsÁAfÁëDL"† ò3û®˜ ×ð^„QzQp:³ì`ëÀ¥¼ ÜU9hÉóvc€Ì?å¯{׬Ðý«mŠJÕSêöæ&³úרþµW¿J>«³QMêwö.ÙÆ!SïÄHèéQæñÞ½ÕÇßûp$ã?¼uÛù*O!…M€apXd\?IV¿vȸ “ ^½»’ÔKa|.yÙ\ÃL;Iì<†à!)¿ ã[ß}!š·>ü4?ù=_ëþ³é>„åq!@&IYÌAÄ$b.¿ûEX‚Àý")@”^œË|oÊ¡’>ö&Ãh"9ÿS )†”àuøï³îT÷á)þºé×ÈïŒò?ûã²Ò“þ×(ü׿?é³Q8ÿ2ëXVzߪçN*Ï›¡~ã10Gwê_ê7‚;õó“úÍs¾Ž=ô7¿°ë»ËcÄÓÇL`ˆ• Â,“å@–É2¼½Ln4ÿ{}ÑäïõLD3ÿÜ/Qh÷û*ÿ«±ÿý_ý¯~|@ßœ “ÿ\á'õ/¯þu >Î<©3¯Î¼:Œ0è›Ì«‘Ø×Ö÷!˜âî·uä½òݸ×6›•@ÔªȨå›Q’‰êÿsÊKãgì¼™q)y3\øÏ|”·S5•{Ø Œ(¡Œ£>ïmêKúÖN± ?oØ´ÏùÞ7ï}Ì÷>tïS¾ñu{ÒÞšÏyƒ¹oW$oÌš\¥þÙèM o4ï“0¿LF×½ìÉBDùfr§dnŸ¦ó 0qiãâ7b8ó¿ýÿ[Ø¿-ïdûwøß»·¯)|óšbÁ·®)vãšC‚·­9#xÓš#"·¬1!zâ·«1t³ú?ÿ?¤Öý߯…àPÿþ÷n­›òÀµnŠ׺)Vëæ`­›3‚µnŽˆÔº1!ZëÆ€h­ó½Që.ÿ;=yüo§Ø¿ÎæjüVáÛþ{‰ŸF¿žF¿Ž!žFî·Sx›£l4’qµ'ÕV m=š6sîå¼”Ì-÷–ÿÎl€Ÿ˜¢v<Þܬíd¤Ó®‹~gºŸ8#f<å4/,˜%a4UÛt}*È•›˜rt“`¶öžÛ“þêuýÖÚÛ¯1ãn,fpËnLënÅÝ?,Þ_1à%ê G׺Ðäøæz?!=!+êþ÷ãq_ööúº?Á¦»#Ù”w$›ìŽd“Þ‘lÒ;’MwGzs-Îw¾˜¿‰¹rcŽnI0ý°KÝzßê¦l®ß©ˆŒÅð£qö4Ns̵×.µ:Y厙ÊùgSŸæÙsïr*­ÿ–ÚÈZÀQ+Ž3XeÎ*ûyð—t¥9©Ò(ÙsvëB2•& .2œ7×û‰çÍ5Å~zgm±—Doö!¼Äy³?á%Ë;} ¯AÞêgxÍñVŸÃkŒŸû~¦°ßuþîÛŸön6ïöÖôÛW˜a_Ð÷†H¿âÛÙp`asÑ7K¿$;TüGñSY(!WÜŒ¤{h¼YæÍÒ0¦ÂKE–ªS…l2¶•q´KJ:5¯\“qOíM)þrìÜ{;ðrom1é4¢ÿî—[Jº÷“±.üİ~Ÿ×ŒOšß6VJ$íäoSuò·‰:ù§8Ë-_SàEüD”ËMdSÁ&£L†'亩th7•Žî–ª!ç·i+’Ð-ŒdhÞHÌõÖé7°Þ5ýÕϧ߀*Ýj›äy¾¶¡MVbººOr™=mDTÎFLdí-ɵµð1y9Ô·}gáw°–N2°à$Fë;uqÒt·ü˜¡t2Ltóï»Áöi8ۧᬠ—Ï7ks•ßô©Ó¶)Åï|Gv$£ëîí²ÙNFZÿÚÞdIräZÓÜó)|Q‹î2Ȍ씮») ’yÉá%³3󻥥ÅD 3C:¦€ÂÌݹªÇè~½z’Ö 0 @õüÇáSØùñªG'Qfo¶>):áC £c«A¶ºã©µ Eb÷˜‚–ŠÝãÙ_0v‹Åí§Þ`ïÜsÛ”½ù@pÜ~ÞâtÒ[»«xoÜR¤bºýÂb¢õP‡Ðåiƒˆ—‚ °<´tm0ïÝlß̇;Ñc µz °—¢> »M½äÁõ(‚ÀVѬ *u«’õ|^ ‚ÀºµÊw>í…Î4æÍ43=¨WìB\·?ˆ6dõþ@À¶c|0Íå`̶ãz$™µ†ùHçr ©Y˜“”’Gë7BáÁ›©ˆ½óÒ•¦g>ͪ|MñJÑ•Tòé*ÛhÍ*¾¥@XÙÆoV¡Œ®1ƒÒMdè\®!•u¥÷Â<Ø¿ `>5:ŸSsaÁÔ#æÛŠ¡ WqØ^‡WßÁN¸ÙÄy{A^ÝÄÆ:Ã9µ£d…”¬”LUÙ¥Íá*Šó¡n²Š ×§Šc+ÕD«&Z•Ÿš´Ã°ñ‘~-: Ó Žpx˜b!cABXz 2t´§@[éêÆÎøh³´nO0š_ÎØë%V ö‚Ž›^×c½@c§µ¹{Þv7Õc:g½rtT'Çr¿å§ìÀÐ\ŸêÐÙ´N‚4Ñõfº+"š‰Ðpz:K.š&xÂ-I …ma°Ë¼øÿ.Xð.»daÛl¢½f‡&ï3"Ðk–h€¥Ìå•câGˆÈ¤…àI@z›œö,Ðkj¦B$êUœFf)G„Gˆ¥…àÞ‡ÎPçpf:Ç2Òºë”É.¯ðµüZ4,Ý 6Ò›۱P—%xÏó)Ñá%íýЈô¿!B½'N†Nd§Ó—YÕÚú>yWÄht±ÄˆŒ™”º¬µŒ^<~oY­`âÁgôÂ^[wu f vD™¸(;ÃI½¡ÈCÍ|z¹–Ÿ¹å‡f<É»V)˜A Ó@qž’ÄáFlŸE'æ-uˆ¤.© MÍcí[cíWãëSº¿ÀFvF:•z3õòü&>yZòÐy1L'˜hAœî$dë äéäëäëdêì ±šl§$Ï©¯Šá¸°Õ0z;å‡üÊó +adF G«[‘‚)¯g¥p:Y2ÝGB™bàªÔuJÛT äSb‰Ãu7–^kÆ™ƨ h1FžQ!ü#B˜GƒpáÂ2¤7s;ñ@=t0(¥C‡êg;Ø™X̯Eƒë'K8-°>aO¼‘E Ðý7¢ír8™?W¡‘ *Ž”oz° Cÿ‘_‹Šfµà^$. ¸Gl©ñ`½c\Ã÷¸†î± Ûƒ‡ìÁÃõ°¡zý´;Q‰â£ËSì´¦F$s3÷53-rÝ…%eÁ¹Ã@­\¢äpR4Q¼ÔÁØ Dqoæ,dW|ÇÂ5‘ÂЬø½Ô¹×çÞŒNã}Ë‚5VÂÀŒš^­¹Ñ‹$ÀMÄmQ8‰2±³ñ²1Â\u•¹…4YèrãC'm²Vš©f-Òú5ÏXˆWe1ò‘lbeyK@¶©Y@…½ fÂ|¥ „Í-¼åp«ò»úUì1Wæ+‰A/ 7dŸ«}¸Ã Ý –ö¡Ìyîß2ç¹}Ëœáî&<—:”ðìÍ  Ï¥%<•È=çh,MTÈ@V…ŽóõõžgoËD‚b%èmVÖ¦›–:4«“hŠaQŸ†®#ê Ý$˜I[ê@XZ€Ò£Ou)rìÞ°Ô!B=tèP2+Îàƒv"AC±…JÆ\÷JQ©ì¼44Ù\€,`¤Þ¦ ÎCÏUˆ$zŸ3,#mŒ˜³>‹fE €‰!Œ¥ÝçK½º€»‰x¥¨|¥Ý9ÌHt0L‚ùWõÌ1RH´ €SŸ»7Ñf‡¼Dg7y¥ˆ`N*1Rt•ìôúm<|1”Њ10Þš:…Ú¯Z-Pl;Iùµˆ€²àÙCʘ’-&[H¶ÈköaJ¦™ Ñ‘”©'œ‹‰ƒ©SÙÀ$#:ŠX:ÕÎJ&úy„ˆLFÖ§Þÿ'¡^š+3º+KŒnMŽÈø!+gæV+9ôˆÓq¢#FÁ°€çB†Nƒ.àÙåeÖr¼Ï{„hTF~—ïw‘Y/¼¿"Fäs[êôbã­zÁ T¥ ܪ*Ã.¦‰ÂHÐ)n©<œ³.Ŷï«ÐX”JbT0E ›GsápË~ßõìÂË-W¢_ÈÐX´Lbd"· ^¿- „åÕ"²¹åôúÍm`@†UW äZ-ð^,õ: ’(ºÿ7‘c—ÒH€æ_ Pý=ˆ¦)tÒA'­õSpÀݦ …ïk2LzA>Þâ;p4ÇŽ$sñ2ÆÃkî±#ÉF ™Zd=¯YÏi¾óÙ.ŠPŸÏE-N¬°sUj™8UNü7qfF(ra+E:r¿ç}.ÓZ=z? Ú1¨ÛõtƒÁm¯¿2m{ý•cÛë¯Ã&ÕE]¿ÞÐTƒÓïpí|ă´ÙEçŸ{/BÊüR™5ûºÚS¥ÁZÕù¡J¯Ç™QFfFP”èáÓ¸Á_·./ô°æSvW–†ìdYOÚ¹UNlNV`oãZ7z«¥Ý^½"±H=„Ù¹ÁÖm—+ûƒ]ª´ýæ\^Úƒ¨º\½_ß"¶±ubŸÆbŸ6Å6ØœX2K´X2ˆn÷ÃXãå|2±*A:ï¨Y¶äª_‹F9jœlˆÖçº(R›ª=¨Oо}9̈Õ4ÓÈÿ’©[‡Ð'†ÓïÛµÃLܱþS çr![ÚÐJf,Î^,F.Ýqn‡åŸôfñÏi²ª •‚î•wª‰UeÅ—YgVÆeæŸÊ²€“…K@éuYyÐû™¶¢-wÎP ;ÚPYXíd¡ÍU AëHAÐjÁÐûkJcf¥È‹Ðžœ`Ü¥*öH• ?ttK0yè8—`è /Á¼UHÒ9¶ É:“V»iç`ÌØyÁı³‚á£æ PËl‡Š?¡<8ÚÆcÛêç°\n\iLeÙÊÁɲ–@ØÀ‘8ü°±$qìÃKàO¸fº¼ÿ•tmp†ìÍš ·ƒ³7K[h o2±BuzWÍêò¤õožìšô®šååI4ê_\QÌSV0b.Ô L¥Æ†é:*9Y½’°“ä¢v²ø˜}‚±›æ…óžŽ<˜s*ÝéÈ …ÞsýZ8x§U¦.m}kp¶± €edXˆXjl.“áõ%Ó6oºCöž¥As¨ö½z§ÕKœ,$ Ë ºÐÂáSôœ·Ù›žeí†b®‰‘{±~ø÷ŒŒ`Mn 2±rÖ)'*'% s}rW'_m^Ú†ï ‰á˜ZŒ‘‘³Fg‚L¬œuʉÊIÉÈ\ŸÜÕÉS›y£Gâñ\ S- ÒiñrÕæR”±69Ùèxk’¹"yê±¼]ž Ùq6‡VD1ê¹èعê{C˜¹ XΗç†S'[‚÷X™—«ÎWD¹Yêº_ÞR¯u©ÛöQŒ½_=³};WÝo3—ï9p“]]ò–ÀX’‰ÝH²S³×ý\–•žµÞùnô>En¦[ýÔ wóÞì§è<5. )¯ £ 6Aì±"72[¯¨r¢³Ôø=ç¹²ï9Ïõ|Ï(®šœjápH­åT÷’JÖЯ… J©$V…¬-¯Š…ÔTóz5õW¥[ç[—#A*¹Ñ;CÈ uq¤`mnK²Cõ[CÅ o®ËÑhËaÀ¡–ã"åƒäãÑô©ÆT)*œ>[9*N[âãaBpd–ÞÚ¼ûHÕçôv<ý‚æø°« eöLyX7šµf¸ékЂøñe1•f- 'M/F”|àWÕh̃<Úc ¼´7¹p¡Kžk*Û.ž©[ÎÎU00 "ÏU0°46ïÄ«Ri%-¯Ôù|à3Ư…à Z|€è e]¹™tB¾Ú/á\„„¥ã휬1ŸÈ„Ôѽíî `ytHTZ~pOÌ€õµ¢…Ã!µ¦W-d¨´¥ K¯xˆVÙØ Xc~)˜ «¯ªn:ž*ó(Ù´CÅM Áu·¢ÆÕ`vä{ãY£AöbxU.l¡µ¹!ÈÄ Ö©’yÿ`ªRŸ•ÒhqTèÔ^Ÿkz< ÔÚýbÖõM èш†ÿÒû©eÿý ЬíÌê,ÄE”jùiW+¬–Ã÷‡e¹¤1à°–ß5»µ¹Ô›jÑ WÅ(ˆÃ¢€ƒÌH»µx iw/áÆâ¥ûz­þ­b\¨AŒ5Óð’r¦!öZTÀÑ*Œ¤fcÀ5- àh5Çø¡e+€”U+|”¡T+xÑc¨V諎®ÀÖ]a‹]qt­eƃ6RÑ´Z«â9n.;’ ¬–„o5·îšUÝÄ%wUŒB:³°,Œ2½f%åDç´rL¤p;uKj¯Ž÷NÒ«C€ï% ¨¶`¢j &¬¶`à*êT0‘¥@6#E¤;^8kD×emEgó È”P2B¸šÃ©N²¾µi’y¤¨lM¢¤+…Ñé!޹n¹G/¢¹Ä[jÑùFZ iŒì Œ4Bv?>v‚6Ç<*d¨ÑõXwïT—"¯h‹’É6)ÃB~V°¹—κ K3z±¬KVš:¯:õéªkëâyüÚâ#ÆmAi/˜8ÁÄ rñšÿp³R2‚û•9J`¤œ(ågE›]Ô‹vëšÎUú¤‚Y;w1“èãp|SØQä(æ[„-ˬÍN“ªä+ÍpÈã““„©|ð‡ýž$G€Í€ì½S’êQæô õãð7:ø¾*…Ý)$ÕÇßhøg‘v@à @&œê\ÛnL®l7&Bֵۤ벲)D—qbÎ4Yx{M&p>\>H4ÂZokl„•ÞÖàb×yÛ ãƒãcƒÑnÝõШ¿"©³ 5Q©%V Åt[d%TkEpTåŠ$ì$-™(I”Z½Š*½J¶3{â© Ì«~±3O9nDK5ˆTýâÔø0Y)Y!QÆü¤;tºÃQHõ²ÑÖ7–v†,ÂÝË&F61²p s<øNé5Mˆ}˜;ÂtzÏM>û Ø,ÔêóÕ‹Àq,QúpyèOÌ–IBF¼ìš^±<¯@¸‹âi'ÈÓÎŒçœO('°£ÔÍ·E焈›„±E—7¥HyuÒãCàq'!²ûC…â·Ú‰c‘qóEÙè(ÎNYŸÚLYÚO½6õ:Îuÿþ]á®çmAŒóþ}’]±®çÁ^q:*OUÞÕ°K5„T©%N Æ4¢òŠñ]dE6c­òŠëMdf‘šŸE–³æì„XEÀQ¶Ž‰…Íg ?ƒœœïò^ÓägºÀç&ŸÀýl”Úª|ÇQË3)„²—â¡ûþ;6ºA §ûþ;&:>8>646260˜ËâJÔøô J7‰%-Ó›Sß»:Õ;¬4&”‘{Eš£zéÄI3”Æûck§r¿pµ"æxúÊ}z<° ýæn]¶[ÖRGå¹}é™cZ€íþåDh{Až;Ø`¯VËËŒ“x*ÉÂì$Ù¨[½†hË“f]e!Davl/9¶ýŽ—Ø|g“š«+½·ãŒ»¿Œ»›ŒµwL^E£'³dzáþþ7æuYÝ%ú_Þô¿ñ”@׊ó9OÙ‹À«ËPN—±ô]—­âD±õ-œ©­ÒÛC§~ì(²CS?«ü|æ9³'J¢U‚Ñäõp­ewxÍXÎÝ¥)¯‰–K”©í@VØ’CIm7yý5¾Jëñ°2U+ß …¥ Ê4DAJÛâ¹ ÍÅ0Hۮ⸬UY°VeÁZ•êêÎ4‘¡#YŒ¾GzuèLè]Ñšé>Š G©@ZÃé®Y‰ãŒUè8F…Š£·zi"MõŠl…ºyÓ‹ÖÅ(pF,±b‰ccäDä$e#º+àB 4Z€f{6í Æ›)pf“7Í¡Ï'ü‰дÌÂÂA‚\äÒà —Ië²¼Uzß0–›ƒWŽŽ7È1Ü"r™K˜o$B§Ò"‹^Fµúó š+Ñ©ôª2F C–Çoz ):ÜCЉîp.ê7>±e¢å¸Hù ùø ´Z6güì«Ð‘Œ ŽÃBñÀ‹È{uèDØò3LLLH Q›ów¦—J@gÄ8^*G¶89 1À6ÇÛÀmŽ·Û¼A œÚR‚¡çÓœ»õ¯`¨™€e÷ `MáùOŸ Ì:3P­ü>8Õ ¬‘H6¢t½¦Ç7`á¯é¡“(¨º=1a=”P0¥„£*y䩱±†f”p4ó'yÅæàoêa˜#=6oºö†´£Vµ0H§…–×L@ Ĭja€N „7KZÕ±íF¦àU¤Vµ0@lE)½¾-àšPÛÜ‚€oy—^Õg«®ÕŸoÿûï¿=üáaÍ–Pi ¾‘NÒ‰’NþðŽ®î²´ìVhщxQ8 ëÌRn-§ÌVèÂW;Š,èТXKƒù¥l²ªëzë f)-œôÂlåP'†uƒtYJAë²ßÙgÜ}Â|ÅÀ~K,EzUú”²Xg)%žhñg”I%.Ù©ÿÖñ(3•†Qîÿ‡«(Ô§ÔËëë°Ûý3Î’c°;FâŽÁÎ|U=ÕÝ,W&ÌR$J81Â@&Óo7o'™>¥$–Òle‘7‰–f/ ýíô Tf+ ýê[1|ËnÙ³ c©ÍWZ›½@n¢•þ4kQÌUy aPe×z[P=¶ÊU™{d,ŠÍ#°K„þÔpï­Ï*¢T4]~×'yÛñ¾»é)E掔Ø#ñ6"i[§ €QI{ªQSö`åöóðkáþŒåðœ·:.S)<áÎý܃"H—§ì_}(VÍæU—µg‘f‡N\žP>}ÎBô¥Ï]8f]#ö"y¨r„Y7‰ÿ 90¯2g1pçÁä‡ì²’µÆŠ<èF‘ ùž·ÝM¦q£¾ð>/×ÄY ‰›ÆR¢Åùʤk1<ôxȕ֞ŸÍMIý€îò©Gµg÷gs{S?@û³8s"Mñ›ÛŠñ!ÒJd²ˆG`Ò* Îùœ›YFæYßÞšg[“@d2H2Q7"}ͺC›ô’ùñfÖG`+-y†Ò°òÉT,™B´øýi¬pj'’ç¡‚à(§É7 nò PMžh!«mÔ+Ì‘ã‰1SÈÚ&1J Ú­«ÕPvzGE˜n)*±Ä‰10Ê´Í9ž -Ðjဥ];G¤<ˆE Ö*&V‘ ù”IõQÁͽ”eɲ•€RÄ:ã·Y¸­"²jO\.Oš5Ih'‰Sßš“è²Cs“׃û™ƒ|U£·R‰–MÜÏ\% Ókvº¬ø3Mö^“ ¼»UUV`£óvEYÐQŒ=ͪ®ÕlfôN©~ƒÉW%éÜN2yH‚ÔÅMšùPzhÌ»H­˜W†1ÖÕ9¿ŽêõðÖ¨·OÝÝ…_Ð[ªµQM¬jâTa|Y,À#Që€PòŒÉ3#Ï ˆMY¢ºÜÔCyõ@›íõ0ØÓ©ÂÓ#:–Y²SžªçÏéP^JüYá•øz¹Dˤ״ùÞþ}]  ÔbØvð#[œˆœ„<€ê¢Ñ‹Ÿ…Äo21Q}¦Ã9Ð8ˆ`®“q.…a±œŠzÔ°®íÓ¡ióÚ vƒ1W5^=Ùh&½&ž•"/¸*Ö#FG5b,•›½«F{¥^zTÛµ¾µ)~³YShbÒ+bÈ缑‡}šêÐñ´N’‚/Mg¼ÛëŒ÷yÁ¯Ñö0Í\  zl‰ÓÙL@ËÃ7 £ÕéX¿ó0NÅ@F'2JYëáÞ,é6À¨Ä'2v¥ÍûÂ|S!€­+mÊâºduÞ<öíAé¼rtF#÷Øÿ#E§©{d2hBº³Òö)iœj.µ}N£» ˜j Ó\…ŒÊB3–©ìôUˆî1d…›+ÑÙÃÜ1´FÝȘ®®¥€§´X®/ÝZ¿µÅc¯ï8W$\™ ’úþ{fj~h~fùþý¡Òû®Õ­#é•ár]ÕD°ïß'½fb4ÀÙ.á¹Êq «fí+ÛãÅ#FGÔb<˜Â²Èð÷ù¹@gGhdàÛ½^ÓDœN­Þ‡g¼äš"U/â9ÆOކ0]˜kŠò06ã"-룞ñÀ…ëQP&Ç5Ês}2\›•è¾ÿÆ«ÐqŒ ˆ“uà4vŸ€du`(³ÚÏ=W±yÁѳ* ¡šõ‚’ u×à˜]ƒsu RSÕ“/‰C¯ÏÊ%N#m„”f h·&Æå–ÉŽiîÙ¾6½ zí~… £Í1Omnš»¸Á1Øë‡ÌSQà‹Àmé°N\ðÍ™kš:cÌ ùõX­Ç•#jÚú˜é~ÝF}šÕ' j¹¤—ƒIß?Ìt,ȉÄ÷þa&vAhmÖêL(å…鎼"H}rÜ{ÇöЬíÌ8 Næ™(w/ÊÇ~뮬طîÊJ|ë®l°§ìž«›ç)ël0¾îWä!XŠÄ"®ôµ@ÈRÎÉRNö,eÃy;sû„YàGNÞÎ|åÀð"å•ãaîøžkèò]›‚,´Ð‚] {׎·jGz,´Z V5ÝYaGz,°Z¶ä˜d²"ȃ[ÂÓLFö¸gÜí2Ö&Y%R³è,'ðL“ZišelùÀ+ÞûUUñÞ¯ªŠñ~¥÷àá„é±Àj=>XYÜÖWʉ"°QdCîZ½¢‘¾êêNp’û„Y À 'F˜­nëiþcaVrl¤oÙÑfuqgš,̽& î¦qy™w’Ú§‡»I!Vƒ•§JOœ®Ô熘øÔè J-Ô@ÌLJ³¸fEÃ0Á+€Z¹ÄÊñv]Á†ùЕ /ÙíBаE¹–þ{ÉÒ{/ñ¾{™³ZH`9ϘY²M€]Ht%ÏXY•ÙŸðVqŒ¹ðÊ”J.äHÕÏyu®y8§b ¥c`dY†r®Òá QêÕg8òESËê P PÃæÛÀT~Aq¾qÄÛ©™— X•¤3+IÖEî§šge‹™P á³*Œì=Í–•4½r ã Ç@êf0@Ž”@>7ÉEc¡bÂY¸ÆùzÄ@6–¿ÆVÓÖê5˜áîéS){5ÌVœòÛkĪ$l%Y^+ŒEÉwúJ¾“—á…·ßÍ…i¨W tÛÁp í­½‰Šé±áÄi• ÇC¤·—·Ù¡yË´’Tp¶#a[0"¶#ØÔÝ’càDÀskµº–áŽÜ}Qj-ŠuæÎm¶YY#Ûonê1[=&XøÁ¸-È€‹=.µ½¼QÍ ´{9BóB6õˆ´F/ëÁ°æ/i‘C›jnÉA¨#9˜´ÕM¯ÙǰÌYˆ|…‡hú¬²r³Ò¢ŒÍUÈì¼U¼¢ [MÆÊu&ùpù Yо}B~û„:ý–»N¿eÄ僤£ß"£üg D­ Ô)4ó}.A„0EÓ 1R 2hAÊ‚aVäŠI)¡ó"{CoÙñp­ewH¯Yúzõ¹{m†“n àJ8щNza†r@—u[Õi¡…ÚÆ¦ÚL%ßX Ä3R t&‰x¬ë×R´¯<”>IÖd({I.jÛ5þv¯0G ØŽx°ÞÄù`ÜBwg¯Ré$vÀŽÖ àÜóR„ˆƒežµ ™_*ÑÝZf.Cäd¢Û‘㌛ËP‰nGð|«ê¦³+°‚ÃtÖ¤HdZʮ㊠Úq–ìK:5 ]ÜP£3Ú½šœˆY«ê;œ²"¿gíǰ#C{+°Ôb°êI¯>lý Õ±bÁ†™,EèÀP“ÞþhðèDà˜qÝðŠ[rtD×É­?à¬á¯’~!:ø"é쨆¸7ž_ˆÎÕ Q¹ôKœYCí”o½I!À¶*FáÓ¯„f%6#¦7;„³÷¦ÈÓ¼ã@œiA„½ ¨þò¦—Öv]¾hC'Dwº}o2ÔZ3ËÏŽ"£ûV¯(AˆÐîÕCxK`E ‚Ûƒ%s‹Ðdïu1ˆÐÜo}¢÷ÃÖ[.YnB#ˆLëСܾý[Â5'ð&³¥Hu»÷ïV‘ ™‘•¥mLÁ¸PƒG{[À˜Ýåä†Á¥‚¥.½Š®Rtcë”"'r+°¡Wû¢\àVfŸn<Þgt:®RØ—‡ÊcºÉyŸAêžP2Nõ{þB™)3–G¯üœ¢xZI<­ àr¨US¼ÍOúL ¢íµ`@޶´W ƒÛÒÃù%ZÕöͪ 4j["µ‚‰„yWë\ â|\šDÆ¼Í ½¶Çh‰Ñd':dþMˆ,…ÛÉŽ0MbeK@ãWp0S)è`ðêöÙ­«ßê[û¤²ðŠs•‡B™À  =M¦À’B“׺“MÝ}ûûƒ¨¾6‡Ï—¦9¤YQÜ d(⑘ i8R¢”è#%ý‘žWtys§S«?Ô}4ÙS Ϭç_Þ$îX‰>Öó °9:öŒp”çš: 4b-Äu«›qO?ãÖŽö¤âsúf`ÇsϺ¶¥~«RŸ:êöÜÓoõpÏ)Hw¸äq¸ç•ä=«n™º¾Ê瞉‹Ã<§äÌa}˜§”ØõÛ¯Ù§éŠFóZªž|,ö²ÓÇ2;F%c=¯õBÐf6ã3ϺÕ#=§ðú#=ùÜ«åM7Òï9ÖýB:Г NÞ’þ@Ï+7½@r™umž>µÔ‡yN™éÕ™íažSbò9o™Gà/'ù„÷Í@ž";[k³‹Ö~J|UŸ(‘eæbäÙ‹EÉ'%yy:Ÿu3‹“eñÑu¦r1êøÂ¤>㺟roY 3†>5øï$xwÓ®(?ØÍä±ÙåeÖ2'´'šLäV“\oTü”“)ÌTz/dþ“ÿ®näè ÍY¦2P²ØÍ«ìììÔ|¼oùéI÷}2S hå'œüoÝSNþ¹,W!tü'ÿ[÷vvj^Þçœû]ó¤S¿ ]–°mÍ¿ã% JÛÖü{|vÃmÛšê³aÎ" ÙpÞYzß„ùt ¶=Ä”ÅôóV¢ÊD‰§…~ã;‡9q³Ñ+ï{ˆ¬›YD˜›€:º7©Þkß³úÐfûuå>ÿø>‰[·ç>ÿøžÕ‰Š‹4i¿ëáÑÅ!h¯å…Ý…ãî»VHöwU^Cš¨¹æ>h‚æšñý‰™kžïuq HQ¯¹ž„Çû¶á;Îëú¢´Ó¢¾¾¹¤ÍA4ºuVwö7Qv oØÉcÔ>µOj\F-1j‰RKµ¤W³€NªPL6B6¸8®c~ùzÓó¯O¢êÝ›Xo[2L½Lâd(5µ°‚ÃàD„NÉ—ÒºĈ@Õam (A´ù¾ôd'ª¨‹u8˜¾"¬±FffxPâ(ÌOÇ[^œ]›_.&KM©›m¡¢‡Pâ„(µã±ÃÄAC9ß*ûÿö×Cÿ;RW!š± ƒ¦ûþwr ®šdffÆ%Êôšé öð[}DêuU(–nJ”¹§v88h ªò*ê!xËêY‘‰Å12‰‘!WÍØ ƒsD"Ôesë²al.±NÖUbP¬Ê0v—R#3#0 Aôëj™Š‚ÞØ¢ð BP½<ìp qÐÐ@Ž"}ͪÓáxSß;°’ÖÅhN,±bHeÍlqáq‘aPý"w<5çQû%óê.teÀ`B68×)—¯`Í%,Z©cÀ¼Ólgï]ÖV¢0Ëé^D—½‰°2ö$ €½¤Y›×I"•åµÈ ÌËJÃ2ÀX…úd`C¨¸Á ƒsì¢az`Б FAÔÈkÆØÙàh\n>-ÏËÕºÏÍÊexÕšÙâÂã"ƒ x/¿}Q:.ãŸb“››˜«ûõ»«ÛË«Þ5)¢•rU9±ÄÆÃDÄ麆µÆ¶ô(ˆJ¯îæ9ét’».%weJÖÚ”ŒÕ)ëSrTh^êɱ:\h€ŒRSÖÈÚ':ïû¿íXh°.VÅ(T}·ºNÔÎÔV)*q“äû¢8³};7671,$Åt¾2¡ç$ƒs€]V6…èØjǧ‡àõz,õ5˜cädD¤ÒuY«—òPŸ<ˆ®éµÔ‹N£º«Jb~¨&U¬rýFÙÉÙ¡©¼w\·$4K¢èi¸_’*«NM­Ê‚¥¥¶/J@ì—³êEñ–ÛŠMnlnb –§fyª’¡î`‚è¿>ñ¼ù…(/}rt·ªÊÐöˆ_ˆÀ£O1+„ÔËÈM,HÕ‰¼Ò» ºÍ¨õ³¡ät§C«¹*…ª 5æ7•HLfÜ7½1¿4ÄBÅÇrª¤v:ü«®¨ïÊ[2‰Hí]KP«`°€`ÞãlõåbŽ™umž‹]$‰$V„R3(Jg¾,Üþ‚*ŒœFZ‰ÀèE#B©ˆ™ % š¿g­¤bß’¡ 8¨:z+8 ·ÐÜŽòvÔ{dÚæ 0¹`G)É*%c%Jíø ±P±‘Xºº!?KÖ$â9ŒP#Ö€y³Ýf§\¢…u‘#ef6P ” Ö¼Mõóh›¶þM/ F­‘]µ(°‰ZâÔhuä7ÆFÈÉ¥Þ%ó2ÓÛÖç—ƒûF¬»©¶±Tâ¾QjÍg‰Œ‡ Á¹‹6ö^Þ#Ãõbx• ¶¸ð¸Èâ \òæ&õ"ÐØ::{Rhc)dͯ%0¦Hs[m³¦>è/2×K:RkkO+mÐJZ¤úòšbbcŠ$jD¥;õVöG!É×Ö†L ‘•IzRÍ­à08 l¤oÉ`†ú ƒsD"|-à«dE"âk]c æ=Þ6z5¬HD@WÁØ€y·ÝÏ;¥ÙžEGÚlß$y,Ÿ/<Ò¸§ž'æÐtÓt¿‘VU›C7;ÝVÄ"Mõ^szr¸%dX ¸q™ÉC Ø}>g•Ôó݃æwŒ{#ƒ»ÈÄFF[ ºÔ!‘J¬Ê…á$T„³DìŸ%bý,ɶ¯µ„Ê}O²®ãÉæCV^Þð²îò†õÝU—7œ­¬ºa=hQÕ ïûë©nšÇ®UôJ…®Ó Y æƒæ2l˜ßŸÑ°aþŽ5w줹ï3¿Ýª¼ÉZ—ó3¿×ò= ?×£=Ï"Íöï’3‘OFä“Wdb&’3ˆÿ!Bdß$·G;A‘æwëØ“<_šÃ¥¨¢ úž D{¿4‰ øOëR½^Ÿˆæ§Ñ±Î]4ÍvÐzk®ƒ–ÑX3½¿z†ßsXÏ€ßrX—€ßq@_€ßðpï!šžÇÇâ!óu/Qû¤Â7_,£ ©X&®Ó` f‚IÿÐË#Ac ?¼œô¶"C¤gÖŠz½×·i‡ ¦¹ïLð =ˆ}DúC¹7<š=T êcÚZ@ÖKùÁm  o¿ z”ÏŒHÉTPñ-Sy„hTÅ·55¶#ÙÀ$ReŸ¹ªì3W•}f©²ÏlUö™­Ê>óT™Ð{!0ÁyµˆxBo¯ÀSÁ(€ÿ _ý\øªçÂS;yõ*.X{hªAä±HqbyOXê”ü¦`Ì0ÝÑ}RÇ]}bI2âIF> ÂT0 Ý¿‚0Ñ Rô;jPAÔéoÜ.˜f½?2Ù3TøS ˆ€^øµlÎ\—¹_‹¦µX.s-tÿæ$è8÷oAŠÏ8Ågœâ3¢é«^^Á˜jÐ8œ‚Þxô®Û@·Ü¶I!ûxš{O7/ÁW ¾±Hä…Ev¢ËÓÀyÅ›K!"Ž ™qÊ%ÙÀ$ð‘²ËJŒi,A„1tŠ Á@[ A£¶ö‡mù¿¢‚ühþµæ_Â&.„{‹5xñDû-©¡Ë*gH’£éqŽÄ8GJN†3¤Áàhê›#éÍ‘î†Ý<)nžä6CZHh©lj›%}Í’¸ÆSÖX²KS j<5'¥Át4K"š%'ŸyÒÎ< g†T3dÒËÔÄ2–RÆ’É@KÆbiX Ë“zåIº2¤[¡D+”b¥'W¡´*”P¥§R±$*–>§@ÊH–RÓ¤ô)=5JLŠÒÓ¡ôD(1ÊüdH{¢ OŽT'G’NoB‰M(¥IOfiL IM]IK ]IMT")J$9INKÒ’ôTän²Ì ÅS¿SWöËA±ë³û¤#>ÍÂÖMöa‰Ž°_TX´ÃãùDqø‹r¨Ââ^’ÃKCrxiâÞÎg½3zÈ|wŸÓExœc0ÛÝã|w΋ÇîîTÇí.>c[|þç³øl†Lcñº š½â54iÅëu®ŠÇjØÓ°™)£R<>óK“Úòö*D9× ¡I­5ªqª]’É ÖÊšÓ öÊšÝý‹Ï3tZ@gùdˆê‹ôØŽêˆô8ï…ô™ÿ šÿ šÿŒ˜ìžðùì›ðYé˜ð¹KéûLÇåó}Þ#’ùkTãT»±&KAkVŽâ¢Lê¸x“¦‡¯!µ*g±qfM§`SÐ ßó†løž7dÃ÷<¾„«ŽäõeS…‘Úõöå¡ÉôW¢_ŸH´{'’‘hÓeA°?Š‹rl:7bM6ç»û¢l+àöÛ´uW§´WÑYlœko¸ î‡÷Yî‚ûà}¦»°þ÷ÛØyÒÏimž~ž|­I·’GX”WíPVêõB/žH2ºˆŽò«£ÍÂDÛTÃT«$“:»M/Ûqt¼aoûCêµÂÏy‘ÑŒ/ã㬛øÄÄSÍ·Y²¾õºû‰Å¾ˆößµâ|ÎÓCZI*}Ÿ@”'hÿú”«DI*úYl”ë>6Ú05/CMɲ1÷wªËwªÍwŠÏ·ß®—°(*lÛa•u¢i¾oRÿ;Ø_é]šmîÙá”·ê³u»¿9…ý¤d>…I­“ØØDɘîW%•X©d¢Ò™[§é–ØR…Â4R¡âuú¬suú¬ìwú¬;—•häµîj˜kP ¬0{zÈ·o*q~Q'zš©GÊ¥­oM(ÏýiOjkˆN*1úÅJ%FŠÎî%9)§’,´N¤®o[삎T6­áœÊ¼ lrï -”ÈXZ)¤)¾vé+|ÝMD¨@VaI¯Yúªûe+÷ykMJhô’‘ë¶ûìÀÞ!õ‰‘1Ý."!ÝÜaŒÓ’w«@BpyÀ« Ì¢\úð*ÿ˜yÌ9`[½$¨Z‚D8q p*âŠ÷Ùˆ~Û§\¾Rï2ãØXË&–d¸"Û­Èf+’ÕL@˳*ýˆLtÍŒ¯éÄbš¡§˜Ï혬¡+Ȱ"‹be“ŧxŽèáž;ŽèÙžû íÑ^¸ ‡´f9tÒšï YH+æÙÖ'ÑÑÆm4ɶLeN5=ж¬cé†e–ÞÚ¼û€œÏDh½…å·úÝ›7#ñHÄr(‰¸>»ÅkÖ³Vo«’‰¢$rxEbIz‘ĈPẌ‘´P/"Ô¤âR!– 9± dÀ;`šâ6O³JRÏþit´gM²]_t‚?“R\2êK¿W$B‹$½‰åV©O5Ô{é,<Úÿ­Jt8ÕyI?Û'Ñß%ñœ¿UˆeºÝx«ešªô„4á=±æ•DÒK(²®­û<ì©= -ù-­h®‘Vrjr;bŠ‹‡BQwÔõ(4Úµ ¥¸5óhu‡ŽzŠä[Þ¥W¢ùu¥X3?×)%V‰„v*©—Ç(4Úü©$üꯇü|iÉ–gñѾ³.1ñTóÀ؉Y8Å:uÔ„>tà"ÒëÞW^w²|ôºy;êotÿŠ+@õ3LÒã>fˆ¤Ç{ððȹsòØŠ÷Z“³ÇÁÃ×çn;U>'ú€’y|´oŸœˆCJÌÁå ±.OˆqIktäçNG~ât´gͽ$ŸÌ÷’|2ßËŒìV7h¼ªW„D0ˆYÔ­>pË‚ –¹‰e¡°ÔÇßÔQ³-f$‰X+‘„Ϫ˜Q "‘ñäáŽ&ÜV™F“LÓZ)z”8‰Æ "w}ÄÈë÷ž^,šžWÕëõ½Ïä×ðÑl/”‘ &êÚŒz•c£½ëX’á[Ý lHƒG"Ú¾–3˜x‰ø—ˆsÒ JOqÓD׳ðXß:\wš]åóx’wj§¹Î;ÀyÞ¶sÒCaèxM³¶ËÏy*èY„-­X¢¡/w¬¾fê"*q!çe7¤ÈxJ*qR4:›ªlÚZ¯•T·Ã¤t*â¶^<§M€zÃw l%š2o[rÿÇB gýCOÅ5€†þ|'þ€³~)?ááÊXª9Š ÷Ĭh³0Në)0‡ìZÑ„-Ǽá{.B"DH,õ¹sUOô)±~•h§’X޼‚ÓT– ÑòŠLW‘wjfçmù^R­ÖMÔÂpËSŠu§@A¸¥æµÜ®šÇÇÚâIæ«üJ,¢í+zZÀ>h/Ó ûAšn¸ßßÕtÅ<à°Œ¸mkòÑy<ɷާ˜w‹a˜ùùù¿¨~•X·œF¯àD­çâg‰ZÇž~‹Ÿò9§{Ö-Ö¢N_1ó3"E¯B‘)¹ã~m]ÇÒ ×U¿â2ôö²)FCª«~áfú»Ì`ë”™Fd'ä+J¸”"óY©DKÑéô—*t—ß-6Ì …/¿à²«2¸ i![Zñtv­·î}’Ho X‚À#AÅ¡.Að&òîp®ÍºÊ§\’Ȳ*K¤…%” B$®·FÝÇŠœÜ[³ˆæP‰ øÿ—hȽãØX×&6Äð!Sg^žÉo¤¨º6OÕU¤Ý?~S…—…÷å÷rŸŸ6äö×n³rÉC@3Ž~³r¬¤n%fà‰*·Û«‰_¿/PˈeúwaeØ{tãMÝ‹Xkw*ÈÀê¹x»+#kweäì®<Œn6à¨S‘xUçw3GÒ<¥a—~ÖYà* ¯,^ v‘ùa9–`gg§æå Ü5”6pŸÔPÖSCIuoçH §Ôb|Œ1©ë0иªBhƒ“ÛûÈùñë4jìûèkÊxäÇD+Ç-jPfå„'„W—¡Ì" O)„N´—¬c.‰(¾åaX^`Ÿ9jƒŽ=ÖÐ%íÌð&¯øÚáKMb;]kò€——²{ÂÅí•Åñµ,÷¥m&Yð—€W/3›ƒ¹š¶~_4§oMQ‹[qì/sŒyû݃³ ž[DÏ-œ'KÜæ¸¡Å¹Yn`1Dlž»¯g$‰KÑÁ²¿ÔÄÑGšLà¼YIæt$g2ª}Ÿ4r ”=ÒðNv/©û†¬ºW‰ÄçþÍ¥†Ê Wya*/,Dc„v±bÆ í±…ŽÚ”UÊ8Ò‚µömxt00¤Gc0ÃЙ±¢…Á¡]SXï…Gú,z3| úME”)-ßToO<Ϻ±h„p.ÆJä¬>¾Š+„¼Æ,’½8Wà 5ïAñ*Ax`¿Ioí2ñè@XPGÉØ ÜG²&ãa=#½-Æž€mIˆ—+ÿ?µˆ§þ7ôxÁ„oÍõ{t 8(Ã?˜áIî¯Ëaˆ )ýÞ_6SâeÊá÷‡‰±lw_¯"„ÇÆ'*3UÓº¯”¨Œú*TT}•(µ®ãO6_ߺ"ëû€U@°§Ù–<Ѭ¥FTY0H$F€îŸÜLZÄÓÜÓšI£ƒsœX ͤrRµÙ9'¢ŒccÝ›X’áúžŸ¨O¶Yt´iM°ÝŠôI¤/â#­ëxr Ýœn›n˜h•Þl›‡SL›mm&»ã<<Ö¹ §Þ‡Æn«:dàÆØfrWä$6Úü…ÖáØæÄ{â#0ÖjN¹öû7‘¼Nƒ#ýö;=<çÔszë6'·¸Ðœ>#ª@ŠÏ¬U‡<= ±Îù±è æÛñ†ïyÛÝDqH¯BÊœ˜•ñ‹D"8‘ĉ,¥H¯y•a,S"‹¡°¢B®„E|,Š'_æàtÛtë%šö(ÄZ/¡äð½=±†ÛóŽÏ‹¾tòú›´¨o'Ù©6ð7©ÔÛ5Ô·Û£ ÿôÿ´ßð¬Ã“¼NáI*Ns~>çUÞ}^‘+þ="ñcKðè'?Eðø'¿ÿ°P+Îëêœ_nmàÀÿ‘xб‰å”Ë×C}>gmÐÞ¹‹'™›ªï76=ßo:`J¾ß°™kh&&dTßK‰hûFÂLfÈh•ú±J3ì„÷ªÄ³8àŒ„í¸¾C¶íúLÀÞë;,(J™¯òxhÐ!”"3½Ÿh?ò†j©‡Žô0ØF½g¿ÕíéÐf2ë`V¯µ—KŒD 5Ú}"d*z£=fàÌ HÄЙŠÐÁ3+’~·–ô{´¤Ý™õz¶GQèZkíMwÿdå‘þÚ´£Í5ÖK´^bõ¸`Ù(Ùð\UÖ©{ÈëA¤äóR"šÅI$J¦@*gEâ«dçèËûŠ™z…o®2OEÖËŠN4T¯ÕTSŸÈõ‰l½>ݶz”á›h×s ‚ûA‚FÑÖ¿© &áñîm8Éyh÷¾ßxh¿ßwPÿšmYßÚ4+ò2ïèî—"ˆ‘¥¦?݆è¬8¯‰O1sÐFÏ —9y¼24Œ‡ ‘ètL¢ þoÔ®~ƒdè]Ï' 1a`AZ|«J ¹Õ×ÖAÛN+:,;þj; ë¾…nj¿Â䕉Gê—Œ ÚÈ~…H^_³FääÁB!žcP !t¢ËÓJ‰sx€^€è´a¡A ­¡D ê‡øéð¹b¾ÕýíiàDÔ€¥F<„Õ™Žê¹IúC}m\Ç’ ›‘@¹zh‰êB.zŸH4‚Y”«‡ž¡±”ý 2Wˆ§hË®Ø\ŠpÅzÈòƒ+¶rÏÔ#4Þp“’Ý¢-#É?Ô"º7•gSÙÑQ<*˜*y¨ÐqnêIXêu«Ô³äM|@P~-šÓJœ‹¡øW]c Ñ ZÛ` ãæ4òxsxÄ:â:Ìpö^ËT¨c¨§*~ôZ/ðÉ+`½Ð?$J n Û›¥uLÊxá"@ñoýßoE×~so‡á¼‘W¬‰ÿ´àÞÄ'÷vsµæ)'ÎàœrÒ ¶£O˜‰çØ“eâ9öD™x¦$ÃxÅÈÄÞàÛ+ã}ñ“Ð[úKã-íÇ%ï–î#Rvƒy·º]¼ëI`Œ]·ú]¬Oy=¼f£“È(§òš¨Èh«h;uÊ´Í›ŽâØ'eÜ $V Ö\ap—B¼FdœCý|²¬J„;7_çËÄB\sÐ×ô1D4ÇÇ¢N_‡4$PëB‘@FhHjR«fj‡^A«:Ke1ð0 ÄSŒÚVÀù¶¢É2jªQÏ´‘úiæ¡ÃO0 Íì§ÐÌÏþx‚yJÚ|Ö.Œ ¥H Y»šzÌ Ñ/’u! Œx±€/>ë BzZ• bÄ¿ !»Àø¬‡ìÿâó»»ó‹Ïd?渾}‘Öû›Ô+º·@¿”= DâÅ=ˆÖç2ï¹–ÈySK䔩%ùl©%p¢LƒãMOFwKE›•Y' ÀÿºP$‹J!ˆ 8‰ñ ê‰dVXÄbwC‚÷(Dúw˜©…ï Ћ)@ VKx>.EÄŠJ$‰Ë¡>®f2pFyhÔ3Ê ŸQKvF!Ö×Ã.•Žœ4‰Xû.-O>mœà¼Y*¨g±7ÄL4Nð<íÕ@Ρu¥XšiG ùŒšN¬U! Œzša=YëM<ˆé›θE|$€é䢞]æàôsjN±N<H=‰óHŠßM«u“Un4“`ô¸u×]—CÑôi´np²C™çmüâ'›I—s£k á®ÇïŒFŠPÕ§ì ÂÆ‹®c,U((Z%ãEwpòªkkS* T>12ÜD b©@Ž(ç©Pqõ%x¹é¹u|¸w¶èôÂ|¯Ü¸0¾ˆ0]gak6nž´åÃa;_úÜìz¹j•ÞPòÄl›Iýv’ô®.¯B@¯@ìüšZÝrŸ#h…Ë}˜ýU.½DfÙ â$üH ³øeêýãðÀ)µˆ§¸§žNáëU­{§^ÌÁkU­;׳òO‚ödòKPz 2Ý<Ý3Íjà–|ëŽwå[7²1ŸÏ¿ÏGñ= Œók~öy;V´ÖË$2Ω‰$Z¥7<ñÛÄÆ€™ÏC¾k/¢£Œ›Ù@´;6}*–'8Þ4½¨©v©NI&©ý óàx»¤~ú͘~&Þ~݃·¤]÷¼'íºù°Mi=¤•6jâB5e zºŒž+#&ÊHY2RŠ,>?&ÇÀÌ’ƒrbPBŒž £¦Â¨y0RŒ–£¥¿¹/z⋞õ"¦¼ÌƒX“Ãa[?k©+r“uÄL%Måè =;¦æÀ¼’”ãÈÈq¤ãà\–ˆÃ²p@ Ê¿AÉ7zæ I»!97r Ͷ¡©6(ÏFL²3l”ô–[Ãk@V–R£åÓÉ4b&˜F£äР”=£§ÎÜivT¡Îr[•÷ïNW+S`˜wŠm¤Ô‘â&—3Ñ+Ñ&ÅáUBÊÖ'í~HN‘K›œdC3lÑéµ»|Ë»ô:ùùXW§ ç.`òó(xÛ¶ ˜ü¬ƒ‰žÛü8»ÓëzNðmÂiÎOG²ë!4ÞñéHs;úù'+Bñ$<çÏÄv.­JlÀ96¶œo^ŒŠã< Ncï1§¶÷¨ÂÒÝ>.ˆòàùž·ÝøëAœÏy‘4ÒAã¯~ ï:hòµJ¬û7v[ë ‰Q i{ìáÀ$0D¬ÿ&'×Á44Ês“ÓJ;h¥¨¥Ó …¢–.÷׉Z8ì"–©'<Æq¿,¥lƒ‡Z5M÷iU§ÃÒ¬ÊÙ¯cý¡@*í‘È=d<Ös._É>‹r¬bi…¬JôJ´é0Ó‹åQËtãÖ“JÕ–j—ê4Öä»:Á+QÄ.Q°t½%…á„¢–#àâ@â ‰‰Y0lA³^ØÂzðra+ž©v©N#Mš¡ÄrÇÆ˜5SH)¥jJôJ´Iq<»Ûï4x†·ßqØ,o¿ó¦¤š"£ý6%ɪìê6|¥;¿iF´}§A:Ÿs®ÒìÐ}4ÂÐÇ':>ÞüþÂÁÇû {lî,¼ðö[}$ç#*ÆŠŠ-ºR¤³Ëg¡1FUhÈó…Ûþ~D¼Ò<á1®ûÛåú¢ßˆé÷`âí×. I+àih”Y³Œ$¡`CÖô¥yŒ´×dm™Kiv磕©_!ÆöCTÂ#{Èx¤g;˜—Xâ‹àÏv@0¥œ‡-¯Ø¥:46ïfá1lÆÍÂbÀ\›…C™^3 W‹ƒ(²€Áš#OOuç#ä¡‘XÄhlòH“» A˜™¨× ô/•˜û²5Ó!Cõ:ÔQT!‹½oMD¨8Vaq¹fªB¥q* Ž I¢îâÈœê.ŽÜM±nãœòV}°n?@ ¹iР*‰âT©$„À ÿ¿J&"t޼F‚÷ËÚ¦ Þ1k›'lϬ¢[!Pš‡™DI@ïAÓhv8Þƒ¦Óì¼ïO«Ùf9£×û½ÞÏÐõ~½€þ¯Ðÿõù¸C28p‡aw à6EЋì6EÐ{ì6Åþkì…¥£Luè¡mÖy*P¦J’SÂÐÌ-”j$B2c¾–¶~‡QFd­€´èiÖ¢gW T²ÌÑ׬‘•AK`pÛk$A§ÀZ_ OG†g#úd”U‰S”8E‰Q„-à·Ã¶œßIÀâ~;,²¨Ñ¦ðD„ÌbD–./3Ýç‰ÁLU¨4NÁ o³Í4öfdÎ6Å=¹îè‰u‡Nª{!*”à!AfPE•¢UŠ2T)„¶dãEØŽ; Ë9±tâ"y€FJ •VŠD;â”Y´#uø‡ÑøäшÀ1çHþ1¡*˜PLPHƒ ¦,úÚ¨)ÎL‡LÔë@P·ô5COµ‰Lj0°³>&r‚ÂÇFËQLSuA^Ú„›ªP©œ Š#`$ tÇ&8š¢PGMaH#Ž&8¤Ñ,Òh– Füh–)L€þi£Yf ´Ñ,3Âh– Ë­‹3Zg úçyª,„†§ ­ï~BD뻟°úîgä¾û ¹ï~ÆC뻟@ù9K?Rø0סB :y@‰< aD0ÅéІi@£ƒ`@7ëèfàP»Y§PÄŽ¼)±#oŠCéÈ›²Ð:ò¦(´Ž¼) ¡#oÒ¢ÏÎ}f¶Ð³²ÍʺS-e¼Èd¡D&2J‰VBÐäg‘¦ ÔXƒŠc40Z¾FBËøÏP9ÿ)K ?]h]®SŽ{¾Ðº\§¤.×)E|—댢l꿪f™ щÊ&1B0Wyi9¨2“’ˆˆÝÊSb·ò”†Ò­dû'¿ùN70uç‡úž‹‚ˆàW‰Ñ*ÉC…Œsk‚&ˆo LHVŒpϳ·ƒº²B6}ÜàXÊ`´Lbe0"e€Ìß³6h;Ž=ˆ©ÆéDC.âîÁ\½ÝcÙhS) È)¡“zC<£æwÕHˆ £èçÆÀ¡èûr(24Ýk ‘‹ º ‡CR‡²÷æ¿ÛR$D´1Ü[z¬? e $‘>V¶D†·õöÔÏJOBˆ3 U¯AÒÌ~ 5½Ü[h³¦–yÐâ° ËC…Gf’Ì:&,™ÑkJ~l¯²4Š'aèxÌ|²ËÍA²ÏÍF³»ÓÍ }¢WDAœÈö°a{Èð<\Ñ]Ȩ.òh.†QP £ŸÐQOèh't”4º‰iTÓh&ŽQLh»Ü”%yX_"ŠdHh{€vО¢¶£ØFŒ±ã!ÖÜšF5{ÀÇĪJ‘QäQbäÑa´QamvºŠzIòKDz×ôW$ì¥{™^"ð—ü¥|Y ¾/ø%È”·†aægÐRt^†¥@$›/º¿ôœÏ?qL'u,'i ':v³ Õd£É46“cL&8ƒ‰Œ½Ç\‚c-‘1–À0D`ø!uØ!ÛpC¶a†<à ­ò8€e86‰ „$€”èn’üX]†ÇÙ6á´G*}È&}¨&qˆ¦ “i›76«´ä·„bA!z«ÊáB¹[zΖc˜,ÇðXxX,u8,u,iø+4ìî8ÌõþQ»/oëÏÚ/›lëÏÚ/!j?ü¤u©8N†¦!Ž\D¸%³TMŒ£Q@˜!³ˆM Ÿ°)0;aS]n¦´ŒÌämö&Š¢_{$–72È ‹ì‡DÇZÍÕ»V«(3I±»ˆŽ²üˆŽ¶ÝªO“£ÌšÀPŸY„ÅyLˆ»!&Ú˜¤8“kÁ…V|>PÊÍâ¯ø_zãCI¢EIô^ŒâBté ²).Ÿyõ*.1Ï’iD3l©85ñ7ïeT5yÓ6"]"¾À`“ñ—Éäp’lT’Ê(«‘þ"M…:©/—¼ÓÈÌ$"ȵTËæL«GdˆEI¨Gvÿ6Òájìþm”ŸÏ±~>Çúù꧉;µš¸óª‰8©tÂ'O꽬‹¹…yÂBœÙ°Ä„QJ¢EIô|ÂŽ¹ 4²0þçá'(ñp”‚xxÙÏ<<œÜC²Q'÷üÓÃÉ}7ã4r¢¾¢“ ˨ _ñés ´Èõw°1÷ù`K½~˜™è„‡',ÜZ\êÃ*2ÿ±ŒŠð“ 1ŠM‡,‚‚ÍE%FìaÈÙ‘ðp¿´<ÉôФ¶ÐŽD*&Q±cz©(çÁ&u`|1vyImP.CýªPÊ¥dI*ÕY`œÓèR J,Ì,%fîÖ ey«òîãp¹å§…÷ŸŸòꔽÏåþ3±‘_ìß_þÔÿýå/úïž#•YÖ-¯ÃþP×úíŠêðãášÍÚ1ÆOzA—4oD—½äÕËG}k_ôÂGÅ‹ýÀèèæÜ;ÝÊù‹üÓC^h~Hsæ™@ýe®Xä²#)š@ýe®¨¦$)š@ýe¦xkí*Fnr¯œŠ·Ù9SoÆê…I4MVò4ë§ËøŽâÄ’AìQï£ÿ~ùÅý÷Ž•aßB^SÉCö×kö2ùЋž?¶U¹7ÕIt¥»p*‰Qùò÷_~üãß~8üéÿûúõÇüýðÓ—_ÿ::j›ÚZœJÑÌÉí_ûú>…>zð^†m– R㿾üìþ::ìFù6ÇûçœëMU­»GyhŒõ˳…99ÞÛ5ï²åUu¼‡Æøxÿüë¿þð·ùu8ÞI}¤Í·%ž¹#›᧦Gõø7¯ò'³Ü”(äô ¡^ÝŒeú¿ÿçÿøÇÿû?ÿÇÿ÷ÿx(ÅouÛ¯ˆËæ&1²ý¸ÛÞ¦¦Nëô¦WCË¢òœÄÓO÷w”?ÿú»‡“¯5­>5=„û÷6ûzS‚ÅÇËùš^þ[&Ímâ¡^·&ëUÔ-ñ|2 ‰UèϦÿÇÏÒçÔßþñóp¤‹(Äûlû]û·Oê›J»¿Øoÿ©>5{ÆÚŒZëÏûQŸþ¨1jƒ¬ãp¼åÅ WÍôÐFctXýûæ!Í6øQ­ÌäÀæOÇÞnæ„ØhŒŽ:iü,ÙÜŽêWô¨½ÌèÀîOÇV·´üüÚ©ŒŽlÿ2?°^#‰t,¨¿ø'õí艋7±?{cW  ÆÅ›ÃØŸý‡Q/VÀAt´=„úiå9B¡£Ýò5úõëŽaÜa¼×¬9ùj5‡1Ñæ¾+Ô@¿WÞSËÅÛó×üì=ŒÝБ~o¯/óóÊa–ï£QGÑáî ã—N³¤¿¾r.êýôDiµ˜•ü ­ßÔ³éåÇ—KÖ½têͦnóK®t/ãC¾¼]³J}¨{/¯ÿmðUf8‰NŽê=éuêë”Ý]ËQý”õh€ZuêoSŸ½bbûvÏüðë—?ùõË‹ùópüªFX}t¿ÿcÚ°Òÿÿ&q<Öþç/ƒ´™¥PæÅÔÜ6ӌʢu=`Ò˜nòF½èES‰T#žì§Rï6ÿñïy棻šfF—µM«;¼V1sÝg£w+R'CÝή «“Œu §°·ÞÞA Mp¯¹ÃÜn²ËÝÇ©­î7­ÙODR½ú¥Ý­µµÝ^²FEçú£¹[Šþûãˆ×¬(Ù{–ÞL&­ØŒJ2RIfè>HÚÄDåUñ“ÓA*<1áýõË/=|ùù/¿LÐw i} ¾“p’~ÐüÓ?þþëÏÿøÛ4 1?°zon™žh©5‡?ÿøóÄÄÚ)uø‘ÈøÀ?üŸ?üé?ý¢~R]omž!•Ú+Œöó¿þüãªítghÀ1Ì禇°¡?ë§™è†ËêWý×Aþ.Úܬñ­n©ÞP*Íî¸}ÔìvÛÿ9‰ýw÷·—ÇßþíåŸWð"¯õM½‰þ¨Þ:õäì£ÿÛÈœ^P=m3±Õ¸6ŸšÑK¨»@ûm&zÊÒö£éª}¤û>ÓÍN9EÔ„é/s¹Šj³tßýºaš?ëbä'0Õ›¬Í^³Â1lœù:SÜNܯ .Óöá9=uvº‰“3e§Ð_^îwu„CÖ¶µ‰R¯Ñ·‰Ä†'6üËßÿ¯Ã?ÿüŸ9ü»jçýÍÕ(Wõ0ªDßêöäPtPò_ÿ«~`5¹í€2bª ªµ†?šO _~úqž7lšâ£×(ÒN\úÂÔ‘Iù«¸¨w.u‹È;¡o!gÕÍ«´¸2ùo¶«óï'Ó.7¡/.TYè‚6#tµ÷I§¾TûÓ4®7ÕÍ6l:’ð\t"±JºO{m™ô¦ó¯Þ·Bè'Êq2z%Ãí’âœE½o¹ÐÄ…þS¿AåòEÝÿÜ_ºúåx+^õËžy›zQ!æ,“/ç¶.§O ÷_ÙdiÀëUÓÖ—V”‡sQ÷û÷ÉÁ—QJŒÒ÷Û‹þmzõèÐT pñðG™Ldÿ<þå˜uo™*%W‹uãéRfeÈ‹ófè̸?ŽÎõ—¶#©Ï—Ç4+T)ÇihÖu£Gâ}.‚{·z¡Q7ºäáùÖý‡™Ä¹#¨¿%-+^ÚþÚëíp9=Ôç¢öO‰ÖnÓß_þz;þNÜE^ˆ~”€º‰Ê€õ);Þ.—¡yÙK$ƒÄ—þO/æ£/ýüN¼Éƒ2vÕ™ŒÔÓC%Ó¬Rsm)?™oåõ&“Yø—ɯýj™Šyå‡i»È/î'ݘyËõ«Ï´¹ü¦¨o'õ,r•½‹²!s*“ô2ýñþ©þ¿|QO·ÿ®Z7ù¿¾üIü{`¬˜t×ÊÉ`ÁäºáÕ™¬û_Íì&Õžî¦u»OµýòÏ_^~Ô¿¿üQÿ®K÷Ÿ£ÒµÇÒï|ñG1Q?ê¯zÕ÷¾dìõzp÷_{ ÷ߢõCHWƒº˜Tœù›ªýlt«•Œµþ2|Ì´J†‹¬ÿÒ禢u7ŒQñUeïºuœÍÓ1¤:4±¡W?¾ü¢ü·—Þ›B=øûH1Gïú}œIðO£_¬ômžO‘ÔA«—ÖO7TWÚR½v·fd”^¼7¾„úøÄÅÿâ~ù‹ùÝC76zÍâ1t|¢qñª‘ªc'w ócÿ®«øw[jEŸ|{{ߺ-ÙÛ‘žÄdùª:S¹6ÂktöµGé’^àîú@eÖ^²ÓËO?K=Ò«ÑÑÃc~7#óíá¿÷'þÇ—?ÿÇ—ŸÌ'úÊ!¡˜|›¨À/#Ý—o¿ùÃïµxžêtRš5Ýúsiú±A>O“!´?Ãú?üBYÏlØÿ¶Rÿåå?UË«UÏÿÊܯš6¿çE¦na™® sVo!&b¬KoÊüá÷ߪ6€•:ˆB·¥P?jƒ‘¯V$1"‰1ƒ_þøÃŸþñ?¾üíozpÏõãþòÃÏý!³wœàóƒà\ø%ã¿ÿî!Xfݵ>ÁŠÿÛC±R-êº} :\‘ö!´5®_?û?=Z^½¾žm‘ûºòíHßìÙ.ÁŸÌÏ/Ó‚SIBvwªoÜùðÓßþó/?ºs“ÃÈHײ/k¼¿Þg0Roß?êí-¯N‹§ízëCFõöOû'%z÷¼nõŒ‰~ß—öH$#‰?¹AŠêî¡^fukKç-†¾<š^ ß=z±—"££n#oâ#¤moÓ)ŽFÿœ¸Ð??æ¡Ó‹¹ñIö&÷t¸ª-­À#‰døkÿƒMkÙcÛ(wÌVÝ‚oéX.ÔR™¼ vmp{¼ ÚGjþž·ŒÝþýñ2©Lv²kÕ3ô(O;gœú„SêƒôÇþ7dxùã/þݱU'µëáŒÉÈØ8»¾Û£ß[fº7ÛÜêó‹ ¡¾™„›KYùßúC›×(%Þ¼“˜Ø©…ÿŸ·w[ŽɲDßó+ðp$3‘Y-šuÏÈÆÎ1Ф”ì–¨h†RU}^ÂDE€‚#H1ŸêÎ˳™Ÿ«/ß~Ü¿mXf•¥ |ïíkùýºF ±ö‘±™b_dPµŽ/¬võúŠ‹¢7à€2ÔÞÔ.ßÓIÁŽM PdÇ7ÇÄ!NœÓdw¦+ÒüMò=µÞñ•O-”EdÈvw\ ³_¿° Ûê܆4EõóÌtÚpZªK¿:MhŸ½3Í^?l×ßÙ qQÑU!VÏ”*°Ö¦^þ@ÀeRÕN@ùøK–f²ûCv°LUô„ÉÕåÕo²gÕŒ*àgØWÀkQ)àõXíc&fˆa2Ñì5nñsaAC¿º¿ùtû=&¸äSŸº9QIZ\ßo¿Þ|ûý»A%íáá¯~´C§%̨¥ø8;ñCY’ÊA뺥 YŽÎz«r¥ÉŠ‘‹I˜ÂL¯t#˜F Ô!%Å…¡¼”¼¼h†I„QHa·OdÈ+¾d³Kàºa1ÿUp…Læ"d!ÿv&°õµ›ŠF’'ßÖ4>ž|ëìÙ<óm¨mhaSŠ_ÀÎͨÚ¿œ1;gÒ?åðT¬A’ I[GÑ.ŠþöœªÃtz áa#¡º´)€5»ŒŽeèœ}ÃΣÍC SgÌÔ™°\ÖXu|Þt5z­a°@;ùç3já väošôɾMl¹ŒÖ,šít¬”ÇU$P?cêgÜÖ&Ì–gòß4s›][ìCÚ¦^kƒZ—мO‰ñŒÛ¹bœ¿ÎK’\&×ìë÷œtzœAÇá@ä q½$?Ò²ØñÔ‡Í5:1QÒ†»b¿gý¢ì©«ûÁÊg¾#,þøezy΢¦^­Kôoc#¤¶F.ƒ'fà£ft-6è']Ÿ~øez$Õ¦®XMôoš}©Þ`GŸV&“Ïš5™Õ6c2\·%¿ê¦äª®É ™€ÛÉI ›þp #Ñ>˜p“É´ÑЂ+²¢8—Å™T^I#ù±€“('vºp—t°L®.5ÿ"œ’tuª·sñ‡ÖÑý(òg6vnÎûÞT‹ ­C?Ä-öôKb•ؽ„¬JJÛôË™Ð]Á%ŒŒ÷s|CgKþ;šØMÞ²-©Éñ/÷¬‰G#­œ©V†©S“Ó,cÛ§ŠM%E‹S%šÏp^†ïë3c‰4F’77Wïß%5•tt ðîü$W\’FKÓ¼Þ³ãÙ41m㆑˜ŒvWõþLêWݯ Ÿ¢Å芇ü2º‡-ÀŠ™b‚Ru w‘˜ ÕêfÅÌaÓŠ¡Ïy•·¼W¾B¥JÕ»„ ±5Jçèå\bg”›RíªñÕû=ì”Z®ªmüÓæ¤´ôC|ÂÔpƒðZüƒÈ!!„4D¡â+©tÀÌN±GÞgRm±—Þi}à7†Ž´‡+Ø|KYqàùDÕâ—ãx}ÿ53o;WjÕѯޑ؅ýî7s¥Ý¾#¢í±¬ßø“ûÿJ~'“Uš‘¹9úÿ®URÚŒ—¥Ö{Ë!Y„lná\$íbÅ©8ÞÅÆÑýÀ@ÕgçàÀ;tfY}¢Ó¥´ã‹g¹ê8Ç}˜ºs1ásØÄ6 'ÿøûÿ—|a$N.‰¤— çNðL ÀüÇôõ‘ T!ã‰}ìq&(ò±·CÜì#$Îç”N¶[vQ¾IÒ-,'‰PE ÕÎÙF9MCg‚Á-ó‰fÐ4‚WåàpªèÂ1$dÞRV2Ø!ÔYø¶9TyúyÇÖ÷ÓÇœ•M°è.Žyö~cžfê™P Æ€E•uRŸÚ,w¡¡m ¦cDC%ø—]JeÃu?˜œËÐ6€7²ýR` 0›¾äHš!&§ã‘Èÿ€¶‘¶“ÿøûÿ’b„Ø?þþ¿aPØÀåç‹ ¹À•Yrá*ªä‚á£s8¤VoÿšÃ®­Íë gq#yÖæ®½ÖtÌh˜„Ö2óOÐ#Õ0µåí œpb_¿2Ü­jûT€—ÖfÓÂ@‘`Q›Õ-F¨ñ·«D„È ôÕrÚ×$§ŒŽ˜«xÐ>ø²ƒ‘¬z3rì[.¾ýXžr1º^¯¿ûö |¢%ZÙý?Áñ!*'-¬ G‡I‘‚C{BÇ$ˆ ×AØ•}˜úŽâÛ¶K‹ÊÔãòR¡…MØÜ=K,  ü¿nF „pçz$:ûÆ–“Ú²&ä€Ëzƒ–5zÿð :Ý˯·^Œhxnd“L¤“¦nŽ'ìDsò†bz í•wAËËí†þ…NÓ1ä FòŽ6©;ø¡ %¬ÐñÓÈ7_>ž;qVQål¬fF[”3—³‘–5ú°rvsw› OЈÞÇ× U-xÐ×ñÕ<Ú«¼À\,…Žæf™’®È’;qèðV‚NÞPoa´œVý¨ÐÅ€`ŽÉù©¢‘‘"æ‡Ïÿ‰žDXèw]ÅÑnÏ\n0ÛYŒFi‘LÙÙkðÇêjÒ ntÒmtóq ná¬ÌÐÁ<oÒ¢uaê¡D”;£®©.©ä<ᇜ’7ý´Iоûoå‡5Ùz¿¡Ç‘°¢VÒö]kSEÅ~R m—0ç-u£Vî€>ˆTiCê.&¹ºÆäÖ%ƒðàë»IÕ&¬Ö?Õå û…VHÛßÇG »Ú¿Ó)Dÿ™_|¥Ùþ³ lÍŸ£wíØƒ’ØÔiÁJ–mŠÂ嘤歜Ø84.7$µ‰‚^T8¾BC£)SkÆjF˜½>ãFZÖè1•#¤N<éÏX„uc‡ä H zGó±;µ•¬ÁÅŽŸ[Éa%!ÿD®Ø›l³{ȱ÷•ÓfJ& ȈÒ`·Ñ_J@:é7°ó ösË,Jál¾RF’ëß®Vrgü?K íjE`Ç –z˜€$+>ðñP<å‡ÑD eñù!íþñ÷ÿIØ–zÙ—,%ž*ïb ÛXÕʹ W¨FšN(aM MÔвF£ûÁò6Gx/ç{OEÛÒ’]d~„ØqFrÚÎÈjƒ¶µ*ˆ*.ϧÊ>LÁ9Ÿp…Ð ÌÇ2¯´#tÈ1q¤ã’¾u8¨Ëg«Qr±Ùž²GL"ŒU&ü{•úú"á%ûwÉuq(º´ü–åiõ.¹Ê›‡wÉŸÓ²=цôSú˜S¶TßÕ-µðùþöÚÄ"$Y”$¹RvüÅñg±¾u—ÒJ“Ž;Æþ7v;~/É“^n5íã¹:—B,Ý.wtÂæÉ6j)é\ŽÎähÏ 9|ÞÎÖi”[TÃY΢:;Òkû’(‡>Ÿ`.(PÂ(<`ÃaÃÆx¬Á¸ÃAL6aùÇßÿ–BûG~ð…ï÷üî)ÿÔkÓ1—鳈vèbf@»}«¿„ypÂÀò@Ò†$ଉ–ãÇ4$•Ìþ¢Q™½EÓlJ÷0«º\}Oz‰ÂÛà¨(°ÁMѪâ åÓgHÄSyÉÀ¸í"à¶lÛõPá2Xæ?:7姨R‡¶'O«fñ|„Óì÷È€vTwçÄ8òm]Õôo¸MðK¸'¤`¸SÿIS¤TFl4§;~úŠ»òdG±ÔëÖâ~¿BÊw›Óä¿.¿~Iäõ×_Úÿ5›”ÀÛ†e‘a+ EÝLi,,hÈéÕtÁ1 5öÝqš±¶ Q/û înv0"ó­î)šAŽÄÛ ª÷¯|ƒîWÙáð‹ â¢ÿ©¥‚ ŽØAk¨?+ÚZ6 E¦¨®e%@°“W¼"÷.Å`-¯KÛCîÉsùh˜ûPˆKɆ]l’ÇZ¨myOq:£t>ìäˆ*?ŸKÇUèöѨl….EþßaÌöïEõ×ô= Kûà„Ý}‡ bà¢gÇQåòó“‡Yó‚.Í‹§p4/b¶Nð¾¢û7ýsdn\­õÉ®bÁÕj+M ü}ÎMð³K·I^uÞÁRFžXkƒ,¸š– —á'ót—Àö—t©ù}ý†ÆWôŸÑÁôid»|Ë®:áP×2C2£Å˜4€D ‘}ÐN<°ÓÁëÄ«üª-˜G9ÚªóSü»÷ÌZ)ýÂ…-&qô‡OjùÞȻݙ°ÓTt" §,Ÿ¤{FÂÇšç°{î~ÛwXÔ£g̤dù»wüŸµàî´>uÍÉÝ튬CÖEÅ‚Œ ˆ:» &ˆ¿òó°É4ëÅlDᤆ·RïðµÅWSD-‘sH9ä3nXa ñUomÝ›ÇÃð¤ vèfÖ¶`×ekú­‡«•%1['M ƒ&ÚA6lDçFºO‹‰SQ1£†ñü`Å3;‘ŽVŸ#m†| ú>ï²,$EÇ‚ $8(öKY!㈪Þyr5¢—övÑzÿÌþÏ:Þ‹ˆ™wJÓcãžFPªX-N â©t(ëmDJ)jv„ 4œCàÙ¿ؤ¬Âz ¢'1ŠŠ š˜¾Üó­êÁ“‡Ø¨{oVYK;Úšx ¶¤ÛìaÞˆNб¦ x/§t‚ ûÌ3ž‡±ºÂ½½¸b¥9z¼£)YPRÓhZØ]zN 6MÙ‹ÓùìT—émTE­ZTͨUAÃÙ´é947b~¸nñsFƒª±tÏù¡9eÂÈJ‡¨{>ÝæÔb;]ˆÉðÑ…¸.LÔ–þ·ïßWïØÿ¯ßÁÜçÓ÷Ъ˜ëwäàãxP²†1[NžÁ³_ÞÊí¢SUüL„\´.:÷Šà¡@,<è í:oÊ®Àí»gXª~CSŽ%ê[žª Ç<ÊÐÂìÉzv v‹] ©YÐ !õ(‘œ^Œ5üë‡A§}:Œ†})ŽÏ ˆí¾ñØ»4½·Ã`&]3À‘¤XØwí …å |EÞ ¤ŸCܾeðveà.¥xµÈeSTU¾Cwh&]^.iêÞ`NÂñ§'E_Ǧ÷í©ñ®>€ø¦@䑚8ó{¡ å7'(þ íFnƒ#±™µÍG²¼4óqé8±wŽä=d…SÑtbdœjøÄ;´pɃa ÁÉÊLPUÕ‰”—K *{²Ç;2ï9aáiZd\F´Vü7O4hcqèb²zªêÄ9d6l^ª{—"Ûƒ€FåµA× uÈíkî$ˆÝQ*úDÆ%.ë}â +ªnÄ}¿Åwð×ËÀ°å]²S¸ˆ‹©7Û}ŒÉ$¬=Ÿvþ‘ùã€}XrDNøLº¶´R$ŤÜSÒd‚¼»+lH;N!Í—Aiçé!Pà{wMɹf$éðøÞíÝ-Ÿ¤¦dâ®áÜ‹›À…'Y óV x÷XOֲśމü°°B{Czòéž²ÊÂÆ#!K-EÜž¢«½®fÁ/„ø¤Þ{Ú4ÉoíÉ·HUÇüu«¯S}2Â'’¿’š8`.‡C±èZf4R†ú÷õ·»„Ë… aÖºëÈ_Áz?Hײ†Š5<ýpLì±Ë­É¿ÿB€Ó ó±¢³}Vˆ±ålªi†«È™ÎòúÀj;ÌÝUio½‡ i‹žbŒÔ̰¹e—0MDð>%¾©ˆF§™(Ú‘*§iÄ„‚¿»‡€á +°^”Ø*­êر‘¡e1–|çщthH¤ó \BGååK¿q —Tà]ÍB3tW89QŽÔ‡ÀéY0‚)G·4ñÜwéÙ™äç¢qÍ¡ªcF$N[³Eú˯ 4Nùî]RQ\ x¯#sF팣K‘å_Q±¡êRíÜ“ÚСWï)É=è:ÒÆ²ÙPõ,¹¿§.~ã7î+vg Y4%3:.¯‚ÖtFÊ×{Xa;"ˆAöÔš[á5׃ˆû†@CÒÔl˜¸µÎ;±âÉÒUŒ¯¼h`œDTõì™T‘ÿ%ºÈK[ò5Ú¢ùТ©:V”âЬ£€t~‰ŸJy (>]}[ßþ%ávßüºejo=0`Ä‹L#EÇGŽå’ÿ‚½HÊS‹ÎAEÇ‚$xƒ_D5pgÉãBÖär‚œWÂb|ËÊŠ?ÍÖÔãhê 6Ù ** `¾xÀM%LÈ éò£¸hîwBŽmz °ÏËÓ–tE…íwïÈæ´•ˉØîv¢iÕË1tt$ï«är5³§Ìƒo&QÛâ­l­Ø…˜rz”¹6W¨»Û½Š Þ®6åxrýÍ…•Pìµ]Ë‚ˆËà»ûòTTèc¿#5+&&¤ùz!?zdî%ʧ‰Ø+©™¡I!Íq&|¬ÙòÓpiE¾•ê« [¦vèKŠ?òí§«%~ÖªkÙ`KåÓpèû·¯_úSLú,6à S·g°{Tš’®¼r³¦ïçO¬ØÒ4õïÅŸh_”=Oز9Ö3ƒë¥x‚V°ËÃÒN~æUêÍàYým~øTzXPáóðu®SÅÞ2E–_]ËÆå©¿ÍÖ­ÙŸâ„Îò6ìFà©-°)Ýî4n q¦–_'WŸómPÿ×u‰ÕkØ•êÒnߌ²Üüýþ‹„Ì]»3tƒ<߯¡ßá  ®(åüOLg ðK›`ó+ßÍ ãI$½Y>Zí Ff›Ó/|tRT'ßý˜ç¢‚÷iÑsرž.H9w¤˜3Þ?ÕýW'Ì—4¦;×µÌAÆØ3ïbÑÝùËéˆÌÿAÃôtôxŽ Ì9 ˆ1Ú-¡QÙŠÜä–p8yù_¿õ{% :¸ïq@* ÝH«¼ƒ5ªºb˜ã¼e¹tõÄé%Ïɾª¤°ÐÓ»„€#weqÆéÅ;ÓÂo: ¢À¼cÅ1PTÝz÷Z«yÓ`ݯÜÔÕðA|ÜPc”à%ù<Š‘ªé"Ää†ë‡,?ÄIXŠzr[ºº¼{^iµ¾L‘®vØ—jN`¤hï:é¡ÍZï¨GÆ'Ü)Âýó YíÒv×÷+´´áƒ»Ì÷Ÿ®<„ò zÅÀE‹š âSÚÔe€;/ó'6ÞhàÝá“o_i…˃û¡ëš´)ýŸKׯ@HöÙ!ÿé¯Ôr >mš²`›ãAâH\¿Ït'=1•Å·ÚíPµ%déôæ{Nsºii.æÏo•á¯tB’=E «â½i‹*mÒòÅb¢jcÁ…Û1ö:&QN&+X—»ËÕå—¯>ày·Ù¦T³E·zU+ð^gÁ.§éŸA5{'z꘿ÿÓû÷gú׳?ýË[9ibï§³ã¯ÜQËsX_ñò.Šà!ïØúšmÇgÜn@Ý”£…+÷iwGÿ&]‹±¶‹K/‘YÃ#tQ™T¾ŸÉÓ`ÀEU`û%}ÉÛ³÷Ã{‘¬/æ²¾À±¾˜ÇúB} 1ŽqQÑÉÄ!ެ¦ëäÉ%#(‚fBUÛüÀ—ÂEHÙr×ÌÍ`“ 'uM!&“¿\¯ÔlÖÇÚñéÍ>Œs,Sy¦f šõá~.Ü¥ë$Ë%cʶЌ"×Ä2kÂh §ßsØŸËc̽‘Ô0 c×ÿ7ôœàO–AÀ´Ãç›chüp¢È6´1êâƒ#U<¢¨quöÂ{ÍŽ`g"ÉÚ’w aó0ú)ïΓ´<’&l15.5TUg:ð[| ÀâPN»®-¶ãd¯zˆ «¢‹c¿Yg({Já ¶ÌÀšhϧ2­¢x*Š.ž ÁóǗ˻Ȝ{j÷q„Ú}ŸvCçþSæ²;ráϨîà¦3ŠrIL¥´Î:9~‚>Ñõ`Ö§è©s’õ§_>s]˜™â‰œÒŽt}é/§¶Ü1®–æ¿òóу/“»›ïWßî>%|im²¤|H¬m²hbƒ®•ÔN‘‚ûZþTTŒùTäªsl™3è;(Ié~1Pý¶À‚àP†£øÕmt”ú"Ùh•ˆ9¿$5{¡Vê‚WéZ:ªœÓ€™õm4FÒŒËo4ýáš|Þ›?óŽìà¯Ö²—Ôëýh.Â*ý÷þf­ÌÀÙƒ‰i5 Ê^Ò˜vc6)¹òg$4}txæQÙKËŠosìÙÃ÷|«‰œpw-ú½T¹\ÝzðwyYEd‡¦fCÎ…n A×åBØAýùkš…æËëYè9 í¯bˆËËÊÉïË«/ê½›s¬‡ªs7Xè$„Y„Þ¹¿ Îïöh+ïg1ÀpŽž…ƒRòÔ=Ô-8DÜt¨©h‚æ„U²^ÿ– ’Ö·yÜ÷ëJ[bÚ{Ò¡f|®Ð§o"0‘–Ã*~†WN«à“‚o’òæ‘þT–JÆñ¡Væp¤+†^œ‰á‹ §+íÊLf»3Ã-ò§]p©ªë˜  Á i:ë¦-ñ.oi3V«Q˾hógÇUZÇZ&t½ŒzT.m·EÇNlC³JäÅ8q(¥WqÆeæ o)²“ýPs>¸²4h'UÕwQWà°ÜåES1qÞ^˜üÍÀæ½õ¦,áQåDÕ0Abáò(XCKÄûEì5-ù0Ô.árM]ØXòèš4ü‘©† ç‰Ö€Ë-þ7o©†‰Þç»ßEHW[¦y":ÞÊ1_°™¿f]#hU’O¡‡èŠ#¿&?\{… Dm;s©GË½ÇÆAÖu]ϳr>ÌD€ ¸1(óàÕ&³– d/ײëÃÒw}ó¥¨N?æ†V‚(˜ªc†Å$x5z€7˜þ–(«E|LN{QÓï±hšd”Œ™ˆ£éa×õ‹CU·0é|çº(b.xàRt¢g=HžjHÙ{žI P é#¶²®7‹/õ©íý‘äo§‚&(súœ’')’u%’¢b¦j7,( <=wéCMl‘EC×1!cÖUwx œx³{ÜFDÏ܃NX¬ ë°ðÄ㌃þ» OQ=ämÁfŽß‚ž"BþÜ ¯Vm>ƒêƒ‚ÀÇÙÏô ñþU^½{¡ÓðCA:å)ÇíøÁs1¾gÛàI Æî^¼@µ/`|Ãü‹EP²Ù°œhhç©™wA‚û=ó3A¶k:POÕUŸ‹S½ŽHWTÖ§pôøƒßxµ¨¹0o½B»d}íà E‡¿5þ]E6ü|ø‰²Â ª¿jJ’ë»u"îÓPôÆ¡¯)K¹ÃCÂbÃÁe¬¡öX¹˜fó¯ì*ÙP®Üyö`bÃËuИrý–Ôù+>ŠØ †Ñ´‚¸ðš_VøøJ[`Ïr¾Ò%!si?h’Å &™.ÉÄMçú‘5RŠ»¹ëõUÀN ¥ò`gà©¶¸ú4¨â…Þøb(¾ÅÚçtàÕÅéšvüBN¾`ßÑ__;U…üS–’O\–¨mךÕt?‘p_5…‘/€w´·8±3&ÊB(ïF`9ßã@>ª{¶>©£^ô¹H5~Ü{vM;xûC{qïìiø+jsš~‹ Ÿ‘‚ÚðË’ÎO½ŒÛþP:±B€÷×âø& »§ õ—sä3aU;RÃsa2Me ƒûn8&–XŸSc–ûg4’vcµœÈ°žŽñ'?­@Q£9UÏùYÞÊ€ÙûË‹ç£Û®iG¥úê–ýίJŸÃnͲßÜ2Þ=D¡î w¦†}"\‹7ü°­EÍW´½ìÒûl¤Á”µLé|<ãn¹9/b”óY«¢µÉ ­„ïrÒ¡GuØ \˜9T]8¹ p6ßé.$™/?Y>úÇü…„€ÏwE$vEÓ äd¯ñ^÷¬ù;åVµ™u+Ì9ƒ½ôn ©AÁ nç¡ +9áôZbÂÏ ¼¶!J“ùo§œ¦:ïCÕªz¬ ejùX@ºp'‘6=ºPg‘“®È¦#¨Ùl2ìΕÔ‘NÖªvÀ‹9[ÇŽpZæPu÷;/“îZÂf±ü(‰€­kÚQ 9mbÅ’W †ú"ýƒB™µPãœCiѨq¯õºƒO÷Ì4žkø5Mbl‹ÃC WUvƒæ¢¦æ–y©¼‡P?b¤'!‡ªíb…´ØêôSf5Eh&æhƒUWѼ”Ðê×´õô¡•–Ž‘Ò_óšüÊ7éäUJxžÀΤΩԹ.åÀ€‹ÙŸ5–0GùIL<Ôס٤»¼Ï°ÙÓL+_ñÚt§&’.<‡²Þ¦%‡¦cŒŸK¸âEEhÉEà^¤Ma•ñ€¬ªr8ß"oˆ Bmqåài%8&Ez„Yc©É&¶°êNL$ù,Žè?Ñ¢ÌÜŒçô“hñ@}ðzP((Ø–e¢c„£8%qy¹dZÉÍ·µùžÜ(Ú “SßLa"­k>~^%"8Á˜ThÓŒzVè\jY|FBEctƒ ¸Vyqö§9{ÿßßÛø:°÷ùè ¢ƒ«!£Âtîâ“•…Ó…—QÚĤ¿B¿¥Õé…0¥ŒÃdÆ=NxØ.aªdLö‰¿ºþ¸:cO uÒ×£Lt,Xûk]¢õP@é··ˆˆÄÙéF€¹t¦¬!õ‡¥U°ùåêÖYƒÞᱫÑ ¯îŠê{1bê-¯WÑÂZÁ:ô€Ù…ÖwÌ(í®;4 •DBjK°÷·š1sפ”ç­p FÉ‘#Ãjzƒñ*åÕ4œëGêýÈ£’=+ÎC‰’x¦$”ªpÕü>rx‰ñ{åÕ4ƒ]ØÓUl¾\ÄçËEh¾\Lòå"6_Ò¬‰lT6CÖE9èË«ÕØx¬€*”ÃŒ<§ßaš|ŸcS/Ì%›KÉ ò5œ°ÅuUÌXÌtfªh¦:ˆñÌÏb˜,М¶‘ŒåF°F–œ¿nV +@uÜÊÀM\³E‚0÷l.%3fÅ!ÒÓšWMš}t)0+DðoëÕ'uu/KÁWnLJûé=n¯cEùô¾G"J&S¾ˆ€tá…t1@ºÀ@Âxpójὂ϶¸š¦!ñ\I(Yñ²'Ç/¾`r&ÈœCÇ pðçs ‡[e Ùµj¡Ž_«a[]½9ƒk·@¤!ݬF¤s]¸Å•gˆ•à‰^n98Dy ð*gS0C~äFâði…\+r®±@[Dîk#9q£“›¾©FÑ3RïT´ðFJ"b%Þh­dãVFBVET™ØI\ô$$~;ý¨ˆÅU&$v= ‰ßN?vž8lj9aàâvDhåÉõDõÂ;Çö̯E°5º˜ùnÀ\WqF•ÜaÓØ‘˜.nG„ÖX°SJÏtRÛ¢‹ž NGb.˜ùž{®ÇCq] ãºpÆua‹+n†2;SeBb'qÑ“ø­Ùй§@<Ônãš¿œˆý nþáš{@˜+‚‹†¸â±fjÜïóÓ S!ƒjÏcx|Æ`y ïù'ûÏ*$îÏ?ÏéF[\ßÀ^¸ç5R‹¼HüׇŠ[qðb0絺e'Xëí_óɬD3µù.¯º"…³XðvŸÔù² aÃÙ¢ÁhŒÝÍ2Ï¥¤kë—ÞÓÒw0’ FfD¼I9Þß²AdB*–G òΠEד1 ©\–0ÉN¤S˜ä Øp‘Ê‚ËDMÅD 0äâ§\© ú ­ ]Ðg«† ÛpË9¸t0J¸ „©(˜0²çÑQAÃ…°8¢sYS1¡ä §ø9ä2Öá¹ìQ×,n@¥¹ƒÛ½Té±È”7s›Á3.ùFZÆìq¡2{à„:¢;±(;9Du ž×Œ5P­·› œ“á:މš‰Å ÄÛ[þjpÿ½Þú–é©ò{ u«Ùr!¾Ë*C°Èvj¤dÅUˆöê üГŒ†®Ð;|>E>íþ^pÙ¤šý‹ò^ ìþ¾¢dƒ"ý¨i»ÅAÖɾ¨ òàY¦[dÅQ5LðX8.I™Š3-Ë"Ë+‚+ ºŽ*—è=WÀ]~›¤©Ý1ïR4EÁ„ ‚Ç=$ì¡åþذ©Ö=DìõPøO¬Ÿu%fU 7‚4 Û h‚¯Šá ‚ªébP·‡´*þÀ30(š¨b8ª¦kv×´5LQàun!ƒ,”\hÛ<ËiÁB¡ÕuLh…„(éüwJHÞa§àU‡­.ÀjqýЦUÇV€Ó¸iÏ’.dD¼B7R2!”"¸œ–Z$rÛÂÿcVCŒª.ø\PÜ”­àå$–Æü+eŸž xú%…›¾pl`ÇšfNH>±á*»$÷ß0±)±çâfÉ~ˆòŠ™ÖÈ{Í ï…gäù§m äS›Óÿ¾ñO›ö¸Iw í–(º]“,´%‘” t®êÛôzWì¡@11Ì?F ·Eháiw! |T„›†Žs²¢a[.3³Ëe1„¤Q¿Ï¾Ë?Ø•Oþhεô¿ß¿{Þka³të¢IÏ^»•È=œö#™ßº‰ŠBa”£ÿqÚæm•Ãâµàc83é2‚V“#û±Làa§´w ’È›ËÿX¿å¾­*LúH„+Ë2É`)ˆ©ª7´¡OiÁ=–>Ù&$û'$i‚l_¬¹ž M/r?§/s`l$€{¯¢UA¥µý,‚ñ;!yvj‹î…ï ÎÍæ»AÄíVÆí°’k!œ|fû˜ÈÚk‹ôRcnBšdk2`@6ýppg~I°X ¢=Ö*>£K%†N®0 óZ`1–qGµ»o´W“3R.$§®æîÕ„³½Ùè2@Ѩ>ª¼ƒtˆÍÈI,KŽæj¨Ÿ¦(Ž$KË|‰ c7¨›_˜¬!öŽØ£ÍøäÖ— †æ4Í©!H,†Sác’¢¤m/Õ]vs Êã¬SDøƒb¸ŒŰÑHކJ7bÎ ~È—qgç£ÍXɪž‡ŸDrª©Y]ŠX§iž)”cZxððÔ°?ŸŽs3ÍjÌOpªÊX~„7éÐ vÏÓEÛèôú+÷¶/Þ¶åa™ävpš™ K¥@ùXÞ®]ö0¿ç7˜ a:(iN÷RÊÞ%¾aµ Ì*ÛUyµc//Ï-ÆS~vcÅQßqu}—Èpd¿¡Z^†X'}õdÊ ÃF¾£™¹},KŽæêÉ\I6žf›÷Ë\‹ç³ÅvD2Œ-õ¹?ð ?_&)^)–HµH¨ôe{0#žóíC]?.^ v#Ò@µÒ€?ó³3_Ös kjˆO1™MŽ5ÙmZÌt˜ a:Už4è ’\ìGýØö\b9¦‘$§óë´Ká­Ôž!z‚¾£Õ¿~a¯ýÎÌN³%?É‘Þ(¯ûPdî)fá„§£\„ÔNê0^ƒë9–Ÿíprj0€!ûÔQóeºŸ‹&K!´5½I.>}§¡É—t‹ÎÆÞî"¤ð| µNaQá¤á´=ö'ÁË5‹Q á± G^^Þž‹ÍØ´í Ð]2¦q) è»è ¹ÙÔÅ¥ÅÅ`j7&+!‰±æ ÛBiò É17%œ-é‚È”˜ÑFðËòÅ^^¬tXŒbdlÂQ.®ø}ÿ[.j|K'Á,öîÞAã>£(,/W ,F1 161*7ʻб9¯F±4ëY„Ý9¯RŸ‘ñMM'ç/ËåùÔ†½¢=®ðß¿$+ÑÂø‚,c NsVP›‘‘ý½²Å²ÒdÃUÓe§¼½™¡· cŒÅtWÖžîŒ ~â;¨â™öå²Ùn“+Ž.{¼[ F±¾BrÌM w¹§Ãüâ!| /^< v#EµP<î„Ãä™ÅCÆú É17%ЇL|ñ¨H›gu»[àdšÍVù±fŸõ×wk¸þW‹ðgÑ4³ ñŠ¡¤ù#ÛåeÞñ—âø%:Æ‘Ë&ì¾4 ] Õ?êý©™ ª½’–qðŸeÌÖ| Hô†z&„ƒßŸ*ö%mfߘ°˜òÓ+ŽÑO"˜(Çejybœ 'Fád)ý6ÿT€ÁŒŸŽª4õ>¤m¾³õÏ\wŠSŸÏ Igš32ÈJ˜_dÊf+˜¤u¹i}û¹_cÁçÖÜU%ƒ%Cæ)„fäØB÷=&qd7Ǭp¡øì”±,Kz_Wl‘yý°£*Åá¡ËÊé˜oÃYí²çgmÔeño×·\&¹âBÈnpÇ‚dcyN³vʵ‹´¸M­¡å{Ü¿¿é'\ø2Y‚¤4— ŠÈ4kØçpÈ^?¯!Ê^°Ü¬ù\ÀØl8öºã/Í.E&C ©1ŠŸXIª÷‚ëmý=y8mœáY‚šÎ´LÍåÁ!,ÁF³„à$¢ö03¾Úå†E•(~#+AĤNߌ—ßNØó'ÂÒlø8äÖœ@âΨØé˜·s/ÍÛ­…2ÒtçÓ{Ì_žÒS9{ÕÌdÇOIÓ{,É_’ˆ,h½ÍÈ`y¨ù1àGY¤9úïRù22NI*Zs‡ Dæ˜^†Y)Æçw’|z:x&$ÏÚ|±:4µÎLѵæ—‰Ì4Áb,ãÚroÍBÃY•uºÛ¦%ÔÎÙ“>›-?·‰fŸu’È dŽiV¢ÃhÚIi¬0„²Çù™”=b3'S6òF<²G$ü™È1 çã=Påò¥+2ðz÷È<ÎOÑn6£™v??úR’K©’ô:s“béT˜•ÓÜžÍZø]Ûdvµ³˜òs+öY,ÂA²aTm.C)‚Í4¿Ä×4ËNÇÍš˜-…rêõl¼@€{.C‡i[Ðî„Î|öÅáÔ.rAÒg3„·ÅÂhÜõä®?ÂMÑA]b q-L~o5Óuž±™½²Êg“¹`ªš²%wû dQÛǰÑHŽjNN¸Åf¦tˆÓ.pnÓc2˜ðÄ€%c{—=÷øcœ¦¨–e>ƒ´)§{ÏEmÔ!N xÿ›?² f«¨Z2wÍ$ârUX_Š`7S NøÌ««¢«[:¸œïÅf+€ÞXÓ0žà"t6s@{K9¾¿•Ë$œ›õÇöeýŸ_æ !¦ñ,J:žï’ƒ0¾ØÐÁf,¤sØÀò3vРY_Š`7­Ò9ÅeÞ¢C—Á@¢Þa#=k0‰fIÆÑd§9;wp1,440› dé0žqƒÅò2Ä"8Mó,v0 ŽíU—·û–ý\öüÚ}ÞUý­ŒÌº‰õiÆ2œŽz&,à ÖM^‘‡b߉å§ùG¾Üýt-úSÖ÷ù.ù-í’oTa "x ¬©Iwhó¥Çfýéâ22j«V\tî°Ðãò 13 LwIÍ)Á}©!£Û"†»kð¨AâY”t<_5›MKE~Ž÷:ïÒ¢œ›K§Á,úªMhj¯yÃìLÿ]A²4{Èçç¾ÉRgMoìÂØ«ò÷ ×5ÕY‰d†xrÓúk£Aj¡iÓ †¬mZ`&þI!`ò”yxæ/œRñç·’VŠÓõAæ²—ÁÝ÷µÄ³8ùy¼M‹ƒîè 0ØÙÑBWK,ú­âRbdÃX®{™ø Ä³8ùy¼Ý%@ãŽ.Ë8Ž5Ù a;u ŠdãsÌRà‰-À KGp¼Œ8 ),ò„¯ÕX8-Ãc½=ãCÄÓ¼ºÝ¥¨E±šV0‚T]æ v¦Vk§º2߈lE¨H¢t ÈüÓ#XŒeAC©³CñZ°7´Z chëýŽJ€ÏÁez=“!,?Kì¼Nó=âOŒ„ð9=ÞßÃ'䘄Y™ …ÙÐþ±Ïø> Ôºt[.“üK|½¡«b„Xº–ô¡ƒgbˈÎ$ýÕú™ùd5æ'8UísKE ,t»KQ‹be?΢3ÄcëTÛ™Ÿs&K!5=%Ïäwt~õaƒ'bð­ÅÃ’§;å§|2ª% #¦ç¤•0‘r$%³=­Û­aHöºn¢ëËuÂå"ØvuSd‹0U-aX2½¥K(3JN[’µE3sôç·Š¦«Úpg®*žUÚ‡zΤed"€¡P0Б!øõ<Â}vËshkÆi­eŽiŜϲÌšw"ká£X³Î`¾š{êj¹ãV±ç¬¬tb1Y¹ÌqªÈsT–TÑg¦–8,…?%e<5ç\íùÎÃz´âêòy$¹¼Ú5u1¿u÷[ÅÒÖlŒòvœRvV>÷.ž ó`Zamô#‰ËËõ‹ƒQl¨&<@ÞòŸ“ÿóý¸ìE’÷g>ÖwÁ²£ÍyÍõšKŽQOž-öÐYäóf¾GÍFìb‰å?»¼ZâE‰³XÒº‘Qõ?äv#…gåóåò)13”"°³¤A/É~‘ <&±ü ¯Œ+vñ± ÉÒ2_àÎŽß*–¾f£OqƯA*âòŽ%®Å`woã—0Ivwg&õWjæc“Õ<%d™†r âõÒj¡dš#{"½ùñu½~;4¨s“I.œ½N±2YM.ÍVp¡º»Åàðjé´Lý“Rg¡fç<+ëzLV¶ÅUÔÓ±‹=ùL¬ïqØ»Xb‡´ËŸÓ—Åøéö°4…¶—m"cY7yÞÕaÙ’k0Šå¯š°y꿼â:3SbéD˜ÅßÞ!F“>nÓìñÔˆ$sóÝj-€ðT—¿W•wÙCò‘…%+~V{Ård{1‚qÜÔË u«_¦üñU§Lñ9ß.ðèîÔŠŸœ¢3ê_iH’¢_Ùöf“ÀáW«ÖŸ)nxX°ØI9ë\ÌÄH(P™6’ „úˆÕ.ÿ‰ÀÌä9<Ùù¥jˆ,À¾bòj¤y‘t’Ò]zÌÙƒZÙCž=nØ¢¸;¢‰ 5º«A2 ÒãáØñ| Í2¸n_¦/y»a•ÀS*¢ŒqðŠê9¨ž;UûŠÊƒ$;ÔŠÓ¦-І»Ý¬ õ×»/W·Ø$`gNJ‰­à4ÇüÙµ_¹)ýÚé°L DpWÚ2b¾$ׇšt³3{bÄÏtPé³>½f¶²(g’ÄÐÓrP#·,­®kÒ¦ˆ¢ÄU½t“ߨð%gÅ^Ue÷ñ¯ þà% FÍ“bvÉ3˜ñgŽªÔ—>þñ5Ê]{ª6ü Ã ¢#~šƒ #yªþ焟ȼ™< m¢üK•áü …¼VÑä·W©k]Jg—Ù‰?ÑA¥/¯ðiùÖ’ŽÄé¿K †|–l¤­z£aÀýSR` îhÖ†Àˆóâlá‚ê"Ù=1Æ{Pg6„¼v^³ØàelÊhïòLOKåó).ŸOÖ|>ýòù4?ŸOØ|>YòùôšùL¸àL²º•0¾BÇDYY7³Iïv:šÝøŸF˜ðÑ×ËÝóÇ’é9Ý‹Š»®©ÛwIW'yÅn1—5 ¢Ÿ‹î!)ºóä•…5 УBÛ²ªÊ­âÞûkÕð07êa õ¬ñ[Ž™ì~gå£Éˆ‡¥¦2<’-;ëWÊÇ™ƒÔXEšÈ|ó[ߌf¦©û˜‰=H¹ëÃŽÁŽv~º‡‚ðíŸç‚ŠlÁËW^A S!Ø—ôÏ=´U¶53*¼­Ùœè”­ˆßËé{‰siÆœþ‘°?–ËD¸WWÐÙ̩٥ñG7ŒV<Ìty«$·«u¿A—ðÀóävOþ—(ËgMÚ=üãïÿ›íH×ø$}*`£O8¤gÙßµlFßPXJj† µmÂ÷ß¡¼ð£×çá)yÒf! ¥”»7?óìDÙðIÿN DšŠ'ZÞi¡îÀ7 Ÿz„N9ä“V›?hmš×4ÛMyx'ŠAØ«5Ö:‚Eøã™n€šx/ɘilvô¿¶Éææ¼Ý˜7 ªãçÉÎhè }Åü×Q,”1)0*fþË3_`¯Ãn*0L{2^wDG°iáêh®ää!ßÍk¦¼}‰`Õnª³^䌋¼Z³fijdÚD§ŠÖ :ÓäµRƒ¶7í’¥eb•*ƒ¶¥¤€À?©œ0,Ë¥Idj8Jˆ–Ë¥ÂsQî˜ÀY¥ÂhÅÃ^×éK€üüjùÞÇ;—+Š¥–³ŽóÙ¿}:H‹PY‹÷ü+ ESÓ?Ó.QzⲪÈå×óág@¬Ï­-ýŸ´âTû¿Ҏµ$³³Ç¨ü4êi;JD(É;˜|<Á° ‰4„ 7TKñjH*ªâ@<ÞŸ‰{j^3^‚¥f Ó+ÚòQGdरdÔ‡ ÅP“ˆlF6‘úÔf‹ä’f ‘I\Ï–G<ÔšE¡í•ïYè>>Ë«ÐÉê_Ó¬€ÿ6išnàâó&Ëێβ€;¾¡DÂø9=·‰kï‚_^òÚJ8IÞPµp÷Š~}B'Š‚¶ ªÏ Ÿ¶‚7 6Û²¦½YWkQÃŒ©xTµÊ 3!óáOé¶-2ZÒº¼¥l?U.ótŸÈÝ!”OkH ¢Ú·é‡ßVÔÞú]Âÿ‚?>–¡iFQö¦åt"]ÞžkØ—–>3jº.›÷ä2Ë>¦$ÿÜ6øÄ%§í²…2Ä #1êj"RÁ×- ëÓ6$ó—JyãJ„\=Sœ¤]—fì ½Kþ(úMÕÑyV²dÞ\Þ¬—[‚Æe×q±U_Úú‰ðñ ‰æÌÛ«iá6È1–i_–P1¬^mïKØèøQ´Ý‰þäþÅzb÷„~X9Y 3ÙZVtuCËÑS^&—Û!J>¨Ù°úpÙ¸`nw›Ý|•é6/QˆMš&ðšœÊãú·«Uò¾R  òá˶ô`Et¡R¡|l‹ ’™üñZOCú·mª¼ÃÂÓ´,iÇeT°kö…ã¿=àhQ//êÞHÏPJ õHKM¨P_.’oTß“×ßkú— 3;½ºÉŠnø4Q3!„Ô4½º½¾ONtðçˆWÌH•6ä¡îb˜t̤¤–3|ur-‚H^~y'0?Üü aÓµi†¦¡*Yð3­fÈom.V}’7O|øØ^…A¤ EÈû*!Ê.ÈRT…^TEW¤%«ÆŒÂú$‡d”üb@Ç)´è°}™ÏL«Ai$MYÑÒ'&Ä Þ/tåb1QòÎ&ï%˜½Kžø”è]²eã¼Ý;ZÑOp0N—>]%BUŒJ(ÐüÓ%ªz<Š_å{Ú2ËßÃï}öÁ7³àišæUFçMM]—1ìMìi¡‹ù8Œro 4YÑPešø£L«;Fç‰ÊÎa3Öw“é¥M\~|¹¼ÃS‰Ì \¥½(•ìkÒp û§Š|”àëÊûûçø2 òV¢ìf5ñD-¸µÜs(5†V2š9*]Vè>– 9ùÉɯ9à(5‹FÝÖ£a'6f?ƒ+0 õfõy´(q³:øñÑ n‹êx2+Ø‚…ÃT^e5òÅ<8«ô†~ü@É­êÒdžָ¡ O ¶rš°ñ™*8²IäR?` m^²‰y("¦ðë<»­ò¶ ­>Š÷¡L‡æŒòa½ªìj%|ú7úBÂÀ5€ADkÒt ¯EJìý’ƒKÿò öláySÕ;\›5Õ3U¤ »wðùk~ܲ! —ýowyåno…a’=äwƒ}¬ì Ћ2ßÁ3×!IÆ6ïIryu›ôbãÓ†zô|8H)¶¸&Ê hĬˆ©©.F”ð½ÃúyëÇÒ‡O?³Ü/Q‹ÀZ¹óA®e{dDƒœ[úUͨUÁq9è‹AšHAþ´S8j|´êûñUR+ÌénG”7e"ƒ—<µˆŽØ¬ë¤¤t¾ŒŽ!3¸Hä°ÃºNÈ“ÔâÈ6 åì[~ÿðmÍ>¹*Âd7Û᪃À‰ŽI\[¹^÷4YÓCÅ>Üî=£ ‰ñ}6Ë>ÃPÙgZ—Ul[8£’Vm¥LœèLO©|?R¯D©|¯Rú®1¾7’)ßÇC4™ÒGØb[áøk5Œ¸Å†Vÿ\[ðR—ïÛs]1ÑýØBì·n|z‰ßK%”Á\x ©ÊÁI#~ÄÔMlägÙÇjW*ç:è—ø4ŠØ‹=|fpdCM•o™wsQ=nذh&ó±0Þ½–ÖhЯÉöÕØòAüoG9·«R,„,õÎêËKo‚Íá1›I蘡ø5ïÉ×+3*A¦&Í~ÅBWù|[¯> `#Ö d¼CŸÇÌ`)ˆ¡ª79¼˜9†e ‡_ÒCåþAŽùœG¦ÂIKÅ ë>F ìL›øLUƒEò\tÙÂ] ʸ;9ÂL <ÓÃC'ÓÕ 7áìƒØiKo/T¾‡!Rþ³Ã.ùM) Ši«‹ôK[¥er'^gcV”ï›/ïá4P/ /³!¾>çã!2O¿ç'—䥨Elz_„¥÷6½ûãTä¦9¨i}!ÓúCáÛÑàÅ.êzŒøøš—y‡å]Ø„ëK•i‚1Œ8|cÖuò™Á鱋S8z>ñzM?•²>ÀŽ­ÒH=gx¶@Á.Àœ°KYåð/l)YçÏC>ðüäñü<¦Smvª‘€ó”7_.ÔöA þà9æÈ£e›çÌ•]ÄâšÓ„=7Æ *7Æ<ä)F‡™úî¦ð(hãÓ‰Dp2éÛ iÒÚaYˆáÅFð)ÆÈÙìÁîK—WÐFÌémÚ&"YÃúgŶ%IïÊíz]Úi"ˆÉdÃh€¯Lòˆ¨'Vuþiýè×uU²ª8´9ÁµJŠ‚ %3\×E …š_N>ݾY¸}•Ü߬¿O/DkQ‰ê³ïwëf±£—z£üЧóà^ÏäÝ:l‡ò=ÐýæÙão6ðîÇå(6vF2ñ ¼7|Â÷_èÇþþô†ìŒ‡2ð‡o«ÏmÞ$ÄÜ SÔÔÈ3 ’w§üIÁ˜†³„q…âà ßh›ó³6)ÛÙç?á:OÑ%O««dPë—bÅbÜû|Ó¼K”]öÕMãœ2‘ÒåG\R¨*FºL@9¹mÛ:çÚÉý®n>¬ÙwWnvé¶Žœ^UM°uAír„ô‡`Â˲N Û¤<“™£¶˜Zæ5cdbUÒnïñ‚Ä\¿ Õ«í²®-á’^Â/ohŸC³˜"ú`¯?ƒ’ù(Ó¸…Ø‹²Z×ÐÕ%í§7Í}ÞyF±"â‚>2Zqc_8ªïìw&Ò¤ÕfGbvã\ɯËkãëÕå]B‡n]Q¥Zc*®i€g‡H´ÙLNc >N½ü„“ØÐ×è¬Û,Š œïš]NsÁ<5åaŒb LÇ)Ö|]Óÿó\Ö#ó3®ü5†¼Ë‚‰¯Q~z V\ÒVÔ²ÓΦSµaãHQÁO0ö Ç =Âù»"E"5©áj‚*fqS@^ P„†N®üNZXÊviqÛUƒ¼r»_’u5váûþoޝºŸ6@n)º˜ð¢¿Ì “E’RñÀÌÑd5j$¥ÔJ»}‚‰€Øc ¶(HºAÑÐä'ñP–KovyC§¸iÇîš°“l»$ÝùÂ÷zÿþìOÿzö§y;Œu`|V„; Kå\x}éFN°Ð‰;_‡âÞξ08ò–8 çÀ“ÑáJ]íðaî9•ÐT¡¿¥MÚâµ'Zëã΂35™BIS¦ Ù]и*µtS‚I4ì5Š.m·ƒ·/'Ñîræé͉3Äã™]ÅŒräÃL\û;µ©úDkó2«† ©âŽŒÛÞÈØáO¨D].qAi¨à^CHE©q)Z»R³>DÔo±†+Æ#Á¼>$pâDÎÓöÃ/P„ÕnlõqWj UœÅŸZ"•_WÙea–XBú])¦õ»$µXD”fkI®VãaXÍ›’# )<îÙXqyfc[utüЅŦK«éÛ‡ù¢‘?7Ûºî6u þ#K 8[jJâç.Í`üÅ1ÜEÍÄo³åÇ?Ñ Ç_íë9õ”T8XÕ5óStbÄrP †Ê6pÒ¦˜tdÂS*ƒ„·‚¡x#,†ü€uµ`Øbj¹9æ»"_ æüLÊ&"5as·þDXï`UÓ€Õä\²@EëˆÌÅ:¶Á‘hâãhx -¢C³9”õ6paè2‰°pDЉÍÅ>fx8•ÇcrÝàááD|“exšáÃñô8ÛðôBF)RLžÔv‹ò´R(ö±Æî‹‘à£$¾8­4k²‰l™¬ªA¾ù§PJ¤h”l=" dk7Q1aáÚ™SÙeQå Sn¿­ }œø¶Ò¨f„Û ñW øÏŸW˜dD4«º¼‘Xúà‹3yr@õ{‚Ò×¼––çA‹r#a¼~Q~ûå {‹r}lÈncªcJÇñ¢œºç\C¢¨`QýÎDÅ u¼27¤ŸyÎ×_5Lðâ—ãÜIÑC´Lˆ‡ ø5ºÛ^W+Ç•8šîo®"{¢ ^hÔÝÆô>åûÈ”7(š0ªbéÏÎ'Ÿ©WMÝÅy AÍRä9ñå}ÜP ¼ˆÍŒ‹°Ì¸X 3.Tn®ZqÈ”DS%\E®\DæJš5ÑhºF¼º$G|©^•DcFu£ apâ“îšr‡iÂ}ŽL·¢zL¸]×1"äjŸŸú­ÍÚ±”Èn†]1ŽOõŒø)ž¼p!‘¨ [ ŒºVãr Ýœ&XÌh nt“;Ýúp.º-­8zŽB«és ­ÌŠOhxÉ„åf ²AÞ„Š†jþ™²šN‰î¾’Ò•Zì¶wda4ëšpŽ$ùëzõi5HkOïÑPŸÞ{>½ïÑŸH<x<><ž ž[üwÙodÁÿžóÃ.ìÅîÇš?ªÅ$Ø”'¦µV/y¡pMøU±ˆqž¸³r»êo›U³i’hž$(¯dú5¹ð"„¸S`T1¢îÈSÒð$0ÿšv][l§ÉëOÖà׸ &˜ãW¸¤™äðPYÃ2üa.VTvUQ0A…àˆ GNt\ù…Ø>ñàçå”C /Ÿ¡ÇF§òFú±QÈqåqGšå?î?ÑÚ3ÏåÚ)0ZQXMPE¢&Qq“€È­Äcfï3wU$ j7 ˆÜJ¯õ—{÷jÀ=ª%ëXñÆ:û˽rè!©±‚¬zXŠþr\Ц®ûÄÔ5º 0éÙ’yÎé©ÄŸÎØÎÄ fGn?LESsžªÛMµlh‡³UŸsy®*Ý‚Ë>^fÜ›}TQ]QÓôŽTÑÜZ™b%ñ4I(ϸV}„Q “NmâE# 1_ÌÂ}À½Äq!æ¸I¾ûRGwôø£@û‘"ñ(æó’ô€IÑEŽô ‘ãW3ºVÔÑÇdôÈæ¤rÈ2¨x‰#3Cü¸uM‹ž¯r&åJ뺬o9æU»Wb‹UŠÃͼBœVÄõ1T7 aC@i½)OþZ)Œåש·ÚM†…tNèz¶œ µÁ7—ÝW,½NÛ3‘ "ñÇcïÀ ˆ<­ãÑ·±²ÚQ;þ{Y¾rSÂÇÍj.¸GxôH.â°]„`ãÇyÄO¶¨Õp§¶ é"gH†˜Qëèf5+Ò˜ó$ÁU ³0oR²¡Ž?^ÒC·"W‡¨6ýÁVä9lt°ÿ¶¢Ç»¡#Ý ]xi½+NGD‡XƇ0‡ ¾Q#Ë1¥w¯\Ú‰K…ÀbÐŽ9ØCü|C>ç¦6ÕÇp|Cn1~0: É9‘ Fžñ„kÛ]j_`£»pGwa.¶ïëõvÃÁ¶÷ôà®=qªì|Ý®egü˜·écËGURÝàúʾÛMó6éîøÄ¸]OeŃÏU)Í%4|(HGg‚à•^x…âX“¬¬O;?â2o»ÄŠž1HiˆáCR±èM‹LóÌf vô#y»Ç@)M \]‹7¸C{’0Nrº†'F€Ó툸˜šÊrg%&U÷E›?§Tf·‘‹ ÐíVì< :ŒÔÍ®è883ß×­Z‘ xâ[¬ÔHu/YÚo¶'Âüª·ù“p±Žgë0c§kRò>¦%{rQ×´ÃrHäòró(ØŒ ãTi´©+ʼ²Èç#@±ÍYäbX™ 8øhâÚ“`÷òm›†¹ø/Åã[R6®ŽÓøZÜk(~}'»ÖøþÉý§Á6ÔfÁá™r+²¨ÎAù%7ìãØŒ´\ú£ “C^ÑpåØÀl:¤ØER4Ý4¨œJ¡‡¹^ß^G+".‚êø&š¸þæ«3ܶ’üÍ™<šú¾Fˆ'Á‰ÿõ¥ºÝȯÂ×uÏ0ˆ ¼Š­\(dd¶âf5Òq]saü³KÓÉÀø¢óär66g¾áTug‚y½+ö/ò&ö¶¾t´¢ðJrF nüm¡ºŒ%25á!¤(hLA@"&y“Jæ‘m×fO@Çë»YöÒÓ7´à+™Oéç"3*‡AƒÒ0ö4¾þ%BÉ äx|p‚k¡Ñ¾Û’“¤IOÍO.^oê"s}«2Ä‚“ÞÄs“2ÿ‹»¾G ÄΈÿÄ ÄZâIÒ¦) öâåB£pÙ¿Í%÷o8rÿJîßæ“›1Wý>]íE5BâÓjxH0’D•vqE'x*¦¿»üÎ^ª#CÇŽ•ð°qÍÿW®\¦œ|ŒŠÖ²Ö pÎ0Rų®>ƒ“«;‚fþÔT ¬„ó¥:*ÕËSWSÐkUÊ kâ`{µ0Ä‚›ÎØ ˆîßCœoˆ¬K§†û·iµ{.vÝC%‹'­±ŽJ‡ñYF?Ðè‹(A›C'˜DžàÛŒ.M'–Þ«†æ.#¦\Ä5°!­+•ñÇÎ×dbhšbMZI,¹•^u{H«âØ »AÝŽ]V ¨ßãX,Ð`£[뱂dulb€ j0Thá$[2 Z/!?€y½ª«ò\ŽYæïRÏ[›´q€œ¨„B]2¨{á1áp`óxf€*J€#—gk3ƒ¨Ò )ë˜5MÑ…‰iÃ6þ…¿33ìNšÿò^ä "hDaq› [zηuS-tM; !§m‹ðO¤_?d‹îA­3 z©¬ÓŽÍÚb‘þG‡±ÙcàcÊF-ûOhŽ2ù'â²{ÈšMÝ`E÷ª›N…Õlºþíj•|køÊ™X<Ç!Í$ Y ã!þšÐáŸYmM§_¼ôÚ¼L_¢óÅ m¥£ÊNhÜC`x¦hñ6mýTìϹ› âÑ+MÉ5g’ÎŒ)Óm^¢Ø¨&à,\Û?ƒ®ZËžIÃ@PL ˜¸.ZxÜAl¾vµòÖâ×õ·äþfý=¹\ݺ Õ¡ç¦ Fhu9Ú5-sWÒì!?¦(šŠ Ðzeö%›©¤U³É›Ã†?$ƒÍnƎפ¤q€e:~ ãfõY¼rÎj„à+Ïö!YÎ¥‡âe#Tíøi›ÏÜÁúʼÏä \·³IŽ …æ¢Tsäc/2%‹-¯|ŠVæé~>ß±©`ƽ¢‹3_Û© 0·>ïÀ˜ÂÑžlióÍãù´OÛ*_€²j&˜.SrQe3YΡÌÇBâ–£3¾w'Wòèܛ˻՜æi»Û”õ)>óF|4¥¸…ëÇë„ÿãïÿ“Ì"5ƒN(…¶ØÁhQtŠo>^ÏÌŸ™µkl! ‡œuŠfÑì*•ÿìò¶JËezF—5[£®ÊüFØzÈzÏX…v“±Lƒ8óMɧP|¡Ž$ݺ¾´yWÊØûO3J hóL²³b×Îb2µÀJÕ²3L¸Tru{}¿ ۙͅÓ’»»!’`ö§-nKkÁ^Qö*Üß^Y"! %üJYÜß:“£=¶fQÅÛgÌÁÖªªõ´ƒßIÜjÏ4Ñì4R¡Óávsz~Ÿ1LnûýÙâi4Ñ-³ÛŠê¤EvÏ‘°<ç’C1ÒÎ[EÍ’0ôâfSõrúì"pJ$³@qDÌ-¦:Ãë…Ê`ߦóSâ³Ø™m…piŽ.AóžƒÍå»Ë›²~™ES3ÂŽ+ðUþsLÖÿçC½Um&¶H?ï²ÂÓ¨?šöSÃ¥z~-ÒÅØÇ‘V¹æÊÅ)ïÓ>ƒ5\ÜŽí±"¹‚¨B˜Õcz@ôºÂ4Vlù„Ei­ó¡ÁJTr{Ÿ $8ˆáâvDhñD‘Aa—õ"¦]uÍ&=:F3iL"”á®Q‘ÙãqE!\à¢Ò•ŒÔ„ˆ5êŸiƒ˜UªâÓè ÐE/Œ;´ 0¦²š×ŽËËKéïÂÎH“gžÈW÷Çö£I„á·AOâb0Ç­Ë[u-ÈUIüKæ„9|ÇÅ—W_ØÉ¡©Cð#s’p†ü‘ ÷¼¯1ª_Tº/ô'¤ÀÝ(dƒ7á#’Û›È}Òâ»a1U2#â"ê†ïñTv‡ä S^Ú¼ûË·µã‰P%âˆ-³¢u/Æ,vÌ 5I¿|ªÛç´ÝAe»Î¥à7?]¿ÍËY™?å£FÆK'º†m§D9µO×±u»÷2U² d"Z þñó*¹Üí(:r¶OEù‚iÂc6nÌŠvÀji¡`?ó?GÉ釉ÇçЦ]Ðíìý¿½ÕR™¼Q›Gm{B+²“"’jE„]ô—â$šÑ :¡\b3ÉBÎÓñdeáI~"ndÑ¿"÷—3ÚtKËâùøé³ñ\Ìñl¼-v7ΠeNy!ðßS˜i»-º6m_$àˆ »™7U²aµœ—`ú)"¢qâŒÚ´hš+rÚS â}”½H΄KÀPIaôõz¬ÅÃ6îBµ­hÑ4Qä‘ßhÉ€ à|ìF¸_g/ÀÐâL3ÀäÇ_¾\ÞàFíIšÔˆ©Ö.òÔe€¼þãížÙ´}yóãîö­7rgs¢cFÌ$ä¡LZØŸéìó¦ÂñÊ‘v3Ô eÁÇe´Ûü;­cô$ ~ Õ¨g*¥D£?Ò„½‹GÛâ”u']®6gn°¨­×‘† gо·Åá@‹\šZ:âÜŸJÞ×ÑJÆ.=Ñy:O¾½ ÍT7žÂ~Ès¶rýF¬Ä *<Ú.8¤ ÜÌ`g±³üŒÚ¯ÜIE;@:U`Ê7 ¡ ¡¼ÝD£÷…Úfj#YÞ ®ïW±ÜVòXÅŽQkïÀÉ£\˜šúÐuMÚÁ¹¸w|t¹º]d`»UnW6§¬.ª¥ñíç¯J!ÀŒ¬q{ìc;Ð)<üJ_äμUב¬Rr »‰À±oV´ ïÅìuÞ%ÛºîzÂeñ˜³/ï’Ç"{¤Âm—Gön&T„œ|" uXyž³¼Ú<¼ÜΤ]×[vÁ‚vN¡‹¬±'ìÊŽÃ;’>¢ÿò§³÷ÿ:ÍÆÃõ´âoPÉÇÊAåBD÷PÓ¨_ºë’âŽ3ØTÍH'¯×¡Ê^òÞM;Sž·3OOσy’DI0Sž-_ÞÇâNZØT-x/æåÌÅè\%W¤Ó­ÅƒÈcV]?Y‘9Ñ™{Ä¡mA­ËrÜ—W«YÈ#àú0Àphs’ñžŠ‡i"~ŽNC졃–'—‰¨‹ã×éô’9‹i+cÁX4-49ž_®‘å&ö°ŒCÛu\tnlÙA¯«Ø1Æ4ß@c2S´·ážRƒ=ÒcвÐã2š ñ‰âÅt4ç€ jf”RH›ÒÜ}_%ðV³€) îØ®a…¥!Êê6g°«¸“FfM{âÉiÔ8ýÄwD쉤‘ŽHhÏÈþV1¦OžWáK‹lÝt™µÍèG²Œ›Ê(s…{Ùt} Ø ˜»yglÁó´Ñ„Ô4Oc¶Âfg W¨/«š#Ý¥ç€é'¥ÕŸ¦an]aTN;ÙK|­ŸÌÓû*½’ÈÓû¾ÜП˜žŽi_Ä ºð£ºP]àP=å-dž :U´£y”mlTQ­Ý[ß}]%CoÃ`W]¨¿;§ª24æEµ¯°F\_ë9PN®,0ˆì+¢‹f¦à‰p/]N]`)9݇@¶ÇPØ]KkF fUј‰MѲÏð‚]ËÙõàFŽæ6ænŽÍ(Ž5­YuK TìsãNU `E0fö'FC\?üœ¹-™Á“[Å \Ür!y!]ŽíÌ5% F&¢ùJ|`ÏZÃWu}´£]Ï1uák×3ãî¥øøóæËÍ×›ï÷ÿ…JÓÓ®ÜEOŸŒÊf¬º¨V5¿þrm›AѱU›=í ³܇wŠÒt# "¾µó6tcgšPhƒ0òáãðV=WÓrü »QÅ bš·pNUiî·r¨“ç^$‚ñáM@Ã5aOM]ÛLº„ª¤VЇ¯?VWˆÎ,âÑz0jÈDÕBÂj÷øK&š’ÑðÁZäå§s/œèÜ5èÚÁùr·¿ °^ü*°oX÷=ä3ú´¨¢bC6:-úã~îiÑ'‚o7‰¯Ý$¢Ýœ\ž`!Ñ—&žºóÜ·CÑ‚»ÓùûJ<äÊj¬I y®Û]Ü‘ª°œ@î 1¬]švȪ7k±üŽü:ñ§.G×µ±¢n/¦£Õ®¢ü(Ú½óð0Ü›»7oƒñãoÕ•}<ú6üx?Û´âøMWkŽùq+oØ8‰üQW9û?’c×H ªfª ¹}À_¥DL;½½¸³;sÂÀÅíˆÐ ªÿôm ÊpWŒ˜­N÷.'uÆuŒëÂ×…5®ÈmɰI]ʆ!rW1hCQr@EkÌEÌ_Øæž.eÇ€Ù’síÆ¹Üb·ÓÜ;i<Ôz‹Ì·;&í1bv¸›[4Èjcʱ'Eƒ¬Q wŽ|›F2ÜcÜNOØ&.åÁ€Ü¶ Ù±Qeœ±ã6b¼{0½€3Rü¦JÐ~Š&ä€ÜñïŒ Îxq+Þ-^ÀiÔFÈæ…*;‰‹ž„ÄoOsäž{»€‡ÚâŠXí÷.ô÷¶HcðÃÖîu)'\ÌŽø¬± jŽ«Ò¸ê néÛµê a®X.âŠÇZþ#œƒÖš5!T´öȬQ WÝ À<ÔWLz†¬îjB.¨hí‘Ù£À,¶ºÖY!Ì j­ÔµL aÖX"V9ý œƒ„+^ü‚eÈZ¥*㊽ò°è¨ˆX£ŽXCô/ñ¢Öþ–ýt)†¸e»;UÆû) råß‹©žüψÅ"ýo³+Èã†]ŸÛ4uYdacŸ¶ÊÊeÇçÄA€ßäK˜@¡Éøýj-Ö“[Ú‹"|ÎZÕŒø{!xr}·gÑxt:ñPÐYJ„ˆ p0q0‰ë§ (ìÏB(¹¢BÉJÉŠ0Rdp]¢xè:&èBb\hn‡3âŒÎ¨öt]AèSè*GÙ,:æ;$Wjø*² Ó Ÿü#%)2·9få÷£´ÛÔÛ¿æ¡nÇܺføšä„N¾‰`$¸ÒÑîLÔLÈ¡1h¸0(Bxëö€:È›ÒÐI#ò­=¤ò W~$3 Yø“®& :ýI×BàHY¶/IVÒQó§QWT‡SAh‘¨ÒcîLæ4 $¼!žd½TB²ö´é‹ ŠF"ŠØ¤Ø¬!0¢Ï¡Õ HKv5µ1ð]&ŒDŒ SJL,ùÕô \pŠ!ÇšˆÁ±–˜YÝBj$¬m¯ysóU ^qÚØRÆ_{î½éѪWgEø’q¸K‹Ö¤^‰g©WÂmߥ":“3ÜÛtù<Áå³X›,…ðÖô<Ì ¿ã&¥É\ö‹àH7ùM”Í!3Ú-î㓦‘’*7æñtw{•ðèvå³êÌE8`Ÿ‰]ÝR‘Á &†Q×ÈO—3Á%, ¾ð·7Øœ¨¡÷BÔü¾ÁÖ0[ì`€áš—wÅ1g‹„#%>)2F×G¦åéTìðó±– i/3IHÞýþûíuÜŒãéa›Æ5?&MvMnRAûx_َľt–nÓ2‚–2 ð'øÁÀÇ ìj±ÖƒF9Ò´"•rü ”Ëî³;Ÿ!ô<¹Ïÿv*ZyÑ ¬x(“.éØf÷’ló$c£œ™5mAPîÆ•Ý9µ?ì 2 hÎÄÃuÒ–Äå tqÅÞ iĪÊû¥øbOÐ K< KL »ŽHØçç ߎ”L¥ÈäŸÿ|wóÔ?ÿyuÜ–õiG²<‡?ð¿Ôoû²N¡K‚e6 ¬!ÁLU;g›Õ0°‹ê)¯èhà%m¯LL£‚š@´¥ Uõ"/ƒó©.OÇ|NÍFN®áÅ9¯:aê"«­<ÈïÉ튵ìò`¯ž=$·iº–³/!÷æ“MAlC ÁWç쯀øDÅŒ«âu{1@ꉤÄÎîz g+¹®kÚáJw.jn‹oKä´\J9¦n§¢ k|äªlµu&©™Í1ª V…5RòUÊÞWé2¤¢é„1PXüi[ù7Ñ}ŠðLLÏ>->ºï ìp¸˜ž î@hÅÕö{‚wp ú+U6¹K)²fr¦Iþ5}&ðß&ÍŽaO y5EÒI¹s*s®É o+Q@Eޏà¥Ð'šiðÜÍ|£æª¯¾®zùçur¥È *c™4âŠáâ¥Á5ièhbÇæÎ»¼Ì;J_(f2hŠðˆg2ѵ2$U× œ~Aô··5M)ÜÜn &À,l× oÊÎÆ¦¨‘¤’ËSW'k.Úÿ+w¤<Œ·à n<4ph<¯žŠ¶®BÞ]B[²ñµêóò#óØvÅ“›A0Œã_ëíf—ï °…1âf¦«˜Iý{½M®{™p>;å§|UßÏ‚IÛ ü'û°gõ.ßž ÿÑs¯¦ o/§¾àx#—V¼M£R™TÓÖ0. À _‹. ¸¦êBÎÕDnó¦&Ìïo•%ú+&»)š^kŽ>RvA—¢æt—°WBÊ_PØÓšÊƒÌ99M†?Ò¨ hÐÎЭ®fYÖÖ„œ¥YVŸh3Æ™³W@5 d ø² ¶ȱnÇ•]ÒÞO¶üQð†¢´ÙÑÒQ<ÁYŸìÞ/c9Zìx˜Žµ,|¥X"ŵ´6‡lê{¸Hi ‡{ŠýTæÑ¸OeˆùTæ¼½ó(^þ®»Qw²‰ÍûÉjþ¯·Ÿhs€ïD¦º6FФ þ¦L 8ýüÓ6o«¼SŽS]qi/|na›§Ìéö#Ìmñ<ìF¬„ *JÓó.95;ö¯²øAçB-éõe.î¡z(Oùœ¦Ö¬o#8’VsMÌo>S‰ðæ“Ùƒ)^ìAщ—ŠÙ€Ò ¢ïx0„íÒöãga6Äcq­øüΊ+=×bvsLÿ ùp+µàDiN[ÆøÎ øêÊã‘D®£Ž5m”z¹$Që¨#EŽ~õsJÇ?­¶rÊ_‡²ñ_×Écþ8«&C(½ë?¥mQŸ¥<Þ¥ä‘ø†d´[„J—¿efU4 RTFOu=€Â²› {“\l¶§ì‘Vá¸ô4ëÛŒ¤ƒ±E%¬QݬOÞ/š#t†M—°µâ(ÃslÃ7Ҵ–rHâš9]Ñ…£oÚ>å°ÏÀ* ¸) ÷õ”ÎĘhË0áx5=+\Â7VóŸy;TOEÊñ²;Ä|‚ÓsNŸÃÄ5=øôµÚp`k¨-!„=¥0RoÒ¢e5ÕJz ÞDz›Bðİ?U\€½2‘ÃäØ_à©3uB™µ&@ùFËž¶¢¤›dãOñúx{×¹‘$MôU` ¤Ôt÷Ì»À.Ê”JÙ­”²*Ucÿ$#‚• ’EgD*êW?Æ™×›'9n~!ÝI¿Ùg0èRÍŒßçîô«¹YÑ&¤1žÕ(ÆÒªEƒ/éÞ–‹¯¯yI÷ðmå¸SY“¶‘&«R)»¿Þ~€Ýš<è âz⩦ rHO r¨žx¢èÂ1w}ÑÜ]ÀuÞíÝ'ò:ù ^+%ÉÊøCYÁ¦ÑMÔñÃDÑEf8x07ÀRæ/Ån›f ©®ë+$x-v¬ä]EË\Á† £}ZÛt=b¥ï·cââÐ |‘>È0ß)æŽöah`ï¹F8AÚ eÏÑ3<‘jƒŠÚKJÿÐý”“ö³êšº‡`;<…JlOé¶aç4Ó0l¢ªM‘ß1~ ™¨šM“½-¾?µ({XùzUEù…Lu=€†/áË®‡(6G¤ÏйhCYÐo«ÌÓ%Ç`ÃËjÔàžø¼ÿRç‘D\m'Œ!]Êšö”¸F­¹C­yX›u=WJ¸’\ Ã¡(K¦­ü¾£+ÿø2PÕ¬d™cuû:ðë7ök&xrr’¯í 8“p;#~à0`e0×ö¨àù¯Ì¹í=°õ¹¸hïÝÐWÍléÿˆCUd÷æ3å&hRÄ€Çu„KQÐÇ}ä¢7l"‚°@+ðSs@ñ…¾e¶Ý³ië:ÄM&£J@3`i¯TZ„ÜãÒ —FÁ*¤£iªCÅèBˆ«^Úï¤[”¤IÓÄB“›ÎÒOŠ •kÜóÙ"ƒN๢¯"¦bEMÇ–æ ®8@+9•‘[Fxü“Dªzt…âÇÎï÷Ä·©C6†65¥m…2÷Ž ×nu°×:¥˜vÛ>ÝE^FU#3MÐ4¥Ð]nï™|rÿ.a $~_!Á÷Uô¾ÒÅûöILp%f^ ×¶Èþ¼MOå6kÚ¸9žAÑ„VãM¦ia6vûøìŠþ¥(jõÐ’böç®Nêâ%)OðÉ—¹>9 &&M+)€$zt7(ºpøÏ€©¤~—åg¾j~u»ù™üä?!”oªÊ}‘]3ú›æÅÉhÂÅNWоËa~/¿Pv1iósòIê$©Žs…,_ƒáâow؇Ú0V†jv&}s‚ ³Âƒ×Ìfl„ÌJ±€Q_ƒËJ0\ÿw"U¤) û4foZL/Ž™ÁùkÊÄà([dKšjÚ0rHPMd¢è¡yu$ïïþœ¼x¢_gO××!ø0м¨”å>a˜¤Ó$…öŠâûIÆ .¼ýYQí°µ9Ñ´â•rHpµ©+ºpø?kVâ4?ÁÕÜwiÁ8»ÀïÞ‚!àÅÎ`ßo`ªÃÜ~a”ÿ(ÁY¶Îd,IFãÓ;_™K-d0ªÛ8è¡ÀP-¤í…65Ë9¨9 ÖÑÂЫ³‡“Ë]h^Ð*=×Ù18ˆY ¾ öDZsx§ ùã1¤™{†l¿E+Ú,¨Í‚X@ô@ž „APN Åõôä/4-mdÔ¦ë9 ‡ùœziÜøy (øÐ»§äKÊ]l Ò¡¥;E#7(Û8¨¢ ›·Æ]Š»aŠþ¿b×’©’ÿþçyÑ5c¾Øè=vŸG£N$ZÔGà0Šu>»|’|©÷Š.¹Ã&›SÓKÙD±Þò7PòðXñêncaˆìaüÜå§>$Ïag¥JÀ= |ÌdÒUÔn™IÛÊK•]Ù¾™¨ùœíó-3~öÍ6òáý¯Ûí»´&e¿l½î0bãgRñOÝ„Vä‚}ú®¥ô¢˜Y¼ M~l„®¯ñA~ÀâÀ²N—‡—hFu ]ذãðýé.yÏ’/uuMà*&ÛÜÚ`öå n ±šprÒb@¢> ›… ˆ3GA2”¼”!rdIÎ:1xNGýc“{ç[Ú«ñ §äøX{’¬B°—(÷}›¶ }àÆ¯Ê¢[Jéw矊º»ÌròQö—òXAð-} ¢©Áûßfê.à£p(0tk˜j{aùÛÃg\\Ù݃¡ÜCÙ ‰„qPý”BÅ}µ_xbâ²â&ÑG—Lu´–¨é—IÅ2ÖÈìoŸÓa¦²lÔQß»”jËéu `÷ùöÛ0ÿ ß‘.LE\S¾‚ÑñüÛþµ˜ïC¤5†ä¡ÆkUd8V§ Èó‚uþs1Yð1ä#¢?ƒ|ŽOãIþ¢Ï®;ûBø«àKßfÅÅp¦‰]#¡XÃÖŠPALKxì„Ï}Ôw-¥ÅL W¨B—ŽÝ2ðMÛ•#yXâJ—E³åKÄlù1[¾,™-_ÂgË— Ù²,ÜøÉò9Y¾M–/b²l[8}N¾ ä1Ù¥­—´ˆ¶omÞ"ÚzA‹hëàцÓ€²½SVÞ BKK!½æÅâ¾]µ0L°Gð•y÷KYoÛ”:ÕŽ?3(Û¨¢Ò ï]æÅ>=W}’æ§²†Ë,væ ½ ôìÔ@Þ¼ÀƒQ²M{~Í#¶7Ÿkš))rê-ú ø0b¢“ÍõløÔ¨dãö8ý…–sÊZË&2žfB¶ErÔ±!¤¦˜iôëƒ[\úWæ'Ñ]µ8¾¨2»%¦Ÿ3kÛàk²¨ýœQÙ‡I?¡âžÚm•Åè˜]¡Â&7rZ­_èk¸ß© H‡ÌAÈûôzÔ±!¦ÓýŠ®85˜µX2 Í ¾®0¬Ü(yF`%Ï^°„{Ó~=×óÒdOiQRÉ|JàvÜ—å0âÂ?U‰ƒŠúÜì6ß½üèDi+¡ìÛ°fw!‘ ¾tS3Ã÷´›=&$ßTËvïÅ2ñu¿÷ÞÄ—"Ž{tòûÿ°IXª^žåÖ6§â´‡b¹Ëá^t (>§Ù5”Z´€§²¨âë׬ìÃäÝK2>y¹aVHË!¾Z_CÇV6¢±Žà1ñŽn+^;¾*™hÍ9ŽÁ•Dð#×›@²ƒ_–åÄ€Þàç1ã%Ÿ,«<ôB/¯éM“:ñçߎz]Ðýí´l?8x·3³JTDßå²Ô¿ù¡(0?ô€í°ùkòŠ¡4=PVàk·<2ÚI™á‘Å€ÄT<ªá˜õÀý‹ï]è/[À*”õ¶ìJ?½»ñÆÝ ˜+ÚÀj7V½7BËŒªˆÒž©ÚŒ‚ÚÇ9œçÇ|—"Ú8î›4(Û0«¢aÐÞÒ.x~ÒST—a³1 ÛøôND‚Q'hÞÞB{Ë"JálôV¬‚æwïõQ‡þ":˹‹jèKª*¼’&ÕC’—c ×v´ú¨–ôß„4Y™B^—²?Þ„‘Aò¡`¬ðmÒH¸`ò0³Û*=íò4ªIÕWdß‹è¶Âë"…:ð–éi F=ŽQÕ„W ƒ‚á ‡g)—µìªðÙI‘È9*lqŒ¾<ÀãûŽ©– ú¬·€*~¸}ô¯e@›/…rÌý «º ©.¬BþòŽKç/ÀœYܧۼ@ž»8 XLÄÃáEw±výpú1 w>~¸M^=B¾¿7RžíäL¯{1‚À½!~>#'{E.‚¼@îwÑXb."jÀ¶ÀrÏ¿ÍùuÒ52¦›'ͼh8&F¶o³¾­&Ò"e³ȸ<Éóe–ê÷êCÏ_Šj;s]+êQrºßÈ‚c©ß£ìÕ a‡QMåýX±UTò³.eeð ƒìcfª6£`T«˜j:¡¸æÓ oÏÁE‡êÇh÷B0‘ôTm÷E^tñÁUíú6¤iZŽäÍíã§DÈÔÛÁ7>.l®²Uæ*Ȇê1degQ‹‡jÒn; ç œZ£ß o}jè! =ŽÚTÓFfS¿V9tÂ`˜Ø»Öl¡€ú1š¾VÖ»0Õyñ# ˆò÷ß ï¿}qY†°Ž%¤JèŠÈyŒQÕÄ^Ô×ãÏ’ {æúÒź/­Ê4îË6(šPªbzÊW~ûŸŒ—œ‰i™0MgÇ+^Ác÷"(¨Š L EkžÒ¶-ëC“ønÖ è`Â?[uËÄ„ZÞ õv[“|»}ý¯°Ý)Íõègû=ð~¬˜>„Óîh‚-bJkÒtâ,Ö€·5 –ÐÂ(8,«òpìIl¸ñ©–¿”Ñ'åz8$º>RŒ]N–Dž²ª›PÏ…CEK6m/¬á»jxÖù6wS3ŸÛd„úz¿ r^Ö^æFAm1øba9Ño¾±Rwy4‚¼×ìÏÁB^«ØuHkaþ!ˆ½@³®­˜IÕÝJzê âÁ;8à>;£º µ. õÙ™´½°â?»¡¡„’Aó£ 6Ѽ5˜7>œXÿ‹²¯Å_ÀB¸ïg;ìtENŽå¾ßf]C†ä¶ç8A¶Œ´ÜšZ‡(DéxOEÙ]ZQ›¶$_‚øZMªN"Þ¯T Æ¡M'ÿ¹ïP¦Â ñ•3ò`…ÚØ3ò¤ƒ‹Ý[Ž@! ñ_©Ã‚³ü­ßë¤ÔÿY¸úŸÁ´cƒ¦»*€äX¤UÜfÇ"{F2páRÅY‘Þæ¹eŒ?~Ã+>™´·àúÉýç¼¶À.þ+ºØ®µ‹Göëì°1ˆ½`ÎT+mºˆ‚ `³rN¢ šê(ØŠ¢« AÌ@@¶ xì*Ø1;y݈ÍÍØÍq§ t³‚wÁ»ùKòŽ©%šœð𕳛æú?’ÜTÑBiÓœ dæôd|Ì3TywfÁds8@ŒˆXÀšš .RÁÊŸhYV §Ê9„`æQAÉV;ψeà2bácT1W…Õ\‚È‘kÅrQt,ÐA‚;íì÷pjY÷Õ•~Ì«ëç÷-ìï•Ðj ëÆ_Ü_Š)ûèV®«Y !0’—^¡·‘º„œ h7ÊòFh5©j ì1ŸImÊ”Ûgµ¯Øˆk§‚ïØ7m™EÃTµ,`¹Œ–kž%h¦# {ÂèÜ .õµ¾Iò;Ùþ~.Αu>Ñ2B•2swæqró÷M„œéÜ,%ä|*â‡ÍºF¼º$ŸF±¿i£d¿Œ“ŽM‘;èå¾5ÏÅØ4 àÅr¢‹7]Ú]aæÎ=¦•#¡- úªŒF³4iÛxj²jJR8¯dþˆ¹mù¦µÔôóæÿ»íNÛô9ú¢¥ÛÀŒÞÌÅÃáÅMkúà´û™·ð$ùÛyÇ Â|E´¨8 —¢#ˆ«ÏAvü”4­hÌ Kß`&±Vé…®0XÈ£ç±>„$ä‰k!Iu‘'»«µÚÉÙD|Y(}„U_Ñ8m,d·¨¢Œb¹>HÕe~èü~æNõQ%!–|m•Ö‹k×fËÏ{¦‰Â¿°þ,¦âÐë,«+*1DÞ™¨:÷ ßL³¬9ÇÇ}Ž1çcjVÆYT[.kÑ4 ß×(”©ØZƒùÅòÚš›  §(Å^Z+3+ÁpM½œÌÇX@ºÎ^¬âƒIñá’-úI±ôËqóQ4©â(,ª»­H¦šRDXjÕ’Y^c£Ú‡òЛ©ÅÃ^R/;  õqwÿyˆwYm×À®Ìâª0Ùñ“Ò´¢1/¬ƒ™pÄ–Z£*AÆoÃ: Řó4+c‰,ª —µh¦êâæ=Hÿ ÙNÝ[©ÖŒæBéêÊX"«ÔšÉZ4 g­ ѣȒSCòÝ*Ók—1/Uƒ*ŽÂ²Ú²ÚŠ$`¬)tð·ñsꜮ¯š+K½µ¨Ž,v<ì¦Zј—TŠÙL8bCUÜOãêàÒ¤§½¥u`´ãe¤kEc^V&3áˆupùFŸ&ŸÒ®Òî4ä]©>l&ƒ‰Î ,!µN…Y,¢(yªñöëcòM&wEÒïKP\¯B ö"¨«Úh.kÕãÜ\<_ ¹eµÇÃÖ®]‡«ÑüU Ù­[«s£Xn¡5¼a⸊ÎΤoNå)=¬VË6“ÁÅ03°„Ô:•k±ˆ¢ä©Ö;&š<€,®N‹úRvM½ÆÓg2¸f–Z§N-Q” uú~|Œ«Fq!m¥4X fªê"Y¬Se!4<Lß·O"ø®žHv,ÊZ5e´ÌS×FsY§¾Læâ™êl#žájLäú9¥Ù±¬W«7‡Õ`Î& Ù­S“v£XnžaPf5zäâ‹*ZF¢\·¢MVc C³±Ýªm0ŠåXÑ2ZbLQÔ¤+²¦ËŸŠZ-ùHÏôÈUœÅP n­‚àúÄWö(öø“Úd—"–VÄ̈ŸË¨uaÉOm•7»$_ÆCHÛ…žl6C"3µxØKJÞb'´¡Kú ã_ܶQ®gǼ¬ ÄL¹¸UˆÓš‡ YÉbIý¸ŒÅr0ÔÔÇû.“܉[ŒDWØéˆÞÙˆÞÉX¾s»SaØ™à¡nD6Vð|#a²Là’ŒŒ|¼¬Ô­–<ÌæzäKªÂf(·V1Z8é$ŠRö¼´²ç¸ÂÏž·±—vöUÈ™2?•‡Xc‡GÁ¨T³ºöe¡DŸI›.Ý3÷›ô2³XBjYÝx,¢(ú¬f/êðSsHn¥J2è–€ Žœ—dágcµäa<×C _s4Ú(œ«0²|‘ÅËÔ–|; µÆ/$ð$AÒYI,‰y×+þ¸§ƒ)t%.õûÈ [”Ç¢— M£eÍmÃÇ09¹ûwÃõc š¸Œ*´J-…ÖUqV¨6“­HŽÊº—!œâIîË®xI«ª[|â3Fw®Ž§³B½Ùì!È8êïƒK¾F‰ˆ÷ˆÐËkTŸÁTWU~…Êš[Š‚î¨  PCîJ~¯ÖÏÜö|D-Úh.‹jËi.ž‰©Þ®›¿Z0†ÁKVÁ¬¦Bˆ¢F/MqqEaF®™ž±zP£˜^qÌr𠡉¯fÊ‹k ;Vu5†§à«ŒRC!#”¢¶¸zâG§‰–±JâG&q¬[Ö}Ñíot9­yšu‘,–ÔËX,­¦ÄÓdxSQmCúCW¬;1ê¡ì4±ŒÚ’J °‰$føøž¸è¢YÆøºu¦{Áä1“ƒö:u‰˜~X”í5ˆ™ˆŒ/Yo6`3˜:v^b±°Ne"g(öJEÏUÆ·­1aqZ æ?u™é®SƒÑ“£ª½Öâ§3íy¹èÚ4ÏékFPsó5©â(,ª*»­HZEñ‡ÉÃSLÕtE^’,ÍŽ ûE‹Ÿ©V4æ%Õ`6ŽØti°p¼_Anˆ`W#k\3Zñr‹¿ð5è,«‰è ]šŠ¨ˆØMϧ¥`$ŸBØÙMr‹V§+®Q#±aéæzÃ"Étî´šªH )+\·rØòQ3h¢ð/ª«©8ôjÍñ¥|…à°·ƒLl 垤ϯ~¶8N5Qø—ÖÙTzÃèÂ*è~‰« s_ôtiåíx©éZј—UˆÉL8b½c؃˜â_10*:*:êzqO±ÁNN壸QEDÙÜÉÒ 1ÚñRÒµ¢1/«“™pÄ“¿G•þZ;jÈ­4äÚZ›g¸]3ÏvvŸlÕ ²;c ¶ÄÖÜ Ão‚ì~-ÚöZi¿ µÑ…ÚáZgk ³§eÙÌÂí_‘¾éÒC±JØ7‡-%ƒ& ÿ¢º°šŠC¯!ü&z²È¶¬Jæ6|d(œ‹Š~f" ¥©â)é"ð÷] ™y¸Oq·NÞ›†. ‹x-©'¿I+C=~ã’›»CEñÕß¶J@_¿É¨@„ù5X¯VãƒÿÚõ=uŠˆ <‰Qü苚Då ‹²çanÓFqYÔ.ñÑCð1CVŒ‚Ž⊠"ž%§ø ³,2ÿâ(!Fãèê&–Q[™Ô:"ã—»b™F‘š˜XFm½OÌhIÌÐÓOÃï¼—ÂÉ ¥°r,á®Ü>Ë-Ô +ÄðŒ"‹À¤¾^+ŽS`Ó¶elEý ÿŠqcù°±|Ô,¬W•&“8VZ…N¿Æ!‹Î •º.ï”çw`§í˜I&TtãÉë6Ž*ÆÜ¹©õ›úò1ØlÉ3ŸÀ £²D°NŠ–Û¨rÂ$oñXZ¿Y Òº n˜œ/kJćGÄE\1":¢+ì¡ìÎëø ‡ºÙ¶€Ô?‡5kÈd2Šªf` ©õªÍ`EÉ]f¸ò‰ë„ÀK±[½Ï`ÃCRՈ¹¤fæ&ÂP:=ú„e!õ(ë¼ø • sPw(öFË;²îÚöÍÛ4;[Üɛϴˆ¸üÍ\>aT%z „à*ðkÑweq)Àéxßt")ÄZ¼{|/OÖb˜,!ŒŸA¿ëŠ´/^'T«Ü_“¦Kò¢¢óµhèYé Õq‚?×wQP¤Éfóéí·O›DyL’—²?òô@©íš¾¡p")uÅ¥y^ÎL3HP(‰–Æþ¹¿cJEêÛöXTmÑá(:,9Yšôѧ®hÓn´+~?—]‘3/Æv0iÕ³c’’¤¯È›´jë7ÿþ§€2 SЖJ Xëº.žB’1Û5İêào T:èöM’Šî‚»N¸¡«­ƒ>lá‹…Â,ëX"^KZv=þ=ŠŸÔúKøãCy)ê$…µ>Ì5h÷ÒA”Óœ@žtMÓkuî.‡"#K:³º…ñDX|ެþ<ýÎ{N1¹S´7Üs$¯Þßm~JnŸüLóæ„¨á™¦ƒ—Ó¨]ÒªÌÅ€¶§Õ&DV%w(ú%ÕhV·Ðœ)൦ºïšýéØþµM×»ñNÆTéélìŽ=s¿¦:?CO‹6¶ˆæª–âQÕM»¢fÏéWúêÓ/£uÊE<ŸgÓ5!GÞ¹G"6èZ «’ãm$¨Å/ôÉfó‘U#Lmδoվћ0üÏŵMËKAW÷°Âf"mW^àoè*Å•C*T •ö‰`¦Ê;N^s­xÌ+ÀE’tË ”t1I¿Ê§®¹”y¡¯;ö¢½|Ò;åòPÓå»ìØiç|·ùúS8ÃäBy™½“D,‡¶l‹%Dý€Zé)¥üHçÈé ËHW÷Âf>÷å~_o>Uu¢óØ'¤³¿.°gjŸ3ò§?cihÚ\ÖLâéow›ÿ‡>L»ìHç¨ÐyL{áE]€ÙŒŒ®dí`µ$IÊ$|ØPÞ²œ\$/sE-â°¤ 0› ¯%{‡ RbskÈJÀ¢§f…ÒdS‚%551à£&ÅuR´x “>¥.鸣p½ ã×bÓvO—|cF+†º£ù½è`§lx"zB#–Ðb.q4øý+ËLÈüç¿ÿÏÅ3H— £JÈÔç7T3b+aö¢¥Ü¢hM? ü-í³³c‘=„PÁôy.#¡u5ïïVaÖU ZŸ®ìd"Dµ-þé¿:“ƒÍÙŒ?ùTòö×Oä§@JX6ADôZÀƒÎËCÙ§U“i-ÿز¿çD‘§4Uõ‡:žNTK‹³‡ 3ž¦ý±è´ÖÈSÝs½/ –üB7¾v,}Œ¸ ¶F˜ F‚¦®û¼Í麩kØéUÚ÷iv¤¿À’w ‘l„Æ¥©Î'vH§•R|Á¨}ÜjÍÝf4¢€f&–Q[«éŽøÄ"?€Á%úÊ%±¤Ô­YíÌaqÓ'«µjƒ½ʪ6šËZÍxn.žIdã½gZxêë±FÖ{iv"˜²” âñòöÚ5pи SÍT U®¨:"ÀýÈW­R!ÏTF7XïÛ4ZŒà­ë/`´Öj2ˆáù•J=LT 5 ŽxíŠõj1SS˨­VÁf›HbC5kµùAH$Oš?ײX™üÞêäÁÊ<ž-æ&X”¹¶þ[`Þ7¯Õd½7À¼4"{#gúZPH»ºEæ²E™(ƒ‘¥ת_«U4½ÈúÖÒå"Še…2ˆ%lœЉÑÛÍæ#8A,ŸvÅ!þ&Xœ½ˆ:VµÑ\Öj´ssñL"›)×BP'å++3kÄG]$‹µªoj,–Cì*T¬o@C½N[rlVÜ6ZŒ)M£Õ*Ô`Ã'²b7BQä§ÄëÕèÜ^ E{>¡Ç9v®Ž­mn}µºž™‹g[Ï¢ÐÜ×£dl]³à©õéa½ö;5ApPÅQX«YNlEˆlTIw%¦’Óý½®85H}xE~‚“ù¹Ï“ŸS­×8 ö"˜«Úh.kµÒ¹¹x&‘mUœ†P¼0×™Þ¸W$l/n²ç¢{›»’ dMݧe¿r13+c¦tcQ’þçN„m¥úr,Xyí¯;×ìÌ*Mî™Éd0åfÍÿ³MÛ^^s¹`²Fm ÇQ–Ó:CçEžê|‚™†ÛR )bkȨí-dÕ±ót®úòÍ€X{Ú¶Uɽ@„;›xpÇMÜ2ƒLhbвˆª´Æš H0Zdà l4ë5ùyÅõ¢~#ÞbVT&Õ;Ç|»£õ¥„¢¸0§i«AUÄâ¿Ðþ¯é®hðŠ@¼{½­I y0òkžÊ,‘´ÕùPrŸïiŸøaÀm©%Mmªï&6Hû»Æ3¯Š9ª5û¤ÙýVˆ˜0ªˆt<1ûünn¦“Ýüq'XsoÛÞ»s0\C'ˆqÕb¼¬ºn¤L’!ýÔ —p3N(`Û‘ôÝ5 ï¥ùaÏ ¸‘ËèglÏ‚–ñŽl„ÈkÂÍaÈù é(6ˈDpÐv4¼afÝä‹:”©¾´”ö—:yI»S üƆý-¢\‡S[À*”¡ 6ø ¤-]T`¡ªºn¬L’ÅUÕ¼°ü·Kڕ͙ȢCTtRd]Œ/“]Ù ž‹úvþ °s'}š-êjf<¨qu…9ñÇO* Ác …`ô ¸ P,„#pÂbby¡O­„”ü c-~> ãËd]À·¾ˆÞÔ€‡Ù îèDµ~(« ZIwE9›˜¨P‰^Œ#‰¡´¤r‚ëEí ´Â*–Ë›”ÁPHÓRÕ±ÂôÑZ†OQHâGkýÝkÐŽf¬uuŒ€xDµmì±à?Ý.|zÏ–° Ç"áø Ó§ °¡;׊ôlÏš=³¼†¶túy»Oÿˆ`cU–‡¼yo˜çp1HœÖð>”§C'ß¹©é5aE=S`èßçe/@‹íÍsÇ÷i#8ðÜK(¨BðŒ |zL;ìäÈȬ:‚“±Ž:&Kc·6Þ«Lb°·p]™EÀî‹S[Å\(Š2R;se¥ß É=§û$¥À%ø›dûØÑe°¡Ë mšç]AŽ·É„“«¦ ­Ôàü‰g©¶é¬U:ðû‰Žá˶mšê,¡¨› (¦ Ús@ÍQ~OÉI¾zpƒ¯Fþ¾åcþÿF0vÞä5@Q5ÉïPë4‡Ä¥"¸žäÁëR¶K8]Ê6œÏE»g@†`Òp©bÑWÖÒ†S¶—ÿÀ2™è{¨Héiۣ݊ô\¦Ío¨›§¦*³²`«ß'ºæeÔq ÞÜrK¨ê&Ø …€†8•Lƒ˜SAÏÉá˜jÀ¡ª>–‡ã›ÛKZV鮬 ]ù¦OE½©¼îøÚ’°¦Ï®±†«UFI3ƒ'GU~Œ„²dˆ¨ŒÉ¥LGruà·õû¹è®8 ªª;d ÿÎþ¥Ï !$ìö<^#|=r?6â÷ð U ɺ²íq|4]'!.)çŒoaºþö^\i í¨øQdçÒÛ€XМ¤Ü¦m›õrœ5q3ÑUÔ•¤âÂN“;:ÔRñs_“È‘Çí²Ö%ŠÑE%3ƒ;¯É2࣠äT\[ÑÞÌË3ŒJûe»Ïh ˆùð›†+3’É],y]¦‚XjŠ®¦gœ¨F²ýq]ÌòÇ5’ÝÍ›ÿ°j-’6"ª¥ÏB+g¤Ø?(^MÿKÇ¢?G1€¨k丄f$ŒWѶÎ7ŸØX®ò«ÖÒ¥)~bŠ… v σð}¡K>3™¸zzI÷Ë(Œ‚PqF@›øˆ´/Ã;ìG,«^ÒºAÏL6ù£øëíç„þ»<•¸.Л_\ì" „Á¦5 |2ð§è1ð_*Y]ÿo·¾oÁ—8œ”IÝJIf|>R…[ú¾§ñàa¯‹žÿãVJßBûciÕ¨Ì÷Ç›Z"¡:’ÕDÛIJȆq’ŸU$¥À3M|zò?´¼éÀðUoSö$¥kšmF?ó8xßëPž½EùÐv„틦®®IÙ'X§}R{£ï‹Úñ‘//º†´%¤°)â "øC 0bebPá÷qX$IZ¿/iÙ³¶ ìŠþ¥(j~¼ícVv».¥/È‹¶j®°5OÌjÃÊk®Áh}nz2+‹ãGH 6 úýþˆ*šéÚ ’ÚÖËíÃ?¤°¥ó %Ï›¿òóæáqß¼•>@rú3|:þR SWú²ò‚éûçÊöREµÞHyg:"‹nl°]ÄÒåÞ–Ú¦Ù±`¹"÷:|¬Œ¦ò"g[/CWè?OÅiWtä¿ÿù_0qêÊݹçÍr¸1 LjóäÏ7ÿ‘Œ–džN3ÙS´KhêœÏbªøžÍÉÛ¼$ì´ЧÂÉ“Óü3¬”xÂ:o“lŸ,ž½ÐŸõvGÿ'Xþ¶Õo»¢Et~º¢S‡ÀÛ§o üFʾéJqPCßÀ!xÛn{ AÛò‘ü·< <9ºÃ{xÚ”x|šž—RºZh“pÃÜ;`#àVXÍV|§†ã|ÉNÿê»Âß$úæTfˆ«‰VRqµ©ÀG¦\ú£}&;wfü&øãÀÈFŠÝ³CòQt=T° <渋neêÙU7­ðÅ·%UÀ¢ŠFóP´¬Ø6¡zTÇ~hÅѼ×®HóøEÕ²áb2*®ÿK×T;HîYÔ—²kj¶€…"ý@¿Ëw›û·›¦J»’¼-+:Ïnˆ\{Ýø)t×ì˜öš¦ƒ —³·¾ƒŸîØæI#bo;<2‡–‡–N"Òx¤º¢¨S7Þ•‡'ö›p0Þ<Ø•ýîœ=ý–' ÚÆ„ 0b'1WÑFøwR`H¯"I’+Ð$'©à®&ËÌ“Þ1Ü–ŸåLÓBVÊÉ€G È"¸ÖÍK B¬Åðt}Œ™$ëo• ·ñØ^é t'¶"ÈJMU)ç%Ú¼ f'ª–<Ȩ7ÿAΩypö›â¹Î+ HMÏ “K©@¿žwtu\œ “£tQ3ß4†÷—ö!þö/Ò?8Ê{Öõ&¤Ù÷/Øü“²ÉéOܯäv]½µŸ¥§Ž£ÑNm¥Ø8àÑÕí_Ų̀IîÄc/Ê–;Ü•ˆ=ƒ²í(ªm7–õùG¢>õî誢dñx›çsƒV×´Cr gÇnPòÛñIÛQ¶sKga.¼ û´=W=¢„5E;d.¦¶r"ÉÛäDÿ÷LÀ‰‡r;:Ýx)súÕ¥mé/\k ºT»ÒÅ2­,Ęˊ•Ö\GºRòã)ýQžÎ§„KP¢Ð¤`ïƒ]n…S‚ý™N´¹ì\ò¢àv½•v,ö[ðvÜ¥‡øÆ6W¶²TD½}ÑCÿÂ=-ÅÎâJî¹wG§ðQ‘“¬ªvÌ ("¤ôô'ú-°N¼j`ž?öá,;ú¢3Ù¦5 ³Éyü÷aµaE>×`4220Q”u"å½dHÖ€R÷Œ 1Õµƒ$ƒð¼»âªëÆÃ$-Ãm¹ “üÊd¾°Ãüµ¡Mš¬u^^Êüœú¶Y³*ۦ閭—ã×7&m+!UV % w±¹ÃðmÝ—Éí~Çx×ѽž.3ïèŠíÜ]éöÌBnBxÑ)O¿ˆÚÜ€“"n!ˉíªsÑveÝG_±â¢8Óá·œÙÔö#áy†ÍSl@ç;å̃E|HP³ RÍ6\¤'óàýoÏm=¸­n?ñ8?]›¦ þè…«gذÊàçij[¬†* €É†Ä .2ª¸vì(¾0r¤k‹,e´ V‚«C©½‰cnîVÜ7íZl†@ö hMløù ¦ Â)>œ%‰ââX¶Tˆyð°™9ÒIÄeÅÎØ cŠuAG*&ûdƒøì+ÚíDÝŽqª; ÂêbÿnxÂ.ÉÐ]Óy½ ²f·«XxÓàø>yQÖ¿»q:zãÀ¨oǬIû±‘sµM³ Q†U"!(ë¼lÏ,xÅ{’ÜÞ}â‰>Xtþ³]X|¾`ÊRÓô`~æ7?Àö ]Ãö©¶ÃÑáÎ%…mn‚±# üùVÞÏ—iqÓ΋9¯”ü@œ«g~P Wöìš B a!çc¯å„òßdzÖ!Ø–¸Š7…X¤ µÍdR÷ÔˆžV‹À-ž´ý¾øA§Å©ÁlºšÔ¸a±b¦ÿ^Ê®!¤yNÀŸâú¶X¡â%q†=ÂmÁÜÕr³;MžûKtñ€…¯¢9÷í¹-^ÛÆì“qüÉG®MkÄPªhYI€ŒvùTtUR•».¥³õÍÛüér“P6Çø.t¢i+åä¡ ŸªŠP¥¼½dÀ¥ü×tSÓ-¾l5=;`&¥NL†s]¶ïÛgÑÎûv×u—`¢h‡ÉÅ„¿'û“6h~l¶«ú…ÝßÈ®;úßî¹M y¡Óîø–`6`>gÀ-Wo uÛ='·0çÍa[\0—~LÚ6èš,?p‚î a³®ãžK$žh‰Ó—ŸšÔó\Mižð'ü<ŒxK¶¨ æzž®g R|ƒ‹.²Oi/->lx±Á†óöXT-bÑbÒ¶ãTdµú&Íip§ó¤–H×~Ès´à<´íg”ªS:êXÑ‹ Š<ê l ŒÖyMÚk¤€Å°çG¨¤’J36Þ#woü¶Œlš(ü¨Û?^SqèA1 <œ¶°ØÀœýøm…Á×4£ðgE'¼F‹UÍ^™6šË Éb.žIt£R•×〄…wÑäUÊÎ+Á[N,…7ÀO~ø§4/Š”\1 &ºRÒÂC>vQ ¨ŠþG*¬ª9P!ål8Û+òÓÿó¿ û²¨¼~äy“’í®ÈàD<ç¨dEIEDjøä.[{)E.HáoßLêvtª°Ú³ÎU_¾ã'‰D”Êg(â2ˆwÜÄM(¹¨„Œ.m/µ! £ž&›? ဣ¯KÏTÝPù-Žs-®§ƒ Æ€TD Æ*"—áf.+þÂVtü)íùXb‹9ÅÑáN>ÓæU),ÀÎ’ú˜ð`ÄýµÀâ÷À܌Ū`Á÷Äå é$Ü«¿•E'6ºgªÂ’ ? ˜Ê‹—´ô²x|ºì‹`‡#6tk`k€ØË5¬ªìËDØOÍöž,º€œ`S—ôÝ5ò)ÍŽñ q§ÌfÁ^È‹‰Ãü(~мh& Ê¥Û’n°á¡¡jøû!Gh!—†<Ü¡ Ua§É—u1S>ÜRÜ_ö<›;(pOëôô&pKˆs2TÄfÀ¶íÎ5­ªìËDµD£MƒëÍ™È Clzî…¯i{ðsYCŸ/üòoBÇeßuª{!9Ù á>Í–õŠ3 >xƒ¼ü*Ï]=—ŸÅ Ò1T±'Ào|)E(ñ¨°®Y¡è§f‚ÊP²VŸêòµ¶F SZÆpjÁGnwtùZ—x#rb;šè‡°á§È›_ë5Ú1aÔýt(#Q¬UQxíhYüÔ*ˆÁ*;ÄåmË`)¨©z“¶¦~Fú$C^Ë•ù/â'úËWaOZëü‡¨1gÑ1’Í„¿¢`Š¢u aYqtÃËxDP0Ìýñ¶Ï‡m^^ žY4Ú™®ë(É~¡ÿêÊN†òbÇbòblGÂëˆÁ&M¹ $>ªÁ¨cÅLx4€Ÿ§×-¿¯YÓÓîö¾¸|i ä«a¿§çÊ{XôGÞÄïŸJV°T„`±ˆû+ßÚ/;Ø;¹=÷Ǧ+ÿð•#;a™~!ü Ê6°ª¨Üä“äI½¦æªVü–îvE—oϘˆ&&m+dUV;zƒx¾)##DùÀW)¡­ˆÎcËìxv#V*µûx¯> /—S¶½Ô?¶ä°å ƒâ‰X,XYLåµà8ü¦Ͻ&RÁlõýã]òý³/ [Ñgù_¢;UË d†Neˆ‚"úþ”7ž ˆÑe¬hù!B"(Úª…'²¢ñ˹J-@‡ÍÕ@U®Å:ÜŒgc¹Š.¬DaÀG4[M͆ Ƀ+;‡€®89Ã!%R¯tÅ©ée˜'v|FÉàl’“L’é3s;Ày‰¢ë¢èÂb"rFv¦SˆKQ]:ã¦ÝŒ4CJc:é`#,”@Ç ß-Ê¥«kÚÁ 9’*íÛ4~7C׳¢àRjG*~"¸x£EÃÓÔ=(…°¬š,… …Àïé¿ã;§©¦ 4“S¢á'p?Ÿ'²ì^ÐÏÒ;ÈzQ7/°@·¦hÇÌŬ1©¥€gCkღëYQr)µ|?}-øQ·úÏtÆJžKL@þ¹®¨”äù©Ï-ÏæF¤ÞõQ,dRb­¿œk:4b\.¦šv̵Y!ôûbѪŠ,üSÚ¼w^:‚ÁLÕudx¿K"Ó8žÄL]œ%¼å™hØHðsÓÀ'È}7\ÿÆË¢wò°›>3e;£QTËØt¬_ƒ=¥N4qtÆéþó&ˆÎM] É(ªn* h#Ïpè‹m¸$ªëÙq3©Y„wÒwÍ5ù¹jviÅsÙÂm(úï÷?X.Ø*yx‚Piü ¿ àPž(£ž‹•bÎ}YoëÏwï¹wÂЀHF™.˜Îö `Cl±âÄ?ÕQ“M°5 ¯‘!K±”c¾9àsw¦‚ïëx Ð_~¾{ ©”*ÝA±ÔT]Ô¸ æþ 1¯¶4Z_Ÿ˜`ìò.îN)ú·¹‚n‰¾âµÇ´«S‰kû§2¤íŸ„[£½tS1qÈÇdÔ,R~òêñáçŸBJ…Þ‡|ÒÆû!©6ûzeæðt5âL\×s•o-ÎÁ MBºðB2cBH´Z0Üæ(ÔmºÍgýa ›Ît![÷°6ŽjÁèXîelCôvµû£µÃv$’S¢°³xæ®”®ç"ЋäL)ÏÏG:‰<¼"? àãÚwSïû¦©þŒ@=Qµ—‚<~d^öÉÏŸ¿<¾‡[,ûòpî‚r¢²v º’BŸÔÙmØÁÏ4,Ó™4yÇåXº*w@ˆ6´—´Ë!PF‡IÞn·á"4ÑðöïFù¯`:€Ø±H«þ˜ ÄÛ¬ï"¤H{É|eCˆÈåì~EïoX ¸¨¨âªÉÏwrÅ×}x¾¼Ü¶]ó㊪ƒxUÜ[߸ð‡ÔĹ«¶§´EñÐu]„¤ý/Tî1m€Ÿwä¼C:ªÕðáP`(‡“¶Öà&ð ¶ì¾5m™‘·ú,ëÊ–ßõ™Î#ß$g$bAûtÞQÉàÒFó £¢JÚ¥×½*É‘ ¶ ò$ 6µàå¥EÚ´ÆÜH™jÚ‰ 9 39³'oïEL\†~Õ|ð+ï‰ÊAOèÁrúÒß¼í¾ì±÷ÂfªVhƒ èÁSžÝé¥+iYÒ§âZ˜˜ùøiËñu1‘løuyíÄžÿÌÓg°‰rÙ¤ŸÄpl ^¼àHGC‚e£*{ˆ0QƒÀ,gtL tIȹÀ‚V•= ™(ý½,^$bök ÒM%¸èC¢L3ÚUÖD±v´ŸI º\uuf!lH+àå$ úK±ƒöƒH­6<$T ÆäïìvòÜKRpò‘œÒ‰abhFᘫtii´à@®ËO;—OéN4WûË›0&CÆé]Ñ,“ME­Õˆ ü‚â&Ä5D7¾ˆL0 õœDä%"›çP??‡äßÖÞ?äÃZÄbb%¨N¤ŽÊKF<¡ÿüŒr<¹ø˜M$Œ&ö›Ÿèz(M¾öÙ:ƒ-¡ƒ­«{pK|mëI$3ˆ#±´}Yì„Ñ2¶1¿ä{\ëθeŒAÛÊËjËøÓ˜äCxå 6_™lh“㖠澊ÍB~gEðê¢x¡œ€çº.ƒ°¥…½eÉèÏ5ÿ‡äò ñ»¸%ÛDNÇ,¬¤¦òÜ;5í,y§vûŽÕþ ò­{qÖ7¿ús(³¶ÀÔÑ\ÙÇDysëû4;¾½/à? üL†ƒð³ ó\•f‘×:Œê> ó‹?ó'6¡ç9]sA€U´¬Afp Gк  ±0÷0&sS6Iv„M–Ê–þ™5]¼ŸØDÑ Yˆ ñc†ØÊIÞ;&E¡›¼}Î1ÅmJëz6°BJä+ƒñé5œJò@ÿOaÒÕEy8ŠÃ¾·l:G=C’jžˆÀ ædx¢ÊÄKK:šž«øTs];ÅAR¿z¥ÝµùRwMײû,!7lŽE¿[§(YñRmÒ÷·3]LÔlR!./‰POЭ|iñ³p@ë¼À;Z^[¢ ß.Åä8³Û°Óši ÝGïÿ´mU„­¡>2U/«þš…A/+ðwG§&ð²ó3«émn2Ò}äJ¬ÍIÅäበ¸®A3š¡:h,å²(½‡ËŠ—ªcc”9Ë"${¼ÁÍ$–Þbfq¤VçpôZ÷XtÙ™.–ªäÕñð“¶]îWÒÿÄ%Š–"È®þðß!©ZK§'=Âó{ªi‡ÈäÈBˆ±œ¿cLñ<gt%kz!çžþùS9;ÚXi‰øM“¶®*«^ eS#*+þ’r È‘Pøhäa y*T}fÀ§pB gp%0({ ¹ÎßèÓ¥rËÆß0êâºKsJTì8Ÿ0Égfì,LJŒÏgX±\)¡A+üÌæ;£¸·é´tXÝî„àLÕJddàßÁ?Ä}<1Ço‹ V`ôËÍË”NB»æ|8&Ÿ’òÓôÆãÖQÁùzÌuÝdB¼<¸$nî1Uu£qm~ÈÂLëøòlêlœ5=;r&Å·£Ä‰|1ƒ(ˆöîY®éxßÛ‰¢²Sc…²-5~;:Â]Jh3NÏ´ê^l)øP¿dÛ"#ãEhôfVqíZK:^ËiöÉûŒ¼üÊKÚ€Î)]¸ó .!¬.d þÈ8Fº²“u1¹·÷ ÏBƼ´ŠÈ\ßÅE‘žÐQa'ߟî “S½íÁ/ |ªí‚=È:ê`óø™9iuñxúˆ¹/5×u1’ßÛìíû‡'DSÛ° μâ""šÙŽÙDËÃò‰Kß a$á¦[À²é‚©5—ˆ Ytå…%,Æ·¿™ /£AÁÇ‹ ¢Û$!ôš—ªí£Äd=l¾2Ñè¤ÇƒÓŒ›®ä!¹Âü¶Ö*dQ—ü¶âhO/5x¹Ã¥,ÿós?̨îeÉ„}ĸP›rwÚ’›§Ú¤mã¢Éên¥ì'¶3þðî1Ù@Øòî|Jn³¬¨¨.ý?¤§²º·²øú„qc‘ê‘Ì]/ä^ìÿ oÔ›ÚtV~â›lq,o"hÂ0D‘U-PæòÃÁ+þStmòl›¦Â2Tt=Ü@’±ú˜Ö9¬¯à‡©Kƒ»ábT÷PÂ;qdNnaÅû/¥¹€b =…š<ðÿPÊhI¥Þîi|îâÇ>³¾•œ.­ž‚<ðG‰x×+Ε}€‡~qÈhÆ~¡C€ÀíÛwi§?§—SÊ&u+fM˜¡þ ÿàÎJ2Ò¬)‰År–ýÉd_Ý=|ؼN>Øx/ÁóWvE¾/Éq+ü ,ÍVÜd':Ú¸üåÜ¿ù²ó~ÏxÚ¹jt(ï¿ÞÞ%_Þ?&_¹äöéDÒEÝÆq %;ÉÙD·¹aÉÙq¦÷EUáIâ¶„í6Â(†l먭b«‰0”Ó­ã§æ¥èÞç‡Bâšö’Õª‰®nW6š¶kØå\m—-7£&÷YúÁvè´ñáÄþÅÙrw{ýÚ<¸â2½W›»'Gs‚bÇôùº¢•˜Sûú;Õ˜<<Þ%´[ÌY7:T"!~}¿ù5çE~Hó·¢fG BZõSÚõ_6aù’Ê:/~D@qån€ò3è}Ó¾¬ËmÁšÇ6«JÌA Ãˆµ€ *QP—aŒ†jO°ˆö$ Íž„!ÁMÀfº4 †·®šézð€dž Î%Í%LEBé¯A@zí*åƒüíáéöqèh×ÐWÖûêü#ßmsqYƒÛhÁA@—Ÿ0¡ïß%ò! ÅÏ2®âÁ«ê^ä<»ëx“ÀÒõ~YK_ZI#|W@”*E›{Uf xX,y)MõŒ•2%L¨ ¯Ô…“¶—È$jüþp+d°Â®ßã«ê^Äüª?@þ•ýKmM,k`pk*·¸É©®h\Ž¡f¾½éóàÂÏV矸g&sCl]éŠv˜\Lmƒ×8mº·ÿð"î[ž&};^MÚRºœý­Ø4P^VâMa‚0ákgªVLpž1Xüþ[ZV^˜-¸Ôˆù–®h…(ÄÔ†!·aêôT6õGA+Û½ 1UµM Y¢E Ô]QÐa~²²Ûˆ¦€>¯ 2¢®IÛÅaÕBF ü ]„Ò Š›;×õ"çàþ_ˆœw˜;Õtl'0ÙƒˆÇ]š¡` Ê. RÔ„õã»Û;¢2/jíӆǵélÓYb Y u|­Oµ}@­µß„6®AV¿¢èB b&ð{ð¶~˜ì‡që8]Ñ…sºz“ƒoTŸ_‡ÅT5]Çk´ˆìc¹¿bOxfºvœƒ¤~ùî˶c0ƒ°ùÍ>¹6玻¯ƒ'Ðv/éÕÏ¡Þ7eƒ§1Ww0Q„u2”Á¡hªFÜ„ç,‘!ŒƒìŽß˜ÀËéT⮕L5íL„œÒvØŠ˜N‚!Õ>aÏó‚å( AÜÂñ²ªêÄÌùU*ö¯Ó®œÒìXÖþ¾£g¡_ ù1fcŤnG­ ó›v)Ü<¿'üw¶µÂÓjq§+pç ?÷òÈ> fÙ¾dU 륉ªŽÔ2ÒõÈW‘‰ªá}Wf„€ÏÊÓ¯,ü¥L®êãÐÅûÛ:VÔ]fËfD1~½“¡* èÓ¤.½¹JÒlyàûx´SU+èAPd¬¹¿ÏÃæ o',耸þUäâ"M— «<`€¢æ‹=ÄDqÐu]$„¤8 æÿ·~Dº> ÄN,=˜y¢Mĥ݉¢ -³^ÙM!”YP¼3¶l5µ ó6-²Ù mì†o×4'/Þ²BmËMí˜Ëj¾%²÷[zI·&SñTÓŽMÈɤW,(Äþ‡-™/Ã[‘µ¢&²† J,:"ëª_e) ?…‘Z8Bm'©ß4uï‘üU#A+ä¯Û$ÜkÅ·Nûm×ø¡FÕ²"†øžÇ LÛ¶7Ù—ø×wwõ[Q?—t@û­Á1·Y°ÂžÊG Dù/Y „à}—D=øê_¹hBEcX,!Œ]yü™qÙ¨îC«dY¾ÕRŸÈòåÈypv4rM݇œ ‹1»ÈÎüÒÆŽ#—k"–-RÀþõáëm(Ôgj§ªâ¿K]ÏXH©Íùoâ§Ð–ϰT®¶»ŠNj Ÿhôb<×Ù1¾#×õì™”Z–´èè°-Žîýè®cÖûpŠšiþ[Ð7 ¥½Øvçx`ƒŽՎџظI(iÃùR³öWvŒp[µðé*ëó«¾l«èiBx¹ÏTè™ ­Èáa€C 3„ o6×uÂU‚œmè4‚ýÉŽÅè  A%EÚeGTM× •K ¨ìŸð͉"å{%¬ƒ;ªr¢·i]7=[sÅ÷™°²˜)èÛ?‰ò€Òâ^"u“˜ùñTÓäÂsb|bò7a¸ã ]Q @,†!MsÒð=@’§ŒÌ‚B·ˆ7_þ‹yÐtær!ÈY85!C¢pdw¦`5ag1UP¯ ?“rAê:Ê‹+ˆ8ßîžØFè/÷O<°‰—b•ÇoÚ(JVTdØœ=û±8½Þ]ða;å»íó%~Ž©éYr)ã óÓ£÷ [[úg|ñMU­A-˜’¥‡KxGïæ°maÞ‡8JŸëÚÑ I–_,‚¿wF«9÷í¹‡= *âÝBÅò:ÅVh©˜’Ûd€JŸ°Í–OÍáþó­¦BqP§Ê¸r¨!® Ÿ†Çáxã›íD5ë#Œmà ò ]+cØ’eo2¯Ë‚Š€ ‡` lq½PÐû¡—Ù©©! v(±™pP˜(Ä€\/˜À! æëÒUp˜ íËbCq"7âÍú>ĆÍx‰7p;¾º ¾£‹÷ã¹LƒUúþ(ÃvBòYV˜ õ•ÿ*}%néÐX‹L«À„[Õ å9¥ëY!þÈæ~Sð#D5JK–auô§öÚ±Öé®a°¹øÂ5h;(Œ²ZëüÇ”¼ áÇKÇñÓ‰`°jšœ\Ž7‰3ééäï4ŽWð°DBÆ—bYyKPAûwa`ž ˜ç æY Њ^lŠ>Ò'ëU^õåï[ºgçÊüC`uÙ±Ã7ji3Á5†É €h¬ ÿð÷(’KÉÅ‘r‘aUËç°dT÷2˜^Ü”—¯„s’‚þ&¾Œ‚ƒg0±à%!å <†èÞ"ðÏиP̺æR戡ÜfÁÏLȘ 0Lúô° ~m/uÕ {Ž¢PÔ)Â[Ó¬ï§Á¤ DøÔ½a“¶þä±Ï.GB/áZWôÖ÷Dј‰ ;ôYWä]+­„⣸É/VL÷7lÍOˆN¦’Û¶M6ìÚŠv=„]‹£âoü· Oiß•?h5;`ç3j¢l¶‘Äüû¢;aŽÌTH…àˆöqüMî…K§’ÛÂ>`îÕí°Ua~[¨y©Á’ÀìñV>7hA>ù:„¾öQ)N]ptÿ‰ ¡+ZáK1yå,¹Ç&aì/?Lðn„›»]òSµYp×åÅEøßÏäQüD;¹G&ÇVnp?¸¬÷]JúîœA˜÷×a´à?ì¦n‡ÜeÅCO׉D‹ºÌå0ŠužàúQ<‚iKN‹ž=ü|¸ðuÆMÄ|^TfªFÎ%507†r^úó0à¥ÍB„!³ÚXMxX( êeQð·Ee¦˜¸0öaƒ‰áµ„P0=ÛÐÀ,BŽ Ug5R#Jкyˆ˜u¨y&WcSS³âgBZØ¡.ñ kšþrHvÌåÓ´ÉiïµC4]ÑŠVˆ gÔ”¹žÙD"îF;ÁD µìéŸêü·g3v™bÌPü‡.…½~v†J§°™÷ù0ÿÞ# JVÄT„o…‚K9*çäpɘ¶×¿û–ð´—Ì€zh¾ùÐò{µÍÍVW´¢b‡ÓÇ꾕ٮHÐc*•SCk‚üxÛñ þ^ˆÁÀ SU7 ƒ —=×uÃa’AxÄe”«Í‚›"„·…1Uuc ¸'Ç/iWò G8DS}7¬AÚƒ |¾ò¦ß¦‡CW0×€lløfòjý¹èaÃ"»ÿò-¼cŸ4IGQ<]ßG@HÛàÓѦoè{ÙLD¦ô:¡µRk<™sJä¬ùÂh,è³P°¿÷]/{Uۘɪ١8 âÆØ\ׇ‘è7ÆÔ2¥¡¢:0ƒ²ì° ÿ`·Â“L;2ba"†ÝÙô¨˜µ6 !<Æ(¶«’á>Nh&šº†pù²4Ÿ0o+j <+ÚíùÀ#÷$\V,æ:ŒŒ`¡Òá2Þ!”BÙ`à+jv¼ ħáEИP£8Ù|æ"]7SsؗΛ—º/O|©mþz«¢ÏÎ-*áLÕJid´NC#¢¿F„q¯‹J¹Ì¶9 0u ±Û°ƒŸiðÖ¥|Mäcƒ)¥ jô3úqjF-;j*£:E夛jZ±K9-¹m×ìÐDˆ,ua‰°kèèRìæ›IÛ\‘x?ÐßUÍäóE~ÚÏ0‹ôÿ–ÁŸp3ÅÝ$èÿÅðÈ 1É"" N&ª¼“ÊÝçÛÇ÷1\`¤¹”Å ŽÇDÛÉAÊ:ñÃÈBAØ÷å"ߊXÒ8&Nš‚›ÊÇ»§äˆÃZ@¸kfŸ¥ÆXÒ´æœ|q'–‹#¢]Å:h(J.¼J~7_³û­ðޱ·œŠ& í\×Y°\ÒY¦\$ óEbªîFþ#¤A<þ#¦9ÔiÛw‹(,8Y¨òN"ŸoŸ¾}âÂÓS!ihÊn" – ¼”áÍ?=¾Ó7Xááïü%™à€N¼ûmÙâ:]ÙÀ‰Ê©ç¹ãWæáç$½¤eû°J^v’3¤“f" OG·àç¤61;1)Õ¥õ¡Ð¹½n}±$8ßbƒ²›ýŠõÆöL2>Cn9î–ðsȽ;fwi׃ö_‘½é.‹8ÌôFi'‡Í×ï1úËæH3}'‡QÚÉŠÅp@¹€L5¸G÷Çdû€ôyõ)m1‘`t=+V*5†›gõM²/ëœM:™(¿xâ… )9¢‹TѲC¤2“ÍZèýüQHëæ”æøÀæFu+JMxjþ~NþÚìHp=Ác „ÉýLX¸8:  0½É½°ÄEwQÅ2\÷£†§>`-b'©õî!µúî„@úŒ¹s9ºÖ{ÜÔå-â6¦f…؉6c®: ‚„\,WˆØ|ƒm¤£íBî¼anjrnsÔyµ®hÅ-Ħ|D'îÝ?!vZb2‚o65ï>õÿÓ“Š€{Þ3× ­ÄóÝ—E•‹øöxÔ]ú²ù¨RäTZaA‘ê¾d™¡‹S4vr ˵¬€,ëøî2ä`eT‹‡mö; ÝÎx|}Æ2vÕÅw8ù½‡åñÓ åZÔYÕsW,¬!³׉V4æEÕc4Ž8¤ràxrÅõø÷R3˜&t|tЦ kÈeÎKÛ¨Œ%²¬ÚÖ¢iÌ+Ѽ ¢V$„R>º÷Âæ°½‰-•Õ Wê¾­ÛÔ)”ä>[©õZ ùHNÕâa/j«f; WhŸÊýñî˜Öp½<²‘*PV(ƒXú¦&i¤3¶Ë›`bM±ZÓ´˜ò*bÀ/l fKQÐ×h¤wÍûø¶Ù+´Î¦ˆnŸMál¡ —èSD§eJ'qâpGÄ{\ÖJ ûÈûÌ,§¹¨=‡Ù]@2vÖ7içŸD°÷År˜w\¶A¡--/Ó÷a/ƒè¯E~¸ÂfÙça³ä£>ÓC _Ôâ-†bpÇ.3eß¶)Pt×`MRmˆŸÞ›¸D·>Ù0yØí…­ÏfÉGp¦‡@¾¨õY Åà^Ø£nn?‹zí0ì× ÍÙÔ+*<"bUÖ¨ ‚SM;xã¾ îë%½&¯ÚŽ2jΤºRôìùævõÃÿ‚‹Ó?Åæà€Åþ³ÛpÓÓ4æ)ïxL¹hÀ2C5ŒüÄ,&ÂȸÎö0bÁ!UÏÌ‚‡Ï(社a±¤V¦B8×H‘¶¨·%ÉÂkªj?ji-7w›‡!OsŽÏ€7ì÷Ô;’oÛç ¶®ëÂ-$UàƒC¯pmy·¹€›ÿ¶7Rú¶kZj£ x]qøµ¬ªD8ÓÂð'žO‚²Ð±˜Ýÿ•ù2‚\N¸d³#”Þ0«ðê´ÎCÚK“DDÀAƒ²‹·5:‰‹Zûµó»¹âšW@» Ê”sE`óA#?¶y±OϦ+[¡*¢ó<ñ,R‘|€˜¤W„öTÓ…•Êùp\Žà‚‰d”3€QߊI—Ö&lß?Â=ÄáQtó\_îŠ-â{Ärqó3ªXBŒÒwRNv:!\OMÝ«ëvGû-x†¢Ù†‹ÙDcJH–IŸ•ÅTß]ƒ4²%¤‡°Ï`•æhö«6÷ ¦KdÍÜ 'DZÑìXBÚ f ?Ò¨sÝ2^Û4ÕBŠ3>š£’*³àcØÒi8¤µï†ÏX‚6 6~3ùÉÉ/º‹ GÅx´@Å0i;p²*æ4Ù¥djíiò;²]ï'¦ÃVä7aDÊvKλá|g1à¡3ˆóìft‘r¨á8IüÈ«½@.m×@ V,]ÝÃC+7ߊtˆ,{F+ETÈ1¼B9>W,MÛCËšÔÉfó1‡( "KÚ÷´×Ceµðò›©ñ¶Æþ¤á?´–DÖâÄG¦EñŒ—ÑŒàflvâQt•Òƒ|Ts@¦BFGæÄŸ{Š.?÷×mZ¦)™ôí5i~ÈÑ•úëë„‚¯›—ªÈÏÉHšêÍ…>½§:´è³28Åß’!¬ïRš?+..hÏFJÅsFGÏÉ”P‘‘¡ø•Õ“ij ¤¥&¦±ÂJ§/jnBÛ[7/áõ‚Ê fT÷×ÉlßÙ/i–5çf[#'/þÓ¶*O%bÚ8Sµã–‚s“CÖ Oe}þ‘<Ý>&ü™hŽ˜ûÁi¾*è1(mn›v}Á¤¨ÙQÐ$â ?H”}À~­ ÉÀS­ÇF€0iÛA+²jš«áìĹ›¦;ü÷?ÿ‹°_“s_V¥¿Ñîºs½ÝôILÁ+ZV ÃÝòš—¢{×50ѧ¿ù)â㕬x¨ˆ6Ò¿©^V ã¢ؾøQdñe¥ªYÁ1!J¶köež¤p–_°8˜þœ°m™=WÅ6£³«lŠ–“áÉÿÉW¤ðQP¯‡z[æˆqT²ËÉ$T"-» ’<ÜÚºà—Rä寧|½_JÔYôÿâÔ‚ÿÕòò©ysBPRõ쬘”ðg¥cÑÛsÝÂiéó'lnäm¬t©'Ú5ΡÞbÀ[çM¹låÇ¥ndø ?þ3î¨d…HE´ø„ú|Úɦ©ÒŽ6’?ý)y`á ¹G1´— KT½åéÎ1S“º‹Î(¬óÒH=âgTÖ"eíÇ_ÖV·m‘î5\|·¹ÐUò£Eø´ªZ´µÝÉüCWeòþwò?oþÝÆf LEϤTð}¿Ûü:|ƒ£“KÁÇ[‰í 5A8LNá+/t$¡‡›vþiBÓõ˜¦ºž—²VøÏp‡® €È"rV ¦®ë‚*$Üþov:-;8%L4R>C¤JD$_ô² ý®¶¯¶YÓ"Ö“F};MZLÛ[bzWô/EQÓEÌ<ÞÒaýÐ¥'¹*D ïÁ*œW¾[Â*ß…sÊyê‡Û<ç{§¶0FàÀ&~¢ÊR&B×ÕA›Iãk ÁÑF£z%H˜ä䎕5s‡‘¤$ËpBeþc ¡Q=€V·4(§îe•uN'ãC¥EÐAÍÈŒú!„¼2âÚi8—*Å ¹Fý. -›y-Z‹ˆÌ7ÇÄ ?S½„Ïã oa¥‰œ…GDÐV—•Ò£ŽûKƒäð¢ùø*¯h^jÌ„Õl €矙Øê¬þ[³7USXš?åía{Ü¥Ki(qyYC²mò³Z¶MG{sÀI! ÃX§rÙ§Ö–1ŸZ+ojÝ‹ìYŽD³®BfË ÚmR¬Ó9YDF1ÂÄy/Ø¥0†èÒ<,Ž3›}²»¬ö¶ñ5ñ`ʬ‡]Dqf&„è¨4¶E~Cùµ¹ÛP4Â)þ™h—S Ðbâ|»ç¬Õ<ð{`*–À}ó´¨gÐ,`çòî¾›ËD°((ñãaµÂDhè1¸;ˆ¹ ¹1+pðHõ>‚+Äë—qêcèôÚdèÝô‹ümJ×EïÍù©¾£j–õCQiCCëŠvè@di,9ïHÖ•íÒ~Î`'„ª¢ØÓ©*á4Ùjr ?Õ@1&nþ†™~±ËÄ ¸^-¦¤Z åÅtÜ]á('š©²Žèçq§ÈFýrÃ9²¬3ÖªíPœ,¿‚YúO†ïop&ã9\"‰Ò9Ê–*ö‹×–Vk… ëªëNø±$}™‘ù²“Mà< Èú]WfÏD½ÕÍÙiÇÊÖ¬5Ý1ài) ‚™ü;&?äÝ»ônbÈ.bN+6Á†FqâsÅn -â8ª>*>©·¯òSýüp}æõ¶°¶¬ö‚ˆÍµ'<Þ>5?< Õ5èES²~fÁ<~œšò®«´Úpð˜jÄ8y?qõäûûÀGò} âöZMø8â¢ñ*Ã6®ÄÛgªF ÿ;2x¢|×3"7Ü\×WôÏ5_2?åÛ'/NçWûþøÓ0ø<Ê+Jà«:¼pÁý„°|‚¸(O’ÇÚÎ ;õp bÀW'RÜ@èËF¹@·„>h¢Í‚•61þ¹kïºÂœRÆÏ(’C.®&µP؇ªÙ¥Õö’v%[Îàq[,yOõB‘ófºåxØ&3^ÌšR0à«\{,(å¹?ØQ%*ßô„c€PçF¼P•P¨Ê– VÂf¯9ï>Ÿw‰øEŸ„!/ôª…šAŒ<M;d!gÚ1¢Ï`c³A9KœÛ³Ñ¬ªÙAƒ<« ÿÛ ¨+öØ0 e;¸QTx×0Ë"r3+É'p‘A…’UJŽ·]çÊ,ï–0Ø…3ØÅ2xW¥¹w¾~&ÇÝ™J`ÆDÕŽ^ ŠÌôuN’ºé˽èÞ\Š{¤ £â®N]p‡H«v‚âû¾%ÿëí`Íû`_û#íÉ»â÷sÙ|Ùp<–¬Älzä¸É·ÛP îa*¾96/ —HÚ\^À3ޏL—Áº¨³kóØ€ë.¿Ÿwt†!2Á°“£PnSM&'¼邇¿ðÔ©“âlׇäï CK·mûýу¸Kl³Y´ g·acaÐ ñ’`°üûJüäã®jÎyòŽÝ?’Ôw¾·u;êòÄr âƒá<ßmåY#ŽÁÜ€“Š"Î8e|ÿðm2\Þ‹;Èœà½tÆ $…åDAA./ó[°åÀ`Z9öÐó$ ujfPöÕÈp^6¯ —²ª j¨vÈ·;á»y<ˆ‘ÃO¬Î¨2¨›¼ hª¶‡ —eœR8<—ÇËìt‡M²¹€˜_O+¢'ïë@n„Thf£®•Tïúm6Ÿ’ÂòÕ|w \ø=tnøä5®–F=*¥r{ÿà£6û@>oÑvE)ű 5uv!¬R 8þë¸iâTÓÞ’ÔÍò&hS-+ä7­j:aƒœoÐþÀ„§)¹8›_À@·àe"å£_Zèa_Óà¥æÿ‚>JŽƒB°¬Ít8²À%"Z‚AÙÅLŠ2R¬¿™"~ Ÿ‹k›–¸ÑZ×uA’êÉkšÈᛀ»©lÖŽÿ8 ÜІ¢èâbÓ/~c—Š–}×(Ô>ÀæYF=ÌåÍ0NtùH¹î„Ä®k;‹]ÊÎŽí-3½Ç†Úh:Xö1½›@:x¨£é¨Ú>:LA‡ë±y‡²¶åŸz(Ë]ÔLÝÇSé¦âˆ÷^ðu/ ÍË`ÄÇNUApTÕo0TÛ*]‰¯b)†4Ó[È‚·ÑÇæŸëº(ª™¿M]'i ÛÏ•¸äø.ô÷sqÆí]¨š.6LβØäÏ–à'YÊâ`ãòSÛ,¸øhò¾Iêí¹o@¡KÁ­Ú‘½—PÒL„pâ á¤6\/ybz>rEšo3r‰§¤+Z‰1áÊ‘ÂMê»Í÷›i]‘ïKrÜŠŒ…„&};PMZ xñåÜ¿ù²ó.å™ûÞÛ:5…rþÊ5! ¦„r~0ªû ±DÿR>ÈE³AÛÇ&ä EÊ¢ÎM Ê>LÃùÈ¿¢|i¿ì"ŒÝ†ƒ×TCÝféŠ_ŠK@QdÇ‹_?nYØîVŸ¿‘a.Äwæ/€’ĆR”K±ô§Ë˯ì¯ûwlÍô‚`aÛWI[WI.×sðaîcÜfld9UË_ û¢ÏŽ<žÛ×eø‚páŠ2 ®ïiÙËþ‹h~äuBª\òi;ÞWgrô!=o[UËŠdø0ùñý÷·<HJGõ ¨Vݱfñ?ë±ÿ=Óµc$‡( £Ë ºN>¦}Bš}ÿ’Š@£µ?ã$ØåÝ æth®ìÂ/EÕ.Mâþ,&ïZ7vdT>Ù>“ÐÞëHNô}U:Šœ+Ûi¢Â“‚Ý@ÿ¥†¨¬7þ*žŠ³ù0àmC`evÅbŸè{àKi­bûð¨,ÈJÃJ™"Ö‹£’• ™åN¤Ÿ@»âB\œM€`Ó¼‰y?B>g0(GƒžªZ¡‚6_Ø™Ügî½!ûs·Í‹¶j®¨8áVv SFå3°¸Rìì©5Ó¶MF9oœë6ñÒ¬B/m&¬lf Ú‡ÁŸ&·wŸ†,Q7,°¡ôÍú>üj0ý xñ(x‰‚[€ÔóÎódöy.’V=ééBåÅdÒ¶ádù°[UÍ ²nrÓï²-‡+KÓ¨lr*뀎—á=$»;•aPkþññ^{˜¶(è$‘\kÚ‘ƒ‹I4¶þGÈÇô¹ ,Zú©=ÃÔ€)…˜>û&Ûpyâàšñͬ€'⼫?JøsGëPƒ×Ô,bçÎcÈËj¢¦³œ¨øC‚§YžðIYF¼ô•ùñÿ˜Ý|`Ìä‰ €ä÷—Ÿ¼µ<µÛ¤ç_°®Ä1þnæ\×ÇIo‘×3Ç×µ‹[ÙÒÚ˜f֢ʿ]ÚÀÚ¸ÖÕF7-,¯%”‚ÙèMëá ß!|çº^ÄÂ7q@ n2o—D4ø¦;¤uù?5\ø•XmyÉÍ5ƒ¾U ÓÖ´×.ûšl¦â¨G~aKù“";wà4°$Ë}ˆ5o)˜tƒš€T–²f`7[‘MaõrX«Pìõ®n#¹±ãb|_7A×eW£©‹­i5ÔEø+,` 'Ë?ž£NàÇÌQP—½jéÇ;5J1úcEó\–cÜmÇÏvžiÜ[¥2‘ø² «Õ`&œjlÕ.á‹ËNiÖ÷33TŽÏL¹`mÏ®ÁVžÆÔ„—É  “F³q¬~l+^NªNЇÆ0ÍN¼jÙG67J1ò[Ìs)Å(vz‹”Ø£Ûc±7LÚ‡™ªø ¨çzϳ²œeRà”¶,zx^ìË:(µ)ØÃKÙîžéÚ9IF¡©«+Dÿ¦¥L—Èp!&éSòo[¸PF¼7¾Ð-&À' jÜbåW~K œCeÅ´!^†Ô~ƒIô¤ë9Ð72Ù“l7ŒûÙ7Xö·h=^Èu~èÊYS´ƒæbJ˜pݧÅ[) Ãèï?ƒÐíÓƒ/9#o*Ìu¨¥¤v~æ—HΪÄ ”=H™¨Þ£p¬ü~;9?ÍïÐum7v!k/ŸÄ£'´ÅDu7i»Ñ Ùy+‘hñÖÆ–8@ZMxXÜ ÕçÑËòa!p+jv¬ d2åM&Ð_Û"j¼„bUÄ´sªj‡.5ø©¸Ç|€xøœ÷ðâ¦5›MNQ²c¥uΆÄÛ1í–3–÷S¤•óaÛoEÚg‡щØLXqÏ´¦LÇîüCÙ25ñSà£Äè±@0$lF4f*Jîùëö¬èpÿøýá‰ytnè?nüœ†Å¶ ª¶¤‚|Æ­ªæJ“≨>º™5\¹EŠ'ë7ç ëP6–løWtyg|Ír–±Äœ\.Amȱ¨.,~¢½¶gªVÀƒ C 7vø& uÆÃ=q¡k;äxîá}|AëŠv¸\LD¤¢ësöW*CÂûàU[„·ªe2ê:v™€Nu* .¢#«W¬7;ÿ”^ýGÅœÄ⮚ž¶t+ã«¶J¯Iqaa¦h_J‡c& <¹ƒ Æ—nê_yh0(ÍA5Zû|À¡©˜=ç00÷·ÿó¿“?ýùæÏ>À£¸!ËÜ•¬6¬4æQ8qÛx6a(Ç-¼¢—©¹gËDPV^SJãQJVœTD›Ý²1Û æ„> ŸªÚÔcî!Èö‹&¥eN°Âwsóùñɇ›g|ÞþÑÔˆæ\ÙŠ] ®,/9üî-ã¦Ë0æt=;B&eï ˜ÿÅMÿùó/oق͇¸¥ÏºóiË«%¹QßÊ@—VîòŽˆöÁãÐeÑFhx?µ¶:רáLW´#1e@ƒMWˆdw®ze\Ûp±ß¾=%ïáWçµñÇmÃ2boÓ²-ª”ô%ÒeÁmÈNЬ¦åÕáyÊ”¸ ¡•ÜþºIÞZÞ…lÿÒ¦Ý6k#çL×Êi”T¿èOïYȶ’¿<Ý~Mîž~ö!?ùœ.Ò1“ý™®ñ(9ÎJ²&/ĵµ¦3~”4¶AÄÚ÷9mVwìŒj±.½´2épHg'iY÷E¢öRíF¬f*jxõç—²¦ ">†_)©„+ß”M’§ä¸kÒÎ_yyÑu˜.ZW´Ó1^3mUÒÏ¢9÷´F^'p*õ²§“¶"ççe¼õ†öùÔÀIP†A>Óµ‚—’þ!FJzq·pß& }üí]“¶»"«v´ì>eÏFŒ=¤îšC—ž àC ýUüFàŠT u±¹GƒÞ6u‰O¾6êX ]2-ˆeJ;-ú=7 ¾Ãuéþµ*Ôôìø˜”i–ºùþõ?’–O½ _è ‚ÈóªëYAr)¤ÄÅ"¥@;™Ê¾úøôæ—üäO'#裖8•Ñ–W|ÚCØà»;ó{·0=­Š´ã§"äJúâä_^ ýt·¿Êß›´­$FYF…°寛/ŸÕ9 ÂŒÚãœhº±Ê=ÍOÍ!9„°’¡­CÒ!:;bpªŠ˜LLmÑ_Ú¢~·¹õŸ°çþïîJ;8Úë媮ê+p…„oŸ–‡t[‚6×µ!V$ëBðbiò ¤!=»¬d{ªÒ\­|œ¨Uxâ éŠV6BŒçPã“œŠÌRH /ð®K ¹®i‡.ä&¨ß†ß•«ð¯ O„˜zÄ×a÷å©@íáL­°…˜È®Â}èDþLо÷;èô$>’ͨcÅ&N£a'‘YWÈ”/ߎ׌¶„ œã;Øfd‡Ô>Œ/eUÆo‡jjV¤LHuJ¸sï‘ùÞý©ÙÁ¹N{„rít.w8&ߘ¦o>­âwó'ŠVüBl\=§*vù؃òœŸ–D7ªÛëÂÚ¼“ö Ÿnà§ U„±þT¶m:˜Z“&#_‚ú Ê>2ÓMT Â6P× ‚Û›jº(h?]©À<"Æüà‹—œä˜v¸ÒV5]8™œŠ“¤§]?ÁÏ«5*±ÆDÑE`H¨!W¬€YvÂÅð÷/ñÈ+èý‹Šw_vÅ ŠóÍ/~õªË˜àºžHñ³â²&p&ñ<ø^ˆ^ Ãe×ì«Â¹®æ()Î2 ;‹ùéÚ“_Øóä+8 q|}Ø»öTÆ£V´¬xA†‡õcÿ:9fûÓ6MÓ%0­&¬Hg öÎ,Ø{¶ ·´Š-ËùÈw^a˜„æÊýè¸N’_¾=F\Æ-‚–õ@âÿ#îí–#·‘ÜWá¥Ñ’fƳsv.e©Û­µZî’ÛÞ½©`UA%ŽX$M°J’¯æ5ö΃í“$~H€Àž1ž.‘™Éüñ“§ª³Z#ÏÕ?dÁ¤:G`ms1Ä `•}|ö¹,¹p­z}²ÏÌ<Ûæ™!™‘“ç-Ω­t±åîB´ÐE‰šÿ°(»è”¨‡JuôÂAT¤q¨oó-Yç»] ߢK,ʤ ÚmÀV†¥ÆÅDC¾ÀI ±l$à{*®WéëüØ=ÁO¾H/†~ÖŒ {ªä)ôf;d(ƽ Âòº%q+úçmø¹{ O&›ÐƒV ±jÂã_ùy;~rC+(Ë»£Ç/ÀŠüï§-ëmBX·?·¡¯4—_€;ùßE{Ú…gë 3ÇÃ$ÄG«°ÜÕ*~|öõú³Ï#ÖË*X/ÍØî£Ãʬ×6y°š˜û*$ÌkY“ÃöÖˆz§ãÔâVEÚ´},˜•¯J6ê·(û|mU’µÈ½Æ&&+V$ÚmMÙç6ˆZÃ…OÜIªN•.ö¬³-®Àxð9`Á`?Ì!F3Ô}pB‡'eùù§À…å‰Û³(ûXú1>/‰÷›d”èâj}©9"åô±?òÊ÷@ÊÐT¬âùÊ¥²¯¿ýùOb>ˆ#¦ó¶Íß(Ž 2–ƒMÛC¢Åq4*ŠC‡Ø²©_cæÙ´g9zY¡ý¸øîtÈwás©ºÖ¬‹ c¬Ñ‘{Ô®¹µH”x>;â+é/ù3©«˜sØÆšsN÷rÆZ Ó~e·Îêêìöò.ûî×úöûlÓÖùn›S±†‡ø>Q_ÈZhùó&|ÄЪ>Ëa[V ²«e?ÿΧ~íUø&âu›6Ež¨>"*Pæú@Àão$Aè0 "âÇF-OÒÎŽƒ¸P$™&hRÁÂ&ïhZD·ë#@@ÚZܘ ¿ñÖ°†¥ ïtèZsŽs½¶åÝ›€°îWøöf?@ªØ;×MþI )ÍúÉDæ×Dþöã½ï8ñW˜×K~hןuהÄ_-Á’•å~/‰ödŸÏÉS+~M'ÐÛ¨2‡¬¯“4= Œ¢O:jA5»U°Bÿš}|S˪/~#•Xj$vb0ý¦®ËÀ´HM† 0£ýÿÛÔ/,Ùa1{2÷Ķ ŠFjðËb¡=…•*ÿŽÔ°já)¡«ÍRs!Nø~WtÙo®Þÿµ_чڕýúH׿ëˆxcÍy'¥œ^—ó ¼uÿíÊG5ëÂ}îÂ7h :³.ŒÍØÃWkd+ ÊoŸn…—ë´ƒE>WßröÜÀ“9WA‚ûúß—à¯Ø YáÎã\ ]Rc¨yƒgÅÚ‚ºm ©pëjÞò6¼{­)Í»×Q¤ªzGÎÿIGŠÿfRÿ`ÅZï¡RbŸ­_³&期*è(ÿÃÞ u—uÛàöpxÞw¼s't8É»×ÛkºœÁM9ûZ£Ä?  Æbõº¨'3ûÓçªpG4­YW@Ƙ0kýß±~¥ðŽWXr¾…‹«£úþ§®ÿAHãímò5«1çhgÔB×/GˆSìOà×UXŸÐàÆ–Ì‰î¬§ƒ¤«t‚”¿h¾5MÄౡ6ë'²~"±ü[ý²zÏ Eݰ~ ûçi©“sÜþOž„oh>B/>¢ÿG@êgPÎÔõ¾$ûíZŽÄâf4'Žs¹óAnrÖäAv4ÅBz±9Âh/é?qeyZüJèŸûPÈš„ˆcS›…àBú.fÖµ¹–Ó´?•õ†õ‹Ù•/dÏžÂ~¿íH ? ¶›Xoãèq ž‡} À æ`BàØ%ërd?]½—qg˜{|L›"”uÏšõ?›2è³ÅoÄåüXe»JM™÷!«”ï‘^Éíõï«=ûr+?]Ý#²£Ì7¤¤1ˆ†¦ƒKÈ­Õ/ý:€¾€±œºå‚Ÿ7Qþn¾n´D¿ØiΙç+§CUÞ5‡»LÈ“®¹l vÙ*6â‘ï>Ýüô="­+ÒŸ?¨9ÜgBsÉ-×ô‰ï®~¯@ë ª8<ºR;¤_u^ÏzÜ„öwÚó^k²H¯ÂÆwç•}>õã¹·ì­Ëê¦ØÒ‹•þ™×ŸÔFxQ@Dgëþ¸a’çH¢X‡þ6‚¿×",”çø]ôI BYEØoóg{åf*ªyE“piáÿUï¿H¹Ǵù#kgÔ¿ë!Ð `BX™$«=·èôáú£™e‡œfºì{Ê[ÙAÚÉj>®ÛuM–7Å9»胯U<|¸½<‡- 1MIÞnŸz–^ˆs ß…0ùùúS¼ÿ].Zထ ?R°#¨»X†ÇºÜ…Œ¸Ô}¾ a›ßø¬Ïzl†µŒPMà0æã±©Úèî49~º “ò6å1è—ºGÛÄCJŸmËÉБ8óÊ>ÿAÔæý»ŽMï°E—óÊ>_Ç«•¯¿Ðù!Sù4l+«‹OšYqsæIO¬&,Ö§üXvúotsãÖ'&¡ÿ6#ÔQ9>‚ÔUÝ6ÿ÷¯ÿ¥ÙWF Óm¢2N;þôµó©|ïô„³«ùAû‹Ýú“ôãÒçci3ýôåìI÷GEZž~J1»¹§x ,†4ÎaùI—üå9§uÑ9·wdÙÉøý€’!Ö}”ç ;}×4éÉkÆï¹#¢,e¶ëͤÍA¦ˆ y€\ÁŒL¾P‘ÕúôÈîrö9Öä³{>nH[A(®‹'RмCyœ8ƒèy/jlîW=ñªš‰ôE\*V–X_¢Ø‰ø“ÛòH»Ù6oìW, ÅX´óþÞh¶œ6¨Üá&ÆžÈYRîLmø2IÓpŸz)ÈDw/Œ(&„쬂Ž˜lôšð9>šnÔ×'ÏýÈje¬1®^‡òíäóR±s<"¹FºŽtR’b>–ý€¸BÐöÀ€‰ö:ʃ½ŽOÅö‰%ßïG~˜U;~Êb[t™8’I588i2ú­œ±áÕ58ô5ḠÑi¿ûÇÒïó;8R;…–Õ±„*ø\Q#!…½®ŽEx#¿É+ÙÆ2kºVKÙ˜AIðžåÓ}½Ã¹6$íPö8ëYM)1ø’‚(!rîë5ºÇ4§éö˜;;ñÙq=âäF¦ð êI`&È]þ@ €,ûK~ij¾·É£qßÊV5Dâþ|„£F 3Â’ÖqRìÈ~dBbQoØÒŠg›¿Ä::¨zrœ "©Å”@´G¦¾Ï-)-¾ÞÕfr®¾gõ€Šð*æ¡®yôÁ¦0?0<–HWöàpQ¹U±ã‘„^2 sÚ"°Ð€ñ.ûBø†?&×ÿ¦"B ­Sú¯zsŽd¡à£) u§6OŒ‘èa¸%¨³Å~BLÿE‘Nu—ëBØh˜ûE’M½3¶& ˆ €åô©xì"Û‹¾ƒ£—æ$E{Åÿ op†çFTàceŒÇ!.EÖ‹6×puä ]©ØM \ä 'a¯MÈ'Ó oû`‚»¾‡©ëí®XXÑ”&#¶TÉs‹Š ÆÂBЛ2ûúI¬Tä“ÐW×7êî=Æ9G£¾Ó3Ê^”¾ùþx™Í6¬ë°¾ÌcÀŸB|Üâ £­_™¥x”Ó6…ã´ÅC˜g¬Ü½Â·dæS[šàrKÑ·•ä­è[dAé¼H×kÂÏc,ÐSõ«rѧC‚ó§ÚíÓ“ 3n—Å&¤Æ6ÄÇö­¸éy’ü7¤J›U'ŽPÿÊõdâ7²6?«|Ýõ Ýú‡Azºy.ÂRœec+Ö”AIý;9“ F| >Â`OUFùÝñ–\ 7‹}›,Js÷¥dv#5=6rKÿæ ™ìü¹! ¬g]N÷‹¬åk¯J¼\`mF€ÃøË7CE9¬i:=9›Ëj]2ßh5ã*ûÖÞ×» ¶š2ÄÇÕÔ'qÓó$ùïZí @§ÇÀ8‰¤ØùXÜ(•0êÄݾþ1[=å-î¸#ÔÙRá „Ü«lUó8ô€çJtzêÚ¾ÄÅE;<‰¯oëêUvK ¨”ÕžŽF v(ûA|óˆ B­—Ç`¿ºízˈ˜c>ý6|i:>äó}3<¢ˆTüÖe°9W £QçIä¬/q ‡ þÝ«›±u—¶ŽËÊI0þgÖ!ü.Öé>|h´ãc >ç{yñê>åÕžO7ê›ÞOdˆk*/)8gбkòã$äsÕk‡7(p¾&TäeAù¡bŠbÂær³‹¦Ðµ}\Ö ‹_—9É•sÁÉÔ°ôÊ¥í§ rtSåô¨ŽÝ®~© ~!.^”’äΙÁú²!Ú«šGS“׬ONZö&ñP…5á…h™0º çÇëê^\.Ìa¿²7f×ÈòT*9y' MZ¦™üB\ž™MšŒÿ¥:B¾G÷_n>]~ùoÏË´¬Ú¡ìc™e›‹xs£º@Ê9Š7ú{‰îä“.>Ür>ƒÿH J«Ú$uàö¹²ÔŸÞV?ßö©ÐW•p·#®xúãÃ:vE—çˆÎ&Ç -Exü;ÌG¹¬kº|ær}e.üƒkóq$ô§´Ãôg”—S}—¯š´þ=,œÖn"{ÍíŠ.W±¯·Q¬~Ÿò¶à=ì(çÇÚ.‚^všÔ{ý¢—˜ñ[C“ÿùOk}.Í›â´ï> cÿ¥üùD^g¸üóŸ²;µþò·‹UýرžŽ¬Fl/NòG¶#®óÙ-®%Paq8þï_ÿ«VÆ‹%.çH2XZv2›Ï‚³—_Ö:ˆÀê^9Š™’£V.bS!Y ÃÊ&ÆË\´¤†õ”ˆ5ôf鸔˜Û…sÅŸêa] k6úå•<¤$ÝÖÙ¯·Wp´ëìí±ÂDxvÙÔÝ0JxúùÃü—½™ýŠ” K#Ðñ0š¶—dõ7äÀ%³vÃģʑ©8ë¯J’ü{¾(]Þ_}¾ëõ‘U¹r&¶8Yõ=L“•·›¢kaˆL/Z‚ÉÑ7yD^èj³^ƒÐü/G.ðûØ—YJÝ–$•,„E7šC¾Ì Z÷ƒVbY(=¢!€< ÷Ø=%qNô€ƒô<“IEªùó2?VÛ§”†ÁaɃ9Õs×+¾åÒ)ì<Šž«ºà„à,Íâv‚ûqÇ¢âìøÁ¦G£ÎShÄ!oáÀFiŠˆ °³*å…Dt%‚K}65®¥O½RÒ;¼…à×qüš¦”‡×ž%âwã]—+]ë6hzeÆ e(¹ ¯”(İJÀe¤20ã·á4Ü”÷ƒ\$¢Øô‡¦ëº‘ÄjÌyq?'ÛŽtì “¦àXì Ðt-&ϸk)‡ÜI¥–ÎyCNh‹Ú— Nl]~”K}’Rqh]׈†5d)½Ï‚M—ŸG{x¸Í9ÄC‰Bc½¡Ý®/¸S}–&= uÓ\2™„‚8tðNÅŽwq£[ §)¨EÑÁ¬º™\<© )ÿšVT§ú.PMz–îö¯‰…»kªãp]ìŸfR™,h2¨Ô9¡C±mkٚĿ;sV\é=Ñ™MõO )›î„·IþŽ4u]XjÐŒ\a—„RXM €|/¾äJzáÕ±S²!OøÖtYBÀšz>fÕñHùmž‹”\¨» áY²ûÜ$ådÐ6õE'B¿IÝæ<ÜŒv;¾kûܵP$Ôvýv},¹„÷Ég …:Öõ£qð’Þ­¶¨áý °÷…5Övô²³«^"…$Ž~[ 8b´{ERG¹Åªþ~ž=¡úpYrƒZôÄ ÝÏô§T²_Jøq®ÑÈc >Ô^މȤä1³éhñݬ4¤»ù3HÚAZš®Í›”ޕ݆ÔÔ˜§drL.©³EiùLÞòj§­+ˆãœ7䄵¨Í¯nÿAÞ.«¶ž!;)SÇêDoV®nÓr±k‹jŸðBNô@ƒô<—Iy÷ÞhGéKæí8§Zó¨\v¥F< MÜp•¡ê‚³,âvœûmþÈÞÉmYWIÓ‡óvœ`S­yJ!{²Iï]ôâ!är¡ao6óŽ/BÏÍ€j¾ÝÖÇÈ5Õ÷9*¥ /åµ·SÊЬ$„¯ilIHn‚M™í´špaš ³ˆ_…XÒ´ç©}äd¿Æ•Á‰º«žGj¯¤Hå‡Áò]1± vN0ScžnuÍäÄžèI†=M$Ø©hP8§b¾ßð•~-"{ /dóT×qcô¦®Ë})9 𫼌°Ù>®éKÁçä &ªsƒàøs¼&ϘH&D|S@›b‡ôá]3‹ò¬Óšè¼Û\(+ª>nUÝÆu‘C6m‰6á@©ÝYýx¶á'Çs «ýóÅqd°ð!2RÏDÕ‘ÞàHɵ]ä>鱦“aŽçã1!…á°=6Âÿ]¹kÒúzV SÞxE†«×·×‹WüÁ±€(,Fvо éžÖ{ŸcpÆÊ¦^Ô{ß==ð«KvÆÉ©©ÖÖ]©Š(ª‰º‹k6ɾÞße_»½¼ëWuÞìàpîÇ‚ÕÛß}½»ù~)иÞÄH׋héWpƥˣr«m“¨ÚÆ„ ¶/_øó6spºøo¬©ºÎò•eÿÂz¹™LvÜøŒ¢ƒŠ‹‰ÈÖ„ýŠˆÖ‰ŽÃÒ¶nÞ¢œ)»”¨„yÆ'˜X§¨#Îwj½‘Õ0µººOÏ#C|K Æ]ïÈæÕç˜3â@Ÿ¨ŒZì!D¹Ê„ÐÂ5ŒîEü«8kÉoy1YnŽ]CTü0õEIC­ñš@2ªãk9 "ß0a™U*¶fÉ >p.³8yBß; Ûmïq7Oo´€óró®k‹Í‘Õõ¸hÇnð±¦Íc¥fƒÊå ÞIšWÙçÕýíÓC䕞øaU}VsU·?è™ }¤›ûÓ_ùìûñ·eóšòÿÉŒ‚¶Ypaòæ L‹þP¬Ø-<Ì©œ’ÁVXë·3з¾lìxõDÛ‹8³ætß`°ºÌ·Qm¦ç€©ÔOgCÁ¾åOƒrª»ˆaÕŸ× Üí„J­KÊä‘©2pdªœ™º¹{xÿåÃåÕûìöŒç”‘#S%jdªL} „îJË,›”!nÐ}º^||ãPæû„‘Þ©º l6±n/ú&\i¹f³à£›É7\²3rèŽQH½š‹£;šÎ?ü«Íà;p ÏegPv ߺ36\L# °¿ù–Ô /ö‡fMø™°iÜSC(xMm&@"“ 'û<™'up“yêMyd¾©9=uU?ÃBŸe"¡“{Ò`LšªŽ,SN÷“{úüÞˆh‘œ¡]KòÃ:gªûH2‹ 7¡®`M^  òÓ‘Eè‚—]•¼6uÛ¥±6P°Bàíofòæ‚ñuìŒ äü ¼2ýfùÚ‘¼Ë$ zd…­t 𱿽t½Ú5<Œz°©ë”’&ÜÃ}aQ>ù à"¹0H£´–p¤…bÇq#‚!ã€r$i¢SO5èzÈ@G³…˶dS×Q­ƒ¡é r¢…?óTŸ™„¬òÚÔuù-%ÅIÓÜfþmŸ›š}àðã\•Ÿ?Ôï¥f },ë¨Q:]ÑÆÅŒÒF?À•…ëØo¿îïDñØ,¸À yƒpu÷é~PúF¨U—o»P]ßÉ¥mâÆ·@,ëmÜŽñ>H%>¥ìï| Ì.o÷¤‹Þé3cëiLyÅÍo²ÙG<¼Í«i{1AÖÈ/ ´¨ÍäeØpê„Îů.ÅJCwŒê1šª.$!hnåÉDü†LÝÔ'Ø— bÝkÖð;±í!ÏfÃÍih˜í"¿™ñ›ß ‡§¢aþ#Ë(ª|šesµü>™h»`zYs–'c•Ç_2íö’£ë§2jÉ5=H4_aIgKh}lÁ}ÒÓ—¬T¶Eñ!4ì[+nWŒ¡é"âr&“þ5–‹=0™Ü“ž?ìyIS;6>ߪ~Ú-DˆÊ¾ÁäÈ/mÔGöøûzÙÏèSÛ6q®· Æ÷Ö¬ë¾~ùrï¯ ðK(N¯ðFç‘ #eˆ5÷z3síšXý½ Õ>ïÈKþOfðÒIqsTX^3W·WÎÕíÁœÑCà}?åìз-'¡ªß´Ånϰê„›X†¹;VI`6ô½ÌBÚ|9ž¼±ì²&ñÌSžðNžrô;y­œ`2¢Q–où<×ðÖ5¬ªiìaSÝY¬A’SÉ£9áÕÛÛ–0Š–åÌÇAˆù1c柾+@F¢`Weþõê·¤ªOuvu÷y…#g%¥%×t=ä ©o7äß<‚‹¸Ç› ÍwÅ…bØÇfÝ—oÆŽ'¾áÉÕiç6+Â÷ÜjZ.€aªþ˜ßy«'?vVž»»évªìÌïÆÛ”BÄÒdW€kræ yà&jôý+Ù‡pžQV˜øâq‚ðlë5¨t/âçs=–Ðé`™×•}àQÕx„´éçyé7K›¨µz]ÿhg¶^ í[²1ÞÃþ¸º}‹sßTvú/EåôD±ƒFNæÚlö#9k²ï¤ú÷žü:Ç"Óx`ŠÅ¥r·*7">¶õA5Ö‰å®8°R‡¡«:1¸ ǸgŸp¬ÞÏ‹öç¥eÇfßæ;r±«_ª²ÎwmùžH¸‚MÝkSÈnú‹£VD}´&å_Ry,œHº¼Q{ÀˆÝÙ_´{‰z£Ê’±~ÄúÁ…õÃhÌÁ‘k8¾¢zÎ÷‘u¼©ì¦¢:ßæÀ®µd/jEu;¥G·`¤éÆ07ÌìHΔz·8rªì¦¢F¦ÈKuS ´êË8¿ ]§ÛBÒ¨»ekË>R ½] nŽ_àbÑvÓè‹\¾°?2±¢…õ!¼Èߨa¢ù)²²Ó4Ð 'VõÀÕÌ©èLYé}ª_˜j$«¡ìÆ¢F¯É6âåc—ÐlIs›3Ü”öùM5½ys/f8é½ 1‰¥ëºÄL»†Â £¸jD¶Xi_œ!_™Ñ_–éoYÜ⑦n´ìC¼[½y‡µJ%_’’]'ØwE¢i:I@N'ù Û¹BÆÞó&nþy¤é#ªFDwTUd1ï~Ô¥©èvؘ¦Ì¾~ùZc5ëæ¸) ±n~¬:ëy/(Ψ`Ýþ<åÌ%ìjw~c× *–C½ÐÓ€N©àN^¯GÉþ|„HÊ$Sb¯OIvÞîëIEæ#ÇEµ1 ?Õ½Ãþ/Ù5âË7VÅC†5Ä›\¯ò,“UvÙ¬Ó-_…Í{f¬ßÁWòaŸ¼ƒ¤ëÙ‰é \¼ù]™ï(Že@wܧ™].½FÒziï/ò2¿ªËœ_°²r<ÔT6}GS4]D×jªë¦à’Ơƽš 4¿”“Xà[Όĩ»‰”ðä[Y;Ü0•'ªÚŸ¨º9lÿ’yrªXg3’aPõ00Aƒáîæ*Ås²Û“˜‰/SoÎg!ÕO~É?ç§¿Þ3üÌ—ò!rªÈªî&™ÌA+ƪììžÒgÀ$®9îmGMnØ´½ã éïäsÏ>ÇaÄ ù[”=1ÃþÁ!x‰z-L]…v:Œz=ÔóY ¡€×DúŸ7~²è<êx®¨Öî šý€øeSü~,ºBc왓¨U± è«jÂû€U$eÁ¯B Á«Þã?©IÂ3AÏ1çóûè9f?áJ°®$qÂõ½€´¬+D¶¬tF¼ÝY^rx)ø_Žš—©P ?®®noÐ/†æRìë1gÂ7yUôd®þrsµZ}¾œ>¼×¨ ëQa½êÖ«»ßøÚ1Öù- ÆzM©±^ñ5Ö«¥ÆÂdƒÆ„C‰«·^ÑõÖ«½ë(ý”q¹©È„¸ì5¾{ÅÖ`¯¾,5#žº®É›"Ðw©…zx Ãy‡Ùåý ?>K*ð3ºY¿ã)üMÐ/D&¿Í„3 £-üËè»Ü^ÈSØâY0¡¹~Æ€›m—M¼âüÁƒä„Q±¡ëº [ˆ*þƒ„]Íúæò¿®ù@žœ·V#þ°ç/=*9÷®çn$wf‡.ŽHèµGÂëªNd.hý4H*Àùk!ìÿDuÎÿAPŒ×ïvýX4òûHÀU°‹†Þ¬BJO\8­ó¥ØuOý|sв"ÄÏñl‹º…¸°ÃF.úNW*æ®þ¨+çÈŸù°oUúF6À³&fSb¢ V)ïŠNO`´¾! |ÅS‚nCÀååÌð|¨Û®Ü*±ë<€#…íûì‹"ú:IˆïÃ$Sôd<Ê&w¦ÊÆŽ ±Ág˜Ö‚îÒC?Q_TáiðøRoþ¹–›fã¸m&œ¬†‚š­¬_ÄJÑR`Q k…‹–¼ÀÌdÍO™ž0⋦©ëòo)ˆ¦ ¢T#XŸs0WuÏDä!Ú”÷%ã³Q<\÷ßyüÀb5eŒÀãÝo ÏfÁ…gÈs¼kùÍÄëÄGÕgÐ>><Ü·úKvlÒ¸ }/•Ó÷NÔÕé<á¯Ô äð|îþ^®.ùðNS¿ôÓ4_ypŲŒJwSוæR’܈ߔ§pó¼ÏD˜ ØFóDúæÓãz‘7"ôñZ ,Ìš˜™*ˆíÉ|;yÞp@$7œC’—Ù屫eðå{ÜòxRW?“* J×t±p¹þlIñ— }˜âüö56€ÚDuÖý^Ð>íËqû|¤ÙÍÕoÙÿó§?ý æšaÜyè'<(x-¦äè×Áïù…tšÿ >bWÑMu]Y€[õ+WÓ-qÓùU7Òx5}Ý A/AÔ¼Eò4o(šF|î?´yEÙ뢵Ûðª×ËåNÜ*Á±¦‹³Ê9#>–MÛÅ㸔N“œhÆ€‹),4Ñ|‘Á‰¦ºNª ÐD PÅD)):yP1ŠàˆŒR4ÕuÒ8c¥S4± ÎÿF9ÿ@(«ÎZ’oŸÔ|§µÁ%x5—N“ôeÆ€‹.$äËtqQ_&ªN"|Ì—t ¨È(#EŒ-. ¿–o·õ±ê0çލ #EÇìÀÄ,ˆ>޼@žD^X!—Ñiôú&Ø!‚+ 1Ò› ¢Õg«¯Îýpa­Ã2cÃA5Öè?5á†q&‘ˆQUíÈk€ÿ .\½ê]• ¿}Oj`%4,E Oµ±êlbõ‚£(r¤¨KXñ*ãÖGÏŠ VaU÷sƒU lË„¬O*#yŠGIñ8bÐz³ 8Ÿ!†²Â’CÁZ0;xÐ4c–~ËÊ2m]A¼ßˆ1 ‘æ,…”FƒÔÿÞÊ%Šê}вð±!ljt¬_ ·E\{J\;mÕG0aŠ,H9´bS÷rEmÄT` j[ƒ14¥9çAd´¥OyÐjhñ)uwuû‹ÏMÂxÝ¢_”9 ³cy½\)”i¦îêç"gàrã—|WÔJ…úAé6/Ùw–®ómT×pÞ†v¬1z`òAvÐ!ËrÔVeÃlë›ßÒ` (¡á†2!,'¸. Æ4‚¢‘*n)„æÙÓr½IÃiÆÏ¤+éTp]íAÌ`Þ‹÷àÝRªç|E—Wt¡dEgÁ‚‹K0¥—B‹$™^‡*žó©[‰ˆ%¬8b÷êÀ‰?Þ bŽ^æp”M™W[xǤ ¡IÏ®ˆÌe•FIÍ]nëuK~?’ˆS¿Ývü€†–XÍ@é‘dwpÖñdò‘=û’Øb‰/’c½ºgŸ±'‰…à&¾ê¯®Þ^×y¾%¤8çªø±yÜŹ1(:Ý`b(7"Î<)ºÝØ7(7ŽpÐDL¤•n·qŒ{Á/]Ëåêá‘(‹²3M¤(Î¥¨Vlªëq$1þÄõi&ªNo¸ Æ™bhVÎÛpºgj ýŒ÷éÚ“¨ÕNVu:0ʱÄ\ ÊÀ¼K:v΂Ó=]åáÉþèáF®ƒ¶(»ý¢(—Œh£‘žÙl¸44Ð~Æ{‡ô ãÉ!íÀhšNO@å œEW4‘ý—‘¶Û#)‹ö*&šMÛï“ÅxUu‘ ŠN_˜Ö 1ÂM× ÿvÊfÆç¢©„q¸¦Ícœš¦Ó-ÃxÒÆ¾®¦¶Çs!˽çKÂ'ñFŒòƒòþÃé¿-{v$ÀÄ€›aïãuð¯gù>‡´ç­œ <ÊE'¯t\î™Á6?äúq6,Eh]Üû~Øw‘=a»¾‡\I^Í{J:8Ó…‡Æ ÈÃ*ïRrp¤î¦PÂfÛ!·mÝ]>ðüBy-Ž:ˆôÙPv{,D5/ oqql iî1BE_δò…£ibI…Xæ­NTöÿ~¾7¸2÷í_’ïÈùþ<ã«Ñ†ê˜uO¾G!5±ïEƒ{!šQdkß ¡ìÅöB¦ÜÞkòâ’KX†+ŸÝ=å$4˜CIÞ²ª *9£R£²´ýšÝýôá×°ž ë ñ0šq¨¦¶SÊrDõ;©œhtO–"{²Töd¯ú‚$â"Y\ºª J©Nm6<º†Žb6‚²’ý6m!kz¢y;$e§/¢ž a[¿Ü»ÏÙ—,?R¦äp>¦jo·pT^YÐn1ß=ga–q,/òñö¦ß6ÌÝîBª(„Ï@øÌ;I>2žÈb£­¨l95¦ŠÝ6cÀE¢‹ÛXäà—;“rx *N‘,¤>v)86C,C ÇåϤ<SÌÿÄÓéú~(.í(v©/}‚Œ+ù¶â³SÕ!/N&EÏŽ×U%x0@^™ò/…(1Üœª£ð :g\çLé °›cä,¢EÙ…¥DÑåŽiœaæ¥ñÃþÐ¥‘L,xpyWÖ0 Ģ잶ÍZœ Ã1Uw@hÂè\3¡ƒ€¡ì‡<ªk0ÒuaHI}’gL2Àó¦-’ L¥á(W 匉âóM[l×e½Xe×w èÒ !vÆÅü|%9­ê:*ØíŒ„!î ¹3%‡ÀhN>Hòý1owQ4óv\P-ôë¯+ŸIåHฉ¿±@ôu?Q0ÿ%a£æCñ‘èQkPÆBÑûp´èˆ.ì‘Ð%Í»¢[“×-i¢¶;Í8p-Jˆî"û6¬×ñCF­6õ åÉ .ÒOGó)–“XqŽó>giK éz(@CÂåºúBDÛÍN-…×±s 6u&ìh@ê µ£n0I×›—÷5u¿û ìwŸžm^܇%ê“% Äbƒ¤«aà@^}.!0[òX¼FMÕ]Hƒ°¿êÂÈ!"Ý y9•Æ4ƒ£RJžjAC;«PѰÙcÚºŒüÒô åÍÙsÊ@ØïpT¼SÏáp-‚µð?ôáêÔ#*Z¾à»¿å³Í‚Ë{CÝWµ³^ Öµp€ZQ=Gƒ-øÀzyÿ[Ή@þ ä‘D§|{ˆ†Ñ”} –7 €è¢¾¾i‡øàfBŽF‚v νØO™‘®ÛÑÙ•Á[þM‚y…ù‚fh&qi;Õwù®I»üçbg\ÌеǸwTWt8ÍÅÐu<벂<"é£NJ1õ^÷ç¤`ÞAö;|â‡Nvù†5ŒêÜùÿçÍ8p,JŽĥϸôî8kxD™GõS5=@™ïÑ…„ÏQW‘W(1_Êü䌳âû-*èUÝåú <×¥”/€ìYJ…3Äœ‘+ æy382d§YCÃwšÕc†õªER®Yì u-$e¯‚šçW*ëºÙäÛç”õ½kä©.\)žawójM`Å‚´Ÿøå ý-…B7€È$.ŽÌ.†’JÀÇhXI$ݺ%eþ–‚c±ƒÀÒµxB匫`‡„ÆY+Ä^ÇÕ RpÅ=ú(uÒZéFÚÑF‹<ºÑ0|ÝP¤¼MþU*à úZRn’`4u?G7<¤ŽÄ•¯AÏÁ¤ü=Wòx*adS»kQžóY»E+Z°µÂ–3‹™œÏ+Ûu;8tâXÓçpÁº¿0ÆúSñÜÖÅó@‚ f=8ŒqÆ€77"b[O ±lqÛ«­ê^.ÌÁä©`´|)€†ÚꋞøË>}uûÛ¾ÐIG"KœMÛI³HuAˆ‹êµX”}XÞ€ê2_¢¢ˆ‡Ä½;S]7JTdõ€,‰ÿö´ë»i¬§Þß§Ý^5Ü€Û/+ž’*sÖ„›LW0ÏßXwå/æ¡´s¥¹AH>ñ‡tÊB)˜¡üA?CÐA8ÊN$idØN›¶‡OÈ3Á̻֒½¨$ø^£HcL|͉ª‡Ž ¹v{}?Ý`¼hÖE OTÝX³‡š/”?)@ŠïÒÈΟ8Ûrõ%ó×ømBÜ¢›àÖÚknª_!13¸UöG`ÇNÓrùÛwë”—¢”ð‡5åq_Tª‹§®ê£)aûyàWËDø¨kT^Œ´¹¡dGgêY¢D<ŽŸvE »²#ã¯XÕç\7…¥ïð“f ©vPöÍÊKD âYò%ßœ!¬ž5¹hQöõ‰¿4äBþTä6yŠ-ëpÖLF^ ÊW‘Á‹“Š"„kgëïtÍ f¨óEÕÓ•½hÒ‘m↓ÔhÖ‘¼(Dœ©Â0uÚ´ST‘€5øøÓµfQj:Ôüÿ—ß×Ï+t} |ˆlc,Ê.Ž”>`¡D52S]ÈÜgOû¨o;n8îÓn¢êt>f8‘ õóväÕïw/*ü¼êýüü¼sXþOº†:èô±(S†‰œ+Ï£CŸê| ±5*«§â±“‘B¨Ã‘z«í“Äùb¨ØÜ©·ÆÞù.§Ï¼*lêÝPØÓz?Ï]BØH Ï*«ªÕaCPŒ ³pÈ0VǪÆ!MåFXš½<Û'~lÁOcgí\ÃêRÖÀ—5ô³èü¹é]QØ£êö-«WtBqžÁíiõ±ç6ŸÔ´5ßf—ü¦¶;¤¬S"çZYé›ÜA缨/NÎä ÌÄÑuÝ0\R¾ MMa¹ÏJîïÏGX|\xîE`ºûn§¿—Ø*q¬1®ïûûþG?Ù‹ßà'¤½&Ɖ7HdóÒÈSô6¬ý!p@Oò‚•™}›x,Ï$ÚêçÛŒ/a Ümñz8¸ÝFo*ç5ÀÝä”Èæ4W *DS#¯]"Ù`‡ÆäÝlL€½(¼£,ámY±{M$,àȘ¼ù†Áí򼃿‹6ä”%øªÇ:l0$c í§œµpŽ9ôùå›Ü¡QÉ#@‚ Ê<`7“× TI¤ïdA䑈Ôw6otv¬ƒ]f ç3R6=ä°a©ô°iG?¨¹ßFØ]#Ë®¢¬_ª€•p~86®!^E[¹ÊÄ5ˆª<Í8Ù!"köë§MžˆfÁ± •gªØjA°si«€fP ;VjÏøU$¿ŽŽ3`ý†BPY6h“z%ËOyQ曢œßs4ãQ[œh*•f‰¢îlóª/Ù©~†}wʼneŒЛ/–ao\sÜ”ðy²k I<è ÅTŒû½³×1šFkØaÍ~8¾ág\Ò0àFA²‹nŸÈ!µ1Œà „Š»ê2a8ì³—Tóµ(3H$©¤õÁÞñ/u9“›ŠP$ì’áº@®ÎhË,u¢9Øä쫇Ìšq«¬“ÉH4¦`)ƒ-iúDë;Óã†nÛ¢Y v´˜B2kŠÈúQW â킦Aü6p„]?2y û>JÒ×8× M¾]„M7ÈÕÜè g{»Î<³;´«ÑkG9ìu”¹È«P½ˆæâ¨•ïàá{Ë;*k'O(z‡»¬ăô-ñÑ;kŸ¦ºþAÌÃõÒ®ØÒé÷0O#OW®­_ßB†ñ ùÉ ž¼ë{˜ú±†yqRíúÃ;Ñ ´4Ia)~>§×–…fïŽ(kJ[ã])?uWž9yÊÛ‚¿ª ä3¦üècEQ¬HÇÙ)üËJØÀ*ij^+Â*‡N]âìø1 -Îøk[À ¹A7žÒ”‘9ÕÀn ‹ CßÔ«›’µS+ÜAÇQ˜Åý… sLüxŒ?ì8Žü'håÙ—P&>•Ä ÛÈíhT­ƒÈ#S ÔNƒþ°«k“¯ÔèÓj"K¦ |¯¿mBBŒmøÙ{ k9Ww#Ky›o6EwøÛ0šòã†ñ‹¼ë{˜ú±Þ|:=}Æ©©ÄÎÇòú¼½¸÷éçLÞ£h÷É«ÉNðd ¬ê&A¶Žý'mÊŒ)?ÒXQGû¢Ðd»Ü á˺~>61DBÓ ÆªHׄuÚ„R^#‰þz•]~úùþþo5аŠûè){G–Èžð|qgHDNˆ•°) º€Xykõžß p¬‘âºnáº8ÈCsÚ0ø "0ÉÂoD.uLx8©ÒgA#äÅêù;WoŠˆùûjpñ]ßÂ¥­U/¿ƒ/OANu¿Óý@Ãø%pz>}æ ºUë²€Ô ®[Ìøt¥Ù—â$OÖÙLÊÆ¼âa©„Ah³L¹I…À‘Ûe/B6[”&ŽK‘ó´ÍÞý“B+Ï(κù wA÷®„-óµªÍúÿ-w;÷ž`{ý†ü¤×/ïú¾¿Vu6Õþ-;üéóÛ®8lêâãÄ[‰›ž'É×Û¼éŽ-¾¹sëSQJ¤ÕFSö‘€¨Ž!b‚dp™Â2ØOÖ±ª÷oH÷±_v=ÓÜߟùrÏ=È=~JUïâWSö%.ˆNˤ/Ü IßÓöì`ß+]züZ}å÷Ü9móõ#>f±Mkœ4Bæ\Ȉ„Y2ÈÙuð÷p²cžíY3ÿ’¿eâ/¦çwNWðyPs8Í„Æ^Ã¥4‡OyÓÄx¬é9\)c ðtUÖÇ]vY´Ùé²iúÙ±Ùaíþ‘ª¯õ®>ä…ŒWÊÃ&ÇB¬Íb¹tõi11õÕŠ•ƒÆªQÞupØýªàÀÍK(3Б’N(.œ®¸ ¶t9*%­VÐH¶µ½ %³„aÈ1®}›p.v¤•?{’÷$u¹ øvi{„¬þ…%®ðO=k–*¾ØEHãœg}IKb½7Õ=îKa#@Á'±·U&½’x&o¾Äçÿ¬ùzä{>gaŽb"¯¶ŠoTÆ+Ý%œ\ÛÀ:¢?Á«º‚öG¬N@UÌÀ°ö¯ý¿¶Ííëö-)o­FÜȦʴþ6p»|ŸI…ùÕœ3.%ä¢Í’ÊZ…/Æ”ˆBb©DB½~ÜóÅ$Ç&Öï±ç½8÷ýGñó‚5E´«™ûüé²÷«ß 1D† 2rIžÛºk£_™‰Õ ¯gÉ5kRÛbsìȰø>ÑlÕÏÿ~wýeõ=4Zªþ_5¬4’~kllR a±æA~>å‰N>åA>åzŽ|,öOÙ¥¶#"ûîãåbyR›MMàøuY¿ÅZn»\DIö5‚ðÒÈ l}£”|9ѼJô^3ËP0¿cå¸?ÔsÆ–S‘§¾;­.゚ÆÞJ¢¯YWÝzGš²~[קǵÚô›^‹ž´™×çIuͯg_eJ}Ê·OEEÄ9î÷¬ó4dujã¾Ü$ë3oÚ¼};I™eS%%EЩ±tJH¥¤lÞ. tE÷æÙ¯Ÿ~…·âJß Å(`1ôÝ.ÄlZ ÖºÆ r±ËoÈ—á¢U/ÏÌlúðQœ’Ív+nÔ‘Ž/s*ïº×¥¡”É€alŽV+‚¿ÙCë™TN}öüˆVmq¯£Ú¬ÿû×ÿÒLn¢ŽMƒ¥Øc˜CXCSúîv+X8|ÿ}ÐI¬<&F°¾:zº½Pr_wx µ³:¦!3oaö°ð#m1UÂŽª\+< & ‹9Ž{è’E‚Ž xÈzq­¯qÕ»%{=½×‘~¾~€ ’Ï_/]»ôG®UÁè<ì&~\F#ļQR…aµâ!2u´·#‚×_VŒóâ#ŒÛ a‘a”xeýH›RáØŒ`YGÕkœoCšØÊÏØÁòZ[u’ó#ßEÆjTàæÒç¡h©H!(Z'š}x.žúl’³ÞzáI`Þ<ùÝ›ñ3 *Î7Ç1I*…üA‰¯ÛØÏ÷²%Âè:h¨S݃$…-{s1¤-ÎjЇû±!~ä,šN×] A˜µäçéYŠçõ×UÖK™\4´XcŠ4„YÈ5¨àGý;ú½¨Yd+O*–¥uu`ÏÈ”7pÎP¤ý]\8'—à FÅ›ë_K}¦æ´âoáÀzŽ¥çJ§åÞĆ—nИ智™]Â4ûÌhR4H Ð0§¸¼²NafÝ*¨þÏI a”¾„ª¨·©š d†žAzƒ&yåAÙÍg>XÛÖeXGyÐT4à Nèèx÷mq‚ŒƒÓDÆåðqL<6p² Ä«KÄB÷j:´¸È«ÂfZí'“/o±+#u7¤1„ùáÌm>Lôþë&Ú$d¤ˆ¼Bª$Œ˜L xzñ>rÛ9FL`M¼/’wêŒøƒÊ¿ìƒ¯x$Ð!Å¥<-ëoËœÒ5{ߟ#Ñg̸`¬ä‘ý¢ÙˆBñ|Æ5xrbBû=µàAä}kËÔGÞËD¯oÙY&¯7u¶HpÆŒq¬4·˜ $²º~Àæ³áCoT²C‘òÓn ì±þv¸icH³†ÐЖQ¤o»Š2ub:(:@ÏЯûeõc6H@(˜ªçgÿŽ+éñ‘6gíéq ›°B’£…CDX;·-늤%‰Í*Y EÙÛe—ÎÝ×OýÊ.x¤]}Xçìl¬wä1­&sYDáÚôõ!²^€²Fø±`öúÁ:Í!³„¤Y6YR’Ä“îrõJñ‡ˆ.”ÞÞÍÛÃ'ˆ¡=¿œ:3¤3Úmñ(ƒ Ñè$HnÿfÍ…'€såõRø¼G™žñ3ÜAi.›A‚—SjAçJÎܱ4¤k:~QÄdº0°q‹þoj¿ÓËkhQůýòpžaÝ6,X:ÚÊgCQÄÃípM†çJê^µÏèeý~$”S¹ú6( ¢§&p¼út4r÷[Ã^:˜t€V3ŸËÍ[Vå>ÈøË/7×€ÉõI`Uâ¨Eò bý•ðqâ;ÚmëÂn™øü=d I=ûD?…ôÕùгØåZ B¾PI¦ ŠZD¯UÜêR¾Ë¾‚5F²?¡M·._‹7õ {Z¿˜|Æ &%£xòË"Õ£*¥å´Ú/¼Pƒ0k>Uæ À:”Ã!}BF [+¹`ºm œGW§U13ÀAIŸAbõãpe,´ãÍ[æQ]’óPRížÉ[¥a…(48ߊýæƒ(o®™šŒ9bÁãkЙ֦ÎÛ]c[@„JPOãÛÁ±öZz%.gbXÆ}µ#Ÿƒš@Zå /aé}J«)£¡ã|rOÄf)ÈuGßdT‰ò‚¨ô"kÔþ±‹0‡ãºû4‰p]]—4=K'f0€ƒ’gÏ7ȉð2̾§*èµÏ96û6ß‘0MKxR©7Š¥®~ýôRÁ\/yÑ-¥™Á’?à“ÇÈ2F·!ÌÿàÁ„[Z©Ô-` ¸üøý-¶¬­Óùwu[OÕ6-ªmµ5*›¯wW}Ä‚6eþÆçâû©|½f¾Ý’†‡‹Šä³[qSŽtƱ@ùPívIN¤äK)ª!ìAbQÛvEËÄããO¸l¡pMMý_5«M ,5#'\r¥ìºW®`Ø¢$9|–! qìj8m&ºOg·‚ïuÆy wäØç;¾qåÃ1ñs€2‘ÝÛ¼‘¡ ’ºw.[â±æìºt=óy/iÐÔ9Dñ't'¦Âè]ËÖ—g{Òó}jC­iáó;ßx-g.KÁOÎö‰<|Pv/ž¶¶cÞ>,«;$æNÕíý)DÑMš¶í1tlÁ8l¤Ôñ´ý•qUvêDÕÇ2Mg[Z&f¹ò®Ë!4´Í¢[Ù£^ÐóÚŠ¦×Pc#Z¥‚¯›`æ/'<99{+𻠫ޤM a4âiMFUŒ¬‚ð0É5°º ¨üêq‚iHÎçSY aèt5ük(Õ’»Gêñ©ï¢ÅN|Ð;¹ºŒE½@ÖÛ,að ½€ÌWQ´¨šz’K€ÅPH„•o‘ ôgl…¤ƒ¥·h§µ<õÓ[CÚî©%yÐésXKbSOÛfBÕ>š}4e`=t¿Ö/ãHiÈŠæô·pM ÒvÈ›{v‡>¹•NE·´H~›'V0„½Ž1i°ºZÝÌ¿§Ð‰(¾âYÉ€alã‘*ZÎ3i+²H dµ„4õtRqGq¤¶$èŸuZÖÛç]ýR¥ Žl à”†ù ~(*±¾½r¬š9”ªzr—)å¥.ã®ùv[«®ŠÈë²ÞoŽÕ®LïtY-¡’C×3Ý~{¿”½p á"pá\bùí´Ã5X)VÏC¦ái°ž«°ïäþæw0ì-6:ëMAW¿ãü6,ÈŒ™Þ©º&½Ç;6‚Èœ^e¶Ÿ{÷`Û¬Õ»‡¥¾]#HDW7vaÀD¶,½â ®ß9°€‡iòí3Üž\,m†€†ÚügX%OÊÓøìSOL-£;¼ÎO®%ia2ï°?t¡GÈâma¨GšÆ|:´å÷|ÎQ\(4ì—ëËõM\¶„>É“EE8ñÐŒ„o€E&&l†PÈšš;"0ÿ2á[sô9Ša¯`Xªûb»@m3„×ÕðãdR†ƒ&gðÔNfÐPX<ä_›vS¨–ïM$B¦Õ(«CRIÓÇð0iyR­è1ÿWwŸîÇfxÓõ)‰C3€q=;V_În>Õf¨«ÐŒ  ±`Hh9·«T¤QSð²Þ\݆‘%×4tÄ\iLVæ.Du:@;œœcS36Mi¶šç2zÐj#ÂeDM!šš‘+h\Wuÿ `«b»DîŽÍ p{%Gî2™åÓswdëÎÝa»®séC鄚‡»ÿ‘ ^2û÷åq_TúŠò/ïWŽãîÍçñQÕu['Fž1ãΕ±Ò\¸1ò rq½ÚsÊÝ šÐ±ycA¾´>ä¬!4¥¥ÿ¸ ?q8½„NÌ`È¥¹ 4¥¶Ð”\DÇVЈŽ"º$àeÔb9[F{Èà2ºÌA1Çk¸ÕàÏøó4ž…á­Ó!v7üÔ‚f¹#þæÁ0þ$¤}4siµ‚1”¯×+M½ù'Y·¢JDòØl¸‰ 96?©j¬… B€Šv˜ Md±ÃA™ªKÖùËD…‰ï?3îs«E~š˜ äM¨ý#b¦ûâ¥[ÖTÌ B3ì€|ûú»(Ï[yþ-3Z§¡Ì[rÓXô+qåi½ ¼Ï|RB©œ5Bê*Kr.L§V\È`êl ¾àí]È,P—§m±ë»izi´o åi¤î÷¬/;fœe8n¡}Në¶N-ø=·mT¢´ÞýüþÀBù”˜^R<ŽÅžXÛ=‹U]ЋO+Ùc> ›ªìÔuǶÊú[Ùww——ß÷'¾EM7L—ôÒÌÛ „î_§oÂÌc%°>E%$ƒ9Gú6^¿ŠHôd{ì LÂ6²¢¢ÅNô²SÑwðA'N|˜±Í›¶æÑþrÎaÊ gS䬷ìݯv2ü~w^ÀI-Ù½Cî;É3gÕÜT÷¼-¸Es2¬¡p•TàBl1XãÙÍ=©H çoiƒ¹† Ä ;ÖÌЮØ&cŽ !A{µ1ªv'òÔŠŒÔ=@‡€ÞÛÕ¡rÑÚÌx5”‚Ž ÄÒ¥Ô ‡€Zà0i©69-¶âí‡],yQÁã¡ê@•†ÇxÁÉ}ï(°‰ zžˆÈ~:Šåâ½+ü[ CŸHYÆg®îuŸ ‹ :V\µJü #Ö•©•‰i%oÞ˜tªê^-¦Î€Q ãTkÌCïC”u],ˆÔ œG¦ÍRÉ•"úÐÌ$ ‚®<ÙÿҫΩ/‘¦b6Wª(à—üè„7q¨åð^úãŽàT¡í‡Ñãù­†üi`ªéCøÔáY|)@k^í n˜:aŽÕÈÚ9lHx¹_*­Q·ñAë*ÆÕ×OÿµæFÃÀ’*¯© $ÖdÜ­§š„jÒ5Ÿ5„ÅkôC·W–Çiý$7ÚÝÜÃàëwÒ0¸D¤c5yßxö—"‚ôxC¶­¨B#›Ú>šº|üIœ*9®2ŽN=;}â‚ïà+ö‚U¢EÝÓûr÷UÛ!åœ4¯Ö²Â…šðk ãVcG4Š[|«uÄ,7ÿDò²K:ÑuÆ MSrwx†5l>Õ$L qöLJRfEm6| šÆÜé¨|ÂìSѶ5ÏL)-˜âpˤ¦ÍbÇ¥iàgAÎê]àìáࣇÝ';Æ4¼23 ˜|ÉVªÇµê;\!íå=tÖr6áß SÝ9 MRVìG.v ëßì}d3œ×|,4ÒkM×ã5÷Òˆ¢VBôƒU>¿_ŠjW¿Ð öyõ»jˆ ï®zï~7=O*󆮛œÒ—ºÝ­Ëº~>6øÛ´Ç©$eÏ Y5DÓä$wþÝ^Þ¯²þ¾8F î{J^ >°UmÎk!¤,è0bÁóU¾’I-f>69e_ërÕÜ=…Y¾üªôP°×ùqWô›*ŸG0–ÛÎçŒÿ…Šk‡ü™dÛ§¼Ú'ô'íHv úrÃ&6è£Ý©îGë?ÔYßžÇ÷å—Ň9ãá/ì;ubí;јóã7Þà´ŠbêjÐqª»™”ðÀÄ\^h©!~¯¸g œ#¶¤íÄùu“X#.ž±Šh›IgFª©2MŽªñõ^ ÷X‹ç¯hùsëCs„ÞûŽÐm[4A_>HCNn‹š§úÛýø×pIJ·$hRYÊíàÄ÷mw³f\ˆS¥Ñᄇ™Ê®™\vmȉnA]óNîÈc°dcVÕIÃÕ')eÕø^#¸;ñYÐ÷hÄROá>¦ZÜ=m›uIXˇ0VwbôÂzgL»•šqýñê>»!”ûás:Õî›q®žê‘]m!—Qo+ñkÆ DÅò ×ÁÄ»â#óÑpººŽ ëys³ú|ñõã5ü÷ë*+qŽÞ«BåRE×-ÙBO4 d¬îé…]…ìn• !¬û„íPö¹þ‡:æzÞñÿa"(·ùÑC#å½Õ†ÂÔ0Nk–×x³2>©$W“Æ™z*š°[À±¦-ÓäábŽ~ FMæ ‚Ò×¼ƒ$8+†h&W@I”¢{®³fdšÒìØ§åø¡†G;šâÙ4}H[»p.)£óár¬«H·fß“‘¶‰¾§—¾çù_¬§õô¡œëÛ[Ö¼>B­r~÷þ!ËŽ ôƒ0<Ö_°¯®5û'à@¯ •© N›j Öoƒ¿ ñ¡®2ŒËÂgaLÀVµ9ÌGê ÛÀÙ„ÀXE|—¼ ‚î˜~‹õÐD'ZôßÄ‹SˆNõÝÃc°ÜÁs,2k±ÓpM^T)Þž³ªí÷¿½µ›cQî2)…‚PQ—£ e·ó2‚óüÞ‰À<«T¹û EC¼ȲYÀp ÃYÊ힆ØAÑ6Ź®«:}æ‚"$(ÿIcBÅ—dÆÇ|+òÒÿm&Ú¿Úׂ?Dáéš.:.g4‘â T=<ø|Žrº{,^#½ÖTÝnƒ ÷ûFœÉ«%&(þ¢Ú'H¢Ú@ˆe±nÚú5®ý›¨;za3´¿Ò¯‰†©òñáááQе\~4ҋɦ6^ =¬‘DXOùæf…|!›¼I0›5ãƒ3•ÆhŒ!c™&Bƒ ‚¶ôyMà`ú }ÃRàø•q\j¨÷޽$O6ìRȱ^©0-pЇB×RJáQ@+…CÓG@pÏá[!¾›¨;ýî…õØÍ[yn`J™ižž²nQ£å°µÈËâ"ÆââÐl6Ü|††lqÔ5*‡4µ!¿•kS‡îKÉ’Ž}]‘]¯‰º‹b–=H /z.º%Ûc™·YÉ·•ËÙARN"6"8‡Ö—)‡•my¶É·Ïg-y$-áÒµdÏÍ‘Wõá€HŠ«ˆÈn½ká<Әİp%‡..‹mÃ:oÝKÝ>güª(²<À ÆWÕ zNoé^ΩÁä}žXºò#$ø4é^›ÝÇ‚ z†÷7 .ûó”bXæí¸Ø,Z3ß8[±¦Ï&©…ê‘2MQÓX.M×Ã’F¬sÒýxóy•Õ04ýpuqsolx èUW”Æ-¨ÐÞ31³?­"©Êwýnµú„ð³aÜÑ•ÚHÙå¯å>ÿ|$0ÙÊ%YîÃt@~§Eºoj»ýW_„Æh²Z£­¤MV¢š†ÐØÙ CÕICú5Á°9ê^üɈâæÃx„ñ5kz"óa¬ît½9¡ =èœß‚µè=†s[—áHË¿í&`mœ4º¼ˆ®ÕÖpØýðE,Exc|RQ‚Cb8·jm¢ê™[½öX¹V¾}ŸAdÓªæóß5¬Ùfo‡-®MSÿR¸_­ä<Ûf›†îW›o6Ewøõa ´r›Ý†‹i¤¡³|á·>ýœ‰[(†]o󸕦®Óg!©ûz5Äî¹µuÅG~ÇtÝKm,‹£&_¤> é9Õ kºaŽ]ßg76|òEÛŒ \¥y\Âz.7™wò¼Â¡•mÙ>©då\/0âfþ¬ÆD'Çv±owR¦B­c¥°J™=c·†Àjq„6NXCÁ8ÈHÝaÞÂý‡L]B³ƒ'áZÖ}0¢§Úcõ”hʺnÖ›ãö™ÄâM ¸¹qãd#¸ž‰ëx¿ãFzª»ØŸ½(*#î1ÆS²=¶ìbh´¿ §÷¦†6'7m(G( ¤¬×Óm‘åÅTv2HQã=–×hØÚŸ Èf®ZŽÓc~ü˜œ@¸Û½`¤ìr[‰ª.Ò0®©‚n( ŒÓuNãÊ„®étä´é»þ·ÚWÕrËÔ‹îù¼?ÿ ì2‡quì0ú±ú#rõ¿®éÂãrb§-ü¢ýŠÑ~Ë4ÈyËræDú9~íñw˜\âk¾U\Ð(š©'”&>9åUùnŒöaÆ^ò¢ƒÅ„`yËR(Šdƈ‹f¬"–]æ„FìTW×aÓÌñC9cSþ±!LJôt‹êȪ[ë3©«Øé›±¶›NÊöïÌç{Ö™ý•Ý:««³ÛË»ì»_ëÛï³M[ç»-¼€Ð0̶…²iŠí!n_ÖHÙÉ!Eõ1:n¿a Ð=« /¥„ø1Ú|jä f ^q«Ì=“2Þ™ß>Ýfj*¾•°ÓÀ Ò+6œ„.=Ž&ñ?üžû1âŸu¾ t(“HÈœ¢ÚÌïÅ5) ûç>N —3!FQ®ï Öû;‘ö-l57ˆÅTÑ‘véh õâ“AºKvEÞ½5щ>Ò÷¸®¤uÑב=Ÿ$3Åq„-sŸ×uû?,p7û6{Òú7 Y }§Û–ØÞ¦¡ìö^ˆzËŽCº.Æ…b}7´=ÎËE¨^ï#Uæó;rhÊàQ~nCÕ~)0¨Dž”Ù\¹ØMFø™²n}7Èì9²Öüp¬+´8‘à?Öuï[áÚÁ0}nJϬïw~æ `T¡rÌ€S^I|c’!‘?ZB‹ˆÌ7j\ê%{a¯„ª“ÀÝ· ËN¼òO<Äþ œqÏg•›û¨RVš|øc-ƒ úÊBw”Lò|,©o†f¶OÿKy_Äi„ŒÊE nþªN%’A,åB$ѰÝ_Š #+1°F³Õõ?Î1ÜG–d¬,àôàM8SÁPŸã} ˜÷ÒàðQÈqê.¨Qr-Äx+NŸ`¿Íåå§ Žé€ót51¹ó·Å€aF¬|Š.˜a´JåË/pETw£;.cpow/9ª7îs³jeïDI[·UCh¶Ê¸R35†²QÓ?ÿéNÝà‹kºz½+¶¾£+Ü’’ç y>–ä™ñYœT ~C­A!b·\M]ßF|šŸàdöêðšÖ÷tuöO ø0é¹mßÀ Æ„5Õ³!iRâHYõä»Ë:‡Åþid»ü®Í ö]EàX+ø&):xKÝX¦&²) úÄÏ+VÞ¡ŠÇ )<—âü3»>oúУ̢gI0]jš`Ÿ~‘•PÊr7¤÷þo½- ØÙˆrUW°øÿ§ŽnÉøÊ8„ºÞ…ud¦Ùç“iäª8ŸŸB7$e-z3^+©éÁÌÕÕ#àÇ8s×ߺÊV‡¼í>ä›¶Ør/âüIÚ¼ÿýÙ’²:ë¥XVæOWªM½À¬bqk͹>„»u±^äUÖi5£:H}¸Ò#Ë^ï÷@3@‡Ò\%>Wu9«æ Þ¾xËÙ3¼•÷©ì¢ê"‹ž…J—šÖEì.ÿ|{—‰:†ÀUµÝø¶ë+nþ­ã¬¯_ 8Å0ŠÅ®jÁ N‰„€yÄD–ó±å½aŸ‡åÜKô7l»ó7{³ó·Y»ì?| nˆâoðŸV{ÿÍ_yÿÍWwËÖÜ6-«·qµ6óÛãnP5mQšsv¶Š†¤ ª•ÅCÃê䩎Ýϸúx>UÿŽ-ü·þ¿ÏÚeÿá ¿!>&ÿ;ü§þ¿û ÿß}…_>0°ðÛ´¬Þ: ¿ýýƒˆ£M|H¯‹ü‡úLÀAŒB  ``Æ£²!@ FøÝ oÕ¡ Æ–NÓ+WIËÃQìŠG~H§¢°. lúÙÁè—P=]44?¡³#%ȈsPÑ3®Êm(Qo–…*ër—'1ÙM!ÈFŠ:ßíõå½|¿²ÑjýÀŠêe€#XX\âCjD˜š¡m¾+Žt!BÃXX¦ U£òåòúæ—ÕB´ÌøvÙ\4 ›1)!-Lb8ÉD‘wGÉ"¢K8¤F¬£#éI15†NMÕ(ý¤|<ƒ+«•å»®IÒ`Z¹¥éAûÒq§Ö𼚮‘Û’ÒÒkà /õ—á<4àTúdúÁš©!w+£ªŽ­ÑÒ& š˜Iƒ&nÒ@*éͧûm±†v_×5Š¡<Ú^lª’erïÝBtFŸHI*rOùR`OyÛ“¥ËǪqÍöVÙÎÂø×uÍnLÍ ž” À‡‡ûë¾›¾ %bóG˜4c¿D͵ê{ùùÀ*ûŒ4:=ÁÕ<2)Ï4„FTG6i9œâÄCÊÈ Úľ»—Æ]u ¼Ÿƒ4/S1ŽÔ{¸—·¤*‡Ò§ÞCÍ štt èm®V¯G‡Db½Ñ²Þ/¦ÛÁ£q­é÷ÖYIN¤ÌäíôïÉ®ÍYŸu©FÃfÍl(›_âŽÖ>ÆÒi·å‘vátGÚK«¸ÈÛ xøÄýÝ0KdH T.ɲ}"kX†P&~CÎCðNTÇ}ëþ:›ÿ˜B¯`{Hò§³ÍyP3ƒ>qäá.&\([£2Ô—•ñTˆHç&p4}Ôs®ÅT-<6âü”~Š^CÇaÂÙ— ±Ò®n#gb‹–¼°ÞÏ:ßí 9ë(%U›.{T‹¶±ÈA\ÏຖƒÙå‡OáȰ˜ =Ò\°¦l,<ûÀꔺ_½‘˜Çð?jg)^ÃZ ®Ð5r·ëòís&o˜mE!&‚ÍôO‚}Yoò’G]¦K$‚Å^@2èÚãl÷xÀç”Î_ÿ,è™.XÚ§æ¸5e£óÜ…‡QE^•qÄt¥¿¯­>ãâp$šK#n‡vΈZúAêX!U ™ø7uzM¸¥€¤ÐN²ÑÞ‡þ%×/J«ù"­¥Z½±± j©j†ki»e;š~)̱±Ì^õß•¿ˆÀþ¡vqǤÃû; æòD¶ÕÈV™Ò´­àƒìT··ó'³º<Üw¾¨`K ª_ªÕŸÓT3¾ †«“.J`!å©D7—Té˜SSHPMÑvº•ÌW>Y&Öt5ëŽÑX­xu«ä¹¾—_‰¿ íÂ2ZöƒÒè #8nÙÇÒ» òÒOŸÂ׊ƒÉC]Á1Ëkq%Èf fh|ÃH> ÊŸR<޶´Urö͘ ãUÊrˆjT£¢? *Â&OÚ¯ä0†­”9 Î=ˆ$å5̆-¬™ ƒE(ÌÏ¥CÒ)i4&õp®Ò@»m³~ÊËÇuÝj!`›Í0pÂ# á¹3.—œËáGB{P£Å’õÔEvK8@MOïD_/oEµµ‰+ûG&ð<Žœj‚–ôƒÁ䉌‰ˆe•Ÿ‰"ç0‚`ºº{cZ²­Û]"•Ýo¤kpòWJÞϾðûјû´…åóÖ‚1÷æ†À æ>øûëT´Ý‘õÄ)¢Vc8HSÕQd¥`TÑ})vdÜe7­à𤎃ëW&‘ôSá8)˜†L€™ð“(…ñ¼w=fF‘7 òØœ@3~ ]ÉÈ›‡«Û¬¸luzNÜ·7<~&ÔÎ8fB§îÒ¸u¾Å3YCЩ4Ó‚J*èeðæ~E¶ÙÍ?Þg÷dºn=xȦ8ô)}”Å OS² »õ›ÜÛúȽHÜ@GºµyÚ›7²€TztÞ®ÎkóôF 8Þ¾Øð]4,-Ò':,fxšÒ´˜& y‰CÝEÐw1Ú.¾ðiL~ˆ!Õv¶Iµ($˜Û8Ä%5ò‚Ý’s¤gT•0Ϧ݋¬(ùÌßQDQm Çvp|½Ö„®¿™}¯kyw רªW1ˆþ+?årûïíoÃ1á1d‡>ójÛ¾S~ʱ¢eËÞ Â…XXB)$¿lWR›u‡9´EÙ˜1%PXaƒ’j÷0«Ql3© 3ã]½åCüOiiÉ´0MF¤‡¢uÃ'©·J\.8NƒäÒï°N?~(rʰeé×ËÅòå?¤]:1Ú´Ô0+uy©_\ "ÕÎT¨‰Oˆ®Í+Ê4$w”‘¦ÃglÈH&³çÌ£(Ux_Ë~µ<•ŸBrœ7mÛãÔ ‚{ЯƒMš [pú/zê7íw›:í×O³%M~M­àÍí<´)®$¢=û¾ÉßÖÅö°šÅžQWž ƒœ”bÙÍÕ§ˆI‘…&2£&1˜·Ñ˜KM^ÆM\b&-oã'-•ù…ŠiTñôË´â˜ÜÄb6 jB{*nMtx£¿/Ñ&èvðL\Ëõémõóm2…'WŠŽjV6p‘$Ð%±¤-` Y¼r›¾xe™…+1‹Vü Vnc¬(ÓÇÝPƒ<Óq@Á×`(µ!D¬+Mé™Ù-ùáFzzE«6šÈE¯ ÛŒ än Û ŽbÂŽlâÑÑŽ7yÛ‰s c~„^Ã2×ß  ôVÈ$ÏiÙ-a€ ½Ið°Qì8%Þ‡YhãÓY'sv|L5/DúævéQâ<ÞÔ n²]åö¡8ÝFOâ-³1f¢}ñá¸ÂÐÖ!Ò@¨Dš ÿŽËM†ÌTùÆ^È”&iÎi¬9±” w’6?«mË&Ê(-àêæ€3¿œ­V·Ëà¦3O­à-ãÌ‹=æ´+ÿº”aÏ%ÔÌ×]ÊnÿÚó…3%}sO­ÐŒ‡ Ù£~YD·ƒGáZãêã/Ë:>¾»­ DHì$ºM†ñê&5§~o¹TXˆ<†vB¸U]9‘·ÛÄžpPÕ9?WäJ^]„¶a¾Ã“~­Ÿ ²õ¬Q<ýÔ„ž òŠ&d¤ÆiAÛ-6³pjŒÌÆ¥‡2b,ìá§Žõpl)“”Ǫ€¥óy¹p‚ŒíÆ¥HoÅ8®¿¸HjÈ Ëô'Æð܃ª¹ El‚X¬§H‹%êvZ„Wí´0GýoªØÓE§VðDæ (]„(mDtjOdŽˆò!ÐT¢S‘Þ“2l h„†e¸MúÑ‹ÕMóûó© / (†?‡×!~þ\¡êlìÀüâ¼´u['7M­øI4Gà—ãÊ—´›ÑÕfMeFt-š#ßd#Ù,ñ\c)áèÕtFÍ štFG<æÇ²3Ä\8ßnëcyÂ_µ¸«y‘RoL­ x£œòu¦âzœ*‘Ôòü BÜhoá\‹›û¤ÐåjO]òX¼Õ†JW›ô“`çžmK ~¹sⲈ å£eT¬ƒÐ+Š!Ž¡K¬Û@ ( £ÀÁ¹w|°:î›|Õn™ºhÆ’KSœài÷b)â|7öU“t@ŒÕ†PW3‹#,VQ·âߨ*i Ÿ¦Žƒ7ÃjÒŽÓ$µÂÜ–áÉ8š dÆŒñúñ Q`õc÷’·d]Ò¶nY ! 5sôCÜÉøšH'~X„Ï0B(9ãü½(ä±Ù¥í/·[ @zãýH=¤¼tŽ ¯,sŠ˜Ý‚ÖÔùÉh¾¸&%éÌ3ÃÄ¡*1´M…£m•[Â+™Õmvµú’õ#1]fö™¼ñôJ¤™Á!)%K&»Mù90 ŸUð”t¸@.R,H½¥M"‰f‡ ÆlÈÕjt]Ìø¿Ø ˜¼eÑbA¥)[nsbTuÿF×»œ}nW|Cww8¤ðÍCPNT-#npUeúHHì&pµ±€ÈMÖ°~{“S’ò¶È7!s`:9øéÄiüTaVƒ¢aºâ@Úô¡‹?®dt5àzZX uV%eêÙ 3¦x#ÅiäynÒJJÄÔ]{¬ž“ð} “6ò .DæÑ±ªHÊ;d@øÎÅ çù•8ï[º~$Ý6å¸ç± ?C¯Á1>À/ß’ýrµâÝ;Ñac¸a‹ªI« ëæÊÁcSÖùîq¦ß;Þ™Ž«ÕØç… àIha ­FÏE\麶ØDwN°r‘º¸&FütƒŠ1´t‚Ý“ür$ŽŒ¨Î J`²ZB€™zãEÔ*2¡¼MÒ0“2Fcœ Äh0¦~v*ó”]MAÄu†¯·—wI³!/y‘ò:iê~çA˜;ÿ+üà*”×ì;i'6—l»Á``=¹#~fû÷uÞ4¥Ü¬ÁW¾&-tšó¡Ú•§›)æËqÅÒñAF—MZHâ1N-Ôç¸oÿÊW›,Ež²àÄc0Š|¼1Ï$‡U)Éä –ðèÒ=W²—)Õ"¤Cýø}¤QÇ6Ù{ sð«L ,” /ùã¢)0Ø‹¡gÚóä¿^~ˆ£–§Ñî º­Yƒü–:…ºÃ‘à´ 4EKö0–­\É)-ö[Ÿa>›~ÒY æ‚4êÙ5¡~xEެç¡wôüÅ’"Žß ý)®ñf$Ët¹»–r„Ò&­D±YAsN6QZy†a3|F»¢„%‹–o¯Q?ø¼ c|AH}“">ö`¹äˆL¸þå‡!,ªy Cá*Âçÿq§|þðkåÓ,(þ§ºi؇{L»`5áJIS!¥eÀ¦™–PWƒ„:þõC/˜ÝÁYëM>^ò\·ì{—t⇈Û^<öí:g_§¢=¢O~7%“R*žëŠçvEóȽì’Ýÿ ÷û¥öçñxõæŸK"æÂ1AyAT­9×4Ø’p¤7bÓnó˜–µ?ü(×xÄ´Ìœ·ŒjÉÊt\Ö9†R úÕýVeäÑþðy.bÝ›[Âè¼çp'#¯ù¡)É;þŠPRíà¶T z8ñæyùzløAðbâ—GÒú¿ý¿‘éŒ[ng.4uµ%HCÂÊ‹Ãwl‰ªüú¶B+9¤?Êfáîá^*Œ¥ Û0’f6”ݲ™ÄØD2Š™¶P$õ’±¦Ó’¢ï?³ä`¿1Câ)F£’@šàåÛÀ/.‡Y±m1 ¼_×éù_ ã.^îGV£±ÍÒž‚^QÙgO½™3õÿQ÷nÛqÛÚšð«ðÒ,¯§Ó}+ˇh·%+.ÇÙÝ75XU¨*.±H†dIVF_ôkôëõ“ü8’ ˆÃÄòê=öŠíâœç÷A&Ü$UÇyˆo Îø×÷ÐÆ<¶¸¢µÀùÓÕ|ú§ ü€»Ï§Y>%>)Ãùš°Üdgž”éån—å|îŽôÇHïûKn‡5àÞ„w¨LFx†&ïÏþµœo¥K¥Ž¬ÍÄ™îï[ÔÙ‡ÌÇ7ÒyG2÷É.Ó}PeÙmRh ¢@¨>¼¾³G›lÞø);Õ]/¯¯%»[”ï^ÕUùÄv†‘Ó È?p ÚóꀿüèA¤U^–ODAÜ&à–Bi%®pGøs¶äóïòîšâç§lçóU'óŽ{=葼T^ ÿÏ*yhës+¢ ÔºÈÒ±¨€!ÔȇŠZÂé°aã5ú޶€ýzAh@bS_ÖFž«ŒýÆ* ›¬ÎþQ* j٠ɯ4†oŠ.û¢EdÃ>_ÿk8”“ÍÌQéU_ß=üš £qã@ǨB³ÁùsÕ|E¤æ›Žj(Ë9Á_RðJZŒ1¥¨/Ähއ¶Iõh9aƒƒs–®bÚ#ô…2‰+M1 ÃèjŠ7–²HSJ’êö)e$œ²  .RàéSù奠¦´-°áô5¥žT‚s××§”äeÀÚÔ]]ŸÆ~ä6ñl· ÊZSÔɘ§j¼uxþ|uÍ·¨Õ±mYÊöÛ„ÈØò,³îÊ®;F¯:°ây°•½¦«Õ§×«ÕoäÕ×8¬¬¦k¯£9'*if wMI§ãÿP¤x’ ÿç÷¡PŸZ‘[Y¹.ò•F(M1N‘¼ˆiŠ,†\Ñtøá¯º:b¹× ÃIhô˜}þ­2v!„ATáhq<˜h?f½Ù4÷©[ Êæä¥qÕ}©‹Ì€Qü¢ŠÍÂÓ4*áÏõ4,éËw±ý93˜›ãÜ5bw‘„–ŠP—h¤ì“ŒBDv‹g’‚„üq¡wh{n‹þi‹íÈñG"|ìª&®“¢eÚM¾½œ LœÃðƱaKD þ\œt.¬úZäk·˜]“ŸR­P6b¹éÏ<5Û®WØÈ®&¨¨çÖŠ@԰Ǥ‰Æ_ù-Y'HœiR%†\œ,ÛfÈ¡`8—>zgWfÐn!A"GE}²ÁjEðÍ›TTíš׺5^XoËÂ÷|0œCƒ³"Œ°D¸Uúq‘Y<ôg„N]2‘ô¸¾j)(Šl”ü“ê=YÛ†›N$E¤N¬Ø‹þÅû›ÕËŒ7Q gÔS>RoÝ=UÛEÔ5Ý%Fë¦EùÉÁÄöØÖ•X˰ÈðÍ,ôÈæÎç+¤¾ñ“%›=ïÏÓ²’B-ÚM ;•jVx_õ`| £¸4•Ž5/ª_l·Ëè«‘a uV»–y¿÷ˆtêE4%þëð[¨@nL—F*Ó{ñÑ`ºv.©Hû|ÛWÙÙA›š²m¨ÏØ¿òM}î3n1+ý‚ý̾Ùv¨iJÙ½„ŠÊ r Ëš¶Pg¡÷è„¿’{”N ÑW•Áß–ÈPØ,«N*M”°æã\Ž·wÎNsX¾ÎEù§¢ÆÞúq!òçþ¸&§“…ž[°À"ŒžÆ%ÓÙ#f¼(ü ¿uWå¸;˜ÇW  TÕÝp.áêöòë%`evùrªº’}iÅꢅƒª2uÖ ÝÈW—Qÿƒm:Žo<çX`FO]ú®^-])†ª,‚®%]^ƒbG§þiMFwkÜb'è]Y@¡ºè …„IFM2b’zŠn gØã™ê¹1!‚RýuÏиóváZ¤“\HqtÏÖ³jƒ-Ôl€Q '½Ð½T3aé›^s:<ž»ò¬B.%añ`²=WÕ[¨Î%©lºZÆ~«÷ózöP €`‘wE)z÷í1ÈŽU$êðª¨þSâJ-SœJ‘~y.‘†sEÒM?!¡RÍtÍÑìD”g(½>±ò¸ŠYZšT-‘ Ñ_ËPÙ¨Ïò³j@ÉŠÈXu–—†ðK|¥Q€ R7]· Ъò üúK" ?~ýE÷0~yR Æ_Gÿ9h'bDÚ–½}!Î|hšIXÙ×zײJˆóCÖó¿‹‹Ï*LKŽ2hSÌf!½Åøîñ¯g(æHM@°8¾Çi.,Kš)ù¨™xŸ³&—U#Qs1Ë?‘q!%ŽyC¶©"râ—øW´ fP°.õÅŒÚWdú¯Í÷ûb›q›%Uâ·J,“ÕS§)†ZŽ9Ù"ö\B‘H¢ÎGšÑy® ¹¸t¿N„·-Óç-ˆv[æ È;0Ǫb¿OñìLpÀ 0/•9ÿuÂÝq}¬»~}<s00uÉ•uêÙY¨øÛ†üœ5ç ~Xz¡Å„`³iá ´l`>BWE–kéêriRUÍ_‚ye(Ç,S‹©jÖËGyÕÕÈÙ5V]Ǻ|)Z@ Î]8ÎOHæ $eŸªìËà²/•²ÿô|eë]²Î€ÏK…ÑxXö2Êô}²É•TÑQ‘âë×O ÷Š&Á|ªŒ%M}l3©ã ÜËqO0“*£xp·Ï¡> ÷$Ô˜;OZÿu1Î)(û3v-¿áC›èù–<¨S7ØS¾èX %Íã.ùI}èŸCŠTJ„ ¡ÓáYù'¢Ä^÷<<ùÇ¢Ümóv·Þÿµ«RÈ[@¡Âè $™ø6¯¿½û|“ýÉm³¿¿»]v)ç4¬4CöfÌ0±Ôá{qø^¦%*WßðIl’§wVƒ³™‘\ÊÌüÔl\âç_ï–üàò:llîg§ ;X G®œ) ½ØæMì÷¡ÃQr²‡Ú,^]Þ-3"Lo72‡€Õ}PžKŒ}MÙÂÏ\$ûÙ+n5Ì®Š³V’sÝ¡m‘÷n`Ë4tÅ•Ô,YëCr‚àÈß'sŠüB“·ù õ p9FñðÔœþBX¶É|B‹Íei’5宬9΄Ü<.;ü @W›žðäÒ3Œ/YÿBµ”'í9/ó¤–õA¼%ö*w¡œ 8Þª—~M¶Êèå.9õ]ÑÝGîÇÕÈKNóóJhj{ÒAdójĖ耻‡‹ì‘]êÝhÙ×ø…ÿv"E’ ìD³þfȈ^mñ Nä[òÝÒ^ãÇw[Hž%¢^ÿÔ e䜹1à@žÌ؈GL/lrúXߪ¯]syÉI©]¤jЫ‹¡@îMÿžWyùô7jNð|ÙZhÝ©*¤'2½äVKk’à¡°"ú«"?(YçpªÈ"ݳ@Þ¤®.oâªË›ƒêò&yuyY]Þü»T—Ôµ%®²üÔ•u_êm±CÉ•Ñ{K¤À°ü·IÏ燈–úA3!‡Ë&?xƒn?äÑK®U¤D?¸I:œé°~š§NÕCvÕ·DWe}Þ-)Bê6Ȇê'‹_ëó|B¥z–¬°Ri[œƒô€1™ÄWT'eõÇ¢cã ª˜V¼Íôù„2ø›{Áju8ä“·)ó§%æ0 $'…;Ij9ŒÈñÜí²šåÛûøÇur=NèD¶ÝÅ7A: €&·YCÌ®f›sò-Ò½ùlA‚çÃ×bê.¿¨'×f©aL:UBå0ŽM-[9ª3ÉOO3JðtÑ:Ì}gÏ 1ág/-V!ä0Ô 3œ§$Æúñ¢$›¼þõy@"lj×Èb]øî©ÃìRŒVê¡ ô§Ž³g¡ÅÍ9Vú©ëÑIä¤\Lˆ@å#…ë]1jªǒš¼IW9Þ„VŽ7ÿ•ãMÂÊñ&¸r¼ù·ª¿¤«¿„VŽ_þ*Ç/ +Ç/Á•ã—«Ê‘®n„V‡š‘r\Èé¡ xDèÇ(•îYŠ2!LÅúqOWB‘‚µù·hnúc‹ò~ýˆŠÃ±‘Ccâ¦tãÙµŒ_[¬#ÿˆ6}‹ª]— ‘1`„P=gíîŸhó•,(@‚ÇÂæ%ñ;vØÉç,Y?ûq“˜Ó9eH“£X×ÛcÞöá|gNª£ÏbG~ÈØÅî€úÓØñÛïò>Ç[$í) Œ8÷‘©‹Ÿg]æOõ9–ôÆ™¹È”ù/‹3Žlص(0ÎrSÎI‹Ÿ–gÝ?•(–³„dL<&|鋳íèËVÆ€±¥2[úÃ4ÕqZ¶äØvo·$Gs‰ßÁ»›ÍP.îsGíÙïôzF®w kN‚PçÞ5yLÂ}†ä>ú)Ü/Ï}]Õ§úÜe+öñÿârõ2#æ BO 'EÊ¡àÅ^j5˜z¿ÜÍ<ŽÍ~ÛH0îÄA÷ø¿ýðn!Šñ } *ü–¢vhb©?j5AÃÛwKPÛÖ§Ó¹"ç˜'h²´`0ÂSWuÿ”¸¸\3UtEÉ^‚€q&êºzu½Z‚I’ˆ¿áŠ*’¤Šc:x)tñï¯Øï PN…Šmyg@0Ò£›ý8¯%©¯÷eý˜Š¾ æ)u5ÚõŠ^\T†T ‘Wx³ËËV€ºkö±Õ^Æ€1¦ºÊþyu÷a)š Xz“T8.E/òœ1- Œ¤åŒ1ÑK^$'ääöIxÐÖ¥ÆzÖ-Úß“Œh € HŽÚæèõåúaÒýÓIª€ö¸¹…h‹Øo¶ðûÖhgÉ!¿\ß-D-b¬wަ7[‰‰ .óOÿXŸòè2Tp€T…—®Ç‘áß©±±ƒø:_ý2[Þ¿Zdb^ܸÏqß-¶‘ž¢)3]ÓÌ. oª>ß”hAöIÈp×5ÊËSïšüÄ×Nlƒ3_iQä§>ê8fÕ¯ˆE¶)óíýëÇcÑ#úrZŽ}Ýî’ðq| Ù_”am¬ÁŠJWäzj²¤»ªÛ¤¨2\êe’àÝíêí§×Ÿ¿¼ý´yúSwŒÉ±dEƒ !ù*r0zd#cöjÔf!AЦoÏá½U#\îgªôŒ°órÃéˆòˆ”‡F$¸ÜÏ$ÀÍõÍûŒ›,¤AäYÈF$¸úÓŽ –8¿Bº{dÎV#œ¿>ëÀ‘®äüD˜\Ìü†ã|øzMñsRÞE¿=®·uշľ]ÿ·ü¼þç÷范P`—*.uc[æŒ.þùŸË|8ÌCâùÉÜL§˜×[°)Êl4Șs6:³œ|Ø‹ç=ä 4þK~@\¿ód@—Ö;.g­Ï[_m>[Y”ƒ²ô~YqŠÃ©YwU]7_ò0Xo©& Å®?ÞÜeƒÝóêW–»èÄå Toõd ‹xŸ>½[(ѹ!¤ô¯ l˜\†×ÄL¯gª\§|»îžªíš™ ½u›é_±7—W1;¶uUüÍ_=›ŠôÍ#®$”Pƒ ŸŒb©xâeÙóžæ oÔÍKR4¾˜—Õ[=Öí=&\}Ý.P9wðÖØ„§¨ÍÍ2nö\õó/üë®îÿÙÄLÀ`½•›€X*çïõŠõ¢›g«hÖ»n»€\sà Á$‡d×äÕ‹¶h‡ª-zýnuu÷ ò‘ÿÅͳqƒÄQÚq£gÐëŒÎhÅæÈašI8ÕÐÄD=žIÂsÞ’ÙŠ*aÿx†é/Û€`L2êÎ ÝM²¬VÚžIB{Q'øèE2ݬøÞêÑ=é[á;íÿ]N×Þ¿}jr\_Ü\¾}¹ÌòwÈÛ¼é‹òì´}Ê1Ð}¢Ÿ¢Ráos²Ù©Þgß>]ÞòÎâ¹C7͸©² baÑcÖ¢Úáü%Ô¬G•ùîCê%©špçò$~H¨‹Ö_Ħ±C‹ëµÄ¨5@-ИA×äUE×'´G‹¿X}½{¹´vì—¨Ã#A¨þÚI6íø¨hú“#!UÚ}¾Eë>?$M‡*ÞK‘ Woþ…cÍðõgR¦M¬ÙˆªIYc®d"å ü–à·Ç¿nÚíÈìQ¨¨:ÔöˆüEäA¦£-ì(ìùLÏròÑf-n¨Ðîg^1Ÿg~’%»J¨•Œç¯Û}«<¨ôÇW4ÕlJ홡ø д+‰ÿ“²_b‚öVod8Úž^ZX®2¯*4¢ù‹‚}Xן¤'šW§¤²°gá m›ñ_âŽ{µ¢¹dÑúRYÞ|Ìn>¿{#æ¤ ßncÛdŒöè¦Ïy0ÌîÑ*Áš |w**–Û¨N|€šˆŠÜ!V ¨ñPe ¿á¯à…ˆî÷ÝÀL{cí¹écY›ÌÜ=Æß…颲4ùöõkÜ“"õ­Øœi6­DÙÀ=åÒB)Ò1›L±YB½2oc›R¨ñPŸúÛ"‹¼‹¦8b@)bEò›Xò´Õ¦X“ö'–íH˜;© $ï®lÛfM÷bÄVp€Œ…—JùËÛ!²ås_ã·ëó²Œe=‡—î¬Þ’A_’úŠ^Îk¸H ݶ-â_ƒ3$˜ß<ùOñ+ Q?±\‘ù6ÅK΀—aâÍrW²¿’žàh€$ß ¨[X•Â7ªò´ÒÌA½õ‘ ˜H£2Ò¥¥Õa…N˜ ž·&Ì[•ã™* îZñ¯K ·ܪñ•ÿý™¡s³Ã~ëæÜ×üïñêAá Í!Ô.3¾’±+K‹Óá ѧSFAô–Eø+šp¡†«ËÊÒŸ« •1ë»Þ Š2hCÆ+¾?eÌ‚š°sQöáÝíRmQÕ·dVž.¨<áE e„É4wWÓ¢1ƒL2XB–òÜÑÝ×duo¤ s( ’£v¯'yŒV¨ëHü©Øãð…:wÃ,뇫»—YÇÔEÈKGc\oòíý¹Y·ˆÌ•ǶI6L ”:ªé[úÓkñ; ”;Iì+AW— HK(`šÄg–HýºDiwûXšÝÞb·òÐ++¿ÉT%~Ø2¡ìC¾i‹mÆ–2ã—¾V¡ÇùõjÑävÍVømUªìs•½ø°Z}~¹Ä©"¦þÄæ_"5™ÂõàN:-¾Ö÷¨Ênê Y™H–l¨.šñ€ß8-´`0E¦®j6 TÚ¼9ânP™•5ï ò¦ó×wY¾Û‘Mº/P÷’t£(nÖeû¶>ÉMîjÆ%MÒ€ÕÓ¥Gâ?æ=[r·PýiŬT,kÈ|pSØüòžO†-Aû˜GÒ`4¹Bï·ËÅh±l èÉ@PšÂmNW\X€ö¸!,޵Š#=xé“ßyp‹··IžÜ9÷è7KRMãÿ~æ»Q [ŸÛrÌük´@¨ªûL–UöÇ—O"U%Íb¾ð¸Õ,¦ÔÅ)dhqm~]WäXû næ¶ùöÝ~¡úÌüu™ï…EÆ,Ó£á$jbT$A MÌï¯i2|ÚÒ`U–ë,àì>Ñ{USBvT¤ø„/e¿¡¼ìø³c±—lÉ–É¡Ø1&È_xiVxúúþõŸ×7—ÿ¹LjU¾÷5ß®ù'J’Eþ&<˜3oE’x†__äxŰÒ+I3aƒj¢xSMnÆynþërG€ۤɷ"I4X@9dOµz°Ñ v­û “Í 2ÉAdb²Ôûì–'¤ÆdòèÅíû›Ï/éÐ}ÕÑ¥áäÓcѶøË‡«ÿòÏÿú_—5¾éñovtMÛX»Å*ïý%’¢Œ£H=Š·—_ýeЍJ‹¤CÒd>*QÔ§O}4ܦß|(º‚=@ñ¬õ€`wC"PÉ`™4 <ž¾‰¤oüèmŠìö+ù`ÅÖ§ÅÞ ,! IXsˆÇׂÁ4˜º*rŒYs }³“Üwô$$žËípF]ŸdÓ¼&G³¦@X‹¤’ä…H=ž!Õ€iZý"4›íŸkD&Êò wØ÷9Äj¢ÖàÑQy®ï:´Í¾ÝÝ’¬±¯ºcN²Ý£§eD=>udš"6o¶ (êÔW•_åÉN–éß7MS£d£«z4 S_Í“xwwW¿_x̵ië "+Zl-‡ ¨ÆÄUÿN£6Ù`³Œߟè¶óh!&8` ˜—ú`ß_‘Mï PnQSâÊuêIÞY8˜ª3Õá ÿ‘|î«Ó¢DmOWÞ¥CôDü0QÎý1¡#š¿Ø÷G©À†ãð=sŽM8ìyo­ p?J>´M§Ú†Š‚¶?Š¿´\ïqŸN ¬·*&Pô'´Ì_ þaý$ˆKñk…ó–A—Ô·K²HVßY0Ç>eåмe!¾?ªzàO¤„*HhÞ*ߦÂ)~ï©Î_‡Ó|÷©î!¡vK “¶ÛÓcý‘Õ*ßÒ“AÒ)¡ z«!ü˜"UÊÆ³ªÂϪúq'9n8 š· Ä÷‡©Ð•MÂ/ý ž¿ÔûGiÑ·$o(y6ë>O'‰Ö[™ ÈèÜ'|bF0o1°ë’àmØØ\2Do1„ÿ3+ÂwM–Å©è»h5thP%&¾³¾ßɯ. E·«H‚š ÛG/ ÓaÁd˜xÎåT,²õdõî–\ã–K²2­¨l¢·ôiÁ€’L\Õyž:Š_\P†¾/i0"ù €ýô›o„_¿~ÊúâDV"³´lK'Š>ùI UE{¶Ó·wŸo]Ò%XÔy/ ÒÖ-µ(¨+-•œÉ½y=µX I¶ÞebmurN‰2ˆÌ€€ œ DV7b·Á$ÓùYÎó`Kï°„\Õ©Y“íç*~™ (ÛÄ•J·º½¹ËÆŸ_VKCÀ'+µR1…ò;Ž"ð)wúãóÈ ­¾Šã!ÀXŸ²§ÿZž6î‹ÅbNQ€”™Ò\”õ­¿áW¡ÜDÓm<©ªó+qˆãWrˆãÝ‚‡8òÔ#þ"ÐÃÕPœÕNB½ïóñÌAiíÑæ‰MòᆕZD•?‹Å‹”züפ™ªŒ€0ç_ŸDö¬Xš„ìÅ×zõRŸ¸Š¼Q?¬TæC>ªXFЇ]"§›O8Y²ÑŒìYUW¯¤”Ž´¯¾”èû5 Ž3Ђyè2¸Ru>²/¶é‹ˆ­hæ'Boó*ÛŒù}é™–;ÔàŽ–¬d SÉ"D¼Žä¸Å*Uö´­´˜¶|Ÿ_´¬އ¢ÄK÷ÕG~_îÙJ@×—©á E|%/ªÅˆ¦Ùý¢ò(bû>2Ò³hÛÑ´øéi£ßI:,„§®®×–’ ÍwÅ9ÑG°ÐCŒ‰»zvPöåòÝõ×1Kt˜åÝxEÍûôEÎû4 –-Z©ºTOUöL™‡†ç‰¤(ßíÈKe{Ì«[³>f=¢üñî.£c ôm5/2(üj¯Øøü(() Ú'ÂÞÌŠ$¶=´ù©cç7ó_¹ËŒf‹j“ì˜Ð‚‹bâjháy»3tÚ”æ1¯’¼Ùõp~òçÙ<Ðî\íršœ¤æÄÝìqV¤Ã5†½{õçåmö‚l•C-î2 Yɯôå¢*-Z7yѦ’QÁóÔQxj¹ž‘ëËÔ¬S‰¿•âw¡¨8@ „åþ;×çé'²_Ym97eïp¿™œÃ{‘}A›º&-Øé„vöÀõ§ØgÝ™ž×»?/’»ãá{Ì™Õs  >ß5çSÿç'ü,˜¡âq»/’ `D‰ƒÂóÏ««EöÞü]W±•]‚€Ñ# =ò}¹²Õ¾ýcM^ê§z’ðë"ûóˆ*ÜG¢øm½m=uá©>ÓÏÐí¸_‰lŠ,P7|l2— ß?ß‘aüZ<;Ò¤L_V’q:±é€p¾;„ïêš!8¤íÕlš¸#¹ÄZizC¾ÕƒŽß‡]Å×!?wžÚAÆøÁæü\ûŒ.§ 9%äP·O)dQ°<4žzAøÕÔã~rQû L@èöpö ? 8û²Õò\‚!æYó© ÿ ·¢x«¾ªl@JºNÁ[¤ÂÓô$yq”3ˆ £“9£rzÂ$©uÕD›û%Ï?ù`™RÜU”Nœ¼ôÉÉ͸òã/(2hñ4™ë~ÉQ ¡Å·÷¾ ½®…§SêKµï÷íf}žú|Ås!;:)Œÿ;j7¨­»Œ_]¬™+wy\ùJÆÄ\MØøîRœ¿µ O’a%ލ„bJìg«$Èoìlœä%À±`AhÛ“ßÐ'YÍ€“^ Ù‡‘@œÑ¬§BZª 1vìéJrþUJy.Õ47uó&Žå¢ˆÍ)¿»Ïwoä&iÉå|ôÎdw_^ƒ(¾3ëÑI)[é‚X晜8Ÿm‹!=€f ÙéÄÞb»»FßÑ©éã‡Z,€-tî³ü¤`fBê?µZ@º˜>R¦õн¨”õÌÂ29ñ>ßæÛ®)#„ „þ褮C»¼º¼ZýK>䜦­É„H(s †ƒ¶ì¡NJÔ×w¿”˜jS­·ÿ}O^oƒ÷‹‘\´g~Œüe&ýº,ç¶LFº-Y·¼O.qþ‚Ä!LŸHÃF—sܽ¿¡u‹*õUbóTeüVùDÿFÓI‚’ѲÏCÛ È5@nHOU$ªÍç«Õð¡º\P¢E§ºG©D™ yêÁ|ù¶aúW¹åx¾§&²Ÿ`‡óÔDî=œ¬²"KôÈý‹wÉÈ ù–¼”óˆ]ÄV4€s_ñBXöIaÐ_¶eA;ˆ–bVBrÕ m_±+|Ø£EyyZHS^ó7ãñ[G  `4³—$½1³KŸÖXIB]BÕøA4ǼCÿLYE ˆ`ETµŽ[Xþ:`ÂùӲʤÒ#H…ÊýçäµâçÈZñ³µVàOõštÈzS×÷§¼½OÁWèÁ{ânhèTÂ`³¨2l±Mr}´°¾*MAlZ±%@‹(ö˜ï×l‰a™wÁ¯ -ŠC©¥ÿ[±Û¡Šïå'k¹Èn5ž~.5éÈY–9€®<Çò'ÚdyÓ”b.m_´ø¦\òøIBWª¼?·QÄUõÁåÙ º;oâ+· a,\ž™qU7=;$j­¢ ÈÉ\qSwÿ\ÞfØ 8³ ®L)/°r†‡ÄŽÛîX‘HUtX0a&žT›wˆ=ˆ×ýJ\#•;½šª…ùã;Ø{ ‘êª'ü;T¨}N…lÏe´hl ˆ6$W…ãΙp²ÅçEj^Ìê»9L"Í ¼™Äf±ïV ¶vÜù+x|B12™ &ÅÔu–·œ²–Dl ëh·„ý¶Dâ2Zì(…&‹aŒbVE|â1ˆ<’¿ã?¼=´ùl¥â_„? ©ºwhs>¬Ïá `ÌP.掳}eø÷ì/ŸDö ´” è;ù(úx$°ÂO‘`ø™T–}á y$§eñõ)q}W*X"Ƭ9åFb5 3Â]®èè’²ü\öEúÿ’mw‘­Øbâ.ÛçEI³ë-Ir„ ?”yµM½hÂH.µàQR+"󋝸ťŸMÖ"Æ+2Á+ÁÛcå%5<ŒCúñEŸÉØ~œ,‚¾7÷8¨°L7n¸=}¥ä9‹ÌP` G*Â{ºàœ¼šp[ÑÖ'I þt–‚®SÄ/ñåZÇ¢KÐ8K(`=ˆúT-*Iâƒk‘˜H|Bc—‡b‡ÛŠ^¯î^ÛD‹‚ë ¾ñðUzDù.ª)µá¹…ÒzÏϳ ßÀýSƒHî&´#)iIó¼V(™4ašhZUN{“W$'݋džê–B:4Z‹XŽÑS·6ï#½@ÄùÀÄOÕB’ô‡_±½ÍT-\š‰7H¶d|¡”#ÚÈÈAøª_7dˆZ @»Ë×&s[J³¢éÈ‹T´|¶O£ž¬£j¶ rE?Py»µì'»6:~³_S ¨àj'Pì² ‚‘±vzÂÉ3*·pItʶŒZä¸Åݶx$°&ÂÔîç»SQá¯|Ò„= Lø.¥Nü7™¬a„}ìC-õQ6ÔмşQ¨:Dì ·Ãµ˜8k¾R‡ç…˜eÌl)]Æg8Z ¬Çà¨h!µé“Ò=òÏ?9ÁVÞ¬»>ï÷C@]²Ø ÔñC–¹¯© üuÂ-^´õጲÿE/6$9äÿ¢Yè ×îåâ⯟èÆ £¢(ù¶<£¾®ûcö©~ÌÞW¨= ãDËKVWÿªÏí"²i¡C¤›©ò±«C#~1üRtÙeÓ”ˆ ÷7jÕ“¬ø,:=цŸt1ƒ#Çgàb¹¼ëFÍÉ?zŠF³I“¿s,‘Uzaáâ‹ñu!–vXÊYÿÖv¬û®©ûŸÿ±Î«¿šõ›CÓ¬·¨,Ïeø1ñ÷ Õ†ªˆýæãÝ]Öœ7e±ÍJ¢Þ©ÞÇF,yq÷éæöåsë]4k>ý±&Cx *®¿S¼æ îìƒc8ø€^Íò¢Ì±ðEâs7‘Vy·š<àñúˆŠ²¢ÞòGAŽ6*ö#¿½¼~¹À\H°|ù]5¸p…6Ý+ä*²IúéŠGjùÌ‚·u~"cd‚šx—¬ÜÆ›ÅK>‡VO­`™dðÌR? êŒðãxZ²RÏn/í©ž_A.dôÂîÜ”ÏYw?ÿÕÐ3Ú×ۼᯃeTµÜ)JZ®ù¬yÉæ™E&G\ÑÌËU\ã}âž *òŠkÙ¾-Pµ+ŸXU~n}»óZÌN/)ïü6 Ô•@Uq«’&G$iªÏMöâóê—ã,|ò$y€`ÉiF'Ô·ÅvA™g7‰y„Ô,Težó+ïØ-1¨aÁS°3 op“gC*¶áÇ¡‚‘£D#8êvüÕãÓK¯?Ÿ`a‹Sx*nð(Ù8”¢Üïõ*#¿’Óˆ—ÖŒfIpX…v€b*’"½¬Úb/ìâ*)ÊZ¹9l€|ÈlùÛ‡‚d&¦ÝÄz?,Óyñ;9&{™Ù8M€±³ÚNÈÑ&¹èÈy˜ºúµà~[MH}qBmÒi© b€HÌ_©TW—w^ÞeüÚÒ¢œûÓÞ6@ DÕüz“½ø£"£g»ì둜à–Ý G¬¿|¶NÆ~‘Åm—€(7@À¼dCwtÒóÅ·Ë»—‹ìþ5D–X«•Ô V}:*P·üDÃc±[ä%¨Á KF1ÍŠaµÚsGÚòêù@ ;®‘,÷œïÄÇ~'S ‘±×?™~½{®Gð±O.JŒ¦-_Q{**Ö5"V©{ù;„»è~g±ë6ã“ÙD’Uâ7]W?žÔýª.ñðöM‚g·7%™'Õnx&±ˆ\Ðñ7*õíÉØ9«¢ž®ÜdRÓåúƒk™÷äê4¹¨vè;XIjÍw¾øÀ®éoƒ—`¯Æëâ ×ᤸÛü„º&ߢé½Ú–þosp>v3K^Öm{Aþ‡×"ïómß±eÛ):½¢ÇoÛ5<ú©µrvM¿úíÇ»±rá‡þC‹Pö%¯ø¿õ™üüâ×///Œ1nK2P²‡ÈMgѱC³;D~ËnUÚ3É^q:‘ª« m¨öÆè¼JI±Ÿ«H¯r©Æ~¡[Óx‚qH'¾"!j¢¶(j4d#þÀáÈðÿfXNÇÓ… Bÿ`Ê3îZ´ãŸ¨^·ÈUMí^, ~íbø“ÙP¹ÙgF†z…*ÇóX:Òñéì²?ÉÆ°r]TûÚ7Vƒ¿!jÕšÆÛÜ#ÝeF*+‹†_î_CòhÛúŒøzH'@¦€«ÉYå²ïóíñõ;DþàÉTúú5­ü¤Òl™(ð‡º<;'Ú@Îöà™©\‡>²+V»fÚúiY<ü.-š€°íÏ)‡7=«u}(ÑëmYŸw¯Ûf7 _ø-²¯±\D§"‹ õ¼ ž.Oõi¡ýWwÙnú[†‘LÄ/„{eÐ#ïÉ~|6Åá¯3IúD3¨¡>¨´l .Zcù¼cFžTbYxД‚_Ôt‡lœü3W죃Qú¯ÄÄ‹B\ôk$‡E+hãw!~%†jnF1G¯ñ1*Í­|éD3ñ#¡)Xäôo›sQîÖ}[tZË¿$ì0'óSÀŒ¼ Åsñ¤¡{&À±ïÏ»Îþ¹ÿ/¢›ÕßXZWÄö7á”r8[M¡úRì¶GDnß®ÿUoÂËÓc£5w2–ÜÔo2ñ<<)hŠ7îÜwkü;£ð"0€Ø¢W]ŒòÿNL<‰Ärð _#=$æúÔœ{4ì‘ÒÞŒaŠ]ãaTþ’ùñˆ¤à½Fx¿Ï}Ýmó2ô%o…qQ˜:™Ë`°óæOÇ“‰®<<ÃßäÛ{TíÖ›3þ³*3”ƒÆÑXR[¯¯ > »bš g“òsCÂxz=~ŒzD•Mô,ZÑ‚xË9„,™£ïüXØB69(ÎÜŒúµ¼"†ÔR°ò&¤))}ß$,%š‹™Ö×\^Ø<ÛdDÃ8êŠ0”X—¶»˜‚ì1%8CpíÍs¶ÄÄ'þ¨ÐáQë&i=B3Ãl¥|”æF(¹£sæü#1 ¢ÈA·)©j ý(Ë0êlQZ¥@Zò¼-ë âɦ!éOÎEÊ“M’êPA¬c™aÆÒðb¾ˆE½mNdÝx¢²Ð¡A eâë,¯Ü:”n2¦a$-èˬG-Ï´Îé¢d²5²8˜N¾fKÑŽN—ƒOœ ‰ˆ!¯-òÆضnŸÈqO;VNô"[¾“]ñ ïYÊk)z”1,n‘(U;šñ8A'Í é(1 €±¶Þ2Ÿ÷ÜÅãõg¸[Zò¼55žlŠòõ/PH úñˆ¤à½¹€!×»Ÿ@z…©“¹ °OmaãÙxÑG@ôI:\F$XG‹póëŠLÁ“0ó'e(%?&-:°‰YÑÜô¾ÆBûBÍ}WVÍo’ŒiIM!F1K¹É cëµ.‰±YËc¸[Zò¼EA6zý’Fнš‰„/’0ò%c,"oÉ&3x0nðé F×{È_wŸ„„C¹Ë3”àƒÑ`dý¡i¦Iø˜­ýÖ‹è/‰±nDëÐçíõlº”æ› ~XAa:è!µâ+u"wÄ%RˆÔDÑ7Ö€Dœ»EJ¿KPü]HùwIÄH®Cœ€:À›fÞ¤(y Œ«ìè(ã?Úò&o‚¦!ÀËXp~dHß<ßIkÇqšzYJi0ôç•€’/mÙøS Cíë¦.‹ml#jÄr“šyÚŠ‰ßQÛ0š‰†Ó—š?£ú9ä7CpñìÍECL|â µNsÏPÛx­[_±[€Ú­‡¸ð="7) ·«ò¦;Öq³Î:Gð£ð+nåÉ%–†Mx†Ý•ë-jÉqnÛØÙ –‹ŽÆÓ\.]y5Ú†ÑLÄ0„œ®È%x›ëaŒ ïpÌËçe'ÁƳñ$¢/¯èÏ›“Öz©“¹@;oNñt<™èJÄ3ü´cG1ƒFž£EAc&ɈG† CB±Äº´åØÅdçW’]ãtdyZK3€\’Õ¼,AØÚ^FÔo©¬zƒD CÈ‹.ˆQS×eŠBSq`œ/GaÝa;Z ù’1Ž7Ú›IÕ¸<XF&OçÔöj¿råÅ4Ý#É~–Ùm )zF[_·‘»ºí0R§ÈÝÔx2ž<‚÷wùiÝÖÙ·tΆ'¦–)ïoh¨ (µÓÛÐć|»­Ï»ª8–Ðu^æ)!f|Élý©Ý£§ÌFbØI7K4aôßÑ“?©„|É8‰ØYÜŸºõ¶}júšJRáÌsWÚ9 CŒc༮˜Ü¬%IóBe×X➘%Ç¡ÁFáÇDZ#5(Ò²>èPßÛ ©Í†¸5æ>7µñâ¾G于6 ÜSÉb÷ •1C×8˜%'&^â¢÷\§¸G´¨íB×QÛ@\±Ë.æA0fäI%–…Ýà$êæ¼éβ ¥Û¶E¼–Ýc`aò²­ç,ý‰%àäKG¿¨ÇC_7í¿ ÀÿhnžF!&ÁÇÄ Y7#⎳E»¢‹û(7C¢Ö8D~Œ+ˆq9‹õsbåÉ%–†ÃAæð°£ºÈ6”Ýäf, /Áåî¯2ò 0˜WÍck¾Œ:8êðÚþWYÓ – “Öp/&tpÔQµZì Uñµ„*,Í[Ý‘ž»Àua:gK¬ƒ©yUdçZI5à„† ŠR·üÑ~ç“Î?t5ßnÉ™\dÅRë¿2 f"asÕJí.©Ù³ò"Ç̃Š1vX¸;´ÏÏe¿®7tœ!ߊÉAcî§kÌ™Ñgjsyõ FŽCšx;H0[Mà,b{¸}sf+÷Bš³!؉©u#0ÞÐPAQ–0šC+ªú †Z²Û³Dî4‘»*Á]W±ªVW¤Š¿ÍOw•—äõã.ãë# Œýá›°À „ÅÉ].˜í…ÁE­#¸6õ¹ÏžðW_öƒà9ð%×î“b,;/bRµÊòj—±AÓIüYÍJnÂBŠôF·ˆ^°ÞçÛ¾ bf±ÑS]üB ®az ` Ú6ˆU¯™öÙèª\û²Î{º~¤‰(ŠàÌÇ3Úà²0€@cµ=íóâøÀ=³ë;ïòˆ%çÅËô°ÏX?òì·ðJ6÷·Q“¬Á±W)ùz¶È<_Ô Tƒœ§º8Ü,¡Óx/«® £þ»§*?[é —¦<ð›œôŽ‚*®d»õ&/É÷qD[k„±ÊÜÉ£p>açì-wîü©Æ³ô$h}اl‚÷i€°Ü1þHð2•sɰ­%”W‹Jš=±;â6pƒmª”âåG¦tTª©:Þ:Àæƒü‘à:Ìç†ä*@$á¸è÷KV ¾q7^‰ \æ&×ËS1kÿª-S±<¸ OxÏE¡€-Û–%7 Ñk!ì\eŸ # fkHKëÑóÕ"ü@Ú{$ØHY)q//F1dÀ<¬oÅá%ÚøµtËcÉÑF‚˜´ˆ¬…EÙ»ÛU†ûjmñáIãêö´Q¸R&;T¢^”µ§@ÞoQã!Ù^ðC<÷çÙ,1¯ÎCí&PÖç—G[ib$- lõ\¹p®´Óý”ÌPŒGÏhcŸ–êïZñê îSuݑ( ‚•›lïa¸þsH|¾Ísó=† ˜ˆ¡éÂW3ox«ÍÚ t·R™æk½™´¾Ãµp.uy>Å4HÙ^ð0÷çYÿ¿Q¯ÎCí&P†º¿ÁŸ>÷Ï)hè':‹ÍÉ~“ÁÀxƒëÍÉþW›ïòöõ5eíjßLöìÖøê»zÁ®Ò²üÚrXž±k[0~nÙ!&ÌrvL¹t''{ÙŽE‚_üN5–õ¯Áå‰g§»ÝgbhåVñS}ÈVÔ€–Ùï_l‘×û=ª:’°WÏå7‹ujÅ 0¿Ç"û7þÿœÇ—}f¦®8M ÝËãÐÜ}Þ4N´¹kO¬Z±F¤ª[Ò†<)Qw?eEÌöEI2qÕt—açâRÕί]»—‘ ±‘›>õ¹ÙÑFP‰<»­{£èìµïìs›…:1r@ÒCçM¿5w0Ü”*CÒI_bÌ»qbéúíãiáð‘;Å$—ÖÇmè#ns7Å75æ÷L›]AS`H~¦ÙÙRå~úÚs(‘êi f°ƒD„ûþ¦[°wÒ ¼›û/ØÓ¯­÷ÓÌ&¹&¿æ»ž¶ì{ߨ¬ý]Ï/»&¿ÎAÖ´­OÈŠÅmx?ŠÞGœ—eö–9³æWâz›opj¢Á¾¢®6è²$}»Ð™•öÀr² ]SÇ-˜‘îÜÝrƒºªxÙï1Øén3‚˜ïäzýÊFš{üÆÝÍ7p.+QÌ47¹ Ì·)ëúþÜØïÁl47øÄœÍ莇\²Ñ ßÐ :Ø õîzÄ4À·ÜÝwwDØÎ OM4à+êjîñg:8ŠUXén Ì÷xÈÛÎŽO,4Øßˆ£w_Tî-»Úʉ™ù{YØ™¾š%ò·Mý~㉃ É/_\‹Ë€û‘¿3ƒø+lˆg0¿˜šK_*?eïØd¬ÁE±Ê~«»^¤2ÎèëÈ“úÞÔmO[@7ÝÆIqâ¤#Š{œçí‡iö±Ý‹î%ý Aß‹Ž.d(] ûXÚ^|ÝDßG0Úwálö”ɾ³³ iQŸp¥<…±8âjÎCòv2!¶€g,Œ†;ù?ÈÙIbšøŸÆÎià+ yHH»žña߾Ƨ¼C8҅ü¬”$Ả!É»@1ϽÏS?<ó—»\4ûbƒÛìí1§' Åêju±g?®;-aÞNvÊ®K]!åtf‡˜ºö¯júš66hìѱTµ«¢A­˜l³÷R´ÆÆNÒL­ ]%ÿ»î^“-ŽÙ”²Çö®Wƒ Vq¸ SXÁ¡‚„±a©B™¸ÚBa†`ÍúPÖ›¼ Hu·5ÛÖ§~¸ƒ¢šúÚBâ– xi²®öhf¹¯ôˆ9r·§-”ù¬¸Ï«ý‘\ؽ•&çâ?ˆè®ü±Ò@õ¶é0ØúDÕÅ…ÕùÄ‘‹þw ¶Ù‚Õ¹±®ÊÕ§LúIdïˤ³H>^,†ØÃ#ŽxhÜQ3syèút.û¢,*”±k´ÏÁŸÇì?þ¸ý¼Êvˆn“Š{—@ä‰`—½ýx—}d?O(Ð5 lL{®*òÝ2!~fì`¸:ÙQJ¸c›±‰;â~;Ž=ãï¯IÙQ;\|M™÷d>Î&â•«Cp—œŸpü‚éäí¦èÛ¼}Äh­ÌõÓƒWð«[a5ä¶‹ä¼ê˜Xx7`îï¦E­Ùç ÃÏØ/û¶>á†ðDÖ;y_ììNq¯w=†›ßàA9¾Ø¡¦E$ Âî'ÊîáÏê=ÿüù?ÿü꿾úÇ?_о|g­¨X3éÛš&yU¼¦•W4kN®ã_ÒåÏIÊUãæ$;”î§Ÿ—(`9¨.‘"]$¬¤1Ë}±òMšb~RÌoâŠù,@ºr~“¨œß•ó›Y9¿IRÎ99Ü( /-€ÙÔq»¼ºKÆ.’’¶Æ›uV?Õ}vy8´èÀú <éIYÞ×8„ì¡ù’7Íá©ÊïV|‡Yé©Ì§`0S ›b:€S7fÐÏ,—$8´õ¹IÙ•»_is€(£+íOïîÂË”€%yÑ耀d¢^6„½TÿgŸ ‹;Íc®EòUª‹>E3M°#)ùð-ç¥ Wœü®À ³—¿mÅO˜U(Çú*€«ï0Џ#OiÄGSįòàô¤¼ÇT8dDMÜE$H°uVïð#Ægø0w±-œÙ`ÀŒê®Ù§iQôHn†Š[A¼ºû ¥Š3Šùª¾ /z?G²`d~8࿆6†éMläoü"3Fþ&8ò&ßÞ“œiá¡Oܱs{¶Í6‚Üèíæ†mÅ1Iu ¹»Êj²×7j¤±K1\ÜE}úu_~ÿðûÚæU·ÇñÒõl¬ŒH’½:M5$»Š-(³‹' €¢äÐ{bîÙõ”&MßI¬K¤J$ {­SþKhKÊÞé1tdÖ‡P2—ð_ó¾o‹¾Ø|‹ °Ò èî&5¬5z¸[üÉJå'x' ôPæU!ÉÝMˆ<|ß>]Þ&|âH]$å΋3{²Ð'ê¡é¼Þ€ˆÛ½ú }ûòËLÖ²•zµ.zúÅsâE6÷ ¯‹Ž¯ó $`ìĆ甆lî^_ç HÀ3þsŠ4Îàà`Â8Ä«uðëà©UÄÐ:|P[Bâ‰Ýö×–¬¡±E6!¾ƒÕSï »QvÞavÐ8ƒƒƒE #b>öÊ-ñÄ 7¹% žƒ…þÄŠ0ÎÀQ?ðx3„ó&<˜7Ð`Þ‚‰›ƒÊqKH<¡p4­=h¡ƒ_°a/lˆ!t  6DÕz)ÑcKž£J²¹gx]t|g€–'bÄï÷¸1ì9›ÃMg4è%ºkÜ­c‰ÙÃ×°Ðþü]dª±v]ƒîæ -"NG£¨ê†y%†a.lBÄ?`+ˆËϽºñcªòtPÇï犲ËÃáfŒØº§#ê1,'øhÔßÈcj­>×o¤åfM… °6L¾@Ò3F@ àj—w˜ERCþF.xQ)ÀõaRÔM:]ôKÆc6æmd2Ûº"ÖæO¨}%mÙˆçô&ŠÓNo œÔ q|@cÓNG3 i‘·{õvŸ¡c¨¿™Ø|m3tÑr<Ë0nF3iƒ?å!ÝdÉË<±™ô).q/¹{A¢ã¦s>M@_Yñ4ÇÏí&Mñݧì­H¯„»ÊäÁy™†ËCÑry(—‡böê¾ùtù1ûvÿõRõÑNÆÀ±‰¬ÿíWÜÓ@jÕÍñì(!bMÏ%Q®¥`Ç)Z“rï¸ê ļjÙ-Øé%þ mðæ!yC'6r©ÑEÎÉžüf¿y§èÜL&Æ2¥¦-ê–¬QÝ—õ#©nt§¦ĈK@fêiæ!Ä'ÞWù¦DÝëwEGÿ2MüƒÒôÀilˆ¯™M?Ù%=w_‡ÜðÀÅT¨Þ£21ÖE_W™~Þ[sç¿ê€†ht2ùW=kl~¯W®hº l‘”|AÍ|±–jˆ«[üMGS‹ž¢…E ˆs’Ö…†gxwÅ>v4 2I*½ìk—žZj¥§Y =¤êȉtéx@ÔsosÜ’í4rºp=“ŽÂa¦ºµ–æØø^0…‰»‹Kœ’à?zÅÞ·ù~_l×Û2ïä×¹cŸ«Uç+»˜]‘‹®¨Iå«òS€ØŠ§1Va§H<ü S7lX 2¢5 f©k£Ú‡ïa‡Dü]3þöí»:•©ü×Ñ?¦ÑÉ6QŠ÷ñ˜÷¯þuîúWǼi9ìm^ÎXS|ñuþØ‘ÿ­Ù?×Û‡ŽžXó€Ö»¢Å¶uë:îȈ1avØåÂáFÙÝ¢þ²i²Ë?WìX:~Æ^¶bû&Eº¤¾Ù;á{ä,¥°¦;Çp1•gëHf–°ßŠúAùæá@Î.FÃ<” Íé eÑUyÓë>¼ŒTŸÁÞ‹ÔJx‰Y§ØU;ä- òò±Ó¢’¾ò»G´b=¹Á{qÍ~›*_ÿÀ,n–»5g…• hRDƒå…ÑM.)Î%[Õûþ1o¥f‚Øgé¸p(Ož%:ß) /oánå¹Û½þBw u·¯_ÓyFY?IÈ^¬X$ qâ,kºẎÓîTT /_·Ñ ĘÓÏŠä̦Ègu!Ƭœø™o©¥Ÿímï¥žâ ΄a9óµ&Ö™°~ cp}ÝAl2ºÂ¹ð‘;Za`â¨ôMþÙ°KAË›¤Þ†Sjò" / ȧ°ˆ¤µ§Ýaûš€*o šÃ8–­FÒ r»–|¯Ä°’ t¨=¤¸nëþ"Ö>)à”I0„Îp¥‰Íµz$§ëöE_äøû¯‹d¡ÀÀ¸'y`Cªd££r—Ç=7„1‡Ô/jG;,tPɇÔïK „ƒÐ;Û[û¡ñ Ï×-žºÖïurÄ∠ª$b9JésƒØh¾2ÓÔe±}Šâ3ƒ°¬Ü¶ô5ýúDùyÝ"2úzÇŽÿùýó*»£œÅø@cÂW¸@žÑa4"„W‹:ÜT¡4ü¦`><…«•ïn#‡ðíp÷}ç>©8 Í‹±ðµRT³·ö)dÀ¸>BmíwTX2 àCƒdà.^]Å›DKrƒ|$°2‚X!š úR•Mòçýá3Çñ(4çg/,Óçd°Õ¾3‹ºöeq„ºÂ€î%YNu?“ßÍÐXú—À¹ȤX¨å…ÑE.“Ï·_/Çu¢(c¶Ù` ¡Å£0>Š·•ˆ°3`óÃÂd¤ŸPï}îëîÜÐ#(‹ê¡¾¤`‚±r™9ÍIudzñ®˜a†«q§î!wÇËɋ̜Ååxø¦­óÝ6ïúõ®>åE½ÄFAu1V±Á0c† š6 ˆMš†› åÃ9‚y²ÓT\·Ïž»Ó߯J²6RÁÍ[Wt=ªð ›Æê,½X5œbÏv â2u¶á¦fØàUwÄ/ÎWljê_K %Lü<ð5ph¤l…rxÀ§èÌzþÕõ‡_,=]…¡ÁÇDy ÕÝJb06Áo—4Ïè¹£¾oÍ#é†8b8€ hú%üÂ+>¸åÃOd'ßí^³yµÄØ<Ф%@ ‡î1'FjrC ]Ê_kðÒ^åIÜô$»ê‰l¾˜¢=îaõ[ÓÖÅí02ÚÑC¸ùkŠë’¦Ô'¯ÔžŠ®Ã±BŠnWt÷a­˜ìiãKí4=â¡ÊØUÌ„V6HÀU`¸(ØJª8v›»ý”±Ñ¸ìÝ­hÉ@ "ë, ò¾ôt¢ØHÍ|Œ¯ÃÑ2£–ê²ø5?üë%„èwÚÃ!©A°”íÍä¨Õ«Æ8dj¢±AaÀŒ¨“ƒVÆÉ·¦!5%ªý¶ b³ß6€ð÷ÛfïªÏÛþ'üGÝÐ7 Û“}¸º‡I€ž#²QúT¨f6$+;ŸæE«4¸“À[ŽÞêÐöÌv1aÄWãX¸Šî±Ëc^–q*è0ìü'Æ7pž K/F'2޵>7‡6ß¡PJ:§‰Ëœ”°È„éõ­î~ʺ#*÷?e—Wøï¤^“W¨"—èû6ß9*ÞVrÂvÎê¾tE/‰þ ˜^jQɶÇ È@\ÁÖô “ÅA¤ 6nªËœ"³§±½¿; e¢6W7 Mð««Õ5i:>\ "ÞáƒG˜­¡+‹!È¿ÛOdãl ú,‚n„yÛ–7NäþtýÁ_ß†Žƒ‡…=ñµÍ,Ím•qHÈݶ+–<­á;cŸ…ÕjÝR¶»Š×eDà „“Áà`Ôfvÿ_õÆsÖÖ `#"›ÏiüG½æbÁߣvƒZr¸ÊËSPøZ©Ãœ‚èNUû.¶µ¢ëŒð'7ªÂFVçþ6*’µ¦ñyG‡gÈEhàÁÃBÕÇ ?×UV½§¾Ö™å<Êa¿=éíq¯†LÃqkÈ×IYó™¡°ñ-„•ÌÄîƒzü¾gÃ:›¼ªø·Éê=ÚåŽuy®ÖÛº k<g+ nª›Å¿~úã¶F{ ­ß_W¬'m-ÿ㿪p¤¡QB"4¾DRž¶[\«vár €-dÙ\3ì·ÛÑ:Ì÷ôÜ ¾­ÅHí ÷‚"~bx×®Ã{è6$+MŸ±¬&<ß}1oZ²EMÏ•nî¼Ç_¿ø»^¦aQ÷a£ê’£5jl&5˜äŸ€¨è~tÞ]wE¿=iƱŬñ2ö1éà?·Í˜-„ßîöHHŽV»“¦Âß¾»Ç󼿥ð¯ëbhW¼­Ñ Û rIŒÒ‰MüãçâøÔìàU"г‹ƒ~}ˆˆ®/¸† Jwtw…-a¨ \“ß|çî¼!„>qwÎŒÁ“D‚s|¥«ÝÙÅF]á:-ÓºVõžë *Ð2ˆJ· â–¬" “ïøêÀqdÓN5ÂZ7^ü….ÖÇ/KrTî=Öcº*Fõ¶,lçmŸ4iAÖŒs·_±äï.¯>e/vE‡ÍH0ä,]¶nfÈÁV]ÿʶۅsívP¦ÝÎ59£òF}vS-X§Ô„Ñåg§¢{Û~½ãsÐøNÏÁà ô<œÌã“·ßnH;µkŒÃ£V!\ñ6&ï!ËŸ§¸ø:³ÅÂÉep°sY 3—zó/l°öØcã°ñÍ_WÌ(cF¬Ë ipÃ׋B—‡VƒJk¬  @©]`gêëŒ×Ü»yý޵–Ü 6Ùæ–ïò†.–çÌáßê.45£¯nŒ‚™e¿Ÿó’¼êý0‡OySÏ  Ixе³äÏŽLˆlñ˜sÑì[ÖÈžVBÄÎÈ‚^…Y.¡°†-™›{[9] GÎÖ¦}FÜáýê_=AÍ»p^”‘¦Qûþ’ìŒ$s Aa*ζ@…é¿ÉJKNð\¼êí$®ÎÊóåš¹yÌšˆóåýêkvyw -¢&Rô@Eo.</Ëúü4-5LÿnQÛû‚iö¸Øl¬´~Æfmø‘­/|ˆÞ#ÜJQ°6ŽçDSrÓ'szØŠSnaìØ°)~JÉ·gÝùÂ(ÚÑì< ¾:²¼!LÅ0 „p•7§¢mgpfîVJƒñœþo8]ý)ïÖ¿¡ö~D"ÞÁ&-à‚MiL`¤8,„r Þ°å±[˹UËšOÁtßÈâ™c@(¸–pÙî ="xþ&³£=rÝ$MÈMzç 7oÐ0û6o Ü= \¡ÃuP»Ì7¡¯ÏÍ.tï²ÃÊcê1'òû]l‘‡éŽQ»æþV£5¨¯šÕdµSS’ ¤«Õo¼ÿFS¿÷5¨ †¡F?+ŸÍ€ÓêÛ 0°ºñȇèôw*¬5#d¼íÿv“}næ'.êïÞÒ1†ÀΖêm‹}°ÕÔ÷«L\óÅíÕ÷ˆŠ™»•Á`¬¡p{ýŸàEp5ÌÛ2±5DlL)¦Þ38X`œÚé¯ÓãËèr²áühäm¸rUõvq ¶"ôR$žT…¦Z(þã¤Ç°1S<Œ½žÌFØÁùxdr˜Ì2 éhP#P7Â'qÍÕ¹#fŸhI¶¬·÷1a+å…‡KüÁ®Å_6U²zè¶ËdO+ b7þýÑ ‚¯wìœ,xÀu%òŒG|ÄX¡œ”fŽ&ޤÕbèÜnÒ¢yqÞ!Úßìóî>ŽñÄWr³°eVµ äJþSÁÎj÷„qó”L,W̆1äÞô É2mð<{^lHvª?ó¾ žÓƒ›Ñ12R ëqŠ{çŽÐ@¸ésG|ã”àI#ó¢_ïkš=|WË F—¹ÓœÑÜæ"Ë>Õuþ"óì€z‘ǤEQ×ggü†(I^¶è²ê!µ÷ñ±ÁM_YNCÍÜ­ücýZe²µüÏ?ïn³Kbþï¼ œÖ=m!S;óWþÿtLh¬® Ç2µuäóÆÖ…-b—W}[lñãîˆê&gü[¿gF«ÁÖvü®ºªÃL.Váz1_è\'©_­˜Ä"qÃ)ÇOYU÷CsI*m›.†9?ª.©Ì8‚Mn!ÒmÑd`‹,ëád)¼“¨lxAy Ò)GŠ(:ϽW"ñ_\…8ãÖ;a]˜Ây²æÎvæØæ1r [A‚íÉx÷Ç@ÎýQË—¼›ê6ããÕ¤nò®{¬ÛM*‘U>oÛü‰Ÿ"Ho¨OªÉ2DàVƒÛÅKνáåG}vâ‘B™f!åà³c}M&ÎX÷LÉ4À6B–;¡ÁožTJÌ=ýmº” Ü,¬=N}òÖA êÇ a“`œ#MÚ@Ð=G©…Ñ‚ú 3…° C7©¥”¤!fj‡ÿÜ”u¾K¤û~bYðlÊQ7åcƒ¦µì"t[R±tZy«$e’$Ÿ¦ìæ>gÀ‡a†H¢9#^•BÊxD›1c“h2V…8x’0ÑOÉߦ Ÿ²gýü!£hFÜ•H9"1ì11êé±zÄÌ­æ(*•-¯äâô]K;oY†¤þXT/¡ ð+ѳZ'ï©×ÂsÃÍN‡Ü»›bˆ3ž›^Œ¦£)¥ÀN_î2þƽlèöþ+â´"NÙ&ïÐ.c( *{’W·=áp;-ÙaJŽ_OwŽÀÕ{g+/yŸ`Dw= «öñ‘÷ƒ²Ò@عM^”N¯¤aH¶|­ëýžÊÆPae8q˜0¤ÐÄ•T…¸«OyXz_;)j9eCJE”ÃÆíj%1æªù˜÷G2µB ÇTUd‹]Ô²O¦hÑc^–„¦ÞvNÜvR4Ãí¹D©J’ºÄéiå2¤(‘½TáÓÏt÷ c1°’‘Ì'œ$×'š9‡˜9ðjó´h1ìL&^q’í`‘aJ°(‰ƒô“Fx¶ì$£'¦í¥GŸ^IQÓD$qÄ=8O*ØHˆìÄšõ¨=M"ʪØFò`å‹í'|o¯¯h³Íø$;D1æíSÑ$ :ÿù—ÏPàI¿|à‹Å€þvvÓc‚ZsÞ”øÙ‹e¸$ëm‘yPS0íB_Xì5ÕÕR׫Ï<)K"$3ü&/Ihפÿ·>¡Ó&ô«Õf¥jòð§™ï…í¯fÌjA=  €ƒz*Îêq w¿Î·_ s+OÉ|Âÿ.N*ǯ§¾­Ë¬,H·þÅåÕ§— /c ”ú¼„-ü9ý%J=Š;œ²Žij*qC7PyjpóÔc8Íñ©+¶yW„+]ÕgúÂåS—nSïÖ;©z7åQïÒ…Þ’ÕÅyLApPÌJmŸñ ¤–¦lGš¶þ6 ä7q¶sc¦S^ì·TT`ke¾V"ÒzÁC,’IEƒey)‹Sч²™C8HI 7v%£—’q¬C_ÛóåtFµòz>w¤ßU§{rh$ ÉæÑuáõN âd&¹LK‹î¨®¥£zž ›ø:ˆÕ‰0öS*ÚžÛ¸iK„•ÔÄAÁ¡WÒ~¼O ïqàlç]ä)å¤ï1±/®i@qpžú(ŒÙ²¾ÔÈ!)jS—Åö)­ÄNvê2áÊsIX©I‘®„»ã=z"9 Ùªþv¢ƒõ„ãjõ[†OÆ©Ïûb[åïyÕÝÎHO+(ý5»½üšŽ“”q0Ö ÁÁLÉR(Èݵʼn ‘‹¬…w$l"šÐÅç o+½ÉbsAm\QžˆNK–ÑlA™ÀvZ’ý”»Àó`z¯;ñ•zË¿R!ÜH×/Œ“äiåB;—jo3UÑÐe„~æÕ!°ltVB‡ ³oŸ.oɰ<½’Œâix±„ñSýíäë)³›áÝ•Œ(ù0À×ÎgL2<}'£ÑÎûŽŽvÍt–÷ÛÝUÊÐãú„}_°LÝ|h*²Ê®bf¡5Š²Ç´?Qôè9»lùvw›vI9ŸñKÿD²8âwàcþÁ\保ø9TàÖ™°ž,€L©L´ ž:€ès£T<ÿ®«¨eQ3+ËÑ[øR(ÕÝ™c ;ŠX¦[ôDïNÈlR¥ÕÇž(ÜäÀÓ…ÓË×õÅÕpY?ô½îp/‘¿¬w•ïÂ]»»"œ0¾˜k–ïf-ÚŠµ0ï¹WöîvEVÇ]‰0ˆ`"wfM‡? ¸±»‰zMG“¼ÄèkEì9¼pÙ”õö~Å VÛ c¡¥qò 8T# 8\pYP·ÙQSùC^”äèï2ŠfëGtÒÔsÁ¤)U©\× Bª‡Wœ¡UL‹Rù®´Ö/Ò-[}jUp7Nï "6ûžö6úT¡ ŸÞÛ·û;·Ò» ®þ —wÌ¡‚±Ï#1lˇRz<Q}x3˜¨~é¸NÅ»ºtù³•'óM²PîÓÞ¬^æhi|¬®ØxÓá‹U¿ÁO°À¢ìÄ^èêñçóx«œ}žKÏÛfW7ã‚{h½­»ðÊQwÐz!,Añ„Ö†©«=p—øóʳÜ)ñMÞ¢êó2˜ŒÆBLã­èo±WvCÜH¶ì*€sp5šy»«µÒßCu­ýæë΃%Öø[ÉÖàØB…ž»»#ó[¬º÷‘›ÛOR/†…œê1ýœ~ef^7`õáÖ¡ÕgîîŽÌ§úµªO8 ‘鲞Ô!¤zð1âðú¡°E/›Ãà ®"s@pà°Ö׫Š çk\ÝL¦K.ºã°0\=¦ãöáµÄŒcc¡ñòŽ9¸êaà{µ6Ì5c®žU*fvÆŒ&ª®Ÿñ¨nt^&¸’ͼ-ñ¶À¨B«‘êìŠ ÜöÐÅ>•$`¦Lõs¯_߬)üºA_ðC–ɼÎÏýњŅE5°uBÄ€ôõmÉCìë{TYã‘¿£ºÆ½ùê¯tfMÃ~ÿ½!›cúò)ÃñDͱ'XÕ;DÒ¥¶5õ(hÒº¬hëªØ^¹ŒuYêƒáâ(y°ü<ø¯y^¿C9ÿ«üEú…ï.åKÓ>cÜÕlU•#¾‰NqTuP ÆÓ²"į‡_²kZn´P;bQTàÁK¹nq)Ñ·±%´Í±k}æÕ‡yë©(¶R5†š]ïPÕ“m‡ÜÊ^ Û“¿º= Avì!Ùí^¡I’³«Ïï‡ãͧ‚³àÈÛ“< œ\¦• ¤›v§æŒ£Ù—ùC zeÃLÜföÓwÎü N–­Ömv"‰ ™[çC*ŠœŠþ1á6À¸Éòuïx%'SœÄdè"Éõ£À1_6o ̘(;Üôá #½€dR–®S¶Æ‡ª]S•o¯CqÓÇ'Œ`í`&ÌíïÑñœÏÅ® yðÌzû¡J>²¾çŽÒøÃó ¸ÆÛéhˆö4YÉmQ¼£é!üè¡Î€@Hìΰ‡n7â¹½?í­ûØ´Æ,¨ÏCPî{ÀrÙ½ôRÈy‚$1òL\ð9#Sx=Ýo<ö6ñ—K_c§JÅ32³{SÎí\†Ô¾ã.]8õ„¬C ?Ò=+»r³>¢¼¤ÓUÑ{õ˜üõ©u6Æ#™C ˆ;†ÐÑm­³%šÁÔRð€œÎ×Ðh ‹'0H®‚G6t¾ÆPFKX<¡@¢p@ê® 3ù›CšXc  0†€ÅIZg—2ÄÔRبÎÌÑ 7„ÁÆ Âçdì(¶g>¾ÑFê#8¼ð·¼ Â"ô½Ÿz ÎÒMÂE*-Ÿ*`ÃD€Xû[0V@7½{”L‚I€ãX“â€qG-;y«g˜àf5 îîØˆ18°°•¿fwxÜÞaàHôÜÓ‘°sF>j©÷6G$Ùº¢ ÜVýŒ‘0+W a¢µþ\CMÜ FØ`Á°R«®–8¸!(˜°8!8ïÎO0d‡¶Ä¡ó7G4±†ÆXRsog\ òéttÅâ ã¯sÝçþAÈnƨ‘+ž} (¡º Á@èsù™Ã V°Bß–oG<°w¥8r.t¸UëoŒljí Iš0Êy–dí]hþŠ ý¤wKx’10°àÒy»Â–,4÷ ÈÙìA`HPŸïò¦Sà M˜Cà  0СM@w—<ÌØ³÷Hr3â^p€Î›*äM7ñ3‡@­`1„¾_4ÞŽx`ïº9°õ™ù#-Añ„I[-.‚‚ ‹èîa#dª«] ÈÈXh£kM`ÍǵpD5˜»Â Ø´[öìrëÝC¿ˆaŸÃƒ•k11ì<—÷|?;?ž‰Á°Èñf'¥†`!Š=ƒÒæqêh4æ[ÛãC{j Úëž¾È#>ÇÁßâ²aØÊGŽ£Æ@@/ú$¶{÷W=µÐGõ;¹d)ô[ö¡?X™³ &Ž8É+xs®ÞÛóÔÖgknëÜ4šÊ`&ʺÜk×ø˜‚ÏB܈ðh‡lÖ p{Ó5Jâ1D25U×Ñ‹«"Ó|Ð[&~PÅwDEc¯2£¿ :è{ÑõlÃÌ×Á*|ü>ø2±¤îPKªY–'¸^ñWç5ÏàõÌD ×€ÇjdC}“ʳ¬ö=‡ä@GqÔÔµÀ\t`DÖÀÁŸ‘ÅÖЋ¼—‹4õ)Œ“†&5ZŠhƒ¾á£KKV=¾|ÄÈÙ7~d’²QéÛÍÿýßÿÇQơ܃PãF)CÉoXô  hÈÀ`TŠ™¨Añ_ÉNÉj¾ÛhPg.p˜]¢g+GüÀlöƒ‡Ô†“ ÎC÷Xôø½æ¼áÄÐzKn ¸©ü÷M]íäpK‡_¼ÿN aÁ´Å´Æé숚‚BÚmÃí¡ì6 0ÀõÄPg¤ r!ýtoéïëˆêb€±Ë£:©EÙÊÕzr±ó§SáŒ@”¨›™½ìO+¸ÒjAàtvÖÓÄgÜ=«)Þ0‘¯¦MÞ¡ o>À‰8§aBAW@tJD'‚8ìùªAr‹£íMÌobcz¯Pðf·£Øô¿F\úßu¾ßx æÎõ¤1HÿUŒYñ³ûá(‘H‡Ûˆ!?,VýÜïËoß TÊ|ƒ`{®<0œ¤FŸO­ÜÈœu~d#yúPt”‹Þ«Üš"°°¦ŽÆð¹™«XÈC9Çåݵ+n@. ›“1^q”Å\d|…LŸlYØøTc‘O!Hg³)vÙ4ì1àP( })ˆ}ê8yKoqÑ…Þß¾bV#H'Á JI_(tð˜‡ëU0EwX$Ч1raX ؽƒŠßº^îoü º›|{,*Dçq‡Ò4dŸB@$‰PX)Ì\M\FÃÿŸ¶wÝmÉÖDÿû)tcÐ=(fvWM¦ 8(¨d9S]¾%gVÍZ¢m¶%QER¶UƒöcÌÎy¹ý$'Ö%nd ’êÝ•c­ï[ ÆuÅ ÌÑò9-&[Å»à!é5d1ïûŠºðÊã°ìyä̽‰ ›‹˜Úçe¼‹ohoú’îÓ˜§Ò°Gb5ú÷°x|ž{f×ý±ÕsÒç}ú‡¹éVmÊH[¤iŸwåÚxm°fX<Ìw—}ÿi>TÜUÍ&s•ܰÂõÂ'ƒìï6Ý]ÐhUïrö<ì£ÜZÚÖ%ì.ÓuøÄ¾YØo‡Y¯ôZ ßoÝ6ï³7ÑÜÐtØÊ¾‚¢Ìr߸QÞ­y2å‡}ŸÌ‚PŠà/ñîÞÃ;G²Ýæˆ!U6l’Ì_;ÊAú\DåqŸô.—vSþ-Y÷›•ŽÁRˆôzÝá#›U F‘¿#Td ù_ÙCï’Ô:Må'$Ü¥&z•Õ6^yÚîRl2Tй­½šL1pn/“es7èCu(7™nŠû&«çD`@°­}&†wÇa5¥¦)n¥Þ5(Ð8â¤o/ß&/íÆ<Ö<šFw5 ~PÍfΟ_Öü–>•÷S¯ÚÉS˜U¶Ûù]Tíј­š‚;ƒ,h95ÏlõˆzÚ£+cï¢ÓRæÜy']—¡#óÙ'‹íï­RUˆöQoÎ…Ò•1KgØÛ“E'x£4^`c—ÊÏ‚xÝŽ+[¿+ó,}’VtTî…(Ä(Û—ƒ¿ePSð*ýÍ¢~@úEWËøiX¾*ŠM¹‘bkpüTxd`ˆíf»Û°¨OC2®éÓpœ²ÁðÍÔàüøeÅý ª£$ÝÌõx/ÞQ@:5›21è®Hý.wEºMd·éî²§CÊ=Êyh¿á×_œ´ŸèÎÉ€LtÙï5¤î[âY1¸Ð³Â³Ü³®STPú›MPöà0š¬’Ïö±øbgÕ]ô¸@<0OUÝæL)É <330>Yh¨SWýWÈ_arŸgéf`քИƒªüÀWË£ SôÉä¨üùg­¡g»žO¥Õ°¨—r=Þ˜0Y”G´ÝžTìÎBE¥n8 Ðg‡rÏ>¡›ì ¬‹wEúP‰ë´?ä ±?>nââ9ÎóøØî²Ý¦C&Ýj‰J‡?ÆQ¼I:ýâýÈ(Cþƒ–ÿ`ÊWŽ)@6Þe 0P H6Ñ\&%4ŒEŸÌíS¾[mT+(^™”:æÉ#c“Ûy0E^ù»¸óÐd?¯üH߇ÿ…Ù{ˆwÝÑõ{@ødŒ>#3¾j@³¿™^ö·™¯ÞÕÂqÁH—ùØoÈ‚ðË‹ÚTóËOpW‹ÇÕn’ç­\½@|r&UÌæËÕ[,ò'o† ¥ *jh/zåõ°‰ÇåSxåQˆcþéSc‚Ùýå¤O&Þ=ÎMö€ðÊÈ{õÈgCû6{¯ÿl·åq\Ëðاex,º³ÐÇöç§Q¶??õ°ýùÉ´<)Ùçâ4Ÿ†‡Ë°7€Wv”+±é@|š¼xÌý½|ò¢fþ|NØšøcX¦†LõÊû_ŽÌ˜â—;éùùo΢ŸC` ŸìYŽ‚Nié.ˆO‘År?.{å¾OÖʽç,êzy;dT—=©±õ¨,Ù>Ùb ãÌÔ7p,}<âLO]_,¾ ßÁŒcòÆ]`µ2Ο’^]Ô~\3¿ïÓÌï­fFBììqÒÖ~ÿ„ÎI#³ebøå 5Ú3hN‚Ùƒ*9a¶wñ~l®5„g¦…B[žµçÔ©²ùœí’çläšTÅ+³R§çœÿVêõÉe6²þf½ênfÕ[ôà_c¿pŠ&Láz?:K6ŽgÖ¤–•EAùšœßAFåWlÒÝ‹^:IÖÑÃr\® ¿ ƒ‚ÇlæÖå¶ÙaLž½ÌŽà•o^!Пäçåò¶H|@gŸ«›yŸ*™Ç=ˆè):ýIQ¤EÙ#SÅ67ÿ4|2╬­9kFnWóp<Š¡ €õÊÎȦà—ÚÓÊÆ°aåèNºg]í «OÔ-»íØlmûekÛör®¯n9Ãy¯\ø„èíᕾ·2Eã·§šŸÇb“í[^™Cω ø¨Êt›Àþù˜¼Ù>™c›yé¼ H­Gö<¼Ë¼|2¦¼Î*3P½ÃÈ×&ƒÓ†¨¯VÙa×'g¯ãêãkŸºøúähO:ó|ÝÄ»qùÑ^9⮆ãËåäúß°Àóº[ËÝnÕ's»UÃ8éËõ1âixĘÇaÞK eŠòLùÎægPà½d™6̦Â'{žî0”¿aî0¶ðcˆGS+ŠWN¥Žgf»}™l“«—d\Õ´ ¼²„ V¬Ü¼Q ²“?c2~óqДÏýó8p1©Ê?Ï®%%. ßÅ$Ì}ŸÏs%>î§|?*Û6†O~Y£¶žD•t*RÓÇùT“ÕmK1:7Eϼ 9Y,.ÜôÊÇ0» ¯¼Œð°ë]õ¸h5èûd­î¢ÕÔFúûkÙæŒÌM¯Ì8ýµØü~þZ#†øk5Cøå¥É_‹òÃcv òݲÌ{÷–û¼%Ûw*à"yÖØrÿßýrrŠ>«ã—3W_¥søï믆8ª4øätˆ£ÊÏ=ÇÿƒUZQür7ÐQ¥o7éc²:®F¶-UŸ,*†.:£Á¥ëSºß´`øäh”ûMß7Àý¦Aß+kî7ôÚüÝo,sïó·¢ød­ÿ>?e÷ùƒÏY¯yÛ°-âf¯ º·ˆ){¯maÛ€!ÛÂ^9hÚæ<ŒØ¶ìÊÇõØyŸžºÇ¶0å²Ç¶°mêE«¼¿TŽW6µV‡“[½é/p]@€'âMŸ7Z|¯V£²m"ødåÝ1ÐZ+'¼Ò/_C6‰š!ürVÙ(òÏš#¨B‡qÛ‘Ý[÷æ¿·úæ?îøÃ–Ãø¾zˆ@€Wn*NÆø¿Ã ÷°÷ñEÒ®™Á Œ_6¥RåÕÁYis±Ü& ×7cÛ§||¶4ˆw¦„Jsw×ÃÛÁ6f·C3„Wn†z;ôþÄy;4CxeÎÏÛÞZ/oË.rò•5 Â'k¤`/7b7¼ø.\Å{¨°ó9¶‘ñ°·6ºëÙ…™ñu`øa¼Ÿº_C°‹BÔÕuc†¼÷'Ûïß3ö)ná+hQm—½µsVå)J°›q¹ÛMúAÿéÁ*þ×ÞC•¬Ð©Œ?¡$ðt#=º?çŠòvsxJw–À—'+Qi¢Ç´ó*Õ^ mÖWU8+q¾zÆÏs{Ø”é~_1È´z¤óÚ3kcsÕ+Cv#Dæ‹ZÜdü~sؽ|LŠñ:ރ׷€)ö")‰vY —×H}q83¨õ!)>th™™Z ’˜ –I¾ÏÓ¾ÎÕ!‡+ ¯I'˜¡Î„1ÅT0‹†¬‹BÂЋǰÀZà³<ë«_Íjƒ´g§Z›klŸlÈ‘ofNŸx-ŠhÞ‡»T41ÞùhT­æ£.èÈÇ9\U7! Ž7y\‘t·é~k¬ª-¦;VT[L_NoaJz~Û`}{÷e‹q—EVÍš^%ýª­éW-7?åöŒŒm9¼` oPêmðx[{šÙnሯ½ ¡Áº¼·…}?ê.„n Y¾ÝÂç²ÜÇûÔÛ–w³ckòYHL" ípDߺËŸv£c¼MÌî±¶üÉ6Þ}”ÿÆp`êØKÒµØî«OÖiéò_[ºvpŽ:µ_’ŠÓ¦‹V| )3šF×µ›M6d-ƒçÝæÂÈtT´Yw®Ñù#4›]‘7M¿<ŸÜûbåŠvfä!Ë^¶qçwÛ­Ùh¸”3 þ™Ÿuš·Ê¶âSO¢¸,óôáP¨M×L˧”Ld¢wüÂUztšo…­´¿uEÙlaU¼Á¶W:—ò.ëï8ÍÃ|XZóºsÓO»Ål-kšü—ÛÃ~Ÿ”åU>—¹„ÁšÞ¸d½£- »ð1öoœ›i-&öá1|õ;Í'i4ýžþäºL OöY›£¯ù¯iò‰Ï¥ûjð^ 1T\/â‹H†cÚµ»Í»¬—‡Æ7YÝÏÜW‘¿î«eú¡ø•=ë4þJïÌŽ×Ý*]z&›·©‘玛_ðêâfX¹ØF6b4š[×0MŸÉ[¢ïa5ݯµä£q#È”Ƽ¸t¼­=€ì@궺¢çkùðcB§¥RÞ×®xÚª]6ñ2ùn]Ðåôô.”æmæø±mTgÑÖû?xTÛäm8«õ5{øˆ¶ÉÛp©çoù˜Ál ЇÅZÇ×Ú¡}žS¿ÓB’öµ-Ù½¦y¶Ûv/¯öé´ÒPñ6õ}t'V·á5M_ûŸ6ÙƒÐÛÇy¼M  ;:m¯êùZî ÔO»ÓBíe^{?Ò6ÃËBÒècçÈêZ…ð²²WåL·poÝ`MõNãPØÛ0ŠT@˪Ûd¶#Ìlë6º®êŸ…§ ]¯Aºƒ±W¿ú¯ìÁ÷r´~(ÅkêøZ ¾Få épB§•RÞ×B›l†›gªwچ¾†©¬ø¶ÆÁ&º:­¨y›?Å»ô‘oÝÒm°¡ãmm­“Çø°)OðQ5ƒuÛ^WõÍ‚˜Q¼¦°°W_ÏD\g6œÊÞ¡½ûá–›úݦ¢´¯myoF|‚¦z§e(ìmX6¦Èjç¤ÛÌÊü‹«XÅûH.N¶ÎÒi¥©ÓËÚ2N7YõvÜú@3˜Ÿí¶ªV;óŽ1½ âa²Récªh'Ö‡ÕHSm/SYÅÛTr’yŒW=ú¡tkèø[‹÷c 5aZp+Ó:[Öç8_ÃÝVC'‰NýFÓmiÓðÏœ‡y’nG\ÿÒ2ìv4n‹[–Ã…A†— —éÃìõ0²j™Ÿ9×/ý×-µ¤ià->X”xüøÑßÞ÷ú¥¬–æ“×ö78¬zVðÑm6RIZV.—·àLöžv;c \mõZeE!Ó°9<è6©Í9·IžŒXj#Æ_Óé³ÊkÊš.¬ –rÄÔeî‹Úl²h¬Sw+NcÜZ¾6ŸÂ‹±«Óöºf_ûGùÿuƒyçÀP”…ÓØ>ÀèAÖvûó@ëWä¬ë›‹ÑƒÅv NÛ+j¾fë8l£Ü#|à:³àTö͈ø[¨#l¯ tš+å}-¼Xçè´Ïs‘NŠkéáÖ0:ô÷ËvpIy[‹¤ìo/hùÚ\;oFðÓî´d{Yµï¾’¢„—}¨àkäÐSNýNóHºË¶5šƒK§’u(LEÉœiÎçp_Ç‚9–—¶ò³NóFoâ÷ܼ¯ˆ[!ìe’óÊlõ¨ü>;ø¦¬e²ñ¼ÛÜSlåØÂw¨X§(MÍ¡ ¬a¶J)OÁ2ëÿ^öq^¦X¬7Ìݬˆ[kT2)Xb’÷Dqð˜Âs,Áb–­ôÈÇ´SøS ò£p*U2¡z”6žê×è7b4g¦¦aåS{µõ0¼œ/PÈ´ïx˜´~ŽËƒx7@‹™–8¯/‰)v,*û[Z>±°||ŽË`cƒB™ŠUžîiÑÌsø?f\í?žÖ’váóS…Ú±ãê~ãi[ÚlûQÞ*‹ßÌC¿Æé†bÉ=çÙá颪wÒ+ƒ†än¯\ùº²üëlá­y·~s5uèÄ#ÄŠ§z‹í†0Zþ)b¹S>~€û sß“Ùü¬|¼«ÔŲægçÜǹWõq«2e­ØDÓÉmàéfu÷ªnU•Z–2oö(ønV=Ü« QËäûÅ,˜Š2ÛŠúüÛßÿª*I]ÙvÈ+^<Ú¡µÈ¯òTêÌ|PU4ËmÒtšiÊ x—ß™Á€—0l2ݨڙGz¶Ù}^ȰÙw³®Û`K’,ž|jrÏùºCÉm$‰ ¨4 ÕÝ™Ôbô.Ïoô\ךu›õ5CîŒZVø z=ƒ¿¯µ —¨~U?™>+UF‡¾ño¡ç*‹CÉ)1ÇËò‘°²‡C—fZ”WDÑð›Åí…Ù;Ë‹D àtÙÝc9§®Óhåë·Ê8ñgªÛsá§®ÓlÒwʤ/ßõ1iß»îí;*Þ^Öº%¸[âÕsü ¦ãå18ˆ¸…Ý÷c´ÚÔ¤é´Þ”Ð&z0¿ hñˆZ„¸,ãQy-†g¶ðÍ-}q Ê?éQ‘z®‡ÕuÜêC<°2ÇühÈÂD¯¥´ª†Ó¾ª÷lÊq`²Gã®éª©m–ö[‘«h8-}­¸À|¹œ\ûêÞÊ´}+T 4ú)|-Ó7Ð¥›«ý6Š7q¾õñëÒ#S„Ô’ú`K©%|d9FcÃôu9nn~`Yìöü¾±\ x î¢èôkñPufÀTyPÞŽÅXãénòdõ¶n›ù,yRûyÎÜýkŽCÓm»!§,‡º=¥1LÑuH|÷1fÃñ¥WøÓ|‹1¯ú›îRuÚn êÕI~z’Ú¯ç@^«¿~ÚÎÌTeùb—Rµaz’eT,ÑÊUÿ·ãÔíÈ‘õ~Zó3ø=QÔßbØkr*»ód‹Ö^ÒüÏK'xG’iÀ+r¨¶çÆù‚D^&?_Χx?¨#ìM–Aï—‘Š–3RF™OáÕÀ6Ù„ÁU½–å§Ùö!ëcÿ~sxRµjzΞC¯¯öC§ýJ¿¢Öl»Uú=-o3Ücé©YÃi®ZzK_ã<ÍD-ï_Ù›Œî\ñ1åÈÀ¯Â@Šñi‚FB?Z§9bmâ‡dh‚=z:¤ë䣸+Ùd¸ªlh!⟌¡€ Fü[âñ¼rðI0½í Œr-6,K¢3åq9ÚŤaοWî(ÎÑS¼‰á€g"FÏ ™l¯sSbˆXz!-ø„xŒƒô¢ÌµÛkåõ_#³o ÌõŸM™ß¤E9’PB\ò¿MTÙf-`å%Ï#(”@F&c1^…´@¦áèÕ›1ÊvQ¼+Rˆ¤¢U¦…h W϶qyò˜ˆù•˜ßÇû}²[ÃgÇ'’¶íBF•† uzsy9›.ç7׋èæ:š\/æbÞ}™Ý-ijèj¾¸š,§Ÿ-+÷qù\Œ°‡ôMæÛÉòóÂæs–twŠœð;§?›>uˆQœ‚ÿj +VpÍÑŠsDiN(p°X­R]L'×Ñâ7*Þ ÷V~Ùc3+ äçÝðmË£¥OiÙp¼4*s¨ eítÄcü{Ý áë³Ð…¾À&˜BR—WOÙOgµoNòávé1Ÿ?>Ò}Q-ÑÅÇp<ÓÁˆ,VÏñî)Y÷÷YJ]ñ¾oî¢éçÉõ§Ù¹Ä„%e/Ê}_ƒ'ˆ!˜ETªÑ8ÜÞÝ\Ý.™l<žq&AŸÏ~¾ÿ¤ywt ªÔ–È·w³éd9“èéãc¯‡•:(‡ ÌØó‹‹hr~nBƒx1œÔ øËùõlaІñpÖ7(îfW7_dù$yžåƒÐI“pgww7wŒøœ>=oÄÿ†ÕD­MÈŸçŸ>_ŠÿÉúWýn=a…áÝüÂ@ÅKº…жøe~Ëp‡»)l†½+SŸÀï¯ïfñ¥‹þ™9DoþÃð¥.a‹þþç›…Ä}‹óÝ PT$į“»k·}š#–76°²Ý,XPu3¨²öBÃúÏ‚_XkÌÍèP|@‘íBeÑZW!} ˦¶Ž20ñ£ mÌ)pÀ#!™ 8fØPfÙ¦héSª¢J‚øšå/kŒD·2y1ýÌq†C1š3,~|8ˆòLw®³òŠž±BoÂõô®„§Ô§7WW“ës¬óëO $€MÐÁU´e™¬yV…O 8óÈ!¨Ä“|k™Åa«–½R;”ÚS1®ŸO°ž’ÇT+E­˜Pÿ„|¢~‰!ÜšÞ\ ¨êI1Í&†èJwŠ¿ù[b牘¬í¢×xsðìpêj!¥„ x‡¿‚/ø‹97GX"Xó‘”îW%jÂÇdñÆ¢ÚCÀ gj> dHƒíö°KWŽ˜“ÊãGKˆðÿŒhüO"Qš¯z`YBÐßMxí’2±<~˘Ñ_Û_‘G¼¯mãûxÚdEó×ÑPA† Ž?¡Á(OÈÈ Œ¢|ÖI”=â+… dÖ*NƒôÝádñ×o]šRò™]ú)ToªBz å ¨KjL)‚O*é¬á 7ƒÛ•À]´hylE*Õ20÷±þ ”D™§‡¸~mEóRŠÿ‰ïΜP4Ðv*Jƒ´ ´’Üp…Z§rÁXA 6¢Ví QÅžò$ÁP´íF¹T*ædâí]’L0‘2=ÏJ±ÇsQ«JÂ!¨.m’¹ εP0…(é&S¶:@µº`˾EÁ]æ¥i‰©lX!æÌχ1_Ù¦M¼–1}JËχÑÂ#í9{‹`Õa='›½Ζ!¼ÏÙ[°Âžýd :–t­$Ò—¹ÔŸ~¡ŽªwyC. ªK` Ó‚'×—ŸA¤RdE0–õá)· LMÒD{ƒQO—80›À²7§ty²IbQÇ·èÙ”¡ªÁßÑSö¨ÌÝ-,¢äø‰‹ 4ù˜à†N#W£‚¤ep=?O~?>“²† ¢"Õl­Ÿ -Ã_>ƒRƒg×B6Yu„ÙýEÿI÷aÈTýi’4u3 gGcòI™ÐÀë臢¦&lX– ‘P¢y6qQW粨£‘3-3EC}@Síp¸•j嘜Pá\¥«< µÑu±-×ßÞ†”Yã(R·y!È/óXŽ„9ª?ƒJÑ.±ßh®ñ ¹Gmð1FÈÿÌp푟òŠÙí~“”ö½![!:aؤê/ðO”Ç:{šS~h gª÷6™0УxŽa½=7vk˜Ôï!$‡à9ìc™Où&Ëö>3”³iH•²öà/K[é®62s,¨oÓ'º’‚´lÚ2Hw¡ t%5 .#„´Æ¹‰!>›Ê>ÙT÷ -¨?fÛØaRÿ’Ȱ) d)ÒNã-”šøEà%üçý—F!bLo®Ïç°½1¹Œ~žÜÍ¢/“»…ÅG!.‡NO5§Ä™Rô8ÅfÝ­6‡urZ äàå$‹¶éñÂìÕa±c´ 2„•‚\$XÍDU”‰Å7´´ò ÄõPFƒ‡&ñàNÂóx#C&¨ÆY¨=ÀSZˆ$1«©Wªþ™-B È5L&™Ñ2:ÿgìºb¸y.»jÊñ(d¤ðÌZj¤ë½V« m|rK,/ˆŽ™K™(±I_÷½=Ç%ö¥ø i ãþÝŽÇÜïR—ÿKrϺ0Þêßÿþ7ʦ„£Fmà†Dá­^ ÙŠ¯2  ’ÐJÑ ]Ó.kt1™.ÑÕÍùý%îÓ(bÞÁO›–ðZ¶ÆÆ{Ö¨{K™O†:|1«¹,|b(Lt¸´½š{%»Nà>€¢Æ$0BÄàPï]épÜ(… ¾)÷Sì\ÆU:5^fäÑúlwήÚ#w6!·Iùœ­i¶ÄRN~4¢yJw¯büwzôiêê*ƒ2)ÔÈXÕaî[DeR­hÎÖÄt™¡jˆªKží¥0àÅš'ÓÅo\F®twHTx§n:Üä3YÍ¡˜òƒ@‡æõ[úrÎØü¿þd +^ÖØ«÷YײX›Á c2DB 5nç²ØÁ²,ÌxÒ<¡}¿13Á0'Û„€ZˆS>{)™"­ØˆÊ!*0¼ñ+<=\OöGñí¢ï,zT¨ ¦*) ¤@&Ñ„î~—Âêt°•ì-]=+³€ú<¸ofê¢ÃH7Ðçu×mÜðŽžâÆp Q°!À† JØsø«*ô@²?Ø»Û+wû£¹k·?æõ-wgsŸ¦VTV ±“0´åˆL€‹½\P¢Ùa¥²Ò>:ä¥ÍbTÏ !é¥ÂŽ~Т®£@MzMrXR¢n$ÊåþÐß«€@B dzóev7ù4Cgˆå,º¹_ÞÞ/k”oÏi™Ô»ôÞ¬§Jüõó|9»œ/wžÀívj—û#•c@ÑcB‡¡† ’ÆSL tùmmpÜiW°AŽcŒc7µüÐvÒt0²›«MLÏ>*þf"v„uòbòʱnêâEÌ€Êê¢Åð\‡ P™cÎæ™¬­iŸÛ½Â}˜:ÒPø¢~æÇ} {¬´'.‘ic@áÒªEµXÉéÑ.Ð54,0}«Ofºš´2Íe¦úÞ/%àí«TýÐܾAõOðÀh@‹W¼ «÷äÎÒcdz¦§wbLmCo›m=çgÚrp >$¢“OR±²¤øy6½¹šU Ç–¡Ô ÈêeȬÉû¸L…PášýZËÜã&~™3‚¨P]\N>ÕòDKãØ£Bw5[~¾9¯òÕ—lú²!B…ë~1»SL«xõœœ UAg£2L?ÏœmÊ f£°Ö=t®É ȇköËKp±5â&=ÄÉéÓûÙšu+/¬Qœ¤€ ª¡Œ//žLi,f4âÅŒ&¸‹ p3…5?E’».çÓ›ë wÔVqÇQ[ÖµíÐKÉ.S†¯Ì¤+‰èˆ…ÄåêPðN—à€d­íôã–(X6Sx o—¬·ÛED¾¿'xSä|KóËåìÎù†ÄDG@ã*P’íY$T Šöæn:‹>O®Ï/gw “òeÓ‹Eð‹Æ}Â;#¸š1úÍFÈ’ç“(1Q~‹ûŸ³e•NIg‡‘„¤Â¸œ_Ínî«”µÓ¥=Ùð¯E4¿Öß–Ëy£æó]YÞWø¤{N?9R²Bæ ¢v›9ÚâÀ¼0šÚrMæŒë]4¿ž^ÞŸÏÑb9YΧ†5ųy<ǯivÈQ<‡Ds/>‹ñÇçÉ—ùͽ}/ªÜ;=ïÌËÎkñY}ÑæK’ì傳c‰À›pä‚3/0ï/³Ù­\p]ÛLçu“>¼¦¹ø÷}í²Ö;€v˜  °Ð“V\Îþ2¿ÿþ:®o³©xÏtÕƒ ÕñТ¬êˆXÇåÍä¼:$6Š­Fåv?˜[臠¯ùY´¼º58žœ' z<ÉCPšå[,š0Xß,PXŸ)­Îœ ­ gCA‹<ÎV‚œ©×°Þ8—`uR^M®'Ÿfç¢ûÓ%I+‚Qœ^L „º‘D“;c)™`g'OŠÂïŒ| ¡ Tá³ýÛ»ÙZ¿*ý.¼æÄ¼ˆP!¼ž«OÌ4¢Ò0“U[˜É®&Ät(ÓMq>Äq²Þ/ç— ›{—”'šÝ2’ó¹ž-g·» Ú¡¤´šçÚº:)!°Å(‚ Æ [Šc¶„°19‡CÅ–®ãC¹É=ÜBRô÷bˆtb¨2YšßÉ)†jîš{`¶ÏÓWØ~I޾‚NJ‚c…#m¯)Ö»ù—‰ü2û ‡5bØæâ×[eò¼¬RßA° ôï•Ü<(ò<¿ëbåá"H>ÝÞÜ-«L#T™ÉZPe&kA•v_G´´ k}þPr•v§Xí£ô1*Š¡4 LC4‹ém4¿ˆ ƒλÞ#é¦÷8´z0PÈ@ᣮ‹Ùåüúþ×hq;›ÎÅ@êBWâ±ÜGÙù¡ „ˆ"Š"¾XÞF?C<$hàõ'Qü~€©pìrŒð'EP‚(ÎÿqSaÚi32*øÈëBºÙfH¡Dªn6ˆ7-ï&׋‹Ù]uËA°e‡¦EqvDÑKáŠyy~s¯—‰ V×t:V×ìÈO{ÈÅÆ¡]²ƒñF¨À$ûýµøk~-fzbÐ!uG c”¼E€q¾Eé8ß"9°ŸG”¢÷Ó௘ ,T`ÚÜɹžÞýv»Œæçbœk~ÓdJºŽ†Ä$´MH×!ØÔóóˆ"V)Oë†Ü6撤Ǭ7Û¼öʳMn¯AkŸpr3À׎%€dñµwÉ×›»s{˜Oñ¡F”¸ÒWlcÊ(gp²¾o×!î@ÍþÀí6Ï^S Ä‚t˜7U ø’’„sœ g6œFTN œ&†ÓœN¹}kÃàP•LÆÜ‘þoä]¶[6ï=¬ \„%ç9çdtX‡}‚1{ß™6—Ùh¼ÿ¦ñÚŽ7çÿÏf–aÜYÞdÅßÿÉÕ#øeÃs6 )HUÆø+”é¡Ü›àfñ÷¿A¬HL n8¸)}?ÚˆïM¾o4áû& ~mÁ¦?4ZðƒË‚}ôª.€iz¹E Nðp†Mºà ½ðµànÁMþïÒ?°NgpñÅ~“ñ@øe<“Ñ$=ÜIyQQEPÌÀð+UÏ ÏR~–í†ÆZ3 t¼5þüKTÌ5:­&Ú\åóêí#KŠ¡V<çG‰•àžuG¤j3jˆ_Xk¿ðÕëÝTvæœî¾÷þxŸ6Á™2„y‹ç—‚Éíü¬ë¬@'h-ˆÓ¹J³ŽN4(ç‰CžÔ eèh8 íÆ¶;Í6ÛéÁdYwñVLêÌÑ€{i›n"–ãðCP~~ÉžwYî¬ådn¤ešt¿¡ªÑS0`:%ªòËŽõJ´Í_bæ[¤]”q^&k/+¢x•öµtj_ÿ4-VY0™ÎÛ›Þ*Ô[º[goEoX¯˜`z¡oñæ¥|γÃÓs»Abæ`8}ù˜¢4¸ÂêC`»ä­³>šÎml,W+o~ÞN!Í¢G8ÀáÛ¹”œ•.ÎWà \ïªkg~»9ÍÃÁŠ/#¡n÷;7Ažˆ¾Ìç–‚2H«ÅÄ’Ò ŽZ4¼J’õdt·³ÆAn$W!#TÐjŠvŽþHwÖå¹jàtÖáp°¤ºzÎÄhÕdz9%!DûZŒó!´e(ãuÃ3šlÜ>çbî„ò}AÔä5K× v–y¼NDuxñ('-+ãkòo²¦á2Qmè¤0„‰ã Ü4à¿=c ðnlä7ü|¤ò!ljÌK™Í#oNäbH¬ñ}ãccûl+ÞÖ†Þ¬F¼õç-Ô<¯^s8ÉNN-ÏdúA7 lxÁòœ_%!ΗzѺl;\-†ý!úí°•¦ÓœšQ{ÞLýÂ…I[ñí¾ø‘š Dg>i!ÊÒM’cdy_%ûæÉi‡’¢µž¶’¦Ø;ß › øðÎqMQ‘×RZ €øŒ¢˜Š½t§ðà6u­ù°•±Ó­2üý•þ¹5u£ù°•CxŠÏš|y³Võs5¡•|lòc÷I__ªÊGZ‡Ð1ÜÀç £K{Ù`ë`B$:ØßâŒÄôùL/nSË`6·ò¾‰1Ù*Î×aC]M1Wž7Sgp¨:GêCk«ð:¢õ¬™n¯^ Z"ïìw“™ De>i!JöÿÝ@2°ø«° ¿÷B¢ Š·ÀýaìÑVÝ­BûqXz&¡•ÐÌÎWà„þ…¥aߘÓÑ5ä‰hÈWIxÈaëeçÉfé_åa#®E¬1о õUÒ¾´w~[1¤E­B-¥ÿ:fNþÕ~Øÿxh8èxT”˜¬úô¸Ý4Ó?þky†<ÑZXž“‡Øs¸Ì²ŒN?Z‘7ÿ÷¢Å>ÿn¡è³øe/|u/zá)ŠV§¾ËzU%"«>m&=ì×à³úp€ˆ&~‹¶ ÚÏZè :¸½OVt9Š:ÐÉêÒdrWR» °—a‘¾{“kͪŸ5Ó‰GŠ…ÓêСD”էͤÇx»ñîø¤0‘È_uðÈgÙ1²Ö§¬Ñ°(U6¥Úp-Q{·Bîn6xIˆ*óÉÔF&-G4ú·ÔX~iG5 vnh– åc(E0›[½IXÞ.©úa@\÷KB3(Ž"[‡ƒ½Hòng·c˜‰¾h×éˆØ ì¹7Q}n‡&Ÿ».hÿ\I„½aE·*òilÑ ´ézwÕÔD½Zœ¨GS#UØ¥¥þñ ˜/dBÆ–¡!lì®=ÙHßïÞ®ßBW:}ç³/³Kéí}Æ–CXÅhçEâ¥#ÝöÛüÈ"2H³=DY XÇÕ1“%k®|nñ::ÛÃü¡ Ç0îÖStk€Ë£Jyb{«7}åþ¤Ÿ«Ùó¦¢ÂâØÕÂdyðÕÀiÆ]-T–í­½¤Ùœ3‡z;»ôP·x…¦í°®à¯cÊÒ úZSøå*Py|•Ęʳå.¦q÷˜|R³c¾‰nä‰Öb ·ªŸ<c¯ëidü¨ß¶Aí7Kõ+ûÖ릯Á á9†Ù á‰÷”ºå1ýo;0ÐY‰ž´´: Ç{¶æéÁöƒ5¬ZƒTœÆ’ZÃTˆ¡—ÝnƒÆ¿ÛÁÔÅ*O÷å©J@¢ir~rÖpN¥Òš„ÁïðŠF3â¯)l+þZ\ÒÝŽbv’ñ@UŽÉ˜äF\-Âô>Bã:8ã5šk°¡è*‚/ó±’ è3ð&ó¯–€(4¨–®sMv1¬A‘CÕôX#ãýbD4 ,»€·N‰2dÊÐex.XÎPÍjÀ{‹U—q/ƒˆbOúÎÅOì‰q ¤ âê{¡dÐêËçôu’}"îTƒÝè$5ʹ¾:R_·¼NGGuù.€TPǾ7¯6s$¤(Þ¼ÅÇÞ!6…5ÏçÑäòëä·!ÂÕ¯É{9Rª"æôæz9ûuI õ(–î;îaô ²(ªÒÌI•-Ä{Á5ÏAøé£°Äf!Hþ–‚ÈgCcGeÆq"{— ‚à~hXf&R”ÏâöròÈŽ–7%RQ/©€[ã-Å@FÆ C.~™ßÞÎÎñ¶xÝ…¾iÚ¿U´§ú†jy²s³¨gøCn‹¬ÞiÝ™EàT±†bïS PŽÀcM膤{—”ù‘¬†pI¦á ¿(e\ðK pyœ«è1Ÿ°G/[…ÆŽ£w3.î&Ÿ®fוhˆÙJ*£W| ,kÍ—?4k¿GIž‡µœ­0Š׿ ±ñïÊŒedh}Ó: æAqxئ%?¿97l“Zvý„ü)ÆpÎÊèoú¿PA¡ èsŒØ|³Œîï.Ï,¾èAÔã—Q³w.$8Áy%ÃpøìÌPì=«kVµmpÎ댥˜gêIs–•Q–‹F1íÔ.óQn¼ô2ÌòB FÈpEf!^s¨45£¸~G©uO|}NWÏ:µ ¥®9´¢Žì_ž œ³Ü¦èÝþ8õ93"-ÔiF»tØoR8ãÿÞ} #‚¾õS¢„€B^ó€r~{9ŸBhñß&W—Ñù| W¡üvÆkêÑÿè<ÓÒccÝþ«¨P'ÞRÑ>9Vî§a ÖQ!˜M+}Nì—ü¯ÿüïÿýS0ÙÙ7Á³h#Ds€ñå÷dѺíS^ÝìR)tÇðuöy"Oõj3UÜ^p¦‰ñ¬‰Œè‹U•\‹•ðUrŒ£~–¬ñ x¤®¼õ¿A—UC¥ÊžÌ3z^»E79NV¸{=8Ú]’K¶Aþ¬‡¼›ÝͧÑl:½œ×ƒÞ%ۇǪ]‚éŒ\^¨âñVŒ¨!RȪAƒy\˜ý*!Ϥ˜sBtm(v&æJ0e“ ›ÌYÎQ\RžnŠŸ×*äs–éæŸÕJ‰DžíxàyM ð§L ¹ÂçI¼ÆNP¤ÁË•†ºC‰s¶>ÚWV³JEQ«'r"ËàüÚº×Ú¿ùb2 z­ f×x+)»Æ«?Íî$Yý™ H±@QTYÿjNÁ~Ê>n@J3 µ‹„†í^캺XSZ˜ðÏôû¶ Œ~n\LªÀ’¸B½ö²3‚Ù銠ÑÍ‹] ©¥HVU/MA·”6PbŸUx¾ Ö¡õ®»]¥W ´¢ä¨oà+ç²äàÄ Taôꪰ‚nè’%x¥VðZM½€´¶Y¬H\K,’Á\IQ𬠰7öö¨æ+zÜÈœX–*\0òg ý¼š.HªÀ’¸n¶ð§¥Ðâtz®…¨еÀøÉ«{åxâ„—ŒB‡ ]"¨mÝÍê"~Æ~ žÝ¹Ò‘ý¸z 7¹'×ðÝ ^n ­gФ¢å~Mׇxc £p 'å_LðgŘA„P—e…cäp}³pŒv¯½µŽä{ÕˆâGšg;ÜÓ»š÷½Gz‡î£@!ÍLSá‰Io"+¯M›Bĭ͆f­æˆßҩǛЙi•Âɸê jƒ³28ëBž‹ÑÓ¢Àæšî}í;*˜Æ F^+Æ®w7wÑÍut5_,æ×Ÿä½±gÉ;b.ÆÏÿ%Oýg¿N®n/g žõÓUÔ8r‰dÕó㛕øŒÆ¡B¸#ïí@i0_?Ñw¢³'ïã^þ»zûïÎ×ÿ«óý¿ïÅ'ß{þn©IVx¤gëÉ{ Ž(·CX[îˆ,h9G¥xVþ1϶´€ÓS¸(¸¤o‡A\m~ᵂ—ŠKõ)ÿK‹×ö}åÃ9}oyH˜µ@GL¶0né|k`=„õ Ô5Õgžaú*,j»·W; ÔUÛ¦poû‚ïE\ÜtÓ»FJ’!ÝèÚøH1Íßžùx瘷‡AÎ p‡.ŠN5ˆ—ÅóoX¬è³^#þ/…ãÉ6¨å[jSq¿ Ê`‹ÕS”ß.IÖr+‡’ðf¹xµÊðêÅ›',Ø=Ì`x‚ƒ‘ŸÎ¾ ­_YZlÂ÷¡qi§ ´çÃPbPñ@20¹·¥ZÉÀ´íÌE»=W\Gkªw´ÊöG[œ*:°cÁ¾-ìÀÅ•lýDäòrµŽEÅxý݈̑Y©]Á•´z< ÿ_ëàÂ75<´^‚ö™ÔpXNØ ±ÀyyØÑI8y*¸GŸÁ?p‚¡¡(NÀ…úÀïXäÅ… .n®Ï 8ä€Ê¥”¤â£5*&`C+“ç]ÙÓ„›äó ·§ûÃÆK2êv´ç"Yâƒ0ÓÑ™®j ØGiôWÑ/@Kb©hÀàzÅÇt%ýzž²ŸKûÈ7¿¼Î¦&ÔÞòÖ&Ù%™En„$®ð:–5ýIQrÑ/“%/ÄE”ízÀ'TÕ•ˆç!>7?$††fÒ19-ö{s€ 0‘ŽÉ§Q·C¢éOŠB49jÁ>{ÄuNÔÈÎZ¡ÞOl\nu”åè“ÝL#v3åŒKÓ<¹(k›ƒßÀë÷Í€h¨¸>\,s†îgqïã&Îkè©Û'N*絈’Þ§ë#ÄhÁñ´Ÿ\‰™| –5xAx ëb b¦ÂÝ^^# &üDü):úœÂ?é Oé~ÆŸÊë •äɸ·|› ç׸Æpgüø£E÷a¬XƒëñÖüí4Öà"½ÂUÖXtdʳŠ â5¥&ëñÆ#Ù€AŸòa/š¦µIŒÛºBRqFØ”f ¦ÂÏaƒÈqòx'òM5iKÄ·ø:ÞDq9. À•@°ÏmnWŠäå Îa´ƒAÜo~‘mDP_ñ é‘ßa4°mâÕ Þ9dT6>å5Ž•0îZßq¬6ÙŽ_òñ°G î\ªÕ?cA= Š9±S)´¥y}ŸòâMùx€p¿‹z&, »neÑ5øËãï«Ý_‡-Ht¨ %IŒ$²h˜«ñ?Ì€SÎØ M‘@jË”¤Ê¦„º/*(¢¥¬‰\¦ž«¡¼ jé?0ŸšÁ¡¬$öÛÞ“4|nF¡|š\N~ý-’'gnïn>ÝÍ Éú””b@ð’솜¾`NˆGNŸø8<†˜ÜÎ|,¹èÞ…h•äåÀÜBHœ³ù§ë›»Y4Ý-U®`‘9*^’MRzm29¨"TÌuws9‹¿Ì.gË›k'gòœœY'5gZZ jÜkoæd]fYÌî¾ÌîlÜ®û½ÍàIu?£/ï[™²ïlkedbå³Ú¤p‰œM_Ñ/o8S°3]ÎKIƒutÈÑ'fA}ò.`’åÍ/3>ìÄÇífÄÚô'ÆÚ%or‘þ"ébt9°)&(::26½ð8òtVh'™ äÞÛeYNF6Ôv ‹‡‡")O“ ÆRØY§ .Á$z÷±ÐÚVµRäÿ$³C )¢/‹ÐïÇá³î®B5}æå$Æ…cˆKît/„oñÌðÏŒKlV¼)—À¸LÌ=Ý]zXG'£qOc±‡ä9~MŠ­Á÷O:¬ës\¨‡…ö‹òÍ%1Ø@ipÄnýzêÊ&9lŸhÔ¸ô…EzÃOe°YñçŒ!y"[OÚ‚G8)Á)u¶VSÐà•j"“—¢ºŽsØ žqäöã é£´EEp —ÌNâ+­È!!Wœcå˜ ä @ÅCö)Püi¥ìS³àÅ\õð š­mm£Z‚†¶„ˆx²Þ§´ü|x&øë œfäúù&í0\[5¢½»aP§¶’±¢‡cÿB·¹Ðúáh?Š ¯#W`»}úågd7A²XyRbøKÇØ•?E™ÁªâQ9áý¨b—í#†™B‡@GÐȘÉÕݰ€œIu"LAç×ħapÁmãÌe#œ[TÅ*ø!Ñ©k•åcõ@GE|ÝF•›$þ„ 8[Æyq€¿/ÄÏkœ€eþ×3ĸñ&y‹íFز’C< •þBþAsÞçxõr‚¸¬ cùYaéÄ›5Ïã[Kôí‹ÓR”ˆþ|æß?ªv—×RØ·‰ÎáŸh>} …µ\U¹Ïz?@e5e’PX %”ÌÖA~xÞבyßT%|ÐUwU'hwŠÃvˇ)ñF?<^æþ ?ƒ¡í$)Ó2W2Ìq°4cnzŽ[^tSíXá·µ.m.qàÐm¼E×0s»yün jÕÏP**‹êJ›Jýã—#ºÐ•>Z³ùÑôólú Ä1¯qDÕQеD Â¯“RÔá¢( ÊÁ_, ©DŠŠÆ¿eà ÜN4Ç¿$^ÇÒî$HX¨¥<á'9ƒÅ´/™=ÔÇhÀo`PK“"-Êd‹·PþDVl"Ð_¹‚3vu­h‘D?Kz™@VÐ× k!à$'”¶q¹zR}#TX…n'ËåìÏ&]M–ÓÏÌ—Šê±°½çÒ6mÀs³ŽQdKÑ1DÉv‰¡üX3ÀOèÊ{¾*ŠÚ \0Wc0=èÙ§eoÑ âèGÏÉfß4D—Rs”’6½…+ˆ˜¢&|+Ø= àçOü&r‘äOIßÒ ßàÒ)ÐXcAô’ø|}Æ—e<£úÒ¡ó4ÿá‹PëKš¼¹ŽBÛ Eotñí1¢<ÜžFë ]&àQþ; òzHC@x–+„¹h~vÿùÿœ»%»9œNçgéê}Ä–’ÐfòÕ{}Ki>ýµ¾¥$ô·ûLLÂWÇ~çÿœ'Ü©†H(åþÇÿ1ðD.kðCÆ'¼Eƒ³bôÉÚÿ®»<‚ºžs ì–ñ˜/¡GžNžµRpsN(A.Õ†©Œò˜màÒб³mK*c 0²5Ж¥2 ‹¥[8”–âM XõnZ>Ö%Ù~j„9?‚š§žb½ÃH9Ê¿wÛîÖWvÀ}è2M·ô¬„{O ]‹ w¡ªDèL4”ÉT¶¨0Áà¢Dýi,=f guðaEVW¶i*…ÆâKÍ¡m³5”N;†²Ê6NYª\ë1áJ%†¬TúéGéNF¤Zß87R¡ª7ôji›ýŒUm¹ pnÅœG‘o¼Ú¼÷Q%—¶, L 1EW¥1d’c©I‚Ԛ؀HóÓŠÑ©iê¿àh:mËÅ…ï^’9e ÞÀ‹y†<¿þçlºŒè¨òd}™Ü-άµo1ê5;3•CT®õ…Up¾«8°\6äµ®ÁÃQU§àšv·µÇ–¦ ~:«/ÝÞw°2CPu·¢3'`­î»eä&‘ZôÛ€è¤poYXN­Ù¨–‹a­ [J ·‡ž!Š—ÇVãgcÌ"”·Ý&‹9¨¬‘€[A“C™m)Ÿ¦ O~v8¹6×^ë´þ?네kPÑÌ/5a÷kE[²Ñ.ÿiÈ}/Æ ³·ë:˜ÕrD©¡ƒÃo¶š´ÏeÙç“ÔÙ,ˆ®h†‘Òø·G¥$y‘Q!Öi±‚Õ.Ÿ0¡N=Ó|L 5ä\?…P×ôÔ¢§Ó!½ûMÆóëåìîön&þÝþ¶ü|sí ‰0ntmãýhưBÀª“ƒßòî&ºšÜºìx”ñìF[¡6\L./žL93OüSðAHJsø{} æ"5À¶Ûʘ^6t'ƒöÀ‰Øsw2Îp²ÃÂÏiï ´„Y9ðÝaAEÚä—ÛÿHîö/øÂ¢z :zT´¾ck¡¯ß‚ $Ò{ ØrÁˆuM¨ÕBu‡2hôFjå‰H¤bµÒÊóNÏ+Þ]«ÊRÌ$Pª·üǸDnƒÐ܇×èE¾à]:D­6y%¨w€XtpZañ2h¾L.ççæt²\Þ;_ÎD30¿œŸ |qîxU&è°©}à  êƒ&îdžõ%5òìX]jYJRîâ¥ÄEß m´T×·"ò“bwŒ;¼ XÌK‹ÁõGR„ Ó¨B³ëåÍÝoÑäú·èþúVLâfçÑ|Q«E|­-EÆn]j+Q4ýt2ý<‹(noÕuæ¹7)ƒT9éòƒÊÆ °ÙÍX±nCàF“k1±žß4Ú$Féûiìa¬[ÄøâbþkÍÓ¯v¸¥Ê½œ_Íà¢ÍjÝw$æaý/'ÕÜÖEF€GÞÅ—‹\žw×äck|½®×kyò ®Ã)HÝ`øõöæÎ,A¹9di¬ £j…J7מÔ»¼uó^ƒ³ÉçKCç•O˜Ì~].ê|î^¿?§Â©ñòž¹É-›WÌÅ~•U6Œ¤ûNü‚ê”Í;ª]¨I{žÁ¥ø»Ž}Ç 2C8ôßm"&5ë:—˜6¦Gܼ:#¡á†U`"7°ƒJÐìÍÕÞqåVeèMä´còEh¡‰V½`90ëv”‡ÝÈšÉ&0Ðò œ¨Å×I«$ÕÞÙ î˜ö¹XÚ ÿÑp/FeÕ€ÌÆl ,4Áfk÷Çàf—˜AÓ“Ü<ÿë´éñ°sŒ+†¤”5ŸÐ-öáÈ$§0¸= ©nLªZÉ0ÅãØŠQ0°µL0yéK^øãë‹ÇÔAºë’ð8Â"†p£ËƒàĘ5>T¨›TŒ·Â*€Í '­“ˆ¶ „«¼»'£:Wq‘®ÄÔ›pŠohæý5õ0:•ñ¢SW¸è¹+Z´|ÏÇQ¾çŠô=wÒ†¿:€§ûx½Î“&eKz~ÀO8ŽÌR‚G÷ß®¶%=4¶©EÈö#ŠŽ!˜‚9 P¤|´zÛ*®oÛ[ÃÿJwÿŠ¿¼>Bê=¼Ç+»÷¤¯<È­«S+W/ü“,•/" 7»€Öb Öo—i+N[³ÀÏøêêv™à–ƒÃ3uç j6P_a»šŽÂãÀÕ~¼$É^t‡«<)~Û7@7$] é«6Ë!%  ÄGšÿ'A{-„ËÀ;ãЯv©Mü£?fˆ4ð9‰I‹E¯wqª^ßã G†H8H626;É€òÙË.{Ûщ¡ÞíQ]—­…çt”H·J1b€›ìØ:Rdo:™QƈЀXˆÆ!п‰B¼J¸Õ°eèÓÅ BBPîøž:‡ýkÑSnà"fñI+º2ƒFñ•üƒ'ƒÒÝ!;"_›·ýt21ú6뢭ž;›š{DõóeÈš»C‰-¯ÏbØ’0£ªæü'âl¿S®‹Œ´ï’C[¶x½ñ®ü‘}©$©<† ·Ý%¬}ÉÖüLþ!Þ(ìyëÉAß0BC|[éCØ6ؤpS«q¢·I XÞ.‰ó‡*Š\¸øÐ<ÊOÒÝ ý5UÍA Zö˜ZÛˆŸ|[32ú9„³z¨Õe H9ÃC>OÇá9 ©«Ú>ìcŒv -Ê…R”•2)J³HDröÈ·ò¹WŠLxôЊÌ{ú/{äkúŒU#p÷‚sE›MõÊ>Ij®þwr)Ii®øWí›ü4! ü9Í!–¦¥§MÌ<«‘Ó}ÞÜæ¥Šš60ó €5â&®i…Ì:8«ÜÆ(ü‚<Š·ñÕÞɪ›˜ÞA2ÊÔ`=Xƒ›P D.öñ*qá ¬àúBºÌ`—œÔaH.Æ-v`z§„ⲂR:Œx{o±àí½“^軸Åãâ?j'’-jHî$G =&´@qP7r˜fB]ÆP$TÂs˜45èº ËVèãvl³KÊt›¥ÐœV©Ô£À«­ÅHî41\V`B‡›ì°ÆˆQõè§eˆ)ÖiÅä4Ì"í0Pž@l1NRì2La¹ŒR‰]íÊX pÚN‹k™n“šÓ&•ÚaÔñ!â–Å )ÑiDr™#ÓÚÓ1ñ^5ÛÂ]¦H‡%çœÔnÈã?x¥¥åUi™.s 4‡E:µÃ¨,Ĥ¥u”I$—92­Ã˜$ÙÄP Ï:7‹Û|üÐMxM‰µlÒcž´(l“Ò}bNJ¼W¬NÈûbÞœ•Í5¦å§ Ìrï­JŽ‘3<‰uP@IŠá5œ„_ ‚E6"æÒiýËʆJÇ[«Ä9Ûv7î­ÊvëÝ,dP?ÆÂ;«‹c‘_òÉwzÈÉñø“¼ pЮ+ðƒ°‹†x•35Ã0 Æ|íl à䲸ñPë†bESƒñ¾o«3 ›€¤M×pœJÚx‹=®›CùÍÑÄW÷d®9<oA³(SôÙ/^'›ä)®ŒF¸Ä ¨ßŠÁ÷þcG&ÔeÇ2|"ÌÎDY=4­áéîËjF=F¦Â_ÞLÙlŒkøç»þÁ>•~(õ/o¦“K ×øurw Á>y“zÄ%ôV_‰U²¹÷•ç!¬>×îk«Ý«…ÖrH¥Ò:Ÿ‚^a”N¡Íú4¼¬g’P3 B"pŒÍ–8ÛŸ ‚#ÀÈX~6ïeÄ YÝøg§vQ´Ž?¦=4ÉòáqèÚIxefÇ4°ËøÅYPôî¬Gø…C©lã§te\µ(‘×#"yµ¼g\µ(ƒ“St¤ù©C?À1GÞ ÿ1@=£Nmã´iƒJn“"Ò1Þp4ЩÚŒÞ<v'¦ßk Õq|$ÇÅÕ=‚0"j -Ä+J 0„‹™BV /Ecêq[ŠT •ªrø‘O4<Ïü‡À+U/ŸøòYŒF}•@3$Íi¼Y¡«¬@Þ¶ðžÿé%|¸ÔÁ§þ¡œNz‹oi9>˜ïxÆ#Ú'ù â£=i)ñ¨Gh †ÄNjEúG›dÑ:­–Sg÷†ÐàÒ °?"ÈÕä×èbWjÍÿç,º¸¹‹Îç@™n[ǽšÃþ5PFs73¸àPb¨CB2º{ …ζÉVŠöšZl>Qþî,ÃÂô+}™bð’ ¯0çßp›[`P†D ޽@Iw:ý“—Ù•HÄk®¾ Èá=ÞˆŠäñKê VâNòÒø›ã’KÄ>âðf&6¹Ža __åäkòý$©†p°ÖŽpæj‡¶ 8Ú÷t5”$kk‡QLÎ;8{?ôÚ3Dd ¼ü kÑä¯0F«õ9r‹9@\$Øc'&^œºt Æ Ûô fõP훢¼yÚL@P™  +|jÆcçkŒy@SF—F‰³IäKãÙnË´út›&‘Ÿ,q–‘_?èÉa2ç4Éáˆîméjâ;ü-¸èÔ^8†`ƒ!NÊ·¤ÆÇÞZm€x7¨®MÀS pT)úUŽmÝ.ÝÂĺ÷i ª¦äÇ§æ‰ ñµ8îÖÚã%=FäEZÏc7O^:\©{S¼ê©Œi„>s0­a›hѳndÁ¨<üQCmØɻжk²®ʶ‡Ï¥ipÎNïÀ'[µO^ºì­ò)©èlÁ:yŒ¯ÁNEÃâU0üäo'͈PÞß~G•ÁÄìºä¡_äy„JFäyVñzú—'¤­8Õ”éžOÖîÓBÎY¶P|ÂHTBSjÜȂ⟬¨˜~2y˃è_RñÓýP=Ê/ð«!CF”uw+߇ŠócÀ±ÚŽÕ¦ ËVà•?9æV­6­9~±Œ²]0Ô€V˜ã@=7è%Êi¸×I>¶ uamE\fxT|¢Z©Ð>ó8]¾ ™ i‡Ç“a&3˜ÌÕÍù½˜l˜‘d˜f“>&«ãª¹²Uå,­ ­ô/ØAØU*›dÌåþPž¦4kš'ÔŸ®²iø2S¹@ñªª;‰KCòD´e«ª›Ó¼Î:ó2Ñ8?x…Å•êNþõy›ÀèY²Ò­V ç²Üäbó;‹`ô¬+9ŒÎùê,|ücpM°ÀçÒÑÇn|j•)n±€|¿wR÷GiƽHOËT×fT8UÞ¬¡TÞ*åð||ÈSÙ¦ _ß“u²8ìë­±YÎ4_XÎÊ\XWzbü—`A‰Šéµº' é^õþïÐRÇGÏ~ Þxfˆ7„òŒ`ÜÍ–C/JƒâR7ޤü7B÷…ᦈV$Y÷>5g©$=Ò'çä67ÇA1™® I:Úç‡õéµÜ—qØjól{¾e{ÂÚ·wÞiâ’Çàœ¦n%jÝé÷@/j[ù±(žÀwö‚’@ÈÛ߯gËéÍõE´X|† „óO@óšY>î¥!„¢Å_õ×$rÓ›Ìø2_ÜÜ9_Є±èºEA¯Bw!‡5ü¨ÒWFß~ø‡\kàÀEÁ·?}<âB³ÚĈŒH TŒYi„Šàv©#tÌ<“a$£*È2®ækŸ¢÷/éû'Qw7Ã+2ûF8Õ>z4m>Wéª8ï¤L þ(~“lúûZÓÐh–T¨¾e^˜{ÚÕ¬ÈöCñ]òf”½@—5µ«#DˆAV)ιèÇh}U*UâVÄLÐÚ¬¼­BÓ®A¬?Ã3˜mâ³F²Ç4¯Ý#ÙÁVQa:Œbü¬—è8Ûä7ïÏ)5ˆòî°# HÄcj0 €ÿݲ`£oÐ)h¿ÇjððfUèõ“u +«}^§S‘‹99f"0F¢8]ì²É3ü+Í>¥Ã„fm²Ã ß.?ÃÛ&³»’F|=Ðëe–¡Fö@Lù~ŒDÄpò\..wÚ"›¡^–(%®“ ªáNÌzX²ï.½¢ìK¬Ö–ƒûB¯¨¨653ÒÆêî¸ï BéÕ‹òÌÑÇ­6)F+•k"l·$‘ÝJµd›ÂÜé°*p­P %†•JFÇw =Æ¿wðÉàMµnýbò?\ˆåS•±[‚Éú¦Kë`):4ã[ôytÐu Y:,.¬uòpxŠÊ<;€CÄs–•ݯ®U·ÚÁ ¬øË …Ýá9ЫcO£ªj¶=òcTÁ-HoÔ E¸ Â÷o˜kDݶ´ 8ÚLൠš çÙvO÷˯xÛl¸`òd´Ù@C’o–‚Sæ3<˜äŒ–ÖŠ±Ë o>°-˜^÷å#ÎYñ÷¿ùrIy9ÈÜlDÖ„úÒïûq~oQ~?„ñ‡~Œ?XŒ?ôcLz¼ÀD½ÀYï˜ô Q,½Ir1îMV¢{ñæRLy7ŸF³éôrÞ“ù½GþÞUí›Cy݃FˆËÅÝ]?’tõîK"/kãͶ Á‘\×h+–Z’€RË*€F“µ_A»x8¶«…kOfñÙns ÒGô2ŠŠl#šWñd{(J‡MâÕ½ŸìΧ¦¶Ø8¡Ä™½'+Á ÷»¾ò¡¯]»,Šòä5ù4<Íçë{¾î²ÐB Qn~}>B0qXÐý¯’E®Ä›·øwnÃí¸Áê9Þ=%ëÿ«Ì 5 U4‰òÊП¬Ìˆ:†Þ'»U2ÌvÖXWñ.˜éVÔWôÐW©°lhìÐnžmMž¬ãlc»|o|-’ Òé 0- îºDͶ ¸LCÁ¡÷ËšJë¿òÿÙ6I g*^ŠaÖõÔá|HÈÃ¥˜jüGwI².lRyNû1O¾uH!¦¢Z ÑÜð4Áç²¾‹€þô¨€MXŒË®-*XYÅ겂)µ¼ò@Rˆ6÷®ä©ŸÁí±ñ£ Ïä~ÂèÍLgtÁ§YVHÑã9#eGÛŲÝ[Aڂʽ²[D°ÝyBØÇ“€81X»Äãÿ¯7w¿DŸînîo#r°[h¾æžË•”öÛà1Uû€Ë–uéÚ²LVÏ»l“=©SÔïÊÞ–ñoÙ3ŠV£umÕD¯à#ܧ–VbsHJÂd ã6ÜôEŒþp•‹BdønÔvàšrÇê´Ï©k}úOš/TÿRO…²ªÁ±Œ ­D ûíµ©îá:øO>l2YUáÎ ajü»¿Ñ ˆß+ôÄ$FïÓQ.yk3%ÈÀxíQöðu'ŠºÅyŠ{Æ.†ÊÇœ­†)ûÓß•íïNãëÙfm^û˜D«Mçýû óÒÇ$T87—çê†X¼&uz9›ÜÁñàγx½«çøéGCÂôû2¥x³~úŽžebôŠMÉAÈ?¦»¤ß){«'–X¡Â2Û_Å/öÕDòᙘ‘nãU6ü¼²˜²@ýrsnÄ«›…`ÁóÒÎU5%)>5Ï©ØvòλaWÖ+é÷V¿ô1Q× ÙÈäú$…<ÔÐä2«|Œtü¾HŸ,¯Z£ÏS(\E¯Ê[nuf¹¨Õ8LGÜ6%>{·Ûζ"ËŸâ]úU¦Î é]_È…`èkoDÎÉåÝ/š%… ÎIˆV WÒ޳Ž(gx‚0ê¸}Ó»âж~ç SLk·qy™eŠ·ÀG#4ɛ옊Ëc è— ªÜF5˜Àü"w‡ÍЙ±†yù߀ŸŠQÚ™˜yæ9t×%´ÿ4+†á^m´æ}<]"Bô¾CF<‡–¸ÿó?þ_NúÏÿøÿÎ0Jä°O5UŠ´@<Æ@xQz@·“»ÉÕü—›ý2û-šÜ/o¢Éù¹¦ÏŒ·½ ¤Œ ŠöòææŒ!¨‚²o-#¤‹hÆñëãiôWýƒ±1¬ÚE´îø òŒaÕ¨‡.¢Ùçsñhô8½OTTµEðPŸªØŒ²×‘C– V€Gðé Õ_’Ö’â‰ñ=„û#Ü>öiù@“h÷ UÛÿÜâÓï0`g²…& Ú™î|M“·b0ɹ¾l‚T|ÖxÑç`|0ñƒ‚ùË_ÏðÀ¨~:TPŸ}"ÖMýkxÅNïDÓF§ƒÐÃJ à ˆs >¨³YuÒÞýµ* õiH ÛÙÝb¾Xή—Ñôæêjr}-çW³›û¥Mí—è%K109"œÛ”ëëÙtÝÍ–w¿µt2SZŒpÓCœ­¿îušâ¤¿w@² XÞÝ\F·“åçè|~wfœ'íñék%f‡Ê¨?üt?r_AÜÛ€Îû{ÌPbÜã¿æœWŽ„P%ýn­¤È£Á~Ó±ž±;NMU"d+$¯÷ ÅuÓïú>ù0´ ¸Â[ñC³à~ç“× ÔR´B¢p›Ão•qñbädÀw À¡â_N~û† XÓ%¨œz 7Í"‹Â’Ç;‚_ø‰æÛˆúÆœ]Kí¯D¨%EYweü® G£UlÃ1ØK¬vÔ,Þ"ʳ¬úÎ0â.¨7÷er·ˆînn–gv„ÑA£r•kéÇQÑy”SEÃ6¼PŽ!!*¿…ýnXù‚\•'ðßç<ÛÁ}´1GåÁunºÏõ¬i aࢃ毜q\¦{".óte|·"ˆyñ¡`‡ÔÆÎܱ …ŽÔÔÔøqæ T; ª­¦2`¦Ô7ã²ÍÛ³¨¹ÔâÁÜáÇÀƒB5#0›V%»Wp©l½§Ú)]µË’1ï`И'Û¬L#ù¬i±bàê†a¤† n?õS44: pm‰¦ïbŽf•2TþÂ=r^ÚIðúô:g”îÅd8÷§f… B†ãèéY¥#ÖaÞnŽÿys•¤ŒtÛ3x®æ÷·í ì„%P RîãyÌÃH² +æpœ¾¬×DÔ±ý¡üQîly" =¸P®ÊDÊwIx(Ìqfœ—)Eæ®è‹7¸ÚÖ^m´­àdÜÿÀp–úe»ÇËæžjüí™;¥ÝÌ|§9öÓjÅ>Y¥bü$=xl…*§† §º[=HxL⣰5N®™eâ«v \ã‡rÓ(rï²£€³BÅв½bR¯2×Âu;ŒÙµ¨sÌ –‰ÞÅ…š°ÍòäÌ\'ÂÅ¿&] Wí1`–úÏ¿ü3Ýý+þö¯g•u©žëW‹\Ä2_/D.÷K£‘уÀÃWÌxÍ£ ¸‹Zò/*J´©Ü¶£€©uXP!H1NÎ{ð 2.E† /ÑŒ\ã8õ`ˆ³îŸh•ˆS^šûà*Qº&þ¼‰)X¢VØÌbÐ÷øÔ{þa°‰‘¡àíö‹ùår&& Ó‹O’Fo†úi¢è`žq0dHãB ö}·SøÄ­}w¡{æ]ÊÆ­ôÕ祈Žh\ÑÕA‹+WÇkc½¦lì”×/€Wb|?» Á¸ì½v»²÷[ªöfŠëú%)ÊW'¹PÌ«–j·(I!gøŠZ"‰ª]…dߊà‚0V›ªw.T¢ ¹´Í€CµCRÈ YTÑ7ëµò¾ú khU¼0È¡/ªÜ¤ÌXhUeó– úý?RLE÷¯¨«»~ì›|dÌñ•ÇÛøQKâ·–{ƒHæ£ùh­ÓQD_ñ¥“@ ›¼Ù,4*üÀëˆþ Ž |¼N'áxÐùágúíbÆŠ°ÝúlO*Ñv )ù¯å—û¬Hß»ÙQ¬ƒ™ $ë-ür1¾ ”¬õÅ2' v°J8Éû•~[̹è²âIÛz$ó1ÉùP  áÍ2›åí]Tض²|{Çÿ5࿽Ãÿ‚‰€ÿ³ÿ#éñMá®-ýhÊ6ñ`hNgb<2­ÀHÉÑ>ÓÚÛ§mË¥š†äGl°ÅB pŠz·Èp%Øì™ íÌñƒþ³Í)cþÙd‡0þÆ(Bý§eÄ«ÿ¯ZnFD1bH›˜!= ~ÿa²J EÜÉPÄí ‚Š¸Î€Ñ…Šôé¹ì"Ò’­| ÑÎÕ{ÛgÉ´_%óe…$²¿IÅðž{p¼ç],Fñ¼çu&ãär Iµr1‘Ñ©f[‘uRY;€`’"«3ìºv ;Åpídxï~ý ÓÎñ®*Àõ»«V$B¤• ˆâ~e3ÀÎ~!Øàzöµp™Âô«‰UIŠV‰~‘iOŸ?°Ka‰ôåk8i—¿æ±“’ÁáÓTWFP#ô^œØAu²"œÁ ¿ÝÌ8§Î|¨I²“›5ù¸Ù×éSZÆ›l•´Ý¬m0å;-±Àµ=çÆã«à†˜Ü˔춄 ð›ýÖ83¯È¢üRpAOÜpÔy X´Ó ©-øDO,Ȳ§×A’ÝühÐãƒö<~Œw±=‰vó3¤a=q[ðÏ©kÁÌm…!Þi Êòš¶æ3"|ÁsRn‹òì!ó3%»í @Ã|àf9<$¹˜›%^Ÿ…–î´ÂÖ–ü¢6[ƒw×{Ú²^– ¨m+ʧ<ñ,r-ÝÉok3nÕÃk J‚¯-,Ûm‰5ìàGn+òøá!-·¿ûX!e;­P ÚŠ;~Ô`…²§Ë –í¶B‚Vð#·ÅËq ›ÒF°h§ R›° 'n èÆ@H²“Ÿ5ý|àfï\›Óôí«sš_Bj+tÚ‚? –¼û@’ü ¨éÿ'>°ÙÕ¯ûl½mÈKÑ$ÚÈ/åB†œj’[|bYpýuœ¿|zÿ:´ ÜYð# 6±³TÈpS ?ÅßNæ}\xÐ ©.NR„·±õž!Ze²]}Pq1<ÿk1ã\³kq‹g²m«Z$ÂËY4ƒ­¯c='å;pWïàc¹ÏmŒ,2ØgÆþ¼ª²¦Û¿çñ:n)X!ó‘dØ„@È s÷?ðO‹eîÜë¸ü@=d-þ¨„›x¥d¨açŠj.Ÿ™–üKt‡{œ%Ò×­c|:m©ˆDñk*²!Aÿ³BˆÁAM‹¶¢É‹wÙû‡lwl))öÄ,2!B]IàñËd¶Äû}ûr)É´¬•’.”^^e•”Y’ ÝÌþÖÉ¥$Û5 óÎä; ?öÌ(ÕÎJ@Ìx?êl\V þrE w§®Ä¸«‹Zª|Ô*¹'ùР £¢“/TJÅBñ%| Z­‚Ïÿi´D$ò?ÀÀôÅqÕ£4£öC7´ð²ðG-ÜÄ’aš…ì5jÏ3jTñ™Ó@ ûvHÑ.+¤²aÆOœ¼6eîAr]ܦˆ¿ÀO“U…Ìèê”`k/¦#pÜ‚¯õe úZ¼¥åêùƒñw»,dýÝl K˜£E’ÖøÛ² –Å>dí+p˜Ìÿm°ãÌ BÞT×Ûöà\f¹§}xÜÄÅsœçqKƒ`ÈÔò ü†ph€ßœêq«U›ÚÇV«PÞ×*¯Y…M« ìlºJvÙÛýg³QZÆüÓm“0þÄ ¶L¨ÿ´,ï^>´Í2þÿÚ®m¹m+˾ó+PeWWRĉÇŽkf\ŠLۚؒBRvç ‘„6E°Ð2ÓÕUùŒéª™ŸË—ÌÙ·s®T¿Ø"pöZ·sÝgm*ò¨qdAçUÌ lê´åM¢:Ö‰êÉËÿ7S™²ä?§) èÂð¼¦ÿm/PÀX+{Éá,ýãç„SøOðÀà›á®L¿åÍ=ªÌ#*ÓÀ¡ „ òQáÍðOÍâÛ:ë‹Ôˆlà"Ì8vð0©ôe´ç a½¿ýΧà&§yϾóløÂépø8ü®"o¨Šçt–UÝ á÷c¿¯Q~_çü¾›4ºŒ‹!ÌP¼•>D@ÙWŒ?Zy2ââŸTÉŸÔ.ýI#á#¨þP#ü¡‘ðé§U§5§„?Ž ü±JøcðÇFÂg#ŸU ŸÕŸ5>Aø¼Jø¼Fø¼‘ð§„?U ªþÔ@è“;mc+\*6‡£¨l»;Ay%xµFm»ë­á Š›CŠDvñ6õ yïƒì‡|@Ö¡úmtŠðPpt~""ÅÂAj}î³äI·r§;|‚Ä\üSóÀîU¥ÔEC:>F·Íõ÷‡"%ê£ËJõçgXÐôÆ„!íŠüÑ%¼tô]Ddå6^ª·"y)®²|kN¹h6|GC·3“׬ÜJH!#ÿ¶x{vÊI¢Ù»“÷'‹èôìõÉ»éäï»$ßûgnlm³‡°ø¼„ëí2“„0°5»xTwñ¦„ƒÿ¹Èw 1@‚%ß,Q—8CÚ$6žnŠÊ£>©x æ˜¼HvƒÉ1GPª'Æ>+O` ?êAxÆl–+¦ x!¿+ã´_õ ’ãY0ÖM¬‚6-l/?‰T!ˆܒذgY¡£Šµ€P倀xAt#yw4>Ç÷äÀ@”›Uv [âÔË7X-Ïg-.Á™Îý<6 ýùCE“gø+ 9OH´»½„l0L¡¾ÆÃh@…êýÑqÚ>ª­N€çn°4¢±ª;#¨'‰ÿ¬vËÁ2¢êÐ1>±~ôv?°Õ†?·ûIž`Ýóiykw,®«t2æÏkƧ@pË|îdoq{´KýæÔC}»­^Rkå«0u‚Ÿs:ê'Ë“uMuqà]ØÄ}¾;©Vð$é_™“~D€Ìwjã®Y°< ¶¼Ö jU•kc«”'.vŸëã d0-ÔM¥äÖ­‚·±Iû°€S û:Õ‘ ‡-Òj(gÖdè@VPÌ|‰A˜Ç¨"ÔeP,¥®täq¡ºFè×à$HŸY±Éâ’zˆ§Ì¸À[û(ƒûûO^Á0Ò̾Ð|KÛWÓ>€lûnðI&Øæï‰À(9‰ªZ‹ûòÀB Í~¹¾·k$0I+ï—Í«¾Æ3AÞ˜§ZÎÔÖò4Þs˜ú-4¦™ŠåMRï0¿óvNéÆäµ„C•y[á@; µ (Ò]ð‘d2™²ÉVx±è °õñä;¼2ÌÙ:b¬aÛÉEá1{´(„diJ7)¥D”DL4 [”z‡R•œMÞÊÛ¤à)‹"ÇÝá5ªiy!íRøŠˆÜ¦¦åUf„™ÉO5ŠS&-ö÷D‰U•Æ4üèTW<ŽDù_Q åc÷á Ùh¶Xø]±Ü%÷Òt‰dìË“XÕ‘—½Tæ}ÊÌ+´±fr4°R®^I_гÏë‘­6A„jLÿþ¢–Œ¢UC}QŸRÔò>aI¸ª³XAúé|úP ¯ 6Ë­! ÍÅD©L!Ê^Óµóhzzôó»é+‡©Pƒ=L!r``ò‡m~ôaŠiC&<^GöC¦î ‡´Þêbvà‰$¯<>{÷nz¼89;G#wµ¸©Œ;¬RUÛß`–ˆ½°O¢NTUÄúä[ƒ9;;zõþè¼ÑMû|öëi;T=hƒñc;F=ƒñ¬£äàÁxÞŽQ^ð`üÔŽQJÐÜ8S“ÕÙ\šDûLâÔªuoƒž S»«‡m-¬ÇŸ0¶š#¶=é¬8üÐã ¦'„jHÕHé8Ñqø3t@h9Žöq¢³“uÈñ‰,Žíœ–4!4»´˜Óð‹ò¢\í6Ô]…—g…‘EçËOí<à’ ƒjç¹ê͉®ûUŠ Á®ù^Ú0À‘“c}.$IŽõˆ0_n•m°†Æb"³—»í*.GŽþ "dˆP0#: >çR=€"ý=!ºî‚‡ˆ"–;xsJÁN°.ŽTÈN-â ýªg©& _¦ê|{‹¹!d;æßÞbzH3Ùm¢¬_bÛÚÝmB4í6)‚ äð²¬õ9ÝM!qÙà=f×ñ -ïÒe2ê=WW€ß'!ÈuÄTÝîÔmÄj#½¥Z"Û$&Ðcê$[py@×Mqcâ$1Ÿ]œRÚ$1ŸA b÷Z¼ßS·¬4S 9€oÛc?¸‚ï±Rø9¾ÎcIDÃö"¤«ïšÎ,ovÁ4±+æµ7 ÉŒ+nÁƃÜxï!Q*d[ý”ôZï3¦á_$5d)3X÷Uµs0Ÿ¿ ÔÑ—†o©QeBYêjßÌ RB 53ÓaõBKURÀr¢–æ9*wФTeëù#s fºAƒ¾¢S–Üù3E†.d7øÐ¼¤­™`„žæ´Yù&ffý˜Ta0¬ÂÚVŽ×K tlI‘{êwR¤€ u!^1„…³àèø„ãUŠ+nZÒÌ%¹ºN/ã˘Ý>æ·7øí”wE¶;Y@CeõàcrÙ]ë„¶ã£52¼O—ª¡Í®JÒ§nE¯l°n¥0e%§ú=G[ëa7Y›­$TŽH2³özÙãÞ\ËzÚ–„Douw£ ¦pÕÿK7‰””_¶k¯H¶Â›²D` ±? [–ç7éUÙJh©-·’Q9û³#EåVðl£SX·‚S9¥Ñßê:Ú¡óXVLÚ¡±C“ =kõ8òXuãTµÚõE@rõ¤ìæ¢r\åÑß]—‘Ç=Þ# Nª¦BnE– ¾ÞiTƒÆvmàÜ êÆ¶{KÁ¶jE6ÚmíÀXŽqߣM+¬VJhG…b Š-˜Ý_¨,žó¹¦–O&~»QÝ’:õ Î/’åÍ&[g×û&ý[²·QÕ óµp4µ\D«ê9E®=ëÌ fÐãò¬bü ÔÕ–™ ¨Õ´œl¸Xz?"9\‹‚êSÞŠâ·ìõѯÝdº€j 7I¯ÞƒÛÁd»Îö°s‚n‘c^åÙ­:,¥¸ ó/곊®²õª½Yî‹Áe)Lî(NúdW0¢H¾p,¾¯• à8,–~†aœÏÚ\¢Dàç}{ûZðÍÅCÜ%c{8Þ5> ¡Æ9g{œúîÙÛÅâ·M89$»ýãK˜ ‘t™}]«Øº_1TXìÛ1èíMò¥T¬x =ÒHõR>ò«ŽÂ½ŒðßÉÕN7i²ê×ßÇJÂ}¡ Áž œ3.ÎeÕojo?MVØÞ™4±Î¸f rÇ“ël°±çàÉ„ÀÐ×pÏœ”Ác=t"þûy„ª G£>Ãú:ÔVz­a†ùýVÌFx®Z±¸,óôrWê½å\A¥ñ¶•ÿ÷õÉ~,™…s1U o׈£~ý}æ&äÚ4Ö@Ïl{g8pž'x®HË/€>0Æ} ±Í‘±@‡*ùwǸUà0Û n[åéô_§ýC†r8Ô(}[ˆ+!oÇùÀ%ö}l€T0¡Àpªv £7B^¥_‚?ÿø)`¹.¸ÊÔ' Û$oqmŒƒ£þüã_ÁÝM² ®’ryÑQÊ&¨aV¸ÒªôZ²¨ZÊEÀQ3#„B1t!Ì1sÀõ2-ÐVž5ã1 ?¯.©‹oÞ[”ûu"[å™–ƒ ácžâË(6¼Ú1°T^ci©¨ñ"?'½³œ—ñµ&e[Nr>—ßë}Àk:* Ûi ¿ªŽsH„ŽAc¨\àF™›+†â4[iÙõ–ÀY¨.¤íÃ_µ¸ŒgBd0–ÈGa—Q²QÃlïÇ Š )CÛ>~xŸN`% ¾!4 vTÆ›}aoÜ.¯Ãñ¡ºŠ)~"ƒ"¥j~p)ô%º·cÄÅ;†Æc8è^¾ê–zŒ®¥aÀ£.…ºöj‡sÀ>R%ÉG-ßDªÂü„*[Wq¯uðßeðõDÂ@Øæ ÑŸâ£z– Œ€Élrà‚Et¹×A ýƒ¬! /÷:˜AoÊ .÷zaa‚‹¶cž¶ÒŒ»­õÐn†J­ˆÃÝhiPù„ÍØY¯m¯éKCOH!"ÜêðiU{Ódà¼bM.ãê…a±˜e[–`ý%¸X¼Ÿp® ,&¯“úê,..¯I1Å ì·OÈut´ZÙ=(½ñï¨)Ǩ:ePµ…l`T•M!|_U¼d®Á/šeeÓ[/ðFyÔ³b³±”vsd7éV?LÜ* ?è! EB¢iG€A¡1Ö:[Ʀ+ÎE{v-wE™ÝRµ80bìC²§ 4˜¿=û_Ìgï£ùâh1Ÿ)zK»«Ó¶—› 04š…ÆlŽ}@€)´ s¯tê½Ü¦×°W6ª›f¢7L¸bpÞ‹DA,ˆõîL(¶)ÒÛ·¤‚ü›ÅÈ8ÔÆf¯Û”1Ä~NW0@6U¹3ïD™êŠõ.Q§ZVì±^õõ—ƒ‚ÝÐ^¿øÂÜæïþú‚Ü Xä.1Ê2J‹b—ôÞ;€ïˆw¼÷€@1ì2$ÐêJÐ=–PžðvPè9ë`“aˆ†²{~¼âõ]¼§%êªÖó‰—jû·èß§ªi T}ç*–¹Ú1©´ŸŒ”±c)°;‹‚vNÒŽF„OV°éKÝØˆF¡jÔÉhÎG5¨¼îÛuZB—?ËU%ØAíx njKŽV ²ê¯H0‘a½‘íJ ñëØW¸Š}¨ì1Æ/8#"Úå_6˵z·vϬ¸ ¾ÚÄ0"ûzT­É¾dÕÙ£¼åÚñ)`Gw µ¶‡>m ®s+ "tÉÔx´”ߨð¹ÈÖÑW€~œB÷®³ýYUè› ºkª^_%1Œts8àæ©ÆÂª³IrÕ›(ÕSŠóUÓŒF‡¨Š˜[s>dBé *& SVÒ d«Ññ§AV•»%sЧ£‰ÅQàB¤N‡¥É¸éÐRgŠIc±WT±*¯ú›ÉV“åe“´bàüìÃLc¤ìáe‰€ø5Qv%ñ•ß|- Ó`§ËÐÂìJ+ᆩôѰ,'èÈnÀˆ»õP+Ã[OÐÆ‚1rlZ ´÷*PÜTüºÔ„Ã÷÷1oÃP\½D(æïrsI¹úŵLˆvÔíÆw¸Zˆ<ÃÞtèËœäÕ[ƒêa{êÛîž5„&d˜ùbvrú&:>;ý0ÍOÎN£#ÜÝ&Äå~›ø§,úr‚™² ºÅoçSØ>¸Pœk&³Ïd§=C‡+rkx,¸¦Õø[ËÄV¿8?<Œr³GÔ€„ò3þKZ9Ånpø¼6aø œ/v—’9iøügÍVðõqktwÉõÄ ~ÇCÕ®Ü$<›¬¤Ïô¢ÚÝÀ=SI-´»”yp5[5Õ(ï´©rw«lTç!xªÚHÜZeö“EIUÛ\¬±ÀX!b)轪¬o£»8ßàÄØÀ­Cm=ÿm¾˜¾>ÍNÕ‡:gôÕð‡åØÙ\+ë1í‹Ïé&-Ç Û†|54R¯0¾±q¿Hf¬¥þ mÛE cgýûìáà º4{y`icBë?Èbô´á„ç5ïçS­ô¥*‰Ÿ¯©H™ÉàqåC¸:Ëî}SO辫ŽNƒŒk÷}WÝ#ÜzäÞfpÕ›åz·JFrˆq•„K¾ÚÚ">˜-ŽÞÌ£ÙÅ)ŸÒí$´C¨ù/'çÝíS¹±–&ŒÒë ddÀ…Ùb°kŧPBB iq4ÿ%z5ýùâÍ›é,:ysz6›FÓÙìL5÷èŒ„ÔØu ¥˜"Çâäýôìb1¹iq¹=…§Oè}¡LÐzVPŸp'ù’,w8Ö‡õyXÚ\ÇU ÅQ:hÕq¼þ?¸ÃP14øpÐtt±1þ[†üšÿÅøWš ·ZËH毴ãtVà /\.wyóÿðÂMHTÍ(rv1¥~µŠ2dCa èoÄo!O Õv#`ñ{sQxÃê"Ë=ˆ—3Œ3—-|¶l¹¡»Ý¦Íúà•bU²=æÿÇ ;1 .C¬÷MzŠEÛŸTè Ø /Š™š}›lŸw]6”q©Ðê|z<×@ýt–4›]ÓˆKgºzbÄ•øN¦o»ì$÷~çõK«w¯Rv•W¿n‰ž"ÞÔ’ש¨”ËÀ–súÏ­·*ú|#’GÔÓâ«û4*LƂϿ5x™ïJ­-Fâ[öºŽÕ‡4 ÔáE×sÀB.:Ù]¨+ÏOøßè`W-Ì!Ð’ašÈ‘(àqAû¯Ó•é÷t²WË»ÔЪ,Þ¶µ²Ö‡D¦´:¦áh¢eäc×ÖдǤʇ&ª‘‰–¶üvTOpÑ8lv ™ó"ÍaŒO­(|Ã!d†xSŒXHêñoÞ«SЫ0âua&404Qh¥…v(¦hó¬,ׇ •ü]`k8uÖSƒEkäÅ},’3bȈ v–WÃ…¯5 )“¥*Êö.¥ %ææãŠ|]e¹YñÆ)7|õû¼ä¾- y}Íj9JN2ä/I²¥Õ '1R_Á ä5¦(S×{£øé\CvˆZcºìv=&ŒÚµôÛµB]f_þ}ÝÖDEF«¯•8΢f–”t—r·ß¡ž~®,8ì«PZ¤yâáÓ!‚2-Ñ…„µ˜Î_ŸÍÞG'§ŽÞ¼ŠÞÌÎ.Σã·G0%¶ý’7óDÕŸªr¼Œ«Ú‹­Ô6“ëHTÍ)H€ìoëûä¢x@®íÝ1eWo®u Š`Ö8ÔtçðŒ}µz”¶CLH½‰è}1ãê5Â…4l€Ë±žÇЃ/áÏ?þ÷‚RÄ•Y(´ðÏ?þÊ—7d?tR¥j©¡£fZe·:¶zÜn{Ue\RÁ:ë£õ:»ÃŽ ÇýÀK­*=XÑK7iTaY^ úþ½Ðxõ¦ÕW<Çâ¸!(øBœóøNwJw›2½€þ݆–µ‡Ö¹®8NëܺÆe¹8¿.F§a}9ÀЙd.HÐŽé„2Ì…ë#õh¦ŽèE&Áu461ÆdnÉ|˜ÈÎ]1šGÜBÄxifÀKøÂ‰gÞHœ=«ÜHœ<«ÜH|½äB¶ Æm®u¯ìZR4@¯ãuüeTeI˜ve) $c^`žæqÏyºOG\ìXzÍ`Îé •¹K.a³ád—§Ã«KmÃŽä©UEæëá»¶Àµõ‘ªÂ…MQ&˜GUú¦Cû (4@¡ t1ŸFç©1_LO·qÊrÄ-=8$¸ ¨ÈèãM }r«„ÈÕÀÂfü ¢ïa º `c´iòd•4 ¿_";Þ ä'.6t´‹Ìºúo$éê/I~ b%ª=Ÿ¿ýšÈfdö;*×ã<æMì·{YÉ=ÎE› Ùïèo»Û-îˆ.F\BÖ!Yë«‘á'„Ây Ì„ˆoÞi€1…pÃÕ?¡ ØdÁ*Í1¹*3t1w¢S|…Ü]³rÔ5±0Ó à•ró ÂйrƒÄJ‹Kåmxë{ŠxŠ—©VÎÞÔm¯286X}‚âtð²uÑ^-HèUðq`.4êka¡ ×v|‰TåCÊt»³r{)ýåYlFìÃ.—×®’2N[®«ZP§ý’hÚ[5úËVÎel*Ž*Õ‚¸ª^5½ Þ²•\QSJåúE…ÒÍ.ÛÁ«"g9õçŒõ|/ÈÜq¦¦>]='ï„–««Æ,5{.jæª#z“-Û@¨„_+C5r`ÍïQQG¿,V­Øê¼û½Â ûyþjÒÚŠë&ußþš$¤+K+eÁ“IsÄY+vå2XÛéU°Wcü¶kØBÃoŠV)$²sôëGsK”}aÂì=ÏZ˜VÙ];—á§Á’ÿÌ*mÏ£Ô±ìIbýLqÅLæ¡ë…£¶¯Å)ãÕo›‘=iàšK±”&uÊÞ[9¤þâ»ÒÍÆm<ÍMIµ˜³ÅŽá¸UV~|Ýø`_ë¡ÏMúŒp»¼#âàˆJ‚O¿¥²XvãC)F…?oòluuÌ=Mxµ·TUOzL~vòyæJƒEº%"Õ“\6Ý8LýÑ‹îÏø·ny“,?é„èmˆº¤-â"‹ÄX¨Ú Prul\Ó«+ ”ï\3èæ®.0@sªLZGžàÎU5β'’BL 6 ¥·ã+ZÏ@zG{Æ1Z+ߩ‹=/ì¤ÇõŽž•œ¨"TÐæŠUVª£ÈϹÁ¬2“Ùº9ëÉ“‚) 4„ª{:* *U§D÷”ŇnÜ»Lè„¶REé²Q÷eäâD̦tÊÏÂù0º¯H rËο^h‘L Œcª¡Ô;Ciÿ&Íáy|Õ&î[ÇÑôö]Ð\NRÇâIóž«>xZ–„Â$Wf« µRÞiåà¤mʸ“ÁžZ¦½1ʨï`»+!1žo ¡è^(îærŠÛ‰eŸÀg§£ 'Íù:9°”¨F†Žc ºµ)J·´¸AËLº¸Ü@ø%{¦R™žt%¤èIf¦fa Öx£ú!,=<œQ–—ÍŠ/$Ák,Žïß‘&Û¥³mºì&u‹WºM¦§“ûuì‚ëæs7Ì©ñ/†þ‰!Sµe iÒ‘¥¯›á×nf¥”‰C~XИ–5ËêM½  ]ÓÓÖŽ8Ûn87$7XÓ¯þ;Ýü-~üõ¤9̤¼£pHP»âM'^%‘3ëêÖM6é=õç¢ÜCãTæN6áQŽÝk5pÿÜå€ÄµsËžM¾,2kî²à.Jjúy§"L®6ÑxKK§=^~Z§N”£Mõ÷Œàkk@7Ü9”_amΨ–B¦[ÛôïÏSÝ÷Ú€fÝ_K•Cæ×=B–mûŒ‚w.…¼ëÅ¢U±l‚2B(Ršڡò!WDÁý%\7_£øß¦\ïÕ`ô“¢úÓ¢Vb®º€˜ð·"»Ù^Ò%´NøÚÞ§Œ;¬P6±¦Tö®ˆ¯»üÆ2öWhÏ2[ýŸßv`c÷nÌh(D ¢+#!+# £¨ÞŽ Gi7nH6ÕiÚÁËwÆÈb0 xpºazç²MnmB· 60ºH¬üé¦6âj܈ù£É Z›¡ ±^jÍÜ1ú@±al‰wŸÂîa äL-b:-ÚÁ­#Q¶¢a2F(ôzÅÒ}P^Ø9sz6›ËVöØ’ß`t*ÍôC„8µÕ¨t=Æ}^£Fs÷Ã8W‡<$$‚õ%Ù€Ar %iai°ºTÿ5Ù€¬ÜCßVb¹‡öŽaâãÒ„ý3ý8wîáR=¡8¨žÁÕ¾¾æÇݯÞL“* ;m¬d1Qp]÷…8Ð1+4̆fUpê;Àýþx›úå“6œ”'7å—ëcCܦ VÂ3 רrUõZ°qúMG^B­æ³ðF}8›.ˆé,PÕ o¸•e œkæS:j=ªhÈ¥:Lˆ¥E£¸W(Û´-!qN0L øÍÊj'häƒÞn=5Î=Pñ§Ÿ ¢0o\ 5…d¹vy·IÊæêOÚHy"–_îÐÙ³ÆÀà¦ho;lLøàG°¨ÏOׯ|†óÞ³'ðÓ#¯HÈTö‚%5áo÷*Eš•F •Ÿ.îà½ûNŠpZVõT`ÓøVojGAí}¶ƒiTÕØë£DZW “ 36–”q¡úÓuþ÷Ýnýï‹ý&€£N8'–ob”£üÃl@4ìÉ2:˜¬%W×GŒr.£öÈdt$ÌKÁær0$”cHóIOI5Z-”·AoÐЄÎx¶Ñ¢j3ÍP›gê2nx£Ä½Y"3{4õ&2êùê4®ªöûÎ/B¬9q}‘lcÞUdGÓŒs·ßÄP_%W鯙¡Iž»]q"p¨u©JÒò'QhÛj`¨ v‹aBùp4;9úùÝT’ýFÓSøùÊ"VA²JjÂ(8 ‚¡›M§¯¦§ÇSÃT,³íAæK¬'<Ï[zF]M¹Ù¨“n¬žwQÌÓDa +Q‡ñ[AZ1Ô.àAKª«äC¶s= ¯ôUŒ~Äðes'ë3¡Ùùdí)͈=B<ÃIxéáéìÑâËñDkO³ò$»ÅæLCk¥ìvDæÞ¬û¤9x+R³Ó…üÙ;6îáö1\kOiÖ‡='?ikÎÔõÂ¥m\þ5ý—]qåk&u™zªÖ©Z=i£ûÒfÂYŒ†­«šCoˆ§ÆÌ€àIÔ,•(,ÑRrb+»q¶¶üÆâr„P dŽ‘‰]ŸUóÚ3ýÞ Ò¯‹IÏ×;·´ã©¤Qæ¾F¯…¿¾I™]oé\(½aꟸ¹â7%W¾/¿íTÍU¿áœÇïÎtÎVŽeÕ½L­uù.V6‹“p Tè!¡÷IãÜ#iêmH=mª¸jÚÏ·¡ExYUÝV€§|ë]f3+¬3Vê.†y®Ó¢Ôf!¾Ñ%íÊ[TÛLÁIS®ÔÁw·–-U¼s ½T½ R;à¦HvÚš3µ%%ê`G¼:ìN• G®ÔÏYqH² 0gÔ_õTAÎæžDAŸ÷e(s&Ýûò}Øû²ÝÅ)ÎsØŠFCÃeš1È8ÒDæ¼ ¦ÑÆ£Y½T?¹D)Êü*^J5« Ccx‚ÔqOµ:˜‚Ùt¾ÀêôQðæâäåäî&.¸ñ1úÛ"ÂeÖ[¼©E|ãðXJâ\1bMpéíЙÜçpA¤¬Ì"ˆÒ¾ÌcH+5(è ÕÉÊ,„=ëÚþ#zw“íÖ«¢$øÇ?‚þóep´.²o‚ÚY‰·y›­Y¶‚§Õw*~e ]ÅÈ›¾Ydë‚jè.ÜÆqMG sÇ&Š,]ÞXQ'MËXFÿÖÝa§!Ld¬êrh©U¨¾Û2]™íK8e«ÉŠ+-š»›,ºƒ{A®èÖ Õ[¥(š ˜îŠx]‚ÚÙ§°¢´ˆnª¢Å]1 ‘#Ž8à©2GHá%ˆŸ} #L‹8t” ¨(|(ûh“^²æÉ>Üd!Ù}¼Ù+ôÍŸü«Ä…fÈ!¨ÅR\¨S¥xfö+õêP.Ø­zi•N}(Ò íN¤ù™Ýv¤\¸Â 'd­þñä4:šÿvz Ig‹‹s-$n‡ØúÞX;ÈöÁÃj˜m5¶!2·‘àh«G<¬eÏ™­÷ÝóQt¡e}üÀïoðß`öØŽ8 ž¼k7Y½t©*ôö@c¾`n” º:Úc ëB Ûá2šH×Áœd /,e*¦˜-þÀ‚b(Ë¡S”c0Éô/¤â7îTÑÛª$kÇl_r=2¹ÆÊP'dØ©\!n#0AÄš€okcH1ž•2®j©yUÛ褣‚åºøþñÀ+PHd¶x7¾ÿö±Þ|Ž­ØÐj/¼ý×Í96j„ÊÜÛ^0åcq³+•{›¶^«KÞm×z P@!}<›ý2Eó·‹WgO£ó³wï¢ã³‹Ó…Ÿ^ £âý}ЗþÕôÝÑoH˜¨¿X_&µ[qüki÷ÑȘÑX6æsµÀãÃ ŽæQáÐÈøÄÀ®*Ëá{žd\h±ôj78Ýé|]‰—ÇX7(ìãÛõhJ0ÆU6œ­iËM1Bý `B -P—„¬aÓÓ£÷Óhú×ÅôtŽÊWH|•Ë›xD” ò‰5ö‡Uô÷]æôu¿Š‘> r_å U×ÎrÀ–PÅB¾d½D7Ž­ÑgÖŠØïnîŒ cïnÍNæÉ6+RœYƒ]374æ”aüäzqÑ¥ÇcvV~~U^²<În/)R+-“Û‚&`õò=TÅ‹àwì½®àÿúöª÷5ùçö„././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4395561 ansible-core-2.12.0/docs/docsite/ansible_2_5.inv0000644000000000000000000036105000000000000021265 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible Documentation # Version: 2.5 # The remainder of this file is compressed using zlib. xÚĽÛrãF–.|_OˆéØaGUÓîÇØ7E©ØE‰l’ª²÷ $A-@ %ùªcOÄÿ¿\?É^+Ï dIò¾°KÌuúVf"såyð¸ßLFÁ`¸OƒÙäé~ü¸ðÊjóK”žNaáýÙ+¢mTDé: Â<ÒM¼ŽÊOë,ÝÆ»ûêüåôÿäùº¾oƒùãøñ¾…÷ÓÅr< nFÃéÃ(˜Í§³ez Fóùt¾îËÁ¤‹/Ál°Xô£iñt;íU]ʾž&ËžôÑbíKO0˜L¦ß‚Åþ|ZŒæýéí­p™Âѯý9}7Ü÷‡ìa´ü<½íM]?Å0 ?X3Õ¯¶E¿ê‚áôñqDZÁžÏ棻ñ¯=+]ŽFÓ§eZ'“þñíóx9šŒ=é¼ ¿ôYRLcŸ(§“é<~<ÞnûRw;ºyºïOÔá`9êMáøî.ÜÞöªo2~-zÕ8=L¿öæ4‰úRöy|ÿyÿõVÿ¦_úÒ´ø2žõ¥ëéq>‚憾T~Ío¦‹ÞÔa¤Ú‡®‡‡Áãmq/t#wã^ZÞõØŠBˆ5,?÷£i1šôÖ_‚º[öžaÞüö;0¢mðäÛà·¾”AUYŽ~í#߯‹Ùdð[0˜ß/‚å4X,o{‰1F$ÂXb0NÊæ¾Ð’´ë”ÍÃx±€²  '¿ôªùéñb·ÇÑ- æ= †OË~ZÕ;²÷ô5ß'ËѼ¿væn:²vº/e¬lû÷¥5÷ƒÉà×ß‚ñýãt>êMÝ| /¾@˺ì£]5ií2 ¿öñÑ1uËé—Q/ž/?æÐ*ô¥*X<Ý,FËÞÔõ6€c_F0~NžnG hµ¡Ëö¡xñ9¸}|OŸz(àÏÓÅrÑšàËè7¹†_z)áñã_!’¡-j? ýøñëèq9ÿÖ£*ÖÞöªò×Ùt¾ìSc_­K]# ïG¿ö©··îNª|zœAõpán0þ Usð#Ór)Ó>Ð~fd„½$C÷Éøf>裮O¦ƒÛw˜=šLAg°=ÌúÐuÏâ¥~tõÁM¦Ó/O³þrìað+[,Æÿ»‡ùa4¿‡ÿ?M–ã÷&c ô1˜z˜Þ>áâÆ¼Ge“A} S!­~£ÞT>-Ç“¼}œö £¢o½Â¢=K¨ñ‹ßýh|šL ÉœÍG hèýÌy@O1x™Ê€fðcî^fg…nlpăú{(¢ŒÀÆ è‹–b欷8VÓMæ¾ Ë—Ð©¾§…wÒ½„iÙ¡íá ›g£Éø±—X'xn°V`  #ÃiÎOáû?BŸøµyœuÝŽ‡£>t¿–#ò}a´ÓŸF2¨îg´À¢±~Bq¦¬Ÿå[ú’0±¿á‡ªt1ø:ê)ÂYô¥ëé±§e1œcˆ£= ZÜ-gÁÍ`9üŒ±@uyñyú->-–Ó2mЇ¿_Ƴ¾²îoO8A·&õ¡•õ)¢&µ™ï_c?jísÎõõÙ¡>l Æ£ž e9‡_w£yo›a舓ö¡p½ÇýoýiêoÔqeùÛŒ¯ ô¡ô©·Ó~´ô³‹hêi÷ÑÕOo½xê˽þœëË52”Ã)Úñd¼ü­…ËÑCëºdu³÷Iøå‡½}འwH;ÛO¼ õÃ02ë§Ç'cœÞrnŸ…qÉü·Ù2ÃeÙKU¤zßK_ÐÏž ®4xÀø³/}¸5÷Ût~ÛÓØŒî1ê%hô…ÆÏâ}‰Þ¼!KÑ!$Ùnׇa®¢÷ïqú÷ðG«Ú< ßVYö\ЮÄáJ6 D“~*QåWÎñ‹7@ª÷WBe†„&[ÄÕŽ¦šgü÷‡p½Ž’¨!£ZëYiÉ¢^‰¨O£ýQÒ6¨0ò²šâdª—ÂO‚¡Ä,ÖÙ!O¢W‘YÁ&¬Â 2—+ô™BŸ3øDá€Ó½!¥‹¼÷n€â ÀØZGEoãuwµ qd±L>2ù “Ì>³åã Hx µô¾¡_ž y©ßë8ƒ¶5€kR@0$—ƒ<+ª Ê°RFÅ6„V3Ï’xý$Q¸ ò"ÛÆ‰CΞ¯Lq„û(ìW™/„}*죰τ5gÏ0*3ä.\ñÚÜåöÛãÜ’Z·±®2Ì¿8Ýá/Ÿg`oñƒGÍK¨­7aÝ9OC†›ä™es”wç^”73%Ê5_#¥# «*\ïÉA¿ø”«¸zóf þwƒÑì{Öï àƒª¢l3´ÈN @…\Üd‡0N ×¹uðP’”ZsCŠC7qºñléU™7Û¿•ðÁ$^Vx_YuK8…óf °CÆòUÏV%W«,‡Jp-ƒh…*‡p¡S´Åø)k›7R!ÿ&›ÞÀwyGX¨có)˜}õб›±ô/ÍŽEô(,§sÖ—üÀÇ>?x+Òtl~€¯ðˆ±.ô2wC ²Žð¢ä/ØË€èáÀþJ~Œ^+þ÷_äßÛõ/²Cb`!NI˜B’%®dÞBé D‡é;(ç/˜8ÞD)ÿôY Ew50+iwGˆDEHbdݦÆ,Æ!‡†ÊIƒ°^*FÊ”àö·Iqx ‹( Ñ$¿ŠÒ}J×Aj¢j^Q‚ð§ˆËxú/ÓI¢ˆÉŒ‘°\GiXÄ¥•ŸÈ?0æ%.*5ŒËuæ †cïK}Ax¬ö—)õ‰(êÄ? ÀÙpPQ¾Î‡cŠaûe¤<š¤eŒãy‘ªXŠŠç.3ijñÐ#{‡¨,±>)Ȍ䅨ì·}Xyq©Æ+úŸÓì% â²Z,½—«1­[ÄJc’l»îlì2BcÒn»V› ƒ ¥éWÐN ÷aš‚ñÚÄih!ÌoEOßœèûñ|„L‹É­>$?J&á4È?Ñ'?¶£'Ó”ôo‡e±sT´ùF&Uéßú𓥡oO¥ïXüÉ&"×ë›t“(3¦‚“¦ÒšGŽ“ÑçÍ>;O7;Î/oæ—Õ¬˜Éù’¦…dsImRmnW»{À TðÉíÌ\»­µ~Öø …Z\¦V€.xšñS+|²¼°¦Óù~¤["K Œ»Õ3U­2é©Þº¥MBpvî:¼-£õ±€äBwkâ]þrön‡9gÍc‘Œ--Ya 7ùr‹Jè×û+›˜³š²‚+ÀUàÞ¹ç¿æ¢–l`lß;rؾOϰý:…í{ôÛwî ¶L/°ýÙlÿ¨¶ûG7ût±‘L÷Uè<©Ù*&=¢Ë•„Í6ô¦Y‘tƒP< ¨%DVæHY*åÔÃ^G€ÜØë¸Ž‰v:vf‹Â$5b¢ê2„úÞm\àÂÝ¡ §ÙÜÎDÁ)üE¬— ˆ×Á ú(œý…¾Ìe6¼MJâ£\>ãÂ>¶6cnTÃ{LJôò°Ú/ÈÔ)/Aš˜0e}/étEŸÜé€]HÁO# ˆHA…oPÂÑ“.\î_qëâ'(v·àÄ+YµPºL›ÝQ®¹~IuF¸äµ†@ì›sÈâ¡É»S¾F…UDÖìëÎ*lÞ‚ˆ/Ešƒõn6ï£WÜçWÞi6ô¤®³é÷c»Á€]™’Ÿòï?’lªÂUvÆÒ‹‘]ºOÈÆ…]PÙºƒéb@}õ¿ŠÒ0­‚æHÊœ«h§¨‚š°ú”ÕGVSµ+T¶wÑR@¢R7‹j] îâ*t¿¢ZÝ ç¨³Ôµ‹ëmøå¾`5tuv…¦õÈïp{š`$U/[g‰­Ÿ~åó¨ 3àè˜Å‰`¥ ‘ßÔò’ü­Ù-ó0 6к}ômR TÈåWóÓ6ªQ¶eÍÞzÜ8 µ~¹‚˜QS5•Åú7êRf7€«Ý ¡¦æ[?ÒÒí"›z˜ ¢h“A$̼¸OÆTÞÖù¸öWŸ¥KO«ºiO7Dc*Ä`ü+±œº¢IZÅDÕ$þ{C–šð&_¼$Û‘s&@?ð›O·ìT™Ù$‘ù—$r·H’d/do²Q¸!ÝMuÈéXîÌouùD—ÏuùB}ÒêÛt>¹ æ£Á-½ÿaF.¾ú ´ÝÁ†ÌÉAë@Sßaw·½Â)¿ÇÔˆŠÃ*}¡Òg*’Èæ±5ž¢ ¦l/á&cÃv)JZISj—’ŒãË]B? Ñùø3Ùª—ð­ì#,"Š`LmŒõ_ÿ‰Úáï­“ì¸q«œ+Ë/¢Ä'YOIâÒqCÝú]× !«Üj˜ådC.ÍÀ`‹µZ³ð'º»õ|`¡€®oÄŸKøœ“5ˆV_ý šrþæxÈ?ú>ZdÑdÑXt}Ød9 *íêoPª«¬Û“ 𫌭MÊ÷Q’_¯zoR}ŠŠUVF×k?Y´—|ˆqv¦¨icý>y¾Ÿü>õžÑeÖòqãC¾–Ï"x„z@©ÎˆÉþ³ÕP_„.›¡òØ«-®Înn“õl+´™<…ǤêÕ¦¢Ñd”V’>Œ­ZôÃX±Úg›^Ìh [L’òý¤çí æÈå}Z›ÕgiÉ9kmHm&c›x»íÃŒ¹`¶ä.“Ôoê]:Tí{£v}&ãJq» ŸLí½›¼²¥/ yŸðê Ði´•ć¸êÃPbQ_Ò{hz©WŠ6“1û¸O k£>fÀQW/¤ê3TJð¨å:÷£×ªý°ØõRj5F£Ûªw«5•F³åÞ§ÑþÌÖTÚÌö쬮Ñh´Šzi}‰£c/ê-º{  ‹MÖ |Ôc3ЛG³‰·´ _û‹w4}&ƒU|ˆø Ö•¶*£ÞòËÒà;î%ðºì†0ÊÇi¦Þzw“Z£y· '“6eO!°qÖš¾[ûnQõ—wÛ?¼[3·†vñn}ÄòÝš¡§wk²Wï6®_¿ÿ`tûn#Åý»ãw´=¿÷[ònƒ´ò=Ÿã{öß§¾;´ Û bœÖbsJ}?LÚ‹Gˆ6aÉ ;çJ:4îÉî‹+4&F\J½Pï¶¡×uß¡øÐP\¦qžGWåBÙPZ½åÑ5«†F—`­Céɤ´3@ëRÚ̈ê»^Kÿ¡×"{ý*÷½~‘I¯_cÙk­®z­Ñ§¾ªò.LÂ×7{ MéÍFš¦û1¹ÐW Š0]·—¦ªª LSÈÕÙí¥™ÿvL³žcë³[,°gKÃŽ•£slJv«xPëXöf’©kÚK·n8Øn“8íÃCÐ'´Ù¬¡ÿew§än0·™ÊßÓ@\Ñ5«*gñÊ-ÜÇ´éÃb\ôÚl3ÜsßÕ­Õ !÷Udq¥è³Yì±N‚©–:‹¯¼|Ž’¨êèÚÝmê:-–·ïYtðÙ'IŸu„(l·ïÒ¬×tõf3n³ ­ø&Ê{´–¶Y#åÚ9ïx–½¢Ë^í%5˜·Üþ15%þc*GúÇÔŠü)›â]ë9ŒÐo…# ͹ÍTþ޲]œ‚3»¸ÚW~•=G=T¢U×Ù°Œ;ðOQÏùH•šåæò÷4RFa±Þãü̱Úg=ÔBª«³Ûc¿«pWöfTÕi·œ'a…§Íú³+5Ú­öYg¸Y»¹ü}TÇÜe¾ÌÑh£º¬–hýíËÓV·æ2§èdeoRÍÂ'|m§‡Š·6™è§<Œ%ÑcØsŸ½v})›”»L:i?Y´wκioÌ rë÷©5û÷©ïåûã©ßò³œíTu –朙$µó¹¦± Tn¢´î~VMG¯ô–©~L2mfS»"Ì÷}Y¢Ê̆:â3ìXmdeo¹FO$͸íº=ÃVÜe¨{ ÛƒµÎÎæ µ.G5ã¼—ô s–ý¤ªÙSXôö]63›«Î2ÕØ`Õ4ç¾Åêl˶mV‡ŽøÃv3=ò9fý²jì-<$}Yz3ÛØ¿ss¿sƒqzç{üwEXÃÎь弣lºÂ&PÑx=ÛmõgİݦfËå@ÛYæšGÚ]δi³yª­fÕ1¸;ˬ1´Sì:œls¶·j3ár¸ÍÝ’åx[ÓjçæåsmÖvA)»·|;ÛZ[,¸rs7cÚZ¨Øë<èælÉRHô´Dg$äl&2›Ù&G<B õcGUh¶ˆ«f>Þà”D}9WÓi³ûÜ—9³…Îa“³½Ù€Û`ÆÙJÜa¥;D½Ö”ÓABg#æ“cŠ¹î³„Î¶›§ã„îfL ëö:gñÏ3W›ÀoZ+Ÿû5‡úŒö\7Z:<˜í¸ž`ì¯&žqˆÑÙ¨õ£j÷ŒsŒî†­'UËÏqÞcM•êÌÖÎ88énÓzt²f¹÷ ¶žTíVaQù!ýžz2«©´Xò¾ŒiÇ6UÇž,ØÔ÷ 6§7ÝÐ1ÔlôèÉÑbÅõ §»GæSœŠÍþZ {ƒárTÔÝŒÙF…ci9Íi:Û1Ìh6l¹OhžiÖ6©"p˜Ít·jµQö6¬lNdJKÃ÷ ß¾ç`õË{Ω=¼gè7ÏfñžýÖò=›ª§÷ìCVï9¥¶þC¦¢÷œ“Ù¾ç$Åþ='(â÷œ,xþæÔ“÷œ(ß9¬Þ9F:¾sìrz‡nüÈνšW€jX9:’íáø&UNç^ºç„". 5”5­³FÕeíÙ¬ÿzŦoGêwZ‹r1aXƒR­8­?¹Ù1¬;IK®kN.¦ÌkMÔ–ÃXªËDcð¤hîÕt*7(N¢0½R+QÑÔì¸ŽÓ©ÞØSâ:êëLlšš]mºTGMÕ݇:µn Zt+E ½ÝK!]z÷M¥ŽË]šãÍƒØ Ô»-st)¶L*SK]ú“V·åŒNÕÆe jƒMòwžî4¢*²Yé^Jè´ÒÔMn·Nw‹wêÏšú—'®ªAù±Ø][C‰Š†æs;ºLØ9˜­s8:Ù6˜5·EN;¦Å f!‰¢+[R“Ös–G:õÛ—E¤µÞŠÄºBm]_ærpšîTmÐ[„kŒDW×¢–z6ŽÅ•}üÑ ³s.»SimHõºÍ_wé6Í[«úϘ³v3e«fV]æ©;-õÆÛ7òõ]ÛûëªL–Ê«ƒrÃì7Ñ>ì{€ò¥ïôCßAòï–ä©ïO|ýn°Mß㮨ïÑÖ¶ïÖ¾ïÁPÜ÷ åù¦†’¾%‡÷%d}‡îeß‘[õ±ÍñúñS]é`퓸„ܜťÝòºˆ`¼ƒ3éºxË+·ðBQÙħ*nª­ØD„‰Ç*ïˆì2}\[Ý\´!×îôí-ªíö•1¼‡}¦ï ýd77hËnJʪˆÓÝ;:N 8û/uΪœ"í¶Úoæ3»®e <˜ÚŸñ¼Û.ŒÓ÷ÈpEqˆô/ëüÝ3ºˆž£·wø¶ˆÞÎOê¼µ ³ÖÕ n®sêÜÁÈÞ 7^zË;MW›)÷öYVmÃm /?[||ÿ}s˜Kp1fVÝ9ÈwQÝæ3ûw¨×§3?öŽJ›®P×⾜oSøÜPx©¦æÐÌ}Á¾Mgc™þœúvÅuù³šá6ݦ¦D†ëg|°>Ý\¢x¥ëê<7jÕC%›ÊNˆ¶ëlœu?Ú¡Xþ¹lg°Þw¯«qÚÐrw~cöÉáÔ¦õžgM‹Û*¿M—^¾§mj¶šš® Á¦e¯iqZ`·žá7«êìÝô¹,¡[§LËž.kæ6…IMË"¹U—aiÜ}UܦÕ8Ëå¾ nU«)ËR„Ÿ^0Ó4¹Þ3Ó½?=Ö£kɸM» ûñ"…5wœEMQûÑ0+m°ëù/›¶£®Êñ—›ñH—Û*ºMg¥+*¢‹š"§*º8Ãêa˳} o ˜íº-ƒJ·á¤Uu]Qya´Ö0~ôo®ŽÃ‡WÇ ·W‡Š_®ù=\ÝMÏ®îÿæW·r‹«ÜåÕmÆÓÕíbxõÄÀªŸQế!Qtõf{õèeõÈ%¾z€ñÜ×ÌJrõ€âÐcÀŸ]›—}'U}õ±~úteG`ÄzLãê-ØãMT[˜æÄOqº‰^©>ù2¢O%4ÝòtïÓKé6Þ›ã!·/S¦º!Ló‰ þ¯®Q\z®F"ˆÿ«k<ÅÑËE‰ þ¯¦ñX„XAUUœ²€P^DÛ¨ˆÒu„y¥›x•ŸìV˜2_(“9¯½#+P^1R¾Äø hã›É(N¿³Áò³f Œešë2+R‡jj1šŒ†ËñôQ³÷²«¨Yβ'u¨ö¾}/G“ñb)ìmb\Õ[›îágI? O|ì^bÑobä “R7ª)òúƒCø÷¬Ô(´k>QÛŒPƒM¶>"ç43|û:7¯·jªÐ¼ ÿáP6À¥›@±»"úÇ&oÞ |Ž6ÞߎQ‰Êe¥&çˆÀù„=7q~  —­Q ¼üï¦ó!Ö‚Ét.,™Ã3Q/¯½¤Çsêžü¬©6øTäöÜ^ír&Jÿ©ë¥Ï»]¤—‰ÒzÓmv™VÄÿ55ÆâDAü_S#yÇæB¥T–ý[WÝÞï´èmö;\#¾s™J"Iþ_Wª<µp®V&Jÿ©ë¥Oz\¤—‹’šz«c~¡Z"‰ÿJQnÂ* VI¶®]½»‰N¬…¿¢$Ë¡» häYŠ·…hƸFŸjäMÆÃh9¸,Þ & ûivMÛÄ¥¹‘Ç©Þ&!ý¥¼B9«º¿-„ꬄ–û'oWõ=Yé3-²«ÉãzÛ2öBàŠ~6žA_ý8~¼—fÞª=ô£qZEE^@³XX=ž" j×: kD¯ê‘¾”û(I‚è5Z+|ñ2D‹¯h©_¨šÈ+JË} &¢ÏÏœ‹&â<÷‹ÏÁ`~¿Ð àã”E–\rÒ)u¢F=Ñàpú¸œO'zZ7ð˜ë“Å€àv<×@تÄYæ%ªáѯ£áÓr?5“P7‹8º¦P¹ÕØ|´œG²h«ì%rÉR§› ¢<Zâ/]mð­0.(BˆXëêXD¼=Ö-²ÄOäIôl‹rY΀Àn_çö¹.ÐÁÂ"I›RDëhƒ®:´Š\ª†'ûв¯,Í›‰´_¼o{ÈUo±ÏŽÉÆ{³#ŒOç+àŽIÐÜNûÊM[¿=úOM)Ûž}V.Éþ­éÅ Ø(%bø¿ººôR˜\’ýkÖË6‡^®žmõt}5cdÿæ6¨ùMcû,†UasÃ}j«òLÿôÙo0ðÐ'`!Ö€ûì¦ë½ ëSñÁãoÁh>ŸÎÁ„b³èÁVýÒÈP\bb® ÿ_?a' ‘QX¦AžACÛ sãd`d¸!*‚Öòx*³ç{aî ÕŸ.¼ÁâÑ›A*1¼JŽQµ§ê´\甦Eµ-uã2™ ‚ ³j0ò°g€QùMÝŒŠÚà" ÎN!$–5˜§¸¨Òèœ\Ó%LP‡,#žF!P;1jlMVÑÐ á–ü.=üÍ‚¼G,G¯¢÷ ÈŽðW'3¿ÄÂé>¥« j¢zÑ›"ÁçnŸšÎ'±ÄyãCc¬ºíñL~f8^FžÕaÞiÞ*"‘0QRa®‚j*ÐñM(•"Pr#Ô3av@´Ákƒ&`¥NhR#ˆ´n;“òo•£ìÇ-®£’ô/ä©]b>=h¼ŸÝ¢Ç³Â2:Ì臊—1Y§ƒuN©›\p€ÕQÁ®çï’½%$ëUtÀ7b»×¥mNPMó4Ýò’¥~s|ãGTQpöúÖnÝÂÍ P*Z÷ U਋˜4¢aºùżƒ?ÑaÑÿþù?^XÑimlѶÀã ˆ¸·¯ª|ãýøñ?<©g&Øy^N>qiç˜D®žHÖ†Ç$2ø€?}o”’ˆèÓ&.É^È”#ê ðRØ?z0,¡uú#|î@õ\ƒò,í?‹",É/PÿŒ?>°0ç•;s¬â$®CÆ–i1)ÂíR<¤Æ£üâ=P\Oœ0* ®:Ty¸1rÛ t”°€³ƒÍƃêÁf+¡"É#ñp^uZ©[ÚµlÄÈDd#FëyVÆ8ÝÒi Á*mI’ê”Le¾AõçÎ fKOÐyfù¡E~hšÏšÝ£+þs×;,€®¸XïãSÇÇ¢ñ0C4M¢?ÁÐŒ8ñsXg —e´dø4²4ÂR=d0Æm^%þÂEtpšÏ]]Ê“ÃÕÅq’pÈáÇšœÜ= øŒ"TØÁÕù1õØ/}aa’ÕÇ”Nf¢|/+üRÞp9'Ÿ’ùT!Yvª0ê8É2u &¦)Í>A¡-5C»fËnD¤‡Þ•Àiô¯˜ú!,à \w|ÓY†>¤ ï(‹t o--K²úBJ!ô†q¹†`b1 6*Bi©e³”õ*«¸*Bø®ÕÊ @ðúÀÀt—ui.é²QÎe³”ÍåkÇÓC‘—†/±¸KèÓ»ºa‰k¤‰ÒOú›Mö'm^TWÉŽÑm‘àáWxJ¡¨:UÃ|Q©Æñ©cbŸeßA;–zÑ+iÚHæ†Ð’UÅ‚©ò-]÷Ñ€¡žÆåÕ±ì@ß`ä>Á§é‰d¦«*$«’ä7FZHßYšÁo|KåCØ‘wµ|“y†ùµ€à‡üÂXˆÎxc9¡!þ`Ë_®‹údR|§8$Ü Ï8Bvˆ×Á:ÉŽ·Jª±rd¨Ä'YGI¢02dG×Ù̬[áD™ºüXÑW‘L>Rê=ò{äµh Òa$tà01ѡ§#W;ë¸è«Ô*¤6ñ¸\¨ŒB¨a i–|ñ±#wŽÕâ¦ß£MwjbeI‹G5º•2.-10],>+|4F=VÊâŽ%OŽ0à-? 2¢ÊˆL9á†?É9Ü”$`¤_5+Ù¨F¯Ì£u¼BŒýàoƒ‡ k&?„§0NB¾5tRÝó¾›huÜíÄzWá žD¶bŠ¡ÆoOªæ.^‹·û Q@&q¬L”L'p4=Âw|tWx{óÑb¹=&Ð$þ:Lê„g•+ö¯‚ZÒ4¼2Ù†90F(s€6jh†d…Ö†{„làiãzƒD ¾ÊÑÀ¯ÛX>ÞÊ$ÛåAS¢îÂÑô@!¶z@ø:'I×ñ‘$+.JmÇC|ÜD0MJWl™N•Ç€Y%·ã'Ù{Ë8m¾ˆ‰æs*†]HñÆÀ¤¹c Ûü¬•\‡Ñ6©sÌÚ"¤8d`Ò2ÐmÖ1°Þ¦]1,*Ë Dxëô¢Î)¡ ŠŠW$Z@"4J· #»«rhÈWÙ¦‰["Ô¨*J`A:BžðÜ OZ×Ja0`6T†:­ yG%ؕɪ°Â$Ab¢ [ÀÜ#©Àu£W :tçÑD's‹Ó*Ðà.Ê6«s2À  û«2ÔÝSi-ÞÜGÙíÊü> “jÈR\OvBo’Ðákuü±ÅÏ„ïñµx€[&:7>yuÔŒVÇË’[.‡Æ<¬Öû€na9 °AÐŒž0ú”Ñ⊦ÌqõF‘YÓNØÝ²y ¯ ¾…ÍR.Ÿ™Ä‚IP2k+§ó¾„ö¯Àú¸Ô~§š{œhÇ]víjµp+hUª†V%ØÐ.—3!àF- Zˆ‡6›Â­þ4y%R…¦âT’-(Çù8ZË_Æl§xCâQ§½ULCn`«9aà°úãFÂÜÑÐâu‘±¯ß­lÒ¡‡êKƒhqãùXûÙZ8ú†;nO¢Õ÷x «Ù#£:á¹h7DͨÚ]« ‘½aÅPåtJ{NtT1¦Š·ÐŽƒ•6©†:—Á¡ÝÞ1´nòçØµ¬¿$© eªéì˸#Ó»·ÅëL $uC¹ùÒg$_|¦Ó(G¶éƒÿE|[xŒ®gþÈ€‚m¸®:ÆNØÁ'™? ;K#7>"O$)‘œ‘B€jäHóµðXsLæq°âKøÖ µÁ«€ÍcŸÑ4¸RD9¤¸pÑêžàoV¼r7ÀÁ!ž]vi\DU¨‚Õg¬~­åhU¨8"ypoeæ-(£øw¦UÞcµÇ; ׆kZË5„PEœÑÃå'òOR l]| ýäè˜úÝLrÀþBô/1ÞÚ¦ßø…f~w­Ú¿Ûjöý»¨×P/öx9ù®ð‘v*…ž­ýâ´¿@E¢ŸÛЬŠâQdl¢âŽ,Åé·NŒ]’4áô§¯pª^XÕéµÿÙð4 ²y#ÉV*îü=[›h‹£vŽDÚ…êN“/™šøu%&èÍVޭਣþÇ1:FgVùMX Ý “lÿ†D ŽlºÃcdô‹Ž^ÃC~Á‡¢«ñ¹þ‘|Ã/æ;°“=üÇò{ºCòŽ (›¸€î2`[CùBgŽuIJœ”“¿³ ¼· æ¢U<àÿ»•þAeååÙ9Š¢>}ĉžþù ÔÄ<Á[lè`˜:Göùà½ÆÍ¢v4á™òƒª>Öï»wQ‰BÖÈ}vÄëïA7ô Ø'¸Õ³4H‰ÍZ¢ Ù+ åb%Vþ¾³õsT9â2óKhå_|Jo¢«‰âPž\'³ø‹GÓù ‚[ãÝ£€> ¦×`’짆Óù‚̯X!8X7Öl‚9ú±x™¨!&aÙÏætã<(Ât•®3* A›ŽsŸ’Ô•†œ2£‚W?ŒgK§óN½f‰m­Û°ìñÊ#ÄøaI: 춤?Тnp`\uÇœfÕ heQËPEH¹el1Zxäà<íE³Þ»Âù(´òàœ¹åAR´ ,ñ¦¯û¨"ÙEn %Yz‹Åƒr7)&áüO(=ˆô"äà Ñ? H‚Úͬèñì2:dÁã- ›*ä7·rP¯ò0.HeÅ1ÂOñWá® ð:'çžß棼×>1ùeH^dÚx÷ô7Éñk‘‰Å—p+_LèÌ+·´T_PÕüÑÄDœ¦†gßwÝn”á7 ¹5¡uNQ£Ùìê”#›f„J†Pà Œç(ñƒ‚‹ ¾‹¬}È¢óÚÆ&£±P¯lT˜­Y5?ªå‡ÎwÞQfäÕaàUôêeºˆÌ·hE2 ð¼ž7gW„ü)§—×¶9;6W÷;^¥å¥J¨£~§¦1í­Y¨p¨Úxvá™Ix?`Tâ”䘲ÂõwÑ`+ Ø-Å¥ƒyQEQ ìJ cVV Rê,9¿Hï)â«”cv£¶÷Ý`¸øþ£K™©,Ý¢Ñ:tµöѶ*d‡6£ŠËˆ„ØâÈE.8Lݨ#W0‹û¤ø…çn¨mb5Ü ¶òGk]âuÈäÆÈeÕuCi—˜ÍÎfw€s´:0gLŠr§¬ò ²¤7°J’˜¯ÄVšK¿1°óˆNÀˆÅ/qU²/øiYDk¼­ï¼O×*WwGá³|´MU싽}\€;H!÷*׿WMî|ÐÝpÛ€ŠøAN mؼN9ñs-Ù•¸DRÇ ;gæzC¤é²ØóZ*P²ML˜Ï‚Ö Ê§ÞàqD*˜í1%³>8xFŽÙÄj6KÎ5±Ü£ˆïWHi>š‘Ÿ¹m Îz¶ª |—šXk˜ô 5:’¨- €è0NjÜ5œÚ@ Ì—è Æ:˜7û%ÎÞyñ¢]À‚L½„Ñ øžJžS‘"ÄiFº2‚`òÌ|Ód,)&%›‘.M›dá†ßhΧk•«Vù,oSûz‘ ¯Û¯7€šØù˜»Ñ¶á¬5T%ëÚàƒ¼Ïçä¯U®†˜ñá˼ϖümªbùËÙ«I¹lÌzöŠ…´òYioå?Ü}¸ KÇ6Ò$R©²4QªT óámñ·‰wËÓ m¤§M΀ª ˜€R3Lö¬I $=Åb‚È?ÊåÑ3êk«l x×RoÍ*YÝågnårk½7Ä/óÃ̓.ìõ Ý€¯"ϳ²ÚÑÙ•Û*WCßäkào²Hf”ÖU᥊sj½EÊê¥þ׌èí_B~\áV9r@T–ç|m¢u/tVËg`TȾJÃUŠzí¯K]„Ý uÞzÍŸ ÈÊ Uý‚ 醔3²Ý.Xƒ¯1Z²Ü Œe8§xt+K=×uÁ €;@n[Ïm¯ •q?;§í‚5Ø£%§ ÊXNsŠ%§uÁ €;@nkkÑuÜäsÛóΆ¼­76Ý]m¶lvÏ©F¡&TÖT[*‚®„U¥•nT€óú•ŽÅÞ“ºCߡલ˜øVýsòÑ.YG«qÚrÔ Ž[”$Î 4òV½½ îvÄõ¬Ú€w•d«³À*f¤È`ƒ‰4‰‘üRÖÀYE’Æv9¨h«Ôu^@ã­c$´&<’ÜÈ=’ªÂ`kZlI‹<¦™vß,î(]ƒªsû‚»Þ¦V¸³aþ°czJWä§ÕÁKÜrq¦Ý…z9ÔV[ „¬¦ž9ñÝ.biTZ °Ö¥^4ä²¹HÐíðU®žå¤£{…è±%ó¶ï‹NÎ^\”MñVé|¯K*ŠYñ5ÖºÉ,q½‹`\üBªó3Iš}âw[µº£©«yÂC³.Aï‚»±­nñ›¨>~€`-^“wh½*ËÄM;ÝW…;I•á†O¨bÅ !|X­·Aù“k[ò£ÁÆ´¯·>Mæ^KF¹,ª7tën|Š“œakDwÅ+ú®x©þgÏgš|1ÈqBxCÍcq³»ÒÊš"rŒly#äaY¾…Y'ýâù+b¨Ûx‰ÓMöRžödz‚0I²—  áOro¾¦Ï˜Ÿôö ^¢ÄG%ä~ïf4œ>Œ‚Ád2ý,ðçÓb4ç&·Ixõ³¤?ÿ»(·àANm®Uøg©PdÄê~$êöá)†x: ”­¡í'8j'7¤ _Q{©É«‚ªÞ˜ >Íe^àc^€8ØfEpâ[,É^Nº¦æðp™®‰c++_¤ù ÝÚIµgÚÅ®NRÿÈZ@‹wq„¸;µûÔ±…™Á@¢â6Xídq]H¶œ7ã{§èp/?5L¹]ž65qªHjÏ›jì¶NI³ýŸâ!Q.Óù–Q‡¢>y¥272ÃòŽ­*Cž» »O¶Ë4ñ‘§5CíȤE…r>eoÉ7Yy!{’µˆp¯ÑŸ½g~£$󀿬8wyêÚ²Þ%¥zA¹|•K÷àFÙÍN©ž¡ ª :?ºó÷ó€¾ÄKKKwj“–î¾Hfƒ @4"‡ôF…a°qà GªÃb3‘Ý—xwI€²)Líún«%¯iÝèÎ= ¬FègbîkC)sVTÚ˯›Þ¸£SÙ èÙˆŽP$:¼ÁúV|e¢vLÈ´:#%³ ð ]‚{\Î<:“Ù’qe¹?#ßn*¤a!Ayu±ø|«ä×Ö‚®*ŽoÑZÙ øÙPt„4‰-6¥ûªß ‚Ø(â…Ë¿íî¡p“OE§ sV?á£5ëJ½UºD­µá(vÕ!Àùÿu”VN‹Q@Å ¾dÐêÂÊÉg™¦·Üqí“@®Wç­ƒ4d éÊÄûåƒ!#;oG6²Öq©7%ëJó«CA¢ ÄaÅÃÂ\£¯vÔ…¬€X¢@âçÞÏ‚fªCä§ïmPu%VÈ|B¥ ýO±Ä¹#f»©~œ7Q21+<¤{1ï]ñ0xŠ#ÍnL5V'éhxªÞ°‰Ôf«ãW—[ù¬ì*($ûµ[ùš‚J>-‡/Æ-»âØe³Û"¢|½+Æ$§PŠýú˜œfÙ¼ÂwýܵŸ·E Ž4yõCªV°þ5<±«ú(dÆaDÜy0®É§áSÅ)¬²öÅä NЬ,•Ñ Ÿ‘lbâ¤`ØåÍÀ®"äª Yª ?Ü |¸„È8KÀòL„eÄÒŽ±lYÚPâÆÁfž´&bŠ,>°˜ár bwñøA  *§5jÄw·ÃÁ÷6/ªuDë}v†5“Àâ#‹Ù ®ÀšïÀà†Ðû0ÙY¥g"¯ËÙà#Ÿ|v„ªVG„¢6oÎó¡¹ o+J ¶ãæl’Û„ ¨fl@°bCZ [šm\šV…MEƒÉ: L±ÚG"7œ‡E;ÎNÕyU‚¦ãÉ©AH\§4­Ó™¦©Ìú4&´Ný²t} Òì_˜-Çž¯Ém€×ì1 t²|à KçGG®sEMnE sCŠ˜µB‘ ›&Ò°9‚² ©Ãhµ/ ³+n×IŒ‡6ËÒ †MHÅnÈ¥Lx} bC‰˜&âEôã3–(¿nÇ ³Æ[ƒJi „4¹ñ526õîéϧ8zqÀ£1ª`(AGBÓ$ ú›d A耛!À…aÍË·2É\föMü*J÷)]‡¥‰Rtq~$á=%yŒ¤ÎäÕʰȎUDïWqÛàÖ Jj ¨$ÈL$‰ìj2¾5໹É΀nŒmr*ZÎçóàȧã6ªRÎp³â ¹÷HÌ’zƒ»‡ºyVTg;P2¢G¦6èB‰ÄI­ “­Ó¬‚ƨƒCB¦)›Pá7Î:ª%Ïö/piX¹¶Ìu^ Ð m´Q0=–´y6ÕGŒü]ŒY‚£ŠšýC®´¼·'#‰–o–˜À·[\á(¼ LHk#"::‚Š$Ç©¸³Õ„.ÛVøàh@Ï«»`4JhH‡O9jxuq}zˆùéù–IzìG]߯i“ЀC·kx¹Æ(ÀÇü6?ÝÒCÿ Mô6ðv 6qÖñ)g†5ö 𬰠KÕaMz@Mv !Óþ¤MÔ«'¥Ð^ÅøÑ¼•Áfå‚MeÔP½•þfUÃC˜ mÇoÂy˜lµH|ä¨Ü&œ®Æ´ doGŸmýÒ(?Á•ÃïΕI !‰ ò0<âžï7ï&ÞÍH ½ŠX½ ˜Ùæúë_ºo„ßpʇU’­Ÿ¯ÜÎû'ÜÍ‹z‚¨(p] |K7R›w΢‡‹ûD…/TŒð§÷™ý¤f`Õõ V“O±AÓEñÈ$ Ûás‡°y>‰ŠB^\cyuHxƒíÆ[½y‡°x†fk6^–U%1®ÊMÇVfà`¸B7üWŽÞß,nAéKW¯¥pp/J¿„?”ãŠä§Xþ%÷t’´«"{)ù‰ î­îÛðÌ‘£›o¼ÏÙ‹·É¼1|ç˜q ÛŒ7Ã?8® éuà íÿ››û»q'ö%„Ÿ(ÐÁ´//Ü'<ä}(Lì¡odSà)7ä Bœ‘ ´®¥Yn|]ÊÐmA;‹û†*•2dx»*€Šïȱ:rǸWN1^ì,韘ÓI(¯³x,‰|>ûXÑš‚Ï1¼B™bíä<âìëú†GGmÕx8’&j,ý)ëìüŸÚ= #,z¨1¯º7”÷Ãê÷³¿×Lþ.ÍýަèSérÖã;¨d|ð=À תSÝ|X‡ðO@óõÌS!DÔg¢ÃÁðó(˜MžîÇšRkYž¥_-QÕT0œ>>ކËñ´f•|®æºƒl DbF½Á“º¾àƯ×xÀ4hègóÑÝøWÝR"ìL¯0ÅUh¶–ã‡Ñôi Æ’d¦§zk—¹K²² ùQÒQr¼ô}¡•¿`RÚ2Ÿ²qÐLbÏ–xC’H)õ;”¯Ñ„½”ù6î¸x¹ÆÄUÓDþõñßü„\è`$G&!3pˆÁ^NoÚízÒÞÀÈíJ‚´-Ó”¡ E^5˜/`ŒèËáâ|ÁÌ ³Ÿüò|‘&‹¨:ÐK`Ç$Ósú˜ ö˜d±ìWaÞuc‰[§‰Òeú[fwy(½OÞþ,±Y§PÆÄ/ñ[þ<þ€5< ùÀ˜¼~Ó ÈÆÎ E>ù(š<†ÃA6•Î`0`#hÒY7—ö?? ¾ÆôÅ3úr<;fŠgîuÕîèíÀM˜ÍpÙôáù€×8ýqê¼GÚÈ*!¯q†å¤Þ­ ( YÊ ¯Ûåkf s㪵ºŠ;Ï“7¬Äx¯=6 ò–5Wàp 5h 2‡}Q&®¶—‰n§@”Ú·Æ®îÄ»»=§z²òh Mv×n#«•‘jXYj ,O½mçF‡&Ÿ†SÝæ °ZÒÙ0wyn;Aª\â.÷í °©ðîÅl0˜8ÄÉÛõs—»À3`Ó€ÕP]#âÝ~•Ž9Öd×àqr3ÁlNé%W…™s|isÄìEÍ… ¥« XYEF `lýœgЕãÓ§‚LÙ*­;³Ê-Þ¹ÚUe8I¢’üVʳ¼ÃßgäPvÀÇ´ëbD·„ˆçÆUŪ‰) ÉÙ1I¸}Z…ëÊ»Ê[GNhMÜ$¹‰š&_†9Éh#êºÆ¬£æÄ:lž^Ç-Ò/^…Å.ªœvGXøuø”^ßQ­;AIîçK7Îv¤4Pcb/I¼ içÑ£ŽS=¾£2×Q’´óABaTÇΞ]g“i² ¦¨ûø¹9Nª4u@èvÑÌ«bm?¬‰¨ ²rðð’\uÈQCnê9©æââ’0‰þpª48%(AQ±‰Du.%|ƒø£§Ï>wž0ÒyDõlcQ`áÉ"ñâÝç¬m3,œê° Hë^½×¸$4ä´µzʦÂS6~Œ-Ñ»äèsž"11kPM$šq ·Ì£5žhö.Z=sˆ• a²!ëÁñ¹1ð©(ònEÞÄPäˆBýb¿Îç³î@ÝpzÅÊ:€©1JDHðCgV7þ4}â™.#ºbÜÁX÷%|sé3×°2b/KWgXоð™¶.|;Íxë¸ëóªHsÎÔÙä1®"Þìø})ÎNTÇ4ÐxkNPZà š¬Ve‚—%Ÿ»]Œê<…޵úZjõ)lÖê“¶ DaŠs·ë56¥mƒ»[ 3­ŽÅ™c' ®nGÛ4VWhò YlJʇõ眨¹É&x)â Ï›øÜg<@´Ù>Ñãs=>Ꜳ˜<Á"^~,ð™j~R†súâx|”ìª>äšKÖxéÃz¦øòõË>J¯<…ÇTùD•ÿ ºéìEGPÜ'âLWফýáÿд›"ÞºÙ¨ðX;9ÜíbQ DŸê—æš_ï–¤.#<® Ú|s8˜Hß`ëMµôÝ¿þùÿÝBÒü˜þëŸÿÿ÷ÔN¤»œê 7ûl­XÀv*wB…)°nÑ#^@ÞôRŒÓ…_Øú,EœDP¸àß²»ÈUœäÐSˆ®nÙá;@QàÕç̨G€«g’hJãÀFü°Ž 8â“,iV9L Xù F÷%]4yMQÀ¶æ‡=%¾hÎ Ëu”yØñ’X“#‚tŸ¤K$‚Õx.Ê9¼á˜gPT¸¬ ŸË)Þ@à ­m ák§ˆ©¢Æâ!Iþ°N‚UÖµÿSãaZÓ„¿”…lÑ¡=Ô’4¾þ2<ŽÉ±¤ÇsˆaÒ¯wšV¹¤q’ªš§ABMµBˆØÇKFºp4Y ùŒ¤ RèÁdòW¨\—¬ÁñðJ ¨š?¸Ÿ¾°ž¼0ºÐO\hÙmÀÉC ]0¯~€O8ËÉ 0žª%¡žo7gd ±ÃUv~~ýZƒ¨ê2âŠp eÍqFSp¹£¢Á&`ÖJ‘‹[(0*oØÇ,-»¬«LÂ6IT,“ßZfpc úŒ)=%ÊþŽH|Ä` :¾d„¡[é599¨µ†SØåEìr­AZÅÞ`»É ùŒ=Z@y88Á­$&ýHa&QQ9#m2+`‘h«!#Ýê*9F9Ä•Óòm´à¨_!oøô‚ ÒÕ#d~ƒ½N_J…1¿ØO6›ýÁÜ/Ø:æ¾™_úÂé†2¨‰Šbø´!eÀîxð8›|í …»ïòªsILÚ½]‚­nŸ¿#~O¯ì’U YFàMV0ºÅy–¢YâR‰*<5] üWÕrÑÆS™Ú ôÆÛ7§ó•n ˜Rëç,ëb™þv¨~ùq……Ü]²5F‰‰T8< 62çÀ2R¼˜ÞÉÖÏ1Û,ùÕÌ(‘Cz¡þà-p€ ]TYLüÜw-f[ùX9½ Zˆ6«$žGø{ÄÖrf» ñ'6"'˜7Ù+ɵ«ülÿEÌW¦ <=­®¤Ì¬Æ9¹¡5=(kѱacIOIÐdwðý¾¾ÙÄ)U×@Ó4%òú‹ý‘N¯‘¬iã#n›2N×uñT]Õq› ÕT@Š&NÞã´É¢®€$}¸r"KŸ¼Â_\ìƒr&¡QœÔÖÊIµºMðNØ®—¬Š5BR_MÔ°Ù¦‡ê†"<˜XDkœ6bPø*¦Ë»€ ‹3Ô®„ât…WÛhÇXÂÔ|[PÔwb‘Bõõsóh[pjQ冷‹]Èpœlðž8v‘D›ŒŠy|•GÝP!¦U~à· c›ÎÝx)9O•Ãid©ÑµJ4˜Ð UA 9TƒP&´|aoÂsòÛ Ó­ò°«d9¥¦Òe[v«ndEŒWÈÐ)ÿ &g »öC9J7\£Ü>åö9·ÁI³ÚÖêEEøÒ‰Ùð:´e«xøÂzôÐêE¾¡ ÕØBoÜ›t†­-" ËœÅWCY“e퇧zìòy²¦!„>®÷Þ8 ü†GÕ§¸ÖÌÝ@^rkbêþyϪTl({)[Td,[ÙScd¯úiÌ¥—ë( ‹8£ëå'òO Eæ4UcåµWaœt€Ê¦˜ ÉZ–“”Z¾$iüËÛ°¡ý) öIOñ {úÄÏPµú⺆ŸÝü´(–%ƒöÌIX^@p}Cª7B2{ï›&º[¯Tàâ1Gr‘Î18vu]¢u•œg¤sÍnЪÜÂý…j(8ÈL8;i»c¹ääL‡²K”T»Dz"Kr®CŸãåéJ…åI2úO³2À ô®,jð1+îÓt‘’|¿¡¨ËÒÅ1Å÷€0?ø6B}‚zdš5¶Êö!ñI”f§Ì>NÌ‹;“»zå2r—@Û–³N\Nw—4|õûKfÀ9zÖ¸³1ôð^5¤ËS\àØÙarP›Z0Yh(iso¸".É[½ÏõÏíœQ‡”ÅÃÆy#›Y±è¾µZÝgw㉇^/tÛK¼ß¶ÓSQqŽ4X9‚SñäùâÅ¿þù?¥ýkÞD[2ëñSð½³¥›¥Ù@ß|žÛI|è\©³)HH²†„¤’YTà@×ì œ]n¢O›ì%Å™p¾;âüÆÐqeÖĪBo¬ÎjÊK»"©±¥¬jQbm„gH àò!n[êÜggfVl(D-G”tý/žø]ÓÜíŠhGræû 2ªˆ°Nt» ñ)èiºœ&)U‘5JÐá‘™{'XNç¾ œ*´úÙ/•ÛøÓ£G½ ÍéŒ .þlÊðäðÅ(\Š˜ªáÇÜVƒÿ¨°u¬!½•Õìˆæ}öDØ£Šœtð4Mi/M1ÜùhÝ;a{Çkìl/ì`]0Ÿð^N¼ —‚S5œ˜ ½•r]xÙ}ҢƥƒKëàj¹\.[­ðvv{tÇÅÍ[âu ¯êüS¯ æ7Pÿâ-¡2)¡óË‹5£y‚0l"2H‚à /:Ö0ˆÓŽŸjlÜô&Âç:¸ìP޲ †”V’¬ØÆØswý¢,ßTë §“é<~<Þn™^z±Ò%Z©$Õy;ºyºó"ZÓ'Ù.ÑÊ¥¹æÙ|4,G\{¼Ýâ+J—)a|Ÿ‰ëß݃Û[U5yãråT\Q??ŽªöÇŘ¼bb>z˜~åùC^¹H;•¤zGóùtÎ4îãÝ>ÿª‹´Jiªùóøþóþ[2ílÑô\µ FõM¿0Eåsœ_¤ŠRe‹/ãSwL‹(„g•\VVª,÷`PÑkA¶+±>~@Aí6RÕ¬úžÖÄk2™@¾®sÈÆýä1§,gËD.3¦ ‰ÚüC}º÷œ)³&¡úŒ 0ŠyOîî9·à¨m!>œ>< oIŽïÜ@é8áWãÖ¬”røÃäT$àdñÅU¥•ªB6¬Þ‘ŸTw±ŽñAºcNÆ:g<ª#¥}.=à{hèïÒÛd•'vÅ“@¤(Â7™„‹j⡟޷} ‘Ÿ B0{L6Þýo‚ê&}!8…ÉѱCiŠI²Ô§Ÿ)œ“_ÞWòë 6Ö†FC&ªúO<îX“%±Ö EÛRÒÙ´F2*”¸ªxµ®ÁD“SÚ!”Ò»—J¾Ã¢Ê£ Ã9r ƒ*ð ìƒÈeú¼ð!£îãêóqõýKÙéÙØ’‰<+Ú4UoõŒ+çÞÿ—òÖRM9K†ŸïËwED÷z[ ¶ˆp‚·gÓ]ÜΣ˜‡àF÷9ùèó"#ËÐF£Fj ƒl^·’É›Q&ÅÖ ò¸‚°ï§+ ÕOK×$E =ƒ5ŒWÆÁ>Jr³:‡êÃw¸–™÷mqº‰^ÍJ‰Êr?e“:«èÁcô*‹‡ Õù@»›‘®|Šâ Ï`¾£`Ge°+ƒŊ›šœ"2ßd@39cTÅ\%QˆGÈ ÏæL‹ªŸÓT6@,tµØRã:Œ:(´mVäè†Å‚U€c Þ 0wæÑ?ðÅXr`ñ*à»ÀØÖÊ®ó°zNÒšÕ:°¶‚–ÆÛØþ›¼ˆGðøŠ¾÷h&ÛÇonûüÜ ‹Ïµ97<$¨Õ€ÝbÄ?”M€Tá£â—Qƒ(=ÅE–ŠÖ´cSC¾ µD¯*²Do$™©W< ™—!áS¼úT”j%ç•HÖäYçe2:“Ôš©—Ȱßôa9úfÝÿ:IP4ûŒ&¹h@åp6UJ Ÿä‚×3”iì1úRµW^t,øO¤˜ÉM¥.‡Pµh›\bÊžòËK'ì7›¾Äz›¬ê‹'ª)‰ä^ïó‚YEšÜÁ(ðC±÷·ô©jäHâÝ;ö²+º5U×ÊY1/®0lMÿ~,å:æŒ*"B¢Ï•¼Ryùë¸{ì]ò$óê÷UT Šg,zøø¡vN÷ŠsÛÿIËk»æ <¡EyO¤9¼S'xE¦éú oÕÁµ* ŒŽ6¾{½¡]?)BÂOPöÀ+©P0OxJï¯qú÷ðG쑾4ŠõhGOûˆÕcñ˜¦œ_%xI÷cTu6‰ó˜hR F:ƒçG2?$éäu*(sН`CR"ñ|r¬Ë”Y³ÿ|Rê/¥‹šë¢*Ô™S$øj5ùÖ=r¶ã£‚Ã!#W‡ž ‡’ Fíô‰olÃ'¹ö‘‰zlë‡å€ÉHCCO ýÀ0ý/¾‰íK¤WIÇÇu"kœÞ2±j˜êoizv1ŒFªJ‘¸;`úÝ0Œ6?üŒ7:äxäŸ\ÂÁ *_S5¤‰ÞTI¤F_+¦Y ^æl}×ò“*£Ø{­|Losz*9ûÿb…Ý@¸Ù”ºò© K!ð=b/ß0êÎ²ă ø®oýKùþC÷Õùv ZÿMag‘¥ÞÎ!-ÎB-×{œ|,`„V:Î=ª>yO•úšÒ!%B…$D2ìàD °¿èÓθÁ$N°¿î.ýs &ø¨Ögj}®v( ¤€ rK¼;Êð¡ûM“Æ[&ê&âí²IŸ$ÆÎ…Í„òË*Kb¥h®6À¹É ÊŽÄFaGÌ<áìŸÈ)Dͼ:¸{Œ€Ï»6†E¤ ò0=´ç€ÂÁ”`ŠÈü¡ììžEž‹_‘KÒÕG¡¡aÄMä–¸1e«”¹<Ñõo\§Cöëâ-GîbÒ+Ê€Ë}vm¤0 >‡Jø†ú‰zøʽS§Ë™¥vòStº<¾1 =®œE\ñhQpdä$ ØïêGŠzïQ(}F¡\¤J~}¤'añÏ*\ñ~–˜p¨Ó’䑯 Mµ?¥I1ÉLîf¡FÑ”`æ8¯ñr«˜&'ïÉO9u?ÁN‡3“¢¥;ô7.}ˆjGïõXÁ'þÌWô?¬K<ì’ÓŽ#¸u6f¶ôY²0,ÕëDi ÙJ0Èñlºz' XðJ|$€ØÝ ;ºÍÌœJT!ªé*P~ë‹«Ýð² ª ©Î&0²dKQpÑkwi²3*mxÛ…ÍÀ,jC]§6Àµ^tî„–Þ¦×SãøhªŒ]Í'ÑלsØjÜŽZߌ*·¢Òë·äNT~Ó%¹Yп{¢ ”Î'qñk-hüž å<O¢IÜ2«û^êÒpu©ß?]ÖïœÆŸ®xfº•›‘[ âÔFIêb¢H±_§)¤Äß`6¦¯Bñ"&”süpõÀ†½‰Z»–ãÂÞ”_¼È¢ã³³<×Îp%o2ÐL™ Éê‹ãaÉÞMP¯Š=/„-YºH/ÎÏÂÞ”3û¡ðY|RUiç Y*=y£N]§‰¹áR½ëÔÒ õê¼®²’ÝŸÜ ¶Î)‘æ>£¨0»ú€½>e<—6‡e™­cvzÙr™ub,d™©èÊL5^L=rTÀ‚v-=QVÝH‡œ«ÝìC$>Å›*Å-²ã\\DÎ.Rž+Ü<Û¿NÇ쵺âê?ÇÐ9ûjb¸ù™uVÐßš"·+³élºÁÃQIé}7N¾¿ºKî[øNÔò¾.êæóæ’âptÅâAxï¹€2¼„±ó}5+"§2™“ ™ÌIÎè»»C¯¯wö†>žÌv^Õ"¸<Ût“,$)àà—ÚdלÁ¹ªmV¼„…ˆ:«F4P"UWTKÆÒ=ç³È‹ìïѺ3Ž×Ù$Jš¬"¤)*:šâ ¨ˆv£VKÀ¡© 𠀡 îXèÁˆ$>ÄU7¤&³‚L!j•t 'M÷ÁoÖÝV+<]¦µÉøSÁBžªÁ4wG‡IKrÔ§Dh‚š5$Á ¿PÝ),61 dQ¨¥ë1=½Êý¬°X‡àÒùZ%,ÈkpSÜêÃY [xtîÞ,üŠ„nêÞꢵ‹[È#ìgvoâ¶A—ÛEmì;¿›°v·hCPA~Ê’ã!׊KE](÷ÏÑ[ÆßaƒS±HTß;Z|¦+ÿŽàÈsMiØÙ¦Ö%4NP‘ñ´æÃPƒ¥;¶¬ Û³,é†×àUš4 ¤Q—¡ â©6Jöfd{§b·ó–¶Ó–†³–¥éùTí<¥ªî§ÔJÃ+j¥þ€ZY; º"8Üî5p 4’¢`’‰ês&ÊÕ¡ŽÉ'Þ Nå’ÀHª жõÄKÞÏK‰"Wãyø¥½ë4<Ǹk?aàÕàúUDÍ €{n¿pÊSåÑŠn¬nmªnbSñªbjkÃWZe>þËŸïb\g9p„Vè€ Ø.CµÊèÎ0žÆ3Qf­Ž1^ñŽ”¶²t޳gøØâšÙ#G‹+âß³Ôq5£Á)ð"¥±Š!Ù +0ÆFºû‚ÑæÐM¥dÅà”Qû ÜGì–ÞÆÎB|KC¹÷)÷šìbzô×wŸVqŠl߃Ân¥pÚ/AY¹jòCì• ?ÉN‰p£½~³\|ÅË,†ðÏ–ìÑ "ôq5 ÕÔ¼…¦XŸø5ˆ0g׿µ•ŸÙ;ñ‹]iS/³k:È|ÅêÍ ó§ð¬ÓØå•Î8ŸÊ.ÖÄ;†ñù-ÎT~ ïu‰§d:ªK[‚ÁTQKnY‚ØÚ„›lЋ,»\®sJ+@ñéE™ŠË‚Û²s€ü"ûÉm¶óÄݬ\à¥1îduÁ¢óêh­Ž‡%+Û-¥xŒy‚ÍU»}…ƒYÅa Ð/·{“ ÷¤Ë!é¼P>l¢U·%‡Ù¢iÂý©½èz!™?Þòl@vÝAM˜…¥ãNšø={K÷ŠfÇêüÞ£Œ[l™µ¯Ž»ºOÇâ±3#/Ðà,Û¼9’¸("·àqªˆ=h9ìÁ©MÇ„7(®#Àßd‡aÌ^¬ÃBì&º%þ㾫ûÚC7?y>Ó…ƒ&öî͉€DVæ uïiß½°ák6|bC¶œ‹.|P¸d³­“;ÿStñ3Ð ÏÚÃ+eØ.Þ[‘ÐØÇËn= BíÈQÑõ™7H0E~¨?"ŠnGwƒ§É2 —ãéc0›<ÝáŸÁò³4Ÿ$ÙKpLËpËCØòR¨Ê§ª|®J@˜L¦ß‚§ÇÅànL¦Ó/O³…Q>Ø ^j¸|ö‰¸0¶ø^.tåñZå±ifñd²´É®·µÉLÖn§M{¤^k(iZüJþÒL®¢uvˆ.4Å„¹‰›Ñpú0ª©¾¶>P-ÍjA5k³ íöuQAÍÖè׆sÛ$Ü]éUQ3u7Ü7|:DÕ>Û\g騙{-?OoëöHð}•5¢¡fëi1š Kkß÷Ð^=Æær8~[KŒ5ÈéÚ—}\EÍó¡g§Š|©HZŸLð’©àÛçñr4/–šy§i«öIÒ" “èu»¾øK\§#(õ fÊUÃh/YÎîñ4çúdr3~±f<ÑGÆæŒ' ß8|M.4 ëù0}|Ù;ìK.üã–©,7D/ýãziÔzÁ}i\¹¢€[€Öoø´$7¦q38ixM桼ž_wÝèYDo¡ê¡¤¨"c)Ý'ËÑÜXBäÁVz|ߟriTâ %Âìt>Ÿ·“Ñ|¡š|¾ÂÒ³fà‹Ô»#“½ЬðBïËôS>ÓÁíÜCŽAþ-žn£eÝ^"|Ëá*ƒ\IÍârü0š>ÕMb„~5”× å·Åvq´ßqZ»ÛTè§²·¬­¦?…fVA@x7_ȾЦÍçÚØR¹ðŒÕ»`ü8œ<ÝŽÁb9Xއ šr‘À><ÅÙ±¸D¹÷¥i{ñâσ¯ã铌È!‘+úr Dë>OË@kýÉ(oGɳ„=Ü| “ re¸Ÿƒ=ʸõñ#4+ƒI0›N&ô××ÁDÂ*I­›ÐelàÆ_GËéü7c÷wr½tU”’#øb z|E·ÿ×ñã_?B²=. 3”Òså=xlš;ÛF=>ÕÇëÌö—ÑhF®e]ް¡IÛI¼ÂÃ/AòºÒ¬Äy4{¦Ìe¾¢Œ£˜Œo¾Žçðï¯Ãàqº !,ɪ@nq¯g—f¹ù½Éì˜L·õðLÉ’lXò‹m¯ñ… —öÀX°|˜)6vÆ›)Ï0²ã—SJ+÷¬×Ì\ñA¡íBÚgCgEzøv©"ã‡K'WŒ_-ÍßàŒä…v™œ›ƒûÑ-t2'ÙaX\<ÔeÓDƒ°4½}‚Ñ`® t™%¼êª`W…\ePUT³ cÑÙ|´ÀÖ¨n> / ˜]¢¡fp2P‚f) /ž{a–ˆ†š¥Ç2 Ã,]Q=™%­^2Kz…¤– 0¤ÍÈ•žŸé©Y… “6+ /Uœ”=øJô=~ZŽ' Ýï4öæBƒi†-°ò8ÅvFUMßq Ê·ò*#TÏÔ(æ–ðB~.~[h†xý{ a…á w۠ɯiæŸ ,šã¥ò OKõ[ì#<3Geæ`,/âî‰|ŽÞ\/‚3š¤j y£—r«óñׄ _F¿‘0¤a˜ìÇ'·z]g™ìá'zê¦çS¨À_ÊP“^Ž·8›¬²‹hàöX°5›Î—uKWL)2KÚ”"³¤M)’ ×´DþñcÎÕ¾úrñwA_høñ÷V 3‹á,ß‹…b—è¯A™GäÎíí¥Õƒ)ò™"+ëÇb4?>ý,f£á‚µ;YAÊm•+|±›ØK? Ôâ->Ñ" ß-gÁÍ`9üŒÍ«ü$Êqð² %J|®DØüÛ>é*šâ(Ø«Š0-·¸?嚉vÐäsMõév(Ù`9<.î`à]›t§ Ü–iawëD‹œ –—·Ó'9-ªX5­gŸaމK;shjîkè!N檌‘27lŒ•Ëã¥&ÒÀ“¢îŠõ¥ò¨­--ž´u%P}Íš(×ד@½¾–®h„A¿Öƒz­ñŕ΋Uƒ¨Ô{;Õ”^•᛬–å·ÓZ¦ƒë²LÔ3ŒÔ³Ì\•ù`¥–ý`D/àáÌ|œð»î/°D´øB‹°G¢Dœ¥OÆKù‘ã–ž¦-Q•uÎr‰Ë½¶ ËŠlD¹º•A5Æf9Z,­Ëu3Üõ©íúœ6éK®ˆÐ¤¼°€=SzáP>é{i5Ê0 õ…2nýéþ?Žn1å“À²cäÚC)¢c)bük,Eºñ"¢;{Ğ؋͓U4ªLì U@µÇáü·Ù2ßÂèGýœ(”xÈÓÞ×@ˆ7>U¢›ßw5LöàµÅ[«—lóñóþº]}@7®¯Ƚ6dWðÃ>¹á†ì ÖF~r×Í·éüVüÑ—£®Èq!/¬‘×§”|ÆMoÚ÷Íî4<óU ©MÿÀ™¶[Aöž8ÙûÊÉ€´^¹{‘näKðUU~‚Åå>Ü„=ÃÊÝ  è¹€Mnè“þ+¶[þ—Š¸Ê®U÷³Tçv%rÝù?qé~Ö$ÉÊ?ÿ»Ó[àf‘§„Xû».„»Sþú9à?.y‹Çr¦‹?ÿ»Š’¼àRám`$¯4!²çØÝŸÁèaè=ÒÓ4ˆ ÕN£”ìÐÄÙ}fËÈZC©ÚÒÏZ“ÃmipCâ½þÜ‘]?xtËÌØOgÔ´ŸZ*ÚOæzöÓÅÕì' c%ûÉ^Ç~2V±ŸkØOíì'çúõ“µzýdª]?õV¹dnöUµ~²Ô,néç3*ÖÏ-ëgsÅúùâŠõ³бbýl¯X?+ÖÏŽëçöŠõ³sÅúÙZ±~6U¬Ÿ{«X27ûªX?[*Z›í·h3׋×Ý+Û3ñz{ß;Äi| Ë8Ô›2óàÄïнð…ÐáŸøý¼ø0P’½‘ãp§RœÑ¡®=w°!Œä=µŽ“{&Na(>¥ÈBWØÕóиQ<Û²÷Ï£¼ôèKŠxð…Ê`!ó+¢ðÄ }zwi^ø§¢B¾ÈÉŸ0Æ™âUNãù–0ÕgÅl<ôY±Ù[µÇóʳ±YÞ_ß© ™¨º[‘Hï“ÖøhÔ¾èÿ2÷®»m$Yºè=E{°áL»§<³1(œ†,ɶºd[#ªªº÷"I&©,‘LvfR²j0À<ÆÞÏrþG™'9±.±â’Aɳq€î²ñÅZ_FFÆuÅZq5n,š1]®šTxNá¹e„m ~2r O^ë¾vÀeà˜|ô¿ý¤ïzþ¢óÇÔæjë‚§ülne_mÊÕûNá[„ê„÷uñ¾‚xBðoí]×ýJu F‹»jqoVÊ9dL /¤$TÂßÀ&ëÛF™;ÉïÍÁ Qœ !‚ĸæuµ«Z> ÎÑÊx7æ#?­Œb÷[¹¹ïïÚæ°¾Ë"0{¬wËæ±;–ˆ.G„~c!߃X½“V©9”L "#cœÂ%ëî0‡8…ðzJvù¥úîíØ7#mÖÆ0.ø )¼Öp m9[Áý¶ÜO?V(ÚNÛÜX@ŒÉýؽÏÞ¥u2ÐÕƒß7ïâ Új^v9Ÿ”ê°™\¬,®›Ž™)tQ½,ç=訥¢|ów¦«ÇY)*)./ u+b ¦!<è¶jׂM¶Z|†ßBD×?©A…þ†:YÌÚáF2&ñï!AMôÝ–.‹@«Ú–ílØ©' ¢gâȸ”AÄfèyŸÌ­û)dïWÒ¾&3jÍ@õ+é‚9‚„wûŠƒ(Á>ëâ®W|I%±R¤oÊ9j‚ùx[ø¥ƒ…Ï㫪—iäBöú®-;ŠnôKGâéCS/xöm¹¬Ô˸Ϩ‹Õ‘eù7±Ðð1Ô´ &¿bÅá›ÿx÷GŒiÙ äÁèî‰êG¶’? =GâŠåL®F†“ †½íJ %Æ7Ã' nLlÏÓQaWü¿ÿO!i­p4ˈ˜´P+6˜%E#&`œW¬ÄÑ?T9 âŸ%éÅH¸a*ó¦ÞT-9ãÉá ðqå0¬lwëMžFÆÆµqæ˜&öeA6fpıïþ1Sq¬èv˜–ÒÝMæ‡z³Ì¢báqõ6XeµÝ÷Oˆ”¥ÒÂã*mþ°J .œ¥Ž qU”7¢fxÜŒ!C%c¢ûjÍ‘‘ÊMãMž¢ ÜÀ³…Àa6è –ÒzÃ$ECˆë—ˆaÅ»fRv]•ù. :®ÒdêG!]ߦ¦h‰A½2ª{Y/ú‰šË¶êÿÛ.W¿[jƒ Ëãnw¥…Ò,•G‚âjMƒŠ¥‰pØî1™`å^}[Tûáiy¢Ð 5J¢ÞÀ1ëíà†FvÉÈQBš˜ö“¿š>Ÿ‹,3HC‚F@J§>j¾¹•ÍÂ/7ÈÄ޲†¶Ã¨¢& z&¡HÑANl‚V½h–ÕdÂxfsrËBàLGÙ<ª¹ÂâN1F‡Å¹x¸a*ûjÿ/YÊW9# ºM½Ë{>‚(Á¼5OùjžFÔ<å¨Ñž·ð»8B§SnŒ€fÓVjž¯–;‡6˜òzd¯Lœ…c€‹œåNv—¤ž¶Á3»Ã„Œ!†£…Fw}þ‚Tƒ8pî°2úVÍyU!ðq•0¢õ®š—™ó6Æh£ÌQM›M~uZø >ÎQù´U_È}f}2x@ç+C{eµ¶„Ûuî6_(®ÜG “8tt»w_-&ýÓžo‹æ0‰–ŒÓ‰BÇ9ÁÚ¿ì']ý-›Œ-2ÌÂb†Õ«¹j½´ÑòÞ‹_(NÁG “x*·›ìAGƒãJun¨l–³U3söhθÄÀÒzv×÷{ø›ïJ µ8’kG„Šuô¸TÔçc¶d?@YšÁÔ|ñ”­„ñî*ù3†ãÿ+’&ItOê·ɹÒÌN’®/®‹È¬hÆf8t‹{“x œ¹ <£&7.š09[135¯Mô|!a¿Àר¨YÎGëB=Ñâñ#ÆZÂQÄ,Þ;Äz߈eÜ•«6cùo6m%]«c¦ÂÖM9Nbåi¯”neœi[)ql bÿø§?!ùÚZ=ÏÝ9”&/ $Iõ;vèHÛYÂ%Ï/?|˜^ývú·)I„ÌÕ·þ9"uQ”yöõËíÅ_oIhè^"j+oÀ ¡Xtz×<â@W¯˜HW<Öj:Á*QJÖy-ÂÐ]Ûö†&?T0¤~™Š™ùr×QOPlêy«^¨©{Õm6‹ªÜÍæjV|oBýšY'ËZ€› n‚8aP›`‹2ñ@T? õÍDÜ)û¾\Ü©ø§xx~PÇŽ«wªbQìWê=æ¢jûzjŽyȰTì*þ€`ï@ˆÄ€üŸ=Ê»Kà@£l`'¬'VgËú®#ªË)ÓM€x%Qž|ý› ¢Â`{n«Q¿cÕ³–´nÝç\É*{ Ô{ï:ɸHõl’}ñ;œ/wJxÞ£ä=Dо¸¸3ÄßcžÏv˜aŒU¤y,Ûf¯þ| ŽkÔ€•h#öèæ)£L°±F!ùíÁD¦µ.x4å$Ùšï]óôöåúzã¦rãÄT†1 ƒ±U…JÕý€¡”$Um ê–\¾bô©—v¨BVСŠæðQÉ•"ø|¹Gщs(8H‡åx(1xÓ ùÕg õ`V@S#8.4¬Ñìk1œhÃ3‡’ƒtQŽGˆƒw¬ =ðü:Ïíñªü»QŒ>@Di8$\6Å%ßåV ~q§fÍxчy¾‚Óç?Ÿ,÷÷kp6Í^aÆ+ Še&*obóL%¸E`sF¥˜y†É±©*¡#ë¡Sñ æR€gF”,ŽÅc—2¿ÁŒ½®òo‚µÙ¿ÝÕë]sØ,ÕÛ€»™ÿöoÅ¿ÿûŸ‹ÓM×¼V3‰Gx%8ûÜ7xÇΖmÚ‚šÄ‚ý5ɸ»ÕèøßVã§FÓ´.VµžîM1Å$ÒÑ,ç3:æm1¨P¥²&tr§„S ØCÁ'§ WŽèâü}ÑÓb_pë7™Ì ÐçÕoBV½R@Œ³ÛÛ+t‰PëZµ¦¢™¼9Á¦š¬ôåfœHHDp.ÊšˆÓ` uúˆ™N›àÔ±Zü8SïMuûñ qÈê?NTÆ2ŒzVêÕ?°L;ý|YÌÕq%á­ÀЉþLè¤T/4šõÒKÏkbH—š3›qàŠÜGŒÙÆ^¥Ê9ìÃ(µµ³ªÎÁ"@BmÝ‚I°"0­Àáªh& ¾çf# yïQÕvyŽNƒTkëmÃ0Ì!ãåR‚wE»·øýПZéò[ÙΨìw–fê ,¿j(&ä•“ªúŒ¡&jÏÕˆþ®`3€Ò‚ê=N%:øHþU^N?v?@Mªç1 7õªZ<-TÇw§:Ú,ªÑ".g™Ä'ï (w›ªj¹+ÅšŸ~,®t 57Píà¾1‚.#{ràöÝPS‹¨˜VŒê¥csØ-ªcFY`@ K)ÀNyöUµTϳp4:R© ‹‹³ÿLú]^E fdõX>e6³Ñb‚Ã& `\P¼5jlÁØN6À@ÐÑ$?B['РàsEŽUâŒÕÅX&•=?eˆYZuð*‹jSv0{¹¼.^]\^ÿP”Ë%üª¸yW›yæ‹õ‘‚Äf¾>¿1àvÁÜ®šrY¼/7ÐF[çÕÍ<‹Úfåµ™û¤6só!vbP£÷¶üCõ¹WïmÕähŽ©uuÂlœÀBž°Ñ«jz\5uAk4™ÂйzO}@µËøHAg™øpï~ñåRnùÊ·²«³øÄ˜¸ÜÃÔï £E=™ÜÀ'£ {ºÛ¯C9Ñp·YhÙ,ùE˜™. ŒŽL"®c`Úð­&#"ˆ|Rfš.Ʋ&™ ±s•¨!&TŒu‰ºÌWæ#-•¾(O½#çÕ@©"1 ®r·*ôÚ‰ušÝgn&õ’Í/ñøo[Rßö°_Ì–w‹ýŒa¹õ4RJÞ/&€š*R11ñº/;8~pkÔ“s,ýñaÊÂ`èüÓÙuñuÏžÌñ¾…]~¡OA€~è!‘öxa%DÑÈïÊmZZòX\-cOØýW¾§îÿØ‹ê¾÷›êþòªª5ìµÍêõcÖp÷){¢²ýdzƒíFàyÙÅ×݆œ$´»ªw¶QÆn¹oÔÂüˆ&-âqfH¼-¹ÄiHg¸kH§çŒ|» ò)x°îÝ¥¼£Øò`ìî\‰™Ö·æl™Á;ͯXírƒ­NS,þIÖÞ«>ÉÜv:Ô@#-s¨I6Ãý1Ý®^œá±7YÔùP·ý¡Ü¾ÀÑÎhÝ•‹Íï'€»\ ;þ†lÁø+Ò»œ§gWøvl¹T³IÒ‹s§ܦ%£7‚Dä¹ÐX)Ÿ^?|*í8¨Í-‹/e5g1]ˆ~ì3¥žfø9ì7¢é9½Õ´%»ê˜þÙG{̪^ÙžÎ*†AﱫúlVC|B&è´þˆ/y_%L#@—døD MìÏз¡¦ pvúšW ™ ß ¡YÜÎØ…¨¯ kïÃØÜèɦî—ŸÁ\ò‰=Œ½Bûv®ù2¾µŽ‡ØhÕ”ÿC¥Ü§@›EEŸ$3Úb „³…”ßz¥¨cŸ Å}˜µýîn¸[’nëÝa~\‡)à²&@¼²eáñz&dPÅ,à¢#£äluºRùpÔììatvö04;{ŸiŠC“³‡ÌÉÙÃÀäì!œœ=àälhû¥ø•)…ãÐÃ>oumq™}°šVIÂHGeÖ«'ç¦(lÔ+Ñ«¡GŒ„Î1ªS¬"`K탡sŒjÁOR$×вÐF˜|–å‚È^}¹ Ÿ1|Úõ<¶ëfÆÑi‚sˆÔ„;ë,Õ²pkf¯’ áXP‹Í ’Ê]œUÍéR1'9§ˆæ(90‚T‹´v‹±šUšÔª~Úï^› œ™û%7|üáB$ð†ÍB;c3ŸóåÇÑ–“6²÷¾|¯˜â‰±éÈìd¡^Ge îñ<Çe–ËiˆMÈ#ëIs’”àÒP’Y2(™ÀoðtØ…Š1ÏÓŠÁÒëì]ÉÑB.+ ß[Lˆbm^sµÚGNP$‰.™È¬h„Þr]5]V@à(”ia–Ø-À·Íšö[Í)#_(ðשmky%ãÇ+Ø‹Ž‚Ô»1ý€ÅšUF» '·} ðQq‰´fõò(¿LÎò{ÉJM7ä«Ý¢}Ú÷Õ<>VÃ)`,Ô‚±èÄPÑ J/.t:8{„·¿ÊªäU´†W~õ®lÝ~¬zÇ¢šmIØÔïôX¡_^º6Œ4R|ÕV©»b¬œB-¿—óy¥¦Xw£ú"HÖÌ9È1$\ìsÃOZThöð8ÓxY.î²ÆÁ4s²¹Þ ñ‹I»wnõ¼â¹°P1Yåsé  ) §XŽZœ€sC±è7›}Ù–jI Ÿ@Úv!Y.dkpž-ð(ÿibÖ}‰‡Ê;3.>Fp†)w޳S”i½xÜKˆŠP§åæ`õK!v¾-›1/MµÅåð…ºÈÃ8VÀaË÷Là1u “e¾‹Â—ÊOÀ¦Yx™åYˆÒLçšvãBâ fD‹i³`¥É<Áy­{Ò!èmÀÂ}ÎîHp¡ªâªfWî@K’ÑJõ ?Û&ß•uç¶Qž96úª@žõm´Dë[~žÝþîl¶ëêc¼±"–*A¢fxQoù ®fÖ5ø‰Ey”ìMéjKR¢{oî'¤RôQTø5±ÐLÂT’zè LR=©¶ój¹tüX«µ÷¥F¼mÆæÌÞåcB35-Ùú¶VK-–¬Úí„$_h˜ö­M®–Oñâ¦Áö·ªõ2`Ó¬×:, áÅ™o?_VóÃz¦>ÂlPß5 hûßH²YDhÉ;r4¦_ü©ó€!ßëVù÷ÒTÌ’5QÜL«ÖOqÇ':×a`ŠÕS¢}q±pܧÀGZs|Gc¬ w5Œˆ‹/§ï¯.f·§ÓŸgçïùøñâF+wÑñ§€G(B {ǵtÅ©³rÄ å ‘¨€ ±§®C#˜g+Q?38ãrÅÜH=ß¡ÑXV0e²u)!ß ƒ`Ud;ÉñµØ‚VMñÀ(ð³ õxnŒ[Ìh =ý%iÿHžx.`d{ý`ŒË4ð5A–'–àöKŸV(.ßg"¶hÊ ¡Ý ².û -º=ù35À’zS²“µáh™( °R†^%@,oï!T_Ä«w³i!M€E)t´0€M‘ã`d2z;Ä$¿ì*Od—»O·Ú¥ÛEöèvÁ]ÙÎëœs;ûsW ùШžMnÒí2·èvt»p{nÙœ“ºÝºN;?ÁrS«]|WnìÉížµ#'˜¥ï°)·‹mÉí`Cn÷ã?MÁ´¤Ý=¨?q{˜[r×߬ ½n›Þt0­ýD¦¾Ôcÿ?)¯Ü̼7*Ÿ„=zЂJú®qʘ§³B'®Ð ™ç6¡Ø:—»”w³ÆZÕË¡dÓr Ð6à­úæk ]P~Q§­zíeq!?¨ÜO|è |à™ßw!t’»?ðy‡_wäãZ‡¾mUª*÷u’ƒY(õÃo¹2_JÓ@Ë¥:½¾|s’¹ÛïT‚>åY]Šå„lÌì$#iY™ÉÌ$ ç¨&Ém®Æß±h¶› [v›ãe!16üèy"æI¯sóî¢ïƈ¾ ú.JôݱDëÝ}¹Ny.NУt‡%yžeUJ[­é£ã=€Œ÷½YîÓÔ,HðR‰)õ[TÓÕùux —"C É4'(QºÃŠ×¦¶ª8¡ÙE)|‡>6Î7$] ª=œZÍÌŠÄBÝP¥­xªïE`…^s¢¾ú€ ÉËÛ¦¥ª5¶:)“ àDËBÂP‹¼«]^“\NK¤s´4I ô0Ù!†)–L8MDAÀÓÇx.ÈrqïäòXа_ŪÀ’|œ³HÒ ´²D¤h rÝ?缘‡v•Vß®BííÊQÞ®„î›IÕm«ˆ`8Qw=Uƒüæø3 3Ñb.nn¾Þ̾~™}¾œN/¿|œ}:ýr~<ýbùnü‰‚µ@ŠyZøÒzq\-ØxZ½O‰h>žDåY«…³ªÍz@ýM–lxÀ?讟¼ÏÛJéZW(½ZÎÑï k$MP°þû¬«z  Ó:kÚþ(gÁê ‹Á¹¡ã̆ébÉq ûb‹ J5Ö]UáÁ˜Í V¹X4¸Q ¶Ú(K}¨t|Ž•ôç“• ÇJs…Sïð*þÅ-Àä²×,ÕÜ’sFñUmô¨¿ô(ŽBy[ÿÆð‘êÑHîèÔÞÅ”«é“Ü)عË)ð sXz –E]°…—x£ Å–4/ÝrЦ8ç>T›'õA¡+z>qA&åªÿÛu«‘Ž”¶ Ëå]³šM1Øb/nùŠTßß<÷MÖJ…_òÀoméM„ÅñàSMéz¸ùŠ*3‡;jÕÚÑí)áÐʘ—^"0!ÙY"Ù×ïMsÖý›ú³o«ìf X« ~ÉÊƒßØ¤m# köàè™jáM¬¬JœðÀÈNÏél äÐ…Ñø‹‡Od?нø­:vôæx eEMP;WïPuFL^qñÛ’^Ì÷eÒo;,»!ï%ß<àO¸˜—]µ„ ¢\@$ÐbÑÖŠI jÛêQUwJ·‹Ò8Õ²à±kö£±÷}kn@àe õ¬T_½Ìk[n¸tjÊ ¶…Œ `L‰ÜAcvÓP]Lú8|,Ùlå¨þ8€8{,ÉÆv{p´ƒïÉx¯W/¦Ä ÊQsÇrÐ÷uwɓܷ€Òê»;>Ê…?Õ3ã?”òêí¼Þ!ø‡“Õú¥]•WÓÌJôOSË:ÁÖ1,¨7µA5W†˜™ðiä ¦fÛ†cB²Ñük†¥ÝR¥°éƒ ÏæY>Js“9tWテNy'$ð·»'¼V@Ffü™ô«W ¾„ø@ðõ$Ï ïñ§6 "•z‰Ë¥ñ´¨ùO®å²ò ËÕÉouoöO4Êq–ß߇ Z깆£Ž¨ÜYAª]Tœ«šñ‹É(ÉÖŠ«­&F2ôú]© ½5Âßyì(7ÐJ1Éwh ZæÄʼä¤Â$‘úß;ˆÝ¾î¾_ëÔMûüËôëˆy" ¼\tºëjèU©ý§­š†õjÞph+Ò¸«Õ‡ÿdæÂßA·9A‘†Åâ~‡;î7n§÷Ô£T·ë+¾`¢Û‰F àß¹”H¯¾ê· [´§3Ø¿\; Õ ½¦4ì‚Yu½¯6õ.ØÂx–F+ëÚüÉjšG5¹ƒÑöûU¯•iê÷Ú$±ZŒ‚òU¢<«’*œ>’QÄ`¿³/WÉr'žÜ)%ƒžH&*ýÓ^uÜÍêû=7Jœ4+óä·s4§?–»;Ëï§Dboi;õ÷N=îCU@&öœvͧÊ@˜ÌÑ »ƒ±º ঞ¬ÓO;UŸ—»åc½TÓríK· 2ìtîÛºÁËE`°­ž¨oͦ{íû£Ù† Eò,É^€,}H”üá7î]Àn¬ÞèB7ñ&ûdµ]«ùžZðìÇ·‚CëUéJ7ª-Ti?].ßÂ]Ç·çÚ«ìRíÔc7ª:õYU÷Òí761Â&(ÚYßÌÚÃV/‹»Šª¯ÊX¿"°üÀ$ B9+i°”AÀ¥#Q8ÂÒñ¥ @ÏytÒ°2›ÂÀo^Íðž²?ÑÊXX3-#Ϋ‰÷òÁ’ší8o›â}UœS>Щ¶åÎX))¿e¸Ñ ?Œ­rÁ Üöº¢zÀÉ•jy(ǨmrÆU¥›šQÄ_)ËWK}öwj4ñ^£ ó’·ãÄ~ˆÃb.vclavGÊ>ñý ö¾›¶¯9Äî÷8Î⃠‘Iе `)©Á šòSžx²ˆ}‘œaö@t´–¢™ƒs©Î˰ыB]Z®­ž[@\ǤߪÇ:‚³:üãëÔòÔGñZF½ø§WÔÃx—)ä{Ψ#Ee”ï‡*8‘ëî¸øN­-báóÒOV°ešwËåíÊn™Âv©)µ¢ÍRsI‘}aÍ €y÷hYÁw¦¾ÎZq·ÍV}x}¦Õ­ÌÐú›í\Áݼ^u9›ªì”ê_ë²8Ué¯~™výáRµ/Ð1½Hˈ)¼¦¬W°®+®êÝá›Ö[ï_¨T ˆj¬÷¬á~}€€Ð/ÓÂBbš¾ª·v6ý­xÅÓ&~2ž…½H-˸aƒÓ°Ý9Å4©c¦gzùG,VøD>¯ö›æÉSƒîyT.©{:l_ö< À­Â⡆8ä`Jò·ÃöduP+°î¾Þgõº«Q?'ðS ÷q0û=EÕÒÁµWx^A-´‡ÙÆa·XÓ hêOyc ”j¸ÉBÃÊǶxdv².7å·§Y½Þ©y¶¨ò`¥YI˜„ Iøxzuú׿Í.?~ùzs1;»¸¹jMp)QU L{³N#ª@ÄĈ`]7_¯.fÓŸ/®.n¿~‰*ã‡ü:ùa£ªù¡5²–zžN.ËZ¦7¿^Üh¹}s_=³ú¨(K½ýúóT—¸üJM¤ÕG²ûáYó2Åvî,IMÕ(y–ië0º”‘¬äî0‡h³ßE4Ë2²Õį‚«ÑßE¸¦¤/ÔøÞ´©HñŒßæbÂÉzÆc껿½«õ‘¯ øÇ3·óÃâž~l8wÁÀ5Å”J¿QÌ2 Á"@Í.4“`÷þ>Egèì&‚6 óž™29Ø5È &`’$»´ %NŠö'âLªddF£9T22#CœX)ç{ö㦙—H¹Á`Áêï‹o¼y-£5‚”z»N’±KF¥I2ê§"3úÕË]pü[/ƒ”i— }µ;ò*­z „ ¢½-h„CË/Ökœ3hîÇ5Û=l®\ìÖpëJ¥|<»¦JCª]’¼³Œ)YÒ¤á«ò*ʼUU¥Wc ó´úy¨zêx»zÀÂD{Cð^á¶N·—m¶—mí´—m½}ÜÒ8Û¾Ô/£&¯>_~üª Iç`Ô¸“Äfkj‚ˆ”sYcU w² ‰×4¯ähWÓ¬[Ü€…‚ûeRý~hß/¥òýÒû2÷UÛÇ‘]{k÷Þ ÎrÕZõ¾k& ö¢;QMX¿L°­õ Ä1nX*΋±tDœ†(ª´¶ñóí4üv &D`ûûcB½Ó t²%¡S`½¬ûBMÿ>_øaöÖ‹ý Vj¢å¼s¯‰ì'œï;óŒŽ,eñžPÅ”Po%Œ…4_X挱ƒ,Ooà»aa1—ÐCëŽãª<¤§ÚÔcÙ¢?ø°’ìâxKÎæO _róŠ&z¸}í]Unú;³±>Ê4ÄZ–"O2É vŸ,’˜±«›}Û|{JR‹€-7öŽƒ™’œ,”`wKÐk€½C»QíbŸdæâ,)•®ÚÜ^òaè 0,‹_ês¹GjpÈq¿….˜åÞûu èPˆ·Í¾^to§* O€ð<†’ÏtFÅFü< ½>ÌRðÌbåæ±r]~óUŒÜk ±{1<ë;¨Án«©‚2T»}ú6½Ò9Õrä„(I=»èÞ‚yä·Êà\‘Šœ¬¯kÏÔumm\×òþßÍaþ)ª[¯v°úÍ•§SQŠ"¥þ<ö-pT¿Äh=5fÍ!àx¬yÜÁÔ®c{MlŸno¯_㧯¡]¸½†½0%U"ò‘1úí¹MA¿àü²xlaÝÛâVÒ]Uvõ7Ó“þ 4Ò¥,6²yîË™h9Úh6êþ´1Ö¤˜ÌpÊß/'Z·’)¢&æ &ZHaÁ곃ÖûÜy9¦‹óÕó\Eá•p+‚e>{ªâx¦×ÕÍœµK8 ëÁõèz±~ Ñ? ˜âµëмӕènE ÈÑ¿*¿Nø}Ô‹z·¨v0ߢ¦oêŸY[~|lQœÒ/ê$6³p§2¸Ô—´œCé°ëeÊú:½ý|ñ·ÙÙ§‹³Ÿ/¿|$8˜äúkŠ-ðS<ˆà‡Þvx0úŸÿñ¿°5@ºv öŠNئÙåC‡´b)ãv~ÒUtë‚V ÖÙÀkØGWïòJclóçý:Ÿ³Ò­”Ëz ÈÝ•‰½dåB¢í!è·]§ë”»Æzá îý)U»®Ž­„ÇÉ£¢Š%á•ØÛI§jêûÒ—'wûzÓÌ…DgêÃX$ƒy¦í4 PUÊ{ø‡}ºðØ ÜЦFîm°° ¥ÖBQqC¬½°ÔªœÑí¯ÌV5P@0\•„mÊ/¬C }þpZ¼ú ‘&à"b:ŸÝÖU+îÊv‰¶Kz¹P«^ææbz ~¯‡uÊ3ŠÑú×Â/ ý²º§Û²í¿NéÚ T1Ä©¬aq¾(7fgI¤é©ÕQúÄJ¸ä$Ø 0©jj Ú5SÔ-2ñd1¬Ñ©òŒ;tû¬NØäÁð]ª¤3&=Î8Gµ3ÚY¨T‰¿kò êµj¼f›£[å˜ái§Ë»B=no£'Èz·Ø–‰Çu0¬ÒŒ"ú‰[gô=WÁ.R\eé ®Z§Šæ ÛjÇ4TÛFyFG®z·’%LŸv嶆“…'S/±*ÇMÌèÒÀ-Lï`b-Ø-)<;ÁÕïëb)øÁ‰íî5³eÆ>Ø #t-Cì‡Ù íÀéh$¯ÊÅÄ—2žï`Å7/›õTÆ®YÛtœ7 ô È+¨¯ÁsSΩ•S@?9&M0IŸb98tÿd·F/uÊå5®%á ¾I)Î3µÌïÌİ ƒ™h rsø¶œ£…ä²vCÒ¢&uÇÇõ¢-ýòåZ­&/Îg—SµÀ¼t:2ø9v  ½bØ®eŸµê ×Õ1n€©?þ-S _`dïÃ&õwõ€ ²›ÍÓ>z˜VÙM掗 ´Û9[°[ÛÀª‹rp˜ÏèE˜zr0³Ê$gÉpºd£Ã/S-ó‹f§£­Ë9¾ i˜dºÓp¥ºÑ¹Ð·õàM¡éRµdny(KÁ5ÉÒ04)ÞlÀ=ý–ñgÇkÄ®S„|¤%e×Ä‚˜5i;:Éi2¼LušÎæÇ#˜EÀ–ÜæÇ8?YÈR¼*ŸTóÿQdÇZ÷âøîŽïÆ8¾àø.ÊñØ­JæYïîËuºÕ»8ÁŽÒb”d9AB¡RZ^ðjé½YîÓÌ,HÐR‰'õ[TÒÕùµ÷fÔT³^Û8e#|œ Dé+J5Å ŠM¬>¾ÃUÌF¬!éûœ§ÛÇmï=מê¶‚Q¯…0å½…ñqæc74þþá² ¸³f™òè,w{… ¨Ò‚§N´Ðw͉Å×½í};0pXÌTóìÓ_mluRæ3eÕÈB„SÁ×3fd|±˜`çÄv¶@Ëædœ&cæéã"d©8‡D ri螃¯.hÃ0>·@2›Dx%dÉ@¢$¿-™_¯N¿ÐÁöÀKyhWi½#Ô¶+Gk»rk`Aã7öS«â×›dTSkz)ßÚÌùž4ľµáœÏ€³g}½ñXeNý¤äNÿ,ü@EÒË™ú@—š74àØ\PÕÎðtð[›7!ôp’?)ÔУ¦…N eÏk"XÉ,6«‘E’sCUu‘¯P‰Èª¤d×.néÑ;³–Ïðr¿©Á&b|Tÿ†QÍ  dðu‘’/ç¸|9QÞ*„@´=ü*À+,SÕ~ eõN‚ïö»L?¾µ± È·–uäk>PJÆ6>jt ž>gˆsa’•7Ì1ð9!vRï¡–w‰ÞÁ1§ý #Y>º¡â^ã¾ÄjØ—àÊ;#`H ©—“cµ ¸hØVÕåõ)áСB4‡¤Ïòçè—Ê4®Ü’“æŒ+“Êju¯LjX¨“QÛݼ\$ÝŸG€V§ÎjuZ¨ùÓûÓ3 d@Ú“&•.Hh•Æ” µAªQ”W±>ÒUT°IŒ+ŸØšþ.˜ðÓ¾Di~dE:¦û Ÿ‡LöUvNØgÕya4Tʤ÷0_”i­%tBª£B}WàŽ‹œrÓü8³×ñŽ,!FÏ¿$cÙ,¶Ë J'IaºK “"¡2ôlS*ÏkÕp@#hÛ2}œèP 9«Cñ€.¿CÑi4L‡’?]ÕêŒ µ±á¢%±Gµc]¯Qav¾&"/±û5¾Å€­©qaVú£ÀЇa  Zjã=‘}‡»ß8?ÛÊÚ·Í>“Ÿ€ú!+ä ©1®÷{ßãhï7̲^eð«WfõÊåT¯6bë3‹FfU9@—NXM”§u\5e²à2syéHíùœêÕSÎr4ÀiV*Ý[ŽZ¨K|A'pGLÍ…ŸšCK•fõ0C~,ŸÑnÕÔM©jxaV@Mì¥uÕÀôœBpÚëìlÝЉïBqÜÖi>>J3ÛÖŽû3oQ/9ÕäXõXêÌ5 Àï›ÇdÇëÁ„zLvôc 8ªÂÅÊî4mµU% ÿ‹.­‘Ç*[©ï)°üøc; -í#Óo¨qºàb׎É=©ÛŸ.“ÏjÚ…ÑÐ.¢® UÇysfœçÖm³ƒûÍy»gq°ÖM™ÁšWˆ·ÑÊv^÷mÙ>9jï[õ€™*ô\»6mÎJIo¤E±Kg;Í-â(÷7Ñ|ªQªýG êuû§@|³Íßeó‰Z‚ßaçE³ 6_Œ²®ƒ p(=^Ž5tÍ„ÓM%X((§¿D(hãÓ¯tƒþ$ÿ6©¸EêÜå[£Æ. 'F¿—ó9ø%Éó{JhN[¯§ô{Àéi©³É©‰V;V“ÄQÉ¥ŒÂ°wà,œ «~¤¶M³=ccìJ¯u×iS¿}‹2%ù½|(Óî¬|”ÖòP:­ L_[¹¯žàªÚeãü·ìˆâ`³"胨oÚêÕ¢ÄxÔ?œü>oºñÏX"˜¤*ðCÑàø2åÌÙƒ¶bó—÷*ûä÷jw¯êpö{“6lÍÚ)w¢rÝî#(N‡*Ý{3Ó¿¦P—U.Ÿ!&!ÛÍþSšk! uU»±ÜS~ýð”m˜°¡Zê2a+5‰6UºJèÈIfó` pO˜è:Ò)O~¯w¿—?>ÛЗŠáOÜs2@åOñ¿›ìRü÷ºß¹-¯5û5ð·Í ³†-M“0»ýËåÍ©¨Ž»¥gÕ…*œÝ—wÚþý8˜˜»qêåUÕ®PŸÔ\« š~ý‚ŠðÒê^îª!M*ë­FZUx!‡ÊéŸJˆ-È~°×~Þœü~ØÕÙ^¹ÌzàOñLðS)¡ËÆo ?ŽOù È´æ™F€F`(Á‰ãá¿(¾Yî/¿|§Ö$ g†CJbÞÜÖNlË87C-9©]br:+ÁCsYõ?¦è0djcQ€“ÄÜñÇB:(6Ä <Ë;/Žc%Áà¼Ø+2p^ì¾Mÿ–dd[Â%јUaX0aW˜EûÝq´ßÓ~7H;ÏÔ0‹r†½a éumx–ÕaQ0+<ªvcÚ`“8TÃNaÏRQÔrÐ3d?Jæ ÐȦŒ)³xe˜iÄ;×LÃgÙUR‰ ŒRRñ,0¸k“Dì!Á³]; Kê…«~CÌYòËΙêd<¸‹”ò9Ç}p¯ÅDÌ‘]† ²j϶þÄòCß”j?fJºÛý"£J,J*S©nU¨šr K;í¸¹>#ÿûÚ"'9ýè9²EIZ*Õ¥¥ÀH·-wÝÊzû†Á½iÉÕVòeÛˆ›Ù°à¸ÕlN¿“ac:L# ΰ1›ú&I˜¤%J-PvƒÚ¦â¶6‡]Ÿ$”´¥ `’´§µÀˆEmÎkKY×ú(‡HëõËmĪ6^/÷ÿ¢&ìÔIÉpŸ>žÈ)Y›g:èŸÿeŠj²}Á(°hK©_ê!El­W?ÿK÷Càueì»:ZO*È'T£R€Ž°@d[ŽÇ@r1V´JÓ/‹!öUÓÌ) - ;Õ¼«¤J‰²J1UªÅÜ{ »ê±èê?*vµ~n‚½.n*Ü&T8ó·öfžF6U‹aÚÿÒÌߜܗ}µÙ4ã 3¤4Ã~Šjá„›JÇA½¯*5£ìg\ήžO„Lê~ÂB~V?‹Ë¾˜âORAqâÐw×1Þ:P2•EÇ^6, äpô9r)Tï „&úg¥V5€Íl¾QÓ üÀF+3Ö$ sb2Mõz… XŠù›2Íõßûêi±iÊû‡“q¬æByž›I¯l[©÷ü¨f˭꫺^O¹Wêí´ (…¡5‰øQºÂt8Ÿc8{e¢Ü5fàtöÏb"=Ô÷°â3O˜òi ;òœ“ F4vòºã¤Ÿ²¯-çn¸EèHՈÓûzžÑ8†dí˜ãí±;pÑ™`²~¥~Wu5LÂÚ*\" Õ0kBY–, ÕÿL9ÅsTϹkwwœB€cýNQqr ÎØu‚y‹ŽÍîÕ@´è:jã"̇~È7N²' öÜmß,í \Aí0ø™ÐßããÃ,J6Õb‡ØØ°Ûš!fSnçËrVnêr\uHÊ)c‚Z½Û8ò¯ $^™8–<t¸Bx±:쨱T ËÁÚvè°Ã ¦=ƒ•Ûª‘b ³¸ôÞmètvo%ØD+‰ZV=鱇>¡xÝ,#ƒS„Ãà Àá0Š2\dÆŽZצÏWŒ‡Å%ZÑ[ÚË “91 rtwØ«î}iiîE(K5R߸J’5UšíšÞ¿ŽU£ÄLH V>ƃƠ5èëü}¹³¸¶³:ûf†‘_ª´oàœýÖ»„Î>¯6õ,.Töm3QÿÚÑêÇêöC¬;7´~ "®#Zz<{‘vG’㘠E‚Þ«DÜT Sõ«ÚÌOÅMcÇ+üb}èSQ »U£à ¥¿PšÒº[`S¶ö²×Ã\ë%q“o¦_Wœ¥Tv­.gþ¥±Z:ýÒ30ý[u «ª_Ü ¦:Ki{ªÚ¿ÃN, ¶bñèçGRóî{©yWóÔlÛ9ÄÈÜÚmúeûô°•Ðà>¦Ê‚ûãI såæ`{Ð2&BÆäd³,÷3ØF'¿J@ªy f}Wç§×v·®`–¤]=g·tú1Ù!€)qUÅßÇ•8²݈_©ä5vêµ´O Ó™DzmºyD›d†Þb:½râO¼«Š¬¦/~²©ç¸=þ\,¯F³r§Æ?r8úPCp~6ÊžØlóˆAAiSˆd5g0{¨Û~¶ù¶8fé ŠZ0Q r !p¾é$oܲF XG3Z‘ZßõŽW”‹ÒD8ÕV 'Ø÷n&ZjY åF[г  ˆ³0]\±ÚÖ½>µ}V7&,ÚÅ®*Ûn3Të=Uû–Ðúáï‰)I¿¥%˜©åRg®Êî‡õ³Þ%]ý0«™’mõê稛L­úêÛ×¢Þ¼A€V›Q(ûö¦86ê‹n*©QˆDÍÝP£Q ™`Ží“0Q+HÔZ³ j¬YÊÚj–¢¦tkÃý}Xד®âš®›`ˆÔä›omç\!ÃmD]ƒzj;;”šõ>t<0”eÞnCâFìGÁQý'˜ýª¤îеšbïÔˆ‘:ëNùåù>Ÿì¯a땆m&¸Õ²˜?aö xWsçÙâÐõÍ–×™éŠR½ÏOWÊ®-’¥fÏ’EëX\£ÀТ°ÊÅóg `Â&,Ï뇟'Sa¹³\ž£¡ cŒ9 €®m(=þÄÄþjvÅÂZ°ªÜ—ëÙœ’.ý6A ¾Áâþófù‹7žá2›tX ¤çZÿ& Õl]%&>LH¯&*Ù|hwìÔ­ã|лÆçêrÍ:M­yOÕYóNƒ3ñT Ú›TðòzÒ©)ðo‡§ñ„N\¸2™Rûxµ{°@³©v¡÷3¥Á)Ü&AÏÊ Àóûj”rˆtël2ÝzP·IAè Á¨Ô‹Ùì`{ûĉñ2€Bõbb2í° é¤iÛìê¾Éq4º8ÛÛc †¢tMi}& 9­uJgódádÇ|¼=ê°`ã*Tï|Ê®c­& ÝÝßâ 7üå|;˜ÿr0ËêÌ8è‰c=íîaWDðinúÀ‡§Œ{Þ&ZKdÍ݈‡dêçBºÐ92åw30Wïs†.#t°'W”‚÷0ÅQrLœÇAEVˆTö`÷%•ÚNþj|¯#¬äÑd÷:ˆ pÜkC†PæKf5B ±}~K,oHÎ0Ÿ9!mø=9¢®_IÛÚ&Y(ÖA8g?¾ùÓñÕMµŒÉ“? —:¾§j÷JúÉæ!1”=xã׃´¤ë2õåÿú™ãõñ2[ OD Üøq7"Bà†c: °SVó2 x‚;/[4ž‡»bü¶89vGÅì¤x;(y;'*iÿÔß5¼³Ó>iý„¯ÃÒáB9¦V%\tÛ=Ã/“X)õËWë2¨Ö%É=¦Z—Bš¬Öefµž]]j¥Yu¹¬Ëe¬.—ñº<÷ërß6éM›gUsºTÌI®ZNìN¶åc­Žjô@¤N'j]ú78i`+lr”Ðâ¼ùs¹¸†l¥&¥fèÁŽ ,Âm9+>”f‡7ìÒŒ´ÏiOß^cÏ&_fh±2—;º­ågŽt^‰¾óW¸Öœ7Ûš+Í[¼Ò¬KmiS’&`àõº(žˆAë«@šÆß·º»ŸBl‘¦™;"a/ .î=½4€—:ŸMEèÁ­8%ò¾J°¼¯<–÷•eyoƒ´ëªç½ËÏ*WÔ^à Ϋ¿ê–߃ˆ%NpwΑHòøq7"‡YÔŸ©e5D£çO%ñÜce$—úïÄèOU|?Q×Opúó óç¥/ÿÕc ë1¶,‡Ùá« IéŸy´<´GLçÔtFà¯F±µ…­cÁõ Û6ªqµ™d]´O–sC²œ5qrÿ5nn ßaW7Ÿb©ôå:ó… ¤§r‚ºÄá—ˆ¹ñÊI^hˆ!=FòZƒ‘»Ô ìW›ÛGÙ±ñtщ)jLix\í¬xãå÷xñ¦¨?å%¾¿›uýaµ:ö JN¨ägõ'IêÑ#Zâ„*G&4jP†«˜t‚wÙÛmÊWh3²9Ù¾^¢ÑÏ6e×ðÉ1ÚmK5rÏJ8MN¹¬‰B5•5ÑY–†, ¨œ7;8¬  º:ƒÝ~4˜þ7]±Ý¶å7 P4ÛWêóP£÷ºzázYIÄ8E!qBz`ò 7fjð™-k¿¥$ƒ"¡h˜©‚‰2A!ŸOÿ:ûpyu1›^þϋه¯7³óË@e½=lg<}òŸð¸ |6aaòá>SVñ§i×&ëd[mÑ·Â2íšÁ@YŸþÉÎÌor=#~Ÿ¿Ç±B?•£ÍÄ|¢¿­žm=nN?0­–¯UkÞê;5€íß–£uCd\´=|æ• –ƒ¡pIÎéæ>s¬o°ãšB†RÙÂ}NpϰG›šúù#ÛH™h)p‡âóÅÍÇ‹Ùç_®n/¯U3R˺ÙíéÇé íg›Šp­•“íh¨SÌÕŒmÕ° €–ÚãUø[˜bë=âÿüÿE‡q2T ;0ÍNWY«Ú>ĶGw0¥¯vp­'ûêc®wõ¶Ì_äœyÓ±Ô¡Å_ÿõv¢”v/ÝÞ¾Ág•D¢Á¤n%ÝG :ËÓqß=uã Ä$óžñúWRk,<Ó;½ü«Nn›¦XãG Û¹'àÝÆDø¶oM»DXo^»]B ”QSÈyb½æ‚˜)'®ü[±E3^ÕEp\òo%Ñ¿´Y ¶lÁÖM4lŸŽ¸ªú,ºìdX€Ï_GØ™ù¡>¸¿Á ?rߘнLT·PóˆöoDF¡ð…"náëâ}Gºm6\×ý n¡KVzöÔòI,HÈ„L)δªŽâœ §\/–zûƒš&Ôê[ïÊðrÞh¬±nZâ„%ê¯_ ³Áiòoåæž¾$§Çj³h¶Õ *BKøþ5›Å¥¬È‘úAE)W‘v.þMP+n+5R.|/ÐQ­ê£Z·¥šÕlšÇèóY\¡7üûDökÏ9»ÐŸùš‘çÀYù­Ü×ïdgÁwSXêz‚\qÿâÿ¾À4Xur};mV½úçöî ú©öíÿa®:Gf±ŠÓy65вWE>?~0_ö»õ‚>Öåir_LœæÓ±ŠË—- ój4 ¶ŒÝìQÖ†™$Jr^,ÔÜ¥õ.Šú\}s4É0•ÂXÍ" ÅUÂÚýY‘õ¬,Ù'¼0e1ZDsŠƒDí’;y×Xù•*ô“Z&´xà‡8ÍLjCtB B­§wÍg°ÑWw¬ã!ÞQS³ÍUì#FëxQ‚ú……ÓþrÞÖ én]Zo§ŠÜ®³’j£Þ­Úò§Op‚1}]Я›ît±x¯f‡Û½NÀûͽWiÕ>UÕ>|ÄJteßcÖálsáþºšœŠšœ\ß=ux&«æ¿ògŽHCø¦S ×»dåEêNT]¯æCt‹SëYUÔ›¬¶ÕÃO§{Wý|™P?_êç"\Çû¶^ª̃¾?wõ©ß¾¾î0‡ëIµNjçKbŠ¿I!ý(U¯móN­ÏÒj=¤£Xçéwï<=Ú½+¾ªl rÓ½?¿mÔ/— û0sPXÿ$øÄÑ–“—‡“´¯Þ& &êæÇ¾UƒSõh®Š–AôÉùé]_Gw»r¯¦å}c0Öù"zùkœrFgHé”×ìí§‹oq–›í8½ÀËv!3‡‘”b.g¯þøé}{6¤ZµKhù¹\xHE¤¥}Ý« -Úô ¿5Å ~$˜©LÚÇrô ³µPý•„lÕ—ÂüHü¦ƒHQ]ºûY½ö@wmúiœƒ{è×zZöº˜ã¼|Mήpíÿá¬à‚æüì”ü únUt»å¿6?Vßzý÷;û÷jñSØÍ3EU7èÕi߸&AÃ)á?¡ƒÑ•nû$ðU\Ã5;ýªà_:—¢Z\©±&ƒY´„l–­vL+öD`õ°ë~íàÀ* ó:þ=Ȱ-wë*Ÿ§„ÇØÀ猉p¿«×;Õ:TeÊǸš Ò:Éã½_§¨î×!»½p¶x»-š¼Ñ‘¢pqýÑÚ/®×1½hž‹ òÀÀ “x‡[ˆÞ‰MVaN«_©ÄŸéëf²T-8³£]f"_J1v;º/êxŒ>ý-üFÎ(³¬>(† X¹3GÍÉLž†úô‚+œÙÏü«[!Ò’yÁ¢íD>WÛ9öÉ„ü /Ág÷òH\Þñ ¡‚È´ŒxðÐ×`€¸D”C–ö¸^£±“hÎjİJ#•¯½Ýbš$iÄÐ’“/«‚2(˜Ga¦!:ý§¯SLrÉËÅÕ"Ap¸„%ÁˆVTÏË3 «ã¯@ñ-ªQñr|ûáÊöÇc©š#T7?zŽ¡‹£$7?æ‘Äå7ýÜ ;FÀØ#øED+]÷Óß|aW¯œÕÊ~·Üˆ•½JŽJÉzö¬-ãö<279V›ò9¯Ã¥B¨É»ß™õ,Þ•Ïb5äxZ¶;ËjyÛÅÑD·‹ žÛ… ùù,ÎR²HⶇØ:–m¤ìm‰ó|•ªC|Å«»TOrU®3¥«‡Özµ;îY¼Â©‡ÑpïiL2tQ¸MÇ # ÷÷`âÑ=ÖýâîEßðQâb™'@OŽÂ}Jûu«9 ýøq3òùÓîùKîËÌiñh!û´q˜}™älYåÈÖˆkÇȹ´É¶êRsb±T Œ¬ê¶hGj.èSàóÓë˳âæbz‹.¥@v =W/¦÷àÅ*¹„+cYEQú³ïé}Ùß!Uœ Ó¬øZ¥ÓbnEØ|LëJ°."HF@š#65»už×¯T¢ÙX‡Y5®E3…´ëmµ>àñŸíè觨‚§Ÿ`ŒýÃ~‚{º»’5oÊ0ô4±"COU}ƒíóº/®Ï [ÈÌœxMtÁ°jî$ÖI×ûÞ8ß—ó&{YÛÇr³Åî?¤›Ê¡ J4‹êÙu ƒPç5£dAÁp*Žy¨F1°µm?m¿èÛ œæ´qÞÕ^uf=›òeõÖÉ‚ï4¶ùò Ž¡ P„ûµëœ‡Ÿ.ö7Uôã¬(‹xœ¤xíø›´ÝâßQ]ݾÜÍ–jlÈùØÆÊÕå¢ÄIÌõé—b©Fžzçćy~:WÁ CJìÚÅÑ\ý2q®åqå·CsÚ.2Y–Î3ªwT@‚¿SDJ‘GQÓà{˜ªÿ\ͽöiw™i[t¾i’ÇSceìsDQþ^+&º{­¸qÛp"žKv D!¾gí)wã'ÄÔº± NsÏ™Ô ½žüzó¾ê³þ›T4þlþÑe¹ž®:·c›\,§gW0ñзŵ¤‹Šcš\«ãD¥Sý©}<¿Õ%lœA|¨6OØñ°ÿAOBK2§3¾f p«@FÝ&˜‚eW·ónßYO¯cDÑÌ9ÌWô¿ÀUˆ'“É®6Êý¾°°N2ªâqõB2U<¬^áfñåA8o \ Íß»: Ùø¡ô†Èø‘ô 'GËjUn8*Yßfp.©¦"£z}”ÖjÒå~ìuB*Ü\½ü«£Î¿PÑå_©/t¢s•l’c×é$Û€»1…!Œ•Š ñx"¹`+Iºæ¯¾±-ÀòP/¦ìÒ½\c"C˜C}§S:tTÍ7‡jßÖãŸXg•™W›M6KãòöeëzÅÕ.Ñ”?Ä3+Øô'ϤŒàÈ8a¶2‚±bijxQ‡ ã€,J¶jϹsM1˜R¨m)HNÐ^7´±Ñ&ÔÆÑV¿—ï>ÿg¸âÒ¨÷9@½·ÿziþ—×aëçÎÀT߸…ÖX«<„¸<®¸¢w¡rö£”Ž¢3JeŒF@a—¡yU¸ÃËk2HMl[ ^W©9xŽlî«£|‘Íú§}ê‰}œÕmrÜç¼S¨[•쨋…n‰h‹Ek)d†«ë–S­ª=Ü_ÃS+X"]Ì`Y©Ÿ«#+í–oUÅ‚ÇÉ-é‚-² ˜¶Â+—X¼¸ëûý²øñÍ?VΜ]Ùã8Æü0¾wœkÀܽ]Ö¹p*Y °„‰Ñü±x¬æÔjÄœu?ºBÙ{k‘ý½„Õ¯½¹qlŠôpStT¨DhÁ˜Æ;ÙA„œqŒ ÷;ŒûI”qknÉ&d@ËßfñcÐÚŸãôú¶0ùµ¯|¿MiÝoCu{õ_{ףЕß.îÔ$iL¾ƒ`ù”&üI–0¥Ú·ª£Q+KÝ@lHô£¬Ö‡jDˆ•|Äö0/sfùœ¦#ròçø§P¬øÜÌk4Ñ´Ïj©)s‰¹~ÒëÆžíª…7éïÊYbUê X!¥É A8•@/t'\ŸLLOUÕß T~WfE(7zÃ{:]NwñîÊDr]³)êÇÇ»\¢õS"|Òü'} ’n à­ûU[®½E®*Õö µm(m{V ®RЋ2쯷4Ò+ ê{ëÛƒ»§Ý‡£ ­¦uÚ ¥ùëœûüF;È¿k›„NgYVóèÓyO†à.;^ÊTc9ùÕžat‹‚^¤[´õžü†£$Üñè£o«¡ÙÖ>Î2Q¨¦æfºq8…G0vÑMxÚ«Ñ|}R©Ý åPá=!Á"G':¥•J˜£• ¥âOVT™UpèïÔX÷GµLÍb@¦ädѰêø6Vóƒéô“À¹S…‡šSpß,Ýà™P áúÿíªþ°‡Æ|Š846eËüÓ‡O‹W‡úÀÀ>Î¥ ~‘òHHAÏæ Ä”Ð[X>¯î‘€1†;‚&õù<#x¨DŒ1"îªOZÓA5ÄûTb”*â2©îÊÍS_/ºŒ£Îa¸ ê†xj˜¾‚•¢¹¯g¼N1 ‚œÍƒ~F©<½¾t¯n[!p5O‹tÕqžP÷+§DÕš»iÆ=Ë¢Ê|3e%µôÐ;³e®m™ìhý<‘Í<“®l2yHAÐæ 1SˆLJä$ÁÆY"”<Àá=ef©wæÄY\b%|bîL{Œ¥ëg0AY\¡¶.ìòÞjFQûcà§9³E¬¹Ì† á òAR‡a^Žjv­Û´©kçc@†=»eRÈ{ÉQp@hü¥2¯Ì—É"u–5»+uQãœÅ%ÅŒðþ¾Î«ÕhIÚ¬f×?_fÖdÊÔÌ… ldSYjs¾Bçûê€EÖ×fYóç¬ö”*¡ê#SÔÏ >³mµu-=–¦ÔQ° íd1eÐôÔr;ÕèÄRÄ7Mº‰w|”š}ø8KÀä °˜šü•*{¿#„ªäþÆ´Êß× ƒ³òÐ7„¡Íjþce$Ñj1`Ov ؼ&Ïãoµ[×»*ƒ²u©šÜŠ sA˜c¨åtvƒHŽuÓ¬~°Ûm÷}«VÜY£S-ˆºùC,êV¡2«®ÛÜWOån™éÒu¼ˆ  1ž^ý\=î–â ƒvf¥ú@‡b¢*§W¹µØƒËª¬ !›7Äymï©ë«í1‡SÃ%Å3D‘GN¥/º>Ä/º>È‹®.tÓ5©¾-Wªõ-6Í.sn¸„ b†Xò ™íކ8|rãÁ–pà ÇM§̤ËÞóö­¢`KÓÍ Èît37°Ú_©LQó‚–ɢԮ΢ÓA˜ 2ÆIï¦ÄÑ‚˜›?Änz®PdØ“±§òÐ=Ôû$1‹‘tTê‰î×:Ù¿=–«¬I•³LÎßÊUÞ„ e}}Ð%3úµ›¼¯ì±šß5Mj¯ÃE "”>Ä‚sÇ(<–›Ñõ¯Ègµ"l»ñ§vŒ äv³r±¥èö£òCœÖ#rÀ¨›/8KÇòe¢UóéoSi•ÀüZNÀe¶¯gkz,ŸRܤ`gó„]½¢›Û9CýíÕŠ=š™Áš ÏegNAÉl*ˆ ?â°æ(¦4ÿ^Gßéy¯ô¡7ú‡y¡ª† F-ýäKØe­ÖÛtâ5²b@BU¥os0ò ®q.‘n;3ž f]ß´©¾k¸„ blí«Oj‚.'Š}YSägUFø£@¼[_jÝß2gÃZjN®é‘dGôÛéè>—‘9 Îù |œ«>XXðbB5HÐ}zv¥¦7 þµ ‚9ªEX9mâÂ|s9µtY>^7"<¥•¥–€©;ºQ¤«˜óu«¥$ÖˆUÿÇa¼Š|V)V\Á®Ú-x.SÚ̹-wp¶Í x Û­¢Ù%õ:0¡ž3ÄòUõ7ÈëÌ\ÔûO—컦xuz6•N ±Zér:朂>Ù®z«%Ø%ÂÌ ¢Ï ˜CNLH±J}~fæÒ¦v”Ãm¨Ç.€¾uý¶ÇHÂÀÜ%‚!¤ ‘Ô°Q’7 ŠÌs˜6ˆöh9ÓÎÌ ®Ûæ‰yÝpÀ$³Õb<£D©Ù»NÍ!Hû1ßÌ`)Ÿy€ã¯åüËT1†tž2ô­8åå•ddjóµo/yŽ _‹vë‡%ãDa‡ä¨ „T-DÔ$ŽÕ:‚˜r¿ÑúcªMx3µôÉ®‡¡BÆõA¬>p.l£QÍŒ³;’WŠ‘_I’N„Iòº} èi÷®Ü“^LŒ¼5¹|(›¬/ÈÃzju®ÕüsõTüŠIõpŸ­‹%nõÃhÐ ÿ_:]Š qê®RÓž£ªÃ)1À†0qBSÌ‹q‚ çÚóSþg3XÊãâøÃÁXëÆãÔPoâ?–V’ß~N1:´†\ΖuwŸ_Wƒ¥ußÀ™å¼ì²zšXŸ„ˆ¸%OÓ½*ÎuúH'€Ò¡¢‡á1B~¸h¢C¶[cdذÖn.f·¦Ñ’Å8–[•¶Œ¶û•CM+óšYýfpŒÑÛ7]¿n«#›Ü`)bˆ³$¯)/·ZQùÍp Ì I¿A ŠéV¹?Ìá”ïI@,êìF9VЧƒr“¤/œ=W µhåqÞGÚ»”C§Ì²³!´áºd²l¡©Ri“Þ “ìçœÁÔ¯Kï !£RñRÆQû9Æ«×-Â_®_³xÄnTæ?È áò‰ª/‡Û˜É—@{NÏ|aáQþΜ;m)üèbŒ¹¾zz,éX¹8_éQÕÓ…L’ÇÓË 6ôþõõQKk¾XépmÃL)·ÉöB8¬.Àñ݄ª\Žùª–ù¬RìýÏÓbÞ4}!ìþÐ臶ªÞOÏßN›MÙÖÝÛz³9l›® {C¡}ZÜ:õ1† ¥¢wõ¨ï!á v Û¶:çáóz]ïg%œô§ŒH ¬ØË´Õñþòã–AÓÏ¡™/•JûmŽá¤Þ„ïf¬üü%ë² •˜«ÛõÜÌÏ›p-Ë¢Wâ2e­8^"d$0ÂhiY¯VU s%»”n+8sÃPZTp%=¢%B/>Œ¼¤ÊH²”0áð‘úìûz·&s‹O§äœj>Î|¹ër [h„§Ê ^5“„“&Í+N‚x)G)©2Z%ªã: 5„¦‰ÐQ~Ged«J*ïÒ¯ £Mä2‘àŠ\a˜€‘sÓêMCR”Æíú슱Еi©|¹½æ'UÒuwÙ5"°ë:¿žN?‹ªX%¨ôíaÔç÷ 8B³]6”„oz¨»Zµ˜¹šT•~Gþ÷•šH…(ÉDO’ÎÀÝ¢—·BÔ¨á|ä¾âu¿ÁÈ¢Úõßt.©¸alÓÜŽ°h¶ (¯V|¤O'«v>Þ~©¡„“Œ(ЧáDeê<Õ‚1¢8¹3õ•{[9¾zþ†#´‰÷D¢E|B.h˜žV|¬—Õ¬Þg1s±>%ÎäùEí<àWWn«$(µë,·1©ÃÝY ¶é ªƒ`IBf‹:¸…@š`äÁYc=ŠÈ/5ŒÁ¦#—¢´ù6ãÈ;Yœ¸OÊ«¿”|_•ÈéFcÜÖ²!Êa¶²Übj´ŽU“â¶é:1Kfa#4´»5˜f$ÙDÀ’”ÌŽ~HWêCÂLFv#dº£Øt :Ý(Ÿ.EüYÌ–‹2›“W FKC3¦5ýòYØjÌT£%ŽZp!Q 6÷ùÙé)¶ýb?«wM6[¯@Œ­† Ö£È wWnV³f_íŽbè—¢ip£\5ATáchŽ’¥” rXæ±Ø•;HòˆìšeºÇ ©’uB¦¯l_¶}µ©à#¥Z“,{MN 8o'ipÉßARßmÕ–|KüÉ›wÌ,?k”±!¡™;b\Ý~ÖŒÚÄAÓÚ¼eˆu™˜ÜÁ¶€3e^ùG‰d1ˆªÕ(cï‹M †â]—¡z¨ˆC$ Z”Þ| ƾðÙe}"Ò#DyÁ'ÂR @ Cƒ¿ß?ÔÕcR½“º)Ã*¦ß&zÕÒ ÑJe(”àŒÂé$UÇÐ’“ODêý'³³äVËÀûÀX¿tÑ-Í+À:¬l®­Lä‹tc4´!ÅL[AèÁ$¡±R’Z'îm°A‘ w¨7Ð?|¢¹oÚþHŽ~‘(A²ì )‹Úf•±ªt`.ȶê7ìûÈ—Æç&¾æ]Ùçõs>Òѯó…/§·Ôϵ˜’¦o£Ï¬’ÝïG|8Íø|P0xË£ >ÌsÉ L®wp”~»fÕƒÏë]OISŠâb.Â]îëL}&c7†—öd“ ø¥MÚè2¦ˆ 샟ÆÃBõÓëC•1ìPÉÈfŠñp¦z{L¥ÀÛÐiãê1¼CÆE¸Ë-½]j“ê j™;ïÉ]÷w‡Wú,ïaS¦g¶ä0PÉVï¯W§_2¦Cen$B²Røüç쥰m`Ï ój^!À²ÞüåÍßÁc Pj•\íºÔp2·”|€h¯œÂGÝÈó_ ¾Mß6 ‡0}‹3̘1ưnÞ:9ÊÁv±ÿ*élÕòrq—\üø0CÂd ™;!DUÑmìø°K¼ñyälâ8‡‰ÙÆ¡¢†ÿI³šÌ!ð‘½JOlKˆQ‰Jó°yz*Þ×ëkL!'9±ëåóM³¸WÛq¿Ž!ŠUÚt˜rí ¢ù[šˆ¾5Œn@Yt‡V´»eµ,æOŶlïU—/EjÇ»-‘Ï$ E*ãOsŽòX÷w”fU O¬Q%‚ÕPšUtsPÏðfSÕ¾RÏ´/Ò÷ž°Vã£Úþð4ýZȉ¿ß¿R=Ê?ÐTPó¶ÜÁ<Â(Z”Ûýªõ0âAH¥NÔæse±U ®1šâŒ3…–=ù§wGim6CŒ(ª'ýæä …}¹¿íA´"J´Õm»âm±Uÿ=tp8‚!Ð5 >ÇÇz©^`¹¯­òjV–¥!aßÁL(È]æéé)¥v=ØðýôËéo—j’}É“§´ÙvUä2$çÇ“÷ç3\ÀTç!áº$ ´m– É)Kp»ó2~9·8 ÇðÎf‡žáž ýs øÆì½Íci&É…”\¾¨ªæ«ez©ÃF6Gžh~8?¦•±NÀ,<< t¸ÙÐá’œN} »Äxˆrx9;à.)Ìz6³õ~V®¼$ƲÂTÉ飹:Y•Ûzóô‚†¶Þ§9…„<6/R¿«êõݼi³ª';õ$²=Š:ç»ÖœQ—Ï{„´Çx_zGÐKÛÁ C*Ã>³Õ'íá}ŒààZÂ:”Uí(Œ[Å;ú—›å>w̉b 7W¼*›v~uþ‚O¤ Fh 2ܹ¿ŒIÕß%íî~œŽ3œL† vÑßMn1íyƒrõ°ßÍæª{ÞÕ VÐò²Y’Ù¯×_Š_ÿzuúÅÄã»D·˜«Z}¯~ýrùÃñDS½ª‡ò(ý+r|þûÔÊÚ6“UÛSY‚ÛÍ îåÀ|ß­ÁcÙåÌuB Ë.˜íÄg:+ªÍ#¦LŸ£^P\w'ãX7[1Z&4û§„rf è ´¸Vÿ”´+®¦Æ¥Þǘò•ìÁ‹#Ó³ëcêŽñfl‰¾¬æ‡DŸ?7Ô€ÓãÚ#C¶c'ȳ¿©-§)â£üƒ†©ÚÀþ€'4ŦYwÏe:np1Žr4æC5 €ïR¿‰#åat”·=Z"Žˆ0Ïš; Nb3†ýÝSW/àèAœÌ¬ž90ZÍM·_岨*æJ3(¿-wÅ×éõ1õÑ>(Ž!ž=1«G¦eu|RvõNV.ŒQ—×ÿ„»Æêÿñ̺ÆPpØ|H !ÐY|•Úò‡¼‚󎠵ݔ묙v4´D–¨ÆÏíàÙßÊÌ|ÇQ¬Ë.öž‘àó^æ¶?$(€åѤòÛ_Cš\Í»ª‡:×î‚ NÖK3¹:ÓYã«´!F]ßVåvV®!>OŠY,ÊliPo+˜þlÁø˜B6Où<ªÕ74)Ëäê #d)_°5Yg=‹dÎlb!94Å5Žò»ïP¯—†ÆðÚ‘‹C–£É|v?wdËC— ì¢,MN—än¯ H‚U G¥z¹$¯’3ü¶t»÷ÙÒ3ƒØ| À.ÍeôÐæ°²(‡¤ç°ƒµÞs¶¸Ýçç` ;JÅ`øG™¯³Ùlæå"±ïâ¡þ?ÖÞm9n$ÉýJ+7åA[ÒººDµ@Ä×aØÁ‚ïªß´§v#êTJ·\ i«†Púež"Ê&‚“+,Ó[cÇݱ;NÒà”éÃvŸÑH1V§üb\­²4«·ÝÁ–1ú㤕û@Àˆ¤)6þªIH¦¾‡ ÑX} «QkGnéÈ*ân+¿j_ç µñF,²†=.ñÅÛ'IdƒUᘵԣ}ÆÄj_'3&ãkM©÷™wûð@†‘uñÐïиxÀÕ 57¥5RˆÑ‡…ì±µŠ…Œ ‹¯„Œ¯ðŠ3è_ëe]—¼§© Ëž§\8ÏûC[ßa:öçêV…T̪ ñZŽãóg8’Â~öŒóêšñPH͇vD$ò9ÄVݱ٢•Ä™Já-E!xJ¯ìŽ0k-ˆµ{„ô£‚¸Ôbü×^\bPÈg€G胊*5Œ¶¤¹©Úw2ÕŸò'©4̦ 7Éù‰º«^û„2¥:aÁ/Ò1Ô¾ËÎT S_˜~+µdœ¤[:é¡jaÓ}=6›Š‚J^—øÝÞ=xD°–“Bªhü{FËÑÙc2,˜% B÷ùfƒ“UU7*#N+ÝxËÕJ¤:L=ð÷ô¦ZÀ&²[†ý|6S_ï§ûôž~íò3r¿AïÌp­FƒólÅŸw„%HÇ5G*²©Ç/L9Iî99ªõîXÞæ-§48@ù²‚\Ì®Æ4ë’ßG³='†éõCŒ]1¯8#'—¬zs¥L`ê™éä^B)våæaÌãŽDARaC†t{]E¯›ÎB|ËÞ©õ–¾KVˆTÛŸê®ÝÔ啸£H1vFKåÌ/U‡!¶ÃØŠÕæR®G—-Ú §O  ¯õž ŒN6y‰^,«KZ5Ç­cÏé4L–±¼Ã!ص,3£JâòD„,ôui¥ò ï ¹èLÌ•¯êz¡ý‹C\ ›0Öcè9çü9¼cÝv9BD˜`±Ókò5KÖ¬×üXÃŽå B™eBÕ%à„°îÈë7V@¬ÂÖAk”GgS€»¢!jYºµ¢ ]²!¨ ½ÕÙkTGe8"›‡ù!Qªv Í埛~8 ÕÅÍ—…Ã|›§½ q&nè%‘:š)fSà7åÃ+ë;õá©YÙžX ]C ófÐQÑ1ꮜZìFÓ¥(ƒG+·Ñ:^ú%æe™k"Ïá™™©§¹*u°úŸ z•a|Î=‡‘'P´‚MŒ?†¼ÿç¿þ{Šr›æsk¿R7x=›õTÂy 3öƒøÏÑžËïˆvû]'¡¹kÇŠÕ¶ëMón3<ö˜K#:üHÏT´uRº~ra[ä¸SƒýÂõ}; C ="äquá+¹U¹ÝŽÍi¾þÖc/&G˜¡WYN^½ú¼E¿[³˜˜Úp”5·û*~VÒ¶N|¼Ùñò‡ÛåTŸ²M’`i(…#$ø‡råëIöBAö³ˆÞ”åÊ`”®¾&41y9¿Ò±(>þ¼pÌ™Cò΂CÈA) òõË¿fŽ”³¦q0œ‘vìÇågE¡I;ç½|2A«iÔ@¦KÙ‘Ö­ÌÚº‰itqRïµJqm¯_=c«>ï§v%àB_Kµî‡Œ©‡˜gÄB÷HFSzVu?â¦Àí§[¢¥ŸŽ].ú‰ Òšt1Ìyå …bÔ®#¨®|8å• Óùpâ*EÇ0¶2tÔªPûîTÃÜÅ®òR±;NPJÝ1KÄg!wÎßè­ûÓ«7“§Xa09®úÌÕ]Y%d5Â"«èjQz•ŒÖÚ»Øó*6Þĸ±„!ÑÅdT},ÚÊ—Þ‚be>)ÿNÄëüÖÔ6Ház_÷©d›T®žJÈ~˜XÀÑð ý©h2ò¢ÆôëÝ—2ÒPîð×™¨eŦ?Q?Yܲ±ü]ŒaãÄîŸhØþ²‹æà’Ù.˜©E6Úõ²¶?EKÁ9<ôá~š GY6úÌŸlÂë"“|d›œ3ÆpÀ˜\§ øs®b]}%ï%ˆ5d¸Ô¼)˜r’ …8úÜ^I_}ýæPòÒet#D™iµ¦£Š›vþ¥UÚ·ëB†éW§Q·Ê«‹I¹æQËë—Ò›ذ#u»ŸAÕ¿*H›âØ*•ÇUÿŠg)‘BPµ;"Z/‘ ÿv6wgyí½¸Û“6(¹º5¾ õ4 ëVÉÎä8 rÓౚhδ«Å— ÷çªföFòè,—‘)•!ÃÑÕ°fŒšðlNçgþá'™ùîIÒsÙ*“ÿÜ*54 ‰ˆ»û£3:=¯ÊqèTvšWbûú¨æë5‚‘vk5Á\ÿ‘š.b&ës|)‰Ì­3)¢h¯µÛìÉ3?Jâ ˆ+È\†ÿú¢½ggøYI`ÏY,ý@>‹ïšgàB*IªžS!'m]_’;ŽV„|9~™ßÊj ׄ«g›úAŽ,jn0W5¶b„—õ]ÞóVÜÌÄ ïÐSÌZ™X¦Œ†ÎÒ¾‡<÷óªÁcŸG L={ò õüa ¼ y_ô[ÐùøP}GKÐs•6G·ç‹ê·f…¾—hа¸ü›Ï=7pO=(Øý ¢kë^@ r©.÷í¾(¬<êÖœýŒŠ® ñõ°`±MÈU©“4" ø¾„iGÒ1ÅHFè•RŠÒ¼ÓÍ8ìÅÏw‹Å§%¤Ä.{±r÷yæ; \ª* sߤÙàN½Euƒ™´r„"¯M3Šp9$ObØ‹:£øù»Eù«é5®Š(/}ˆH; 1;‡•:®íò )¼&@ˆ.ÒÅþ ²p}q[ýéìß««þ,þ¯í"3Ž2Qpˆw©¥ó úà¬ÐîC?…ìIíý£î·ÃR.~S¤8ŇJX˜åK”È}¹û@ôvõf9›q:Sça¤ÒÍe¶"LÎÖCWíô®íÄ9L*þóä²i÷‡¤Wš¢,°Ü2¸ºÕ4yD×B.üJÌFöY:2Ò"K CjA dzøäÚ¬ ¢<î]/ª“SÚžÆ1Ô®¦ú.NK4§÷&Ü}‰žV[*Q=Ìi¦ž=ÙóéŽ1pΩu-«Õ¬Õ·Ø ¶ÚÍHi "•N.ƒi¸(1]²‘Ø_„Ás_‹ß+1c]¥{éPég"oJI"üà1¢«Ë÷Âií›ûº"&‡.ÂãV$`äÛ·Ï*"ض=5½R®u[ÕØóç#(`R5ØÈ»Suû|¸/Ý,©çc³þó²Þµ¹Œ·˜RHKIú¨ž__U+ñ%7ŒM§L&߈‡ãØ‹¯üQö–U»ñ¨äF…Ž“ ú~ÉTìü ¸k“š˜£³Å­ÌES¿ß6(‚5Ö ƒö¡/“¨™«Küð$GÒ£xœòtLœˆVrw ì™e}÷€ó4MH»@!ò"Œ©Þµ'ù™ÁÓ0ô+€™²Ü¾3Ã3ÎkÚ–µGXiI¢-ÅûY¬ëX¨ ¹¯Î¿ˆÅq‹m×£ÔµwÍúy-úžûax(ༀ“äÒs™(ƒºÃ*]üR}ÖWTŸÄ“_sy^"¡¨QÔÒÄ*‰éóŒZJ^[ò"Ë* ¿P×f ½Ã6; xœ Ù/ŸËбi’›†au6¸!¸S+¡®š®žÒËëÕ‡«Û×Ú׫qšFÓ­ŠÞŽ‹#ºµ$ü€ÌEæ3ø½§žÝ—7ëV\ºUH·2Mv"ývõ?Eoóáó{ÿùóÚª0 Ç[9ãFÛG=ý–OÆ\S±>¿çIÓ— m.ްè³CÛ‡›+ºúÕxߨæûˆÃ^€ëžÕ± ´výÞÕùY¨¾Ä^++ ]YŒVYtÊ0ÒÒäñ'#uäãËJ: Ð)!¤€§ ¢O Z¿ß^8š¹ÆbÇê(Ørˆ¸V{5a›m ¡8M`> ÛnþM¯0áû0º™Òô‘ f›éñÉÏ@9г‘óÏðÏ‹Ôg5ûJK¦ yÝ»æPãn{É ‚-'.6/GýT¯L£ÔÀ×ê©#uAEr'Ê;˜×BúŒzÜåiºPFÒíáZp‘zaÂÖVÿó_ÿW^Xá…Óÿü×sviBœ‰i-ºè]ÛãOÒbè {æ¨}WËD23úîÔ5¶~‚(ØïZè;n5@NFá$ íÛnJ2œÇ-Ã*Ë>@q’í¬¨²Pˆ _ØÁ«/4ïú[:\ëtŸ`üŸp‘L:‹­¿¶0¾ ;!,áH¥v¯B½4ãY"OIa›BFd„½Š…^]ž…Ù•¼Ð 8À/óRo²ð»Í{Ú`>ÓO`bW](ƒiŠ.á©•g ’c>Ãæ«WžW¯çÕP&|!‚EÑ{pqV½‘äj?X駤ëG0ü‘õ|Z©2›fê½·u4Ž[Ë»š÷/à–³¹_ï—r‚^V‰kÏ*\OS+pÑ 7Q÷~ó8fØQëëO·ÕIFZ¬¡éö˜5ÃŽÍVg»”T0ißáèûx_06ôØüq‹Ìfã=L³Å,íö±àY<0+ö¶€ÓW_z±üÂEVß‚Û x¯~ƒI‹ÛBð‡ƒ=¿ÉpÔIÍÊäb"s?lÜÏ—ÞwË?¾h%CÖ¢fèó€÷RZ].–31Òð§Ò:o/ú©”5«X{Š5¤lãÉ« ¨ÃÁU{€*!k?¶'tâq3ô­zˆ´RZí˜?±‡+^ïQœ_|Æ:·•¦UH(F…wñª!Rgµ‡Yª©k\Bo;Õÿ€ekÙT7õ*÷6g|ÊTÉ<âʶ!k¦7çß4Ѧ¼ës±‰&;9CÜÈ'Ü7‡B åÌ#gÆwµo’6W ²bÔÉp øÑþðFÍÓ0N ¼ @«áƵVŠöŽUtä+ˆÒ7Âû¬ "ØÂoÓ­㋨³çRª±k8]•ld2Љ:ºŽ58zËy43í'Èhàr®¼YNÇÕœo3ç) ]y­7u£bJq2$D=SYZE§óSrrJÏC4ŸÜ4äT4 9E¦!'œ†Äfd7ÕwÅ"Þ™ƒwyþ}x… ÊÉ᪌Î,a'À À9<¶ýr_O“·s›µ¨eC…2U–ÜmÐfêÍ®íÁ¸«_Rƒ„/ ±¸|3µ PQ`"å q* Á=Äÿ§žšøË‹@oî‘ñË áÜ+Séó"š3H—F¶©ø0Fb¾'¦¤iyܸ 2¸#‘Ì›³¤RGÊÐáã3Ch{¦;­ÕÑÇWªæ;®àõjÕˆ!.Ï"„SJ©Ä 2…CžBèä V¹ìÁ!ZJ¾†#XE•RC6õÆÕôöƒ…†&rŸ2.Ľ“i™™zé}$°¯ÇZ,eÀ8)w–½Ê¯&çÙYò.9¾ˆÃ}¦^Ø0M‘¡”’““þ95¸$@’€ì´‹66µ¦pOÉ$BYfî»cÚÝ gœÀ›3)cO)¥\VKâ‘¶,±6K_¢9…AáÅ A¢–·˜ñï6‹_šßh%TX(nFf-*uj×¥Õ[B.à‡Mõø=‹ÙÅyÍ1Û–#ù0«˜#ý€_®h¹Ôä!u%çC"ïëó{•è™›®Å Π–"E]`)iÌ͹(ÑÛÚñö®n^D/L,@ ýr)=«²,ÉpK2ÜôÞ„¸WíSVÑé°Ê•÷á&4'î‹fÄ}d>ÜfÃT]&.IS’€¶ ' múM‚ ;Kó^÷i§C¤h˜b[»cwh1Ú˜”Èèy2Ì܇ÐK(k±vPØ ê‡B®DZA M¹6 ®nê}›ÑK V+ÒmCOø,ƒæüöêŒ)̶¹p“{Q‹³D…’”ÂM4£pN(lm›y‹3¡-¯ûs1—ÔÒ¡BÒüÙqüŽ³â¯¨û©œÖO)Z?iýôRZmÿPos_ G2²ÜñÎ'9•i,öÂ××mö96B¨ˆBRŸ/o)Ù ) Ûm:l¯"Dd9©U0ôI­2,·:J«@­~*$'#2è÷Õ­¨h!£× Zï²ä4Já‰~ bb6ñIꣻêBLß GýÐoaP”ürqË+¥«WM7eX2¥&‹‰ÕدÆOÓ¼)Q_Ÿæ¨]åT®|u+óè&41ÜöÒßÚ4®Á÷²ksï~×úï~×n“OWCð+]ÿèÖX½º¾úå5âŒv®9bð…­Ï3kƒëÓ6™aŸOZaªÔäG…q™gcgj÷›ŒÖýÆSºß8ßÓ^,ãᘩ?ÀÊà!ò ν0«–œs_xŸ=솚xpkF%í¿Ç–€ôß}“í=­ïÞ;\<ÄÞ¯»ÃÐý9©ÕiźV|bÂUýróåúCÌç|»Þ/WµäĤ>oFGkåž<Ø×Õ{‰ÒÉWÎ!äH¼ÉaQ¸¥äȸVC©?êÿOÈ›ì5—i2޶4y¦£ùhÑ_SC÷MÝîÅZ4¹#-!"Ëùd‘œˆ:—Kš§ç “ÔR¡Â —oz PNæ8vâ=ï3<8ÊRPåQíÃÚ¨ëzÏWÓ1o¬õD¤½û¿ ûv=½[.Ðyúçk¹jS{vjv{\ d€W£n›®Vm!Jo@µXôßË•îQŒ;M’Z!/BkÚçÎ<]Œ&¦JƒÌôx<½»T‰äRZ^bÕ'wN¶Î–É–î‰=®ž¡„tž¢b«IÜ"ôM± ¬/†Çæ2“Ú+Á×ùéÛ·Û7øÿÅhz¿ÝÂòö—¨âtb(0je*¨óêq¬÷³BÜvߎ}û¤Å8L¬ëã¶=äW§Hi4Ÿ=TËíÆGØþ?÷aÓªhÆi5ªi¸;ˆ>³©^‰zÃ*}-ëµAç5Éê[”ދƯòx¤£í݆—Ò fÉMÆÜ‡¹F{ø$¾.jSæR‚ÀwSž …1"( ”N=$ßó(yê¢všŽM^)…1¥(J¿·Í£Öˆež¦¢ªŽÔ1Ë# ´€ïÝ4a{ºFÑ=ˆÎ ¯™N%ÒѦE-w•ú¯RÌ–X)eÍŽ0£Öì\EÅ™Tæ |«æÆ TçÍŒ€M8Ÿ¡p«’Ù¸$2Ç>Š©W‡‚ÝÜ(V~5ÙhÁA RÏD¤µÉò 0Öw³ÜÔÓýj¨Ó[@¬ÒíJ‰z)ªŒ(¤ÿPË¥Tì2Ðâ-ó9dmnƒ@®Ûµ³Õz•…mujk}»îZÂ>¥U²wá­WÚ™Åy?µàÛ©ì"Ì)Ïš’ýÂýO[}ÓçlUè1‹?Oé7håæ¶§Fmëâ¦T$oT"ÎÚAŒƒ0#ê¬21ü¯‡1ùÆ8D©T…ÊøËü‰=ã©ÛáˆñN &é–ïÓÁœïÝ Î÷2x3žW¸OõIÈÈs‹ŽÐ·×KŽ=øí¾ ù&+®ú±i·÷j£àÓ9.;*µÈÕ.ÊYz‚€âcýFºéRÓN"V¬D¾ÿv\a`Š`¢‡O€ez¸OMÛîùt힦®¾nFpX¨»êÕýöuØð¾Ý‹Æ”b8B©‘eÁ3¨ORF*nØ5«±y\®ÓÎu!œRG%6 ø;Ñ\Udp¨1t¨ i„¼žüµÈ&¤Ä¾žCré€9OxÀÅë·µûæžé“õÍóªÞJjκK/'’h!ˆàsí³ däÐ ߄ʂI˦C_'Ço¢IÈB;rè{ë}Û ËÕÜWô@êö¦X(xÿ¨ótõùëî]³Ôá^ôêÛûêÓmÕ~þbíþ*¹mEÉ-䵿ºO)úõ]²{`­ËXì W…ª µ 踚9¥RZ/ œª³ø ÄØ q Yîi£µ­w˜&0¡ÕH­ºXæÉ„ß,½ ¨l*íZC‡}‡þÀHä¦ .ÆÒp¼ÀRêêüÚ3RïqfOn£`«•‹­z’K{ƒtB¥Vr²"=uÙÚ à¸B]˜‡IôNÇ 5P±È/QL`\/ôƒÂ†Š›ö8»{#“G)F*¹$D¸@øeó„-aݵé…L®¹ùr"xiRÐ\c¼¤êæ#Ä%ëcxXÞO¡®ð®«á)»”p”iŽâ‡.wSžÇÝâp7¥ô[ã´þÜPá¡5P8,ð´TÒø„ÑìSöC2f±b œ‰a .¥.‰ º|_iÑäëÿãØŒÏ%Ê)ÐÑŒ"¡öïø/(«T¤_ìÈ43_ûˆ'®&!¿ È\ãprQZ1ÀúMß&7- à"|‚j”;3TÆ“á…èh”§Ëo«ßð_ú:pz®.3b3ˆÖ( aÇí±©ÌV7ÎNo®Ç ëõ™×Bj¥LÔ `ï”9¹™Ë§Ä÷¼ ûž·¥¾çj*pÖk‹\ÏÛˆëy빞S‡óˆ?´!ãÈØ6D¬îC÷öq3¾çm+xto_ä ~ô7ç6ê Þx‚Û ‰93¶åŽàmʼ;‚×ÏÍø–xƒægôS9£ŸRŒÊ|À£Õä°Êº€·ðv¦ xá{K{€·!ð¶Ð¼´J²àmļ}¡8\·Ï«Ü‡ôí¥²o LDÅDm}_¯ÐÚJM”PŽßqÙ (ôDoSžèí,OôB^9Å6ìˆÞÎqDO-¹©KȽ ú¡ë/¤ ¸¡»…Œ/zòEoã¾è¹JO;¡·'ôÖuB÷Ýî¿ýHlæëýi,šT¸0ÃÇŠ'¿ð(š]x8Êäå3 ÁÊc“Ÿf¸0Î%6ÕŸmˆ;Ì7Õ?ά†ÂQ5€¤dʧ¢rߌ¸UÑâá(;ˆ0 µ Æ3pñ!©.LƒÛoz¤·Rx½Y‚G * =² *üAß*nÚ8”VàÛèçUÒÇ»0Êêý|”K¾³ç Ê㥾!c¹ì¡ªûä7Æ!Ї*´,t‹»…i_³Þ×àÍ’õ3 á´:"!¾ÒcÓ\ÝžÓ(®ÒŒ'Žb •ßM@xÝpeÙ³rc9gåZ €ÀûU½Î¸ô`V‘øº>½?¿@Ç9®/³¹É!D;ÿÒ: Ô»}I­¹8®(R{ zëWaC¬&~Ž«•ð³ Ë{£ù(«ÄzŸ9z”€«:®ÖuNÁ5Pê+ù ƒÒn°ZWÕ…=øEãˆÁìþ彄ÚÝ&˃¢(,<°èÙKH_I³ @=Í‘ÆCÕ¾C|‡Œ+‡¨Øûsc‡X=|œÐ:œÌ=œó‚/zZª˜†H°Ží*’"ÛÅÈ… ±÷Üþˆº¼@âáLöо“±KÎVí]–O{`ÒÞ1d#e–ò¢ a0N« ûb^TE|"l8\f>ö.ŸZÍGi&¦Ü5ƒÙƒs î#ˆùÔóp½4ŒD7´C h¨e#(l›¦t8C'ö90ÂaBKÛ¬ §]›³u1š‰*5oG/Äô ‚_ÝU(õfµpÝ~xÌôTˆèÄb0?ÆÉJΧwõú¾íi¯(V%u1ˆÖ¤]½ÕgŒv?©U3¦ò'Z©ºù¸)ê««¯žC;=XꔬúÃP­– “mߢ%mD³ýfBÞ{´wË­þƒHS(À»ìw™=&™e¿³Ðá•Øp7\b–Ð4,›§¸Ö¥Øx(EÅ–c˜;ù‹øÔB³Y|‘æUF§L£‘PÇR“, 6M%‰‚øÌÐÇa†Ñwªs¶È.FkU¥Bñ¯0xhž!Ĩ•6Pï”#xGâÃ%hyzÆæÕº†«§×–ËjH†½¢rÅJ0º³’(ÿ8ð¯ïÒgþ£éZ±ÎýÇw‹a•ZWªr¿ÐPð•˜J`ÂÊ”GÔÚî)=Y·· k3noÜ;L?Ÿ{š³Ú‚@®Ù„i#1"Åd}8=«àlp² ý»®´Ä²iÇÔŠˆ•fQàdב£º Ë,´Õ_¯¾žTû’ÓëL©&‚ÌFó_} žòý5Å^Þ(?æ„p”JaõKf¤ À8“Ô#þs{tÆÉ!“ýòáû¤|Ö–³á×;\JvžÃHÊ)·óÌßPlgWÞ«ðØ; ¦¼f}Ï¢øÓŠ?¥)–…Ï¢—=ᩇⳘÁ¹÷Œª ÁOpÏIzŸëlÒETÃsgú³¸dÏeB8Æè‡ûòÊü‘KGu\`ôÄž _PÌ^Ê£7Ë‚ã( íl|^‰÷pü3ÔyŽûu–‡ÅP¢TÇ®éÈöõö¢‚€Ðæ ªx„›ÖùFj1”‹(닱î§;ë@ãÉ€¡pfTH¡åEÌh[_Ìù€²çscUz>W2CÊlºz J„o¼Úó8ú2ûC1‰Œ=†¢$"6s^HÚ>ÃÅ0å®FÀ*#]ÿK|‰uÊ‘#¤vUfu“0¯þö¿¦×^8c¸ƒÖg4QŒÕ%ÃÝË4µ¨ÍÇj‚€‘ÒSóÒx‰¿©¾6¸ö8óǘ p»kF œõ×DC{«Œ®RÄBÑ’e¤ TRúª¦[®:ÑÅ‚·LJSªT:Bð47¿¥P߈è~^wCý÷ #µf&ƒe¨xÔlj¦ßVvASÐJBe@SHmý›ÉM_¤Jå–R&asãÜÛUQ@›Nñ¤ÒаØË)ÖÍÔˆ Å»¤ÂPk¤"ê9ù7)©(!_F?<öxü›Z«ù(¥Ï–{ûÊ[‡Xè·(F_KÁt,).H°R¨£òC˪Ä$u×Ö)u˜TH6:Õ›J…§²V¦PR“ ¯£G¿ê~Í)ýå`Œ ^ÀG^·«÷{§GÝ6·†À-î ¦°iu+f§¢>uØ%f)›t&lÆ$™!ÞÑŽbOAÖ'„cküm _ƒÂÃlOhØ xNç@`Íâ™e@øEÜrp¦-Däy7õ~ ó¸ÔíŒÒ K½¯ýóåù­ÊÔBôqàBA'épåˆR,k3§õ<5ýz|Nî‹ú(¥Î–Û€`‹Ågû0}nä¹á ·Ú•z†eÝ÷á&™íƒÊz r̲}^ùíbù &Žº¶’ºRWhõAŒç‘ –Þ€0oIU%\}õ÷Érr)Rq2XUq:8O ëð0AB][t“WRíjšÚ!ÄÎÌÆá$‹c3Žu™)©ÇÌÒLõ¶¨~Îa’x½ 4M!sÀÂ9Ø1·¦ ýN#ª%0íUè´R]¬»€k[B—g´kóe ÛŸií P«¥"–þÀëri°-( 4ïªèå–Š˜p¦X±R+ H®y=AøŸÿú¿µ<øŸÿúo{ó±øH 3€R€Eh—,Æœ¢ž_ý®‹Ça8ˆ1ˆÑ›¼Àa#Ú÷*ÙÑrˆÒ¦ uàDù‹µ;VÿBÊ Ø¸ÞÂKX™ ÓÈïªß4Oä¦ývجÄ{¬E§[«ŸÇ‘BWy_÷[¹¹MÎqO¢‹2 ¸öò½ ¯{æ±Ë}–>ŒsRåùfÃVµŠ@®ª"¡·ýd.+*7ŠÛƒctsP®è5ô‡[ñü•š‹µ¬Fp&Ltû´Îcïê<ʃC®|U öÈÚ„¯Ù(” ¥f•ýqHê²b¥JÀŒF§‹3Ëiýuý÷oßÄ gß®åÂK<ýÕðÍj›¦?ºå&ùurˆÒª ½³£ëÅâïŸm|@ýB•œS“wùœWþRþSþLäHÚc!$¾²?cSòìǢĪÄ?}=ÓiW Å¢¸Q®Y!ðTe>ªŒ+SüƒC¥cun5fJÖž ãÃúÎ ¾Ö›vЗp¢ûý²YÖ»ÌÇêÂ,=- i¾âBMf‘ú Y«óé¹_ßCé=¯Ûq„”ÖüdŠiÉM/#XŸ–ž^*ÐF±D&XRÆõ8Ö6UHg[½:¿þåõY˜3\TÊ™`œA*gj›ãÒJ6í?Õ”ØÆì¨)Ód*ÇÍÉãᾈ Å¹ä„DúÚàŠ\[)cÀH·Á¥ç «Ú—Üqsè°‰EvPó÷o Ì#‡@C»ëêé~-†˜¢¦æ¡]6Fî­$‹Ë %™!œ£XûS¹4šI>4:L„Õåb·EÁÅNü6ýÀêíŸã‡9T¢_;®ò¥A %î"f‚üUY~ÿz#¸J·ŸÌÔ×ûé^, ‹«(x…C‰cÈ4B•»gôþ…2Ã×,>ì’! ²õ=¶²Õ6äœìbþMòKðô%1rî²üûõ'mØ©õy ‡Ñæf%³«Ä.;†‘»“:ŒŽìg¬ç˜h-tÌ^Ìe™I"”€‡ù©´Bªæ6íô —SøŠáo€^«z5ëaÿ\Bȇ;„À¶3õj±p_·cœG9…„v:s—“Nlô Œõ7õ(s¦ÁøÏ¦æè©ŸŽ"D$xh'9gä³7ªÝZÇåzZÊÑ>­>‚6\9 Õ)}Ô :ÍÚñrb—g}âè7ÏOF"Â\N*¥f!°Q€ ðÙNݪ ølò—…XVPjvÐÀ¾•f7ú³(¿ö0‡\{H3k-(šÇiÎ[ \dfߤÝìD~ZPL±[-óæˆ ¸KÏèŽJ½©VµXÊ®¥q9ʧ0›9Õ•­,VUa6Zžë¨JøIÍSuÑÆö ^ÈBŠôk èu4˱ùãØäæÏ‰+Ü aQŪ(ïJI0v]m[Žqú 5¡©>5EcHï²$XŒ‰¿ö¢‚|ÊP²ñ¸ §°¡Ìé#ÓÝ£×3†·Gé'çS0á_aæN÷=Y<äÔa$LJ¦lìõñE‹ §¼UuÌqÉZtó©[i»‰ppPÔhšÌÕ+ûU›Vi¡oMMN<›Ç±S€åÆDòHV@ ­ß“‹‡G¢g#T›bþXY킞vC’ƒ•k­¢Äå/®hƒÅö¶Û¶Âíæc>^¬zbÏ¥•”ÊmòŽáèrÓ‹¹PÛ¤¿„pJ7•°øª¿VÝ úwÈ„)2qݸˑÍSD˜ ;'nÞ ¼žû´E9pѯwgãº5Bº@„µ—¼…Öç‘{šLàdòw¸¢[åîHµ€²$ýnݵ)]D®ô@ Û}‚Çó{ÏaJîyZ±º£(ðºlå¶2{ã}rOaïììÉ øƒŸýƒÄU“wß“no Ö}.H©2Å40«ÌAs³øbvaÁ{ÂÎˆŽ‡ý‘ØŽÁMòsd „3OzߺC‹Î67'“Kºëb,•@ª]’-OP⊦ûá1£‡@¬(ëäv‚\ïS^Ö}î‘È*“ÅBÝwý#LUÊÝú¤BÑêd¡}—$Ù¹ývÅNÓ>Ùgº ¥Â“Oùˆ'm Óq‚ áÎ(ü$:˜º®õ5·‹‡+ Y™œŸŸëù-¦µ™öÍfIÑÊvnWÎ,A*ÌG™ &‰¬»2 ‰˜Ò¡bÂ޽ŸaÁx~ñ—GÖ\"À¦€CH3Õ·^CŒo¦0áä Ô; óÆKOáˆÏ¤¼(³àÍï(zò&Ûý²¾ËR (JËÉÿÿåö!áÄÛ»z×vÏÉ÷רéu”æ´ô¼h5Œ…ëç&‡IÍ£éhðTNsÇ$A‡]„ŠÛ2 Ìž"!À© ¼¤eæù§päoRî ó¿ç“YãåÍiß/e–càC "\>‰GïÔ©ô‡ï·7•ŠoP‰¹—ÞÙßÿ|~s sêÛ"&çÒ¶¥‚,P§YåÊØ(bè«Wßo®^;d²+À§` t[,Å'~.þû[ñb´-’£PÚlgU2Uªl¾MSPr‹•)vüdsÇM! Õ®E¸ÞÿÔÙInÓ)çò È Â‹‹[‡Ê¶Ív BÔ‹BŒÜnÁÕr ˆqïîØI—Ñ(Ü"„8`â[xõËÕ××`€‚¶ZX)ÆƒØ ’¤½Š³ àÈ!p…›7M;šow¼Jðï‡qWwòOíÅ Ÿ’x‡ýý4fÇ‚!Ì ”|<Ÿ_Á“©Ýîöås šðárÂìê—kš¼+5Þà=Jxµ»: f{x³©†œIE ìV€»\Ly )K|9d;5Ié™ ø‹‰°†½\ÐvíCƒ%oª‡vý  £²^Àe&dñX•6”D 4ýýó„¨ æ]|Jlo?Lû»r2b„rBkíù’÷Õ—ÅíGÒ’xË9Uú“ PŸ¢uýÊÕíé?ð½‰?Ç«®Ô<ÿ)•Óf ôýI•Ëꧬ~J²*³Ó'Œ¢V©OEÉ/0Jg†Õ~¾–2–ñO¡Ì¦4—8"^%.¼üS$iÌ3‘‡ w‡cN©……¢|:×ß~ÓëÃ,Úp|lžŽSx^ÑöY#ÐŽ¨Ö¢ÿæ›X‰"˜Ï®C}?\S 0¤‹u^bv ºRà ÜG %*9ÔyL=¬ð'U¥®Þ§zŸ]8PÕÅdãëw8höZsÝÓ/ÉQ_2j„ÇŠ‚!‘qoš±¨à̺ü{!Uš«ñIúQ¸ºexâÂõcMy09ÏÁR÷Ïëz2‰G«ëó‹äô}ßîÊ»ÿ˜ðbbRI·W×…P¸C‡ædËP‚ín(&øj“¦D½‡vêÀÊ3ÍX)ÿœ¯6Ûp”g¾ßÏŒËý”ý1kRII³,<(%c…t*Jßêâèjl2Yj}Ñ,Ëñx¸NY®²¡ë ¦IVÇQ…Jb2~ˆEàú#L`Œ-Æ•¿•9<¦]väµ¢]7ÞÅõ¯l¢ó6:Ó16Í9¥G5kƒgÏz|Ò}‘N=„±?°tj ü^c<ò}Zby›…ÇÞïM  E*' qqs}[Yüj#\úC:RP ëó@©ÏBC²ç’s$èªvÎŽP/–¥zi¼R'™.bà€]&aµÃÄ”CŒ»(—Ã(šWŠtY Ì¥€…!9?ÄÐÕÈ|•B邈i¬M|eW¡ÃèS*5—'%DÔ˜$‹#Frx9Ðwgi¸HJÂÈè"Ö²ÕŸ+"Œ y¯‰§p"0R^à•š;ž8nºMù\*ˆ&´¸œÔ̯—Ÿ/cÓ)>Ê­¼U Wuh-¢·à ¾³îZ†gUs'Ç[WN[‚/%ç­ûJ‰fJɳƒÃ®Íµƒ»=¶y8~Ú¯ËBLiP1ác˾ß^¤>ÒS2µ¡኉:õÖsºÄ²)œÊPT#–Ó:k«óg¾ŽòÊ €éÊ5ÖÀ%5(¬,ƒ‹J¾žÔÕœU–?¶ ¦Ž[|ÿ:ûØâtØ/7»d¸HÊÃÈ(›o·•*L>½¸V»ð–pp° ã Ìy˜â±Ÿ æA>Ôá¡„ ]šdñØéÐäÛ„‹¤ŒŒR`ÁßeFíÛý¡ßÈÅÌ«›ï^ÇITÑArêÐZ‡J¯5©Ðiõ®Ù­ô¡µa7¤ºÃw„ƒí«/û¦_Ü·w‡@jÄáîlÿúù?a2ß‹j—ë:Ùî«/×°ÿˆÞã¶õ }#g°ò½kÇæÎಞ€¹kƒŠYÿéßþTi¹ò ‘ߥ¥ô]JÎ’ÒW¸ÄÆ£Eü¥è¥½œ¤z™Qg±«\rÎ#h‰šÛí ,?óvï¹k\‚Ê£§äz߈­ÌÈ]0{œ1sÐ'-÷ÙÈ,]W·ÁÆŸµæŒ@]ýÖ=QELÙ4ÓažßTxh ÿ {?eÔûjÀ)¸akÅ Ñöº‡u“¬¬õPæC7¢¾$ÔºV_úæ;x@Úªê/š<¢M¿î† ¬ˆJy†¯à4LŒ%ø$à>€xáô%ŽwÿèÆ]L5u¡Ã8¥Ä¡JcäÕ¦Ÿ®ñêfzÈ.x¤wQI/èÔþg•ÛåŠÜÒ ÞS þ‡xÞ£úo-þ ‰w¨É$º²Ò—»†S÷P%C¨ntk+ÉuË ?[—Ÿn?„¸$*p‚?™n¦¸c×p‚êízq~£mLSŸG:C×o›„G°.ŸŸ2þD«–…Üp\†¾ºn:±<žª/7ÿïïQ“$¼EÞ#!#¸G‚ÎÉ $”¶Òj+7—KÆ5ÁG1&Ü5WBÆ;ïoÈhg@ÃÅûŒ·Q²%&©ØÇÓÌÖQhlÃV3Œ-çðûi¿Ÿ’üÊÌ.çpËZ^`”Ñ ËË9´JÃ'ÇÑ”äK(Ïe\Â3È.g5:ƒÈ®Î÷ÓCˆ@)é™ÎE7m(ÌäÐÕÛe»ï²<8ŽrQÒ=Ü~®^áËz»oÄ( íõKxÚ}¯S»ð:µÎˆvýùü—êûÕÜa-c éb f )­_øªöwëò-&¬˜ØÒÛí0‚‰Í]7<·7A³€z¨,1Ž£œtµ¼­>ô˜ åÝe;É´)Z6·wÊœ4»Â&ºP÷¾é—í´ž’÷.Hi7ÅV½üSg9Äh{‹åLëjÚ,÷ÛŒZ޲zU9i:´x¿¸dê6ÿX‚µœø!ÞÐ>£5¶Ê¹Xpø­í:"gâJê[m³Ë¿bPÀm&5w둷ꢷxO5ŸÐè%¢XµÃ“¢'¸2Ø1ÜÎ|24BT]_Êðù*²¾üÐHަâÁZl"Õ!¬åÀ¤ú æƒí¡{®22Å$¦àc™;ŒA;2ã€xƒTÞä,À°„Y‘±rÐ5ó^pë0 aŒ¾œz è¾E$Э|fñ– U­$T«ŸsI‰I„­Oâ CFóæRWº8©t:€ùˆ²ÿ,øhR—PB>¨¤ÿ²íZ^9¥ØÎâ™f˜ìb.Te\YHÆût4 IȆjß8‰é­2 "PŸ’Jw§óu yjé¥ùÈÌq´OċίF§àh?w•G]•¦¬ïtÎ`ú*ñyiHÉwĺ4¦—|IúZÖ÷éֳ‹4/hIYQ謇Ý<“s¼MGK²'/àl8$Ä -SmjcÊJîˤ‰0ŒÑ-KYr Õ «½ÅãT©6ƒ«¨‚öâá +‰µ\q¥ç-¹ußXîMz•£Ìަ#©QÏIÙ W<XÃ2c†BkÉ0iA Å¢SòFPÌ ¾_uiV¡0•P…ÜTýquZ…5XRòw0*ôk“yfTAH‰-Ûð'“1 2:)Æ*ÄRö½«W*?gâ‹ó#œ¨”¬‰‚XÂKùìOËônɧçh¹ùCü‚G„p¢X¢Ù5Oí„ËINŸ“D+èl(ë”#BâO2!^¨îáJ-hÓooWÐM.©âNBw`zÉ=(53éRŠ.ÄuÌ`ož·lŸ‚&í“kË®[Ê ^G6ãWê>½Éùu~šî#ø§ú®R~9Kòï×<–Ñ9¤#T8«þ ãR—O¢J*ÿy«>×}2ŒU¥\‡*ƒ€½?‘ôõMpCP‡Å‹¦·êRÖ“¡»r'gYÉ<6èììQ)ø=§bºøiÖ­9aá‹éi SMÿsÌxy‡|¼=ï€Ê_ƒÏ›_zº0þ´jÉYø°£»þ,ùìÃß»ùЮ§í7¢"Ô÷NUerY„2YØ<Á¹ O`1LOËMsW»L[ö`Z™ìϺë†ÇIU¤øØÅ#oÞTbÜU™–Õœæº^W_ÕÌåØë©T;–ïéöÁ…ÍdüÒ‡ø)þùËÔó$€¤F¿‚éÏõÞäS(R·§V,aê»»¶/šÅáš›NòŽ¢‚U>]Ðs3±àÀäÝ×OßcäºzÕtù.-wQ(YAk®öAðSšûLÖ9¾ÉŠ•|’»oKkÓA2JZ–2¿·õu~{åÒÈœ¹ ¦\MôjENA¬ÖÝq*rî‹¢)&Ÿ×Ô¥S„_)³(§P5i©V2Ç2u¥Têü®){õç:ƒeŠ_¨ÖÐc\HÖ\;=”Ö™ elŒpf=‰ë¦§"6a¡úÐÝbŒ¼‡ 0lšCQ$‘ª¥æIÔc_ƒ(Ø7³ôu”w9¯2õM*}“)ûóŸ €{èøÜR^è@ÁRrs]âLeºSsr·2F.¡ÊÉO0pÃÜœ.ä„Д“‡áî»äx%ó¡…p™#Íe±!ìˆMT0ÜÉðYF:W{Y Š^âñd yí <øòò©zI“ÄÈÙ/‡¾{F£¤U7À:Yb^kšñ«ÛERýFâ±~¥0Å#§ÝÕ ‹;u¯ß!/Í·3m#w”ŸMÆáô‘çŸPÚÐ{žÙü–Åäâ´B/BùÿõG}».®*Êøá¼*:©yÆNÍ3ô¹´õ€ .¢&ª0_)ôœÎ(Yûfܵӄ!ÒËj3våëaæÕ-¹Î|⺥"2a¡Æ‹å‰;·¥æ[迦eFi–LP Õ”; Yp¢úp~UXu>–r#ÒyUæ“›•ŠP U‘$ªã´“ Ù² ¡)&ŸÙ1ÈK#ôJ‰E)ç×ùÅxyç™ê4ÿEe€[ « Ÿ‚ÉT¤böb ¾«š±à&†•d<)ó5—"ÿ€H¹¡g_Kgô>Ð-7õ7MbQÕ*Û­§6¯0 J»¦¶xœ¾çîƒLEsXÊE.Ϊ3[›5úêTÒYGÙX‰w G”·xn%ž¹D¦é>í Â1"Rb*”YA݃G ºä¶½¦pïRØ%Ã50€Qº£LÀ ’ ¥D¨úÍñ𼬻&¹íFj•Lf÷¾©„ò~xìðýdx®î.¤—â ñèëLZ¦§6AÖ2Õ*"xEUô›á‘ªÜ-»v×f>%¤•êbÙ›´wÏÕç¶?>U·çו”PE›´Š{sbÖ7”ý½c^¡›]›n'.Jßß”K8ÙãCÜžß@|}4z©×ëáØƒÏ¸Š7æØ?nJX˜CAÈ®+R2Ñí‡;MG}Õ2%|?جՇ䂨ËmÓØ¥S‚T,hn•=„vŸšîîíÔnûfC1Ž&KŠ,tȳ$(FÃA¼Ua!Z·ºZ̨¶‘ç!áÌê>Ãn×ò4(Œñ@‘?tˆq°­Öu¿i1xIŠÂ¦Þfõ[ U.JA³Î¹½yîëltÆ:nKmo”YÀŽZ½Q½þU}yþ >¹KÙ ™Üï§Ýe]Ü:tº¤S¬‹¡:tŠ…³¿g4ÿYƒ[*®¦åƒ¿ó|²ÕuC½Yßå›Ç1ÍR"´cÔz/ø«G»˜d­ïsn(å`…*}¢ÌË¥U½…ÍŸöRÊ¥^Ó€ŽÿVÜn¬w5=O$†ìÆm¯»í!Y Œd̵Œ5¢Ýfá½ ×a_ò9"PÊÄ i¢Jnοa­t½=èêUo®PkÖK/£¯žÔ÷Æ…w2¦”ž™*HkÚi.›}žÉ>Äì5š'Ñ&á‘ÇU{ëñ¹úrË"œ õ¿™úª9ÛžUÓýðHº1´¼v(íómrjŒ{6x˜ÏEŒÝЙ†‡?ŽÍøŒ/0?‚øXªHÁçüFT»ºãá¾>hcå©©GñYÃÎ>èI½­ßª›_>þeÄ0Ù²T9ŽÒTAQÿªÃæT0ŠOÁQ|ÂQü¼™å âîs/«Â® Œg$8Ââݨ’BS­ûøènîVÔ]„ÐAnªãÈ1{i??šôŒž4?(b±–¤ñš†‚¼å¡y ¨‡-Xžwð&¦‹£¤Bµ $sõê—ôÊ0¢€Á•T!Œ–©Ç²rýT0’ŠåÎ/ä_²K3|P÷ËͯJr†Ž(˧¤2+×ÊD FW‚÷]ý¼†ÕU²É²è Rw¶bucQ@vÄ_³6›3¤‚Òœ½äÍ:o³è¾!»“Š /~Â^ÆH «ÉZTšeíŸ÷˜}2±@B&ÑTÅ lÓ=•‘ͰËp±KG”é*|wìe•ÞªrÜ¢ J’#˜ hßÒ´c·òQºv…ƒ×¦˜MÏή÷ÛÿL)°b¥AÐŒÓl÷ZÚbèêQ¬çþô§ê ƒäÈ8\¸ÔÄ| \5~›îÓ”! ¥cE4 lŽFe®b•‘Þ¦ r£·&BÁÆ;ñmY¼`úï—o*ˆ÷ØQmé–LäF[ möql¡¥ú?ÿ»úËÙ¿S%â»ìÒjÂ(‚2û=^,~{{KB‹ªêµjú’æ>¼ÃÜ“­å‹ÏWzŠe“±™-I½Ñ|FgBýr„Q©Âü:úÄ0®"ˆT0;#¸Z;ÉxižöZ°Ì3 (ÆÊóLuÞI_ìê4úT`A†ÎXeô~üI'¸ýÉŒÌLÓa<öiUbtaaæ-¿Sû{âiÍôžºô´!ŒV(+T PWcŸÕØ4öùÆ 1й²lÈdUÚ E•j@ª,"„sY¨¼±mj[¢ß xˆG{WD£½‹°hïæ0‹¶•nUH†]: J~çšI7 {ð† RÆCæ„‹! Y:~t“SR]—QÃQV•*ê®ä/4›ÓÃö`j¸ÂÝG}frfbv¶Kª?ºtˆÕN3!{| *ûVJÿlB¬ê0:s‰sØeo×<ÊY GIˆRœÀo¦—§Š”–ÜMô7Û2Jéq™$5½©t - æ ‡Ô}ÝlŽcÝU=Ú™_ªÏ Sˆê;•Q¥P+ áÈv¬ÁCêð4<`Dü“Xü¨yJ€•Žùdfž»ºŒÃzü¤4õŠÂos!b™øa¤GJÅ €l9M¸ø”WèªÿZSJ¿RØw:¬Ævý0•97¦¯P\Ã'”¦Î‚ˆ~hcqi®Š-d£5/‰'£èØŠDø¥ƒoF ê£¡8¡ÞTôºº¹ºˆ¨VQj £û.ŵ½2@ÌÇšÐ-òýâ/1EA\šê.‚÷¶3‹Âj=­Úª¯@½åu¢…!± a–ƒNÏÐÙéøÒ–&Ó’S—XŽ!P ?ÝN9³a_ª¯Uv¡y¾û¶Vu·<‰å5fR)¡¹Æáí¢d°l$¡×p÷Æ•àÊ€LåÊGðN^àpdÈ(ÑNjn0uu·jMÓ‹™É³x+!¾Ïz,ªTîrµ€hÒ¹m ðØ&w˜òÃ4jÅO,VÇ3v«xÏÑ& AŸNéUB9y¥Ã>Œ%{}PÀ‹Iùùä&2a°C܈ÍCËÊÇqÕWK<¯HVq§xQ ,«›ãªR“þV]DTw{x CR-Çh•ªÔŸ ¼¸!³è:î÷ÉÀi  •B‘ÜÒšÔ_ä†csW/ï“–ƒÑ·U¥vW”46XkÀy’rõ®>võt>Žõóäéò¼v‹âúÁEŸ1˜¥|_ðàûàƒïi–©Q¼ªµ“ƒ°”øŠåI£å–ˆš·Y÷³<ò3ÈŽq1³FƦ”Ät¿:v]¦u; ­^c)جíeׇ[‡AЦrH}t VÝ C>‚2G$ñº?öÓÿóÎ\~Öµc½Zµ‡ÝËUÛoÒ‡w¨¤á áPï¾´ÂN»þ{¥`“O¤y’;%L¬CEKs\4.@f¯ó@•°qÁ#Œ8F†Íã«bàÓÓ§`a¤ËeöÓÐú*)ÕCÎ6"Œtõj{¥†0ÑÀìÐÚsVšÐ™ÏDÌ‹ŽEmƒ(ʵ ª"³ÙÂ9ê#=&–`üõŸ2ÃSèh?ñAнƒÚì‚ ˆ¼ Âå1IàÑÑúˆ¹OÐV ö²ºáñífx”gø¡ìMšÕž;Ñò´\¯¦ÂÍŽ8Z³ðä²Z1‚Gÿ*VxÌÈ”0Õ{4<Ñ#„ ]©6AvÌß@ß9Ï-Àg>GñfµÔ{9>”P!BkÆö®2gaF¨\^$ÁK½3ï‘Ês P°V…Ú’]> ûbíUŽÑígLÒ*²ß©ã5¢¾R¿6b\8ƒ.[ ] ºUP%Ú˘ÒñÈr¸•Éùx*#}H±3ð 8ÆFJÀ>z³y£;ä*®¤X-ÜŠ¢Õ{ÅÚã™óÌ,Šó嶃$…ˆÒËu¦ÌÖ™¤sÆølú\-mz¿~6=ÉŒ ]å‡Þo 7 O›Œª_ ”™n%²H´þ9÷?c•k·¿_êö¨$v°‹í¨\È]8®¶í²m’bˆÚVí‘Ä;͹0ÉBšÕ SŽu˜h©`ôë¾Ð7Œlò ¬am¦Ë8¶*Ds†ž³Ì´@ÂöîjÔ! ™Ò|þ,eUÚ ZÆîÖdÏmìçð²¤q€ƒe†XPÈ[”`ÀÍÒv™Ñʆzi›½¯°‡Þ ýRtGã.«›ãÈckI(†ß^}+æ°<ëÎ<:9G²ŽÓÑÎdóèÈ«°ß&™,dSõY}"ó4ŸÉ<¢¯îFWݼpÎŽfs¤Ÿ¥©îÓT¹kâ¤õCÌÁ~Ù¡ŸOFæ£,E›Ž,ôéNtâqVò çW£OÁ…è“Yƒú“=))ÓéÊa+&5†µ|˜4=ÈžƒÌ“î$¥÷)Ø1ˆ€}Ntß Oj!¯ªnñ*Kn“ó7Î(¿™ÌËy£ÞÍâà,šÌù®þ§h¦€ô!âv2yöÍ‘†•™ƒ×êëåÂn¹Qqá*•¯¤DyjµS!WoÖ„*á‰K¢ÙÜ׸~Zí>×/FÑŠŠ/·ÓÞ±ÙŠñB8¼‹Âä†Ê§Å59q¢ò·ÚÖÎÛh6픦ÜN.ÉÍ÷zl‡ã¤þÖ»oª©«O:Èõqº§š¦ûö.Ÿ'-4º‰ÈšË)_FÊ¿š^û ´‡ô~+†‚ÿÁè»—¶ÜÞ©’Hvj#ÚŽÅ0”træ­Ë0Xü—Öp·ÚСi-z3¡û€ÃŸèóké}-ky7ÞŽÍ]36âBXvoñ‚æim|€¿o’6/T®hB üôáû;J±ÝèŽ{Ö÷0««û>™ˆÂGi¦<°ç)ÞBõ©>TÓpwx„+ :1íò Ooçø0«_ ÈŽ·Ò{£F{և؞B\,$ˇÉïî§žN0wIŽsA¤&Çd„ôXFÐ2€²î«­“ó$+VLD³#.ÞÄVÓÓ°Ãli;ø€6ìYSä- f tB© RªMqø :p„TCTvݪ—ñ… ϰ-›Tk ®XP¹˜¡d:sù~_Y­€ã¡ùÏŸò}x§9 s5i ÚÞµn ç¿-`‘{?l|÷MÝîó«¹8œs¢¹HfôRø…¸Ë!;{ñq+Þ°/¥r {Lóä|< âUŒêèhŽòLªŒW‹JEŹhÅ<Õ¸ß-Ó¡ 8B)’eA«àí~‹ñŸpó;«ý®Ú¬¬Æc¿÷Y¯»‚Éx ¬xxbÒUIYu~ñÙœáy,òIWÃH®ßK¿ª•ë<¯Lq›Q×zJZrkù§—{úi¹:bh®ø½]Œ¼¿)%×?U²H6Ýßoª‹fÿ¦ú­îÆ£ÌÐö±~h?Qý]{׬Ÿ×Ioð̰0KdÒD*+4¡/¦~ØnÓ–Ȫ–ÅV±.½^ÛÁ† LzÂÇ×?=÷ë´r‚0š¡ Ž"ïî …ö‡î¹:â®mµ;v‡v™TqóX 7¼º›•…3•ÍAF«*f^íìñjø”Ê*­Sߪ•*5µü°[PiMGxŽißÔÄGOÎRw¦us,ÒöZpQÿU)¬·´iœUõjë~SV9§µ#öv÷]“Üqr1Š….…)Šh1ðžd¤4%!_hsÙÂÓ~@H+ÒÅÔ]Yi™¹ïÄLó5˜7͆¦¦ƒ ’ê)BëÆ2h+ÒlEõ´¸¤Õ'ôŠ‹§JÁ?5Z=0#@Ä„‹-“']ðaêŠÙó–IÌá¶c»I2a­_»)Ø º:âÀ.ÊM'®›ŽÙÉŽ2Zu9阡PîJO®ž®MÏ50¦ ´yI]²8ÜL^)'äcV5ÇQÝJâ)×å)í“hýýºÉjç8ª]IÜZÖÅjçª-ÛAŠ‚àþ‘bA7‡Lh5кT85·ÿÐ[Ë(><ï›HçgSâ×”T뀴j]LÔ×ê¸ ‹?¦¡d!§LL/DCÍ­`B8«ÝHä Bt¨bÕ‡BÄâ^¢Ç#Ï  ›Ìh¼‰[#wÇ’7f}gYˆ½’ ²ªO¼¥ÙមxÐ)£†b¬,UŠäo8ƒŽo}GèjšFÌN©Îä^•]¸&w '¶MHL½IåÝ-UOå’ì…b`¥Ü“oQŒ$›-Ì’TÔPJAvÞeI'pCÃàx.;Á”T̤®¿_Ýâ@¼?Î('mÝl Ê*(w™á†*Mƒ­¥ª]û0RŽÞ1-!›¿ÐÐM@C„µiÂÝã${»9,ÓÄ\NމÝtß$ì©\©kïh£uˆ¹ZJ‘–Ó-“›µT®n%öÀ<¿a3¹#F›Ôþ`1Ü>ƒ·QY§'HD®UÖ8)ÂM¹þÁ¶æø­÷ÛÜÝ-„(…± = Æmáÿó¿«?ýùìÏDáqLvyD®U‰xøwÒûìØ…“ y$„ÁQKB¥ÇÑJ»/—~:Q…½ÅGÚI¿ËçÜô@J©)ö£æK9ùæšvmýð˜·RóQZµ)w¿ûãEK5h«r¬¾‰úô»O:éfªNší–ô7Ô @©©^-n¯+ñ©O,vÜô0ì“Þ.ƨ—¥dÖÛ³BO…å“.iÕÊhM¹ÍÈL)'Ö­aˆ-¾ 9 ãºIžVp„Ö€e±t8 ±Ð»ÅHvïœõé~Àˆ#ËúqZ6]=ÚÜÑ^æÅ)"d\R²3»P×à»ù`¯!õóÇ”5ép1Š.5&«Yµ†¿/”SùÊF÷Z´”N¦ÔŠECD©žM‡o“ƾô›á¡«‚¯Õ—…Ë$ã.ì£å¬Ú Q£{šÈ®–g0é*€#úµ„í¶Q`Ä_›±Mû]ù(¥Ô–ëÞƒGËó!üäë^ ˜²÷}/øÀ¶œ½Ž3isî‡>Š0iµû!wæÄB­µ…¯?¼mÈQ!,4Ò:=e6 `¸ðQþ+!æ81b–$‘BFen)¸klÈÖ€=Õ³è©Ô¥gí VÓýj¨GZÓ²ž&˜'B°•$ÃR“c2x!øì•æl{uõÛðÐØñ ΰ fŒ«0`€H1íCÓݺ›ßIšˆñGÜ"Ã8„µœ™T°þ")@8cTR`ΛâO` W`g›ÙºqAŠ’)\.ñ“„ ¶Øœ…{ #Ö!9wà´Z"‰ºIíÇa;Ö;hörØît™ífÁùÒÞŽ4³SrŠqr&§5ñ2¨ÅG Áº)°Ãqÿ#3 g},ó§‹ï_ÿÃð:=ŠîmHv ¡”ȲXf-vòúT¯>ݾýõ÷×D¹Ô“ª­\+%dZ&'r>¶:JÑÈ/º¦å.ìÁèýܯïE¯Ùþ3Ù#x(EÀ–COP=Žõ~YQD³?<— RÆÊv”öX:Ž/Ä„hÅèÔ›zz¦ §Ls§Íkb œ¡KÑŒÕLœÕ¥Jc4ÉRôIØš‰·ö&“rªHÔÿ&­† Œ(Kìÿ‰Îl[/[ѧ^£’÷'åv†÷NOïЀx’V»uõ °ϪI¡[•YÜr×CŸ‘"Ä!Š*s6y¥ ê.]¯}p§Šûä6¥=^§Ý9Ì5H‚‘ fI ¢µÊB2¯¶ƒ¢<±UºEe£©ÔÓ™‰|ŒxD"}3ÔŽl‘b¼Y5·–[îDå8ÖðŽ“:9F+U¥lëþ›)%¶I¯à‰Á<žXpÚ]“YB:¥V²I³)T|¬–á’Í™¹HJ[ª´:Bb?*{è74Ê—ŽÇþ ®"3¡3‡Wneé£(½~,&â¤wÉÌà=e æïÅx8y¶‡uFÚ$1Œ¤LŒls‘ËéÃj)7+³¤<(ee…ÐZÕîgï°øë° éïêcŸŒÝºú¥†2ùƒèin Z„ô´¶Ø2>Ã?üq…t i-éûb`W;鋽.Äï±nËj…]^ ‚8dð €è©á„uºw)tõª 5RUŽåsj/p9 ã¶óœÓXLQñbôºÉá—·Ù á(+k¯WLH[ò9\2ëqDY¨Ux1…‘å2‘÷84éYš ¢ú¡xŽ~À»ú3Ñ <ÕÏ"è<ÑÿØvm*º(½Xdíx*i2%'þrú´V0ÚßÃ4ã VHÇí}õ ¯#ºŸ÷q5µ'è@”~U¨·åjª[ –ãzZ¶û%¤2N(òQR)§s¨©‚c•xHfI_æE;­‡ê׋…šâŒ8VÒ“ç ›ÜÒrœßçóøÓJouž,Ñ]½.©.f‰i't}~1·Æ¦y56åjlJÖØâå5vº_Õ%cr k)2)çwúôþœ„bÍ“‚%DŽ ÁPÊ•C„¹´"XÂJЏ¹º˜USAELÁŠ˜üŠXUÄãc_ò 90«Y ¸òß~»¹žý·ßnoŠ>¢Í®,I¨Ø0Ù¬5£·•ÐTøØ·°B€)Š@ÂÞ_@ë›eÖ²'ÃC …Î#’[PºK¸QƒþáNÆ:¦öÉIèé¾sOK1V–’]¯z·ª+,œù¨™ †±ÔäBoëâÊHfåêïR!ŬT)½{´útŠ`¹üëÇßìM{Hv˜¶‡v1J.…À.=lIãŸ.”6î¯<ƪŸ_‹'Û?K[w{:" å½`òÇ=ì­ŒÃ*¹…î£5[nÒ¼)óðñPýŠÒê+Šw&ª‚Õ=¶)Fªt-æO‹#XÃà©àn¬Çý.}c+×·%P»øïÎí’2-Ñk…¬²”ãæž§u½L¶2÷•EÊ¿K¦šöfœcêj+šôcý\É¿ÄULkŸ<\å«·Ç#V¢ Šužêý>£”@¬V($»'Y¡«Ó¹ÿå3¢M¦‰¸ºMò­Z3‘oÿÆ~d HeSNxúÅ4¬é“QðÂHÎ@É,…ï×h}vº‰.´ü¡!±bOrë9Ÿý<T˜Gtø!¦ÁjKŸ‡U×)_0È×)ºIºõ3[îg¤¶Þe€+XÉõÍ#Ì/ì9š ×瞘¦/j{ e)é.ñvnϯµè+ ˜:PÎÖ0PþJv ½$˜½ßuãèäÑHÛç INƒCc!Ü1ó.æ³Ëë®ú~ùÅÞ±¯ÿzÉÞhJG¯´†øÎä+ú.åN²gϸt Vé²§ž·êÎÆ''l˜†×ei.†hTË3Gå¤Bºâê̪ÚÕ›Ô#•+PBÌ6”!±W£ðòpíC^Ú:½åún‹ S’kœV“p¤‚Ð{ùã]õµgmä/Qû¿·Ò-RÝêfÙd¥A 'd’–:Cùb/:¤FG}™\ÝEɲbXÆ€%È “°Ù°‚<°òòqê„£O©/0a9‘Þ7UUƒMb6\¤ZÈfœd‚óÒÊ á9%†ˆ¸F]~]È郴\‘ÓR7Ç‘¾ãiʇ‘œ—’yfµòDƒõæb×´«#ôšúóŸÄzm}"Ýknc#÷è ÷gh^Rr dU™KÎRÄ"]ZRQÑÆgäÒØE×UÚº|0#CÄáO®®À"´ƒo Âfç&êN1¡ÐU!f '(Ê º¶טêûÄK´LÌù•½/lÀ£¨á4öI#÷6HÍÝ?Â?ð!ª¥ã^Ôí+H‘ˆÎ-Î@ó‰^Ly¡)üúëÕe˜c!½³ÔÌFT£ZH†Uïáð mLKYxWªÊbhfx<çÃR F6›«ñJ,dêà<ëbjnh2Éäø¡…lÎÆ }E€£ÅP«õeH£\±€X5kˆ˜UŸê¶ƒÅ¨Ë»zpÜ2vðÉ ?b‡URÖ5§¦ƒ·m¦aAfjØ.ìûb—øì((2¾Ö½å†É‡ëÍ ©ó¥+q!O=AÞi4{Qô)<7Ò ÓÐsÛ™YYïó4BÑÎí`“a$¦hsš€‹0ÒˆÒ—³Ày/~á4ÙQeø)áñÔ[ÅóX…. Ðc°Ò 5›×3kU+›÷AE.K<Œ÷Q… U@Œ“ ;pŸ¨Я~Öe8R :FŽÊ@aO Oäé„¥Ÿ¢Œ|„³Z6¼Óù…í \ Tïäê!2âmûþ€Eú'dÄ+ðÛí ß§ò™õA…®ñ 2TìsÒã¹õ]ÁxÃÒ¥aUr×ø¤Ýp+E}€wzºã¼=|Uœ¯÷™kNòÄX.ªÓ•zÚíÇœ*õ¯ð L¤:1‘¦À6¢œ±P›Ö¥U½†ñöQ4´ô=r_;ÓRåmäfñ<‚k)Ê%h‰K§L“Â0jÔe¨fü ½²¬+)€<^í,DÓy(àä9+†:’áÊûo6ç¬ì²¿/ °@õýrá𱹓ܨ lê˜=#s•Í„Á²[æq8#Ár({§vq´HÙ8†w©±ìPÛæ¾ƒø€ëâ9Yò:F5Œ´A°Œ zus~þZÅŽJ´øÓ®”¤ƒd´´ÌYÕS»Vš˜°€‹/–›\½/íîœàê7@0!'Œt ê¨9,xA~Ï)ÀGügöqKXùx—A0)Å 6„Ïï0†›ÌÕs:·úÚ>½S z¦ ÷RuPÄ>x÷e{–)°E¦"š™Ç¦7•ÞF­ƒlšúüšâ¾7ØÞáMôùúo(ˆNr¢ÜÚ}ñáEôš0Gƒâ.t÷ÐJ$LÁÏ¥as”_9«ºØWMÔr0CHýPŸUßÕ«¿¹ºÀ-@óä—uæ“Ê6ž9С8è°‹rÞm{2,Âéz-DOh˜]z.@s.DÎ?k°ðV`“™•ŸU$Ž*ìI…{¾£^àBŒ ó-†9&¬^ö; C/G>³Àæ}ìÆÖ&6ÍÂà VB6„aGˆäYDýžÞ¬%sÇô:vÌ“›XÑ×k¶0²S¯ÖèçRÂÁì…Øœî ¹!0 õY¨Ï#!Mƒ¤UZ9í²4p 1}Ó}&²¾²e1Q)Jм/¢ ìlÅKËFÒŽa­f&¥¤@…ØŽðÈYÿ\ÁN#7ÕžìÂ˽ÿ„³À%X5§”ø0¥‰°wÿ(çy9ËTÖ”f7ÚÓœ=Š à¸n}wA3 ¿Ûé±QŠ¿_Ç3n˜Aêây˜–+HI“¬o¥ØØr;2c¸ù$Q"_Á³‰‘5qåùà`QσƒS&f(,¥?7iz‡#åÄÊôðíg7LWŸÊ\Q®‡¯‹¡ëÀ¶“DíFz\¿Yxç8¸@ÂÃ.ÞM=ØÉ˜®|mˆ| ÝOåDXÂ…J-Ï?Ù†©RÛ?ÔÛlÃà0JD ¨y\ÿP‰’±ÙʆAº<›n³ŸQE!4åÆä¤š>_ÞÒŠòr!ÑzAR•—èÏ&ïÀ(‹X¡=©Œ ÚõSçä´°„•’Md,…• T»©‡º Väº'K‹¢(!i#{X°sTeln,w0D/w|Á(á²§ÃÖpçî¯ œÁ)ÖÅ'™äUwîÚ4Yáhbq7Œ$îvBy-iäÊ6CLpz1К8=ò´—Q¬8a÷þÝqböæ^tBŒbi$m0¶µjîä€+õGê’õX?4CŸ®£•ªRâã^oÅð›¼ú·àÞýê·áóëj5õf-æZxrÕØ%ãc³º“¾Ë´ÇP¨x0‘¿ŒÝï;Š Ïw~3ðõ+¹ÑfUÆÅà<*›U`AmŒÚ…jË"H ·va}"z ËÉèU¬ Lµib e5<•1ã`š{ÜTyS@'“)Œôˆ¨ IîëÒ¹“Ò­FT=d%k{1qosUq´"åËm HpF…¼Ú€*•ìVGït ³çw*å31)нŠêǰï×Ñ'9•£èut·ìÀ–¾‚Põ1àb45¼Py¥IkºUW«„Ìg¶™íŠ Ð妶*УÜuQå¨<±0PÜíRøF¶3UÇÌ›î·'  ×üÿ̽éŽG–.ø?ŸÂ.¨ :³%J== ôm¤¸ˆYb.ÊHRªþðˆðÌtÑ#<ä‘Kýêǘ ̼\?ÉØYÌìØâî$«g (1Ãì,Ÿ-në±sæSVYcôaD!¶á8o»üÂß#÷]·ÄèäOS@BBÀf%|pÒÑ«#ñµOn@c*¡×n?…×@“(ã‡ýÆŽz7ò–•$l'ËA˜D:~hð䊟w±:XÙIÉ8 öcž€U}ÓW·ê="€’é|YA” h]H~ú»!HZ=­ÓÂð(¢QŸ&·ÀIBÃfÁXs×=`ƒ…1Ä{OÆ…¢úä…ça§tµ»(˜d€“„8 }àöƳ‹ãï^Ãÿ×rà7ÎDÃÏI¦¢r% ›åûÓ€£ß¶ëà=Ó8Zð‹Ïñ(]côQH!¼YТÂe¯ëõ,ºé•̽i¾Sˆ§N¬H#œ¾÷D=Äbðï¦öž2ðÀë¾BåPwM&¤ˆ>Âå(Âú;†í ÁDyµ–.‰†ÂÂÎ_¾žÆøgèXÚ(&Ú)ÝÆ4eT/Áa°Ñ{²DÅ×f)2àOíफ़ó§ë#¤”plžyµãP Á,áÜøõû÷Šo¼8s]˜çç>µœÂ¡–±~µD7÷Åϼ„§34Ix={5ðPëÍ}Ów›õô°S:õ"žŽCÈi™x_õ ìR'&*Œ.Ðv·sp¸35_&‰&/vµ}#‚,ë–1½)áhL&Œ!î‹Px£Çœýä:ͧrê8»:Û–æÃý¦1?ú·DéÍG3ßc l&—³‘Óèü?×5½×s´7‚ò¢¡O;<¶’§½îú`æÎ?Ä*ÒŸ!¨~óûºÎYì›vU0MbrŽð2‰ÎV©*Ð響ذyÇU£ÚÖKX/ëÙ¦«ú*Pn Ê'xdßrÂHMfžPßxX„c¶íL˜Öž±©¾„rá34±, ¾j¿ëÖñȆhû~ªø>•ÓÊét¡{ØÛ+ëÝõõåsüï wQo¯/a@ˆVí¼VÈÎȪ€ hÎç)P9HRêùŒ½2Ð!…ÐéHwÝî¦yœPå9]”¬•ñð34]0 6šóµ¹=N˜€1Ââ@¥ˆü•²³èqzµsz:{!|¨â`0_’ÁGç“®8OgpœäF€š0]$Na³Õ¥¨$¬8Í*NØKM˜Â³hÐýOŸ8ÂÃÙa£8xÔÆ4É›:ëKRF(Âhè!_5\“ëéôt:Å.Ë®¼!€KŽNöm^ÀF“MNއ¶d .µÎN­*ÀÝEÙ×7u«wnQ\ý¸í)`Ž_^¯æ÷i¢4 RW™ ñª-¹eâÛL¦M ,Ý}jª+9 ¡PÝ O¾Â‘.FõXA½Ù;&oƒ”_5“Ê›„ò&c]v6;¥%‚§q£ÔÔѧ q:!Q+=ŸÍÎô?0áŸw›r¶_~Â0‰¥)ô¤ œzœܛI§Sù0ÿöäš÷Iã’}*'ÛDÕqõx,êb—ÐßòqS þ¶Îø2 €24‚_÷I‚—r\y“5¼Ñ‚Wý“šww ­»»x™€©É –¯tzØÝ¦Û- ±'v«fVÐ|˜¶lÁÒ²@:böõ’ßô‰Á¡À`³ìå…b÷£èa2¼Ã†À eôúÇr—uø˜¢hd.<²é»ûf%Ž˜À;z|fWÏ-Á§úé[¤ªë©M¿G$`a²9r°WõÏè|¼zVðmthùªá4÷º—êáîÛxXÝ*ú5 Ä#“P˜1öÇÅçôD‚Ëù£j_é‰}·þS7÷þvò`*Míùîë¹ÂŒ³_ Êð¿•¾^tÝÔ!ˆG$4b2nùðÊ~8lhºO„+LIm”¡õõ¸ÅT~T®i®Ý'`&©D?ö¥¼4 S “_p~ò[·o¸' H* –Îî•’î3âŠÐ.EÂ÷éÈ7á=¤}÷èV :HtÔ“'†ñ+F›ê.¸ ú-ÿÄ j°)Rw]¿Ó\“Š=2©›2Dßç¹óUfôødÏŸ7aötfÿK9Ý_ÐðOÄ›Hùú èŸΗ ú]>=9»¥³y;gò}¥]¥¦ZZÒuj÷ü×øëÁÚg¸à’‡ßýLUPY}âÆj¿ùûä±°¤qð0óëqíŽ'.Ö¤½Õ’·~e<4 š—ðMâJ@aËî°µ›“[£5u]9îß§ s½ò?äÝ'¯ˆƒ»ašlY/„QVßÜÞír”JB_5eÅ£öÐ|y¾Þ»Ý˜Ìéüû]dϰáMÐI_Á–äÔ‹m³\OݼdgÈ·ÀH ÎiM[C19i¶+ÛpÇöp×U멎î 8˜<ºŽÂµø¾ïá ‡:&DFí»¥|jýXívcCæ“vL bJ¬ê]¸U¡—ƺ‰ô@ƒâ…¦Åvl$Ù¬G' ÅÄþý§K÷éâà›É©™4%«óó´fX–ÐßLÝn뺵tNÿzlmärYÏZ¼D_À…ÍÒÔKr7ùûÙ{w‘ nä2ói?vhërI•þ-ýZz5òƒ¨âž&C~BiDhõ‹¬hƒö·g.L}#zÊßá@åqòF2AFze†Öúø“ñó»©¥£:Ô<á[,¦òô²o1©Öèã¹nL¯^¶ô]žrI!ÀÌ¥e‚î}¦áÄÄ é*ÈúÌad2ï!X“3»´Ÿ¦AH2O=f¸º ŸA8ÖŸ»­“€ÒÄ£–\):å8 ü;³-2ÖèiJCªÖ¼ý]í×[&²aA„›é—¦! «½QcnþãíŒÞ9×rçLãŠn4Õ?œ˜Í¸+,™Ï¢6äèꇥºy›:=:Ýë¿ð‚ ŠˆÍ¼ÿ]÷K]oÅèùw¼üž¬µˆŠ‘¸ôášCßN¢Úž¶ÛÑ­GÀz0)1Çêinöaö†­ê ü5eMC´Rè|‘†™Ýœ‰Áí3ÊÔš6·Ý âu/ïj_ß!cÖ1ø£$.þEM´:ýëõO¸:_âÆ÷Öj1O»¸îUº²0ÀvwQûºMnidQ†UÆöàÉ2Q^ºPÌçJÅ °¬%ë*.¢ÕdƒôÈþ—èij_»Íår›{êïg|Ÿ¥Žm˜¶p‡$+Üqb ÷&d„‚Õ…ƒqZe ™æCPþuL ó ¦ýÍÎaK¦õx'¡§Ø[])&ÒÆ^@ÍîÈEßËë‘1½€ƒé²7r’‘r„$& ºß„Õ)® {óðVUdƒ”5^Z1Õ¶kpãÿçnB¥#`:Á*ÔÃ]ð~¡kàN˜•Ç¥³_¯¯‹]·Ouì$÷´»>Z+õgûu¾u”øÒ!Ù¨YŒÏ'òÄ.l1™(ÚœÍf¿¾·]U™>ÌGˆ°ÕÝ…”»t¬þU{k`MŽà½-„‡[®ítý™±HË¿ÀpÿôÕ*ì)]aOXaO9ö”ª°§ Âž†*ì)£Â ·†…xbj LäúE†£ÈbDÓƒbH&1x¢%œ½ 3•c]2ð„´”Íó‘¹Ç A¥èþ¹€7nÖÖfSÍ—«n77?êQ@CÔiS•[Ú\*b^¨ë„´\¾¾¸¶NGàÖÀ°$J¢J„”´˜8/DEš”xôIJƒ§˜tóΘÃÕ\»ßä¡ÛoÒÈö›Õ^ôf’ÎqšÿÜé}]–nIékÇœP?&:øÓ©U÷ë,¥ŽÎW©ÓC…:)Ý:Ãêü|„¾fù Kb­þÁ¥VàÌšžÎ«ÀHÍÇIÆJôQAn š‰¤x >zÄšÎ#õ‘QV‹RÓíeÏꌦSú‰Ñ INü‚ÕIÝã17nã-.¼”Õ5qN} gøþ¢`ìe¨yC†#ʺžžÀÁ\b¡· üÑ=€§A1•÷Oÿ‡žÌAМ@ mÛœ”Æþ;"oŠ©+•œ´Õ“Ò%ÑØ®ÑFb³l÷ãõæXœN°u¦ÿö³_έ[ìŸxêL¦|@¢K &NÍ'kM/=rhWb²]é>Y\£Gj³6ÖØ\\»!™Ó@ɶ¦-á„K¹Ðÿ0&=d%±$½c!›#M¹8Ki¿?O‚ØAj¿O£’LÂuVõ¤«ó{áS}àËC¾ør`ž7¶$¸ØÿZWì€ Qº‡æ—lIHƒNØÒȽ°@=PkŸëžmtÔ$ÀVÆ<å!‰]³¥ÁľÙ¥{ðÖôÛýÛ”òm ™íà¯õ0l=né!j÷ÄÓæóVÅG‚@†¼Å% ¹‹C`”Yb¦˜ïEÎÀÃÇcpÊ Vâ ŽdÈ{³Nªw/Šª}ñ-ÁÜî¤G¾v2&{`ÃyEiîz¨Q§×¯ujíZëÖz—p8çvV±¿¹D³†žæ’PBWs%”Ïs©òß÷7Ó:-PÙßxû¡ðêí>½äš/×)·9)ÍIj‹Aç–Ëui¬+ŸÍáJ†³ÆS\¸vŸšJ/ÒzZ¨^U«¦3,;ÿÎ^Ib8çɵ‘NF5Ûí\¯~דcMHèäo·e]ê Y'†X\pQØ+ºÖú@×Z'й»½*Κ¾ïúâgzÁëiœÞe P'@z»¬ ®7ÝC ž/›8áUßWO¸ªmðpt°Å³“³Ÿ¿}áˆó‹!¨Å€Üd1 ƒ–ÿøPGYsyÞ,.ÿ? ~MàiU!qïý_#˜÷þÃ/WçÄX÷ø$ m(µbc½‡o£*¥`ßeܬÉÊТûÎalÑ¥§‡Y:{jrè*”7ºoÊY “è­7m¥îðÆ,XH¢³ù1D›íÃg³×x-W d¡‘É0¦ÐÐÄ¡œÛŸ°CïZQÅ‘©GØŒCˆ m|˜ã»ë·u½è?áw:jðxNÿ™±òb€âÁDP³›Ã¾ÿp®K€Ù¢ Þ{@e&y †¦LW«/B¬ÑL¤àÛ *-:Sõ˜†Ñ0TÊ1³À*,l¢IÀÎ9<g‚¨ qUüæøÍ[3ÚXÜ|Æ&C$3—»#åÁ<ä íýC=?ìõ½ü°e|2œG¢)$}S$‡·bÖv|˜el¸OˆaSrxÕ¢?ü fßöˆ#‚®Ú’)È»®ZðºoœîƒOì•÷ê¾Òpƒ¢R£ f™ °Ô(­¥†¯ŠiŽ…‰‡ÑæxÌ¿ñ#)þ hÀ;€Ÿ` ¹´‚á\ód£pò¥©~x~("a½:ÆÑð/kˆ?(^<äqл‡Ÿ0Ìô+NTv£÷’`=n}͇ m «CO´ëö=¸r¦œ ¥ÆV&_§á •ì ¾…L]TºŠÿ_2á ‚f³ªs#!é;Ù€I¹Ââ·÷¦¥O¬X2~áfQfEõªKÊCZ:ÉÈ-P?u¸¯©í‡ÛÜôàUsÆPYºl¤ù]÷ª‰F¯™tg± V¼WÑô‘ÀË=J|“7ÕŸ)™>…/Ü~{òkJâ Ά¤âËøŸ!£¯ä÷Œ¬eÇĈtèx”¼ªûÛ¹îû{°¾ë: Ÿ…*Éë{ $øá^*°JÇÁ “BåÚKÜn¿Ûîw™øF$Ê߈€ÚÏŒ2¤‚¦X,Ä™³7 Umù½þ¼îÔ*IJêß\Ì܃ÿ‹­=ËäÌéº>1):LI~IS’ÓCKòÇ~“¯‰IÑ_‘ïPm›Ç|e@Ë}ø÷=sèK6&ˆXW¨e½©ú¦#¹êÿ™÷Õ£]¼àÒl˜Ýt3è|3{ƒJ–msàÉ£aóµé„àÒÐñ@™á!öI(6Ó9š?rVZÃ#ˆ…Ž$e¨àÀñeEø¸a×é½:½è6üª`IM¹ëÊ{Uzj„âž/Lx̱0Íl7ÇÌwV)0Ì} tÞ6kˆ1vH±SzJ”ã— º,Œî0íSÑÜOݾ¨ªk÷àô³XïÕ.IWäÃÜ þL §4rœ¿0½€1‰¹¸6ݼZ,úú¾!;s3àîû³nºÒ“X‚DÞì¿Ý=+ò¹ø?³£©È–œƒ±S¹Õ¿íú}Ms–•Z¯¬W´÷ ³%C{|AüYØ¥X.ÁÏzѬu€·«"Vf¤°Öò>š¾^é5JíÍã#2BJ¨W¤ë§ÂHíÖ5<PÆÓøŠjëòÿ|LªFEŸÔç¡Ñì%±ƒoÏ’ÿÆÀ}»åt6¨•z¥|¥ðø·¾}šßÀ³œÏSÌ"JÐ4)ú|Áä-0Ýô÷¾ßYµoÛÚ™u²¦ÓËŒ7L bv3½z®Ã!ͪ§$¢äã ú |=òEk{sýÛÅÕ/óŸ¯.>\ÎÏ.^xÿfæôáÊ=YÁnä$#uÞ.åËN0ƒ T²öšÆE@½<Æ!Ùà% J¾xÇ^‘¸žXXçÌ…SKëoœ¾ÒþKƒÙ[šo÷ÐøC_·ÍRÏÅÛ¶{ D%jhˆÞ ¤üÒå»C®ˆ×ä'›iÜ3n·…#˜ën˜£0PtŠS®8e³³>€Çä£^ö=¢‘õ^åÍ ‘³^È.);0ž‹É_º3¡Ü‚rɤîÅÑ^A¸¿û¦~• d<ð\Lç”c¡HrïîêtsÓ-Úî±8‡=„EPÐò Bõ«i41±„–r”éaL#°Ð¤Ž¨YÎó,³»"æi½Ÿ#_ÿ¾–nñ‡^ß³‚¯ô 4'žbéd«F o#µëúÒÅXXHâ‘5TfK^çKP'PEP²eàQ¼»y³ÍmzCïzÜ•ÍVvCå{‘±È£”âNœ^Õj~<Ù—Ñ®ÐyjººBß©„R½êaOªcß'è*YÃÞvT­ `•bÕ­i÷ê¬Byž9Òëwp÷¥ïBÿfÍNMXK;ƨ,DýwtŸÃô ïH>gÍüNF±Ëqªô(kW4‡}Yý€ ŒÍvÂ0q!nÁáV<¹gX/þ] j’£ê²,ŽB2Ö§ºÐ¾ÈʨɯµìŠóÙ…µ¦Çx…ohYƒ`r.}C2&¸Þµ„®*”øM¸¹ ž°¯°(Õ£…©êP::Ÿ,µ¤r21U–™¼’›9 РM©-;•¦T "§„B<(‹×‚.­†Ub“O—Ó#sj)Y*¦­ú£éKí êéÅÄ„rȨ¦D§˜ÌÙN£.¯>´¢=Øb~…îr⩬ã^m'!™” ɶH–P ø{|,6»”‡ôà¶oÛù²j[ˆ!6ärÖ¨lÛÒrÁ/t;½ù¯ÿüß;0¦ˆ »ýÍ Fg@ç‹GpR<¯ªÊ˜NL¿Èf`š ÔÆÞÂ{Ÿ‘`–>'''Æú¹\Ï ŸbÁ;52 =Ö$‘-ÛÜgÎCäß²MG­û@µ¿ðSµ±q¶ú~»™Óð9 '&˜ ³¤L˜`ÒèÞéšiùç›—çh<^ !Ð~üýýÉù ï~Ódbs”!0£Ò‰ži+Ô‚Bö¬ðtF®7àÛïÙÇóÓo[ÆAYH&Pùc–^”*ÿIéï¥nEã¼€•ÇAÔÔÇqÔeølpuîE7&†:z0L%@˜é×N)R‰Egù/œ<Üÿë8ˆ‹ à"¾­¢ƒ¥ÀìÕ%C»m2Æ"G$àèDˆþ î1úæö¢·½ž¾oö-yóÓýºC«Þº§pˆ?Ÿ^}kBHRu DÛ¾£¨9ÖWÈA¾7Ó•Ž.,JB”x)ÝŸ'¾8ÝÀ\K?™?U]R.Úê3æKA%`Cªćùnvu{eIvÇæv½=d¹—¤Ð `Áç³ ¸§?Ÿ Ï6ÉùyóÀ¥!…@Bõ# b”ª6]7ýŠyˆ›>”–Ì»ŒA6¢•)¯ìüáÖ±pE iIAñ`Õü©Æ”çŧfù íé10Å Rjoaæ÷¶‘Ž–îc‰îµ½{R øn‘Îdnâm…SÖ©íÍ!à}!ä§a"«À|´7àãbvùV|â5Š:ìóÿx?Ýô‡ûþ¥¬SßN/ïÀöÖüs\ÅùNѨؤ[´mÂ/Z¼Ü4@_ôå(ЗC@óü£ ‘C“ã+-&”oi‚8Ë]Úp5Nº ¨$(é€ÌÈ¢9n¸® ¢7d1¡Ä8"ÄyžÈ€a½ÛOCpDB½NôTëßâ‹<»þ`C[âœ_?î•¿¦ú çŽÑ¥¡*Î;.Ûf·Íðq“ ”Òw[ßÇ$å=¿Ö›oû¥œ 6KRu Õ õj´¦&`ÇóažrŸ8Á™Q˜ׯN5H«mÆP’Iíìë…qòû;¼×‹¾¾j#†’7™¦§Ðhâ̘.‘$˜$Qú¤§´eˆEzM“äòܧÑ-/ÏÝäNÏ@Ñ{®¶zÊ>BHÒKX”Ÿ:HðYå0\¯=aœ=0‡}¨žŠ³“WÉضY2¦ÈX=0zŒ¢6/OÏ&¶À™…+‰&À0Ú·Œ×³@°Þ¢ñ`ˆ>À¤7wæ@1¬"Ç:ñTv÷xål"ð93azm_ò}b&&%kûo·)+¸ø±Ãât3z=!@¥KøÙ3¾Ã˜Xju™~¸t¹!Ñ©¥IŽÖÈ} »¨i@ÀBé JBü#tJj4wtû–¡Û§”Ú9Ç×ω¼o¬Šå]½ü„¡V0ÄƒÉÆs*—ǰÔ:c­äˆèáп…ãóÙÙoõZFËWëAjZ½O)1/Uãu*rû¥Ì(ììñ+Þ°ªº­ÁèÚž1Z”ë-ž­ï7=k‚ÞC¼Þ–6?À-YE—žŸ].ƒF¤àpæÂ“Ô18ÌMAÃŒ%C(*‰)ïº8$ ÑDWÄ–!ÄA‘$sr€ƒÙi;›!ò•ÉŽ‘™œMh%¾]_mU&8I"ü&‡˜0Q‚˜v÷›" !x®=†ùû…Õœ Veðd{q –¨R~œC6§vJ|= N®0Ñd i%.›ç£²Éò4NXŠï ‘Mn9¾ô":‰Ç÷™çH3¼GÝ-îWíê5n’^`„üU®Ï*êîÃë÷¯‡Ö¹ÎÔ ŠÈØFâ Q¤˜Yß`úó‹¾¼ØëöR/ø•dìv›ÖŽ^ûM»Ý¨Ïñ¶!5®·õbVuû~Y“Q¢ëT\÷Ûå!Ý'E.m—Çc]ÚÇËW©Á³`%Á„bî)CZõ&:Ç,㓺õV;0 RÙ?tþÌÐÙ9¡s³W\™éò¨»¹ïa/ÿùGS¨®Ÿ/«‰OlŠ‹Q U©©JKU•7$†ý-<Ô‹;xZ§LÎG‰®xtµU‰è(´ÐBéú먻«Æû” `à:ÁbÔÛwCÐJÆS”³¿Ð$GzàÚ6ÓÛÕˆŒ5B²·Mu„t$³ßgp¤‘u‡X7äžh¿YÕ7ð¬U¿<ði²‘UZY.¾fqÁ™Å¥‰À¬{ 8q_v"¶> -¯qþekñ à=||Ð!Ûêê^V-‹‹ÙïZI­sð¢jÙvûUÞm˜Gjt±œ3íuØ…Išnš¾~ Š ÿ¸S\¡vCøÊã½ûî|W˜|ö—ûBàGšsr¤9±ðç 1MihbÄžˆ¯ðî w+ŽM›>¨ž‡øBÔ"hõP]G¢"ôŽ"QßÛ¾¹‡'&9/;§¸BôL¾ù!çü½.÷ CÈë%Ø‹d‚è#¸˜†)1PÃCÄœâôRIh¯-ˆCPþ{‹IÄçYéѧh ÿt[ŠÖÓ›ƒxÀ‹‘3L¬y-ŒÿsÐ0¹…?Ü3NÐÌ_Ʊ= á‡u á´³¬a“a¬;Ád!á^Gäò ‘ïÜ¥i/è±õ#¼ý} “ä+dR¶õFÄ xóKæñ `iÒøCðám.ž%ê®úưðÄ‚;G%Ùec ŠÂ¤¥óe’*QR ,´ÅPáøÃ4ÕfÖ¿#Eþ¬Âfs¢€b-;€ÚYø7ËÏh«&þÍr¼}B!ŸÙ2o›…N|Å·‘Qó-–l¢Lƒ¥‰›! ѵж«?«9ØBð]=Õ$¡ Ïm”WÝ›T[tõ­ÑÕíÑÕÃ-ÒÕ#m"&>‹¶»“[:'ãí;Êo—L!~‘˜©”Lì®(ÙfSJrFò õÞ“HŠÌ"Md¬ µ_X5VJvuÄ}`¸œ‰a*¯¯ì.0ÄåÏz[G`©FŽÄä,/Lï†xzÉbZ€)èà]Ý¿»|“˜¨p~ï=™Øã[üjFù¸‰,~4ƒ;_ °8Ü» Ù!‹Ê!.…‚Û¢J7|$æ3>çÙÉ9×¾XfJÁ‡–gª$Ãeˆ¿AÎëO“r"ƒçéQ>È5D¾õ ›Ùk\¼#æf€õ)%NÎñ!šš+‹7¼y;~Ý(º‚3y¹£î¤¹UH%ÀIs+Kæª ¬­r`lëͼQK5qó’1\b²Eb ú¹«ú[p.Þð#"X¨Õ|ûév‚Oç0èôR§KL*úqÇÇ÷õ?Í^£îÕs8ß×èÖÛNBH’;$«?J‘-ùŒ×oMÛr`yÜ#qnüоþ+ºÌº•2ÎÛõ>—™J”É‹÷¦\ FX»ô‰a*¤ö e2ÝP…é¨I©Â|Ùî•þpÝ—É àÞ)D‰¥£ð´b¦PìÇ„Š®wlö±e 9 6M·³ÂpS(”g¸?T˼R'9ijÕ~ry*öÕÃd )CÅ:GöLKž²@1nx!KËÄ iC˜ãÀdûºe£÷åªù{Í®^_;ïÕ4y?IÏ‹+ýw³¬€×þÀ¯èMmÝ?‡£‰¿v úHLÄ7Žî6]ª$½(‡—ã|¯t>+úÚÙÔ=Ç~?Ö¨ðµUýì}!h•êú<ŒªOcS}„Iõ‹QÿJ@5·¸ó¿âp“Ï^Í®¾µ˜VwhÑœ…˧õ±q^ˆ“S!jWS—ïô ·†wzÂî…™ù†}*‚à ¹Ðe‡ ]N §¹ç§Ø–¯Ö³¡Ô2“3~sÐè~ðD£Ù) —Ñîà}Ú÷9¡qIšêÇj½ +Ä‹gÆJ«§Mµ«/ÀŸPdļ¡ÿ• Y:Iw“ ž·›¡}¶ì›íN 8l^–@0¯ìèÙžC‘œWîÉÂw¾è›Õíôˆ”$w@8»¤lÙ;|Fè/îg˜YP¦ò€­Ù ,i hµHY-< ”±PÚñ-*U¿ðÐL¾Ë ŽÉ—9!Ó@õ@UÎC ‘fJ@è`èŒ2$Cœp»Í«Øßz°9^;G‹f¹ZÆeò%­ s<.k8êz09ß™ãÖ)WÛ·m§Te>Hë`»ëWax±¤É#~Þ&F©dû2ÿÞ: ‹eV'i¹î8/<µöYDáŒÁCkØqp" PùØCúÛâ3vÕWècA±K»Ù;‡ð+{˜ÑÑghe·•qnf‚CY?¨¤Ñæd•VÖowÕ®¸¾k@©Ë7»ùâÏJ/qÔ´÷Ÿ†õ*Ïã “Èû2=cÒ®ÓÛ7гl¸ Ìé›ib«™2ÃÞ0‘«G1½Â\î£è¦­î»¬kÆ$­…CyA·ôYr.‰^²®B‹ê©ÓÁ©ÀEYÒ ÒcШNV«ã+p³ú)ÂOàgSm¬ •ao RV*°P‘…€m¢SÞƒ[û=T‚S¸¼6ŠI-ÌŠZH0 5Ôº¥c«~‹õ…—+ (€ÂíñºnõŸôšLôb½¶DÝQÖ†ð~l7 "EíÐ`nɹ–džE`ËÙìZ½‡'‡ªXT}­w%z\…ÀNnHÏ‘ÏIÈ :ldÎZКzû b§!û¸$¨E gâ¤!(ÈŠ« «C·©®‰{XñŸ¹ õD¿­&­Fd' `œâw´ª0ÉIjæÊü¬.ëCc’àÈ<Ê ?ΤœqÔ}+Ä©Rå8°ØQr¯ðj~”– 0`ˆ!‚H“7 Ó„11Ä>à¾kël°‚8 ™)> ðªƒ(9’…!gãòéchœŸBgj'£c–Ef:üV|˽EÏÑkr­ÌEHjX1YyŸs’:„¤¢Øg;ìË5¼8ilºûʬ¦¦ F¤§Î2K5Ò1¤špÙ­·ð.R¬Í_ÍS„: U’ÅG‡î,IˆÒB‹Oô,¢¥Ãí)€•ÅD©%8oÖºÎx á3t|­‚þsŒE÷<º£Ê¾B‰È-8›ãöWX`<ÉêÖ¥“ ç$awväC]ÏJÒ Åé3•8ºQþ‰250wÀk53…“j³jýV‹„ ï°)lÉ$–µCE¹%åJ|[Æ…QT4©D˜×x â_Ô„’é°‰Y= ™ÀE°RÕu)Ôþ¹ïvÕ”RIdUb¢Pˆ¿Sê~… TÆá§êÉR†„V©ÍŠmZJ¹ˆzUS‰Éæ$IåÔcªÔ Þൢ§çÓ x´RõrVy{ß$µdr£Ý°Ïæ/ÍMž1uûÂõý~za6Ì2H±£¿˜bP×zXG7u^±<>¡Ìˆ8@,ã{K?Ž`È$û™‚x‡JƒÓ)Ÿz¤»„£¾Rõƒš5ž&hCœáh*YrS3ô›3%%0f~_mˆ1þ¶KjÌ1ÎìqSλ_•|ð«Â—¾*|âk¾‰Úî¾k÷ë:ŽG¢¢Ì¸j(>ÚÖ}§1Â?ÅGLŽNŸ>žA¸ª#r5·œÜÅH"h'<~"ÿ(ò®®ÂÕÅ~±™žˆ<*§ S¥6LðÕq8ÝÄ›!s¿”"Å»%é°µ ³â$€Y(#J ½®…øùaàЛE–õG”>²ðwäЪJuËÆš&øûpò {÷ÁOº§K9§ \ÓEŽéº?xõsjúªƒÓKœ_½96A+p=ö™WPª´´Âž.fìTQ+z­g}t‚³ÙG&EÅY£[zX‹Æ3;ƒm³ËUÏŽrâg§¢g±³]äìä2–Bfwêq¾ªoª};ù5F„Fëci2œjG ®äϪm»Åm¬‡3]«çŃ^jÕäI‚W¼äצø) ËŽƒ=û|@ôªzÊv-Aä·þ!\KPî´k V:V[.ßWfx*r5ü =iñ¢£Ç0°Ûº‚í8¼Ów¶/s…f1ê3mq@˜3ƒ)° H—æ/”Îʵô›}k<ì# u’ŒÒÈøpõ¾˜mÛfW¼Å”#¸Ûîµ”¹¦žƒÿðÛz¥7`J·t†BÍÛõó;'N[H/K,µÄ’%–,ñ‚òàË¿¾£ç÷:î6t®Ær÷¥ÆU÷w¡YÕýÊm¶èû‡œûÀI qÓŒNo³-=Bk’l¾Èab„øønVßkªŸ •±ˆÖýâ¾éwóêæ¦Ùdî7‡ rMP‚`ÖL0RÊÕŸ ™È†Âl?ý¡‚ ÅñÕ»IÈêëcVÿHÐ1g½4Å–ÄdÁJjPPÖ[cSWH” Òå:¸D“e)ÅhSÊé¦PÿضPÿß5†úú­¡þͱmò›  õn›d]–1— ®bña1N)…diªd “Uä…‡‚Œ°†¾t<áLÖ€"KÇ!Ùm¢÷5a~ª-<ÖÃ:<³ªt>Üa )ˆ©†2RØä}íZTÿ-Õ¨¾F=ª¯R‘‡yxc‘½»%V¥Ž[Åe8ý(îÄ©úEç¬ i¼ŽÕ?¦’Õo-«¯WÍê«Ös£>åWpHìÔ™É:µLÖ¦æSe&¾d¦TmKè³jyÛq8° h¨Õ—ÁSÿH|5?z+Õ{½SͶÆ9e! ei(S]a@ÜaýÂ)Œ5XÌÏ)`NÑÆ •j¸tVC©ÿŽ–Rÿ?h*õj+õk¬lO|ÔvÊ·^ÈvXÕ›£|!%ä¼Xªò†ø(ä+Ö˜úW™úÒ:S_\ihÞfm§á¤è%,4¦³Æ‰:5… é,ÁØí:æv=p»N@Û®S ¶Ýİ>ôÀqzà¨v]Ÿùzbœ)‚ÍD©^ 9¬s‚뱫âYµÅ'î tÒ>᛽EÛáuÒ|+ ¬*©-¢*›úœB!£‡4ãº×PGNöuµœo».ëX*¤•`t^‰y> Ë’у)3lN B¨†+&ùæca¼ŠÏ†õb=Ì Q B'˜ë;ëÙ×uä°I˜©Vc_¯£Ãâ¦YP¡!±‡Og&+Ò2V‰÷¼ŸXó~˜Í;ol²™à`G€SÕ€ñ<Øö$+y[÷ëF)4?Ë­ë!‰]Фj>qXöD9+Á8ö!ÔÉ9UdëêÇ‹óãá5 Îæ×z‚\‚¦ìT]KÆÃªùO¶à•b²BL€:‚á&JÔ¡ZÞ՚φ;iêü â•ÐmihSU=(2»Þ '¢0"LYMœæü&9¼rŠdi|ö/#­°¨4‡”c¬iì9çA3Kœêb¼útQβ ryàyå+¨‚bÄbRb²B’™¢ÅàgŒù}h„/U¦Kö§”¨Ãz•)¨}Œ™|x©¦Ë3V’±&1$#=kW¯aiYÞ(iÎT1,åXÃâkË\ôu‹Núº¢ ªáEPòûõáeyR¥Õ4cå´"¾hHË)论Í/aD,‹™©29¦›KóI™ð€ERŸ¦'¾ƒÃûÿt¿íï_§ŸGèÁ=†85U£á$ëˆÕŒëÑì*Ž©%XÌMU­`;¬ZÙ´[ÉÅ8„.Æ•ªBÊHT×ýšŽ)r+,E/Aq~ªÒ<ÖÇ$b 0ç£Æ™B˜\L Ÿ¿2¾ëãùWÇØ<˜i€!´Œ•gTiêkøŒºW±»¨{u´ÕÛ©uõ©î³Ll†¨I‡Í Mm"6Ï£0e9Sv2œÑGR”ʧèôØ#×ø·®n8À#s,½£Äl‹"GJ³¯ÓxŽlÐ*~뻉;ú:OÖã÷ê—&ň@Mõ—Z˜‘ÀÄìr=Yy!¥'ŸrdEZr×*ô Ts ~ §?0ò#DxÚÿÂàRênÊYhŠÒÃE9.JtoCøDµçoè´ÙDwÑzÂs¹Gb1¬Ïrú•ðÏÂ)W+Ò}lµß=Í«¶ž8ÿNÓÕœWbžÃà±h0×ä¶éy¡Ñlº‡¶ߘÅjï¡atîkÍ¡ëd‰N±•™/ ,„äÞb;°ßÕä­ï¡Ù¬ºоž·Íº™o2£]R²`i¼onžŠ÷ÍfÿX\žœ”JWSêV¡¢•P!LÿAì™ýÆ7à,oµn¦zWHg´lÀ÷¤;e–”Þ5ÒŠåº<9/õ˜†ï|ªå²ÛoÀým¥ø|áÐlVypa€GgD€tšFDOE htÃq+ƒãQc¯ðݘþ ñûà/“!‚¯èùm½O9h‚\Â…ìRgÃhზŒú-;†§DªnoJÕÜnê•t]-pÛÀ ©€ëëä‚΃ éVô¦]²Wí&¬ÏFáû/º3õ*5Òì§?‡p.tüj¯’¬”Ì0EŸ„‰kÜCg¾^÷ØZ”ë9·UwuÛÎí‡?ZÝuKS +§„X¸(§´r.]6>«˜A68%ÂlD±n>uŸÁ KP8¦Ñk)¸ò‹”I“±+"“S8ÕA%º<¹:9;ýåbþîbv=ÿåÍßæ'®/æ'¯_;õ|j®?zôÕú¹ªAH©… /X§öýÅÅ/ó·W zæTÂnÓ]èx̰ùÇ’/Ð S!IRrã]` dÚöiwÚtÖ3C£¿«§6õ‚ÄÐI®×Ã//` ßòòŠñê½ò\í·°r¯WÃ* ÏyÀKèÊéÕé¥c‡Ž¤`kMþi pÁ¼Û7 ŽþŒŽD¦}YX~£ Å–6¹ì6äÒ‚cG£ØK¢"5 ]I®-8šô{MudN3r¢¤ÙS‹~™iö\¦¾ÑÆ­hTôZk·¶„ÏñþZW”žÄ*ÜÄY4˜q$dðqaR5Bc=g’͉¦”Öõ·¸»…Ôb¿kZ=@j„°… ‚íˆí‘°Û(‹ܤÑ/Z}Ð1 -ÿ|þsv]ׂλù®V»G+HgõÞ•Ä}Q“OwF€NqÀõ Bÿ…¼ÖÃ#E¹}‚>¨õf¥~~_÷`½hbÉ\ÒPð‘Rqx¿¦ f]9žŠRz»BÆ«ÏÖöºÁÑ V¨^^ù ˆl¸«×Ÿ/ ¾°bžé1M¯äÆÁpèÛúoq¯iúekÏåp*€ÈâÊÉS£–µ.mÓ~=Â?ó¾z4Ê¿”ü^`!¾ü¸Ò\®q8‡-”[í(x m»f]Ã}èó–dG3#èòÍÕìtvýæüzþêâììäüõüúôìÍŇk_=Î9sƒž¾W¢¸4”óó7¯®çWo®¯þ6è«A1¬>k6·\Cºq&·©º+~P¸©vIûMóX¨/¢øØ–PëqŽ#۪鿨R@R‰cHòkåúêâýüòäúÝüõéÕѶY~Ò+æe¥{ô70uLt¬ ÿ.‰‡~À HÐW“=ázì®M¾oG`äo܆&¸àz‚C;®:øÖÏ =¸ÀH¥G |OÄË&t…Wïö½n›N €–Þ£ÿj„£§ÜIDŽÆÒiÌÜ<øï74\r:Þ̶‰c„ ÂÏÖ…õÙ6λ©2“@Û,ðð`UC/Ðì’5eÞÊ@ÓY5n ÿÆJµbmìÛ×Om?Ýþ8^ GÀòu‚-‡þ[Ä¿0…sÖµzüUÅwß§1Ç]¢“ÃA€1ÕÝ”½DŠT€²Yžc@'a–K©»?Aañˆû>ø1Ïn¶Ö é‹Ùóâ¼Þý4{ý¼€³í P:õi «T|\ðc@éÛ¾®µ²âý[ñ¾ø'Ðë½)m‚Æêƒ4¡~ºûÕì·òRĸæZ?2¼æÝ–ì¨=|¨xì¯;ˆ|Cš¹›ÓJ#äÒ<»Øò‡W+zoŽ® uÿÐû惂ý™ÄÒÁ®ËKýÃiYT ž}ž|fþ ÿq2éI!,/Ȇîó„ÓDX[”wøÈÆQrrjÕ™0…óÓPlC«Ôʺ4Kç_8Åék«ÍíL~¦Â«Ž—ψ±áU­Ê÷œc®:Õv3ùûQ£×Ép›Î×õ l’i“gpxjÁ³}wðºHè_ùZÀåû“¿ýÇO®fó«‹‹k«F}þY-t¥ž6ËŒÊA:¤îkÈ|ÿ½ë»M·WT >Sèv—]ÛâþfÀOíg:¶uú!·tâ~‚»¯KóS¨ÕU¼ÂóªÍQ*ÉC•ž¨Wâ‡P7·‰mJR™#U 1¯íŸÏ!¬¾i¢H#ŠȾïà (W¾€Roî!èÝM{uÔ!)hF—p8ó¿éÏÉozP‡Ìß`mpÙw ijŒ\¦ê\Õ!1ÈŸª,,­†rD3e(ÚxOÿú¢s'Å’POd_ÃbsZ$Ò…"‰Ϲ)>:/žÍP)B'Ô*WQ'•–$ˆ‚{96ÜJ×·M–GªbföÏ£àèÀó"+œ˜á†\Šü S„JÍžŠ<ï¾H‹æ|ê ƒ¹–×Î_2Àö‚?5ØÄñõû0Ö$½Á ™¥ÍäH°ºSB:°öÌš-Œ¤@=ôÞÜHy¦3eÜ“Ù}=}/8µHd$X°•hƒ¡ÈM {£¦ÖÈÿFŒCB$ÁÕ`;¿îFuKBÒî±–þc+…, VzÇ#÷1\†Ī^ìoGµ#©%â’†>Ðn¿;ÖÿÔ}Þù@cJÉŸ†ÕÜØ¹É&À¢Ñ_é¨ )UOèÙðb§ â²X7›f]µ\šAÙºÔ5˜õIg’oJ½ž…û÷b`x†·”“бoÛ¹úÔlǵ*Öc™tWÜo·`à¡§º'nnÀ†ýѶ^Åzïšíò®o!¦!†¡,¶à2 ;™+çÆzþ¨‹ºUC$¤ fœñö$VBäC#1.mšÛž>íd†–û”êvb‰H¬¸¥Xtôãg!gšfÃ{&Ý˪h4ª IX‘—·Gqéžë*F3ftÁ¨ywÓ'Ô>)à'ç9AÇc‰jiŠe&’X't³ñ’"é!b|šÆTKæ1§Ú%Úl§[{\¸&`Ù@ª«°ºg·;nbápÇ>Þ‘‚Ä1>ÀuâÊvÉ¡ex‹#¼]üS6²-ß!”osyÏ㨣]3ZXì›vUÝ 4T$ذ”Å)Ø›ë-ÝÏʯ†ÆÆO醳ün7¡šˆx¿C ¡âϤ)3¥göý„"â1H;K=´qª ožÒu³ß,WªÆ¬Ùœ6Ïô·o¹°«úÛ:Y¨Fú¶žÐDD¤Š‚Bqêz¨I–ç¡%’ObÖé¸Hò Jþ´_迦„3É7,eñ†ŸHX5ÛN-ý~³iÈ„ãMÚoêw^àĶÍ}>´Ë ‚’Wš‚5(+$¹îëB¦NbÀn;¡hÌ w‰ëBó:D’­wÚôç•Q6[¦¼²è¤­g[’V»šT»2jW™j_½?MéÒ G´ú˜Š¿ÌRÂø®6²zÿ,ëö1û»)¾¡Þ˜äŲUÕî( ñ8KÇ+1˦WIðj©` \)5··OFsƒ”¸7ìÒútýÛj§Ú6³ Ô5¤è.Å^4›ü¡Ùôë HCZˆ\¶*Ä‘,Κeß©îf‡Fâ¿5›«³”2Œ²:® HH‡dõ”ŠRÝË] BsÆÒý Ÿz¹ahÕ”%<®V÷ E¯^à±ã¨à=Ÿ(ÇrÀèªW8Pý×þ_¸È…t]q´þéÁ½BÓ~×M Ð¬hK OIF<ÏÀÇ”D@(ÕesÓÃ<§§Ë²Œ5¯—ßO !"Ãz¶ÓÿMÕíûTBwP»~¿Ü¥¯‹’„ö Ýrâׯ·@Íæê{^‰Qfv2"rt±¨`/Љ%¯ë3 |™"è Y]b+oRծLjqmš€—†›Æ”]7¶Ù„œžŸ’oôãë7AªŒŸþEëÓ¼Žû8®pK´âÙ/ÿ¢¾ÍiçNOB &¡qM–Œ'8ËUºi,[ÝÐhž êx0wq¡3ÔQàq]DÃ8ÑÛÉ;øV9OKÈÂ98ÁvRÙ¿Ú¢{×îèà+åŒÂí“} o£L=Ô >°¡~â+ÂÉn*Lž}”CzÈ'åÙ&F%ö¡3¯vÒ¼™¦w\,ªD…FpòÛ̸ë)l¾z‘B×࣫ÙÎi"˜@Ñ;D±(‡–Á§—<×ð[êžÞµrð œ ¸ÚƒCU¼yõ==0}™®ÖSPÕZ€SkôÓF1Bï«vOÎ@ªb6;£%d fÔ¶.Aé„?ªàMØ]„d OU“¾Ð ixʰ,¥ý®“K×5²‚Y£»Áa:êIË»úÃÙ-ªÛ1½‚Ìœ€Ʋ¸Ñû’;ÝûŽ-ñ_i’â5‘DzÑÍ€FgðRXüU,÷}+C˜ÚEàÁ‡D%þ±ï­9Ó¸fIi!xìeñJ NÀ1Y¶‘XìWOz.9Ñ[¢WÈñ"CíÛù§ûqDãÄb´¢;¯ª‘ýÇQ¤—‘rvð>+¤aå–E<UµNÞ™[Š¿ºH©º2Îñ)X!“óãYÊëÙGø¨^é¼ëA#ª¾ê?Ù¬#RV ·[» ´¦}ONÏBðJpD)>"¤c½f¹Ÿ¬n¶cj¶mÕôl²ÚVæ]c÷èÕè÷³2Ï ¿tPQ¼>Ÿ‰³„ÕF ¢zñð8Z"$`=DlTUìÌú™ú÷U òõR½]Ee©7c߃Î%@Æý ½zh“¦º÷ÂÑ—²[Žu Èf-»¥iz¸¾¢– nÿbŸ9'z·ëÚ²_ãßh³‰Geȼm»Å„T q’‘¡Äaž"£C$hmœq À^JÑÐG@âñEG¾&Ts_·OÆõRÛ²fÜ‹­M‚k àˆU÷zOq£«Qí–Êplæ ¢DªRÊÁ&ƒšˆ´¶hUê44¬Ñ²X}ð i]XÕðÆÜó@H0Cj½Ó£c#lbÓzïºÛÐèû®RÍÝ«®ßâW†´‘öFjcz!ßXÑiØ÷)FâP4>[ªWs÷º:­Â£3[=É ÅC{EëÜÉ Íl5ÂïPÞÀ–ÙåÊýò¯8ÂìwËÅÉåi$­~‚£€1‰DÁR™\÷»¾Zøý´\Ì I¨¨­ÔÝ: k2$|ÐoxÉ*:‚ÉŠtXãéond6µ2]Œ~ hû&5äT»QÁæø…O^T³_fÙð€Æ;p¯y«‡áM´Ü±ùõ)B£_Þ£º€-€Cº€»Ñ¡”ÌÝ‚¢£-1;Ú@cÁðèsë]¡·»no[“Û–MÓ5 d³R 4=öT—gÑvÅù)xOCwjIÑó ³6Û †Ì©²ŒèSF/º´Ñ Ÿê¾jZÜ;èÍ«ñzEÛF¾E ‘Œ1…4ñù’ûJÝISâ[ÍX-û«ä¯âfÄûKç%æ+:„‰Ÿ!1¯Òs^¢û¬T;óå]Ž‹†Uxtláî±Úå×7;ËŸASz™ïÛÒ‡ƒ$ÚÕ'åŽoi ‰NÚ,ªÖ›ŠÍhmcÆ ¥ì—8ÚØórýÝí×d®Kđֻº½¯'V÷Žˆ5;&îè¯ ËÆîˆ$ù!¨ýÂŽ€#:+l¥^mWྦ6c*œ p—4k€±}¥‰3À°á“a‚ÙÙ€2:½#±uDß%]pD:½þ¼KÊ$ŒÀ0èï¿îoí"²Ù áØf©7‡hÖ”ú*ö};¢Hç²ýUߺ/ÎëõÃÕûP(ÞÒ K…l>·®zåN¶LU®ÜÞ6ÞÏò¿)ñòWð.58IFW|)˜AÈ_’óx™>D²™æ0Î^¤íÙñ¢Ù@æ·°›fLäšÍÊ#r!B™¤z¼”‚†ÇrÇSÂM08ý/.mb a ³½Ù¼—³Óß=À\zõ™¼þ5y܆2jÎ~=ãSø¯gì³Åb«60®e‘5Æ&}«¼8>ð¸ùèà ÐW—•žp»;=r³kŸbe°¦®úQuDâÖãèi+.be2o`“-L(†¾\÷É~а ›nM):ý˜˜Nܱ f0. ßþÇð¿ _³ €+ ä‚_ɨOÄOó|`¸ØäüÙ¤#ýl¢?ÛçÕûSkLwÜ~Héç€èÔöf  ±ê!M膟±b½× ”u Y °ÑÐÔúþJ/ëŒJÃÌ"è<8@‚¤iXHµëŽy.¿ï.xð7…IÐX<&° ïf2[Á?¥«çͽu ‹*wý~óiJ§$²J1QhÅßÝᘣˆè jDpßN¹'öh¬~Hêág¦v 5ª7ª7 Õ_õfú;øøþ䜴R‹O*öÈœnJ–ê)%»êeã¿·ÛL8Ž2D¤sbP:qì‹°-Â…ÒäVs“‰ª¹ÕÜĘš›C YèX»È†&HCpÃÔÑQÄ ï`ÅçAìx¡4êSaÈ9’ó®±2¾LÌwß}Ç‚&ãªy4\I”fk‡~¸ ûŽ^;Ôî¾ñOä!˜<9›]mz?Ç)ß—ÿD>¬ù’&Ñ‹HÌ%× BáËÏPø2Tø2RørP១ð‡Pá‘Âþø  þ)üq@!IÌצ|UÌnôx:ÔÑTOð|9½&£ u‚t½ u½ÃéߌÁÁÍ݉^t¸‘<ÓûÆý¦ð#Ó‡|øŽÜ¸?Ïòg¸ØC SÖ‡ìÆéy±}†¿¿Å“'ô}3·G@z]®Ð^£¯¿ÎxÝ×n¸–枃¢„³ìAÏßpùÀ+­œÃH‡âq®,LŠñäz òÝ¢o–æË¢ Qa¬c‘å«„®½¬7“›ùQž„~Gc?Ä´2H’+ ÐÁŸÿ„Ô6ÞøkËõÂ/E6ôA¼ Ùsƒ î«~‡×ÈÛçì&}ï¯ÀAlöíf*@cš8z#Â5L^½^Ñx\积0÷]»_×`q¯±âÅ]>¶AÞT¢-my,FlüEÿª ¢K—åPüS˜‡qt^îB[ítVè?QŸ|Ûïqw‹7ÕŸ˜‘U’¬?Yï—Å»î¡XuÅiA¹Ãd©WÁP<ù÷#sºü5‚²¨8^¡}Œ/"(v‘žjæÎ.bh^“9 3yä,ó¥Éaÿœ—&‡ÂRÔØå†,ù eVó¸îçŸî×S=+ ³Ø!½Ôé¢'RëÊ &º›â×z½öËdzoí¨wFƒ…æ#Îâãq)ÁÒrÀ¥€ù ¬åŠdž‰è·êÍqŽ€Ød2Ãê×û>Ä‹™½¯Cù‹@ôQ ‘äЂzr°cr¨¨d¢’‰$ú”ÄJt tl~‰«PÃËÂå)©‘úU¶À¦ñ˜sœ>0î®Z€,«¸õD%¢…UŠ¡×OX‡ þ3[gDìÌD¥Q÷™ç„Óc àI×M €?{ý÷C6àîBªàüF/¹Á)·(Ç“Ù×d¶CÌ–áÉl âÚ̃—rs;ovHÔa†*0j‚†]¸$G|ôL„’Ý›” ô}½m!Þ½n+´¨¦wÐyå Ê$hKG/-R„d… 8¨Ì°µ}^1Cò d6;*ŒÍIô4“7ÝÏö‹Í~1ÇøŒí’ d¬˜SRŽ…)ÉáJg¿8ß/ þ-&'–d|á [;L<¨)뎯7uGÜ%r— i }©›¨0ŸÊ l·Ð];WQLŸ éè‘ÝÀqæ^ž8Æ”$F?$9åð‹ÌÿÒ‚u¥Tó»‰a? 2â!µ¼sƒ»!syć§tàs¶ëzÈzÛVêî¤ï«'eaÀ yGçCƒñL‡&úN’mV…l“² +d+*¶ì=(¿^Ô¦Úæàt"H0A’CÅû7HTw]^ål/”°`K)ÉCpÓ˜¥ÏÍ¿YK@ìÐqFiþu#ŒÍÓZÕÝ— 3êÎ 3ên¡‡É< 3xM²«J“b}UnºúD ¨8»N—ÄРzpº3©\9Õ(£ûRhBw»ÝVýë±÷b(¼gµmÒ¡™’a45ƒ@îRÿv™È¦ûäò´¨M(&Ò3⶯ãØ/G¤Äc·§ wÕfå"êBë”{z.ÆH_QíŠã½êÑä”YÐðÇ|>'ûwƒ»Æð¡ß µòZ6%'FsD+¾‘Xæ  Ô¤ÍçŸÀ³=ÿó™þõíQ_-Ínýç\WÅj*¶ã1I7™%gš2AüÇ»F±P^(&;ûµ`2å ÕtS–‡- À™Üɘ‚gè>ëÈ"`H ´ÙDçA#^„ gzd¹b´#E=É(iCtü$‚FN§ì”a˜Ž,€tzÑÿ” DÒ†@0/‚ÉȨà‘èM™ Ê„/4ýî3;™$ €aV„ S§ú‰ºš¼€LQpäå£GžèD´[NöŸûÉ¥a’4s/ˆ>Ã@“Uöò‚Íà%¶å'{&®á³\ÑNå V!c&’ ÚØ` hvÔ‹7,rÅa¡{&ú ÷RVN°²a¨µ¦ÕCÕ×_ápœ%EgãW”~ä=¦Ë‰D?Èû†’JJ2†ô‡¾ÒczŠçth”8FÀÌW¤ãœ¶Qø)-ÿa¢G?ÝøÁõÝÏ©WÑvåª{ `Å+ÝeŸŠÙì}ê¨ûÚ|¹PÙ÷ZÃôÊc©óS÷W Vú¶½û…¯*m^üÇvQÿ‘ÿ'ŽÛ‚Ïœé; #X-Âóâ(1±À´Z„GËEÈϱé*í¸°ç6“ƒÄäׯÊÂÌA—åc±ŒÅ;ŽÔªù;@ ëÍ‚p~4¦ŒY$"ôqùsˆ#NVÒ2ÂÓfÔN›¨Ö¯v‘Ô oŠEÕBù{š, ˜Kï¼´Ã6©ÙèÍŸÊ$)}X˜€#r2·x^˜wx?§M”ÍMa…ƒÏâ'.„…ªT›ÔÑù0uzR'¹Yw6{_À®¸ÙО…^àb{àV›ét4”N“€ôO†\$á‰CÔÎgVm_/»~•¥Ý#õAPV€…$ðÓDi£°nªeÆÐ.©L•80.•*|ÄK?¡aBí3ºÃ#M›Ñ§%•@д~_&¯E£#ö[$yå|î;ñl˜ ƧAqnΰóÉ-|ÿÏ ˜‡é/œŒyðd²f“.ÂnÐgÝîiq@èÀš ‰Ó¤±óÞHÿ)ç8JׄÑyÃä*ö±ô˜OÅý©~?j“…óéœtN—Eã$gxR& ú)D¦ECÖ± >û&1 "%øíwVçpâ«™Ôª¶ZSÑÆÎ“ÐÎÜÚª_gð)%”M‰9^UòÀ&h`’>ë6^sáp½°è–wõòS:Ié£Ãœ&ŒŽ¸pržéûq 3¿âˆÔ‡ÉŽá`àâ)òX6 g‚ÁG+ BÌ2ï`ä’ùEºÛ©gŸS\#EÙŠ§¡ƒb¾¨PèˆKæo˜‡ËâÓ9ôþžº¤ÄêÈ­…¡.rN¨“‡Sá¹Ô£=’Š—Ñ”3E-«Ÿá³û)H)jsKÌ•=¶ñeÈÉ~×y]üŒ×zȬCÇòfxô2æWq‰\xût i ü¹Õ¬«‰EÖ*XV­ÜBj¥lxÎ]à9|Ev×Rœ¬«¿ë¯(ÝæRKÄ3眤uH0/h|ŸÅù¯ºz=ž¤o¹©5µÚ/ô7”‰&AìàPfŒG2ù€ì¹‘XXõê®ÚùyŸêéæ—2ßâ‹YÝÖ¥¯ot©xq$Èè¼÷ÝìLÞøø]°=ÊBU.4yâ•‚úü³$މXÔÆVÖ±£tÅJ>ÝÛÃÆ)WZD«G*‘&ÄO4w£Ân”hRÿ€½â߯óÄs„6ôàԵݫ;PØ}öÕ 0Û«Áþ™þõ-D—y9{Ú©•ŒYÁîÖc·¸ÕÂ;_11š}¦¦,4I‚ÌÁÏ‚q# Ñ’?òŒp “cPŠ] DAuEƒQânB3ÌžôÎÝ *1AJÏ~1ª%¤eCoÒòÏÉùü¤–éc·‘ɉýsè;„̼üʳtåûú57ÕŸ“:ŒÑ  ^zN«*¿ß]CÒ-2X—ùJ±¢¼‡I‡Zw)îI’“\¯„Ñþô\élöy”6RÜÛݰ&glòLØ×ºˆ°1 sÔŒ§E†ƒN=µTúY¼Ù,û§-ìù´r¤sŽÛSuÏo8“¯ÁØánKÂÈ&B¼-BbéÔ<-Û¯VF愃¾¿G¯³>_¾•çTðZ:¨$˜ôö›f÷tÒù-·i3N°ò)ú×*‚•E`Ó8cLžg@ló˜Í(‚ìÒe;kÒw¯+F2wñçò)ó¸‰Þ-Íìs|8˸ '°”ˆÖ|êr ¼ ýR÷N/±š5ÑrâŒÇ£1eÀ4·VÄŸèn›þ§)îíZÖè}ô®Yî[tÙÓ uvDÍ›Áª@wX¶0py‹ õã¶7®/IT«séßlš9œüÏWO›jÝ,炪Ï0+õc;~cÅ—6CÿÕ” ¾dñ¥UÈnjôGa¿Ñ ü}_|wƒ,;B­Ì+“Wü¤óô´¸ÒIîyÚ}Ëd–Zîë¯2=òK¬ù~Óƒ‡Ðøínr«û¾ëçh(k" |ce•RÖ•I->ˆÔw`»Ú1pš]·Ÿ93“ˆ’D@‰À;²ú*u³Ó.õ€¦a¯2ÆB±#ø%ð£‘põæúêoó·§ïßÌæoÎO~zÿæµ§Iéøb—}.Q¢ ©mvòñÍüòäúÝQWO¼ø•,Rì?`@x÷æãq¯y1¢¨Çî68‰oê 3ƒˆÎ¨Ú”œîZÒ„­¡Þ®ï*½‚ïnv`vV0©B(f‰5‰% t`ìòO ± Kg§Ê(ÎùøÝ;*sbšYçÌ?)w v§Öø’H58ÞãLѨj]º<‡Öc€á¤Îf4ÞÁñc»¦š¸Öp M'X<úïÀz•,îõGÛ­ë‚öíÅuÛš*P7eW­ÖÕöøêâäõÙÉåüûùwÞ#Î=—}—ñý¸ŒïCß'd¼—{†KÈøa\Fìñ-!ãÇq±'7+cÿ¤¸1Ã绢,Ã.Ò#Æoþ’`…øÚK8eíE!÷%›l{”MI¿TSi éýJÓ³œy×ßV›æïã =7G,`;¼EÝK;‘k9¥'çºRŸpÒ~‡º/.dî[=dh$mMT]õË»Ä`ŸDÐ×:Yz Bõ$ƒû.‚0¡¸Ô Gä8è+Ì„xêç+½zêžÄÊ{¨ÝÈ-nÈ.]¶kÇQ·ç94åòø‘kñç@N¡ôEXt‡ïùáI MPgA„>Èk Ò"ddR3Bßþ ¯ HRüÊ€Òú톮ñRz4,w»C4[6"IúÑ»ÝÞº/¸ŒÛ®‹Õâ¨ßoæ]tX–÷½î7%²‚+ø <“¾d÷ÿ# _YղͲY"·`!»ÔÙ¡ÍBÄ(V˜”Wœ¼zoL½°Èô>ì(³`ù´>&Î qrŒ†3I3©¿‰´6RW#4ÐO*ÄoðmëÜ´c¸ •SgÅî,—D•Ui²éÌ‚D]Q.éVNº×Éýã í%_5jÙéYá”}ˆ?¨ ™Æw8WüV/ÐàqéßûqGÈHÃY³ì;8c*NwL:>½¤–›Táh¹và÷ yÉÌoLÑ 6¶ý´¢ã«x>‘Ñ͙տF‚-·ËŒªº5Ó?w„n&ðzFÚÁÇh)>íu¯—wuF‹;Ú‘Òüâ¬`£sè¯ïõnZ7Ñ‘ÞJN‚¨2(t=hs9­ÉfF6ŸcÕè¶“zú^e4YÀÀý¯Ûè ݃¡Øëºmî1Ô<ÜDØm$«£ÑµÃ´r¹ÈàÚüȼ ŽkvHËOz§• ÝHOùx†/•“ÜÓ½‘ûàkÜÌÖ+±€ÎNÝíSz2°ÙÇDσ1þ] ^LðÞoŠ({Ç_&lñ_gçÄèD I<õ†ËèFGSð*rYµ&Uú9gˆ&¥nB¥7-t ¨¿:’ò—˜Æ!÷̑խnp:ÜÖOB*FnR-x“ÇÍz}+†Ù›÷ºo?œ£›ª¾ÁH“‘"2£Ó$;¥&Eø§3Zñ>Ôd¯õ†ªhUßèy›N¹•Þ$bLÀ\÷Ý–ÁàáŸÎm·MÒxº^J¡³ôbY÷ðÊŽuk"8Q’Æêƒ4Wxü Ë&ò€Â;B²#e? \V瞊*…ÎQ‘ûH\vJ0 |.Šâb–[‹Àkœ›Õm߬&ÐyD%:$ôÛúq‚‡GZkë¦HÿH Œ´¦WûŒ°˜ÎêW{ÿ¸KŠ$Ò{(e”¶ÍÔ9o‚ÐS‹^L“i¦dÏG(ã «¡>ˆO)‘pŽ…#,&=FéÏw³¬3Àø” çø`81l“ÌG~Eî#€ArOâ @Ì!“fÿ˜-L`$F?$9h…™æ9fïž¶u0`R`éë{/~õ7æ—±Áÿ¼xÖªî›êkDu#ßÉ-xR¯Ç€ÌÆ$»ú4)¢N+~¨ŠÉoáé U-ˆñÉUÆu@ŠÒ!G-Þu€GN×`ÍÉ<5HK)½½Z| aaåJAñAˆƒsP§êݼÞÜ7}·Á[§<ÉiÖR²‚¹¥ÖOÁÇ1mN®ßøÈô©èðe‚¤·¥ä$fc †'žzykzÍ¿#D¨‘‰JðˆBHtÕ@D8 ÑFŸ '€õA³¨I…’ÊiÄT©X'ý %† Zîû¾ÆE?m¥ú=Œ·d6?_<Áá)í =<,û'§H8·ÏFP¹x*­ ™u?ýd÷§ râÑ…¤°ÒÝ£ üaߟ(ïŠð«»Û ÄLèö0m’iŸÚ!rÆpSr¶1Ô°€"F1ŒëµÍê-ô1&AX´„pPj ؃…F‹A ÀE̸.ƒ•‰I»‡“Ì]Wœ}<½ÄEäLÿñ÷¦ÖN5·*§-rCh-WÕ;(,UцØyy†‚˜° DƒßñäešÕÆÄ(¡ðü(*ΈÀTŒ'ŠÊÁoe˜ÃJ1|ë<ö5{¤î¦#Zq,ùoÔG° *OA²ô ~Ð<ѱ€)ŒfBâSs‚úwÖ5Zƒ‚Bª2<„‹Ï\¸éfC®ƒ^ ŽûC;å,¢,µÓF¿íBʦ c¶j7§<»ðs"Áí°VߘAUÑý˜]+}¦ÑH4—ÄtMæ$þ´'›Uw{Å—É’éŽ0’÷r¯vÝš§®Ãì11ê7ñÓ\XÌÞ]ü6õav}q6Ÿ]Ÿ\ÏŽàÈKWzmÞc DÏ™º$1¥ã^©Ì0G<ø0ÏIŽÔ§f»}Ê>d@jÖ†‹ãü ÷æzqÙCD=ëm÷|,ÕÜn:4™ÚšŽöºŽÛù„ª¤`õméìP1Û¹À§¿ºMZáêQ:O™u7»÷hBkÆËšÌҷŠË×ÒÕ mæ¡qŠú½äaTûf³1*ë/mnàQŸ-­ÓƲ=;7Ò°ýt;­Ä =:ÑS¥ÄtFåxþú¿þ­ø¬"U»ï'O‚Â(Õ)N£þ…ƒ•y:€c†8aÔe\Wý®ûÒ€r,%ð9£T«£Yƒ7ñŒÍÐ ½¯ óƒQÌJ‘_ÌŬÀc-¥ëÍz›)$c$:9` …•–pVÁ» Ø5‘Öìü Ö_=8fxL‹é =8ú¾Ò©uÀrü튎Ùn͸Lƒ/™vnç݃Æ2Uaˆ²+ó9ñíá¬A‡ãçÒ£ ë*žÍÎgßzA¡`+zwÝv"à]Hå0`ª@Bdb¯&qZeé*v¶p¤Ð¦íGçRûzrƒd¬«ðÁþ|§l°Ê¸ëº}ÅABÑ ´$¡¯à©'\4ü×þßBe¹ÿõŸÿÏ\‰büž/ý(œð³4éGàá¦oÔ´M[‚ÐèÀ ϦM{ëHHec6ÕõËzÂ6ß§1ú0ͩŸCÃ*½†9ƒôŸÏ?ó19¥Â­Aßµ™‘gðHø`†óD-£šW”l_È©m½lªv¾«ns–c@Æjˆ±DÆý(®õY¯èÖqÂJ.r˜©ÔbšqJñaËò.Ükµm›€ ôç.#Aœ Œën[¼‡‡en‘Xœ@‹|ÈÀâê§'2îF>4}Ôk ŒD;ñ’0x¤fùKÍ_"ÿÌ$û¾žÂñ·\T¹z¸B÷¨Z{‡‘ÍÁ2b^·•Ú5Óî$&˜ ."*5Q)ˆlç"¢²´31ŽvoråøÂAÅ€ÆN>Rª WX!ËþSù®°,™-²reåý×ûf×Óh Ú« A‹ʰ 1]ܺM¸^¢ÕÍêª`ã>=å}jôŠõª¸˜\“äb:•Œ'HÝ+tšUFpë\_n?ŒxBãáY+=P@Ï¦Öæ J!Ýäxå5‰ž™,´!8Rê®xÞrïëo?ëõ‚P?\%¨»ƒ Ñìá‡"ùð „0Ü ¤ð]Ý¢Ù€3PÅ"§ô8–AÁŽ›‚: ýÓªo¦×Ät,×¥Û6pIf™·+z8‚¨Þ™u;Zæ¹›à#XÍt0«˜NÀj¼`V‚4 †‰BÛŸ \/¬ ŽÌËy9ü€ÑÖ©÷ Œ«WŸ;­’”ò^•(ÎÃt‘_77ØÕw Ì3"*î1P§ñ<Hy¶ý\,kPïfUéMÌ€AÏ„o=Ã.lzfœTœš$§¤íºmÎZ é Äk¥¿‡ŸGè¡`^í0r{†`¤×“c½µÒ{=ëï0 ù-ì¼}'lúõç€ÿª' am‹vlš£IBÀWz®?±¶2>Â5J+9ÞdwcÿCétfƒµÊkÎ0ÇÛˆF7µpt1Yþ¤“Y?!³óO*šÍª{ =û“^Ê3닦+V•º[tº;hð«ºï³Ï½Ú€„¿KÉ©ð +Sŧ}ÏÑÂ…ÌÐÑ‹h@ú#èSŸÑÿ¢›¥Þ}y0¸0œ aw;äØèékÜç³( Ò7Li Ò/ ùh–,ÞC(“@°ÊªOÏS¨C‡NOb:ë½9˜[˜X(‡€£„$”FÂìúêôüçùõß.߀S‚ë7Wz±¹SóJ)¸ËÁW±ãßRŠÖèS%åá~Í}A ̸ø ,;ëœWæõrßÃ}ãu÷©vÇ>°Lèd*W¯·º¿èá{Ù×èh½j@‘ÿ’ùX'‹¢v…àÜse1<6] B¥—e”QP†}¢6\¨#µ_pŒœ,·•‚œqº{ëã’46ÝŸÀz]lôÔ[¯ÜÛ9¶¨Ñ«î20¹VdÙ´_p̓¶Ê5ýõ\lŒó,-àLL…d¶´œl›Ã¦è²¾Æõ$œY‹dçpA+_uŸµ¨Çad¿…6ƒƒ£ÝÄE`‚Òà9®"q0b–^ÝöÕædÚËCè3Js{GÜXq«#v‡o¥¾Ô}Ë·XP÷ç­÷ÁIë½;c½_Ѝ •^ìêŽÔµJ˜Ý÷?L^Ÿx4F ¦9Eø3>Jœ}¼ú¡ØÒÁŸÖö 7"ÝÄâÉ£am”fµÑO•–M©ÉÞçÏÞ]–~ÿV£Øo'…A Sœ~ýC[ÓW/öä×CR¯t÷dÐGë:8ÿxÚ,ïô§ùûİÑ1—nѸ$ꋇ:Z_Tºó‚;Z|Y¦×#ëê“õ4B‹×MîªøÏ}£W:PÝ=Ÿ®šü%‰©äW‡¿\c‰ÇÜ”õæPÔÕv·ó?D7È\®9«Y'” nŽJ£Pxq ¯äþI¤G@%UKƒ “€Kní5Š åtꮑ¹Àóh­^æ–w´ƒ°«;âø J¤&:RÂd£æ¡ê7hdvຉd[îÙßf×oÎæ¿\ëµÓŒ¥¯¦EÐH¹+Ñ ð3a ©wÀzš½«õ²¡Ê{Ùîýõ_¥ä½®nõ×þFÙèÈä`©Äò®à/yî*/ýÛ–b:øË—aeC€F+çºêšWטg\$bͨ/~›ÿÏzAs={Ø5€­¶ë“Ÿgó«ç$¬*>Gò¡¨Ù/§—ZVs[ÑEâhçŠéŒLNw†¦“ Rw"~lŽÃ1f…¢è•®lM ‡.øh_øj´šöôâsÖQ4Èù¶å$6sÉ.ŒÎÔŽæ£ÍÜ5BÁ°”;ð ¡ F+Ü'2€(ÑV5ÿ†×Ù”'f;Gî6ôa3ñbß#±ê7î­>ýšŒbÉdÆl§Ðêl\·Gd´S¢ÓO¿Åµ‹Û«ÑKqF¡ûº:{Ú!¨FÎþÇÐ:íðËì|Ìo CJYøÆ æS=Œ 2~G¤Ð$¸:ûk³ù£úÞa™ª A`5ÁX®ùOkLvÈh—ħÈÿomߺãF’¥÷ŸO‘@/ PªlÌÛ°Ý(I%wyTÕ5Å’Ô3†A$ɬb®H&‡IÖ¥ Ìcì¾Þ<Éž[DœˆŒÌJc gTŒ8—/"3ãz.ì!`•wßÿmÕû}E†×ãø}*+„K] ¤Às[¸³¥*8Ô+|¨˜p§{=áxÕ.þ|bnjûew‡R1¾uÁ³@üjaŽéŽëC÷b‘½4ìL~tŽO #DÆà Çý“áTm˜£ ¿hz¹L n2j4†yθÑh7‘AÈ«sý2Ou€Üa¢„Y‚qã5B‚ä?Ðl%)˜\éë¯Âržž¨ f#_~[á屢/$ûÝçûz¨Ê®#?c™ ÿŒªU- ßÙ0ËýEÎ+Þ·›nRÛíÖã3ïvÆÇñY+,Qt®êÒ+¦0¥Až2FÍO«zK·uß'Ú:½$g°jÝ9…(¦tbî`ñuUÓMÍÿfÓ å-îh8s1'gQÕrÕ.D#È*EVéd•JÖŸ˜¤xgI´Ñ JA“Zuÿk.‘XŠÄ;þÉË.Ö—}@ÄNªº  Ÿ&jþ à$h K†Ï¤&i±9EÚRËüö.Ôm¡¸ú€¾Ç]†u‘eD®×iÀL1™…ù®ÙñâáŽ~OíCî=YË¡ÉòË.ä7®Øê=Ns¸$Ä1íÁ· >ÆXÊJ3#ÌܹóxgƉ Ž'|z¶ÒvnÀ¤²Ùð™Î¶e1°}ñ36¨óð·‚4msÔ§Óø<Ë"Ez *b0€’Wø=2 G_à;ÂSÀ ½Áâb›§…´• bîAs×Ì'às'ëòŸÛùŒÍé3Pöˆ5L¨,¹ÒÇé˜ðƒËým€ëÿ´sh]·‹U&"8DÄ•}D\ŽçTü‡Bbi²^©€´‡£ _-Àð¿C ¶Ó(ò6Cä!šÞ†¢ÇxÊK¥ù4槪Éí9EbŪ>N,Œ_ñÜ÷áô„äÝÊ@"õx4Cå>‘ßUÄ`é¨Â¸"äž®öQzÑ‹O«ù:ÁœÎ1F©‘¡=òSð™-y±Ü#Ó ôu²#<Ò›G{¨SÇ=!™Æ‚Å>,9 Ò,´JcQd ûX(uÉ X°`¼ ›‚ë» öuvÀ¤vøK­báÚ³TÆ Ï]ˆÐ (9VÍ–\6“× ÅÝO„ò©Y£)ÏXkAIE¶Ÿé—‹Sp$!¾MáÓM;ÇíÕn…kâà Ö@«âŽø ¯_v5lÜÆm]"Á!…‰ü6¦••Fa*'Ǭ®w³]ÛŽ¯}:Ö åe³+±Ü(V¤zÐè"¾\b*™bG»¸­¥HƒŸßOM‚#B„É¢µ‹yڃȉ¥52û¨?_Û„@T{#r‡áoªE^„.TôúÔûð®ÎßçöêÿãT„;l™úyÑ‘îîÔ'Ú¥žh7òD»Ñ':=ý‰>®æUÞBnˆÚÇÚÞ2®ÇæC~üåÝyႇqâakŸ¢R¸°ÔÃ>Ž/ð5Œ©ß6‹º)B­à@m¼›4[ÐMחﳺ©Ëê¦.ÚM]ØM]¿›¦£Ýôô´ÍB*zãƒ!ö¡|ýz}üׯ7×£Är3[n»¯Ñ(©`[nJ¨ |G}eäýf ,(xÓqÛऎ‹] Äû!w b„$Oª"„>8}b¥‰}`äW˜+}–R9@Þ9Š%sPÚ{²¿@cµg>0!•ݪڧ»AS9•TªUR²4¨6óª ÂÌH®S"‡E¯Q ‘2•¢VcYû§q ¶^Ôß?YÍ÷ONé}³¯Ÿ0…Ý~þøur¤Ü`³C‹gÏÛX°’ï;ýe¹å¡Åsè­6Ñ‰lHÀ±BУ÷‹U* cHe•r©m¼)ÀTí[´C£«SÈ£¯Úá¯_^C×ï^8v¨3fåÀ£°FÁ%øÛ‰{P?è肟m*{ÎŽ•AÄVö³Š”A?Ù£jYo1¢œÙ ±õ<èéªûú„«jùˆ§fK¹ø4ZQнºúL?qˆ¾­žð‚Œ.°ŽÐ²DÔ:I\SíºïN/ kP†Í7§o±äÿ‚âÿWüÏ‚òwuèû£êP†§Ž¤†êèn£'Ì4ûtF•-·_ƒ+"/ð£dÂ%—‡â3Õ·T½i·”˜mû09î›q¶^ï«p߀"¼ÞSPu0p½±÷:î×9—@fd¯ÍüÉFÌÏš<Ð7ûùöHÞmR¸…‘%;üÀaƒþݘ¥DW÷Ýz8r‡RÿN0 ´9@ÝÉ:ŹŸáa ë¸Å—윻#l;¼Rí°/¼Øf§Yh!'HP+>O/f7·ÓËéÝÅõÝìý¯××ïï.½žNlаSBS¡*fúJÁz:p±‡Š§êEYËÒó-Ч³}½Ä‡ÍüxÀß?“vôénvt¯Ó}GJä.™Û¶fá’GXo‡Ñƒ ¾ÐDŽ*IùH%Rç ¦í8—•ŽÀ7œµc’± JꋬšŠw¸N¸1ej`âý–!žÈD,ýGqc1áwR¢¥”Ì&\ö 9_Áö÷ŒA·Ç-ìx_O’¦ei]¡“Ù’ÉèÎ$)ÜÛ¸,o¤x’È8˜!ßKNˆ‰_ä÷›0i){X~¢¥”¼hqõaDí1ýŠÖ|è<àRôB "›_ÿ›Ý·ÏMÝ .3¦ ŸÜ¼2ø‹’UB“.ÑI#Ñ"µ¡M+sù±)ÛP;ò$:YvÀ%¡ ›å ŠtÙzÆ1¥Ô'V .òÜGxrxÿ2IÄÏHëóCmð²C­cÈD8‰ ñží¾6ÐtúK µžOpÀæÝzÚ$ÅYRêX_±ƒÎëɰ]}†xc}O6ýxmÌï¤8ohú2¯LjmGÂ1¡ ºT­iYå”þö[êZKDD‰†C„†ËXn?Ú²‘‰5ZQšÅüiå0:tJžIA\t˜bgO`Jl8ÉóN'ÌýI~8ç_wžk»Ùù{3·ÉÈ;Å_ yݸ4%3xýê.+Y‰^²þDRl–’’¥ÐÝ#ç?­@a—¶Å5PL¬Öú¹Â(ýߥXTZVÅ…”85u ãèÞhg")~@+…,pK#Ñ‚øˆ†ÛSKà°ìàSE»E}â5²Õ­$|9¿½<÷ébvs{ñþâÃÅõû §©[´»êZ`Û4¥ßVž ɧèéàÅWã´ÝÁù&û%î]Ü=‘~$rË-JôÊ‚ø¾`Ídzâ6|,•Zœwã{:…—[Ì©).Ñó±ÆMÙeHð­ÿ^|DRÖÌ2~¬{ ’ödØ”¸1™Ø…ƒú¸43¤1·]²M,ÚÖ³¢d€Í@Í@`M#öþ½!’°;`jñ3ÉÉu@–BÏ;ñôC$5#&.=1HÌ2.—ÁDÏÅ7f ÒÍ®à‡»µ[aÐ ‹j–0¡ôH¤‹ªt†”L/Gµ\š˜ÙÖžr”XsUñ/ Ú®ð/à"íÛD¨bŸÆéߺ€ÅBâ#À‚¤òG踤vEäÔc¡Ö¿Up”G2=*Λ}ñx5&ãU÷ôÖh÷¯Þz™Ø§FI ª*¹Ê!Ñ Ê¼•~“=íZPR W¦µxÖðúl»: Oë#’º’;L_®(YÕã{ª/L=¦¥›<²± ™&œR£¤‚ˆ«J®²€<2œÇ?ºb'q™¼°”)ìm¢o«%A–4 e2^R„ÐG¨ã&ib4³Û­ÛŠ¼Ê¶õT¹XŽEýÜp<Œó k‘‰‚°¼¥0ÓFºáÈÂûØMeˆßb¢trÑÀñͤï×íSQɵx³†Ü&P¶°ÖaA·¼+ãiòõ_>ü:1AeMÙ÷Ù'š´V² ÝB¿Q PWAì–ÑæŒpXHÄo1MޱÓ{įÍ®Þr\Ýnjºø´qŒÀ$Ûy{®Ú‡jjíÎK`Xeéìi1J_‰—CÍ#W €Mû "N«æZtKŽú0´k²&6ÑXlf‰˜½½Ê‚9ºy€ï‚KÐ}sUoLLW»©²€z¤>T® Ári\¡D¼|1gñ%Ï`#„>6}&«‰spíѦׯ©ŸðH­®Së5fUôþ¥’w~$7dLl9ÞZG`äîÝŒ뵃dÉ”£Ó®‹.Ð6yrެ2$0 RªU @Cä¦fÑa<\‚@DŸte ©”níÄfÉúÚ%/;°M¤W†SÂ'ŽY…ßË +±²%º¹Þ—þ÷,\~W˜×ȼ}Î>ÆjYņîžEFµu¨ÿþ·‡b6¾ ±wÅk›¸*ŸÚ:Ÿm°}B6ÒB“åÇ=X+bmöZã·¹ 9úmpËé|[©»Õ3.ü€n»ß§#–Õƒo’eÏ}p­÷ ÖŽñ6 âÃ.q¼˜¼ß׿¾íT 1¶b!î Êí{K˜ùŒ’S¿äÆ‘†Ž|Í¡°H™Ó>htªÃ¤ÙÍ úÍ01ø¦NC ¼Š¶[0ÏÁêrÓpêBc€ÊúŠŒBİM¬%Š·-·IC-é7@6ygd÷û¨ôâ¤|Æ{½`5A¶‡]6GÛGu±n…b•CýîæÄw@2ÁøùƸúˆ…jøãõÄ }»fãRÙ‘Ô@{$ɉí‰qõÛ#TÃíñÄäŽE6ôJLÒ©Nœo¸)#ÃM ªŸŒƒdñ¹Küa²ÇM~Zõã&ŠÓ°8dóªk2âÓV“o?†«6÷9á™(ÄäQ‰XÓ†ˆ©®˜È~È$¨ë2ND@øÏ^cäÁìs„`á?{oÒƒ¬Ø½„8¯KÎï1ÑÁá…ïMpývs³ß£ ü®£«3öd6*ÊÕkX×Ñ•…ñúóŸA¯‹œïÊ¥:źªöËÂÜ#Z}kàšö­Þoëõ)A„#hS |š]]ý‘*—‹=ÈÍî„kÃA®8ôf¿Fì‹ñó/­ð•cŒÁ~ÎÑÂ{ÐO<3NÉà@Ù ²úV½µF×—ïél›fyþœß:ÔmîEO`n#×1RJÖ‚t³¾Îä T<^µúXâ‘‚ŽçDè}làNÜæÍòS »x¨ØŒ9Ç£²8¸Tà‚Ƚš‰Zé«îVè’Ôí‘9åݪ„b­ •zŒŠ&û^Œí»[ì›Ý!©>FíPpmɵŒÇ¦1qEÁ´´aj$·Î£ŸXçqïÇ,ïÜþÙ(êh=èÙãÚú„¢’+J¬°z1Íðäæe»øRØË‹#ãV=Bé#ñïÕ5¹Ý`Jñ³™õ¹úË•ÍyãŒAGaý¨±Êmõ°lòøÒv³yµÝ¦žyN$CyÉå¶áŽÔ-oȯ{MV TïÂ˯Sç+‚l&JkŠO¨°H…ÆÄËæ}æ4h1^š š=ÓšôšµGçañÖ¥ŽT¶¡Rÿrþ“»,ÃX2fýL!ñgzKHŸÈz®$ü›¶$žö®É•±Ø£›4žTa²U.w,dûÈ-„ÍS2f×ÞÓZÿá`j…mý‡xšÍ!üôwœÕ%P6ÛoÕCÆKåjl\áÃâ2m"¾ýV@ÉÞ„RT«alëåî¤>ŒÑk¤P?Ô«êÉOnt_ö>ú<Ìq¤!¾Õ)PÚ‡ŠŒ‘Dãj@\ácâ2}2Í€% Ã$ÛÈš6b…EjÜÌ…¬-­šÅ ^­CÆë¡VZ¸¶¤Z¯ÙšM]îP)îÜ©BÞìêp¨Fž o—3j:‘Ê}tlbÈS ZÝKÁøÌ’^cT „·Î2d®cp‡¶àAÞÓûðC¡a0˜Ñ* FQ)0XêÁ5½™ÌXÑgBFh÷í^EÓÅ1LψÈ` êUœƒ-Â*¶k°4¥¬"2ëÉãk`Þ««ÅŠRp˜I7 cX€ÆB`P‹·˜×÷¼<hÛ#Fš|ª¾Õí6õ¤B*£^J~)Pi«øœ¾BE ½†éý^}m?½.æû¶Z.`±L×ÚõaòTÏÑþdEûãÃ9æ/À7‹ó Èz^úõvÀù */½*†¥šiä„pc¬Î0^RöJxÀí3gÅíÅô®8¿¹„?ëÃâgÔxÏ.¹³”o|”Ôª—ªRùÉû ýÓ¢ÝnÝ,Ä^‚.µ¿Z>&R~lÇ ðùÛ§Q+[Îs;ÂRöô,ç‘nXÎ#gfÖ‹š=€'}5DÝÇåJõØzøÌÑåÇ9ÎÕIU+T“¯\&XŸ¼‡Vª#p¥¦‡WÊëˆ]“˜ßã´=pXA†Å‘ÇŒé~°&þ¦¯*ºTœÍëYmœM9Èœ “™p]Ex{YÎëÒÊàØr,ƒ¢;½‡aò]­Á«Å^& oÒ®Ãô‚Æ|¨/U½ºú¬x’BqPŠó÷Ÿ Uaqå`‰é÷uÒ‚í@'šgK …ør»|¼0~Q¶©fM)ëYÚ#@›´°#|H³&ù}ÉÙó(ÌHS2M°a±70¯ MÙ%e8¤ƒsâZBç"7g&~y«š‘¼Îˆ’† õU†Ï`B*`H‚°—x)õà ô†ç/y¨å,0úÂ=®Ü0MbÊ1aŒÃ!V¥ç˜eWñ´?tõƒת]Ðô’Æ’*`¶ÊCdKUSc'Ë7ÇŽ„Ñd÷éÿ X‘‚‹çzqd« SH« ÙšÈÉ[´™cÎ]F§„7 cçw„½™hèVLb—ˆbܪÛå½ ×MÙÙƲ†MÐCˆGæ p±Ã%|YÞÁG…p ,‰cï5rWÇGíúHs²6Ý·ŒCé(©‚Uþá´Ï€ÃMðÒâÙÎb¨°š—×ø—v†0yÙæLŠF`³Aî,°š4KU=°TªN¬§¿ž}ùåþï7Ž‘±iqÝ èë¾n\úø`!©†®ôTå³ ~îk¼·–˜…qL¼’xMëÄAÕ‡BÈ{(Gá ÙUÊiÞb¹ª³M½™£'ßò²(Ïtº%º!é[øâ|ï>d¹tųÀðZ{!x¤)|¯ñq‹ºU“ ²ÇÑCê("p]eØÑgx<Ç­QDãÝ›‹yhˆçmG/*~ÉÀâ¿Â§í@0í[#y¤§í!ÒÇ«‹šE  ®›U•ú%‡Ï`–49Òj|XWbϲ˜@rô7M*0¹íðòûçOä¬~{}qW˜y °[¤Y¨[x@º¥ì}l¿ÑÄzƒÎØEûÃô}ƒT ¡¤þ>­Ã¡ê4LjBÜ5÷/….TÛ¬Ød[cP¡uû‚`5—F#W ¥º¤j§ÇˆGÂ{<õÀ_ /ÌËF”xë̆6*Ç êï9™OR»Oç”K¹Ö-EôÑ¡OóÇmc~Ú„’IHOaSކøÄY[2€5‘€4iˆ¬õ í‡ö‹od—UÒ¾XºØôo F1 ŽOÀ2¡xöªÄ4¦ø­#˜‹ß.Øðe~lÖËBhVƺºé‚aø+j‰k!óUAщa¤æ.Á3ZZXSz(ØoÀ Ù f%0ŒŸhŠG¨áoT I Íp"aŸ©½=,À)žBBècÉÚI[Æy¨ÂýdhgXÈÕñÐn܉~˜ç<ǧs@Ð9óž+B Ê?´O[œJo Y~ürwwó†þJ[Ùw78þØm¬Žò, "/©¢Ë•¹?"ñ¶$\°h¨yøâ $rBM¡ùˆZ©ç!qÕî›ç¤VÌ©åb­—K@±ŒC£!ÓÉtÞ4ÝLlí QÒ“DeH¤áÆ„ø{g5î0äýåô­ÅþTÏÕEWò(‹Û' Qûµ>fG—‚úö-›t $Ôî`}FÜg¨¥Î£ÒsÕ€ Ôç EnÎÅè“÷0Ju£Ô„Ý@¤ë¡ñxú‚)JÛCæ]0ù,c˜ š'6Û¬¥CÔ!qUˆ+µÀ°«0,ëq]atotkç-¤“³Ä;uªPÖkçlQ²´Gí82=¸úy‡î,xãCmÛà!ür¶ÜÃn%Ùº±kW–T©[¨™ ð“Cr‹ÉóN·H ªK¿‘ŽFAè¼w~ŠjÜ@³É¦%û(Ωa_¼ãéš®É@ÑDP4>Š&cÝz5½äÅ©Þv]úÐ]9åX¨µãoP=^Á?¸Ì¹†Qnz\PÆá){ÂËôÉÓƆYS9íTªÕSÜMÐߤ„MH)ñ霗A)’"ÕÓgª—«­½UËCõi„ Wøp¸ ðüéXÃd/8__¶ª¿ñŰo8«†ÃÊ×Xõ—ETÝé²úœ™`ÿwÁ¨¿ã±þÜîžÍNDÎakŒ.½(ˆŽù ÌvIk¦©BƒUåNÛ5y öNŽ’88UxgIâK¼œ*ó\;F­ÐqmÿtÛcC·ý}ûˆñ˜Ýãcï`û•-\¾±ßê—׌»«Ÿëô!ŽG¦R±‘JÌq’5e|Å·ë—×E…[Kîa­y„†Ú×nlßu,/”G¨aq‰L~ôCœË{DsBß÷,K›¿šŒ;)@qz‡ËÔ›Œ< ^Àê¾Ì[ª¸ú“‰|ÍÀêyÛ¦¾<2ƒŠ=íTBÛqú£²Ÿ¥¸hŠÖ2©ÍÐëjÍd­ëëfbо§Ã€Î{}MœQóŠë;R|ˆðF£‡ý ™ßä pïT“…TÑy@±<À‰Eüþ¼‘±ú2;ònoi§Næ‰=älI<2N°õà™7qŒ’Tk/qòY«Sï3fÔ€ÐÃ@ *Ã×ÿ•;âC‡:~$¶[\þ$z ž'£lçmÖ…i@¨PJ…‡Rʰ·^¶‹ÌmÍאּÞÔq²R¾nxÌØnôíÔÚÑßb»ôÐzM Ô©š"´šI)u4N%ZÂ(…ðÔÝÕÏЫÛÕõb%2hm¾1®¬¾™1¿Í­„é_¿P’lŒ˜C;ãÃÛU²œªî[jŒ\¡6Õ%V{ ð•I¿)/°<Š)kàæDgö˜s|d›ÚFÜ'·¡^÷ÍáÅX½$ñGév©7F6·ÏŠg²â³*S_H½7ºØ@ZI|šNã’X]o<\˜xÿJ+e»ü2aň~UeÜ(h*¥~Uù· TÐ_S±QWg?÷ã²°ºÚ?x6±XͤàßÚD™%ÈÞ³[µûPg`ð5 ®ð‘p™ú´¤Dï@Öý‚ÂO&öÇ9„´cÆ«¬MY@èP˜ Ä”¹kJ­Õî+™¿ŒñHp[còoe¡YW‡8šuuè¡Ys,˜;—à‹çQЍÐ:»#¶j4ͦÆÔ"i4>¡B#)ã5‡Ûs˜ ¦ž!´U—~;4•RŽ¥žf,°ç4wôëÉÚY‰9¾-ã7ÿå?ã,‹½¸WwµÇíï·šÊ!¥R” Ð(ÿ¥í¥Y{(Êš´‡þzäûG}©d¯Jä‚=É£S¨¸ÜÃ% ÊÜÝX/óÝ€ ¯öa°O#Ø÷϶ ÌÓ¼ç³-ètÚ´RvuÅWŒØ²üÅ"”Nè7¦É¿Çw ùëù®YlÒС‚%*)ÓG°})ößÀÀó’ujØ› šÎíભ6éÏÆ#Sà¨ØƒF%£ËGÚÃ÷{<«ã÷úöÄ ŒH%ƒäì¾úë þðCÿŠÒ‚ JfýºzÁˆ{Å%ºõ+ëWúÆ`Op@Ïe[Ó˜L9( Ø¢óm×Ì×õÏNžÓŸO죲.ef2>}ˆT;jFs‡¹ú3b°²÷åÿYp³Ù=—¶æ•.®šÅ¾íÚ{m n¯&ä<ô?Ø4RNpþ׺»/K,Í™Ð{OWIß¼[>Ovß ió±PäûÊ<¿›~ð%G’î?-Û>‘OOWæéh¶ñi'”ˆÇíiº1Å“çêpN5k óýÑ7rÓ·µ”Të°†g ÅÚ…óÝø”­DXmðwļÏoïn¦“gLàKQŒÒ'ÌqZQjêüÓ倠àvƒÿÞ×’!¾ K7yÞŒo\½(ÞØ-üéÚ:lj‰­¦^pî•ß®>9Ë(ŒfˆÛÌ—j³þ®äóÿß 2Ïh>0"`ÕR1#þU2=é-‹?Ÿ#(|­yû[#w½ÆËÔ!Ñ\Û—.\¢€ ›ßA¶Œ—b©®·¸Ò߬ Õ¢׌Þ@vÖI»Nñ5’ÒmÄ”J 6pöñòÓÅõùÕÅìâ·»‹ëéå¯×SVüЫ*ÇÍÎ^)}†û—ú…V"oŠsîÐÿM¬";ácБŽOzW¸M2–c49ñãÃSÕõ’>Êsì^¶‡ê9£?QØ”ˆ á&E\ÉRÕ»*î(æìð²ËrW”&K¥4¡DrXd‰%K$ÅXE“¤Û¤ªÉ ´-ȺÃÌž)ŒO|¸ÃaÀj™DPLIbJ+æÏPVP™=®˜¼Ço¦]½È=ÚûhøSçdò†A\é`½¹Ç•hÛ¤‡¨®Iš+EIW¥ð(†ÞQíŸ?_¶ºžþ/kž3,È"„Œƒ+|;2M þB?9ЧĿ÷ fq$ÓDôé<:M„" 0å²{ŒØT°fÊE¢‰{p¨2‚‰Ê`\–€§çì“{UuRT·1í®“%®…×néå²Wê‰esŸÞÇg«íR1}°ux~ÉéMè© Š ñTæžÿ ^Ú3tìS2pxÌÁãQz€¸&@$“«…$¿/KÖ9_œÖƒžö,Ö!ÈÄü[7;!* Ñä÷ûœØn!•à¸"»Y²xðÖ¿|œräÃÏŸ‘8¥3Ôæô¸µü Y’:ï ˆ©p/6Jߦ’*h ‘µU)è‡ý`ßü@Þàa5Œø5‡à×…‰Í¡Á_Úöu½ƒŠŽXOØ”"½@Á3XÅ)ç¯nGJ6TJgyè5þ;Ùˆf¼=:ÑIF¤þËáH‡_Ê)ïÆ ,”Æw^‰(¥"«~EöCÐÓÏÓ ¹Ž¬·øÃhÌ\ Q{8ú+[ߦû/ŒÚ[ü¦œ……././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.440556 ansible-core-2.12.0/docs/docsite/ansible_2_6.inv0000644000000000000000000040631200000000000021267 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible Documentation # Version: 2.6 # The remainder of this file is compressed using zlib. xÚ¼½Ýrã8–.zŸOÁˆéØQQÌœ©îÙ1»n&”²Ò©NÙV[rfÕ¾aP%±L‘l’’ÓuÕq&✗ë'9ká @BÝUiaý} …ÿÑýbúq6‰Fãåôá>šÏžn§÷‹ n6¿$ùéWÁU²Mª$_'Q\–I¾I×Iýa]äÛt÷~ß²£œáŸ‚ðÝH×÷môx?½¿BáíýÃb9G'ㇻI4|¸›/Ð{ÿ[4y||x\DŸFËÑl‹/Ñ|´X £iñtó0¨º•}=Í–é£Å:”žh4›=|‹#øói1yNï`…ËN~ÎéO³ÑípÈî&ËÏ7ƒ©¦Æ£ñç k¦†Õ¶V]4~¸¿ŸVp`ÅóÇɧé¯+]Nï&OË!´Îf#üãÛçér2›.Òùq4þ2dI1C¢œM¡Ì? òaöð?îo'7C©»™||ºNTÆñh9LáôÓ§hts3¨¾Ùô~²Tããäîáë`N“ðc(eŸ§·Ÿgðßr(…_†Ò´ø2¥ëéþqí¶4C©ü:yüø°L†¾C躻Ýß Hc5¤àýÛ-Þ7ˆ®–Ÿ‡Ñ´˜Ìë€AÝ€]Å@0o~‡iÑ6xömôÛPÊ ª,'¿‘oÓÅ|6ú-=Þ.¢åC´XÞ ´LîIȲÄèž”Íí±*i×#(›»ébeAO~3TóÓý ƒ÷“‹=P\0?-‡iU?ÆË¾æOÓÙrò8\;óéáqÌÚé¡”±²Ü—ÔÜŽf£_‹¦·÷“ÁÔ=>Àß‹/в.‡hWmZ‡† ãίC|tLÝòáËdÏ—Ÿ'Ð* ¥*Z<}\L–ƒ©lDȾŒhz?ž=ÝLÐjC—5Bñâsôqòyôuúð4@~X,艾L~ƒ‘Ûdüeþ¼\ÎGóép àôþ¯Ñ&z˜žczÿur¿|xüm@U¬_¾Tå¯ó‡Çå‡j®L0ʼü:¤Þ«Wùt?‡êñǧÑt’ú+TÍÑÏPLË ¤< öËd2'Cö%‰$†˜ ˜M?>ކ¨ë³‡ÑÍÌoÍ@'iˆØ¸` •Ñrr7B×-‹é†Ñ5L”9{xøò4®îF¿ÒñÏbúhî&·ðÿ§Ùr:§Ó0`bÀw÷pó„+:*›†¨sL„5´úMSù´œÎðö~²vÎ÷þa Q *ú6 üÂѳ„%¹øm1ŒÆ§Ù šõùãdÑh˜‰èÍFwÓ/2Š=-†™’º±¡Áaê ˆæ0ìœ. ¿\ŠéÂÁ‚wM7™ðƒ,_BÇÿ–ÞH÷†™¤«€Vy€/l>OfÓa:WœÕúˆµƒq? áü|Ó{èd¿±­§'7“ûñd]Ó¯£å„|_‘ §‘Ì$ 3¢aã0æl˜Epú’Pv¸!’ªt1ú:(¨ÂY ¥ëé~ g1žGSÌ Z|ZΣ£åø3ÔåÅç‡oÑøi±|¸#s%Cøûe:*ëþö„ó.tƒ×úPÙ ¡'jR›ùá5Óq Ö!'ÚQßêÃÖ`:¨P–ðëÓäq°-EtÝGŒ›‡Pø½ÇíoÃinHqñhùÛœ/„ ¡ôi7ÃhfÑ4Ð8¢k˜Þzñ4”{Ã97”kd(‡ÓÈÓÙtùÛ —“»³É’îà+ð ÞMïG³á>ò军ÃijEZîa"`¨q–±Þ015 –{t[3Œt›/£)Œy–ƒTnª÷­ôEÃlMáJ£;Œh‡Ò‡[¦¿=<Þ 4Ú£[µÉÄßFw3‚ê~Dvc_‘…|w ÛóÉ͵뉳éǯÓÇe4ûuÝ?,&ãÙèãäŠüýd Eð%º}|xš³yÐ+àÅÿñïQž4/EõŠÍ1Kj¢,‹WI„ÿ°ÄYZ7Q±5™©BÐ2BȵŒþã߉ö:©NIÅßã2ý3³›pqK”R*³´Ä‚0¸‹óx— †àžâ@¿~XÛþYîù&©>œØÁ&9a&©x=:¶ ]ŒéŸÿøŸ€©(V¿'ëæ½@ ähWÇÒ ¬É­cjH¨&t!vµðw@4ÕÔ…SZ5Ç8óÍp+»t‚‘-  ^åSÅ ýˆò¢ïlU›h_À'òœ¼Fë}²~Nóî̤¢Ý1Ý$Ò¼©Šh—4 pEuWM²a¾„¨1$CÔ‚ÆPhü )Á—ä5³BVìvCæz  zOóßãŸjË,~]ÅsA»’Æ+Ù0mLú©F•_9Ç/Á©Á_ •š¸:J£8Ž#bkTMºM×ýYÔ)Ä‘¥!0…È*L2ûìJ”s4"y(Ô:ø„~y‚ä1¤þ¨;à Ú Ô® HÁ\ŽÊ¢j¢¦ÀJ™TÛZͲÈÒõk”%ñ6*«b›f9{¾2Å"¢pØ¡©pˆÂ!Öœ=èÌOñªJ×à(w€Üç–Ô¾uS`þ¥ù¶Šù<{‹Ÿú뱆Úú1®“ÛªäiÈð1{fÙœ”ý¹—”íLIJÍ×DéÈ⦉×{òAÐo>å&m^ƒ9ƒÿÃh2ÿ‘õ»ø¨i(Û\­Š(@!7Å!Ns/È&·J’R 7¤8ô1Í7€­ƒ¦æû×>˜,(ªà+ë±n§ð᱆„9쑱–|Õ³UÉÕ¦(¡œ@˨,3ürSh e–ª9º=ý2*)ŒÕ¦†`‘0VÆj#a|¬Ò ü#ÿx£Û…ßÜn}\Aôêc^ãÔPPІ±KL ò›Ú§ PšÙŸ±ô@aðj8 ºš„‹ðº¢åVšÙŸƒ #²ÇúãͲ€_9DU‘e«xýÜ ÐÎ/ARzÈé*PCÀâ§`ˆ´ЋeÁYòlù«YœáçûÕóËô€mÚ\s£Îã²Þ¯Ë N·¸ÁI²üÇ„,¡HyÊOK˜|ס7U¼ö¬2j` Á@IÒ$<‘R%uq¬ÖØãžþøåc56@ÅÆ/É.`Æl¹°šæi“B«6æ€Gþe^üáÀ Ÿ´BG¸Ð+Úá|ƒ”µË©“moà»üDX¨c5R0ú ê¡g7ãè_Ú‹èQXN—¬/ù‰}~ V¤éØü_ác]èe>&È:~À‹’¿`/¢‡û+û9ùÞð¿ÿ,ÿÞ®‘ ù“äkèzÊ¢È|=´ µü…ò!L!2µ½×•ðÒ‘MåiÁhJú5‹óûÚtà©çâ7elð‘§½PÑÿu6ºïÂ~F–wd´={µLeŒ¤%´=åõ/ˆfš× V òû»™P³ß-ÄUœï’sp«Vô„Áî6=!‰uÃÀk—Ã×Y®:G굊+<‰ySîú< ær§Á,wÙjÀ¼€X<¸%ó/Á“ù­…Mæ;4°E…cU6ðƒd—2Ar.>.Ña·ÕHG$‰Ž6Rlh ñðg^dÒø¼;M;¿>9[jˆò¯ ж›7è5 «àwb\£ÁõlÈmÜ-¨íf]3aŠ™ ƒ_¢wÙ’1^„Ó½ÈÚ¼¥…HSQ)"­qå=&Þ%‡éü(ç/˜8Ý$9ÿôY‡ Uµ0+iMˆDEHbdý6¦¦,H𠇆ÊI ƒ°^+#,F*”è‡ Iux‰«$¢áœ$¿ŠÒCJ×Aj¢j^QBð§,yú/ ’D“)/`½Nò¸J J«?"`–¸¨Ô8­×E0Oƒ[ü-õEñ±Ù_¦4$¢¨ÿ€gãYEùº8Ž9Ž;.³ åÑÌ(¯Sœ©Š¥¤ªpå23Lx4ŸŽòwpHêë“bL©^h€Ê~ÛÇMÖJaü·¢ÿ9/^ò(­ëcr©DEÈT|Áý¡˜±®dy[àÒt¾J¸ÁR+Ey©”|(q®˜ŒYƒä{Œ´ªr‚5j'¢<œ,–ÁKŠÕ˜Ö-b¥5Ë·]÷6n ¡5ë¸]«Í„E…Òô§+h'Æû8ÏÁ¸1³HZ'L·¢§oÏTþ|¾B¦Ã‡ìçN²Ÿ¥³ø䟭賟»Ñ“yVú·ÇºÞ9*º|#³Âôo}ÐË€ÒÐwNÓ¿w,þd3©ëõÇ|“)S¾‚³¾Ò™Gž³éçMŸ{Ï—{No=&ÈÕ¬˜Ë Ÿ¶…lsImR]nW·{À TðÙÍÜ^»­³~Öø …:\¦N€.¸ÛñS'|²>²¦Óù~X¤;"k8Œ»Ó3U­2k©Áº£Íbpvïz¼­“õ±‚äBw ñ>9{¿ÃœÓðX$cKK–—X‚ÅM¾…âzÇõþÊ&æ,…¶¬à pGø7D~ÆùÀ¯½*'Û#RÍY®Ó¬­Ò£_Aleðð&QÃV鹯¶2H8:Øj ðõÍþVmñ‡nê·j[{uó¾UZöA›ô­µá®ßÚZð7oº·öÖqÀæzkm©ß¢‰ö[µ¯¶V>ùš§öù‘•Îg ~˜ý—9åü ]“KŸÔ Y爚Ø{2´SÌDKØB`³L‡ÚI%ŠZ?ˆ HY*µd€Mž¹µÉsí8äìÍ…IjÄDÕe2x ƒ›´Â?º5;%†³9œÁ ƒZø‹X¯H¯£ôm8kŒË7³è]Rå Y:ÒgÚ­jxOK‰A7{â™r¥ó¬sH­¬Ï&µèË{p )øi$ABa¨ð-J8zÒõË;~¡Á Ŷœ°%«JØ€ióÛ*)5×/ ¾Î³üªÎЉ}sY@<´yw*ר°IÈfÏA¾· —· J‘ö ¿ß€Ëûä;nðI›à4RH óÙ´ý„±ÝN` ¯LåÏ'åïI65ñª8cÉÆÊ.Ý'dë‚.¨ìYÂt±ÿÁÜöÐ$yœ7QLs¤eÞU´WTAMXCÊ"«­Šº*ûÚh) Q©›U³nª ·¯Uº_I ­nƒsÛEîÛÅõжüJÊP°Zº:·BÛ:æ¸/O0’ªW¬‹LùO¿LÊǤ 3àé˜Ã‰`¥ ‘ßÔò’ü­Ù­Ë86Ðú}ô]R-TÈWûÓ¶ªQö£ÍG÷ÁzÜ4µ~¹‚˜‰S5ÕÕú7L)»ÀÕí†Pc¸ÁÖ4ÕºÇ\½¨P:Uô¹†k´}Åe7À»f‹ËÐ=;‹rÿ›­Ø— 7˜ÐÍ «¬ðØÖ×%%ý•Sè& Â¥ºhUcn¢ ‰ú& ²oŶ“ÂôÉß7v^‰±EìXaXªm? Á£Ø¯¶šåj«o̓¸¾&{z?ÑffÜ|G‹}>›ž*þ¡W Ü‘JvU&¸œ}‚Ö“t'£ñ ö¢: …õ×›Öű·m1rÛ‡$d B2šq•ÄMòêJ·¯èîІ¯@–š.eÍ’æŸÿøܰ½®^ˆbó?Ã`eV0ZÏ,èBk°XÌôc aœCÞMdß”ä›;¯w¬{Fh0r> 2ë‘=yðã9y…a׆ ÄPˆÞ£A@½‡qô>&ÃsÎÌÐ@CJ(®Oàú_â*‡¡1fì=eÈô iã1)¦œYÇl?¯f¡ÌŽ»4¥ŒúAJ¨È¡A¦Ao/ðÉäÙk6ÉÚH\ÎhRâ†ïâM°/ÖýűˊºŽ«W¥âMˆ¢P› =þÕYít&æÃfCyñjƘ=üÄùñ–OŒ;°u?%àPL[øùà8¦‹»âT€;€’CQïù |…¿ç)·2ÜD{æ ò‡¶,÷€¦S70=”:ÛB¸©;®jÜ#üóÿqÓñ|ùpè: õX“GÿRx7QÑû<áÏwñ.›8dOÖńχ²9·r3%!U2%ö÷ÍÞÅiµªâç$Ú$eV¼’¾ÔÉϬ3z(é¢þ´E!Çï‹[SN Èy¹| $[0“¢&Z ¾õ!l³ p@ IÁ¥¤Çc°_µrT޶„ÁKž“£kdÎçÛl,Ñ‘Íõ^àNÙ»oB#›óåf}n™íÉ?Òí"›˜Q£hZ“j$Ì|p£;ŒM{¼5ù¸öï!K—ž Vu;Ùžî¨ÇT(ˆÑôWb;;õES:“´Š‰ªIüÝ%ËÆM³¯wAVìÈA% øÍg™_v*ŒÌl–ÉüË2¹['ËŠ—²7ÛÀÀ2Þî¦9”tL|æ7ºB¢+äºB¡‹¾U÷íáqv=NF7ô-Š»9¹‹íÒvG2· ­cM5~‡ýÝö §NKœ›@TŽP •!S9’D6—Š­ñŒU0uw ·[¶kQÒJšR»”dŒ…vU ý0D•äã/d¨^â×zˆ°èÿaË:+Ž¿ê¤±2‰’PdÍ"‰ïHW µá]+4]¬à6¸9³(Éfêr´Åz¨YøÝ…zÞ±Î[×·ÎÒŒÀ%BÎÉš0§@¨Vܶ\¸9Ê÷aˆ¡Y¥Ú%4z\6EIÂ@·:ÁZ”ê*M»`R~•±µMù>ÉÊëUïmªOIµ*êäzí'‡öš ®Óεm¬ß&Ï÷o“ß§Á3º.:>0Î`ý`! ãúY„{q]÷”ꬑ>; eAèrªƒÚâêÜæ6ÅÀ¹B—ÉS|ÌšAm*mFi%ÂØªC?Œîš}±ÄŒ¦°Ã$¹a8ƒôŠ‹9rßɆÖvõEž'ræZR›ÍØ&Ýn‡0c/˜-¹¾fõ[«zŸÕGûÞª]Ÿ{¸ÒDÚm"$“šofoéÊBY¥'œyV[YzH›! eõ5½zhz¥h³£!qˆ;$†°v°áC' R@ª>«A¥ÿ¢^—aò½©â0®vƒ”š¡ÑjtÛ nÕPi5[ïC:tά¡Òev`guV£M2HëKôX QïÐ=X¸P9 lŠAࣗÁ|8ÚM¼æMü}¸xGÓg3ؤ‡„Ï9]i«±,¿\±! ¾ÓA_¡Ëm£|œe¬w·©µš÷›pð2é2P[g¨™ñ›…ñ7oUy³±ýÝ›9oÖÐ.Þ¬X¾Y3ôôfMöêÍÆõë·Œnßl¤¸³Qbúfƒ¶ç·ž`ËÞlV¿eàs|Ëþû4t‡¶)Öîi] ¶§t11 㬻x„h¸¥°w®¤Gã¾¥ñ÷º§{îÑø{K#Ùq…ÆÌª1’Ë©êݶôúN ô(>´×yZ–ÉU¹P·”6¯erƦ¥Ñ'üëQz²)í ùú”¶B=¢úÓ ¥7h‘ǃ~çûA¿ñßý¾³A¿ízÐo¤ôû8 õaìâ,þþêîA(½Ý‰Ðô0%wŒâ IçëªjÓrun{y¾Ä=ÓÀçäúÜ+ìyó¸geë›R£Û*¡;Öƒ™dêÚöòm"¶Û,͇ðô m.kèÝßÅù,]¦Ê·46t!j=H¾¥ÖèVy¨ KEŸËâ€5LuÔˆT|cõ3nyïé¦ýmê:]–{#ƒD•ÃÎö-«|ÜY6d]$ »m¥»¼¨ÄõjƒÙL»l>'IÖë®ØÇÃÙÜuÙ„þa“”z˜wY#u¶wÆõ,{UŸ½áZbj°ì0¸ý×ÔÎÝ¿¦r¤ÿšzŸÿk*_ù¯©Õ›Vmr>cØzMVòK—©ò »4gvi³?®Â¦xN¨ D«®³e%œ’ó‘*µ9ÊÍ•oi¤Nâj½Ç °c³/¨…T!Wç¶Ç~7ñ®̨ªÓm¹Ìâ2gWjt[²Îp³nsåÛiŽ¥Ïô¡§ÐFu9-Ñú;”-¦Í´æ3iëeeoSÍ"C<:@Å[ÛL SÖ’° ܹÏÞ仾”mÊ}fP½´ŸÚ{§Rý´·&T¹õÛÔšýÛÔ÷úmŠñ4lù9Ž»ª:K{ÒO’ÎÚZnhl•»TÛËUÓÉwz™Ú0&™6»©]—û¡,QevC½ ñvœ6Šz°\£‡´­fü¶5Ÿa+í3Ô?TÀZogs† £ËQÍxoÖ=ÜcîjöWƒ}ÄD—ËŒÇîµ³Lµv°µÍùïa;Û²k›£#>ǰÛLo|Ž™V¿¬{ÙP–^í6öoܦoÜ`œÞ¸À_ß"ÿÅõÎð€s´£A9ﬠ®° T4^Ïn[ñìg2lùœ<Ë\ûÌ`ˢϡÁ3m¶ V=ƒ»³ÌZC;Å®ÇÑAo{«.>§ý-9ζ­öî?צ±ÍL±Ø¿§ÞÛÖÚaÁï¡¿ÛÞMÅ^ïIBoKŽB¢ÇQz#!o3‰ÝÌ6;≛Jh;ªB»E\ ñR«,Ê9C§ËîóPæìz‡MÞöv~ƒo+i•þõZS^'5½Øæ)æúkzÛÊ\¼Îkú›±Ø4íõÎâŸgΘÀo[«Ÿ‡5‡ú¬ö|÷z<Øíø®&žqJÔÛ¨óœ¨j÷Œƒ¢þ†GEUËÏi9`M•êìÖÎ8™êoÓy6Õ°¦ìkMÔ–ÇXªÏDkð¤hîÕô*·(Î’8¿R+QÑÖ칎ӫÞÚSâ†îëLlÚš}múT'mÕýç¨zµn-Z=7/ô+E -½ýK!}z÷m¥žË}šÓÍƒØ Ôû-sô)vL*SK}ú3›V¿åŒ^ÕÖe jƒMò÷fî5¢*rYé_JèµÒÖM®YO·^—·÷ê/Úú½—'®ªAå±Ú][C‰Š–æs;úL¸9˜­s8z¹6˜5¿E^;¶Å f!K’+[R›Ös–Gzõ»—E¤µÁŠÄ¹Bm]_örðšîUmÑ[ÅkŒDW×¢–zZ6ŽÕ•}üÑ¢³w.»W©1¤zýæ¯ûtÛæ­UýgÌYû™rÎU3«>óÔ½–¬zÓí+ùú®íýuU6KõÕA¹eö›h=@ù2ôúnè a9tKò4ô'¾~³ØfèqW2ôhk;ô@k?ô`(zòüFSCÙЃ’ÃÛŠ¡C÷zèÈ­yƒØæøýøi¸®Žt°îI\BnÏâÒnyM^…ʼnú6­_x¡¨lãS·Õš6 aÀAâ±){âG»L×fšK6äþ ¡½Eµý¾2†·°Ïôa˜ìæ]ÙMÉQÝTi¾{CÇ©oÿ% ÞY•óAäýV‡Í|f×· ”7d‡3^öÛƒiþ®(î‘ÿË˺|󌮒çäõ ¾-¢·÷“:o-Èìs5ˆ›ë:÷0²·èÍ“—ÁòNÓÕeÊ }–U×p›ÊÏßÀ?Oß<æ|ŒÙU÷ò}T·†ùÌÀþ êõiÀŒÀ½g†Ò¥+Öµø/ç»>·^ª©=4ó_°ïÒÙZ¦?g…¾[qk]þ¬f¸K·­éÅ#‘ñúyWÇ|s‰â•®«÷ܨS•l+ó8!Ú­³uÔÿhb}øç³Áù €®Æk#@Çã­Ù'S›Î‹ª5-~«ü.]zùöžJt©Ùjjú‚—–½¦ÅkÝy†ß®ª·gôÓ糄îœR°-{ú¬™»f†ŸEr§.ËÒ¸ÿª¸K«u–ËÜ©VSVä?¿`¡iò½g¦zª7Feѽ¿Å©P×â·nýó_wiv­†Ÿ·îÔîZþ>oÙ©Þµn|Ö’q—vöãE wœ•¡¨ûh˜޶ Ø÷ü—KÛQWåyÈˉÍz¤ËoÝ¥³ÑUÉEÍ‘S]œafØã3ä숤‹Bïf·nÇ Òo8éTm*ª/ŒÖZÆ÷áÇ«ãðñÕ1èÍÕ¡â—«G~wWwÓó«û¿Ç«[¹ÅÕ îòê6ãéêv1¾zb`5̨p=Ü(¹z³½zô²¿zä’^=Àxjf%»z@q0à/®ŽÍë!‚“fˆ¾ú8D?}º²£‹0b=æióíŽé&1¦9ñCšo’ïTŸü1¤’#šŒyzp‹éŠ¥|›î¢ÍñPº—¿)“iÓB"ˆÿ35ŠËCÏÕHñ¦ÆSš¼\¤‘âÿ Ç*ƈê¤iÒœ„ò*Ù&U’¯“(.Ë$ߤë¤þà¶Â”…B™Ìy…,¹J”k’2,¨Pª]î“@c 0jS`½Db‰ù:þÝ/¦g“hüð-š–Ÿ5u’)³o—Y‘:TS‹Él2^Nî5{/û´IÚó,{R‡jïÛçér2›.–ÂÞ&ÅÅÆÕ±í¶ô»þÀ§j¬›yã¬ÖjŠB«þèÿ^T‘a-$jÛs´)ÖÇCï¶s–&IçæŸÅš*4oã¿{” pé&PìS•üý ³×`T?'›àoǤ&u]jÇãMà|Æ^Á8¿Ð;à¨^þŸÇX fÂ’í‘A«õ>sã…BžS·ä§¡:Úàó^‰ß3†ÆõèL”þcê¥Ïæ]¤—‰ÒZzómq™VÄÿµ5¦âDAü_[#y^çB¥T–ýkªîî;ô¶»C®Ÿ³¹L%‘$ÿ7•*/@œ«•‰ÒL½ô¥‘‹ôrQòO[os,/TK$ñÿB)¾®¶‰›8ZA?iܼIN¬…¿’¬(¡?h@\‹w«hƸÆjäMÆÝd9º-GÁGLöóâš¶‰Ks#÷z›„ô—ú å ¬êþ¶ª‹ZîCš½^Õ÷uÈ´È®¦LKèmsÈØ + 8øùt}õýôþVšymöЦy“TeÍbåôxª"2n›ÖˆžPÕ#}©÷I–EÉ÷d}lâU–\f‚h -¦ñ°ã…ªõ×£ºÞGb~üüüÇ)r"Îs±øoš\Ù5!'é'jôÐ Žî—3=5 G|aèzãdÈ º™>j \Uâ,óŠÕðä×Éøi9‚ŸšI¨›Uš\S¨\ƒjìq²|œNdÑ6ÅKâ“¥„O7AEy ´Ä_ºÚè%Ya\Pű×ͱJx{¬[d‰ÈÃõÅå"»œAÜ¡Îr+ \¤ƒ;ÅU“6¥JÖÉ]õh¹”'‡Š²¯,-˜‹´_‚o{ÈÕ`±/ŽÙ&˜ó#ŒOç+àŽYÑå^ÛÝm;Òú¡”í¿@+—dÿzq_øJ‰þÏT—_ “K²ízÙžÕËÕ³=ª®Ï0F¶•^`ƒÊ‘ÿ»'Wœ ÛS+þƒPW•g ø§Ï~sôãóˆÍʪØUñ!Úf0ò×>ð?qÝw$4¿Fô9_ˆb x?»Q|e¯‡T|tÿ[4y||x\DŸ ț٠@lppê—¹E…kj : …ÿõŸØ=CÌ×yTÐ{Ù2…7{F†â- „H`mZ 2apçñú“‡E0ZÜsH%†WÙ1)¡^6½–MNiZPTÛ"Q7.“Éð 2Ë€QÆXÔþ`T~$B·£¢.x„H¾S ‰µó”VMžœ“kº„ *ã°ƒeijàÂ7u°£Æ&Ñd M‘nÈï:ÀoÐ,È“€Ärò À¸ ªŠ#üÕ ÁÎ/±pzHé*(CTÏ  #„H°¥¥ß§¦óI,iÙúЫn{:—ŸÑ×€‘gu\öšwŠH$ŒE”T\ª Ú t|3Jg¥”Ò õL˜=]𺠠X¹šÜ "7mç`rFþm b”½h¹Åa{R“ž‹¼-LÌç÷³_\j0K Œ ã΂~¨xíõ:hrJÝäF¤¨Ž v=!9XB2±Þ$|·ß¸Á(ms‚jš§é–—,õ]\â›?£*ìà¿¿v[wp3”ŠÖCB8L1³€F4Î7 ˜wðç!9¬ .ùç?þ'ˆ:aŽ-Úx‚öMSn‚Ÿßÿ%zVq†W”ä—vŽYâë‰dm¹qÌ‹ø3 &9‰µ>lÒšüÄL9¢n/…ýsZ§ßÀçTÏ”giÿYaM~úgüñŽ…9ß¹3Ç&ÍÒ¦5í˜p“"Ü.ÕÈó@j1Ê/õ‚'N W=ª<ܹ^Q:JXÀÙÑf@õ`ó P€H»lz­˜¤v-12و〲¨SœÈé5Ðb•¶$IuJ¦2ß úsçFóe è<3«òТ<´Í—Ín‰Ñÿ‹¹H@W\­÷é©çcÑx˜!š& ÑŸ`hLƲø9¬‹Œ²ë:Ù2|Ež`© ^ã i¿p×8ÍgÅ.åÉiòjG&£ºLÖW l¸¦h±_Á~•ã*&  {²¯ÍÉõ%d™• ;dèã1Ø/ãa•!«M4꫎9ŒE1ø*Wø=¾â*9Nže¤ˆ©B²èïTaÔq’Õ&¦) A¡¯ƒ×t=¹f@èà œV/Ž©ïâ:ŽâuOX©ñ0uBšð޲HÇð2غ&«G¤â`œÖkY#bÓ«"ÔŽjP·+AmV¸Z¥MCë¡V‚צ¿¬k{I×­r®Û¥l/_7žм¶xÅ]CäÐ×ÙëL\#M”~Òߨ8³?i#fné¶Uq€ÿÅ;l j¡jzTMË|Õ¨Æñib_»ßAk™ÉwÒ€’Ì¡½lª#„lõk¾¢™D=Œþ›c݃¾ÅÈ}BH ÒÉ þ<¬š˜¬ª’ßÏ!}_y¿ñ‰šwqOÞù&ó ók!ù…±ÇrBCü;Áþ¥^W)ôü¤øNiL¸Ažq„⮣uV7~•TcåÈPIH(²Ž’DaeÈŽ¾‘¸Y·Â‰27t!ù±6tcM&)õùò7`¼uà01ѡ§#7fë¸ècß*¤.é¸|¨ŒB004G¾„Ø“;ÇfÑÙɦ?ε±2€‚¤E½š kýÖþ.Ÿ> eñQÇRfGV×QD¡ÄŸdoj–Ò/‰š•lTc€ÁPºMBŠýào£»k&ßŧ8Íb¾ã’tRýóÖ›duÜíÄzW #žDv]bJ¡Æo—>^‡·œ†-Q@6q¬L”L§+p4=#Âw‹|t³"x“År{Ì Iü:Lê„g/ö¯‚ZÒ4¼2Ù…9<0&(s€¶ ´ C ²BëÂ=A6ð´ñ?½E€¯r´ð«Ä.„Ïǃ×:+vgyЖ0=P8Ú(ÄN_yœ½6麆qvÀýØüƒß ¹Ðs¶9cs/ÓˆMCöãnñ*Ë4d4 ­Á60ŒæÓ€/£1¶`çe_çÕí3ši_lGö¿² G™¥t«s‰ÔºÁxÓ»D=¤U¬Ü:úFWÁK™¹”é­ÒÐ.{øÙ휷G=n@ðà¿Å«—4 ±LvAŽ~ŒE½†F(‹0Pðmó:¤4Üm.Ã6ƒÛ—b¼3ÂÛÝâM%Ç²× Mâ¦É*Pšâ@ö‘;¡è§$üpÙdLú1‰b}4Ý_?åáðe ]D¢Pù:Ÿ‰#rßî!,½ëbVÝìâsø;–"wB¤ç+Q‡Ÿ*\Š+Ê5l.p„Ö…‚P,*Û{A²‰ø4–XÚ…|ÌŸ±Ë (£ "©ý|hñHz ½$uAŸK.'îcÝxå¹Ê§â$é:>’äÄE©Ýxˆ›ÆÕYí‹Í"Ó©òX0«änü${o§Ë1}~NÅp )ÞX˜4w,t—?‚Õ£²€ëÅ!-ãÃ&÷ŽÄ;„‡,LšCºË!Â:Ö›¼/2Ge>¯½^˜œº ¨xE¢$B£t2²3­„†|UlúÑÙ¸%Bª¢Ô¤ä™ÏGäéCë[)Ì–Ê`Òú÷T‚]­z+L$&ªÀð·Ì-’:\76òÕ C÷#õ2w8}ÑX î’b³:',º¿*ƒéžJëðæ6)nVà÷Iœ5ûC‘ãZ¼z›„_ã0ñkÄ>¾;Æ×án7éÝ4fåÕQ3š‰—%w ]0Œeܬ÷Ýþs`‹ =a )£ÃM™}"fW›—¸Jêd}¬Òæ•*"sÁ½°ûe%ò^|›£\>3‰“  Ò=ŸSÅ{ÏU—TËËâ‡ÎÐíZ`åsê[-V‰_’TÐ2ÕtþeÚ“éýÇt&’zà1¹` ©€_ƒbrêPZ ˆHìÕÙ`›¤ÌŠW2yêW'û$-ÈMN«'&SŸg7‚¿§ŽVi5™8Ó?µdeW|ÒÈš#Å…ž1Í(“rUx|P “„‡‰*(üí€òX¸?œšmöêEMN EPT<"Ñj!è.dÉÓ„f_bŸTÓ](“þi@zA¬sy~\]R*t —Áé òŠE¶î‰Å,I¾KóÄË“[÷BPMô‚Ðx&”Ç­_;ìqànµÌmªmuʦŠKß®Öί8 Ó5ô:ɸ–ÀÕÓýÖuöœ¼ÆùFY«ëïR<°0inXè._³/Éë(ß(«ƒy—ɪ·å¼HuíËoràÞ³ž·x€’¦!”É.ˆ„£».¿ÖMr8oQÜ-£`nóhØÛd—„ÓkQ¼Iò8ïÕjl1MVAÒ®%%º Tñêî:+rïùp·Œ²Í£!n“]ð)ç9{ª1.5ÇëuqôÈÛ6¯Ä®ÐTÌJ2›€Ä%ëKQ&"Fß,uŠXQY2´Muä§‚¹';ñ ý1Î|§ª­ì¾NV¡ë쯔©gÚúTmqq6ùÞ_Z¬ TAÒ`ŠTÄj;f .x5^ŒF÷žúLkÙù :]C«“\7ÀE7¹vLsêSZz •\*FHÕ‘A‚ Oý5uö/ñÖ369%AQ‰Dªoñ¶;¸Ežz‹UÇÖþ°ejºîù%Yí‹¢ŽOçS€Ñt MrAbTž—8ë™ZQ8LÖñ‡rèü$ÅGå¾ÔoÖÅ)õ(0æ‰üì¥}° róuÈ»A ™N«9¨þc4ómðNC›Ï€¢m¼nzÆ£NØ!$™? ;L$w–’@h)‘œ’C€jKóµ XsL–i´âKüڵū€-ÓÑ4¸RD9¦ ¸pï–àoV¼rÉ;ÂA*9ìÑ.øˆªPkÈXC£åèT¨8"yÈŽÔ`AÅ¿s­ò›=Þª¹¶\4\¯!”«Ò‚Ï©?"R`ëâ#í'7@Çö—èf’#ö¢IñÞAýÎ:4ó‡oÕþÃU³ÿ°Tì?D½†z±ÇKHÈÏx…¯ß°sIôtõ/Öxü *ýÜVd¼c›äw99…Þ‡±OR‚&œ!ã NÕ §:½öD6”|ບ«á÷7üÒ2<}r¬¤»`?q …îëa¸Ÿì(~ 2öª¡ž ÔôŒ€"jZö÷(WÎÏWE-º}ÚIÒãmó¹o#F‡„Ó+eC†M\¯Û©ôêq(8³&ÅBežil’,=%Õk´ÞÇyžd¾n8äZÎp¾ñY\2UYãLcÒœ¨’uQmï20ø[ 9Ý–“¬ Q×{é‘•· J½öH±‚©’º8VkÖÌmR@ÞDl‹~$0ê…Ö')RNþ8’òH’ Û©N^Ró»³þA<ÓŒW>ÜAvt r6÷|×N1§c–pÖ®H/ê@À=`Aî{~ˆ²žµËcžöL-NïPJkYõ¹]_3ÊEˆºß³Ñm°:曌‰ uljˆ^Rer®Û.N™@(:œm)wúÉ8ÁÉÜMÖ?Ÿq7Ðá‡zC%ü¿¢•|ùÔ\×0X%1y±áÇ/½9Ú!¤@1˜pü¤æœM ¥·*ÿå ùÃöTGœL(R2Þ¢Ù"ÖÕï›×<&·KWÀ#n¦`Bÿý…|œ“ñÏò>Ì©ÈH:MFìî²crN»iç—0îh# Qeæƒ m‚[ ›- ‘ÁÀ× —d4aTm"4; ÛäÆGöˆAÉÅ$Rü3^ï!Š€ ЬŽi¶9[;½s„Ê"ò)¹oä#þÆû›2–¥¶r¼Iã³&®vIÿHÑ!  à !eP3ؽàOÁù@È÷qC¿Ñ!†!.ä “!÷Õ5F.‰xÍ\€OàüŒ"RSüÿæ(+Öó¡ö™œR5PÚã"ÁnÙcY}¹[à…*µâÁf\7 çÐ&à &ÀÛ¹ñÎ#´$†’+X{ãrAÝ$e}vŽ¢hHEïq‰`þíL™á={t•:GvÓâñþÖ­êv4á¹òƒª>šoýø¨D!çœÏüˆOÿ€nèó±mó«fiÛµDrWÊÅJ¬þ34ëgøýpÙù%´úÏ!¥·Ñ¢8 L®¢[ü9 é|:Š[ãíè€> ¦0I¶Ïã‡Ç™™wBð°n1¬Ùsôc 2ÅOL,þ̲Ÿ­¦eTÅù.©}çâ[‚ ¶„˜–!%©sñ-9e.gW¦ó€¥Ó‹Š^ÑÈ6°oXöõq½âš„ØèJ EÝà”jÓ?¢°0«^@+ˈZ†*BÊ=¨‹É" —îЩ8àmœ¯ ÍsBÜ-ãÚž·¨0`×xß]nÌœèK6õîÅ÷û48œ»Ë7ÉÙÓ§§ü°tÐ_b…åk „ƒ©Þ5´>(ÆëƒV ë›ÝÃ:G.š'õ-‹;å zLÂå+žP0Âé¿_Ôy/ è|Šªä–Ñ! žðh9×V!¼zUÆiE¾xQ#üïêïÓ$CÁó;N”ñÞM&¿ŒÉK£›à–þ&’ü] bñ%ÞÊ'·zóÊÆ-­5T5411”QG0ßFŸp¸Qf¿Qȯž›œ:¢V=ìêŠ[åƒJ†PFãYýSðˆ?)¸âOi†µï½é5Qe0êÍ)*Îì̪ǣZ~øbQï%±V^¾e¤^«‹8Á|KV$ÃÏ÷ó–̪˜¿úò½kÉŒ-•ýo1]y«%ê0/µÄ4¦½3 UÏ.ü!3 ¯NªC𓳇x½ÇÍ´Ø (v«dqía^cTQT(»ZØõ1(A9EòMBSöpJðÃh¼øñ½ëÙkãb7!>›š– ë (Ð/ÇURå8§)& 74'( %ßXÔ¶qfߣ/‹E&ªè”uÖÚ/²ö5=ÐY]YlSȲ[[®ùR[‡#¹à¾¶29L ÃD®`÷¡ògüP»Ä Ü-¶òGç§h©=BŽÓê¦ïÿ>1—œÍíçètà‘1)ÈóF~È[üdIoa•$1„0ô6MU¼2°lqGlÝŠHñZŸ×táêÌO×)gº£ð9>Ú¶*öÅÞÜ/ØÂy}Äü^5¹óA÷ÃíªÌƉ)ê ›¹&À)'~®5{8‚Hêøq[Ê™¹Þi{€,î¼– ”lÆD[æ³ u‚rÀ1<ŽH³=ædæ×ÎÈ1—˜Pasä\K‘Ö‹bTÜßÅ6ɳ1÷¢íÀif« RÁçqy·ÕÀ¤_à­ ˜8H¢R´0~¤o0za0¸ œÚB Ì—䆊˜”¶û%ÎÞ{q¸[ÀL½DÜ" øžjžS‘"Ä©n º:XüÌ|Ód)&%Û‘.M›ñ†¿ûtΧë”3@«|Ž·­Š}½HR™  &v>æ~´]8ͯFƒª¢d‘{´Iëçsò×)g f|!ò9ò·­Šå/U ¡•½šÔùûÁvÁ4³W,Õ×ÏJÛxx­ÿžáÙ‰U\{¶‘6¤ÊÒF©R%Ì»×ÅßfÁ O·´YDžÙ=ª&`Jì0ÙãHzØ‘]!!7`œQ_;e à&¯£ÞÚU²ºËo.‘:Ì Ü¿Ì?ú°›º_E^u³«’³+·SÎ@ßækáo³Hæ”ÖW᥊sj½CÊé£þ› Vôî/¡<®pɃ\û”ÔgÍ@u‰š^謎ÏÀª}”†+efí7¥.Âî…º¯Yóçòˆ2hUŸï~<'Ç­2hÎãÈc]É\œ6Y³yy¼ œ€›3mÏÛ ÓPÎ-Äù«Ê‚‰î¼ /Û‚¤t—aw®*ÊX½îÐ=‡fåÕ/Yiu¼*T~ßÒÙ9í4`kŒŽœ¶(c9Í)ŽœÖ/«cÔqkÏí{ûîŽÐÚöu}²÷:§BX…ÚPY稺V ”ήUÎëž{úew‡lé‰-]°‚‹®ûóóšçä£[ÒD«qºrÔ¢Ž[lo?zÒÊ[]ôô>¸»›˜Ú‚w•õmGu Ø‘"ƒ &Ò$FòKy_'gIÛ°¤¢=®rßé×ÄHhmx$¹•{$U…ÁVVÙÂj”|o’¼ÿ!OiªÎ îx—Zá_Jdw5@*]œN/qËÇ™nÌr0Ö³; „¬éŸ¹~⣢Û.âhT: °ÖÅ,rs—\kéwø*WÏrÒÓ½žB ØÆ®ï‹Îq_\”mñNé´¹O*ŠYñµv\Év³‹`\üvÔó³IÚ}â­vº£©3<á¡Y— ÷ÁÝØU·øµ¨ïßA°–®q_x4E!®}ì¿·6ÒØ)Hª çBB»y>»ÕzÕ/)¹½#?ZlLûzÒdîµdTG€âÅûÊž&ñ¦û±{•ƒ™Äa Èý¿ŸÁª(š@9ÿNwýT%ÉÇÅ͇E‘ÅUZH³ìx( GÉýZ5AR½®÷=›\MUPÑ|©8ç?bÂò‚]ŠA¶ï­’uqpŸ4¢djäOÁîâÄèsCwá§§4KÀé ¶Fôø’¢ïòG¢ÿë¿‚i Å Ç áGj‹›]ÜË] _Ò|S¼Ôç+úF™ž(βâ%ªcø“œi×ôY}¥ÇXyI0DIˆJÈXÁÇÉøánf³‡oÑb>-&Üä6ÃÍ¡Wæéÿy’f_l®Tøþ]*q…ºÿ êöñ)…X7‹”ÍÃÝÇàŒãoRE¨¨À# ä‰7AUNÀÍ€¦¬¬ð½]@m‹*:ñM¸d·/]6ôx[X×ıÕM(ÒBÐ íd/0Ó.öý’úG–#ZºKË(ÆýËý»àÌ Ã7JkûÞM!Ùª}œÞ†8 ‰»¼ùwÊÍžJö£sªHE‡ÁßPƒÇcÄÕ*mªÇó·Õ¡IýÏ`“ƒLï›FŠú2£ÊÜÊ ýòÄšžSÔ‘éãþ³”Ý2m|ÈÃŒ¶AUT(ÇÀ6é–|“M@I5|¤¸Š\¿ÁüFIæÎäxœÉv0«˜‘¨Ÿ°6…dÞb›ÆÂŽYfsL¤´Å±ÑSßi•>) %á U.n[r"„RK½hè,é~õÏ#·S›¼ö÷E2[\¢9¤·*1ƒû”8R+ÔþWrú¤,@YÐÞÇqªQòš&ÐãÜÂj…~&æ°.”JVuTb|ÏeãNe· #d+:B‘èð‰˜ñå‹Ú 0m ¡©Oòž¹ã PÆ`…Êh,O Sž0ÙBðÒŸ¹Ñ0ysFÌä@´¢†t‰ø~9èÜmGÑ×õþŒ’W¸-¨j……‰ Ïk-Ÿo”ß:Ð5Õ±nüá©ì|„lH(:BšD*'vPû> „ñI ™—nÿà¿Í§¢Óö +Žñ]Ëu£^&†µŽíšéÅ –6^Í£U@Å ¡dÐêÂÊ¥2Mï{Rã£F¾gòš -(Dú2ñvygÉÈ]V¬âÌšÆlb£Ä68š®t$,ñ½²óÅhŠ.›Œ ?EFSZ(5 X=ÿØŸŒÙ;aW}œ‰ÜsçlnüœCqA$¡º¥TÕlÓ*)ãº>Ó CÌågs»Á9œ%ñ æÈÐQØ Ÿé€"â,nàHu‚&ÄÀõˆkÈu7æºtg67ë2ÚÇÙ6*Ê$?½MÖåð†È"¯ÛM¥Ó+à „²>ïÎ÷©ß“.ü¨-XéãQ¾£»„‰•¾=e%â²GD€ä…*F°4î½OaYYíÐl˜œ‡DˆÇ޳ FßM` 9±pUÄ/; šUȄȯ!sAÕ•8!ó‹6ô<«ìÝ[ëÜ&X¤†¶š‰9á!=Hùh¯~Êq¶¸“Áªâ$ OÕÃh‘ÚŽñS<Šãóô“]…äÐxú -¨äÓr< R¨!bÊ,!°Øár bwq7§«k:¥A®|Úa=þáf<úÑå†ÞÉz_œá…!bóÃud±{Á8óƒvÂÐúœñ“ïØÉcÜä?fšõ™Î/u•œã¤¾1ÒÌ>FâbÇÍ9Ø$· PíØ€àĆ4[^l|ú …MEƒÉ: LqÚG"7\ÆU“zöþ&¯ AÐt"¹µú%(‰ïʺsUݶ¢n®¦ïðÀLÌž÷y5&mÛý ³å¼µ¹-ðÚœ"&ΖwdåˆßÎðwö}Û ß¬PÊx¿Ö°y‚r 1atÚ†ÙSXë,ň¨®½`¸„4Pì%-Ê„Og[JÀ4Î ŸµD™ ¿é6· nkIZS2î>ÀüÚõ6· X«]WÄ$°åxî̯QosÛ€µuEL{ºéFïÉõƒ¥ñ (­‰&·VƦ^ÚË ýýù”&/x4F %èHhš„A“,Á ºØÄà6PáÀ¸GXý@lü*J)]‡¥‰Rtiy$“ ”0’ºo”!-Ñ‹Q}À¶¸5¨’j•™‰t GSmÈø±³ˆ%û€û1vÉ©h9_ÈOÏ"ŸŽÛªJ¹øŠ«ÍÈ…År§ÀèÓéCYTÍÙ˜BVôÈÔ](‘¸1©t¶õšãÔupH0ašrä ~㊻Zòl4/pЉAï¨É* ã¢s‰¶(JVº5>ÍÈw&Úæmêƒ×Ø\aÓ`̱8¦¨÷ß‘}ò#ÆVGÿXò¸ñ HL^ Ð,¡‰QÊï~´¤Q‰íÛÅ/n¥<æ~›è¬:°ÝÉILtª°šo8ºæWÑ¡°'@¬½-æñ8AÓÑø¼/…·… i–\ÂdAE’Ó\¼bfCWl›—¸‚ÜÝæƒÑ*¡!e!å0ðêâú'ò›ä:öa¤Û~ܾ¸UB±Âa×Åøô€Mîö…Bc{WZxûnÓ²qšø”û³4ö ØñÞ,–ªÃÚ{ž×®¡"dÛü®*¨WOJqOêBmV>ØTF ÕknVÂÜŠ;Ùd³8….v×+`¼÷µ˜MP¶}FR¨Ž%‹ÑMz€Á°wjaWa²µûT•OS­='‡Gß©÷ÞLkã×Rºm;­&ªt,]ÙQk <æÏ^È$ŸŽÒM$¤dþ´eÎq]GÛ¤÷àš•W…´ÐtB„ßòO‰{/ò,6i Ø8BN;®kOµˆ®rÛ-ömÀ6e»ð×!ãívD¨´{´8ÙË5|ä·¤\·KøI;ÀârŸ%±¸Q%;9ñóDq]§»þWíýdUw(¯8–$yu—œ*•éRÂ"Î,),"be#8Ö`ÿí½Ý׳ìõªÃucMaçêX!±×h¨‡þጒŽÛkVËÆmAlÎlib V+,96øCxlÈ[gd­]BEÊ8ì™kˆ+*%ÈL–á{€oe½÷˜ä74 „„  Ì®›0 xFî”a©Dâ=Gå74mqj¸ZRÉÞ¬86Ðd†+¤Q~‚«„ß½„T&†$*@ÈoÀp·b¼ÓÝœ¤ÐwÕ—&€™]?¢ßÄÒ)ŠÊ,€°;Kô@)ïVY±~¾òR…?á ¨'Jª ·eoYëùMûý(Æáâß!Q ü|f?©™4'k”ÓâSlÐtQ<2 çÄ೩št>ñƒ¨( ¾:Êòêð¥¹M°z qõ #¬ÙPxEÑÔd:vUoz.”‰ …(ô‘ÿ*Ñû‹PúÒ7ðQ8¸Îehƒ?” ÝÈO±—¼§EÒÞ­ªâ¥æw&õ_8²ÿά9zX/ø\¼›"˜ÂwŽ—±+1ð¥>ø'mcúöi$çÍþ››·là}—` B¢@о| ™ðl’-Þ† r¯d[;à©7ä­2¾'Ût}K³Þ„º ”a0Ù‚v6u0V©Ä%û PTü‰\r0Ck ¾,þ=­ÉEÎ#n|GŸ£ï©­@ÒD¥?e}<§v‹s® =Ô‚”WÝ”÷Ýê³&ÿæþ@S7¤–K ?@} SL?Òx ¹VUœãÙ»u ÿD4_ϼ›‡ˆ†Lt<žDóÙÓíô^Sê,˳ô«%ªšŠÆ÷÷“ñrú`X%Ÿ«½î ›Å‘˜Soðþ]_ pÓï×xÀ4hèç“OÓ_uK8nj馸 ÍÖrz7yxZ‚±,[A£(…ÞÙeî²¢®c~aé(¹^ú¡Ð%ßãCÙêæeæS6š©BúG0æ iÔR¿GùZM¸KùPâ¡ÕÎoÎ`âªi"ÿúøo~‡XÈ8œ/À!J{%}Ò >ü›-FnW¤m™¦Ìö¥ùñ»FóU“Ôiœû²ÖºsV£¡!€Ï/zn·ª¼!V•eUY€‚€‚õñ‘Ì âpHÏ^_´~Ñ[›UGÛŠßöweäë–æ¶âþ+Û¬ïy™xéÖìj6ºÎÑ œ)+Ê×^£„BN­A…ÙɅqðOL7¶Áà æÛÖ)Qû’ ÀÛb<÷É;Ü2±Ûö6ÉêØÛû¸„#ȲëùƒâPKXkóåæmv[e9û{S­øUd§„Õ«Vµn‹+~Aõ)dG+ÞLQŸë@ß,'»ºr«-Ø]ÈpUQô pó[}QXD»½!¸ã9c![d‹€Êýk®q‡¡²Ss{f.Qu¹õǬp[€#Õ†žˆ©§iÍö<΃‡Åü“Ýñ§º||9#M;‚ÑÔЦö@tögµ°OÎO!‹aðÇÿ>³<²¢:<pìí®Ú¬Â$…”¤8 °§V¤?H Íæ!‹wžc‘6«€‰¤ö¨DP²ùn6º=ÿk$º¼+…•[Gk«º˜‰ù¼ò?4Ç^”‚EBkŽ*žæ¨‚X>i²úäIƒÙ܇BgHX²‚†¥ð1¯:ìå¤îᯉ®nª$>D1w(-ì*ZJ YG­ ªG)Ø:Ú¯æ€& âæá<~òZõƯñ[ t«”¤¸ H#…Ü/^rð[·b%S´=P^%¹¼¼îÇë’°øbÞ‘gWü‘Ðñì6o\;×O¢oÊÓUÌŒUEŠ»€! ÇÞk']‚Ô¤ŸM *zaüÙX|Â[c„6þ c¼¡*?x’O‡éLdõŠCêsàV nòê«q ¨4UJ°³ Äýæ ¶  €Î'!°tK"«ÈˆŒ­ŸË"ÅÈU Èd­Òú3«ÞâËW=PU&“$* Éoõÿ'ü}öwpÆ)v·„h=¿Þs^½}ÞÄëÆ»Êk"'´6n’ÜFM“/ÜëþË:Ì:jN4aót·H¿ xW»¤ñÚáà×áSº¹?Â5 ¤ wHˆKj?N;RZ¨1±…—$^†´÷ô§…QÇ©žU™M”$í|Pͱ·g×Ù$@š¬Â£)ê¾~(“Œ[<úð·óªX[gû µAVNõ_’«9jÉM='µ V. “蟡J‹S‚›HTçRâW¨? ñ¼ásï!UG@T§2N ª¤.ŽÕš=(¨ŸŽ¶,œê° Hë_½×¸$4ä´µzʦÂS6~™-Ñûäèóž"±1kPm$šu ·.“5^\´zæ+[Âd=BÖƒãscàSU•ýª²¡*5•úÅ~}|œ÷êö€Ów¬Ü±ƒQ"BBë°8³ºñ éÏtÑãƺ/ñ«NÙÀʈ-¼,]=`)úÂgÞ¹ðiAî5ÿaá5q›óªH{ÎÃ–ÙØ­ªt³ãwÌy;Ñó<ñtBã5œ ´–4Y­Ê/K>w»ÕyŠ=kõ)vÔêSÜ®Õ'mˆÂW7¬×Ø”v în$̼9V¯dŽ,¸úmÓX9\¡)$dq°m,)ïÖ[œsŽ æf›è¥J'P¼è…,Nv©¨ÔbHõŒ‰Ëws½IpCR— ž¾Pm¾zœ³$Èo±õªZúáŸÿøo éñ˜ÿóÿßÔ® øR‹7ûb­XÀ*wCý¯°ªÐk@ÞFô­×‘ …_؆,E¬P¸ VoÙmFäb}v&\Ý’· PT8ãvƱ9*Áàßê+šÒ:3‡ó #¾[§Hñï¼hP.È,ÇcE…«Äð¹œÒ ô3Ðy¤Ð·àP4UÔ:=&ÉïÖY´*ú¶³j2cÍH±ÇÍn~ ~ý–‹¨ê2€LpFhÍqF[ð¹Ä¢Å&`×UHF¥ÈÅå8ÈhÙÇ,­û¬«LÂ6IT,“ßZfpc 20¥¥§ ~ ï1öƒŽ/[GqìWzmNjÆq«Ävy/仈s”7i0ÚnS2á?ç·&Æ ng¸…„Øï)Ì,©o¤mf,mx!+d¤û@]eǤ„8 ñzѬKB‚æ›fVq€OïÛ í!PBæ"ÐSꄜ½äW½áAm»?x6õ›@ÏÜ·óK_8ÝR†¨(†RìÊŠ€³‰ë6 Îþ‹5M.‰I»DS°™ö¡W'goéý™² d"˼Q ë8mTõ²0K\*Q…§¦ ”?ñªZïã*Ù*SWƒÞtûêu\ÔÁ-SªylÔÈô·Gõ#/´­Óþ’5%&NPáð4@2ÚlȨe¥)½ µŸg¶9ò«Q"‡ôBý)Xà²AºhŠÒYÇe½ï[›wò·°rz´mWI„ýÃ:Ü©Á<äÌnÒl‚`ÞkD¬$h|BågÛ b¡2óèi¦’ºpçä–LÔô ¬Cdž%%A“ÝÁ÷ûýÕ%N©ºš¦)‘·Á8ô]•HÖ´ñ·K§ëºxª® 'Z\j€f¨€Müãñ}‡x…ßvîr37ÄŒ—’Øé^P±¡¤lQ‘µleSL‘Õ ¼`©5å_¯“<®Ò‚.kÔÈ?‘m™ÓTM•Ô^SÅiÖ_*›b‚$kYNRŒ>|IÒø—·a#"úRìɽâöHŸ5ž¡4jõ%Æå—y­»ïUÑŲdÐÞµ Ë+®oH &'ò28}=š&ºG²VàâáRrü“N…xvu}¢¦ ÈJN‘Ò©•v7èTná®NµGd¨(œ´Û±‹\òr¦Ç Ù%ʪۃcÝ•C߯ÁäçxyºRay’Œþó¢Žpž¿/‹Z|Ì ¤‡4]d„dß?Ò?ÔÍÕ1Ç—+1?øæM}÷‡zP5¶ÊvñY’§"ß?,˜;v6vzå rƒC×F¿^\^7Æ´|æ­1 ³ëÞMÂarHìI‹8;žKHƒ*˜°[JÀ… Ù^×çâî äe$¼MŒ”pøe¹´âw¦«GÊáaël—K¬Nt QãÙ=„Œ¹¾ÂíÞÓ·->Ý5õÜ­dU®ŠTª”ý" lÜpÓ‹EgTÀ0‚††¥‘é\² Oâ‘ ýç?þ§v7'›dKf‡~` ~ôÊNÎÐd3ð×-ôt}.Ë ³X§¦¾7Õ )=ô.!™l $’¬A")¸*©pÈ‹)ö¾à®Š7ɇMñ’“71Øv’ó›eÏ¥l« ½µœ­ È *“Z[ {¡/"ÖV ‰Ô®·â>¯Þ}–vfņBÔrDI×¾å‰?ÐEàÝ®Jv$g~¼ £ª¤÷U—6Ÿ‚ž¦kÀi’RYC ]/Yêð‚åuîÏ©B3Ïþ©ìØðÀŸ=êOo,sñgSÇ'/FáR|ÀT ?&à>$üG…­cé­¼vG¼0ï‹ zÀÖUä” ƒ§iJÃi‹&ÏG븃kpa§ïƒù„÷JôâU¸¬˜ªáÄí¹µÛëÝþ“6—.7ÁoÁ]®X­ð~v{xÏžÎÍkÒu¤/ƒýS¯ ç7ÿ,¡2Ž)¡ó¸/˜ŠE¶ÅºJË0l2\ƒ€/ºÖ0ˆÓ® 6nz“às-\v,ÇŽÙ…cJ+YQEl'ñ¹»¾Q–ïBƳ‡Çhüyt;¹azéÅZ—h¥’TçÍäãÓ­ÐXâŽì&¹P+—æšç“ñh9áÚÓíb¼L9ã\÷ôÓ§hts£ª&o \®œŠ+êgÓûÉB5À^c¹Ø“WLÎxYAذ*êËôsYªûëäñãÂë…`?¿H)¤¿ïAÝa…kÈÛ4ÛÒúwèSF7SéIÉOlÇ÷q½û€‚Œ¨+²¿‹M>àƒPÕ¬úž®ÖÄk2™«@¡®sÌæ"Èc^Eɹ>³&¶IcNÄœÁMzÊÝG±ú±0ŠyOîn:·à¨m!>~¸»ÝßœÞß.¸ÚsêÑàÖ¬ÔrøÃg¤Ä¤#$à´õÅU…<$(« Ùáû‰ü¤º«uŠoÚK2Ö9ãQ%)réßtD×Á¦hqŒ€"U¿Ê$\Þ=½¾íSˆü‚Ùc¶ ¦èè´P7é›Ñ)ÎŽžJ[L:Pä!¥„Lá#ù|%¿Þ±`cmù`Ô8Da¢ªÿÄãŽ5Yœ{ç Z´=8‘Mg$£BI›†W ÙéZL´9¥B©ƒ[©ä,ª2)0œ#çV¨‚ Â>ˆ<¦À 2ê6m>W?¾sä‘‘ž™È³¢KSójfÜT¹÷à)omÊY2´øâ±Í]•ÐÍñƒ"„`ÁýìtÛûˆó(æ!8‡Ñ}I>ú²*È‚¸Õ¨…‘šÂ ›ÆdÂs|ȤØÚAAWöÒÜaEc¡úié#’¤hƒ¡g´†ñÊ4Ú'YiW§óP}øÛ²>C‚¢-Í7Éw»B¢²ÜOYƤÎ*zðX/}€Ìá¡Â@uÞÑîæN¤+ߢ¸ÀCkQƒ~FØÑ@ìªøà°ââ¦& ™€ˆŽ ™œ3ªb®J²$Æ3dçrÆä¢êi* VºZl©qE FÚ6‰rÖÅaÁ)À1†à#0w“¿ã£óä„ãU Àw3°•]çaõœ¤µ«uäl·µü7y“à }oÑLF®ßÜõù+¸–kónxH`ŽÕ€ÝbÅ?” @ªQq‰ ºQ’ŸÒªÈEkÚ³½¢Š¿ µDA¨*³Ä`"™©ïxt´¬=B&§ùRQªý;9àE²¦,z/Ò™¤ÖB½Dˆý¦ Ò7 _ù×I‚¢ùg0ɵ±ô@*üRJø$Ḟ±L ¦4MµW_tŽúO¤˜Ér™Ï©]-Ú&‹iü¤._G›±ßlú’×[}Èq⡚’Hîu?/˜U¤ÉMñŒ?D° {MŸªFŽ,=Ñ]l/û¸  [ƒPu­® ÒÃÖü÷cñ(×3gTCž¨ä•Ê ™ö)!Ó§UBvÑaY’yõñë*©FÕ3=H¼gl¾â û_h¹sm×¼(´(¯ Š4w ¯È4]Ÿå­B¡6„ÑÉ&Ò·û·´ òEHâ Ê¡% æ 5þ5ÍÆŽ@éK³XèE rE[<¦*çW ÞcÖÿ™É&q3íQ2ÁHgÓòHæãÇ$¼NeNñUlHJ$žOžu™2köŸOJý¥tQsƒCÒÄÚ©|ŠŸX'ßz@üWpxd„à2qèÙ@p(¹`ÔNߣÇF0|P0k?™hÀ6qX˜,€44ôˆÕOüÄ×ÿâ[¢ØIz•n›5 ˆ¬ñzxÍÆªa2^Óôìb8T•&![‚wÀô‡emø¯À(ñŽr9 ƒªBMÕ˜&J"5ú½`êPxß—¢È(ö¾7!¦(7¤(|ä°(ü#ˆ vñfSèʼ… Pi~”oXõçY€€@âA|§P°þ¥üø®Èj|û­ÿ¦°ˆÃÛRoïç¡–Çë=N>V0H+B«=çU‚‚¨€ï„* 5¥cJ„ IˆdØÁ‰>aѧ½q§IšaÝ_ úö LQmÈÔ†\íX2@Hä†2Ÿ(ûþ7mZoÙ¨o؈·kÈvyrOt.l&”_VZ+U{µ†ÌM6XPöFF0 ;bæ gÿDÞÈ!jÞáÕÑýc|Þ·5<¨}dPÆù¡;¦SDàeù<©ð"Ùã§>  #n/%7Ö¤­)[¥Ìå¸ã!•³Ÿ0àXW¯%zð)%½¢ ¸,ÑgߨF Óàs¬„o¨Ÿ¨‡¡Þ{uºœYj'?E§ËèÃô,]@2ßc59Söûú‘Êì=*¥Ï¨”‹tɯ÷ôè0þÙÄ+ÞÏ3õZ’<Ò¤©öà§4)&™Ée6Ô(Zƒ,<'ð5^nÓää=ù)§îñ'ØéqFcRôB¢t‡þÆ¥QíèE(+øÄŸå†ÕÝǼçÌ²ÉÆÌÖ!K†£z,M![ F%¾‘N÷e/ðÌ ^é!ˆ÷»¬Âco¹Y‚S‰*D5]ʯÉ`qµ^Dõ!ÕÙF–¬ c) .zí2MöF¥ oû°Y˜%Bm¨«àԸ΋î½ÐÒÛû`j\MU€±«%"šà›s;S­ûRÍ]©rO*½¯Œ>ÎÅM§ä$²"~YG(Oââ÷€(ÐøÅÊÉ0žD´øeVÿ½äµå.òZ¿¼6ïÇŸ¾xfú•›•[ âÔVIêb¢H±_W6ãˆo4ŸÒWÁxÊ9~øzàÂÞF­]ÌqaoÊ/ÞdÑñÙYž§ko¸’· h¶Ì†dõE”é¸fïf¨WŸ‹–"ß@¤—–gaoËÙýPø>©ª´“Ž,•ͼÆQ¯®ÓÆÜrÉì:µtK½:¯ë„¬d÷g÷‚59%Ò2d¦`Wð£÷ÍLçâÒ‹uÊÎQ{B®‹^¬‚E‚¬ ]](°¦‹‡€ð… ÝcDÏ6&‡UÒ#'ÀjW!Ñ£‘„OñÀ¥Jq‹ì87'‘S””ç 7Ïö¯×1·G®øúÀÏ1ôξÚXn~æA…Õô·ÆÈíÚìh<›npTR?ŒÆ³/€î“û~«FÞ›¢~î0o.)OW´€·ñž ¨À[+{ß×sò· rº%“9ɒɜ便û·ôúzgoéãÉlçU!‚+‹M8É"ÀA’~©ýG±ñÍœ«ÚÕK\y€0Y0‚¤©¸ª X2–î9ŸEY¿'ëÞ8^g“(i²Š¦¨èhŠ/ *ÙyŒZ5.‡¦*hh‚†&øc¡#²ô6ýÚÌ 2…¨TÒ5œ4= o¼E[­ðHt…Ö&ãO yªÓ΂Q&Õ!õXRr±ëà$ÙÀ©ªÙ‡HŠ?ð£ÇlŽÆ¥À<ês94AuoZwʰLa<¡Î#2Æ®ë>e O¯ðíâ_ÉeP#•^Ç1-‚oÉŠ<î@ö£.n¾H§Œûd{j“Émxb\7[S|@‘öúc< §aF‹÷TvGæùã‘/e\׸ƒÞëó6dt´P-íjAµk³ íöuQakòk˹mï®ôŒª0L}šn[>’f_l®³Ætæî&ËÏ7¦=|_eh0l=-&ÂÒÇ÷´—Dµ¹ÆŸ'ÖÖc r,øeŸ6Iû`ëÆ©¢P*’Ög3¼+úöyºœÌ¦‹¥fÞ+DÚª}’´ÈÂ$zap(þ÷ÁÈ#Ɉ™ÊcÓ2:H–³ Hí¹>›}¿83ž€"ã {Æ–ŒÏRçT“=fÓñÃý'{´ŽU_¢uÎZÇñp?q‡ —Ü•È-SYnˆÞ—ÈõÒ¸ù‚«æ¸rE·íïøiI.›ãfpÚòšÌCy=¿>A|¥g½Àk€’¢Š¬¥ôi:[N­%D¦'ùÕ3˜F%¡P"Ì><Ž'ÑçÑýÍlò¸PM>_aéY3ðEêÝ‘éf©Vx)úeú©Žéàvn!Ç ÿO“¥i¯I >Èq•A®Ä°¸œÞMžL“8F¸ÆÊ놦÷òÛbûHº¯‡5®…ú©ì ë-èO¡™U^gÇM—Ò/ô…i ¹6¶X/IÄÁ“tylD‰¤g O‘äŒK‘äH–ª)O#Ϭð O*¨¹<­µÜµåªyºŸh¿Üž_ŒÝzoŠö…öÔÂ):\žÝvî©7Îv‡ ­p®3r®p¦³Ys@ÂIóÔ]´Ô›óŸA úéì7R„Áô‚œÂ=O2½² >¾è›+ø„~>¶¶Û¢ú%:I¥8(y¢î]_ÝÜú’žq°+’œƒ]‘äìÒû–çÌÄÀýü±å¼y§™m'åmÑ Få-ܵ˜ñÉõäüÃd<¶Ä ¡ÄîqÒl rÙ¾8tx£‘0-ÌøŸ]œ_~ùu2¾>;9uñƒ Í¢ÝN¦z'ùC? ä2".#⢸½ž¼?¾=ù„¼ù$š?v¸ÏŬô@¡Äd¤˜h™ÿþ7à|—iUäµu¾ih%ôœëà4RœüKèÙÉíÍñåøÃÙõÁf‡óéÒ‰‹9¦×’oO¯¾˜ÃiKj̪`qRÜȹ©æão€X «è ­G—èfw¨ÈðÅb÷Œ[¾fçÜð¿8·{Àú97{ÀܽÕöîxÆ$ ü Ø;“/Þ7ÌŠ¾§WÓg5ø¼òšüôÊktð¼f~ÿéA̳¤xÍBÜ o'Ê• •p€$â2Ò\´<Òñ¦âüâüÖ|ähIôBG·ÈªóÜö/Ý»mÑæ¦¤³ÅgÏ4ŠUt¦Åñó9+Ffš–l’^@Óv߯?ëªÁ¿cð/hA{†šhÊk ¸ :*ânÃ^4稫Ó÷C¿Í Uá‘f¦¤¹„¿Î/ÏNQV§ñæ+BõùzÙD{•ðh/² NÁF^Ú<ú`ñtÉÌ´1µ‚®6/On~»¾œŸÂÌþ¦J9Ÿ¬Qq{„r>b&®èóÓÉgTþ‘/PëŽÚvÖRìПqãÊu¯b\á1»"ñgì=íˆ;ÛOc€õËÕÍ©»åègÏhq]^K£jV;£ý£ó}‹_Î=#[nî.ÜNuvöEeg?«lÀ\ŸiÈÊ6+Œ ¬3¥øt^I(aU fÀO¤6ÿœó[¨ÿgXÞþq[=—Ý¿vin½ýÊÿEÕ—M›W«ªùÛ_')Ñâ:ˆu›RæÈ‹çÂŻРGo½:B‹Ÿâ ­«ñßþj£ § 0Úaä½"Æ-!8û|’]òÃ*D…€ºâÊkFÃÏ÷¢¤JçŸ[`¯í]Õ0xŸÿMƒöß J†ûn‘ö]Ï@û.>ξ;x˜}gLdßu±ï¢Cì»Äö]ÿû.y|}×9¼¾‹®ï^lp™Ö|©¡õ]ÇÈR’¾ßc`}ß3°¾¬ïXß[Ö÷ÝëûèÀú>q`}ß?°¾OXßw¬ïcëûX¦5_j`}ß1°PFgH¶ÖbÅC6X–º¢a”Á޶\ó] nõ´}îvr¯ü@¥xŒî•i nµªžèeä}£Ÿkq‡;!;æDH1qÆ(µhÈqŽét‹Ü~oª¹ømÚbÛd ß@qìdåæ ?qøl4—=0¢¬ÅÂD•Ua¸Ñ4VG–>uÊ·¥¯‹†Cã]?µwøtýú<Î c0 rC"fwªÙ'²ºXcà5}E\ŒO©O–k)h <åóv”xlÔó"Œ. Ë¶tƒ&¸’܇?¨g¿_T~ŸØTiMPËÏú¡Yò+·TY±ï¿ElNœq_gï Œ‰¥^ÓÎë²]À´1€hvW̾êr ] ‹ŠðGJ{›H‰G©1J’1øqM²S‹‰¢_ò²Øµ\H§Hz7n©ÔÖŽÄøK¾úÚÞÕÕny—`òPnæÕC³/UŽý"L^X¹±ÍƒS é ÆŽÓ‹ïí›Ýcmb÷äâý æîuß7c›îõ!ºàƒäq]Ì9<ëdOS?ýX¡è`8®gø”d†qR;äÓô>y7,S]9ô}ó ñ.. .¦y“òI)BúUŠåÙõnµRq_-AT_/Ëéy×*_Ýãóùâa’[ç%u¢£¥1Äíº¨—Œu¶‰w›}Æß‹¦}‚E…ÿÆ6™MêîAÒAÌìßc(úîH·‹à¨Zçõd»Û@M‚ÛÉ…$º3gð 1™²{ú3 sÛ~ŒÙAÿÚ…”¿Ô„VÓ¤ªKš@G°É›m!ÀðœuvW¡WÆA!±R,o,9 `þ‚Ž7¾4¸ñQŒ`è Lc7È×wuÞp„®/ ˆÇ÷U9ïÀÙÖù¼€ÎøšÐ†VEG–ߌ¦CÂ=VbB)Ã",b–ñ35õdÿ‡»'¼çæ-„²Ý=qûØ£äï–ˆV¢IGÙJ¦4ƒP†Ê„½mr ‡'NFÈ®m„ž%Y ÃRð* ·åk;4ÔŠöcàâˆQôûæÀQ£oNPL@éÝ¢§U¹*jö³”"Ó¢gaVB·”Ù]¾YÊrrH†¦f úgÿj½-Wi5ZáÍ?ú8‹›6|Ã+mó·DA±¢Jn,¯ÈjFÓ]¹š'‰6ä,ÎüîQ¬·íÓcv%‰0ä,ÂüîÁ°“Ø3)³æ¿{Øv¯ƒ1JY6(…¦¨¦u[,%ZW¾*iýH”“º„ÝÒÉ­n…ÕÇX»Ë³SºmªQÞ4Ebßhj¡öòGŸ.M[-ÑZŽIê•5/gítËþ¿nRå¹¥´L79M.y@ÞW, ¥bjšPŽÅ¾·X. –Ðî}<Д½xœÛnµw ë¤ö -Wxm¹¢{u|ø‘\ã  äôh@±kGìª6]¶]F‹µ{%bJ™<øJ–ê—Ó’ýŒ^éxÅ_79VGºO)ª1Dò`”³j^ŒV8814k2·œ€2&*£Wú¬3Œ²ÇÓ²½ônÑÛbûoIÂÙã_= ›U¹IÃϤ”þîaû”ÎöÉbû”ÂV9£q»‡ §œ-ÐÉè–^ ×‚ú¾«ñ@$m†óʰT/±O")íóÞ& 7EŒT“Ö-t«rn-¤µ³_ˆEú©ÝBŸòõ*y’VÄ,Dý ™OR¶ÞgÏ}"%:¶^äÿýN¦†Žùšß¦Ö¾«Ÿ«E¨îCLɶ²Uh‚ªäì)YˆÐ»fìʯ{/˜› ¢y‚:®#(u…‰Q®Ï®³ˆ–0³ ~¼¼¨†Gœxè7á!ÖÏšiR¶êÐãf*&af_ð€£—Õ$å£tI=ÖVõ#—ËŠÃ^“À$ýë÷ú½¸*³…ÿeÒFXÒµbÐf bÍ’â־ݳ¹'Ê6ƺð3ž‹´g‰ô]¤‘AŒ «‘î¸üzŽdÇåWƒÞbq^‹HtÍ5ú…®´8Ã%ÕŠ#àù•öýð4–èHÕ"Ï‘ëøi² vÍ‘¸·“ã@”1‹™‘øWì¹ âYè’7ûT=d·•›[Ö)& icF 1@B7Rö·cˆY Ö÷ÚÅOÔŒ zy? Ⱦ¾w$QÆè]畾â`=B{NͬGh -/±ŠYO¥ž#Ëz*Õà“Æ—…8A“Ù†\3⣎ ‚J~±¡°ìhE‰† 6zu±*0’á.IÛT9‘#‹~¤EŽŽð3êZ)á] ž}*§Jð·L×Ì2!dÒYœ¤þM`Ú] ­úµ U~Wd:¨É ¡byM–nåbñÜG"ßSs,ÈZç0ßéXš0'˜É(†ÑžÖ—ÈEJžžø09¾øåø·1sÄ0ÔÅc{KU”xž\]ÞžýzËLC/ ÑÞ§½6ÒZL©èø®z ¥³\&{(a[:¢&!Ë´¡á.Íp@S…?v.Ò—cKןož[²U9­¡#PLÙÂD\ÍŠ|3Ég³j·iS¬³ËiXH7"º‘Ðy–Ûݬtü(1ãΧôv• \!=Çh‘B^m¦°køª£ ¦×&V.V¢ÓÁ£µqXéP)0O6m]=a0¢¼móÙ¤à?Ù{¤×‘UX½rãÔ٫欨Ûr±{н;®«l¬ºm_,:Ñ*ÓôÔî°z¥Õh¨.æÅƒ Öïš7>zŒ•örÀ!¢E£ŠœØˆ˜W¸rí="Åb8˜¬oØŒzÿ”È›x%ö†?¼²ý…® ŒiDh]ÌÐî«ÿ3å 磗íÞ-ßU6V E;*·}}°„º9­þA²óëF½GíäpXUÒ*1ßzkÔ…ßC^®qâÞ·ÂR1äDÕ×𛄱OÔ>~rS:ÍW¨xÖ{×£»t¬>äÆTQ÷Õ+Â6¡~X*S¥üz¦×© kä3ž×Õþ|‹Ž™@‘ø–ëb‰[Ž}[>R,™ÉúÚÚf”ÐÈLî·nSþ¹ÿGŠU‰úà&)³?÷L†…‚*¨PÉ{W#V0Zr¹¯:³„*¥€_ g¾]ÂbÑšYo=,Fþj £ªÇV)¸7äA°=0;f}…ÓCØæË½ÛÕ/à 4}-ªY$  ¡Þo?Ò.ŒnŒF Z žWÍ7¼ÐKظÞ×d%4ø¾)C/!Æ{šÚf”ÐÚ²u‚J¬ÙK:­|®:nñ Ôq+Ï“ê¾ îjµî1éîSâ,Z\wûël·Ó¿Øÿ²&~>¹Îþöæ¯Ùÿξ…ÿJ¿ÁîWƒËty 4fÇcŽùâóìç‹ãK\£%þ.?$¬V fÆê:ŽQÐÍéNa•?^±Òß5+6#asª² JAM>¥ç!©¾`´·%Bˆ/˜Û½ή‹ìƒÌ¹p’€OÚJüDî}jELÈ2‚ƒ3“ÓóñõÅñoä|r{%^"µÈæk ìæ›¢9P¢ð1%püÓùõõÙ)ŨÀã¸F¿=ø,ÙâaÎä­Ds ü{¾YVâÁ½G(Eåˆw=vmrëÙ9ì)‡ãAócp£«|¾ž8_5ínÚ$J+P0o¤ó4·ˆùŠtùŽW+ÍÛrcÕÈ£à•Ûv·I€fÓÙ°(Ý…DIÎùu¿7[¨×ð)ÀОh *b6Ô†§²\„*Õ€Äô °Å3ž$|Ã3¤OfãrfDMhðÈ<¸G{ÝoÊY Cæàd¤Xx.ÏOP …öÃÿZ¡9̰|LíWNÅùôz¡R%Ðt âšr û‡™‘̉F:ÿçªÁY¶Êy3«ÖÙ+>ÂYŽ^p¼ço°âÍ:ŸEÞ< ñè4•nARIQT*sXû˜v»D”ü­¯è—¾UÈeòŸÿøï†cþ¢,Vs˜x«ÉnÓ–+”¹MY+‰Nä¢Ù4”qÙÓjôâU;F‘ªf_¡ü3õ8bâ+p”¨Û¸7ÿ–K¸œMiN_>:³¤âí´"Œh¹œÒ?„âÄ>ÎÔƒÉ+„Žbø£îD“|ŽÖEî Šœiœ£Me«`©2›4L'Œ3Ë9’ß(Ñ«j9t:¢)ÃMi ú¢ZâD_¡ÁâñT´š' AtD¨#.¡Ó“v+1RGª¿?q X{{FavL׳ºhS 8”ÎñpbÐÓœlºZ&Ï46©‡€²”ÁP³_*Ü£™nјdœÉ¡tÉ6ÛĉAŸèt5#¯Q¢_§ùé_ähÁä/Ê*Fó*;¿0àùý-EÐ2/îZH}þûÑ|ûu‰ÑăXDi äLžn·ž‹AŠÖ3tŽù š„Íݺ,ê‚@‰½ âdˤîq?ö .ðQ–ÛáVu 'Dš)ü˾8¹«v«9ô¾ãÿÿÈþó?ÿž¯šê5hØ%¤}n+z¿mÊVu& ub&Ûȸðèú_;íÓLÁ4>Á•œæM6¦$–Qͧ6ê1RKdØêG §@p†B5ç”ã_Æ ®ÊNßg-oö-lí*™&ôqµ«U L2 Lz{{AîsòlYÂ( É›#Ò0AYióU?!!]T2›˜kü«QæilW‚æEÅìÛ ôLÛ~…8B(âgߎ c„Z¼E âáܦ>Ϧ°†`8jì¹y-&Q°¾<ðjž•s lX¯‰QºÐmÆ!ŸQ ‚5­³(IF=¥q!i€qÎq }p˜ Xüž«)®,ìé šíü”œŠ –Æ3“F˜.†Ë…„}ÅGÐôý°ù‹ºÿD•è´È†p'IvH]œå7 §¢B^ÀšTÜógŒ-Qzn©Ôw…‡|ÓÌ›Ü7Œ³Y¦Ž fÙ5‚šed5ËÁ´ƒ~ÏrrJó‘}q½:l¾Á–„úh„«rQÌžf0ñÝÁD›5ZÄŬIFHâƒwX¨L›Ð´2•RË?fªè°˜NÁè"2×îÜÍØ8­H‚yÇNÃa3+öYeo,mFåÙŪ/Z8,Ãd «avvòíßYþ®iÑz.ò§ÄaÖ[Ì'd#! `œQ|4*ÚLh{Œö®Â øØÖu/ >VÂX$YëÄ( ªÂ·ÄqÈqo‡.¡³³óë -ýÊU£¥§ÈIteé]C‚ŠUÞ îò^Ðo²|>Ç…|\ÅjšZmÒ±šFª­Èãã…A°] iÈ{ebd²š&A[M£¸VSÔjª§ÆZƒ@wXçÂŒvñÞ4MŠä˜XW&î%Šo㱆•ÚÓsuAq"«_²Ì¦†¹x/Ãb“ªø”œMD;ÑäÝkËÙå¹}àl÷ʦLÂCâbpï£+òÈAoÙ?X5HÄ'³uøù Òµ5jÒˆ„/r1gC[ÃwGwñöâÒ!¡n)1È^)¡™"üFšOüKóžÑZj ¹µLìÔÖÀ¤¼°c­"Ý]Û³]ïÅ}'÷í _²8& ÍH%c`W!€Ÿ¯O<,\µhbûDÉ •¶’[°»¡Ì·i ]8^'°$óIüouB‡S‚FB†Œp\#Ø2µOg#9î$ÌÅw#$q5KìÐÈ^ÍÂ~PÄñðU³‹|·IÁñ/Þht)û'—ÎÅæíž„}ÀöÂ’#‚Àž¢ªvcˆNqψ*;ì¿ÿ‘rû±ÙôzÝ'v€Cæˆ2=غ1ëÕÉ…²úç?þ‹ fT°ùç?þ›ñAôQi úã{Iü9üš¬n3ŠƒVmíÅÍÞ““z!·Ï‚ÒWÊÔT]‹L”­Þ^+ÞN¡y™­íúå÷…=¸jì³B%#ÄL@%†qZãFˆ D‰e4¥]hÏuH¦Œ›]Ά׃(¹(Ù#ζ!º»&&5)U©Žš¬Ùji6ÖÚŽ6éH0FmáVv»þá SÌœJo«\1„ä÷’x†'„Êl7;?}ãN =FÇä`4¤ãx›Eî Å#e'¾2=e¡‘“N¤ ª %0@Â3dÛêÒ–«]%j½Š cD“l€‘Øe>¥Á9aGiò¡>rºK¥‰Ap…»M¡vK"SŸvË0)çbîI×ëœç¶ûíl2¿›m'¼íJm§žRàíl„T#¦Š´_ŒM¼-‘L¶† ^w¸-êñÙþðnÈ–Òé§“ëìj+Q6èÖ¿…Mƒ>ëqN!Uœ1‘Ï”q'Ä‘2îò–lhjö¦_Ìc5l^¬nÍÿŸj5´g?hØ5Ö^þ%\±Ä´I¹|Ho¹ ˜³Gí6S08ÂÄ>£ììj³b§Mõ¦h#Mâ±™o«rÓîñyG‹x˜…$þa» ¬–FcW$Ò åm:惒}WÍÕ nóÛ }/îÄîy”¥ÝP{+ÌöizÃúÔ.6ÑæÔÅâõôº>®©ã´k€FFf×ì†)òc²]¹¤Å‰7s’y_Öí._eÛº¼Ç^£ —FKÝä³Õý»X0;ÞC¦`¼‹ÔÙåñÉõŽi1j2ÈNx`®ª cÚFôÆÑîy×ÔWʇ×vß4EÙD'sóì2o±¥é~'a ±™ï[§¡Út×Ã|# þåñ­‚m£+ö™Ÿ}jYÑ1+ëbÝ*+ fMÑ&£êÂ"¡ ){|ÉÛbÀì1BèâÀ ¦Yg0üm¼F'"Ŷ}-» Œ H}‡Ô8ÀŒQo£mMàk¢Ö{ã Ö¯„’¡û%Â:è‡C±Ê˜gI±oçZ*ð½À^cG“¥Tz ºJ¹µ *1µŠÖ$`Ó;b3"«+ôÚ¬ö­ÁönÔæ»w°Ñ‰ÈðXovÓý&„H5ÄÛ.ÜßÎL4±0ØhÄ(8Óœ.„¡†¼ßK;»ïÕÎî»´³û~íLAìRÎûåì>TÎîI9ëÒc/³ŸR¸Ýo÷9ð©=`ÛŽm¿.o0DxbͰöݤ*žŠ® WˆÈ2N‚Ìrñä¼ÅCÄeÍü è¡ÜL¶yÓP¤°!Tb 2G*ÓÆgKýdÍ~Ô³|ŽA~Ñóu ³‹¦Ä©¿[å.Ѿ>l&ÚùúæRnŒwƒÖ"7Ï 9³œ½#ÕlµCÓ‡Aá.-é¶`Irn3õ• a FP̆¥#Òl©ðÓÌMÊPáD¿«¹‘wè“¿jJè RZ@½HùØâÔ“z\à}l^1ÀIñ[ÙàeÝQ˜‡t¯ä"KÅÔ…&Ä‘tÙ¥0Ùð±Ô ‹È€ÁD þF÷ˆ»M(˜ò<©ð‘a”©ÔÓÑÞB.*Cö[Œ  ÖÝ&X Iì=@íI>'Ù ©Þ|YTŠjß-F*°(k$Y’S@^ÙUšÖ¾ZrèÉê_Uøwƒ ÷#i°,Jæ (Hº™(XüÌ “^mܨô U¸ Lîø²ˆi¶Â·,²Ó-Žƒ¢ÉÄﺀV¨¼àöý/=bœû:¬!1vIIžŠÍ¬~ڶŧÝHïq-TŒ©èHqÑ3NÏÎT:z\ÅÞ_$5ò"Ú ¿y¦m?­cI.6-bdøaœ-(–?—&C|ÑF¨{Æ£­­B)¿çÓiêµ]¯¼¥H–œæh 6¹u‰€?yã£(h†§u˜×Ë|v—´vP &“ëuˆ_̶÷—Q/»²3Cj) VùTx]ÀBH–+IG,)½2P õÍ6¯sضã'0lC1X.D«é<›ŠnV~mbV†•J»»î.V#¸ËŽ€;×êCyO»_'D E ó–¸³ùm&Fß¶‡±lŸ•åçÈC~Àž‚8VÀA+ïk˜ÀCê”eyƒ#éКÚò˜2I³Mï/¤NGÑ(°Xï`ߣZ”d«­7õ!—=‘`îDëÞÆXð·‹pM±Ç“·£€)ÑFõ üÀ嵿´Qœ)¯ @špHh€VÀña/€R¶Ú( 5ДZæ¶‘)`{èRWIN¿Øa-‹= ûŠlL5MŒ2èqø<i]#øø^{ÁvÀ´Ó†ÄoÝÏRT{‡_¶0MÜ5GþØl¨GÅzZÌçNطɼ£zRW}ú»÷œ©šâlb“À¶O8Ã74bÎgŠLÅFáP:&LvS‘¶¿¡£}=’«åR… Ö¸$ó­…OÑÏ‹én9 a‡úwU¥Ðÿ/æl¾á|¶agoªÛðO•‡åm=L8s:׃<ÔØP:Ø+–Oqç3*×A ‹hÑc•¢ü¡ s:3¡*-ýƒÎÞD°hg—Çï/Î&·ÇãŸ&§gï¿|üxv£„a¸x-0ÇaJ¤½¤ÔIÞ㓇ó,–hŠ h¶Çn@&ÍX4§¨¯Òþ\¶L®¹žÐÏÓh,+سÞª”Åß ceD$;*ò¥˜‚FL±J êðu¡äx®-´SLK #5i!Ã>ª<öR@óö2iÆ÷²ãkÂ,-“›/‰~¦t”0±by‚4Ç\v$e¿ÐU¬ËÐã?å·×8›bĤÃGÊ8à®gMâð¥)<™8ÉI‚>@±œ} •-N´¸ Qâ˜%žÐè2êhF'd_6…>³I=3Ütn"ç…›à´0¯§e‹¡Pœ³Â  ¼¯`f³ 7‰Ç…›ŽÃÂMxT¸‰Ú²ÝÓÂF9 ¡r ªÕ&~B¸ Î7ZHÒ nbǃ<Üܧø°2Åé^Mð'UËb˱‘ª¦—uµ¡×z´Ù©Ï ô·¿þ5ÙüòÕÄëQ»&âU…7w¶ÿ §Œ®a:r™žÙyî:ÂcÜi¾ò0‰TèNÖ#Gš¼†o¾„‰³È8‡¾¨ãº=ÏÎì*õïúÂ#xâ÷G¥^t|Þá×ù¸-©]ß6”*òm9ˆÁ"20Ñ–¿íS‚¹mJi°Ç×çoŽoâ“J0§4¥L„F¿DDäST:ÇF¦-µ:É®Úç´5lWßî-BlЭ¾´ Yk÷ž7ØnœÜ«wû}×ô]ÐwQ ïöZn¾æËá/Ï¥³àqºƒŒ“<ï¾RKþèä ¡¿Wóí04Cdá‚Dü¶šéâô:¼ÃÉa<‰ÓT²75M% Õ& áúØ:_1wXT[¼A‹?~‰lÔu(mØ«TýòôZÕÈžæÄ–o¨Y#ÄF&gŠÁ ÕÀv!˰=Ü_³Å`ÊHä;½a6™’`”b ¡‚$iÆ~§g¾Rt‰ ç"Qˆ\3^6è«Xd\®QËñ€ :âöˆ Û ·"r]p§tÌ}½_/BéõÂ^/,Ù7E×5lш£l Z‹üjÿƒd3Bcf3RlÎnn®n&W—“ÏçãñùåÇɧãËÓ <àigówý5¶(D ¦èÚâòR×ZŠÑý„ ^Ú˜7¦D-W¥$-äÙÙ¯¨w?¾Ìÿ[áq‰|ÞÿXÙ"ÂUþ×è2/OÏPÚªZ5Éu›8äF4²£‡.”ïÔ³@$ú1è[‹DqÆ$ÓŸä ]Ïøþ^u/?Ti¶vn[aÜŠõ–Þ)BwæǨ–Ò*Lõÿ¤çý8/Ë”l9_üë —Å¿ƒåÿá†‘ÎæSOZ˜;Xz¤Jc:¨Ç3Vâ»ÍÛ»gžðâ3"žºCb0=ˆñ‡+ße3«î1ètï²Î׊¦b®òE³ÊvdÞS2{/òr5€¿\yèË•Á^â«ÃøE¨`‡‹ÙºYË‚¸óÉy~f«#§qBÔLš¢¥%’´C¾„¬êv/ÿØðÇHØj*7ŽÄFûïd­(›KÐî6[Ó€‚Áº) º‡4Y;+25]å3/øPWäëŸéïG P<ú}ÝÚ‚St»ãlxü—&2þ³OY6ÕTELNQšNäÀ_Ji"¦rŠJSlt¨óí­@齫"¾ >óã{DZ á^£QYœ˜ô(J1%u'’g¾ƒÜûbõE_ nôQõwóߦYôL¤|J›Ï滋%YÃìV~Køþ¦©=´†+þ²{+#®9` {fР[|˜M"—;‡Ôˆ5«Û¿„ó Ìþ$#XôHØõdgg×kRHUûª?5‡ÂŸ %*Hkdá/»ƒð7}6f ±‹ ôŸÎ=Fv:]†%ŽdñºC&tæ0R&x±¡ûD6O¦ݳí«!ȺX4¬FÄêçe`Âû ó²S ‹8è¬/ðÒg»ç¿|7ìä&—‡-2MdÓ¼)æ¸(bð ÏžÍê”(¶. ¹‡d»T €¤’`ªë+šáßê6´ êˆ>¬ó´±¥É5–Ô2L0#LÓÐ £¦¡DY(‡–l.€sÞ'çb‰´×œŠ^'çlâd¦V|CÝà÷¤ƒB@¡šÂ˜°w*‡óks7x9ÿ©”øæNnçñO¨3ýÃ)¯ÞNË s´ý›÷? riD§éÞæŸ¦¯%¡ÑÄ“[ЇÔ'~â\©R n–=ÉÏp`5.ÒF–"6 è§U*ÁŒ)<ZüÍÁþ#6ãT¦)@õ æ9ûDvdvB¥ÝRÄzGGyôŒwX$FËDãe–›‰‘3‘áˆþr÷D,3ÌÈ0#£Œ¿³|rðåÇ—¾CÄ3?½¾§ŸÊºEªS)MÛýêj®øŠð‘ðUÉoqo¶O²+sN^ ›i¾#Ž¡ÜF0. É…aül0ÀÙ"ÖÅHsÆ™Oõd¨Ó=ùØIO¾ÂQJ1^`€(ž#Ãó\’2Äâoª }/6:G=>_]bPÙ#»Àóå(FÇ›¦ÄU„Çv\ƒjÛ‚ž´« –¸)àÃÒû‹ ,GÄR£¸T)îw¸AõfåNz/ ž¸ºS_vI‰îÈ *PX^¸€¥×W*ÅmœÍ#MÅÏ—.LÕ$DL¯9¦`]n‹U¹ Ž…’hx]ë?ELõÊ,j/×¼†§nßk$b)˜Ò Š$~FýdQ¤.³]†!wÒÏ)|Gß1'£©©•ÌPÚ§-LÜÕâåêMGÕB×üP'uÆñC¾ii²|9ÉÈ’fK3‰Àߨî}‘a&Íœf e0Ún¿iÓY·W+ŽôÓhŒÓ|3(ç° Q.RéØC©ãéñ¶.+z«‡o Fm5«VÍk7áŸÕ¦7ò0ÇX‚ƒè-"müø›Îƒð„[R¼}´X/A߃ Þ¶ÿx=¤¹>ât-Ú‚ôãùü->~{ªœEÏÕÒž1T»‚æT×­Ís4‘ÙH3wgm5©wÜ­Íî n¾"a¿NÄH+fn¸áÖFÄMÛ9ã-¬ SŸAFäåc×jTú ñM‹ =û÷­„ƒ¥Ù!Ài1Rì>p>>SäÛ*{_d§œpŠu¾Ñ†öývöo…\ËÆÚÜ>“{MVÜ“r#ïçhq©¶ðq¦´‘¨þ²8ÓתEöŽr‡Æ¦F·–$ƒT)»Qž“µ$ÙtšUiÇzjssñ¨®&3‡}¦‘¿>ã £ªÛR‚ƒ¿Ä¹¤Å.<ž´2Ypû´4ÔaZKb» γ:Ð.b p†>fR‘ž²jŠ.ì ,Á²5JêÂr-\ÝÖƒjþ kµ^¹ÒWcƒS°(åöþ_RœÚwÓ»H1ßsk)j™^ßÿK&‰ÒvûUà…F[äÖü§kIÅ”§Ñ¤†ò©]Y:×o$á8m4©³|›OËUÙ–¬QÈÊ…´Ö›£ž¤§½g{»0'éxŠ®K-ø ]_su<š@ÿçr¨8/pn€eõt„ž0Y´‰öõv†’_­GÈà_·0M®Š¼Ñ?—yv 鯾Lw›v÷ ‹Úæ3œLŸ%MxÄ^sÖ+Üþfåf÷¨ä–Ûg Q‰åV$|]îÚrõL)Â$&é zídüKöJ´K©™(«Ï+H´E¥l·™Í÷x˜ø– (ð§ý6‘@4¾Yã¿ñ©çSÀpº­=Zæ«üñiR.7 ELfEÚÝ¿mÉFÌaÄ>_ÿúÛäüãåÕÍÙääìæv¬$áóchÜ$]JGD!‹‘f!²n®.Î&ãŸÎ.În¯.£Â¤’/ S*-•VØ.ò0™RV¤ŒÏn~>»Q|Ûêkq`óqQáz{õÓ6—õàÿì7à#Ù|s.ɬäE‹põ’“'‰f6½;>[‚áÜì¦ÛûEX /Í”Õ ¼sÅ ¸Ï`}¯jСzÕ‘€Lzs6’d¥€BøîoïJem œŠvövº›}·°« ¯§(lW6æÒoY¢Ég„P¡ Í=mb×kǦiÌY‹2þôž^Ž®$@³Èl`˜ì”8(>Ɖ#)#Ѻ4 CaG¢'RÔ©Dúþ¸ª¦ù Sn(4;ü}ö(—ç×vtZäR®—ƒ` i6ø `Pó(ÿ„YîäL¢ëhA,L9ji‹5Ú’â;JX@”EáÀò‹Gc£k—0ŠŠ”ì“j½Å3¨³ÍßWBÊÇ“kn4‚Ú ‚wÈ bN¶arŠå!÷‹”§{šô‚ÈÂtXü4=uÄNus¼[rÐïÉHù=ñºp]—uŽ—u錗u¹ì­n®Ãœ«Î¡˜qÙ«Ïç¿á&„áCÐâ;œØÒ°Õn|‘ÅÛm—ƈ²m I¼¥e÷ɇ¿z·[Ó95ÜÎÅoçôíܾ{_涨ôs´iñò«×ÁIâ"„F¼ïÎ&öbÛqKopxú‰Õ¢$¾ØP”3—ÆÀ±¢œ €€YÐLØ&ÂÙ[2ßñÇ(Dhvþí€xL!PÉ„JÁ}ö¼l3Pÿ>ŸùAF—³íw ($¹ î¦W@¶#É÷]GŠFW–<{ÏTÙ˜©ÞÊO”IÇqÝô¥äûÇr‘¢Öê›ãìŒw ˜îÀR5c&]´XR5)“ŰºŒÈÒ¤ï)7 <µ÷ûËuCŒ†V]àe88èqjI†l‡813Ž&/Ñ)$:8Ô¬šŒÅ+âQ1Lz÷q} [U?ä59õÂ9?b´\©¦!]°Ë*Ä­óo ÛA¿$EsïÏ>Z,ÄÎd}“€Ë(@ÎzplF‚‡¶~oñΊ$ôEœqGÅz:æ®ÈWí¹ÄLªU¤PX&2š~ l&îO”y‚y.݈ܶ¹£d8P£÷Ù…Uоj4‡×£I¯H“T“f¸*MW]hó– ߦSn $ï}\ç˜ê‚Q›8q)7ŽÉèúŠGàªý¤x”” Éþ(ã°BBFû—Ïr…ÙÇçÀz%Ög¨ýøãÀ÷†<¶f'À8¶Ä£†á’=hã‡vøo…À«G¢ýƒU(†Tq±ÈÐm«}>åxö6,÷Nu¸Q]ú { ›EŠÍ&î>XÃ^Eº¨CHŽ_‘ XçS0M³¢ë|!³ÏŒ— ÝÈ¢‹AõX ÇÍêÄd»èɳù^‰`Ö$Q¸:7Dª³”âi—Vîm]=>%ƒí*b·½¤Be zÀ.¨Á-Qà²{ù]Õh¯G“^‘&©&Í`UšÎºl«jµo%¬2葦6fwཆ¬RüHjs¿`'füR‡Ú[3ë@Ÿjg[·³G¿_°³@8Xͬ£·³ÈÈßÕÐãyºÖãÒ‡x!t¶¨ž#Et_êÕç\i6âi!)‚Z_ ™PøQÕ¢Åt'â†Ç¥ÆW機XW™D¤‰|b‹p5†ýáí«Ãó”[·Î!ÞÀ w°ÉUÂÿ…< Oz«›È&áh°¿œ VÑ© ÍÆ=ì`jBsC$c9!Ü÷äb訢çl¢ë0"~ic%&x*Áçü MÛ‡´¥•g#´’Ð}2”Œl»›‚ÊA†dh>Ï­¿ŒAÊ4#›ÆFaÓwt¦µ­¶å,¤M £Ì,J§pL% ʲ@Æù²²ìD–RÚ@Uæ rºÎÔÊÌÆÞË6<¶&ªc"Rvc.{Öe|'Úx„Hi5I‹{„Ø Qê“¿ˆÛ…¾^Æ'´ˆó”ºzw­Ú‘ÕÚ_¥}(¸!ÍqÍžÀ¢M(xØ;Ó’j,üQ8nuÝ€èŸdӗмµ?P¾¿ýÌïgÄi“l­¯wS ´p&!ŒbóP¹ˆåñL Ük±Â·ûôi·Z©§>dØË`³vVíS)ˆ’j0JB¤:ðhÞ¢«Š)Ù§â›'.r´ð>²ôÜŽ,¿‘¥í^óf7}”8n ß»ÇqŠ*¢dÈOû(E¥±Íd“ýXn~Ï¿«Iøhv³Vì5±òâ—‡x‹!dhNýèÂQ©$š þ<Â/¾Þ–±iò–?3ÕBD‚Ѫ‡ Zz4âÕƒ€}º½½~Mÿ¿Æ/îÃí5Öõ>D`Þšt0$Z¾yz’ñ/|õ•=ÔhW“eé]‘í6å£Ê&k…ö %²7Fyš|¨I¯ð)>ê©3Ú‚–í'ý" LȨ})ïñJ6p1gÏ…üG&àØ4lrìú‘_–mÊ‹’€Lä—­÷’Ä’‹—œ½Û=  Ì‹HëË3‚(ÊškgMµhðÙþ+V4â¾á!G"Q'«vmƒâî`œS!´‰¥ÖP wĹ#ȵ€¹Ål— Å…ˆ`úByG†› mBex°(ÍB$Ô¡ÅÿJ4qw›˜¯‰%5„KêÀ,ˆ’8Ø*×L¨ÛeÐwHçÀ±z[¤Ã@¾ ËÅ#´6˜*§‡¼ÿ\Ê×¶ªGH(‘1ÌÐ5±ˆQOhÛ|v÷ö´À2Ll´^kúj0l1˜Ç!uq–‰S­iŠÓ?Œ"§,Ïþ~à…¢Gì`Y4žÑ~£ä.@m2&3¼¿KåŠ b2¢#ƒ–u¾€Ê‚¶©Z¶LL}ï)*ò8cde˜7P‘RøŠ<ˆÖ&ÅsT« hR³»\¼~ v!…7Y¾-ßèÚÌóænZåC/:¨ÝZè\=ZübÖ€X:«± µ¹¦aòÈ}P*;D¥rb°TžÁ•Ä8Jêâq»Bʾ¸Sf«òÈxÐ;hº¢Ò:HâÞ¯”h9¤âÂk2Xø]"Õ"Èfj–y!2eµ9‘ý¢v¶H‡Frj¸Ï)îe¶äVz¦¿x‚™°eýû'‰à™ :„:ƒ£,ˆ–pìYKŒl.kÞõ?õbêNÂŒ\»¬`æì”XJÞ>씘ٰœã :!ƒý™#ð~è‹5šû½õ]bÛ(?9ì´å6·†ä‰…(Þ”No›M±:ZB§êqYwÓ©--lUëVù\B­¨,º€ÀçfGKØxϪzàw‰„—$êªÈoñ…¯’}Ví C¨fwCF¹w¾îet{ÇF¶äºÆo³Ohgë8‹IŽßð(Ìå~Й¯¶Ú¥ÒÕ&;ÆËâè…|ÑàĤXѰEÛ»:Åí G#¡Â:D®bECW±R5bgœB‡Ï”]%Á9A–Ÿø’"˾¯6ðJÃ+­‡¢\ÞÉÛŽOÇtxœ‰]¹Äi ‚¤ˆVt®‚(àiî”›}ýÝ`Ù‘*û ~ ùMŒKšâÄÓ"7ÌË%(Gž »ò¬KPT0Ö\]¨@l㤪·ÿüÇÃò†´GwŪÿ¸Ó"á Ûþ¶6A?í¦E½!] MLiôù¡ªü i%9S¾T€ ï Ÿ¸•©®«r ˜t®Ö&?Q«¡­ž©®2O]ýD‰Z@µŽùö·m½+ËÊ7-5KžØY ³ HKUPûOóîÜS¼;}zw·´úûsQÏv5:y{u·üÆ9¤:º+aÚJÝH(bðO=¢ñG»‡SQU [X“ÚÔ +IôÃ(þ’ò¶¸Ä¢ÓË-”äj‘½MçиâT#ja¡ï³Oóè®ZSX%¡~OYb”"WrF˜£¥ÛätÚDÇÉoaÁä¿4E†% E€'Ä^»SOÐ’m$¶×{BOrk.ølb|qÿ͵LË×2ÖxSéñ'º˜˜¼ƒ2žè_ãõôæåúÉýßTw²/T£TÊz›4ÌÝä§‚‘ዉf†àßæÌB¥™ýæ3wè$Põ²Ø·F•Jb—WŽÇ° øŒéó£»m¹ª&a`2õÉD&£“3ijBh”÷øü^…ˆXóºû†Àò.ût•W&n­À6âél`Žù†EŠOl‡5 F¾éBò?ãš‘Qv;fü„ù€ ÚÌú¡C£¸Sš©?ýt|Êùµ•^Ò£»]B?ôŸ‹zD"[µpù Ò¹ž£IL @Ó˜æ ŒŠ|½²ieó~„Gµj{VRD¡ ¶W+I¿Vêèyµ‰×g‡Þ…ouUòËÿr2¯ ›:ôiòÇ®hÚ=Ã"•#ä0£õÓHs8‡Ùr0|+Œ±§LçÀ-ŽÊ|M¯6,ßGA' ïž·"ᇄôJD¼õ•ãˆ/¼o¥@"”HÓ´8–²Š”}cÅ#ò IIEdë Äñ 1DÑ/Þ³ @—>ÔÐÆgøäÒ§2€œLMfE“ÿeœVǘH¡ŒŽØÝ9M\›!ð>V Ír; MDáæ^K/¾Îø‡Þž“¤ÄÞìèŰ÷ç§VG©AmC¢P“t¥É]Zÿ¤ù¢ úÌ0ë#nô1’”„GG°˜$QžèðÛ2’¦¶˜™Ðy@4ÐËM”ƒwý‘Áißò+¢°åh •èÁ;ÿv²(r ÛÑ/0J+r9o$yZ¼[ÄÒœ‘I†ÆA*} ‹ÐE@н'ž¶0&"˜Žt%(Ž@A^oAÁÚÌžÞˆ—èݶlŸÒ´>ŸZê ©Z»;—Š@|hÒIþs÷ûë·ˆ9â­DÕ‰»OPìTPÍî\2è>¡ ·Ã”q$ ^ÀC³p <4ŸsúQ¹žýiéÀ¹GG?_ÏDöÐàv‰lÞÖ "3 O0 mvþù$»Ëë9™LªíJ ³ÌÍÙøãl†åP ‡DÉ_ZA,ø—‘=^çu{5fç}ØÄ[\§ðp`–¯ôÉ–e«N$BJ%ŽÓG†Ã¹$ái„Ne¥U )ª9P³­– y:üº©«S™(ƒwª ìB3¼ÎtŽhgµ3¤¶Hú]rT¯D“³ßÙ6¡#œ2<éìBØOÇ린ÜÌV»ù@u‘ÆiZÿ¤£;þ‹ë•I< WØp‡„®X§‰-bÔ;+1iVQD¸µµð„&ŽPºâÝF¶ÉÑâùi“¯K¼ÙxÒíkr:DMÁaº0èÕC!'¨Ô æHŒînh÷ý:›[øðvÎæžB6O8‡ëŒ®xXçqæ JE!8ŠRN,Å—3MaÞTÌ«ÏTú9…²¯9­fÀOˆ*^b˜”[3§€ª9%(IÝ¢9tt3L–ö ºÛ’°0 mF´4%n ¹ÊIñH_ñlUÝôP‘`Ä#&0#(,l½Ã’×;ðA®æxrùa ;p¤Bï‰ Š•Bµ€yÐ}ç9qV^mÒ«Ñ?|ñY´E“kÑÄ -΢éƒb¢ Ç¡ ëÎÇÑœ i‰ž®1¦Ot†C3øÔ<¤sÐØOÊ-Ò^4øœ<Žæ> Ì}Ë}å>†Ät•X÷Æ ÌóöL}5¯ÀÔ÷\刼ö)¡âíS¤Úí“[éöÉÍž«”ókÚKâ|ƒJ)陊'z±E¿¥M²R?qÈ=4è#—ò½Ê¶O(rµ{œOÉZu:ôÜ£‹ZˣܑʵšÁ-fíg)ëô}¦²šNHàS÷cjDò|jäý±+ê§´úÛ¤ž Ê jN©Pí§)¦ø¶*7Ê\I5æ¦zƒ3á˜l ”‡QSù‡h]l"¦I¬³PU|ø &BéatNclò9“QT´ì§É·I=” àÇ{£ìú×îHÚbØY¢™Ü‡H!(ќΒÍDhÆñPä_µe'Å\žóG“ïµØ3¥à—zb›o´þ¦dàCßWW4I‹³$j­$= ôgjIúrJFyÀšñ±b3ƒ´ `rà˜‹Äùåg'·“Ç'·ãÉñxòóñÍø(|jzð+X;eĬέ¤ì#&EÚtœ†ìÿgSemÙ®Šÿ÷(í¡ì ëøÓZ}­‰Ë•ŒŠ£¤öH4`Ok©§ÃÚE>»CzÏì*õnX;¼¶ç:›ŽŸÅ…L@”}¤ow_âNñ Ïáô¹¦iRæ–­'«ñf§HtÂy[´³·‚Ð’¡'!‰ Î[-øbW»"í›Åøën1 +†缑°ÔáÁaòg±°á½AdžzàúØ0°vÓ¿ÜaŸ»j·šgçt%úÿ‘ýçþ=;^5Õëì®zÀ]¥UÖ:@ÛTÞýëÄ ÍW¤êݶ•Pî8Háùæ‰O†ÐêuéŒba9Ò,Gð?`9b–çŠ Ó¨dAFGV<°ô˜a”0âBçø÷|Ǧ·Uv<}‚ds\Ý1ôÔŸ»Ìâs2~èZƒô¶PÉ´Í_àK@¡¿ ù·œHY–mÑ7"‡¼(aùÊËb¤œŒù÷Q8Ñ={1C±©Kšc-µŸU•ä·+™Õûíg- ’o¿8aþÖ¤ªÇ«ðT¾B`+2›«.ꀾVÎGl‘¿t·Íï°s;ÍÃCÂH3©ÓG}®20p¡Ñs{¡ŠN z 3ß[%T¨UùóËŸÏ.o¯n~›œ]¿¿8;µeðQ×Á"¸¸%á×ë«›[K€²kL< Šùu†Ñ²ƒ2°²+£Q×µÉÖy;£äfI0Üò¨ ×$K‘‘Iój…^Wø7Ñ$µˆÙò) (³'¶€“jë$P%9CFYÛCgõíÈ"ÄÜêÛ8>»x‘?ÁðÿÖ2î7ŒñÝ>ßõa|×ñ]ã;ë ·)g¹ùš/‡G½Kg¡ãt'L˜AJ-^å­a¸£Wóí02CdÁ‚Dü¶éâôÚûZªZ.qmÄãÐY8ÝAÅIVKI‚ebo·Ç œPÅlÄ*æ¾M©Ý6Vµ­W¯-Wê¶ÀU¯.òÙ]>%'…r]Fù4 õ÷?>vÂwRm#*:ÁrW¸”¶àIêH±Ay×’˜]mÍìÛ Ã,!2F±‘É™n\ ¿eÂO©q–2> ¾ Æh“Yè(ÙÁÅï4"ÔÉ$ ”íºœ†°l8Ã×E.‘â\ ‘ CÍò¼qƆqÝ‚ÀܯòÍ ‹È€ÁD þ6`~¾8¾ä‹íŽN¹¯Ãr5%¶^8Rë…Û3^¿ižZd?ß|`Ó R;sŠvÊc¨ïù„Øcê|š8YëûõÆC•¨ú”6®Pý3ä(€RƒKÑ}Bš§ jâ˜.­Ó­>Öi ¡Gg£ñ•BEº—Zè´P²^¡µ‘Å´»È nMù EâRPÚèÂåÚ[¯¹ÏŒå3~ 2o*bñEÚt¬êÀRq $àu)m¼’ãâ•DûUcƒ± ðWF^÷ªr—j7ï(øn_Dý`¨¾òX‹Œ´uÍ'´¹k›&Þku jŸ²Ä¹d6*o™ÂC: ì¨Üb+of—H0mG”¨ ‘Á£*5nsj†mŽ¡8$G¿ÌR ÎG:ÇH·È „uQœ_g§—ãŒó4†Á8)!#ߎŠb‘Æec(–œðdÒ£2RÝ'“Š,”HÉ$ínšÏ#–DL•a‹Ui¡äOïO(œ:K4©t‰,©¶1¥…Ò0U JkXŸÒ4°NŒ ™–~‘L#|Ä´ÍIÀ° ¿KdX:¦ûBÖ‡Mö!;%üuHgÄyá­-ÒP¨d°ÜÝt–Kµ¨,™˜êHÄ„PÞºFciñ%³‚ñÑÙª&?Zoмš­ç l:¥»°()Ò¡´M[xÚ¨Ž0‚±m§÷²&LNšP“`$6•Cè ›‰Óâ°ök¦DtØBd..øÕV³j•Ž©\<¥lG:… Ò½í¨!õ_‰o1 ˆ.üTíjnD4«G ù!"D›EUVi BR‹²hV@Zªç´õ³ž³‹uCc}€q];ò©²ué¸ÒdºÕ–”c˜±àÊÕ¤ßVƒ¯Gf‰§dG>¥ £,ú×Úù⛦µ²ªDÊÿ¡Ç«çÅ1dƒø–Løªí)îœhªÌ¿±Åù‹Ù;6:÷¨¬ûãÌ™|SëhrðgÔµ"Lüç7'Ú‘qYW|ßœvz'V²938Có É1Z^O˶Îë'ç@íì±…>€¯ ý‚Ï®õ˜3\†Ò¢´Jç8Í-b¦³ø!šõ! 5aþˆ‘z@ÝùÃ)?lóOÙ| à œ¼(”Áá‹ÖTh„νû›"  M5’t݆Ë_V-ãã+~A”þšÔzE꼕W£Ú.Š£ßóéý’¤ù]ejfί«ü»Ãéj®²Ù©‰Û×’‰#RJiáì Y¤ üKZëªZ¡±Ç>v%H¯d—+Û¦û%lJò{~Ÿ»³ò©””ûÜqh¥ÉÔ³•¯Å>u#»lz‚ÿVœâc\6X„|µU]¼šåXºùæè÷iÕôÆ6…ÀÁ  ‰DÞÍfâÍÐüø²~/6_¡ '¿W)q»¨E:çŽ ×>‚bèt¨P³;Sý‘i2 qQ¥âéBb0Óìï1¡ q/¢¤®h7î…[  *ÏÙ‰ª¥ qH]$b¥æ!Q²0‘‘«„†tV÷Úp¢v Ú¨”ÐG¿s¬ÃC }¹ø¾Ý='\^ûw—È‹ĽûïeÝrc(~µ>¯Á¿¡If&nåšÕ$Š€&®L<¿9¶Z£‘ié ¶€ÂÉsy£ àñ/ko(†°zW› >©-º(†_]’ ztÓË]Ñ% ²Þ*J#Šäp9õä!ÛŒí[åÇáÍÑï»M™ìœˆEþiÕ ‚~ܨý¶H¥h}úñ ’R”šf!Ôò“@›xàzøGÀ‹-üriÝZ3ƒ 7Fiót[‡¼W±ÍãØ4´A¥6Bè³ÕY›¸K—…ÿùš¢ƒP %¬E Ì] é^Å–`i÷ÅqZ`p_ìé¸/v{Ó¿€eÉ…ä6ИUaXpÀ®0 ö»ý`¿ë‡ý®vš©aä{Ã¥Ôµ9tÈ“¬“€¢Yá^­+àÀF›Ä®v {–ŠV+3CrU+Ð;;dL™„+ÁL#Fé sÍ4ò$»J.‘b£´¡x¹kJ"Íh‹AÙ®†õÌ]¿ælùíÉYBÜ$TÜ¥´ùKŽ[q;GGì°¢ìtd9жþ¤òBß”[?fʲëí,¡I •- Rݦ€V9È%ƒQ;n®OØÿ¿²ÈT?šYʇl¨lXê‚4Ò­óM³0ÞÆqq¯jvµ5ØEÉö²äˆÍlX°ßj6eÞI°1Š:H#›8ÁƨOõ¼$ ÈlXöE©!´§AeS„᢫ݦ4hKÙ€l{ZC±¨Mé¶!ëZŸÊR{ór`c±ª·Ë×…ƒÊš%i02—OÏà€×Èäé ú§“˜d_0@lšRð *iÅ9{õÓ¿5ß`HV¹«#EèYûDÂfä Yöu–É7,…žYJ×à«)Ç…FuþΉÓY7ð¥ƒ5°©Œ$JµjÃdtŒ‹îD7 .ÿ,Äkû©Ž‡ô:»)èÄèôßÊ1:-Yõkœœ¬¦o޾æm±ZUýAÈiÿ´šEn ÞökQ€rÚN|ç]&™ŒÊv$L~‚ŸÙy›é'‹àðälÇę˒0as$¨ {'*7@Bý;ˆ…°šLW ™Ð·ÚÛ˜qb3G:S7¯Wã¾è¿9S¿$þZ<ÍVUþ5ÅweœVaá<Ïc¥WOÀ Ÿ@)™¯aÚkZ¥½/ w˜4cRŽ.¬éûv™©ÈDû`öÊD±+šŽ:¨ì=ꢃ(õUê% uM«@%åÑš2÷2©fMë…šƒù'F¬ó©EçdX¼„äèk9M T£é”ã×;äÖdBɪ2 ~S4%êsu1§"JªPÖˆ³ »€íóþ'ÎÉÆ”3ç¦zØpÌã~ÈÇtv¬…ÒàªB¼0èî°iÉGÚWXˆfí^·vRDððûîN’Ìe…¹ÂÛVs£Ì©Yßþ»¿a|2ƒƒ“u³˜%6¶ìÖz‰Yåëé<Ÿä«2ï!dáœ1¢ %Þ&Ö>K›×Ùn;§ @m(6Ä‘g‹Ý†‘Êa³ºìMAg:è(ÃCGi ãrkX9D´°>Ž: ƒ`›X>‰š-Þã ŠºZá0ìÂ#SƒÃåáЂ¼mÆ(±®WM‡<½¯„÷©d¤Ä½´µãe¦„_¬ØgÞn ÓûÜÀÜZQ9A‚oܨ’,T¥É¦jýõk_1ÀfÄl¨ñ)Ì7Å¿!·éïó^ëÕ‘ÙV Xý\¡m…ÿö[nvý´X•÷¸×8ƒìÛjÿ°Xî2æ8n_Ù:ä¦0s{ý îMÈDPÚÎÓž%Ýáäø¸"A…éY˜ÅM±£èãÔ¾0f~Èn*]¯ð³å‘{FÅìVÁN˾pHÝ,wx¾È§„É[ë€\Éev#¯Õ¯ É‘ ÞKÑ¿­â~ÃÔ°(ÚÙå Ue´§¢þöu™QpªK·Hß²˜w/%æ]\Ì;³8rH4ϵ9â_fNÿˆ§‰B¶ØŸO°Ìå«ñ5¸¯ÍòYhêB#a€ãbSäõ„Ž6ŠeÇ‘°Ê}ËÔªŽø÷H—äß¶!›nå\e.òæŽTøYn=dF2'›æU)ÎM=[еţ˜“Ü´… 4³$SqMÎ?h=Vïô ©¥e†AQSñ-R-˜Œ(Ç̃”¨ ´Z5Z¬šÛ­UÍ­–R£®'ð,ee×üZ†"¼ÞtcAç]ª²“T™ פþPá̈—î :ú¤Ãß' â3)Z-ÃGR6ÙÔú LãC¦ ‘‚mž † K<î•Íh] q1ϦO”}´‚= »(œÌvM[­cƒ£ ³Ïœ.‡ò•j-æûˆyIÜà NÇ!}BéÙÞÓý[>;\›A#a0~Þ<|O‹‰ð¤âì´C¼×ÊTk{@¹ú#º¬Úd3}Q"¢R;×3™eYª7Q õ`öŠþy3ÿFØkxüf†˹V¿YB1Y €Ofq/F¬¿MhN0ŒºØH¾È¥—ýy:üô²©ËTù‹«“ã‹OWãÛÉ/Ç7—ç—AÆ’Ú®Iµ|Õ”Œ%µ\c,`5EŸ,ñ™+ü!ªñ”2­ Èoƒ¤É£Æz!r¡3méý]ë‘’u×Zr?sÞ.âƒr> ¢3™ZÀJèi–É`še' f‚ÂÑW,„RÎ&;4nMÖä€\*g#i–fLgIëjS¶UŠ¥NrK–d{g§AÁÀ––_r¬ÏL¨o¡ÒÉø:‘E0½‚Ø:(Ä>DGSU'ºöô´e¤¹Ûãû!z~9ߥĿÊ22.°â´žt÷Ë+bÙ8*lê"KÔ¡;lÙE#%I8Šä¦Ç‰4ªzXLšÐ4ç7´‘‡¿·)Ë””±4#4¥gœBO=(ŲO(ÌNA†‰-ìÞœ·‚Øgª%áߪ 4ip-°[g1n•FÈó9š“%„Ñã“JSÙZìJo%ýä°º |9×ëä£ÕýÀªrï-%÷fý¸·­ÁGøóg‰.(»j`>ÛpåG5\Yñ WÉÐ@ó#¨aÆðˆ:ž·GÄ#wƒø8;Ú÷Eœx&i%´}jï*9È©Ÿ”|¦êoÃ¥ƒ…st«ÚäÖ úë }$Œ Äϟݬó YçÌwŸf[Üìf'6ëÉŹšÔ–óζœÇÚroËS¿-·u5|FÐÑ’n –$W¬$6Gë|F‘a{%zD,N%*Yê7º”›qvëP“ û9Ÿ]c6HDýP¯4™á.#Œ(—²Á#nf¥¡ùLsûŒ™æ‚ï5MkhU†A‘f3ôws¾á—|8ZŽI‰ã+QòôXñvš^´Ö°×ô[•Zó$ëB£§(щpôHÀ’úûÀ;ñ\[‡– <óÕ,õ0wXâÑ>3|zk‘¨tÙu|Ö9OˆNÞ€å×bå×ÂCùµ0(¿šÐõ²hå¨ò3¤ÓfŽÇ Þuã5dñÇ®¬ù¾ýàˆIÂqD‡qGþæÙ%ž»ÝX9‚¢üc»èºUßÏÐÒWÆÆRþ1"õ©ZßO”Eà£]Ô …þ†åóÂÒçÿî¡ßuÚ”Ýè¨kCP*@i,Ú¦rh*#ð®£ì”Ġô±…õ¶®îapÕ‰`]j¬ä†`%#«3âàþgœòh¼ÝŽy> ‰ÒæËĵ(=y˜´ &vw"åÆgðùEŒÒCd?ÂpÈDìÜ5D‚ÇÓú­Tr$?Ut¤‹jkYWÃ^û$ÞŸ½.ªÙ%Ø·w“¦Ý-ûÞ;`É—ü 2§–â s":‹—c+X”ñ¡%ÑËûz=äÙ4 Ó¼%Ùt¯JQ‹èg“²©äʘLÓÖ9¬Ü“¯‘‡ìDIÈ©,Ã.PN«‡ ÞMp`•.¡y?#5¾.¨š’"Ñ­óG §4ÙðyÀê½,ž¹uŽUidq±T>ññßɼôGÊàá2±FM™Œ€Éˆ˜|>þuòáüâl2>ÿ¿g“W7“ÓóPd¹Þ­'¢>ù5Üï¼^˜„™]¹Ïœ•}5íZg­‹5y‚˜;’Ф"OýWú7;ʱ~Ÿ¾§µœ~¡@ –•"MG¨â¿œŠÌInŽ?g¨Šó×0š7T¸åÍ ¦)Úgnᘉ·‹ûL‰JÀ|ÓÀÒƒc¹ÿ“é vä@îˆsõ‡ã#?ì`²È$¦iFDŽýÐt¹YÔyÓÖ»Y ]ýZ!%WÓó 5ã¨!¹ƒ•Ts¶Ö*h,p"& œÅË • ÐXªyã`MÙ….„e]+@ÍŒwâä!(×±xX0Údâ\¼«É(E¬&CÞß?  QÍ|ŽWx[õ™3È(rŒ ²Î¿–zÊ2Ð0¡†#Ê0aˆ­×æ½LÅÊš|&ÚŒ¾LÇ5ìä’:\sÂÌ-¸ŸßÐ!&ŽQLSbªz™oÊ?‡-±ºéiv¾× v–i ;µ·AšÍz›‚Тsaº‡“öD‚.ÐãÏ}'­JVÆ÷\ä‘ËHqÁ§`¤çgŸÏn>žM>¹¸=¿†µþäâ|r{üq|Ä7ŠÉ&ù’*ÉÖ@ýDo]´ù@·¹×¶mnµÍ­'9êNíŸÿø/6h06.Ýáá&ƒ%ªÈ›‚NÂèD¦Ø q:‘ >íuž~Åä‚›XçQœøÕ_QZ ´yî‘9²ðÕHbÖhZ=Åj'q÷©-*Ë“ñµyjú}è9$Â’t?Ó/rÙ·)jZÏUÉuUµ÷KÒ¬ðúë¦mæÅ£×;dâKLYØÎ1ËÀ>:°Š»D‚T5Vù hé9è‘;Ú<ø¯Sù_¾ÜB›æà|= VñÅ’½jèFÞav¢À÷ÞHK•ÛJGƒób‘ÃìÐÔeÃvvU=Dë§yIƒÞÈï#{®<äþX[Ñÿí¯vp;ÉómùΞ€$.ü-OgA®õ¶ïoE—8¬ÿúv\-Zøçöns_ýö^þÐ9"“PÅáŒoqþ+6ÜG¿¢S¢>áÕõø5ŸýpÓÏfïAãüXoU¼_}õ­ØµE± «XX“AÞ¶vY¾±>#' o0êWÇg×ÚåÂ{ܶLv­ñÕÕ=0ñA#†§]H}Z³ÉEß( ðf€ŒÌþ®ïž2ÆôgùìOåxë•jRH¸öÐ 6^¤í¬¦kAZᢛàV»ÙͶ¸ÿáx늟ÎÄOçø©Uê}]Îá]Ñ÷§®<øíËkvS|ª7(Ö¡³¥KŽ1¦ß,ÿ„B·­ÞÁžoX¬GéVyªïÚ“íç»ì ²ÈMóþô¶‚_.qµ‹fÿ¸§À§6˜¼|´Já Õ&Ói¨¨ëÛ§âA»!È)Ðõ+æóÃ9y°¿Ž"n6ùÔò6 ±G VùVYv+<–ŒFƒR)¯Åoçgq”A4ˆ8¼ Dfg8~9E;þÈ^ÝÿùÃûú¤K4ŒKù©\òŠ"°_T•-lHxó‰ÐÆ;õ­2ü1€ 0ßdî‹Ñ/ØÖª¯$D _мÔ"à7 æ` Lén ’fíŽéZÏÓ*†”ÌЯ•Zö:›Ò<Í>é<áÉÜJÓ“WXòœ»¡èz-­¾-[õ÷;ó÷böC8Í Dò51Õk Ú]«X¿Ž.‘jw3-a^v ÍZôó*ß\6]0ÉGâ^(ý1š&ĈÞS &·_O«9m%£ƒÒ²-XÜošP:ºƒÅ>¥ß~B#¿;ÖùfY¤ã´Éch™ÀÇL‰èɦ)—ÄИv5¨óAk³@«$÷v9u» Ñm-×Ågx(„ËÙ  œ]ô4³ëeL.½ä sƒÀ!N'’x[Heùú×Y™¶¦z‰?èëj¢„œ¸ÎÄ©]dV¾ú@0ÍŽjÊlD•8¡#8úø(²¤©2F r\…Iëx~“õ‚6 ÿ%qFHi@XyÁÞ†ì?ë)-Lù&ž£Û:ï;”+ð_Ã’Z€¬LƒHÖ8õ’ ×±3¤ˆbH’—«%6–®/Y•µúó‚êK¯×’‹˜A1j“o7gph¬LkK*ý‡«1%¹à‚]íb6°»„¡±FQ9”'¤Îß(S/Ââ}¾¾ýpþí¾Pu‰¨«o½0 Ù·Q«oÓ@Ò)ÿ=xŽ·ƒ¾*øE¬QÒ{<Á‹ÿµÁŸÍÞoæ+ëRð R’êžtR³ßÑLâYÌ"á,Æ®çu¸£ %yî’êây È:©ºÂ8ØãÈ’FÞz¶7Ðõ,çzfÁü|G DI étMVî‹6R¶¶MmmG UÌŒ7w5¹È—‰UiŠÙ®6Ž]÷«‹Wx¨2ŠÜ«NÆ)ŠN%¡§ êæ¡lgwÏú†÷b«f¥…Ç©æë‰ô~ütÎùüSŽ«âUêˆÊYIè`ª)A}zuñO¥ŒòÀ›×ऊ™søƒ6OÔË{ y2ƒ™c'@Žý9Ì̹|uÑ 5—Eb `"Z!—5µðÉ;vZ ”ͬBgË'ÙÍÙø–Ü.Û %ÒÃFî/p>¸‡ê+cPE©Ô “PÛ¼½#¨¤¡³Z~ i^.ØƯÞ(»‹X #D #usÅö-\@¢¾€@µž¶­Öw‚i×ëb­àþóÆ3Dï\ b| W‘jЇþ~;CÆ-?îLRÜ’tÕ&V¤«VÅ#^3”mv}’™BZu“MÙ™}<åÍÚ¨]Ÿm¿yãT¿Í§Uò¾:Jlªåf[·$˜®Ot»rÉ$­WB“íÒ†Ñ`A a'©uÆ-Йָ©ÛY[¯ðÖ«Žã.¶0™µbœ4[ pGHc§?¯ðºN¿ƒÖFëþ‡³íMÑó¸Jiu;ýfi·ôwTV³Í7“9¬ )[_™ ¹\*ëÆêúø2›ÃÊSnœpo¯°À§lqlŽM=Û«_&ŽUSyXeËïÀ׳D”x¦t@óö2ÀïQ‹R¤*°0uöÃþs1õƧ9ææsÙ骼Æë+cê¥ò{)Ñ=쥓ó؉oðT°Ý˜HñCsO¸)&Ö …”Iš{ yûùæÕ'í£-¨¿n~ø5yË@`¶ªË]‹Ñd||rЇz6o/Yëb"‡z¥dJ¬ÉÐ<^«@Ä–÷NóŠ<¸^È›ž3ö{4à(¶Q·ýÎKy”Õâæìñ ‘K"H$ÀŸ*Å+ì¢O8ñC½/VOÏz·ýF)ë9›gju¾&á×a:†”AWÖÓŸñ¯ô}@;©s˜ð/ñMå“Î÷Yùv›²ÆFTÄà ‡`Šx4áÌÍ/v¼àŽ(y¼Ïùåâ$DãGîãΜëš_‰r£pÚíð8Á{nPÙzåúTJªN·ÎïøîSÑÆù¯Ž8ß3OD–ï›'S‰ŽO´›ùåÑœÌnú†d"Ôʰªg%gbuËþ°ë+3 蘼^ B2ÁaeXæuWãìxÌ—¸Ž¨éjWlë²ÿ‹Ða:Ç•f’u¼ö8¿m^»|z¥ÛÔ œß…„2 ¼a/êˆÐaÀ ª‡>†J(ÂÅÂ‡È àd#öT&üÐÁ˜L_i°Šãx]ñP= 6Nmä{ùnýÏ$3£s#F¹MùÊm|ü—ÛÈð?¿G¿Lºùú-þú á!‰‹ãB& î ÈÙöBÚ N/”>„M‚äMTà†-Ùr%‰­6NzMº1zœ®¾G&ú´OÛ¡ûtF¶Îqëyƒ¦u·ìˆ‹…™‹H‹E–Ëì WÖ­¤Q[|O׋x”ðØ»éï ¡~®Š¹™¿…†EOÕk¾{GÛv;Nì‚B*žÝµívž}ûæ_2Ãg*awh«C¾ë?c‰˜w+cß¼— »eÌ… ¢DE€a~›=S5–n¿íÝÉm½=Ûö«½ï­v]¢‹´ø”«—©M¡SZ›mƒYÏÐÏÜcì nGQĵv·1À; 4øM–Tƒ÷XTãëÛLç—¾ðízHêvŠÛ€þÚº®Ù ÿzvJR‡Bøsší0Uªm  ìÀUv…!±)þì9 ‰PMn »Šõnš§hù:ÇÊI×ñ±Xö¹š–dòk‚´ІTþÌæ*ü,×QöñžÐSú›|2°{w(D §Ù§x{Cže©)ruƒ3>vD%4ÓÑøßô&BºÝ Znøî«Iiã&ÞÂMؾñ–ÂÐÀ<Þ?åº$J>'â'-òÇ`C ãrß³¨ó¥·É…Ru; ¶n¡u+"ÑçE_À{ˆšWz€ß[[ï¬5±yÚÌèm×»Ñ É”L“’¯¦è%0“߸Úaþ]]m0ÌzÝ4’{kçÕŒ<1¡Sz8 kP.æÔˆÂY¤™Õå–ãCE:ñhu€#¡Z—ÎR0QRÍÍtÃ[®E%´ÓóY ª'xpæƒ: ¨(r&d¡H‘IiÃBm2G*[´Å+Ïæn‰M°kï`­û³˜é1Bädñ²êÄDý`<þdѹªÂ})×Ntn6<õÐ  …ëÓ¿)ÚÝó1Ñ‘U°¼ô8¾/éV}±[Á†¶.Tt°˜2 ´à™¼.`H±$r;šŽ+$÷ÀY}Ïl˜<_¤ãŒÐ{@mŠ>¤c¢ÛêS{º= †ô>T‹¢*Ñ%BÝä«§¶œ5 WÂÝäP  §"SOú†`nˉ쀇”8“‡ó ˆ<¾>w]&ø²9MœK銓 •HFž›Dœ¥Ðäu!ŠtHUƒÑVù´´´‰¥§Œ3¤ê\‘ö‚hÓ&v³3€Õ!2à8¹Í{ÎLï¨óIXb%|`î&¡¥ëky²u5iÜø¦ È„¢¦}ĵ91EŒ+ÝÄ1lû™êÄoÑX@1µ 奈–ðU=䡯€Ê!éCx¢ÑCC\èˆ-¶vÿµZ'µÔä÷¡¼6TƒwM›ÐŒ6• ‰Ò;¡pnªžDLƒ)@³iúaRà åd}B•Þ»ÝE,Т.ÔštΦŠå6_Ï7‰ºbO v„¨ 6‘žéé&UoD¦ƒ&ƒ:Pçt B,œ?¥¨ëªÞÂ|9­æCpb´’“Ûë i®æ=Ò¤BKëØòÀþÕ;sÙ¬¦Ð,; |Ĭ±ÏÑÌSË»€Ñб6ÏÒÒQð²¨æÓôšEÈÝŠØ=¸?Õét˜wE¾jï"±ù:pÆè] EÒOD§‚ô%@U¾Â†Aº”.<å'¬˜ÄØÒ6G{y¾þÜ_¤X¬CØ¿å¾Ëë9¾ªU­8oж6©¤ÁÖCÛѰŸ¤„zóÅ4Ø` ¡÷¢ýÃ3ehî5,ñ6›—µ¦ßZ§ƒÖ‚fçvA»½½æEïÝ .0Ÿ×)RXV^¨óí1P$u¤QO(ªKÚäØ[È!ëĬ”"Nœ.Wÿ’ÚÕ!¥jåu »ø—äN^—³º’I"¥«»è ¼€¢äg¤“™2©ó#>×##îÖ3+½Œø]L„6î¢Ä þq&¸Ç—r/3d’ÂÝW&ëRõc¶Þæ&(åÛ¯eZ«„¤Éê@výÓybKî¹$1Ù‹ Ǭ±)_¡OçèûêEÒצcò¤ñ4T.Õ§‚~ªéÇV]V8ÉŸðÐ?Jlv²» Ñ À««ÁAo‘(˜Øà¦â )D> s:PŒuþ”"ù&Bj*\ÆEúQ ›ïéCù¤áßWÆ¡êDŒ´ú¸?mÈËú[l–å¦H€ìÓºPunD 9cš} ¥Lv:@öMÒ¤yƒ~´u¾M[âÔP7¿ %PÝUâbÕ4«¯ÅS¾™'>Ôê/bu!_üT<oæÖ¥DìÄFõ ˆM9¾HmÅ=µ% È€ÒdòºEÚØ{jÚb½Ï}Yw bHÓ•(÷º/~^}^}o?¯Ž`á÷Õƒâë|£o¶ª6‰‡‚Ý%,`!MJ¦*¶ÎJ8x¸oîËí 0CcÃÔ.ÍÏåà´ú/’t9ŸÎ@Ð90~Éiz2JúúBLï׆hÒ¾²‡bzWUCG,.•„Ó»PHn„‡|Õ»í¶òE,¦XúôSy±ø6“|†‘Ogmï#B§äX9“_óÛO×3Î$Óôã_ƶ}†à«UŒÙ¶œ,è!ÂPZèLžõ8`à1ÿGÉ€¿½V1—TÜŠ¤9ÈM)h#ë"µ€ZÁp«“™Pÿ{íÓ?ÓºôÏ®ýSw(´Ð>ð£Ÿò’þ>/a›ÏïY(&Fùƒ&}〘ÒÍ >ØAocÅV—j3ôà?¡œÙIévô{$ËN˜,;3dMïïÕ‡‘Ç÷~­²¿ˆÒ%Šü±šf§š¢ Û»bW$ò©cˆ(¿ Ì¿c¦‹ãüuÒàŠv&EÀk†fýd¬DÞ'DW›8Þw ;_Y£gÄ‹¬wä‰aÛ ‰ÍUª›¤’;ôXSôs¿€[ +¿ÞYbç À6DsT]^nlÅÈ’‚eìJoßÏ(ÉÑ”§˜Íá”dãV‚u÷ì1HPç½³Ë'Ì¡…€ºMYÂêÐ8Ö°èfSË“ò›åÅQ2·2g–Y<›Gê2³YÓeF0›ZžTl8 üXjóƒì(Àvÿ¥ý¾ë¼Ë+‘Í’ ]y¨«VÜœ(3ô0c3Ø0Ô‘¹øP^2ñ|>3i¸> 2¦lÑ‚¢˜O¯€˜ßÈ=n ZË]Ú‚!ç À±‘¿ËfØ€’iúð•ãu\veëZ‚ôÙHYP,2•ÓªORôAŠ ìÒå<‹æõ˜ÅЖ«9?зLDª:ܱÈ,ûùœ ˜úeé=ª¼Ï:k‹¶äéâ¥Yô—ë—¬¼<ëöpË_ä^aùLÑW'wx³• ¶ã^Xaæ$לWÊÀXÇ©ÑÆkÇ\Ò\>ž/AzTÍt¡ä|zÄbõoÜW˾Ÿ*twAúµÿ04Í/÷—ïîû]=´ã»v·;îû±RWTGBax^=$£øKE¥Ê`CâU„ Hèz}?‡ØQ,Ûm{XÔ`!’³Å‰@µbOèŠã—«oa…xZÛ¨\ù"ëÍ‘…ÿ¿‚À&oÆ£1£ºiý¾™-8¯ QçŒ?Ó9BFƒ,×ífÓ pfYëØ&CÇ‘òú…ÊørzDa–ŸµlŽ@15'ti&T° 3£JÐg ¦ËÕSÚŽ-—‡p QÈvLGbcjtšÚn« …>癯»±”°ƒ2<…0hlš$^< ]/9Ç{¹< -ŒBŧCœI;CSB“üfK2BÍ )/hh2ðZ) f˜¨ n– ø¥»´ßmH‚RŠè:Åd¹)¥Dá ) p´L‚\œîvª™«»Zâ«P?-ÇHgªŸÝMÅ•è  G!tün¿ÞéÈ„Õ7Žŵ‡° Ò˜5÷÷Ÿ.Qµm2T¦á˜ Õ3d¤˜²QI²5AþЊֽÓ¨¦1uåWRnÚ¢03¥¼WΫ ßcl²ul§½D;› úŽ©Pº7âÒh§ÝF>1xPY©øHŸNQé|üz“(¡í®_Ö»"&êSQBÔëÐ% ›qªRJXp9|2ƒ8ÑBÑjpŠS;‡ —)ÆÑÀM›, ½D/„·i‡æPã,ª^¦U‹–è¸@A™Â05‹$Ê#(9),$6Îf6P“ÜŠJmZõn³èM7‹$—3F–`£¤ªÔ[‰*$?—r–h’^‚”ò1Y67åñ>)„p£0‘ž+µ Ñfc²@ŽC´D@È)ΞCD ¾rï ÂW¯§S s+s6‹Oˆ‚¢ÄÌ~PœàS»n…Åú”´4ÊäUë/X 2aWïóóqˆµÐÙÔøÌ²ûǼw¨(“ÀbT_/®« 7µ(5ÚÉG莣BA¸nÄÈÈr”vß:vq§î“rÄêoõI;‹RäL è·Ìõ E˜PŸ­¼d\9¸íý°]~Æ ®Þ”l=ñxLÍC R’ I­3†—4< zís²r‘MO“»/»úcAûŽdÀ¤|ˆ«NµŒ/éJ@’àÜ)qÁt¸d*|]6ž5»ÌÌ,³³Êë̬rÞŒ27›ÌÏ$¯s3Ióp•ºX¯êbN^Ž– fšÖýíÍÚw]©uª¼»…æöêòâüuŽ-L›ÕC_ÌÖËÀ±5h9ÂìQ È•OÈK'ãåñëÒ‰øœIxzž›|_§'ß&ûq]NÄa9"B%²‘®_çûWª!9ª„¾²C=LmÑÈç#±Z+ 6å­$P\vÒ=eóOض`ùXkO€ÏÞ–W¼cÖÏ/šŒ„Øç¬èúëa4df"s~éE·àóÛZû,‘"¬ê¤Î@™öp¹Úµ0ÇÕ±,„HB´T"8Š®4.Y1úQ%gW!–#EN¯à¼j‹’~2Är,p?)ÖwsX”t’!–c;Éê·ËR§v,ê´<¤Ç@É‚NK?ÕÄÄÀcðÇã©mž²ê ëV§Xý–ï «_µ/îéƒ 1‘V‘ȳª94f@äŠH{8ÊÕ¦UZ„æ"õ!gçÊßIžW€%¬œÔŽZ¨Ô cú»0æüb]“?sJåÂÔXº„­oì¤cwDxþá&FóÐÓLŽ~– 9vTDm·)ØN"0JÈÚWü†³7\izuhÖAëʦ,œ2ÁÔ÷›Mc†“Z„û‚Õ{²:»¿‘·îS‚ÏœoÅ]=•Á>’¨72T·ç_Õœú†`¹CǮĸ„…S€ V_F«xHžíÞÌLQ2(èÝäƒ!‚G„ d”Œ$!“Ûl“róÕ±ßLq¡\ä)±xBŒ"è6¬Ïþ0+‹J’†!^í¡C{§ÝØ!™>eŽKßòæp>u¯›€‰$\ëN)ŸDÍ® 7Ï0¡Ä´5)I~·LtÁ‹õ2ÏÃ)æMzßÎÞ†{õr,:!{áõixü†ŠNŽkMí^¬œ ÇŒI`1úx •d|**|H¡Ñ‡&d°õ¶:~EÈ»ÇE•‹tTð3õêÇÕ¸Ø4£f‰µZ™q3'=íþvq_Éðò“Ô3Zn下ԳŠÝËà!àMh7&ͬEK„(šS@a,Xò#!1âS]åY\_RcdÊ4 í2Ó'œVb€Ú›‚éhÅŒœµ¿Ó…ædb’‚>ÍßàMá Š 3æ|µ6÷v ¨g#GÀ„WÞÎï´«ó+." D²Óûíúü¶`šþT·ùæ@X!$ …¿Ã?`/\#+qíûpÙlÀ/#Ü,k»£¿ìþƒÄ•ØÔãTpœ’Ìäèñ0ÿÐà×ꃀé*vdÌr°‚Ø­< ·“WAõ®•Ìqæó(YÈ8ÂÄ._TÄ¢òm¿y»™Â"‘ž9¹Ç«^& Í·p5ï¹ú¥ÝÞÉå s¹Üõ«Ç¶Ë„P QZ¥K‡…¼¨c±WÛïì+ˈ{YÇA,šºu³®–ÏÕ¾Å| *êŸÒsB$×$ ݧ—?­ÕÔS;=¨4§B­H*!­F¥9E_Žâ>½94â:¹:•ú~QX§ñ_Imÿò4ý ´¨0Ýn×蕘æÉÏkÕ!j9Ô,Ò¬¢U½?€ wB›Q*M¢¹åYW{1‹—+ϾºÐB¤å <̦N30£Í Ðt]LS¿R8Õ‡´gCb©D÷Zã~¬ÞU{ñßã6*°1gQð9>µkQõ¡uÊÅÐU×fùÆ”)1°&ˆQG~~~®×)Òd3ÌG'B$uʼŠÿ¿?l(áz]åÜìÚø>‡oÌy^›K3K.¤„ˆÈ½Å*ªåf߀äp–‘“àéì‡Ë9­Lß~ ˜A –ôá6 $Ü´È#gR„]æà;D^䨛’’¢3ÛÉ…‹q¬d*æôѺr{»©÷íîùÚöçòØüú®i·Ë~(*žLÊ ‰=ŠFòo-9«®œw‚´ÇøÐ7#gÐË»k@–T£†ÂVŸuÛàcê°áÓ±~jZ¢wÞ@ô¯wëCé˜Ãb-*EUåÒ.¯/àS òZáåÑcÒLÙƒf9Y"ö~zxûU¦½lPnN‡n±Ýs×fX@Çˉ0³ow·Õ·\ŸßV·ÚíÍ•ŒQ´iÅ÷÷êÛíÕëùDs½ª‡ò(ý«äøòú4ʆ¡Õ0Ĉ âöå‹Ü(‡ù>-Á¹ìJæ:!²‹Ý¤öÊm£JsÃÜsÖ*uX<’ jÅŠ¥hxÎ(÷`Ž€È«îâŸZ9Š©qmŽW@¢Á=xÕÃbäþânNqÈB»X7Ëc¦ÏÁ-õ@z\gˆ¢(È‹¿¬­¤)Fñ,ÿ aŠ6p8Ês¸à4¾”iÚÊ2 f9ZËX àßR¾C¥8šåí –bÄ%â˜Í¢ÓnÆpxxÛœë¢cïÍ F§¹›R–R•Rlîw uW}¾¿û€¦>ÆUêâų61-kùIÙõO¸paŒºº;ýEî‹?~~aYËX¾`ÂtÌ !ÐF"íñÏñY¥e3híwõ¶h¦--$BÅxáˆ_üíÈgÖ1‹¥ì¸z–_V™û阡dŽÇtÄÊ¿þFÌ3K5wÍešÖNA–N6K3¼:3¢ô*-Æhœ†¦Þ/jÚf™1`Ì‹±W»o`ú³‡;`¢“Å{‰|Õæ»´#/äJÐ Y%Gl­¨Ò¢‘,™MDÐ ÉØׯÿ åZà" …gh3nG+|q?ÎÉ `l†0E9š:“c ‘«À•žLü¹,¯~åVíÅò3n>P> ÐA ç2: %¬Š0ƒôv°Ö{ áï°i~cÙ©T«VþQ—ëìw»e½Êì»x(§W§Ës9P+ž¿z<ô-~ •ËÕ–•ʸÙõ™½u ±Ôd"¾ãò~¿¸=߉a±¢ÛÏ?Lµ›Äò¿ˆ(Fú4¥,$©’Œâ®_åü‹D ”¤ú,múÑœêaÛLçÅ4%‹ä>_%úÁ#c{¥f,!‹pMeâQËØu30JŒØvk^2íå´D¹OÇ̈IAŽ’JÆÂæÂ‡yW˜f°*¹Ã#1?ïVŒê Ñ•˜)¸l¡1F.þÈ C%æçãΑ±¼Œ¯ŸEkús…„/[ìeìÐ)Âr"è£4Aw‘ª”Ó]rq9£âÙˆ)Mî°“`#™Š9áé¹D 6ç”xnáJƒ~éC²ñЬà.\õCGÙ©#3k¤Æ—Î OÃpÈ©¡îkß¾|¹Ë·dî@õôÚiåàÁ#À&H‚ ÝŠT‡9sYmÅ*î©~.aF¡;-ÄË\B›ºäaS‚gÁšœAú,#kq®$eø¡¡]o—€Ùœ§c×5Eœ Òã¬d¸!Jz:ù¥¦-êÙ§º¨MžêH›<‘|EÌ^€Z­ _K­W.bí ^è8.ê®ë§ìä6ŠÖ4C¹`»2ÆÈJµkЈ̸êã¡N†j QF¹MgmIëêÕ½D|éû=,ø®ºu{j×¢üP¡ìË>mBZ¿J“§ˆª‰ÈÉ•L3[cÇýqw•Á)Ñ'Û}F#Æ8ê‹ñµªÔ¬Þv[Æò²cZy´ H™bË¿jäÀ‘¨¯à6œh¤¼‹†Õ¨µ#µt$±Äʯ:ÔðéBi¼‹¬þ —ø¢ö‘oB¶¨"³–úqtÈYíâh&ÐÀd|e(J`ª>óW+eä.Q˜:´·'`H‰ê„’Ó1Ä꓉䵊{èHV )^ÉgпFV‹º.©’g¨ ‰»ÔC³®0¨¤ºÄßíæ¹àF@ëè©à§~Ïh9&þs†…sŒ@è>_¯ådU—ŽiÝ* 匊J%R¶h=½©îaG²»ŸúÃ|6cWƇôž~íó³ò°AÃ/ „%mÌÍγ?Ы\Y˳Þ0fòlBŒ=Í©q¸%ò- =>›8ßI;dˆAûV½6]zšU?¬GOµÙ­++ ŽiP€ óy !b‰už˜ÍŸÿ~¯ø}°Û…bÚ°zŒ±+ægD¿µiI¥L`*¸XÃU˜P”PŠåÀÜŒ]ò¼1þ– ±¶O#ÊWá|ãÇ·¬NhÀ°´.Z©¶;Õ»v]—"“# ˆ1n݈SÕL4U†Û~hÅêw¡ÖÇ‹VÚ-§OÄ óoÀ£“ Be1‹w¥Õsî:öž^S‘1fà&ìl™Q.‘½QA&µÒ^å]F›éLÌݯêúÞÜwæ¸ ~<6`\DWæðš†ºÝåab"“½^û«L3¿Öã³jTóS ;¨'éB?íÁ8Gl<€»"yýÒêýI:äWDkTGy#C Œo¥a¬šÄõG¹Œ>Y*hoMÐgÝQY„œ!Ø—¹î·Ä_@¹„¬ë¨ÜTijëÇìC¤©(ÍÆ¥ ¿¨?dk?ƒªÙÞ)s®Gw.±y»þ„DªÞ¹´Ù¯›®?õÕÅíç{ù6O{ËqF×6ä­ÔQQ1›‚{\! ±ÊÜå’dò â~ˆv€TïÊ Å²rH}ÿ½YÁa¨XD‹¢Ù5Ö¢îÕJ»Fçi^Q:m%Fn™<‘÷ŒÝô9’×HõMy$çÇß-cþ (rÙ7ˆLˆd™z²~xΩ§0¤_ äº6N¤gOYjÿó_ÿ=Æ?óu³©ÁÇÀ+ý€×³Ê,Ûßû q$‚¤îyŠi¨põ„h¨@ö.pô¦öÚêv¨×Í»uÿÔIKÚßÏ˻Ţ}lˆéGÃh?88~*¦›§«‡:wBÆC=$¤ž©Mâ+µo»ÝÍVÒ|ý¬‡&ã€+D!®*U½îeÄ #÷If1)°;dp˜³=ü"þ¬”¡¡øŠ³ƒõ·Ë±>e›$Â Ò çiðæJ Ö£êŽXö³ˆ>ôO”åJ`˜® N‡›½œ_é_8ôÍ!y‚› ‚ƒÈA*q'ùñß3AË™yÊÈspùãŒò“3n.æO½à`]#©±Z¢KÕÖ¢ÿ‡8é¼F§ôÞèèw7.ÿòY¶êónl—â.L^¬õÐgì)ľ£LTN ”k©g]öƒÜ‘¸ût‡´tãq—sヌ&“L}__ÈtéFúâ–.ÌŽØÛ®ÎùxÊ+µ¢óñDUŠŽah•w=(U¡öÝ©†+µ;-}¤«¬bx'ä]K?1K$d¡ŽÞ˜sŒÿ0KG¢¼yITõ™¯»ÀÍ $%BÜ̘bÑzµ —úªupÅÚ^­–»Z2(Œ˜•êŘ<ã烇°ÌÇB å߉¨Î¯MíÜá®u·O½ ’ë·´Ù$&pN¾”ËEìŽ UÔ®žÁ¯”³_gê¼ þœê¥i°DÁ©2:©iN“õó.s”.¬äù0‰”¤1jT"ô›ü!*F‚(Ï|ÁZz\hß×)U>H+³ÉØÀÙxÒÅz~¨Wz#ìŽô’RmžúÀ?»{ÄC!,Ä´ŒAóæ>ƒîÒ¼(È2ÒɈ‹²àWɳ™àiK†u¬Èô'zii·l4#cÙxÑ‹F¸hìê™];»•óÇz‚X¯úü±³Æ¸ò0rcé¦BQŽ1€@'&ÉÄ›Á&w3edn£Œþ ø9W±)¾’za±– •Úš‚)'Úå£ÏÝ•r\`jNJ^BºŒn„(±37T`T1æ£{Aü¡¾´H»vUÈÐ!Ãâ2|ÇôêbÔ÷±úKé 슑º=Ì æbic9Ò©ê¬ìßñ.# Xû#’¥õ¢I”N>â‡s¼A„‡ÑX×\ÝÙ‹õ8ö«ÖßžÃqì3äÆ>`5â8¾W÷Ÿ+¹Ÿ8W51¾Rçv¹(¡ù\–d G¢„×p8 -¼äÁ Žúão2ó2Ü“¤ç²Õ÷r«Th"õ} oVè£{¸b:ô;Ÿï•XÁ¾þªùr 9Ò~©&˜kâ?RÒE¬y²!Ç—’èÁö<ã¥#ŠÊÐÈ™24¢ÙDsÃ%3J2ƒ#Œà?6Ä`R‡~&å–”HÂÝu¿ž[p\°é‡§zÈ*÷ˆ„2ƒ RÉP{/iÕ‡¡ÿg³ÊLW)ȱRɘ‘J™K-äWc)¨T/fÃüÓl¹îÚ};åx„PD +•^IÁlv}®³DÇ¥'¢¼“ i/Ò~h†}›Ý‰‹ '$Æ%ld>Écv»€`¥#Ý,P s ˜¸¶“Wjé!gËô—M^©ÊüàÅó<ý˜’}Q¿dBã– t4bKåL¨Ý—tÖF<e#v4©‡¦ëwÇ}cmÈIÌÆ9dÇ‡ÇæùP·™O%À9ŠV‚ÝÜRÇ3ÙH¯8Mƃ9.FzR¸=ÿ:ŸM?€}E&œDœœ ï£bU%f0÷J\Ý™HB3–œÍÆNfGÎÿ9}A$ç2dd¼…Œ¾£ø9Wñi_rƒÁYN‚ïß Ë3Éï2ÃcõEûŸøl‡Ì<ÛœêÊ8A¸x‰Ò²Ž™Ab\‡ ì^Úƒ h±Xè”ZŽƒEä°w0íÔ¼ú·ð¯ñ_¡Q/b{=Äæ-pœÌA™{˜$µȉÄKÞ©øUoP@\Cæ2üWßm8ËÏI˜q±>ùü}pùÔ<#† *$¥zNœÌý±v;µ¹~­ …r°N³kÓ.¹p]>»`=àš¢ša› Æ [¼ÖЊ^½Ö7õÌ;ñ0ëá}' GÅŒ U¡€ZñÊÒ\!¡÷~^6øX >SïžÌ¡ßŸÇ@©çÊ›æ:«oÒnõœB•aÔÝù}õ{³”·e¥½ÄýåßCÁy<̰͠û D7΃@1y»ðЈ<— Æá1"¡‘þôå¸Êu qÅ4h$Ú×ýv¡®†¤µû8§ÝJ áÊ38ùKu€ÞË~[7lLÆ}ßµS2 ¤êµ }Ö—JRi zçŒáuà?x­]ß(ËC±^ët …SÐ,s*B+QiÄûA]‰dsA+H #˜PwòÂ=Løe«õQöô_ÃWûÖÍn×úÏ‚{ ¨ÑL…úB¾F1ü¾9«Ï÷úOŽSÆjŸGŒ¨õ¾TøþæÂDã ?gÊo˜!Y Gj¾|Œ¶Çïçâšü9Q‘?¿¸føÕâÏñJü¹°.«ÂŸ kðçhþüo«?¿¸þZ\}MTß__\}eøUß_ãÕ÷×ÂêûkYõýµ°úþ­¾¿þÛª¸¹6ëƒ0æ2õ‹Êä”¶^ @„¶b­¾©+%šÓ›ìþ{‡ãè=uu«Vn¡€Ü¸¢UÌ€4íþ4ó F§J””éÑHÎVý¾z¥Vfp Öú¨ä5~Óq_¯›¦ŸÓ<”eaÒY"FXÈ¥_=ŠÙºŒŸÔvé=-ªYyBç,MI*+}݅˨˜è§ §«mL†‚¿NÂY ÇTºOtå¼ë·é­F”IPvÝoሃÝK¥Vã4<*³ÊB53*¯`ÀÉKù—Ì+…ƒ»ÂÍjh¦¼J‚#•$¨4•Öš±ž,ЈžJefêÔçÈò¸-ç€CÖЊÃžÁ•)å`–wxÜ ¶;½-ŸÒÈ"µN*ƒÅŒH±]²•¸¿ƒç®/ÅÔz™î¥9 ÖODÁ”9ó“çé]]þRI8.}ûœiWÄdÚExL` ~½¾~½ÖÎ?·í©é´r£Û©–=>xSª±À9ý«»çéA¼rj€ý 4«?/ê}»Èx€``Z!€ÛDåâüæªZŠ/¹i”Z½mñFü1‡N|åOª·¬Úu@%7*p8J&±Ø`À¦MžÌ10Og+Ïäî›z€ÐI²¶A,{åŸWÞ%su)?ü^’C‘ÙNy: Ïy¥:õ0;†°x¸@Ó(i($@ZJ„]lCÕà ãèsø+€™²ÚpU3Ã3ÊkÜ–µ…qk ã6ÛŽ¢~îWõXhÿü¯Îï?ŠU|+Ûn@i×nšÕóJô=}ÿXÀÍ@IR깬CaÓ‡É"½ÿX]›Õ'‘c K.Ï‹!Âùâ–E)¤ˆ¾À:³¤Ú’™+ÆW¨oÕ9ru8Ãø4DûªóóY6MÁ± ‡sútär ·=ß_ü¹z/Èp¾ÙîÆ@]^£ÂNGùüfW“ºÂýJèzm.r7^Klv˲×ópH·‘ðU._V“¹†c…_p( ¿îáa»e—Ý’%²[Ú/dDÝ«ðöõ¿Dçöþú—ðýóÚUÒ[×[5Á—wÌl_½ñ;!Ëàú¯¦»²‘ÔÇ!]v$}{…7¸ïÚŒjº¿Ú”“Ùݳ>½‡ËÔ»¶Û@ëâW‚Økm=k ‹Ð*ó{Í#MêÙ:RFþ%6UHg ",ùq*YðÆ õÛÝ…§™j,öš;¿)AI¸fË4”( ,$áÚ͘-|V7Qš>7¡§Jެ˜ ð– …«bD&*(hæT_¸þ}];ñ‰\; Ÿü„—¢(5Ýýÿ¼H}Vs¨´dv’×½ÃbQŒ™(Øq¢b[9ú¼®ze¥¾Ö5¦MÑ”¿#íП—ïa ÂêaŸ§éC I+tgâìšøÂ:įþç¿þ¯ÊXÉŒãÿü×SviB”Š–1ÁuçNþ©ýõ‚ƒÜþ@0¥qØÕ*dÞŒ¾;•Ç•‹Â“©;Ps_8áãæVþsæq˰ŠDÉaèNªul°ð…¼þBóW†£`G‡Šcý‚éì½a¹&GÅ6\ÊXË‚ ‹8b©ÛÑ•fodªÓcØQî–akÄX#TW—g<»’ MXK„âx¥z·°ùºÍßPe`!ÛOÈö&QyÊ]Â÷Vi(J„AúlŸ"œ^uŽ¿JœãC XßÄ´2‹¢zðqN½•äJŸ-ôSòÊ6Eô•Í|Z«²{tºÞÛµ>‰—;Ùûšö/puý°:,Ô½¬<yOÅ—Àô \ðMÔÞ<ŽvøÖÒ§‹»ê³"£ŒVÐt»®Á.†­‰ë­öÃ`Ò¾—£ïÓC=ÉCóÇQ,2›uð2ÍVú[k·Oï€é«8q°{œÞKqõ¹Ë/¹ÈꚉÝÍÏêÖ2\uq[`3xüm1Ž–£ŒflÖw÷@.&2ýÚÿ|ñsg°Lñ£‹V4ÉR4 CP/¥Ååc)+å?•Ö«½è§RÖ¬bí)Ö²'¯’Q'WsãT÷—‡¡=ÉKµÔ)–yTnÔJ‹=Ó7vb¾àÍÅùŵ,sW(<­BB1*´‹× s8cÔN³öoSy|BS°{~Àªµ¬«Ûz‚”[©3>e¬dñ e× ÓÛó¯†!G¤)ïú|¬G¢ÉNΤ‹È'Ü5S!…ˆrr“uÆwuh’& ŒªZ1š0{àÙð0½Ñó4é„ jÐ:þ‡uIaÎE{—EtÆr„DiMqøµE°-üN3Ѫ¥_.}Ô]J5–‡Ò PÉF¦„é“òXƒÃœG3CÐ}‚„†\Ε7Ëñ¸œóm2pJÒ…§ÑrÓ*¦'ƒâÏ•¥Etš19%ç!§ô<ÄðÉMCNEÓSdr’ÓØŒì¶ú¦YÄ;sðÊR\ ‡ÔZÆJù:¨ãN ÌcʨDH Ãe§„XZÃÖ„ç߇rxj»Å¡G1‘Èí3PÇ UTPµýaÛÕë}Ûq[ N!,>yøªDöuÿ4²Ûúã†J2 q†’8³8‘Œâ}ùÀ M$rCCB7¸#»K*Õš(Di³Ê)t§L¤¹N ]X Î/Ú¢P °‡~·­÷®ÆÜ-ÿUðXG…H)éªXª®D)£¸9r;˜§QF ¢ºh[Ú:KdXLõø˜¡€ N?$ åñ ÕIYD—ø: ¾HÙNK2 åâƒ7[ š‘ƒ›E+MŠI|PYo›¢Ð±,PS "ífN‰*ÚC´!ìrá½3±cí328œÇ‚ºWÐú‚ø)ĵO#ÛTB!1ߥ‚¢éxl HlX7¥™ˆ%™>ûÔ–îe*sÇ€èNkõôÑ¥³=W+øg½\6bˆË8¦âpZ)–Þ"å§&ºS®zpp{–/áV“ð¥ØO׸žo¿wPfhBÏ)ãa<Mrj¤+Ý¡ÏX‡z¨ÅÚ Œ³rGrÙ\a1y8Ÿ0gøQÈ»ä<%™þ? Er¨SJN­Bæ”(“…!‰@nÚ…›^äøÇv ¡-S»cúºEN8@0gÒÆ®Jй,èFÞ¢Äü-ÅpâAüb!¥aX°º Ÿ6‹_šÝùETȵBf% ulW¥Å;B>à‡mé3‹ÙÅyͱ#K¬£B˜SŒ¬£~À¬P<È\éÉ–Btdœß­5»Ó¤&ˆn1QÞ6Åö© ŽK‰´•k¸«XjÇ'8ƒZŠ."L@ÒÓL¤˜RŒkúáEôxb %y'Ós*»² y›ŽwÁd¼–í$ƒsâ©¸Ž üþ–›wE³ñ.28V—qn&ógÛkÇOÁ»MÀ;GC´½â´B"T×ø¸Ó1hÎï®ÎˆÂl›ã›Ü‹Zœ#B(Xëð ç¨X ºýo“h‹³n˜–·ûs1êè`!ê þì]º³¢U´û©œÖO)Z?±´~z)­¶{¬·¹¯„¢•îyF)b®¡¾Ð¥°úvëCŽƒ *"•Çõå|¶B¿Ý¦}ÿ‡(DD¥£2Ñ }—Ôªb{èÓ°´jêôc!:&R‘C®îÔÉÚœQû 9J„ÈÈdGC:ÀTin‹½`8Ém¹ôLT“Hµ¯TG'[ÄFF0ß¹h1õ·Ä©]vÌ)øÓ°É)6¡ÎaƒT~ùP¬qZ­JéCr­ RäUØ 䵈S½;6òrÄèŒ:%Zoî8­Òu³ØÕûåºN©ç€šA¬r•`lo®UúæØ­èíÛïýbÝšfF7!§µ GÕ¸¾K{äF:í C¸~ˆ!@JDûŒDvŠÖ‘dÀ‚0(š³}MÚ¾³¶‡Åï¿OBÒTïÿ'ßé}`ÔT¨>]ó`UlØ(+’ñЗ©¿=û¶Íƒ)O²w!¥P%©7Õç™í¸êO˜¤ Û¡ÞL¯îƒë"PÒÝî’šÛ§·“¯ðô £îœVûf±ßùøÚR·¼±\?RàÑð¯,@¹ Žg‚]¿FýˆSZÏÜC>Nv#éû7RBŸ›rÓ†œGû~±§¯Dw¡ô%¨/Ê`ºÖ'˜š¹Ž=‹Ñ ÁómµZQõmªˆëi­cTëT´0°ë!52¾³Ç§²EØ Nù®žuêü’"´b•æÔê„1x®¾3’<-Z(sÇÓϺbõýø¤JéÅ£P¦9MbM»~j×¢älKSºŽÃÐörs¶aħ=õb1¾¡®]l`šˆ#,Â<¶dH#ˆc ‰ò‚NÍ|ñ*þ‹;=ûí°€sÝCª' QZ›K Ï×ëwï×íôîÒÜFZ›!·R ô~½¨¥ä\‰"´>•æêäƒNøb.d`b  ¢•óH«ËP³SûÙ¸åýRºfxd7X eáo6èߢ9}œ„È?>ß;^þìÍ<«=œþ’¿yGSfHŽ]òþRéD],/ãúÔ,Eš{#XÊÓJ‰%«K]Õ‡zÙîZå­o£(~4G¿š°›lWNë¢ä’—¯í¨3X¯ ºÈÞ-«Gm¸÷±ï·;ÎÊ8¨ÇlŠæ† Ì0"óBt¡.A¡¾fžèssEN&žWÂTtT/†ˆêGÓÚ›Œo Š0zíÛÂݼÔs>îú¥XöÊ& |À¼´à±\fü]ÀÓÚý6ÃÁ!‘&8a7õ_Mõñâ½vÖ3ýœD›Cž‚ؘ)<Òï#XBö …Ð܈ïj€.ÿ}·…­`‘òñâŽÊ®^6»1Ã’€5•ŒŒ³÷–mM‰òº–0Oí2§rª[ÚW·#àùpœòÖ§Dêeßæê~߆u¿o·É·«íň+SþòšoõêæêãkúÆíTsÄÞP¶¾Àªò§m”)½Ÿ²JfŠÔxú“}­dØd¢ö°Îh=¬¥‡µ÷=ša„SÎn‚Ùc¤ Ì.˜S‹Ì,.‚ÏÇÙZÀ”H4æ¡’¾ÏJŽ€ºÏ*ú&×{º»¬ïä¢-V¿bxœú~÷ç¤Vd›dXi‹aõñöóÍû˜†íê°XÖb‹©¼gm”r¶;¯«_Êñ;#„Vª+˜?ÆÑŽ'GƒZ ½#L!e`^FÍ ‰°™B>ÐÒ%ô‹”&É•Õ[:Wœž_¿{/!~|Ü…¬4¤"; _ÿ¥HdµšÞ«P³µÛÞÐgðA xýðTk8|È»Ïçb8Q\HÍÊ¿1Kp+§T3¿16SHÂvj6—úîô^VˆÉÌQ²¹"U¤ ö¡©wÓÃbõЬJ[?“%ä‰A»ORx2žÔ4^Ä,’¡ç#CŽQÂs|)ѱœé˜§:æ¸æüVǰ!#ãÁš’¸ÚãÝb‚7Km±¤Ü«—RIef¸±ð¬†Ééðçï=õ¼q.âšæ˜&7“VŽP”JšEÑš2Ÿ/QPhÉüª,Ѽïñ8:$åG1T´Ë wÆÚÍY<ÕýRYÍã¸+ ڗϲñp¯ûqwáÄH%jÍáœÞ*§2£û¼;.’áUÀˆãB¤h[ŽÒP½kÇeÿrÜ팱‰<çW¼­ñ»kâc 1Ê23‹ÄñÝe=Õ`b¥ lT§>i&¶õìöØùËqù )h›P4CÙjÄóP™7îú§Gm&«óÓׯwoäïß@ÓûðõŒv`š€7Iç„`Õ6Òáyõ4Ô‡ƒ(GñX05âG?]R0?Î\И}QÎ4füÞac†LZšWKD±Ñ}ï; ÞŸR ~„Â*ýÃ}h1ÔY¬ëñaÙ×i«·Vëö¥H½UVÄéŸj½b-!à}FÌQ0²CÖË ¤º}ÏF¯öiQÚÚ`ß®v-âÝÇ2ÙÛQˆÑ«ݼî¼ï¨oZƒyí>Û«…Ý™îÇΉ!Œç6Dü<¥kÐÉícO6µ†µR×ëÝpX÷Jƒk‰8k{1 ù(ZÁ‰Éת’5F!Z¥NÔ—gìO9.ê¡íÒå9¸ÅG½ãCÚáÁ7>xPÆÒ†Ü«OØÞà¡Î-)Â<Þ,øÞwàºó a©?`ª>OM»}жQŸÎ墯Òö Æé‘ö—:örÑjî¡—nv©I?kV"7?.¥oj6´ô'ÀÆbK?4Cÿx\ÀÂzÙK…I1´¡È]S6‘?‡ äè“ÌèX¥¦òt ÿ°EqÓ à¸¨ÞU¯¶¯yO€íA4ñÔ¸KZJco+|R2Tý¾YÍÓb•v²Çá´:,qÑP߉HGH5ˆ #£»@-§Q(»£E5l-õLÉí æ½á$74¾Öà@ÐhA—dð›uÍó²^Ãù»šJîÓKÌdƒ>·Ð•< BV}£õQT90jYý8uurVáA •èÆ3“â}hwýbÙ' <~¼M ~ô…2Ý)™+^ûf-†ÍéAŒ5Û‡êÓ]Õ^vwð=*¹­¤…ɰÞjŒæºK)ï»Õ&Ù=„Q*ÓÈU _…. u 'éÀ55aó Z¥NtÞÀädYJÌ @ÕQ@7é1Ëjmë½<ÐNhõ J«ID·äåT¡Óq¥^°©Œ‹-È佄CßM„Dnãc ÏÜZ¾:¿ñg2€4g;Ù;>Q°ÓJÅN=¬Aœ5ºàa+Q&1­mŠ|Ä&àˆ0Û¦0,ß|8¯^Ý€š·„L…wBmáµ»[¬½\5kZå¦IY¡kO¢¤£€7ºZÞTC¿Óa•N”UO¤Z‚ W¨LsÄ4ä ç~çU¤ULtLœÈu?Ø3§ø‹(/PË) ?ƒðùêC%æ.%¯šÉæxÄ€ØW&´K•Øo´÷`ÚwÆ™½â˜P¦DŽd—@´Œn[ÿy±‹-Ñ[§Ô°H­ÊPûS‚J µ0þèD0ªØÕ˜ü-¬Z¯Ó·_ÁrR…h=:Ñ鸀ËúÕÕÍ…X± k¹ÅlÆÓVÔç—÷÷_ÁCÒ¼Mß4&£uKîßïëaú|¯n|¡ºÛÃ%nˆø¼L‡ç‘F‘ÁX¦T°ÊWi¾ÆÜ' ˆ&ý¡Z-ò·˜ôZ£¯ ü9yuFôIV(DÃ=|§©[íŽëä;„~¾J“«õ—zyY*ª#Wx!Œh3Å'] âûÔª uÙÒcpT¡)¿Ëg1S½Xní Ç_ôT%ŠŒêyQØÆÐ=`ÃQÎîÞTkÄHHU„p¾h¾Ë–°Úµé…Ln¸…tJ¬ Eýßȸ Õí˜ (¸_%Ý4›…êrU~%Ÿºì¿Gx—Ž2ÍQ|_Àe3æylFŽÃfLéw>6ÒúsCE€"ô@á±'èŠÆ'f7E cî¢bÖÅó®4S‰þ¯þÄiw•`BH&ÔOÏYåÓ3£zzvK³+“ru'g"ð|ᕌ˜Ýfwü¾^ÊïeúÀ.†µ¨»Ñå/•¡þ?ŽÍð\¢=ÍR$Ôþ*ÿe•A(;2Cã,Ô>ÈSx0©Ê/2yŠ) aÖoæ1¹i)ƒóˆÐ ªUîÍP ZZ ”(Ä@O£²8x[ý.ÿÅÕ!' \uˆþ«ÍŒØb4ªDØq{jêG»/g§·Wžç"ç1¯C¥DÆêglï´I @[ùrÿ>M*|˜åcÅ‹|‰ð(š]8Ìäå3 Á*`“Ÿfø0Ê%6ÕŸmˆ'Ì7<Ö?ÎÁCá¨Ê 1™òi‡(œÄ7#U4€8LÆ "ÄÕ^Ë3pñ!é.Ì€­ƒÈôH#/¤P½Y‚‡ j >²án3ü‚`Jo57c0Œ ðmôó*éã}fõ‚~>Ê%ßÙSæñÒß’q\PÔ]ò£ÍC':¦E€ÝÂx¨É j¸.—uøÇáŒ:$A^5‡¦¹º;Ç¡}¥™ˆ!Š(Ô÷ upÛ*Ëž•{§È;+7jh4>,ëUæš sŠŒ Ôõé—ó éÁŒêËlnRÒCοŒH _Rj>Ž*Š”ˆÞ†E˜;ç §‰žã%ôlCÀòî¥B”SâÜGyzFÏq”—«:§aH •\ƒ£²f„»ò™ Àk0¹ ¢ž%Ôî×Y…™Ètæ……ÀÌ^8}%͆š#«g¾C|‡Œ*ç¿C©8øsc…8=tœ0:¼Ìœó‚÷©´ ²:t2v¦ë<Œê¨Fd#çPÚ=ó0ô‡"NèóÇ .g }'½\Ÿy¬ÚM–O»a˜´Âm¤ÌR^T FI…á*æEÅQÄ'†r1nÈçóh7ÏùUB€2Llºos€ £rA̧žûã ÊJÆðýáSýLHt›¾íKx„@K‰0AaÛô0¥“3tdŸ#ÜÿüרY#Nû6g/êc jkÇ,Äô ¢?l*) fµïÐ?ez*„tÊd0?–ÿ¢•œOïëÕCÛá^q’ïI]b4©Dx9uÆèæð£•:5Cê‚¿“ê‡+Þ}W]}¹nV´CߥNɪŸ‡µT˜ 2g"”\‰L¿ƒ™PPîi¹Õ?‹ 8q®àýe¿Ïì)É,ûq@Wbo ÔÅs„Æ~Ña¼Æ¢4—.㼨¿Ð=kh6÷Ÿ•y•Õ©Âi'Ô€Ò¤’ئ©Er¢ >3yÇaèû=Òwªs¶È>ÆhÕ©Bño0xlžÁ×.¨U6Pïôõ&¸5*ß²HËÓ©šW«r¯—eŸt¾‰åš¤ýúê)Šö+#çüí—õ™ÿlºÇV¬sÿÙç]%İZ­/Õ1àqXÖ¿)L%0<…2åµîƒûgJOö2 ¤Úìe‹œ{Ï(:Nx€wxŽ 0ø\g“.¢ÊÌéÏâ’=—áp„Ñ ÷UÎü‘ ‡ÃºÙ#=eχ/RL^<úžq–Åa榲½óŠî4Ç1¹Îs8¬²<s©&bG¶/wDD´QÅ#ܸÊ7R‡Á\D*X_ u7nÜBOzéiFZ^DÁ„V±õÅœ({>ÇÀ«Òó¹’RfÓ5a"tãÕÇ# þØMÅ$2ö“ˆØdÌ©´}†!Ê} Æ*#]ÿ;5 sR¥UüvúC„Wÿßãë Øä–Ac30ÆêQ©:Lp-Jð©!Zºyio†¿©¾4r½)pöo9®h/‰»fÔþÖ#¯xbe±Ûõ)b¡i©4T:! 8øE³[,w¢[…2)Mƒ¥Š<È—RF1ËâÜÛe‘k§yb jE2ÙøÕAúºfla á}R!4±ß–ü»’T÷R‚¾Œ®êä‘o²cPZŸKö*ô Më5 caÄulÇ’bàƒ4×)qU×K¯wmRÇÀ”B,pnºÞTÚO—sÊ2rAÅ+™÷êç5§ô—ËÀ)x•o_Ôc~lnÝÎÀ-z)œ§°n¦º3RQžÆuø” úÎ{·AÞÑhOq  {÷†Ã‘×µwl «Aãa†'OeH<§#ä€añLâã~ì{9»"ô¾ëú°€¹[êñFk0©Á×~}y~çæƒÕ©ÞI3‡Œ‚Nò’UBJe2¯Dm ,ëb$D!uÖÑLGäñT"Uí<.-ê®ë§:ãG; ÖŠ1Þ­P² ¡ÁˆøËJlj÷1F­NõªK‹b|¦£˜iëÃBöSMÙdGTºî&'‚È1Éd'FíOÍ÷É»¼$dý:£§_:ú5z¾ Óg©®àNWK/.H¡˜±õ›…s™6òj˜R~¾ 'p¼M%O%@õ\7þdéEÑídW¤÷©‹ÔxX­ÄìtGU χ©/R@úñ2-úpïniòñ>V)0~¨£*d.y>ª‡;±'·k¸Èioæ&îcÕó¯tj\E†~(Óჵ“Õ¢ÎR [kVZnLr\KßI?v…j´ÖcӣР.ÒÕzVjnð ׯZP䤜 µä¦EôùÈd‘¯5a—’1ujƒ²°r°Rtg’£ZÔNßÂÆ”h‹fRZ¿¨ÝCdçÓ®=ÁÒˆIÕ|¥÷^9ŽÕû q¥$}Z…j5:Lqôùx#1ýx‚ÔOW;‹±‡+GõmY€•ŠßLrTËS³×f¨Å:ú¸B.’êâ¹”Þß›%Ü:Gò8¶[÷OE/éAµ*•>?}°éèÜm3Ùex‘¦f]-Ÿ¥Ø=»—ûzÛ&9öAZMFÑGì4ÔrôýVÏú“º<Ñe’•½ä†]F0z„¾BÔ¶Cž­õ~î¸-$0n#$@ÄZ!íXu»Ò#Q~q[ ž88bWF5×ÔÃ\°éKžRÈ%ÆÂMÉ¥q(Ñ«÷ø­.³Up§ýVFb>?>äwîx¤å…eèDS ‚ý»Ý)ÙN^8Q×™×ßn´gßã.í fç{Ùiÿ/äѲ˜Å*Îw¢¾û¾BAÉZœV‡%¨˜þq!G"™Œõ­ õ­£úÖ¼¾Ë˜¾ÃÐç£ÊéÒéT“NtzÄêXºUJ(ñ JƒIŒx¾©Ww Fz’+ü½¿¸ß«u½ê]ºªÙã…ú¾~l’{l¼‡=6Ú2InÒ¶Y7"ìèªWhÿË_0`4¥•Ô•ÊaÔ³˜à¾%ØqÂÖ’.JÈ}õk„d9¹©8YTqÆõN ëñ°.@}Ks³®w]ù!bg ³¡?‰ÅâPÄŒb}fZ0³‚4“©Þ•Ây @/)MSÈ_s89Ä6Ô­Òˆêij†}úÎ`2JM²én\ ^žáþE¬Í5ÜQK`³@£‹HÀ+Ñ›teŽ-( 4äjßäŽJ³‡‘*$$dO±‰`5!_*¯‚üqod:ATÂDÉ»p•Îäßø´äåÖu/úÓ.Ï+bHLƒœéMX%R Dæ!šâg•Š0Áñÿ,‡±Psö:r–ˆ½˜–ˆ¾—œ+‘¡~lò08É(€.N€ŽRÝÙr¯>ZéyZb«Ù+ÖÈÇÀf„„‹yMo†è‡mݵÿÊOÄÑ„ –;>8µˆÔØíy2EH@úË”OuRëT{ê¦ÚÙÂÛUÇÿü×ÿ­Õ!¢è/ÜÃÇç1uÇ€´™$¯2ˆ‰«üêίþa’‡¾ŸÄB"Ÿˆ%jÚýZ šËä—N!Z›N4¾VÁK¸ìšc¶%ú_ˆÝW–·°kË+óafwTò»êÖÍwôÐnÛ¯—‹C=Ô¢€ÓCjkÞÇ“BoñPw[ub†Ì@NbÞcA½œµBÞË_´Gî³€]n¬a”“éÏ×k²•Që zôÓ$ÌY¡‘ ‰ˆåVq;yvz“ö^QÃ$k+Þ¿Òkíf-·8äòéç°)ee‘`Q©#Þ”j&p®t8œ·R³ ŽÃFwu¨Ø‡ºˆ‡öiX¹+Oçræ|T;Ç~¸Û ë ) v§ãÝßÄLYUZvV‰êÙ=›±Î£´t„ˆ¬9k2ƒG‘@"€Â¼U˜­Œ§§|®Áõ¥è©ÀÒóy·9çW<ÒcÑ×WJe{qUéÄL«.¹#û4ÐýPÅäúêC–À¸Û"åè+Q¤£U2ÿŠ£Í ~ÆÕC³.l Þ#ƒNë—Õ½†„”Š&ÌÔ#›2«ª)ž3ë‡Át¸.j©ê“RÂHÁÀäZHcú uGô†Óv«”Qqíf;½²ö”[1 ¢œM¼©ÖÍ(ÆZå»Èl·º‰ú«#ÌÄí‰aj:~W!†‘œœñDÔýÐR*ÍÑ·MÓtˆ§“¹fÃ2Tè¥K–@e³¤.6IêðI)„JjrÀ¨›Êékž“k˜ïTàžwªy. â5¬ƒTŸqûõNO–B ÝèÉ.u̸Ü]LWû¡à¬£8³G) 4 ãöÓâMSa^£=ÝC_ô{XŸ¤–œîëN ¸BL„p¸@ë>ìÇïooî¤Û˜#DabÔæö)|˜¯”Ù©Ð%O·*ü¸ª×õ¡p¶ìƒ=ÕVl§7¿]T&)3ËÉï™8_ûKwMЃóÛ&<˜¡òòõ ½!²Ú¥ŽSxFDšˆÞj‘n4+ÙÎa,‘È´Kïè`å[ˆƒÒ‰F$Á©„˜&ôÃ^~pp‹HÆQuq«C—×°l[÷OÝÔîÕ 1Â@TÄÚ.Eĉ5 ‘@Lþ‚ù˨‹Ü^\ÿæÔˆ¡5ë;+i•69ã7+æ °m¦Œf‡pjÁ^öð\Õò:˜9 ª °Íy­ó @ô­¹œã’s•zûB·O¨ã0ÃåS’ÎOåt~JÑ)s’u碮œ’,J]7EÁˆÓKÝ6e ÐâÈxÌližþ¬k¦…X¼À-“\$åU8}å1—üž„ª?æú,‡@ÊlŸöOÒµmJ¡Ã¡Ô1*w6dÈHGŸê¢ì+)…èòãS;­DR3Uõîì5%›ó=€ÁR¿C©Æ’›î5ÜñX3Í ’¨®Ü"˜]ûK^ëg(õ®i¿BaŸBß¾|È©kÏÕ¾ÀÕe kUSiô„öE2€'̨úǶÌ fP_êuÛ[k8BôpX4‹zŸé,|˜£gh¯è‹´=x#5ÿ&];Tçãs·zú®?ŽÕM; b¥ù‘Þà ZrSÿ6¤e&þš´Q™"­}ôͽª†ÚÌîâl«Wç7_Ÿñœ!S)g„e8ƒTÍT×ÇÕT6Æœ°vž«kÌt¯˜ªq›#yœŠ:œONH”»idbüvH·õÚýƒöEEŠ–á’»–Å=61ÿÆzóþí}#/°ILCÛìêña%†¸¢¦ }6Vî2Ü_VRÂȺápžbòFG”nFõÒÒ…¯.{ˆ3н(&æ…uíŸË "‰G¿v½ÃžŸ¯Äà) ®:¾h_(¿Ý ®Ê‘OHÆî[›Ã£D1haöÁ¶‘²±¥#öq’%FHXãqKNaäòÛé,1rþÆÄûwï?˜OÚ² 7(ìsôµì’ÙU"‡ÏŽ`”Áq&¯úçË ®2ß›ÈuwCÿý9ÊòÐ'¯/&àåM‘âp†ÍÉš"Eéœü#7›;î–aê’|NâXAªÝ­‘ÎzZu…óÖd<‹òk§9äÚ)ͬZ4ÓœZd2°Ì\Mº qÉÏŠ)î–‹¼kƒܧçx׫^WËZ,÷WÊQ”<›9Å•-,RT<›SÚ"Ï>ª„KÂj«‹vÚïP!÷Jdª‰Ñ'Êh胺ÃY¤ËáÁ€³tˆ?RÝB*x†­´dT{t¶åXr\ëSS4ÎFñ>K„€«ø…¨Šbù”7 dãñNaC™ÓG¦»Ç gä·°ñ'çS°(Šgˆ0ó—Dšc ˜%9îḑǦlì ñE‡@ Ç]%MtREZ²Í¨[ådcáà¡ð5ÀQh²¹—ÊÒÊì€ïc_›Y4OC#¦‹µõÿ,€Ú¼~ //‘=[¡ÞhsìÊÁpô}ß'98¹Ñ*RœƒŸû›{yñN&»ÇnÛîûB™å7b`­0ãȇRj­›AŠêŽ·á–ü©mžRœÖ%d¾ê6ýr׋þbfÃmm€ŒT·Ü Ê^!@$L»K~„k™¿ÀŠ)„!ýÎ2)¦Û ”;%^{I-0ØG®6¬ ]X#w>é6®-à_$Üw·_í’öÇH®õ@ Ù¡ƒ×ó÷Ì~Lî ;±~¢HºìQîŸK™{ð!¹ïrðöXè |ËžýE`QO? noì Ö}>H«²É8„›ŠV{ÿÙî°Ã¦ÀIvöpˆvœGte’Ÿ³ø GÀæÔ‡¶If\ôŽ(1ïJzŽö1ŽŠLL~•ÿºK‰*ú§Œqj <´ã\mçɲϽ9e*Y¨ûf*0RÀX¥:ÑH*$£N%ºº„WwšèñGØ9<‡dŸéƒ´ ›Œ>å£<¼çÞ'/êÂßES×µ™¢æNâpM •Éùù¹™ß‚äíxhV0Kж÷¸rf R<}ó8Idµ+³b‰1,FŒÀ4àŒç×ryäLZ68ÍXŸ¼Wɨ(Æ™#œÎzOaÞÀí;¥gLÜô×÷&ÞŽzÈö°¨7Y …)Ètôò¿|¼ƒ½yMývSïÛÝs²þ!jN¯§4§¥kÚíò _6„{o“š¼¾ôÙdÀc9Í9“=v*~Ë,0¡ø бX¡%-3?Èçc„¢ô`˜m|Djª¼9º…êÀr B(¢„‚Ë'ñê;}rÿþÛÝm¥ïÐVb`î”§×oÿ¸>¿=cÈœº¶ˆ‰Ãù4„„liAHR§]å*?ëbèªWßn¯^{d²+Àïl´T—¬LFj;ð·¢bŒ½–§P];˪$0¬T_[³MA'¨-V¢ØUð¹™;’ã€X»y&vr›NûDA߀ 7xqçQÙ¶Ù.ÁAz‘(£ ¶[pÛ Ñ’Å¸·9î”§Ñ({¹EØ ò[xõñêËk0Ò‘öl²PÖ©ïcòQ%tX¾jn-¢·à῎ðBóJ…zÓs'ïF³š¶°•’»Ñìar§y”—šmôe‘⚇÷â§Ãª¼!p`L‹—öíî"õ‘žÒwD(„*Fêt­çt‰eSþ8• °F™ŽË\¬­Î?œ…:Ê —{Ó…k­'€KjP,XY²‹Jºž4ÅœU–?¶@¢Ž[|û2ûØâ4 œ6³HÌÃÊ0›¯wƯqòí'ò>cyÁz,ì…iÊÃ&ç˜h_w%D(Ôãa|æQ&5Éâ;t`§©É· ‰9X¦@‚¿µÃt¬wæþûûn­3¯n¿½'UpPÍ¢YrúÐÚ}2¤¸Óê}³_šCkË®Ou‡=íûr¨xhºû‡v3‰õ£Ü37°ýÿéçÿ“ùN Tý°XÕÉæ™Ë£ÄPàKalª§fùE¥eu&zapÕàtà‘ùUø,Z‰‡zžBû‡:UUH¬Ù‰e¯}d,#+ÝY~÷ü=l+f.Hë²Éj=}Á ž°i‡æ Žo³—Hsy,+EŒÎÿôªŒ\_'=cÈÉêÚ[r‚Îá#˜€ºj‡w·]v·ZSf±\>¹tˆDɆöFÃù+¹<>AÐÓr³åHõè).jÏEÌ¥éab,á:‹ÜBþÞda8Âp~µLã.¦šÊè1f¡˜8iŒ¼Þ/6%þ^?ÌÌö ^é/SòØÓ6ÏÍí$7«Ù%ÉBIú –ò‡v)/ôqL´¨‘¶YüÓÌÂeé¸Ò=cˆõÍ 8’É'êÃ^ZÈýûTÙöͬÒí›LùöM¢„—D³Ýõ[0S[&z9¢.•–rá#(ù\¦’^Ð+ýkõHåÿV?Ò÷U þ‡^xÞ«†µ‡DšF‹K+-–‡RP%C¨itàÊ.ÉuË ?<éî=Ç%Q€#lËÌå3XJ0@½ ]ߟßêWÒÔç‘ÎÐ Û&âÁ–åó÷ÌUbT«Djó·Xzˆ­½Ë“þ{õùöÿûGÔšM>"™…! ô2‹þ%"´¿ÖjϹ 7ŸKæVKˆ"Lè­Z™‹-ò ù6ìvÓJ/ÔéŒn¤rßgFm”ìæ³@Ä$åÚ|œÙ: ítcXÄj†î~?Íà÷S’_™ÅînY£]†Í0ÚC«Ô;zI¾Ô?ú\Æ%±‰8^/Ô}hºl ŤµÛd§^ýœêa ·9¥£€½•éDër\/ÛŒZŠrzu:jÆ9 ´øåþ’¨[ÿs†–âQC‡ŒVì”S±àð{»ÛiÜr&®¥¡Á/0»ü›ô§¸õ¨çnb=òVgz+Ÿ©ç“gäŒ,íð*ó<Ú½…'—7p;ðÿ)ƒ8²`ª=ï¯+„CZãPBgxã€ÕˆÝ}»•³è/ÚÙÝ«‹û/¯ëi…T@…")-ã(]¶›MÛ¼ý$>®=Xo®¡{¿ú!z·?í- ¦„œ˜ãdΨÿ3›WîóÒð° #¥MÅñP' Óÿv17Jí¤LKË¡]osM™;rTLë«Ó½VJ8²$ÖËB*_/ÉK/u+™< _ÖcÃAÆx2 Ð`œäåiˆpÈô4@,¨6§Øƒ9¥FÀ8ŸÒ=ðïÄß7ÓÕ}¼ìÜïT¯^™=°‰ÕÏvÖòêwÁ*šEj…T†ÊQ ² ió€ìbšz$‹jËǽ|Q‘m´“€ûOŽÑ˜»=GšÃhnÌÙ}'ñˤ©~üjוý|ÁóP«u Ù«Lp7âBJuùcõ›]}ê vàX¤UŽe%»m ?R"} 3§¶Ѱ"íÊ^‡I0ˆq¤¢=uÖn“ÈîFÜžóì,ÛrWVTbŽí†/cÜîeôÌ^Øb‡7•6*ÚnÉr; ÉÐàè²V±kµÙ‹þÐPìk¢ܾÁºLC§Œjë8©ô€wƒh;íž«I9èÅtrhÄ,£ÞIW|°»0ô¯]±ª‡œ1 K˜±Œü¨¾Õ/‚ƒXS kûæ•£ø‘@@¿lä;‹Z¯{R„jýç\RbÒ„(È’ÑÉ´¹Ô•IN*'0…Ðf°M* &‚Jú/×®UÎ1ÅvÏ4Ãds™ ÒhÓB2<¤cIBÎc½óÔ2±±"Ð’ŽŒ§óEx fyQtH$pR/B§à˜šw?KÏ*{=Äe´QÒŸ—”|W,Ö§1¾äK2yIÜõ§ÚÌ.Ò¼ #åD\¬úý.h1s™SZ¸Ú@€,Ø ” …p¬¤ ­EVÊ}pšÁXÝ*•đҽ°’¨û8òÂd+ýÆÛŒ\E´—gÉ8I¬ÈWzÞ’[÷Ìro4«<…T =3)f†ˆÚÌ^¨â¡—%¬œRf(pXG†H Z¨t„) ’a ™|¿:+K«ˆO…+;FÕÇ~ªÓŠ0Ī‘‰œ’_A@Th¸Mæ}|˜Ueœ:äb·¡o¦\adtbŒS(SÉ÷®Ã¡éP®‰\,Îp:P²&b±–•ÒÙŸ‘™ãÈ’OÏÓ6só‡x†G ¡DeŠa×|oG¹œ¤ô)IiÑ›õè"bHˆ  ™º{¸2†øÉZ•+è&¤Oª¸“0sUÀ>¬¨™HŸRt!n\'Ëpcz-V@°ÅXÄÀû$Œ˜bnŒ°}QÍÑãX«Ñ(ϱ‹@ý²aìÎ'¡éA0‚ªo:Š·uðí|ý:SÚ¡ˆqê'åFí }ER…ï{\v¹nž`œ ™Juè4ðOÒ…ÞPoÑDœƒz,^4 ×YI+o—p p–“Ìc#ï¦T úŠG©Ø¡hûUkO‚è"M]Œ‡)qØmd.åsWòƒ ùŒÊߨ÷Í/‘}}[½4.|ÙÁ_'—|öü÷n?t¯ëi»µ(ý½3ª œçDÁžrìF'Á¢º7¾u0L$.Š‹‚ÂNñhø“~ü¾X7›ú¸Ë|ZÌ(s¡‘ü¬w»þiÔõ*úñîë7Õ“˜®èXæz*xS¯ªÏ÷Õ?$²²Ùe'¬59¾§Øv‡[l6^œ9ÇOñÏgÓï“¢ýö 6ò¯êµN£PÙžZ±ò«7›¶+šÆÆá†[Nꉢ€õMLƒ0SZ1Î÷pÎôî˧o1r»zÙìò=l.KÁŠ ¡ W÷"ò cšûLÖ9¾É‚U|’{hKKÓCJF–²Àwåu~wåÓÈú ¢\»Ü JøÝA¬V»ãXt¿/ŠÆ|ˆ|^CÒYÇ¿RfQN\1©V2çd*¦Tzÿ‘/)—{ŒsÁ2Å+5¹0Ñ’%׎¥eæC +œYN"ßÈq*bÃóàÊÃØˆ1òâ¿À°iÏ’%‰T)5ßE9v5؉„uq3Kçü#Èy…iR™‡ŒÙ÷˜ÿܹ ¹¥ ¼ð]‹Éͽg Ó_) §•1Špá '?Áç öP&G€Cc"DÎ’‡㕌¦Çá.*žÏâÐ?Óæ¢ß(ç&YFãÔEFé,Oš×žàÿ½Ê>V¯ ä–ù!vjß힥-×r×ò]a^3¯5ÎxŸ1ù"ãKÞàº|A+#¡kÉZÞ׫šïwyÝ>ë·2ŽxŠVœv_',îô³Þƒ¨F“ÜvÜSP~¤‡ãWž°ë@\Φ,&§ÅU„¾\Ôuíª¸¨|(ác…óŠè¤ç{=Ï0ÇùîG¸ˆ*O’+°P)ôœÞ(YŒp4ŽÒÁ~YiÆr`¾f^Ù¢ì ºsˆ&)²#‹"•[2ïò£·<š,-IŒbñ¼òûÃ;Å+$£[‚èŠ%Jh\=4â·õgÔ6¥Å•ˉÉF±ÅY¹GTæþ«˜ýÇÒ`ñ„6EüX4†Û£ž’r ª%‹0»S›lzÊ¥ý9}ãñ<„kˆâXkX…a†o„«¶%,m‰\_‚›×̻Ǝ¬‚¹Ä³”SÅk Majö0qjæ0Ÿãë!ç²Í\ ÍNÞ‚ƒxô=Ï"¯vÚÏ})?÷:óC]Çœ÷™êmé‹PüN8³D>ŽRž×xez¢ÅÎm©ùúïi™QšåÔ¸’ò‡!NŸœ_]ˆÅÜt^‘yçÖèae„"T¸"R‚Dqœöj![V ó ò™ƒÊ¡WJ,J‰;ÜäãågªÓü7u– ·V,Ÿ‚ÉT¤`b ¾¯›¡à&†Ud)¹n®Dᑾ‰ž­gõ>â-7ý‡@©j+9P›WȨ27z[yœ~ ·.‰ŠfZ(E>Ω³Wšµ¼âT©;NÚäKÔ-QÞÉr+ñÌ'2Žé{ÍŽQg]¡Í ê.RÊ›Ìmg(<øöI `•ë³@úIPR¤@ýú8=/ê]“Üvã‘F%‘¹°Ïo*¡¼ëŸv \™î•‡®Ý \H/Eñê«,lF†S –‡3èuŠPüfQݺÂ*÷‹]»o3Ÿ’2JM²êMÚÍsuÝvÇïÕÝùM¥$XÑ:­bí?™uÀU…ŸØÁeÚõ¾M·ežoÓ•Ežê€åKÜßBtiôR¯Vý±ƒ«ö:ZÁYHàð´.aà`! 6|¬’’Ðo ýU«€rðýÈf­?$8“Xl›¾À,5Œ b± ¹Õ® 0ÀØì6oÇvÛ5kì¿q´¾\RdÁFž%BzÒ‹Æ[íM£õ‹«•ñøÖê<„«¢ŸÓï÷í”§a„‡õ‡ñ2ªÕªîÖ­ô_’¢°®·Yýƒ•‹TÐl"¶¯Ÿ»z/ïš »e0,ÐSk2º×‘¿ ¨/Ï?Ê7c)©Ñÿ~Ú}æ¢Ã”@0ÐÈPôV_iû$IT#ÇI+ëšv)ßJ*Á®¹*™Ow]ò.±Ávò.1œý=KóŸÜæ•«iõâï‚«ì:__¯W›|s£8¢YI„vé¸>ðFÊßÓ.&Y«‡ÜíŒspB|SEuƒÔªÞÂæÏ${)}Cƒ¦ÿxÜPïk|4,ÞH Ùß^÷Û)ëGæFFšÒîb8oø2ìê) ÅLœ÷ :åöü«,5FwQíy@_¯®¹B­ÙË k´W•¾w0.¼Sn¥ÌÌTCZÛFPÛðÙòL °×h¾‹6 ¯<,Ûi¨‡çêóqr*Ôÿnè«æl{VýêJÄÐòÚ£tÈ·É×dð°Ÿ‹»¡3å‡?ŽÍð,+0?‚„X¬IáÓù­(výÄ類Œ±òØÔƒø¬á'ô¨kë÷êöã‡ßc£Œ! B–*ÅašZ"(š¿jþà Fñ‘ÅG9Š_ØŠP1"É î¿—½œVØðxB‚"!Új)4Õº‹îöiE݇f¹éŽ#Çì¥ýü05é=~D\T)ã= yK=AR["°<ƒKÕë˜.ŠR õjH,lîå³\ÒkÃ|pž9±B-S¯åäæ­`$Ë#9¿P¿T— fø îãíoZ2õý)˧¤2'7ÊDŠtJÿvõó²ïuWI&Ë¢'H=Ù‰õƒEÚ¿fe7gP¥ã¡¿MÔoÑ}Cl0í^ü {o °¬&kQXÒ,ëð<=ÀÖ’ Æá¼DSoWGyÁ›Y÷û ‡ptDš)ÂwÇNéN—[XIró\(Z´îN½Ê®]ÊÁkÝ€ÛÆ¦#gׇÇíÿJ)pb­A$àxåd÷ZÚ}¿«±žûÓŸª+é[H¹/“KMM–ª–þòƇô%ttœÇÎѨl.Rém $·úåÖç£í~/¾íÏ÷oÀŸþ/÷—o*ˆ}¾;ÃÚÒ-É­¶.æîÃÐ4BKõÿþ?Õ_Ïþ+ßå.­!¬"HsßãÅýïoïwQ]¼NMW²ÑÜñ;ÌÚZ¾¸¾2S,ÊÏnIšæ3¬8ãí—"¬Jíé×Ó'†qíx¥’»3"Wk'åf.Ð^ –yEX@zž‰DMý;u…½: !˜{¦i „¥ g¬Ê¿üOp»“™‰¦i8viUbuÉÄL-¿Óû{âmMôžvéiAX­V¨ ¾Æ.«±c4vùÆ nŠ©²¬§ˆäT:_E…Ë5 –HÁá|:4E¬EÛÒVè·Îñh7E4ÚM„E»™CÂ.Ú8*»e!ôé€(ù&»¾?ÀmH–R?L™.‚Ð$TZdèøÁJ{¢BnHív5åTét¡îJý%ÍæÌð!{0=\ÉÝGå´gôfbv¶Kª?viÏ´Î0Aw|  ûNIï½¶ži÷¼Ä;ìrk¾OeŒ0 $D)Npo¦S§šTè?=Mô7Û2Jp™"5¾©Œÿ1é=¤_÷U³>õ®èÑÍüj®}féw<’ÞäÀ(…$SöêzàÐlêÅ:]„c«SÉ)Ö‡]=>œÿ?oïºäF®¤ þ×S„Y©ÆÄÌ9Uݳ½mÖ³–•)•ò”òrD]êôn 2£Œˆ ÌÌúÕ1ýzý$ wÇÅq‰(©·­O) |€@à‡ûP>Wõ w7ìØs2Qí Mªä†0Gô„[Ž{ࢻ3N>ƒ‡mZüÃ6&ûù$a=6zqÑ" ÏùÓÒ-Ê•½Äap’ð>£à}´à=÷ò5Ⱥò|@æS€§z94Σ1ãtìKÃSxå±ãä2R‹ù¯â‘ÞVDp³•pØœ@b¹Ø$û'Ã0ájã0ªEEÿÜ”ëêÿõEç|‡åÈwXzßÁH} ä«A<,rx™îªH3ÑÁ’È Êm§t^ñ8mßIãˆì¦í³z+®#ë¬ Ì“>îöû^ü˹I~Ö2±C¹\ÖûÝ‹¥œ‡§/¶G DÄ ï‡Zh^)!ìæo…‚‰HõD§}9L<¬GEǦ¸h\„L¯]Ëå°ñÁY™8lﳟæ0}CGúL0Îö-¯ ˆX=¤ô†âH_®ÖRra•êKè<]¿j‡Ýµ&t2‘{†CVÛà@F¥Z‚"U‘8á<ñ#‡ ÆÎæøç?&VQ 'ýè®!œoPšB±/Á¸¢;%Ôc„sÞ¦{œÉõ>é·¬¥°gT÷W[&åi±ZŠÌƒÀq´fÄSÔreE_ʵ?¼&#/SÅϨ”¥geßõ¦x¦¹EøœÎÁ¼^.ô¹xŠAeTX¤UñðÖòqb§'ًþxåû$æùdœŒ€CNüÜ MjN©Š{LeÉ­á). ÐéµÏX‘ ¢Á¼ê£[Þ_Í#uІ'×4™WªÅ¼b& dC¾Ø•ÊÎÈpk$³Ã“¦t{‰"máYœQ•ÀÚC.ÏŽ5¤2~Vrª? ¶ Üè¼êMbNä†)§J"PƈEº•böÏÊ“_5Õú¡ÜCz±ê>5‡Œ¢•0Þn†j+çV¥¹kT£Ã§·óvsÍãgZg78­©Öµ˜¦\ Ÿd íS9ÔÝA¨ßú‚øU!šò¨åÄ—$êMF Šlåoc¨å¼W­ÜóRürÈ“›Ùƒ …°ëÜs[îÞ«’‘6ìÕÆh;–Sö¤±¡ec½¢¿@sÛ*€á±$>Œ\É‘_ÊÞãR¡´â@µDÿ=³¡ÚTC%ÂÅTO=¼ŒuCÕ¤îW4!H¾}ýéœL²–rÊÙ¹:†X—m;éÐ&Di&,¿Bñ¶Ü¢ÛìÁR“‚ G:õð飯fåëv; äÞª•‘3†Ø‘B&–1‹/"ÄÕ¬ó&×Q¤&çÄ1~0b™ˆÚÑ%ʾêrrMi£àÝÈ/±†“ÑíÐY%Üx¾X×WTSì+u`Éjƒô„P¤D›àø} à).%†‰lše9,Ö²‡uÏp„=)z¬)øÑ’Ê-°@é§Ñ²ï ‹âpØWÿôSz à4ÃÌå ƒ:¼u£›ÂÅç9%]ÈÖß®ª¤tÇ¥«¿–u°ZÎúbóÎÒFÁèIšbÁχ„±J e)•þø¡/$0zÿÜW#ƒÜhʿĤX¤Eë`&¾T—¤üu‰-¹uÆz g¥×+ǵ=RÁj ‹ÝÆSÕ€GšAD6[ÛKØŠÎ '3v :g ÄQ‰ÌVó‡ e±/ÅG T$ÄpŒ•ƒ¡Jý ©0ð­ÃãC©Œ}Éu:—9yjÈã,<¤óRᘲg+¬ò6 eY½«›…ÆÀJxÍú¢œIÖojX/*;Ìœ Þyn|&à†FÀù&v„Ź\SÞ|º¾Ç‰x.ÿ8ãœÌí…~†•WA©d†ã(0ViÆ¿½yÆ©êÇÒh{LŸçM'4t' 1ÂZ!áþ%¤Íî–ÓÄ&¸=ÅLñPMš-áñJ „X-YûLN®•P¿Žµœf1ylÍãUæb¯™Á–«7LÕ—k­Ì»Íþ¼_e"Ëé‹×"K\áñä8‡”nÖý—m*w adà˜Ù3ˆÆòÿý¯Å_~<û‘ < “C‹×¢d”þúƇp¶ƒáEzRF¾åœ”â´D£Ìbñ‡“J¬¶V)Gô6¯Ÿö2¦Ò‡ôrùðî·ÙÝ< –x*¹´Ô³hÕ F¤/¤Wþ‡‡Ì’K†Å©L¼«›h•䨸Ž#9nã[ÕÍ5s‚Ùz̢η;N¹5?ž@+æÌx´%‡}|ö#3Ì8ò¯³Ùª2þé’?M“ü)Jò'Ç“è(A¯2¢u+Ljt«wq=Ša'q2 !Cµ-½wy=Š #oˆ“S¦Þ30é6Êc²å±H4”Ÿã6g­¨…ñdíA¥,0F_Ó°OÖîÒþ×j‚CJ¤î:Ǹ½á‹²¶{Lke‡(-Ú„[?6Wdñî#Ú7šÙ0ËÒ.ã¶{dâ§ ì—Tè Vi ÌëËÞr:%¦x9¿ÿPÈEŠpìØB¦û®Ÿ4öãcŒx eûE¸b“r ¡n‰K–;SJ˜Î"œš[uo’D7¬ªÉg¡%`ØØò¢;Èh)w‹VϽ“µ^NFÃa—öÏG*nœiRB½fŽ“­éò¢˜+V=CÞ2m[¥ _³H»í¾Ôe1_ðUȵ.F–eCdUÆÄèoäˆRÓ}þô?‚còuŒssÃIh€¼—¿ÖC=ýÞ9D)¡6\‚èЄt pè)[¹å QPÎðÞ®xl:—I²Ê¢“Z[epM{` –ZÃÊ´ÝÏ*¦vG5Ó2a{gbC6ý«Ÿ¹KÌA8"äd×-˜s¯„ȸ¥à¬’wăŽ˜ÏrÄTIÏê®X—âaÙ•¯ ±(…€6œdCjrN|ü·MÑÃA{øÐ}©ì< Gi‘‚­¯–Ë3>™)áð¤R&çA™E‚q k9;±’õQQP„Ñ]/%xXÂû–Äá·R”L°är…] xÙ`«„Åö@fÎýäéG§Å²˜ÑçÉýÐm‡rÍž¦n£Ãì0 Flv¬™'—:Go‘s\±×}%±Ø£#ÐðŒø8ücâÃAèü1,\ÂÌ?½ÿÇÐë€x”Ã[79`8%„ÂÆ¼êhÏ×dñòíýìão?0árRŸmãµ`–‡´( uáò@Êr°viªr {ÁøýÜ®ä¨Yÿ99"(EÀ†ÃHP<e߃§>Ùlàý*ê8 WÓ/FcÎ䑎XÚ·Ø)«åìÔ«R¦'Jc$Q(¾Üš €~ÅMñ\¬ÿõ´†0B lêåYëiý"brÆ@ÖAžÅ'“¿­!9ZnËE-Çú©v¢H ,³ñe ç8eñ°`ú«˜åÌû¦ÜÕå$Óà4EÈ…(6*t¯)%y2"›*¡mç‚ÛI}+`„¶¨i5m§AÁ|íY˜*a 2)Óh©ÈîvÖ%õ"%͉9šræ>£f>™yÏÆš§:Ô…[,t² ït+ÊDC ßxR¦‹ÑBU¨s»úÁ„2EÚ—Pbx÷Æžìë]•Ø+{%V:«r¨¬VZ)Ý#xX6‹)iq¨’êE²Ç4¼â¦mµ¢Š-µÎ<^©­kˆâlô5›ˆçC‹rIlg 6Ù\ë”GÝÂFfZ>ŽäLLÜ)tL"ŸÓïÝrA÷IIR”³²‘ÐZÕUë±øk·ŒÉoÊC;é°jê˧H˜+é&LrÑ"<` µÆ–ñþq‹+cELjÎØ7ö¥³ñ0»1Ètfñ{,ë¼Za@ŸDñ]ø&Àƒ®%ñàShÊeFkä(.ÃO© Làsè†m)ž©×à£`ΈGŸBŒ§¿´‚y ÇYYåòlBZíÜã’Øð ÎBmó³) Ž?Êc_M¯Ò|—Á§È¼/?a¦(qùމ¢ ù€gò릞2fë”\ ²ª–iµÒ΂–O»n Ë©þ–{¹;lŠ˜ŽÉ~î«}ÙL:z%_ês¿’ËÖ‘FÊa%u¿èå¶}BPˆ"Y,œ¯¡DJ=ÊÛf'²g^ÖbÕ/çj‰78$àæŽ+%ØŒÀ--àò{wq ?mì½6­—$º+W9ÕåÁ,1ẹ¸<µÆÄi5&R5&&klþõ5v|X–9sòÖRtb]~Ç·?_0ÿiR°…H‘aFB]áæJ9!|äVDË8ðX¯"n¯/Oª‘Q"Z"¬ˆyVE<>¶9}ȃYÉ:Âþùóí-ŒìŸ?ßßfu¢õ.ÏÐX¨Ø8Qì4TÖŒ>·Âׇ¶†,Q$öðáZg–ØËF`.÷Þ¨àïiDRJc)0û( ¿ÛÿNÔOžl@‹‡rH•–c¬ eÇjånYxbQ b ¨Å…>7Æ’‰Ò|ñ›)[¡6V Ý!”A¬Td§Ge2©Šã…Œ1Æ6Θ4ò¶éšõäW‹µdÅú6þÆqd ƒHaý¬òå2¬j'ÍÛÆ‘.ÇÔänPAøxIÞÝt<<…´èèÕ<&4¢@EÀ‰ÂþË`u¤ïjÊj?‡h½s}==câÈ=s©£w²\ ;¹¶z„õ…½¨³vøàb}“c¢ºEÕDïHî>ü‘_KÑ)3˜zP—­a ž”Ú% Œ’ Ð¸iºG9<ÐÕHݦ v“œ:FG~‹ONÜåöº)>]ÝÙ+0QS.œ/:%c¯¤ÆøÍè}¢x¯ YSòg·”be çrqm&YÆÄBɉcžÌ•«5:<Óxt I*@BÔÛV¨8x¨v!±¤ÃÍ(Ð%Ç]mNÓSH´ Ü9^Ít^‰I2s¹Œ—˜ÐR.¨(F¨ž|ÂÈ¢Úy¾è¹š ‘O«u±|–î®°é‹Kb….Zn&Bålôœãšo˜.±Ió1L¢Úžy"…²ÕŽ»3+jW®§Ny¼!ìÚ[iL5 ÷>ì£í`Ð[¬6[ô8¹ÇÃj^¬$ô3ýq^¼¯ ¬ý%kÿõü·šÞFª[eFæÃÒÃÐ8Ü%ÇqCn "˺Á)¤ÖË5û±Ìæ7Î,\pÌ{ɰ2´|ÙY~lǰÇwmœ„uTåŸ8¿6Æ’¬Ð(9ƒœ¬+Ê+³=ÅŒð›hStJ«²935Iðmw ïxÒ‘x`ØW’y=V·¸–ãz›€ ¨·ÊcX—\j+«ïŽC ºœAÖƒ@7’ÙŸ<†w)9ˆ‘×ÍWïç¸IÓ® éKûŽ_uŽG‘Rˆ#]^*.Ð+.Õcr|醸êåfU==¹Ÿ_=ÄHÁô›:øš€ô À±ólh^qrsdU˜$g‚ÉâÆ‘>-e´ù4¶9µ-$ðKnIáÐò1#ãJ ê‡ÝF$î|gzÉ¿ jeÊÓ ôÖ°Ï4Ƴ ÅRŘ98I‘ü<Ø<-Q# &Ñqr÷ªTãá˜ Š¢†cŘ|2†RÆ—!oà2Ô!H/ëö%x¸Ç÷hÞ'†•q+7oÐh?~¼¾Šs̤7Ælj^N_”g×ȨŽË"H©*‹aÜ0T¿±OœÌ5ÛØt:U„s`~:Òi<Êÿùïÿ!˜Âlþ§2OržÜ¥eóCeø”¶ÏtŠG‹áú?ªg“þ½\±,«Z5«/Ÿ!Nª`M¢ß'ž¼L&pøy»€aaMu¬h­fCe¶*ûr‰&ürçT²¥YÕ”­å‰Ó¦ãwâE 5ÞIôÃ$ê ”K»\±öÝs°Ì¤„$–"0e+W”1[Úg‘õñ!O»°Ùî K2jÅIMÀÇGµâ´[†Ó>ü)„§ÉNUZä†,­Bâ„ÔÝÓiÌb‰"Xn¥šÛ°kV ;­S$›(Lбℳ{¸Z„×™„=xHTxÏߺ*˜M—ó™¶‹¨|ÕÙkeÃ+iºî4 éRä‘á¬ö™p¢‡»%{¤'çÛsÚnެ0Ûvßg°È°âd{Çüáþ+¿§zÏvR‡Š¥ :¨±îd…Ìk;ô¶‘"}Ââ:ž B7gi_Y=¿›Xöa†¹öþRiBª¾À¬*ÐYˆåxÚhO5Î7‹4'Ò“¡½üô—?î@ãí”* S„f¤:Á1ã­QÎ8T©«ºÜªMãðQÜú5 t›—èN” ^‘eVêHŠ9‹‰oúŒŠTvEÒUÞiI3Æu¤"­*×Á“ª3¨Ç¥•ÏéŒé]½}3ÙÄ¿dp À. uD¿ð4éWf ç¿Os°oS|ºšû„ìYifƒ‹'pˆyÜ!ÑžÊNÞÅpT­èÐõjf•'rE`£KtBâ…íÔâÖÍòD¢)Š´ð:W‡Ô'8ë8ŸZyíËì-¸u™ÈàZFÆPÅDg ‹‹ ŠÈ¶g´œ¨Ê&¿¬é<&1¤µBl"Š—·?(㽬Ëñ}Ýq—ËÕC:ìtœå³,E½RXn"ÀPº:‚‡7úæÔ?TƃµÁ”¥Ò8Ò'¨­—:&ÒÇñ>òÿÍe\«ïscç´b·z´¥ýL×{°Ïò«Ï\ìŽ\÷!ðBLO%Yì£i‚¸(;A‰Èí², ºœërXú.L¶vóòÿR à‰,»ÁFðoŽàÊb7¿bÄè6Ê­î³o GÓÄ9”ûNþZ Aà½×½^å—Ïj‚ ?„SMÔr0+‘òKyV|RŸþöúÒßÂ…$»¼;9èQì´ù{ºJõÛW:Þt±ù󈯯rI"h— ‹w»5<ãRÀ&±¸Õ×ȹí>÷x1@îjM÷Q÷œcŒj6Éqz‘F6×ÆÜŒœ'kPƒ±Áž¬´8T1ò"ã;)샇fo´þ"pPL>E¦Y8CÁư³8N¦@Ü¡ü@nòMU çÈõ^T‘\m!4*ל}&í#X#ßeÌ!ªµf;Á#5OÇ¡! 5;$èQD”érO w0F*…F.@)bLžxH8¤ @V"3‘2„|.ÅeÁ‹ùÑ’n—ưV²Ë P„òÇ4Â#¥‡y”~ÜGcÂ2øù \ª.à}Õ”¦$±œä?ÊŒ-…Õ»s•HNªRDp®l­L¡Œý’Ũó[)úÓyïê7²ºxîÄb ž\'ë;@)66ÜŽì襭A…Œ¡Oðlmy»ÂÓvP#0&ÞµƒÊns›¨SòS+»ç¸õSÎö“Ïzß"«+>9•=GÍÐÛà¸ú°@Ï•ŸcE= d<¦ìÏ›Ê3ý9dšsÃ2.™ÆÜ3(% ·G`œÈ fÛ3Ø4ëþ„*Š¡97'žUÓ»«{^QACÎ$šC/JÊ£ò5ò“>/#0ÎbÌ凜>)n´êÕ=Φ¤G°Œe; ÛAŒPí¦ÜïËŒZ¡ÍY’GqB¤ÃH#,¼¸Pylj.÷0L®û]JÑH‡­aãß%0 .ƒ„ƒÃŒ¸7˜¬pT1ÛtsÒ4!|M4"ñJ7M.pZ9Ñ‹ôMj9ØWr[ 7jçáè§™¼2èÄ8Á¤?*­Ñ\±¬64áJBí?,¿T];]ÿ>F U¡ÌÚN¹•=ೌ˜uí ͼüܽû¡X]¹^ɵ^yWv¯ýX-7ô*s1ýv9 T<œ¨P!¾ïcï\?›îÆŸe´^æq1¸€ÊzQÍ7Ïë¤hË"J µwÆDôÖ%£w±ÊÛÔN×™Ëî)™ ¨©è€› ¯2è$Ü Ç‘åXØÿ\Úåðt«‘UμëV.Üë”Bé8Z‘ ã­¿Tð Î" i±QÊ3 ìŽÎµ5Õçs¹‚3ág¦‹¤G5Žáد m»TrÔѾϓÛt F5ÄÀcgQ­­fõ>ž^óZÍþµ¬:HMv›ž#d§Q OMTàÓZ°‚õ$-Ö¾Ò¶ ^Q3SU였üVð-ùV‹”FçÞ2 lŽÓ¶/Ü1¦~èä¼.ãžSD| c`¢"ÖÆéxØB\éÉýgˆbrÍî“™/ÖÜ×ôgå’ å ”CŸ,·¡éô¡Æƒ+õÎ\‰ƒ¥‘™“´;×?&d²®6ÃäUj²(˜ÎÀx$„¯ A`LXv¢$ÅÓ2ÍwUˆYä¼tŠ þ®iþÐ=b‹ƒu1ø“TϚȖ³øâ¸rUÖ“è6u1cr!•AŽ=rälÊnçwçŸÞ^Áÿ~“ù€AœˆÆ?¼[LypŽåö‚“ߦëàaõ4ZhŸõ)"Q4cãÆÛºÑ!x‰{±B5Ô+=kÄ ¡-Œ&Ÿ’‡Òfç‹96ê|Wí– ÆH'º¤ãHó¯ÃãÔ ú4à骽È1_âä[9†qÏáË…Ê!êLJ>àe~ýÃv‰h3P^­å‘‹2‚±¹ØÚ¡»£]tÞ>=´`ÂÆD'ö¯qdP-ÞÙ´ë·ñCS”Ñ PÈ%Hº:|$§câ´9ü§è~pŒ}õîPÉÎn_(´]—X¥xˆU(_¬Ðþ×±û‚så=¨ÏQãj~9¢5 «öX]»Kƒ!ÒŠgqdS§Þ<<ðX5lš'úujºí,¦æï(˜qr¢a“=À¶@Û8”_F·D‰Ô™Lcl‡MÜÈ!ç\7º(+N…c3#gÓÐü|hkýS‹CHg~œ»¦”0Ã:¹¼,Qé@>‚\38¨ZÄ ÜD(;íîhêrYX×Gà¬RöBüú·×t¹´<ÔͺPDr¼ÖV½«,м©Ôp”€‹XpË÷b SöO¸~“ àÀ8 uç ã4)‚Cuãюئ5(`\zÆküJ8ˆ…^¨ˆi~åaßí TøCªø.ÊJUáàíª{lÉšuóüöÇûWøß9nêÞ|¸‡ñ ØD¨•Bîd>g¬<@82ТޟÍc¤r˜ÄÄ«´VEG&L¦Û a|†§ë aÌÊÓl‚&Yº´f¥ ¨3Oö~S?%%3— Áv  çKŒè½c™‹e°¬ÑcQÑþÓ|ðÀQabTRžQd@BxŽ2p$ƒª€Ü–§çðhåÚ(³Ú}%˜;4%ØØeZ¥ 8uFÖÓëfn²± …eÆÇfCµ©Ø1À@´Å쪧~ ÿˆNQvàåm½@/Ÿ‰ÂD ¶8<ǤÞÞ6A•âÅ—+_¤‘E0ibË|*0—èÀm ufîØÆOv¢NÊ®#²ëŒuàÍüšÖ$ŽÄVˆÔÉ/ƒX™(…ÞÎç7òXaÜvíl~X}AÇÜʧoÒRÊ:¹ä+CÕY8þíä«ßuNçì¢lÞÚ¢­ÇsV‡àDŽþæB=ñÛ*£ÿy0N€"$ƒ¿ÀwµlœtX^˜¨ñ¥IJÞ?D¤îÂu †F7t®ÐJ¤±\)å_¸¿§rÿ:ÆëÓC|Ø{Î/ÌnTïÔù媚«q”Ø•K>sw°1 ã`¢Ìu‘P¦çÑ»D8Ç)Þ; Ìc?Vû¬óÞ–±á±ð„oèŽõšª(€sÚûÒ®_À—êù—¤¨žªÔ¹†b´0XŸª列t$ÝKèŽêK:õQv 9Àþ€Ã«Gƒ~%‰80NE% m±ª#z9s6—¡”kˆýîùµÛäÉ[m‰xñ¶¿¾Çˆ›¿áv•¡Zv]ê˜Ç1‰Œ»Zü£4ýÆ7eFèí"á ;ãÒ(BmÙyƒ#=rÝ$ǯãhu†r@8}èWjØ}Åî™Á8ÁËæPÒËsä0 e8Ìm0&¨Eµ¡ý=2wÕœõ<˜## MÁ¿êª±ƒ·»{AÑ)¼µ G¼ºe—q)çÁ/5b݇ìäzŽŸ*©5ç{•Ú£tH.ËCe2Ñ=PÚdíˆeªàaÅÈ0ôjúDNçûªZ=p²ºPdùźÆ{RãôÝœ$»LWïõÜ$§ÆÀŒ¬Í4ìt8¹bž’Ÿ1dŒ§c’7Ì Ë!Kå˜]ë1$FÑŒoEèlDG*:ÚÉŠŽâ h-n_ ÉÖò.1ÍB÷ÁéŽo| “è:¾1RÐõ'£Jžy†OWM¨Õ(è7W¦dWÒ¾ÐnØËDI¹Œ‹¦ÖèU_¼º"3šz´mç4æpS—áÐ9³bOwìˆO¸‹À\ñ_éã“§Ý-G`L¼u»,gc» Ö%u¼+´+Eês ¡æìàþz4Š.Ö]xâ0á/ÿæ&¨«!ÒæíŸÉmޱô0Ý-ÉéNmŒn ú ÿKÆhʨžŽºMqPŒŠòšaùQºÚ™©±{ÖiÿJ.‚ Ìõ³ô˜wŽÛö.µÝ3óñ›lÌk¨·û¡芦¨p´þ’ßCœ+7Gÿ9„Y™ß¢É3t¡#8Nà;èDC>Õ²¯W»Ô¡cú[ТøÌö÷Ö£\ý¶¡ >ÃG‹%mC”-6MI>$åÞ4ÅØ¸·Lÿ€!L~½wßdÓã¼n‘SìVVŠö~¡F½a=GçµÈÏè`8o*HçòßÕ$ zhý‚Ê[Ѓ~+ƒÎVKRÔ‡AJ«2Èâªïj<âøcŸiJ¢ 0åßp—}XÊx`Š8dHìæo>û®ŒÊûu÷áÅNˆ?šïÓ×!§HO‡`-f9]<äd»4ÅT `“r3ŸÿíiªB·auVªLi™Ù¾Æ'7ë‘}oŒ‚¼Ðׯ+XØ5¬?=ötöß`¸þnö¯°g¬°çœ {ŽUسWaÏcöœQa˜ÔÜ"˜#|B4'Æb]†,ÂŽÄ‘E)FéAчq΀h€éáЩ0]9F?(ƒå¤LœË̾'ñ*E¶Ï%<‹4êIm¹X­»ýB›ˆ©& ¡‰R[Î vfb5© sxPíÁûêêîƒ1SÞ]u’ˆ3ôQVw膓Šó^Ò99±ìáõ.)¨÷#*…­¹æÐæ±;´qf‡6`u`­Ù¡$c¬ä?ör_—%›#]éãËÇ@ËZ±â¸Ëjq®Hî ”AñO #ŒÜd÷]ɼ s°” ÿàRË3ÿŸžÏ@¯Ïåâ;øž&äûùvYAlŒšö~"?z÷œEκÌ(ʧE¡ñï¥ß[K¬\”}þ¸‡>Y¼„¯»Û÷þØB‰ÌuEäÁç8Ç‘TUƒš*`ìg3BÜ^©(s&SüaÇ'¾²ˆ×•1&Š$Õ/WËÚ&PöŒÊLv>Þ'Gñ³‡2äf’ÚŠ{{›Ä]˜jKæA’“¨Mò!eíeþUîØT¯VqgøTçY/*@c! Z=Aψ(WÓ%ñHdF€º“ÁÈÀää0F×™ËÙ+9FpÓì]c»ŠûkD½]K½nÆéÖÁU¥Hq­Z_‡z~9¿.ê˜ß›$f{q‚TÌø"㥣CjÌ*#±{wýf””X¹¯n&1¨O¢B":2cPœR%±t~ï–F¥1U$…GN"fpäÉG¨þµ[•IË4s/{üÂÝŒ“h¤Ç&÷3*“¾ˤé€}š°µ)Þ Tì~d¬Ï(›Í(“E¸Ë2˜x0]Qo¶Cf•øpŠŒžat@È$d7Ch_ånˆ„\~<ãœ~•g{-Ýi;á˜Í—¡#tqıÅQ4þ5I\Ö¹ÜÈ–h>;áGñQ†Êlé4G¹}óÓ }Cž.?ˆ²s-}F¹„1Ë]s¶cKÎ6²âlù‚“Äß¾™«å¾Ïíû±¶¿´ú½mïçWʤ8¶zc™‚†/ð©”Lâ¬#êÑòAX‚Ø)Ekõq¥ÓÕ õÉò褒{|fà3hf<Òдº»Áë¦ÇŠñË>Q²ˆWvVòö]µkšó²%ÿìœÐ®Ï%³ëLjìú‰]8-ÍooîQ‡ðn“‹ôA˜ô98Ga<ö¥è0Œ`‡U¹.ûìŒ÷ˆ˜è€Ž‰1K×…Y!æœÔHŸ‘ˆ‘9õ°ŽIÉ9­‹Ãc̼ó:/áWpTÇp«ÆSħIá1UçwˆÈòä# Nô!„Ïáy§‹lœ_œÙÈ"V0›mÝ¥fCѲ!ÈŠ„_p*R 3 ½ŸÂ€ýFùín 0T ¦„FYÁÇ5¨a»ÞfÔ½¦+zÆE+j0öpi V"‘Ì3ŒÒ’ O.8|ÄH¬VšOà[JÍqV<s,Q>Ëïú#Û²üé‚?Müi„`ž¯’(¹Ð;IœWèž„(Q¸Ãæ‡%QJ£.JâÌF}”A=Rk_ë¼d”tÕ(A–GF¯ç󘄎KâdBÏ%ćÂJ'ø2Á3„ù}LxïIV6K> UåBŽ•ûg5a|tø""‡ôˆÙÂS†9,Ñ3éYf„ȘS—(£1¯.H"é|„sÌwö¢é¡i3P-Ó"ZK~U{ETíÏŠ²9ûèÖñãÄ“øDƒ²Ú.>Wÿ£0ûÐi¬u¥·"ULa ò”ª}Ä/Œ½sÝÂD>kúD)zäŸÇFÆAL¬üÇa“–i0Lä°q$&ðý›1yrºXíbæíc’£hÃAÆÎV»™~¼gÙ¸ÉØ +ÅÇù@õ —òÝ—º”Ýo ¥ûûr]w:‰áîžÁ¤—ŠìwOgpµ(ƒQLß/ä~`—ô| Í¿ïgÕLFð:Ñ`vvüÒè-ÁGzKp!”qî Š›zº¡ø…L[:Ó›åt„¤³Uö“N9QC#.‚J½à°m/ CùŒëü5RG P¼¼¸ùå‡3·Î/CGбÑb@mˆÐº“0æWÔ†eÝôpò;"OËÎûàZ&›à|p ”1¾2&äz@ÓeøD ù©ÇáhP«v¢Ú ¯|F-xd2Î-xibÉaTÀÎéý‰Úü¿žÍ+4XƒœXkÝ4¥xÀg ™Ä|¼ÏÎćMTxD8¿Â·cæ¿ìçä¿î³l &à¡ý)¿›• Š!(ã>{ ááÞj Ã:Q­è»ð[ í5ê"0g 8–À#ª®½¥aؾ ” žÆÉâÝÇ[0zÙã›_“ÈœfŸP™Ñ4Qs¯V7 ¶FÓ§ä[¯*Mtü!N$ê$cJ qªo«Mžà…Ž¥M˜íœ3ÅéDc´½SÆ‘Ll¿>ýF6†·=v4é©yg.w'Òø¼ .„cYúù¹¶°…c#í7ЬHµÔ–EØ+|zèûöˆ“Ü}›ÄqŒ±V‹µƒð£¶÷ÆW¾5´4õ)µgmœf˜À£©Å%  ÉÛf¬OÁ!°/ë!dw ±)Nq:|ƒF#ªjŒÅK¡ÝØCõÁéÍM7“¬…¬vÈéæÈ²}b`™qd«jd@茢XùYY| Ï½['‹Ö®*ã¯M¼fpÐéµn$ ý*«>,ÎÍ_†ûõ!ƒ˜i³N~*ë‡,§„Ü»WÃbÊÀÉKãxÓâg+Ð:æ–"I¹*4Ó¨NUÐ8m\†9Š £øCO4L:ÅPkòTÇ•äñŠGO%9’xŠäQk˜t[Ñ,cV'xF’øLb5®<ËBÍ‘­¤]ïaÙÇ:áYÀ»ÞŸFºÞO3®÷£të}ÀUy Ê zZCˆ$‰Òm <ç‚yëˆ$õf©_gø´xV‰€´MÌÌËu±,›²]ÑëbŒ.ÇÓ*7YµSëTkœã1þÀd‘Ç2NÍçÃŒ]Öû¡~‚ï8§(ýu™èï2±)*‘©b¸<É©[ Õ‡*½ÿŸHÈÌLaÂäd&Ò„8È­8„÷×…Štë`ˆ“1ÀvUñ. Êc•¹²MáÓD¸Î “à •üÅ:mÊ¡yJ˜lýc-ßoõ‰V~ÚŒ2=™ŒÎ#Á¿ðãÃ[H1ë0c<ÉYÿ(#’AH;òb”¼hÐëï—*wý¦¨‹f¦æ69#.ð-¬] ƒ…sl•Ç:ÔâüÊ᳊6ñBG€æÏÌhþ¸¢朩 ii®ÂÐâdz"Áÿ $àÚøgCîMÆp*¬ï/%ZË3V`|®Á@ßù²õ úñªê÷‚éÉKA¦z~†0˜¾1lTØFîÄA œj³< i^%Üý½; à ’bBµîU¾L‚D‚ ø"eQé" þw¯€£ êv]=åF Éû…¢Š9E‘Ú”þ ðqõw¿°ÎæÆ³=µj]Ã#ÝS>u4¡úÕs‡}üñ®›ðºÞ(ͺ,Ù‘d$ùm÷)<ølºRнá2Zó¬¦3+•uÊMùG,Oáf®3~sñ·XŽ£<}ŒÊu},ÑÍÔ°ó"NjYƒK‚JbT:uLŠä¼®–‡íB.„`òâ¡ë°3䱊¦u‰];ïOÄ/Õ3ø´S¨ss Þö C’Ço"bù™ôYõHsG"hšÅBÜXF_T¯ ê.ªN$Xq(‰}7·yïzsž1žòé)OFÌo§ÊÉé%.˜$&$¿,µ.Êõ©%ùýÐæ‹A0 ú+¦;UZ{Â÷iÍ÷¹=ùûˆæA&Iów¿Í&d-J=Ü¥VKö›ÿƒ^o™´ß0f. ƒXUm9Ô‰çøÏb(}íZmWŒèÑssÄ…BVM}â¸NæJ“ÞÁ¸Æ)c€<¼yZmm;®=ö"=(ç,aLJeC!3_À‰ƒöî/Ñɾ[YwÕü®dIÌlßÍŽbæˆaŠ£ºÇS¹¡©WStô:Â…Dk ÈtÑÔ»zZ±crf˜[.h>¼0²Á4ÏE½)ž»CQ.E×ÀY±;ˆ}„“¬ÈÇ…lomN»™àùÌt>Ö;Š\êÀ\^m·(—Ë¡:Ötû 'e<Öø*†m7srœAŽê¥øüð\¬ÉµÔÿÐRôV±¤GùØ&ÿ\ëÝ‡ŠÆ*“kµ6>`þ§0=½ˆAk¢_ÅgËìUÙ×E½“mìX²Ø}sX˜g-.›¡ZË…_å,ŽNf¤3™©L åJ÷\è\»]o{„öѪ¶JÿCýŸËITè—á‹ø:62ùŒ’ƒ ³™ú[öq9_¬ ±A­Tká C Õöy±Ç©_'Xe1Ã,ä>[H(Z»Çà)0\·÷¡bý€žŸôMeµˆYÝ€FpÆc%…ôX©äzº|‡žW!̈ð¶tñ¢ï,™é|¾aoì¨÷x…¾ü¢Nêñagf.+?ß½ÿuñËû»÷‹›»«ï^Ï­<¨ÌxÉc%EtfQ¾é¸Ê?¥B!;wG¡MûŸŽÙQÞ`Ÿnö6ùLg‰ûžÄ*g~Ní¡þÁÊ›™i &Õd=žœºÕzª¦^ÉõAßtÏðx-qª9†×,)~fãí‰f|ÃëÅg©.e{-, h>íº1‹ÐTdˆ.Xß1ó›9èÅà­\Š>-ÈÒ@Ž~é\É…èE{z¦ABtÖIæÖ)Ö˜‹‚س-<]·à–¾zœ&A*>ðÖTÆÌ ÆPáp×{»é–M÷TÜÂ&ðê*ªzD•D‡jÕ ë4›Ì¡R)E:œX¢ Z¨}J(Å,çm§ÞÞý®“ß’ûfWJ·ü]î9”€ïô„$GÞqÊ`#&m¿!º¹;6x¢F5‚ÊìrÉk|t„UÐy² ~¬1Êλ_Ô}î§×x‡ÔÓ~V÷¼)hõLX¸’^Õ“”ŽeM®Ä¯ï‹r½jJYÝX«€þL¾ž÷PŒÑŸü•¼†%ú'@d•ìІ¿‰jÃDŸZ‰Ý¡U.®%›Há3þ-ƒ9±Ób ~‘‹F)ö÷“Åd- öòºx;ÚÁ[…m5¯½{˜¦Û~ó#ö†Yº‰‡  8ÊCQþ\ª“ˆ{ÁßÞgŽ ‘Z°±÷%hV34g~[ý€Ið¶Oè ÷ž~pouû]Ê­”„¼hE—¥ÎæÃ”<ÑùÊkhuí@C¬ºâv~gº ·g¼…gy´ŒB29>Ì’ñt ÐV…¥šÜзÍÞë"öÁ’`°掮c“¥æ(›'†ò2“Z=gZ=OSv*ޤD2•ˆÇ!L ž„ÌŠ«Z@“ã"ñ“§ËéÀ¬X æ‚)DŠþ¤ÛÒÈ÷ñô˜)!ÜiÑh+§;¦QÁ(¯V;RÐÔ¤¿Cs|¡JÆQô‰…ˆã9C°)’²ÿ€ï8ç÷EÕkÙÔRÿÐ4‹UÙ4K9˜ŒùŠ¡ØsÀj‘M33©à:mÿóßÿc:ýä]{ØlÐ7:£zW‹²,µ^Nú±ÔxECf •yœ§S‘ÄLìââB«ö`*ÑW+úƒvæes ß)ªq–q‚Ê‚”ÙªÉ5…0çüVMÄB±„SþgØ_\¾Ã劵‹Àfñвñ8pÉh£™lÂÈ–ŒOwð‚XQ¢s ³8FÀ3Íb¡ Û,jЂû/óNoûE¹ÉàÃqœÏ¶Ÿ•—BYµüüË=<‚Å²Ü ïêæ9Ún ]( '~L^[ÕÛ‡e7d×A˜À㡱Za‰=~¥S=rÈ’Koiò§1Ÿ¦=ÆÙ#<ÂN7ó¬—÷!‘òßÛ30lÌr=5,ë=º6gW}cí«‹í §ïÍ¡!ïF²]w¨2^ ØÁ^þrýþ0Ø€6Y°º£~è°\ÖÜaÉÑto…›Yœ_”HVìy2w )ñ1x ·’ ýT©±«Ê’ª¢=ˆ!c¾d(FB’À:æÛùûûÐrS´9ÖÛ]Êr/ŠgÔ ~dÁç&et¯¹aÖ¯¢ó%¦Í#§äñÅO,ˆ1WÑv]ÚÀÀÜg££ÃúÑ1>?>E”\Õ/ºŒA6ÀrŠ7ëÜáÖ&!ûŲëöEGšQrÕü¥ÂWÅ—zõ/Fé>žœÔB ÍüÖ6ÑÐâm,Ò¼ú‡gQƒY%nçin+¬°Nô›SÈ1|”!ÄÇibRÆÕë´0Vs7¿ú{jƒYÖ}§;ïh×wÜw?ñ:…ñíúþøø½åÿ+¬â|É#hF6j:ÑO–°.75ÑŸN"úÓ$џƈæÙPd$[Y˜MŽ=ÅÈz8ˤâx5&Mz(NŠ)Ô0ÏJa0Çוf”cª0r^ž±BγV vûCš‚1ñ2Ð-³yóá£Ü¯ . =[¯žÂ]S}‡sǧà’R·O*ØíO›ŸŠ yîûÞ5?Åᬼ`Í‚`¿±âsaÒË€ òD{RZ®öAjl†üÔ|˜'Ü{$TdPzÆukA…j&OeŸ±ä0.‚]¹ÂN~ƒÇ Aï+[>(*y“i| &ÎŒé!Þ$‰¹'F>nÐÃù)"X6¤[e5w“¥KMEò9û!Šç´(>và&åwÐp½öŒnó@%ø±|.n..£;°¾Þ2ÆàŒ¬Œ™ „¬6ï¯o[H™Å+ÊÆã0Ù¶§eAÆr‹¦óˆx“ÜÜéE¿ŠlÒD/ªÊë{«ëÏ™ ãû˜`û’o772)™7zpKiÝ…¯C-®Gϱ7#(´ö ÔÜVý0s©6Ò­Î7$àIkä¡‚]Tšƒc\(Ü¡AA¨ƒøö‚µäŽnß2d»H.]ŸòU Ú7–Åê¡Z}A×óèòZGã9•S´Ä.c­dAŒŒ txÈßÌKÃü棳zË×<5$çà{ªáðÐ"ŸÐ£°}“Pª «¨š ÏÍ£a¹ëƱL×Þa¼ëg&ÞãÍ“²&í:·Q#’G°EÛ¸¹ô8:$‡±1j£àºÝtœSÞu±õÙWÄ&ÏÃbs¦ÛÏi=›1¸ÏJG‡ÌtŒÏ΄C5 »€ß~M4“ÇúÌ0.¤…Á>' ä$Ò–¸cPŸ‚c•ÛIà SܰšStàÑ•â“m`}ÍYÅL¬ûÉ75µS°gH“áäšöÞÅr^&Îee‚ùiœ°?,2˜ÜrÌ\8ÎÇ5gi¡†ÝÇîëf}Ê7Šg!~d•ë&eu÷ñêÝÕØ:·èË¡ÜéÄ,ò8Æ™ù||±fBVŒw¿ ç…ñWà×`¥×²žE|Z;:ß/mßC1:ŽM| c5VñåbVt‡aU‘R¢mTª:Žýê”æƒsFýj¤ñ8 Göéþ26S¦]GÆ£À«–2&Un¢sÔ2—-·ÚžAùç‘;í‹7gVà)ß!÷Ä|ž0úŒæð‹Í÷YGÑSÿÂ={Ð_dTlÎ#C9‚½;Gp>Eöãqß/Ö\›fñ±œÒ¾ŸQœKÌ$áô>Ü*0Z326_ŸGÊC{´tl@ÌØÈw©™à1rʉi7ìQS‘3í&Õ%¦C£¼ž`L=Fåc9+ˆ›AœKÊ$áœE“Oõ°?”v’ðº]Ó¦òåí§×?„,³ôb¢ø8[_GÆMjtðL˜ÆTdvÕn©5e^t«S,.t+"Ö­¸}…Ž›±5Nûn-ø#Ü»¾jçõFn³»éù¡sg†ÎÌ ÝŠ9üÕÙïõtù¢ÛlÀ4ÝOÿëŸt¡ºa±*],•J±@ÔL¢f5”!7–²9ñX-àiœ:¬H—ãRãŠKÀí*!Ìcrr‡™2Så-»{(§Û(â2Àp”›wJð•ô#«'!/äÀÕ×éíjS!ØÙ¦Z ÉúâîŽôñl»šž@Úuµg´‹c9ÔðtêäçÙ:¯™ÉkfóºS‘Å=,0+|« W¹ê3Œ4—°w:œIÚÔCõz;&¿S©|éå™ÿÍÆyù—ÿþ—BÇ+àgŒ7Ø^màÄvs:Ï03 ;Y|™Áb¸Ñ³ÉìéÐiõ<–Îgmq£ud°·ˆH}÷C}„‡M9ï—S©|ö å¿lÍ&`®â kCÁ¡~X‚Y‚ºÏ%íáºêP!Q4¤ˆ1Åõ½àÔ2ÞøŒ€}Rî+?sض–sÞÐ=¿*Pþézrß6èëà‹®”(1†''¹Ï¶ÜP„öñ– ”ô_Ú|=ÛRÏ9A¨ÙEe<gp#Øì³Tz$Åoе…\d7ëâX6‡Jyµù˽Â8†òñD$¤"#tk(Áß¿ íV0ä„/ð!nUÁ¡BÞªa*‘a‰¯÷-(XGD3áF.ø’Nëä”ó þ_AI.1‘0E¨Z9? ЦÏ/A<[ƒ‰ó÷²£óñ`_öà×: #K(°a-'e—a*©WYãJ±E3äƒo1V8u¥¨?Õk•™ÞŒNù« ›UÌDÙÆr„µ=–5ô7«¯øV#‰\ú›Õô÷ñ3ùÊ/ó¦^ÊÀK¥|&åÄ’%Ê4Zšð3D)ÚoqÆÈvÕW}Ž‘d>ù®J}?£¯ý(—ÝëØ·èª¿FW%¾GW‘®šø&Œa¤[4ÝôßéÐZ…(«cùß%3·H*ÑŒ'R¶Ê¢ß,%$g$÷¾Þ;ʲ¸fYj’b¿±jN¬”ìêÛÀx9#-ÂXSãƒÙM`,•[rMÎòB·nð;-Æ©HQ'mëþíýëÁH…«ÇwÁ[´ÄÖŸ’…O؄˛`á 6<„á!àa§,*ÇR¹,\¥*þáƒl¾¢;Ï/nUí³e&ÏøÔò¤J2^†°2rNx~J¾Ž÷@šÏó¯A®*/¼ç†“ͪiʶ{*înÿþ[ðê“æ<ëŽïY7«gÝÚ,PR­^q0—SÍ,ù¾;Ä9¼øûnµÉ­Ÿ‘'Þ˜2§cx0FÅkúˆß TSÇ]_ÆG˻ҎB«à*ÛM`«éÚy{”Á/ûMך±Œ½é ’%ÞtåPþé$Ê?MRþiŒrÞ뮺¼"@NÒ}àÅÁY¼rHÂ#®Sj5†ç”áù×HÍ:I½'a¬vm„Übä‘Sö‰¦^¬epÚ•9“C1Nêp‚6(^ÈÉCûšÍ¥Ó”ÛEÝ7”\$§%cf2Æ¥¦àl0ºW¼Ä/:ë+9©BýášÇºÏ¤y¬ûšÇºiko¾ywñKñé:w*þöWxHÐ…w'I@òÙ•b¹ògWÆ–;ð¨éÄFÓoV§Œ18#(£GÆ'¡¥Üu7€fú¦#òÊ„ hAŒ3VÌ ë"9OãRÔ57+^£7aq~U º×q¹£nR÷ÑG1r\÷ÑÀl•êc¾jµX‰„„SDdð ƒ ´Tè'™-U¦)mBd°ëEÿe›¤àâ,>“ᜄ‚²6¤mc*噟çW({ýû®=äòëõI Q¸e²þ}Æ¢9!7¡äõ¹nšBY„=’Š ßƒÛ«¿¢½lÀ­…ö&!÷¹*Ñ óT‹÷3]®µ”Ì#‘Ä0å£BéH;Ta8Jjñžü[ïÄMFþ¥¸‰@a•”¦nx¾ü³Ð® åŸÆL&Tݯò÷ÅýµÍH299ÜØ7rIæ>ÞÒÇgá#™àlKÁ&‰/Èæ`ëeƹ˜ÜÊ2áp-¦¬° I“4HBÕ©úÓ¯‡%èËò½”õúƒ±ÖmÅ ÍqA="Ž’”yzÖÊ}º¨ÿ¬”Ýç+c£þUñ^þ]¯J‰3cº¤é¢©†Wp,ñ×nIDûõT><“=?ŽgÄ•QÏû¾—^µàŸ­«œKVølŽ>Þü]Á°ÂrCG1ʼn!à$ÎE‹¿dTçõwýï•Sá——ó÷?Në|ZÅËźÜTœÏOÇ8‚kÆºš½•³ÛÌ24•X)¤üÄŽÂ]†6Ú'icb<µêyˆ5iPÛ ›š‡ö˜éØ€˜ŽpÛ›¥F*ÀÓŒz/8]ÅvE¿}lÇ|"C;†3IÕS¹ëý q<²Öàú¹-w Èá¸qe‚t6¯éß¡BC” ’ͤųv=@ÎWCÝï‹ÓFgHâðFç=½Ÿµ,¢£ó‘TíË¡^oÓ#Rn‰¨èEóÖá&tµ€‹ã# бõ2›”†„ÖË™õÒQÊé Å¡¢Å²Õ™Ã&ù@n2âOäüD#ÕQT9LçušŠ´4dÄ "8 ŽØ¿W+ØÏ(§×ÍÁ‚™¯”q‰|OkãBÃäª$¼èxû±×G­)›÷Û¦¢ÔÒXºï†µïë0ª{ŒÝ[/ßx²o3´/ƒÐÂ_ÖIu«êNÅù'ÖnÖbTÄèµN˜qhƒz¬ÜÃk'AüÛðÓÞ£±¡lKÎßZ†ßáÈCÓ Ž=T„¶-µU~=äh¬»nƒµ4›×Ìäõù¡ÜjjãõN¾x©æ !—8"mÉÅ(¹Â1}¤ ü®LNÁ´ïäÖ ä¬š.sÚfl$S¤ß:½Dds•ÍE—«Ú(Ú4å±ËºbŒb Šóš¥›$ç‘ð‚˜u%>mH Æ ŒEqQ'du±^Ÿ¿{§ Ÿ"Àï v›²5Zá@*C×@Ä4 „§7 íó‰®ÕþÛè>ˆü büA‚ˆ¾GÞs„è‚:ÀêyázfÉeÑŠò¨¨ïqU5r¯^#¨Œµb¹¶DÙàÚÖ†ðsŸ$C[6;S±œ–“ _lÁ–³Þ7ÏÅž,çŠbY•Ü•Èq<´8¹!žì4”É#G6NÒ'g”Šu½ý ŽoyååÕ"£”3ù0¨O ¢ÂjÃêßTÖÄ‘–êÏ\’r¢ïË„ÅãfÈ©`FL…¸ ­,tp”€Øƒ·zßšÕ§qrÒ¯cýÎÍ$gµ}…RŠX9N,A‚û(ëÉAî*B¯R¯C³ z BŠ#©ã&iêwK캦Ê&ËÀ!QˆŒ‘„ðI‚ï;pWÅ“d½ÞŇÔü×\aÒœDŽYÚ˜q¿{¡×=×ç=ñ:GóåàWMiƒFzµŽÊëÎQ´OIØMvZÏÕiqÒh»c©WS)ªÔò”Qz©ÆHÚ±O¸êv=àACV5:… [ÝOe_DpCÎÄØý@²šu€´yÃ9‰ßœ-|¬)ãYI|¡˜>Ñ£ážØ}Ps÷G¼RÓS8‰Ö«vÖ~aµH †¿1ùJr‰¡-+ŠQ,çç$ËèPèÎHB9üü‚OÈ6 ©¤ÑLŠ#äZ±êºgbÿ8tû2%”ƒŒH dñwLÜß …)?pU²”>Ð5L° ‹ gîç**1Ù¤M2à(+C¹l p¯5užA…£•¨VÐÈÈÛûFÑ†Ž vÃn2wi®ã´šÛT÷ćôÂl<Ém€ŒrÇ Ü`ˆf]=ÉaíE:Å"òøª4Éç˜Æ'¨®CO?³°©}yâ* N×ú-|´I°lÄw (¾?¹¬4‚õ úã'O’3|êÁžÙ0™dö¨ës {“Me´oAsÀ¤ß3˽8Ü¿dRòà>+Ó1ÑiüFGÖ'}ïLÊq¦Áà8åÇ®9ìªL:ØgE‘aíQ8ÔÝ^Ê~áŸâgeŸnÀËÝ ²P¹Jî¹8ÈÚ3CÁ䜾•ÕUغ8,Ûô´é ¬0 åÒ0À§ÂÀqn™,…ÌÝ] ì ÷vN¢ÓVR*)NYxÍ‘Å2@Šh¬Ñçgá§‘CކYÖ ]fþødáðU…èVµQ¤pO Èœ$ì¨ì`•´j³iéY´ ìYFdtê!çŒÇº¢½³ίƒAò ]&¸ÌûÊ 3139H]yÌ•-V)èJ®QÐv&ÌÄŸgnña-ÏÌ@æ ¶u WÁjÇˈ€(‚K²`þ ô©Õ€Þ¥ûªÄÃÌ5Û( Á!Ì(Š¢˜4Šf¬úÐB f‘øJu&ÈÌjÍtfwhŒiQ¸.sßmÅíd{o(“ò˜é<>¾WÌû¦Þo0ä¨ 2—…D/À¶ZË=¬ß6C LÛ ‹p ¦€H®Êq&sœ©g*Ç;ŠƒáèÃY/±p=$c%—‡oÕO;>øšiÇÌ·îÑ¢™Œ‚Ã6¥o=ÝÇÒ ­ÜºŸ9@£Ñ­ûàDflLøô.§ßIÔÏ¥Êe»8ÖÃ~Qn6u›¹eO ™KÀL¼©<’˜R¬ìŸÊ²›Fè¼\Ùw †rþþí§(eñÉŠÿšÈ-gÙ–J%Ž0oA7šQÖãl][HÌAÄËur‰’e™(Åä§ –éO!¾#Yñ_HS}²ïÝVÔî俺•ôu~“÷°÷¾Ž6ndÊ΄åˆÏ;(aR{ˇ9l¸—F?·ãÀ"ü¯ý­³ðñç§T3Uîøà$ûÄð®$Œ} 'éimG%é|ºãDccJSˆuH÷-LÄ÷á 2?¡Ûÿ¿ßÇ;Í´ÝTNzÔ¬]4ƒÓ `SGÊpûIÞ#Œc 3¥Xc`Œ¿3ñ½9¥ÛèI_Üm©ßý[×âK~KõÁcm&щ\e:‡e&¿f§ØWÖªÞrgþYج W$ýöñu¼Ä £J½ã[â£Ü9æFÓ)9{œidìãdwZKЙ:1Z̯)`NѦ ûp!é¬%¾;wñÿëô˜÷ Ëÿk›T¶ñÀ4/HÌ Ÿì4ÚúLŸå’KrŒ^H,Ö.Æ7øéã‡Iùâ[%§[^ÆGr[Ø÷ù<¨ygÔÓŸ)†çDQÏÏèM:ŸÍI«DÔñ3€H]bý.—f¿#Øï"Ôú]ŒTß=‚cÚì9 —ŽQ‚bß ™;¦´(ÖYÃLNk`|NÉEñ²ìñõý-“4ÏøœpÙtx˜XÅI%“Ece_S¨rþÁ2Éå8Æ.ä5Ö£ícW®}×59D|,'#ãfç2Ib¤ÀÃ8Eƈ¥é„$˜h¸VQY¾þTh'ЬÛ(9§hg'à,Ft´#‰Ok;­18ìfuå ²Q𱝦LÐN‹m½:¡B}°ÃOFF+Ò$:­j_°Sû­ÑoÄñ"d’¡ŽUgHÆsoû­ä\ËðÅ–_×ci8w†‰Õ|Åi€%”ã´LscSY´¬~¼‚>_B¡No~­Gàœ4EÇêš'<­šÿPÊÅ<›l¢£#äÆ}Ô‘EêP¬*™Î8§©«ü M¥åÔ-v¦±±ªÍ2»Þ ›E¡³ÐeÕù%Œ¦pÊ¥ÑҸɿmŒVÿÄËü”rL• Î=ç\ÇèÆD›˜Z}ZOˆY”GS9äÕÊ—¡¼b„ÙÄ ¤`‡é¢xÅP/,óÛÐDºXQ.ÚžbYÖªtAÍ;ÑhƧ—*]ž©’L} ™hYûjKËêôO+†AN}/»Ó>I\ Uƒ¶»¢ôªáÌ+ùqwz™ý4±ÒJÌT9Mß4¤åt_nóK€yÑ 2V&›èÄÏ%Óq’™ôFˆ”b]Ã#ýàôöŸn÷“íýû´ó€ý)¼§ǹÆjÔŸd-8R͸Í®âÍÉbl¬jY²ÓªUéq³Lr9ޱ yŪ""ÕuÜÑ1En…Å𜔊Uš“ôÄ1‰’zœóÙŽóŒ1Œ.¦nÆÏ_Nß§Æõ‘ñü;ãŒlÍ8AŸZÆÊ3¨4ñ=ÌYEhÉê(^ôr;µ+¿TC–’Ëšd˜X_Ù%Hæ:¦(«¶¡lg´‘ÒPùœ;pIAý–Õ x¤%w”mXäÈIvej£–5ê—÷®»ßç5}ø”þ^‡è,PRõ­:^”‰§äuZYìNVžtò§^‘nÛO‰f‹ ²[¤ž¾ÉîjvÄOûÏ4/!RvLcH‡Åx¼(Ð>·P ÊìÒ¡ÕÒºÕŒ4£] º1vÖ”:ýŠ˜ G»å+É6¶>ìŸeS%οãX-ZÅÍ0Îrp’H2È¢Ô«B²i»Ç¦³¹)jŽðadì•L!ëd…¶º#™G/ŅdŸ‰[™°ßWdHð±n×Ý#Hß-šzW'Ǧåïfl h ÷õæ¹xW·‡§âþ⦠ºN‰[û‚ÖLS©‡loLoÁŽßzW§Z—ÓRZ0 áV˜Ò#Fš@±\÷·39¦á‹™rµê-XæÕÎs-›þqGÇ=>2" $Ã$#z‚QAã”·ÛhrjÔ8|$&;$öÕ3E0c½ØV-tå ¢8§ Ñ3 £…Kš'”Ô·ÊÖ1¼ U³™‰zÛVknU›ñ6þb«Ü9ÌΡ áW4ô=S¿k¿>k/©èÎÔ1ª)u»]½ÏáÄ)ŒðXaТ?´cwx%\¬Êv]£›‚¡u¹Í`cQœŠ uyÈ ALY¨wQ²®0›BFlŽÉuê3à;k7ìð|“«‹_°RäÂÆùrB÷Ëz—4irNá2¢0ÉGý±©ñrÝã )dyj‰c"¾/ ¶m¯õ#·à–Œ*îíå½â×$ ú(Ω±† Lò•ƒgTÅ_iA<*¢J97–:¾+׫MN›u‘ ŠñˆP $…®¢œO¥ÈÈ%òê!mdÌ)a¤c„ÄO˰àC‹r G¦{&•Ù‘ákW07ÝËì†rWreYF¹þ¨tÓßm÷6lãX§,:Î+ŠvÚ£#ª=¨Œâ­ SÍm¹§‹¢ç f˜S“‘t3õìr³‰øø¥Bn/>`Å26™ŸÜƒúLÂÏ­d°øæ °âám¡è(ÃÆZÈsw-­q°)á9L˜çäHGo¤6 ™5`Í­ÏáÕÇ8õÐ髞d‚ê–õ~(‡çâîÞñ¦)‰|6ýéeu¶=+ÄC÷ÈFI9ßþ Èõ9]¨õÞë4½3¡š~.W=0…¸Sêà(›Oά¢9ŒÅêÍ­,˜ó¹¸•_Gö`œ[=,U9È! +gpê£~.nyóÙŸ|å*a_f;.’3W1.k(ë¿JwˆYË ] $pti¾Ú^N"Þ*H—ØØ™Êßâ)>Ú²Ul¤ó’[žî¢b¡á—m¸J2¹d„1|”r8$:I3èž:ó ²ÅVr Ü-Àç®x¨šfa:þô»ÿrýЭt1L>3pÑ‹ùÌL>÷6ŸGÌ!,a4²ØÕ_º¯öÏ 3 MP8¦‘k) ¸v‹Í“&c[ȈTNáT2šAF÷ï/n®½[¼½›Xüúúï‹‹îWWV<øðZÈNfd¿V4d2“™ ™Z+öÝÝݯ‹7wïAôÜŠ„ݦ½Ð±aâÏy:O.lLYN©Ü+ïKxÌžÜúçýH“Q/5Fÿa_¥6õ bÈ Ûêá—ãK…”oÕâkr?ʽòBzX¹Wëq‘Ãs0`º¶reøÌ&‡†$`kMÆhÀ§Â¢kÉJ„rJÆ3Ò6"Lz- ³™àY×’©åÒ³½'§Y’GM2¡œ\¿“¨ú4cAã&É™SÃ~ÍTJs.Ó‚º‘ÆÖ8[*)µÛà+¼¿–%'±7q† FœB ¸¼0È'‡’¡ÖžÓÁúD“çÖ [ÜÝBhqØ× %CØBL·I‹ÐŒ`;bZ$ì6fÅnÒè­>莖¹ý¨bö]׀̇žû&ˆ3rf”Ú¢„'ˆ[„Î@†Xâòúǵ@µÖÃ#嬆6(åf¥N¿8Vh/j77÷4|¢PÞ?г¬GÄLzûx²_-íªÆÑ V¨àõ^¸jp]¸¯v_Ÿ?P<3Ù¼”cš\ÉM Pß@˜O ÿf§ñò—įs.ÿ§pÚÁ®œ1bUÉÒÖñ—3 ü³Ê'- ÓÏxú;Ç瑺üx/% ¸\Sž&z(·Ø“_Ûöõ®‚ûÐç-“‘ÍtF÷¯ßϯç^ß~X\ÞÝÜ\Ü^->\ß¼¾ûøÁsÎÆ çïA³›avq*··¯/?,Þ¿þðþïS„¾• ãâ³fs“jL6Îä&T6Å7Õ6èÐÖO…èð"JÛª„)pC¹À‘m]ßT)Ó Ç:ÈÉ­•ïïÞ-î/>¼]\]¿Ñ׫/rż*e‹³€%£Î §dáß3JC?`¤?¨—ÀdC¸\ÛkÓ‘þm:ÿÖnx`€ ®g8´SUÂúñU!¸)å„ï‰Ô² íÞUûà ¿M'3€/}@ÓÚHGN¹IFcIÉ0Î fn5øŸZš îU8ÞÌ´Ä1‚ç|¨·‡úÚšazhê%¬+h²A€^²Dæ­ $Έ±ëù7.Pʵ²R¦Ìëã‰ý—í?M—ÂTþ2À”CþÍ â^˜ÂÀ9ï9þŠâ/)®Ñ™½D'ë‚DÝQЇ”¾D ÊH™(NÏ&`D“´ “JÃÔÝC>ì¾~Œ¸Ú›ïäBúnþª¸­ö?ϯ^àê¶9¡©®ÅF(ë\ðcD蛡ª¤°âÿkñŸýOë½”4†1ò ŒI„ŸvƾœžÝ3×ÛªÖ_èG^‹®Ø‹V‡Šç€¹E=w«°™Îä^?»ëÕG­VäÞÍõÉö!÷Í'ù!Ô3' eþov/X)ËRÀÓ¡¯Ë_%þÿ±yÒ“BX^Ý×eNamA¹¼ÅG†0Ž’ES#N{P̘ŸÆÜ.¡&¯{½tþU…XyMÙn ò“òü:]>ñüjD¾S1Ú¬m6“_±ÕrmvÓyUm`“L›<Íà F÷»“×EL&˜ñ—Ü¿»øûÏp¬ñéâý|ñþîîƒ#¾þ,ȺÏí*£rç’”m _À†®íý}A7…fwß5 îoFŒÒ~¥[+bg6»Ÿáîë^ÿdbe¯ñ<¤lr„r¸/ÒÉê’ý`âà†bÙ¦D…Y°/Šeseþ|ŸðMYOdŠõ]o@Uå3*U{ltw–¶ÚiÑ>žÑœ.ápæÍÂ_“ÏrP‡Èϰ6¸º§\m¦HO5Zj™è ÈN)/,­†r²VH?kÁ;ú×Í:7ãh¶”©“åPÁb3%âü,)1žs“ëvµxÖCQ -N‹\q„Ž QFäwÌ&ítµ­³dX°/‚e37¾ðÎNfPR(B{‡™’¢0$H'H9–óW3-‰ù´Évaä¢tEÙ!Á˜<©–°Nâ-öõ–)üÊ\©Sƒ‘LinÉHW<%¶â+_8Bá¢jà*÷8ýE Š„ÚD3ZYö¸’‡÷GeÝŽŠ‚‰rú{D !øØHŒ+²zÛÊYßÌÁ¨Hzˆ‰n+rB(Á ùù£~ŽÝ‚Ï4sŒ†çc²•EDѺmRB”0‚ÏÈýP¥{…³;4!fdÁèóî;…ˆ=ì:4†7-Y£”p“H—çUå•Èz®q¹Ï&–äüÊpJ6KH‹šZ™X‚„2¡yO×0"Hñ¢ê2g5Ö•ûH[ÙËV6¹¨¼*«®<*묖;noÂÌA•bº ‚²'0¾ÁeõÚt…±‘l|'ËÎfþ™Õ²¼GKWåÄÏßĪ­­E›[«›²<Ôͺ|˜ÎP£(cdV\ó¹Ó¥kxîbXcŒ7ú˜l¸²éö ÑRÛCJà nðê"crÖ 63$äHm (W§•Cª 5EŠÖçæÐ®Ö QˆÑ[€Ó ýí*¨ìËa[E »¹yHˆR(µIPIHœþ“¢,¦ÒÓ€ýŠ~[‡&vÉsp$ëZÖú¶JÈ'‰W ¼ZU¡¿Ë16*æ÷±µ¡ Ñ\:FsþrXÊ¿R™+寓̊×ê)ŽÓwrl“ÙÖ¤*ô«„²&s)›mS/ѶHó´J`HµÄfI½²BmŸ¸ Vè(ì7 é€ÑKû.ˆõ+$ØÙ’–Xïße3eÊ+‹ ꦸØuRìZ‹]gн|w“%?0\$ä)”Zõ«$x&ó…«éÇFy«¹¬é‡ä#\ðýܪ©Ó|4Òp2Iità!_;Bt©Ï¯Þ¥H÷(ôIúPoöÑå<„˜¼®øªWSzž)®Bè7¨~†y‹²Ù“—ìi§–‚&™\¦Áë8s¬Kµz»}&¥-"qSÜÅWéú7ÕNµ­§;¨k‘Mн¬Û‘þX·Ã.!1$…àü«âñÛM½:Ñmöøásݾ¿‰ C¿¸Ó²B¢”]g@))Ô¾W0תaV¹ÞÑX)g€çåúù¯éu<ªÌ8‚W7a> Ü7¨þóßÿ®²!\V-À0ãåtØw ¡äv†îEéÖAÍ3ðƒù¡¥,ÀÿîªÞÔZ ïƒèR6FãQ,ªÕ &RdT 9ÛÉÿ²OÕ†Ø7„æ öÃaµ_KFæÎäÄÞ/÷`uû{ù£Z RdúXÌy±,a3Ò±5·m3~‡üÈ?å×eTÃvÕ/”›äiQ ¨ØYÊYñK×mõVaðëv[cOJÓ ÇQÝ ¡aŠ‚I5ñŒN£ú¨çÜÃ=Þí—™ÝÑë…Y\¥·±/Gçii åm­K+¿°Þ^ß^“õ´ÔíVw¬u}ùg1-OÔ úŸá„Ì.Ž‹—¿þ³ø!ç›¶»øý§‹Pë™^qb±ðo< ߌ¾^¸±²™tr•!`•1-ËÀÔ Æ¤šÙuJN©0áØt1qj¶¶®Ú3Ä ¹„¯Ëé9Ç Ô,­ÓÌŠ¹þ3K8 O Œƒx³ôÆ}GŽô*û²¹*›ËîiZºÅ–nÆdvìÐÇE8§>ÔçôD¶R* ªÓEF[ÛïØ+ OÅR!  êLpÊì×BŽ]C½²§ðv® ³š!B2¸ø<ׯ /ÎbŒàêÌ Öý‚Ö FÞ2 ³²Œ`Gu}¯–-ÊüÃ@Oñ•3\Vqq6¢x}ù#½‰ÿ)N\ìRTÅŽ‘;4-IŽ…es ûEe1ŸßÐn¤M5j äfΕ0á<LVð*[ÔñiÞǨՇI23Ý 8ÙpY#k˜øº Î;AKZ=Tô¦¹,·SrLŸæ±„r•!·¸ò  ƒPõxèRBŠ+‚r­žàˆD«£W›>ªW¬Û =Ṇ”ðƒˆˆÀ߃ÑÀœ–Ì‘†‚“|V¼ƒÝ°¥Xƒ:7ûòYNŽrw}‰)Î"<Ä¡Y|9N3 Œ]cR-Mo:U4yIí‘kÂ%ÛÑ;a£„›$컨dð^—Ø :ìuPqÓ'tJ ‚«÷h¼”柠S]Êœ+v T}9|1oî'$zP%ÚÏ,î½Òêï{q}〇ÍBñÝ3Q׫=ë²ò³ÓgëËzPZf(m­Ÿb×a‹^OöŸµî‹§#7YᬢU‰ðÛÏoä ÀÆò€¿á#°Üþ÷×AnÕ3œmLåH•«‚Ï@Åré¶or7×_PSŠ=Z¢—¤!êÎH'PKVÖtT ü÷ñúr¯­„nbô³6Ïèý”b?™±>ORGI¢Þy½lxDž=XÞÊa¸ –{Ï\„ÿNAíQí -ød÷“C)ô5• SR1;Ú?cÁðZÅV ZOCÝžãG·-mÝM}ˆVB¨[ìµ,ϲ鞊Ûk0øˆ £Y/ZÐc¯û„ ³¢LBtƒ£ÝÿÉ…Oy,ë÷róª õѶQ]ÈùLº¶ÊXÊ2”Ñd Xjå¸êR;#ú¢¹W˜ ©rïý˜'tL®Àߨªd;Ü(…ŒR»Eþ.V¶&lhe±¶¶¾£Y­ÐxÇmÛ#Çž‡›”jg±zèÀüÛ¸§Þ 9IÍ IÕ·êÎãë±ÑI<Þ}‘äÛø:)šïô.[CXî´ÇÎ *¹Ïi'kKC´Ê§J0ãí@s$‡‚ÃŽ´ð H}¨šc•ØpX’l©FV±lʨ A¢A–fPžiQZ3Ò&›É @ FÀ*=ÌÃA…j’zY2µÕÕÞ´&hˆÒ+Ô Ø€ 7[ ŒNj7pJ·7†Ô¨_ÒµQÀ “K⇸šQ tÙÿ«akÖµu‹z™íJîWQk0Ö+C3!HÆ*õÆ¡±=Îëõãûw~¦x9ž+D«“ôrö°MWåÚn·Ã-¶ú7–=ë½î÷·Ñ i, Œ  Ȫi4åù*~®e"õùe]$íåù²n!ò/³M=•Äêý(æGp–%øyöݣ쓥d5–Û43Ðs×)Ž ô$Lq6zÀ÷þn~ý›CØ¡Koç£M:N} >‰ŠËç"Ü·|æÉj*¥QЙWYVèáù,¹9ÑpêóÑY†'.æK9à 6Ÿdjkß<‡Â`™_“âb·h¯0,b©#7°§g Bc=×vÙO€ð?DÓÍ4=!ÊÆÇ±{l–twñA½1/Л¢T×´øK3™´Ly&¯-iŒ mžÛ´6î/­ ¥µÌCÚå»k£*÷ÿÕöõ;nãØžÿû)ô`‘Qr§ÓÝØ½Ø{•¤Ò©;©Ju¹’ôÜÅÂ+Ûª²¦lÉ-ÙUq/˜ÇØ ì¾Ü<Éò|<¤(‘®dt—Ež)ŠŸ‡ç€å€XJÇK{ šn{C hŒzHºá±¯X-ÔeÓÀDL ¼Aq¥¦uF¡`¦@tH÷ ARRíš<–ß·\›Ža4¤ ,蟌²ð§t˜_ß7ܨr×î뻘NId”b¢ÐŠÏ‘æð‚c1© jDp¿Ž9ywhŒ~Hêá1Q;jÕu‚ê: ºvU×ñïàÓû“ ÒJo<ªØ!³º)Yª§”䪗-ŽÏo·‰p,¥HåôA©Ä±/¼.”"—°ª›DTÕͨꦩº9’‰$!­çÉЩ²úð u´ÑÈÀÇب:ž(z¦r1g}Ô@Ä¡¯óç?ÿ™E£S:4\I”fj‡œ.þ»Á ê'2ß?ÿ'ò,ã žœÍ‹GొÁÎ÷ù?‘çsb®HÔ$sÉPøò _ú _ö¾TøÃ#þà+ü¡§ð‡A…?>Bá¾Â{ TøÓ#þä+ü©§ð§…$1][çªbv­ÇÑÑMbMÏ™a¦4Ó„F9ÔêŽÐõÒ×õò8]?¡ë_×Çéúñ]?úº~‘ä^üõ ˜ð“Q·Ù½¯eb²ÏU§ Ž³Ô”â6ˆrôº&ñ=ôü2ôª_û‚y°ñRnjãMŽš=ÌàáÅÎ0C· '@à<”®åP²½”€¾-·k5–»B vº9ŸVQ^¯L‚6·´½â…EЍ]‚ G•Öñ ¶M+¦Oî•Ìd÷ cr-MçÅÛYÎ6Æ‘JF‡I>ÑA{ç²›m ½tG£c²zÙ1 (Žûy½ŸÏ0 p¤•(æä”c Jr8=ÛÏ/öóŒŸÅPÉ’4’¯\no¡‰‰ ó¥~Tü àΑ;I[hÙM¤Â\*p½…§±Ådý*•ßG3°¹ºW€#›ª’Dë‡$«žtC¢'%XUJ1[ÆÚƒK¥ÅCj¾í€ÉœÖo×E·:iÛâ½1÷Φt1\ëWŸË. ‚$tP`†ÓËœºfôLÖµ€lª À)¯E¨ñ¬nSÀ¬nCHV·ŒÕ­ ©'º=ØC £è 8¿Hbé\(pláiðŠ€“„d›T!Û`…lý ÙŠ …»eK¯—ímWÛ4D‚ÒC9=d8Œ.ƒìnÕ¤UZ*È!ˆ€.<Þ8 TÊE€ÒæíKHr\¦ùì&áÛTË<¿q¿z ³ðÎ+žQ¼ZËòhi¯k>ðºæý×5÷^—E{eŒª§£ô™þ›4\zÄ&gäú¯7MžÒÚ­¾fðìVvðìVs5˜F‡.LãÕɶVuŠñê\7;póÂQ!v*‰¦Aõà“.ª\YÕ(£w;Rëi{àöµûçFÜóP”õb[…#d£Si¿²ßw®žm`Lºrry–•:"&éÀYç¶-û!ø"Ûz¤Äa7;y+5Õ´›U¡UÊ=]e$‚/+vÙ‹}×¢Í:³ÈY*ïEÿ¬ƒßÓÑPŠ*t6ï–RÃ&ƒöÑLhU5rYo¶åŠ´zü)0›3®ßŸ¨§§“¶˜Ï«Ýæ÷™ªŠe,Äö1I×™9gêé3AîUÕ±PžswLvþkÆd…V~¡Óè4lµNçöÐéŒ:Á’z`îå4ßexe…9 ä{4ÛâŽ}°bÜê |–KZuŠ!aèjDËu¥nqÇŽôñ“@.É1%bè¶…±¾n‡ÀÈñ6 ®tºÒ´|(Úò@±¤ÞùÓ¥OœÛ¸£×noô~GI9%é›8Ç^óez «yl°^FÀÌW¤ã‚nÆRP%ÿ!Ò¢¼fü`Ûîƒã§0[7ù²y¨±,U“=dÓé;sWZµµÙbÞ%ŸÓk(_r•:#°Ò·Um÷x$dÚ;W}›_fRÿ‰ÖF'–Û€Oé; #XÎý3™(}bi9÷o2Ÿ \LÐqõ‹ÌÜX1™íYä7ÚØÐÀLAåb1ô•ì©»ê€â×›aÝLkM £HÐÅåŽ!–8XICÈÏ:¡vÖÚY»µ³žuÃeÂl^¬¡ü- Ìå~®Óm“šZ-þº$@’Ò……98"'“¦g™¾h„60¸‡JÙ¼}êWø¿Î^q! Ô®['µt.L•îƒTIvÔNßg°*®jZ³W‘QlÏܲŽ× ¥± Tš´¬Åf¹}Ç^sº˜µm¹!)ÚReyX˜ÁBßs”6 +¾=ìSY0ÎÆ°!ƒƒÛ½ð¦0)yÚ§tNNªuB›–TAµvÛ2ybí±ß"ÉkÇŠg#ÛD0.µŠs{à4øÓÝÂ÷ÿ,ƒq˜~á`Ì'“Uu¸»B?œ»C±GhÁê ‰S§±oûžþ3Î'°•îV{û ÑYì—Üa>(ú®<€oÈhá\:+ÓeÑ8Éw™N‚vª 2k°à‡4ŠIY@(ÑÀ³ÛX­ÓÈWÕï«6ZCQmFáÈ ´=·uÑn¸”JcŽSšÜ³»¤Ï›ºRs.Ü0®çÝbU.î’ÐIJæøè0ñhtÄ…ƒ“|@ßø÷H]Øý/Ù2 \|â EnË&á 0¸h%Yæ\2?`»7ã)ÊVÜ-óU…‚@„\2wÁ<\—΢w×Ô™ è&º†üâhªñî"e‡êKpsê‹¿/õÅlIõ§Ñ”3bàu;Š,¢¶Ð87Ç\ ÑaŸ†œìw Æ)È~¡¨ô’?iÓq€¼ÓßzôSN‰+»D.¼=i~ ?·ŠuÙÍôˆ“2"ç².»\g{“Ò#Äžc¼Yz,æh¾Æq¾ë®ÞL­a,"Aó±X妵>ãÆúŒÔðú*;Ù¨ï(í2XIÄÝñ”¦¤µH0Ïk¦.‹uÕå¶;ö·Ü(µ>PM|QAr Ig÷_”˘ö¢Ìa/!ÝÏU¿”Xob3û5'™Üª3{-Db*°\®ŠðQ8èð9HÏà0?—ù_ŸÕ.Ûò¶BßLЇq‚ŒöÐßMÏ…Á «5˜íAt¸(«rèv•ÊŽ ¿ÃŸ9qh§†7ý fo^Qœ8Èžh¯„I[¹ÒŸ!+¹»7¸1ÿ†DªG*‘"â#¯»êü\uâ•¢øOЩî;~Ö–ŠÏ è4Üýçßë}·…Í£[Ù·¶OÔÓSˆA‚R¾ý©‘ŒYÞ7ï0øÛô½_16öÒ LIh‚8<‰Ý´cûj­%½çáð@û »èˆ¼êêuF{ˆâ3=Ի‰=!%wˆ²¡5©ŒNfìŠ7¦%ÄDúؽð' v2ÀìÇX!s.¼v,ôÙb@ÍMñ{T‡6' àÙt·>d'Ýš<ÿªàc¿~«–´n¼ï2· ¿`ÚdÔ¢(.Xše¿ðÓ$ñ®pTüÀõâì’Ó³¿pò€F²qy©>­qs4ªÏc`md×ò2›RjXY«º8’¡óZ0‚© Ïî1|ºc&öÛ"3Œ`§šÊŒ½*V _GO¯KÚw˜šôepC=®¨Üvw Išd°„¯s`eD9*µ˜ÓRìUJ+¹\ŠËFñ±ÒÞ5â^ZK±wšÔ‹Õ‰8b“»Ø¶TE„ÅíM'\‰Ô´“¬¤ÒcvZ/ÚÃVß¼<Ò8ÇmÔÆšçwœÉ¦Vìp³%adg´nn»o…@HÌ­šÃbýÍÊH¬ppúGïVéãåyVÏ¥½J‚Ao_W»Ã ŸÎh¸õÛ8ç#__¡ùVE0ò ln¨¯¤Yu۬ϦAvn³­…é;÷¯¹tŒdfCϤ †q³Ç[ÙgxáŸ5hV`.2×6Ðù™ÍÕ`ð„ùk}î½ÄjVD‹È¾™C£Ë€iv®ˆ–~³'{ç­•ÔŠW-ökôæÛ’g ŽÀ‹Á"C…¦0p(|‹ å—m«ý“2¨Vú¥ª«œ¦Ì–‡ºØT‹‡*lLuÝpÒßñ¹ÉP¿ªÄç,>7â± Ù½–ZátØÀoÔL±‡¿»AƒÅvFæ•ÎË^©<5,.UÒï{vß2™‚Õ-öå7ùél_·à¶¹ïs 8Š•mÛ´34>Ö‘h¾3²r)ëJ§fEê;¸ÕÚ1À'Ý~{äÈL"r%—õÝ7©›j|tت:4{™ÐŠÁw(Ïqµ„«Óë«¿ÎÞž½?ÎN/N^½?}ãhêÔJ|1.¿BÈÈQ†Ô6=ùt:»<¹~7iWeÄS¤`ùbºx€áÝé§ x!À æº[Õ8ˆ×eÄt£G§UÕ9§[…†4`¿©–«Ù»BÍà››˜òeLÚ!=ÅŠbñ-3ýhÌÄÒÚþ2Š >Òp¶Ê솘bV9³»Îî‚­º Þ9ì*ìïÆq†h5Ôn“Û<‹Öa€a§ÎdTÎÝæñm»ªˆY†¦ õÛ³¦[ ê£m6eFëöì ÈšmI¨^eS,7ÅöÅÕ‡“7ç'—³ïgvVýlßãâŸ2¾—ñ½/ãû€Œ—ã2úÞ32~—Ñ÷Šñ㸌¾·Ë€ŒŸÆeô½Xg.Ä.ßei^¢ßcüîOÖÅl–‘ý;ŸŒÛ£I6­Ò¤„oÁÎ6’d¯Í…Íšö¶¨«?Æ'‹vœ™Ã’z‹f2 ä䎜뢻Ãÿ~möAæ¾UÝÞ‰B². BWíb0‚ÚR%Ki¨ždð€ÑÀ&d—*aBNÓ¾ÁhÚ€÷³v¶T3°æ fïCïm€Üà†ìÜfÛ÷è3ª÷y¯ò…ƒ<ÞVè3KÕ!BèþöÛ¥—sôl„Dä,"×2gBæ£Úˆ”zÅ8?âcçé˜Í!â ÍeSvî×å-Y8Tå(+GY®Öì-ªœ z!ÿñeÊÖ~€RëÅoc_’ST8ŒFÔéôõU­õ¸QË7ånÕÀ–ó®Êb­V Ö<à .D"ðl{Ìd+ì2$#ÚãÑq€š¾piÀԒñü)C(]`=,ªÁ·|!(…"(“ Bdøµi=ddÒk„¶ý n¤þíJŸ´Û t]ã¥thXîv‚¦lDô!z»½µÁ»p*¸ÝdËù¤Ý׳¦·á–ö½îëY!ÆÇÜE“¾fáGè¾öjVßA±X'Ù’ ‘°«lß–¤Ç(f©”—¼~o.²=7ÈÔZì[“`¹´.&Îóqr g’*ª¿êi­¤®Jh Gþ;_ãã™~_´b"Çö›í~0‰Ê‹\gÓ¾‰º¢\¸8¬P0t:ͳ0x–`®s_Ü‚{bO·žÆ±6=­S…߃ËÁI÷2\‰ÅƒZ»}ÝŸ2J´ç–ÂØyúò¹’5›ïaÎ6úz|*Þ½Ì)U¿&C&î¼Ì(‰:ÒÏÓgÙër»z–}.Öíž:½-îÊéK€²®nJÜ'Ž¡ñ “!0™4 «Ó°2›I¾«%‚inocמ{d%K”bAè5xc@NÜ&¬6‹"úÅ€ƒÒx„Ëi77ÐGà1é-ã³jÁ\Χƒ5•§7òPÎÕÒ7ú>\2£ž“Nq|ë8e.``ªI§¦Ý®P½ŒÝ-°‚1ù/ Ãй”¡aZ¯›‡LuªäÛêöö€nˆ™2ÛT5.°»b¼w·ùZ·é¿ÕO|ów8ÎAŒb DÑ·eq§¾D0ü{P¾îº¨ãÝr²PCÆË&ö5Q¦)©Ç‹ENÒåî»Ó²¸lÄòà‹6Ùœ‡Fðk­€ÈÅMQ«·ëV±ÉM˜ÖÓOy½Ê d .b¤ÔPe„F ÕMÈ̓A"ÚHx]u‹FM Î8xÆùC— óAÍ ëœÏå\û¾êÆ¥ÿ±w£‘†ójÑ6°I™ ï˜tláôGUXZ®xž"/ÙÞŽ)Z®FWBtlËÁ[úS:ú¢».o`@Ëí"¡ªnµeÃ/Ms»Ö†Ãj:²ƒC²ÑRÜíçe«æöe·´#¥ù‹Ãø5mž‚IÔ€~wRî⺉Žô~ìä µ¢§…‘ ¡ãš´µtÏ{¬í^‚š»-^™ÇÀí¯©U…îÁÒðM¹®îÁÍ T¢ÝC@ân2:qŒ+—3L®ÍOÌ ê¸fÃZâí„[ÇÜc(—:ˆm‹Ó“½îGá·Ó‹C‚s¥¾ÎzÙ;Ø•$;¶.û·é‡ b¼?$ŽzÓ{³nô6—ˆUç­S¥[ ¸µ«>«ÊíÔZ’NxUû¤Bw5€iâVï$Þª×~ð×eäÆŒOÅÈuª¯à$AM5qpú^µº/ç¨WUÞ`dçH°›™Ö©“­R"\¦j­xÔ­³7j U´,oÔìŠ0º\ª¯!5¢„aÐxøÑF’0I`å^« /ÆïÈe‹ï?BÀHH£Òláñ&·ä0ˆêd"ÌnK¸2ŒÎ-ܬî:(tŠú¹‹Äf{ £ÀgÓè^5. ùmx…³^Þ¶Õ2‚Î!Ò˜(Ñ"¡gãö îé)­kÛ±Cú/@rryš»}¾dŸÎèïöî.¤ kTH¤ëƒVº®bÛïBG-fxz1M~¤™’·ÕŒƒNýÚ .¥DÂ9.NìaÑé!0ú|ëE™Æ¥”`8ÇÉþÑɼ«Q¤Þï$wðnwô{Èä… ,R"X‰ÖIV'ØöûL}û³w‡méu˜`îœæ‹GÓjõô¤¯WègᶬáH½fTÒs‘Õä%G+ýmU|‹(ªäÎ Á=ÆëÑ#Ó…Ñɶ>uЍӂïucò[¸EUK•ÞPL8¥ QZ$•7Î!§S0®çd¤\ÑáÕ ¼åb`¥ AqAˆ=0½Ú•»YYßWmSã"ôÇ‹Š5—¬àtq¡ºõ3p»OSõ“ëwÞÉ>d ^:‘ôÆX˜|ŠÀh Äp#Z-þt«ù!BD*Á!²!ÑVá DKéR™0 >x-]T¡¤²1UªÄÖI¿¡ÄPA‹}Û–8§EN»¯Q½ÊkÈä©ï 3îã @„\KÕטÄ^®ðÍãÍ‹Ùü{ç´†t4q÷óÂÕˆ„3a| åóCnMMä…ƒY¡‚ÊȽIa¤Û{9ø`®0uÎ&án\îÂ5{žÉ:g\í9c¸É9[Ûú@=F1\¨9Ôò-´e&AX4U±Û‘] ؃F“A Àõ˜qþ3 v›Ï»&;ÿtv‰“Õ©úñš‹¢Ú49µ*cŒ¹¹¤ª Õ;(,TÑšØ8€‚èˆX?Н‚¥%Îj £ÃsQd)¾NÖ+ΈÀP´Û5 HÅWØ­˜ãJ1|ë<ö=éVñ`ŽÝŠ5®8xc·‚H ¦g¿e”ðïv«§Š©‹£Æ# L~ /{ºŸY×h ©JópüIÞ£°.ªš¹žN`ÓKUz©¯ô Ž‹ “˜Üˆ±¦˜#î éI“î®ÚnÉ›HÍÚð·ØÆÀg8­Ò§Ë‹‚©Qo»çí¯ê¶nÐêhKÚrØ«:^Ï"¦Ì’‚Õ¯skÊŒÙÖÞWïd-<°JŸFÓæf÷b,)Íxt—Xúµ=²[ãqá[ÓAmÀËÉÊ{t^©Æ,5§Çl¶gfã¥-üÔgJkµ±lÇÌ‘4lïnãJ,‘УUêú@ŠžéŽf‡¨µÿõ_²?ƒam·Þ·‘É“ ÐJUŠÕ¨ pð·Ó·O°Ï;™PÆ/M§¯·Gö)µb•£o¹[‚œ6Vp@ŒbYÒáÛD¨~u§rJm8®>ó÷¿å¦g4Y€ÐE)£Ib;ä `è…[èfBÖ’=: Ì]GZÒp@˜¡jsjË„vJ€åÓJh&Ï…g’mÍé$|Å.(³ÁÁØäúû£pÈ%Ôõ÷Ch%£ŒÝWþ½‚%qË÷¯ð3îçøË〿þrøË ð—s7Ú«t¾ªU/”ò%¹”dÊñÐR¢°}Q ™JiÙVOÄÍIƒÌˆ¿Þê‘Pû6SHefÁÛ° —ä2òK5:'×¢ø#0¸¶²÷¸9Oë‘Ie÷Â=š%´ïàÓû“‹Á~š›¢Ý5_a›¥ø*”jtTý’Ð}Ò»Ú0ßëNû¬ “À¨ ÀmB­>’z³Mä“1•ì0„Ât[ør-¸æÙx{zq«òZM™ÜÛöé4 5evÛ Rã-ïÅ46~ÁÆìÚ¿-Ìïhßð¢yPXb5áW({§'YlU2­0:Ì…t¿Çº²'Ó‹éÓL-3;ØÈE½»f‰îSY ˜*™Ø);y¥2Ãô®ïÅiÒáE¼T2«ºn_F;Ýù ' ÙNuw°ö\5ÍÎ\%¡xË$'¡¯Á‡ìØýãïÿG¨Ì0÷ÿ¿0•Á€¦_ûQj9þg©Ó'àŽ°­º¸¡{€PëÀ ÇÐ];» Êî]Ó.ÊÈ¥?—FëÃ4« ‡&ÛtÍöÒ¹øø‚i)άÛf¶ yf†„7q9OÔ2ªyMÉæê}·-U±žíŠÛ”E:±bÌ‘qJÙµz@‘»v¿™QÏ2^§AZ«òrÊ3u처ޤcGõ™¢ªŽäõ búç¬\’™LÄp[®É™)ßoÙD{Ê)ÙÇ-Ç2ÿ`ïGvÛuµƒ½n¸±õØ]ÛÜ(ãºÙfïá*½ÝÓÈN Z þý`/àÕ®¢!^ÔPKvØ‚è"¾¼kù†?Wü9òOuRöa¿ÃûâØQá!½uÕ¢“}¥ºU0/×E·«â´"LåŠ(D¶E„…˜¦ñLß&³\¦ÌƒÝð©åél9¾²·Ó ½ÎŽ“'Ýï]‚CUŸŠeÿÞ¹U ™ýlYy¨ùuÊ~ԇЦ®¼Û¡…wXw·Yv_4wU‘M¯2X<¶‰+ív`¡Ýö×Ùm`™-têégŒÐ~›yšö·0tI2¶• ÒuŽS^è˜ÀËBk‚I×­²'sá¾|ú¨»–J@NüpÂÞ­Ž²¢7{õJˆäÃ-{NÀ Â&,óª÷e ŠEÆôX†¡ƒ b †»Ë¶Š…?ìÓ±\›nÞMÒóÏïÑ5Wì@‹ºnv4ÿ´ûŒ‚`UñÀ¶}:«rÛ Ò^XeLÔ*Øé©áÔ}©qüÿñÄ ‡]¡õt ðþË}WÁ–VIJ~ßå(ŽoT‘ßT7ØÔwŒS"Êî»ìÒÆ/ð„â#<ËÔ[/ µº°sxhÖìÂÔuÊIÙ™N²JÖM³M™"§xô÷ð8AŸL³b7C£‹¸`¤Wƒc¹5Ò[5êïräŸÊ'ý2zŸ„üv΂ö¨Õç€uèY>Û€ïtAg¨4jvP™[i/Iþ ¥Ñ¹m—77ÚÝ”NeðÙ+q¾á }‹hÔ«®½¢å`°P€@º…“õã3[/÷2ñ¡ª—Ím&ÔƒYŸWM¶,ºÕ¼QÍA_–m›|LƒÔ$üÎ%§z†nf¦N=CÃOºè†VâhsKÐO M=¢þI½–r;ùúÂ~abÌ,ÃÈ•ãá[˜¹±(HíëÂæL©!Ò“²‰|4Jfï! ž'¸KªOÇs¥¯£Ó.,b8£öX!†í’âçµ(! Ö.éúêìâ—Ùõ_/OÁ Óõ镚lîºYÑu`z€><Æ¿¥­Ö×唇ë5û9,0ââô7ÆÎÌËžó˜ëæ®´ûQ0M`Ÿéª7Úªö¢ºïE[b¸žbÝa:òØ6Ûk´!j[ÎÍ1WÃaSù@¨Ô´Œ22Ê0ê‡ 5éösŽ´˜ä¨[3N›`Œl’¦ÚDÕ)³Z ½åÒÞôgCSÕ±ª&ƒkA¿û9 µTþ“è¨é×3±0¶îB•x€µ#öÉLi9Ù¼“¢Êúç“pÄ*’­‹)¥|Ù1â–öKŒW¿Ök'ËÂ+çðNî#»Ñ÷Þ>ô½Ý¾_ˆw…šq«Öܬ;a¢{ßþ59ph´L³Šð±¿Ñ:ýtõC¶¥mQ¥íA­†šÈ Ρam”f´Ñ£Õ¦Ð}½õvcŸ¼»Ì?þöT¡Øo#; ‚B#P)V¿z›ú´ÏD»ùó=¹SƒmHõŽ[2¶§É%lÂêÅJ­³ª?"cOŽqØtƒÆ&Áx“=´ÐÐÚ¬P¢àÝ|õmŠ;ãàfJ #NÞ¬yÕïûJ}²PÕ<·‹~ƒ’DƒìäW‡Oöe ÿ7”õrÔ¥¾ÿÙß:Ô•ØûX£Y%ä z K¥PtØÁM>¹G†5zô¨¤jiä¨0ß­9dÒ‘\­NÕ4g™­Ñ«Òì“–1fŠIß`W‹Ôôöµ0Y«y(Ú ³œ¼‘lÃ=ýëôúô|öùäêBMà¦,}{)‚FÊ]Š¡‹ ‡î¾Š¹’ñˆŒ L:ðYô„‡î“Ñô|¢VüjZ±*Õ4©Hó;dO_Ô¯\ò^·jEožQ6º™;Z*q¼+ø’ ®9SÞûD›¼õš"¡¹Ó%›adCXs#çºhçŠgPט§`wsõ5ž“~R&š©úÈVl9°]Ÿü2]}¼ A`ôøIȇ¢¦9»T²ªÛ‚NtG[YŸNËTétx«Ûš œ‡a¤·Žbªª²-l2¡K%áÛÜŸ0»5™7ÒxòõËX”X¼›06:];Š¯×ƒ¹ïÀc„É­p—H¢DSÕü îŽ(v>ôöƒë­¦†š ÔH‰Q_[ïGôýÎdÚQ,,Ñ(|\·C¤µS¢ÕOÏâ˜É®MÉ­£Pm Ù>GíŠ.e½§i­vxÒ+=ýŒÆè¼q‡W½aèVÝ"ãòD ¯'‚ÿVÕ+¾·Xb5!ˆ<,¢&Ë5ÿ4¶®pM͆yל. åÝã¿­²m ´úÇïR!”jKÀ ÎíÅk“*\w>— a*»§ŠHb# EÆEm¾ìn—3#D0Éè7 „¯vF Áîb=×ì×vQÙ¡tò@¯zˆ„Î;på;BŽÑÔô¶¥Æ¥C±àm7oïhíÚo:wX†<æ» ´7-KCÐ~6´/ÊÌW[H „žúú¾”·Ç*YËçg#¼ñuá9k¿úbWf™)ëG˜žyõ§¯‘Õ¼±òÈ‚îO¼?óºÙla=ÜÔ5õŸ9çÎ3:~Hša9Œ¬sUæN2:¢÷"aáMÐü°*k¼SöoäK§D/ñNx±î¬B“[1×j9óyUâ%MvÕFuþÕ¦‚‹1° »ÅåèÌzì½ËUûJ +gY¹•• Y׊${O$Ù+C"t@ ˜Èନûfu,1g‰×ôHÓ.Ò—|úÄVª8ûÀGíÓГÜUÁ{I¨&j:çYEÒdN?;&‘oâ*}[Ь¡>ÖEÒ/9OSÌuƒ™¯«-M®ñy²knK¸}›4m`Z–ÌOfÚÀÏ0c+[æ`J‹o\î× Ú1YòLb_Íì>ûxe†‰5Žx{&ÓT®Ç$âÒöÑ3²ÝQ}`spcr‰ýÿçŒ4ncÕ§“øK*Az *dЀ¢& =2 G,XÂcÀ½Æb£×Äù´• Sã@³ÇêGà³' òoÍ|F·ÝPöˆ%L•™S¦‹Ó2ÁÍëj׿5s‰h]ìëÅ*‘Cì#¢Ì>"J‡-1ú!ùXª¤&å‘öpT~ÓÒ €þ¸¢r;‰"mñ0Dî£é-(zŒÇ4*Åg–$óCQ¥Öœ õ±BV'¤*ŒŸá¬ˆš üÈt+ Õ'à‘t ¦»HXBzU!ƒ$c>$à Kx2ÛEéÄ–8¬äësгí¥Dê9ÚvÈÁ§p3´èAzL‚’Çç–ð8@¯_í®Œm÷ød $»X å,@¯±àd(ŽEI,ìbÁàtG`z…Üš «Ú€hËd¿y@ËìꗘŪ'8.´Ù¡={Á$¥d¿[U5zTˆ.\½ Æß!ʇj ¦Kcõ-I%&™zÆ'ëF.#‡‚tpC»;›fË«í æÄ»•šÝ®²käSu}Ø–já6nÛë1N4HøY›’…Μìjv½m›f¼íÓ‘V•žWÛÒµbA*×]\–K˜mñ –µè øãë©a‰ˆàÒ ô…6À`1Â}CI ÁúÌ.ê÷'&ä#æ^rƒaø›b‘V£¡…«2zuª‰]xç'¯Skõÿ1.À¶Äý¸èPwwìíbo´y£ÝèÿFïWó"m"7DmCno×cs!ß¿{u’Ùàaœ°ÙÇ'¨.Huð@‚‹ÃÜËP_W‹#ª)@-à¨Üp5I6¯š.Î^'US—TM]°š:¿šº~5MG«éá¡Në¤ä݈üh2@Ù—dWVHldެð‘n-ËËêÕÝPzºâ¦<âĪXÞîْ>µVbŽ®>â#tÑWÅáÖ^•ì[8¯å°‚E{kïX¦*SmöVoŒs8A¡ïn¢ùßsHùoJñÏþ%»/ÖûR«ƒ;À_«d8êPª¯Ï6šyÄ"´O§U™tó5Ø$¼ŽVMì$]-€?bnv…Ù›¦ÆÐ»õídßVãL>+n+£°­”"ôC„Þ5°×(CÚ´lß®S3™–½ÖGê'=€O_cò€ßìÇ«÷JòvÃm)´t•b±«è6ðïFO%º²‰ûQ¬“GÞ€S„&Ê»ÝYG÷~,÷£zYúþ“¹¨F‡ì=£Cl[8Rí .×£ÇYh+Hú7Í>NOg—§WÓ³éõéÅõìõ‡‹‹Ó××g.¦ÀõÏ‘ Š˜>£/½;\¨¡ ‚õXÃ\|¿XâÁ°ñ¢-—ºšïwðü3j‡;¬Gêã³ò¶ÜÉ€Tdö'Jÿ,£XéÙ_Êv^¶x@6¾ÃM¦ìÝè>u« »æPˆ"}ˆ¯^ÃÎŽÁ=ûÛ~³ÅsîEÈ;'nSš…ô•A¾¹Ðª]sâÔ¢#'†gT€ºaC%M´k¢nÄs5ËÝ8ÁWz™óD 3-Þ„„Áô²U‹Ñu ÞÜ 2](œú:ýZ¯3¶Áªè’ºÏj6b ›^sÇú^e×@4qÎϽhÐ~žÚ¢fÆ?|dÖ¹ÐãÙ «á³û1!âtߥ “,ówŠ‹ËØõ¥Ï»å¨l•O’_MßdSºL1‰_Õ•¾ØiÞ vR½¾«¯ô–ÑéÊa9^ 6/i2|eiTö@1°qÀßÂ'ßÖݨlM}ÉY}ÉúBé˜`¦a¹Ìx¿r²Ú—%ç§îûÓ6@}âÙØWáÐŒš”oøD2Ç/£1û\\ÂýO¡Â›H¥àΉŒªB:|2'd¤QÀJ¶. òÁ¡ ¶&r)ó혂àü\õ”˜ÑùÀ€&¼•T,U_²¸Z'QËß7ªºÚ×jÅût5-‹ëòíÐ`›Ì¤LFW&QáÎÆÆà}ÃÉ“H<èùNèhˆÌÆÏÏüòt£ô=N¥¸¡…Õû5Æô Zý¡Ó0SÑS!m~Ýo¶m¾Te7ð ˶mZŠùïk|r‚r iÙ;-⬎uò‚ø˜2¶Â¦£œU[8‹IÌä$ŸY)k2lî"0T-ãÂt$ü==L†}}¤ÈÒ†dÑh¦>›ÂØyIõèÑO'†5mÕÊx› éøc§‡‰èî^Ç;ä,Ÿ<ækC`´u4×ÂZí®1eHÅ=!XÀÇsÅ‹ÇX‹A^ÕÔëý2a`rÉuã„' Z®Št×A"%Kç¸2¤åšÍzhäK”he™®…t*–5]Ðe|&’çΘR—Ü››XŸ~oÕ›ƒ“žIÄ3I\ŸëÄ„sœ™Du$ˆwn È«ƒ× £BÍDr!9`]oîôDÅRjYŸÐU §“a þñÚÎo à5Á?¢ò %É´î#†F$ÈÔ.,MLV`SSùm¸G@g14jÁZ“7n†Ô©õ—…>chœuoHxÁœvcÃJ,3¼áô«IŸø.;$‰ºÐB°6$ÿø²3¸àäP´}²Ù²[Œ  =ìª)èvb°¶4ßMñ{D²Þ/30ß¶Jo·>¨ÅËRõë.§xÓIÍN±¯ÆU ;}T<…Ñ~BC²÷h¶4.iB‘™q>JD!Ùê/–4nå\‘-½;‰ŸöÎ?åÙ§sî‰O&,2n‹®Ãž#·>ÛÜrŠM\£¨ÃÂXû !8Úݤ+INoÄÅäÄûÌùsÏ(t…uJLGˆG9¬Cya³ j …ñ^|NéZ爻ÉB¸€déDÍ‹´÷)–G-n¶ÝûÇÃið‰=Gv· _ª¤€:SùRÖà&¬üJ•tb„õÐÜoe NÈt.T–C'®*Kj#Zü»õ—îÔ‘j¹X´Mpå§ý–Ò- ·§J®ìø”ÊÔ$’ÖQž¼fª­zÏä–»{œ×@Ò¦eåZ–_”7öÞ5~™çÌ HÈ ¸F‹¦&µ-©œâo·¤Ž »ˆ¯9–¨9X¨ï ŽäöýXk™#å!¥žì¨ŸFήZW;U)iÆ =rÖ¡“­å‚N1>Vî)î}è¶qø;fÒÀöš±Ý9Ö‚íèüÁÄý‰ž`èÞo•äueã•ÍTó+»¤¨erÊúJ1áÊr’‚§œçÅx VZ…™ÚfŠbb´–_ Ìð(Ŭ҈0*N9ŪAÿùM‹ŽºñZÑ9‚•˜k‰Ä[0Ÿ‹e«>U¸Ë·(<°6º…„O'Wg'¯ÞŸÎ.¯N_Ÿ¾9½x}j5u‹fûUUËL™¦ølÀNÕPŸ|Œ÷$úi³ RSä5Ø/aíbO¤L·ð5>bþs–“ 'ÄãÜ`£‘‹]ð‘TœhQ¨•ÇT M·ˆÿLDn^‚Íç} ‹´abÿœ½RÒL¾8¾®z âò$X¯Ø>Ù™ë8×#¤6ì]’õ˜FšÒ“¢¨ëROÍ€ËR- 7ö¾Em°$¨5´Îè¤D‘ÀŸ9ÓÓJü->°¤jʦ'ˆIÆÙÒè)ùR¯Xº^|u€v#LÕ¢˜EŒ5.ĢȭÉ&¨ÆQ,—Ú¹±Ül÷ì@¯ÈnUƒ+zR\¨½Ž8vi¬þÚº‚f$D•߫ЋjDV=$Jýð,ܰܣ‘SvRµÙý‰ÊÑ¡/»çJo fªé­—‘ujTcÀ¬œ²,É iñ-woÁVcÆ­Á³VͧîÊ$@.­‹ˆó|Hœ,‹cÔÊûטŸé|ˆO;¹'³4\Œ\ ’2"ÊÊ)ËrÐD~tÙ–=@¹¡!dè-Y__K„¬#iIQÏLB¡ôÐ$‰Á o»n ¼¿V—`ºeTfå—Š<Ÿ€GØ‘ Ý"h°÷´¤Ð¦ÙZºæHÂí»Øu¦ß`Â@"¸ ýd߬›‡¬àøª†ÜDP6°Æb €çúâ¥Ñ”}zóa¢Ýõê´ÇYBjï¾F²qƒÏ EQž—˜ÑâŒp@áyŠÑE±c;¢fó‰ò½V³ÛM‰G¬2ôó¢KtšîS»Pu®Yy1 £,0/Dé*qÂæ9䱯"¶üEÒ³¥Ž^€º0ä%hI¬ý¾˜˜0­9ÊRctu«¾ J‹¢«rcaBÜúM‘Ô!u¡R––RSà2%ृ9ƒ/º t±É=YIœ‚ko¶6jTðªò¶$ìì:6_#žE¢'Åû-^x†×㥵ZnkG$õ[Î8\6ovÛŽ)móƒ'ç@@*cî="¡Z¸$ÔD2î*ê0¡=ÝÐJH½4çS Ýòºœ!ëkçˆ tUnµÒ3•IÝfeþ\ò_±pv/¯÷¹þ[š|éæ©2o¾$oc¾°<õ,–Ë6QÕ…xZpëor¿)–ãŽ$k„Séð ¼Úr Ó^Ã/ß©gCó ïðʦzgs4·{{ò«fìÙ1Ët—Î=H€f6¯v±†›„æÆi_Ü¥>¨£èM~Aõû×Ô=µÔÏ@|û†ˆ-h"gizÆëj×ÚèŒÛ‹Ò³| S ÕÌ=À“\~{]õ )©kyDGŸ–mƒ8ƒê,oö댤¨ÁÉ}_,dÄ@z”0hMgÃm„Eõ ³ÙSuU„¨h6f2«îa->eðãàY)í»üpÜ[µcP‹¤b³’|Ù–˜×U»Òo¦¹þyX°¥áb܅ͦœì¸ Ö”ÐÅu ·b­Î/wsXEè¢gvíq¾u}¼çv°½^ë;JÑçwqyÁ¯Â—?ò]x s¦Éµ¸ã>ƒ*pÞ1ôåøú‡£Ÿ“QÉ_‰4¿&å$,þ¥Í7·èÉ2r[|ˆÚÁ rsʵ¬Ç¦ÛWôã…è\©i×éô·Šn;yó,òU—v5DçÂî§|‹õ¾ÃM£øl˜ÁÓ†Þ‚,ÀlÖeϼ˜ƒÏM&Q÷EµÆ=„Jo\ñv‘ýÔ#xƒHû;VÓ­B\˜“ÐÈ=Ж±Û¨×Œñ±|f7îRÊÜ£vôÚ\¯ä6c°ðo ‰ [ö1oeˆ©‰ÞTOÈ lCÙ{{VFòwf@ú<á¯Á¥|V¢ˆD·:Ž+O˜y dñ`=:¸Ó½. Lšx+¸u)ƒ¥)\[xˆÚ…_ûq†{l½F„õ›‹©gã§[T±>¦ý„8\”-D±X´‡]lqÉÖóæjŠÇ ° ÆdÔj¸ñè÷]Üék˜Ö…{ß9î_=–^ÌÚ‚†=\~™ Òp¨È+¤NM^+‰öAâ>^Fzx A´É³3%ø7ò±f†å¹€Y‰ˆ%­óú8Isâ²q2¾¸„œÎÎUvNÂ’–ŠÆÖWk 'YÐ î.ÌnÁv¦ {—þõ ð8Z‘&šàè‹èÀ+b¢j‚{ìàòŸe‰>|óÜ"û+¬fœ^7íG€ ñ…ÐÂ!˜¡ ÃvD)ü¸ýšÙ<Ýåö,:ŠM DPNÞÜôËX/)Y½+O½(E½DìàNe¥Ogñ¦î“î)Îþú{TóC6Yðuüxöƃ­zPw[ÌÿžÆ6Æ<ØJ–ñövìžãI®ÁÁÊ ÔÛØyÕ› ‘ü-8OÅØé˜z<x–&ø†m¶‰œ»ƒäBèEÞšeïFºà)/×;âZÞ±;–Œ®«‹m·jŽî»‚|´šn¤7sE…»5¯ ÿøû¨ñŽù†«ÞH>¾Xñeô<( }Ä]‡ó #ãL|@„ô*Έ¥¨ {e1‹ g•àÈe»‹†Feq€ã|Ô’x¸=vÊ/ÒÖå½R®>X³Qã ^Ûbfćô/`Œ±Þ¿ °å€ú¸M)ð°|ª1 E·€´ˆ:²p}¦@Áh6\(!$µ@ìH³oˆ”ýe[:—m°|L6RBÕÖ6¿P)BevJ#ÖÚ‰ñ9úeëü>|»p·ÈÅj¾ZwG¶'Ÿ#T­è[’aOmF°ÌOkBÇ•c¼ ƒøÇ°³3iƒŸæ¹.F6Ç<lˆ-€šÉFà;‚Rß1"M|Zɱ_óãHAG¾h_XÀ›éq5xwèÉÅñúÅÐ!ø:OvEˆW{Ô`®VS›ªC7}?‘\Å 2ôUJW& Q¸l©E*I¿¼ÇôBÏfíኚy¼ U‹7eB õn›ŒÆÒö©¼Pµªd[£×—G¶Ž~~äçâê#fªá×3ôíši¾d •ç¨eY˜%P’¡E™'`dM†-…¯cf×(ˆÝù2B\ý"0ÕðËpĤv¤ÆiHÒ±½e˜o¸(#}¥'ªÌ›\MÓ¾Y¸%ÝoÀýq¯¢ÏÓG4ïAˆx H!lœ ø^a°e›Òô2È婨,5ø2úb„5öîd…:ðI;ÚO&¿ˆžn´ ½_DxÝo\–G+Ÿ,Q­ü×P!Æ*_Šñ+ßz]`Ä9_ÂéÞø™ÞðIöŸ£‡x› "ïÂÎÔ]Ö¹‹“²Õçzçc´ŒPŸô„›Ã€e{ˆq>ði:щ7S Òž%7è0‹Ö5…š³' µo·gTAë‘£ÌFˆÊ‡df ÞäM†,ÛŽ›z¶m…#`ÄÞ BQ£µ,Ù '¿Æa6‘‘-sèu ®ßˆ C«WÔÑ…ˆÂNÓé|žè …½¼¡ù´gb8ð†=#CL'+úd³CÏÞ0¢° êëRLÁÉUzSò‰½*3Øl SÏú@åP³‘`a è©)úÚÛvëFMmŠõ151Âé¡ÊÜPÔQHÜ3c÷ú:#{rqrò”ªDÇ™¹[$!‹ÒF ¢±{bÒMMï7éuéÑ:î7ÁúÒ,¶†æEW-¸R+ú«Ñƒ(ÅÓ¦Rþnñ ÄèM$±¤õc^19+Á»ƒûQïŽw@õϘȤÁìsø`Õ?c“Óƒ,Ø°Û LqNn œêî@69Ðüj6–]žÈï:4KÑS›ÄB¹zë:4‡Ñª~á\1vNÕ £Gý¢]fÚFe×H‹[´»²­Ëõ1A€Ã+Q |’]^<ÿ f N¹z«í&iƒ\aèÕ6l¢ÖãFy_A“#ˆôxB1 {Ð<3 Nžð`A™ùwqW<7®.Î^û›0Ï-ê&ÕêÄ%õ07ÛNÅ›Âh5å7gtN”ÝŸ7rVv¡ Ó-]ô.6 £´o•¬nÏ9 ¬µUYú÷`ðÀ’-Zðë’Ì©ËÝC¸û¢~Ž€>:7Ð^§ºûššÞKâVm³ñ>wJÕ†‰a›s¦W¥Sx¿øýzg<"48óZ6°áêQPp¨F9‘%;©p`F‰¸Up Œ„P†!J†ÈÐ!÷`P¢ÜË$¬†¨ s䮇}6Ëœý°ïÅ0´øT%LÜæLP<¦,ò”â "ï 18•ÁA©%ŒZtXWu·ï5QÝ™UÞ­r•,µ¡P”ÀÓˆ§îL©×Ý-Új»‹ªQ[”›S®ã°IL”‘Q†-~Ÿ>|üÞ<~ߺA;»³¨u8÷ŸAXÁqm}BVI9d½‚‡¯-¢«Zq° c8`p$X(]$®=¡$7V/ ¦ƒú³Ñe:7AÁÝk$ª¢ ¾¾öjÈðofAÚäþÐt³yQ×±wÞ£cÉ*=§tSpKjG:tG¹FëRÌ¡¦pø0µ.n€M‡±ŠBq ÎpÀ耂´Äƒ ¯ ¸¹…«9z¹7€&>ÝîÑ9Xœ)µ%› Ô5:PÿØÎ‚À–„Qß'HÜ‘Þâ'²^ƒzÆÕ”£½C?h¡© ³©Çã“ L&ËÁe7ÌMÙ9¼~KÚ[„ó¶Ö/ ØÖ/àI6‹ðýK»ÑßEPVõ]q›Ð¨\B‰2\X”&=[Ôw™Jiu¬1ƶ^nªÃ½Dªò‡êÑa5ùþÍ¥¬ËÞ§AŸ†9ŒÔÇç¡:Js{‹}£hB ˆ2\L”&Ïì(Aa ÂÐш“† X`á;rVÖ Õb¦šÖ.¡¹¨…ÊÍ1×)¶dçö˜ ›˜Á-»ØíŠ‘÷B+ý¤’NbÄt]õ ¡îXsÂøÈŸcyT„3ÏÒd¶b`…¶ NÛé´+ИûuQÇÁ*R0 †·÷'ÃZ€ß4­p>Šc˜ž¡µ¸ÊîÁ5¶+Ž«©)†]æQ__¥Æ½²X¬0¦*EDZp“0yh ºˆc‚•eóò†¦' Z½‡9Å]ÙÔ±7åSiõœjõs‚0-ÁwU¶)nÕçôYeäªÖÔkËž|nÞ?ÍæmS,j²ŒæVånòPÎáä°UIí~QhÒúÅ7 ó1Èrž»ù¦Ãù¬Tž9YƉ6IÕÃÈQHf<Ãðº–ʧ3^dW§ÓëìäòLý,w‹ŸAã yœÅ\zIzÎÊ…{O—¡‰u»]W ¶ãC{¥Ï†vá„€¯[1|î²Áj”Ê–óÔŠ0”==Ëy –óÀU^ã|M{O|3jˆºËÙ”ê±õðé­) ¾Ÿ‹ª0V•.¾Áºä=´œ€Ë9=¼œ^Ž@s‡T|‚¶òÈ 9ðš!:ä„[úªÀsÙÙ¼œ•ÚGÅÆ°Ñ}"÷@çó272($É@§ô¯U7ùªŽø0À!ÅB2Λшnx×ÑÙ‹¡k3 -Ujמ×MvY-î~&=Õz Åe ¾CŸc5‚8(¹÷ Îj;ÕÑ!ˆÏ* ~¦óвþj7êÿ%ËQÅWC·çND¹qǨ½xžß,Š”Ž.ЬÕY`vü¿ÿo ùÇßÿc—峬ÂÈs6Só®]3ªÙ¼Åñî¨Ð;ˆe×À-7üŸ±ÖVÍ~½ÌΠTÙÿüŸÙÿú_?g'ë®y¦ZóàÂ!gÛàMXë^}åÃ$âÝ\€ &HÛÞ¨—ìNöO ˜µÎ‰1ŽÝê™=ÜY ®KBUʲÂiz]q˜Í÷j츛áW^Ž«©&G9èÈATëÈIG®täÍ]Ž›k8|x°áŒ˜4#Rõ‰¨¼X¬UcRäUü^ß0=#T}¾ÊÏE¾éºú¬°“‚“×ï3‘ap¥` éwuâ„m‡;š/–ÁåðB­òá¬û îLè9%Ïgq ÈD…íÕ‡4S-®ZRFã<3ÐäDã-˜D€ËàNu?hÊyW?Øä‰Ö^¦_ªÊnˆž¬¸E)¢§AR³<Ép´#X5`"ÙT(|è«õ™vzþŒ†/~è^ä,Àgì LÜÊYüÎ܇E,(rçÎ\]ìÃãòÐæg´ Ž\«fýÏ!ŽÏ'ÀL–ƒÈ¤Úµ¡¹¾AgÞ–„Ð$ì÷éwX*§_ÊÅžìIt"N2x ¨ã½Õ`LLœÛ„Jñ(ÆÖ­s0Qá¡{\fŰR7³{d/Ú!Œe©Ö@·Q ™…BÉ ¥Ð1§¾)pÛAŒ1¤â£:ÚA¸oÖ{z€5ÍJT@ê¹;q ·ÃñQ5ZØÚY¬*rrï ~I+VØìR²Úãy¢XmàfQXIêŬXLÖÓ/>½{ÿý¦¤C]`iBœ¬øÌý‰–NþtEBMÃå!áMt ’C»èB=}ï0vÀbT¯GhUë ©]§‰ÙiÖÕ`æø@õœ‘ìnª/ 8™DÉ.H±ýòP·LtÜýUU§½Ý™í´(¤& På>‘„â®ÔìíKaMϦúC9‡‚IÀƒ,.l—Äíæº6<@•'•ØèÍÒAòHy«´ÏèÜ`lp’|"À_bÀÁ8¯02_*@—¼³9Çá#ž{1„?ˆ Òö€9q.Ë$„VœU4{é‘Z 6Kâ°©f‰¥ l ºµ_».®ñõ< ã=×-y%×ö:M‘Ah„ÜœH@ïx‹âÊ/[¸°¤G³ U,gËV­—¢… ÛâQfŽ™²€’ ;Ë­µŠ4Ú¶G[BÔÅÛ¢¥ú;§Õ©G6õ€WºQEFS¡MÈ(Z²±êo mº*DQ¹ ª„YóùôŒæf¨ºîºø±„ ²Ê!Qj‡g¥þb:=W`–u¡ú¶é~q‡1LÈ ^4AW³„庤²Ú1UªÇ>½ÁߨB;<Š)qé¬íQI(â$QÓ/D-µ9'.”Ëm™ôU{„ e¸p(Máùu_ªL5o:àÉLVÙ ŠpìV »•«·êÏÊ05¸Î&õe—²õé eçmtR  ^ÒƒZ© m oSF mhÜÙz£Í–Ƙ³u ×a¼S¾XCÔÂE†tÄG`_d¶š›…HÈÊ·ÒðÌa0‡¦´F²0ÃÙGãëÖÈKOBÔåöÏ6ð8Ó6÷ç϶"pŽž˜Äå3CpWžî®üRÆw°2“ˆ˜¢÷ÒŒ­é:GZžf|ë ÞßSЪ{õ©Žþ)vó ‰£ÅA9„‡Br€ñC?t&ï¶ÑmûsÛÖÚB͆v›ßu ÷ž0½…¥óu wÎcµýÂfœÿª*°rÞ4ñm?‡LÀÀdG;¦à^þ(ÌW©½]FáJÑëJÍ£ËÓMļ#[.]ìÔm»|ÝBé’ð:¤{h ‰É3ž ã/Îî‹õ¾4€R;™Ç[ÔP ÍÐq¨¥jÃn˜Tý›²Mµ=Bfx(0 %üå£ú\[í:êMµØàÛ@ôà½;BÙÌ›¤skP ä %§AmêÅJŸÕ¬jJ+·y"~ÅÜ pŸ°˜éß h{w£oø6„|M³Q+˜.ÅtZ«Ì‘„>õ¨´]—_ÐÛg·-ËÅŠeà ^N”YÜé975æ†C¼®0Üa´UÕ}>8ãVR–³]ÑÝÅ¡†ÈjC¶S‡QÜ«Ðé¤1%õNÃ<ƒèü>+ "Ú}M ük ¿\ì[pWÎVGQèAz›óµ‘“„ì²Z«0Ú ÓÙg;ÝŠqQ…'é$,ö‚)áЪÆ:Pïwœ†›É•v؉ô«"á°DR õ«Â=(Á„þÔ“µº2ak½ïчԕöâö==Ëk8Â,DëoÚ"N€àJ”á¡4ñMqŠœî€¤/)øéøßJÊÇa—ÕK%i­çZ:C‚Ðiö, ƒ¶4mÁC–6Ûq t`—$0ëb³.v=0krtÍ?;}=Y4Ö૳§r»jSB ê8—P€á  §Ñ$î$´ÛOš¢‹7 I%”Cª£ÌÞÏ5>=û66ä@ª#›Aþ'V¡[ñíë?NX$•EŠ©)&€-(ü¥Ø›3vhÐtŠVÕ×}i¼¬ö,õØf ŽÉ¡¨(ÝÁEIâ<ŠÆé”ACÖ ª“#hûf*ÍÑÜÒ†™ªt\Šb€]ئ•}v’MIИķ"ñÌGÜœ¾ÍÊl«ÛÕ.M½$õ@`–…úÈG@ry„#íZ^ŸÐbè]ÏÄÇ\ÑC¶¤kzJ Ç¿®'ÉseøËù¶Zlâ‡ê¡€Å*N“ûºž]/œ\ªŽ%s—¤Õ3žÀUSlâŸC&Àa² SÇD\°ìÛ6ÿ¨m«:ݶÍü—q !gê·>tÇBP0Qsbý¼:€ŸÈì <)‹cü¾Ô `—m–M‰ýq†Gj5P¤?8i÷,]b•¹Å§Ç}Ê»±Ž Þyaó_ ƒ‘ÝnĕیŠM›¸ˆÈ0ƒ<¯mÓ57ä…K!¸:Ÿà}­ÿJ樼)ó¯_yïo‘Ä\oóL Va¿õÍ»åàû¤SŠ‚ËF|$ø>Suů¦o\ÉÁ$¤»ïDÊ6/†åã³sýv¤Søø½Ÿ€ËíhºÔÉ“/Ån7Þ•J Ò€)úÛÃÛkã·µ,oÔg¾Ì v§jÚK0æ&ÏŒJá|;>\ V§Œ6õ;p¥_Ïo¯.§“/eÍŽ£â{ÆaZVªóÜýbEA%ýnK¸cFæE†nòe3¾ä±ù¬xc–9ê§-ë%ì´ªrA!%~;o ½À÷%,-…âŠ~R·ë¦ëÔ4]|HRß 0Ï`w?Ð#@Ö  "Fø•=êͳ¿ž(ì|Í•‚çZîz ³C¢)·/¹X&V(ÙÚëm·h˲†Iþv¿#U Y°Òý¨øm5:—ºµ˜\ˆÎÞž½?½89?þv}z1=ûp1%Å·Ín±*Rn6š(¡Os¿+8 y–P…þ‚¤¢ªÁæŒC‚õh²ýŠ´|\“jb+$c G¯ÖKEè››_cw¨wÅ—„êyS$(˜uQ&IwÐx9t{Ø­µŽ9l“.ˆr8³%Ú@"^%‰9IDÅ…ßÒ%fe˜¥p´ãÓ8A õ´fÒ¿í× ”çë¼ꯊfrP• vw£w+Ƈ§[Ú6"ÿn%U &G1¹óW•–ašÙ™öãê6ŸåîÍ1ºú)Ú8Eùäëãg0ê #쪨iUÔ‚°Y`èíþþõãyf²a³á8åù2K ·0HN˜(;„Yè3†iþ;Òázšîe:ŒÉÐAà( B«ö µ ÝvNg**8«Oç ³©‡A+çtĦPSÇT$’¸3˜0ÝFix"øH À>¹Qd{ eý‚ÑÊ<žéxM­ßØ DV}zŸÉ63V õ©Ô—CJEHBGfx…Ç4ûvèÑk´/T¯hÞ’†CS<¥ˆrã¸ñ| ²žîí”|nªwô5ÇtúÚ¬;¨ª”w˜­uT¤…{ÄVg؆ ÒëX #IÁ²jÆÌû,£òLKpsæ¾$Ô\ˆXï›ü{Óü¥,·jÅ]æ#Öæ@ÏP`Zpò´]˜£%¦âv&ø+ø#1ŠÍakþèÇ©ù#˜¦×<0Ћj5a_€:$¬“Œ>| , UL?NOù ¶¬áAkLœ¤ Q;8úS•[ßTÿß µ3cù}© ¬././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.440556 ansible-core-2.12.0/docs/docsite/ansible_2_7.inv0000644000000000000000000044421200000000000021271 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 2.7 # The remainder of this file is compressed using zlib. xÚĽëŽã8¶&ú?ŸBÀn ª€RæÞÕ=sÎÔŸ†ÓáÌt§#Â;ìȬšƒA¶e[²¤–ä¸Ô¯~‡ù3œórý$‡kñ"’"EÊ¡¨tW†¹nß")rñ>Éët“%ïImÒ<*ãæ”/¿œ’æXì‚ÿâ2ýæ»äùý±9eÿö§ |7¡2×Åîœ%À¼Íâºöà}í’Íù"qÓTéæÜ$~bé~?\ªN²4??Gu™lÓ8‹öõ:^ê¬8Dûx›fió2XALEIU§E>X^d˜w¼'x‡ äEÄdA+ã*> ÏÒêœGÛâtŠó &˼÷'”ŒÎMš¡=ú;øw]†¦‡6Ñ÷›¸N·¯Vð~r³š\Ì¢o³»ÕüöÆ#ú” ø˜zÔ¬f‹ùÍý¯Ñj9›Î'‹èÓêu°HˆwQ[Äûs¾m û+:W™g^Ó?ß'Ïiý½¦_I_½`üû8ͼøIC°_f±Ïç+x7EñàËßĵïKýž7°®o†Õ±ÉtMªX´\ܞ߬‚ºÙý’äqEĪdŸTI¾M¢¸,“|—n“úöÈ÷é*¢œ¡Aß÷ÉÝÍüæó ?ßÜ®Öóiôq6½½žEË»Ûëåz½7¿E³»»Û»Uôi²ž,Fиú-'«Õ8šV÷W·£ªQÙ·Éýb=’>Z¬cé‰&‹Åí÷h5!Þ¯fwãé­p™ÂÙ¯ã9ýi1ù<²ëÙúËíÕhêÆ)†édúeÆš©qµ­ÆUMoonfØ Ž¬xy7û4ÿud¥ëùõìö~=†ÖÅb|ÿ2_“`a5’Γé×1KŠiåbNÊüÓˆ o·wÑôËäæóìj4u·7«ÛÅxý'Õz5ûxÿyE“««Qõ‘8x¶UãÝìúöÛhNcP3–²/óÏ_äÿ£U˜Û¯ciZ}/ÇÒus7#­"´_c©$ƒ··«ÑÔA@=†®ëëÉÍÕˆá9´|óQZÞkŽÙŽ~'1ÛúË8šÈx´n¨±©æÍï¸ã7Ú/¾O~K©*ëÙ¯cäÛ|µ\L~‹&wŸWÑú6Z­¯F …f7­aÌ€eóyŒÛõˆ”Íõ|µ"e‘øàj1ªæû›+bÞÌ®Èïn„â"cœéýzœVõÓdºékþ4_¬gwãµ3Ÿn怜K+ÛqÀ}AÍçÉbòëoÑüóÍíÝl4uw‘®¾’–u=F»jÒ:6d2šý6ÆGÇÔ­o¿ÎFñ|ýevGZ…±TE«û«Ùz4u£3Ù—Ío¦‹û«ÙŠ´Ú¤ËšŽ¡xõ%ú8û2ù6¿½¡€¿Ü®Ö«qÔD_g¿‘ñàlúu”þ²^/'Ëùx àüæo$4¢Mô8=ÇüæÛd1¿¢}èd½¾›¼_C'0_Œ1$&êg7ëÛ»ßFT…3Ê÷7Kâ?é@ç«ñÁ²Àb\•¿.oïÖcj«½Õ5’aòçÙ¯cê±þs•¢üÇ*ü¿‘okò3)¦õìW£©¼!Íæ³_g³%Na¬1²cnd1ÿx7ãã\ÜN®Þ`qqKtbÃÌÆI#©ŒÖ³ëåº>³w]ãDÝ‹ÛÛ¯÷Ëñ ázò+®æÿc„j|}{uË[wc z™²ÅdŒªÁ”‘hŒÖ’ñœ½_Ï#x{3[;ήHD6ÖÓÍíH4Pô} 'oáãEÏšÔZR;V¿­ÆÑx¿X}y7[‘nm2Μé'×ó¯·m@;¹_ߎ3;/tC#^Ð?B-aΊô¼k1s:Ú8FÑsŸ$Ë×$„xK o¤{MFÜØKy„/l9_Ân£QúU˜àûµÆ%ÑÝííÎß’ïc~Cú×ocìY×ÙÕìf:C×üÛd=Ãï ‚±ñ4â¤Ê8ƒ;,Ž3ð`ÊÆÙe@¿@ŒbÇlÉJW“o³‘â)(ÕXºîoH'2F䳚.£9öÜ#èú´^F'ëéXF¨Ë«/·ß£éýj}{ÓFcøûu¾+ëþó¦ èº1ô²QÂY‡‰f~|ãt uÌ5Ð7fgú 5˜ÏF*”õùõiv7Úž-º&†Ìc(¼#½Çç߯Ó4Þ0ƒh„u´õoK¾&4†Òû1t\ÝŽ£eœm†¨i¤M†¨kœÞzu?–{ã97–k8”ƒõùb¾þm…ëÙõˆëúÊê6Ÿ¢¥ªGR>ú ùÀ¯ç7“Åx-ÈzFƲãikt†ÝÂ8á5©Î†ä8 ÉFË=º) £î~[®£9P­Gùr¨Þ·Ò³ˆ+®!\Klxÿ~{w5ÒP’n‰%›\/ÕÍ÷Ò¿" ù. ˆä—³«×®Û.æ¿ÍïÖÑâ×its»šM“³WÌÜÌÖ¤¾FŸïnï—lâöðâÿø÷(Oš§¢zˆè1§•eñ&É‚ð?–ø!Kë&*ö:3UH´„Œr-“ÿøwÔ^'ÕcREñs\¦fbf6îÖ¥†”Ê,±à_ÿüŸÁuœÇ‡P7ôë‡U±oÈ?ëã9ß%Õ‡GöG°K!›dÄžP-;à^ê_ÿüßSRlþžl›÷'!G‡ª8—^pun5¡†HÕÁ ±| ¨«¦N<¦UsŽ3ßL7²·n0²¡TÁW:”±BO¢¼hÈ÷¶)ÎMt,ȧò¼DÛc²}HóƒêΙHE‡sºK>¤ySÑ!iÂÕM\5ÉŽy‚Æ5† 1$C¡ñ I ¾&/Á”¥¨²âpÃ0×C Ôû÷4ÿ{ü³U-?ÇXG¤}IãMÛ@ 6&}_ƒJÁ<¥Í1øÒ˜¡Çú"[i…'ð;Xòßïâ-)¿š}ܾjÂØvîã0¨€}$BÁ—â)ØÁ< ä ¦\xøWf²z[œÊ,yÖ£]ÜÄä'W2…Mˆ 'œ0ºJ£8Ž#´µMª&ݧۘTŸÞï¯_ˆ#KCÂS(1‰oÑ¢Dù"'Ì…@¢×ÁDì—{’<%©?ª.xöB5À3A’`0´N•EÕDMµ1©ö1©?e‘¥Û—(Kâ}TVÅ>ÍW%O†ÙËè¤tç_Rv³%)o¥‹›&ÞñàßL0˸xaÉøa2[þȺ]}Ò4”m) VÅ#QÐB%9¹+Nqš{Ö¹Uø¤4)Us¤C—>¦ù. pë )‚åñ¥&NUðuWWÈ+¼¸«IÂ’AöÈ\CÞªY«älS”¤*<=“²Ìà†ãüm¶Ê¹ºüeRR ›ˆ`ilv2ÍNò±JwäáüÇ+Õ2ùÍ-×ç c}(œ JQá0vÕ S(ú·@AJ5û3tƒ84^ ©6HÓ°p‘¶Î(9•gñçà–0¶»úãÕº ¿(<:Œˆª"Ë6ñöÁ ÑÌߤôÓe¨š(Â…ÏŒtŒu RáZñ£¬HŒ–<üöˆïPùjúe~‚6n©8RçqY‹Æ×¿ã§á$¹L‘¬©XyÊOK˜=«à›*Þz¡–¸HÐpbš P¤UI]œ«-ôÿÿò±šêPH‡oÊ’*`€ÆL¹° 5ÍÓ&%­Ü”C^ùWNà bòA6©ñ#œ¢=^¯‘²öùÓ*l¿Î®?ä ý„LÔµ»(Bú%ê#«ÐRõE$ØAË\”’2Éh O*2B"ò­„/¤Š®„D0MëmL¦sž9ªM’f9¤êæðßÝ¿kÍ»¦n*B>Wã9ÍŠ*l5·N"QCCbÕ¦3öz ®pÍþ Yº©âêE´t¬ü"K¨Ñ1¤à‚}d% +~âcàŸ‚ ö»ŸH3|&£H8>M&Êâ@RQAò8ˆèéÄþÊ~Nžþ÷ŸÛ¿÷Û_ÚØ„Á%Ÿ˜‘(¤,ŠÌ×G“PÇcòi"SL]ÿU%í‡Ùö—3 KB•‚«oYœßÔº $u¨ºŒÉàéÁ/T˜à[LnúÐÈöžÌ6g±–±¬šajPRHûǼþðÌóºÊ¿Ÿõ„šýî`®âü A. ñ#ƒÙ *Üõ“ë &£òCN¾’í²{XƒÈXGr†'1ʃÛÁ#¡. Ðò c›‘z°,H|Æ9¹à‡Ùò³˜Ï–ée‹ Z/6<ôe–Òar.>dUwÕÈ®´D:M¡Ñ!‰¿–EÖº@¾ïøÉ̯Â&Ÿ)šÒDÛïŽàÁ.œ÷ë5‹³Éü a®سa7qwÀv›yE¬ TŒœù%ÂŒ=NDy±s_]Þ¥…@“qI"†‰‡H¾NNŒƒ(ï/8ß%9oXtF*wU50Kið†D¤$$£da¤§,jž‚Ë‘K…d¿–àŒXHá09–êôW$€Âß”‰_FGé!¥«0Q5¿()HOðSŒ6xú/·+L¢˜ Ám½Mò¸J J«?ÐhL‰©¨T¾~†ß­¾(>7ÇË”†( :áRèlÂCR—Pžs^f¡•3ìÇ@¤J–’ª‚y¶ËÌ0áÉr> ðïà”Ô5Ô(É‚!Â÷6@e¿ã&Hk©0þ*éÈ‹§ïp þ­®{PšûÞÕú÷ŤlÒ}»ý˜ï2i}€¤ÀIéÍ%ÏÅ—a«-ÞË+Þë){õ93–í|`×F¶»¤F´R}Ž®~ ƒRÍWKs'Œ½µü´½À‹V¨Ç ÂÔë¡Ë.\OͶ^ŠºÜ÷@’êq¸z}Ù‰ÛÕò“Ñ `ìu×·´µîŽAºÇ-\¿dܽîÉj•)*’l{º†,&¥¶ˆëd{®H`u¡Ãš¸ËcÎîv™sv|è¬+õ0®³Ò%c‚”w¥]¤UòX< ¬ÈXpS|¦‚•8þéþgYè@$:&YéÜèâ“}àlèMHÙT7LŠØá¤„ &Š+Uò3ïR›©;B¿ŸIð“Ö=«Ã8+óðßÿƒ9Y½”¤oð竼²/H†ù'XrÇ 6Iu²IlO>$/OEµcŠAˆì¦ñj},ªæãyÈIJ·ÒŠkŸþ§¸ÊÉx¼ö8E)Ÿ@gú…´öL$ÓŽ$·1;Ü¡X(³ó!͉RFýÐJÈðD¤ÐЦa} Þ=‘Ö<Ï^‚´IN¤˜aOJžÊ7,Ê}ï‚c±uÈ!+ê:®^¤bˆw!ˆ’²Øíè¡àÞ¯@eb^ìvôð/¯áŒ ñ“AàÏ ŒbØÒÈcB\b§Pä³:ìÍTq<6€=€É©¨ˆ÷ù#ñ–üE>ÆÄ1†k° š @?te¹4:éa«³+D?Õ¸ªa·,ùñ¿ÐA ÀÉklyè^Úì¹Æ±²{L?k˜¨è„ý îáç»ø›0Û”l‹Ž÷Ne3´Š3%!U2%æ÷KßÅiµ©bÒjï’2+^N‰«ß´ò3댶tQ‡º¢˜ç7E('xš: Þ-c @“¢æ/*»0vY®ý9dé­¯‚UÝRz¤Ç¬ b¾ù¯h={tþ*Ske£ð›ÆN,+0,¾]YqÀó¬„ã|‚¯?Ëü²Tbd†³¬ÍÃ,kwìeYñ‘,Îv$ŠwØý4§’Næ üúAWˆºB®+ºè«´ßoïWÑÝlrE߇º^⥠ï¤v<Úá=i)#ÒlÃ÷èîÆ7°P´ âp„ÊP¨ ™ÊIKd Ð2/(ƒqŒ4ºŒÛíèBJSj˜D€¸ò€ïCh@Ѷ×SüR(âßI ³ÍŠóÎ3 “Y™¨$DJ[·0‘>VNêÃï'˜ËÑj¢báOtW&êÙ–šþºªy›¥ø éú“é¬Q³ „r%îÊ…»ó©|†4áªì!¡‘åö´+Jö`»Mà JU•º]bRþ*c[“r%¼^õѤú1©6E¼^û£E{Í ¯ÓÎumlß&Ïo“ߣgt]ô|`œÁøÁ ! ãúAq]»¶êŒ>X eA貪ϣÚâêìævÅȹB›ÉÇøœ5£Ú”4šŒÒJ2†±M~2êkŽÅn3ŠÂ“xÎxQÉÞ5†¡­Y}‘çI;CóZ­6“±]ºßaÆ\0{¼îlõ{£zŸÕGûѨ]“x¥‰´ßDˆóðofnuËBY¥0¹Ktmeé)mÆ0”YÔ×ôªºQꕤÍdŒÝÌ~ưv2áƒ3R@²>£A©ÿ€ QoË0ynª8Œ«Ã(¥¦i4Ý7£[ÕTÍÖÇ"Ç3«©´™ÙYU£Ñh“ŒÒú¢£ó(ê-ºG *‹]1 |Ðc30šg³‰—¼‰ŸÇ‹w}&ƒMzJøüÓ+m5F£å—-6¤Áw:Jà+tÙ A”óM£õî&µFó~^&mê‘B`ã¬53}³0þêÍ¢ê¯o6¶¿~³ çîÍÚÕ›õë7k†î߬ÉÞ¼Ù¸~ûöƒÑý›o6JLßlÐöðÖlÙ› Òê· |ÎoÙ?ŽÝ¡íضã´.!v§t!1 㬿x„h!…qG¡s®Ä¡ñØÑø÷ÚÑ=;4þ½£wf¼BcfÔµK«êÝwôúN 8Ÿ:Šë<-ËäU¹Pw”6/eòMG£OøçPúhRê ù\J;¡ªþ4jé_Zäñ¨ßùqÔoüï£~ßÙ¨ßv=ê7ÒŒú}<Žõaâ,~~±÷ ”ÞíDhz˜âeÔ°BRÅù¶¿nȪºÀ…\Ý^^„O±cxˆA®Ïn±‚ž7+[Cl¶íVáDè¹Í$S×µ—ï Ø±ßgi>†‡DŸÐf³þ×î.Îß`i3U¾¥´¡ QÛQò-m”þ@µ‚ä±2,m$}6‹#Öbª§F¤â«àôƒ£›ö·©ê´YvF0þQ•ÅÎþ-«ù¸³l̺ˆ ûm¥‡¼¨Äu‹£ÙLûl>$IÖÛ¬ØÇãÙ<ôÙ$ýÃ.)Gô0ﳆuÖ9ã:È^å²7^KL –=÷Lí<ü1•#ýcê}þÇT¾ò©Õ›Vm<·1n½Æ•üÒfª|CÅ!͉3‡´9ž7aS<$#TÔªêìX†c ÉÈùH•šåæÊ·4R'qµ=Âع9#ÔBª«³Ûc¿›øPfTÖi·\fq§\dzÛj´[³Îp³vsåÛiÎ¥Ïô¡§¢ê²Z¢õw,[L›nÍgÒÖËÊѤšE†pLu„Š·5™§<Œ%1bØsŸ½âúúR6)÷™AõÒþhÑîœJõÓÞ™På6¶oSkŽoSßë·)ÆÇqËÏr VÖ)Xº“~-iÐÖrMch»KÕº½\6<Ó;Ç1É´™Mª¸<Že‰*3r6ÄìXmõh¹†ºÌfü¶5°•º ¹‡Ê#Xsv6lh]ŽlÆ{³îs– »²ÙǸí#F]63»×™êì`ëšóßÃ6زm›£#bØnÆÙ#1Óé—ec/ñ)ËÒ‹ÙÆñ›ÃôŒÇ7.ð—·Èq­†5<àÝè@P†TvŠÆëÁnk<#†ýLš-ŸƒƒÌuÏ v,úh³{lP³êÜ 2k í$»G½ímúLøœô·d9?صêÜ>Ô¦¶ÍL²èÞSïmkk±àwŒÐߌiï¦dÏy’ÐÛ’¥èqg$äm&1›Ùgg8q“ÇŽ¬ÐlC¸ð*KÆrNÓi³û0–9³ç°ÉÛÀÑlÀo0ãm%uXq‡¨¯5åuRÓÛˆùhždÎ}XÓÛVf³àu^ÓߌéĦnÏ9‹?Ìœ6ßµV?Œkôíùî;õ6x2Ûñ=":^MpJÔÛ¨õœ¨lwÀAQÃÖ£¢²å‡´±¦¶êÌÖœLõ·i=›ªY=ƒmÇSe»M\5aL¿§‘Ì**-V“r,cʹXÙÆy$ 6õ#F•͆ãx¬¿ê9ÍÆˆžœ-V|Éú{d>&+Ù¯Õ°7>gqý͘mŒX8Ö‘–ל¦·ÃŒfÇ–ÿ„æ@³¶éLÇl¦¿U«z´aew"³µ4}ËòÕ[V¿¾åœÚõ[†~woÙì¯Þ²ßZ¿eSuÿ–}Èæ-§Ô¶ÈôOò–s2û·œ¤8¾åEú–“Àœzö–“õG€ÍÇHç7Ž]ß ?³ƒÅæÕ#B5¬q:¼ßWÒ¹÷¼€PdÀEhe]kCÖ¨\ÖÌú_¯Øôí´ú½Ö¢|LÖ d+^ëO~v ëN­%ß5'Sæµ&jËc,å2Ñ_ǘ_4¬ÇnIîÇþÄ·o6°Û=îJÆmíÇhÇ ¥cRÞhÊ){Prz»QB1vè^¹5oۜߠ¯«ÃÖ>9Œäîì0í–·ø 1LÌäøâ¬_x!©ìâ“wÕêv 2À ñܔ޸ÑÃ.ÓÇµéæ’ÞK4¶· Öí+cx ûLßãd77hËnJŽê¦JóÃ:N xûßrΪ ‘»­Ž›ùÌ®oH/ÖŽg¼tÛ%Óü-2\Rì‘ÿáe]¾yFWÉCòòßêu~RÃÖ˜<ÌZW™¸9çÔ¹‡‘£Aož<–wŠ®>SþíAVmÃm`,?{||ÿ<}ó˜Kð1fVíäû¨î ó™ãÔëÇ3>vÇ ¥MW¬jñß&`SøÐQx©¦îÐÌ#@ŸÎÎòÿ•ÿ~ÅõþAÍpŸnSÓ G-ãíá*ÎùîÅU—ó<ªU•ì*ó8yÚ¯³sÎÔÿx©C±:üóÙ&a}¨@UãµÁ çуÎì“ÇŽëØŠ¿U~›.µ|§mjöŠWÐ`ÓrT´x-°[ï0«röŒ~ú|–ЭS ¦eOŸ5s›ÂLSã³HnÕeX÷_·i5Îrù/ƒ[Õ*ÊŠàç,M¾÷׸÷½§jcTýû[¬ U-~ ðCëŸÿº¸M³m5|ØB¸U»mù{Ø ²U½mÝxÐ’qŸvöóE 5wœ•¦¨ÿÈ™޲½Ø÷\™MÛYUåyxÌŠÍxTÌoݦ³QUÉEÍÊÉŠ.Î0=ìñröDÒA¡÷³_·ePé7œ´ªÖÕFkãûðã«ãðé«cЫW‡Š__=ò»~u7½|uÿw÷êVnõêwýê6ãþÕíbüê‰Í8£ÂíxC¢äÕC˜ý«G/ÇW\ÒW0ÆšYÉ^= 8ð¯ŽÍë1‚“fŒ¾úª2ô??Gu™lÓ8‹öõ›ã ™ÍÙ ÷u?ä?cª¸ç%yw³ÊÐÀ©Üü#»’SßµHþáQÒ„K5bŸªäg¢0{ &õC² þóœÔøå´Úál%ɪŒ=í3¼>Ñ‹-©^›>ÝÞM¡N-nï„%ÓË©F#ò# Ú³«<§>ãOMu´ƒ7 ¿·Yµ7˜(ýG×Kß½H/¥ÿtôæûâ2­ ÿéjL/Ä ‚ðŸ®F|3ìB¥T–ý««îï\{ôv;W®ÞèºL%Jâu¥Ò³6Cµ2Qú®—>Ÿt‘^.Šÿtõ6çòBµ( ÿJay?¬Cܰó"¼Q¢Õð¥x Èy`Ðþ»¨R’ëqÈ&ƒ§c’&.ÄÜð÷W ž²ÜÅMmH4 ]¿¾KYg@þJ²¢$QCD£×Z4Ô°…Oº0!ÕÈ›²ëÙzr5YOLöóâ5m&—æFnnÕ¶èOõ+”aY÷÷•P]Ô¤G9¥ÙË«zТ™–N‡) (ýc™–0V ¹~¡W’îÙr¾$áÊÍüæskæ¥9’~:ÍÉÈ¥¬H[^YÝ$DÒ ?ø¥4æ #´c¥‚~´pçÎP8]Ô9[ÝxoPdW»žÇw„¬ í7ɉô]Û¼ÆØZçÙ8OÓm¯Yú»¸„WÃ~ed\X<¿ôÛ·p3” öC¤ $ºÂY‘†•ÄHaÃÔé)9mHDý¯þï nè ´p{ÂLPAplšrüüþ/A«igÐ¥UA‰Ÿ{k ‚O_ZÖŽ#ç,1x?Á…YŽã„»´Æ?ÈЖQ n˜ ¦ÀÈ`Öí÷bJ· ¬]±P"ˆ!Æd9×ÑʇWš+-þ©Ôø›À{€ïXõIa n#òž‰nE¸eªQÞfA5NÅ´g‰ ,IàæpQæáÆð’çÖUdAw'»]@ª[º •‰g–ÓŽn£Õ¯e%D="+a\u ™NÖÖZK’kS…Ž3'Ëu 8x–VåÉ£+ž´~iÂmNÁ„ý à±rÞÄ|Ôè(É.'×O(|œØ–ªÄŽe{wÎöCY¨Á¸fMƒ[2Ö¤«# HšŠ 4/°sf³3¬oT%nDò*1ªHqG’Ò”~q¨»sjºË¥fPFQP'HÔwqGñÖ=+I ø¹RÿA"ÀmГáå‰Åí %>nQ‘¡ T„ôD¸|0ÈŒ $h(0Íš7’9tnŽ$„ü=Ù¹Cr+ƒ(HJ€®ð8¶nõ"õÕê‹ÄIƒös#íPÑ”ÙùæõA\…€QHw"ÀO6ýïjŒŸé7E ·ŒT'†Fé>% Rè›\/X³ù.~ŒÓ,æûñãr/1áªÆA,-s¡P1áI¸G’ˆ¡”ôÛðÕÃí&¥O'Ø#Á-§a‡C’IœV)Ê@çi`i†&Èù8éæjâCÜÍVëý9# äßI'J} ¡[㋾Ã+áni â6ÙŽxFø´3‚ß ¡9 st<‰ý.¬ÓLJ—:+ƒ|èJè>H]$¢ÃätøÇÙK“nk2ƒNÙí‚Y@ò@cPÐhvüœqÉmðË4b3±nä^ t™†Œ¦àmEh@PÀœ_g,l¥Ý Ê«"`4_Ø—|ci ’2KéA¨uѨw¹zHËh{¸Uü=Œöâo¥–­”³.´¦.pÚÃÓ~÷øäp„„Þtx%è-MÁÜ&ÛÁ7Ê¢Þ’&)‹Ïd(áÛöH)È»\š]†>oŠp/»¿E„ëÙÎ¥Ó…­EN“e¨4ÅŠí#%÷‚QO{ù!3Éè0Õã^Ì긻ßõ¼šÅ›-é”H”J>‚„NÉÂèÝ·¦{·þõ1ËŽöñY=ž¶B×BÈñµÈÃÔ%.Éi 6;<¤öá`×3Æþ^ L"B…¥W¡öcŸrÖ{`ís„”T …‘Ô~^tø5ZzKê¿lù¬ÈÏuã•ï2ŸŒÓU„˜ÔƒŒÒû¡Ÿ»„ŒÀ³ÚA¦ƒTæ1 –É.0‹¯¯Í1?¤zØ…$ LŠCºÝ#ÁìQeˆóÅ)-ãÓ.÷ŽÔ{„$— LŠKºÝ%džæ«Ü¹ƒº‚D/N?tμ ÈˆE¢&€£l¸¥¯$ û¦Ø¹ñ™¸[Œ UÆ©¬XgÀµ$\Ë…×·jX ¨ UB§¹±;ªÂ¡Î6NÈS ehðÛ ç3{ ¼nüä«Aï=Žr2÷º}Ñx L’b·’Õc™AwP¦õúó9)®6ðIœ5ÇS‘Ãf/ü& Õ…C÷@!öºð9¯g°/ǹÓÎÈ«âf41Kîźb<(˸Ù#ºWjdƒ ?2†”Ñ⌢Ì6qsŒ«ÝS\%u²=WióBUáL²¸[¶ÅÞÃ+Ãïa³–Í&³b2”§¸me5ì‹èÿ¬_‚ßWàõÀ–:Ú×®Õn ¯LUðÊ;ÞõzIãØhÁK"¥Ý®ò«E]Þ«D“‘JÉVœórBxzkAÏ=¦;ŒV½ø^1»MsÃÀÑã(‘ÝÑðgñ¯0]ÞÖ ‰&c—’­€qV”Sº­ Ö^ùU›D‹¸Ã!ãî­è¯“µù½ÕHÝ(bG®òµxÕý$ÄjÅvÃè^ˆ.ÚçÒÁ…£2Y»ïçbdïX1|*Å•ŽÏ)ãýŠç «Oªã‚ÊeðDep9Ä»³þAZùúD‡µõ %ɰÛT+Öå×¹#ãÝ'IT& ”|†„1Ù±‚_ã¢sª`:‰Hì…ÕÛx»¤ÌŠœxõ«›.IvÓè‹ÎäöíJH8êj•P£Ñ÷d”‘]òJ!+®(;~ƶ lÐUáñiIL-@H”aÁo+˜»Âþ ÕlS™;RÕ9[0‚"#‰VX+ÁaÖ ˜^40Kót¢œnÇ™¸§éѱfæù™õIÉà \ª†w€[,ØõV,šIòCš'^þèܪ‚ªã„^Ü„kF¹|ðúµËV òNKÝ¥úùÐÛv×ù©lª¸ôí€Íü’ *]Á¯’ìà ßšð9:åºÎ’—8ßI+nøv!É“âˆn÷fµøš¼Lò´ÖØã’w9è¬ |Sî‹Ô>¨®<Ç›8<ë{‡W‚ØÒŒm²$òô×é—ºINÖÚí2ê.‚¾K¶{¼^KíM’ǹ{ü«°µ˜i² “¦X‘­)Ù¦Š÷¤o³"÷žO·ËH0»< æ.Ùî寣:Ãv¼Ýgüíò¶è%šŒZJS—°>aiÒ¦Äê›­V#.C¦v©Ö<•P;²î18Ç™ïT·‘½u@%ËàUŠø7Êæ˜ö~¬ö°à›<»«A‡U+H P‘jYí§ŒÅ°†ëéžWŸÉ03¿U¥+xU’ôêŠðÑ͵=“cõcZzàm¹d”$UÅFìˆêo©µOxŠ÷žÁ²ÎÙâ“H´âúïûƒ_PáùÑwXUtݼMíÅ×ÿQ?%›cQ¸gU> MWpÑ$;(F7!zŠ3ÇtŒÄÁP@а?”C‰˜€Åˆç˜Ÿêˆ7õâ‚€(#pôÛaù9Jû`äêw‚2F9vh„äD:ßWïJÚ; Þ3¨'z…¨#Oºœ2´Sˆ”6$vzt/;|L9ê¥d<Ãå—æm°&šB-Óî¤}Š_Ü`;¼Ü2 MÜŠ(Çi 2X2üÌHäoVÈíbzCZ<ËìÑJøˆÊ`kÈXC­éU¨¸Òrá^Ø`EYÅ¿K¥Ÿ›#Ü×»5\­^oI W¥=0TÀ""%WÅ'ÊOn€Î\¢›INØ_€þ)…KKÕ /ÁÌï¾üw[ýþÝP½—j7©G¸â <7ÈÎJѳ࿓h²†#Y¤2ÑÏnƒ+ÓpW´IN"’"ÇSó.”.É6r†Œ3”8e?¬êôoà#0Â)/` f-c-9ô÷bí’=\hî7õ én¦°eêz *1ƒÿ[± ®Žûçäœ €,ó›Ð"Ý IvŒÿ d Tm˜Ìô«Àæ%v+²,D+3‰Çäš /q³.œ>äÝÈ&/î ·\vä?P@ëXp;'Ф­RòŸÊ >uUMÈÕðÏü;|ó?L28 s®¤»o?q …ž.ˆ‡ .58ü¸fìUO=H¨éII T”p(WÎûWE-BÚiÒC ŠDmòڵͣGÂê—´ÝÃ$®×p޵õ”Ô1t)8³&…‚e¾).ì’,}Lª—h{Œó<É|±ÈuÜá|!ã38¥«²¸ÆÙƦ¸Q%Û¢Ú%Þå ñw`sº.'Y`Þ1² Ïy•‘· K¾‹J±À©’º8W[ÖäíR‚¾‰ØA¨}CÒ Î%ÙB¥œü}JéJ¸U|ãÏOìíò…³×pUÅв A+irÐ7¤í³ºftÍŠô²¡.Üþ¾7y@¢¯¥ýò˜ã¨ÅêH)í¬:/ìkF¹µRõ|1ùlÎù.ãC&M!›L¢oŽ3ê¸MÕg& w;Ê{Ç¡má¶HŸÒ5$÷ ÓÛ».lXAxØ7˜V¬¢Aú‘®‘ ‘ÕŸY!°ÅÕ´Œª8?$µïRFGP‚ÀVdÓ2¤$y)£#§,eÀdÔ|0 ]ô©è=œìÁŽeQPŸ·Ç ®!èÀ&¿õˆ|];˜‹n܃.³ìùÒQÉTIH¹w5[x{ Њ\ÆÇ9»à<ù~«§„ôðdø>9;¢ú”ÀL)”ñŠ´qPqùâ òP(õÉ»¦Ö'É|}Rjc}“¢P÷ðù¬wq°Z]K+@¬ò„: cF˜5 à=³÷”` Ý_Q¹‹v´à ‘Gɽ® ¹™ûî¨_eœVøõ)É5” 4ñ¡ŽàêT5ï¼A>„+V™ü:ÆÇ®wÁgúgrù»Fhñ)Þ·ï!:sËÄÝZ'ÔPPåRĤ•<ú>ù#å´xb~õ]çT1uê»`WOÙ‚)©jf2]Ô?w ó“„ 1J3¨ƒïL¯Ù=Q©Ïëqæžìº;Ë¥ïÆ9ï6òª@àE9ùž`U¤Î÷dƒ™F=[}¬bþôÓsßê#[uüÞÄ{å奠C¿»Ò˜öÞL”8dm<Ãà‡œMpyRÒœ>øÊ§Nñö»˜¡=,W'’͵…QÆÏ5mkcÖGƈt*nåÓ1sÄþ0™®~|/{ðZÙØuú «#(: Õ0u„lDopVX@JÞ±ˆngÍÂ&_W?ŠŒ”ñ•¥×Œ´•_G+è]ЂdÛ¥ÀûõÔˆ“…~eçƒJÝ.ÙÅ.qÚê‚A¨ô[ƒi:¾Ù˜º•BÕq‰>ôC× AT•%¡IPyë7(ËB:XÎdËhU‰öé‰ - ¼ØÏLwsY(Ú× TÉQZÚ^‡‚”áI[Fj¿Q¯¨[eµåµIa[«åÍ-5ß/ÐãÊENxÁw7”€†]B-®æÍn›˜†¼ÃÖÁÞápt‡†Ö[¨€™”º©^†Ô¢~a›;œÙR“,Jµ¯·uꎱuêTWÑ…NyºãtÄQ:ÜÉ…öd©ö¿º¥wж$i "=Ô6UñÂàÞ±¥w±áR¼ÄÕ*¨%òšn-Ø>Yåt‡$>K}êªUéêfŶ6à£]zR$‡Ãv,Dˆ¥¹[±Cè”Ú¤š½”„²ª°•p`ÎwDº>‹=¿[JVC²)“‘}¸^X@Ý–c’áìÏ9.¼Àjë€\³‰i%6KîuiíÞ'FÇ€‹Í^™d£vâíAÚÍZ¦„ÐãI«†J}Bè"Ád©€ý×I˜„n¼])a ô´•¹uÔ\hq<$/ô!p¯Üи5LœÚÉN³åkò|ÃDà ‰ 8ư X°Éd„á}ÍK€¤aåÑ€¯N¶U20ï JÊcJÉ6¬+¤Êp³"Þñ‡‡4'V9 ¶ÌgiPºªD‹¤öI½aV‡£vãíCÚýް2N6qíÒúaH[å4ÌŒ/>KwU‰<æÓ*@êd±"7´nÐn‹M^õƒÔfŸ^êdpJo׃" » Yf´eqW™Ö3^¿¬þs\1–n^+ .pÀz/h9¿5¬††EéƒóÜ f‚MÙúò[VdÌí{ר”×Lx0l'à¨Ý¢^.z9ç.DÆ(•!ÛòËvüFÉs“äî§Œ=¥5×TîPpw¼³©•äû[ÙM$•nY¼VÔÏÉ~×Ì5Ò¤NTE}ïµÞKj—à÷AÞ¹[Ã4Ø=ˆqóãÀÝC>*úýá"~E¢e£W2±ÙTo"lê^åì 7=td öªÚ‹”î츸8»â½>ÒÍ">Å()¶~^t“‰å#ãï wÍ$iöŠ?1Ó뢮ã Â:¼¸¿ò~ÌöÆŸ„‘?%›û´ ZÊaÉ_Y\Û²OH¸m_ÏU&2].3"9×ðÐIjÇÏ›¸N·p„¾ š¢ƒ¸_9Šv ˆ*ƒÁ©â°ÑG$¼Ûl÷Qý”â;z=>wؘöí>¤ÉÜÓ–QI†íާ⎮–€²_“xwê·,q0£"ìÁ9?ÿǧU°)Š&î:¬U|ª’äãêêêÈâ*­?¤Yv>$Wñ¶õ±T/Ûcܸð(\M•pÑĶ"qu𒦔ì"T ªt›ÐRð¤A++Ò.âh_TÑ#?1ŒG“éÖ>+¤ÖEUÇV7¡H ‰öPhǃËL»8¤Œõ7 hé!-ñTÕã¶öEõË0PÀ2žîˆÉ¢B9Ÿ ªã'ÑäþLw_:`aV°Â‰tåš]HF÷qþ9„Y8PÏï üÛ,%_s×€t^¡…HSáåÚÅ<ÀÄû…˜Á“Ñ î=!)Ì:&Jì‚¢é:*v±¾ Uq:AÝ÷€¤p*x(ECé9ô3±[mÒ¦ŠáŠKF®ó¿’Ê„·p8x磉Qƒ—IjXðºÈnÅQŸM©éE^*–ú%ßF±ûº±~™.Bà cåÚ1‹ 冤]ºÇÖ—„›,iŽáØ ^§Ë|Yæ¬ yܪha–QQ½#Q’óRÙ’˜¡ÒÑ2ÇÛj}`u¸\HÅ[r5`­˜ŒŒFev˸#¿ßíÑué‹KÊ€Yæ2b—”kU(=0Ô`<J¯zø2±»µËkoZfƒ„hÄNÒ 'n8V˜{ ge7€SFo]A:’(² .±” Í’‚WÃÈ>÷å.)bö…)¯“[Õ(u‚&Ñ[Xx>#³ü@Ô¸6œJ“ Aêià-í?>™Ý€ÉF|H‘ñÁóÜW¢5_j‚I‚ ,%þ@UTÆ`Ëh2\ž„ÃûŒŽÐØMë¤Á­Z_=Λ¡e6`'D#n’.c¾Y/ºFÝSêú8 ü%n. AFW4­V_®¤rß[ð5Õ¹nüÊì„H6BDŠŽ‘&b%…Îÿ˜’OiCÃI‹š—±oCjkA MçEm&ßäñí™8¯ä«GNÁÉøB¾³ø4Ü&UÊ ‡múÌðæ¾ö«™|ºÖ½Øx;¤síÎ)fô°…Úš]‘2Eúé:¸*V|…Îôy Þ5³„¸iȦ‰ëpÅÎ)Î'†pýà«fpÒ…,.TM_åJdG ѧÚà>©¡°u!#lÜ\Õ[('ÿ»Äìüvøvä:h±5¬Â¨ġ9á0„tˆWDfᆰePñ©ÂÊ­èmª–§Z *|ÛgW‡ih§…ˆ»­þ¼¾ÖÚk>dÅ&Î<Á)Ì::Jì£éJüÊ’‘64S‘§p;3MñCf’Ñ2ž¦tp**¸j²?» 8Ì®U¹w®ZÄlð9›ÝΡ8!ÁÞðùËŠàû,ãºèˆ&fs„³Ùá=¥­ÄXzÊâÿ.H"6øÀb‡ÔØHv@®/À\{€®ûQ×ؽYÝlËègû¨(“| ~“¬ÍÂo¼v•=~¾@¨sù7Ü+·/}8pЖE‘ùOZ˜%t´Àaœ¬ÐÄå^ ‰MX˜{*9c8ªžÌ² Åcë¶…Y‡£nÛÖ…z ±³Š¿Í2œQHÉ_ˆ±U•ô€æ»5ºàŸà^Tï>\åÖá54õÛL¬ p)Ÿƒ§/rXöu£ÒXeHœ¤âá©úX^¤w§RØþá󚵕]†äP{ͺ+¨äÕzºÒI{û¤)(@a~í—/J¿“Ó 8Å cF œjCš=Ge¼}pÝ;Ô# cÍžCÆÐÛ +hÿ?²G®)hÆcÄì9ÒJ-#¬´;²JõUŠ÷,ó§ôÚ¥%¾•§‹*+àI»º+ýVÄÌ2RÂJ*fM\ÉMB $š‚÷½ÏöÖG¯–Òįƒô.TAêS¶¶oxÈ쑱¶,êM³Ã"™ô ²¡³˜ÄoE©Ë­fÁOgMISÜ7«¾QËC/aWÿËo¸µèn £8Æ'ö±‰Ç¸da— “¸Æ#=cŸqÈÂ6áÂu~*£Ý6U1¡–°˜s fxus½¤«ä[:?ƒ/dàSûáj:ùÑæŒ’í±à‡&bòFÀböƒ+èÉ{s Kì!C@ßáŸÇÐoȰoáö òõ÷¬C=÷0oaæqÁónº–Û„ŽPÍè¡P5ty±óéØ$6$«@ ¥¹é2®šÔ3`Ñye‚¦"Ɇ‚&°ø.¿XW]L‹-Ý5–\³YýmFºÛç0kžQg—Û°Jb2ÔÅúšÃ¬,ç°Ù‹þ™ 묅yÆB¯XÒäE­ ó„eÁ£q ¦Ùªâ6K!”«k/ 6![ˆ¤L!aÒ@v”(ir°Z-úV%¹¿ð±ËmÜ %1=|ô€†aÕ¶8•°FìÙ†ô‹š@ct&±š=ÐêX™æëÛ@>Xqw°zà+ò„?Hì²#dÂÚ2™·t÷mžðG=З¤…HÉH öÊ×Õ÷ ð£GÜä‘ÄvÜaöͤXþÑË‚ø¶‰]x­yêu¹M~tâ!ILF¹žzU!¿`¨Ëm‚Ö †$1Úý• }Ԙ«Á¢´(šlG£üF)õ‡Ç4yò@¤0Êp(AÅBÓd 4³fAéê3ÃG¹š$ª ¯ ¤Ë-£¡Ô¨*$ILÆE“H6•“ª_j˜çñ§ðàQº %qˆiyÆÉO“åmŠ:`˜±¡OEúÀíp+`[ªµ%(y‰J4Ý„ï=y«Ma\ÿÛn ^Œ¾)Ià‹MIu’í½Ö_FTH4M¹{ˆ¤À†D¹üÙÌ¢@B—,¼‡DF]å0 ‘Ta%Volv@ñ™äúä*Il °“AŠúVê5nm?hhÕÏ&ß±†Î«€!4èCˆ(¥x3YÓ‡é;†.8ÏsÎýÎGTh'z t|²°šw0ÆI¶qOˆ`8zëÌ݈§§qF#M{’x;¨€fÈ)HÖñ!.$¤9œ'²ÍÔžyŠ«Ä㥎)cP_í0 «‘(¥Ð ê^¤t#ü ¬Šˆ-e±á¥TDI×±$%£ Á˜Açq^bä•qZˆ4ŠA4Ÿà/ØëÜOW½ŸZ'6œ”KÎÛÚ‘‹ŽBÎs ï÷üÔ=µ†—¸ïŒt9 ÀS{ÍùKl ¢ZŸåÇ -dLð›_ÓIßÖÔ¦©Ò¥|Ü’ëpN¼†|fC$ª([!å“zœ’“°Øö<Ÿûóû$€lK vs¾Q\_Ôá»c~e~fï͌Ό}›­¼öCŠ®g–;l 2é1å–QFñm1¹é1?Å©O“Ød󬚇4ÿþ€Sã±t7ÂŽ.jnBHð²Ø4?óÃDÒÝ Ñ>®¯Å„^±ì?B‰-äl2x³¢î^‹ÿ >.8HµÅ‡ì/^sÙÁ>?²¿è3Ü6e6_Á¹o?o|¦¿‚o´Iq›²o`ºÜáÍuË£^õ×)[}ò©KtŸS±ßCwp]¶Ïƒ:d¼ý®•6ŸVgðrî)Þ_äX+×ïás9DXìÎ|Ÿ|29R%åñóøq]§‡Üù´²Ÿ¬ìåÇú[^Õ)«Jum˜Ä™‰IÄÔl´Éšïÿ4;;ØC§[=¾¨[`i»ž‚•{›Fà Ì3ªÈ½f;MÜÌúŒ§"¦ 5k0dúSþ”ïΤ ú K THR7Sž)÷»ÍïÿkFo þN]aOÛ®ñý@ª(fû4À¾Mç0;ün“"š»/?FщN'Ó/³h¹¸ÿ<¿Q”ZKt~¹\eSÑôöæf6]Ïo5«ØŽ™k°, Ä’z «úJ7}~Lƒ‚~y7û4ÿUµ =0½ÂW¡ØZϯg·÷kb,Ë6¤7 ¤Bï ‹YQ×1¿‘ƒ!®ƒ—~(´F¬÷¯m™OÙ8h¦FÍèÁ”ƒ¤R·ú=Ê×hÂ^ʧ6Wõ~uWMù÷Ç·×´ÇÁ)!YkBq‰’‰Å2ÞÀ@†|ü«Fn¹%´ÖÛ4e’;ÍÏÏ •¨š¤Nc’‹$¼;—æ|¤´‚™›f?C&+Ðh•4çŠt_Ðm¶”²"·Wà&5‚ ‰ËsÖ8ÜW˜¸}šØºMË™^ŸêàCp"ÿ=×ÐÄS0ŒF@Oéz2}5=Žù†3½lì ¦Ç1_…À‡Ãì*³“É„­@`$Ñ=ºóå~ò}6¦YqÞÍò3qlè¨ÊýñÛ¡›PÛ³åòá·°ˆôU81wX[Ð[X§B’ŒºP`³´]0™..C,±÷Á¬3+¨QÃ-ÒUäe™½@e&ÈkhN[í ݰ¦N„{7.ÊÈÍ~ç³ÁÃÄ)°жµCaW'‰?] ©¦ìz4µö8ddUÀÖê)U —§_‚×¹«¿Ë§ •÷ôK¬VŒH ôPFŽå«y(Ãv©@°©?‹wÛÉÈç”f/ÔÓCéЀNÖÁu ƒ7ú]ÈFqÅ£¼ nñà¡/çËŒ]¾S*¯1J¬*VØD¯¾ÂxV˜„ 8-°¨èKeƒÑøB¦ðG z†„:4Àñ÷XùlùT$] ¬~`aø=p•Àî:\…K€¥©Tš@»úgìP°M.*_ ‚¥Ë0X[ŸÄÜö¡,RØ{]‚ä2Íaõ/w€•™RL”`âoõ‚”O2ø‹p?ˆ»i¼¤#f¿äåbüyoOô2¯Ži]ä˜lÂM —¡ÎŠ­ûŠv ³Š›uà<½‹\P.ƒÞÄÕ!i¼ö_XøU(]ß¡‹vÝ Ä ÷`ˆ+Xj?$N =P:¸!Ñ€“/Ãê ÎX`p<¨z'Ýô­^H`XŽU‘ν7@ájÁ‘0OÙ @ÙT€r8Çÿ³ >ùF4zO«˜˜°¦IEȲ6,\´çMi5†ÖÃç¡QòcU•nUÙEQ• ŒJýz¿ÝÝ-ÝŸ‚¼ýàñªyìGcl1!ŒU`œYÝpHÀ©“×tiÒ匌Ÿâ?¤*³†–;ˆYº:ßÀÒÔåÔ¼w9Õ€ÝkÎÄÀ«#×çJdÓ<‰)á]ÚTéîÀoûôvÃãþ3¯æ†z &¢ViDÌC7¨Q­±gí~Œ-µû1îÖîGmQ‰w§l·x sÏ0ðªš7çêçêq×ï(¥ÂÊ M!’ÅAÊiKy'_ì7ÃõggnbC{)gSÏãÚ±nš$óу¸Á!}Là¸pàFôsŽ/«';z\&ä{帣É.ªÏ%„ ÉÎì<÷C|LŒà ¢âK² [á»íæý#òýÃÙ«*mà8Y´K«¡ç=ö°°¢žë AÏä±Hñ¸•xî¹J뇚Ÿ|³|ï‰8œËÇñç Ÿ#²ÉN¹½Û²+Á’¬#©¤j‹S#½g.>D^vB$ˆS$A KsÉ/Ô>ÅÏéé| (LÀö48žƒgP€ûs–É3q?oºñŸê%eyŒó)ɧc’¿ò0S¢ªi†õx2¢|ŠšÂ£«$Kb8©Û¡Ò$9ôý,Ÿ„B2z} ‰B0’LÂEƒ‹ë€xˆâLWä§«7#þûU´E»*ÝûZjàR,¼i!9¤¢íCªgŠ._Ì éüƒ+L]'p`G¶ùâqz€ß`ëE¶ôÿþùÿ\‘¤»sþ¯þ¿?RK°øãsÔ2Þ‹­dV…¨Üç˜|fÔGzî’÷½üðàuGâö!Kçp$.üxöìþ7|rŠÝì@œÝã£å„‰à€VoȉK*Á1Àßò¹<šb8n “C#¿Û¦‘9פúçEã1aeåg8=l颯èŠ"º-¿&!¤5äüc½-¢š´ìŽ©àÇDÒCLo±VËù0R:À¬ç® ›Ègó˜îHX@úú”„cÏ#Ü™@u.L˜bò»m¶âØç '³mÃ8Ö.¬PØå +ˆŸì"ÕIÞ¤Ád¿OqövÉo»Œ„,`ÛFBï)ÐŒt³ÞX»Ì\ šKBÐÀáv““’´×ä}-lÁ¡?MjGèU0óôøôJ#ñKñà|¯Ù#éZz¯0ó·Þpº¡4Q©(>ì°Ø5g—¥"R÷µ¨:W‹J¹U°u¯Ä}¦·Ÿ¶!Ù†XàÆ-2¾‚^¿rB20·Èd¢ PN—pþÄ«l}Œ+Êl}ÅL4§û¯†î2¥ê' u1MS<ª!>µºMÝå«1¶¨8AÄÓËdGG ,)-Hé%·n„žYgɳnfI¹¤íOÁ æ±ëª)Jlu—õѵkåï åô.l!jªšüŽz°(ϼäìv'Òldƒ¨wÅï®h“ýÈül7™E,”†\š¦+© «qNî¨DEÈZtìXtH Šì|ÇÏ/6qJU5Ð4EI{Õ‰E`PU‰dEÁmÊ8]ÕÅSUU0¾³©!4MIQÄc8ûm‘G¢ª“@ƒß¹¯ÿÒÎɯ–µÝÚ©ò^6ƒÓµ;1UÈ&¦"÷.JMƣ잌tÀ}®ìö$4¯Î™‘ UÃC ð“(C€#¨h':Eí0mÁ!u|NnôHp[0×8¤ÒÎt˜ÄÙ¦,' ;äA¢¥VÑûw¯œŠS§ßà{'Õ%£…6C† µºÏàE ×»FVÉ’äUÚñÓˆSAÁ—«d “ _£õ­fg0TMAÞn`ºO9äC†”“ï+Šû“XD®[ë¨àíAjĨRv¼_õƆ‰¤¯n† Ô…Œx‘‰%w…å][ö˜Àޞׇª Ü\âÉ®¥òo“‘±O(ó¨Ð;*¤)†Ÿøû*Юóbxª%É@–¬ßË®øVës¼¡:·B^U¹UJúþ8Kwñ<7Èt`Ë<ô2YžÖ‘Ó鋾,—)ª®¢Ë/QŠçI]{Ø<¥;ÎQîr‡œÛà¦Y­£’Q!¾Ä„RvÞ$¶e«~õ6Æ7~_݃¡¢ÐЙ!A6wPÃIƒÈ9„ëéXæ,¡<¬3)PÖâxzÀ²Ã5!ö~{ æq¼â·¼Ê^xñÌÜìúˆOë¼eÇÞ.ð‹mì勹©|ÛN…Ã)r¸ª3Ë\o“<®Ò‚Î¥×ðŸ¨í˜STÍ¥Ô^SÅiæ.™M2ÉJ¦cJ'&Yc*ÿþvlàM¿CŠƒ½à:R„ÆÞ|5Fh”F­>Å0çC1÷³î=’å–AyÜÝ$,wÙˆì;Ѓ0°WÞ¡‰¢{,k 0.ŸÁS:ûæÙñ¹Du'pM έÒÙ¼n§hUˆŽÁ¾P¹<8'!Ü]y»k9ååŽÃ¹ƒlCÂ~`u¼jÏ>9 Ÿ#æéRµåIí¨&/êÖ‚]™ÔácVHzHÓEV´¬èýGú§¼ä]sxr„oþìŒxÅ!yÖð’T>øåâ‹$/‹`zs»bŽ|¼8˜\8hø•‹$ð‰¾-‚:²’×4F—Q‚¦OdHÌöKl•”?íDgÎÄÙ€6!¬`²ï(A'f¸ƒ.B† À͈t>„npgäøÔÙŽß1‡”ÅÇÎÁ1›å©MÜV¨Uyve"c¯_á¸s’ªÃ§:'OSµ¬ÊÝ–RÅ2ßLDÁ@» ;KœhTF #(xX› ‚1+>­I3ÕÚžì’=ÎEþÀÄtdçûÖ…ÚÏÚ ¿î€¯Ù–©,#¹Å:7ù‰8g!»ŸŠí°I ”ga[F:™T0)ky'öP顊wɇ]ñ”ãƒ5lGÃðÆÙs²‰UßÙ¬ȵ´MìlAt‚!~´À‘$Rð•CNGEi¸±œÉ}P÷ÕP—Lðô+¯rÉRƒÛRúa7ltrn53ËV[¢RRºþN:Oþ÷þ³_?^P6Uâ|é©Ë'a§é lš¤|¬=!½>.ëyó:Æhà”ÁéGevÚä‘=¹Hš=g(uñ÷ZÇŸªÄ%y©Š@÷ßÀ2pmL¯06»â…úX<¢p…QÆN *|š¦´Û¦€Ö‰®QXý{0b @.:|rø®Ðp"–¸$´ª …íQÆÏƒ"m¼Ü ^n„—ëð:oF^¯Ølàívéºc_ãî%Oé6R~ÿ)á7·s±p¼ÚViÙð›Ü!õ9…YÖÐééñ+GçFÅ¢®˜Š‡²…-[Ûçi8ê—|Û_@]FÕD1IÌ´?º6ᤡ§U‰U· ¤®e<Å(j4¥Øü=Ù²½Ï.ÁA;‰éábvË“G±Kà)).;‡­§ìZ“)¥+YQElÇôÐýí Ëw[ÓÛÅí]4ý2¹ù<»âzéþ‰¨$KÙ\¦žª™ fåöfu»˜EË»Ûë嚣wÈ]bƒJRÕW³÷Ÿ…Æ6º7É…Z¹4×¼¼›M'ëמî÷ðDïeʉ0<þËuÏ?}Š&WW²j|AéråT\R¿˜ßÌV²ö–ÓŘ¼dânv}ûç}²êíT’êÝÝÝÞ1ÇôpÌÈÿ/«‰­4ÕüeþùË‚üŸ×¿âá"µDŒê»ýÊÕiy‘*¤ÊV_çK¦îœWIL¾ÒMvYYÉòTùýÍÝlB¾ô ^V$PÜõeú¹,Õýmv÷ñvÅõ’qe~‘R¤¿OînˆºÓ¶cìÓ ®tŸH Œ¢çBéIOñ'ôÙǸ>ûÎáT¸“•MxÁiS²Yùµu¥;Wdœ¡ªsÊf¿ð]Âá|fêLsÚ<\wÚ ¶$KÛ bù­zar/%ZtÔºŸÞ^_On®°ç7ŸWÜ@í9ß­q+Vj)ê`ó b¦›$@ôrqeÁ ¦­,ø†ç'üIuWÛ^;§gΆ¼ˆÖJókÁ”„s\ú€u0>r˜ÐMrE{¤~ÑG_¢Ç8;{v ]±B‘‡”2…wø+ø†¿Þ±èdk¨ôrà"1QÕâÊWwßY£e—`o(ÔúÈPÒ¦áÛvœ]ÎÖRêà³ ½³¸kW®æHO~p¯ú45/zÌ¥{3þ‹ô`¦œ%“X&ü€S¸œ Î*Ó;¯ó,6/ì)y sÉŒE–PÒæxÞXð”Úì*,ÔÒç´ùrÞL’´Á!Ç-²Î£c’•fu*Õï*n±1´¿JÓ|—<›!‰Ês/ÛÚ†‚¤G¿­,^J Tç5퇮Eºùã*àô^ÔÀsÐxd“Ô†CŸ,VlÜÔä-Pƒ5>-=!Ü’Q%süt(Áڜѹ¨ú;šÊÆÖUp0ùS%дÃ:-˜Pû$&MlbµeàfCð‘0 cwÉ?HciŸ¯TbXèýUöíaZ÷S‹¬¬¥o06³ÿÖ^5&xBIŸ£Žlm‹é-MKë"AXB®Í»í‰\mÏ%ï{JØdVíáÒ Ú¨¶ë“p«Ìkò ô„BÏŽ °Š(çã<¿t~¢_RNôó[’ü1­Š\tdŽ=NUü,ÔÒ‹dâ"ƒY›ÈL=ááÒçjä“<‡T”jðª-œw©L­ÖB¾ŒýæïÒGN_Ø„T…Û—_`ðØ®L§§_¹õ8ÈÝJ ¯Ú%p®gÚ¦sš&Û«/:Cÿ',h\ªö9±­Œ;p!›ŸÒn×°,…MÝóoD€=ò WJÄG†ö’4>|'ý\à’°§Õ¥àÈÒGº¥ôé7¬ïæl°¦¤ tãùßÏUÄŸEöÌYD $‰!O”rKæÅlû”àòA•à¦V(O\Yš¾l’jR=@ñ™÷ï´cí¯¸èà¿Ñ²çÚ^ólªÐ"=œ*Ò<ž6¼"ÛT}†çMI›ÜTdH’ì"õpWG» „„!ž “R±hîkRþ–憖_|ZêÛÉ/ö”ˆW˜ÛÕD|ÎÜ/êl-Òs¦¼\(ùÜxJú œ:E >aHÊ"¬Ø e=k4eV<7$ò<Þ7ôH2’½ç&„éN‰Ý@þäz…x·«pæ\ÄÃEVšŸÛ7îÜù€«$$Bh¾u/ØþÀR~|çž@0Æü®)„“XBƶz 0¹Jêz¼=ÂÌ,Ä i…´ÚsbV&Hˆ òµP¥¡¢tJ‰¤J"ã\NäppU°Á-¹ì­å'!5ÃÀ‚k`-_š#Áög.;¢ªP¨š R@I'ý‚ÍÈ}žÂ¬Y°Â—·G ¬@TAJ}c¨h§Dîz‚«/Ñ‘h-*DjC¦6äj§- |H½½¢ Á'ÊðÎýìVç¹-ù™-éy-ćB ]Ëwз@zVônRoAº®XxÖöÀ;óãÍËI$ÀÛ•Ë!xšDÁA<ñeÏ(å2´tàPzUVOIÃ%5à¨( – uàUMÄPˇt]UÂk«A¬™ÆIÁ&F ±ñQX(¤*]lÉ-*ˆB <`Á¡ p4ôj1϶Y3 ªMl`3"-ˆF¸ƒ”b"Œ F\ÞÆWZ£4|ZhðB²K«mpÝÝEnÃÓÑR#¡]„ }pheQ@÷ö‘8°öœUIÏ8Ak~±ÂfE­pwËB^yZóÛ BÖ):°;kŠvòž\4B²VGð|ÝAodã}óµ›´e5/ƒYðÀùZ™=qyÐE®ÑK#éŽÃƒVB ûc™ï·©²‹®<„f¡Þ|K_vI6Ø#[”¸Š11«@Û1èôiXÂCϦE28=¸„œŒ0±É0ŸÕ›ÑC8º²BÍô²Ì‡¶h ŒCœS'±/¤+±×…÷õDÝá+‚0Ìaºì;x¬;xm;Ô¶‡\÷±µç2¶¶ïbë¶ËaÅð¸ s|à¡TxtŒJÚ¾þ® ±»Â3©44 5aÑØÑN‚Ñì7,šDãØ™ñå8A=?D|èÜᡵyæ 3‰]Hò¡sÅã®0ük £õPx SØDl&³G·LôÙ¦Œá¯ôxËtea/F¥-¨"„xQíMcg‡iZ>Uý,²ÆÔÊéªu+xHvÈeOæüy Ê …bþ{Y^é´(bˆi]åhrï5N¹Š€"üÖù…@ô³aYH(‚ k3«7)»iéª`”!•TêMLÔ ÖK9èû»wó¬ÂïËGP Ò!RÉ?”þ }²öK²´Üö=L¿€a­sñg…š7ûí>ß¿Šu8âÔ6Gág‹Gi§zW•lÓ¸·;éYÞ£´l­âUŶ“J' üÅFÃðxfþ%»]þÂ6ÇÐ܇iCÊcÈU4J”EBÍã ñ¼Ìé8GŽb…˜ÕÈ=MMÀ’Ñ*Ñ~à• xûKö¢+ ¿§î/’Þ4\,LÛ4ªhü,¨ ¼¬Ro`¾ …É‘ML6¶îFÓèk:GOe¨[?½øUg˱Z?Т\j'/ŽQûšð‰-oxýç¡tÄXkA“¼³x>CäµR] )™]R×ð0(¨›;il¼2Tu|'\›¶Uß$öÑäú =Ñì²¾@í->%ÁAW72FŸEnz£d¶N!Àƒ¨$«ÏÈéh†5—ZÃPÕV.8@)­Ų\ÏÈÞøP¦]J-EÄÄdÏÜÈ´"§U*ðµ/ˆ"Rfôe’mYdð¤ Mkãá8[SÄÂq¢\`èêG`P°\QÒàCöxƒÏ p ÂY5gËt>,Ë¢ai¦äÑ'kÌË…IôVDH/”gÚÞVï;b9Û7Y^;¯5‘C¨ê:+´ûµVS' èO[°j}¹oÞ‰?iU2¼O`…³_»E³_âîÐ#'Mðkå—]Ê¿5 ó¿êP«ŽmçN¥Ó"•R°‡÷ìÃÞruÐc§·gòµÎ©/+ÿ·¬§5½éxÁòùÃ…J¡Æ2cÿmÜ.pñç–:ù«ÏØâEþØôð¤0ð»ÝkƒÊÀµÈX<¦G¿:<@«ö q†UÄ/T@KIœíQÏë êN,õ4°ÄŒâÄzŠŒ.Æ—£ÏW³ÑùÃäöfvwõùãDü=|Òâó¼|ší‹:Yɵt},`«X²R®®n¿Î>ßLG—ãÙÕíí¯Ÿï¦Dýmóð±‚ëo1&W¦¿Š\NmõþTõ¾-fúÙ'iYž.kYú¤]ܶåa µ=—v³ aíÖÁRÅ(š@`àÈÿÖÊÜ*OÖ'æŒX8¢.¯F[yڦͦ\ž&y8â®ÇŸn/\y¸þ?Irpd}žŽï•¤5¼Âx‰|¼ÃåùèüÓØ;ZÂò .iÁOÿZb_¥ÐÙ¼¹¿Ü¯®>ŒÎí,zñEüE¾Ln?ë >:aF§FÖDôévú0³æŸMÓì’]ö  sòŽ(ŸîFwï‚ç`8lWæ9}=&ù‘ $3P¿ÉcÅLâ˜Üˆíft5»»½º¢¯/£+ 7ÓW(ÅË[ “›/㛇Ûûß½EòÚ\ÓV“uÛÆ_0â|¤ü_&7¿Œ~“ØÃøf*¦ã©+»Ð§GËeŽÌÑ­¾èIó[šî¤…ÏH°Là#Íð! Ëýu<¾Ckñc˜ÚÆ:¯y6‡'`³üy1+ÊNw@ìq˜Y,˜Å3‰âjòáËä^üýí|vs;Ÿ‹ÅøX7=t)ä,ˆ- tC䬈uq\ÝŽ.Ü%±Q$å¼ËmwGË^€û:‘^ËÂf×w†Œµ×\öBÖÒb¶–ò‘×-–˜:0±ú,ˆ°º)E½ÂXAŒ¼iyG ºÀY©ñ‘r™œ+×£›ÑÇñ…˜þtIòñkR}ÀÀ‡®ÈAIº½ø,¶££{ãx%ÝÉŠ u$ÐdäÈ=¿½¾»OaôsÅçÉÑK&–‹W#cÙÄ’Šäè/–„I7#ãì‹%ÐV6™¶8)ñŸÅBð¼íLÅ‚lô`ޝ± õ¯CýËÏ]•=‚²î·ô%Ô&¬W$±+¢²ô£¤ÞO¾ŒÄ"è×ñï¸j Ƈ"hÜó4Éøù¸¢ïÁÓ—‘±½ç¥_ s ŸT^ô!)—{w·÷®¤Ž’Y’u”Ì’¬£d|tÊ8€ ìî%çŒ;õb7ËV ¤¤Á ÎV ú¯ÄLÏïf“ËÙtjˆ½ýó¬Þ¥èŠduló`F13ŠWº}LÇW“›Ï¿Í¦wãó‰X.^êR¯šÝl~Ìa?¶S—¹ÄÈE ¾|¸›}=œ‚^w‰úÏ=lø“EsÂþ‹˜Ä’‰’ùoŸaÃO·§FF…¼¦JŠzªQ§\°N±ää^³ˆš=Ün¦—ã{÷²…!:®Â¥#}1 $?\Ü~Ö‡á†TŸÖÃâ8¹–s/†š¿·¼Â-Yygh)Ø;E×ûcEϻîë½u§8ýlÝ' Ö§Ü% æö=¢`oß! ' ‚¿5 öÖà 7ÜG³I5ß‹[‹éI¾,"¿¸u ]8­Ø…·à…·è…˜“ _HqŠ_±+xp’åÒëÐ’K¬¸(y¸J„›‘ÉÕäAwrÐsz¥£b`ÕyNü×ü]‡Ä å“áYæÉ#dåiÄÂñz‚瘞‘¦AÔ¯ n:„Oü‚OºÚpï4ÜË œÐNX&êôJLƒÖq_­á%¬‚åiÿ±}E1ƒ¥p¬˜IéŸoįÉÍøÖÃòô_÷"X>¿B-o-Â"Ü[‹¤õ“’Z™Ò ?Z<^Ÿ3¥An€À«Ô›óûßïf“ ±3û4AÉ–³-,ÜN‚-cbb‹ž\Ì®añ×ù ¹îÈmg.Yùþ„ [®}õc ·/´¢êÄŸ°÷ÔÚ^¨om?µÊ××Ûû {J~=O(q•^ICß F9ƒÆ¥Õ¿ÙNë57»ƒ3· }–ÑÑ-°®'ªÙ’ižÂ«2~Íb(cô’½°ésIOÁ|üOÐ þÉDÜ”'²ûë_þ¢ù…¹epsÿO2ä{çeý׿ÌB¡v«BÅÈØqê&B©û}!£â[76îízz¿€÷i·Ó¿þÅĉދa´-”èʨ Rù4b£Æˆa|}Ýг2ÀœGY5¿DÕH‡1zIœÖ3F;¿:Ès°©c£ì+LOF4âÓŸà)Øî¼ Ž`a?ÐÞ~ìin?ú[Û'4¶ ˆMíÇî–ö£·¡ýÜÎ~ìof?·²;Ù¾6öã+61]¢¯ÕÀ~ìh_RÒO4¯Ÿzš×OþæõÓ Íë'b`óú©»yýäm^?7¯Ÿú›×OÁÍë§Îæõ“¯yýôŠÍK—èk5¯Ÿ:šHo;Á*ÂXò<†º0¸ÜÌ‹mn¶¥ Øÿ)%áÝìQ ?Òó’à?Jäà¿0/_ð…èc­žªQ¥[n˜–HˆÞnž³ú(•hSŒ®xƒÜ6ÊQ®›tWGä:nQ*¨hi(^líª”<=½‡’wÚÙ*]¼, |’QÃ*ÌxòÄaeq¬§vƒ…öÖ~Wnçxߦ=¶{q™Îd»Þxy_y\ð$»¬‹IC<ïÐmX´ö3/;ƒÜ€HB”–Õsà2.öÔ/Æöñ×'ËÖ±4._Šd›-´S>¿(¼kχ1;r^.r'G)¬pÄtg=îð¾>k2ÛUqPOMîùoòaøgß'6T ™nÊ}¾Œ^Ê}Ä$QÂ9þ¹WŒ3(…Jõe0^AíÁÌô&j²ø ;kV¢”û³;[lÒÅ7u°A¥ðx*ÝUÒÄnŽÛòY¨Û«` ®«,ãñÿ6!gY–çâ~ë´H+¾Ç‘Îô¶¿r5+ßŃÇýœ­n¡˜%‹ìP$¦Õ·Ï³z!ªà|Ò?ô¹¬ž²bY>ÕCàtã+3iJô”äßšMUî×›~@Yaj‡@Q)Ĥ æ€Žná¬v?¯ÞP6 [3ójoá˜Ú–}˜®UÞÁœ\ÂÏVð6tøñ%ò6ĤZÀk£xd?ëuÿ7,Óô¨ä w+š ßûTé<©Cºµ$”Næ9Y›ïˆÝ|2DëJŸý\1ʪ±žB'îgÝ ?+ïò=³ë„dgÙ.zCPùv$Ò§™Y~i^R»ÄGþ*­›“~CÉ-fUwSê &A @lÙìþ`&¶·MªÙn_ú­WŽ'ÉûHÔ”td‡ìžZo‘Ù7…èV+0I{Á¥¦HekåÏÎõ.e?˜p€¾Ø”`‰tPˆ//98&Š£¯`Dæs ؽîÂh±u·©’šÜS~®©»ŽËlÙ³©’e**ã[@hZîò›ÐtHx„LÌ0dX„AL2¾`ÁaMvðÚ¼Àö0o&ä©jóBåc¶sñ·ƒGr10e{ÙÃdïêÔ²½‰Øõ±õГ$#`X Ü1Â> œú-Ä>Öo‰õ1°qø(z€ý] `qËsî œV2Ñ ï=/³<­ÈnXˆLƒž„ÝR›¤X§R%vH†¢& 곇¹ÝeyX˜–yÓGg6ÓCp°«ÿ(È—TÊõÅuòêx¾ÏòehMNâôw·ˆt»k^bpË$B““ýÝ-"Û*¥„!öDJ¬éwÛîyÐGÉÓ†àU÷±nÒ5»ãKò ç0A­tœ—vD·t4P›vy’4$ÖL@òÌnAE'uÖ¢&ê³—?˜R¾²ƒdèJŽꕵÌMœ?aôœ(ÏN¥dÚÁarÑâ÷¡b!Q[*„† }Lò}z¸XJÖLá½¢áBú¼HwÝËÞDJ¬Ú+4Ëá::G… xÑœãVB%¼Ó   »&þs_6á²Í4J¬Ø+BjÑÉø%_°T7’ìFôJݪFWéRy#€'©Âà‰€‘-ÊeçÐ8Ás0;#f2¢Wú“˜;àCç€9¬LÉv»EïÒÝ¿ Bb¿zÖ9YØ `‰¤Ì÷°} gûb°} a+íÑa»=@†•ÎhEtK¯R±®Ë÷}Ç&a#œ“†¤:}qѾŒáYÙkè@9p¸à!õõ ¬›ð “$f™üÕÍœþÀ..,«=‰0z¤lÒy¸aZæN½œó<¼x4¹âÏß="^¶¢ ,&föüÕÍ™ÅÞÞnd¡ÛP7 sC»…îkzí¼Kqó²ã׳!’½)I¼7ªì“&®³ç`á:‰–ªÃºÅ‰µU¶ÔNEÂÊÙMD"ÝÐn¡/É6¤%1 ‘_mæ³­÷ÌÚsŸsŠŽ­×̺¨êçk‘ÚgNò¦¥ãÖKrS,ð›ŸytJÒt$F{˜›¼~®¡¼¢Ñ)›Žò\ÌôZàn|y3Ö‘é¿Èî <Û›QKêgM4!;ò™X® HDBÌ>Ã9F/«YHß³IÖFöù¾Õ'ì ¾> ïäJ £hãé¶÷Û¡ñé± hä1oðЋ¦T´ è3âH¿t©:bÉ)mM¥ŠPugóâÑä®yœKµ*ã.R+¡8þNéøCM*髯#Ý2XwŠdË`] ÖŽa|óH´UfŽm1šË&M‹W«éÖ¯ƒ¤Õ„k1´Ú­Ö_¯PúG‹®U¶k^«$7-œCÎ:™úEšƒ¿)PrÓnÒÜ {@§¶e¨Ž®È³„§˜M¡{šLQ’ÃŽS€fS€=MO<ÇׇŠ€öS¿ÎS8[ëɇKs T‰R„ æªBù ™œ4¥úô£Â@™R>@’ãÊS!:K´´–z€ÆRB¸bS¿:SJ[¡É‡/+¤©Ìƒµ|:NÇ JÊŽœWñiPÝi@h—“…€ˆb R×€B”W j‹©eÉLjø}§r”ä`¼À>¥ÄØ5®Í}n*.xĘª .oHæÙñHÎÆ äSra¼@®á%díæúÕ ŸÔhaÞ‚’Ÿ18bI pm 2ß ÚTÏ«4OÁ>gÑ,,\  IdÌ"cƒ>V"ã3¸>òZ, x. 7OÒV¡øÍëVbà| è Nœ~³k9ÑÐE¹~Kñ(eŸF謗®ñ Ь%êDg«Õɯ/ÿŠ%²Âaæ8?(šÌð§Y’£{ÄßNy1¹¼œ®¾Ž~ŸGAؤÏÍ1,eRäy~{ó0þ혶íy®€Ö`ŠIÅ"ë ñd+RGOY³‰b,!dÖ&ܵnôÔéÏ} [–›){AƒÇË¢¦¡+ʳy•À®%[g˜ËE*vÚÉbQî‹&ä¡Ó`: èb¤‹™ÎyÕÍÊpNÉ/¢’9Z† $·‚œ¾q2'?s±6ÿ¦/‡çǗΗ¤Sþž½ù±Xž×Ä€Y7Uù>“¦I¢B9ƒ–|á˜Âȵ“ÑEZ5Ù ¦W^WZ_† Ú¾Jl± ªH#UÝ“¿ãr–§¡Ü˜M¸nõ¼uñƒcʰ§x©/è§Z,Ç×*–%Lc7O2"ëk&£ p j6ÎÀ ôÐvOÍSp•ˆƒ)G÷wG±Z yÙîàÒïJ롤³]_=´Xb¿d’hrWKË<ŽËLX6†2`=ãíʃ=ÛÂ0~hE´Sù°#U_ál‚úÒ»9@£àó$‡õhupNºSûr„FÃ%u_ÎHÓw·$źdG*ý ÙCÉ1†]©¨æk’[†^Ävã"Q^yFVQD3Í“åv–°U7ûy?/-ƒ¸XÅ)8v³+©@´Û4-sÑ*ëwY.FÈRþKÏF`¶köE8“Άá6( 2Mî"R¤ôª¨? : ;±r @çše”Q†š0! ìñìà8(áð`钙ȬÁQšˆxH< Ì‹l‚H“YˆD°ƒH„Xˆn&ç8ŠU?Ï’‹•Y¬¬ŽµKßð¨Ó±÷J†FÔ+!°Î¶b{1 Õ"’¢)P˧o1‘ÅNÒeÜÛE¹¾£$øðž ,ÒïÊ6Y¦iR¿ ¡qè n`’A°dt2¨–ºy»žBJHüVøeÜI$<)‹¥åÿã¿j «,Í—b~+gû¢Érº ™?‘Ž%û‘6¦´eü>AqüI–‹o"ý‰ë;dâ.ì0P Ðzp~£h*þ¥°9ëÔ¢ ë9rºžDs±,IEQ@Ýð}ÙV¦K–'Z¾EÙRA^Ìú(mpÖÖ"ï:¶DW—Ð*0èí!t@dÚ”·IŒ¦)èÏŠ2‚æ‚¡o—sX¬ÙZQt“ ®K›i}d…1ž™ ŠjŒî&°/‘Þ”¼*‡ý $¡õ:´~êuWýÔkOýÔë€úÙ‹2š.<«ýHjÚߦëï£h` £2(8Ûˆ-¬7‰Z‘Ä@â·XO¢pyȂΠ€GWÊðá'xߪ „ öA´1™·Nö( EY[%‰¢i;¾K+lkÅ"=dF ´k7èµØ.M—¢xO‹:þbÐ3O4>ÿág’/VËåf$ù)y ll½É pL3Y»úuµII1um6ëƒ31¿¸u‡Cƒ¯‹Q¦A T>J+u•£,rÚ4Ã3QËÑxrf–×J~ˆdŸL[šq\R£¨4OjX¯‰ß ±ßGÉr ÊSîfi>ͺCiÀÈ瞬Kò®vƒÁè®@WçƒÔÕ1°ÉçAàò¹Y>waåscH¨Ñ^ÌÕÛäïb©0¾ú ‹'D¶O°-•VñiLç$ËRšP–Åb´Q‹ çê7"t=àR€ Ïz@‘÷Í7㛉yÌoÖM‘!òa±Q¸Š%Z°Â'‘¤µ ÝW6öDaœ6'0¢þ¾«¦‚D„øB)°ìÚ´1ƵËÏHÒW‚uºØWð*ŸUQ¾5†aó£rñðá‘”@ørwîÀ ñ²´ËÈK®ÉèvIÙ û Kw£¥©äÁ;¡y@™­ïÉÃfè ‚R?²i´hCɈIZkMR¤ª‚xxTƒ2óE`Í8„Zz¾h׆$îªwmt•ì Ñ-&µÂ²E°éltÎIÛ%ü8MK|Øz±ÅVÌì¨FVs^rNF·kÑNhÔ%+ÐEß©.I¿ç fg?¤wuÆîFÐVÙb&&ãâb ºˆŒ1Ò®™ ³Þ“ Ô·yBWšÿýÿ¤¤&­ÿûÿEˆ‡@º¸£#¾‰Ø.üÄ×Ázb…‡ézV1·h 2Íô¥ÒU×Ôãec¯2ï$ ím@ÅÎ\tº>¹¬¿ƒÁ ßFP©¹°‡Xƒ¤Èvqš‰žxH˜íÊ<[ Ï^r ‘£cŠ6AÚ »‡)9D!]&OWŒ±k­÷ºJ·8è,ÌGm —ºÌ•Ì<ã:—ñ¬JOLáüŽÆ¤*s4¹xkCk=ªØèV›S»†VÁw;2Ý8$—`œ=ØŒ t½T0n"`Añœ‘²ADDCÚ¾6Æahö2‰¹Ž±õyQ ŠFû5@ÙF`µ¹”‡ˆiW–"®'«z ][¼[rãÂRÕq/7–lÉê¯x-¹Mh¤{Ü-fËÍb7£PhYõ¤2 ï1PÅDå)C›®òBÞ§Õpêo—ªÃéÐ Aïméh]|:¿‹nwlÆo¡O5øKñ d&`”„@º´€yð~Ú$ j±Ë˜téËcý?YWõÿ‡•U¿vmÕÿ¿©®t G_³lý”ǹEŠŽE´›AÐs HÇHÝù cicH"—b¹+³¢9 ay“8¨™Äߢl¤Kîô.²½$ªåz’ßþC¼X oÊ¥íMŽáïEÞÙ=D2VDXæµÆ5^¸.µš·HU²®Î™9  Õ9CÛkWCõ´Ðî¦ÙÙ‹d‘PZ-rDûËK'ì*0y8:¿Â²Òèm°Á0;z ¹Ó<·2Ó[Fsà%N_*`Ó}…ãeÓÑ© ,£›¤ÒÆ‹“€Žm²?4WCùéΉÙjenF¸‰/=dät©liÇx©’õ-;ÆVŸ.Ò&W¢6vîÌnq°€³ªÙ'y´«²Gh³x7Y+»t@‹×Ch# „Yg+ÔKÞ€•t×¼áÝ8ÆzhhZ)¹V*¢_a ¾µ0«—OÁàÝí\¨ÇP¾ìè§Vþ^tÇYè9b÷ݤ¬úž‡®Tv>Šu‡¼yi±h¹&`5"·›ÌÍÃúnÜæ`¡ÃsŽá6_ïç‡ ž6n"ð¸™x¨¬‰¶UÌÌâ¨= ½ðÌ"µA æãAk¨ÇÞ5Ôc×êqh %Av-¡—PK¨Çöê‘—P]+Î›è ƒjÏM»C¶ö.µm×±•Wɺ 0ž#®y/)„âëBÖÆdé‰èlõb½†A@fÌé)+f»¤®Ñyå.±'"ci"4!Ì5ôÔ•&çQ²Üf¼sH1Ö(Zx KƒžæÅa=SAP·)%äZ{Ñx r󕌈ˆ $@Çú÷ƒâm:-œÃMÑäÜdª+DÁ4„!] Ë×4Z¶3åŠOs¬’:çê½Ð=¿Cw1e‰jʸäûŽç§Ö¨äS§ã9É)ï%“…¨”T?ÍÀ»$[(ª.t†amŠÁtm¼ŠÎÑ®èfÕÎOq [a·×Ý ÚiÝf{{ [WëC i|XExyÀÓº³ L&æšÜlμá–:SãC6B‚Ù—ÀÂKl’ÆÁj%ö,§)^ÙMgÃ|Ì,Le¼?‘Ä: ¢¸¥HÞÁ¤kGkТú´:hó9ûêN¼î-‹Ð2P‰¢øël^À 4L&ð¬›øE}›Û¨{ðz‘†)î‹$aÃmB ¥¥1l«Ì/XÈ…X@9µH58¹d³ËI'°­—ÉË)«ö؉­ÃŽBýÄE¶[™™ÈÒQ}ÂÖ-g¤D~gâw]—‹,E"h¨¾5ñ+\ö%ia÷©Zztö”«N†Œb±9t/Ü v0AÑÓ\{(!²´G%f¹l ¦ ZØ3Áž¥ÛyŠÖÔ”¥Ø‘òÌ®lª²oOâ¼æ&j'9+·7°¡eÎà‡8%™ôNH^X”S²è¾ÄÌváXòØ9ÄÓ±óÈý±xžÁ{GÀ=°eè Ö2Dl ï$1V՛̺`GÔ„8ÜëóèËÍogi—:j*×ë–—Ž|gÔ¤_¦óýz&†ò=\älÊR’ ÎzÄcÎã‚ÍrÃ…Ÿ2jˆ ˆ©b‰'¸"v`(á¦ë¿é$k!PI”è© ¹“+%bŽgb˜¥µëÁeЀ! Ã4Åb|3úp5ž=Œ¦¿Î.Æ>ü8¾—ÂÀß?c1ER…}ãXÈÑ«dE)Š3X¢ËIJ ØŽè»Å˜W¿^KU¸†·Ù¹âz)ÄDçæáìum©¹StK€L¥„(¯–mÁ¶¶\):¡£ÃZ‚:¬wH9ޱ%F'SR´Ë–aCk{N x³‡Àcô½ÝÑ¥ ÊaKäº;á§fŠgDÐS[#I‡S}þDicNûïâm†ÿ™˜á̦pÔtÊeI‰8Š©9|®SG& H|<¤NÆ ó%"'%˜ƒ„ÈnMÞTy榢ÏE꼡GÂE×pá9.<‡ÁI5Ïðd_ ÚÇR pæypx\tœí“àÂ{lJ·ƒkiVS¬4 ÿpÑ:þ-Ž<ü5°¨W8ÿ-|§¿Eɹ]«ƒÓ™Ò˜ÍUHnˆáR!˜ üŽC¥Ê¯úbRIÞrd?ù„§{rNV® &«Ê_©®vf†žêŸì‡(6ùÍê´qsîÖÒ`£± BLaI>sÚ­)–­áÐY„iûÉJÓœä±ÍtlÆÙå n"æI1d ²EÆREë `Õ?¡ÙQ·b|ËÄ$‘F‡cǨ;‰ÆæÐ:œufžÁ,x,K<ÎBo¶:†²öHæÈ ¹]ã˜H—&»l…A¤1@ ‰¾í£­¥l¡IGw“·g×hþ!´5‚9€jTˆGÙ4ÄäRj\*ÆÄ¦-3Ó*Ðn¸Ê€¼Ñ€óç!ÖøòüÍDÖ|øƒcѹ)Ujþþ¨ïû ¾ï€ú¾êûC¡fÅ·d=Ü m: …[Ø(¨e§[„Uéš: Ôz¾Ü ƒÓD2hÁßVQ]]ܵﺇàÐ^z‘Eg€¢p oÏÍââ ²ð‚x…%Žo…S÷Ö7¥Á¾½ºñ.nJizUY‡ ÖC¬eR$ëËEl&²o¶„Q!í‘®ª‡ašd@ ¶ aˆ ÖiªÖz&öá»r›H£±nÈ™ÈE² ‰{ÇŠ\6ð9¬€(ƒÆõ" Å4¬/‰\³ú!ÕóX­†T«¶üje‰¯V–ôûËAáU%¶Ê ¯”Õ°¯žmÄäŸ~ÎlbÐk"6±d3¾¿¿½ŸÝÞÌ®'ÓéäæãìÓèæâ λšÅò}ž –!*¿ðÁvãÍ‚QÃë*ÙJª’¬&óàGKë3íî˜én•dù@²ÜÁŸå}F¦/á:"¬Ñ6ÒÖ)òO—³'´ú~bɧ9î?á W¸Š'½tp€5_ñ#f6¸‰`%d£lúÒÊUTË Y5Ñ›–h±Eš¢ê€ŽÂG²X”{°Ÿoˆ—è­9ºTÁBúùl%V…›þr7(+„¨’OÉbš(zø…ãj ›'dE¹ zYØK¿ä™ª£wü‚¡@ä•9÷f"s‚"g™Éy ¯°Ìâ ã˜Z­õN#PŽN©ª TѽÇŠ¥ö‹èXèê†5SÀlÞÏ$\ …E½êSé¼=YnÊ…!Y%ƒ[¸è¿¥è‡óÐÚZ;ÌZoý‰2…&RØ7¡(Ñ´*Phàìg‘jÁz²»$!ôÅœ_a*@­Ù@5€“Š™ÁÙ:©Ð!¼€û¦ºŽOÅO±> î2@«¥Á—YIðÍÝG772d~ ¨ÖP-Jù ÍÏÆ¬Ã{ÌðNXã †Lšôñ&œÞKàè v#]2ð^‰kV1²º¤¸èR ~—*.º_µƒ¶D[FDMë¡Êlè=YÚJøíÑ<©Ó%L’àµ+[e‹hQeK‚«ôIøt›JBàPƒ¬ue„#þ;õ gE•ˆ®°óÃ2¬…)r…¦k5ÐíLÑpSÃâÁ`ž0§(2ãèC$¬RxÐø (€¨C$¤«¨‡Y0QC¿RnZD%ÁÒ…0A:jô˜îgÆ#ÿÜ$¬yÖÇW†é’KH¦1áÉEñƒ]äïå†e€qn¬«ÕÂ*«7ƒz.ï€JŠª7¬è?±ð…}÷nžHþýÙJìRvIÿ“K›†EP˜j~ôi6>ª•¶w"É"µ²5M[.'ðˆ×Or_xB€Äb! kì’XÃÀOÕÐe€ÙÌáp1Oi(;¥ù‰1VÑ å«½à˜—Þ3LmOW"„µâ´G`:X–/*H$¹¨òÕÁQ-vìÿŠtVYxr†}ørΊW^aL ¿n^ðI|DDñ3É ] þuÀ1≟Z|ÀO½ø€Dò´Sã‘Qù 9—|YxÌ|ÇüÎ÷v÷â AýPë$òuРҨâ«ÐXâÊF3í"åXÑqN#8k…ê*güe]‰yNÌýŒ %9´R<É~…"yƚ焃"Dâÿ¨ËûÇ«µNÉQµÏ_¦·7àðüÌLpºÉH:¼ãþ¸ÄÚf!†@îþEú$:þKž¾žlÁ2F– Å ±ûaë¼Üd_AâPtŽKŠSC_ÝøEêÔ¦LùÛàƒŠÚÛÖ-[œlã†,Á8[ѽ4º¯dñž\; ;Ž•{ÿV2‘<PdúVô·.¡`¼ îÕkœ'ìÚÇÊF$ .ʼnœæ U™‡ÖXŠ ÅUh&±ŽL(J J¿}Q9«©µ‚ Àà%µÙj vË…ˆñË nÏñÇíT#•Šb’K¶{üçß(Ýô6Vˆw¼£x’ZÊ×wÿq0—ßaYx¥6çQ¸¤p%é)ÓTT.µ-KźŤ"{Á:|‘ì’y–gMF‹@„ùQÚ5âòz{¶‚{°§´ïVúî@Tª•¼Q 87¡p Á‡ÁËF 1¶ä/gpP-†&ðµ‹!”Û\!‰F ˜yšÔ¼:‰ðï>Ï÷E³ÿžDí’ «'Ic>wõÝŒ®\eÅþYÊÍv'  ¼³Kø¶Þ7Y~¢fâ“t+jí|ú5úŽÄœ3^_Ÿ$–yܳÖÒ%Ü^LyŠÕ2fr ~C«™Ç2ñEºËËG Z±$îe¿=-?ÀÀ.B,Á‹›KXÉý¾ßž­š¥ýt«è f‘ÍÒ~å¥ 7™¥ì×zFpÊ(ÑåÃ…ZáãÁïýxúZ‰ˆ¯Ê—åSÆ%1û¨5f¼?—±&f+hášïÿð~«劉‡»ï¦ßk¸û]8X‹ÖJq- Œ0?ïLbuñ&$°55b ¾ÏóYý-Û¯Âeæ+>cø4Vâ’³[ïw;ò@Ì}¶Â«nrFd;Ø ì‹Åò€g÷ï0„ ~š/ï1€ÊZt*ú‚§ØD?I³ãläÉóË,[bÝ:[¤aÚB¦Z;qˆ‰CL>Ž®F¿ý>›|¼¹½ÏÎÇ÷S) lŒˆ¢]i‹G°ˆ –u{5žM_no¼Â8“¯ “3ëÍ™–HÍý8™œ–¥LÇ÷_Æ÷’oS~K,>JÊ\nCq–}¾û\1ßµ{!V¬ËœÄ††‚gªy½' ¦͹ÞÏë´yÖÌKñÛ£¬½ sÉLpw èøµצk8'Ò„Øó6™ÔLRÒy/ðn¾_|c‹÷Ën‹Ñëh4¥ôo¶@½z¡Ä×Ö©7‰]ÃfäJ¯ÖG‘RÃÞÅxq3expöÎ 3¡A° Bº`Ñ9§K:èÏÞ¦‘(RÓŸ=“8N./ÈÜ[ô1/çI!`î<…ƒZ2ÝìMîL÷À'Û®áh G„™pÄ'µnöw1Þ£l‹N(Ôy ÒI‹rMºuôtXxG Š4F'),`nò–i*5e½NÒáÖî¼Üîàt\¬á}½ùx~G‡`ëAø™ÆLÁ&P ±|V>UÝŠb½BB10o Ÿ[‚çF‘¼[’pq&Í9¹Í†ÛÍ6k·›mfµ›-¡tg9Q>˜&²ŠÐùmôÝõäã÷T ƒ@\ @§~lÀÊS0ò2bÓha†_&é*ïB>suÞRáÕ$Ý-ì–-ù»¥)~·lõÓ]ZÕ`œ±hàHü›SÑAVn=„€kÕÖ$n9ê¥ÒÐ&má<@ÊéŠÝ”"´!g­6d8ke„!FF=Œƒ£Vð Ý”ïpkä¶±X‚·,? pÈ$¬aÈ:íYfM$‡×cׇúz±›Á¾A,#‚ü"tÓK(»˜ã]? ž¤3N} ºhJtoç‚Ouè;ünk(•ÆÌTêÐØzÕÕɦm›’š×\‚™÷¡ˆ‡°v£´VI'0Y+´4;°\{·!˦AÄÝ¥ìcÚ]ØÜZ> q_ÎŽÌS`nóᩎaèážTBSwgÄëieí`Åp/îÍÞ± ÍÒpfºkLJf¶뤕¤HºK_3è.ò AÓzÄ^p°<…×B"W ›7Y$ë.>›Qw^2üÁ°÷@õ«]Y=%šî…åÝ¡%ܓڃ[QÇ@ÝSÞ>¶=Å®ÈïAºÓ± ÍÒpf|Ó[è#.=‰Û9!âáeŒiwÕЀoéàð92O¹̇§V¡ŸÖu˜tf+¸#õ ª´áVylçêMœéàìvÖmO7i’7Öþ:¬b;“¶sF¤¬ÖY‰m†ÝU÷ iÏ´;?Gå$(è=5Ñ ¸iv'ÕBozO6}h}øY÷TŠHžÏãsž·\ù*k #õ©5VZeõuV\iõ™=!›d0(k5×™<?°¶ÚiÚø‘¦»N ÝÕ0"ÚÃpö#ìÂæ)Gy¬`ùù’yÊ…îR´õ$ÓùÁ‡ºj LÜ“û–!¦Ã™Âsø¾œIµÔ“rèc2˜S©ÁšcKH`ίY6€í‰Y?0ÓÁÙõuµCsxdÎs4”“¡ø¡ znЈ~tê¢óÈnãM߃]]›w›õp?y`úŒŸÅðÌ…d«§ª:rø4ÂHäÃ*¹dT¶¦sÝz:a“Zm‡µ _ª6\©×ÙZ,6Ým„ þyqŠxk7JO•û€‘¥áʳ¦ Œw¥Á¢» ïȃö0œý»°yНNuLéU!ÅW ”_T€•ò``vì*ES]ç¨v ÖyŸúR· êØ î.a/ÛÖù¹¦îÍÞ± ÍÒpf<Õ2€Ÿ_æ^3ž„þðÛžÞú0™õVÅvåâüÈ{1ûKÜ1Çu$ô@V„=…í0ë)lEÙ•#2½´¯´ý8Ù%žVíªòùÐ&ÞŸ¾vŒ‰GhHß]¬»«âÀÑÌäóø†ç-$Wžº ÌH}jÕ‡VY}@Õ‡VZ”Ù²y@ƒ²Ö[sݹٕe~\µRvæ(kI³ªž;AÙ™•c2¿xgáwaŹèøþâOÞ™œƒúŠÃx¨*`ÖìjYšÕÑ™ ÎV@†:«¨/Í⤉ȟ¼3?‚<°šÆCÕô°ØdñèÌg+ CÕÔ—‡Ç]1[‹OÉ‘ÕÅ 3O"AÌ +«Å|¨º¾ìŠD?”Ù²y@ƒ²ÖYq¹ÙWbàM½–ð¥jçAPÅ‚ª»f,6ÝÕñ¹Ê¯“ö¡€‡ vƒô¬ÔD³/ŠôÐÙ¼#a)´"ì.W—YwÑŠVñ€„]¹8ò^Ìž’va²ƒ…{$ @éOa‚dŠ˜)lŒNrÄsvŽdÓƒ]ùÐQWH ñ¬ˆZ,|ž"N­‡àu]-C^Íu&Ðá8/éÚ‰=èøùÏÿ±  |¢"_ÖÊâýél¸’N>J¬muñV¾c<¦ºG¢)댪Â5¤³Õ£¤Õ­•ål¥µ³f žE/9HÍ!Lã¢M«qq&F#xß'MKØvûy½Ÿã£^4V6dù¡?ÆJ4±Icbö°ð§¨hmSî²E(L“¸…#=À0Ü7õC8B©wär σõ÷A8 4$&ˆ% ËMìS@ç( ]ðmG‚6:ß­›xèζþ3? ÜÚĪ?sy‰ËJІ—S›ØFã-#QHÙ z£ôÚ(L¯”&±oÑUó$+ß¾ó3 2¤/mÜ Ã Hm`äõü–ˆ¨¥I x[ߤ!™´¡ãás`nàwâ툘äAKÐ.ÕC¬ñÈw7j&œh[3ÃÝ(M¡›‚®Í€gÐ^ü»`àN>­ÀLì ÉAËÿ6©BC¾»Ä7 ¦+°å£|ýΜ~èUñ5Ae{?¬_p·Ÿ JiF/:—ù`ij‰Q¼7#çhPvŸçÒb+š;#Œ¢ªû1ÚT¤œJè€)‡µúnÉ|-%:[øÕY;uÖÚ“ÎÚvö{¿Ÿ¿@X-x`͸¬Ð-‘I¤þ4õJd˜´óSG¿dÅÉléGt ý¢a+CPì˜ ûBBl`jîÙ$CQº(2ñó z!ö“ÞÒ1i$ö†ºœ,%$é¶WVŸÞàÿÓ7Ðû.î G°× Ú&g'M¢h}‘•Üè©ó-ZDڤѾȞ%¾¦o^Τ{v7q´É3æ#ÝV(ûõ`Ã(k>A?`IÉ ­U4Ž]²0ÑV[¶àgÛZô‘°ˆÀ6|v¶ÎšË›-2–Ÿ5ŽÅMMÈŒr;óŠ Ö#H°+Q‹¢Ö†&í¢º\5Oàá;Ѹ°Ý}O …¤Ü75܈q‰‰ÀžÏx/µ#bcŠE¬ÍNf»À%À"˜Or°™h§2Ú{!4;Ñ$´Ða„ Ã,LŒA>×E"«ë}Â$´@`„ÃÄ—,}’0TI¬ŸŽŠi׈]R&{q‚ Q’+²\"Ý&µp”ƒ‚C :ò rŸÅ€¤åI#¤ÐZ½Ô ’ˆõ·V;™Û2®’9ŠSfã}+áh· -P¶±Al®ißíqéV¿#wçM’‰UVA=Æ%´À¸=F÷•‹î1@Ρ!0lR G9P¤Ä€’¹#RU6Ã[½ÈÚèiÒ(°ñ8òr>—<ޱ ½æà]:”“6!g…ˆ!BåÅ ¦DÓ$‹Í»‹þD\+ë20—.äq1'$K7A€,RE¹ (Ô¶(ærª-ìPȪvlÊ Ôtˆ-4«Ú1DWK¹+!7#³(;‡‰²HY2‰1FËÀÀ³u•¬DfÅê¬(²§jÇÓ“”åQDlDhÛžžTdåR𚎠ï'°ðÖdbµØ$ìý–ù¥SÐ,‰’]öVåg™Ô›y™TAnâZ‰ì|¨`é6®E¯½¦‚{®|))€Š¨ö€ëmÈÔ]àdsö‚“-ºT“ðé}*‡Ü…%£Û¸dŒ˜ŒÕȨ¶‚PY¤6"ŠrѰ(é‰L*K‹<;Ó®-W1õcRçÜ€æoLμfóµŠM$ËØÌõÊ„‰Ì=¿Ü_ñ¶WùBÅS-,»Ö~?æ°Û¡#ø…˜$ bB&ì>¼D÷%Zw^í´—9ÖúF-lF–³5¯c0µr=2`ï[˜‚tb®ü”sò!ÎvŠ/!ò!NlHΨ÷xb¸±>õ\M¡¸?ýÊF;?I"1ò’N7ìpÑCÒ¼ÍJ‡éžYdq.m»vžãb•¥‹|aZðùÖ^ÏÖû"[”Õ@W·‰˜ªÌð7mŽ÷…Àå?Ô[¹•B¸Äzr3dgãšÁÙfo6ÒÌ ºUrËíXº±üõ7,3òO"1¥û›²[»S.¿n‹è|N‘Î^É  Q’6ÞU’åû*ÄãPZUeEîJYFÄ °d%sDž!(P>0·i¤ëxœ?É` ¸5Jß°K#ñäÁôSš­7¬Ýñi„'ãÛÑŠÈht-²ˆ«çÏûä×›I½‘.Œuvic™ö“ø üŒ31íó&dÅbkæYŒr•bÐH÷¶U&VV"‹ ¬Óq!P—Õî¿ÿñ_b²ê³Mš÷Ÿâ,^¨:¿­ܯûyZ¸IÙ‰bÆ0솰ÂÿÔI7:‚…hä3:BÌB½Í·È6Á,V±j ü #„°J”׉klb⬱?a Pæ‚cI'Ùý¥ÛEoË2âuÙ·’šà’½™ív‘I‚Kk ¶ÿ€rcLnÔäfmÕùuZ-ö¸#ün³þÞ:s;Ûdb jå@È‚à§jÙðâÄÄeŪ¤¶Lá°„2vbŽjB÷2L.eá‡Þ³pJÜÁ´ ~ ï`¯„ö Ec ”EiˆkûéûÄPÏ6å6‹™SäqÀ:ž’%sL 1J¾I·gxVþNL¢ôKÑD@S`‚px!8ÒÉ =0ÐÍZf3p›é!td7ú>Ó$&Cðâo¢¤>É!×Eú2O–`€ì¶C÷+½I$*EkÏÇ‘ÞÀÂãE@U°V£EôyM.:!´ãcw1”ü®2vÏp(`kÌóè²ã}üž©Õ}=SL[ýbÞ9ä²?½Û"Ö%w <”X£!t¸ŒƒYÝ E¦ƒ/‚Öq‹Y/ÒÖ¥´Š€…®ø3«’g‘NŠËÿ‰ü$Æp70-ß½ƒÎ-;œU«ôŸn§³_Ç¿ÏÎ?ÏÜ|$8ßê$†ø42¢H¸ÃW5jUü÷?þ[Ĉ¥‰Të`¢.Ë]ˆŸ•Uò§)SWñeM"ø¤Ó£„nV|Ù›´ÕÙïÞÀ-¡¨ˆK”üŸ Å.[ e¨73#‰‰´o3ƒjÐÅ,¡ g£×òjOút²©³§•}ˆÓ:Lˆ-’ÃW‡Hó…@=‚Ñ·yê"ÃÎônùÄ] 88RèšÃSü$ÀbJh.ÚûèHl_®!|y¶Ùey9†{—Œe@0øwÑú"Äbù?Ȱ܋ÐX¹ke&ãF4Ðõ&úteW·ÔVÉ"e`Ãz5m:š¥Qc¶uä%¤èÂò?ãK”pv{ýñAY,VkZ‹FrÇ0]øé¸?tóË5ÅÄg›®?õŸò:D,•xþFù”WlÆRïC¬ŠæI-ÚF²5S4|øpçâÉ.;Ä-'‘8ðÃtÅAÊ9–ü+Ój_È­2ŒTòAµèµyF.²Ù²õX§¢Z_fîÓº©$Ïbà ñö%V&bL/Ä4!úL*ZÚK¤bDCMϲd‹6 ºÒ!À€eAˆ¦ì®Ò—œ55x›_ ÆÉ…½U‰4ê!¼‘ƒÍ@ßæˆÛH I´+¨½ñÕZ¼ ¡ËJ”:>•u©4$ëtV‘™ F_§Ñdt-hF¾„0ÀÐI®!È7¶á…vB\©j‡+’ÀNÓ­’¹Ý l] Œ«$&‚vÛrkõFhO×—£è»ë}Þdñ¥ˆµ9²„À*]ƒ{“Jä*=Áá„ò3ßE«ÀYtE1Ëú ×囈ù¡IRÊ ¬ÓŽºlסǓ¯Q]²y› C<èð.¬[¤:»kÕœN`ΡpxQm•sL€ëÀ â…à÷õ3-k`Ì{…Á’»-è¼öÐ9¨„ái¤¦ú…$ò•¶¥³l.p'xÍÓ/®EÇç¢lÚÁJ¡šTßÕ¼9ó¬áVM”Ėξ&®£©X"6Õ~¦|·©òDkÉú­„;øÚ®MgÁ5_Õ¤—NøëpÓ"Ö†Cø’ªJ^ºÇ0p~l-h2©Îq4Bv²Ò"tÔ=&óí™ ŠuòÃl•&XZögÞKËü).æ8U vk„¤¨ˆ£’áöÜ&´1X-Ú 6¥'Ò]·Äq&öeÛXÓ‹—£Ï§2ðû5/aåRs.8TWÈôgìõ/¾Nݲþõ/ÿ ¸‰ã¾¨`›ŸHuéSØþ‹d ÷¯p—‚—\ºÏ:òVO²‹‰]¬ØM8oõR´ÎˆgY.ú[Y¿‚bæÔòD<¡ð³l»øÚo Î=»ÍÉvÁ²‡zMdò6z ™=…œ|™Ò§Û¤jn§ä¿Šyk*8Š[$¹:K6”ëå `›R ¤ðXs˜pœý©P±©i¥ØáÈV97­’)âb§sk%¡c] ‹@ ˆB%ˆá5Y‹În­Ì4©-C²u.€ާ€!ÒMBKA¾óòÙÉOxFºsàƒ>ŒyÜnU‡[Õ>P«Ú´ªûÁ`Û§-œÌðj½Eg²ÖêšÔ ŸÌªO¸%õáÞ^¶è,<ÖöR“๓ΞÇ08~4-0~,ºÂŒ-¦ f™4¯±“”¼ÚûIÃò𗀬7/žŒ7/v¶›ób"Ã&wx½ùV­¸ •\Á·3xñ­ƒWý3‹ÜÁž£1ÞÉnó"óýórf…¢‹ZÉÃØ–ŠV2k/‘"Yw‚(—ºUÍ’—s-ïÏ}Z½„•€Iê¨VÞ13þoø àD»2+¤V¡,ˆ·O…Ï‚á±mÈ©ï@*¥¢rÏ„»Øx+Mü’Áða¢‡ÒAi+šä^4|¸(ép1†À$u `T =_ñ—Y¸ 1«3­Ö!$‘Äö«!ˆHÇê)M¾)ul<º™Ð¤‡"ƒN±§S‰/ýÌ?)ÔêNJ§F®óÊlÐÏ©Ös¯âÄòËûE‚ Q0ÇçˆtVžø´”•vˆŸ¢'¬¤4¹ùe|þ0»?Lg£éìËè~zf=v_%¤=c&Ž1±R¢!o<—:¼Ë8f^3ý¹Ïà’iþ¢ÊÜK¸ÜãÁ‘¤1EF?ŸµßêmFÀÊ ±š˜Â>BЙ—ak³à§¡ýÃÿ]”Q“5yúÿœ…Ydí·M ÔŒâ; * ­ì)-i{A™JðÊrbUIà ʎ³¨hllHŒ£}¦´2^ãÔQòjŸ;*]ES‡ >ZGVí —V’ŽQó]Ú,Þ1FCŠIÁhI’Ïh')†œ|Ÿ† :Û­¨.+™V°Œ).f–†YŒÄŠ)nó: † ÅÀ8-øºIEÞ”û|)F"P[ø÷þã?~ŽFy]¾‰6bŒS—‘Ö8V]x:ÝP¨Ÿq6ÝŒŽ† ™ŠIñBgá e¿¶Ú1³ŒËXü,cb9‘‘" «©— Ψ‡$Ëè­ýºlH£ÄVeL‰&ð{¹'ž‡2-ãO"XÐwŒGGYK!Á63ÿ( ¸º¦øV[ô¦PŽ4fþ¯¢'€Ð¯ðà„ÏÜ ½Yïû´c^³‘|i(F2’va¦ô}ÖêNžÎ@lè¤fi;¦)¹åŠyÜòôŽ´†Ž7_ºcXUí•yJ“K°%™ÉU%µ@ßIN"SIž-ñlv&«lN¦ðëÐ%òÂÃßXñâ›2±6û2ºš\ÌFÓ_g£‡‡ûɇÏc±V›\/ÎŽ¬™ê® “ßq¤ŠÚ$;Š‘b3ƒï»Ž‹$µ,¸Fê¹3’IqèÞ;P,_βúèzåLÀ°-ÙÅYmTíøæáöþ÷Ùèæ÷Ùç›;±ì_Ì&ÓVí‚þVš—;¼bLöb޲ ˆX®m¦ƒ¡¦Õ%ƒWŒ¼6°6øOø jó´U1„§ø*òøìËô:¿ã›Ñ;ƒ|ºz´JnHøíîöþÁ µÅà[É\‰*BoßZi «È~¾PGÛ¤Yà{NÖgàÇ€,•ž›úè‚!1òÐ¥3ùxs{?…ô0mËóš‡ËT|ZrïÄ86¾¿1e‡i]¸ä®d=ȲVŠ*)Û{Àjé?p¹³9LyGF ®èÚÍá=ý”.Ê’ˆþßò˜VÙê…Vö§‹"n¸}ˆ Î-±õQefÖ•œY#4ÆÃ²ð‘ÓêS2DÜb“ÛÄ“ŒÈ6Žf_´C=ÐØpŠnH{w–l¡x…"hçÛÊ,bámi”ž$“,·¿˜ùMœó±ˆ¢#Šn¡©OP·dš™~Å9½w>ï›Ë}E=¼^û¤lвIµL¬\Öé!Ï4(ç›4(D¿ ¥ƒL…ÿ!²BëÙ|Ønl‹L ­ã¹e9VšçÙ[ÐFÏἆâðFŒu™n§RÁ°Ù ›NÃáp|Ž"KB©ª ¬&¦4âÙ¼†ÂƘmv¶ÈLD¦ÍNMèÑëeál¿©.©hT±* ÂV²–dü”)ÏÁÄ{;ê RÑgkC\J KŸ©ÐôS*ëJDZMG¾/2›PþÃØ<Ä^þƒ¡™Èy•¼ˆ®ðƒñÌ×ÎßÊ÷‡ |߇ò}Ê÷}(ß§‰½eÊp³â[²î6’Â-|dBƒ H„U|v& O ×y¾Ü cÓD0h¡ßVi]]Ü9½2 ´Êõæ¶ADŠÂ-\d•ïìÌ2y…#oŸ’mIÜw!ùÛù2·sr¶“ÙzHaJdµg4Í H#S+€—Ù0ÏÊgÕ)ÄíóZJ R94–l@ÞF·;=$× ¶p+ÞA¬eR¤íTÜMd½ÜÃðhraT@!Í¡a”&™ƒ-dô0ÙÀ bU§^=SýðuºM¤ÁX—èLä‘£ÛdXÐ=„épó¤„ci8hÂoΗ«Ñ )uTÍcµ–¬h ÁÕÊ’[­ÜRXÐ䎣Ö*úr)䢦Œ4¦é­šç*pQè*hÏU{a¨ˆXþvïà \¶(Mdí5¢&?j•(`*x!KE—Ðç,±Á(J¨{Í(Ò­:»r”¤®­R ^øxhMl¾e™$`)ŠÏÓ#“À)¼EiâkOãšÜ2#@5§Ÿ”@gå‘T’³µøºc¶ŒE(´„Ä6¥‰˜clÄh>¨£›´¯½XiÒÞ,â¸Õ‡_eaB`Ý¥ÉsÅ2Âf;—ÐäÞšññs^+ÿ!ŸMfâr&?&y¬.(Èjð0“JK#‹Á†8m/Ø‘‡(p¹¬Ø²ñ¡&)1A† ø—@‚Ì·30›Ls߯(Agˆ ­í€’«L@X§¶Ó2OªLˆ¡7åÒt†nW•»@„©‹¢ÚH!Ô|àì`0`—{~˜og¶ @˜­<ز•*[9xŒÓã ÅeÚ€ÚEEa]À+ª@|èÚØ\dâ»)eŽ ¯ì‡wï-:‰ ¯ÿ­Ý»&mÛÒÙ“Ij–°‹Áu»aö‡5½j£‡”ÛlØ(£K%±m3Ë$£"3êRîÐŪ]Œ`âÆ«=¤Ø•Oƒc¿CfÀ` †qTüeÀCÚ­ÔwÚÿ!Ó¬Çö…ˆâT­ȸE$¹S Î4}S©ÓkJ½Õ®UüYVõ» ×ñ,¨RNÁÅÏóÚ`èþ\9¸Èª²[a‡~b)"[GN"u ™T󬩒êÅ:?7¢&D¿ɾ‚Õö4Ÿáµ—¶…ÓÚcÛIÌáÍé‚}ò‚ M|¤T{4±tUº‡”.T ñެ$ÎÖ©UKØ ×XÌÂپВ §}«U— Ÿhúk¤EÇ2ë2æpUš”íÓoÃ_-t¸é-–9 ·«`ØS°ì((û JU×n$ó9– s@ÔÄž~kgôÝé ‘d•N î+O‹ÄÊ© ‘í‹#q› ¦ôP•åö ´|Q)z)=ËMu"øn+‘ÑÉc2l¥Ô¥’rËN©"Ó5¿¥/ðÜŸò ušwìÅ ügb‚DhR²)«ô»Eéëï ˜ çPeŒRš³ Ñ/&((­_~²¦ÜÛ³?æeÝ?è™ Bø@Ñì&mì.Ø+(ª_>‚³?Ò⛨äÙeˆ£õ.j–O±±ˆµ‡ÛV22o™ÊÑ–ÜüBT‘ ²q…"êÂÒFaNMøÄø“ó’ÚÂmrvÓ1Y¬/éYM5‹EjcaU ëÇZväѰ}ù¨”gVX[ÉrÊØ»ûÙä ý؇#”üOIŽq J¯¼%=TIQCï±á{vÚ.)ý‘UýGt”U©ƒ9ø¶ÐŽï·´E‡Éìà—ÉýÈ(«šG×£JJ$ž–jùì ~SÀ&'}¬ øi‰Ž·×uôËôöEásS1FnÒ.Y"ê¤ÔÂð)*¥“Ÿ(ó¸ÖHMb€ÛY°ï$fIðÓÈ|¢²P ,´qÆpºýå3!Z¦Ôê!TZŠ­&ñ þÂ/³Øã X7†b±ÙCø(MhÎîÁ"Ø:$~t Üà¶ÁChC37 &q÷nAüsWâF0{µèLhöŒ¥IÔdPЀC ShðÓš[ N’N…»N]ýâ¬ÛInBõ鯶jÇð÷ýÀßwïR˜uueƒ@(Ìú(-¨¶Ò¬E¨6ôb*a_ 8(Õv•²•¸¥jk”tk”ÎL`:€·àë! Ð(òQZøl"‹˜¡-Cª)Xñ»“ÜÂèQþn'RÿƒÔâ<„VK-Î$R‹ë[Þ—·ÈL`æ¹&´E©%‹E¹/šAHƒJá-2’©® ½ªá!•7¤&îRYP*gœö(‹{ÔÃýeóí_Å¢>߃ï=M úËué žàë85`ÿú¯S3¼èw©4[kÁ¯ÈÈðr góÔôKüݯÿZ•s°§Fy ¶8'ˆµXJ|¡´–×ÌJ 8ñ¶ä0½BV¡…4¿ L‡JÎ-3]Zfëè-¥*y:XŒHsŒ¨ZtàtP˜I¥Eb¨Ù0€ÔÁÞy‘>Euö÷”!](G©o¢ûVú--½±<­ÞÀÜñK9{ö-iÒV#Á‚Iœ513ùU|F“&šâ'‰ oáhô›]șҢµRm3bØ9YFÌ ðØ&þ,ÄŠFÏæ¹X>áÒ[œ~b "c© ØID.ÕE+sßÒ—E^&ßBìjûi%Šs¬i;Iè OÔõ“X;-·bDFï üŒçW&Žˆ¸Ž³DbÏ·ÙI§¥‡ vÒxÑKšŽ\Èèƒr£<¬öeë5TYU^Zú¬R&Èà +dd&RÅ'39BÓ'9+¯’97|^sˆ-æV&:û–ÍEo¹ŸðQ²|Œqn',rkXÁ™! Hë –žU:à ÎK*!`TLQƒ™Àöô+ÅESŒãhQ>¨à<0‹µè„£Ö´žÕ4©çv†Íö¨J1©ÑtÊ715-šƒîS9 #¢óV•ƒÌû}¹º+—z÷!ˆõÔø±ÐïþÂqÉ4 VE£§]ÿd\©I'O¶óe2Kò,éî!$ñc„`ªõ›h¿[âp ®Vkt¾v… ¢Õ¾ ¢Ä”P4Ì ¯ãCð™„>ŒpðaØQø(åVÌ“ðæDÁ^àz-˜Ö2×$6| ú!-ÓîïárHÞaB‰-•…Äu™ç@P¢ìû(-Á¶Ýo‹üã°ÅF7ª«Ýl©„A>ÛK2†»ß‰!©îbƒÏn´ôB“äˆeÔ¬(wV;TŒ`,~CnÑÝ$z{ùäpoYÕZfSŸӅ6%üÁµqVìË=øtɳGØŒEôC‹?$–žt؃=T6=Ð̬Ç^#3;†/s™6QO’nq²LW¢ r|z’bqŸîk4U å+ÚÌߢûReÇI|²<´»,™UÁ{ ‹>S˜Z¬÷pDJÇœÁ§-r)—ØÅ*^-Ê®8Jˆ¬ÑvȪLÒJîô%×eò‡UÚ,6†•v)佤Õ¯p2MŒZGÓx-ö‰yÿZbÞûż1Û#-‹DñÜê£,ú²žYÂiF‰§º"Êìï/bÂKò½6#|¨bðˆ ñY¾Lvh›µ¾CÅ9¡h‹UeB’yV‚W£;}n±­k’/r:àR£Ef À` †ta€ÈL‰~/*ˆ£íAåJ“˜‡õm:ƒ·í¶Þ Ug-ø o^a• û!Ñ(ª—E¨d±M-×À–xÍDŠwéM]½éôêÝÃÕÔvŽúD°ü_Õ«³<›ãåű*>˜^̰I!æd2êÜ[À]äœQŠŽu´*îVB[•)2"Dá39À{̪f–?/ÙÞÉ0ˆE€¹Í1èÚ:¤vý“ õg`×ÏôÖzÓÔ ÃÚ_X6•„¡ºh8 K_Dî“\¾¦PÊ]ׇ’ÀµÍyË~Ôà bf­£H“j†Ç"éºã¸Yƾ#j™Kø«”ômëû©’Ndô*©7¸4ŸY1誠E¦eS°.bâ¨'Ò\“>³Ú7J›ÂPËÓ“72UîUègnù6U•b³ÈËý2ôŽÂ U2“côX‰RÀ@É•ËV©•K³ÄÊ¥UZ²Õáý D$-º£Zç€ä ‡kVZ0ñT¦{·Ñ%ëM"× :‘\‘—ª>DŃävU(FTÐFÝ%«£µØb°ÒÑhig˜zJ#c ‡Ç¼…­RÐ ''3@p–‹]ØíM¶=”8Ïö`eöRÁ#f1r$ƒ¥³Å¾nÊ-ﲇ‹_ŒnK¼SK${æ%v 1ñ¢]<îÍ`}-:Ë9†G—´!Ç«Ëdqüj ÄÌ f~ÎHOƒ ó…âìu[íC|ÐÜ di;@)ûІ¤ïײˆê2‡……V¯£·LÒd}‚ úýþy»üžÙ{‡$¯‰\¤Ï_Lö2±X4’ÉqÙ9ˆ”E(ŒGx,!9šeåN~+ #Ò¡™‰U&øpÚÊD:[§‹%—Ì‘Æ"86  Íó ½è®™‚3‡¶?ž’ªm=zЬ°JËôW·ç£«O·Ó‡Ù×ÑýÍ俣±>zdÂ%e¹Æ ®C•¬U‰qÕ[kekEѯp ÈñD\üXÉòµ.~[’Å·zÞTk±"Ÿ³\•ë‹›ˆä]Ñbå>JŠæoK<‡ôƒ®+mÊïo“YK¶j“–äk …+hx%‡.=°pY¬s"9”z §^wBª×mX ãÙ™Àd l§h™$lÁÕ"W²E¬"õº ÂIÒ¶,²¦ 1o×InÈâhç(½•У)N/›Ø5‘*…+}0ÂNlT沟ì[8XÇI¬!Å6c½QGüæ¾kÍzs@OBz…¿¬^„!]}#µÔ€;N?­#ß¾çt’Xº»Ÿ¼ëä•+S· eøî÷­@42FzháèÎÂ'¹õ¸¸èfÙönAñõ Þ–ˆß»Å§1Ô1ÎbO\qÒ¤Zî¤óÂ0¸ØôOwR;¨Íó”E±!„ÐÖÇŸIAj¬!sƒrä~¦äz²X]!¾„nƒTðYþ80[=:SÔ£ž—mË™¢S¹fGÛ| #Ø8úÎ]ß¹áÜ;Wn½-8îŠ0ûô>Ó²ÓŽàŒÌ>Wx^œz§NÞœ·Ð“6´{i6%ŸV/Qõ—£‡ÒBC1ªdMrk\þí; á–'í²U´Kâ{HÑ. nfÑ.ƒ‹öüj"ŕ粳<—¾ò\v•ç…[ž»ª>ækÑiánŠæ W0×gÛdg2ý«3‡ˆÊ@)M~“~eAFh*\*_'‹; 2aªfÜ`Öv¬²“GnzæÁñMq-ÄÐZÓa =~E-\–xÑNªCx¡€œŒÙj‹vÂV][e“a‹6dª­<ʦ•ø¬ÁŠW\ÐS !YýuàoSsK \ (¦ª±[Láôžì¾¼3H¤ÓÞÝ\«òJ‰‡·‚å·tç·ÔÁù-Õ8¿™ÎnªuÚð™÷µˆÁÝ*µP®€{oòJ G{ÞdŽ1žèZ©C,£8º½7bEöç,ÉÁ†ì.9ïKcbÉþŒ‘FvX£yYxÌPƒa- Q=™»¤Ÿü›ƒÿÜ}x;pöáÃêmÃBõ,´@jšŒm“«`RQŽõˆtIhßp«òQ4±*®MíÂåØ6\ŽðÀUQ~xÿ3ÆÄânƒb×L¢¡4É:°R JGÄ´Jû*ãýÅ3ødÉGé`2.YäLdûXÕKÃ`ïÐ2i¬’*U1žekÍ^ ?œ½JªØO9D°o6³ºÙ¯V‡^cAʘR^‹ŸÄ©A2ÜÎàCé@7AÌÜð.ÎТEµ2Ý"Sœ9XW¯ ÑSêµ+JÖC@ÍÈm"fòYº CÖ¸¼¤„ˆŠe”b& 'QåS×RøZs$cÈ<—)èáéKYgèWx›<£Ã½Ù.]DÌæëôÄ­­àˆ~÷bƒcLr`A /sÀ«ál™¹með4YÃꘀ+Ù\~›]N®Æ³éäÿŒg—·÷³‹Éå%ˆÌ¶ûíŒTn»Eaf1333wMQÑ%/ÜîTÔÙ6Ý¢•å°™EÊòä'jQßÒš–rñgvü‘àP1DžòbH¿µ¤’5™îG×,QÓåѦ‹Hdºh¸ ª:mNÜÞg‡wRÀ²¨Å$„—À½§ƒÚ’#bcŠUÝÇMÆöJÿÜ‹a#â 1\&4P ¶öÅF¡Jê¦Ú/Qáo$V´ä¿,a½¶Mn¡EûÿíÀ5š*0p<Ã:0I ¦AØ®~k¡ …Ù…¯ ̺‘Óê >:ÉÛ°lï í„ÅÆºŠ ýÒÎÄĂϹ}¦Ç|bÁ'&>£ü ®ê®)õs§!DVÉ·l†o­ЦE(…ADŒº84±õtG?é*iqZ+×Ha•€ØjPÐs´Þ$H69ä>Fó3è¶B¤ßõä€^@‡·(-¼ãÀ¤@4?Ѓ›Mˆ’7Ñ[((-¹‚aÞ¸·x“~ü)H/>úŠ:@µ%ïg)j[镨!?‰íuHázSX·ú‘NaÛÉÍB¿¾‡k3´³^ ä*SGï#IÛ[Ûçƒóñ<˜ç¾|DÇCe Ù”²¹ iÏP€Á»'Q@ÃË =ÙÈX‰`™®Ð“ЉGFýËOÐ[mžÒÜh×.ËOnåGÆñÖB6Ÿ ‰ÚºÐò_¿dµUºçú÷›¨Évâ؇î²f ;K½)÷ùr&šB8”–lb“)þ„¦qB¥uü³)·Ù‹m`&FÏ:i¥é-‡5öø¼BrŒ™£lXÜÀ™Óîɧ#¼Þ†ç X¹ØãÚÕäíd¤²AÜ´ÂæVlqðP€c­ÖÁç¯Ô,·OB`®§Zy ¬Bž­ÒÅË¢»\:KŒN g ú nà §¤DÖ~•l2/ÖªÍýâìòÆúv4Ägó¬d7–pìÅBBQ‘áŒY„Õ×j—«Š^c%Øä–…›ûçI.úݺoúA¼ÐSd/LµŠ„/[Lý‘ê›EãzŸÉêÌõAu‡«îîñ׳¬·€õ6X“··âk*þ±'ûö‚Zû§ãm€++ÿþî'Lúï(ãXw»¦œË9^%©e28mœÚ]'nfQ¡øDä- ZuÛ$yäÃ.;ìB¾¹öFN•¿WÎl^\Þ¼÷Z'—7;βܥ*GßQ¾ ¡ U$^—ͬìî"ñW}ÓïCNq/~{x5eCùîÁ¦åÛÒ¼B'ÝÈ8—£¼ò'|øY¶¢W'§ ¸üF°¡²m@ "þ ^ßw²£rë;Ãa@B¥Ã@yL/Hî£øØÖòs¢´¿BâxoöžIý \µqD¡!¡L̤¿}fß>|Ý.AÃRÙç-#›êè̵ Ô‡Ö·?d¡-Ï{VÑÙxµª¨* ß}BXtÿ6‹Q›ÒÆ€~<ç9…¬³Ÿ†»¥œ¨LT˜ôóêæ‹ Â"V9ޏQo°¥ÌLÙ;V“,|Ú$Þ¡ûZÔûu½+<™©ÙGŸaÙÙx…s§cäÁùØ xµÊ‘S8 3ä Í'µØë‡Þ<‹ÇhÙ\/Ân¨ç{ +ûª“q#Ò‚^†¾¡åloô g¼ÂdDŽRÞõnj¥ì©¸‰vâ:)²;ŽžH»y?6{ŠËß! Þ™÷YËšþz9|iæà½®M¡ó˜äâËeï«üÍZ›†º»ÝНEÉc—*TU‘Ùº›³OÕV|ÚŽ„¡~E~½A— s7‹iý2<­U´z0ƒ€®ÆM!'ŒšPÅÉd΀qŸ)ædħ*z-Vâ?×kï>uÃúj z½ï³“˜©2îLXU8°-“éÀ¶œ)àF·c襸QDï?Ià™s½G/(k¥ÓüÙHÑ>”îh¿}y§žðóù;6•>?ÿ¬ŒßžYm¨o¯±mÀË­|AŸ_cÏEøCvhnµóÈпf`5"6~¶Þ)mP°ï$ñ?tÁçå‰ Ybh ïK(ÙÞ=£ û¥k¬âñ)þcÁ(¢ÆÆæ±X„GJð”Z£/œü¹ò¾Þï˜ï‚¢·÷Í~È g aTN¦—K4ŒK\í¦i+}Hd{€©šŽ¢uX‹—ç~zUï‡îÕý·;‘­ò%–¦ ©%’øÃ|e ãö\Å»9ò5ý“é¼Õj ®õÂ]ÁnlågÁ†v|í¸ÁE– 0–Bª5u˜/Oàø(y¶ÙÚáY= •N˜©éa… ÉÆ …–eY_úo¹×.±]õ}¿>yä:•¤óhär¼ÀÅ£ûÊq]|¿…Õ¢ùž´ì«Œ]›N§…îÕšH‡èÕ¿ˆAß&cÍ÷†Y™DÏ &lÃâVn\)P;º„8J¬Êõšy³XFìªõž± PËA «á8ß‹ïàŸÍ6×bà„Šd™. ï&Z«Õ¤¤‰ÇVOeÊQ¸ü[)¡×HœÂó55óq€ÛúL*å:z½[ê챕«6îŽ{ñ°Áz nÐË0%tyq4Ð,€’AÊÉB¹‡‡iÆK.UorRFï¡bEšu%•K`Ÿ'Ñ\ê}X¤ÈÀJe!lWïŸçv3,8ˆËª'ˆ“¡Ù*›Ú[ÝwÎ1J„çòÔ[G=»¹Ò„AØÇ_f*©AG ~Ói¬a»ØzcÞ4…×§ ,†K¨ãWΕºq¥Š/£3¹øŒ Nc{!°ø’J„èòâlBSÕOþt_E+®ì5“(C@CU ¹_úZªË^9Ê#\†–ˆžJŽò¼UÙE¤Ù_DÕðÑhg"ÍIc¥d ÑĨ ÁQvcu§‘GÏçÜrA0 ïeì1zHƒP!5Î$sKŒë€aý˜ó{’*àaIšñÜHÁ/J°¸Ôxzò.ªöP]~šóÆé²Çi.¨J¬ÂP2=£òË ä)êÐóe@L‰kr ²ò.´6mG¸Ê¯q¼ÂfDqn+^pÉÅ©ŠNãP¶]a[2Q3¢8¸_ ñEWÚ®„Ãf¬2:‡hs¢\@£˜fûqïÏu¿ÍqZEr£`— ºª· *…+»¼9ƒ˜»¬–²ð’î¦ý:‡$£ï!³Àð´ÞKËSäÓZñp>?Ô’Ó»¦ß®ËÏ‘ÓSÁ‚$ùû¦¿X/½oêý|ÏDøŽrzŠJIÖRiB}ÀOzyLª¤€Æ‡^ MÇöZ5Ô°‡CM±. dб¸D˜ë¢ß×ãv­› */»Æ»¨¤£Kh£•ûA—1;•FŽæ*{É­š¾MËnÑE·'Ì›«Ý”^+Ñ"8œ‡ûúõF}:aŽ?'Z ÛíXrùC¥CyQ¬«áLhŠ.§kºÈØe/Ëd!‚ÊÈÔ¦a$å…¯Ïý_J/x¨t¨(/Êwý—âK}h7c¯_%<¦w€"Šù”úÍYt 0qZD&DK…Ò£8ÚKi!DÙýÇŠ¤Üý¦É ï3^F¿1‹å©2.Uå¨Ñžò‚†ûðЖÕl t˜.+Êvó«ÂÚÌ-!¤aræ!³ÀpÉéë(Bú Ž¢'ÏÊ-x/º¯råX_™‡¿°% ï±±í᎔~ºs£¬a“ì8«–]+Ypì³·?’8HŒ"|éó7û¤—äšK¾Î!Øœ(ÇÊ*r0MñÐ #EHMÁPͪ)¢QËíу*ƒQU‚Ôvê ìæ×_æ¦Ûµ]Sík)¬ÍMB Õ¥R-+yùE D0Ó¯CÂZô^„bóXeß,^Pi~œSè¾ ]á'lšöÍsÝm ·ó¥‹ \Fg^]ÿ£y>ë¶hŠ£¼°b}!ÌVç꺴&e †¢3P"$—g’š²{ðyš›Ã’Y¸x jâ°R»h.ï à‘wðH04ÊC@`¬ïÄ]¸Ù÷]á b¼B 5qN¥=máýs`{‚Y¥ƒDyv`¦ÌÎt3@„Š”UV´‹‘«*DWXSÚ rÙ +v 4; ©½å>Žwz÷{Î"0›‡ïε$4Aˆ;µ’+?DÁ«Íó­.„N­ +®xœÛ!‹æ4H¤Æ1¦omöEûTßµõ|ƒ°9Qß뻲vªèI „'óäOÙ÷Ô¬ïû>78CUE¥Ç9t~ Â@ì›÷ã WµBX%ÿ6èÈÓm½9äC0:c åwx£~¥²å¢ù³ßWx5ˆ&MDÊ6´·;!zªŸstñ¹<²C€À´Á{%~{5ã&¿n¡ÛRæÞº¤ f‹I * Ý¢j¥¤ößöÊþYvaÿŒ]×?Ñeµte‚öðX·ûZï¼ùS|ìehZQ­¯ ÆZÎ×Àæ"ð°×tâ«Ów9‡åhTé_î· ¬Î•°ºt‰!þ£_C`IÃ!ÝòLñ9©ˆGü{¿†•Z£û÷±96Å`XÍ1Éü8Î?!›’@XÜf,ºÉ©cÀ™:\ìLî4Ør —II/º5·nàÎ?NʹÐüW1l¢w ^ÉX‹®I³SÏšÙ5P\ÛÂâè|2ȧ±Ÿ¦WæœäËQ­‘$%¦Ôù¤'ú(q?ú÷r§$®d¯ÇýÜB(ÏÐÕŽ;ò¶Ù·Íø\âì6[*àöuz#3þnYÒ±Ùôã¶)¬SO™üÑÍ“d¶³Êà¸o"Öm¨b}+=Þêõ‰æßüc’+çÈ¢J¼!õ¥vã4iÏN­ÜЧܢê‘•+™:ƒ²D²P”=Ò®ÐÞ[ §nb¼NQŠïøyedGc#z|)⃞ÎõÙûj}ì¶Y5uJ&x¢sj¼èlbÅ£'Hœƒ‰ÅhµÞ©4SÉ*UVéQqE¹¯'ð—ûã"‹ÃökÓ»ÖKBé#Ù(ýº©ÁmÌþš9ªx„Lj$çFûT;[ù¯ …¬¼ªÕ]¥‹U¶\…š±|·?6åo^íp½|ÒÁ‘ Ïê½PÄÞ ²44t œÌ³.2bfE±×vÓ =x×ã®É5w#rgßçw¿É %¯Ó…ö~w¨E›¼º2¥äæâi’Íâ¯òô{8LE-9_çmN¬ÃUõ+اÚÎ[eì)ÏpâîÇCõX-ìUng‚ܺì=ÜâM÷WÉé2RG€3S'­tÄôËíú¸yhæ"^íP¼|åaFz XýR©Ó=ó)D¤À:R«N\§}þ²’CY»Y“¡5iH][ë3^|õ‹Wµx\ –P&/EQ&q6²º\Ur«/£-e¥hô ^‚ Ç ßÔH_í´#ÁM»§²›ÐÓ! “#1Þ5Ðk„;%Þ×Lˆ—@<¡ߤâ ôJº«†ºå=$J!c²½©žê;øølK†8­ƒ#¹è{‹?³¿Ÿ½ƒ¶Ê–€â%WË×QfÄNÒ‰g¬Ÿ_‹¶÷0ð¡HH 2¬ ‚>‹'£T¶·Â×Є•ñÔ¬s^VX%5­óÖoÖ²VÀŸÇôÝŠòµ1HÁ&À™N3À³³°g›¥‡zsë àÆ„"žÉñ P§¬e"C:ÃoÉH¶sëòÁ4I¯´¯ÂêÅÙù ;É·‡z(h:ÄÄ>ÖÃä ),¦©,eœB©ýÁÙF+èÅÙ?V?Ùj∆¡ Uû|6?6FlÞ¶mI¸à-»üòÅË…˜Ò^Tõ@wÃÌ>‚(~Ié±–sz•i¯îÈcˆÌZ¦UÇñ™¨È{ ìà.ífø¼G«ÌhZŠÔ‘º„6kR@ š(˜JÚ»%}DNên7ðº²Ü1’å˜ÂŠÂ@ KÖ''ôì~á”e™Ì\ѳ~¬û¢§ÉÓz†M.¶ýæ¹ú&M[S0ã|..€Gt¿M¦Ž¢ÍÉÔˆÞÞ¢*!%"¯þy]]hI¼ÚÈ#æáHHcÊ”xwÉC¨Ý2 k)Äáa[s+í‰>Uoú ÑrPai–D}é›nЏ¸Ò’%=H^k«ÏlÀuóÎ±Ú t hbøà”àÐOónlNzˆ3e=à˜Ú»)o”¬è™fyv!0®cŽ3qߺƒ-}Ø“%£È‰Ç‘gžýàp§àFj6ÿ>Žk˜ß’šiÁ°tª ËIm¥ª\ˆ§­F¯ü t%\áàÆ¢) û 0«ÂÊëŽ-áÁQ®-oÚèi'p))íª´Ûª$õ¨»g! –V-®£°X í½e¡Õ ­Ø F±.ÞZ”Œ…’ÖK`ЇØCã29uÍ@0C•Œ/Ã!•»T:f<Ĉ^'WxP%VC*3QOÆÆÂ{;^ÌCd„¶ÂL^æÞ¦‡X —ÇŠ7œ(! ·¬å‘mrDÚ¥ Qü®Øû“›—O ±°£½ÓéjÝ@šmi˧¨Ékë4oµk2 ¶%Ã4a µb¦8foA9ŸQºÇP/Ø1;¢•E²°-|=ºØzŸ^é—óH À<òoïeš^–Æ‘×]Ù( Qú<2©™ÎÙÕ{·u訦Û}»äÎ*(ï1¦Jx½½YÜÎ+qlx=rèÓOcÁ „•£Ï^³sõÄ‹ÀOž)¹fëlÑ(Ø«[R°>_ýZÈÔ¾^W¥—UÉè›].pCaY=¦Fôf%‘ÞX/RÕb/«Íòß6‰rinz£øËÒb_ï Ë ÐÂÛÀ£+“+VÍI— ]£´ˆ­Zÿ&°«{bÏ_ì°?pKð³Õ_Ùå@ù ¡æO¼aáä yô¾V“™»Ûøa\ŠÍ•㉉2€5ý‘BÌå€hñ»ÀøRdÀžšõ¢Y{FïAa…·¶PdÉõ…±ZÒEË1¸6ä"a‘ö}Ö›»Ûé©•Þ‹£V‘2è’逕AZƒ¤Rd²©·©ð£8_‚|>ÿëݪZ÷ý\¡}õ2Ü»±iÞ®.Þ¬ú}=¶Ó›v¿?ú©R–&1>oî“Q}…Q©:ˆ¯8Ý·tI]¯}Hòëv×reçãf*úΧKh^Cq¡õ·fM+·6J ö'ävƒD¤Éfb–·Wï_Á(ïêc¸ßC•Ûì!hX[OYó¾[·ydÐõU%©TÑ0Ê‹N‘ú:j¤Ç }ô¤²ÁR9±ž ˜*”ÿ/QjJg¢212jÝ—ª/|&*-.-Àֹݙé!Ò-zÛöîúSâ%­#¹Ž ¬"”.TÑWPÖC…A°ì~èˆùL\iªÇô7‹!»©ò–P¸\Œ¡Þ›r»lìÒ¯’,Ùíú˜Þë–+ÃbÙ]¦ò+æF“+ÀÕ¢gyöm7•";)C*2™§@cÂbBCÆcä$Q1ƒâš"ç g3cßGâM@Ø"<úöÍEPÈ•aè°Š\R•¤6Â™Š“â$á"´$y‘ù‚'âlKY°˜a‘Ù˜ \Ø—”½ÁT I|rE¡)…¢rK 0˜I’ÍÌý^=€Ê=Žxbí»£ävëæâKé¤ ¥ÈÄ„Ÿ¾ÞTj ¼à"NÓ}ñ5DZ†rý0ƫՇ tñî20óxœæR,fpd¶Ï£å]ÁûVÜçkÑojsÅüKUöŠŠ½›~è¥d¦znÍâBŸGI”"hœŽ´«õj†½ÜÌîné³wc Û~ºÍKf ±˜HFúÀï>VýÊŒ@¦îx{¨Âö?¯gáÏq‚ËÎ[í”QŽóÂKjÆ…Ä%WZÎQ.ƒó‹°pVôŸ­ËÌ,l\…ôùìüëHvJ«’»ù ›ÀâË1´,X9&¡âlÇ¥Ò&bùp¡ÊÞq¾Ò*|×½ÿú1ò¾ƒƒìöýºÞ±©£2IKK'ýH« šˆM*¥„ƒ+áã ¡¢£jyІBÆ®°ª"…b”FF@m"pÀij‡OÎPOÓ"X¯P Öȵ Ïæ H ꢋ0Q"Hx2»mZÌ6ÀMº¢š›7Ãí}½¿»í‡¦[„É•Œám[è*н’ºBü¥ÐYÔ `K…*ë‰òz )ðXdh!•x7f"±BŽ"Q+͙ήŠH}óÁÚ @wœãän [ÄG¢¢š™è‰#>µÛæ¶ð³Eµ>”ÎMЀ¢jýaŠû~š»úolyBlßdù7›ïG¶0_”wÑc œMêáëùuÕž9©¯ <ˆÙ²]Fä©$»œe2¹9¨ý÷Û¡Þ<¤·©&ä>–®¿×Úg¿ÂÓš$]Qc½4Ò[¿qÞJ×EÆg®ׇK€ì{pp;Íà"¨d”ž×c8OAjJäU(€½fÈ䦃é¾àMÄ©}*›0ÙœTU9¯ÙåæÉË—0CöÈÙ ”$õW¹dè;Ô0—Kº^ŸV%íâÅ ø‚Æ{YÃýº¬á¾¨%œi´€¯3-àe­ß\Ë·¤Õ{kõšƒ@t­Ûí¦.¦ò p`FBØ4ØêÓÇ5i¶Q=léep·ÿ‹‹ó³Ÿr¼Ðdm6÷}1¯W€ã5’D]BKWJ ðÊ;¥‡%‡ëÒŽÃ’NCºÃï,\§; æÇm9ŠÓr("7¹”®ßæßüH„CrÂ*dûæ†zœÛ¢/³¯Ä†m3‘ióÓe#ÈÑãp¼x{òj=ªùì ÞÅ_ÖÚBQ“)Ô†HÁØæõ׆iÌ´—–tYÓÝU¾«êߨ×:±(E ¬ñŒÕÀœž¾Øì[h®LSñX‚ˆ˜J†hƒ%Óæ`%  PËa1  ²É±c`–©è)Nä}©?Ã\á¼¥ì‹xӌז¾kŒþR¢ ÇåD˜îs×Oþ ñˆ¶¢Énð¦q#ç‹i…9nNNúj¿¬™ÞDr{F‘³(ùÚ‡ZŽ‘~íEï}Ñ/ùÔ‡ZŽƒ~ê«ß.J9ÛÒG–(=•Ç|xõq­D4t=†?<¶ÍS€È°u•M«yÞ0Ú¤æ¨<«°æWtV3á´cZlåb•\Arê èÒ¢ ÷B¢fXT¾¡i‡£eÒD:/ĉ±AO\yfÏ“ZÂårIÉÑ•ž™šý]Á`(‘aó*ƒì#)°FÕcm5¬XØPdå” H+ÀúñeæÃý£éPðÝB"‚pðúð«r¡‘»!à±á¯DWÏem2_IL¹$ŸÎ¾ª6YêN€N5, >v%‹5Y9%ÁZ)ÐG7Y¹«‡)‚áüGÕô!$CÁ“* áÁË 2¨ Èóq$†Ìh;X„œëËLýÝüTMÖ{bBNÀˆ€6TŽÚv41©å~ ¨HžKI$Ù•þ}šòjZNFô,˜ö“êÍ¿X4]°®º5e1âSzÂHªî°|鎿ƒrõâ“(ZÚQ%§óQŒkJŠ=2ðL™2?‹ÇaS8ZΈ ÊöB•—_±Ûí:O‚e„Af0M9=ToÝi@° p‡21…«©¬þ10:#2Ç=·‡f,ýd3bŒ³Éƒé%k×ôNìÂßœšàà|òÁÒ9hÕwçØ=`85/ÒI5@Bòô™h•ŒŒX<úñ(UJÊæq3ÝÞ5™m‚¬[¶y."Œ øÛùªRÛûᥠ›Õܸæq3°¦ñp±ú2\ª.·.Šç@¼¸ U1Œâ!Á˜èAV{QޏeÊ<í:ó^z܈ÖÅîØ¬4 ¤˜Ée’»ÿñ\´QdrB/ÑÈ;ŽKé Uø#®f©GmÜÅÀ®KÉ®I‰®G!dù é€!ˆ0xaA¾]Ÿ}*èu=Õmþ6A"l’¥Éßál¤ªÑ®>2jÝÜA@+p?ÓvGTâß$ªø]=Íã„ÉB—…³„ÿ¬Þ‰<9†ˆ LÎý_ ·2ÅR¬J£½þ‹[Æ›ËËðú³`”FÊ yß×?ví—\w5EÞßÝÁGb1 _2Ejµ1äUe‹Ø!xØrnW*Í,tq^ˆJ–`›ôÌþ²zšÚ]—‰RV3GµtDDvÛÙ¦žî§è÷Ý?Óç²ðrÔt½‘JÓ»!u…ëÀ-ªõ§£=„H¹ð¼¹xKA³x!A‘½?T]ë»m~4˜ÓY&—C[ñï.–Ümz§jÀ6e×,±BB7k’žIÿ¾ÌâˆPEȼ¥KfžÌ¶n“½6_ã¸d*¥zo*¼º«íþùn¸Ý§ ‘žèšvw¿îÇ¢* Ť®Pviòþ£µg –“'°æ¡ ö´/Ì{ D«È×XáýŸõ<æk…ïsìñ~jZb’÷?F¶ûíPú%bµ–ˆæ’ æR/®/~à¡&òˆ ·õÿÇXšù>; ÆÈ,•Í h—óý«¯2õ´Ïuó8t·kñÊîÚ W td.‹²}»ùT}û×õÙ§ê“ö>zµiw­x_|ûtõÓrÔÜ{ÖSyÌWRž~U¹q,äÇšÈ"t_¾ÈyèÐZ\ÊWÒ …”/îë»;U£ sþCXçm~0·I» Q£ Ŧåòø~xΘ÷dÁdhÇ%âG­fiEº6³´Àhð[½ê¡Û²:¿YRO° êV;uÙ6ëcæ;“[ø@གྷݢ+íF‰N~V°½’[2ªgÏ€¹AÅ0åR ØŠ:Êš^#³”h…l¬–Aò©ãÌÒ¼¸š%ÇKôbèRóìE­Šhƒ‚oK ÷ÏS»Ép´^àîÄÏ¥³ÝOÃ])'Ò†°2—îËñ_¨uW}^ݼCÍ"ã¤z zq³­M4ÚÚX“íú\Áðݺºyü‹?þzb}ï[Ñ‚5hÇÌ"Zd”e]»s€ÜJç.;ìë]Qk<Z0”EªòãõÙûÓŸ"yÔÂ+Íj)µ%âi—ô03PVàHæ#5ÿõ7²@¹Ôv×ÌP¯iûTdt²ëÆážœÉL÷èbLÓ<6õá¶¢]–cFœM굇šFØ)+^*¢1¹’ÚÓ`›ïÒ`!-Q3¸*ŸðÚÌJgž„YÒΈ¨Ìx#x¨ÇúÐÌrIÓ×m×”žg¾8J›}ò[Ìf\l‡*ªÓ)¬E¡Nµ/KByŸåQ9Ç=™"ßfàZ KÚªU°˜éq,ár*Âée|Ð/<…ql Ešh,ŸJUïlõ³.·Úï÷ëz“¯ñTβN×3~`XXØ<¨€d¢yd²§ˆóÊ+fºÛ÷™qz,±p2‘î{)'ßÙÅ;¤bZ‡V¸7êù‡a»¹ÞÌE¨XéƒÊ<Seüä¾ßä|GE¤Ód†œ6çÇ@çzÜ5sÁŒtDMqQ~H¬2pRÚn:›Jp‘Î…Q&ÿ\f=#£hÞ"zM&SOu?3_R*rP*™N9›Ý=&ÓÛè·€«d3¯Ä„Á6(õnD{ ~¤ò²ÇTš·eöGZ*1ßjtÇæÐ®ý,+”}Z×0³äŸ*,•·Ø’«ý]4z\ìaf¾xÑàÉM¥c’©” 7~̾ =qº¤ŽÄ‘ {÷œ”æ&ߦ¡ÙÀVÈꇦH²K¦]é7)Om9>Žã3>¡õ‘>wß¾|¹ÉßÓÜ„íãw¸cë,…'s(&ƒ.}8t8SM-åÚ‰>ßSý\ÂF¥ŸÎ¤cF§°ºäV‚´ Ï(}Îhÿ«Mzl·;ã-b1uv"¯ô¨ƒ½ˆ“Ô§.¦QG¬‹îÍÇ:ro>zÓ Íî@Ûl¤—œDÏæ"Ds;¸ÁÁì‰Î.ÔÎ2Ø1™žÁSIX§ÖkW»ö±uäJUÜ"ÇNƒi¶j‘5t-ñÎqw2í(®Ïqº­»®Ÿ³­ù¨Zã‡ù’{cÖ{W(C@=™6ýí4ÔÉ£¡Ê˜·é‘Eºuušj%5_úþ}Ý«nÛ>¶[qC «¼ßÜÖu~Ù;§Ó48/{õNú³nn«³»»Vöo̶éz®Î›n>ŽÏ×0ü/ïFl/.f!\(E|(3‚Š%hëý±Fž÷ÀœÒ;È@!IÕŠ}h¥C~%fY»ÚR¡³—SÜoôò:qµÃæÂç¨ê}³•u«÷„1_Tn‡¼¯qn7<1+ ¹*ù½Úï®èÞV €kâm›1ÃÁHÎDT/Í6Ý×£x_aYÉE¿Û»ç‚5Ü­$¹’P¥,¸ƒ¤;éM›»^žÌ!˜ iýl«ÞÞº~T^Õ*7åLE5©Tôj½¬VÐ)–|«¹–óL]=L÷éqÓ¨Ú'´ùÜŒ_ši†r}BFžçmKW*Ã׆Ë+!Oĉ?_ÁŠò­m|úñƒÔars¹¾#Ø9Ü›ãt¯·I“´m&>ƒZdx‹ƒ!(QQ·ðáRáO³«¤zƒÊ(ôظhý6:‚:¼Ó¥öh_S¢»=xøI;e…ˆÁf©w€ýks¤'бÙôãvòŒ›Ñ¡²Úàå„ $Îçõ Í=¼šL4«Î~_)Âwv€JôF71¾b²8“×\Øšgm1‹ÌÏñ\NåaëÌŠˆ#bíæŽEô¯çØ‹FÇvÆB竤âb%0a Amä—Æý¼L>M¨d…KN¯9â²»/Œåw]ÆaµÝc½o·uyE2%H¬Á œ®Vü¤ê‘ãíÇVôoUñ¶•kƒÓ³G…eƒsàÕ™ÛB2]X]¨Õ«›êØ™z7Ì´]€[ðN«Un3-—DtN„tÀMz¥=MÊ}…¶ØëÍ}uU×+³™£-hÐðÚ€‘Ù¶‡<¿,!›ÇºÝç°±Èäà[óU¦šË¿Õ­.uPÛO5Œ,>ÊP"iOé 9âñøõ)É~‡üêòQ&QágÄ]©&¾& ·Ê…§ª›RôvÊôq9©‡É8üÚ²Ùò³§sÝï ÐO€.Áů-÷)-"íúé¦éÓpJó¸t‰ðVý”÷ýqÕõíÀ=1`™Y° Íh’ëÇI¤šæ£)~Ýtýc_ú¼òØwyðGM¶JÈ©)Ÿ')hå‡2”ÝF%9P=„Í|u팩ޗ#ÅŠ¼@$Q/¿7˜7¬+Øä½olÏDõÔÌ»vµäºb{%ëÅ2e"g¬Ó-Þ]ª·°Ûèa?~v™ÞX ¢gàíu÷¿ÉÚ‡Z?>ç¨ è ݹ‚&²ô€ªj.úœo›»6ÿ¿ÐÅÊÔÙëz*Ažxàhô]ýö)¾z9¼8g»7Í} ½;h¿±»±Þ6o¶ýS'½=i3§¿‹&R9!f&QÑj09S é›û:7ƒÄK ÊôCv›ärÒ^ÿõÓ0MÆX¨B¤*\|ýȈO [ÄR°~Ña¼†ï‹ø£R öÄ£œýlÿð½9ÕÙÛi6¤ªéøi)b=©·Ë¿õ¾¢,-‘a`•A^?\)K(’BºÒ¯cü‹xòWpI%>Ân‹ "Ò <úFÅ‹pl•oC¨[aøÍc ³jÞE:ÑW…E7V&Œ>M%ä0Ód/ÍLÝÿ0g¼¼I‹ÔøkßzËNHjÅsycªF[Ö¹ø*¤7vºÑFn9Î'‰†¹~pÌbil|˜e")fÄEýÚÔÎGñf¨»äëåëó2ø&šUûjß®e¿;C—k8dS‰1vp‹Ža%xêï“Ù\)ý º]R²}ôû׫êóç·2ïæâ·°Ç>¦o˜Ñ¿MF þ~­æxáç\¯ÍcDLÒŒ§p†D¶eÈu7Ê6ó<Ì"%i‡HŒ!•¨ÞëüSÜ,ÊEòjTÚt«¥§Œù"mÎ&Ó…ÚÆùº¨Þ³¡ÞÜëÊÌ阙N9ûš`è…7Ù±=^êp&3K{\ø|úU•&£"ˤ“ Ú“ 2³à†d†ˆ‘:.Ò MlËZD·m§ðÂÜŒ™-ª¼ÔÒ‘LB9•ÉYZyÙpa¾ÆùáÁ&lBvð…zÁ/ïë¨ë)øÎ®w–“©KH̲¨4 U9³VŠL)™DÃuOnSÐÄlšÂÍ?°Ô´©Â’«Ãj-ÍE× îc4T&?á7WÊĹ~2çì2ષ¨ßÀÀÇЬÎ=$p{jµví¦Ñ)Ã*ytãïÕù¤·â5ÿ§N‡t+<í°6,Å‚c7Í©ÓÕ4ìâl >£œ4à?£ì¤Ï¨¨¡|dNçÈ&’Édä]ÝØý2õ4õ›V/9XH9õ¼©¸&˜þjõV[`œ¬ÛT“¹@×ùR3¦£ÎñahÕ.•óÎ:øõŸË“ÈÐg°—òšÅu™ANhQ–ï¤B®æÓkD`×ïØC ¾U/ÎίúØ|ÝFÔvX³ vþ#µ]ÄÍãr”§b”µY#ê Ù–«ÝÒtbã5ûe¾ì'¾ì?öÙÁXC¿Mc9ÅIôÞo—ÖÌDÝõãS=fÍûB„a³<œQ†f‚ ¸Š§ÜßÃØÿ‘Ž•ˆ—J¦L*m)ÄÉõ‰ÆB¨Ô 8ÉòªÍß·‡vΑ„R„2=.l]f-æës¯Ï ¶¶N#rLËÔ^jhÆC›øŒ‰ ʦµÄ.o9æ1;B4ê耨¤¥â¥uËÆ‰8©"™~k\æœÖÀ¥FóŸå¨ž' ?Í÷¤÷”‰ø]öŒ¨/Íg#ˆŸú´[Oò»ÂbbJ³i°Æ~<4vk ‰¢ºwºhž‡ºÍ<4ÎAÚêÝaõAÍ'-ä‘î) ¸yÇ“9“Á9½øtöu9O?ÂÒžL4-^‰¨\ÂEL´oVJPݘ@Z K–ÄL¼352é¿%7Õ213-SèÝ–š~<”lctÃåÐ-àÑþ¯…LòÍð`cQOwøÀ/F2íq'pƇç¯âü³e/kF‰Aø—4žú‚ÿߢ[Ñ©¥’98F‹ðp.}á´sójî_Á¿ÆáˆÖÄ{oˆ¡]àã"Y‚²{šÌhµõ…A¦`N9«â“IœCº-eü³ïŠÛ%t9ì »èÑ‚bù˜ºTßäŠê3*VëônÎVÕïÍZn×—KYVÿéshF瑺5Ã÷dª»KÔ,@“›w‡vh taÓ)4’ãŒÔ{¤`ïá„£Ó²‰Øßö»[µƒ)mß×9û6GÝÀrvOþ-WÜ\(El3E}×ÎÉhA¼’è<òˆÓ:wÆwô6p½µ£?ªåS* g½Õ9€¯ g¢Y猅6£ÒôÒ%õHÃŽ“×"ÃxìÀ&’‘#ÂP.6Äô]y³NÕö(ßÍ\pˆw¥n›ý¾Ÿþû¿ öØD¤Æ6Í´Ûð¦ŸÈþ„ Q¶ú¼úïÿâ¨2ûKxeÀäï3‘&/?ž›P-€¹M'ö¹o'+ô°NÙË÷ÿZ|=ÿš¸œý«ùW†¨èZþ5~)ÿZ|%ÿZv!ÿZxÿ½Œý^E¿ÊþV|ÿ–¸ˆû‹ø7†¨è"þ-~ÿV|ÿVvÿVxÿ½ˆû^D\eà—éö¾ÙÉ– §3t(‡öDwÚØj_H#½ØTk] hÌœ…këmÛ]+šˆ·ý¦©;»²0[ÙRš7® WN©]ȪÈg(¡ÚXºXY.¥´ƒN¥È\)™è¨Ã¨iûgh׳èEÜ‹ø§z+—vš1.3!®>±È¹`wË.A¬$wN¶èR°>òâ>¼™¬FL~Çnq½špYõ2…8L,+ªÔ µb1º2‡Ç¸=«¥ã]v«b7Ëê2V’#´jû®ÂwØi†ÔŸÂZDI¾a1Ì ÚW»¬2Ã2 RÝ–j¥TSîµË~–áÆËrØŒºŸ¬<ŠF)r}޶cnH߬Vnšç‡IÏ÷/«K¦W‰XVT{zMAujÿ\zE8L'*{qªz® XÕÌ},Ä励ÈDX„½ÒEbÄrzq)oXˆ¥E²ð-jg0SoP}ˆ…`9¤è+Ó0Ehæz·°¦ü“Õ]O¡Ná-K"ù#}r@¸ó/¦Ÿä¨}‚Õê›XHOÃ-«<¦‹eEU¨[ÈõÐt0x-‡:ó‹SzÈ(ˆ7Lå:ê%v!öñü¦úï×ÿUýêgñ_³–1B™Ùms|þþëZíÀ–5åÐ> ÊõžÖ!¥l·¡‹ýGÝíú[5œÂbtšçx?.džš@PƒòÈò¾Þ ÞµøìÎÇÔ–9^©­Ó<\6QU¬ú}=¶Ó›v/n¡~Ò;´'Ÿ§椋ƒP…9d:f¸º1îÛi\Bp%,ºáCÈb&“…±¤‹bH„>Ñ"¢ÜÝë‹0 ë-à¤zyL¯¦ D„‚®ª­¾©(%¶ÓCöþp}Gƒ[èzµ•Z½€ÂxÚVψlM-8©O$cU%JÓWÖ?´iò^oúCõBõã`¿ô4ôÌOàPo›¦žžÓ žÊb˜ô‰ÉNÁ ªï7¢Y/ãmµ]z@Œ—j./» Ty•Í›|ë…}®˜˜ø½¬«°ÌÂïTáB…¦cFñ½O¬µ½ïwé…PFÌÉ iîºßÁƒóÇÊ$t¦y|Œ|Ä9!1î00fÃo³*15›1é9—Ó›*‡©\•Ö®YlY` =£jM&gUO)Ë]ñö–)žêñPÀ€d”2°ý•Lð}SÔŸ9#­“Z0§/)‚YeU*»úŒÓ»Á*4s Ôáa'øözî!e“Uj«4OõÈDšýzØ<÷ 1ROþþ;UQ¯ B?ªÊŸœ5ØývsîÙ¦6‹ÄDÅŽ"ê"&¨ w37LóFbàû瘑 xV¬ub6=%CΘ™xÙ0ajàL!ö¹Sº­ º=™3j2bUìÀ¯ëc'—s²ù" Ê7@©Šò˜æç;øq@Övh¶¬ý’·~ŸÌ¢SQ±£¢ÙèéIÁê…½Aô'}Ýôz8åèI»•ô[ʈTaÓƒ)Á´™x ží³žÛ°BúTÑJþßÿþ¿”/D)Hü™vpwò§öu ®¥ûxp`jdØ‹×=¬Æ^ðFO•quĪhƒëÆHT+¦¹ö—¤et®hœ,P©û­¨Â©ãÁ™'¿öõÓšß; šK˜7„Ý-ûÌèÕ± »>v¹BÁ°§E”8`èKg·–ª©j»PËaÃ,}ù×<_ÉeM,Ò³S—ÖÛZÎ_áüf[FÒ ·̤Údåq^¼ ¾·j²DA†ôrªp–ÍÒ ·t@ÎAXïÞô‚Š¢káëœy›“¿lÅ?&÷¡S±êŸ´iwkcvDM_ýv«§þå˜ó¡¦oØ™»½ß ·ª!_V'‰2ˆ”SÅê „º/žø[Õ?â2Ê Ýlõáü¦ú¬pÔʉ ÜÂÝ;˜àa—ÃkbÉ«±\hÜäWù龞ŗ<ÆüûØ@Tîàtšt<×îž Î&Ó“qÙÌÈP]JAõ¹5Ù%ëš™ ‘Gë¶2S³• x^st…ËTRÒ‚eˆâRyàÌL·.…E/"FP;Sè«@¤˜ë+èÃòh,”ÜŽÑÃæö±û~ ëès«bZàç’=íïJՎ·'þãyõíÓ¿NWÖÏéb½œŽéãÔãºe`\ÜÃÑqÈ/?qÝœ®¨“ÓEº8ÛÁÁ3~êä²RÇ÷lºû5ˆÏˆc­ë.½ý6i›ŒkápÜÏ­ôN«ò”Ïeåšø’»e7Dì~(¾j†ÂƒÈÝ‘»½­Ü½ Ê7õÐf,#‰³ ‰´u²µæCsvsõš˜ÌÞ}üÍwâ½çP„]ŸñuÆæ 6‘Þ{Öcsî.¦a¤g’·ÃÏž_„8½Pû_ÊÁ~IýûåT°¶{¨w¹'†ªŽJ\Xˆ4ÑpSÏ ŠùSx÷Û!Çã$F$’:¹¾¸aÂ.Bô»]:D¨B(*Ô‹N껤]øEOP¦3RG€3é7¾Ö¨d֒뢆œrPX„pd2‘>NUª›ç(øÌ䯷z&d‹IôíoÔ«OÞwâ mê½ åÈxZñ$€ó²²¤úÇ»œÙñ.´:Þ£_ÞÛœ7Û_RQ¾¶)zðŒ;Ã6”Çzläf”É-••zß%òfÞÜîëÃz[§8¡&!YéR%™ÅR×*çîØmèÞãïýí¶+ˆiÎ uœÅD7ØM?ê1üïr½w#­Ð¼>Œ !EQYtíç§UŒƒ0µì¾Çšvß™¶]§êËï³ÈiªËáÆÆ÷¢Þ÷Hï;?£¡-}2‘NÁd¶¹÷½¤ñõo}}Ï5¿ +cHÂ$cz00õããæò¨õOÓÐÃ¥™{ðCuðÒO@L¾|‰@™TIæÒëy÷vÚôhÛ »±>U¯œè{B}õvŸ´Ýî=Ë­Zºø~H÷Fj[´èÙNŽÉp'^D÷©C£|}ìFíF‡_²å´ n>wý½N!;e£õ–*ÉÃéwéD>‘w29ûmDÎ ù6?Øsñ«?½C/Øšg÷ä}Q«ôk=×®éu¼x¸Ä= þŸ«ÍØŠ› ­‘ɱyªE³.i—jŒqJúU¶K áy¦7vª_Þ¶ˆ3¿¯ç¡NÍ´S…6­Ò°a4GÖ[—òˆØÑYŒ9· âYß‘ Ÿk)ËXaLÊ4lk-^OíVÔŸk"YÃëdÛ^N:ÁP›xØç^4¹¦—Ô ’ êqôF¨ÁÑOI7$êÇ ^uæ b'³tØ¡Oé~@L«mû¹^À(ó®lëê¸-[¨Ø{œ“G€Ü£ *d_¥KËgÛí›Ëm;¿¹0õ¶¦µT)ªï^Ü7ÉÆ.Uh‹* ß%ïtÒ³G ›_ÖéVûqH›b”Ö$Î#ƒÊ²·ñQõkD! ɶ/X!å[:E\py‘aÎPþø¼rd~Ü­ÿ’ߘWS6”Ob>þ¥ÒɺjN£}jÖâŸi'D´”ÔæzkÆ]ú¦êu»o•¯Ì;ùÞ,šÐȨý2ooIÃ.…ÑjD?—´¬ƒ1‡shðTï¾^ØÇš?Õ—ËÕWhò@ÙØöOtœžä´äªÉ5ýǤ¿Á²µûðõëÍ‹ÕO!Ûq(%#JKåIªßÌ$^È…D»MAÄ@¤8\²DøzßNºˆõ7£Ÿ‚7ëãæA¯s~ß÷»½Ž:h¢ƒ¼FQLvÓsó©DïÍÊ„^ DÆ`dPÔg;m¿Éøþ¡ c¹±¾ܾé íÇëý¾_×{Hù"«‰ß¢{ÔŒðãê†óÇk» …S8 ‘&)Ž0ògS½?¿ÔNÄÆàC&õf†» ÀqJ|EÄ»™BGqïÄ+ó0Àwý²ÛÁTŽHy~C+f_¯›ý”á$"§’É:ï߬ÿ{½D]K¡gx3º ®ÑéÛà=`^ ¯Ì\mäêÚÜ=phÃ{àÐî2gXÛfWæ*HgÕ‹Wï¢g±OmG—hËû0XŒGHoó  wŽfcS±Æ/«ü ÚoÿxÜ{†‡mÆî° ÌÛàéšq‚åÝ ƒ‘+Y°‘9ÃdýÙyð0¹EhÐk¬‰‚"0é=ýTáÌž~ñ¾rïT àü2Ç®³h^Ì}¿ÿ9i×Ó&Y ‰Ž@õþÓç—1ÿ4»Íp»®ÅPôîóËßãjc>ȼæëê­Ò™¬¯ ÒF½Ùlg 7—+ãðXU¸¨EÝ7ÐYnVˆ|ë,ƒ©mÕˆYTO‰¢!'Ž×š¾¶o¥¸„û$â2V¦BËñJ·¦”–Æ[WR5»ò,§Žxu!o¼vSˆðî_T§AÌIâµw!4q ()¦J¢vÍwQe°…B*‹WÊ;­K.DËA1•”æèǧzÜÂè4N–ÕW¢,CÈ©µgå_„ºˆý4êB^®bóˆ;Ùë:és›(Ârâxݪ¾`êóçï$â2V¦^‹ñ~äæ-8D}᭬Χün9í¾N.=•èÕ( ¿oêý|»¹o6Ë>BÑ‚!u(Wû©=iž÷ÒF¦>³Xó<ü@]&K3°¼>Q«¢ÀòS8¾›«èBÒéÇj{ZZÝÓâúžN8“O =RçYÚ²°Cé!_2Ì«©Í«^¿_‚“aê&a»Ôs¶C“qïlkÆw¶Í¤lLaÑlrcŒL]¤&ާc’ý?wˆìyB…çóÑ‹ŸVpø:¡e§ÂÝÞ§ÒŸD]D›£Lã-Ë!%`Òv’ã¤Û–-¨8ªÏ߬_µ¾ðN¥/æNTsÕì^\RÉ\™‘¨âª×Q&á–ae€˜šJ1¨åòKª',² M¼j¾€(µ' ÂTIÆö¸¼FÆ’*‹êdL-BJÃÄê…·?MûÛ b½ƒÝ¡Ëî™TÙŽUÇël5íϺˆý4êB^¦Z õ:¥¥5Ëã!±0YŸ7R˜ã\L˜gãë.…#=N,~ÇGŠ1hž0QmV™]Œ˜‡ãê-Í£7dË.÷0öß—ÝvéÒ!iD¯Í¯²tpN Oƒò"a«nÆxDî|· Ng±…Óyȱt:cú÷¾¸.B)²2‹ë@”)=ÿPJmŸrÞ—+ŒŒÚ´®W¼ÆÂä}iÌF-½~â²Lr3%ì'ΔET)5·fUêΤì\©Rä‹PÓlQbßô{ º$ŒÔÙÆ™Ù7©jßÊn}•–57cḬ́yéÛ‡-í546oEk“˜V¯¹‚f(´(Ë…[•oÈé ~Q«M1ÕFr½™Rï…»9®…’!+`âhü#zó6õŒïÛé^mÀ?î÷f¯»ÜЫȘy!¦È¨Æ éÔ›y›LoÌ;MíñW…@ÒkÅÎsW±£>¤¾×φVWŠRÞ?‰Cb…9¬L‹ï‘…­§/åW/á&|÷õ6ªBÓ›n’ùˆÀnt¾³êi¬‡AÔ§80xA9víw#{¤fÔïlçüFõ@¤mÚd힣V®_žÀýäÒýËÄfÚ˜gEûóö°§ª¿›E+°©^ˆÚ“û“ªYicýmÆ©÷âQØÊ™àè1­å ¹Ô“¢ɺ{ØÎÄÓ†C‘¼ö¡îûþaÊó`A‘„B[5[&¤ 0ÛNӱɛÅ2bVfH³ß򾃯”©­¢ Ô4­bcG}aeEÖFñÂÈ´ª8!±ª³¤eé8R¼½•_ ðE È-¶¯Ëo1Vkh®q¯ë58?‘‘åÐ÷ÚgÉ.$ e„ X,¤ã©Oo”#6 #„jjP7¶/#æÙŸ{xcC1›7L…Ä´±Ppî7Jœ}®‘¨€ßÄY‡6/2­‡j2¡ ™6Ž2ÔGD†H~sÑÈHÉ<Ùݤ³‹[¨­DH!tfü쫜w«pãìXß è M÷ë¾NûKˆhµu?—¨ÌÊfrs­GXJ<±Ï`²y“RdCD°Bj= a,ë€ÒÇV¿Úì[D/”uò H%ƲJÄ-À³nj!ª¢öúj½|Éæ´g1g.°e<¡-Ó^ä ñçcúJº|{àÇÆz†‚>V×ëu+0V#ýCIÍë¶-•šŽÔŠFÚ¦“WŽJ´Qh]"ÚùÍz¬Ç¶?ÊáJ½3ïÓ{íîý½u÷f/t{åŸÙ¼î¾Îu©ÂpÅË"g¾„­ûê4+aÀò©iw÷zþÙì0Vz£¨‰$¤C–N½ìô‘èÄ›}ª£€²5—H ߢ×2†³ø9Ó2MV6¼?€Z'k0#2=öÇ[p[¯{$0IS° ßÖÚeªè TX"ûNdQÇ•jüßÓFÿýŽTÆÇf„h@õ¾zq¿û‰½wßâvO}—©BRiWkT.º¬ý¡YÍÓí&ÓŽÓiƒ8G·ÿDÏs¿#)õËj*ÐLŒõÜMåËÞ6ê&ׂÐÒœadÞYÎz`äk 1ûŒäëŸ]×<¯ë-,‹WÍÎCºƒš,`88‰$ú/—gdðÆ´¡*'G÷X?Í]lyxƒ¡ñ×Τ¹ƒí¾¿]÷IG!H°ÉÒÄ[ø¡ýdê•ñZyh¶â³:ß‹ïÐî¾úpSµ×Ÿ/v&70ª0Nd^ÓØ®»”ù¾ÛÜ%_DaÌÊ4ÏÿšoD׈;“³Œ¤šjÚymT'â[²y­ÇcÄã%Z¢æë£¨„nÖß3k·­rqj®'QvM"ñ–.?NZëªOe¢XÁGNú¾z7öÝL0rÍ_ã@‚Ð5à³úêì£ßÞ­™»Ì.RŠ]š çâ< )Á YþN4ƒ›"Ÿ 9âñn@>ÛßU/>B¬’WïD.$÷ÄOΕ²#Õ¨°¾µ¼£(y”rω¢.¤Óø—ú⼬Æ~¯}›B?Ÿ˜)ºH‘‹ÃxmD×ÁܘDºtî÷ÞE‚”¢Ë‹ËÂ/$Süð"æ s&¹G"´ ÛE‹÷ Š9’˜†ª„;T%÷w: /}—æÌøƒ'q,~\S+G2ÒЮu} ßÈ”‘@¥í¸tÓVä÷VºkD>Å)Ô¸îÕÛÕ ¼ÇCgûf„þ¡q¥¥}û¾ö 3ËKB!´ËH>ˆ;žAH0‘ƒrHõ8ÖÏÐc Ï#óHhÌ(ÈG³ߨúçÛ;ÑËá«Ô\4¼JTV¥³ù['”Q“öæ±aÏdJÛËÎâaË^’Ö¨D[҉؊r%zõñ\tTÇ­œ0Í¥VܽÖö°KûÅ&cwçyÅ^êqþ¼RÎ"ÑCxÇã·Ã¾~-ˇ¤NiÌ‘<Õå‘i õ¨Tßf-ûæµvdŠhöÚ¦obeOyƒXF,Ê jR†ßòÎV·Ù·Éó" mA¥é®¢ú­NBzYŒZÉUa(#ö\%Ê’Øï¶ªÎÀ`¶5éjñâYtÄGg¿¶ªÒÇz,1dÔ2d¸“…ñ,Ò³©²!ÿ²Ú"&‰Ññ‘+,Ñœh»ö¶ù.ï‰Í¾M÷_rC È2=w-îƒýz³ŸÞ­Dãtà˜Q†Àþ.ê ú;ê(òm~%»î¿GÈK‘£¬yÈËš»)Or7qwSšÀÅ‹Hä>"ŠPØOˆÇ!—a(²Q’BÈ50AðÖ©r7¦ÉEx,!xäyûîR FF `~ΚŸŸãó3î“_™´«ÙÜ„gâ |~É÷´»Û¿o×%kçbZ‹@si¬@ȼx[™Ì)$ø÷±ŸKÌc¡g[fIÃÿ”¿ÀœhcŠ¡~µסýQ.å€5¢ù>`¦ŒG嫨š±"¦ãn”ëƒ0:ÅïXó^wÄè墓“XèÙT WÀèïò¾(²‰Â]”ö6Ç“›*Q Á>5õƒ£‘-ÙOW^l”1oS³$/b"²½Ñ;`Ñá|¢’`±-,¶-«ÞL ½¶(¢X (ÖžOÌâx™%T‘8|ŒwÊ™èamAð°–Öž¹•?ý’ˆ¤m4pk[¸ÕUJ,Î`[·µMÅmmSq[ëçf|…‚·²·èkÊôK9Ó/)¦_RL~ÜÖh}ypÙ°­m$lk»8lká%LGmm¹¨­mqÔÖÒjÉFmm#Q[Û“£¶BÉ!otà,ÆÜ×Ú­¢M·¹Wmžu‹J*Pœ–Üe(ŒÛ¦âǶ ãÇ’åBÔµ|øØvYøØô‡'×Âá¢Ç¶‘è±æii˜à±>ÈDm¹²m*‚l®êÓ¡c[&tl†Ž æ~ûòN˜“½¹>WûßÇ¢–‡/³D6cAëã__"$EM@‡Y~¤"¸ž|[Ä—Qšx{DTB¾Iò},i”|ùfÉ÷ñ¤† […Ÿ]F‰q–´MD%žq°¢K Ã8øãB‚mèþ´\G!*ýR3r)1ýD.\ä,"ÕaDC§û'ð¦UÓqýJÓ™¥ê¸_Eµ’7¿/Ã\'½ý£4ùOa’Ó?ÇÑ Pá]òy£M¢1‡¹3`ýË4Ô䤇ºàÝ⋌©šy¯è\ïÆ¦¹º9ónæ•îûÛnʆEãtŽÂæ°’šE²öÍfö‡‡*bÒîg Â^pj.»ÚÃÓ8SÁjchGÜ{‚ô~]o2›¸™3e28kÞžËØNÔbfÌvà&Œ‡:˜ð3V =0PRw¾ŽšŠÖ!d¾ +27C%Ζ¿ Á˜¡S8B˜¯ªœ?ų4y‘S¤ü¸ÞÔ9SHƒ A*gæÖ쪕»°?½Bþüä2ìKöG©£ Çm–«0‹LgOZd™g±äb¤íèm„˜ç² žKOFÍÇžKi:x.sß1*q–üo˜±âÐ åc-ÚÖXãlÈTÎˆÌ V¶B#m†Š¬LãØºz¡ôÉŘvGÆ~(¢BBŸ ²x:Ø5À• }ýÚãjï²DíÃÒÞyhÐi‘ù¢J!2ŠÁTˆ»<'UIQ„ǧ1Ê—“´wy[¡Ê°ØôpÙ›¹åx‹h]>÷ÇQÕ„lÔþªFw×·} I(´0(‹òˆ]ÓCW6õÐÚ6øÆþ¿ÿý'tƒ#ªC›[…ík ‹NE×Èt“DcO¼ÆÄ™´ô¡äÐ?eÞžY•Éjy¿ü…úh°àPoîÛ¿g¹¾!iHŒ-•¨NPM຾Ídó¡1åÆåêÛXÌû®ºúrìgjǾƒER%£#¼Ô¦™vŒ¤×í<Öã3-¹ü>¢r«+QìwX£\Ow¼\O†UT||vxÄg{J²eŸ:Nè‘%ÇPüÁÍ!Mým#2ëä¶ÚP¥a\ºÚÖ¥#pû¬>«õmÖêõz|àˆ@ÙRI‘›TgÊ‹xèä¾¢±ïÈâc[ëïkŒ]ª"Ccá¡y†È¨`X-B{£·ÂŽnyÖPH®èžû±y±©¡üô¥1Ù9"O‡¨LNV-4©þŽ)`Þ÷ïÿXUjÙµûü±î“ñÎp¾¶ )Ò¦Þ¢^Ã^¯£—Ë|ÿþ¶Goõ?šî¡í¦Û?ú¼»•˜VösÕ‚òÆÜújÑß•ª*¢Ì|Ä0~ü‘²”Ý¨Ë ©=´Q—îe5ç¨måã¥À6RÛ*K?Örõá¤ö·öÏ•Îlð 2õÐún¡þhÇTWekÛ"Dz†ïÁA}ë¤û ¹xAÜ×W_ÎcÇ®dÁ#ÓÆQFvÚàïÇ®,ÿí3ƒ¡•ÿ2r: SöM¬yœ€&ó=dd”%ý%ÿó¿:„ÊÃɾ †9eÁÒÀ<š’y^‰©òóô:ÅFéÕÑ W:DŘlÑj‡E¿,ü% [þà¯|X˜]þÀéÖ¢%‹Ø`•Âêãä„”‚¥¨ƒGw1v,˜_ñˆ&;߯éÓI‹9TÙüT§ÃÖ#Sið]•o*˜T“:¡æqhYªÃƧÚüÄ'ª¹×é8l²$Nƒ)DªùÚÁ¶HôÅûrs^õ°-ÎL2ù¦MþvuL#RÕš›±î¦;·±¾2½t¿¶ R ×ÛDÅlÁš›%Svþ•‘®òù×’Tfà:aðÚÍ·‚‹±þØÍÅ™U8cDWâ,¹,éU9¾†˜Wæ0kqÒ•ðð?óÍ5_£lªvð݆uƒ¬¼øÇÿœ~ªú5u´åÒ¶<+ø‹Ž>‰›¡ÉØÀw>2UCÀf³®yª¦öÏFï¿°¾+^V_Ù/:û[~á´_Ø}3J‘ï‘ÿÏÑïÙïûQh0•FªA'‡ßèü¡zö·ë½x¹Ã–®”-^ªz™Êÿ…ýKe›C!ëÏ›}_?ä7iñJc›ä©.²8Ý'ñÕØĽ=ͦ9qWýC‹+%Vî­l"Þ„â¶ ˆcº K7–BW¦Tо]¹ãtšç»Ifÿ`Èb×L-|D‡ý4ÉMœE7þþCåU+™‡ž’®êäd~òE¨´E—ÎŒ­èíÆÖVÃ÷ßAØMŠÁi÷’â_]cðØîëÃz[ßÖû¶NddÊ$ÎÀ_VÚ¡;œ¤o€kY º;vj§,‰§ñõ›ÇôsÌÈ‘Ì8‰H•<ÔÃ@}Ÿéç>ZŒŒ€ùN+xˆm3×­h+‹Z5.í¨ ;}´,GHà{kðL&²ÛÅ89å0Ô`îbèÐò”³^ä2<’-'"0D‘‰ƒö½lû‹LtÎÛz¸…6eÊ€§Ñ6L*óô__œÝ¸–jõXïä–‡¢(¹?0!³29f2ÛÀ\Ö9R¨B‘‹$h°È?aý ¥‚Qd¬]ƒ¹Ûºëú¹ÎDµˆŠµé ›ŽëV(C€h9B/€â±JP1¬Sc“"í8EO@OÌÚqdÀ·µ9‚éØÖšl0"ƒc’½ñ#5–=7ßgo×Èë·Ký6°Òo‰sV²y_±k%¹Q‹¤*dR´ìú»[çrâ 2eþl6óŒx–JŽJ„긒2qdé3Öédï« “7¤ÇÚ‹ÌxZmÄŒÖGMŒÏÃÜ J}x™=¸·I:yx_« ¿üQò.9>ªƒ¿“c*±#·[Ø‹l7™'îkÕñ¯tjÜD͈~,³á‹µ“µ¢f« ïÖ@¬¬|4Éq+}'½sš ÔÚŽMê ö ø/(±ˆ•™O DË +(ÊoΖZ rX%z|äæ¶È£×–°Ãܘ95œZxq±2tc’£VÔ˜ä­[ˆTb-ZHYý¢Æ9Ñʪ˜uíõšÆÓIšæK(»+å$[˜ÄêH8%Ö¨T›Ñž´¢ÇÇžéÃ¥>ºÿŒ\…ìhË^ X™øÍ$G­<5kñòºkÑÏ>n¿¯¤¹x)e÷÷f NP~ í¶ýSÑIzRmJ%†ÇOOGQv j×̶ó^qǹÙVëg)pGïå(à®I6†}‘¶d“Il&äO)йô;ÝHZóDÆšI6k¡<ŒJ¢¬xc‰>rÚ×´J yÚ"L»dEÖk!ûØx»Ñ_¤|×=&¶^6³X@-º©þàCÅä8…41Ü<—Ës‰e='a}Ι¡„í¦0‰¶ýtŸçã•– ç‘9YŒöí“÷Ä£w#<ú¿}ÔN‡|ç´û´££½ïâho‘ƒËê};?ˆÄþû…MØatÚ Î!•õ¯sùu’Øâ¶Ðâ6jq³x³8Œ}®›¨œ5îÛÒÉÎ’è9Kb 3žDÙ0‰Q_èëÍ ¥äÀÁïüL¿_½qºª9àŽü¡~h’‡{h¼Ã=4ví• x§W }9d,XFûoÑ9†¤¦Î’ÖR% «avÃÚzÐØ«¥+Ê_ý3‚YŽ—ÂJáÈêŠSÿR%žÖ#±®Ãõÿf$]TºZDh¯¶±ʱˆj}6˰٬4Ë\ïŠêé<ÈIÕÌOCd&ã9áMɵ:b|ž›ñÞWˆŒY“ì^ ]îÊá7ŽèÇßÖ°1½$žÃ8Ë (^Jg&G-PBÄ:.ƒƒiìYw†â)žˆV#ù¹z»Î¿à†O'‰KñQêäþعL[þ/}0¹zÛ‹wl—' Å eûa"õЭÊT7Š,#¡jD⣕!EXh4UK1ÚÎnbŠÃZAÛÙÃZÑ»Ùsµ2Öí­œdN22Cã2È­›µîÕ#,}íKuµ!cÌúzyqÁÄz²Áò$ñ%Ên ½€TÇÈáR9Ç,+0a=ì];6Oé@N)=Á¡ Œõñ‹‰º(}!œxQÿRmð÷…Àß³ÀߣÀÿR{Nä¼ÍI´t´0I…„Ϭ٠½k!ôã®îÚ?smq5Áù˜§aMÝaÈã Á€ô3?µÛóNEÍ‹tlþ©…pŸâÆ^­®.Êì?µóæ>ã‹9¦¥,6—¬Ð´©jï†N(AË,C U‡_ˆ˜6;×I{síšk¼_ÈŽaü¿ÿýjµ`A´,Üá¦ç)µ‹´ ™¤·}u2 ÂT]ýËdŒ}??îdĸã€?€ýV4µ×É×9•h{:Ñ9(‡È)²)[ߦÿ…ˆàcsB¼9_fæ^$áU·m¾£ƒv»~»¾ê±ÕœnˆG´æŒ¼\Õ®¸¯»š—G ÑEŸÉÊäÍúJ_¼ÕJ^|¹>B(£T¶‡ ㆠÒZvÒ-faf+ H2ø4η¦Û9X±V¤Vü°¡²¾£¸Á¹ï”·0«°ö»úv³íç[ë?-AÓ*† S|jæ3¦yñù«sÕ†>"¦°¸@M7•@P%EÐy1ë`^&.ÖÌþØ•à;åHîDÂ!òBsÿžÇ¦äü±Žš”9بL-M‡;NE­ˆôXýЬÀXæcdÔœ}Ìà‡ê,Ó¨ÜÏlǾxûoc1mHâüˆ“ õÍ )Hê_žF”Íu¹ŠôéVuI³¾òre,¯RIÓ¥RT«þn–<ÌÒ[Õ9~Oç¬üCfÚ 9h[y:¹›)&säk1\P„t¢"HyûјöäxªÉ^ŠHÔ ÊO‚é¡´·ª«ÀCmî›ÍŒ/uÚÍK)_¬ ƒHÓÔ ®Œú–µÍ}õñxSOóJüx9µÐ±ø ˆœãV‚’:Ök,Ó\CÝ.†Ceâ„RUrjÌêFèyÖíØ>6¥XÌÐÉì¬O°n÷Ô‘»T.ó.„BZ† rK¤N}QŽñGÚ ¡˜$…”Ñ’ s¨Mß’vÁ€¬W³@ÐziˆKzMvLËñš•Ú1BÉõyhFÚ ™ºz˜îûâï§g°Œ¢äò¯´vÊÀAˆÅ´ƒ£’r X£LBÑCžÄ y{Ü/§ö ¦°4Émx«•VGª;3,Ó2|vˆ0sýaè0¢Z‚›}zþ-W†cCª’oÎ7Õð<}’ue†¯¨öR^mfÉÇ0,¯¾ì§PW›ÿ „åFCiÿ›[(/ã|þôõìÆD‹tÁuñãÜOÇ!3NŸû8N:sšh=öõvSOs~B+4Så¯_pæ–r••Ì0ߺ…_%äÕ@–ÙÃnv…_¾˜ÜÃD‚(›hkO¾Û<«U‹ÕÄ|HôñÚ»ItÝöEpTë“éÜ8–¼šîÅ3ûJug_éõóªR¢(MIÄ´Ž^J@ä\µèðèÏùÕ»•Ž:.Ý5¸¯‹°|µOeóC(ýÒÿp&çŽj]Þ&ìÑ#-€J…8&ã•ÞŠù²ú£o»—àŠ×Œ.Æ©†fÒGj Ñ:3ý1µÝŽáÊ:Ø‹H}äf€HŸ{Ý3¸`<ÊÛÒÛ6|™z2+´6Mí®«T®èçCßy-n»2û]ÌzÇØ6acÕ:£—Æ#¬.RÏ÷YÖщ³ûГ<:"‰¾…”ê•RåÀÆlû>S*…x;z-{†Óìšýf½:ÞÝf(Á»Û <ÏÝfVs=Î/a«Ó ÇŠ.;˜e©ÞߨÐA̵ tʯ)_ÄG¤¢èK ¶ëzªØµÝIç Ù-#)½‡˜ žƒ÷\éòOj¸—x[0dÍ(=†6žVõÒ®ÎWW•ÎÍ|æJ| FÅ>ñ+H®¯ÞeI¦ÍÔQ ¡OYÑKÕ‹ïÏ—¾e]û¨ÞÃÁŠêïýÚvÜCš¢)DNê1àIDb¾xúPfë¢{–J}•ÉÜ"¿}?-1Ó…f#&£÷„°ÊX<ôsQ›é<›cÆÄÈÔÒUDÈD~U/f Üº¦Lf-Ã+Ÿ²Šê=ÈØTyÁèù")âšF%³SŒ’EÉ@°æõ(lé£÷Q"ú¦Çmñ¾O 1 IjÁ³h‹»|­Â°zR{s>)ÉØÀv°- ­mû§nnj6ÙŠjg³?¦P\¶ ž—‚ y>‰\s|:¿þÍmÈl “@¤Úäl“˜Ói8Ä®™3¶Â—*ꄇg9tHÔâbj ªÜlqî AÑà£s4ùx©(Œ¿‘:ŠE±7’@¿”ý’*³‘„ÉÆÕUaQL$Gi ¨Q?#‹XÆá¦í¾Œ ##T!Ž“âcÈQ¼Ñ³8s_ðº<6õæ¾^ƒ‡«gýº” öÍB޹·˜S óÇÈ[,|cɉ)‚¨©cZñÁàØ=²SõBæŽÓK½ßP$5óëªÞ¿þ‰âæ@"„Xü!uÓäš® ·¿™ƒ€`Ü­2éïP† äF‚Ø <îã{Ho:¸U S4°Ã·/ïr†ÀMÅæP2iÑZã4—Ùÿì½`G‘luõm-žQµ²¾ÔÛ¶·[¦ ê0Ü6y5¼Òa¢<²èéÕª‘nÒÌ”œt„Û|â-;ÏàRœ:슈»ÎaDz˜éxµ3륬 Ý!¯§çns?ö]ÌjøÄóŸEìæúZmô´,­&ƒGLjäNIíY±ªÇ±~®Äk澕» Ï0¿ÛQ{)ªgßÿôš? (TzHËœäòuÞwÛãf® ŸÙ>_»˜®ñºç°§ãP„<‡îäíZðnUX¦öʬSKܤÇm;‹ot Õú@:7 %4¯@”p›ïˬ.À™ïYp|[³Ý}ië¸,äæd®]vö˜ztÁ|±ÅM`lìy08ŒÈ\Õ»}=ÝoDS¨èéÔ>¬ÍO]ÛÕꢒ"†Gí×,a!JCïúL0h…¹ÝswÙ}Ú[§óîϨØcRʘ <@v @LÌ „ûÔüP¾p%uì» ¦Õ ûI©"Ÿ'JQê… Vš¹ŒêÈÊë^9.ѳ¬J‘Õº enï £ó¨‚=7 µ¶3^Œzhêךx‚sóMŒNMÇç»a1¹ÏêÉFŒY3&õ´4ÌÒ›8-!çaw˜—Ýœl –ju,—Àߘvf©øgKx°T“º!ìÜUìY·‡’A×§E„¤H Q‰wvPfqU©n~È;]$†Ël͈Ui8 n¦Ý†—t%|F¢aÁÃöJ¯Ï«nÆþû³¥Î´tþÐ÷û¼HΠU™°ZÕ ÞÉûþ†BâóTØL%JLæ%/°RÄ[ÌfΦžKhB¹‡„©çÄÌ öæÄÉÊ¡<É*Òw“~ª@f[[y¡/GFŠd4ÛlLqVhÑP–$3¡põAô=,Ëe›žŠZ5M€w 8ß"–Þ(ç?rÐBŽú}ºüzþùÓ»ª‘ f·þËë-þ6TQ4×xÑêÍVPÙ!]sÌ® ÷EåèÖ…ì¼¼H•+Àµ×IlLÆÅo7°m%ã%'®¶æý|Ï©ã _l5’ m‘Ú ‡F_¸U38h¹rÇ_¨ŒË?æwÃÄå Ï#Ú zô—FÙ#ì¦ýÚ.*ab øTX‚¹ ÝÎ_Ș<­ò…ùÉ}%lç%xíœfkg —Q-¹–L–íÿgíÝ–Ç‘4áûz šÍØZÖZ*r»sfÌþ1›]‹ŠÌ¬Ê™ŒÈèTjæ&~J¢"Ø!‘,RR„êj_c_oŸd᎓p˜Ue]]!øøqp¸Óçi‘¡“Ü­îò± pŸ ¸gAõ¦ ôº[˨4ˆ˜x>sš,Û`^sñ|Néa¦°F, ¢{ª®ÚÃØ>ÃcYJ¡~XŒFÑNc7J'ÌEú¹~£8Í}šŽbô†t[)Ù$Ï®L21㸮4Õ§¦èsÅû< BšR‹ß„Œó¸XFå)Ù‰ÂTØa挚é“+ùc^úÂǬKã"ÜìªÔ#ÈÜCÉÒœvwëf<<6e_崇㴫D²<Öi ³;?’Æ´u+cil",<õÒ9 M&÷êŒûÎúŒX{ùÜÔÄ‚±y19¸Û˜0áÉ&ˆ¡ur9Ç£¬³«íf±¨,HÏû>ÉÂʵ^‘B#û,¯—è¶àû¶{¾“æçùýõX© Äʃ½ÚWG¹¹b rò¤Á@¬Î»dçpJ;•xŸæ÷ݶ_íz1æ¿ÿ¸¬.é1æÿ” ”ƒ¦iˆx&k0Î/¤Â` *M’¹º¹¼~˳…Ç©mžrL<a¡%I°d§OÊš"„D˜¤;ôl;ìŸ yø@ˆ’®åtõp I0XƒJ“Tn.o?аÉ_“a”¹úS¯12毿¤o2ØI¾j:L?-2©çRøT¢ÏdO…,$aaeIËO_y‡çÒW6@V–d!`<‹L|C4ÛØ"‰± ÃwXûõ.yw–È•&Hñ®T@çr,«aÏÛ(¥Á¦›Y:ö1lS)OÊ:àÅxì:XŒ½}>‰á3U7—£ÜÃQ>f1¡ªÍ©óæªSãïõ“•ž£ôS4Ö n$F[Ãm„‡´æ_é3/ŸÐþ¥¶è!yn1xgƒcʇ—ùþ>U2*­) sÛ©/ØúóAJ™I¦[Ÿ°œžÖ}u³ühlr ÃpN–„ÇÃp$®º¡˜|òA–B؃,ðV‰^yæC.±ÔÏ6cÉ`*rùþe7¤ )WÕôÐ?e4ˆU‰2JU; »ú<åUáÈUËYu2~Õ2ÒÌTiþÖÛÄÝr›È­6õLÉ6Qp„s¸Ó4$'>H)1ÉΘ{DÃÌåmÕt§VôoÙõ,çózw"g¶‡+ ÀÙš‚%ÚÚÙbš5,£MîXÎ-A+ÆHÙø$©¬we610%DÅ'°™>Ãà|yõwȬÕ?瀧ÛÕ(½KCìãJðã à©Ìß PDqá­ õ.þ*>•1s?ÜÕÛ, Š¢$0Ýi€Ÿ~¾…À#81ÛÖûvwNö(¡@9§9P›ÓÓ5íýê +½š@À¥všcðiøTNtË$Å€_„ŒßG æ”ϱIå33«¬ÇU{ëñ¬ç—%}4? xŽÌ#ŸÙ‰$Ñ—›>BÍiè Ì#y(!B„ÈæQ}Øu„}Æ·_oo*åó¯ŸíNš„}ýõÃåÍCçÔµE\,Î'"$ÞY4 ò@­Ö™òN=ć}¬^|½yÿ£G';»~æ§×ÏÎüúgÆë˜ÓþºG_oñTJ8Y¥ŒªUtH—PIòÎQíWb-ç K8 Õ¯EÁ½$<ÃQ«-ò>xîÛìÈpß2½rûylï!Js]ÝâS¸=îäEÑ/{<8jF|^üüþÓpoþ`{0LLjc}WB.šËåËàœÐ™nå7œt-öàÁü_€[¯ü©Ã`ÃÛ$ªãñ˜Æìç‡`7HuÞŸ_–ŸnÃ{|ɾÔÞï‡òI‹&Œ\¹ÃíýÏ×·1“HŽS V¨µ`*ˆÅM]ßç,[c`¿´8dc$%´àu·»ë³£[€¤„ŒL»˜ªV}¨´ƒŠ]ûØ`ÊËê±]?NàÖOW⪴¦cÀ«´Ã$ú ÛM†‡óÔ­:z½oŸ3[ý4lËé4Ç å±u޼«>.oß‘>Íwc¡s^°ôë{¹>¼¦íãÌûÛÓ?áÓüK¼ùJ¯¤G°„Û¬KéálËçõz¯×I^¥wÓ §èG,0O=„QB³nªç[*sÜÃP"ÜmðàëoŸHþJx£t¾ïR8dÏ^¹«` Ž(×ç­`î…ˆ‹PoJN›7¶@”ŽÏéÕ#”T࢈‡zU¥®‰hmUº¯ù¹²S} ¢Ú ÙÙÄú,†‚nVw‰ÉfÉÐÎèEÃ8‚"ƒ7›¹PÍà< Þåj“øõÓ;yãF}Fäuz_û©wõ¹påÇ¢)GîžÁ>øæÃåö§ú\]_^%çÝC»/£90a戆º}]8k„2 Xpº3=D‘`û)ææj«¥„@€öÚÁʳx)w ŸÌvOœi~pæ'´sœgÜ4ÏÇ)ÒaúQ$¶`¶'‡PJÇ Ý©#¸ëÖ‚èŒgl`¦›#à ˆn™®,…ðOßW‡¯®ßí v\V¡‹£*•ÄÌÝë #¼a_ ½ª¸r·2ŸÉ}?Æy?Ful÷^®"ª¡† B¯ÞÂgª²ˆÎU¦ý1GÁB‘è8ßZ^)ÕXàà‘ÁQÝÔ±ãµ{»kÒ¤>Å‹˜:5pVÛWÉ!±½ €¾óô´C’Ê·Âu©†‘›q”q¡Ø J9RnÏ9 %GV>ÐWS¡fLM}>0/8tÉ7ÇÀ>-¹ ñþα9Œ¢›Q¡HŸÊB˜ÌiÍyËှNÏsŽR)ålñ/šô‹WÆgPèÜ(‚¥ˆJXxX‡ñfä31‚ˆØT0W ¡% ˆèô$gÔN‡&ß7|$ead. ç úk;ŽõN»ôzÛmä ìÅÍ×·?Æiœ’³h–ž91—g¸$iqGåûf¿Ò'æ†_Ÿ"{wpìé°„»åC»=@\ùu°¥n·píõ¿ü³<Þwë:ÙQsy‡ ©}™šê©Y=ô½Œg¦¼ \iduÈ}3MÆÄTºûˆÅV¢X/œIÿP§+~"Aß:Ž ¥'ñzǾò£Y {Ø)Í,uÒf’I´˜×°¥Š¾£l?[ñœŽŽñY¥7ýM³:îêêÇE ñ¤0kƒÁ#­N"“Ö 豂 ,<×/¶€¬êX}Mù{š!Êj£w3ßàí9âQžjֆ׎îd``5ª`zÌo…øØïÛѪªCG£àe”GmËå1¼x”w•á/ÿí/~¼¶ †\Ѿ“W´“ÓñtŸšƒaˆ‘‹átëÞ`×¹sÚ-–˧àŠ“h½alO`眿$•ËãSôP A…л¨Î–)縂k©íPÆÍC¬´œãƒ²êýíÄñÈZ.G >ê“Á¸8›c~YM2¬âtèéµuÔ;ÍÀÆ_eãì4³½‚˜ÅŠ®”8µ!Oþr«g‰í¡Ù;ÞZƒOߺEE ŸTC‹¹wvéÇVÓ»æ+Ü’{â+ÌRmºõ®ŸÀH¯”)ŸÃ%êaâ<áöþ÷VgbXÂ×Ü4ë÷­˜l*£Ç™…ºÔ¡YcôÕf¸nõ·ª8sY*_©ï¨NIEœYl„Ýòhn׳[=’ť郾»¥ßµ+‘x¥Ž¾¢ÍMôͪAš;׸,!Û µ¾ùŽFŽdò©ú°ïoè«þmª}ûfV ÷M¦û&ÙÊ„M¢ûîú{°¨“;?j ¥G–¶ta.ý\¦²1Ñ{d¡2èŠ*TúþžUñ?Tåy•åž\¼‰ç¨»Ê$¶ÒËã’PeŸUÝõÄ*4ÍvÏ CÚž¿Ü¾åØ$q‚=pÌ\>3‰åq)¨ïêßËËU¹1M~í a®&l{Â-/y²‘oG«éxÒèòxB? ççÌ.¢µÊDß î%õ]uÝìĪ®®>Þüç¯QãC,$=‰ßqéÝaç³ÉÜS Qÿž’Û™«JXF¾7x ¢?yÙ}Æ3ÉÜ ð1„¹A@ú„¹D°“G€·Ž€l'4,ªN›fvËBËî–ðšeÙ=‡áë _'–ÚxÏa—5óf`”Ó,3ï9ÄJã“ÅÑ”æ÷G(›Ë¹„)Ë/o¤>ƒÊ¾Î,†PTgh¼ߊaìýºßÍe±«ïïÚa—eââ(%q‹ÛÕ |d Š îÇïavj‡"f§vˆ0;µÁ0zýáòçêëû¹ß׌ñ·!D<ãoigýlØ®Ë_:Lx9bJpÛ~+½í®2WqÑ~ªZYj.Ž²Ò ƒþRÐôôêM;á¦ÙæŽVÃCøDCŸjšNèH¨÷AJ¿I¦d‚Œâ¡¼ÕpéŽÞÕ´¹ï3Š]”Õ¬ÒŽ¡}ä@_Ÿ–o…›¿ß°øC<§!£—[õ®Y|kw; IÉC›tàöæßÑs#à6“šPŠeÛBeZ`©j’{áÔB;ÝTî53ÕàѶž\]ñîÀõ9Þk|%V`h,-¶—*‚žBbÓXBhy"ÓèÐ:¯Ãe{ÓûOÊÕî‹«å§"›œ„q‘.!%ãI½i·Û¶Yü"^´=\3`&½ª˜áq=ýå¯\ KEŠx&·ÿqµü!¬ÇõC{jÂþ¢ŽÒž_£`ˆódôQ•ëöÕäÆƒ£B"Öã¡¥~ŸµLä!@piÔ&ÊÎ%w’6Mw«±ÝÜçÞ*lé¹bß:¤:-Q\IñÄÒØ¬ )`¨~³òNîzÔ.¥hw±ª§†o†ŒEorðlzÝ¡[ý§Bµ9Õ̪ÕÖ5›ú,|´Î™/PðéQßœ[ù±©ôÞl«ÒIáÏwë¤qº‹Ð*0M>»Û¥ˆÂžëxz¿´«gûâãí¯dL7èv¡`ÛƒE*Z®Ìy¨J”ÝùÐEdw?8 G#¹ biïO2o·ûªåòËiÊ]ŠuŠÅd/šÍK1ô`⡟pª`½kÁmF¾ùy¨Qéµ79ÜàjÓÊÕSpôâ±íŽœšý°ËL’9,ƒ¬.7›WŸ0 juõñm¥0•ÁÈGDh÷Ç ¥»ÝÕ§¾`Ç”EzTV¶Ë,sL.•¾†ØE£ Hˆ‘߃Á8¼d¬†4c´ËTê P4‹êÊR&/Oâ÷}áÆûN&¤ª‹0LàTç-Ò/ìÀz¡Ëôˆ˜{‹p㣠8BmÌÚá&Iz‚œÛ¬™˜=šÉnÍ@»|Á}kÝœ˜#Tò\h@绕™%VD‰'Ã7Ê-£ì·c¨Óª(Ä(ÂD^Íß@ä(QÎÜ›L|˜Qf¼Bâ/¾qk'½@e´RŒU‰©Þp¤"fj‹(>þLÍú'%Ëqkx¸RtÒRmúPò"zúÆcn¢Ïa‰Ÿ*¦i~ͳ˜¹É”VÀ¥‰÷=²+"PB·7:b¸jPÃÅ{}e+ùl±À‚aƒAú´f zHc®•™âŠº[€ôI%ö‚t4€`'H_ÏKo8/(âà}Zùô\kqû]ϯˆ Nj٠ùõÙ¨á¨ßH$nøåAèzœà?ÕW&Ü››|½Çõ¡CÚŸ–±Ú‹Ù¦üE4KÖù¸êrƒ¿ƒ±J0Õ×¢RÁAWÎÔCÍEkêñøÎ„ÊìŒÂe–¾SÔÊwò-|gðA(™‚±#À¹dÈ'jšúuk{Ý逿òá0’qÿÂ9a\¿0J¿°uÎïÒø0·Æfw¦°Â£¿US2 ðï?yñ½Á¨í6¢9ÔûÏ(+pâ{ê]wn ÕRûx£„2QÚ¸m4B;tC³õÓóݦÙÖÇ]æE `Z N'¡Þíú§I=_1‰úo^VObBÓÈ«¦j¸¯×—«L^—U,ZK÷ôÇBvS ƒ”¥OŠ~>›ªNè4é×_à éƒÀýdV» G÷ÔŠÅb½Ý¶]Ñ\7×ìB€d%Ë-¬®õkŒž÷Š)@¸¯>ýò5FoW¯š]~ÈÍeb©Xá5ÍÖV˘ÒìgòÎ1Î4®d”lÜ¡-mQéÒ²ô=)Ûf—·ï}"™“yä¨7Žªƒ–p¼Uƒ Öút»¬184eäÈçv(•yŠ0,åeÅ7•Öšê-sn±§2PRå7ØùÖ²ù§8Û<¾M´1εXÉÀ%5ø– ¤‘j©æY´eWƒ¢HØw·t>Ê<‚œÛ º˜J3ek2¿ìù‡²K5zá è–Ò›§Ù4¨¿  å•qаá(?ùÀÓ”²6  ”„Îm‘׿”-­ˆÏ„o Ô”mŒ‚Å8hç.?GÇ3æh%ys¸€ŒŽÆëóú'ðgc]õÛ¦šýXd^•Î0u@sûøËYʦêã³#±„{Çg•izH;4àp)¡ÖÊÄ îà²2º0h;MâÁ'±OzqFíÞõc|§ Ç)'*ÄØç»z×$÷Ùx¤VêÈd¬Lyýñe%ÔwýÓ® ½t¥¸;A³ é‘GTÝ‚åÍİ*áÃ2¡†ÀVÌ©¼?þÔv›þ‰*ÝßíÚ}›y±W·—ו”QU›´’_¼cíEʱ‹–ÙÁÕõ;M÷¥5˜tm»'d¬ÈíåÍBÛÃÔëuìÀ߆ò€~Rž6%,Ì#!È‚™ÂË‹´L\ž~« ©÷\Æ`…· »¸z­Æ—*©ßïÛCž…9LP ©È?u4 0k­Öu·iѯRŠÄ&¹Èð1TýF-2T\œºÚœ»z/>C:X°kÆn‹‚EH‘Nô£ˆŽCøüÍåÏX{ñ¥uËä¿Kí>sˆQR€ÔŸÛ~<½¾ÚGo<ÒQî¸x[_5°m¹@2Áºl_®n=B»äö½¡$vjû¾Îh´†ëè¸Ö–•xeP9ûz³Þæ;ž‹stK êÇ‹hßFç)xú÷g8wÛ#¥,¬Ðİ–1H1Žq}›C·ÔÍ„]>·¢À±Þ×ôtTÔI|пçîïY§(<Òá®e^"ú§æF&xVÀ¶cWòÁg"PÊÅ ÝE¥Ý\~Æ–c´=Cèk6ϯPoö^'£:ÉíN©ñ|/^I'xz«@­é+¤ø|†<—ã!M9šgÑ;¡Úãª=Œõx®>Þ:ž¢o¦«¾h.î/ªé¡"C‹øäüè‘ò½sàºåà}TÌ«#¾ì0ÀòŸ•ߎÍxÆ™ÿ²„XªŸHå©ËÑøªÌÃC}ІÎSŽãðuw^ïI=³oÕÍÏï¾Å¾>â ¡x²d]%ª$HRÿ]ó¯éTðŸØoü¤¾ñWæqÈÇÎ'Þ¯›¹W84ðx‡†‹ ”Ü¡UÉ¡ÓÖ]üÛoÊ+>84ËÎ $9ndôOßõ1.OíHÇáéÛ^³+€_ok1ŸÓC1<9ƒèxMzMBš$y~ö¤­ŒÒ ˆÖõƒIèšpë}Óæ¢¤Jµ¦Ë<“{uÆM uï\QBNª¾î©ŠY¹®|÷q‘‡s"ù[[²AáÏ7_”äÐ÷;¢N,“ê¬\«)ʯü5ìêóªïÕîLöÅh•*ÛŠUÑ"ÁÙé¿jm6žH3Á©t¢h+VEC;ÈmŒ3ÆÕT1JÄŸ°Gó‚³ÂʸM†ÖTÃùðÕA Lñ*‰"ÀWÞ¯½;T6ý>ÃÆ",!‘fòÕ±“M{«$¸õBÕ$¿¸ž/³¡uC¿ÞÊêìÚ¾{›ã6s ?<ÞÿsJ…+"ÁQâîLA¯[ö»zkÓ¿ü¥z.¾¤/F\8cÄvW9ºÒ±Ð²"‡Z–Heò9 ’Þ|!rÃ@m¸pN'—{ñ¶\¾„Ð.?-ß¼¬ø°_P}é^MäF_wrùnl¡§úŸÿVýÿƒªïé.­ˆ Œ*H£ïçÕòÛâ–xrVlu%ë¿£Þ9[éWÞë† ‹k¶^õÆúUñ³î"ŒRãcÝÓ(&ÊwN…³çƒ+Ï“tZè¯Ï<‚rx@z ÄúWòruC20wN!CgÜ:Ž þ íîd>ØŽ®ÃxìÓÊ(ÄhÃÄìÓ~¥ö0Eïh>íÒ“NaôBZ±Zû:»¬ÎŽÑÙ•tlpïªËzÔ@V)õ©QÔÄ\WRiéEÎça¢Åz·is‰_ˆ “v[D¤ÝFx´Ûy4Ì”#³[Ò!@Ÿˆ2ï½æ²ëû®…²¤úñ9ãsІL‹~T~†`ལ7Üv»Œ"e•©tTø^þö‚ú£šú”á.«ty4yó1‹»ËÃßvi‡ÜNs!zh¢šüVÊ—û`rk/:®•wÜg lžeœ,0 %DiVp]¨“v¶ŠVè8œ”'F û2R°™¦5½¬´{9ŒE‡=icÝlŽc½«|´3ÄškS–+ø‚ŸÊÈRhÀ…òøz¬á*´ã©ÄP%'±dR3†—öÆò;×}]FÐÁ ¥4ý &ì{µŒ) h£xÌ–Õ„ &°Êyž~Ô¤ÒvÕ«±]?Ne·<Ó9[x¨Ô@ñ?!Þ˜Ó¼1ù"t 9ƈÍíôLŒ" ÓW#"P¦ ]·ÃÐvÊùK]ݼ¿Š(W^)jô„[6Å-ÍÉP ±ÄÿŽ|Êø—˜À 2MvÁ ©hwc˜<ïûç»Ç¤eXˆ2šu:Y‘éëmköÇÿñõúGÖLìVæ­¾¾eÖMªÜ<#† 2q/Ú_Y¼â@o•eê¶‹ciéR‹Dz2Ãê ßvå!-2}:•Ųä@커º±ˆ£«Î­ì(¸™Ÿ.‚<Ö»»“X–cØ«â‘<s¥c uðˆû?†ª„WÎp•O)z!™Ácé@dè'ð ã‘óca¨ÈUsxjšNÌZÎâÙpŒÏúÓXÔ°!Ügk‰ž ås{BáaUîqõ¬ÐDª?P ¥ìöó ¦cƒWZñ*ÊN#àªX édN?uö ¤"杖º•›äð`º³DKË»È;÷)^ ¸`’Þš¼³5#ý& òäEp˜n@Œ&š‚†EWÝqu‡'2ÉÇÍà+*‘ Øãêæ¸ªT ù¨lDùn€>Ñ'»­T¥rsv!ƒnÔgŠÇaH°Q€V Iö ÈߤȱÙÖw›tCº]°JõNÊÞíêéárësõ¦ÅJ¨¯ùRú_öÕfÍ™C˜£<0èبð„•Ïáá>OàážÓþàDL"o>, yåS =íá!D¹ ŒêÙa†ú¡ ò[ùÁÓ8ŠÞºöbû–“€+Ž%DÎ#'äp¿–þPZöžæ~eìbÜ|fjúÿ]Lò ç°!‹‡Ï «²×v{mWs_ÛŸvõ¦ 8”àµ;žÈñü·Ù@Ýÿ¿¯¼¤G¬"=bôK!×+ }ÓÃê(Z0=„x ÍE'#•%ø ¬º^Y-ãæà¡4ÊQÚ§ýòz«°×^yA§ b§>Ãô¯¯LUŒGÓâúÛ±¹òÏöÄLE-†’\á€ë¦Nî€É fIB£M—k)‹°LDe¡ô]ØQn–>„¦@­t´+%AÂÛ”ÉM^}ŒUo'§?‹ )\Èõœ½yJ—òÄÀUÜî²½“bˆâÖìãÆÒwº2á¿Ýꌼˆƒ‹õ¸h)rú2Àûú²‚ožü‹¸v×À¶ã ;,[ CЃYnZ€´°ïû:uÌGm>Êiˆ²JiœSs'ÂÄ8}¬†Ñ ¢¤“À•ù ±, Ñï!&@LiÍèuUòc·º\8nïÅP Pã>«ÝÅ‘ªk *¯û®ó XÔa¾‹€Pî:0‡s Ù+ÁóÉ|8š“0P²Ó†<‹^—è2%¯Ì<ªÌ›åÑý…f ÜåGßÁ’f¿H“Ò¶¢¹½Y2AÛœ² Ÿ8[BQmi%^Ù¤£¾Týô%qá!^ Ë}ý»xm.ÜD¸7–ï¥,ÒV‘Ȉ1 ÖÒnÍynß!_±cÏ(Ør`œz<òÐy'–%Ü•4 %œˆÐo³ÊWqÒüæAë¾”r P*¥E ô¸¥Œ• )w³m§‡;µ”TÀ!µ&Gæ˜D|<·‹ŸtàÎyFmñIæ„è0C*c×Ã}JÆŽçO`”í˜ Îåc»ã£óP ?Më±r³š(ÚPóåtp›{1ãS–N@’åæé/ËkbãBå } Øil6m¦%Û [Ùr_ë±í“Jц$/«iWŸtÜ‘ãô@uMíöPòøB ÑNDá‚[Ž'ŸJ›¾˜~ Yèç4î†D8ÄëòKG´Þk–èØæµHt|SÉôGÕAh혦†8ù7Ü ±&¤¸½Ž—´×b."´pÛ‚ÍúÁ‘ݶÆ@i‹±Ù6c#2ÂÖÚ=fhžð àNÔš¤.•+¢"iþòöë+ééºÓ ½ëëh|€UZÝuɸa!Jk1éìi‡xÕ/õ¡šúíá |á)ðäè—ï{zó6„YZàLp”æ5owÆ;rˆìBr÷8…ÃÅôG“© Ö!ÉÙ*‹Ôô™ÃÆ0#jKIJ­­“«+V\DBp&&žÇv̦~ÁƒÁáû¡‘­EžUþ×0t'Ôú ¥Ü$ÇÎàaXGPu%PDén·ªÇ»xÛú3É$•GÀš„/F27Àã,´£T ¬õ0TGáxhþùu~dgpš‘8îI'-ûíNw‰ËoKØÆzè7!‡¦Þò{5q¸ËŠôY©KñŸŸ)?âUWÌazò,îtÙyz #†„x £:Hž£>H”¹McBŠºl´j7¦¨¼û¨œÑe&º<”('BsÕ™š³*‹Mí7eÕpK6KÖA'éæ\´óHŸžuÓnô+ÇÌSÉØ¤,í‹›ŒÁ{Œ(¢¨¹´ª±²x$KÍm,­=ÕV°ŠNê&­’ì­¥Z]èPéôöØAUõ¿ecÝMÛf”»=vý:ÁFø®Iž©úÅC§ÊE»˜‹À÷ùVzxW22l¶°™›ö‴*ì:$SºpßJöbeŒ– ïìLÍ2$ P„ÖŽir" »Õœ7µÕªb(Ó±ûNMÞìP b‡MUÁ¯Äÿtã îIâÔt›û±Ý$¹8Í@&’`û ´íˆ«:‘þ3€hl{‘s:f7B”Ñ«Ó$K;ŒÉ×´kÓ»0 ÌÑ…·£ImRÀ;e—yåvÕ˜Uîâ¨v%aÔkIJÿ$Þ„ôQ,‡£ú•$lk-P›¾â²“—(Ø¡9wQ<èa a‘q ï´6ãÞQ´9硉 '0s%?o>H+×ÉZ™|¡à Kr©îhn L8œÕß®½ø^à¢S Ô¸ÆÀÁ“Ù€Iž£ÝYG[œ%‹v ºl™¨F*@†Þ¢««C==:z ²SFÅXM˜jTÉ_`á˜0bÔÊQíx¤ïë!yÒDåF›:I’³žÉ™öKѤ ·w*4‰òâ™b`¥>;ï¦øÊlÞµ°:W±P( 9¬“ˆ–i1¸!Ô×>:õ+±‚¿þúþ?ÔKñÇee¦ßúºY#å²–Q ßp&–©ñ>@Éjw=è7WŸ;–ÐÍg4„Pž²¾Ž‚|“*[àžijI6'ïZÊôÐ$êQ¹R)Ž«m³‹-fTx«€ô ]: •«âw:ÝÚX®áXvG®<ÞçÊ·¢B$ÆöXÿç¿UùëÅ_‰Ê㘉\+)²>ðפϭqh'ëZ­ç¢s§u>ß ÇÛç\šÕǼb‚ñá×9çÐgÌz˜KÌ3é‰é ¼ô¬ýÅe'Š’I^`µÛ,%wx$åãFÜQíóžÄ§ï<fòçÇ’åíþ:ƒ¦Ü¨˜ÒÃw~ñW¨ƒ°ôŸi*A•ýzÏ×iž¯#<_[ŠSУפ×¶cFþ pqC)qNGDR%ÒÆæ¾ö¼oÒôYî6Cž¢9üD²ÓrÞ܆¡¾³ù2î“%fœ(+bà,ùûÚ³cx­¢‰(Z‘ åÚ;šv/Ï´)i“n_°Z“ÌÅe•×÷Ü{7×tRÙõOùûs!J+7é46æéOú F2wè`v WL7ý!®´_ÛÉN ”­Ü²ÝÃaÞ ½Ô U/–7Ë+1Åšœ8Pì¡’.3}Œ! S50˜“MJ¦ÐÂÒ*–¾òs† L©'oJ‰\‹‰©×MÒÒÊEh˜ŸõGšï1¾È+oqÐñ¸ÏÇ告ƒ+#kRw›'óeýêê²Zª¤k=z™¾«Ÿ¦»fWO‡6g,™É¢¹ñ ÇÉ«Œ°ElZ–*ö•·6yZ¿MÙk.>F1Ò©´¬nÕ?ÿ¶TîH•™ÓL1Sšé;ÍhnúǶ®–Ÿ*:ƒ‹æ•cdZ9²³J¢H‚‘ÍHÈ/­ÙÒ«Gh‰wþOihˆU}¿6c›ö¢”Z›nGF Ž(mí¤›N,ŸäÈ(¾ àà lN—K›óc¢—Öú1sÝâa²ÖÛÂìº;,b~ [Qi­ºƒ÷Ñð˜£ü¯vÂ$PÇÉQ">„ý "œQ[>€^Écbã(z£¨Ê|ÑöÕ¦žV}=ÒÖ˜îêi‚=p²äÈ!5=G& þ†3·ÞXOã¡OÁ?÷ý†BR÷nÀƒn/Ãx ^y®w“Ãx’†Öâ)ŠÈpæ°–µ#EÞ% Ô‡¢JŠŒu\¼–âq¥<;¥¸ù EÊ$#›7øza¨`+°†ÉDå$à«zHîí08­˜H.h†±¿ë=¼òƒÔoušzÁ1—-t·Sr2tò¦A§µã¯¡‡kblbvÅOã?e¶h„Ö€iÜ$gùõÓ?…±Á¦'1à%ïW¹¥F¦Å#­k€í¾zñËíâ˯?õⓟTnåZµHq¦‘rÒ ç«£4#‡ÙÍ®©GyÊ#Ç4ú?wë1’¶¿'Gˆ¥(Øt92TOc= \t ðN‚vtbÐÞׯšÎ"Ža:ønÅ—÷ÕÓ™rœ2]Ÿ4³ÉëìÄDY /àKîhëÂôGÔÃ]2Uùw¸7 í¯G"¨*ñ6iEaÔ@Zúé<Ú´E«1ec¢óºœ§¯Fƒm'1†Þ×w­ø¤zLˆ’ŠH:;)ÇÞ“¼T]WŸ ®ÖÑ —x«¿ÝÕ8¦³¬D~¨R”\ˆâ£å}%™WÆI•ÞõB¯„:UÝ%­|€QÛ¹!.#ºпiR˜¤$µ:­W&:}ûU–­J;:ëuì´ Üì³îõ·úŸ}µ&L½5á‘çÄDé8Öð¬“Z]ŒV«R½óæÏ&\;yµ_äºÞ¡Ý7™•¶QŠU¢7‹7ÉÊW¼ÕÓ?‰!ÅN‰Rúx¨Òë ë‚òãð’†—ÐáD?C>2%»ˆ3Ë€9ôžçˆféë]§ƒ˜¤Åø¢½‚O:·VQ” ]‘·Ÿ`X–“Y  ÊÁ¬ƒŠ)¸Âe)m+¶ô…9I¹Ùbçº-kô™HÆ?`Âpè+°Éš|»zUÐ/)ŠªÇôy-‚Y|΀L9QñÎr0’ 9dwúòåý›Ò>~zXÕ%ŸÖ²r¤>³Ó/?]’؇yZ°‰’£C0„¤úêyNF+D%-m KXPiÐ7ï¯f5ÆTÐÛ×Ë¢ÆxzêJº©³ºµÀWÿíÛÍ Ì¾}»½)꥛}™ƒm¨ø8"çÔH´ÞÕÇ;€Ç®…5<¬ö4ÃíD]\n a.߂ȠõÌ<*¹]*cI8Þ?A¿•áû©}–›Qަé¡s5¦« Sc‡z¿ª+LžYÝÌ|ÛƒX f®­Ïذ’2tG9m*‚†•*µÛ'7,ÓØ=¨uS‘ó¶c Ž-÷0°T62|À@Ì®›.†Gº”Ì1L¾Æ $§+‘^#À%!êЈ.¹ÉG¤¾ùð§Xm©cP×n[Eð’Q-6HÒ·ÖefÖ ÌådV2šltÍÌA¬±ƒõGF*àó@,¶Fu’O2ü¨ÿMÐztήÔåkgv²c§ÙY©Õ5¾¶ËS쓬zH¯7â ‡håP¶úúæ£-³w˜õó\SZx¥—C¨''ÔW‰ðú’ Åv°Ë™´s8—ï7ò0ΖêÎìÍ20W³µ–óܲ9é0‚í}7©Ø—zhö!5¸-¹¯ È9@—ž•TXŒ6Ô;QØui™(sÙDƒ³\ä”/h,B©M^Š'bE¡õ.Äë[‰j:5µ\Šo6Õê,á\uióbÕÞu®‹7U¶¹oÂ[cÎÌâÎÇfYç)5Û1°ª³Êöõ&µEOåJ ¤8fDêîJЮðqÅDÞÂ;¼ßûc`MÄËiìØŸÚ ÎgÈ=¼P®¾·j'F¼~OíúAÎîÐÉ´ÜT°½Oy-†¸{8z.dÍââ."æûGq>Ôâ-3PO~Qå´„˜)JBõöþ¬Õ“‹ÜÖUo¤Hà'ùç«êS]·‘‰êíò×VÚŠGÞUœôE]ü¼¸KbOKˆw&øþ˦šæÅx3Œsãæ–ËApl 1_»öæ X‡ƒ•&h¼1 – >èò‰e x9 =ƒM¶—,­°_ñ" “}ËÀæô.[6¹g 0Íæ|ÖH<°“¥×vÒ¾8u§WGë½»þ´-`ëc]zFê™æëà~»”S•®úøõÌV>~½ÄG@°+¸‘ú;îv’b‡#¸Y¾J x›qºƒ•|qÏäð.)õÓòæÓ·`¹»U²Cª7(`yšr6s<Òe¦dÌ-¢Z9ÇÁ»ùà€¾]an§ñôÔÖ-˜æ¶kð€ x¸ Ñ7”ÞyU&ÓC!Eì(Ò'&E8mBN>‘û£ø"ßa(šÂ®Éáó1±aƒÜô*0‰vK¤Æ@÷-NðλoÉå‰qgܹüQÆÒ8",Ë#F³mq£§23u`á´2ÊR×&êF kÇŽ¥_¯¿ %eõûîºÍ¨W¦N„ó÷<1ñ=Î{7‚L,&:EháâM¿ÃuÍ Ã$¹º‚‹„;øªE˜À¡ ‚QL‰ËÅqspHRF®µi¸ç­¾¹˜IËÄŠP]…C ¨ŒZÂÇ*’¼-ò¤Õ½éwðôBµ•=ˆö}1ý¨ü7ø¯Üê\uõv°7àYŒqKï©´Ñ©.õÔ”385ñ&Âï–Ü=}“ âð’d)Ÿ ÃÊbœv¤¹äAÚlç³-öÚœÏŰ.óÞì‘þ¿ÿûÿLĉsq ærϲÎìò3Äkª9“ït†¥Å¸Fàzƒ-Ä¢hÕ¬!0YâùqJ þì†\ˆÊd‡¡¡ßF’ºkNÍz­Ùa¹­ë¡^að†ÒNšÊòôÑu‰X¿¦ØImNº9ÈWB®ÔfU ÌÂ' râõæ„OÀ=Y)¬Cñ\7ž)Zf¶ËråjÆr&ûEt}|ÈÔî9P’d+¢Ïrê¦YÁÇ3œºin€åÿ¼Ç?‡ršnšªºÕièÊ™OIÙ9ÌãÆebH:°ò†5¶3[W«›÷zE²%ªÃ¼b<åâwlׯár!eRÕwØÃ=&ÿ'¾qÚ›»hW½š’&M†æPÒÄÆ€Òõ(£amvŽàXçö\A|…_É%`dž€ƒõøœ~ìãÆ4ˆhï»ôÀÅ^öC¹åìÏI>•âþ§‡`˜#¤H0Ñ'Žz(åœD¿Ò¾¦u$‡ÃÚÇıòû# q2o?)²¸›FóÄÈ2]t6E4¿™Õ–A†žÅÄÚÒ˜i?ui(4¯1™<1¶ÑÆ´å Š³OJ ÎGS§¢øŽˆîÛ{°{oåc«ì2²bÙNò7î€þqÓ,·Â—à»´úúféS²§`…ÏàPó åŸ{â–4 ™qЗ<äcøÌ²‘úêÇFy¸@®Âf‹gr(1°ÄÂM¹Ñ@“±Ä‚Ç-t&ÕI=¥Ž V°#ö*5?ÔÅ›4>Ô¡d„Ìñ;Ø^¡ŒS^¤–WÈ«b´Œ÷ l{u½øÎÖ»òú&òy\8$ cDÕ‹›ËË}„?Gñ¹Ÿö¥l=¤ÃOË(£U=µkÕÅò?JÃ=8Qæ<þ±nÄ2sQ5x¤OÑFÚpœÜæ•FâÆø¢„Wˆ÷Ù„çµJq+ŽË-垥9w˜kì"æ išÐüA`Šø³y‚:¸(úÙš˜S0 n–lêqSiËÑGˆ•CXƒÇfìš]yÇeðsŠpÕ¯ÿEÑÏZ”];[Eóð, Ê÷nö}E‚ÀÍÁ¥¼°eXÎ+ÁÆÝ´U]Õ²0³”ú±¾¨¾ªpóþÊ_6_„4û²Sfè‘ìm@7i>ã÷Aé<÷tÀ—`ýJ¼Upóæ´ßJÍ"´K›Èý±œ (ËÌ”µQé«ÂÀ=fP>íÓ/¶»#[L3Ní•K=Î,Í0C™’‡ÚO%NÕ˜âBß¹çëÇåÒ%“}~>ˆIÇ™Åd¯ö\€Mq aŠ (>âåƒRÎ ÔE;söèÎZF08W»µP±.¤ãÓW{Ý[$àëµqãÚ “nrÜF .ûˆ¢hÅ/”§Â ¸Þ÷9­`Ç߸ÿ(cÏCù1¨$ß”pÊ(s$;ƒdŠžÓn”Cªµ²>'"PŸBàwBRÐQibÌ]áîG.¥ÅÁòÏ ƃԳÅÏ$£ë´¤Ï)Ûš¹%OÍ2Ë€¼ó££Ìû Ÿ*‡¦tyþ9v:.S£8xr.d@)+Ì3BïÑqJcs …2R ˜Ò¢â<1‰NPSÐʨ1`JŠóÔ$:O­TŒkû§uÇúó4=Ü=6çÒfaÐ*Ï7Ìrù zzH´Œ*°”X”’Ó8"Mê¶ x㼌NVÚ8ñL!VЇd®JæJµ˜[üLÒ9ºn3zœb­Yv&ÇC)•ü)œm/é®&ÖH¹»ü>ÈgáF$™"/ØY ô«ºëÒº”RfÓéR{/t´;4pG™T|¶C]õKìs$n˜%6zEæ±q–Û)¹º3­Œ¤;§ç à­¿Üw d;Þ™ÿTŸûï[ØA—AIÀVH˜¤ãÝšG ã‰eÆŽa ›âȱ¤²Ab¥2+DlˆôZÞLš²säA¨XÒXA—.¤ZB¥•[[À ¿¿}>KÂQRà)È$¡?©,ÃÚõx²‡ìSb°„•:æQ˜Ûü(Rý§>ê‚–‘[îYbE)Ik'=ê‚Ë•T6èæ¾o†höݾÁu-Ç>ì[ߊ„p9dÂûÂ!¼8ÙìxõdÛÆqpòd#Ž–D¹¹³">ùø›X>òÉ´âÐÔë˜o¼:NνSZ!ŽQ-o» V¼oZ­š­ü JÝ‘:'|ª›¾K?£ÕªTÇ•x}/Þ†oB´è»xÐ~ñ­ÿðcµûz³®'þ­±$OÍj+=€Ý¥}æ±@ÅÄqW݇agBW¡ã7“Å=¯!EmVel . ³Y±×î '¡Üò`)ä6cØŠÝ>té˜MLi™ì'¦© ØnÕ?—qsÁ9%fØ)IS@hj“C< ¨€Œ}hàdéÞ#@½Þ‰o¹Xs´¹kgq´¢Êå,V—W*" Hä3ÊÔ»|ÀàW:öÙùlœL‡ñLn(èQFløMÐ3]2G1 Ý à|ýœÿä¥s²!F:Ù›š³¨ü3JrönòF4ä—.áÏ ÝÌö* ôÉ™MUtæÞlQç¨Ü¢³÷—ÚÃæKÙÝT3;®-¡Ä5øÃø{Í]îÞW o9g½ŠŸt‹¨Üc@ÌÿЋo¾óË·ž0ò£+#U“PM%FkÛÔ‡c¾¥bXb c¦ÄQJÅTâØ«Ò<‚bú³1ÆRx¶AH„1¦=¤ÔkŽìvCˆ"ªÉf‰©“q|Vs®o*JtG-„eCöQø§æ:QŸ˜·xH¢ÜS*…0ë5“ £¯ú9ê7Ív¬s¯‹²d²¶F™Äð>E+H„èbì31$ä\§ºJÜn°@BÄu²±|€ 9bЀ¥Ïú¡Ù(2„æôèxTÚ¥9eø Å¢Û}úÔ™zôPäì…,?¾úúËø÷WQx©Æ™EüQ»©]+Z6GÅ*FäG€ãÓ]߃û¾4 9·}|8¦-›âhÂÇ•;^TZc^®ñ®á= à)¡KÝ]9)ÏÐÒ'¨€œ¿Zá«}³_5úØDï–ÚŽçÜan0õ-ÚÅ'|A¿0 ƒõܪ¨Ëí%ެÉôÐ’ ð3‹Ûð¬‹%u+k¹2z,'9^w“Œ3#^~tUÝÀœC®kÕÍ)ÏlWðÈ i‚y­Øïí_ö²¨x±3Ë|“øHJÈȬlü…xÁ ë͇“ pqóös¥Ý}»Œ¦uŽÉ´LkjàÔ?âWôîS.Ñ>ûÍò*r9²6Ý©ûnŸC¤%@d4fM>Õc »$™Oj1/výý„AÉ}ÛY0aåˆå®Êk?bE<Ýk Û‘:…Dbèë›QY6ÙÍpé´ö=ÄØíä·ûصú§&ðNÍqé7kézjÇ"Ûì *pv¯ÝQõÐÅŒÂTÕ$g¤á¹Cíp¨Ùáã¡.-”ŠbÆ"ÞIÐýö×·Òhrulw›J¡<Ù‰nàØJ'Ò[u…ñbÅP)kûG8Ù†f k´j ]T¼+žzí!CÁQÊ HŽÞòÒ*4:î\â8nz…‚òú –Óq[¥@*ßI¥Øp¬‡~Upcç8æšÀEY½*]zCíŸ:{Ÿ:žïýòùóíKüÿ%®àß}¾…ñ!Xr¨™Dé§>'¼<7RÈ€ÿ­çh•pᘭ2t‰/÷ʈV÷•„Q¼­eÔy0«Q œÏ·Ô¦klæ´€»ð´¶ísV7QÍLÇØØ(‘ÞXÔ¶Ó2µ1;j"‰,–ò—ö¦……ˆÙØû÷Ë€âS³"åÙ .=Ä}¿„Ug>B+s£2 æè„ÝÉ7Áä’½u"V-Æ‚)£ã‚:J>6ÍwŠ#“Û÷f‘ ³ïåàèÛ± Ïá ÕlEdm ”5Dº8îjô7éÔÕ@@ªMÒA^'ñnvöQ]süÅØl›Ö00ÝcqÍó±üÄ^t‰fs·Ó‘Ë"P[!*TcÔ`"!Un™ã©¨Ë`Êu&‹ ú¦{'’0 ã çã¢â¢ÝÌl|wa?µYí-£½-š-^/ßË9‹£³›¦Ü!X­ˆjo–Ëëj3›¾[,ëGxøKé­$ˆ¿yÅ×;»‚¤«SÍÑþrJÖîtÒe»([ºJwZóiɺ«ÔßÔGà¾)x=¥ ÈáoÇF|$DG•§'•Æ—ƒàe5«ûðÀè=º;¥f§ŸT~Ô1;‰íM*k°¢ à(›ê\å-Â*i¨æsóŒ~§¡iÖ*Nkõ!…õ£žÊ®i#÷†Å`êƒcCñksw¨§ÇGLè:bÇ`SK*$ !ñ1.¥ËÒðüòlÖÇü:+ó— GMø¹rjc$wW4 Rö•7.3\(Šróvê/@ôšßp*j&"¾ƒDÌ™‰æícˆN?š·Ñƒñ¼=-Mv5ôycR©µB%S¨.9÷ÕöãAdÊjv`T¹8/€J£Ó\WiA·gûyYǃ¶`õâÁ¬b- §m¶kõuІüaŽL[@`Wx;íhç³ s+?Lx稷f)SxVÄ!dŽ€ #”@«íäYûWÑWm_O¹GM1D!¤’Ý‡ÏøûÉÜ(»1xúé툿üøjA{Lÿ?v¿g·Ê)ÆÄTM^ü%·†a÷ÇXÈ`èT^ÞødŒZ ©C×EȨÀ¿ôõ«u½ÑËí¦ÃÇ»¢²<ŒüSÙá:{ª§»ûññ3t,mlï%j)ÐU.EÜ(þt©«¹ÄÌ>„Y­ÌÜž–,Ö­â9L¥D\xHHb:]¼‰¸a oœxEÕ€ì…Ç¶à‚ƒ£üþ”‹PR³Úõ>w¢êÁ%p7.=#JØð¾|¿4Hô$õ½^ìüÅæÓC_ïs¯¨"„09ñÑÄEÅqaL¾L¢õÔótX<ïsÓ‹°úEšY<üzýÁ˜*ŸL4Ô Üèz†à_ MT.õ` }A± MŒÅb9!:„øÃ³ºVCêå b¥I$°Ö±8ôýúÓ­=óznºÂ«þçiP˜C´=d‚×%_‰q×´‹Oaभ&‡sHH e¡R ŸHÁ “G:,œuæÚq›·9î«4Ì’Øæ=ø¥x›qCô_ï–ÒM hþ GaZ•§„~lÄO[P—v,O媰N»—=õe%[è¥ÌÁ|óÔ¼”GÕøÀ$\Oýþ«ïÿ£iò¥ù½Èõøï_㿳ÎŃöCÞ¤ñÎÃ\9¥ “ØÉ˜},¿,ߪ]ئƒ¾®¢i KpŸTbö_’&÷Y½[ïà¦Ù=dí»zÕì¨~ˆªÿA «ó”°0åNÇæan™¸t¼?¶›æ•‡s‹Ô™å±šh[;Üý·j)…F„²–'_®²MsRº6°Çãa\(<¦….AjT³<™ö¯ÕÓC-=¹Â iÓn•‰Ëÿºû~³ ³~h\í*ó+½R@­,d.õKߢ Äï7?á"rÛH÷F¾Ã¬ºÀÄ?1°Y½ë·ÚÕ®¥ ]ÖµeêŠ [+)ã«¥òÑz©$XhIûMUI£K,wê}ãY0]‘G»úTÕ¬ ²Ñ½v¸êFù²0¼Õ¦Ÿ‡\H\ÊþÞM”­¿ƒcˆ‚ÀçhvvÂãf)§áš”~ˆHË=õäø¸'žÿ€)„A{ðÝKÈ >xì'¾ÿ÷¢a$®1d=i?¨4k‘é™!žÂtÚ+U’.å¼A–©ê±ó«*RlUöVÜlªjy Þzmn#*(qCßâ6Úo‡ŒR P:E‚Q)þ–vÇ•h…b8&X_ÿíóg±þ j€ /÷¾ÿüÃ~š~Ûý9ï=”ļõ¬Õ¬ÒtAN±+SQb–v×Ëåß>˜.;龬öç•jð¡µ8´x¹ló¯â-ÜcV®&šn;©¯îw½hAý9èâá tþÓšìÌ7Ù›ì\Òdg®ÉÎ^“ãMv.h2Ì晌 q„Qˆ¦ÔˆÔåHt¤,‰PqÊ‘>Œ²p†G,FÓ dlÙ ùXJËÈ\nöÆTÐ0¢Ÿ®àJ°1¦ëê»õ¦?Üi?XM’R -Iuõ¤ #Õ´‚lNtÄæp9 ÕúÍÇÏÆ—èõ†™x°uVÄËź¬”Ì礒cŒÄ§æwÙ¥Á‹º#¥òØÖÛ»2~ÇŽçvì^G§_;¤„Ìêþí –¡EÚ)ÒÕŸ&R˜`O§}‘Z‹s•Št_¥HŠ=!2š³/3tuÓš‚Q;ü1Ï×t¹ ;ä.™®”A3¼@Ê‘ÃlßÃPz(¢ç@]nRä“©±§¦}´Xƒ©é çOS¸_É‘Jæ2ü j!Q Dª|1ÒŽ\Ò}+Õ²ß0Ê€ªÍ%⫟åm&¿¨ìô/‘gO'‡\æBÎò¼Õ-: v¤iå G@Øw'žº-¤ˆ>öì/xIÂ)®uÌé2žá-å,e)J²Uû ?!Òc*VÓëGânF‹Ç²2üº P¶*AéZºÒè}úêúëû[]–â ¯®a´L À;^½$€¯ ‰Æ“y2W*ð«|¨Ûï Lr%x*E‹)yT ª[w«ÜUJóî+¹ÄQÌ2¶w™2To`Óõ Þqr™î6õŒW– ž ei‚ „%âä—óŽ/:€õ·ZN<𗩆Â.,–­TXdº×›»Œø,nÔ½3ãýׯ¬·¯ž©ž·ËîUHHù*è­øi¤úQ†ù‹5'óÔÕÃôÐÏøÀz9¦Á²ÕÂ’ž´TØ)Âyl'm…ÜÝœ©:(d².º¸d>)Œ®T¤NÚŽù;*åeMÕJCÓÕÒ¨d½t}Œ-µ÷´|ç³éÊønh]þ e)?µ™þk=zr2¾Þy†¡ša.Ž®œÍ#ЧMŠ)ùÚ~• +À³Õ˜[õ8é¢ÖæV&Jó¼¹A˜)Î9:3 …$Ù«VÖ‚¾;ˆïeñæ 7tQÌnßx)Å7Ÿ/o+´ÍÝÀQÙŽ‡^£ 2ø- $ieQš—ciÃCÆÙUœk$—GØ °ö‹‰R·æ‘ÊSïÅE¢ PÃé;+BóæªƒØl¥d‘ÅUÃ¸à“­Ýú¾xJËàÕc}ÏM‚ÌQÆb™4I'fgåee"_PUN»|w¼ Ê.Úç+¤ ! ɪlq¦¯µè-åIÏ#ZN2N#W@ÌcF;Ê ãy¼$€o;ÉayõþÝR»to¿ÛüjQ÷P’õñ>WµŠ|¨Cª&kÈT}×~¹Ä“Ò£4ý^Û%°[Â,¦IšŽ!A-X(Ã¥—Õßû"ýn6zG=ä94sÉ’Æ€ˆ6-£«×ãc›;ôh›`:¶%$••yÀx½u¨ï‚º;‹æmµ‰ºå….XËXQ¨Ç E#éÞ5às9Mí}§œ¿*GXdßt¥|º›ŽáÒ1L|ó¯½t.>WU¼3òélžqºÞ§Œ3ä²x\%d!!k§€èé”#<,Ë2ù’ÔGwA+*S }tÔK1YÎv=”q·@¬ìDZHg ÁÈ^Šÿôîg*—vï®nÍåRÒ)ŒÏ¹9Ý‚ÏäV X×𠉎Hµõ~çw{´5 MãÌ™m‰X "àL³SÂôR‹ÄÐ/R[tÄ`=j­æC³„í×.¯–ï+%|ÙÙøN v\€'BP‹CŽNä'‡æ‡÷ï¢ì¦µë·)ÁŒ@}V Ajôe–m§ÞKèïýªx‹(šÃ£'܆P˜=$ûïýÊìûX’…æØ£8™BBY[•ÿˆžÄ :`Ÿ!˜Ôá;¡21½íËxƃO¦˜H”DH Ú¹¢ß gUé1I@õei4=à5-8µ¶ÚÁ=s»½ †÷xñÅ“ÑiéI‹ö"g‡ yÈ)¢|‡ÅC3DÙ½-|xš.Ù/\Z2.Z91ÏP“r–œ Á¥'å.½’M`ÍPó6ÝlqZzëWáK×á]lÞ1«ðŽ[„ßÀê—‹D}ÁÁP€ô ¸Bά_téZË+†„Æ¡ô­;ÄÞ·ó¦˜aïæó­öÉ`€EfU!Ô£àV‘ ÑКYI´ö˜¢.ýölPó8»\v±‚/ ÜœVúµˆÖL;w1PÝóI-»zØ·ãØ.÷¼_#‰QtZ G×q–ï=¦7£»ŽÙ-GçÜQçÙ¥¤öCŒÐ~`Èì¹%ÔÍõ-î4»ö@Ö“:£PÎ. ±™|r ´ §[HHù‹L×§(„sÞ†ÑúÜ+Ff âÔ« ím©Ò/ÖTNÃÍÀÐQŽ–ÎÌt|9ÏX~½®>JŒ¥y\×›z(Þ6ôáE# ó¯*-‹,‡JŒB¤OmâXM!LÍY_}%¢<œã虈z#lQTFyÎÉs4‡G èÊ 6~Û®º‘±›È‘qÓ?uà† »u…·oò÷lÀsàªï§»Çæ,&›‰Ü¸ùË_þGµÀ‚î$‰Ø…O[ʪ™ÄŠÜ#áΟª¨è²€ËÝS}žDM7鄯[ïŽé–³UœH0­&þöüÎ ;}ùæê×:pJ¼)¹ÿ(‘J%þ­o?Ê_òÆx¿ú o©`4ôµ¡äÚ®ØI¶5ÇŸp?¹ìú,v¸¦tX`²¹º$ºhõRÌe:Ⱥª».÷Òø0«A&›Ö6@ú5Æk]è-^Ê&.†8d…À9cIˆ4ÊÜÁ¨ˆgíNÝrµÂrÙM-ìG_™0gH¥p#’AZZáö#…;1òLb¤evÁˆ[R»¿ò¼h&'}}Ï÷¯d$FñõНS_G(¾ŽP|Mßå½¶{¬ïïóÌ!%Ó>2‰R$c’ƒ»ïÒ™KŒÔn3Ìi5N( q¤åœŒNÛ}xsK[Ϭ¤h‘e)zÄ:zíZÆ¥¿¿÷¼Ãóta$ÓR2Éy®*)Bb(a0pêO·ñXÿ½â«Àõbô<œÕW ìp&©ócèp ÇP‘æð8FÆÐp¼”Ž6*Òrèi™åÄ€-9)”Û”%Íäø[•Ž˜ßߪíGúÜ0ð x“·ò=FÞ|YM⻌ñΚÃEUï.~”góÔƒhÙ’4&;tmÈlzÍ^¦Zgl±^–_o5ܼƻ|×|’2ˆ¬15ÓéRÒxen~—ݺõwléF-±Ê¶ÁiÜæµ Q:nãÖQùé]L£˜¨Þ­÷eæ&´a!¤‹õ>08ñ³9^à#w,„ëÍ8áïÛZ¼Š£œàª7m¯³öîæc~2IÁuw[ç“"Õ ÃX5ˆÁ wðÍb­–aX4 )£ÍC²8¶º‹eƒ~ÞµÉþnw®'\ã7Û³¿/¤¸¿ðÛ߇äö÷,3mx%/«;nêI¹²ï¢rwT…ps8ä÷1"h†¶³‹ágc+ Èb À ;¸»€¶ãXŸqMÓ¢‹KZ%¹›+ïqV/.¯þñ­€Ë+FÐLÅ@ÊV ü“é;Œ`2™€jƒfm‰ǟ­Ét k1‡H ¦ã²Ÿ¼ë^o³kã,‰éçÇMëÇCMpsÑ>?% 9*Aš§ÀÀ<ËßG´…¸‘ŒR,Ý€F”ááa§Bù̦ò’¾=ÔÓ»Ê}¯ÓÁÉÃ.0íá YטÇÉÀÒÕ^Ô/fA(eÒ¶»zz@oS…¼}¼OÞÈÃQª?,—oзUCHJ/e¬GNÊbÊ G‚”Bè×(ÖU}w—q–¾ËKË$Cã 3öi›äOé¯ÝÉV`̓3Ì\›® còEǯñajyJs¨â•n*“ÇYZSq«^¶e f ‘> K”ñ#æTÄÉÁÖB""UP+²ü.B>7˜Azd;Áž"÷áÍ¥Üh¸MŒ±¾ã­§›î ýÙ2¥ÕTÉê:–Á§.í³¼Uw99•ÓÆÍ‚¸2ã*•“ôùýýþ0·Ë³y¼:&ÑáÝ"¯¹e{»9UŸ1̰y¼Z˜óx~Àq‹Hu,s~ï9¦ˆvN9gRw2ŸKPœ¼”'z“ ‘‚ÊVDæb*Rrê–Ϋˆw)¤è1ØÃ9SŠœ™n§$òøì%&ÜháŠ`¹Cܾt‚ ˆÏgSÈlJ¥û¡‘³ñÃ#µ@¬ &xr¤íáæ‡Þi–1w¦Géá–?OÅ‹ëÓEYÈ““D"Â…Š>ˆö"ÄÅé…<ŽúÜ[¢$sê½Ô߃+Â!ß9TS,y‚É–T}S½iÕ‹é žz=J·¿°ÿQ³Õï@ÑÞvèêwîý ¨ïÆüxäÚ$„º"Ò"$6ˆJÒÇwÁ'Kã•߈S^#ל:¿ÖçÄH­«bÈÂ%ÔCEÀr{“:›6?7Ô¼û²X°ëÄ9DÕ>Û+÷ü\fðJr™«Ä…Fk»$xZHHl¬cx¤Š-˜Òz8—;}ÕPl¿wâ÷ƒûÈ^I³¸›‰‡ 7o?_}¼ygxzû±†çŸ²§‰Œ™MMH7šÆa]Ô"ç–/ÒýINpº^;cÁM§â6˜¦ýn8ÌX3 t©‰Ô+§•Þ-—¿ÜÁïF5ǂۃ>Ìê8º7 +¿7–z"oŽÍÌK@ñ´†ÍÞ»5ܰÎ:5ã )_¬á*7ulÊd¥›ï*´¨:Â@÷kó¾ØŒ%WÕ¢x†£wA-Ìšæ¨o¥Ñ|§’»Ýñ É“w·›Éœ¦yÒöß&çý´[q1-L™,>W€ë€--€ò…ts kÓ|€áÈEg½˜·‡y´ÛCšs{ˆn [H,£:¯;0YXÂÑ.A ðŒ±¹eÉïVÚ{x!õ ƒO|Ž˜Ò¶™]S€zS­ê]Ý­¥_rDL.Ëy œmÞTãzM˳<ñL!e#'ÈÔU{ÛgxšK)ÔϘ(ÿS>æŠ ó9—ªOpêïÆæ·c“ßÍMä tf¡0áƒrŠáð¦é(>^]Þ¾¯”l’†º Y)>èôU˜êSS8íŽæð+ˆpf—·øÄoÂÑéYÑ9oBò-ˆ½aïÏôöyߘôç%úea>*¼aìB’EÛnñ,ºþ¦SGœ¹»¥?íîÖÍxxlJgFaŽ€ü´[(ÃÝfw¨O»J$K‹€¦R9…>µáŬïz°(näAÁZ–Ï cùœ]òim®ÁôÝ_/þY*þGãoò'OnMÁ°£®­´Zë‡h]°óFS"ñÕªžÚ5¼Ñëf8L4úPYƒè'Hƒ:¦E•mÛq‚mé“ÿu´¡Œ6/‹Rwlw›ê?ûãX½×’ŒRm{^®Sç*ÁÝ *|BQUi¤ÿÞ*`”AÛmšçÅ”ú~–"é8C,Ñd\?Px¸ú¹ƒOµ½Û"Å‚~³iá¦×œGÍfT 9÷¸ÏöÜâáǺîÂ6jR‘n&›ÔüKÿÄT¾j§ê‚²\ÆfÏr&“IõS^«hž!ÒU3ä,hæ)îõ@ƒá¡t/°—«•?íl¤sö#2më߸2]„[¸.øÝå߸£<}Œ*us‚ÉϦú r¦YïCÑxš¡’ˆçÃLÉ›fu¼¿³À#Dyè{|ÿËX±y]bo‚]õ³§âg(*Å þú%´¹±jì0.ã—(A²ü&ò±êÁõ£T!çX‰k{e%º9ºîú)CËÁJW7—ìŽh4o3COcô¼¯g†£e¶’çZžš_çê)yë]°Ô4OIy]Z]•÷³k2öº†-Õ¤ðJøõ rÏÒù÷ãŒ>‡`©íß1ßÜz§ ¥z¹Ã‰¢³‡x‰å•6Užýšu3ހμ7³ßyÛ \—Æ«Iþš«sÚͨ‚¥¶å‡_suú©X`¥¦¯—q=wµþøç–KvÄø½à2yÿÀ â>Wj;Á¡0­E‡Û^ªŸ^áîÆÚçÐmÔ¾…Q‚A=ÌÞ7*Yïڙǖ:›«M$xÇ—g"ŒÒ´C_ÇNû°ä/ÉüŸ¤”¬bãÓC! _ÁÌIÌÓ §íCÁaÁ¨CWðO%+Õ,=F¥j…ê¤ìJ®´ŸP¥BϪStô¼Ú(…L‰96z·k÷ía^µ9= ,Ç­tZÑavçªÝVçþXÕ«©ß‰J¤ìÓá$òéNô·®¤ß$8A9 ]Ž>C…ÄJ'–òêú»zµ›S+_õ$5:~¯Ìh³¥åvÏtTx¿ÏY) /þ%VP¨Éf_è"q"³•Q21ÈmfüƒÕ·0ÿ•_yåSds÷<žÆf×®ÅÄdØõg0ÜΜ©Ä𚥔/¬Üž§Y¥)"\ª<±ºƒ$^•Êèó¾ÏP³MF¤Xõâ‡r {ìÕòz‰¡ÆQðC'fÂÏwÒ}bÉ]¬\iñBн;YAFäôIßÃB¹ñúò‹:pßSßI+¦4-©¿Ÿz!%† …{æï»m¿ÚõÏÕ ìb\Z*Ì#þ)ç€)%ñËÊfJÿ¸ÜÖè4¨”ƒ&ìPÊÑ£Ù’ü®n.¯ßzÅälêÝT²ðkUy”)áŠü‡GäÆ ø‡`Bwj›§|sxH¢ìí@â4ƒ†'›,ð¤ªÏ|¹Š+.óšâÕú JÅKq¥=x‰Žyä$S²ºxKÍyà%Ÿôž¡ä ½=i·\;6ãÙÓÓ¯þ.ãJÅþ¹¸ò>”¨Ý?s7’Õ¾þÕ­tW‡±˜ƒ&¼PÊQ£Ù’ìn.o?òþ9¾°_èK$5yÿ®!Ð-ÝñÙJÀÉ:kŒì(.›²Ñ€A3¼‚Qf+bHF˜´ÝµCé;£ñ­çâè;¤QúS aiM/fˆõ©nw8Âân6#„ˆ–wµc[S†®Ú,z*“ÏQ·_@”>Ü8[sR z—0ƃ‚ùë(©ÏySïaä-,|ƒ7pOÅ´,¡%d-›%Ikùé«Këð\þ% °„–q´l–$-siýžußé¡•ß©›N Ë~´$”ï1ª5¯ º¼¿´R¼Ç8:_§ƒ|Ÿ…øëЋ¥½˜²àü’Œ…FصNV• ´6Ø¡ÖUÜë}iëµW-š~èú;¼,ö½Sþ–€0™+ñÞàg˜Êy{,T¾þv¯p€³¸×"olTv¯ò $¦žœT)zy3NFÉ9›H›–SíÙñM¾ÛЭ­zvIÕû+©ž. ®ÀaØú üXà•Ÿh#©¶ùö;‚¯³¨~/ëù.bõ¤øðÂ{vÖO¹6}ð›ó´äc“©N³@úõ|TØ`L­ÚJH³×Jf¿Hn ü±wõáM2—ƒï"ð`/ýŽ[5 lð÷©êõ#š¡Ë6ö?tS_t§È‡)Sïß 2@z¥ ìÞ§u_Ý,?B0XœÐ<¼É=#¤Sòöû0KÇ{û 6‡%ú¢Ö¦½ž$IíOxùÅàå›z,ý7X/eëMQ¶LL¥µÆ² ³— Míeð*§”€¬Nø|]˜U,“©j™‚Ê¿ê>yÊ@ $>ÀÄŘ<ÿÿñ÷¯:¹º'TáñŸÐm œ°ã@ªÒqš†Ìr͇ђ!ÙTÊÉÈ.o«¦;Úá<îvwëz·[‰¡%rP¯¤¯«•îv “ ~É~Ówÿ÷ÿŸÜׇþ#Š;n·0ÅšÖcÓt?€± ì±ékyïCñ ŠÈ³ÜÍÓw)_DLfç.lâ)[Ì7 Í>Aó šÃ8E–磨<:±ÜÖ»RÇ,18e¸Þ1îX‚ŒO°¯8ÃtçòêNª­ ^±ˆËÇcáêÆhÄÒ¹èÓèYU¥¼Ä'x€#<¯àšu ®1°­2N81ûýpWo Qet?,ê­Ë¡NÓüôómu)7Ä4vßîÎlÿœELX‡€@Lc×´÷«~,n‡0ƒÇD¸–!™†µÓDbKEŸòôçqO±(Gøé_´@|Ž­Ÿ™%â3³F¬ÇU{ëñLM®b=¾dZøY>‡ËÂgv]H”ÇVƒ±9 ]‘>LXÐ÷ÒçeB~¿ˆÖO>l©½ýz{S©àé`oÒÉ´¯¿~¸¼¹ O][ÈÎ"}jBò‰Þ¥Vh5¤…$Ìí{<ä³±±zñõæýŠ]Ájú™_N?ëéggAýss˜\¯h¶©ÝY+õ2ðeH)HKB…Ó$½I%ÉûÛÝí®ÄÑ¥l„Èuîãdü–ãmZµ'CÞ3Åé¾-’,ˆð‰ñ[ºnÛûûvzïGñEßwÒý¯èÚ=^æmF|Ç^üüþÓàP½€cKNÃØc•¬³¶2šÑ|s…[Xœ_¦(Ù¶ÊuY…M6a·êu`$¶“?U~|[E]U妱àóIP„8¤:4!Áy7Y~º #°½±½ßsæ,žyd&èfu¿ÿùú6æ†-£Ç“ò©„³e,wêú>ï‡1÷ùhqØFZ24’U¸(/h}Áh`)I)[ôî¸k³è8¶Õªï•ÞõÛµ ¦¼¬Ûõ#ZFIo~¸ÕÒNÓÑ-ïu‰Ç÷5¶› ç©§þ4ÎÀ6\wXuý4lçÐ#x–#Èy¢˜Õaë½À[p.þqyû޼(Ä)6ïUN¿ÈÑ×8öxMÛÆ»÷·§§.þø—°™ËúDЄ.ÒÇÏ–éÎC5Õ׳¨¾NR}£ZۇР¢5`A%q~B åèEú!àÂP?ñ¦ÌÎñP” £aAìœàËo/Í©$€N¤Ì¼:\CçùÏ9éyæŽzž{­à0øšg´ôÃàúš§pgH€Ç®cã K£ˆ«ÜÓëšb>z¹o#”Xù”{4üˆ§^¦ %Tºæò\k5 £ú!ÙÕ )Îîí¯àO'xêŽY”}çø¯[ðM+ú’!Èû~aùÙè6 ÒgC#ÝP¸»!o¤9Šú°ÊˆšÌ©wõ¹xÉÏâ)1)çþnV×ÚÍÎëüÉ‹ÇS}®®/¯ØÓÐîç|¤88¡+đϔ“ÑiÑÛ÷×™Y<ä-bÆòñXdú˜¢ãô0(Z¬©Ôæ]•ﱫ1½è7“Íš}€¬ ÙõÉZwôK>Rü¢#XkÌ ³vÓ<'¯»}¿ÙÀsO?V¡á«•öã.†uMÁ‚©V+t[Ŧ»k‘¾Ð‚`*;6°äÉSrp„LwˆÈ$eZ‡úæ´î^ž©hw‘T¿’¸ T¢YèÕÕú¡Y?½¨?ìsî.Y™&6¼ìãÀ¼ìãà¾ì£2mx/ŸÕ€·Í½'άsL;§ý1OÆ‚‘è¿ÄËë/9ÝÚ…|ž€‹¤,´›z‡Šv8OmbTÚ¤?öºi­¼SHÍÆlVžû7ìJØ2x‡ó~X¹ÇœfuÞ´åÍõmeEr°ô(vÕ­” E‡ôPÊ‘CGM Àꟲ*;™ö¡>Ÿà4Úd™`*÷™Å<¿0oäƒû¼´8ä¦%!?#¦÷ÃÃ(ºj!=Šõ¹¡,$†É!+L¦4ò1%9¨O‰/éd)È ’[Œž‚®Sán½bT04‚¦¼¸¡~6‡šHç:3â ¾…Ü|,efd./“ìî,Á^Mõ׊ˆƒ/pI`G¹4,´(Tiìó¸ÙmæLÊY0ÕëÞS¤lä2Y»Üƒ€T 4þ?æÞu·$Ký¯§H 6à´§Ê}ÛÌÈ’\V—-©EÙîÆÁO’LIY&3Y$%Õ¯yŒÙÀ9/7OrbÝâ–‘™AIîÙ?ª,F¬Ë‘qkAŒMðº!4ËeY(Ú,èŒóÉ<¯Ï:EžHzuY—Ýègål»,²èö¨Ð#Á/Nkµcžo”°e^¡WÛ­g›çÀâ–1 QKˆ¢¯.¥)ºtVqõÀ!¥‡ è—ó+;H1 y¸†@v«Q »UGýnåjÞ­¼a_!𤬪ñ—[~¾P@ÍðΗÍv‘våì‘,$'ÇLsç|.鎦ëª-ïÀz(!\ÔW¨]¨‚ÐQ½b‚GÅ?ü2¡àðQ¯äKfJ±dF6§Ã¾·¥ë­ïލ~K©óu[íà5VŠcŠ1®?S….+zÅD°3Efý]yà·3p!U­SaôÀ˜fY]¨Â‰yÙé…rÁ%Uð!½ q¿†&^‚@DÀ/^`è‘æD˜ø°ôWDÖhr)†XƒÂ0in}…ÆÊè ¾G_ñø"U>× ‹3ž$ú ý¨â&t¤ˆÞ渷=t6¸ž?â{õ0ù¸ž£PÈ£¿Îûj¦ØR£ó‰={–m¤T½å‰}Š(Hû=^;p›òQŸ¤‡-„ß”cŸ%ôøsԜľGSîùEšrä›4eÿWiÊÁïâ`ŒtesïèPžÏuØ¡nú·I⊙r—‰ÝðF¿Û˜’´q=ø‚IhvêÍ~B“ï”*zbåìY-Éký%´ ã³|k'7ƒ>.¿€Æ¡/8ÞŽ}莘´%‡´ñI¹‰dß"Œï‡íÖÿ‡‹“ÄH¥ó[ÆÎ ¿‘ bë> T>r"ë¾ Äc  08\ú"Ù>‹Í>.…‚«c¢ŠüŽ˜GuëÉá׿³ütEï[¢±²ô—"Öx^; áÏ®h‡\A¢(ÀÃå”§öô qBð!¶ÞsS$Ä£nX<Ü:`ˆÈýë€AˆB›sp 7YŸÊ岨›ûìüìï¼XAæ¯BNà5À%Þdzœ‡U°ºèÒyÈ\÷©ÛLý:êñ €¼)­( sÀíFû|Ê%|ºÑ'µ!•ƒÆ}RkÈÂVd^Õ.ÉÀGîV€<É|"Jê¢Í&|÷3z/èj'ùubµƒ3ö:±Ã6ú:1ôÛ½@¿ý¶tê;ÅÀ O#„.Lÿ©¢KœøT1&¥ Lçä:ÇÇäÞÐtñ1{ß5_—zÞ‡¦úr »jtW­{€îªuè®êŒéŸ>þ”}9M]<ýA+B ´žëDR0úr1¤r¤º/ ™·…W{6õõ|Ÿ‘"Fî@ÔÙ=ã„Çè‚^·UÓÂˉë%D°bŸA`uÓ™‹˜×§t‘rŽRêÍ‚0ú¥zs\)²¼ÜÔQxÔ7¤rà¹v¸†Ì­60ÃM².ëi¥æjÄì&$c(:9ÇdƒÅº`(¼L³çVËŠfj1]»áÓY:=×é. &õÚ’8e£­w“cÔ¾øe Wjúý ×£ ¢äËâ—ÜÉv!ùŒˆìkµ\fì‚“â¯c~÷Q%à=þ+Fκ…’ våFÔå(•7¯¥dZÈ™M#ƒVHíK2íÀ…騩F‹Œ§î` pk2P™ã8-`«ôˆa߇Ž* é­V”˜[ O3f:Š“½²–P‘•`Ò°9XË?Gž8ê®'¿ý¥S6æÒ9ŽO]hJ?ë”ËSGÜu-£ÓêI Üz2§(â¾÷óv†×5ºJ_h/M«VÍ‹e9ªØ¥ Õcž€ˆŸuy—©ê7‰Ûpl"]½Ê.õßÕ¼Ðtæoì{G4å,Ëö9ýµ™Q×Rj9ƒß/tŸ]ŽŽqz§j™;ù²Ÿ¸ºlÑiW½x£qá{Uj?“™C­,ZÕ¦¡Tmj;¨Të£GÜIuƒg—å¯[°|q4¹|iP-nq7„̧õÑq^ˆ“ã(«ëëªÌ?è9r¯Öm=³¯¿ÍÕ?&óH}l”B£Ô8²‹Ÿ&¿Ó™E;¿­v¥mrl§ó­|H’ÀLvœÉ‰{!M th “ . °Inšd„Á‚#;! Áã£j£\ÀŒwÇŸ>a¡œÈ|…鎦ò¾X­Ã*ñâ]ƒñíâ¡.V`ÿ$ã¨HÄœš b2o«õ&;¡Œ¥Z”ï7eK¨7˜²6ò”Þh‹OY;z¾2µÕâf|”Œ’[(œS¶Û0|ÆÐš>ÛM0;£låA[Ì’aÒ.¤Å,g1 ÌØDC¹hö3+woá}ÚCÜÅä>I ™z«2©‚îZXëTã`B Dgäá‚âhè ^™má1ÅøŽ ³p÷¼ø¿ U&—20õ³­â~:yµíÓˆ¢û|n_i3 }ê‹ “½;¾±` ¤}—9åÇa‚jýÅùÅß_"žg8dXGÎÖ÷M ïÈ6rœ?ÞãfÙ(UÈd‚z4-Å*{³€ãñúlO‹)¢“Ð?iÒ}H”–+‰óÂ{ŸÅë%œÕ{-"¬ W#1Ò—Eâ1ô]“„òLê}@éVæ«“É‹ñZ™í45ÎÐÊn ?"Ó_Êk—™n¤zqVæV›••Y_o‹Mvu[R›/g3Ù ž•îYjÜSœOÃz•çŽIü›i½òÀÄM£·á i¾¬à2>¥…ƉnÊ ÛhÀ$Ž£¹øó¹¥"¤¦” ðtS®ÀMQ9ЬŸÇlJÙ6çBã⌈@¸‡‹Å›Kð¡\fGç'Ód††Ú³S½¼‚r\/‹]“t‡¥5¸)/èd>Kšùq(ÂÖ`ô×Q;ù©ƒŒ²\ëx!¬?É‚@ŠXmEm^Ƭ{%³JR푊X™tÊgCÆ‚J¥¿ÏRýϳTôu–ê<Ί~&¨|>ÅO Ú×^°(¤Œù*ÇåRï!ùmVo;†4¸Ì‡'ï›Q1j‹ssÎuylüšŽ6ªÍò!ÛWs•Í жÑó„ÙÊpâFòv“‘˜×ì4¸q˜!<çY…ÔÝ; (û„ˆlly¿&0:‘C‚¬nÕa…à—Õµ±#ˆÿ™ S/dÖňOú™ÇÉ4N \‘IF‚ÚÀKöÔ)‡˜\xH$¾ÂŽ’6²Ú^C¼*V’=Ë0‚¾÷È wXò;údˆC¤Ä`JÞPyÓ)ä>ä¶Y–Épâ.TÈŒÁ„ôˆ— Ä t™’Þ¶öÒwÁ…o]»¬iµˆ(a\ŽÅVêÒT’î ‘¤n79t~í=˜ìj€*í±g”Ö"uò\´Nrˆ8 ynƒæQP”êÀa7ªãtª¸uÓ€ßËD|IýñHâÝ8âaqzãüã‰@„^‰çÚÄ%+môŽR‡ Tg¼öÙö¨…× u³+dA=¶Cj‘ê,Y­;0-C¼¯Î›Õ¼v8ËsäAÿb9U&ኲøøÐ! qúâxÑå¡A¼tC6Ñ£2¨(ÕB n´]sÜ9ø*_¯šæ±HèÉ®rÏäØC,2ô˱;4V^ã˜jIwN—žNÇGo¢<ì÷xÊšÔí:”ÆvÓén–¼¿«ál|3~T¬"'ÄÊ?Vö<êë3Z#Hµ‘rÙV:ý ª†0´ ¶@ŠB8Š&FmqQnN¹.B-©ËcXDMìbLû„â·t™ö6™Ùƒš²^X¼Ê.Å¿n›M1¦Ö%2J1ÑQ‰¿ã ÿY¨Ž#Ì–£% Z“á¨6iqõNhÛ’JM^òG1¸T¦ºÚ1!dÔ‘Z>ŠíŽªªœoÁÄ-í &Jm InçèÆg GÉ;â¡þh·ã{†~–>à@Ò‹„EÀ4Á]Þë)ˆv·`@$„ ï!v £·?|xÈä9×–ÈáhVBƒÕ©¸°‰6 Gz>¬ê;‚Ma#´!Òp|uYÒ†W™'AFLbOëІ(»½Ì²ÄG ‰elNIÅ!I¹)à:8T@â’ì.4Éé™î?Ivµ×WOÇ@Œœîd×,·«2Gâ¢Ìn R:ÕßFk¿Õ(áŸì ftŽ|¿|‚xºä¨z>º‹t‰,¤Î@ˆÂ{€ºÊ2[ÛY=>¹zTV¦ºú0!TÈ©/¡în-ˆÄkŒ8€ÔݯzLû®»˜§µÔ§‘ª÷Y¤Š=‰TásÈ=à¡gƒ-iÌêPúØÂñÊ’Ó·Uª™WÆÌË?ô"ŸÒ°G´ƒ×¨së˜këÀ±uÄ­uDûg¯.R*CB_yp@iˆ÷©‡VN*Ñý"Ü»?òn[åFÂ9™Žè¥Ë„]³kEÇz5ƒ.´aŽþ¤¨8i´‹sñÍ؂ᷪÁvƒÇ7GoR(^òI¤Ë8†-›H¸ùùmDæÐ8¿‘K8Á?ûw Úî§‹òºØ.G‡¡è½Ï%Ã*·ÄäçËM(–ËæNqsÔc°®–Å«ìN¯vKrDÆtЉd™áÅ)н…!xU<$»%#r [ÿpÜ’QnŠ[2V;T]6ßW'<…[ù†ÞyÉ×Bu¨uYÀ! <>·æS…Æ’ê‘V˜ ÌZBæ"ì_¸;ö”ÎÊ7M³TSx-®÷â7À×n¢Ã¼é£wµcn^Ðs’Fê¯ C×õvõ˜Áúué®·Kñ!»··YÔJ2r‘ñùòc6Y/«MöSÀÀ¨ÕR¦šz ¥nÊ…ÞŒ+ÝÚjÞ¦ÞB„xp€AÈGM÷Μs2n»ªÝL‹ëëªNŸd]¥†€Öú®¢õ-,Ã>¥låâ£8bµ É<<®ý¨!ì©&/¾0d„µôÔ™ …s[¦ð,l5S¿CŒÞ×D¦¡‘ïá±îÛð™Y°Ó÷CŒ,kÌ’÷Ü5©þIU©ž£.Õ3Uæ~.p‡X\½îo£ö­V˯º¥Ø ÿ òÌñ:Æ“]5\ÏêûT´úg×´z¾ªVÏ\וú–^É!±QgFëÕ0í]£šS¹8ö`렊ט:yÆZSß½ÚÔSëM=CÅ¡)gjµuˆ]Hh2©3Ë´o•ÝRd,+%a¶ªx]¡ÖÞªJ2î#ï@ M©;Œý­aõTõ¼XÕ÷»^¥Â\¯ú®WlëUÖº¹ƒ‹Æ…4ø¤þôjÓ´‰‡™:À™¨·÷xBöíE±gBTö¢X£' y7~Àç³eƒ—dHóÒ)²z¾‘A}ß¡A=mlPOVÅ<ÁØ;FêbÑY¾é·Ç‡ôéð-Áa©çÁ¥žØ8œ. G7ÝDzГ/<²F+?Û£YÓá9zé]ñ€]Ö}›tmbox²Ò÷CŒ3ŽÃ08^ïólgŸUÿ¤*UÏQ§ê¹+µš§×g@ëÁ«æÑj–}«pÇ'+>!‚ZGÇNÒ ÇA‡pãUÙUóvpŒÑWÁê¹jXý·U±zJ«ï^Ékˆjª0ÒxjU÷°¸Ð-I¬ÞCûV¿åWÝRì…yæžÅ©ÅU&Qoú7qù÷©wõÏ®xõ|5¯¾kÕÓû¡ÔJïR»˜éÙQ¤¦¶}+ùW~ŸäÈI…Ù° ­ÿ€/Eoý©ç¬@õÝkP=µ ÕóÖ¡šß–šÏ„ò­Êô yz+×Ræ¢%VÓ=÷¨õÌŠÈDÓA ÚïS·~)Ŭ8¹p1¯Lb‰+ŠÇüÔÅ‹²˾ô=J1€?Š<ín˘RG»d>«ÿ¾JWÏSëêûU;lq ¿´W/“‡Ô,QPˆŽxq˜.³t¶ ½…P߯ê»#Ý£Ò[¬$Q¯J½‚öíRLã_)&yï2–f ߃qu &ù¾ßCýw~õü_D}×Ob\GîûM¢Œ±RÇ“ŸÅ¶ï‡n•µ%ú§„GA%¼î)·úþWÿg•|·Ú»ÈK¬°»ÕP)EÀûS}ŸrªÿC º)n’ Òº%Óy±–½Ûdq£ˆiàâ°B@ñÑƆ8H®Rß±ŠÔSêH=µ’öÿG‡¿¡ñþ™F»û¨ðF‘Æk3Ü´Øqx ŠÕó×±úçU²zžZVß­šS}ĉ]¬OÓ¾•Êά”D„=Ø:¨âÕG¯{ªJ=_]©ï[Yêiµ¥ž\]{¬˜VñÒs-,Ô$Qx°¤3‘ž CÛ‹ôJëûÈÐŒ$Zy–qï D^å#NÆÚ‹2‚¯§?õ”0¶ç­@õϨAõô*TÏU‡êyz­ú§t[õø~«ž§ãªç;²S݈#;u°.æåªø¦Çè”Ç€}Ô¤Ãä†;lAxQÊ´Oê8âhB+‰Q0ß:ÖŽ9‚à]å`×EÏG EíÅàHAÓíkµqתyv>1ÉaéàyÜÄv}Ä^HŠˆ@MåSßÄ’àQì&ŠŠÛ4Z}!¥'Ÿrܪ4än+*0CFñØ#;­%Lh¡úZ)u;n/Fé!£œ%ºwØŸLQC$! ®WÕ‚éV0­F‚{$Åʆ3¦_Ѱ½9˜òµ*ÝÒÛÍôX–#’qZQÎy9æY ¹¢x¯2§nî–%šÓão[ªf¹ƒÏ£s5®—9ÆÊUÌ4€qh!(×Ã¨Õ '7›’@ÝUõ¢¹ý«é²ZU££O@&V9%[B(3@uý}¬êí}vqø)£t¢î®¡ŒœÄ1FÝ"=Ö$À™Çâ„T>øMYbl†Ã‹;¶Ñ=Ûß/ ½Û‡2zXÄç˜ë¢Õ]«Ô#û ÁªÛr¹œIÃl‹Åm3°FºE9¹‘sa³Qý²Áã>f#ŠUõ­yt¸p@ï‰áJ/àÂ/BT&­ l9@½‡+”ƒ ‹ÃËÃO§?ŸO?œO®¦?Ÿüczøùê|zx|lÕ/›æÛTNëﱪAH®…`,A«öãùùÏÓ÷ç— zbUÂÆÙ±4»U6ùo\¾@/ì±I.%]lk½ÿC»J¯#6· Og¾R˜¬ÚM9vFá:ɶsøÅáÇeqGïá¹5EEñÐá˜NuÑ·9Äãž65ù¦Æ5EçÐãÞ ¿ B±¹IΛšœ“ØÅ^Uf¨ ëÁ!*Se@u ')Ø:¶ëø'¢¼7æÌÇ €_9sš3špø¶FBrø¡û}«õ6+Cú ­®tuV0(Àünð`Æ> ÁG†I!žO¯N?œ¾òÕãt1…±èá9@ ¸ÅÅ¡œ]M/O®.ÿ1èÙ  €èWŸ4®>Ý8 ›TlŒŸnámâ¶®î3Õàõ3kK¯×–SßUû¤jI9Žx ɯ—«ËóӋëÓãÓ˃u5ÿ¦WäóB·é¾x:ë ѱ.ü;'úAC!ýI=–8”ë¶½Òíéå–@4Ôv[]»=À!Wü ÀW™dà~¦Ð#úçáUf)7ÛV¡F‹€ï½Å¨‘HOÀ£˜,…¥Ó\d0›iàͶ¦‰á‚sðÎô\TÁ™Ee+*7~˜’ aYÍp?±(¡5膯 5mÚZAÓEve ÿæEK±àØGOÖJëo7.‰%` :Á”EÿíƿЅatÒ,õh¬²~ÈNWxåg®ú) AXogzŸr;fÛ#u`™, eð ŽË ŸŒc·’…AäÜDÂnWžI “•^[ŸO^egåæÝäøUVÂáËkP;ÖÑ £Öéjð£Wíû¶,µºìý[ö?_ÿ hƒ•à˜>‡Æh„4G'ütçñ£É×üBš†nì\÷â«hÚ¬é%ž§“5ßøëb€Ø@2£sZ.B.ÄÒùš·+¼ŠÑ›m W£Û‰Þ¯ypÃm”`bî‰àð7ù…þaµÌ UÍÕ#å3ó;üÇÊ\”³-˜($HÒ@°‘p!+ÛcN±ZÈ,mÈœõqE ?b°®!)ÐUŒÞê˨Ó[mÚ ŒÏŒV£0J,S¼Ÿ9Åê[õÍ ¡ÊûB/¹ËG–OÄä"ƨüÈ9Ù åXÕv³ºÿ®XôZÇ%„\ðöÀ¸ÓRO/¯mö^”9J!®pññðïà8äËáådzy~~eԨǟ!™R‹\.¦ê¡Þ÷ õpøÀÁsxÈ¿õð¿]Õšbž¢è:jùþÛ6u³UÙ!¿+†&Ñ,—¸³ë‰÷ÈÀrV?äæVÜ;¸e¼ŸŽZýux|S,S”ºä¡JOÔ‘óãÀ…–ï¾³(ﲄ8Tåˆ96¾Ê.©V3 qª(*ÚÇ|‹qå;PÊzWé/Cw”ã«,uÆ4¡ËN\ãœ8é/ÉW=mAæWX]´Í½^̽<è„áÚ7`—E"(F—[XZû¥ˆfÊP´øHÿú¢SGÅ’POd[Ââz\$Ò…"‰ï ²/KÞ.ÈpÜQ„a Uª:¢Ž*ÍIÐ%F‰´lx„PÞTI:,q¨Â31¸g`r^”t`&Ä¡GŒ=Ê^üµª)~|yœ¹íy6çhf°}p‹ð Ó¡ræÃÏx¶øE~{ŠÒâÔ!]W0‹pøLô¼Öõ”™¶pÜÁa»ÌæýX£ô‚2s“™³° LçaÂì³=™+Pø×7{¯¥zVÐ.>~þéôlúþôãÕ‰^$½ÿIÔ`!–øtÀÓ²(w\@ýW¹lð䀷·žGÀ±¡”ðlˆ {´hæîV™rP$Ï\;–Ùž™¼˜A¬GHå|ó‹‚ÚYö‹0$ËÐÃV鯓ó³ÈI‹Ç¾*WøÇ¢_ƒ!!–CN²lÊñ;:½‚_]Eír@‹„Î̘/«?Q ÂÅ«¬öÒBùM}Ó,f ˆ€50µáüvÐÓúª{¸Õ/Þ9üJ:ïò˜ÛrQ©~Ù˜M¢‰R`_â¯Z(VË~¹Kb‘¤þãðÓÇ!´NÔ׎HÊ“FÍ”ÝvÍ¡a©÷àô: Í!#ÁàKEî¶éÞÍLêRc‡Ôθä³ïlgznžëAzB„Ÿ]lpVÅ}µÚ®¤Iëõ¼¸æ XŒ Û~s%Ä—ZsiÐEÒÔ›òÞ‚¬šaÈ!cuY$þa>)Ùç,ô~f¡7PXb0¶©Ä/±AâÑ _~‚rÎÀ(Åbéã¾°Õ†GˆòežL ‚B ‚BÄÀ¶{ͪ¿Ñÿ”m Ñz Nbz®Íj _ÓµY HPe®~ú;ñ8"§V刦š—´ãÕ­ÞÖ¯Š%—¨Wº.z Oi†ä3 iÐ10±Y ñ»½§¼ˆÝÖ§ê[5ÜÛ k2LØá·ë5Ié¾E¡º«2ödërÑÕ|Ó×E]L‹ºn6…=ìá'41Aˆ BêòQžTEMÕ’éÞ=¿-Zª#–“Aèâìv³Ygźꎴon«õü¶nbLC…ßù³}ìÉöãp~WÓ/ÅlÆÇ}Šˆ„—DÞ§¦z–Q§šáævUC6±®Õ Kˆ ˆ”=¬(X ƒ ‹n¯ëY –鯟늬ö#ŸjÙÀ:SVð}* ©µLƒª5[}Dä-êbL¥&1ú€Üv[£Lçà—ûØÜŸFéÛÊ^t@“…Â+>šì¨F¥›Õí˜>$2Úˆ¥Gfv5­Šj9¨xéXðMI¿Ö?Á°‰µ€IU $v$îWC4¬‰Üa%¯ý=f³¬ÙT+X×¹6"ºf[>îéK\ ¤ô³   Õ#IW½*—`{°þ²†ŠÔZ&ªq°Õj+0¢-Û xìS3öðw%VCäý“.c«›Z/AÌrí«·1åË‘Í Q°j$öNo› ¼¾Ôí-¢L§Ô#Ú„Õ¹Õ‡¬.¬­Ú ‘}¸ººÈN 5;j–ð)šÈœËëÙAHˆ!¬—ðŽ—*ù®v =Ãè§ë—ÚÚ¦aŽˆâíªÁPú…ŠÕ¦ÑJʈæSìèjácí£,ðh¡á(&¢®VèmÃõŒ¤‰ˆù51÷T-›ábi¸Ýä‡Åk–¤XÅŽ#†Yü¸IíŠs¤á>‰¤€ˆù n<¦oö ±ýçAp4äÕoŽôžqÜ7Þ 5˜\>¨°Ô£ kå5ÛVËEq;,P¨H°°ôSØÒó ±è]Sy_)<*ØiëQÒ]([¹p ØlF”ﮉ¡«z‰Z”Ó´´vDñF“|»r=Úsº)V´V¯·õ|1¢ id#äröE¿|c¯MÑޔтÁKo°F”1o¤˜EÊo˜·uQÅ6\7y'‹ààF8ZÚJ×ýM9‚€ˆ3tê–ÓÑcoTÑ/}‹YŸD¶q¼œõTôÊþ¶é¿ÆÄ3i÷µ‹Q´nôˆ§«mtUþ¬‰[]ŸÞ©£¼¬fèThy?àPòÎÀaí”m[ÅU<ÓGQ`/Ñ4²'™ó*^ÞÂIY`.ã=>¡|¦\©åÑIkÏ20®x1ªx!ŠÉŠ>žÆ´é ×?#™Š·+̧¬ëWù¶´Îøo_›8ŒèAƒïaçËj‘PT†UÆ 7í±cF3Ö øáVÖÌÓú×ùº¬'·Õõ&Ú½¼·BÊ;ùÐhÈ¢z ‚ozý$#ëˆtÕ®ÇhV Ä~™ñ`ïS5oÕ\o² ˆ‰Jïå.ËUƒ“ÿÅ@cTÅr£=Û“¯Z ®'á¹­9•„5eusó€Çýð)4-,4ñEÏx#0ß^>¹ÌÅðÁ!M·}¨ùYU÷Œ7wUÝ®F´ é!ò¡ŠÆ7H_«úòSLÝoM=6 )CâÎWPºuEÁ"ªVÕ=wœ&“$ŸÚpÍiß[4| oöGèù¬+‡¬w[…#çýÇâ¦rtåÑ:±BQTÛM3‚CS°f ]›bA·6<ÂÌV Ñ;Þr^]WòÈ ¯"É: äNMËù#Xˆˆá0NÄú_çƒ5Û6ö%‘_¬I•ˆõh&h$¿P¦™ èømÛ–Óx'èR±áÁN?ô BØ@ºíToD5¼oÞ´Ûù&~ƒ%4w‰†“ÇZ½7F;^’S6˜“Ò—ç0o³¶‡³²]#‚pàZªCÔ½—’¿¾ôÍ| °Ö0y*sùBÈáD_‡Ms³ä'^ð43Nê› q ô´iG`ƒ0\ƒ_ãÖØMóçÀ·k¸ól£ƒPâØ 9‰#åÚYXqzJÖ§ x‹TW¶ÄúKËÉÀéÙ)ùV¨n~¥ÇÚÙ·¿ŒtrMÀ»™¿Pç¶•ìÅÏQ/S¾m½ŠÛø¼¢\±) áy\}G¶»VL£Wy VyÃÚ ¯! è5+Å”’!kßj%Bæ(4‹Tˆ¿*½¥*ïŠáÉÖPñ"Exð4L~$)k«õfLЈ"¤wäÁ„ÇxVMïÏ‚+L+wëÆaÕH‡}H힎‹ÿµÎl +`!ºB íìxÖÜC°t„Ãá0ÎÏ„êÞ­îŠc—¤­©b #" ð|ùéÙO[0mOA´]nF>’°V¤F=øW‚‚¾óPŸ"8¥AO–Ms¶ÝâQ/2íÙì< R)"{íΕ_ÂJ‡}\NõÒV³ž¹sˆÞ.šº¢håØ|Ë4†Ã¯q¨™ õ:† ì À«nµžÒ*vS‡ÞbêŠr1Á±Âé/•Ù—QKþdÖt0 Y€®¶àžMe'G?’ß”·qèj5V­xjÅÞ•7fW,·ä¢¯È&“O´!/ÁL’–K› ô^x>Jaî¿í`™ƒçUÅ×]! / û´À1 }h˜]+ X…4׸è´¨ùmy=âfH³C&ÇÝ#.üÊ ¼¿GW†ò>õHeÇDÔÑl ¥{tZ#åÌqZÇ=d¾m[ØæÊpê{ ÄÏ¢"*Ù¶Æ}X·Ki@xì€æ=”‚;á ^Ò`ÑôJå°ýWšçu‰Ú.§ßvÈÆ.ÿ‰Åê'Ô^}# º~¦†InB:Ú׫)¶Iy|ÐÀ!c .£tñNŽ>þýÇ25 ߺ°] Õ úà<ª3BFlê3{4<ž×[õr¸˜jÑÛc[Óµ³¤Ã#g4Á#¹ž!e´Úê6ÕltBJ(±ç Íæú§lé&ŠŸuÊáÅiG^ù0²rd –ËäØÛbæ·vÐs>¢PÕ²PtnׯKHø‚\Ì–Äi’ÙÑb4ö¨€|±h¨Ke›ýDáÆOÈ«6ƒ¢åלݪj^÷d­s‡Æ•sp£§Šº³Vx…çStŸáñ™„øM^¨Br38ÜÜË+¹¢€Q½¡,Þsq>»QE?ãÍüúD7¨uÕ }Èfµ@hÛï©.ÓlÙÜgg§à³XG…Okx U­G”™Uf9þŒjdö WlÅ®¨–¸K<½0>†é˜€­ú±ˆ™B ¦ Q‰ˆahB…Ç)>º¼kǺ›ºLØ38TÆÝÛ)PßÄ…-ïÖ©þpÁTz§mq—¦(;ú‘Ýb€_hqjŠ^ %÷‹ýLnGœŠ&@±ÎGŸÕÏh×{Ùqn–æÐÌg¦šÎopaۯģãÇ»«³úäZça¨µÛûNØÍ ‡3>ŽJ>G¾œ%©P¥ÞXÖƒu&$ò¤€ܸ@2|›‹d=LlWôÐŒÈ;zoËå®ÙÜY"Öm™Ló@?ÎX>ö°GDÑn¡¶33© hµTbònÙ@ï¦-À?j)œ¦qó”eÖÐ)ƒ gÜAHøþÈl†ÙÜ‚:º_¸†SeÇÝöSºqî`hôbÿ6~‡È3àˆP¶7fÅ^ÕhrOn‘Ð<ÖI¶ír@—Îe³õvévASF¬ÞÏ—C±hÉÐ/²ùúÓa©Ó…=ìèpð¿1®ëŠÀPp3ƒÞÚc"0ƒ Z”óÍ<~Æh2夎2Ò÷âͬª!ûe ¹rÀ‰Á ¡Ô5ñ—Ô¡áaÞò€ž¯ðŽN‹19Ð1„Û˜¼æ‹óÉéß=Ðdò¶½¿”<þ.BÙù4œÑÿ¨Ý§µ›hk?ÎOà± Õ+BxÑUzÝs äðg”£¤@#ûzzÀ&ì³ÉéfùÐU‡–#ëªî9ЉÑ9&'Ì8†+x õÐnמ¨QÛ©¢DA$v3Æ®¦»5^Hö5œ§8Úú;š|аM@6ÕùŸÒ9õå0ÓS|ŸN* ì 4¸]À_‚eЙlÄ뎸ëÉê´ˆ¼u<o݉Á[{Áw>žl0Œòc•J(Þ×£Qëë1 iŽvøS­·azAµj`$&!¾$Ü]êöé)4Ð0ÒP” é6Í^uìZ‹ |¯Œ¡rh "HsÐ`°$1³Ån”zg¢Ÿ ÒM»­¿iu‰ŒZLtôâïÑfñ†C{êJzİ[ŽEòh HsÀÏdý@,ÊëåuDyí+¯SúÄ—‡g¤—¾ü¨jÌj§d¥ìñܶÇÏnÖ‰€,eˆIçtaéÄáÞa¾ L3¸ÀªëD\Õu¬êº‹ªºÞ” AæB[Î’Á9¤!<Èê„Ô‘QE°ûFx‰àlxU7èþ®Ïs¯u„Á+Ÿ&æ‡þÀ‚FC¡{4\M”fê‡~özÍþ ÎæÔ¾ê~|ý/äÀ.˜T9›£Px?Ǫw}?æÿBîŒUŠ&Ñ+^ÌÍ~‚GáÛG(|*|ÛQø¶Wá¡ð¡Â?tþ¡Wá¡ð¡Â?vþ±W១ðO¡Â?uþ©W១ðÏ¡Â?wþ¹G!ILצ|UÌ.z<ê`¬­{‹Ý”~‘Ð úšùºÞ†ºÞî§ë{èúC¨ëûéúãºþêúã~ºþ´‡®?…ºþ´Ÿ®?ï¡ëÏ¡®?ï¡K¥*R¾–hSW›b¹g|:·Caº;ßpoìðoôn*1p=Ïáè<½ÏdŠ#hÀ6ϺŸyü< ‚r”£Ô›¶T¿.ÙZӄωTRKÉE\.6`­Éó´ÎFª¸KÙU5³Õì‹ÿ¸Oá•c˜üíc&ø”œÞɆÜq¼vÂ…Y"DKÚÁ¨³" K¶ïêE© ÊZ¡¯:†)¸=Œ­ ¤CÛA y˜l¼¡¼b˜£\ëÜyõ¼\lÛîØ)>_±J÷À¯Ûj§RÑ»Äø˜ÁédÚõ†ªz×|+Á!ÒÌ»(dI©Ü {ˆÕü¶\©=êfÊ€¦ŒáæÁ4Ýì¢EÿÒ‰XÚRÈ‹à„dë*ÇÀTÚ Lk_ O­—‚²§9ȹïÔ$w¯¢GÉ¿³¿)8jÊÙ2:Â’oûÇ[Av‰ì–­_àï—xºˆP§æ˜ï yF:X·åóŒÞmio×±ÙÔó‰Öë íwœDïs#ç1~Ó\Ogû"²Ó "Lê"Jw¤ ›Y[ͼÿL›Ý,ǾJ ‰oŠ€0$! ˆ}H’V™gvâƒ<ŸŠ!œ°8Ä@õbJÏ;F‡½!&‹ˆr&Ê™ÈÅ]¡®€’í¯ÉïsëuÅJ®åù\ä>Ë6Y ÑÝ$sŽÕ/OŠ¥…=© {¸õDå„b+1#轇ØÐ{RSkDnmiœj£&ÄñlÒÊc @$§ƒÞ@[zmàöŸ†* ù¥²™`Á•¥^ŒCl.§$²ëIü]†°²½ê~‡y  S~jÆ×dÓv›Üšº A G‚N f„áB |Ó£6ʰoèð·åz©çVø^ø¸‚<§¤e7(•C›[ÚNã"½8´IæìUjØëƒâ6­ !yP6“Ý)ŽÉ‰¶7Éom • \®¡77¶ª˜,v¼¦ó Ã6='Ã[ yäDØ%dÕÃ/ۮ鷭+¦˜.ÆZ…O% 5_8­Éh÷Ä“\™½_êö°m‹‡ìؼ› A {ð& „KèáÀŒ ¦1ô‡žQ Ùo¶‰7ñ£ º½Is{Ãr{¹½qãV;ã1Çq(®aR X: ܾp~ÚåJ²Nª”u´RÖa¥¬½J}&wéu³¾Qu±NÃäP¸ §ƒ ]|äÀ7D™™ºmÒª/lÔÐ&Ÿ_ì+åx%BéA ŽT\ò.¼T³Ô!aÖ7$Ì"CÂlß!áݲX”Qœ8–w½FoìñÚ5Z3ãÿiÍhÖÓŒfÝf4ë4#‹g¬)!4úhŠÒ§òoÒô[ œ‘Ë¿vž7yZ«º}Êd¯níd¯ngzòh2Á+ɶ^%Å \Që…Ù5¯Êñíù…¡B°¨UïYåèªÆå¡(ô‚_^ðc¯þõøºø¢IWZe ª*®òGܹþm#ØÓ©Ã‹Ó¬”Ðõ¤£Z±©Á¨|.útÑÌ·°’´!‡IŸHb]üÓèíÁº-»q±GÎdY¸ËnŽaoõŽê™4êÊÕ);zH/(,_Vl²7[Õâ³fq7|ðï‚æ™ÁøæøŒŸÎÔÂCjØÜâ]4¢¥-Ýêµî'Œ´#\—*ƒûÄPS³o®!pI†w1…Ò%ßdò`dþÁÙz«¦Ý|tWåx°ûƒj}¿{fsóúë ýëåA[ÌfÕfõëTÕE5b ÑCLÒ%3çL©« «èê¶R,–7WŠ ?ý-cBeÁ•÷d-‘†. àInŸdŒJ¡ñ‡•1$0šìHë/vÄàxåÒƒò%ãuPR°é4ˆ.mˆbNwÀ‘3Ngú&µ¥m–Õü!ŠKBÁ¼.Lv¡l0v5^„]g˜]Ñ!¼`|mÁé¹Mll.i ³:È0u¼!™S_£¦(1Êk†â‘GŒFÛÑnt/% àìÜÏÐûá s}Í/ð\tóo|Ö4Õ#œaß” :vÙëvÍ”kA9 ¢S­nþÃ,á¸N ä"1¨u¡'ã§ 9ÁÙÐ¥¤kM tûô‹Q–Ô¹½¤ôï¡ÿà ¹^g¿£¤œ’äÑÜþ˜C/ê7ü{xþ#Båa`æKÒqFÏíßc¢È×K™§éÐ=ŸŠ9t0ôVb”Ýt¡» ßÜÙÎr8dÖÛú»|ÑÜÕØ(º´ÇÀa ‹Yx19¦Kì ZÌÂ;Ì,d"W?d½ñ&3¯ØLvE‡õúX¬r Ð|1X>„<¤ÃIBU¿˜°î TDt%LaB™?Y➊êÃFˆ– 5´ŒÔÐÒ¯¡å¬G;<:ÎfÅê ¥™Jà\lgzýaæ RTë ¼J‚äRúÀ0'€Gäbó÷*“'ˆh †çöDÀGöa¥A¼“ìÀUj™ÕÒù@uzS'¹Óþdò1ƒÓª¦ý yQD÷á-êñZ´4–Ns!-jï`‹ü‡âÙQ§YMŒâ¶œƒ#¤ý©ƒ²4Ìà‚7¦”:l|_RY8޾ב5CžMøÜìøý2 ! Õ2¡u»T†jé·jòä92Š¿G¢#´Ñ*`ËôD8>u‹s;ð„¼Û¯a4x•Á Má4ÍÃ)Vu¼ ¼B?Ø›‡QÌ¡…+.RI3‘:N™‚@À‘ ¸=ïœëŒ.©ïsùÔù¢¿•àrx´x>•Îéná8ɵ,2I„öª§zi1ÔpÁø(*‡ÈB‚Dü­u4>ÒF„ÊÞøôTÛhNÃSÓ NR—E»J€àSº`ês¼êòŽ‘jÏôý©©+½&ÃJà{mðÍoËù·$|.¥sB|˜ø|ćS–Šz’…Ø£;¤>ðn¯¶ €îtwã¹'!0øx]‚µ›÷ì.ûëxÖc'Ƹ ³v¼RôŠyb± ’6—ÍßÍ÷—Ƨ³øý æöª!ç_B7cjS1Æ„u;Ó#dbÝEˆœ˜Ù­=—)¬>s>DD¦ñ5Ø0—„A`’QM/ÊÈû1?.ã‹_-.åzrDQŒV4bžÜTZÕ‹g$|¾Ýäç×ù;H·±ÈÅJø’8áú^9(GÍ飤!F×|Þgx*„v¡ôñù­Û%*:së/–±i7Ä6í²ù¸‰,·döV‚(Çm±~@ñG—§½ôF³ÎÏÝ|§ÞBVw´nË› ½(B:ÞË;„töaòɱX÷u°ë$sP®ˆçºO•}u–ãùwøgNÖQ2 GÏÅÙñ; âé8éÇõ‘Ìj¾íÌí͸Ïd"IÕäªquŒ*ùìU§kTn—`_`ɲUœ"æò¯2µ,ài*„mYn©Ý5¶ÀfcѾп^‚@ŒSšÖß»¤F2fuz¼ÃÐ=´£¹ì’©ä Ú å JÂE`H^ˆ8v5"zÒçÕŽft†±{ÓlPe©6b“-'õ¦ðÂŽ’· †I qÙЦРîO§ìöLKŒ‰ôqdƒ/쯇9Œ28@æû :òž±Wšëâ×Qbì€Àkúfùªoz›ú7ˆ‰Š6VqSÊbYÜ?ŒÊ'2¿ ?aÚÁ …æ¸`×”3û‰Å…RËœBŒ€ñ/ëû¸/…ü_á5´õÏu êûÎ]—£Ú{¼pdœžýÌÉ=ɸî­î|kãüpP_ÀÀÚÈïm6¡Ô¸²VDp=K#``X[ÿ}ø¤û`&ÎNfF¼õ^ŠŽéîp°ÓmJÆ™Œü±G¹7ºKLÙës• - ']W%hNLz²0às?•ßN1ˆó-­XÂÓÜhQžgƒ}-­EŠõi`%—‹à¯ ü¯÷;+Å>*Ö ‰¡ªwÎgÕe„³ºKpN te¥ÅÒÏ줞·k8Ð㋦Þ0lp<Ô~Ç™lLeÅö÷FV–ËæF=GbnÕ<Ì—ÏVFf…ƒ#ùß:þ/ßȳ*x TÌîÛºÚ<¼ é|†[¾†ìH°a.£Iž°>WaŒ<(Ì÷ÙOöï#Qß§ðe§b$΃שë iØšý†3StÅÃîü„˜»È‘}%{js ¹<Õ ðŸ°š5ÑØ¦G#eÀ4»@ÆŸ|DƒƒFë…m5׺ªùv‰¡Zò}Å¡—x?\dè6ÙlRn¡¼_·ÉÔAÅÚØ€U]Máòvºx¨‹U5Ÿrœò6á-†‘âÆG“¡ÿªrŸ³øÜˆÇJd—˜zs§°‰_ë} ¼çé,;“*ÌKÉËÞé<=G.tÒ¯[žƒß3™†¥æÛòYæJöå0ÝÖ-„šèzŠNieÛ6í_•˜×-FVîʺ”Ô쳓úžo‚öfÛê…¯Ï9M“ˆœD@‰ úz–ºÙèÆGzHÓ° £¡³ úJ`ã‘pyruùéûÓ'“éÉÙá»'Çž&UìÊ)¾%y¼.‘£ WÛäðËÉôâðêÃïñÉûSÞ3‘zaª>_žÑ;úƒö¶ñPäR°4H1Ãü AçÃÉ—7 xÊŠí¦‘Ñò¶ÆEC]ŽX§uèDYsºUiH£Vò—úë}(ô&¥¹Þ€¹tÆÄ ÁȪnM@hᘧƒÇ¬eÝ;#Æq&¡ÝSI{ö¨ÙuÎô›²Ž·j…úU…ãê0Ò­€U«ÜæY¼‹ŽEMVåù2>#­Š‘[oKÀàt‚A¤ÿ §pz€hVeF#Ù%6ë’*QЦX¬Šõ›ËóÃãO‡Ó§?x[›nvè‘ù‡ˆŒ‡eüÊø1"ãí°Œ®'? ËèzèŽÈøã°Œ®ç툌? ËèzÔŽÈøó°Œ®§l#C'Ǹ1#8K¡,á 7)Æßý>Â:ÿ'ÛÅÈAkHÆ­Ú$›¶mRúÍÂueGšêœN›ö¦¨«ß†¸vfœÁ‰ÀƒnÍÍòEËÉ=9W…ú†K•صÚìÜÍ}¯‡ÐCdYŠ™â¢ÚR'»~XQ=Éà)®[ ;~¡Èë3Ìÿ xTm§ ½flœGß—ë!7¸!;·ÙöK†ŒøEÏàc>@ñ —ð5þÌÒ)Äév½x‰{¯ HDÎ"r‘9ud>ª•¸R/çgü©ÓÄõžâ;ƒ”‹–eyC†_U9ÊÊQ–¯5{9ÙDç`0—?¾M¹‰‰PŠ^Ì îa\r‰Œá(•ä¡çP8Û¥9ððëlCo8%eîÛ²XêýN‚±c?ƒ’Ódz<p Ö\V4]¦Û½ âò€mºbç8"3t §-‚F7û–Ÿs¦àÐe‡ÐGaAZ›lþ˜m£ÒÌ$âÄÙ1”˜ŒÃ-×·P,2Ý·5:!ýT}k›«ênÏ'ï3<4À—†œa•‹L8™6|‹îicþ7þ@@ ""P)ù¹”­ædçkYæmqïû<†1(V^ðÛÚ®W0Í 7†å®W`ïn>8‘ôx’¿YߨH»¸X¯²Åì@òiÓ9ÜM[·uŽ¬ÐªÎñÄÖö”3ª¿ÀT³ÕK&=bóe’d¹ Ù¹ÎÍ ;ŒÞî„r³Ã£æ¹økƒmÝ6ðh# ˜Oë£â¼'Çðpa©FT½•«­òtP–ê€G…i1•¯F'nx³tÅao HT^ä’M§k$ê’‡ŸÂÞb$Mt˜laðâ9ÁÚtWÜ@¸Š@·,¾Y›,Æuá·ànú@½Î¶°6¬ÔŠ”¨·9¥Jå2ïQÛÛŒiªú:y••ëÛWÙ×bÙn)*éûâ[9y `–Õu‰÷ cxBBÉd8¨Lš L °Ìf“Q‰pš››1!2 …’] ”â;'£$½P‚[é$×$¯M;Y‡Ša¯nÚb‘ÐØ®µl!¶ð–ä¸\V;ðí _È^; ±:<¹Wîqpm~a^PÇ5Û§Eïl:,’‘†/È1P}ã [ì”9Ob«ùzjâ|‘ ì·1"Øžnµ˜ÜÄøB1¹c<Þ^Wàã?….CºÍ á¢)Ñ»±žsàV¨%+«ÿúÿÝÝ–5½B¢ƒ*`ù÷²QØgwôþöv68v«³Á®wÉÊFeœŸ ŒáÉÙ!ñ˜©ØhÇÈ {Šçt×Õ/ø‹ÊŠkܤë§ôg!ã>ÝgéÊÕ?¢Ã4þør%{£›¼ ]–#þB*Æ.©¾$iGssƒ{û“º/Þgœ§ Ç"wÈD«$[µ’â=¨½hé(+Ýl¡šåuUWtÙ JðÝ®G‰ÔŸ†AñOêÓ$ÑÛåzùaÕl^¶øŽ™|*°íÝÞTƒKc4Bš­üIgWä?—ÏÒéûíä 1Z×àÙK)(x €¹Åf°F¡M%¿^p®(ߌàk¤õ⦭#ø<"AE‰ ýv¨ƒW­wi'>Hÿ ˆ/NA·Ú&\ôvé µõ¯uRï@’É]µËj̪!Bè)ÆŒ@3¦ù„tS†KŒ‘QV›Å§t±pކ#h$'GÁ,1/àø”.Îñápb÷»H_o ŽÔ7Ͻä¢È‹ç.c›ûÊY#å4‰ €$«Ÿ{ÅÆQñ7ƒ›‡u ¢ðì/Í9­Ð ú%Žå7‚¸)k°ýC_Ž•!«Èjr+äA O¯žn^Dç3KˆÃ:\—™G’mJŠW¯ûÃŒ÷àmƒª—îø0å¬"Bi±T¡/\ aà©)gð„á¾(XàÛo,R Œû“KOUn¦e½«Ú¦Æ#‡}– å&wYaÙ9×Cý)ÄF¤íÍáÕ‡ ½‚=d ƸôæQùº„yˆÁ¸Zoõ¥íü;B„:©È"„D[DÄSm¼ÜH2„5§Q£*]*«S]¥˜`´Ò/(5TÒ|Û¶%nchsØnk ó²ˆïFÁwÍ 0HB.@õ&±Ofüúøy:{0F(éÆ'Ž­§ÊgÆøÄ¼uÎfæLT޼fw)ŒtûZ8|Ê;ásB°éâ]C”çf Ó6U+î#g×9g‹‰¶Ôaô&½ÂZ¼‡6ÍDŒ–1ö6RAëc0àhä8ð:̼>„õ‘¤îà¸ÓdŸ¾œ^àrv¢ÿx XÍ™µ¼`K­Î1FƒÝš a¤Š{…Å+[Èm$J(Š„4§àßì(!­0㬦8_‚³³…NÆ‹$®Â)ž8»Q³‚ö+Ç0ô^´ƒù û@ÝNFµŒ®M0KÿŸuÞæL{K±(Ï'§Ï(é†ßQ·/µÄžÏ%hTÚk˜U.IÊQÒéJžšA{'[TÊÏ _k-gEøšu¿÷A¿—§ù,ëKsî^s-0ÁlÛ‰*O›WÕ¿³®ÁöàP¸ª„¥;g4Ö¬²ªÉ“ökÔ²+aóŸ´$5ÔVý6ËR“ÂaŠ]7Q´7Sš4€jm¾Úl™Yñ‘¦Û QL&ÈtËJ|·¥Ö¢ŠM+ЈKLº 4wÓùVmš/ö{Íü9ñÓŠ"›|8ÿ:=ú<¹:ÿ4\^M Åêj/åeûÔ{ïŸl¯Fbr#Æ>øŸ`Žót^ü-¨oÕzý|ƒÔ¬ ÿvŽpð7áˆÑÛ¼…˜ÚzF_où°º©|r Ô%¶lu-/§#¯ì\ °Ìí+;Ìv=m¢÷(ý]–Nø×{ð¤¹Þ|„`ßZ7Z%%ÖÀÒZ#-ÑÉð-ʼnŽKàeåCIèùXï^€ŸÚ±Öáá j4%võ±tïÝ éX»Wc‰M:ÑS¦ÓØ®ÿ†C&X£z|Kø¿þ-û^|©å¶Y":¢V§X[޼<¿”<ÂÆñÃ9Õ…rÞ'§Ç(Eõ}×,Ý#ßÇ&ýä~1Öäe£îôÿžŸO ÒQ?~B§ëÃÏ%v§ôþA‰Hs1 ûç Íß;[Ò¾¸Ÿ}UçÕ˜‰4ž,¤uÁ™< IvkïTñCû°Ìá£g˜Ë÷B!wÁ.ìÃë2ºq@Ë´Ù]äa+`è¯ûÛý°¿Æþ¶ûÛìo-l5„;¨zƒ¿ªõ¨”Ò«|J5å€)Ñ3ùÕI™Nkù‰59µ€^.Ö)ˆ-™W'XuŠW©/‚î¾Í>ýQ Á Ÿ”L •u<þñ ò»j:Ïf¸tG3¤y7æ\½Cæ*Û9îÓ-¡û ¾|<<Û¯e¬ŠvãùÓ ‡IJh7L©FG²mn/½¯-f™Ûe¥sŸrCpt`ž¼&ÔÍ®^%™[†dŒE' ¡÷ŽÑ‰Spíóîqrö ÎLj½ôOŽÓ¥ zéï‡ÅqHŸúoŽñÕÝ~Ý)Ñq`•J'¼gÍF3Va58åWv¡Èö^“ £Ÿ¹núY[öbr6y™­ôÆÞQóFoç£ú]*‹S,DæíÃÓQ­4ÃÕõH{ ðý7¾µžVJmËÑB"ôf:ÝèvÓ·Mcwõ$_ç$ô<Ñˇÿ×Q™aîýÇÿwflK˜eŸÚ=ENØA%ý´•÷!˜á½ût‰ƒÓH矪içåˆ_ ŸF4bšU†?û7 ä3ç¤ÿtöù _·S*ûtN dŽ<Ó€G@¡[ÎsjÕQ²ñ¤%Ž 7ÅMʱ±bÌ‘Qü^éqo‰ÃGq‰F‰Õõ 4›v»šÒ6ü£´Väå”g>ªÏâ cŠcí)³¦×#ØÑ!BŽ×­\õÙȃ<÷Xƒ™ò횟ÞM8%û¼¦çv`J(OÔzYmà*¼'<öàdÀ-ʸjÖÙG8$´ÇBÙa wÊàôŽSÞ=[äǸÍvßNø^ œzþ\óçÈ?‘$pxŽÞ¦ptÄccúøzøÆ( }[§Ÿd µÑ«ÿvÎ2ð·s˜×zm© ®í™Æ„È>\]]d'*û»F_khuÕwjZ. µ©Æ] 0 X"Ê5QîÙâ´ÔWâf¾xŸ0NE'–KÙ’®®±Áo*˜/&D”íTvacAb±& ƒeõê­…ÞuöØrDµvÇœ{ÂIÙ©$Y%˦Y§,‰‘.Ð@¼FúGøy€g§ÅfŠ«‹qÁH¯§Êrm¤·z°É‘âþÙ£}£Ó)ÜÞ° Ž àæAwüW=h+sw}uN7ÿ š5{_Yú‰ Øp ˆÒÈÚ@å͵ør…òé ¶óäcÎ D£?¶ã¹x´z, pý_»52»QÝ仪^4wtÐò w]Ìüºj²E¡ngnþ¢lÛäÅ+R Lø;w9õo^añ¬øò5“§† ˜¢M9 kÀq-ëÍð÷úÓ”kÍ¡×÷«>±Ⴙ›­)9®x“MÅåmEãfL)éÏ—9òÑ|™}¬`ë VIõéùéu(qØÿàLÌðtc 6µq˺ñ[y”ƒkYwuyzöÓôê'àgöêäR/>7jZ(&3èòo¸?ÅhEŸÊ)·”¶y,4óâox¸ÒÓ¸Z—·ÜWÍ·ÒžÕÁ‚c½é1i­[ŒÆçm‰!‹¥Â"(rJ=Ýëh!bÔ¶œ›c®[ ‹rN¸ô"²2Ê2^ú‹¥Q?è*ĦÒg·ã¸+19'N1D˜@š<ÛjI¸ŽH óä³|›`L]l–[·Wx°^fµžàË…ueÅFÙzðÖM¦ð‚Lä·3¾@Úë´à÷Îd@½rΜ¡í àŒZÞ‡d¦¼œl>¶IÁÒãÊ®ç ë=W«_4ÚBà@µ]5ËæFÏ“©3ƒ0zþéÌ’4~¾!”Æ&hnFL±"”Åɱué$º›Qt(,/‘ °r¿i‹,Aè0C§ršÝ6ã~È\plôžôÔð, ½3ÁwÙÜì‚{€½عgÿz  ×÷ºU7#È´ïÚ?Œ®x4¢Ó¬*ü;èž|¹üC¶¦Ci­ïNï¿FMú4¬ÒŒ>úéêôjJÖÁiø‹ùç¿¿Ô8¶ë‘ó‡B0è‹@ÿð®V褋îTf[ò ç²ú[·ôP…–³pôPÏoõÞ®úmd¦ëÐ1›nðØ$šÝ²»š\›ºCD9tf¥;Ûªøf¼XÓÊL£Äå¢5Úûu[é %Ñ õ«Ñþè’Låö@üå~2Ç1'e¾†¥jÓ£ÁôAÖG#Ëbt넜ÉR!…c¼’uˆAŒT®r× XPíÇæÆ\úAáq2ZuI\Ûz´F³N³+[Ú@™…-q<Ãɩ霭a²¨¹+Ú4ì¹d$Ù†{òÉÕɧé×ÃË3½lœ°ôÅØgqh\¹ ç“ÀÏø3Ÿµ«Æü'DF &:Zð·72>¨/F×ëƒM1GnK½8+Ò\nÚ»0ýWîò^7Ù©ý²ÑöÞR‰ ä]Â_ é¦\Lyê ¾)Ú{.—äÊ_HÙ #[ËÉœ«¢i \[]ažÄRæjð)NCÿ§žDAÐTOÞ{¶D`Ëíêð§Éôòó “ÚÇHB>5ùùôB˪n ºclg]:‘©Óé:]Z›C½.‡˜‰›…+ †c.ô&ê;2¯ÌyÑcV”ÀlBœNÉ™\8¨½kO}ËERN’r–tu8ùyz|òîóO?\NO:;¿<™ž\^žëM%ÍnOßÄ£œÈÖ=Ú°á[ÜŠ¶îWþ<Ø€Ã\o>øÑ}"D‰æsóo >Jipö#Ç/¾sX´ €¨G\™z$@m˜Ò¯À%E¶lîòEsGÑŽU ¯¤ˆP"tÀöŸ? k÷ˆD?%ZôÛ»|³»sòÌÉ8ð¶ÝôÁ|È'ìJ…Öê‡_²•ßüð‚0Ñ¥,&ô†èØÇÁ%ê_«ú—âG‹f¬6¢SÍÿ0ÖÜèЫ±~:èñ¯Q¯ßÏuO,ÐBp¸>•B©¶ œ¼H¾2éÑði5úZ½< H”6‚îÈ\§©M/W›œ!reF“@Ãh»ª!.a¿²[_…Òáh ÜzVËÞ£—€ÌІC5á=⽕,O«hRFw-ˇ¾d>1ZðT³-޾N0©ñ²EÆlvoÚH0‘n™Rƒ+ãÔù{ã•Çᄉ&ÂÔU¥…%ºˆRT|½$Ç^ö“hç »~eŒØ#öq8¿ö î:^fDM%nÂã¡q:’"!w}ÝMXÊèÅ*Yäóo#F5VCHäË%¾Ï°1òk3âÓÁþÆÔS`ö¥FQä¢QÍ'ª¬)Ãý…faT†0è‹·åÔ3p™^wÆüÞ-”ÇÈ:oËÜKFgfAèt|ê šÁ9¾¨,».+¢¥Ó¢è<¥X*«ÄäV̕꿂۳‰$lª•^SU« ^VÂyË ž¢É4509gÅ<òY êѵyð£œ;7Œ¯»Xñbv/ÀGj¼ªíŽìóN?½Áî-zh’²Œ[ªvé\Üž=ªCº_#‹@5öê¹€\S/K¸à4ÉÎ#‘ÜEb9ñ·÷^\L], ÄÓLGBÕ„´QT~%Y {Õ”½§íÀä‡ û õXâ mäàvðÈ"pl)É/ÍlJïêÊÐ!vÑëÌœ2}Ü–‰z4?⯀mf.¦e±ÕCh"&8ÄD™]L”N%ô§ƒ)DS%uÖ€´ƒ¤ ;­0 øÃ¯¯\i‡8}ä!žÎÁN‡q¿6¦9Íá‹ú®¨RkÏ! ÑBV)¤"ʯðGg\!LM~úÔ­€B ˆ\:¦ûXHÂ^Õ…,É z1Ž,Bîô¢lx8½ð¨{Áõâk0ê”d1Jk}Ì#ß¡D%cp£^2–kÖe ÷òS·qD©‹ÊxtóI*f6 ˆÎê# A³)Ç.B2$û e¿ºAƒëúq4™‹’}4²à4°7»^6wûŒ¶}<.N¡éw;"ö+°»#0øÅFo¥>soËd§Ð@Ëìú/g—©‘eV!/¬^h5ÛÍmU£ã¬Ñ³ª~ú8Á³s±šÓ8ïª%Ø.}'—„qb’ù øËõœ‘Çl²  KU3ƒ#õ-ìY7z‹·½¹Í®S×·ÞqlŠåðCŸ€ˆ‘p¢Á¿훒ÂÅ!ÙÛ¹‚°O릞κt¤W§C<)HÕ©¿WW8 \,ZøLk4ï‚ã'ŒÏðùh—(-bß ®ÃQp= %¸ep \¸!sˆûãáü´ùJ³¿«bžV«¡¬3:õ*Ä!ÀO‡G©5[oÖpi Z‡Ô‚ÓYÓÉgB€gW|‘×ìû¼´ý†>ÏêVû¶75ÖÞÔ@{S#ím²{“÷z 3zeÝOïÀç§œï¡÷YCðœqöæ¤ÃÁ¡EºÄ!.“Þ‹g»­i6¤´ˆ §Óm y§®¨K|þ|z<Öow·³"mAÑGmABngÑa Áî>¼;Ìì5|?R¸èGèP9È ÕC !ãA§@]Í÷¨ªµHçÆ«ÊeëTÕÙéQRU©¤ªRѪRaU©XUM«êî®Nkñ¡…¡3:í]ˆC0_¿žÁôë׋³Áö¾XMµJqµ%et‹U®³‡;>ƒgw®kO,}Ñ?þ¶®` ]M ¶:ÖEÄŒ_]Bž7~9Ä!4tÄ’lü´:¤²¼“jCæ‚i®Ñ~žsÜÓ‘4*E»£J]*«S]¥˜à™¼«YAN|+atOY4î~Pˆ< ~,9¤¦@¹¾FaòÀõÑ}}窽®ÚòNoŠÈ*ëóû¯ÛÞóL7 \]Ö1ßÌ»<$¹ù¦kÌšý8»ž>#ì$€€Ü ƒ3$ÍØÎoÇâá„TF)¥šâKVÂçžH i¨$“¹Ú òê/uõ¯(ˆ“}TF ôÒvˆ¯ìÇz¢ÿ+(ðàñÙd€²ûdgºHldß;®tñ§x:X”5„ðÝ;½eÕšTq]îaEQ,vp’¾`c4Ñ RŒ9Ågü CöeqFhT±Õe{Ž0!t$1-Úëd·Ø×2`”‘ƒ ñ5‚E^CÊÿ¥ÿßÙ¿e»b¹-E8Ñyª:á©C©¡:¼of#¯ˆºt¢Ê¤›a“Ø…ؾsˆªv“}Æüì VM ÏíàN|ÛVÃL>«n+£²­Pú>Eïx8ú@wy„°mÛ™m7Õ²Ó ÚeÊ}º&tK¹EÕlÒ ñWŒA+öýÏ—µìõj¬ì–Bäë[~ýƒ ük%KUvì““rŠBúHošPø;×y誜å~ÖŸ\^ú§ dæ‡Ñ!b[ƒu‚ÚðÂCìgÏ`¬ 7Eöyr2½8¹œœN®Nή¦Gçgg'GW§çgT×jOø Š˜¾¢Wp…C7ÔPQtís0ü¼ú€)èM[.*EF ðûßQ;ølÙS7°ü7¥Û¢5Ó§ô¯ô:'ÀŸËvV¶h¤1™|ÀÃÕ[8¤”±y­¡› ¯  <A¬ev8DA÷ô—íjwñêEÈ;'nSš¹1–)2È7Î[$ÔGÓFwì§T€ºaSt!Ú4QñL¯žW^pÑN&ÇôÔÓU‹^?`Z¾h«.-x¢† ÉdêpŠ©¥ž©§ü4ª¢KHê¾ê•1\?âú£&Ê®€èÀ3åZ”÷=âíëqèn14´ëe{"5­s–¸ÙÇÐÌ¥ “.òš‹Ë¨ºÒgj1([ç“äw“ãlByÆ’ ÊŒ»01_©ÎØÕUzC—MäX£.F@ 6|Ðÿp~PvO1°q À_C—ok5([ˆ"¢/8«+Y§ f–Ë ‘ï+–ßå58L4îÏâ¢ãÄÍ›fÊcÎóÍ;»Õ  i1bÛ%žõCf¸? )¿iÈT^é?9îmþG¬ºeÚG÷±UÝWÑ!™pÒð!®X€Ç–#‚clŸ¤ìÆDwz¼¢ÄŒ®Þz4áÛïQù@ÅRÅP"UòÚÆü T}°ðÕY§eï`er!i=jôTÿ-A<’±Xü;.ƒ}­šE9*ÑPr0oŒö 8_èÍû±õ.·µÞ¯¿<µ«×aCÿ7)ƒ{ªQáÞæË4S=ÔPrŸô¥xá—/¤¤áØü~å„:Gw äIå#.Þ¸¡ÅÕ‡a‡ô;´ÒÑ7æÒ‰#_ù}¶mî«Rõ|BŠ@Žq`ÇÇšœ œ@ZöADœÖcÄëxiH™ÐЄ,¢œVk¸ÜLÌä$ŸY)ë ßþ{Tx8‹Àz¤Bh“:^!LGÂ?Òƒ~Oz)òi}²‚)}Tj@ïÍ~’×´Ö»ñu‚¦ãÎN?z$ÒË/ñ-4*Ø#gùôL^Á ‘¿yø×j )C* Áö:Ï%oWÇZ òê¦6_n “O.~Iì; oHŸÝ¬+CZÒ®ûÊ‘&ÑÊ2C; %èT,ûn§G—ñÏN‘Æ”úäÁÚĺó~¯¿ÜYŒxü×ç;¤- Åá'#ðÄ{oî܇u½Î3F…䮾çi™y%>*βPËú‚—¿<è¾– ^¹ñ½ž°x®¯ý!y¾‡ýì3:ܳÎÓúƒî%HöF*°éý:>. +Fš»èuõÀ­‡Zú>› Ù¶‡†î”è,9®ÄpÏხ¿™ôƒÐg$§.DÖ†Ë?¼Ýntñ¤FE„Lj>,(d¨*ŠCOm ßuñëˆd9§30ß·t}³|Ð[˜oZÕß¶ð>3XT ;ÅFV4þ"RóF# ˆÉÞ¢Mà°l¤qÛ­|1\•QL¶þ—O÷ËF¿r.ÉÌ:z9¿ËíÜãºw¸Áý-þ6A›‘u](…WT{º¶¹åtŽë¯€%¸¦¥‘èààѹ*½YLrúè¼>EN|°ÈœŸñRÚø|„ÒÁPPØ@(t º—[h”‘6` Ë ¶P˜ˆ)Ÿ(]t¸v/gë,¨¹yÑñîÊò¨ÍM×Ûð’; >±çÈî·â QB·9÷e måUÒŽÖ@G/kpò+u8×5ZöÝë,WÑ’à#üÛ¯¿twûžTËÅ¢m‚/?õ +Ýòp{ŸåËÆ;ã"zJÔ›pÔK„çZÔb’qÝGÄ.®«òÛBYâ!D]Xú ‘š I;¼ „+=õUkÝòèuzœ¯pÒ&²r‘Vî±õ2„EüÄ  Ctb3¹Ö “àþÇâ¢_|$ n3¥HÜ»–7(n$Þ¸+™h©°üÛ¯cÏ]öˆ_k–(,4ô;Mr»a}D&ä¸òÒ,(••³©–ÕFŽ4c”9ëdk‰")Ƴ⮸i‹zó:Ó˜4ðënÆž¦‹`»VyŒ`âþB¿`!³]kÉËÊFÀžê†_ª¤8Ø^ ,”bÂdå$ÅlÐ1ׄXÏ0÷À¨,ï ˆ÷(­¬Ïˆ8‘?šëìî¶lñ†YÁ…³Qo£i¶¢¨R`°ÄŸ€¹­Ä\$—ðÂkBöIUͯk œµ6àyü¼ÜÓÀ¨w$|9¼<=|÷ñdzqyrtr|rvtb5©y³~R}³€É'[*£Nôúæ¬}4Aag‹×£É?0cÅ\EþøC–“ FËãbò “EJRq~¥H˜©šP‰ßìš³ùîJØU¡q»þ×ì=’^z.ð´ÊA$ˆK“`Zd‡idg¬arƒë9Ñ[t`¯Y©ñØ ¢ž˜ " O@Ÿ£>XTˆžé§àž®HŠ´‡æLO‡ïñKªìœ:b€˜dœ.‚u%_È6é`7/¦#v³ «™¹µž%ü€Åb!‹Œm»å¾Yd7ú£‚‘ýÒ|¨¿‰ãÓXµÃ$!HU¿Ó_xT¿Cd@¢‹~{^ wh'–Vm¶;ÔyèÒ©F¿;=Uëv£›Èr1²åŽ’ ÌÊ)Ëbq<ËfLAcê0ÍŦ jƒh©Ûz­Ê$H>­‰óBPœìÅiþtFè»#¤È„Bw2Ý@É: íHG|DIeå”e y ü†þTÙš¦ú¼ç·E}Cfñ—ÅAKèh‘5ú&,Bèct_¹Äd¹^6¾x­Ë;°‚³>æ³ò¾"fàÎWWȆnŽîŽv$b3/ò…# y@죗̰Ç"TΫ¡Ì£è‚m ªºt3‚³  5M#/ïé9·ÄºÍ¾ŸH I{œa©„ì0’û7ü Z4uø,Ð‡Ñ 8)tŒ[5ž/D´vXº®J¼A6 a¼˜*1ÖRH탕\³‰bFÙxò¥¯Ä‹Fî‘S(ô|ƒÙL Ü–{ÔCE„Ðâz©p‰­W7ô/§5·uzê®ntÿ xb~[®,P5×?‹$¨©–²B¸”š˜i1L„£GÌB{äì§!Ûš“[¯*5Àª¼ƒS»:[m¯‚¿Ð¯ì¤–Óè÷´©«Ú‘yˈÜÖÎQúoM¡¶ö™ÊØHNë›=è¹s¤tÌŸw@ä(w|z ‘;a³sŽäÇjEŽÑ·Ž!•£Ý}åhÈbúÍ h49æšéØ¥ž%3îò_r|Ž!%¶ ü <ás~õR€Ìšûtom–Ç£;{^›ˆµáü †ìVÅbØoŒKÁ:!ÅT<üð‚T¬Švs>é6@èJøfRw¡LØo‚{:›\CÒºïýáß„±c*î¦ûÌpÁC„Ù|Þùž€š'Ã]q=”r'Iá`ÂJêŽÚkrº[ɲ{@­O)öYº™ÌO1ø”³¨“E²ª‚†=-|H¿!bûÚ-=Jàjc"Ñ?=mcjè÷ôv³Y)rȼ»* ÆJ?¼8•À~lÙËB˜Wdó20¡ŠSôµFXç!A ¹¼Ss=—¶½3Ç?ýÊBÊèÐÆû zÕâóƒ]‚ÞÖPèÂ^-.i`Ém‰yªÚ”aS3â‡~Á–†Mð°<›p²çŸ/ú=D€×ÑßWD]X‚à±t¿ŠØ«êì*àîm[ÓbΠö}ä2qBvŽÙÁŽ£ÃHïIÛfKÝéÌ-#Hj†–èžqw[ÍoÉŽ¡Ræq˜.7¦\@{gê40™z Zør>6„„ò‘@aÎ4¹ˆÛoŒ1¨"7j}ÃLˆ {68ö8*£Ë¸¡á§«Ú¿O— nì©DtX ±pð6>dMçì‘ ½§D9<,Bí/>»³S§}¹ßU6ÅMÆ • ­ˆ}ÐáŒ#ŒœcF°üÿµÍ’Û8’€ïõ<Ì¡;Âtíî\7¶£ºíÞvŒËö´Ü.÷\”Īâ–$jH©ÊòÄDÌcì¼Þ<É"30H íèŸ |Aâ/¼½Ãëï'î IIKžÛ»’bC"¯†L?ÒŸ—f¼E–0ø—™Ç½\|lèdj0m³É|ÕU R\ÓðaÇß©õöÔãêtv[R‚ÜP@oI\9Õ¬ùùX5[\¦lÜ ¹]•égp«¬ÚÒøâ€;ØôB®&¾bÀêœâôv9ìä”:’ù±AÙ‡ˆ‘â¿ðBÛ÷œ'“RŠPQ(ñ´¢DFÀ½lô‡T²ß]%Á®½A©·Â‹å¼CšÌ1œŒ›W"]9Q¶@8YÊ@ŽF`Û \¸³'ƒû$L ýG‹|Œ-ÛÇÛ¬ò„Ò²[𨨫Þ½õÙ¸]Øo?ü +žo?\‘—ÜÞÎb¥%ó¾·› !³WSš?v5/Þ,Ën§Ú Î휖¯iHÎüsní^¨‹õÞî_üºÀ]cØæbjïöÅõðý´c]V?öÂED â–´‡mÓ0¾¿’l%lëèÍ0z}Ï9ayxú¦²…ˆØ (Ø>޹ø/8ôi ¯ôœcT&3— q1.&¥œ›òb|%'Ñý&Örž‹On%%–µÊãÏB„Ùz£y›È%\—wpb¹2åü·0¡#rE™dÔ71L"ÕDA׎ &ý¶ÿQ× yÊö¡™E’Z©BY©t±œ{yöQüÒÂûœeu´ N†ÎxPcêJñH¼ôâ%ˆ«åTæ¶~¼@ÇWÁ÷µ¯µGûp}ÃÚ¹ž×W”FÙóÊ=QfV¦9OÝ|€澓‘ŽRFy'‡$’ÛïSF!fòO §©G«\ðóÐ Ž÷7SÓÓxÁ’ÇËéà"),ÁÏt—³Cc5ûåF%ë¢h܉ gPR»–¬L‡=©°ÃÛ• Ëö¦”ÒWmWq²µ¾ßŒÕõ~“¨áýÆÖ+\!x_sêïúïñŒ7ûVg´M‡1\€›WZî/&+UÙa ÀMZþÞã¹›–'»“Õ§ÔܸÕAÍ]õžÇz ê±VŸ)ŽÑÈŽëqÜüo ÇÊ|ÄHGdTÜ!ZÔéü½éæêÛüb¸í[kï ž4ßò•øW:û—ÞÜmaOGÛ½óèøqHq ]æ6²Åê÷Õ¡¿Ÿ?ÎUõL'7ÒKɤRÝUPŠýãŸf~a5Óm§=¿`ÓE+Ì„qÒ$8Þ)8íxl\GGáŠ,‘„ôIæöðJD3é²÷/ú0óy¸²ñ€Ý9캊@Ç•€A$ àÃNº…™ð=ñ ý‚y]ªV›±›3¦ó‚ê» &–\Œ1ï·/¾ ƒ&ß<•E¤e¬™Å‹•”¢ÑXºX,‘ü"ÙkÜóÛ‰Ò͘ݦՒ%Ôç·JB¢jåÐJ-ÊÃÖi3‹jÄ¥`kÄq†%_ÎÎV‚Û$꾟٪B uß§Û“WÏoL°Üš×æ•d¼ÉŒÓ[OD¾4Ÿ‘”öÑ\\MMá¶b# å?þ)óa¸læ¾× Å‘¢Ž¼ÛabªW„y¯7ܳ¸iŸöÙ â‚8­.N~–vàSŽ”›ÞÌwM'2Üj ]ÍÄÐç][â…ôÒå*U–¸~ÅÿÒ À‡ {3¹¤™`0”Â<À)ؼ—$ÔˆùÀýXòÕðêÉ·¼‘Éö7À%*Ò›ƒ>­ãòf±M6eð‹þ¸æU²¦3[©te‹dÒŸ!¿QkåûÑŸ7!ÖU”²¤¦ÃA£³alðöð²2yÀ¤¬g„™DÓŠ a¥ÒD$“ß/xoZZs?þº^º0#Ÿþ )áÈ"“ZöÕÛSßÏí§C …½é½z<›æ3 ·PJÏd±x-¨wàblw¬“£Lš%‘l>(Ãí/ÄžtüŽæ³XvÙXrÍ%´–÷è& 4i””F¾ ½½<OÀeWfBGÑ-Bx€N«Ì0‰Ô uótn.ñQdIÍx“Z©Rè¯aœŒ8ó”KgÕfÖ¤£ã©»týI¤êßûñiÀ,­Ù@ÑJcìðdâ08#Sè¿Àô)ÃàiÜÌi̸ ?}£vM»æ®C_M»‡,ÚH\’R´ùð=„”ƒ"Õ)ýÆ­?bÝÝ3m–.hïðbá0ƒ”솭«ÜÁŠEkÖAù=ü`£ØÎ²ÆµÄIYá¨8~ÑÇ^¤N¢$,Y¢³(ŽC$0r>Ť@§éÜgö£L«$FçGµGª$4²4A²x¸T›¶ËÄfc²#ènŽxiÍ•+,[_j“ÄàXPâ)ƒ› 6òÙG…‚3Böj~}α!¸G9¿9…Â"_©6¯¤˜9„[º]iÎI D™ëÙ²»»–Õ÷­0VÛ9µ1¢pdé%õ¤%G·~Xßq.ªøîÍÕÕ÷ÞŠ5¬_ŒœK4%ÕǦ£’É?$&¹µÈ ‚ÇZcN…×Ѫ꛵ýêîXÑUgàJÌÛ”‡¸¯Å˜gyù‡Ðcå°ƒ«‹j¬qélþ§Æ{PgY¸ðÒ%…€E -èâ!“i·´›–95~Úuy›qWÚÈàÄz©õ>ì3@Üí¥>D0iØ´°•Á {80› I6hˆÝ%°Š `lºˆåqºzÝv›L!,p(&Æ¡ð‡‚¿Ÿ±B„¨ ËïùËe"ESàù­~ëìBGœ Ë|â¡0£àXOÇ£»]Ý›‘%=…J{‡fçè<:K„þ.Îa’D_šà€‚døÒ†[Rƒüá: Óúu׎9šÂ@C±%ÅPBS²QTAQâô€˜||`'/ÿóR"k¿Fï2ìqÆl:³ÃÄS‰m¾QB„Ïœ ÛÎè–ûxé*ÍÔ텶޲̓d˜í+’’Eîsq¶ì{ Ž7ÍÿvnLA®Í×Ù¼Ûw÷ÁIuSYÉŽá ;ˆÿéKP}º.í97­Å¡Qª´Rº’ÌtPiÔ·ÛÓŽŸ°× 6·HS…IC¼I:+{³Pÿ+¯ A¼àÆ»ˆÆ¹7¡ÂócãåÁ† L?U>Àˆžå7ó„Ø_1ìÑ3_2òñP_?øÑ†3¹|DƒÃ!åÁk M?üp¼5€o:¬ÓŠò FvÉÁÚî$æ·ß¡bþr6j1¶dÏ ©ñ¯xu³rÓ¾Üv¨És7YTZžPnrV\ikrªšC›æÔÅ£òáCjûìJkûd}µ½VUmŸ[KoZ×jæÓù}I$Ìù R#”¦AVìê;XnÌÅTÄ9(Ek¨\q–¤\;ÊÅUÄ9®†)¸\q×ÍÏR¸_6Mäˆ_1SSÀìŠSä–;jUÇU§ën±ø…&—qå}ÝWp~ÑW›µfW`ZMðÉY¯VJB-2˜Ç•û-gïZQ¾Á~˜œçÖzÊÀËÂ@iº^ÉÕlX™_¼Î0pÍ\j8›ÎiUí÷SùFr6c^R¸ÏyåÛè{r‹W`Qœß.—4 ˜µ- 2šp[€ ûmv7%ìð†;¶E ñLomFr‚Fl_¢Â@²Îˆ¢Éh¾g}xrކ&çöËv&–h¼ä4Q(ʨ|” L,Y= ;¦îY¹1žxfÛ?ÎAS¤Ýö @®Æ_ÿq0í'8›ýCu—Ѹ¤ §£ FaÒÿÄþ¡0af4D­‹Í¦ÒtÛÍaV=jòœÕħêR¨ŠÚ|ýâ¯Ïè%™àÏ£ÖYCˆkL{w‡Þ|'y„ G¢IEaÒꛂ ò v&ÚE<·68Õ¬—¦3"Ír¡ØcEÁ¹š8ùƒá`ðQ¶…WÇc5òlÈÆ"ƒ•ËqJ —|t|Çu7p± ïm¦ûÿ@ŠaˆÞ߉ñÊÁÇš>óØ^oÃ#Œ‡paZ8‰Ã¤„ Þë«7éO^–qÛvÌ;ù(IZž˜ðb Ïü–;:EÕß±aFL{3lq}¡}ˆé ëj}C·ËS÷løT²(U´€‡AÐO†oƒ—Ñ«ú–†.n2ï»Éþ¡n÷SÏ+”r6t °ˆ°¨Á÷T±«îÌ«uc¢JSwæáßÝ´¯¿/V][mÖUÄ#œõñâ©^ýyg‚ºÓúxê2½¯½¥®g1ëU)ãýççÆdùJDy¿Ö”ªëZ¦½ûû();§øª‡÷§ƒ-)*Ÿ‹¸,~}¹x‡Ì.‹ú¸þr¼%¯€Ë)Wª¨ÏÞF•Ìm§TÐn[=¶ÍÚžÆó7^… œX_·ÂånÈ#Ïl³Ê­ /å³Y)±Y©·Îzj¦à ¢é-Ž”tL&69"5…Ðリ·«?­Ø¶‡Nk¢ÑEW&®xm´lcbS@Âñ™\B&áAœÂÁêÃ62§·øû -ü—«zY;owK¸„p‰Þñr|çAp” \Õ¥O£„4JJãÆ?™Oæ5s©w.BЉ1QXg›2Gt³»ÝÒ팔3:þXò†áÁ,»Î÷mñ®Y?ü@ù<5Û-צúB™›#$%’û,þ{óÉCˆåâ E½ÿjwæÿQ”˜2%÷ãÍ~½=m²<Àûî²Úº/–I O´’+rŸÖ•ùhži ý¿ ó¯ü,"PòYÑìàZö®…Ó!®c £¬åªÃž¯ŸÕ½Ë±…a[éõo°ÖîÛÓvSÀ¡åºøÛߊ¿ÿý‡âjÛ·ÏLk~.ì|-^À8øh7¯ƒsÎâñJH@…Cm‡¨ÿËvûæ“€Z·ÃpzÎ$Ý.ŸwYòóSµ‡«ÊàVVô¸»nŸúê¼\Lò°D‹. šWSm‰y”G y@ÅÙsÔŸQoiŸz*‡”ÖàlöÆ‹õrúN³1™I”âN3U]¬Nã u(È õîÛ5~ðÎ9+²c ÔK«´ªºýÉÇÚE ˜âÃI¬>¤½­+6“É•**¯IÛØ±ŽPg Ž ©H|Þï/ú¡Ó"ƒPÈcÏÀ*=°¬×›=”œ¨6еµ–±KË1"¹GÁD1÷—Ÿêõ‰N–¹`ØÚUˆ›f¿1=Y±‡‹H÷ñøB#Q9ÈGÆŒC4m±^»mÖ°bäç–O–oÂCMmæàÓï¦`(˜ãPˆ;ÁÓ›Ï+8€/ ÆæÛL€†Ö²¬ÉÁäÝH¯Š2¨èþy©@ŽÌÌ× –×÷†‹n‡' ¿‰í-ŠÒÉc;CqI6»)ëIU4ÀŨCÅvÊâíå‡_^À¿Mú§=íšÞÄœælSãÓh¡(CŸ<%м‚<¨Evw[3&=T4!7oÈá4u¤,-Ïøh ïâ¤TlнZã]|/ÜHr ËLŽf «“Pi]$çµëCäå®Þ­jg{B7šÙQ¯s^”i«À„pTa *1»p3€1Bf\@š÷÷®0´Å ©L0$ÏÅŒ4"ÖAB"ãʾ„•m*¯â\êjÈGÝʾÇ ¾>x 9z Gƒ¤9Èä–„.!ñí‰@Eô¸Ž$|•¬ÅYÓ»g}Ü×Ç¥“çÔW(Ë !®„8IèUÜNŽésáö‡ðâÃщ¯_›ý-|ž¿yù¾(Nè¤,b¿žFó2 ©_ ”~¯öíŽ ÞÁõƒ ¼)àÅâ§àæP©÷M×îw9íXv aqœˆÛÃæí<<˜-Mhc…,X·íIêØM_Tq†i£KŒ¤B‘6U:X+„ß n\£CYØC ³á’X ÿP$rg©)ƒ2Oà“»\Gã”Ó¾q?ÍÏv¦ÀûßvD×dÌn™ãjäŒÏ ‰¯ý±=™q”øØÛ¡^W¸†Æ¾d˜…]Íã‘— ùüÚ-Úv™‘›yñæåÇ—t†juj¶›ÂJY°Œ9Bä'†@äìÀ{…±®TÅÖz]£Zœ$ô‡z Óçb mܼ€ÄÝ“< #9»™CY»wê\è¾Çί¶A7ã[’•4YË#i“}Á.’ÄæúŽÅcW§c»¾˜pЩ›®#)7 ÀeC&œCXQrÙ>í·mµ¡†L&Vp?å3üïWh~~ÿ>G~bgÇNùƒ™„ƒ¤—:” •µM³ÂÁ ‡Í#Ô±¿Õß'»×Ãè퇽±Lå™»ž¿ cÊÛU…Ÿ €ÜsËr¼m>e01ÎÁ’Bø·:õ©&IûAlšÞù³ñ«±“P#J¢*C!¬%Îë†{E3B}õjááŸêÛÈÎBWU$¸ ±elmèpãŸï¯¸“÷ê%Å5L~§^¬\jt`qÅ ðîÖãˆ+ÓT¦lÐ’â¢VmLüØ%îÔZ)8½y¬ÊFhbóXªŒC! Ø(7û¬±M$:  Qœde2q¨ºc³>m«®@éÆ^÷’véþ@w¤2÷QÛáJžÊ ֥߽‚¯å&W:ÀÅG®ÛÁ¶Öf¹éšÇéâ)ÂC)²ÄH^D®d?ž‡Áº Bi­Îˆ©Ÿn“ƒ #èEë3?½¹<Ø)6š½µhYÃÞí`ë/'íú&£Q0‰Ñd­¯¯h솙ïû~zŸ‹ ÙC Ï~#À›Åâº(qöÆ|í§õ4•]Žnû4È›‘IÆ$ŸK ùc(À¿%ˆ¿0ç`*)7dä<°¬l¨ïKV×ÕÞ[:0–æ®ÎzÇAÎCˆÂèϧÚôl¦©Ó¾aá#ãÉ:øvÌ 9Þ+Ç{Ip¼×Æm®ÎÎ  îs–P…ƒ¨û`Á”B¼ì;úifv©%æCNÏtÐú£CÐ \ßsåÜÌÍ®¼¯·U÷U¢$i¬©ÐYÈI’P”ñ@´äT^íËÓRy’À(±g/uDíΤ´>fîfhÒŒbã= ¡F÷rwíc³a‹rVDlg|ç7ϼÀC}þžÈûúS=½&Ä+ H Öã¼=õw´Cµ=_Tðæ·xøÊÀ5æ3Ÿÿïñão¡(Å ,!ÈÁ(D¢Ù~Sž-^Ø;ºÛózhs]eÆKÇÝ_—t|’H—À\|Iñœ/På_‰_1êúÏîP:¡Õä|Šˆ‹1š³ü1Ä®bàŸ•C L’»CÿŒœ… ÏûÏÈÜIØ/ßð6L§ó\+í$:h@M“@ð@k,Ïl/ñŒ™5 G<_øé„J>ƒ¶Èé ¾øTã½— 0Ľkøƒw}øRoê[ó…Ù˜/÷Ñþønqñ©Þgß1¨ËÚl]œ\°Tfpô««áÈ*Y„yÉ‹©ZøAc3÷!³å]Aw‰ß̦^“ÿkü¼9 =pq3øsµÛN¿ZwÛ¶ï+ç» _¨?˜÷”—k8N‘ø6@Ô%H‘"üU’<æ ¼¿_~ýýi‘ç.åívÍS‰Slœ¾ÕòY`póÙ¤î\²õë®®÷0ƒ:œŽ”dŒ¶GØûؽ†Z1´QÈrwÉ”,(âòçW¯_¾¹º~¹|ùñýË7‹Woß,(ã»ö¸¾¯rŽKû A–ŸÓþ¥>ãµ$ÏLg‚UJ”Eöý¶AUz¾.ÍH& Þˆ‘LG+»›+¯½µ²?ïÕ§Œ …ô(Ì8¬6æE‘”*ø+Ä3ç‡óñ¾5“Äó!ëÜyµy„C¶‹År‚ñä9¥XRŠ˜1Dáõ£ Œ2Ýøˆ’ ¸|:?~„¿ù[ s¿çÿÓ_«ßÔÅÙT'˜LšÝ/ wWw´JG72Ö¶ë‚dJL¦ôÉün ó+NçÓ¸µÃoÓ=yó§˜vÉÂÀÀ$œe€õ‹ŒÂG±o&máTÑcˆbDLAYxÿý·ë ÀšÎgØnû”}gxRœ¨(Z»#Ú´‰Áåg&œŸÎ9UÁEÃø¢€àµº4ßoÿ¤ \rˆ„¤@¢˜€ÉŽˆ” ™h2Y ߺ¬€ —¿[ 4›Óî`Å 'vñù6ç ÖPʒܰz±ä§æç¹â1Oê9æ=•k˜ß˜Ÿ˜šô½2ÑÖá!é¡Å4qH½9Àˆ÷ˆÇI§†K$èRl¥Õ„UnAbÛ¬¥ð‚½ø C™ñê`6iñU?Ø×áYAÏý™é¨áTØcM×ýP»$q·ªõ—¶ýS]̨÷6f,a€¼…ͦé7>†õ 4Æp\>‡k[>gú¡ÿœp<ÿ9ö4ÿYu-µCtÔnáÙŒ¥ÇgêBÄf‹A>Gü¥ÎžME,~[¼´6õ~¸<3Go)iAá"5íèÉ_ˆ\ åþÑ9ɱ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.441556 ansible-core-2.12.0/docs/docsite/ansible_2_8.inv0000644000000000000000000060377700000000000021307 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 2.8 # The remainder of this file is compressed using zlib. xÚĽ˒ãFš.¸×S`ìôBe&(«Tê6;¹)cD03ÙɈ`‘ŒLéŒÁ@$QŒÈЪÞálN›Í¼\=ÉøïÀ¯p ªRý¿}¿_¿bR l“§?îÓ&ÚdETÅÍ!¨ÞÞÓæPnƒ¿q•½ËŠmúíÇCsÌÿÇ¿áw*s_nOy ÌI#äÁûc´M7§=ˆÄMSg›S“ú‰e»Ýp)”æYqú¡*M²8vè o(/÷Ñ.N²QRq±uÁd™÷ã‘HF§&ˉ=ú;ø³*CÓC›è›e‰¤ NwiIÅU•Û,IÑ;IÆ_ñ“‡Õìf>¾L—«ÙãƒGÎô)£¤qžoâäù¡l>”'šeé·$­¨MñuÀϘޢ¯ þÇx»%ÝL”»RªW±Ö”Ç,‰ŽåKzu[PP§ 7¦$ίo¬,ó4.®ng›íSÔD»º"¹ ¦v§"aƒû0Eiñ‚ãT.(ŠÆñ:1¬?B§ ‰Rt53U7»²>^ÅÀ!=ÕjpT¡=Š‹¬É~O¯bŠ–-s¦Í¸«˜ªSˆq¢—8?]©`xNEÏéÛØNuîÙû¢C‹9öõ~<ˆí~ÄEæ3×kyq0öìËßÄÈ‹÷ ýÈRëÏþ9@Íöý¶L‚ð/þIhÁcY¡ÿë;>-™Ü®ñ¬$ZÌŸ>ÎVDw/qm+¾¤,vÙžš¡œ¤}_'ˇÙÃÇ1~|x\­g·ÑÍôöñ~-–÷‹õz~¦Ëåãr}˜¬'ó4®>G‹Éj5ަÕÓÝã¨êFTöeò4_¤ëXz¢É|þø5ZMðŸO«ér<½£.S8ýe<§?Ì'ÇCv?]z¼MÝh] Ó7N±ÞNn?qlãj[«.º}|x˜’^udÅ‹åôÃì—‘•®g÷ÓǧõZçó üñõÓl£ëÕH:o&·ŸÇ,)¦qL”ó.ó#‚|œÏi Zá>lýi•ËèöÓäáãôn4uàã|¼!žj½›Þ<}On5·“õt4…³¢ÉÝݨúð\tºUãrzÿøe4§IÜ5–²O³Ÿæø¿Ñ*Ìãç±4­>ÏcézzXNqG ]âX*¿L—7«ÑÔAÌ?†®ûûÉÃ݈3Ü­ÜÍ ÷›Ì£›ÉrŠÃ×å8j?ÌFéXøøŽ'"·ëUtÿx÷4§ý¶š¡ÛWáxƒÓ×ÑÐáÀ:-VÂêFÕG†ø4î$›ŽBó¯“_ÇR†«ÊzúËù6[-æ“_£Éòã*Z?F«õÝ(ñ%× }ôbz}z\­Çpþñ6ú°œ|¼Ÿ>¬Çk$Ó ¯aJ*ÒÇ1æ@dŽpEºŸ­V¸"E8œ»›ªùéáO2pþŽÓéâYóíÓzœApäÞÔÔ“}˜Í×ÓåxÕçÃãò–Òc)cUepŸGPóq2Ÿüòk4ûøð¸œŽ¦n ó‘Õg<ª¬ÇSLZdž¼š.¿ŒÑ†?âª<]âna,UÑêéf5]¦n´¥V—£ÙÃíüénºÂc `oÇP¼úÝL?M¾ÌŸF(£¢ÏÓ_ñÄ{zûy”¢!*q¯…û2ÜOÖ·#ô`ŸÖëÅd1¯ ›=ü'ìh';ÎP2{ø2™Ïîè Š3`9»yZC7>›±¤Õãàqù눪ȦÅÓÃûGÔÙj|°t1ot…£.bªºÇZÄ5ëm™TU?Z÷Õ)¦aâ¨õaúËâq9*ȱ†;Uc´œ~œŽZN#v^\eÛxÇj¹ÿ‰;ÆÉO¸˜ÖÓ8_ºMåÇXòû<.Èúáš¶c„ÚóÙÍr2FÏŠ}™-×Ñü—Ûèáq5½On¦#lÏ'wWØm˜?bdÄfSÿ‘TFëéýb ]ÙÔe]ãL¦æŸŸãÂýäºÄ±šý¯š’åÑ”Í'cT ¦ ‡ì´–ŒçìÓz6ÁÛ‡ézÜ2®p…Ãö±–w±Î¯x†}\>âZ8ÚjÃÃãHÓyPôu@ÐfGѳÆWºÕ¯«q4>ÍçxÂqÜ Â“q‚ÐÇù]»AO#Üùt2Bqàð`r?ûüØÍõ&OëÇqv[ÝÐ%º è¡èpµeµ†O¾{3Zp+é&s\”kI]Ó•t¯—s2¨áñcŒª2[À©ãQÂX ¿Zsëhùø8†ó¸ÝÍp8ðeŒãu°ï1½›>ÜNÇÐ5û2YOIû‚˜t¬Ñ ,4BE¡â­>=~nŸVëÇ{²v;†¿Ÿg‹±²îïO°LOF¡”2]`qn;.¯qœ‘´Ž¹óúÆ=Aô³éH…²^â_¦ËÑÎâÒ]óvIb …K<Ü}üuúÎ$®¹÷387Z£[OW#xmF{ÒÇå}»ßGbn?£õ㼸µæ¢ã„ dV7ZáÐë?x&¶üu±ŽfxN¶¥aR½×ÒsŽ+FÚ)ïîR}}\Þ4e'{Ùy9Ü¥r”rùur?'Ž>LÈE¨ JeäS|cï¼øÿåÏQ‘6¯eýLî埊¬y‹Ð©ªÊºI·½ÕŠˆ<Þ¤9\üd‰ï:cœ þ/ÝR XmÈÔ†-Wت ¹ÚÉ_þ,Aè5—g¨‰Êʬ[Tµ“ê(þWÙ_™˜Ù„»³A©!¥2K&üëŸÿ;¸‹xŸŠà"Ã~y·*w þg}8Û´~÷Âþ¶é ””ˆØª£îTÿúçLI¹ùGš4-LLöuyª¼ÐªÜ2hL UÅÞŠàþ; ºhV¿dus"Šxe¹‘½ó‚‘ E ^èSÆŠ;eƒÛû¦<5Ñ¡Äíä9}‹’Cš§oÁ-K‘!äå~?†a®wTDï?²âñOVµüŠ<Špÿ–Á³4¼w Ú˜ô•-Gðš5‡à? ™iõxX"®ˆV:á üü÷wq‚‹±úÏíË&Œ}÷.þ Xi|*_ƒmÌJbZ½[ÿÆ CVãθÊÓo­õh7ñùɆLa‹&$ 'œ0z &:”EqGÄV’ÖM¶Ë’WŸÞæ×/Ä‘e!f )˜Ú¦hQ"5ÈÉ„äB ÐQð={ÿ„“oqêŸd¼a[¡à™ 0Z§`\6y™ô²½'³ÍY¬d,«f$5¨(¤ÝKÞžY¨ä÷75±ßæ:.öé䢀?a0{A…u_H2 b„²}[ ÎvÑ=Rƒð\Gp†'1ª½Û…–G@]í% Õ^Ä6Åõ`Qâ6øH„ƒï§‹J`>]ìEx”-kè½ØLÛ”YJ…ɹøì_®«]éˆtÞ™A§ƒßceÞ¹€[ƒwüdæ—aãÆgЦÑ®Ýa=nHDyßCâl›¼`*PrHAmí Sа¶ À- ^2ÄMI’µTÃ[6:x³@c¯Ý­ÊÀ,@¤q&!Jð!1CYÄ é ð§Àó'—'"  …` kŒX ‘; u9–úø×^n6v%+[nš ZŒm)Æg¤;&Œ~Ã*cE«5]…^ýâíÑ)3yÄ:.À''‚æözãÙÝ›ù ^è]¼"Ú¡7d7e‘Ò ª?B‰ß€Ò)InC Yv$Ë£|²ÌÓß?®H­Ç†¹JÒ"®³’ÒÐ;:™¦Tª›}}„ß¾(>5‡ó”†Dt¸#`ëu‚òöÙ:y0þ!´©‚¥´®aUø<3Lx²˜Ýäïà˜"½Œ`Á0Aõ6@e¿â&ÀU³+Œ¿ úŸ‹òµˆ2„Né¹~!Sñ~ô‡`ÆxXÄÛ—¦»ÁÐüÕ=-«s-€äc…§¶t-.H¿Å°**¯ñœöLíD”‚àËéjMw²YÝ"V´¡]âì ì2m£j—ˆ…A…ÁàÙ;nȇ¸(°yeÄ Áx<Ûµa«QçYŒ"Æ´Ìõ¹·;Ë³Ø Ó®£ócz›ÿ4¼ÌZ™ÏòŸzË,ÿIôb¿áÀä'#þü'?ü–ÒÊò+­A>YJ Û2˜ÉO²éJÿö мUôyL¶ˆéßZ ç6 â½;˜ôï=›(³À$¹)¶¹°ÿ‹S`ß§ôæ’çæú°ÝtïísïýòÇž®˜‹n“B·‘oÏ©TŸ£˜«ßAÌ UóùÝÂ\Ç1c-ïÙÚ3ØòkÑC³µj°h„1ŠËÇ䌂ë„z\ÃL½Å†é¢ ÷·f0›§–";^%6Ð+Ky9„\-Qµ^X‚T_ÀÕ[\À :ñ¸Z|0zŒ½nC( †»cîq‹œ…aܽî‰jµ“[IO€“Ç¸Ôæñ~¿–ª*ðª³熥‹œA/Ì+äJ“SMŽÞŸU9qW~pvwõàœšÏ-Â(rÔ‰% s´¯V´&ü«ÅeùÐW1Z0ýP/É&~„ V¯žû%‡ ƒ¬A MyÅÀB;UàŠùïÖçõ£t]DÖ”UѰ‘ó‹rȶ¢¼û£æÈ»ñ'Œ»ëÏw׉wHh¼»Fˆ¸»zt¸ûcÂŒÝo„±û£ÌÝ?Vú4ŸÔNEvç!¥LNA"Xsÿ~þW8ÙíKÑÃ*í±Hj‡€‰šØ{o¼WLÅKØBÌfØ:1+="´ÓÄ:CœXe-Ôr—1-â"ñÝg³It.ú"&nØú)èêtÇ)ìQéæ½6ÝzÅú «[ofEÒá7ÝyÓÐ{Ö«ˆµ^_tƽ,6¯6s{c–ÞJ·¾7f«¸n Ø&VïËbÈí}Y®Ôt_6Éd#^Ù!ô]ÙU \peW°¨j‡Ý g=˜:(–5Ù'Ò½Ëj82Ë.Éáö|Øl—‘ü±š>ܼÁ&œ·#p'ú¤:„”+d\äø|Jɨ¦ |)9€ö?ÈAz:eÓÚã),ˆ&Ñs\;]° ÐОÄômÈ/:`PÒá'±xwýÅ/VŸãÄör s!§Å„8Òë´’œ?g>4`æã7ÇqÌfø•"w&Mþ½T ¨lRrÖsØòVa󋄈>°¹ ØýO¿Á­™¬ ^·A'Öî?°OSÆöqZý‡ SVšxS8ñfdïü'dãy7YPº ”ö&z€Œ/MÓL©a…÷ž:EÜ„5¤¬!°šê©]¡tgŒ… Z7ISçp5¬–=K+Ü7p¦¢,|x§¨æYZ…-«aÀ·+4ýn½µ¬¤þ•I™‹³ï—÷Ój™6mØÈLxºfqCƒ,U$’Bm¯Éß’eTÅE´Å#¢_ëï“ÒpWˆ¹ô6nT#ÝôZL‚-9»K-DÞßaB»W(êBur†#ª”ÙÌÕïH«Fs„|’|XÕ‰Ã8]zVÁôªp9‡]]Ef6ÐÕ§ñxm-Îþß|ÃZDwnŸž§wj]î÷Iuwçýé¹tz¿WpÒ¨F?—ήïŠçÒÉuÓátÕ+OìèMˆE”˜ö"CS»w»:A-ídáŸêµ7<7Fäöìòírn›o`Óå·ê­à#õl•6ì &œ·}!çoáðÕ¢¹²>ò“wG8ö””'\Uw0p:ì ì GAqLCF ‰²”"G .4$B J˜„ßOÆŽ¾³½"P¯Š°ÝEQ3ÙºXýØÛí5÷ƒás½òÎr+bCF4·dñåЖíÞ -lñ¤¥IMhüß012 ¨Œo–ÈBº`µš¿[ÏWòS%ä =Òˆ‘òèņ”UìÂbýV5–É|Çà›•¾¨Vü{,êô¥|˜é’ŒÅ Êc+¦‚ÕZò§?úCœç)ܱ‘èæ•ó‚CLô³oBÊ&»aRÄî—§,|I®Ôéo§¬Æc#n‘ÔVî.NxÊã  Çí<¯ŠðÏaNB!—ã.PwD­cê˜J¼V¨d^Ý¢®=+På¾ñ­1 ªA*–ÆFJH'~U~ÚÃ…'É#–øŽòp'èt‹ñO(Žýɵ¡.žCLÖ­†¼¥EuwÒLûŠ'pý¯q]dÅy¼£%¾Èô·Òô=çö _¦<‘•Äì}c†pê»NB´@ÞÄj5ti¤€±w¯8È*ò· kÒ#.\8W_¤¸±Å ›|~oƒC™¸‹wŸ—Åõ›P¨ñ6Q\²Û-}®·²ÊLÌ‹í–>ÿÆ+)c"ø'[ 4 ?¿‡2ŠáªÌ ^Rì{‡ìO|­5¦ÓÛÒ¸†—Ë{_¼`oñ_é ¬·3$¤u¶Ds´äwº,÷¦SG =ìtêB´+ŒkDîÜüëŸÿ‡8xzôìô:kö„È –û S0QÑ û<ÁÏïâ´.Q•=Ó÷Ù61JGíI¹ökïïP9» –Wçªr[aô™Ê¦53ß"V6޼Wù¸öo!Kïò½e•.ÿNf¿tOÿb²žþ†p8à´¬±vÆ;’h¿K¥+ç4˜¹'k2Vt9†r!óÏ~!Èà…!ÜO;aÉ|&–.bIòmè}ÌÒaêϬç/{§åާ³ŠÓD‹ø§tÒ;þRæ§c»¼)™t­òÉL¢Qam1)YåÖórOª£(pÈá¸jÈá…/;“à %JVV¾4AðcŒó¿hÎ ÎBž8œäÙÔÁm^ž¶Áôv%£õÆiEhÀ&-Ŭà¥`ø§¬~Àónòp0ŒÊkí‚4™ÁŒKf`ü‘„©˜iI/}·ä¦|G®~Ç?^EŸ§ð0’o{]Ôd¢­oäW¨(š(·Œ¹=öÿ;X€ý¿¯ƒe¬*¿Ù³Èj4m7ãÙœ·¦÷±¸î ÌC8I{‘j IÍBø-å~9$0rå¹)ywó3¢˜”fC&ü–‡´Ø³Xï(/žmÓofšR +òƒ< Eô—¯ôòm„[Õ–Lq›cE÷qF© +$ºB®+luMæóǯÑ×Çåü.ZN'wòy“ûù¾ÝwÂ\1¢kx6á©!Ä œý©`GPq8­Ê°U2•“ŽÈŽÁìoNˆ"Ww«1j¶….¶K“†8kƒx"Á†Zh e)b\¯ñciçÿ^Wè`ˆ^Ÿî…0ª8à- _˜×a­ð2|vŸ&ÚS É¡¬QS²òú¼ß®  7ìoÀTUS ® ¾p0B@×Zá}€q->hÿÈÉC °Ü‚[èïOñ±Jí o\þ7úžÑ³Ã,)„Ëß±¥Y3ž½c.rN6 ± „b·¢Ë…ÛÓ±ú1 a©Œ$ß§t=19nËŠŒ©vu-OhP*«Tíb“ð‹Œ%&å°ö~¹êƒIõKZoJ”^®ýÅ¢ñè2íL‘n#¹Nž®“ß/£g4*{g06BÃ=·ËG1B.€:#B ‡ÏVCcYhuÙ ½Ä§¼Õœ Ñd”fáÆ6=úÃcÚÊí(f$…=&ÉG&Æ3Hԙ̑¯ÆŒa(1«/‹"íöÀ.µÑi3Ûf»Ýf̳#ßAýΨÞg¸ñÑ~0j—÷i.4‘õ›é*ÕµìÀ·ŽÆ²PÕÙ (À:¶òì˜5cÊ-êý€Ó(õJÐf2ÆN~ÀÕ„1¬Fxô s¼Q HÔg4(”àP!PR…é·¦ŽÃ¸ÞRjŠF£Ñ]3ºUE¥Ñ,:„tÒ;žYE¥ÍìÈÎÊF›t”Þ—è1 sÈñ†[IŸÉ`“S¾\s¡­Æh`¬ådÔN¿l” «Õe7&¬ÍŒ6²˜ÔÍûM½LÚ  ‘Â/ã|š¹½ZywµˆîóÕf]÷W`×WkÏ›«Í¢’ë‡þ»«Å凫ÅäÙÕBäçkOöó«…ħ«(/cw±Û2±/a¢¾ü‰½VVÇIRe¢ÿý»Cã?4ä¨Ýs£Æ¨ÛÇ:SïNÓë;«q(>jŠQ‘UUzQ. MióV¥—hl4>ñƒCé‹I©3fp)Õb¢úè¥?j‘Fm•ÿµE棶F4j­nF­Ñ/cUå}œÇßÞì]4¥ë½4M3òI>X­ak¯•¨J&)äêìöŠ2$YÇ2ÈõÙ-Ö0´±c!}ˆÍN£Ý*<•qB£™dêt{Å®„ÝÉÝ.ÏŠ1<„;t\›ÍøÜƒ’¿ÁÊfªº¦¬¡ëÞÉ(ù–5R.[!ä±2,k}6‹#Ölª§FdmCÏpIÑ1°úÛ”uÚ,;cƒD•ÅÎîšU7î<³.…¶B¸RGíшVÅ=²}'g„ÏŽŒ‚ ë³ùœ¦Uˆ’#lRÆãÙÜ÷ÙÄcÔ¸y\ôY#íÆ¹Ð7È^í²7Þh@ V=wL Ùÿ1•#ûcê}ñÇT¾ê©õU«6¹¾7n½&›—•ÍTuEå>+°3{ÜŸ6aS>§#T¢UÖ©Y¦:9©R“£Ü\uM#(ëäÇNÍ¡¡R…\ÝûÝÄ{4šQQ§Ý2¿¶6žÝN£Ýê˜u†›µ›«®k¤9U>‹Žžv°6ªËj‰}bp$[L›jmÄF`©ýcWû¾úî³píeä`RÍâ\xÛb?“‰›©½}ŽÜ0+“ú²Ä•פÜg9ÙKû‹E»s]ÙO»¶ºÌm$ש>‡ëTüê:u]§v¼Œ[-,oGˆ:[}™¶# :{¬hÔvÇ­çEÓé7ú*ü8&™6³©}W‡±,QefCÎŽ~€«–kD—ٌ߹×¶2—!÷ÂÂÖœ¡ÒJ¨$š)OMuÍÓf6å}pt€AËáQÑlSó±Ì]f3/q=Z·DtÙÌxšdJ;8§›ó?:7Ø²íøœÂ#bbØnƺ 1£0¢±·x¼Zùf¶q¸rŸ]¹ |¹r¿]#ÿÛ×µ¬çÐã–2ìò˜¬PÚö‘Ïv[ã1*Sly†qƒ,ƒ8Á®Ç-2o{›>>Éü-Y®’éV'µ‡ÚTn“ ÝçÛ½m% ~7Êü͘– öœ—ʼ-Y ‰ÞLpFÞfR³™]~‚Ë1.¡qìˆ ÍÉ>'¼™§c9§è´Ù}˜قs‚ämà`6à7mñ¶’9¬¸C·KMy]Úó6b¾¥%˜sßÛó¶•Û,x]Ýó7cº¼§Ús.ó3§,ôêÖÐó¸æ@ŸÑžï)^oƒG³ßÛ‚ãÕĽZ¯ ŠvÜô7l½5(Z~Ϊkj§ÎlmÀ%E›ÖkŠŠåÑ3ØvSQ´ «…1mO#™•TZ¬¦ÕXƤ+’¢ ß;’þ¶Ì·$›ãUT{õ¹ŠéoÆlc¼ÿd6൶ämݲ¤Ùò_XhÖ¶¬$"ðXUò·jµF›Æè J¥ÛkNÈî®99ú|͵ûk†ëk¶öÍ5×*’?d^^s²»»æìïpÍ™_vÍYØó°ˆ—_sÖÕ\y¤>]s}¹Â`rÊóžµdL5¬#ŸÈ™døÔnEgœîÙP«È€ Ó4eºµ!+Ö.kÏfý—+6UìN¿ïÊ´óŠ4µåþºLhñ® Ùˆ:•çi\\¨•¨Ð5{®ö:ÕG#jýÂëÒN4ôò—l/S®kö]2v©NuÕî6N­†¬ØñŽê|¥ AÓë^ˆué=èJ=_]š³ÍSš3Ôû-²º[–´¨ …U—þܤÕo1Õ©Ú¸ˆJm°%Fç5W§Q‘ÍŠ{!ÓiE×M^ÃÍv^oì:õ—º~ïÅÑ‹jPuª÷—ÖP¢BÓ 3ôê~á… RÇ'*ÖÕª¶)að»²áa—éÓ¯lPrº%/ËŒí-¨uûÊ®aŸéaœìæmÙMÉjàcBWtœðö¿ä\U¢p[7ó™]ß2><žñÊmÌŠkd¸ Ø¢øÃ˺ºzF×ésúv…¶Eô:›Ô°=&³Ö]&nîZ}H‡ÎÕz3ƒÞ"}Í IWŸ)ÿ¹ý «¶>0–Ÿ=>^Á?Oß<–/|Œ™U;×|Tk+ ÌÀá õúeÄŒ€þű(jÓËZüwòm Ÿ5…çjÒgƒƒúÑ>µ¦¾nTÅÉ3|ŒºØž£x#ër^;³ê¡’º2 fý:µëdþ·ÈŠåù›Ï9ëc첯=»kËGG¬oKZü¶émºäòu^j²©ÙIj\C°MËAÒâµCn½kVågüôùì[×Lû–>›Þ6…¹¢Æg—۪˰·í¿­mÓj\¦òßǶª•”•À/ÎXJš|_‰p7ÎäΨ*û¨XÊZüvЇÖ?ÿm›fÛvö°l«vÛþõ°-`«zÛÆï =ß>í6ìž÷Q¬ª·Oüvym:YQžÕªˆœ¨èÜÁý$iñ™œô‡¬ÙÖ Ð{*Ò¯Û2ýð›xXU«ŠÐ™‘ˆ6µø1¼¹8Ƽ½8¾º»8 ú|ñáþâ!hqqß¾¾¸±ÆO¾6ãÌ’ñåôâÀvwqL{¸8žÍ.;ŸÇ𽿇™ÇÃÀò∭ct:]<2½\ÚµÓ ŠNM–#y“°NwiIÅU•Û,IÑ;‘ªWrš*šÐÄ`Éu¼î =xÂô¬ÉRÄDЬy‹ö§l«~}žßeÅ6ý&›l‰!•äVoyzðÒ –Ž)ÚžŽ•}7–2©&!-$‚ð?UcûfÞPDþ§j|ÉÒ׳4AøŸ¢ñTÇP#”6MVì}jšÝ S¶ÊºrÈÁŠ‘P"(,HTØ©]Ò@b Na±(jg¥g¡`ZèÜvò°šÝ̧ÑíãÃÃôv={|ˆ“õ'Áêëeæ^U;_u(Í…¬ó¬t:DS«éœz%Ù{=dMª7‡Aö:¢½¯Ÿfëé|¶Z·ö¶ì¸mNº{0å }Ù;>-GPÊÛ xcµã”qí»8iÐÿý¯þ‘ú¯þ×ÿc´ã”u$éc  ‰Ú6€ïÅ&C‘–Éé˜â£žU†N]ææMûNLý®Cò›GIc.Ùˆ}¨ÓßNXaþLÐsº þ~Ji¯v¸1„³*g/¯OôQ'ª×¦Ë[¨SóÇekÉôE7£ñ)båsp<§>’ŸŠêh ßRJý¾§¼lÌDé?ª^ú²³ô2Qú¦·Ø•çiAøŸ®1;'Âÿtä;"g*¥²ì_UuÿÞ£WÒ¹FønÇy*‰$ù¿ªTøÜÀP­L”þ£ê¥ŸT8K/%ÿèzõ¨ÏW-‘”:X³& kc¿í9¹WÜiøT¾Û2˜û´ 5”u†s‡’¢Éàõ˜‰Ëq¯Ûü­ÅŸ·ÚÆMmp ¢<ɹM_Ø`€ÿJó²Â±JDCwÔvÔp0EŽí™Æjä]Ùýt=¹›¬'Iníå%}&—æFå¾è¯èåXXÔýuÕª.QŽYþvÑZ¢iÑÌÖ€4>VY…Žçú™^ ¸g‹Ù‡+³‡™·æ€Çé¬hÒºªq_^[ÝÄçå½Z}Š&Ë+ɖĸòKâ|ºEAÔÈñ>Äs‹õòq.Çýªáˆïh]nœlnÙDw³¥ÂV%™”ˆ†§¿LoŸÖüS2‰[C¥—*× [N×ËÙ´+Ú¦|M}²”ðÉ&¨èÆš¸i›ÕReõÑkº0ªŽqˆ"M”²e–øŽ|½Ü\d–3 1w(s‡Ü YÀ©Fºµtª ¢L·ý€…Å ·_ü_ºõ„Ø­µ¶°_â:‹I'\§Iº…’òc¸”’u<9”}aiA—ö>øzÀ•"@‡ò”oqÀ§ã€KÿMwÊ›ˆžÈ÷º'`:ÊÐ¥ì¸ýZ¹$ûWÑ êÏPJÄ઺â\˜\’ýkÖËûž¯žî d}Š1r÷ TŽü_ÑØ¿ hU¨/ú/LتrKà†ˆ;ôçQcMŒ©í+K$AðŠÅfÝ¢ªÞÀ 3]g.«œnòŽPÄÜnÙÕb^bB°Æb¿Ið J·y…±³Î ¢qž¦Ú^³ôïâ ¾õ`ùˆ1L!~áÒ,Qð Á~ùí­ß 7ó‚RÁP[WT1âÏ q±}‡+,¬ÓãÇFÿúçqC7g —Þaž`B‡¦©¶ÁO?þtš6qÃrT¤Ëê,Áf¿§/«æÈ)O ^ÀOpaZˆïÝ6CäáYz+’1ÂÐ!«Ÿ¿ÆÈ½À„:_:fâÑãªkÀR`†‡º,JüBŠïbGþ)y×åͳž´ß0‡¡‰P\`ªë´ê%u†#rrwÂaàÆQ³wŸåi;j%zC¢·¿…F‡W+•X F-J Ó±rhf–­pbW.²ØžzH—Hƒ¦å9vÓ )T 9þãQà“à‘Ã?22bGÕ!;b. "£‚$Íš7!;rèÔðêw\;óa+ƒØ’¤Ù±$À'r¨›%#˜&¯VŸN:c>5 sÒ’WÙÂ(…‹áð“­Æ[D&´mSÃ#ÕIæÙ.à 2$~ÜÏYÿý]ügyÌo& Á½ô´M7§ý¾ÝØç*ÂVÅ„'‘{„ e8\ƒÞ‡ŒW>H·œ…G[H&qZ¥(]`…3u¸;œÎÀIðc²`9]­w§wÔ0ÒRðÔ¡ñE¯ñ ¸;š„¸K¶c”)îoó!Pu¯À hýȧÀèŸJCð$DÍ‘ØïŠpúøð†òr?È]BõAàÐ}ˆ§Ã‡"Îßš,AU]BpàvÁ, x 0H(4;~θ`Œ6øU±-7rW]e!£Ix;:`°ÒK!·ØA/2¯Œ€ÑTü\‚ˆà K“TxÎJ¢õ ¨¨¨Ø»\=¤E´=Ü2þF{ñwR‹NÊY:Sg8íái¿{|r8‚C o4^zG“0wÉv°˜Ç²D î’òø„§4¾=`”„\çR|Ðú¼)WÀ='Üý="¼QuªœŽHlrš,B¥)Vl7”Ü F¾Sè‡Ì$£Â”/j˜å€~ä[‘o<(á(7‚”îIÀ*‚oM÷îüëcíã³z|Û Ý·BŽÖ"NS{|¸g„‰lвÙájv³¬IìïÊ$¢ ”X4¸µû-g}Ö>GpIUP)òóBãW\èèþŽÔ~ÑñY‘ŸPã•ï"Ÿˆ”¤ËIR2JïGDüܦxž#_t ©Èc@-’],¾c¼6oÚ  !ÕÃ.$øc`’2ÐíµÌU;_³*>n ïH½GHpÉÀ$¹d Û]"Ì3Ì|W¸"wPWâ€èÍé‡ÊÙo)"â6Ñ ÀQ 6r·Âû¦Üºñ™¸;ŒUÄ)¬X§ÀµÀ\7ÀåÂë[5,Ô†*¡ÒÜØUaò²ÀÔÁ„Dü¶ÂùÄ—ÍŸ|5Èà½çQNæ^·ÏšOÉ}Zn7C²À {,2¨Š´^>¦åÝÆþ!óæp, 8mã…ß$!; q¨HÄ^>Î{ÆÙãFs‘5òʸMEÌ’{±®Ê*n’CD‚l4ã'Œ!e´8#)³-Üâzû×)J“S5oTYIvwËvØ{xEø=lÖ²ùÄdVL†ò%n[Y ký­ÁÚüZW €s¤t8G®n¯H•ðŠ;ÞõzAã8kÁ‹#¥í¶ö«E:o‡U ‰H…d+ÎY5Á<½µ ‹ç^²-‰V½:ø^1 »MqÃÀÑã( »£ãÏö¯0:oç†@± ÉVÀóŸå˜%uÉú+¿êb“èk"nhEœ¬Ïï­F×8уÝð:Ñó’I\™'óé¶„ŒbIÖìy`tG¦\pÆHÃ¥ùëÛbìšC •)®¼p´H¦Œmžó¾>)Í™Ëà‰Ìàrˆ¨ýóÄê9ó-µó #‰°»T+ÖÅç™#ãÝ·Ðd&”xÿŒ1Ù±‚_ÿ¦rÊ`´þ¬Mì…ÕÛµ*¶i•—odíׯnº$ ØUN£/*“Û·»VÂQW묄MÜq¯‡Ù¯$²äŠD±ãglsÊf]—MK`êB¢ ~[Á,K{Bì|;XV9;0-EDÔ&Za­Z¶tÀ §Y@˜šW4Åt;ÎÔ½‚I¯TµÛvžÍ¬OJoà’½00ô¸Üíža³bUZìq ãåÊ-ûÑRUü-¡7æšR.¼~ý²UÄ‚\ë©uªŸ½}7*ŽUSÇ•ïlæ\é~™dùÖ˜Ï1(#”?§oq±6ÝðíB‚&ÉÝîÍjþ9}›[a»³Ç%ïrPY%ø¦ÜoSû ºòœ¼eâYß5^bG“0vÉv„§¿N¿¡&=Ûí·Ë¨u ½N¶{Ax½vû›´ˆ ÷\bë0Ód&M±"[S² LïpNò²ð^Ò·Ë0u ³N¶;@yo×Qa=N’òä‘¿:o‡^ ‰¨…ävõöâ',MXEX}³Õ*bÄeÈTjÍSµ#Ká ”Sœû®¶Ù;d²^¦X¡lŽ•÷—z{Îé7w5ÐX°-IÚ¦ÚAÖ»[ÆbˆàEOzìÖg=ÎÌ/@•é^™d½ºÃ|ô|oÏúÜ zÉ*¼—ˆ§ÊØp‚ú’YÇ„×xç,«œž–"bj­¸¾Æ»þàTx6zUF§7ò.µ_£~M7‡²t¯Ê|4š.á¢IvPŒnBôçŽåƒ¡€”Ö>ü®Ã’RŒä-Wñ®¾}˜#Ê1õAb~…ÒÞ9ò!¢%…L§QŽÝ[Áy‘Î×UÀ‡’î­†ôH­ud‰Î)";†„Òe‘ÀN/Î’Ç._Ò@ z)™Üf„bˆK³¶XM¡VY¯ ¿Æon°¯·ÊBF“w"Ò…rŒ 6-?2þ›å\·ÁŒ–<'àÑIøˆŠ`[Ö±†J7Ò«Pr¥ã"§qƒemÿ]HuøÔà…èÄð˜?JpœWg%½²„Þ‘",%—Å'ÒOn€.œ£›INØ_€þ5ƒGkå‡NÁÌï¾üw[ýþÝP½j7®xJŠ$Äø,»­E_Cø“.…Mà j,½![ãðZô i㑲 ïV¸@º$;Ô„3dœ¡À)ºaU§6`„kfÀL;F$8ôrmÓ¼ ïœ5õ ©n`¦°cÒ=•˜Áÿg¹ îZ÷o§ô”€,ò›Ðº(!Ù1þȮٰ”éW Ì0JÔë±(Dë2ŽÆÄŠ 7?Éia¸þÈ‘M îïÌànä?S@GDá‚(í“Òoñ±:£¡ËjB®†7ò¯Ð⿟``pç„þDOÿ~àJ¹…ÏÇ3wãÒX$-Iʽ6U,NéÙ#ÚêqËÙ¦·„“"W.âý¾†—ý!øÖØ«íx* ×7PÝêW.=@Q—¨ N˜«äf‡$L^»Î¾ôHXýÎÀ˜ÄÕVDZvžâzO\ ާ¼É ¶1ß$¶iž½¤õ[”â¢Hs_G,rš;œ/d|§TU×8[ÀØ$7j\{ëmê] ¿›Ó p9ÉsÉÈ2<ç›tF^–ø*,bS§¨<Õ ë†·FßðÏw‰ŸñrsIvP)'ÿ¸—ø‘/¸UøØì>ø, Òái°;"Ênu¤ÉAß(»WÌêš!ö6+RˆºpXDnrǃÏR÷å±è"ϦÊÙ©Æ}nÙ²ÛI ¼>߯àÍÔBña2/&&xÔÀsAò>(<õ¶ºÆäå/j·€Ü£Vhp¦‚hHE`f¾ÇýL•Ã{«tušZ!'­áÁí !v$á…ðƒª>©_'ôQ BÖ´Å >Vˆu×[4l¸mz#ø‡2ÜâR:ð/ÿJ„8Úâ8:U¿*i`l¢^1E¡¾ºIùCE!²ÇŽèÊ \Ñ·›¡{MCÊÅG‡îŽQÆVf½&”æ!z.OÉ´fbS{™ßÃ<öõU*\‡£’‹l†Wåq1°Xm’ºk§½5u]Ó#þÀ&?L†âUœã…þ~äJkûº¦ Py(1(ÇB*XÎdËgY‰Ú6øé˾ê×@|£fr+?³­§^¯…ŽbÐ §‘ߪ¢¨ŠZfµå´I¡:šÐs˜ˆŸm³{r–^è¸ ù¯@ï@'Û"-¶U Ÿ õ61¸ÀfÉrM‘R½oïΠf¸(;µoR9fÒJù5‰a¹k’ÒÁò{Ö¼•Ô²–_ÉÐsÖë"ˆ•ßÕÒ–«Œ, ãa)~åm¯°Š[e¶å´Y©šám8ÝÎCÔ|×ôœé“§7N?ó*}"Ðj€ /ÔÔog•QØæ gv•¬ÔZ6KÆf-›VÏ™>yzãôÃQ6ÜÑt,ÑvÃoø *»¨æ‰Äj-ƒB­L€'¸» øEU­Hd%g¹â儾>âÂÄMŒÒº>SëÞ†R)ÇeÉU’õÝ+4jž ‚CñºÚ1 g]`é~›âŠ]òIû’íY·7½ÚOww $^ðü¾Áˆ‡e»QJs†sY³]V£eûË“ƒy¼Ñó½• ØÕÒP¯„¦*Í%ãúØ~ný¬l¶)°º!83_SÞS“å}ûÑw{¡Ä°Ì‹‰ç:kîñ”r{¸)ªíó‘1ºýc§H.òÒ Ãé+;Ûâë±hÂÇïíA|Ý¿Ìña.û:ÛÛVQë*â¾öµ^öJ<9KyVQÛXœ…¬)ï)aú„=;Êi-^QãžðÑË»þîWr­¯4Å«g•¦MÕSñЍ«45åJi Díè}ïÕGÔË-/‡ú Pô¬¯üØ–³ŠÎ kuƒq˜¨RmyëyÀž˜°•Ï!‡”Ëv½Xè¾RàïûWFi«œÛY²Z¥4ÚO [Ë¢?×_?Üô7•Ö•¾bw|Žqr€çøÎ*§V/eg™™LôŒ`ìå œ7„ß^˜ŠÞË沯³ý…¬zêQÖü½åKÊÚ¤Ãå8ÎÙ³¬%eÍŸ¤v•µ×kÙžÒ¾.û:ëWÖÜSCYˆ^ô¸+d•Søl娩jËîîaÅ.ö›VP¢àpÔn¼}H¥‹AíU¹-»AGS^r”˜¬ä¼420ß5Ý`±çv§@ÊhH6d1á„­•¡3HšÝ© &àêã€<³‰)6KÞiŠ”N棓 n%'EÙÁ¨x{ê9+¶¸{Èö‡†ß†޲ n•×’Ùf•JŽº›Q¦öc}J¶kZÎsÇÏ— zQèøõ.zðsA oÀ4á—ÞI"¸éô9 ÌH…:d<#0=I²€ÀûÞ“Pmw7ß}ËÓ¼ÞqSŽçôí%>åžã’­`âT-K8AÌ•Ïé[ð…$ê5‰óã‡áê,ÐàÀ¼ þ—|B¼Ì0F ‘Þ#U|î:õÊX@*· Ì*lPÙE¨m^ÆÛMœCê*­r j‘ÏÒVuUm“RÀij§(É í†ÛToÂV æ>æ_´'#©âa‹ânškæ[•+'|K›8:/÷Á„Ë­Óå œগƒzé¹bÇ£m†Í!™œ&¦xÃØBà³”•¦©-!~Hj3‘pFìÆÚƒRÏæöÁrÞ•E£æìµ2V3ÅyÃSÖŠãçWt®c!öT­ ÜPßG­SרRîbR žèû Áœýþ®Õˆägÿ5‡¼æ›ÎomH6ÕÊŒçïnùcZ%3h;ßEç|Ü’®ùK=beò[vÎçŒÂ2Šš]á¬ýE$+´”N{0É\0­Ž³<ñòÁ^, ´µvYÂãÙõÀ—¸Ù‘½¿LtÅ–rùÀé%QsáHÊÎvÏÛ1—L…Åéôº¹µÄèGœÎ(+ƒ ÙÊØ_>¢2KÉÐïGYŠ„ÉŸßy/fSÖ3¨†<C¿åç.ýÒª·­,jÕrx[ý}îUtMç:æë’Û™A£ HŸ5–XM.¸Æ]™±,¬cˆ$~佘¥6!CµäùÙãF¯°ÉŸ1ìÔXýã…¦èL§<Ýq:¢Œs”gŒ1“ ýリÈX –±AŒÚ‰·©žÍÖíÒv³Èä^Y¹ÊkÉn³Ê6Ï‹v›˜?õªd¹&ž#~.¸Àë³> ¿½*Q³¯ÓKhŠSKñôPZÆ‚ò:m›Î‹<ä«§—¦ãbfMÎ3ª;¤­î9Æw›Z{ÚFzƒ¦sóuÉíŒXN&ôN°Óqnà¡ÁêšGDЧÞ^j½±Eå%ÞñÓÏCKQº‚†NÙðÈ¡WÖê[o aVi/7s4¡i9Ï?G\.X ÆfT§ ¼‡WÅÛ-Ö2è•>QÕ ™ÕV&…miP*¼¥¨æ¿"vx/ØÀ†q¨Å<¡,b\Q§Û %qrÔ¡Y¤ä—%¯U5êÕN ×Ñ–ÀØ=Þ«ä½ f(zn;b=ŸmpM@‡÷ª½²Vz{U3›Û±b+•Ãð‹_FÍÞ‹]² V‡àzz¢n` _YÑ„‡¡íÇiC(ÞP‹7•jð›LvA Ô¾×— ÊÚÚz´7=°$KžÜs/Z½Ë€E¬ežÆeûÁWŸz$Uä§-» êx~#~‚«„W [&-ßeçxჿ¹ž÷ j¯ð)¾yo‘4`¾ägÏ{U2'ºÏù™²Þ÷S„½2ýðû[²¾C-â…0zÂìX5tð­Gÿ ¬ÜI²¡·ƒô^àVŒR&€„ËZò²š®‡#h E/ëVf(TH;<[~R¢ž«g¿ëçý˜ŸÏ ~}Ïöqšy 9ãe>çøúßàs<¼Ç×çdàfò(Üæ„†e¸QJCι¬Y-«ò™ôèXÅWƒ[!ŒÁ0‡# È“hWÖÑ ¼7´ÁU„aGôZ+¾.eM(‚á’¥…X{Øj±öiÿÂIN‘—o1´lŸU¸Ààž*ý(MêeúD$` 1KÈ¿ˆ“Š£Qé„§ß`DAsÀáÅâž»…/¯8!!A»_—G2`ᱫ(·©Á›ìH¢‘AîH2(Õ!JG¼›ÙÇ.™º|¢’'zÁ‘‡ßR¿Œì áÑ7é-*¤¥VUÎÆÅöËôâg"™ 4¼F!wB½5 9jfà¹o­;茺ƒ<êê¯;È£î¬Úº£Ô’N˜†Y’±`¦ ƒßÜZÄKW>T¨Ö|NØüä%kÞü±¤ ˜E.#v‘AêÉY~Z!Ëqx?ãÓÄîÖ¶@þÞtÌ'0ш§: ¾WűÊÀÜkÕVv8i•Z¤‹uež§üCÓ4ŽÅ]«„WÁÈšyzÜ8.ฤ ˆY/A¸ŒÀE5R Ið .s–Ï„Ù~ j\N©[ õtl‡x(ÄCìByˆ{€ ]0n:4MìÂ8^Ö…(°›¦ÚÀ,°›ÙŒ(Ôõzq×d®.‡zxšú• Pƒ,£‰pyÙ~Ééê-‰o`H~i;ã¾æW4*GÇlÀމFÜ8]Äü°^tÂÐSo: (Û€ ¨F`@‘Á$|µút'”ûΆï á™Ì„"¿ #¡›Q’>è†9ìRŒìªªìÊÆÐÞÀ$f€ÏØzúI‘ÔÓ2ŠÐ•ùâgó%Ê'èñì—Ø$ŒòI Ä9^žP3¤t:v£ ˜l) LQ«>M$}„ó‡ ãܤÍkšr°m×Cú<^’¿ø Ü6! 9ŽèómœIÁ¯)½ Ÿ>eéô©7)¢3ä;ÖWÄÇÔãþo€êAÇ £ïhRÜ¿¾'è;ª±sÄòsÜ‘×ö\vå¯ Ÿó£­FV—øÁVY@ÅC>Ôª•«oàk‹x ¡îY1.¹i—”•ÏlGå•ðÀ5< )˜¸ˆ˜+HW˜úÂíbãJ¿Øñ,É)”v91å ùã—À§¢7¨’óÙ»˜.”q0ùpïá…4<ð‡d[=~ú)\¡Äô¡;/'¶%Š|®‡:ÅŒ^b¶P¹jW$Çù€{¸rÅ·’z«$¨xÁ-¬¬‡z IY \=ø)ƒTM'Ï#$Êç>pÌ­:¨ú´ÏËMœGäÝÍ!^äŒ~Q¾ðY<U©ECiôÝek,ÙjòÞ!1K0í•(â*èö5¯öÝh¾wÒW»ÈØÐÞN²¸P7}ý\«Dt„ì§y´k¹{ëLøômgyeîÕZ®ÀŠè §ÉÛ5CËJ2zE¼é)«VÉ8•Îùrßߎ\­¼ûK%öÍ‘,š'iÑx”Ff;Ÿ,,…q]ªÖ±J¹ *|#;•W…iˆðZw”÷Çër¤¬ƒõ'1«èXo®ÁcÝ´8³dI€HYcYd0"Ò?d& ãa½€†SR!Á•óýÉØMÀá”G]xçªEÌŸ³Ù=à’m"øÀÁš¿¨Úg#4ÐEÌæg³;Â9zJz‰°ô”,™tA±Á;t öÀ&ddtfäõ£FؽYÝ$Utˆó]TVi1¿IÖææ 7^»?’Ê¿0_Ъsù7Ü+·/}8pÐVe™ûoO™%T´ÀaÜ–RÄÅQ ‰mM™:{*9c8ªžÌ²Å{AMcVá˜Ò:¡HlMÕ”=÷T§IYo=Ñ™¥T˜œ+¤\:^Eà®=Xº÷Þïô‡]ª÷^;bPÓ‡{/œYQvójXe0 ©¨“µrÈJz* ¿¼§W–×l›FÞ1“Ì­ÂjhŠ“˜X@à2¾í GºaØ•Â*Bâ$OU÷Út}7,ƒd옭$» Èüe^š((åÕúvdä~%š‚0"Ü¤Ç 6u}Q*üLN7àä$3PNµ!Í¿EUœ<û“Õ˜Uœù·1È@;A åÆ/1;¼7ÿ%`F¤Ïi7)}²Sf•>§!”Ldb=œ-ViÌ>OɵLeš¨.SeÇ üðØ%@6æ §sâí \‰Ü’×þáJF↓ þ kv 4Kj¢ žÃ=K™çFfYºÈô%‹L]ªÈ–dm2NêÏBº†üÂ¡Ž vÕ·)Âù{Œ4KˆHa'^àPZŽ,.5؈h6¼ä³_èàÕzLü*Ö–®#mIΖbD9Z't­H3*-‡Ê©«³怴ü)÷±ÑúYþÑ; ä²û{/½"¢3‹üý³ÃAÏŽ…~ÃÄͶüNEêÜ`6­ÓÎE bêŽpÏzÌ‹J Jý‹I~ Ióþ…$®„¿j‘%Çjxƒ˜Éþ°™Y‚Vð„¿•1»½×÷.$9‘ì H‹GsËâÑÐ…#×¢QÏ‚‘ÏbÑܶXÄ…=O®ØM(õ뢠„‘„Sël¨ÀUn›Äð)"&ŒÀb3N®À„uõ€«$¹Ð~ˆÌ0îѾ¿»üÉæ,=¥É¡à‡"bò–«€ÅìWÐS/`ÑŠ°ôÀ²†è»~è±v8dÝpîZ7¶fØ¿^h]+t¯ÎÍë„\ð´‚®ã6¡ÃT3:LèATÜ õ€%°‰x Y)=Ä «U\7™g`®òŠ ZšŒ¤M6L¿ZZ‡!¸ãï?É2Kȸ(‡qª¥ˆËçAÚÎÞ^ÁÖ¢àV¼&˜Ú\pß`sD›m›ayÎun@}®(ˆ©'ÌÚ2E¶€ß¿xo]¸7/Ú«MCX¿G:OX<*‚Ö4;î…ó·ÞòÀa‘‘@±óa-‚PU¡^À:JÏi1®&É3˜± ”€¯ ™ðS¦3™è”HN“ƒÕjîßo–¤s›k³$AL%y@ÛŨÉ€N0¤ fŒ”&W]œÌn±*ø &þi<‘ß„ŽÐÍàI­§?ùd"™·$层ó›ža¿¨ z(°Ú½j O¤ùú6ЇVÜV|e‘²KŸPjB&¬“qGq?){¡Ç}…‰ 5äÍ¢¤,Ÿ³t€Va“7sH™Í^éJEïXŠÀ$yéôÕ 9ÿ|¦—ЏËOÌNNb»=劥å0úEr~,Ûä³â)ÛÎ6LiB&¯Ø¨u˜ê”H+Ûõ¦üæ]:· °6ïÄÄL^ßzµr¿I—Îm‚¦Mº1ÚÓ ÚKæßÛK¼ ,JÓ@Ñdô‡1¶,ð„)•úíù%K_=IŒ"J±Ð4M!Ù³zL’a o‘oŸ{ѹE4”J>³.CÄD\ì=%H6•“ò¾Ùiâ7À3Ýì”D9Ĭ:‘]cÓp¯S ðÛïô«qK`;ªµ#HyIöhº [ßí™1n/ÓŒ~»ÈzNþâ+ú±ù¯  4ßy\‘ex@!Ñ4éÓ¥8n…Ú¯óó³Þ F=bZÈ…µÁÎŽôìo££W0+°I¸Žjð )òƒQ÷äæ{מ¡w”!qã»  òJ`0Ͱ4ЊH…ø0YÓUSžÀBzû.²*ƒ€ íHßj" *>QXÎ;Xµç$Kù^[b›†KC£öÍ|aŒÀé隉‘¦Ž½ ¼* 2 ’U|!d<Òd[±Cå®yë4¢_kòi2†~)J†+ Ëa4¥Ð/B¡^¤ô‰‹AX%3ZÊbÃK©ñŒý=ò©Úú83KS ^JTÏ﵈¹çu ˜h$iÍÞ–ö‚n” ãy‰À¡@—ÅiN“ç#ßÝ¥yŠS*»…£!~Nß<‘vœ*BLÑ‘áD"˜1aŠ M™ ÊŽÀªâ’R¥…ÛÕÂõÄ®¶M–xŸ"1°KØÙtzDTû%J³ÁAC´qà[SKÍñèƒÔ&$á}C!e"G¥0“‚ZSb˜SA*e Ę\¿ñ¼±Ü€m `ØIØÂÞÄ( Ú×”8ÞÑ4f–é"Z'd€ÇJ5Ù1­ýÃ@»Œ! ((õƒÞý]é}œ+>ŒÃq\î{UÞ"bÌY”ìUèHù7ŸWŒÃ„ûT<{íød„8]……“¤â†c1ŸŠ"õi£džû$M@RLN ò~sZåq`šé•éV„ ùÁÚàévô>K~òÚþ;7üNêßIÞÔ;UyoП)#ßóÀ½ŽD8ÀòÚ®Ø$DHÝ %1Áï8IÊ|ÜÀД¦©³e˜zãsûSêµ 1‹ø€¢Œ²’º‚8GG’°Øe¾ÐáÍ(!dløúŠŒRW÷ãùFNû0{_ r^ ê»d½$áµ?¼ô’Ç>kl›„ '+xpŠˆâË|òгŒòg>5N`ÍC²lRˆù¯ð¼n ïo鉚MŠ ä-<Ÿø2òo‘ðÂ>Ù³õÚìëÀþ l!gÁ›éýþN6éi‚NY|ÈöÚàpöù‘ÿ¬n{Ø”Ù|™ÿL6Dü¼ñÙq:¼QvJlÊz¼=‡7gÔ-zÕ_§lõɧ.ÑÀånãÝÀUÙ>PÈxû]iUÚ|ZœÁ˹×xw–c\¿S˜Ïåf±;óuòÁäG9CI‰;ù7,""|þj3g‘‘« ¬/8Ãq@äï̳ߋ'¿õ?âü›õçß=âüwéÙ“ßàR0,ªð‡mcL WHÜ€]²"zÊÛ¾ÛñÊ®XUÊÀÔ>ž+0µsæu,ˆ¢}°‡N·z|‘/pÑ4ö<5+¸ŸvJ„U}¹×Þ‚‰Û€YÝ_Ä$´F`ÝÄçî©ÉrØ48«.9…E³³6Ù•J3 ÊuF}RõwÓí[ŸC=^ˆÑ( +dÉÁc¯YelÁÁ!˜Zfû— ®è9ùð;ÛÇ#2–ß²’Æ)Ó“:v´òÔà¡8Ü­ûüK…:/½ˆL-’( !¿ ˆøêã[p“í$-Þ`Ûêç­Ø'6ùç›»Í8ï/‚¶»wêgA¹rþ!Ba#ÏðqPÎmåû9T‘Ù†Ád¯Ùœ’ç´‰èçË<6¬Ü*c)ƒ¼]  Ëá gÀ5§*QF¾¿Ç>¬ûÞ*«R¨ç@gµ'l›œŠžóüÀ§;¡©²øÂùàÅtÚ©c^£+EùZÇ%;£JÚÝNò¬EŸC­:—K„“~>Ñä_qê"gõ†óõøÂY\žˆ›\ ;»ûºàm‘ÊDŠŒêå —Ð2ƒ¢U8j/eÓßYµó2y¾ðË¡ÿ=QœÃ—à}> ìè#ì÷§P!qÝÌxfÜPîï6¿; ÿ®ý½3ø;5vG¦ÝI¡ïq%Ùþ':o¾M°™øýþÍݧŸö`¢·“ÛOüKà’Rk‰Ò/–«h*º}|x˜Þ®gŠUû7Ó ›Á‚öÅtI_…áfß.ñ€iÐ/–Ó³_dKpºf‚˜â*$[ëÙýôñi-Cƒ²·ä3,üëì î 7ð¾P}zã¬}^"󯞓èŠëàõ(lµF,ްb¤l&SÓ Mé²CíSSŒ& õ%§õERŒÎP 9Ìàv™|¬àyo¯ 0qÝ4‘÷ü7é$V)|X,8ây+9âPbË”Œ-VñÖ2ÇÇ ŒÜrGè¬wiÒžmVœ¾IT ‡ó(‹áWù¬~Šg$¥½k™¹iö3d²m1Z§Í©.èýŽRÕcBâr#hâê”7÷%&nŸ&vnÓßb¦£# ÞGüÿ‚!ˆ‚a|°òôšma”ª²ï ýÄ1ß'wλ­ì \b2ßTgغ 4L&üŠ¡i|zš|΂ۼ.Mœ-4LQŽZJìò2χ»!U”ï×1…È㺑UŠäkæ²€†–§Ÿ×yeQç“€ŠV+DBŠs_EŽ]q•«Ã¸¯ÂnÇ»e“ñ}\vk³ümxÝW>ø à$d¬spi¶?lÊÚ3Ïtv 'ë¹(j¸9mŒ|mí q¦Ï³š•ñ%\à$Ï@ÄhR"Ûãü¬û~B€+੸߮O™ñʃÙ<fæÁjÏŽ)"rÇ,<8vF¾zä©!?å¼Tÿ<#h¢ûÌ^4ÎUKÁµ‰ò*Kü†káO@4«v¾’"ó´Å÷Q‹„ ^G ê”^ç¡gÛågz {¬.³¹ÏH\6×I' (›ŒOŒßø›8ì@G®a…Þ‹'&f «iéD²ì÷¶7&ÎÙeóž q³2«ÑòÀ ø¥®+7†ºÒAÔ•„¢–Ûí—åránÂq‚—oPÃc4 c a,ãâÌò™EŒM^š¦Žž ùǽ€ÊÌ XþáH0ÿ¤´¬ÀÒä=Ò¢wT‡îµ2bàU«+"¢ˆi5Ä”ÝÐ!mêl»ç/¢ûzáñ™WñB~“N‘«3̹Q¥/±gÍ~‰-5û%Ökö‹²[Dq¶‰ÑËÒ}3¾»gÑœê7²O¶fǼZ*(‰òÞ;¥··–×µ[‰Õ†Ál¯{’>ê×z<ßàãºç|9›ü´ƒ]ÛL§I"}Ó!Øg/)¼X@œ®•)SЕ Ü(ÑÕF`p_Ö™­ÐX]¤› e[DÍä÷\Ô0˜ÉȹŸæírK­¦Û·MZÇõ³Ñî꣆¼s±A¬*¤ª²Ù¬‘e [DÑ$ÉŒ†ØG=„/d_l’}BDPù”˜½DMY[¿t>Ä$Wô6qU}—ì`Ó-ÂŽÿÿ¼½ërÛH–.úßOˆ™˜¨Š]hw—kÛûO-ɶ¦eI#Êv÷/D‚"Ú À@Jê;bãìˆs^nžääZ+ï Òý£Êbæº|kåy] ÷>›¢Ãø«¢{×l »z)ÊI…œäÌuW=Å“IS´ß[qëïÿ±C¨#¼õ²oðãų/¯–<ø.sVóŠaÉ><ò Wï…ª×VŽ—ìÅŒ3ä½³ÄÃ…½Ú­xh›=Ûý6! 6¹ÂÕè ,ƒŽl½/Ë$f&ã·—.õÜV´ccÎIæ(FÃH˜¢8LCøÜ?[vÅŠf„ ›¬zdói“WGFSà¢R•rÉpg±©ŸXO¼}œÙc@횆ÜRBÊ$¤p‘ ¢ûàCЉÌLÖ¬!ó+\n¦]ÈI÷=Eö”d-âdõzåÝÿ4¤-VM±Ž¹ÚA@ZŒÆ•?rP!!¦$ç Mþ 0glž‘œcê}Þv¦Î—ˆPÈô]/º¦Ÿþû¿þßs–t·¯þû¿þ¿ŸIì&ÇÜ[ÏV›z©i€mfâû˜±~£Ò¥Kìj÷@Dì)aá#æ$c§)EÄ ¤´Î<ö‰“ÇGøà³ø¡H¸ÑŒn»¥1œ7ü–?$sŠŽÅ ìöÒc&>¹;ÅJ‡1d$>Û;`£f›Èð}ø{¾”ç?…©»ñ–N°1º^»Ì¥SêqvàÂý¨¢r8+p±?T8Š]– .òUÃÛ^Z?r?fÃãâ±X»n—í ÿ–gjx]Œœ_Û›hŸXòŒ%ó[ß°è¡¡’³k…ãøi(;FšRíS)þœ'Kåö°ÒÕ/þõL’½ˆ¨ Ç5ƒ‡h‚@!›%Nìy›}µh—M±‹n‡c£H‰Âc‚b—'Áè§Ý DäÙA¢.Œ†ÈðöÅQ‡Ñz¶Òì6ë~¬Ž«E‡cPkb—õ’¦u£ë=òòÔ@£—˜×)O‘¡ 4*D¸æ/D@šˆQʰ­“s"b8`ÑeLâào= ¥x"ìÀyɳ_-‹†ñìÛEVUu±i¤ç8x~ªòe鹬ˆn)"~&ZëÂ=ÃØ.ëEËf×Ga:‰¥§˜®°HÒ@È V:@“Ì‘æ®f§¡ÙàþP¬öYùjY.YÕGÉ‘•Ë4ˬ˜¨¹•éç/cͪ®HfëuçJnÅk;Y'Ö&¯à4_ðqeÞtÑP]b -dúkLÌ@õ¡Üç»Ú8«68Ä¡PKŠ”SèÐvÄOÁ^a_ò$‘Þ(d/_8Y@ %¯AÚ£Qþ÷Ó+cD¾§,V­ Ø$J‡ãK¡|© ‘¿ÉdS)TÆÃK’ÌE€/ë‡?ÒcKª”¦× PþCV®d3ÉC¬é™:@=]Ãù‹¨°í&kòU¢“õ”2\¬_¢"©¨bʵ#ªØlˆ™R†+ánÿ=\º¡%2t<" ¡ÌV´wÀÝGyIA/j Œt\Àc®«4™åúK2‡6uÞÕ»hhm•íÚÍÐÐ ½V仨%«¯Zî»–sGGm(^ó^½ª—¸€§’›XÖéù…–[ª­<'fš-¤­ƒÊE¶# 9À±âkR‰–`ð>²&üüb§\S¥BT´É€I`ВɆ4±r&òMY"ÕKÄ!1,ÏÁR öCá­ü˜i À$g¡m¡p"M(RuÁRõ5ÀA„Vò0ƒœÞ#ûðE.›LÇc\à’„´\¿o7<€-ª7÷õÙ ÑÂC3 ¾,à PgÅÁ’~ª5MUÏâ)Ç TáûˆPÊÇûUÁÀ}†Ôv´DĆW²dÐ>:¬pÊ}g:¡µû<)1¤¼ç°Dð€DP}“Ò Á J›|XîXÂÛe^eMQóÌ×:¥®óÞÒ`¥&1 ‡)N´c–z8t¥@zkùÁÇÎottÌêC.–Ö‰ôêÈc(æÑtÿõJ ‰ð#ž¡ÐÄG=Dq¦è½ÐŽéð\$A­ëžè^UuÁ&Õ´aVʲŒÒ— zä¡3™“œ_Ï“&_Â"#ÎpÇVO?ƒLx*§ÅŒ o L(Y•Ì¾Í ÷yȼíØìÖF=oR/Fk™`%†·ÑØ0‘ ™»1(m&/^$bãô.à])D¯âùർ¨M]uðR™ŒÐ>Ä£cšT§1¡;"´¥·_ăõ0¾ÅðÔjœ‰ÎiX[«b»§6+¦¨šì Õ²!xV«lŒË=<lƃ^ÏÖW;õt ´ëqö}…ñß 'ÁbMêåvŒ#j±-+¨=fúÅÔ1bÛ·œ©àq'²3Èí2ƒ A'?x*eÇœ;•Ä.¦£>÷:€~eðž$œ§Y ®ìô°8šIª¯öø{H"=WØj~ˆL²ýa¹I.³l.^Ó­0§ÕÎð^fkf8˜• •HõÏ€ ©Â[.: ¾ø³ ÚÇã@ãë=Ö ©W„µ)GQ’å³ôñZMóS‡à‡€{ {¨Ëý6kP;`)×–2ÌǾ1),~ôP—ƒŽØ.G †tLÇu9€~ex B²;[”öœÿY(VG!êRûAúº&+Êáj¡“i*0Ù¨˜B«æÚÀýSÅWjÅ׈ékE8n´ÿ¨‰Ÿa½Ú‘3, IPëS{ÙБF 3hšyøËÃì̼¾A~rü Œ1èu«Æ“¬5Ž:ëÈ‘ë«mžv…àsÔÝ»£Ú @4 .}ë\IƒKûÒÜ+Æ6m’QQæ ¢pÕ”®ß¸t‡FO¾*&/ JMdojÓ;ÊU#Ijùf»Z´›œ¯Ü;ÃÌz͈¸Ìí*%jö:ú[Q­j6k8ãKã·M½Ýu¯–UÝ.àÐùPMpè¸"–žRº,oEŠšßÓŸú5f_U`\ÝÈìÎò¸ŒåÉG,U¬” ö«¼ªurv}3†TÕÐHÆ¡3 tËHÒû‘í¾„Wy«<¡<hPÔò?Æ8öÑçÕGË¥Fø]Œ¾ÛwýÚv–òR\´qF©‘ÇÙs~„£Žë>QáÆAÌFK¨ã±¶‚4âpØñþ’bV¬ ¨}Y9`ˆÉ+‰À!hÄ^ã€×üàPóLÚQ¢°%ÄÕEj<€¤U¬P0yà„/6\QDcjpx†‡§ñXm„—;5ØÉ®ò5îæþÄÙŽrgÄhÈ&³Ð·ö–_A-Ku®O>ò¯À ¨b;xüË&Ó@a² Sh'7o ë‚sP[|ˆo¿{l²Uþš}P+8ñ#ŽhŽÿ`E†˜ð‘êàðƒ^I/e¢Õ:»ã ¢üu Bµ²ü5€Sg3ÚÞÍùU ‡Ñ×{—oFA}Ó õMê›>¨o¬Ãî-ªïÙcD¿dêH)ÃIi:><.ÇÒšü‘š¾Z& ;tðÙ‹J‡¥?!È ‡yvXý8÷Ô%Ô‘Q† ŽÒ ‡ñ$Ê äGLï^Ô¼¾ª-GÌäu¥®1j[Ô;Ï3¸œïµy¿¬á£HO… ,ã[žšÜì´ïc“CŸ:\Ʀ‹Ò¦$£3ç_F6‚Æ~1u\ˆE¥Î³¨“ÓÇ›ýH(ª"û€Δ&zÚìÑQjTšjX t6þЛh3z±ÑoJêMý·i†„:vÊ0áSš1ñÍWñÂ…5:ÌZ€ZGí µf³ÃiеvyKáÖâ>Ht³<«N§£Ät]V×aàWØkðS?W ÏO¼s’Éó˜ª:©Ð¢ÒÐ1 ™íÄ%ÕT·–nê]¿3²}–F¥Á‚T$è°¾BÐ÷1«Ž×†ÃÕYT&¼Ê†WYð®[ÑHýM`0jšI¤k×"§q"C÷݇áFX?<ÀkäüñãËõ«—*Û²¶ož#þ.D¼ Ì†übsNWù‹Êÿ‹uuH)ÕòˆŠl7²pb¬Xc ŽÇ‰›¢^ºÀS޳‚pz]Äö¥Zö×—ÐÔ²¾hÄô…?\ý³ÔÖkôуÑRЏ# «ñÏ*ÇíºÂ×–‘>,2b•§õ:¼g2àñOàŒr^©Þ­=6(Ç;Ê¡Ä-vY·iÇÆÊQü)ñŸÝ\]Ñ‹õóÅíìþÓtÔÍ‚GF/¿nDT}s·8û4»þxq.äÒ%ˆš²ÝuÓÄ“ˆ”‹àZ˜7W‹Û»›Ï·÷\½15Eq’èó‹÷_>J‰;ˆeÓå¥ n!ùöîâlv!¤ëõ"[Mó:0§ÀÌe_~ø°˜Ÿë¢a½¿.œØ5ñW—×s]tG‡|ºί©¸»ø|óUø'ošº™$8IîÅÝÝÍ—¸)7%ûoZMTÜ$ùÓåÇOWì?Qÿêï“Ä26’wó.¨ý^ì&‰BF6ÿËå-·¯šeM5I(2’Äo³»k&nûgµ×E /† "B9@î”sŸáO n²vÃô3¸MÐàMS¾§ ha­ªëj1(mYÒéK}dðH¸2SS¦ØÅí½Z¬Jè<1ò4“]RJñ üÀj¼f/ô^Þ{ȵåÛq²6˜<ûIúv˜<úÀEAYãcIc+ i•ìg7Ÿ?ϮϱÂ\^œ í©·î¹ØÁ{N§ã8ÁÍ¥=x¹ÅQwZÀ¢¶ô©q)/JyN€%ÀˆyrÛÄ¡°j›àðþ$ÙͲÈJá·ˆZ²Î~×d#·pTrƦg—xŒŽ[‰”]ü3êc͹ɻ}ÑhË}ä7ØeSê*¥œ” ¼Ã_ÉWüõŠW£¥§Ñ‡¶‰þW1”]â¹ÖWÁq°qs²w°Ü;8Ö¡]' VS<*\J¥sZº.…Y¯憅›éñ‡°ªOR÷bûàR{ãàßÀü”·%œ'³ï]ÉjCÕ²ªñØä*ö§Ga‹!IZÖG#M24¯z£ú•†Â &÷›\4Ÿ,ˆ’³—%œæVêå2è‹'mÓ%Wc˜Á2—ºj\b’Htf Å#ûxíØÀ{[„ô$¤écÑ}Ú?$3LÒ¤AäÈeV-.›¼ÜùÅ™4$ï<÷ƒ] ¤ýY“XT«üÙ/³ˆ_X©ê6MŽì÷›€•ÉüLŸßÏ2Ýß´jˆ‚H#…|~Y]xl²m@KˆšTÞ@.˜IxÄ s5uM^æY+–VBÆØT$þŽRùú@Àž&‡Ž¶ÞØ,@®óŒu°yPWA¨åÉ{F€†Ý忳®Ó>pZ «Ä°ÅßÛüLÞò0 ¼iJàBE&ÔTJ4!gòO]I¨|~¼=¹®OФš¼Ž~꾦™¬‘¤BZd÷¶êÞ|ˆ:8™NššÒ'tƒ ˆ‘ÀÆX+ñÈI¥œÏŲ#:’í!˜²XçKp¾V—ÜÞ½òŒ¨§ £­Ñ3.šz¨>|ëܧ2r}¤6 ºÎ¾ò=ºäÑÛ“(”ÒÞã÷S(²ªš——y¢"’äWCqìÚüФ¬YÞÔí®øž{Uò°ØÇë#A~»úòÓ#eùUQd¹UA%ì.{x(ºíï~5K¨OUï5i~ž§M=8T~m`´*zoàOô«ªù+Îìq¢>]žß:Š3w¢‚S娯 eÏD^‘Ï*ŒÓí>¬à7˜v—é _—§ÐLS!1 ¶ï5‡‘ú¸¨‹íÒ¯J¼îw¼&’ä·h÷º}É•°«ú±ðÛõ”?,ŠjÝdm×ì—0p?…f&5µ¤úí}âw`N¡“‹Ò=ÑŠî‚® =XM—‘rÿQÃ÷„§Ò±ÍWòéž¼:M]¹íϹ²Éž¥:zH _ÿ¹P‰\Õ3„ºÝµ‹‰H§+yN‰•¤?'ø ÅÖƒÇcL"%µÖÇð߸¾}žÃ`^-_ä$¢Ü~‚Ýuûಲfü·ºâ2R”qvs}~ »À³«ÅûÙÝÅâëìnnè+¶Pibܧqµ®N!çL¥%—”¦ëk'½‡ñ¯X•ñúCL\cÓ-p9BÄ2V÷"®x ?D'&QæŽËA,»j‰8 ·´¬qã(.ù¶aôɪÎ[~VÊ84 eq O›¬ãëG‚ bn$EKIÕß÷ Ô–Ù‰óÎ"²ÄT$jÞÒiÑmr<Öä8H„òÄ3žøzÓŒ =Îç•ûyúñˆ?ýñTöBÙ3íU)…‡T3$7B&´>!Z¿A‚ ðšÎa,>ÌÎîç‹Ï7ç_®pw]*Ž3'imžhsWmÎßN-Z8_FžSÒEíˆñ¾ÊúÉãèTÒ4­2ôÒg¦<Ñ¡6“Ô'ô`*UÜ!dŸ¸¢ú{ö+¬´Èì;Vhšü3(¯}åÏ­ûiA2×¾\dËÛÿ6™º/S–¬¾(‚Pœ†*v{<$z†9Éìì*a͈6{á4ÆóýÙ?±àûAë(_ë ¶y—Áà ƒAh‚!^5®T6Ó‡æ‡ÈðZìZˆ×Z•"愯`¨< <"zð/"šñ¿‰›ã­Ô;ê8lòƒˆz:ÁGj€²ŸL0lq <ë 0á²Ý!yÇ@¦Z2²¦È o?%8»'‘É~c‰ ¢C.=24ÿðLK½úà9ª¼UŠs ó¤‰:£ÄäFK$¥ÏÝbÅæsѤi<š¾ç.…íi4އ^gÈì>åÙjÕÂ…ã—×øÊgAXEµÏåÛa?àY66ŒTˆ@€XhK–?ñ”Ÿ_ ï;z×ñ‡vÿE#I9IªäîKâ|vQÁæ2,+ f´‘ggô N]¦ 15$žñ¹ó5ìTßi9ž2í0üèÌú¬¬ò×Η¼t÷Òmª7†z<ÆŠ¢R)êLf%”•ˆ,Z5ÿR°ÇžÌYÁ=Ë„Z`È { Û!lR”ÎÌÔ[=ðhÜbÃ$‚"€±)› ±gŠ€ RYu='‚ä0`»ËÁŠ@èÜ©ËÀìo~…ýA šp5ŸŽvÃ%q¨i÷Ò¸Ç÷¼…ÀËMiì¿¢CǦ° ¾2ÖŒ:O££ÁÁã)é žµtôí6Dˆ§=†möì MÑ«ýÒõ5~Cvï"ø°`µômH ÇHV"郫ÀÃÒÕÚïû¬-à!VSÅàêè° ïš¨¡$nErX“gÒÔÓ».!_­r‡E+Ÿòr‡£-CÅÀÚÛ°}Åm÷¬yS–UüÃ`J01å‰ú@àÆ.<£{Ãõ¾ÛíÙ Œ9¶M~R±Â³w-Ž@Øè`—U74 Ž Rd¯?Œxt·yS²þö㛬Ä™Ý1A943Ñè…j¦˜§ÈY‰F%_Ѻ­ŸØ÷¬=ËIÊ·ûËäææýk8ß[#ÍíùuÓ‰‰1‘9|¤ ¨ÊRÎÒÔ{–ð†GNsøä6k24Ár¬åíò`ÅáT$XÖA‹ƒ(.¶z/ތ߄‰ûƒîq1ø=w¸v[M÷º»å…Ð{o‹Ã‚ë°û6¶9µÒI¿õ¦@)²¬øO(’ªYz;ð¶€á+¢&‘Bd\åD ¬æÔûv*þæ²o8¡Õ3ÿ"8øB>Ú|Qá1Öu~(J’,4=ë»C;Š™–wÏ´åQ♽í&ªŒ±’Ž?e ‹ti#ö·9ËqiÎ$Mq¥‚¡E…Æ^Jh´„ÆxeÿÞH‚?»ìA¬» "VăºRÇÒtì§®T­ “z¤ôÁqSŸÛG¡ƒ§ö‘J ˆ;8oÐÊd§@çWä‘yøÉ,p¨A¤Ée‰Ê¥ô›n[ÈpUTûçäM¾´«¾-À†±D¿Z›Œ+nSž,UKBû¹cHÃÇŒ d7<æbªŠ—i0È*"â¯FD†ô+tz¦ŽQO7‘Š UlšaÀ|ioªI&Aòd Oqß/æ±°ŒÝ¬!pbÑØÙÒ€ûY:\'FÅ0ÜUÑ~gMg­§ ÂõK¸™ŠL ®ÁdÀ…œDäDºwUCo2T§R1U‡† &&LŠ Í Í„¦‡Aû˜áQnù.-.ÄUVjI¼ì8„ʤSÀÄ£‘6ñ¤Ä]$Ê×Ô‡± ¿>Þz^oÍׯ[ÿ+ã‘(nV !qI% ЇY.Á€§Á¹ÄÀrs !8¼pãj’—Zâ¹NÝ2Ù´JíQ‹¶‡§o/¡ž©J‡9~:bMwa¾TÀ`tt(šnŸ•l¶³Üà:j\ªbWѺ˜YžÏÝ,ÙÀ~}y†8Sz`6­«›ù»Qà]>¿!]À(]”ÔŸ§ÓËÇXºËÚ+°9åà»=Cl®‚,E2Ÿ™¦ Úx,KXƒÂœå|ýŒMFÄÑ,#kaÔxËGì˜e·Œto+5Þbõ&[­x·e­M© îRž£ã”äHþ.ìåm"r™ƒëe‘ÉÕÌm=V’(”m­Ãkk×åü&Á®>ƒñæ0EµÏ·Ã×>‰Öx¶˜‚â#fBH”a†É“ïc}¢šnçh- ›4`K¤"Râà‘©.¢*êGK ¬8WÎß7k0©m“ŸfgW?Çãÿ½× Ëû6k¬=Üœ iKÀ¹ðHD±“¦½ƒÑ3u²Y½n9Úm^Úb™•±ž ÐKø"ßãk›ÕìÞyæHïïêÕ âz倬W:®zeB©WÑÚˆZú”5(lR Ì2PÉT ]Ó%<êÀˆÆ³kjˆà5Õ S0)Y‡H)&lŽô2ˆÞK®Àó씲uì&£çU¼D$HRD@»ùž¿ì²b°1:” ·ÌÑ!ËDí|þ‰NnÇ¡ÃÊU6øU° 6‘¡Cif hÍ׳ûhpxƒ•I]ãsh5ˆ˜—BžR±˜ÇN6í…P²üã-½Š‚Å9ÃÙÁÙ¿¹5£4GÀj`çi¹è^vÃÐ\ZòRÈÓ!j,&LÊH ƒb+Œ·b\|ÍÇÅtø°€/š´KÚ‰$ݪÑþ°Ëë„!€É±…¡š Ö×C¦†Î`2`Bìf g9±x·²ókS*¤2G‡)MŒŸeW‹0â9ÓÖûŒik?_Ú<[f7¸®HŒ¾òÍ~™.¹=¡=öSì¡5ðx>Á:‹é"†xä§÷°Ã3â‚Ö Xµ·Ò¯Íé€u6ósQtF2…™‡¯E7Æ‚=ëæ·p¦‡õ–OÙK”~ÓN“rÛ&KÄ€eœ:ÔÆþökGÙc›ß¤(K8Q$äÔU䎠C)C޳¨È½»€õ:ŠèM?ƒÐ‡ÍDe¸@ĸjñ.¦<éÕnÄ»˜üp×YB¿zýPT@ø3y€3fQɈTÇòýäGȲU¢_ໟ…7]ÎØ?k<¾¶ßîËýyXˆDǽ-D´œ#^²´;šâEñ]SóŠ{«Sžë;ˆ7Èe¾¬f.+= $ñçspµíá%Év»ò…¿¾ƒñµõG@J‚9©Èî3Èéƒ@/RÃÑþòûìÛ<9gt‚¬}%â’øL¬;t*öœÓ)Q•צ¶” Bº< «úqAϪ9ߦTZXNJ϶kΗäÔã).ülΉ"kd 0…Ƥ5ñð<O6F$ Ïc~>½FÁõBŠÔ†'ó6 wÙ1¢0g%Ë9ÖeÐpm”&õÑO~=TD:É’?°Œ„n¹¡®ýcì*$–ºöêþ=š(j3¿Zï»×쟼iàä'\¥å LÛ?Ú†í5³¸ª[6¥ËüVòjCÛßÃÝtå¿€,ÇŒ<×µNò)•<¦>«­xó ÂÆÀõ0¸¯sÐø½ÿWâ:ùÑ[þ”¤\˜s±Q¿ÀË Ä]ÝsÉ![¶HYdœ‡28Âöw*AùògjÈJQ–ê\$è³F¥áZ– ¬ø‹(S‚1pü~Ô]ÅÃo³œËç> ?òµÈŒ3ð4ÐÈÀ6\PšáfPÐùŇٗ«ûÅŒÂÛÜ^}ùxy )õp"m±¯Úl-f,íT *%Q©%!\]Ý|[|¹žÏ>\,®nnþòåv®@´ßñ´ÜTÅíw<ާ”Íÿ¬œ› Úý±:Ú½«fþŧiU¯kUû´ß¸ú°«…¸¿â_†Ê‡œ/ò‰ª8³Pñþâìæó…%úØú@RÜjAÊÜÚÁµ²^þ8… ÀÒuñWǸu™=i‰°T}¸š}tlÚæÝ¦^§Ë°Ô}¾¸ÿtsnëÃYÄQÚP‚¥ëËüâNjZÂzÎ úK”ãí.ÏfgŸ.¼½% O0ŽÛÓ¦èr7Øå$(U‚”ö«+xÍiñíÓåýÅÕåüÞP5ªZëß$¥‘¬è¬1E¿¡¿El½–M òŠßIwÔžÄéüýb¿ß¯®ÞÏÎþt=‚8…ë‚ßõÀãú²Àáñ \@’ü¸º<»¹þàw€ŽîN|:‡Š‰çƒ2åu?¡™x…"záOÈ¥qö„ÇÑ„pM€ÐÀzà³/÷ø<šP+ÕÇ8øMAà@ÓEôÒ JŠyKéÃåÕýÅ·„ؤ‰‰ÆÐBy3õkƒBR)Dª½¹;»X|š]Ÿ_]ÜÍu•ßÐôÝPð%÷wØ ê¡Í§¶y’‘rBÏGæ1æ¿ù—÷ó‹{[_WlsÖ§P±4Þ_~¾¸ùb«tæb#µ¿©èòZµ-_TaçI`ë)`)ŸxÏùׂ~Jɼ‚0æe¹_åâŒÊD[¸´THã§`¤e¼Þ-.¯Ï®¾œ_ÌóûÙý噆¦Ý°ÑÈ&;õ¾™ ¢Ý¤JˆÒ=ÿÄÆ$Ÿf_/o¾¨ Þ7<â‹„wѧ›ùýÂøþlºn—íŠt(\’·Gùt;»½ôv)¸.ñˆwuYÒ¯CVN!„Áq±2•ÂŽËkÖ±ADäÛ›«+úõuv¥AáÕôî²¼¹¼þzq}s÷7¯KþޱGÙg«Ë«Ö}[&ÉI59Bÿ\^ÿÇìWö»¿¸žÃSÁ¶îJ­rLÖËeX:¯Y³úª>šßó|'¢³xD¢u‚„…/’p½¹¸¸ÅWgï/àÓv¡l-‹¸¦¹(Ÿ—‹ªnauÔNÀ…¥LXª (®.ß½¼cÿþõlq}3¿8cƒñ UõàV= žê eˆ•;®nfçöXsI —"ºín²n¸oüJS¶¸ÿ|«éxô¾9BÉ£x RiùÈÇ-†š#0(1Ú,¨0š)­E ¯ AÞŽ‚–´¼½mÁSýÈ%Àú±Tøyv=ûxqÎ>Ê“|ù5k&/0ðEW” 5a<ìÅìN[^àš |~ÃcÖ¥Pdé=»ù|{w1‡ÞÏV_f“‡L\/J°^Í´a×Te“W¼¸&”`iºžik_\ÓÕ“k2ê%×dVHÒ·›±8Ò2¸þÌåXZÙ°šºÇJ÷מÀV”ãµøËýåÕÜ´»Ê»Íá¹$oOp}qœÃW5ôvS•ÖÐ×)=7ÐÓé¢é-fˆòx”“r1šº{Ö°ÿmn(¦Çë ùЧí¦ê¦çë IRý6¼»€ž€ Èf÷zopŠ©ê~îšâÌ¿ç/±OMxU’6"z¡ dRëÝå×ýåâo8r㦠/ØšñÖʱUßÝ\ñ—H„n>ô‹|µÙ§•úP‚ÐLJ{·7w÷¶¦#–’¹&c)™k2–’ñºÚ1ý 0›?xÎêwÚånQ¬áVÉD5L@Z¬á®ŠT3?»]\~XÌçš8]²^ˆ7ÖS«”rAéZÕùÅÕåõ—¿.æ·g—l¸øAUvÝíY·Ü@'?µQ€”¥¤(E*þp»x?»?û¼jíï{˜ð‹ø–•¢T‘:ÿó Løi÷T3”é뚬j×pÀê˜ &)’ìmV²‹û»ÙõüÃŽÙB!ÛñÚQŠÚšïÏo¾¨ÅpM«ïÔÃuœ]é¹c]ÍÇ¿9 Nð¢¼_h¡Øû‰n÷SUî•‚/š¸#öÛ½±§8ÿbì'2ÑÇì%2áæ>"oî!2GtÂL¾Ñ3ñFçKã XŒ‡ÈÏ“kJI¥© )°0yuy¯ê³9ÑJ%ˆ .SÞÃ.sh™¸”vtE¢¼[>_â2š§¢wøHÇ ´]@ùüÞ¯ø¨•u{IÝ^KÇþôˆQŠâ— 6F(ûŠ^eXÁ L,6Om'RŒÄR)LhÿrÍþº¼f3}6‹ÏªÁèí¥b¼¥c@o)Ò¡“œN5^·¡wïH˜zÞVÀ¼ë³»¿ÝÞ/.ÏÙ @oÓ¥X-¶0n8 B±JIˆ©úò|ñÆŽÊX°6h%?A~Ä~ƒ©×Üy0•›{êœì>bê£áÁncö£N}»¹;7'@‡¼y¨Û#<.ù¥¶‹»÷7sÍÏpàÏhß¾·Ó¼Ï¹ÐJgkh„£€FçÒÎevòEd'_å+j«œI=ò˜'b,s¸7Æ/lżX„ òÁ!€®1ØôsE·½|ò9—úF‡Ìß?FÞoJ^ÜÃU¶ùÿ*,¦ã·e™o—?(<>—Þ"ÿœ(,?(T~Nßý/bÝþéâØLàÀe¾ÔJ3üe‘ ÞüS ‚(ÚW‰xW –àNÞÍœÑÀe+8B®a"²#ã^b!eªƒä&¾SÀð>"¯=<Ž7à®pã^Öq¾má§uPê¯[X,zøvÄpñùL„ \èCóªZËo +¤Ã÷L½¤N㦩ÉÀ¯°Êµìôp³}Îô¢ÿ€{’ÒŽ˜‹’çœØE4ýª¤ ¬L4ŠE½ó¬›pþ×fI ¶*òS!P5À[ž•ÜìôjóvLßðVW÷ÖêÞZÃÛá~á­Ý-¼Ñ+¼íéÞúû„·Gt o5ˆ‘ÂÛpðÖÛ¼î Þöwo£û‚·Á®à­¯'x{ÂŽ@yô‡uoGô.œcû€·.@i:¶°d¨ù¿ µþwcZÿ;]Ù;«õ¿³Zÿ»áÖÿÎnýïF´þw=­ÿ¿õ¿;¢õ¿Ó F¶þwáÖÿÎÛúßE·þwý­ÿ]tëlýï|­ÿÝ [¿òèkýïF´~α­ÿ] õ+MǶ~«A†Zÿ;_ë‡Gj£ï10b¡ ^®Õî0ÀKµP¶EUli×VåÍ…Ýâ ^9™ø`1“‘Ä *̤]Y¿àå÷C+o¿R+0^/^!ábƒ¯´—Rªf9)娖 ‘›¡bàFU½ÆHòm—ïZì_ðÝÎ5_Y„M¾¤gºîhŠs6Å:_¾,5xB€VÅdšv “§ÕÕâ)k* 4váFŠH¥ˆs8p†gßfwח׸iá\,E]«zÙwïÔ{«Õó†m¶+Bât’y‹¯ÃC~að4å 4 E"½¯Á/뜔‹ŠaÏýjÌÇWût™ç¾u…«—*ÛËDRøUáùŸrX§#5³ÕJó;½3ÇArºW=ï [¯ŽöiµHý bZ5{yô‹/‚´A¬b®o¾©÷å*y©÷ 'I2nüŸ{ÕXÝS¬V_¯=$tÆ¿$]±cÿG¿Ýš9¼ßÜÅr“/¿Ë…ç’Cj§ÇÁÕ/p´žwnl¬Æ«õ«Ø'¤£1ØÏNkN¶½“)HDÞ#í1¯ò†3ŠÑÎéyçMWvéHšÿD0áfe0LˆB±È–ÅX$Àã4ó³¢]²"8»ìïmQú«¼c p>‚ñ q’eßaœ|ç¦Ð¡›&ksŒ™K)4;ÔÅ*€³k²UÎ ã{„ -oâ7¡ h8€ *‹A1éøŠŽ›CB@þÓæ7 Ëæ„üSµy!ÿlê+ôÁœ† vb<“»SºÃNöºÍ`áàµ×… m{¥‡ÙH¯›Þ£š°UœNEÏ•©„a-püf{ð2ó’Möaè8J­O€‰ÃGÑì¬ïLá‹R4< T‡ƒpÒêê¢Ì £S£'eZBŸ–n›wY¤¤ÒñGXòra¶Å5„!Ù’š¤ËŸ=òëí®(ã|Ãi¹lúÑ'™6£­oXãØµŠTäcz}yabá"÷©U¬!)w’{ô²!}Øå*N¡$çšäï°Š|»ë^Rx¬9J…"'êwXE±•'‡Ä)‰¦¿{Ć>Jþ ÆìïÛ>Ñ]þÈŸiÎÊ?ÆqŠ>n‹›ÖŽ!-aýM¬Ð ©ÕHŸžVTÕiÖ¶ydÙHjR!öʇPpm× }…½RJêÕµ*–]ÊFÙ ûoÛÆê3¹¤N39N/>G2V-0¹Z!5Né!+÷ùxµÄæ*¦ô^Õp-^æ»ðb€Iª5R{•%ý*ñt"ÜÞŒ¶Øa”Êœ^øÒ8s«[ç‘jõÄ^-—wéïûº‹·Vç‘õÄ^Ò²fÍï‰Gkµù¤f;£W;ÍlZXi—g3cxX%OÞŒbY¯ò´„æ•m<“O€ ‘Ñ«ý‰}­—ðŽàˆ¯¦Ë&u[éaÕ»|÷?£”!‰‡¿z¶%Åo‰¤\(þÝ#ö%^ì‹&ö%F¬ˆvŠõv„ƒOWhd„µ79ë ØhßÀªW\ŸjñV+±O#N|V)œ‘';ÚˆìndD½D=Û.~Ò)ˆ¹Nþ+,œþ‰Ÿ¿kô¤BKèѲɲȑ§åÒéG¯ä²Œw"—òùï/[Vƒ¿Gú‡sñüWX8ÞSb³¸XÄNåm&Rf§†•îw+8<ÿ°‡˜Vq3*“…ši=êZ ݱËù;bòFРV'WîËêÇ“ì¬KÛâ9Z¹bQZUZX<+õª[\±ÚL¤ÒN +}ɶeô7A“ñ˾ˆYÓX‹gœ#0·\Ûšýr Rs…RìËöH…ˆ+ó £AMŠŽÔ¨ß¡Ú,¶_ªF(6ôgðÆ´€ùò%Z §7=EÏbÀ+’¦ƒh_˜[ŠÁqÐB €n/nÏhÁ¼õŸÃG®G/¨>÷‹&š˜…‹ëo®DÂkÀrQ¯¨EL`’Z¢5óùŸ²Q=Î"¾«¡íGbÇRËJÿ"9Râðl`ÊsI¾àƒ[Óÿ¢Òed„½%§íTK••/BŸoRi¬œÈ|ú^yV©IÎ+Ïi­~íâ¼–¡—qšÇ·äy,-îô1¾ÔãN·É¾Næq¨8ëxœ*!ãLœœôi² ¥Ò,Œ‡%Å#„íF Üc4r[xe>E汸©TI:-çÈrZJ{$N‹iÙÈl$~GœÀû“U·Ë¦Øu§ò€¦”ó”WÊý*õ/¤®PHˆ;Á¨¤iqq¶‡°M®è],›½'%ûuzÏJêʵÈk$3ú¥ïôd ˜†vðHeÄAÊ(â6žôƒaHù‡-ûXÆ3Yúp)©‘'0‡Î]ƳO^ú é’#föÇŒ¥ÈôGžÕŒ9"9  qH²h*4ÄŸ£ì?=‡Òû!‘°&‰sÀßüùiVÑ™_¿ç¸vºgÖ¬h:ô€70”™–58Ô+Öë£c·ü;zdŸ…i¯ø7‘$I‹¬Ä÷ÓGÞ@)œóüòÇÅìêÛìos’È»ü¹›"R°¢Ì³›ëû‹¿Þ“P7z¦·à˜h5¡ÈÊÅOxý•¥6y*ºM’¢K˜’Ǹ:!á>ªA—„ßç0ñ½žkKž«ª¥®+)‹‡&ƒ¹oñXtl S/ó¬ZdËe½¯º˜+ƒ|Ð¥H—r:ëúpX”ö|=¿Kœ=``9b¹zø˜³Yö<°ÞwÖ›ÔMö˜°ÇÇç³éRNç·Ç¥½>Ì:̶kêxx<ëºl¹a)ðOò8’9ç8ÔåεÀÚšfµe({)ã<06Äë3X£í+DGdTAj\m}Ó,‹³iÈýú½w¨xà±ø“Þa7-ñý÷Ø9œ0¸¨íiIŒÖU 6®¬6"ë«¢º ¨ÚyŽ ­ßŒÑ Bïmö"eO™cGϳûë⪩wŒg dƒÃ‹™( )Ó~y]!׽̉-Ìë¢ÉÙü¸]]¼Œ> a_•1…EUÁbW6œ¤ËýÅn¼M^¯Yœ6-v½–Ù"Ñ8Ã’œ$¹¼mEdÁ ŒiÆÄ™1d€!%d…½ØÂw~lA¸\>ìHÕç|MLTBzÛ|óè!+aÂÒŒ¶$Ìí³ßDÔ}–yÄFY|‰à³-·*l­·WåÝÑkˆôΦ@]k“?Âtu¬÷=l>ÐDÖço]P”£‰Áöp[üc|cp˜|&QŸJHÜ'™Y€Í1¢Êví¦?—ñ2zᄽ¢ŒšsÛžvƒo™ŒµÆeóÚ‚d½–h‚ܯk Þsð}8ëhЃp{€¿©…±ËGûÖæñ!e4}^•"¢ª£öᇸk¥=zƒr‡ýÔþ SV¿Bw¨-°4—íg›>‘õy[åp>ùffléÕÇUÖe?b6§‰šÍiô^pÓgs.’­f¨³P¡†9|ÚÍi‰—]«–¿ð#¸¿è³‹Ïg·ÉŸþðÇäß’_Ùÿ9“]ž‡rpX ÷Á†l?fÈÑû¥,ùz5»†1E–œ«iç·.P>¡cp›|‰'1ÊìÅy–!>Zš“r1ç"!¹Â¦¨Í0LAl0r.]¨àD0rñ[~ð‚>¸èjþJÎèµY‚'žÓ®æä$ç—óÛ«ÙßðÄÅý #Gªl¿LÜ _n'jä2R’!Îÿry{{qŽ/âs+wïGlš˜ÇX4rÇ„dÉø"°:½ò÷¬z¬yŒñþzì¡ä 1‡‡—µW'7¢Ù±I;æ%Ì_e±ä;ÿe¶Ú.rèQÛnÿÐÄK˱@^*ó$“EoH2ƒuÎë’UÊöuQ²Î»nù¡Þ–ã+vݾŠÀ¦Óé¸0ÝÄ„I:žËÛ„¥T9ÝðmXÕÏ#ÁåˆÑF€³Hu|"Ë„(Ru”w°Žp¸Ÿ´Ét`F¿( u@¼7Œ÷Ø¡*–1€™ˆ%[€XŠèúò¬Fµî×/ó¹âj-5Vk£Ií²åwü·h³f-RùC SØ[6çÐj Õ”¨ôÓoq)œNÚEÞØ $ù‰Ö¡ËÃÝeˆj´Ì(Ûl•çYû2„Æ¢“€Dº†I$`‰ì!dÝsÜž*RJ<ìo¹‹†¿´´ŒŒÙp÷¿ÿëÿ¶¨(ÖE^®XM¨ûª+Jк‹ùp"× —AoJ¼wy×¼POÏW%˜Ç~°ÒªÀÓE›la´ÎàC¿¬íwo…•”÷脦 À!üM¹:™µ’I\.ÖMöˆñG¼XT/S!Æ|±èælñánöñóŵõîT½üΜtú‘5ÊR#¡‰cò ZWPPowu;ÐŒ}¤¦ÊJÕíAïȶðŽ ngƒoFÿzó~‡gœ‘?Ú†ªXð<ÞêzMà4Ã&PŒ”ç Ñ–¦SÚ5®ÛCi`ëÖÉu¤”ÁCÌ´q‚ÊfYæs ¶jÁÍÅ‹ØåÐoàž¤RKÒ5SÊ¢¨Öu¤ \Q¤@áºDc'¤¬£+ظ5&à6dñ(°½8)jµ]p–á³í<›ØÀ™>—I¦ao)Î{¡[já¤fý€‘¤eÌij<}ôއN2À·Åaóñ:\Q•¨ÅNF@Çш<>= Ùóéû6ÃH=«W¨f'¨ù6ñ(Ž4"Ú¡A€7zú7SwY?í»„†n̰tc꾪a¾PÃ|”ôÆ›:¿b•)¶Vyè Lž”_ÕáNPïêÍ:û]ªÆ÷t4îOõSž\ò+a°…Á_áË„ë”úý¿?£þ¢ËM]w‹}SŽ_;öØ!`¬Í/ï/w77÷‹/wW¯ }t¾ú¨ûŽº8:Ñ :¿À¾_“`SÛ-êf‘5Mö ç½Ú!×viݤ( •dHsZ’‚Ï{—È\˜Ò!ƒJ‚îPíº%ß6År£r[ºm{ ëy¬,vßY«*ù`ýÕÑKË¡³¼TåÉ*i²Ðj"K“ËÖ2OýÅ*(uô¡o‹¶ZZÀnè¡ç˜(Yû´|ãï‡}ÃÏ>ÿœ\ªkþ\Nà½èÂãÚó·Mnº;ùßÿ;ù?ÿçÏlÜÖÖ¿°ù4ÜÎØÕ$Zñ²"Ÿ;ÓÇš [LtÅ2b)¹É÷ò .³M9»ðÃÕ•9&‘Žzõ° [V½•ÂGª©bY)]œUÂ`ðlÏ£í´9?û6'xurþ>éø³ÚR@WFB“„6°®tau%‚jÙöþþ [S–<¬’p,Ê«Õ?VuÔò:£ãšÙ_ryýMæçЙ®_h×wܓپÛÔMñün‹0aœ+î3×CHJq…gsub±D·â’"]ÿ‹`ùò׫ 싱ëßÇñrË_S–‘B† #öì1Î>_&lÖ™3wCñóˆ¿ðëklFúDkI±’ІW©|”&8cqÊ bDWyh] <>é!´@êÙI!Ìs¸± £2V%A1tõLoèI1æºËsü"ÔVßIŒ1ð|ÈLPTbtØ ›+ÝTgaa™Q’Òö1¶|ÚÇPù´žòi#ÊgÏ|4_fxÂä#]dÿi6ÿØþ Y“å /‹ ë3£ÀzYLÔ’$¾)Àè yÈœË{Eh xr%_¢ù}»Ä؇Є¤Ÿâ3ûaðdk8UÓîÖ.o°ªUö>Oÿ70Ð&˜.@ 'wy¾bö'êázVj-ʺ8ûõϤŸÍ·Xoʾy òSöY×zÙ4pœ,ådn-ô UIApêV¯…ލÑF Âïnœ;£¾×F‹(ó¨ )>J…+·/›ä´r qNX)'—· Ü{,ÊVêÑìÓijÓ6qZT•—Y #"¦ñ'¦öç$[­š¼mùG0/b-·(5åƒÇrAª6èî ®>¼Wôúbʇ(påƒYù`Ã*´¡C´Vëô[¬-ÛìlÐpqõ^"‰áÃ` CžÒ²=\‹5|²žZ*¹R~ºzÏ‹«ŠØ” Ê30ä}ž‹ëKý¤’^LU…ȇÅDa¹¦—{1¦]†¢õFÄäPGf~bñd6Æá#G"B æé;—V!Æ<×KŸÛ|¹o ö$?£¹$ÄAóƒ²áð¾€Î†€CÁ×Û3 j¾Šô—\áÙ®ŸLÆ>W©f 9I²G Bó€ÒëÞ¿‰­ph ‚ºÖaÒ(ÕÚå Nâ 9é•äC4 ÔYfûj¹Ytù_NÔï§WX(?ù:.‹Uÿ†‚/(;Ùä’rYq,B ÐÒ­,‚8TMì!ÜA3ÞÀVøb&2&‰ÎšÆpRÄöþ…&ˆƒ¡>nXFïdá ý¸’ó’+t"Û-E“Q+K±-ó“l‚ôg^Àø"UžÐÁsØ×Òæ`[X–^.Ø a`'$@l@g™)fZÀ%“~OÒ»¤ƒWž²Žùú¿ÿëÿ!ÖYÛÿþ¯ÿKˆ‡@Ú¸$­Ÿø%2E…b”7ÂÆ´;ý“§OVñ<Û8æØÇ¥ JªÐwÑ+Æ ß š‚ÁÍ*}llK |r¬¿ÁðÃEPy›[ìê²X#¼ä (ÏN)[Çi2†ûÑ ]!Y´ÎáQÍyåͨ%1µ†\ÜµÇ 6}…Œ;UäóËvÛ –`…L\M.ÏMÄqºç†«Ù©Âq·Y¡•ò]*Á`Œ\¤”hœA„lZ÷Td2íu²¾à¹ ãâ ]¢4iíÂ$'ч1æ5I¼G®‘ÏÍ’êÞ‚é¢üô$Ê÷- X¬xÐZî‰ —1)óWdý²):–ãÖ*I>\¡Œz|1P| Lõv©‰é×*W§y­.VÜa¸Y½Í¨Ë;ì–‹Õf¹[Ð<-ÖW=\äÝ2ª”¨<>ô‰ ùùl²…Ó«–¤± Aƒ6®Ãœ:»Mnv<./¸{ ·já½mè‘@½9$Ò>Lì¶8þxÚdî»ð'Çó•´1„µŸEñøe¢CnZHÙ)˶ TŒž%8@zÉMUÒ[M•wÆ’J©V»º¨ºµÊËb¡æ$þúd °—ô‚¨#mòÙÐoS¯Z׈Qð{ ÷ômèrZBƒrw­Mm‚ƒJàu¨d 5ÌÂ*~§aÆÖÖP5õÔÏpÅ VÆ*[–#¼å›˜ Ûï/År˜Xõš]¡¯zl4Ì @4û«Á+™ŽICÑÜÂèã²ñuá ¯˜@[¦*°J®3ùéhÕºô±F ™6D¯³ÿõìÞ²O>¦Ó´©-hy «”l}CÑiÐUÞEã !r±P÷'^³FÿЦÛge²kŠTXÜ—S^Úå÷j<„&Ȱ¡@š1a§&ò DëÌwÝ/|ˆ 瘱ª™ºØÔÊÓ¬Q¡ È2RA4v›Ã5B/ðY£B#ø›Ð-·`¸Ù°ùf—óc5ñ&„¸L3ŠŸËñšâˆ¨· 2ð#:vÖ…µa}·Þèpf?\ãÛýø®ÁÃ`â&¿Ãuæ!_­ãf.bÔ^xºKMCÎ<Œ>z‡O‡Ððé04| C£§Cäèé=ÜÑÓžBcÍëä+å|˜»1sD›ÚB¶ Ì %[ÈgñLënm—íªhx!`.$ã( Ë.Ö/FÔX`Úw=áuô¶…H䃰<Ä ÛÞH§L Î„(¡à)gz¤6ÉVÛ¢‚;fYÇ:I ½4`ñЇ¾OÖ.ä˶¨]J¹U¯ã*¼¹~e•e$Ú[º@Ç/. ª7é”rž®«æIÖÆ\’Gœ†0äËaýŠFéfiº^öÓØˆãàgò&пÏ×mÁŠ©à^—bšŸZ¡÷¬fg±!R|Ô‡ŽT,Y¡¨Ë¸´7ab‹EÂã"‰Ü2¨tPp|‘F¤à@¢Ž#Yà;ûÊU¹–^ÖàXC‹^Jëe2q)"·ô|Bè>Š(<ŽVõ yl&‚ŽÍô\=æ54Ü.\"Pæk¢åPðïTðÑOÔù¥ÍÅO‘ÛÕPÄ ÄÚÀC+UrÁnæ ì‘Ã!@ ƒ(ú}ä#5AQ–ôÁ ã!ÔvNۚ͆x^«A£•\å á°>J — 7z/°Ô÷¤ßî%`WD3p Tfu׈ùŒ±„K||€&Ž6á¯ÒrØ—¸‘|¸-¯¸ÐܹåIm,Q±[,b¯jšö©è–›øvDôJ:ý6Ú%mŠ'õ·«9m‹Ã‹«-b¨Skt¦ 5‡Øu¬?¨qü±µ(Œë¸ÚdÁèW9dÍOëhÓíY,vÌ5ì ¿<¿ïÙçBƒ¥ÂPÊþ±À¨†yµl^vP8ëÂq‹vEé#f YSÉšë¥'"žEUë¨þnííìÖvO·Ö»¹yç¹+θ~˜'k|á‡xÞ!¶r¥Ö^#–g]=Ïr6UAÿõjôPrÝ<'…‰B'7öØ ÖK Žq¼N£j|N9¢Ô•ʵŠÅfó]²Ë9ŠX›Vhb† ¹ ŒÇ^ Å8MæFÑpvY“ms˜KEÖäsáJ:ëðNX”kŽï n¿Uqg7 ®ÎY³¹q°d3­†+“;-¦ @¢OÐõºÌ—ÞÄù#Êiñ.˜ˆÀÙÇ`à%ŒÏÄj0{æÖ”/냣ýZ˜Eܽ‰~&õ!ÕˆRç6E@HhqK£Å‹ruË•3ûê ^{«Uhºï¯W@°\½·ìÑš‡!fè^¸ fùë èþ»Ù±QEÜ>‰‹„ëÀôĸø:ØWùö!Ç è2𬠉ç‹Ù‡¯©û¦#VÄ¢æà„dùè4,*‰‡Ù“$_2þ zKÿòí—UrWãäe»”GžrJ»]Ê·&{ç²Û¥!jöj»mé‡êy—ŽÁu–µÒÁrS¸¬Œ¹²zØlÆþ$“j1χÿóYòõú¯¯ò ÷—#Â7%Ç‚‹ô‹.çÓ„¸«Y¥ÍØ í`%½mq× f‘ÖlY ½pýøè¼Î,žåÖ*© _åûÇûšíaW{S×*b G){}.ù¢âO-ðÖ Š<¨¦<" ûZ®pG‹åÁ TÅ-­ü1éKä$‹T-Sä`‘„ãšôh¿œ<ˆ+Ã)ââzöþêbq?›ÿeq~ñþËÇwB¼3í·r ¡H*Ñô7©sžºÈzôRž&ºÎ ÅfæéRðpå´s)ø=ý¾µó™…w]²,±D.¥~`x“3LóH.ˇlù½ I§lGà’JD’땘eU[>gá/dˆŸ®èèp˶Å(t¨GͦëvÙ®ðëà™–ÁÂ¥‹ŸŽèØx|–xÅ& À³§)œo‰ç R6ÿín7yYúȲĹê[ð§Š †Ðm9ÝjॵI¼)çý‚‡´L–ü'Á 2^²mµäihI™X—ƒÁJÀu~ÓÖ;óµB¹Lª‚Œ?``D„½+yĬLH¾T¹½ [EïVr·°Ò÷ +}§°êÝ'¼bù‡šõìÆfa»UX…6 +Ï6aåÙ$Ìš‡¢ƒGÑ-B•\¯"w «ÀaåîVÞýA]»¹IØÊƒ1UÜÖ`å߬œmÁj⦠†•@ýˆ]*vW°ª[Å{8•o?P*uu!¯Ô ñ$ƒÕhDz*a±ßòTq†)=ļmÂÈ„ìƒè¡ÙŸü¬²rŸCŒx–S4u…×8e—óJO]pz$8fS]í÷üEqÛ€)ýÓß&©.oÑæmAoàÆÇ¼Ê›L~#¤ ”]èP!EW–• «õèjy 4Z£Ó#<Žâ¬LM¡zžÙ\_ÁÞôCV =_àq­¬vP²l¥’Ð ŠÌ>–yBy؃ÍV¹³äBïÀ€ûq7 åqçâxÜ wÖqóDz~`ö¿ÿx ¯Kuõ².¡DàcáyE6ýã¢[z?-š Ô—%öÃú®x>+Ñ_•ÌS,¯bÏž>*î7ÅûIÑô†¾(Œ/gÃÏA‘‰:øm.{¯¤bM>»½|yÎÅÿ-s>e¿dV Ï›5Tp5”™ç©š@bÔIVhÐ6¥Ò/stOÈDã©:™h6gëŸ (ÎC¬ð•¿ú!êLÆ0èWë]¸!¤oÆ }Ó‡ôMé›Ò7#‘Õ÷ìq¸Á›t>J7 Q’óÔKkòGjë|E:_¹þLhD2–hÀb¿ O]ߺ߆àÐzÖ0"ƒNEé.¾D¦»‹'Õ•Ä F”¾emJÿFŽ™¥{Ĭ©ÿz†Ë\ùcY½ÿsG²Þl-‚ó‹=C¥ê!V:)“ßÒÊWg2W3 ³bÕ†©“i1Ù€†):(|ª‰RÕ þžAÜða!“H¡1Žq"É’¾˜Ø4×ôÞ,?4£] ÊðÁ5“HA1Žªq"ïµâ94ëaÍÚÕ߬ õÍÚÐ~÷aPyÓÔÍpƬ²{9~¡ĤpЛĤBÌÅÝÝÍÝâæzñùr>¿¼þ¸ø4»>¿‚ïn¹zÓo³FÁµ@Š´~ððÃ3"®ÑÜ⮵*z Ò‹g0àWÔT”Ñ)år2Êþwlð@ž¡…E{•?gði{| !‰Çø¿øëìóíÕÅœ‡÷ÏŸó%t+e¶}Xeý>õ‘ ˜•R–ô²Á€6_P’¸±~E9ë}µ¤é"fãîÃBÌ«#Ö8qÚª#ÁíˆTJ¸‰É ºcLäºêfx†Ïfvm›‰Õeœ×ÿ+ÌêŸëŪÃÇgÀuR¸NYVJYÊu:ƒq|‘'5ùÖ°KzÆxN9>Ί³ ÎM4QÈ ReÙÈ(Õ ^r=ÁH±sÞgùI}Ög½Ïú¤â¹ÿêÅsǦ89«ëÆÌ÷9vêûšû>{&¿ÏžÙ¯>ç ×0 hÃsàçÀ$øÙ?ûo^pµ|³´%…fÄÏqÓÒgÿ¼ôÙ™˜>ÍL‡½7+5뜗êu ¿»˜ßC“Ám¾°º„|CËS~ÄâîsìâîsÝš(ŽŠ?ûÆâRÁbÓõîø¯Þ11ï+0ŒCW×emÛ WªAŠÀ|ÃFÈ2Tr'.T ÁPÑrTð¦å@sÓH„6HRÍ ßÅÔ¾·-¾£M}Ÿhw5ôOøÊ^½ÝAL ÖÔXC„=µÎÃy¿ºD(=ŽÜ)ç¾ Ÿtº€§xóÖž“]ÿ»jKyÓë‚9;Òí»¬ép­ØrúúßU;2=ÎþðïºöémHS§‹'ÂÙ‚ØýYñ¦É' î3þ/MhI°|–|úžª@9)ʘJ$ ¤šFÑ/ñíãׯ‹vYàyV½›l+¨jzÕƒiÎ÷J=&;e¦yÚ‘sýóÄJovv?_|¾9ÿÂÈLnQx¦(-¿¥òJA¡’>Àø9¡—’mάxÌQ>«éOø Ò‘% ’R”þø}Á7pzË â+[#ž±`¤\ ΚùÙ@#³ ©+î5Šê’-VYæË*ÏñL‡Ê©v¶\Ö{ˆ›QPë‚J|ÐôçWë.lõú]£àX!Ez>w ?à_´á¯/|ÓKŠ3:®†ý%¦qx‹In*â/èÝr¯†’{-(¬ 0(Yà/Ì0/„ºmÌa j›° Û,íÈGÙPŸâ”å‰aYI!ÏeÌÖjñµa~*¢1ÿ™”cpÍuÏç‚v³Õ¦^jš%œ· ¸›ìŠ„m´ØRZ%~饿U 2 ã#âá46Ãï Ð*õúa øˆaÆ~ýQ¦÷ƒ¯É¤³&B}“ÒÌÈCJ›|X_ÔGÏ ÕuÈþ’|J¿¸ä|VQ‡óe-\'Z+6†W‹5Ã+¢™¦ËXU)¼ÑÇášJFlÝY­Ò¿ôf¿yÇ¥8Å …gÓ¨à!ô¾Úgå€çÚñûRS¾Ö$Ÿ/‡/ ñ”]LÅ€;þä?𸙕¢¨”—|`ßœ2/9gy¯p^Пñÿï(Rnƃž¬¹²6Ç x©ž G—ɲ)–7ùsøv“J@à© O0vœå<~h_Ëð+8‘,€„µÆ5û,¯âj˜$—hZ6ð‡UÏ$ ¯jèL¦¯åáG\ÆAÀ—ÎfüǨ/ pÔ0£›!êá÷ZhWòáIVH0%LÀG•ùþÌñˆÿ)¦Á|°…á]ò÷àÑቾEʃŢ¿Õ{øŒ3mŽ&*×E»VÒ2õ?_/®ñD¬ðó™Ô¹Í/&KáÇïÅådfžÒ&•ô讯 &i4Äñ}é†××<¶ ˜²¦±*ªhdS˜’Ào›ŒE–@F fü™ô³ŠÎº?ÿ `Šz’'Çïñ§ÿ“ØUàÜ8®¬O`¹Ë•§\îO~m¨ûÃîÅBƒQŒÓ ÁÛ)R®Dc¨#(%ˆÕ‹œç²†s4&Y]_cƒ_):QV,CìGñöGQ§³j)‚™©’yÉ“™DêÿÞÖ¶“ÕN!QÖÏÿ˜ß\Ïî>ÎÍÊk õU ¾:w´r^-IjÊ¥R_ Ÿ ÄK¾Tm¶†þNÿ¨N¤•ŒóÞ ®ò³‘×’!áS•?±né¥ÌO§›‰LQ¤Dq-RÌ2¨`ZšŸ€¨G©æ‡ ¹‡ÇS0üE@j6²<±˜HË 7"ÅttÜjç?ÇkçBE}D¡·”† ®ºØåeQ9+´“4*Y·òO®¦~bóuνJ¦ôï-$Í!‰«ÅÇ®O¨å)uø“Tá¼†Ž™Ã ¶üu±ãUr¹©%wNɉ™LPº—û´ÔëÓÙÓz--¿‡˜8õø)«:ìÎO§Db®:öwÅÌ=ä dbßnÀÈVëÒÅÒÔpêãè6y*Vl¾(ÞïÁUΦ.q޲kŠ#éÀ}zqê½ýEEú¢Ôæš×%›|µ¯‹²ÜoëVÆ€½«zù}¿F¤ €DÝøÍöÀLJ,·ã“ ’àÕzûØ,h·9fã=HÎq°ì”²­mx—‘öåVE'^ÒYš/óéÃBÔ..#T‚ƨf¸Àó¡nº‚Ê¿yœ-U‹„0¬VG_â¸N ã2°Šw(`;îuÌ(V¯$uÞÌìh‘!{n|5îÅCš°á¹~ªþ¾à6æ#׌Áì”gŒ¼:”ÓVI´·Êqq‹ÖŽÆ‘/»^àÅnW×åÛXà&¹œg{€ó8À¨/oÙ—’u\74N²ø8Üý°ƒ¨O:&œrÜmWvºmôD™sJn€öPìbŠ]䡨yŠNÄ£¿¼m‡j펕c±;üƒÍ¢5À±¼ò,t‚Å.tÖò^óc¨¬Ü¥ÿnÅÓìz›-¿£5=ÈwD Þ$wðól <'¢H |‚»É†1n2Ø&3Ðl2xòSñ¸Ig‡¬`B‹†'ó.ãnÕž‰°†0J¹¦=a¹ÓzçaŒj ­žkàÖ3ÐùM‡àE¦W²œßçÍË0.L„ÉLAÿ‰™ßØ@ FyûC¥‹é5,gÃ Š»‚…ïºap†ŽÒ x”$Ưaäôú\¼Äº‹: ‘ ù’ùw Ë®‰èÄý :0"H9‰Ðd6ö`´Sbà,ÃOm)R#àzü Æm ‹ ÎùFcQÄ0pŽØ‡†¥ëpà±ão'$»±#Ëôbdé #´ÖËÛÑ(9U쀾̓œ“y†ø^A} g„¡Éz~eÃóK/öç—ægãÁ3Jéùv—mãÁjÔ¬ë… ˆÿå„{ÍŸ?Z°Ú’ý·Ì`ðkKö߯˜ugÎçWØÎçŸÆºôP#ê°FíA ¹^Èx¿Þ°1°¡íÔ§lK{`±L/*–N'ËôoäSþ`tôrzÔß»>eUõ­ôÑ{1C~6d!òo³k|?v[üƒB4˜„ùÃ@ùCšüÁ%7ârÂOqâx¸Ö ›¬ðëaí±‡&AX*…¥(Æp]½höCXnrZpÊ#Ž£ 1Ðrg´´«S& Î$ AŠÒdp'¸zV´"8$H€/ûf-ìŸsTòœ0à{ÈøÎ‰½}qN†Ã’âàCž q(?ù*ã/Ý×É{öe¦|€“o³JFDëˆöš“KÝðCÆEKx‚\­k“ü€›f] @ O*Œ æW©¸uâoM6®qJ¥½MÁ 1ՉНéâõ›•ÜÉçÐ…~ˆA­´Ä¡‡%6‘88!ÉÔ©6ËÑ®À^‹Ã黡Aü~Ä9qèJHcwHçøeмV¤'bYb3–Aqi4p¹Åør`üYŒ¥ÌH¾~6!þ€«Fü˜+G4?º#ÎyúÀ„×mÜ"¨—VÓX·Îò§Ébœ#¢,õI4µXμUWŠfß.6ù®LË8˜A> ² K%ßåQ¤²Å¥,ñ¡e¥€ïÆã›9ñoxÆÑc«˜VŒ³Ôä Ù)&5A+ÅøÚzõ—å…|w1Öºß÷Y¿ª±:Œ!aØLEcYªe[Ž"NÕH;-¶•‚,l£Œ“*KI0ÒBíº}gaˆÍ²P{ý€È A–…ñp§i¢o­ÈZ/ô*Ûæ£¡kLaè@Ôò{ Ÿ¤þ5p¢g\¯2À¶¨Ã}LHl;±ÇÙwˆ¾¡«Œ2?ÈgnБí¶É®(»_5(’»ý„¯¤©¤es×í$K Î^[‰rÀZ"ê·wŽ4ÇZÌýO1Ù`í·™_À0š¨ì*mZ-ˆÆYs6ÆGjZe‰1ŒW®(¥®¬ùÒÍ\}@Dô!!eUîð¦¿ÏÕÏcbf4©Fcƒ·D8Ÿ;¸©IYøâÜ*yxIίn)ìÎør@u;ˆî³ …ƒx;=\Kw)£J‰Êk«.ÆxüÍZ°A¹kØ|÷ áæ˜œÁ7ùÞäÊ,<Œ%näÐ{€öHíÚ.%G† ×”µÓüØæU[Àè³{ãH—ÍëI,àJB÷e›—ë4Þ•¬9àz¸V§-á!®=äT­èú8oÛ:é¾Z‘C¡EÅ;Áe ¸n¢]e».¢lŸk(ÇjL uÓN‚>bâaðÁ÷5tfþ8 ¦0´baäÄû-°$l6#m¬ZZáÑ¥ø¯(s{y-Ë­UÅÙNð‹´‹ôz.YñåéÉVYƒq…, ¬A8b†¬›º‘W«]]à,Î' ‚–Zâí·µŸ×´XЦœ6%ZÛî€HËzA%'Aœ çBÇ:3¸%ù¶æ ¿—hL)cô¥ÄršzF޹€+B¬`Mÿ³:g9§/âOŸç?3Ÿvx‡ÿ„Þ£—ú>‚|©–Çû2$r„gu)ˆåg@×uÚh7M]ñMÑ©³?ܘÎi€yÀ‰®*$´Ç1Nû=Uç5êK<Ä=àŽÐ7:(v¨›Z#ž»bB_Éþ”iQ~`¹‚g¦ŠA¥ÙÞèÎã‡ñŠÀ 8Îb'öZÞFù Äe.¨ÄöÎ[ÛZGŒUæ—·‡·ÎNÏèjï‚»•Ë>d´s;aP°Ï bŸ«s.'LóÂ$Û£,²Óµî7U¶~¼ÍnBÅÔ¸zU/d è+‘I‹æ¶†IÖE7d[OqÈ[Fë¾Û`³¬ Üa g„)† P‚›æ’O.«%Œúò–M!Ûld¡¸àÔð.=ögáb´ÅÚZ”̯g÷Ì~~ò¢Ø< #…ñ7ŠF™ïå oÒM7É=wªÉ|Üö2²:¯çcÈXˆÊJ„AK5a¾®ˆe_¶ÒЩvÆša¥¯S:…‘Å zƒîe "ž{#!`¸àH‘Ã|"J¼å AƒYÉøåk¥P>93©–‡ØC¾oØ ÕxG°¯Þ«§oŽ®–ºã¼0Î Ñ>𵊻b/‹Kˆ#hD ésÄe÷ý‡7†”ør\rbqññtþ‰?Ó'#Ö;Þó*ìƒg˜×Y-ïœÌ9ǹeœCb]AçšáýqÇlý¸ÁTì“G^Þù»4fpdŠ /oÓ ’ŠÝ6[>Õ £î؈‘tƒâmË÷ŠwzSØÅû<;K8ÝÔ&¿ÒŸ„Ÿî?Æ#Hç$ zCÌ鞂…_Þ¾Ö=E&»)" A?SÐ!fp‚€ßÈ‚ÙyíqFM±)Ƥ‹|ã„ã :¼]ä›1›™ý¼AoÓ|ØÌ ˆô• .›âõíMžÁŠ)'h¹‚»UUÑÕ#w–3”ÍÖ„Y6óóe­ØÄ Ì*¼5ÄL/»MÂY&>>¹°&ÍÜ!75\Ïš!Øb-‡`t{q‹ k„|ôHÙÒ|”7F9#Ö®øít®À—ž—YÛMÜ@ò"é‡7\ѾnBRÉÝ© ®îùeÚ¸ÂÇöÂóËàxÂH,ò F¤žäDŠR4zÜÇ:htß^¹!0`45š>©«r9{ ê¶4qnÝ~~9º;†ëAmzB'çå X+hº9S$­ó¤S–¯TS3Æb›O´Û䲜SÛÎ Ñúþ·È<±ýøäQ3zµ8È?äI?ìIÊß¿Nì ±ƒEÏ‚líîÄî§ûÀëYjÂ8Éê)³c­Ÿ°Ó8fƒ1r_1f;±=rñˆÍÃ{†q[…};„¢Ôµ›l·2ØÅNügtXBÈv¤Iá¿b'~]àoè;l‡4Ù ã4Ç9„ ;Æ#^ý.á,‘>1ØÕc“5ùê„NÁ ü<^Þ7@ß?0è1Eº†Cæñ¡dÄ…„æ!«ýBBCvO»{ ´TøþìH{ ¦D¶òm»xêTsÚ =’÷=[q]Îaí†ÞÑc”aë4q4nâct|Ko·`6a¹í1¶ÒFÃ2o«ÅÙc+mN,³^[…8ËVLNÎfÇÛ8©@mÖA+‡ŠT ôÚyliN:ªá2öX9t0CfYxìé ±Š›¢cͳø‚ÖÑ0«¯Ç‘¢¬Nb½RÆ‘æM*¾2¶øÊˆâ+­â»:eñ±Ê1íûèeUÕÁï£)Ô-Ò×¼òždɯ릭U;|«ÝÐ8H‰²l½¿¿:züs(vc÷†t–€UH4sû¶„Ú£Óí»%¤³„íêÙ Âܾ Ù5Þ¬a«z²lRf`¼~|ª9£­4¦Ï–AS~;”ÇfJcÒ¹ÂF!UŸeHתŽ\M eš—ÎÕki#C‚¸vvK'eç™>+OlÝãbl0ÍWSOfÙSQ®–Y³Z¬_U“–5{$¬)p -qúÄkái_=¿ùœ|ã´É‡ÿ<¿>öx”©xÂêgX@”_úWB=Â]¯2­Æt;¾¹Ñ¥ØH*.†LÍòA·ãû{‚̱ÜdÇ[ÉîoÒËl7jïa0Í‚Ðp]g¶›úÙìvêúŠ1té=&ø§«Ï€ióFxhgDwä[èwm £QŒN?;—[(" éVù²ŽÔáÒ»Vð|Ÿ<Ëc‡ÈŸ:’hô¹ ž²}Øy‡åB绬ɶy7Ɇ誱‹ß,U0y°7¢J £bÝ„¸&„bÛ8bFM  âGÄtÈ]küq£?eX˜FºzÐË}îñ-Žb¦WõÃocV`\zÛŽÃoU¾ªŽ¾ÈÿFEb-ëGÑ‹¯‹¼\EÙ`2aDâ€D¶E¶ÿ^:£J0{l«ñ«¢ý>æ6’ŸÇ5 h·,nˆYŒ›óyZžZ0©ûCò¥Íáî\«(Ù´q5s OÀµ:psö¡aÃÍl ÿàE»š58öù‡ëÿàx}ªïƬ˜Þ ¬ÛBø3C¼ùúÝ6Á8|²hdÅpy\Ó4ŸeZ¶U1 T1wbhM޳n¡|ùGÞü:¶Þ÷q»†šÔ=mÁ+–žcÓÚ4ãTÇ›>¶Úö²ßS•ý‚Ñü4Ê2-Ÿ8}rT½9ªôߌ*ý7±¥ÿæŸRúoŽ+ý7ãJÿMté¿ùç•þQ…?ªìc‹þŸRò‹š}õšb•g¿_Ê#W´G,5t’–§ã„䣣ZIHL´—b[£ÈôÓj?ÇùfœK¢=ñûÇ=®nNh;΀ÙH9ÔFtqþ.㬬÷«ãì<ª³èÑkyl7áU0ÐGœÒ)“Z@¯Œ8· µ¿ Ó1Zã Ÿˆ‰B«O$ºMÑÒôÿ(—ᩊó‹?j°žh^O÷ÌÍà‘Úhk]×LF“rŸ}šË0ˆÒdL‡3–ÈIó¬ƒÀ„ùã—Ë Ænó-\–Ù9ø¸\ƒ‰ª§ 0Ä8= å&û ‡R5é|áxlýíãšÊW¡{j±W¬þ­3Ú.wÁô®n¢ñ‘V›\å8¶Œ«=„ëĵ¾±u8ÈêÚ ¤)‘öÔfW S¥„/MQ¨º¢±%æí7»§Œ="Ý‚>åc­²°Ç*ÿ7æ1¯r! ÝñãÐö¥eÿ¬F/^ùùÀèÚ) {Zº-Ìéì¾å÷Hp”‰c+nˆ³ÏÈžÊëˆsgHSídTOuó}±¬·Û}ï%´û¼î’‹ó*­ß\ůAÂÓ¶ùÊ4‹N%e*E§Bô¢uàôªÆgîëµMì×ÒÔäe±ÜdM\õ0˜‰ E»ufJx*VywT®^ZeudŒA&‹×$N0Šçêf‰¤XTf/õ~”A‡×¢˜C™º5<åÆŒéG¼,^s=‡)@7H$¢î%ò«‡Áo „l<ÃL8Ý&ߎ²CgðÚ;0O·Ž ÷†/Ü4 z||}d”9!6Ë($K‰,2Ç4G5ôàÏ¢Oy,WÈÆwÊ2ö¿1–YL~»ð•4F²J±m2ŸE;æ!!®éa½z;Æ<Þk䌂,ßõ´÷Î'c }y¸…{:äÇÝ(È»^È»äGû¾Üû·Ó Ëè£ê‰Ãå5@QìPý¡Ÿ³l±.ë§IÖéœý¦@9d%Š EwF ÇZ:ÉÈ(ûL³¬¢ìcK°nwëQÕRgðÚƒ[0ÏWoæ·¦0ÿüôøé¸Ç„˜ö²xÑÂK›| >ƒ[ ÆÛ4lR¯E¾‹Í'2¨É×ÅóèÁ™Ëæ7 Éúgš omÌ>f„Ö£>§MÑû9mŠÐç´qâ@Ü]NüœŽš“ùX¼ÐCs2C€¿ ž¸('Dwl(ºeÎá7)B¶`¦¯:ñÑtðm«±Vµ»lË× ÇÜ|²™ö)²Ð-hWeéŒþçŒhê}h„4ÅÀ›e`+€ è’áÃø’ªHi×SÑ-7 6£íšº,™øWv˜-‘8UÄë¼!¡V¢)s¤‡$'¶HWaY®ÆÝà1ä` ¯‚×\]OŽP:êºkœŒ(ׄ.ŨrÎÉjÍ6[.Ú—jy¬ƒBr†œÄøRàá(G•}Š<}d›¦®ŠÐÊ Ý—W"gªÏÊ “ÇoÈ®H&d a-o/1f™³Fc&ì#¶ì׳‚Ü^9uª¨¦ºbíˆD(Û®Õf9*‚PÍk â ¹‚,ìçŸÎ¦†²#ŸirÈý¶¸/)Fûõ|ä1Ãz‡x`¯³ûY×5Å›—Nô?>t¾Î–£úm›Ék’$ X%ó-ÃdúD‹ZˆNWWU¾Œ}p·‡ÑkY ÁòaÀ:C˜Ýâ)Æ~]Ìϯ!(cF B¼<~Bà S„¯Å7P8¬"㈹ô^C ?`db§²œ¬¨&Z@2OYµ(‹êû(kü¼~ˈ6e´)І¬´DÚKlùj_­²ª£vUÑ^ýZöµ……ªùyúmvüÄDoó¦|‘~‚TúóHWáð [ņêtÈM‡à@³m(F{1ŸßL ¯ˆ"›lUìÛxì½<å{ÑS–½¶;;¿ü2§1a€0~¥wÙ2[¶»rŒ1Ç Eã5JeÛñ¿gg³³ùÿ8βC]Œ[Tò0˜6AhÁHg¶ûÃúrò’ÐaWA²| Ÿ Æ~¯zY-ÃvUФ©Nê˜è(ŒU ÇœÖQ:0eY±ãó>εeØXÈ·qF9|‹¬É³r;Ùf6¸gý)¼î1nÀ#!äÉŠõŠwv8]BtSžñéšê‚XÇÍýaFî6Y›ÿirqØC&yLAÛ‚í.íöZ\ xd†=e/Çz`’ÝQÖØøƒ-ûõ¸²ýu\Ùþ]¶¿ö–m¶ïj¨öÝž Ëc=0Éî(klü–i/Ò´Ñ–y˜\Ë´÷pZŸeºÏ{?`Ý4sžò‡·\®²ùMbd)‘…ŒR‚Ь[úsœ-OÙzÔ`Ï¥7ѳüÐPOc•/5g;ˆfN#.õ˜›¨Õ»n¤IÛ* ¦ °ªLòàÉ¡­Øš8¢åJF5!?×´P²D 7qùkòø¨ûA6ËDhI½Q÷]A¡¨ûêyñ£M±Ò` ™é_ï´…Øe)-;R3ª¸B&†š¢-Æ2òI9µæüx l ÂTi“g±ï˜[ùQNœ±Çd¯PwY2121¬LÑ./:q÷X8Í´8›†ŒñTR~Žè!c#‘Uò˜ñ,Øä’Ô‚y3Õa Y« ¬h|Óå˜æÓuTñ´Ïœîq%Ÿá[z^æ YŒX¾ ÚS–¦Ð(ó(â´zɼßN*Dž¹æ°–è£ &R':ÜRË XNl>³!¶þ¾)E3É–›qÆH ¹bÿKÎ9CGT£ÔyÞørw%Z:’ÊÏÑ K8áÛ£¼a ‰s„`Šõ ï7ß(Çác=p L±¤ùqÖ{Œg^¿!!ÈîøAVÊ]öP”E+ìõZ;*%?77sh.cz‹-d† Ü,AÕ kçxŠCž^_aŒìE6VV…{½g©µÁ‚íy€·yÖ,7‹¼zd‡‘ð}¼!#ˆ6%Ú°)†HÏèU6 KˆÌg–jfãL²ùBæ¨V4E’Xfh­{Êݧ¢ÉK¸<í0ø »e1'>l#'Lá±s.êQAþa§„:ÿ°ht žzðyä¨U Ò}·×IEÉö ã v`ý*ìfsÿ9ùéKU¬ 6í¹§À;Ÿå±¶Ÿ'^¬ða8d»É.R¼Ã®a´1.adöŠ4?A1£#¨·uQ±n䧯³ÛöçØÿT¬Ú£ëŠGȰGþÚÞm·dI¾×SÔÅ\¸s<Óž˜í›Z’muK¶FTÖÜE²HU‹dUWuè ¬Ç˜y½õ$FDžÏEÉ@£-f~‘ñedVž3„ÆÔ]I¨•a¶é=|Dð¨Œâçtßüvq6ûáèµ¡áøª£d3 5dU³Â,·ø¾µ.¢ývË*Ð[:_÷o¹¯ÿk6Àë øghŠ…qJþØò¡ì¿¸Ò íø:7´£ªÜ:°ñÛ­v^C>¢¡…¡]WÕF6p2§±L£]q)GŠnËÎMeWÍ®b“J¯V›gÓ|íöÀÆJý;û°Ü:쯉”‚_˜³ó§j‰g?‡²¿ïÙ5ÜãžÇ²ÆÞ (ÃvÅ]ÃÆ0L3¼ ùxhW¦Z¦r`(¬gàV}U½ƒ²™ë‚F³›P—ŒJ?7Ìúe'ëJžö›SÒ—õþðô*—íð2•€©°GSþæ—Åa?¸ª¶\²Bz™6ž†Oá5E½™ÂÐVÏb[·/TÊðj¬[®á~sêí µðD|š¾µÕþtö[ñfÖlË®îyÎúEä^Xe( ŸVõf¶-—÷pÅG7kߺeõB唯Ía¿‡â|3 ÓuˆÄÔ…§Ùtåê®Y:‰‹Æª8«Úmól©bIÝóa÷²ü@ž¯ïìë'hÒþ~Ø1=~^:s—ÎôèÒùܸðyxs‘m#¼- mÒM¹ß°ÿÓýç7Ÿnn~@.Ëm cekÇ#b!$Øß¨^@„¿E8¼pxØàišW¯~Ù4#‡u¹ú¤Et”bƒ¡ºU0€Û…u9Ë¡ lbù!qu­“õÎ!¨,ô n»ÎuØuFêâßL‡RíïPS%þõx:åÃjnÌ’â@s­ÃjbÄʱŴ—Pmcì¿Óº_6ŧÛ3YB°hTÜœÏnárÆÑɪyÜo›r•äìC+Î8j±:gC 9Ÿñ}Áï«Au ðýr{{ýföƒ¢{hóÉX‹*Å9D)˜>ÆV'É>Å ŠwÃЖmíox$ðSd„ûµ~a¿§ì÷5 áØ†ôNgÓâS Žæ™Rb€:yû™4‰‰S x¸n „„.èï3}X½ƒ·wùû2â¬2ùNGÁ,‡£ÃÊ ð‚FÓh¤Zô÷u;_²ü.X7hèyì;)ÀÓ…w3àçDÊK2Õ±1¾çÖk5¬-ÖV@c¿\͵»5~2þ  ìω&‹ªçÁ_¬¢sü9”ݦN6å¶|zž¯*6xZU{ô”c(îªuÕ±ˆŠ‚ŸÇ;’"Ýô÷ÄHáLû!TÔ›}Ó±aJÕ 9*¨Ý3TP Jáóôrúûß矿~»9ŸŸžßÜ΄&6TaS”{6¶l3檂$&2 ®ëæÛåù|öóùåùí·¯^e<“¯ “gÖ«šgZ0àwŽÒÉe¹–Ùùͯç7,]Öt|HðfÑ0^åþTO6‡kŶéû²ãõ JŠ@xJÅ„kàÃdºðð“½ïç÷Õ3œF謔£ §(,£Qæ)|Ñ9ôÜFåf­|ÜD“U.ÑàV÷U²ÈÓ’yê]z_%q‘K}ɦ÷MǺ‚¸ýl·Þrƒ¥í$-w ^xÔŽqøïï‡å}E»Ÿ›fÃô¨ÛŒä5¸?KOƒ'È9@A®ØR„"¨À4&†…_Z`2}€ApÅgas)ž}qz5û*ƒœÓ©A°I BB´ .Ä¥šW ß^&F°¨&•òâÅ!š~PÆæn]ó,üñ³›júö÷ùÜÒc\\åjEݲ©w›$…QlX˜Î†ýD6° PÿÅÈÓs>peÄÕÁè>„¡ÚÁDªJ+HhT8b"1[i.¥ÑVÜhWnnŸ6»öÀ€ç´+ÉB>Ÿ^cFkŸdoÀe ÖyRˆV¢oÙ€xe—,³ê%‰Ã"­áê^zšAÞ­4E8^g ¬ÒYŸ«ÓµFa”n¦+g?9.ùŒkEãb( Ïpÿ²xsuñùâ’âasú­ª0ð…q^{¹>Êð>á ÞÄ(e{åîCBææcàvå‘ðRGí*I ]9úÛ•®¾]9iËúK6<‡‡«º¿·Ê¹ß—mפón¡ÓaVû%¬!¢iqHŠžê¡ÙvœÚP¦« Â(B,LçÂ~" Ö*ª&œ Ã7oúØ€üN–íúÀFl5ý˜ `Á¬hˆZ}_ÕCÁ†’Wçry W@q;‡‰ AÌù1ȃ^Pi'<~Âã'G4ÐÛ”ÅGÂ3~2eëÍŸ‡ª{–Ï"d ýRbi“/*˜ÃÂ`BÚ Q,­a ».Îæç>šu’o„©1¨(ÃäðèïX³ºB’Š˜TK$lÐ[ùäš`äç1£¢´„ÙâPoWó¡«7›¼©IZPÑTÀ º %1*ÁBy8‚}ï(cŸ™u’4~šó1g®•#RUBM8Êc__2aãN æå=–qŠk˜¥Ç >b¢m¦¹ÙH»F„]Ê¢ƒ pØÊ¾DÃÆæ}ÆGÇrvdž2s“̇§8ÒÔE_{\©ø¤Ãýv²\Œd“£÷å¡”ŽÍXn–Ò™ —Ž?ŒoG–‰#â²HØú*ÈØƒa\¢£(FÉhù61i6¯˜ËNÀÂæ3 ›ð“Øñ ¦$¡ê1«Ÿ]Ó=–Ý NšÂ$o¬…#ÒÞ=tÄÞ¾d#f—ð›Ã¶ŠfïØŒåf)_Á„ùó“ÑÇ \"ÂnNø¡êä0Æ—h¸hhÐ7t°Ò92O™¹IæÃS*Iê/ût2 f+ûCŠ)IZºVûqEų3Ý`ÙFrxW•Ûán¾¼«–c;ë ¨›3‚N.D7ÁpÑ}Aì)@Ãù9*'YyH°÷”Dð0´/*…¨¼' Ÿ[þ¤#…Âòóy|óó–“+_a%2Ò¿´Äú±EÖ(³~t¡õ#2û‚lŽÈ`VÖ%Ì î,-WÆå˜p™hI„‹ábG{»¶Ø8žq†!n;z舽‘öó‰yŠMŰ„"†ä8?yô&zl\áHFœ‘-Ñt¦p3.–3:Lн,‡¾D’9åBÙ96”dæœ6'»¼0ë#3]ß§66‡Gæ,3G©œ¤rà§>št’n„h„¢Ÿ<ëpägã•p—''Ò‹™tú;¹åøDFÏb~ær²)ª@N†ªã8çå0”Ë;|äalÁ¥SñåPIM”T¬#jbE©Ä¦R*Ë /5ÀجçgÚ[Ðù|`AM¸c'£õÌùØ‹T4Ù_?1f>ÒtÓ=#˜8[=®Þù¤\ºâxv°^É„ëÑW‚yyeœâfé)x±Ïγi’tÉ2±…à$60÷sVñõŽÉDý8qÍC\›ÃènÏ•ñpm±îMK"b^yØŽãgâæ³ ŸNwŒõºóu ûuYì|”G’MÐ  YÑä>fá:C½­ckcLÚe o5tØÂÞdæžõÛS…ŽfïØŒåf)O±$øóªÇ—ŒGПþÀu´<ôÄ¢EqÀP.ŽàŸÁ<ÊÙoqÍÃ⸡E@ÐCY#ƶ‹["CÙ8"Ô£¤}Ööó¤û_´&Lþ\ÇY=.ïæ€ð´PMfƒeH:v`ôà‰|ŸÃü¼åäÊ{p0+#ýKK¬[dýˆ2ëÇZŸ•ÙdsD³²-¹pnÚ¦ÙWfŽd0/€L–’J.U<× ÌÊ1™È¡'4~ˆ+öEÇ/~ñ`°_ÌúV¬„SE½f¨f©¤ŽÎ\v¶22,¢X†å‹:"¿x0? žYLV©bº]¶Y<:sÙÙÊÈP°˜by€§1øû3ÇT(`žà¹.,,'ñTqýÚî?>•ÙdsD³²,¸@n¼ß;vóÏ'åæ¡& .#™pqüÒm¯ÊÖK{,áÕ0Ia=¼ $蕞‘ ºL¡F0lW;±°iY­¸E`(GðÏ`åì±´M“Ü…€÷¥C?f±)&§æ¸ Çù,íM*lèS‚øgžæcë1±Ÿà¾YUã§qIa@§ä"ëû ¨ ÷\ùc²C>NÛ·à¯3Å׿é–1ÝÿϳwTLñÅÇà FnKû ›™ßˆþoõóÍ<É9ÂÖc]Aq¯X¸È¿š#mRháQÂ{C4šll‹…DnPbÆo…;6o¹¹JçÇ»óâËÂØ3Å©CÄ‘SÃácÂ~ê¸ð\ž¦cwy']¬¢©Åéµà$½/ ‹ÔêrGþ‡òê·®²hòAäÔ`S0¶ëÂm&²)Éxhx÷V4ÍâúW¹\6‡ì)I“›¸:Æ‘~›y“‹¬(|Jè`vRϦåâYÑž$å[i6øÿ\=³p ýêqÚIÊÈ·=,úÃ=7-»ºE?Žy5(%©¸r¢#ÝL.º'!±ÁÌ“œ Ä©ûw&¼l‡¦­—ãlîŠ8\´²–@dÉ@.ÓQ£ì¼|ó}I¥«Vu?öŒrDHQCPä|²/‘ÌÓÉ–èHº ¢AЩӑbT#ŽÂ¶]ŽÉ²mš–Ö9è Gû¬I6lîk‚EóulŽró’Î…§Dtâ$®Qç𿾆Ci™Å‘–UP؉ºEI26ŽÈH–ŽËL^6RðÜMÎ-¼Ù¡ã˜EÙç62Q15Á&æ±»7¡¸Àùɦ$¡p²ã°Ù~GÅ\¦á6ÜŸPf+î¦$¡šjÍû?·£klHDcøç6VSrk©.8Šf”`€Z²V2ìØ1™Ej¢“@n-ÔGÑŒ PË©uøêB¾Ù¸É¢ýæR‚‘}•ž¯÷JlJA2¾©™û‰åsJ|RJ¼W‘¦“!­qäÎg¹ÛB‹ç- â±d}î^GÏa‰÷0<éŒÌM‚~o Á‰üêfs2à.'Šöq¢§o 9”'8²¶¿=`ÅG±·¹u¡äRí—ÎÕ6wîfch“ѳ¹èn*ú¹üÂp|‘&}YM‡ •dhJi7šRº¬ûæ‘ý;}*NŽA¯X=GçÌä—’n‹\ ©ˆfQô’³hé.AûxA¯¼ìÞ‹mÝß!°=l·ÅNp…‡ÆE1\ˆs4Q‚¤†H–< @Stý;Ñ‹"• lª]œ…Œçú«Ô\í´×@Š›ÃâÂz–&K¹„ó6Õ²Z¡ÇïêièÊùCÙeyðwä…n Ÿ¨ð ¦;ÁtéáÙ—IU`XÁÂjpuÈjÌ€Fˆ÷l¶5lȸ;÷醗²£$y‹¼zwÍc1Ý÷5øf\TwåCÕ(”„ðtë²SÙyU†*Ù_Å_\;k>GÜó"º"öS¿ã%ÂÄË}ñS½ÿ£ü‘¿ýÀœk§éÝ ('¼ÖÊ?ñ¶Àu7r«÷«êÉ$$BQ;«ñìÏhA³Ï÷{±"/ƒ÷¿)BcÖ÷•…ŠäKÌÔx;YaÓ›`£0жâJ;û~Øž‡y‹ÿŸ½ÅÇøn¯Áΰ ’—uˆd _-Ä_¨Z(÷†U.¬w?PÅC¥° Øॉz¸c½,>$nµ\ò]wH*fA.G%[Lñ—Hs…DÒN´¡‡bÍ%[Ìx÷Š‚ Ìç2DP.[áË2”¾m‘ÁPä0Ââ…a%NA¸„D€àP÷ý¡Êá  aqÀ0zĹ® Š3 'P*nq˜å TÒôKC(îèí¾å&Ô À£,<”?Sź%6hÅ×Añ£ óX- 8rFÎaƒX£h0’ü/ðÍZ:x®*z†ÓåÝD#½ä<…¨³`êF|Þ^´äÂbýŸ·)fK—å¢ÛÚ×.Øe¸üp'Ó­‡Ögªï8#ëß­p,ÌdrJËÂT¬rИIŒ¢ÒÒ—ÛºìçZDŸ¤Ô'8M0͉ц‚1<û—ª‰¥²ö¶|Pƒ†½ƒeäT¾‹%iÁ+š©É¨i¢‹k P¯Ÿq”B¬„ÁnkqêGLA 9·^ŸŒ`Æò‘äêy_îê¥æg¢U"rv&×ôÊ¥ƒ3øë– šS”°ŽÉxl›ÅFžÇ<ƒö/ð®?Ô ¾rú©œg‹†h«rÝÅaêœúj»Æè=þ£S‡^òm«”å] É"lvFuÝŸ¼;«àŸ‚{ù .)ˆ#Ë\^fÉ"d@MJe“¢P£ç¤˜O3õ" …¬{¹úùŠbÊÄå¢kìiÌÏí!•õL¦qðèÃå@z¥áUóéÒÛñ¬#Ðä‘•eêQj+èÊ5« lN½oz'÷•P(×G-B½ê‘¢7DáÝ1#¯ Ùd_1,â(t.ïJxshD:ô-\]-ʶ–ÙY•ýÝ¢)»Õ|ËúÎCëÏ Å½s„ÌlÈà OËÁc  é«Þžü$¨÷‹~ätˆœøÔ½äÄ×#5”üÈs+ nÓÑ./ã'&b3*­,VÔdDQ6Þ-{˜ð:‚/·‹4–[¨a ¯NGõ‘(-—°G¿6Š~çi͉¹ 6dj&ÃAúê¿ÊðTXóÇgܱUºá¸²Õ"á…–ÁÔÜ XCkaš y³hP"ôÝÇg<ë,T¤óæfLÏuÁÆ‹d>ñAéÀ’¸–±ŠÈGrº"%<íûzƒ¯È«Mh¥våþ™ýoyǺ€þC!‹_¬’#Ö®æü­äã Ù³öv5¡dÈ”SÖ¢~a¿õeùŽY eÔû›f!šQè˱z Û ¬}¦•jX`Y. ó¯u­5]wcY\ˆ—\Ã6«®l|}!×Îò…²Ÿš®‚·]OPdÞ³¯ŠiöËjÏ2ÛPº,7–§a)?|†p–ú¾^6]¢½1A"] ”¦â¿iYõ°W¸Ðµ 9°"§\÷'w©6îì5î´4îăP.N¡|73Xi¬¶U—S˰@HÉ¿0a’û€ó+¨äßÚŠ¿¤W|Û§,áMe&ü{½ÐLФðËX—õö`¿9íe]u]Ãæ ÌX QRøuˆ¤DŽp ù‰™ÒôÞ½‰Œzþ“ ÜÃg÷Þƒ¤?@\%z¬êÍ?ÄòeŠ›ô‘§ '«{–Eœ5x‚o'ßz^ ƒ¦@xmhŠ0£”–¤f7Ÿ¸oЦx/i]teÞ1X„ó©†IúèÙGèbC±Ô©À„ X¸Öá¹­F[Õò±P̾*‘üö€çD•¡Y »Bù™ð˜`ý0ì$yÉëÂcjÉ9¬Gð0õr TKÛÚ±ÚÁ×.³mêÁDù‚§Ï¢ºèƒŠQ3•|ªa’>z[.X;u/¨ ZmãÇï4gÃ$ ö·±÷ôóaQu{ÜhÙˆÃpÂBš·;Ì)v@€ÍætL§®àqWåÕÖ¦aŠ™âP¾Qâ\Y#5Ðí(ëØàö; M1Ýœ¡)MGMu¥Í–¥ØÐa¾x5 áM]Z¼ª„ލ¾pÃ7ùØ ²Ð!ø=²ñÓPwæ)¨;yúéncTþ«ª[ººÜoî6?˜‡qîj6éÍš+‚?åt~ º ›ÑÁY šQ8Œ¨™ŽvyW¹Kð.táµÔÎPc ë@CÙß‹µõ¡ñRiÔ€ÆT(L©©ÃEˆRœ[Æ¡¬ÙU‹®zdYLøP÷!¹b3©^‡óƒ5x.ïûè/‰)Ó+.Y4¼ ,å¨÷Úli’ÏJç8‹ïZºu_#‡[öo)µªŠüÌì«çE¹‚Kªt*%ù¼DTD’‰‚(z¾èWX©zfL%V©S†^Á¡¼úáè¥wn«e½fßÛQÉ@•OóèÕ|LŽ/æÃßs¹$Ý{N¹‹bÞYpQ,=µE@I[HþaàF«¢Íº€c¿0Ö00þ@9øEÔóLÿzkW>iŒ”(.F_ˆŸ”0Œ;ñ¬§8z?–NgQµÔap*å¿|›ÝÎ>ÿûüôËùéÏ_?“ìógÊBDÓ?õù²€ðï½ëñFÐ?ÿñ?X# æŸÿø_¦¨c¬8‡¦isÎݯË?u½(õ¥y,VMqQÀOÚñ,ù~ãšvgó’Šð-œGf¥qe!ãù±Ø¶CÝnù{O#7=‘HaÂSø"Ô‹±¿‚úø™ûù®îwå°¼;¦„y™–òõôööüæëüêbv5½=ýÂõÕ{6 š3ó ˜È44-ê>UË ¡;Å1H';°äa  -¾”ÓÈó‡ø”ŽÙhmDbŸ ¼‡ñm¦…h•øžüÜ—©©‹ RÊ!P5ãô[ß/a'jë…kÿ táûy=‡‘xè¼·@] JÐ…Á~ROP¾ö“}6ðóo˜ð#Ë` ßÈBxœ<2+ $$«Ý ê˜á!œÍÃÚê}[vßãØ O:ëÐ̆e-’Cçø3¶vWS½mæ¬P£&RgÁ–ÕL±¢}„?úçž5ebO„ºà%³üªfmÜkq6¬]¸.êËoôí±¹}ʼne,188𹤠 îR‚ Â*]€ lAbd¨ ¢ÅBbsWLçI ‰iÅâ zR¯ZOýDâõ•È5ûå:1‰30B#†©âÁŸ´˜Â¯­TNaðjÄÁ'wC[öýcü8ŽâÚy TÏ£~¾‚ƒ§0ù­*6X”=«¸åU›ýÀwhOàüRÙÖsþbšsÃHNüdü;."xà‰&σÄE9ù›uÝa//22¤xYƒ5ÒÛoyJ>ü< 5¼„¼,øQ”º¦M¸Šk¥ÚN±Ç'€!”*ãy(«ú;¬Å`º9k14y½£+µ<.å{mmÜ#—Ëu<.å»n,NÖ[SĺèNøªè¯×§È¦ßí3¼ƒùŠ ‹1ý‚p‹…p°ãÚÙÕW¼9 ãNbGÛ´ ZÏW k×úŠ5sÏó?Uï~Qñ±w=&,…Éîy"S¸`£ð=ØÃÉbÖˆ?2†õÕ x䃋›=ŽpÞÎŒ£\@@˜½PLœßâã;í°hKÁ8àÛšbâ«,n+ø­]…Ô ²VÚžóË4ÝÄ’ûÔ1«#¡ôá/¥(‡À$L'5ýmV\L¯ÄL0ÂoÆ;RA¸¢ <þšïG¹‚:)8…/üý";„ÀÂ#Ê­ËùªBgyµ+  q\—¸uËVî >]}šo®`º7ùÄbYiNî쇂dûÞ-„Õ,GPè%v†”Ÿ}›­$§Û ÌIöoyY¾-è,!T)Ü ƒ´°O'¾™…ëÇ+."ÞS¼–(õ¾äf"Œî5Gü…0”Êä ã²p*—^ŸÄ÷§[ ì…–;ár7ân×ïj7ìfW¿XØ¡,:YD¼,徆@éJ4ʯКóÍëàK…¯Ý¶'ˆñÛvfß•èŽÊ¿‚gvh…¥÷ˆü%/NY EX¿2%@¾Úß ÓÕÒÉÔ9 “ÖÛæ1¡5úÁˆhÅĤbV5í_€‹ذbmpÿ ëm9À÷„œ‡æ¾Ú'©ê(ÅCub ýTÐ/q (ÎdÁj"ëTjÇÙxœÑ‚U2ÖiaŒd¥ÃÍ ö„ t¯ŠYËfFÝaW€‹«-œ_­ŠOå®ÞÂ*!.lðE†^¥Ó4U g¥õRƒ&.ÍñÍž/ÝÂò8œkÕŽ¶_@f)}6uífc=Ù 1¹M‹9£ £ ž|ÙÂÅ|õ,4(r¤#¿}/ øÐ¤½hy¡чÆð¥e tùáÜÂ’ÅËxgrðµ¹j<õ*Çð{ýS$ž±Zz±ØŽ_%Õ5©/YÁ•?Î×l"{è/–§Oq'ËÃ1}Uð(É$Ý®¹@“ƒÑ²i`];y,‚nŠó8©WÕ®mX/±|>z—¥Á:Và|›=²®À˜`ƒ‡5üùjYŠWÏíÊÂÈDµš¢%zÁq OM±ˆTZÉÃSc£<²ª­¶”ÊJË„<ÓÒ•Ëùºîvà­'^s|P¡‡EMD”¬=†ÖŸOâ]Wþ¯4Îà}D.[öwèBèôâÓìmñõÓìΗM:×u7ç+´ý:{Ž˜p„™ KÜ‹|; “oëÉGç.8·êŽG}v3=-¾_±±/¦QL¯/z'IŸO.t?P>a#â̯Øå Ö”ƒ³j»‘ϘCñ>êæŒÉ}1q1k"¶]+øˆÉé“%*Ž33äMŠï@C›£Æ‹þE9šÑéÔð'vÍåÞÌN¯Ù§±ÉªGoåÙØ5fãVî%Qg }2ÃgËzƒ=<òXÌ>žhåæÚì?Å+€— !~¢Åk\mQ9c‚Z‹êªâ ³—îrÿû¿ý'ôd”âaßÁñR8´{I²ÿG$ waà®[µ­Qäõ9‘Ü„’›Èä.x^Ÿ«V¬Öñ jõ– ›^î'¼æ Ž’–;Ña:Y=¥ökw4í–ßi—¥ÙݽØ-5Ýßig×O!Z’Vj´i‚t}Ú(“ƒô¦æ´î—MqquZ°!À ‡ ²‰g]ÀÍùìštÆbS®KÎ:D0€ ¥~éÚg;6šü6÷±ê] Ë«ÞHÚÊ“Šš“Hq¾ÌE …>Q)\ð 8Y&CÿùÿmÌÚsñí&òæÃJ,n"âTn :4H] xF PA"½<ëà åÆ"­‚šJ1„UɆÊñ VŽvh¨ÇK?ì2àÙiø^Oêýr{X%²l`¸> “ªè'?ISÞ cwÕ¥ÍìMņ¡50íî4ÜïgEÇ۸ͥú C{&ÓÔ:œÜ‚Ò•Ãr»}–ÖñÈæ0Ñ€&<kñ§cÑê„ðüÆ[q)ÂQ?ÊEœ>H*Qaltœ•Ï‚ ê< èPKF9yÇPÍÑ5Ð)Ú¦Þ '5ŠN‡ÀTÎñ„”ER¢ìÃ=¡d¼e&AÚQ2‘@úÔ„i±4ÎOèp/~ŠBàp(—Ç@‡Z0Êá@O‰ßð/½4q©•&¬ð}—µ*L9o© ¡6—,T™ª5õ<½˜m‚DºõÄX¦æ ºpúX•÷Ò™nû}½ AªÌ¾~ÇÀJ’b¿Ô£/å^ÎF„pªéÀ£Â¨8kJ¢©”ÓšO:Jòv$ö¡ ²Äµ×oË>÷a"ý~%Áw3J~cóâëOç§·óOÓÓÛÙ|:›ÿ:½™oŒ¬Ë?G]%Ô…'(,o’{4\µnV¤À«ñ矇Îo.ž¥É½ÀÕWƒFWYüíÄ}"åè×[ŒÌPRº2rãçMЙÛú1â ¼D‡^’*üOÃÈ}ÍŒ'YvÉRè2’Añôxƒ^üyiy‰GoÄK…˜æ…ŒÃȹ*¾6ŠK⨠24ªã5ü·Þ-I×&,ïÓ‹ßOäÝ WiyZž&X\sõ‰3{©Ùéwlåâ__ÇãÐésúÖÒÞ[=…!è0ÞUÃRäKÓ";¸\nç´èÚÛí¡Êkpw;VK 1-KrBqžä†! ©eã'èšÇ¼Ÿ¦5¾2maï·»Š}·wÍa»b­0܆ø¿ÿ·øÿïoÅtÛ7oñ‰76NÑdµ@ðˆÂ½³É;Àp—Û¨…q_7_ÁîÈCew¸^²^9>FMT’*´8¡†úöy¸Ëºtcö‡JOàâëíùÍõÍ9ûÿüúï·_¾}õ¨ÒÐúÀé¹—jœPZp>Ï£|~v1»½ù6¿š^ûx¬½~[Ža!Sòpø4½¼ü8=ýùD^3ŸÓª=´Æì¿rÿL›¹kÐà[gc4×<ɉLrÂþcIN(É ($€vöŸ ©ü›æûðƒ5.iø°„BN½.$N'õöh×ÈVm„Ð÷Ú¸ñŠÏJü\™5àgf¡Zx§~˜ÀO·h…(] à›¹ÖÙX7çÛÀ]Ö”«;6$ŠßóGŒäÄ>zº€¿WºH{ÛÓÕä VGƒ¾£^$Åfbþ¡ $ÀþÐtÊÉ¡ƒ×•òHm–õëzAéoàðïÇi[¼~ºñêMúÅcˆ"!ñöáŒ~Ÿ¸CÊÏ@mî Âð1Îc„PdÛéÙöô~Ùš¯;å¦ôµOUÖWž¦xì4A[ÀôT¥¨AúZ¼žÊ2UnëîÛÎY`W/x§í÷0-ܞȴøY#Öóý:½¼8›ßNg?ϧ··7¹=g½ßÅåùÙÉ‘%ó/á²ÐÓ;nóT¦€9•LdÂÑÒ}8d"ç~‰#&‘ó$BLJ} .Vóº?º\y&`Ü ’›Ô½V´ç_o¿Ýü}>ýú÷ù/_¯§7³ó³ùÅÌ)Ýù²\²©h…žÔç©LD*JýéôôËùüüëô£O+wyü2¥<[çõå/Ÿ/¾T=A©]÷ á'2?ýöõëùéíÅ· '6@]×O¯Ã‡§à†»ŸpRnòê]å<#1šHÅÖ}{quþí—[]«éÇ4}°ßãÊTÓnú0ÕÏó»\¿®¶M‹ÃÁòÀ悆JË9ŽCïçv$4kiM0­Û;˜ƒÿü ~ʨL4å/ýÚÜïÌýÂøƒ£U¸¦á÷ëo7zé ÏT™§R1[£ŒPKÄŽŒöÔº0ýÅõz/#ß]t[ŽºT²8eü4ôG†Ò˜`Ê:Ÿ¿~»a Ýï·3WŸ°0^§LÇÑ˽µéºó®¬Øp[³ [Ë[+RT4©%Yÿ’hLyJª€±eqU†ç¤T8Îsœ´±O}…ÌP:øWÉCÕÕëgZ´{¹*J W -eGm”ÍôJ ©”i4ýêmŠö/É¥6ÑS»°GZ¤Ëc8ì_X9žÐ-ý«èì˧åK{<ê°x¸ù62K/ÄñXº`ñ"ô¤¥7áé]X»~Eí°é_N wtê™~ÅÑstä5ûLž©\¡—²þï¸à<™ð•Ãf xH+ÛQIðœáßú`”BäYt¸–á°LƒÒ~¾(“ï ;0¡´ŸP°\d’@}K˜nÙÈ­ 8Üâ‹Kßf§ ‘Ù´i&›Ö¥±i ›ÖòTð²/÷ãçkxüyh–ÍVm‘ètÆ’Mæ˜h (¸(B‚ý-=ÃÁß"Üõ§ ÐJ_MŸw«ÒÁiD¬” *낼jÄXð5[éWˆ¿Cf™#ãf› ÓwÛ$Ðsã„ÃZü£ÚL•#cÑÛB)æ2·€ñJ²ÝÂÛÜ‚‡²¬¢vS”l¤¢¥65jÊ¢qÜGuG\ÖÕ?¢í#¸yÀŠÞöG?C]H'yY>³ÆàGÍ!dðKß¾Cò}ŒäûÉ÷1’ïµ½Ó “Öûûr“þLœÆ‘ z¤3ƒ ‚…u|ãH¼š¦·]¥ÛM ¤c+öÛ0ÖåÙµõM¦Ù4› töIBNãDá- 2ŒÅƒ4G›:‰ïqò,÷†dcRxÁß­H+õ×:Þ ©Šlʇt}SMÃ`Ô6öÓ¸P+9Å×[«Æ¡Æ6§Fµ¾êÔZu©é¶‚1¿% Ò<óC܈ÀŽ ^ÑEÇ=oZÏÄG¸0w‡IÀ;ˆÐ‰Hô OÅ·Võ€=Ü ZÎY«0¤MXé¤È FêÆÑ… w“^\\•Ñ&Ñ’4K¦ñÃ`ƒ9ª¶nÄóP¹Å[¦Oæš EÆ8ËA6Ñló§–tÊÅ?ÖE:ÛrŸ¤£ÔéÀoί—Ó¯t$P4Ý:­Yb4ÅÝÚÐÛ­]8–Ânb]üzó‰éÅ{âyoѦæ³?c 5!ƒ±‰Ôó“14‘¾øZ §Ø$¼ã$í6Ä%úò*‘µÇ¨O¥ãõÆ©šÂèHURÈŠØ@]Ÿ3‘à‘§rF%&LçeL8𸱉¤vR·PZûDce‚8«v‚’éŒÄ7ƒûzm‰¦hˬÛ† ¥¥ÝXK ®ø3u¶Ÿºªº¸žZŸüŒ÷ºÈeµï»j î¦Stl¤b$ctR2Pç%}+YüÕì«Î`á–~ iÿoGº3üÄ[(¥×ô/`>úîå²;lÓ™µ€J«ˆÐ‹0Ÿî/§§D’þä¥öÖç¶µœÑ¶¥ã®Qèƒp©*ϼ6ÒTê˜Y†ÔO”½£Ž]aÄ¢žeÛÜ–&‰—xYÔ•Ú Ò®]LJÒpéÂA>³’+ànR›‰S y¸®Sôáµ<Š4Ë2­WCiZ!ÔÐ >—pø±‚ÿ³Ã¢8UÞÂñ•‚¦ÃG}9£U³Ü­28é8†›¼0Èk %& ºú¼oÌvˆ8_šž¢¤5rœÕÈY@“Ýȉ° ÙÈ¥Ç&Hé5ÆäÓÇï"3ÄCÉfÚIe:JiÃP]øôa*\­:8ó0T9w3¨Z&<áÂ×ü¬z¼5À«-x0C‰ì˜0•ún‚T†8ИI½4d,÷æ.ʬٖ]ÍÔS<åæY¦ÖvM›ÉPƒÚ,!Êe ¡~¶°nÑB[@´ã4ëuÁzí¡V¯MRõÚ¢£íæäðÈ4–4ù¸†¢°¯Q†Ê¤ çR³‰ÉŦ\Rx¤(½€áà-<žd,`(¨û8E{Xliµ™MXž›CGfW*0y7u-8­›/þ¥-–À­!þZ*éþNW€Xä2‹ÖÕ¯ `~ñ/2ðºi¢H ÐHª8è7Õr%Ã::¬ÙÅß‘Sñ\E'ߌcžœ¾7§ðÔõ~_m™Žf^Éó–¦9Zè£_jš¨5j^¦>X9°oS@ÕRµ¤–³ZíÛD­5kKH.[—Ý¢ºΰj Ø:Õ߀ªüTU:éu/Öái¬ˆ˜"z_à_´öÚÕ!›Ñøú U³ñ5B‹Ûöª¶MUQüñ¬ÓAF/Xuµ „•½`Úÿ¡º»Õ¢*»[Ö}Gî;Vlñ:âà¸Î¾™ðpY;”{l§¿ù;°Â¿øì¹>É÷ž©yÍ4¼eJ/™òö ‰ø£Lߥ~ñ´ó껌^P¿l޲?ÊÅ|è{¯åË&ŸÇ¾#4¥MO¤$ýF ·°t†ni+8/‹žHK ¯ýBq¬:C)—ÒTºÄ.ΰNn(º¦ÙÀ‘Ù1çs/´×[ýl.üvOæÒ‘Ü?ʇ2ýl¨zJãáP Sžî«gpÞ‡N0Ðó;z "èû!|ãq€Ó8o–%$Ðÿ@ÌDxš…ÔŠƒ¥T¨\]¢?îx³øÉ`ÅÌõÓÏ3qýEÓÇ{!Á™@ˆd?Póªj·Í3=ÙLC|¬…?}d€“?ªý=+äùÍ"£ç ¡¹~аX³ÿsÄäs º†ŸU0”É+—Qˆ‹ËB+üáS˯´äh6 ¦r~•ÅÒÏïxŠÇÐä{nÒüŠÀó[ 9\ ¨É…_±¸ðë'Ôí /ox>yÇy7…?(ì„7â÷ËêäzÿGùãÑ7 I\¬[÷€Mò!Û•û>Ó6^Üþ‰˜r(ÓÜÅ—5€ÐÕÉ%eø ¶¤/È;>QéûyÝf÷ÅÍT³UÏ[×£,Å„³»¥^ø/€¿´.©ç˜§k¬p«j_°¯eß^Ù?;}EUè¨ /©…t±¨w©”¡'’?Q#$Ì›µAø!?ù_XÉÍ€¹"|´Ee ßc-äÇQ¾BÀó…½íO¿o1|ÞýPpîˆèàäɬŸå–á~úå«vdŒ’Èšm"T'#¤ð—œdÒ¯ð Sò@œ~gƒsɘ^ú3sbiÀ³ÊÒo)I.9£ôMjú\R‡'’ð@‘5I38rrý¨ƒÓ©™}§‚Ž<e0§–w8ÊÕ):‡£,‘àá(³Lí³F”Jöe \§ê»ðá &¯|d?Žøû8ñ÷Aâ¡k ö ,Ò÷@|HƒªyÄ€gÞÉ¢ ×=FYØ'`‡»"!+ÂÎ ÍÒN+‘™Ì,ˆ;tÓ×\²˜eœNô! ~æéDžyå…drú:ëà¡·ÂP—ºÄ¯`?T´^¸ !©«zcýÊÇ M…ác†:îú4Ãú&R×ÈcLë ¿Àô¢:Ôê G«áNM‘Ë«¤­¿†¶Nõs‹&gpü:¥3ÄsV(å¨ÍY¡$Ý]»Ì0BéÊX¨i FkèO[Øn®O ðç)Ïë&Gný2§ÕS( 5‰±*0œüGGµf c59Õ(ûRnpôÜBrS÷ršéŒ#À ÁÕ8¬ƒ³ŽÇf2És9L'¦ŸÍQ@³ßG~‹r¹lû!I)y;Éé”ôJ è½£”Sx©ûJ6Ê ÒY]™çÖ’çž’ß6÷ÿكϨ»( DdX xˆº\ˆ–ذ®Ž‡éØwøóa‡`´´=ô¸dóxW/ï„×xh6ª'îrŽ Ð•ZÕ"?.íø+nI•rtCâçÿœÙD²:~ïUm«IO m”JÖ˜]qð‰Eð‰)OAkg4û·Å¡]á0TžÖì‹éo³âŠõaO]J2 ñ„ð„o=hЈE$wlz†^ xzéÅEÐ`i,1ê`ím-?£U5À‰`8n&Ρ¡ à–ÁÊÃÇ`¢×'©*ã!fÒPl>¸lÀÇ—€} ¼o…ÛùJ®‚g÷ø¸ÈÏpZ6J^)ŠíDKb†Ëߤ‚MÛçûfˆ¼'”ÒÀR˜P hsáÛjØá/Ê-ìz¥nhàŸéøW€êý¡9ô`ÔßTѤ‘¦€·G¨¥ù¢JÇp´ò&ƒêÔ)é®õ—ÁŽUl$òܯñ¼‰ó¿‘NðÝp|.Iú¦:ôøN$¨aUåz„è¥]ø%ªð™W‘¼2Âà Æî78S@ç^yûG¤>‘©GŒ—îge¼ý’ äyøÅËÅx&‡FÖØÕxT¶pp£ïÁ9PÆäÞzZ8BAb¢oàŒ»Étçrz=+d<­ó»3Û² &aú¥HÐoÔ¿®†åö”·ˆdúž«îÇW8þC 9çðìá¶šW:dé ÒY¼­Ì¾÷gö½­æ53û>7³Èb—8 `@¤–:@¿ ]0kðŒ ‹„úóë¥àñ`õäØ;ÆDKcr²]•-¾¯§o¡xX(¾§'3!`žÅžË³éµ:RÐ#Ȥže´{Në×a 6`HˆDÖB3øP€ `}v p‹›`œª,Xªár¯Ù ™Z£=d‚Má*mk§é£pÃÚ$·äDc‹‹^`ñ6jíYÝìžW‘Êå®ÂûyÜ“’©]%"´Ûxý²ÜlvùîörVhÑüFô ÓÓ«séõãd[/ðDÚ±—lPž NË=ÎÒû Qû†à<£=QÑÒÚŽ y™¨Ð"˜í9èá„yû´³Ø©‰Ib8gú¢§†soqB Œ¡Úv´åÁñŒÖænèáiÜX&JPá¡Ê4< taÒ^;׫€$ΧDŒ×®ÄÍQm,$0á @íØWe7Ç jX»±ï-r O¤$ý6oÜIK—"z]öwà&~Öt#+n` ¦tS°2±±ŽåÓµµ¡zâ÷ÎQsÞ¨ €JŸOa¢ …äŠÿÄÁ”plÆ‚šUõúËÀ”nÆ"ð%MÇ.Jý ²—~ o¤«d)À¸ËÇßfÖÖ~ùn •M‰Z¤ †vU{„j^sĈ «8T'È5y;:kÕÿ‘£]¢ ÿar`°K¡_•–g!2NKhï'sñ‰¿¤yf¾V1ò¯²ÎÚðd‚…÷ûŠOü¢*¦šõ òG{)-ùò“ xºã™}†Ã\|ÄU\HØÔ¬Âœ$o¢8wPôÛ'òÞÉt𾮢O­X<#à–ƒèµ´ùòÐÍŽ¯¦mÅzžb-·Â`”Ö^WÄ´hE²¸¤phÈN1¼øD‹‹¸)U.pCžÀ„§gõÂÇ¥©%ÂÓçòTº¯žq¬–`”xÅ·G›=Žè8W–[¼Ö­nÒ&ÊÑßoðŸ]ýÀ“÷6ÓÞ÷ù¿}Ö“ÂlbAO¬ŠªLP®bLsC”öx<éÑZ Ìʵj/¸Ï –¹™Â2¼Í72QÍ7Ub kÃ4Õ„Otã P_ÛV³ž#xæÐ±ðcÙ¹OW&ß4”ò!ùítzùåÛìvþÛôæëÅ×ÏLµç}îr) tPƒÞ«»ä¿OÎ`t®ý±Ú—#ô3´TÎþ64³ßÒyK¯Ô²ÜD¿l6g_§ ’Ï|G¨åR5ÿm¨ça宿RFëúãuÊ‚9ºe24_Q(ŒZÀÒ==Z§*'lLgPé7ÙtúMR¿qi@À©ÎÖ0K½œà®ÿ€eóŠcYHz"“Žgë!óÒÅi‡‚eÚ«=k8íÀýŠ=šv ³E“óI®éâÑÖ§#蹇OlØAåÙpC>›a›‡•>FÏ¢~=Š ‹Ùdvs'' zg´aÃçþnD›‚xÉí †„ZŒTZ3Žìù±–~óØž%bÜŒüÄÑ=>`æÈãFsxW„§0á)ÆŸ¨&ŒÈ„&5 ]üDj‘—ÂÃI„Ãß<Ñ~ž;ØßmÎ0‡Ëè ú 8ø ˆ6½Œ!†’ô.l†"•ˆ®LÛyej_8vþ*¿vÎÇ´yt5²íDHò±ÿÙS·Áíb¦ÿ’¡¾¦˜÷ǯ‚‚4––>í:r–Öð23’ºD~%íßËà“íGÑÉ».Žkcá —-€‚ê_?_fsÓ7—¿ü<ûAÞ„Ü>$†ÖØáA 6Ö+h—¿^Íö°«ÄkØ[ö3‘~c-²¥¡ÙzT`7Àf¤Š)åáW_OƒµâôbÚÓRSô2šÔå¤;bö*W»­UîÜÕmÔ>w _ïžBŋу4ØPŒ,XnôR¿ŸââØ\c·ëSÊ ”TÌf,TSJ0ªR´X²S£oˆ/0^-)Ò8왈ÀêZ¦QÁ`ƒ †ÄÈ Àæû¸äFªa—ܬ^–ºúïä’;À"ñ%³Õ÷h VY-ÁJS|K°rZžî˜–@g®·«ì–àôòB¨ÍúüWÁÏåûüW¡ÏÿÌüüWðâAz'ÈÁ)å<\W̓lÅ<¸?á;mpÅ"ã ‡B“Rõ[\èP!49@·+|b@‹j»ú©‡ÎnŠÒ‹É,êY¼Õ±@’ŠŒ‹ßäðŸ;¢¡o«Ãçª\^€é„Ù¬]âÀ¦XÈk›˜šÁâØH¦6]²1HOË×ä,Oã¼’NTÒ•ÜþÆ”´QïýøæÍÞvÒ‡ï}ø ©Øx¥Ûšý„QŸ¹ÁÇP„tÅËÀÚèÝi{¼†ôù •ß‘¨lgÞiJö_ÄzÑ•Œ)>C àV#Kò¾Jð¼¯,ž÷•ây_i-D·{g¸C{ÅbpýjÌ û®9÷bÇwMu5y7¢3TCpsi®G˜"ö#Eú6WÅWØÕºÑb8‹úÏy¹­ð}¹‰œÇdt.õŸĈ¶Cû†¼Ix…‡D#þ‰üÅYüÇðŽñ ðŒñÃâui¥ï›z¡)㾩)àyù„;ðòÁÃâun[h‹•ˆuˆ‰7q댟ZW%ïgÛ5¬Æw™lM´Í–Ǻly„‡­Œò²û>ãFI8}•õî°›ó±¿ÃqG xbž˜ž¹+Š*>ñ9ƵŒ:ÙU;t!¿J{ —P®Oüä>èåoé]…œ}ÄA(þ•¬\³ô5bÁœþVš~TýfzUÀlªZ½euz_°L÷lÔî ®T¿úš ¥›±,s…@“DZ‹3†R¿‚Õ¾g£š¤/‚ÚÐÃb'+?c[Œ_úóÀšÊ‚±ž‘8á¼ÎæÖ]ÙÝa9°Š÷Vp…ða—ô>rLÂà,æn²WÜ|ŽñŠÇÁànþ±ÏÎ8ÊeA›î@å“öà Êï%¬‹št)ÆG_p_5Pasعpƒ¾ûNÑ7MP?9{Lüè8EÒ e°2ü…OÃë‰ä² Ñsyg¥£>Σ«–pÅ.—ŽwYQ´Ïh0E†Œ¶Çõ 6>A¿¶Ç: ãéLX:Jgº}„#XW÷BgÁTvå}=G—L Ë8@¡ "&¡¬¡À†_åù©¡¡5+¾B4?VÌEù Y¢"Iþ<…í»ÁŸ@øÅ åQ+žè¡ø€6åT;!dç@ róa&B÷"Võ ˆ^ý.®! $–'D2ö}Hƒª¹wlÀuó GÒsb½7YôlxSvuCq=¿MxƒÉžÖý²iã’¦‘6N‰ºV.ï“ëúþ&Tí:xgb]wÕc¹Ýæ×+a(ßuðª…@XÆ6Åu£_ÝÀ)&|™»aÌ ¼ÚY¼/6Z»§ÑùxJæã)–§`>~§WØðÎÒ¨L|‡yVrÞc$F6— KšP¯^ÓvÂY¶f4”ežão({YÙ9oºM¹¯ÿJß ã mz¼e=J·†5Éñx çù®Ñy|€+ï÷»6Ç@ÎÐá–A è(Cô}½Êâ¢p&nsaA:—Gö o¡yšÍ.ÎâdrßãMrž×<¢žçø[1®õ°¼ƒ¦ ‹©6yÊX›¥Œ08ÊPz ŒDÙ>÷p€?‡©Ž4YbŒÍ vÂ'>l` —Á¢¦L>=àâ búãÔ}}ÀÏά‡¼§À¥êMƒGðGw <]oß¡¥{%€•¬–ÚÛŠU3ÍC¤ÓÞ]5” ‹¥eê¡T6Jä84ýÏü]ªêÿùÿ%wà2½&íCÙWx€í»ËJldONvõ†ì,«C3—‡X³OJqð~„âW"„2áØÀüwqõ&7»2ÿÌÁ….ü¡ 4˜øÛûÌ$SÛ‡ó‰jÎúƒé Ž^ûRêܤÁeÌJúµó'Î̢䑕KíÓkê¸g`üe^ÂÄ ù‘á/þð¾êpš:½ø]DtM3ÌÞÒI‰ðããö>l¡ÑÞ׿G‚A•ï²JÂ2™Iù­”Ö-öº&ºé§ËåG6Cþܵ9fë‹—V¤œ$3E…ŒåÍÃâûVªÙaá7PÕ¦ò_µnö*£-/‡Ÿm†‘=ížã+EðøÒ|3=¿–/÷ ‚Óa ص,®y` ¸ ™áÜ3-®6Ö`­béý±šC7<…y}÷ÜãÅÞ¦+~åÍö?ÄòFÔ;pmñKÐc?Ã|›ˆmaHUL[õØž²nºõÇikX¬+‡ÀÂØKùÈF^ì™Ùg¦FöÛÖÈ*ì¾ÒŠ œ®ŸÇ/üa©¤¿µ°PûžÍÒŠ-¤¡ZÄ©:`X]f¼/¾1P¹é?žÝ6ì—ɆŸ\°\–`äG+VV<]“£‹}!CaÚ$´fTò™…MC)}¸ØA{ríåÜï˶¿k†<ÎÚá,âõ¢¤ë>ÅŒGõ’–yËÍ|8òógDu˜Á #¬C:&ßp*Þ<üõácwRÎj(|¹$L¸KFL'Š5‹§åE 7;ˆïŽqƒ n¬*Ó±,mÁ0_Uߋ˗}3Ü…"R¿é!BX3oæ!«%4áZÛ-†b¼Õ~+†Úo‹~Ì«·´ßŠ«ÆŸNùyDu#î H~€öœ‰îvü¯íÕÓ þ~¯þ^/?¸M?'‰Ïk,Á¡scº›çË'bçÒ)Û«Fêb‹kðb­z¨_·åþk"Š»£xÚ>šãc »¤9$³m±œe/å~„Ù©% ë‡}ÿô_ìûJ?Ù=ÿ䨕ûM•ÏT‡ûøÀeÁðzO_oö¬23ƒêÁ*ÀFumd1o7)²íÆå×»ðç¬`¯ñ8ØgZPs~ýÙœ_o|šÑ1®9¹øe v.Jç«"åùÅâ üÀh_7[—'«Ë™}mrÓâÕ‡ÁTÓ}<¦çƒŒSÜÀ?¡ã÷rËj:}X‡—=¬ä‰°_Nó½ÆyÉÜölì!â" -Î3MÄ+×WÕnÝ a?@àÜ#»öêá– ìòXÙp‡š ¿Û»ºÉpÇñ}1=½($Ì\Ûá}«ó@ƒ ÕÈh‘º¡x‡,<9B—{˜|,²ôû5k:{m¢Â#m°B½¿­¿Û=–]ÆBb¬óÑ£íB‘eRHë„1>9u8(b¦ê´QgÊÕŠ.#ð'5ȹŽ|Á5‡tVËéG{Èj­%õ ~24†Î%c =dø•c£‚søªi!‡ì"ü÷™ÎYZ/ÃЦc4Zõ‚ñ<½+÷p$ÁZ°Á¯“/ÖN‡ã.žý8–¬”ˆÝþh¸šÁ#Ð?zinÌ£‰k|ôw·@,¶ˆQW¢Keô7? Öž–ËûÕV[>d!°@ÆB²rŸµÒ:ni5{-u±2¨çôÚ`»º,ôY¹±\ÔA”Q/Ï®ýµ³êßn9šª‰0e ãæÀ©Ÿ'ƒeÑlúv=–§&! (é·Ùõ'/UfqÅEê%µ`c9{d#Üu´³¥²Œ´¡Û’Ùý²Üdf¦¯–‡Oö‘K8•wò## iÅõxÉ„XȇQ:Á~QË3*9_FóP3 wKBµIl‚ÁO•Çš,ÜÝñ7Zë1ýú:Þ¥¯_½7_éÈ×ñ>|ýŠÝ÷z\+¿N5ðë×lÛ×£šõu¢E_¿Zc¾>®m\ç6‹ëïÚ"®l ×Ùíàúµ›Àœÿ–ŽÚÌ1¾ÜÂéárç›Ë÷°£æ«´´ëìéPòtóg(3ת¢BI¦³¦kC,N/c$z1·ž’Öî5d ÅCxEÓAxfˆ{\ùОY««)c¶ŠptÖ‘n4ß2Ì*è €Ÿ™[ÀrN«ÓS«5U]Õ§> ¢ôC ùשéœ%mdz~èÎñôúâ´¸9ŸÝÂ_†V~}mÁºq~+&½j“Q¼¼(5fà÷ãÚr¸C²¸IK×,ÌYƒäã€ÈñI‚gXD£é)–8XQç,ò3—,PžÂ€%L\¬×:vý¹«ZoÇýF òÃ9ãb`4“˜‡ÿ‡v Iä 8«©ÊN ”ŸH8_Õ½¨‡âáú´PbrÝ€/BŸsØçóöm¡-L_Ÿ[å7”‹&{3Á Vù2££##·¶C;ÚÜÝ¢›wp 7¯.%5ŽA¨qRˆŒ ÑZ%ê†åÐmá@Pçg^µ¬e¸ÿ“¬¶:)è0÷@ý[_oà,“„Ê×põ ÂÇóö¦œîÚuœ¦î§i>w‡únño¯¶¾-÷óë,r¾º˜Œc2e幞~-X‡;ÔûÒøŒ@äËpÚô4ûn9š­-ãg+Q[¾muËLž°¥v„‰£ $r`ˆ¨^Ê“ÖSËbÆþw¹°ê©Úó§ j:¾ÏVLFåÄ‹rw½ù1H}×ø¶¾CÔsé)ÚW½ý',õ]jÍO!4•ÝÚ>ªÄ†ýøÐ߯7Ÿè ?žtUñüÙ¹ÚÊWÆi ŠûÃæyzzizÓ_ç/Y¹þΕ°``GÍzÃ{³§wÆ9¾÷3‰\BÖÃb_L'“Iˆ„æì-HÖëgíîˆþÜ»áâ_í9ø ²®zhîGÑ3$ü,9†þ9žä]¹ÝVp0DçwÕ¶Ml—'„tª>?×Yµ0 4èr×ó+t’‰”e}ÑØ@µd ù¶Ÿ”Ûv?ù·73Rïû6uTÑidy„ò»¢ùcGα )ùw@WY”þ½ÏÓmB¸^H¯j¯à¥GüùZ¨ÎìñjÜö™Å`—õƒ˜Ç–t¯M¾õZ€o9r*_«Qüª®éÛj¹ghöц, ç¼=úbà9|´%›F@1j€E5<‚Sk¢î<‰°ªÚmó¬ù5÷R ¢937‰}G¿Ï2š?pQ¶m¡€§ª¡÷4ÑsFŒŽ ”L´(ù¦ÿþe¸xáÛ­;ìñÕYZ¢øíòÔ僇3èh8‹ žIÖO) e¦?ÝOÜ]´Ê8(¡W†ÇhÀß‚s!°&ÏÃ=¾Î’Pæ•>åy¹ Êâë§uû„¢—!#ƒ KfSË ¥8ðpóèÐv†pèP-…Ö;peÖKp3V}í÷ßüšâCC¢ërƒƒrô='ÓÚÖôà¬&P!0§àD“Ÿ©¡–[ÁDÓm½(eq ~SŠóÓ™ŸY&§cä2ƒKûðOÓ¾e½2Þá‡&ñ¶êv0ý€¶»¸’õXý+¶þ tC'£dôмãÁÅž;Õ²!{‰¸i˜È†Š0j«Qð«åô¡@ Ö¨†L1aíKÙ§'.Œ3Ñ"Œ[’ßfÅtFǧ e‹í¡j»:Þ_xpJŒ±õ©QÄÍlSî²õëh ŠsÁè >”,°p‚K‰‹I¼GÉÌu“ê¡ãzH-T°®øŒ÷&Ю13k$ÆdØ´jî–6šº„b?Z1°âmœóè÷§L"u›ó1Ô­ÿ[¨[ï§pqí~ ¼õ•FŒßÇ‹ (õ.ÄfrÉÛ|*ÓFI"%'âØgèÞ{Uî¹Û¥ Ýâ]üF<4„=<œÎŽÙ¼koh…GäçÃs›ÊµSÚeŒ×¸övË" …>/Ð}>ÏÏ…ak»åáJY Oài XÛ~Š®A°\­«/ϼcæ…WSvtþ¼”9Ÿ¢~&b˜@q7 íªøñ_ÿ£P)-Ê-´Ù®Vù¸âËþ> ÃúÀ—õÏ÷øÞ»UÝÓ Ñ¥t岦É7ÉÕž7¶ÑÅÖZ;lïÍšýnåË8RhSÑdu„HÃä<”™ŸŸÑf†f‘‹4TÄ“·’¶X/ë®j›DºDñ†@£Þ^ßx7ö"à AÐ ŽFz]%C¯4µS”šÄ«î6S}»Kémw®Â–FâïÖ|HRiè–wlìÓ` ¸ 3Ÿ€±^Û±Ö®ZI«ÛðÌÌðáÍÚÅb¿†®Ò³ÙeÎ<Úƒ„´˜1³è)WÍ쥫FÍvkXˆ’NMª]˜IÍžR“fÓ!~O[©šeúržXÁ6\%…™Û‰p¼a®û¸ÓZ~Äa65”eB(‚Þ-€²[Ô¼Pm…ÔìÎíûK÷~;÷>+ûí›fѤ4®vÓ/ Òæ×~“÷¬ïŠw3&D¨£@jMÄ3³ü9K˜®»rc­]1™¸C ”rgSü³/65¼?U=áw–…åÚ¡;hcþy¿Äc-‡èÔÓ… ­*u[€ûÑ‚‡@/ˆ»®Ù7ì7¼—¬tGsh厯éò[jØ'Wè`W¼Ã)*14`ý²«ÛÖ‡ çÀÅÖA 4Í®¼ÍîÐñB93ÒØÜ¾«ô‡¡›='´P,¤Û´R‹ÑÊ #—¤59ZñšRZ­3ôÒ5§èT¦ÃëpÿªV©ÁÈIQ¢wïÕØOÎf_4¤9Nz¨ùYl*ÒÍ_Ï)ùd0õn}_ ‡×¾‰ËEÜÅô¡ÆSoëÖ}l¦Ë3Hޣͣé 5‚*.L 0#HákÍùÌ\¸EOÄ9žpQj=ò™zðUç:Cä²èP~Yo“Õ ²ˆÌ$»/·ÏC½ì3Nl…áU f*€ÂQŠh[Ïùª@Š£ƒÔè©8ju˜Òéõgè(Ÿzy M¤©Ç åa^ÅÒK“|kpYe–O†¬N.‚—œ’ºVRÙŨTŽÎQF6FpÏ$Ì: L¦R£¨âÂÜ&ŸTÓ/Y³°-l—×ÌDd ¢.*F¹™úÑyMyO°5@Šù|¤è,Ƹ?‹O¦fÎ&â<ÍG뤵Óê­ï¼Š™!ª²ósª„Ô+Ö™uYŽ!˜ £QÅÇ 'ŒÍQÎÊl‡îSNHc-çx* à¤4‹0+Ž,ß– ¢-ª*>ÎóZá’$ýaJ¥“ÂðŠÏ#Y\Ulž³íóy$r:&EwƱ)Òr)-¿ŒÃ"m(Ì[‚G9Ë*›4¶ånµÏKFD4âP˜8‚/ølŸ;®„d“'þ=8EQÆyB$ÈT]×t-k?Í*EȇU¤ŒØ ±s@]3ÔG@å’Ë+ÞÜC1U¬’ef‘núí"ANƒ(B$ñ"3¿dôž+oR>nùyÑHToªfµÈÏ›nfED™®š³Å¢wU¹¶ ¦>¼IÕ@D¹~AäGfNíÓ4M¤IP¸³Q›qÌRm wàhóxC˜—®LMÑïÊn^Å%pŠK^’É’Tì"Ø q¿pq²Œ0¸^˜2ö˜ª¯¦yUtTõ„ÔÙõñSP¬FN “»½½¦®N/$ȱQÂjÕå¿‹TÄ´¸ ­‹vÊ0YÅ©†.àl¹Ëk,£BU,ÂZ ŒžÙ|nÿ#·À]¤¢ªÅù]þGvQïêe×ð&#§ÀCxEÐAi^’·œYUÀ󺲇¢çaåB Òá/†d’È«^°C)Uß8³Ìz&…æ-fÖ <&ãÐ5Q)Öš‘Œ{{_çYÖ*š**Èíúç‹Lk¦Gš„<éS‘Šs¾HgRˆÀ#ëË“I©›(Yõ*%ç!k#ÓäϤDfëêj$¾˜•Zð‚5ÚFt˜+‡],A°k’Õ_ƒ(2¤pÓ¤+{–o^NQ0½ñúxÌ$"E¦Ê^ºñ@5JUÆRͬÊ_¢¡’r?ëCˆÉèT=¨g@Ë­ƒ¼ÊÏ{æj¿©÷Uik’•±Q’ uN¨1är¿ @€f¼94¸fµ‹ý~×]ÙæõY~´FÕŒód¸[†ËìÂú~{_=—ûUæ丈F× sž]þ\=O÷+m‹#ƒx¦am A2iÎÙe®%ñ5ĬŠé 5J*.Ì 1yu/ŽÙ… Kh$]L˜,bGíÂ¥=¬<ø=¬<˜Vwqq¡Ì¨_™â:Ḁq™«kú~"ìJ™Àcš†DËO|2‚2n:». R*K¬~ ÷bwØu»­<.ÊTÊ«j[?TÝsŽ+õ¤”ÃÛÆØ ˜ð«îeÚ±ºÖ­ªL›Zh‡™ˆ0ºáÑ~&‰»Ú^¤Ëà°­Úå[¨†vrþ5çG$Å¿éÏ$%§˜‘úåÛ·Üý]Ï=âÕx—<[ó3™…’Œå o r m¸nÁ“rb$ÙHâÞh1’ëA#ÓfÁ/e81ss9ý\,ûÕ6^qøW{LdTfBâÁ|8‘,p¬zXÁÌIuß眒õ"?-Îð%¼-{ðwþóaQu{¨áb‰XIµÈ~Q•àg{ÃÖ«°ˆFÏBžKîÎéЮð_èø¹+Êr_p±BÊÚ0Ú ¾Ù²1OvóáG+ºV¼1Á¢Þÿ3C„𔆑V ³´³ˆZeèã.áᜲÛT©ÑO®ôÛÃïÖ/XPXNgÜeè®dsp¦ERx¹¹ïq\~‹ ˜uì~×g %mœ"(cB0ÕÏW3¸'êêNkõè#wšìûmº]ñPv5Ü•êf^6Õ±fªWNn=PE@Œå™p&‡þý|qXÞWC ?Z1±âÉs:E˜½/(Æ;9drlô‘¡]CZ!Üð¨øíf† ,I½I•®6T´Óý`â³÷fÚk½R_›Òt`°ñH†ô,œ³òYÆŒ‡^Ù~G0 ö­Â3µ‰÷vüP‹Š4œÈÌÎgÞá¥f™òÈ0•¬¥“°„Ÿ˜»XBüú ú0§0þ0HG¯}F©9P“–ˆtøÔ{ö5¢kšepHÜÛm`¿yÌû-œFBÄ ƒOL߱°êÕI,v!ÆÔÝïæÒ“Ü«[ŠEPBããbôÚÍZâ :­+Ú²îðkbRšG;”0x>–kèƒW9Ë2>¬âfÄjÃ}´ñÛôŒØVž…Ï),gð,œòÅRÖˆöéé%›Ü€‚·$IO»´2¦mÌ$%'l~ƒWécµH9Õñ"MÕ<.¢ý·jFQþ:°š×í˜\´,\W­E؃+ˆÂëNäCŒ’¥‹Ð7ÓÓÙ&÷ƒ™Øfuß[kcÄÊ3x·¾j=…L!†]x¸ šçÍôçÙÒH^Bâ:ü+ùd\ªJÚŒ/V3%÷Ên þÍ[x,Žeiñ4¯'m›1³¢mî2>´ö/Zï:lY…§Yižoçœ\æ«Þê2ýêëo(ù—dgTFŒIäÂËŸïnµð´Ç˜¢ɹ¼¤ªúH¦Öb§@cëI§™AЪ߲ݸfqFâØàËyElN&È®¦bŸ­¿˜ &C“éŒbçäÖ8ÕmG®Ï™ÚåÚ }P»™¥=Á^ì㤙Á1‡ÇŠA—Úrµg“‡žÚÊ7`HÈ¢çÀ¬Jwzöµ€éô4F2Kq2{y—’—Œ8„1ÆV>—–òXJœñ*ã$Iä²ö¤|güy¢6E?ضœ®ÉQlÈ€NzG1Îãšy‡“2%Xæê‡îùëzECŒMpк7–´®Lï(Æy\Ö\},û]Ó¯Ùïpå:l=PÇ®€)Î>â4gЬfbGPÍ!éö,pÞoQö•$¥kïçdÛ3 c±´Q–Õ¢ùò ¢ƒtô7½ð]1VÝ1׺á»Àò0˜t‰î} H¥þÀ¦gëÎǘÑ+ãð6QŽná¡ãËr¶£La«O½ÓÈĪœH¡ìvÒýf ‰;cNo®¤Ûû´eK8EïÕ• l$::–Ì'O5ÿ%Yð¤Ìˆ.““}Ÿcsõ’üŒÊIô³èe>z‘‘œ…{B‡¹GOH<˜#G R0äȨ¸@§½ÉRÑS>:ùìãm”A=§ô³ŸG”CH<˜GÀ*íàhÚô™^ssÇM¯3ϱ<߀;ÂèÉ }kWùÛË‚_HZ:½¿˜ItMË™åXR\>Æ–^Ù YmÙSºaOZS&sÕL’ñê*ÙæX˜Ÿ§Ú•Ë;¸Ô{„#)3Ⓣ4Ûü*Ë2âÓÅ`¥ÿ’üŒÊI¼`ìlŒ(áÄäøòñ¥Ê•!“Q>ÂeJnùd8pÉ”ÍÌI^ùˆlDÊgßÓùàQËÅA)›½ƒ“¶?û:ãGñÙ©¡õÆKR2N°Éã…+~ê)Ojð§…PÖË®ÀŒ²¡#àrUÃr±JàÓî©iœ€G÷ú°ÇƒpØ3Û!!‹³¾ãO<w”¶ÑÓÉ,Åɵ“NÈÃånÅ>Ëzs7ˆÃ»Ù‹JZ ýXËt_Î.$]çìç¤v Û,ž®9]’áfmä¤-9IóMÊŒ«pȦ@ü©”©l:a"®m0ØÕx_=?”‡mVÓia-½"VWýsõ\üŠá‚r‰‡`Âðñ(Ì/½0cCdÌÓ½¶`útfT"@G;·éaÄOkº¤¶M¹Ï%æ×Ö ”EÎÅɺ Qê¡ÆÀÇnÈå•däVbƒ”—ÏF>‚îÚÚrÌÂYZÜa°xè³pÙlÔ»%…ÊÎÌÑÙÈÏ€k÷|ÒüÜ×|U÷#FðA)‹®‹“fÎ *T] ñ±´’„\³Ék=Æñ~Kö(Keêevi¦¤•Ž3RW³ÁtØ3ÂZ i‡ho ‡®xö±0ÿÍéIõXöÙ¼;FD¸/æé¬ø>åhC{ý\MhÀ¼rÃ4nY™ÖLs8ê¦t¨%­¹®» œkt£÷RÂ~Æ.<`ÙOHÇÆãæ5=’z.iŸ©E<]‰HÚ›< ޶´GÌOW¬;ã¯GÍÊÓÍ0ÍÍgDN)b½çþÏí±íl\Öæ@ÛÆ|žý×ef ë¦xëL¾Gµ­Ê-kPÌÇ2Þª¢A“mª‘Îh†inFí4)%¬wdKõ1M·¢H;¯ u<ŠrY×´Ùm'$5ºå ùhÆZMdšh3µ4F2Kqr–l+ù»ºõŸm²¨¤ÅÑ•ÆÛË¥{áJ `;'cxf1tG÷I¿¶é‡MWßýä$`1ŠXõóš°Ù½Q(íädL|»Ðþ Ĩ全AòÑ>K£žê¸<)Ç:“¯ngÍpó¡Ò:®G˲OömZV²:¸@ÒÇgcDEÛé©DÇö|QÉ õH¨±w„NjǰÍâ0n²sl ¸COàTýˆ[®1A›«*MJ±ÅÅuЈ–øärhyZbÉlJ_ØU«º_–Ë»MB@Æâg£ìôƒ×Êo(Ë8dF-¹qä\»…˜Å8mŽ¢’A®¡æÈÏû“Þ2y-:ö°¯WÂaë9Ì k–öî„ÇÙš“ÈRQ:úÿrÿlQ3y]9,à廘,9ob×ÍFsK³rk˜IÌÇ©ÙVeß×›‘Çc#r6CR®÷7ð  ÐLj<Í ‚® -r~ZšÛÖQ6 Èy(ÚH«uF–ÊçkÌ„y^i£Q~*r>Z‡!¯íЀ‰Ãàid)8Òn@üžÆ”œWÆGHC©æ)aL¸œ¤ì8> &!ûPdØJG:ƒÈösû ââ­ëhÏî>Äò…IÐË ý,ýÓye†&J3šˆLŠŽ£“ âÚI¸gøxˆÒHú£Ž‹ ¹ž©mVBbÜú²Ï¿ r”À8ÏÙtFNÈžcd‡¦­—ãˆê"A’:ºxQº?,èí‹ÌÞ'-g« ÄM«#=Ù8fÍ+s±+µÊ•³¼5r]+¹ XÉÊ\Â:zíjÄ¢UÎjUö2ÕëSY S‘)“WÔ–cן²žB+NéE¦Q«K‰e%ïzRÖBRO GûˆÈÙÜ>#2àÚ<Ä>Å{´‹¢´x41ÇEvNŒü …|òiëýY«§¡Ú÷™Æ„¬Å<„ÖÈ /•öE‰MòÏ®5ùH£×FÅË»ø%ÑñWCs.„¦®ZäÒ¼Ðeݨۅ9 ÄíiŠHÃÚU@z÷Ë4±Lö™C?iýBúL’WÒ‘åàO šKÄjíÒ8—oVi¼ UÕ¨|—6eäý´”p4¾»kv=ªc~DÌä^ú=ÿœ¿Ï×|üÇ<æ[þŸ²HóÅŸt<¡¬|ûÄUüØ]u¯Ùc²™Ñ¨Lf7BÍxÿ#ÒÉÊhÔsd8§)O’ e/ÏèY|íÌöl‘ïÏ"êÅB4$û¸ÏŠñž*rüS¤¼RXä’¼F¸S FYúœ¬ûȘ$ÝVàÆtslÉûÄ£0BWQm ×$”›—£s‘Ïß-€lÎÕb”‹ Þb¨#,Ïé, ½§>,.™Ï"¢_7 ¾sÁ‚ÂK¨$Óo›!_»†ö2€x·`ˆ•<Ëõ¼¬áÙ°zDZU°yN<¬ìšp¬Ì A”ƪ\íbÊ´x®Bôüü÷§Y±hX5§iì«ÙŸºªú8;{7k¶eW÷ïêíögûç~¨v½Î¡{^Þ•Cœ‡‘\(ùÌ*–Ùt Aû†¿ˆm¼3³¨7u;/Ûx i]%Ìà4¼ätþ¯`ôøàîôúŠoU‚¿VøU.—pìQ.XÁkÞPZ¬àöÍªŠ°®wîÚ†D€7aôÂýxñy§/SÔIÒ%ÜöË>k½*.a¶0†+fí ñ8ƒÏå-Oª[út=èõ€„1“%Þ.ñ>£ÄûŒŸÉ”­J„–9ÇP3$Ôø³pjuÌ^cØDh­Ÿïñ Õònßl›Í(F!ဩ¸ùZmÞªXð $Ë7’…z³/èÌâ³ú,ÁujÒ10e補—Ûz^në²O’´‘:+g\W½¼(0°B %¯tV"‹µ)P¤ÍB£šûdViÎÐN1ôvÚa_Ü^;àâã”ýÁc©kÿÿX£ mkïÀ÷©Ó4˜I±v?:óÊVO¯Áúµ÷Ïûå¼L=O—p9iãÒU½^ÃÛ'Öžƒ³íU14œõd-ªp–$ùtª“S‘ºÑ ”Ÿ½‹Ô*B|Æ~¾]•Lü ¢³º<›^ózƒÏHƒ“²«Æxm’ëšQ†Æ³ 8*µy%'ž&~ˆ¿ š’ñÔQFÃÈ-èù(¸ áþÄ—išûjßçRVPSéùb9Mðm(˜ùi¤æœA°‡Ššmž6Ûm%ÜÆÓ@‹µZ·þ©U»Eô@OJÆÃNGEJAôZ§0ÜÆxúÌ—Î(jQNFÛ¡©Ïh=îÊqtîÊ£;OƒÆª3…é … ƿݿahWÙä4°D´no¯ÏdƒŸÛˆ± ›¸T¹¤L¸‡èÄD.ul·Ô@@WÔƒlÛr>‡ý]¶ êaÉ"u†_o¯ ·fT²¾¿Ë.C ëa±: ˜Íf_δÂ[§È<÷lMGGûa¼ÛM¶ÕCµ-xtnÕâOÆ}’>!Sf4_ë+'ï¥:^•/½¯&HàÐ2 1r‘Æ“‰óLŒÝxVn ácš_âM{·Ì"®¤ÓåkÅ ¯?’FÎ,B’A—µeà ‹í$iòsÄ3%wÃ/ç°‘ûñù$á: @Ÿ°)Õz¡IÁ£â¾j&Ò$ùuûȆô"_ö.j’‘ƒ>”•I ß±jM]Bo*RbxP%L:ƒXaÃÈŸîã[d]i*G!KCDÇDà©zÞ=ýðæ´yß'‘5 ¹È*˜Çªðn>$®°DS+à¢=žI­OæÖGëì¢,7¬Ûå>¯¶Ë¦-ê$šTI]„õÐf¸ p¯9.’~*é ÕA­¶iªØ•JoÒÒú¸@–\©ôõâ Ñdœ,à*åPP¶,#v%€#‚Z¶m¹ˆyj5?-óÒÒœ–_ùZI¾î6èÜä㢅Sh“Ô˜oQs¼„â{op©·_øÔñÈo¡cÞ:7B8UL\ËKQŽ‹cœl,"6åšë÷3Óä)tÄô9nê|7uVSç4Êõ¡&I¢ˆê0ÇXتó·×÷Îe‰¤©s`Ú1e¾ L™Ó¦Ë¡©rÌ4ù.4MV‰rÅ"À!ëɀ+V€G_³¶±YçÑ\Œ¡8->³ÖÃ=×Öbi>Ó Àz7×W/C|a®]¬÷M4_£ÅWA2‚—‰Ô%y\øøRٯ׋,*BÛ1bÃáHn1ñ¦Â±­š|óÊ>¿Ïƒù±÷”}+‹D±í£»õñ¿Õ¥)œ€H†®\ºöø–ìŽEÄôЂꜦLôvžÀÙ„'{IHïßðÕÅ><¢ƒæò"ÎÕ…Åä"]žƒîÎNWgÄ,|ŒûTåáµ „8°d]ò÷»«ÏSç§¼ 7 ¤‹„d.ò7øÑor-lÔFl¯ –ÁسïÛÑ\ û}©ä{C;ÞBAf{Àüƒo@‰íÄ©@àYý±Î(æã*€.¶w?óÅà4¾áõà@±_ÓÃó…EãH¾Ém ¢þ]uŸRï ­Ùná#‘LÐ,éc:b]”™$qÊ·3xO¥üœÎÍ÷·«>®*¦UÙ¯ÖM>i: è Mˆ3Z8ðÁæn/)ÓÜbNâþî˜õ{RÀ¬gq‡Ã>0MVŠ¢n¢Ž+©3ubñF€Æ¸GhK¥rÚ¶†”DB¬±û¸H“ᾤ…áàT?H7#PÖ7iŽ‹ª–`gyØ,¦©…i´ãPV°Z:£‹êtÝ`4X¨3)'U‰ s]}„xÁÆzÜž2a#‹1܃Xs¬ø½)rk—1‰Ä,X8DE›ø{¸4Çáu³}½‚<;ækË’~É:d”ϹèÏü9{WîxZ¾b‘¢‡ÕqýX Kó:¸‚è„+6­€¥mzpE}Vñ¶a…‘`Ö–muÇ…µyÙEt•2yZ8]…ƒ€j¢ó`X/ÛºyªùyÄD¾f97ãâÌ‘ü ¤×Àj.°QÊIWáBd‰•ªY?–u(z‘…’T¦tµ3Qtñèÿf|7áÖÍúcÇ*õ¦Ød«çìwlÂY¡ûëVÍ“R«åK‚nKå ãÁ¦§rØ‹´IãPùÅ „$ÒtQ_L°[´Ó«æ‹\â;ždþá•÷‡!ë!ç†÷-ÓŽÊ 6OåË7/Å' p«.¯aÍiµÎ-Ä®ðÈ3 B¨Jœ.Fȳë@øjZ“]ËlMN›¯àsTzƒ30%oÊ@ël®ýåj"‡¼=VƒW‚(Q"QW­?ôÙ›ìÀþ{ìáÔl]8ø†<•V‘y[NâÙ("ÏÕZJ r‚%%+½ÀWWWʃ‹çY.åŸ~½úíýmv]5ÇÍûzÇ?ÂüžÝ\HF,U'KA¹ 0›âÆN;¨HàDrÊB,Ç#¼W×wg,!ò›æDP4¡ˆä˜‰i²¹å34BF³‡—m„õ‰<ƒìlNˆ ßT:ÇX«í&¼ñDáFJSþ¤}¸IiiæìS>¸ú;“@D®·ü™;•~½€ÃŸBÄ w?ÌŠgÎ¥¶k—ÞÕ3Ñ⩘ÔLJìJ¬t¿Þ懲zžßØvm˜”ÍÈ¢sŽüº(wûUÓEÈ#KiÙG•wIÛòâ‰{X[”[2¬C$¿ðÝhdeÞJ‘wlàÜåݳº‘"¾é#M˜„WâÓ1*J$1RV«Mûù!±#!œ‹jkJ½¹»™ÿ>p a†/* ÞYTŠaÜÅ&`#©11{?ì_㩳¾ÐÅ©­—+ÖQ×e€–œˆMY˜Ú÷‡ÏÙ÷Þ]}oî»ÝÀùÈmÉÞÂß?ß¾Lfê^ ”Á‘èh9ÉÙUª¤u]$­®s1cYˆÜׯ|&؆‰ôb†>6Ós‡˜4,·öŒ§Ú ×þÍ{h{¹Ü/–¿b%G™&`^ú~ä¿‚–så_±…Þ—g ?sý`%pC]Ê©›bu ôþ.øÈÝ]ïäô*¬ ÐÜ×DÓxR¢q²fй ¸Äõ3©úOy8Á$I|;ic€\¿h7š$®ûG»˜sÌ|êQ ç‚>´ûç¾\ƒ‹æä³÷œD7}»¥©am®<Ÿk6;Ҽξ,>h!uãkóèqZ饕®1ÚÝ[ݼðµº}8ýÌwBØ_æY»*ÙÐoï‚ kY㥽“ ›ÉÜx^‡*ßE½màÈKËB†¼¿»ú8ûâ¬f‹éÑUÍΪÏÃp p‘ሥû ‰]Õ/ƒF 2yš°és6•韻9(õCWä‡e¾óß§íëõlìõ[   d ëMØàqÁ±³¸?×¶ºÑ[‘莙™ÌœÃ2fhá@,ÝcÞ6ïòC1pïÃs-õÓ‡'x“‘?'’cöÜî®Ç \`h£&ž2³§1;çvAb6'ãS܉›½æ’¨ÁAÊ@ R)ºZ Qƒô8z0œA±+àv?A„é‰TÑU‹Ÿy´Ð¦ªVù:°&c &Á2]îâ\&`ýØ6%¸ëtÙàsB=/Ú,ý¶j+ð:däÆñiÛ2·QGŸDua'f‘gPŸÏåZùzˆbª#Mž'ºVgÒ2-ƒ}õ^£Ó¯›eßæw ÔB)ñcºãŒFž]&[pÌצ9À²èm½)Oå† (&"Õz™çá“yN’Ñsô“yL  ouUevµÝ–|uñAéɇ캨‡c÷|[Ã|0ƒ‰Ul,É͆jô´LC@$0[UÇ¢í ©†¯hòá'Ž‚g aUò3PGšÄ‘O9Rq9Xcó3¿¢ÜžXSד ã¾ÙpËÊc`öÚˆT(“‰™L—XÞ °þࣈ¾4ÕgE[‚°Ù ̈»:ÑÑ35V¯T;ë÷yÇ»:,¢ÎØïrûq|Çø¡\NP¤Ä·~uÙº Õ–›¨ .üj#þÒ:"/+E¼¬hJQvqD³®ªWÙP9½ÅдÉtú:oû½g͉6 ŽùT£Š_‹~€ýS©‚é–1îõJÑ+m{HÕ4ØŸ¯á,Ñf\°°¦Ðü1!¤S{Žý^4å"ñŒž} bÐ áê ³Ó>XK±ÞxðŠ*›§CW§B k¶û°˜Ð¶‚h›þ[5H FaÌÒ$\9üjθXTÛqÆ á: àt¾¬X%ÐýŠÙ`êê·…`øaÜÉèötñ‹fææd 6êMKæÂ3Ù[<ij2‹6Aèú!lpKR4ë³kØhc!;`Á.Æp®:C £Œ_©P°Ð9(›>õZÉL/IŽk|Ô¢ßè,^­²>åU¹ÉãíH”°Hê}†¡§ ÐT36]¹+kµÊRò"~ÿ‚Ȳ–4:Ð*D!µØ# •ÒÝ5wiŠí×9¬}±Áx0.cOM% ‚fÔ*=“ßùQò±Ø_Öûì6Ï*H ÅV~îÃb_ ‹¯Ž¡î™‚”ÎfœÂÕË’à7“Ù©©Ž‡"ŽÂZÌD.Ž É“’™ ]^V!J:H㓊]ûjã©êMÚÈÁ«x£°ì§öôNü²ÝÀJ­®ñ1Öxâ7ÈÏÞŸøÕ½â¾hö‚ G“ž gFøÑ–£:úPA“.åÄÁùEÿŒ>‚Õ¹kvÔgŽ¡«¦AIÓºé—àç'g¡$Ÿ)Sx'~òvì:Q¿5\\´”ã‰5øOgÉ¥ªq¸*~WÔͩɮ?Y˜ÜëÚßËX(ÄÒõz8VA«.2‘Ç_dMº=KáÏÙ…Í·£l‡N@ò> Ó*¶9"&m6L#<g1Bj^ÅSrAô,§úþG±¡<ƒH-U1N4ÅtO¸Ûɘ­)­K—ã(ãЄp—ŽÆ»"ãÐHxí“k …50N¯ëÍ"tlžÝjã †IÀ42CΕaÊÃo—–sö6›b›CŸ²øË$›?>&Èàë ‹)»Àh"¡»M,FdºÇä¡è`ê˰y%Ç®Ë7Å›MóTó¬2²áü:ÊŠê„ ªìvL4º$ç‚<ªú)žÕHé¹è5'€×?i^1]fõ6×[/¯·>^o «xÕõc¾ v¦Ó:#¾èÎÒºb'^Ïi¾¶W ’„щàhÙE"Þ.Í.tt̆étD²‹Lb4¼¢»"«ÙFi‚E:êdßÉÆ |;å59¹Aàt>úé¯ìLÕ`}zpyv/Õç§àk§a4Ú*v[á‡ÎSÌÅ¥ä4ÿ$ªûæ œ BlL',2Їˆ²Â>»Í.ÒAÜÕyÒNâÊGüöA»(úmNðAb:J§$\èÍû¬D*«;°Øñ¤{ 9{ܘÒÚBG# ŒFϼöƒ·1ÑÞä 58 Sñcq&;Áè £qTã‰IS-§}B¾ôs¢/µ·â€·7†è"‘Çwöýë‡ø·§Y­ âiÿ\¯}²m˜”¯eˆî~\‹TBJè5¥€¦$óe•)Ê[–E,ùÁÉ*57%¦¢ú|ÙZÚšŽâål4ÆþϦqY&NH¼¦ØX~õÌß°«º/!Øïµ*«Km›ÀÛŒ!£v*ìß–•=haêì·o·Ù—/ï8äáæ×¬åA±­NzîÐy‘;È£éåëñŽÉxn¡Á †LlÆ¡ Ѐ¸çͱW!høå“­øÌÂddqéüoYg¾[¾ñþþ‹py‚ŸC¾R]Á˜¤LˆIKÓeaÞ¹ª¦‹yn–╃ JHßÀšÿÉÞ1ª[Dw·ŒÖ/å%p>a&HŠ“Í3âR9fÞ«6_ïåŽÓÜ”ïß‘C,¤jp††NŒôLÌKù¸N ñôdçî'†A#%™l»÷ËŒT*ú´"@ˆ€N´ÐôÄÅ"…ܦìáf©¢ ,ÇÐБÊDä 'S9‰¦Ü´tÌÄGCDxR"ƒàÒ5¹p­/[ÌÙS;ߤ‹rÏ¢"Ê9ØÏ£&:Êc9X¨ÄñøO<Ð)šž8=ÓÓ§f%‹åy>–ô°#- ÑÑÄßòåþ@°xY}1-ƒÄN$P®ÖVà Ò69øxëáV„þSm‡ç$MÉŠãë`jœÅV\à ¬ÎV#¸{$±N•àº\GRœ¶AYŽÍt{ÝËà>úQí™üúvÙдl¸Ú¥HÞ:ÎpÞ‘éÂêÊ´yß?5ÝfÙ—ÊP![ ³³ªjžàb3/û~ÏÛ¶Ú[TEf¶ˆµ¨Û‘ÑÌs"¬ºÃ7ÞR¸‰XKÜpÛ+ÿþÛ‡1`³_³.§kçHöM€Ý˜hõ âs»ø’ñ~5Q6:"|£ŠÃ*4t ”Yºpø@ØÒOšp÷+:_•Dä¬é*WýÀ¢)jYf0D¾"*}NÕ,¶*á{ÿâêúîå|®aË:ÐkÛ®ê’ù¶Ž¢M³¥HÎd7àw -+’Ãþ1¢Æ¼‘¿Š}g8zdjæÓa–çÙ´m6rÍÆâÓàk|ÙßÉR»aÛtOy”n5c–Á¦ã—wCTëŒæÞv ?t@-‘Œ)‰´Dp‡jhÊ0#‘j]ÈšüaU»eUy(‡ªñÑ2 Z"'ãY©ôšPOª!&2Ñcò•AH#¾-ºC\rw)-ÛOyÉ,Á•$„Ñ8Íu$‘”È€ý]ÜZù LsvÁsf q±Ìð×Ù‰§‰Ú_hÌvNÿ$7…"?„´Fç[§.ø•ó>„ãYÖðsx≳‰#ãY×ñhy"Û~ÿX<î½¥pÇ1‡Ù¦Òá^/uèzMØDFePñ?_}K¦Ót°ð¸6œFj¤¦<¼mÖ±ùW÷Ì­`ñêAÝÏ0Æ¿Æå]ÓÓa»‘M“Öÿ×Ëá¹ ±±‘#-³dÿ‘‰ÒƒÊÛŠ¯ÐîåØÓÛ±NGÿx‹p‡˜’u‡y½ ˜„‚Ž\P¦›\Ä '•Ý!æŒ>›xйü‘Ô½v?RðÈZOUëGÔ´åÌ 0Én×F€ÉëRã>lRçAЀàÌÜÃÅæÓµðf q#°;=wÏåP¼š×ð¯ *qsèY{€óžá ”Þ˜º ( ÑcðJ´á7C©h]<*D1— DŠ4uÔþŠ… N9ä¾J³Í‘¼Â¦DAf²LrR‡}Ù<øT†æJN´ddç öñ/é Î×VÏÓ=ÊpÜ@¯;Æ'™^]ÉIB¯ïâ™ìaã]{?vĆU¥¸¥¹d:ó3ÂwRüyUt° ߬áSÞ[B€Æˆ*O÷¼k€]uÙw¾=q…ÁÂ=øájä-nþn³œÁt?ü~…LѶà‹AMi˶€S›jNPC9z€Ø ”Gª!êà \þ.a=’¿ivKqàÙ/ßÄMòÇÑ~ù^2ÿ›»ÃÝDfWEM]Þkzi$& óÐ ®DËœE¾‘9@:ID± A)F¤I¯BñFÃÑп° #M὾Ѿ¯qº ñG]ƒ)o¬}¶9ò޹à.Àz؉MQUMÿ_ÿqÖU²qæxNW÷6vœ$¼ae³/‹ÿúOŠUÀõFZœÌ¡\äûûk5ûÀ t:t|dèÃI ZsN]ºˆ ‰®Ï_<Õù˵ù Á(ª.qWå/Ñ5ùK\EþY¿8«ñ— Ö¢i²¿FWâ_=•ø×3*ñ¯£¨Jü«»ÿ]‰«Ä¿FVâ_•ø× V¢n2ˆ„¹ÜUë™P8ÅNËÁs6S¶8·Wð[fºU”6jCg¢TîJ6@\6ë"¯G÷Õ ù‚¥$]7ÎvÒ1KnD‘/PB ±d1eî¯;.ÎÅR¦JQ”‡è쇮y†±y>°)Äž¥À?Ù;î?¬ÖÕò«]1‡.zHú´*p•¤t²°QUA†´w?xñ(ÊÈ]ãibé¶šf]¢ÅR‡EÙôF¸Æú©&’ Ñ#âÌæ<^¢ÌŽ4c×Àíñäžd'æ”f¢¨N‚äFoÜ´Z&‹QT10ª¦UW]ëñÚY;J’ÄM¬8&§ý Gã˜Æs¸F±D#MAálœfL» EPCEU¾pÏsÐäñFo³4ºî²mE9¼¹Ôˆ¥ì¤GöKò=³X|Z>Ï‘“ô-I³%Qˆ2¢‹²žô_qPíË?RÛ¨U„¢9â>D²ó…bNªjÿ(‘.UŒ¤Œ€Q´²ˆ‹1ßÓNåk"Ùj0»·Í}=¨|D"±%g—©89Ø ù.ÑRf ŠÓˆ‰ªO†öÑK!æ¥d2øêzâ_ô/ù&~ƒ…«—ƒ™ÜÊL³QˆâªÃ¢,(çÕCQÃF_7;uúðŠ @ÝEØÎWúðíþú!û¯¿ügöÙO쿵¹¿ŸˆRáSü̸¹ØlççÑù6 ¬ºr?ã1–OÔþ•×»f)VÖ}¬œ$¤çלÞð<±#68&ÁU¾9, ¨î~8úθÒH)çé¦ùªÏ¢©ò®ìß”k@M/ÃOô²¼Á|l”Nƒ§£¨hêÚ:ç+Ž DäjÙ‡+ÈÇê”T–é av™B(ÔpMN„ °2Ë*'ÿY. „Hà\Ùwq‚+B´ãÃÜô¨ñ]žrŸC„Šg“BÝ#^œN“Õ—p5ŸW ‚(©"‘‹žâñq™*ï/ëæ½óa8# 3 ¹õR'pÈ7E‘÷Ï~j¤¡ÒLTv™fýÈFó2”P–aö5¿®¼„à³7©÷W²ÒdƵx„Í.´DLà næ±ÈëÁ=!QP^ÂÕÑQ’m¼É@C ;/zô=žˆ ¼›Z+!=š¶)Ü2 ?gФ™aKðÓÇ0§šítY›\®–[å&×ȼ ŒøšsöÛ®29šSt½Pœµ,,!~´W‚ôHÁ.™Ä+CK«š±Ñ†!i<ƒK»kvðå¿Ù-À¸ºgS¦_ÆY˜@#z~¸UJ´‹R474CB-ã×Í&¶™P,Ye†õïŸòîA±¥µàß›[í¹qÔ¬c,F¦¸¶;ÖòtÈ3ôÃϬ1Š4?GAvD¦ü¾XwþÅm‡ˆâå„Dq”!B¤4dŠ—ÿ~‹{zÂÜ3Vªž!î”Và i ƒfù2XX,vÌõ¼¨1š±ÉЃ"Ù¸ˆèõ!MUtŠ!ˆ2„At”aHR×-áÞBy³ÉàµÞÞ‹I䢚gaù™‰Rrí$Î~61в©ÛÎPK²–`Ð#b™8I©%±}Ü1sÉà¥Þ±‰”RqžXädiãÄlÌ›~ižëœý^-ˆßå£@%”E¬1iˆpŸGŽÏnÞe¼Ef¨¢¨ •ƒÈ Žþ@loßîäENâ>x!] eó eá "DÀ„l=CáwŸ=<{f|°O¿V¬Zæ¸TÐ߀I‘Z†¸®¥ia!äêþ6[±LQˆ›ÅäÖÆ+öc8vÿûI .³rc‘ ã)¦ã]e àga[z½¥˜!µ”~R‹"ïÖ{y{ˆ‚QE#®]㱂˜unoøD§áô´ÎÔb&Dp±®Î.(j‡V5Ëêwq–ïw.Ë÷»Ë™-뼂5 y_í‹«ÅÇþ%bmÅ"U•Ûbý¼foü¾i#Ø‘0M AýÅx#›ê9 ý2‚Ù*“}bez‹g˜Á„¾x‘‹d†ê‘Dë KLÝy M¼h˜«Vͳ/=U‘ ‡t1e€>¢þéú!û"èÉ5¼Vu羡ÿáźLH+Ì0×8ðoóÓ>Ø÷Âþ~dÓäbc©SìxPãr÷¡ÆÊLÙÄŠ °zÏÙ—šMù±.r…†?­Þ´MYÑ-‚,`0DcWK±T ^}¹eÈÈgC}³éÝdhúzznHEÑ"uk0‹©Œ¹®W¦4jÐùÊÄ5.W«r7§`ª!‚p¬5,0¦1e»ì¡–>®®ï¸)&¦4±HJ.2f/,›ˆÎ‚;$­ûʘŒbÅØ~¹D-n²Ïùø]LxÍt)iÌœõ¦¨~¾úæøtCÙ"¾c2±‹"bpÇÃŒ9^¯º"I8ÄaE@uaDÛ•'F‡Ñˆ_ñèÞíðJŽóxÀa¨ÀË{\ǘaj«‘5{n&’$ÌDb«‹ÂÛ´G„£¡?Hªñ[Ü+ö·c¹ºÊ`¾*ÐÔD\¹=îjvúCÓˆ(êï""Âg†ñ³?®RÞRŽ)ê€Öi;ù¨hRn:è.P$4ÖL§„ÃÉ;b8…F ŠQhÀpŠ0œ†“0¸†OŸ³ï’‡³w‡zÑ6i}1×eàs­ug.“´u$ ´Ï-náDg¯`µÃLjH<•õtmŒŸ è虜\#‹nšÉ7‡²GàwXxûáõbØ€³&µÐ/Ç+½mœ"¨åèó,C»MI ßeW8.³+ŒÛì¦Ý‹qé“ VÛ!±Å:$rBLâXÚ™»v×£ëçWéƒÍ¾ºmÓCx´ÒÐWyà…ß;‘A¹œ¿ÅCìé®™­µëaù:/M$Ž‚CxäŠó'œà1äýc€„™@"ßk[ ÏuHco ܽ·\â-‚Ù˜ áD©êBrš@ô’ˆù) Sɽ÷2›]Ñô°H $²Æ0X0”UÔî§ÓCb½gpâž÷ñ)ÓMÎàažn’­&Qà)“H°ÉØ0DcNÈ+A1ÁD£ØЉ‘ž9ƒ•ÓT{bàœ&´xQ'6ykùuUþ~dMWcἩ¾ØFTÛ–¬³-ºí²çmå5óaÁo«¶ŽmÂ3ür ‰æÒÄè áñ¯|µ*Øp!Œ•ÂI±zÌ$F†ÐÕÄ‹ï „û ÛÙ•4Ì\Ê\MdÞO`â#¯=)Žƒ ……dñÁ¦¬ü O2¯oXKÙ–2p6cÊm'ŽxÌ–—nS%¢à+Žhç-’˜ß¥Ø”(B°Ô@ú8Voqriî¯ DÏݘùçÞó~8b…ÄTäg"_g³ZjÇ–1~þ"Š rÍÒ4,wñ³¦iöó’ú¹™ëßu ÑY3Ãöå:ÖdøDÉ\À1?5šŸ›™î$Š|C)ÇPV2ÆÉ͆M’‘“Û~¢ìQê hÐp¢3eá`&jOU’Î&»˜µ2:1Ð3‘«ÓÓ¾÷7ž­:ñ\ý]N·£îèD‘‹ôæñ°ˆFx²š2xÍ=.œ®C‚8P„;–¢ªÙÝ'ÈÇG¤©‘¤xœà$ô°^žêK8º7Ö…•Ì\´ò)㨠ëÈ|xßﯳïŸÿ9ѩ㦄µkBXÓÁ¼[•CW;é“Á;†=5ÙûÏÔŒ°ŽšÖŽÙ`MÎuðÇü Á©¦'õÌ) Æo"žµÊk” $‰ŒÉÖQf~éÈyˆ /ÞSUOÙµ!ñ»Ö–½k³]Õ°·.{÷ñâ ͺ©2y›¶A‰h®æÝs‰Pkt4F²-j²BM‘•/ò¶ HÖ “\HÄC£Í(q(®n‘Ä`Û§›þÌ–ï¨÷ñ¸F€ˆ‰›ÈŒ9(ZÖ˜ˆ[¾sm=¨ú)š 陨oúÉRËëm<¯·>^o¼ÞÎäUÖù.ôº`”ÆF¤[ÁÄX3ŠE»é3’Rµ õbD#ÑIînìÅXÍnç¿ÖÌFiTD:²‹Ljj¯\qç£ÜDö ' =/ryêŽg¥Ô‹Xé ‘ÒAž¬áqDê´ñ‰ -«5Äň*Ñ”¿o[VCpãxa¢‹@h1C&ÎåÓHóŸºmHl·µ¥v[$ôë‡h™ÃzóÖ'QË—ò E4çx8³tÊ«cÁO.õ“o5Ç›AAÄ=ŲÊ«Mî#@%”Å)½IÊ—íNälõŸWÿÑ,7uŽEO•t= ­àʤ®X7ÜjùÁÏ<êúºË§lÄLDöËý¼pÑÐ)D ê~¸Fu?ˆa]ÄÕ+ï ,§ÈÞÿó‹E&4¸ûáÝý ·¤$u+éýˆxý G^?BC¯Hc´þkï@‰nÕu÷òe€… U=Â?­o¨>ª9´š[.0ôö¼ $Š$UóÒ7¢ì×Í©`£z&a×å…jDT Ù$ħA“^V^ÙeeH.…[éøÁ#>‰ƒôlJÝ÷úcÛö¶<Öòå³ qZŒ=œÿ‚m —Œ¢EªB‘Ô[O &B"92‹7y¾<Ë–©hž ®O²ŽP"yš.kÅæS¹aöSG–x0Nˆ0 M¶íʆowÁBŸZKè_Mî0ï) …Ýù*@[ƒL¼!QN »S¸T&I‡]·]qø£ãKéV¶è„7å Î­é¼zÉЊ¬ ks˜Öd¯*èy?°—¡”¡Í!c/M/GÁ!\ˆÝlÆ;^Õ×_t :RøtÕlÄi÷¨‚¶}l(9 ¾ã5¶ð‘þ6^>ÏFwn%¶OÍê_Ké$DœkdQ6Šý¸W1¤ùáXÞߊžmŒCA²lÛ¦©~‰#‰ÁI™m’,Ø À§Ä[˜>0HöE”GÄãH¦pôS¼<ðkŸlq´ã]öøÝý êYÞÅ«ÈRÄNeGêT¶.B'taQ?z#ÃUJ‘M­eUR¶§ŸÃ\ $"£òÌúco‡º[‡UáhžuBî‹V±Ø#ˆÊ@€q\1Ø¢«‚ †+sd«¨bjû<ÄgŸÛ$ö9’ ÆúTîö¯¯NlÀœ¯Ê ¾Ù‹!—–Ó‰]+ŸøtÆC]xt«uŒ!jV#©çW‡«YÒ©Ì'vµUo¿ÙL#DBiÒy2ûþ &ó!Û8ŒmŽ=w©½ªûN~Àl†mÀµB„Jc$ÒÕ'ô Þܨ˜µê‘ ˜)¹X3snÁc=tÁ>“†ë\0 ³µÍ\5Ýž PY.v§hb'§Zò4DÓ’7u+zS÷nÙ9TE,ý¼°u÷÷5êIeÍh‚ŒXæÄH\!7›“DÇ F}…žæ«Àˆ¯öÌÏ <<{ùý@Ç+EÂLKöm~ˆ%¦a ^+‚´ÂFÆô’ ïš>Ütpè+¸D+š‚SL~^Üñ¾ .ãši©SSF75 Kðƒ\Nîû6œ£é¸lõ”ocILP‚ËkGú×ä©X¡^s°Çõ]OyÝD|U(4Éò9Éß®>óÐ ‡òÖ(VѲ‹•Gp¼½àOÙšZNÃf•Þ Œ4Dš.ýƒLújbقܦ™Æ‘ÈQ¤ž‡–oDÖÔ ÆŒÞ?>£ÊSÙûå¾8ÂÎŽ÷F¤p)ƒ¡£ÝE¦lÎCÕR]ˆèü/ Þ#ðßpnÑ£Žú$¤(ƒË¸TQý£q`œå‡|»¡ÍUá÷cÞÁ_ušV1—"ÐÐE˸Tu( $MŒB.=F÷"WŒ€™Zh~Èb+ F W!C fh!õ.¾/wu>°ÌK(ŽʸÕѰÚLý’¦ÏäQz¦.°I¨ŠVÄ­ ß|ÀŠP~g“—`ŠD‚Z7Ay^´Át,'éu”uk…Ðõ:ÎàÌwü8ì‹z@¢#ts–2´²qfg…Ù×ã,¬_ï‹Ã eP9¯:éWhÁ1—RIÔõ PA¿Rj6;¬•ÍÓ*¼9D1kÛ/A¦4¥‘ÎØûš;êi›ª]ÂØ¥Íˆ*A.9ë“;Ó"‹ŸSÜd«çìæî![UÍúq¾y¹ØvɈ/Å8žØ;8¾{:ôXoÆ{.³mûšñ~-kh¾Y@@ÓEšm3ˆlã P 7]ÍèO2§¨jÞ›BŒ!¸3j ÎŽê´ ¬9üLmê^LÞ•‡œü+B1oICGkÖÍç…ò¼ùýÙJÅÏL]e\ŠÐ3SK…sg¨cðF9ð]®«²¨cFÞþ’X-ÖPnŒ©á%îO½~M±çh˜¦ ÕþIúA¸.åɽÓùŸ¶v!zv¼la¡…d½¨Ö±Û±qOˆÕ™Úªià¾n(}qÏÑ6IOq†gß<Ù:éû‰çê×.g~IÈ’.ÝÖ5¸}x}É/J{È׫²ÞÀZü&\Ly§–v «?‚­û«ëLâÎäÓÂC1þãKǨ:Ý@)ª†¢âL¼¼Sýöánñ„³-<Éã/âÔu:Õc|9™–×_†z:óâÔñr¼O¿,‹}üž‡¿¤SKÕ_fâç%öE+Lz¦zÕ¼8k8Yš¢›]Ì¡˜4´’;ªZ\8xM˜rÕ°Ïd‘³kYBtÿôq¨£¬KQmhËc–ðÀàl”Í+”x]Ö± ÎP5IÓ€¢?_^QNm÷ì¥7gi‡º6žz=GÔø1¸´’g阨¢¡¡¥Ü%ëpÆ›é*TÏ3Cœt¼ä*†)ú-Ó”tVá%Õ¢~Nª<£ŒC…¢>ílÔÅ«ì²Züòsº¿ü£Å/?S Nhñ󥵘¡D”” —¥žÎ<†8Õ€o£ØÃq1]ü¬CrMµY|™Õy%Ií—»öss<# £YÊVWD&=ïxƒ.öÇóœ'UЭÚG¬Š•imË.碯!ÅjñIŽ!9k+Öª âq eĪé:OUÆ(çQF! eD,ìë«Ë)1£JÌ‚A5ìJz\ª:fì–ÚÅJg¿sy'Ò²’þù¤w]z{×˸ésT\«¿ÐœQMnþz¯:±/ÁeÕ™¡M”2”.’é*Äh@µ­‹+ðTV›uÞm–Ûß7õŒÕ"Oy‡rT MUlëÍ÷›/÷Ùo›}øÇÍçK9`ÉËIîâQ ›KK*¸­êy•<´r‰"°áCÌégg!C; fžjTɾ=\fY®ó6a`IÀ± :À|×®¯Î]jàžØh‚,9ÿà\Ï›€@xÕèWßDÇl«ÿZŒKÂ*ÔÓ|7ź‰;Ðj£mÆ2Ÿ ¬ræ3/x$Q¶yÊΦ)3ÆëÙÏàVÊ€Ú\‰RÀ´;#jÔ(3áж« MØuH[1?3šˆ‰ÕbmÊd¨ÿ2ò“l4›Çbü#~~›<ý?í¶Ñ&ã1ÝÅ9ºÀ±  Xu£ä_²_{~a?!Ùœd-êÑ?á\è-/¼á¹òB¸| ÿð“ {%Ø'Nõ†ç¶8×DñKuŽ"#¡%:õrÑÆ9CfzHªe»„­€†1jªˆçž£¤ðßìÅ­žÿ(ºŸÒÚª¯¬­‰®µVËÙ^IÔåôJk`ÞÂAÍôF÷Q &°VgŽÞ-‘oϨ¶·IÕöößZmoÏ©¶·iÕööß_mgÔZR¥ý[ël 76vå¦8G;ú!5RµK¦¡/㟬øÖõhÕõF<êþ'7ãsôMSóßöŠîŽ|•)¹å:éHúͼ®šãæ2ŠœñNúàU-ímü3”Ñ.½OˆS—|wZcªªQg¯J‡}Ù‹™ÞE,1Û zÓ‡´•vl®p‘êÝKзUþ©]ÂVCÃü!fšå¿ â&Z˜*}üõö Åœ]“^IªŒ­BY‹ÈÍVÇ3ü¨4)r™-­­ùÊ:õÁhý#€^"©ßùÓ:)v–f‘*9ç§—ª¤úQˆÄe¥I-ÍYÐÖņZm êöÖó+F˜V;î’~µœõtYÅÒ” )@wÍ»¢. što.õÏ=ûg“¸r@—"TÀ8«]¡+àÕ‘ÿ (“Xt1:¡>lÒKTÓeôz;«’ÞFVÒÛo%½WIoc+éíÿ¥JúyV%ýYI?ÿ{+éçy•ôsl%ýü©’fÕQdý{khæÜÐ_Ú­[ô¬ðÏÖvV»ŒŸº `…ÿ-už¢±úý›_¿a—ˆ,ŸŠr·"U¢ÊØ !”1dy™Ì»À é©X ]Qoú´—ÎQÌVÆZ}ÉoÅê\D‰´&æ*çSÃ9þ>W‘®€h¹Ëõ>ïbÚÇ´u€ìØEhî ä¿_ïA¢¥ÄÕvóK¼šäù”ü»7gÓLb ip<ŸÞ®M ·k½ôv¦þ»çÑ£Ž%TµU†$;¡üÁÜ.C¹­š§*èåüjp¤+fÛkžy!Ufh£€Á]d_ª"š¾Ý&4!N²æªá|Y<|8ŸjÓQƒçùã#Å‘H¢ž(qêsqæ¹N$(•{˜:uéÂÌ»b[þH{Ø…h&ðŽg_bÒ• œ®ô~p:ë`ä×Û3?8 êI“Þ¦‘Ü™‹ JÄÀÆWëÖ:ž&ÍT[9ªmó¸äsé÷m~H¾EÓY+bÃÌ­Ù¸tÁ@çž^‚ÃõéJ¸ JX°1"¾ûs.÷§rXïõëè¢àŠz8ÀÔm† ŽU.5g¾ ¶àªÚ¤œ‹z@HY½ˆGå»»›³ÏÒ9„'œd‰{B”ÊŽó.–ίäC¾÷Œž¥·ë)!Ý­ræ½hÚp½Ã…o'¥¸À¡Ê™gâaè…< @žʆ}>p7,YnWçþrÓ­ê—² +ÿÔtã g5’ÀÃBvr7,&aêbƒ³Û ßvƒ%§„žÐQÆÐÐDÑkYc/‹ür0ßÊZ\Ü;ÿê%ž• ”§õ€© Oƒ Î%Û–KxL_\‚¦,1æ°çáöœÕ~‡ñzêxöβ¤6Úqàp‘Þì× Í…Hš̼ðÓõ¹ÇΕŒ¨˜Û˜ækEцû Ï¢?v$ð$Ir”(óaèÊÕqþ½®RÆt?^4q³É}ºSϸ2Q¥ŸÉ»‡˜ M]ë¸Ëw<ÅHþh¾r"F,C“-n>Cž@:é&|dÉ4IúsÉ}ì/ó>°n°¸yýÛÕçì{ô¡èªçÑ }9Óü³˜oâb Y`¬ï”m`‹/çEœáîòMyìcy"4ATä›KbW7·¿.”g|)ç/Dr)C¾Î×}[Åó¶JÜ'ŒÑïêúêzñÿ\FSS¦Ìý 8¦®Ì¨¹={.jkQ¬¡£œ¸®Þ[ÐP„*e¦„Kl¢O²xʺ*ㆾr.m4$5ù¼9rí¾+òêp¶RlüÉ:0R›2¤ˆ)ïR’(a-Ù2\&pç¿¥dÎÓ-R£?]vŸ÷Åͬ*Ga—V&Üì+>+GÊ#ý”?_J»:ÅhòoâÿÓ9µóSZíüä­ü84Ð(‡#ÇT—Òn†N1šü™üµ¸È}$¢ˆÍ_Q£A‡óH?«%8…EÍO…hâŒS?çñ}Ê· #jùãmLúÕØcŒ¦K|ÞÙt i‡$öDSb´ ˜*@¼êƒZ=?s¼%…%´oº©‚£u[:œ9kåm15’¥³¡‰sE²œnýº˜:Ñ‹KŽ".UÈ%¦‰ÿe¶!'q o‡£ŒKúy59÷å(Vr'v/`..’ŽÓÄWÔRˆÛ+PÉ£“Áš‚Ø0‚z¥#øÏ!ŘhLr·~•×p¯ñD\;çF÷I¤ª!E«˜K¥ HM£>ò PPœ>QW?ù»Íx×HZ%EÄ8м7Ý,§|3£\†Â¥#tx+ÇZEq(%Šù4‚ø”Ç®R-9_ïSÑ¥<Ç¥¥§$0óׯwê­âб‹ŽÖQøå õŒGÄi¦ ù•BÇìÀ2U¯óÕš£UœR]RX{ùÙ±¹´ùª¬Ê›­æ`0vº_†ã™ÏªF!—M,ª¿Ò6ÌËS‘©²>ë& ?"Ô,”ûÛ§Æv}‘wëý²¨wì{˜Ä‘*ébаÄpil«ËÌÇzzR›¥\lGœÁT{«ÎñË}b3À ÎÍñ 6”rÂÍZÀl^j NPHè/ƒ¥Ã ëý$ߦ¤”½Ètœ~)]@ÔÂ*keÌFüí>{ñk]nK6*þ&Žaßn/Ïôn¥¸œòv¦æSÉ°Æ k®ÂÉíÍ+áÿôД5{g_|¿zè_^P½§rÓŸYÃÄ# ë…\/3Ó¸;öР!"µð®_/~»½Y¼<{ŠJæÖ÷T2BýÁ¬ïß”Ößxìmñ"«Zÿí«õWÂå±ì_É —l4ÒeðÏÐd+äy®¤K¿3[ÊЦ7”ÁµcúÛ7mÃtŒâª¥qsmŠ-|µa¯»1âÂqsñIõX´Êp0HnP]ðhdGœ‡ì¨Cò»g!Gº.¿+Šìk^ïØÅQо~}‰(lóõÐH蘉O•D˜Ù×C&R¶]sP[5Êñ¶;Ö5|lF™AiØ,чÉGÍ•Í\í~ó¼6ûßuÙ¯›ì÷›‘3 u³¯ïßÀäqÓ<ÕU“o)ìDår‚7ò>“¾«`M¹Oß¾=¼X¼´¹ÛXfiðyœÕ¯­Î‰u ŒÊºàâ%?Œš˜ÈtÎâVüî¹Üöq—•¸,BFÒTû £ð]Î’Ã-œ€ ñz†NÃzÙÎóÄ… ®ãÆï»õ²šŽ‘óÉ5ARê˜Ìe~÷tùƒl¼òFŒ7«ãú±£òM³c#u!ÊktÀOS\Âà%dÁ¥)C¼ð0ˆ=(è‚7¼è›c·.ä]6©›Ï ƒÐM]éh $»¨@^H~±,¼§1BIæišXzS°Éqó¬"±”¯ÅŽu*ì÷ûàš&Wˆ="Qvb"ÁÒ8 ÖVåEöñú½|T-RཀྵÙ6 ‚ÏU’éÀk Lç³²‘FQ¸LáøbÈush ø^ÌŽYÊÇëĸÊWEÕh"ÐÄM$kµôŠu_³¶˜Éî8Ë]…d®ly+Mù7Mô™¯Y£ tŽº9”¡0!&™,- `.?uÑkB|äwݽ¸¿ýøSð‹Ç¢ŠäÈS6B) «X{c aĤb-£v•Uz>²·—ùMVHp» Èm7–Øvc½Z-ëóËžoºðË^èŠìë¼í÷MHU6 VF÷¢ôVÙb ´ÔWâÔTǃAfÈC­jBLX—Îúª©?ÍXê 6š7|,âªg6 š¦úÉ+×)Ñ*™K¿)‡ìãç/÷ïÇ.¥éÂÚå*gß¾z³”›A^©.´oå;ºø<{'pÙÂØ‚âÏ(w¿‹îy x„ iüH˜6(QcoÞ6²óóKdâ„>Çy˜ß›L3’]„ £Üú ¯$F~.„alñk¤¬ŽeµY]¹ÛÅ \ÃÅ&J. ÇDb™Ì/ÌŒ2EF #–rhg/O…r[êJÀ¼äÒhòqP½›˜/$ÙÉSÔfGÝV“}é;Žá=‹qW ñôÔGeŽ]©²n²´,õ‘r=qëH¾nëú(Š lj°‰MÏ·“aÜ„¨øHPK—Üñêêc…l.æ6Êkq…zH"µ)ÂH~M÷”ó &Åå±Iöò”%RhõFø×cUDqŸÇ:’/eØ0E¹ë:çsë)j“¥ÀnÛŠußçÏxÞ,Æq\ »FÓ;§ñF<ÂI=±) }â[˼ví-«Š³6"Øï‹¼öËõ¾X§}„œmÖ6ÔmöO{ Ð0ßLc8ö Ò†ö [zKdi¼Çª¬@º sÉGÓ¦ É´?ÏÚ}ª¹ûd{÷3Ô˜­@‘Žb5è1Ûˆ M¦&GÙÍÏgÈ»]1ˆ%q`?Å~þÒ6SÞçt`Yåà‘*Ì%M›ôÏHbÚŸgí>ÕÜ}ª½û$5f+OÝkó0Û¶iª9Ö¶Ê9¹NÈ}2È5e?§C”xß<·ÅÒ…D xÈšðeÕþôÈ™Äc); ÃrXŸÑ Ó…Œ xÈÈßÖmý™Äc);ÃÂcÉxpsÌì*îdm™ú{[øX5f+OÝiòÛc!ÒÓÖÌ©26G„rÛô×®ºÏ[/·4V>„¡<ÀÂ"ú]’…ÅlR&Ðm'Vß80Ä3™a˜a3zÈËâ°TÇ>~‚î+¥#qn›] X€b*¹ -Â\~&u³)R@þr3éYGd@b¬a?'c;jQ‘"Ä/)WÅðãd1vóšhÑ0·Å䡜ÿAýÙ…x¶òQQG\ÔiÀØã 1e1I'Ú· +Š|å%†w®ë¡óˆGR&×h},ÓÜ¢B~PnÇ'úhØäµ´< „SDŒß…œiyA6Ÿ&,bRæ‡e×DºÂ‘à‰Îö­Õæ FŠw &×e Yʵ:_¯›cä–]¨fC"=K`~%ÐA¾þ ÝáR~®cÐn¼*†(þ½x²LgÁ.È Ñj«þ¸‚å¾~Ý•-_SÙ¡rE'Ò»Þ9bƒlÓyF0¤=½¤†¦-×)¶³ X”4ˆg† 7£.>ÔdÍÜ›²Oó½ò™ˆP D¿+ãI¤ütb½PÔ[¹µ]"­.«óó Ýv{°(ÒóèF%,Jqe»¢m–🮠Œ[ —œ8z°¾Á¡BF0žÃ5Š%9¤‰µ®·ã‡hWy÷êz iÔH˜ÿÔ0àü©…H9Ž ;y$õqÞB6§³ú9ë!‰ÔB¤b{»þ÷*±5¹ h\,Hj+Ò@ÇG$ºå°2i­ÆUó8¯µèH ã#’ÒBøX±Æ°ÀXþ”íY¹í­±`¤x—`j‰Ö’%ã,É3Áâ~X1.D ¢¬ÆÊ‡¦ÎÁrœØx-P>æITýÜœdHù"äT¤|¶å‹lBþ—•5ÒP»Qt’­g$Ä^ÈÒÞ|ŠÛcpí-Ø{ ´ø_ÎØbÓˆ×ÕŽòµ,Ná®ì1“èßèS,Vçž5HlL}‘´Ž+†´‰EP¢ÈèaV@æMQì'ÅéÈ®Ê~Ïí±ª²ƒbA/Mbêãéc†1ŠšLupSýiÿF}j¸ü…(4(|÷yN¹RhqЂf_«gHÓŽ‹²ÖéêF"•˜ÁriûÈ:‚<ÓSy}ç< Ýÿ !¼ {…OˆI(KsÇ6„¯ø¯xHÎo`VùuÑïº9C$q¹WÙS—·-«Tö`x¬Ë À#= Ú{^2n¤Ož ’2Çd.÷k‘oxãyêJ¸·¬pÜI$Ó/Ì"ÌY´D†j¶Ã\jÿ‚Yö¥°,—«ªÍQMX{ö>nxáÐr;òÀ¹(¦H÷èñA@9|b¯ü8GÒï¾OÚ7Íc¦£ÃžHH¡*˜R˾?a©: Iå"ÔvY<)‘<Õem‡™±}•yÕ=XÙqq£m ˆ„Ê,}s(:öõÈžXž’ÿU,áOÅ Œþd¹áˆp:ÿ€KYYCì]ÅUä”Äd'±hJn2DuPR«<þm#±£lœk6ô»œßÂÄÇVÚËgR T³aˆ€uíÍ‘aú7þ‰ä\P„´Ä‡o pÃì–Þ¤ñ#ºf í“¥F¬×Q@$™X•sY[.ÓY4 ò²Dà ‘ƒF­ UnŸù§MÐPùʱ‰Ð<ÏB!æ,Ïe˜öi¢¥ìD†»!X±²í‰®è}ú¢Ú¾˜ (ƒ2‘ùp´¹µ…ß.6 ó 1ÂáÎÞÜðOÉý°@ÄŽŒ €€˜„ÈB¡Èù°°cSvù–a–›¼ß¯ÿ…b.¬”næ""33)C.·ñc(`“ƒÊ¦I¨\›E[weÁ±t‘EI9}v*s…~½®Jôñ+ï7 C”d‘¨Ï‘®ê¾„X‡òÂz˜m`fÄ_CbHœ%K´q•tg|]:–èðɬʙêïYYÏ«|JbE+éÅ[@Ñ  œÐg&?3F#†þ¢»¶<Áuû÷Cû» Q4D¢>mSiÓÃÛ²j–«Æ{©„’Æd.âüáÉ!w[¬aVÀšö†Í‡=›PíöÙ§‡¬¼û’ñ¸7¬¿5É{x ¥ÓqôèJv^ûÄ7õzëí-B‰åiÆui¦i žDmÞ÷O¾5 "…ÊD.U~%ø–ÜõjàŽöžY>?2#Ôƒœ™MrŸÖc\Sëó#¥‘’Î3¶Û?s6;“Îï×Hx¨ƒ.¬n<æbÇ[¢šm¶¸ÿÌwzá¦&AGŒ*ñ7ü¬a{2ØòH `„³äÖÜÀ>p» ÜÆ“¥\ ×D`ñ)(éú«n‹í‚5øH¾¿{'vá¹->tæ; -£˜˜‰È´œ"™\ý¶Èn¯îÍõÀªóCÁÈ Nð$gë`Õvº«ˆ1áý#ÎËoó¥¸i.ª!8à0yD@ƒ¸ÿp•½¸?VCùúË…3Ñ«úrºØ°ØÁÕ@ãõ—ó3÷żtÀ-àiý+Y9¯28H"šÀƒx—§‘¢j‹FOæ1òå€1ôåÌ$"3â¸ðÒQ’­¢· õ’èFspà Q‡<‡†Ü†ô-ÇFÃ!>B0%’z=m r⛽)¢ØÄÄ<§û ì‰Ë¸dXåˆv|Ê|ÌrÖýÂGo[5O^Y°’jf‹Ù$1=ÇÄRÌ÷nÁ•¦"¬ŸhdÛxÃ"~CóXÔZ:fbÃSGŸñ¼ ñâW¬RY¯ÇÞ- 'iè9ØÙƒ'ñ Þí»ûlÁÆ–Cw<𛨫¢ƒ~ãC~(«çñÖ21íMv0sÓPˆ¤«‰h/îä„›v7$³ÖAxÇ\€'¸Gõ‘lu¬ÅYäŽSh®†H:Û ã×6 ‘Yb½,|{ á¬NMÈ‘’"n2 Ñ“+5,¹…ýexFq$ùiÜô¢¹œÖL§ü§å–¦Ù4ÆGŒDJv8}iEV&³,Á¡—Ó†a‘ãë)å /CèC¥äIâ¦Ë×pÌ<Û|2) ”в¸ÜêáA |µs;àF¤î—Ìú=w«»¾ý°x•}þ Ýk,žÍF}Û²ß/å¶U&×ÙÔÇ~9¯¿l_¿ƒôé²sµƒVÞ|½ºÎ¾¼¿gßfþ ¸µºwø7zà4ÝÑçQ±U{jn/ø ®7EUÅÐ ŽgœhŠä4z¹G5<¦ ßq.¥s&qb³õ|à“v{à¿é…x¡ 3Á'ˆ—{±¸~ÐÚî.¢þwd¥ïìšî%Hìx>^&ön×u([¼»Ö)ërXjCi?z¤eæã$È@#vñÊÓ¬ÐXü]†Hù2Q·Š¸ýöþ:c}Ȇ÷9c+c­ÐºV¾<ìòw²¨”\HÒ¥.lxúeaî©–¼¥,Û*^ùÝïh¤‡òÄ:µhƒàj"RM™¡y…B²ÆÙÐ(‡§”5÷Ι¦¼VÇÃu’È3°HHÊ*6ËŸdÕëê¸ñê…R‚H“ëûâ·P‚_¤ì”2¡ Cò&#Þ5Ò½øQ¬!„²0§%0hC‡ENV¼y®Ù fWÕóhŸIOy#ZƒaÉ1) þ4à’"ðõ×WÙFã»ge-)il¶e]. Þ×.×UéßvðÀ;€*åéÖî…k%md×w/Ã<¯øÁì_&ñ1äÏ]5?Ìc);¹†I¾`³íÃL¶=ÅbÛûðÃd/ƒÐÈÕB!ã¸ÕàÁÏI "Ÿø\ÓG!4³Pˆ‚ð0NÍ\N1 N4-ª }~ã 0<Åτ𯪴۾ïÄWøü¢ïi½­Ž?6«˜CÇ.ìHç\XæÍ»qÌÓÛ ÄMÐâu !›giÇ@›‹³¡ìÚ[|Ç9Á˜)¼,(c2Q¤aF±®¯Z$pspo¬*Jo}”ÞjÝn‚¹Êš}B £4F"]'IKëŠh³òìH<£jêO4ˆÆ…%"«ÜÝ<¯O<‡f··ü „Ò˜ˆtd™ÄøäÖCHõ 1ÉcihtݰÞôó·ǹt(Ò†µk)ÕZ¥×·¦FlÚ°Þç+~Ö^Ú9‚w q¦†Ctå:x‘”:1Ó3‘SOgÓŠŒg%4D1 qÒAá”g¬¨ÊÔ|ºre“¡H„FÑ20ÇÎ ^½•ÜQ @Tb$M±@$NU^Hh‰$ê$¾ß]}sÉ€éOÝ6$oDh⺭½†Í¿küåßfß¿~`âøD“‡D YÿG5º2a#£1#a„õϯ.&¡a ó‡Z¯ÿùÕ 5Þ²p:sÆ\Á'<ð2a˜{ðÅê"<þúÑÅŒÀ~tôìG7kFš"rA u:)1f ÏkÌõ!µp:ýcŠ7„÷!wôfï¶ì[\é_\&€åB%)bœNQæàw¬‡»0ᯬ?®^Kv*d‰ñŠ9˜Å|€L˜ÎkÖGÈÉ&ü% Éü¯ÑHgbÓ‚Ákïû†!’‰LÔy¨–ú}›#¥Û<¢o1AJTNô+E§û¡+ŠÛ‡+£1/ÌÃÁðŒMÝËhô~ &nb1æèDƒ›Ï‹LäZb·Ø($r¼›€7`qA¿g3‰²üž• º; ûU¾Ää'`“(•AIûôîê:ëôû¼D`w¢¥<ÞÚÜò§QR Ýc;‡E9m™¯mC†6.1d’eúÀ*1x³’Uüu¿ ŒšÄ¨–$³°°ãj‡DiM¤Rbî`…N’‡ ç™v(w8o:6ú4^þÈä6A":J§ÂÓIY–`QcÚµd;[‘N€x-!;âµ4`X¼ëµä¢­×2ôÃI’ù SRŒ½†<ål„¡c&<•Â3”Ía™o6M0h”#“Ñøî!ƒ¤¢—¡Ù¼ -p-š*ïJöЪ:šÞöbŸÊæm+ h2ƒ,šLWZx¡d„Æ(Zå6H¨ÜTÊ­AB[`K‘eÃ,sL•3Ç Q„tL2ãü1•H¹ Ä·QŠÊ˜nŸ\h!¦(_ñaK~¢œ[‹õ²q {N½mÊ&†ˆ ¹hY˜ã°+kB?S_×ÿùïÿÓkm[cu(CDMŒâ"SµR$6Ìc=ûÁó­1>”l›§@çh€4©<^i¢d‰D¡ pRÓ ³×Tê|G§\ùàní8~…_¯­hAe×ÔÜ=9bE„†*Á8s\É»U9ty÷ŒVHÞÿ:fÖì–û <­šœžš½H‹•9¡—DLnO^nÁ÷̼ë&悉Im¢Ô7Ë‚eæÞ¨~6J’™Ò¥#¯ø­…Â…æ³ø"¼7G©ÿÊW+陼B–Hr4R™ÉG)ìu㑺¦9hOy褫‰Qreª80#„Çâyß%&X¸X¾‘¼ ò× ñóŒlF¼Xçð€þ%¦£òC” œFk” …ñÐbUdC4Ê:ûÛߙ𞨬šÞ×õ|)R¸H’3oÛJž"åg“þö®ÑúóõcY÷Ë5áhß.¬læŽ.Ѻ Ãß*c(šDœx‡`½+ø—OR0  Äò´0x8RœÒQ,Ù"Æx„lIJE–|­¹om/¢Ç5§çLfÊ“‚Ê¥y1ÿÊÎ7½Ô²¥l–À%®µ4ò+±‡¹ã kÖ·_¯aÇ:Æ„€IáZFpÇâoǺ„àÛûõ3±y"þ2R8LÜ71§éXlßC†¹ø¿„pHÂøê V`O`¡t2s6 F6ðƒMÌÞÔY…÷p=¹VæÅÓ"]9œ`Y’;GÉ·)$ßúIºY4T 52ElÆñ/‘­¥I^WMþ>‰J#•l”'Þj¦îûPo¬;é5ªÜf—àL€Åc¢~ÒÎx,ûP´•ÿŽ2 ’¬Â$‘ÎT©ö¡ímhpÕî*R”³ 7±ruA…“´ôÔÌy†ºB“X} c6Žcýx½¾ÎG>-ÈÃf`Fs4D["‚g×)RY;£Y²ÌÉ õ»ÊŸÞ)%(„¼|Ù3›†/аLí雼]ÂdÛ'ÀÀH*•øÞÝ\=LSøì”WÇÂÉøx#X M*Ov‰…ÌÒ” ®m£4yZˆm˜Ç¨€µ|× dN²XÿZÔëîÙ»Ég£¤¬)]ß8^,îÞ|»[àÎãM W×÷ïGo§‰H¹‚k–y]7C(æ•,iYÙx+0Ó2˜A$\£÷2±wÛËc”`™êÚF7?sãÝôŒ·Ô42uq>¼óY ¤è¨dcËAlÅÁÀòšM@R³±¤4$Ai5^øq' ¡ ‡0—O<ý–:btÁ,5FöÚʦžÍv9Ý ÖÓr-˜}UÙóP·¢D<ÅsEÄy÷“ùRÒ´Úx¼‰V2Tº[ÜŽc`¥µ«ìF%!åãyšóáF¨ïãM¬ î/wŠàïMÌóP<ü_gw=¹ÜÀJâêÇûp+ž+SÝ"j?5]œ ,…¨d§áUÙZ-°r¯’ÝRššßk)ÆBK9cºS›-ÁY+ªÖ-°ó™}Œ¿ñHT)üRŠ8:t”À—ÚÏ×n;ŒBà¥$ýÞD—8±íY9XzPÉN)bŸj9¹ÊÆHsR¿Š½/Í÷×%]Þ}*£Îƈ¦K¹ qˆ\Ev a£¤a¨#Ã(;Ÿ¯o‚ùòébOÌõð#¸A‡{Ìó-°ñ«JvJy*Võ´Ëû¡;®µPÏ^qîRBîoÅ bWiùne½iž¢”4 R”H´Ÿïw›°&FW‰]1ŒÓVëÜ Å&[=sÀôô†ïŒì¼‘ø-”4&£«m´ó¡éÒìäüÇ+Í)i*Yy±Cyö¿c}ô "–‘'ì_Öš7¯þä~I¡ß9h@–ïxé²Ëµü …×,\à‘ƒ‘Mø´ ¯Ö;€Êïµ{†žÉÆÅC–óã#H²Ü¦ÿª5”+qbcú~^î§‘#3=¹É,kÑ¿:>öê"T %%Néº49afoÞ‹»_ÿ¾xiíHW'oC<­ïd^àu÷ý^…ú7î-ªü1.+3ºe5ƵDç•Ìf±æ•’Õ5ÿ¦å¥ßq–ÂIzª¢^óO"Ï@óåúpèýÒf”$R…~lJÔ¨ïïA ?ãùãø7_¢g,f—Añ:H“Ï“}ÀÇ`iñÓâ—Åoh‹o"â¹Û¨Iš¯]“%“'I‡|ºBÄ€*Ñyyã}¾~€&É»Ös0—yj…GtóuVô%›CþXx÷X{,FÇì!ïØWZº§ß³´'Ô(_²o(ßAjôé%-ÍWB 1D¨8r˜±¶¤A¡üí?4ãéùhùèps¹Y„v¯I ÁÁ<˜­NÊj¯|Û5†‚5XŒ7}ÙDÆËå"ÿXC~j]s*7޾Å5©É\‚Ú˜å¥2ä»( i8ƒäø,ÃóýŠ:÷niÑH“Ï#˜ˆŒ‡€[ …3äÎJºˆ CËf#Ó^¡@Iƒ¤©Ô ø6ºè2†¢;øƒyX Q–LžäÝOiH´&}5—9lAøÏ$’@%XÏuÍS ¾Ü÷JåÈ»rîÞ`æe½‡â~›º_vEÀ£Á…•”Ì\yRú÷#Dù–I¬¶ï9ކp1xJûÊ$ÿð“¡yˆb>Î}/ó gØ0F¬iеûñ&“Ÿ¼ò%’FÜô|ÌL^ÑçaÂcõ¯‰s‚-Û¼?]n©«ãà­åexeþbÿè‹cä ‚¯£Iôq¢ƒ–œ`Û&Z¬%Û&2ÔRÀ&]þX.¹‹™—’Sd¦ ä¨5ù¬5¢3å7¢r´±Ç$!ÁE¸¬x ZÄ}”nòñ‹c ÑèaÇíù¹’EL¶$Ž‚nÊAѹÿg&AÙ²"âËÇçã²çäê„C„•/Û–]ñ4m zhxD#tZ÷_a™„‡kÈùà%Á:§·™ÂÆþ‘HøGð'áŠ#Ü|O{[¼©á¡‰ˆŸ:n`¨‹¢Ðt»¼.ÿ9!¸ÑˆŒž¯3ÒÓ£hõõ¡ ÓÑPˆ¤Ÿ'¾/7â'ÏÒuñO¬MTа‹Û›8ùqŒÜhÌÇÄHž/Š¡õTë}à>!Ss¡1UœÐ– QÔžûª‰èÄSâ9ˆŽH‘Ã$ýŠ›À1#…˜Ðüb‡Ü+oÈ AC®Ç(¤ÿç¿ÿw.ÜîØ`zzü#3…/HnSÎk™Ü¤*6|{ïJiRþU -_I=*Wf¹q}ÆIÌ[Ô˜¼ØHœ¸i÷ûà•6eKa,A¬nƒC]¿×vűáû|û– M˾dã%èÍ·I^ß,«|UxƒFJV©È¡zôô@pS2=Û n ã'÷ë}qÈÏF éé"}Îx )¡‡«­òº]í.NQ”0ˆK-΢¼¯7b´ÿQ,-¿xÿð± ß:É_MꂬÅ`¦*òí ¬Â^]4¸K­‡jt¨~¾B¡ÁVlᅬᩞÍQ踪‹YÊèŠp¨O HæŸF:ÀÔAïjŠ6z¶=¨WŸÒ^ŒÕ†M\ÙÐ>»Q„V@Z¼»Éx6_ŒM£›DÔOÑE®+7,åF.4¾xw“lÓäVl–qZÕÛv™Yg4Ýx–n&#ûcâsàFÓÖ1bhvùþõC’E@RWì`ýb]zC!Ç•tòÕ±nî™@e×·7_ÏÒ#¹Yz¥•¿ÁNÊÍÕk–.qü/Æy\¸V îæØ‚‹/néá, kß9•N)ÒGi2OHÞˆnì0ŽwÊ›à/¶¾ýøÇa ÒiGpEG,g2üÄc¿Ýv7mü üpiÎjÁ/¸DÜof·ˆ±;;E‰¼éÒnöÞØicÒ³"Ió6QTÈÍ[ÆÓ!€øO“¸hð¡‹—cñ"¾çUzïg—t³Õ°ÈSV&C’n^Yác»‘EÝäu°Î^¶塞J?a¢B–q¶¦*äsq…ppÞ]CSˆ_ûö! ¹åH•´‚"^CÝ.&Gò$ª P%_‘¢YÝ |škÆÊ0—'ÁÕX ¦^pµº¹Ž4ÄíØž›RjÌpBqIÅÝ€ï w€Ž|éèhÁK©9~ãl¤Ú겞z+$D° –Ôâädáï­µÕ® QÊ2š“ábÓß²iøºõ°‰·+KÚUV ËñÕ´b ‘×—¡Ýå󩫇ißO%<Íýt2Öa ¸ÏÆB>—V2Y}½ÝÔÓœ¿'˜ËãqòQÑŠ2@}ƒ°€eÎÛBYÎ ã;뛡„·4­ Éov…ã] îÑ$€(7±F™Z1Ií6ÏòÚ51Çz^{?‰µø¡ˆœ‹õ™)iœ–\€Uws!÷'.”_±«RFQ6!“kŸIDµºw[ÊÀsÕ¢®¡|®>}Xé;*ÎÎÃK­Nöu-í³2òh%}¼D«Ñ“t± ×î“J1 éhÁ…ò‹û¦ú[ßvo ˆ¶Þ.޳šeÔ>Rc€ˆÖ™^¨ív ¯l€ÌÔgCÂd:D0ff÷ ±3tÄÌŶо/ ô ˆo¦©Ýu•”νt Ä0èÊôw1í£ûJµyýúŽ£ —®å7Æižp`Í:&OfðÈ9hw(Q•#6f'õ™\)ŠˆËðÔnÔG./Ÿw¿JèÝožÏýf ¬æzœß€È÷þÞwphV}¸ºÕ!9&ú>pù+å³ø ]P´ ¨Í5â*öjïÍÓ¦ £"rا¥Å!¡Bt…"Ýu¾5Ž ò>í¾Bz;Œ%ua‘Â{$)‚ò$Þ+*‰áF˜Vv˜¤N‘</Ö¡DØ]¬Ü(Ýæ0H–ÃfuµúgÛ®4³Ÿ‚P«Q°ÏÊ ³êûüéC–É´™Ú"è3Q´£’µã 5™!ÂyÙþHïÑ¡ˆÕ¿÷k³û²):bç zÈî¨/>^WÏ9ubR1õ—Ög¤¤ÌLR?ÿrQ¬‡RíÇzˆ+?Ö̧#ÔB–˜êBµ•Ñ&ÉöØÏE3@‚ót‚DÍþ)úP8rÕñk{¿‹j×{ŠØ)2ˆôlKû´°½vT<­Ò=Ëâw?4™Èâ2J ¥$4CCùcˆ‘ržIÖ¾9Žf˜[æ’I²&¨¬y†ùÝZ˰ówkÝZò÷hU¾²=.¶%Ðq;7°Çe.£0{nà|•Þy‰Z£5]}„™"ˆµsÙ—:Ǿљéÿn¾Ýúþl†ó±¬œçc¬œçcß|¿6Á?#Ê¡>¦¡pšÂæ`YLŠÚûêFÃ"äÄ'‘ ÈœÎÁ‘3˜4¹•†…ä°S+ë0\¨GG c]ÅÛwrÑ `!ß!„¹\9Ï~#y*:Ϊ5™ž¬W=Õ=½¿7¼¿è4F~«ÐâOå:õs]Ô—9H_7ÊBåÅôPëÔlN#„`yhžU0‰¢¥T"ŸÇˆC†ü4 ®jwÇ[WXLca«X¬àò·Š3¼#p޼ kl zÌbJÐÕñDzk€ö9y´¿€3×k„ðdJÏ ÒÙÓö€Ý{rùÞ Ÿ%Â)·åfN¥o#;3y£¢P9r;Y7×·¸{ê¨Wt›KaÞÉP†EØ,>ûE¦ë#T†Ù¹hØcì“€©Žï×¼¦~(0BŒÁCÍÀ|2rÖ+ˆT_ׯyÀiSoë¡ðlÃ{dŒ˜yW•–e¶PDãy*b´OÉÈN7Ÿ~“ÖÀyCrÌq0Få!…À@Ke+ÕWÌêÄÔR r¢"oÑ΃RÖ¦=d†¢eôÊmZ¢xdÌ–Åéh•A ‚¦(«r> &œöi#–¦}§­äË£dNŸ‹ Ù~ºÃÒT—é ÌÓ· Šßâ„ùbü 2Á^¢*Dq‡AŒ¡ïåÌ™\,oŠ‹±^IŒ˜ @œ»«iyÆ_z Ìà¢ÁQ”VáIò®íÓ$h•$±5#¹à\Ü.דt5{#!x0ÔláàvÛ?vs{”ŽáxÇõÝæpJ1±bÅC$x†ÕÁná$º:pª|sõù«H,]×ò…&Ôù ¥Ô$S åãéjD&eè³T“ñãÁ#vé…¶ƒ°Šwöµ7<ãÉ ÄÌ‘]ePãÚ§rÌw Ë"Øv-9Êap–{€£jÂçjàðçb Ô² B'¶xa¾ø3Ù8Îú±œÐ)B?FýH›eŽLÛ=Ô»]އƒ"dºýøÁ˜â©ô°’ã1õŠ«…VŽØ©šÏïni帓’ŠÄ8: ½ _Æ ßíÒnãCá!Ó—¥’2z‡¼ÒÓ8hußši†^ºÞìë5FØRÝ%"ØžÅ%pÊõbÃ)ìņS¤ {,èÇ’ ½cG –SÆ/ö§[훼ãñ}ª^¡tœÞ(7Õ"©™¨êï]ºÙ_D(Úí]êáU¦Öó<¶kŸ!×hr‹†»¯ÛÌ·Pn —û{áRÛ 88rç>ìq=åqœagÊ›ö‘á"ˆ*ÆFZ8ËÙK,ò"X£Ü•2Þü½Þ ¼फhkññŒr’õµÞ¶½ àP†»&£ŒGZšDæØÑ_¬ôü¢ ¾0lòÿé ©ã®ˆÑq¡sܱ\´­§ôâð+HmbÕÓs·Ù}ןg¹'êÅtôæVçlH4X›¶Š|bˆAÎ*œqUcý\‰nfߢÓãKÊ_nØÊ½–êÕåõϯùB@žÒB,SòUÞwãHÓÓ± ”Sy\£.©úé41žNC„íäÝpö*\|¸Ð7Mô´mçt€Ö'¤¤iRs È2Ø>lÞ—Q2¸€Î¼g©Ài¸Ð·­r¨§é"-·×4CjYÓ?è‘ Œý »Qǰ¢Á~ƒ"P†ÌK½?ÔÓ>kDEûd<õjW«w‚>Ò³K éñPþa´È4²}:Œ‡ó(íu0»Øh1É?7ñ²[Ö10C%tiáØÛ"ëXÏ$- I©,?”b)m-4óå“eÈÕrºžå*y¢ —a™»ËÍàEÃ2üµYk{ž ß>=ҙ邒çâpž¬¼à×%\ƒÒwØ àoÈÄQÌEÁâ‘>1 +ö~ud¬Ø|YŸðe¬Áãp¤>}f0¸êgVN*Á'YEª5©/ z5ÍâíAœ"<ãë8g•¶îŸòÁ9œ!f%$”è=#‡Ž²ªÂ?ªÅä æô©ŽÔ!äŽ:Ü*ñ¬H6€q;0Bg¸«·ÛÎ@ó||¬KÈHcŒÀI”D¤9 csŸŒ#Íá.Rã!¥i¬!ÊÑoü°2Úe ‡ˆjÐ |dq@C€ˆƒJÒgYÑ9æËNa=”«UOW?4\ÐÑôVÏÂÝ5Yø÷ß®¾Ü|¨¼7¸Mmâ³ÇaSÀÌ¢\f"Ý Ë×k/8¸s²„Ë){?ÖY&'{7öhÜŠT¼«SeÓ6ï6pu?ãø5Ž6ê}¹ï†æ–rÃfÍjc‰§“·Êˆ¢:Äú"JÇ¿®IóŸóâp†Ï™xˆ:ûûæ »é°6f«%œ˜ >+ ¡¼ ݳÁkV^ÂotÖ(ÁlAóÔ<ÏÓ’$."µäM2XjômZÛ$¨E¥àÞþ1 à>? pÏ+ëmµ®u·†¦ÏgIeëË«-žÏ9íÊA¹ñ÷rK£ÝÌõ®Þ&7z<ŒRªS#qQ¡"'Å«c=Î_VÊ&‚ªìÅ òNNW“jCœVM$Þ¸ü©»ïׇþ©ºù$t_†³bÌ+þ)%@)+LÓÿðL6p± ƒ%\¨4Iæêæòú=ÏÖç¶yÌ1ñp„…–$Àj@žvXToK¶b`ÂçÉ|¼º­>‚KÜe…‡ge/(„FD˜äƒ‡[ìÛ96ÇuzPPD¿LOª–_ëSaé} ÕýTRòëßørwõ0…$,áA¥I*7—·ß¾FØäo*†0ÊÜ>Œ©×˜~ý·f3óúK¾S2ɯšóÍvSvBÂ(‡ÉNž\õ?zè)ð·œuú! à åm#Õ2 ÛE´ULã¹E€$,¬,Ébõõ;Ïb~*íª$aaeIƳø#sÉÃÍèkG©‘ã÷ÚÑqsHz"r¥ R¼м‹0 æm”Ò`ÓåDìÔiw}83RAšô~ÿxê:X¿š…Ä𙪛/+Qn…éƒ(³–Ô~ÜuÞZejüM¼¾`²Ú³sÔžNM¯Àž‚b îçFkí„}ZóÞWºgÖeòˆ¥öÑCr  k›©/؃õAJ™I¦[ÐSuÕN›¾ºY}1F|ÐàD?)–tpfpš‡Óì0È7 d„ Èê¯-ê°gnè°ùýÔ$c"úËS‘Ê_ñ—=0œMÓ¾Ì("«eôÊvõó”Õ„µŸ+”²Úd2êû®_b¤Ž‰Îü¥ò‰»D>‘Kãê}²‡'8µ?OCrÂピ“ìô¶'4á^ÝVMwnEÓðÜOr]¥÷¥r6nq¸"Á ÖfzS dÓÐl`O$VáÞóÊ©%XÅ){À“Í¡ìH8¦|¨Ø¡w+ž¡S¾¼úŒû¢-”B?¢€§ÚU(¯ËZñ²tèR0ý®ÆüÍÁEôÞT_áob€ Žôð1»á®¾Ï’ (JÓòÿôó­^^Ü×Çöðœjð€Ýœâ@kFM×´»ýº ‹½r@@¥v*àÿü¯ÿ=U>ó\B2É0 áâ5‚YäSlùÄÌ#ëqÝÎc=>ëeIûÌûO‘™ã;u$úrFx@sºjJˆ!²ù(Šṵ̂³üþûíM¥\ÎWb¬î¤Ýè÷ßosæ)ç®-¢bq>!qš„¬¤JmŸ-ŠÑ|¬^}¿ùôÚe“M?ñÓé'g>ý3Ä0w,­WuýÍS)ý…f•:0ªVù¥Q¦e’<M©nyÛ3HÕkQpmìÔâŠ| .…]›ív-ÓìT|’oc»×WuµÅx:HÓÑ&{<$„3ñ)¼úùÓ××pWïbm„D†±ÇâXëÜnÑ\.]GŒŠDðÜB0oš‹#83Wà³ù ÿTùñC¥qéï§1;ê ¡©Î§óqõõ6¼ã›jGíî8”Ï{X4!äÊjŸ~¾¾ÍL›‡”aÕ‡Jós?|ÚÔõ}Îê=ö«@‹C2FRÀ ŽÉ‡»>Û«HÊÇÈ´'ÜjÝ÷s¥}>Ú‡SÞTíæagòÒî—Ÿí4|Z¥%ÑNØ&2쟧.ÛÒ[¿÷Ñ)²}~? ÷ålš£„r‡—÷AÝÃíÄ/«Û¤9‡& øÌ%ŸVúÊ}VŸ¤µý˧Ûó¿à«?þ-Zy¥n*"XBm‘£ŠÜüªÔYEKi•º« ”¢Ö†øÀ¼ëŠF -r^‘­¨ŒwCypþ!‚1£¸Vò>"Beó2/<ûæn‡28¢\Kœ/ \Ç.IéL9e^¯ ¿%Šð g<Ô+(uòGËÚÌB£{ª‡ì¼ž‚¨2Hv6ª~k° ‰Õ]|nYÒ£óýxQï ¾ÏÆ§fœ+08çhA,&Àׂ¼€§éZÃS~nÆCý\¸ÄcÑ”ˆ#wƒ`‹û³Ÿ‹Çú¹º¾¼JM²‡öXÞ5s`BÌ;Õtûéºl’( Á©Î´ÅkðıèžFíÕÂèÞÕHµY ¥Ü¶|5[:Q¢ù.™Ÿ¾.ñ¡sÓ<&¾±ô£Hƒm¿l#¡”º3E ¥±)ÎØÀ´6§ßAÕ2]™áϸÃÄ÷‡D›ÏêsqT£’˜yz]aLø¡%Ä‹+€Ës+óˆ Ù/c˜/cT'qŸä‚¡j¸:"Ôê] p¦&±¹Ét<åXa ï{«ë_ ¸mfpT5u×|íÞðœt·¨Tñ ¦N ¾6&rLÀë(cС?ã<;íp¤rç{p'«îƒ'Ó¡ž2*A)GC jàäÊúºƒ£'TŒ©‰!³‚7§Üáq ìÓÐ⊑Ð] ™y-¬ˆ Eú4PrÀdFiÎQôUzN³”Fé#ëoðãM Ç3º5‹`) Þ±Ù¤‡H)Hµ¶r‘uX$¥adîªÖ¾ÕŸ+"ŽRùÛáŠê/wž–[Qž¶‡mù Eb®Ü©œ_Þ}~›ä‰Qg¬³>,‹P7·õÆ+.øTø¯„ó*·‘¦:jF繕“s)öÅäÜÊyÂÂs,7¡g91§›úÓ¸i¤•‹m$žÖaSÞ80åAÅ!›úýö*õ¹žÓ—N]ˆ«ÚQ¨Þ}N›X×åÏeÕ‰énÅ‹Åßå‡PIy 3`Oe®†=ɾ€ ǭꜶüéÁ8ú¼Óï_—ž~œç¡ ¦;‹¤DŒÌ¥óíVG=O•_dÖnÇJHxX†q`æ1‚ ÿ[0= ¡% xèô'èÌÎs“o>’’02—ƒs¢ü½gˆ¤\ø½ï¶r±õêæûû×QVGÞ,šegŽ¿µ‡‚Z³âνÕÝ÷ø»Ou½Û)ö´;¬¾ M·Ú·÷³XãªA<µ½;oºä£)B?Ó'£ª8W‡þ´5F²¯¾_ݼ†Sî/WŸ¬Îû{¸¿øã¿ý+¬/:1ZöãݦN~¹<ŠW …L™šê±Yïû^†ãV¾V®4²ºä±™&c”*T~ÁÇVâ±^üÆ~_§ +~"Aß5;ôÛgñÖ{Ç&ó‹Y GØ}Í,§Òf’IxÌ/×°Më:¨ãòœŠŽñ‹§oZÛM³>êêc ³F<Òê$2iÎá’ƒÂÂs/ePB€U+/£)±7DYmô2ï;¼nI‚œPÍApÈŒVä¬F¡ˆ8R‹cÛá_´¨jGÒÑ(¸Á3Ê£Žçò^<Ê»ûð§ÿú§h¼qû ¸^'¯×'çýé>3Ãð"—úÉq€Ío×ÒKj-–Ëgà†¯»alÏ`¿Ô•Ëã3ôP ?…ÐÛ³t×<æ´†;ÌíPFÍC¤´œ£ƒ²êÓ-÷d#PŸu¥a<(NóØ?¿©Ð†þÓÒ#ô¨7°t½~ŒSñD3¯,è‚Y¬aèJi7ÜÂõe9”ýéVOHå%‡–ÈǪö¯U‹çá;7 ¬eJ¦²ž,ȽïMÇ XÂéšïpÇï ÉW˜-¤Út›C?Á_)S>‡KÔÃÄyÂÍ/Ü‚Íñ½Îİ„7.áõ×WL6•ÑãÌB]êP­1újß]×ú{õ83‡ÌêÅ))ˆ3‡Ž°³û,ÍûÍâZdqiú ×ô‡v-¯Ô[´º‰¾E%Hsç*—%”¬á¾yAG2ùL}ØËëùªŸªÞ¾YTÁ}“©â¾IV2a“¨ÛC¿+=¹ß¤SÊMmiM>Â¥ŸËTÖ%zoà³|¨Œï¤êߎ. ðwyYa¹7/Eâ=ꦯK_\,K>@•ªºé‰åhší2ž†´>?Þ¾çØ$*q‚}wí¹´cy\ŠêEí{uy£ 7¦É/£!̵Q„­O¸*¦ç¼ùšŒ¡5¥@Ý@¨š|ðt§M€u¸Xi† ç§Ì­4¢•ÊDßè ®[õ]uÝÄz³ª¾ÜüÇoQ+KùÓý}>þdJÉXa@ E`ÒÕ¿òÅÀˆÎ¸pjÆg“¹û¢.þÝ/÷%d®á3ò ÑýI— ÚCñ…‘8š°b.Œ†áÝÁ#ÚÆ[s釔aÕ³JÕÙURcæ\–úE7'´>ï ˆª/®þDÍ'£\N {‰Âë1,áµè:Á†?.`øc’aéÍ‚%ì²— å´èrÁb¥2ãhJóå¡2—r.aÊòËßX@åXçÇn‚!T Õ-.ÅÐ=ŒýÜoúÃR‡zw×ÙÜÃQ6Jât·Ÿ«WøÊ.0834¸×/avn‡"fçvˆ0;·A7~ýùòçêû§¥ÓÌÅCˆx¤‘ÿ _Øp¿)ÿè80áåˆ)ÁalûÌEïý£¹ñ-ˆðSÅÊRsq”•®tăÞÞ§·ïÚ ˜j[Ú[ ó¿;Á#)7#óÕí·ÛêçôÔ2—¿º9Ù]:bŽ Z˜*¹K£drÂÏK¢ÑH¼iÞSÿÄëbæDß!ÑêšN…æJèðAJ‡I¦…¤ñ»”Ó)8Ò¼ÀtGïzÚÞ »Œbe5«tç3Ô®®àËŸVï…Û¿ÝÑ¿ø!¾Š!£—[õ®YüÚ4¢’‡WP€Û»G¼€ÛNjE35ó…ÊtOU«,§™Üõc†¿³Ô„ÖÝ_NkÜs‡à3ù¦×ÊÏãÄèFÎEÚ)Ò×2rA£k«©ýC…VS'ñààMõUün7µÀ™ßX•6 4;û÷~í²öèd:GÕ…žJ ¼Yt]Cú¬>Jyˆy ö©Äiõpxhž!¼P é2Q2žŒ>·…%º:4u|gˇHŸÛŠçÔg9E³Pr!H^>ûs»m¨å¾ný«Õçê·þõŸÿ[ªæÜÇ.cš!éÖ¢¨µ·âMâ5 C/Ml‹ëÏ…z””°¤¾®ýU»Ã=–¯:.À««Õ××,Í2†r\kK2‰Ùîq/ ã"]BJÆ“z×Þß·ÍÅG1´áŽ3©P6ÓŸþ\ÀźT¤ˆgrû—«ÕÂzÜìÛsê—+xÇ/lC|‘‹‰¶(è^5SÝm°}yà"†ir|•¥‰`‡VÈÃÃz4´Ôÿþ-ÓyÊí¼vž(9‡ÛYZBß­Çv»ËuP,زsžaiu^¡¸’≥±]R0ÀPývíYáô¨]JÑ|r]O «>sÿ' )x7€ÜòƒÐ-ýãQFÛœjfÕjë’UÍ#g¢33c ¦ªjŽz+'§•>×Ñß¡ûð§»Mò›‹Ð*0M¾¹Û•Ìšréhizƒ´«7ûêËío¤×·è€©`ŸžE*Z®Ìy§J”ݪ×Èn×s@FrÛÞ0Ò&Ö_ѧ€¨A° S,ËiʹÊpŠÅdÝc˜ƒGÑï`âÜ‹)?U°9´à@+_ý<Ô¨t„Ú)›ìëf¸ý|…rõ½xm‡Ó4§39 UnE¨úr»}ûVW_ÞWZ$«ŸPêOÛ•¹9‡Ìd0™ƒ#g0)–“£{¨Ï}ÁA'‹4ô¨¬ì°Zæ˜\*} W3–š1"¿z´b`b­Ô]èC¼¾åÌ:&ÎxcbL4L­Ëkós`^2•¿OqÛ÷)0}g+J‹vêê ƒa²)àÁ10þNÆbUŸs-üƒAm·ÔæŒrkY8Råè–ßí|x®fétpªÖ58EŸëú‡m´±Ç*´”| C±„K‰ëêÊùI¨®‘…¹€ãUÃÑ @¿z°ÐøªD‰Ï’R­~.¥U°U0ñ»“³A@ZM]iARí4ƒ-´º—Wðù¤²PJ!¨¬?³ \æR|1MsÌt8ïduç­Ž i@†’”)á<¹±?4…Ä4$ ¡¯“(¸¨E‡T˜(|ñêqï¦ËÍm<”! ÓÃ/ÍHä¦s%ÛoºäÊ ‹´äˆÌ'¸ŒO6´ØÉ ëäTJ—•ƒæKâ{[FªÀ†—säG9’w¯ÞêÖ8ï$5¤¤wd±>‘éeýa9‹'öçZOÓÄ eeEü'µé¸a¦š˜¯.j3‰¦€›ÁåãBx^¸o0/yˆ‘¦â`Œv™J}‹jQ-Yàn;úèiÑ)¼éäLþ&ÆÒo²~ÎG¤¿89ò¢Øê1÷áþKA+p„Ú˜µGƽšäì8·e41;E“Ý ‚jùÛtíH•z1BZnPc/]ÆtÈpà°–#-úpT$ ŽOÉKa ›u,*3K¬ˆO†¯“[FÙï§~®Óª(Ä(ÂD^Í_Aä(QÑdšL™|˜Qf¼B°¦qK'½Tf´RŒU‰©^_´•M~TûTñÎgj6'0N)Yˆ³XÃÕú]“–j븂ÏÐS7žrsÔx†I„øL1MÓkžÄ¤Möž”¿Kß³±²"PBÿ|:XjËÎ⓾ü|µe6þS¾ mû³}†îИ êæqE­-@ú¤›@:Q°¤oûŠU7œXqðÀ> -ŽŒ;×Zܾèýäx1û /Pî§cSÄÂú•$…²Šf¡k/8Áªï(v®¾_Cü‡ÐœvûéA,Y;û$û“EµTa™Oë.×÷;«S}-*üˆvá$=Ô\´|à .TfÊ«ìbν”3ùrÐA§m™‚®#À¹dÈ5Mý¦5gÍîÞ€ôÓø°Éx¬ãüÕ1Þ꥿°eÎïÏø0·Äf_¦°À£¿ISÒ ðŸ?ùî½¾¨í¶¢:ÔçÏ(+ð6{ê]¿³ ÕJ;£¥„2ña¹è°46,; tƒÂöÓÓݶ¹¯O‡Ì‡À´:+p‚ÃÕ›/+i…¦ÅŽÎ©~Ψ³«I¤)%èHKø#ttÓÐÔ¤g;ïáÜè¾n}f0c‘J§+s*õûG®fk‹‚ϘÒìòÎ1ÎT®d”¬Ü¡-­QéÒ²ô…p[g—·Ÿ|"3ä¨7±>‚šp~€ Vúü½¬284eäÈ—6(•yŠ0,åeÅW•Öšj-K¼õ¤2PRåžzøÚ²ù§8Û<¾N´åÒµXrÁíw˜å ¤‘ª©|$VUˆ¥ ‰T†¿Ø·“z@µ‹¤5^Ìßó±¼ñ©KºŒn„(¿«ûB(MÕØ“h}] Æ­he[ú¦ó9yäÒ&¨SéÇLÙ’,/C{¾Ù†ìR•^è'‚¥ô–»»1ê/ÉóÊ8EØð”Ÿ®á!YYPJ —ÖˆçêÔ>­ˆÏ„¯ Ô”­Œ‚câ8¨ÇÍGÇçh%ãÉp¸€ŒŠ,ðúGðilƒªö÷…U5ÍýXd2—Î0u@KÛxV\ÉLÕ+õ.æ“ëx*8<£ÁúÐÃv–ļö ¦÷¥ïæç¡É–‰CÓâ8r¾úõnkõM@’u.–ëÙã`H iÏ¢4M#§ÝWŠºôÓÞ‡pÖ3]Ø6ç©(öEÓ2'¼Äå›Sh2á<³”[”ÿ"”ã±¢î +ÊC:t´liÕÜñ¨æŽº\L¨«©„)Ë‘¯®P'tbÞ¬6Y‰xQžÐ“~Y]F2Pº>diÍÚüSœíž)†‘¡Á2€ Å-à·ùI…Bº¹nƒþÃlæ²çàið÷vSxDàj)ægZ¶ˆ7‡É6¡¦ZÊ]eIÍâP @V¼¸Š0ïij+äc©¥ëüþÇ§ÃØß·³xìp!âÈG~óéªÒ±³K]†à Ö ÇúA|&ùãÇVÒ ¤ž³,) ?•­lÛápFóƒ»ù§RW$Aˆ-¯’Qf}z´›êËÊ$+‡ Ž’f¾“Î2ª|œUh$´Nk¼ [É˰ÊDS]Õ¸Å<¸±é3™¦}Ú¹ ‡s˜H µ|²çXà „m§9ì=Ǥƒ9`´]ÏvÆóú{“r¢BTÿö4?ßÕ‡´;.©•:2y´(¯ ¿©„ú®<4à;¥—NÑg¨t!}'òˆÒoÚ­s‚hŸW‡eBÏ­*˜ñÍô&ñØvÛþ‘*=ÞÚc›ù¬ZñQùi‚Í ø–°…«Ê£…^ävMßc–¦©‰î”·"°Æ›šÃýÅÔîºfKý”–Æ)hŠ.ø;Ëó$(‡ zK“U¿Z¿ÊZXÕ[y\Ã)UOêÇvΡ0‡ $ùS¨ûr°9ضè”1Eb›\ùª~«–@*Òe]mŸ»ú(Æ e¨èÝ'±‚%R‘Nô£ˆvCø7Tø»ËŸ±ôb˜u^‹ÿ1·ÇÌ-<FIHRP?å$'§¶À¯+t”;]7Æklä^ ™àPAVÎÇ«[Ð!y ác(‰ƒ:ЀSÊg4Û€GÜ…¸EQ9ûz»¹Ï·;çè–Ô—AÛÎ[ðô‹iØfŸ»uRV(GeðÕŒéU½ƒ}«»-uà ¡AÁàVCžËÀñf7Í“hœPìqÝÎc=>W_n('‚À¯¦¥¾j~ØýPMûþ‘ô,bÀyí‘ò­sàšåà )æËQ‹H~PùýÔŒÏø"óãJˆ¥ú‰TÞS¼¼•¯ž9ïë +&¶‚x¹Ä¯Ýùº'õÎ~­n~þðkd£#Ä×Ìruq”§’ Gý»æ¿Ò©`€ŸØ~Rü•y³è^Ó㻹…ZØ1ðx‡…‹ ŒÜ~UÉ¡ÉÖ]t6+ê;84KÎô"9jGÏŸ¾»íc\šÚ‹•ÿ±Ó/½fçþ¿ÝÖb& Fµ¢krÌ]Ñêšôj„4HòœmJ›&¥­ë’Ð ¬0ÁéÄ6¦ÍEI•j1'Öw&÷ú÷&.»©ãª[™“*„=U0+×å‚!Ww8’Ë.KÖ#(üùæ%™i¤ª¡«¿¤:+×êDŠr¯ ¿†Cý¼îûÕ;Ó|ÑS¥žmÅêÑ"ÁÙâ ÔÆì7‘jj·É׊գE‚³ŠaÐħwz‚åÔ”Nom\­Â=¶¢´#¸¯šãOZº«§÷)F×ÑÁƒåŽÊ3Ì\uàCñv‹ÞTçf„Ez-^"Úá Ïó> ‰Œ,†¸uÕtr½[À£·ý1ÃÆ",!‘f_íÛS'_ö­’à.U“ÿ=φC;8ñåoeqí{ƒmþ›Î1\€gèíÇŒßæÔèv„r{Tb¶H­ò‡Ý¿¦Z±R"œº;tдVý¡E»úÓŸªOènPz¨Å„çinŽ®rôŒ<íÓÛÑв"‡Z–HeòM”SzŠÈ µñĹâ]Eç÷eõ‚Uþ´z÷¦‚ ª.ýE¹Q×Å=ÿ~›F¨©þçÿ¨þÛÿLÕˆ^ëVDF¤ÑÞêjõëÅ- ‡¡êØ*ê´?è7ÒBcX¥Ü—ÊAíó'=¦âJx»U®¶”ó› _´CŒP1›8ŽÇÆÝ·T¸s™÷UZ.TȱQ;Ÿˆ»P8Žˆ´ü›ÛcÓŸæ2B\–€˜* ˆø …gˆ>O‡~WÄ"}Z(K¼7ã塆Ž#LpÜ…ÆQ"™hw.¨5‘îâã%BÌqî*Ÿ¥sz_}-^ažA94 ½„ âæþ­ôŸUÇ€ žä÷f9 aDD‰·¨ Ï{½Í<Ý­‹ ODyÓÅú‘%vº.¤Âd IQP =Àë>ß!:6÷퓜IåoÃ$3X’!$Ó®d9%ô'‰f,í]„¡alìSêuÑ잪„Ý´J‚0*q?XGÈÆ?è¶RwfÎaD¦Nô<€;¡‰´RkÕ;Ò⡲]˜lµyôÔvÔ|¬KÍHóãrüàNçzs, C`.,«ÈáИ3ãŸXÕsj”R_Aîd6@QUÖOjT‘:JeÑQœrÅ ‘V9‘¥ ìa”Ä<žrBŒZL,þâÅxª8c¿ê"ŒZc¹ZÒ–LUž!`ìÝ [jÖˆÉ †I¼D_ úB¡‚‡:3p„¥p¨wÅoÀžÊ.«²cTv% 6ˆÁêhS.W×»¡lŒg°\BHfT9.DnÔ´¶¹ ›DŽ€&Åò4Y¼-œsÖÉmòé,ø‚™¹§~6LUÿ­Œ…uƒÂÂJA,GfhEóá(> e©O[ñ`f’¬¤ë]YKZïbíg½Ë´š·‘!ÒÞñhï#4Úûe,ÂhÏöY‡u!ôù€¨°áÄrÅqœú-XßÊ A¹S‡V1ó¥Ò^º†Ó$¯yšË(Y`ÀIˆÒ¤À#P'ï«+VAàIò¸vûTFÉJBäû‚ðÛà6ôÉÖ So,¡ÜWÊ!CJÌjîMà‡JèÈ«ÇFL‹vel2`2ýÒ¦7•Žš‚A“Á~Z`oOc}¨|²gÅ'ÃÃLûôÜ&h[DºÅÉ[÷øš=ßNäaýc:bPB¡lnÊö¼«dX‡U¥Œà8JÃîn¿®Ë89Ø€””êZÒo˜˜ç×Ò‚§óv× äYmi“ wb]™ª%0/WSÐè«ú\·‡zÝœÍ òœ±=O…t4äBùEŽu7ˆtîŒ,ªB´Æß Ûª¤¥]= è¡Ðl> pÌlpÓp,l>6Ð.¥éLbXMá¨Xu9"ç›bZŠk=èá,£C_JéÐÇ9zn¨ƒä¥ƒŠ\Î1¢Ð€ ÉX÷Gº7·N(!<Êg2ü <Ï éfdqªÉ”…må¹mÐ3Û<.±Z^Xz#ÈkæšK€þØj™×c»y˜Ê¼¦¦s(¾<&ðq9Ícoñ?!Þ\.~gòñl )Æx¹ORyS¡é.ü£´*[÷ýìsôî[óÓ¾©"P¦Ý@£Ps_õK¿ùtÅëVÎèkŒV¢ÅõÍÉ0 ±$ê†|Åø«®$2Éu¿ §hS ‰<û§»‡äùeëtbô¤ýþµ9ž^ýåûõkö¾ü­Ì[}o¨Çæ 1dˆë€Ñ„Ç)Ô[àm"u«Åñ8áRú²r=LdX=C×§â«UF†]"‹eÉÌúÂv¯Su¤òd‰½«Î­nl2;&úñ»C¿®wçzlqÈ(áÉã÷Q:²:2‡°_ÚtW2•ðÊÀCªòì¦2x$2üulá­;ÜÜ9‘±$Z7ócÓtb)÷ì¬+Íßõ˜XT­!Ü'k‰f å ›Aᥘ8Ü£ê_Á{Øb‚]ɸXS÷r¢cƒ^NѰk3X‰–pNæôèóXÇ—@*yI™”#¸ÜĆ{̘m!ZZÜ>&¸"¢EŠ &éEÖä]QóÐ_å•é¦ó[£ ˆ †ŸÖÝi}‡W?’/›Á)VT¢vU×7§u¥RÈ ³݇Dr»ÊÃh*•›« ´¡>½©x†ô²´VH²õ/ÿ&›ûúnÛ¥ëÑéGëdïN·C=í/DZ~Ƙ>¡Ý¤ÊX¢“W™ÒØŽÍfîE·²ò­ƒuæœq ƒóÔ[C™" ^xoõ˜¬«˜æÐ°Žb®úîžÈlA·ÀI¹ƒ&Ü|û]žÀ~Çißï¨í<éó`?‡WÔ@ÆÝyˆr‡çÔÍùõ]Ú Å9Ê;m˜b@Dkuóí6ú ô÷mb›gá&Jä¬õ¾„XªSü›xxõc¥ñbõ¸£aíÔㆂ1°-bpZ˜_*˜Ëư—Ÿ%DÎ#’!ë±t ³±Î³kŽÑ(÷úÞwÒ)û(º y/,Öp¾Ê!àršœËòieõ«¿nÔBôE5’Û+ Pk ä6]W„ÔˆœëƒãîÆ'“_Ÿ38‡Y“;•³ NÄÄâ„>¦24<¡¡%N¬4y¯´7ÕO(V³(†ÖO‡zÛø¬òîšpב•äÜuျޏëÄ€+)ÐÍŒ¢Áw]6ø®cƒïzéà˾û¼v'œ!^Æq¶‰¢îÿÏW^`¸ÅŽ+ÿ¨Gz<ÿ*¬’éGñaç9Q˜Ã||"Ò^œOI;Î ©”ôlÎ#ãõnålh¿õ4cAsùûn½»‘Æz½nçãïwk±ÊOsG ’/¤ÍFÊ®ÿZ)£½y’f%ê=¬§_KYZÈ0P[ æµ„I$ÇÈGQf_53µ¥j@ ÃEÔ2œÒd’,§ô=uéëG¯Eœæœãék¶Îf”fØÉ‚;¤èÈVGw€¾MSb¨ÈëûE\¨OF õþ®+1\3õòû©95!L.!B ± J˜w‘|9œ§Ó+nÊ鎭Ɔ¬«ÑÞc@Ñö Ïgq;Ca“MãœÙ6a³(¥Ú%ųyLRxôô>R'Bà®PlûGée+Ô‡BDÇÓÝf=ž ÇÑšC ×Ð'<ûûZo¤9ÅÕ¡?m«ŸÐ¹žy¨Xè—6À4ÏŽaôžêíúN[Âä8„PB†©3µ·&ƧµÏR>š%ÅwÚ&6 •gàî´W;ôPÜþÑ`‡åVÑÚŒh%ÙÞ$€¹µbú’°Fbl\‡lU˜ª8¬#JqO†V—þ²- ìå7’LÀ¡ë·ÍTÀ„â>R"w‚Ñ#ÙiTg Ž1üÊHïÕOŠwÀnšÜ,Êe&Òi¶Z}®fˆãÕÉc9°__B(}&â",}¢Hè4}¶“›U ol6ý¸-PëíJDIÀ!ŒL-"’[Lø«Þ.”¶Ú3 OéÊ3¿Æìí!Û8)†(nÍÑr¼ý€ «^zrcu+£Ó".Ö㢥Èé—>×7 wòÙ˜×À¶ã ;,Ñ{úÊ3³Ü´iaÓ÷u~RGíCó<Ôm®uQV©JwýAêD}ƒÍÞK  È!Ëýi½´…fôº*ù®»3ƒTa·}KrÑ?ǬvGŠ®%‘ÀÝAѯû®Ó Xdc¾€OÎ :‡sùXWèËøÈ|Ø—wb±ÝNèÎi³ ¤èc €.QòÁ,cáDw{ ˜1p—¼€%Ížæ:¤ïçòÄY#êï¤^,]þùýíe9Òmîžzè@¶4*MÁ§œ_I?±‹è'²~ç‚RVÆ`ÚÔ¥2y=†µŒinè½<Í=dhªŸÝ»BôI»/pÈÊ݃ÉÓZÉ|Õ-æ³ô¶“ eÅÀŠ^ –ñ¡×0‰…úúnemby^…Œb\œ-’¨¶´ïÙ¤¡¾QíÔ¹.ÑU—ÇúñÕ6\³‰âþ`¾•²H[D"#v½XJ»=éÝ^ƒ|Å‘V£`ˉ²ZðÊÃhªø,y’RR- ”p"B¿bÌ_ÎøÕÓÔÛ»ÍtN©w!J­JT>|Å̳®®VßÝ qòCòÑ Œ—äcÕýÿªÃØlïa‡Tm0%pH­É‘9öŸ_NóÅ—û‹Ÿ }#V# Úô«ÌY]Þ~šR fèS2ËÿFÙVÏà\>¶­ÿ}töõ uÚŒí›0Eцš/wö£›˜K*›n IxøõãêšôRù…¾#ì`6Û6S“mPƒ­¬¹ïõØö§I¥h»Ù7Õt¨á> x8M{ªkÚ·÷óÝfì'ØØ¡»KÝ‘¤Yä4üRXg0QP1­Pñ'@mtæxA» ­È„ìe #uoãÕô:dQ ŸÓ\<æáÀ§Ÿ_ÚÏ'ð^µD{|¯F¢½¾˜_§§BkÇ4Õ7ËßàìÁÞñÁ³ôÚ¿34¡}Æ™=žú£&ù½AŒÀÍÃÅØÜ7c#2Â^ã34OÃ(}ì®Ƨ)éX9¤æîȰ ÅG[Hú-˸+opls¶tî½;"¸Ç¯þýêÛÕ—›bm–Û Î„Ñºkæâ»fæYï”=Ç"8lÞÊc¹ï»´yVû&yåŒÊH‘ïýãûïoe„ûZ̶=íãvê®k’¿Jk1éìýѸÅ;›«©¿Ÿ!ȤOŽ~Ùó§B˜e ^ׇšoÔòÐ]ì"² ÉÝÃûé(ž|h2':!L³ei‚×ïéàÒ7e_•Tløª‡~‚…ös^»‡th™S9 ÝˆZçêOÙ¨ÚÖÉu½+."AFjØ‹‘TeÜ«yê j€ï€ýÐÈEšIÖ–˜?$Ôú ¥Ü$Ç,~`n ¸ˆ?¥‡Ãºï¶¢çìŸá¼1©<Ö$|1’¹Ï` R5HÖÃPY­„ÓÜüëùQšÁiDâóP2¼…Ût“¸üu›´û~òØ7õaÞç·"ãp—èó-²%Å(ÆÝz9œ‹^F1—W]\ Xýì<=†CB¼Q™Ž,Q/€Ms« ­ÄÞûUŒÉÌj‹‡åDhuÐ+dêš”Ž‰¤ã½\·cÿ­}Ç/«]Q3ö³¤ðrjÃñ.ÔØE(22ëj7ì0’12Â!g8VÛµÕyê¶ðAÔ›CÁþ[ ¬˜b§×—Òêòê³1 h cŸ‰Ç#]JÆiW"Gs›Ñ×ZZçÙ2A}{öÉÓùk>Fj0©ÎqöÕZýÃ×ÿëêMõ®Ýµs}ø²iêîMuÕ û7Õ¯õa‹Fø^>ÔÍêGÊçÐÞ7›çMÒŸVF@‰MšXeÅ&œàéèw»´ h²Êe2U­“ÄW‡¾Œp=ÑF!ƒé¹Û¤Õ„Ñ iÒ€éþZn7žÅô­0ާÃÜeO £¹[éÍZLt2U^•ìÝ|pŠXÃg®pVmúŽ­T)ªõ—ú€†è`t+*Ê2 Mmýªâfù£È® )%êòlñdð+Š(z{úNnâÝe¯óH–™[YZyªª`+©›´JH²ž:juÝY¥S)`b[Õ÷8EënºoF¹onw&8 =4I“£xèT¹e&¦Ø0­]½ÿÜv§§JÉÈ2§¹‡ó¼´—ã¤Uéd7¸¥Ò…'p¬toºmîÛÎ ò;5È$@Z;¦Q˜jÙŠçú2„b(À¶xšÚsS 7;ˆØacS¥1¬gtå ®¥ŠxRŸ¾5å"ŒþÞ½%¡táñhðk¥ÿVï€(í¶»±Ý&µ:­V&’+—`Í'Šx ±VEúϺ¼ýD5N§ìž_ˆ2zuº³´†diY8ùšmzã•9ºPà¶n©M œ“O·Ü¡³Ê]Õ®$Œz-IéŸÄç—¶/âpT¿’„u­j?ÓW\vâ;"çýŠ=ä',2Q„€Öfbùݘ¶DÀü<4‘> æN‡&¾1iå:Ù!P+f|{'ÉCî9šÛû6gõ·ŽUÛWàZr•©ã}ÂÁ!&yŒvgO*ØŒkäÜ0ùh¢Ÿ-Í^ˆ#»¼u5×Óƒ£GFM+¢« S*ù˜:Cw(Ö#ôµ †œ²¦äLkr¦Z¬{àéþN9'P~“=S ¬ÔbçÛCÛöCËùfe·n£³Ni1¸!ˆuz†å˜ ¯¿ºÅÙÁJü ¤ÌDûÔ+«£\6C2 äëMí‹?JV»Â•qŸÕº„n>£!œ€ò”õíJÌà› Û.ᙦ–dsönYNû&ã„Ê•"H¡—^U =½ò]pMÏ[˜"nêAtŸÉ~E*Í®L{Ü„'=îÛÍ^­[Ä'€p‹ Õ!£f»+¡C`.P"2¨OÉrË\âÄO1¯íwÏXò 0—.™‚šò¾b’Ãá.iÿBåJ+¤Ps}ˆú;•r·šÞZõ÷ógpK”Öé9.‘k¥µš×¢‘Á ÿtL ܇»Üó-„¨‰ÑA¨mmþçÿ¨þôçþLTžÆäEäZ™H‘å_“¶ £§«øòˆŽ§¢sg§u>½ìÄùýÓ .S´Å˜ý}þí‚îêgLÒ˜K̳óé œoüðTp¢(™äéw¬~Øj±Ñôr\|$åcd´~>Y?T¢\ffî¼Éçþ¼€¦Ü¨˜ÒÃoþâ϶ë¥,ýw¡ùãš?¦iþ¡ù#uè• ˜©Ñ¶=F¾ý»8‡ ”8‡ÀW¤Í®öÜM¾åa;ä)ZÃO$;÷ùÝ­÷-¾˜W&Èg¢¼L¨OÅ Bz¾¬ŠŽõ8ÃÇVvðE+r¡\;†¯V Ldä;efy¤]¡>Ð<çg“œ"“Ç Õ|~ôq`lÚÈå÷ZU£²j[Ý\“ÅC×?æïý‡(­Û¤“”oßɨŸ¿ ²¹ûó ¹0¾é t™ýÂNvŠ¡,ÚWíìnè}Lí|Qyšub†•Œ7âcŒj™ê¼G0\ݬ*”LáÕ «¸?Ôc;åŒá˜ROÞ¢Ò=+¸©7é(U.BëÀ´øôª? €Ð,Ò¾ùå­·3=ˆAx<ïdkKéf‘Šƒ+#ÍjRÎX&3º‹uuY­TB¤ÇÈŽwõãt×êin³¾é,šrÈJ«|b¦¸R¹°©¼·¹ÈËú}ÊÞÍõ1Š‘N¥Õdu«æùוïæj*3œbÆ‘Ó #oú‡¶®V_+:‹f¦cdb:²óR¢Hw~‘½fÈ/í“ÓëGh‰g*EihˆU=Ýý8ÔãÝ&éó:D)µ6üãí{éÊzÀêÇÛ˯ÕÕíÏVç,lÇ6í92D)6ÝöÂXÚJ‹m铱‹>Ù ‹aÜ\—Íéris^ØCáÒZ/ìnDLÖz[XtóECŒøaw3­5P7{ãk+ýhãµ#S:MŽ1æöwpz67]æ¾tnIøê¹€&?ª Ðo?‹~[eþ¡í«m=í×}=ÒÚ˜îêi‚}©Œ³d©é92ùZðo8;îÍ}*ì”´•É·þ¡±ã54 u?‚õc-†£ÍØ [˜šNÀ„®I^½£²xD†3‡µ¬)òþ"IÔ•URd ™ãe°Oku¹%ÅÍ)R&Ù¼ÃÏ ¶ ˆÀ^o!* ãøœÜ/dpZ1‘$<ô c¿ë#|r ×’2Ív÷àLÖ>4·srúuö&^çãÓªGÓsß&æ å<þKfcÉAh ˜ÆM«Vß¿þ‹‰mÕ<Š/yUÜE(52͉  #Mã¹³ ÞÜëÕÇÛ‹_~{MÔ‹YFR¹•kÕ"Å™¸ÊyŠœ±®Oò2̧M=ʃCÙ§‘B?w›½èHÛ?’D€R lºìªÇ±ð¥/ÚøoC+gÑgës% N·vaá~^÷ýDnjÅ` Ü›z"íÿyÊ4| ÐÄ&¯©“k.RøÌ¨°üN ƨ’©ÊÖάO´?C‰ ªÄ+ئ„QiéÉçéܦïxólLt¾•çé{¨AôŸ»ú®ýª¹„(©‡¤³Kô‚3Txão€†Èxxñ‚¸ã¿=Ô3œúZV"?tR)J.DñQ‰òö²Ì{±ã¤7èЋ¶ÎAU§–;£V»(O;/U@ÿ®" ¢0AIju Z¯LtÖvD–w ”vŒw@Í( ‚"²Á ˆßôjÛmðzk„&ˆÎq¬áM'•º­U¥zÆ ßL:¹¶ø Ê ÎžÈÕý¹=6™U½QŠU¢·f0É*jÕÓ?ŠþÄN†Rúx¨Òë ×úR9‰z©Žü¿A>2‹+“%ìž§ˆf™íðÜœ¦YÌÎbtÑöÅãœÛQ”Ÿ]ü×fñHd@ˆR0ËŸbNH7ù¶ƒuZú²5¤TŒl“-JjÂ]§Üœ ,Ey!ÓJæöÿ­_ßÉCÖ,ÕJIZ¡lðêܶóØü{¿fꓘfp >)”Óù“ˆ¨n š± Ô¶ª9†n…|bÔ– 61°¯Þ€ŠÛ…Èi†.†àcÝ–Õ úÄ@$˜w0ú ÌúˆK™ÿP¯ š$EQ혾¬>0‹G¢ÐídL).'‹™±Þ&åC T9‚ ˜¤âeûXÃüådGyÑ‹ÉÅ”‚+ËòYbÖפmÏ9e£$jSMþ†x.úß¡ákOoR G¯Þš*®Èá€i–Ql·OU‘Å×›*°ŽàX ÓºzU¨hÙ/h'Rfœ›ôzÉQ¥¼¬¶!‡G ã>?QžëüÃ#gÑ`®V:¾òxJËC˜C”ºÒ¼=žhæ Å#`,Ëëec¡!ˆí¡M…-vŠ&Ñk•¼ŒCãÇû5¬‡=¬™æ½˜`ïöÕ7Ìi•‹©ÿ\R<DP‰äs¥ÊµØè9m¦»m;=¨%CÖ¥E /°wÅ8UPÛ°&¼z®ÚiÓW¿\­Ôªvtyv“¾b™!è 3#ò±Ú ˜vg™´P®þ¡á¢,•î× XJo·à­p¯8KLW¨Åu†On‰ùŸáçËøÓÊo‹ßݱޔT™³Ô´À§t}yµ´Öäõ¶ vAM‰9ò€Ÿ«˜…ì |rQ#€–“ùtdle”d™ˆ©]†‚EXÝ"ÍÙ–‚§q.íÃb ¦sZÖ¢§\‹ž2-zõò­oÖˆé&nF jÙõ0(‚:ˆ¼•8³ YR"ɨÈ0gÑ„°+÷y*q¥Äô ¶)˜%ÄoWNv¿2Ëàtj·%Ý–³Œ$¨ùþò˧w¥×y¿®K›‡µ¬©Ïìüñ§K3*¡›Ë9:Ch@ª¯ÞXZf´ví¦¸2,aA¥AeÜ|ºZTSAeLleL\e¬Š*ãñ±+i¦ÌêÖ_ý¯¿ÞÜÀÔù×_ooŠZéöX–‰*>ŽÈ9Gõ£O:ñvÿ©kaƒ6-NzÂcý¸\GÂ\:¾#A ÆeTrû÷>Æ’pâFƒþ`Á¤âÉÛ¦ü´¯Ç\‰)ÆjÂTç,¶>®ë “7³ö –‚ŠRãP. pŸ ¹h¥Jíý£ìylÁù2Ú9üòáWûØ®7ûôV’Q*tªŒrÕÕ ëdé¢âU–¸BùókQºáYºª°¦<ÒÏ…ï´ÿ4ÀÀ6ö뤙GˆRÜlº²¦…(SʱÃ8W¿ ¼úŠ€£ *cµmJ«‘*mc‹Zð¶ š}c5ƒ[6ÿTþ4Çô£­\?\¤È*Æ_G¿—Ê4Ê AzÿnÚžæã]]×êë…«Û)1°ÒˆQÿ=ô‰?îÑnÖª8Ýzz–ö‚°Ü‡òYÞö½˜»ŽP,e%µ"–û,ЮëZ[ɘíq^›Zž‚S M3Î%5˜Êcù²(skÂÔg]mêÊfë2xòBº9¦ÌN–s|¼”/Œc™³[fùiA†—§STt){¹J­âKÞ{QfK; çZ‚Êñ6È¡ÚqaQ^ZŠâd¾ÀEÅÀ~ä®>Íû’õ`*ƒ%B2MÇíÔœŒ¹%u5O›&ç%Žö™y¦¢]Ú6WgÝw—4ýxŸ»ƒYTíÅc‰§hó4éÿ›|aö„Xº¹>s³ˆ¾Î¹”þ"æiÒÿx¾g1–%§ß@ò’IÆoººa&âÆG²˜S‚àXNþ%ò9z»äE a5wêºQ IÅZÏõ0dÔˆÕ ‰ÎŽéYÅÚkÇê|)da|¹ó¦]tO¢ÙO%îYÓ94º<_!°2À³%œ’lÔ±»ŒòvÛ˜0"šÎû8ûþ°MÎùY KDŠœ%"¦à‚t«QôÍ$уƒXÓtÉÐ$<Òå dÎÅäkô¡+A#ÀU¦%!m^ñþ[Ò´‡* ŽHmÁÏ©”E±{m{ƒ>ùTí-’ôïFëgf& Ìåd&2pô„3¸GèÁìûîz€Li¥+æF½!x~‡ô7´³€«uùÆw¥Ýa„·9“®•ƒ¥¶ËS쓬zHï9—Q!æªïï¾Øg6gª¾sÞkJK¯ôrõæä‹ú.^[2Á'§€\¶çcp.¿—³$LhG„ª36= ÌUl¯œya(ý€”M£ž¦v×M*Nô÷Í1`^¬Žu7貓¢2~ ‘X@(³åÂÀ\2f &KEîUE=¯ß¬³[§9 튵›[Ñ`¿#¦úþÛŸþùŸÍÉW=Ž5í•ÛäŽ+½­ç/QûERÜ\Ÿ‰Í¶Z‹iZ»€«.}ÃXµw=Û8½ào*cÎ̱„!:Í„§Ô$Ây„Uv¬·)›/*WJ ʤhõ ­ÉõVp>Bg|‡Þÿò]P ¬yøb¹;öçv‹sOâÝ ª1_!ŠN@:çÂC_ÊmÖû”ÅܽÙAy!kïw1oÔŠó\‹y‚ÌІõiUN+Aˆ™&%Tßïîà²{rc4†uÕ)øIþ|+æ®ÐrùK|OïW¿µòÚwäóQ“&‹ßwéQ@ìm)ñs9ËUSÍÏb†qnÜüv5Ž!æk·Sï<ëp°ÒwÄ2Á]^#±,/” g°Éú’O+lW|†ÃdÛ2°%­Ë>›¸ 8¦}f”ÁË>Y†d%õ‹ËêŰy¼Žw×Ÿï ØúX—ž‘z·ìup‡.år·«¾|ÿ³¦/ß/Ýâú±]C“Ö%ØqÎM;ìñÀÐò*ÕámÇ©0hK2ƒKË…Dù¾ûºdß~„^ÙºEƒ3WÙ:Õç§¼€lЦs‹õ||»7„ÔVTŽ †SYP>àeÉÚÃð,EuvÎFñH—ÙyŠyT©•ïiô®ÑdÛõ æÆú™Ûy³çhÁ$zY Œf Èz0¦.ß}_UåÎ ¦4Û…²œ]‚XI­ex 9“ºd¾ºkl§*ìvlÏ@ îüŠ»_Fø4€SÉ»a·€³Ÿ‡§mPŽ&b›¤”}ó„A ŠFåë°µRå÷þLŒÊp DŽÉ0¿Ñþ¾¬Œ*ÔÞ7Ð}1Ãõî$$wë¾/^{Fr8¥ð1±ù *i¢d½í«É›[Ðï¼[ò\žwÆMùßËXÞÓ¿«gÕ¢Ä4쾸ÒS™™2°pZå4À&KÇN¿_ÿ*””•ïÅe[P®L™ç—¿±Òà……Y£¥* cøýºrÐè7’q5î</R-¢ä`X[LtÖ‚#Ñ‘.¨s|ê–I~Ž­-²8!ÙBïé·põ{f£X¡§ øêçù.ªÖL&+³®À‰Ü–A&p°ÕMþ„%›‹ãæàäyäášB V˜I˺vö™Pµå+HÒ $†eI+#ð¾~uþ:ˆú}5½V†Z~CX?W]}ĉܬàYŒqKïÁ·Ñ- ýÔsSÎàÜÄ«ç•òïü&ÜEy¥|‚ +‹qêi×µgy‹â~9Ûâ8˜ù\ ë²x˜éÿó¿þ÷DÂb—`)÷,ëÌ©P1CtQ(¦Ü»±Þ7 .ÃÕy‡Ï:õûõ7ïL'x@Æ7I:G”Vè­DWàAqÝlzð „Ïtž6})= f˜¡˜z> ›zÜz›ð=©ÉÙÞø»ÆÆs2è{Ê¢s¿¹2ž–Û ¼#Â"}Ag€û@$i˜3¾i“ªÄ÷!Š»HD|hÎÍ™=Éðœá ˆö8÷\Ì–ÍÆqvÈüßû¶›nz—ËÎKÌT½3™T¨LÑèM #IË—fSõº=À5ÛÂ>8•-,Œn3Ò²alsÒÃR¾rçzQÂ, y*'^oÏØ¤Üý‹Â2/¡ã™¢å`ÑŠëÖxŽÖÎYJ¾r¬RÄÖLJDí åHNfú,§nZÔ|<é›–¶8 Yöö—PNÓMSUÝ´¡+_;O©©1¨Ú"jL†"E•תʶ¤cÐfÆË ÁebJáÀC›>/l!Zݲ"’-Q¦—à)s%d©ïŸÅºsÞM ¥…ÄÙL!m&wjÑ szû®ðGõÑÅÀž¡Ù¯Ág8¬²åh‡ó¿²'Ð3y¦Ÿn…D|-¢öÐŒ]³´m°™Bº.Œ¶ )Ñ~ˆõ^,í£'–í¡ß<€ãàBž>¬]ƒˆöqà€&<¤Ëu ðÜrŽ vNÄë 'þt)W†Ä¸ ýÄýØL{CÚË&ª´4¢y.Ã;ˆt^4ó ¼pÏ\6„ñ¹âŒ™AL³’†rW%ý½a¨»B~ÊÂÀñÓÍõ­ÿÑ'_ò´lrëãVÓ!¶a*>–`ÿA¾ëÕê3Kï|„ö¿„`˜#¤H0ÑÖ‡jŒè˜/¥_ðùÞƒ–±ösp¬ &ÁºÃø} Yã\FÞI)dÉá°ö1±t9“’—W2ãydñ‡Í#Ë|ä‹)⥕Euä`èYL¬.7œâ·.¯×,«L&OŒm´2­ßžÅÅv½Ö¼)^왊ÌwíÜ ‰¯²à|;»Œ¬XÖ“ü_ÿB¢Kû‡„鬾¿[ù”¤ÿÙ†í‚%Ï.™Ï!Ê#_ø¡,6¨,0¦ÌRFæ·°bþ9´‹“^@7E”Zšãö¨á¤âeT¼UXoñL%–ØT¡'ð>VbïÉ}èBª9’z üVÙS:¬à„î-~1‘ ù\oùûP‡’2Æíp³É»'j3wº!8 ÀíÍOS¿iÍêÕ2R~µT‚òQË,"Æâë‚Ñ2î8åéz1q©å/$‘ÏãÂ!u ÌÓØUFT½º¹¼|m®GäæÏúþ}Sût‡¯ñ'ø»¦kF0T7'-èwBãúÀ½gB@Óin7K¸úyx¶zx5’¦ÇÒà!]VÇð-‹É|»Q}lçŠá]Þ…´½®>ÇSj†™<ÎÑ·Jr9|¦æïºâq/ÍáPD"}J( "ç ÂF⋪,ÄûìÂs×®¸Á“Ë{4}–WO8Xc¯Íó4áå=?+âÏæ Êà¢è¬ob,Ød—ßR·S}«@´^r‰%,Úz/þ¤¼Çœ"\÷ב»ù±iV”];_3‹æáY”›nmE>|º…)8@‹2,ç•`ãÅåSmÕиÜÖô‹™}æó±/3u£Þ}^Ë{(~ƒ“ŽÏ×|‰oÅ'~]ÎÇíääzQá®èh½ô¾+ƒvY¹ÿ݃Çv%ºôÂã< âQ:Xr±î1#€ØM\`\·ãˆRu<æš¼áRúÅ2p”¯†tÿ’¾gV|C*qAŠÞ2öêÛXéînez;þµöÓt§F©™¦¨A8êaˆjiœ&=™¸ÐïŸf!ÍïËjå“ÉõgÊ¡â_•¥š¼s©©Ùx/‘m?>ˆ¨·måª?À­LÁAhQUŒwê<4χ‡*Vž0¶÷…Ýúé0?¼” ˜áH£¶4g8X‰Ó•ƒ±ŽL–N^€€¯8ëúœÃ9ŠÇçR±L拌ì~Ek¸R‡„1í°£ãDr“@Ò0S¿€…tÌǑȆOñ1F- šâ›S“Ø@¡ÂiNxÓU)“" ¸ñÊÀ·xqÓfl‡9£“ÃZÕŽÔe E•ñDr>˜gçÑ÷ì>ÙÍaOÁ„®,îÀÿyJKSªˆ@õp⇠͌KA½<5&ƒîœ_ºæê6~éŒq”Þ+-Pž½«Âà\õö¶Šœ¤¨Päozð•€ï×&™ëFÄR‚7SÞÁGÑŠ^(A7Yƒ9 †Œ‰eÕÉ@©ù|EÒ6V}e£<åÙ-ëMÎüpÏC}‹}Ìéåeo,‘‰²â`ù7çObo¯|ƇÇÙ.œ·¸OÈM]¢h–Ïò æ×.ßË^)‡¦lyþ%*xüíéç•òŠ2rjƨÔI?VG?Ek¢ŸJ+áË*Ñw*±ŒL¥t¬0Oh@1Fà¹/åÄ€)+*Îó’è835Õ.cÆ€)3*Î3Ósö ³BN16 — 2§Z V ƒvxPy¾ZV«ry­—üz†Á1ŒJW52»X)¬šx&‡+h?Þ*(Z_ÅK²8<Îvá ŸPf“ÄC)“¼’­-)RE¹Å¢òI-ŸEï¾®».­*@)]6®ÙŽBE{@ß(“zŸ¿¬Boæð€‚½ÉFø{“¦Œýá6Ù§L1ÈmH(Gà»4&ûÎæ K Ûìžùñù¹Ù†$tØx7>0±¦X¤.>™Dý ô<†}‡Ë©0X†J§g?Z›±©TÛ=Ô»lqa”Џž™»‡J¤‰™€l d¦çsØ ª‰CSvŽÜ©ªÏïnieMºj A–V@æ% úÝ.s1.„QRàšñÉ$¡?©z(Ð;°J­ñ[3ÍàǧÞìõµLyºˆiò˜­´2Ù܉6g[ ƒ%¼¨Ô1óÇt8-F‘jÇõ ÝóôÐ:"KŒ¢(%i)¯{p­’Ê:ÿÜ0ëaˆf?È!ŒëÙ+«2Ï–—p9€£Á‚! Õzt(àdµ£ƒû~4¾“'½q´$ÂÈg1óèÄd@DêÍ´¦Iš·§É™ü˜§âXÕ*FaßmÑÕ[µnîå¤@PêN4çcýÐô]ú-ø­V¥¢ÞU£\îÄ×ð«]ôÝ8‹|õkÿùuµûz»©§¯ 5voö±YßËÈ%wé˜H,P1qDœw×a8hßirKýW“Å=3&Ú®ËØ\@f»f=ÍšðB¹åÁRÈmYư!»iéÒ1;§¼õ´&»˜ijvX÷OeÜ\p@N‰vJÒšÚdÏ#* c_D›YºõˆPobN!V>mÎéL­h…r9ÛÅ`IÕåÕ犈yÅŒ2õ-KW¢o³˜·2€ÖøLn<ë^Fõl8&ˆ×>{½¾ šòÒ9Ù#ƒMÒíßQôA&®”Œ}cÝÓmEõA~u£”¡›ÙØe>9³‹h Ä-ê•'+<á{£#ƒ½‘ÍMU³’ ž1[¥Èæ.ç%…·Dpÿ– *÷Üóï{1æ Ùs~™ÂF>Âate¤j2llc´r‹Ëœ%Eœúb†L"sø&,Ó(3媤œ›“g§ü˜DêL‰£•UL%NÁ ®ošËIû&[%êþF1 ÏVˆºô©)õª#»!¢ˆj²óþ©Ùœ¤Ñ®NÆ‘CÍm»mÿ8U½A&Ÿ1d_…o½ µåB‹G*ä—R¨ãpâ@ú¨´»ž4ð1c³mıΠP1"§êu‘¯Œ-Ç¡Ÿ±I =:¤¶ÍýXçzdÉÈdm:‰Þã•B"xC…±³Kuäí(q¬Ë ×îjß?bÙa¥¸Ù Òo-4ôhK9‰õ@å••pÆniÃèÑC‘³…µúòöûÇwðÿßÄ“ „=NÄ¢í#zZQ³9*>P1"ÿÎrú"$eYdÏÚY Ë"8g7:Wò0‡œº»ä\\|ùÃ)mäG*®Üñ…­ÒðSòõñ”0t㡜”‡ghi„ã…Y®7¬ðí±9®Íýé&CM é‹ä8«c|Ì?íÛ¡Œy$WÀßÇq¯[•Fš Xh‚ì† ZôÚÏxxítBRfl\Zmù ã«J ߦ‹_M…¯¹ŒËIy½š°—€®ã·6°`Âøî{ä”göÂxdP5Áá“VøÑ”ç_ÒNÍo3DUË–|•øHJÈÈlàXü çÐo€½á»ÏŸÅ˜s½Ê7ï¿U:®ËhÚä˜L›Á$½¹~êÎýN„ÐÏ ï½[]EîSCÖ¦;·cßóÃHˆ´ˆŒzÆ¥Éçzl¥‡´ä¬¨9 ð¡ßÝaó%LX9b¹e7ÂÆüÝÊ9›n5ˆ…=÷B"1 \OQY¶^‰-RèÊä(?äLçÔµúOMàƒZ¦Ð~åÞ ÅG¶Ùåy`i«Ý^uîObþåtªjJ8Vzÿ£õ¾|4˜ld¶y¨ËF 噹˜ß‰ot¿ÿí½´?^ŸÚöR(Fv­8Î׉ôl]Z¸µy¯J›“¸^ÑQ'ª 4Qñ­xêµkÇ Fi(ã6ë³PV:n‹c?nZ…‚òú öjâ&xT~“J±áXŸæþvUr’žSNAD+&ËÀøÓ =®bãØ Êõ߃êqnõ™ bí0„[î§1÷’\”å¨ÒeÁþ±“!Ó±]âÜÇoßnßà¿W¸õáÛ-ô`Áºvá.;y+™µÉ]rÒV2[ã§iv~;ÅÌZn­î‹€qâMdÔy0«Q œ †Ô¦Kl–€ ”Oš'Víäè”)Øô i{û~¾oŸ²j ˆê…d:fĆ ‰ôºèý<wÃØ?åÆëH(‘ëèSŒ£˜Ý *ð 8 ÚvºS~%NÝ3Y,+䯔íÍ] ÓäOŸVÅÇfMŽÇ ²\z.Ä''XÀqŠs*¡•ñstŒg{A˜ü*˜\²·NT òˆµhni³†(8 £ÄákÓŒð¬I¡82¹Ó.Ð0§]Q®nXR”|Sh6¢‚oêÓM3ãW¶TWþýÓpèGo2wmW0% €–—‘Ť¨ _7§C=VhØ×*2Né$Œ Ê{W¾® ¼÷ÅØÜ7cƒ.ñÇf‡kž†Ñ»í DŽ¢©6Û»íØžsÅa ¶@T¨ªz°f*«m4\S®‘[Ñ7íŒ!´¢£(Ú†ôh5$ .êÍ„Ä7ïºiʈՉîh¡]pª7q³Z];š´ ÔÂÕMnø:'Ñ2;±äŽcÄ+» A1D÷£6E…Ã[üËy²vœ~¶‹²OWéÎî-‰kð3¿©—aÀ®)øB=¥ ÈᯧF h¢ñÊóÝÊã{ fžœ%àâ(=ÓvÖúˆÙN';)Ï-c!@Y–мg¸Ì{nÊ‹é쇫¶™òÛÒˆ¨nŒ§ °:»•Îh­—ü°‡üà9pC¦±¼4[4zɬF6‡z/Nˆ”Ù]Ͱñ$¯Ïdôû@ˆˆ †Ül”ŽŸQäì6z¾ð)£øc3&qX‡J¥¯Ê±‡¨Ov^¬ Ø2Åô¦é¦†uɇ›š§&·Íç€L¶ÛŒÆúð•<|<<¿®Àen×ã…€Wƒ|ÄÇ*†„×8 xDä_Y*Œ’QÝÙØ±ï†ìEr f£z/æ?ù);¥d¬ÐzcèÀè+÷[yf6³Ãn¬Åüq>þ.Zãi—Ý8çÑ–£'§½ÊW]ÿµ’"÷s·DaÊiwPD«L§Ú®¬ ååiÞ÷£Ž¥6:°Ê|uuyûZž£•ÇÚïšéaî¸kÒ<ÖϾ÷8­i,â9FxŽ.ϯڛdŒåײ,pº|úf œ’8Q˜–kd°ä4- "„0Yí6âÏÚtã~„X‰ß¡­uV›£ú¤Àl§Òƒty Iiqc«:§¶€A9 ÝâS„7ÄžÐQô¹>œš€E~¾â€z¦B¦T(S;¬ý”€›1;Uô`ŽfÈÖ¿”1Y~“gÕøLà´ =+èÑ{5.³~ÝØÇx0ÂL d­§Ö ˆÊ±U;{¢fq;ýÀÃù×k˜J±6Rq”{v·ˆÂ§ c_ðÙ3P—€w ÄÐÛÝ~.!Aqƒ×/ û+H]Í%C˜Õú÷]¤O#šÃTJÄ…‡„4 ¦ÓE‡€‡*ðዞBý‘#[p£‘ÁQzÿ›ð¤f=´›cÎJǃ&JàšNyw+à¬îVt‹0ˆjÆ)ÄYÊÅÁ_b?îûú˜ë(!„ɉ‘—R§q„ÍgùI‹ÚS¯ÓañtÌMÊ,ÂêifÉôÛõgcȯœCÒPƒr£ë©žçÔ—CåR¦Ðï˱mîEEnEËÄ­ø(t°nËõ´Rß+M"½4ƒðo?ÝÚãú'ؾ-òÄ#•BW†ºaú*ÿ‚ýÆq–¦_É0^$Ëy„xŸ A0Þ¨7ýÖ£‡àzÕŠ7ñ$ãñžÛ©ßþÖtÊD#%@¤Ö¾?D‹R^ˆ}ÖµÓÿºEA-³™øwPÜò[¾{8·K•…oL’‹3ØlûíÃÕû1ËϨäé~ºûýÔÏuR‡‹ÑjT*ýL1'‚¿}XÉ)¢ ói&;7¿cÓšzüºå”sh›¬nìê´U*v KøçzLuD,ÕAÕ3Øþ6y½Ï”UqJÉ[©Rp:ºÇy0Œ€Ð‡ÊGïÊ<­èø…wáÑ Ùdû_®íñ ]âýgOwuÎ5‡“º õ¨ûNzÔý'îÕ"¬ª=7í*w™Î(ØaRà“S‘¯Ó½¿í<¢HŒBè]˜êõM&UND¾¬¬ÃÁJ j¥QF ¢š–^®Ý˜J`‹/úر/SN¡Ѩ!±ótB°CˆÆQ$7ª *}ôö¹Ì†¯|ÈÖƒÀ:s¶o ÌÑkíÞ\'Ûb ¦Hhí€dº¥i36MA·äà R’-½„ú 6¿x¤ÃÁÙskb{:šƒ†Yb0Üž[oɳï(XQ ÄtHüÏà®HJÅLÄp%:¯äºó[†éµC3ÛcÝsníLj´‡^ྡ]Å}N“§ƒ–TüiÔ¥c©R¹zX§#¥Ê×ø¦’ïlÀ2üܼ‘VÛ²q#\/[ÿ³ïÿÒ4ùÿ(Š^ùG$\ål|Ê úǾ÷çaHng9¥“Øu›h«_VïÕ±™˜õŠ?|]Es›–2àf8ä"ÂJšÜ,çný|^=v´êus ú ªþ/Jp±~¾0O¸0ÏN,!Ýgâ¦×îÔn›·Î}¤Î|-k嚌ÿµZI¡Ñtž”ÁÊä*Û6g¥Küj=š”áNãÁ+ÁyºÐOÕ¤[¦ý÷êq_˨G0aݶ÷Ê€÷ÿº]¿]‹ŠÙìW»ÊüEoP«Å?.d.õ—öX#ˆ¿ßý„KÝ ®©vFö…&N½N×_£wŒ&þ-Ú 8 Ö°á²ÑϾ0Ð óì ýìk  %•ò»þ>@GÄ”© ÿl5K_Ï*­h•›Vòö’ªu£k¨ÇúØx¦‘Ì·Á£]ýFªJVÙèi-8"£Ìú CS"Ý@̦Œ|XŸ·Š(p—³û¤­DmE¶à®£ÐtMs³ ÃÎc·EÔ(Òe…Ÿ&rÝ &QS»2Áevÿ#JË?Ê0¬@à“2G¡á!ŠÆÙ–„„ròKiçÇ©:öæ³à—NFÝ‚å“'N“_Fýÿ´½ÛŽÇÑ.zϧ(À?6¨µiI–lÿÀÚ £RkNb“”|Õ¨é®é)±ºªTYݜѕc-`í—ó“쌈Þ#÷ñƒ÷˜þxó¥Õ±ó8»vO ]fN¬Oщp›/‘t"§ù#„¹,¼NÃsN–½2S\Œ ¨ B!Öeeâ|jÖˆvT.²ÁÜ‚O c„ª-WëM7®´ÿÏéa"…&Rm¹€Ø…‰Õ´"1—˜\ÖÉU^±>»~k¼:Ä”¤,Z>Ö'¥âBJÚ S‚P?t#8¨!#ÊŠœ’q8îÛ<~û–ç¶o#^{¯V{¤dœÕýÛ8Ty¥ã"}ý2À@ï‘XÅâ°ËRkq¾Rª”A©!£ŒæÙ¦Ì}ÝnsvÁ¨þ »¤¾‹W¨ô4Þ·ùlfO×Sh†—{Þ‰=…!٩΢çA}nS6°_Mûî‘èªARâãª\ãÔèGjRÊð3¨¡ˆr¨òÉ kE÷%!Šew7~Sz ñj§0ÊÇìe• ž½{•…ÎäLo¶ýðÆ5În  q´„uWðÔm"Yô±f¿Ãi¸—Øm=¦Êxx†7ų”)j’­zñ="¦r ¶þàø =¢ÄS¢ „.(›•(Áé\ºÐ誻âòýù ö.KùGUºÇÇxœÉ''Çe’p Âñ9ô’ ,J›þl®²ÂGŸeY;7ÒAfƒWH3Ù Þ$’±|ôÃ¥i¤zÝWÊ–´',Ú²÷Ý“±@‚aª,[™S“– +œ‡*òœÉÝ—œÊƒBNæE'7™§7 £3•È“¶Ó÷„L¢S¹ÒÐéliÔd¾t~Œ­Ààkû5Ó™9Vl|þËR>h735êýÅÉU@në&0D6C3–âèÒÊQn" ¥9'§aN"“ìU)ëÙW׎r¼ÌÞçãá†.F³;} KñúêíÉÚ¡öú”Ô~ìÔNz&¿H dh1G³<±‘–Ÿ1-ŸÈL“LHL jA¨ˆn˜L²d­,Љ àEõ'fÃ•Ë bg³DIfgŒ®ÙÛÜ­·Ù”@õ–›DÂIÆrI*Èñé£ò{&œqS¥S߉U¹n2)û诌]ÈØ˜¬K3I4Öª7Ñ”«à€h>É4AŽ\Lì2$0QV’ò y/ðe§Ü$G,OÏ_-µeßÙ‰•W Îû2“lˆ¹ªî}S5¢Éò|}‚TödÅkmwüŽb:I3Á1&¨#ÅZÙ.øµ«Û/å"̸ˈyöÕ±d‰c@$‹"“…«w '­4ÙþËdêC’ÊŠ`ÄÂcjà¦leñÖÚ¡å…NîóX¹Ð€FEŒ0”Y…¨·mA±Ê5¥Ó‰oÚ\>mŠMËpi&¡‰Œ9$'òÔ¢ZÕN2b#ái‚œH@• ‚D¤½’=·—FŠð±›‘›¤>ø«°TR3™ÐFѽþ¢tîÖ}w Èʈˆ ‹é,Çr¿”ÿt=nx+/¸¯No¬Åt›‚öR{L­à…B¾ ”ªA"Éþ¨´þrÃúq×Thú"“v ëè˜ªŽ‰I¾’Q§¥»|môh¨²þaMR[4 Û£I³f$â„X "âô]+«„q‡Ðš)Í.gÕ„T@—Pv6¢&—:!ì&ljÚRgÐ2Xž2O”¡·<]ž£çâSM5EPoWfr à!M3Õ11Ù‹óWIvb-êLf4dQ1#Mö¥T‚Ú9€úµ»ÍÞ–KJô$‚Û„‹Åc²ÿìnÍ^›%™y݇Ôâ ?žPLhö®’ß·«ÐéÍErÜ· ˆI*1f’ ¡ï®F»²Ï'´+û4Ÿ]Ù³tv%ÓX%²ËçC³‰$IÄ’ÕÝ/Œ]7fβdÀb" ¨]4 £Í2Ã=«ÙÔwÛ!óc„ð€<ÄÁ舌ôJ¢ô$V;–µÙõ’Èßh Ð Qv‹M‹ÅOó ¶p@Ý,‰|^žaFñ,7ŠJ³£xŸ^Æ+¬4ž¡ç¿¸bD³.šµz‰åÓÎ9À`Ñ åàÃK—¦>¶PøÜݤ6µ™Ô2{I-·•t{4¸éá¨Ï8ÔŒ!ÿ0Ó™UxÕ–;˜£{ s»Š1ÕIŒL÷02}õÕÛm¬Ì»ÜB8ìR…pØ1…pØUÉUÉÕûË ïzóÔ…$úì9+Ãñ3–©MbŠóËâJÃÖ²Á‘Áñ#X‡2kƒáY›èiÖK ³¬±×ÍíÄ|pÀSEFUxªïR¶· ³Ì~ë„^±þHH\%J/¨ù5I˜LrΡ–Ýz%Uü´/¸+×ÝÅõ:ë†v ¹w´$K{c[¡ÑL~&rÁ¸˜ YáØü„á–†ñ‘÷¡‚6hl>Ô„d@Q#¹PȈ0—\Lßxì“(cßIƒœð)*rÝ®ïâdæhZ<ÊÂn.ÅyK$Ìeü¨°\¶e¿«‡!w3#‡ù0ñ1q•ìÕà®Æ%B|†ùÓ§~É#¿Ùó>ïªO ê˜MB^(E3±I$2Kš<&?ºÔw}.ß]Ÿ"¹ëf;nï|š'u u£A¹bËdÄ …ähA ˜§ŸHLY¹ŽÐw.·̹óÉ8;ï‡FƒéÙ™Â%ú'“ê¦Âë¡§ïŒ,Æ’© rÈtöœä&2G(t>5øO W.ÀÄcäØl)Üp‰L¹I¥²´$Œœ>uð=ž¹9¢ÛGù÷U‰(ta‰½¯âŠsÌéÊ’½¨²­»¹)ƒÑL Ȫ†_d »Ðù%ÌæÐ'7Üõëä+‚àñ.xïŠM÷±ÿÆØ º¾‡¡5ïªy}S>ÞvÝ«8¹jÙÇÄW_ýµX`B+âòƒaS¹E§{`â ’×ù”}%pÒ|,î)gòrö\6;ç…]Â…‰A:iøÛyÅWPãÐjpÐÒËaƒ$·-W'7'r ¸nöÓßÏ”j`¾ü;x  h?1W§ïžÉÞìhd8ƒ ¤R‰kWô Õ‚‡çŽœ€ rL§âõÕgØ]éÐ… @dÁWàeT¶¹<³°?íÁ5¥qÁƤ†l(Å[lËÚ*=ˆÞRG0YÂ!Ìj `SÚè¾BË'à¶ 8ô^£¿Â¦R—O¤èvnçÎÃX[gŸŽ ê“÷Úß¹2[ák…vzÒŠnÂ(«ú ìÀ!TÞ<ƒ´´â“wî–y ”*™æë#1`Kªùšçå ¹Ô.ÊGù}¿vÎÛR¿9†â7S¿IPü&Añ·-§èÕí‡r»gæáRîñ¡ Ϙ 2/ð ™âL‘j6ý1¥ÆÁŠ2:Qrž Wvg7néùSø)ÚYdYбˆŽÞ·ËãÒm·Ö'Çç0¢pyßU%Hô9 zN}èîµâ·rŒ€ E¹¾/okÜ„§Q lwFTöó}h¿ûÐ~ïõ¡ý>чÆý%zÄæ¨Ï:‹žåÄ€-9Фo—¥+äYo#oç7ê Ûýn%˜^__¢xޱƒø²r\^ßË jüsQ6þ‚2qöÂÒþ —FÞs(ÔzùNÕ2ä×Õ“Éjs„뜾F½³_vŽ`RåýæÈ©Ã §.‘ÏêÃÇ¡2퇧2TG±€·¥†*G÷ü®PÅÙê©;=ÕÙêƒja_šÉé!Yæ&S#Qíx–w ‚½ý^zpï:82“urÎH¤q”Z# }ä5‚õÚõ.ïÝAmX€ÑÜõ.zyŠy.¬#l;h¸ ì>Ô¥ìZö½)7u§E {}öÍ÷©¼è3³)ó}W ¹ä.4\0«šQÓ÷+¹°•ÅÜåfkµôý¢ZPœû©ïÙèbYa›Õñe™5ÞB\Î3Æý›ÛdvÛLŠ»m‚ßn“ÛmYfú5YØóü—–â±]ß]ÛíeèÔP¹­ö8Ìïü&Ð moß7c3 ÈBo…ôÏèñŠþ0”¸Þ­ÑY؉›%:å¤ÝÿâùÉå_øùl~¾4“/ˆeóü‡éÚÍ~=šqý»ÚÑV††àÏœ$ö}f&ľOd@ìû˜¼l8u'§L-ßoêQÎh3¹ù蟊9ªˆiž3ðp»Ô&2Þç²4ȈáxϰïYfpµG~J§f÷¥°ý†Ï ƒêm™f¼Ýà Wÿµ†'À²Õ¾=ßÃQ–\ÆN5¸kJqŸñR&‰É›ø8&jª:,—gè’¶rH’aÏ<‚6 Gq1e7t‚”BèV”ª©`%6¥ƒ 8BLÄ'Ç5A?'|>G¼)8ÃÌ?à'Û9˜“°¤'"Ù[ SBgzaÂm‡°‰Lñ§‡'š¨”âXû˜I 6„Hd"çù+\‚ü¼*õlS¹ð)rg'´µU“鱃…u·²›®ÚQ[<¶iÒ»œm—”@H^ˆÛ1‘ðäï.Y9y› ¶ò´˜¶ˆ`¨Uh g³×bp¿Ï\þ÷ˆª3Žþõ:Rò™«À…Fëwðµ7 `¨d3vœÏÀß=ÐP,¿Wò÷½ÿÉ^ÀùyE§ZT«^¾=½¾zex2çr˜æg9NBÂÌy„Gšô¿™Ñw?žZý/Û÷xD†~õe,Î×(ÃÃ/#ƒð˼|¨Öp±¡Ó¶¡ñä!÷[q¯›¨GŒ½lJ@Ÿ™L@µ|­sµ\¾^Áç? š}†U³fuì}‹fˆyß§+2-— Õ.Á‚b±†ó¾Õ,?Î:ãJã Š_¬ÁĤë‹ ]¦B_C—G “QD>Çœ;úI<Ã1¸‹‹NsÔö²\¹CŽÍÉ´CòØœd„§iô“~#¹Í­yþ™Ç” ¹ÄiõÎ}¯h½n>‚\½?_^¿aWìH³Ü¶€KëÕC¹ë£¼3ltöý‡z«¯ÿü-Ñú/¹ ĤНÿ[Nçä_õÝ#Îèõ?ýºL]tW Ü×^H ,Œ‚ÏÀK¿ Ðþ–O£ñ…\›ªÄä_UÓá9¼j4Æ~ ðØtk—EŽ’0ª}…cHÔí¦z˜Ö‡JúŒTËÑáˆÂ‹ ZxÓØ™ÁÓØÒA¼M€Æñâ¶õFÁuÕ‚Ó:-A$¾‡0˜cXRÙ]=ˆ1Ø%ŸÑˆ(uûºÙÿêöCq®cf”êZ˜¯SKJ0çŽ _A¤Ì*u}ðÿL2H~PHú~ (²Œ]m¨íèš|ä7ÆC‹]µ©Á"Ë1ŸšTŸ zìðØžMÊŸþèºnê;µµ“¥›#ͯ»Læ‹Zg :Îr*:H9ЉR5¤o¨«‡Q&Võó—‘SÜéñ‡c] ¬µL·3KV6§reÖ#§—½+ãÒô~â:áW'?q)&y†•êæë…MñVv³kqT{È-f¨Ì 3óƒ “Ö¦ºÝoWr©´§ð÷]‡->+ë6gÁÊù6P#Å3øÔD(eó<¥Ûðî.ßD ÄògЇÔÝé5© )8fâÒŸ°ó£µœIÌÐò°Dàôêz™œ ±²›ªi:ñÕ_rui¼¨›¦¸^Jñ'(ýî8ßy*¿{ŠÆ§ñžÆ§±:âVæ¾<úVG¨1ZŽVòp„–£æ—cõät >˜4§$?/µÎÊùÑ9º}çåjRx¥Nþú¤Òùëþˆ:‡`ÒöO”;6‡»j(?Ô¹êMú.Iò(mÁio®Zî8ë xváz»Ð=b9Ë'–ÿ}Í×=ºGihì­iìWG7vz ž¯KãÕT«S4GdÁ¤myñËâX]‡Nd«,iz½LëY•zÊ8·…`;Ç?™ý-û óÎLyÔέGA¬ekêŽÔ‹øÏj(CíFm%0GZš“GÚMû¼îimö¹=Ù©ÕšúÈë3Z,PÛÔÁ5s·"MX¼ Qx6µéøIæ’Û•žðçìp¥§ü†B¡‚#0£#ï³c·:°eüð¨Kù³’%5‹±[ÄÂSãP(ê’û©ö¢gT¨/RÍSãöÌ*…¥pÜ^ÚJ/ЧÊC/‹NšX"C¢«¦ÞÕãqåÎéY`:~ÁB#rKS6›æ±¨ïŠÇn_”·¢käP!Cv{12œä—ü¸’­®Í©¸œ …NGß$‚ÀBæòj»Uy{;T‡š.!ég|µ(—aÛ-¼¢¾kôóýc±épßëh-zÏ¿$#uC5îÙ/Ý—í¶ÚüÏqØW4l˜Tåp¢¾‡ø_^fz2à]×Ó¸» ÀFJYð@*ûð€l“÷Â0whatôÆ0œ&øúô¦xðâ„àÄ”™£e"’5zÔV¤Š¶pr«g vt í¦r:B“ùFã4^Õ̱®Odˆƒ¶þ­Åÿ´¯†Ç@OwûkE½(˜œ¯v·s]#œ£Â½üRÐdV ¢)푾¯sò‘¾ËcÞí[ ô5z®ÜðdÙk µŸM^Π^QWîŠe1tºtXÁÀ‹îÌîCã=Z#<wºÒ“3Øý¢­r¹Tʺ³C癸2VgüÝ™4tÖŽ¢çÞ´t8êò‹ˆº7ÍÖÜ®‚]<Ÿ0ìbÅu‘q©=º„…Ý3_ø{øÂ0V£cT:!úAYÉcz¨©þ)Ñ;eöMQÏ$†C6­ëÐ’q-+2Ikùæ½Ok|Èä#¬CKÆq´¬È$- óiý>ë*@9T~wýLiØìÌïwò-nêó YH´R ì#Úqý;0 ¿Æ®¸«å¼w1á™|“áq2«BkƒÃBÅ>"¼4ïrÕ²ÿYÛ­Ð~Ï'ú³ùög`Eõ¾ÂÌ»` _U¨ižbÊ¿Óo)^>ŒCµ«ð2‚}Eщ<«ÒΡX’¶Pê - \Ü‚ýÇ$‹=­Qô”áhà©èÍ¿Ý a.9ï•–ºß•S¼Þ•~äÜemMtìŽDnDtîþÃ)8Xʬ)š H’*›?âí‹3G˜|öÒ Â'ìG³%›ú'¼nq[Klƒ‚½IÒ‰û¹Ïz~Ñ{çcÞ3ÁôûûÌ5Äý¹¯8IÏÞp°>§¼ÈH0$ì§t¬›ý}Úpü´þó¿ ÷ìg¶äú`3®·Ûp½¿×mª?ÿ*о\@;…ôÝzÙI›^~𦹕Q‰>Zž¬Ò$ÿZ)ø…ÚzXs£·<9eÝ7£r$B®ÔÔ¬k¼—Ó®í= =kE—eñ!„)¢ í; koC§µXwÅÕòÚXü†\ÒÕ’PǪÈ&§Ga–MÐ# û-,—Ø»¦~dØ)GfS·—ž¶x”„§®/™J.:À'ô†ŽÆ0õß`oe¶Ü]”MCÝRÇgËÆ¾1¥JñnÆœNdUâm G#^Ä…gµ€†-’:±ÖÍçÔƒY½ìj¦Ôý^WèD“ús1çõE½B:ÿáò&íÅç±ã9…LbýéU&+Ú®›÷Š“‚‡ttt\B:&&hb&˜‚i:¹ í2ºöër¤¸EçwòVDݯ‹Û® ½áÝÔ* ù²øP¯?àer­‚›jµ{Í3¿ÆMT6¾ž±U¬¿5xzußE«+«­ýÝ1ì†-ƒvØ6_'غbžôòQ.A¿vŠrbºÛ|sÓo&™~“búM‚é7®ËŸedšªÛå6£‡ò.GŠðéQ˜gæT/ÊPE•'œ©’œul \V®k{ ‹|ÛGƒìlqåø·.±ÀýÎuqÿðyN7¸ã͇.Pð¹Lº»Ú&ì¹[ýcŸáp”AºúÆÞw8ê½îèêíMäÞNƒ³°ºµA- –’!A5>æi÷Á ‚ÃrèzgÁÜ>ȹb 檇`_1„xã¿ÀÄ3jˆe/rò†W~P†Ò¬Aþ°‰ÉÏúYg!×çº ÷÷WÁù:ÝÆSÃ9YºP\ÕДÙ,ÞåEñܶ†/êß­‚ÙÇu þDåšêcùX\žœrK¾Þ36rp‡­ŒNŒŽž Wž7ç—Ó‹Í"ÆÒ HÌÔ/ÅÆ­]òéå(‰H ±§£Xt¶)WxyT¯‹7öbkÈ>ghä—8ÑÊÆ,hÞ¢Am¹^_ß—·uSʉ "”Ÿ‡½ð«ÚÓïçøËåø†oÌ•ÊÁ žÁ·UFcŒÁ®VéŠ ÷—*2|¡#¹óPÁújž‘‡sÈP¸Çƒ‚Ô•bü³ æ)JuG‡”Ê}¤«^ÅøT YT–ÅÚ¼¿DoL€ûfkçm&Š÷Í|è™f>ô~3ÔesZç=>¬—ôÆ¢ˆpÏޛʉÝ~ž‹9\d ÇEþ&'Ld÷ X^¾›Q­‡Îë÷‘. íœÔc¢ÝŒº÷ÎT˜ÐCƒµ«Qª¥µ¨à¢aµ1[°šæ®w®!deðå]ïÜ>ð‰»¢^[^]Þ6Š:IŸ¡œò®Çl~.:f‡±7Œà˜Q<ùrHåò‡ÐNt°ob"Ê ­(ÒtÞý¼9J<¤¥£cj:&¦gb  †]Hpd-ÍdçbCjóÂà˜;,p`Ê#á@CS€Ð˜„ÒFŒò“‚·ÉQG}2±–Á)F»´0v±>3GÌ#§æÁÕ*ôaüËàb]f&Îçe‚ýí+Ø*¾.œèpÔÍñ£á\B¾¿d uûTœaS¨»I™ÞSÙošÍ1spï°„øÄ,ÜõŠïÝÙÅYj.GСܹtóHòÔBB1 ngÜçÕùfµÀ ñá\Óýz5׆þ©QÍŽ}pjë}ÃCSfôŸÊ!¡!ð å=ž[µ~}Lâà.¥~¨Až GÒ†¾¿9庅Ü#@Ð HxªU}Ié•ëýœk5ÎÕ>Ü…—hê£7¯Š“WVã1ƒúÃL| s…&J'‹!Ë+`Ã~•”ÞœóZåiÎk! ø¹çµ‡±_m:ØÍ`b]Nc¿ 8Ÿ™ñù½½)T0W6R¨/…ø8û"0xéØˆ™Žˆ¸™ˆ»8’í2‹ÌÜTdDM…GÌt8Gìú×ÃXåT¬ëÒ‚¸Äù¬ŒˆOÊ»¦ó¾Æ}Ù¨‡ÅËvCËßçWï_~Ñ̺VÄâyºá#_ÔóŽ\jªÜ #e$.uëcL«vk¢Ö­]Cªï°Þ´à]ž¾Û×ÎÜu_µËûún­S%ÓùÃDgˆÎlzÖŒ–L¹^ÖíLò.Fë¨2Ì*Bˆ«M—èiÓí7æ‰àó÷§W_@f¯OÏŸuwwàøì›ï¾Õ… .³Ê™v>'¥"j!Q ƒZÊPN%c.|¬nïÑQÒØkºsª‘Å) w•æÉS§טl!“¥ÄgÝ}9]¯€¢. Kù·ó2^8¾çík zÖ5åìHæBvé«uS•CdtÖ&ŸLgAé,0…Içúâlusñî‡ó«ÕéÉéë—«Ó‹—'oί~x&;゙_ÊG0¥‚½%¼êý³}_\_ÂI Ù\ìv5YÛ·›êŽñVI,m€Q§µ0i-lZ×*²¸w…Ö¡÷.×] H]$¡ímâü1ºJ£l7˜Àô>Ðe ZɈëå3xF>_œ>H§]ùE©@^7 =ÁUu»oÊâ5•§DᥖŒK”<ÖjÇ8ÿ:e Bw*K¹¶¼[•-D»¼òñ\B©²p”æ¸pŒqVqà¶ÑÒS´‡‹—íœ ý‰v³»Hýaçj>ì¼ÑNö^ð ´nñ—›uZ‚š%7]C÷ý9ßX™¤˜ôä+«keÝ+ð ¼ö)MwõP}„»a>¹ç¤BíøçN&X‹øêÿùªÐí£ÛÊ‚ËÞ¹ìÙ˜– If¡11e/ †°ãI¸ºvC︒NÉ…´-.YÚQR }‹‰K¼ê¼jÌ14'ÒW¨Ð0R2†ºBÖ§Ë} –-ë>—u€øb<ܹ‹™jQŽ#Æç7nï“ñ¦.Yù¯êB!§ü²ØÈ1yè¿,ð²'üÓõ_b_=è³D #§z~ŒáyWîSI7á‡}0©“þ[[0¦§’úQ¹Œ5‹Ý¬›EfiÞ¾˜;|×`g“f¡_Ýèu2½6aópW”Ú¨›N†A)TòN’º«àpS®ÚšMq(›}RóH åÇ#‰€HLF2„ë’KXQÊÊEÆÐB«c0§_W°_•÷=§„ Q´XfAÑ×eñ-»º³4Ø–Ãå{0wvkS&ruÑt^¸äç—ñ³`0|‚$ÒãKxŽ$?ÆK-äÐ‡Š öô¬Éùì\L‰™QÐ…µJÏå‰MÐÏ|TöÔI¶þ\/Urf9žÎô“²›•Ñ™,z; Þvÿßdàný„ï•ò3p·žþFa"Oþ:¯ê[xªnÉDŸÈÑsdÞfr•Ì÷)X’ì÷èª'}‘„XȾ«æ¾J˜ÐÓ¿Ëi÷’û]uä骙OÒUéÒU“ŸÅáÈ|¦ÛÂK: QÛ]ÊsCþ·ÉLÄÏ”Z¸BÊßûÝæ”äuëÁ¼ D‹s'Qm¢1Cñ'ΑŒ] \=H甩æî<8qÉ®))?ƒæ=xxá>t”LÞŒC×ñe5ò96 säÓ´Ýò}ó’£Èºz"=ÙË ±øÅ©ð™,~pŠ;€x¸ ~ÞMž™í¢€(zÌt8%å3pÏ€P|ýŒ’yRϳ<¹RUÄ™ »I›£¹¼¤sÁu=¯ªÒböóoýÑB7c߀>§ïø9JyÙæU ï¥ke)K™’wÎj¨dµ>µQ‘S¥SxƒÚÛªq$šÜv'¶5_N²)Fh ^3âèY±r”ÌfMÒ ÍãñÁ5I£AáC0¡ÒµÅeÕ4eÛ=×Wÿú%zàFÂû»;ɽïº&ƒNviaä"}zV(¢‰QÅŒ"6Y†]éèÕ2ðÜyâ´a¿`Ì»{âaÚ…ºŒ|Ó..ø‹¸IÍmÖÆKŒó˜¹6^¨Û©ú…“0ó‚²9Í*€9d‚†¤)[¸•ù“ i¼Ã7™Àˆ†;°šÐ»‡®Z8Ï)dÂêWwµXå³wYhHýåè °„ÞCDDçˆÏ5ñ¥øÄ½Ý>÷ngÔªì7ñ)´Ã“{‰Í¾‰Ï!ýÍQ¤¿™$ýMŠtîóøÂ/ä KÓ!ï‚3_ÈçЄgðÇ”,‡wIÃúDéz¢Ñ£z§„£K‘¹ɣϓ©Î¿úÏ`µ+s¦EÊa¡+ð¶9-ê‡nìÖr.’I¨)·«ºÏ˜H—˜ŒYÈŸœ‚{]ÓÍEñ¿ë¢¯äĪêÇ=Ô}&ÑCÝ'ˆê>&z¨£1æòâä‡âýyîDó0s‹œs¬Ü^K Ïâéö<¥±‚ÙÇó!ÊIÕ}ëúª]Õb-fîΆ0¥O/0Øè3@7óõòty®üÞ(¿×( áÈáVlVý‡í, gYÈð… wi(¨×Ôµëuëûûåjßüº‚!òÙÄúY,ÜrÙüºp¢]J¾ 2û¹nšB™a‡ MÛ^¾gÿDo´€Ûµ0†½s%´ÀTÕÊ]g¬ÆörtúœåR'==¶!6b“5À…h^;£©Å‹–ÀΪI;gwÕ€cNOÞe $” x Ø ÙÅÁu»Ï\˜þ¦?[‚XpÔ2Ë"ÄO™Rœ¿ ­EBEÎV´£Ýhóî#Þ6ê3.B}ø{”7%%c‡Ð ü(CNnÎpÛjª“iD=)ûUJR+Rýæû[¼"‹ô¹Ôø…q˜jÕŠuÙT³Š]T¨ãv {´ÕÇBÔ¿k¯„gÆó÷—Åùw½.%Îüýæ)ÍæšjøNŽþÙÝeq.Xf{úèP÷èoÅíÝ5X™2n«:u¬Ë×dArÀ—¿ÊU ø<†Ñ‡ê±/g øòXŸ—Š ©©`ž¾¹ [ÀꆨÄknÍÊ!ŒÎ„3H&…\¶ÍÂ-äÓŽ!Ë&Cw÷ÅŽí=F.—Å/þö/ÿà ÙOîØ<ÌÑO3÷ ]ò YÐá̳ÃÅ탞bà‹W åë©“¡e½ÅC€7Õo{4Ìôütùæ x.çݘ)Ww'i¬6÷¸Ébæc}v*.d¨‚y–gõÝ]]-^Ëéÿìh9ë"%ÞX‹¯¾Î"çA}nR£PžÙͧË?ÉÈrXßׇÊò¡>Aöùu—  [#ƒ$’FÝ}y}–“БÔgX' óåË“ÃN6›[€¨é؈™ŽûËÍôõtˆUÂåKtG°Çõ‡Ì¥1éÌ©4b#BŸ2‘vµOiªÊ]~"çÁ#½?Ü<¶å^]èÉ_¨H'snf‡ËõP÷cñ’"þ›¾J ü¸ù*ˆ„zƒùê¨Í¥mü|õ@6 V·C½ÙΖ,ÜRQÑ Šv+ª/>¤.KŒ.(ZxÔ6·Ù´ 4¦´¹åèlnƒÇ3²¡X||[ ¿¤f­%À1%×þP(”,!ˆ¤òù8À:§ž'-±€—„³NDÕŽÊϬµf7r¢wëFíÙÜÐfM¡¯UéþžT<¬Ö3ö¹|ŒVô°X[{\ Búf ¹T~|ƒË0 í9só; *ôç×7¿||þˆ„>óü ð(|ÂéAÏ@êC¹nþˆ«j˜n΀@ŸÇ“û~Wi¤Ì´Œú:Éœÿ×mÓ Qê¾Þx}톬±óäqä Y_ìÓœÎÊ ôd’u‡Åê‚¢¸ð^Ž/âuH**y-G‹f\Íá /ÿŠŽ'º¦cjÃoÐ’²lñð>Q®…-Ç?¢EkæYÍZcFŸÐÀCŒ²m©Öê©Oޱ‡[Ùlä\œó®­6›Ö¤õó}9oïkPjãõyWñ\͇„ìWżñw£ô Ïໂø7‹å,ÇîCÕ>#¯mt={¾Íð`£›"ÃViWÎ<ìãUÛAJ]¥w>g EPK§«ôî¨KÆ •“ÍæÅpíT§×/ EÆ¡(;ÍÚXíàŽbu Ç@†%«1Cñ„ø´²lN%ñ1¹ÐU,šWŠÈ&ïU;?Ý p†•wØè ¸…›:Qõ %G@å=b±–©ç²u‚CÆyÉä5eHQ¨CGY¥ŒŠN…SÁáÛ!Ùªóøe=füv=\¾="²=ö}´VBïaq㈎Êë½YtHJDýµ/vlGÝc2¥îPêÙô×j‰Ê(=UwXZ¾©ÊUz6D¹9Ê Y@}W¿ÊâÅŠøüЮ „<ýx¾xÙÀ`/]Ù˜£è¡ + uˆP€ëAW–œjên^%@gu‹.¢ H·ñ>÷å$±0éNo®ˆÃPå«·ÒÓš‡*CiÖ>Ngô f_K 摤ðßF û$Òëùtgל- ªá.Õóá™GVw!ŽÃu3žîbðx„]¹ÍŸÛæ¸Fø§4ÂÎ@q½Ã+ºÔH·^K;ýŠ)™¡Ã†W®×s¿RhK‹bëôIJzº‚°.żïÇ€#‚ÑWt…Ž+”°G5“d‚^DŒ/±Gñoûn,çÔº £•ø›WøD¡º¡ZÃî5›ÓhÔšGµ ãÕŸ]- !¸ƒ>ËÁEYêjÇ€`hÙP3ÔV}<–ˆj½‡Gy{S,ÚPÒ±Ñn•/öŒ:V¿×›híþa?¿NJ‹¤x$Is€ašvõ ‡êÔÝ|}4vP®g=8%Àe´¨@‘YGÈóeFAäÛFuUçÚœ.[/rM@ˆ ó‚7ý b³³–î_À&™ÌºaC–q½µ"|›VÖ9·f«UÛø¬Æ®:d’ à!/SÓ1‰áóRG×G}õLÒ<×€"³­x“C×ìwU&!ò¢È¸)œÊo”Úï%Kø§xÑÆñûËÿüûÿЧç3 KitÜ1jPx˜ðZYaËcÛÎWʪÃPW„ U(ø{l㵤%‘¹ðåÀ¥xÙë ;“QÂÏ´7©,š)Ã0‚3 #Bƒ0G°CT†[V—!}naweáôi…èÖµ¹Péo‘,XjÚ¾kÖQç¦+pÒŸèb´¿óÊ"g»3úʃmN>¦½ß‰Îà¢ÃîŤpM÷¢äd`©œÌIEgr~€îÀ`ˆ~¯ ¨8«³ã{¹¨{súµ ÷­[¸,£º7Go–3Ó$f›ë&¸Õ-8æº)u¶ÝXßiÿÏ¢»?ÂÙ™è«JŽxâ±ï+x)4SÙ·ñ¾f-Sjÿ¯Ð…‘šÁ 0ÂH¥RÀ𖽍»x­W<ñ¾0$fïì.tb×dÜÞÔ¥p¥|ìºF¬ÀÚ“\«nÁi¡¯Ý섽Há]í»(éE)¥FêßBDq"[ÿŠPúeîîövør´kÔJi,tïÞ\˾©Çâ†<ƒ ZƒLe5‚×û²ÝV¹X²ªe(”²Ý°’R›FV¥W¥¸Áÿ¥¸P)^ST°·÷d‰WÆÂɬŒ•\îÿ€Ë‡ûœ›‡{Gý“ï@]aº5X€­›nvÍbmê5Xž¥8Ówø"^öþ5^7ÑQʳ¼fdO…`T½wΡ7%èqõ€æEµOœMŒÉÅ…Ä}ovEòR㪼»«ÛÌ­Š´€æ. fRŒ0q¥xÙ})Ÿ8£w.ä*«ƒÛ‘/Þ¼~’FŽ9SÒ916 &«É„2 …êœØlb‚ÏÙÑyšÍÍD>f>ñd?G_çƒëQík¶´µÈ´­`[´ø™Dg¯k†0{iÓÅ$c`ö«žúʈ°”þ€HætÑ5ä—pöÊH¶TÐÑå)%…Ë3“a‚[ÄŠ/1ýá²\߃ ^X[›¸H‰+Ç ÖÙ£]¶Ë¥#†ÜñξB¬Ë¶¸EƒÁ4`›_̘ªðò‘›ƒ÷˜5€ç˕胬³m ïyñ±q~G0-é±UÈ…F²¥Î'wlmÖÉ:‘ÌèS²˜“¹élñÍ!¦Í}¬lŸ ´Ë›ó’Š[øz7ÒI'—fŠ`L/Àô$oå–Yvá %¦Ä¬Ð±¦üÍÚT2&¸E¬ø²B­É¢Êº¨—‚G”‹{‘`𢽯—¢ÚïrYö»Á~Çpëw<­¾û>»Ã °2]šbì†Ì÷ÓBqJVH/‘c+&¸\R¢x^öh\è–Lë?âýÏۦíMÄ|¡²¬ÏwWãc_eä–ûÕñ ˆ÷óè‰ò_KQo%„ýD»rqmŒƒº,e”‰Ìà¹]žœâ2žÖ<›˜„£›œ;ªD_¾7¦ôš«4áC+‰wYð^³bÑc룽륕O8M•#É3å,i²_‚÷.Ù…`=võš-D-rlÔ|{§æÛ:£Ö^µ“<ê<é._”±zèJƒE[À=8—®Õä–sBÄen!\©‡ [øV^Ĺ8Šÿ$óçÄPf9AÑãQê‹ô,Š®ïå–xŒv)Ó­?¦œ±c‹ø7u=ÐI'—fŠ`L-½øW›Ä‚+¿ùcòæòŽÈ §ƒGá±¾¯$Öñhû9§%]¢©½a3Ÿ9‘ÜŸ¼°I»ìÚô_æd;;sœ€—'}ÎeÅþÔNYØ3s?õ#r1ÁŸež·=cNóÙŠ¥fšÊ#`^§–ò¨«9®™ˆá³£p…ÅÙŒ™ÈÜ9'Æe„}à™LèØú¤³ižzr)§ÙÜLäcús(žSuÊL8öƒ°‚\&Œ¹…‰â'vìgÑÒ¢*´Ê·ô‚B²}Øá@„Ëêa7•IÀ'öb¹ËmvöB¬›/ÇeȈý¡Ê­p(æ‘ãi…„ø† ¹Út­Ÿ­íSµü3Õîû¬'ø²LùÒ ‡SÛî˜"νdʃ]ªÌUÓ@èØ"U·Mm*™ Ü"V|ñÑmJ¦¨ŽèŒ&:!¾óù\Ž¥šE’¥Ëš% wŠò -‚ûÌps‰-<+xt¢¬ðgsM²dø%Êñ2½ÿu€í…~èîê¬E÷˜Á¶„Šø9‚‰.åêü´Ð¹L¶ûiñ9l”Dlžì ¼Ôè¼;FOt£Ãª2Þ¨™ûâY/W¶»òƒì[r./¤Ð¤ÕĆ—"±À{ EÚÛÊ¡IFûâ†Ì‡h÷܃# â™`– |9 8ݾVk­¸^×K¬,>›~8vÀ·lüG_ï™~8î¤{£Ï’ïÇçY0OÈ“ïÇgtÊ3òø ¹Ñ “@MÕpŸŠÒ͸Puƒ@ŸÇS¯TyJydîu¶6‡H/}Šqk¶»ºDkY™ËROÍÔãzâ„Pš˜÷s&Ã9¤GŒbbè>e°7&À?DÖ­¦t¯(ífÜTyCbgÝSÑ/ÖEz‰¢x©J6ûÍ^Ö ²™sÛÁcµr·À8Ë¡«.dÌìËBòi»M¶©;òÞÞàãÈØ3)#‹e®ˆ„C3 O-$åÞd±Z±)UdÉôcÝnº ·jê]=;0Í`· `KAõ”]\Ôíþ¡¸9¹,(ÔnænBUG‰w…¾4ýN ¦;7»z®ž…8­§K nÕ¨~8HSBÌÛÍÉÕB¿b)×ënß‚=üR°²kéô7y|,0 $#"F2 )ÑC„‚8jå0åRìT'B_ qbSQ­T‘D§5Ûª…†A•»„ÑÓŒ†¾Ã§í "ù­r2/eDÕÜ-D½•ý½ëÞÄanürY÷(9ÜœG¶èq…ÊþªÃ2­a˦Üй¾gÂX“’ƒT=æ°r-Œxa£?ïê¡úX6 <Ò…«v›=Äq”63û3!Ê%³±û3F4¨¿) õJI¿ÇPFlš°o“©Þ† *"‚náËœü€#§ Þ÷Ó=F½›5éÂ]RáS¢0$¤þ¤µPŠD–—KëQ ý["ªÚh7øÀÙE'ËTv¯OoÃfæ€;D¹¬{Àm`ÈnÈ<âåü5»Ä­O*˜Ɔ¬’èÊÍú.§òúHÅT(é …¢ÈÓ³÷Á¹¦YßÏÛâH€]RéÙß…hŠŠà“`xQná`Ä~SYÜö\ý‚ñêF&8”»Ò½%s)ç&&;Û1Ã’5õ2£ã‚¼èà ú9|D5Âf]õØY!¿7SaW'o±l>™ß=€†\âo®²x|~{óŠZ†±y¨Q" òô-_/§#ÃtS÷­Ò¹`§°_Àxþ‚¬ê5Õ¦a9 J³ës˜õ«>`D×t«Ù¨áÛ·õ8”Ãcq}£]µêìgÓŸWÞþ¹÷ÝG§÷–Ó/½>§U÷\sîƒvÜã½é{ÔVŸ?âÿŽ'±>ç ú1Úe‚±Øb‚¡ß#Ó?'Wò)ȾdIÈõŽä .˰ õºL¡>íÏÅÕ¯~†e9‹ˬÉt©«Ÿ¶ DÊúïÒïøDÖTM°S5NÕ„šªšO7ÊñŸ©ãOÙÝ./áÒæ¦¸8w‰ú£›Š‡P¶ÑÊ$“Ù=sx–sÜQ{¢Y|Ÿ0(Ï™j Q>÷1d¬M°‡]‹Û¯”ì²ñ—›R.¸à©‘ìñ,¸.lšJöê;´ Y™”¦m”›ûn­ÉštЂ¦³0éÜØhT¿„h0¥„ÑÈbWèžìyG'@7¿a LNEàÆÏ›&Mcl> !ºb;fк9ysryþãõêõõòíêÇ—ÿZ¼{{½:9;³êÁcïJöLh ú©ª!‘…LmM[µ××?®^]¿ÕK«ýÏÚë?¼­ ÿ• ô¢w[›’‹¤Ãµ}+cð2 Ü‘÷ã=è“‘Ï5*gÞ’ªíÄP°“’‚~~Øèº½ªÍ€¨Éµì”Àî6Z­G2«®%ST¹ä ¥Í1†cä5#Lva‚]Kö"(Ù&{C¨Â  éÁ&®B€z¦7sr¼@k¬e¿´'h³-D£:ë”}ÐÖ8y,©·Ûè—xEg Œí†FC |fÒÃ@ä¨ïÚ꽿ë¦× [\ÖCh±ëFöº’#,𦫑EhN°3•VW¸×‡KSúMsê á;ýpõNÅ€ñÐz¿ѱí|AœÑ|¿ 9è‹$|†ºEèdˆ¥.(gxð—V©f“¸t»è¡.JÍT©­®Õ÷µç±jÁï)ûå·tcÏ™ Ù[‹C]}OÖvVc·Õ{HÈWPƒ÷±Ú==} øg“ÌsÙÝûvu[I _½)îÕw€?JÐw€gOßœÂʰg½œ‚Na P Ëó}åßÞá‡ü-%Ö9y†xéqŽ]=Eb]É¢¬;*9.Â?«¡|ÐêP~áÊ_{>îÔiÓ©QÀ³2×ÜC¡‚{€Ñt c½«àÅ‘£™IÈt™:¡›—o–çË·/¯Þ®N¯//O®ÎVoÏ/_^¿{ë«Ç‘hÝÜãç É-09žÊÕÕËÓ·«7/ß¾ùסÏFe‚DZ}Öo¤Rºq|7¡Xß Ü¢°û¶~(D‡Gjc\‰´äT°Ya×¹©‡O*Hi)¤ä—ËÛ7׫›“·¯WgçožõwÐfµnD*mø·ißø‹®9¨.àÜuãö³õú8ž,eÓI™1“Q/§”àß ’¡Ô‰ÐŸÔ a‚ƒƒ‘T±™YU[€V°±kgù·wó 9whèûüL «8®Ãá´Cy4E \kùåe³Øm!»°@SÃA¯½3âÕ+V{ €¿Õ‰ê#ì«ÊÂÌúËBöÞpôVÊ.ßUªé$Ú2$.} emß“1rHRÎlf9YŒ¥%Ã\f0A2ãë‹}K#îŠÁã`Ð7³ø\ë­£µ¾v-î =Ò6õ-.Ô6´Ù,êŠÔèK2³×`K@_­q]¬‡BTãëž»Ütòæ„gÔÚ`­Þ¢Âþ[!;·^öod[ZωŸõ¶ßNgÒ”`2#ÿöÊÖ¿:}Ù5rhÅW_çèSÍ^m!C–D ‹û¹+]Ô¡e¢\‚VÀ£:K¬0r8Î;ÃÈ9ó†IŸÊË\C]/¿,®ªñûåÙ—El u®Ù;£Õiøð#©õÕPUR[ñÿþÏâþ hƒ ÿœ>c4B˜£~ºsªÓåÏ‹]3dÓSEÿL¿^u=½‚ñtªëþ´“À¸§ž]©°…NäF¿/¾îÕªTMVWe+jÙ½ÉjÒ4ÇyÖ /‰õãFþ°Zä°U¯ÅÓWÂßã?6ÍMu»‡»0©jh°IáF/`ÎTˆÕ‚Æpç‰n_?- ˜ î;Q*¯Ñ$Œ%d«×¨Óž“3f))wËF©IËdïGbõ5e»ÝC¿«¼à>1:íLת¼P1…òžkUÛ=‰ã7?´^›ÆYÖé¼­ÜPÐPO/¸s莞 ;JÁA„Làæâä_ßî×û“7ËÕ›ëë·FxúV¡Éu¹9À¹ôf¦cˇŒr $|âpÇ¢*Áõ[öîðÛU-ë…€‹Ô ð ü÷~èÚn/б$tDPåoº¦Á|ÂÐó-C[ý»°É}Ú7ú§«¶ì²Ô!0RCâßã?N²²Òlpó¯lrwá¡ /©SçÇ3·skÀV´îJô„ªr’93~ ~ ñ/y>_â¼èÀÊ‚ú¦•ª=€GQ:fŸ7}kÑ!7¡%×ãÌé¥þ˜ü,GCˆüæV7C÷PƒîÈžï±–-ûu3K3Êœ¤2LZ'pAÿúIç&Ì&K‰zI¬ æ“D\˜$ ãÁö›J­‰t/)’ƒÄºÙo²Ú²/Àª^˜äÎñ _ÿï;ù} %Goìs•#š×L ‘·N+nƒë²Y]Ÿ7¯ñBU*v¡’3ݲ)ßâ•,úýàs€²j[gåÓ‚#Ý6™¥ùó™»‹¬w\³¶œ58Tã$c÷p‹çÿ¬Û_˯¿xìZ¹»íha¸Áäfá3Ì4„3Õx‡»óïõoOQžÑoÄÅ @X'Ã=[¯…}ʤǪ“£w!xK*Í•Åkι0‘ •Ø †«®Ò©e»› ôî¶GO¿¥rd” Ü\¼ûáüjõêüâíK9ÿ:}õƒVƒ™hðõŸ§eSTå_UÓá‘Ú8ðÔ8 œ¤Þbx¦·J»Ý¹éÖî&Å`’jœT¥c…­Á@˜bHø{BñÂ/6])Ò)`4%ƒ@X~žurb†_:Jë÷M7•–ŒVi?å0 ›dx:vV°v²ﻡþ½ “¯Z2Ò @*”,?ÖtüWÀ!ùÆ·Œ“|}¥Tßjñþ öje,é(ü±n«¡àðFŒõ¸+¶¼ÔÃÖõØL¤nA¤ÄÂÌá®Ê Љê‡úPË9XUTBδÜä Mh¶‡FSçDÜVôT¢v¯:kw:ÞÍPÞYÊ;CٔťڧaˆË É†€ñ”2AõuD[ÕdhJ ØN,Ólò¸“}©_â“ië”)Ý¥­„ï8¢ûÉF Ñ:9Õhƒ‹³ëgÞQ—FP:§ˆ »#:døU@ݤ“0JËà×?—×WñÙƒ'½«vøÇ&­À@Ts3úɆœ}O§Fð+V„¾L&´hÇ(…Âb…:¹$¯ ›/‹Ö;À ÓïÚm·¹P@¥A¡u.á·Ãžæ¿ñiO:yç4(çÈ“ªM-ÒIc´jiˆÔ¬ß௉B,wM:]ˆ¥d©þëäòb‚¬ãÛ'J‘âtVȸR+@4˜§†/F ;b@®Í 2ÏI ðÎh[IêÖë1m¢ñ g·`j´¶{ÂIŒ€âÃ%…Ìö»] c¶€+¬2èÿjØ+Øþýÿ¡ƒ!¸§¼‰I®•‰`l ਵì'92x¢È%Dƒ€ºõ»+êÝ~§[\‡nñÙ?]ûBå° m† u•f­ §˜È–z—ÏÛ¢=ÖN"g¡œ“É¢<À…ÍO¡ÛµcõvwÝ4S¨Hº¢Àÿ0Í„.0o6—/€ áhìÑ>?MÓ63L<¬&ã'€/t@¹Š0ßC_tBG æ¹-6ÜPG–_Äôp_’"ÔlÁ@Àv%RT*~!ÿ©†ŒÝC™pzîÌ‚/­éÎ,ö´2Uüô·:0ÇYUÕª sºZQÍhjÕÎMA`¼ßV·õ®lTŽ’©Ë¬Wðây*}…! ZgàEH™Ï‡ïöŠâ-²®¯Ä‡zº‘”Òd„¨«ê{¸F.›U†úû,²ñ °žë ¶Cy'çb«²m»±œïD<±áB^àqI„é¢(¡ªZ˜lÝëûr 2RéèTê~û¢ìë˜÷}ݯïËé¦0ÄO à¬LtcC¶ßFÅÇš~-ooÕYZJAÔÔà)5¥éFè¦kì,‘îIr-J¦ŽŒ xR4­J ‚AËG¸Ÿg¯4*-˜§¾këQ]Q Ój:ØHÐ[4)EZ­Ð¤f KkÝ´åœJ 1ún­Q&cðÃ]tÛ³«V.ö«Ùü)˜Q¨Å¸žâÂD³…¬U÷súd´‘HBFÆšveÝLj€^¾«S|JÜÂÁÝo¥nWatØ~8­†0J“p;ñÌ¡¢6Ó=,H BýF¬ü b…—«×6BÈþÇx/g%Û{b´ê I­ ´î›FmFµÿù÷ÿõ+Å÷wwèÀs+éÚÊ\—OéQR¥ÐÞºú;³µcÏI]ŽkЧy’Ôf²ì FJ¹‡T‹9OØÌªÆz<Ü˶à§ãL&Y_s Ò'@Â.*TXý\‘›âþô¢U÷EÓõÉ ôŽ¢:W÷‡žTUýÔ\`XÙ·æy™¬R§µXwÅϧÆÉIL`Øß–“ú Ô#ÖhÇ_iå'ŸV,¦Õ ­T8*E9›Û“åIZ麚ҹVµYPëjBáëw'?¿<§Ç1/Û-ÌoÒšÛéÏ ñJ{ë|bü‘fpQµÝ¡+Ná5|Rõ¦jšN|õ—)õ£÷0”„¦aÒTÎàÑîõRbfˆ|7Ïã;—Æw‹ïæI|7ÇáóþárøGÀáóþ‘æ†ã¦k!Ôy,¡5õ3­ÿ¥LUH@ÐÁî BYJÊe¢‚¦Ù¨cä4£™¶Q™¶Q¹m£Êj/'ÛÆÜw0Š]½“jO†ZާÅËI­3jŒÞWñÃô‡ðÖ_þ2¥û.17³ÑjïOMÊ@1üÖ ÷ö‹7h î&é²FB{=ñZç»v²]gŒqçSY– < 3j£øapU? YÊy3¡èZZMPPÅBK":`þóŸkh’ϯû™‡³9ç| ú•æðO9Oëå<󟈛ú&m5jÑM~Q;ZB“1i>rÚ5Ô·{a±iBÓEb Ä-Ž6«=Nv@íLWК® u»‚ö!£Q\ý²˜RݵSª!^ïäH¤V?Òª/åðW¶ÝCq}õ¯_ÒÊÙSÐMŸ4QGÚZB1dêC÷¶þ€S5L•†hf¾ô*Ýýôk¾,/¦¿Ç¡“ žô#R«ÇóÚß_/§t?Ngâ•îG'ëø#­ûý#›_ÿ±r¨ÑĪ”EG‹(ûªùv_7›ò~:A¢„µäå>ËõHïÁ%ôƒÅa$Ó(8#j§žZtãŒr©9> μÝOÑœ¦ <¹f4H_>DßDKÝêp“-¶Tïöíz3£ 1ú¸àfÒ€¿üç½c9l+6cpWöõŒ2…RçmJD+Ô¿ãz¨ï(¢«V¸ÞÍæ¶–e¿­fHÏÖÚ4½W¶*üײnXE¿¦=|ˆ>íSÇžŠdÚö·©k‘1J]¾T"®á(£¨ï6Γð¶øQ‚Yž|6õ-úŽhÖ3 ¤:@rD£ìB ­ªxØ£ð, lD3ú£®Öê°G[äƒãb28Ðð >#&_¹ù‘A½÷œW¼™U¼ÑŠ7ÙŠO/Î9mmÙ—ÍnF!Ô…ÔðÕ.\«NÏOGW'7'—¬êjLn°E(3ADO{9©®¹h1mx:Á†Ìp6õ<#4¬Œ¨3s5aOí­º¹¨¬¯Ý:¯e_÷U»¼¯ïØ&åÙûšÖ{¢±°)Ó%s|'ŸdÍ„I½Û¤îë„ ¥ž¦' 49ÏèÅÐÏé•¥À~iã—Ëz-'ÍÝÝH7ÒÉÚÞ›j×!›‰Vð›ìûÅŒ~Ä‚Oçú'ÀÈIâIß¿gûQ6£S'h NPj1<òã æŠ{ÔÛí#Þ½ƒŠ'±xÎßñsËù*ojº®àzÊÕÂdC‡zv[·‰~ý°ƒ%ûjD§OÓÊ\¨š’»Â\[²+”5þý%z‰ÛoÑãàcÝs>bH;Á§*>±ø¹nß°_ø÷®›t„”!8ÕJ ·ÆÄU“Jo&ùZᆽ@×}WóOŒÒ“|#ŒAɉQ‚ýÌ©E#§A¢‰ J'šÙ <¹9gÆ€D‹1“ÐÃŒ"~K÷ß¼\¾-¤NA³}4(^°¹óÛ‘:Ý;xDª­€Lèwq椕Lð+|¢*{uüC?b9Ñ+XGtº£kÜLRõzgÜ$¿¬9‹zUUmøBJ'×Δ|bèê—ÿ™•,ï߆rSN–4!TNèD&Ï¿¿,~zƒf®¢ÓÃÇ©©\ˆÑ„É1zµ}]e±œžE+Y&ƒô¥݉`tÓU£¢ná˜;ñ`ÅDRÂçö3øÂ‘@[µh¡k*a¯NMãtÈìÎ pRüŸÿo<¥‡Ù=SK`Ÿeµ»¡4t]tå†.Œ«eü(lQ"¾¿¾«µR|XBoO9"ŪZ=Ã…@öáHà°xúµ£Ÿ^Y$”h30“J´Ù—BK q«0Ñ„Žß÷rÄæ‡Ù¥´hœÒÀ¨ö¨Á¼Ï ‹—Q^Îàic5­ÜâÔpfåpŠc£×÷9Å f¯Ça¿ùG ,Ð<Ÿ0’ªû½^WûK ög¨ÆÑõ&²sæ›F C¶ÄVBÎŽf¾‹‹t·Ù”¬{qL;ˉê=:^Q»y(Õv¶ñM¼ˆ@ñýwÆÚ®{°ëÙÃÌqR™T7óItÔØuÛFY CÞ¡nHä!ƒÅüáS$ŒÔd¹7æŸT%A t=<>Ø.y[My»‚•²¶f’¦äa/_>»rü€r…’cˆÝcœ&Dµ_Jøl°9òºoÁ €ÓϦ‚Ñ)sP’_Ì}_i““kµi} ¶hÛÚVÙ tÆÏ¯ÎÉUS)rj䇿Ï|x P›©§Ol÷I‹ç?þ]|‘¥EÊÀžæŒ*…²›·(£•‚ãÝeM δ*ÂèýYÄgמ Ä3Še¡ÜvÓŠ c6ЊÁ¡ü3#wíŽNè#”‚z5ˆ•á­EýÔ9¸°ÉtmêR|ˆÑG©æNü5ý™‘›®¯Z[s3z4L©2R¨Moïe+Líº00G¡ÙtA…ø+C!N$>–ÓÓhƒRu-ƒOõ,eCÝsª£!ÞÙY ¦² €×ÂÉ@mð0ʦ;vü¥T¡nÕvêV*õ^zª¼.Þ^ÃëkÕ}å î#.Ag4·…ÝÖ5è-ˆ1Ê•?úÙfoqjcËÊçgFŽÕ®Ø¬sæ,Ò8oÍK ø¨´ö`ä.‡Ñ¾g¾B”VD£ü+CAêÆ³®<‡•‹žögT.Çp bHYX‹–¼ÊR0¬œ”WÕ•œ‚Áe~ö9…·‹°8)Z‰v Éáäç¥váZKITkÙŽgxÈ*WB®F Ž› à°T¡¡‰/í½H×ýŠVå³\¼K+LÊe“¼óµôW~³Ú^éé ÍÐ{pI(p~z¾a™‹ÝW±s؉òí>"—CÙìÉ+eY,——tvTM+j Š}»§¼0y¿©¬ÁOŒ¨ùuSˆQËL#¢<¨`?Ž[LŒ,“ ¬"º;œ¥F•g}_Ý­Àßæm¹ÒìÀÌf±Ä…[5‚KtÞ©­dŸJPqF H³5*–Ði zŽŸFÕ>×ûa€# Ý•ûþ1ñ«Få¯ûÁ˜m›Öí" Oؼªð:±l,`”,obÖOålúdø·¤ CDì›Õ‡Ã4ÂØ=±jÁãºW܈AGçT-±GÊûÝ +¤6Ó—ÐïÀWP·<“Ãæuª¾ˆeôóÛóâúúûrE}Û‘9׳wÑÉ£ž¤Í"¥¤„4!õ´9MÏå3ËD~Íäsâ£xÏ™‘îN©NL‡ýS¤VR‘|„R©àÆ@½[Þ.ßCÿs*ÿñƒë„ z–Ãã‚iBgUÊÃÈoöäX·‚“óËx¸™P‹ph§ª^^'«÷ ªÞ}YÊÜêÛh¯}.¾ #yR9 îêªÙDù©Ú©ÎCÆê[Cìx%‡×lîÁ±Oé§3®§*D+=ãÚVôË@5±¥˜À´ƒŸ©î¶®û¡½™6Ð rÛt·3éĦèjöx´õ ÍeÑx ›mœªÔ›ÃbU™—‡ødõ¡jµ÷ä¦QºñdaƒFa 2±òAŒ«;97ÜLê7(MÁŠÙFEÁT°‡_\§)6h€ªšÔª1J§q4B«’Ú°Àµµ(YêÕÆT6²½íÊÉ>+ÂúöXlæ“ã4=±jc+Õ°{S;æ[yJí!:béAâ5 N»¡Ç.Ñ‘þZv½Sš!^[xhÜ,)Œ0qt QmVÖ}¯ÄÃé­KW”²ˆfJÈsnK©ÿŸÿo…¦î[f6&ROªöK£"¸¡Ï¬ñ¤±•óƒélFh­7NÆÖ¦;gJ[rNo‚[Ɖ.e¶Øâ6ÅltBH˜bb'ØÆúÛÀ?áPÅ2Ä=œÖÕãÌÄQ!Tº Žup(oýÚz®—ªjÊ^¬2¦(Nmþz¢¾K)Pzqr³´(iõÆQM)Ftæ8¥Ÿ Zµ0‹"§^êÈH‹1?œPñf_»¶ÎÓOLÜø$ eÅ8™´>å0¢Þ—I=áúˆÖ#F𵵕ãUTi¥Òú®k¦>‘†hË8J@÷LÑúéRã×]¤-mÓGÄ1Õí•uÌP…,Ñqr€#€ÞîúœƱŽv§°,ñ’‚ŠW>Š4TôTƯÇÛăC'Z©Õ/©ÅžË<Ý6ÝCqûÈ;<›øªÃ~u?£Dì2#¨ZôãtYÎQËCY7¸(>¿1Þ»©Y©ÛÁi.úúp!… Yé$¦©iîùìñ5V¥»k«Œ.ÈA[B^÷CNåÕæÕÀ¯njBïj(?æéd¤Å-˜’˦6T8^̱˜:È 1Ü)Îìx’Q¸~É~&·ÁN3¨XçÁŸÕOpì•nŠ‹vZ—ç¨Î–Cñm=î~›H_CÔ7-অœöôJ¦W{'—?ݼ€ÿ,‹7(qù,o÷UL>Ñj}ßÕëj’…ƒÓT\QgM¡>»êjÓk˜¤Yb7>´Kåh£˜Myz_OCœôõ®^– QÉòl'ËLC´*%@£­i$8D™G²+ÜïÈ #Á#½÷Us¨f–ì¤t[!S?Ñ<æOy’$Û.ŇÇMÂæ–І°n{ž¥ IŒˆbkæ ¥0Y1Ð5%8p®ô`;°ªýéÉùÔÞ”òw2•M QÇZÀëõ–¨£ó°;8‡p¼©`GD—Œ"œˆÝóG®D¹*ìòªakÖyu‹F È¡Ú&âá~h&tÉXeHihÜ&nòˆÅûîÍE˜ì¡æu¢Ž-µ€s¸`Vkf¯!Œ®=V‡—¾þ~»oÁ©9®’À­Upl)ðµ “FPô¢†•|±Þm’Ò©¶ƒw4ÿ,Wõ`¸üTÝ©Ã$ùu©··i/ý´ ,<q[·ýEÜ]=•Äê/•" 8‰B@˜*Þ€Ÿ.<£ŸM·0ì«¥@Çoó@‡8ß\/ÏñH{”É{]@Ç©O­‘Ñ×Vi{Ø>"´‡mî™ØGÅê ô¾*Ñ ý°Ä:@[yQÛ§BèÙÀhõDzƞîN¾âîK¬/ôõu›ØÇäpÎM@%ÈЀ«»¥ÃqGsÂ’öýÈfðü‡b—ÿê…C\楎¾ƒmDG[ª§²]Ô{@„µ¢© ÈjýT2!Î)/G˜^סqk2Æßt%Mt0Úf;þÒ\&Ý83^™´Ë¼D÷.c²®73Â?»õ9Ÿ3-Üí¯®æ¼o'ÐJq» ØÄ.ÏÜ¡õ˜çæy ˜àÜläœs×Éfè§r<‚à;–Çk Á·ìü»Ô×fW·æ&È3l¹AäBEºì\!ŽŸ„¢OwWÞ¥†}Ù ìRÊ6žK‘Ѝ"h¡@ e/‘ ê^zNÈ–gsƸ˜'O|ybi*€“p\7{1ι3a†™ vH©ŒšX((²0o:ñš\NB£b–׌ ej€ .4ÐåžJlâã'ÓÅlõ{Y ¥˜ÏF´´ûý#\šœýÑM*šÔn»ó™EhIJ­ØTùy)¿ÍýºW> çÈÅPà ¢”cB‡–#]xNJHOÈ$våì@à,1¾á.+o4ZØ#ÒõQ„||LLÆ'jщï¦Lëí®_‰¶#׎349°á‘ éô„&Øyò@­ýÝ#cˆ@˜£~ÎL ¢m‰ÍîYÓÿqÈÇ ÌÔT&= .æØ:CÂ>ðs¶VCºiÝà?nN·ƒ1º!ÌÑ ?õ ü¡àJ·=\/‘ nwøª¬)Œ³Ú9´å!c&Öeä‰e•~z†­\`Ëî¹n?d± Ñ>[ˆ]@lÈֈͣ~B†æ¡\ï²:@ŸD„¼ ì¸ $5Îêb‰ŒîÐ-Mô2V+ÂÎ$C›ƒóTbçâéEè´r”Bh ú°ý|žc¬e‚q ŒsÙ8"SŒi`5ûù:ë‚  tàïìîEŽÅÞ*&úÿžaà` sôÃÏìJHÞwÛÕᮑ]×Ûå+íDf†JZÄ0CÈ! qˆ2 L|0&-$Þ”³#°ƒ±Ôd˜Ë¥)·Ùß ÀJw›¡»et·¾î6gýþâä ÕÒ”mu»ís‡ð´ˆ%E…„0C8“ÀÌΤç’ÇÜ»’%e²gd"úãoêqIdfÀMÑÍA&éψÚ=†3g×Z`jÿ].%ÃH¦ä0<³ÈëÒëë]æÊ")•ˆx‹Ou)QJg¨éy\-2äu?â&§‹ñE@O 8¼ê»LZõ]‚U}“ªïŽãd…ì¹Íææ@CvóƒÐÌÊ×È%?Øõs9¢aÅ¿pfÈÊxTµQTOÛ™R—5ÝiÛ(Ö˜îÓuæÖ&Ý…N÷>I¸Vêî|(£4¡À7¯ÄðF*MÊVú‰f+‰E½+·²ŸmïºéZ‘@{œ0v±¦n„bô\­Ä ø»¼Å£ÂÞ¦¢7G½WL$›Í-I‹aDçXàhQé‡ÓS9Ù*n- u.ËuJåš·àžÐªì{p|¶ÊE¨X}¨ñ²¡Å‹g8óþ´d¾úêï*¡ùòp1º(0Ì–þTf]Öàom¢mÚÀ%þڶúúÏYm÷õ&<3TÑEzÍO±ªaŸäëÅ_”ˆ~»*!²Ma¸ ÆQøÍ~*ü&RøMRá_Ÿ ð¯¡Â¿F ÿšTøí~*ü6RømRáwOPø]¨ð»HáwI…{‚¿… ÿ)ü[Ráߟ ðï¡Â¿G ÿžPH)æk¾*%®õx:ij¹ÆåÝGÈiˆÍ.Õ®ŽÐõM¨ë›ãtýõ] uýõ8]ß¡ëÛP×·Çéúî]ß…º¾;N×ߎÐõ·P×ߎÓõ÷#tý=Ôõ÷#t‰\EÂ×Â6+1–M3;ˆú8·ñb¸;˜ª 5 ÿq*Cc«º¶ ¸¾_žÑø¼Ü‹G1V»gàYÚñ%üôI$´ „˜êv¨Äo2X!ªÏ;¯ÖÉ/tò3Ókg™eÍ´CtšÉŒÖÛ™#cU·¶8pí»žf¨Eâ°üé¢ÐüôË„ŒäŠÕ%¯{2ZhDQF1+õü>IRª.Ï–š¶K±Þ<äR´Ðˆ¢Œb(ÊPZHâÞ °Ü ]¯žÚVL¹zç56¦è-h<‘p9£]wÓªÆáG,…K¯)çŽ%YlDâzlü©¾²€¢§Ô[²´®6û¡„Ç›ív-çŠvWÁ› q?·-8!åÃ"˜ÜØÈéªKNݱ~ÙP—u÷±ÛäÁWŒdhb8Õ\,dX‚SXwÇ•©zŸá’ì·«ûÛ2—¥‡ŽhöÛ…Œex’˜.J]; HÍþå"x·Vi3ßI£Î¯¿ñ݇dÍÖ_{sŒïë~2jRú£zIæÈõAdósÀ1AˆäB8õCÙŽT!Ý8Wwcñ¼8ýݽډÖPr »àˆ0F2„ÉÞŠ>×vhA¾Ï±X±¾¯vÙÕÐCG|(–!DÓ-š0µ*{l´Ð˜TÅB†ÓÍ—©p¾Å-ckÉcØtù-6æ(ã8’MÇàœ;6Ò^&Eq¤Ã¾˜ähl…Ñ þ%á_z}ŒCáCÑ—ëãhº!>ãíP¯Îg?ÓqRÏ9Ùqà³'ŸòÄ4æUBw¼®ÚÙÓéIF¿Å˜Î‚O"\YUb:ìŽÿ=â‹÷dÄÍX’œŸlîI K¼ b`Å F4f ÇhöCu nYÆÊìp±+ákåÓmëu>e fhËH¶€exP²ot|u~ê³9tÍ~Wù[ÉßSç“KÊ2\ »p°,õ8IXð7Õü«,ÉfæØ Ì‘NMV`Ën+ge²GZë×Xc·*}¨†#;Ü•¿f:-ýÞkìå¤õºûXlºâ\=åîãéB%€)ÈÞôñ=ӗ΃K>3ÝO6ì0©à2p܆Êô¿™}°Q÷À¾fý/Ûû.‡^=’9¸•µ’šX;r2 \XáS¼G+sÚ¨‹ …°‘¥-wBviò3uz™¶¨‡’ šÿé¿(Q% é<캇ՇÃn®š8ÃÂ2ܩ֊ՙQ¢ýŽî®ø©ÚíŸÿøþò Ó _R§†Ï]oH¶xÿÒ¾ÙRÉå°ã˜ù¬s.š‘ž/ÎÐOü³˜`Ÿ’Ž KÌ3ᓼ^S<aú ÓÙÚWjgn–ï„å  …-ÈåÏ%b6éì$^;@*zäøFIÓƒÁ¹6£“ýCöøužòvøšáô)»û‡´>0hZ6¦£Ïüª ©@=¡LÇ×0mšY™Í‘Lð™Ip׆Nˆ*uÖ]¼)‘€?AÂÛxl´x#–gïÃ<Ǽ•}Uµ…\>á&·IôQ/T3¿D,fâQ¯ˆãòw„'ÚÅg¶)Úfƒ­ÐÌ ÄAhoQa`Ÿ¤–?hãŽ"¬]æyúCÕ7àá^ÐÞãl‰çådR6È”ƒ]Xl”?>Igø…)È1™† CÐ;äå3„Y3ÑQnL [ÙtìlUàuqšª Qô0ÈPÂ_zcWx•Ì £Þ‹AÆüé‹ ®’]©ú£®&j?Ö‚¿¼k‰Ÿè×zÛîoW·M7»ÚdŠÆ,(Æ”– WWo¯ö·… q¦$¡©|þ] ¢—±@ŸÇ“÷,\¥‘‚¦Áz0¿U&G/!JåyGmíéNDdû¦‡ö>s 4æ‡.źj·1+ã ×èøuY”s§.D€ «~ÙÖE¿eÒ²\ÊÕ¦«œL«€à… ¶j4–·j¤­ŠWM)îO†¡$»üÖžÈÓÏ«´O)7vÙ—Ú*ˆšòÉ &ÞóO~£â í…’¸ì_ǬÂq+ŒHa˜âÔ4à<žBȲ0\JJp¡Ö2ÕŒî·9tî·—ûm@ä~댜î` GŽ<S4hf(‡JZ½Qd:Çä…†„²¸´s¯*C˜Ç¤u^W`Pe Š«·7QsêîîÀ4S#ê±RQ3êmrê³°vS¨7dW¯–п-¿)4žœŠ}V-êÙZÔ‡µ¨÷jìê¨á;¿2õ[Ñ–}'ð‚˜ˆNñ+ š6”9$‡’#8”9å`àe‹[}à$¸øgª¶½¡qéDˆÿ¿¶·ßm$ÇòDÿ÷SÐEÑž®œ™;ÓØÝ†ÓvVz:ýQ–3³jº!)lÅXR¨‚’l×b~Œ`÷åúI.ÏÉC#‚’Ý@w¥Ežüæá9è쉤¤Ö\W½Ej-¬3>3Ý«¦†¯.[t,ïÊÒ‘ÆZ>àbÃu¥WbmÕL 8ƒ,å°9Bé¡ ˜%y»âêK/&·ÓÇ2aD (*½JÅ•!—¨®ÑrÁ”ÙÌæ…~å‡E1+ È”•Â$ºR˜„+…IÇJõu­&É+…IçJa[)LzV „H¯ö®&©«†IתaY5Lö]5xßí> NK ˆÜoSØ´AŽ6r„ñÿIϘc¤¢ðÙ²Ç ±™$»WfWµ¥Þë#£$ôbF€ÓZ÷NnØ¢fæõM¸”–6ª”´ÖÈjÈG§aaÒd4阌&íÉhÒšŒ\ƒš´ƒ¦7¨i¬GéÃÜ &ÆÚå$4:EÉcóXñ¹ù·ÿ ÀÒG¡%ÄÝHâZÕü5GjîŽÔ|²ÕƒåÐgÈ ^“ì>¸I¡@Ô%œ­ê ÓÅGŒÔtc©œX ªDN9$JÕxöezwU‘Í7›µúÓ±ø‡@@OñºÒªqù\@´0ŬÜñM©þ«\6MÍ0;׿sÃÍ®çOn.2N2:ª%?I”ÏEÏêéfTôÈè3’Xÿ´z`8_7žrŸ‹x.ÙíÝû\žI£®\²£°S…ãËŠMv¼U ú“fyRÊö#6ˆa1Ú> ·ÔZvS'jæ!µl#v†g­-4F Õê¸YTËj3^Õ6â@ýˆh±F1IÊIRÎ’n~¹ût}5¾¼>ûòù||ûùâòân|uýñâó¹AД¿nõÚˆLJ–A\&I,ºÄPgç[ü |0n” ¥ë~£'Ô‚®— îQ¡'ýÚ³¢CgÒÍ>~zÍ™ÇDK0éïÜðÑODðI'è¤FýâÃeöÓ-Rè/±¨ð^üè×ílÓΑÕßòðžôÿ4×£ìd½þzyDwDQ"Ì÷ï~¯îjô ÍŽ¢¿}”RHÖxw>µÒ¶,põ³Ž¨ÏWj‹±ÐÐ#rµÂ -ºåO|µµS`8Zwu¸y(0[ãÐ_¿Ó¿¾?2\ƺ»Ï†Þ,t“t“™s¦iÂ!“\M4& ç)‡§|¦—8i€ê‘ÉmA2QL&S€âKlkÖž®ƒ+É7è–ª6#AÛ°:|oî‚;ð}¾ÒcÑ}4æ|u´ …x ½árеÒ{Wƒ·LC•´l‘wÂèV¹gKhBÝm§¿ÑÄZ µŒDX’6Ä„ym@4aDѰ;~G[/ªéK"IBÁ¼6L–P`-þ±1fW´¿6¶íD·‡y"88DG™mx”nîbñïÂô:rÍÛÕÍðg4Iì,LŽ›˜#>ßàÆ>F`{<Ú‚hßnévxQƒ >•$ÂBŠœ(ZÀ${g»2Ùx5Ä´Ñ&¶¼Š’FG‘vB,|>ºé#¯ÈÆz9RzèÆ‹ó½ŒI… \ ÊIÝÀkuÓÇSÊĵ-œe§‹èEÓ›XÑ ö·†¶èP+„P{LÓì©hJ{”ø¦EGѹ ‚ÙWt¤mÁ9Üf;ÔÞÖ$Âü¥-iÂP¿£¤œ’ÜâfßøÌÁú‡ãD¨< Ì|K:®(ØÞGrßÏòõ†ûu:´€@Ïe1CŒÇj•= 1OÁ¸òä“'?òP‘ŸÓYý´¢›[=†¼Ø“ºã§•üº£›ÞyÎu~ìG„Õ uÕz‹VÒ¶GÑ’}+'{”ù•n½N¿…Ÿ9Ó‡vÆ0›„Á=`ÚÄÕlg!2¦ãóã̺sµÙÙÊè3ãÅÃMÁƒå£ ŒGY´tRÕo%.‚üº³0ÜkN£+aEÒ"ô‘ùëGÜQQ]ØÑ"¡†‘Zø5´˜thG3 ½+„:hh7ppA9µó))ZÕ³R%A’”>0Ì à¹yéYw°½°©ZXiŸ¡¸¬R‹$¨ŽÎªÓC˜:I.‰F£Ïœ¿W+:±¤ÑÃ膌ß|‡J˜½1‰D£Çï¤êU»U]¬â¦œB”çý©ƒ²4Ì Aé¥ö>6 ©ïXÔ’I3|g O ý#ö/ƒlÕ"¡qK*¡Zø†ñHtj|‹Jìè"ŽOÂâÜ<Æ0¿¬a0x—ÁäL Û*CX­âe@àz½±Ú …rˆ:¸&C"5iµ˜µ\0€;…Ù6r’<¸ÛxÎ=æ ñE?–/뢞|:'Óeá8IÞA™I4^Uñ€¹¯á.ËM1ˆJ9H(ñÀï°ÑBŘè?ƒBåVo|vZÙéy`fZÂUߢh– |J f•cŽW†îvŸv  0Êá$¤¯$Q˼°Köx ÖCa†¸zʲ¡:ż²TÈÀ¢¥˜=µéüÀàIvª¦(ÙΪoØH9}Ž>‡'ŸÏâг½Ê¦¼~0jZ,Ð'Ƶ£và87Ç\ ÒcZœœl750”ÙäNJH:xï o ßCÆt¨#âËn ¯_ö|Á®5ëLÍü“²<í"çÒÎTn²ƒk‹K[O`MÈ+Wr‹X¯ØÓ\£kàläž–ûX“Qvâ‹ óÓ[º‡T†šœÑcÞq‡ñ\]­²“eñ›V€ÖíÖµL¼™Jé.QZ‡ó‚®â³ˆóXvwcÆ®ÞXå%6•(¹e²ÛMÅgLm*Öf°’©_ZÝEˆN2 lÕžd «Ï ± ¡©Ä²˜§j×È'b :1׉ñe´Þ1Ùéè+9blJ<êŠø;Úl!¹5Ô"fös~ËYàéÞÿ%N ‡¿èdg ‚ÄŠ®Ó:vÔC`Ÿ=Æ=OSÎîáªMÅhFÌ3fNµÇâ½2¾Þnòëûü¤CDŒl²óÌø–8ÁHN ”ƒñ£¤!FùøÞgx-„¡ôñùÝT’¿µ­3vøi7(Ä6n³ù¸‰,wdîV…(Rà[^,uÂé½brçÅÆ5mªõðF “Þ¢Ñù¹ÌŸ6dõ.ºË]ÿìåí°!šÉÞ~]ŠWù¾$bïCÊY.é¦ó²ËÎ:F2‹¼çsÀÓÉŽ‚Á ~}À°øÇ]ÒUÓJ5;{Aƹ¨í¾ÜLçÀi-jfe©š¤©cPÁÀg¯Z½·’½–|…åáVqŠq ð.S‹¼’éÏz¿ØR»«¶¸fkq×|§}Õ¼º×]«©¦>`w3w•.×êFÚis¢µkY#}"½%!“ê£&Õ?Ѐ׭:Œ¨¤Á¶Mà‡[ÁÐ>ö¥‘EȾS¢¾“ðD‘’—³Ž[Ó=髳Žftc÷kA•µl³ê_N.?^ôàþ,ÃN Rà øQÂQ‡Éör‰Ïpù>Þ‹­Ü"™‰ôÝÒ%þWL:ê1OÐamÉmøŒSÏãÏȼ–î²ÕÔaìù!†^g®6‹—ìD=–³ì'Xu¢wüµH±(ž_å™_†1­Cl¹*°9mÊi Æäå°Š ©;å•LŠ`¶nÔOʹpÕŸ2¡}ùõ>‹Æ!ßÏd?ò¯¸Pñà`¬gƒ)¼0Öå"uâ=Å™ÉŠëæ— ÛMµnç’ØÿŠ·†üOà zþ— x}¯º*²íÍwP{‡àì†Ó³¿pr‡FzËðÞ¬$‡õ ¬Þ;¼ÏF”WÖèa¶€d›ŸjU¤4ß>3˜`&®DfZ—ÓÊóx6¤»ÅAZG”Œ+ò…åÞèbŒëR=/'h èI×]IW#›Þ¡ œ «*Su³ìS±±íõ²Žh)Í’^DЊòü˜îûÄÎHqLd½óñ¿eÿJÐÿŠ¿sRœ“<\BA"TùN|^]F8— ëå÷Ÿ†ƒ®‚µXú™¯¦ÍËËù·§Wô¿¤êë¿ãL¶ßtb»û £÷‹úA½!1wj^¦‹7+# sÂü­åAõpùVžSÁ[Æ ’ì¦ù8¤óZnó5.yŠ1¿à6Õj2~ÙÞª0VæïsÄÑ}´ú.CeŠ‘ˆ·hc飽ÿã-ñÆètÛl '0—È©{¾vár"'.emz´q'.SŒë¦êª­µFƒyZG.­£#]µévìjí(íHh`ß©PÊiP D´¿{eÙþ›ª&ºcñhLQ0Ím½ð'ŸïÒßÏ9 F{øvÕt»(|C! 2 (ÄgHE†Á mqÀ\îÊç5ñRC Ð6«ÕÔ6/ú¯j v%ãÙ˪XVÓ1¹‰-‰£gâVŠ,L16CÿUå >gñ¹uÈa'Û‡ž‘KRáXr¯·ÕðbÞªåx (æÖü„:Ù>õð¿‘JœÓ¬L§ÿÀ9ÑóÚ-]@ÚG&;âK‚·À‚‚$«M7JÕêÔt[¾ÉŠ~·«¦,ôdÚò]ê”MS7c|f.nQXV.eÝšÔì‹Hý„Áa4G½mt'A_›.ßHDN"°Dظ§ÝPÄhmi0¯uGá±Ð“h|m¯ìÑv=ü£Öv÷Ã`<ì„ ã|twz}õ1+Ñ{0€#å óPnÒJòPnâÅx(7­2<°ï‡xôêa;¦'Aâ8vcÒ#sC 3¼&¡ë©9+Íxž ëf9¹¹p`Þà]ŠÁÖz˜ÂmeoK ¥¹;–€À²±sñk‡„žHÈÔ|ëýü. ¶Q5nÏïnƒ{…ÑøüêäÃçó3O“*vå=® dä(Cj|=ßœÜ}:âÃBôkû¿$‡Ü肪/·Wä,÷¨™—!$KƒÛ5á­>=®!ÜAVl7µY<ÎW¸‡Z•6ð-:£l•sºSiI£ž›Í>\쌉‚1›ÜA4¡ƒc7àÝÚûwˆãŠÀ¼K9wõ¦ÙuÎøQ¹û¶¹ZŽíŽ©f‹ÐÀT0ÓðîÊÀtÄìÇC~YAÌ<¼4Û/öÆa€¬kUáb-K@ëÁ1y"“ìÕÀ±Y•ç6½ÿ®²*,ýƒÓ ‘þaÜÍ+Å,ì›FTõ²Ìè?»Âz]Ò×Ô-«.fËb}|{}rvyr3þaüGï詆ÒþcDÆý2~eü‘ñ¾_F;Ü{DÆ?öËh‡qÈø§~íðìÿÜ/£v="ãÿé—ѧ‘ñ/ý2ÚaÒ#2þµ_Æ¿†2þÕÊÀ Ê1nÌÎÜ)Ëð†‡X-Æßý> .*§`nÐÛ¯B2î]6Ùö1›ÒåM Ì¢xê½38’¬›‡bUýÖâ– ØÛ¬ÁíLÀÊ¢Ì=9w…zÄ-ˆ›ìZæ~Ôƒã ú–$ª,šé<2çG4¥N–¡Q=Éà9<^Ž0!»Ñ G-ð D5ýkÆ3½!®_ĉT×—ë ·¸!;wÙîK†ŒøE¯àc¾@ñ —¯½5þÌÑ©#sÏF[ÃvR$"g¹‘92j%Rê-ãü‚?U c<)tKãóÎËEù€m+¦*GY9Êòµf 'é­»)ÿé}ŠýB„ÒèÅœÀzA’{îs”ÉÃ(rpHsñÉ·¼É™×p›ÆÜó²Xlæ)¯Lº|D¼9‰0›7›â­€dÅ'cdó Wˆ\rÇOnÌÐ1œ>´ÝìöÑ’‚C”I`¡2ƒ´6²ùc65׬p£7ú¢ÌcC-”ë_¹á5 ÖÌ& º]™/\VM}W=®æz96p"-°¥XƉC¤ÝiÀdC È¨,|U`v÷?†¨kwx;lH`mwYËÐåœx¨¦I.;˜¸è‡#!€ne¦­k6—ô´1ÿ±?ÂCGW0ù¹h›õ çd×k³ØâáæÛ&—Xy!$b¨é­Ž‚µ='AÈz ™þ®áѰ¦õ^²ÚÎ@$Ñ"{X?ÀsVê¸ë^/³ÙäH÷†qݺ^N›½·«Yal¸Æ;c)ì57%¶AHEJÔû ¦%ó|O¼Ï&Å–6ßFï²³ê¡Ú‹ëiY¬Þe§åzþ.ûV,š­ÂÛ…Åc9zÐÕ}‰Ö CèBB ÐfŒ6MÂTfæ²) ¡F8õÃÃÑ™ƒBÉ¥H&IOÐ`ûö‚¬+ΡQ/«éAcq@š?ÉùÑý=t4´ØÜ¢“…l¹]l*p+MF9z%Fß婜¨j3øU|2 €“N â;xå.`˜fº#¥îjSL÷qÇk™ˆù)ÝòÚDš'‹ú)3}H—~]=<¼ÀMvÆ´Ù²ZáĬЗ1„ÆÌŽG”«q¼/¹ã)h\ÑPöˆZ­ËRoñô·Ò“lÔØ[ÿ…?ƒ6C_˜Ñög?=¬aÅEÔšŠG!|\,*=ÑÔêy lQUœÙ¡.G ¹&ÊA‚‘4^É>i™z#2Vj“s hØÿʵœ…€Kqð89ƒ›Ìl4úóþŸ¾7÷ÃgA »á1iˆæP'|ê5Tÿýí)Nj¢LÛÒ&:ÒãDóÙ#^A»ç½‡·’d›†05ÞL C Ú„±=qf)›-\;‹Wà1'ÎÅ =£,ðäMYºÊàBÃ!ª–ÀaxÏØÃÀAÿcîz¶kfû]‘^çìŠj·¥÷ž^o:ê®ÛÿÐdê.:ÛìãN–ßËk»"í5„æõ^fÝûUÖ]Ÿd½Ï÷XÇ?Æ:b¸6,¿–.nú:÷€×¸6]Ày¤>ŒÒgÇõ`‘ÿû|¿N¾«¤ëø¦mQI_W²E¿³ ½ðŠN特?œ&UN· L‚ôÄkjìá `J~$¯Ê˜¸¤Ê4Œ&éXtn3¨ÂÑòß#ä»CÑ ìNša%DG Έ§OìÃ4¡nÌÎëúaa\ŠÙ+¢>ùð˜g²¨Ÿ‡•Jó˜ùú„?n'e³*7eBûq´¤à/ŽN~¯×åj„Oùû.˦xLèsD'»Ý%qö ¯WðžlX8Ñ‘ðkú|ôŠn óН_4Ò±hâa²«û¦P›Fïu‡zĺÀSÓA]DÇCý=TŒ¦HhGÆO]Ë^Ÿd»ÓïmQÜÄÐ'œïG†eË‹”ì+sõJ^Òí `¤c¹—ÈÓ+v»Ø$ 5HÆB‘£Gæp5¶9¯kæ3×»ÃR}J’n,žïÊé|U/ꇗ.=¼%A‰ ãš  /ÆTÆë½Ú$v©Ä¯46É-¯)ô¾‘%ë'? +³zšZ•ãM¹\/Œ±Z*€<¡‘ˆ‹ÃîÚŒËzC½Ôûj5Ó{|_/fý“cª ö R #Š‘tfs½Ù8Ýÿkµ‡a¶ìÆ?xc„«bù„ÌnÂOááÐ8:N x_”¨³Oww7Æ– ©/ ãã„)Z¬7j/h¯ß‹áµc;e‚d4åóF/sЬ Çz­ðx®¶^#àÞMï4ï·vb1ÏÓ1ïÂ{Zžýȯ%G,½Ä·+5'žý‚­sw°©_GÞ3ì I¾Pö;߉‹º»HFf£C†2¢{뉯;º$·¥÷D&ù½%ÕMSb ¤·~K÷ÇCÀ8n^>Q0n»Š‚våWÚÞÀÔkpuebzMéž³/óºÞ§!{ D°ßž@n´O®Á‹ìr“KVXXOõtr‘; ˜IÀ…I†q½^²0$½õ^I±*a%Äà¶Do[Lûü3B„z¨jÈ!„DWÙDd_`ÄpñRŽP FøüjP¥¤r:1U*Å«•~A©¡’¦Û¦ê0FèÍv…t^M¾f6-·ŠÃa•IÈP}‡IOZ9ƒO^죷ôÇnÂi€”O^ìc7ëj:›¼ØKLP9dR%(¬ta.?„IƒòlxW2Gg]ê~\L§õ–ÔÞûw‘3Šûœ³Ï ©ÅèMRz 9ûmš‰-•ÜÃ5­‹Á‚£E– ðZ̼†5˜IÝ5–^ƒ^~½¸ÁûHÿP­‘ñ”™Z›CŒº5d2„‘î¯kCžr¬u6O)p4¦zi…fµÅaC"5Æ~­õŒÉDú¦œC¡9Aû•£z'Ú^€lµs¤æc5/‹ø¬…Yú¿¬sž3í…Þ\.~Î(é»ãIµÒ”ßk‰¸6žÖI¡’Œ¬˜w’”£¤‹¥õÔ¨›;?ÈÁü òµÖrR„^s÷s¼õ{ã ÜÈú/Ù—»ù¿€ÜÛAAaÞkæ&˜{Ýaµ"®·Ø,«þ̺z›‡ ª JgRœ"ßÅoŠæ¡„!Eñ7ïiR¡¡Tò¡G’v%œž$­ª-µ“L¿íÊÚ¦`QÐå!ÚâÀ}.MDºÔÜÚÇ+rUj'Ý]Œ€DóX‡¼“:‰¶ä¡Ò½ääG=ß`ƒnÜØCµÔOãéVmê%¯/ösCü9ñÓ‚%}ºþ6>ý2º»¾îNîFGÐ#tµ—ÆC÷Øó[>äZÜzþ&1¹ã—0G¸7þãÔcµ^§¿¸CjÖ†‹30üMÏýÌcÛiS–«L/Ö[>C­V5zAê’N«¶º–_ft"·‹œþÞ¥5 0/ç<Û£|V)ëi^Mçl©ÛæW×DUÕ^Àé…Oé –³‡4|‚Ð!2H“°øe$ÓsQ¢Ó®ÑÎÃÂIé«Dêƒ0|,Tÿ´…PFG·Š^ï)Á¨=%°Æ–¦7ò”ªíö”ÐRÏÒ>µ têŒðSãQ~«Â׆œŽ¯½¸”Œa‘;÷‘˜-£ÕbT0=n-„‹Œ¾=ªï7Ÿ‹Ø».ð}pâ±pï‚ø&Øò-Ìk`:…!,+wxm ­=!ûd­ý%.ÂSPÔhK,õ±tÏÿéX?> «qDB“Nô”éß´¶ÒÊÍ,â` Šêñ¢ð¿ÿ·ìàAP-¶ÍÀMPµ:ÅéÔ?¨€ð—2ŽÂ¥3lQZÕsª“!$5Êž…{!üe} ѯnÇBçϸRÎFŸÎ¥W!F’àR(Féáò yäûx2HÙ”N1d‹tÐUt„ÐÇ)DKb¹¸ï@x…V¼«dp ‡u-: Í?¨s¤]ŽºªÎ«1;c& i%8›ç´É²ö.ì,i{æ$Ùx¥&9‹öB!—`?tᕌ2­ùn!‘‡­ €þ~?èïû¡¿ï„þ¾ú{±,êƒÝQóÕJŽ)}ʧô@SN€—=' :)Ói ;2÷½˜­S;2®N°ê¯N?ŸÝ}oŒob?Å•Ø( ¯X)zzc:÷ÖšáZ^ø–[>ÃHón1d=’Ieì7H‘Máëç“«ýZè²h68¿¿µÃ œâoƒ(({ÛðôvéHöÜÐIïk‹ùmh³Ò‰x¹!8úk`žqØyÇ¡ýh«× VŸþÛ»µÃÓU-t™ô<$3 –áãnKè¹5S=^QãâúÑÕåFQ?›rZ7 ·ÁQ?å”î€XRZsàÖäø }e³OVÊGïQü@îª~Òh†*#¬Q|å¶üünT¡á•ØmÙ²T ¾êÔ;²j:¨YR9ý˜*P™÷ÁÁÕëèj”aŽjG”>Rè¯}#+¥¶åàÀgXŒFµü EgÉ9 =¥Kpœó„Ê sÿö×ÿ{ï °†ù; ;FtÊÀch[€|í1M‹¢©Ô°ãءўãXIûC:{ŒUõz®¤íf ®¾àÚ\¼cK+³æÇù 8P‘kà_,÷IEu /›e€)”ý¦ £Y3h›i9bÁ§1Ê1Í}.üٽߧðE—þãÕ—c6Å£Ô)Å¿Mû^Ä3x (ŒpÄy¢¸¨†ÃìÚ`w¤·Ý@ÜFÇŒ° Œ÷mxn"IP8ðê¦xH¹v2VHŒ92š8­wúÇQ<úkÿB<þ«UâDµ#Â"Í= ÅËq5K êørLÍï3ðà=ÉWH#éºÏ-Ç´BèïGQZ§ òrʳýÊgËuL>´•=‡Ð+‚Ó¬àdåŒ\ÆSÁ LùvM¥y˜’}YS™á1µ ?¢Ö‹jfBàÐ[)(ã®^gŸá†ÓÝ9e'ðž \`‹6Ë>¼PläÃgAõv C ¨ ÂöYþ\óçÈÏa(·Úàzƒ¼âìDsZlWéç¿Hmê¿Å 0þGÀh‹Ô” *Ùˆ ß­Cª9‹ª&) XŠåsH"¡Ä€ÖK$ýýŠ'5.zª©õ34D”k¢\¹N"zƒ‰%'|˘ ‘çŽK¹’¼ýZÍ”$a©Æ¤!šƒj¾ê¶š_Õø×m¹¢*–ý«Ê1Õ~C&$W÷¼pÿi”!‘®ñTÏùªËk¾ŠxÌWzË¿ª«"ÝfpJÛ$k7§ÚMûP»‰ži ­f;Y{>ð#¡n{›FWœ[åy¿„¸µ-œÑ«·ñz¯bï à2tŸ¡ÒMŽWë&1pø+«Þ)5~¯+m<]|ù£P9¤ç:Ýbp¤ò˺9ÏFz¸.a ½¿9¹ÍNo~ÔæÙw«ÞÉ|P - '~0œVó½œ[K(-Dò±A'e;]qƯ&ÕJc@e½F6N¢Ób´¸µ±²£-´Ä.ºx¾ ÝŸ˜%-WD„5R‚à'Î×2ÜyB¸aÝ ‹Q\áMµ,/°oÑéÏGèËgÖT»!ë¶s鶸$wæ‚Fa3vŸ°÷Á"¹¸U€à$`Õ–(ÃÀ<:¬Ê!ÝF¤&’ d@‹!¢‚Û¯aÏ ’¿Os†ÙÇ+U>ˆ¡h܇Nì]Xz§x‹ݶï<2ºL&)ùNå(…Ý ŸU÷Ø96¬~FD”íTv#|×úb^r…Á²:õ®fE3ëzœÚïáçw†]¼Oq’ó`ì”,êz²EEº@ñZéøÓIÖßs¼Ý@ªT“L$¯6U*ÒÙ9‰²Ê¸ZŽ#ôr0.6cÜ éõ¯\[e^KoräÉ_ {pÌh r”Øgä`a¡ üW½hKkÃcØ”,Œtwãx —Öò‰í`TS²jVy}oÜ\CùtÛ%Ã;OãäÚX*#ÝȰKë7ø‚­›ÁA‚\È ™Å9“ÉOÕjV?Ñ ÃK½m˜ùUÍ 5ŸÔºuhø³²i’·›Hm`Âß¹äÔ¿iÚ­¯bCÄwø>“bCTçÒpGвh†¿×Ÿ¦\kîºë¢Ø‚vè$«sMK2£ËYy”EdÂÛžðG{ˆ´CNŸØWè¦üíÎ3!Æoùðò¯ðX/òÆøü/nMÍ”"ýâµ^Ž||”‡‚ÕB¡à\Pk«½Çÿ°üåÂã"2Ç Û&£˜Ü‰ÉYÌèîöâêÇñéõÕ×óÛÑÅõÕøäôî¼bx2•ª$¸'S¤îî—›sÍ}§ujMj\(!0(hÿ£5úTNyxÞæÆ-…Ö€ø|.@Š‹½h}(ßÕ¥»DS· =ï/ቃÞ(€uå 'p¬u¨Rá÷Ùë`!bÔ®œ›c®,ˆÇ†E¹&\EÆYeÙ¨\ÝÅÒ¨_tâ`×5ý Ò“sâ´&à–=Gø›Ö<“B…c\<¢_k%”`^NB>àÒršgœî'=ám'jSmàÅň᥶ZyÆI²³väFM°öÖ. Uêž }¯ÌVzíYÎ\ì4~‚¬çw݇ Sô |;a¦½Î~¯óRm\´šgz׸-ÕŸÂ#_œ ìúÂ"n'f°émÆ!™­ 3Æn›‚AîôÀˆUd¸˜åZý¬>èЇwÍœÖ2fµÁ;«]ëЪ#í#;»Ö’—`¡­ÛhêŠÅ0=üS¬[LÒðI¹¡Ô0ÖÐ}áVr3ðö(Bi ˆ÷•D¢<ãÁñÆÕHÉšb™™–©œæÎ!ñlÅ œñúãˆ%L#î9…ÒIpTêÖ•=º@Yú‹ï¬4v}ÆÎYfì¤M†^šê=°îJ5l‡ì›ñ]óƒ†ãQƒiNþŒÝ÷¾Þþc¶¦›e­ïi¦»ÂÀNÆ£a}”fõÑO©Ï¨ Ç$†`\i÷é&ÿòó÷Çv=p -( âèžÉ Ýc­ËeñÍžþÖ ù‚ m–®„—ÕtÞÔ«ê·å@‹Ž¸t Ç%Ñ {j Å5Y¡[±FÔ`T7Ý×–Åc‰gí5{ó¸‹qoÊ~ÝVºÿBAt;ÕCÖ‹ì’Ä T²ÿá/ùÁDxcÊü,¯@™ Æÿ¡ôÀ›:9«Z'ä †#G…0HàKžÖ!ƒ|PIåò5¬I@µŸëk‰eÇñÇjÕíã­w;(tp³ƒTÁØ-½ö žÊ´Ý•Gëé±{+:ʰ[+âø{˜“Þ$›b¯¤opIã«îWóVÏ|=oÏ<OE³BŸ{n®H›åý2º;¿;¹½Ò¬KŸ õNA#åÎDÏ„Ÿqo*/jW u ˆ¬LZð·7;¾¨¯NצxÐ ]\×i±…¹Žþ+—¼wŃY#Ão”Ý”[µ¿Tây·ðHzÐ͇W/Á'Å'w‹…ªòð.ÃÊÖrr+ç®h&š×èw˜§RÞ‘µ^zMtä÷z‚Æð¸k¿†l9°Ýü8ß~¹"Aðê÷Iȇ¢F¹¸Ñ²ª‡‚Ì_{›Y›ÎÈÔédéj› ÚSHÌÄ]õPÃÉ?8¾tÑS¬ÿ{”}Èv˜É^&Iz2Mn:ÕÞµ§s#)'I9Kº;ýe|vþáË?žßŽ/~¼º¾=ŸßÞ^ߎŽh…óús5”9M‹v#çWq+:M»C(x˜¶ÈàzGÑÿÑ}"ˆíçæßø­9 v½ædØ{'Šûà VQž= `åâ;Ó¯Àíh¶¨ŸòYýD^ögU~bˆm<Žàœ =4ôk÷ˆŒ~Jtè·gÏ⎱(L1ã@Ó+8|0.íSC…ßAëÑøVê{B/Ë æ2G<*§ÚØDmrf¼+aÁ¿I “t(¢‹c£a¿s, ¥Óùúr]-:A2'šÕ‰÷”ÿôN²q`Có>zý]—Åve|ì£Es5ÙâÐäëôs#õŽr±mxSXTp¤ò`Þ÷—Yú¤Œ ñ÷Æ+¿ ëqµ˜¾ì¡9:õæ,ÑœNò¡øŸ)C⢵¬ÆNñû'YjÑt/co½-ÄjÑÊ ”oÒg¿s2c´óeºÿ•*Æ#öqpØp_œÂ}ÚË €¨ñÝôŒß'Ò•Snþ>PV‹ì è½Õ¾.×ÿ2Tl ñU!×ÍùMö/V<Æ;X[f@î‹çÌV·25ŒU@§RET¾æÑ?þ€ášÚk§dŠ0²IR_{ÿ™2¬² d6òù·Úª!$òåߨúµƒñ z‡`ÿdÀS`·äVQÄM”UÍWÖ”åþÊ70]Àù/ôÅy9ö fÇ÷­É¨sûè1²Îy™{Éè¬ßZÒ耞¸@38ßG‡WeÛai´tZô Ýó 傘܉¹Óƒð7pë?2IG°LÑ;„eg,pâø€'¯ãÚ¾º¸ê*fóšoS@Vβr'+²î4Iö™H²–D>ò)ðÄ7|ê-X²Äœ%ÞÑOÚQ’¾d‹$vR…½ þ4ÆŒ ÂÂýì ç1T4øj1 rªäkEó;°;¶Éì¨ôhS?”à=4iÇÀ´¬‘Ùÿ¦[ÙSwÝ¡ÀE-òg¼Y¬—‹ô(@m/Â~·7x;‰¯¤ªivw}ù™w)aÌŠc¿©Ÿà³Zƒ€þZHOð¡m¦ý “ðïdÞ‡¼£G z®_ìv|ÂT¡  <öÂ+8:@£ÉGrdߊÐ"–àufN™>lÇD}™Ì­|ÿVO¤E±Õcw"$8„D™mH”N׈ô§€€©’ºi@ÚR…ÝÕ0øÃ¯¯Œ´³­.òN뼫Ÿ_ûÒœ.¼¥öTT©u'HC°Õ ©òüÑPRAˆ5gL¨?¤“h0݇Böª,daDòX9X„\â“Ù>L™³ZÉÉ kz$œ :B.AËl´ÌÙ´ä4½ˆ#[$ö)%VÎñarâ~™É€kÊi9‡)F)ÁqŽŽùÍý](½g~±Yxм¶EæÁFµŽp¿Ú0 `™É>Hq/ϸ*D JY6LCŠ~ÔÇÀ1¤¿V÷a% ³)‡î¹B2 ’}²ßWƒ»Ýa0‚L‚d ÆÝÚ p0ØlƒŸæô…CœCB4Ñ%DÀn_^™É[áX‹²œ{Ìç]ÃTAåY7S™ + "ÛÌf 4ÿ5Nwb/™22Î ¸‡lJ 7dq>¹‚Ÿ.ÿfðs/‹iZ­„°ÎhÕ«!^žœ¦Ö,™nÏÆìÇ?_Œ^ÂÄüœó}´k 4eg×œÝ yµY§v©ª³"]Ç1„ð®în¸ït#Ó;ŒAHŽÆaÑi„þé™N€šk¹yÁm¨üïãmàu»ø2UB·çdà­µÄôyléõvʰzì” ,µïX¦†Æ2Õ3–©±l´ÿXf)êÝ*%­ZE8,#¶Ö¯}ÂZäw˜7Dg ·ú ÈÏŒèÁrEéEqø…²)Ž,…Ï‚ç쌳{0']ÚEÊðòN‡¸lz'žíV/ÿ“f¼Ò!‚œÖœgÉ[uEƒó—/gC“Þn>)Ò›mŒÚ„ÜhõØB°»ON²ÍpS·ßÓ²¤È ÕC !ëH¼ÀªšîQUjHçÆ«J²µªêêâ4©ªTRU©hU©°ªT¬ªF½Uõô´Jkñ¡ƒ¡3Zí݇`¾}»º‚Íù·o7W½í}¶Ä A‚Oî()£›-q³á{æö¼çºöÌ4ŒŒ¬gEØü¡­¦ûag$kÄ _mBž7~ âºIN6|GR9HÞý°%“`ê{´8„÷ËÏ| t÷pP©¤rJ1U*ÅïN±œ[1±Oö"‡Fžê"ïa)–RS Ü?õ£°ù àþÉê¾’j﫦|* 2ÿòñÛÑv¯ÚÇ›LŠV±™‡õÜ|SƒyÑŠÃkJÇé_Î7€€‚8‚ïtÍØLçCçÿ!•UJ©¶ø&ŒTVðríQL2ÙÐGÁ-Àrñ{]ýkpó›ÁMšñfz1…c«#÷­ÞÞg¨“à5ô‹%nc:Ôsh @\ÙsrXD$¶²ŸEPDüiü ÎÊÄ“7‡­äHkRÅ}¹‡Áe1ÛÁ½úŒ ê^b-/¿àO˜En‹'°ïÄ›…­.Û[Ĭ§äqÑ<8w¤Ã¸Í3$Œ2raÜœâ»ê?@ÊÿЊÿßì¿‘ƒ £Íý_©mþŒíwNð÷F øE~­á ¥†…B{½z2ðª¿MgTÙt;¸$öK©zž}Áüì –õ k€‘Þ¶©ú!Ø|VÝTVeS¡*ŒÀ…áCpØ}*'ö‘æ¶Y¤Xÿi2#}alþôŸæÐ¶Y¹çA8h}¹ý¬e¯—CØ…‘¯S~ýƒFNükiÖVªl;f£ ´8d‘VGnÂCÓ²\ˆ®g<ºY§ônà)ÛÌ…Õ†Ž>\´ñýnbŒ$Cšg_Fçãpý4º;¿ºGPWçèj„êáÂVíã³TÓ7Œ«pÎÊžŠá_¿pOhaîIþ0:ËF´È;ö„Ù+3î7Ó61[i[é™]7Dz¿-)ü‘Éïh9;êvÅÕ+»£ØÒ{à¯aüiVªW¶!Šˆ¾á¬¶dã­³O0Ó°\fˆ|_¹RoË’‹sÿû™Ç6mâq_¯ðhú{‡!åÇ€@¦"‘¾ùRx8ý/±Â›FТçP1!)•°Ë M +“˜|5 8VÁî bÊVcHAtk¢GJÌÈÆ¡CúY”T,Õ¼ø€ø„—-0ßÐ8|”°&ÔYÂe`ÑrcÒ:ÔèUÀc‚x$c±øw\Üt^N—uçü¡$¡§ðj™}÷·¿þŸ3=ÝnWûëÿýþhð ×°®ðÁL6å¨w»4(ÜÛW¹YøŒ“»¤/L ×aù†”4œÙßïÄLŽžÉÞa³úŒë:nhqõåjWéißËõé´¦£oì+ís!ŸÑû}¶©Ÿ«Ru|Btî1žk®ÅðX’”sHË>«¡aBz‚íSÆt¤å#ýè•8®Ö`í*˜ÉI>³RÖQ·Ã‘Aáá,kë ¡ýëp…0 ÿL?Žº¸§ÈÒºd™Wæå}a]'ôI è½ÙÏ$Æ5­õF} é¸³Ó‰ôÊÜ8쑳|znn^ÜBÿº³ž4âZ#¨>eHÅ#!ØZBç¹åìP‹A^ÝÔ¦‹í,abòÉMã„_ Št®\J$öñÃÊ–4A8²®r¤It²ìÐŽB :˽îÐeCõQ°Ô!¥>y°6qÁ×>ê/÷pGN߇õùþáiƒ€D?ñ<Þ3ÿ~ñÞû~ùˆ¿ÓIÙ PëÉŒ"¸¡ç{¬ý,û޼ø|ÔýT>A¼yPÏþ¢T~ØÅ>y~°E½§¸‡&^‰4Ø/ÙD´RM/è×ñq½ÐÓÜÅžÞá,©KM”Úô/|‚I³­ÿØ_jD×¥tLWâ¸çðØO6ý(Œ°Ø!IÔ…‚µ!ùû7ŸÑm'ž›¨ˆñLMû…Yªª­ z6î¬-Ãw_ü: ÙáY˜›ò×­Ó/z ó¨Uý´_Á¢Ò°«r³]¨@©y «ñ¼ûðmÑúº_6ÒÈvk¾®J‰(&[ÿÛ,d#_9·déèê ßO·î¦å½tp'¿‹é´ÞÚIe](…w\{žÇ6¹ã'Ë«¯µ5gó²†ó$G¦°ºG]z´Nrë.|] gÑ™ó ^µÃ‡áH0è÷h\¸ÐÁt¹»WL"”‘.Ä0Ë ÖPØ׿â˜töÄd+D”4–NÔ,’~˜xi,ZÝx½ ¯îÓà{Žì~;¾ÑI%tÕó\®ÀN¯|¥Jºß±ÂÚè(îçr…Aóΰ»z©©IöúqãÕáT¡²ë"[gIiDKÂNñï@Ö¢‚9¦Cezò˜ž$š_þ7NåçIv\,Ü%øòSbÆJɆžÄš_¾ÌT? R®ã!É¡·#/’¬#.!¢!d¢¾¸<V¤“¬;.6Œ¸“ÙL:ä"·}”eÄDC·¸¾B¤¦Bò¿„K=éWëEÙòv°gp Òg¤µ<+(Æ`ZîZxÒPtî ÐøÜî™ó«‰U~iÐ9’‘‡ÎX$Eî^ýRp?qì±HtÆ 5É‚+g3q>É5š#S6pdIÉDK…¥¿ýoîÅlˆƒÄ  5?}¹ípØF&äHyHI²ðO+ÇÄ£{cGòVî/ù/6 ž„òzò@—Sù˜î$óªy¨ÓÚV™ëc~»YŽ‹¢` Ëjußÿܱ“Üh\æ:›-3!Û.[Œ¸$¤(¨úÇ=ÆýÄ(á‘"º¾À.mT¯çµ.ÄÝe;q7ØÎÎPßô`ìûŠÂ„ZÁwU˜Ó‚ü =–/øl'­’û¸üiAN‰4¾ÙiUyT ëGYóE6-2°³Ö[÷.É`!zðGÞP{ΩRK–˃Π"„5ØCK‡P’x¥±ÞŽ3³¾/`ëC/ ÓšM»+„™‚,yÎä­†Ô/8Ö¢Ì|Øâà®2PÜÃKš^È”ò ŒI¥Äm\lõn&éÑS‹+’ä@Òzú0Ð*ýÑ×cìj¬¤£|ž–ëA¿4Ýôa‰l~»86kà«øeq\ý13NZWëæ dhZ*"b¯48E ö,Ò@i: ò÷(l‚°ÍìñmbŸonÏOÏÏίNÏ&5­×¯ªo0šâ’+•U ®®#¯}4ÁOƒÅëÑyáÔÉØ”S^Z«™³(ó›ÊaÚ²ØLç^TTÓoš×GPú§,'AßÙ²}ë"|Qâꇤb½ÇW‡| :$~{É ¾n¦µ‰Ë=³àà‹Ê>!é¥믫@‚¸4iŸWâwŸÕû¤æIñŒžÚÀ°á5f5å;P‰î ><=ijIXáʪ“4{y‹ZeIP­æ6Ö6Ü=¬×ý›X̃“®"‰ÿÌ™ž®¶?â–Tõ<˜i‰b’qqœRò¹RcéæŠ ®%àEŒš6Õz³‡F# '¹à«ËN1W˜{´›ãg« kœ¹{¼JØxõæ C íÄVŒjM!Çtƒ†§2ôKó¡þU±àh&!èŸ!HT¿ÓírP¿ r Q"€ßžkœ¾vÊNª&Ûè<Œt°‚ãð^‰éÆ®—zñަq ÀÑÇc`!Mnihlt(£"èü¡@×ô”°;EÂÌÆ ï¶f@öúﻚã™JèO‹ð¼ð¾^ÌnÜ£¤>6Ê Qª÷XSð}ø<½Íô‚² j‹h¡G½•*“ ù´>&Î Aq²Dõõò ÞÕ›Z2z¸ÕõDï¦ðŽ`ÀÛq””1QVNY’ÇÀn!àO•­9.¿#›Î‹Õ½ô¿-fzVÒ«K#kðÄ'Bèc”§;’˜^M®užWåìæ\4gÝþ+ ‘spe…l®ÁÀÝÑ5˜q`äŽ$ä±Þd†%°˜Ø™§ŽH`ʱ>0 ~ZP­ºA×8ëZíÐÔÆ!,yïÌØÎ"ûzv}¤…Oj…ž ´à²iöÝB?x(`þ¯ç·®Gçã»ëñèîìüööˆ-cÈÏZYJnÑÛh6ø´hê"gÓ[i=V'P!mLÅÆØ¹ÅRýJA‚MÞ²D»t#†¤ „C»‘Ýë‘¶%]Ð…Ôº”%L­J_‰?Jr1yº/b0Ñtj‘ º©Žú8¤«jIìbæàM ,"hkŸ¬×ƒÕƒ(Ü—Î˥ũ¦úW‘„Ô#õ±RVˆ–RÓð2-¦Ë|#dФ.B胓&v’8 ØÖÚ©y©ñ=kë8íM»H¶ÞÚú;†XÒ¢¬ûÄQÕq5»z±]5î6¥§rÜWärmC)¸d Ùןÿøÿ`ýÑMSÀ2§*ŸÀ¬Âíô‡6RÄÀ;ú¯ô+;·féX¬¸µF®»•…¿ý=‚NØ:¯5¨ùžÙäE¯Û&@@J‡BöDB¹Ûkˆd…²k8ãÍ'¤{ÐuXH%´K§a–,¦ß:ćð\3­'i©FŒÌŸKþ[ €HÇB…}FÃßÀ{³vÍΆ¾7@&õszÐ!Çãѿũ¡KÄÚ?[Ño8ÏĤ ÷WV5ýía0+XÆW/Ç4XòÀÐÓ˜D¶Kß-‹Y¿CIÁJ!Å~}ø!¿ühY4›ëQ» ôƒ¦•‚u\L œ]ÂTÞEnà@vŽÙÁ¤Þb$4M½Ãz‚+,8ÂJ"³Çb׎z}šWÓ9ÙFWÊZqƒÈڃϨRîeÇmN¸H3¹Yð%Gt·â5É6!æ% ‘3MnNÈ ØœÉám ¢ñ&\€u¡ÁÖlí{10£L´§òÌ([ |«YþŠ]!ÇBlü„ÑùáØK°›®(J¸KjNüÇ{<¯Ý±ÞKzߌrxX E´‡úìí³+¯snЇÌÙ¶0gaä@&‚åþC†âuQûxîrÊ Y6Äôþ<ÎnK²çÇ¿ô¢à|ôsEÎw‚5‹yk?z÷ ½¯KÙ]_ç;ÏSÚ¥`«ð¸/¹MGmHoÑ’¹«A3‘þ¹+ªžûTæÈ‘ùBô{àîAÅ;k­ñbÛµhê©ÃÆ,ÃíC3"Û#:,^0ϨwDZ)õÑ¢öôºÜ V\FOÅœY"öÀ}¾YS *u|Ç–à–¶õm”äžgéÀë-€®þbÉRzŒ“¹t®pÀÉ~%Š3w”- î,e@G«Ò…nIY!¾ I Ri‡³Y¹^Ô/ãzwŸTžÚ/ææ:7DlÙâþ„cuÓšü5>ïÁVÙõ×pÖrýõ„"wq+ÅGŸI˜CjóJñkˆÙ²Eš?N†•æ46ÎÅVñéM?Êâ#m[ÔG›¾/À;z”mÿìv¤ q ¯f3~Y +àyÉ­Ÿ»q»({¢~payªtæñÜBä;Ú.|p»_M·8ZH¢³ž{o5Yåîlåã´>ào1°˜sKwl™‘5?õ3ë‚,J¸#*½C›Î%NXtíÛ¦;ÙZè-Y¼ÎÛ‚"öu”Y*‘ªâ%Ù» ƒè{p‹æí}ˆ3Yý#¬wW sÆzpOÅÝbq#AmÜŽYŽ~ŸONo‚+%ô}.Ë0 ›‰ÚsÜ8Ò”Êí¶UÑˇ¹ö‚XÄÈšߢ¢Z„5|ŸVízQ­Ç뇽ÊrÅ‹CTùú¡«DVŒç±5¯Ûr¨`å30¦®LZÔ^A(7²2qlüö¬LÀñ,­K`AòŽ È,–.}ÀÉru^ôä’¬VšU±Ïê)ø}}iÀ;6()ß܇¥„·d°ºß¼o PÄnÉR¢%…÷¤ã£þ›ÍaÑÙ3®ý„ e|µÁ¼Ç÷ÞY¶±Åëž_Y"bCêïÔ÷ü;ì“|W{ˆã×#³‹w`uO;ÌH‰Ik±Aêøˆ-‚”ÍlìsirívVl¤NûmZªÖ«Ñ°+÷Á³+û@íÊèׯ]"Y¨îö·†@òj3Y°Ÿ'ÔÑDáºl¯N19ÃtœF’‹AÛä±±¦Ir ÖÝB´e¤`”—»£é–÷é{ŽM ííp“´8nÈ‹àÆÞ.q÷V«b­æûo~¢|˜†®g6ôEuM‹A)þö×ÿÔûTæìnGVöþ.R_aÌåÓC`Žˆ’Ž>Æ)’åL-‡'(0•7©_/)øK„ñ©¨6û¢<¦/d#Øoð‡¸_¥§×;»ë³—k>x0šªÓqKòdÌŽ¢ÅS«Õ=ÕA´hfÁñ0Œš¼u‡à­nw«éE³Ä±‚­¦ñb­¦^»ÿzušq u½P‡— p(›0 àuDHZãÓ³Øq<^D8’ ¹Ë€ÅÞJˆì8ýãÅ¢5@ ðo ˆäŒýͽìQŠ(c¬,@˜[Âx‰|aX®«+ Ú!LgxmN§ˆ'Èd]å½d³nia¹( XT~Y§Åº˜€Ÿ±=,ªúÛeu„Ñ©$*¬óL–gÇ)M&ý"ÒEížÅk3EŠF—¼ÝÅBÒ‹Ä!a‚“íÒíqbØÍÖYÂø™aDì|&´i¡Š,6Uo߆‰% 9Ú…FmüΦAB¦u'Ô•Ú³Q…¨+ÕÝœ,{z[{‚´v´_IúKÑY‚~ô<ãØP»ñQR¨}ÑF¸"¨‰ª½“þ ˜-e¨2ÏØ÷-_Œ-R@&ë)¡'h"šç÷‰mͨÙwÔê`ì)jÏÈ ‹ÆÄuíò{›¿¬Ëf3oÊb†îq‹ekÊ'‹ɧ ëG|´«ŽÏ*EîJ>ù4p«cϺñ$ª½¸ðÊX­wÿœ\2AÜ.dÆJéqì7:ÇžKûX6«rÿvek€ÈúÚ˜/H¶0ÊaíönMN6Ê+ ;›ÕO«ä2 mô† †Ûäùóù²ZUèMX×¼nDËJ)Ój\@tA†ÁÔ)v€%ŠwœÔBu•¥]c¡ôŽ-70­9rmfS¿ÃóK̆óíŽ=Íj³ÞsP9Ú 5E÷PlÙ;Gá«»˜áL×ÐòöÞ:W¶ÀÆ/•Ú]×ÅôžƒîWÏ1®6l¦ê®oOL÷Ìgm{™^õV:£.–ð×¢š¦ï$;#å2„9F‹ó¶úÐ'oð´×ň@g?ÖEç»ß±uœ¥£T±Cë@@€ÜyT¡¦Åj>)’±ûômàœCÍYìb~ÂONhÛ·šñ4ÀWESª9~óR5Rÿ4~Ï>㊆¨ºûŒ'&}µhÝÇdí;UÇùº Ó3Y¢äxf “m"ÝÅ»¼Z-ÓZAA¬3£0u:»ºá8æ*]]Þ„#Q´¹¨}÷!G§êÙQXööõ€î¢­S,j1£Ñgõn }n?Ümž6r¤éÆ.Dt6n¤‘o><ãìxÙ-WÕtïâ„<±âhš¾âX=ÅYA`ÀäâlôJ¡XW"2Ö·eB˜_(ké9I÷ž±~ºÓ+Œ“›‹l+c\ Ýš$Ws‡ˆB W”X5‡"º®Äh¡LÎP:–BÔ#b'WW)â£a[Œç?!=ú½Ø³þ[<äèL¥»þˆ®ú'*ýM[ÈÚûD¸ºŠÑ÷¤˜ö°…ˆ}€Þ•%¼&ëCÖ÷r ÇøÞGcËêÂÔèÁ É­Mî#¥l=$†æh‚‘ê”~£íÓ_2€mG#¸Xùz620)Põ ·NAÜËé'Jê Ž2(G\Üžýô€8 ¯oú_Þ ¿ºéX6ÞÀ¡Ïm£ÿvaö*Fo: Ë·!Öh®õÂâVV Åã=Ì4_Jðz¢YÿMSb²ª6nmmÌòÉYNòWîf `9݉}툠žó¢E<±Ãc_ØÞÅ,@tsœtÌï€<¬` pŒF°Ç´ô°Ïo<ÌNhä=úÈd›b«ÏØÓ«3£ŸØ2Eµ‚C vJçˆ÷˜OÛä-HñT0zg˜JÕÓÊE9”ŠÈp ®>èD° Cpñº›‡îÅWµ^‹}>ag€ (sKÙñqcâøc³mV™Íʾ»:9ùÞ>´îÚ‡’ÁOzìÊcÉç-‹„$IÉo¯ÊévU ÖæZ®în8`g»ÊŽÛž-ÔFàpÕ0¯k¯{ï~ñA î‚ßÝ^ƒŒÿ]sžÒ:xàe´ÇÙÇ&…ª¦Ä7;Évñ|1r3©ºI€KþX‹šWæº o ®p|s¼ÇHá Å÷ÕñQG²û^†/ÿBwÕ]»³èj½‡/•N®8øj÷­Ò4:8ëùzÉ×î7°˜‡Ð-ðû@î‡çÝXÙÎkqÌŠ5Ì8פ»eú„Ì' Ö‘‡bœjß®DÚ0µî.‘ðÜXë ÞöwË™^`m9Þ0ÝV1Å®ŠÕ>~§"ô~)t~‡·)É=#p†@Yhþ?Ù©µ¡ÊäÓCWäLÐÂ+˜»üNàñÇeÕ45gj˜œ&¤†0ùiˆŽ’9ýÇŒyqG*{¸õèñêwê!}zXO³e6CòÈŽÈ~“¨õH?]T€ºc³B™Ç@É`ô_¹áäI_•ôÃähU›ÐÑúçyÇ:Ù×ëÑ(ƒçtpˆª¿~Ú„eغÄíÅ…cžP„ ŒJ>ªFmx´oÑyÀ¼Ý‘ÊæUoU¢h¨MBÉ¿½[BG ˆcA)8¥'ב Zû–þ,¯‰˜ÛëϲVÊG‘äÍ2 Ž(m+0mvlLÚ< &¯'ƒ‚ÞcÒs#¿û §fä0[+mÆlb–òÝ·‹Mœž79gÍ Í×u·„Ë 7–o€,·é%F¼±ÅÖá”ãsÞòŒ¿)™¼×­AÓ”Sˆÿ•†Æ#öÐPN ¥·ÐP²Æšá&œÝ£ü(ƒEe-ýü§‡Îü:vm„Ã{'_M{ç$ðy›¦6_Å“àèl"•GháPªƒ ÷b!)+@ æÃ=‚Gé0¨9Æ“÷A­‡B§aL)_=8×í€BÐ¥ ˆ180”ËíL§²2O"‚ÒÛÁC?nˆ¥ò4Û{`֧ЋªžfÖŸ¤MÈj)#‡ «[óL¸WŸ ¡ÌY™}8c‘ ÔjúH¼€Z‚Ø·Ø7÷œ=P\D(}0¾SI.VîdzrQê–f­I_/õü ˜‡yàôö¨{f:p&ƒü¿ÇdÖ©w\,ªBÃù¸þaØsÔ‘‡Ót¶{ey&`ïnÃѤÖ~7—,RÙp6‘/3Œ™ÜV›cÔˆ×ÑÑû–h¨,Ý¥ð¨8T7`!ûÛûzGÀ ®Þ[ vô.4Ƥ‹u]j ë`‘úÄš0Ò¶Bà K.Ãæô&ËØõá+Ù¸7 a]ƒÐ~ Ýð㲲ݡ¨_½· _½ «ñk’…õÕd:H¿&YôîÔÁn µgõ°IàÁn"ÒÃb‚†{Y¸Ý{Ú›nŠb%yý¾¨[­k7à®¶sx׆üìl÷&%zýfχþ&û½N•‘:oº‘;Rá¨cwxQÒïu\w·Ø£ð¶ÿj_Ó¢*s˜•:BÄè%s<ÖáÁ€ÉÛ£€þ–¶f  ÷¡,ŠàÕ*¹ÊjÕY[µŠUT­RëèzYÞ®EúZªE,áAf  c†¸FÜ!F!^§£ŒKœ”C*‡±u-¥¢K´|¸A+‡ÑšS§´‡}I„‡µÅ»‘˜u Ái Ü Ëâv!ä“·ä¡÷ ò‘]ìÓJÖáo;}¢3½ÖÇ}ݱ¢ó“ňhñiYFç·M„$¾.¥g»=ú‡™Éß·›Íë†Æ¾vDPB‡NK[ßþ-Ïtc%yý±n·ZÑJ|Áå ð¢éxÙÙî5%J}³'– #¯´¦áv‚‡Ýaã8ø8ÝÁÚïD=ç>0²v}Öa]–½dš«ÕP´è‚NÏ)ÝV‚#•çéK­¯Z #bÌ#/×#sÕMXÒì"^ìÐoí"ôg?ºí"P³³‡@Õ)ömB $°‡ÄÖ¢^•ä9<8 ÛˆHU$A´è<4ž„#õÞ €Ú–×ÏÐ$ôá—øzý¥µV©3‚°„ƾ«F’ T6ËCæÞì‰zº°‰æ[™=÷Íï÷¡èï;J6/ôÑ{÷ÞP à¬VÅCBãò %:ÊðQš}õ˜é4½A Ö%NIºÑ-fë½ê1F/±êü®ºôX½Úü|v#ë³ÕIð§¡Žc ¶pí¦~xtÖ&”(ÃGEiþûPJÒh¢@þK/É`é¥P¼Â`I*íV`þM,¤UÕWDóo_×I{ýÒëð3¯Í7¾+ÕâkÓ¹q:HÖ¹HA›;› ¾ƒ™ŽuÏß$ôæµ€H¹9æzP%›çjÓÁB³xè)6›¢1¾vHÀ*é$JL÷ñ‘G³€x՜Կ ^žT†·85d¡Cã)Í¿ü„1p ð 7 GP 8êÁo5òùäª{n@¿àz½&ûõ"é¦'LèC\ç‹']„Õº׋è•^ÊšE ÄÊöŽEy¼Eÿ‚pÊ(´AQ>4¾F‘Ê&å=­)5¸ÕV÷J­þ±¬WCß+¤28Õ!à„0*9ŽÜƒîZßtV®ëâ~÷­þü}6iêb6-ÔÝš•›£§r¸$O€5ß8ÎÇ0ËIîçÛñ›VyáeéG©±IÉE»ßw^ŠÀŠÍNBF;öÑ2J³2ñ4å}Ù”àݼX¯õ§€îáÂÝ‘vÃx>Ù0¢¯`2޳ÛóÑ:½9ÎÊÍôÏ áÐO´ÜþV#µê9+×Y¶ýx ±x¯ëõÂDÅ"»«o–… ç…ˆ77ï ‡m<°6¦C­=Zú•Í&©ŸÇR¶ôÌ&‘3›Dcñ‚íÛ¤P¸ýé@4lÈÑEÝFæ™r´Ø"­‰‰—Ôv"Ì$âhuöbR?§ÂõÉ[x9;˜s"ˆ9§ì ž7R Ú<È‹`ƒäèÇÖ4˜ï…óßï'åXAÍ˺x;ïŠí"8–†ù˜ËØ´ pOÊÜÊÈAFN2¾i‚ìTO6ÊìÜdßÐ¥ ¸™h½ø×Ÿ}S,ãŒ4ë®ÞÔc™!`!¨ò+ÿ¸«³›júøgÒóT-P\–PÎ^§ÄAɸð[éaA|ÓùP𠓯Q”TJ=v/;'ˆ«1©ëG§ýO`ÜBJ)ÿãÿœå(}ü¨1œ`U«éb; G+ÿ1‹´ ÂxMYèTHåpèeeèü…ö ÿhþö×ÿÄ8 |—UK _‹¯ý2ÃC¸65¬OÇ“× j¯)°ljXðæ–ÿÖÚ¼Þ.f8v+³ÿù?³ÿõ¿þœ,TýN·æ'À…âºÆd»¢©È3´î³—U±ÔË“ˆáÓ*øÃY·æäh­M0&VýgjFúßk`VÔ©žjÀñŽ]Ÿî¸„›¼§bñl Ö!èןàI/ãÉVÏ!c´® |úÓ~5Uç¨#9耊c9éÈµŽ¼~ÌÑ@¹‚ÈíOÙ'ýÿY­+’I3"….ò2^iàóRëß ÉK¾Ò`ïÛb‹@[Ùd/õV¶ óÿœ‘×­FOÅt¡Û¬FU ‡ƒé¦gõz‚Ñù¹È·cd›•N*çÅJïRNN?g"Ë"KACàkåõ5Åf>¶áZŽáŠ]/_„§l³ à-nît9Bq[ÝgËß„=m?@ 4ÆC°¿×íaÎå16çRo²)V&ÆbBŸ´&$äLW0ð³Ó`QŽA ª(iˆZÚMù f.Ä€8˜L^4B| ðŽ-ªw4[ò÷€kTD9-› Ev-ÇÃ1Gú8fA‘{1G¢ì-OÌ‚"£§ È7¯§8ཤ\2ôq –"¸xˆ²{@Om.ŸkZß/!ÚáKˆ†(Vïb"Æì»f£$qbÐáoáåû öXâ˜9°HjÒQÜݪÚ= ö@‹B’'<ÖÍ9N;«Ž}¥íË㈢cßlñzcÿkÕf‚Ñ#SÂEa›N ò¯ ©t2¥ðtÇ^Xæ¼é[µšé™7[³Kâ]'|¾ðUYûŸL¼ÆªÐÖrA4«†³A»?bZÙ›r¦×1U1<¶H(›åA³©Þ2•qj³Ñ‹ }.‰©9+ï›bxÀóÈ8J–À(Åx…PzΚÁP‰°¨Óž}IFG«ü`…À¤ÅûŽ’ P­èÞ>­(p¹«ëN¾§s‹BfCóÂ`ÚÂ?"œ)9kãmŸY-‡ÞþDI¸˜Õ‚‹©Þµëèúøë§3øÿÏZþvE&ßZm ý§‹J×ø0´T@[¡5Îò Y†ÐÁ¼#Xè…þvÝ*áYF”ÔGå?Éðd… #2é»èqe½ò›ÒM/ ÑAÉ÷ðù¬¤Iþ†ôqÂ>ZO¶{ 8"X E­Éô‚ËÓ©“Ë<^–ˉuäF1"x-., ?E@>ØÜ¤¨ƒ¯U,~É`é"… EÅÚ •ž98ÒHIö‚ß‹9T:y{¢!ò©rçT>V¯yï_ËÃõÛ[³ñ:¥Ìc¸Ã ës ±¤¢î€âãàW Ç,Ø1$4lÌÑ1Tðñ%ÁËÇ8m ’¼ˆ X¢óy+î(YîÑ#[ó­7«r3Ö{È”ú i%BÈË!ÏGhYÌ­^sÁ/\Á/ÆÏ>Ösè= p¸:¿Ë²í憨¦ÃÐÔ´ IM=(Š¢é^¬võ#® 1ÀÎøN÷ÕÀR®vUS¯–)óa›Ö!y‘H–Á‹e²8J‹­KxS³¨´¨M3¼|’ ˜œc¶‡Ôc¤ëÓζáwE«[ÓèÌXˆÉà:aEÅß@êî±kËÙ'ÊÍ!/Óp»ªÌOƒæ#ïåÒ†–„®J8i¹`@\•c]/ØÑ~SoõÕìyÝdæD¬âN†*ø? OàâÌŸ½k@c½(ÖМÿ|NN+&Ûj1˘Š%ì‘âïá·tßZdp‘c7Õ \Ìá&‘„O³)´q݈ L9Æ#”€LøK Šâ¹ÈŠôyèt¦Û’˜ÔG“tœ×ý®ÐÃêµß,v±ÝÔK7bÒæg$@0ÙC€)¨ú#þ‰§Š8ñ¢ÓCÜf¸ X•Oö÷Ê£Zͦ2&~\D >´·Íðõé^pÔ­Ó%`&EÄgõÓjQ3êvdÞrÞáGxþùñîO{ ±÷wpeÛ·¤MYËÒ~;º”M[ÃÆ¯­U«[®ÂE*Œ¦|“*Ðgƒùn‘5„N¹ÉúMš·’"ݦ*ì. è,•„CEA¨òÔS ¶3ÓMx^oî«ç‚LB€d¤È™­kb#Jž>0äÔº©Ÿ‡!-RBKa–É2ø1Åú7‡­€†= U•óó;{û3ˆ­‡É¡ÔDyH$ñÆ„„G΋«#Ñ;Œ‹‹‘ÿTN„1Oô(‹Ü' aû¹!hŸ¤Qw0H'y ¦ ÿÑf |È:°V;¸Á ‚u¢ïeo'y "gG rNû³”hÂTà°±J”¶Í3VñYúAØ´¥uç©€;ÂVwv ÝùâªÜà„/G4gvþ¼^Ô ¯žá%TµJZC·HN—%qºT±ñו…«‰évQ4>ĪØã;Pò•æšâk‰%ÈÂ9j.ôBsú˜Û[}˜çP\ù¼nØ0XÂuÿl Ë#”Àø=ºX#+q¸ç>¤8Ù–­Mé¥I­y)[¡±„æ2}x.ÝB|gÂR‚öãX3âm ½ŽÞ,ÓËõAÈqz‡Úäç”/¬r<»Å¬ËŸÌûy‚6Sãi1|öáÓ (3•ët‘JÕ§îÙÔÉv3¯›ê7³¯Ñ}N¾;=¹ùž [nɺä¬T›z ʧâÅDÉ2šDÐMè¦ ºñAßšŒ]o÷„œY­ƒØÆR ™ïÄ« N»b±--¤”U™Gæ Öc”bWÇ0³r(æ£kÏSg/Ë&aÝz(0#ÀiÔ|á/6[­!¦ó†[¯­\¶bÔg z ¾ á¬'u’A\@(pr†‡“Ó¨Æ^VÓ¹^V¿EÐ꨼¡â­Ø-ó3ÄmÂIIûù3Ûú§#î¹søˆ‡ß=#ê…·CZÓ ï„Fý“_„?o`Û«Öe9³sú†2‹G³I¦fmö€‹XÇ¡e劭“Ø¥i)³1Ø#¸MvÙ^ :‘št#ü7Åv÷@D b^$‘H*`^ø‡!˜Ûcb†QX&ÜͶ£<’ÂÒ¿•u‘M¬ZJ‘>„Y§AP7MœÂ#”8(ÇBi^ÿâ´ÖmZ-‡—w‚H¨Ö‰žZý;<(–—Ñ£«ËóÅIuR‡Žöà°Ë¦õQ¼´GÕzϺN:þ “!a˜4/L*$ÖMÁ³¨±ûõM)€fQlÒà,ŠM΢شà,LDË;óƒc} ¶ÚY·‹%é¦Z–¿Õ«4>¡@ÃN3‹·a7Q ¨ 5Ü:$•P©žnHÇÇwøûÉôóSh1ýçÉü˜ê¡Ñ·«ß®Ý%•Ê©+&Ы-ø‹®áßZ´C *]g;ºÜ•ÌZð®y•G'pQº‡Œ7âÒP_“ÒA¸!Mñô¤3ŒÁÒýMåén*>æÕUg?æî§ä’d6µ— %[’þ½~Û,¥®›:iX‰P83„d˜ZÎ<`L$€5ÕÃ|“K’ 0« ScsíÀr ¹„$Í-K›Ð¡h¹gÄû¹h‘Ztué¤Òaù xLƒi˜[pMºðF=4ñ®"$yš‰PJСÇI~˜×PNÖÕt9l‰ `œááâ4ß2xÜÓ6¾ yÌߘ¥^ÞÄy],‡‡'LÀÃd¦ô,DpÓºm¸Û D×+wDô¼^:‡E§I ú§Ýšþ|ùÙ>Šâ¨´.Å‘™»^Ôs¾}@Ïä?B¦2Üoíć¤zîq«X¡7ûè‡}D§j½HÒz_ü:Tyc÷òžÅ“µÑlJ½)Zmô¶üD=êIþ'ˆ0f e ?ø’>Hø£F‡»Ô’–×d-VÃ[šÑèÓŸ=úoÝ}ÒI¬àZ`ŠšÁ¬{T‰3©.î|nÌêW`ZlW3 åd¥ªÉ¢tpÒ\VùÄ>*ëÔǬ9G*fÒÛá0®I¤°Hå &Æí¦õÊG\S|âÇ%ÈšV›Hå+àºd™| Lí’{p³”îÒâ|mþ±¯£Y /l)37¢xC­ã²š6µªï)þ³Fs{Éš7 õÇö,˜VJlwŸGÙÿðC6¢®v„Þlþ+½ìã‹•ÿþJÿ+è܆$ò-¸cÑ îiÉк½Ø¡Ç SSéK†˜Ù™¿Q’59eñXœ‰šuV¹«Ñ¾dÄ |F..v?ŒÎ|ÉÑn!¤û=AʶÝ壃ŸKÓ'¤[·ÃNW"z·§éÆ$=›MÿzPRL1Óþ‹OœWgå= êzí´ÑDÿTÕ^w=OÖýK=AÀ u‚Õ§ÿ޾«ÇOôó‡›ÑÑ3\9cHˆ7÷–fE'8KûÙжê*-ÔÞ§iØ Njò,üp¢F¿à.jöÄÏH t`mŽí)Ø…‹|enëõ½1éå#çq[á´ÒMö9ûô²†®ª›c]Ïü¼æmØ€Qk«„û”­¯TñòD£•¼)~´5Á§½{¥Å/•#ëú`ŽÂ77ELǧ·)û=Xƒõ—S’p™0ÉâÇ_tö —?<=ÿG{ ËF×Ï÷jüë¶Þº|*£Nå˜ê42™ 1¤~þ8¢£*4Òºv5áŽFìfÌN†uLª ­«rJŸ÷7æšÒÕ—/År1¼nxXÔJÍ‹X-ü^/€Yo¦ó²c-YÇ@EŒðWNô¨ðþr°pûg]QÁ‹˜óvɦܶxæ²0¹úM çå2D)˜쮷Rzñ9 N„äºjØS( íFL.Ä@ Ç/>Ÿ_\žÏ¾;¿]\_HñC½™Î‹ÿvÖÆOè3ÜŸÊôÀûN¯ª±F)ƒT$‡œ ªÒñÙºü¢Ð¾È¾â£¯Çl[‘‘è€zÑsósB}‚¸ ̪(SKmúr‘ÔØcø[ö8 þè`…ò‹¦:zÑ¥€§zz°³÷SýKÔÚàP@³19ŠÉ­˜_tZ†iöêëèeÛozíòYîÖ\ë?ýAØ+ œ§…1^²¿˜h¸%u0ÚFk>CÄà—/—Î, nx~s°çq1ì8;FIX('/ó.£No'àÝÿ®$Wß<Ò ¹¹ ý÷ºþKY®õJÍwö¸<zö=‚ÓÚö¸›|äŠéh!.›Ã÷Û } EÇZñ·ßi_OXãÃîß^ô¶¬ÿÀÙ#a­˜dâ¯è!°®‡Ñ—Ñ9ÛÛ–+øat&nHº¨=$ímI‹-æãß ¹·;ùÿQ6././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.441556 ansible-core-2.12.0/docs/docsite/ansible_2_9.inv0000644000000000000000000073123300000000000021275 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 2.9 # The remainder of this file is compressed using zlib. xÚĽK“Û¸¶.8÷¯`GŸAíˆby×ãtD{rBΔíNJ¶«î Š¢R¬¤Hm‚J;k´ÿÃÜÑÑ¿mÿ’Æ@o€”T9E¬Ç·Ö›à¬BźÌzÈÛd]TÉ!mwÑáùÍ>owõ&ú9JÅë¢Úäß~Úµûòÿü·(~5£<×õæXæ@œ•)B´?%›|}|–´m›b}ls?¶b»Ï…ò²¨Žßtȳ"-“-š ã•õC²M³¢,ÚçÑRú+yÊTÔÕhþÞaÞòÆ;Ž¡ªÆ3 Ú!mÒýx—6Ç*Éêý>­6.˜Ìy?í grl‹’裿£¿Ë<ôylbýi¢"4ù6oò*Ë“ôpÈ«M‘åèµÀã/ø§ÙÍòêíbž|žß/¯no<¯ZtvÕûÍ¿Ÿ]Ç¡ÉQÞ<ålÞáùìêL½ò9t¡]úóK(ùåßÿ¯3¨YÎW7Ÿ~O–wó‹«Ù"y·<­£OH ƒ©í±ÊXç>NP^=áq*.H‚ÂX–Ÿ ãšŒrt65‡2m·u³?‹‚]~l ÔâQ íQZmñW~U´n™1½ã΢ªÉaŒ“<¥åñLÓy*yÌŸCk86¥çÈ~o%h2foëë5ô¸Ûþ„«Ìg®×ÓâÁØ£/}›"/ÚgôSב:Hûûoj7o6uÅ?Gø')‹nëú?^uÓ’ÙÅ ÏJ’»Å§÷W7K€›Œ§´1U_VWÛ⪡”¤$y_f÷7W7ïC|s»\]]$oç·×óäîþöún@îÍÉüþþö~™¼›­f‹—“»ÙrFÒçÙ§Å*<êºPr’Ùbqû%YÎ🟖óûprƒ9 œÿÎèw‹ÙûpȮ竷—ÁÄK_&/Lµ^Ì.>tØÂJ[†—\ÜÞÜÌIËXðÝýüÝÕï…®®®ç·ŸV!¤.3øãˇ«Á.É|;»ø²¦˜Ä(W¸Îßy»XÐZâ6lõ!ŒÈÛûäâÃìæýü2˜8 ðv®¥R/ço?½' gÍÅl5&ðêÝ»dvyTžïÍ—A%Þϯo?3šŒmB ûpõþÃÿ,`n?†’´üxuJÖ§›û9nh¡I %òóüþíí2˜8W‡u}=»¹ 8JÇÍÊå´~³Eòvv?ÇÃ×û0bß]iXºþö/VËäúöòÓ"Lþö’¡Ù+0\çô%:<ðŸ/‚•°¸€½z n¨ë€ÂNdi/´ø2û#”0*«ùï!üvµ¼[ÌþHf÷ï—Éê6Y®.ƒŒ/;¹ÐFßÍ/“x&ÂøÛ‹äÝýìýõüf.I.?ÝáA!v$Ì®ûÅ*ù8ÿãtÁó2Æ^Áô–Dèû“+Ò¿'8B¯¯–K¡ '^.‚Jþts‰g/7¸â´æx:~ñi¦w ÜŒƒ¸@M仫Åj~..ßÝÞ_°î?”0*aÀ} æýl1ûýäêýÍíý<˜¸{˜è,?âîj¢³ÒI y9¿ÿ"‡qI˜Þ•É\Ý~œ‡ì¼ÇRæ÷¸õ %*Y~z»œ¯‚‰ ¶ÔÂR.¹º¹X|ºœ/q‹!/?$oçfŸ¯n?ˆ裡ßK.>Ì/>©" nIwu=[]ž«ÕÝìî*\K{uóŸx`Kû‚0=ÞÕÍçÙâê’öýØ÷Wo?­ ·¹Z„XÒÁâñèöþ€¢ÈÆÈ§›;l?îø¯–áÁÒÅÌàƒ.âʲC-bëå[&–Åk¾Át44æ¿ßÝÞªW–%&÷ó÷ó õ°ñêDöÉ*sÿ7Œ³_p5­æ7p†uLä îC,y~œÏïÈú銌¿CÌWoïg!ZV,èóÕý*Yü~‘ÜÜ.ç‹ÙÛy€íæÅíìò »-‹[,“ôØlé#Èd5¿¾ !ë=›a…‘f»¸½ýøé.\%\Ï~§K<Ë«ÿ =è4™,ïöiuµ íf¾ »× \âaq¨åc,ó žè&ïïoq-[t¸¹ 4«A_‚‚œ"g…ƒm¾J–,ÃHü´Xà“–¸—›…äÝ..ût¹˜ÏTî~g×Wo‡¹ÔìÓê6Ìd/šX~ùªþ^OY®`EµÛ 6xd“1:®Ê©œSÙd¯îo¤ÓÀísˆP¹ºƒ“ÃAºYXj QY' fÂÉýímWÞâ,¾ºÁ÷çî`—f~9¿¹˜‡uõÖþ![aN"Y/ ³œp÷Çê¬9‚±ñAAL&ëÕïW×W+Ü€‡ñ’‡™Þ1aaΦшÌÂMiy¡ËÙçy Ñ%DÐ2”¬O7¸o1\^Ü%Wdœ@–úúÄé2ß­î’·°ÔÁ ˜—n¿$Ÿ–«Ûk²zãÇ«»PÕñ_Ÿ`%˜ž¿!„™0°‘xßs†—¦Ç©!·(A^ÈþäA s5T)«{üëÝü>Øidzn _”!ðw¡ïÿ')ÜDK„mw‡ìÕn–{Á$¯þ¸ëv“CÀý@™ÍÁÉÕâjõG«ùuÀC6Â!‹nÑ–¾æHxð <\½×Wpn.Xd®æË€çb‚M¤hss{Ýo‹Ñõ”‹AÇD|˜‘&bj¦”aúU2 V9ô-!<ºÿãn•\áÉÐ*HbR¹ç’è@B'4 ´¡<¼rõåöþ2Ð4fÇêpSJdz!GÝÀЛy_ê”Z¡o}›7{xçPËþPÖ¥Í3¤”}}¨³Iì³M ¬Xz®²É.º×¤ïÊãC1Í’NFÌd`©»‹¼®7ù4Àv,«Æ„àå´DÓͬ«*§uuŠ¡½”ÁÔÀÇ=/ó¬L›´-žòÉÆ^ÂQ“ÜïçäòŒº™ å]šµÓkí]Qâ¿O©1*a¨­wuó8Ïû´Ýa<Ô¨ÞÒkgþ6IQ1“Êz½.ª‡é›úx8‘ûsÚLóa {üêCZmʼ™îí5jOc^Âm,Û"Ÿ¿ "D0™“CÄ1ß\mòý¡n1×ód ¯ª¬Ô_#áÇøéßD¼a¡jàé q0SÐë$ë²Î“¶:¡ù à Ó „²˜0Äm-<äMqçM$¿ Šêmô.]7EáôÊ›mšAyYdÏQ™§ÛèÐÔäRî¡å%n³kpPQm›ô͇;,oùcDÁ·å£ê3Œ§’P ¨H˜ŠQþó¦÷%öbÏSæ˜cÆlò«K)ïã°N½G8Ïߦ(ßlŽFÇõéê#Dq,f¨V%¼#1áyvy\‹®ÌnOåÕùA°3iÛ¦ÙŽ´Ë´ÉŽæU ü¸cx˜ÍïþÆD=ÒYÛR²»¾Ö›ú  bÏmj3{–©Eø¸Öh©dÈÀFLz‹ç+†‹¢¶ŽîvϨ€eź‰>³¡Ä%¡í­¸GøÁƒìá\oE× žmë®ù',gv8”Ð…ýÈÞ­¼W·Oof d½qéI ë d½á¼mŠ þ§7þí¥¨ÿî4ã Æ ¥€ƒ–ˆp9jIžPôï®ÕòW…yàh$8lH™„¥cbFðÏâ×è¶{ôörUã_c&MM7ÁõôLZwåÀŒˆ˜<äUÞàÙ+æÌÀt1tÙsDÊêhvqÕ9GÔIg„Á4ÇTÜüs$y-éc7Ê£¶ÁÅÇ&œÑ¬ªâAò`tÔ?”Ðà©RÛj¢¸bÿ†’m‰v-«¿‡a¨¡Ž1¸ÁE7GaÊ»õ‰£5é=6?âføØæp¼»ˆ+öá@Î70àÀ¬û=û«ü%ÿÖvÿ:ü½ÍÞ c§F^exr¨ëÒ×F“b1NMB‘j¿(dHÌ¡¿œCit‡K¹ÁÕç2­nlÂ~:Ö™GgÐXð÷"tð?/f76ô#Ünq¶ÞÅ’cY˜‘§ÑBÚ>Uè ๪P ÁA~“ ö[ÁܤÕC>9Ï ÅOôVPfÕòE)BÅC…³»7DžëpÆt˜=‡· = ‡úð =<ðØæ8îjÜÀv§#~˜ß½—æó»îeëZ/6Óö¥ç’avTÝì_®ŠáM é¼³€F?|ƒ-º«ËÁœ Þã'=½'Ÿn4%±y‡ñ.¼ë×gãߪÿ Ã\°gî£VÀªÍ¼À¦ígNþÕ3¶dÆŸTõÆ_*퀌–ÅPÆãâX4k87ðø:߯É8ˆÒ¾‡W›¼êš&e»Ä6¾0ekO Ü—Ô«]:QÖäd-úðžŒvÞl ‰±7î¬Òsé8“ ð8&Þ¡lÄ Ï 6ÀŸÍßx\žˆ Xœ~Ä­°Âš¹Ó¡n‡¥ÙM¯í(9KR £\}-¦QGHwtý’ÃÈcD«$‹*B ¿t³AtÊL¾ŠàQ»Ë­Öx6÷zzj/±è5î¦$"B:AõG(Ðk²C::„ìC Y±'Ë£Ýd¹{þævIÑ8ÖÌÍP–WiSÔ´ ½¦“ aJ@¹†Ù×{ø=ÈKÒc»›&4&¬ þÀ [¯ã„÷{ü5 ü †}´/êŸršò¦©4Q cžÝ]]DäïhŸ#­ §A3AõV@y¿ìÒ6¡9TÆpò«úk•ó©v1ñ~Dô§F{”Â[CÇMwƒ!ýå=eíN|Ž×œ·‡œoLË(ÿ–Â^(/¼ÉÙ±÷ñÒ +ÀïçËÝÉf±E´(CÙÆÝmX˜ÊV&âÛ aéïòNÞ*!/&{sµíG¬Š˜m6Ïc¿Í¬è·™0+Ö¸©»Ø¥U…ÕëÌÀ3x/+’´,R”0¢-§ÎfÞv’e1Ñ3¢íPiÔ‡´¶üe|õ<ËÊ_¬uVþÂ[±HŸñÈê-þò?ü†Ú*ñ«­Q6j ëÒ¨d'Ù5¦û0½EØ,&{Üôoe$êV ŒB¬[°ôï6Óg[™Yö¶Ú”Ü6~¯ø‰ÕKž§ÆðÞÿ÷ÞðßzlJóθvYTå”΃ã²Z:º Â|aè@€Ðå S>ƒ.¿Œkœ)«A£F“÷Ù„Š˜,¦a"kµárÞ„ë ½˜ÌÓC•¯i•¡¾@BSktØŽ¯,ŽËbPY« x#n—wï´V¡Õ rŠ&£c†ñæh¸-f‘Ã<ŒÚj/V9z–Y8eŠkm‘>Œ²×ª¯˜=Ù†(æ)#+Ì3ø åÙ±!'ë'‡ÄîòGGîŽR±¹/€a9«ÅŒ3Ô½ ÿ°8ͶÀèÁØ¡žâ¦î ,¿#Þ¾ÈÐx{Ž!âöì£ÃíË 3¶ßw„±}©sûò}%=¶™k}vö5Ä~zÈ“òy&aÓ?i`=–½‘Á±‰´ÂµÑŸÎÅ$óÃw€Î!Ç+ÞÃ!‹^ƒçÁY=½Æõ­Äªµ‡ž£•@Ó‡ozN¹^=J›Ú|’C´¶l~Xü 'h%doúSµT9?•´©÷Ñ +›Œ—ŘL³ó¦Ä[DÊ"\Æg,1âJV\Þ’Eó ÊsÍÄ1˜ÀQ¨Kd »fç°¢›%·Å©ª÷Ú³µ²Ù Ë;·zAÂÙ7ݸUÐ{Æ‘EZU€v+”‡Ý… ÁÜ¿ŽL_/Ë7¾¯#Ò¦­à”ü22†Ü¿ŒÜ Õ½Œœ"€€ïCólïCKNxšÓ(K‡Í1gpDƒDxÈ×5ÙfƒÚ½,8qÍÞ±ÄãsØ2dûŸ°ÛJ6àð_D?îPÚ"KÖx˜ǵà¥G7gãRª˜Q‘Ó›bǧ3L;hqtHÛ±ƒœs¢‡›îð³þt›Â¹K?µqš`fâ, +2£ê'\¼!~2Þžò›)-ðÃþÝ*8%Er³(xv÷¾É‚ñSf£#æ~3LÇ\²{#Ííb£Î¾§C"[zu’g·å-Âd/f‰µcs+0ÛŸƒ—®Š6zº»ˆ¶~÷‡—›3²÷óÃw†înÎâ M×õˆ“ZòÁ~R¬=.)2 /’AIÿ"Šüþ é_Ú$¥Ni`}É7N¬nBSÒHuqj(¼rH+йmÚ¬mJx³°-˸ náHN]ùvðNVŲü÷¤šß,Pšøxi²'%ñWguɯ}<½™îó¶62ž¦ÌP DžPÝ+ò· Ò*ÙàÑ/ûm\ . Š1•šãZ1‹‚w³›hC^ýH… –7—¸ ß©åe¡&›`ˆÌ¥7SÙ éÅ(†°ƒs‚ Ë&s˜‡“'UŒU„Ë88+íª2½‚¡¯Öûkcu.ñÿk–ÃkôõúJ¶Ë|×`ñðº}­¾Î©£¾ÖÀÞþæ_k o“èÞm­ò·ÄŒ^‡˜G©€éß#ahöûOáÄx‘z@Ò‘s¸öûx(À Œ<Âîžvúž#:xaêj`­›ÁnÜ[¤ °¶?ñOùeOX'!ïŒß¿£-åEû tº|#;ƒ³žš»Ì[vòN™?‘SçpäpƒÐºÙwçM÷pØ/«8öÐß;ôrä GB±ÏcVa(‰@¼gÐ)ªaíàz1rôʤôdˆPzV„ýÖ›ìdè|eر÷{j²÷#â©Vy»ÜˆXãh‚悬ýÒànÏne*ñPF‡Æÿæ-1‡J{SÈÄ¡‹–ËÅëÕb)^ÐCN¿Òƒ¼i7è2!eÁ€MC¸-ož­a b ðÍjŸËÿʆ&ªG:]à1AiLUÀD°¨%ú£ß¥e™Ã›…À’ìòòà|­ÆÁÆÛБkbJ&š¡ÄnUȰ^'˜Òäÿ8¸3ŠpFRsz¸¹8â™fŠÇ2%ÎóòPÅÿ™ •\‡]WëˆXǺÚ>0x-¬‰´ªFUzQ¡ƒûž…Í „ÊaÏXO‰»É ]mƒZÀƒE2jLYƒHo„{•zÞ=Üaö˜?­› ’nÅdóÕ¹äYò{øšÒtFÐY"£Ÿñ_š@4´ÃÕ³KÉrÛ˜ä¨ì›I_v:ù_Ó¦*ªäq{/&“ßsÓzõŸ§bÒÉÅpY÷±­CºÒׯÜ×Kž‘ ÆÖ}Ѭª|ŽŠ6ßãÊ…·Iª'[Ú²9ó«t³IvµkW$b6›öƈˆîÙ+‰ÈÏÀ¿iI6Ïà¢^ ‡Ýœ÷·ny7¥¯RôWúEðâh¾‡Kð‹î&{Œô –ø’Y…p۾⼾øµÊÛÙ@ŸSCày<ÈT™h3–6ˆ¼%ö¯þ/b ”ÀUФU¦/``ˆ,š¹_=iÒo&Ê:c?£OðóUš75:ôFÁuŠò ­`'=î¤ÛÃŽ\Ë«a”©0l*÷Å}ùÇ1Š73Èj‚>º5Ìt”A>˃;¯¯iÑ’^Œ#Xçí×<¯º}´‡ Ç l䨫dÕn/‡ÜM S!12{s»\]]$oç·×ðÑàÛë»Õ«´hÖM Õ’ÊúyŸ»Æ´Fz¦•ÇCyï!••8ˆ]^ßGäöÎ[ „€æ5J²²c !-|Mi{@øï¸ã£?‰ÞO(ï~v¥¸¹iŽy%ÜàÓ¥/‹‹¨»Ž¹GB‰\ÞRIE\´ˆóÇ@Çw h¬É+³xÔÊ®h¼Õp:à#×=yÁã(%tä6)¹,Ї¬w-;²ðî œc›“ôÚé$¤2–ö;EÕŠšo «‡ïeºNú·˜=üÞ“ ¯«Ï®~®rÆ4d•æá®Ü©Y!”E¼þá)mÔX=çÑâó5YO¹y·¤K)” ÑñúÕï܉…Ûi',‘nÀÄžó€Ø#ñýý½~ žÃ´i/ŸœššA+~ÆkÄ?…Ã5Øð§º<îûUA¥kaQ$â•rˉŒHr9Ô;h/ërµ"Ec „óaô •Ï¢O®®•p"–J‹V2Ç>Ó%­œttäbÎYY¬qg]”õqÍ/–¯LN,,ao· ¥T€‡!š-ƒ%Ý‚–R3‘Fq½«Ãˆ_S ÂòÖ²M›þ©?F÷xމÂhi…§…°7ƒÿád`QÆŸÈôÝÓë#úâ¶~M.‘H£îœ#½PŒÊÀÂD¼WÀë•oÆÚÛF~Å’ ™t_A§ý?`Ç×`ÿ·u|ŒTFã·"Á“jU›Õøßk ÷­î¦½Nö®ÞDø‘r·Ý(‚˜;îÖTúyˆ#ì„—œSÊáLˆRR›-YD1\ÉÇ.Ø{Mi_sŸýÉôiL%,Ér‘_Mð`¤Ü$8«6dÙ Ýè®ÍÈÙÈŠ‰¬¸“÷²f‹Åí—äËíýâ2¹ŸÏ.gäsÈ×wð]Wh9ú9|B×ð,9ÁSvÏ»—_Öp ì‡+U§÷"c&r6²Sa0+_BŒ«TÝ\ß7<†\¬·â A‚ÖÃãúêõ‘+÷rÙ>ý«®º&Ø F"µk\lG ¡„"`3'à°5rZp7Ž/LëЗðx)žÜ²òúdU¶«<¸ÀH2È}¾†Ñ¯/¡glY׌PQ1L8;QäCF¬ ¢+q¤àM„vià#‚o!Bs‹q¸øËãjQ– ÉZ(Áä£÷£9[L’Ãdê[è%ãÙùkVÐñÆ%›¢b¾qSùâÍqø)æ¥dûM} }ºYPOkÄÅ™Q ¬µ’×WòM e‚HƒÞì|†‘¥Òpþ#+¬F5ÙùÀ}Ýíqf5ÙÙ``Cítù;è§¼Y×(€Þ ucòÓ¤3AªŽÝyóÜ#¨¶4‚¶Q#qœ¢Ç~8EÈp§EÅñG£¢P~6jxJeL$Q§”ú.„²µE~¼ÏÛ]½ ¢FhQI¾hN!§S—‘}Š.ôâÅÏŸ¨ãïZ›b» !ýR+}K¾Â@üV+Þ§ð‘¾ÓJwVOTQØUÄt]ù\zðü*˜†CS<Áñ,S««$Ÿ ¨4ˆÇ£ØsWœ42¶( ï/…Ðv­UÒÍh`ö¤‚xyZ…\ ¾@@ ì/7iœ6AjM’¨Uºmƒk•DjÕ¢]L—C©•DšÔ6V”¨UÚæAZ_"G«€ÌëÃõ²‚<¶ØçÝBÞ‰ºVZ¡&G­t:Þ+‚ŒµzYfE0°„U»`=‹N¬V½ßÍK¥I 4êÒNÔ¨š‹³/Ï6¢ûx¶YÖõÙ:ØÕÙòy}¶ÉSv¶ÿölÃñÝÙ†âÅÙFÆg›Ó—gÏÖƒ<…nR7uf^âÁ…êò<ô˜Øõ¼*\$D•ø'r´ç‰*ÉaØ$–Z‰É°£9Qî;Eî>oS8DJV¸O- RÔxN–J®ÁÞ$‡dÃĈ*AUq8ä'Õ(R„¶Ï‡ü‰­"Ñgìãú¤ê︄*ã"ú]ÐH¾W» -ÌŸA[—2hË‚‚Fu4¢ŸB…òCZ¦ßžÍÝ -W{úw_eÉnY‹r«ò‡Â¹FÂKU1d÷’}Plkx£=<†­—öâ¡‚³pLDæÏÉÇÖݳLÃÀK÷AC_ ;ä£>û^µ°ý^1ˆ^ÜÕpÀúLù¢½ÒŸaàž Gx9ÚÑMO£Sâ-|ËDÐl}tŸ­]¢ñ‚”ÁÛ$"uíã íÑï“#Ù÷ñýöûDzy'£6-˳µEDºgsÔ!¢sD?…tðsŽ&ˆ"ØŽAÃ{¯ð> :I‡²36‘V6÷±ÁÐH O$U}¾Jª<1°ÛÈ+Ÿî­“©hO4gé<(Ï8;gln¿gÛQ|Ï\¨¾g¾g§Ñ|Ï„Cß!ÕÇuY Ý™FLº×(b@r¶Î©ƒ“ùÙ“ølýO…"©ðÃ…»*r›Â9u²ýœ¡‹è€xÆmö=#½”å ìžÑ ÐB¦*'Öœ£¢î°ÉÉÈ\ªC¯ÔåëìemD/cmu‚GkÌì‘Ôë^7ðÞUXÕL¦Cób˜éÏ\ªƒ5ݼVc›-ê&¿ªtŸ‡Õ>ˆuèš¿L¹3Âá3ÇÀµÌdÚ5g/Yè…üZmëðí\òàh5¨Þsd.(Ïìjëí¶,ª<¤ÆN¤U/üj%mP}°+ ›¦ ÐLÙËUäáå܈^ÆÅzqë6¯7Ð ë uk×w–ì/,mkðÍœA§e‡×ºåÁJ]-OÑÂí*ÚEÁV ¢¢uå‘óHÖHuDžMcörQ¼}¹Cn0™Kuðü`Š.ÅAs„)uUrö²Î=¼¬KÑË8åi“í‚g ëȘA÷±ÝÕM`ÕT¦C3{ئ(¬z^°ÃÚ "s©î>žXï Ö¡?h³Á”»”f/ëcôRÖµÇÃÒKuf1Õ|–0õ™C±ó¥æ± ‰@»NÚªÕÊD:ô†îà©îƒCmà<•Ž@Î^2„/éLtf7ú\Eà¥e§íó.·—ô'ƒtçKÝ~Ò•W»;»ó8æ)¬G _Hãeö$êëÁCѨk:%‰*Ðáê?ãU¼êüÙ¥’IÓ«zhÒÃ.”&*L¯È™Z#ôuÔ(˜×ˆ,½¿»"Gè*\ŠÜKó´¹ïr¡¤4* WEÒpCVãqqäHeÊ呼Júfy(uLš^•÷)#îKáÕ¶õ¾ ¥ŽÈÒ«yJ›`µFd™Ôx\ 7J•r‰žªÎÿ½ÑšMWé <!c›Õ8G#cÔ(c^Ùs.*Ÿõ:vg37íå™[õ§3Ôó9ê·ÿö®q ØQ¨ãľdÜÅô¢@hß4ë §äg³Ïq¯·*㨗ÓëqC½·¾µM…Ï%õþš ×Ô«Z×ÁŽÕ)ÝTÏit_¢ë­ë Áï¶zo5׫q^Xï­àR¯€Þzìqx«Éõj¶åÞAKqÅ„Ñà Ôk$'¾àËîeÊ8I¦Iïc(uz Ή¤·‚^ßôÎ[KáÐâ žªÊëƒÞJô7ÀsêÜóHo]¥Iƒ×ìÎ_nn'ësnuS'mp©ÚÐcXu O«Ï÷*Oo…×z=¾_"‰#>Fà­Ôø9^ïˆïø+6~‘€×üXFê N¯mÄüu? iî`ÓWx½ð9ß8¥ùH­ Ò 5?„R&|~×áûý]ú/0p:Ãê/=xëXéu„×õ ¼ª¼•h–©]þ«T#ÕšÖ¨xKTþZ:P°©‹º:5hº8ç$ìòœ3£ç\ȸ>ç8cuÎl_Ÿs}";ç\:?çw{Îß½âœ3¯Çs.Ô•çœbµçì–çì.ŸÎÐsËÒ²JŒK5+ÄGú*c–å:·tÏ{zA\GxƒQ¦j³íÒöQ/ÿtÁ?ëû®9;½d\k¦ºK.¹+Ü&Íct\Ÿ™“£è86'vëŸ42Ë”.¡¿©Bý–&]‚uK’¼üË‘~ªŒËL«Ï¤S“Vn±}&ywjo/ŠÒiB'é5 ›DúEèùÍÇÐÕëÐÃ…UèfäSèüÎBÏß6¡§WyèIÕ6ô|jzÎS„ž‹<†^y)CO:ö¡guè¡9 =2kC]Ž¡ûé§p]é@Í‹¡¤X] ¥ÝnÖä)½îܹ¨¢ãÅš×ý$åy•5χÖoìâ¯^kX±¯BÿQÔXݦá-ÝäÄ1Á«ÉuÕû Þãj•tdu¡ª¹Sh¬gYeЊµÛk:ßá«„ºê˜)ÙDµ3¯™ò Jý”­hN¯£–«óäsçhW]÷êƒW7“ç®ñ*l“Ò)44)ƒºÐ–zXxŽH«F4)”6AmSTçŠ9&Þ3ô0gŠÀŽo5 €œËðãATn­A³ ÓkO†Aù¡©÷‡ÐÊn½XaQÃáœ`'ˆ3žÀ¯y±Œk%ªÏÃÙ°Éóçà ‘êj÷:Õ¡›;ªÜÙÊuê«ük`Õ‚D·Ú a.#°Gx&¬ýNÛÏf·ÍOEþ5xÀƒPW¼3Å¡|MT]-( êiN¯ÕÑ>><Ôí4r}vR|,Ñ‹vnqøˆV69˜‚ÝüñÐŽY“¬T”âhÐ$ð£"pª¤_I~©o4ÕéðZvš=>4õ±ÚLüV”å|wÝ$çï9/¨›Ä^G÷ Ý!X|çÜç4¥Ià…(Æë¢IÖÏ‚,×ÁC“”KAŠßa@“¬\å|)Ú$f+ˆqµÒ&);AŠ×9<ãUzQÎþÊOžÏI;ãN…ÏÑ:“ÀRãs–Î(Ks‚ÎÿðœIê¯:a®Ór&aׂ°ºÐÕ$Xµ É÷®*ç‰|á^*\Û¿šÞ‰RüÎé:ÿãs&ɦCsãÎË¥›NÉ;hfo:^6êd™Mº »ç[¬FÑÚwVýŽ“™d®DAM>)«~¤LíÆ‚ŸŽ}@Zl4½g1vÙ†I‹ß´Â(Z„&Ž9”‰ÃOxLxê@òâä‘ÔåÉ#Ÿ'Ï®OîîNnØW'gjzòÔj}ò„ ;y4œŸž<-ODîOäÕ'ÇÚ“ûžãÉýÎÓ© 7ê&Ƕ(‘x©É·y“WYž¤‡C^mŠ,G¯yr*¾ÊÆÌTÐŒ>Œî;o¢kR}ÂåE[ä¨CÀàæXísòp,6¹t ª+|]T›ü›¨²/Œ)g§õ¢{½‡çMû..7©ÚÕ_“,­’«¦‰&LÆ]Ú´EVà¹BUô\›¨¬³´Œ(§½ÚÉæ¸?˜}Q"Y%<‹ #üO–Øß 5>žè-TBMïnï/ ¦·÷½&úñQ }öz¨>Q4cyOÿùsX±³£_›ƒ¦/CHßƒàØ‡?Í:’õ±(7'jŠ©N5y`Ñ Ã>U)‘Áé„ßV•äÛ˜§k¥bÅä‘E÷á¸Æ ÔîTÝN7{$ë†o½LÒFá:‰É>t?]pÌø‰ú·VM±ï?2I ã'jèßz5Õ¶>A pSø/ƒ‚â+€›)(LLiþƒ±mMö!«K á&:„Á+¯€û6Ö$ŒŸÆ/ù[«†~mºÆOó‹ümP£ÎVFiv¦„Ÿ’À6 ÉÂ<{ÙLéJÉ:ƒ„õ×hSGWÑCÞF-÷ÖMñPàQFÄ«Œ¾îò u|QÁ…ÿÑã‚ïÅoÒ6MÖx-Ý*¿ÉŸØpÿ•—õ¶:ùDýP’‰³S&1¦»Îøz¾š]ÎV³ˆ<îõWõ)½~ÇÝ)¹¹{{(ÿŠNŽ™yÙ_–½èá1Ѿ(ŸOÖ(fR”!_¯@áŠ2WØë­ât–Ý]Ýá÷ÍÕÍûAÍs»#]o›7‡7÷ÑLLÓÔ‰ô9ƒ^‘órú–Òš¹Ñx¸5h`’›%ž-dí±‘†gÝG(A Ìÿºq,Kxx>hÜåe™äßòìØ¦k¹§õ5ŠH‰9)±¤ }>œ$šðsBÑ.éwÆ×8l<ö®¾—ËÉìþýRP€91®ò”™*Ý?#bÄ+(ijãÕýíBœ¹ÊŠ“n»õtådçÕ ¹¼º@˜Bb”zN¯xþûüâÓj† *q64E~J¥vxe÷óÕýÕ|¨Ú¶þšû¸”Љ*(ë=ô5iÛ§Õ žŠâ“¯ùÆRMŠ'©G’¢]7!jf_ÃX"©·À—èù4HbL‹Ôq§…K àd%Ãê$:`”™o쀹åÌç/þ/ßxBV1{]ØOiS¤¤nò,ß@Myô1—äºîqÌ ûÌžEó7Ñ—Šíê#ž^EðCuÜÿÁ;–mB_¤ôz¡V÷fDÿ‘„²—ö&Hí8Ù¿’\xGl‚PÂÿ“ÅUSavœì_½\v–~ºø˜ åIÊÈyæ :(ù¿$Ѿm¨.cû/­™Bž èZ,ö+xNò¦©XáùÒè–÷9¦ì1eŸÝü‘Ìïïoï—É;<°]èà!ÏÞ(°;N 0S€)þíÿ†1À¾–bøì“Ö+d|Á½ÌNüínPj<Ï¡­¾¡3Q3ÐRh¿bRÊZ²Ha‹þõÏÿ ÛxX»yè0IÙçû5® <œÒ–®fâ6°ÞbšhFD»¶=l¢_~ú-$­ñô »­‰u]òæÀ-©bȱßP‹Db¼"özS ònY)Æ ³. ü—·üô«ÉaAwÐ*4é>Ù–õWi°Ì$ÅDÒŒýŠàÖr\§ î¡CµÊãCQᮎ¾&¤DügÜq‘_¤ú>¡œýêʰÅͱ"ûúµÐù’rðÓ¶nöZî%•R€CK†°âÈ ºû$B-¬Z?A=NºøA^×k8$ñ Ú0u,IÀS‘dÞ*G("%õPx&4;ԑ¦5¢{ˆA©òÇðcÐi AÈÛç(@)ñšÜIÄ:½’”&iVÚ].Ð0™(ñ³ÞÑ”„÷1\AŽYÌ&!‘FÊêh¶œ­~‰ÒA_ŸˆK dKˆ^#—È3%!!šHM†´Ym“âž…O‹Ë ÇõHóH‰x¤‹w}¤›#ø‘gè£T€pBØ#MÐ3éµÛݵêêZps-¸¸^ÿ‰ÝÁkbM¼#<w E¢N-}8(¦¿é€¥û¡¿a½Þ¶IH'H 4­@Ó*ê›–WÞ´½ê'ö=TQþ (HP¥xüÐ6Çk|®²ÃƒgÔi{Dü ag.ˆiÁ`Ë@L,º]C¸Fì Ì€b×ÔUÃâUêðŸä»ÁoÔgKBø´Sƒ_Ã!ÀS(ð…v–„ÒdžgTÖ£lP9d8 Õ®Ða¡tØP¥ås[dèÐÔ08p› gà,¤23þŽðŽšàŠÑA¢¹BË>1+ð,´À(`¥—Bî°} /"­ˆ€•ɺmÁgöL@rÀsV2Z?@)jaTì]¯Ü~çéx¤ä¹ˆ<² £åvDÄÎMŽgà%òE§áQò4Ô|±ËââKFk²¦ßf&Î ‘`¦ÜlQOì2Øøz_Òý¦ò©[˜8“4D‚Išr³I„ø _V®‘;ˆ«ñ€èÙi‡L9€ïKxÄýC#LG) ØÈÑŸnØ×õÆOG=`JyœBë¨î0Õ[ ráõ ƒµ&$ä27vG(< rí„Ì 0á! ~ἇB „‡¼Þ¬}=h`¡ñ2L¾Ì ù}^_®=<‡–ŠÌ¹H+‚fe2^öØ uÉhæsãÕPsxùR/_`Æ»ZÝÑþŽMðâu³iü¢H¥°re óàÅ#ðϔ̱oðÔlag5ÿæ…”Û @û§fÍö‚‘˜"¸&‹.õYMÔÓsPÅr¯Xd½¼Ätô«euñ =¼?±áfDèsaìz¾æë]]»×ÑDº {ΣaŒx¾°r¢¯iéX¸à( xÒë‡Â{‹äù“—¾¿¢¤k­ú¼–zuŒw­\_Ô/ëøÄâ/˨k ‡KÒ=½ÌÌáJ W1Jž`û˜ˆ<4PÓ÷ÉHOyÄ¡´Ù³ÐàÕ3@É©{¡VI òJb"Z(xy°IZ)~Ê{Ýn_1F b"6j"•6ëP$pKá×ôÙ] -gÇ¡ˆY™P‹ð6F»·ïYþ›Eðpö698yÿÞc À‡•Û“ÆŒ4–V¬S*r|5ZRÒþß;¡-9¶;¸Á1Ó\2<2mŠš¾ãƒ^“ Â8à"ûLøÙ) ‹Sd3Îû Ð-àR9ñ"2Pó—oCó—!sÿÒ43 ‰‹#co—q1®á»Jì'z…À_xŒàMª\©¨›KiOB£â›Ž¿œ-Ç_¦†ã/S»ñßlüŵѯÉÙ ¸6ú¾¼ÂCƺ"h¸¼ìâ¬!”1£Œ9J¾&Œâä¦å-Âûn@ÍBÄôg½N6ùî vΟíL²˜(ˆT D!zðÿY¯£ËžFÆýc~ÌG@æéuhI¹()2cü/(¦ðp‹‹Ú~í#Ö&!-SÛއÆ3.«Á ¯¡’Ù*¼‹Ù ”Ö94fG¸ô7Ñûô‘Úð^‡v¹yYè\ ÃWŠÓ"}K£šÄµ6|]EŠÂà¦Â©â^T’K÷‡ ](&îÄtÝÜèó~˜a`ðòÖý×1P(5¼z[”w¸H”Ž®D•î!wo¼ÎÌîƒO+:®ÃTo Õ¡©Ù\ˆòÂiˆ¢õB%аh‘Œ‹>å[áú®bÀvA({Pì äÜ –D,ë ehÝs½×:XwŒŠ…}©)}xhàªn©î-ñÔ«SðÀ[@^âbA´Ê.\¸â¥©Q?«dÖ’w§­Õ®Sƒ£]ÜéA»ÜtXKq[BLŠöDz- 9™m‚ ¸r‹§¼yN²]ZUyékˆO1§£‹Æ(Y”Á´Ž,bd‚ Ϋf“{׃D¯ÀîÊ5p»"Ì{V,ÂsÞú¨¥Uañ÷>Š,8MŽêc“±lÝ}Û}QŠÿ²” œ‹s€J)»ïMñßâ€Åñ7íýÈšüf…+àò½KÂÊÞ›ŠN¾Ór+›Ñ4Íd]/H®jBÔÙÀ¦ð:pCû(4_ûj#¥Í.¡™÷â|ÕðÆK†/fï£õ±Ú”úðd ëô><ÊÇÚm`4™1Ä=ƒÅZE¸ÅPFõ´ÔÞ<ûeÄý)”aÀŽð·¨ÐbzÿëÅ/ܵ)´  á³>¯äii9ÕHy5Odá1/SÔYôñ¸Î› º;|нêÆÜAéÖyJ¾ óËGn˜f&¯DËWpb½òûÇèxØa¨=Œ"[ÔóEÜ‚5I7¼V>«°y®RrOôy@Î\ ÕIo·boHƒ‚+œ¨{(ù˜V]O?h‡rC .± t ûSÈí3á‚9±²P‚n ~f‹ˆvrq”!á<æ<ä~©ýÜÐÔ× Q@o…Ò|ãÌC:½8Šòò+ri™ À”î ·ŠHuUpŒ$Û´yÈÝÓ‡ #ˆ)ïb™™ë§Œ>‘ì ÉqÉ& ûô/W¹î!²Ò´"3ÇÿxW®+øÿæ8×ãy.¥ví¨‹&µ}êìãõnÆB¯4J&¢‘—A€á–7z¯Ùê6$„ܪFïÉHT2¶ût¸D§Åw¸÷Å*ÉMÆp)!èîB wR½ÌKì cz%±þ–ãîŠ6ÖlÁ32;°0×ð²Þ÷ddŸ¶¿Xf xç˜.Ü{Bÿ–=!rØSÎF%ÎÛ½½xÌ”6Æ´1¥{ZÞ¯‘Äß7y;;ÐýV²þó¹.{®ûïÆÄ„— šº¶”“Mîã$§¡Ð+ßa¶¥À¦5“n°¤5+2Ø5ðɹß0ÒkmÞ!PYG¡†óîHŒªô€vu;ªd&-ôžÈ€¿/eIJãb†|ƒOŠä4º¯Ö˜²ÞÀ±˜%üù&š;”pÑ;=mAµW÷à¦*åK(zæ;î}”?»è#˜Œ;‘wGøö"–ÝlиYHÃ,(Á?¤Y~Bª þ%ßx$Ÿ&!xzcM¿žšk»GZ¦ö×»»¡Äè•^ÙIÀä®; .®ÿæÝé„«ïÅU¼\GÎ{9RŽ´ƒ†»É’îtÀýK†;ÌYék/ž–°Ë3é† ‘ªã#ˆÑq¿Oá"Sl9¼ôÿtdoÙ¿þùÿ’Ï<ÀhvCÀ£_ñÀ>{Äãf¿Èèµ1‚~i±¿"'=¹D._þÑasY«(.9|CÀââVò§`}ôjs,y:Ò)÷0&ƒ/$y8—£0ÂsÉðˆŸ³^ÜÞ/É€ÐÂC¿Fµ •(Üów®%Ë_©Žà2€qÍ“)`xã0Ì㣰×TvAýØÎ¸ã÷ÚkD^S@L={\’&­rä_#¯—X.1-kGâ* 6˜¯î"VB”6ô{$ì–‚Þcè˜í¢‘•GXè£ -6p¾ª}ö¨F…˜73X¡X¥“ð ¦å|‘K|éš] o¿G¥ Î󄜙ÇU=§¡Gp·%m=ŠGjA Ù*B^¢‹xÉÆ’³e`Rîáɧž²–#Éê–uÐÃWß^Sêû¡‡¯šž‘Q8ïr8ACòg/dsw’‰¼Ò(™ˆF郀á{ÄÎkv€†^PDÈ÷'#QÉHØhïÝ¡=‡ í…íû#-о<¥°@ mK-—×Ñ!mÒ=ùâ2<‚säÝáxƒÓ.ìãÈ S_ž6Ü]ÅFsO¡âU|ŸWëS³iÑÎsq–b@›>ય6S;àáC:Œ•“qZÒN…üÙ}7•fæ×t;|ØÛé,õ —Æ})ï ÛGá·O¾ÌÞÁö؆;œl~­Pjó )­FG-žûÎzã`@³‹ú1ºÆ9t÷»¢ìwª$ýÊ ÊÙqrmMïk;v}[#çÚšÞÿ‘¨$¨E^§)$B¼|Ž¢#¶Äêý‘O!ø<³ó«_ZZ|z™ÿ ˜Èbó%_ŸaD߯XoÒo†o¶ëì¤ú_äÓÓô[9ôEˆ|ã{÷nòZò)ùæ¡¿È7¦é‡r:¡º›‡€N„ðú#„íú#ÄäoõpuÒ›=®tGã§ò²›=ަ¡íãˆå­Q("ײÒOаÕÓfË¿õ‹v¬G¯5ž\mõz„ò›Ì×(L͹ÂÿʤðdxBË]× +Îõ€­i ¸»FYñz¤Q<Å"oWÑj,„)[¥Ø˜¢5úaöѮݧ'ÆEmÇeŽîËÆæ¥ô®í¿+=îe”¸æ»f'Z?ká•j`ûLIð½ÌÓäPËþæÛ³Hc¿&™„(ˆÌ Îã ÃÁëh£‘^¶º/W+¼/2½²7Ì•<¨ºå/zòpLVšdXbØÀbÊX›©iäíWð”&Ò÷ š®Oæïf¹’ËÖH™ê'[ž{8JÉzk\E¾Æ÷ëiÁ4Î=¾!$4CÙó¡L«‘ÍÏiÍŽÐÜ$ÈÒ††œXD»?€FSY®K’X-a%RšrB#Oö6¯\.&ûÚ élÆè3嬶(9£«Ä‘ÛòÇl±’EºšŽ@Oóˤêõ²ÓQ©š®F‚Ά?¶E““ÛÛF„¥‰O†ÎÓBR%:þ+"‚&ä@{àµBUÝÌ!•׸È5/£†" +O¡@å …c9)»S¦»Ó³®äÝ¥lSåÕæPãf<›9 8*Cs+Ë‘Òðâò&êÊå4@\ÇáqËÍ©R1# ³4£Ëä&T©¹Èlší£«Ëi¥’ÄM$¨±»°v\>t\Ö¨ê.º5f/EãØî*\Õ¯õ1›!$dMµáo’=46iR@¨­È jŠÑc«Èe‰¹bL±ÏŠ9tÝnjץʅÙT2­)´2ew÷{ÀWÝ›E²×mÐÎj–>e^À*%ôU;Úx[VÙ¬W’K‘ðé^šXíž6;+ÛqêæJMöàµ)Ô6Ï“²²göߎ֕•‚LcÍÜ3*cÍè Õ,{VžÑ*cVŠU;ÚxŸ¬ÔYoÌJ1"'àÓ½4±Ú=mvV¶#+;;x оF›õ„]™Õº¥1UyJItù¶Ÿ *bÄt6k ixVcÔ ÔTãH‹­Ùg4YÍ=M]G ':fR{ê¨Vu9>×°NQÞCW—U†¯óÉ6ŽËš‘!Ç$)’㇯Ê×k Y›HaËy#×…¿E–lÑ›$'Š\W‘Ô›ÇVËsµ(Wªâ¦îNúݳwÏû¯ ´ù®•ë_:‚O-æÇˆÇ¥FÏe‹³ŽÈ˜‚ÅéO+\-ÒµêuúÀ˜ ¹²šbmø›dMMjrˆµ™AM1zl¹,1WŒ¦‡àê:‡Ž3mö]²LK^€OŒqôΑe[jav­º¬7V‰ì‹ëÈ­—²Õœ~J(Lr‹WRübÎO%j"/N÷a[@áÔÔ`Ü~¡B‰=’‚“j³ÑyX7-¦çL‚sÚf }¾žÇûÀ3èU'Ø"ž‡È :„·ØM?'E;“1&,ØõC¾‘Ïið±zIdž¾ÆŸ’ Óm÷LŒ3Ý+|¬LuÔ¨¼Q=åÎ>²"_cÂ;ö´pçß ²ŽQo*êlµ"³#jë=½¼wRãÁ ðÉŽÞÙlȲ-õ{AHÙÍÁÆÊ5€}cíÄKÙjn”P˜ä¯†Áàs« DMäe@Hž*#¼á öI£`š-÷ùOªMÊ}^€O:ð_fså¾,[ªKî³læê3à{ûé~FóÌ®Tø$Oxe¸Áæ Wb#ò2àD·#àö¤æ-³å4»˜mR:3^ŸHgw»¹’˜“(·Å«ý¶é³¹¢TK¦pd¦–A–Ô×ÜåÍ’}W÷R¯ Á€ëÓ:0n%W•šc™-' ¦)y¨Ô]d7Áúñæ6ÈVMÂ7û¯€nØÇA rJK.Â'EŒW0à¯zäØœ±X£ (ÌÒó n†§ËÊ‚Á3åÁIè4q?8غ=Úeìš@¼€øZ6ÊåVÄGkZ|‰C³=Vä3Hð ¶‘ʳ™Ã£2D¬,GêŒß±bró•äG„àÀµ±·ÝJÅŒ0ÌåËäHWj.²›fûèêrÚc©$ÍELáCZ–ù¨—Ö4FF¡$ž]^ÔÚ¥ð©"º³ùžÒI7htÜ£ZAð©4 “ÇŒì!›µåÈ"HvòÕû~ïXãÙ›áZP·9˜6¿,ÚÁm1Áz}´I¬ÑýŸ)‘¥:1“Íò¶ÈÃ[ ¦ÈUµÛàgÅîÍÊ#‚oÊŒès^s-ɤ†ÞW+Qª —W”&º Dr›nƒuF‹´Awvƒä^Z_ŸcͶô×6»åN[_ë‘ ì©î™VÕ~Öº*XÍB¿š…£Ïÿ¹º!Ûù>MÏÃê…|9•^EKO;E„½2ë ‚S›:AaÊiâÊÎyªÎyŠN{jNwJn¤y#*À\ëv5ŠÉc÷G›‡¬{øl3# * /%ÔT‡£n79ýޤLêxd|!6ôsv¤òê-³áª^E»ã:¢d:À#±:`ªU鄯Rf@É“%ˆ,+p@f(ä¸t\H *bL`¬ü޹O]øá¨¼ÒÈHÇ`²ÁÑ#1ºKÆ‘Õ:îófÄÕýfF-BÐW ñÀþ˜??¥ÇrÌJ¹ŽEÂÛ‘è«X ¢(Ž>C¡\Ù=Ó8Œvx&d¼ãDêÈ¢£ÇÿNp Äe _´º±cô$&0yxGcvµ % ?¡|ÙcÔÀóùN´•ÇRú‚´^„ *ûˆô€¶¬ÓÍ:-!4FÍð>s ðd†A§"©(‰º"9 L΀[ÁaËÃPµ^Æf”š,“ǦjÍE6pã_]n{l•¤v(Vfö8.²Gk,eÆØÏ¸#¸ìQÆ4&ÌÝ a=‘ÁÙ£gäföˆÍ푚=ªšñg&œvø;Õ QçJí¸´|n‹ ÁqtHǽ,¬`«z ½1£ŠÌß² ¾~ºoœB‰Ü‰ ¨GãuCµ€TÌ~\âBâYýz&·ÊʃCÖ¶|!Ë šå~6©iág•Üh©yÙ°…·|¬áaí¶˜}‚ÕAóþiïŽÅ1Qè‰Þzú ó7­)ðT&««mñplÈw¼Æ5m~[ƒ¡’;ƒdiIçè.ß•¶¡bv˜/`¥¡}|A#Õ 5ÕýwX»?Ôð6EIä>”릇†¿|‚ÏeÑ uñ•ñoسR¹guÆwGiO`Až¡nú+rõÕ¢ƒt6clyz&[ ‰)VâHƒÝ騳؉bMG §ùeRõzÙé¨T>ÍÐÆLë>£ÕŒ|7\Çî RžÚžuŠ\C­ôßúº×¼9ìÀxv m©øòR­ò žpç§É†Uc#òÈi“ÂÛa Kàþ+wþur&>6=nŸJdtÆ5¥³ç,'ËP/KBa¨ÊYL°%ep ÈW×(#ÝY§ZiÈ7¾F#+À鞘P¶Y+O—D ª&{êªh리F}ûËÄ&£–ÉTä2…fÚKI"L£~lÿŒþQNŸûªÜ–$RˆM^ªEÏËÿZ8æ4Vxg¶MßJ¼ŒiJ£a¨åñ.°5V(mˆ!"7èΚ¾–»+~Ôœ¸'ÍhFGüºf³Š,mMg9&(g1Áœ}g°@›nãæ®Æ öµR›_ÆY«àtOL¨FÛ¬•'ôÑ"TCöLž¥*ÌŽô™¡jejkÀ>±a;«]æô:·YÚ\?µ†Äóµyg‰pÓÄŠ÷4ÚYÝjR:çž bÂÌ“csD­}Ö)ÉÑÖa–¢‡¸9Ñ‚âÖfÕ˜9¦¡"ý,Óæav©›fûèêrÚc©$51ŒóIvOOQµy³y^Má5‡˜LjH­ÄÞãUM+–ntF[´9sFSääÑ×áXƒ-id³XÎ%}MG.°Ó3­zýìtUªºø¡àç jÔ>4ù) &æh5pÐ&_jùî(©s2ìùÅŒÖfê÷±YNbkpLt%¥=<$g¶5’"OCÂúó¤ðåÏ Ñ]t­7QgÜ” ·O^8Ö^ RÍÕgš¹ÛáÙ6GºŸÕ4s~Z¨qÇ(˜Ú´ncÂYSCÀ×rwÅóÙª³A.2¦®ï$øÄµÇJEº¹Î¬³~7Þ2Ø‘Ì/g¯9³G/ y„Óh瘳ܶJd5"¨'O š1.ñ CàZH„_MRx}RÁº®¤•h®5ýj… Ö-r¤õ™ 2çðˆE(kŒ°Ûœ±ú5)ØSÝ3­ªý¬uU°! ËV‡ãº,²ân6X •~«%VEJSòiäõuA £«;ÅûfgïOµÐð•ÔÒUÕHm‰e6RÉ+]}F £]1©½LsTfîÙcžQ~5ªÉ7ÊÒl7jøÊq™o 2äŒ$Ejº.  ÚÖMtt}úËž×c l€6iΉ_ιžüí³dÞ@9aäzŒÌ NöÀØÊs™e®25OLpu@Çe­¼F¬cY=™Û°wü°V¨‡ñŸ6ïylidýt¹ EP•7¸Å’^*ïuˆÇd¾?`Cևūfúˆ†k«ÌÃ5Çõ—ÀL´v\ÅØ0U÷Ù„(­ž%T*(zÁÙ„H§Œîè¡£Ùc~Õ7½=ôÒ4¥©4€8 xkü‡ÃnÊ®ŠF™ç‘ Š}¦„àj1²œâƒ Uça•µÂÔÞAÌc­Ë'§|O8ÞëÌÕï@¯ÇÉVçAÌégw§[cJ™s£ÉŸÑ'rGÅq×qøÖçÔíhÇLª`/CÕÊ'šˆX›iãÐúœ3u™5-5—œr.vPSÊÀ©ÉŒç\½¸zl5i5eõ±sdU8Ð+@î?ŒgSñx±ÁDi–ÕÇq»§§%hBSˆ«Ò†&-‹X¡â\#3Y ýs ¤‚¦¶ÆiK £•Jfhj4²ƒœæŠ)Õèc›½òÔ ‰„Z¼.ëõ(´ƒ*˜pB’üÎêªM‹*opUTú¬^ÿ™‹þ=®«|\šSKrSZÜò”(õ¯h OŸ³'£S”ó¯r[B*ЕDä|éAŒ°kŒÃm€õnÖdyÎáh›t»-2ú¡‚&¯6‡º×)$˜ÃCÏ`ˆf‹tÉÏ+JÙ/¸£•=ïÆûBkóã{Ø+g”-&¦ùÆ’qnçÈh‹ŸÈψ ž<%hƸÄ/TÔœ7™g2¬»vrÐ ð͈î.YŸ€—í¨ÆîZk-j°¾ˆ­Éÿ¦Ú3_„I^ñÎ{[ìi/ÄLäe@@ž(#œáî|WîX~*šö˜–û4ÛáÁk’kó yoªˆÜ2³d˜H÷ÔŠm©œufÞgJ‰ŸÒ¨§58¢!“8ÍY-¦oº4Òú(de+”ãÎ äLh¤³ 7:ºÚg¤¥™1[)·/ºì §¹bJ5úØf¯<µP›£,ÅØÆÍaE½ïpì8¼2Kß׊ÜP,*Zªs1“¹§:ÊF?ëœ5Êåfã†æzr]"|+shõ}*S”/õÚrÎûŽÂZ§ZÌ/fµGÓúbFÛ_)<&zÈ»9ÖºÈÞ.K±yØ¡ç(}—q’ŒÐÑOºGõd'ùÁÑgÜ 8¬Øcîé )e÷mNµW:È5P‰=Øtg·Í£™<“iöHçªy‚¼CÅ ö`çâ!ò~‚»¾ÃðïûþtP_ÈVø?»©Ž6_ …q ¿6ŒF{ÆÑˆyÚñâŽ<Á/áF?/žÉ‰gžu}‡I—Ï3Ç&f×xx¦”3™Bº*Àîbf ¯¢ÞDM¾¯ŸðŸ@Q’Wë<ÝìíŠ9 ¦žôêà”ÿíÝ2Z×8Pó ÷5¹xwgUô®Éó·ËË×˺L›½.Êò¸¯±gŸQ›ï@iž³]ÚºàT=$ú”ƒEhË›ÿ]À£ªn‹m‘‘/‚^œ¹9‚I1Uóoѧj“7Ðl MñT”9¶šÌ‡‰À7åàå¶y³±M¾…w'ð„g3ÆTà {}(Ógì°G”<æÏ¸;ܰȦøßÿÅLnÁËúk‚Rü'àkEÓ¯Av.!1ƒ˜y;¿¸½ž'³ÅâöK²œá??-ç÷ÊüÛÉü<°-Ótª¼_yû¼ÝÕ›Sþ:ìoNóˆæÏŽå-­mȳîQzlë=ý¼&“(E•@“%ê H§€Å„çŽü-ðß’ÈCÚO°`¸[|zu“ÜÍVD5h$jÔ¹…ïrmßªí·¡Ú¾Õ¦þŠÆT[ÇÂUÛú Ý¥OEݤ%öjƒ¥…WnM²qÛßÔx õ„›¹ºyî”t"bNÄE]UyF:Ò¶Žv5j4iÔ ‰&ŒAGAà“d[7Én>á.L<š«6ø×±´tÀƒEIP=={céq/=ÆÒc&ýs÷xê3yøj]<\aû$ÍJ{£­¡d $Æ%1.éožœï[À®˜ÜÏ çèÙÅ‚ÇÑ­¼¤Yæúø‘ƒIF×­×P"¨(D¤a˜ÝÆT1G%áWŘ-h¡9Dä£@—·Ëþí±AÒØÄ@îÄ@ÖÄ@ŽÄÀ]SMHä‘ÈžÈ#–} HÁ>0ÓWþÆax ˜)3-¶a.tÓŠOl4"vµO›g»ª.뇑MìÔ즠Üè`E0gênZ ¥8A‡pјYÕ¢ª÷{qz@(<´DC$÷Ç*Z]/?æÛþƒ•Ò5„ǽtz¨Ç/H¡ˆ d@ðL“ø´àØtÝWÆ–8.ô\eIšyö¹&!ÐÄ”F–Apßå îT÷Ѧؒ©UÑB}–i‹ÇÏxÂl^fÜO™¸ï27ó¨¡0î/—™xÿÂSvO¹&òh'xB½KÊMê…MÏ" $$1Ä@"á”ðh—³;ˆ0Ëßa÷*Cü·Ñ†qðíÈM y¼t‰M†jôs–7l,÷‡ª2isDZà\¹€?/·¤'ÀaËÜÎQ" =›f?íóø*—?G¥7€#ú![Ó†pCà3s¥l*äoÍ@¬1j±ãçš&¿¼YöXE`îM:\Ù° Ûs ]Ѯ˻8‚ ]_£#qÜ9˜%œ¬¡Ê÷kÇ5.. lÖÎ*-z^Œô|å×;ó5!Ö‚‰ÚׄSh˜9H–¦y—Ž…¸K](w©èNÓ‰àô¡ÏøF¸ÃËA vÛ6#0sä:ÀP¬G %ÔÕêî²ïŠ]†s›yD†ñÌaLÝmVÛ øê>³ ?m« H¤Q|Šex²WhDg(2h¬`ÚŠ`e|¸tÈ.tI7šÈuO}wn³¡jG$ç@¬ÁŽ µ¸ñsóÍê.¢SNK»ÐnDþqÔ\Pª<2XÆY.?\ry·5á{Fx.<!O¯ÃHÊõ(I‘:l‹KØ«X±«©`×6muløŒÌÒ. ‚„žŽ•p]‰/~¡5X,;Á$¡a"ˆ)VQ;¦vr­ ¸ØP¸D}úô=0!Üç:o¿æy¶o:ð0’~à¶,Ê'¿“‰I@ŽÇ „(îˆ$üŠÞ ŒöÏ ™8ªÖøË«Ò}îqK·…A¶` PÑeÂÌquMÐ¥ÚÆóô¸Ã×f/»ükÂ÷W]åžØ8R©˜à©Œž©õê;ù0 *4ó u¸@ŸX ä¶½¬>øÌ8eZ\Åe¦Ž…÷ <$X<›£µk‰ÝÇ’t³i`ƒ“˜òAiæSº˜Ñ‘“ 2z(aOˆ>à9WÇÑìݵ‡B÷Ð}ôNÔe±SË0ÒN¡¿è „‘ Ý4OÀ›Ï‘N6­•°Å'] i$ìw¿Ã-\ÝoåYCD<á «›±\F(•?%* mÓì1bâZ ÌÑ+Ù@Ù¦‡²^§eßAc¬Òðií¢t1¡3XÆ‹’«†–EäÓ(Ʊd/ ƲbLeÓš#a{Œq‚„QX‚Ëè!<h]eá 5®)éS~-:Ÿ÷{¼ÙFJoý¸³nˆÙ…úƒ$ý—lÔ„-±¦ †õÞ7ÕshÔí Jìr ö_'íèúU[‹AvÆÇö`2“Á„¦µõ]½Þ²ËîÑVËô]֠§¿šd•¾§ê©"#¢ F“o8­+™Ikùð“¥®z!a‚Îù+3½¾¹ zHvP&ƒCxö³ PâÑ‚ìh @»bÝéptW,ÎËø‡vOö³¼j½f8Z6&ˆ³È,Ì+†§JO/„ˆðjÈ´2LÍ”£gqO;Þã ¤8õfÖãûˆetlx¡Àcã¾f‘´3 ûº*`ˆFŸø!ÓñÈ kœ‚®èCö'#ׇówMåíU› ~Gf¶ £Œè‚ xMÛÅ ‚œ=¤4Db3Ò‘™ é(,µMÜXêöPFšÀ±˜à‰:”Z`“bd43ò쨑¶ÕÕmvHvi¹MêC^įã5Ùic Öl Òb¦‹zq.ûÆ[å¶Åf·í¡®Kÿýj=‡Œ(´ûÔ;ßKD(b{պƞrŽÀh§CeqóP¼WxbŽnew`²@b »¨¶>УœMžÕÍÆžK†ÙQÅ”JÅ+‰€Ü+îI¹÷ƒß63—÷ƒr¨M#ƆûA\²÷Ðǃ–IF͈ŒÁ! ±Iwù…,_‹Mžx™Dj.”ƺqc³ЍèΡÀëJ°iáJ"å!uE"žî©¼QÕ?W·g x³›½áICÎÂ☋ÐxFÁW«‹ET×®i¡nF˜Û|(ýNÒéè˜]¹gW¤Ú•š–ß’Cš=úýWˆeœå·˜ˆ@Få¦O);¼ø=bZ¤y÷Jø¸S$>æ1INd |^Ý-ó,ºú8'—THÓDyÝ´Øhç&YC.€„bíùdžQ3O7OpUÁ&jê#yÝÐzl¹8àþ«‚r4k×yFÕÖu˜Âsý¥0¬»êzK!¯³÷d±<ÍšÏB†CÓÝËú**X­Ýäû×÷ý*=ÖŠ9 )sDv!}`¹—+3á=×%ޝìÑÑËXûri_¤àìK´(ƒ5Bçj€¥ÂZ®Øºûqk·biµO²¾†E.æÃ§ ,¼1ILHÄ:‘hή$¤UÓCÏ_²fÏ·Ÿ°° &P²˜‘iú aá<‡ ‡ƒÞ]ÃüWySdã„-›¶ÎÈT‹<@&ËÝëDV«…ŒÔae‡™³T±+m÷q@½ ïp³ðÙÌÑžN”7¨Å-jÖÅ_wc댈h¦Ú×øØxX(6ÊìQ¿ FJ¢{#MƵMZ!²[ä=úña3¸gÑŽ’\ 'ˆC$pAŠÇwÇö¡f¨ŠŽš:ûÙÂŽß[*µ`[ARÞËàØäÓP–¥ß ë×k×öuk¿5ë…}ͺÒ]@YdûÃð6Ý•@¦7‚d˜ƒ%ݵ–W×Ê>ÂÈ5kÇzµy­ÚczaX§»FíZŸ¶¬Mû¬K/LëÒ³ç{rJõ}?žQÀØ„wþ ØP…Cn“¥#ðI,:Œ@c=ÎN€ëò‡$y¥2£{‰Ð†av'äÕÀ<Çž†`Ñ*ñzrO·3\ex¨Yź yX,x ‰¥’k½—ynÌ[‰Bì`ÐñniXQ$0ѪÌz}à Ïò´¹:êüQ!³pYhÌ!ß…D8ßATBÊ=Bk¡‚ÎHÖ±1y<,.ÀœÄ(^C€}1àž^0 î}ý5 ¬¤Ó’tIÒªœÕ¼¯ë"¦ch„šzÌ0ôcšS\ö«.úy“VÅAò\¢Dóþ‚‹ÉÃt‘ >´:kÝ;OW÷æyê^?AÝïª&_ÿdÇCÅ7ÉhAf" À·‡äÙ<²wŒí"cGÀД¾oË¥ç3u_Å;ˆÚ»°ˆU|™b¦ŽR2iCÁœ1Ù ‹]bä›3Øœ@vq’ï é(uvÓùß•dÙÅæè+ŸÁëžCW=½×<5¼þ‡*Y¯+d2’là!)*ŠÏW“뭟缌iq ™ª’uõ‚ê¿Àè=­<™±¦îKË‚d`Dò!ßó=ûoÚ{Sp@uâ:È&Á~ÓÞ©âd*x· Û«ò¿ð¤žºnH†ÎcCõoQ§IÆ!;ª3Ϙ|Â|¶\ýž>ÅYs` XcKù„ XVkŽh[íj¸MùÚSL[¢ÞÖÍã#|ïŽnòYÐ¥ŒvØ!ÒgÓ"áQÆ=çG&ù†"t!ƒ‰ß˜/“÷.Cø£e·jÈ ÿaƒ‡E…ÏŸèà$:rS€÷¹ð½$“üÍ3EÇÉêÛà{ß¼/v|ÿ Ài!­¾zö ¦ùìÁ« T®‚~‹|öàÛð³߆Ÿ=øf?{ðíˆgLËÚb[üƒ¼ƒ·wðzf¸6B¼ªm”V<† iõšòŠÔO¾H¼” ‰õ"Û`ËõNaHmaЬ[ôËÑ4½Ã*bŸt=sKá4HGu&å¢v`6Ï¥46ýÖ  ˜\œóÒÝ÷e7Gµ¥ ³j#¶&¿Pm5G©ŽhO¦üñf†m2hÀ uE€pa—rõá£` p°Š &ALGŸ¶€[±:'2"ÒЫ².Äù/òpXq[{¥ÌÚГä!h;'Ó¡t yòµÈù¼å¥ 8˜¨ ÁßâºéËÇ—ä]¹¹Å´|It›úvÏ%ìÚðxÃò@´Ûïà(¡à<ϧF9A%eÜçð‚¶ÀF…‹èÄò0UO¹ðwœÚjºZ4&±ƒK_¿Ü¯¾=¨;|HãeàZÕ[;²±™õ)"' -g×t%¾ÛΞ“†³ï®ÜÐÎÀ./ÛHØ>>=§Cü@ga‰òØÂéày:¨Z§)uó\cà¦ÑƘœ~s€CF $Ä…LBJŒ)å¬~ê1ÖƒÏk §°…“„,Qh¸æ¬ ›+­øÀú"åÉ ÓJ•2*¥g2 „xÖQÊgx°«fõuöE»•m~à±ÌÝ®¨×0û}³«ò—eÓ|Åî×ÔXaSú‡$¥rÈ,ÿ91LÀmã;\Š$ç §Œõâ!ÛSÂ…ñð¨¡h[¸/M¾\Ý=FŠH…ÔØ%˜šðT¦­-ºÕ¾8J c¥öè“â{¾ÝA´È$kà#¢‰¦‹Î#“¸/EÑöo¨?Âñ-ï‹ï}Âê~OÀíëu±N–/É6o¿m½‰t¢¦é;ô—Yvko)”ÐÞ€‚âL)0½ã¿vXÖ‹K"ô9´ ­Pp™ÏÊ>3üPçr4ADîÁƃi˶yîœ+Mg+Ì¿1}ÈÇÖŽ›çdÝ$sÒ¡èЫü9ªŠ¿)×] þÌUãpN’Q<òêˆbÐ*”%Ý®Xã¼\¼}Á‘\(ë™*‘oð±(„€(‚Fµ.a”¢AS¨nMA8øAŠØVÕ­S‘´¥¤x$ÒÙ™’–‹ŠÕ>¬€2€`üëb¹/«uí)ëvOeý=Å]¤g߬›Õæ¥tMÃÃtw òRMÞ;ø?ôvqÏ/ÂF¬Q0ùS&#®è8vÕ~SÖð©àùo‹¢<J~–Ä 2–«ÙØ[“Aªì0<§ƒàÃÓR(8†Q°*r]X1¯á¾fgP+ \*G†’H4’¡34lh4\¦‰¡ƒþT»=õ>€—G]€ô†’ÿ;J}±ü- ø7CéoRáoTÙ%.Z¤Ø¤S`EÿHWÊ@·lóŽ/èón´>#:,uJ¢ªéËqŒu:™~œe·Wæ×šPo%_mIªªlzs}=›ÞÏo ­ö¢Í™CrÜRk®Èߺ¼[~?Å&AC{7{?ÿ‹® |Z`íy‚*.BÓu?ÿ4»y¸×”u£Š¨K¦øÊ-$h;UµÌa¢Dç^i”Œ ¤¿RÁ4£$<‡3JùuêTá¨ÙŠÖ¬&¸;B(”ƒ+‹c»ƒK ƒý× â²i"ïÉü7vçE/ÌŠ@gä³;eÙDã._ÂÞRxåÊAÈ5Ë ©]¦igêe½ÿ®ådªß•9xÙ5_Í—@yAÒ¼7‚˜«f?SÆ+Pi[ôû¶¦á+dή%W8'ÂËAŸïöU0_#âúi¢4›þV ½ÛvÉ›dKþ¿ïà3AÁ0:Ø•z.×ðÛ•Ð5óœû1×ä^r®HI6wzPWß6£þ&×dÂï[bžQããÃäËlžL«f¿žÕÜùý¨NMv<|?rh^æb8ñ ÒòC{:½ÙLWAÍCíC/]âOêþ€¡éšÝK‡A(±`ð;’¡âáÄÌkŽü‘Ó;.ä³—ó;.+ÀT¨_•¤Á CÓÛˆÒCoAöŒéºXîƒß!ƒ°=Ù»§H Xd1ƒ¿ôdÏ R¢±NUט½N³¬¦m³k†‘´ÛãuA¸^Ù´ ÇKîÄ®ƱCÕ$§TF0b€ŸÞiŒ9ÀÁ2iÆÛ9;òNŒ\s"÷th÷ôÒ•+¸i¤ÜÚz÷q—0šn÷Z¡v ‡\|dxÉŽpëäfqû^™ëáµ¹zUD3bvZÌMK÷Ì´ôÍK¯þ¤V|]ç·‡ÃPòÇÛq5R•dŽ7Æ÷Áï–M*L€¬”f)( üK¦4ä&,7Œs[å›ÈÕ‰M*pB–½NQ´‚þt5ù0ºK¢°èvá¤ÖáºÚ†ÎfƒÕ¶ý>SHlý^Ôïu÷ZÈ–„ºèý q–©.Ä9½¾ç©ìð“­Ç-]S8Ê:´°æŒ%T*:™ N)A,ÌÕµ¹/®´º¾-òm–oàT= ÓA®Â¥Ù)fë°UFý¾<;ÌÜB,x2’iýiGá/¾c˜°h4z‡4ßiÍÒl™ Ë=n.ç¡w@·æq&«k²ËÛ|[ôxöØ:ˆz„sˆÃaŒù§“]3HbÙcGÞºßeR?hˆN'á÷»ÒUÐŒT‡ WõÐýÇ@@é¨a3æ6mØÆ‚‰™Š¹&`Æ´kÌd‹N±b±Ú8|’NÇHÒ œ@‡Öý#ð¶8?†ÐjT+MUÒúÕ æAý ó¡!Ðé$–®¢`Iì@m«¯»¦„ ?ðè#À5/X\ÝcÕO´T"”ø[œøRÆv†Aø|Ô£3üžÅæ½÷r,üºÏW}$x•Ö„Žy6pLvÁ¦G®šU8R£‡X‡Í3MÜ<Ý.rŽBÞçí¦è£œK<ô:~šoº—˜¬¶4ó8ä°‹3A¡4ÀCŽ€1ù(¨Á€5B¨´F%¶abêh”¤6ú}ð+¯“I„4YÅGSt·žŒgq(ÃãbÕ¹iU°V”:ƒÅûlèåQ¦ŽòÔËÒˆo{Ĥ‰þ³z±(%*‘£‚‰ú¦OþBZáω’=j‘ ª£ÓŒj8F¢á‚`:I[ЛGÔ _êä8òÕp‘9[ØõA£’ØÈ¼Nst d:>uþÆC(1ÿ†ˆR#£÷r\ÄV×NŽÆä9~—;Ž9ô‹˜<;æÍú”Ùœ-œÚvÆÐîlíNCÑêýöóÝÝm¸(Þ ‡ïÐÂó4¡„i®ãâĺ %Á¦ï”ÓóÏHü¡Õ( :±–?êjæo´jÛ ,M?²­lmèQ;#Z¸¹#¢²¸vC\Å Ò²-×ô?ÖŠˆà…nZà =„¡Á¢7gÌ2FzÝQ¡‡<²erOË>ävË>‡W§ˆ;Gïu­ø.κ߷/x,€'Å缫OQøàõש¤vÀŠº!¬‘ú0¸õÉÎðàÄ9Žˆ4dãdôgN¦G¡ð bgû4I¥£á'’My( HFW ¯ÿ¾îÛ=™€®i”Ø PHsCIŠ p›OuÖ0O·ê” 5˜¤.±(Ü4mé«´RE¶b·BÈ9ƒ.3Ùæ¿5µSO‰~HýË骄¤é˲hóö«Së³£Õœ¬ˆJ©¨ë²é|ÚðËr](h²*ŠØ36[Â0RÍÉ*Ù“9ŠÈ‡•ÛÊ®oZ ÀªJ.èºèóÝîbõ‡€1e±Öe;ö–Ú#œ2¦('årR394%ÞÄäϾ$mÙ}íø Q¼óüGÂa™ðξm¡$/$~¹X±`ͤ°ÚR +òåWÊ/x½q°2¼,À3f¤˜‘ ™.Önùk]Ûü{¹ÝoJAV÷P¢p;Ë`${ÜWUR|'&ãÇ—^2¢r;nÐŽL:2G2jÆ@²ÇÉ¡Âÿùª/P5#lxÊë i˜ÏOE}†ÈTxeOÍ3>¼×£éM` Rµk˜8°BR"!…Ût~ŸfODfòHZ?0_à&s†g§Áÿ÷Gü\Z¶nËǘKž=DÆ_ŦŸ_YÒyPÎ’OsBVÉ%¦Þ]¯ë|‰ˆ/ @ïÐõ¢júáÿ¿—$én_ÿãïÿïG¦ çg¯#‰AñQQ’iv ôNhÇGJr!‰ÕÊÿ,¡?¢0ø¿EA1±¨JìøÄx”Fp*è(8Õ ) ßÓ!q‡Íú1‹9§Âpl…·t)~Ÿ_Še² ÌHû¿;ÌÄwÀ±Òbô‰o‰l”ÂLÙ«âË¿+á‡{Š©GaÞ aú¦±fÖHCðÌbTeY–xÎá«É.êÏ7N«ðQ“Ö Ý Z+s òh°}¿Ëw¥{vÁ2À6HƯ̶$yB’Ù |Øñ™J ±µ qPüãjßÁcá£4Þ Šm€&Yûí¾ÎºU[î¢Û€ÅaA(RJá0A² 0úÓÂÎ#mˆº¸ê#·Ð›X-FãIBšvlƒ†Iê¸fdqX…· IvÑ€ éÈAä1£¯m¢¢+(ôôcÊRDŒ… !>²§D R%à“KJDpÀv˘H@”ƒc€¿Õè-4ÅŽÆ+–}±*[³ﲼ®›>â¸ÞKÏp°üTæ‹ê³YÝŠ‡%M” 2~qz‚±[5YG–Õ'‹Žc"é)¦K,‚ÔûƒÔÐ$ ¤¹kH…[6Y,Êõ>¯.VÕ*Ëó˜À­.J†¬Z¥ynnÕÈÕÀ­D?{BmR÷e2y|,Ñ£ä–?Ë”÷|Wò <±ÙVˆ«Š¶†j+h!ÓXaò`ЬËj_ìZèä,ø[°C¢)£P¡[숟F¤…yÈO€‡££q…Ù–)õb39 RÞÏ*7½4†ç;jÁ`U*‚,Ô¡XÌÀ„Š'½iøñ.“J¢Ò^èd6|É8ü¾Ê%›A¥—¼¨°Ì+8lƒÄ™š©TÓœ?ñÛ=åm±NT²Z&‚ËÇ—¨.j‰˜æš¡]L6ÄLSÂp·_BE‡k× ” x†Š‡§!”Éšž°â£yIIŸ^ Œ,8O‰ÙE¥”‘^¯?% ð­A¨‹¾ÙECëê|×=…\A½ôXžo£¬®f ¸ï Ø7.x@N|ÃvvôºYá&žLFl|÷W¥g7ka<_—ÅSuQ°7ìCò $Ec?ägËÙºL q/,:ÞJ+ä…$•Wk U½K|Íh-ÜÄÚÙÃ7ÊL2v“LÒ}ú}÷Ä¢ì¢zýDŸL !åÛõ^ׯú¶¥¢(z”¶EXž{»UQçmÙ°Ì7*¥ªñÞÒÉJM>`K \hÇì? p¨JôÆþƒ‹Ýåè‰Õ‡‚ï;<&RÐʼn(ºÓ ûu¡Äfx•s )>îHÒ;¡2àÙH¼Z+xË}]G´“TцY)ÉÒj_0¨!¦"'¹¼^$m±‚#I†{oÇ6OÉ`½ð¥ç;ڦ΋o–P£š9 9’×ÉäË‚b/òºž¬p/ü@Î\}œìwÂÍž*sUI”Iž‘Âi{°ÌU[‰À¹ìQE–8+ÆØÒYó¥H46L$Ë›~ J“ɉ‰Èšª÷4)!Dí²üMðG'xÞwÛ¦îáùAò=¼GÅ4©J£C·D(Û¤?%læÂ¼ž;…3Q95KbG $ötb„îyÚšÕGZ[±p^¸5Ÿ„Òf^¤6¶È‚b÷)&xm<‘åŸX Ï`ÔèZçcšºƒÇaŒ¤qÖˆÌVOÔt%¶¥“9(¬AØ9w“Œ5iÛ2ŽRó£{Ní0Ó-6з)?âgL% “û ƒ–E·Ê!Â×Ùݲ…ì¯lAlc:iJ¬Vó‚ßYÜý`±4s’TÝu ÐZyzÏ)6ÌÃR°ýqõ”Ìó|ÁŸT­Ð·ž¬%°ÈV̰0K2‘¶? ‚¢ 0ØeÌIÁ퉧NÆÉ5 iξçcJ4jÇÙMíƒïî€<ì¡©öÛ"¬Fm¥¹°4CK“âÁâd땆œèÅ9rªb:mÈQ +ÃgˆàýëßÜ÷À2Éj©ÓDÍ•T_ßæen*™¢“µ†€)ôdIYÜÞc*ÿJ­Ù9 ýZQ‡½Q^k‚Šß… ôNh'îBH¼ZŸsð÷€4ÂIÐÏ h–ºƒ ƒÙÚøùÉ ˜Ÿ Ì1hxNŒßâ‘Ö‘+«{f.(1P$ííÕ„Ošµ)zÇ2Yâ˜0ùйˆÁøjÖY«ÿãÔŠ·šG–€gõ(u-ãm Iè™ ê¨ex ÚÕµŽÜT¶.çµôݵóž!pÁáƒN©¢‰ü®šô–r9œò$¹Ù½]gÝSÁÎ9­ 0f½!DLævRjòô—²^7dý8e‰·m³Ýõ«ºé2¸›j SDÒSš.ê[’¢æwôOõ6U»¯k0®iE¤ë0Q„`fsH’ÊÏ9ûUQ7‡&™^ß,¸!ušÓZtš!nIêe»¯à¡õºHhÎ(ò8ù71»q•êÆ(R-j:M Sa–,¥¸G"¥F<A~È•ðÃÿX„Z&2%"ˆ96· U<ÆÁ¹Bì-b¸¦ˆëZ_^ècÒÀ "pK1ÃÛnð@+\vj–IÏßix'ÊÕ=T=qA\­`‰>1j{¦ñ5Œq€=‡ÆÈ» :EXtºqª[„$ÕÞ­S–ï à„¯8Üä ¢Ñ 8,CÃÃÒØy,ì÷Ã€Ë Õ;È®‹Gô}ù±ÿUœób“Ì@ßYØ;vUßGe¸è'ξAPå6è,k’) 0Y…)Ôï¥haè¯Ñ-¾tºßmÚÞmžkðäíã?X‘¡x\¤*x+ Æ 6Ò¹H4†BË—DT?Aè V@V?{pªlZ«|?+aƒ†FïêO£ þiêŸ|Pÿ4õOFèžpñ–õ×|1.é„*Rš¡ƒ¤i*>t.&im±¡]_nú 4øÚA¥ÂR_üádZ9ßú X³ LJ¶ Ud4CGÓ´cIMíò=/j‡§n 'ìé¨Jm|Ö–5;ǃ،ï~»›2ÓGžžrAXÇ·,5¹Ù)ßǶ€15\Ç¢‹¦k5L“´Áœ}É Ý¡cë¸P´JœŽV%§oò#¡ÑgÉ<¸R:úÓÓ凈R¡R¬€TÍH 7‰à¸Ž6§íºM‰BýÔ<ÃíÃ0pPÅN3tø4M›‚¸Ö«A¼påNbGé¡VQ»BRšlÚtšÆ¤œßÒ°”q$€#«J§¢Äté¡ ÃÀ"}h+Vï§(~­â_Ÿ8×$G¯Cbšj8¢«A¥ Õb¹r2³W´¥²øÞô^#Ð æ^ÚÂR¨XªÁ‚Ögx«cÌ®„Ujá°ž•¯6áÕ¼ëŽwRwF—Ô‰TíJ„IF¤é¾{î„ÍrY‘öÀÞ¬÷QÁS±lýRç[Ò÷õ[ÿÄ„ð‡ïÉ”_œgÓ+Û,ã?ÈP‡”B-ûˆÈPq3 +•1Ç`x¬ðRrÂáÄ¡ <ç<Ë gpÒe@ì^êÕp;± uý!Ú‹BL?£ð‡­3<:»HM½Ú­1hã MáWÊa7^àY¸¡ÝÔpë‹dqë"mSÎ;á§ìÝ•)͹£ißöe‹•Ôá»}ÞŽ!™`È$ ×Ê“SU¾ HúùV’9îëî*u\åqÁ•  Táu}Kï[éÔ ‹EÏ-„l š”3•#»HT5‚…=­PˆQôñ´ µF÷’Kf[âNˆpõ"\)š×ÍÊŽ7¶0:¸2‡!âÈ¿ïMÑDïÄeÛ¢Ï}Ú<ä¶:š™¢,¥ü?ЋzŒ±\õ{;Øf1ݱ]ö„”¹üÓSkYS­‰pÖ>NQ‹‚xãS5“5æñFˆÏ–(x48»¼êÆÆTPPþéÍÕÕlz?¿¹^d·“û ]½Ìu†ÆÅ.x$~3ËÝÄÈZ°èΡ¡BüKW×´ ™7¾›6弤ônî²éÇÉõ‡Ù%—Ko®B8¼í®?N<‘2L ©¢›«Yv{wóéöž)£/˜£ƒrRÑ—³w„ÄD&ì‹#¥rn.ùön6Üϸôòñ1Ë×Ç•:0§ÀÌdÏß¿Ï&——ªh8–ìŽNÙñWóëÙBU³¦Cq¼Ư¨¸›}ºùÌ˧hÛ¦=J:å¤rgww7wLâS¹yªÈǵDÉM%œøxEþãí¯ùz”XÂFåÝüÊu_ËÝQ¢‘ [ü:¿eâöu[䤗.«ãêJå§Â®ïfÒÓß]ñº"ƒô²éŽ“Ïy©ìϳ»w7 .÷9o룄"#•øerwMÄm—pÌ×à=ÚpDJJ(ÆRäN÷ÂWê)~‚O3[ ÂŽ~¡eÆáŸª–}qéuu-§ñxR 2S]&wâ@/„†ožªµ´IêPIE|!ëS°'Â+U/æ_D”»ÆspDZ·zj/|õ˜(¨k|ŠslC¡ZûôæÓ§Éõ%6˜ùõ‡WÐÛȉ ú1:Ç®+KíÞË–â8§&ƒÚÐ'—Ϭ*…;I€…ýÑ}Wì²ob¸ê÷ø“ÊnWe^ñr‹h%ù7E6ró‚J¦db:GŸ;ðæ½ âϨtg2¡$ÚVK´§s2©¬Äï'ü7—Ýd TûÈï»Í¦)¤9)x‡¿’Ïøë‚5Ñ•cüRW÷ _öMe"8Èù¶´Pƒûƒû*”²ïy9Ë9C…M)õ`NGï×cÖ…Ç\¿p½Dʃ[5$©1Ë`®¸|þ3”»òdgÉä[Z‘ÖPw¤ilÚBF‰w(`á I—\QšdÂi.Cb»•úbg'÷Oï\ðÒ'J¦/+ÜxšÕ2è×TØ ¶l~ÃHÜíop—] Q™òaÜ/ɤ~[úôj$TÓ‡²ÿ¸_&LR¤A¸ñU^gó쩨vnq: •÷^†Äa Òþ¬H,ëuñÝ-³(?·R¶5ìŠñMi=V*Tæ'úiÿ$ÒÝ]«!¥ÜÒYHŸvÒ6m¾õhñQS•7›ÜãÌeB½\1WQ×U‘w|wÙgŒIEÅßÑT¶Eê±§-à£ës²Â¤ ‹¶p¼º¼ \-#HÞ4ì®øF†jL{Ïh¤ƒ—Ó`÷ÓiXÏÃ4(5H“3Î~|$|1áQ„LÅŸªß8îùü8GrU§Iy>ó _Ç™¬¤\Zäð–…†7¢À§"SIS]úÃ`Aµp£ž´ÊSJ ä¤BΧrÕ‚—¢`ûS•Å Š‹îÞÞ]8fëÇLÑ™9n4Ÿ{SäRég¤6ú>ùÊè·΢PHó”&_œC—åQÕ¾ìÌÇ<ŽTD%¹ÕÐÀÇ]qEBÖ¤h›nW~-œ*Ù*§ë£‚Üv ?Ý4NåVECŸ© JawùrYöÛon IhÎÕîinSÓ&Ÿ¦ò*ó¿K5Z}™ê_ÿÅ­ªa¦Y«Ç#õ©òÜÖÑÀÄgª8)ìŠLRödBäÔù×8Ýö\nƒ©ƒ ýÂ7Õ94S‰)—èQ;ôî×H}LÔl»r«âAŸ®‰Jr[´‡«\ý™¾äRØU³)Ýv=K¸›Úæ¯ã4©©!Õmï3»xL”ªè™îgÌ¿Ü3 t,` LFÊdüg`–J=×/Ä+E}(Û¦¶ûŸ;Ò@›êèC’ªñPäL&2Ußám„]±Q‰tª’ï)e¥Ò¿'ø Å6AAHJmTÿ@ö÷Î/ Ø,êÕ‹X¤B¨œÛp2$/`-!Žß!oÇïŸË[^ #EÓ›ëË9œ¡O®²w“»Yöyr·Ðô•[h41ŧpu¶N.g*Ó’9M»`—·bÞ°Ð-‚«]üÝ y«ëŠ¥0`¾þÑb|ÇTItx(…vœnê“ôå‰Ð'ë¦è˜§§æò Uy ‘’žŸòžmýp2ˆ•”=ìÕÛ·PÑ%¾¤W6*‹@HSž¨”–J‹Åö¾@ïÙ¶Àù©DꡎOtNȬaŠ<Æ;'xý8qiÚ¥³#Z7£]RÃ~M½D²÷“éý"ûtsùp…'ãBq8灰´9Âÿ^aø_S|w¤hì1¼ÀE(`)WaL‰áãí¤O K§”¦h‰ŠÞ¡Jm]/ þ ŠÜýS³îXÀ0¤áôë•è Q’IÃÔ°Q2•ß&ß§²þ[þ3l“ˆìGE@žaâÚjñ½¤›vJHtµ¯²|ˆcc’I û*%ÉòsÀ ¹7g¹Û£“ûs’Éô*!‰lÙiò|=DŽ”XCðõ Œ 4_„;ú‡B!0èš`@GDQ*‡^ ‡Rìnâ•€x£€àNgm^p`¨4<ü­ˆŸøÛÿÌ#_tüY&8jÇ9DÔKY.R ”ùB–Æ`–Âr±½Àì.P˜£ó£dr˜@ÖYáåФ„DZg’ßX#¨¨Àà‚æ7ÇšÒ©o ™îàÍ'(P©¸À€…Ѝ)MLn”Dªô{Ožmý®Â£èûÞ§¢¼€«Ð±‡vÈ"»‡y¾&cóõb,«¬÷….tr#s@‰ð]²dõKùñ"|hèÜ„þ“B’2’TÊ *âb4«ádXsÁŽsªQ38M•‚DÍœB! _ÈÑܽ9 ô’ï1| {&÷%ÂEs÷B>Quö'M=ºá£¨TˆšŠ¬„f%<‹ny?Ô%' RqÏåêIÀ-0$•ýgdTVÖ²ÒÙ<Ðg.{"+ÅQWˆMAlÊĦ\ìTi*i®—” yO °] ¸$à:w2˜ù›ÝÃ#ÐÝH-B¯¦À%'îí´{im¿>g%0ÅâDEqTŸ 1Ô¯ ›à…îs3ÊÑFõ¯Á™é9¼wÏ :†Ž "ÄÓ‚mþ…ºèÀV}„tuƒ^“=¸ƒ,÷­5©ž)àÉR„%=¸…–.7nßå]¹êLÁ­Í° 熦¦$n;1¬É±‰¨ëÜÔ‹/·ò4¹Á]¼°h)âcQíp¶¥©lœ…¨Ûe{ˆ‘5¬‡ÖñS +ÁÄ”%ª ‡TœX°ŒŽì6û~·'“0R°]òÌ8èÊžøíp³ƒC»µ|Ó›ñŒ]]S!|“› ™Þ|žÝM>ÌÐü~–Ý<Üß>Ü[*ŸŸB{q=Z«”c*þòq~?»š/ˆî]¶ÝlÇ¿[bcˆv) ½Xîd¼åM™zöÕ¥b´qA³ r¼ám˜sŒ!p×e|UY\N“€j°¢¤³ž ç Õ„ ÆÚ²Èo‹«Š4K޲aT í£jhª¡½·†öç©¡ýÈÚjhﯡ½§†öG×ÐzÝ¢dpÎSG^>Ã&J—"§žlQ²¦Tö“êJS2Þ°mCVéuæ´i¤5Û².qµØŒúLyùLË:_­Y¢”ZSòN«5UÉx ö YeԚ˦qÖìvsjÈ:2%áK×15%ðXò¤Àד/žšV!kÙ'ö¤÷*?­tÆ•Kl‰è-$X§•Ä dDÛˆkÃ-ᬠ:.{¼€@¸‚´G÷w Üúü…rBqŒ(ˆ¨"î zœfúQFG™0tÐÄ#ëºrSg›ªYæû¥DÓ 9Ìl‹Ù)%N%±e´G(ÝLÀŸ ÍL”ÌQF¯Ën•·ë(uZÝ$–gZÀ’é¡DCÇ{]²n |÷ n‹'Ò•ô wzKÅuå¸3Æíž#‘‡É°Ñ{Ä1…ˆQF2ž2²(âGš0Æk†ÖFŒƒÏâaQæ1uãg4L¢„)%ôÔ‘C˜¬'MÀIu¥«9ÂÌMÓëÎmØ(“Šï«bGñF~æ‡8uåЇÝ)NÔ¡!â”J4ckŒ•Ãöié³n”]ög(¾.‡yu;í/˜³>="EZbN©Óã¾ßqîàÛý©æuë·sœ…#{g¨OôDWÿ;¹×Å÷5sö+»7Ò‡P7øA­ö]ä+Ú±ì.{€<äCUâ¬×!ìô 3T]ÑæGnW¶ÏìQÃÙÛˆº¶Èuã Û]—’QÔ$RW(2´®¨VÖÌQ™SP¶kÈš-n'ÉÉ¢ƒf$)%1áëЖ”°¤Q&l×݈ÖaRëÀI®»m6Ñ4>A€Ìô’ÎÐ4Òø„ìÇSÚ FÝ\åÝñ§1 ›9G̉ĠxQ6‘¯Q2§”ɘ҈+­W†Ja”ýüÁ‚ø–àâÐmåO8kZc5˯;žP“úÓ q6 ¡wãÖjÂD= /uÓ]:vFá.y]”?§KÎ=p9D‰áKc?eÓ•Œ·0lÛUÆãí.›FZƒ‰Ùšü×îV£êÍÏiZ‡”)¡L ¥¯îâ”ÚÓDœVº¢cl±rØ>£ÝÖeרý ?ŸÛ¾ý!‡(«OÞ/Ò•Œ·0lÛUÎz;a_‰ /WÛÝÛ#jÍæs[†tõ¦ˆ²j óÎQkTÉx ö Yå¬5ݦ£­9²Ò"ë,\e5v® o\Ьƒ¼•uZ]ÑP…ã+Ëæs›…tÃÕ¥ˆ²ê óÎQaTÉx ö Yå¬4ݦ£¬9nN7 ÎEüó3ÍAÆÎ?Bsy‡oÎqò|£[õÇŒ›Û" ®$)Ȫ%È:G5¡ŠÑÆÍ0ÈYUš9GÒ¯Ž©*“Ëm¡®(!ƪ'’sŽjcí Yä·ÅYEª%GÙ°_SC&—ÛB5\CBŒUC$ç5´_ïFÛ²Èo‹³†TKFÚÐ<ôuq˜vtþ£]]©‘îÔÜ®„ÐWÙ&ï‹ç|Œ‡û£a¦ŒÐcžC˜´RpFc03ÂÀAÓôfè6l”I}¾Qi&µnÉuW`uBRN©ˆ>ôЩEg#µ1j…«"‡í©-rÕkDñ± ©âæ.x§@Y †“ªÄTu”ÁQ¦ŒÔ«Ñgâ1Æ•p yä]¬AV§¡‚t°N fŠì3Ô©Tu”ÁQ¦ŒtÕ©mâ1ƽîes8pÜdÖáÉWÀ5£ š5`«¾N¸ÎDïÚOG×–‹Ñi#¬1M˜Yg,ó µÆÕaf„ƒ¦¹jÏ4ìH“zúè[ˆÛ:Î<»ÏTFžrr¿Ù¦`zz¹.{Ø9ÀÓãÙ:ß’"i“}¹6yÞÇå4ÍÞc6ÐSoë ÆÚ²Èo‹«E¾/·£ªÆ$7, ٞʌ²ÊíiÅ"£A{á:€êE¬Âd–/c|0]:dJáñÀÔØÑˆÏR2§î…ùH] xE·Xs§ {W+ïn‹î WE7‘ »aЮVž ¤äî&ä,š”KØ)MÌ©òèBˆ6?Âp­‰š}‚Á]Ÿ·G׼ũ¯Y¡çª‰b–"¢6+T¢Þ6Ïp?º^'S_qþr?OnnÞ½‡‘¤¹½|€ø›P›p° üÃEã •@e–,,•AFZ   žÜæmŽæ`ËcXÊÚåÀŠáf#Á*´Z 2kÃŨˆN¼9‹‡–C•¯ÄĽÕk½Xc<ÚKà[ïÏÈø»­¢[â~JiÏÀ3#NîוtX¤BLzÈÍ"Ûœ—Eb¡$)¤v´`ÝB.0+Á׃w²)–víªõª ,ëÇf” ƒÛ ðÁ‡<Ñ0ßçý¾‹(µ«ƒM‘ç3ô'hV0©#‘Õ>øÄŠN$íÕ'V‘œYÁÓ2ûî(T°,…¡{Ñž]Ï 8c+Ô #““ªr¦,1Q³M^åߨ¸4íÐïW”2v—>|pææ»Uw_!à½Èýx«S!PÀÉ@ Ï–h±†•Ù‡|_õ†:Ê!äÏj|¬%Þ—•Z©ñ¨ÂEF«X1Õ(Pþ°Šã™Ð£G’™>33UžiCP_ò×PÑ!´†Ñh¤ºƒ²:¡?U¥òù2d2µ ^ŒÌÎüž( MCÏŠ"G5WÐi5eâÓKŸÀd?©tbi @5"E.I”EJÓÝUÑÓ®Êzÿ=YV YDˆÁ´ƒh˜ÑxX­IÆw)Kª¡YÒpz6Ùå+²†ÀÐë‹B-Ó×]0n:EôøXBeDø‹»‰%:5SŨ¦ëHYy& 0{`$U' Y²¥Ø¶YF,,íU­8±„¨½°¥ÕÞÕRáê9Qp×e÷•tGº0 Àu ¸™òL®Æ¤‡ß!9 ω,Þ˜HOîOV\'w8'LбÙâ¼Ån^^×î¬çè ,6MðÊ} { Íc ¤²-žáÖ~•N'±tKÒÊI$â[LqÅ޲Ð9,tzl…ÎV!B¹…˲ødR‰M*a>Z(¸ žg$ÉH(V¹q-ÉI-A±\«mélJ#ƒþHÓÄýÊÉíÚ™lt˜Q®\Gxè&¶ÍÐV~“a$µ[öÎàÙL‰µÂg€]kLôeÛïÉúuKàáÃ4qÍ™c¨ËU4^Ikc&y®2'ÉöëùÇ£\ŽOG&sê¦^çíK¹Þæs¢ÐyŒRE™WFiz2¿=ÑÒ]ÞuðþcFú|ÑGêd³íäd)’¹ÌÔñ-exÔpÅöùv™uñ«È„³Œl…QSG±e–9uÔÒ½hÔÔ‘´$„Ö¤”Pw"\ˆ‚SëÑ`ï}Ešœ‘G›U™‹íÓÌ]x\íìÑ´ÓÆÐ®ÑpÍ7 ~µ"1TM¾^’%=)ï–¹=ÛexàhU:æ6tŠ >Qš]@”p*œ¡$”êx;G´ÌoRÀ–H#xL–à.RœGoQßêÔœ\è£ ?<€õy—ü0™^ý8{Lù{èV¥o²ÆÚÃÌ9¢B"mñ˜`!w‰(výç¡·0:V&«;îϸµàîé¥+Wy[²zŸç;ÊÚdÕ‡w–9²ôwÍ:ˆ¸Y[ ›µŠ«ÑO°wÍ:Z{Û“Yósð”ÝEª Y*‘j kû„eàFq|çÙµM8d°I&aÒd"MÑáÑ´HDm±‰ØáѨšªÀ¡ 𠆾bW•Û²c²‰hJ¦†PI7€Òœ³b7áQÝ~ÊxüÉñàxшx»¢Ý–ïûÈut2Ûª0êFȼhäûˆíOJÁ¹×7?i‚j¿ëÉCìD-\Äš–© ÔÒá}F-t 1s /‡º1ϰÙŒ32Šø‘q½b‹J`ÄMV×Íѱñ®ÎwÝSÓG¹ÕúÈ%x–m:ÔZŒº^Sí·D'#¡ŽµettO_‹—]^;£E)q‹²HÔÐ.áù÷Xt=Ye®ê<øU0 %6ž¡BãizÀÔäzr ®Áç2wMS…ñY´ DÌK!OC)Yt?µ–,{Û܉…Ù[|Ë6 r_lwU0êžE' òt&OÒÝÔYb,¬ÑVYÿ² C³i%<š—Bž QaÑaÒŒ2¨¿¤ÄxËçÅ×l^ @þ-õ¥Ó=[:騢~ø#Ëê@Ó°U™ÖM,@A&ìé±g & æç«É5lµÔ™3ïV ^!°&¥D*rT˜"QÇøI …±q ¢S©$2LUQÑÑØ cÁì‚{ᇵ~Ø©;ß# ÌçÛéí±Ÿb­†Çñ VY OòÕØO/õM¯kv?,ÖA­ÀGvž«VÙŒKþdìúúÔçÛëDÒ±`O†ù-øAÅÄ.äÑ­a4Vô·ˆ€eŒ:áÔÚQýkG9`›Û¤(KQ$äØ §7¬iç dÚY¡KÍæ1ŠèC?sviê(3KAh‹ ²îàÔà ŽdÒ’²ÈicýLeÞadÚI©+¼ LV*%{ó4dàLºç²_=]¬^–E›Ã ÀžôϺç&–È +F“ê4¢dÜ"h‡¤$àA;²Iû5ùŒ'³˜^ؾ,ô[I‹Ë_¥Y%:Ë’Fº*Ú.®cÛ÷.oûfâfëæ–qÑ©íjߌÚ(ª‰›Ô> ~}á%‡ƒÒP£-?Tro…a¨òOâBHL]‰£ú˜aÐàÑñ ·>0éˆzCã}+~Íûdþé†ÎlW |n\”ä¤<‡ŸFN?à9^  ½ANÕÉ%¡ãdÝ1f_d.6ä|ÉßÓ8¢¯Im(å2¸tá— ëf“‡Ð[l.J©…䤘£¾ §C1zÏáïÆKJ‘ð =eÛâ DÊqÓêxXž‰ˆ%k3Ž…å‘r1}BÁôBŠÐ?xŸ-_ØË©0UÀñnêºX†ui4LMúèOÚÌÙ׋´ôä$CÜÔ'ï7\Ë\ÂdËÙíyî$ºö›TðáOÔD§—àNd‘ùåòOѶàqK>¤/LaÀ´ýÆ4l¿QÌbªn[¸ ;8ÌuÉzsÜŸG )¦ ß/6/ž9#˵­|R¥|y!ï¾â}…„€ÛˆÅÿ£Ê7d$µ„h ZÛ‚¬“ pŽ"‚b-Á׎Ì’Œ–]öµxAï' ˜ÒÿIÊdqÞ;@Œ€rþ!¹¢có”,¯»rY4#à ¶{LñÊ?SMVвäØ"0L(Õ'…JÁ…7FÝ3’<ì¦Ñ¥H°î1ײŒ^Íh½gð2ˆ®ÉY5t"Ç•¢ ” J© |b$¹œ½Ÿ<\Ýg“éýüæ:»½zø0'ÿLî?Jõàù–íë.ä‹îX *¥¢R.J@¸ººù’=\/&ïgÙÕÍͯ· ¢ûŠ^yÇ*î¾¢ÛŸT¶ø•X¹Ð`=ª…ØÊ>ã_šÊeA> Å‘ª3Wñn6½ù43DŸZjTŠ]xT™]†L+ÆNS ]³¿XÆ=VùæD˨CÕû«É˦mÑ?5ëÓ´1†ºO³û7—¦>œ&Ÿ¤ %º³;¡igUPŽsP™N¦gÎ1¾¿ps.{~*û}ÃŽUN¥RÔ~u5yw5˾|œßÏ®æ‹{M}Ô´áQ¹¥F6u ž¿ðyå³Ï¼m%È4b·ï-µg)t*ÊSîWWï&Ó_½E ÎQôÁ]ôÀQôU‰ó¿3•ä.«ùôæú½»ä†ü@Èý{'Ž›ëë™ÿÓÊæ]Gi¦¼\ÑåìÝÃ!—N$óeuì@¬àÈ<}¸‡%ÔÀ¾ñ)…üzy½'ó½ˆÈ, œqN¯)*ÈYKïçW÷³;g ‘UýDV<œ•©„¤BˆP{s7e'×—W³»…ªòë š¾j ~•r7¸—žuûeWÛ穌”Éàz>#å·xx·˜Ý›ú vlן¤ 14ÞÏ?ÍnL•Öjc¤6à×ͯeßbS¾¹~ îÎYYÃÞ@Ó¾ò)ï%ûZПB2k „yUí×÷9Ò&-åÒ˜OаŒµ»l~=½z¸œ-²Åýä~>UÐtOd6ò”Êfß ¢{J¥©{ñ‘ÌI>N>ÏoäŒ/2žðEÂKÚ‡èãÍâ>Ó¾?O}¿Ëwå&É9¢|¼¿¿ÜÎC .¼k ÈRUô×!¯ŽÁ…óV• aÇüš lד«ìöæêŠþú<¹R °fz†â²œ2¿þ<»¾¿¹û«³HþVÖË&Ÿ­¾¨;;NJ4*'Uäpýÿ9¿þÏÉÏä#v?»^ÏñÂÔ]ç¸r’^&ÃÐyMºÕgùÑüZ;\ɱm­äðJl+éýu6»ÍîfŸnîgði›I[«r —&³êû*«›®XQµÇ`ÂR",U„qWówŸçwäß¿L³ë›ÅlJ&ã3ÙôàŽŽ9!>¶(@–9#–Åqu3¹4§ÄJ‘4pE¡ßîŽÖ ·€_ê#ʲûO·ŠŽ ›Ç­dÃæ/Š–lÞ¢©9¡ƒ­Ï‚ ­›Ò›3ŒTs  ?ÎQ‚žs¬a[ôH½Ll …Ÿ&ד³Kòù“%É6óöè ¶­ˆ„¦›Ë²Ü)Û LY±ïZöüÊI UA†ÞéͧۻÙF?S=Æ­>I/J0^O”)¦é„FÃ4i­…iÒ› Õ´ï˪;ƒ>”ãÔúp?¿Zèºë¢Ç£ ç¾Ëto+pNuWá¡“÷‹y>‡NíÚJW®×"ŽäHÜ–…ëÉÝû© î ý—IrvàëÙ½wé]70H«´!Jê¹JMŸÎº—î$%TLÊÄ(êîIÏÝg‹¿.4Å{2‹k èudþC} ŽÔM$¥†$¡þÌßîfÐÉÛ<˜ ” JeûXÌ®æ×É·³éœÌòÞËÒ=ö»l™÷+ŒU|l§))JIQŠPüþþ6{7¹Ÿ~„¯ìÝ·=¬ÓsWxÉx¥($åB„Îÿz€u:=T %úú6¯»Gpü9å\„HJ¹$ót„Ôlv7¹^¼ŸÝ™g$ô€Þ³‹¯¥Èý|¡ùþòæAîa+Z]§ñ#Ô1v©çŽ 5þj)8Ú‹r~¡¹bç'ºÛ«r/[Zÿfq|}§:ÒÑnÃušFðæÒ:8“v)²“ž|æÙ ‘z¢“ÝÐÇ®*àŠ»Û¶1É7ƒ  7†lúsM/¹äŸàø‹Š¸oN÷ö_¤8kåeü¸½Ôõ±ªŠíê•^`Ò_¸¤ŽWz„Ágèî ±éþõ_¸G‡Ç—†f¾áÔR3üâ> OP¶½X§`^l n\äfAhࢠ¸ï*˜(YÀ]×Il"¤™Ò‰WgBÀwÞc­‡Å®Ü5ž)sÀ*Îà nZ ¥úf…Á¢†,G ³OS~¿paêׄ:þ¤€¾è$5pjWuæîÁüÕ«C…é0D"~…;jÂŽ˜Kj—ŒØFtü55 €_ïY³sì 0þ7úI<}•ç§\ ì€·,+¹Ù©Íæí˜±á­ªî­12¼5†·áqá­9,¼1*¼޺DŽ·' oˆ‘Â[ÿxðÖ9¼ Þo£Ç‚·Þ¡à­k$x{Æ@–è« oGŒ6œSÇ€·ž!@j:u0:¤¯û¿õõþ_Æôþ_Te¿½ÿ£÷ÿîý¿˜½ÿ—½ÿ—Þÿ‹»÷ÿrBïÿEÙûñ÷þ_œ½ÿ—èÞÿËpïÿ%º÷ÿâíý¿¸zÿ/gìý²D_­÷ÿ2¢÷ÛpNíý¿xz¿Ôtjï7:¤¯÷ÿâêý5\9u±'Ä\U wJ¥{=ù‰­a[Öå–žlž pªßeþ²Gĺo‰;¡xãm% s—ø«!Ĥ]Õ¼àÅãC'nÒ^pÓnòºü¯0{*ª]à–´‹R¨&9)Í‘=A!×cŠÀeþjq_ì:_ð­ Æ-ŸGã„m±¢/U.È1w‰ª|,V/+ 41‘¦ÜciM=çm‘tÆnÛ©q GÝS<çξLî®ç×è4ÃAÛœÁITŽš×ÍJ·ÐCŒÚùPuL_ÞJ c`t}»_õû¶¸p\'t«Òo:ï2:?Ëw¥OœJCeÞ¾ôOoäv~zI-(Ô|uæyÚÃr消ÐЖh|j‚Ý”™‚”YM ©p«~¥A]ºÓµªpýRçÛr• ·*ôå«ÂŠU3Y¯• ¦/2DFçV¦¸)•=¿…?¤Õd ê0DhUìe±8é‚XÅLßâ©ÙWëä¥Ù'Œ$É™ñTc À±Z]ã6ŒÍP‘Ð6JúrGþå^ö¤À‡ÍÍVð:±ØX 8„ö¾-—{_À¯ ßd6Êšõ0¢sŸ™adˆ‡¢ñ3¶9}c–“ðÔ€´MQ-sŠÑÎèY‹g]W|´4ÿÄÇ`få0ŠB‘å«r,౺ù´ìV¤ ¦óááÖõ\ÖkxÛc,ÆGa|aBìBIžóêkÿÔ6ûÍÓ0 ²Vo—Ä@Ä\}ÔÎ*÷ËmÙ³‡2i”\2‡,Õ{£³ê€¥{„·Í¦Í·Ù#Ü(~\LΆ˜·+¸‰h²¥(üvf ëd„º|á•~~ÿäVÐ˼‹éÖœ*¸ãly²ÛÃaÅ·=ö¤ußÝR1K«2wüYþYž[”s.˜Ü?AœrÎHöÑ‹^Qï½Êâ9SkíÍIj”¸»Jùj¤{“?w4 #Þ¸õø¨©ª’º ×<Ùæ¿Ñ—J]Ú …”;<¬³ú:‹‡Âº!94ŽGôÉê¶Š¼Ö!r‚jurª±ùL£´¶dž^Œ0ÓbpýçO@5\Ü]ÿR1Ao Ï¬²Ö?ˆxˆ©òw@ƒ†{äè³ÍÛl·¯I”狃zLÌXšA™éÑ=Ðß-2½Ë`v²1ú¿ÊĈ(5AÊÇ)öÓ#¹ÛUú¬žnTââb“M–“¤ÉˆÀõÐÁ¾UJf`¸öý‚ïma>µyW`,&Ø&„¤É¡)ל}›¯ R_#Š@Ò²Ñÿ¦h<`DFë"¨B!¦:>cÁ- Á#ÿùé<„ò!›¤<½Ðò¡²iT§íàçåý|±LV ŒÒžð2²7]›boô 3Dh7(ÝÏFõÚéª)6 ŠÓ)é™2™ÖŽ]°“/m¯Š £Ôºè8\À~#_ÍæeËMEÁ±Ø+ݯzIê¦{Ù’¾û5N©Ê@Õ©)Šš²*Zé2J¤gjd–޿½ä¦åÒñ‡_òê ‚šóû*!Ù‚šJ?ä7Û]YÅ• £e²é!É,2õÂ]÷¯‘Š\¬\¯+σïBèA¹B`qQåVò€^2ò¤Ë}Y­ã r¦Iüö«(¶»þ%…W¾£THrªBþö«xÜÃÌ:-·pn‘ŽíL^n À›íÇSnjxç7J;£¥ºØÉ[á.Œ¤L.þ= Ö?OsQ²i ¦à'tqÝö’y^•8¿‰Sdñ1[ì ¿vŒ> Ûõ|C?¤Ve úÔ¿"WUÞu£›Ÿ““ªvfù1ÔMJh‹Èö!¨©.ñsP>„ìú64¹rr=2iP׺\õ)Y6·ä¿m«Oç:õä8½øÔÎXµÀdk…Ô8¥‡¼ÚãÕR6[1MT ×D‹ï«bç_˜„Z-uPiY·j…îÔpë:Úb‹Q(·rÀyxÊ¢¢ÆêVy„Z5qPcG–[}úmßôñÖªfd<# ý9¯a&&ƒ¤DéV¹Íjò Þg2'[ÁÛœ#f 6›Ðl¤ûU7Ë®© Ì%F­ÎÂvñ´4¿:G9e'Ýae*U¥¦ (*vÿ#N!d‚É_»Š†Oމ¤L(þ= ö%^ì‹"ö%F,6ŒãÀŸªPËðko 2¸®Štß±@Ü7Êà¡ZÄ!¸?°NÁENÄÅíéid»Èàˆ‰v}üÞ 'f:Ù/¿púOü6—BOU( ZžŠe9“d´L:ý1(¹ªâ‹G’ ùì÷€Š1ûBúžPx?/ª’µ;\€.cw¼L&ªÌLõ+ÝïÖp{j¹‡ˆ{qû: U¨§ ¨ëh`¡]ÁÞWBƒZ]œL¹+klå}ڕߣ•K©U¦ùÕ‘Éx¹–/@ÆU«ÉDUš©~¥/ù¶Šþ&pbª„ÿ²…g1;r™¶7ežý‚Lóû–«‘êùüØÍãDÂ%@ÔCø›'ñj’tTüíªìL KU¹Çƒäì=å£0e°ÐY½D+aôzIÑWiÀ‰íŠJSAt/ÄÆ­Ep”É Ðíì6qÌ€2æõ<ì¨æ!Ž<¶Éh{Mib6³2ðŒî®”„y³Áfç ¨,fÐI ÑŠùŽSn.aÔˆ“j8 óµ°;¯ó‹ ?Ø?š”Éæ¡ËtÙ¡ŽN=G¹‰ùO‚#¥ßá»êŠNô*ú'™.BÓL¨§®âd$tÔV4Ó}Vœ^©±¶"šªnNy-Iœ ‡Gï°vîÓ«é%œº‹¯p¥UâõŸR–j¼þ.™â³…ŽåŽø§©â2¦Ü­ß¥ÉðXÖeú,kúI~Wf)É’©f x¼AÀŸpuX­6?E³ؼƒ·càãìÐH}ßuM4íî ¤JgLÌ7~ “ë~ÚÇv;)%ä¾mɲúw$Ö8Б¾Þõ;7 ÓëöhÕݪ-wý¹J€K“ÊYÊ…Ç{~X¥:#Qr q.õRš•ö”ÂÖ¢ÒvÉ}ÐQÌN×ý˜Ï¶á¼¯*W¢R™ÑŽý.wþ¨9„Côñðì›Ä¸ïd™xÒ%FŸò#¼ÿ‡}þãÀé^ÿ.\Rjä•€ÐE€ã§~&4UrÄM¡ûq Ô.@\âÈË1>û£j^û@S®!Þ±Ø?¥îÐïÂWÖü‰ÑÞþ¦2v Ô}5thèäœ^\2»•«¼RïOOºEÌwçE={¹áŒv³|þ&„Šƒ' à9=p*Ó pˆq¾^|iø»äo¶6¥"#Þë:E〿ñn|[ÎHÊõk{ýû"Ùåe›P§' ¤Ä´¼Å©rùøxj´¹Åy|Ìòê9}Óp¦Œórþþ}6¹ú2ùë‚J$„}ñ½?F$gE™Ó›ëûÙ_î©P;µ³Öp" ´ŠPd%+g ³AR(.y.û§$Mˆ(ÙÄU¤€»‘ÕHƒ‘|Û°Ú¿^(ûê뺣cbR•Ë6‡¹){2{kVE^gùjÕìë>&‰“¯$3'=%K‘,edF”¯$4ã>–”Êœ,_b[Êwlô{Æ{Äö &Ù£Eúfµ9ÆfG|™ÑÔñ5¨ïdÜYÊeY5«¯dÀoÚ|SŒ¨jŸËl¤K»²5Q4äN[ä=|Óº¾m^²œÈû>_=‘ø'yÉ‚qšj®‡°)®Xmº*Ú¾|,W"vècUÞ@ÛVH‡º¬)qDe*¬ÝEÎW4Ñß…W ]Ùªñ±åêÒž‚pvk«]$!°g/¯ãCœù¡& †úRá†:mÕì×g—¥[â‡cf18~pQѳ4R?’­ël=„1¶@צTC—"gD ½D®î"„éì–øÇ§×5Ä9 ©U7ÂÒÐ0d›êÔºM€©0FWhÐÀjÔg àrœä8gÙã̺mv„g dÉ™Rx@ÓL5Ý ÈÕRfÄæÇ²-žóª=Æ@âtCƒ&kDÃá|ÝEÛ«Øä~“œƒƒ^¡£¬ .³C„^çÉ À3MÕР€ån|+VxC•ÎHÓr7Ø– ‰h fÇ{F‘Ìo;Õæ‹(h¯hÕ@k~e£Ü-٬ױ¦Û³Ûvw“6k? =GWåq‡*Z‹ªë³ÃÀ^na?¶R®@CE¢¡Ž'¥ŒSÉmÅÈ>7Â?{Eœ]L©¯xCÝÊ2ÒÙ¡”úLü N,|{™W°ÿߎn—:w jñ½nN<ÔNm©#¬æ„3[;²ýž`¬¿=ÿ7ØêlçŽv0¾LBíÞ[(Îöïh/Iô™J/¾YøÍuU¸sýÄoàõ˯ÅK`Õ8+ÛW[ ÝRª¡Þ©ÈQØ”«»a:»%þ®÷º†8{™Zu#, õ+ÛTg‡Rë6vjatåoã§8ȨR jšBƘ­¶C¼NCF6Îh;ü óµÍp6MYiÑV†š¥i¦³QÊ:M¼€ÎT u¾ëžšñçÇ‚1T­Œn°‰ª²F¶`|ah¯bÒ@k}}‹Ü V«ÎQF®ÃjwãÕj<xzÉtOdr0¾õÚlN›‘l°é*‚ìµ;™»$ˆ½ébÛH-®à TŠS Ì·%£â€îÝgð`ìóÍèV<‚&$C̓KQƄŅ}d3‰„îo ¯‚Ü9f‰š‰µ+Ôk ܃”¨·Äæd»ÇUÖ°9¾*2Ïp Pä¡D?t? cfJ}U °Ôƒetï`lVF©†úˆ"gD¡3·›‹¦³[âï2¯kˆ³ï¨U7ÂÒP²Muv"µn“`Çƶ¨Á*½††">ÊC¡w‚;ÞÃF£UÍWõ~—výµÄÉ® 8?±(-?©§ÇŸ¦·É¿þñ_’N~&ÿgLf}ªàf’‡Ü²Ý˜!G'äÉç«É5ì$åÉŠš^Vk*áÍOì ܶXáåÑ*Fzä›j\LÊÄ\ò„ä ˆ¢._bÀ÷ØËÅ“ê\À,ç¿Å”c fÏ&뛌=7Ö³…`Pœ´oR&är¾¸½šü5›Ü}Xd÷7Ùâþòæá^¨ì¾–DÜ:{jº¾;R#“‘R\áâ×ùííì2ûx³¸—ñN\8qOA¿y«È—ØÝÛœ¹pË ·ËëMÃ^"nÇJ¦sØCã¢õªäÚ›wyr‰y )¯ª\±À*_o³ÆÕ®ß/‡‘8iÈKEž@£³¨I$ⓞ‹¦"²{SVdðn:÷¥cøÊ]¿¯#°©t*.L×1a’Šg~›”º }[Òô‹d?k×6»p©ŠgéyªŠÒà]Âx Æ “&™ L¡ ˆ†ñ%v¨ËU I¦"É ’¢ºžO‡al»ŒŒ»† b2(Û.åŒBŒpVøëÀõ›yCÄøÛR„7‚'{ Ø8+¢ƒè€¬ƒ’yÊ’|Xè-Ö Ú£D¯¦”Þ‚U­ñ ;Â:ÊN/Ñ^¬ëÇaCD>Ã[? Xõ£6¤±™ì ½êòÈS:¶DaWnwU`˜Õ‰¸jš(õÓßbÎ=ÕÎóþH&ÉÔw>9x¡ŽÄe›¯‹"ï^Bh :ˆ§+˜x’Ï!ë¿Ç]#CJ‡ü-î á/åRÎ&Cd!ù¿ÿŸ5ÅcYTkÒ›l_÷eZw1¤cš! -áM)ï]Ñ·/ôKÛçÝ×óÈ2!X—ØË˜9L´Vð¬ÓJš÷踦b& üM·èšdÒ!H"q•=¶ùïR)™!8bºÒ¬R.†¿Ç‚b.o¦Ùû»É‡O³ëûìöêáÃü:»ÜÅœ¡;9ê"K‹ûCãf衯%Lƒµh@Íê+©¶ó¯µPnÌ" uG/«T¥Ív×tÅEªk Y©Œ$¦0¨Ÿ¶í¾êK¼žeÓ20ê|Ž„,cJE¸Ñò½šÇÆAMؾЧy\´¡éœv…ŸywPh¼«ä*RšÁ^Ué< €ûyn‘Ï€˜ª97Ïß¼‡‘ û˜TKKHÕLS"¶«8L<”Bߦr±S¤dè-ÉÐÂN(Ø–Œ ÙF< ì NDúÚ¹YqF ‡0ºðLb dºŠL0…K Hq'†¥Â4K|\¼UÎfT}´×£Jî3Àåçhò±)ĵ¨¹ÿ›GÇɈez }ä ;"úŠzª>j>‡¶âH#¢ Ô ÐQŒŽñM×]5›Ðm›PÓ†nLCÝWÍV ìPPýàþB/Á6_=‘^ë ŠÇÇY‘ýFçÓ°°4%4žN̦wˆãKRô²ÃÊÂ÷Cc[»ƒ^ÃÆwO-^e $ŒÚÄ9â:'0í,U!ÚQ UD•A¬#÷0\…Ä™Â%Ô=çí6Ûb¿?ñ%£"/¬§ ÑQV ‡ëÞµû:J¹J¨iÇ C=¦¡þIUA.Òíhl 7{>:ñÏ…˜µ‘G£ÔðÐMtŒA4C N>j3)¯>զǔ–B¨#… ³¬ðc@ÉËø£ÑŒZRt7³¨uëêh’m §iM{Uíi´r]À¸ñ¹œ±œönlæ,”ô”ïÈC¨·KsLètœÑé-CGñ©Ím ŒxÃW£.*Þ¼5¬Š1jÚ>…—íúḚ»GV]üh³‚ £u ÄÆ28¶h¹†Ëuäo1jeëêDâP[cGçæÂäø@):\bÑ£.k»É¹Ïõ˜ª»TçþØ<åÉœÅ[„=;|‡¾L¸£«n=ýõ—}‘µMÓgû¶¿Ëì)°Ãë;°»¶˜ßϲ»››ûìáîêBÓG#»œLTGcÉ€ÎØÍ›ÜÏo®L»PG”ô³ê\!%/•Ȧuñ,N±ÅkóYŸ5m–·mþB¦/®Ðú¡JïÓ¦MQ@*ˆà|tBˆ‘K`$—I0LËsëäËS¹z’¹ ±;‡YÒFv_7¤·ómÉánâ¤eÀI^*óDWÑY肤‰ƒ‘'ÿ"Ÿ§S‡"ƒ×L2 Ú>ˆ#Û/—’‚ú¼"H¹|¸½šO'¤!ÿuòé*»œOï³_g½`Ÿ=ß—VÙe/Á‹!³è™Zš¬|h¿Fm†2ØÅ™Qe£ Ó&™¿<z%'ÿó&ÿëý™Ìb»æ§ä‰Œ!d¸ÀcÈ]ƒ/žJ^8¢bøÄóìYF²ƒ©U_®"Ž Ú‚?ÿ.av)c¿äzH ]`ÕѬ— H8Ø]¤Š*’•Òƒ¼!j ·z<‡N5“/ ¯I.ß%ÈÐ)àú*š 4õ• «¯TG&ø÷÷W؇ódS’F°p(ëßÖMÔ± ¡cšÉ_âX†üMÍ/àÓòøBO›ÐS&™ìû§¦-+.ð8ë!À¹BªÞX7W%æ9ðwÇcŽÒ {3±Xýœ‘B¾Ÿ»áó?!°ú9%)d 1=œ%ß$¹úiž,Ép^â†êg—Š~b‘q¸§;@åZ@ ï%rJkÂñi;ˆ*õ°¡Ȳ”‚° uÒu lïP+­apöŽ¡Û,ÔJ0Ñ•ŒƒSl.Lza)GýÊIÂï<ÃÑ¡¤J»MlÛé6žë6޶Ómb«lO>‹UŽžkhLï&‹Ý€“t€ ‡ö#aZ ëuQª­®Û[]·ñµºnãku¼ì]Éí©ÊÇbõ²"Ö<‘/iTù;YtsI $fè´/$û.’f;•0DàÉç!KòÅøc»êTo{ýë %Ùi‰ªéÉô®h±ôkóŒvx&è¶*@.¹vE±&ö³S2ŒÂO¾dðþÔlúóŸ©þ}דo,™ ÈÏùKd/·Øœ}‰S¥ŒÊîÿN9ÃÍ’³$Œ¥S[⮳[c¿§1ʘá®ÂÖºG“!s•¡Å]Çɰ3ÈèŠ 9PšŸ8s™he.ŠS:›Za†‚R©é©<¤Bzq2›ß&u¶¬º ‡Ì#•›Mû(ÝJ-†C-¹ŠÍ Hi|¢œ]IeLá¸`èE¢¸ t¨ª¨òVŠDãDíI¾^·E×±ÅAQ-c[¡tWNµt´ F=ܵ°,À+âñŽñPû˜¡ùHˆVûy=„j+ãå;ŒÚÓÊtØj+ãežèJÎdKµŒ*ëjé„\-Ír®–Ê,¤ã›†3/°Í#hgWï’. :ºcV¤ô˜ nø™?µž¬Ÿkq‚€åtõŽu:v‰ ”îÖW;–¨œ:<á]ÏUwµªêÈ5ë 4«cœ™Ú!êà"Ö,r/\µCÔê"V*9ц˜‚uÔ‹Ó¼ðÚìðU x*i‡ÆÏ{&êGºUÿ@0â½X|´”6UDH]íãZ'¥u6êˆoµPÉ.Å®Xí[xF˜=m¥£¥øŒfS}-ˆJ{UÊ8ÜÝf-äJ«UJ>1•nP\q»ñš…ÌæÔK" ø|;5P vÞF#[¦ wV<ϵۧÆ..9È+åÒ}2R³•¾P¥•êEa»­ºLPš«^‰Cñ‰ÆEW€¸£ØÕÑ÷Ÿ¹{.|ã ¢ÓHÕJÈFbmbÒàp´Ï@>¾åÀæhóÊx•'&f¥·¢†-QÆ#*¥CñylŒ®/~G%harÙ¾©—6ù²~/iH …BÐé4‡nŽ‘¨‹0=鮐ۢá‘åè зyÝ•ý¸cÚ&%òÒº„„+–q9O%M‰cÍYàïyŸ Fä{øŒHIÝGŽa@é,^’a\œ:¶ƒhÅg¨:“YÍ焤ŒD¢‡aºÇ§2ôˆRMt%Ç‚)J:½Í^Í·Ï™VáiÈF½rÍ!^ÃØætªrØ­²õÓj—Ñ}øØögp¹ë}·J(¥DŽvé2\¦@ÍN :plÕKÖêÌ–X­ùw3Dm뮚‹7ÔÓü–ªýÁU³‰ÔùŠblu†ìóW¢êèòãô6¹¡i´Ä|´ënß8/EnÌ®!‘úZÃÁÀWñÏOy¾Ñmñm_t}±6ðCÈÊÍs”‰¹n!ÍNI¶i dt¸ËÒ$7uõBOÝ0t”â>ƒRx\®øÑB°x;˜ˆéå'4~ã2ÇÎi:¾nd¯°Cþ¶èŸšuw1„çl¸Æ‡ßÃctЫ)Ò:ÿ¸à2Ïô:L<@Îhü¨Š4ÊS]s8ì.´€}2¾[µ·=AÿuvÎ5<°–F÷µVCù‰H]þu€Í\”xØã6,0Úµ¨‰ÄVzºi±ÅïÃmºgp÷èu¾ªF´Z$÷6Èu·[Á7\hÜëc2½Âò’\øœŒ×Õz_®Ñ‚eñGØáoæ!F#–õ’8ŸÅÄèÊðÂwT¹ÎaC°ŠIAÑt•7¹šIïw”wIñ|çh·\'×¹XþG|ñ<Ïl—»üþfYý£õžjQv[¦w¸Î»A½VÁŒ­êµþ V¿ÿõäÞØ¦žbÌä¨ýí¯ðLù9Wx›…À´>¬†Î:;Æ9ñ™-¾ˆšµ›Õ0ÜlÙ…9M—J¶(¶°}pí"¦pæk@[å¡lû}^%»¶<ÀGïXɶ¹+ñ „:È0¡@švhN?C?%ùjUìúŸØÆ:ÄmÂnôйe€ÉNÜ&.,A ²xC ;¾×ìkµŒÀݵTnϰuËð‡‡*”3awõº×†ntD­fâÌòwH‡]F§Ôj-qƒ8Õè–tâ‚…9ˆop*—·âˆ…Ip6ᯠÖß±ƒ·²œÝIá+oÊ`µá,˜]½æõ ÝD­ˆ(küÃ6Çèj%Ng0uDŠᬵÑë BÍý0j»ó0´‰xðmw¢v9PßNÛaÌng¨«i¿ N£Uâ6;ƒ›‡ÁÍ΃µÙyˆÛ쌱,¶ð}°í"Ü¡¿N>3PÖö°sÚ Ôþ±óœns®ár˜Se™`ÛnÄYv§³á¾L³Ýî¢N¨ÍJÄo¶Ûy-•žjXlÑûPÛ®…C!Ùåã‹ö¸A0eýˆˆžñ“®{nÚðE±ÄöŒoœÐL Ê„(7ð9ÀhÅc¾¯ú$_oËb„ç=™ Z˜!Á§ŒXCTAõNQ—å=;šÌÙ”r—ЉW!WŸ ‰È Vðj×#‚`ÓJJž CIfK4<äO‹«7÷W‹DÉWžLšÕ}»'TS…{Ác¸þ0›.~L&·sŠŸ¨ c×èÜ4]ÃL“ŒKZâ:–"£¡eX¬Âú%ÔMÒT½ä§véŠ]÷ŠˆÏw,}Ò»¦+I3+Y-ò ´1CwçÄ  x¸ZcèîìÀ»ð"» ¿"MJ>AoEèÈ"ÆêH`úX}F\bp6Ê3Œ×58;‹ÁÙ(çÄV:Ú’ØÂõÁ´‹4ò: G¥‚‚wb‚ˆ" U,øvi÷µ­s ½d@&q´ãžÅäl}:Ý;2hTg^u «¤€ÕYŽ@mv×­ô$W…DÛäîW~£”îåª¯Ä èh£GVRÀoÕÐÀ‘ \oŠ>`%èõ¼üD3ßPZÿN9ý‰:º‚ÿä¹}]17Ï0TEÌÁÍBÄg0(Åp¹HuP4K”Æ Þ¥jjüHo›¶àÈ:õï•~žËEiàRŸçÒȵ¯8°Rï…0vå’ã¸"†+›PC¥K 1;1‡ñØ}P¼f¡áè fkØ"§°9.þËßÏcxù.C/èÍÔÄõ†žAìTíPÓ‘™èê)¾Qz)þÖúMÒúKîW J¤õ-/®µ8ˆ- V«Q™Žh9”]ÅúJ-ˆámE~\§µ&ưÊàóÇnZK›ú²Áb¾†ŒCáòü¶'Ÿ –| ^Œ%Æì/êUû²ƒÊy,­bQ‚`åË‘!k*XSÊ:£édMÇÒ“÷~QñòƒrôjŸñK¤Ðã`†ŠÉÄ" ÇôX±‚l=åŠÌɸ˜ña/W!\ïNèQñ)CÑr! K¹JñgÊIR.sv7Ÿf³éôj÷–1_k¸(þ–/—E»ÎPÇ ñJ¦šå¤# D%×®U@=Xã4¸ÀÂͺ%¯ž¢–ú µÝze¦Ñ— .ýµ±ð³¿™äPöEÜÊODªõ·WÊû Yâa}Òmï›fM$¶ÒÓM‹-~n»ÐÕŒ®÷ŠÙ"é58»¼Í·lÈEÄ-òÙpÇÀ/Ê6Ç>mت¸ëÒ~Ûëú´ƒÙ\»ËÀLGÇUƒƒÉž­z+@¢îR«m™ÄòP 4§+ò–ÌtØÃæ˜] ^JÀß8×±jÌŽ ZšÏ×oTy“/‹ Ÿk39ÆÁeªÐ¤VP]·ŒáS…#šŠcžA@g5BÓ7Äï®®h]ÃýbÔw×fât®2Y…˼gÞ¶QVZxÉB #ÄéJ™°Ew…ÁÙÆX¾³“¼'‡DöÂ9 |³{ünè•bVO”aîŽá¶LéfÍ%NçµzDu Øã¬$5¬µÍZ eáÒ&”H¬— ñ±á­‰¾éQL©Ç·Fôb’ Úh!n1i•‡hú¼ÝÄ9Jbg£yöà ðh!ôžñu?šË'„9ÿ]’¿»®Y•9ìoÀ1¶ 6:œÉ2ÜÎÅè)Wï ›”âÃr6ôæÐö{€WF5»z"-sl>Ó”±Í®»ÄäL†ª°Aƒ<Õ¤÷[}ZOÿð“Þµí9€Ý[OêÙžÆuÎŽ=جâÔ`SlDVó±Ã~ž`Zdx€[Åîl&peVCwQl—Åz­> ‡‚leEŠ;k›¡ÝhãILJÍÀqÉâµY8Sd’IA§TòŒ“%ŸØ>ìTÞR²d^'w î]oWY×7-1ç¬'ÛUÊÄelW„¨Ã ƒØÖhJ?Ôß3x? Š.°õé¡–:Hn ïŽa®h&›æpMQ±±„åÃ|éÓ4ù|ý—‹¢Æ+ ïsRJ†ÿæotÒ_¨•³õ i´Å»Ä^È,¶ˆaè5K81‡i6h8¡jN¿.–ûMFæ‚{¸HñÔ4òf†RÌ™˜ä$Ãl …?y4Söä,™k®Ñ‹ŽäÁ¶:Šž‰ÅÆó°=ÏÕ¡Z¤ˆí*]yФ ¼a>êa¦ „ˆÙõäÝÕ,»Ÿ,~Í.gï>|˜Ýqe‡¼íÜV@Ž&Izü¥!‡±&_ÙÏGs4O CcbÙoKp¸q‚ƒüŽþ¾5³½1ç±4db)¹úžàM¦˜æ\UË|õµóI§Ù–Î%”ð$»TbNÕMùŒeBÇfþÓ-Ü‚=ÒE¾©@2r2ÅRóÔ÷»|Wºu°LCgaÒùOK´çQl.Üx[ˆ—l¢d’¥¤"ßH2¨:5ÐSQ ‹:Òÿ¬öxŸÕ¶ïYíô¿_¸üüö#l‚è·»×ö¼"IðXàË#àÛõ’÷Ò£¨ðð<›à†çç»ñF*ÏwÑè½æÓ‰Üù0£Nþ×gÑJ,ü ãEþ˜˜ÅÞºõ[À¬÷®ÞžaByÜJÃ-¥ÌÒ»\~ºýøn•П$ž| Mf™6»ÌîSLTÄAƒR4xYQ œß±O⡈,d®¶lÒ›Ó)k±8à±8M'ße$t‹J:Xx'>&—ÐÕ I\õzWà:˜#¢"¾:%A) ™Ë ÊPjó-¬wÐêñ‘¾·›'o?¯Ø¥^\›Éx!SDUd,HGƾª™‘è °’ïÄûãÐÛ{”§Þå™ÍGûe*=©‹s’U•é÷Gßù÷GÓü#2ÿˆLÁû´ FÍ=ÿh˜‰œNÅ?âw©ðhùþ·ŽùÈ4-ÿè77þˆOŽ?NfÇ]Óãn/ùM«yh˜—ó%þõÝêŠ ÝÞÁJzU½GÉ?ÞÓ ¶y…GÃÄÂ#2³0.s±ÿî!92"¯T.ñhŸúãðLÉQR{ctô'‹ŠŽÚØIÃŽeË· DÉí¦šÝûœ¨Ÿ”þ©!MK½_Ž7µ˜Öûù|€ƒ’²ª§Õùr1ƒIZŸ ù»"tïóiÝ®ÀÈv޹EfŒ‹|»Óô§ÜÞ‘ÈC±#ãÅ6ïÈ8e˦\átŒQš¶¨éåÊpM˜8øØý0¾pBÔù®ê’ ¾ºWEYžOu7Üñîêí7'~Ih$eð›ï‹‚‘”XeHètª¸ØŸ­˜@÷Øö`ç8H°˜wW7ALÙBâ®èù컺õ¡S¹ï3IOq)7ÀMÔØâ]l¼®Û¾`éß ŒüêfYÍ• ωq‚Íȸ$$ãÝ0©¾&Ù VÈýÁU§xÑTˆbΜT7(1>·B Z;.Hg§$÷õæŸël·#%°sÃÄ%248åÁ E‘g‡Þº„Y¶éƒ4§Swlî(!ù¶·/š¦®ËŸ|«âà<ÎCtàüA@}sKZJRq}á aÌ < ·¶õr }ž4ŠO`k N•¼­Ô×"‹ð?ì}ÑøE' I|UÀ‰·’on;W®mH:Íýlš¬Ž„¥¦¡*z¢“’÷Šïá%é>øï¶.‹mÁÐÛlû6"o˜Œ/xU|‚Ÿ#xˆGø î1sc©“01#ßÿîa¡`Û·•8® c)PªÊÊŒto®è8/’€[ÞT¬ÜÀ½· ½ÇAÞ+ÇÄ4,*”]ÕùcÙUÌ®êP4;õìßž¸¯í„…¢ À8 #I Š‘|1Bi½¹ FÉ¥|;ô659Cºø¨![°ô0$[OAŸ¬ØŸL˜Ÿd¬ìC ç»&;ùƒ•¤¬ŠB…Š”þÁ7mr|´Ö¼þô^ƒÕ•ä¿c2Eוä¿#Ž)ËÎ\­>ÒúsµúêÒûºÈÃ’4‚BQÈ@ñþú…ôq„ºS²½?®QEQTä;Ûæ&·‘ùF©è‡á‘½v}Ȫګ­ÄäQÌn€ Aùo—ŸØ<~*þ`·t©‚ù&P¾± É78”\y&~Š-Òî\X·d°ÂÏÖuKì%¡ÛÖ×ëö _¯·ÇœÍ1åûk¨0ÈrþÌZÚ×)±Û¨@J­ ·˜ÂQ½¢ì‚@B š€u³n@5ìe|›|MŸŠÖWÌ<6þpXƒ9¸ÉSaîš…'¿ÞÕÉϤ1fá''ãÿáVaû¥Â¯¸ø7üîNø‡a‚®Kò{ºNÖ׆}¯ÑÅ£µå8Åß’m:­9DjÍýŠŒÈëR\<‹sZÉW>ƒÚ qñ} ãäŠß>±?b¢¦"{%±qSæè©Án˜áØNpHû‚¨”O|îuôJQ0ŒŸ†ÃXÊWšbHÈ% a7j³–„à ýãRHÓ1è£$ ¹†ÿ¢¦ ÿè—€¢ÍFÓO@|®äð½Sï46|St3ÓNcޏîü¦ŸQY)ƺ›L<«*Ê.4v¦„L-&….é ô¤®(ÊáØ‡J“šxNƒèØ'†ôC“ P‰ñÆ%ѵ!ÞÿïÿúßÜë_V´KNÿ~Ÿõùȱê‹û¢=wëc~†»2Š­I£žÆRÈ¥ƒÜ„æÔ~ê,Î(ÆrƒÖ0¦ª–‰§2YŠÑ›Êñ’„ÿ áÓNj(»ßÏY ¿ªP‚EÇQÐLs”јJsÓQdú@žšš‰¥3s )-cK¥ôT&;ÒæÇФ¦1”žèdb†CCþQ›vÅ¡Ê`Ô²³X-3UuËdF#:6ÕñUµHš´ e))™I‚#Ý:¬µ"ÈL2ˆÍ!Xe§<˜ ¤d&B6‚n!¸H.maWYXÝãÐ6óisMd2kñ@KÁFÖKçþ×çÈQzÑ7êiÄ9Æ]§<5¥×¾ŠDòõÑ–ª‘tÛc~ŠbªhZ¹2I[&d绢2s‡ôwmªvΆ~/jPÏÒ*k!ÆÚg&ª²Òöe) òÀƒ©+mäHà ÍŒ¸œNXÙ• =¹ÉÏ·zAÅuTÌD&•dtðš‰I£G—YPó„»dó”¼ýxËîÍ O]×s­ÙL–?OD aÚ¤D*eR(WÙŒô&s’QZûÉ›–Œ¼éº5œ-Êl² Ï+ó‘Ý(N…Q_±{ËÄ­Ãi¶ûŒ?Ã9<Ð$EÖÅù±Ë«®€>jÿâÈ©êIIÌàJIBöe——û4lJRè)¸V–-a+°Ýä,[±›xÙ–EÏÕŽ9J”’¼.Ãuëí*E|ê"Œ¹†…h…I8¡n»(è½Dƒ÷5deþ^8ëLÑ{ ¸ãT<Ê “cÆbÈ±êØ’ƒ¸_Žÿò¢kÕÕ˜ YqYÿ¥;7©'é畸ʎ¯—D³™©0i™˜f*&f\ìbg,òj×Ô] £¸Co\s°sµëªŒ…lÊeS&«ó6˜ÔØ ©a¨Ä¥bFL“ig’Ÿº8OàF.‘”R¢äô‰æ$JõŠ9æS#u)úŸÆ½¾+Ö"¾x÷iõ2ºŠ|Qïµù¡ ÑÒäSµïK“ÉÏÊ&R0äç ‹×eÙdm]ñ…ùØÑß\HåäPv8ÑPU™ŒZ3)¿KU^A-±KÛáSm4ëªÄbsÄcŸCGLÄW’?‡o^~pÐ\ÁÓQaü¦{Ãbœ_ºÇŒÚu¡aîp_'ŠIª•KEq ù}.îÍ6õ¹³ôq£PаŸü`´4ˆ\J¬¹ý4«›Ñ²ßÍíýO“å·à8ëwHÇWÝEzrXÇisƒX|ì'guâ¼ÅÝ‹±‹ç”Ý›eÒöÐ6ÙWÒ²ð)+1°¥[ÔZ€C;/r.n–D›KíÜé刎ۄ=M‰`ÊÍ4GcÆ•u&‘ GÓÞBg– ïÈÈx}ʓ֠mp—NA:%ÒF/èfõÕ<œ¬>_ÞþüPM¤Èð‘ÞÈ_€ ¢êÈ«²Fêª2”•Cc)ÃEÌà¶§Àzêm½ÒMdá†f&hd*Ã*,‘õ}fÙœ7$Ã&$´›Ã•-Gl³p®š¦…+[ÂØfV®ÂœÆ•~N®.çsŒJP]ÕÉÒ•¤ƒA”çÜÔŒÚÐ1U´°tmߌi çîÑ wÓ¥ÓPzšž‘ëfÙjœÁ”VéÀeË,`&½¨ä+}“¯ôH¾RK¾K&Éqí#ªlãI²ª³}TN“ôϼ‹Lùõ}ÜŒöDÏÀšÈ¹úA£)ëÝÝÇÙýŸû¢ ]A’U ¬¨ˆ‘ µ-ÝK¯ÂÄó ]8’U̼,KF4Ô¶^´¯pZnVVR§‘½¬‚o¥ÌÆIÆÆÅIåÍ *‡6¦0ÉZfRTÊÆŒ ø•ª™³ ,²ˆâ%kY™Ú ð+gË0"êÅÓEc¹0»r>ÜÔ°œº³‡¢Üm³v·Þÿ¾«¢¦5- ¬…F ®)N̼ä~iï«_ß~ù”üÆe“ë¿¿ýˆº~_äå΋‡AI%C„D3A…tFº|íŸH%48´ìƒù]Ñ} 9c…ëLiŒáL•fbz0½äºPl9d$¼jù§ä—.‡Ý(I†¹;È™'x ‚CN¤ÌžÚ­“–4G¤{œmáz|°&Å’tàRpMÿÔä±¾ ™í6(¼g˜åÖðGÊxñÅÝAŽ>x˜1¦:Sj’ ÆL Ö2¤* ¼¬+ÏAýšïmÚS¢ª´¥, fÙûRYPöšM=4ÛZÕä-Y7Ìî§c}1•yäpoÕëY©ÿ:(õ_û¦þëï’ú¯ç¥þë°Ôíú¯¿_êÏJü ´÷Múï’òëš´zm±ËçñÇ­¸!´¼=¢EÃvþòoJ?á™|4«”˜Ìx{É·ÔL"RýôLågžoÂ\âí‰g¯>g:QvMm*é*#²9¼Ê¸*ëónÏY•…Í„•¹o5Fà¨#–tJT °Úðs‹«4àQ¨Ž9H…ƒùD :y Ñ‹Ž ÿg¹l†§äçü.Áž=ïŸOçÆfðĵ7۩Δ&‘I¹ ÆO2¡ƒ»§”ápF>rÑ|ó 0`~ÿËMÙS~‚Õ¦5%̤,U€bfR²ÐdsŽØD+YçÓË¡ùצm¤Êçª-¹5+·uJÙå.ˆŸàÑE’÷dí¦kœå˜›ÆÕ.!¥s}¡yب:å ¢)µäæ©ÁI–>59#QåˆBSÖ¬k§mIcÄä4¡—aÊÖÅРocy•ÃÅÈPÏè‡vOùgμÑx³&ûU:œî¨OwÂ;ÄùN¥ÇM§ƒd:˜N…ék&;cÞÆ\×{]ÝS›”õö˜µ~QPcd)ÐSQVæ×¶À‡„}x(v‡¼Ÿuo žÅ%y$„ª‚Râ"R-À¨Ìžês!EåÃ$ tX Ì†Y€LH=‚ª t 5‡j@&$>-Á¨òÜêŠ(àl@ÀÄÂ&ôÃ<úc~ â!+ <¨€ “yÐó®§£ïö´köRüêH¿SZf=•K™\Jå&즦зîØcö1OOcˆäèIÑÍP#¸·®Éúc8·‰ΊY¹†4n—ç¾®êS}î’)½¸\½L@|aú¦ÄBWSÂÉÒý€¯ª0¢'¢ú„ßœG¯xL›ý.¨4Jò(37‚ ¬Ôý|ý6{ tr3p w<äCùÐX!äƒ~jóç÷·qÇþthÉG5Q"cOÜRþUsú~s8§À]Ñ…”äQZn AzaX¥7«8àp}é±Uz] ¥·íP!ÁˆFfЋ#4\¿T9M´PJ£”Ó(`¿³õ¾¬¢ØÉšv†)HºXRs¦ëï©…¹L£HzñsPÓX±à¹)XwÍ>([Ê (*`àBð|øeu{O ¿ ¾½>wÈü¨ ŠÞpÿ¾jKÑ×G‰ œ“›’•v§ÃB„Ú|_<†ó=œ•³ŽódSè» 4|NOAŠ!’£'E7Cô…ÙÛ"¨£ÚÖŽj[˜:ªí䞟¯7·Ñ}g°¦ &ØÈ앤<…;ão'ga^×”pìå̘ÂÖX&ä{d šRÄTP6¦)EÅÞìG®) Ó=soƒj4U§ÃDLtX(V…± ¡Ê¦NÎbNÌÍËJ «·–`Õ5Ù‰/àmü®k@UT^£HJDtbª}Ò¦ê ªŸlÊlûíÕñ ‹VÝ3˜Õí.œÛ¨daG„¬ü༲6ÿF®(Á¬‚gõ¨È<‚»ªÛ'ž¬d$H…,i¸‰àÛÏ«Ÿ?¾úòõçñÔè§îè}\ߪj¤)‰ZÈJReFÎ%$éÈ?štÑôíÙ³³dT3’åb¢\”®ô¶úóœ {b/«†TÕŒ¹˜… —0ütóéxü5šcÈûRF5#Gà RSC&Žq÷ÇJöC.º2ªù.½š2ñ‹¼þ nà!hRÓvÃûÄ&‚CýÕ|oŒøÈë¡è·Çõ¶®ú¶.Kbþþëë??†ÝNc°òû•5L+µR¢•þùÑx3}G>ÛF„þôçÄv]§‘ò[`¶œ¨D:5âò¿K†+¹Ý£F2Ù,–t¦œŒÊì¢Åo¡áFè…+'zó÷ÖŠiò[uf{7à†0‡²Ë›øía&£XÓΩ´­†s]PNͺ«êºñûùÙp9tR¡ãö‹…Å=7ï?Ý&ƒÜÒÎ*Ë]ØíŠ^&\®c]mÀâ¨ßFßÏhˆtf5ŽÙðr®DárÎb¹æ”m×ÝSµë “—“ˆ^ zŽšD…·vŸ.¯;¶uUüÁö8,è6Zñ‹XŸ!FÜ£J"ÄÃ[r$–|%Ú­þ˜õôô´hÜ6Oì|üØFÎõÞ¸¥µ*úº›÷æ\÷ÐRõ€œhŠXó2K¸Ør¹ðwòuW÷n¼çzýl¸ÂˆNèë-Û'IèÜפÖêzxÓ3„ÓT§EäR.gb&™ÒÈý²úæÁê„g3*ˆ¥Û¶E`ƒ1Q3Ódb6–Lbz¨¿NxH4µu éX·e#M&œ2a YÅ(¥|Éþ„>Í(@@B.ïfsßåÄT•ÍpÀÔ‚Ë ’†Û’0óÇè)h¾#˜G#} (»è3a7s&§“^,åIáplaLÚ.Ê\ÚÍ™ RÒwüïųþ¹Ù‘usîŽkþw ŒŒŽ`R)h¤üo³3¦æõ¾ IXÈ|?tÄ›»sëMÝå!î¦/$5îÜ!Cè\úý¹ªòÒ{ã¥Sßå€AÞíATsÁC¾áoe3 *ÂÞ÷ȓ뷟ã|²Í+2N.ùNªùâ£6ê.ŽÒoLÍêw˜0Dˆc_ž;zÎvÜ…ðžêጙÛhà*™BA¾_å]ÕàÇbO~ðûÛañæúýêöeÒq!}_`œgHóZ‡Uª î&br ÜWþÆÑèöAº½~·7AïØå —»¾Ÿ&úI²Åîä:Û´Å6aåHµFªüa^ÍÜ–Èa±£eVΤ ¹UÅÝÂ,Q“‹Tƒ†Wpyhd·ÛUA³’<Ê Â t HãðöíçU$î|»àÂÖÃ)¨F5q.B2I+ÅœÆoœ]ïîŽÛæ§5»š9ˆíTç r)“31•LééøáЧa]<ÃH‚žüÜôÌìfr#…®‡…Kõ‚ÈMõpv¤Ð 9=É”ÎB4ƒ` /# |4äˆì¦k Ø3Û`¡3/«Á¶azyãºi‹šî ágTlj®f*ž qã©a:ì]f×N3fóSV”)Œè¡Ô©œ=•eSÈ)C,®Û?wâl…ܽψ'ΰ‘ªÿ!Iþ˜š2ÿ-àå}ÚÙ’_g3Ñ0ýÇ{¿tÆZÛù·Ï³žÀ‰Ìkù#é‡WdØA,ÔçvT·™”qgsáT›<®ÕÜ.“!<Šø¾hºõ6h¤ª $A$Ýš†=Ü€>â¹¹]¥WWk4—öôµùúÜÚl—‡‘Bu ì˜lÊe4U“”ïmÞîa{¢LD`]I…E¼vJ¿¸þ²zÉÏ0M­Ùí­ v{ÓjÝ^_ª»þ™<ãž!¨u-ýøŠ¨Å `¾ÁꯘÎR ¬sÜTõ̹œ$Áh~âAñü:"²©ƒù©zf~\ÎÆ‹ ;ÄxP¿®«a?zèÌ ¢‡ó#r)—3ñ“LaüŸdEˆæª8TÉ—ŠT«Õ——q/݈Xû›y!­êà„û›þ6å&0¢wõ·¼J>ÕØûC…æ•ÍC^ÍørRQT¥K%Ç—œpÒª¹Éû’5i š#éÒÀ#“¼csÊšFL÷ÞÜ&ÙnÇš^äÝKè ¦¸X—ìÛú$×jq ¸£ÑÀ„߯ «ãž³žmo‰NýV̬ÒµpR­˜à7ÌhäÞ}ÇgóãX³6ƒ4Êâ˜Ð3 õ‡ËhÙaâPÔ²–=;âlb!ÌLÙˆ€(VãÆøRºÊiܨS±-tð=²¬ ©ŸÂ ËT gEÄìÅE24¹ú‘ÿß ‹d‘ »õ¹-Ç{ì~ #jÐ6ðíÒAæR~2ÒÖÍNد’_¾~wAÑÛ-gϰLbå‰ GøúÁî†ßÁ¦ãgT¹ìà3Œ>N¢š(7&™rIMÕœÆx<ž}ˆ8Á'ônt~iÇáœw}øa9·ÔBM\9BÕ¬ë,!K˜BZÜ ÕXäH¡Že†¿|äå—É©²©`.²,Ÿ’]¾‡w¢U uÁÍm—o“_o?Ãe^iwÌàÀû·ü)ÖqMSçqó,¸*î8uιh‘Lt{{[¿›=CÚÊMë¾ éé„QÆ4qÆ ™ IaÅ^‰R™d‰%Lú"pv+Œ«¢d¢Iz0pjÌÈÑKÕƒScQ„Ú¼)IúŸºCxýhÐEé²ÖšP7)ž.¦a2춘ͶÌÛžî‰d¬é;Y yæBôÙŸûc,ñsôå|îtÏü]ÜgaÊö#úœ‡ ¹“,КËL;´M·ùFû|^Ë·‘Ê·ž¾È·nÚùöùJ»5ö‘d1.ÞÒþ‡½ÛJÏè°ªédn÷¨æžeÀ•_V]Sü’/ܤþ¶Ù”wäõ^“èŽ}t"Kª.î ê¦RÏ—ÎÅ6‹e*©º˜‚¨›)H=#ÓSàƒ®“ëÉ|dF7é‘£©Ü|ö3ºo=7¿NÛóöתlKïÌd«©»qz›¯›µ0üŒÌ«èZ«ª¼k­ªò©µªê9k-x8*’©¤êb ¢n¦ôyÃçcÚ•÷MìPSQv²¥Â|©Üó1î[¸0 ÊJÝg‘Ä1.þ\'¥:n7(Q<Ÿ7Î}lF5]̉¤›/z>–ù&x¹Ë¬îâ+Äݤ…äâÌù‘’²8}ÆS50ægQ˜¨‘­bpÒ#áçPxhÝnWÁQðŠ ÈÃög`Š(U"˜‚¢Š±é‘ôŠMÀöÛÕÛÏÆ%ã(³£ûëc^6a'PMœ4“L™¤‰µbNŸíå ðÀYLû¾Œ¡9ªY91A"o4$ïî>&}q‚]eì’ù§ñîGu ¬ —„«&ô{Bß~ù4sõ¶ ]‰ï\ëðe»¿‹_ÝA-œFáØ4šÁöNðØ5‘ˆ]oO1G‚'Z8Á“ãHðhF#¸ú$¶k*'>á³|ÞÓvÌ3ÎÕ©¡odž«Àͨ&î"™’&Ï(æØ¯Ÿ?Ý&ã§6ÑHÈß°µ!˜«ªgfÊål<¹ÈÈ’¯ÒKñ ½3SW23´Üš9¹Ñ_K"ýˆÀÉ'U'ÄDLtX¨VXËú@"‰Ð8:ú!¼p]œ þ¼©fRoQê}OåòÛ³¥…üÍ›0†úª9’œ ®ê¿×ÅìÿžüÓQu‘ö»ç`jVs×ÝS“ÃvÍ;›—¼¸«W/ñ{èSÃý°‡Œˆ…Të·û]|c‡¦ƒúd,§„ Ëôä‚ /Ǿ´ÛO4ÜæMèŨ¦™ô i£>Q¼ggµòcÎø»MÛ¬J6ù A_¼Øå iþ‰WJ¶Ç®µÿtpø]\m'6±þê¶nòîãûîÃ<')™Æ7ýýáX¾ÏÉù¡d\<Ì o*¬¨f0ˆØÑ‹è™Ù÷öʦ |a°;³Ø6-É·mX•Ž)šY AM!ƒåÃ!,žd›íŠs̘èm¦Ë¤íc©Yý>éäëåÛ›_† »g&ɺ1D?jÿU>j?L ÌÌ]Tþï¼rçÊûæaõïá ÃÝ*åí1«lŸãx2ü^5‡­íÇ™fŠ´~›ý®¦}¢Í¤àÚ®C›:ö:ÿº…·KâçÖÄÛ0Y^ý㺸·ù³5DÖÚh&'3¨»sµËèÅzp¹é0³ñ,¿M»üœ¼€mëyKOQÃW0úr¦«Š6_7YÑFùJS¶;‹§ ìò–0jh„ <ðئôÑûQŸ©Îð{ÀGRÖ+á|$‰'Þ)"ñ°Ý-èJò(70€ ÀoWW‘;eÿ¨« A¡$â†pnÒpÃ'Zá°MCdpÝ©VÒÿ)ùí˜W¤Y H ¶mszæS}¦]Ûí¸mX<ý*:°L¥"ñg;*‘~oq_ì ÛªcFI8Ä‹t&#Û<·NOÄUÒ)¬»pTÔ¯k!mbÜV*j’oÁd:‘:±ëýyuR|(“MAe859¹•ŽtùTâQœC.V=ÔíS0wMÑL\ÚX œ2 ªËQøo4i™)¢Û'fpr³3p(%3 ”@t:x“_”ógaPÅQQùu;”›nP§ÉšR8ܙ鮘òg<ÑA¨Ž2(Ç1Ø|åU ¸4ÌŸÇ(1€;ÊPì$ ìF²±×E(ä"6“–‰ á¶‰¬©ƒ‡zîI~$}N–<)~B/â Ky`õè¨Í"VÒŒøzð[»YËŸúl㢃 2)“A™Œ&4:ËÛMÞÖ]ÂCgTå. HI¡¡(Ð/y{).ëžoà—Ä1Œ3€É|‹yIŽšŒ95kQDè8NÌbưr£šáš‡4À’4Æ*74³ ŸtÌÙ•Í‘)D´ƒª‚»iÂÃ0ñ5WS7¯ðÒxŠ#'ìþß/·¯åB=oÅŸÚ†âY*þ4&:™Q¥4ké!ˆ¬øÜ­7#EaÃ'1&,Hc¡ÎϨ;þ¼Ë:ÌOM8ȵh#$…tʤÍ]ÌìdÇ–†‰@æ¤RQ. ;ÍBXË (Q*`àFðzZÛL$$#(õÙ6ÛvM’E':±Qå6ëkñ—W—W«ÿ1/¿ÞÃå´!ï}# *'H ¯|ËÊú„h}s;>ïH¢!ãÈœü½§Ö¬·~'Œj¡†ŒeG±t;Ùÿ?5ÄÈ]&Ò×¹œÚ2ŽT[ú±jK'­–wö$R_ó{qkñG¨*èbÚí»O Mây”ý»±6M;m´s‹š£Ô?Ò¿èÝ&ÀAš›gkRÆCÖRÝúvâ oXOµ˜¦NørµF)sº2z’mó¬eÕ9+I ¸ÔǂɃ†y7¨ÕüdS>ÜgÅäbî±ÂâŠu/q7Ýg#Ù³.ÿstrÔM”™¸OBë†õ'©Üx- IJ§¹ˆâíÅÖÁñ™™ý8/m KÛ½ÓöGkÚÂËí£®ŽžÄÅÛ‹­ƒãs0+ô¼ @ž2@Œ|×ç¶¼»ÀÚ4X%á)VİÂw ëímÖ®+ÃNý”¦Ø‰ñÜŸnD?µúHsM‡|³>Ö]¿Þóí·µ8.ÄÎn'KtRÐI©N*tLÜ Q°Ã:«)8Â>žúˆwJÀígF53uü>³©!6ÁÌþŒçB{|ÁTd-3*e#º›l ×ñ–ètÙ¦®¿²ö[0LÛL‹ÎÜ i=Ŭ¡hÒ‰ÊAf¦Øñ<7 6Î`kÏÞ.Q£°9†-]Gºç!Û¯Ù>“2ëü*eTE%ODR¶ÇDt®ªJíC±Ûå?û`ïsÔ#ž`©ÃÊ´Ø—ÞÑv™}‹;¸Ï#¹â:(sÓ¸U3áJâÈ»kx,¢* !§é ä„ŒÜP£—I I‚ôn³]¾9à=?‚F=$ EéehTÞ󛚚ìW'ßé~üaO3„îgѲÔÔL$…˜™£Ð(Ÿ!EÙp³S”|y€Ûªùšn@ÌÇ„É\E¬ ã}3k“Z‹ ‰c&DZÚ®èèj"¿:—}Ѱ($ÙîOÉŠm'ë’}V”ô†$ð[Yg»„” ¬Ú†¯GáÏrn[=ª¹R5²@i xòÙ dâ‹?ü¬Ñ«ü¡ð —³Í,CA=ƒ–‰¢©ß¢›ÑH> $cû,C´ÖÎàv›0~ºž‰!­íAÎÌq0EY¾£Û¡ªço’dyÞ…ÒJ7ÎVoNÉ}(ºÐÊPR13WÕslÑæ% ¼§·Å˜Œ¨Ü;RJ_üv³º}ùd-‰œ¿‹+†5Ç<ÛùWU6剸K½bÐÅ„w F§WfÒTÿÔäpŒ=ßÁuJPÀù3¾sýç?æ.ÊHµÅYm² çb^棒ž«£:Q4±•ÞÏ0e°m#ïiпfôEæ&Ýv|ïÞ6 McTÙHžó½DØâŨ—ØfÁè³³hÜ0³ê¹EÌ­ïá&ïå&вù‡©Å;G}5\Ì•õnr[29L}á\ÌÉõv×Y¢³?|>w ˆÆÏÍý4Ëgš?w %_O y»“÷Àœ(½\uQ?-á¦/:ÉÓG±® s‚®‰Ø´×<ƒ&£oÑBÕZ參‡Ø_Vh;¶¤Gˆ^S3Ñbæ„^mˆôÚ&=ºñI8BµLÜÍ!ÕŒ¹Û?ò}Ö’áL^|ÄÙuMT™lÊdÍ„“Èøo(ˆ –0±xòcñ#®ë™Hµ‘‘𠢑•j˜ SøðJ¾u"kÖ]Ÿõž‡°|,h¼¹†|}EÖ¤Lcâ›y}"Œ] ÓÔAp‰m}8çÉÿ¢ \0ô¿èJ:¯³{¹€»È$¬ð{Ùp»Œè+{šÛ~.Ïy_×ý1ùX?$謁= S'Kø§®þYŸÛù>Bíxø‰éùJJ÷ êÔ? _Š.¹lš2§žú#oõ¹ùZ'½î¸­ûz[—š˜ƒK[I:\Þv£“áG_‹‹ëàOnJ\`7 ˜\!3–.uwâf1†õª^ÌIwØÌœÙD¢>Ö}×ÔýÿºÎªß›õëCÓ¬·yYžKÏWÎ"ºÝ7IÁH FRaÄÇ©6š«_¿¿½Mšó¦,¶I ¾;Õ(býþÅíÇOŸ_.ïí¢Yóiø5Lu-åoÜl°Ç‹&åfR0ás Èd`1Ü JC³û¬(Yïüiy_WY°S5Â`°‰|kHäšOEŽåÝ…îË.öÌ$¾¼yu:Ëß%C7\-™•M†ÃÍ÷þÐ=c‘ÙyÆä|u3•\Üåm`>–BAë¼XÆ6Zv:·”Ž–"¼>…£ß‚ËI`qoßçÕ9'¥î´XΞX ö.µ‚…¯ŽÑë—äB@Bvç¦\6çü½¡¥­‡‰˜§j1âU0CŸzKG3a®Å€˜Ÿƒ“dw2ÜÏNO;/”gFƒ,ŒDäÜ)͹",Ù·E^íÊ'–‘—÷nw^‹5ÚÅœ;µîÛîœ 1®• èž­Jz?ÜÙxn’_V¿¼—©#îùñ€·žŸò¾-¶Kùxb1ØÃ°SšYˆðï=²]‘,;¦;v³§&,Æ‚œ×…LR`‘j.ã" N挑[Ï's¼Í„¸ Ôœš{Hù‹' _ÒA¿‰“ç%—!–BÜD4ÓÓôrL¯è4gý½^%ð^œšï&z¬<ô–äCn'QEË Ê>‘i.¢Áèœks‹Er$ÏÜ kjÃí0ÈKÕ“ÅdK×u÷ÒN]½ö´¼ø;¼t»R…@ZRvê»=dZJ6›fwÁÛ-X®™u艔½¾íEÝí &îã þ*°šK®.o»¼/Ï'ϱÏ-6Sn7ÀãîÅFŠB_é»û”¼ø¥‚™ª]rw„ç2’OÃ3x/läïI[°ÞÂÛMDðÞfÞðxÍ%›Ù»¥ /~½¼}yZÑ÷·„8ÄÏúý%ˆ:ê…n‰éù‡b7¿ýAŒ¸=J!EIŽÄ´nD|Óžéó仼çSüEݿݼ]¶=zèç–+Ý‚‡Óú€r5˜×[ì»Ûå ÐC?s?Φ-çwy{**ÖúŠbD\ѽü½ÉVt?ŒË³u›ðUÚMž°çIéŽìØ'îMôg½¾ /y}TðzÓ´‘†E<ƽ7~£~e”&pƒt­î7d~¥Û¾Õ2ëáÙ6ï¬Ùæpü³…ÝÃOªûšò|(ªî•}²Ü;ä¯tЂ_â8Æö 7“öY÷­#ÕJ¬Ï}ò´w'ž`…{qº z^£{87;5ZxÉŠHÑ|¶>œÉhôTKõZ0àBjâ†B4—UW€KH6½*ó¬M>Õù‘ƷΚ~^l`ë—͹êÏ,š&Ûžà}Á91qxd—°KâÕÍÌØˆ$*H„„ñX¾Î}QÎŒ‰Á‰­ê2k –;Öݦ&Ò3³³aˆ­Ì¶ßè½L’/ùÝóbe6¾ž«JŽ’åyöb—ßçåKçÓù4/B0€süúáÝÇ’+Ò)þ²úÖ2ù®n3o»Þ"#¢kSòm¨ù˜~Þøç÷·cE°\CMñ•>ñù•Ô äó‹ë¯__R,ÛæœöxÄЈBh¿iô¿tN"¾“Ƨ=à §TzhüC…I1ì³mß9="KhèWÙ+ô÷ }a4a_h&à'ëÅÓZ-Ï(ÀÑCb1™cÁÒËûë½.<âËÚÂÊuÛ*ÖÅ¿ü]…|goˆ'#ù3ƒ—´§Q‰““ÈE*¬ë†=DªÄÅõ_±{œha”!¾¦Â ñ]rË?&_ØÇ‹}¿[+“ ö7HóXû]ª„9@W£9P;ý!sÒRݶN®ïÞY‚ž=þúnuG:R73í¤ìê‡ N#;1cÒ#fÚy¡2fEÝÃt ë”ÐükÀûáîîöÅêå÷ÜøƒUd5¨,l”}f¥¿‘A’²ïñØ÷MÖxÃßFh¿ÙíGä÷%ù}K•h‡Å{¹ºL®Io°©H¤ “WàN—¨r#þ]vÿDñF £Ä¡å+NpAGÍžÿ7hQ$¢èBy®`Ü³Ì “ROŠÒ>Haå¾ß)fTiRŒŠõ3ñ]÷­hÖ[Âw“Á%ŒhËÂC_ Ü.ù™ÂÏtÐ$¨£‡mÓ¢»[ìÇÞmbM0ª-­Ä >bEòg*éÒcSG©û`û¬=äýÅ!+³Ç§W$×±ê’Æº«·§FãJÞÓ¯É[è“Àô|ò„¡±âE,Š©_:ÍÊz—7yµË+úz­âÜÒÿÅ>§ŠÞ[é‡0L(¯Ù£‡ŠÕâ«£ÅöѶ%b#e6ÞóÉè'ØAÌ>ÑÑì ÜZ-¢,UÝæô"{K›ïó–àËÉ` BÍóŠÕ÷J„ÌBÊ,¼¿üxùÿ\ß¼ÿüåë»õÕ»¯w+E’Ú72¬ìõìã˜H<®¯_>¾[¯þöîã»»/ŸÑÈ8ÉâädѨ9i€ß5'×屬Þ}ýõÝWÕ.o’UóR·BÊkº•±ÏÛû¡· yêÖŒõ¹S&œ°Ûïµè鮇ÜèkK*ÁõǛՈ†½ÚddÔ {Y”êóHî¾üíÝçõíåÝÇÓ©œQÎ@›ýù'ò'±I\'úÊ`µÏIOÍ„˜ôïžà^Îd„CïÜ6(¥ÿ’¤Š9k ‹ ˜ öæPý¾§:Þ¡Ï60ËÁ{ôlrƒktç ,/Æ – ®¥ BB®Ç tf»c½•ýëzLñ½øÍœqqØz]k6ãÖ·ú…e£ õüݱè¸>ýEºu›’œÖ½Úœ·ßrvæë}]Ã{±We}Þ%+¦O íH±nómí¸äðH@ÊF€£0íѧÛé„ä‰{Þå|ÐÏĦß~^qxÎÇê'b24ùiúQЋ=McÉ×yÑ8€È2Ež’o#*"ÅÑ¿Í;’©ž’÷l’€|ùšHEAþ~÷ך?ÆþÐÌ3ÅéàD3ÊŒhÈ7 ùIÑÀTñi‘®Þñ²H#t£¡Põù F•¹;rƒ†…K¤BB¦«S˜ÛÁi;î4!—9z(ùª>5g"øŽ%_Þ_ÝR"kçD¯ˆÙg'û"¥èdäµÓS–xõ#d6îø7Ó¸7J¼É!¯vRDt`ÈîæÊ[-O…;׌2cÜä›9ùé`œñ¡=Ÿ‰†zO—Ž^|ºyÿ’aqáÐ1 ñkY¡ç 1<÷òøa2rF4ÊŒ‘‘o2a¸YÈàîá¨Ì© 72ÓûJ)‚fçÐì&ñ7;9úf7)¤dL÷·ÑËR‹î›–Î]•5ݱvs×G"@†!¾iõ—ð†f‹1R´T÷uy>qh}æÎ‚£Ìˆ|“±Ÿ©Ç*œŒ÷/º—d”òŠÎÊèùtðúº.tÐÄñy„!¾°Õž]Aº¢Ÿ¿|z7t…36ÁvØ6¬3BO¸‹<Ânß-ª}í€ã¥,@6é œ av]/ÐíF¥^]B³½¥S8 ú•HZyÅRòeã&¢´òŽæ1HÑë®i³üˆ–‡ë7K#ª†>@–üÌä’“c0‹Ãïg¸K™Þ%Nª+=¦†æ!•r)­¯o²cÌ"o™Ð… Áâ¸õ þ<°×YYdÝÚœ,¼á–ƒXJcOÍé–X€EQN,'K!eGïv -LÉž—¨Œ¥Œ6ŒÞ¼‘ {Ì‹¢5æû…Àb9^Jo.ŽÜ>!ƒåu)}# `²‰â `L $w¶0ØÜœ‹r·îÛâpð›¶ÁÑ\3Ê¥\nšÏ ¶ÌeBnÏ‚_ÏùÏ_*¦„ bˆ—;E©<˜Ò2±ŒtCDz³&VRt°ÞÃf¦éϵøë|Lh$ö3¿ñ¼hÀ˜tÞéš‹zžÇ5Œ¦/C$ ´ºí1›íúŸõ& ñŒz•A.%rx2MMÓæ?ê zjÀV¬ˆ—€t%vMš sàYƒ–“J¥T ÷ªnÆèÓ¿ƒ:¯ª%âM ›R®cñlœ5-ÜLh¸+fÚ,#VŒÞ¼dBŽèÆ<ÉÏYn„±Ôð§dh~Íœä¶K­Ä *†th¹˜˜Éó(°s_wÛ¬ôîÔYõ ƒœ9'©¦Ì~äL "À{à¶BÆÜŒãóDlõ.°šÑ”­.sULÖ\é 6¾ç“W?SÑ ?dÏÊÊ”™ž›RUa ÌÝ^q™É#õ–þ‰ðl'E&º'egR#Ñ ]L÷ÆF¡í•oÅ̱³8ÊV]©"Ï%{ {fj®2ùŒÌ,ÅRIãpøLÄ–’©ä…Ä z_Åf_âîd7P ?¬}KªbͰ a.€ƒ¾y>H\Ø¢\ ¤©(-€)*£³= Ø …Î) cJ$ aü‚ÜoÅmp:¶€¡#V)Ãòí fÍÃ*©1ÿ*vœ ½.‹7åé…q#ù[M˜bö|Ž1Còºšr‰X÷àärò±$’eñ]E7™+Å"Ýܢܿó. 0wY½ `\žgµ•èïÄÓP¨»èRÝ…ë.´\w>» -Ù!þ›‘E<á•1 ÅÛȆžm,ÒLÇš¹©ˆ¹àŽŒipsbGò-Ñ.ˆÔTò–Š*Éï¾4ìEgÂ)-Rª$&0¡4Ã’ÂŽÞ”H¦Fàˆò™Y¨Ùs‰8šoÎÒ²³¹ŽœÝU‰Ÿ)û±`W»¹Œ6Œèiö ?dÏÊÊX”Ÿ™VÈ‘„ æî(öFòXùGÒ?qží$vK;/c #!Yëxgt9?ÚìR‡ö" øw%ïY¾ww1Q²K´«‚Š â+wñQrWâMhißÎÌRòÎHX›Ê0’™'#ƒ W7bñ·³(Ïè{xÑÐBéY = ž¥¨ù.œ{pr9ùXÉ’­ptÃ}Q‘íç ï—Ɇ˧ܭ¦bÙéû;.}áò;t©çæh+ljÊÇxóøaî°•C5$>àò\|Æðw‚Ov°”b“>oùE¼ë¬ï³íÞ¡ .Ó¸G¦•ÒQÉV¾Í±XÒqTºt.Ñg˜Kÿÿ1 õ%ïÄ{ÌU78]†Ö–¼–ø“zÏÍ`¡ŽòÏVh]âÁóž|ª[ëíɈ#Öú<Øe:ölWŸmƒÚтٷ ravA¤Æ¢±P¬$Œ~÷¥áÈý:,ß©’˜À„Ò K ;zS`Ù‡ÓÆdåÖ#‡´ŽÌÜzd’öÂõ¢p­9z ´¦LÝåêÖ'[·>ùº5eìÖ'g£l“ÅÁÁ˜¦ì­b.ËÊ1˜Öápß¶)×(fŒž\q)w0d'Z Pħ8º®¤ïûb>í«kÛÜ•©$l®P0«fŸwåÕ({á‰î™©³Ñó3Cª%4Ã=`¯¨,.@j,4/$nÐ ø*6øw';V6íø›º,¶O…“+:3/“³IÉ–-n©Ø…ɳ0°•¼¥ ŠšœXAÝlJÒP¶äôL¬£‘ˆÔ¬I‡ æy71()ÚsÜ g)3ª-³§¹ 7”g¡`,4ÏÁ+5Zr‘t””%Vj´M¬ã=‘Œܬ‰‡'{±“ãhÚú1´É™ê[³ ggK¨¸¹0á–-—̓8lF¿á oߣ©´}/ŠH4¤{Œ3ìÅÑê ¤TrHâ~ÇÅg ødôù/"Ýܢܿó. 0waY½ób[žc‰z”èçæi/Ô]t©îB‹uZ®;Ÿ‚Ý–l?ÿÍÈ"žðÊÖâmfÓÔuW°©¦OFAgQ¬9Òæ–È]x y&Ž‚º4 s¡Ó-Œ©W1Ô©šËߘ¶‰ä Ä$¨A{2Ë“ +eÆ·“£ºOf¤^¯6RµëH ›j à³Ós¸çeg.~ZbG¸Á« ¢~0—F-W$À—ðXtVðfåÕÆ¡ßΦŽê>™šH{–YÕ®#î¶¿˜2KÏQfŸ—¹Ìj‰á¯2‹úÁ\fµ\‘x_ÂcÑYÁ›½G0–Y‡û¦ZˆÆCYje>›È§\ÞYruÛŽ´úµ©Þ3é  ß…¨£ žæ’<ÉQ.ñ*ÍŸ˜Ëó$·$^–òߌ,à ¯Œa,Ý6ç–ô۳Є–5ƒ¡”™‹¯lŘ¿´å§¬¹pľ0dSA\1RД´ðgd/R%¤)i•˜AEpM s² yÁ…¥?WU:#)Z3”Y&gÎúš-£_I©½£bn$ÏÂÀTžƒR$ôÄ âh/8I¤lèé™XF;""=¨Y“)0:̪ϊ*o×ÛòÜ…lTÕõ ù‹¥\ +0˜%Ë3°Tè â°O‹Êó@WŠ š>!äL…ÄÂN)#h &6pqO67'[b¡ñb«z—‡ÍèO59 3ú¸5ó‰)"&ͦZ±< sAyhiÑÒ,Œ§«Ä DÑ2£¥kbí˜Äô¡gOBìPœŒtWuü"˜ÝúºòÝÄÐí°)Þo§n½mŸš¾¦ó*Kf/‘I™ õ°^‚æ I*'¬ibuÀ4"Ħ!'° ‚z Þ^Ä4Tp€ $P*êFÿˆ_‰ÐfB+8.Äk2˜S™ÓKÊÀ¶ïšYg„&dR*3ñbÂwÞçÜqc–€P<ßzæCµ?l„E3–GgbÒòåèH°æü¨£Õòâèá‰ØŸ‡·[gbG’‡˜É¨0;äëÍyû-ïa÷LÞuô$MëqhÇG[ÂȤS&2é”K+Àmf6?S¹K*vŤ0rlðxL°ÿx]Öõ·sƒ?ŒÇÂ^é:S<ð5å–tiŠåkÞŸÛŠIV,(WŠwú„x½ñš+Dŧ X0æ$‚8éËf˜·±y]XƒxĵoúÅ4²’sÿ2»¼b=^LÓ7gvÆÌ¯†ÄÑÊ„²ól“Zѳ½»0E3”^C/€Iª¡UGz€Åkh ­TC«Nˆýyx»Õˆq¦á˜"Ù÷ ÓÕȕӫ*ð|ÿ ‘ã7W°uc¯ìÎD±\Å¥õl>ÊS@‹®g ÑÝ+y;qLµK>‘*žÔ"]²oë“xûóö¼!’XÜÑ(µ|ÿ¬ Ç!¹Ù-èc!|Ÿh-DÈËá(`ÍÍR¾¤±¿ÍËœü‰¡ûP”Ew¤‚͹,““ÀZW#D1bǨJ bŠe@É?`Š®|÷J L)”Sº8ä';Š!œÇŸŸ†˜ó“ÖL¾ž7Oð­#6‰å ®CÌ·ù.‡qIþØ·Ùú>kµ|Ôæû¼¥YÓäÕ®ØÒ8u}7ýžŽßSj7¥vé`“kš'ô[B¾Ù¦„ ¬OHMJ:§ø¥,àPé"œlZ3É»€%À;ÖÉeÕX²ÉÙ}Þý%5ª¡é,Šp4û«ø‹ÇNºGo% 9"òS~'Y|£yæȆÿQTÿÌ~Lú:€¤’?“~رîzVÈm}nxo²¾ÏÛŠb+ª]þ¨_iì$Ç“?/ ‡äýX*+¸ôè£Hª k±Ig;Kä¯|FIý¥©Ûž¢¢ÍÍ(3¢ -ç;ùIc}[?Te툫à !‹óÃÝÝíôÿ« ½¾»?W´Ï{çÃ޲Ȁ@~ž›þ¢ñ_&-d¾"€‚v®ŠG!pî‹²èŸ Î6®g<ï+±Ò‰ˆ²Ìè>ÈùØå$k‘"³–`'vDY"5Úû¢ÿ•+‰ Y—Ðéa¤¶/ç–ÚñŒZÑQã&–Sf9U-¿gÔ L Q.…c÷¾.Æã/D„C* ‚|`•íhÑyh‹ž†"ñ»"Öc£b¹-oÊÞ/ß÷Y›'/Hæ¢ùî%Ëx4R8YYŸû"<’V6Ûˆ£Õ8¡:&9¥z¥ “O)×c)›\Ò_ÂæŽq;1H+ñ°PåЉ®&µt]Â>'äsǺæ à°è]äÌ#w>eA ÐpÑo $;J¨€ÀPtÝ9÷Á *h€†~£~-ò€~{&Ž!U¦É¡¦ƒˆ’ÍÇÐÔ·¤ïãœÿÇD£Ua:`¸x¸6r™êRˆ?ç¤õ…Ÿí‰USÙ†”M–ËOÀºÇ,aX•ñ˳A#Äñ^,QŒ‘†Ë i’ fP H xÔýH’QèªZTzÀBBñªVUÓëµÙ&ûö¤šW £ýD`² ‚‰hpè7yäÕ™ÎHt¯vt\5 {O»©ŒOjir -„¨Í%JRIvDz :'¤ÎiÌó" K”BpvsÕÍñ”×fTLT¡o9U|²ßv:%f!ø4¨Á&B ËCGf­=»g7I0 Ñ`²ÊD!(öO´ÛËð x_©¬†© Ó*z¶NÝ*Âl\ć&»§*;Ûdfq‰ž#`mU¬îµ·‰œ‚OYyE}Vâ~]$ܪâÓo‘ŧ=~³$„j}]OŸø$ ÛòrOMÀp¶Í7YI×®Éð­?k€Ý}¼J¿åÙáŠ:{â~HßÅ@DÔâ“tIˆçRlrW^ž ªð!@OøÆJYßgÛã«·9ü“Àç.éëWt,JgýÄý¤\ñ¾.줆 "ªBbA:(öUéP±ëU·ì»ar¯»s“DùŽÇiHõQá”ìŠÉoß ëžƒl:O…ñ÷BeP]¿®÷º° ±_oËú¼[”?µ›R»vêTPÅáEYE"Õ#h³=É ë¬ªêžœn½ÍÊr“m¿áí}…¨òøX@*¤ƒMD‹æÇ.¯`jˆµH94D]’Á<ë(FJôö˜µ=”a'©ïI9ƒÇý’¬):»¬;nê¬ÝyíЕTÃçaÏ€.O @@=ÓåYK ºÀ7u8k!7H›À‰¢Ž‚¥ÝªÏø…z~¨4q–žâ!80:"c©å…JU±  ïè HxIî‹LH“9 ÆhÇ@SH`·‡•\H^]2¾´‹a;È÷´¥ã†;¼´z€ö´ØüpSfO:|ÙÀäró?°ì¢Á`Fèè0ùù‰^&¢ps›“Y±†o·cíQΈÛ7¬IÄô:ï‘ÊÊ—]W*˜ÐWÓ n8eÕùßöH*Þî/Òý8 PH ´[³ÅœŽìH-·K™æÊKR} ¿åAGK<àrê½^’ÈÉ©÷¬¼¬H5 ;H­È–p «C(gLæOE u${ 8¬;RóÒ'f”x»m^x5#JâWd9ø–ú+ñÇ{øN¬WŶnåRvÙÇÿÍVÎÕøÎYBºÕg’Hlí¢» ôveÞú$ÍE,ÖI>p½¿Ðäš/MÞò¶åK•\Ç\5Oz'ã*æÏ·üé¡&µ)‹ ”ÒIÒÁÍjû¬(Ïmî:oÛšôpA™ d6…)šÝ„)ÁˆŽ-¯ÙG©{˜*#bPö|ñŸ4QÞUHvEÇþ€øà¾Õ‡¼8{¶Äðá’n÷J •Ïix wèŠàꮦ;ýø7$bw„ w½_BrI´;¦B÷ùðßÔpA*˜sÙû´ý’øh¼HéÑÞK2Ôm޷颊[ò·XЩ«ºmþû¿þ7i6@úâÈ;Kw#¼éìF~ "*ŽØn¤)4ߤfñ{rdª3èò(GutŽ[˜ìMcØ0Öú÷ÀôÌè%£^wa³ ~y´þ½àó1»!|ÉMGïVv|oHÁÄfù}Ygta½hüsŸ¬dJ>!“ šÿt:‰ÎÈâšk&7·( ß<ÊÉ…ß…„š' æÍј $ÕÌ8IÏÄh–ŠÝUî›™¸)ùh(šýF=Ü'2¢ÒðR% ©onóŠä°çÀ©f(ÉጙhÂ@Í>RJ$HÄÑÜ|§ý™¼ŠxÐeü§÷'9YÀ)k6¸ðÏ¿ƒ†)g4+ÚNzÝ…ÆB¸‘Lý¬°ÕÜ­¦ˆ%cÇ8©Ù\M­1ƒp•÷dÌôÍ;™y…ÇIV5ô0Ä\k8«&ŠPß!Í.JX™þÌñÀ|±Ø¶ôí7BIN×ÒwqlðɬÍaˆ—'o?¯R·À¶2;ºúìØèŠªø @ßt„|©•¹ŽJØ¡±áªmÇåM¹‘£5¤P~øpúÂýh‘¢óL`ÕšMö½ c­6å¡Öirª$Xäs)ú'…=–ÖŠAÌ´xdï€: ÕÀðâ5šª.ϰÆ6g;š»cÑ$"“ç•æà¡ºË*“·û§&.±TÉQ@ÆVvþžŽ ‰Ò,ÉÞ,ÌeúyI %|L0oŽ®²®“D ü˜ž‰Ð<'tGºŸÐ?3rcvGºÍ„’nHÅÔ&˜½sž'd,Ç=b-›ÉÉàEÆœ½¦l´¬%§P‚˜Ï4 Y,ÐÄ04)$”°¶&çMHK¢K« ‡Pç ·¼ÉÂì@ùïbÉåMYœïªÁ ¥¤îbÓ1úÐ"åñ™Àª…Qö½ cQœòPK¢œ* ù\ŠþIaF%€¡nÈXù›€bÈÞyi?+ p4äÂü­lCþÛy“·ÝeÙdÛoô]|e1—'ñ™Cl@CÚOvzŽ ûÖ[xÐ{a‹ÈNÖ´¨Åt°˜‚¶¤E妼–µ&↸'‘µõ·ó3¬ãQ»>ëxTPŽŽ'Gjˆ .‰Åš±µg3“¼—>f‰ª¼m„ß³¦IdZ°´HЕõš0}VLìJ6J…ÐdÍÄ`DÜÖ‡µÝ¨¼Óåa¡È– k¡\èÍÀåÆÕ Ñ~ô¨ž=ç?¥žù”·Ûs[deòâxx©G<y›y-Ùƒ þ–éáî÷üVX˜gßaÁÄÑlYï»Ã‘‹‹¸èq'#ÿ@cl`ÃOŸußÄÖžáC¤V*2j„•Rt+ºYRÜÜ‘}‘Õ§|Óæ„bçèœ!’±'‚t€-b¬ÿuë(éEÚŒaƒ^‡\†!J„¼ÒÄЮO‡}z»øB“乇næ%éXï¸O%èQ=øÅ VÈð½lmö(!UéÖ¼ñ“†á=Nw*9o¯`GÖ%ë0Æô?|YÝ­ÿöî?×WÞ]ýíæóûiký¿´ç‰¯ò-]bÙ夯Pv†ˆRhR€ ŒåÄGmüý×…Šü”W…/€mG¯]úïÿúÿ „n}&m‰¨1ÔuãsÈ>û]Ž—j}¨’]Ü$ð“íðÎøþê=¿£¨Ø–Çsó\‘@<aYÒç§n6ø+Cq:—}Ñ‘ ßP´Ý”"Rn჈^ˆ­4>~ ÈúTt¤áßcr·‘6hŽº½¼»{÷õóúÓÍêÓåÝÕ_Ar *÷¤s” I-B_I*r|ôC:ؤØî¿Ç|K—O }£ý¯N²Ð”‡AT%ìÄiÏì/Qlc¶øRD:|ÿÂŒÛ{ág•¹†mªÐ9|ëUö[î"‰oãÖá™›DkhS«u±†Qˆé !uC¥\h¢«´H©&”ò“øùWjøÌ¡’ L„‡ôxj‚Y骢–8¾“1h“¿n²ö9Ž qÓ^‡„>YR#MàÄÒcŸÆDzÆk’¨Žf]ÖÉç>Ùl¤ígø£{êHU&6Ï6ùv{Ïï RÇIs õÂmR|üÂÊÞ>Ûæ˜Çd•›Žz(2urk4³`HÆ3àqÉlp”aײhÄtÕè5>dzJ(¦¥F?&²ñhÌp„¢^©oèÈÜLm=U“á3¡t’²; WȦ-í8{©gàêj»wŒM#ý6æ+ú“MÇñûˆòIbðÂÈ…/Ž}“u݃ý—&Äcç‡èùo?Ÿ¤§¡ùuYd|³É:Rü³3ɯþëíEÓ*×:1É QßéTÄ5ây5¬>}¦WbBï¡c‹IlJ½XïjR¯u9©æžÖ¿ŸónZ¢ì#˜" )±žžÒÁ ËTdxD CN*ñ§d!-A~Qd'zOŸG» ¢|áZ¾ pÒr9z# Ú–[´ÕyK˜ôWæ.a`ÅW½%͹ ³$¤” Áo¹£=U…¤f„úçÝÇŸÙ$M½ë–xžr`Ô¥FHÊAÆALuùÛ*¹¹ü$Æ| Ã*ìݺ©ËbûäŒ!ðà”ËXTE܈ÁÿÞQtTæT©Þ>[ïr¸sÍ3‡I hÎ"á) Ÿæ/Mw¼)òÔ§ëËäÅ'6§×D‘¤å¥Ò ½L˜jGÊÙ¡€“ø„$yF›Ã 3¸EÈÈ=Íÿƒ\x¯K:/šÓ~ª™'ï°b©š –÷+ýtCúÈ%2=˜ì~à%ó‡„n† ‚î«[´—EFà¾E—±ˆp¤°jª¬?Å. ‡:{Ë%’[*Ázâ2À™¢˜Trí jSÙkà/ê9Šþò¬4¨(Z dZQ ò–ë[¬Æ«Ì;°èå|>©ÈŽ.sàË©P* £-¢ Ø^ÎCai.ÚÅ1.¤£±lÿ†ïì“/>~þÞŽܳÒsëwæ$eí±“êèéáYÛÎMÊècÏ5Ñ¢}~ަl”´3ù›rvbíçUnšÐÈH¾ÄMaµmcH\ð¤MFŒû²~pÄjñÃÓ9$8Á#]‘-™Ã'â…ácÁöUÝÀ-à°#ô]jî®Û2ëÁys_Ë+'TYjDH¿ÊÀè‡á*vöKó#Ù´'±&ìhIŽhC2éåÑ•,®Þ!M?ÑŸ›Ÿ?%«&ßöíù”À³Q%\œ‘'×Ù©(aÕ‰½’Ä&­;–­À¹¡Jr P¶þ¦À¤K=|—PÇ—a9H\3Ó'OlßÇ Ð0_ÓyC—¥§h(Bƒ© [ž(3ö)ÚáMíx‚l*§à…ïRøD1²»Fº>Ì€x_»çAE ÷µòDª Àå-Éç&oçáöÄlÀ«c•pÊ›=cð-¿G{¬¾ÝlN „øU79FÅú–$\öãzŸgý¹ut`QYnŸ…¥ø”om~`Å„ïëòYî7ÂQH‚G>*ØÈoÅqßÞj%ØS}8À®B',ENBƾ+àØ'Åqü“'(±0¸dŸ„`ËÖ>ÉöQàÕ'Ñ„§1êÖ—7˜¿ÍÙðô]ã™¶×eú,ßs@%håãzÑ2®kþ"¡óy¥Þ³Ç”ÖY|M…ˆT H“/ì#.Ô.¶·;„Ç8Y z˃®¤,ÒïÉÍ­tŃ‹XïÙU“PÒÏ >¶]K;åοf}ß›xî9Uh„¦ÌÉp!ý–m·õ¹ê½!Ý—Yå„$ ࣠~Ë~ýxùÙÆ&HHÅÀ§°`ãëP§À|Ö¡f ¼&k{Ú%Ö+n4ŒJ5Šdô†ËI(šÍ…ÂR¹ 8šÍŠÃ«zÓ¥µH‡Êú$–6Û®÷E{‚ÇÔìñ T ™AQ YâZü`?ˆç ÇóO²aóQw¤/¼]Ý\¯~H>_¯^r¼m¾ÛÝÑoX`ÑÑs‰ÉPSWæÑ¾œûôË>ý¾ó'ÙËñbÔâí×Ë«äË»OÉWf#¹¼½é&<ÜC³ÎBN Ê qňثÈP3oó²´÷è¿+òÓ•¹Ú¥Ÿh.Û½°‚ZYÆù. ÅªÆ4-|è Ã)±t1M¥‹|.U±ÂrxÓÖ0¶ôH(›žÌP,¿°ÂåÔ¤CMñ³PcÃ÷æDÿbŒVléåJéÝßr½««[Rq¼Jù-Ú½<ÙöİŒ`Çß[¦•jEF™¨sW?_hƒÖÒ"’ —A~@á©.aÕU‡P²X{ A­à89½4{îyŒŸ^'©0x®xGœsžaõ° £8W›ïÖÃ$RÜ}àÂ\ÊÌ¥ƒ¹@ïÏw$Ïñ·ÿÞÞm¹cIÔ¾×Sôž#„ñŒµöž ݬ€HJ¦MJ\}˜¹A4€Ø&€nw7 Ñ;vÄ<ÆÌëÍ“ü•Yçs6@ý‹¨ÊªüêÐu®¬z»=ìšþ›LÌxÔ´É—õpΘ¤9Ú=M»å7:AÏbNœŸ¿Þ- Ýßèì|!Y +·Šm ™úŒÕk!d64u¿lŠëÛ‹‚ ÏV8œS <ëî¯fР3ŠM¹ÊLÂLINZ?ü2µÏvl¤ÿy&­«Ö»Ž; h¹r‹KêÎûÊò¤/)r÷‰ŽáZ8Á Håú?ÿùß åö\~»™´…d•Næ7‘~:µV~‘–w4ðb w•ùã>žœ¥Ü:ô£Em¥èªd#¤r¼+HÑn ZêÑÃÑÏo Zxé¾×Wõ~¹=¬2I¶d„>î¦TñŸâ’2ÿ›§ —®=uùlömÅVFÂü´e#žÌ®ø5L‘çJ=!£’6€Õ¦8Q›.·Ûg•;¡ŒÇKãCÐÁ+ㇺ1Ž9¡o"âP÷ÞHÇHWRñv0J¶á>ªîp•¬E·2î¥^V믥j'¦S Šíã0å~U}EÅ«fÉ[怱+3Í—Íò7¿Ûƒ »†M^ŠU +€äF§ :I+–œxÎ_cï±0{¾93ð=–ÿÒJc·‡„Ï+ç–_θA"€¤ ˜p]üÀÖÛš—ÜJ û0où+›Ÿ>ÌŠ ”{ ¾3ê+K…ï±c¼‹æ«“zBâ)¡ç™¯pëž¶îCPëÞZ÷i¬ºülA&¿ùíÉY@ÖÖ· AÁ÷#¨ø­ûOþÌ‹'gñXg^´h†çN‚qyŽ4œc˜æèÁÃ,ºÀÌ£# ›ß}“³!2rÚ )€:ã´ˆÇÓ7<Êcx”Æðl—Å`¥—n×wxÆš˜{ ãÐVƺÇc~¬²'8sKÜáaþôw’ ëÁ†JÇ‹—¹E/tNµ=|]-ær­á…¡0ò‰Œ<DŽҦL JÇt•±ƒ9u‡y^¾W+0}*Sa\é4U(þÎbÝÅ-×_üÑÄð¨„?Cÿ«`„ÞÜ6,ç»×f øS¢QJçß7çÂ✈8'§_Úx’åÇ«›7Åk5?ÏÞÀ\íCµb³I—9Ah Y ú¡ømŽ ”éfF0½þý•>ÔùŸ<ê÷ÒX‘¯OþKìö•f¯Ów•ËC½¾‡ÓS:欣½wºi+H¤·þ¾–2]†Õƒƒ¥¿r;ç+n¬¯Û*Zo·Û±zk3hY”î7Q^ g/rµlð ã¢Èºh®çS‹¢¿=V¬I{lÛëÁNÇÿý¿Åÿû/¦Û¾yS<²Î‘ °Æê)X|ïÔ);`fOäQ ƒîn¾‚¥cåŽv‚°Áp&>zMt”×Úµ¸”®–úöyx$™„±#Z™ˆàúÓÃÕýÝýûÿüîß~üü)  ¡=‚Mçjœð¸àÎT@ùüòzöpÿy~;½ q¬ƒÆ’O¡P1>LonÞO/~~¥LIÎùŽ´Ïì¿rÿÌ7 ë÷`;|c5à"ʉŠrÂþcQNx”×R PüLÄsª‡Ç®)Ç™´°*Hù9™ì0±;ýÜpïµ~Öu—uTéE±ä‘$'3³´ÃHA\yÉÉãÂSxB2¾Ñ š8HúVÇ R\éIw˜•åq#VOG>ÀÔ0ñæWS”ßÛG œsO°-$)X¸¬µ-WlÄŸ¶–Š2Љ5«<Ð5ü½:ð18lˆ¯&ଞ¼ÍiòCRV#Û‘…g:èZc«^ =yS©ð4~cƒPŠO†xÏÍ † ñ»ùlæ›&p¤MýÂk"#úÈóþÕê•?Œ?{j j©dËžî8»»R‘¶UŽ#¦Å¡f#*|­ÆÍÔàçm¨þs”6•ß«UiÕ¹oŒ^˜¢ÎÙp–b¦ôNüñ®ÀÜ;¿¸ûiÒÚžSë:˜«ûâ¬ÜèÆ…§&*.qPŽ =~Þ\_Φ³ŸçÓ‡‡ûë÷¿<\±áÇõÍÕå« îeŠ*~ÄÈ^dÈEJœ;’Ay;Öê¶ú9‘Á•…üB¸˜*ØPì°oÁ üj^÷'—’TɆa2ºIÝuõéáóý¿Ï§Ÿþ}þ˧»éýìêr~=óÊj¾,—l®_íaÖp:Æ2‘±hõÓ‹¯æWŸ¦ïCZÅ[Úç)‘¸:ïn~ùxý)¢2jöõDí¦Ø0Èüâó§OWן£Ll¼¿®¿¾ ˆ+ÂÂfpÃæê]ƒ¸ód,®î‡ëÛ«Ï¿<˜Zíg¯ò÷/_Úí'¯Ìk?~k–ùªmÓâØ¯<°ÖÇRÉ|Å'/ä ;~÷F\Œëá–4þ þ†§x™ÊÏýÚüïÌÿÂÄᙓUðà††ßï>ß›¥'ùOXyÁ\ÊCowxap`*³°ŸØè |ð/èrƒ0¼ó4åq÷¯CrÆð8&‡ÎëŸ>ß³†î÷‡™¯/<¯SÅãé\˜ºi7Û\qW³êȼփT6©%Ïý3>$Ù˜Š˜tcË⫌[ÉΩð,e{qcŸú‰áñàÿ}%Ǫ«×Ï| ô|U<6\h-Œ˜=µýIyfVi \ÇÜ/»º…i4ºø#ãÄc›˜±iåܳ0<}Žá°?³. Ñÿö$Ù—ÏWƒk‡È£x,ðÓm%¶ížr¬öǺköøtÕ‰£WÙÄŒìêkÉÆÍÕ»âó¾2RÌÄ C,È´>ì#¬S€TLŠæ#—^<Ò+HÃü—!P1ùÒË%`Ý ŠöçiW±< éaêÅ#s±ÁÁ×æÎªƒß„Ç7ñ];' î]po¦? ÷tš‰~ÁÙTr&•šE…²:?ïÕ©Â'*Ø,ŸÇÓ¿á#š7Ö,ŸU3<ŠJ~¯‚‡iÄ¿Íi wQšø…Z¹ÿ¯§1¥=Éj–+&•ö®Õ,%˜µš%Ö?Ϥ!l³ió$›ÖÇØ´æu,Ùl›kÓß¼+Ú®še³Õ{‘&bÐÌu5½P溚^›ëbÇÍué ÐÖºšžv-ß“3@œ+øZTÕ…€.eŒü°ÇŽÐÉÂå[WÌ$²®ß*ÁÀµ8–a;]ˆAØ]r¤4„½¡$Å2ƮҹB4"ÔX¾ù(Sîg¡ê Î †;#3ñ›Ó§‡Tex Öý¾s,™ã"#cêDPÞIO¤VØA½bØbJôé¨VWk/)ëh«è)EÁd8ìyÓ‰™*C1šèÉLŽÑD-1š‚ø$¨v8ጣ¡!ÛNì/uÔP•8*•ùú¦e ƒUÛØOk›4ŧ§Æ¡Æ–R£ÚPujº4Æ&dº¢Ÿa ÒœüùÖ ™>ß$SH·Ö:ƒÖ @9kéÌ¡ØtÅ >Û¤$Ù 7’ù d¶†±® !Dö­ø" à÷ÇB<ˆ“·úh iËê£ Z}Œ èIºû òÞÕÞÕ‡‹áح󪕌¡¸[[j»µoKÝÓ`eðëý¦ïÊrSÝ ¯q ËTh_;K XÉúýÞåÊ/gYR‘µ¤ÅÅN]Ôšü~/ˆ¨+[_;“ÅXÝúÚ™ë[ìe…‹eŒ¹È´e.OÒ¢ò–º´øI‹]…Î&ÒŠ—+hÃ9«^J8¼îŲ(¾ôÅÂ’¿9“Ç]“¢ÊžÿÅùò’µë2ym! k‚„VÌ „E/–WVÑŒ¤Ù§(û¦Õb†—¿ì0‚‚rêÎK¾‚¢z…¶´!ÎyÅTê*È›öµ…t”–I_!ÊVnÊ— ˆ®>«Í–Ó …»©SŽj…×|X,˼^CÊÐ ®–Npi¼;¶_*ø1;,Š ý 5˜ªylºz¨EãÑVÍr·"0™r&ºÛ\èÌ æ%Ç„¦zÚ7ö@¼/ÍtÏ!8“9GÐr9éQ\~¬a i½Ö8C…ô cvLâX¶ùÕ”ÒÚÐÕT‡!}è W«.€í¼} .¨[x"_ßð³êÑÄ sÁÈwsTIŽ-¦cßMPƒN´V•^>d,÷öªÑ¬Ù–]ÍÔðGôóÁ*¶¶kZ"¡!êR‚—O ®aZXÔo¡-àØiÌzM¬×´zmCÕkǘYS8ˆ™e Ú<~Fq·רŒ"âEà|4LíÄP¡ðO~uß““Xx'ÈZÝ×¢|¤b¦ê(Lî[¾Ì&,â26\x©†¦1_à™‚ Ô ÊU`èå±l<Æ´©uƒK0J~ßïþó¿{ãã`”»zÎÚœ\KhKI¶]=W%ÄŒ’”‹6lÒÀ/öú«)&„h›/Ùfß3ÐÙ"@D¸Ã¿ŒÕ#°Ë±Ã‹s×ýŒ®XÂÜ ó6Õ++aŠôÀÉ4™•)KHj䎺8øo^¸5qåÖñ’Ý2­Gù ÝRÅÞ-1âYÅ1eÁ&ë=.(4ø~ÓýE±|„ýåí+¸€…/Òöm…´ÔÇéÝ[á W¥C|÷êëÀÊ}›RT¯*4ÊVnXØu6t@™çÆMÔßU}ª:žü:HPÖã´VDì ”GÇùêÁߨƒj7¾V€Øåw{ÜEÕˆß∞'Ó‹±ÞëÄ•±êþPýµWY•ýÕ×¾{î+¶tñä„ξ™wU;´¨x¯ÿm¼O­Óì3>êýùãÙë¹õÌŠºòχDhC¼Ü~“ú%â¦Õ/!ìQ¿\OÙåb/(M ª&_ø~Ï¥yÜüï‰ Éc·°t†ÏUp)Ÿ²)¥³Q*NU'KÄR*B*ýÎMxâ — gX'7]Óì^ÁmÄ1WA^j¯·æµGøí_zä·ÿ(%¾œI¢-%õK|Y'TˆiáOÕ3¼þ€†<ñ ®ïaö̃?~Á»UñzYBýwœLºçéIƒPúX”J¡~+mŠŠ—[ŠŸ,*–]?ý<“×}ÿX4}º2% ¸(øÁŸÊªÚmó\”-Øi*yDzê§÷LàÕÕþ‰òüfAèùLiÏ\£ðœ0O»ûsC©£O¾ÃŸ¸hÁDm¶¬!I2šiJò…É„-I/OóÄþH"‚,ÌIzy]øJOH 5ƒc ~¶š£²?Bj…ÅŠfKÔV.,u8úÅ^; LW+øöDà 3@X’òÂȅŵY„… ‡EX×à<¾š×³&`Úá£2½çu>¡u¿ý²zõG½ÿ£üA.ñ,އŸÈð]¹ï¡NØÅ¡¥ÄŸPT¬²Rª»ô:¼! uujõþÆ/yã‡7“Äœ®ïü:Ö^ßOÄöÍžÜ ÷Ò"üetÀ½x°WÚ?g\Uû‚Uþ–Õÿ²/~š}þ„ªÐ´6ÚÁ‰éb^ßKI­ Ínópò'j„ˆE#>ÈW÷^ý¯ SÂB>P¬“…oƒþì‰zsS¤ Ç?ýBh †ÉÓ €glÀÎÒþ‰!ƒQ“Ÿ~ùdœçQæÖ(jÂÈPøKM©ù¯ø|Zq œyù_°&Ó!I‹ÌžF[â™9tÎ)—?m4sæl ǧÍð·3%µaÔàÉ™höPA‹Ž´`°@£ËšˆÞÑi'Hôè´]¦îQ3'–~ eŸÂì#œ4ÛÞ§æ&ˆŠ›ì!C~ÀìáiJ†ÓO~Çåcè}œ½ ï@¿—ÛoÓ¹ý6šÛ1S®•RN¿™Óo39ý6žÓÉóêÅÛ9=âÀz*„>° þâÖ³‰%¦0’,/-gž[·›w3¶h6¹’Ù$ fŒ‘‚d6L„$-RÛ\%N4X@úf‰ÇêcÒ²¬Þ vÖ%ÿL®[çÜ©©I¶›Ö±ú@šÂm'˜0*’7Ì"—˸ºŸ¸%JNŸJÏËcÈ–1u‘$yéÈf áCHÒ⳯1XâD# < 醂7y’¡B“'ú ;³œ™åŽBH2€içR䎬˜ð¾â“Ì릂Æ:sA¡YÛæ|ã…o$Ø ã7LñÞ!÷mIS£ð±s_¾ ¹/Þ˜è­×Ýâó2 GûzÚð§Ózß̓”©ìé‹Þ‡æm)ªÙ”·¥Èuwí’5ZÊTÆ\íŒarÁ_PÕ‹÷w´×êjOvñ¡'ûà±wLJ½ò%H¦ÐØäl:lsòÕˆlÌ#*n1 zøs&=(ýáÎN@Ðbµîì˜Â¤;;©n7{Ö3ÁÌôZÐîÐä¢\.›ì…f²†><1É4ö¡ƒö6(…—7ýá˹8½ÏÓ››ƒ†å.`³G)’[ ÕQúY×(ˆêœþ5`$` $\`OÿÖÃsIGˆÃ0GxÜáQ²H!¾|Ïþ€Ýy<’χŸ <2 ƒèí¡ÇÝŒ/õòQ>^ mYõU¨ÚU“_˜)o¯bµÖd¥”ØL†½ªEeÅëŸÿ­gS÷<’ŸÙÏâz(fø“«è«eW óU9”c^¹Æ˜yØ †…GþVMq]€OÁ} ôacŸÝ³:#ðw¦–eçv¾Ø²I;-’Ù–à9Qž*ƒ@˜ÓïÕ/î­^:zªž—Û¦|‚sú>D '$+i¸ß„ûi+O²²þÂfÄ«Òöƒ\þ[³âÂî‹c]jGì~ìèØäªÅ·ÊGP;a‚ôR&’ é=*5… •JVþjiPÔI„u­Ô@D»qÐoqÍ[ñ“îzK®Ó·¾}†>œPw\TE39Èã?±@6]¹­†X†1›Ù ¡WOõ‚5•”cz!I¡}œCz–¸Õ&£‡LØW} «1l’¼ËD%zM¸—f0˜¬öq¿b†~¯žöÍ—=Ú#È C=9îhä@KµhàŒ¢xmO•‰)§»žúë|XEœ\ã~ß31AÐ&BžýÉçUÇ:Y¸yXô¬ÎÁBtr¯žXç»F A„.þÃò¥JœäJÏWx²ð‡8±Å#òŽlá‘ð\5/thËÑ?µeR¼}©Ä¾ 'ö­«æ%û–šX¤ØeÎtX"JËNŸå࿬Cæ0'lðXódõgU¶s8ù’VäH ]Ìu®J ,ÑÜ\NïôÖ7m•PϺç¼~SÌ@g‹]bàYKÍ`Q ®Ã÷äº4·Ä æ7A?]ŽÌY©á^²¿°µ&û E‚Ö*Ÿ×–œ¡»[¹ÍÔFšlq© rü_öÕ~Ù=g® —Ë]…Ö „]I[»ŽDjwåÍÓA³ÙÍ÷7³Âð—v¡ýž^Ü^©3د¶õ‚›šy¹gG@¥ó'&.@¹÷D{«ÜòÚ÷} Ãå<œ!o¿.Ç,1ÁN¾™ƒ¹ÔhÈù6)ÀF]Pí:¾Ñ äÖæqèÁ&F:³l)‰"\uÖ‡˜ùw±DÞ€Hœ¹È^Á¥Ú²›ã~Iµ‰,®Ißï¹´¤‚¿'*$ÿmßBW9SJïuÙ?Âóqð³æ7¤ÓâˆiÝÜYg‰tqnð›àCõUX½AÍ´ñj}z¤‘‚–ñ+ñ‡Ò¬*sjVÕ˯Óòx «´7(hsœºBk) + ¯Íry+^–;XwëWÏûrW/ÅY±§ƒH›!S‹´ˆ¥]שZ=ÿÿ\ùÄA,¹ã¶/ 7¤êãß(Ú•”pü›ÍÀÄ(K©¬°ÏÕ‰™œ‘*>ÑÁo¸‹ÚÙ‡¯…U ºuËT,îß˰7°MÿAØ~ÀXIŸ`?q©Pìÿãˆgö‡nÇ5a~Sì ›UïQMµŸÃÇA9³×Õ~‚ÞÎZžÐX9“F/÷Ð….¹ÅZ@lH=\ÜáñÜ_.ï ŒâUöž’wCɼ›¤n%mฆX9ì*ÞD‹gx .Ïds¢pâ¼¢YmEuƒ\ò=dåüj{À¡jö./'´1÷ wWŸ™5?1±²ÊfS¯o~ùyöº«¸=fúê£ÓAu¯|Ü8Oßüz[›íaW‰“Ë,ú&³~¨¤‚F¯²¿*°­eÃw®Š)…Ó_¹‚UÔü²Õ×¥¡þä+¥Ë‹wÄQ­;ë¿Ôu_æÔ>X™îž%—Jc@Ò¢á>ª`Mq«+øýYp.`úÝ®Ï)·¤”b6¤g®†R.Æ«ŸÞïôü ô׋w|°óÌA`‹@bŠ(èl± K † Dh¾ÍÓˆzƒÕËÒTÿžÞˆPd¾D [}‹–`Ej V†úÓ[‚•׈xÇ´&¹Ù¬È-ÁÅ͵TKúüWÑÏúüW±ÏÿÒþüWð²Q~ÏÅ“ÓÊ…»©Z8¹Š…sÿJìAÁ‘•-Í•êßò‚vá#p´F±Â§„ ¯¶«L=tÖps¯…¯Ñ¦’ï) ¾î+BÊßüaa¿†[¶8·åò×rw%LÕ F°úÃ\NX@ÄØôÀÇF*¶é–—ù‚«k—›ŸêãW† D¸®t8[ ;c÷ÓÒ‚Vd¤ê»³"UíÌ÷†öÉE™[åS|„ÀM=åS•á|ªΧJs>UF Ñmàî…Þ2\dã5f…}×\Ø™À#¤¶ºšEâ»ç¼†à6ÎÜô#ö+Fþm®°,LAQÿ9/·^Hà_n&å©0&KýçedÛa|CÁ(/®Ãƒa £ñ‰Aøë8üc¸S¼Î¯•¿ÿu ¬ûv€À gâ®c,×Ôv¤*éëI['nD‹“Óºäô]sd5¾#ÒÚÒ.­ðõi…G€Vyé¾Í¸QÇÇŽ·BÄEùFcÈQjçSå†Xñ I‡|¼"ÇTeCÿ`Õ¾Ì\@ ˺Xè烡s{D ²F³B’i:ËÀð'î=<^ Mñņ+¼3*WÍÒ À£2¨º^ ]tô½´Ì0>zTE/] úzÝlI¥¬ŠÉãò·ÚS_vÕŠ?ì$ÎýÜÊðˆéçýpX¯Ç—€ò–ýÉcÐü`>&”3âááà„!øÁl ήþš©W†ˆŠ‘9éš¿ôl߈3ƒòù.ð Ÿ©èv¹§â=1¥S8z…‹Ö}«Ý, ¦œ :ç%g̽§•Ìk"½4ˆ€Ûij¾ìášDœJþÀƒdò` ¥éaÏâ™Á}ÃàxÞV¬ebíì¦z…WŒ&m`–eÎFHóUíÖÂìî4‹d‚3<ˆdÂ"™`$·Óßç®o®æ³ëÿ¸šø|?¿¼þðTÖ»Ãn.FúnzÆ*‘MDd#²[îU|3Š;åõjWíð©”Uþ¥%*ôÉŸâ­õ[¯Õ.—ïqȉ¿@%+E’>&§”±¿µ¦F¹¾ŸÞ0wªVoX Þ,Ñ=@ Ü%~ñ/aæmŽS—b,¥a«}ÏÆ0ÙKø1iKóp_õѺÁÄE•?¬a,„ë9.'\~šÁLº+û¡;,VñÞHVøŸkËoͺ!¼;˜Y Øû³¡ÐöË·Â ªpÓŒ}lüä Zx•@x!fóé·F–·”C%AKŽ¿AžH¼û*¥" qbbù(z•ò±ÂáÞÁêd„´a¹GŽZuhljó"hv1ó•­>µ]9Ì/Bʉ ú«ÙWóU 7%¯}q‹¼'ÜÛÉk# k+V\%àž|^€a°Q„p½K¥Œáù\Ö1÷p¯‰BjJÚ”è㢣EÇ]ĤMêà¢l2+³oÌør˜ùÊŒ!ê?3“`øR-Ù’‚a‹Z$ÂË®Ö7Áô;„Õ*Bb¡ÀüĦÁ{S£»7o°g3⽕‚ ©ñÄ]ź.Ê(ù®ÊLA ¥“ýC©3}(-·ò¦Ëÿüçñ›´ýÿü烒G0x›ßõÖ«ì+<†ù»ÑËJŒš¼ÚÕ0í&ß–ü:w\2x›S ËÌáe7#¢[t… ’)‘óU|k^K ˆš¡¨Kä[*8`p­wèà<Üüwy!âÌèv%ý0—ºð‡q$Ž;`ÉÉ¿ezûeWU{qù’©í¿ÁÁ{ˆ•²ÕÃÄL‚“·y´:?j°Çµ€*÷Òé““¨8H©t¥CzmO¬¯X¤¿tSDDˆNêkÇ_ÜŠ@µ¯:\‰š^ÿ.=º¦ŽÜ9„‹!,T½_U_ªŠvžÐuÈÃŽ×àaÚ®YdF$¶@Ž VüFÜÜGëŠ3ˆåy¼m–­h-Š=_>Vü½ÅKðVdêûºñº €d_·øî ˆ#_,íG0cˆŠðCÏ8­›ô•«j]¶¤óNK¯ŠF”¯üTsúƒÿó¿¡S°£œ‹s†/“€‰ˆÍI‡¼þ¤¢8¾|Ù1i«ü.ôßoŠ¡nÙÿa…¿­‡5,˜,ýcsخ欲ÑQ<Ý<’ D2Ã?¡ò" ²áðwSïpØ`†uT}é¿'“̇ 6)[BÆ81ʪ»“å1íШ膀afͬk–ý|Ý•›À1æ$ xÀM ù²„äbNt„—BŒÏ‘•»¡^Æò2ºUlúöþ®øn‰"Äᕪ•*¶™Â­LÊ£õ*ÝÛz]-Ÿ—ñZàÊYjthØ5Ò¿à\óÞ©R£0ñ"ÉqáN¿£ÚupûrYmU=”&†àË%Ìɲ(¬—b¿Ý|Íšæà—¨â¥}/³Š¶«`ñDjíܺ ÛM +ÇÛ€ó·–B6¢v+ûâŽ×`îü®øÄ3`†î’.°QFú¦¸¥G Ë÷^†}'1~‘Æ ,/•vŒ,’*mN><>/ºZ66ý÷å¿ü³Ü`/¿–mýÖ̰ïÓ²—‘åC#Ï×2Dþ/ÿ óÉéïßÏšõÀþyx<°‘T÷ýQü¡®T’¸Â@g°¡\±à<4ØÔóî'D]YTù¾/ìZ>‡f iyÖȶ÷™ÌÒÞ"Ì€^Öó²,ùmßVg=D$ "d%c:åo"[F=_³`ï~aÎÌõ»0(.‚0;JqŸ M§ÍÛfùs|Ó1C n@f˜ðø…zè ?”¬í[„l4¼.Õõ•b[•ky3Éðí+X¿€3¯ñá»áBàì ?Rø~¼ß>Åsc€ë]"2ùˆ¨ ÝáÌä 1ªp.å›9ö²YtßO—Ë÷l~ý±k)ÙÖçV$J^6%Ykȇŷ­T³Ã"œAU›KÕúÉ«¬¶¼†rùˆO ð›¦Å>&ûóˆùzzu§X•€Óaàbwª»æÈ"ð YÆù‡Þ"¬®¬E­}ù3‘5G26¼œp÷øÜ£½‹¦+~Íö¥8åöZÖ;æpçðe30Vö l·…!Q1mõ›¨:ï̬[ßM[`±Ê,VÀÂÚ°zÏFNì•Ø÷—¶FöÛÕÈ*ì¾òŠ-9S¿ð±bE®’ÿí©…eÞ·l”ŸWìHZª¥Ÿ®V ¹¦·Åg&(÷ýûˇ†ý²iÄ10þ‹m¢°´¦rüùíq~¿°/”+L{Ô¶cÃŒê‹z§›ÅkÓ»ë´'wAæ~_¶ýc3ИiYú›EÉoÁ3áÕ+,éòFl½»úæCx@SÌ"Cçw“÷þÔñ¯wﻋ˜rVCá BØâ>Œ°­øÖp[Œ/NÜì ¿;Æ?2l¬*óC|c)Ý€q^-ª¿Ÿ—}3†/¢ß÷à.¬™·Ó@jÉ#M¸ÑvË¡˜hµßÈ¡ö›bóê ßÔÆ5çâÀ²¾(þB¾ƒöœÝíÄ_Ûª¯ƒüû­þ{½|ç7ý_>Z‚ÿƶÂOW(ˆ›J[Hç½n¤®À·¸ƒg tõë¶Üêc ¸¥<ŠÓ ÂT2!JØŠ¦@’ó0‘sN~i«\,ŸZް>îûw ÿzßP²øû«ëЋßQÆ®Üo*:©)âå>5:Ãûn}½Ù³ÊÌ2ÔLV6ª3°¥“CÞnr°íÆçk­£W¬`ïðàâG¾ÿúêî£3:¹ºÛ„4£QF\ññÞg‹²„ÃXt¾”É«=õáÜ×Ìñþk¶>'îh“úž°´Íføëƒ©æ¯¸ Ÿ^ 2.pCÿ„Ž?ÈFj:C²—;–Tj ˆ ì—×|¯q^2wMë@|Iaø¦‰ŸÀù¶Ú-°;á²ïÀñ®Wßz¸ŽÉ;•+î¡)ä{x¬{xi¤/¦×…³×vDßê½ÈòE ÃÓÌ(Ñ!K+ÂÐå^Ìw! ’þ°fCgoLT„gc VxïïêïvxØ;»6yLo·PT™”…äë„)Jކˆ‘é:mÕ™rµâ·•ÄJÜæœzh›Mj9ÃÒX£µDÐ@r‘0 CSa,錰ÄaUpï^jÈ.Ýß}ž¡“]á¼õ¨å*WíA4hHÈšï\Þ¹+5øY2±w×k¯«ñ¢[/ÇR®—yȵõZó‡zÁ²óâ±Üù‹-äR`·?Œ…U!°Û,Cqxÿ‡ æö&.Eò¿)í9‚T"Ü V•N®èñ¿Å9¹D¶\¾ß¯¶Æ*'su<æBJ=iAxÜ 0yÉwMXÀ4Szç¯øº¶ã¿g÷I”"*eUÀ›È' ‚¤ú·[ŽFÕA¤LȺÅrædb$̦o×c90 P2I?Ïî>QAÄŠkéKÞ‚e„M°›ÒÞÎÏ2цnK–ï7冘˜¾Z:<¾xBjœÀ¹äHq/=ÊšVÜ6‰DÈý˜Lðãøgµ<£¢ %”žðø;'ºMbó qà Õdá&T¸ÑZé××é.}ýâ½ùzLG¾N÷áëì¾×ãZùu®_¿dÛ¾Õ¬¯3-úúÅóõimãšÚ,®¿i‹¸>±1\“ÛÁõK7|W©ú:äWÔ¢šÍô´ÖؘK·/·ò¤Iq-ŸèT;‚LäªÝën¸RË•ïjÑRi"mÚ…¥ÜþžBç»ww|§B† )hA ¿ñÁ ¼nÈ¿¾y »wÎ;oGGÏ/× %q¥2ÈÍ5W̤æ7ó˜Ÿùé è=ø<> ãri†“טžD`}`ë^†d`ÍÂ×DXkIJ0z«ˆ_m‰’ : Læ°ZÑ0ñ´Ý CUWõ¹OÁÑúÁ‘¬ù)Y~ƒ g`‰‰n˜Þ]_÷W³øËÒ*nˆ.ØèHܨʷp©0š+(¥‡bâ j[‹kÑ|ú޹y+Ðbx‡ã:5ìËpƃ˜!M‰c@}ʆ6F¼aŽê ,`ãV1~·»]Õ“8~D=bìœ%[wo“‰Ä4¤øí¢¦:HM9‚XzBAâ骾ÂÁ›z(Žw…¦–cÄÄ•ûxÕ¾)Œm‰»+§ü†rÑ·’‚Â:]¶·up|ÔÁ†Øya˜˜_ƒ] b]Ê4£¢Ö91ž©àmT¢nXÝŽƒuaòªe-Û Ìc‘Úêl@< Þø| 'Ù”(Ö•fÙlÍy×ñÝU{_ ^wí[“Ž£‡1­Â6¢AßþÔÖ·å~¾bå«K…ñ²Ì–²rÝM?¬Ãê}i}FäÝ%óðÖ/Í8ûn9šÖ ¦UR­Ø€°@gÝ’È ª'dq2‚L ¬ º— $†õTѲ˜±ÿÝ,œzªO|ðã üðj:Y©0:%A)ÿ̃8kžyÀC$¡ƒ1t*nѵ¦>?â¨ßíæÚxŽ!$l€XÞ&¼S öð !ݨ‰¦_úV¨Ä.·Ú«% ˜n힥ƒy•½ÿÀ¡‹á«©*|7½òÝ–Aì‘ K˜ØƒL/nl[˜*–]5Ï|ú¶Q=•aIàz[&9{ëᜦ@·Wò‰Ñ>LäDM¹ÖP Ï÷l"I °hùBÖëg(}aØ2¡Ÿz¹%(jp¸—Y„uÍÙìæû‡›™}—ß1‚9rÉ>:ÎÕUÇæiž"L)dDÁáŸã!Áê œƒ óÇjÛfÎsd™¨!1qð¸ja¢jኇVhÝ‘U}ÑØXºd}ͶŸ”Ûv?ùç±Rïû6w–Ö3`…‡¶ï¿âSÜŽ›éÆ^®ß¿k¥õ¯ø»Z)ݶˆÐ+QçtÏ`ãÏ×ÐB•[\ê‚»—Ûg惽êwrª]ò‹“õž9XGå¦ÝÕ+ƒš¯êš¾­¡6që#Í>ÙÅÅw@€1`$>Ú/%˜­d‹jø6Gœ•’º[tð”Õªj·Í³ñM-*-È|û4<+oñ0YÙ¶…´˜ª†?6ŽjR8¾ "1¼Ô[\â7Z™ï÷Hë¤Ýa¿‡s„|å·› ŸOÃp 9‡Í›ÇJ¤2Û­™_…EÕd•ñ¤¤^ånós"ÞÕš¿!Ñã«zež Ö§½/ÎBY|ú0ãÝ>—âÖT‘EçæÙì7ƒaKiánŸm{ä§ñÁ:TG¡ó~o@™ó‚o!ܬ…i÷ÝÞ°¦ôèÕ1uyøB9†òUqmkþP,XfP1aàys5%>/è W¤ ^t›nëE¹(‹ 0T\]ÌÂ|¹áTD6@§†S/GäŠ!Yƒ«ØÍ€šö 8  hµªn“8è^ô¦›0ªÂŠ ÝóÓ…Ê{h¾oÍÈ -~tÛH†êÈÒ¥ï‰Édhëƒ2< a^ËÐÈ6º­Õ$-<‚»Ì°xô5¹È‘L®¯9¹øž!À[M;~¼.i—· Ä‹†Añ8 íªøáŸþVè˜å2¶Ãé`ˆý^W zÔ±nvµÇ'8¿_Õ=N¾T–.Ö|èÈÀy=wÔÓ&§ì­39oŸìÂc¿õ{\*ÐÖ’Ñš2jtS£(–ýâ,ËhæY0OKE:z'j‡z˜©Ùx¶ÉÄkˆhnp´.­ß=|­ ûàåRÐ ŽžFþ¦A¯%hkç^zª»,¶úv—ÓÛî|…-ï”åß­ý|­ÖÐ-ÙgÒ`I ÜÍ~¾š¶«úžM,¤«ÛðÌŒOáu¾¢Á~ ]e&³;,JÊ(0 ' Ÿ1cÀ),n›>Îor€QÂÎƒË }1ÍrÍöƒ½0©¨•÷å<³þbI•ÜÍ^¯‡ýà ØU†WÅâlj)#B)‚Þ/€²[ÔCW²Zo…ÒìL{JN÷á|îC¹Îß$G%¾˜Ôª=P÷ç؆,„ ôò ñØ5û†ý†WÚµîd Ô‰ q ûä ͰÊ×e%†¬_vu;ðÙ ô¸T0H  ÙÕËð“ðNPTÂÙžÖîÑce>Gßì „àËÒÈ·‹•[Jñ¤,µ bpP´â-¼ZSÌÒËo‘Ä2€_2!fÃaxdî_Õ*7 (ËKöî½á1›ÙìGCÒ'k±ÙŠME¾ùKÈ ¤Ï0eߌ[Zœ¡$Î$ÄUÿ鱯c%ëÖ}l¶E)ˆ^Á¦az’ ö‹£Ì(|#žNæ‹;x†@šñ G€òÖƒNwPM‰4ë %ÇÀ¢Qô°¾¼ kHd`Q’»/·ÏC½ì G"ââª#'•‚òTg´­ç=ï/sŒž¤§ýx«Ã”Nﮡ§L–ÑÚ’¶Bág)üU¸+#8êÍÓeE,BX.!/9êN‡"£V9:E„dŒ`'³ˆHêIˆÚ/ÎÆdèPM¿dͶ<°Q­™I„±@}©r3锦59Ü4w†ÖÒxÜ9Êóž{“¬q?‰&ÂE³giÎ K6mìEîÔóô´ŠIª“‘ަçBºUˆuÙ´•M!c âšt” })ÊY™íñTkÎÆc*€ƒe‰¤/¤(Ø€$³âh!ÇÓ+ÖQiUû§9ï´\òЄ¬4¥L(tOÀp&qU±yζ§Bxp¦L3ïRÈæ ÕR½ŒãA ì€Pœ[ (r–T6ilËÝjOK&‚à¡88 _3áË=u\ ÑfÔä4¢ò‰r —ÈÀT]×t-k?Í*’ÕP–oì ¤î˜Ô{¢ÂÑŠ7"@Ì«¢$é¦ß.2p†ˆÇ(ÄGð$(ÞTÍjAË¡ˆ¸ d $á>VÍåbDIËÔyF[ÒÆ“6©Sd3!3ª-á*ߢAĵsÁDz[Á½%yE’ûeÏ:“Bjº„l4saäÖ6—ÁU©\f?VåvxöÁrÉÈà¦o¥n…TnZÞ¤öéëšYÎôÃ=<ÜñöÈ3p¬/Z­:Jñû’Ìð‹b]·S&C*NÝA‚ÅÔŽÖþ$Y¨±µì~QœØ"mÿF-p_R£~Q¾›¿‘‹zW/»F4”Ék@O"Šy ’¢å$UÀ;´ÄÀ´…áÅ‘—±i´úörõMë™|>W´˜¤¡_*Œ‡kKå¨[ö„áaûTÓrÖÔ˜Ú+Êv÷ó517s7MlBÝ/ ©O‚bÊéÊÙé/8H_žŠJŸÖ%Õ«\¸¬+™‡¿T!ˆu¬«¨‘ølMnî6°-ï8«»áb@63ÍUCDÀcá¾ÉWv’Í€œF°Mj†8fJ"S‘¢REX˜Uô…~ O-#“>„T5 •`iµ@M«ü¢g®ö›z_ ]YVù&!™Ô—Giü¢"˜éæÐb%µ‹ðFùЕ-­Ï K¨¶œ“É=09bÖ÷Û§ê¹Ü¯ˆ÷´ÒA Ü€Pœyvósõ<ݯŒ…t81c]A 2›³jNâ“d¤ŠéIHÚ/΄2´:ˆ—(ÆìõÄC¾LeGíõä/ÊÃåöEù ¿)ŸèÊ5«…Ëm³'®öÅCh¾Lœ“Ë^€,±þvo‚û5j‡âÇ=˜À"n’%mUæ}R©q*ÜÒŠi% ÄÈ•ƒAG,q;›¶¼Ö ¶wR¼VD\gïÿ âµõ|ľ”Ï9BOÒ€Ô~Ö[…ûÛ)>}¨hSÚ+”€&[LÔB5ÞOƒ©O1ã¢êß»`õû‹VûþŠU¾¿ÒÅuæcYoKqeä/Ö­ƒÈ\—…RÏþŠT³¿’—Ç€,p‡nç€ÉÂjϺ¢fŸ»ÿM§a£’nå{‚Å,®´` þ£YÀSòø°Vz¬›ârÚBaÄŸšEq©dbtªCE3¥CLèÇùxÛ$K°ÚБª|@T3˜ž¼Æ±^Ô¯np ‡˜h6A ô|‡ž÷ÙÁ¥à†(ƒ°„o—ôPõ·ñ-H›Uµ8ÔÛUŽÓ‘3(¥ißDÛX)÷¼O+‚(ÅÆ®N'Íã€û$õ@À°mîeÙ'5ï=Öšå%=ˆ¶n«mf),jƒHÏpžHˆ;!å žñ,ÙtºÚð¾CÞ§( ­1¸É›`Ý1ëš¾ŸÈZÆÓ§G­Éô¤7®òQâ¦s[ ¥“Ô³OØ‹Ýa;Ôí¶ ØýÑ1³rªU÷L±L åq»rz)&ÍTI;Vç»UEÌSGÚ#“þ¢{á&É\!Jú‡mÑ®^À´´s‹:sqrSþ›ÿLrá4YTÒ¼üF|Û½03Uã5anÑV-tÈT h#âd ({dœ, ïJN1dNA²VëÉj1² ˆ#ãˆ&!ÊL‘“š›éÇbqد¶éŠ#-Œ·F%&<š/@" Òtž’µSR=õ”ûAIÍgøY6D·evŽ>,ªn5\î)È“² —_T%óØ>Á(Gbà„s) Úþ à =öÁ ®0ædøfËF¬äæ#,­qkIB>2‰X“€¡aœL€ÐbŽvæS˼,}ÂN¼CRv›*7 ‹ˆký®€e)æ,(,§K1Ú•lFæ_x(¼sÝ÷8«zÀì:ö´ëIWN*Ÿô¤2ìçÛ\bõ £{GÌÖŸŸó&Õç5”rCy¬ašŠcÙÕpTè[#x­ÜVÇ>{ø$—Ç~þ¡ÞV|o$G ¤¡ÂbÜÀZ5LÙGŽC¼ò+·¥ õ¨Œ £†+ÂÇJ4Áë&¤A~W6˜ˆH¦V4ü–=[GîìNT:H¬NôP³DޱÉ'ÕGÔ 7HR BU¯¸[¸lØÍ5¥õˆj<Ó3ÿsé ¡ñ%=Z[Âèß·åS5ò$,­qDºAC,³·÷ ®Ûép„ü ‡T®Øì††”¥Ü-3ˆŸïg¸e‘Õ›UékCE;Óü F>{kÇ]±ÑQ®7·„ èl=>€.=‹§‹ªb5e&\o]sKëæÐÌóðœ¥ðDMíiÙΚ]Í 4]À‡}Ü´´”Œ£Öùã!Â`þÊ>çë+|@Ä^" o)At8;î ¥æ‰ÚXÒÓã©÷¬A@‹\Ë »à”»wÇXýæ ­Epä éƒ*XÜŠêT'¹34’-ÂSZ[ÌÖ¯Z€Ô÷»y[v宂ÙÖùI4„å˘ŸéMŽ% ÑÛ²îð“f¡ ‚{ç—r eç $«Ù,_cneN©~›~€ié*°WÁ)5Æ•³û¡Ö&#kOazqÓ¿)îAÍQù›Þ>¡29b6š¿úRd„µ3GÌ&S«fá_é—j‘3¸”´U ¿„öߪfŠøëÀ¾ŒnÇÂ%ëŠ/&Tî ¼ð*,·$Æ„¯§³ï”‰ÔÈaBv¡žzgw‰CPP,L“««Ù‹µ}t ‘"`•²¬bU¼žþœ+)i´eL…Âø¨–”Ê3±óÌ”<é|¢`C¾…§Y’ÏÑìM¦cDQ‚ÄSaü·IDÛV«£Ò.ºòŽÐ]v´zhiy¥‡¯*Ó+ %Ÿ<ÆùøÌÙÖ£a,zrÍ!D@MR 9yÁ“˜Qé°ªX&A~q ©…‡wÆT®X8ŸÛ“Ô3øŠ4žÖ$—~$ŒCéJ9¹¨ éIJψ€ZÎá q°@éŽâ‡”¡ñ®¤°¶‘«þ÷⌽º·9T;xK¤ ¿iªc?,6ùS¼Á0·-åeãñy7å"ž*zù†‚ÄÉ‚å;lS'ð¡0©oTÆPv;Yî§”g,x”Ø ÈÌéýmñ +e6g͘Ǘ~$4)™:16C B§•F l" ¦t*Bpü)àÍ£ç²~49oÏÉü@ Ùt˜a(É™ñ–{lªN/?jš¨%tb’ÎIͨ„$›Ú^¥£— ¡4¾Âv:> vB‹¦È (nª½¸Ægɲ¥bÆ<¾–EB“Ò‘©_§'ãäÐáÓÝ·…N©N¦-ƒªS,x4%^§ Cù¬7#_ƒ"¡Ièt2ùÉÐtÞt¥1É)uFv>¡ºBFñMY÷c}¸)„íÇlN‹hÆW?`5Ô¬Œ'=’ÄçWAF)siåô”R†ÂÚÒN~ª7I³¹©¢_ò¡ yÜ@éŸ@{(‘1Ý (ZJ}wŽwåòŒ\œP+1D “èÈ… 9–d”σÿøª€š¦ÌØäÜ$“šQ I×57#ªœ4vz• ÅK•†P>Ò´>µ|dü'W¹@Ô4«Ü©I:'5£B«r2‰*·ï¹¥“Qg¢¡\zONåýå§™0¢’:@cE@®/‘@)8«^œÀ6+KdÙ PFV¶"rY¼¯†^"lÌÄ*_/€ÏªE¬œçDža¨EéÊG8¼¤`Œ H)|Œ  {}Ø£• ¸ÒM.X ‡ÇsšºÂûFòÆŒƒZL‘0 º@;<n$W)p$Ì °lÐ&}ºwhL wxýXÂEc¾Øñ‘ËEÏÉXF ¥hü|‰°ÄºϸůX 0ct©kvýQ-%òм¢O²Îà¡äר‹Q™° ÖàU)Z>úÏLÂÃãù`yÜTkØXN?®˜_½y¤!(r{œ é`‡e<þñòš ©×a#- µj¤æˆ•âtàSXI˜~eð!ã•aä6Cv[!´À +¾HÈW» îcPÔ"ε–fòD"2LœÃ/-thl6 ªGìÏC¸ – 7Œ€y¯Â#ÎuóP<KqBJÓø¹BÆà>£`¬ 1$aLh ò1©1eçˆû\R@Õb@ùñ=^"‚е'Gó!¦vÙìûîêÈ·:ãÁ‚@–ວêùX¶ôiu(€Cd‰¸7í«çâWðŒ•’ <†%‰aæ†Vïd8öïè\qÂDˆ¤T4o˜@. Ž‘`9&Äù¥¯4Ž¢I€äM*%CDp cK"abɇÚ6åjQn¡`GŒã¢¡8_N• xÒ/VvVxjÕŠJ±Y•k<ÚXª,ß YPAžåÓ˜\>¥ ni.d;$˧½Œ–OɲYkÎdíTÅQ#Ôm˜Ôöy¨—=¾þÚ–cŽwåƒ{pÑΘTÃnšM1•a ˆœzQfB“’]¿XJNN߯8thaÐf¾ªû_p4”ƒëË©l––tÀ+ÖÌYÁÇbeülSæ«û§8ÍI9Ęóò CS¿œH˜—õ•ŒÅI”ƒ_v]Í:8ûÅ…˜ íÆä1ä-^¾/쇣و•^ÜéÀ”Áç'àTv2¶eÓÔòˆO*D<+qChtM  ³Ú¢‘ìUW•Ò9«âY+Bá2´‰º0öN ¢YîZ¶è¥ÑnÔ™²\à0±/ÉYeïà>qh+éÈú KÀOÔ‹“éO§2‡*в9Ñ¥œ‰èø+á£ëI X׌ä.z<“­"ž‘ÕÁ•¤LT1£ùòh¡’H‰"nöðy0Z äÒ¹bq asÁMÜÁî¹ÿs{êà&Ö%ŽH»þ<ûÇ qTàÇH®ŸÉ yòPM= ü4f"îIˆå„aL4Xˆ2=„Á ÍŽ ¬xF•?eðâɽäh¾<šÕ>ÙH™">q¸’ "ÍU›ÖÕ{Ž*wê %(û’Ô'ÓXý A˜@T£‡%‘@!ÌÔI3}½ǨbÏF©3áFråüÍ@Äéaý4¹<“!ư¬Ê¼½:•,ß{‹äµtSs¬V9ŸŽz % ÐÖy¾¶é‡MW>´£Dà'ƒ8ŸÒ—%˜bqSk!<15vá¥sF:Æ$!tY.œ€úø‘a&l>9F4Ðsc°@Œã«aÈ~QðÓ˜‰¸f aÆû×i£JBø(}v|i$…4\‹D=¾Î‡›‰ß&%§'b¤2Q£:Ò±#ÒdÈ(zbljЧǀ^lã«Lv¨}1àSXI˜‘Úȶ‡<Ö–«‹mÄ“5©€.kHTe)÷-®ï¢™è'z<\Ð*òÑ|' Q¨£ E6å"¡kW­ê~Y.Gô‘0Ÿ+å|ÂêUŒe£µ„ÃAâ˜!“ˆ§SŽ̰ù¥#K1í…’!£¬±^(ÌýÁì‚9:ÖV0„G°uÆh—îa")™B£WȬ+Kä\®1HIÓ‚c¹vâ#_BŠ‹p…ÞvH~á0õ¬¡ôK÷¡§½\H}®0ñFá)x£ÉòPñ 0ȆOÔ-ý˜’ †ñm)#Ó¤G<ÃTPza†‚Ä‘œbA4&øn/Þ |Hbüy¨Õ83H…’TФØú²§›#Œ‹2*Á4çl:+¸\ vhÚz9Ô …D¡“‹C÷‡E¿ìê–:‚ÈOÓšÒYkJ’±/Ûþ±!pYPøh¤O|5ä¤-4âÞYnÓŒ²étÊ6m,³16n$WÉ,Lâ®×ÉÛ]#ö¹(\äý S·´è{Y„M¬“iO¥0šos%K~ì¶i?*¶•ßÊ¿éDÙmŠl3ÁE’†p?Ñìîë@:&<ú¦D8—- ©pÜ3÷°¹ü¢ÁÒŒöó$Äñt0¿7uàâ\‹m³eˆ‡‰@ÀÄÁßêu0n…ÝšÅU8ËýK›yÍp[TôŠ–H®Vžx$Ô²S8è íº‚îµCW®×õ’_íÆ¿¡Jï ¦B89öÀEÕÛS¹‡L#QSË6œ–”@Ù¿PJNOÄ~¿öÄèsÜ£rÍO¦ õ¼«›†Ì‹ªáˆO«Iù`ãòß"''€Îž¯CÑ›WŽ òêëPí©F3aò˜´¿ô®õr%›å'×}ºuü¤M|áYìÒæâO´{O¶vŸ²qâx:˜_O¸ã¸:ÛçëlŸ©³L@|¶vö£kgO¨=¡vÎTíŒÔC ßrƒf…ˆ q™Zʯ14 Œ“õ‹£rCµ|Ü7Ûf3Š(8’Už¸AÝËówÚÑTå›HB½Ù—ŒHÒk®¤€1tSÔÆ–>0Ûï“ÌËm=/·u™ï]I“JùYæ8o® t¬¡• ÀÏ´“,Q{º Ü5ÉÐìØ'³ÊXr–vïûâávö#ßOÙ—Ïþ·xg¬÷ À>Á³À#ðÑÙ&²új›q¡þy¿d#RÇ á32ˆwWu¬oÙ«z½†3KCÁ=a|´eãçU14‚zaT8Ï>ÏÝ銈špÚÓÌ4p·¶5F°«Q+»¤ü„¨Ž¬V4Ý8J+L’KY99 åò©Kçi6¦pSßl›E¹£ñC:z TÞ”s³˜ûq;ÀÙŽTŽöèúà ÒbVG ´ÌoûêªRÈQܳ×Þ¹A"¬BÈÄÅÍÍZ+ç Â)¡—ÍËŒ=†¸tÒ勘euBölt¶Åâ„òH™Ð dô¶‡…ãfØá*›ñ „aWPܤ³¬¡võ:‚`1BT´Ñ+éGEÙp5<2‚HD'Aa±D]Ñ¡˜-·pý‘e8(žÔ›s G(„‹cÉXTvƈ?…xŠöл=1«"b”RÌUŽÀ)íƒ!|MmÙ÷£`@1X)–ÈUh?î@„¯°¦5 ÓC‘zÑúÑl=®ÏБrnX¶óÇr»ž7mµ… õdØL®¹ ÊñÇBgQ3€ ¬¶i¶ÔE÷°¼‹eH˜=°€—XtOµ<2L”"‘+àRM\FñD]õÞò‰ VPCÓòS]µlº‰%Æ…r¤,:`zþÅ=úgà6”-éx˜ÜÆ> åÁm"Cq*yL!ƒ¸h¶P¢PåÉùxá~©WÕœØáÛ².”ðMЀDQ»{YM?À^Á4õK/w¹U¹ÇWÎk8¨,ÎÝeÂ&†émåÃÃÅMQã©bî™?`$lÝn)»Þ!iIú‡™¤ojûuÞ–Ë'Êa´ ¸‹¥,®ŸÊc)NéÜü^‰$ÛS5‡ÿy*[Ðâ^fº¾›UËâúç+¼&àL+bk4õ®î©u”ᘆ•«#œ–_¡­hX–!â©[æA]­[€†·Ÿs„¹tMšCב¹síΙë{\c+—]ýúìˆ.‹E«ªgÙH;R–7á «ŠÃr’á—ÃG†úGB I»PÊßCR>I z+l^êëçYñ †œýd“Í œdÒ"ÜT{±ê{ÈñÒ«D 5 f­ÁUPœpH¶ñ” ëšC³Äq0:ô9z!?>vÀd*$“‘»ìú€…©p„Ī‘•Âu+IÏT°/{)«†™ý§f;FÕ–„Žš»MNjµ’!‚Mdrd2røCWî{\%&öÄRIrƒX‰³;KHZÉzõðiDWºçý§›.1Ç¥œœóe-ZíëîáV™F/‡–ÂhË`7´e0™¼\/w-2(jŠEæ@+/__ÜF—G-ƒe–ÀË_7™å¯qK_¹e/Ê’×MnÉKFB:Ë9g˜{g™3ýžÕÕ²$³8B›UíËšú _BÿçT ˆÐÄÛS!é‹}{ªn¸+ˆw§Òl`ÈJfȸÀ×¹M¼.ÛÁ¾=,8QX>=”¢„¥âU³+ë|-öe-Jík•$.±s÷ˆ<Ò;îrG*” ”;ír‡ŠŠ~$;$ˆxΑl¸O8b‰Ùàa=UWë¯ï÷uåñ âÔ9(n³˜^¿G5;ÕýŽ04„,‚³<»Å¦úÛ‡2¬v_´Iª+iH?«D>Mø$5•l‰û([ÚÆx$€GcˆxPÚ/ͶãVU{Šé… ¸Íe Øk¿Ò+SQö„}CÈ%p; ¹Þƒ„þ£f¹K„0$½¼?1ÐübžÀiÖײ«æüá€,SHܳìÑ2÷áïô$&~}• ÌÅEìZü}Ú¡]QŽ…åƒ`\Â=!§Ð„7á®9LÆf Ë[Œ¶Ï;´‹öýeµ­Û ¿XE{ªžIHZÎEa>˜Ý0ŸœúfÙ·$ý†  ^ÖdübvG½ÍO<„-ÃÛmì‰ýÜÏW%MîñôѰÛå©bA,6O(0ñW.T˜Ãí₆µˆ¡,êÅY!õºò±ìêráOÛ!â OÔñ.IáɃ¡Þ±IqÌ61Lo«½wÊ`kœ©ˆœˆ³CÈب–v»9 %Eüã“ò)½™HñöO(-e“0w«˜À!Y<‡ý¾ÊWUKÌÒˆ–JtIé<,{¢QWÒÔ¬üPùø ΋¿\Ì ’AÛaËæܤ9ØÛ2‡vÛ”«7¾4 ;SÖÿJ*‚²YpfÿθË0tõ"Ó´átÎæP¦®ž¨É¤=­¯óÇuÐ9 !îBÈy–$(oáØî&§¼S!¼+ ñHöòGôâ‡E–7†rÜ–ù©œ!d10gSó¯7ÓO„iý—²ÎWCÈT Ψò7øÏê–+WüÁ¢bx™õow‰óOËú1ì®öv’4`XÌ?CôÜÂã²:@ŸáÜþ°Rž –bå‚1Ú›¿árú8ÞüŠz&X†×=#có²;‘wt ”¬ìÇ”;?È׬×ÐIŒtC¦H•l yVHQì_Êõ Ü:Tš™ÉÅy›~H±J“•u¿lX3ùœÅŒ0 ]‘¨1L8NÄ››Gf£Ø%ø3móÏìaþ#hŸàÏæ ÿLš+üs¼¹ÂRWm`þ.í–=XmÅ 9À\H7*kï12kh©ñºX3(Ã…îh™€µ}ˇ» £"‡á~k?ˆdX3V¢C²:ïðTBÏyÜL; õ–qO¨Ù &n\ØEs©3*«gl"²ä \sôfqÁâÊò1»§çŠ) åù…XuÜ⋟b?ø ”µ OÎB1V$,Ía˜4ëÉü|{ø-sÎ97E”~tDÕŸàù›çâ}½¹C·rÁ4F^ü‡åS5ÈçerK›Qq‰á ØÝ¨`™Ò6=œ2~–ï¦ÀÒg€¬­Û Ê•µeÝ‘c¡\NO.‚+åÀ^*o<˜l’vß|Ùãµñ‘¼n¸8±’Ì1£$^UOf°\<섊âJ¹l` sÛ,ŸXž1FçI í.·LªnøžïF|¯¾Mx•Ëý¡c#¨ýªZ‹çbWvOl& lRó%=Û6ü¸˜M$wP÷O¿ÔÃ#wÓJÃ6­Æ’Џ›©êþÀÒñÖ‰«¶béÚãê(j|Ï¥µÎ¿’úþrtýÅõ\bÛ¢·z^³ 4®+}Ç»$[tåÔªe¹kÁÄPBŸ#•JGýòW©î<Mq!¼ =m¹€î¨NÚ^ ˆI}ÚÃZ©÷‡¯–¯¡r(ÛÃvHª³D¤*îh&­ßõÅ÷ÅŽýÿÐÃ… ØSSrЇ|©W¬ ˶ÖêÙ(¢,å"O¦ Š $ÏÛ6Ú8ÊÃyèçÝøñ—éoW×ÅŶ9¬®öì„ñ!:3»,TÔ(e PìOœŒ¸„»cæiÝ  †Ô^¥²´0½¸9 °ulFF@tE-Håic²Iï3TBxß>6%ÖäÌÒùL îv“Y‹õ*¿#’SHÚÇîÒ>\Ž©iîìSDÜg²-¸Þ;ªÎé¤ûx™³œ¾”æœä´©ÐóT´M;O. ¹2 ]m¨wÅ”/ÁOÖå®Þ>Ÿ^Ù6mÊ'òpÎÑ¿¯êÍã¢éHä [9ex{ŒÒï%óN飃'¨=ä6h}‡È—·ËRTî‹]eÇÎ]Ù=Ë׺èU?kôÀ•1 \ó??Ê/UmiÌXþ¥Éíª¥v?AYdûZ¥¥]/o.OÿPCž0À²{zJ5´Ï}½„£5Æé£õi}¤VÝô횊iÈú¬è›°!'¦÷ÅçÙÝc „ç»öËj9yœV'FiulŒvóÖÌ^è­®ïŽÃöÇÿ9-··5úÀ‰àC¦_ð±á%û#Á·¾t®Ý¶ÜÆÞ¾ â2¼¬Œ¼½™~<ùÂH‰Å”µñÂE„'•çn8d˜”€¶ö‡_¬û*DÕûj€LM«·…‚pÖ6sÎ&=Ós·R?tU¹›—ðüM- l"šÞöqäzWÁ`hÖxXkÂ3”=‰µúšyÒ>. åþ®ò,„ç)””¡ED:@ó¶eWîªEž›³ãÌ)ùwÐ@³†TÞ§67ðúeæqg_Js w›N³Ùf‘Ρ˂ùLNWÜñ‡;O…ÈBƒƒ1C>‹tì(XZÊBwÌO@ìªEÓdKFáqWÞTó?K²Òf»]”ËÌšŒ#¥ w±‹z™‚åSÛÔp\,µ œš~älé×Û&³oŠ(6t´¯(—S+5ùŠlLV“/Ç>ŸËºÊå@"5%]Nô Qr³·Í2w:"jSJOSùœÅ9”ݦÌi›Öð÷¹çy{ÌêÊqO¡5äNð ¢óYl™k71›Ì3¼`èz2Ëøáé=m!ÍÄídyeQz:—¼éX”;¨aIл}ê×>#ë²ÙÈ2ÇŽÃã î–¢{ršFùØüò™Õ¨ Ãû¤9`æŽ-¡ œÛA=^ÂG‘Á–¿af_. lgqØ'·7jÉh$tµ¡ÌÑŽ¼ç%vBG䋘8‡‰Z€¹ µ¾­–p¾8gë#;– #Ýä‰Åc×µ9Ý]ë+ïì/î×ûû»|ulÀ¿Be-³Ž˜&‘öñ%Fc/VòmŸ‘XÒŽ9Íuð¤¡skþ+Üì}©}r_*J˜­$]Ìè,=”—Ðb,ºzµ‘æŸÆBg¯+‡%hïÒr/ø„ljgbxäÇ’T/e¤^õ~N¦nªòÜ©IÌ¥G¦íu€íL°€‘½ $©cbbWŽ;™rüF@±©ÜTèÙX“ÕÃ~è=¼×ŒçøaiÚ Ñ‰QS8yð} }d~“N$)%©V³E9 —Øýd¥qa‹;^8°Íø[µ`óRñNØôî:‘4Ñ<>^°X*´ ›aãyñGµT[¹/‘˜ÑÉÈ'ÀáZø'ã$iD¶{ò®–P“©—ÉàÜ0(d´òÒ"<•‡“›«)£r”;ž™—Ýa?çTÑh=yUK¨ þÓƒ”wHɰ„sª1a3t^Uº[ †²S¨ºcü¡Ÿ—û}3d—€¢Ò‚Õ÷GÒ¥¼™V¬ï“òN¿læ}[vÉ…POJªWî‘›eq2Å eî›f‹£×ûU}¬WlX¡A¶ËyYæïç…äŒécÞÏc …õ­é~¨‹éz]ãã´!TÅEµÝó lãÆÛ²‘Í5ð Ï!HŒ [lUÛA]Í¿§—’׌ž‚ò›…°¶þ È‹Müâ§NI³!¬²¥ÉáþÎ0ƒGÊÖ°´¦vüÌý~…9+.ƒRPY² r¶¢\  íBYj±`íÁGnJ—ç6œ+`#Ía`^Üe8¢Çô4¨ÞÈzÖ?–òšb„2c×ëgÂ%žˆ¬æ³|»Ðë¾3¹¬s¥åˆiéʧ+>ü¹ÃýŠš›ó"#‘ò%’!FNØEõ¦˜Á2*â͆¦Óï˶Lï¯E¥]@åªT€x_õ좊ôHñ,nM9dïII¼Ú?f®æ1 ös7ŠVjÙ›Hc4¹c>®‰ Ž÷ÜúGqÝUÚózÖ/: |Ð ámŠåÓ:¬9XÌoò5 !¶P‡®®Ž•׬¹ìdm õŒ¦ŸM Ê˼–p¡|ðí”Îy²”› ´Ì‹› ¶â|^ °V`î\ð3ÆlH5ýmÆ9?(¿~`]aŒ2cò$.dTfO^‘LsÆ3+Ù$ŒfAOÖÜ t*7H0ã”õ–0Ú¸"º¯kذhF`}‘’q±&¡'c áßH“ºÐŠÉ<ýÒ! 3d˜ö•x¢¢÷u˜gï­‚ö¸BX¤Ï•ô ÜÏá\¦c¹­W%½l!ŒZÆœž™îüíØ¢mºzSïå:UwlÒG4ˆa½4„¥35•’Ëe"P-N —±”Ú í—%,²‘*>Ç›ð%IòD¬õé^ˆ—ð6¾ öOËÇâº,gÒÎLˆVŒ•ò³‰T×” ½œ£ ОL<†5Ià;‘ìØl»ŠFfÉzdÜ×¶ŠN£É†®¬·9$SÈ`Ag>ã1†<è*¿¤•ùó/ÊÖý¥„mÑ#>+ŸY뎋<Ž€7û ü‹«#>R Þðó³:} ®Ýà^—IO. ‹EðM5DJ'!*Q7͆J7• —ÁW]Ø7 ?œÂlöbz°G"Ý7ýF¦á<)Á£Ýá=ÿ¿ÝC×ñ:º‡§©Kž?òf_ê’žh¬˜«œˆÉà7Õ¾96ÅŧÏ3—}¿O·”ž”ÅîæG¶;lÁÚ¾*¸6F†všŠñlòÙ· åuïÁ¦ŽÕ¸¹âgaÖî‹@Ùëñ´üP|Ë-)ÄÂó„õêkµ„ƒce{¶•Ziàó}~êRØS»L}”™0‘”n ˆó6η"Ì ñþR—Y]ñ¤ì8F Ìj‘³^1@GÑ$µÄ á!K`*‰¯Ÿðœ‹¶6òi´×"øw£ò,ÛºB¯m¶•»˜êÉ ¹·w†×žz»…À·Ýs•¹t›0®_J`Í%ü¸bO-¾jŠuMzeåOÄ~1˜1ô{«ØØŠÊãeczn<‘™’Þù?ÆYté8¦ñŽ!ˆaƒüö™Ö°Ëª+ æó••µ6µ§6«Á:úPÄfñŒŸ¹S[ºz°ú¼’ôTݹôÅÕAB—x¬ßMxEShRzc#Ý~.•Je<øÕEë])ù¶»Z|K¿yHaÇÛUAïÓdÂIV¶õVgã¥bò[`~›pþ›˜ÑëÄF$M¯{p+Ø*Чh[D…g¸bž*g‚;—ÀK ÜE#Xà wäÄ¡Yùý›ÚSkHx…!9zŸ§ã%WpÕÒá{ÀÀ'Äí¶Â´]ùìhÁœ=®˜ªH|Ô‘ýøñ9”ÉÈ u¼!ƒ’QºÛ!eA¯SEqä=´1—+¤gÑ=Oðø9Èãg«ÇÏËzüåñ³Çãg‹Çϳ=Î/-lÓêás«”FßÄ~çá‚iÚ"žW”Å᥯ÅoÇÈO¤}**vQQÑÀ[¥t œ”RÚ29 +‹5ÂK_ËŒü4ÚÒmp]GIã“þÁ¹ôÍ4·Ì˜K#îp·HŽYIÌ1:Ê\㷱˘99c#òÓ/’{Û,ÂÅ=&ê[.ÐòÊv¼œ¹“ 7Ñ]FU—1m‚Q!æ8 ™i½¡NÓº=/PT3ɦ¦±?‡ÃÿÊ¥yñ&Áí›i» °@Eª„yX—p¦: ]²«aŸÇ3¿› ÿ8Pœ>§7Uñ%PØœëí&Ū۰ ÁÕÞ"¢‘Ö@Cõ& "jÂü*-©‰"”r„ð4ªÏUz*²àãÅ~1>½Î/øã%<¯ª‹6Äo‚𠏓¨çOYÞÐ&-î{ç’S A‘Cf ©Ë}Út…ñƘ¡dˆÍˆIôÍ–;4OÜ’ª9ì/,ýBnõççÌ”ïY؇ ÿ‚©ñk0c¦™US|õ«‹Õ…Ð`/÷fi_¢ŒSu0÷ õªSk#0ÝØ3•*â3r’yâèvhbxÕ1äÐro~Žád4õ˜þ ÉIôD|’Pbx•ª‚<:1™ïÑ€,(¥©^j£‘œF¢ZtÇz R£ÇÒ†© ºÉJ›ÞèEÇæ8 ØU  ò R ÉÛ¯Jòçn¯$Bä;„z¿ñÜ nêäY"eOþ`×vMò&ìt,šnÃÎèCTz*Dœ‰é’›Õz˜â‡Nn`gÕÿËKÆE“öÇÿúÏÿ|XÕ¤T·õCÓJ|g*͇¾}†­~nnÍ+t‚ç¿AÆ]Ñ žP«ýËl`ÓZ)dßÇÄ7­²ç4² ØHJ 0dlmâoëˆt ;—þ$…0¸Õ°K©\ÜЂˆ´ H[¢Q•Å᥯ÍÅÈO¤M7;¸¡É"òÀ.§› ¥| ©$õ‚¤.“ªÂxcÌ0ÎJcFÌ¢7`—ÂÍÀf„‹Í¨ÊbðÒGó`¡¤ÈNÍ»è0¥p$œ‘4mÉ`ÊbðÒGs@%?›ö¤ ô¿ÃýK{?Öu«ë—ñ|M>èm´ëM)Ü g8Ÿ¦-é}¦,Ö/}4Tò³hOù‡}‰í_á…¿Àq__ß—×öÕ]ì‹Ûe}|kcáäG˜átHZÒëTU¤>ê¨ãâ³(÷Y¼ãuœü€2ÜNR–ô:(Š#\&=‹îyïq]§>  “”%=~Þ5‘ä=´Qˤ'Òí¢– 0¼N¹CšôˆÜs<\ÀE Ã#ÁÌíbšp´ƒ&^ˆÛK–7'Ú¿ jÉÁ ˜D½OÁî×±*á!UŠŠ~X»½û´¥2h©7áJ¤¦Ñ9B„#iKE°û\‚i::–&_ É‹xYW9Á SÔ̰2Ç„¢ÚÁfƈ=ôNAÔ ªç̼`ÎŒ*'b –3¦!sLˆ;ºfBÍÀŽ®q#;º¦¨Š4ÀGóþG׏Ц­éòG¤ï11Ô¨ûŸ'.˜B]´!~°|Ð ˜I½g¡6 ×»83,Â6“t8[TÙ°y±èh@S¾“EgàT鉯ð;;›!Qgól2(mälψ¥ÎæÉŠâÈ{hc¥gþÙ¼¾8E¸Zkd‡äѹÅi¯§<” šê@™Ø$J7Jo[Âð*IAÙ~‡'_¢;—ölÁ2‡0#ùN,§šüšJ¾;ïŽù.8§½Âs+|( r1@.d‰’ªžh`¨ijH_—a ˜á”&æ›!ê2m[ò ËçU;ɰ0“y¥4ɔǢÜÑ39¡ùƒ ¨&¨!/Äã%r`PAØEUñ±A4–bж!ËŽ¡¿x³PZ9#øHé‚!y¢xk•·eR[v'BÏ(×D5§MSžþX¦Pè•“Æc”pÅùwE’’UÚ’žYÏ#Uý~“|ýúžBV׿‘ÏcÞš!“Æ÷öm]†‘“;HÃé¥,¾j7’—E Û€Û~ä?«ÀÈÔ„ð«èz(Ñ$)¡·—7£; “²¬/¸ŽB~šMÓ.M…Œt†`iôË’¶E}îh¤»3 u$1¡;ü\Z÷LR«ÏµÊ ýûgv ~öéVCRT<¸?O bTô |x¨¹é¶dq–¸6YÍsÓ“'N= D(bÙÀ«¢’¾ÇmQŸ’mYgHŒ³Â}Ôg÷#ÄÕ õ0!ðŒÖÌKÒ=ò8þk¸ÐF\GEï9PXðK½ÛkpèÈHNTy‰kÇ«áôx¸)714PâÍcwE––a޳ ¦zºÚòĉ>mê‡\½3øÔê\1ù;ZkÛ“~â£göJ,†$MÛ'<²uBqoÚÚêH´Øc•{É¢ÍÞ¹3p`O ìQ4vñ@YœŠÞGÄ„J|¤DKIhR,½Ú×’šñ‰‘˜ÄtJžNQßäí©ðF/·RR²ê# <¦E³<{§ÀŒÄé¬O€±G‘ ÄYÑ€..ø(‰èiÔI]\U§ÿëlÅãDÍ/´ÊvJû4œ úZÐ]5Û„>õCØUiÓë>`ƒ… <òT“‘ya»,Šh¿vÇùs“žúbàFŽCŠBo½þÌnƒˆ£C/ªROÓ«ÃF2"AÍQv-Ñ—Ëûh:u 3fM]—>FR"5¦©k¨-µÏt¶ fÝVÉ0äª"ÛEEè5EzQ“.²MÿÜøØ˜È‘‘”¦²b $°¥ù‘ÒJt¿ð¡ÌË·ì‡Ý‘dÜÔW!…{„Þ-T4þø=8tà¢$*¤à^"zÛÛ(Çî4´.nj:nä5¤¨¤î†F)–’÷ó½¹¼óÜXÁ ñLg>4Æ,æƒvDòûêj‚Ö°‚”yà4 8ñcƶ%Uß1ëá†`%vrªvv§Ï/úš…Yþ¾ú’Œ¸)tϤ½=‘pôÈ)¡R×08:he¥r‚QÁ¶8LbÎA‘Ã"ÉtÖØ1-F[ª÷ ¢—Qèkýk?:L¥åYóa—ÏO§çg†Rr‘éŽÈ±‡ ‹v´¡Ñ|C9+š32ÓÙÍ¥Ã_<´¦€ÝjMS>ó;Ci où DäzbW[>³ë;{犼,-9º¤ÛáI¯¯àÛ‰Íôözvçâhøó6oS˜G<“œ¬zýÝa¼S‚;ǰ,bo†‹Ø®vÙþH¾ÓÕ“KÌŽ¬.×êÃõõ¿›ì}]§1»7?ÖŠ•-[7€ÄÜÚ4E“—…³Dc8FMIa׎ÁIœ.VžØn¤Ëß×É5Á X§èßÕ‡MþàBŒáFýC +¿tžþM/>»fˆD  姺*ÜgÑp¤J€§)\¨æi’ÝPþ] ¥t®žˆ¬‡+ìX8ýtÇSŒ`ú»|ëS¢ ¸öŒßÇj4ÉËäg’`ìü'Ïη‚óAýùÀ[Ø› #Òt[¬«M!”²3»;Ã>9šî¦çQCÆA.Ö›œ´›n$SIk'ÌÃ&$œ«[㤅v r‘q‘ŒÊ^MÀF12c= cÈ9yé£ZvŸ7¨Õ½¦‹­êwˆm™·0ã[Ââò¸ʰ?ò)F7á¨ü6et#sÝd{Ê+ØeAåýz\xÁAH…à'~Y×OòÇÝÕ*ùûÏKþ[ò ùo¥ïíTßI7I†R”À?H–[›”m´,àŽ-º–´é3a ›+©ýGZH>Qq+Ç É)jx䚦±.™66.ÓÝi“C¦wýÙ˜GråjšìŠá!]R[×eÚÝ›¢$¨î’î¹ëóS§Ñ)šþ\y©È(™}.S¸Y%äI•—$Cú¼%U3 SÕ†t¿¼|4 LI$ɬà¬B50mCÈWpuLD/¨¼˜Æ{åÁ}Žß)$ÔÓûÉwvz?@õ©ÛäÕ®èj.å&Œ«—(Œ¶%¬ÿ𥠨.P¥“Sq–Vùþ%!ªðió¡Rmºó–ÔoïEZb#_p&ÎŽÔŒ6¸wêè»tÄV õöLˆ…×ÙY‚÷²Æ¨•tñ€ü.… Dhe©êQZ™N‘ösVŸ’Wl"‚¥À·üµLà”îò<ížÝ4Ô@C<·0ÉadêìGÞ„¦îœ>Á€œ’’$W*zïm&ßòE¿¦HùÀ3'\±W˜ì|{œÆMßÑÀø†ÑÈ({»;¼Î@B°­9Ä?{ÈEpIÖlj1¼Z+!Êå¤{…¥Ž¡q‚Â|¢CíC¢ß4 t°Ø©þz?†º±y[5ì×8‡m+|õY뛪k` ç¨OúÊBaÞ²MH멱ÚÛt"U×VÖ÷*§ S´Ñªí¶†êt#4o`F|Xžu¢Ïæa­0Óý¥’£m”‚ÙØ‰(3ŠRÃùU½ -g:TÕ,ýöwi{J@€íÁZÓ¿ïô­ôÞ0jVˆ3Ö]]Óž«}2LQHä`B¤0²g"&woˆtý]NúD½Ÿ€‚S°¤ò±D#; Rj:Ù âå¿ßêà&ÁTfôPð^ ÒPÅ"°2XUíê¨Jaä!'qJllDä| Ð6\áDqˆŒÒcÎØ Å–wÿi[‘º[ UM$wm¥QÆÁ&8Ýe+ ô .á1¬$ÓZÊ+B™XI ©¡±ùqذ  †»t¢H®UMckäÙ00ÒÆ_‡ç*%¿·›ùº(`@Î@IBæíØ•ÎÚÑC:Ÿ\¿O¨F¦/ƒ¨ô¥…HÏŽÒC¬ºûû[z€)MÅC^qíBù ›ih8g4QÆtË ¢ï¿»dõ܉óY4t9sžý²IO!4®*ã*¥6CP70¹tyw“lI¿ƒ¿ùBíOäGn+Ò»ydËDº«F¼Ì×Çp*€Ùp–¦+<­Suû§¶­ªýZ…ÒÄŒ4/“ˆí)0)Lª®îæäî`srwvò™t©ÖYZ¤Ä' æÕåúS÷¨‘ÂaP Éî`ÉîšѼÊbŸgÏizŽuý#€!* rU!JÃÅ›+¸Ð‰5aP‘ÁäVÈ$Ÿ‰LgðôC˜È ^j[ Žê?)Ãé!%Ë)4òÂaî¼Õ¶wXv/(s.eiœÆ8’¬§²œÄm—Â'Ø;ŠáF¹²/ô‚!~¸ú%ùp³JàTDQv†Â€\ʱ-žrB¸6¿"D‡4ÅÖQ y™v= «úŠh{-‚«j_á¼Ü†ùSÃIÊEŠ»´Q«9§[Ø1÷^ì˜Ãм4Äë*L%å¯ñœÊm£r‹ò)·Rc׉¢¶ªAÔžÒ? ÷ï í~Õˆ^Ö-Î/Ø Ö#滘¡J$nê’Û÷Z!©ÂzG:NâQ÷Ž>|¹‘—ê°Œ¨‚ºKL%ö±ãâ§0ÐwzÔôR[Òm~æg´ ,ˆÂÉJK1¯µ×< „ÈB…[f É59•ÒüÞÒcï!îbï È<¨s ËÀ`J!lP"¼á-èä¨ý¾ºÒT+*ƒï °‚GÖ[,ë;â‹ÐklX„VX>…± $dã"W¹ÿ&Ö£ Á´+jÝ[õTĨLlÈËô>-/AUez®²cHÐ:;z¤ ¥Ë],°–%áìT&YP¡Ô`’î,¤ êýû[FéJ‰eð*œÇàM”ʪàÇß?ÂI*…ŠRø+Â$R^>&•°1—_û‰t`é¾°ƒ‚GVj²ä'1þj¨Åúš»ŸÍgWÇÀZ2õp‚éÐlCºwÎir T¡9$Ê'2ÐÙ>º%î1í3¸¾ðÿa¢ íþë?ÿ—ÊÏMIe!µ/?‘jÜžŠŠþ„ë/{à@ÆOr­âR÷3&¢§à’}„¢ÔáÏJ@ØÈö¶b£!ýMÐ!bghŽÏ&Œãæ¡…WSèšV¼ûíZÁ#'5ÙÞrˆVcˆ¶ Ïrsr0§p†3 ÓÀVb)§ÊÂÜ[CÓžôbáÞŽ?Îy×ç;Üü@o+Ö`Õ˜1Y1V( ù ÷|Ói2ºYA oÛæC‹1* 1T Ú¶ÁR€:ÑäAD! Žõ®³“ ,ÁÞBÙ`³Ó’.~ŽïÍrAÑ ¥(4ku¬JeHuWñB+qÖ*ï ÌG jòò·&¦wÛA1<”[ùz ± ´#ÔM(I˜X -BÞ¤= ,•oÅ©†W8ñÖÀ’…Àq–Ž"ž$½ŒïO u¨MF¥k ‚j»ŽorµÕùÕÞµˆØ)×ãhÆqd=<åÆW!BgQÃk>?9Z¸JQ„¹‘IX=È_˜Ý&¥žÉa삉Ù9ɪ* Íʇˆ!̃só6„¼|C…‡ð̃kó4‚‰aFÈÂÅ9Öü’|ç<¬Ý!¸I(8¿×dØêö °º’¾¸6Ç4ÁS_ÔdåÏ®Ra|,T”Ë'za‡"}´³EµiÒ®#£ßž:Ò‘)§Ôt ßÓëlÒÝ©¨àli —— XhØ¡U"/ØÁù?l J·I{Ò7Øž=;BLœ (¥Èg°IB2$¨ÃÂIãÈQ«:ú›#LÖëÛ7÷·k5†ôSáCÕ·g‚º’¤‡[u^}¸Z¿N.W7*]v@ÍGUAI4Ùsm¿Î°¢NýÄ1ª—ò̧rDŒêÈ3e/ßÜw5~üÆO!“ÎuSwp£M¡e8ƒæoipìHFI¥´è½ðl3jFŠÆxêmÀ‰x›–Î~æOOœÎ"Œ€EwàvŠáþ[„GŸv?<$$ÈÈRõí¹2ÒT‹6Ò¼f%p)Æ)¢²ÑAì0£È ÎiÐ (!v +¹¡¼ÌâEË͈e#ßV@fwÈë.àvÈI(IÃÝ.p )D§ºÍ•{^>ø×µ¸ÃÄd≀‚á4z®Q½ÂE¿qF'â-Î&L¡1åFTaÂnÈ bƒ@GFrâVÚE}Ò=ñ±p¤Á ‹”EKËoÛâ3)º‹1ª›^„öÙ¶Gól/gا¼Ç¶Eò×ɾ€—ká²à¾FF…ŒºÇídÕn­šB}¾}Ø8nWñév›“®§çrC ÇÕÊ)ÈÝÍ´+Ê1üJJI=ë¤Àõ™þ,¶`9 =U=§.;_Ìz|E~˜ô>_öãP“—y|~­0F2Ê+Š.:ªâ%sÄ£ š´MO9ô}½½R¦»4œÉ;~F+S9·ûP'¾`ó9UÐlNe™Ë©Ð™Y¡çF^úosTáS8ÕÄ ‰ßH„¼k›Vî8¶ˆÁ ˢʖFóâ²%Ÿ³4ù€e¼åÐøÔS÷¡ÑöÿÊš´ÉûO+ˆ¦Þ×Y]Â^r8û¢ÑPÔ”G[q .)ℯ4Z #Z%]¾¢Häó´)<š%ȨªýáÝ Ná+kR!e/úK¾%߇¨":n$3¤(w Õ’o”_Ô…réìd:ekä8.gBÌf‰Ù(©* v‰É‰Jƒù‹vß@ ³ä÷uÄ:'3Õk·ésÞ^üâ=”âÛp×½u¹î­Åuo'ºîm„ëÞ:]÷Ö꺷“½–fM?-1TÓ÷Á…—‡g±fQÜɲŸW·—WJ¡ou¹Õ˜ 0Ú2×Oì£L9„Ù!ÆË·“¶r@o5I%Ƽ¯@HA3%QbÏ V¼Tœ§Ü5Ö¿ðÑ2µ1Í–Å´áI®‹.«rÒ‰²÷öšd/ÞŸ±sÏh­qwT'ñ9U T°Ç(+< s¥5´Ô‡lJöðPPö\)”üQ]9õn}!vº•#Бœ¨ÝR&ÅT ¶ç#%ƒ$:ô±L„^"ÁžÊeÅ[:|‹~*dd -õQýëSÒ’±'9”‘jÉVa0k!à[eV!#ëºr ûA¾ PÜ¡š;ŸjTe»÷)l÷¦ºv¯(ûö1ØLˆ$“gYY„ŒÒl`ÎÄHÆlòHͶÑàÛÍÕzýõKòáêêVÌôÙî­‹“”ÎiÀªy÷R„zõ–眆¾êÆè ¯G™ÏŸò jy™ž¶»ÔEr&J¥ô=GênYÊþ\eÊUqùS½Ù‘rÅ®®sjG€B»œ¤ôø£6Ïê–ïËy¢ARrz’2˜äoaØ& PeÂ’Ôsà_Ö62… 9„'Û$Â2‹R"Ÿz’’'þõÕ ã›Kx²L&<á{”¸&>óÚQ•Þ‰…§qþ>ÐòôÃØs{ruÝž¾Û8íÄ6©ø{BHG¨b®„ s0!/{®r–‚&½ŽHªÇ01-J;Ö55”*z•J}j¤sáà\ç‡T0ì‘(´|S÷`7ÑphÓ“@c!—fö¥—´¥SwQjš – áÝÍb"'§¼ëHVHoþsÃJ‹óýHhÙ=4»[£¡n´I¼}{Å*¤tþöœ…=#FÐ_°·IÈ‚ku¤*œgª¤dþþB=5ÅÞ倦ŒN*¼:4jS:u?hñKZœ ¥pKøcIùè=·h›vùŠ\Ǜ⓬-H‰+RIe›?¦¤ ;õª¡œ?U&:‡9Þ¦nûîͰÿšÄAdTOêw“º¶?«®š=S²=êŒ7³ @*zx¢nÜkÿÌK¦L ~„›<]še„PIŸÉº¶¤`>;â?7Š^€SPd›¶¨é6)X³ûÝOãÖwýYWa7—‚~¸ÅC[‚Œ¼á!ï¿A³*hxŒšN‡V4-Þï²̵ɬ±ß½ˆI”á¡(eIßê­ kr×o/Khá?’ÊPðë„!m–,FÁ¢ÜÚ ³T¦‚*'Eè¡€[›C"Ê šþ1¡jç’ñ] ôcîEÄYXÓµ±¬·ÿ±ááê}Ä1°DVIVî[;Š{[iEÚÞ²–m¸û1€dÑ4u]¾ #©‚ ’3ª².;æ§ Æ(rNsÒmКb–2)¼_æt…÷ÏT«hšUþ¥0 ¨²67ªð'õHi 3´Ñú3ñ¶]Ùl ‡Ó¤=Äc †K¨5Œñá€ux–DCì’ísr}»J¶eý˜î^ª¶Ùâ6ê5‘A ’QJPHÊ}_ÀüiÓÂí0½ ëó`W óé`LÜéºi–Á°$åá]h|úJ :e+íŒà§/k!FRÖÍsV—Ãm;¤÷Õ?‡{ËBÝ%Áduy¹¿ÈŸš’_ººeþ—t»Î6gåã‘ÔÁ¡îÉÐsµcNƒ°o.ï žCÓÝ ê6Ð ØtKÖj€0¸n»Y4ƒ?É£*}x¯sÖ‡ ;¶ Ø,N»Âœ˜µÀO´¦êØT…Ø2Éÿ 0Ì)©Ùˆcõ¼ù²[1Yz7Û¨ðñ«MÆf>~5L˜;ŽîdáÝãMVyÒ?wKªfY°šqÃ0¢«ÎQszì†fšÀ©æ§nŠ¡ø+<kBšéÔ€+fî8JB*©swãn…5ûˆ¼úp·~M<¡ª^Ä',TGË;NÏU6×C¶FøËx…Ã{26ì±­+>K;w`a ¯þQ3ðÆ@6Û¨;K· Ÿ$Ÿ¬ÇXË(Ѱpnf>õ9t1„Þ’üžé×ìtð=Îü íIŸf¨oÏ:†S©«ÑÙ_,ÊŠ˜‘· BÄ(es]¯ù}²ïB¨ØÅ4fP+77«‡w I¯©èFSÕ4KB 1íøuQ;øâIT~h2 Ë }ífA;B6>† {,S7@j&ŠU©ÞØû8Ï vYƒ´EsçÐ6Ñ¥L’q°”+ fMZëš&˜dÃÿKpîØÚï<3 f3dZ—ÔÙ6žmX=a®ƒ[ÍNiTYd-&êh}ˆ%'k¸?m©šŒéíÊeê‰\&i±LÅ"N9u¦EÅÊ@ÿ¼¡g\¼‡Àcä-ÖašÂÞdúLå¨x‚2¡ßc¶©Ã±6q b²TùÔÕα0Î@¬É|!û 8¯Ø¼®ø —µ¦¾æ<\·º–.ÍXÔêÐÅç°7„ÚŒ-L³gpè@3zq›çXe';yu¬M›äuѹö5›‰_TÒf›‚µõnVK~QšSšm‹jkዉ!òV+M £=‚%Ž»Ë«„ãæNVàÊ}·†K‡˜:ÞZˆ*:¬,ØCÁÎF߬ÞÈN`o˜íïù+·ˆÕÖñ,–öå$VBZ· õxæ!ı/âr¼ÞmòcøÚ[Òj‡ŒÅòN—ÑS.Ç<…™2i^¹ƒ½·œޱͳ&5«øÊ°ùª 1®ì ™{4êÏ.­‹ï‡Zdm†jhÍZ ˆ^DzÙ4C©ÀEQ-ÖcÓÌ05ÊR¡¿.o( K›¥]?iÏ*m1×ÄcÕs@ ƒ¥œec¤‰š…†qKæá„šiöšç!Ž6.9‹¡«žceœ‘Ö,\Ò<¦êרÌÓd,æöi'½.šeËZñî×x+ÞýbÅ»_±Ǭøui+&df²Ô㙇Ç Ðb¼C>†Ú¬0@ŽÆˆ¥ñe&Ê…&eÃOVL1Ìòº”i.‹B:ïȇ¬öéyÊç´›6BÙñ¹|Ë‰Š§‹,t› #Wm0A¯QbÇ4Š•×0mBcaÊ9 CfÝR-l5‡¤ø¦•´˜£bÙlôù3¨«É ŠS>É,UÖgGSÓ¾òß"ñ…ŒkáØi9Óf•ö8àyÐ4ñ× )æÜ êP·QµÌ"k3PC#“4K^¢ÆM^ƈY½Y´èZ«˜¼D±2áZy´Lï£;¦ lý%ÿ/ñWŒQvy›mˆ„ÞèçíLó¶éBrÌ2–ò—N7}ÛVUDÏÏcÚæ»0Z»ø¯6*é0oÄšvAârßn¡,x¬GÔgºv°jÞ^×Q[Uì÷‘åP±YÁ@:{þt.éî¸9Ö]¿ù‘Ç•-SÎF_B²Ôú3ï Âã¤9oI©‚€ßÝư¹Õ,5F“s#š1,<þÕårFLÈ]Ðk†™)ÌŽ¥²cšª)æ°B^AmXj½”FÞ¡«,qhRVþ§ÕmˆîïU_Æ‚ yP†æA©åÁíKäÉé) TÔeÉ6³ä /_‹Î ôý”É;CÊbÓˆÓ̹¿¿]ìkþP4qóײ€…8…¸f®¤˜˜óùÇÍ\Ëvþî9ë…ùÇÒ÷³×È|é9O¾%p.ïHÚ^Ö^Ò¿.@úÐÆ—wYÆNŸ¢ÂJýBcF¦4ºøË2NsB+Á²æL°&ÈÌ–²!Þ„ °²µ¸E¹ËÒv·Ùÿ±«&Ì9ä-Æa’©<Ù›ï×_ï’ß96ùøÏë/Km5P DO'ÙŃ Ö§–DÀ5ÜÔy™Ü7|Šâ4îCÈYo«fÓÏpŠÇïWËt2‹,m":–\5Aèuíêr5wª¾>xˆFt_äî»Ü"*o„/ÉTB“§ÖCP³+ºáÛÄq “¼„1ŽÑ8>08dÓž€WÑþœüÖÑ{P»IF.;(Q'ˆ› gÀn~åMå·&¦üCO-Ô¤â)œôÏM>×Eáz‹“”‰äU‘¹ y[ »Ô=wäŸ]äÌ.…˜ âŒrů4ç÷Ò󥟌‰Ì\Ìaޝ íbÙ´Œ]o'eÒÛÀLzû×fÒÛi™ô64“Þþoʤ_'eÒ¯™ôë_›I¿Nˤ_C3é×ÿM™4)³è¯Í¡‰cC·´Ý¶àQáK[;©\† mªÁEIfh¨}qõëp±Êæ1/Ç>Ð$LÆ4HAi]&––ð´:Mù¶oój×ÅU:‹˜iŒ4Ú’ßóí=,bD\³É¹Ì°ö¿çÒæyw“Ó6¤—+‚ëhˆs©«(y‘é‹G 2/ÓçúA\Á£¼B¦ÍŸ,È:¼¨£(o¹psââÑ’Ìûç -Kg …3}° ã>ðr?Ž2ü8ãžÝÛ·eˆ£ÜnØEgôêÍ=Ûv)͇Fyg׬͹ÈÔ4ÉŒ@+ô—ãß5iŒåoáüG˜y/d]Õ§úÜ%kÖo}u¹~ 1ŠF•Ýá&i"¸Aä¾r‰hà\ãv¿‹¨åéXuxÿñz6Í(–’ÇùôM½Cã¤wÐR¼ÿ´šG/«O§s¡æãª!*‡’V‘ú6>‘¸DÕ+º¢ ·@B£¼!]/°ë‹›õ<ŽpFšt3‹*œ¨.‚²@eòü‚=ŸE{ˆBÑ"2(ñåî¸ ý;¬'˜ ˹͠H[ Ç š¸)¬1@ãÎ’—ʈºköEH†£¬)+8_׫ó©Æ1õÕxΧ9@‰:¢FŠ^ÅÌÜŠ¢Xî~êØaÃ…™·ù¾xŠ? R¸ÝIÓ—ø^Jš&™hÈs1#Ú"¢ÕÎþUkåþv³šM/l"„Û(‹Å„äܾ>¿“(ñ¥&‚Ó ì«’ç3s?b¦@9ã+òü;8s^Y¨èÉh-‹h øàõù !vÐv­,e`q85›®ªë&löŸ¹ŠŒÃê›Ow«dÀ½”Êr&è>È"ÜÞ^ÏŽ^cQ>«ùÃÞd²¥é3l^<“Oi¶éž«lžÝ¶·øl7äð¦®]ر­«âO¶ ùž í¦H™æä~ÈBŽ ñþ˜öôH“hé·ÏììÙøÁXÊ'DžŒç~ 7Î*$ž—ùüd×<ÆaâÂÁåËÉäé®îÿÞN‹…½Ág½"ã($ÿ¬×¬§Ô,jpÑlv]6Ïdó!FKR³á‚Ð6Ïò]^eù›ëõÕjQÀÿƒ×&_â€QÈc?-jó9?ç³­6_d·$污-Ýí\ªûÞ?7))¯î.ß¿ž»¼ç'—¥M_<@imû‰ã¢ WÆ:M} uÞ—vMÖûäûíåÞ™8wp1…&ªm[Ìqû,Ü’^7 {-äêÓ}œ¾ÝÑFº'ñ`šmȼ6Ê2.['¦´yæH yßâ qRפUE׃Ú\ºbðÕú~õz9ûÙ“ÐкA/ðÚ/‰¸ìç3#sâêZ•UŸ·û4Ë7}z˜c8ö¢@(¢ú54Ìx¹0!é‹{€žÿŸn÷(h-œ¼²g¶8µþŠü`q.zÒ1èöyKo~ª©•EÕåmŸÃÒƒŽY:"¹x½˜3k„¾"ÐYþ™#^@–ž;g'§Ù+‹zíd;ÓµBO^<ÒC‰ÆTñâ`¡v*È&~óloñyÀ³\²@“3¹L«iVŽ‚^ÃT³…uÑज™­Mc…-Ͳˆ*j‘Ñ ÒQøñaÒ–ZÅJsº;UÑ‘–‹ôUº™–Á»"Œ’à¸=ÐM¡ÏH§y6Ùý¾ ;àé'­=7}s›,n†ÖlŸ èB¦5iö#ï7äs9\lÏ0ž˜`¦ë=n“QIý^HŠI4Ì<”i{Š0T‚ãö@/‰ôÙLšEÚÅÐáš`Єgb¥sݦØ@Í‹`¬Jà¤9Fß'°ºY¤š·Í†nN‹ ­‰à¬H§ýmÅ6Ãͤ}îkÒ^t=\ñÎÜ”ÂÉK8ÿoë÷0ÿP'<9] 2‚¶.k‹¨&Ö²[Â`æ¼:á)³éŸ¨È6²µˆZMQÀÔ Kö¾Ø#€¨†.IÞ-fÙ.'¯¬ÒÉæ™ò>% fèh”´œ…Ìe“ŒSD}v1°nÒâF>”‡CTSl“õÄÑÔ¢{þûÅŠã¹ÙĦ9wÇ ÿe¡UÞj¥)¡wOHJÂR–3p¸’~Šuš°Ï´áv{Õ.n캔iý¹ªò2pëŽWÚg܀׬{Ì·ü^(† )6O>^™gn–“± ¬ Ð]'òW¸±VYÔT­ŸÖe€DÌ3­~]¿æº­öD,ì+{}ÙàãÝLW7ˆ„SÔepªÊ~˜š9§™$M¬W×FZ¡JÙíà8Ì’;ž4ß„Ž@·õS¤ ª”ÝŽC7Tð¤y&t] ›ãæj)Ü ‡™š®IQº.Uòµ"5s½þúz^¬c¡½?±)½p»T Ü&ŽÁ칯äUrWoaù‚–©+‡¼.š1v°=¨j•Š4.½¨IsÚ‹ŒÞ|Á?à§´iÄ„ÚÍJÜ'ÿ*ï^çx‡uɾ%#g©™ç‘à÷vÔ‘?L{¶&=;[1YÁ\—ÁÙ(Í‚Oß>ðÙÏyÔi8å‹R=¦ÅÏ— Pcg’â(Ê2ªeR ³¨[)ƒ™ë"(ñ„í2ç3 rÑÖ"¶$›B8÷fÖä¿÷ÄÿL+ºÍ¹-Ǩ$ïbŒ±ÈZlÒÑÈ%å¿}»¡ht ÅÆÓ†öfFYé6rAûÞm*¸_`Kês–fǘúd¶ØhÀ±ÈN‘0ÄóTq|•Ó…ìFYªÜû74Ø­yIJ%>&¤êþˆo³)Ô§™sK’’ÏyZöGÒM[ ‡Ô¼ç»ÅÈ&ŠÚd€5ÃàOŸ‡Kè&cËœMÔb—¦vÝ“ýüéQæ‡ÞÐ=7 ÃM’z6±¡Kë~"„“fÔÀTfZ½O¾ðÔ ³¯¾|¸#c"˜cª:º!úÜü]´r~ûxõþýßþmžcª´÷k¸Cd8ê Ððåòþݯ3iÂLmý1%¬Iàd9ÆÙ˜ïŠ.ƒÍ3ßVðŠøý×·ÿý¯gZ”÷¡Çò0ÜÑÝŸ÷sŽÞ ¯¦Š®`%4Š9.k3BC[‚ H€¹Ç-¸æ¾‰0ªoœVô z`$ùrZ˜¹\ YcG®àHÖ!j.•CíP‘šI㉯Ãì~9œ¦áù)ÚÃ9ïúØ“þ— F:Äu‡Þ¡]¦‹ž©Ð9MöA¸ÝÆö|ÓN˜*Ëçd—ï <©XË™¿ÀȘž2*ç5ˆ÷Ÿ_ÔŒàHNIŸ)XìˆÖ4kfðCí±Ÿ˜I’ Ï4€¾|6Y:ÍIÐg @ÿKNQ[˜-’^[Næ&f¬ÀQÜrÆMî^Dô,þšNE•f4$Ø$k4aŸEþXUMlª*¸A¨ª¿¢A€Xã“,‘}–Ð["^Þ’®|h¦2Q¯5üòöô-D€]÷é$³°7ø¬Sd^ÞÈs?­ôr>ƒòåÍxÌ·‘sêvaŸAþbVñݼeq*ú.Æ"LÐb5¾¯| 0OeN·«àôXE†_1k¥˜jŠ4ϧUlØ;ºÖ×_ #çÅÎímŽyÙÄìþDåp³¤>ÇÅ òÄELéû2ÞŽQÈiáûÒ„!÷÷·I_œ`#;޺ܙ»˜ ƒ¨„Å24Œà÷ë¯w -àtq+jo= iÙÍ_KëŠøvC'\ôö-bY3±½c†§øÃF† nÅÉrØh}'6)‡Qà±|ÅuežÉÕ©‘®P7“ÃMWìò™/w+éjæ7EPeä7,GF£JÙMá¸Ñ¾Ô@.mJ\ˆ"]ÄnĤˆZ@ÿZ’:ù²FÍ ¨8mѪOYènn‘:¶4œ?.‰¢aõƸÞ÷ôìÕ'­ÇmŸÙ„½iöHŠ!X–ý^|,[¸ëÉÏ©‡­²¨'L´æ‹ûç&‡Dkvú yu_¯_ãgéEFý°‘‚Ÿª˜ë”‡]yTV“@ 0ލ4:MRÕÕ…trœö/æÛ“?ey& •³Û6 ©…ŸXoOmh؆ @Ê&D¬Ùí ±ËŽiu`{uƃjÔŒßà3ÐVTºð¾Š|6*63:ü).ÿc(ˆ'qhÓSÇÂ}ó§D ž?S"¢-?¦Ul³ŠKâ.Õ°Æ„Öî\íRz޹“þÂ85Ô—Б×õÅï—_’W°1oÉ7G´xð^úz!Om¾iÒ¢à MÔí ¶4äž@úÜ/ÏS`lkŽóBâXÿë–dÂÌK(Ùë³,båHB£d!]ãúûÕÕÌ[ÖUÄDB£!]£hmgËù¤ç ­Ì©VØýœü~Ì+ÒðÒæ#ksÉè¹>ÓþZ6nX×ãˆ^©ˆþtýxÒ™+Š;u´"§8ŒyÓÝ!hkžVÝ5&ë'£ÉfÞ†új¾‰…1ßÀ硜­’ˆ&ÖˆHEGT<šº¸Ö€KX±®uûiš&f·Kq£xêôAŸ¬*tCMÆn¶‰†[°X1‹ãíaŒrÇ’Ž"”[, [1î:T7ƒd¤tˆB9³ðÐ?z£j‘!˜2bìQæ†0¡tG,F”¤ÆÊû¨³Ø‡‡±ÉX¬±…ÿ€„¸~ ‰ô¤ §ü¬LÞ¹‰(‰¨vÈÓa-žßîüh·›ùsŸnC¹á£±þ÷¼ÝæmÝ%šïpò–ˆÞ° ·5{Ä”ëü&£©›·ÁLG,F“¤²@j_Woåj¶Ì#Õu+.0·ÞÖºØ ­T Ÿt $® Ò,]#¬ÎÜ-ÐÆ w‘æOù©é£†LYÄ ml¹á‘¡ÊEͲî 7I†£VPÖjrù>ÍÒ¬kÊðBeH &Œ}Aðòêòjý,Sº TXøõe\¥.ô‰«š^*ί,›H·!ƒ˜œüÞÓPÒd BÚ&¤Q7`Ì€ËDzºï¶œB¼-Ø·¼#ñþ–?ˆ`o·PYé:ÂêÃ]2ãêF]ohOÌ%ç¶lìŸÝÒ_ôØ1”@K•­šÔ¾ðE ¿´Û2 Oíûzµ:ÉK|·u}m~ªƒ.cq ºmbP¾7˜þ”kÒK”Àðïˆ[Òm—üusð²Uó¾' ©hȦjØM a[…‚¦5&T4ÖュJÓEŸdevµŠKÎf„Ħ]®X ú´yZžfuJ«sZ’F(j¿Tˆ¼ÍHDÂØ ánNXLç4Û-zq;šcÚ埘Ua›U:\ï ‘Vƒ·ŽBú1}^ʺ 6…XòñÿeNîü—;¿8s®¤‚B9+Dž¡q‚M!–¼$ÿò— ã…Ôä ‰úDà/÷«Ìš&˜™5™A¢ÆlµšÅ¬ëʘÓ© Ò÷Яoi¾Ï#ý˜o7Ǻë7Ù1Ï~lÄ>ÜÜoÀM²È°½ÙëÛ ° Òš>îžokp,«Ý")ºÆŠýœÏ—v["éÊ2v¶¬CĺêóºFâtc[×?Niû#’3&kç® -õ‚Îý ˜…¬cKLslDßà±T•qÙËÖ¸fZý˜î7lõ¸L»æ PmR!Ô„ÏÅn—W|';,Â^¼Y÷¯€’ð©-mR–'¶~Ï·IÚ4åpNÑ’~P¹LxSPÖ‡Š^«H^Ç›ôÄ :¼;o£ ŠŽGX Ä‹±®ê¦g£B˜m2:{ ¥o»ü’@qw]jsÓ³–•¸r›_]n&†§©}×9+g9‹—}!Ò ³ˆÐ…j1±4l,²ö-J{üQÖé.!<­²é« V3f8-Æ]š£xâO\®œ_|e±Yƒ^5ì!àÈBå;â[m‘±‚±Kæ~ªE´ýKáHzŒº”ÍŒG ù@wÍ@“ÉïQíá% j]Ô&ˆ%jÑcÑÅ58’€Í&€è%ŒŒ€K8Iq#N–‰®?y(v¤î¼úýf½z=ó¦ B‚_K$úÜÇ<Ý…6.QÃXlFV¢}÷þ¹É»á^¨nün¤¥¬œb^]HKÁ©oÓ N”ÓM£sî=UF]wê³™ré)ø‘(Jèl³úÃŽïc!ƒ÷8Ó0Q«y 8ÈD¶gföy ”Lrm·ðKXÌðèöl—éLl¾Ýê•hbâ£ö€ÿ=6_8$Ý׳-5Ô@yð×¾›áíaö !·éƒÑìnÓ‡w/cý|ã§Øhú\‹clsZaöä†Ú¤ôÒh ê½t|àøuí`qŸ®UÈæyËMºx“#ݜ硄ìü<ˆêe£26û,óbc/`~7{(µiKzËyu;:à–´Ù£`‘±ÃP;–0Ø|ÛÆºc—.e³iÀiöHµ}ιåGÞu—“¦Í¦ëÓ>hW{ˆ¼fšKBŸ©`´›º }UŽxÕÖ‡sžüOšØÀYüÿI‡Ð¡ùîõ‚~€Û#*_Ðü¾d4o¼/Ïy_×ý1¹­“UÞ†‘ð’f×ÕÔçv®éè[ÌWåt°Ô¡aúyxRtÉeÓ”95þϼգòu=®­û:«ËŸ×Ax-âÚËU7ú þèk+~òW‰˜)ƒÅr |zÈ'ì÷7:e$€ò¹ð…& Ǻÿåo›´ú£Ù¼=4Í&ËËò\EìŸøJ¿k\/ÑööÓj•4çmYdI `÷‡«y¯V·w_^¿œÏŠf¼Xö¹É—ñþÒh¿i¯1¯®¼…Ôô!-Ê”_ùbþªÒ"xKÕ„×EûhxåjLþ!, `±/`BíËåÍëY»ÙChñ•lº‘a¹‚e{m¼ÛôÙܧn¯ ÈsZ[§'ÕÁz H*dÖ÷F»Í|“+Œ ðbîzÈ«sN*Ài¡Âe¼/Ú=ãô¨aЄݹ)_¦ ù£¡Áü7ÃÐøy¶g/qöûuæÅ±é§E õ•ÑNR^¢ß²ËÓ’}[äÕ®|fEêå|Ô7b!f!™oŒ÷ôÝAUIüCœs“¼úºþíõ¸”4ãÈy-ˆžxÊû¶È–q•ñ¾hGo@vŰ„—é»™c@Ç«¢¼ÐYFƒòcàQy‘Eˆ~IŒá ¦™LªÂXhúKýAœ‚ż'Æt.©YÿÏzÀSv¾œÝô4X\¶ˆ×ø­Ö5£i2:$g’bÑBŽŸWëÍ7ø] É{ >†v#êý°nûêŸ î5B%bYÇ+í7\9Q¡‰±|^ä`¢œÝ64ÑREØo(¿ÙHÍÜ«ËÕï—+qëÑr†ÁÅló ±ù¿‰’Œ>Y—¼ú­‚‘û.¹?B Ùän¸Ñàõ |ÀH«¼ß0@Þoý a µ|ɦ0Vt.ÿÕ÷ËÕë™Ç,¦Ûa©~î±±£FvKNú=»¹3ò ¿Á²m¦˜XÜžé=fÃ5ãân W¿ß\¿L[ýØÏ+åº|€+z¼”ÿ~¿Z¾8?ös ‹0ɶŸï>oOEÅ>;¢PK»×?±XûE÷Ó¸HB´|­d›'쾺!nîv6ûfV„¾‰¯½-ÄdÿP¾‰#¸SÆgÔ]ìž–"ÇÕêöæ.ºÏn-ÓÂðG¨¶Ýl΂£ ¸Ùì~fáý§ÕH—…mž'ßèu ßê3<~õñÛ·× …}š¹ïíÔ0# ú”¡×/$ì Ý2Ë·ˆèËí¹ª ûd2J4Jýn£t£\Ô,XNQO¥TÙ×¼Ó¯÷©’«¢ËêäãýõÀ™n™ÿöa}OªËBÆ]ýXÁfzA ;TRÙá<þG—°I½i!÷ùþ~õjýÚävnB™)HK£¬~kdN¤éˆ`¡õÓ²ô°QQ#þœ²¸a¿;ª·ùq`©CîAh~q¾wP~HÉc G`L½œÀ®†¢:^ÎÓ-)Á¢ CôƒnÔœœ+3@\k¦œ»‡ËPøKN¼ðòÛ¨ÞlÏÙœm)ùTׯúª¬Ï»dÍä%:pÅW›gµsS/”ÆVáéí ´û †‹{xÌ$uýe­ò\a€d2ãE&vc„[¾É‹Æ©\FÍô™¤´^çùî<‹{ÃÈ“où4*ä÷‡'ØfO~Œ‹§y§(N‰1’ Ï( Ò€–ÅŸyòéê¯ "4-Po*òƒôòàs•ûtZðAùdƒSvÜ)—Ý;xUŸš3~`ÀÈ“OW+…q™nó²óÐT@#7öXÊ¥ŸHóµÓs‹¸ì–U½[ŸÎ­©o+ÿf')€6ó‚µÊ[KÞœ _ £NòÌc`Ê?u;ÖjB|¢ýáWw7Ÿ^«ÜêUÕZF÷¼çÉ !W¥šHúC#b4ާXü:lìžÕÖžÄV7;Þfg¨mvFÕjH›_tìøwÑý°ddW¥Mw¬}¦j°Q±HКa·HfýP %¾uy>idúÔWªFÄH<£ÚùM^¬=MÈÓWdxÜ×oh_ĖϤCÕ×uù‹S¯ªÅcvüjWôɧ/_ï> =\ÚK“•5›´iø^SQXϺ¢‚˜,u ØÅº,kVÉGýFA¬§äª|'S7ÁmJºÕ. …=ÒÒ-_Î4yÏpâ U•Qqøã áhÒPxûs>!‰ ³fë5C¹é@—Œƒœ³Èq‹¤åc„,' z@-.ÿL„޲úç0.Z1ùfHXI9óÌË)ŠŽ› ’W¦ú zÊÛsQî6}[!£'¿ØHÉ´{ˆ¡|$òÎ-å¤èÎÃ0†Ñäü¼°µ‘ÙŸ+v$ûs#þö\È 4²N«?é`í#‡F2dž(úˆÛ=œ»ì˜Ã£vóõ6ØãV)§‰³úöÿ®·>vÑÄüœ‡¡DȇãG·!MÖ9v’EF£££¬ú'@ÜÌ"Iùø ÎAH°ñò°=;¨MvÈHt0”Õ=— åä’sv;3g¾…‹ã䡃d›“ù¯»,-?UN)„“г{iÀùHFóóSÃ<ææ#l–3ªÐ;DMŽØêC>RyO±!´#òÛ.é%íÌ÷hΓè†1EŠA8=1ÌœR0Y;Yís,6jµ½pBq@DýÄC D ïi”ÙÚ …‹"ÌÅECÀ$6Bìm±ó‰È_oaãõ;ÉDðpQÀ†ù6½ÃÄSLÆ B&æ|só‹È(LÆÁ.hfÐM.’—’cç1D¹bóŒQyéEbh»ó´1oi{aL6ÛEýÄÝ™Ï{å@¶XyðSä–§ B¢&Y lu-[uuõ½µ×E»¤—´³8DsžD7Œ)R‚éÍi&^a¥×h0sÂË÷ŒÄÿ†`› Ðt“fYgˆµ|°?æiÙù#1…Ë*h²6¡V¯¦Ð+@úéF”›œ‡¬³„Dq@3„!’õ^Z}ßÌÈv§4BÇÛJðñÄ”—pw™˜D*ó`ÒX1 dÚÍ++]laébKK7ÁŠÈòÒE˜.²ÄL1a2ûpâ–RãeK·ÉE•SÂä'a¬Î¼9©[2uéˆ|7lŒœ¹ë#ÃÅIÉ+‡n±³0*0!„³;†ÃÜüØy”I,MQW ìeLwø…ÐŽ)lVI/iwñ‹åÌv?·s\޽Âk…"fÛzÙÆX5=G7ÛžCLšeMœ!X3•ý$ÖAl},Ýô¦”°2T Üä"yù(9<åæ1ìXŸÔJ ÒÇ©x¯ ï9<Є)Ž ‡T"ùO¥ÌÚQJ9IEñqS±å®8æáLÆd£ ¬®Ys”›\$/%ÄEn]¹Éò"g±c—,ÂCÛוW#8ˆzL6ÛEýÄÝ™Ï{å@¶Xy£ØÔe‘=GD ')]î\Qœfdæ›RN’¾,ãMÏÏ Ï^óvÊ À"†PÓ€v¯ @Ϙ¬E¥œ,ÝYL2šŸŸ–·n>}Úòž­oò;K#òØ-m2µàG Kd+@Z‘ûNáþž“’SèOeL=TÅ´›WVºØÂÒE––.ÊŠi奋,0]\‰‰3a2ûpâÎRãgÛÔu9¥¼rV®#ÒãÞz©Æ ]ÌM4 ñŒ§ÀΚ×>J´›1µiÀ…­D5¸Ç™ÐÇñ•Ñññ¹Êp(qÔ'²%l-!,ûlF/¶2ÖàßgMûøâÊp(qÔ'²%l-!,šjs ’é¤b·²6<žþÞTŸ<ÔŠø‚b‘²! °Ä›0™}8qk¡ñ°=·%½ ¦¬`2&Geuéomy—6Nj±sfu¯8J6Hþ9(@Æ÷çªÊãúƒ1“”´º‰”®{ŠóÑŒÈD\ÊIÒ™•Á£éù™!Ùj£SõiQÁ5å¹ _îpIÉÄPœ# Eyå©CÈÅÏ*&„^,3/)4Œ‹IUïò˜Q›[c¦!í+í‡ <Ì×Då)*æ¦éÞÊ2ž`7lsF¢Ðòèé,HmHæ:…FZ8Ìê0éó¤›b@¶ºdÌ/’š’•.*"®§l0DV%iE;öS0‰oT`­ʰ½30¿=¢~îž­ S¨OcHÝâbIãž÷u·×-5²´àâ¶ä"/‰fç'º17îȩýP)úx<\º1N—²SD!•LäÈHJó²ùºžÙ¿¶SˆqD'üpbMZÁz\q²M»°ÖÚ)$QCaÎ+]ææ’Ã;ï}3~r‘¼|”,ÎXyD}rB&§9Ÿ]ã™èþô¢¨™ä"yù(…~‚»?ÊÈZh¸È.ˇdšoa4¡ÆÉâ\\4‚kÙed ³ ¨0ƒ<5JGÌ ÁÅE#¦»ÀM$(XÕ?&Û7LuÚ6ˆA.03t,ÂÀ½cËJ P·M-¶5ËÐÅïóåW"¤Y&ÝLî# +±r¡±xúwIaW åbEÕÍÍJÕÏ®6Ô¯€Mý,Ñÿukt÷Å–ý€½tÔ-'zÙÖ̹›·oÎlCJHÅEÁ#%Ù¹éçPq1,ÂÀ»ë'¨Û¦Ö²¡GѶ™Ó¶‰Óܼ‰ç÷o§íådSIÙlýR¥p[t=›…êÞÈs…ì¾Ü;ÒÐ[ÄÙm®ìŠìÕyK&1Þ8Öç ² „q‘¯×y™“Ÿ§Ÿ@wYtG lÎe™œú2‰‰>®‹™ŠÔøS 7ñYïÞˆÕ¿fB#üäR=¤r¥ù‰ªc{¡’oçí3<“b½“F)ð<Šjzã0ü'ò=Hù)Íï49Ö]ÿ5uÛ+$hÅr*£RòŒ*»®+¸‚›*ØÇÂT}¾¿_ýDÿ»þ jçÇûUÒ×I¥´yï‰-%Å"BÔeòØÂU¼-¼˜4tɹ*ž€^,ÝKÍ}ÑÃg{ï¾\qÃcª÷[žîháyl âY’šdòÊŠN·2M sgÞ”pu½ïÓ6O^ïQǾfž¥ú`“K}î;YבÔÇö-#[°5U*Ä]Â'ä1¿!»è?“*?L¹ÁéX×?:?¦0¡ ®T\kDºÖ¢ëÜך0E+M Z¿ù£PIŸêª‚¼mq³ê_¡†õ3©—ue-i±<ƒP ¨(åIT1¬F¾iÉ#Iú¿1€¡ü1ß‚³ýR;\!¢(ÂUº´ÇÒžhmJÒ-)è‚°ó}H­h”ÖðQÉ*˜ RH0­eÞ ØA·šªW¿Ût›ˆ‰~©IЩxC½š0…€ÎõÍ™ö÷º7;úá¸Ð¸®†z¿ó5”¢\s»a7êü€ÆN‡J»h­+:PÑŒ¬ÛؼÍr¬4Ò¶ð]¬í”Àˆ ˜†Éw.dpmϾž$‚Sx±e4BPÅþ™v!ÁçÅ$|&J! O—Øœó'’j~¶Öúr˜1’õq§h/Éÿº¼Ü_úƒm¾MK:ÉFzÞýÙBÏל[°9lL<™[“»³Í„©Œ uai(Ó7×9ü“ÀãŽtfßÐ~ôh3ýÀÁC]žOy¨’`IÊw…¥|\',M2¼M÷³Ù¥Ýq[§íÎ¥Ú‚åÚõT…KL†DŒAŸòs!4°ÎA$ã$DªÉ¢)χ¢ ` Uí, ÓÌRºä¡Hú"+ ‰|.·ÎÏ» šÙCy|Yu´©4­K`軃 A+³¦Ñ§ÎÐÅÊønÇ*Õ©~zä?¸srL^üÀòkW;˜iªj>Ê…ºL†‚)Ãü\Ôdœ”ªg?É1«[gΩ®”?dã¿s5> ½fø2Õ玴"}_T‡Ñ¼cê›éTLF•}¨àëõS²+:ö¾-p´æ1/Çž Â>_ҹ̈́ß÷JFДœ;ØöÚÕt~8«O'",‘£—¤ÓZåUÈ!X·'cŒùHÖ†FîsÞÿ Ò+LFASχÁ)`ã‰N›N ¹/ë´§»ž›PÚDªH'ÛYÙ~ä¢ÉÍÊI7Ì­ +Y̱Ӹ†]+d+ — rϤùרQ) ¯0ïYn2Rg“*kÖ&†ú Å+äTDA!hçæ; Ž3Œô •``€F;Z¡ç Èh%Ç¥¬Ü‚iÙéóâl3_B1"h;7ê«Nª¥§ƒ}Œ$”Bž[¸´9|ÓòäúË:! /Ì4†òÄÒF`*%-‚¶<ºcþ¡ˆ02ìËZ#´BMN(ì¼{`áVÒM0Æ,²º‰…r²ÒqrÑgŠÈÅàú‡â1ɵ‘ €L›—¬u:M²%˜<¯4× u4­|~쟛<²"ùþ±ç¢NºQ…R—°’ë˜8¹vG:‰êV®²”15ˆÉYùúÑD£ìb«·‡\0/;%K'©lÉ*¨v‡D<¶aURjœã;¥½ÒÂXñ™œÀ† frzDêóBêÛ — ƘE-7±PNV:–bµ%ÝÆB·'óÒµw@JæêÉeàßÏÛ¼­è´nC†ùô|`: š?æäZIu[ÿ8o²º,‰ÿÚ´¯ßR+Z3ÒåiÞ1J›&‘!Ô;Ÿ©¨Ä‹:Š¢¬ioÁ?u‹†8ˆ/ÞCÏñ!×'€y®ý×þ¯.‚êykQG¹‰ð³qmc8ªÛŽ¥ Ýåmvn‹´L^¯ñ•{ÒÏÈŽ©k=IEpEìÙ09—¤b7LË}f©£Žú”oÛüq“¥ÎÛ‰0×'§ðÅì®OËò͹*د“¦3•èÅTRm+µÂ±©805õÎ}oL3²ç;ßîÉ¿é gÌ¿gIe•?oÓœÆb‹³ž;Üœ‚¡„¾Àüë3a4 `ê•5ÕÐŒpÙÿ]_¥î¦Y…ì¡\Yijñå ©1›mí¼yÆqÃcªâ=üèž»>?‰ÙÔ&Ï`º™í]‘’Ö—ŒþÇäó*)n¿&ôF;òUÕÉx?ÛJ¦ã\Y ÒÊGÂ×¸ê ™‚ký,ŒA]e{g«¥ „núŒ}~ù«ÜPÂs†ƒG•}“vÝ£k­Jƒp¥ü!ÕÊ¿ôt©•oo#µ|›v¤¤g⊪çK£ÞÇlê=4®#Ð8’³PӴݵŸÏéc^ðÎÏ÷Õ•¢¼;UÞÓ×nT<¤hjÅYϤÞ'ë»/tK'ÉN‡ulÕ~m}ˆÞ€#5IýŒCïGù”ï M>RË€†w0Á8È ©†•RX Kñáö=ŽS|lk) ¼Î·¨¦cF"ãâgrùû:¹¹¼ÓW×+õyï籂G½j²L¶ˆ ” …È] *¿OÉǃð )¸ÄGŒ ¡XÜ}¼L^Ý˾¸øHRIÆ\*öuÂd».4„•oÂò/¥ÕÝÆÜÓŠÚÑ(oußöâ´Ý4UZr~BÂÛºŸx™ú)è_¬<+cxxm/!æ_P!ÃÑ£w´tJ‹oó'_`¶âˆD»ŠJQ°h6ʵ\”EÝ–î ŽQ8E›sDšsG™“F-@Ï¢> ˜âAæœæÂt¨Å4b-š©OàÅ\è 62±çw7ä’[ÊÉÛõN¡íÙ¤¦AFBÃö4-KÏÊv´"…“d)ùÜBWg_ÖN]°Ðª'³±(<"v 6Ss'` LØš;dU¦=¸Gá××?òÊCKÆŒlèÓáHû š‘põ[’³äkAÎ GŽÓSÔ½üôš¹y—¬ÉȦoϧŽ/–y îÇôT”Ï ?êÇGBÎF`~nJaÏÅRGGs° nÜ3Ô·NìðÃ<áôKÈVÆœYê0ùEÍ`f;ÔvÛD)ä†ðÚŸÉç >Úð`Vµïô T¸ñ$…Ÿc%Ç-Ã3ˆ#ÊOâ&ÏíNå”›Ò_6{2†"ƒW1ÉÙ©iJ…%%<ÉP쫜&LU9TO®"ƒ6”k–4>m¶¾zHhe]'è—E•',fÄ·söãÜ%7WÿJþíoû|¾ wÖ=}v”; ä•|Ó›‡Š ñçî¿´Ý}›¶ÏÃf:à­TŸGÒòœD3@2©á$šXP’OŸ½;ïI¾íqœšg/£æáÓ°.ó}›VÝ~œ'öº¦‡ó&xÈÛ¥Ó0#Ÿ±³vU—%œh`O(Ÿ L†i&72'ªäj;<Œ,ÒåÛ`Jtd%'ÊÄnÓç¼½x;N¯EW:Ra¤_ñVQ/ö\¦òŒ xY绕cy•»ÆGj„HŒÈCÅC·×+­ÒÅ2©wd[%ñaÏñG‘<?‰cÐõ÷9ôÖÚ<ÍŽé–ž¸å“±A«\ 8oQdÞ-[èÈONTfìèóäf%íÙŠâG?î>f2HâÄV´­=üiÚ“Úv %ßèL…ŒtôÑ=@ Ïxhíh"eZyˆH‘<”‰|¿½ü§|צÙf_´'8/í¢€9%‰Òù(þ`§ªÄ z)Ø›3“îHk_Ý|\ÿ”|ù¸~­ñkóݾèŽ!=^f«!”¡Ý×sñuñžóh5åx" ¸þvy•|ýp—|cïH.W7•°¯¯b‡ãtµþK7ì½ IŒãz—eMo‡ÁŠÆHŽˆ%9úf{l`Œá0·³A1wÄò®ikèÂy™º¤dÊ(Žny‚3ôoNô#½fRWÊ'vÅå^­¯VRå:ÐZ*HWšºSÔÑÚ ¶“1OW@&ë÷W2…sU°¸¬|^ÍMÆ‚hééÃü$(Ów¬MÂY ¬¸‡~*„ëçe¯\]V'7wW iäv´QJ©&ß>¬ï¡TIºéÎù™”B/<’µ®OiÛ]ë§ ZR6M™>oÝç»q¤P§¤±Ý#¬ Â<öT×é›Ü6PŠ®aŠ{ÐCŸ~vÍuêúzسâW(Ã4AU Hº“–"«¬<;Ã?©®=ã»nØofóYµø\hÂ}£ok…%Ê3èæ1w ½>DpªÊÑ‹×ÏUz*²´,Ÿ¸\ú¶!ª%˜ªFcÅùw>”¥£ìŸ’Ä ö§$±ÙU±Éi[»ÉʽÈìL€r žU"åàŽ‡'Ý¡äŠâ^A’?Á—‰½…M°Ñ÷në' óPÊV®~’Øì;?“}‡±Øwn4GÙô¡“oFÏ@),†ù< ƈ|¦sð. ¾ j¥PÐîÄ(¬†)k…‡8\ÿ˜ò¼¯…@ÿìUß?#Ê{uY<»YÑ¥1¨ßàó«|O«}y~ÚmCBÐÚ°5UãB¯ß}žÎdðD Q/5Ý4IŠ«ê’¦.*1K'ˆ˜ê[Ý úLþu~ŒFJG¡Ž@Èþñ"߀ÁiTô¡ù ^[9x‡,D¥ Ôt²Xf ôwúKÎÚCAò¤Øø† *D¨dÙüÑcžþÎÍÓE…/7¬!”Ñ­¼Î©;"±‡²+‡­ó$ /oþ%é“~›0¤Ð¨¤Y,|“÷Ù>m ½Î°ΖÃÿЇJœ¤DÛŽ¶_÷f@cD|ãWiÐpí+ aA‡,iS„1ÑБÎyøHFB…fu°ê¥ƒ8á±wÕ‹ë'ã!¾ýK%ph|Ú©úÐh[ke½MËäý§œêëŒ|(‡²+³P´Ìi¨‘…¾Ê†¬­ ;ÞÎU_H ßD€’IèS£Ãñõ5Eµ·Šj˜QqÈrU˜ùA«Bnäâ_¨"æ=±Ò(µƒT:;un¤(O™ï‰•¿{ ŽääDsí쉥·æÊ¯ê"8uNRÝ\VoÃõÖ娨EÆÀL|á±·N½uzìm”ÇR¸¢4˜Š–˜©é 7X ½”Cyœy˜ e ö«ÛË«Õk”2r2cPÀ£©F£ŸY5b‡§Ü>=„ºÔÏË¿Äm $&QKܵV®ÙçÛÇÊ@JÌÆ4­g {¥î¢U$¹n0ˆYû VÇ_k š@¾á[Úá9Œ¢5úxS—”ôn ÝŒåÑ`½·6NV÷Çû÷ÿ®%1qî*pé­zŸé#bÔGž)_ö¬&¥ìËýÊLD¿u fZÌv…0W‡nTÀ¡#³˜ ̼[tÄ&|‹‚»6øæ@TÈHÛ” Ezè â4•lc¡ðmHP!# 놟ëA° ÐØ¡*;T§ÛÏíÞ§o@HÚÚ½¹æIÇüHÀ÷o‰::1Évzx<µA#`60"FÁÿúfcâ +…ÃôáðÅ¿¾i4‚ÆÄN¦3g\œ |üƒc¦²±I^øÇÈOmÈ(ù©ÅÇÉOJ˜«\Œ’Ù|M·‡Àa ‚”uÇŒŒ‰7­„ü².œSç"¥4øY-«‚cR Z¦9q\za­á@ Z¡7mè 3´âŠ Œ]][¿9A6àÄgŽ=Üqž>ø}°M<©þ»½üôæÌ^_¼?Óƒ"1 ©¡X…®6ZC¼l¦‰ü5ó³Žñµ{¨f"ŒRí£>½D‡Œ“ œB]+©»ÔØ™ÆF!¤x×YÀù…5g@õDÂÕKQÅÉyŠÚ¡é N üáÇ.8;qNXë2¾Ða2¯Ic +ÿ@CÉL¦6:#›îîý«΄?”yˆ’1mº&UŒnÒ€ŽœªR¤ÇÛŠmžß¬.µÂ¼Öã™Ã;vU׿Yí¼Ã,†™ˆ`á]Yª¡öϺÊýJ%”¢žÛþ’¦ªóçÐ0£*#8‡PD%ÇmšµçÒg”U‰LÛç÷—W $ª=[‡ì˜n“‡…xn(ñŽSUY}‰¦#}» UȨK: Ô¨; ·‘*jT#ZXDOR•·YêS%a$EðSs KÖìÊ€d}Þ&WÒÕ€^¤nÉP_«Ý™è=í¼Dd”L…>Gm&Ib4‹i )?ÔÐm-E2¤ZBr@µÔ`ªz[µ¤ªjéûŒ©Q“þ Z´BùžK_Í—1£úSB-»Ó&Ýí<–¨ A¬Œ¯W <Ê;~gZ©c±u]¦mA^Z–çSÝ™G¯‡·6mݱ’€:3HÂÙÁÜPŠßD«Ø{ {„J±×HHßíA.Q`* ÄcæLqH! Ì0YK¤Øûc8›(Aexn]iàž[:¡O:–4€-õéë%ÐÝ|”7ÿ7°#ª¨Cˆ˜À‹”¤Òùÿy{×Ý8re]ðU``V{¯å};œ¨%»[kY²ÚeË=¿j²ªRUÙªÊÌNf•¤þucæõΓ ƒ× ¼¤ì}°Ú%ÆGÆ—L&¯ÁÎaÛô:âÚHŽ``t>GmÛF¬mΧ¢Ñ\T*zCzħy¼ã?„<˜ãCΡÌtŽiÉÒW§ø…Vg`Óu¨×»¶Ã]ñ$ ì“ÚˆÖ%åJ b“=z¤1å•ÏJUÁã:âM.ý|¾µc߉ËÛÏ4T+v…‘Wkuų}ƒëAÁ›´ååV/$2`UêÁåö˜ä–ýÞ( Ç,iÎåo×ûÔ,%Ö/.¬“1C”"cÓÕ-;ùùe€æ³ø$¯V­Ô«UòSsR—LŠ4R%³þ¹ çÀc߯SsÇèc´^•*ÝÃÁ á¡yžàbW,ï?½U1ÇÀ/¼xjÈ$¼×MpÖüj]CìµKGËs”<¢e4 ¯áÈ5võ‡FÛUÿøç¢’6°–ʪg©¶ˆåJ5¤àÒõ0ì•Ï@áPé?÷¨?ÿ£éÚŽ-ÿèWÙ†Ã*žԜф–½ÿØŠci*ã4$bŒ_Æ£ŒBD;î˜þHiÊÆ$®>GÐ µ§ŸQÝl=ò1ª@·tuK‘êdÄ5<&Ãïõ§çJ •³5]Â*¿C+Þ?Ú1µØEb¥›'kä_¹[ØØóìêó9¡ìØ•˜k0¥ ²‡Õÿ8v-„§ÿÇ×âÜ\•§)&S6B×4€Mft&`.—ô¸ ÷©½1ÐaåÑÉöK “y‰eµa%xlJN’i$f•?IvßSìœÀ+•“b)VeÖÖN5UY–…f×Q0f:ËôzNU–zÇÑ1šl&Ï¿ws*ñ]ºcfÙ¾Eö¬ |7«ße*0y,_½{AŸË§ðÇÿâsùâ§*zšÿwÏ»=AŒâv^½osÕ>Ç»¨³æÜÎá4ˤ{ÖgUd.Ã:isÙ–Ñ…uêï—QOöY °™F "˜sÌ®î9­5aç@"~¨Qzñ‹(z š{Þ<}Výf/(œÃéE†ê2oÞ®‚Âaí» XâÈ>ðF\ë ‡º‡œåáâ0í …=bÎõæø 7˜Ù%/d ßÆÛú9sÿ19ÅÇ`F£Š–ÂC¯-ˆ>ß^T"”–¶‚)^±‚A–‘c,SClÖ;jÉ‹*¼v;Äf\=˜óg „˜Ã«Ü@¨¤÷Ë­ LÅ?^µAŽ—Ä™ËÓˆ^H˜óZr—B”O!˜è¸c‚&'Ö†>1ßûú—Lªß*ˆ‹ é—ñðŸl a›<ˆd å6›Ç"¶¹QhÆõþYXõ¸k×;þiÿylÅå9ptC&«ÚŽ+n‡Un¯ÃÇX^vŸã²=·Uƒ½úç2>S_ýѬ'·2[­Äê3[«óÔ¥5yJð‹.*}¬3,Â> O›­‰ñ> Éè«M¤ª£’I¸}¬XûW£¢÷\š8yoªÏØ»ç8ó¯ÄöÍøFô+—[ÖL)D!~¡™ÒY¬ÚÚ±:ù°ß'[‘ƒPºdšSó*é³ 0†T€ÎýrÅתàd-¥‹†*¥žP†÷3I±. i^ïûú!ï6FjÝŽLv"üqùüdsཛFåŸ \I0«Nmm±[(¯X>>ÂÛ¦œ¤—ƒ$«1³HW:W ûœ¹ ô¸ZS¯¾ýòqáàÈbÆq~qýÞì¥["íŠO ûeÝuý”óÕ+ZصK©€Wˆ‚#*ÛÝÄø§œdàb´b•³0óXm4Ä·¥ @dºüÓ&—¶HÓÑÉÞÙ†´Å™š§ÉsnÉeý&£©ßZúMãÞt—O%&1ðÊ?JÈ­´µvQ«Oÿš×j0X1O-ѽö”òUhÏcý­7€IÕ|1,I5Xh*)ÕÊreÜðxÉbËî÷gŠ÷ÑZ‡N+RJEj<¬R¢Mœ¢* Óè‹8HU¼H‹î¹XNïc¥‚Kí†9¦B|7%å;@YøqÒ+¹ÝÀ¦qQ,ÜÇÊò¯Tj\E3·~,ÓვÕ" Ž [k–Z®ur\KßAÔŸR5Zé1éQE|!¶;梷€¥š>ÔZà° P† â°!Z~¯†d;h¦•x¥ I¢êäÁgáË ÀRÑ­NŽj‘'uK{‹¤D[4“ÔúYžþ¡k11írgt©Â9•¨¦sH½ !3¦=Q¥2¬i‘6ªÔ¨°¨Ñòñ1`ºx©J—§‚±Â`“ —¿JÊÀRÅWÕòØsó±fÓx\£Ð­Iuñ\Rï·f>בÞ]ëðâòØ•œŒ³÷#ÇìM̧pñ’ùJ[Œ±Å?­Å¸[·é›&N)Äçý~!†m!p4ÖËõáÀÒÚŒÑ$Såóñe[¯ÇTу€¼r3G¯ähùìj‡pV=!ý"9E@R 6…5¾‰Öø&Vã—to b%†(« ÇBDºT²Õt¨×r䌫ñ R‡N”W •Å œ‰Ž¢f¯ëõ­3žÒûQ+ê w¡d7ßUÍo+ê‡&YÜCã÷И›LS=òQZÝçºæçàP>Fûç’¡â|­ÇK`Z[*‡&@bO_pc0æm© …üW¿Eh–ÓKÑJÑÕg‘;l'ß¯Š¾Ì¯Ö“úuܤ Öc¡¥‘QY‘¨ÃûÓÔÆþÔn’}G ëSSR‚š%©Lõ¶¨†Σ’TÍyšCÓÕÉ?éó2‚‰d8dŒ7)œ§ß3áÔÚ¥S7Z7Ÿ™>%•"€ÖI¶Ä›ÂÈ@°Ž©i_\ÈèRÉVßµMsT#…|Ô\ÖpL’v)@µb,’€ýc–ÂÌú\KT ìkÀƒñš —mÉ4°’Øtl96{VQò¥ÊÑÉŸGˆ §’øÛ¾8áÙ¼½¹Ëî7>1øG\ìÏ­CRx‡ ‹p½±\+ô Έ7My¾`®¬GùeΚpš9}þr*ÖsaÕh‡–»Ì¤¤€IY%…`ŠGXAyÂá¦ç³¢.O#;4Ø·ÅVGR({6‘G4ø¿÷†¸°2F*ξ†%ÁÊTgHFÁa w’a(o’™:ë‡v)¬“”˜&cŽí5Cìå€g…×íª"ÔÝú£§d‡–‰ßÏ·f›eL!&œ<9çi®dŸ­ ’þ%6í¤é\ÿ^)PeAADNU\vÏ‚Â9„Â} M)[K÷íØ<Öû}³ÑöÕ,Ï%žÉ!FÀl]i¡©ifŽìbOÖ׬Îî³?Ô{áÖ(ËØ:,•×ßµJ‚ Å*ìDAU„³vý\œ(¼KÍA8 ?îœpîAPÕ%Íw¦V‹Þýái&á§,á§(áߥÃaæñb¶ÿ1“ídÙþG)Ûÿ˜Ç¶«§® c ^Wý«õË}½j’Óa£4ëTÇ&˜Sz&t±eû¡ ào·d¶Þ5‡:S¶²¥Ëdgp)¤ÖòyLÝ ËfØlu•dô™PP‡ŸÉÛ}ïoÁÛ`êIôÎF–ÿ|âŒcT»\]þ"OÎ^qîìõKX˩ᾩï_ðAætí[xâ ¨¹* ØË(7u-Í\ò@Áä–| 9Ù}ÉW]ó¢‡Á3" ©‡€Ùüç‘Î0Ð;·ÞŠqñ­>·}u~s;ïÃXm–ûw|¡4ƒ»—…~ Š<ÅÏ—•‹³¦ytgMSŒ‘Û O¹T㫟/g×éìVìç‰Öj²íòj}AÓ-g™àæ3B âƒaÚÉMM׎çøÕËÝç³j4ÍvƒÖm2PKYÎ(_Œs¯$ªº¸ºüü]Ï1»Y& (zªtƒµ÷Òçzѳ”ñÿaœÍ™“€ÄMƒŒ…Ayöà9¢ðÁ8§Ó©aEOò²(äíÐ-–ñžó%¤3çk?üÒsŒü̧]ÀÕ¹åþ¢YFšxéØfˆÓvÇðÂ;KóE#;‚‡H‡ûå‹[„éä!ïLÞtî8{ï’›*“2›õ$áÚkæ8™â¼% þ𩚘º$96OªÞÏïýœq¶ë\PÉЃ̯^õ†sž ³ÆÉc0f¯ZŒ¾€3—þŒ… ™'N8Xªˆ„ù çq˰rv±ÁIbVmÊ.žY9âõäͰ#ÓjYÁƒ\[P‹ §ä¼å­²¥ö¶ÚÐÖÑÛ«v!¶tß!ªgòÀØŸûå&yÔãBtÉ2‘p\r½XüöÑìu›½xå2׉>{xÎk¦´?ǵ?ÏÔž36ôA˜çû‡Z$éÈ3æi­“È,‹y ©c±!”#¡G פ|VYzôá¼Oÿ©Û\ð>‰™YøèÊq¾Aý]½\oúiib‡'İ’C u¬Tš‰Ï^«õå§/6LyÈ‚¿ž¦c%\¤Ë@Ébú‹z8³¹ojq=Yå!(»:ÇŽ¦rtڡÃËBuNcSòü窬T$„šXÒ1\ˆrµ0×1~.. ”e>0æª3ü†ª®ñ§ué ·$hý™Óª6dbϯ^HG^¸,àâ]"êfhä%øW:y®f/}=.¥q`ö:U.áC£5Åé½DT‹þ~Æ“zI+Íq¯·úEfŽipš¢9Äͳ~Ò#Ä„!µ˜E“ ²P-¨ˆ¤h~_ÉŒSž´3)¥è  vRž$¦¬Øöì[œbøätýËÖNE;-åËHP  iÖ€®4ú®øÒóúîJzoXð‘G‘6ùøsù\ÔC88ï·yˆoeYÈLn9R%­ ˆ×P·³É¡<‰jTÉW¤hV·Ÿæš±ÍåIp5–¤©\-n®# q3¶§¦”œ„¸¤ânÀqÜ% #_ºˆo n”R rü,ÆÙµÕe4-á²ÂT@ZRS'' Çxo­­¯‹¢8•å$8‡Øô·l¤xÝzóÙD~Œ=KÚOb KñÕÞc ¯OC3ºË;§ÖÕÛõÅS OÐÒˆ’׿PX–!76¹Î%ùd52Iú³ÂhÖÒ°ÙòÙ¬½Œ)Úšä­ùV …ŽTwÆh:†%øêÌûÃê9É_ïÓ—sy(nU2XßÉ5Åà“\ç±Ìð+ª½ÔzF©™3‹³Ä«/;‡PÕæÏÀéÊPº³Bƒ )OŒé|ºùr~«ãÑ›+*÷qêÙqÈØ¥%à> ùœ[aÈd5öõf]³)oq™ËãqòQÑŠ2@moYÀ2çÆ¦,g†ñÒ:½)áí¹”3Å®·…ã] îÑD€(7¾FaÂóÝúYúS©1|¨òÚ{Æ×âû"r.Ög¦¤qZpöð͙ܟ8SN%#¬JEÙ„L®}&Õê®~)NU‹ºNð¹¸ú°Ðwœ+‚—Zìê"Z>ÚgeäÑJúõ\Ø«åßu¸~tKšA*Å(¤£gÊ)ú›ê¾íÞð)üFoÇY ͯêîb(U ôFÜH€µNWí=hSuM³çú»ú$; ØN•¡åø þÐ2F¶ÄMËоN ôø 1Zq•Û®’RÎLøk#teú»˜öŽÐ}¡Z—ôøðŠkŸÿ¸ÌÔ<‰a9Ó"™Á#ç@¢©DITŽØ˜]dr¥( \†§ŽÀ1ú+YÞýz(¡w¿h>÷ë!$°˜êqz΃±sø¾ƒ#·êÃÅmè©À–¤o¢—¿R:‹ÏÐE;Ús¹ðLR<7 Ça;Ö›¦#•'$é B–Qi ‹Û7Û5ûû7Õùÿ-ܦð/˜ ¾ožÖ5_qöÀ>Y-Y~ࢠ!ÒcÆ[ãÆe//„ïÚ!¤·‡æY¿C)¼G#0O|./1ÔÐÚÊS³…VÂ)’Çãå£Â:”»}—›ž´§X’äE°Y\,®àPÿÃ…f–ã“¶¢ p>mK1ï«‚8P½S!¯>dk``C)ê³Âx—ÕU Bp`kÖ1@@_?ˆ¢ã‹l~€t“ù~U¸)Å{t0"dõ~e¶¼B6͸jF/ÞÔûC 2‡ÇÈÅ„œNjÑñ‘ÆV2[ìÙ8¥ ¸Ç ˆF|)¦÷­w4r–Rˆê¦•ÚJ,^(¨¯Ù¼8j‹­]T9ÇŽÏñ‡¢ ˆ‡õ))±°‚Ô_o"ê…õï@ åò-|½`|1Õ…j#*£ý°‡~*Z!œ§$:€šàÏPM·9U(Âyj@>ÛÍåµÑæ0Áoï·cìÓÑb‡ˆôÚIû)²™»iZ¥û¡– Eï„j2‘:È(½â”’pÐ åc'JDÊi&Ù[q4Áݨ(Yò‡nòÎÍ0rCb vþÉ[KþyÊW¶?ØÅ¶;jwð6ãÄ–¡°/[iQç§VBì×4bSFº¦'ÔNe_êûF'ªÇørë{e±N‡²ç<bÏy:Ä'‹7w×& |D9ÔGñÌ•ÌA²˜µ÷Õ†EÈñO‰!”'çç ÈLšÜBÃBr2îȲàÈ:Š÷ˆaDt@• J‚äÐr+>®IœÎDcêÍæ­²³të"¹¬'u¡xúöRn0(XÈãO>?¯ù„¼Ôè¢â%s.³Ç5 '6\¬úíXC$ pÚ£>O½g²AÉKž£Œ~šµj}˜ \µ Ÿ 7ì>AcÚM± í¼U®c?ÕE߃ôu Y¨ü7‘jeÍú8BÔŇæYÅ+ÚGJäóQÈŸFñ賎B±¯m©Bxõc»ÌâÌïœ"¯¾ ճ⠺z8´ãX¶[ }ŽF’âiÊbñ 7] <ͬô:}=€&m¬¼’Ë7Øé,N¹sc˜tÙ^ÏÛ•¸€ µL{Qq"wìpÄ!›KY±,e(ó" dŸ ‰}•éÚŠ†`v*šíWTŒ€¨Ž»kZS?Ø¡Çà¡f fVr±Ã‰TŸ7Ô…)à¸ãhY—éƒ=2FL¼‚‹JË2ëwÞxžÊÇÛíS2r‚ÓÍÕïòBH„Eþ. ¦8˜{E!…ÀFWe+ÕWLê©¥—ˆŠü¥&L²×šBfB4ž²žVbí_E$é,Uíq•q¡ÆE Ø]Fñ4µÀÞ’â%@,ʪœO‚I†¥­Ë¶W0Ð× ¢PõHnÄiøÛMËàß¾ÓWÉʇëdNŠb€q†Æ®ýé \¦³4¥oaIÃ'ȳž Ìã öU TwøDú~_ΜÈEòƸë…ÄðéD¿È‘–†pÊæM­ ŠxÇ3Ô hüÐKYØ)˜ØàôïžE—øYÚhìNq ­Å¶mŸž!€V IÒMm3ÂIµ˜lB<–šÉ°7"l š ˜WmúÇnjÒm.õ«[ï)&V¬xðïòTp ÀøXÑVn.>~µŠši¹’í1¡Î)¥&ßB:÷Þ“R&üËk2~X(b›Þ'rVñ¶Ñžˆ‡ga¿G¥³WÔ¸ör®Üïñ"ŽSJ¬œeãÚ ¨š0„r5°ÿ{1jY`¡˜¢tœýå½+'ô.Eè]„Ð;Ü,sdÚî¡Þns<¢ ÓO:<É\v%Ò[Ž$/® ŒX9b§j>^ÞâÊqg% ˆQtzûeƒ~»MÇ“ Qˆ‡Lw^–JÊèòJJã Õ}iØ$ì3Ö»z%«îR ÈžÅ%pÌõbÃ1ìņc¤ {,èÇ’ #™D –S&†ÉÕ­c‚^‰‰ĪWB:²7*¤Oj¦ŸªzÿÓk—nö@Ç!ŠöØû¿—©õ4íÊgH5šÜj¶¡|r4SàK ”ÛËIý}%½rJ'‡Bî<—<ÆÅ§·Nà’Ìó¦=p¹¤Šð°•V®øÖ‡«ûÖ(w¥Dä%¯wCbÒÕ?´5ÿxF9Éú\oÚÞkr¨òÉx¦‘–&’9wåÎð+§Í²EÌm<å3±nR‡m£Ã6Bç°%¹èûòO«]Êš=wëÝØwý‘s–;à[Ï; Ö›Û~‰`C¢Áæ‹a«˜Á'&0"¼œ| #Èq¬Ÿ+ÞÍìZâó—;òr3­zu~ýËkú! OéC ,ñ ¥«¼ïD VMOÇíR!wÄ{NÕ³ãPʇ[æy1ñ*léÛ‰&zÜ´S:T ëRÒ4)Ž9Pdo ›ve” . 3íH*p †l«jÆ!„©ˆÑè6ÍštÆ]:V:…ó(ítÄôبÊ䟀c4ìÙM LP Ý{ùý”•ëX. ï “©,?”b)Mø-4óeÉS=f·k¢x’«Dä‰*\†eÎ|Ày¬6a=µ¶Õ—{˜èËÞŸM7;¦li—_«Æà>W HÎô´¡)§¨lMÁ\[å$Zça{˜æ5N2‡ÇÖÅ$êX¸—(n˜Æ¡ø'sxd]LªA³ŒØ·nŠjÏf1t²Ä(JP¢àꆮ̕ ›?ŠKg‰Ñ%ܞĪ48¨3…É9BÑ&B"‡OÑÁ ¿5+måÆ üÀÓ³!™¶(yîL)§Éú§H~]ªÚV[œú’hÙ(’¹Ø®4Ò§fã»ÆÞ°Ž÷[Yè³äÌeœ8Ü£„©EŸN ßÄ™•“JðIV‘jOê¨^±‰¿=ˆw)3ùŠ×YÏ®ú'í>M-ÀbV"·$Õà¡–:|ìP=ˆÚðÑËî‘Ó§R8zPP‡;^HNŽŸi´U.6N#t†e½ÙŒpØçãc]BFct% ¤‘æ4ŒÍ}û”çãà.Rã!¥iOø!ÊÑoüáÚeÀ­ˆjÒ <†R@C‰•¤Oý¢³‘/;‰õP®V=aýÐ@ÈlGÓ[„UìCʇÿåâÓÍeù±Im›Š²Ça]ÀÌ¢\f<Ý ïÜkŸ€bi—cÖ߇²LŽÖ×ÇÁ8gæ©Â«Çجûqã(ckØ:]®Á‘QÆ ~mÔûr? Ì.åÑÌ›ÕM'o~Et™M”Žï~ç?åý#ÅáŸò%tò¯,™¶l¿2æÜ%œˆ >+ Á¼ ÝHÂkRÑZntÖ(ÁlAÓÔ¼ ’$Î"5çMHjømZ+AP‹J9î!̆]Ä0€ûü,À=Ù­7ÕªÞ×ÝšB0šÏœËÖ—W[4ŸSÚA˜)Œ³ûåØüylr]‰>E#ë3vä)¤Wç·W•’1y.l^'·0QtU¡¬>5EÃnïÓDy|ZY.¹º›ñR“/4|™…/oN÷•N‹6 È|{*SÁfF*aà’ápdû ’å‰i™œ.BÞ4ªù2€ÿŸÏihJê¾–r®Éä^=‹3m}¡]=ijtû³y>J«ðm‡ŒÓŽ(ZW@ —«B8$~6buV•âŠx:$ï ¹ÖËS”÷¾ž¬«Åõ¢:µµØ‚·m÷´”׳ó‡C1°Rˆ…þÏúPHÈ÷CÓ4rN†"X‚„q6d8`wC`ä€(Y2ízª·õ&¹ïäa”rêX2ð·ËSÅ }q¨ÇéÓB™²`•p¹t)çÎIµ!N«Fo’pÅzµïŸª›+®û<œ¢‹¼ü¥(æ`…iü4“5Ü*/¤B`,M’¹¸9¿~O³ЩmsL<b¡%I°t§Vø›’½ñpÄi2¿^ÜVq¿î²gye/(„"FH˜ä#ÎÚÈ·sh«ô #@!ý2=©ZB|­O…Oï±î§’'¿þ~±E<°4IåæüöËç›üuâ†9 +Â1õ##ÐúK¾S2ɯšñÍv,;» a˜³39WýÏ z áPCNýèRPByÛHµŒÂvml<²ˆ…•%Y,>ßÑ,¦§Ò®*@"V–dÁa4‹¿2·ð< Òü—¾m—9þroÛÖû¤@$Wš Å‹¶ÍÛ¹?jÞä3@) 6]ÎÈŽö¤,fF*r§>|]«ô÷O—>¬ºù´ðå–»>ó1 [b‡Pç-œXãï(ö3çžœ0÷xž|fàÉZ¤ˆÍåhm¸•°KkÞùJwÄ"Qž÷©-zHNoò;¸ÓÞ~Óüô«†zý ίeùZh±¾`CØ)e&ê¢e뾺Y|2¶—Ðàx?É×—p€qœ†ãä0È7 d„ Èê¯ëå¸g%ê°ùóØ$eûËE¤ *¿‰_öˆÂpr4±]ÿ˜Q„ V$Êæ-öõ3ËjµŸ{(dµÉd¡ïN¿ÄH#ygŒrîÀ3õ>É#œØœðø ¥Ã$;½íQXÞ/n«¦;µ¼ix«ÿ'¹®Ò›d9“»8\‘ ˆƒµ™ÞaÙš5lÐÄ*Ü+¯œZ‚UŒ2OL1YïËΧc`Ì‹Jp%æ:åó‹b“¶%â…é" HPª]…ò’ö¾å/Kdz«4ÐïjÌ_ø PHoá•OõþÎÈà|Qs¿)0Y%‘˜Œ‘ B?·›v”0OùÐõ¸—pÙL2¹zõó‡Ëת•œí›S“l+P~Y0º(ÚcëÓo³rn.Ý‹ÑF³ÚËú>Ë£0‘îêÿåV¯åÏîëC»NVËv(ÑM)´fÔtM»Ý­ú±ðqC¸÷ÜP© ø_ÿóÿc•†³bžsH&ô"\¼¦Q0ŠMŸˆYx=®Úi¬Çg=/ùºó³¦§È¼û‰œx#}¹é6М†®°w ¡ˆ 6¿òLJ#8$xw{S©XJŸétÒøîwÇuª)åÔµET,ÎçÁ%N“u"h¥62åNzù\h¬^ÝÝ\½vÙd×"OôbäÉYüÒL̽Æñûl\«;ŸžJéy;«ÔaµÊs7j*Iže§T·û¼!Äêµ(¸«+Î^ÕÒ} .…m›í¶-ÑlUà½/c»ï~uµùHpÜK++Þ&{qÞ Çc0²ýrõù5Œâ2¬¨È0öâq¬©u ·h.—.CöaüÄ\ÓÁùôÙ<ó‚S?8pÙË?U~ñ!ñ§qéïØ˜uQƒTçÓùuñù6¼ØžjGíö0”ÏI4"äÊjW¿\ßæ­ßM!%DHõ¡ÒüÌY”ƺ¾Ï]aˆý*Ð⌑°‹‡ý~Ùg{µ‰ù™ö)_­ú~ª´'»}ûЈ”7ÕC»~`çHÑ‹Å{ËØÑ§UÚXí„l"ÃpÃÜ0ÆæŠ¶üž ÷ålš¢$ä/‡+¹Ÿ·Ps­Sœ2Y1;–`æÎ¬­r·ºä×~©´RŸ,,¢5Ë+Kn^… csx±41·Ê45[9óêîÝŒº{—¬»R2¨Þ¢V­~l7–&GÕß»×_½æÐ$ᘨ p*|áœ#_8ÊáÜm‘‘S^}<¿¸}íjpåŸE[m½Šž‚¤Žùþ"GƒbÚeì¶³j{›©ìm¬YDeDÞRÜf9AÊöAàB¨lqB1++ô°¬sMù¦Å÷Êëþ{×ú-¿GE¯=/²*ù‚lSŠ{ i’mà#)˜B÷Cy?I! ³y™§$È Q+rR®%Nã†ð± °:SFJ™7Éà ”%f„PPGcê=(ödŒŸµˆ}‡î©²Ë| ÂÊ ÙÙõÿì|ƒ&Vwñ¥fÉžÖM戞‰R3†œÇÀs6ćMð7$/W«¹¤t/å)ç½Â¾~.ì”H4&âÈÝ® Î ŸErðõôX?W×ç©5÷ÐÊ'CsÄN5Ý^]—­¡ˆ”êLëP¨¶%ŽE7ð¢h¯F÷^ªÍ-åºì³ÙáÍwÉôjv޹›æéÈÈÆ26°ÀÌ1pPˆƒLWö¬âgÜ_œÀ÷ûýª^?dõ¹8¬QIÌŠ¹®Ö»fý0ô¼1ŠÛ€ 6ʬÌ#2då8rTWré^ 5ÜÇãjõ~!”MPÙá˜c`!ˆOtœ¿.®¿*, Aà°jâÚ½8Ït¤ CÄ­D‘Ê0"iL4Ä€×A†9ñòì´ÃËOÕ Ì ¾\šL'ÜÀ•QÁ؈R4¤Œ¿ %Çé>Ðס Å"5Ñ[‹¬àL0gû4´8¤b$Èž 3¼…1ÁHŸ†…D2¡4ç§‘ú*=ŸJ£tÑx/£ˆëgŽA›È\èU3‚Å4h¿šLNRj Yg «/÷™™[N DÀ™Ælÿà#R£¦þëÚ¼ëÕ—ëÅëTÅ7ûMù$‹D#f®ÜyS_/?^ÆæY|ôk¹)Ê*áC²uS›á´â‚O†þZ(ç¦kiz¨&UžwS9!J멇A,<ÿ¦L88åÓ*ÖG±w–L£ µ²µŒÖ‹=;H½h?Büí¿ÛM‡ØþÍiX—·O Œbqd£ûîö"õ½œÒ>\ˆ«ÚQ¨ZcN_ìåm7Ö)ÒݦÀW„çB%å5L€=•¹6o@&óðl(dUç´åOHÆÑçÞ}ž{Bzš†å¦‡Þ,‰‰™KçËm¥’SÏÏ3kœ%$<¬GÃxöô‰A†Ê‰÷·êQ€‡NOÑx‚îõ45ùvá#1 #s98V'wí8A(HåÛö}·‘ËÀW7wï_GY˜Åh’1‘ÑijÍŠ²Q·»\™~Ý.OëÔ;s’‡Jsüd+Åûþ¸1^Ý]ܼ›•OWVçý=\,÷ïÿk”Ž´ý¸\×É6œË£xÅP‚éWÖTÍj×÷ÂBU9ÁºÐÈꇆ1c /ý,ÅV¼X/Ni¿«S¯‰?ž /àÇzØ?½cŸþ‰ƒ¬†lžf–dHi3É(lü§kØeu}‡ö‡F;ÉÊ\6¦‘Z#s.K2|ÛXZQ]ºû4pã'÷¬á;U':Ÿë§¡énšÕq_W¿ºËÑÂ’!kF#­N$“Vb5ÌÑ¿Uˆx^m¹z§€>Së/§Q€T«yBSÞ Eˆ²Ú°ã‰KáOW‘f}‘ÇÑ 2é¬FX9ýâ³¢CÛ‰¿ð£ª=VG#çeÜ·cóæ6YK¹<†òNÿöþ­ÒßÙ’-\Á,¥+˜ä2*Ãgæ`^È :à°ùíÅœZ‹åòÙ8‚¡ÅÄënÛÜœÉßùÍåñz(‚ŸBè]o¼™ƒŠ9®ÀßF;”QóÐ)-§èYuuK}Ù»0¨O»}2þ~Ù4öÏo*a¤ÿôƒŒó0ês ƒ@å¹÷â%šIqÁ`@b CWêôÄàÝBŽî»U(’C~  !ƒ`(È·¿a ²n`ÍWR©,† Š» ‘“˜*|êš;¸s~ Ó¢ ‘™¥ç+.‘#J7í0e&Û¦[ï{ߥµKçpÙz˜[¸=-¶ù7û^gMq-¬X2CŒiIµ–…æ a{t_Z\·©Œqê>=½Å¡Ž¨tSy¯ 5K¥ü£•¾ŠD¾Ìƒ…/æÇs½à‘Jž¯Ncììk@ó~=»ME²¸4}ÐwÖ÷‡vÅ/vpq¯t¤µ°Ñ9¢ÏòšÎüG™õé Z I(Ùdúæ&’Égêþ·¶/ú÷©JFêŠ[ 'ñ ?¢Õ”?ÇÌGȱ'› b“h)û~ 7ä¾»ÚªRñJÛMa.ý\¦9£²÷>Ê¢å¡*Ú÷ÆS@£°­••Püðsg$ÿ5Ïþ]=¶ŠDKÖ ãoiÓåqɨ93qý .š)͹°½E²ÄÏ]:žÇ5C7ƒ_oßSlïžÁQ¶È\¾bŒåq)¨ïø8ç7êÇô#6…H–ø|gçRÌõ kªƒ@LÈV>1ôîM¾=ÄКR Çø*ö'U[;1>Ù—SlRí%”„%JaX‡•f*€$²zñ¡!‰â:ñ˜ÎR7\wÿ<®Äñ/Ä—ýç²×*z#t‹0MEÚ1Ò×/dèºp×ahÎ~åCùœ=“4UÌð°fû{èR‘"šÉí?/ÿÖãzמšP¿üX!^a¢sxŒ\L´EA÷ª™ênƒì+P³¦ÉÑU–&":´BÖ£¡¥þ÷o‰˜ÎSn¶Ãän'yûm¹ÛÍ6×A‘`ËÎ;‹I.­N !®¤˜‘46«B ªß¬¼ d/´K©¸ˆ³ªYCªúìHK@C Œ>?ݧá@¹Í©ö`V­NÔ<òÛ8!™k0UUsÔ[99­ô!¢þÝŸ–ë¤W¡Uˆ4ùæn^¨ok¯¢ëЮÞì«O·¿£^{ÜǼç$RÑreÎ;U¢ìч."{üA=ÉcÃH_Öû,œKñ“z>ŲœXÎgš‹P,˜õ“fκy¿#§žOù±‚õ¾ÇÊùê§¡F¥#Ôκe_7/ž !WoÁ!Ðó×¶çëÆôÙ9´Ê­H¨>ßlÞ~oÕMuñé}¥E²ú¥þ¸‰Q™šxókÊ9y9(r“bi09º÷ûúÔa“HCËæØGÈ|Œ ”›iP@ŸÎ\k ’MÏÑÝ6sé†"6Fä¿2-ª®n囪»ÐÁx(/2¨cQ³9–4Ž#ªÂ¶˜­gûÆònŒ²cc„µšQ"ï6OÏ¥+½ÞÉâ·;Yp¹3Ñàˆ[êΰárÊ¿ŽØ=Oæ_óü1„ ¸P4L£¼lö|¢.zf{ˆæ÷Ç:ð(1e”SXË‘ª°g°mÒNûçj’AXµª!DÜTïE6ØN{‘CEý–ÅK¨‘”ÐÝ4]9?sÕµ`ñÙøtq«Š`„‹h  _=â¡Å«âO|’”jõs.­‚-Fïî0gcµšºÒ‚¤Z6ÁÕ?åC£à«NeÁ”BМžß6sYK±Î÷‰QÎs«Y”g±MÍtà— 2r¬QHǃ‡„4 CIß3×pšÜØï›Bb’a†Ðg¡I\¨¢C*ø‚}¶zBŠ­ér“ieèô°‹0¹iîÜÏ8€.¹ÚN"-9$ó Îã“ÐMÇçv£s;Õ£ÒeåûCþ½Í#UpA†Wí«–>ÞŠx= ÓËòÔ ¢!%Ý:‰õ‰°ïéÈ»à*7ß…SÐßË;m’^ªõÚ%M.ZjVD÷ëþ0€»Fb±#ò ,Ú«)àAfpù¸š—8Ÿ2‡—<ÚKSq0F»LÅ^ñxµ¨ÏMŠ3(áGµ ãí;gXÌ{bf͈/]ÜpžŠ>páñVõÚ¹/]ìJ|jQ ïãˆ}Ìä D”•ÿ¬|˜Ë¥äs*¤’gA0ïé«8ׯKªÔësô)¯dìE+”M3(¬eãH‹¾dF•âSÒJhÀæ;ºcUI¯ Ù„È€ÜËûâ·"Z4#ú­ÝÊþ<öSV…!F‘H¤Õü"G‰ öÜdžÉ‡eF@+Dñ¤÷éd܃ŒVŒ±*Eª×}oäG9ª ïxÍšõ¬K6¬H¬ááJýÞ\KµÙrAG᩹µGÌ}r³‰ZøFGµ¤ó¤{MÔ]z]xÛmxu¨^“PV' öÔ»1r<ª…œƒ ý%Ýb&X „Q iñ¹=H±’§å¦¹¯ûÌçÀ´:+À:õúÓBÚ(k±£“ÕÏua5ñ4¥äA¸ÖVó”Æ645N;8Á¿¯Û}Ÿ™H¥Ó•9•z÷«8ì×"ÖË'`w©Áp@ÙçÙ¤²9ÔH Áó#Çýl¶¦³mÇi W_º¢…V®Ù…ÉJ–Éß—r¬1zÑŧx=ØB½ýüë]ŒÞ¾^5ûü•ËDRE°YB4gû@¢$–~†ÜÈ’É“x‚ÙN^ö3¹çhgÚˆd”l#C[Ú0<¤CJËJÜÙš;¿½"蔽cè“)u]”ä’±ôAk5x7NÀUÄ^6{+{=3rä/kèªáYôÞ0Åòå_c†d)¿(5ú­j­©OmŽoâTLj®_bºÎl),ιèõ&SˆÿBÂ3¸¦hÒ/\l¯( É—Þ²‡Ò×íC>FøÂãùÅ­ìµzÈ€Ùw¼Ê±"N4ú•i‹ñëz½/N°~2v¨‚FêE6å¤ðM†XÌIe$½]ËTպp0µæãÜÚe3’zÑ‹ !qóªÿ7ñ.£aK¡À!€¦Þ÷ÿ´»®D‰»Y¥v:ŸCF¾ì3Ò…Uº0–}ž²‘Ê–~š—÷ /x˜ùÏQðt?²Kµ£B¸,¦÷R·¦ZýÝ:TjQ[ˆÙ{ÂN®ŒW„ýó‹gaºSöÚ(&a…/«/Ì•-³è•ùÈ€ÙË_X”X'šý²„¦ì»*0ŒƒZq¼cSt¬Y`ŽV2P:… Ȩé¡„xâð¿wÐ˪ŠMýXt¹$%`ê€^Öª ÂÍBêWõ œH¬öàJnÿ, DWûÎe$æuêñÊ¿"Gôá^þÅ|ç³éÃååô<4Ùç¢Ðø™9ÝÀô™mõ…C’­ê~•%d1˜O¥•sARå¡^g ) V®E4ƒëó a®˜¦‘Óî+ºtiïï*¸­(,Bì‡ì©(ŽÆEãgNÄ_(mÇ¡ ¯SrÑg±ˆÿKH–ò‹R£ÛŒòV_4<ÀݦÂwê!:Zö²j:©EñA-ŠõÓµa\l«¯ì »@ŸóËßì‹(—°%‰Òï9Ô £¯·Ã|û`d"‚pY#ˆdÀt}ÈËê×–Â✋š0~yƒ("<ƒkŠfd*f@;çóoók iÛZöúC,&ˆ¤/«Ã?=³YTjÑ« !»—¿à¹2^Jñ­]µõ+§^aÎàÃaöÆœOA˜u¤Ô²õ®á£¡e­(“‹ g¿ÀÊ$#¶Aÿª*jrÉléGyQS,ymÜRø6(¸ÃÜü˜á’…†3®®²Ê'Ð$ó7Îg‰sŽÓ-;90¶GÉOT­U¢’1(šÅ¡€hÒ WYœ¥¡Zz;=—‰¢ûÒê¶=è ®}SzÊq4Oâ ^Þ g=ÀLî9Úé6¢•4gã¨g^+!³Qt]àË*Z—Áª±΀ÀÚ{ØÜãÍj@T®äý¼}dz3_š—z" ù!]üËžiÖ›rñ‘'úacÖŒšêmáÛñ‘ø!Œì…«Þ2‚WQ {@ŸÕw´xšT ’ Ý‚–Tÿ7³ßËöw?´Ÿ‹q-{q™ÎëGvZ1¢Åãôè×êO"m÷™x×e7Î*4\§µpzXI¯‡êr±òs+òˆÃtŸ c»´÷q ç0‘|ùÌš Bü¶æ°ó8’g€ÑzpCݘÐ(" ‹”#¼ú7ÇéyYïÓñ2h¤VêȤ-§ô5ù¦âê»þq߀só^†ÈÝŸ Ò¹ô’çáO¿n7ޱ¦-¯„É›iZU°Jšéîù±í6ý#VzXîÛC›ù¬ßî\œ£[J„~á—.)ê¼O?Ÿ†­w9oF(fa…rT†@=PÍ"½ª·°I?‰nKy.Р‰À`pË ëC Dù3ñá< ¿² h¤C]˼„Ô³f‚»6ÂD‚¬Æ®žÊ*ÑbZäö$òÜ·º9ÿ"ªÌÓ›õ³HÀ°NämQj| ýõ[bNÏ ¨5/ ½$ŸÏç2P<¤µ{óÄ›<ö¸j§±Ÿ«O·N`uNà›i+¯šŸ¶?Ul×?¢o›wù¯=RC¾} TüNÝ´]µŒ£»õ?Íø,^d¾g±X?’J\ç7¼òU™Ó®žàaùÔ’ƒ@Pâ{s¾/¦ÞÙ·êæ—ß"Ý0Ÿ¦º ûwq˜§’ŽúwM'¬`ˆeäËÔ{aÞÆÄ;¸ôkü«}šÚa€å˜‹Û§©ö;»¶´Ó?ãÒÔþøýo H59¹ýý¶æSE¸^È¿|Ç wà/µIO·@ó$/Ü“4WZѺy I8¨†%8xÝÄ´¹(©R­VøÆä^=‹Å÷yÇZ°X¿•9±B¹Rfåú¹`LË1ÞË¿e ëþróUI¦¾ß#u|y“TgåZOQžà×°¯ŸW}ÿ zKgË;‚TÙV¬Šæ ΞÿÍQk³¡‚ª©Ý$û3+VEóg·P^®Q¯.™p+ë¨)«8ªçéãcËŸvl¦ãØUÍa¯-Þ¶³¨£ÎëG `¹eð S3e^?a;äMujFX…Öü%ŠË Ãó´ƒO¼ICܺŠ]Ç­Pô¦?dØX„%ÄÓì«}{ìä˾U±ÍÕ$‡W/ŽÍÐb?„¬º•³oW¢7Ø4c¶éc0(Cï¯evŽ#P£ÛÊý?NˆØ´Ê¶ÿ–RhÅJ OpžÐÝ‚‚¦µè÷õÈÛÕßþV]‰À)2FšX"?³©9¸ÊEl>¶Kï·R@KÈŠjY"•ÉÇ0§ô. ’jg… ·8ðÎïÓâMuÓL?/.ßTwÕ¥¿($7êºxì¹cÓp5ÕÿøïÕûé_°ÞkíÓŠ¨‚4Ü[],¾Ý¢€ÌªŽ­¢N»j†~#*†UÊ}©Ô>^é1U,õ6å{_ùu>ðY;ij‰S¡x¬Ýí_KÅá!¶æòÁ+"PË )6jkOàÎŽ"" اöÐôÇ©Œ•% æ€  ü™ÂDŸÙ¾ßñÃHŸ–%^ž$eÞ¡ä&2aJ‡C}*Ô9ÇA餇ÍÖÎæábÖ)VÈ.™l–] ˜xƒ6Ï™Ès¦ó8ć#ôšåˆz0KL Š_Ïq&rø4ÛÃTÊ%À:„¬4U=œC2›ÝzXòék¶)…@C‰ŠkòœÉ<Æ‹:Ô™ÞÚCY"*=ß°yÆ‘¤îalgppÑ-O¼MæŒC}R÷õjl×K¾pª÷iBÒÁ² ;0L¢Ý†%ëú>7í¦¡††#LðÜ™Æ9D†Ó¿Û¥x½=Öã&Ã'žÃÒ"0Å g>S™³”s{îùlIò6:F|šBñ{æYò§}úÀ8Ÿ-M€/!ù0yëã¦)ëfÈÜeHf0„ HÁ( xyžÊäÁ4{6ܧy!„!i™Js(Î#N2î°¯¾ætóÊ¡é%TnêßʈÕi ¸ˆößÕ§€†%z@y‰mf¶\=@@ŸˆòØÙê‘$G½zâSH…È’ z€×“)‡èØÜ·Ok™hIYQþ#’à`-ƒ‹Ïß’Of x¹AÖ¢í‘;óÖó3×-]„¡a.Z¦êEFâî%V '#i•aTŠó±qwìäá Þ7îNÄI"ÏÔñQpGáá5­”ÂZõŽ´x†lg&[@mù,ŒµÝC5ëR3Ò|sœø€Ó©^ è ˜Ëóêr84¦Ì׬ê)5åR_A~žã¡°ªè,Æê &,ì±…{Þas"­r$K°3Ã$¦ñ˜klbÔŠÄâ/ž¥€ÇŠ3Æì.¨5fì%m ÀXåé~Ï»‘ öÌ ìi“ !’x }&Ðg íÜ×™!,…}½-~öTvY•¡²d.YÝ}<¿q´©`\«m¦Å‡@«ÛŠb#jjÀSÎx†—¢Ñ8žâV8#rÔh¬ ´–EmaÍ9šSÈÓdñö‹u‘{¾_þeVSùÒ!²ºÎhŸz€"¶4µÝ!± ÐeÃúãßËh`hPOBXX5#SÎ%EeŠˆ²‡ËžÏe„ˆ1Œ)$(³œ‰,$ÑöP´,ŒâC’‘Y4½ö@¬•´´Û÷º‰NWÖÓ[Ýé¶eªµ¨ö~‹Ô¿_²A@Ÿˆ~L/45¹Wd–OËÇ€²ºú \•h%'è¬ÒïKåå–,#Äñ¹ºr%ÚðDf¢Ù‰qǼÇý^k„#^0VX=‡jÇ)§#´2‘=Nþ¥é¦¾w”£Úý>£ÈEYe*](¼’¿Eê#e±I¥±…!µŒ*Ì<ÞMÛ±aîyo2$;Q©ù82e4Åwý+>ƒi°Ú‚©í[>ÅÝŽõAX¦Ôխ̺øíc%fÀ³ÍªŒ×fcµYá êãCªçªfºÚj™撚-¯yšÊ(Y`À‰‹Ò¤Àáu'›)Vš&E©Ý<•Q²À€ùžÛÇ~¨ Ø“­¢ÞHB¹þƒB†”ˆ¾Ã½µ‰èÈkŒbÃ×&Û26°™~iìzgÂ8R^ÃQfb›ãXï+­EOqŚÊ?Å.=©OàÚ‘nqÒÿ™xÍž_pTXÿØ¥gÄ44 %„²¹©+L]%ÓàòRXUÊ’›¢4l—»U]ÆÉÁ¤¤T×’~Ãè–W-íd[èÎØ]°£²ÚÒ&5º2UKpKIuLA£¯êSÝîëU»wvQ9c{b…t4äBùEŽ5x¿††tê`¹=ñªPöLñ7H¶*a@&ƒ3’ 2„T-ľQy;à ý IiÓ^DCbBh¶©‘~86xÁ;¶qh—ÒtO 1$†“ìÒ+ø(:ä¢ähØy#ñ‚ja‘Q»­]f ©M¥¬¦8¡É铈/ͽ¢4Ô|2Ó8ËvTÚ¾/¥´ïãœö=5U›Á4o€Ì åþd; è !ýM§Y2Í6Ôë9¤0žf&éÖnqªÑôüsûÔ$2 gö­]bµ¼Cü Fã×Ä;5÷òý;y°w<Ì+ ȕΡøÒ˜ ›Æ^¼iÿYà[’K“f[H1ÆËm|’Ê›JÜå 1J;øUßO>GÏS M0íË:%*P{¶¶5÷Y¿ô›« Z· Ñ[‹`êp¯¥¸¾¢9 f!…p—¯Xüª+‰LrÇ/Ã)ÚÔB"O‡þiùt®¢ŒbŽÌ´u€ßšÃñÕ?ï®_“žvneÞêî}hnªŠÍ"È"n¤ýÕ—ê-põºÕâ¸ûr)}Z¸î½2¬ž¡ëÓ¡‚ÕŠ-Ã.‘Ų¤@f­f»WV©B¶ˆÞUçVNˆ=8]üv߯êýòT­2JxGòxÄ}”r3 æ þU—$S ¯ <¤*ßQÁ®s*ƒGÒ†ßÆÞºÃÍÛg½ ´¯Ÿ5º)üY‰EÕÂ}²hR>³Þ’Ã=ªþ]Yá…¯*¹P{9¯œ(š"Šh:rU_Â9™Ó£OcDx®Š /y&å<7±¡Ás#&[ˆ–·—S´0@QIz-ȼk®júMzá‘!°`:¿±ðÊÄà¦,(hÁóqÕWKqY5ù² œb…%jï|us\U* 2Ò½ A$·þ<ŒÖ©R©¹:—AêÓ´ÇaH/1@k…$[ÿòoTäØÜ×y¿O!LoÞ]â[øŠKU}Ø×lw>Žõ³¼6YñÕw»¯ÂK ª<@vuz¦EC]^ZXÊMü2øŒVu—Ù$p))$òË×+1¥Ç@ן¾\V‡†1Žñi©k5y^.Ð!¦¯Ú¢Ë{¸;ÃŽÞõ7=öˆmðú6Ë3² ‡ OöêUËåÍ"Úf6%:i•)íȾç£Ô¿§3çŒG œ§Þ’Q¨>÷ΔH“uÂÖàE¿ßCƒ)¢CŠ´SŸÃn›'°ÛRÚw[ÜþÐ [­´ò 2a"C”ËÀŠÄá!g¨Ï(G½9ÒµO‚漃.m7ꃶÍvP7_n£_bñ¯7y.Ða¢DηÞmãý¢:Ý¿ù üÝ,ÞU?Õã¶™JCAÃȆ98 nk¨èóÛç°…x %DÎ#’!Îd³]ß5»¾d¼õ¡.?-”NN:†rä]˜tÚkM·:ŸOl¬óŒÆš¢2Ö39|–3®sÆœ ²4v(ùªÊáéñþ}qø–ÊZL¬½ø­Em8½¨³ö&‡“Cª n®oÇ1Tœ½ÕMà\åèFw¶gSàØ Ém(‡‰5åvû4D1‘·A±ÃMŸÌ© ZNd•œ¶D»˜ß¥å÷C œKÄî:dfÐà ¹£0iÌÐðpˆ†–`Ÿ¤c5ÐÞT? ±Zµ´~Þ×›Æg•Ÿ‘®Èé*2#Jr3ÒUáŒt‘®3RIoÍNWe³ÓUlvºš;;%ßÇ} Z;Þí‘Τ„ÙD…îÿÇW^2;\Ef‡«ÍÉ:(0ú§€'Tm4p©0!)d•æWä0¿š3Ì˶›æWKöŽw´y*æ°‚à<Çöë’‚Ó³hWÊ!•’‘ÆÃyd¼Ñ¦œ‰CX0 ZE&A+j$f>`=ZØLJ&C«ÈdhL†ìgœ› 2auW]É ãà\FBB}GRRü±ÝêÈû…4¤™èdAcÑÀÞl×+ÕbÓgê9r”ö§L u V!$už¶S[W»iØÿõÖðS‡ Oi˱ùóȇyê›]2yµJr…Û¶ÊëÜ =1ÖŒÁn¦q×ö ~êÜÁT©¹Á %ÎÖ /%;Ö«U;þ\®Ún“¶ï‹@%9_èl. Ùõo•’Ú›'ioZ¢ÞÃzúµ”$ …u^i¬ŸJ˜DòxŒ|föY3SçŸD0œE-Ã)M&ÉbL»Á£‘¾~!£• ¥YÆÜ-ÑŒ‘¾féi†c'pQ%Á耼ÐkJé°ˆ‹õÉH¡>¿k½õ/„˜zùóØ›ŠH.!‚ !"?!!ÞEfªBá<6T—÷þÝ™ˆÁŸÄ6n6TG ï1Àˆh{ÐÆTb³Xa“Mã”Ù”&³(¥Ú%E³yLRxôô>bÅÏ.poúGénuÃÕÅHÇÓr½b…f\q´æÈu´ÃQê|®×Òöñbß7ÕÏÂw±ž&ÝÉm…s›?`šgG0z OõfµÔf«9!‘ABì ýmen¢±Šq$)^êË@­<‚öO¯}Ò‹?í_è°Ü 2ÚCO­$Û›0·VL_ÖHŒËaŸ­Š=QûUD©8˜àÃ9<ì(?PÍBôòkI&àÐõ›†0Á8‡”Èàp7 (à P6~å|Þ?+Þ;ÆöÜ,ÊeÆÓq¶X|¬øãÐvjK¬ãgJŸ8»KDŸ5+:\uß…íäfè›uŸônGíJ„IÀ·L-"’[ùø«Þ®lÔÕ3µ¡6»žÒ…wïLdo÷ÙÆ‰1HqkìÀâýèºè¥£xR·ºmSÄÁÅz\´Tpú:Àçú¦‚áNþBçØv4a‡¥ˆg–v¸DÀ,7-´DÓ÷u^)„£ö¡yê6׺(«T¥»Ñt¢¾T,îû•4´—!‚ –$ú-ÒÄ}ÛÒšÑ몤»îÎ R…Ýö¯Èyÿ4²Ú]zt-¡7îÂNñºïZ>Ý€E¶ÈðÉ…£p.Jl™Oôå_l·L8µ#Ú,()úX K}0ó˜F8á­©fÜå‡/`‰³§¹iG¹ùï㲫'øpØzlsîâãhÃÌ—»7 ¶|¹¢îøI gâŸ]\£ ^X~¦=c›äͦͼÕ6x›­|‹wõØöG¦Rô=ª7Û×p¿šS¼ßÙëb»ö~Z®ÇžÁNÓVlÑZšEANÃ/…u¦ ÊWÊÿhµ{Y]dÁ7=ZÁ.W8Ø^ê6ï+ö:ä’ÿœÇ$ï驈HJ}fÅ—IzäÓÂíy]~é˜À{u ½‰ˆ|E™ž»:­]¤©aKþsö º8]a0×|MµOb-Ûj_oêó¯+áÛplî›|·ÀTs+24OÃ(ƒV!®LD4.s(¤æîÈÄ3üÊûØ4ÕoY{ÅH61ï½+ÌbW ^ýûÅ—‹O7ªFXÓm‚˜´Fë¶™Jˆo›‰f½UæFÁé°y+6åNœKäY횤G,W< E¾÷_ßß½íÁçx‡ãö¾àÞ^ò¨#@i-&¼~Ë7gSÅúû鱿3]fŽ~9¥ÄB˜e ^O,4ߨ g°³CÏÎ%ËŽc;v²Mæ 3„ibV  Á„§­¯ø'#ëg%U&J¾ê¡g°µôœ×î!ZæTh7¢Ö¹™^6È·ur'ËŠž CŸîøÀ®2îÔÇÌà2 h€ï€ýÐÈ…šIÆék˜Î$Ôú ¥Ü$Ç ò`ª#@à3jBJ÷ûU=.7¼çìŸá„=©<Ö$|± s<žÁž¤j¬‡¡²8\ Ç©ù·wùIÓ,ċޫdÂIL»×MâüÛŽ%vý&ä±kêý´Ëo¾Çá.+ Ð'ºhóUŠÏ„XœOÉáœ÷2й¼:ë^Ðeç&7!Ìåf¦6ßSayý„j¢&x«•ÅÖœ:àÀ¦€‚¹u‚V bï™ù,¸d5LC‘r$4>÷°›åJ@G:×Qœ¯Û‡±ÿÒ>HŠã§EÈ®è[ò³äÅùÔ†Q¦89EF¦‘£p]m‡-œpJFbÜÕfeu» |•õz_°í+&Øz¤´:¿øh,ÃØÿ‘¾òO#]JFiW"Gs›Ñ×ZZס€HPßž-™½Ë_Ýò1RƒIu¬HÞU+uQ ¾þo‹7Õe»m§zÿiÝÔÝ›ê¢voªoõ~ä iø^>ÔÍâÁ§ðä/™Ác;ýczªÎl¿ÁàYä¥3÷è S÷õaµ©1é}{߬Ÿ×É[_Ì4\›L×feÅÒU¬\‡@¿Ý¦ÍÅU.“±jÄ» áðU¬Ä:Ä(dÀž»uZ=BÝ&ïïásë¦ý3ÂbëpÜOí°WE`ä¶”Çfŧˆ™*wAF¯JöîÃ8XCߤpVm2ó‚>°Zw/¢§ã£Â bvðgaCSÛ¨+â`í‘gW”ª4zB9©T‰Z½ŽÉ/ÝÝç Üメ͓œYŠôšªr£¯¼Çf¦Nq4É/¿G4—ä0£‡dsjoȱ*®·!UiÃìË+ã¡ã6÷«Û’–ž46 QžNetjtBÏuflM Ô÷ã¶îÚ¿ä¸UÜV¢¹}YÜEý½{9œU²RÄ=?Ø–QêÄßê ¥Ýf;¶›¤V¢ÕÊDä.1·µâþ‹øÖyú/:¿½ÂÙ1{ð¢Œ^îlmB²¼PÁ|Mû6}úFÀ]Bà¶n©M œãyO·<¦³Ê]Ö®$„z-IégüóK[-S8¬_IºÖužä+.³B‹‚ 4Åž!™Ðí@k3ÛýnL_€éyh"}ÌJù¯äØïƒ´rì¨ÕÕ-!øVÒ’‡<ƒp4·fýÎêocþÏÍt;-P©3¦31 ¶(“<B»³½†4rÖ,Úè²e¢1¤~Ð)[]M5{pôÀòŒ"Œ±šDªQ%ÿ‚C èù²p„ƒ½íJœàïuJ/¨‘ÜhS‹e9ßbΜ aÄî—ʃ•Šåì™b`¥>;ß&Ú6ZÊÏ(»uä9;M#7DŠ˜§SO°"ç£áõÝÕ­ôÎ`Rf¹¤ýþ—ÕQ.›!Òõf¬ïMLV‡ëY¯¡#Q{+%tó ᔦ¬Jˆ þí([àžijI6'ϹÛ5Éh»X®A öõ¡R°õ€ïP™=¯í·ÏXò@0—€X25¤›†$‡ý2i‰åJ+¤à[ŠåŽ öÈ¥ ¾þ¼èï§Ü)­Ós\$×Jk5¯–f ñ§coæ>¶2’(Z‘ å:x]µg"dÚÖ5Â#·S,ìNtžDÚgnà,×ó’«nQ£â§Ô>H}ëjäx¨VïR™ CX¤¹Ô®”îÛôØIC5 W¨f#õÈçZÀÁ˜}i/Lb¬PÎÍoúG’P— ÷Þ¡T ó-JeºÚýúfvª¥®w-Ú<Û ¶)ÔŽÛ•£Iæ¨ã3ÍdlXcTËT§)ù÷âfQ ¯UZÅý¾[–3Ê&`J=x‹'H÷¬±Y?®ÓÏ]„Ö!ÒâÓÌþÈ\3Oÿåæë[o‡~à“‘ñxXÊŸÒM"W†JßjCR=Ëá-êâ¼Z¨ˆo |–¿¬Ù²Ù×lj³¶é,š r¢_H»Wd.¿P¹DSyos¡—õ'˺fñ1Š‘NÅÕ„MnEóümá{9ee†ú,f¤Ï^h Ó?´uµø\á¹èX4C#ô‘œŸ#Eºÿì¹C~yY'½î#pˆ–xÖ¯˜††XÕlùn¨Çå:É)D)µ6?ø¯·ï¥ß{è«w·çŸ«‹Û_¬Î‰3ØŒmÚËyˆR:mºí…×°Ä—×—¤KîŽ/~e/ÌGBðr ¦¹6§Ë¥Í…8 QˆKkCœ¹Ñ'E²ÖÛÂx×Mg ºÑ»¼i­ºÉâ[Aü«îsÔ‘9Jø°Ï§=5Ì㻌7šÜ’ðØqN~TH¡ß~æý¶ÊüSÛW›šíV}=âÚ`Ëš1ØŸËZ¡‘šž#“¯Eü gè½¹\,:%mpõ¥hìx H¹PÕýXóáh=6Â+`ç€\“÷ù¨Ì‹Èp¦°–µ#¼?Iu¥D•™ 5ñg°+uÓ3ÅÍ)R&Y°¹ŸlÅ ½ë‰T@Æñ)¹oJà´b$I8hÆ~;ÖøäžÅešíî!ð-5·Srúuò&^§µãÒ´† 5Sßïqàtÿ5³Áæ ´‘FM«wŸÿµä\©yä^Ò¥Œ‹PjdšëN•,Ïß5`ðæ^¯~½=ûúûk¤žÏ2’Ê­\«æ)ÎÄUßÏ/nu”7sa>µçËy€*û4ôÐÏÝzÇ;Òö¯d ›.;†êq¬‡ñö¾¬ÄÅÞgês?Nù/Ñ… ûúyÕ÷e»åƒ-poj†Úÿ3Ë4| ÐĘ×ÔÑuK)ü æX \æI ƨ’©ÊÿéÖ¬O´;k‰Àª†zZïÒš0Ä(‰Nð¯¡é~^\ê¡JÈq“É›´&„0Š -}üÌNmúº1e‹Dç³|fw¡ÞUoëeˇšTË QRJ'WÂß"“.ëê  «[u×E »Ý×´[VÛ}›2LpŠ’HÂ7c*yÿ G*<ô+X;X3M;>ÁÞîª/"§UΧþS½O%yE@%¢Ï+×b£ç¸fËMËÔ’!ëÅ)…— H„»bdÔŽ¯ $ɇž‹–­ûêëÅB­jG—gÇô¥á Aˆ˜‘·ˆÕÐÀš>ˤ…çê÷.ÊrPé~€qúf^Q«AlKgi€µ6rÏð‰À-1à3üx~Zùmñ»;Ôë’*ó`–šø”®Ï/æÖšÜßDÉŠ£11Gð“bK¼€]7 e<ZNVäÓ¹ùr«Zyž ŸÚe(X„ÕÍÓœm)(ý“ãó1l^‹f¹Í2-zñò­/3ñ馨Œ,Ô ²!ê`ðêÌóVâÌ6dÉ#È`œFE†9‰F„]¹ÏS‰+%. W°MIÀ,!z»’ÙýÊ,ƒã±Ý”t[>Îr0’ :äWøõëÕeiÇuÚ­êÒfFa-+Gê3;ýúó¹™ •Ђa#cwHá-‘®¯á‡1qÍëfz©3è­KµvíºøEXÄKƒqsu1ëE°‚Ê`de0ª2E•ñøØ•|"ÌêÖ_ý·o770mÿöíö¦è ÙÊ‚’@ÅÇ9æ¼~ô®pæpìZØ\… Ž…S¦ðˆG—ëÄB˜KÇ7Ö2ÂPs•ÜÙ±$œèhÀ ¿çÌ`9òäžíê1÷Äc5‰Tç¸>¬êJ$Ï|ÜÌ܃X ~Àuù"Úú ÷©ÀâVªÔÞ?b÷íØN‡e]×eNæ¢`¥1 ý[á[–ÿq/Ì#a,¦zOÏÒ,¶ ƒ|–"‡]Ïçþ_®#KÙE‰E¥å´ëºÖ6ebí•൮åi%8«Z7ãTRƒ©<–/‰2÷SL}ÖÕº®`¶.ƒ’gÒÍ1%vÑœ£ë¹|aËœ0ËO 2¼ô8¢¢£¥Ú»tj¡ä½e¶´Ópª%¨oƒª>ÊKŸ¢ø2_à¬ÇýȲ>N»’µh*ƒ%B2MÇíÔœŒ¹%u5Oë&çö&Žö™y¦¢]Ú6WgÝw—4ýxŸ»ƒ™UíÅc‰§hó4éÿJ¾0{*ñÈ›Îá3w0³èëœséÏbž&ýãùžøX–œ~;ÉK&™0%êþ‡™ˆïþ|NÁ ‚AùÏçèí’÷A\„ÕÜ©[!H5$k=ÕÃQ‹ V/$:»µ'Qº«Ó9—…AŠOëztÞ=ñfÏJ\c§sh2$&t{yºÀÊSÌ2Y2CŒåêr«9„’\”!‚ŒbövÓ˜€fšÎû8û~¿I®DH KDŠœ…«HËä-¬‘…ƒ0‰ìùJ«KI£‘.%snÇ_ &º4ËZÒ X\>L;‘@EÁ©í+øÉªAÙX»¾ÖÂ1¤¨ÏõFô/èë23S ær2Ó¯"bóÊGèWí… ÞZysšpÑܰJ»e>cë ÁÓ¥(ÐßÞÐztήÔåkªvßöÌ)}­¼|µ]žbòÛßxú¦÷<©Ø»ÕÝå'[f/ë¥ó^SZx¥—B¨7'_ÔDxmÉÄMg¹lLà\2~ßkI˜øÛn¨x1×á†0W±×¹ëÍXW0W¯½gèÅÀ ôR6Éš±vÛ1•¶»æ0n‡º€›tÙIQ?…‚‚X@(³EÀ\2fC*KEî˜U…=Gîf›¤ãb4•ê\·z.:­ÿ˜;ªî~ÿÛ¿ü‹9}¬Ç±~8d½MS8‡ ò4­øh?Ó¥LÚä+½­ç°T;&S[³ ®LB4›jÅ'Îí ®ºôåbÕ.;7¸˜*Ûx¡¯È‹œ™ƒ"ƒtš#"O©9V†"«ìPoR€X®”@ŠsGL9 êZ´ë&ãt€h)Üoæ»ßXóðÅrK|ìOíF¬|×êj¾£”yG$½ã‰UÄC—æ ¨µ§)çºí– l:ðÿ"¾|õ×lá:Da-“x‡·‹ˆùÙWœ§šÏéd†6|ÿ¦¨²ú¤à45rÍñbåœtˆ¹vBõýv î*’{þ1¬«ÞHŸåÏ·|]@#ñŽéýâ÷V:nˆôCª87}¹KšQv©Y1®œKÝ®ŽÐsnòÏBùt«W—Ÿ¯Åð ,‹¿ÜFGtg1Æ¥MŸ€“¬ƒ†š—æbC5ÀÌ[®íÔ+FsW—sÜÕ)‚»ÚqMÒnwÕ¹¤#C ¾úõü%õXø•†h’dâýŽJ,¦gF- kÌBÊ) 4YC 'g,vFÔ˜ãêÕiq~ó:ô¾Wúb[vR³KŒuŠ2ºFC‘«êN=ⵜ<¨ct ׃* f5p]9ö4J\Útã¹ÈçÀ¸t4õ.ëe¬óÞŸ‹2&¹c¿ÐÞ™‰¸ü-iéa+]ëvó*O9À:,­4ñ5^£˜ˆÆRÞ1IJ¼P‚žÁF¿9[ZáEgˆ0L S5§µE—}N$>B61|'Wäœéöª]˜5òXNê÷àY¶FMAìbQ€ ÈËþ±?ݰõ±.=#õüé¶ê®ÕT‡®út÷¶*>Ý‹-΀`Wà:.†u v”9ÅNÌLážÉEjb s̲—É .- Ág¤œìÛ_aöl7RÀìK¶NõåÇ)~I>B8ØDŸÒwÓÁ4EÒñ9r:¼ÝBêð.ÇF„œœñº|ÀË"’/[„°,­3Qfùöá4ÇÜû-gxÊÑH—׉ŜÖ*|ŒpŽ–vfûØNëE ¶áæ}ÒÑLYF¼íË»EePeئúsyR\c“þн–_Œê1›ŽWnß#›4ÓÂVË“`J·Ï—×éL’9~Øo#nªxïá´-Ó& Ä’ïe ¸ÏЇêç„Cu—í"öÉ"ËÙ%ˆ•ÔZ†G×öëdœ®*86þˆŠ"­¼¼WWŸÄÊkì÷QvCîbL2Íp°WfÇÛ±=AµÿµÞÏ«Îã‘–Ãvg?MÛ 3j‘(¾ˆ!ü„KÙ7ÒÅdÁ$ÜC:LµLúLÇào¹n±.xw!¦Ôð™D–òÜ«lv`]"FªÜ·ÁŸ‰Ù5\f—sk˜T¿Ñ’­«58·½o`Ô$¦ÝÊ´¤¬ïÁw$Î?h#1ÐP*²Äí‘ó^®ú¾øH'’Ãáécb€¨ä] EN-Ý×à]V³t†ëÄÊö‡p.Þ$Šæ‰1'B†}/céÀmYOª£à Ôû→ÊL< Ç£¼ÉÑ*ÅÓ‘Ëcùq—=ß‹ŸmÆsež q~ùÓžf}Øñ¬Ñ§rÀñ³ÅÊA‹ØDدDùs>ôhÎìS$!_ð ÂKȬWä 8[L¬ÂÁ`ŒŸÑnD©sªÙÏcšÚ)|)Ï9“ì¼ )g36pr±±ßïMü=Lx”±æs¨ãbÒ|g½þÌ›Oí×øŒßÃ^\„˜RöC“·éËæ¢¨98µòNL^÷ŠLZÖmµ³e¸§£ÎÈbR²h°$i¼H‡ŽVYü¼za©./,ùí`õ\uõA,¬À»ÍrΧ”þŠPö¥ˆéNÛ_µÑ)».õÔ”385ñ*«Wi½zz }Ç«Œ 'øè3\Ô{è¤zSâ,œwkjŒ@[hßÕ• àÏKÄ(} ñ,ã¼íAºŸ›¤g†ûùuÎÖcÓt"*p!Û ÁÖbðÿlºººïŸLó0ë÷‘ª€pÓ³”©§hJ€uRöuñÿS÷®ËqäHºà>E˜ÍØ1Õ1ekºk§wgÌÖŽ±H©ÄnñÒJJU=Ò‚™ÁÌ(efDED¦Èú5¯1¯7O²pÇÍ8’ªžmën1Ï᮫ûÅû‹sô£/Óúÿû?ÿ«‡[ü®Ï7]íhyÒg…•âX;¸È˜ã5$­3Z…V1e|ä„ÆèŒ˜/Ä~*ñ$çÄM×l†èïcqh×]¹Ê&8!†«óèÐÏ—·Þ=Õ „õÝq‰(­Ð¯¾9ˆ–UÅ»jÙ€‹}&Ís„M•ì†IÁ 3Œ¦¶=eÀRtooKý|-Žûev6öË‘Lì]O~Ÿ¯ÎŒÛ²ºW#¸w—ÿyÀ“)ð¼Þ GO£Uâ;äÁs-½­ŽÕ7A÷ö:e„ç†F´O…Çl¶¬ÇÙ"ó¿4õ¾w¸é ²Ü‘ádæaJÑL*øgñÏÞŒ EsÁlÇ*®+ãOÛΊÈÕ¥,¶>>$j¯9QŽäöS“ä´ï'µcÏpÚ÷S[0Ü8šVû dBÓõà<éIv:å)¥<^Â㥫>톮l©<%±ö:ä_†ŒÊ0)*¿!(±)c±Ö4¡50"ñLjOᯠ8L«NˆÉƒ›P Ú¨ÄÄ®ÕM© Ff$#Ójã™Ù˜öm‰ˆd†ù¾ð”¹Šb©oÛª6]UÂãþLâ¬PHÛ…‘«½¾ Ðï] œ[šóÜŠ gÄl>êöøçLör†HžéňQïO'QûRuûjjÛ`…Bº.Œ¶ £äéó`úuïY¶Ûfù¼Úeòôà!C pçD;ð‘3ˆ¶*ÊQ4€]-=ÉêÃOi‘ÀИ£´h@ã ;~„µ¾)ùZ]£B_ ò>­ô¡yg· ‰0Ø0Ÿ2hûø°t ":TƒuôðvZjX€t'ŒÉœç96?e>ÁnŽtkN>¼@•b¤ÜÓNªeN&dé âfóú¸ÏÍ)Hø„*gDâ¤G?ÂO¤ ‡»õnHû÷Èc¨{@gC †Ÿ<-¡^N%Î4“‹ä—aÊé/á>Û!Ô’wý²Üƒqõ<Ž.:$¨â•¡'ø%ɼÿáT.îÁϹ1Ø+àû®ê7Êɶ|T9R¤ÚÃÀ”ÈÉ0¼)*fØßåÒœÐï‘8×I“ß,¦Óf1¼Tœ/3Ѭä¥j¹'>>2ôû]îg@R"2pLquyãO£Í±Ÿ¶Lóñ «~» $ºu°{,ëz>ÿ¥7¥íõ‰U—'qÓ©w0ˆL)»P"$H0Ñ.ŒúÑy©3ÞödúŠ4ˆqëÊÏc ³/Áq6˜‘r˜g±žTΞ@Œóx9?‰1®f¤¡®ÌrŽH8œ}Lìf \KI‹^‰‰I2¯hyÍ‘3ú§‘ÌþEebT™ÑdŠhnlR… =‹‰U¸ñêÝ41Í)5î ÄxŽÔøYN¬rF&Æ5ZåÖKÆÅÉOØ3®=WÇiÖKõ]½gbx˸ ‚]F6Z–“ü—<ÿZ³èêBû|‡×ŸÏç>%i-]ö4»û“f7*çå‘OìΓŸºf‰húÄH˜u—!{cðsŠpMð_þU^ˆ-µ¢ìr›|ç¹…Þ4µÈš*άͶ÷•‰pl©ý7Û‚ñ=Ó¥ºhrqSpp†e˜Ïk„sªiF0CãT¾ÅKÖwMÞ“Xè1jÌÃ×KikÇï x«Y/øŽ6߈ΠÞT޻՗^Åë!Já®èð=×F&ƒvY“xDÏñ* /co‹ûV$ÕW™›7ÜcF1kF¸›pYwzK-:¤&íääŽ% Ü£Fù{5zä·¥¥ÏZB4KuÒÍ4¢ÙãôÜÛçªÏõcn>|ûkú~¡&2cdB˜¢B"‰‘h{ú­“td„®„ ±½}DŒè'×ó¹O&5ð(‡Šo\“jòn!õÕÒ«H"ÙÐ}QoõY³Ý‚×!‚ßñIEÑ-Ô½4ªXy‘±ƒüþ¶ƒqL™Àý|ùFjœF€3lŒóÍ{ü2XúA¾â¤¿vç(¼µKÅ2˜Wln 'wQ#XCÀuH˜ëÆÄ'M”HjÍCCfö°Þ9r<®ÝÁµêòkÕ£" ûÍ"ñžÜY•2ØÑ)Âп¯ |ˆ‹Šë—]Ý Öªvb]2ªQ<‘”륎ñºÔùîè{{Ææ)èqq·§ícZB˜RE"Ô'þ(¥O8º7ïŸÕ)¯u!ÌUm¼Ö™ûúúÄÉlé0Ê¡òÓ(ZQ ãŸ0¤:‰¤æ*10G(pí.ðS”îà†¹Ù7È+«¸ %È Òå†BvJ¯f1/ÐY¥‰SÏ.áçŸÆ;AÙxVá`Éïy^[ˆPj>$Ý è$!V|$Õ¬Šçñžé³'“ÀsŒâ„I•‘LÏ«x¨Ï`òì %½IS^ó¢¬8Xº™ù³±Xíy©g5·¸Ìï)Íî‰ä'òNQž8»uSHMp£h–Ïôi.ÊkÓUyí‘CS6N|º*x¼ötzYmŽsܦ´²l‚¹Ü¢´œª3j#•Öô™õÕôѪjúÜZºž|Æ›>¯rš>V/MŸ?Å¥ÒnËÜÏv¥„ldºlZ´>Ê(«x|dÀgJ«'Nћ܂bÀ”N–D'™eXˆexM)´9µÜÏ+6LéÑèt±é}ƒ³¬b ± ¯)Å–I.“WŒÒÄý)©vK2kŒA;›H?¤wš¼%H<)ÀEã$­í÷ù%Ä` 5ëø„ú¾ ¬³ÊŠ&ÕOaÕÓr ›^nxÏ<›#‡¦$x÷ZC ½•뵘ÞËÎF6gÒœ…°M’u`”¥Œp^=‹ÏvÕ.ÖÛæ®Ü&9PÊËFܶå#œ*Õý²³ëG¸94Ëf[¼úðáüæ;§xÇÆMÔ‘ßS8´Ï˜ï-‚í/¡ì¼bÐ6Yx”ìhëH®³Çiæpc eö”‚jÖë„¡¯FyÈ÷% úGU·z[Vi«5ÞVýþ:ÊåF[Ë“Wè!_&‹oÖ/¢ÓÉFÍ` /ëØ¬Àp¸‰QªQˆvSæÐÃË×IbE)IÛ z²ÔWÆÜBÞ\)5+õ0D³7'ÅiðR^(RO€¼ç´„„Ë|ò¥8 á¡ÎLíÃéUz`F[ãbS½½¤;¢>Ž–D˜xc¤\LÔ÷bî¬çŠªfjÓ¤·Õ›Cï¬Lj„8Dµôl"X­Ð}VqWÝ7Êa|½?ˆD”~©šýx-ø­V…Z7à0o-zÃO"jÖìgàWñÕO͇®)W˲ÐòSeö¿Vw0Ñ…’-Û±“*&Nçú¶m·Ú—“¼ñ“qï’¤Vwyl . ³ºcÝð»²Ç‰µåÁRHÂÆ°!{ëÒ1‡Á¢úúÃ9˜§&`Û»æ!› È©h†Š©2õõèÏ#*ÇVšÀ`ÜxëP.á¦ÿ¦êê”ýû8ZÑ ãåŦM¹ÞéÙ‡‚D$ÒŠeª/K‡—oŒÝú7°ßÞ0Á4/ìõ(£F6ü&ˆ÷Å5&{£~å“üäK²!Éê¥{¯ƒŠ%•ñÈbüP­Dñ¼2äÆÐM÷²@Ÿœ9ä þc°|ù#áõ°×ÚŸçkÙÜT1ÃÆ«ÃjYuƒtHW-RfÂÇð–c€ÌÞDá^ZCù ,4DÜcz×e Où‡Ñ™‰U“aó¾3F+µ3gI‘ÛÓÚÔ€ "sè–i”™²ÏÍàÙ)óÒ‘2SÑÑÂʦ§@§cÆÀ£œ´/“E¢ùgÓpðl(Ë‘ò±^q$÷/CQMv/ß>T˃|3§ƒñË¡fƒ?ÕûUóµ/öÔˆ‹L£MV…óUê[¯5^'ÙÊaO)„ù¸™þ|UÚ]ËÀ˜LW­*1G,SŸH¨˜(§èu–ÏL4>L…qÆ)tçZU÷]™]%#ƒõã§^Œö+踆<ŧÂ\Ò•KuåÐ%ãè“"®[Ïù¦ùŠy‡•âr#xHÿ”ÐPÐs%=kP.Ïä+ýpÆ!ýpîÆ/f²@F9{Àóë7ŸßŸÃÿ~)‰œˆEÛ\¸[nkQ²)*>P1Qþ;y¸··mš/‡6Í"y}º,‚«ƒFç\žs“‹„.9=¿=Œ¿ä‹£ 7Þñ/¬Â°+ù~ƒxJû¡ƒ¯U6)ÏÐÒÇÛª\oØÈ7»jwglHë´jI+’ã¬.÷¡|¿©Û<æ©€¿ãª[åF^"´Ð²ŽÐ¢¶^Cà@¬·ë—Û§[ºÀø¢’‘o`ÓÅ/¦ÌjΣÇrRVü{%`¨¬Ä4º‚<öê‘SžØ ã‘AÑgµZqàÒKËG~½ ûjXˆeKºH|$%dâô¡˜mÀ/œÀ¸UÎ?|ßœ{Uþpõö¶(-|=Fý2Ť_† zéXîbl¾àD­hÏÑDÅùü,b! D«ý±îšý.ý ‘–‰£Núhð±ìjéñatVTxÛ¬E’C—šž±`Âʉ–[vl,ÀïZÎÙt«A,ì¹Gèd‰QàFºˆÊ¼õJl‘BW&{1ôo·r¦sØ×ú§&ðN-Sè~îÚÁÁ$ëäò+—Åš¨è+žzíª&AÁQêÊ»õÁ" ·Åq7­BAyý{5ñ‹ùA¬ì“J±áX†fUr’žRNAD+Kåø'îá§ MIàJ¤Àoç¾új~ïT[vC­Ïk‡!ö:t©JrQ–£ G’çÍ×ý¶)W²ƒÈ#¸÷··7¯ñÿç¸õîöF°`];q—œ¼åÌÚä‚ntÒ–3[ã§iv~;Å0˜©­b¢Õ­ø®€cù„:f5êg‚!µé›%àå}†æžUëŠËlú£i{›f¸¯’j ˆê…`ú͈}2$Ò¢7ÃÐ.Ú®yH}¯ ¡`¢\ÿbŒËÁìVP>à0¨ë~¡.?çø—MˆXVÈ_)[ó4"¦Éó€â×êŽed\z.Ä''XÀqŠs*¡•0!stŒùPk˜ü$˜œ²7Žƒk’Ähnã×¢à€ŽŠ«M3³&…âȤN»Xd@ÜvE9¸ºaI‘Ó§ Ñl¢2úÔÅU5`¯ÇˈB²xûÐn›Î› ÂÕzŸ1% €–—"‹IQø}]¶eWà=ØZ™Ó¤:²i¥nòQÞZƒP¥˜M-¿Ìºê¾ê*tÛUkL®zh;ϤÙ‰¦Z­«Gg‡Ú ÑHUÔ­½¡²˜ñŽ†Ë O5r‹ úúµ¹­h'ò†wC¼5$2.ÊÍ\‰oÞ Šwu“úV¹(ËB…;N¾ªá‡‹ëyäŠÛ³›77ŽePîõïûÔ%õ"Ðýdi§6ª9\Íç—Ž&íþ(s‰[>€–„޳³[îLHÌò’{!CtÕ×Çá9)kaãi»(›º wV‘oÈt çø7õ0æXWÄ£drøÛ.\Š$™ ߨ0“õ$Gèé¾³ˆÕçÜvÚÛ•Aj-Ý–Ã&IhØ0\† 7ïÆpv›ÅU[õé½qDTWƦ\}»‘?¼28:º´é/xË}·ÍµÄS³O¤×íêtf¹-{°‹H)îj†Ý/ù:4¡ß&Š\‘;žÒéF9[žž}WL¥?–CÖ‰‡%|h¬ôYÑ5ÇzEv>[¦˜cUû¾b ³br}õP¥ö¡‚Áv¯Ó\|%O@·ßà7ißà«¢W­øŠÎ*¾KßáWÉ#"%©80JF šËdwÉÖ ÙåL/¦˜„¥× ”’±‘†ÐkC¦rÓ—gf…v])&±ÃîWÑëäî=¶½x:ª|Ĩ˿2ÊíÎݪ_,ËÔ ÞE­2œj;³9Oæ鴃b¼(KÝWg§7ßÉÃüòlý¼ê¿ M Öª¯å£o¶[kê²xvžËó£ö{cùñ‰,3,µG ._Ç6»~MG5vêu?\u×4©6Da°ÚòÄ?K3Œ+û­ž®5^øNjs`TŸŒy9¨{ZüÆWƒSÁ  n½Ë)Âkr©ÑQô±Üª€Ez¾â€z¦BøL© P¦¶?ÙK\¶«ºäTу9š1B¶>øKÝhkÀÒ Ÿ)œ¶¡‡%ºé¬£]fÍ]“qIǃf*B–Êã~¹³¤ú7†ŸX©Ñµ€ø¨ä=R‡äv@ø®Á„²^ÕÃ8Êú2•y‹°ŠD˜zÖñδáh¡Zn´ÏrµÞÇb—‘彂 ÜÄŠI^ßÚ{·.z¸G#~­CÙIqäÀ„®í<øÐ1ÄŒ2ÈBâ1.¹ËÜð¼ yVËCWiÊq4áçÆÓ;Êr{Z´a~¶Ë¿° .E9ÈU6µ5,Zͯ¸F3saßë-JnÊ䪛bˆNå@ák©’e¡gJï2„¾ñ!7Ã|µM7¡¤fF•˧¨°èæIÂ)¯!Ê'¼tQ˜À<â+ÂÂÜ x~ƒá¸ûó²ù»‡3ɱ¼P€âArá ‰?¿;{û™¥™wkçá¾_üzh†rT‡‹ÑjT(z0'¹?¿›Ëé/c…£·?h»vqWr:ÝÖÕR·Âñ<×Ñí‰Ç²ûŽ“h©¨>˜ÿá—ÞQÿ.PVÅaì¾U ;·ñ8 Ã×úÀ|罩ƒÔ²Ž–X a°•Èâß?]Ú£#º|ý ÎseÊö‡“º²„~s^m+ñÏ'\”ÿ°¢ô|()é<»îQ°Ã$bÇ=œ—(JÐGÝgòNB‰¡?†e(¥íOæ1Ê$ãAëh…uDõúwe•$:}ͬŸëp°±ÙeÁ’É«R™T+,“<ý´6äú©¶:Ä·¨Ë, `d¡8Hß„}(Ø!D¢éÓ~E‚Æ~õö:Mm‰–WÞ&ËA`BÕª.ñýÏÐìA]ý:’²ã§M @ Ȥn„20‡„½ êŒoÄZ@•ˆ&Hæ[Ò/»ªÊø–88‡‚ŒIV…„ú3vcy¤ÃÁÙ“åX¼Yv­¦¢Ñ–‹˜Hn É—«ÝèŒ(X1 ¢étæ?Þ-/+Vž ç¤r{%×Û(cîØôß94“£ú=g"ՄƬ#/ð¯UÑáë>¥ÉÓAs*~Ú„`7–‰W‰A©Í×…¬G¸{Ï&ŽÕkù¤A¶q„ëí”ÿhš¿VUKfm¿áõödÑ(Åņ_ë\~ÿí±mG·Y€R„Aì>‚hóOó·ê8W¬XÄ_WÖ¼4†¥ ¸Ù)y¥ó’&7C]Ü=.ÀäÍDAû¶¼«¶T?DÕÿ¤"fw3“Â̤ÛZØÒpÓÄÍØõ¡^Uo<œ›¤¾”¥rI¾Kÿ«˜ËH£éØ«‹T½«lU•.ñWµmðª#î€o½û™NAjT &öïÅ×M)ÝÉÂbcUß«ÛíÿGPد›Õ(˜å¦rµ+á7õFµZü1“Rê—6ç$ˆßç?à6Å×Ãk£GSCë+ð¬®Ë¯Ò;™=_‹V?ò%l¨¹ltÚ3™´g:íK  *‡—‹æ>@GÄ”)kl1Ë8¾œ•-h„“S|Ú§JÝèjË®ÜUÞ•]¦oðhW¿‰U9+1z‹,g‘¯ÌÆ Ã+nº˜MB™<ͨ—ð=È¢À]Î6Ú'mcÔy ¶lê¯TjndøÁ=U5ŠtYaŒO¹a#”»_KíLú7¼üõ(-ÿˆÍ°‚Ÿ”9z /Äb”GJ·}`U'+°ꬦÕT¾¹R¹‡×ÀĬr-š“Ä5˜ÓkäQ'* ÆIn€Q£|ý¤1F%ÌŽ.$áKƒ¤l²F—('#‹ Ò©œ ÁŸDÁö~Á‹[ðkÄìÀàfÌQ^Íѯ$DqK\ÛÔxèúëPjJ§0*Åßò"úáN”†uYPýôLØûŒLñœL|—Un \=mYÖ«n2ñP6ž ‰v$C4Éxæô+›³‹óOÊèþhyÙ"d!LÍÿóœ™ÏdÞžs ¿°h‚S¬»rs–J È£0_~-Àä6š8Í7|öu8—Ý~4¿OÍfnîÒ™rò’;/ÏÔ´9.žÎb´#Fö+/þiŠçò)YËÉÏx&(ó§ÍÜøåÏzB‘x~ØÙI€æ&sÚ¥ÿÄ—œÿÐ̤Û;üð2c˜¨Íäv¶|m|åYÇøÃµæn_nŸ2ž‡²ñœìXvŒV†1/¿nT LÉfeŽŽçNµ=e&J󧤶ñ—›ÁIëVV*ž¥ØÊÕMÆÙv…€|òSi§Ç©:¦[ðK'£nÂò‰‘‰Óä—Q4 ÇÕ¿~R”³VœìRÓ_cr‹KÔ'ßé6æÀ¬L5É·F DjK‡¹ «É9S ÿ-èèÝ~›ƒlH9ó >•ça»ªY5w‰Ru@N²w¶T%ˆ¹|9Ÿÿíƒ9F4‡žêQ«¼[ùøÍJþ1¿ä±H_¬äù’§j%ÿÈ•ü£Wòñ’Ì,yÿFm„‰›Vq`—Múf­¤&ï ôŠ…:™’Ëÿšr"±.5AGɇD*Né1LJQθc€9‡ïNÍ).Æ|[!KY™8—š5”‹rzlíÇíËÅrÕ í’yüKCKRûr±3«ibž5I±P,–ç×·Æ14!¦LœeÑr±.)çSÒÔ"„Œ÷g´¯£ @*Âñ°ÏãwØóÜû€×ÁiÕ)guÿ:tU^éP¤«c|è¼!‚«¸?î²ÔZœ«T„û*EP¬"D”ÑœìÊ ÐÕM»3£vøC^·u]DC/À£Ë&y!†fxÑ+ ØSJ;÷Yô¨ËMFùÄ” ýH­iß_]m‘TÿuQ.ñõxð†#5*eøÔL¢fˆ"Tùdµ¢ûV"Šys?|+4z ñj³1ÈGò>ψϞÞöá„39Ks nx)'È(BmaÛíyê6‘,úز?áLÞIì>Oi2žá-ãYÊ2j”­zÖò"=¦b·üB|XO(ñ˜(á3e³$8ž+@}SCS\~¾¸ÁÑe.þð²*¯:2Kùää¸LJÜLâø:IyéM2·2YáÉÄ“ŒG¨æ4¬Q¶mY?2‘á ¨Ñr@NGV9(nžÏ†oØ*/¾­+>€ÍFh‹i,h#Ë%’g“wéb4ËÓšO”ó¼Š9Gô.ÓïMÍ”?a8[ KÜF;çX¶l-Àå»]•šA3!–e9¥Š89Ë:„ß"e÷FºûrYM(â¨,“ …Y,›©0Éñ!Æ´xl;úpîÂH{™õj%²ç=Ûò2$bù,è·]1ÒHõº­”xG¸ß—m¿i&LÆ< †©F°ludNKš+láÜUÿñLî®äXr4/:¹Ñ<}T©Hž´‰Í'dÊË•†ŽgK£Fó¥ócÌ|zµuôLOgæè rùC,Kù¨­S%ZÔç§W=¹p[n=‚ š¡GW®üÅÓ&ÉäLm>ËEãàÙlLÍ@ŠzœtVis«X¥yÚD,ŠsŽNÃH"£ìU)ëÙW³Ä÷2{Ÿ‡ºÍîôy‚”âõÕíéÚ¡ðöú”ÔahÔ~~&¿@Àgh!G²<µ‘–Ÿ± —ó#%å15(ïF4™hÉZÛuêÆHð®û³AeS™Al2K2ÉìŒÉ›ú6wËuöD &àåc¹æ¦p”±X’öÒqò£ò›Ø“ï¦J§¾ïår›IÙEû|EìLĆd•Xœ)H¢e½‰¦\{DóIÆ räBb—>1‰2–OÈàxI_vÊÍzÀòìâÝ\û`wýYyµàÜ”™d}¼ÏU­p7eHÕˆFËóý)¾s9H£œK»Ëà¦0‰é(ÍÇ Ž˜KeÞá—¦Þ¿‹0ãé&äÙVSɉc@D‹"£…«w ïK­´4Û™ÉÔû$•ЀŸ ©?§rÿ(Š·ÖÖC_ã3MXÖ¢ÿÓVúZûªZáM²My”ƒ9lð #^»Zz×3:Wuÿ%sH P/GäC™ï² °Þ2V9Æ%Ÿ€Õ>—Ï>ÆfÏpÙ3L|$;éýüjnŽÃMÕNQBïq‚œˆGUBfvˆŽûN1Â]ÆJ.!7J½s×p±¤™ÐÞ:½z“éÜ/Û<îè‘;Ò™e7¼ÿ4-n—+ÜïÎn¬«›‚ö‘=¥UðB>_е /‘èhVZoÝ~û;Xe,íº+WU6{N*¤¨™Bqüd hD¡ð­›ß¼FW÷¯‹Ó³›×Ê@ÿ…äj[= Å”Ììxp?::Ì€Ž ™¿Qg¥?ƒÚdVWm¥‘Pð¹m’ZãŜЌQœ5#á—ˆ"îTœÒ§Wƒ$†N+jm?QíüæQHyt%ÊîJ”ýdÂR—»1›ÊÕY§Ö –§ÌeèÍÏæè þLSL]ã>9r ÌO¨n½“œËÅ…„T4ÃJÅ„eöáâ]´Ú¾Íçæ€}f22ä%Ãã#ë¾Pª_öu&'õATÈB£ŸOÙ¼´##ôKs—½•ðè ·kЇdÿÒÜ™ÍYKòKÕÝU]Ó/ÄX¹ÝåÑde<¢3CL@ÕM"${TK½XÙjlXK°Ä¬¼ÚgnW„i<ô’€€1f:Ë9®¿jumˆHä‹3â¨ðˆò¼{اÜüs„B"ÉKJþ°_øŽëF(ºhŸãa?ƒØ¤cVËúáÓ•Çh—]g˜á³ãjN 1•÷éJÚUu¡ÙD¢$BÑaÌ-Œ]3d.· Òc1Ôn–ÐäÛ°²Z÷«]fù¤§b­æüêÜzðêcŸ;x õÉ@TÈBC*Ÿ1¸Â;8oVuÿú„š½~>e3*ËRnöúZmdVÃ'Ëô/ù2]á"c½IuUáB±zù21‹¡d,ƒ9d<{$¹‘ÌIT¨Ñ¬ÁÿíáV&xãš1FŽÍ–ÂÍÉM*–¥¹Äˆ©h³í]Ÿ¿4Gò‚²ºo¬Vt™™Š‹ù’·œÕgµ¸ ³Æ$?æV·  wþµù Éü»ŒD$3ì]*ÎUŒ¤n¯ê®ë&5»$Í‚¬jø%Ý¥T\Á‰¿hÐÐ’ÑÄÛ•„àe®j7XWÍ×ýP珞}3˜¢ƒÑs'©ˆéܘt•ò ¶(Û¶Ú¯àØïM»-ïšæK«±Ú])»U 4û󟋦³b¾Òl"wèTÌdBê:›â 8Ý~-{Üu.n!D¤ÞÂ5 kb â¥ÌÄ¿‘:iø›˜1(dˆ,Ey3¹‡ÛÇò!ÅP¤tíwuzsúA,–ÛÃxõY€R-LÕ‰¿½×àÁi¥ö%xuöáÓ‰øØ‚9³ ‡a©TâßÚ]˜ü…jE;iéà ¬‘IÇÓ*^¿ý‚M¹ípD|5ˆ$F”<ëfpæÀ5¥a†ÁƲ™è'Å-ŽTÚsˆÞÉan´„}˜Õ ƒMi }"¾;l‡z[‹¹ŽŒC‡ºV•º?+Dש]ncI¬Éž¶„¨*oñ²«Wv»\­ÐMO÷} —y•ç¥-lÁwÞM7ii…÷Û(œ–y¡+™íŸ&0bÀ–ÔöOBñ{Ú—côêý—r½N3sp„” wøÈ ÇŠª2O ñ¥4g#µ]µSJƒŠ":RrŽ SvÎoh鹋½1ÚYdYб€ŽÞîÍãÒ¬×ÖoÛGÉp‡” rêUEH´9 ZN}ëénµâ[ñÀ«…ËMyWãÙüJ!‚Î$•Cz máÚœ1´=DÆÐp¼„Q”¥"ý.É{/IN Ø’“‘òr eI… ¸ÒãÓźTCë­óõà¶/^al׿.zñ]^nDP5ü¡(·øNf ãœÝ‡Òîiºeh9 ]}ç³¥­L~ä—UsÉj5Á½b[v~½=ë«vŽ`Rå}+Š©Ã§”È‹úy$TÆÝ<òTºj ¸W0B «rt§÷+ÎXaå*¬†ÀÞ14 ûÔ^L¥wik-h'yW®Ø›Vþ+z¯ŠX¥ˆ¶É”¡mC”ZCÚ Îæ5‚€å.ïáemX€ãå.xzé‹Qfš‘ûmC°¸ l¾Ô¥;¹êûX®êF‹öúüô­(«¼è£Ö1+ÊWõ¹ä.4(˜UͨiÛ…X׊EêJ ‹µZÚvVÍd­*"âØÍ˜Í+ì³ú-¡(³­³óŒaÓž°Ü­3)îÖ~»uHn·f™éçÐòÚãã¾ì÷ËM×웃ÈÜ$ÆÊZšÔHK<ã…)õhºoJ–TW¯ „is>¨ ZÔ¤ýN+åñò–lN™2¥¹-ûMÆSã(Þ§gâC‚&jŒâ|~^ ˆ”Ÿ´ŸGÐÁzäd\@L£!¥zdŠõ~p€Ç’ =Ž0„ÀѹB/®wùd\°ˆÁfîõŠ@ptìÄÏ+æÄÿîÈg¤ÙÛJcBgù •Ûbbã/§Zh¤ ȇ²ËØŽJ°¹ˆHddš¿ÂEȧ_Z2H¬óÒ’ÂÇÈá»O(ÛµZ  ,å'L|úªý`ÎñLšò `ÎVVLÀ§._z[\ðèÜX¿:ÄÕÃ#x*¨$I›ß­wÃÔ&ÏÊxyÌHƒw“©´á—líæä„a†•ñraî^òŽ›ÄXÃ2WJý1Ç$QﮟHÝŠq— 8y?Òš¤eù–ÁdDJ1ɹh3.ˈwõ&’HV5˜û8&9gÊܺ‘ñÉKL¸©É%ÁRÿ©ºÓOz8~x4¹‰ÌóTxúH\€Ï…sëƒ+zU9ê\GÛš)Z½+¨{ì³XÖ'Œq!W m!.þôݳä ÷¸€ÇQ_u£ïÜᱎ©ïº  †|§PcÉ-IÕ:UW+^õƒ¨õR,ñ*Ó¦Þ›½ Ý ¸-úѶ‘ýy`¯;·IO7ÜÚ6`ò²{Œ”Kb1ä’µÇèYÕ¡š»æa!÷ˆS %@ "f&cH#±py¦f%j{@LJÔçDmPëí®+”Ô̲§%ØáÇMD!ÂÒñ^FNxñÏ'xÓ“¦{äﻘhÅÑ£¤ee€îJ?ˆ?IºÍ¡“¨¯]”«U÷!sJÄG»úÛ™ŠõËĈŠå_]‚/–»‡<Ùë8®²‘sµ§÷YWw¢×>mWÝ×9õã ½2Æ««Ë×GÒcjˆsèP¿©£‚nT}0qÏrŠÃA õ]ß8ÈIéËJÁšA㳯çI‘€…¹ §ô97ôÊÑ;z°AªÅ´}CM^Ñ^-Àé-\š4o¢êäè{iQ x)¹ÌUàL£õ»¨-$¤Å؇=*ÙŒ=ç2p÷4Ëïø½q«ì ÜJ¨äY¡lUooÏ®¯ÞžÌi'¦ù"‡tH˜9¥ƒð@“þ7s2:ÃáÇQ«ÿeLJˆl½ ¼2É6k¶-ËÈJÝàßx£ÒKµŸœ¢mR2U[5]»ÌjAç¦/Âý$‚°½}¨–p­¥Ñ®QðÜ)·ÍôýF%1ö¦±ºÌDj„Ò:óùûüqñ#ª9d˜åõaVÇÁ5Ék€˜÷ñ9(BÑônW-á4(î—pÚ»X‚áó¤/Ú8ÞP‘ñ³%XX§þhQzì¨Ã˜(¯Á`¨Ž]Ž9ïO¢x†£÷Î$ç¨ ¾R¹cŽÉõ¸Còè™\g„Çiµñ#¹î·wæÍxSFÄç óf=`K |!ÜÜR„½Ô¡–.鯴h@Ñ1“üt¨fó4­9 ðæ6ËH ’ÖO [’YGHðgÛ5;'kûÆn„¸™‘-Åœ2AÑÁJ2gW×óèT™•]UÛmÓÿñ_rui¼ž5l·Åõ\ˆ?A韧éü³£òÏOÑøoÓ4þ›£ñߦi¬&T`e*ðíä ¬&¨1Z&+éÄ\­Z‚Ì\]FB©üxq¶x{vöáb¢æ‡ ù{0üyjï».W€J-ï>~œ¦¤^>ä*P©äâìç‰J2¾ˆÌÂo¢’üZ©u¥\L­!ùÐMPóÐE³Ÿ§VM×ìñR®:…WůŸ@z’Î_ÆKmA¹©¥¹«ºòKvÿ•h©ïRJNÒæÝ'ÉUË]Cɺe’ÜršÀÀnQM؈â˯_S»“¿û CäÞ ‘W“‡HiÂ#_—Æ«uþšª³ßNÈ‚¥¶ù‡ŸgSu›>[`¥¦Ï×ó©zó³X¥çq$?‹R¯kR[~d§Ïì jÙg,Ž0-Vg;…~)zmW7R}ÿÿYt¥Ïa¿R‡HF Lžçæn‚ÜoYƒ,rŸ=iŽEš¿×¶õÄ‹€ZÌS»­½ G+LXxNÙ9;–x–¹˜èÄHAÅW¥9{àñu©áƒ™¯`âªfúhúe14‹c.u)¿(Y©f64³c?sÔ ÅQ=ØQƒ„¦Úž•ªyjÜÆ.a R˜É¦mø.ôÎÍXyè½£„Föq ÑŶÞÕôrçôÌ0·`¡ÑÒÝfûXÔ÷Åcs(Ê»¾ÙŠO’Ùúá$jòëBôº}NÃáéÌt:ú®!:0—×¾Y”ww]u¬å5E½+^>Ìe¸ofNŠ3HQßFüióX¬ÜœýßZ‹ÞÉ)¥Ó®—6å~]­þß¡;Tò³aRŸUýÿq2ÓJû®0t=;MvsÁLðEQïD×N$öÞú1±‡x.›®Z•K(ÉîÐdF:‘™J °î‹Ý£Þê›]–j¡à‘¥Þ‘ÿßê?.'ð.uöŒžÆüOIñy53õ·dD×^n ±A©T«ÞU:t0¨?ŠenõÄŠÑIÌ0‰3Ѭæ2øß ×í]¬šl?LáìÕXÌê-˜Ë0¾«+%®!؆PaF…ã–ÍwÆÑH=À?â´&ˆ¿ñN:sŸXòpµäQa|™étžqägÛ«VéQZ$…3ò7Þ "öƒÀ¿h„^Ǻúš.ItÂk0ˆqŠAÃG‹Þ‡HeÞ¯ò˜Çà„FOÌÁq‚ïÏnŠw/N%\2e&”ÙU$eµ©¢1´Ü悉4žÆ4N"4šo´Næ4Í·úhNrÐ.5´–¿ªîÑÓ#}9+»jw—z?àˆBîäWfUB4…‡ìò÷¡”ÈWöF`”ÎåÏn¹ïËvè²I1h c9jTl”ÝÕéÍíGàËØZ@~¡¥lÔŒ˜QšWç¨Ê#í‚7º·º ]µ«ð¢ˆ}›Öôyž¡âyg°P9Z¸¶ë=Ä —=áRô”3à©è¥_Äú0JÎyûj€´Z9ÕޛȾҦ#𬓆Ý0iü}’†nœ³žå@7û£…¤Êæ[¼($S„ÑÇ„MïPxƾu0Y²©?ãÍ í-¡"öVLÓoRÕºñktC*sÃ<±Õ¯þDì unñÒ×-HÒÉ;ërÊ«DF‚!a«’xô0[²r?ôyÃ'¾9l;r­·×Ú]¸ÖÝkVÕ~é‹¶\~A;µ²ÞZ1Hv«VTÍv{'¢"c´Š}X¥Iü53Rð µµ°äFÿºbÆzØÊ9—ôNª&]ÃF̺Ö:Ù÷M–¦Xôo5Ç©£¾8«ûeS\ͯ ÁX,õj«ÙäŒÈ>̲ñFd¤ua¹„¾ÍõÓuÏ÷2»ñõ´µ£ É~õqÞ1Òã=Õ´ò¶¤Ì*ûnJ=Ð]©‡Ñm)=|Ìœm©‡Ü}©‡ØÆÔ³3õÀlM•Ý]=te÷È‘òÇ´œ•ÏCd3ê!Üz`·£ˆòØ&VÇvŸ=À†` "¹!–!¿÷¢t`B§o?ß\¡YЮÙB½íåYÆçŸ?œ^~Ç}IÎ"}f"&¤%- Y!sûñïFˆW¼ú|uñ$—±…÷Àïá=›xÎ.ÞÕлNó°ikÿÕJ}U‡.cã)á’a´-© i•“#Ros\pPJFD¹îEÀO9ny¨}`ÒÉ$¥u1Z¡!â·ôÔÞÕëumëN|;ï[iB^4ë-1ÂÂ&?^|ü¾µèôËÉRj»3d½E屌ÊyÄnfq~^˜¤ˆe|‘;\V{x»²èþb7Ú¶ò§’ÇŽ*²*ó¶é»Œï6AÞê°„§[¾Ÿô¾Ýh#›i‰›ah˶æ¿7*ÒÿÞhç{#ÛÌÓ7@¹Ÿ˜z½k§¬*XJÖ-YM×–a^?©ˆ¿-âïcEü}¤ˆ¿§>œÜâ Þlù õÓèöã|û(a®˜¿Ÿ\Ìå²F ä JßvмÞ)N×ëÞAÃPq¦Ö#7ÊÑMñêÃéÙÍwÑAÏ_ºõŠóòÆgÈÏ¥þ£ü†eç`œèzbu¬µ±ŽWÆ:Ö˜¶•’dE9`Œ7#! ð| %*#\†2̱§c62nWmöÚ:SŽ"’[[!ïLv¤c/…#³es„s:Ý4^}øpîµí½·Bs“— ž¿OÜé„‚E8ÃO~Íz5›t”˜Œp¹É0×™‚ "¦/"ßâôí!÷ ÍCã±xÆÑÛw‹&PðR~£¨¶§QVÿÐ.à]JºÂ=$Õ7´3ˆqª\ñèêö&ð¢­ÁYXÝžZoÊ*z.¨eV% Z"äiwÁ ‚^„øåдdÏpÿ –Ë$Œª‡`W1„8ç¯?ÃÚ;Ê}¸Ï“·Âà×Áj"k wå€É»\"é“1!€»ÇxÅçïäoµ¢‘Æ®1¼oËÇìï‹§¼d<÷õqEÝÜûy\–ýP€u™¯åcqyzÆíеõnÊ|›ƒ¶":2ãvò¼¹¸ß7Ñ,b,D¢})6´uAÊ]¦+Õ(Þ#Õ…îTCÑdW®ð²µ^íó Ÿ}Κßå 6wÌžÎ-zÃéªr¹)ïê­ø2*O•ˆPÎ<½ÛÔž~ ÔÝ1 /‚òöì@iWÁ^NºÑ%ÃRAê…þYzÓ¥º‘—N2”»Hª^ŸT ÙÀ*‹%¼ýoáé?úVÕÜ£·qŠW›ÑŸº–éO]ëö§N]¾¼{jE‹Æe}ˆ!ãë³~wHs± ÂE:\ÄoéRUÚþ)æ—Ÿª÷eÛorÚ†‡¤$TŒËD:÷ˆUX¯Ç`k[ªT+Ú¾‚‹ãÕÊ÷hš»–Ll3È2x‡ò®%Z—8u†ŸùÕåMa£ähä2sËåÍ¢CvËqÃŽ™Œ€¼„TÞ¥-êÓ .j†2ß0Ù6Î}ë%îÓÒÑ!5Ò31ÄJ!8t¢•f²£XŸÆ…¼08$…Á„~òH¨Ï¢B 2€PyKyÄÇA(„ŸWiÎ4ƒSˆ¦´0v†±.3"æSwÁµ*´,‘Á‹â(# w¹`ºpÆ(CÝmŠØ¾Ë ²]5tƒ•%ÜL”CÏ„ªiˆþuiê í†ÂÕòW·—óï¸R;¬¶«)s^O˜B|dÖëŠ:uûéüÃylÞ+>¤]©7~0<’<5ŸPHƒ;Œs9duI¾7ÑëƒØÀ–òÙ”šÛÂ0µU½öÃp*é´±ã¶ÌF Š‚P‡8…òîžtŽ)*Ûô->AÏSè=½ €È6"þvïxÙ½B[öØ.§´pNÙ¶ËHûv#çjŸoθ^xLùôvA„£Zµæ˜^±úϹgèà¨öîÞ¿U(¡n úø®8}g5N© îéTŒT†¹7#¥“Ååå±ak%¦7ç A9š½ ,àÕFî–ãÐ.V ì”f°ñ±”ÓÐÎdœË̈¸üno Ì•j˾ÿš|…A{¼tlÀLGÜLD„ÝQ ÔYóÚìqS‘50Óá±ýC•Ó°|,¥q3ˆsY—”soñsÝ ‡r«^·o÷+¹Fuõùíwͬ{–,ž§ëß¹tEÉÇ75%UîÊ¥2Ì#o^6Ë)6Л¥¤Ö,©ÅófI_-âCJ¼ÜØ6«ž„½n«ý|SßBk½8.Ç[˜‹Ñzë™ÓÅ  tö¡ó}¶m+ózüÕ糫ï€ÒõÙÅIsž†¿ÿó¿ê¬ƒÚ2ÑSRŠ ¢f53¨  åX2æ®Ü×ênƒžI‡¦XÊÉÙFg€ÜU}o^ÃÖ¸“É"Yy’zÒlÊñÖGŠº0,ÅßÄf Ô¦6ö`Ÿ^ ÐI#橲¡ˆ\ˆw±ÜVe˜ÙNš–éÌd:3LgfÒ¹þp¾¸ùðéÇ‹«ÅÙéÙû·‹³oO?^\ýx"†Ø¶Nï 0¥‚Ý Ô[q‡¶¸¾„Ói¸ÙU 9oM›Cä±Zu5“qŽ)DOÄ1„(oxSkˆò&ó¹Ü¡lvµ4Ñzدª{8\Eñu›É––uZ3“Ö̦u­"‹XOThvFÿrÙxŠÔÍ<¹ç¡mÙƒkv¡4Š ¨G|Ð¥lÃõry=?ë'éºvA:ùÊ­grFzœ®ª»Ã¶,ÞËÊ(¼(˜q1ÝbúÊ1ʽ¡îJÈ[êhZÚ·xIx!žK7Â^N|aZ ñµ,û…W–)²á–í Ÿy%\øÊž–‰¼bå9ú…khD©zAŸTëâ¬bNUëGùø>-ÚÒ(¡¡­b ‘ã.ÉḠÔwTóqçÌFÄw lCÔ{üEó¯Î¶P³à²Køp¿äÕ“ô “½ýq­±¡¬[ ”×>¦é¾îª¯p™¹m¶õò1U£R¾všI©->ïÔÿ× ($‚ß6åj!–ƒP—]&mNÆ' ˜™Æ„”$Â_èxB×î O+阜OÛ⢥$Åз˜°ÄÛ®>‚©ƒ“ˆ))Ÿ¾BùÆ£É0Ô¢°vÄ)÷ÃXã®Û\Ö>à‹ñ`§0dªE9ŽW\ÜÐÑ'ã¡}ì³rŸÚûBd||]¬ª^Ì‹_ø:þiÚ×8Vwú@ôD½ÉÆðæ;×~‚‚ŽðÃZQPÈIÿ­§_Ò~‚¶4#bÍfD֬Ƞ¹ù‡Ù¹ðgFŽ”óýËÛrõñÇ:‰¨y&'oVô"”ìlÈ-Å4UvFÄqµs"·t‹Pé”Ldé$ð¡’'A¨þ¾‚÷uµ]Çr{¨FItå׉D@$$#B€%¤Ä¢vLÄ`…ÃÐBK®°^V°›×|!® ¢X‹ z—FÜh¾\&ÂâQL9>ƒÙsXÁŸ¡l2ÎéEóáõ¨ß1¶ß±•–K¶ŽdÓvF¶N‹(¡çCµ³Í)ç·J+­LáÛ¤›B*`¦èE{«%¹,d·ÇI9àZã·Ï€×½zÊÍ^¼²ùóš¡W‹EŒÌ3³°n=’e·D_4^ 9³>˸vÉ¥çfß\£YT½t·{«Ò4[Ì'9ì¿Y¾ÙÖü?&Û~«g›ÆÄ²é#…ãw¶ý ¢¿[>©ÑdI¢©Ð•o{£Âdà~ù„ÞN„¢íý~9Þý4žYCïê;x¶{ZÛ°šxÂ/šI®;ÿÈ£×ýêÎ.‚xßåËÀëµ~k(¢„~¯2šØ9V<×-Y’lßlª'õN"6Òt›*ÕC½tž[7gÍ[®Jx¶/žG¾ƒþ#³ôM¿º'”ÁXÿä !è¡~{(Fˆ}óbšÜ’Y©z¶“ŽLßÜ6k0"¯{©kÊQk~OI$Ú¦•ÌŒÊ(ï®l/N蘲dðjñƒLY^}T)kG'Órø»–7üÿ¡¼Ñ"ÕŸ\¦ñ‘$¯P½q%Õ^‹ì ýÃ*á™tbQf7MnÔŠç”ÃÌ+vðtž=hQ©hÿ3ÙÁ :7,ù©LÙ?Ó£ò¼øÌd-“ó ¿WV¼ ¨½ü¬Æ»x$¯^Ÿj·ˆ“zɘZ¥©Æ+’ö­÷7o9ŠL‡R¶…‰;R,4mØ»Ì%,´lˆ7áñ  ¾ìåŒÄ5 ‡bïBPtÊ1 •Šö×—H?öø©<ãË2?½RÍ„låGX¾pÖ¸¡è”3od ê6?çñ‘)’uod 꾈“ú†e3µÂSŽW37 ôœAJ^?xùËZòjBÆM-º<ž~G‹(åd;É“x']++°”eòä^µ,Y­O]-ÉÌbx‡ƒºâ`(½@í%+¶Ú{$3F¥œ£èŽD¾`ì2çM¼ñœ]’Ú!‰¯¹R´b‰2 Ã,·ø|pÈ‹):#”UpŠÛãCÒq€Ò\¨ã òmÙ€¡{¡ú²ÚnË}óP\_ýýçÀ˜>Üß‹ ´M³Í €)-ŒœA¤KÏ 41ª¸Q’M–ù}@½Z~˜'ø#n~ß-cYrÈ0ÀÏ)#×?Oñ éÔÜ’–øCœÃŒZâ'Pú]r 'bŒesº¼#d¼N®1¯y‚aë8ž0ä [3¢~Ãöl[·ô%‡ÎcÇsò™°úÕRVyò98 õiЇá®Kè3Dt&T×HMñ•Ä™¬½p ¡f´ªlÆ14áÉÙ0Ä’6ŒsH?‰ô÷£¤¿‘ε œC8Ã0*¤4]èœi5‡&Ø R²ž’K£‘ÒuD룤„ƒ—Ú¹ɣϓö©¦Í£f°Ú•9Ó"‚"¬ Ôa·íTL‹Zmc8“ÿm3&G’CÛ­;-ÒpghºùP¼Âzµ•˜ASýn ÑcÝf=Öm„è±nC¢Ç:øÆ\~8ý±ø|‘;Ñü&g‘sŽÉÙktY<Ý䬣4T´ïé£HªÔ¾§9;`LiÁ3 6ú {=?›_CÙ­ÁýzN¿FQGwýjÑ~Y'I¸8ËB„ÏD8¥¡ Î«·«×?ÌÏQûê—š×ÎhÚã«îop(`ÒÎ90àÓ“|e=·™pV E¬üIO t˜<4Ðt˜s£>ã…Ü—ÿ§÷U*)CÜÏC“ÿ«9½¹ àÞXgi½S*‡wJR+RcÄ_wx¹\”é+¡Q,+î~©–proÔöËr[%S”¯ã &f—÷Õ×¢¯“ÞøJe4N£_Åßõ²8ó7u³­º×pÀ÷—æNRî7‹eÕ ÉQÍÊýft$Ó`åÔr_u0€a«˜¿—Æj4È0° & £/Õc[&\9òX——Šó©©`ž~ÛÌêéµÀknÛ!œq$2.DÙngä‘D‘v§»æ(Æ:×bȽÊ͇âç?üë¿üWÈnrSó¢gîº(ä7¢% ©pÙgÛwŠ»ïFйïøâí»ìb=#š×kC̳<¯Å¬¾š½“ì¸ k/%Þ~YöüS9êr“Q>5Ê3»ùëÙüŸDdÙ-7õ±²|ä˜ Æü6ÈËx †m‘^ц _=|9cIh"õë(a¾|yr8ÈfsóÐ50Óþøc¹™±^”ÕCOùJºxKø&óFL:sڈ؀Ðs&Tû˜¦ê¡Üµ~KmÒpÚêq_îÀœ‰žüùŠt2vv¸ìêv(TÄ¿ËZñ”O›¯‚ˆ¯×›¯Ú™…Ñ™¯ÖI¾«¶M‹”"Âs Ò[&2./¥®®tÑt-mÞäRV Ò9JÛ±‹»®^­ÓßnnI¨è™Œ¦ýÆtvPElqœct!£]j«»lZRZÝqtVwÞöEƒld,š}¼+ûÊ¡}(›‡” ’#áÑ‚HY>_;XvÕi2Ð3ˆ $4Øñü¡l¥éÍŒŸºA0Hî¡›'t×Dm—ÜÈ}’B_ÆÓŸ©âa±L8sp1ZÑÃli7(ˆ¬è›9ä’·ÖšÔžœ¹ìc–,ôW×7?‡|¾Å™I›ydÒ>8žq`Ò2ç%zW.·ßâ‚#¦›óAB ËãÉŸ"ª4P°m-m"?A2¹.fD LûEM¼Zyñ­Ë9ŠÍT:{°Ï–uyˆÅê,Ê8ÿ‘+â %**z‡H‹fÜ#â /÷>‘#»Sdj£ÆÑ3è«`AL,ª-ÇoÑ5ó¬©À!£gtMŸ£l]î•5n=‡Ê1w{'nbR-J©ÖfÓš™´~Ú”Cq»©A©×‡sÅ«· (FÄ>íLÓÅ(½½ã@SAÜûäb:Có¥Úƒ¦å¶–1Ò}†Ý2Òï5žšÜÓ ÔÆ«¾ƒ”¥ýº±ÎA-†)Œ¢d¬R9]­Þ|¬v¢g×o %; ¡(†;ŸÚPí`YMáèɰd5†gm’£o0±|ÜoËc“u•Ù`Ã%r?“QÞ€äHLyÍ ÅúVç3è9 ÷oÃN¿4qK6Å™ã9Òú-‰[Þ…¯ì©yiJ4÷ºQÃA iEMg:~kÕQÅÅl¤åÞú§¢¹o±ûè‹ëž{WݾžfJÊöµz—Ûç¼¾í¹7¶½÷’¶gÞËuêt̼îóMˆ÷QKÝ=k@¼÷ u4#¨'4D­<m€>Û–xš WkߊŸí·i›â}ܤx·(Þ»ÅûÀžøóò’UÌ,W¯pM=¯¶•ørHƒâÑHÝ5{Ü?¿AC’‡¶|0v¦b)1GLy³zØ>¢ØÖðÒ­¸+;pö&fµû÷]Åò%¤?ÃB&CXç±åYúìˆù]]t?>Å%úh\…¹IÈçLFêÓ‚¨°ä°<°bEa%ÅRý™K3뤯çùúà|¯wŽöH{+ ÁRè°x¬œ*e ¾7ÖhŒöÈä‹\S¾³¶ãÈú“qb/šoý½ób‡V¶ú²³Ê·#yµ/[»E”ÐK—ÅÄ*Mä0Z‘‰éÃ9C°RÞ¦²)z!I àhê¸QícBÃ]Ê]³­²épH"9šž ø±Á ~"”åk#ŠÉù¾7BѼRD–°%Çh)vΰÒá„ Go#/¼8¢³@å9{`±–)‰£lI°Ï8 tp–¢æ  )Jè(oiAÑ©pYpø|Tôê<~YfÉzÞY˜ ë]? ÒçÊ›Wl½ÞÓçæ:*ïËlÐÜWLGßbGêiƒõÞ˜vãI<“±÷ÁýÛo¬[錰_U.'ösêÖL*}~›c©÷4R5@m.D”Þ)!µaø!tÙìZð9HöFP}€égtU/VÄå‡NÄ Äçé&ÀóÅ;zƒ|åMÇEeXÉPBDPÇâäÔ˜¥®Tâ ë3€Hn@Å|ø7èÔ0ƒGù쎉¯ð‰Ì¼aþ³Ãº-Íq²ìpî³µC¹-áÂUò¼,ä+ÇÑ-LÓ?á« Ý*¥n½WLÆmÓòº¶r)æ¿éÖÇ¡--;“±” #–õ%)$–RÌë Ì6DÅ/è%Dæißc•‚C7«Ïd°õ{η&Kú-ødøÞf‚t(ZE ðÅ2—Y êAÑóí÷†(þõÐ eJ-¥HTâo^áß ÕuÕnvTÉœú@£ÖDÕ&ŒW~5/ DÒÀÛIe `(ÕŽÞDj%µN]ÃgN}µ<Àkâ¼Ó&m(éØàüÉóç:VŽ{=ýÝ!½[‰ñH”<&àçÃ4íêAL¶ä†æKÒG³`%¤‰‡`BMÉH‡,’wôªÆBá­¹3õá¸ÐÎLÙv‘kέ›Iëy+n}`-sÐÒ_<â…Õ¤•Ù~¬O5l»V„ï×Ê?¢=¸Í¶2—StÞÇì”û%slì%س߱¾ýŒÑVQøÊ^(WpRW€3kÀƒûÙÐÑaMè˜ÈtòRGדú]&iž«G‘9:œÀäØl»*“öyÉȰe¸,¿Ahß–ðOñ#‚ÃáÏ—ÿýŸÿ%«š\ÇS# K‰\¸/4È¿<ò^YaËãp·OO”U‡¡Tø UèиŸ?µweIdn€j0;ºÈ¸pd&2O›OªNxÏ"ë…ߘ+ i±'³À‡aÈ€Hk£>7o¹öDû˜ÉΞ3#Ú{¶:'3qË/ë ]‚þÇÛÂeWëûfY›whÁ­Fû%Ï4wš*7¯Ý¾h±±í•Øve̶TŸ²m¦¶®’ÈGNsDÝbM[~rTæöú@W¹wÈkÀSZ[§O{eWãåù'^ïg&…kùJF,Bæ=8Eçb]ÒÕw¬˜Ï ŠŠ³>ñü·=ø¨“¯¹7ç¨÷ðC}Ô‰Þ~_¶ý¦2 xpŸ‰Ž(Á·b®€Hò78O0#CÂøß€XÐö°XU÷åa›¨ Öû0ÓV¹S»ry=—¦t42èËÇl'ínu‹ÄI»ŒEûf¨ï¡Õ㸹¾Â­°¾­*1Ïë÷æ3a0–}ïjÖ2JçeùELK½Jè`^%4–b"F¥í+Ò…|sÚ?ñ1+$f”Îtb×Êrµû°µWʇ¦Ùö 0wÜvͺ+wžvsÞô&†§Ú1vVJÓ>25©þ"ŠSÑûoT„Ò/rwØ.îë-n ¥‡…¤Ze3ƧŠy»­‡â†œÀ£ŸN¤²èÅrSî×ÕjÑU½hj …lÓ-„Ôj+Ò«Rœ‰g*Å™JñZÆA»ÝHÿ‚"îŠXÁeó žÆ79ï⎢þÉ/âŒ.?Ý K5Å8ÚÚ]Ên×e]øÊžš“äc[æP¥On 0Ò E ¬3•Å7á·Ço0’9“¡ŒCOŸY|êò!kn·ÓøHëÖÏf™îG%Ÿ6Ò©ú“(•`öÍ߃¸Óa:ÉÉR¬ã2yr:¯S[§ü%³›_EñœpÃ÷nM‚ûÎÀQÓ²ÚOi÷D$Ò€,‚kýžüÓ Ö&ÒŸŒÑz±Œ„áw͇Ó+üJËÌd¬oð¹tº‡_£E„ÈË—Á¤jÍ[¤òø>ƒG°ŠÛoêþK~p¬‰‰8¶—h™'–©ïOxõÏ¢ÊôƒoÇÔmõ¦È“ˆ¶t/n75Q _&g™Åá:ßrµ%Ër¹w°“o¬ %®=W°ë˜Ý %:ÒL0’kÒV ™£ÍX–ûâ½ó­Ð[ÜԢƤû“»gf%lòÿ°œ8‚ÔY:‡±.dÑé¤.‹Péï÷Ü Œe,¬6þÂ#ÜÃÃX®o<ˆ¯À¾#¥hA5ªJÆšÎ4í?ljO›tZ…N«?É üòÊt°xVݞƷ€iÅícåáöF¾•ã$¿u¡=¥iä”Âxƒà?~!m®CËmöÜN3䃴å†<ÓYÇìùäT€¾SÂSx&ß°Ã}[ºNg"¥ŸÎF¬Óùp: ©•"TúRÌ­Šû°øF?´Á÷˜¹íÁ‘fÏ>™VldžVh ÞŸðêŸE5lÀß©Ózm‘'3k»~œ¦kk¢¾LÎ2‹?Â;(t¾Í¢Öh“Í2ƒ”|s`œ¢5£ÚîrY¶»ÁvÇpkw<­¶ù*¾nòšônî¥ÙM—i-ëe hOkœïE2s™J_¼*[ô:s'»?¢å‰»mƒ×ŠóÝÉx^4ב1æ\¦ÃáÉiÙe2:\1…[N{)¢„~ÏBÓ/=Ãc[e´O CÇÏ ÞmŽ(ß·õó‰âV@ØýKs—ÁÒ¢(7ê2<Ájߕˌü”òQîs~G€gtyz†¯ûyZi6! ¢UêDß~.´—2Ê:š&zjr:&$á8h@¡sLCçrrŒfú»È ßTòiýÑÚG‰Qyæáü{wT§Nr²F™<9#¨S[§ü%³›_EñœpÃ÷îm³£õvt¶v!³>Þªå›N½d¼’xZ!ÕžúNí©ëÌZð',±gäiúÿ,¸A×Q*cÑNàæÌíºæ _Ù·Ïp^uñùñ+‰ï¡z˜Ø{‡5lÇh«nW÷=<êÎíD$ÒÄ,‚ë-žüÓ*À&ÒŸŒÑz±Œ„]æw͇ÓSüJËÌd¬ßð¹tº_£E„ÈË—Á¤jÍ[¤ò" eË º>zß+“Æ@r{DGÚœ4!Âô+õ´bþUá)<“oØ=¾-]§?ÒOg#Ö ‚|8€ÔJ*}© æVEŒ}Xñ (ꂊdÁµéôƒDF 9 §ƒ9 ýrS ,<—h±&Ìîb¡d¤ùZàL¹®Ç§6¹Ú ›NéÔfž0Ê÷e4ì³ÿà|::R÷ÓÊ"ÖÙG Ãéø‘öQŒ“|ÉÓ/L³›¾ˆ5ý&•kèTöe¦Æ½}¿¥÷"Ùašó?&7n3vª/+£ÑFËäÔm«NÍ,o[ ªs$l%æ]H3¯¥ÙωÚ)^6û}•aöj\È¡®6§-ÈËDŸ…+,ÎfÄËD¾[N,Ö™T>X×±tžÖ¦tV3ÍÏ3^ü£òæŽLOÈ|tôˆæÞC˜PŒûvå3¹Ú“y©ìñî¨xŽ)ÆÉÝÔi­ÖxÈé”NZO«D_tzÓûO^Aœ¤sðMrï±ÿs2Îve·qL*›Twæ ‡íÐnû)F þ^xÜMî.B$Ñ\Ž»±.¢ä_d4-§{GVFã=âD>ÙΠ+=³RÀ-¶éëQDˆüNe4”ëìæØHõ‹(®k‰'vÞrÝŸ°ªŸÁ2lߊ¤ÓÐL9§¨Çš–ÇÝiS¦ô _ÙKd)¯ÈyÆ~AóSPÈÍc&Ï_R_ï±ùÊK~®Oât^„>Óˆön›ÎžA$gÉ;SxÑ‚Ÿë Õ5’¶’ø^àohع Ó5r VZp¤M1f+]™§«2]ȪÕ°éC¦NsOšŒä+f,N§¶#}…/“³Ìâð oÆÒn#Ód'L¬ãóL~"ý¢ËŽÃ“Ù†íõÛ“ušmÎÔvdJ;2•õ¦°/;uµ˪–¸WìY»µ‘¦‹7?ó›/£ïŠ²ÍØÈ=±1þ$FãÙ¤¹Öü9{ÙVDFfâÚÏ×°m Œâ—ËgvµDóÀTF¤_Æïá²WÛ5÷uÖñ:w˜Á%1íñ#‚‘IÐÕÅY¡Í=¹Eæö=i&Œ#y`MÖw¼ æ‘z'uýo¦õ'£'°ýdUé9ËOýI[.«]ùE|…sLçÄÐR«‰õMèbÔࣉ´¶|¤ë»œe‡4d¾Ok8’P!n¯ê 9 8Ý®VÔ÷#¸Ê­—ÅõÜË–ØŒ»L\Š™ùºCÀdC`ã.Iº7xõœ˜fÁ8OŒzNLè~ŽÅÐ{¢Ñ “@MÕ7°¼&ÓÍ0½vƒ@—ÇS¯9Jy«*鲚C:éËÚ² œv겸sÒàŠe«Ýñ(·’’>7ÒÄú~ó¥zÌ!æ b2Æ#&©yqkb>_@¤ ¥(m%Ñ!S\,ÄAD»øå r_ða¸PTñB•èö«ƒhAå¶J¼Âá±Z¹Š›aœeáˆHc"]½¡¯ Ágß|ÝV«5κªo¶G¨{.dD±,ëZ ±éää©ù¤¨•«»RµÇ'\_ëýªù úw‹m½«“Ÿ¦ìf2ØRÐ@=%Cèêýᡸ9½,d¨]¥®|U+¢Ä1k _šqgßô‹rµ«SíÌÇi="|†áVj6rJˆy»9½šiËòårÙDµ ‘¾ƒ•¥Ó~]åñ±@ˆ‰0¤$ƒ’£VS.ÅN "Ò =tNì*ª—*’Khúëj;ƒ*§„!z&¢aìpiSA$¿†Ï6î•b8ÛÞÏúz-Æû€õ=˜õ¤ÌÅ|rh–bbÌeaS%<$…8‡4„{l!H•1üUûeZÃÁL¹’¯8—Íþ¾^:œëhRâ#U9¬(С…/ “ÄäŸ÷uW}-·[pÆŒV5xæb)­'>Š’YÙ““4äxSÊs€¶‘®Ú4á„ S=ú * ‚tôÃßP3ç§?bÁˆ)¨SzĨwIg» ’’.%†„ÔŸr-#¡Ÿ×äðð°ç±ÑÁªÙȆ!ok£Ïàð,»÷g7Šá6ñÜÈGQV[ûÜÈÀ ¼‡~D3¾Ëf¥8eÁ¼ÑÏ’µú¦\-ïs¯‹thÈŠ D:è›Ûé6A…):bM³Ü¤ýrFÀ”F:¾8}!9Ũú«Ër ·†7•÷M„í ¾W7"Á®Ü•Ô:ƒÈ¥˜›˜ì¬™íœÜxX'3:ÎË‹öšáÓWXúÃ'1NIïË!·œ=(%&¢˜2Öî(&¯[W§·X¦š‡ÚxÑ RS; ãKôˆ<}ËÄÕËéhî’î‘ M]F¸Å-ÃHa¿ï盃t$©Ö T›†L°f׿0k9V­ÇHš.ªD'‚ºïîê¡+»Çâú?®â[ª??™õªúÃúE¿i¾’ÑR|~¿SôÚœ^ÔrݧõúMë}_M_W[kîö×CÕ=b{ÎùȆhÊc±ÇxŸZ"&Ýîž^‰:RaSPb}!¸–¨`Èr†¨^UíOÅÕï~ò>ƒbÖ0”YcI©«—¶ DÊúïÒhú¬©QÏNzjÔ«©Ñ™©ºA|Oø™‘q¼œ9Ìqx‡ŒvóxŽ(%è~EÔøÄIÊݸr¹>cYioƒ.JûgÉ.w~¾)ÅB ÉŠ¡­e´¥ ^i˜èº;àÕU÷UW1©ÄìYäôÍzÛô}©}_töÏÅÌ$ íÃÀ¦‰˜¼4bA¶róʦ)?|:»2!iöX ¡$tsúñôòâ¯×‹÷×óÛÅ_ßþ}qúéözqz~nÕo›æËBô- Ð?U5$2‰Ì0£öÃõõ_ï®?‚ê¹U «=òÈ€÷˜fâßP9O/, IJ)e{1}‹¿ÇZ|އ 葯4†Zòåµ31ìgµ¿d70siŽGµ#@ÔøVâÖÖ°оï`ÔlöÒá—l‡bN»Ïqihä5#Lvf‚gÍ^zý’ÉÎ0Ù‰* =lû)T¨½üÇÖqhù*’qo4Ö²€_3%i6äx©ÎÈDï×+vÑã:¡·Ùèk¼™(г†î_'Ã#¦B—ùô09ê·Õ:BïÒôšn A-C½ãàÓìñfdšLÙM#‚ù8îábFþ–_g9 A=ýxõIÅ€ ;кY U?äx¤CœÑ¼™I9‹CB®‚Z åâ»§§ÿ`’y%†¢»î°_ÜUBCÅ7o÷ªàÏ™’Á²ÀˆÞ]çv"줓¨ñ¶•°0õ+þv¶ËÅo!±Üšóü@ìå…W}Pç(ê—•(ʺ‘…#¾‹ðÏ¢+´:”ŸQùk1ïMT- ÕùÄG¡±‡CÉâ ÎR„bQ¨ý6°õ:Ô» Þ'~ÍLBfÈÔ Ý¼ý8¿˜ß¾½º]œ]_^ž^/n/.ß^ºuÕã—hÃÜãKÀäf˜OåêêíÙíâãÛÛ#ôbTFHÄÕg}ãTL7~ßM(6ÆO=.²m Xô>}ƒ‡Ej+U‰z´†®Ù.pè\ÕݳŠRšá` )¹årûñúÃâæôöýâüâãI{ƒaVïF¤Ò†›þ¿äÁ¸ºqW‚±y2ÎÖË/b2¿,E׉9£Qo$N)Á¿gRFþƒˆüSvH˜ààÇH¨X%Ö… ¬ìêOüíܘé!/KXË\œ÷ì7À9tuûã‡ý>èGõk-j^t‹C·/Äð~äj8´§Ì1^{oÍe  ø[Á=Âþ¡j<ð'̬_bô†ÃšR ñhwQM'Ñ#µäÒ6ÀP´öÃx#!1³Ir²KK„Qf0A2ß×7‡½üâÞ¨<@}‰ýŒÚÛʨí.FÝ’¾×_Úm}‡K¤U}At‹º’jôµŠäe²ØЗ1èU2_H¶øºå®ƒ¼9¡ÀµvX+[•°ƒTˆÁ­ãÛ}…ªçÄ'í—õ¿ŽgÒ”`2#þþÿx{ÓÝÈql]ô¿ŸB@5ª€RçîÊš}Nçä.Oåpfvãâ"®"B«¬¢$…‡úÕ±°÷Ëõ“®‰“(‰átß?vˆ\ÃGŠâ¸¸–S·îa34ôY]ª¡±Mþò—äxƒÇ‘Ú‚‘„ín¡úÍ”PˆÔ‚¥³l€†Á: ,Ñ|-`œ:1µ(4"딸™;¶7Ø›Ï6j u>û:9Ë»W³×_'9lÖ©ÏÞ¢ÐZ­µ¾mò\iKþ÷&?ýù?@Lø§ôY4Z#¤Y:áÑžSÍ>¥Ò2Ô§ÇU ~6çõ–îÚ;:yïõ…;í$Ñ.³+NKEÈ…x=ßòª”'«óŒ é¿Vw›?Òâvº F£0yJµ,]g¿pŠÑWfÕzyþ©åZþÄò‰˜TÄh•'œ“¼¡£Últì¿£"zŒ×9®uöOp—BH½í¼©ë(@7™‡—³ùåùùÕÁœ­îàps5o«.{ˆ(¥Çáª3ÊNYà!?«žmÕŠb£èzjùþÞ4uUïÚä‰@ƒ½¨Ë×ôZÊ"ŸñM¦ˆ–QoÓeðõCnjĽ‚SÑ y´ÕÂ.^”:$ì©!öWøÏ«^ù ÷³2F¸Mî«pDYvWæëÀ¢| sb_•%æµþùurI/+ù€çoí×øOjpxËïÔ‚’Ww…zá}×ÒA,µÆ4£C_œL½±Ò¿$ŸÔ ™Ÿ`ºuÑÔjû•…H­jº¸N—)}$"à-ý[8¯‰×À ŠRÇÿ(õÀë;ŸÖÇ¢á‡b>Ä› Ò¿ÚE¢ysLm1¥¯@œÐWt¬à XêˆlrX'M‹D:_$1ãÁ´ŸËœW~¡jAZU£Ër·Šêž\† êT‹;Æô1Ú¹Ý#‰#/…±Ê‘:¬™]Ö¥Ó¶Û|Yd弫·q³7—ÁWŹ)‹Ó#®ßä­ªú]ãb€ýÀ|]D•Ó÷t1G´CŽíz;×?')Ô>Üã9°7Õe:j^ˆ}<–³¥|ù·¢ú-ûæ«oÏÍ~K 0ƒ ]¥Ï0Gj­IÒ<¬ø(ÏŽ¢]ÙE)Qt}À,Âá7ªZŸ"¬ö¹¥«h(4¬-H/Z!3Õ™) »ÀtîèõYïCØÕ}½Þ{êg)UãºpqòáÝñÙüíñÉÕ5÷;zûNÔ`!J¼ 8 ƒ. ßGÚ qÔX^kJÙ39½“Ìì߮꥽«B9(’Gy®ÃlíuzÌ”C̯ˆ*ÌübUgí°Ì&1Hëé×jôjñM÷dý±ªÇd©l–„xš«&°ë‡Ç}¯‹6wÝMÝä¾ø¼ÂÑaX &%³û‚ÎóÀºà.ƒVǵ3,0ĪR M\Á·ínD­Ê%@ É›EÞÔª^w‹¶+º]—ë‹ïÞ.»rDº!"%·‰VXVÖ¶)î 5ƒÌ“¼UóDû rO¹F4›S°±ƒ¯ÐÞú˜P³ùµÝîqo& o 䆬ëâ”7žÀUÒ臀ù$™HÅþaà[hóÑ6Ù$ ñ[84HWê“Ç­ùS¹ç±ÊÉ$wfá‡ÐÝèG Ù"Ž?ZO`òúüÀ9ûIà ’s„4~wD§&¿µÐ_—Ã"4ÉÒô€ëo³ó³þaŠÃ½É7øc5¬@“ðç¦9äH̤¼~EÇ`ðÔWT7£Zj¶YJ˜Ôá©ú–·ùêë¤rNä|ùuµ®W‹DÀ˜ZŠp Ïzšêö¯†Å[Ç[1'Zo“¯ŠvX4f󗆔‚úŸF*ý1Û”Ãr!—Ä"HýÇáéÉز„w–HyÒ¢™²ß¨)ƒó¡á+@F‚-6€ –¬-Å##Ë4ã¬r P9=¦zV•õ®©ÑÒlr¢00ž(D¶Ûl2³[°*UIÿ-d?3Ù¿þù?pÞ³ÓáUä’#™â§ t,³í(Æ=A ¢A€ q7ÙC±Ùmä«SKÎ5Þ|';6 fÛêzbÛ %ÇgB¢¾Ôëx܆ÚAm q0·tUy¶ŸŸW-Æò¸³º©Ç‘Z„ Òf|øC&dS¼Zµ¸hx…%cÙsš¦­&8´Æ€—T@9g´0߃í*>r¤æKSm¸™(¿êÃÊQPHÁ³Y$¦+Q¬Jñ õ/ošDõ[P'!=×zÉ6¬éZ/×a ê§ßë­]6y^qCºª6ŸÐTñ&MBÄh°WTÅ&+¹DƒÒUÑs¸ô;&ŸiHƒ0àŒ"ó`µJ‚‹™ê½½¥¼€ÕÖçím1þ‘i*Ö¤™¨«ÚnÁ²[}VÔŠkì³(*mCԺɮÕ\lžUUÝeÓh€žÐ„!.U ŸìIUdÐT ™úº—7YCuÄr’î–ßtÝ6ɶE÷M±]Þdã-ŒiŸ0à¬"Øâ‡lÞ ç÷5ý–-|88¤ˆHxêFäCj2! Ûóum=ÞÚ€ÀÌÉð3ô¥@-ÃÔ1 nùŒë V‚Ä å ÍNkÁ2ýíCUtlsëË*kØHÈÇÛ•¦"­†iT³"Öºª²)•ŠDëróÑje*_ÜI½~}vT„‹ý|²|L¦ [¨§8ÑÙA­jU7SúHk#–]˜Ù×´ÉŠrT ÈòÍHúµzcvÖfô9t˜~xX Ѱ&f°;ñÈ¡¢jVã=,$u?bջ°„ ^­^ Ø!Ýš•¬o) U,"µ*Öº+KÞŒªþõÏÿÓÉ«Øw×× šJØWRW¹¶ÿÒÃ4¤J0Ä+ÿŽ¬Æº}˜·Ùã¸.¢a]̺T·æp4këëî<Š´Û<_ªýX©¹M«&ÜžQ I‘#„m ¾U¨’¿Æy´+èéUýR³îjæ(Þmj g;®[¨doN˜&+A(š[˜NLN¬,:Ön1ÊT–æT–b"êk…{¼ž‘‚41{xáNAÉæ®?ë ·SM~\¼"`é@Š˜©þðæÐ °‰ÿ&‘‚1_­Ç%ÖJ›CƒÈð¦–EàíkÁTõX«©‘ª,à€,(ž²xƒ‹ézû[”þ"+š¼nGÄ0ï"µ¾b@‚†•]¥ïË©&uT´Ë:ùtr¤ãª÷4»E6ªX=Òjíø4¬üó‡·ãj[QÚZ*Ûl²´‡³Ãa¥Ë|Lç’[3ûêç°Â÷?½9¦Û>oª5Ìo†5Wã¯òY{e½b|Fp’Wõ]ÁõAÕ«¼,ëö/ÿ1¦^hdƒ9†N†òZ‘$ç3E3äûißÛ0¾÷P|? âû) ?McøÉÆð“‡á§i ? cßiã­(ø<–¨?ë£Æšhé`wQÌe#á¤q4|Œ<ŒhâÛÈõ·‘ÛßFõm¼ý6¦ÞƒVlëU{Øj¢|º\±åQI[çŠXñjRñJ¯¢«5RH[•m³r3¡ˆxŽB l‰t^elo VÏO''g‡‡'§AÕy7¸ÏØ£ÒDdq´g£úÁÚGØÄõrZÓˆ„R£Ò¬ÖÌU§=µ·ª§Z`Í °^Æ}ÙçÛ¼šÝ×ÁOÊñã6®·çî‰NàÆ\ÒLAp}×|–—š€ôz5d¶ä±zbŸh0ÑèººÆøø¹‡7AEî5\›Íª¬|ü#¼® j{P‹w Žßâ½\Õ±ãC¡>”Á<_Z]£N¼ÎLÁb: •pF’;FQ˜Æ_“XHøeM‚ Nx\·ÕÝÉ:°[ ¶x}Tù¶hò- @þ:WM´È±³¿§áæTƒíð÷&[e£oš(xh#êB¿:M~½DŠÀNä«ê¡)®O#w[Z3à èOÎìcž.È3‹ª“‚a›—¢g2ÐM–2ZEQÄÀ}&I‚5­ßÿjÂÚC úfFtc‚ô|¨Þ—Cn¦š ÿúç¡ä¨a‹z°NT‚¨v]=CQ°f ]'u¶¢û¼Ü„‡ÄT Ið&þu!NwñÞ]M¹oçùò› ,DdîåN޾±ôÓ%œ%â¡hT‰x$J„¹­Z=@èøc§f2áéGŸŠµNõàš=jÐ×7ýê ¨Æ8ppó5Wnèx˜7|8õ3ÙË›˜jë]³[vá;-AB}»Fsr÷×&䞀÷Ý(\#Q‹£+>|e¶¶æáZK mÎ%èù(F—ÖÞ‚Ôüdƒ‹»Ð7¦–XH«¦®›(Hé ^Û¸Qbõ>>ŒÃ[­ÈUÕ«`0r‡¥GÔ¿Ä"¿#Ê¿^nÁ™î¦õ£Ê,B¾=bqb<ͺ^—ìª79â ¶â‰B^ÂÃ'w2¡¹FêvÆ-Ý>ná‚TÖEWf‹9lcˆ¿ aH-ãrù£Ç»¢;É ó€Ý`?0ˆhx3›è£ÀÎÕû¼û£§äu¹/?n¬ô†ÈÈ‘Q½1û°§ÒãúïŸW…iê3‚ŸSD­¬i‘·?N¼xEÀ;Ý?Ò+6›ØÉ—¿üØ~¥EñÀ†ó„*¦2;ëÈ#J!>rŒ²²€g\ÑÈæ9ÒG·ž¤(V•²¨ÆÞÝzP >@ÕψÒU›ð•W—‚løf+6|BËZ¹Ž8U2bꪜ±ˆFιõ½súQšz›W-ì›Nè2V¥¹P›ì½F+Ú Y õŽ*ħ…8›¹ÏÆçòšŠW ƒÆÑò¥¬)¶Ý”* EHom{yói&À« äÚ»¼gävuØpÚ¥`Ëïš-§©÷’ùú2¹:Ü}Š'ßk‹v¤ŽþÖ…è ØÊ¡ƒÚeåägoèx×Ñðë1¢Ä¼ey.qcVŠ!góÓ‘xx—óÝÜHÆ Ú•ÝÄ;@ÖŠÔ¨E(²Êw)<³|¿q‘û‰ˆÆeyßöôQé!‡½u7»çÎîŠaË믻‚¶õm¢¤ªgŠôÖ—¨„Nw®&u`›žÏŽÑ›µe_”ƒãÓLb÷&š"©Í—ªg˜ÀADF93Ù)©µ¢å†§úŽyÙ †/¶sÚl˜ÄâÑÛ°|Q6B˜6_ðŽpkh×hKG¦v»ƒX”-îÀŒ|ö2ˆ¼ÝLam7º–V`ïò±ÜeåŽÂ‘fÉlvJG…9xrƒ¤²4 m²«V–7>”%„{j‹ðJ̧áÕ³fá@H82`à%£êdë’ú罽Ƴ¼É¯çhu‘­Ç4[dúlÀ0âR0ï ² Fmg÷GŠ(yMD=ÍÆ•Þ€NãÆ.±tò¿Ü5 œHÉààFÅ·ÒTþ¶k´»ÁqÝ6¥á°š·9Ñ«\Ñ€·\,úÑ£šŸ6·`ü¥x@Ú]9¿½‡@4f«„XŒZÕ¬2§º‘#ÜS³Äϸ§|»™cƒ÷’ú-2†`3Ê7€G°øyñ1ˆ>]'çç¯^¨5ú¢&̯?ôŠ,}tsHÌ$€ø´YŸžg‰z›ƒ—è}Æ¡Yœ˜dÒR›Ð45öO=µíÝ0—‚U2¹Ž3a·„«ÙGèŽÔ?Ç‚‚æ™5·:’ÚˆN”•û(`zç•X¾‚ÃãSªQ‹q¬hï«XvN§š÷ jÞÛ¬hØÉ ê[Ip­¢ÿRW£}ÍJ:š÷2I4y}6³ìlVU;`ß$RÔúäa´THÀšˆØ(Ë’U Ax¿l¿"×J9P\y¹ê•'¯Æ:•+×nîL 1ã•lW×w–_UWN·kÍzº¥i^…ZbE9žCfŸh» ŸÐËRÕÐ s]Ö‹ ¹@bd#ÆØ†]#ñ™Õ¡“8¯aû.¤j覭GbTéû¶ 5m‹»¼|”°ÙeɺñÀd…®Aaf <}åMÛͯÕÜp5ª_S Ãf>*J¦Š¥<|{É“X¢Ûµ|T«Ð°NÍbi„¯Jià iª&4­¯6a8ƒˆíÆ'5»ÈŽŽ`Þ%3Ê’vÕSÏŒVªÿ^ÔÙh—Ù£u ºÅá,#‹‡#MÔkà7*§°¼‡1XT¼)j± Qïê¨n¶Ø!uO¡zþ1Í/n•€´ß+P:ŒW¾p /“¯æ&bX‰C'{±6+}Qü/Ügã¶÷¯þSÓè¡ ÛRŒª÷6€{0d„F^½ÜÅóÛJMOƋ٣½}1¦5][«jÚc´:3ÜèÑ&«Ýªn]ÍZ'¤ø¶¶M®»¯ý+Ž„0Ný¢Rì#áÈ'æ­LÁr™Û`“-ÜÖzÎgBä«*³m;˜!9t¼›í°ºé@éÉáÅÌ„±¥Åcxˆ,³¶Ã°cú‰DT3ƒ^“YíR2{Z´Ïï¯7êóÖ´yzDá:²™ÏÛv£¢åØFŸØ´ÅbÕÊ|ï]¶t±o­†Ë^£UJ‹ëº{EB"Az¦ÞòíTè—uOÛ°Z—¢ï…–w´L?È.i}ªF»Ññ•äü¢•ÓsFkÚnúDÓÎçã-|¨ï0¼P XgYÙ¬V̲è‹=VeZ”õCrWIö΀g^7Íb;¡DÈŒ2Íh Ûdü®¦ÈÙ]V”¸&?¾ÐQìé³b[ôa,b¬ˆi}T"bšPáÖ•‹.íM³îºÊ#º ‹J;ðrºêp%Á{#ÔÿrÁT#zçMv§({ú‘Ý`€úԚNj)c'S>MèXjr<‰¨\·fŸ)øøHhñ(&ù³FïǶÃ"¡/ãÂ]ºÌj(^Ýæ÷ùB–ƒÂ`¦‰šö´ÛP›‡§¿^¼€?³ä9N…Õõ.ï€W4_ÞÔÅ2EaÑ ›ÕZÒðkç®vx 5è ÜÎ÷ûC9:÷%·¹*l5Z !·lÌ@C¡nÁ8~h#+ÕOí6ä—”È{zoòò.ŸX–"Öm˜tãQS1~™,–ˆ‚M{û¸ðBçRˆk8"7ÝÂŒS†«v·Ð£æˆC%nÉ èêš b´ç2Ãî,2sÛ·â>cÅ>\§ƒ’íPG§o×pFaEÂ^‚Lšzj5Kº ðz$rÀË ØåÍZ/Š Ý¢Q€>ôÖúBvM9¢Kå²k±¦´¿?]F¬Þ—'¾Ø»¬™Zq ’ ƒuð —RúIº&ôŽ|y+³U×ßž¹\èÜ(àeKtx÷HúNÁÉ»=‡ÑÕî ¶\z03¼ß™\¾=êAôºâ {]‰¯(í…%ä„E´ :=q†žÄÃÑNP>=ˆ¾¶ÇÓjÏ­íõ⬾-²dv©DÇC²˜zxøŠ¤Ê‹Ùè}-Þ" ˆÀ @7 ƒœ/–›Õ 7dò—´¡‰ã§BMî!LÝî¸P=Ö¶óE†O t¦œÑ¡ÓQBEøòÅ¢¨ û+OÜu1&re‹˜%ƒ%|©xf¼ò,¹NªyìÊ0·9=c¸õÅEÂ|q>;þ»ÚLQ÷‚–:’ǯZ({o›3†Ã%¸~¸mâeœ-ðÝR˜Š°ÐÃtõu^œ68âs‹Ï<…0ÌCLƒû¬ÀaÿšÍpŸ°¯mi·E5°á¢³Œp™1L÷35¡ÅÝHÁ„5Ñì¶]°ð°Õ¾à䑘*¾áÔ¯óL²¯aÃÛÒ64l›ñú#Pø­²©(¨É˜ŸÎª/‹™ncìŠÕRÖúÔµh$¤> –¹e8¥#ø…úCÚ'ÁSºGˆ(6·‚îõDö¢}?Sæ™ IV”jðh± F?ÎÞQFi ÿ5+®RÊM!7-¶)Ëê±Qyr¬¯×‡æÕJ-½6µú ])>Æ=Ž  B áZB¬X½Gd64ĵÚ•6™šB 6Ø 3åLͧHÁ“¸ÃoCþln‹Õ7 1ÄÔƒŠD) ;B" ;ò¬"«ç8ä6­óú81yäÍJÝ,Y€qYîZ 4Ï%ÓÈ8ÙÅ)-1aRD¡ïº£=Xñaôìv×£Aª S$L…ÐÆ>$läåÊÅbmwªB²vº¡½Ý¥˜aÃâè—®¥¨ÍzÓÅ#ëQ;ð 7ˆÑ°ÕŸ#ð­n–[Y;®Oª‘AÇ­µ`Y Ñ•gIBx­±É&ÎSé©J·Q1éôG#ÌmSìÈ¥ïSù…uä}úRéu¶¶ègj e€V#¤¼ó,t6Ë2›PëÍvÞV5Å#ž€"Ö¸ 3•L ˜Ã4‚ÌáGhÛ»ï[0ð)ºÇy“­wY³šD8Ìc€Z4)ÓØx"¢?“ìÁ²Àõü'Èb/N …MLåeí®Ìª'Íb/N hžR4àƒ¢Á,$Û­Šnž?,s\RMj˜Eæ/H’j« ÓµžDóüºÝ^Oáµh4@H³ÁãD-"‰¸N£H-wälUpd o ‹ÎÁé&HŠÁ…t]ý‚ î ¿#2zŸÂÖ'Õðð#£, ¡Å0ÒéY¼ v¾¸d‘ú€Útqß Ó€€×›2Œ†`êƒ"™/†àÚBb€Ûò°M~]Ó>‰qµAÿ àÔJ 0SÚCÔ‡ÊMu®Èa‹žs¸ò4Ú®QSÕ¶¨n£ÐúÔ.ZÈM!×G«Ù¦›¿+Hü˖›(„¡ 2|\¶_‚ê&׆Äéì•‚zé©T®(Š™ztŽJo~'¤ãÊõÌ¢—@ߺ›.sŸÖ Á¼ól4Ë"‹PuÍnºÍÚD&Zð9º{Qs„fG s×N¯º- Ò,ýðÝtß]—ªëêà¨z.! '  ³hdH’"IÊ$Ѐ€‘…ÀËlrf`Ñh*ÍÆRfëèwĬ»ŠÐ]tW®î˜Évòñäð ÕÒTr¾XO~?}R‚²R•ec1 CC47 ©-1>¶ÈéÅ0Kkz01½ȳÁãaÖuF™#Ñxzð5{¾Y[¢]‚²®·àbÖ’YŽAÎ^i„ÒÑ/S_\dÉúÒíòEfyæ½µµŽ-°Üû>’M܆™ZÄôÈŠCZÞ>èÆÀ `Ûšl›×ëy“—Ùc,ÂO)ѤH@l‹ˆDnKtJPl"Wòƒ}ôŦ¿®ï³ •=IæøQcxÐŽ#CÕæ ž;d±´j¡E y×ûa õ6å"›Eꣃ¬>>Hý¼±Ë§ß§¡1¨Tš G=NÏA€ê€œÅÏÑgœµÜdǯ¹l|·a8Öú4+èæÄŠA¡ÜåZ U-7¹HèâÕ‰õµKP: À Ô³¢;Þ×’ ÷]ñŠb·_áÒøÛ v0an ¹ºølä“!CK`|Îhæ³A›}ºX¿uª‰x£±  "”]YŠ~°|R+—dñh@°›ª× (mò뼃÷y¶ÝBLë% PÝ÷¢®oÛùmþˆW*0¥JÒ\Æ~ž˜ïd9ÓÕaÓHM`š©|dgˆË[ø-Þ½Ñ$Ü­Øáòü›?ÿÇ|½+V¾¹gcéÕÀcTÃ^è7é¤$Dü³(õIOçwc)|ù…/}…/{ _*üö ¿õ~ÛSøí Âïž ð;_áw=…ß *üþ ¿÷~ßSøý Âž ð_á=…? *üñ ôþØSøã ÂŸž ð'_áO=…? ($‰ñÚZW³‹GG{0õ5;¶‹1_~Äw>ô!ï¡ë¥¯ëå~º¾ÝC×·¾®o÷Óõݺ¾óu}·Ÿ®ï÷Ðõ½¯ëûýtý°‡®|]?ì§ëÇ=týèëúq?]?í¡ë'_×O{èjcµ®–à'ÜvYYNÎ\:»£Àt{¦ÀI<ÁÄß8M£‰ß­‚0ͯf¯é ©bREzl»|£@©I2YY?Ç<ªíÖMÞþ^ªéóvbq¤•’J^ y¦´ -\à^²\äÝ}žË…ÝÛ¦^7ÙM®3õ*uöëI‚{É6Tò‰×æÏ»ªÑ%ñ‹¡"‹ZçøÔÃH&´.b_œ¦ì«Z^{U8\­àú5¯s­7#øäv0’¨õ'XÌÛá$BCÚƒ¨²söð5Rä˜k”Û†X¬b!ÒD•€¨R©éã"P®šzËît4ª@½:§—”!Ú>Dg9é°ø‹ÉfC®iMiá#G*­ ¯Ì¦,?‚´=x€ÉòšÛ¯ù-·P•ËòSªºe¾Ú58h©Ö;ìJiÙ>Uµ›®^·7S§#½rŠ@iLæxÓ›nëÀF]ßWS;ìaâVÌ ÀÄtj¹XɰBiõu¨Nùš· r»žß,²X”uævªÜNb“ª”ÖUª`Á[ILLç’–Œ"¾ýöí[-E°ýëVç&ýdï“_&ì-ÂâoŠ»6ŸEÜ™!„N=@“U5È»úŒ|øVš¾ ¿w§unw‹¼MEޱôÁ’PL®i »­‚™þÀ,<δýhÐHú5Ž£_“èý>;_”xÒ°…tñP»a”]`çô•¯Ûõ ¬}ç:Ë:¢¡ícTy!eš.5ùV9@;)!£H¸6q/ŒôwÚtïëÎ}l­€ í6[îÓæcEŠ!À˜9þ1:®lkîì|þÓæFAÚjÇüÈe ÍÐä(ù¦ _Z·hNU_8Ÿ›«ê½3˜àeõ/ÌsJ¼·×Õ Tus9s”a%àòÞZãµo‰¿ù±§Â¾ýŸ¿ÂÛË/àÏ\_#†øŠè£¢ç>ײ›Í°p~7_fe¹P-ýc+Î}á0q1ØV “R-Ç¡ÄÌÔ¬9éŠ …q33{pQ£×fÁî‹™\D˜ÔGDh#Ê}bN“p BnU,ã!âl•¬`•îÕì¥ôÄgÇG.š»ºÜmri¢°¢¬xpƒ¼¬D›Z´Aè}‘4 à3µü•%D,̾˜= t°t°©z¤¥8èêyæµÐƒ#Àuö»F&²Ä5AW§Yªe½¯ï“U³×@a;½JXJP½éã_ä"•g„9ÑýxÄŠòŒ5±ûÁŒ¾2ùÙkµýØÕ,ÿƒ½¯ÆrW€ƒò±=7ãœû Íœbbj˜/$'ùˆî­ÄSfK açPÜ!k­êÒÔkªåPN-šŒÂ^}ñ'ʬ çaS?Ìoï6SÍÜ£ÓØ!=UéV³RlÎäï"Ö×ɯùf÷å/O¿ÒÝ0GQEÏ,Ä›||cÜ °¸t!d.*ËG¦ ’yâqÍ…Ä#v!I¦_cŽó>äùL»†ÃùÓf˜Ö¨¯}Î[¡“xG˜ n J™(e"HˆÞ5“÷6Ù%;&§ð¨ÌM¾-Ë4MÄþ[U¤LqG*LÀô9Ç)= Ãú HEVêŽ>ò­pyê‰Jwüý÷ê‹‘p;-Å.èȯ¹~‘Dn;.AÔ¨£ì]ÇX<üDâ[¼Т8˜Ýýí9DÕ² O´ÐGY F¾‰>ƒ_ˆGY ÷ëßbù¦(?ò›¢­AØ{Ž,@ŸÁ+í'"A¯3 °?R¨Úl¤ kg¾µ+„Aè "®$£¼^¡,ÚÔÐöÊi ­³e‘ìShØä½M\9}r¯h:»Wll’;ÙÔÚü!ŸXšØ$ “4$|’ÍèÖ¹èªte½Éi·ÅP¥-8u¹êJÛf»—%®¢LÍÖ±ÂUÏzƒœ=ÚÁŽÓi±lê¶¾î¬í \*¡å†™,ÂÎ~ ^dœ²$¡Þ²Êïx¢¨~å%ù-±¨˜–”Ú’.trb%ƒÞj·˜/Êzr• ÔUNJ9ú-Ùäli»8Û-N±¦2Ä!Pž÷„àEì› ¡‹ãÉ{%¶Òž‚r ½ÃÄù¸G%rË-t@æL\ÈBÛ·*ú˜:lð *`ê|Á&d´Ã“ùéY‰VËÌlž©îbJAPÔ@FŠF™!fÛŸ¡¤êlz[fíÍaÓdj‘Œ´¹jeb¼x± €EkBØE)™>RIE‹A0.²jòÔ<@é £%Fâz÷á˜Â¥ÎÞ'§çW¯Å˾ än0¦Kêàä,(§Zæ3jšØÌËÔÊÜB¯ß÷ªjc2Jö©¯þ¬*ƒP}~ƒ[Åé«ïiS®ãÄÍÄù¢0M»ºPzH·6ùˆ’KÚÇ'v57è¢*Ç&tPa† ÓŽx ¥P4p[D7ë87ë–›µäfm7_k¢ö aºjЛk ”º ~UîéÛÎ…eÚ¦«Gç`ql¹ ©óŠì㕘UMy¸ðÉD•åéBFöŠgW½O¼¾¾¯¼1ˆ\RgyÈ8Õ943eÕ9ó]º³·3˜Ì^&Bß¿àNCÜFµìm°eoý–½uZ6ì’òt8¾o×m•mã0Y”.ÈéaƒÄ1| ´7u\ëßÞÔU~SÇÍ|b®dúˆ%|TW¸­®^æë¢ÅŸC-ñBøj“Å`l²¸&óPqÀÆx8—4É"^ô‰$ÖÅZŒqÛîC´{Yرp›]ÕÝdÕ ÞiT¯F¥ÜÁ‘]¦Q¾$ë’»¶Á˜fÌb²aè_1•wޔŦèæU­ƒ³Ž#'#øÖâ‹XŒ—3EÕéà[M†A=¥"~o²UÖÌ¡ËSÝKøøŸ3_-•‚~§ÂGˆà½J:TI. §(ǯN“_/‘B}Wª|`Xxðûn—)âmÕÃOÛú&\€ý 4ç³äp»ýxz@F6AýMLC«»£ÀqP8‰­‰òQ ɚ߅ͯ·€Ó9]0ºÓAçÞTí®A}à‡¾¨0t¸ªE`ù™mƒîÚ?3¥L¥Ád>äŒÇRnE¯<{x~ÕìºCQ>ýê0ë‹;¿©ž¾:ÐåsÕs¯¦.ò“tÉL9Sz ŸÉ9>•0èœ×<ù]OäQ{ˆ$·I2‚˜$Óņ†úúa¸.$[9jªX_Œ ZÇ“gÛFMd ½ ko 1çg‡¹×Pˆ‡l†žm6¯áj飓ùK&¡ŠšÈ÷Èa «Ü³%M4¡á¶3ÞhB­…ZF$,›ÖÇ„y}@4&ÑptOC[—Åò1ŠMëCÁ¼>L¶¡€m„ÛÃЦ˜]Ðþ‘`´°‘-[$8‡ØGG™}x”.vkø;“¯ŽB }føÍ&õ€aV¦ûM̱^ßä.QˆÒÃ`ï9äÁD›@šî p…ÐÆ px€"%Š0›}°]É¥94`Ú`»›´»’‘BÌ\.ºå­P©éX±¯U×F†{]ø±¥JPJ‚ÈZQ©[Þ±ÕLZä*9‚\Ä@·ÍŸÝPS‹Ž°Õ¼Ú §ZlúÚCšV÷Y“ë­òg-:ŠÖ[íãEGÚœ§ß«óµ÷5U«z3_ÞÔ%8jJc1ˆHJ)ÉLn,:ü"š¼Û5g$yI‡R8ËÁPSÌÁñ>§'ãDØ:˜ù’tœíÀ¹Qò–¢²üM¶ü<J€§ç4[‚yn·&µ²û‰.æÞëWîMgrï2ψc²ªï+²R}È£˜Æ+Eó墾;L/@R•ºi`•®®Øîð&›þ¢¨KI^E¸Þ‰þH'͇†_ÂéB{ ưZø·¶FÀô‰-T«…Á+ñ™'9JO^$:\‹Î.è>~-®í4Ð|!X. „xkGûò¶ø#ÇI[w†ñ´!º"f$=B™;1Ä5„•5Tj¨tk¨\ hGÓ;µ*„:hh88¡\êñ”Uõ*o£ Ù”.0Ìñà¹ø°p,ù–ð¿ÒN ¯¸lÛ–QP T¥û0U’=%šÍNð?RT|Ú N“"ÐMy»4•eÞÍ$6Õg°çUWýVu6ÓŠ›|YODõ ’º0(ËCà 6(01§ÔQ`Óûì>•ãl¤k2Ûï"Ûi€ûOÿŒ."[QF4n›ÊÂP”n£Æ„©Nü-I¸{‹„ãRû°8·OØæ‡-t_'08Ó/Ë^W‹*\®æU7ª1@hàJ†TÒ$~J>‚c¦ U×(æÀfõäjã!u˜­}›?n³bzxpéŒtN· ÇI¶AC–H¢zÀ=챆»É»l•Ed A¢žýF ièZxêû™Dà+×zãS¥‡ç‰‘i§¶eÖl" ¸”6˜*ŧ:„–µ^ÀŒ0à/¼®Øs£jáõ̸:ðÙpmûŽ;Z6êèW~D1«ƒr°ýFÿ­$ÅÏQÂèW1ˆ>𜎞î)•¾&£ÀêžæNÌv {¸ÉþPåB­ñk|Ô†¥âzc¬FÄ„§‰1]\Ö`Å<¯{sY,GTX7攓}¾½àü¼5yð{‘Üþçíðíלt øl¸þçýoEk}ÞnåG#üy‡Êa}Þî[IŠŸ£„ѯb}àØM˜¿¹2ºŽû¤Ä2Òî}T6“ÿUé]^6æ–o+ÏVóe{7È%b *1U‰±]IAlŽf)Ð@“ã®uÀ *hI‹äÚ|–˜Ù¨ê’³ ’DZ»½ÎqЧéD1,-º¶^)ùE¥°‹Tñ†Úä«k8õç E!ZшybÁeT;,ŽS§ó]—ž_§¯ âm6py§¯N—Ä ¦Ë­…rÒ÷YÔÇhû:s>aD?Δý>‘á¹½·Eý¹Ø¦ûì)hNOýïA&ý³]Ÿãh½r®tÈv'®’Ï,ƒ¶&—+‚qÍÄ6ï³¹E!²Ô™Ãg¢ðpØŸóü}ÎèI¼x“uП·Ë¦ØNï— Òk4*?µó­Ö鳺®qÖªþÙa!š«Z„x­äòýìÔr0çêà°úØ8_à]}y“¹VWY/L#/À:pàoÚoa €§×¯pc X|Œ9¯@Ì´†ë¼[ÞP˜6<ÈBm¬`âM½o¬°{)Vð¶»–SÄåÜ×I[fàóZÕôu¹£¦P?ÙV˜µ­pó¥zú ¶7ŵjíMÝBÿ±†Ö¢§*S¥‹àÕº‘6EÚ”hõ,Ê®‘1‘ΉI“# U@šÌÌ$KDE-DêÁ ¶?ºúñ0a%»Ìý²µê¥»ÇAZg”ŒsCòiäîTW1ÇI¹šEhóèI×UNÇÈ3>  œ O«*©ºUò>ët{½‚¬ZG°¤Ï %¢ÔâÌ­ññ™±[×_)Æ%=N)!*æÎz lK‘¡PD° á £%–“7Õ²yÜÂF;›âŒ´ÝñKÔc­÷ ÎdK|#v¸U“0º)§:¸ö¹XS£æqY>[I˜~Ýäù½x%O—¯å¼ªõ*I¯ë_øt®@Í-oƒ½¦ÑÝЂ”hMâý¹ £åAaþ=»0û/¨ïÔ÷ÒÝ2ëâòÜžø}mhÿ5_Ó”lŽ·kÍÞ ‚0S[ ßDÁýŠZ\ ÉêA`G(oÀ^Bu5fGh ýeÝCUµUPÐsroK¨·$Ò­­ K:UÙÜTÙAÜ–ÕÀ±]«˜ÝªˆhFýy}ý÷?a3U4S§²”ÓÌ2 ykŸ~gei…åÁ‹RðêŠå®Ì{CÁŠ•Ì[\YágR]8:]#Cþ°…«h-„ ]Õª”ºyT¿Š9XÎWàÀ»XÎ) “$x¢¥ØeƒáEg¨_E âSŸjñX‡êÅ Ån=ÒkÙTØ\«%0¸­Ñj‰ E1—òu²[Œð?“JÏ´L£ÿÀ9TcÚ%AÚ[&;àó¡çÀ‚‚lZ›j"”ªÔµË]þ,³vX9ßUMž©´y-8ÍÉ›¦næè÷Å:@cY©-ëRR“Vê{ ¿ª8ê]³p†Ä6[/,bæ3j˜ªGƒ3¶ú’ k0h;X‰Ç`…hµFÌëa9,ä`}ä´zÇGf7x†iV_{ñ{pw¶ÞÌ®ŽÎÏÞ&9úˆðshfwq%Yç]¸ë¼ë•aÍþžÞâ^µƒíÝþ´ö¯'1F¹,jðJÂãVšðXBGDÌrxqlÀ<ÃDÁÖ»ƒÈ}eÏÚ¯§y8´Ÿ…¥Óãõçömè΀¼ëý|2¡¾Ž .ß\]þc®—fó7g‡¯NÞ¼v4µÙ]>Gÿ8O×2R”ak›~|3¿8¼zÀ»îås¼q‘Š.ª>\žQ ™ƒæ&ŸˆPhS°4HÑŸ&<Ð$ãý›/jˆ>˜d»®Þ°ñM…‹¬*Ÿ¸îÔ£eUÊéF¥& R’å8D ‚»· ·FVÁ“h8ŸaBr¡P˳Lˆê²\dÍ|¥VÍõ£µe5ôæÈ5nÈNM¶y“>#¾Ñ3x™P<Èåsl…?1tíŸÇÍiéñô7Š74XÈ%Ÿñ}ÀG_Ç|‘©V7Ç[÷1V%e¾ÆvR•¢¬e¹Z“W“ÌTŽÒ¿ëòï^Æg0eß‚2<Ó ‹ÚñiÖJ†_‡C75?Íà¢äM ÇWÌ|“gewsõo˜ÁÅHÞEÀ³\¤·.pÙ¬x—Ì Ô\ŽËC±ÀÈÕ ²žX«Ž]ÉsTjÀ¨Änã0&%}œbQb·‹ÄUòTð1UBçV`àíª¾aGd1ïUäQ`,BdøïÒØdsU4u;_–.ÑÃ&{”ùB¨-åê)^IÐö{:A(`7~WÉÜ6VN‹Û¦¾*n Ws>ƒ‹lå[Øbì±ÃÄ>RÏ"ÛcÒ±Xíð°|| û ?¼ï7x#»?ŸÔÃÚï5ÃPÔ‹ý¡þ;ÜRI¢üR1qÑgl ù†•I[›×Û@ìÜÀ¨fø$?ºY_pNr¾•Ô÷~Ÿ§À0T‡Ê«Ò{šžkÌS;²&@¶˜Â kÚnÀ]ƒþˆ$¸’%ëí|6Ðû ÛM²Z¨¯a^÷NÞãæB»*EVèÎñ8ÝöôÉëÿ³×]•Áto Ëí`ÿKy/P#Rƒ"óàƒî»[,ˆ]ÁÌ%[–Q÷ƒ‡ÈµBÈNU¶?¸ÇèìkPnrxt¢tjhÛ¦þm*l˜ÖÅy>"NÁá,„RL(zj [YáFšÅãQA…‘ x•qûù.[7YÕieÀŸ ÿ%wê²jUZwYY>´/cbfùT¤¤}éÅÊÒdŽ¥—É‚£cÁÌæÓìëäu±.º¬<_æYõur”oo¾N>ee³kñXåmv›Ï^ZТÝCŒ²ø C."Â,w ­µfvÔB)˜ëF‰g›Å*ƒÂ”ÅuŽF)SEð 5paÁÕiv·Rç‰ÉF“M~‡,'Á8d %Û@ØâÑ‚!Ij²†ˆx–^Yè šö±ZNA±h4H³@À#y+¼¾†^ iwè)ÙìÊ®€d{¥f•ÔÈîóE[t“oÅ%Ó8ÙÂÀ)^!§Ü 9LwЪE]ÛeËÛ}\ôk&"¶«~Hc^YÖ÷‰tªôÛb½~£…„i“MQá$£ÍçË ö%üs‡rŽGA𘞌ºóŠö8h1¥Úmž«Å¿zWj …Í5ŽÖæ, Mè3:nq$WƒÛfOPD¥)»µ„ój³næÀTÅ™êxa©ˆR ’&€[‹{%S-ªæm{ˆ]Ø?¥JHÊB œ ¸ˆ^Áy4MW©5úžÝq®1í7wƤ>š§zÍõT¨¡úoOab_eê–æ1ÑÆ,'Êk· çX›… ‡ãûáém€$iÏÒ–â~LÀÕ&ÄÌÈX u;8<ÊÊÏÀ#ÆEÆîH }MY݃²T•Á±”ATl `Öôúw„ÁƒƒîZ8ÄÜw/H»°0ÿ×ïéUÎ]V”pæíãžÜ_¦¢¶wÛ¬ã÷ b‘ïé`oà­»Ú³4É[Ž#:ûÅ  Í/År¾:+í…,ÍÛ½šÔv´=m‡ÓvŸ–´ ¿Œí>mh;Ö€¶­g»wÓ„‹r`›ûB/ÆzÐ _º}:€ñ©k‘º`®˜jwº#Xì3²}šÚ Ÿ‡Õ¦h~}QQ Ñf ¾gGn|ãb+X°ÁöíÑt' gôúŒÎÏsi=Mm¾Ü50¢»›{´‘N†PòíÏp; ‰‹j)Â(ÁÕéÉŽo-ÃŒãE ¶˜€°=ÚÌþÅ|J c 7^.·§š jôí7ÖUy@`+àI%°Ç‹„SïhF t £¥¿µû}V=Ž^9€bð32쑟zÖ ·'”µÏçâ3„¡|šy¯Ïb~¼Ûµq¿Al"âÞö1VŒ=ÞàK¶~!Âï¢çœ-òmŒ7"K`ÓúÐ1¯™öܯ•¶Ú±OJÀØ<™Oîð Ýç]ˆ&yãÆÝا!8<¤D1Јmö¨&L Á÷βâ›oŸ! =Øt-æ=î4ü}ãuÛ„  µwúG›Pô`ŽÑñuË30]ßl“ËlYŒ‰ÖDì¢<$‡GÇ/t€\éÖºÆ3%[C–Å"[d ûˆ·f|&5®ò¾Ðv/ ÈKʧ|)ýØAŸ–d¤á´¯Aõu—"ï˜t¬Ú'ŸTahù…Àó y­—= h֚ʹ¢#¯‰gLìzQ7kq`ð®®×¥ø\Öæcòáë^”õô¡Ì7&üv·È› Ñ&ÅZRð‹á…cÃóm^ÍУ͘ÂMÞd·ßÑÙŸÝ)qŽ ¯+¸¦=-œèHø9ý×;£¢›L.Ç‹F:M<a£ºn²¶kvËnê‹ØfxJ5©‹è¸Ë£ßSÅh²ˆv$޼{>ÂÇ$ëýÁIñÎ‚Þ cÂùp}Z¶} Ÿ|d®QÉ:›Œt,÷yFÅîÊ.¢«A2Š#2§¿PñVÂyC#Ÿ˜MKu)IºÜºÊ—7U]ÖëÇ!=ú¹Ë7ÛRì§Tõˆ¹,Ùf‹3 .é‹…˜mõ5C\͈âYdü(§˜ÖC¯¦ Iâ@a©}Ì%¹çv*†Þ½Á­ìíá¯ÓÊ4 «<ªÂceð8ˆFñVÈRv¿+ÑÄ„z¨×EµRŸÕüº.WãÃr¬ váU€FŠ7ÈêAÇgázõ ²p²ZSjŸ†Y³‹[ŒÍöÌ«ló9™]£ƒðéÐ8.&? œ%€à}h­:{uu7–Å€œ¾¥i|œ°óÀm×îÍãu¿bè°ÛD£É:5ÁÊJ˜‘ÎÕ,åöI¸úRxv‚kGµD¿Þé!M®ýÇcô½<`ÈWLòŽ] ÌX.ðêWj4N<+} :dÔNëÌykWû\voH¶Û÷`Kë`–Îz£‘±¥Ž6‹} @_Fp`c'yáÏäÞáÑžÈl~g2wÑä˜&añ­_'<‹Nì1d&H5ÐøF»©ëÎsšøDì•Γ;ÖôÙÇàá^xÂ÷…$§ZJìp ¦Ã]½¬Köµv†8rM»>É—R¿MELŠbR-Œ|Vurœ\mï¿„.AºŸM¸ªÕ¼³ª;5<Â-;vPó¯þŸäþ&¯È…5{§Q,`9ûØj½†ßŽ$x!£«¤GÐÁÕVr¹Ð&›Ÿ ŒñÍ@‹Ä ·þ´öË]EÁª—`ÚDé0©¶]{%Ù5Zê©eZ«^ yvêèþ©×~0Wru­š„(ó‰ˆo>c—T _èz}½^£Û›“¢Ú=$œ§[~ >õÕÈ:¡Ô#­’lÔJŠãÃ_ô¢›+!بf Õ´ÊÕä· [)m—Š 5«Œ5AÄ– ©$Qp—ªT‰z=]¾Ñ ÐK—µ·¨ NTƒM£5Bš©|$›]tM˜ð­ò®ž‘›®­u qƒÛ  Gîb1Ù,‹ÑAhR)l0ØSË;#ø€´VU?Ϣј ÍNë Cn`KÍzñ™ÛˆÒ^­ÖM±šPï‰~J4èY_†ÇN%W¥.ij†'*ýË ÅÑî".îöé4‚vç^ÓµHLÁ8[Q[S÷É„ŽbÌð4cšû‰’nÊp<=1rËÑD@q)m,œã‚áÄÉ ÁiaŒZæp\Jç¸p8±ÿ^$ƒ¯× ŽØƒä¢@üŒ>c›3C!ê 4‰ €$£ý*‡zq ¨‰Ýã6÷ºpð;®ê;"J†Ð z’XòŒ ÈÙ8Å©Wk÷6­h®v›ì»0¹B ?ϱ™-¨êš8Îõɤ8’lêTRœzÍ8p2f¼…ÐtT½tIì€ïrÅœ+( –Â6éË5vðuÏ<\9‡²-.£Û7 ,RŒ ùv$××Ú\5ýˆ»‰@'ÂÕg$ê7s‡jYTÜ©x­Íár 5Í^q•ŽnžWwESWxˆ»Ï$;ïR›&ÖK5œ'àã Fð+–`\åǤÆ} ›^<@Sèeœ‰1økpM€íó¯ê}¢ª"ƒMe‘öHuS·Î%nBáõ·“*m*£Sm¥˜ µÒ”*i¹k¨¹SÔì* òjr×õœ!oÎ2¥AR‘ª¯0 ÜcCÒ{¨lç‹G};þ¶åÉG¥‹G}[tHúŒTNþYZºeÔ–ÝDëX|ðªäÝl¶×ól¹¬w05 ö>®xˆœQ\§œ-ŽÀ4¤£3H©9äê-´i&B`4U2÷ÌÚ)hC M², ^™gÀ0“Ô;°TsÐÓÇ8aŸ©U›Z‰ëØÚœbÔе©—jxPX¸®uìH!ÇZgë— ;A1(+Ì4«.ÛÑ©˜¤ö 4"0\¤d‡Ã=8‡¢6‚ö+Ç8ôA´£Ù(è ½™·7yY†G-ÌRYçMÊ´7(ôâ|vü÷„’¾|±(*Eù•’˜A@‚eßR|S†Ü8‘¤%o´eÕÜù~%æ'¯´æ‹Ì÷u¿Ÿ7Ì?I˜ ‘õ¿’WoÓA®í  x®Ìû÷ˆðâYY’¿í˜ÝÎr)A©%H6×tp3¬RCÀªÕˆ¼× j€Iï£Qfù¡¾ý+ëm™…­JxPºµfÊ£½ÅtY³Î¡wEQÜÜFÚ ­F¨g(•|ê’¤»6n¢&ôšÚH¦g=©×)XtŒÆŸ8û0-EQ`×öF_jÉ¿¹ïŸèÆ $ʵOrin$¾Ú‘[kãà€¯‡~‚½‰NÕRßÏ—»¶«7<µÙÏ--ð§ÄOs¥döþüÓüèÃìêüt>»:¼šÀǨª=—:ÀHT,*„ĤZŒŽF’Ì0ÇŠ"aaÚÛb»¿»Ô¬ [ÛoøLÇÅŲÉóŠ#Ñöm±®jtÔ9m”íT-ß>®h3p ¶Fã_OV@a^Êyú‹rY¨G§¬û›byæªm–8±'ª¶ÇÔÜQ͹r1_­ãðY„.8Èð‘Aš ‹ïhC29 :õs‹,NÌ·J¤.ác¹ úׄÈMõ‚<—ˆ¢Ï÷$ª}ÿA¬±§é™üùj‡ýõ€Ô«¸Wmz:U†ÿªñ¡×ámcèðÛ.çî¤m ÆP¦Æ4f[ÑŒtªú­Ò²Ñ—ÃaW¸¾îN²GX6—èi"²‡(‡‰½Kh¾RüJÐf,taI~‡Ç¢ÐÚ“°OiÖ:^âÌ߀EºÄ¶>–îøC%ÛÛõ´CdiR‰Ž2õLÓ:õ&‹2„Õ/ªÇÒÿýŸÉ_À£p[šE!jUŠÑ©¨€ð«•è"¶‹6 FÓ–±®÷T”=XN÷ðI{Ü£§aw{o:8²Nf'Om_{Œ$ÂÑ^ˆÒÁåºØsÈ÷ñ¯'HÙH°eÈéd舡‹ÓaÛëŠ^”ˆ–´ .bŸ°GgCs÷ éÛ¿¡ªsjL˜À|ZœÎsêd»öŽõ(h{²‰-Q*HNùÍ^Hä6Øò›!¼6£ »Öô3Á°‘û­Àƒþr?è/Ç¡¿„þrúKkZ4{ æ‹JõŽ1ß”K逦/%:î¤TR¢Òv³'·u÷]®¶1ˆ ™W%{XUŠS§'¯/¼}oŒÿ›?ÆÁæ (= Ÿ1Stô†t<Ý£fo„ëùÒäZîyÒ$Íwå”á†Of+ƒd·)@ŠÝ>žží×B7YÓáøþÜ®›HpŒç&¢ô <Ùo“£wHG´ ‡¾‹‘•…õ8i+>ïŒz˜%. U=2çvå³c÷f:˜X af/hÚNBÊ'ŠSe½±!`\*AמúíËâö¹º‰r¸á“‰‚ïJC:ŽÃeB…ç€ô ónìììôB¡¨ïçM¾¬›]Ç$Dõ}J™)d\./‘Ð< Pi§‡DÃs?¾uyVß;cÑ ëcr\œ2XŽÚú§Þÿj¬wÒš!ß)h¬yf»ádmÉ&o[h"¨S-Æ‹å¤f›ÊèÇT ‘9­<ÇÏÎf æÐýDÏØCw`˜ŒyѶ»<:’Þ*_ìÖA+Ù/H(ÆÍHIè…䄼ÿ¶T&˜û¯þÏ\’-aúúoqDt̘#´=@Ow<í!MeÖí´'ý¡èÀ Ç“¾Mì6A:»Ðoëíê%wÝü…‚±†u93®ÌŠoæp "U*ÀIiê’ZÕ@>t“/ûYƲñfb¡m–ùD´-—F”cšy]ø8¼ÕCa(O!ýÝÙ‡lJ©`ÛÔeÜûâø—€Â(˜œgÕQ²Ž…éIzÞP¿”‰8¿„pÎûÈÀÀPІ§ð¨&e›/‹¬œwÙ:æÄ ÈX!1¦È8£‡äJ=h‘Ñ僧G=W‰%š>êðòHsæñ\h^¬¢‚̾SSà;<"ûi$]}s›9M[Æ¿£ ­Ñy)åéïÊe±]h¿·Ù²¥fG‡XÀÈòE$¢‚G™ÒÝ–J ò0%ù°¥2ƒ‡‰D×nË¢ã!ˆ&õÔIvC(ãªÞ&'p®nŽ“C¸C“o3°€\%¯)Lòá³z×AÃh'‚™{až5ªøSäçˆ\PZ´ ƒùy »³šS¹«â·þ‘Z+T¿­Í|¶vÿÑ®É[¨ds0#2¼ùRe²nLTlÙÍg¢Ê¥ ¦Hêýe÷í謾-²dv™À}y¢Ñ h4ýóŒ&xœai•5®gÚÏ!x†¤8ÁXê5ÿIÔÑææ“9™’T»Â,&s<åÄ*ÊXª/$ò[Q½vW™™ÿ¥8QŠDjè; AíóD'jC‘‰Œ 18u ´¤KŽÓ$Ñ f`·!9hÛùKUióåv¢AöèE›BzªÒ5Cj7È÷o’™ErXÙ'///“£‹w ÀÍ^!´!_{ã„M`{>NJîTQ!/Ù,Š*kQÙ¨¡–‘h´h%n+–Z`sˆ ²²¸Ëñ0æÎwÆ>aÚ¦ˆÚРšÈpn¾ÌqÇ*[±ñL²¤+6yù Õôÿz€ž®VMq7eœÙ£c`&]¿R“d6oЦqÅ.>*f  Òæ™NXœ¬˜Ã\g˜Cg+RHw€©Äˆ2!¢hV% ØE«àÁJp‡mœÊÅ}ìÄ6ï³90‰*5T¦ @„-í9gCXFç ‘¹káŽôê©óm’’Þµ)Já ¯‹kü8ºokQr×&–?z@ÈóýSa°¬A½Õ*kVCw«Çý_}!ìÖõê'™x FIY×Û˜µ.ÒyˆWKÇG#Y½Ïù®ƒÀ˜±ÅH^tEî+RÙ)‰ÒÊø Ôè‰cžus\XLéÕ\1ßješ”w)òÏì'=Ùgô: »—è¼°ÒQþoˆ¶ƒ„>lIò-|îâc|¹×‹Ða`K2ÊoÓúZ‚n@ùT†> ¿Ö>8dÕ€hT#ÃOZ5¸É ˜Ã  ¤]C>³5ÙNìäû¢ZÕ÷t~òXïfþsQ'«¬½YÔªu(ø«¼i¢×­H-0áwjsªgv` ݲ1ë×x½˜"U©·¸¢»åÔÝÇ´¬'4Ã?©W“owÝÀaXh :µ%68 %™Á ¨½'FdÂón ˆ‰=BDÜn©Kì*4à >›ÑvZÖÏq‰”Eñ$oŽ·WÃùL)é‰çz)òñžüö·O ç‚j{ÿ|WÀô¤ršÙ“Äí-puÀS L14ªñg­J‚mS35ÔèѹÊRcòÝ„ÅÆg«qg¬4îlû 5»TËXõ5Ô°¢Ñ^ îšo'ï84¢ÓŒ*| ýÏ>^~›lé”Yé»_©Ö<±qhX¥i}ôhëäG¶Þñö—ï/ÒÿJáØm'6·- Á R õà˜¿HŒ\p7OùÔ»nÈ ­”T%Ûõ ¾â_Í^Ëzóá‹ÄÇç^%¡ÐÉERÏ`8!z &•q«2‡ÖÑ£×dT¥zIFÿsvÒeÏî”ôŽc\Õãjžë⣫säÞ£ƒâ>k*te²ç¢Œ´iîÙ?fWoNçŸ/ÏÔÂlÆÒWS_§EcË]Yß&<†=¶wàžjJ‡M¤•`¢¥Ÿ!ù±ýhtuÙZMq>ÜÌ;a/¤~¥6ïU¶–¹5<£ì&ßµûK%.w ¿@ÒZ5ž2µOö¸@rR-<–ÃT®Ëš…¢Ä9>Ñ$Bs Í¨ž¾­òÃ_ÔäÌáw¿öl)°]¾›Í/?œ‘ ¸xþIȇ¢f¿_(YÅ:#3ÜÑÖÖ§™*,n¥ÍY¤AÛ'p‰Š™¸(¿j88€[ÚÜDÑ…ö>Ó2ý…1–.Þ“ŸÙvï hoS‘”’¤”%]Î~™¿~óêûwo.çÇïÎÎ/ßÌß\^ž_Îh‚ôù;k('°Ÿü Œ÷kÄÝÒ~ÚBÁí´NÕ',HÆß›K$€(Q¿1~Æ×Åi°î•½aç¶1.{„@¨þx ‚!ÑT’¥‚§¸~s“²¾OWõ=Å‚X 8:"B¶~8€&ôó1®Ý!ý”hгcc6² «hÅÛâ&9f;Äõ´,O²¢.“ƒ>^A·³0!U}‚c½D ï×8+ªß²o š©Ê°ˆ<4Veh4WòÀ—²1ÄYm\ Óáû5¯êû˜î^38 `;¼cotâh Nç•’¦ÉðîÛx]*ý Rª)%'xž ¯t:Êc_ô%¼{…¯j¿R(ÔôH-£:Žç3UζÓÝ@Û¥Ìx•C€¿I vr´#Ò>A,ölÂ~evWZ”Nûã›mQnczdF4mŠïÿôF²øO¢ñN—Þa¯ž¡¾p‰Ñ´¹Xì°cqu:„©H½¢\lEÂ짬å¾ùx™-Rƒ-ãØúÝ9å·¨æªWÌ–{(dŽA½)K”‚ÓN<ÿ„2l\4§´qà…ñ!’Z4«èSk ‹¢µ(åå“Â8í|î¾¥‰Šqˆ]|ýÎ'Pø›v2= í|‹®šæ/#ò…4¡M)7}é©Gk<öõRkßæÛ§Š 4®*äºxs‘ü¨ñ®cøëËôÈ]ñœÙû¬$h‹i3øh§T•«9gôÏí0LSûÜÆiI’"Ìt’­¯¿ŒéVY2‹|~Ö¡[k§j‰\¹Ä÷Öfní`Fx¡< Ø]¡; ôÒX+ ¸ ӪﲲX™™À¤vŸÞГæ'½tÄñÄ7¤¹?òI S°é }ÀM>w,vç×½Appùè0²Î›Šùb‹0QEïLè¯M^xôˆŒ*û¢£<{¶Á:™=ëtõ:w·Q+¦eü¤WüL+´¼¡(êS&µ½ï¿âÅa½)ãÚµ(Þ”–Í<Šy:žGâ«b™\ŸžðªÄr‚—Ñ€{x­Ú`¼ÖÃÄé^´ÎÔoÁc²¼‚ÉÕ’¯é~ƒê³ëGÝë]ŸeœÐ‡Š&{áµ8@£‘ÇrdÜŒqà“ïÅÁR _{.ÊôŸ> Û¹Éc‘îWÃȈ&Í•{d6ÛXÙî‡8̟Žù ˆýaÜKwÃj†Â9Q“‹#¢b|Ú (·Š ޽êI³õPò ×}À:,aÌ|É5 <±nWô[½˜“§Àˆ"ôˆmð*3¥L¶a¢o™ÝV¾¿Õ R™íª‰³¾beö!Q::ÒO ’¦ˆúL=ÒÂÿ\…@À·JT~kÁˆÛË"÷áôö·zŒûµ/Åi‚®a÷Y[w©²ú@!A~‚½… Õ Ä4ioêdÓÙh0Ý…Böª,daDö6r°¹ÏÎvaÚ9û¡µ9tM÷‹cAÈmÐv¶ ÚÎÙ´Í)_‡b‰ìRÚX9Džɉû!d&×äË|*pXˆÒÇ9.8Nä[ ô;kÕlœÿ„FáIƒÚ™Ã2£5„ûÕp08p‰c‘Ù` Ù)æ®W…>Õ®W$F¿Cêbà "Ž*Âî‚‹k¿„‚ÁtùÔ¹–Ofƒ€d¤ì÷V€ƒÁàjwŒEfƒd ŠÛ p0Xlƒwïø‰C˜Ã†(Á)„Ç®/mg‰äÀAn¨EiÎ=Æó!ž ÜðÈÞ±_]ëR™1cdRôÜÃâ…Óò&ÛÿZd¥,‹[$ëêòðlööüòt~|öñðäøõüÝåù‡‹ùÑûC8†nòè0“@+s+¸$ÙQŠJV{t º©°²½mØ…Û­o’+ä<€y—•ãWÓ="‰ ?[]¹ C²vËv¾*Ú[nŸsTýaQ)Pp;% dwwÅÚØŠ :)9*Úe|8šé¸f(­jùNø4nŸÔ\µ|-ÜAª¼»×g3>ÈAV@ùêr–Kg0PyÚÃUb‘ú¡œV«>À-Úib߬v(¨Ip %¸uµ l¸>³ûäð MþÅäëÞd˸Zõ `•Ñ«W!öžÅÖ,YНæ="_ˆÞ†‰ù)ç»hÖhÊNÎ9{rÕmc?©ª²ŸŽaðá]]ð·3ŒL­P&!ƒE¥Ù Ô£c¬jÎíÅ®Œ}åÿÿoØ9Á‡ekévÜ<—3–0€1¯,# žÏ4yÖˆ…²Àj÷íËÚ©¾¬éËÚ‰¾l¶_&‘CÕj ΢f½ŒV8)öæ¿cÂzä››D§ ½Æ È“Eôd¹‚ôVqøN³Ç.…Ëêƒç섳G0Gú JÿðÏ&öqéôA<;5áñ|Jƒrzcž&ïÕuÎ>¿žôînY|³ Ql ›öîý«C½ðC s‘I¿Ò!J !ÌulÒ9"ópãÈ~J£ Bh}õ½À€ªXîñÖÔ •~k6[ï­E½µ6ªªÚ`Uµ~Uµ¡ªšVÕý}÷ñy„†Êè}zBìƒùôéì ö>}º8ýôV\›Dø"’2ºÕ×=®Gr—Á¹ªjO.ßaTr5@ÃNì?+Z0}6ö½"fº+íºðœ®Ô"ö¡¡³è8`ÓÇÝ>•äuk2 ܹQCMÝ|¦ tstR©Me”bª­œ«@Ùf‘Q\ÓÈJ˜Ü¤ôˆ {ƒRˆœ+µXrHr}?ŽBç3€ë{­ûúÞV{]4ù}V–dåþáí§ƒ]Wòç]=¯·`XÕWû4û$’›vu r9´­í>þÀV PS𠯛åÍÔQ†O¥•Rª.¾$½Mw–Ñ´F’ÉüÿKŠîÛ\_©êßâ Š; ÜSË%ìá˜wõüžSìß©4qÓSý§ö„•=DÇEb-ûÁŠ Šâq•W­Z‘˾1¹RRšÚì:ßÃÚ4[݉ÀŠoˆ^¢ÍN?à#Œ"—Ù=·â!ÉN•­|† I´>ÏšµqÊ:[nP1`”‘‚ qöŠ7Êÿ )ÿRüÿ&ÿIÞ5DÞuøLuxáAdì¾4‚¿-àúsµ€ §P(Õ/TYg+{·;£v1_geöð¤Mo’ioz³Ì”e~@¾ àæ='@fm¿›.èÑÜç‹¶è †Ð8³^Lx|èÓ ®;K“Äñ à¾(½é¬é<4½D‚M]ß°ÈÜ5Å8Ϫ›B«l T…Aú0ö LPH¹K»kÊSOE&ÒK1ðT?åö×®©ÌÝ/¬Ó—'Jöv3…ÝPˆ|•bð«[ð×FfŸmÞ÷»Gq«±S}jÐjE(~ú,s/Œ^ÍrÁåñk¶šÓ>éZÉR ¶-Xu·íS‰cÙ}ÝŒ”Ú‚>ÌÞÌ/À³×ìêÍÙøù:{ƒ¾f¨NçÛ}\Ò‚*bú„¢[ü$ †’ûìÑò½o8›Î0»xÑä«¢¥ÛPðüWÔîr÷Ô ,ŽûÛ̸¿¥kÕVé¿VKœÛü’7‹¼AûáÙì=ÞÀ ¡Œq[=ë:žöA!y¦¡ÈÙ)6žjÜóßv›-j¶O(B Ü)qëÒ,õ‰M–@¾öM+áìù #tSªš/m QW#ÄÆqª¥$/ó-#]ÕK¯¥»DT׌¤:Bo¦€0Ì$!Ô\¢A¡Ð‘o›âNU!xEiUÕâ¦öÏ ÑÛâ­nzNC@XSŽ•¶Þ¹©+›¹—jž7g7AÂ}B’þIͶõåT;(A"W—4Ä9‡DÔå’®#ã»z“w7õŠoér|5K»—­1È|·]7ÙjèiI¡\sKÞ³RÖÁ°SžIáþ€#ÉD…Ð6Àt…0 ?¡‡ƒáP1ò,iC²Ä—C~i%cR=zgô“ݦmSo¶˜Ž?vzH¾Äî¤`‡œå“S¹_ßוöWÖjÜž)C*î Á>>žKÞ˜j1È«šÚ²Ü­"&—\'<Ñâ*9wG%²¶C¦•!-i‚èC刓hdé®…t*–¹? KGƤØÄSJ]ronbb¾Uo|&B#Lës£(Ðú ˆÑxgãâ/\»l¡JrôÀ…–hÀ°©›ð,ÒÓ®üQDÑ ¯PÓâ\RÖ™|I.±¾:ö !^üL°{Ž •uLž•·`LÀÓ‰:.Y"j©À¦fþÛp‚AhãÀ °w7¤&H-"Þo¦aÙõakD7´-VbÜ]_ cod¬n¬QX'6ÿø²5¸`E m@È|Õ.Ç…ÌÛ¢• ú¬3á»Î~Ÿ,§æÛ&ÿ}§ºÀòQ­xn•ª_wà(Å›ƒ û6oà6Švý9¬È¢tZ! mÞí¶²‘ÆÕ*žL«x—÷|;¼1.iìïÃÞtb!Ùê³™4nm\’¹±qdy0m™Ñ³Ê°-2{“NëÄ ÊÑ Cq6[Øÿ2T`_ Ë Ai3½E/öQÑÌÆ"bhSˆÊœXFrs«gß zŸÌÄ'û†½bŠ¡Œ43±ÆY5‹L?Û Ò9S1³¢²t¢f‘ô ñYŸow¾õJ|>ìEv·A_¨¤€:Ë{È+°šÍ?S%àia}´Ëú÷¼Â0• g:V…­©Iö+z¸pêp©ÞP>dË¡²liDKÂŽð·'«,†£·r¦#éù…ŸÜwlßIú‡3_«¿ôhÈU®Ì8µ’Ø€Ÿ|Ã%jt‚[ˆÕ¥YöU¶hfàÓçôäÅD¼¶Å =Á”'c¬+[®á!ɾÑǛÚ{ ôoÁ¸UAC Çë©Å$íC:=w¸ZÙ^É×(eÉ…FA4e[à*Dj*$?¸%ܨIQ±-óžÃ•=#ê>‘ÖsîÒ2!èyhéá‰C1-ÐCãb0ª-W¾´¼™BæÙF ô¤Ø èlÉDëÄ€•Ø2z'L/OúÅ'Y`\!ý2砧ѰžÔØ Ë–L´Túí– >7Ð%  •GWî]ï~µÈ„[R’,ü©åH`ÍgŽl¡åN·ø #{ÚP>?Ä… `(ÊEHw”©eÜשí,%Å”u›y–elm]T×ã·°ÉEã&UÙl¥ ÙzZÜcÄI2…sV×ÀÉÁ^áÃ#.†»Ó`ôþ#ê¬ÞÞÔªW§ìxÄÃ`C8.Þl?`ë›ep ¯{`.3r“v›?âm¸Jã2ð—ùZSTx•°WåA1X¬wvÍgÉ2KÂÁZïIÜ»$“…Áp áøÜ‹-Üb˜ôq 4¨án„íçÎ&ž@)79BÀd´ÀÈè×,ét\³‰b7…!H“§LÞkHã‚C-JÆÃ*Å}zIã S¾‰> ª”ءͳZÖEÝÅc1åB’Hz72ƒ&Z¥Ûû:ŒC•tä`O7ånk˜Þ/‘ÎïGgM¼·,†k¼ 2âÄ}jÃ<~„¦÷QDìõ’&‡HOÁžEš(Í`Aþe€…¶™=ÞMˆÇ/Ð ¼GÄÿmî[wäØ4ÿë)Øý¡¨Üöx0 ,kôQ·,­ui«t$Ù ÙUÙÝ9ªª¬“YU­>ƒüã×ó“,#‚dFÁLfucsé"#‚_L^‚Áà$½g®^UÑ&©ÈÓép,oÛr»×^-ЭT–0Ûýs½ó£Ü¢OLÜŸéX©»g Êí,Ìn´Êñ–—gAÿƒÂ@¹ÄIñÇÁ˜Û?S‹¹Ï|$u'tÖ{ê*n4„IÈŽa_2u!›>!3L³ŸI0Ü?{+rz=IG«qéþhnŠ{ýÓ;pW÷Êöã|ÕU»ÒqçÞ§áÀé­—8s/*¢ÉFÛÆòpvhpUEÏ¥^CðÅ3 ŸÏ?¾9ÿñíåâêãåËË‹Ë÷//û’ºe³{T}[ó%Ú¥z­|°àJ™Ñ¦”K«‰ixÕR<ïì¾›öÑO¹ý¾˜¡ü’nð"Ð)•F&@â÷çÀ+kÙ˜!³ZÑÍûVìÿ.^!•K/ù…åU?‡ÝW»¨rwýE×âà³­³ÖSåù³Ø¨ƒQ2={fš!t°ÖM„õÜyë?IAÏ¡'©Lw­u„þDÚŒ¶òL³x€šÅÎ,=õ¿ÂVR=pa+Ä$ãÍYAß9+(%_¹£?+Ý© ÜÈê–m½ÛO(Ñ ˜‘€™ ‹+^b®¶0÷ÙÑìÛG.– [Ⲝõ×ˉ»¬ÙRáûeGv˼=Ø1ª,nM7†«ZôËðaùÛr?  §é˜4Áü 1@ÒhñGÓGËgD=Häà·ˆ£uÄÛvÅyÝÇs“‡¢lÁð}4ë#ÓÅÍÄo–ÔøŽ=X#8†x,¤™y{”ª² ”ø%_"aá 5È£+üA–`¾¾×p¸ø; í4 ÃSðl€ä[¸ Ùž­ÌpGz„—1›f½ñcPI%6Ê Qªþ€)oâ®òfQZµG´6#ó¶«² IZ‰Éæ… l2GõùÝ=Äépµä(Ì”`ê‰Î“ðœa$¼Jj1QÖŒ²<$Á`ÃÌÀŸà|CWÅ£DÅò®ÜÞRäå A¯*º£ìdZB‰‘[ˆ81Ý1ÆûáÚíîaGH{C hQ}¯é*x† WgȆ/Ù8¸Ç º´iÊ8ùŽ# y@,Ñ»ÌPÉÆ9îX`#˜ }xà²?šO‚wVÁ ³êG”UãbeS`ãÂ:­Ÿ/><3¯›#¡ÁUÛN݆?D<±üŸ/?þøa~¹øôa1ÿtqùñã3ëínN¼n¥ÌlªœV”¢Ê Zƒy‹PÊx[ÔÕ=x×ôv¤±;1̈á3ý*.½ð+²ŽÖ#‡÷ŒÀÉíçáo¹)5 ‡>™êÚ³¸~0Kïk  BÇ ˆXáìzGÄ+Ô–âý§Ä’€Ê&R±ÒyIO¦•ïÃÝb [3ÑåÑ\§^Ë?ãüéA`2:–þ›mq»ôƒ?÷ƒrÝ|ÏR¯ç`Ìof<î±6ØÏèm7›ç^\"‡««šþܳLVÆg‘ŠC,¬Zaèi]¢½rÜ”«áçj8…-R|ëÃÞòóMÙî?Ìã¯``hLS(ì9å5<Öš±K‘;8=Ãì`a1RÄ­¶9b=ÁìXI@ä¶É6ð°™Òïïêå]¨;ïp W—©Æøb.A­(!–u!Û¯¢‚µëæœ0"‡í¬ÂT29NKÉj`’t7'^—ì´ˆ%ˆ™¥™¹‚‚€&äãïìØxnˆ¨C¼G¹)”ýê[|ÂË_´£Qù€„“qJú”ÛVL½ b³;‡>.ÐdxV‚ßú«(íN‚Š9—ÎZD¿³¾¤ùËÊ!°8 u‘ì±½W|œûò¶è½]#̹c‰Æ #VFÁ|§À‚t¤ŽO±b*XnnìtÄ6E-ñÜÜÎ(7DäÙÓôçYñ±¢Eø—Y†]οÖß-XuY1OÌÖá dûyÃG—ǰ…¦ 8€i~±jó>Àˆ<( ³g&;l—ž‘w– “ÐŒú¦aè9Þ¹Ù o[<¿ø8ÿ7Ö4>ß¡/‡•Ö…Zä$–!ùQZEÔQ„ñ&¾I‡¯(e½F{o펬y?„~WNÁ}W¡¾+ïJ^ù¯ë[3ÍBp´(ž¿>ŸRÝÙc`fmk#à¯RÙŠ=MéHY:¥g¢X)gdSúX¡x2…'4Ò€*jÓh'X#ýÞV˜‰Ñ«¸ ?Ño KÝø÷V‹Ê;Ïóó÷?¶ùŒï‡÷œ¼¶q?½jNd¼ò„}"…í`üÚUµ[7youd±†ˆ0¸-‘F¯x Ä&¸À4¿í·÷ m\gGˆÓô :´ a»®¯Û|ºd 69Jó©zZ:uPRD…ߪºá{iUz;¬’|ŠV’uP1K:¢›¥Ò<Ø)êºÚ÷‹>½ÉúÓõ•"j¡EŸï3F¤ OÔqpØé¦ –)¦*%ÐHÈpO >½”ìÕOÏ’úzèÚ Hò'f)O”3O©ˆžLåþ'© WASeê—\a¨ Ê5FÐŽEÈ“ª¿éãBàÇi©3'Ôˆ“MБunm‚¢d:ˆ0Ré÷Iv>kŽ7Yú„ÔRšAMnˆØ³±ùœ\Ü` ͵֜¾->|~§x>Ÿ£«‹Ç¼í¬#BæZbÞvÖã!ÄìÙ”Ñ wÙðüíKm“ ›Hºçš?r©,©Ù{ÒYuè’Ä¡67™§Qâ "±3HNC½ßŽÂ±*Ùã—Æ‘PD¿»Pƒ}Á'k1IAì Øl=£ÒÙ‡h½TSøÀ“uZ‰8"¤@‘ì-=û`g²ÑÊmÉ ›ßCBz¢xæ¡î1Žû˜q÷X§•hòrÀâüzw„‚nGÓ(·b†"¿…»¯÷Ë;ŽliSG”$[„Þ“é}%¤t˜‹ÏóÂSÉf—ÐdìÊ1®!=Øó”I1ýS•>ýy÷}¦vœgg½ºÙ}>Å5 „Öû#1ñ'0½%&ã…>€š â“àÓã¿€^ †sf‘“‹;bq#Á bÜ=3_¼=yS¤óð#&QS0ÁÕ‘æTnضn–“Ð1"¤jòÄÓ•  Uå½µ]½ùл½RvãȲè¸wâyY]Ç~ÕÖG¨pxo6ì7y•Ø­ëí·Åîv’.!—®QÍv·)¼/ñ ÜÅɘbÕ»FÖ) J˜¼™²r,øýÎÏ ÜÇ]~~‰ø"ƒ­¹Þåîu"j‰ s•½NÏFèðçÀ^†¡lq^Ø tu–áɱúCà› ¸•ÒnËõbe>Ch«­´±œ@OÊž™ìó÷Ó‡®º9¬Vmå‚~Y±.k>bÓ– ‚ÃöWçöòé²Lîü“˲è~2ã2Æ1çwùüâu x²‹ë¦™àv”àØ‘f4êò-‘òŠ‚Ií–Z‹ˆì²ŠB¹Í ³¤ÔQš#0ð -Ü·õt*l)ÊÚ…0ÈŽOãV!dry†£ w/hj.B-!ì ]Øž¶.ö(⸱RTM!4 •v-û7¼i‡;6v‡Xß(˜'´‡n™cØôºç–8˜åj°ÇQð÷_?`l°rüôÓ›‹¸™;Ìóâ¤ê^®x¡ÕJÑT2¥xwçR&³¼#ȳԇöèÏ29žòU&ÏzÙx’Ó)†§¡äù.h ¥à‰ÊdWp¨R­Ã×®êÈúàJ8VSð«!PÇJmp´úÑ=øãp.úf6>É @tA?5”Î9Mz.©\•;ô4£–]±ó‘“fÀ]sOFï'TÄ£hØÓ¨JöÙ¢¿`ré¨dv‘Iwá.³e½ç‘㜴¢åÍܵ7WÒGkSž8—´ ×O‡›¤é¸!OÁóÇ=¸[¶Uµíîš ÃGÄ£ÀëiÔþÒgs[¾ÙútÓ]`š Ý —fóЬC-ªí ¢0ç« 4üD ƒ§‡`¢?Í,^¿¹0ØVþ–züû{±`®›²]è·åksâòÕó O˜Žl`A+$%¦ ¡>Ž/ý!kÕ’‹‚®fÚB¶îÝGVšòÚòB¶1îW©Ÿé>®òPS\N‘P»Û¶\M˜E56E$›Y2U!(ˆóãR?¿ûD·½cÆû²ÞOEÍx’f/d#Ø/ðsw§Ø³ð4=½Õä}%x8n˜0@pr2f«h1ÇÕj}×É!aiFåÀ‹à WeÇír‚jÛå€bÛ¥®Öv)úýç÷/ñ\|&Ä'…ãë/ôÿ)—pC¼(s`ë,§–º.˽ÿ•¿~bŒuí Õ%„*,élÇ5Ç™¤çä‡)s—|ƒ * MTÊ%ï$íÈkwbãÅLŠ^äñ›n4&$¿ÁJzã8p•ÑnZ»E¯ðI_GÀ ë’ú.söG‘¯È´&nŽdS 7ƒ]ñx è(é9ö©h.5Q  çbò;“eË™L\ “z””V.Õ³¸ìÞ5E3‹{jËilŠv–l í„  çbˆg~E®˜i-¨p (™lC.&¿OÔpêÔ™`Ðs`ú …‰øÒªBZ ÅîvU»¿k«r…ï•fª¥²ÅJI2M%IÁ¼F;ç6Ú¯% 8\y <‚Œ7&BÇzwü·lÍq¬djZ@ºŽý͕ɱ!W²À~«Úm5½Ÿ©l±D6ÔǤ ÞÃ(Ç–îÝÞøŠ§š¬›å·Us¿ÍÖ!`ˆÑ; ·Ë“‹ÊM½­ñ)VSó¦mê®s½véø1'ƒm¬}ŠÞéN®R)]bÜu¤örÀ Ø?»¾Ïì›xpÙàØ°‡l÷»‰ÓNȃ6éÉÆ³'ç™÷Ÿ´»©¡ äMšP~jqÌ©d:ö)°‡ë`y?l6°_| qW.¿AØi}DãŠa[ªt_bÒëÜÒwƒ•î„Nê4 SZŸTçáB’K‰ÊÀ1ôæv­ëe¾90Á¨(ågD¨*öZ¯ð´œR0šêÑùž÷&9ÓM;ö×YZi‡þ€Á39ioî–åöîºÌÆ.écà6_Cm³ì#'ð‹¾þñœŒ@Û•Íž(¼i«îÛÇÅRêFŒz9uиeˆ*=1ùËÖ©ŠLú©ïž ÉÞz ê0uݧó¥5Xù¢øã Ó]J:CÒ‡­n»ÉŸù±‚Ødª0Mº}0†¦:x ðý»«p4U»|7u+r(8» ¸gµÍ0§P™ÏßF¨§õíndS ˜“}º[ëŽù€è¦UtÌÃFšte3Éixp‡@ïÓ$wR D,)eR­Ð H+§i²­—“&äÑt14C ãE 4Œ¡9I‰ °¤”I7Œn˜išìÍú¿ÜÕ‹C‡CíinwL˜ÔÈ$ÌŒôI±œ_2û†ó«7ÅSíN‡ ÷ÆôZJv‡IðDHC­h&‘ºåB[wzc%±Žf¢rûˆÎ’¯ô‘@@Â;iø k‚$WJ}=‹8ä¢ÇÇ7&vžˆGAŽ̤;O/"Õyè™áï’ÉšÖ{B–”ÉÞã$zÏDô“»Â•Òa¨ûp1q÷ñJhÝç„xnQ܆c· ElÃ%Ï`°¶M}Û¶ô¸ÉòÑÉ%RÊ6SQèŸÏ©Né7Þ€ú@¬ÚÀLwTçsðÐù|1&ƒê¯À©ÙÅ­˜Œþ¼=œ…0G/“¼, •|8¹Ä?zJîSgõ`„TsýøN! 7½‘6§9L¢¤1¯§ *W7qè;! TF0¨á@PãA {Ñ+8–øcE$V&w ¥4Fi,„Ò£õ˜¤Â úpy9Àvþ(\R[ý|¨[4™„K…h[þU[arWï{Ë B9e÷Ö4[ƒÈèQ(­×*‚¼$l¤~|QJ9¦•Âr{k’k@¥×ÆbR=w¢“UE?Ü@ÙàT+¸CŸá¬C}Ç<­û¹ª#Ÿ»La_NpEâTC›<µ§:%Þ(<‚YÏtñ‚¢ô´Ó‘È{¾ÊF&?ð¡¼Æák²ˆ ÌC>aÕ“G8õu*cÇÆ]×,k‚Öƒìè™(›@«Ñ sÁ&@†àôªb%¶·¸ùn›m +î ßÀg€ (gž2ñyhâìqÅþÐn ŸU<~þƒ#œ²ÖFó?©4ã°bêǦ{”ZxíĽµF´·ûü3Î'áãý&‰SÚðfÕò°‡Ñ*Œ\3 イ8Ö~]"näìÍœV‚'œ2žB$è €OÁïô“gî {çœÓ<‘¥™9š „"Âs‡Ûj[µÖ{+Ãùˆ»]ãMdíÍÈÒíëå4%B.] O•RÄ„ª°œ!%6ùƒŒ¡M}|Ç:ŽXþ…]—¾6gRÁ Ìì¾é‰Â~ií.7á"†“\‡]Lâ<¼OœÜ•]äH!â¤Ó²ÞQÅʈö¤5œ\\¸^2†=9ëHðreáúNöD:Ùw '<3ÇÊØ þ$l̆*øç2+´9…¯Ãz®î®Z¯3; § ±a^ÜM0™êôãlÌBiÕeÛáíÓÖeB¯NsFðí[ÕÖ‡EïóЏáÇsÜ(þâ¶HDîß)u‹²3¥š&Ž?1G¨®ù'=ö0v9¼»ƒèëç7±ï°k1ûü5Ñx`:vÆŒvfÈLµT®Hµ®ÃXÕÎø«'Åpûg—Žîc&¶í nʺ@Ìf`1{å¬çë„ùMᔲþ¶údÇÙ…½àó»?‘¯mÊvÎÿ´b²ú!1fpÂFãÝMx&$É•@¾ÓŸ ‰Å FÀxgÝœß\)ĬŒºüÈC@uxÂ1͵×9ÅßI¹v7Mn¬6I@l”ˆl6Õ‡/R¾9:I>¾CÂà˜vf˜gë•Ù†P¾=-ÇoîMxK¡—ZÀ}ú;Xœ5*ç+œ²ðºnæ?v;#¢«²Ï*4†®!˜Y‚/cN…’G#ø»ºmn©{ÀS<|SÀÆ\Ý8sþy„£õ·œÐìÑ.¦WÐÆ:Æš} ‘‡~ðÌ*\y-Õ™KÝ8÷óŸìЙW—fcP' ”y”Œùkæxà–üSWÑ—cŠjûÕ#Þù¾‡£‰âó‡ù¼pgŒQ ×OLÈQ†¯F¯d l¢"çF÷ £ƒ6>WEt˜˜zRÞ`¢j¤GFžŽÐd|Á!Ã"¿VOhGÁõÚe¿Q\@eב 8÷”/X^§nðë¦ë$Ь÷«b¥Ð¸×gî”(Áò¡ïƒ]{°žÙ3P B‡R%{UJ}¢³ÝÝb4P ”=†înÆãòqZ¤A¸½ ø}i°í ü`½Ûç Ðz0”;£Ü“à”Ð(« ,‰½Fq12†œÈ8H%{G1[^‡–3ÍìFš$&´ÅRÆ 2|ÙŒØÎ„;ˆŒFn7ô¡><ŒP„J ;‚‹ëÝÎåÈ[æ”ä°â4ù¿ÆL‘,×ÙCÑ:üÓ°;3r[ŸHŸñ]IŠ\C.ö$#a¬öŠé2ónH{Khn'IsqÐHåM±J‡QÄŒW32õÆ‚f}ØðwU½2!É”Ö*nXHV³œ¢ÖTÆ”Ië!Æ^j?#ûrÝVOºìGÀ(vxÕÈZõ Ò¸DM:[²æ~8 ^[î*ŸL(`ü{áëá°;1i™ŸˆÎ‘ÀûðqËdNße„ÈOßhèÅô3–šÆ¦ì'°>«8žŠúÑ;$òÑ›$½Y“VØPM惔5iEOAlÖrG‡6<Øì)£„&h|¤wƒá—HÍ1Ò\:Å#‡"&wô˜¨×ãöâš6ߎ§‹í¿‡@pê›8 |ÿmÈìâø$=ÞÆ ¡?‰™!Y¤Rçmùi°• Ç2ާ«’ï»ä óOÁ/ =Rð¯Ø‹r6ÔÜ‘O£çœåUëëø gÉãQÀÉÉÖr pÞ4T ¥è]EЯš.»›.ÙÄM§µnÓå6쇹²_jºÜölºTS6ÒŠM—¿µS‘íÖeþ¶!"æø S«ºži¼òvøF¶Š1³þBÚa\‡ž%÷3ÐQ¶ÕmæÓ™)rŽ•²µúäŒã5JÔI´™µS+Xãšel¹u›Âk è¹µ«sÄÖð®Ô.g¯]g‘O Í¬Ý˜ZÁ×.c˭ݼ§cp”§eÄâûå”Z×äêW2VÜñ$„ö%»#*ô¢=~Ѻ"gï‹óùk:Ÿ‰×ÊÉí1¹XéŒ1kBE|â¡–Àyʹ–"šuF+#Ù3!±þHéÅq"@y”–Ý#Ól¬<ŠÓú§"(cÈ Îꢶ—Rs;m’k@'¥ Çb²‡Öiz=î¤TÓæñ‡¥ébYï—‚“ÁIàÙ'!²‹ãc4Ê ô¢sÐJh—€i¼ÿãrØ92¹¨´À¸[1[F†å4ÂSŽÑ{\ÓNÒCq}DÖTÇÐw2tÌÀò`¶Y×åv;V…`Òg”î+¡'åéS^½ÆwŠ1@<|˜;7Â’çù௭CùÞÒüèý!áGÚKîý ±è?Ș ü ±÷ƒl¶Å—†— ˜O¤RÎ@#œ{Rq½Šâ+ çCB“1Ê<趇‡Èîð mÕ^F¤ƒ–5áÃ댗’2 >KàèC÷°Zyã]Ë8kŽ«›¬@ÖéÐ:ñ ÷ˆË½½MƒQ-Ó8׿ŸR… 5úþ}¢"9¯Ë·¿/˜"ƒõÉEtÓ€vÃH»$TY·l~õbÀ‡ ¸5z<èÈ«¼²"К‘ö[QÞÞ¶Õ-}Õìx ­ˆa2<B2$fJáœNB·^í·ëæº\g Œˆ9J“9£L‰´gŠÐ®Ëðýª»ec6Ïp3qß,›uñüíÛ‹«Dõk£9Êžòjô¡‰/Q°ŠoÑ@å_c4ðÔþ¤^®2$5èTìè†R`bðyˆu˜!¶¨R§Ôds{;úæKLÈ!Q†DEi2h%4*_ãæÀ˺9ðÐ(qs€š.Àý?SI_ÔŠîÿC î²{§¶ô.lækãOUgVLmU.ïÜkXtÉ)( a² >â2…\zÇ—) Ìø2Š‘.– 3Òï3Æ?…š•K¹3ÌõÃÙD$uL‡Û¥˜eÇ 3””ÕDë3°r:ŽÓ%>Šßív]åCzoÆ7©ƒ!¶¨Ž,|8wIWlì¥ V(ÃCpŽp°4 ‡Q18*à@‚Ø“¼=Ÿ^ àûÓ¦w±p>ƒHÒô„ ߪ6ù,¨C§°úg«ÍVzk6´n«d±öŸäº2ßZ¼”,”*´O[Á쳪ÞuuC;Kn{0C)þ[ÕlÇÚ+¤rljÀ& „ye6¶e±)oͧõÅdÍLÝ™Æ+žiÞþP\·M¹Z–Ý_^©öÏî«ëàéë¼Qßð-t> ³ºžÉ|? 1E¾YNú3Eª6.Ë}uÛ´õôÉP¥M‰¬ƒv!ÑZ”n-'´ÕMÕVðŠv¹Û™¦€Ïãì¦ü™—îßà³1-\O¥VpgÅÇËù' G~VTûå DØŽÃwbä÷Ôo³f&Ë÷ÁàòÛԻݺ^–þ³êIJеY&âÉ= èq7èXŒéT‡èÀpa«ëÜæñ”Q9«k¥qV×ZÛàÕ—ë²C³HѸŸpŠ:F&<…#6¡÷`6ãRw¸f^¸:Z“½¾n¾ç•ä^›­¶9 b›S €„ر¹mòl¬6¶¡Á<ý+¼+1@ßâºZ˜!¨}ØÁgaÇò°ŽOØJs-6#ή«™—13’ñÅ/ÍdócU\:‚â Æ‚BgÙQL?Óìûr½ÆÄ–l>õ¶Yð à ™W¸ 2KhS¬‹‹ç2÷“kJ®¨D3Žn’ƒ±Y?\7Í·N>ïÁ™Š¦Ùÿú×b†r0ðu·“r½]®«pà q+ÑÏù¥ Q²0Òv7+´—unÆÔÚ7ü7ÐüãoG‹8P¾(ê Œk )áÚ7°T\\·8}w“fÀ²o`í9óü_°ÒîšÃzUÀëUñŸÿYü×ý¡8_wÍ Ó±î©ŠMõìš5„Ù8–mMzšž¹zØ–³Òp‰…ù‰P!¸ò.šÕZ»®à5²ºòÒ ºÿÓó" ^šQ¢8ÑÍâà.*pø/·{¨”½2jšà¾+×3œ[àýÁº[€“jª™a3(ce@ÅÙ2fTÆÌ”1k¾ÍðÞbÝÍ Œ×æßUc*Ò’Dj&ð»‡ÅÖ¿«Lù“<̶ ò}¹{0Ò¡¯ì‹‡æ`š­Æày_ :^3Ř‘»\BT"ƒªÞChþáa*Io‹7c½ÉŸ±|?\Ŭt[ô®Üš ÃùË·ËòÈrÐhd©v©»Ç» g«º5øð‚?—Y§=°NÝzÜîpŸe(9Š;˜oÖ…CËØ^ó0Ô@ãb±ÉmgB„;([øºÂ7Ó}°2!Þ4½`Gd÷¾ôøíƒLQŸr•4DÍ=É%ƒ›–`B/0™‚§„x/÷…©îõÊ Î/hâ²í%ˆrYµûú–“^³›âè13 ¼Õ' GìÑ»Œ¢ KÄÈw¦d“ösê7ÄÁ€zŠà$Pe@_ú\k×ôVC´ã§‚ *VqR¨1Ë8ÿ”ÄŒðöø#¼öáù)ˆ‹ŽÙ>wŸ@mß­OÔ°ÍŽªvÄh*$nlñ¢’õp™¬:°~,Á¡¢³òõz³AðÕF¹¶Ö2Nîc:†HžÛ3RѹCC‹÷ (éçK½]™™·ØÂ³4Ä»Ëh¾0<ÙÉ&caj¼}²¦Ú f:¿U¾·8èEpdo«•YÇÔåøT‘2P>K@ó©¢…\e¼ôÙ»†¾>ÉR·rUÝ´åø€'Èzp”ÌQŠ .×™9kC$¢ÎLx>¦Y9íõjSwß2µˆ”2Yñ@Ö3Њ—»wxÌ\.ï .  ½+ü%™š$¥ÀèvæDÖ›±›ê*i³"¸˜*<#æÎ>¿¾€¿ù‡-9¥}‰ú\é\®kSããÐBRm‹î=&K@ó a4m¸1º6 ýÃ.*ã®J*QÉË·’W˜Ã0'lv¥•‘ÄŒ+»ÃXøÅ4=ƒF6—/ðIVÒ¥á·zn&ÒcU\¸…®Ä ›h3ÙN@p(X…ŠÖer¼ÖÔgžmªÍµšN/JÛµ8ï\{9ù`s“«P‚/RËÞíôtŠr¡(­ßXUéâgOªh2 þ f(ªþD›u,mÌÉd$±Šî=½–Çëw°fõ:¥Ì38N ës¤³ä¢N@ ñѲbÛá˜{õÝl]`cŽñeƒÆç@FÏuÚ? XÔù<¬+-Eºqm½ßVû…ÙCæÔWHËBÞ ò$BÏâŽOÍš ~áz†0ˆÝtñö­™Co`€ûÍûËOEqØÁüo!vËqhž†Aê–J·Do¶Çæ® ¯à!û9†n¿˜¿ ÞB–j{¬Ûf»É™cÚ ËãˆX² l¾Î‡‚'3Sš¶V¬à–ñº¹5¢Ìz£FÎ`Úìf ¤‚‘N2[03ÃïšV·®Ó!-¸±³Á%a)€´Á7»{Lm•}"ß¾!Û2-ÛÚýth^Ù"_Úв‚ÐÕÖ˜(⪥ÆAó£ý¾9˜%ªìí*|âhL¨íG†EX“yIಙ!>oöw.ÄæÃ4—_/)zÜõ¡^¯œéÞËØ#2"Dîá7÷¢,àLÆnª8#ÃMb·«–`î)–ÐÇÍhØðã`!d#P64M.ôvë­Ã0ÍøždI%š,s^:Ò‚Àõ∠‹‡]öͦ1ió3އ“1 ˜,` ý ÿD«"N¼;w®¶Õ½ÿ½T»²Ý×ÎÅÏj€hὪC;Þ¢’®Ç ob™tØ’"â‹æ~»nÊ}väÞψ¿ÀÿÎÑþùêÓ žÞ 1y;º²ZÒæ¬ei¿­.eóÖ°úâ5ZµöËU8Ó„ÑÔj2Ôl0ÿÁ)ÒhÉa_¸Ëàå»4±’¢²]Uø]Ðy(]ŽNÑ…¤×,¥`ïq3mÐ…ïšýMý=#ã Yb€>³¥&6¢´ÓÇÝ~¿[ìÚæûø"$"epLÖ ³$Ï ê†Rücb°0ÐàËBDuÝ-ìÝiú3Šm€©Giˆf!Ç« Mýc=‰Ùa¼y3÷àï«kæW“]e‘À%I[憠 :ôCâî>ÜÑwX“äLþkÌC6pÜ¿Z¬Z³‡UO!î¤Ìfr9“mŒ]ïº ©ÔèRL˜ºño§§a:ñ•˜ŸÞ:àÆ¨>Í Þ¨À§¥wdŽ-ÂãuÝŒO¼’®‡cÓ9$›ÄW@¦ïýøæÃ¼€»Cŧ—Wgo®Äã•|ÞvݸS#bXL¢b~Ëù ¤õÒu ÷óù;,“Ü÷áÙÌ-n‚¡Çâ´MoÈÌkÊåõû~>j–Áö/NÅÝo¥Í ¼wþÂBì‘èh1’®/Ȧó¢l’ØæŸ±•ùÀcìÕ,¹Es[e K!ÇC¥!¢?àF›ù:ɤð™±Ëo€2àHJŽÇæH@ng% Î)¥_Äwý&,e Ù•û» |û;ÚþN¢Úßi;LW­k êrsQuÁÑ ¥ø[#WôsW€ÔQm—³2Ùië‘]° ñŽÎ½ÑÐY^ì¡är]vðì'R'a›(… E’2°òñì#f½û³ ±AÐVÝbYŽ[c$ƒ²êf&]@ R^ôËþNÕùa×´õ/n§e¾°O<y~õ¹Ú|$—‹ªû¶ov†¦º/Ü#Ù®„6t›ÝÆ [ úce½’R?N„œõ°z‚X‚ŸR™D0 Žîן7yp«ë¦7È 2“8L±ftü³ôSŒ}×Ò–{‹×:3J„¼ì[¼1*K'â¸Aî#ŽK[ë,DŒN‚ô$¹Å­|^°+NÇr}¨<¤œU™ €‚õ¥øÕ1̬6 ¶Ætáj²7U›±n Ìp`u_øË:Ò6fÞG7èŠg«—­õÖú0‡-H8›ë&ËE/ d8m†ÀiӨƶË;³4¬QК=1?3³[±–ßBõ TËC 7"íQð*=nóÝ•Z²ò{tDâÜ#ïb±ö‹ €œŽÃt ˆL"ü WÓ ÆM±ß=‘qWf˜H8©¢xHÐö˜˜á ¬2N‹9/°’çĘÀ› Jᘣ©Cд{CœBr”!¡Pšø¾lZdë¶›ñå#bE›DQ¬ùš®ùt1ÿîʵ8õA«_pøÉæ}£èF€E›=ë.Ëüö\‡áÒ¸±¥€Ä¦-í,ê<‘¥sЀ~F(á@FïûѬaØg1„cÓûÛ³%é¾ÞT¿4Û 4’¡±Ms‹Ÿ~Ãîž[w¢)»ñÞÁ©Xñ*ʆfÐþ„¿ïý{yÈÞF°pÿî·0ÕC=¶ì3>lÉpàT=VLåX1î‘Á_t¨ ÇÞÇzPÙš:;Òq3ÿȼŸ‚Ý5£t ¥ dv#Î]'ìýV2„;Ü9ÐL:ã< +¿­EÙmmͼ¦êÑö7šñ65ŸC²9UÎÐu3òÙ”ž±£&JݵMÖ°¢PlfÉ1EWà0KÄ€µõíÝ>' @aV Sµ¹ö'Àòr I^Ì–˜°GÅnaÄÓâ·ðRLu™ÔåÃ’ ýQ¢ùÛ|F'•I¬ô`‰%C¸èþº'ΨFÝ=$Y5®Ä ôm8lWŠÒÃÉ‹k%‰%*ùÇ­=]Ø*Ë´«Züh·q/ZYâO¥ú4_˜Ùƒ‡Þ)Å •,€ç´…7Ë-v6òÚÞ±AÖ¼¦C*Y€m8+ÓZ±i4ƒÙg˜Ï¸é‘Å}þ™,£Ý°¸pæŽaÑþC]ñ]½l›®¹ÙÿãoÇ&ûøÎ–¼_w¿û—‰Š™B‰íÓÛyñ»ßüK1§ïúÆ×ùwºàhOsþÏ#£Ð È™ aiL׆Óar¸Eçv¡‚èÜ ¸äuˆÙúå"óJò®·V<~Ý­’õC1{ …”Œ1‚€ÏEèôÇù…¬~ƒL¸üì¸hÿíYØrèûy¾nÇcÏ(åôÜ¢¤+—üì;»œg9•€)nŽÅ|Å‹“ùªºÄ,ØÌ»2ô1uŸ}¿Þ ¯/-Ð$øòÌßjxÜ}ýñjþì;œsã³FO¿Í‹ÎßöÕÑF€N Þ–>TÒ¸ëN–$Ül‡[] ¡`Iõ]t ³ø$`Ä=ØÑ£C‚Æž›=-Ò‰µ(l7œw³µ½t05omXã—µé¶ß‹×;ØZwM{fêÚÞ´†…lLÀ¿÷Ùæ'R’?MòÿŽö…µ­óôêƒQØwHÔ~Pè þéµ3¥ñ‡ÔÖ›\}wíIñ£›ÞsŸ¤JĦkÕ“¥útO!}¯Ñû Óñ°óit¿GÄa=9‰Õ “<~üEÇpÎþõÕËËõöÂ÷›nñó¡Ù—#eI*W\7ÃÔ¾DKÆçCL@[è×Ws²’¢_š){dCn¦ÙFZn¢‹ëzO¦×]]-©ܶÝ”:SípžöP‘Kˆ=’XCÖPQ‰ð׌èáO,ò/ç ?WZÅ ^¯Á==%›rcñ–Ë—€Éõ/U¿Øë–mUmá\`wØSaP.^ÏÂMÇ4WÆäÞÊJwbfL h¸xõæíåûów—‹Ë¯Ÿ.ßÏß|x?§‚o›ýò®Ì‰×è=DYyŽûuõ€Á_˜íÖ(ePÙJUÙóùºü©Cï4+•ZÌ-¥õAÞšF݃Yd}ϨO7GbÃrcQ”i¤¶Ãf@Fà$µÞèóî ¿ù.XjþÅP={8 {Ò÷ù¶˜ƒ÷Ÿ7ÊMHóP8¿î h3ýUÒFìƒ(‡Ž¿üô®÷2„»_À»ïû¢’®QÊ™•"0º ggˆgÕº2ÿû UŠ¿"YAdí)Ç×™‚ Z©nÞ_WØ_9 g¢°”ßW‘:Õ Sí©ž+»ªž%Ê{$8¥ƒ>6Ù3ûzÇœì—!hÙ-ûú.âBOÒ&·’SPãªå}‘΢•.):£YH·ÙÍ͉#8˜©`Âô,`’zxh1ë§±@ÀIr‘e Yjñ\k^íîò€ít@»Èn´ž M_~µªË½Ùîd¡ˆ%—"réÍÆvnö¸€²Ò^³Å•Ãöö)mr±>h•#t ¢,£\LŸÂ —7~OY!Eˆ;Êœ8žuÎn«½í3®Q€’-Üh£“ƒGP @” ²;¨±¾KdN–ï—N+ …`KÖÙê°Ù9lŽúÙ/f› ù·PZ¹ÚŒÜ¥I’[ˆfï²g˜íQFŒ|ò×Wð@å® ÌsšUžÓ :òøûTÝ=cmq£=« @åbâ¦~¨!–û²«`F¹/4,®/ˆkn~¢4ˆf ·aŸrè¸éfVìð @È+â¸D!½Þa>Ϭîô‰ÐI¬w3Ë Þr`–aë.,bLy }ö ìb‡[„QXÑâ[~°OçEA \Pƒp/ÇŠ^x°’;/”¿6ÍŸªjgö¯è#9á°è-p¢dœÞ²?)ÅØ˜Žnxp¾ü †íÈø":[*ÆõßAO:ô%ì0žÇ/»Ýˆž ±¥b’/©‡^ð ÈOóK{©¡ÚÂWf¦™ E-ÄÆ‚ˆM ‡ôWB.lÿÙÙ]././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4425561 ansible-core-2.12.0/docs/docsite/ansible_3.inv0000644000000000000000000102641000000000000021041 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 3 # The remainder of this file is compressed using zlib. xÚĽÛrÜÆ¶®y?ŸB½/ö¾€µ–¹»WĺÙAK´ÍmJT‹ÔôtwtT PYU0QŒD‘¢¯úQúÙúI: ‡D!ÿ‘£¤ˆ©i8þüþÌDž‘¸ÎeºÎÄ;Q¯Öi¾*ãzÿ¦|ýσ¨÷ÅæÍ¿¿‰ËômšoÄ×öõ!û_ÿË›è×6æC±9fBÿp’ÅRzüì«Xw:$®ë*]ká–n·x”Yš¿®d)’4ÎV[IÐx•Y±[mã$ÍÒúˆíŸVÏ¢’i‘Ãñ]†yÈŠ È‹U¡•qð,­Žù*)‡8ß,a6™÷ÃÁD®Žuš™ôìŸßüÛ8Æþ}4úÃ:–i2¨ÄVT"OÄ*.K‘oÒDÈ·ƒá®?>Üþtw³úçÍç‡Ûû9sNÌþÓÏq–­ãäécQÿ\m–‰¯‰(k]›þÝ×ÀBb7w·¿ükõðéæÝíõÝêç‡0xUŸâÍêTA¶ÇßøôÈ ûñÕÍçÏ÷ŸV?_?^ß1(>ü¶útýðÀ£ôÏë/wLz6ë¸tV×ww÷¿¯®Õo¿<Ü|æÓeËÀFðæ_|¦¾»þ…ìÃÍã¯÷ïÙäØßF§Xß]¿ûµeãU{à•[½»ÿøñÆ´\ÌŸ>ßü|û/fÑÇÛ7÷_9Tïî®õo~ÿõöQ`˜4º~÷gI5Šœ”w·ªÌf„¼¿»³5èa¥ú¿ÑLfõáöáÃõã»_yútýxEæÜxxwýqõð#íýçÕ»_¯?þróžMNÞßñ .¬êû›Ÿ¾üÂ'¦Ú’w×7l‚·?ÿ¼º~ÿžUOÍ‚oX?ß|¸ÿ'›i3âãûõö—_ïÔ/¶ sÿ—ÒÃo·Ÿ¸´¾|ü|£ºÝQpIªfñ§û69=ÛàÐúðáúã{ƹ‹jVÞßêVðúnõÓõgÕ\æ‘ýù–¥aiG=j ôîñaõáþý—;žç·SæjõO‚|]öïltj:tsÇ6‚TrŒc¦n¨í€x§÷ïoþys×ê1È™Níî÷ë?˜ÄTÍ{¼ùG1Ü>|º»þcuýù—‡Õãýêáñ=Ë ¾ÕÕMþ§›÷«_ï9Ìß¿[ýüùú—7ùž¹÷_>©‘·Ŭþ¸þp§Øß=®~»ù#\øæ£™È<ê5Sáá˜ÁšáÂÊŽßT]©açû;Vå/ß«)âGUp<ÃÍ¿nÞ}yä鬙{-ÇÔâþ|{÷xó™¯^þ|ÿù]3šàkª Üo 2¿\ß]ÿ뮽Ps_>ß<ð ßþòñþó ›Üg=!{øMu«ªK•ùáæó?9‡ÜŠgÐh>ÞÿvÃ5(ûE©Ü|fé·­ÔêáËO7lrl eͳ¼ºýøîîËû›Õy«Ð;á‡_W?ÝüzýÏÛû/ 5GwþºC]½ûõæÝo,Ec$U…Qí-ç:Ö¯Ÿ®?Ýò5á·ÿ§€ÛN†§+½ýøÏë»Û÷vP¡2àóíO_u7v{DZô¤äÕØêþóŒRf[ëËÇOÊ¿QÜ>ðÃÚ¥hvAÖ%ø±6ׄ[—m‘,ÏÖ|„í0™µ>ÜüëÓýgVH®^y¬¸ú|óË k916^­d÷ðr=¹ÿS5Œ×?ªbz¼ù¨÷"Ø$?ª>ciö·››Of÷Ñ ì9¦w·?}¾æhY•Ð?o??®îþõnõñþáæÝÝõO7 ‡îî¯ß_`¯ìî^iš›mIÅH®o>|âÐú¥™ºñhñŒcïîïûò‰¯>\ÿË®=ÜþŸ ‡›u#6±¦ATŸæ—ÇÛ;µ7¼[³­àƒjs-+ÍßÕ¬|õËç{UsØVH>Þ3-Ah¡ßY€ôsÆ¢ó¨*ðÍ£Þ æQürw§: 5özP=ç5ÏÀñþî}w$ÄŽJïn®ŠCué×n»?ÍÏ®¿<Þóì¾vÚºÓkEZŸ¡è?é£ zù·Ýc´Í¸_å£ý\2… i?~¾¿3‘jó9ªÊí'}–œ¥ëÖë|?éZÁCÖªéÙõêóý=GVÞ«§øö£ü“ã¦Þ¡ºyóñÝ ‡Öí?õF…~Zõ¨”OѬAò,Q|úãñW½Ž©sP™gX5šM¯þùîöÃí£jÀyò æóL1žÓж2ó¾ir_ôáúŸ7L#V]ƒ¸T}þòQõÍcK­dÚ¶¡ÛûO«[3rcК¾¢®ùóã§ÕOzAT?. Çï÷¿¯Þ}yx¼ÿ`Ö˜9»ýÄTÀÿǽ^mÏøsèi1–iM3¶ïúb~Ež>T«rîÐj=΃ÖÓmÖí S¡<~Vúùæ3Û‰w{l¢[:áü¬:å_þàSblÿõöš®‡íAâk¦%òFùñOíf:î 3?ÔÛ8·w·°>Þ|`<²48cÒ­¤˜W‰˜ÄÙ·*ÛüGU–·úL#[=¼y`6ÿÕ Yº®âêõM{o‡-G‘ËDäªjößä[Ë8HÉF õýç“Þ*>ªg™$™P­©#ò:Mâ®ül¾é˜ë;¦h)œâu2ÍõAoº¿í¥$ªª¨$1™&øú“šØ™ß¿9¨'4Þ‰^Æ»ê½w6ö÷}\¿Ie¯0þGOÿ)/^òU*¥¾†–Œ‘ˆ‰ßôÞØ?ô’iª%1…6ú‹n¿Þ¨RŸ46´(©)èÈûR=1º*ÅÙñ5Öd_¼R QÝ„Zx þYMrmoÖÔ-•й(G««ní0Û­œZ÷'ñª›¦q×A¶6BªC<îÒ|”Í_¾µ?Ó2êßGíÏ_[ŽOö­ÚK\åŠ]zô{ýÁA£ÝEn„ùG¼y³/’eÓ»¬PEõÚ³o"ªün6«}!ëU×€ö“"Ë„mÊÞ6× ½]ÕÈ!ÍߎâÖ•uSᬾnUã<Ù«guU«À© –õ«ê/ìï{#:+5‘¸6õ¦ù+•ijú­hp²Tý_š?«†­¨^?ó*-‰ý ëPÿDtJ':auäSÑ«øëHÙ†^7T5^ýññ./ÌuZk¡šP±*+5þ¨ÑºÔˆDV$jDÜwý#ÎÒ$+ޛհ‹ðzz›Ð&ÙæOÑHèzÔõ´éù·Öîd\Ã’V[Y~Nõ͇“”Ä@æSïÿЗ·µÃ‡8߸‘AT͵‰dm[­jü¦kVnõó ÚïbûFýHÛp¿1÷¶M¾9Nß öj;rî1k.oíÏž4•¸ýÛÈ*<˜?˜!ŽÑ/^VªÉÌ6ª%7f$]J5‘pæµ"£µZQ§e/ERóÉ»÷jzuýÞ¾Žøá“ÙûUªËãZ7 l•LJ…‡íù ZP5mþºû‹îá]=VÝ`]I4ÉD&™È$Óýå/úï>ê¿ú¯jÄùßÔKü*9ºŸ¦ÔÕGÕ¸X Ÿ)Y×ôÈ׼ÅÔõ¨•Ò+m»ijOóÿùFîUÞôf‹oìEwö69U^{ Õ“±«âÃj«kJSGÛ[Ô®;­ú¡çòíMu£ç#KÛ¶yr§Ý›ÿª‡.eœ<©vñ¿Ñ:>«)¡¨êéïâ,þú$ÜHtšÑZe0I±g<:µQ=Aw#ký”Ùzl¦2±jÕ/U1z­Î$W#ûhÎCÔt§qÑæx(ˆú*ÉaS´·‚Î u?9ä¢d6™"Ï^£dç;ÕAò$6œI7¹œ1=’`Ì?30™M&¹\Ï©xaô¡åæ“I.–€²°Y®¿wI?‹j]4 BýŒºlÇiaêÐ4ýe2æ™=Gdq¦kiÀÙ¨™ˆ¢X>u£e}«ìàIÎI¨ÿ9zšMˆ+…Nk.¡çø˜Õ¬ÉõˆÆ#aócß.q[† ®ÏèGÍ¥·É Ï$©ƒŒ 9WrÉ^$O %nù"ÏÅi'4“š+1s?C2î‚Ùªq-˃µuÊûtL>ê{§úpÕ$0‰ô|‘žë].5½bK¡¬Òg=TšÎ´²ôÖ e3òj¸¥—œXêUOÍ•X³·b.ÆfHíàL¤¸ªg‘¥ùè9ì•à7¨2)#ñµ®â(®v,¥6Rt&º­ÙSI:“•{³Ý£Ã¹’IÎ%Ëlv¨èL´,­¯Ñq&`–oøºÛž+Á:=ˆâÈÒxÕθF(G§ºü¥,ƒ®Nk>!=ÊdëU†W+{>éÓÏ}Ëäýæ«^IÎ% ™F~ÎI«MæÝÅF¯ï/6˜üíb3ÎëÛ/Ö”¬/6K.?ëØ^lJ°¿Øt ½ØèüéÒ ÙÅFãÇ‹ufÏÜMì¦9à\þRÿ8]úÒé1Çìb§êŸ•É*šÏ(þ9QÔ³˜ÅÌ©¸:íeu·݃¨c}<Ьþ‡H…&ÉxÎÛ–™{ÏÕ”gæh6™§e)‚JTNDë×R„(ÖEŸ±Ð‚è³Ktqü³$:÷éŸYkòÖzµgmaþdm]2Ö–E²ÖêšµF?sUåÞ¾¹³»±ÿ>íqìß÷w·õq¬Þ1(ÓÅåš¾ê”qF;ª‹'‘{1l‹* Øz¥žîò¢R]»¨Vþh‰Dq¬K}Ä©_¡1ôÕ}h¤¨žÖh Ò+y[s¾cL¾W=Ø~¯§@~óÂÞ/¹þ¬è…Ú VÞ£Ð{$]ûƒxRöe¹X»Ô¡$¾(ymDy! ïÂ)+q¡"©„/C%þ:¦•8ˆ¼öX¢$U¾<h©;ïç—¿½&=½É÷}Jòïûx”ß·¹ª¾ïƒ ¿Ç#æi}¡îKK{Tþ† ÷7òId¢.r~W"lüƒ{C³õIûb]¨Í/ý“ì£ £z’öà¸@GaÒ÷zBø;èùH¾OÙo¿O­—ß¾egÙÅZB£îUØ-Gïþ%ž= TzÂ\¢´[„ Òïqòã;–Q~dl -V‚ô^“æ&I=I.1×j|Ÿî™V÷È,L´N—gµ<•'ÍE:O‹àû¤\¢ …Öä{>£ÛïÙ†¦ß³MÈ¿gcP~Ïγúž½ü|óŽÚ%RæDòòÃÞ½%×ý ûÊ”>LÞ­›E¸@Ûo÷ªü­>T ’ï“çå÷©mò[ry\«ŸÚ_èyoÔ= ûÄq±ç­…I|AeQÕ^禩(£$ü¸Ôèü%N/Ôjû‘\ ]jA|k-ëD¨³É÷¬§ò;ä¿*õtûz¡FÊ{äGqÉBCSú‘\¬ñj0ãK GêÇqÙ)tÃRù±\ ±j<Ÿþ¦ ~R’ïW'ÓïW Ëï× T߯ÂËoTÕ+óR‹ÞŒœBOv®‚SæmzûÉ'KIs5-ýDsš©9Aó9ù¶y+¿M®Ú8{ýmÇ÷gòµKy]é˺xn4R¾À“Ó¤Ÿ,%Í6—é§:;‰¦mþÔ])Ç–úIv!}ÖV£I|±~Ë:®Ì¥Üh.¤ÌÙ^ÏUòmk´üFå™o þÖJ‰žÏS›ê%Ú tr>Ùb»ÍÒ\p¦ØJžMWÿžkÿ”ty>QÞÆA'¸P•XO¿Š”|»ÊS~»¢“ߦÐÒ ŒVÎhê§Êtšä”æö|zioÒ3m9û±¹SšgÌõÓænëT¢Km]Ú‰øÎožR Ÿe`núÒzé)âmúüž¡Å7VÑ$µÞ¹“o÷äl¿]Û ¿M5a?\Ø×]¨.Ìgø)oýRå<·7LéÄÞˆæ"=Áì wâ\‹êƒÔÓÅÔŸ„(#™ÌåÌ©ïSg;8Hw¹Ò›?òl R®¼RfõÏ;%ÍÜΞù%ËÛ M[ò­åí·nFwßúM¿uû”릡üÖeõ­› ùZîó~èÙ§ÿ"§ëNI'ç“eoÝçNxõem×çÎvõälÑ= 4ùv…X~»¢“ߢÐ*q(žù÷P­ìÙ¢ëR¾ÀÓØ$Ÿ,%ÍþD6 —K ³>•M¢‹EÌùdœ|ÛB-¿mQÊoSˆRÄU²gN­ìÙb<¥|¬÷EÅ›p£¹ró—u¼“¼É÷….ÐJ5ÉRÒíw¨™Ó=É.¤ÏÚX5‰/&ÊÙXµ<ù¶e+¿U®ÖÇò‡R]ÈU›îEx²ðâ=žh‚Fð|š¶%gMµ‘\H—{0cÓ.’ent’KÕ˜·mð¬ÄÉ·¬¸å·,ByáÂó¹ó×+•½KÚçÒT/õçõÅÛSýÔ'w¨¶iì/“1ϼ92÷ÅãžæèsÆÿÅ}$l¤8=}îçì·ºæ“_üTØ%ÄW}Ί+ÙFÍÔ®ŠË=WJVÌÐâ¤3›F!ÙrÍh¹“ñûLVº”ÐònCjËŸ‘Éfá+¢ÑXkœŒÇ7«ÀÄ&ß­ê'iï’åJ®Qs'å}':àÌýèýdëâq%g´ÜÉ<Ç[©­¹d<¾Ý%5ù~Ï49¿/øÀ©Î}FÇ à÷ŸË@x Æ„ç“Y•!ÉLÆfýÄ^c¾ÇâÕÆþÂ=gzá¾%»p·ò|á õz‰òm[ÜùsûÓñr÷/ØW‚‡‚SЮxšO‹/ÇtFiyN gGà³i/ÎØÓ÷øb°wšësIø|4Ø?¥™ÏOS]ü*šæèËÁ½—¿eèV2“‚ß׃ý“q}É«—ÞℽSš)$ûÊÅa˜w2ÂÌ6;ê %bUB<éôÝ)š“û8ßd‚ËÜHs.Ý'®äÜ),ή½Ø»ð›óz§’.¤²<< MÊëÍÞ‰¸¿ÈÛKnyríV6—‚×”×?ׄwœÞâ–+–Üh£ušš|âMNë9Óóýž™w‚w:¾_†æ«‰ÀÇ¡½ýéû®Íû¤2¿&îJoy=ž#MAÿR2“Q~Oyqø½(îÎDœª‰©²ç÷¢¼³´i,¯k/©‡n¥’\\º\Ÿ*û.”/I‹©ôòÅ ‹ªŽ¬Ø¶ $]T+Lt——Ÿ—t÷SQÏ%ç%åôŒ²ÇTŠ ï·´¼$<³g“ðXN^ÒÏ\ª~KÈ‹ÒÎ¥c›F³°ºxÅáb"}¡¹T–—oS™jyö¥[ÕŒÇùNöDÅTß{I8¨•ÇjZCÄDY`^Jb~a¹I YT^Ll~1¹IÍo!y1×r“B&D`KêRE–¤õç—¢O©±Éìò³M+¼0Üåàµ@º(íЭâä)’Çu(õIg’Ʊ ìãÍÅÅÜEÑÑ «ë·†»¤íZ»íë{®Ûú%3»Z:NÑs­–'UŸõÙÅ”œºæ6}õ¼‡Ž7†R®”dðô±êkÔßqOµ~㞲঑P—z>$ßJ|ZÜñÄ!òåTyÛˆ&ÝóMÅ)ñ²*%wâårº*Á4¿D†÷„!.Tñü+Ü…ÏØt]°) ÀÊ¿ùcY^ü™¨Ä“xeï,ŒªOsìNž£k€¸; °Øþ·Éçâ…9éâr²¬OÛ˜àüƒÖÂðú_ôÎÜðõSEü^ ã} žSñÂþàkQŸ‡Î™8ÇcpÕ8“ìl…$ÆVßziz•ôj›/‚ÏÑOäö]Ÿ >NÜÒ‹G |¤'‡ šöÈgÆŒÐèÂɬ9­x¨âÿÜàÓDª4Ý †ZÁs²smÜÒYÇÉÓ®*Ž9I|=ÔZ¼ZhVÇFNÅ<.:¯9¹2Èÿ¦ ááÞ±Ï[s‚ÉPÆë}ˆY-ÇÑ æä†ç÷Rœְ|/®™“Ùd–úˆ9•ý@Åë}€Ù+ØÜR‹½¥ŸžÏ‰ÿÙó®SÚ>Gü糑ŒÏ™þY-ÇI~ÿCüsªÎ#2þ§ögebE®ñs`1Pò½nuù¥îtØ•Åù×qf‡*~ï  õÏÿÿœòÜá}ìÜþ¬úÜi}ìÀû¬üÜ1wè„û9õ9vÏ;Gf¥7ŒøiŸÓ¬‡B• =U&®/DíÜŸ¹Þù±qºqzÍçÎëÎÌð99™åIÔ¬ôXH;“iÒÑOÁÃØwÁC¸÷Á#­ß‚ç;‚{¹OÁÝÇcp{O$×<Ó‘„o,.‚ÇÎÛàaó>xÈœlŸ¸fâYðHöÀ8Ò,‚…5Gx îüžC›v›A«cfrxº[Q‰<«¸,E¾I!ßöÜÊrÚ ]Û¿|ó¹ÕøÏ7Ì¿¿ù¢þ=­S![‚ÕÕª*âÍ!.GÉÛ¿|ûîþîîæÝãíýÇõ£ÿ6Lô*jcÛ˪øS=Îo®~ø·.…D ³í#¾:ˆj'V•øë˜Vâ æ€#ÓzÄwÌÓúõ­jê*]+?ùnuˆS5¨R“‰MOl”§ˆL*Ñ •Ïý?ÔÅó#o^‹cõæÓg©ü!>Äùñ‹Ô¿Vq’Ǽ^ŵÅ«LM)Žå˜¿xkÞªà·çæ\ÈÈ D*Øþ²Q'5‘ÿß«mœÔre+Š?ö0ΟöïÈÄ5Ó2Í·±† ê0ˆ0‰Õ?U´¬tÄz³ÚXB–6‰R²uŠâÂÙ+’Ws_²šDy3ª¨Þš–^µ‘¼A”7žŠ‚ñ„T šî1ì¿›Ô‹×þ¨s þØBÔ(Dƒ—y…ÖÒ.ÂQ^AuRФ5ÚÜ¢üÑLÔ°ëï;ª±Á*-W•¾Câ¤nÚDiYŒ_`â.ÄŸQ¼©’¬8nô—wc3fÛú3ñ^¼Ãx°Í%޶ûóát¨ý%M‡¦óú¢ê'>¤xÕpzêÎJ‚•¡M­Ž8ˆ*÷61 ¡Ùz¥þ‚ ¢¼ÙTT¤þáåÄ8ô‡Ì)5P'G©£8ˆ®:1 ¡Ò§JZ!OC½)M(¡ m’”¢žD‚¬pqÛI”$@„íI¼¢d§o.½gŽPDoâ:¦ÕFg´7kM¨“('È<.徨ièŒöæl£ Ø%Ly®]Á84ütwÉRq©¤dïHy:Šó†TqxNêÄ|4„ê¹ÈhOÑ8ЛPž¥ˆGq%\Ä:1 ¢*“ÕfŸ”+»yB,î3"þäei‘¨ÙÆ!Tƒ©JÌkàUeè!%ÏEM¯Fã`ˆZ«N–Z]F±01©zèD‰¬DL”P×A5Á1Ûxb}h§V‰i8T1š¤éÐt^_TyµZ“'Œrä(¯"´ÀÖœXÓ¬Näf³Ò§—ùlàÛ&ðí(ð c{ºÇF*Ð~Gä|ŽóD4iêCÌ^ÛfèyÄU±6ÌêÅmµ±²ö›” âä²ö˜ž; )€8¬e!Så$ÆI8†{ É¥ýC0ó0 mqΪ&QV5‰±Bë€|ÍUC^ÇõQ8'Á­ Žl0È|¬ R³5ˆHUÜ4­Ó]Z®byX•E–&øã5#àmT6"+€e²MÞs,æD÷‡9©}Æ`Nà]}‚Ç£à*žŸÉ“½¥„6m @Ÿb1àä°Yɽ˜|Vì gâ§B"›Š'Uq8ÄùÎÂaÀgãÀ¬+T~ï–VL{a¢[8b1%”uuLj5Ä#´³Îpˆ¸ ‡[ݤ(_ ¥_¾о[Ô¤òY˜³U>Ë1c¶jqfÌ&ŸMûWÊA@hã°j¹k]›á<ÆùC6qXNª ãŽ‚xÜQ; žz¾âZì^QÀ6EìÒó…Üê÷·|NIN0‡‘èÖÞð¼p*rŒš&5üÔô‚@>/”g…òœÀÏHù¤ê’hÿ‡tÆÀ*>:Åcð"† üã©b°â_KõOpfÂ<†eÝ6N3˜¯äO§ƒ@6Q'{®Ðé(Ò;“ºf¼_&ÍZHÓ|ž¢#vY±&å]/cÔh¦-½ „°lÓJÖ«­¾f‡ãX„TÅF&ÌÌJÂg`ª0t„³‹ë½ÿÛJ#NG°?­ ¦¬QìD.”É¢¢Ì Ás Ïw¢^+¼ÓÆ!¤µþÌ š±µ2Ea<…Aˆ* $L x)-EÁÌÁÏ5>çˆæÔèú•ÂIƒ¤BxfϦ¦ïÇZu—dyaº¢ýqÍîŸeÖö‚.›º‰´wIß²4É–i®_™Æ»(W4Hm£ÑK‡êËà:< Ä`u V“ÓCYT*‹š›¥`\w¼?µ?ÝlE¯ Âxz CëXpË'I%îÃÈ&dΓì¸!dð  µq4HZU˜㸄ÊÐ$K¬ Žhœ: >˜®‹JÝ Æ¡M·2oÄW½»R‹ƒ„çd®h„ÚDG&›—¥æ½1¸§„! )Ü;ë¤ðìL ™˜¢Y×Yµý"¥Üç4ðö‚ÐN4RÖ±ú3áQÈM øˆÑ-Ú#…?JÊÂîø'q²rqçØÆE6=OH}cag@ê8tç)/^róDàurëkbí²XÍÔw·Æaò0 ôGµè”AG´LB1Vʇ?ïý(Œ|ÞÍD§“5N‚ûŒY¡¹Õèæo?ÀQ$@©#wžE=ˆƒîÿÀF³åh£ S¿N ?,½ ®Ž±ä Æ,]Zps>Ž(m$Ú¤«§KŸ=B—A˜?¤ Ù"º dæ8ÒŸ³‰D3³T?ïq¯ÂíÜDSv+Ú„©ÀTT²ŠéS±’rOj@gl+Ð\ë 6§íËð£6 Dx›+¡Ç­Œ’RNQ¡Š«¹J¥;pú£x [I@+ d% †ŸˆèAhà‰ˆ²x•9¸Œ’G”]$tdº”UIkz†¨ Ä›š*Î7Åa•ì }%Zî®hbÙh¬&Tñ üøœbÄìñ©Äº(ð]ÝA€gÂPÂ2‹A@ìÇ!Œ&„,¤7‡qdyÀß@¬Žy,W½\ù!ö¢@5¹ƒþ,žLª´$íáŽ#ý1m$¼>Ü$ˆ–ö †„ÊZŠ¿Žærr´‰”M Ö0¶—›Ò¦®h„ØÞ‹J˜V´ S©¨ ¤½@9D0í½ 8§~T’@û‘©‰„Q xúQ"z€GÍþÀf`í¡¥ÄÂ9Ö‹BÐô°˱ìX ´àé(¸ @] Mÿõs„gá)ÀSA`áOpÁ¡ÎQqØ]àô$áìbÁnú¸n¾S…ô8ÂmBÑBß„bï‚ÂMý«¬Å?ä?Œm˜¯ò9Í §}G¦ Ä8•³’´³8 ôçlqÎ,®ñÑø(ãÔØcÞ%GÉÏ^ ËÏb'ÌËp~Î&ÌÏâQ&´Ã8„òÁ“YýÕ-ÂÔ @ԯɀ{OÇ<®’}úŒ×Ëq¤?g‰ÕÌcn¾9 WÌa‚i¿q UËc•â9Y¥xV)˜{U†ç\ƒ€e`Ž© 8že§ Ma™öW´ƒ€£@Æ6ËCs8–ÀHâÙ^âT¿žXõ&MpqÏkø“k ýUùÞ$ « ™žŒŒq¦yu MmÇ‘©ŽÄ§·¯1­Æùcê8¸=à"?ÅpÇVÐ:‘€Ûá.z»`.jûaó’,]¡wIuÑo§ÑËÜ]t¤¢±{¥ÆØæš(*u/‡67M˜KÕl "r?%6±(p{ÅŒù›|‹ðŽBÜözš6U_Z‘ë³ïÞk"'ÖA BjýÖFNœûº.ã2…:†ì4!n¢ý;ˆv–®Ñ•Úõ$¶Áæ<.ãì@dž#Ì6˜Ä,êÕ:Va¡™˜CÌ¢Žl0ÚPèdw¢&ïDM¤Ýù^^=DMóZT[äÀÅxbwñøìÇ`~‡j!û1ÐÅU¸‹«pW.Òü)Þí¨Ñ0»&ag›2<û]"° %X#ÀA7…¶Øí°#àA4Ìl£)Ø%¹¤—TÚ#µ':E¬GRO¤7{ÓdUÇšú:$Px+ ’ ³ÿFåïÃä&˜Â ­v‰¡5Ï!¯ÿÊçö9‹s"m/¥Õ¡$ÚjK…­¶TÖjK@5—å’ל ¸¹v—¶žÐKž2½™DÉ “0yÂ0Ц`Ó&&áªL°OÑlMÀ~)ª§U³æE«(_+´Kgh…)õùin€£9p NþJÈÀ†Æ­€8hˆMM@{há$xÂcÛ%Ý,}‘°›Xs›®/p-²œ”Ƀ@Õúe¬ÞføúCœøw5oOËd&"RRÕ(–EÇz_Téßb½4Ó°¹‚½9»`ÿ×g,sbo6T­ê¨D—À‘ >¯àKot‹«º;­à{¦±à<¼!ö?Þz·<öch6£|Éì ìÚ¦•xQ°‚Žã|»8¤ZnS´POþ`P±ê;‚àRù‚é ¬LÅ1GÃ~Œ/™‰AʱŒ‘{ç-X?ÆÌÄ@`UaÊê‹%\¬îhoXm.!”XA· Û{©ØÃhÛÞBaKý‚l&€ <ŽóEíâ*!õ"ǯ0b?ÊÐDAxOiY¾Âe> ó4a`)¿æÉ¾*r5A3qéÍyŠ„2óU&uSö‚üuÂV§QÁå<Œò¥3Q¾¥|¬ÓLŽ´˜8Âq‡e±æ5ÏMºÝ‚ã8_Hóv¨ŽC õÌXu\{ïÓ£–q拨'Ò:Ìï©%4·¡®Š-H8 ó%4aQ±EëÂä… Ga¾„ua²P"„Çr£ß ÞX¶ÓH_N ¼³lQŸã,Ý ïóXÎQ˜/d†df—–“£0˜Ð+_Tý-^¤þïJ¯}¤ù^Ti­¿îÛh¼×Xfo4ôÍŠJOƒf„ O†!QÕé6Mt ˺¨hù=§‚è©DF…`<›;0žÌ #çr‡ÀÀwI‡´À·I‡¨¾ß'ísnr©·4ÏÑôi'á³ l8¼8Ä&¿òºÒ?ZÑ Ì¨€>ŒJtR!Û9ˆÃZßê\Âæ°3Q!Ù9©Ðíx‡ieBC• S&8¤ÈŸS5­;PŸÕi<Ý‹Çá·"®Ä^h‹A7±`äeó-ò²ùÕûeó!'±[„¾%8ä¤tˆè‡Ùú¨èÇÙú´ÐÚÀö[\aíñŒhÁ~ß+ 5ƾFæ0@§FQáïNõiáoOõ±ïOõ™‹Rÿ[œµr3"˜‡V„Þî/9q(Õ©_rÊ ½ñ¹‹ÞúÜÇ…n~×{"m½'¢Ö{'rÐyÀ‰spzrpžîÎ%ÑŽÃAæÓý»09xkŸ¼µOŒ\Ê:¤Ý­ «¿†¼ƒ`”x\6b›”ŒÜ‹…‰u,Ü^™æÛ‚DíÀÐÛ«'µ?=„ÞÇÄ®º ÂêH *µ£7oÄ–ÜNÛZû_(Ög…/ëób‹™¡K»ÆÌÐÅ]c挴ìo÷]$ y‹7±`àʤ,pmÒÔ÷ꤤ$Ò¡·v˜’2D7ÉUén_ÓiûáfŽ“Ã×ëô¹á+vúÔØ5;æ}hµw òšÐÚ*UÍô¢?Ø=¼æ]WvÁD¾U‘o‘gXMd¤"›=¿6AEQ,ßÛN8¾W œ€¼î=è!íÊU¼ÙTBÊÕVÕ웋öCÝ•QÙh{—ë8CqQÞ˜6 ¹@ _ï]×÷fë‰ÈoµOå÷þPÊï}¡>“ÇûA'$¡ï¢€z?ï…£Þ¦+z#;íJol›„)°D o|'QÞp`#l jˆÏ*øcÓäo”‘2Ø8·  pU’¥ ד ‘šŸ÷æiõý`ðžcæö 6)´™D|Xo¢‚{”aŒ7ܳx~¾gHæùÕž!šÏÇz†lË/·±–_h-¼Ä:„nR· ñ|ošá”dPI&ÅÊ»ôk‹Ýö5Ä®ùš–!Ä2Ìä«€L¾ Èä+j&_…dòUH&_‘39NÊjg¸?· "§àR1°]PŽî‚2tGÎOßËóF¼¾·æ@½®Ëê âhCói¨?©¾[Ž08^È'IÄap“ŸÄÉ)¸FÌ÷º¾›ï=}#<¯ ú†„…,·…î÷&ÖáÔB×±Ï?R€»(ˆóùGwE»‚𰋇ØCTàªÀy`B,C±*ê{¯áÖóBÃ¥ÏM†C<¿­Ð!œß.èÍctæw[áÌïšÂ!˜Çý„S0I!“4¬²y]š8"ó¹-qĵxM≠^ð€;°…ÒäŒ4+çc´.˜Öó:\êúu퀴n@^3 ¯ÐÖ ¨ëÔ5Òúym€¼.@[XX  ® kèüšûÓçýô9?q¾O˜ëæùèŸ8¿'Îí)óú€9}À|ž:—Gçñèš¿æî„y;:g˜¯ÌÕ©ót|ŽŽÏÏÁ¹9>/Ççäà|œ:§ÎÃIspòü›<÷¦Í»ñ97>ßçÚè<cCóktnΫ¡95<Ÿ†çÒØ<œCƒóçå¹óËWó«ÖïÇ­âÍj_$ÝÉŽDß¹ã1Îxùj~-kœa~ùj~(ÞDJ£;*b5Œ9B§3›céAà="½9ÝŽX(Óå»·†È]„7b™.ܸ5B*3}›‘×§ƒGhãHÄ.ɽ¤‘×i¬têïúÈâXùÌרçU|-œT"£Y¢²24³~-²»M ÖѶøZÚB ‚|!mÂæy…ÅÍóòŠ™Ïµ0}mÈÕ ñÅÒ!Uz å È—ÌAl¹´×÷QÊÔìÍÚã¥ìóUðçòçÀGl ßwóÀÙ7ŒƒéH™FëvfÂqd¼£™$Ý\<h` BöÑ\e Øù³XÓFÞ“@_hHcëä²ø˜û\?á"œ6æLáv1¦Xû¯“ò]|Béÿ²ø„ÔóUñ -ar2 C(Ñiˆ¡ñú1¾l&K‘K´Œ‡QÞp6 Á;ˆ:Ùz!¾`:¡Ê‹æBZ| çõ¥ì‡’i‰õ9 ?å1/ª]œ§S²Ýê‹ÝEh˪øS$h›4Œòel¢(x¤‘‰3…ÅÇ!•HDúŒÂ£|)›(¯È`¶"ƒÁŠ ¢’É^èÉFa¾tm‰°ªôÿcËuÎ`˜Ö#‹xRÀ‹¸½o>-ØJQ×i¾“0٠̟Ά!„µˆ ]/Ä—L‡@TÅ“@»”~Œ7—ŽAÀüvÍ\~g,½³•þí6+^B¦ ç4|¹[ òÄÁ ‘7=¡0KZˆä‹4vGÃðyq—ph ­Ožuéïc%ÔÿŸþÎþÕª:¬âMK©7ž72êÀ·}­· ZgLéÀ¨¯ÕüUuˆNZ>÷4údòÆd+ÀQsdY¥y’–f»*¸èÎiR½Ž5ƒ‹rÉì™Ù.Ýé“d(Ó¡ÑÕ“ -µ'l#ÔAü±ÜUñF°”‡C‹lªÑ /gý½û"g1èÐ"l´B –åNõ/ñk˜·± ÑV'ä¨=#!Er¬ÒúÕn† ‡2Ù·S9¼pÝÀÉ…‹d@ˆ÷¶Ãѧþ8 F츧^Ð}8FŸŒéîŽuq0u#NóqîðÒ<'It;– -Ó "¯a^¯A6eg‚§P'RtƒFŠ¡-1Ot;ÏqªèÓLµÏRp<‡ó‚D“CÁÐâáqZåtI7¨³M+5äÊ8æÉsrD›}¹Ð¢ ñ™äóG¶¦¿P~,ÍŸá…8+G39 ,Ä!ŸI>ÖÊB ƒ_¹ÊpªbѪ±”`ÆæÍ\€¯:Ùs ÔBT_'!º¯d“‹|S)Ǩ{FŒæ¯'X'ûX\ö¸œ…˜*«Â|ž†£ÜZdsVx©µPLÞ˜lÑy§¹¨ºÓíá%wN’èt,ZŽD^ü^ÃmVb—ʺze,\—d áV’«p;D^ü^ùlVâôŠ9Ϩ3eCO»ôûàË‘‹e_>¼ˆõ¾(ž.P5ÊL9Ñ(sW‰ø"¹p‘ ð.…ܬÙV±ÏR=ƒËzˆÇi•Ó%Ùà&®ã,~².*†ÁÚ¬Íæ@.°(‡h|&ùüÑ­©¾x=ŽÒ­E´×i…–Ý ŠÉ“­Gϵ*ve£È\ZTo­Vp‘uPLÞ˜l18Š«Cw®“±ôfdC÷dÙÊ4®êTßöÊkªîÝj²oÞƒ¾€ý©2W&4o]_(+.’ ÉïÉQuÙ‡ôïXëÀŒl¨ÿž,[é÷QùÍóûf°,òç´*r®qÖ‚l¨ùž,[¡÷QùÍóûf°ÌµyN1Ô2˶æÕ-«QÝËšŒëÒ uܽÊU¸þ/ábž™í28UÍ@}Œ³CœìÓœµ ç•Cý•Ù }|‘\¸HðyÏE­_ª»@5p(3åB£Ì] Zà‹äÂE2€î=—•HŠjÃrÔsNè¶§ZÄ}06‡læB|ý]°´ÝS!²/-^^‡Ã‡²‘í17— /'͈ѬõÄ «ÅeËÙÔ.VÇq‚Ã!D³ÕV‹Ãa‰ÃM¨¦%¦9µ s J06‡læX|±½~» î—ç…\&·mnÇd³ûMª"vû:ÉŽ²6w¥–ò9Ešá±b`ùNYݲ%{djw™\Ž–6¼‰ o[UŸ»«Ïñ{Üd}~é^ësäE­&·)ÇŽ¡SŠè¨• ­Z1Oáv¬©V 5+dp\³TÅ‘Ù˜Ò ¯„†Áƒ•@‰ú±ãATáW]Ìë…øèÑÍ>‰×çø˜1¬Ì¹”h[¥ÀÚØ±¸b1ìEý—¯¤FbaÞÔ™ÊKcqÙãrlJФŒOÙT/̤Õc*ÁŽÑ'£E²»¬ˆ7ë8Ó/p1L1çÔhûj…8csÈf.ÀWòÄQlÉGq%OÁÅ”<…; 6À¿‹ó8{­ÓD_Õù$˘cj¶(Kõê .A*¿y~ßdË%¶›M*Å1šÑžX`±ö±¸ìq9 4¥ô1Ý‚xF0Äf'ÈRˆ'-¹cí)gõè>ùzÆ!£OF‹îŽ_˜ÈP]ƒ¿&`QÂÍ„û³PÇ댫d&Z¶ŒGY(&oL¶ÈޤHŽUZ¿2 Qfåhre7Dã3Éç/ÀšYôZ%G º´¨öZ­à²ë ˜¼1Ùbpô×Q“­¾V¨7£ÅaPÆ’á ýy½P£‡Ùº(Ó„Éh_+Ô¤Ñb3(k™Ti<²\Öe1Þ× È„<.å¾›Dˆö‘/œÁXO€ñýâ:óÅuØ‹å”ûñ.ös]¼º8Orqáb;»Åxh‹ñ´×1-žóY<³Ndé/“Æ;Áö½ßy=¢Å^hÙ á}2Z u·ÎŠ5‡µžN/­`ê¸Î9 Nuˆ¦ŒNh=´0 ~¬„¸8m9 È©Föv‡V]ÅÛmšØWÂZ}§ÍàPŠËÈ7e‘rô˺¾[]Ö"î`/àÿÖ™\·oû3—¼C–Ã}{›g¹sÜžpN‘Ó7Ù2÷Gó¸?•Çú<ÆÏâ1~ ëxCñµ9ÏgH<„9œw¬¥|½D\Â=“q¦/Z,ˆrXçøÚÅPQ&q&X^&ZÖåÈV÷2™pÿ°ÎìúbíßÙ8sä2íáÿ’YsÉ\aÎ4—µ¾õùRõťϙ1­þEjKÁ|¹`–„æÛÇ„¹?!Ìúá`ÆÏ3~$˜ëÓÀC]\‹—ø•ÑäP‘Ãk£Èe¹¢Jów%vÈr˜odY«t‹Êožß7Ýòa'ODz9B^Ú³zD»½ÐòÂ1úd´Hv÷"Ö,ZžêÐ|YÀ"k`ü0X t!³ÀÃ2™7Zæ¼£d/’§•Y'þá°;Ôö/ìRtœ$ú•ô,~Õj'õòQÄžÜ[-÷ÖGnÞ¡‰ŽšUl%ä"+¹ÈÈ;5'$ØŒNÔ‚|šŒ6¹ rY#›Ú²f(´‰ Í’– -&ƒì%Ø¿®Ë¸L‰ì6˜ÈݤŒ3ë?Õ1Ô#‡Í‹ ­KÕ1_Ù}î Wš'%Yº#©š ŸEªsv†4/ÝHË'† 7‘¡ÙÑ2´Ê¦†]ê¿<£…%-Ä[iÿ>NpAñXã1dG¿ÈT\)º1-ÅQX‰Å‹£0/G¾’:ò•Ô‘©¤Ž%uä(©chIIûƒÁv†:tGÕÔf³Rƒª•χqçMD(v6›H‰D‹ŸÄ=ëE¿°J„¾Z»­ÙšÕ#:Ôz‘Õkt³y\‡>ZS¢1¥ôp5WäUq¾ ogÅhæÌ…{F,¬1`1¹còEutHs{P>.œ#¹ë‰–Z‹É“/¢£²ÌÒÄ^ê.ÓZEŵØÕkp z S\Ÿ„#-µÂa%;‹{¸€w&×Ü…Î]Ö¬Elï8à¶D˜…0x"v]— ³.Š-¸-k^eʲ•çA÷YKN‚§F'ò9â¾hJÛú%®ÄªŒ“§8d+lA1Àh«5ŠDˇ mÆSJ"¨Y8³:MbɼMë#KqÛÊ2nÝΡ²{gwMóÛ­7±S‡à®[¶ )D ÜILEˆvÂ:ˆöUËÐòqÈPü4ok•Žç{¨‹^‚]ÐøÛ®'°D\2/m·R"ÁÝspoÖùšOfÊ}ÿ@€ÂoÈüjF†ìŒHÔŒ"%ïèW R5¨>–›8dGÖ©C°£ßQP:‘Õ 0E~íbNƒh†öÂEÑ~®ae¾6ØpÍ‹¬µb‘ùxqH#6ÄbrÇä‹êÈܿڨ_U™„—ۼɡ‘‹”\¤äËnˆÆæ‘Í]˜/–ÕÙy±᫵C,&wL¾Â¥É¡üß¹Jm*àΈ±”šÅbrÇä+Üg¡q–[‘1Yã1f§¨÷á¯΋˜3b,Ef±˜Ü1ù sÄ8a‹pCXÆ ,ãð±‡Lj¶öp¢àLk±–â±Æc*ÌN°×X*À˜’b),Äâ‹ÅQ˜—ㆭ¤ÆR¾”KIi$_,ލ^$Ç — É >h¡/é ?lìP!ù©CkúU ³"D3ÄË@ZŒ}ñÂöîø¼Å›ãy‹Ü`1˜բ:ä8a ²b'}õ$¨v´Dˆ –]Ð%ª§ðýP49²uœf¡…¶ K5=9bÒȆ䀹/(ÌmO‚êÌ\7èB2Ø >ÈÅ‘Jõ³í5Á¡Cy5Š9£µ <†`\¹¬ÑLÕñ.´ÀÆ+J"¨h4B9‘y_‰¸ÿNDh1œÓ£83z½W-‚ h Çg“Ï`µ4ßè·ŸÃï9«G·Ùéq”ã ŽÏ&ŸÁ k,÷þÍjÑí…ßû7€â±Æc*ÈNûå9žs©Ñíµß°c(5ßOöùä²jªn&Uų¨ªtÃbpF3Èl£µšaÆ9ÎÏIÑmŸ:î#±øbqDô’‹h¬Aq¢4 EC„Yƒ§asþwh5 ;M®÷hT“n_ƒ_‡rÉìY™°—¡¾rõ°®wÑ Ü÷ÉWY‹ê©äÍm‚¶:^乎3Ø—Õ“æ5¦çSÍ‹-_sí¹Xòöb„"+dïÖ!< Ž(Uï¥~o Hã‹E!З(£Nˆ0ÞhpHH¼8›,ã|µ‘´í«s ¹Öˆ”ÞÈô!d•kPŒ( .#ú,Cñœ ³¨OLQ ît:Õž¤´ïsbÏiøº:qµG2íK $#Tx*0y8¬’Jltcä®`oÜÃ!:C̺ItŠð¦«ü6€d¬¼óMÆoO?½ˆ"c…’ãˆô&‘ñ Ì”A„˜96‰3I ʨDŠ|ëKÔü¸/M«îERq¾³håÍe£ Œò¼ÓgDçwyÏÎã–ž›çu<4Ï{wd>ì À 4à 4³ŠÆ#a yg^åñêVu¸šÃU«ÞhÕF«5T¥¡ê UeÿjŒUa¬úzV]³Ã&Óݾîývµ.ŠzUTúÕrh–|’xë¡¶dã$Ñÿ­V‹Œ0_vÛLÉéj—`›sj4›JítGL Í|[„9; Í(:^—å3‘¡yQ2Á%b¶Pâ2 ò3¡¹1;3J„îE.P?ÙÐ2¡Û‘SŠæËJ!K…nwÏiUõ„TlÒ˜£ž¤9m##ˆÔÌBšùfwÆÂ·/Ro‹ü…4­S À ÒLÞ$k}Þ±X>46À›gW®vY±ö^p1Lã /®]Ù „ ƒÂh<1°‘¹FÁFæ™[$`dn‰€‘¹ò™kdd®q‘¹¦ñ™k˜Ó)2 qŒÔép &)d’‚æŸi…\‘[óÙ`/Vr«Þ$K %ðATp+? ò%ÃZ{“ ¥Åwz3Â-›ˆ“Hž ¤-çi ã³@Ú‘À}Ò4Ê› ë›lB`ÿ4 ò‡Cú) ÚWc|ɰ>K%Bê·q¾€xÿÕOLR)%ÊÌìGr~:B}Y³i¹ÚORàÊ^,{¯èÙ{EÏÞ+bö^dïU@ö^Q³7NÊdg´7´ŠÁ&°!ª]H^îB²rGÍÉ4Šwh:Œò¦´Qž~Ϙ4ˆœFzcê÷’ña¤I^üÎh™Xüß°ªb·Ó‡áA°A”7›Bðô =†vŠðÅÒË÷’yœ\ýÜѾ¨æÕqZõÓ¡Ï?hŸ$@>ÿ³]QØ®(lW[‰?%þh”àsÑ3¤s„úRöߦ£ÒÊ\À =,ÐK)òA‡èýAË|{§%¾»Órù~s§¥2çJ1ª^ˆ/•9… RI–$pAÌÿ”i‡å}Ê´ƒò;eª‘ˆsk⼚2§¦Î§©siÒ<š8‡&Ο)sgê¼™:g&Í—éseú<™8GçÇàÜ™“çÄäù0m.ŒÏƒñ908ÿ¥Í}ió^œ—>ߥÏu‰ó\pŽ Îo‘¹->¯Åç´à|›ËbóX` OáI 6'Xàä ™X'UÄ e2EHQ'Q¤ p¢`àC >â¡ ° ;Þa¸°Ã 8Ú¡¨Àƒ <Ö¡˜C ‰0¿WX„é½BCg÷}$&†éÃ`ú˜8ô ô† wÉ]xˆ n±amÀ€6`(KÄR‡¯Ô+iÈ2X ¦’¨”¡)eP G)C>Ê`æ… ðB†väAa8GÈ¡C8Âà0lClô¡}Fžf„!:ƒ‡aðÌwèuUü”6ÿYÅ›Cê{„üuD.Úö?&’€š‰ª¦¡ö"AT‰£6[ ª†”Yì}ökíÖÀð›‹VƒdD9`µM3ÕÀúwˆ+NØŒV‰:ÜÎF<§ ­8¡¸ Åi·i%^bõ3sm]êß«Ñçu0'¨ÕÁM©žº:JóM‹J<7Ÿ· ¸:#„Ùê„¢“îëg/qE«[ÃXŒ¾‰¥çñNôs‰îŽég…P+­¶?8òeöœÚºJsä’½˜é{+ArQ¡Œš˜¨Ð/EM¼—ù¡¤ñŸAfHà¤.â‘WðhËwÁfpÖ]Ú)vðä¬ èÅÈ„-E6(ôõ#‡Éq©K>t-éŒÑOКRà‚RàjRÈR’|•YA[<„‚Ä&§%¸ÈÃ-ÚXëE¬÷EA{D‡±më,Í/5HžŽÞݦ4¿†A‹ˆÒþ²AÛfŸ”«¢4C#èt-笀/³ˆ¬ð¹3üÍŸ‚m tÜ4BMU"‹_ÊÄ™0ñÔ$^VÅsºñ>7ïb$D·Ó !¾ 1h¡ãKkb0óµNŒ«â‹e>ç‰PþZªÂÿÄBKUxQh¨d²‡äù’Ù ›™áÅy¹ånµ)qšÓxç…@fº¨„"%Y¡P_á†ÂZBÿpQ1xI…˜j¥‚Ý™ia&â-‡¿±XÃNŒÇ#2¥XôˆL0=zO7Îy<®sÁâ¯/äÍ…ø 3怈½Þ¬²«âR# Šõ&2.‚øƒÈéÌÁÏÀXƒè ¬æ‹¯µ¨ò8ãê|ÎéQ ¶z,ÝÝÝÕÿÖQ®ÿ-¤.dÏ[Iç°+±Ó3Ü$ÝT¦JT;V)ÒJ\Ö‚Ÿÿ³‚FÃZ†Þþ¸F7øÎû úU‚ÐVày¿,Y|á^ºW¼Ú!–YbM]’ýu/µã¶VŽÃ)A_ vÂzã%¹Pƒ}ñ- )=/ì’Ú„°Â…» °@ O¨Hõ~ò,5,pÀÞw^¯ºvØÛ´æV£ìu«bs#ʬx t7¡š²"!^s#¦nùœ&Õé`ÎÅÑA ý2ÚärÇÔi3N£Ý~9ºï!$G ;¯Èc:¸Õmåø*2_=¬ÆMË/ÔãÚÞ:¤¨æšÄH…¸ X'ujPýPWJO7w¤»*¦®eͨPÍ4*AvÂl„áÓ±õ<Ÿ©wHQ é…Žþš¼øèPñ‚X ¬ïvÁÝZäqŽVA/™ "°2n R¢ÙÜwÕ27^µpÞw^5TÏ¢’øjá0Ê—­‰òÁË¥ùµŠàÀš x; Z‚Sæ— BØ Ïn´lÐ'7Z6ÿÏm´l…÷¨EëÇø’™Lî‹«â‹¥C*U3Ó-š_ƒ _2äÅöµ?Äqln¨RíÀ¾ð>˦CߺC9Uh¤B#éP - ”Æè×ÿ Dèôƒì‹Æ)É ’L*!T„HЬB3È?[ /ƒè“`Èÿ[`i»ÁîD¶Xã(?´í¸¹Ã£Õyg¤7&¡Îë£yŸý³ˆý?´]ùâë…»+)…»+áÂõþ]Ç!$¹HwûuQ qêM؆¢ÅÚ%IE¥rúBbÊ3|Øò ði¼† œ[(ddn™¼‡åÉ^zgi µoÓ0/¸^˜7¡ÐoOãíÈ4Ì‹P‡¡-‰Iê9Oa¼SŒ?›ŠñC¾mh¨$ï¯Z×Ç åCü˜lˆ?Ujþ­|…¸FA~d©ù·ÒªµK¡6öôã^<êÇ!’î–ÒÓU² ܬ‚7owÏééZ_ {Y•Äñœ;Ô Z‡RFt&Iåò…Iw‡’6MuFzêHÂDÕ$ˆ¢XŒÌ‹¢ô¿ðD5 ôÇký9sYë«¶ 詘DùÚ¨¨¥æ‘*^ߺd€KWG€À•«#Jß W‡¨’„)Iˆþ¥L¸Òî~4ˆè}HI¥”TL 3¯ˆ™yEÌÌ+Jf^Q3óŠš™W¤Ì$}«Í’’>ÕfYñ/µhQD”ËfGι9ãv¤|Kó§xuÓÃ?8âO8Î’Áß³tØgãN„Ä2&}4îDJ)e$ŠˆryÃ@߯³<Ðçë,’ÿ×ë U^—«øè}“¦ÁÅxq©˜HÇ@` ˆƒØ‹b$J4 ó&kÂü ¿Æ%´$Õð£Òš&lŸ‰÷¤ ØD'À€ŒÑR7–g£fÒó4aÆ-ÃÀ%NNÁ¥0¢`¤Œ$e˜iø¦ô4ÌŸÜž¶I‘ö¨Ý¡)¾[Ý%ðøÐ÷­C6¯mÒðö4 Åö²»¤¨5´«MÝÚî’¤`Rø`0âv÷™x ˜²ñ=M<ˆ<bN²Tï ûs6þlm ž<øæ¼# ·é›Äнúi‚íÚ›¤ˆ[÷3±þ¬”M|“(q'&Ö˜²§JÜØw‚¨È¿IÞçŸDùb;þ6!|Ûß ‚lb”SÎH>`Œbüñã]"ag–e0ü€Ó%àÈÀ™xÔçÄIÄ$LŒ­®Ë¸L.05)øñÐ8̇û³:œ’&ñ’(q6Êñ‡Ùh>a&†p‡Àø¹ˆ&Ir­¥WXb]%Ÿ•˜§@C§&†IK:µ¤ƒU‚z’b.ØŸ˜t¦b’¬ ‚–AÔhV_…dõUHV_‘³ú*(«¯‚²úŠžÕôSgâtâyŒSâ$b&ȶ Ë×]X¶î蹊ÙpĬàá ›íÇL,K8ËqJ4¤BÐOuí8%N"&abløqG@ˆüЉ‘N8ý1ñs mrD  F9âŽÅ@ñS":Qü¨È( €Ä˜Á~@säŽ÷G6³jsDšè¦7ø¤Æ$ã%шÏÿ&¢£çDCÎçI”]Æøü#ðŠFxE#¼ ŸE¥?ÍE‡8ÃbN”é!`ŠåŠöçVÑÔI–N˜KA„Á*ÕSo6•þz+…qŽáVª»·á(9aìDZ<Ä× +±. |¯cæÏgÃ@Bõokÿ¯äö‡er–øƒsŠèJðÁ‘‡# vŠñS1 X—rO¨}£@± D9¥9ÅqÌÓú•@ëG˜eÔ…“ÈóÚÿVÊ w?¦6ÁfÒ)ëq$H‹Ÿ¬6 fE#ë qGÑ rMÀ®+õ(Иû¡ ° %Ð>Ž`{G¬¾×?öPÍ÷ôVæ#÷8í46Á‘ ¦3Ë hDÖŠWY ¼Ã„ & #¬E&Âÿîìä8ÒŸ³‹ÄP›l0Wq†ûCëpêlÅ$Mâ%Qbl”6‹Ô\á-ÕsãV/ÈŸMál’'It`Ëó\&ÏŠ+À-ê“¢¦ÀR1°jK9N?ðª-|x^'PâŽhŒ—Zâ-W)ˆ á€_/ACø=KJÃ() £„ƺľÔÞ#‡œu |}H[ÆR¾Õ†Ä; ƈÛ`œ»Å}ˆŒÝå>$Fnt?Õ}òs-Ô8ÀÕ¡‘%ÓR^Op†“¨áWþ.raþO |]ÂìO­ã¢&Ø›9`ë1`בºáˆî5¢ÛŒÐ#es‘²¯o)⻉øF"¸‡ˆoâ;‡à¦!}¿¾UHÜ%$o’÷iÛ‚àŽ ¸ˆìÒ·é»Ä?tÏÝîƒvúðM>|ÜÚ£ìêQ6ôོ……í^‘7®È{V´í*p§ ܤBö§ð­)|W Ü"ïE‘·¡h;Pà ¸x†¬›¡»MèF´Ç„n/¡;KЦm?‰¶•DØE¢n Q÷ŽHÛFÄ#âfeŸˆ¶EDÛ"l Ñ÷„èÛAÄ ê&uÿÝú9&RÿZmRù´Ú©é‚zŠ,M|‡Û*öí¹ø%hk~éøÈÄG6‚WC è¶âŽzè«þÆÿ¦â–s§fÝûTý&‰U3CÊç3¾ì­D¤%¹ê".2|åËšêêPdž~À“"Ïõ¿>û¯ðµœ3á¾Àº‘è‡#ä‡8¡äì(Ì—T…ÁykïÛ¬ŠõŸÂÿ¾¨+ÚŸ×DGM4‚­ß4&µ“@_Xý~2Þ>Õ;§.Ú~(HkBqÚ€Ö<  ÷j·ÛÃç?Ä/RÿZÅÉÁ÷kJmì[÷Ö{†·;ô®âì¯äàõe%'pšo "o/ÅÕ¡Z(Å+ÓÕNM¤^âW æ$Â-Ó¨‰Æ±Ë,mNåë§@|w$.Ä0SXÔˆùíPL<®ã:Ùë÷LJ}4]äÏiUä~_—šX\ÒB­¨ÑŠzZ4ƒëÕFlSõO^û3Þœ2¸-%dèŽþ:Š£2ÓW ù0 ¨…¤Øˆõ1õ9%>Ç"Ø],XÿmZ‰Á(² ¦0—i)Të ˆÔ£p”» ÇÉÍÇ>ãÝ®;Ûdêkì‹*ý;&>¿ž’˜CómÑžd4 tíóÜ%›>ŸÃ]òµøUÜ9#UöÏúpF²×ŸÏèvf”¦Z¥¨Q"Z«Ô#é·9gi¤@°Ò*P-3€ÌDú1ƒÛ„Mª ×í1ËQºc5¤FÁW±h5Ûó:Q£4Ãsæ4Êc>Q8+`8}áèO úÏE%›gu\kÝAçæ³´” j_ã yChÉÿœd€õFÒû­¢‰kñ¤?ö~”5©‹˜F#^TtÔDÃØY,ë4Y‹Ø|2óIOZ)üó2‘‘Œžõ¢ŽvÙQ„5™nćVh €ž«ÙO¡0´žß´i.Kõ¯jàYÇÕNP¦K3}'Y ÔÅÓA’—+DZ·Š¥-WêD‰Ë•£P—²\©“¤ÒA<Õãé'Zá° §Uƒ&ibM˜F¸)õA^­ÖÇäI=êÔ#±Ÿ$àÞüŸ;¹Rÿ×lž’ª%1Ü™‹Ôÿ5Û¯´FÌ…EmÒ´‚’š;”¾^7MVÛ4÷a!Ñ`ËV4²¢<Þ™Ü2ùów¤ú‡xE<µèŠõe×±å¼âæ W"ß”E Ÿ™v„zãdÔ†¢´•èD·¯­P*‡â¦'Õ¾ƒWž×¤ê'JtÜåõ¥U¡‘ t(L+w¤îÜ ñÊÞY·‰úfG(Š‹ö¼m’YºÉk¢~v_ODn§ê ‰´Å žF â%GYý2gs°‘Z­Ï !&Z¡î„$©ÂOpˆµÿœN+Ês1aðÃ`t!Ò’\ËÆ±·Š¥Õ%(±úŒBQ\J%iI¥1¢xÙš^ú£X5[K_%J-ýa(ŠK*ýlM¥1‚x©>u«/¤V§Ý Ð*C—<±F¸âIô”ºÑ%À€ Òfñ1OöÀ=]h·Ân|ïìšZHÈõ| A'´º­“ôºÏ ëu ž“uù<*ñF‚¨”‡.Kh”$@­YwŒ³¸:(áo³@iÂQrõ8&ÂÜ@_[_ÒA¼t:Ôu ±ŠŸ‘ ±D©üc”p3á>@ AwtÌ èwq˜äÛ/ÒW×\ñ}ûu[Ê:[]韫C'ñgd+LÐ~Œn&ÜhAzNìÌÅÓÝ ÁS1 ¿fg"%@âowH¨Ǭì£Ýp!u âÓ1§AvBy.ñ ä)ñHý\<ÊžRŽÖ÷¨:)íˆ}ZaèͽÝ!68¹>šRE&(¸ W“|@-Ç“è©õ$ÇOÕ:BIÈ$Ú:x7æœî£Û‹ÃU£àQÜØ½R…ŒâÜ !>JŸar„¢Ð:”J«'R!Ï„KƒÂ¯çcäg¡…xTÔú¯&Óµhε„ÉœêÇè4GeÈEÓ‡ (ž™KÅn&ÜÁÂsàèú9ptý2º~]?‡®ŸF×ÏäÑõ3ytýL]?—yX )ó°Ræ5¤ÌƒjH™Õ2§×2€¦ó‚¨/i|R}ÂëG U¸ïÖGär×öí(¼éžÆú3˨‹Ei÷“M#X½d:A‘P0OQ¢ŠBñÚÏ$Òš5w<‚Ü~_‘Ь'5kÎp :Þ¬’¦CÓyAÔ:Þ0OQ¢ŠÂñä‰O>‘å…°wñ:õI;#ƒ:èÝßNzîF(ÄÇo^%Àåa; 6ðoi·ýã¼i·„[þtb”J²%½œ¯áj°¥d Î… Ù+DãdOìgâ½qOñ„ï%N)yw8® ½¤éÐt^"êéf$Ò˜E%Š•Ó=Kø‘˜Pw4„îi$A1Ó0¡º ¿­¸ CrC|KQŸàî ˆzÊþ¼Œ¿£õàsB¤³÷SRƒuN%ÀÞ|M@‚›ùUQeš„T® ÄC#A®T=b…r+=P*R ˆ>d¦¾}0 ExIo¨$Û‹’rxŒ·Ÿ%Ås¸¹Ùœúh:ÂîæRtÒ#Ù$p–ûœÁõ÷ƒØÀÌiP™D ‡@|yXæ‡e{@†“‰É°§¹”T¬²ø°ÞÄ(«+Ø›×G6aNãÃ*­etû2«àHã-I—,‘–È RÚ†q·:±CœÇ;±¡½Á1+€`7„78LòÛxµäÍ 3‡mY Zeî!Úåy¢´}682Žˆ!uûÒäÊíV@»ÍmZõnÒ%VŠi4„n‰)•žáä|&eoUdôvcŒðê`Z[a’%Vˆq,LL© &Q"+$”ñ![mÅFT”{[çn­` ¢z•Þ¤[½ˆE¯× R)#õ¤huÞD|Î+z£<G¥C53ŽEðu,˜ÈJÄŸÒ\ÈTˆ¡ð¨ÄìKÛG6anf|q–Æèóêõåm¦Š&”@k¯&ÑöCAZ{ë0NKi ¡ -ÜÖ5Išƒi$ÈŠ6¤5ÒÚ¾¦Ñ$C…ºbAR|,š¥»}-ñ;ÈÇqÞ mYmdØU³¾ØJ àŠªAò„Gl.žD>nƒÄ¸AZg‘ÌÑÒºœ;A5ÑøN¸;B}èœ|wŒ„ôÐuÉ:W<‰žòÐÏñ8BIÈ(-ý¼ÎL8DM<ŸS‰Ü§Ûz•T…ì¾ŠÛæ\ã½Ô¼}5j‘Qk¿¹Û©‘l’žcW0l~Ûd)Ï®#&†ŸÙ6Q"+“Bò°žÑ€ÙÉ­~sõ»¢UgG¬7¸%Tæ&ѽˆ³z¿Jö"y"r;$P|+ Š Ê9 E©áç±I’Jc$àý]À?q„¢ :¡=}²²é£Kq=£V¸s°Eí!Ë™aÕ ¹é¡Ì✡ðçÔh~{j¡Ý .Þ±p“!Ey¬ û5ö8IŠ#åé‘ϳ‚¯cÁ°2àë9=·…«ïÜ…:"Ú3BÁ…hq o¢ä*¤°žãTá§™ú7)ŸÃ3r‹C¹°â¡â¼ƒÏ€M69ýrþ¡Ç9)‚ÁžTP!ö‘ pF)Ð[XÁ•U±MÃÛÍ%šµF)´ÔZ àBs… )²"¯ã4×÷SÏ<ü¤ø †•ã/°8Ï鱸å(\½Ÿ/ëê•­p‚!v[AžÂíð˜ ×¥Çâ6¨på¡›5ÓôãœÉê@.°X‡h¡…:«Æà3 @7jNZ¼š–åŒÁÞI)¨{@a…ç 3Tdϵµò^dN%’³V)°È: Ð"s …c)²¸:tß…e+½9Ñ ¿=Q¦2ícrïŒ&›s¦B¯S…œ%îP 4mÙʺä+è© aÖ"–űJA;tYÜ[]æBo`¹‹~*Ë™,Õ 9ʺ8¤‡xÇXæDƒÜ÷D™J¿ÉUô3šlÎY ]äÏiUä<ƒè%Ñ ë=Q¦BïcrúŒ&›s–BoÞbd+o‡^áæMIžR&Þ•²à•«l)·©Ì9•É^h¾‚u*ùm™ ·ä*^— a–"V A}Œ³CœìÓœ± Ïè¹ê2ú–«èçe9³€³´w¦rW—.G´×´²Vƒ–¹8d9³ ¤ä²IQmöîgµ(^{ZaE܇ ,Ö©P{aÅg^ /¹‰ Í•yÛ(°¼ JpQUüÐö˜›‰ËàÓ¦sRc=© Âê#…ØŒR ·€‚ÛoRõã»}Ý~/°ôÎêlŽõ‚ÊqV˜çä8¬+ËŠË TøŠÇ ÇŠRð RVÄ›uœéÁÏÙ¬ÁX_+¨¤Pa6'j/¨ø’§ðbKžÂ‹+y ,¦ä)¸x’§àbIžÂŠcçqöZ§‰¾øI–qøF̲(É©C4°]˜¡Eº Éæ< ÐÛ+Ò7© ~gµFÛ›×µVPÉ x¬ñ˜ ²ÃX\Œ¥ÅUX)ìá›Q ôþ ±TC–ZT «T †·/ׯM’Ó©f`ýt@†VÔó’\¶ƒª®ÑÛÄu¼Ž¥`*i§Ým+ÇQ¾KѺÔ|†è6­ÄKœeÃvÝ’$Ýp_’£pˆ,<§Èä9¼ ›‹åyŠØ!F7Ú\TÏP¬ KNµ‚†â«ü+ãíkÏ+RÌNÃÊt X°gy ‡1[ÿ:+FõÉÓ·°Š“«_8 -DÖ>õ¬ Õ*_:Ác(Tξtâ6´p™úÑ)ªEŽ>´‡ÄPˆ<ýgÏ[@Á5gÒ¼Õ–aAó¬ÁæX/¨'pa…yNŽÃj@±–…¬wÿ?mg¢å*Ž'ý'¢îLWwŸožÆGÙV%[!ì̼OÿIb1‹p:⯚3]wË⇡¥Ó©[FïØä¶¢²>Š*+ò7\ò'©©ÚM?8а“´ "Sv¢¶T8I§lU½á*"OÖ¾:šªÈ¶´à“}š6×K?q‚Ö×.\ª"NÒÛ¡JŠõ~.MnZUÎQ¼0é+;†tm'+ÓM4a‘»%àh§ cs•ßÄ·å'ïé$*ÁE YáÅd`¢"K3Å6êCQ%˜B;‡‘U’)²3R‚bJ²àì±™€N¾´ì:Vš¢K±ˆìšPRˆM©•µæšdnë 7rå&+Çu0aAšÉ!…EYè‹qÿ– Ÿá…Iùtå"˜¼(ãfrHQQÞ{í^Oåï’NÝä$,¾9´èbF20A‘%]~=éšëéZO¹ºzÊ%Õ“­£>®á}¾[y F(¸ÉIXvs iÁÅŒd`’"K×½š°_5U‡jºžÔt]¨‰úNwš&î-MÙMš¶4mÇhÂÑd]¡Éú@Ót~¦êõLÕÝ™¤ŸÓöM§®:Ñ"¯/ÜÀ•›¬ìÖÁ„xh&‡”å°‰­´÷. Õ°®¨È† ¢ڙð0‚¢é;u¹˜|˜ÏÐ¥Ú|à W‚6î**ʃ ²¢ýÙ4|²¢O´}ÁϦbö›Äc¦,ö4[ÄÉ…¾YIõº¶àþ±kì èÍBK³cdaO»ÀVÂeµ’.¦•t ­t gmb… ”,žôŽ­œ{²MYÊsÔäìÉ©Sð>o.IK×´%33¦ ËwŠ™²˜#žÉÈ…þ©Ï ç¸pƒ‹¨Ç ²‚Û›ð0HÑäÝwÛ7¨¼Ò'ö£ëàñëÐã’Á#óõ5IŒ,†´8d²ìDì\ûÍ­Lî·Åã¢ïÐø )B§ÍG ’•‘h0¢¸nÊýH}‚nºluÇ¢½ð‚é&¯À™ ^  k]¶î'H¤µ…Õ`ìe qÿØ–ºçÖÔ8Ä^Ò²ÂM^Yðune·„¸€â 7ø¢©¨ÙiÁÔƒ |Õ½ì„Ç €èÎ@pÂËû‡õû¹˜œÈ¾¹½8Ä`æ¦Õµµ·áV‡Ž¨Ô£z¸ur±?ôw«LÇ'_áG*¹ª­\›ï'˜¨\]D 0( U ’ÅvÒâ±´Xl'*ÛÉÒ‹‚ó™[ÓjYð…™Þ;Å­Uªx‚µ0ùÛÜþï¿øø+=‘~гá;óp½»E ¯Þ¸ƒ3I®åEœH)hÄ ²ë‡Í¿Æ)ki˜c–Bè`9M¬K@½¼»%¬âG¶BúåM4UU<»ß<éª<ûd?9yrh9ïØ‡ž°®G…Äc_}ª>LW¹÷†i€UiøËϨ))“{'å\Y¦Á,SPwÿt˜ˆwe&%Ì0NëT¤¼?E=…Ä“g²{Ô2Ý]*f™ ;ÑjŽ˜8-k̲Q}<Ø&­Ø¶RðÑ63mºê½ˆš°†Ç]ò§ªç‹ ÉÉ“CËy¹Iw/x¹)w/x‰ w?ò¦«ØÔd»iUf¿ñú‰Þðþõ±±ßgó^ñ© }7]áú&= ‰*Câ$xr–N_™ét/À"ŽBÊÁ1Y¦«¼{Ã4À‰ª«5¿“>—v~BZï—¬pC¸tE»µKšªXkÕÚ[“ô+EÔSʉ`ôëµÑ[TÁ(²Ù¬™×ðËIµÆ'ª‡Ÿp¢z€büÅé³Åñ±ð~º[c5^Q=~Ôsg~Ø%V}!g¢{9œ®/’º"¨'Ó%§¿t.9å{ c¼n½ ]cô1r@„><ˆ GÆ‘FÎ!C°àC/ŽaÁg^Åâ¼1È­±½¬zmp ï ¨TÜ—“÷±dA|‰P„Ž{Å‚¥Ýü €,;»l®Øh§Uì¥Ô\ìçÊÐôhg<—”ænAäŠZkr%­5 ³‚VœEŠ!%àÂ7…ð>ºu œƒäüû¢ô¢àTæ¶¼Kî>+9ž{“É»{͟ÈíÕ\l«ó¹Ê½’ãÁ9™¼W¹ðF¹³ ¼…à""ÈdÙ±{e“”ÀÖ‡Eñ>’²øT]%äÙZ(Þ"Ý Úð\h8¼¬dç^pÚÇ :ST¢ˆ 4Z‰+Õ) X& ‡ü"±‚!?B¬P˜ï1!ƒ0þ›É/MçþÊþqQ¿ñE´Fñ¯øÔ£8sbp­9suí¦ãÂýØsö#ˆÁ™LXŸvŒeØJZ†²ô`I†m¨ 2YxAì¶k&¬~ßëª-±Y“1’CCn6Ì&CŠ÷òÙœÿ:©¢è´µ,cÌæ &Ùh"`1mÛ4åe,k’e4³¤@IA"Á[(¼AÛ'–‡ieÓʦ%ó·®&˜öño`ã@8‡Ì;Z÷V‰uâG(Ö&$ÈhB±Ü 0+áÔ7EEŸ6~2:âÇ_zP ßu÷Í,Åpô ¦2Û¼3mφ^©áÔƒš‹­s¿íIµmÞwôS,nƒƒ 6Ùh##zˆabއ¡¨­”áiAC8 …iÅO šÂYˆ(¦ E/}¯Ìh²iiþ5pëë;Û×w¦¯o‹m¡ue£( šÄ{È@üšŠö&fYÙð8~yF{=#¾‚4‹÷|ª‹”ãiAc8 !EÝZ.1‹w‘á賘e¶àAô¦ð¿ªZ•ß¿ýh¸¾oUk †˜D°4ȦPþÊɯ‚ø=œ~Ô¿þªkÝ©òþE…TeyvoŒïdå¿"òw¢òì)Ïæ£¿\wmß‚È\;~ ¸f‚cˆd²Éž6ï^3‘éÎrI Ý–Íw¥¡Í²f CˆgtÉž.8ÎרÁL•ËNÅÿû¢-Û·+í·íuE&ß áŸL~ãþ¦Wg2üZ&ÕLìòq%#?•h\§ä¢B]ßë¬P÷:ìûÝsÚÒœèm‡çÜG&Ai2ná( ø!>Š~ˆ’ ⣠Ba|8y¯»Ú=àÜm}/Ç’?åpòVå7vßøçøÃàáãcïû'“Q< H§ÄóP¡?¨¤x¼þÔé–º·¬¥XÐ>óR*m[±aÛŠÍÚâ-“.¿¹ —‰ºRBQ%µo*“SÓíæÌq (|°À'Üm(Â3`¡&²‡©i\lt*Ô&7:jš 5'R#ƒK¦ÎY‘ÅQ§g­ æ~±Ô!!ƒŽÙ}ç7ÕsAWZ0ì …›k«êB1y×R(î(ÅÓöç{þ¡{¿'†…-ôóL~hƒQŒ6Ù`“Ëûì‰üÎ6¥Ÿ’öýÂö݃¹q|“[ Dv}…Y7Ÿ5{“ÇOŠêý¨A$ÜCu&t7&Aݸ A'7³ù¤ZKÝëà÷º(¹˜+%tPÂQS1SÃñrUµ~as"ãFФxÚVMizC½ïGäXê§OÞõÚš°šoóqo±Øk-–yÔfãqßÜ«ö^öÔi^I±¸ƒ>½ã ]5Ý·ß´CµÔ'¤W>Ç8$ødÁÿ¨”ßôåT¸3rVW¦Úìå‚“g£®<·®izpÕ¡gîKíÅȺCsfÓ9ÕÝžT]7}øhÆÔýCˆbtÉž.ðalÞøÁ3Ý…±Ucñ: j.ö§>ë/:öRÇj8v™Ÿ”:µMiræÝ%¦‡¢—y¦T6è©ð®iÓ óï-`o! 8—wÝv¦î‰qïK”#”göAG¿/¡æ]lD¥wAæ=pø2BÇn.!СšËèÐÈÌe`¿~Ò¼û—;bÆ_Z0Nb.ßafó@9lð`@†-à […6r4þ$g’‹Î½è¤óg{<ì¼¼(üÆ…¤˜‡qš{Æ“„V1=üà•†ä|•ÐÌæ!“K©ÜkxQÓ4[# “æüÍù\†Å,Õ>æì[1”{«|l3Ûï:gÎø^ÎäörölÓÃÉ¢\zf8Ù¸z/u]K±ÌƒO[Û{yRyIå݈±Ä^œ91™ùãÁt8l´DâÜÕ0”>Çþ<È3L§¥£r9­¶–ì ‰¹G"¯¿Ü3ZW ×3ó{ƒÌ½MËÝçZî×÷·»ìN: š/È“÷À²lô Nu«jêi¸ÐA½>Û.l¯ì¹3o´PØI ß™»¦~(ª¯”XØ ÄÏíwKŽQßH±°ƒNû}v¿v­²öÓïNNTˆ¸”~cVÿÎS4×SÑ|Ö½©˜®º „b´È& ´,¦úÁM‰é™üAφ¯÷×M'ˆ¿v`FÁ¯ Æ_è ¸^‡Ôµå¦´­•PP¯Ä…à «ÓM—-õšÓc±½>ôðy6ÌwÒ§ j௢…»¿Ô¾)ºðÅÅŸ}0„…ºØxêQªZL´0áq¼ ÎòÍ]¥ –ø›¸BÿRõµ9 sl™sÑC¡ƒ>ôðv?UµÔˆ¹ŠePF'ËÆ£½ŸÜ´ì™•ܵ왚ٶl—\ïu\êu—YåužDDí]¶"’îõµÏmöµ'!vû:„JÀ“…£`¶ÈÚP0{dm(àM²6Ã|"ö æ¡ A2LM¢¾]JvüŠ¢ÈÊßó+ "dÆç’£;fm’£[fm’C{fm’S›fmâS»fmðm³6 ä¾Yr㬠³sÖŽ˜D Aæ'vÏÚÛgmÐý³b2Yv.6ºÕ&7ºÕ&8´Õ&9¼Õ&:¼Õ&;¶Õ.<ºôø.=ºìø.>´äø6?³ŸÖÙPkKï¨2ãK’3»jE˜mµ¢4ð¾Z[.fc­-³³Ö–ÞZë„o-›k@-%t{­h~a HN>¹ÃVƒÜb+ÊÄì±õ0[",ŽˆÛgkÃÃm´µ¡!vÚŠ³H1¤høöãz*ÌÃO."¢ïÔPp§Î5Û2C(Ÿ*(¦…‡M¿‹†é{Ê €N†ö½‡ï&aa8j›ˆI¾»Œr´èõ_ê|Ö]qºsC•cz(û¨ÏîÄ e]*Û›Üj¿X¾›ñÌpl¡,mÀÝg¢*?=ꯓ½úyÝg®H< –*ÏœGf¯Ùàƒôyñ'qSYê À^‡ÞX†ƒgx¡ÃCg’<‘äyDO£ïP§jêJˆ¤„è™-N,Z˜˜_”Ø+ûNk¢l¤h^/…kB©úV1Ýk%”uPÂ'v<`§«¦×‚Ä+&ø`ÀäïÝï™{ÃV‹¦Z¼n4Ÿ¾qMê•‹;HáÓÛ¸b¡Æ‡­•PÖA G½»V£ý0Ü*2{5Ù©3¯ÆÇ†]îµ{Bq#&¶Z,²Ó2ã%®ª.Ì©toXÜìÕ˜ ôÙ¨G+É5?پ鸾;1;ÏF1žÙŸ¨Î½Š¹÷ &õNŽåö§ysÉ7µ¦s/Äxj/Æ3듦–*X+±´:Óøþ€¦º’QŸJ4ªSRQ§ç‰]§WÁ|`Œi{té%TÈmI’•?ˆ©Ìg6ï™ÍzfrV†­Û•aëve¨ºMÆä"âñjê÷Z‰Æ¬ñÚþ€mA&m 2h[09Ë«DähfvAè^±—ÕS‰æuJ¡WÝÕ/¥Mn¤s`R Ü6:>ÂÝïÙ­Z`­F³ßýFߊxkhïg{?ÓCÑ£`ø`À AŸO~àé©ôÌgýùà‚Ü‚ÈpZÛªš›>²ÕbyG-˜ú¦q¥>f\ñ¯WÓó»vb(¬éÉ)]Nys•nœ$Îmóqä8i²9±ÁÇâæU–gXʉøAN&7ÖÞ5Ÿ|)'’9™\TkDÕ…¯'.µ²‚ó½6 ²t~jº½šJŽïC7øSŸý5B?Ü]ŒÑ…{ЯƒˆIÄx~T|Ûz€ÎCvÛ÷!æM"곫âên¤CtÅ­ÿÒ£™²§ÌÕºçíéÜPƒwb(¿g^Ìef‡¬ìÕxjj°Êp`¶Q²ã¡©æGÛÔù…zz¯”XÚ „£öa+ fÈðF …¥pÚÏü¤sûœÀ@¤Ž[@é?óÌY<§?0{* ÷äÜËáô›y9“|Z£ðÑædø½šZæÐ90¶ªO}Ó`«Gã;}ôLxÖ¸éU{5ÜŸobšÕt`ßeê0s&q'gtšæqÒhM'âi:DÓñÉ;óðSÀDUjgBQ &_ÁºæÞkÆRÏ=ÞêüÞ¹ Ç%¼4bp&#n¬ÂArÄÏn ™9s°û™›$5 `‚šßœ«“U§¢©µèQL¤wú̪lГáÃâôtô…šVµÄö÷n+ ¿ô`‚ Ò6MÉ#,ÔDx¯&c?vîIÔ€ÿh¨(Ë˲‹rƒ™s×ÌRÿ:]´êïóˆ;@é‡lt`ØÛÍ^΄§n8E§rÿ-£úTܹ@é½A6pù;]\Œ½ù…*U4Fܧ}²ÑG ENkya#Ab¦º¬£°}Ç.<Õ÷¸BöAšð0LŸäÃOc~îmÕvM˜¿ÊB½rÃé·©æn0fåÏ5w{^K!€Êq[®®ª¨¨¬ !–Ô áœ®Hü_0I×R(ë(%Ò–÷¯â|ò{bž¹)HG`þà‘M4ÈßwÝ}K(–B0 ówº×µÿ)×Ö/M.B9ð¢¨f¯lð¢ɱÀ1=ÂŒžþÙ™^t, ¨øÁÏoNìãk-Å2›Œz0 ËjS/›k)–vâi{ݹ6“¶ü)Ž9`Ù'î„7¹_ ƒ[r'†‚1³2¤iýÇ1jQÈÊÛfA ŸáV ÞZ¶b,±bßPÜa‹ÚÒkAÆôhòYO†'—ƒÜ«‰àÌ‚þÀì7­L}¹ð½UN~ªˆÈÑØ“œJNöNµ|OxKvƒ‡”TŽ­žÉMW’¦oE7À­ ?ëÉð}ó¡k>ûRNDr&yûÉ¿FìåhòIÎ$ïú޲¢‰½”IË/À·W£™É÷Âïç\±¡Z8²×r‹&¯ :òR‡jAlÉÝ;bAÐ÷p¯<è7r&=û g;ÖR41ÕÕà9Ìüãâ.µhÞaÎ Ø\¾ù;5Ú©É­ÿ4`Iò½>°ù+ëßj±Ô•¡Õ‡ƒ¶Í'y!nÄpä Æ3÷~í ë·›åúýbXöÁ xþϼ4§‚ì&Ùˆ±Ü^œ»f˜ŽküTA);x\±±Í)ï4Y¶b(¬m²AÌdÖ_}§¨Ä{5šzT£±‡m ©)‰)xâÇCâçw%$’ÂgÕ”dWïFŠe5%ÓÍû—z¨SÎííºÕby*ˉ}]ÃA?ô·_²Z³¡7z8ø¤‡ÃŸË<*–:(¬×Á!uýaÜCé|7%ó"ÓC¡}ôlø¿~Mì#ÂypíÏer¸Ï‹Á õYFȲ“±éíw£LxnËÝéð6ï\WeÀä àü¦czÍ2(«“¡ ?\3±,™«r­DrŽJ8ªîj]žÎ¥km•†ú s`…ÙlS|çe£>N›¸wÀ‡lp"vN{í$@bwO›±=°Q „ê}uê0‰_Ef­‡éžàJ2æ¬jÅ?šbz(vГ¦{?µû{,ò¬‚‚Ú{6ëíx÷³~÷B“æto]}bÀÇ.PüÑ%s.ÙàŸí)µÀé^MÅÇ5ÜvÚRóãTüÁ>óí#åä¢ðœNN­½WS¹ñ•¢çKžªý$B<* £’„ÀÃòKeÃB*Ät#EORôZª{ߘ{ûZ‰e JüÄ~s{¶¯„XÐobÇöò|gBÎ*(áùÇ+T{R}Ït oµPT§Í¼–l%‰­$²¥2»‡=5Ad'†31•™^xj¯†SsËO…[­ºüÆÆ^©á؃ŽmÎ~ß“ªë¦Waê ‘þÈ‚L²§ ÎR7…æÚÖ[-–Ük‰võxPæ„/„DTîÄ>þÍGµDÚÇ¿ñÀ¶×õ¸ôûÕáÐCð&ãÔw‡²,˜þ›… Êëdpª8Ÿ>LKs¥„r:eöñ€Û™M®Ü]©‘Í;18ˆýáÓÛ\OîÍåÛRöj,õ5 j|x€“ªZ•ß½Ééä{0ül@å/jÅ&_JÁÌNJ¥õ­-£és½•ƒ©G¹(9sInÄdjü’œk¯ÂÜö*Ìn¯D~“Wû»¦ãŸG& ÇlB>—1„ÂüxrÛ+¿. wÅ®Å`ê ¦®Öá°ô玸•žûäQ>¨+öA]¦üÚäVî*¹5»Jbµ®ò+'ÇÓ­•PίœM7°W†Û/¦'bzâ<»FDUY.øJ †v-§¥ûW6:ñR Gb©R‡Áášä*ê+'ŒcpÊ‚ÓtŸ°249’…G`ÇŒE (jÌØ|ø0ßÈêÕÆƒ¢˜\oü6 9Sî…‰™17F׳RÄ…àWÖÐDV<{FP4aÕBzšC‚%¬€ÈíV³Œ!ƒ¥ĦÎ<4a!¸%4«ûm™i±+!”9áœMá^ÈÎT=YK¡¬£OëþHE}ê°œîpÈ¿{*ãSEt28¡µ—§‚ªžk)”ÔK³®¢~ôKÑô'u½vúÊÍþ8ò@òû¡4Î#›=XÒ亶Œµ1:Ð÷Zÿ^K¢ßk6öß}§%ç}©g¢=ÞR“†öj&¸Å' M&»‹"r&8ÓY´:4¹’ê‘ÍÀ¬­:…x4å½’P¬ „Á€Èï?·'w·½ ^˜^ù€4Á'|¸—¦Z]MÃQ,„Xl/„sê>¿·äòw;1”7ˆ™åïjýÙi÷h;º-›ïŠ[KâØ£\²§ ŽóU5ÀS‡Ev:8äÕÔ_a‰Æ;??âЊïM²Á„¼6—1ÈþŒ#š„éͨMÞ+rϯ­ >iñÀîÖ¦ø×þ˜ îîŠ|ÙîþOšg#¸ÿ“P䵪´#âs ˆô<Œþd!6zÀ?½¼ž 1_º8©¢è4µ¤à¡ ŒL²Ñ„b {}È*ÔÞæÛ†ªþÝx!ƒÓ‚ߋá*]qK¨îÕpÞAMØêKX9¶xø/IŨUÛwB„ˆLâA3з}×þîO¦eo6k9ÿ«÷{´17ŸpèéJâ¯=8†©(ËXŒÈñø–¬-¿ ÉoBÂ[íB„Œà$ý—´±³s€œƒül¼Õ±™OÆu¥Zn‘޵ ë”Äuå7„ ÎëB‡Åô{H ç³©T!Y–:jÅöô’ÔÏÃK¢KRÃíÊjoTL ¯êS·T'RKuµxÇQW´Ô”Ÿ• 鄸”ŸÚÞÛ‚üx½–BYG)|Vï%7‘j%„’:!~VvöpÃNn¨¹ÃMnNœùf¾VbIMæ”hÑ7Å™YÕt!ƒB:œðrñû=þùßÿLeØøÝj¨&×O^KðÊœW6{eÞ ¼)¦¥°A± NèÚ@†Ýx'†Òz1µ pSéS¡ÃV¡dã&×Ùà@5o|ëš=ék)ڵ˩îi*¿¿=ûY0î€fÜÁg¶ÊÄ 8¶Â ‡—D—¤&óÛïÕhhr;``ÁâÔ9œ]’ÚšX¶¢iñádN¥êÂôb:ýéŠ'zs@šÁ+›¼2nÛîg¨0‰è¬JUçÔ×N\˜”49ñhãêV~O¥wäÆ!>ÝÄ%Øvæá/eþ›ÊO^âèÅ~mY„ºŸý)ÓÊÐ6.$Tpñ_.hœqò‘„eeÁŒ³—pŠ°Ê´ï0´³¢ ÇäA·µæ|k+fÁb-®9þ!l¯f³ƒ¿–îÔ§0úÓï„ðõ¶P½ÊuÝ  ÿ`B…ïÁO+úêØFâ/’NB6ò’ t—½wZ\nq'mv’•Ú3°Ð¢F20Q‘ùqð®51·NÄ%÷Êâ ç6¬·ñ¤ÅùÂ/ mÒÂMÈ™‘¤»äÉ*íCwÉÓTÔE$a; Ù$Õr( U š¥Ñ «áÇÖèTUqK\ã^bBY…lt’*Ùè$•²ÑÒjV"W¥;îM7~Ëâ“VÒ7­òÑ:[Z«ÿ‰*ð‹ÈÂêüžsâs!©ê/ÿ#gá9$ûtiúåE¤WÁ‘C:]ë~ÅQ=_†Vì+)ž¤ê.#¥KÃDâX¿ýcXQÞÍqäÅ Y¿»äà%«ËPÂÚx`%Å“ÔÆe¤4`i˜`œÒÔä6y[-Ýk‰Q¸ãA…+°»’ØÖAèËäÀ„‡á.#¬˜!,˜AVÝJ!+’­‹AG«ë“±¹¥†¢mÅPr'΂˜É|¶Å©ý¸’¡×j4µSgNÍÄ.þ:ù‘¯î7m×´dú¨ Qü•-L–Ïηú¨•Ú"r4¿“g†X·­ak Y]ˆzb¿N…¾¨{ÉÝ÷r(±ýÊ&9“ܪojHùV‹fvZb`ùãæÇ%\”)rh@Ô ÿ¸ùQ “|·~äÎ0pÇ“¯lžç•·²›î; iÕÔý­ü>MYúd`Üå]²ÑÇ1î¨.û>…ø|‹è'3 Ιe“YÌÈ6Ò«5R°AÓ B^Þ­h¨Á¡ Ž2ºHpR žxe„C‰N qŒým-g!¡ÐþuWˆ±÷À9‚‡äË•g­ÊçŽ2B¨—~àè÷Ü­F+üpràCI>…„aþˆŒcgc„©(R ¿†¿hfÊk+’j´’б(ln*¤ø‹÷¡  ûÆ=1¹eã@`˜\‚Ðê®2ÖºŸ’á@O# ×ß÷¦WB¤½N<$ Öoos/sdP¯ýpÀ§ß4{B[«ÖÞéÃ&jC 6"¢ñ!1î "ä:6#èÆgθÕHÆy&[ʨÏ9O”K@ú¨1nŒxºG%áêÕU´uÀIœƒ!MåKTéRT6Ù±¸N"ø"ˆ/ñ%"»4UÛ4¥˜agÂpxŽ¥U¹ö›-wsŽräÌsŸòáwÝÓäLñ˜øð;öif¶øxpÓžìý\Sã‘,ÓfƒIÑvÍ_:0¬ ‚Ñ€ÌoííCóñWz"ý 'Ãs¨¾WùÜîà+iÜíãi%£“"I9ð𕪹ÔO!·R5žóª»âÞûÞ3cXòÑaØfžGÈoª¾jÃÊ‚ƒ,x I|In:0¹¹SÔ€‹ÎlðÔªêTšÊP-¹Ë]eƒ˜È\pi .g'ìzÍe\±”^ˆç昻ãÝcz,õBNroÏݽ>µûì/tPX¯ËÆã½R+ê®ð”A ®ý¥sæ<.…PÊ „ϤÉ?ü¡{©/uPÊ wQoMAÝHŸ2,bßk®a· Q‚…€¢½žng%ÃXyí5s#½LZ#½LZ#ºLüò«VȰ°`!¼…„"¬·ªüO YvF,ÑÓHÀõ÷]w¶ÔÒ‚d  ?¯^ï+’cð€hw*jîãþ¡ 3ºˆpz)I/…4mÙHž,s ÜÏ6ïL+¿sEœX¤…“­WþÇELK &XH)¬”eé#á >(öiÔ¡>’n4ç¿N¶W}‚W®C? žó˼÷:Ö™þ^»{w¥ùâÒ`‘9 1… @–Œ-Y0åȃA —LY…2ãÃÉ›‹éÏÉ?ìrê.ñÊ ãy:-gKЄôxø²=uº¥ÎþF‹….ÛÌkñÀmËõ{.…XT/ÄsvúÂ/‘c™½œœÐçµgYò³,ù™Mnoç»û ®~lÄXêIÌd&—ÜHѼÌ€íwkjwÑÿ}7ÞèŠòƒÄ¼²¥Y…"¡Ø‡Ók+)ó¨úû~ÖvÚ•Þý ‚³Õ"ùƒ6[÷ÝÀú:åg+|»?vA œKæ\$oñSÍD-Ρ¿í¬¬f3ï-àðÅ9›,X ><Ÿ™ŒJöôFäLh¦§7º¤OrIŸäòÌF­›B[Aफ़‰ôlxkKAô§š îÔLì¢fÏöS‰ÆuJ6j§s¿ç,ŸxeÀ ˜ülsl«ESSÍ­pPSÒ×âR öZ>psö+DÈ‚¯=8€Ñƒ1…kÄj’xDŽÆŸäLòýÝ*Ã>'×j4÷¨fbWºWdæ… ì¥TZ.(—‘‰WŸT©ºŠºÖã‘ë,èÙðùMç‚ðK=>èÙð¢;Ç΀‰Ïß=üáë¦7~Ìñ †ei“„¨-U2¬…—˜Í{1€ü^¨{5 Aî|êü÷]ßÙW祴L`›«°€+»ç‘ 0zpÛk.CŒ+ÑÊHV&,ʸ†-Ê¢UqÊíƒ!XK¡ÜNš9)ž¶¸{;ùQÔž0q,{pÈF¡¾˜«ˆ`aÀx6?ýÑ3é¹÷Áñàd—{DÎDgºÖö¦zé„€cùˆ&8 cñEb20°±à1áøŠb¬ šËVwX|}¨¥O ®5Œ=§ìéDÏäMSc½–:(¤×á!ë°`­©Û \g£š‰Ýé«!óÈÑà“On+wìR“¬ör,¹­²QN&oküÈG>üÆÈ?9ÀFQïgOÖÉà„_ƒ5÷OX"çV ¥Åxf¿Ídw*t[6ßäz¼‡&C0Éž&0K[ÛwZ“ÛéF †¶ÊfSÝî^¾ËMå¥à½òÈâL2g¾WŽ1øµ¶ã ¹Úvwç6^êÀ¸øÀV•½í•;Oܰ›˜ =ë™á7ìþºìÞºÔ¾ºþ`x%xªÐ€hp@úÓŸ¦jïÔhí (øh‘4Å<˜Ç—ÕEøƒE5¬h:SIvð{aCQ®#e…|M>vð0/ÎÏ Ì¬¤½š‹ÏKz¸MP©Ú5ª•V§V^—ZyEj…µ¨Ȳ³±©1v{5k7¸é®ª6¿‡‰âËàÐÂZº /U0éErd&‡]8Vç÷ζ—m@üŽE:ùI6&> '-Òc»¨)‹5d:¾DhÝ½Ô ùv) ½€´{¶õ{åC²yñ5Âȯ½­Iv­I7¢}íÄq‰¶£ÝWÄH&+2v?·¸GBíé6ÓBü[²„bkB„&Þ„f._?Šh\EvíŒa¤WÎÞF‚$ºjèUjâA_ò¦î¹…Øwb(ø,Æ3‡|h®Ãv§ÆRj¢óV—¦¾ZÝUÆZŸ€9å& „7Éž&D4Ü*k%˜º!vQ±º.®)¨¬+)vií.¿Wƒ™í*?¸4ÜGÛˆœä\ò›ª‹’ÓãÙG=Þš’\ê9¦ÇÃz2¼lá¡ !Chµß†Ê¿b™½ÏéßêJm©ÖäVŒåÄxfWÂø®M –ÓUpÏ&{9©n)Xr XféW[W‚oÔ[1–¶b¿>7¥êŒ=ýnjêåu/‡ròÌËñä]ÎmwµVbyƒŽÚºëîÕ©ÐÃuD è£C68ÐN§K¿´]g%{ &ØdÁ'*ï5ù¤_K±ä^J<ëÛ&ìµ{RŸö¤Ke{Cžxm…Ñ V™³ÊVpYØÓŸ­êNyKµvjˆÁf^95[0oÛJæl[z¾vœ_t†[v¯†R?ÕTlsº5¶gc¯Ôpl“y5»UýmKÏ(>¶A¼Í<,ŸcÜ«Þ\<…`j'$Î|·ÆµU•©{]+²wþØeð6ÙÂ'*t×q¬µKî¥Äë^4\ŸñR% B¸ßø^5þ›fÎØK<ª™ÓÛêîa|ƒ´gf{ÇôXô…®Éf'¨§ úÈñxݿɋ•‹”pÔÏB·Ô¶¦k%uPâQï-õÜXè°˜N‡ü¶î‚<ýeýzwÌý ¢‡B}æõÄ=!ˆÉ.øÍt¹[×Éo\Þ¥Œ¤DÚ.ç¢v9—³Ë‰÷öÚ©BsI×b0î(F3÷Ê\ÕÉXK­]·W#©ƒ: j8¶.µãe¾hl¤PàQЧí:ui:.îZ‹åµp`Si²Wr#…âŽR8­eZzª Œ^d©ÿ4¥a:ÿWB(d§ñ»Õ½*™¯Z)”u”¢iïE%[¿=j€$w‚õۧÓ—YDÎdg.7h¶ÿs«E3S=œþ ö¦:öÃ][&ðBEõ:8d_”R² ¾‡&Pü¾Êœ‰`2ï:†CJ@„ÏÕð=ÀO”Ëu×KÊã• •«áKƒŸ~ç½èÒÙ…JÄ–‹ ò ò PDŽø¶ ó ÈzZÞwþw•ë“*ŠÎæÔº·LQÊiõùÙ4Mézx35vjbÖoïû}R÷þv ûÖSÓÿ_¡xÁ(óFÙhÄsé¯\³³DŽ]8¢Ù…ǹt~òc]H.Âc'kr¢/·M $TI€h–²ÉE«Ü¼vâ¨&'a1Í’P%YS$O’Ö©àx®©a\f,sïØ³ýÊB|²• ÅŽ5éjÄétpòbŽÈ™èÌe;ºk¨§zDÎ$÷r6¹ŸÜT)Aö•“~0`ó“R9“é˜zè/¿€‰¾R±×Z,³×fúJ¦WÓˆé‰àÜJÓõwUž›/nœ]L…ŸõÄȺG¥ æëÜR…õ:ô ªÝÔÜno[-vÖÂõÙ?¦üÓZµLGUÔŠ>dÎ@ŸÚX<¦'Ó㛌/Þø¡B€¥ < Nn"’µ ‰2šX¬¡;ÞEøò3>ˆàK7èàç–iœ/dPD'ƒæùI¾…Þ± ”?Ï¥[é}éZ¸(eܘ¸—£g€ë]Û>Èއà >i È7¿6$æMpE#ç"´Í§îü4€fg&{šÁŒ~u» óBÙƒÏiOßjµÌ­Kk³ …WÌœƒ§ YÁó ¾•;¼™äS…Äó*p+Éñ@ø`• ùVÓ`_ȰŒÜ,ÿ¾W'w£°îŸË†Z #îå¾WÙÂEøí®ßÂéõ7K÷BN½#š Î$›L²`°°-–­MNµLüA¹¨\H4^ÝPãø—:(¢×Á!ýèOn³±Šê[Œýn›¦ä+éN eöj²¢~·-Õõ½BaƒÌ)ÚYôȃHOì.Ú4Ww¨k~²N漂ö×NûVð Í®y6jáÀú¤±}†¦´K!UgØ]è™ÓTW.çSætB&gíÞ:ü|ï^Wm ¾-RØ  £M6ÙD!´å0VZ0û eŸÉ°g2è™Y²>W†¬Ï•aês­{.çSætB"'6Mø›&üL L~†œ×¥¢nÔ`ày±R@—ѪPövnTW ×îhëÁÀÌo_¿‡ @•:*×!YÍüH¶¹wØ*H;’ ‡2™°,—¦,°·á ÇÊ€a Øüî33ÚÍoîŠÓ¥€æ…ö´ËF;–´-ïà5¶•C3°ù{­ï°I¿3Ù½œMŽ•Ü$G‡Jn’#C%oîÖfNu/ûåï'ÇBõkïðNþ Ê‚jõû7Ÿ·0gõ‹2e6~„gw¿ÞBæÍNè¦ÕQzQp0³éô§k©°ç<"GrrêlO‡æCóy±¨ÃœnhTíu£¢ÿ}$íÇý¬»Z÷ÚþqÓe…Ö‡§ü×VþNè§<ór¨>l“ó¡ù¼dÔñ -<×{a|ØKÎ<Üb9 Cù©O/[êÛË–ÿø²e!úÝ·$DŸû–ío_P|ü?;Lá¥6j0»S³~¹Øyy·=¾ö&~Ä…À]ØëÚÑ_:ç1j"¾W“±ÑîÃMn´÷pê<Ü$—ÕY}Ô¨³ 4qv‘‰FŽ?¨_n”>ÍO1Ù/TÊä÷ßìvyß}¡Ûe}ë=n““>¯ô9åÎg§>ù¬O1‘׉ÙÌÍе,¾v`Ò$BØö›Ï¿”ნMî×îÎ%ÙWLúÁ€Éï~ë×,džœ-óï Ðüƒ2ül‘¿iumoæÒÓÏšˆH0;pÏgêN¾•Óáñ»úóÐô=3fAp÷ÏgÁ-(nB“À·#?WzþÍ)/ÌéÞ–*@¯þuló.W?ãl²Á†'‚¯î5 |i¯ °ëz¼í´…† íÓ¯,8‚Á‚?ÿí#—!%_È´á?`õ‡Â±®RbÃXWI¬«´a¾w¡…ó†™&o®šúÚçé×ÓY•~œ92z`”þ:°x'þ(,XŠ·§n³¿=t›ø½I Ûœ¦.ô—àT/õLê gO2ØÉ»ÏõòßÍ»Mþþ‹ë6ôûï¬Û¼o¾®n£rncsûnˆí ·8M‹uYoA–z!èÙð­êT¥{ÑÍqëÁ@Ì,H§ÛÒä {ÏÛ’ìL”§ Ëâ÷·(K=Cô|x ÿÙ‡×Ð( }x]–|ø{_4Ÿµ(ÿÊ‚C,hа9«„ai@>¿n¥¥°¶à –°º%¬nÓ#V«oûw9ü[“/H~m„o¥õ’ñ¿ï¯Â·Ì‰¶ÔIÑVÚ"+ÔB[¤ýû®¡ñK˸K-š7h™ÀãC \\z{_80èõ·ÈŽ^{‹Ðìu÷PQîG-y«GsÏúwûLü¡þ÷NãZYêKµæO`ôøuäñÄ´Û…óÈÆe¶ˆˆ@Ìì?]£m£o=ÿÚÀh 2.6,+„¨ Š2š°…b:Ýø¡‚Ư¬”Pê Ì¦c¢Qáµ2·‰áe2·Á±2wùýæ’ø =•Þëáð­Ó‘e-…"R¼ªL‡äëJÔÊNÖ–î~VÔé^ ¡À^ˆŸêápü‰Žè‰Ô¢“L_‘{9ºæ4¬áa< ˆåa²Uê®—áì`§ ýár޽ ³°¡‰lÞ™6AÑD|(¦¥õmËæšjïÃA-|(¨Z•ß½É-¾ÞŠ)n#ml(¢Ö¸²µØÛý fçs´&X„q•RÂÚA8„¹£õ.¶×u®…•ì Oó…§<m2D×½¿ v0ÉÓDhÂÈ×RÝëü&»‰¿ð"°ö^  ŸÁu“lÅ( æ3³;þíØ=ÿö4Ô®K4¿sò°8‹kNÕêª+]÷²kè Kö•%E]6÷‚Å[ha¯¥cðšìYߥQ(+#šËdë ê{ßAí\(¢§ ‡3ÌNf1–j<þ0§™N@¡{÷Zee'géD¡5uïgåéN^ËŽ­`¸ˆEçÎQS™VUE-|;zaÓE¬:¯n\³ð›DÚêQŽYÏ„×]×t­{T›‚ˆy +ˆ¬~ØÐ8‚zuµÐ*ÐKŠ…Mî¥lÚ«nгìüØ0K–Ÿ0¼…Ág o9À)ÃG­êóÛ©ÒÕ™~òÿ`' vÙ`Çú¡ˆŸÊOËïûÇÁ‚þÖý–#Êû‘BÖªìoUSûµ†XȈŒµô @ú¾ž`ذÜHÄYz0 ®-Q¤ÒíPˆ…‰06‡¦í>ÁÍü¥1cËKkÛÞ¥Y8PoOãXÅ~{ Ç*ê{Ó7–ñ*“wÍxk—\G>(·9çãïI”µ˜~ÏÇ–]ÉQBp县Ÿ ¢×®W^$ÙÚ‹l?Œ¬ v(ÊÓ€ÊÍû\%Ǧ}®2³>·i%·§­žÉMߎfq¡Û²ù]Í’ëá'?nëGÁv¦ñW¼‘ÓŠ0fc­L–®¡¯î…Íí¥LZ›ß´±o[=š{ÖSᵸ;5b#hY÷é0¼xþ´)ºÊ_yá\/еÌt}5µ€m= ÙC "y²‰èg­«¶ïT+k›Ä]`¢µ …cËý­êbñÁ–e:¶‚Á"V$°œ¶‰¤túÎÔWÑÕ³s€ ž·íu•b$ƱŒ´wbÐÂ*l¿ÉJŒ b*s§.îzÊ˦~:v‚iöN š`Œ…`T;ŽÂëTž7wºí˜ì£ƒAV•@‚Š4Îe“}ðŠš ßš†íé]«ÑУ}Î/'ûiÂ7Y8õNŒ„vâlÙ͵vî3Ló("‡ryädrúM<¦'²soÜîÆ¬”šf>ßËÜ`M www&Óôio"c‘bH ˆðyyRÅ\ãl™~g€ÆÏËl4 óû•Ѻ‹’l-†Ù‚¤ ³Ó‰ñœçKqº–ÍY‘qwz0µÓgƒž ÏO&‹ñÉ©dãáFòáj"¹W3±¯íI]ÈÐK-ùÚfêB¦ÓÒQ¹œµ6×Û¹éDgxoBäŸLøs>ǃÈ)pb¹†§ ŒŠ.ÔàD¯Ò°£a¹õÂaÉY}[-œ˜™µçZ”E+mŽD=@ï!j„||>4U÷·SßÝë.ïV†vò,È™ä¶>Ýc¹6döšÞdg÷h¯ Ÿ}ZnÔTrê¹9¸ë„É»N¾ëØü’VøÞ€ÉO·ÃÑ­5ÉÑm5™¡-5—iMø©ö›L¼‘£©Mø©–éc ˇæÚ?N…>ßÉé‘ HV$l²`#$’\‡>&úrX†Áh? ÂVi?À–j?`ñC$ä0 w¡pD-9a#NÒ~{º±íEáA3xDÜž6âÖ´‘µ¥ ÿ_Ûžïez 6üÿè!‘GÔ„D‘ ß¶ÓSd—Z©ròÖºP‚½’‰jÜ›¼Îÿ2ñÎ î Àuþ—ù¼Ñ— ÞèKé}I¿Ñ—ô}ɽÑWE-=å1 0¼³ðªTWQÖÞ%p|_V8¼´b …¨ ú;™~¢‘û;“ó^ö~?ž^ônsà‚L.ü{Í3ˆ¹VíI×~Õ~)ÓÞŠóVÙ`Eйß½ý£ Ì< Ç ËRÛwZU'u5õ•Î1Á“,˜ˆXôWÛt½fåBÓ ."É­éÀ…Æ¡oMÏ Ä¦ÉQ bßä(ºuòªoòœ$ÊZômXГŒM'¦Ãâ9ù~¾÷„ì3 |t’¸O5Ù©‰Ø>7 y§\iÁȃ– ì~À//JF^«ÑУšˆm/eCöz,¥`à eÒÖ®Å7ÿ ;ææw«mìHºWy/ÂX:pÁE(›œOv`Á@L,E¯º«îƒ\–Á…~<éTk% =…àõlxr YDÎDg¦’ùC»RëïdÛe-FSb.³{ùuOž{? eÃÇ\p ç’—0¼Tˆ#G‘c0t ¢kUsÂüþMv§GSÏz"ü£TäÓj¡{%Õµ»Ù¡¼+-׵ة»þ ÂNâ˜_ÒEL¿,ÑïIÜ+Ò£ëZ6hײI;æŽñøò׎¢ónähh/Ï” ùUõúS}KÒ¯-(‚Ñ‚§t×E8¶›nÐßëZ‹VÂà@#<”è*x(ÑUð Æ>ùí/éhöj(·ß8“Ûƒf<°+«Ž½P±½š‹}åOõ•?ÏWî$3“]È}`sfØ\¶l.Ûþ5ìý:º.Œÿ wçSYD³U2:ɘ¼D|ô‡˜Z²Íó^Í@0ã=üýù¦ûfs¯åpðQN'·’ÜV’ÚR™M¥®tµ_ŠáÌAÌe–¼éÅ ðìô[ž?|ù/9BĦ(ÿ%ù3ÈŸ @þ”‚˜úC]é{åZŽÇä\rr@åF‹gfU†ƒ6Wv\Í^ŽÇäTòN—¢[@+5œ{Ps±߇#z<:ûØܪ}gYháÐ^˾5ŸÝ½¦3¯äxìAÎ%~Ç8ðÀ$ß2Bˆ°Â'°TãლŠ-}‘¾wˆÞ5ا-šúlêúðcÂÉÀ -ØkÙÀµ p-ÌÝOȯk)—ø¢ÑžÚû¹4–´¸C‰ÛlÙÓbma#(v5©Cˆâ1-ü6» 8E©ŠÊ/‚¡;Ûß™íãFpÈfÁ´=õðß«ñèAÍÅöo ~s:ùÆ?pùÉ›ãNŒçfnãak×R¢3?ÅDf'F3ë⪹÷µI;(á^÷é€tuÔ€ ÎõNχ'»ocz*=Ó…;œí ȉèTw¨×Ž«ÿ’µ|­Fs‹3µ}<°ä¤G,HéÉ'ïåq’¹«kò‹¤&¿Hj拤–}‘Ô²/’ZðER‹>iiÑ'-ÍÒÒ’CZòaHÓ†tç:wu‹ªÏ;5”Ú©³ ÆëöâÀ| ?2a!ÈÚþEÞL¾È›És3ù’ÝL¾d7“/ÁÍäKt3ùÝL¾ø›É—äfò%¹™|Ñ7X¿¥¸j wÔÁI§ãA!—ŸTé3ã/?Ìr'<|Ú£‡]Xàþ#!7ðò!A™Dm8a¹ø†%ͱÃéƒÍ|Q¿O…&wBÚ‰‘ÌNœ b8sÙ|ú."ðJ ¥”pÔêÚM§ˆ~š@Îd:ßܳiƒÝ´ðȃ%¡6.\†!È b?{óß2dáž_ ØÏŽ!Þå³9ÿuREÑikYƘ ÌL²ÑDÀbZ¿aøe,k’e4³¤@IA"áw<4!QÈÝ1¸=è¢$±ÝxøÖÕÓ>þÍlçyB«ònÔí¡ 2šP,7ÅÌJ8õMQQç§ 7ððÈŽ¿ô @þ¾kjdüN Gb*ó°g&z¥†Sj.¶Îý6²'Õ¶yßÑO±¸ 2Ød£Œè!†yˆ9"„¢¶R†¢¶Rˆ¢¶" ÓŠ)L+¦0­ŒbÚµYôÒ÷ÊŒ&›¶æ_±¾¾°}}'`úú±ØVUR”…Mâ=d ¶tÿ»‰YV6<Ž-Ýÿn"¢GcÄWЃfñ"Ojõ ã_Kd¡n-—˜‹€Å»ÈpôYÌ¢Ïb ­¼4]oT­Êïß~“eü[RÔ"XÀ_—‚ºrò« þF§õxø¾»•ï»âÞ‘ÑÙÊ®E.Dh[ÍgMÎä:ò@AB³dò Aî­cå@A  s!-«éŠZÕ’µDâPôѼiÌØGJÔ€ .­òÏ4UT†yºìÕHò Î‚šŽÝ~’ÜO9Üɹä¾å}ºêšœvh‚Sx“Ì™0sÁÆ7MmÖ²W齚ŒíþÞô|ä\ò‚Ú b«Å3øNσöêjE©\toÀå7¹…{DŽgädrÁè׸‘Ÿû:(©Uç·Zè¹ð•ò RwNHçßYàÁ"ó$ŵ§›”q‚aràjÕËŠac€8A4ç¿ÜÐéWr<û '“·|ê–OÜri[¾Ž·|ånÉZ=ô‘øZÅ7öxþ¡¿%xp &²k=0ê¹ðVЀ´‚¤eVç÷ÎýµìŽs! FÁ½Ñê^Ñ ¢ã¦>©<÷ëL–Æö'j¹# ÎÌ{dør›b 1‘?ô³ð_z,P†Ð_C~ç]D°Ãò¬¦Òͽ—ÑĬH*;¬ñ:Xñtß¶l®"¨¥Ç„¼¼Ûž±ƒÁG1“¹©ëá±p›ìMÍu9ül‡rÍvaîY¸;†´½»“¬,K¶‘£$í= r2yu­ziüÁà=hâ–·~9ú"Ù€Þ  ˜üÖ¾Rä£|£F“;µ{½o%±ÛÎ$ˆ¿va1œ ‰sQg¿uOÙäÔ–qcpÈ‚`®U{²uÓ³,@o‘M EûøïóÕ@]ïª+H˜c'”iá”N©ÐؾìŸíR@R}ÝÑÈiÄoØ¥ e¦»h¾Y¨î…éOú+×-9.è¥Hç›™Á(›®Æ¶d¡“{%UuZñqj"²W±Ã•Ê÷‹Ç Àðáâ&{ÅçÃÛÓùS”aÀå·ÙùS’¿óû‘ŒïB’ˆËä­¦7†®Óó%è]Ù $Á€í]Y~ük9ÇÚHÀ3ý5ÎÕ5%ÙY´P‚ɽ’ˆJf\+Á¨ÌPFÀÚµ[ç!CÇ<ÐøÎcñ/$HßùMý!Ùz0 Þ#ó,ÈCå•€a!gâ{9“¼'ßeŸB4mß’9ù—‡šHL¾Œ›l»'Û=Ï{4þ°Mwp úîÎ^›K):H‰´äZSk%˜•YiÊð‹í•ÿái+*ù±Œ²`4ïAp•ŠlY.”hòR]¹¨5µ¦£2¯¨°d\w:_ÉÉÞ >dÎ@˜_ÔÄ=6ððMÜ)Îs¬¢Pĉ${Ž~4’"+›¦=«üC6¢ó ?sòŒö|†‘‰0øÌ¾_濲äK 2°RÈ!ä ¿E îO.Õ· %âD" NYp’ ™JÔwèÃb™ŠïÍM¤ÏRé£Tô$5²‹ÅÈ®#¸Lʳ0û€Kï ˜ü½f+ÌS‰&vJ4êég™µ†È‘#¡'yæätrbÉ„­–ÊŒ.žð<(½‚Ÿ[KaŽÀÎ$PÔLR[~quf%Dò!\[ÆÃÑU%¦'Rs•d:8وșèÌ84[·÷j<· VK^ºâx|úÅjPþ+EÄ)ÿ%fù3ËŸ)Xþ³Ð›{Äô·ÁÇxpn‹˜ˆMló1–ìo܉ñÌL¯£•µk¬¬Mcí™ñÐ쓪=¨:þ9åìþ·b:8êt<(dç~$tá‘gw£‡COzô ? Óù¹ô Q$þh@.Â0žüX‘3Ù™CÓ¡»{]‡/U|úC0YÀ¥Þ3–:(¯ÓÁoÃÁèûvDŽGæîÛã¡Éûö^MäfîÛáÀìëÅN ‡†^.šâÿgOêÞ#«ÿ8Ù¯ìœN–9YæehB<ž ˆÔä‹©Yï¦Z‰Þ Öä‹Y[ïekumoæÒ3Å¿uÃEü<¬©ºî›îO$Ö÷t Ê‹[KwÅ­§»‡"ÖÔÝCuºßnáfÕÜ[ßKKua™=-yjÿþà¥të±Í.ïâtê|6}õ÷ü›ÓÙÔÖÕ1Ix¼ƒ2IŸ¿=xý•ßT}Õ"’ ‡2™ð,ãS§Uª46ËnÏt`Ʊ°ÙŒg,›æãÞrHƒ–#‹NSiŠ!ÁùoËûÚH*²´ A‚…€"l{/£XZÁB@á{¡Ý¥"+’cðàA\»â.»/8ˆàÀ#€o·{ðÍv€¼Õîó?|#çTšÊ@ëö#Ž'eƒ‘”K$'yaœ¢õ6«p’ýÂf2³ç„øàÇ9%>ð‘|7§EGÎYÑQƒÜ$»9'39sÎÊÌΜóÂÓ3íÇwazúõ”«¶¿wÈ|TþŠ;¼“~TοŽïžö-‚.®’ü 9ÞËÙäï·Œ·¡ßooó¾Ù*ÞF­›Br’r&´—¿}’›Öþá·[ó}yÈÝà m…o¥u°Á›ïð³PNÿŸ“®óî»íѨíÛiÃF-¨·sP ÆÎß­«s0þ±X^… Çø)Ò£úTþã‘«ÓY=sÐýZéÞ‰7è2§Ë.o¯œ¹é÷¥£R>…`L¿‘žó¡Ú– ºP‚I½ŽªýÔSÑTÊŒ+è…îHôÃÓ ð†„ü²Áox ~Ð'§ ¬þêu6ýAÛmʸ7aíºC.YáE}DTI +OŽâÒ”ô¿AXé‰üƒž ïZì^óé×DüÑÍ~9©³ß׋½Ô<Šá—àÁ]àËäµ}`Áb0Wô!W½¾6Ý·°D¢68Íd#)—9Ѝhb.ž$&Cpù/×0 äÞò[ ‚árÍ ’bÜ ¯è×È΃àwÕ+:+^îFr±AnJÌrSb›’QÈîX{žDp¿‚wœŒcH DáVÕb‚… áMH–Æ5ÖêþTè¶l¾OÍãrêuÕ–ª×<Úžéà™ ž™óÌ&Ï$à©¡S§-͹SâFϱ9šIn)›XÃ@Â.æÚON:úq°…êÕø¢&*˸÷ô”à"Lž(4…í›åCJXräƒãóA(­›€éPÓ!ÊÐdmá¸KÐ~†ß|2Þ%¢>{ñ>¹HîsÙ]"f#AÜ%æ(âGò“„Kö~’#ÉQX?—$Á5´³á`¼ô QÄÐÖEÀ#¸|öŸÜ¬ ˆ‡ÍÁ“ûü~GÁ$wêC/ŽjöÕ·u(Å|Ég ±™/ñÌûc5_ÑÉ.©#+)ìâzFJ–†‰Å¶Ð”–ÓÎ…Â6ã•ΤTy+ÇY¸p¼‹GL"†å¯M“Ë!.ï"Äiý‚ñV´ò >B¨{ëwð«r‰¹¶V´ÁÊ/òEÑéG¨1|ÿÂÆ'qß{ ¿ÂÎÌ’ÞƒÁ,øÞƒ‹é\k2/•µ§ÂØšåÀ' FY0ʼÉ5 =;÷Í0n^ïÚ×sÓHsáHÁ(óF’–ö"ލâ>"ª$…%í9´¡‰zH†Hþ+œßÆB̶3bÉžF"®Î/hïž)yÙÔZÊ3£ù¼YæVÁLÄx·}STßwæì×Ä.ôEzGyåIÏlö̼gJðÔЩÀšßÃò-)žÇŽ2àÑQþYLð@94L,}Ä„VŠ’Ý±|¡©&.Ç'Añm}DTI +OEŠÚ–¢¢‰ëXØDªiu‡®\%Š™Ñh~ªÙLÆ(è¹ÞYðŸŠÐjÕ†j“¢á5£G3ySvŽ• ¥óJÛNs¨Dl‰°$D}Óù…žá£\13šn0QŒ1öMSÚurgIJ#qmâÜÛk§ mí%£½ä€ŸÊôIèF24o$áz˜BKëâÒƒ¥ ":—bÔ¹¢&i„‹*ÏuÛ+lÓž5HÜÇ ã Ÿ>"¨Þ/£6lÒ-YDà• èݲÙM‚yï¿›† ±÷aÑœO|P¹jÕÙ”î_…-ÅWn$àÓMÒVÜ=˜_˜É!ùôk˜Ã’¢÷N,Ý0)F\|C E·3’¥)2éh‰c/h¼Dµ˜'aÛÚX‹t<‘ø]Ô†%’}¡¢Ô6ÅMckÃÕV|»ðQQmS”PmS˜D ÁçOP¹T,i¥ºh–’NA±b©«dtòË&â$d^>×öÿTe™¤äb^,Þè%/»)T‚‹XIñR_’VÒ›”QÞRº}·ºëoVàFXȨ‰¸öšöñ_Ö„ñ›[“à*Ûù°8ÞGz} að$@á)>tWëD÷ˆ¨É5x%¸?”MþQ4Ÿµ mãBBM."œëù^eŠGÔ‹F½¤—Õ3T"¶DX<‘ˆC”žÏ\÷mŠfßÖ†äp6âÆž"¿d6.áe⃈IÄ|þVåþt‚J³"™F+qe›"É+\ÄIÈ&¬xa`[u­zéX„Wn,âä&ð &Q÷‘  Ɔ06Wõí¬dDkg4±X“¨O9fEs VÒ«Ìêîaò$·Ç˜K7X‰oS¤E·w²%*¸$/Tq3! ü•ÊÖ•°ñ±p`iœƒ¡3ÍCȰ°`!¼…„Â&éœÝÚ°4VÞ%ë£$¸+رžGx7xTþI™ ˆöF$T0ÓG^P;•¸°j“§)¬­åŒ–“¢°6>"*Aaõ}«ZCP B"öxD,gÙäª"*iU aÒTň•MTS­Ÿjuø$kÂWæÚù.žGÅO©Ý{0ƒ‡û#9¶9ÿå~äÔ¹RñesÁa—lp‘áø{q«»ÊX+™CûÒŽô·÷§Gšj}åTk+'YW9ѪÉVN±Ú°|¥aù*Æ;m›{—û$´ûáØ Çš¼2ï%©uëP¢šwh%Åãkà:R°4LN¯¤37¶8†sÔ7@TË6_£üᥠսG!jš†Ip.pwÕ~^UÝÔÆ·ô¥W ;ËÛe³ìÙD^0Çn 8—R˜7u=ü$¶q pÂÜéE áº;ÕvMXåLTP/Ìp°GètœÍÅô·:´ºïM}µRÈc7†rØCqrK‰™Œ0œŒ«W½±½Ém­l³IW ‚¤’ÜêÝá‡ÉWÓöKŽ˜Å3Ìæš¶rb¹d·‰Jxc¨$·ð‡« MØxxü ±ó!aFõów8”½é²”ÉÒ€Ât¡l–ò‘V°c;Žm½6¨ú%ZéÈ)‹æþ?ÅÍnoCA¹ÿßè~;‡û´%TQ+ŽÌï ò°s/9I7Ns‘>d#6 Õ8QFôÀ£ï{ä^1i¥;ÜZIÀZÑŽ·s$1“˜„Ì߈–1]ë™ô ¿HéêZ¼ÕzÄ„Àp&² ÖCŒ›Ve/Ü+ðÀˆdŒ$—¿m]«e_úb. ‘sÉFgØMø´‰¸08Ãn’gMŠÝ)“lN)ß›Rº—£t+Gr'GÛÞtç¨eZÑ{5|Pg^MÆÝ€tì…šˆz ߌýiê¢ù´”ªµ§VYûÙtÅ©lš{ûNðQÿ+¦'ú¨Ï¼>›ôÙxüw÷VidéÈ)õJˆÄ„èIv¿žÔ½0ó,2ûíŒüµBâ~Í‚Óôv88ñhàëáž|1܃ ¯„ëü}ã'dCÏãuþž¿o²`ÀäÏu×›‹Éýë'øàZRØ , èáµ"jªöîÛŸ…¶ygZ°I¾¢:¶‚ÉF«laEÑuºÐuï–'™¶0ÉlÀä÷Ëí¹ÓYø­rs%(›C#”Çe+#ŠK_:èûŠe)†ó1•ù–·§R+ËÞ{wpvg*?³åÛ*?³ÕÛ*?¼ÅÛ.¿©|­ ÿÒ€Ê ¨üµ=u:÷72ÿÖÎïþe0`óÿÆv Ú¦ÿm:µÍþØgj•¼ñC»ŸÏ' ês—çŽÇ‡~êê¬;{3­ ëÀÄ•ÎnrÌl €hŠq¼¸ ÍxhDCÎÙvãg˜P"Z8$ÃL¡¯uª¯šnUípïyAûÏÝîmæä~v XRDMPÉ$ &"!…0?‘<ô%ù;z÷5/ lP’Ð7µ°¡‰îÞ-¤Y[P$£G1­TJ¬äxúieSArAWÕf`;|.MW©ž%XŠáèAÌdö#¼Øw¤¥M´\àþb¾èÄ 1Ù‹©Ì}ßžÚ®ùbŸZ;8»3È‚“ß{z˜®¿«’ÙµgIò erVÙÖŠ¥ûÔgÕJû²µ‘Œ œóg§<ÅyO–³û+l¹ëËÚ„dM,ÖôZ²p )¼…àß$7´ àß$øšû£Jó[e,DÌ'™\†>7§tgýÛºù´3@!žLþÊÝtq*:ó` "(Ã`‘ ŠÂ²7¦§Îl©[¿úT¡Zßµ7mÀÁE?vBQü=:Í[yphgÓXg¡&¼šŠm-ûá~!…;)“¶UW-¸ÝlähêIÎ%ïz#hãmõxöQO…×–ïÒ_‰áØÚ’øaßS[*úŒo àìÞ óTþÎiò^ô11æS ü'EzTÓN G§G7µvI¾%Ä~”¦ìÜ;I¯Øk7‚küÒ³rc0;u>›¾úÛµ-îWÃâÅ]P¬É%\(œÂú­¦YŒ•Ž_X¿35»ÅîD±;>6±@Ä6;±4Ä]bE¡¯ü…½ÃɃ˜Ì\鎷‘¹ƒœJÞœA j#‡“r.ùî¬^jñÌw®ƒÚ*ö,?•hX§¤¢æ7íEÅ©WtWtÔ˜L2o’€Å¯é’há$¤òNZÓ´§ó=ÿÐ<Ó·qÙ`ÁSHâKr3u~ïÜ_â `¬¢G]`ˆÑ\øb…skº>¿Ó5h-‡F9•Ûýf•Ûöf•Øïf™¶7•ŒßÞÈÑÔ“œJÞ(ËV¥ÎìµLà{ý›½Ô¢ƒ– ìáNK둹÷p|?wZ“ øT¦÷ƒÆ|ŒÜ½“$6(·ñ£Ð²Ñ†#úÐMÍ(Øêq†QO…×çÖä;Ýe#‡£r&ùWÅŽ z*ѼNùnÔß¾gäküå¤r°'jÐýŠÉß =è¦_9—¼0® ôÐÝ7:ÌuMµÁIfh°ëšˆ[wí¹¿f!ÖÛ€ýÍ1°»9†ô6Ç(d²ìTì°Ve˜`eEp`„ÄE/#Aq„8²‹cgA².A^,òò„(½(8¹Ry';íK.}pà Ñ{cáÁ‚´€Vœ¼£Vº0ªÿnç}ã@„Ÿ8thñ:>:®xT¼ŽmóNk¾uº’ãÁ9™|Úr™¾ÒÙ§]š™ð½®Ú’X¥fsÁA&Ák"&CPù™} ×ÌŽ„kx/‚(½(8Yö°uàÒ Þª¼kÉóvc€L?å¯{׬Ðý£mŠJÕœï¦,ÔíÍ=L&õ¯Aýk¯~•|Rgƒ:Õïì]²=üB¦Þ‰‘Ðã/¢ÌÃ?¼{«9Ž¿÷áH†xë¶ó#Tž(B ›Ã&à°$Ȱ~’¬~í<a&A½zw%©— Âø\ò²¹†™v’"Øy ÁCRC!ƒ0>¼yë‹õqôæ­OÖÇÙ›Ÿ¿Y„¯uÿÙtÂq!@FI-š‚ˆIÄ\~÷‹°(6ûER>€(½(8—ùÑ”÷Jú$Û› ƒ‰äü1¤R‚×á¿ÏºS݇§øëÞ¿¸×“Î(ÿ³?.ˆ=ê Â_qý‹ð£>„Ó/“þ‡±§ð­zþá¤ò¼¹×o<¦èNýë@ýFp§~þaT¿yÎ×±ïýÍ/IûîÂñô1be° üF9~£ o/ðÍÿ^¯J4ù{}*ÑÌ?÷¨Úý¾ÊÿhZ];éN5OYq·½¢Sùð}ñHFƒ_OÏ_ozóÙÓsþ«Ù3 žÙä™ |ì µ)Á7žIÀ'OÜï{1ݰWÅsÓ>öKG Úï»;9.6” þ'>ð£qÇmä°CÕ+ó“êûΜャNÛQ¨C%.óìi'$¶ý{³Ùô#jÔOÀ:m&øN³êìXßÊ&ÿ(šÏðŒÁ¾ð£`Çú;ùyNv(·–7‰ íÔÈPZ?/or{q |ã-ä0̆YÜ>zù™H#çàJsÑùw~¼î;/éN5ç0áæn…e¸è³{ötÏœ{6¸KJö(¸M.lú`SR—Í55õÂ2µ·LIýÏUÿ®êË«ý»½‹‡Äïö.‚½Õ»x˜ß=Ù Ý–Íw¥ßè©8¤ˆÙ,ÿ·É†$rïÛcos«kQ‘h¼= ÖÑsnÍ-ª% nu/a´º—àXÍ™u§rÜ8÷ÝyF‡$¯ì²ÁnÚ‹÷­ùGǤßö%ìÑ–z†%èùðà ªä¿7á0†W[ú¾=OW¬û–‡‰¸4óÜGçBâ¼ÕOxˆñVWáa|ª·°q/ÂËUŸ—[Þ?ÛA`Î.[.%½ÜIOJ:=ðUQtïLB|ƒ6n)"žZ£e2ê÷†)Ìï\ˆßÌ ðúk;%îÂ/ ­÷Kë—Çž½ ‰·¦I°gSŠ}½*—ßK¥4aÆÅYYí×ufùß5†ÏÁz寧q6§=lá]ÓtüTÂÇ,t½/!Ý[À\ƒO1÷¦Í,Q)¾k ϽwsÍMQšû¸iáÓ'ÄLF˜ NÄånóŠ|ÁzáÃS>2()Œ‚ o ‡°|ЩÄL`ŒÉ$ûy#•ßý.¹lô0ï §/ù¹ÜtýéÜiõñÎÈÔ’Wf0ÖÜàvfÙd&b|ø•L$%udD³y#yÙ=ÞYáå¤4 HXOÞw¶Ó7³ ñtàø^ɽOö:úCÛJu~Q„sgr6~ÄfÙà!ñÌ×IxVV2¬ÁŠ¢{N¦Mñè|é3>§èЦØÌãé÷h`ÞñO,R )(|ЧÌ+3KüÜy^õ×ûÓªXÞœUý*¿$º$5xúH*yo9ð€¦«ôûËBÖj9t¡`­—íÇk~XãK' ‹Êhÿ÷þðÝa5½¾9&Þhœú×ú §]a=¾¾É¼‰}mýŒ{S@•*DÞ+ß{m³I D­ú;5¢|3ªS2QýNyi|/ï›—’7Ã…ÿLGy;US¹*_`'0¢„2Jøã%˜¤ !4 ©s¾·BÜ>æ{ËÂíS¾±Ü*¤½5ŸÓ0‡©9dï®H)>õÏFobx£iÌÄÔ¦®GÙ“7„ˆòÍäNÉÜ>Mçgqiãâ7b8óýÿ[Ø-ïdûoøß»·¯1|ócÁ·®1vãšB‚·­)#xÓš""·¬!!zâ·«!t³ú?ÿ?¤Öý߯…àPÿþ÷n­óÀµnŒ׺1Vë¦`­›2‚µnŠˆÔº!!Z놀h­ò½Që.ÿŸ<þ·ãìgs5júþ^â§Ñ¯§Ñ¯C£cˆ§‘ûíÞfÁhú®.âjOª­N*/H[†¦ÍœG濉9#f<帋J0KÂhªð)/äÿçíL·\µµ®}EœœìÊÈûÝÙ&E·¸ªÎÕ±°¥5§ò#Ù]éa=K¢jh°åDC4[}ÍôA}÷ªÖ>K¼ÖtÓ¤š#-¹ÑMm.ùÕŽÉý÷×{©ú‚(ÔÕæ4=wß{§œ7úa¸ *ìæÉu ïaä!$Ë»"iæIÓ®HšzEÒÔ+’æ]‘îMý ,ͬ9÷Ñ24ç‘»½Ê.uS6ç–ñ–Ÿ‡ßÁœ<ç:íí:>s´|sà€âþ 4y;Ÿë•{f)‡R×~_±_;Q2Ï•”Ç÷ë—veqHË"Åî³[ŠÐ©,’‘‚éxî¼ýÎÇsîwB>;q¿4òìCx©ãÙŸðÒŧoᵈW?Ãk¯>‡×ïûÞ[èŸ:óÝŽê½Ð3 q³4¯Íª^iæiŸzn*ôÊï #³Ÿm†^M*v!¶C™§ —&´›zh,,±0Ž#KeF‘êÒ¼4Íí‡+N8ª©ç$´@aÏYhÞ>ÓÐ<ôCæÏzx‡ÌŸõöž?ëc:¯µƒªÏ<ÌuŃeóšrÞÞ1šÁÀFh'ËêäoIüs8óýZUGΕÇÁƒ,ç‘Ç’¥YÒô@¯KÊS»¤<» ëAîÒ÷mN±[05 ‚½¼Æøzhy õõ°z?â×Cª4ÿ«5å~þˆ‚Ôflç³ðЇ™ÏÊ+Vo—^ñ0ÒúB9·VÈÉrp)¿‹|´üÖ.òóXÅÈC­ïÒ“y(å]ò]@Ht’.þ}7èžã9èžã7h —Ï>ÖfivQvñ²¦„ßùöpBG»¾ºÅ% 3­ÓJ1Þl](¹á…ÙÑjVwœZ—CV¹Ï¸Ä˜Øeœ½š5-öν¥ÈlÆ©°–‚ètê+-ËÛšYe^_¥šñ¶—%”íPßéÌ^ÆÏ@PØžðšòìí{5%šŽ§ûÀ#ØN<‚ì¹lŽiyèì¿qtDPx"&#‘ lŸ*©íù Û§U^{^‡ç»þp°·ïºÄÁþ^ë{åaüÂP`¶Ë0‚`×oL[¬Ùõ¬[’½M·8ÐÔ⨦Su¾¦8Q2AƒJî(ЮžZUÍð{††õôð«jÔq~˜Aí0r¯ùA2ªšº°¢Óß b.šÜo¦ÍCÑ´#滚P…;@\vr|í¬MÁ 7/€¸ïäøÚïA4× ÷´0ž£¦Jjª%©*û¬=\Òòt° Ðt]T\ÛPK)áé3¥™ªà4 éàfɧ1Ýà‡{P3ŠâBøbð„‘û _ l(}ÓN3>:•5]«¹yrÇ…—L<šì7½Ï£Èž¡±Ó6¸kÑõƒy#µY'N®:ã(mø«ÈÕð¸þÈ‘»YN‚<¢_ÝÛOÑ"ÓY r—"mÛe§eÈÇ’9YвO3èå½få[1ïÕ+ßšù­cùRíSZ^36¡Ð§J,p©ì{„‰?ÐÉ‚àI@…í¡:¥è9µ¡  Ój•1¾A8@B) ‚¿>pu÷LX´ýŽ•+Ý5¾6€›%Ó²ŸÁV,L°Ž¥9-Ákž‹$—»‘µïC›fŸèäø'ŒPê;™1r£i:ý¸1j× àw&³»Ã’8*­m®-Æ.žß‹_…®0™à=ú)¼®é› ì5x%yÏPž;¡Q¿ r¬ÉÍ{Äu|çŽ/Mlä}gã Âé'œ“‰~ˆ]:dщyÏ¡éÜ© MÍ£~[£~Wã}S»}þ?/=s0³òQi æl^ž¿ÒŸC‘U;Óœ‰â¾ðGBÚBÎÇAÞ‡AÞGAÒÁ% ZÓ¤5INS„WÅp€0/l5Œ%œêGÿæÜÖ$Ìl$ájM—f`‡…ÉM(ÜNW¤kã „™YÁ«6ç}ž¥·Gèg`‰áŽö3¿Ê. ÅqÃí  ã8rF…ðG„Gƒ°F‚°FPF€,Á 9GêÎÁ¤ G.µÌv˜db`n–Ln™,1³Á&Çîx+€PÅäñ·i×pgþ–"3¹Q­¿ì`Â÷#7Kª6±à¯H /‚Çþ"öÌ|°¯c¬á{¬¡{”a{ð=x¸6To™v—ÖiùÓv Ú£ Íæ™{7®™•…ý„¥uIñ|Âa¢.18Üí(~æ`nPGñÌ)Õ}ùÅë…©M(‚øý̽×ç%Û÷‹¢µ&ab#‰£fWkní" ð#âk(.œ¬ $wš/Íöjj5/¤I±{ÂaŽwnÚªNSǵH›ÏBQŒw±˜ù ›LXnt— ¨Ðs°ó²`Àã-Ü< uq5LKz"¶d^&nd<ó}ÖóᓞgPžuÁ¹~ë‚sùÖáêvx>s0)¨Ãs íð|æ`RP‡§\ ÆÃÒE,4Qä:¿?¯…ú‚\2‘ !·èTÕôvHØÝôÌ‘ùLœÄr`)Â:¢.$†®#:4h°'í™iY eG æM•صá™#”ºsäRZ•'ðFû€©LÄbšJFè\w¢¤VÓ¼4´³¸XÀ*h»Mܽ¥Mì>gXôÈ8p¶ÄgÑìÀ¹ q¬¦}¾Ì« ¸›ˆ%õ«¦ÃFh;Á&Xü¦ž + `b)€Nsê¿ÒNŠ ÝäD ÅfT2¢vµîíúm¿j8ÁŽC›£S¨Ý,Ðpb‚º¤í$åf uÉÙCj Jw¸˜îp!Ýa"ŸêgÌ0l³É• h¬'Ü‹¡Ä°DšL·°É "W±À¥7ÏYa¢Ÿ$tAè´>óþÈSóÒ\ó ûªÂìöpBÇL¸qnµÁ¦GÜîˆ1 žO¹ º€g_Tªc¼Ï;@2«¿Ë/;áhUâ ïïÀ„~ó–: qêOPìNÚ 0ÔµÂN¦„PbDÈ-†LNªÏ°í{·™‹¡$#ÓAEPyðh_8Ü Žõ~_íìÂó À•èŸ02‹IF `4¯‚·lKi9YB·y9½esX°j qÅ@Öj×2ź^W¡‰ÈãÿJ ìTZdñ[€4þ߇´mKÛé`;­íSpÀÝK Äïw²& ç[þŽæxƒä8—!c<œ!bÃ=Þ iÖÀ Ç©íšÚ¦yíyZ¡9Ê&Í©²[*ÇZ'3•©ÿ•žÈêw"KÛåÊËž÷…Îsëýlw`2Ñy×Ó v·½þMÚöú7cÛëß·MªË¦ùZ™Ð#C&³ìp=Ç.Ò©³í^bIµ.Îõ¸fRWï¨2Ù‰zs¾Såõ¸ ”èLEíÀ.ä… öø}ú¢´ÃÈMö-V¦×%Þqæ0§_ìâ×F³wbqÿG,˜»¨ý©l¾ìêP]s%Èïï…˜ÌD–²íÅBW·7Lž8ó¼êgö•"?Q©g÷(_¯MV&ŸåOT¦:óLŸ%ŸëOT¦>t¾ÿÔiUdvXk§´^þlÿX¥m‹.üêK—¥c¢%3=y¦ÓÒBÌQµ[¯ÇnZRZ.ÿB¬zÏc@ùX¯?#y=Ÿé§û#””Êsgì{ùÊq‡wÀÜ3ÞÙðòä¼D:;v®i9`ki‰Ž5gÓ‘h©‹ø4ña"Ö³ýQ‚þ$Á} ª2-i‚n›1îšÜ›æ¹k£½&ì³ñDXv”S{ ššª2Ï‘ÝÜP’3»ÁGlï›{¬ÖNÕgúÒ#´ô ×γ´ë Õ©:o›¢î_%c±X<–Žg<¼lì«Ð#e$R&à œûöb{Åì°0WÃJR`/˜‡ lÒªæªÚ¦,²š«‹k?bY0oEžöàŠï  û;”ä^é‚ç|‡\ ŒäزÛvËnÕ-³=WæÍÇþSÚ«²'kù€qÿ-8N®ÿ–‰šŸ‹ë#eãÏxÙø3^6þŒ”_ñ²ñ+^6~‘²ÁRgy2¤ê†~áBâªw$Ǻ5­£­õ%m±8ï ¸ùJrçÖ6¹¦Yµ\äæ¯èŽ©Vy× ¤/x»XÌü%¸Î“'›ž‹Yñé´<~ÍêÆ5mçBR°•x÷B–“hÙ`åaœEe„ÂK4˜‹ Mÿb»„ÌÔgú’ãÕv¼ÊŽT×Lw¢,lWæÇª©‹¾áôç<á0Ë;7­*}Û]sh9ÏDn&æ|g&–I?•M“³Í×Pšú¥º“­É¾LÓº™×²`}r~ͦå`Íæ'¤Ò…ÎãäãÍMÇ„&dc™áOŽ´Gs°¥ÆÐgŽE{Gg§ƒ6>m‹Ž’(Iˆà³EDm¼ö0_zxo¹ æ¾Ò|Í/}cÊ6íXônÚí§äbƒO¼ß…~êÛ˜™9õmÌÌœúxmæÒÇMÍŠ%7–-9æ§£&gÅ’Ë–œ*-J]œë´:3K®EI×Ã"æ­-⦫-âf©-â%'b^"¦$R6ê:îÅyÅ’Ë–œ¶i?b&gÅ’Ë–]Åm9+~”äX>%9ß?Ë«ÌE¥¹ê¨ï¯àpZnðd'焞º;×—ù®üLôg¾#OTÖ”MäM™¼ù^”zgOã|ð§ÕûmgNޕωÄÜo}’®r·óƒE¥¸ÞP’ù %ºw*ºŽÕîw±$ÿ–yLª]ýÜÆÛí@Aûy¤ë%ºóÆ…9‘$oÒH°%DâEÎAä8³.qÓÌó_ѧ¶ìbAùiJË KË@ߥ§S‘ñsàS²ðæäÁ\7™#œHÜýޤ[Ïd®SásjN@H‘.µ¾Ü¼ô-)/{X0k¬ýèAÏ€ýX#k.3#—ûQ FÖ\fF.; |}¾8YÙö7ƨ÷5—©?rÙI°ýŠ1’°æ2“0réIЗ)¸Q© о~E¿Œ¢_FÐWߪjû8Ix`“S1±#$ߛÓMN¸CÇ-èkÑþe’Ì 0–ŠLŸ41…Ëç™’Ô:•ÎF5Ÿ© å•¢ÿ÷_‘ZøNÂßÅhá&\ž8Ï”¤¡…;© ez ÕÀcµï(Í›gMÓäxÅhÚQZv„†mv²¢½àPôŠèïr°óò0%6Z6vñœœ<ã)™‰tå‹tá‹qÝÛ†ájñþô̰¯$[…H׿ÃгãšCK Ë™"ãìˆq:ÐÛ¬«…GiÒQï¢qo¢ï¡çŽØû±†ÁÒ#ŒåÈ{ÿ]Ãޤ·`Ú4,Š!K0Òó^¤-X&rŒ§>ÖhÞE¶û*Ê\ìòžN5jŸè”“¼_T·‡k™Ö‡ü’µóMQ}gå+|Ç ?¶,ºM,;¹³“5›šÆŽfo±´4À;”9B%›“™¦Œußbiæðz‰ŽP»é™5g,iæ§edƒ'dæqðBÔëdÈ¡ÀŒ=œˆwÝU¢^T=+g¼Kî®HÜ4ÅMOÄ´P/מG‰•&ÞÅ|W$ʵ=ðh±ÒûÊ?î§wJ³(—¬-œš¤œž“™ˆà[ßk§h¯S¬HÌú^ÍÉ´æ s]‰šZeM§Ýøé܇ÌÒ_‘™©¸v;+$KÞ"qk†&ÃK*rVµêŠ ñxDˆ4f„Ü¢oi ÕÆ#BfÑ·‰A à ò' â‚ ·êëRôjìÑ%,ø)]!t¹¿mˆD[¢%bW™dó7§¢4—Ò믢Ž{@±éèû‹kû‹ëú 2퇺VeYTÜnŸQbÃJlwizÝ6ý¯ÿÒúwûqnÛÌ ‡2íU–Uu†ž«!eâv€d{€ä~€(ù‰“”8™ èíÜ Ðÿ`[<¿Çð€%e N ;Õ¹âÉoˆï…ÈV6¿™ž-Ò¶Rý¥ÉéÐ_Ú´Kc¤ãýј©š–ÜŽ–ÜŽ?ÿFòþ”EJT¼ôÄK )ÓhIÛ¹W\7˜‘ˆG0)]“VE}ÎL!û“ñz³‡&äâ - ùDys„(¹i˜'ÎUÕƒªÓŠxÊl‘„$ÜtëkZŠÛ&öáÔLÜà„œ\~ýnM «³´M¦yõ?œtìrÁL²‡Í'lrÇr36|Kåùcƒ ŸeJ3U¥‚…yê<NbG$f9 zÚŽÁàc=Ÿ1r%pô¦] _dì‰"ói5º€˜ D+Û pûd=íž‚ z OØÛ×ðËÌWœëKÐäèq´¤:v²©éŸ UB]øn”HÌ®`¶B‰íÌca:L¶t¯ªCšWE}4võàŠ¼ïÜdâ±\yš+t#\•—I™òâàÛOÓ¨ì9›–‡¼N¡‡Ô–Hʰ’™•X$x[&r&jÍÞcÅÚ·Õ'±œ äy ,‹ìçïCZ7UZþв°‹Æ3qG'3šžYˆ`ϵŽ×âµ€H B øêåÛømvËßã Ø‚#åAO„±ß<^RG‰¡õQ¢¤+V‚b¥$Nþ&ó¯´˜ ¦l²´,jöUƉÅóñˆ8 ˆãÏÑ®ËRݳ›ÀOÂ%±Ò+ œ$L¬¿x`ĵ ÓÛšåå lÑ⠭˶åÊF¹ýG}PŒ÷|H¾¸‘¯iüKYÌÊY÷ñªþÚÖ¹îë&§§ã‰LKÆÌN…î²H©x$3S1“I©°+㱯 OL‚þÉs‘x}nJø— }Iíº ä¦á¢â™x búMcÞ¸iÏI.š\w¤qž‘ÖQ-©’ Gn;Þg¢Æ¼6|QiÎkÃNšXv¢QÚðC`TKª$Ñچ_0QcR®¹ºÚ±b‡4ÇF¹Q2Í*™Q‰E1ìlmpäî$ÔÍÖ& f!TÚ#•²2heÙPÎesLK‚Ó±š@¨.„› _iͺJ8PR©7¼%$¼¢žI¨Rq¿Æä‚'ŠHéNë˜7¯¡+úŸqî«)–Áb_E’`2y¾ZçúЦÙgŠMð"s20’“™LKEQ›ùš[é¡9þ£™¹p£)ɘÐö ±h^6jÝCmº™“‹‰œLdz*"œ$n45ôÓd ¹3YV_Q²ñ€æfcBÓ²±T\f7­.oĤ¼<%7K ™ŽpK=EeS«(™Y¹ ±`~š \¹Î‹ÌÍÄH¦§ÕïÁ¥¦šðì±l²Ï§Å3—“„‘Ë>)æK}§ôPrO ™“ˆù2‘i©èTÄ=8%!78ýac|…È”ù±S‘Ù­ÆzUµå¸,/7ïBÉÑøÊ²:H²Dž«6­¦õTǯ’1_ñ%Q–…11DxÞâ&@ž*O‘¢Öt9½>Ÿ™¸®arëÔÉfŠóZÙgª‹‰ LfÍNA2…™¢Á¢í»³zü[**=S™õ»ÊÕæê4«ùë+·–ÝTT{¦2ky ”«ÍÕ%h._&ÎUZ°.Z.&ª¼|û™Lñœ·ýÉÒ.ùÚŽ ® [¯,k‹¤Zs…¹®DM]_š> ý¦ÉßÀÌ<´MûAÎÀ Ér·H¦µ®zöm…dY[$Óú'½4M„&¿å²üo\yô…xyÛÉt~q{ K_TYÚú´Î5ר…&ù? åÙø*úì’5æ!×èe™·KôÓêK}yŲtYv6‡HV‡H“¥JåóFøUÉøÛ(RÞb¥)VVXI˜þ5ŸþþðÿþûëÏo­zSüÌ=ÏÞ‡“¤‡ã$lj•´éœž¯~“æ:NŒ¤='VÒŠsÕêºiÐm™Ã#eëÃÄÊXUt¶ÆcÈbdi:@´üÄKL¼ŒÄI…Eóò½æÇHËÈ•sqëªù_#æÈq˜©Z&^ÆÚá™àù(qòÕÆ~˜~±‹ÏFLÖæQRµ#n¢þ¥Öµs¬x‰‹ÒÒ~7ú7ýŸ-Ú«ïæ¤Æ€“ÌÍCÑÚÍÆx#$ÃEçeäFOb¦%^J⥃™ŠßŒÅJ½È¼Tü†/u<¨aY1kôøG~VöBLÐý Érx¹Š™¢˜™¡%dû8Ç<ö¨P³òâœÔ<`ꊖŸ,mûâªìLZÆÌ“ë@Qòõp yÞ~ôÁ~@×ym7b4%À¾Œ}ž, ?:±_ã×ÍÒŒW­8\uÂqLÇ'Zê kKÄ}ÇgeÞ ë úÎÊ!W|óG013˜™‡¶]æ‚P³°Á²r°`‰ÈS}96)8ëñ-–”6Fúô¨#ea…fg¢‰Ù(ZãŒØbIY¸a‰°»‡ÚçCn6T’ÿBeêS­©²4Ç©“˜±È…šäÿ€&f£SºïЬÏÕõJrÃIÙÀ‰9ùRÇ—Á-–”‡Î@©º~Y•„`þŒƒŒW8Š©‚ç&íÀ`K…ÍBZ‡uUu?ý67§KQ§¶8MúÏ‚¥'[:1-Ô,P¥QÇ¡orUª^òÒ¾5(}û+Rõ{ÊÆí‰ëÄ•Í9^vÜpRb6pbN¨9 :ói—Ööç#Ÿ!ïDÊÍ‹óÖM+¢¥k—OÊÒ3MÎÑ<•­¹””aÁo H&h²‚¢îë…ë2Æk³ˆ8¯W½ËRªoW²…»’mÜ•Låqa²ôšÉÒ™LñæÔ·dï’¥m‘LëNU åq`Ê2Ÿ Lw­/dñ;‘emˆ°2il£‹i2Æ4ŽAŸùË´>œ?'R}¢¾ù%kZuW»¦ÛôÑÌ<RÌß ‘Xt2¡“5𙢑ˆG*+3•©ÏÕæê5›v,EÖ}¤²´g*S¿Sãoò4ÏÍoÙipÓYéØÐá´0>gäŒÏ9üy"ç´hN Æ[¬úîUW§¥©æfè2Æ5y‰ˆn‘¨õ©hµ¸Â vÙ0-”!$O0Èî£8Ž›9ØN£,Í.Š%ë¤ÂÖãö7*OŸ7rÉQ'‡<«¦h³f¨ûî‡àìÀ!ºkÅ´1wà®Èñ1ùv_¸¬GåÇ`ÙòliTÞ”Ö‚ô°Mi—p†"ÍŸv@×B½.Œ®õ £;ý’\ZEy}$V–„ªµy`<¥™½Ø]ÿ&:ˆè ˜X Ï—©Ê´ÇïvÑ¢¼ÐŸÚ¨°XD{Á&›pF…=†Ê{|Ååå€ô(x vü óåÏÿT÷+BƒxuJZÀn$›ð#4——Gˆ‘¡¨Mè#vúˆÝ„>¢6¡èMè#zúˆÛ„b· Ø (jû‰Þ|¢·zã©TÕt?Z LÉÇf·“9Ü ÄIff‚Ý$"ä ‚<ÝúG›_òOqn4' 3š}:ÜBŽÑÜln>"5xÍã#^óøˆÔ<>"6ˆÍã#Vóˆ×:â5ŽHm#bÓˆØ2x ã<Í¢è?²0ßó4µˆ!X4IïNBå ‰¡fçÜåvÿ¯šdøDEï@†/qª‚‡º²¦'<„fW 5¿¹½º‘ÍÝxZ&6ø™aîÇfç„2Úßt§ÎC™Æj)tvRf:!-'5næTªîo+µ©k‘)âÃïQÀ4GIŽ’¬)]ö¯#çj{ˆ‰º"R–¢å&ZFXy˜ÀrïÉ/È”L<’ÑTVc ­ÃÀXÁ®ÏÃ0R”…ƒ,†bd~o¥­º …m  ÷q §qé–ø3µW„šˆ¨rM™òXSf9ÖøÄFHm·8"͆qñPÅ•mŽÿ˜îÓó™Ó#ãâ!²£êë! <3k<=3”å}*5øƒô6ÐKÅ…e&ÀbÙ(²4FVXf,–H^‘ž¹b59ãÿ?ìœ_q!qÃMnÜdâÆHB¤DJ9twº5Ã×ü¾¨O Ëö»Î8Š)iSî- vdlÉ­—óÚ¢ÎÕ7CÓI„d—ÉŠÈPæhrÔ:½33α"¹9¨è [ë†0\× Èp¡^ע뇴ü*:Õ¦ã²ã&"¦"ªüÕtŸ§²ù:¤mÛ5×´¬Ò¾+¾ç?R.½ž‡@’²"yLgšÑrÈê´*²Ê4eðCÊ[ª\w¢&TŠ>É—$È0"ÌÊÝÇÁ†èœÜUhvÒsƒíž³CMÃtžêãL}F30Oœ£Ÿ³ðÍe‡Åñ¥ rÏc“#L9£Ç¿î›OUþO(¹æÚiݰOß}&àk˜Ôv ’bJQƒ]Úiñ3ң೜‰ŒGÄu€LY¦&$8é”îaÁg–\pfY Aózš]H‚k*8²(‚5Ž¢Sæ)ýAoŸ)WµLêb ’bJQÃ\Ð…NŸ(€ ´xéoý£}œ\´öѸqàX!ÛÞÂ`<¤wEŽÛ¬1€ÏˆÁŒº4/}H³qã`»l'£¾;8©¬ýÅâ’G2½þ¥¾³rÈYÙÉ%¸?r)I 9“FæJo×ûV¹Žæ§Y†n,l¼ÁR2 ‡ªJ»Ÿ4Ï;–ý36_!Qkó <ç×B,b§uù¥Žã|Ã좲OÝœú¯´3û§¢WÜ]xiF¦ƒ$OI%W‘²)xæýŽMóiΰÏé•nù“¶cíªq“)J^ÂfkÞÁáá`·?Œñ`ñsøo¤îßÈX¤DÅKO¼¤ÐRQ¥™½©g5úùÅÎIÈNÌ 3Lc–`£Ç¬ñîÆ»\ŽøŠËK‚nË¢Ïkîåqåè/P‚{§Ò²â¯Q çˆÛ}¥'»ÏF•©†jÓ™PrA^K¯¢½Ò)“-ðŒ}».ý•+$Å:3?Ûw&‘½ým¯ê¾TõÛ.€çãÎOøìä¨ïLµ¶p„ÄlÙÌ¤ÜØì„\Tš«.Zcqà™iYãé™1¯puŠ-j쇦fdF³³QšÖJžàÌŒÜáìœTii_MU!%[63#76?!ß™yù*T”„<²¹ ™Ù2_¢L¹8Iyâ“sçGHÎøÁC«s¥ê>NzG 'h}„)º²M;l×o:95 žÕ_š(WÝ5˜šŒLÏ?|s®òØž¢=ˆ<Ó™©XÑÙiYδh™q€™œÇ°ósUŽóÖ÷Hffd&SR±\ØÆ_ðɃ~h8ËUs…¦fƒ›®3C“äG#éâ\§ý`¿akuÞÿLr}w8 7`²99?´nÞ÷hbN¸]Á[ßœàkn¡i–)=NÏ4¿´io7Ú`Ù¿ÆÃ¹¸á“<93ô\Ðí_Z‹§µtN ×Ñr1ÛpäV3ª›vÜàï­Øa å,+¹±PAt‡g ¢­ä°„²¼'Í0{ÆA†Ëk„Á±LO}K=õ-ÑóÔ·,ÍKOõ\á¢Ç2­Ò¶ š®p S‹£™ò$y~µ>c¶Ö>c6Ö>ƒÚªÅlW–O벨?í÷䲿Œcœ@û ƒH“b²]Ñ~:H²:È¿+]¦ÿN¾îŠœ3s Hy«TuTŽ—¯ÇDÈÓ|€Xù‰–—hùˆ’;!\¶<äò2 r~¢^{ž1OÐ5G§å6ójä¶,à ž, /¹ó²Óh¾ƒùhì„¢Ú4™¡Dwª3Õ•æ8‰RËN4ÇBók|9B"ØãÖ§þœk›š+GÚA×D¦r—¢{Þ¿ƒ²Ä'(ÁýÞ“sοN‡éoIçüK6˜‰{Ÿ‘e'3›Ÿ‰ˆ‘ºøï¡Á¦Ÿz‘¹IÉÄTPí©Â<Çe©.®ì†J²^¨Dý¡+Õwߥ<Ä MJÄš˜ ;Ášƒ;dnçÍñ|š¡Ž*»¤u­Êù© xqRF\G ¤È4±ùwÔ÷€=,˜Œ–øü•lN6LMúþ±ë?|¥]ޝö’(õ‰É‘¬Œ´‹%ʃŸò_„:ýžlrz^îGÀStûú;¾[kJRÜL, ·ÏÊ“'ÎfŠÂ‚_…æœð+¦fAr¯"׌:{ÂÈœî¹Qß.‘äªþ©Ò ¾,½"ÊÀPË FsüÅtüÅtüÅp êû\Ôgs9&éîqQó'®( «?ŒãÓ¶v0‚åÖXâðiôòë!-U׫*-Jó¦Ð ¾Å4ú·,_±Fß~½³’™RSkÁº/®E7hóü?tæi¡ÈÃ]˜Dq%7ì(»1: ewG§Ÿàé´û=¤ýSM|¢AŽw¬97xÍܰ Å…%lÍÅ7KÇ®ùiò ¸Ç’ÞYó¤B‚ ¤ƒkÇOÒ©µ£Ü‘µc'x3Ü‘¼¾ î¨ –¬ÚQ¬Pµ£º ÕŽÚ¸0*áâò ÊŽ+¬¢—š¡¿(sÝZG)÷Ý…IL`Áûúí;Ú…K+žå÷œp$Sø9õà =¯B;é¬$¡=tVròÝsö¤º’dÕ•$­®$xIvJß1“l—¾ã¼gúÊ./[;‚LÉæÁ¯ÜÜ ™%+âÕò&;èfè2š9PR·61¨dBavZ™BöɽÿõžYr¿ ´”¦ÃÄB¡‰‰ cŠXzèÊk=¶È»ÉA4”cmö(‘\€ÉL‡s8}á^—=äˆõº¨:o›e½ê®)YY„OÆX9¾ L`2“ ÈòÿaŽQUš(î&32°"'†#:v…µéÑù§Î"%fï8ì4­“Øã°’_Þ‰ _"¦\ªNåUÉËÀË0r?ÀC#!å¿Ù¿C2r>¨ïÞ ç™W-ÑÝÿN.þž*qŸ Ézÿ;™þ)Íz ‚×ÅBcqiäE§¾Ò²\öëø°ØAIŒfÔ²åÇß4»^UvHƒbjn˜ß…Içéò$jç®eµØ •³(’OŽç« ýE¶šSï‰)š`C4—ff§HØM»j;7eTåž‘‰EÚe¤Pë|\йÖe*˜éårvãG ìkþ0­²Ì¸=Ó S󇙯ӤZR%QÇ"·túŸÃ1Õæe£kÊs ,â½`“›ŒX8µy 2“ŠØ¤÷˜ûÂd5ïm¼#hS¬íîË‚@ó¨pK·ý‰e­¡y$2âåmðñÒ/!ìTDk ÑZFœ&!ÜQëöÀ}¢s!ã6!>Ñm•fÇ¢Îíøx܉s¿cÁQ(îPûôX*¶ÿJ³¡¸{Û4%åÁç„YŽ$ŽÍŒ&†{]ÿ>¨ üéù5ó¼þ¨ öéù^™ÛÅ>ê¢o²Ï4ÄÔÐ’™kŽ¢Ššø.²ƒ„„DZVEÍzÙ„È—æ;£ÊÕPÚq”ºg~„Ø…"â7(íÃÄS˜1Ôc˜óÄy§÷“#N:Á·AFðŽ ZO”¿µ¼A!– Šc÷÷_4» ·ûû/’OŽçÆQ£™ÑÄ`¯yÔ«£ÆÅƒ,ç1H”n™ÛÒ]Ó7¦è¡iÇ¢Dï4# :™Ñ„l|ÿŸ&\<Ðûû‡õqŽó­ÜÅãȾ›Ï =Ñ.YÏ8\•sù²3Ç,€výrÛȹ‚ÝÂkÌ•b?")Î3’fÝ©lè:N7ë.”b~ƒÂî˧Ÿi߯ù¼ƒ„¼—ÏH3’fÍú”Fÿ‚ÆýpÆþ^ÆþLFý:¦/ik'³˜ÿŠvùÁy © ÄþW´ËŸ8è»ôt*2z œ\Bf.1 öªK{NqQm{ '=«,á¡S?Þ)ÆÐÔ{€uq:qZö RœH°š¾.ÒvŸq¤¾$—Ãtú4€¬8𠇚NŸÄë8BãUê–Çq%U+oÐÂ3 % Qк<ˆRw[n`˜d™„/Ÿ¾ïȫʒZ•%µ*M;#Þ@DX×´^Ò ´ï‰]ÏO0DÔÀHÏE×¢¥|îYs³‘C¢|åYs@)üûŽ…œHJ#ŽLJ sîhgÓŠ(Žë´Z£p;ÊÉEš¤øH"¸qÔhf41Ôë«(ó,íòÃéw^óú*_`ç›X,©ßò1TVïå>•çõdöíüQL}Û¥) `‹]–Dµoç¯k K(¸lùJ'p±òUðÂ%Ê‹,mñ7E `)à“ÿú¾ú ‘Ê@ï§E«á‹âCbÒjìrgƒÈUÖ@k”"¶5¥É¾dr¼ñfüüàW÷¿º?ÈÕý¡º?"T÷»ºùµÍ¯lr]ójعŠàîFS’° £eƒì±¹ù`ŸòAŸd}ÆþJÖ‰àÀ!¶#ŽÔà§Ðøçþ+.îN>ë7ÁòšúK01 ÔfÏÖg[ã²ç¡°¯Mm™þ`–Ï ¡ž%3ðªTe'0NbJè6¡ðSui´ÒWHÌvî ÅÛê"S—é‰ Öƒ]R-w—'µ¼dâámx¥J÷]¼r)Ž/‚Ë6¿äœž7Lê6Ãðöy ‹SqnjI«ÊfU~0«òƒV•Ôªü Vå¯*ÿbVå_̪ü‹V•Q«ò/jUþÅ«JfM2+’VÜ×í×PP™÷¢ý&³-“_±Ÿìym›jM•ÅûK§Òþð¥Šó¥Ç ](¡ß„J&`÷¥Ž}§ê\SÎÚšÐñFÃÏÓ{`”¦º‡ƒE±æú°ãÜ´ûWÚƒ^ò®;ÕÝx ÙkŽ àÛC¡Š%¶³û¶²KÚõˆØEäd)ÉHÁtò´OM‡…9r¥™ƒI•éO3àN¹Ò„ÁŒàk¤“#wB¯ŠS0ýO©p¥²L§¿¨ ×YSä:#Eªc·zéi–ÙÙJsñ¦íÃ$r#,™`É£92™†  nÓþB|b‚#‹!8nÏfã‚õ6$@nÜäÍúAjÇSŽŸx+ˆ\ÈB`† Ã9·¸È¹ÅEÎ-&’5U5Ôvß0ÊÅÁ‰“ëÝp„KD¡ û­ r+ Á\ìŠ0æ©¿¨a¡-IneW•I˜ÚmIpü¢÷„’ËÝQ$»Ã©l¾x†kÁ2±8–)O’ç©5º=á­sM‘+\‡bC‘Á\àEä¹¶€üC0$'’hÔ©SñMz©tÀ»Æx©\…ÅTdb‚]?wþ Ü-,õ©=S yÚÈ´õoJ¨ Кö NÁšÂû?]¹Øÿ9Ó§æ©¿>r©‰Ã"9‘”„FºM«ù«éñ XøÀÉ8Ý9‰á0¤š.'iÝI¨˜!ájy­œ[“0µ‘„«¥/Øü—­sf2œdJ.æµ`f2-èÂWoˆuhQ¬ç‹sÕtÝ4-ôÖå¦$À‚“LËCYæ„u½¸”,X.ýÂ8ã²èóÒ@¿$VivÐ?u%{pJ> <±ð9©Ó³Ê—¡&ÄA&ec$/ÿÂJ…ù)óòúyÛí>F+ys Jzæc$ó1ømæ·ùÛ¼éÿl±¾J?0%%œŒ` 'ÓnÑrEÉÄ3š–‹¢M,šž ûúÑË“LË…ýú4¶ð +Ïl^:,›ž!íÒÚþ45[*' 7*M_ÛmAíØª¹Êæ×Ib*^’–åKÓ˜ß[c¥(KÛ¾¸ÚFÞõÜw7¯#EIÙ|¤d:/u؈¤×@N"€QIŽðÌCMµüÕÛæø[ðòÄ<Äy«spIYˆðN7ÿ ¸…—“„éo}(vƒ-ê^u§4S‡>=GH†‹ÏLÊŸ>;9ãºFô”Ü©ÌDŒë&qõ#ô9ÉÌ4°ûÁôîUEMÁšÈQ‰4åkÑõCZŽ7æÜû園ˆ>>,%ÎËI™ÖÔ4ÜysÓÊNíñc¼(™ß û°¼äId§Öý1^ÞÌo ýYæàÒ,Ã/n;(¹âÚå2YÄAœ,Ô9Šq–Ñx¯ï†¶ÇÝö€èŒLnH’u›fŸª?t*·KÇa\–WxB6&|òˆ3S¦~}ZSOKAuŠTtîDÇP@¶8 ÝäRm‘XèÕµææÈ¸clH€Y×&# TúÆ\ uowT„íža€ %3Œà¨³®`Ü=žX áÄ«iíœ4ãÜ"vˆ˜ìDL&"M9WÚühÊö~ÆRäWXZ ûÿšHñžˆ4eó3î4{HŠôŒÄ­‡6O{uh}9Ì¿g˜ïb1û •Xl2ÿž•]T>”Tý “â¾0iâýPתÄFç½…RÔoPÌ=SußÙlãèÊü 6ßEʽgdrG‚Öå ÇùPvhìû L'Ø4® slêSq>ÍëáК·Oû¹ ?¡_Q둚LÔd¦Âúº))Â+¤h9 ”>áBú„Ëè(2uY–i}ÌK9y€àÔºð0Ù<¯ñî‡D®e! ‹Ê‹ÌÜòCu®ð{…ø-¸Äâ@ÓKÖþ oÿ¾,- Û~S‘iÈ4']üô˜jü"《ægîÈPcÁ"¬Æ¸EaZ”¦hG ÛÚÎmW4ã`7Xs— øÚ!È#3Y˜˜¸ªÒ¢dU¬&Wa”ÊUßæ¡½6/=æÙµº ¿ØìÛ™˜,DLùT´úá¯O¹žå$øÒtÂ?{ðo^'ðƒ×jûFØf‹¬î›@âvSO@Çñ{„†3Œà¨Ó:?6ßÇGè8Ã@G­;Ü›ÒÝæ€Ž–Ì0б¯¦~_Øï¸õÕÔe yUS´÷}{P;'Nî8âîûÿ`¦è4u0ƒ&¤Ï¡tK—4nµEfÝÒ§Ù]RØê†Û\R‚Å4•b³FVÓôUÈî>d•Û’än÷aî˜Zk.d¤³ë™èåü²OëCWÞ×ñú›à¹ƒDturCÚWø¿ÉÖ|i¾3ª|ýûPÛ}׎æÒ‘¥Ù…pºî2íëßÉÂLF&Aœv oY (ã6µŸ´Û‹&W´0Î-¦œY(ü}~Kì¦ |»·kš¤yÞÙ}q8ã%÷ˆrU»4ÊLdŒŸ\ % ˜{DDù66q’VÍÑÎx`é:h€êH#i2ÎQÎùI87ë´ÿû/XgM‘ëŒPGõà4vPš8°Ô¸Úϵ0e‹’ñf ©ŽëÝ‘ ußâš}‹{õ-&Òÿ1?j';Ÿ‡Nœ\oÂ%33mS­Ç% ç51΃Ò=iîÙ{¶< {Yacd3æ©mƒf'-ŽÉ^~t‘¥%¾Ü+ ;óÀßæàÚ¶QÄ~!7µ9Â#‘¦ÜwvE#{Ö5}Ê4w) ˜Áɦåaè©ÍüŽ£8ÍôK§^¢î†Iq^˜¨ø<£,ª¢×iž'…L¡»Š3V×U;îO8ÔŒ1N`ipÉ G05¿/êSÃñ|„–3ŒàHY†rKíð…(íê3Œþ¢G 5qP©– ÔdÀ>§m`+7PÜnœùöæ·äev‘rgƒ¤.pÍÎÊÜЂðYc8ê;S-e%M't¼á¦óì‚äŠúÍ“ P5ŠEwaóuÀ@7ʈß1¬¶kÌk0áê颖  Ù¥y1Ð^#v‘ ð„¤¼VŒ!j^óÕ¼ÆKxá]vs! uâËy;ÆÐ%´¯´&Ý6Ü@ÜÖ7‘%¼¢S‡6-:žð†H06ÄÄAåª,2Åóº%Š TûÆö/z¦Jßð^E_Y†¿.® r Á\þ×Ôxƒ[Aä."tûGÒüŒ ¥~bLÆÞ•‘ˆÌ£>Ó,³SNËB÷ Õ.Pª8€‰|íÒ¤ç¦ûáÈnh éB#h‚ã÷P  2VpÅ‹b„¸4UZÔëýò@­žØpä­÷ßdÇ?ôͧªAË'Tìšg Ñ!v±‹¥¡ð2p{(È [n ‰q-d\á«ßgw<|ªŸ>=‚6O ©’%ñ*ó­ŸBêbE“!óržbË@DhS|_Фrœé½S` ¾å®b!…ÝXmyüä‘‚¸€o%mÓ~ .w„XÄ  ;Ä<­í€.O ©Ñ„xͽИÓDê3w^.ZeÃøÙU}«ªíoÀ/RÏ™LHø-xÑ‹®)r·‘‚èôi–fº-áFù’JÝAB¯«]†Þ·ÛAYJ‚íÖmgƒËRJ]:‰˜®!Îcë ‘©Ü¥ØÐ«÷P–ø…Ý7_ztzVÞã¡|"ógõqEô·w´Hé›?ê;ⶺ®I+ûVe~BÛRCÜæ·{¸8‰œ—Ü/“WUÊœ_UÜ–øt˜8™“ØÃDÉØå×ïvܧé¥mz,Jh©zñ±è¹³ÇwŒJîÇŠ—@»ô8›1f«Û=Rœä-GŠÜö=؇ôk}~(Râô,Š—7»@r¥ú®È¢fíé0qrfWgž'c:Î[æ‹#ðó¤#¼oÞŠ ÙÙ›MO‹eGIÈoó²Ì\žžƒO*ñòt®ÐÇYœ”ÅG褼Œt|aRWà¶£\[žÁ¤dئÁ¿’àŸ›ÞBIþàg&G˜}Q©ŽÜ¡ýÀ$™OL¢¸Ý¨8Jã“R`÷Bæ7þ«¹£ƒ4=°¤,6Ds'Tº;ÝšçûUä‘®û2)–¡ñõQÿËJBÏoü_}wº5×7NÛïÛHM¿÷]–°ëÆÿŽg*íºñ¿ûϾˆ¶ëÆÿÌÏúpJ3Ÿ ççÖ?ý>ˆñ§=ÃèºCH.Þ#” œxVÚ7¾“_$óû…±ßÇX7›~ÑxÔѹ´y¯¹ÿªšC§Þ×Õüó÷_Êí‡7ÿüýWÕ$¦\`Ó¯vxtyðÚkù)ÜB@àó¯–¼ßUyOÁk¢æ^ô^4÷?1s/ækS]Ô{Q?{*þ&ò¦9vV6CþŸsÖÒ¶‡nÌ•ý+-Ëi ¯_ãiŒ´?Là7ÏÊ%¼jmÂbé±Ì )îé÷*×%žŒ;a²µÙÆ2Yû]¿¿Ì{y`Õ»‡(N¨y# *Bâˆqœ„:}ßRkìO¢hx¼º{ ŽèIT”Ûiv]jvejjmjbujb}jF…•]‘«Ã'†@hd 55:€á #_¾Oc¡ÁºØ…I¬–ÏêÓpj¤vêÒ:=Ãäó àÎÖfsdY’,9LŠÔ^I-”Ñ&qÜTèUÕ–iO«Ñ[x”úºGô$*JízÕÙ¥<ÌOÒ¾O³KeF+ô-Uä|§&w*V¹î@éæti©ïÕnº‘Ú\Vd±70àeI*UçmcrAyR{(.ËY-PüÉm'L¶6Û“åÔ,§* u›ÀÂø›œóVäI| ˆpNÝÃa(1lÒó×.K*Æxîz ŠäFÒ’uêlÇüÒFª½ä 'iÜÚspDO¢"dÇõ*7&”Ú “­Í6†d ƒ¨vHrAtHÕ: ŠEr!~yC”[²¾¸¤ÚRE!Ç(]ØÞlyøÚ¯ƒŽ”‹Hi€2ЧÝYõÓwÚiç;Jkx‰•g`ÂNŸ‚§ýõð6ð*_žïÍRÖ‘j]Gªv£Þ5¿â5¿æ5£ê§m;[N};`rÓiЖP³KX,=–™TÊ>y§Ètá×$‘Ø„Õ×= ŠEHìÒ ¹ç·MYdøu—&³iÉD«ì!0š!MNèÕ p÷ßCbÓ Xwßè†DÞ1ê cTB×Bk ²àu¶úÒ ¯]Ê‚Aªã .ƒ{tyÈT×§"ÿT¼ IÔt™¬hPMm£Òää^”'7Hè…?¬Âa(1l„"ÑóéÜ ’(Ý@PÝÃa(1ld"ìž*vµoŠØ)EìbuCÑûŸèOÜ'fW³‰Ö¹4Edü‚&—d 9ÞF3¤ÉA^mÓ”œªÛ’äf–D¨²1 ŠEr—xM'Nî7>ˆ‘.˜÷Ðx’¸AÛÄ&R/«pJ ›P‘ºO‹Úî‚8o¶ ­Ÿœ ¡™“ÌYílƒ!øT¤ãPmèaþ%Iä4Žû–?Ì?D±¢…¹äµž„å‡ÿ5µô]ù&ÀÇ`æqdyb1’Úy —Á=Ân¤;•5?Ýuó†¨vûÆ=Ñáž {Ñ ira^vÇ4Ý7<Íý5(Àë‚úá0”6a"EZºF¼Œ™«x@ø¦xb‹KªàvhyÐòxÃC]&}¤YÖ âéçoH*ËÄ‘™$­…m@Ÿê‡cvbDð¢8Q|Â\>+}ȺŸ¶oÆŒÊZÞ>$ÀÅ@’ 2V‰ ½mÂ@5PƒðàíQ;»à¡¼\ˆ@»EH«à&€ÅvÙœÏã1Uß™0ýû‰’LIlÂ@5Pƒ°à«rÞ_Ðw#íC4H2B$± Õ@ „Á_U§åƒØ_a$*3ªŽ%\÷Sh‡£Žv`κ¢&¼!(M¤dM’ÔŽ+ ŠEHäÒ7­ø^²‡÷@L!`Xìaaw*/4Ú£° !POÂ& T5 ~ê ZæÑ¶]ó]LZ#oiAb´d¦ÉêÈÍ&èeÞ%‹JÙmë‹óaþEXwoP!nkT2ÿ"©5WH1Ž¢sM»Ø{ù=L,·Àð*»…ÅÒc™…IÍ7ƒ¶‹@cëè¼C¨­QÈš9Î8b§@ñ²Ú©¶9ØÿéÂ.é(­­w¬µ+¹³Dõå ŠäFÒ 4jÓÚ~<¶[ÙS->·^`BŒ&L²`Du´ —Á=d àCú+Œ@yP —Á=~—ðY²ƒ‘ø]bgÇ:L‹=-Ô¶ö8Á.3')ZyëZ4¯ ¢$n`«PpÜC 0mSˆ´±gB¨Â´×¡¸]ì8ùÊhK¾{MîÄÿ~÷¢¸ßo]´ï›}‹Üqš†–Žii_Å¡Ä.(ÔÂ’$Îÿc8 %† ,â»ÎïzC>b^ëùú~xòôýüä#èõÊGpž›Íð{@azó,oÜî§U¼«È–:p=ɦõo‘»ª.5Aä÷Ö[PEe«¿1‘VJÐjrn uäÜþ+Ƚ¶À°Øawã”RQÌ«¢¡wã4TA´^köî„ëµ`ïN¼ïWëulo8`'„þ„_jæ€ô™ tžžsPôPàò˜±+‹"t®3sã³álxâƧ ô¼@—v0ˆ’ø4Ñ—q:TEF°‹¾ŒËäU3TË3BªV&€Å. Û)ÝÈý×ÑÝ Þs]wüצ*ì:å@„:Lù)0‡œÏ¡ƒ´ýÏ@ÑC¿Œ¹8VÿùÝ¥yÚý'WmÙ¼?OM‰?¦<”ØÎ”H¦ÉTÂ;¤²9ÏÃBç%c¼ö™_Eø à°Ì#J“;À;þætRµ¶3õ½f¦­w–ôŠx.™L%ƒCõ:Õz`Ž0ߟVŽ ëÆãÊäª\P¶œwÓ/‡ðÓÉUÐ+LÙÉ5Î.¶EH„s‘Ø–£øFŸùœø±ëÀŒürð ¢!¼8lzØ/.‰=花9tè…c¿¸$rÉe¤Jq·eCb¶eE©*ŒU¦o„¢\Š’ž½Ð´…æË#Qõ©¨‹<íçß›ïùwÞKeÞÜ8/B^É 1ÿÎo©Ìê»mºÞDRxÝKö]\ ‘ÑJ&ê… á&R…“FÂ?i$ô“‡}i4”÷UyQè¶¼8xŸ5£_Äî³bô‹Ðß®ý"r¯5a_„îµì‹Øß¯û2xì\EÏTè<õšñ"x¯Y/‚?ãEðW¬Õ\±Fs}ßft;tÿÑÕÒ|ÞLÞïYe,÷‡®þp•{«-—è*Ióy—y'–ç ñ Bó*õv*íô·‡cinæý6$ZwQ¯h§¿M–¢¡Ñ¦õ©THŒAɬëqf½Ê‹4ô°[Ø/رp2»´Cp¤E¼âk‡ ¨ìZׂwXG1ŸèìÊØ¡ï°öP¢wXgAß(Ãßaíá´Ò^‹]?ùXÊ7¹THx¢7YgAß Ãßdo‡D(ˆÍ7ª:øArSÄ+ª:ì12o¾êqÂÕøN§³N©Z_šgñ7¯¨gÄôvxG[Ti=¤%è± 2™ eÔ×SW9Ÿˆm¹à+êr°ðð iÝåÜsYÿ0×ÝEA¯»RB~.ëðº&$àñå60ÐUïÇâ Àî/¡ámKúyõ µñÛ3Ákã·S‚+ØÆc„M´»ñº {Güø¤³Ï¼ÄM¤>ó7ñ½‡¸‰êþf+»Bí”÷Ž÷þ~,¸RÒàÆz/â¢)U7Gu+âU7EU´×¿BÃZ•ñŽË– ìoA` û;(°Ïk×½ˆwX¦HPT¢—FwIïÃ_ï”) /,°°²O…B ø,«–þP­úÞgó»m„OEýã´#Ú§¢AÑÎï%§Egiï˜ç×ÉãÒIæ¹Îð6lWiÿ°ç>6Ÿu†7a×™.Bƒ]•ñÑ– lžÛxlêà0GYÿ@ç)‘¶¬(ನ?¥¯ÊlËŠÆ* 3(Â>øb/âYv©oS­C{Þœ½#´ƒzá¦ÃInI­ä–Ôß’ÚæË¤á8ä>+DmC|.ë©-›Lewóî碈 †<Äln ý e!?” Œx*°±´ 4øî|µÙYÜ?칸×^WO‘WÙ5aS0 Úâ*¸&èAšÜmIÿHõ J©9`«ÒOI «rAaÚrAA.ç´]€Àî&´¬ÎókŒ·Âr‘˜1·õÝCŒ|—%Üø®@¸‰Øk±Ám„UøcÁªŒlUàƒ®«ðÀîeü3eÂë»Tݪ`Xˆ¶`PœýÅ´àKS?ðo zÇy+çPGx/â›)•䣵»¤ŒÁŸ­Ç^‹®·¯é¢ÎvWaï€ç‚ÎökÞ5¼*ãaÐ9|ë*üæî,èâ­s=äûûS—¾8\Ù8÷§O!ÁÛþýÀx7E|B´Ÿ‚¢ê‚GImŠxEÕ…’:}Ýv¡ ÎYÒ+Ư۾õ!¡^Ò.?Œo»‘: új &ã«rHœö@`„›">±Ùo!Q­zþƒs—ô‰qõÍ@ª(JQ€!±I(I]XÒgF)9+Êà3býQ"4BwQ¯8Wß3B¢Ýtí¼_Ú'æÍ‡°°«ðX«ðÃ.;㧇À°¶e|â?W¶þäàNY¯@ן+$ c†)‰pü(" s[6$ÖñƒJPÀ}ðµ|SÄ+¼>ìJÞfEðUg[Æ'.[&,0É-¦•ÜbÚà[ÌÃ7†ÐwÊzEºþ>pfþr¨D³½^üC_ñ/ý ¢Ø…ýã^ºNÃcž¿‘ˆB~.ëñü}%(àÍ’И÷‹{…½ù¾ùýëChÐÎ’^ñÞ¿[„†*ˆQ\hTãWAhÛr¾ñ_SB‚ìÒ"øái[Æ'8[&,0ÓrûƒYئŒW`¶Ì89(°°a…Û2þ , ÿRþy<ð›¸VåéЛ2¡MÌYÐ'@[0±ƒ›Vµnºð ·¥ü"´¥Ãóßèdžÿæ&ëð<74y ¯Ïvó °|³^f1G¨%½£ËìÇ «ð7™m¯ØªÀw™ñ{dh`›2^ÙÏ—ÁJ%Ñm z‡8~a Šó>“?4PgI¯HïK„„jÊgs[Æ'<[&,°ÛÇæÐè\½B¼}¥‰s˜Ÿ¥†ÀG©¡Íí–çYô•ÿ¹”Wlc©Ä– ïôÜ­L@h§/ïÀîßèC+ÕYÒ+Èû×ý *– DA~0F’@Iê‚“S`8ž‘<ޝÌÕnaŸ(g„dïÚ”ÁõÛ2^š2ý3ÔE«º¹'yüs£ÿ“f¥9^¯ºSš©÷#r7?FÈNÈ~èH2BIî¡ `Ä-Šö˜ÖµÇéåŽ÷¡phÄSaQÌçöp.›cZJãÞ‚c?·ÉÄŸ5U•zÌÝqÿX:4ò¹´,l¯ÑÑ{Q{ Þ úýiwÌ~›°¹CöÛ}ͱǶkî€o×aÐÛò¡ßÊCÁk4z†/Jþøÿåfôêĺ1ÝB‚` ~è†å@Èä7¯9ô¶ƒÚ@·³)”¬,ìeZæ1–E¿Y3t#v1„ò›òpkv ¤ÒÛôr³~&ÈÄ7î)ôöí¦ÈT [ù&ÍñÑ! ‚Ê_¤:r€dVå/FM­ÃÑ41M3CªìƒUe¬*û TÙ­Ê>hUöÁ©²4kirN–Pϰx‚°¬ÄæÕÏ™W=gNíõgzÆž‡BŸ‰ˆ”9å=á™#2øMa †tEw¡5ÆUý!$MÔÓD? ÂV°Š<þæ|öYïë¥ÂCh11ä"æ/åoÜsaYèË‘Å1CÉd@òä7º=±Ns7K&fY”ÓÜ‚®¿`¯B®sýZ|à¸Å‡Ü¢M³OŸu_i<2d3A/¼-zÕm¡Kn×fPø÷ò²èMyyð|eÑà‹F^X윎";tÍÐcç$ÔAÉâxiš˜¦™wy\$ä´Fe¦1–b ¯ÑG¯¼Æ#½2x?BéUü^‹³¼Šßk¥–Wñ¿_¶å]üаp"\;ì÷^^~'zÐ%t•:ÉÑîqFÇ8£Kî 'tƒ:ÀÑ®oF§7£»îèætqs:· ÝÚ@‡6Е-íĦt_S:®ñ.k¬³ë¦:¨ñ®i¼S쎦tDSº ñÎgN·3§Ã™ÐÕ t2ÝËÒŽe¬KëLº‘±ÎX¬è€åt½r:] Ý­PG+ÔÅ*ï\…ºU¡UyW*Ö‰ŠuŸ§@—)ÐY*í&•wÊ»F…¢òîPyG¨° ”ÐùIèöD;<]ŒNN¸{êØ„º4å™@7&Ð)íº:-îJiG%ÒE‰tNŠ»%å’ò®È·ŸÃq,¤ìL³ÎðUé¹Îæ½ä¶äÛ’û¡ÞK&¶dbKzLbu†*ŠR`xlm9˜— ›Ï€À˜'€4·óá‘Б¨ÃîTÛèbܱDôSùÀÀïåÁÛu?ÊÔãQÃú¦t`àKé°°?ÿŸ¶»a_‚#ÞôÖ´{h_ÂãÌÊÁÜÄ;Ùɸ‹{NF{xõ­2QÜ«‚añÚ‚áqúÍ&rê7‹È©Çì!W¨â¦ n²ª/j»[„¹¨„F9 q9š„v&I"ïåÂb´K7§±lšÏ¡ Ж n<Ž`’ÌI²œ±.ýw/ )'Òüû1Í>e‘> w.³ÎÒR‰^— ‹v,)Õsû5g°ž{°9ÃõÙˆí)`óç¬/í¬Úzú™€€ŸÊ<•MVÇõ ¸iU­/Å©—\ä…ýC¾¾àßzEÝ–”Dtu½Pr)s•–„|Y»Xv¡p——„îqѨTY¦uóýŸ¦þ™þwHÓ÷{¨-Åþ°%þØÛu)–ØÓÿL±à§\á½XP„¦Xx„çVá¹ExnÃ#N'ó>Ô6M)Šô©xXÄcñÄŽüí¢Žpß®•áˆñõ®À•ŠwÜÄe,- [°4TQvxœ<·ëÒá¥ÃÃþÑöSé©(•,ðçòa¡å“±¼4øNUM¯€è’ð'@pü}—žNEvÈÊT‹²ïÅ?’¿mruZ‰R¿)õR68`i¿Œ´KFÔsý–Fù- ó[ç×?I”÷bA1šb¯#¬UŸ¶íÒ/mÿ;L#ø¦²Ì~¨}“©lb0ãó *™PÉ %µ/ã0r ˆ=S$N+ŠTÇë£Ï¾‡×GŸ}÷}ö#×uÚêKÓ#Õ°eHn /UªJÕ½þúOn0 =Sæ–â·µÕìs+ýÇ;Ô[­[é¤NW˜P>Û`Ø]›r¨”fZ>")¶3´n†ºÇEWÀÍR ¼*jÏGî7JO$±–%ù<Š¿V³c¿àóî"š ˆKvQÙçjìZY{<©áÈ[¯‚*nÊíùû© &֜Ljû|æösäÈq¬:mZ°œV(TÌ¢v^}(~v^Ý*~vï{Z^Ûå}Ç´Ö ©ÏÈ@D¼& ¼öðš:ðZãý$‚wE_¤æeFÃ.Üh!^ež¢'Ï !u±Äbž¿²ÒÆk§] Ôpz¯¿ñÆ·ÉÑkà !v2ÄÂ~h›²È~@—'ÔÈ~y˜@ˆ×ò– Zm0R§C1ê”6WÅ2{ÄÁ†3ŽbªÍó¥°T7<Øuá!²^}Ưý¼º_+½ïI~c1v˜g¸¦FkË[¨dDì(^#Ü…ð:òL­¼_FšÚübµÆßˆ;àÇҼü•K[¡é7¢Ž÷­ÑùÜ©³Ï”ú•Mù`‡¥¼(ø¡oôжM7Îïj>Å{ `;(™@¨.„›Ž]“æYªûCÞTiQ =v0¡27L2a(F65šåµ†Áv#L☃g7bÏ„P›ìö»U(NÓîÖÂø‹oŠbK#/›,-—OLª:úwOºDvi"¯‘¶|³i æ²~WqúÁ-Ÿa€ä²<˜‰# ~i´Óø]$è‚(ö‰ R˜»t/©Ô` ˜{‚/)?<9¶ô ƾBH,Bdá9¥tGÀsVéNì>KÝaçê8œ…A¯Ë††<–\èÏCÓ};ÝÆýŒß ’!µ@ÂGâ–,϶<ÉÂÜNÃýP×Júçb‡?=GO ‰ˆ²ƒQ Ug?}Þ™=N¨ÐÒ㽕úß'1!#XfdÐDº€~ß—6]@‡ïK¥Î·§wãuÊZ¡È)k…‘Ÿ²VjQ®;À 6õЬcX«5y;ÆWZ–¨š‹.5Q0ê+íÔahÏ]š+¹ #1ÉŒ•ê;K³‹XeS>Øa)/ ~nÊ®K%p0‚%æ52 ‘ïþ êsQ+Ôf +}÷ÉB¼°³ß‘úçþ||5-Z=k†Ôdd@"}Ú5YCÄ*#DâRL½z·qAB›L¨Ï„¹RŒ (zIÌÃݶ sÛÆë;¼í)ZßIÉ{!ûÎIÞ‹ÛkJòNð­nÐJ>•…­3]Hƒ^• Ù–•¬U6tEÿE¾ÈˆÄåŸæ<´gcâ@„zD؞ŧꎪ³›´«Ôc;·‡j²@’"q‡fe!l}&„ZŒãO'‚XˆZm‘©ZK[ÿcéà˜§Ò¢°í\ü¦3/yÒ~ùgBpøv>ÿD*Ø Jëô¬´Üâ"±cfˆÈe¨ÍOµÒÛÁ¦xpüCØâÒÈ+ù ûPZw%v\HÎC!zļÊOäeæ(²0µÑP4ujåµikˆØY·Ch$ªÄe<¼Nµž;à ‘–(b«¼9ׂQþKTèAËÒ  BÕr)Û–¼55 hPLþ¬K‡¡†>ta¥gž£ç¢²fWÆ…¬ƒSäMLŒÈqÚ&ŽÌ²oó&î‚“ÞS’‚„¤¥>öú¼ÇdÆ‚V£Q6 …$§»gžž# et÷œSðL$†2BÌö$¦ú™*f -Kaɸ3ƒÅxÌËsMi€¡Ê20$EÔuÒÑÍûñB¥Ê;á=G Pgœï¾îå"¹áLí±ô{ùªüÂZp› é ú"›ÌÞDr¡Ò·ìIìMð4yoeÛ¶&;ÆOíI¼ÁžB^G”AÊÊ?©ü(X!:¦ AaÈAµôkA³ô ‰béWaÅ,`I™áõX±è¢XJXô震µ ù QŰÄA‘Óíɾ=¶-š:ØÒ ו¹K‡5‹^£Iª+s%}N=Ð:r2ÓçÝWáЬOAmŠ®þ© 6â*/¯6M™Š¿Þk¦KiÓÛXgü–°ðêTè7Ž~âÏbD$ó@PåP#’=åe‡—`»ãPBJ¢– VÁa¨ÍDÒõÔˆ~ì\’7tgh`#(üÿÌò£m‹e-mco ÑòÊ¢»éòªoۧöã_¢ðŠxw÷bx±·•[ÁmFÐhý¥à’*ÕWã&ì &Ó­oáM#¿‹^ˆPÝ!.`[ÛÅ-Dh¼Š¾(iíº€ ´jÀTzûû„Zûû„:ûû4õÑnËï ™â 4_¿>NnA§)CÙí«Øëe0ä+7€‰ôÊK̆0aÉTû`h—×¥ ÑÈ’”À1ß'|?Ûh|½-‘ÌÔUœ¼rÓVëé\ïòs2µ_«‚K£6‹“é´Àø*,FÌ6KœPÜÍÒ1j£7bÖ%—»m KþØ RëÒCÈü"(w@ÆžŠ( Ýè+„7A1È@J_¥ú¼=}âp@SÉW i´#B­kFݨ¹¦56LP„F3¤h!ɤÎ0(VÑH3ðËéÒ…‡Û Ë—°©my¼.} xaù% Ïñ%.¦­¿Ìf ׿\ç‡dűž¿ldÓiŠÊ#eA}Ý"úº…ó‹E,퇋šª4jùfgè+¬á¡ùaö R¯á ýÀ#Ê{Wðªr„¯x„^åóˆØ5<ÃL zÄL$<íVCâ=†”› (¯˜u¥Èk×”Æ{Îx•ê_l•y‘Húô/Ü ²Ðå”D×å”DÔå”D›qUƳqM[¬—ãªÀî¹Ú§ha±_ sÃÒƒÃÆÙ¦È$Ø¡ `ñÄq÷%GR¼-ISc#ÒI· µˆÈšhïÉdo;ù€Xy›M„•˜²úÒUÜ9ïî1-Kœ¢ñDhl™üý3/Ks×Ìân˜ypX²XÛd6öYŒ-·/fh%ÜZ†déMµûãRäoü,à%ÐËÜî1ä¸;=–8ÖþÎ@&ÍÖNŽ'1Á†Ž¡–n/g‘¥7ÑŽ!8,&ë}½ˆ,ÉÃzcš~x X^WmÄiv ÓˆVéTóã–!Ó¨N´(gÎå£â‡.‹ö!ò4ëCÿñ‘Ec$s×ÓÃp)IJVÑjìt/OoÙÜ2çsã/ÑYÔ7‡c‰4G#/Ù‰QšNd:}DiSăHYž·çº~¸6…‹€¡S'G¸Ñ ¹zÓ M§/Íôû²#L"уȔjÞ$²w]“¼«¿ ÿÙ‰1*ÜÉ ¢Ÿå ³á?^ëE)ÂløÏn3ØŒŸbi+‘1õávìT•ªlå¶ùéÔ§H×›«ß<š²úÏ`¾Ú§Í™ïóÝ™ÈÚ6E2–¦¶e»¿ÆºôðuŒ±Œ•1ƒ³˜Ó]Ê*=Àæ?"j±€8ºž›‚)è¹)˜JžRsÒ÷zEÏŽ=<Xúj°¸ùoX‹?‹93£ñ̈ì©Gü~±×Ty$̰BÜeU+Äì´9“_aKPQŠ¡Î„p`×Óˆ¨ÌD„àÕšM'Må- &PʨÊC!CGïògšÀ™=R޲ß{y^5…èrø•‚ZQŠB­¢ůœGÈIRYA8®@~Åqdq4 ǺôYÇúñ©G9ïùÓ;sâPçØÖUÏxÎì‘ì¥=õuieÎ{¢Ã@t9Œ§˜Ùï2;\NOk­'EnÛøè{0І•©˜­f›-D⣉˜Úc4mO"Ÿ_]êÔM=¿P»ÓK^]Á!ðÚRg½$ úcÝÿÄIÝXSh×O¢ÀŽEq ŸÚc©ƒýìÉäëk.z}$@!p%ðÞfKPQŒ7š¢ÔäUqæh²HJ$?y˜4³§±§ “¬ÌS4¬Ã$K§QµÅ±üB”bÛbÙK[áú±––%–mIzôúüDc:"‰ C ϢʫžóV÷ `™Kò›]àçÐÆ~,ÛþšŸ·ûû¼ëJâÂ’)Aƒl4CË%ßß—UÁÓ₵hŠ–s^qž„™=V°'?2s:m:aÕ weÛƒ€¥~a­o?¶G"óÁK¸=®ð<Á£SÖ7ûs}=t½Æßì;¸F¦¾ÆtÚüÅhþbf¾ÀÌ7e½Í7ûn£ÍiÌDz*ûçÈ'2Àß‚Waƒ´D;pùUD»pùùÇ9q˜Ë»Ó¯m¤Wc€¿¯Â!i9”Ýö>‹6ê(¤_‹­@6„¦¥¾ä%¹Bk<{iM¢wÂÏ:2Ö„ŸtL|‰ç²-žòó™LÛµÇ3×ö$òqÑüÄã" øIGDð–Ç%åÙŠ‚Ê{¦/!äyŒ‚¦¢«}Ákð^¼Âx"eu¬Ùj,ºáiáÊà*`‘¯Ê=[ÀˆA!0øBºîËÛç²I"jŽÇháñÄ6bžýT·‡m[tEÏÖê…£K5p ÇRÊ´û@ȪèƒvŒïO@Âû' "Öÿ' ¡£÷Ö½îh=3dÞåg¨µvÛ^a«¸ìèÓ¦<´.ox…—Jl2•ÉätUE/ú‡m¾'˜çh-b# Ø*8•ÀaéaW S S‡9wòÀ!kaMá›ûç®Üçgn½pТ «¦šú@ÖQÈÔë‘m Ž’OyË`=… ° h*Úú¯" YcŽg¯ÌIÌc=üÄc}ü¼£¼B´»úÚî‹sy){:û9A„BÓRÓßnq^Fæ5ñ-&3mà`{×q†&c„!*º26kÿ+ukÀ\ÜΚëù@Ð"Z8#¾ SyÔgœu¸c§A–òÿa†ÐuM}.÷ÏdM^¼$õNÁÐu÷Ås“—äŽ`†€×1 Ð$ôy_üJœà"+ Y ƒ Â EïÃêï»êé³ ßÂ~û>ò,m@À/BaÄœ¨õ ¹vô—ºe‹&¶$ÂÒ¨/­¼:‘‹Þ‚– =‹JñÒš–Kü=\!—ø‹·*.‘7m$DFV ÐŒ¦ A1@»!ïL¦xÂ̖͞;2ò`ø³FDM~6•JF—âA!ˆ©6# ]ÎU¼ /zK¼Kžòg–(?MšÆÚh,²ÀºÈá¨ø³®˜>3´@`ø6H¿†)MÙŸAfÏ¡Îa&l9¬‡)õžÛãˆ[þ#+¡J ùâKÝísQ@âÃöPá]ï À /@}6ç€7ãßû³Þ=ãïPø+€Hþ×sßÞ<¶ƒ/2²»‘ö/öì¥ý汜™1]Í@žÒpæ”F3ÐF7‡3¶±8œ± ÅáLk$ƒ³%rUràíÀpÜ51«‘sþ¸5È9}ÜÊãœ=b½q ¯£ âY;†º:ú –gw¿}(ž)DKÓî~#,ÑTû¼íE;ìömÙôÆ>q°QXþ¸E5nýcàŠXúÐ á_æ›%Ï\þËx¿8pcYŸÜ`Ö§1šµ%ìÎõþaXCeTG)H +²ÔªqéÐ+(ˆÃR•¤²èI ¯Â[1Ú[©ÅªQ[šE„ÞÌü t1ÄÆ3ûíé h䉃g¿=a ž†Ò (A•ŸI ˜å-›:fYËæ½œe“4£ŒçÛ¤nÜM©O´¡@”=D ćíìcÏ"Žç\wœvSwœ&SwäÖRwŒ†âãI›G{껼-.EŸŸüÃ@H-´€XºhfOQAmH2sfU0+€XìÚošQð$í}M-|M€^üsšbèÏñQ$‰  •è5Ôñi&Ëa´(MµEiô5  àµ(uka½”Îi4,}½,On6š£Ý̈¨-‡¸â1&'pvw58m(Œ„Uãn”[”KˆÑ°‚@võ):Vö”ºß>ž»¶‹˜=#_Ña'gÄg¶Òupr‰pô¦%æÑ§˜–$Äešk¹4àýxÎëÈ÷í\J£DblFÄ›wES“>’9„ %0¶Ì0LÁ ͰÏÅ ƒR¬®%Ч²ÄQ…Íè(?ó)Ó‰ak4áŽÐo×;˜¾Bˆ'¯¨ëÕ:{"k"WCówÌI‘Ϲ1‚íð÷Ú™‘çnKropíL;‚“C ×å•°†FÜ  h+Ò®dÏØºõšã¸S7p'Y“÷p—qÈZh;¹‚ ySin‹"OÛZ‚ƒ5Œ]g¯9Š6y¯yÌšNšÎO•¾Iá5G’&nUˆ¬+´>koêªì1™1™,–'c1ÊgbL]’2&3&“Eólk¸âêÁBÀ1—4Æ‘:2‘*ÉsÏkN!÷ÜYS—g¦(Ƥ…A•¥ZÛâìc.ã`u¨å1òn¦‡L= ¤UpÆ!šòÈ0ý4”¦5ÍBôÍÔ²S+&‹öäÔ£ø£åWó"$Mò°÷g ™U<§˜VpZ­d™,ǵ š8ºëšN I)Ô…|4 xO;{êɇ0Mé„ AÞÕšÛ¢ˆÓvµêÉe®Òœ½˜ºclLj̉[rSKaÊ–\ª‡+uÿ¨îh[Hc–¹£çm$Ì;ZÇ^Õ9cmonŽã.Ì©«|2k¦{ì" ^ Ç]VP¡nM,Q¼IdmßܵCÑÄï›×êþWòs95FÒm{Úó(³¥Ò¥2E“Ô×Òæû}Ñu$º>q}·­B K 7¹=‰>­‘DÞ*¼À›AËöo׺Ï)\mCSiˆæ©B²v©\§Æ(¾ƒ1žsÜý´>ÂqwÓúØFÜK¤J(yì ´‰Ã$sá+}«Ë‹€`ˆ›_Q!\×uD…q]³ÊÕ«HÆÆ"Fš UÈ[”øcöŒ&5³§°§6§ø laîÔ‡9: [˜9„ž8ä´7“‚¢À@UÐÉÓ9Ó¨F^šfyof˜xÌÕ™>þÒŸÂÛ2Äñ•¢y^wmôâXâ˜JK"Uú`ÀcO M È3Tä^{f".O`Ñzlúñ71ž4½¨©t©LI$©û Sc<]Ò>½3¦÷ÂÄîWg}it˜sô­Ñaòq×F{Tb´ÔÄ-5%B }¹Œ¾VF\(#­’‘–ÈðëcÌÅ1æÊgYŒµ&ÆZ£¯†Q—¨ë`¤E0Ú mù‹°öE_ø¢¯z—¼ä‹’ÍÅo  ïZj,âbq¥Ž²LÇZ£c-ÐÑWç& R$êaŒx“-¶¦&}s¹&˜¢¦@d5ry‘]#¤%Óë¥ìÅRÞJ)o™”±FÊZ e­ŽÒ—F9뢜EQòŠ(w9”»ÊZ%®‚—@)럼ÅOÞÊ'cÙÓœa¦´â©)‚°>üŒnäZÚò,am–¸0K\•¥,ɲÖcY‹±ô•XýPìÄ7Ôq_"ž¿~¸[O;…6§Ô9ÅM.g"W"M Ãa‘’S¶>4ûa­“\Úä5[î‚-zµö±{*ûý½óyWW‡(æÚÀùl/ÓÖÎg0&rnËCäaa/kÛœÀ[šÓ˜vdÖƒ)žñaGck}Þ²ÚI¯$MûqèðÚRŠ©ÑÆlJŒöæ…á©JÑ£wEÖ4E©ŠÛ=ñébiañàüX¶½ýï6?Ë ±tFö¿~€î`äük¢–,Âü%ÝÈ‘GXÄ …¤D¢ÄŒ=Öä°•°E`ù7%¹\S禤•vTà±9Ó¨¸cs–ëaÇf M¼*b™zÌ1ŒM”+JÙFÇ ’¦óER…Å»}Q1ÊÙ€¡>"JÛ"ÀbÏ"Žå\väŸØ¢ [Z!C¦D®DšH†Ä^¤–éÌÃV“JUeK¥KeŠ%ùE4ð*?c#^ÌY/¡dh Tt‹])$¥Pƒ‚ÙBŸ)ÀìϨGoš8SéR™"IÊÆÄrÚbÈÊÉ”R•™¹iRF ð3àg4Àϼ¹PI–h¾Í…Dµëë6>p¢Ÿ´M_cÚs ËÃÕ¾ØöÏMAá³Ç0ö°Ç“_Cía¼ÚCs%îôŒÛ_ë¡8G+ ;a…-ºK¾ V0ã81Ŧ1! flMD|Ò<æÖ¦;£<_ôŽ˜Þ»_a”VÀ®)ЬŒJJ(ؘp¤^¢4ŽHzMÑ^Ê®“ׄÒÊÔ€¡="JØ"ÀbÏ"Žä¬|É%>3ÆpVþå”rŽô‚Ð¥2E’Œ;Æ5ãw€kF1âèÖŒa·¿/„Ðkês¹¦6ƒE ŒŠh£€HÍé÷0—ƒsy˜«@x;„É3x3(cÙêÁø¾®ª"Ò'xÎ;‚R ‡ô#U *:sP *6sPM|dæ59l%lDþÃÕ Ì ñáPÔ WŒp*åñ•ã"P„<^hž;QÛºéCµ JˆÙ(’–>?QLL1¼…)™-(#–óAå> ¬3þ"£0oe$[D†]Dü…ߨð ~ÂD®DšH†ô™Þ{àÇ %‰ ž[Ý1J²î…YwÄò”‹sdÒSkk¹ºÇ MfL&‹å KHM[Ë3ùÝÂ@±‡E)A+p›S“~4sÁ¯¾öÛ}~>ÃáŒ8¾£8–Êh3ääçÖ\ÛB@oŽç¼»ÏÛ6–_óm~."œ5-Œ#Æ F˜¹…±16 c#1– yEHSêû%™b&8dA‡% þ¨òˆ³/+¢&8dQ‡#j—W1w,+r@¨rG‹^û`ŠqQ¨j4 SN³ˆº*§‹YS]•Ó­.±.Ë9”­HX·ÏLASª¤‡%ªê¸rªŽ+¤êXØ Ø˜ü[þSâ€Ðu´Ìg$úúµe5Ѱ-뉻‚mEÑõœsÕŒd%‚¥âKÔ1š_¢ŽÓ¬(ù²~¬fYË‘û¼¹Ïû‘õ¼ßŸ˜üïOLþ÷'ÿ‡À1Î+V—UDMd—UDÍc—U¬Oc×Th/-¶‡®GãpDÁnS_TÒÉŽ'kŽDf!q¤Å:G-ËŠu”Z–å4µ"§o¸Rú†+£o8ê#\Ó~`ÊpQ¨R4 GNÃ}¹4Ü—Ksâñ—>$l6 ]‰DaÊ©ò†¯faˆ ,-÷uUÜ×ìå£)Y‘Áa‰ªÙm­f·³úÀ•Ð͹Üç ¤¸HI‰'Mz£qUY tAÒ£¥­¿°¥Xd%€ÁÒr›YËm]-«Qu—’;ƒ´ ¨‚§‚=ö² è*x£¯oÇïFî›±«.|¾Š OE\lÂq‘ W”DÄ-\ÑòÜkîPØ!k‘ -}y)`;—'ÆE¡ªÑ(9Q®DËZ¢ÜŠ–…¬»-«xä6®GnÃzd5ªÇs^qŒd ‚¥¢ÚsET{®†jÏ’rEE\lÊ!‘*£´ôù©K#ÈBbª$¤´Ý9?JÚŽêÙ"1^x0r$†’³#y¶8B¨þŽª¿„#…ä/áj?h-®œ Y‘Áa‰ºî nSs@Èr$H-äÕ Ÿ&ò…OmÂѸä©m˜â\ª*•Ó%Ó%Âê±ÉÎT®ª3•+†äLåÈ!9ê8RHŽ:Ž ¼£Ž+­€-€ÉŸæ¨3Ñ@sÔ™è 8ê8ZŽÜº8rëâØ1ù§y«Ì€z¼Mhn Ž"š[‚£…à–0QAvK˜H!»%LôÐÜQçòXìŸ÷ì`ŠC5àpD‘Id‡GÍ!Á•Ósb$‡WFÏ€1¶Y!ŒmVGu›ÕEÜÈs7ò\9”ÏžÇóæïœy;g¾Nž§“ççäy9m>N™‡SæßèywWì[ââøÜ4š¦2ţΒF”ÆO¯o-ªGY/’z7ÞJ*0xBèí£C^»&…Øf,ùõܳŨ(t5'§<qÀá±§®l å¯3%r%ÒD1¬å‰â@ÃkÏWZ“}щÏXºŽU4Me…¢ù„aüÍ ’‘×.øxR(RØ­kË}QÕOöGñÿ˜ûHG û£c¼DÕXØáÿk÷“ú9wo[ìëö°=Ša]DùúØ`°:f£`6C©› _ _Dz„æ|­nŠî&?äM_>"ã®?ÛªîsH¹,)‘^Ý‹8¤IiStƒ´1Hµ€9HÅÐç\ÞŒÔy»¿ìmIË1R,„Bˆé–$°Ø³ˆGr†ý'QLŒqQ•Që3ç q g0ÞHã6&pŽ=ˆáå{þÂË9êØÅÈY}Ú¦{€Q€1Úô§D³¦Çª£€ú˜Ïx˜N I)Ôà„°žÿ5 „zo0'ïÖ0hBh]Ä}ß7yS"hk I“‡Ÿ’¹¨°Û^.ÝM¹/«Óxÿ‚ù{__.b–÷8;ˆ/&ˆ/ˆaIæÄn#7 a¸ÛÁü­#p”ä¤j“ M§w­!J1îÆC”~Äeˆ´Òø:ñuÊ€/¸P"]#ðA2…÷U$ªôèÛ8p‚ÓjåË”· ¤«Ø)S¨¼¨ Q…F]½/2¾DÒ¾B_ÄM!;u/í’ý ú¿‚ô4ªOm}mWû 3n‰™²ºÉÄšËå+3ïòî”ÑwŽG)Á2•Û°©êÚ¡š^|z݉%…®}?eq¤îêýä¿b¹|Å"á—†ÞLØæMs~NØD‚¸Ìr艛ªI¸d¿‚þ¯ =êô•ž¾ºWtRµI…¦Óøúý%èDúS÷ö3Ê_§ ¾N$“Ÿz‚MSI‡úÕôâÓëæK†»š¢-ë”Kë~P¦ð4Uu[4SËN­˜/V:¥~¶ý LÙÒÕ)ésmÑL-;µâDbWqâÊMY­éD¦Ó—HÚW•qSÈN=sÉ~ý_A:_õŸu•²Æ§pLµ—ª~%µt"Óé[–v_붸äÕùo.~zT+9EÄ¢À€ðÂü׋° e@ؘÿŽ€—ÐîïË^$¸FD£ð ˜Ûãè[öxò×þ~ÛÕ×VL³Î‡ˆÈ‰>~ œ±QÀ@ ÙÕõÃ%ð%ò˜Ø¢ˆ[4á}}i®¢'Íû¾-wמÔvB ( d3€µ4m},Ï,%.I‡† «h ݘ2&$ƒ ¤:–§Øa»OÄÌ)죆å^ò=øÃBˆaˆ“Ÿ‰ü(X!€²QÈr®MÔ5ì R’ …@–ðXOÛÈX :æ0$1-dMW W‹ücÑvQ;®+"\ºƒu¨/yI’áX¢ˆ+K4Õâ‹hr•èP`úBîcƒ(( e3  åèÿn¹ÃØ”¤$ÃÚL‚áí Mw¸kHq†½ ’ ò0ØØççó.ß?cõ!g<çCø50š&ö~J‹1´_†bé£õ§”8Cþ,–>ò`$Å› ,à…1¦† }°àE ! ¢z,ÛººÄ%\Ð1‡!‰±`芒 ‹VÑhúÒ “Nçz'h5y›_ âLh‹$Qam,²À8ü°¨8Ïû°ûòMýÄ«— ]ˆDaÉa?J·ée1¼§¼ä'ÖûÕ itþU׋‘¢vG.åõÂR„£i³à6 Ž¡t5èÉ¢°Õ¨'‹:–Þ,Ðþk½Cly†xpHRNìæfXÔ¹Žu© š`Ä ²aWœ9*l’ @æ_7E+J :©PŽ?IÓŠ®®=åUù'»©yphº,º¨n{(Ž2\\Š~! G“Øm4¿—aí`ÝB€¦ÐºHRk&Ы§pÚ4E*Ö UB[ägV/bH:ÿšWQAV—Ø×ŒÂïöy³5û ’ÀöQX¢ú¼<×-<µÜÕº0]â·a­Úuûý6ßïë+·ö¦0Deû†a)]äáºg+raÈŠ4 ]‘Š“tÌ÷}Ç’4Ç¡iR1—$CTßÇDè^ÔcC¥HºŠKÞöÛý9ïº4ëXK€4…¸‘€ V´à.Þî¾æ=Y.M•Æ  ‰»jvIFÜ=³K"".™]`†~ݶ¼4uËÀ"ɰ6 ‹,0γ>,*Ο>,$‹~™<{½1ÉŠ=}¡>Å}Š…yö‚ü}ÞžråDA[:ñ" Dââ‰\HÓ4x!p"`!~LCSA¥NåK"IÞùàíx0v:X;¬ úŽÄd„aöÒy…™5޵°ÞHk4mò yã…¶á’h£%ÑKŠØQ(«GÆR¾¥v#F’ÎÂ"wS…µ™ò ŒÎçzË?l´ˆ„¤‘¸‡ ¡4^ó«h$‰ ¼è§Ä˜®èëp,¡×t/µTSiK"ŠáºÇIue7ä ~—¡H¹ƒaCé\‹ýóÂ×ó\ÙbIJ@–{›¡'> ¼Ž%q‚ARe0ÈBËÌ~’ êò²¡ÐMÝAðyÖk|†BÒ2¢¤Ó}"I]Ñ'’Õôšêž«=GeO’ö<òbÐY±X tBÖB?èE © ž@Lö²Iö’Ióráxwq¼ºÈÞ\ ¼ x?q½ž¸ÞN\/'–wS"¯¦DÞL)¼˜š¼íKÌ•êÖã‡@) 64ÇƸŠ1ž¢Ž£’yŒ%óKã!Ö\›F {˜¯‰ N‘Da½ È^bdï0šWX[îóž5IòC ¹}ŠÄ›Tð&ŒIòÀŸ40' 6â|ÁAA™5 '?ãbù4Ì ôyш8cþDŸNª/'ɇ“ë»ÉõÙdùj&òÑLä›™Â'“é‹ÉôÁäø^2}.™¾–K†"Ãýêv˜ÌÝ0™›a÷BE‡ì07'h yp"9ŽdÈ®ÏûkG~­ÎÍq´¥9í•JwÙ¤»j]4…Y·oËF­j0FòK@X!}TÏZÃe­ÝÒ×lS¸É¦pe»ÅRÝa©n°$÷W–Û+ËÝ5ÒÍõñ¹ÖÿìòªŠ(QH«þq ÂÜ ­úGÄò‰½iw${îÈ(êÎ\›’ UƒadÄ’Al"ùÄéÄuÙDi±È”mñ”ŸÏ&ö‚–×2Š ¶4.ÑXª¥˜kµBeÑQèάQ”Gk4íV¤&1¶ Qd¥a,ÏA‚âÔ&†Ý`ƒ&ÖQ˜ujÑ…v~¹¥”›Ç,†ßù%¾ôì¬:"ÅŽÈ1¾ó‘¥Ï0Šf~¢ð,«‡ü„y—¸QÌ”E4¥ó¡ÁwÞs«(j ÙiËŒHˆÏ0š$þ1q²ëÈD;2ÓEÉI*–I}:Ŭ;Yd‹(>Ê"–RÝ5GZ=ú-c(‚%¡Áìñ$ÃÁ –Øã(>/±|^bù¼ŒåÓàšVƒkW ¢QÁ‚O¹ßŠyYéÂQk#›¨%ˆ‘ËúÊÃÈä1f5jdò³þ42y\]q²˜ˆ¶èE…¹U/üò‚Ìh.aÆML§¦dðãÈ <šù8ØY< ’§”¸×š@_æ*X|G-r¯y¼ÿæÕç·Þo?Þ~þÅÊõ‰—ÝÓ4Ÿ?æt…î ¹ŒvVwoÞ)UN~O÷e_ÌT~#†ß¿¼ýüæÝÛ»ÏC~‘D^z?“'»FÙ#½hÎùóN¼‡åœú ã>åçÎÍÔ2èÒ©èÿúÇßÿ§ýë?þþ¿þooþÛKþ׺5¡i“±ÙHX¡v™›KÁeZﯖ(Ÿ•§SwS¯‰cþ·ˆZ©\80û©-þvççì¶{(Ùÿ¸|6Gôº•KMçº%¶‰°Q¦åüôáÓ+h?ï>|r:åçüËäÎ[õÝ‹±ª\hmò³úÏo"ÕäŦX¯øpç­’úð­7·õâç±Ý]Ëó™ÓFXYË/r=ÔODwäf<àXy›ï²/Å»Ÿ›µÄ°²…¿³”wðsU0NÆò«…¼—ÇqK +WgÄ1ϲ¹îDŠ{n®ÆÊXµ·è¾Êã37kb嬾™f ‰HyICøÇ‡¸=ˆ7fOÞh{™‰úìÍFÕ§g£íe6ê³?1›adÖ* ñ)AÉQÖ:ƒ2¤€þüê<€ÎÆûÌÊœÈO«ÌFZË<|O¨Ì&sŒ¦¥íUû•Ÿ½Ù¨[éÙh{õ|ÉÏlæ“@T.`®3±gz2Ž><9'1)ß¾¾ý|›É¯‡ü«š3À2Ö&“÷ÜüþÔ1À…±ýÇÝ-\Êó3kh-Ï H”ÙHzÈÀ87e#f"©”¨Ê0Ê>¾ý(æ1ïß¾ÿyÌæ¹¿—ÃŒ¾h›v™‚2KØ(+‚Dc¨Ûɳ¡p66Î8|oŰê’7ÓúQß¾˜¤Úz怙íR_ 9è+\ç“Ú±i‹þ¦•—x@J1ÍÛ÷×v2ÖÖ¸J˜¸›Üt—ß9Þçó¶øRì¯r‘Vlec¡l&ôÏ ZÚ[ Ý½ÐO^ƒæinZÔÝÝ/ÛÛO?ß9˜Ý8Æddv朥ÈðÕ‡÷Ÿ?}xç.9L3sä6Qæ€ ؾ~ûÉ!j¨ì-;ã7ÿþæÕoŸoÅŸN–âykË‚S©ÁÎìӛϟ޾«¶‡Ȉ »‰ç2ß(óÛ÷ÿ±}óéÓ‡OwÛŸÄ8ï?1¸ñG1¢DŸêö ¥€ÑæŸÿ^XM©v}$˜ƒÖð¥L=½ýø6{m¯ ëæül°#Š´ÏO¦0Árc,?ç'1ç]DÙçÐ…Å´¬öçë¡èþE p;1 ;Èq¹4Í´© ÐGݨkï,}‰1ö ×Îê'7÷5= x ê"B“û°C±É›ÞxÜŒBè å¿h¸½V]~,Pó-mºÑ¦À ªì2Ñÿéoú:Û]Ï0Ù“³©L˜ÈVÖeǶ¾¸o ýÓ¶kŠ}ÄôªiëS›_¶Çsm.Íë^i#‘nõ_üåæ"^ Jœ½ü9YnØ×ö»¢*D)éZ¬½ÞuÅ%æZY»q 5ý¥ÕVÄ7mOBŸÆ¤”_ÙÈÏÕ>E3”A<µËžçÌØ°…èžÚ¥cä|í­A?"ÇNç ¾ÛŒX ü¢6IﯻˆÇi4éGPõÕ0†nzø:ûåºû&ÌËsn¶æE'ÚEtÔ‡bw=†á¥Ø ·æ«L&ÍÌßäOÝV»‡•Œ½g7ªÛ•x˜k•e÷Bþg+¬tVOÝfb~ëüi2¨»}>­ü8lmy«?Á`æ©„©;\~‚èõõ ÞEº¢Š/ù¥!äéÂl ŒÉïÈüÛ[ñvû]Œ$®ÝwÙ+0øÉH*r¹+Ð#(ȵ®ÑüXÉzkþ”¨›¡=ÛMèêrhe{ûÇ]öþÎ~„¿¡tÿ°JWås>|.Òê-ü ¡ÖMɨçu«û_Õ…û»hx A5ˆ‡IØÉïDíV kccý<$“£’á!»äBÛju‡aI^UñFÇÅt9&B)˜n”é{ñ1»ƒÿ’½ùÒœk1‹úU½Rd.öU;è|ãÖ ú:]O£à£õñ ‹ê»ÓîVº#AÄ\| û¶¿Óg?Ë¿e0ØÜB b`¿ˆ-Ú^ Raaì óÍ\rü‚ë–ÚÜ,¾=}Yê–Tw'‡¤g­¨3ñ:èBnUV+4IU.`c~Ô_@F—¢=‡ìã§Ü«ÌDg—w…ȸ+÷°â³/š>üêp“™,Åw›ÁÔ4óÅ7»Bð/>¨ŸÔÉ~ƒ£V¼¢+Ù¥4mùXž ÑËPX²ŸiaãÒGÿô—ÄkZAmó3 åº\|‚È™ÙH €H'½ìÇ7¯>üúf{ûîøÚÜŠ¿Ý½ùd²,¾ð¼Ï9{ðOùßFÀKÑß×6âÿ>"VbÐ[·QíA©1ùQÕ8ÌÍWãàÈàÃ)„Ò·Û®~è|¨ŸÔ®ÝGù9{ûv.$aÖÅ—º=||÷ÛÏoµ#™“M‡dÝ™bQÄÍó6¶`N½ý×±ÞžÊê0ÛZ®7cbÕÛê+zŸ?–u ' Ì}ne~„ØX¯´óžè=Ä|D°´0$ÍÆÑÑhô͸‰Ç›·HÑ<åÏ1Ãoµâ¡ÕÀç6ýQò‘ï¦]ˆTryh{/ ô<Dæ$!6Ä/æƒZyRy++g+ºàkAÊK›*U2ƒlÈX“U&eu¿Òt*6·µrWßó=A²ïú6o¶»î°ÒâD dŒ6`ô£ù Ö²ï^³kE£Ö›˜Ee§âž[Ó]β7ª¸+ˆÿÈ51½º9,”tÿj²–3XË$d/§ ÒÖ¥ 2†\‡Ìä¢Iy,÷ðh]žåÓ5,*‹`ÊøôޤÅQŒÛrÜ>’êjÿJûTvÑ5Ý6®¡¨ß¬8 ô^-N:¿ÊŒ<Õ¾œ2`ùé9§ÚÂ3·íšû²ú²ñ9Ž£?{uÖ•©óë àm¼a®ÖÞ}–žÓúA·)2°Àe=rËaö¡ˆ‘²´qÖ—ßìóý½yý!_°ÒT¿ ³W·¯~1oVÔr gà[ŽáNV–c¸›kx "“yr˜@¼FÐ-¿ph‡ýÇOo~zûïnNpø¥¾öœ¬ „“×ç·¿¾ùðÛg'³UDâ  £1-8ä'³šÏâKüt®».7ƒùê6¦mT³䨒šf0z£×€&$GÖ1-Å›…§½œU{q€;(”°¦;2Ô•ZUÙêUjXÇ_¸e°7µU¨¾Û¹ö¦™Ù‡;‘Ÿú=û —Â÷GˆX·ØÐ?¾‘ò×ÇÎÍŽx¿l$ÎÆà(G„Ǻ”’YkÈÚ²{Ðý¢~ßÞs˜1ÃHGžÈ„­è `Ym/Æ2bZ½•.c¼1¤†ÚH¨F>×'X|Úö5z9`D/ù§@x›æ 7φ³c›ŸäŠ–x²Dµ‹±RA{À|#Í7 k‡µ2 ùoÜöЖǘ¾©‡[Ì` Ö§²ŠÄpÜ(œWRó¯Àó¶Ën³×òÛÏE×»yFy¬¤÷äõœýžŸËƒ*}Øÿ«¼ahq(Gù×7Ö¶·½ek}­6mõßÌ•Ìì#g™ûݤ«ƒ™›Ÿg0𥃶 ñ•k/¾øfî52·|J3÷;Ä]M÷à¸ÓÊlöµƒfª:f~w±Ì·.”YxõÁˆß&°¦:s†Ùž™ó À„»›M==¸•V7çs¹1Æ Hq)ÁYä*Y+Ùöjð7:XwīΎ®ÿp^t¿—Å“;êðßÃÛÔÉ¡C£Ã{H!/îg±Ð»—bŽ~æòЛ— ÊÆµó«GØÌ œð³ûø1§íÕêéÇü4ÔxÈïµþ ‘cBèÔ…ÍNгtö‘—Ÿ3ÙXòtñ<¨C=ñ†+å|ËZqPù̶R‡Æ-zÃû‹Y7#Î+ûÑÐ_~ãžŽë¨ +îñ8óÊ9 ×é¾'°~³^Üÿ%û­›­ÒLà8úvRÑŸÏÎÛÛ iüIÔÀæ-¸.ŠW¬^"ÕXr= l{¹•>Ò/À\aŸ÷jñ¬°Êø²3×c.™øö™½‰³üýÿÉÞÁ0RdÎ:E6¤ènÉÿ9¿”#‚óŸó[9fTuš•ܧ‘X¢2ŸFañä-ÏBáüœ‹Év+Ojÿ˜,ßÁr’vR*ÏðBÖ…ÜËe¸X`°Ä!Ú<¡Ð<–^òvº&øœ.ñ ²è=¥+rƒžÓøv<òâëƒ\ßÏ Ù6q¹9û¶þiV¤W‰H!ˆ¡¨µîßÕ×v_,±} šcãe#RH6ð_ynT××É*èT';,F ÙûINRKÆÝõrò?¡oýä?þþÿšdÿ¢“ýãïÿ 8Ÿ|XRӽĵÙîåRSí^J~bÎ~dõî¯슈§ùîåbsëŠ}[ô¸þÚ±ñ³‘)œžY}o¤¦¶ªŸ'$ùí¯’w»Bµ},!zi³ma ØaYûÍ&‰-ðÄ¿ý˜é_ÌÞÕfÚ7ì®{1bêäƒýÃZut¤ªÁÀ¯£» =—Ú~<_ =º¾»ûuÜ·Ïà+Ñ¢­Ýÿ+¸‰tài$=ñ÷D¾¬gr|i#Yá^aã5NËâîÏËÊ÷ÆU­ÂõVÍäÜ=R UF”Iþ•:&„ޏ@ o$1ûƶŸÙŒ²“h®ê=VÁìׇWðÒ½ýõí*G4½ef³J“¦wgÒé8ûVpúú'‘~‰ZqÞmÅÿPì/A•ÂâØ}/ºÔ|°Øv²Ñ)‡á7ï~¼YäY‘ÚÙÔÌ϶ŠhgßÎ&VÁìãÚÙ›÷o³ñjýöY#æ»LÕnxð®S«yâ­ò s±^„¢6Ïy×—ûì½v:|kHgß ßÁh9¯†Qá’écL©ù¹¡W‘•l¾þgv $âÚÀ°ëª½¯Wær#<÷e=M2—îÑ’àï_MH.’›œQ\§69œ8%eÖÞó‚zð{“—í§!V ¡Ýym½LÝ”VÍwÊÉ)ûv˜6™¤ß醠âš*gM¹^·ÞÑãDY[eû}kSe%? ¢mŸÉø*uc?Üʛî¾î)Åíµõ·›2Šþy÷™.³‰{êëóûµULß?ä@ÁÝ~¿‹)Äðµ:›*ªýKÙÉ5Å~‰l//ZÄ–öÄÊKÖ¤‘då¦(œ_ÉjÕ˜‰}·FÍk™’ÝEÁ[TǦBS%Kyj¦f^šC¢5øŠ›X³Ç<1ÏÄ£{½CÑeŽÓñiVß‹zì¯mežàò üV XIÈ „ÐRîÍ~{¸ß7zï•TÓ ~I> IBk#DQ\o%:6°‹¨þsš KR¼)D­”uÙë_^}4;ãß+_jèW«vÌ`©G&0Â`ž<•E%Ça¢D[|ºÏûüýurKOL½ÂK–†OUôÔÆ65 jÆ¡5ª‰å"•¸®FjlÛPãu²ªÏÑQ½ÕžÃcÙö×ü,ÊP?Ò]dcwÝ1ªÚcdm§dE«ó¹ñ§èšÏ”AlÐðTQä­ÞbÂÙ"f±n–Òéð7ŠÔíS´{¹Ý]÷˜B˜šÌô léw/3õ¥Qÿ}öº<•}~þ°/òêûìUÑÜŸý‘ŸÛ«èHÊ a"—êûº?zûÚ§"¦X¬"yeíøk÷g½¾õ>#”&Ÿ.vLCdê\ÒJy-›9nŒ7:ÑI$Ëíö Æ!rþ˜}+G-g1—39ñ怅5o—ë4Ö)ªÑ—³¬61bmŸ3Ëés‘à#Ì5K…Gl8"0BЧR;8bÊ Ë?þþ?e À/âý¨_Ô~Ï7ñ!’¢ùÏ+Í«4C‰ºžˆ×¾øV/¾‰ ²„¡µBÉ’@<%ÑŽò˜Rò‡tŠdåèä-³1éØºÇYÕíÇÏÙ¢\£í‰%CØIhNU'R$Íóë9´©9d°N¸í tÛ~•lÛTá0ŸX_17U^T9ŒCÛëJ¯NÅÓšÈÃvLhïÎéoÀå RÜ·uU‹¿á4Á7ñÁŠ¢éÎCÍ™Š4z£9?(ï+mSºbÙÇ­õù,u„Tí6çÙÜþú.3Ç–ŽøŠ÷_³Í;¸óï\î±`ÀÜ/iš8‚XÔsÕr‰Žg¨éÅ;õ›©õ£!í7¸³ÙÑŒü§ºçlÆt²!¾­àñ~¡6è^˜Ž:˜ ú_[1 ¨Àåa÷,f•íƒ'Ëà?ßDù–Ç*pÑgÄÅÏ’°Ž‰ ­áùù(z˦_¦¢’"KÔµ Ò$¤ç•z‡¨_°–×çí©X©ss™Ö²SÈ’Qˆ›<ØdÜZ¶9g±^>Òsd•ªòÏã*tÿè5R7I%ÿß`Ìöoeõ×ü–?gòì;T€Þƒè<¹ˆj–ŸÇœV”5ÏèöÑ<¯4ŽæYÏÖÅõnìõþÍpM×2¯v}õ)làÕ:+Mü}£Mð±ÏwYQõ«ƒ¥}÷({dÃu¬UåAXä‡ ¶¿LÔËÏw¿ÃÐø•øÏÄ1}žÙ¡ØÉ£N¸t­üušÉbLžÁ™"¯Q»žðÄ®§5ZWõÈlKôMôêÊ‹ÿpU!Še/å¸å¤ƒ>ãø«5†oÌÀGžî̤7•˜ˆ‚—壉 Ø©±æÍ Ù£Š½æ,ºb",SIÊæó›ßBDÒúÚ7×åWСÜ÷È'Å2 0 ô3» L_(ÿ?ØäÎJQõz6IÁScõ¡>àŸ–µ'E?%fiæjÆ + B«Ý[ÛeŽÍÃi¼á;tó[¸»i¥Ž×â»®uÏ`á;ú1˽¨‘Í`´ðs¿K^Ÿ £=@ŤGüRŠþ\FlÀ,³û"æØé¤cà(“¸O}nJz¶Þ55 šÄ ²‘#ºe¦Ç¼<#yZ&~–@rü >Èæ¹¿v½x|.¢ZëÐE¿¿ÇR²lœ …"%?Y+zQÕ‡•Z%¼¥W_ÑîûYþ‘uV,3›Õ)ÍÀEgTA«’¿ˆæÔˆ)NQJ§s½#””ef‰F?ÅQnÑ©“MÞÃ*ì Eô$Æ2 QÓÓ—Oj«zŒ¤¥(#ê!šÕ¾/Ñ›¬Pm»~{„y#º@§–!âC:ë%˜É¯UÅ«ßä³¢¢½,å*^äèñŽc`)’øF;лÀîÒS^ÊiÊQ{çK¯®E¦'¹QEZµð˜úYÛ =¾is?´eÆêpÝâçŒÓc“py¾¨œæ¬ £lúÙ[SÑo¯-ö¥ãZ…¸Ë4jt¡ wvOÿËçÏ¿—ÿÞ}sŸŸ>Y• }²œ9ĸA3‚„aL!W‡³'ˆìW´f»èZ•_2Z—ýòŠà©D,WØ•ŠÚë¢9×pîØ?ÁRõ·¢äd¡~§JÒɈ2¢1¯T½tˆÝa&f¶:‘íJd¦ÓEõõÃ(oß›Žž})Åo‘Ü}S9È«c†h‡Ä|¶~‚“”za ´'96'ð­4Ð a ×5Ðö-£·+#w)õÅB«Y6eUô Íg»ÀW¥ô½Þ`<áÔíú]'§÷íµY]}+ˆMlȳ0q÷Â0šïI©›b·fÉÍoí§8I«Z³º³VŒ‡àHë¹É»FI<-ËEŽòR‡Ÿ¾*yH®1Þ÷öý[5IÍ»Y¸†›U¦Ø.WеôoµÀ«{,c$kóÅ7€Bˆï,ý¸°"{cyªéžµÊ"Ç#1K-e#ƒž¢{×,À_'RCúPE×d¾k¯k‹´¤glýÙž©¡á›E&íjåp CÇrq­ülLIèßî>¼Ï”[.lËÎpùù+D`Cï¹VbF²’Ï0Ó{@òpköo¿A"à¹Ló¡³}Ùˆ±ílné§k¥óùªçA>í0w·S¯>÷à’·è)ÆÄÌO[% ìæ™þù˜w÷kS HJò§™†™ZÞ4zB¡®Æ'`p£‘ v•%ö‘¶mÂܺ±g×÷uÉ–jçe…S×£)uý #=ÁíĨüüwüžÌÐF ½†HI˃®‹`\ JõÔ.@P¥RçÔõgüÆ}%ÏL!ÇÈÏN%QGAk1#Uë=ò‘;ú÷â¬Ý7Ä ¹–'TäHw‘r]É»ùÐÅ:µóש$só_¬z´á³õsuRê•5µqïœóé"VV jIÅ©*ÚrÑý12¦SùPo»îžÐ1ÌCtÇĪOºVúåüXæYóÜßCÎâÇoMÒïVÈwļD>c³Y•Èì¶eñ(ãBèý"¹t!Þ„rH%ýÞ `–¯ƒšüÚá[Åhâ-Rè Ÿ†afœû–Œ„Šä4š(Á }ï"µ©íÄÜö=DR…™Lž];y®n Ê»CNÊ›Z@@ã¸îáÒ… ZA³" q‘>*~çr׿B’}ñô3¬;…eäf¹S蹄ž…Ç Ö¸S:Oã|®§vvC*Çû#|}_/sëÚ†Ò)¹ff"Ѥ›6ûµÜ·5ìüY$³O°a­ouík‘÷"mÕ-l÷÷5„ ÄÕ·ÏÖ/ÀIiû1è^I¿ÿ#½Úü ùÐŒ!~OS·-¸°Â[ë;8Úþ9ª‰¶\ ‡¥gÊ$Ú…E~ÌÅ;|Š>¢SÝhB¶Uˆ‘L£)©ÏàÛa¢â¨Iˆ±/÷×sÞêm½ñ“ÉàÒâyÑÐ2:Ò“4a-kl.„Ê®U@£JcºqUšÈ©9ÉXKÃÊ‚HžvË\¯UÞm­kjc˜Z6žbè!n;Çw‘‡º$¿<µóóÑW¸”}ðK'èaFl¦Ç°ÃWÍŽÑ*[Q|êá‡Ù±þÞî¶b–!Ðh/ú®N4YÕ¦—{¬¢RTèvb`¯IþÖ€ON²§Š<«®—Üþª“¯ðUac)óŸmˆ¹•ÒöÎÓ?(¿~ß$F®ßG) q`í„%ÐQsW©ØhJŽYˆ“J$Iݽ^ñ”åªÇW«h€ÞÚva†2Õ@Qýeº˜C[æ6Ñ£­±E»Ù6A–Úˆå (æ—¨ñ©I ¥& ?ܽý÷Lá~ûb';[¡#^dY6!:f„l–ÄÔ7ØÝùÚ¢kв °ƒªÁ§Î 5p¾ä´†˜u³œ`æ•°˜ßíÏ%4Q­ùJ  xn°Å6šX‰¦V‹²Ð´+aÖ=w}qÑÍ—É]‘c›Á @ìªêòºëú²‡ÆöÛêÈæº3ˉØ×íÌ2DjH'Ù‰‘ܯR˜ÕÌaL8z™GŸLØú®lO ƒÜu2Ë{T†6CM¬P=ÔèÚLBôµ¯Æ³×–¹ÈŠ=6àZ©4ø×ýs÷XVh·ß‰Y“LäÄzî~˜-ï, = a¯pbæ§f93áËZ.?‡VÌ]©kØžó;tž˜…ÉB"wÝÔœð1§CÌx_%†Ñ¾ÜºPŽ÷qÜñm™EpÿlþÐo»ÚìÑ«±²,3­E28 ,e×,ÀT'R[TE{™¤¥‰YRþYÖ×~úúrÆÏZ]«ÍËÙrbO}þðë»Á‹ÉÅF82õpz»Gåèš#7wâ壯ûÅ£l¶¢L×÷â¯â]´¿/±msjç'7¤RZÁ.,;óµz¤¾#«—A5•TÔ<´',Eƒ<³- ¯º¢†·ž´j×*ńڑßTÇxÃ;HèÖ†@=&?N·\e\Èê·‡áça…Vt|p–ùÓO¯V¼#yf!1*‘šÂˆ®n¼‹sñ(Ç Ü»¢#pªí+§q­ð¾ïû&oJÄûoÉ6¤@§ªÃü­ËßzÊ ù¼iÎ¥Ü_Õ)N’»ç™Þ›Wr:—;Üj÷‚i¨ TBYNß~.DM7­¨Åâé;kø :R^E «âôŠŠ*oòó…¤bfR¡ê°còvÌÎòL¶¸j-ïo?Þ¾ûuxÑow¹°lѽÞÌ4H|H¨ªàPˆòßÃcö½~Sô„ü‡¿üðÃæ/ÿuó—úÎLšäýéÒýUAtv{Ž{WAþ§¢' <}„ºÓpa@óììøLû x6ÍháÕ²·»Ëc¸“ޤbj½¤eHK¨¬ñ:R%`êô,Iµ“Ծ˟‹vóÃx_ QõK®ê—8Õ/yª_Ú$Ò—•˜LœhbÛE*%A"Xf´-Njp©C„ÐÄž ·‚}‹ÒJ%¿{ýÑ®fw¬M/²ú8ÍT¥Æ§&…ÌútŠ÷ _²]«RRÚ¶¶$‰k¨Êš8Y£÷{û3zyL†7Òƒ™Âûj¡¥ F»Eò×À `þÂW›chþàQî·¢3êi‰`I‘œÐÔ”¹¼á½–.˜Þ™Hö­üµí¾Ï:9_ýM–Ÿo¾‹)¹˜J+ Ût±Ô‚-¾`qHç}ß–»i1Ä?zˆ Š á’Æa³¯Ð¼)u (Ø24Ðç¼"é´ —tB2‚Îßßݾ'ÖÜc{¤ j1zÚ#EΧŸhjdÈnâŸ×|A›•XJ4ëHz*弬ã™ã'è3ÛÎî=_œ¤Ãó3,Ÿ-˜™ó!Ni'¶kåo¦¶*0®Sæ/”ôËäý›Ï¯>¼ÿ)SKk³%å›Ham³' mׄ‰”Ž)„¯UWÀƒÁ—bV©mÎc¿ ɤíï,Žm˜¤Çk’c=/FóÉà—]-o¨ƒ•ºèUºVŒ*9˜ß>$c’ZjùE”?x ™ë½Õ…0ß+Çuk­¼I½>Næ"ò!ÿýôæÎm˜‘ r Cé5<Æ«¢1ý[”YùÆ+Ò–krT剴·"—j›ã(/¾W[MݵpwУ2&·ß®ðï‹sE¨Ç,Ä\%Š8U¨..„Ô//ò}¬3ÿ4½ËQþz#~ŽbèÃË–ç÷í«wö¹››%Z=ŽU¿DJŸ`“‰oçá,¸:O8t¢­9Ÿ% ƒ½ G•䵿¯[p8Dœ\0õJqúOVÙÝÝ/Ù˜2x÷¡Ê{¯âºŠžX¼=ÅP³‰ö+\³÷ ˜¥6Ã*åÃk¦UpI©6IÕFŽŒH=Ÿ­ŠSC­ýB ]M0öàÌ$¹—¾Þpzå™Ù‡ÎÌ(Duµ ®T]•ñ2˜1¼—€³nÑŠVtceŒ"ªr9–mñ$ò8 ZëÔÊÇnHc»Êåí®ì¥Ç6t«9§R“E¸ÊÓûIêê”ì…/–ª4j'ÕJêî¢~„Ð!‚²½8&>­@õ¾x3°y<)«r¸€ƒ#ªØ>Jòws ¬¡eúþ"y›–¹ê©tM]†,UvM‰ÈÜÂGPþ® ­[êoÕS½Ÿßÿ¦éëÀ4Og§z9 ¶CÖ¯ßÖKÚN)Éçð†èË‹:&?{… Dò¹t³UÑci”]Û%ÊcäYC¹˜–IwÆà\D¯6ù­|$‡4j)»> |ïÞ¼+«ë—Lÿ¶Lí I‘Äl?-™B=F÷ps¦î•O‘“‹·¨æ¹Dï¡lšgdOŒ¼e’…®G×/OUÝÂR‡¥S:çñ€®Dgv^ÒcªÉU ¹¼Ï3k!4ÈKþ ®­¬«1Ìâs}m‡¸C]ö·k) T}λçEQݾ?#õX&~)À~ ë ¨úQ^w¹4‡'±E6 ׯÇL¦ǰòq‡+¬ ˆ·<Çíecth·>¿•ËJ¦ùJî|*yäþP(ÖS+ë!šžÃÅDòz8ñŠ’íŠþ ž:}&^¼Îº¢_Þ¦ò†µñr»<à5òñ5IÜóÁãl2œËpnÁ6X,•YIÝQÙoðÃú¶>¢Šbbä+ “Ä­9ñßR‡»Qá…Ëá~©á\Gþ“‹WJ)}-˺C1Ÿù˜›$Šùæ •šL7gQõî¯p]_h0VÖÏ ØA—¸pu®"¢VÓ0Q.Bv> V*µ.)ÿF>%BCyˆ?Nê5ò‘3I$³ßÍr‰MN™µqˆiCv˜2œ}=ŽO*.ZÜ#ì$vb_m1ñß-,c•Õ½à#ÃJEÊ:‚[B:ý'½=`SëbÃOQäi„#Hëw0$aT?¿h‹“è|`în9Q«ãDzÕFn6C|HX‘Y±‡{%ìmneÔH‚¤FXàÌÂ9%#cÆŒ)T4Ëu%¨CaËÖó«ÒíK@íXR&À`ð‚37ÿè›»fKœÇ¼a´¼ÃèkÃ…(8vþ‡ªÛªÐ&ò3ã°„1©{Wu—½~—é¾^°ÿǾ¾ä²|ŒßEDcAËÔž¨­HÝY[ÅõjḚFª‡Ý«U¡u÷ÑqIc0VµŽs­/`£TÝÍf%c($ËŠÒ¢žüª“Oí_ÈmÓ}¡ö/ e•zt·§0îöët»½>?þX?ÈNÊ "úúîU„‡¥u 3ðÜ:LܾðÙº[Ä{4¾Ç:y%½â\Ë0N¾x`Ïg5¾¾V¥ùÓ´’ŸTÚÎî»î䓾.$>ÂKÀlAÂ$ÂË÷âmq•žƒÖö–zÀ&íJ¨7{Òë9x°Ë:é%Àvþ¸kSÖaòáëSi·§:Ôݘœ®?± gb`wü¦¥+_Æiß+‡ª!†øpØYmËÓÎÛõv޼üqÁ4ÌÔs ¤)SS°οYðbH;g®…ÑI Â"¦v;1¿ rtšõâi4gÛ-p~2gí`v&ÿZe„»y!lfeßÀ`Þ;/¬wŽŒ… ?«Àö*yñþžÄº¿ ¬×'ƒüÞûÂ_§„"`¶@ן¸&¦¸GÀ”õœ‹ùø^£PpëŒÇèõÞSãönü{8šk•³Ízù¢  Ã,}ÐMa/Šr³:ma4L—xª„úÂ“Þ c,ãÉšÖ<¬×<Ï1|*%‘»e¹HÒ™wÜ÷pÃtu*¾·"{8”ׇm&Â2”A‚Ç<¬ÃNlõ]¨‰ÅÈY>t‘ä§QÌ»¢Ôñ|ïsÒëÚ¶[à ©|ý´ü!†­s‹ë×âGN‰]GT·Ùe„üÙ9"}.˜† ' ø9Í8sÁt™øzM2,nέ¶¨:m×2ÌZ§s¦²xõÐmh!:á:åèÀ„~«ª´…N6i”ÜùÏjO²etL‹ö~ ³ÔθæÇŸ?fúçLÿŒ)uBŸæµ RW©f”õ×HªhŽËä"Žö¿ÜüåŸ6?üów£Ó¡*Ì™rpNƒã‰“Æt³¤g.ÃHzSû” Çxá³AJ¶Ú8L†`ܳHûJ˜y‹}3u8‹dÏØsÏ3¹Ì÷F™Ù¸G‹uïa‘rOw:“%’ÈW‘ká%X˜•ÖÒp`Ç&[Ü~|»Ø£î‚ ›xÙ7¿é¨¾öezêmŽøŠÆZÁªùÈy‰íÚ‰doêågGç¡$1OKt²e3o1& hµ‡ÅÈ$ŽQ[%®WÐÃLdÃUK/Mn,Ã&QýÂUq+´£+íb¥êë~ /1±W-ýdG[¤ÖËKz½¼Œ­——³zyI­—|ßÐ {ý”ݤŠôí«Úx®+GV(*'Fž¢Ëï4/¾Ÿ©¥tÉÈOòk¥½ªd,KÊtfnè—:&S•Ñ-1Uàí#Û›täJl9±EƒA‚ö¸U’›…%6‚¸¡KF~ÎVPPd´O7¯ºkŽäVà7öž$•Ä?Ü}üÉd}2­àW…³Æûñ<ÝÁ&Èòñ‡œøˆh™Òø%ÒËUJ/GJ/1”0QDW-½ô¾BÜPÚ“féèZ»X±úviÅ_ƒ©™¨X¦ 6~‚côÒµ°¤¸UƘÝÑ …—êôÆ4¹Õ5Ày‹F2 *´ð2冥µgȵà éÖ”¨v«È!ÚkDdÓŸŠŽe: RŠ/+äZÑâ:‘çDïh¹|u’NŸ?UÐoêPôŒtu*:$XÍ´#äÚ­fK[‰Y±ÓÄäÞѲïbòË'-@Ä,>ØibrïhÙw1ù‡åSçù‘süI²E¸¼2 çr"j=EI=Å(ÅαWæ×úç`v”ùnÄ\×J²˜5©¸ã¦±“d‹4py/dÌ;¥\™NêŸCÙ‘'ˆ‘“ÃI²%˜ùÞò\Oýº˜×Kd^/ózÊ‹6C‹™ÙibrïhÙw1ù«; Zž©_Cyáæ0Kóø-” nþ±4÷€ß–répÙtKù+5î_ó‹Ÿ|YÄ ªW.dU3†À}¬O_äÿ—³±éûÓ—ñ/V•¶ùa{_ïƒ=„hY}ïE#èâ,àÿ éÕ†¶ún :–Þg°ÈnÙ/‚Å+eq¯†!#–¿$> .£lw}[?O”ä‡LØN)Ò/˜¡Ç²¨H=x Kä¥-þcY•Ýý¢ ¦\‹ Hï%¬}4ݫ;ŸÁÙ¨ªÈ\Ý"•æ\ª-¸2Ùù© ©­c4\b/ðEÕ—9ø,Â=Ojñ¥dç*`S8‚dDß¾ø Xƈ¢êˆdÞ?7ä ²lW*RZ‡Š¼Bö×®·.øšÕ `,‰*¾@xk”ÇÄ'A%ÌõG³¢×¹×‘I¶Kì¢â-|ÜÆØÑ­Cš,±„3s(’–#üŒ£K Ë º–K•@òÔÇZ–a£kYÜ‚°tøêöšzÙ: q¥klõÞû²”GñàÕís,}ÜCÙ‰B|x®òK¹ÏFüf¼QÐÚYÆ®•¿x /dÉýQ¬ oÆ€ñ¢һЪyiR¤{²„91ú´…It*âÛî»%­w”)ÆÌÌÇvL´8™ø·z·Æðœ_«õ`ûËf!†*‘rQ-†1ÜJä«cbäUêWÈ;øà™ø½[ã{üxÍ0ÄÏ9zýŒ ËÌX®J@O±&F!êk“)I2fuÎwÈǶðÑ“¿ãŠTš,–¥˜ÃU‡k ®—ªJ1„‚ŸùnV¦ ì.EŸ£¨Y>^ð³!­Ëà  Ø:ú:úô÷e§·©ýG9ôY*̪ÖñZ±sU¡¾,–éY_BX#F|úmˆ¥2®ÛS^•âËØcè“b'Ã)°-—–š¶†5yׯÇ[§ÀQÖF1l ƒ¯éwÏ%‡ ¹tìöè^£-ö…xZQ\]IBwêsÞuEöÂM78nõy‘X­£“œÚ¼êU#y:NAÊ%f¾—Ånbäch’à§±ê¢(·-ü‹Y³ôš.ÑW uä„ ns•e¬¾ Àö龄ë(sˆündù¾S‚̵K[W —Â-/÷B/{ßÁÝ^1Óws®IÊ1òÓçE­·“ú×)–ØõE~A1³ |¬àg\+‹E†âIĽ¨l /GøIL 2fŸ2dà#9xZFs”>—KÁ1ïx®ŸèS˜%Ÿozœ*?»ñ“„8· ´Z0Ñ‚¥QÕ2Voœt¤Þo»(ÒšÞËsØ#mÄ`c@ãµHLkd¶Dc>¯‰Õë•]ñ§/¡-ñ?¯m!þ¿S_mÛË6?4âµ$Ø¢‚&¢‘tQB¢Ûî&d7„F²÷M /‰¢-‰,¼"çl¼GBŠŽjÖˆqξläÖ"³º–cDzí‡ê»ýS†Py¾6·Ç˜˜’Ù`…­ÒY®I‹€®Þ‰Ò©=^öCÇ®o"B¢6˜Ôè¿îж*àHÉÖãñ¡_!“Pà<€ÙE~8h%pÙl^Bx#äÛÛÿ~÷ݰ%…QtmÄôïP$¨$R”RÛn¨2x/èL¬è.ËóRáVáò„h’f ˜@³)J³m7¾7ycSÄ‹r‚ýTÑvÏÁ_ Msïò§ü™SS탉ÓíXo˜ŸõÏøŠµ)ž¼æ¸”b°Pb ãNul‰Êä+·${„n(ˆÎ”£PqgÊ‹È*]ë€b d ±Ð.^©Ð9o!-¹QØù¥.–úå·ƒ£Ñ Šê±lë*Í0mSSˆI3x3þL®y;‹ÔªY‚—kޖΨø4»–Kxõ¾ÝK-ýó;½ÅG®höæe /p^³Z£"‡£«ÉªÒ‡ˆÑêØOªÓ%Wfìf EäòÃ:ÈeTð£rX¸(…tÕÆÅ”ƒeá•=u¾ ¶‚I®_¡8¸%±Ü.¦åÀoúZ‹äÍÃK(%¢y¼×wt0›‡Éõ+·$⚇)|󨺶Ø×í!#h+BüÔr¨ú×ïï œ^Ä»~:°‰tQ$9¡=ŹèÕåÄ:Æ hTi3’~Ò¶©Ö :ý9L”ÔÁÈ©8ø_e‹/ÉÞóœiñä×J~“7ìJ¨u9SÃI'ú“þYàÀUœFA“Ç×R/攋ïø˜u9¶ÑtÔ{Ÿ·ÅAÏÖVép[Dœ¯ )g^31È7”†O²Š\nº{ûó°Æ‚¯-'ÉSy– F%:–»‰ë=¨;Uý»JD¯N“KZÑ ½Ku<ªEÖõýA˜”§û~¾v½Œ=˪è%¼uÕ^ëIÿòú­J“½R‰¯ÁY ÅRuΫv®]µIz\BWëécÕ^†ŠË©Öêhø2m‡”ÄUƒ2¯ùu<åÕ8ã1Æ«dU r¿_À4y<÷ºW—g²[‘(¢3)ñ'Ù’ê£Öú¶þœÝ_wúŽO‚°šÐræmŠ«CQH¡ÆABhÒY¯(ó^»LK'h~”(aÆfœuIŽÕ4(Rñœý?"Ú€™@ V‡]#ô˜ÅÀ‰ÿ¦ª— T¼$c¬‘€XCFA”ŠÉÜ£žA^IWìÛ"Ù34G‹WfÙkL¥!VšÎ ™JšÀPíÝÉ_ãUëü°ËÏðt²'}!¬um3Ë¡êà—Ìü„¬15‘,Š¢ùKÊQ…´àWÒþ[9{k#o¢cÿ€¤ÏdŽ!Íç{Æçç¾ÜC`Í•_þ+ 1ÚB“™ö0?zWŸ²[c’ 6Ü¢H] ¬˜×6[µíx(;öc€Z×:5ªØÄ„_£™FAͼ¾ô¯ÅX-à—$¢à\¬:×x2ùuHBŠ8Í!P¢ÆP-B%=ø¿äm)^žbžw,O×6ÉIÞ5ÌÝ„Y‹t¯„#ÍcBt-{òJ,ž£Û®tW'µ²úä`¢zöÁEKuŒµ;œt$UìC:¡DvMδQ+ÓDÛjx©®@F ž*vˆö ï´êË*­r†h_MaÑZ’˪ÎB‹ò'A°hµ–i rïd Z­jôTIÚ|u¨5á+¯®Ê¾nÅPšÂ'„!ojéO¨$bîvB‡õ¹©ƒ=•@’6§r5Ñ*/éPa 0Rèê0AŠf fÙ¤TL;¯YîàrH44ðCEª\H´A…œFAӼΨƒ}H¡¬ú¢=&Xä\Â[—èµê®ÎH蟑U7CO(“ªp>ꙩŒX7EÕÝ—Ç^/¶ñÜ–×åìçª?‡ì—¼Ï>ƒ;0Ð?èîoMÝõ§¶H=Œ€]/—%I_õQ%å C9¦/føNÎúK€ =Õq£}iðh 'Ž =ù$M×kW³O'ãqO9´\Gň_dZÁi2L^ ¼´æèsÌ+Ít £<<µ´“F¤³<Š¥ê Ô-u”Ú´åcÞ)Ϻ®@FH µûQ%à€õå’V4CïʱX»¸ÇcÇÜSœ’ £aÊa~f¶±ÎÎN “é£I›ĦòÊ®»s —”¢—`ß>º¡Òc<Ö ü1{û[uÐtÚˆ²<ÃèAÚ­J‚¨?x\EÏý¬/“ë’8N¯‚®‹CL^²ŸtBsç]—)¯å×EŸ—gnA¤.–|;f(tµ¯UǼXý‡²Ûçûû‚_û>¤ÍŽÝ4Ö2ü o¢ý醡òq¶2I¢/nþü†¤D%š,bƦ~á?Ù3LÊPäêúÄ®+OIbá­£ÆDú`Ls;¤Ánä“\ÉÅót/·G;º¤ “ëÉQ;ƒ ·ßì§^Û&a‡–@VŽ;àxžh@KHâÍ‹—åñ䟼.n*i$UóÌU†UŸ‹„/Ó Z„À¹­©·Îô""If½@õçfL%M §tÕ¡t%|Ñâ†Þ~–F뀯Á4o=V_ Gu]W~üÿHŒžë4¾ÿ'ø 9&‘(\â(ΞþO~gYŸïÎiІ©g´_URüý” ˆIäà•„ªGýˆ®¤®Ø_Û²N2°‚­ œ›µe~" ,\ÜTÒHªÂî,®BŒ8¹Nµ»vüšó!Åtì¬:3ߣëkL¢/ÄILý–ýx¥èøÛµ¸IÄØHEÒnQV&“ÄuyÇŽ+FÈl—…ÞÝÞe î®ì1¾nÊ}¥6F¥´KÝB%hwÝuû¶l˜£¿uT´\c¹rí”ñåPåMw_s&-ˆ…ÚÀ#Çü‚¿ù1¡ ÙwkÅi‹á­•ÆM‹âŸpÌâyd%vÅbù`E8_q½®Ò¹[Qý¬¬\a”ªLãNEô£ 8P‘}¦R8Kὤ¼îQ¿(¸§S`$º7Œ!mn;”ÕoYNºýv‚œLMÙüm6Q‡¶;×;¾* %ZØØzäßÃÍÍÊOK~WïþZ ªìº«øzs”e£Í´w—¿`Ûž‚ckÀÑ÷´1ù=Š÷8$åWƒ+Jk9¯’qЋ«˜¾ÍÇr¯N•p:q/к4×Ì®°<û¬~¢ïê£Ë7DqEuhê’ß»¯£be;“º‚I˪ç!Ãä¥À+€ù’On×'mPlØ+ ÀœòçÔ??^ÁQüzåcc¤½ŽsùÛÒ•oú·ìBºà-ÙµnÄËÜÖ®p›¨£ +¾ôE•âþŒX¬hdòøN¯­{c³êyÌ2}I0 Áj‡@ i‰ê“Üǰ‰Õ﹫aú`—„[—ÝLº}~.œÙYGÅÊw0†˜Vü¤"Þ ä•¼xÚW;¿L¦”gw˜Ò¿Rw¸O-T÷8¶4åœÄ×+«DÅ4oFáBúö÷_ïî¾;Tn1™…³¯Ó¬|èÔâr°¢Õ[Ú)† _­œÒÑRé$ºN—s‰îÒÕ¹¦/®Hå&»—x)îÚU¸uTa§¼/žòçdú\<¬Lm½ª6Ó ©ª›¢hËê”¶åz@±úmˆP\òé½Ç• ³$RKø…H}Ùåû‡k£H¸õD‹<·U·sýþ>ûQþ–}T¾*Ø#–ìdiÚìà uë¦üýWWj´Ä§b—àŠá9ʺ8Ëfò~¿d9úNaÇão?ZÞp²6`¹wg–_Ì $V˜Ì»£~]RV‡â ‚³L¯èÉÌnn­_=™Eà[¯ÆE]dý½‘ô>¿òú'‹ý}±ØÊEñåŒf ƒÙ½SFdz9]zõ…ÚÈ÷{8nΟ‹v+‚•VASä-Ó0½Y4TõS&2/ÔJÉ=Ȇ³Ý² Ç»o?¾Åô9IT3¬è-§úå±_³)ýµË!M ´[}C7QžRë}ÝõìÊž¬+M†ê…¯¾fµÊ,™"1òœtÄ¥•Õ÷MÞ”$IÊtUŽTò‹H|+òù(ï•çñ_)Ôõž]4kUì–çY¯Ûhh}ê˯ÑîÚkµUŽ ¡3u™£‰ùéZeêÏ™>]yLè¢Ö—*ãÖêô΃f¾û*ÏZŸwì6;Y:š í¾Jß[Š‘¸øoŠÁÐRHtÐn2 بaÐJ ¤ÐŽVíL4'W T“T÷ (N÷h6­løåk×µÌ=n¬b_E;zÓ+½¦ªç+­ž¯Áz¾þ'Ôó•_ÏWl=_õ|ýšõÜ©„L±.Jœ^mã“l~šªnØ¢‡­Ín×/WF@¬É ¤ÖÛë«¡Å9?\ÊJ…®©ÛﳾΊJžb>×0ˆ~*ûû¬ìo²ŸDZXÃ;‘hWdù¹<¨x„HÓeUQŠÃM|YÀ‰ží¾€8òfÈË(– ZD Ímea½½4u Aå!£ì•L}Ðñ¶¾L~QÇ$nþ]ûú,Ú¢i‹N|®ëf<¯×†öçúzeÿX¶µ (Ç*ïy}Æ#¢ÌŒ…½]OZW<}D²Í«·ÇB­‹™޽¾úm#ûzý¾Ã ‰~¼r·+ôêN©Øêv¸õ‚ZU?3´êÝú-PïMÚBH"/|Rí>Ùé7͹ܫ[º²/¶âsqªÛgf ˆ‚]+”e±eŒé6nóÿóövËq#Iºà«ÀlÍŽ©ÌJTxÎŒmÝQ¤¤Ò¥b“ªêÞs“†D‚™"4™ëjcÇl÷åæI6<"Dñãû¢JL„»Ç÷Åÿ¯G/÷z­ƒÙêéµ,¥Ì¢L§WL¡u‹Ó’Rä/<ÿ¼2#}¦¬›.s›ÔÔÑ,¸+˜tÜòON©uÓhAêø+•™6¯˜*k¥GTJxÓà5Ø 'u›}YoÓrƒö©k/”m‘*òg"-p½Ô°L¬µ#{Ôpií¼•oÕë•ÆoòE‰¥Sz«•P":‚º:ø#Ž5Èù½mÒ^T˦í*âõfî!ƒ¸„pÌßUšä?ø¼© Ó~TéQœ:Ä4X:ë¶›Áñ5æÞ¯Ä\Ÿ·»hv†zˆ•– T%´“%;xåcû©ð:š¶y¢óz£åÈkïN®Äôîa°ô*¶ÙÕÇ´¨6fv;!­±ñªØ[ðj-î圉lŽÜÂuE–/¼ÈÙ:–ÛVˆ¹EsÌkèï¤VO‰uÒ ‚½™÷vîë±Îd¹tì°ÂÌÇg,VÕ¡ ¡¯<É™¢X)bRÀ(.þë1Ÿ¹•¿¹@J8”‡Ò ÃßêƒøW*«Íl"§4ö¹L_*Üé°b ,oÈm­xÝz¿¨¶êø¼f¿Z} `[–ò$Žc­‹¨\µé›™üDÞ"¯œçb3â§«˜D!äõ…ˆkAe¹AÝ&£Y P6ugõIyg^1[û¸XýØ=ó™ü¦I³§4~³;`É|ª-}È@&VÎz‰¤—àIÒ¥ížWêþV8rÁá¸cËÚ¡©ÇA|h…¾žÊ®x{#gÜÊ£ç.öÓ«5MGˆ1KÙªç<0FCiã31¤× õöŸs Ä…jåtZ’BFÃJŸõRfX#]Tp¬Vé`ê EƒömÖ ¼°œ›@PµõÀõÕz¿Þ_òŒµ ‘ÕUÆlU÷Þ_«†ãÜ\ Õq ͬœð[Yßý.ÊG›‘KCe|$»ï¬_)^Hc}hÒçã”ߊÌä¾`43C=ÄLíAö»>âìdç§;Lnÿ<\d ^¾ò B`˜ À¾ä?á ­¶­™qô¶fsâS¶"~/o¢$.¥sþ#?ÖËD¸WWðÙ̩٥ñG7¬VÌLþVK¾Ü= t‰ ¼H¾6Œ¾¡°”Ü k»Ø„ï¿Cy‘G¯/ð)yÒe‘RÚÝÇ?òìÄÙÈI‡üÎ Dšì‹3/ï¼Pwà›FN=°SŽþI«ÍŸ¼6-kšÝ¦<-гGÅÞBØ«5Ö&‚UøÓ™On€Úx¯ÉXhlvü¿¶É–æ¼ÛX0,ªÓçÉÞòз<ôóßD±R:ĤÀ¤Øù¯Ï|…½·)d Øö>úxÝ=Á*üéÌ­9ÿZ{$}ÌEvlþu|Ÿ›B²×gù.Â^=ß%‚UøÓ™[óÝäý:Œ×ËöØ\÷dú?%ÏWáNfíÌðWÌïšÛu2|n É]Sœe¹{õ<—VáOgnÍv“÷úŒWÛEŽëÜcºÆxn…±yçýîøeÝJíùÌ’÷¨7Ëjzõ¼ñ¯ÁÌÚšÝçõÙvÙJÙ=5„ä=¨Í2›‡¼z^Cì+ð¦2¶f´Îw}¦§ÝJù<5„d=¨Íò™‡¼z>Cì+ð¦2¶æ³ÎwM¦lùñ4›‘ [f9„6õ;¶~¾v‹ïÄXl¹væm˜»¢[û. Dë<ÎiALw'xÁ†Çÿç±$;µ-ŒUX‡úy%×;nS!^sE¹Owm‘ŸW¿Ç$â[åT™Ó†ñü|Ùœð¯ß¿ß=Àù£F‰õâ2 ú_ZˆkPÒç|¥$IYïÙ¢”Ð `Äïþ èˆð(m»ƒŸ]-ö>ä~ÇcQâ7o„ùNL8ì`ÈMÏN¼jažyÛIö‹xŒbÁe¢ï'êÀÕ{{Lå#«ýžp‡DIá€rIh0d…w˾8K_—M[ïᔨ”Š;•[ÌI0³À¶ºü ,˜ wÈ‹v»âØðþ¼´dÙpÈm+ÄØ¢9ŽDàÛþe”W#™ÖIƒöæ ØÎ}=Ö]º_–éS®ƒ¸æ‹vÿjy ±-à…edd™ÎgE&ðâ¦]Ø[–i>k!¾VÝ1;EðÛ!øõòvŠc­´ˆJ³¸Ò`uöEµ+Ký´y­áRb¢;-Cðk—‡ÇZi• ¶ò0OƒÕÙ¯àtÛi —6§ÛŠÿë:Ý6â_ƒ;™µ-Ï_Ëé¶Š·…|·Ù±74§¹Þ?uþÊùŽ{ßf…ÄÞ–ûSî¯ÁºS3b0Ö»RÀaSýW[ûSQ.¿~â2„£l¹„¢òÿU=’뱯À›ÊØVÞ_É#yW—fðÔBˆç ?fiq|ż„ø–pC³2³Mç´›SµöÒ Ås·¾Hßû`Ç:˜\ûŠº[ÊS±x|Yx…Øf$ÀØP$ÿ€/…:ÇÞß"~”„sÀïzÂ4nke²ßޝ5{ æë]>7Õ&«G^¸:ž+9;ä»eÍTÐb(œúã›ÐMõvy+E^­Y³âY3m¢SÅh½iòZ©ÁÛ›vÍÒ2³GJ•QÛQR@àŸTN–õÒ$25<%ÄH‹õRá¹(wÂ1ã¢Raµ`oê % ÿüjù>Ä»”+‰¥‘³3ŽËÙ¡Ÿ¤¥Õ»´"LÄ{ñ•‡M¢©ùÏ´Ë_ô?q9Uúû¯㟈XŸ ^[†Ÿ¼âTEx¥j©ÏΣö§UÏÈØ‘P¢BYÞÁä“Ñ â*$ÑÞX-Õc.©ªŠ#õ¦f|&>rÃðÈô, SžRÑ•*8"W E%£¿Ï­†šL-xd ²‰Õ§6[%— K„L’z®<’¡Î,¶W¡×º‡øu,«ß¥YÿmÒ4ÝÀñ¬M–·Ÿ dˆ«×X*á@ü‚‹^¸ÄçÚ¯®äÅy-œ%o¸Ú/p?úšý C'ŠB¶ ªÏ Mƒ§¹6Û²æ½YWIqƬTªFå„ßBˆÁ|øSºm‹Œ—´.oy#;L•Ë<}LúÝ1TNkH ¢zlÓ_~½ãö~Nä/øñ¡|¦G9˜î§û1vy{©áPZ†ÌèéºnBÞ³«,û²üsÛЗ¶ëJŒAObzÕõD䂯[@N[L2æ -•òÆ—¹~Ô;I».ÍâeÃ+ùVýǪãó¬äN‘ysõñnô„¦h\u»ŠC[Ÿ¹žØ8ëAM·QN°üÀû²„3`pŽòîðÂx{_ÂFÇEÛøŸÒíÛ@ìžñw^ÄÌðæ…‘]ÝðrtÎËäj|ÊEË=Ï¿\5>˜ÛÝfwà“¯2Ýæ% ±MÓÞÓyÜüz}—ÜÂWD~¹Ý–¬D€>T:”m±D}&¸1ÓÿöãâM@•wTx†–#í¤ŒöA|‘Àäßp¼¨——õ‰ o¢çØKõÈHM¨P·—Éo\ß³7ßkþˇYœ^ÝdÅŽ6|š©ÙBzš^¹¹ON|<Ëçgâ%Ñëš7Î?º±Z ½_®¹y÷#j0àÒöðe :^Ýõ%ÌD¹ŠÉ‡‰ª›C/(üõ”·/ ÿ] qV$ ì.Œ¿Í÷ˆcg!E7v)6Oú:K‚-…qG´'E7îy«"qËö¤Gn]¤5X˜EžÉEi»qk²:xxÏ¡¼½ƒù§·üëÂan¯G~57›‰g#ûꜼ³,J^ýoQÀáo/`¹0×rmš=ÑP[u­ÐMI_w– _ÅûBý¦ÍÏEþœ<ž*y*¨½‘–~‘¯Dß!˜±*mØ¡îb˜Mt=ÌzI#gäêäƒ bøþËÏjó—?0lº6ÍÈ4t%~!bÔŒþ[›«UŸäÍùÏ_>´×8ˆ¼¡À<{ƒQöAîEuèEUtEZŠj,(<œú!g?H ø8E^‹ZÆejÃjTIsV| ôII‚÷ Bà ŸEù˜FL”‚3¤ÙsSI£&E?'g9%ú9ÙŠqÞîg^ÑOp0O—>]'JUJ8Ðü¦K\õxT•ïyËÜÿ}9þý˜ýšY)ðGêvԺഠŠMzAùâ5½ :õÃøÇ*iæt·cÚS¿ H±ÑKZDGl×õRÒ:_AÇ’Rw¡ë…<;p1B-Žb“°Ÿ}÷ßùíA|òU„Ù>n¶£U›¸± rs7ÝÓMûåËc`43þ˜-ãò˜Q¨"öÆbOÆ Â<"ŽlèéqZæÇ\TO1,ZÈ|jÇ{Ð2 þ5¹_­ ÄÿÑx”K»*ÍŽ`ivV··ŽÞ #šÃc¶Ð1#ñ9N5“¯×v6\,‚LÍšÇel4 (: ¯óùíáî“•F0½@&;ôeÌ,–P u½ÙáÅÌ3Ô(S8ü’î£(ï¤,ç<1…'Ý+ÎX0gÚÔ4Õþh,’°ç¢Ë+v%$ãþäÀ™xæ‡ÿÆN¦«iÂÛ‰Ó–Á^¨|C¤üGG]òµ(ÚR@3Vù—¶JËä›z4O¼ [q¾onßÃi AÀ\Cr}þ"H‹Î'@d6ž~/O. ÈJ/°ËØô¾Ä¥÷%5½‡ã\äc³×Óú²Oë_ŠÐŽˆ/vQ7`$Ä×¾Ì;.ïÂ&ÜPªl› Å0âð]×Ëg~gÀ®Ná˜ù$?þ2h†©”õvlµFê ûÅm;„97aŸ²1Ê‘_ÄR²É_†ü"ÿ “§ó P˜OµÅ©FÎSÞÜ^êíƒBüKà˜£ŒVlž Wv‹k^îܘ*èÜD˜ð§ Pqfê{p˜"£àOWd2&Áɦï&dH‡eE@¢”ŧh#o³»/]^AC1§wiÛˆÌd-럕ؖÐ$ƒ+·säui¯ “نь\™Fòˆ¨'NõþyýÖuu}Uñ0‰wœ©#›¦ ·!' ©’-,ÿóÁ% cêGùó(˜Á:tŠÐmÎhM©¦`ƒÁÙMÑBM”7jzçÕ× w·¯“ûßç·¸¨T߂˾JŒ ¨ ë³`Co•"28—XåXöpåÆíÿعUÆÇLì_Ž`ä2â!5SA /w‰Rðq“"1&J$^nVNñ1ŸÄlj¼r…›mÝòÃ…,žˆC7ÚL ¾Ý}nsïzèJ3ب¹j`VÚ_f '…`Šg =Íã½E› ³¶)»Ùç?à~UÑ%ç»ëdTÖÆÕêèG%öùcós¢{¸ûØxç°ì…uù‘–ºŠ•®ЮR@»*Î2Èã*EW7¿<ˆï¾ÜìÒm9ß³ªÚ`›‚Æm7N%áN/‹^™7d2“…缘Z4ceâT2®SÊ‚$|ñÕ«í²®-áÖd‹á—7¼?勘"EA3~%ûÙ²7p-tµüè{ ç_>6÷y˜V¨ˆ#†ÈÅM|‘¨¾‹¿˜X“V›‹ÙõYð$¿)oLx%|,ÝUj4V òË lÙé1°6[Èij!ÄiŸqR', :mÅÜ-Î.¯94OCy£X(óqŠ3_øÿ·gÇÓáòб¼ÕN!ï³`ãk•ŸŸpV·æõÎâø¹í˜3Ž`)ü ãpòÜ òxÜðé<ˆ,R"R›ª®!¨cVW7ú;šÐØ ÁßY { ^"-mÿp”·Bn§·–`¡SÜÀ¿ÿ$›ãëî‡ ßc)¦ֈ诲Âf‘¥\™9†¬A¥œZé¶Ï(0w ÌK7$†ü,"*réÍ.oøô=íÄåq´p—¤pÐóý_Þ¿û—}û—ùiëÀÿmY0é¹-íçùW~äŒ ù±Ë)­t_ñöVÀéoÅ©“<®ÔÕ#‹¶à®lOþwo“·xí‰WÇúx“íjL¡¤)Ó†ì>hR”Z¦Ž-Áz4ây#Ž.m·ƒ·/=NfÝåÂõž'Æ[ÅŽrâTNÝÃ<µ©þ+Ê›œSÆTó'm(÷pâ4.T¢.ïqAi¨à¢ ¦¢Ô´­}©Yï#ê·ZTWãtG¼Ÿç·#—iû›#o´àj7µúø«Ž uÆEªÞâ/Ñʯ¯ìŠ0G,˜~·3ú]–:,J³³$×{§qF°ÎœæmÉHŠ€¿†Å>Õ˜âÂC12z”,§“fÍ6‘-“Sub&(—G®oíSx ¥EJFÀ6 ¢à ¶v3)`œ`:•]QUžÈ0máËož†!Nz[iU³Â„ä3òÏŸï(ÉHhVMy"µô!gòd?‚ö{çÿFZ^x@¢å&ÂxâüZ”ƒìõ,Ê ±»¹Ž-§‹rúRœw ‰£ö‚%õ;3;ÔéÊܘ~ö5:@Z5Õ°Á‹_Žó'eDeѲ!oŒÐ×è¾ ºF9®Ô]psÙ¡z¡Iô%¦÷)ßG¦¼EцQ‹Hq`ü­~7ÛÖ]\ ²h† IQæÄíû¸¡@y›—¸Ì¸\!3.un¾ZqdÊ¢©2$W•+—‘¹’fM4Z«®¯))_éwWɘÉ@ýèFHûø¤ÛcSn?O¸Ï‘éVTOéžÖ£›:V„RBïÓáS¿µùÞ8–Ù͈;ßÃ⹞ÿ(%“nˆÔcKU× rZŒ«ìŒŠ™ ÔnvÉÞÎE·¥õ~ÇêIh +`)a”Yõ‰Å—LXn¦ åm¨x¨á0+«ù”èÛ÷IRúRK\¿,Œv]Ή¤Üb}¸û´‰¤µó{2ÔóûÂóûÿ“ˆç’Žç2„çrÄsIÀÓP‹ã/ûM_ð¿çò°‹xÂE:—¯œ 1å‰i­õ[w$ÜE~],bœ§îã|¹®ÿU‹i²hž ITV2óÞ"¾îXU¬èÆ;ý)ix£Y~M»®-¶óä '+úy4‹‚ æôY4ÙLr¸ºTÖð¨|)Í‚ÕU¥@ÕlP!8¢@ÑSV~!6F†Ïøe9•ðå{lt.oÅa…×^ÛäYþÇý'ž@•¼q ,\D£V« º"j7CDî$3{GÌÜuDÔ,*n†ˆÜI¯ôÊ+”Äšde}Ú…—yÛÅ Öô<ˆAÊ@ âªEo^”`˜G`¶[p£ŸÈ»=öÑÄÀÕµzÛ“àlxÉ™Aœr@ÎPt#’bz*÷;+1©úX´ùsÊev›~$ºÛŠ›‡EGú¸+º¤™?Ö­^‘ xs]­ÔôêA²¼ßlOLøUoó³r±Ngë1ã¦kS >¦¥xŽÑÔtÃRr$ýòqómƇq®4ÙÔUe^[äóŽ‘& ÄæB_äbXÙ xøâÆm÷ý»=pñ_ª×ÐzÙ¸:Îãki¯¡„õ½ìZëû'÷ŸF_ØP›‡gέʪ:£ò«ß°c3ÑörŽhLöyÅõc‹é°bIeÔôÓàr:…æÃ×›ÈbÅz‡‹à€:¾Í€‡…!n¾ù!êŒôƒ­å…|s&¦G¾¯±à%8ó¿ ?¸›øUøú00D±gʵ 呌ìVü¬&:¾kî1ÌÐOnû4½ ¬OlÏ.gaóy&ò¯ª¸”Èë]ñøÒ¿Ã$¾ÃÖ—I‚WYI.pêö(ߪËX"sBš‚ñÀ$}À,oÒžyd[ µÅ›ÜqD§ú~–ƒôü -øÊ–Sú±ÊŒÊcÆCТ4Žý¯O”P2 y^ƒœáZi´ï·ä%iÓÓóS†«×›ÈÜ$ߪÄXðÒ›ynÒÆãWc×÷¤ø¥ñ´øç@üïIÚ4e!ž ]iÎ#û·¥äþFîß°äþm9¹sÕøéê jRŸîƇ#ITiG`Tô‚çb:ðoWßÅKulìxñXY/M×òßeåÊgÊËǪè,kƒ€ä #uP|ÛÕoáßä»oŒÌüÜT+­àùrêÕ©«9èµ*íäš8§^-ÄXðÓ™º1ý{¨ó ‘uéÔˆq?$ƒÍmÆ×¦dp€e:y ããÝgõʹ¨Šo¶Èr)=/¡j'OÛ|–Ößp†ì§åÜXÂu»˜äÄ6{5O>"s²Ôò*§hež>.ç;5…f<(ú8˵MZ¡KkøyÅöl³ØJ[n/§}ÚVù ”u3hºBÉGU,d¹„šƒÄ,Ggrî›ZP¼ëν¹úv·¤yÚî6åe}ŠÏ¼‰Í^ÜÁõÃM"‚ÿû?ÿ‹-"µ€–ˆ‹B[ì`´¨:Å7næÏÂÚ5µ€È!oâY´¸Jå?º¼­ÒržÑg-ÄÖª«3ÿ¨\=dý(Da»ÉX¦(NÓ|Óò ‹ëHÒ¯Jû‰Wq­ŒýqÿiAém¾‡IvVìÚELæv¬t-7ÃDJ%×_nîWd»°¹ðš#r÷7$c¬ÃþpÚÒ¶ô¨æì5åpàÂÃí•5bòT¯”Åí³~´'6Ò,ªx‡ŒyØ:Už‚wýw7‡šÅ³M2;ƒv:ÃnIÏ2FÉMk¿¿xB<&ºeö›"QµÈþ9•çRr$FÆy«¨Y…^ܬb®Ž!gÎ.S "™Š#an1×1Þ¬T‡6]ž_ÄÎn Ãq¢9¹-{´”ï.oÊúeMÆT«þòÏ)XÿG·«ÆLl•~ÞgÃÓª?™Sõz~#ÒÕØÇ‘Ö¹æÚÐÿ8åÈÑ“MÃY„ ÄíÒ.ÕßÛæÐ}€Ø¡~&áÑlp XŠc¼õ}aT@¢Ð’ÈP±’ò5á¾€92Ö íGÍÞ¥iº‘Ê7‡y’УhÀäb1ŒÁÈñêïE¢¶¨Íc×…PX$†‚À|H»cóDA#ç£ä$Bxk.?‹Éù´ŸÔ}ÜQÜþÚuæq¾xc ŒUϸÀÀ»\ȃ€sùyœ"Ô9÷M(÷M(‘ï•M„m1ù¢¨òbØÖ-9=çŠV’š FW씇Ë, ³8Ý/W*müðj&o‰Ìñl¥Ð•Ž;Ó²H õt®4‹UqEÃZjµ™+Í¢ÖD¼QŸ«‚ï¨a”‡»bÄ¿Ç6ŸÅåzTjæiwj ãSa™ vFþ³ºy!D8Q™GÙ ¸"Ý„F`žEă|Q î&G矤Xú6 i¶k›¨þÕ®8C3ó Åí‰ÐK±?61Ã_«Þ,fSÊ‹³'>o,¬ªkôòN5;Ï^È ±ª1ÈËü«Û(ëÀ“OM(§39ŸAÂ/½ÈKK°  Ðþ Ýzîè…T‹ˆŸãv&8Ùù›Kk·.ƒ‰ÅEÏ0ñ»é_FÑ¿DпDпŒ£‰¡‰¡ñ¸Gq"ø´Ïh·'Bw,ûH®{Õ=†iQ=¥{B?a*Ìc•ÁÎèˆO9”æÑz­D%wðù "ÁAŒ·'Bg,„'Š, ó¸œ íªk6é éͦ1‹°÷ÅHŠÌ/ åÊ€•©d¥¦DœQÿH¬RŸGîˆøà(zaÜ£m1—5¼v\]]õþ^ ì-kò¬x,2äêþÔ~4 ~tõ$.sܺ¼S×\—¤¿d΄cÁp\|u}+ÎHŽM[BáÊG8TÚó¾fÄt¨|Qé>¾0œw£ Á„Hî`"IKKPê†Å\ÉŽHŠè¾ÇSÙ|’'2L{ióÛß{ð<ªE±åaWt ÄòÅN¸ á&ù—Ouûœ¶;¨l7yïøÍ‡O7?©æåm™ŸóI#¤]qÛ)QIíÓMl¤î½Ì•(…ˆÑ‚ø|—\ív{û˜‹ò…Ò„ÇlÜØÝ€õÒÂÁ~–?'ɆIdžhÓ.yƒööý¿ýd¤61y£6<Úî„ÖdgE$5Šˆ¸èß‹³hF è`¹Äf’ƒ\ ãÉÊ"ü’üLÜÊbxEþÛßßò¦»·¬žŸ?/Å<ÏÆkÑRwã,Zö”W2û=‡™¶Û¢kÓö¥Ñ!Q7óæJ.¬ŽóRÌ<0ÅT4^œQM;bMÎxªA½ò¨’3‘0TÒ}½yHÔÃ6þBµ­èдÑä‘_yÉ€ à|ì£r¿.^€áÅ™f€É¿½ú†ÀMÚ“´©ys!£]”©+ xà Æ/;xä±àíË›?¾}ùÉ›¸³9Ó±#ý¡L^ÄÏt öeSáyåH‹‡ºjÑrà“2ÆmùIœƒ61¾…jÕsí¥T㤉x·Å©èNº\oÎü`I[¯ ;@. }o‹ýž¹4Ù·|Äùx*e_Ç+™¸ôÄçér<ýùËýOÐ\@u“)†¼d+7lÄIÌ¢"³¡Íá‚CšÀÍ q;Ëßr[à•;©xȧ âgÿ†!´!œ·Ÿhô¾°GÛNm"+[Á‡û»Ø m+yªâÆh´wàìQ.JM=t]“6¢Ž®î¾¬20ŠÝ*w+ÛSÖ5ÒøËç¯Z! Œ¬i{ìS7Ð9<úJ_äμSד¬½äö?bÞ®è@>ˆ Øy—lëºü —ÅS.¾üœ<Ùn»¤8Šw3ù º`ì"Y¨qåyÉòjsxa¸I»®-¶â‚‹¬±'ÜÊŽã;’!¢ÿò—·ïÿu$šM‡ëi%ß “O”ƒ*4„ˆî¡Ó¤_ú×%Ågp©Ú‘Î^¯#•½äÞM{«=ogŸž^ y²Dš©Ì–Û÷±ƒ…¸“.UÞËe9s9y'WË•Þéfñ òX‡S7LVeÎetæÄžñh;P›²÷ÕõÝ"äpCG`44û%ɸǧâ~žˆŸ£Óz(Å¢åÀ)e"êâôug>½NÅbÚʘC0MÍQNæÅí ±ÜÄ–ñh{ N‹À-;¤ó5S7ƘæhÌfŠî6q¼”Ž&âEÍŽ²2¦4ß¾ß%ðV3ĆvlÈÔpÂ2eu› X„‰UÜI#»¦;ñúiÔ4ýÔ÷Dꉤ‰ŽHÏÈþV1æOžWø¥E1‡‰nºìÚvôYÁCLe´¹Â}ßt}ElÐFÌÝ‚36ôêTs`SBÂršd‡<{’~¡y70ˆmÌ1,¹¡V³Qô9ªeF±ž4)ÏOØïsÙvjÞÀŽ'"ÖQÃŽ•‡ºÞäŽ7cu{L¾þÉ Jv ݉šƒ‹2\~©o¬ï2ÚSUA…ƒ6B®ËK/šœn¿[bplı SÅë0™‡EÙÅF5Ú½‡o_ï’1H6ƒ8ØU‡õwçUõB‚6À2 ¨kÖˆë S=ÊÙ•Q|%tÑÂ<1€÷ÒåÕõî%ç ‡HØöˆ…ݵ¼fÄ`Ö=€…Ø­øŒ€‡v-çÖó€›8šSØ„»91£8Ö¼fÕ-o(P©Ï{U€5Á˜ÙŸ I}ü9s=Z¶€C“S[Å\Úr!{a]NíÌ %F!bøJ<ˆg­á«¾ÇK> Úñ®ç˜c]øºõì¸)9þüxûñëÇï÷ÿ7)MO»r=}²*Û±š¢FÕüýæöÆ5ƒâc«6=Úa;yï¥í"½µ 6tSgšPhGƒ0ò‘ãÈVOÒ/™JpBÄÀk‘WŸ.‚p¢s×¢ëÊÝáB.À& xé«À¡`Ókô˜ÏT\äÓ¢šŠ Ùä´è÷KO‹ž½Ýd¡v“©vsvyB„D_š8w å¹o¢÷ f&ò÷;õ7)ÿ¹±&eì¹nwp'ªnÀ½à ò@Mñ`íÓtCÖ½YëˆûïÀ? ?w9¹®Mp1­qå¢íNi©Ü;ýùöÇÇŸÐøé·j¬Ê!à y¼_lZIü¶«5Çü¸íoØx‰üYW¹øË©k$U; ]ÐÞ¾@à»^"¦‰ÞÞEîìNļ0hq{"ôÆBê?C¨}¸/FÊV§—S†zãº$ÆuéëÒWä¶$nGÒ”raˆÜUDm(B>¤hÝ‘ù¢ˆÙáÃmî™Rn ”-9ßnœÏÍ!u;Í¿“&Cq‘·ÈB»c}¸3FÊ—gs‹¹¢ mLyö¤x3 òÎQhÓ¨wÇ·ÓƒÛä1¥ˆÛ6˜]Æ;m#&¸3x#¥oª öS !/âöHxgd”ðÆK[ ny ÎH£v00›º &v=ÃÄïNsâž»@†ºâŠXí.ô®Hcðqk÷¦”-fO|ÎXH5ÇWi|õ…¶ôí[õ†0_,Œ óÅã,ÿ‘ ΨµfCÈ€­;2gÄU`ÿ° õÅ“ž˜Õ]CÈ€­;2w”ÅVß:+„9c!­•ú–I!ÌKÄ*gxs”ðÅK_°Ä¬Uê2¾ØÉ+ˆEGMÄuÄbxùp”@ÄKZûÃ-û™R. qËv˜;]Æû)C¹òÄtOþ¿gÌa‘ÿ·Ùìi#®Ïmšº,2ÜØ&¤­óãrVÙé9q7ù!PèG2~¿~PëÉ­ ïE >gjVüƒ <¹ùö <Î’ñîùtâPð?²”7à1`ã`7OApØŸ•PrÍ…’;-+p¤ Èàº$ñ0ulЕĴÐ|ψC09 ÚóIt¡gì*A@Ù*:å;$×zø]d8¦=ù'J6½È8ÜæX”ÒÒnSoÿ#ǺóëÚá’328ùM9À•¾ˆvg¦fC> MAÃ…ABÄ[·{ÐQÞ†‡Î‘ßÚ}Ú?á*dâáŸtµiØÐ™Oº ŸB’ôåaû’d%uÁ1ÞuEµ?ìÀ‹D•s`¶¤aø„‡µ–µ§mL_dQ´ÑÄfÅæ#ú^ Š´ÑDSßgÂJĪ0§$Ä’ß šÞ§r¢‰ËQ‰ÙÕ¤&ÂÆö÷ƒln¾jÁw’6µ”Éמoz¼êÕY_2ÆÛq±thÍê•z–úN¹í»ÒDr†;c›.?‚'¸|k›% oC/ÀœÉ;n½4[Ê~✑t“ïÑDÅ2ãÝâŽ8°iZ)érSço_®Ýnÿ¬zÓç"°ÏÄ®n¹Èè“ÂΪkågJNªà‘•„ÜøGMlÎԬСjyßà¯5Ì;`øæå]qÌÅ¢áDɆ¯™¢¾Óòt*vôùÆTˆt™%¤ìƒ~ÿýËMÜŒã|ئqÍMӆݛUÐ_?\Å×@±#ñX ¥»´¬ {øü!ÀÇ ìjµÖCF9Ñt"íåä(»¬¸;,î|†Ð‹ä>ÿÇ©hû‹©b%C…tÉÇ6»—d›'™åìú‘YÓ¼•n\ÅS÷Ã:FæÌ\gmI\¾@—Wì-šV¬ºœµ_Š/öŒœ°,°Ì–° ûü\Ñ›À‰’ a/2ù·¿}ûóÔ¿ýíîº,ëÓŽe)x?È_ú·Ç²N¡K‚e¶ ª!ÅLW»¿.ìjØEuÎ+>x‰D;èc@R€©iª $[B¥¨®| Ìd´œçº<óe8 (œR#ˆsYu¢Ô!MÖXyè¿'_îDë .úÙ!ù’¦ýì HÈ¿ùäRPÛPcðõáBüBħ*f\·¨»“pŒÐL$-vq0\9[‰ÈuSÓ ·wç¢ç¶ú¶FN÷Ké˜Ó88u7]ØàÓ¯ÊW[’ZØ“Ú`]Ø Õ¿J9ø*]‡T4 …UÀŸ¶Ux=¤è/ÄLðâÓà£ûd‡#Å ðòü…=¡×ÛïQÞÁè¯uÙä[Ê‘5³3MýÑèwé3ƒÿ6ivÄ=-ÔTI×Ë]p™ C¼­DÑ}8@L9â‚—BÏ<Ó๛Gðšë¾^äºêÕß’kM ß ²–I+®.AòQ“†&vbî¼Ë˼3¨ …b!ƒ¦Ø(t&3]'£QRw­ÐÁÙégÄÿ¡¦)•›Û Ôƒávè¦Ül\йQ*¹:uuò E‡û©ã-¸Aƒ Ï«sÑÖæÝ%²%_§Þ4/?m×R0ù8 â8þG½ÝìòÇ‚!ö£(FüÌL;©ÿ«Þ&7ƒ žÏ?Nù)_@E׳Òn…àö¬ÞåÛS>zÔtáäô¼à€läÒJ¶i\êƒjÚÆ¥Üðµè¢€ª>äRPOä6oj&ü^ÉV¹G-$°›¢Éáµæ(àeô^Ôžî=ì;%.(âiMíA᜜'ßiTFt3ô«ëY–µ5coÓ,«O¼“ÌÅ+ †1ÂÙ¢- 9Öí´²÷4ÆD€÷Ó­|¼áèm$;^:Š3œõÉð–xËÑa'ÀtªåàÛ‹%J É­åµ³]ŒÔpé¥îU0û©Ì£qŸÊ‰ùT漃ó¨^ù®{ŠJn骈†kÑÅ-¨?.ý·Gù­Ø£Ü=Ã=Ì|—Ü;êøW2ª_Sd½”ˆMƒ¹s |ó)ìÁ/ ö¨èÅËÅ\@yPaQw<Âvi»Ïé³0‡⩸Q|~ÅG”ž5»9¦ò|øÒkÁ‰Òœ1±Œñ]Õ•§#‹\Gjº( r$Që¨EŽaõsÊÇ?­±r*_‡²ñï_’§ü8k¦@Ø{×?§mQŸ˜¥=ޥ쉅†d¼[„J—¿ef])*£çº@¸ì–ÂÁÄd—›í){âU8.=íú.i4¶¨„µª‡‘ É{[Às&—‰ è׋ ùÜ0*!5=LÒ›þëßîÄ9f2Ҝϔèm¿¡æÄ)„Œg*Äy4™ÏÇÔÚÛƒúªvB‚¥5ç­ð&ؽDŸ)»á¢¦ýI~L‹RŽv¤Ï^’>r#ÄmCÅv±¼ÚÁ6‡¹×à6= ±HÁ¢ ÓLÙG¤1(*Þðñá3„¼hºD¬…°ð@íŸc¾‰¦v/‡@×Ì™Š>CÓö)‡}QÕM~_OëLB€™± ƒÇkè9á2¹±šÿÈ3Ø¡:©Ä+î0û Nk\Â9}7ÑôÐÓ×iÃ}ª¡·„|ööœÂH½I‹V4Ö\+4dl ÁÃã©’╉® `A¦ZÌÔ‰dÖ™(#ý[­xÚŠ“n’1L>u&KhÞ$ŸzcòU£D[”H«&M|‚L×¶||CÈsúuk·+kÓv12dõM*màoWŸ`µf‡Ú‡ƒq-ñTÓÓƒ\TKÆ©Žäãõûäã—;^;;>¿Æà‹D¥M÷™ÀÔšäÐÞp|?õ~ƒó`{–—ÛØÜœh:ñör$q¹i*úp„«µÈa•š·p5÷CZ‚3ÎY¿!–AìöMþ†:âØ/ôãËVYïKRиýJó^+²XÕ]La,°¨aÓ ÆtF‡Áz4z}ôð?úé.‚oh™žªì€vb†ÔwÁžHÞ9h<º4 aÏ"ËïDщ6C•YCx èù@û¡¡ºžžÜÊD3Þ¢E@Žª`¦ž2îÌiÆE˜G…zÿ|Iº«DÞµ´G2r‹²‹ƒ.ª±yg]¥¸Ö¹èÿ£V-…*ûïÿü¯#^Q3q;z=dÅÅѪCDU ïìru^%>õ]V| g:D´Ñ9á0‚ÅŠ›+B -ub?öÑãZJÄÌpW¨Cïv÷Žoš¶8C)Ý#(–Ï„Ñò™0Z>/-Ÿñ£å3j´Ü'.}°|Ž,ŸQƒå³,»&Nß’?rJGvnª%%¢©ð%¢©ð%¢©”ˆ¦B—ˆãLÒöZëXeÀ¦n,zãd”ðûöb¸a‚5B€¯ B¸Ÿ‹jÓ¤Œñ¡6}Ì¢ìb ‹ö‡ÐåÚå.LOe—¤»cQÁå á;s…VZvn`W?3äÆ(Û¤¼æAmÍçšvJšœ~‹ƒ$C@cŒw²¹ž Ÿî•l\ç_x:§¢´<$J&PLØ&Ïè(GB.aó™ÆkÜââÐïÅ9‰öÅðã€Ú¿nÓÎÙµ]ð Y$ªˆvΪÂdîPÉ“Ú/•ùx0»€M…$îXÈ(´F»6Пá~§æ, ^îD!ïÒ=õ¨ãBÌ%¦ëm~¬Ï0jÛ‹Ç(”73¨]7¬Ò({ŠÀÊž‚`™Íq{\Íòñ៪РFU7· $СòÝô•N¥¶æÊY† » ‰P8øý15;ü@¹yŒqÉ7Õ²‚} »âzÞ?oâ÷"ž{t}ýÿôˆ§zå+·!°Tœ^ˆÓJ¼]÷¢) dgœf‡¨®Ô¡m<•E¢¢ç¯]9„)컦drðr è I$– ¾áZß@'f6ª°Žà‘˜GGÇV‚vBY2Ñšs+)çV®H²Ã¹ŒX–!zÃ9¯>dYæEß(  òšÞ$<êYwôë‚þ ´5^û‰;ï7bçcW¡Ah»|6@Ëš‚8‡ŽX›G³…ÒtCYƒoÜÈxdE_ˆ\$¦âxxQÇ®÷Ê÷.ÌȰÂr^Øî›ÒÛÀq7æŠ.°ÆÍ€Uïpãý‹ª©=SuÊ9ìçSê¥ò6W'-Ê.̺(RôiiŸ‰<ä9é©BT“á²€‚ˆh6n?(O0ú-ØZ±,¢„gc–b´¼{oö:üK_ÐÅ ‘[RA_’UøLšdKž\Û1òc Zð¿«³"…wuž‹îp#ÉCÁš'p¶É áƒ)ÝÌnÊô¸Ý¥4¨6U+\CP@þ¨¼Ûª3X·2¤wêÁ[¤Ç ¼0ÑâXUmxMA ˜(a¦qñä²ñº*T»Ë“~Œ K£‡¯pzÛ1ÕrAŸµÅ_®¾†ç2 -§B»˜ûNuRSX‡ü;¼;Þþì§àÂâcºÙå‘û.Nq<"zÁ€² ÞžÿY矓¶î}ºžˆ†mâÈòm×wåÀDZ=Ù¬œ .wýþ²xê÷%„^FUvæºNÔ£ät½Q8ÇÒëcßê"6£ê2XYc³•ò³&eeð ÙÆÌT]$FA ˜¨R1ÕôBñ§kYžÑI4ŒÑÖïa0±ôXnó]ÞÒ«ºõ]H'Ò ´ÚÈW_oM Óo_„¸ˆ±ÊF«DÔ€!';‡vT‘öÛ!€ž7€Ðq…þQ0‡†¢ÐâÄQ›jºÈ rzmí»N¸,纃­( aŒ¶Ú*Úc¦j—ÿ@"QÿõÿÕ³Ïú¸u,à©„6'Žc¬ª6ö¦ 9‡üw–<ˆ0_MWó¾´,RZͶ(ÚPêb擯òö?/93Û,2šÞ†WE!}÷FPÐ=„X©yL›¦¨ö&ôfÖ¢èa"«­¾dbCÝßàùvU±Îv‡Ú_eŸÜ(Íõ<ègë=ða¬0C§ÍÑTÄÖ¦éIÄ™¯`iVâAp£à=dYûCÇ¨îÆ§ZVü½Œ9(7Ý!ñù©’ò`lwl‰ç)§º õ\ Œ\—\ÚAXC½ªå«óeîºgnð"ÔýÍêð²E4½HPðQayÑXo¾‰TƒîýÖð~?‡Ãý¹R,QcJ‹8±h×u%³&©w€”žP àÄU;«º µ)ŒUílÚAXôj7,™h8 zaPÅÛ€yÂ{~Ç¡ìÄë8¯`ÁÝ÷–3ÑvÚ|ÇÅc·ÉÚš Ûœi\º¸HÒ«ÝNó2&ƒßŠ`íL&o-¤~róí¡¿¶‚`G¯¢sE˵vä¾ÎŽ€ƒ8VàLÔæ“(¸6K焜Ð\7‚­)úÄ,úRÁ¾„_'¯jµ¸I]÷š°A·+'¼—É¡–j°Ã#gÎ~š£ë"¹©¢ƒÒ f*è_NOÆ`ùBUpeLÖû=øˆ 6Ô\p¥¶ÿÄ[È¢„—ÐäS¹# fé”mŒý *Ÿ«Š=+”¨¹å‚"Ç^ªŒÊEÓq@ yhçñv-«®|á@œê:Âþ}ë{”xuãÒñ9ß²¢#—rSÍT )‡‘2õr³Œ¤p KÉù€V´^~”·B«˜zªÜË‘ÔCq„tû¦·êZç1g \ãvuSdd˜º–¬”1Þš4óžE„ÈÃ|ì—úšÐÊ$ûÛü㔟ˆy>ѲBíeæÇ™ÇEȇ¿>$BÈ‹‘ÍRÆNÇœ¾9l×µâ5%å0Jüæ…R|yvj¡•û^?åcÑ€„WÓ}ð.^·iû#wñÐcZ†82^² ­êÀ(™¥MÛÅÓÕŸ$…ýJ”È qlö5ݬ]¤þäÕ[þÓ7éù¢¥ßÀŒ^ÌÅñðhÃZ¯>œq?ó B’?m…ƒA¯¨E£pÎ[qõe'LÉÐ"c^˜ú3xÄF^¤g>Ã.žÆüP’ðN\Tç»dûâÌ6$ùñ@6S5+ê¼~„ÕPÒxm,d·(£Fc¹Y*¤~d~hü>ËCõ¤”PS¾¦L«Å¹ë²æ=ӌ¿0ÿ¦hèÍ +òŠK ž7@†”C§®– €i–Õ'ºßgйS»r,‘E¹å³F¦a©_£P¢¤¨¹.òóå¹57ƒ §)Q/Í•™4\[+׿ǘÃsšÅ£IÉîRLúY¾´æxŒ…(ÚTã(,Ê·-"[Ni"âiUÉlWÅzµÇ Л©Ña/ɇhK~\ß|üÝó¢ikX•Yœ6;aR†óÂ|°˜Á#vä‚ &eBï¿-ö°Å\ˆ ]9–È¢ òY#Ó°e×à7ïK¾'†l«œî­”kVsXº¦r,‘UrÍfLÛkƒ·CYv¬Ùn»ÊðÚg,HÕ¢GaYn9m Xs Dà9ø+ú˜zÇçWõ‹xzkQ9ìØMµÈ˜—dŠÝ ±%+n†PZœ»œu| ·4¬v‚ŒL-2æey`3ƒGl̓ówšÜ¦Û¸LHÛãðîèJùá2‰&:3°„Ô:æ°E)W÷_“ïý㮑ô»×ËP‹=u];šËZù87GgÊA%·,÷¤ÛÚµóÐb•Ì_·±Ýº¹:7Ë ›ÃB<.£³ëêcqL÷«å²Ë$:f–Z's£(²õZˆ&_@6.Oóê\´uµÆ3d3KH­“§‹Q”,yúq ŽËFu!m¥´XC3Õu#Y¬“e¶Ê÷ýV9ÿˆË'–r€²VNYí¡yšÚÑ\ÖÉ/›9:Kž=¨°¸SoýÓìPT«å›Ç*š³ÍÆBvëä¤Ûh,·@7Ø¿jôUŠ/ÊèÞåºm³JM ÃÆBv«f´Åh,7dF÷Þ)IQ±6Ïêv·xWÔi)Dz¦|QÆ9 Qp×'îEuû“Û—"–fÄÌH˜Ë¨Bƒº0å§6@gé-.‰à÷þÒfáI6—¡‘™ö’”wØ!€¶4IŸzÿW éèÙaWT |&ôoq-ʯµA»n$‹%ùã3Få`É©_o¾H™äZÝb$]a¥ƒ¼²A^ÉX¾rA]©°¬LHW7ê5‘ðr#²H&pI¦÷|¼,Õ–ÌæzÈ—d…Ë·‘1†;é„D){Zš Ù-ñ³§ á²ÄΞH‰œiãÓÞñ(ì„F½çšåKWdàJô‰5éÒ5ó°É 3§%¤–åMÀb%K›U?ª<¼­÷ÉU¯’ :Èè#ï ¶°Ú8-Ïõ"¯™Œ–„sµŽLßÈäjK*„ôQøU@!I$˜PIÌ›^õㆢ)´ï.ÍûÈ KTÀb K£e…Ío0†epþän> ו2ñÞ«Ð*¹h5†#lªÆQX!Ûl¶ˆ<™uÓ»p¢“|,Úü9-ËvñHÈ Žî\=žÎ ùæ²AÆ“Ÿ”\rOÜQñ(×ËkdŸÅŽ«®~…Ìš["A÷dЃôPM!÷ÂþQ®ÙŸùí…ˆ:´£¹,Ê-¯9:[¾½<üõvA‘¬Ôƒ9MaˆFõ^†â⌊é¹fzÖì‰êµÀôŠ}–׆ft5S^œS±}•UךcñýıJ/å0„áÑCij‹³‡Þ;M´¬YBï™Ô¶nQuyû¸x¡Ëk-@ЮÉbIþøŒQ99¥B“!˜’QMͺ}›¯;ŽÀ PöšXFmI&"lF³T¾;)ºh”1F·ÎP#`M>fÐaÑ^'/#†ewÆ DÆHÖ l¢©ÇŽKÖÉÌÈŠÇ€;S£Ç*clk X¼ÖмéC—™î:9HÄXUݹFÎ4§-¼Eפ»f¡5Ÿ±Q›j…EYå¶E$`d” L¾ÜQ²¦ÍwËÒì°°]tØ ð™j‘1/É»ˆÞ«(/›Û[š!V;AJ¦ó²|°™Á#žä@ÿ”úk­¨E.¥E®¡­µx·jX.‹]'[ulÁÊØ‚%±5×ÂâÁ«_‹–½VZïŠZèŠZáZgi+fM˱˜·~źºM÷ù*nß<¶B”,šQøå…Ó ½Ù…ȰïÉê¶eY2·"£ip.Jú™ J[+$Ÿ¤#àïÚ^æ‘gŠÛu\ð"lú,,âµ$ŸÂ&ãXYòñ»”T§¹Û(/¾fl«8ô ›$¥@„›_»õr•îü×­ÈÓŸÀ/ù.¯é 2’½s—v—Eå2Þ{H¼Ï=…DûñyQaÉ‘îdbVxæ_ì%c”F×4±ŒÚʤ–Љ!2ÖÜóÈn”Djbbµõª˜Õf$1KK?u¿ó±NVH…•` wíöÙÎA}Q§°‚¿Aq²/›úz¥˜ê§À¥íì2 ªE3†×è7–wË{ÁÂzYi3ÇÊÈÐim^ÑY!S×å½€òüì´ É„‹.bü*}¬ßxTz¬ÐçÎM­_Ô—÷ÁvK¾x¬+ôÊ=‚užh!ØŽJ§˜Ç[–Ö/Ϻ ¡ EÌ›/k:JŒwïqEWˆÑ}nûæ¼¢;94Í69<ý³_3‡l&IT KH­—m‹Q”|Þe¦Ž+ï¤.žóíbï}’º ç’œ™›À¡´4z^#CÏrx®ž:ΣàÏõ}4iFòðpûîûíC¢³ä¹èòz Ô´uWs8DJm~®Ÿ–33Ì *%UÒÄŸ+ñ;¤\¤ÚËØ6‡¼lò6Ž¢Ç’—¥MO½kó&m'LÛü§¢Íw┿`;€gÕ³C’²¤+ÙÛ´lª·ùDð!hÃ%¢X›º>žJR0{È+ðaÕÂo ”3Þévu’ªæBðC×Kl ÆBb•HÐ’ƒ–[OÖGõIÏ¿Dï‹s^%)Ìõa¬Á›—¼œîxì’¶®;#ÏýéglIÃcWw0ž«ê(ò/Ðî|”“kMûAžÜcÉ›×?%Ww_ÂLwõ1"‡gš~RΠvNËb§:´GžmJdUrû¼[’vu͉ðø¼QTÛúÈ?jÖýÒÔmçÇŒéÒÓÑØµóGSžž¸¡çIKM¢¹ª#y4A}Ñ.¯D8¯¥onÿwž§R$P=ë&¯;ÈÆˆØ¢ë€¬KŽ·‘ ã!¿Šl„¡Í‰·­F½ÀáÊ_š´hc)˜êJØN¤i‹3ü†¦R]9äò¨\(*3TØñòškÑ1¯—Š ’µË”µ”„dڹʻ¶>»Üœw<ªòrk6ÊžâÓ÷¾açóõÃýOx† ÈayÙ ½—•CS4ù"š>"—@úU)í|Œœc™êBJØÎç¦x|,ò·¿æeyäãØ;䣿Ù25Oû—÷±4 í )k'q÷ï×ÿLÛìÀǨHè²Eæ­ð¢&Àn&DÆTr60[êIö=¾ÛÐbYNŽÈËžQ‹8,iìfð¹äntJbl ¯ïÁiƇYXšbH°$§&BÔzq“o^à E© Þïh\/p¼àZlÚÁêé’:fµ`hêšä-¬” !j¢§4¨„s¡Ñ+üW—™Èü¯¿üŸ‹G>#VÌÐçï\“°”0‹h)7­iÚ½ãmvvȳ§Ð*1mžÏ6¯æíÝ*ÌÚrAé3•½L”¨±Ä?]á×Gr°8›ÉÛBްïoÙOHJ±lPDÌ\ˆ½+öE—–u–§Uÿc#~Eî Niêêõx:¤’F³AfÜ3L»CÞ¥Q>et#õ~µäwXðPºô$ØŠçcÔ±5ÒÀf†º¶íónÇçMm-v¯Ò®K³ÿÿ$@#yPçº<Å&‘Jô„ÑÛ¸ÕŠ»Ë(!f&–Q[«è#{|$1b@t.Hè+§Ä’DЗf=‡ÅE[í¬Vª-ö”uíh.kã¹9:bá½ZñÔ×cIØl¥ÅŽ`*žUÁk•WùØëŠ| ƒô|–êz55òU±WOÔF°nkØ^]…¯aŠÂT*êÇ/`[bÌeƒ°¦3í}:¬×"Y-x›ú ­Õ.Ù Æð!¶M½Þ’$X“}4q£3-ëÓn¤&H·QeÍSN[6+c‡QJLM,£¶Zy¶ÛŒ$6”j£ð~RÉ—;ãÐÞ²X™üÞήGgNgsÝdŽÀ6|Õ/óZE6xÍ/HƒØøzß(ö…·u7‘G™%$„ÅÈR‚kå¯Ój4=b~o"G$Ë i@%lú«q໇‡_á¤Ëòñ›ïé×ýhöy¬kGsY«ÐÎÍÑ™‹©ÔŠ ÎŠ?WìVfÖÄGÝHkeßÔ•u©AMç@7†z•6ìP¯¸üoµHIC£Õ2Ôb0†1c”^D °X/Gçö(ü5íù€NGŠÃ±¹-­¯–×3st¦Ô|V)Í}=Ú‘Œs–xj]º_¯üNªqÖ*–[DÄÉU"é®Ä4†ät9³Íõ¼Žïß°ŸàšÎd¼#ßU¸ ó”›‘ëN‹=s];šËZ¥tnŽÎ„XVÕÖ0ºš¼Wç¼êêö%ŽðĆæ8·2|€Ü•§}šI!¯­Ìu¦—Wn4 WÄuö”·ï²SÛÂY]uiQÑ× 0ffÉ(”.JýñžS«¼Œ¨òñ|ÈEÉKN ^{ªÄkšÜ“É`ÊÏZþ³I›"¯¤š¬UÛÁq”•´NÐ ³'z7ÁÌP ár_ÍrjYµý •¬> 8žÊ®x; î“=m𲇖ÔéKp-M\ ™ÁÔÑÄ4å/Õi9ÁmdÁAšõ L_½òyŸ¼s#ÁdÖT›üx3T 3UwSuGã´N.lKÊâl@o­²ZJˆÄEÐ8N«BTc¤8hI@öW+à-šÝK•‹,‘4¢ ÷.¦²¶ÃÅ%Emªï'6H‡ ˜¸J u©‡EëǤÞþG®üÆ@W©ž$AòŒÙ†ñð3l¶|Q÷ò9ÿ®Š%^±¦¿¸f\lð[øCG ³yiYÞ^¢°XBÝÒÿÉ䯔²ÞSÎ39uýH…¤Jà=¼J^c=XÛf]û‚Ã;ú{ŽlžfüÈ{?Šbb ÷žÓ4b²ŠÂåi,hÂÏaæYÌÛ)i›eDŒ¥,/®bVõnQ³8Õ€î¥Ã©ÎžÓö˜€‚lnÄoå/Om+,!K< àQHe7‰ÕPö£UÃ…9^€+1 ŸœÆ¦«®€ ’rôS–õ³p\#¿Ó¶¨O¬/'jT€‚Îò¬¥ft+ûÁKQKG$=ëÒlQ»83@=ˆë+“kHôFHx,¡€F/€ëÕ‚ 'LJ—'úÔ &ågò˯œ6Gæ4L‹èM ˜ âžßh4³œ4µ$:‘CŸ‰:‚ y>6vcŒBiIæ óEo ŒÄ'U³°åEÊbS´t5‹DshÑ{RΗèC 3î5h“M  P¢6Rüà§Û%Ã=WKKØ$±áXDß2vBÅî€hÒ³½戆—tþ‰½{Lÿ¤:îrªNÓC ^Œ‚²5Üíà>¤Ú¿”!”Ç}ÛÇE\šp¢ž)È•Û]Ñ)Ðj™üÔÊõ~ùdñ º ù²ó;ù2ýcbŠŽqö:6K ±; lŽu&ì xiŽÿ»üØ””{”$s˜Ü™+kíKn$Ý»^ ÉW‚b?„œÏ|´Iw»6g,Ž·Í„—«¡`ÌÔ`S€?òaŒZ‡ 0ýî„#žbÑ4u]þëЦ E¥0¥˜ó–rŽóûr—Üq‘ä7EO]æ‰ÌFßrŠT†ÿ4‚ÔqSЂ¢>jêë¡Ñhï5+Ÿ¢=W¯sÑ,át.<Ÿ³qó† >ôášÑ¢ZÖð‚S4çÿËd¢ ÒKOËoVú³ü¼ø ysW—EVäbö{Ç缂z\A„˜ib UÓ‚­R@ÄlÏÅìÆÑô¼©²ê×bx{uN‹2Ý%×HºTå›ÎëZÎ-™ØÔû書­—Œcf±àå¨Ë Äã@Êmr.Ò‘\…¬[ÿ8åíK]Õ‹] ЙãBðÄÕ7ÒM-Ôž~=v ¡ ¢2†emÑtq| ]/!)ÙßÁpýݺäÃËQ®^H1Ԙ弶»I›&ëÚÈ~ÖnÄÏÄTÑg’Ú1#±ßò®–‹ŸZ¨Mêi`·óBZg£³Nf œ‚{W±eÀG(ä\ܘÑ{˜§{L7ÚÛ/š…|F(>\|ä#ïޮ̨ÓzÁ”×g ÅÒPô=ë@•ÈöÇËb–?^ˆì~7ä‡Us‘5g¾! (V /H‰?8Nõœ÷EŸ¾~&1g“ì°„aÇCªKç·¢/‚Ë#«æÒ¹.V1ÍŠÈKߣ¿ñ)Ÿ -ŸžÓÇeF(\\0>굫¡Ö#–ôUÏiUGl6ü@CPüÛÕ·„ÿ]‹?}.%ìçÛ…È8Ø<´*?U°¸ÆÀ¿\²|ùv]gÒñ¤lêNJº°àó+W¸âñÝ{•wò«^ú ÊŸxM’ËüñõCK®¢Å²šh{I)Y§¾Z)!÷@ ñé&È'èˆi/üŽ–ïR’ò9Í&ãÕ| ‚ñz”§I§D/FÑ ¼­YSÀƒ\Å^í/ ëˆ EE^<~qy¶=§E'²XØæÝsžWr×:Ĭh·mÊ#ØåMY¿ÀŠ/˜Ó†“×\CÐúVwà2»V»ŠðÐá(fôC­ãGdÑL×Í`4VT®¾ü=ðä—h0_X—£ ÎÔ}hGaõð–Ü,Ë“Û?¾Ê5O‰ÎI)¹ÄÀù xüK—n£H˜º>Jr¶‚Õ‡wQpËó> ê¨çƒÉ¥ô¾’Wm>Ë= NÂ>‚CÑT팅Ê/ †μù ìŽq–Å&òÝì  '™$éäDÈ ¢ï¢i Ťœ|W·,¶é6M®…—¹×n‹háÏ‚>tiÛÁ?uósrŸ3ø ýÓ÷¼=•zìax›K€T¿|/·‘‡à®~×íéG—Ÿ¡ê„SHydp­!"fÊîTEÖH €ñ0ï‘U3 6Äâ ¸_,©MšrñR q #dÁÉh*¯^ ìzGü{þç1?nó–ý÷þxÏn‹í©“Å^¤«î’÷ÿ3-õÞ¨ؤÄ3çh—ÐÕœ!qšD Ù»]ÁļªPuvSÒ| ùüf°H6O,ž‚ПÌrÇ«©pÙê6mÞD4~¦¢šÓ»À«»ï |cEW·…Úá‚oá#osŒƒÛ1h9"êÿîwøŽÞùë¼FEÇgè9ñI)­©…2  áÔ¼…ªà~]%&rÇšwãr&Îum.]},²ˆKžNRq½¨@%Ó®Oò6Sl' y§ŽÙ@ω#%n,FòÑtT° ‹xÌ´ËvåêÙu;#ñÕ­»%Y@rÝkÓr˜ºã•µãÀµÍÓ½Aѵ\¸„ŒŽëó9Õž*ΫsÑÖ•˜ÀB’~âõòÃÃÍ»‡ºLÛ‚½+J>ήY?÷ºSh_²CÚÅÐ04=T¤Üøõøt ŸªZ½$à9h9DXì>ˆHéHME'P%¦/ |(öwâ›:7Ž^<ØÝö”=åÝF>§¶¡ø»Bq“˜«=ü‡^`ìH_Ô“o>WsHðÔR ÷EÅ;s”Çjñ¶Â,gš²½\ïÙ+Ù®Uý\Åõk¾ƒnˆ±ímDæÂ%;±º݉-Ù^3Dµ— ­Ÿ#F'º–<Èè ·üЩ¥ïñ-ñTíʆž¦”ÒÞŸ¶|vœ¡‘ãt^‰#gï)BügÚ?ƒHÿ”(oDÓ›°ú±{NùÀô “ŠÁ©òBrÛ–ÏÁÜÏÒc;d´Eä^lìðøì·¯bdT'×*8ˆ²‘ç芈5‹²í(j,7ÕéG¢‡·|VQÇÓõÓ©¡ 55ÝP•œÀÙŠ‹‘råv iZÎ6§Í…à è.mNe‘†¢²ÓË;²ä]räÿ?18›# (¹-n<;^ëÒ¦W'fr>U{`Ò&bŸËgÅIk®ÓŸ”3Æcú£8žŽ‰”àD¡HÁÚ‡¸³ »'>ЖÇö`åR&…´Ì´Cþ¸CŒÛtO/lse'KMTÐ{Ì;h_äJµ²xÍ…’)ÄÝò!<ɱ–SÕ•¯™ŽâuA4âe Ëð28„³hyD'¶I+>@ƒszýpÚp"ŸkYï3ÑŠ*éåƒdXVñ£ö)‚ÄT× ~DáyηùH<º®ttC¼ä‚Lò7!ó=‡æûšiÞ±~©vŹØÒÐ2kVf›4݈ù2}~cÓvÒeuŸ©pÅZž¾ªº"¹z|„m¼—ñÔ<Ÿf^óÛ©}á]Ú“Ü ¹ÀðâCžnµ¹/;MÜA$–Û–§¼i‹ª#ß{ÀXñQœéÈËËbh둞añT¸7`¹èÐåJ¹8E|x¹iA¦ÚmøHO4æ¯T¼;5;Èèá4rù ŒÓŽßº4}ðÇõæÓ"3ä~š^Ë!KðÁ½ØðBI ‹]ÜØvT5ŒøÜb—èbñÅÃ)_6²ÔF±³YðÑ3ä¥ÓCñeqÍiN[(’q%m¢ì#Ћwƒa¤¨òF†%…<ø°”Ñ‚\Ag‡–f9SÛÜò´pW7k±^lX@kb#ÌoаU(`»ø°—¤’£eË…Ä 12<$â³âflѱ¹°à=•} ²(>%ovH—^¼ê^ƒ°>Ù¿BÄÝÿ3¡CÜõv[ G±h·;NU'd)¨É¿‘î§q±—*£§ï\9UˆÊ17ü¡@£1Fᳪ‡qgøúk3ò‹vm‹^8ÁŽhMME7b)Ö/ÊåÉ—ÞS8s÷ë]eÅNå&ÍÊœU7Ò^°O×¢9 ¿×"$¹º¾•¯Æˆ§Ná¥jeñéL_è˜h0?ÉË{Ÿ`‰ƒÏ»ÔXäèaãäœÂ ]´èhì‘ þtÆ¥÷ÓyšÜ¼D ¹é̿Ӏ‹³F‰Tøºš Š$‚aÑy~îmÿ£ÚxðS¥n±M¡#óñÉÔRŽM=#Jxš- · E”ý.ÿÁ»ÛüXÇ,lÚÔ=¸a5+å ‘v°[îv Î,¼¼ƒeÌD©I41 cncÿFœÚ‘‡Ë®!H?'„x‚¥ÂM.N­í¢’ÚnÁ ޗǦ uU€pó TêSלº¤çÈߌ«Çb;SdÃO!rMZEô¨š–“È[’wy[&e±mS>8Ñ÷Ñ‚5”Ï:gs ·òM'Ø^®ß;‘#VåˆT¶ó׃ œ,ÿÛCt]ÓˆÂmè¹ )½ˆÛ»bù·…FÛ`Ùn_š¨+E7L)¦Ž}ŠŸ¼@ËݳmYóZ„»Æ‘½lù¿íS“2öÌGßô’`7à>àt®Y$@êª}J®¾| €ñ®ÞovõsÕGúª¢Ã€‹ÀTÜt­%“>!Áç瘋K6íl!+7Í -KÄoÑîõØŽ§‘ë šûhð¦~¾’¶&º ¦9øÙ£ÃÕ´œ AFB“C)ù°¼` Bäž ¦l^±˜›ƒ¦ž$HÉEº¢*Ži À)3Ùç±Á¢ùæ—MÄÄË¦íÆ©ÉùÍêã0æàãІõ×à)¡{ºM[{h ˜ úfî¨ãD¯ü;J‡8°¸1nºï*Ö¼tXõÙA„GžgŸ5õœÀ¥”Þ|©O ‰K•hx†z¥¶€Õ]I! üŽÿMo¦š>ÐBNó-‘ÀIžLàHBøÊƒÖ“A6ˆº~†ñuDrŠnÌRÌyûá¬y.Dô0õœ(¥TÉÙSãÁb®ëÄÒKÑT¼'‰Ùïœjº‘Tª#úñŠ!~ñ \ ƒ¡woM~\cÅ‹oªƒ@[¦Û¼dQ U.)ˆ³²Å€Ø"‹¸òs,0åçX`ÊOTü¡¸ñV{f¦ž{î§à5ì]„f‡@Ð좯Ç[”}`zQ¤.+“£žH—†Ëd]=vu]¾€1Qu#éå%™]Ñ%Ÿ¿ýöõãð\Êÿë>k60¶ããÜè-· 7ø™'ó>§íšmcüÏ»møpN48yZv‡ ŠÂ8×÷áÓ¤ØúQžxâ‘:ísð¡ÓÅðäð<òY‡<]ïѦM2S×JI†ñœ¶ì´<ÅgU÷ Ò„±À¢¶mÚAXˆÍ¿A6KkÒ*æØêTÓ DÉ…D,V”{Óù…ðË¿ËLÑÅÏž©:¡ ‚Ê¿L*=!=·E—'<4Éôž3ŒøÀ …ºÇãˆÜeÁƒß”7vÁägéöÂ>ݯ§­qaýGéÀuËFW¢8Hc§<’®€$Då­Eþܧ¡øŠL¼]̬ïQjîæ‘XÛ¼ÌS®¦z³¶¸PUðï¥ÃBx#g®m¾”óRŸL°WôYÈâ`?ç[(õ‘=£ÓF€†®!èüUÜ:ÒŸ8“/1¨¬PòŒÆi! KéÇc.Ó¥­¶Õ‚¹)o´ÚýmºíoóêøŽÉà2ÞþŠ%c3àc¨èù¡ïø÷õ(>`ö€Mã‹È Iè¯7)§¡L¹ãòç3ƶô>+¨<1žuP¼ú›Ìüá@Á@N½{‰}æAE[ç'ºJ“Ú>«0¢Î#«ŠÒYZYìf<&Jz…é©,«2C IÈ`*ÎrS@#±´ò8ì óÈVBü’?hµ§=ÅÍ-ÚVRÖðjpÝw¨³EŠÍ½ÅÖ'i™Åœ?wY@q‘µçªbdÒî¥Jáé³E3¾¬®xµ$^QGçº.Ã1FG {'ÜñÏ•ü£çò; lÜËÃ`bi0r¬é°à$5•÷¼¥Ëòòñ-B_ÔæÊ%4Ç–v',³&É£¹rˆˆÊâÖuivxw“Ã? |fÃC¸â©Ôù»Þlät«zˆ‚zÝZ2ËOÈ÷£ù!â M]ˉd†ƒ6pœM»N·2EdXÖ =ž°ç?³º¥Ÿ»™(:!+±þ0a2|³Yè<êçúào"ØæÒ¸µnSÏVIi¯çþœ¨×s¥Sxà9/ö‡N®ýzu§^›3ƒ méÞ‡Õâe0ä;ɇ” Þ›Â{>Ô†¹®›â “—ôOMɉ€‹cÔ?ñ\%† æeÐPü Ò´GlyÊS`B|žÞ¦1þÈÜ6Ü´fƒùñTrÚ4‰."Ư¿ Õ «îOÅ<¦E çp7E×W ¹ùÙÕ"`¯˜ ‹³(cYÚZ¬±ê:T´‹Ò0†àÑ·%¡íˆÃÞh4¾æmvâsˆ2ysØÿDq4{(ø?ôVÓrB˹~ùüŠ¡5â1[úéÓ©¦b3<ƒÛÀ»Â‰ðèöQ…#q’3ÙÐÃ`œ(þU† õ1ßòÂÊS„Ñ^lÚN¸º¬~;LŒ¸¬úÕË% ǰð£‘ã@Kߟf÷*G6J‹³‹Øæ·(¹Sü}çÿ¦Jí0¸`TùË6Ýq¢›ñ)åì3n6%ý­ç_G ÃË}4à_}>4¼ÏÛÀ;ÝtRSU'‘AP€ÿ¨Ë6jèÛäLLxÍÝ)ɵõiH~½KŠÛßxÓ¨|С¨ÄؘëúÉ`ŽjHɸ‘ÁTÕÆ·&Ð'fZÑÓ³®²ÇˆÎÙÐs#Rê™y4 ŸATD ÿÿĽírÛ¸–6z+üu*]Õvö×;gΩzß*ÇN:Þ;N¼£´»gþ¨(‘’Ù¦H6IÉvÿšÛ˜Û›+9XH$>”}¦ötdq=KÏ€øÆ‚pÏ#C‡ïÙœ­”¥™ˆ€+†û|¦I½‚Šp“v¬§G– U/GÚ>ÖÏÛu¾í¦ÝÒÁìͬ*fæê<«$Û\\QÇÓßo»··ƒYÁ Ð1eãYÔUiüWNÝš ˆŸhŠt°S4u)9uooÀ$\ÅÚéÔlIB–x—Åz&G¥<Ü_#¨w‡jÝ×MA#>G»h¶Ž]Â\&Y¡ÏɺT´O·õ¨ùÊmhJ:8Íw98Ýø´é È•4æ›Î#–´mßï+L6G†hÿ öDýÇ åîUÉ}„Q˜šbsXwéZ©cBÛ´h¶úþVþŸ^¾}w—¬Øx¬o‡äj»ÍK†eïã‡ôP”¯cì1~ëpÚxü\¢2ëÑ–Ã$z'®[‚) ¾z¨O9Lq“la*/dB3ÔE‰U= $ ûqõ€§‚ø*87‘:›º.© ¬GXrUÓ*ƒñ|ñýDjÚé#Ü#MkêäJ2ûºïw•!)O‘6¬ƒI[–Ré_Ö;VÛð¶ÏŒ·ŠÓ­Õ5ÿ[ñ(‘´iµâì#<Ö‹ãí$üÖHÞ>¾Y›ò;áÏ)%•Mp+gÍX\ï9ü1Ü9/î÷T²Àëñf~zòæúöÃêÇäó‡•÷2 ñ“mžíŠîq-—߉*Í^Übg­]þrì/¾ì.ÞÁ÷[q…L9í(n¾^]'_Þß%_…äêþ¶ ”K:äp‚;¯f’»!† K¡N(½ÉË’.’6%l÷“ˆ™"Ö¤©b« ËùÔñ}ýœ·ï³ýx÷¹i.YÍšà\‘W°ËBÓ´5?ìJ“íòåÖoDŠ­ßŠN/M¾u…0„ÖvšÂL;ß3l…ëŸoõ2”ËÊ5=Mx;_ÍÚ’ºö­¼(?€Kñz á?(AÿP« n8nÈ÷™3ÞòûßÒÂJ«h`Y“ìo´R”fjÁ†ƒUzÈ»&õ_f]4)y44‡Ú‰¦Ë‘OòSYoÒ2ùÐæ9kæg=Ì•,*öYÕ#šÐ. £­*cà©(]‘b.±Â`i£ûŸì†,mQiŽt–Žf4ùÅÇMº%-À.¢ƒ©‰ëÇwl¼„çÄý&Áܺ@“.&¿Žð=’=×çhQkîÃà l¨û&¢"›£]œG[ç/ßîéuóÜ×OyE• ‚= ¸©E†jóLíÚ/Á.ªƒ©‰*ß—õ1¶ûÎüµ5±–P€.¾`fâ ß#èQãå-±.’ÒÒÄ:;9n¶)¨‚tÒ;ÉOpºLœ1KVÇMr·òˆ_>Ü‹Ò#‚‰ß`´Q‡Šu+á–Æg†ãox¾ôÚÙàÁÜZG«ôÑÍ5€ÈÍõ ì#ok®9qdsMîë@Ïù àˆã3¼8ÔH!¨"] ¹‰"àçXì^©  ¬çh)£±õm‘Ÿr~F²9nX‘ÜÞît‰:aãÊžUÏé«_Cµ«‹š.c w(QŒu1LÁ>¯ËZžgüR-è.ñ¢˜IšemÞùóåPÐNAÌ‘v%ÒN);ü<cÌZn¸e—ðçYíŠq«54Ê*ÔəГ?üÓa¢;Þq·MÏxÀe‘”ù7ÜÎZ5ÃRV^†ïñ=ŸW¼ˆ=B°û€}Ý+̈¨ªEó¼-‹uFšÛ˜AírCµÖaëW1ÊæÙð¾-¶][,î©Û§.9i" > møöð ceÝnmw|0Ž_¯‡€ôiRÞøºEW¯·|ç]8Û9ÔJz4”·XUb{Êíê‹('ü ¹<­”gòÜG gàÊ Ñ@1÷ùKÑùHt¬K„´”ë™â³<¤"¯ŽI˜‹ÏÅ¥o„3¦3 ­0³ž0Mi€ºåJþfhÚj0Ñe™–yï…~ µ­ëƒ—oQ’fog@;ç¢\ÎÜb¦lKOézK¹5sŽ´s“vÃ2<º&Ä\‡-øÒû[±q“ßÎÆ .€x?^U¿Ù¦à û#f@ÑÍÐNQ#¿i³°Ó!ù»&‚eÈßÿ±JÄ& ß8í·MÝ…75*ÊÊl8ã&1mšR`ãoâßßÕÞ^ÔoyõT°ms,Êð¤ m¥«Úªí¢|ðX¾¿ÕÔ@ß6>Þ£}CÒö ‹ ¿ikŒO Ç3ý»Lif¢"Fš»©Dð$ÞVj„ûØ*7”Êà/²ÒÒW ™wÛ–usÉÌ5¸¹0–}Œ|{g"ö¬Ý;½&òa!®{ò`8sêSS´áói Èʼ7d'fjd¼>†Z^Ÿø÷Û¯WXªOÌOY†¿—:ÎFXZù8Àè½\oJÖÏ‚‹ÿÂɘXYÍÌÅ©þñ/ñ8>:/÷×mY§Ok6P¡DV0ãíÌ5kñÖ±~f%7;£/×*Ø`üÒ8ÆbH5~éß5û1òõ[n?H©*Hr2 èÚiÓ³F¸Wé45ë8Äå –ÅφÆÒq!`%bµéF¿—êÑ/«DùˆÖúQ2ÚJZµUÛÝðȶŸºcð½ñÆÊ­;rFÿÈ[6<«»¤;nº¾èá|)ŒÕ|¤Ž›üT°‘Ì6+ÖGÖ+NÃ;µvVÒK–'!Xìëã…%Ó´yG8iÆ{KX£¹¶ÄN[4«ÓK‰3{‰õòÎQ–ôæÊâÁË yKäh:йXV'ß$N™v<.Lp£0Ú˜ f¼&ÛåpÝ7ßHÊ…á¡—ã±Ú>†×^:ÎÎ[©•ÿ!ݲ¶J.¡ûÙ½RîrÖ`vn`¤m·ƒj®N Ð#{èå¶9†1VVÑ0}ª·i™¼c=gVp~î‹öúÃtþUÙUž|*ªã‹a–6ë´ïÃç=çH+ÛÁÎ0JýtsuŸÀ³b­ê)-þüüutÊ–sg }8–}Ñ”ìY"JX@칡-Éá!bcwDŒŠµÄ:é*±±Vy?nIâcj Œ¢Úåi»}¤QÕ°NªÂRRåá“I*æx"£ÊbÁy×iUÕ=h„Ó·¹°ªXôiDyÀäHs¯ªÎrJ'rŽ´Ó;ü Ÿ¸ý%Žwx¢+0cÙ| óBüÈŒÉÉä^l«ÀDü¿|ú•óˆtÓfvæ< —?‘»>¯dl Ú\¹Õ…]Å žT•û=*¸ã.gcº@†Oøv}Ï'ø~¾¹ñ0¼Ë,|¦BYe0“1Îo–÷°üƯ·}ž%›× |ÜÙfýt ïcj8+Caeìa~ºóžO‚-8e¾Þ¶ë. VŠ£¡ƒG î",¼­w½_7Ðï#,i/±v¶Ò’“çÀàï ܸTûæØÃš3Ãì2afì ._ûbK¤½„;˜ÆrÓ£Ëòlˆ [Ü€ùÕãã5XûEdUJ£¯Ä™™rÝŘÞì çÌØÞ|¾òÓ”ýÕ9ØAwèoL”§}ŸÆÇx¾áïÞ Šäz'~hØYòõ-Oc˜Ll/·Þý*ƒn% Û£E€±e‡ÂÞO½Øê "PÛC› ‡„ „d=<1?%Ö  ”·K‡:èpCÛ›Åby§ÐÍxcÃ4úÀ9‘^žïÑÉûòœæš?=Ü !«ö˜ûKJà©Òrª‚MéÔx‰LKäLåË–´ KÇY)¾l—›°àKˆè“üÒ5^u²¯š×þ±–¶öG[øO\Ú!a²ÕJç¯×òR†Ÿ/kLJŽÂUC:x ;Q$Ž]Ïz°‡©½‚ç >7bÚ Ã†KDò*ÔÉžºè ƒpþ±ˆg¨"ž¡‹øõ§[Wr¹ÎÊuf+×7!å:#Ç1Zb]\Õ8E Sùµ§Üª¿íËàµÖÔÆr2­/ä—ñÃÊ#ˆlÌ3úyǪiL˜|†¦…Öœħ@š¦;NîÒ-Äö'2lÍ îÜh0;G¹ŸWtjà¾*hðdç^°L0 ÃS±(½)¨°ƒIH™§œ@æ)÷’yRƒV´û¼—3»wì bÐ-²¾ø}–9__¯«Ë¾¥õtÆM-Üf¬daüí?ƒDÆŠ åó*Tm«‘îU0?:œä’ÛŠö—XúÃÑmº‚™¯ˆÁÞ cŒl-§…‹¤¬­OEFhÊmüʤ½AÙøˆ¢¤O÷ù£ ½ ÀÖ•/ü9IB^¥„}–f¼_·6hH‡Mh/ýÙqä|x”©ˆ ž19°tc¹Lýeldjó°tÄ]¬.<*€zò¶@È£§Ã-/Ðqáþb® Ñ#­D¿igÔÐE1'†G´ºÀäˆ(q™#2N")Gžº×.ü8¥³òçFZ „«&òA[×ýiŸlø¾U?Ó:cµ×†Ppt •­4“;jS¾WòÈ;agÑø &儲Sdªýßž÷HøÉpXÃøïÛæúù*ëBÀdÞüåãü{O <¬Œ™‰˜ …}mÝ£²N'€Yyýç·o‰¸ò‘ï`‚nëo>¶]÷{¹ÎÅVZYK3îٻÕ꟟¦èãÓ5"‡šåD ò•cØ„’Õý:ÝïÛ|O9aó`“³°G2dƒ©¼êèüt¼´Ær;Vt^Ç ËéX!ùüÞ·9=¥T´·E²ê‡[–X£Î{¸e°$M¹À>FˆSyšWRK› ¹5"|å`/6éip7aì'kšÍzÏ·ÐG./šKŒ¸Ê>ïa"H/!la_Ôú ÌÎŒD˜·@ÕÊòögaÂÌ)ìãíkÖ¿~®úâ zxÚ´‹·iÉûí±!Å[@­’FCõþòÏüÛ€ ÝUþÌ$ÛuÆãÄ(‡öí>ìäQz •_“á± M’²5ú½j‚† egÍlÔ­†«»ïÙñ>Zû¢zá1ìŽÔ÷VV €> æÏñ\lÀ¿ QAÕÛ< 4,ÇôjEÃþ§*òj)¶}Jº iŽ´rì´« X¹æË=B[Þ„»~µ‚Š.¥{Mh;qÅv¶ï–¥ø¦¬_’Ï·Œù¶žáÙÿÅÑ_8p+˜ÌÝ"Øÿ…èØÂ5QB œJT{§”ëÏWwïC´@Ks*ògšŽÚ©a°uò‡– ŒPÜwÅKž­eHXš“ § à–òñú>ùæ0vED­åþùE1EkéÀ©G1wªá7/”«Ð¥Qäâ«Üæ¥ó«7¿åþiiþ+‡ü@‰+¹Ä:VX:ÓT˜à8¿DŠ9ÜÍüS î~ )UÚôm”ƒ§ ÕÞ)äóÕý·¯AZÄeDDØ­@^zä"?؈âž^é<`tø+ÿA º`ï~]4´ÊF{pÓ¡ëylʼn[ø:IOiQB$j%<9ŸC/1F+Š.G÷àפ1»°ÁªM«}®k»÷[£Tv´]}°[[7íèÓ Û;(lÐÉø 7‰‰ÁŸ0'^¸ßØ:,¬CÖ_µWמ¢4,ðN “µSÃêëCˆ†þ%®´À;5LÖN Ì,DiñuŽtòž^í?—¥U‡´¡’ÐqV®ÌjŠÍÿêëdWTïtòÝYbË·—&DÖNRe§ÈlÔAügQûù#÷Uõ!Íèñ~p+KÍxŒõû¾Nþ^o:>[‚&L犤)Vxy´)Ö Œ4½»G·îÑKK1•Y{T~릛R»Æ»òÓf ዳRleDŒ)俈- BþËÉwÙØ÷•Èǹ;6iaVZyK³ùE²÷ÎKÊÑ f¥ÆŒäÊêþë¿û$+:ˆ€À~æ¸ÛAºvÛ6Ï}«¢5í l9[o½?^¬OÛðåagÿyn¥æÝCÑöÇ´A{†*º{ópýùXáùrí;©Xg›ð@’ ÈÊ•™¨µØ» _nÞ]û8ívp÷Ý_ÿí yRÃ5„žÏ“•½ 7n•}Î7lÀÁ[j´êz°L®ÁRn6ÕUÁwœ|ánæu½Zý˜†·í ÈªŽ™(Ãõ(î5ç 3òñcý–‚vÿéjå:qÙØçËÝÕý­è)]z9ækq­7bÆÛÙjÖÚºMLJ™Ë[n¸½WëÿÒRZZ™K3¥ré’/M^}Î7Ç2M>Bb#8òyˆ‹}f¼‹±bæF+&¸ŸÙÔ)¿fKwJúr{¼:$u[9@ó¤Þ~ºÄº¸ª·Ÿ×¾À•¢uTx#¹‚OrÜ`ØÅ] hoHê1t=‚3a³•sñ<æËà`NQñ¿Ô¢1DçóóeyžwE›?³nášxÿ°Ï“C•7›:øóÿõçd°çH/ÑâøA–MZB’´ÒL~üÂ4”Aß[<<Ç‹’Û{á&€è<³ùò‹[ '›àœƒØð S=|žüg8ƒé yT‰·8 á:Ìê¶UN’{¥Á"Õ‚øñþ½IKpéëàB?t7²ôÙ<ù.pæQ¥Ïâ(„wdººú,󵥨?‡ð`ͦZQÑPË¢"]‚6GÚɃØ7=§¯É›¦eŠêcW¾2öüùêjù#þ‚ÃÛ?(M„œ”¨È_vnybyk—(‚R©0E 3TÇÄWÌâ'Ƶ!B+•= =“½'kÀ0DEL®Ì`4 s%¤É«uÑm;¶±9ÔJ~4Ônæ[]¯nÇ(å|ƒ.ì ¸àß#XoºlÝ<íI´u¬‹·´T‰›Šåvœw«Ýì·5leeš¶nH¬.\äu×ðKQ–‰ÜÐ ÍŸ|wVè!ÉAÙÍßùþK°Ë:aÁ^óþB‚.¸Wøé´Ê0í™_¹N7f»t¦Æê2×~i{?eRñB”+Y L7.Hn>jÝË:Ëw)\MNq ¶RUL—W]óHÑÃcã.}%lŸ#]\™Çé¶ À55i3€oå¤[k¶‡pr|”¢N¿K‡°GlÅ-ò}¤jq9ó3B *!Bá»Án¨t0ZuÕ?–¯ë «·à'(Í>\Êfˆ¹ ù8‘½2 V¥»TI¯ë2Ýä%µëãsee ™àìÀÛ¯’ÁSÂ=u¸hŠ8Ù3¼Gë`™‘˜„]ÝߢÄlËc±ÁêÃ-JCÐrNºÀeYüÆ —·Ö9ˆ&wò‚T\tOqZç<*Gs¢>†Ç)ã&EI[zpkS칸oE7Üì¶M«dÇ(<Š\ª[\ÿ„þÂr¿JËéB•¨Dpzó$ˆKËùÁÙx¹ .5¢Ö€,ܪ{šRÔ]›â·ø±•q nm“9MÚ#æŒÌôK?â°ŒÛB©£)†­+á¦KÞÈKP |F]±Œ€6e͇ÜæTâÐR!›kÈ¿€ûµ{ó0Þƒ"¹CÀêÃg‚–]r-]ü^±S8Ã{Ô Ö4e'yVÞÐ8†oá‹ÌoŽÓÜÀÁ–®c6QÒ-nÜ)0Ñbò‚Süû±îÓ(±KnŠ=M"w€S×Áe6ÇR9b£ÔíÍ­Ú‚ Ndr” ·ßá’¢J›î±ŽkPN<Â5ÈyÞîÁ'R¹lçäU$Qúí®<©`ÒÒBz®B Jñpâ9ÒÀè — :”–ãéH¿ZÞÐSç2(uN‡³¤ËÌ .EÐYÞø$éÓ}TZÌñîD­‰%!Ýã^ƒ³B±?kqG)Y5;p+œ-Ç«ã×Q¢”E¾¤A/çy_J¤¼¦®ËH‰ >™€(•{ð)lX7.µnÇ™ÏP66} ûÙʯxˆE…¥b¸v0'Å50¡¼'[•sšlÒîiìYÁïvã³Þ÷ÃGä—8!E³îޛаùÎâÀ#g4w±Aʾ‚å$ù%o¬òZš¶†`°T%:Ü£C+'ßÊËÐø5XüË™!ø éºÇ§ü•ªAC{$[“‚*Y­>&ð$AÞø’ö=«õH7kxy„-`¢¬ñ?™Fø‡å’°%N¾dú[®8Nf€6c±“‚³ìVæÌA™7ÚðÍAâ¹—à>o³cÿºN˼¥%ÞNY³‹m±gßþ˜0òUý\æÙ>7²uuy‚âžÞ0 Kúm‘!V1¦_Ù>BháQš¿*a.eÁž”™g\Ž~3n"-ÓŽ™L å·|­-’®)K½–râ #~?;{³Ÿ‹*«ŸñùBº(Ì÷çÉìvv–Þü›t»­pQ{5iòò?¬ËâPº ¨÷`(8×Ü\ô©¨Ž/ÉýÕ]"žù‰fŠ™Ÿœ¶WÝ¡.ÍlÒ¶Ï)œ˜Í"žˆ5Ùð€E¹Ù|É .ZaBÛI+¶êU[メWì.ëvϯچo“c_”…¿ÐnÚcµÞäìIHÂ+(«°Ûòêç¼}×ÖÐÑo½w*6yJxù'•3ÑZCö7Ãm˱]ôÛå/ù6<­T˜•7álÛzW”°“Öòs»“¹ö‘+¶OezM½Š²Rã6"#ÅG1"…— ˆzw¨7EF¨'XÖÍÂ;²´ÛÂE·7« ;6‡R†ï‹ `3÷5ìõ~.:¸?™ß@ØÅP^=Õ>«I*ήŠ[Éý¬¬-z{¬ø—¥¾xÂûFÞÂʆz²\Ó6Ô[Øiëæ¢(Íðr©>êOûÿNwY)2-ПÞ†r²ªË´e…äÏNnyF±£ÊËŠ_–†¡ÞˆËŽ)]Ü%g2Ö„ye$#®ó+"\?¯¢üå%ó¦mÛòŽºá à»ÕÍ Q1Ÿ-aO«Šr°­ì›Ì?´yÎX&ÿç'ÿÏåŸü$¡m¦ÐTp¢`Å©ÂÞ÷ëÕ/ã;8m²à׊Râc{ uˆÂaì ´Å‰µ$ŒáxÒÎßM¨Ûž†UÇY¹ +k†ÿgèjE‘³,I4u¬‹ª´ätoÅg¾:=Tp€aÎ$U”c« K‰áÙÇQìCØôº²Žc6á1Ô˜u·ã¦Û¶Eû>ü`¸*(<çvèÇU Xró@zìΈæ¨zÁå<[Új‘`ÖÜêÍok6&ë£û¶VoHÞ:Ö§¢-úcźNížHÜìÀÊuf.îéƒIÜ{ñ$ùÒîÓªøƒ·ž]rì`ˆËw Èçþ³¦êoÄÈA+Ѧåίƒ/ÅæÁ§I˜¢eÏϰƒ0^N”¼m¡ò ê]ÑoÚbûÔ©'mßüØuQêÂ|ÝW%ÀŽnÿŽÛ÷×ÝŒ¸Ë±Q ñ²B/}Ð$ÎöéƒSQQ'¨ìcæ³|ûšêlLø|{D}±+2·¬þP–hec˜(ŸÚÞ0ŠÔsÈ –d}ÍÐ:^õËp.…X›Û|8tÌ!ïwñØ?9%¼ÜŽ}…¨zPZ”]8ƒŽñº53m$k8JG¦®€}y¦"b¤<»÷}ÔÈãTQ¯¸Á‰W!¾æÒöE'_RhqàS¨]V¨gÝ—•r/&÷bf>Uú€"<Ó0ç–šã¦:nÖ|Ó¡d@[U©¶¢š>n>7‰üFÉ6éÈK½lÖmÞ2d†´S–v¢;–ebw5ïsÞ³g <“KÈ)ÀŠ jsû±i(š*ÌNŒD‘9²A´øÛK¨ÍwÔ“ö°Üd*÷rÏ28*OÉ{Ø…*ãv$Ê´{¼j[o°=îy£`ƒW° Uð®L3o÷ãØ=nŽÌ‚R0fP;ûÁP^X]e]RÕ}±“K/üÊðûÑ A™ÚptуÙWúØ÷M÷ÿ¾]B,gí×þ±®Ø›ýû±hs1\#'«0ŽÀœÖ&¹…ð[¨Õcýœ‹¤IûG>ívœWÉr›WÛ×B7#v”ÿ~ÜäÝpÁ=´uhms¤M ·“ƒX?€%¿Øî÷¾]s]ÿÖ‡¸jš‡;ã6}Yo7]Ô¬‚݇M…1Œ+ Ö€A¯èkÊXX9H®Ëú˜%ïøÿ¡‚zCõ« ÔIÕ†ÒCÑ€"žmø< ì!§)X:pJQ̹¦­˜y›ŒçãÆÇò˜Ÿx#¿ÅŠ¢jAIP˜çúÄA³âP0Ïœ‘û8rBŠ MsÀ¾§¹—¹aÓ‚QP³¡DeC¹±P֮ˆR4i¸ws)HUåY‡Šö¨¶\Sše?B·Žl‰ÉjÞɲ=Ïô›¼“ª‘Úº®$+›°>]ÌR]CY­>—ÒCC»d=r.z²Š–KÎ¥ƒY©äT&lŽ^¼ ŸWH¶m¾…[{©¤5¸‡»4V%0ž‰ø6B­›8GºÈ[î€B3§¼÷``hÃi$mé¤ v¾Fû7º®«ž¦æõÄ(Ð=x• ö\ÑÏ Ô°?²—๟ ŽÚAiXTf¹ülvA8l»” ¦bê›9ã[i ý”¿6iAk­u¬‹²´T’ÒdøÞ 8þÅ{íô—"zd(@—0›¿ðôû"ßkkas/£ûrQ=Œ>²F®=¹ëhg²¶‹UHKOï®f>ê†}w‰”³}Ì·Od9*Ú'‡Ûäïw(c[ñªcUFTQ ¸O§RM… E×^ð+ê\Y—Á‰O !hTá—©M™žI¯â)D4ÇE*‡øÈ(ùÔëv—X—Dõr]SÕÙÕPígJè_zúû1?Òæ.T¤K ·³ 6ųþÝ6å¡fiWÀÚ<¸ôhö¾NêÕ±¯ãn¹UýËà¹1’4M€µ¸äžã|âò4[o»S¸$h"Íä '둦ÉõêGOðRËvE÷¸–—‚šðv¢šµ¶yõ˱¿ø²»x—ŠËÍú~wÜ-ùU a§d‡–ÁX")p¿ ~×ÚwÕC4Ð>5˜5”Á–´nbû8ë#ß#}Ó>݇CסN³´ùžõ/åí~ Q5äË‹_?®î”­Äêó‹á$¹|Ïü Pt¡‘]Cb!‡þlxù•ÿuóŽw 9E‹Z¾ŠYºŠqA§ ßáF”Üghð&åOÐ]Þo1ô…y]ÎÅ‹–”ˆTä¼Ò.NÄ7²øu?&]™ÂcVŽwå±{ô1}Ì ›U”•)؈fòãû‡·"Ü~ÊZuTà˜ö±â!öªœ0ÿ½ÀÚ9Ž–ÃŽ™nÚ2ÓA^'Ó>éê]ÿœÊX~•ÿR7ð+ªÊêÐìâ?˜ªUÚÀ{¸y]«â¦ŠŒÁÙ“õS‡­½»û½2'-E.ÁvY“©ÜIÑC¶ü\Á-ó¼6þ*ŸÊµyñ¦î`döJå>Ã{èÖZÆ÷ñQ‘wgjVŠ”0^œ@V%Ìdq={2˜ï Š ``m ë&EÌûzÔUu r0é9ÔJ}4´íņ%×ÌÊK.Xm×YÞ”õ+)¯Õ…]ÂÀ¥|¯Œ;*[Í´i’ÉΛÍa]³ !ÏI×DáVš±Ö^if;üÁ^å2}…•UÀ1EókUS’é¶$hm.¬ªí5O“«ëOãµ2—HÔØÛf¼¿}{F^>Â/Ht Iý¢jñÅp]µ‡W—–=+ZL$eO– mã9ÚŠNDYÖϬÖpu«ešb¿å÷:f›Š QMÒ®„Æ\Íl8ÕJT%¢ ;9]“ç¬ËÛ½V¬Y‚ 3-‚hhþOÉ»ô)ïxxåCs„ŽKRF1}òL>}ô É!áͬ„gæ¢á‘_ô—ÛÆ±*Æ=\³„yH#¯ªLW7n ;ºÌâ@¿ÅÑáÄ+O,73L×!й={rJ‹"\† $ ¶í>òüÃï3i ?8·Äú4é%0ðìÜôsMtakKZRÌRú7±¬ +]MpѢꊑ„V£­Û{zuFØa¹ÄzË–#cØôs1n°$“¯•è±o‰Õ—W܉zsj-4GxYÓ~6îm²¹ “ø†Åêïòí±…-1×bc¼ySÁ„E(O}Ç'B\1°; M‚À¢pöt8WÔëUÝjÐÆ¿éuÝŒY{,ó³ÉTœ…æ4@‚¿‚A„jXg‰¹^:' òeæKB¤ÂË*öå;ÁJ ~YÉ:ã.%vûñ«]^MìÍÒáæá±‘Ùjpƒ—šµ1zi×Ù™ñ~…Ó•vSÅ#®²‹ÛóO0U@—1wáU2t1Ó×d52ÈPäËfðâÕ¤bP/šPŠü©¸—lé+1ð‹Ö+1H^"îÁå1ßÁ¦JxúÔJ|4Ô/'y/®+ã— ‡´ÓI–ïŠ uW—󇧜2ݽÀÚ5HK.¡®Êפi –Êlˆ Ç{’>ížTAñºãq]¿žèâ3€ØŠ,nT¾gÞ`«ë1 fÏ$ó_Sn†Ñqöõp;ÌPn¸q9__dùß²ôx)WÙ¾-2g h'-Ì” p%o©Ü0ľÿ Œü1%™¿îH<-u ®0“‘ªØH—ÿ•‘¯}ôÊ5ac·Š²õ¬?dÀ: %ÄI–A`գ׫z×J_ý… äۭ‡€ÎN{Ø %úó l6äׯ󭠬aãr‡7Šjxê¦þ>¼FS’Ò6®b¨Qvu΀N‚ÃNNãuŸ`À7’ýŸÿüù/—ñ†ëAë.nãÕ‡UÆÄ“6!fsc9M†åýp«ªØ£Ã®¥w¯&)>1".ñxè'ò6×Kæ@^VžCíÄê‚ñ“vŠQ“WÇ‹]«Ïw÷>Þâ²ÕõuE«-ÁV6Æ‘WÃ÷Þ4®Û-åÆ1ggÈ­ìU߉Åx³ïúüó[>ôñ1nسöxX‹l gnÄ[èÖÊÿNÆëdùàsØc%—XŒ@^B´Ã¶£‹Y:ñ*R \Ö{˜:߉xþ„ß O‹Í±'¨+©±Öv`¦4×09 ñûŽe¯´Ú+aöñÛ·ûä=|;D·­½¦æWí®Óçn—i×Ä­ nGvf˜v9ʱÉôh+‰J®~Y%ï'”·èÖmÒv½mý‚Öªi²Të«÷ïyÜ˦’¿Þ_}M®ïò2&+ï°GÊ;Óqr¾Ì)¿•ñš¼e öþgmA ,¼ÄZÙN–SÿpË^eyðGD¯­X_Q,Mo‰‚Ä()Öœ¦DÃ:•KC rþõÀº€ÑYÕ_äÞ3pÜ¢øŽ»õ)›íNœbTˆÈøöb ¿ÏX™ºæ ºM™ef—Qòb‚9˜3£©, s´õ*<ºApc&Ö‡M‹ªÏ«”4wmwââ=‡¨ÁyÔ¯Ÿ‹Š ›EOï•%x"À—Edi÷¸©ÓÖ_°²¼m)M´Ë3‰cVS&OU˜•7ð‹eÐáL{Äþ“\xéjXæÛR’iµ•–þ~Á`éåÝÀa2èÇöáÍMh;wÅVmnøÑßž7ó;Ö7kÚzߦ¨E€}+¿ëàü[Ùaä'‡Þ| ¿ölÂX¶Z¼Õ”ÕÞ¬b«Ë}@ïÔþ4Q¡áìü¸•ià´zøú7ìáÒ®„suœ•¤°RI¼Ä:ó`ÐÌFWo>Þ_üüë^ò¬I >¡ìÄ™6â}ÕŽ÷B6GqDÆež¶bÉ«{íúüàŸ£xíØ«»þ­ƒøáµ‰m1Ùr)¯Qþ¾úòYí˜yïòm›W'}{|ݲ’°…c-LËóí>ŽÏEY„/h0+Sn¤n\KĶLÑ\ˆµ®C½uÐæÒµdÍýcò#}Í3ìUéÓ2|õk´ò—fÓ¸4U¹=,Ù!&‚¿nc¬kbV3ÈTû!…p'б€éfÛÔ-ôû;L‘~„ôÀ>1óEÂÎ!„6Ó:Gº$hS?FA' "/½ˆ‘‚g÷˜¶´ÔV‘.žÜNåÙ¥‡ ÜÁ×gIjÒ53 KÀüþu‘Àü&Çhú»çpæ#ÆJz÷¬òÝmþ ñ‡øpëç¿øHUÅ %,‹Ž³’+±·¢†ÛÇ:ØÆ&#ÉÔǾ9ú¶Øh.ÛzC².±Vš“¥\ûƒ[ xìL¸Å=ù™?O¾rƒÃÛǽmE8keå 6"<&ÿ„Û”tìë4McŽþZ]X™.œöžõ,ø;>OçsˆÝÄ Ÿ‡fšW±ß†µë]òó·» qÚdY—¸äeë¬ÖHÓaö‹_V¢«ºDÈÚ¦b!޼Áùzö¹<¹äqcrÌÌ4Ù¦‰fHÌÈÅïEl¸Neg˜)wϤº(¤U*Ø¥n0õ¨:záB†ˆý°dÑîÒm¾N³¬…žä‹réív`*Ãñv/pTBœ7 "ä{*®3$¯Ò×鱄|S+E½ÕKöä)ôz;¤iï‚`¿lsÚY»¿îáÉd]ô„ŠQ<4áôWÞîǯ\Ceyd×cöógÐ*ù_¯¶¬·…Ü~üº5TøyñgÐ*ù_¥ö”…g넱éabÐ*<÷õpCòpóÅLjõ² ÖKÓÎ#†stx±²6aä…b±ðAXèg%“&…ƒe¬õ®¿@ÛElBû´`vж¤wÜöqšI˜’uŒÊÉYc“«œL[ûhƒ©1ìþ‚>XvÃíìÅžu¶Å70ü˜°Âàü×!%KÓà>qÂ'OÚò{„AVinÏöiçø¼Jļß"£ü‚^ ¢K¾'¨Ñ‘v)ÒNûË_øé[U<Ü*yøõÏúã ®jOÛ6}íp ˆQDLh%‚ˆT3ĉÓ!ÎomêÊöIÚªc´å"”?·Hži¾–ª¢¬ÁFÛ@$ÏÜ §ÜäQçhI åO›ðC#ܪC36ìfß–ãú;_jøe„ð9&¼˜l£%Ûà¥d“’©eÔ'xä—(ªŒkf)f¸x]Þ¤¥ÜÃNW :‰P¦»@H“ƒ6ù$'Ëé Bz3!¬ÅÙðg„·æŽ KPQ6âÜF­my·ƒGÅÈÙ ûÆÞìÃtdÉÇtÓ„ •'3±oØüõÝýÊGl»]Ç^i÷a¥½DhÛƒ>åU}ªÏw×ß ¬^F5ã­êtëqÑLüÕò8,¬ð°2>Z¢ùïy×G«XzñkQ0lICO‡,×ÅPT Øk‹®Ó°§=¿.Ø«ý’||v¶¿ý5¯Ä†*q*ˆá›º.Ó"6‚R@{§þÛÔÏ,ÙáˆP@vz­¥­ª³üò·nÖuúfå#x<¬å•eMˆÀbÆ[iëÖòäÅö©KÞ&Gþ쮕ر$—rÞt?ˆ½Á›j3±Ø%›×„9œŸäñþƒ½¿°~µpšƒ<« ›ì%@Í»ÿdUÆð”õÆáñt·èÞg˜fˆÄæÝX?Hë^Í‘.IÎhÉ\„w¹žœQˆz)ªÉÌþôÑ€·(œˆ‚²Rm\áø‘u¤Eü”y -—Ѹù0BøÏºþGž7þ‚ [‘)óÍ€V ÃþåéH+?v¿¢Sù8BƒZ2X+ÓÉÒU:ÁÊ_4_›†°& Á¬<¹‘qäËòoõóê=/uÃ:jìÓˆKymÜüçóÂÔ_xs#ÿ)DªWôÚ„Ôõ¾Ìßî·k9ÁŽ`A.ˆs»ËÉnqïAö¬Åþ¢îíæ“¸¼¤ÿÄÁÉuY3}ƒ^ú¤äë<ä†-Ì*‚©ÇôY_îF®¾ÿTÖ›”ßû5ß‹»_ß¿ôy nï¹ÊÑÅš˜‡=EÀs`F\À±/JÖÇJ~º~/Ão1z|©¢C”uÏšu¸›2hœæwâ"?‡ÌBø ;!ÆÈ}ƒï‚_ËØï«=ªÁ7?]ß#²£L7yÙQ$jH‡.a§µV?Û;ÆÆrê7ÄpÞøn\7J¢¿Írú…mÅéPÊû¡@”÷ƒ ŒcO×T6™¸ÓЏ•èÍÝíO? ÒºÊ{ ý æ ÏŒlÉ-·jŠæxîZB$yÈ‘zÊÁX©Wë—Ælp^õIVˆPØ¢1ƽ%°aœËYÕ>¤ötå Ìþ¢¡1“ëÕ~}J*âÌÁžqâ©¶B¾…A\_¿åã8^ÏËòíåÛŒ­zX8['Þª@·bÙpû§ë¡Ù7sT½—ùqÓ7¡ý]ÚÎZ±E² ›Ð¶ƒ}œÆ ìOì­K¾ÕM±íÞ®Ôxò¼Î¸‚/ˆ":[÷Ç ³¼D*¢ŠAéPßFà{#âÇ™ôü¼KXÕá³nGVŽ¡%XÇ^ˆrk*ª,A+áÖ‚ÿõÈ_$¡ígÚtÇÚ™áßõå¬ ™QCxY$«°½4`Æ!ã]ï2hHÚ%ª||L[MDúIj>‘Ý÷M’6Å%Rö± _«x<øäŽö\lYˆ‰÷.OÛíã¨e4ê‚u ß‡0røúŸŠV8BÀÌ…_Á0Kžb5ìê2 ™)pÁ}Ü…±‰÷þËY ¹±–ºÉ Î|zLP“ºÏŠ¿®‰Ùaµ6å1èN&ܧG›ˆ'"¼‰´¾Ø–RCŸ‡„g±ƒ}üÁÔÄþû›Þa{ií`×ùyùëÏŽ0£ò×°­¬j¾hfÅCË/=²š°XŸÒcÙ«ŸÑÍ?OÅBý¬êÖ‚­|«ëºmxðâ°F(A¦Û2O;þëkç¯ò#ñowiQÖüæ×Àcãnü"ý¸õåÜZO?uÿûßǼÿ£Ê[ž~0¹½ïð‚"´`ehÁƒi„åž–ü°´jj£å4y&Ã^ŒH Tú(æg&}×ëÅkÆŸ¹F©Ø¡nÆYÒf l!SDF²@nLG¦&~4¢ùé‘|NÙp¬I­?÷tÜämÖÞ>æå!¬È;ÀóÄ™L/GSí,ø¸Í‹WÕÌd\ëáÆXYb}‰"1O·å±ë­mÞœUJжKéã³Ùö ­©r¯àÏ™ÈYTî,}ø2IA¸¯ÑÊDw/LQ¤˜zeL˜°Øèuá#>[nTÉ«‹Œ—H Á‹F>úÚbÑWØÝŠÙŒiyÈÏY!Îó†az3ý?ùôïe@H§Ö‘Dƒ¥XIf дš0Õ£T$²®cÉc±}dÿû‘µ¦üJÙ8ÄRô‰¸$—Y58qÒ%¹>±øðˆU\ôM‰›\UûæÿÞý0hþ‘ïŸ.äæ“Œ,¡ ¾ÊÕÈ™å.+dÆæ/ù–ªYÁz´‚¥ØÝÉ>ÀÚç°kžåÓ}ᨆM¦;À²®©ô™×˜ƒ/)ˆ"w-`Y£ûz6¤›1'»àˆìòÍ~¢JSx‚z˜rÊr·Ìþ’cdE‚o­pñÓ¸Q¾†HÜá®(èF±¤u\š=óOLHL"ªMr\ñlÓg*Ñ êÉqfˆ$S‹Å 2#ï£%­EaøCOÎÕ¬B‹´~aÀ*Ǧp·MËœªH{äpSyv¶ç¡­ž“VãE¤«IƬ?ÄO 2»ñ³˜êÏMýË%¯7—Hââ²J îÓ)Œõ˳Ž 0QÔÙbáŒíœN¸‹º0Öæq{gSgÚ)’I"`ãb÷Xìzb[cÀ;tŒÖ\ „u_ñ¿Âœéw øŒaB‰X/š`¨áêÈÉœ\©˜] (r€ƒ$‹ 2Mö¦<õýØða½ÍŠõ±½hAiâqbJ°¼4@dt þ¢0•ÉÃØcɗϯon‡§÷©é--ð¶€½RÆ^äüð2ë?ذ®[ÀÎ8óywˆk˜ÒK„i‡—rÚÆè8mñ"ô‰î®ñ-™þ«mA¹íЌەä­è[$AéNš)rºðëÑf‹æª0FúïŸäO4íÓ“ Úe± ©±5óy…ýI<ôü’ü7¤J³Bç‰# †åN8ñY›Í«|Ùõ Ýxa°^û/adʲ±»Ê ¤þ=?£DÌøT€ùLûÕÁ):?=íQÂÝbß&ÈÆx,%Ö3ïݱ‘Ñ6¯Èd翲5Üt‘·‡Ë×~(ñrk¸’×ã"VNÆ`g¢<ì¨æGÄ,TÙX{_gl5¥™Ï«©;ñÐóKòßõpª6ó$’f—ss­T¬§}ó.Y=¦-D’¹3ÔÉ; ¸D B+7Â<ä‘ x®ÓSEûSå6/¾·¿­¨WÙ#1Y0¤¬òû—h)³Ñ°_ˆot1ìôÇ*ÀŽºÍ¸óÊ ¼~¾4ß¿û¾‚QDŠN|VmàÞy9ÖåpÁIÊú‡ü°Á¿{u2·îBûÄq[¹ì ózŸbIñlÉÄç|äG{ñê>¦Õž/7ªÇõOùhWDÄ9ã#Í©ÉÁIÈpÕëÂ'op}·Ì¨HË¢ã·Ü *&#l>Á­KY…Šö ආÐlü{¹3)¹vn•YòÈ6¹Ð~¹Ü@ÝT¹<*ïBTÞn†ÏƒcŸÕÏU„Í_ƒ0/J™§\e›Àθ)üð°Ž6,^³>yÞ²7‰7ˆ Ux:¸¯™£›@q%9]° ÷ÊåÆ\ì{c²Q| ¯I“‹÷xy—iº¿ a.–iØ ÿK-t<„…|î¿ÞÞ]}ýz «)hC¸ìÓb ®œŠˆ³º`(”6¯Ýï%º“?/ºøðÈùü¿!‘S°EêÀãËÁÈPCÞ½®þùiL…±ª„§}î `©þ|X§Ó t1Gt6¹ ÑÐvÆ¿ÃÚ9‰²Štqævce.øÁwö꯴Óò'‰åïâªX«ãaAZyˆ öš›.ªØ×[+ÖÞ§´-x›D~Žv)m—I½q;F ïáb¤ôÏZË@éKÚEs÷y˜ó—ö— {UÃÕŸÿ”|\ýúvUïzöÏ·Ç#ls|{’’,ç«âxqª°r"tüÏý÷°§_lq¹D*ƒ­aWú<øtŽög {D¤Œ^9‹“£F.Å: Rò0 +›¯æ¢ÍkØßYð –x¡ΪŽ[‰µ]¸(Tü9üX_Þq{%þÙmëä—O×p1¹ë2ø9ÀhÊN¸[ŒCYþ0þ²7"³cÜ‘2ʪhºíÕ¶j‰›r`‹ h:þvÃÌIåHZù ³©$É¿íEéêþúËçqRY•d¨ÅɈ÷hZ¨´Ý} SdjÑz:Úã&%ä… ³²£)ø_Ž\àϱ/³ø}jâÐN”7Y蹫7E G´¦ Hi´{ ö ›¿Ö‚·~ÛV'ÑGýT¬Å5¼¥jpx±Š1aÔëÐv<&E×ï’+nÉ£P‰XÌÉÕ©H¾¾_}ÛËä‹ë&N$ËÌ>Fäï”7YÛ…M´¤î°ˆÕµtâ§@Ü ßƒa´LÞ&V§Á‹W¨Šq+]qËx©¯]Y.½ø¥*Tn%µJË×¾Øv¡÷â"œ8…Î vƒá½4¤Él Öÿïºy7Þ)n²sŒòÕý­Ô‡¤+Ïn‘éêx]i­Ñ}ßЧˆÆøzÛ<ªd!<º¥9ðö27¡î'Tdœˆœ)=H‰ Æ4 O™KœKp½ëOÜ:¦‘€“G”é©9Ô%NZÕ¼#èÓîéÅùñ [ÞÕkW©ÝuB“¼…DyŒ¬\„S€“U1/$¡+\pkj\O »õo!l7M¿‚t åÁ­ŠøS:u¹Óµnƒ–WPn¼¢4[áõ` Ñ·"ä²Ò@Xñûð n•÷“Q¢8ôO“¦bÝ’ÄnL»ñqZ¨‹.{ ^R“öÛǵØU­Ïà )VƒÒ&×`/ðs Çm·Ç–=¿OÜòçÒæ@[3ö£Ä¬$F؈BHý˜§eÿx¨+›FKƒ§lÕÞ.”[ÝI+š´¾oDò•ÞçÁ)Mµ·Kûöí^4ç…$õ†²¬¥Ü%Þ%K±¶Šºm®˜MDAœ:x§"ã]\r‹átåj:4ÝLnÕ†”‹+ªK¼K¨bmU÷éo‘…{Œk‰qP—W†ÖO‰,h2¨Ô%‚СضµlMèïŽÍ‹+½kªß¥lº#Þ&ù™$PǺd ›€lbä»( 1ÑBïÅ—º¢^øáÂ,ÙGŒ5]žbuœOóÐñˆ6OEL®.à.‘“±UÙý?n£r2蘺è”0R7‘‡‡dÚôZpŽö p×z "¢¶ cÉE¼O>o(©s¬_ú/êÝj‹ÞÏÀk"½.œ¢5€]©4×FÒäµ5±ÒP€.)`fðµ¦VÝö1´Öí0ÚZU¬F š”\žÜB 8‡b°Wúcª Ù/ÍùE´dÉs>©£½S"³’äÆK£7vV7h‘îæOSÑvÕ¡éÛ´‰é]™}8…ê»Jf÷ÙEu¶º®|Ê_Ó*SöÐtÚ9Å`vÅ«OÿÈ_¯ªLÙÏ@–•©s¸G¢7+WŸâr±o‹jñB.ðNA“µ]·‰y÷^»>?Äo5²ûqJ\¢ìR¹í¶ñ(4´é* ê& ­Z¾‰Ç4úmºcï䶬«¨åC»§°%Ê®RØ^ƒmÔ{GÞ<„Ü.4Ífìø ôÚ @Óí¶>KÔï#*­5¾Wò; í˜2duƒá+Aж¨$ÁƬv]¸dê«ÄaµìyjwüjïZ\À²Fc»¤vw-Mhr:~-?C]X0ûp Óvu«f'ÎìNÝ©hˆÂNEƒ’s*ìý†‡î¡ öžóÍc]Óæèu¬‹¾´´ øE>–°ÙîÖÝsÁ×ä, 6“áüúu¼&M˜I"L|K@›b× á]3ØJZ1µÓæFIQ•0¸ê6ŽAê NQ˜Ð%ÊT„CJ}ì/êÝņßyÏ>!¬öOÓt瑆‚ÕX]Ø$-ZTÓ«««!”¦÷¨áº×Ÿ¯~y+¶Ë™ Qúò.LnœÒ‘6}2Ô̹nËuš‚âf:á.“±&R~—%Wן¾‡>ˆ¿ÙîRºÂ¹ÆÑ\WÙ4å+?:ý‰_å0šuç‘I‡‘¤ á¿CVmvÙZrŠ”Ú¡h²Õ„½ûpò–ÉHeÔ3­F¸G›z¢U7|~u§"¦JS°]`iÅžYÙ¾Y§;’.éRÅítM?ÝC¨´–ɺإ‡¢|=û‹¶o¨š0‚j¾ý*/ö›ºÈž¥ O>)€…ÄáÙ¿ çF±ºƒD/79\„{^yÁz&Œ]Æ¢úëÖø<âÈ`=À©gud†78RtmG<'=G:5ÌÃñ|<¦Ïy¡6ÇæAðÏʬ‰ëë=8ôèöÚ+2}{óéæìU ÿaª@”,MŒì}%yÿ¸îÙ»øD‘3;4¦š°÷ýãÅ7þí9;ãù©©ÖÖ]© ’ªÜ¥k2Ö•=ÜN~ýtõyÜÕy›ÁåÜ»‚ÕÛo>ßþp.¡´ÞÄ ë•hèWpç.­¶RÕ¶xaÌXÓöõ+Ÿòƒ`ÞzžG}Œµ„ûÔFYæÖNäf´Â°ëÆ-@‡*n&"[çìƒøSD´Ž$kHÛºy%‘Ÿ]S1?Ò„/0±NÑFœŸÔÎÕDRÃ$Ôêú>>x ñm5î:Ë7GRŸÃæÄ!}™µØSˆra”£3×0* ú«hõ‚Ôox1YnŽ}STü2õ³* ¹´Æë©q¸¾Æ‘Ã`òó¶YÅÊV| uÂ'œÛœ]yDß; Ûmîq7¯]÷å¦}ß›#¿ªkwÖŽÝıîš]œJÅF*·×ô.дJ¾¬î?(Cá"¯xá‘«"hXUØUŸþªf.ô‘nïOã«[ìÿ7¯;þ?™‚$Ñ&.Ùš½þwÅx©NRdgžæ~8&ƒ.bcgP;=úb©óÕ ´WâbΚ«û“Õeº%µ5 Î!¬b‡Î ËÞå„»MÆC^)tðt¼*¶.)£g¦ÊÀ™©Ò>3uûùÛû¯®®ß'Ÿ¾Ã|NIœ™*Q3Så|fê{H8dU\f™8Di暺»›³ÏoÊt1Ó»„»„Mƺ¬OW?}]q¹fòàSgÉ7xÎÎÈ¡?’$0—Žþ¨“ÿö3ì6ƒqà9˜Ëî ì#ƺ.M3„&p|ø¶ÔL?^ìÍ:çwÂÆé^:B‰W`–‹DZœ9ØÇàÅ<‰Á-æ ?ДGÆmXÓ¾Uï°PW™òÐÅ=é’:Ô‘eéqqO]ß›):KÎt}›§‡uÊ {¢2ƒ ·B _M^r˜@å·#‹Ð+n{N©ùKS·}œVÍJ¬@hjLJ‰|xF‘ô:Öâ%Ò>É?^¯Ü}·|íó¼Ëyœè™”ì£ Ÿ4ŽÏ]¯ö £N¬c]2¥¥.îÛ}_Â:¢¼|ò;ˆ#êÂHšM µ9—tf Ô¹AÜŒ`È< œI:¢SKW5a=ÊÀ§V ϧ°Í7uMj4¤C°-¼ø˜Ærf²žÄZǺxKKqÓt´¿íSS³¿Îu0àë‡ê³ØLéveMš¥SiÜL+mÝøæÌõœ·_OHzL\Â4{MáêóÝýúNR«>ÝöBU¼_&·6‰¾‡Ä²ÞÒNŒ[øDæK•ã“ï!³OÛ}Þ“OúX|øÄ*ˆ¥^ñð»ö?Þ¦MG« ½2ÁÖ ý=¤‘“À>aÓ­ª.þí¹e±ÒÐI=Fê’$ õ£<‰ˆß Õös¨bÝkÖð{qì&ÏäíSCèí"˜ð‡ß!§Ž•$ó_(‘XFQåS/›«óh„)uúdv‰mõUžô•UI”Ççœ]?•)©%WpM`¥©y€-mÞÕÇèÔžºe¥2mŠQÃÆZ´S1Ò¥ˆÛéšÔÑX*ÎÀ$ò L|þ°ß‹ZÚ19ðèóíêïš| ¢’ï°™8ÒF ²çãëó£OmÛШ· †{«×u_¿ÞûküŠÓ ¼Ñ)Qà ì2˜êg½™}ïšØý}Uû´ÏŸÓWº2ÝW4×g…åwúîöʹ»=X'y Ü€÷«´N}›rªúM[d{&«>@¸‰óhîU•GhÖð^ÍÂZ¹<ùà¼ÛšÄožÒˆwò”¢ßÉÓlç¬&#%é–oÀsMoÝ …UuG½¬s‰µÊš,¹*y5'¼zÛcÛæLEËò Öã ÄŒÌèù§ž ‘(Ø·2ÿFø§¼ªOurýùË §œ•”–ª\Áz”ƒ¥zÜ/|ó.âo2îƒ.”†=5ëö¸|ÓN<ñO®NãEÕLÑçn¨È(ï>i‰Rº kË”ÉÃ×±5V³nŽ›²èûæçP+óÑÐGæ4Ä…æWÓâÂZ}Xé-¢ÿ6þ%;/|ƒÅæuŠX »|!z¸Z)– ªäª-XC#D„Ï{ælÀù&uJ Á5˜£oÒòƒ íU1_‚|2m‚'ƒ6)o{DP&æ…L„y éµÐ±.Êý-Ãë1ŒQœ¯ÈJ¼&’=o üÊÈy$àx]¤ÖÃŒG¨²vñÞ¿‹¾P4ösÒ>±O W÷ ä¨}ïö ä1ûrü> >y/¤ ëQa½¨Ö‹»ßøÒ31¬ók@õSc½àk¬C…ÉEN ­ÞzA×[/殣ä)#gw"h5Ø ½{ÁÖ`/¾,6#û¾I›"»D¡ÞžÂp#aruË/¸’~‹6ëw<†¿ êöbò›\8³Ahmá_fãrs!C.2‹ß‚%oâŽu‹·¶É\4ñBˆR'Ì¢ˆ#W7E·…¸ß¯0IØ×ŒÐXmÿa6ÿ­åk€òè¼5:ñ§€9ùìQÉug£îFêN ÂçÁ… ɽv¢xê”Ì Cƒ¨¼KÿX Ó`þ ¨ÿdè#SÖÏ0ÌDÃYi+5 áÚÌç"ëÇ…!p e%…_¨Ùu à¨ËP†º‡‹CÅ"Òuåœàói>ìÛ!‰í¬Õ…5%€’|oQGÕ†"·`à Í*€Ï´´C^¤F¹Ã¤åŒ²{®7¿­å‰Py“ 'a €'Y4M]—ÿCRw )¡$ã9†RÄ3¤Þ5ouà(x’”KÈp9fŒ#Ö°l)šÓߨÌfxµÁÏ­I·O”MáV†€!ù˜Ò˜8'ÇÃa¬$)[Gmœ¼T{ Ãß9á<ÆêäÄ 1dºm[4=†uÒ–(>ù–¥çn6Ͷo‰Õ¬Ù‰›¡ ¢zŠdy "x á–U]¹¬êBØeUB¯h"éM=fBþ—uEt›]®P”5` ù—×hÒ/¯d_^CHvMzˆã¨x@Qû †]Éþÿ1’¤æÇS@B¨žê"²”*P$Á>„á3!,ŽÅŠ3£WÕäÆÐäIA<óM$É|Ä0ßøèÕm_¤UZ¾þ‘·áSÝF¸•šjŒá%fU©´fh'+ië#Õgkm!$<3-¬äæö®¿Ur “¯É‡o7㢿zrXZ@ÈãMÖpr”$ÏäÁ%O³çònä¿\S®âX¤}üöíþÍꬲc§KÃ{U k±ÌÓ¨Šú:^OøK1Ì9ÛÌìŠù¾÷CÀL¬à{µºJ>mÞÔÏü’OÌÔûY&«,Ié®c]i.-¹‚[ñ¹ã)Ü<íq`¶[?æpV:f=Ô‹´A,×ð')¤²Õ…MÈ šñƒi2~Y%·=D”OËäêØ×2Œæ=n™~©¯ŸòŠ$JEº´p»ñ–0ñ×Ä*†üö… gµÒ ½p¾·OÇ.¹½þ5ù¿ÿô§?Ábì¢F^ß?¼çB9ŒkÌðÙ¾áBáßà3€ºÛb‰uenw˜Üuq†Œ ­- nIó]æý°PzE„«±g@·y%ö·6­º{]”v^õú|¹CÛM2GºÔ`vÃÅë Ge0¡]zü¡3âÕD…™°8pi 2q}Ä0K¬SUP‰3¨¢Ä›˜zPÑ&Πƒob‰uªqF›ˆWÑP%48þÍ@þ[Þ±ê¬ÍÓícºa=™þUšæ¼š‹Wu|ßâÀ¥.äðþÔÑÎï/ NEøÓûñ‚HgÜg@—Ó wþ]ºÝÖǪÇȸDè ™]:¬GE"³€|±l¼S¶0\'+ã ¨õq–ö)ÄâILémq‡“Õ»ëK¿øb­\ç@ÑbñáP5GŒCMx Ý.!¢Í‰ª²ü%€?˜ ª×#U¹AÐ÷K l¥ƒ}7á©6‡Zk4œf–Û}D]ÂH‹×OEÊ„Ëã._Ó¬¨HçÚmÓ’¶Ý:Ý’º†v±sÄì5‚ÅÙA‡,KQGÚ4·MÍjÏ×81š”p‹6!ZN2ÀQ”Ý J„¸åH#´ž}WnÈ»©nüšTª ¾±$°îÅ{ ðn ÐË@}E/®èC•½A|yMñ¥Ðà©L-‰SÏõ "%–°y‡=«c.œøåM}ö2…K Ê´ÚÂ;&-º5ñÙEȬYV™Õ Zs†–ƾnëu›ÿ~Ì ÷·ºýøj(±›¡ëŽyò¾‡}<‰|Ö‰pcI¯#ÃIñ–اuyñ«T0S(ÝIŠ–qzb d`a\Ĩ‚ßf…6W†–jøJï ªU^¨Ú>l§´22ÉÎ!²+×Û¼íŸò˜¾àÒ Bâ„Ñv Ó;A€=î¯Ð©èX£< 1G:hs»qbüÂ> q_a£›l‘³¤¸Kˆ°KjÔ¥ Ã$ èRLÌ%|È¥*.~ÉxâÝú'"ü:úR… bBŽÂD„ÁTQ˜ 2 «É#î9ÔJ4D¡–†9ÔEu¸ içùæHÌi>°ƒû$" ÐÅÌ4X¿¥ØÑRDƒº¨C™#œt=uMø ¨•Ìh¨VŸ|YwuÏÆz'˜®<°1Ÿ¯Ž¨›—õ–p"NÇÙˆJ+Q;ܯXqHÇY_iõ‚¨'ÆjâK“W2há›/÷¿úö”×mVÁØúŽšñVQºµš_ä#Z}=:¦UÚF¸W„³úõ<È»P¿ÂN”Vnø_­>z5)´iv(Âkñ%Ö¦E±Äòiž3:¡ ìeÄLQ” Ë»ÞçéØŸÕ…›ž À‘|Ì ×ò,±Z`‰ãþ/z*!ìaÄMQ”2Â-s¤› ³C3éÓ}AG{9qc±â7 ii`7)aŠ£DÞlÆ{ˆ Ö(n%!ûéæÃìpLê4Ûî¨å[G{ [«C q[æ“HláÀÍm2ÇÑÛ÷ÄN‰ï!7X£¸Ui“p3¸›Ù`Œ"Vo~c&DZØMJ˜â(5T: ŽJƒ¢ÑPËQƒ+@ ®äˆA$ä'µ}YzpSìQ å}„Dv:ÚÍLÚ¢XuäîA‡ìtÈî’!TaL`òáa§"<{2»ÉÉ›wÕ:Ýn! ]YtýšðÂæÁÊln/hŸnÇYZX=˲·ü‚¦<Æ`|áŽ1s©%DˆIŶÍÓ>›åeÞkB*øØºîdqàR¢š›´0Åî5áv¸ètŠÛN„Y,9dÇÈ19BÈÒ`yÜþBÚ£e¾ve½P§âý¢¸µ£Ø IcéÊ8È/h[»ž°`»€:dHC™ºª„?OÄ«µ¾¨(ã?¿3aÔQ &ÌÇ\ „ìæÈÒ(íh2g`—¬Á]–â‚#p"ûC§dáÁ#g²we S†X)Ùã¶"Ä÷b wˆPŒÑ¹˜ AˆéØRRs?údHKã–Ì2€yÓÑ t%ÂQ®)Ì'i—nà*~›,EŽï¢Z;d³ næ—Pìͺ«êšt^ÖâÀ!B3w¨»‹Á!£9ýÛÔ‘O÷Ç´ÍHjì~\¢ (ô믂/$˜(˜6‰éw(C=£“ê Ìä¨å'I'UÎB¥'Z¥Î/º™é1+úuþ²ÍÒN§‡\1vªŽIFŒ_dÝ5;Š*çV8)SBå¡`=\ÀÒχ¿ŒÔI[ÜÁJ1vTÐ`u›Ø]vëÍs}î§Æ~úÝÅæ9€~ È‘@”ƒ#Œ$†öÃÈ!³ÍwÅ yf wIšŒýµˆ0FÎÀ¨4ä×±jt78UÈÓ(Ò.*ÔÙvö3m]’æ–œCXyóDvb0ö&mÈÒqˆíX`U±žçø„ÄÆäÁÅK³Gwv1ÂÂúÕYØÜƒOØhï¹"°¿{¤¢Sº=Å(`Ÿ0 Ë@ Dô¤!îsï]YöG:^˜aÝD­£‰-ïø_"8‹ †Yƒv¤¥íïâ®X»øs³ næ—зGÚ;ª¤¹™Ÿ)@‘ŽsÃa^)0ö>ñX¯}º)óñ*»‡ÈQ¸õ·¾ÖyeJêP*8—€2Ý£8TDŠbìwâaÅÚõfOzÁ—p£ÉØÖI“%UöÕ$à‚”DtCínpÊÝPE¾:üÌ´Õ¬ˆÊ5ƒ„H…T9BP ÓÕuÝlÒíSÌÖ<„7„ä%)|^ ÷ûM?¡+ OfNþ-†’ê‘âÜ™ÈÜ6LJ¬’0!:ð2àz´¼_·y™¾ÆÈ1øAÈRQHyrÁ!2‹CÄ<œÕ Fâˆqu>qÅ=9'1qMnH‹Ò~1ïF1 |Q/7Q¤¸Ÿ#ˆõ9-ï&œ‹ ³òñÁÊÃTH‚C(ML×¶qVM±”‚7Ï‘>2h"ÄËÞ4’æXz´c`F¸—7öëÊJîi0n4Où¨¯>ýz?£.‰3Ý„vª9ËIu¡)ŒÔTÀ>YÞ#ë2_H§ ÅÐÊþë–B:»%ôÑ‹ïVã¾.¡3¼8ÀnQüJù—hYne*`yiÂ_ô°¿¶Ò(E^âTþ5^å_CUÚ®†˜ß aS8ËN¤Râ&´G_Ð%H‘8”ë"P:Ô•gÍ:Ò,âê–e ¦ü‰é‡uø>˜jÒ ‹è¡«¯‰¿Æo#ÚàÝ·ÆX¡9ÄR‰â޲?;v ÊÅwìÖ ,E)á?ÖˆkúdoøVÍ„í篖™ðy;R^ÌÐÎÜlgÑÕ,L<ÄOYÑÂÙEâÁv#ÜF]7–Üác—4y•AÙ×+¯ícZíå¥i¥yø%Ò:’ìS4® W¦¬\=Ãm^Ç&KáÞV£å/EÇwöÀ‹ëGüâ/hgëQÞé†;LP\‡_ü‘•ÎøÔŽüe¥Ö%}~€…ë̦[e`ˆGXw„ÁŸŠ²J©»©ŽàøG~_Vèú@p ¶1°KGÌ 4ᤙ%Ö#Ä6ÌãiOÛqÇ´¡Ýê$¹ õS†½Ye4ߪòå)sxú÷n{|hž2Ìär0ñütè¯:P‹ŒÄ•Õc±ëqè¾s©·Ê12 b¢Ã›÷/ù®ÙêÓî‰W…MM%€ýÚÈóÒEÂSQxV¡Fš!'Å>@g“USšÊc‚]òüXlyŒÝ‚Ç»gí\ÃêRÖÀ—5ô³:û̱ή¨Nì§êö5TÖtŠâz&þʯÕÇÖºRªÿRÓÖüd1-ùu´;¤-'}/?§JY›Ü sYÔoON¾É(Aa7ÎÙ±n1Ó=sï_ššµ¸¬“*4§3Y<Ú—íE`ØžÛ»ßKl•8GÌkÆûñ¹ÿ'§awÄz]Ìo²ºœdóÂ>ð«&6¬ýÉóŠ%'ô$ß²2³oÓ‰”¶úç§„ïV ˜m"åpⲨn² :Ír)WQ0Ü´&›ÓthPkëžq3¯ü¥T6yÀIcönmÌ€½(¼£,Å jƒ”ÙK¤²ÉN³’¯‚¸ n~â/Ú”S†\ ÓUíêXa“ ¤2W㥬ýkµ‹ñÒ Ä*PT‰¡L$ªLN˜x]àD`(‰Ý² vmÃ8›7:ë`— CpOÖ¾¬/Ÿ‡ü°a©ô°‡ é§~‚¹ßF8ñ Ë®˜RY?W{©ü>pÚ8B¼Š<'¡IßÕ;SÆ%Î(TfVÍ~ý¸I#¥iNpÚdȳ¡ØBÞ ±Aˆìë4‘ÆŽM¹^Eôëè8m6ò‚è“Cƒ¶¨W’ô”¥¼z8LT[œºXUФ,@ˆº³M«^¼d§ú ÎB'–1rBÏ^,ÃÞ¸æ¸)axrVë ©xÂMÅTÌûýh®cDÖ°Ü~8}1N.)2àA‘‡eW·}̱Ոæ'B@ÜU¿° “WËTëµ(7HI¤ôÁ~ä=0^êR¤$Õ+TØG‹ëuõZ[f¨õ™À&e£žÜ¾ÁØB«¬£•M.ÒÀPÛ¼k09[ß¹;nºm[4g¨ ®š ²~T!Azû e¿œÂ~\ Y¼…c%j4Î]“nÏ¢Mu ÃÜèd§O{Ã(=¬™:ÀæuS9k“¹È«Pµˆ¦ü4[òÆ?ÞQY; ÷Š…+f Ãìƒ^«C|jèpu@ _Âjæ¶[އyyºrmýò2§Ù/&ñäSß Ö°.žW™¼Ž, Œô´Hai~iÃÃò©°uÉ,Å»#ÊÚ€A§ Z—háû²Þ¤åú”¶U#”[\ù¥Ï¢Xå=×ÞÁ¿¬„MZ…y2šãÅø2PèÒ%Î_¦†âi X!×ÔÍ—4eàÂab·„͆!’_‡W7&k—^r'Œ£0‹çg*Ì”ˆÐ/~± F,8B+Š¡’x ®¶Ör›,Ué ®yM 3Sªý `†+‹¯Ö§ULΙ*0^¾mDBÌ}øµc9žKy›n6EøÛ0êöó†ñ«|êû±áÃzSðmXèôôy˜§æ`v9·W×íų»&òY‡¦Ÿ¿ˆ™ìþ3~À¨`xˆ— [ÇqH!ÅâÊ/iT¥}¤Évy4ÂK,ëúéØP ¤W€˜«Êû¶ÈY§ýw¯‘D½J®îþyÿþ³šÔ°Šûè)G"çÈžð|qg!'ÄNØ ª„±óÖÈž?  ^³Öå5†ºêA›«Ô¡ ƒaP‹,ü±¼ê|Є×ÓÁ—pù< Ô{±»D~N‡7E\“M}5¸y„ï­U/‚/OAN¸Ÿô8Ñ0 x÷MùݪuYÀêê7~ *ÈúRœä ~`›H[Êû!~,Va4«¦TW…#»¾ 9m-ˆK“Kf"z¢UWÀ<¤ü딊«¿¬’«û[½ÐÍÊ •&a“ò]ñÔÖߊ§Q‡OCØ6_#ÌÊŸ²½7X¶×¯Ù/zýî#é#8üp¼jMµáø×~ü¾ß~‘j¾M÷ÝÓkVœrlêiæóÄ[‰‡ž_’ÿ®·iÓ[|sçÆÏSQZ]ά‡)øE±ùö ÇÜüÐÅ`U+ÃÍ©'Ïöt1 اLU"„K_wð‡Ìö‘u¬êý+’>vdaÆyHs¾ÿä<=÷$÷üWª:£'®ö%.˜.ˤ/< JߺA×I“í╪­›¨8NLÁt0¾æ6ÂÉÂŒ.G#ž ŸØ_ |‘WÛöµéólšX59lê~L²×*=Û´,_ù8¾»vð»„ÀÖÒs˜Ò(Gµû©åg¾˜ïÔë<©Í] _”ÂJJ¹eò&Sòò#n¬¢ïƒO¿Âs*€Ø»9A–CS¼ÌõNäµ…ÓéÇÕ°…_µžÿþÌý3§mºÞáC(›Pód6—†'Ôr!sW´ù3+Ürªš—î=ëá>§¯‰ø‹áü”á†Mç æ ÍŒæ¬á«8§´i(Œœƒ2Xisà§ë²>fÉUÑ&§«¦†­+:ãOæÐr¯³ú2*+Ÿ?[ñf•åª+ÂbÕ·›fµ Ó|Ô$àdâÏí¡Üx„Î@ªBñÅéš*»öCEÅä¡Ñ Z’i[ûEk “!Ûš}çÏÞfy+?ŽJÞ*ÙÕe0ûãB{4[urA|ÃGÁ{Ö#«xK.¬qäÙ0Š‰Í©ìu¸‡¾4Öbs܉cÝ2é‹§üÕ—øüŸ5ß=B|Ïml*öÃéºS‘ñFe~ÈCŠ“ÛzX¿Yt¥yUWtã%‚° Y¨%U­ãkÿ¯” 'F÷uû•·F'nÉ:dYkrûtŸH@‘waº"rÑä©ÊX…ŸMS¤œ%†J$”õnÏ÷Q*ï¹óÑœs'>¾eMQ×׌>ÿ”÷ÉûÕ¯…˜ÆÄÙQ’·´f-ù•Yxð¨šìÕ,¹aMj[lŽ0Xb²øéd5n}xsóuõ4ZCý¿jXiÌÇSáAb£jƒœ`WøIóo<¦‘$Ó †©š#‹ýcr¥JÞ|¼:[ÄÔfK8}ŽºlŒ. O?‰^¢‡$ûAò┈2õbòåÔ¥U${Å._ cå’Ôs .µƒ®½9­®>ÿ° ;¥^L­³¼)ë×u}Ú­‡xÔÄðzô¤Ï“ꆟ<È”ºK·E•‹9Ef<†kàiÈêÔ¢fÅXŸyÓ¦íë%%eΛ*1)‚Ns§„EÕ`vW¸4Pîsãw¿À[q-@’`±êÓžI³î-L¶Äj‡'Ä‹B†zyzf£¤Oƒâ˜l6{qKa|™«Uy7#¶ U-0L›£Õ¢ˆàoöÔzF•SŸ?¿D#Ú¡xÄ mÖÿü×w‰Œ@Mƒsi§hÑ*0¦ïnö‚‡ï¿O˜ÈÊcáËÕÑÓ¢ûºÓÏÁT;«ca©á²èæ+~†3Q%&L•òÇÃ`*¦°)Ç鞺dD¡se£¹Òןû%{=µ×A®>ÀÉ—‡+W€Šµ*8ö¢ÇG[eŠÂ(…ñ‰›Ï«1â,~^f#ĺQT…aôâQ¤c”·°Ófo¾®˜Î·aÞfŠ{ÿÄ›(ëÇ@µ1ŽÉ Vë¬ÂéÔçû(lå-~°z­ºˆFû‘ d5*èæÖ—¡Òb%…HQ:Ñlà}xû8f“\õVó¯Ö߽ͣ…¿¦ â|óxŸ¨RÈ(òu›û@Êó½l‘âNÝ:h´î‘$ ÇüS1¥-®)Q&‡Ç¹!~O.Z\ |†Áêɯs†3Ï›‡U2Zé\Eh°½é(Hf!·_€ã÷oºDÍ"[ù¼bYZWÖñ$ˆŒymŽBDšßÅ3çä9ôK›…Z_Ku¥æ´âoá¤õ«N\†—{ ^ub™gÃcbv ×l˜ÑÄ R| B»—åêÚp/‹žu« úSüN¤°M˜ÒG‘Põ6V‡â™A€P3HmФ^yÇLrû…OÖ¶u&¬[lºXiš¤8QåÝ·Å 2.Ò™—ÃÝ2ñØÀ¥Jª1RîÜRñSE‹/yUØ,«ý(áù‰—7êÄÊ î9ËíÞ0=ô–ÑæÓDï®ù4 Ô&!3Eù ¤JÄŒÉÂGÃh>o{ÇŒÉÿÇÝ».Émc颯Âýç„[—¶åñœŽ˜˜ˆr•e×tU)­”åÞûO“Df²‹IR™¥ò¯yšy°y’ƒ… ‰53'¢Ûª$±>â[¸ kÁu¶_%¯Dx!j¯Í½[“_v@0!5ÝJ9d5™'yŒñŽ´÷GGê0ó  ÍìȾ‡¤Ñ5$…êùh6àq#Dñ{Œ°@©O¿d[&lé,ÓØ¾‘}æØ’BÞíËÒÏHpfžâPhʘ RDeÅbÝÀ½Ë~¡7¨Ù¶”=ÊSbLxfÇz=º~{H“@Ƥ5»H«MØ„"÷¤:‚1!Ú &@0¯û}ûSÔ§/>pTOãA;éáT‘:&ãi›ÀýCuÔ?‡ŒsI^ÈO%:(#µ(‚|¶K½ì>ß¿í,h‚-nÊó.nødc—¢ƒ_O6‡hDW'/W– ê`22‚×5í1Ì*YP‡D7\¿@¿’ýÉkùwÓxæ Q¤§Í©#%u„+”dîÿ ;«À{ü›„³WÀ¬åu(útFé_ð#º½ÐT1C +'ߊN?å]¸Cc’sÇñA)z³³#6Ñ¿Ñøí__m«ª¹íO¡<Ë ÕvqŒ¡Œò¬òxXÐöÏämx*$ÞÁægLæôŽ7ÔSn}k¥ç㇀_ù¸†G~û­"`ÔŒGÕrÿñ™n2þþûíAïþIJ+™éEâÜ\æ°¸·"׃›Ó`’%IŽr»eO¢kúÄŠŽã,kíÔy]¢;6ûbâÛä™ù‹ÒéN:ó×q F‚÷^ïÛ58ä­Úd0êÜ™x€¢×!™ÐWä, _¸AÐ5uyð® ØÕ54`¦8e£ÍlQÏVW=ÌYŸž+T7§ÅV‘3M‘ «rÒ=!,. áèW5 ´wÆŠÔÇg ˪Ë>Ä%yºZOòvCÞà¶¢Çyþ¬p‚3ïÖ>ä„„º?g³è MŽt3ç cѯ@é¡8—“Á¾kœ$e[4]"‡²ÎËã¾-ÒÜÒ¥E2R‡,§ ºÝýDúXv‰]!gÏ‹Ùo"¸Ý?£!}èõ(4s6Ls.ü–¼âÔ_Á¶7»©.MùŠ ¯yx'ë㢩üg¼CƒÂéD&繟tÞœf7ð1ßÖ5À0¤87 LГ› -¹ã<ÞÂìÆ‚9™*NÁ®Â»Zê€ *bÓ˰ÎÍ!OÝ‹O|Ñ·Žjp,øÎ.¹B²…üóñÜøYïÌa™°H*çé0–oè™#{n„Èš®«×·n3ro“^=Š)åeƒ^‰•›ÉNââ´}è©ܸª¿_ºb'I••NVi4Äj„O<*23β-HX9˜ÐQ–Äæ]:Ó• ½[%ŸQô—=í¦@ÐÝgI€ZdB\3ß'ãbØž¨wq,hZm…¹“ °ÚÔCYPÕ¬7!ækjp¬fÁ²8{M‘$y>$5²Í¦D$ÿÛ‡ûÍpдïsꬼxñLˆ@r¹8¶_ß~ø,P¶l±AL˜à|êZ°¼I#Žày¿¹½³cæÝS`Ûs!1²Ì Äêr†qØ»ÄÆ0Ü$¡Énž¦‘½Ž+.Jz öQß‚¡ÓëîW [dIˆÒÂÑí„fJ—¤ OØ¿t(ÆtçK7 Ù¦©â*³fÇÄféÐìÿJ^üMÞ³B¶(ÿøóöStµ¹5Ê&ÝUÝÕ¥§[ç ˜ùR Mù‹`;¿ÎmÑ+}Ç£ÞéQŒÎ\ÞÈÏo9 dÌR3 ÃŽ†Œö¯¡#f½ÐT …ا·>ä]E‡(ÆgªhH‚!ê¨ȘædíHZ×Ñ0‘R\â£ÌEE¡O÷€(çìXÃöÖåìzÿŒ°@¦OÏJ‡ý¦ÞLþLP}jÌiÖv {(Ÿo¶FlÊý?H’]À-ˆ#Æ<#E‚ïÁŸX Ö,¶¢m@êÉE fFJ Ùç‡qëïâÒÙÿľÏ¬E~{¶äëÑû;8½_rx¿.W_šV UG ¼õuor^óÆ´ôÛC™Fšg£‘›±Äåá–!­µ)žú%Z9 dÃt®v†ä‚¢5;amð–{ÃWÁÕà·t¼³9jb¿+VCùy6]jã¼yÔ§ørκº£:ʆøöðÊ8Ï~ÓÖ1ÂrÎu•0.“¬;ßï¹`j€â2« _rçdÆE_¦¬n,e‘Á,Þ¯fÏ€-ÑЉòI]ÓÖEÔ½Š^<\]½ìBö97Œ>çÕh¦±,IwÍiÎÔW™S,¥5Ïü7Ú¿²P(i¨“p,+p–²YBtɺɂ¹Ó‰ Ýf¬cîfħäf æÉé)×» îî)ŸÐ0)|zgxw³)?ÞÓXKÄ5’£m AW¤r#ˆ› ­á鿍†jÒÁ`,Ñ1;’ fp“%Þ4‡@†D;±!Ué3ɳ×(2_ t¶˜‘ÄìÚ ˆ èœAÌbF!«’¦ì|ú„³E/pTûg kýp‹%Î ¸Ãná·äôu9«Jr–»ë.w°— _Êã ïªã§²NwyY>¶•ù‡uÒC-ñ´o”´b‹¦ÎÐ…ßü»»Úl£î= ðÃ6÷Þ,p¨0úŠÌkŦr͉ ÜïXÐr厯¸ªÙÉÇ>ÆdµÎ­æ6N¨ùU¾À‚ü»‹Û4ë.U²}kZó8S<'¤(ñß1»¹vŽQ”œââØÇrèBK¥(ºy~aÓ˜¬Õ¢}V|™Z·P's{êß—>f s‡6ØW"äð+6˜Ó€#ÏŸqjJp`1™Ÿç$÷œH–·FjðßËÞ)ÞpHPݰ„–‡X s|†"llFꩦˆ¤tXì'ˆxÝ¿##ÞrGK¿[ž«fï)ÂIUV+C YÞ±.®OIïHÅ|*PÍ.×ÖǸàΘL¨Ö(%#Ä-q"8Ÿ¥Õ%VVª]Iu¯»ý¯þO]P‚!•h.m«œÇÌt¢6 3Gq,4^€¨›©è†¤‹n”tlZPæí™´Éj “IÑY64¡X’bÒ§ÐŒà!ÜÄ'c@7£a¦ž,û&ÝbzJª]ŽÈÈèFa(>K£K,OÆDµÛ2§7¿^o¢;Hd”}ûȪ³â³ÙW#©nOåóÈ.®s¯·<ÎÉÐ$eæs[£ÜegØ™w&'‹/’£‰å²¹Ý~xûù×øÿßÉT©-Xä$yVeTJÞÕ(™¨‘¡ø,‘.ñ\%{ØF,‘iöÿ´ Þ8#¼”õ?EˆÆéŒÿ_’Ä(Û4ôA?ˆ9å^‹1KB•PÂmógtXFj0'Ä­ÑyO NYåClË€àPRWh<ø;£ï“ZSõægEJ¶3x $ˆƒû 4•—EMäœg®“0Ì$¡É½OMø&fN‘Ýhrç&É‚ÔÚ)܈Mɽó™•XS fGÖ“Ž“¶‘ü<.u¿ž§¿ÈL úés;87wwdx=@¯òæáçOQÔV02áƒÀþ‚¬ºvä‹€6‹s¬TmªÎȼ ~gl¡. Œ¦…e¡/æt]›U†éN”bmy`2G`(ÂVã9‚`:&¿"346‰fó7Öp26©~øô6ÀÈ–fð)e2bûÑU©òäÝòœ4è¶þûÏl£vßfyñTF$„×e'Šð|æ¹çÞ0ä;e.€iQ‰z÷ž'µÉ½óF–Á„G¿%²Ý1„ퟳ馛ܲ.‹Îæ™&d.AéŸX ŒÊV’Ýó-ÐS÷[ ŸÚµ iu`À®œèÉ’sìh:eˆdOhsýpŸç7F™nÙWÇ\K¢óÙ†„}¨v¨8¤[" Ù/,-Á ¥Ñ¾,vU]~uÿF⳺Īk=ú¤³‰†£Bä×OŸ6ùÏ2¼ãö¡é æ8éĆ¶Ð½DŸ„Ì”oo·†ŸÐ>®ü6Ì&a–È©BCj„CDRDRlEÊêJß"„™îB_oÊ<þ <®$ª›™»$šœìÉ#›°‹d¸À¸Â >¦–<•9òá!É yœe`’sX+¸÷c#ñÙ|w‰ ú±ÛÄ®òÜ‘2‘„;=yYí–ƒ%jçÙŸˆíŹQÓaÌóS$øˆ#ža¾¥)mùmç.uÈyɉêÈê:sœzÄçXô‰ù CCÙ´$ió¸ŽrÞ–›³CJ~ˆX1çÒ\&ï-Ûâh'¯kt@5¢éjt¤pè«X8¨âL:"”îÒ♺(C0§99¯¶™¼5Oeýѧ¬ÊR+&ùÇn]]/7›[|ägjpxGg¢WB‚“YØìÎŒíÖ3´ß˜\vñ”\¸LãÌqÓHM¬qv¦+&.e4#%2û¬Ä®¼$Ù.RñuŽšŸn?l£¶¦?]oÞÞn” o³êc7ƒ Ip6÷$™:ŸžTy[Ønï òYÞÎÚ@x.¿")Íóo-‚½Èš›xDÝKwjø:Í1ûªô|þÅŠPÙM6*0JŠÝä~cÅi ©v=ÝPDgÙ Î&.GmØOÂÈí<Œzß‘¡Ç±†â³Yï³’FB'ÄÓW`‹Þј½Ö¥d¤&ŸOXÂ,9=ó®U—ì¾_ó$´Š‘ >*02pC¢dÊÍjm$:KdÊzí³\ËŸ_FàÙ´(é9Å‹Š Û¤Å“áð% h°l¸¸èæIIéçMÌi4-½rÈŒ2° #/2æ<ë-Ñ]õíDâÀÒQ sÎ’¬t`ÏÁÊf×ežÔ@FØñÂ3E#³Ü4Úl?Štü‚UAz„į>b[¦UPbÌÔ **„m™y“²ãÓUÉW]…„™<;Ó×Í^ø9fÎæSdc„yzRúù¢âÛŸPK{~[*m¸yÑ2g4ÚÀe.„ä̳„µ¤TŸÍñÃ0e&èÊok®NR^)l¶[~ÎvmrMCÎWï÷YsþBæ0àZÙ‰›cŽÓ@Bæò‘¾ºÿ-b¯Œ8¤x—Än–ªìlžYJ9¯×½ïž«¶9‘îO±ãÉ.rG/®¯6/™ÑãGf3ƒðcSVÐ ÑSü<ïÇc˜ÓÚƒem̲VY~.Ú¦8~ ÊÑÚßÌÀ[ÅÇ §L púµö!52pì;ÑY:4agC «þºG~¹àhðá3ª $ ù¦IYÀ_‚ù6¼:ƒ~º8§®~å³kñÚ„W¹/g‡áY^<)+‘ç"9ÕeAw~‡ìš§R1‹`»&¹¼¥Öñ¨A–œ'Ó6Ýœ]¹ðI]%M`U»)¾—›Ë&IE3ù }… •®JN"‚,?K †½ŒÅžè(lY»S—2…‘++eòtŽÕÜê fÉ*J #ñ†¹y³Ï?jŽ9*¥½ÃfªÝ6VÇò“1˲¬vû6yD®ôFó¼úäJd#x±çæùvϰaNå,v±YgDsl’S”´5yhëmgc6÷ª„´Ç/mˆÂÅ0ˆÉ¬§IZÇú¢ ÏràI•vÌŸa;Û«d‚³YÕ„“c~Œd·ÉÎÈùÀ@x.Û"©˜"õûšÂé†Ha’é2ÆnuB–œÍ.¤“Žï>Ñßâj\Qò+Ð/Οç}÷°óöÕM·ÑÛâOGëYrŽMÇnÚÂ_¸³í®\Á€פd.¨ ÈñGG?5)%jó-ü‚:±Ì’’’¢¼Š¼+»}&ûFOqÖ€1! 'DCNL&@æØ E˜Ùe NhØMuñ.ýÁ?Ô3R1ù="©ØL7+ZÒÝšq}Deáz|3”žgÇÓvm NÈã#™ÌþA^½.‹×wWÑ‹?Ê»—Ѿ.ã4#2¹¶ð„öU–œÝîe „gyð¤òŽŽß`´!]Ì¥D"F›¼à J_ÏnVf½Ü’Ji3¿¿‹ÄQ,¬•Lÿ„M¤¯¦î$äÔCoÿ—¾›ÿ ûg'V»ƒ3ÂC±4o”¤ÒÉïÛ”#òÏïtŸ:bYŽX2l”õ4#³¿ ªŸí¬¹ @橨"2¥”QjJ]rêºÀŒšKd•%„yRRz‹Z,˜äoù8€+ÚÙ\Ø]^|xSW9Ëó÷çÔSGÀôÎ ö)‡ ˜y*C¡nÕ §M‘9]Ýy ’ š3ó©ü#6æUŸ&÷Õ¸ª­ê½9 ü›f]®ï¬_ÔT{s½“Oí£wY~9ó4µƒˆ&5ã!…zsd2F˜ç"—“üßñüËoŸfëÃ\TÎù¯ ó]-jŸ¤1Ì.J³¸y®œ•>_ȺH-`s>óé@Ê’šñ°3sŸ–Ïoà®ÎmލÌo ef˜wœÔ¹Î6áùܳ¤‹u‡%3Ì:ÛrÍ»"½yn„º˜ûÙ*õû :W¹µ¨eŒy&Š„Ñø%$ìHyò±¡2Y*oÓö\9Ѱ);/?Od2ެ¶^]G]ŠÁÎu >ÌY€Gìª~@éa€h­!?­†.…»ލ·,ÊS5ØY ³x‹*ÐKwïù«èV¼²¡É£Õ"9fDq(Û¤}àríÏ)Ü``>Ó·,Ž5gV‹òd×× wÊÓ`‹Œ5¢N„x77b F‰n⺉^\oo?|| '¹v›o[Àö 4‰·w×Ñ?Ê=¶Ó‘ˆl4!wC3Ô’*«kù¯noT¿9­žWÀ¼LÓò‰N€˜ÂÎ*fd ®®Iu$EMœå~íeœŠqׯœ oº§y Ò.|å˾â†oÞw¯ƒ1úb§Eó ŠM.#‡“€Ñ‚? BΔíñ é½úU´èÇ`¬WFÐdÉ"|q6§ºl'w¾5?¢Žè²Y@Ì2W:âMDßÈÑcœ Â)Œ{4ž¥%Òv{!äAß·H÷àùí £Y@ÜÉŒ”;<ûÒ¢VnšÖ\»åêw{Ò.—íð fµ œY5ó¨ˆ!©ú’5°H"*¢:æ7.£Û=}‰m4sO[îÕa ÆH#ÐÂÌ…Ù@ KùèóÝÕà 6Þ¼ÏtMÉŠ¿,ÉkæûÑÿÓOö¨ ©‹;é‘ü,>5»¼„j()9fι·Š+š¸‹^ä\LÎûïcáynÒþúpÆŠ…¬Ç0ÎŽÅ«¨-Ø_Ì9;ò.áCŸãÜðìë,qã¬A˜%.§×ÕJºJâÕ’§š"Èì¸ãÚšhK¦ÝÅc¾ 1m.¶Äž§bÃW@Uô"ü' ³X³ ÑK2¯áM''¦ úé¿Ôé =­µ1˜‹v~"|š‚· C%hÆ&A*ÌÉÐo‡™´©‰¾ N¸û>ѳÅWQÆN¡‡Krz̸TýÇß9(³RÈ4öBLñ²¸âü$ S´‚ ii[?®S2ûª@WlG%šLÝ¡ŠÏªCu†ÒWønä@í`Å1‹y+”ÀŽxìÏÖ¨!ÇÅþÒ¸Òvî‹æ „IZÃôlaQF›–Ñ-c¾8îw=øšš]Y¡³mzÎ[â )nv /®sÃâ‚Ç‹h.þá Ÿ¹é$Æ¢6sT^ŽlÛ€ORé[S¾&ܳ8‹l4fÛ²SjaŽÃ_OG=í2†¿ûË[Øù¢^}›r—f‰ñªxFv@„¤|3LI3ÿ¡_À4 ŸÊ'áÆn¬WÌ'ÈÑU/`Á±0éxÿá]¾™¡v¬À;O–ZÔº 9%)¥óYü€Â oɸOû’×±Wu SAT×%u†5i|l“…+\;Øç¤É¸1S#!wf†]ÊÉy> }nZ'…iä4 “Svÿéwî! êBž§½þðtŽá?»$Ï ²eUÐäþÃ(IQќԺº-úúYPF¶$MÅÝq/å“ÉÚhV#7‘k‘ª ¿ÛÅJ%Y¥„Ý>¢Yÿùþ:ÚÂÂç=[½•EÔüÌž€$6H$÷Ó“¹b¤q‘=Î…‰ûÜy©©¬÷qvÅÝ"ö„vYt=£0*³TÜ’â5¿^f£!8#4Õ‰’‹¾œtsÐo¿}ŽÉ7;ïKÞ8õE9 +9Õ¸/"oéÆã«ˆõÙ°-ºí K†®ã¦. fû맬†[ª.\ô¢:ƒ„cF,=æJÅ„BZä'Ç'øD~4w~Ô;?Nâ’ÿ›÷àJò¡"~„ÿK½÷Ë÷K}7ÿ eÏ­“ÒæÖ­×&ù^È®U7­šÊìd ª´ê•ÙGíú䱌>Ÿnýñ´VÿjZùÿª¯üÄ%ÿ7¯üJò!ó¿Âÿ¥Êÿ×åÊÿ×¥ÊÏ?hYùuRÚÜÎV~¾ÊÔ–ÉúBŽ­ê¿Fh*¿“õÿuEP¬US`ß·k c}–g›ÂœŽÇ¤”ÜþIœÃ‘?yðÛ}vÌba‹dBȆqì…ÞôBoÆB†®vquÞÅIîœ×!ÂR6»ôrU‚ §×):d0&_më;; ùqbZÊ ÌŒ˜**sZ¼RKx[ó¨ÄVLy8Áxmòä©2c) JqØ^ å É´~qeˆcA¹ýA´Aô0Ã\³}ù0P°¬TÀO¤rþéö—×·›e-0I›Z^áK‚wèkƒ ¼ì—ÉË„ú@Ò<ÿ˜4ûôF…©i€lW<:iM1rÏW[R~<¹þ¢ßRVÓ+¶á~Äõhf´²2iù±r=(Žn>lEյ⪻®Ý^ê®¶]Cõé˜pÀŽ ;wLØ cêùZwA=<ÛžCRÁ²"É$çHC‘f‰ß÷hPr*ʼ<>‡a:kEz¢œ†ðÛ•Ÿú·`=VHÅî¤ìXÄ xÎZ¾µìi§@ÕxÃâã:+ ˜]Ž ;k e²ª˜\ͯy¸úÝm¢ yc^ÅɺxçYì3ð1 x …ÂÝmD²Ë81oºVTpRgUãÉE1#ÃD†lØSG6F æ<Ÿî·¿R[Ÿ®ÈòvÄûËd :»Æ&d†»| 0ØŒXÎ~.³Ð¨.X¦ì$IÙê4J³ÃÕ`ÜÀÃ¥vÎ ›’ó ²Æ¤Ó¸‰‚`Z,ÓìE‹ò”Ç¿qjY|WüËîò4ö⤇2`6”ùÝÝ\m„YÆÀ ®|×ÁƒuÂ\eš|!5`è[ uœf-ÄP³+T&ªLB>^ÝÜþ¾¥„Çw{i^ð>Ün;û`ºhb'Ýw–ít¸RôWž™'7˜{…p3ÖÁÐ+„¨ý(?¼† +JE[—Rbk¶<–Ò¬“ýéŽÑÌùJ²Jis–š!XÚVøõJn olÕš~bLšˆ(![¥«víÑü *—CƒÊíЀ ñá÷!: šqöeY¥²G<š¯“ãHàæ¹ DÒÆŠÓVtŠC;ÅnÜNš)éØ3]«Òßšä¯iª4M Æœ#)?}ÚÜtÓô€, åíPŒ9vfóâ¬U¾½H7VÉ2R™ôXw79ùOŒï*1E.&¤x”¸‰óœßÕ$‹hXŠ]ºéžïeWgV Æ|…³3Î\›±‰›W—ƒñ)@;”PŒù€ŒLf›Ûí¯7R<¸Ó2ñh‹cN­÷¨¬·^çè‚rá=Ð=ÙÔñÌYC :8cΊ°ºÒ`o¤ñÑ•m‹›,{ vDhX[ÙC:nÀÇOa·'HÝœQ´è\ȼ7‰“¡eœ3à;έ»ç4ÙôbÚŠzQ]¼—Î: 3ʽ˜²ôéžRîßbg†ŠÕ©@—ŠÒuÃéÇH‚0cC½{˜À3—®…^ÃOÊÊgÝ>ÄXfÑIÈ4à!]Á+Ü r<‰9d5z"³ŸÎudžyu›sx&T5ÒŠ‘÷P Ï¥Œ®ÞßÛSc 3Ï Žp„%aÅðì=éSÊÎzóŒá#"QÖ¡ø*h–t™¬RºpEÿ1â/Ô±"cÁª>ìUpÌË}œïjxB < 5ÈÒÃbgæÐ}ò×} f¦kû΂·$¬Lþ€7„_¦‘}E•ï"¥"º›åúZ›g³ ž°n*™ B ,PßsÍ&ÄAD°vo!Â<Ç_/ ’…*¸…Ó =`”´5ìT‹t‘_§H´BzC0+Ö\T²\7a;èG‚Ñ‚YÐìD¿UùÒ†âìDwÈ´o¿ aÏ“•TˆÕË‚™ÔYðAqŠ×Ê0nÎöØœ©QA‚À{…U-Ð2OULYAôOGSËJJ?R°i.8›÷¥9†2$* ê"¦ðr¥‡eÌ|%Q|ºÞ€•üï7¾J¤þ“ì šÏƒüØ+ f¼ùKž‚ðG¿|º··ÈsY@ø´{âÇH‡eFL‘Tøõ;ù@‘ÿÉ“»1…ëuá]|pv|…°B¹{ŒU§AEþt„Uìu_iÎŽ¶ž)it6Ä«¬á4,a ÊŽ,Î…ó9’8 KìL/ðÜúm’jwŠóÜö"¬Ã´#® Ì(H÷š¦óVD8úޤ¨:d&ë¾Fz$3‚’œ<‰VÔ0ž¿rk=-ûæ|fJª²2é@ˆ•ŸJ…ŸaX‘iÊŠÝ©QRÖ©'+=š½¬Â“6)þ>úHß;Ó<ú–O£YÓ<ªG4Öë¯KV7-™‰©¢Z03’ªèL•å ªîS–¢÷”]E1£ÇefxýARDóÔS‰8†ô 3€Xf"†çÞÝs,®*Zìp¬îNF³LHRÊæÓõ]”]UUÄ_º­%(¼¡ÿ\[CrŠOÝ;ñ»ÙùfhN§|¨©¬¸€\o7[”D·û9Ú ]¨.Ûb;ƒKKï;Rz’fÛ­»ä^—-L¦|/Pe°ÇuˆýZÞÀ¤` Ù—›’{å\«Ó3¦Q#ºä¾³ŠèÂÿ Cc@OWS¯-ïÌs«;³ÚâΆ[ÛÙGzŒ'u‰±t³‹9Q‚S±aR›}=/è‘–iä”®ÎÙ¤wŽ%=ùk™ÕÚ“áÇŒ_'5b×½q,¾¯»*Ný¼ Œ@ Hu" £‹/1¿þ{÷÷ˆ§pcÖÇÙAoëÃoj™åPPseO eB“8’Eƒúù¸â;¬ÏÀÖ+'¦*+\P£ ã›%—„“ñ¦LèÖ}€ÝõÀ‘BêB…tЇ`7˜†´×à)ž› ¼qÖwíŸÁ³g?l˜z9%´yí—ëEøú@?R‡VFí§ µSç:ãP{-#⮈¦Ž L ¼'ʆÐöÊ)jRgÎÙK>¯.XÞÍ5Ä÷yý®=ŽQ x÷2C;X¯³°€ÇÎGfÇ~w¾Ç~Ý1›×á×ÅœàA½Îó^:âòbt$ëû§øy—%çÔ4pæeች0(Iž,º½¾w8 tétˆip€yç|€êðÒíàÒäÐòÎýÐRÀª¦NÕs¡ZúUGOç&sb§&¸cÎMœŸñ—c‚ŒcΉJéHÝ?o»sgUÖqâµÇ¢2çÅÄtÄ>°7ÎÌð9H‡(Á˜³!yxÛÞ‡ßpAZzšÄ!˜©P츠®Ô¶¤× ^’DvÈô’$ ëõ7×W/ÝË Pr*0@™3‚3Ý&X6Ð$^DC±ø°Ø¯Üù¯„1\q1ZY6X¹s5XÐm‚TbNŠÈÌWkRâB³+õ™™é‘–É ääŽV\4áF¯׌Àå®·^Ü€Iûð›3`9Õì¸ÁS–(’wBìÈî} îíHí5Dø%k°ßÞÇE—¸Îâ½Í™@{;?˜Q9?´Ö ÆdšìŒjÿ­ Ì2!YH™jÀs?·"VF¹oì„ (zÁ±çO»’¸’XæðùîêÁë4ä)Î|š“$¾œyHL3ÿüA=Tˆ\“uRÊ.—ìyAC0™\k~²ýeWUÎ/kPËW/ÀY¸%ªzáñeÊߨ9.3ï°3ãü/C’@{ÖL|Š÷ÝÔÚ$sƒ“@'æÃ‹y*s°Jñf°†;×¦V3—åás¤€T‡˜öœ;„)òÛH$¤…§øT=ž {"=Íü«÷n¬y4Ú4ÃIIägÂPË\‡‚šíY;jNuÙOœ¼-K¯èé_¢§±žþ›eñ/]´ó¼,ÛÊ…˜Š°LJ”ÎöÈÄ¢&ËÂC¼ƒfJ,fwçÈšjŸ}ɾDñ%ÎrØIÍ™ÖèûÝ"»1ÆÙ± ¾ Ý u sY“ªÑ$ê´#%ê¶`°Ð—eå|?˜*Üø«îAy ÓÈœ¢~ƒzÜð° ¨¶l½¬Ut(ÆÔÕp‹Ó„ߨ3.Jnp €¥?ƒk¡ʨü»ä‘œÜ±(_ ­/þƒJpE}Ö³Æõ s=ÀêY‹Åu60l¡ - UÉÕgÐ m 7ì)œ@Ħ‚ÌÊڄǵ`çÔš1¸‡ïç q3¿¯p7¿¯|xð`k²ÓåˆçÀ·Ûóê Óí®ŒÉû Œ%<Æ =`|{–1ùD’±„çÀ¤‡ÝÕæ6,ã€dyNvãâʤ½"N¾´q’¦ éP¬`’6¼©…褋"l·%á¹p/FÝÖÃCàn«*«w!KxŒAzÀxóaó.(c|Þ‡$ÜÃ9ð%ºÛûŸ³ [£Ç·ÍìøŽj4½€æÁX:è»÷cé¹™Ã[f¬•öYfË€-nÊs j2–-*9(DþPJÁî]Ü—ney¬Ë¶ ÃU†²¢JL! úÜ ‘¹Ò„nE(la[ÑmŠABêöOä±¶@_än‚åQŒsðG²®N×Ñ‚ í¥ €?\#Sˇo%øó_‚6æ? Dùÿ®S±ÎYT ëýù[Ì…Pº#ÚnB4‡IL+ ¨ìR ýSqÄïÌ1q/öAëÔ‰¿¦ìu^‘:?PNŠ`j$c™ƹ Ö[ ÈÆ*™Â®NÙ{)Rm8]0ÝúMaì?â­! ’-iRfÎO+½Yќ↙9ø/0aHÈØÛ‚}©aÌ¥Ž^À«Ï¯àŠà+ñô%»³ I“<¡}Ä[-¼ƒ­!\Åg‘襸ÑáZ2©Å$–­ž…cò¾îÝ`ÃÙ†dØìÃ’ü?pËÑ¡:0ï14­§o$|u Ëòg\d´5µÒ6«4‹ÖCdMêOhOÞ|}^ƒÿÛC )¸&.ÒO%nðÁt1‡n« -ÖðÁæò#sΑ‚êeUµÔÊX)?¨J‰^Ðt/)g%µ„Póá ;íĨöRùÛÄ熨}Ñ“çØôa8ú&.ˆwŽ)kúË‘n^Á!>ªâ¦Au€«£ó€Ëdõâ#ã_ˆâÅ’àîxëæníó2C:g#îFxe¢FÎà6€Ww6eFV”ÝÍCÔ¢×è+ò‹¸)kFSN›£ x]mÊh˜.žN¨»ª$m‹´kÑ¡zMø½fÑ4­ôeío{3e¤/E»êi¢¶¢ê9HF7ô5KíB2;kZÃCz^â¥Í|¦À\©,Dÿáß‘™à.SE¡ô!j::Æ ÙÖ®â#¡©{Q›c¨¤]Øva賞Áµ`¯Ca®¶½uàè ‡æ˜‚­ ×dHè¡´0b&ƒô˜­â[+èÁ—¿Ž÷û`! aW¢KíÜþ~tz9ï’s Þ–…õ±;Ï)¬e¢#Ia¯ÅÜÕÌLÀzä†ýâæð]ÈWž6“`¶”eÅèÜæMVå¨÷è–{rŠ‹#:Ñ/þÜÇ`ÆÜ%Qæ+Œ9¬ùõŠ4×/- >N˜“:Mí|ãçñ±)*Yˆ3k¢sŒ¡â—ú+É[øi­‘åÁªÿËX½$ÊXÜ!Ñ\I…©âc0[Z]ïxÑ'¤äx5·'È¡†+:- 9QUœ’ÝÔå¸rcuþ†R€‰(©ÐYƒÅsÙã)¤FþMÜ´öúÉhüªpu@‹g¬UZ °%Õ„«›÷ì žk¨u Œ³Ϙ³*-¼ù±b÷¯ÿ<`¨Ú¯ƒ3fªs¢‡á³ùüåý½°õÔm%ÆæÁ½·ë3¦àµxê žéÃP,GI÷Ì ¢&T ö\‚ÍeHkŽ0ç}KBDе+k§¯Ë"fQáÒ#ü ý%›¤D!°9çù³ sv…òŒÎ{¯¥ë, …Nñÿjè4†(†ªPf8ljHÐĈfÉq0S¾.ÏgçlémžÍ-5:OÓWQjs­BæÍÏVw¸¤È •N%qùˆ·[F`Tgq-­€OYsŠ ô]â¼EnÕç ƒCÙ‘¾ˆî†úç®QYròôÆ21äÑ{`á Øw !û½IDrãžÏ›é5ñ!CyŠƒŒrz8CŽaŸËÚC¼0Ýô =?©óÄ0H«›À³ç×·Ez5ÑörŽ«Å1¤#¤ú)F÷Ä¥¥1ìÐW”´wUÔ¢SeÙ×{ìÆ* ì°‘ýéQ*!»úiH»òuöþ4Ù?à번¨ÔŽª !“íž¹°‡E‡¼|Vuyñ&ÛKVù³ëAŒÙ‘ ¹¯›6Οâ"Ï ²š 6 8xM¶ùŒ… @×ÓÑZJ ¢…𴹋ì•kÆÜW\U¢Å\MA+i$„ Bp®Š¦- ~þ½€lÎ|'(ù€l]éyð{ÂÝáx_iIgç]|‰-b.2œFà¶ýô¡î%âo›RìÍÉÏô(šÚü—m#®Òí…þÜú)Ëóˆ£1ï' ”}Èþb™Wxœ\JÒ‹ƒ´,XPÜœHó–SDðÒ"Ó|óJ,Ù Ö¾ ‘—É.àx´‡1´ßºY<¢ýõÑM$¶T¬BŽ!rs¥¥sBØÇáe‰O Æíž$ÅèèÞÊ Ø¡X^¾DìqÄŸû( ‰ÇÀmW…t ͤÂûèü3]ÿXœKöt•¨œƒº.Z²HãQÒ]>תò³pWËêM`"ßô ^_?ÊwB©‰£2Û{EQìb£»ºVó ùëø|¯ñ>üp˜#'o]ÿ!>üç;¾-onduµÒŒ|ÙŽ¼'Tû¤ÐÙºÒ›Äé5JìQ¸a«²Ò¡8׫̫Õå@Uy½šª#·™¾Ø·‡¯Å¾•x:œÄu¡iUfE³ÊýýÚƒ›«`Šiƒ½ŽÈûˆ&ˆöyœ<¾}:edÁâ6áÐ|r•ø«ÂPì6«C‹86Õ.ö 3dΙ˱Kñ›7  ´syAÌ+-¨1‚Í–ŽØ3n8æJ˜,¢²”º¤ FwiK¶Tû'Ž<Ï8 ů‡²äEŸûí­#*lͬ|êd%ׯW5äjj²úÏ3¯«P&°v<‡ Ì•){‘ß¡ç$ÆVþå/+±ï€ýø_þ2­zšô˧MtA5½Aù—@:ùn-|F'ßYèä»@:ù~-|F'ß[èä{G„Q€=ÛÁª‚Pq#P”»ô ]!öâ”áCéÛ³W¤BT>Å•±È¤I€9ñEà0ð!b‰†,E”JoãXnY Wcšgp>ž’%rC¦IPszcˆA3 "š"‚$Nò&¯µ—_"CdUPî3ËÂ!QHýl±KM=ÈÁÚ9DužÃµà«C¡læk|î”á–'Œ¶,¥½ýÉo†×…§ؙة|³Ž«*‡[ N ¦Ág’7åÜ'Áæ+¿¬ªáÒvx,ÌY]3Ðb Ctu‰§¤!…žWQã7Q_xµ1Ÿ’v¾IäYWs!U6î¤â4%ã¿P9©)æ ™b¬¤=pË¿nÖ'ˆF{T>Ë©›AÃåº Ún×RTÅ æAüá°‚á@ºðtéjî©•ÞÙë¢jØQ·~VÒLè´Áž•‡‘>4A¯š­pl? l¡ -Lˆ£NŽª#7݉=]¾—9v-еÊ3Lq®VšáxºÓZ»ežîÏe‘5eˆ-˜˜9·^tÀ_Ø`:dížÇE¥yBqÞœ".âÀû|Æ] ɶ 1ÙÑ#šk` Ï&Ò-[«!Ç0Ô:ðC^–iX¾2¤a Àb8ҿ± ÊÓá Rßßoí6êrT”ÜÇ@˜CÚyd§¢•qøÆ±ô \AÓïœq†Ó5¡»ëÁŒÕg÷ÛÛí̓Ku·¹Þi™Â´ >DÐMAºDÂî*ûp¦WKØÚXÃkø‘4àM|P F¨+Ö€``òç]M¨•¦Μ¯,<(s1$ºšXryòOSÙ’NæñÎ+2µ9¸µ 4Pš`Î"UÄ“SË¡©ÖSË¡©B©å0:9ÿi³žZNÍšz‘нXÍüúiMÕÔ+ªFB÷V ` §÷W+ªæg9ÎŽEÜo­§#Ýg¼•¥€×#ä]Ô½ ¨®*[SKUN9U6Ô Ä‰\¯&­¦• Ù먡(Öì†%tïX­<<¬Ù Weõn=ÕHèÞª¬j66ïÖS >¯Yk$toÕÖ@5ÛûPµæë³XLœPœ¢:àÄÚJ)Z ª:‰a]ØüÀ¼}¸R~ }DvwÊ<7»”ì…[âÎÀ:–ô:K[†æâ Ϋ¸B8.iVËC•wØû„3°n:X£¼»ÐŒ¡ú4- 9_UœG{äaƒv÷’$ÌÎ($eÒ4 ´?ð¿»(—¡ˆ×(ië:LŸu ßAçküW0p‹O8æ;–Aì×& -È4g²`Ã_g.›¶Ý'BÙPi(ÏXMagc)¬;ÓàÙsÕíÎbÙêÉ…)»|AþŸUÁîvL‚ZpA ׸¨~}»‰š:>@Ø× ü;&´t°Ö:P@†ÅŠk°C  ÒI†;…×Ú1ïÅÇœ©‰û‰ü wüg8_&ø®Ê 1»t bÄ+Ž$ÃC…9è çŸ:ë¦ ¢¤)P ÍŒ Æg[÷5» ûáy˨®Ä)†æÌ!uظO]Fu¥N14g Á¨‡&íEw¸5µ½{»Ýþ`wJÍ#l†/nÕµ¸)†fï2XqÃ`xê2ª+uŠ¡Ù› GŸÂï0iãÓ¨ÖÿŽr¾åÜ›r>nè)£¯è\5kW=è3¶mCí‰1Ü´âO5YÚF²¢;®â‡Ÿô ‚`ˆì¡)°g?êÃ%«~XárÇ ¬9iHˆ« 7I'Vº{MÉì*yÐ òùúƒ'Þÿvóà~¹^ùb(ÛµIPGM ­Ø¸"ô:°®ç¶J!òy˜?ÿ‰j(Ýâ§9eÀ.«c„Ï‹4¢I{oX¾"Å#éìßð/-Ñ”ƒVHSÄ»8½)'JóòB%˜ú"pO‹0å{+\w’ÇÔj½hÈÐ[etÙH1FMã7ýœ³PG':­ žÀeÕâSIÖŸ5QjXÊdþ Žn‚÷¢'|Eû„.5u1q›7rìÓ˜Fç"c{‹¥ñ§«bFûqgK¿ÃCp` ñŸÿþ¡4ß”lë„LAв%£­×¡óǼËGÍÂ…ñŸR)0ò"²sˆjš‰õ5XmÿªÞl[k®E‹íT *’dÙÖkYÜKó« ƒ,ÃÏ@s/ãPPÉî0 ±D^úá5\Ü ª-¶“6T$ÍTµ{õtB…n%CÖ=p äûçáæóÔ-Z?{YJN‚™«ªÕ9¨c/¦CSªÚ}ž%$ÑSY? ©Ã3ç©Hëzm8ÁXÄ!`ɽֳ¬‰1X~<™´Ï›kD3òÓ½€±ŸévÚ"k0W[Ù‰¦Á›m"°DîÖ{·H(“?/ð-_‹c‡ÏøêYÕµ½*GÊ6‹P9̘¬½š'1FõWÓ†«™ZX[}© Ã{‹¤CNš·yYâÎO¶pS†_,#=’e»hÐ-u«f¾ŒNÅNB=7Ò>qŸw‡cn= j®1„f䖇趈ª¸ŽÏ¨qjš,Ÿ ›~ÃGK+ÏŽ—)œ%[, âÏšÅ÷nnO@Úëà¿zƒW»K»ô”T|„E_“¼M‘o0&3äe-àøœ+k ý£È-‚:Q–£Â…c”¥;»À¬ü}].‚:•¡ìã2ÛšMbStÆàNìPA´ Ú©¬Ø‡Ù|ÈB;F°ëj*`‡gøú ÙN~dM•Sź*Ø•~#DíÙÑN~d…~×ò[!Tµ~¯Lcþâd….fí¬hþÁYûq Á°×{V]~ ÀP hÎPË0$9g^a)a””E×Ï^‡æ&¸.E(¡„¥}©ë°|%@¢ ‚¡?%K™>¢ÕYâžg`1Ë<9ÍñOm–§t§„žè‹WÊ&?Ä^¨Ñ—áÆxåØT»¸ò(`™K>Ø1ºÚ<Ð}¢_>mlsîeS?Â0ÍÿØ’(03i'&z:e ¢[’Þ.ç8jÄ•Èëå!¢ "ºÓùî6åyùô’m÷EùTDäϲm^—‡×pƒ¢ÛŸ±³R‚)ÃM ”üíÏi+&ÜÔ†g^þrùÎÏœ«‘0åvÏžò#WQ‡/yKÞ C!Ê߇$ü½;ÝïçÈ~ïÆ´i‹åyvÎ<«éȈ¡$FÙ*{чǧ²ÁUÙ|ÿ—]\|©Þ«*!Èm“E’œ‹Ä¯-ÚÀ/R7cÅ]îÁoãuÙ’Þë™ü›":”òçܲƒ>wsL>——5”å«¡Áàõî—ÍFØ­ä ™3ÓŒ°yy±¹»x騬âëóæÙ'fô2¨¥>ˆÑ½¸ÎÀ’¾åFùYnsOWý\gpýJÆEö'«ÒãÑd.¨hQŸƒ5–! %ÿN|èžGôEÚV9ò¦{‰ó…¬ÓЮ*èXçä‹úôý—ŠÔ©"‰+>9 A{Õ‚ñc‡¼äwËû4Ž*(+DÖ+eªÂO`ZÒ—äÅ«èPg¨HógÚB°ZÿÑ=4¸”¸åV¾õN(5hu˜Ç·UĶ¿ ‹å@DúÚ êðÕÀ°m9 #“‹¨­¢D/{}ª"Ü4\:YC3“_ñ¨.cÌ®ÒSxªòg¸²•„RÇÐ’y'>¨$\=Dì…Ë2ꄽ«LƒÙ0Äú*<…u¨¤ùK‰ÏqµKqR¡¯à¸.Ó)P Æ#9*q0ï”R«{zoƒnHnʬh¢7ÛëÍˈ Yy;Ð~ÜÓlnÓM%½Yœ¹F¨Œ‡6ÂéÀ‘ù îÿVn#xŠ‘y?OÖÕÕλIkPÉÈ2Ã-Ôë«}t8 èkÂ81#¢½PGyØÞ–÷?¾nÐFË$:‰Ñvö¶ ÇIæqcs…P1‚…{wÌ‚ÀøXà,ƒ±€ ô?q¯­Ô])¦î`IW‚˶&s²ö€ ‚YÁvOV¢Ü0g±!ÔR[ÎJb'Ù¤B°Çü Ô…V:Ö445›½0fÎÑXc8d(÷ØH×-rˆé£æ‚ÿ5úÚ¼Ï!óÁ˜‰ìð3nÐy§ç¬ØµØ§/5@]d<‡áau./Ã$½L€¤å'ÉÉïÁ% J£4x»qaU¤@‹Œó]JzwH‹œ†rP›Iމ ¤×üjÔˆâİձ—ÑöáêST•y–ØÄçV¾“–˜<ÿ¸‹‹òçÏt0 l§‡1 wÚÄþ¶Z\uTÃP\a.lÖh:Y ¡‰ Ü=Øêšp~«t¨r^œâQÃ¥*RÜeX #\'ô(¡ö{`\'«ÐVq]is”`´ÁáYØ–=B´¤Ú˼³‚s6ÏÚ-ån–>﬉¹6B-øƒ³Š A‡i§a蕽sä]–dhú¢Ã2ã©Hú¶h, #gBaø„¬˜Óˆ6ìÆ•Òä Åi¨z¨Å2"¦J†¤‘3¡0|ÖÃDvÁêáy—¢ X=íâÔÇøG´LI Ãô‚HcÃHùÑ€ÏzÆÄ„€ñÏ=‹ÍèÆ” éÍÁ7óV¹öËîS\„iÁ ²X&¾0ƱááW _JkõÆbö{‰¡å}ö>‹¾´1½ÒUºK/~+·/íí]ÉR¤…àßôf$É^¼÷ ‘:·ÈY+ÌÌè_à"è 9 dÎGPK:\{%)(½âpð¤v&.·¡ë²z¦ Iz•qãašÂÞõ¡ª zZA1 °»b sàÞýÀašPŒx ŽªbÛŠÃ/Š’d]y—`ЙŷÖÕ6ñ:ÓU"¥r×Ö’89¡7ч"†µG,V" Ú«©ÀöŸ>([LRyAÐÈ9üoEåLÊ3Éyê_yY Ô/Áºk@˜²é_£ Q=²‚Eà ¼Ð‹ûk„h6kVP‰Œë®ŠÂÆ7Ñ>ù¾ißa±1íH ô3¤7@uÖµjxO¸¾…€àÌ“ÆÊuqŸ—ÉcðÆ9Fµ×„p!Ʊá6Ùøt¸ö¤Jû#­I œ?' 2ÑxúÖ"š—gk©Ñj“¬)hk5€¸¦^OO±NqbÒ¿ ÒI=—@î £‹¦ÕàÎ'¸Q :W9JqKŸ°Và$ :1£Ž˜aÑ'%JÖ÷4q}Dõ,­ŠÏì*Þnÿ”û_œÅ[V‹Vš_!h²×ð>Ú礽•Üód®œCquâ8Øæ‰'Yº±+ë4p™ŽíKò,Öåq÷q–¬Æn8šŽô†ºI‘R’;çM ¼ÛJuˆ6”ùQ‰Þ$ig²S¥{{ÿ3çêÂQòÏq¦“Ò!ÚðUäÙþò!—y]«žt¡–‰ëÔ·÷Wb' JLt!âlóájsëE,$'W:SMÎþÈR“)\œÊ&x£Á:•bÂÊrûýÊ~û0®Êê]P®  K§ü66ï|ˆás¶w‘]ˆ8ï?yõ.Ïñ©,ƒWÑ!ª Ńòü?ðëE÷VŸ‚u9PËĆ‚¬Ô¶¿ŠyŒ­7¿qNð å9߯Ã!)ê€í «0}þÀÖÑ~Êšä¾ê]ž§•øóÔä5X}`YfpÊ0ÄœoñðM¡4k„¤OwŸí7”æòpF)÷Gïkxêò?ý A—µxOþG?iE½%Þd8)É’ÿ9zqÿóÍËÎ3?‡ü¯sT›Ókv-âÑÿËö5eÀ2XGåþÌŽh\½-MÝÝÝ882}Œ½MÙóÝÿû—ï¿ûŠQCÄ!ÛðòWìÕ4ƒ¹\eMÑ7ßý]J ŒP*eýïmWS©î+¾*U0íTÚ6ìX¹jÉDSR¯…rJ~.ÝV°Fû²åÓ šê8ÁÀTdô?ÿý?•NvuÿH*óiÓ¶Š‹tû©F(ÚÔeS^Ñ‹í§ÍËn\aVd’Ê÷u–Q”“a(Ø Ãþ§µ«©zðoE <»ŠOŽ ñN»/ÈL»^R• |@uÍÔÍm–Q §nduU¦Q¬0ˆô˰…ðMêýÄ—ÂÊT DD…o ÂWJ…w×â—ïÒ²ù®ò;31€µ× 23€€táTù©!« ÄÍpp]è°Ý¢ ñ¾ÂdiÓ<}Úíæ5„}ˆØix×¶Ñ—µ(˜rÖRL¥,T“[ا@§HÐ[P”ŸV¾øûz5ÂuÓÊ— ߯C­°Džš€*Æóœ”˜þ ­”éO8êGÈT%ÚŒc°ëů­§˜@úX¨1èH#?3ùVaaÊÐí³€š·W“l +:}£+5ªëOÏUL´öâþê§—öžd–ò’Äd qA°À‹óõô§ûŒ·Ð.ÜkõÏwW|O&óOñ¤jÜ\s]>ã˜>à´àa&½v¦Ñ–5£‘¥ ø­…³ˆíÍCÔ?‡e¤Gq9f÷„ÓÜ ʈ"¨‰ÿ±½¹£ h\¡ŒÄ#žEX?ð;±V|ÉŠ"+vÉ Ìò½âwMƒqˆr³pü„àv"¬»²"êß’nCŽ^±åêd±|‚™>M›o©÷\¢&ö«´¾°ÑeÍ/ä‰ÇB1]X“;ª ¾<äûïpI‰ù f—˜HU€n“šZGWQžÈc¶,Á ð)ËsØÜïï‚Tš¶;æÓ;d\”¹$à÷a*Bñzf«Ã²m¼õ×c˜êŽHtzƒ¿c¡ «ìSn»`Ÿ˜–Z#½3@…(®AÏþoÛämdó–Þ[»â²sôI.BQþqÅuÓ2†¾òU7À ƒA1™¹È:ë@lTÖGä9ÖeKÖ*è¼÷l@³&ŠÔ°Dìöâ’ +3JéwèèO7>yJ–˜~þjfñìxuÒld€gQ N…»€Ä\9±Î馋HíSž]WQ2º°d€f}Žñ£ bnð ;̲E}ý }OcÓLûÁ°úð .Uokã6®ŽÓ¬ UÎ ˜-&:Xð±‡nÄø^o f*š5.+•âF¬‰“8 Ub ˜-&ÊÂ]^]_]oÿwð®‰Î-C<;Ât ¡¥ÃC_“¼MQh’*¬#WB)ÿLÿ¦Ë§@ä«JÜÍ H}êB\@°’®*kÚdãÓ¾Œ½î¦.‚:Pí ¤a3ê>Á¡nƒCoâ=^…¼죀Ñ*Áƒ|Váð|ê@ºƒè"òzWp´ S­L˜DÂ0.yl½ç*¬­s,[}[6ÁO2l·Øß¹ˆ°C9*0첑êK$N„}ú©á¦Î’&E—Kà‡ÚA  î`…=¦·‹ý>üöó͇{<¡}øîkê ‡‚jà´wí¾rT7ÂýŠ7Å1˜15I”µix Ü›:±Bž×Í& ¬¡îb™äܤ{áF ̛؟)lítuˆç¶q-’T²ÒS5díJRâDÛ÷6mS¦(G Ú¥yEï¹t‚”¬¾1ñy4¦ òàLŠ6‰ºÇüä¶Ëoî6Q\'§ì‚|t•—ǵԤ‡vÐÐÈ@9üœ l=tP®Ü ¸ÉWQMOæÉ¼N¤¯è‰Í—6®Á œ±YÞýqè±Vm]ËŸq¨B3 *©EVPk)oÝAgc,Uñzh« =™}·òÆÁ ¦ª°ÓÐä„&X‡R _öЗø/wµp¦\Ua6Õº’z‘«ó°ìê܇^ͧ’’×ÃèRr °;«‹7cx49(]Ñ…0•ç6 ð×#zÆÌÃtŸÈ«ò–‡¦ ÊXt! â”ï‡÷Ÿ6 KJøûЭѹ 0;˜„t¡Ìø:žþ¨íb| Ê´Çs¡I¤{—AÊ5ˆi¡ɘžbRدo»çÖ”è®sÇ6ÄœΘœ"1‹É×5qÓÔÙ¾u؆;¶Yœøà*0Æl¨méi¶zªËöxŠ~ùýÖ–ÑÉ'üd»û}b;Þ¿^ùMòÈw+`u©â˜“ R̦ ÙÛ°d™óâú«ËÞ$´p¦\Tan[Hþ ýf÷Ê_8jެxÜ=ñË«ÒÑÝ}ð;”føqÈÊjÔ”¬‚ÍfØŸô˜ž¼.‹üx‡šÀÍ¡º1—'rÊ¢„ËQMAäÏ¢úûà•`ÞZ)Z°aÅ Ãû•HZ?Á+Ë,¾¯†æ+ÜT'Ó$E&ŒžÞ­[Þ…¬GïLêÑ»°õèÝÊõè]Ðzô­[BÖ"“J¶­\…‚Ö oYÎè\ÖÏÁkŽÖZ) Ȱ®°—Þ•„#xíÐâºj`²>p%ìÛÃÁ£'ïÉz¹úû–:ùMþIÃOàôÀöPa†uŸ½§…ð@쮇É*ÁÍq¸FlUê?÷n­jñ.Lµx÷MªÅ»ÕªÅ»@ÕâÝ·­kÕŠ0•â›Ô‰ÕªD ±v…8²{4è«Hæ|¹\çøjƒ—4öÌõÌ P³2 ªDZáD¤ØN]yíÅ.©1AÈŒàl8õÂýÑ"„iã>\=ŠH$„¤£Í¾,ÚÕFŸ²ëò^1ÉÝj((I=¸ é!T§þ\¾«ñÀãgÉkÛ J c¿„ì£Ù&^«– ”BjtlóxJ£bû(…#Í©Åãb‘9 )Š®vž·(b°IŒé7,ô´„Èô•á†ú4d r»F>ñ1x¼ª~†ðTN×Õ$ò›«%TÕYI!t ˜¿¦ï¸­¶p°æ3 ±oq3á€î ®µ&T”*¸•«« ‚x#pðCÐy àwÔá·}æQ·6ˆqæw\ãenE?Lþ†yuœ„´a¦„áIQG!aHŽñlJÒC/ô¡m=,Ü×+¬¯èüVÞçsó‡¯'È5š›^Vâ岄gþ­›˜î†x³Ò¡™²Rdu½‹øK[ŽÂA¸wx8S–ª0³˜â¬Ce0ÄUyœ 3>2OÊÌÇ/É9TS®Z ~Q”½™Éa 7ôjžj²zâS0T°—•!p¾‘BÚæ^=¨³Ä·Ñ»óÉ¡ƒ«B‡îªëÛ(‡­SÔ0ï01ö_qU–óÛ( %Á5„Ou äÛpïï=‚kAîªêi&À wÓY|¼:ýS³ ÔUñm4%qx H ®ˆo£U&^æ\ßnºu>^¦3ÿówߊþ»è¿ó¦ÿî[Ñÿaú?xÓÿá[Ñÿçèÿ³7ýþVôñ ô±7}ü臦îC{ŒECž¦óf]Ä ¸j Î^Åu-|Žòm*@Q¬0, ï`Q|« ®âsp H ®ˆo¤œ_ªð» ¬³(È·ÑCSLJCF_àøÍÜU'2Ô·ÑLÛ„o"=¦«·¡ÿ„ö,Ôeh €]!`ÖÖyt7VƳçN¥ æ 4 kò* ³› @ ÞŠ¸(kò0„p³¯Ë'‚’ƒQÖZÒV dê×àLã³÷M ´à¦¾±Šawš:¸‚8å¡´1‹n©=kð0’žºV ö úßýsX%¨ NÜ9D+÷5ùq‰ë zo7^*ÊÛ¬Þ=68kÊh{óïÜf+,²dº°L§‚fÜn<ðð ÁIû1нúþ[ð;+În ”¯„é’'!˜÷µÚžés¶´ç_²ŒëΛKº‚gj¡ïC)a­Ò£{*D['$µX+äŒYБŒ‰ ¹©íýVÜ ÷„QAÃDÃc¾ìg®°ÛŠN.iìRÏá¾8“•Vy>·EÖ<ïN%n°ÿ´sÕXG: ~!/Ÿ"ú@¸ÍË!´°Šè`^žÌsöaË®‹?ÜÃ0/ùS%gÅ¡ CT³¢ÉEe’¾Ô‚DS"Y‘êb)SFô—­/97DÍŠ}õ'§Å3¦¨J+÷·¿ÝEì)»†ãÂ4;kF¬¸Hî]7*à« ¦Ü)õ 44€6¥$‹Š©!+CÂEúõZáOW†1&ÉÑ ˜»¼Œ€MÔî+ómd.6…gÎY‘f ö›« 3|‰n‹CéN05GRº)gœP{¦”,dá¨ãY¬Þéþµ³ŠÖG¿ÊM‡Z„OÞc$3Þ’³Q ýŽ-V§YÕ%§ Ld$&T®7ŠèoÛÙKˆÑÛ~ÜÖØtGÖe¼ÎÓ8ðÌkÑŒžF޷ǧXÙÒíúø! ­i3Ãôs?9Â0dÒ¹”ì©°gðÚ’B(o9Ó`f¤4žr­©rtœÃà½Â¥ ! )¡Ñ©3}äRJDÎú ¢˜“oçP.Ý[UVï|Yô†ˆs½ôaóNnï®§œ õë±ÎR_.2ˆ!*âÛ×qšµx'4(œFyši šñ›À`ðišANHW׿·>‘?t¤Ã´"v´å A¸Ù“ô¯nnßzº%m5Ïè+:WMžyÏÁ'ÍxŽÅœE‚ˆ¥óHåͺnsžº„êÊŸb /V‘GlÙŵ@*6 YœÝ$®èJ{tr4µ¢ùiâ$N7í9L3-i|›6 Â̠͞„?]]_]oÿ·kÛ¾\ø\œ—<—‹;Ç sFí×QMARY©ÕÎHcÚ½ÆýÕµˆˆÍ›©ô„»Ó¶Ù½ø¬ð.æk»ËhU÷™/\% d}SfEƒ£Ÿ¯6ø¥]ö+üøˆž=i( f¥ÅDØ”µF¯ñ)®Q‘Gï:nH_YD{º*â¡Ü©!/üÙœ2ÜYoÄL(ÀŠ8냹¬ˆ‹Žýô0‹i¤=pœf—,ÒâÎn—ÀŠù%‹ª,s?®#vB†òù|wõÁ/›Ì{n~ L2­ÛøºhZm|/m׋—2#…îë_ƒ²LM’v.åíFx×w¤‚“¤ ÄG‚²"E™MÛõõÆ‘FŒEæH‚_TÚZÜ;" "O0µD»ÄÃOÇ$Ö2‘$«fW‘ôÔ™S™`o¿å‹˜Ö{ÊõÃõ¶Û{uÛ…~€…8 GYÁ³¦Ë®±ûÉôOémc2õÚü|+«‚†Š2E»¬ªãâèGwÌ„ëPÔg’¬ ]~@_“¼MQPzZTKž*F ÂAøÙÓa³ŒÍCDÀl~ÜóÔÑ}K¸BIvxŽˆ»,i„“²BwwoqÐ(ç•tÞ໥¸Ý“Ôa µ*ßD âÅíù×ϰŒ Ãt hÅR÷g(*†7³)£®bz1Á8B{zá+9¡ä—‡æ‰,¸vôWÖ ³çÂÝò&ì͹ò$‚Gv{Žs_YEþìÙdp{÷ú2xÑבxïÀû¬ß—å#i7l$~a°÷:Ó94b÷) =‹(ç~…×Õú* ¬ªŸø/Ëûà ßXKA4ÀöØ6¼xaé7hôsœÀ˜Cۣߩ…)´½†@¬ûdñôä½PÖ©@ }„£ïÆV*dw%¦º5>N¢Ú—¥„!F:Ãý°eŇÝIã*Ïš´Ù¡ íé Æ~D7[槈1wà[£8?‡`)Yp£b|Mþ2fðÀõ‘ä1ö(%Ìbî!š÷_³4EwƒEÛ’Ñ—mmáPPŦï…üÚÜ< K80ó˜ôŽ¢¯¤aÝøtÊ`ÛCzìÄ>!i›š(¸ÙñH¯9*Ž>±®,Эô2…Å*ŧO›.T-žQ¾€¯¯fÐ×ÑUPp­ ‘]5Òá(Úào£î­¯"N(NQ½R Ñ€»ªC†ê5ž†¯°2*bç¬fÀÎÚà0T?Ðq¾M3L;ÐîÅ}5‘“ä+ÕŽ´«6z ¾fÀ³ðõâç°Dipe ‘]uÑáèªFÿ’êˆ+%LE9Ç_²ÊÐ ªQ‘ÝUÃq¨jîã¯Ù¹=GE û´`ÞÁ^b¨.²z(†w^Dn åŒÐ=ÔcM(IévI²Ú¡gÁŸøúÑà{hHF›Ð;üài¤úDRZ[çU\ûÕ0ÆöP–@šP}‡0p$Júýã·bPs*WèœeXguP]·Lk¦/Í߇8eüÇÕ{FÎJ’Ò»’÷Ë’/_ZVš¥Œ±]+€„¤´þHn¼9¼b:Û|Ø~êk²<¦÷eúì«7ÑÚã”äÕå:µ×«,_JÝ–¬rº\kï—ÌLd&ÛL’E2%«Ç~X¿±à|Øþ’ƒ@0p¡Üct—SDD0æÄ…¸|AòÏJm§®(€œ‘ð/Ù@¤¬\[HöYMÓ<÷Üá${Ôd‡"mϰÆË#GHEdð!pU€0Ÿï.Ráõ*´ãÂky¦9o"4BŠ¡NQVìž°cànƒ%¬±ž²ÿÏ«»„¦g§ì_ü3;>,èzÎ@¼-,BÀÔ¥&JÀ ȸê:ÕÙ¾ 65†(©êºó×7ïWÉ‹?³bW>6 vÊŠÃKF§Q.»¾%´&2{âüÕù¸o«hTíÛÊ“©½¸¹V!ê=í÷ϰ¢ %åØFdE2æJ ¨ǃ3ÄèeB™9¥Uɘ+3 ªcæöêþ&!´šÏñÃ$ãó‹VfU×S\ŠSí6^­h·¾•¢ÝjëÄ—ëÙ*¡ñÉqpE+žyV|ƒ•í¼=²9š ®œ^¡gï§z{45-eFìþƒSá´sÅ%ûG—Éͺ!û§$íŽ6Á­aG’ÜÀ%Rp¬²`“x'X†:–y*œía…Žððœ‚ó¾Ûòÿþ÷ÿ?Sš<}ŽŒ^/sÀ(Ï J5„GÍÉÉ“ôP~}ï‹ÕÇ«—‘ 2?ñÒ,ÅÕØ| GÂßây|j2 6”¦þB³öcñ#äPÞ„• jæìÄbn!Æ"05¹úyw.v)-9YW]‡Ëÿšäܰ ¢xu}ÁöÔùSàž‚ÑX%®á¥z)þÆæKœ0&G–<ñ¨/k³ÎJ‡?y‘æMI6Šd—õ楈fÐÖeÎÚÆ†4 ãNwÐO[[g›sË‹lÕ•l©Û&<1Ñû6÷ܧð&NuqÂbUlzdqg¡ßU"ÊvÿÑŸ8gù`Î/tàºìîú8}ÜÅþTžÛó†lÐÎEbDôûtè¬1~þgyþB‘âßë£LüŠ80u``b¢ßn!Xðç ¦£Bõ‡¨©×"ö”8A¤çû„³x¤ÂÐøgV{ m«H»‰}ðÕ@Ì¡{6fz¢×íäH;ºå.Û€iî‹U–Ó9o³*'Šls™¬Î€o’}šåì–VX^ÉË”ŽÓ<-¶.kmÀùïÀ3×.öC8–¬uAóùäÀ˜>˜Cáé/˜ÎV­x´¶2Áöó§$m`ßµ“Ž-Ó%éö(äÝ9î—ôÙ¿‰ÀªÞ"žGE_)¨lû€ ìºó 8,Öø¸'`(–îÕ·æ–³&F$™Á£%u¼Õ$‡]Šý"l·\Wg0ÁôâÏ›ÕýKç‹$³]ž‘#óh5û:¬í"œÙ Xmæ]h¾V`ß®^zäo[u~îHñtJ· ¢ÍÞ<ZíÑôãæl]­#‘"£uXl]í‚fÿùåþ'>¾¢?ègçêÞ‡úÕ‰ÂÈ`Ç… ªÅ‡´µâ!¤ë6aì½Ðlš8h6šhC«ìCZgå¹a3{¬0oÒfX9L^||C‹tY9ž¸Þ¥3Bµ¡ú2„–†(JãðŒáÙÃÖ¸\¥ìG…l¯/ ß*Ø©æi Ÿv/N:å(ä(Æ\ÊA§Úmµžö(}@2ÿâÈ” @®8* ¼‹Ír—gøß¼1þãϾFaüÙ# ÕžaF€Vú5ˆ×dÕùĆ¥«œ\]F¾( ¤?ØæXØêWcÁ MúƒŸ7 :Wô­÷ùù,ûktÙR8¹‚SqtDF Ê~½ÅÀËŠù©p—ï%Ë[˦ûwæ¤nٮٵh_ÊÆ’Žä²¹4ë©g;{ûoÍ€õÿýïÿÓð?>­Ø ¸ßþu‰ä h³‡Œv!é€è\Ã`|ëM‚ÑÔ SE…†C^Ò~2$wÉ2Tøt†Ð4è» W4ý+¤…eàÿuNkø«ˆÀÀÄš„ASáAJX¶t.œÅšƒ¾Ê›JÂ2mÂp²YìõfÀdiމžº7„?”Ï`GQ#Ã}ÊaÈ ÝÔjô\悟Œ[Œçù€y;,h.^”±wûJÙºÂb8Ö›·ã@A6OOÁ3T9¸œ1èÀÈHÝB ø¼L«9:œê~g'ÊÔ#SEõÓ1>Bûù½1vâ3Ÿb12æFWµ“±b2ËÒ8ΰYs$D?Þ3Ò Åd$àV®9+3 ÌÞĵÎ:´Î=Ö|"âZÂù™㳚°ªÎW–RNæpÇ]›f(ð1:»õúñ˜mìÔ¥ô²f ¢R4Œ"Û§@¦§–pTKz2× É÷ä{•§´‡ZÖ¼Èɲìè[®ën¾}¤_¤þK$‹ž‹]©`²¯.(º ‘»±)…×–u•#  ¹¼Rk;²ÊºYbXg^cS겿%|ä›þìÌå×pË/L8+iT&ŠFl]Û•Ñkí±mn޽²Z&îV OïŽ,DHନÉšý¬èþ2³£¤Ø±ûµ×bza½eù’a77C‰AY!¦“ê'D„Tüy‘‰?,A "§&Iz»®l)Vt'¯ÄmPï`#mlhÃ×·ØaÚÿпxw»zÙmÑ}>>kr€óÑb÷Tla×ô–®'6-Ì˲ Èë²èb—,2}3q=°¹›±çJ¤¾ñ“)›Ô÷çiyN‘šìF™‹5«yWõÆÄÕS]ÒˆT6×¼(¡Ý®9ƒ®æP'¥k™Jø½%Щï¼ÉálD÷Ì— y›sY,ð˜L݃À8pT’öé¶õ..²ò l&Êð} mÂÿJ7å¹M„D²#,œGò‚?æc¶©jS)»—X@b «»cìWopCs@U5¥ìßÜ?ü*­³õ;M£fêÄõ–œ`¿‰G†bÑ••^_GOwã['³,;±8ñcbŠÿ—ç(‡ºŠS3$C.ÈAÍ–õ ,:«ïß½%ß—n>Êâl¡I4[Æ«G\x!R¶0ò‚+Q ½‘† ƒA,=ªººa…''«»«/ü6‡l©¶bÇîÖ(šð6‡ee¬¬™º‘S—aƒþÁoÏo<§¶Ð< šº&ôm¹ZºPôDdÁ›]Kº<‹ÚÙ>­Ù™’5m±#ô®,F±¼èL( u"â8 ˆÄ^¢ÜéâìE«7&‹h‚T}]ê…–.EŠ3ÑÙ $GW·ž•*Ñ&›>ƒ6N:YwbÍdK¿Ù´?VÚEYä²ÏJäRF!GÛs½…Ê\”¦+eüY¹Ÿ–³çá+:SañÃSv‡¼ŸsnªuÌ´Öš—‘²iäus±xO:«Név“;Ør¸‘cÏÐÔÄä#““pN\È-3}­w‰…0K”lÒ‹&~q‰¤nR£J³º¶|sÿJ&[Xˆ½ª,óÝΑ,؆X+D¡&ßAŒ¹"kËp^¦¶°¤Hš #b¿ã8 SwU†PY¨Ôðý¿Ym€j0ˆ&IQW˜:SªD8‡/HLá"+Ž)~Ŧ)Œ¥’~y.’XرmÚ´ñ–&±TM 蚣^ªÿ`?Añù ¥GagBÌòe'VKd²èNeªlàgùÕÕ¡è d,:ËSÃø%¼Ð(†°Ttjºn °¢ò üúK$zCn üú‹®’p~ybà‡_ÿ9`GBíZWèÆ,6€Æ™˜ÔYC3 ë*DtM—ÜÐÐüªË¶¤ªkÇ#)îü¨f¦T±äEÂÈÎ|ŠÖõÒYs eÐíC˜ó(¢ÝÓ·=N݈±#HgÍnwД>ÒñóЫas#EÛÈŠ€³‹¶²pÐÜÔÌjÍa©+ó ñèùÊEïDIŲ‰GÉØ 3)BÑòIü˜šlÏuc5ÃhÒ™œÞ€8Ðýõ¬u«»ü©ðVÅ`MŽ¢®™„åAéªÀei‰³$´Y€o]w»Ü²Ên[\oä-K1qL+8¦JÿŸUÝ_Á„˜¢yјP?̤¾€å?q©”Y’%ñªÈ4i­:ò4¶¡–£c GÄž‹(ø€DêÑi͹P3(O9Ä¥ûu aÇ2gì9¢=–Ù3²Ä ÌÁ‡"ÛïcÔ‘4\KE.ž.¸9®eÓ®¿‘õaj ]RåúÕobl“꼡5‡ZŒ¾šæ@ËfÌ…ˆNU!‚ÇZº¾Zš€XEAµæNÁ´0äC”©ÅXˆµkjË…y×Õ€Ù=VM“¯=nÿB™Âcï•vpµúØß¿´ úXyŸ{ç}®äýÇçË{Zî¢u´öœX´§EᕨÏ0[ܶÑW&¦°| Š _¾|\¸—øUÖSe+XÐLǶ’úÕí9…­ºËa°’*[qÀn_C}ìQ { W€XYÔ2q6iÌ1 »#žüËb€u¤ú-r€ÎÔpµ|ѹ&îJœê.r£[韃ŠXLø¡ãáYñG‚ï…^Wž üc–ï¶i½[ïÿÚ±fä-F±ÄèLH4‰ m^}}ûé6ùSÈ&ï{·ìVα[q¦ìÍ6ýÈR§ï»Ëô4-Q¸ÚJ,bCœZÚYõŽff´4ÇÌDOÆÕ=~ϯ\jÀåtÙØTÏw±õ\¹S çz¶M«Ðñ¡ÆÆLÎÉj³x-_ñ3—ØKæB¦&0@µS çsYÕ¶ð s {ùÉ'nÕ¯®vw­DǺ#Û2 îÝÔ­PÐÀíRb£ä­{È‘Fñ=™B UZ§'Ò.€5äNESsû  ¬£_ùÒ»ËÒd Ö»²C½Èu&ðò°èð ¸Úèð€S$ÄGž³î™jÉOÖs^¦¦æå¡ûJì3’ï|1ìÌàVµô{z¨TÂ’›èÐwYó-ð<®Þ ¸¤4½¯„…¶‡"_WYàáwž'4N©7ƒd[Òoýu‚‹"á;pv¢c†ô@XjM¿h5»žþÃŽ´Ã=Û´Ûq–€½ö©"Ëиrc°ƒ%x´b#_,>%6:|Êoц—®©xII)]P4Xê"W(À»Ùï´Hó§‘úçõËfÁ…V±ò^ªiüþu!µ4'*…Õ¢;+rEùÀ;‡cFtOy»¸¼+.¯ÿ ŠËëèÅåu`qyýïR\b—–°ÂòoPVÖ%ý¨×ÙŽDgFoØ™"Å ?!žz>?„´ØÍdÙŸ6¹âõ¼ýª«@Š~p“t8³iý8µNc ˇ¬ªo‰®óò¼[’„Ømͪ-n­Ïó«.YÍzR¥mqRã4u£¨FeµÇ¬áó ²—¼Îôù:fè˜{Ábu8g0ä­òô)„‰©’’‚‚ZŽ&#RúPˆ’]Ròx{þ¸‰ÎljœàØ]x¤3„àd¤6iˆyj²9G?B ½[¬D¨6ƒx.Æêò‡zÔhn–š–ÎÄcÅ—ãÜÔ²…£8C|zvQ„Úa´†àaª;©' "î^Z¬@ÈnD(fsŽ”ËÇsgðúÏç®ÏÈb]øæ©¡ÿìbÌVêMaà'u¡¦Í\+ýÔ´äÔŤ\Œˆ@oË…Š¹oÅÀ /Krò:^áxí[8^ÿ;Ž× ÇkïÂñúߪpü¯püâ[8~ùw(¿D,¿xŽ_þ­ G¼²á[4þJFÌy!»I^Ð3B?†©xu)`VÈdaLÖ«]Iòææß¢¹i5IÛõ#ÉÇ6„!#5¥ÏÓ‘¶XGþ‘lÚš»&B#c°… BÕœ´»’Í&° ª…ɘÆqì2$ð›Ïy°0q÷yZ{ïEµZ›¡A¯Ëx¸Úí’TLóœŽå‹†,GÄÃÎ/¹É |P“³5e@ÃU¬ëí1­[¼³P Å$üÁc¶;vÁ0vâõ»´Mie „=¶‚.tdèÝ£ÅQçéSy=2‚ÃÌUdÈâÉâˆv­f¹) »GË£nŸrŠY²D #¼ìÁâhÛ#9…¢•màÐ2 -{0u-\[¯Óíb4çô{á}ºÙljûTQ{÷;KO ½Y˜ƒxø2 °8ö¦JÛcìKH샞‚ýêÜ–Ey*ÏM²âƒÿW«— ˆ/H»< ¤C±ƒ$£ÓR‹ÁøÒûå.h~lö»Ðæ@2à ºêÿæýÛ… †#t¨à[ Ú¡ …v¨Ü Ô o>Ü/m[žNçî1ÐdiáUÕóS]ârÍTÖdM zÉ3(¨tuq³ZI¤c¸¬©ÚÁ!íµ¸ôù¾äþV¨Ð–wbzP³_çµ$ôõ>/cÁ—9RÀTM·v]°ÄEiˆÅ€x7O^¶”Mµ-ö² b¦¡+ìŸV÷ï—‚¥3HãRðïÓZÁ´Ü1Öõ’‰ 9z}ܰu¡±žuMöÙ÷(sSH$Eí s,}¹~˜ôþxø2 ½nnaê,t¬QgnczòóÍýBÐæz§6Ðð&;1)ÀeÆùìŸõ) ÎCÅj§¥ëq$ôù"%6t_g‡W¿ÍVô¯Y˜ï^ܦ´ïÚH­ !s]ÓÌ“ú/U›nr² ú(à=°ëåå¡7Uz{'6Þ‘¯´VfÀuÔyÌ¢Í.@"ÙäéöÛ«ÇcÖöqZ}Yï¢àì¸0Ñ_”imÊÁŠQp=Y’‚]ÑlbÙž¦e¢àíÝêÍÇWŸ>¿ù¸xö¨9†ÄX²ZÃ!é*tpxp1¹¸Yˆ¬jë³oÕh O„Ð3• vGØy¹êp:’4 ä¡Ñž¡g"àöæö]"Dâ ð.d£%<úÛŽ{–¸¿Bz{`ÌV£%<~}üÖÿ"1\áþH˜,Í0Ñë¯óû5»ÇQq?fíö¸Þ–E[ƒ|½þÏÿøyý·ïÁ±†çX™3£ÌãÛœ©Ðåßþk™ÃÔ%/Ö¶¨ÁxŒií:6¶2ÙM®œ Ê<&Õq…¿þHDð·âšüèÒ|‡Å¬±ç̯6ž­LÊAÙz¿,9ÙáT­›¢,«€‘<ά3U##Æn>ÜÞ'½Üóò—ç»àÀå(«ÎìÉ6,ä}üøv¡@ç—â*tfýè2|&&|=Sá:¥ÛuóTlàÌdÚ™·‰!ý'ööê:±c]Ù¿øæ«gc‘}yº”ˆjìzð'[±¼îcÙӖŠ龨›'¤hø0/Ë'•z,ëop‘µe½@áœyƒ3Ç&{ ÛB,bÏU>ÿ¢Oweû·*dùgÖ™¹‘Káü½\ñ^tõ deÕz×l kjØ‹0ÉÌ e7ðé%[²#Å–¼z»º¾úàÿaëìH»^ä Vf¸BÏÀ×™œÉ2ŒM-ûq&Ù™aØELLã™(<§5¬VûÇ›î´õ,„IB͹b§I–åª!Û3´ïÊ„˜½ˆÆ›Õ¾3‡zk Ÿì«ðõÿ®Æ{ïßS]Ž>Û¬µëKôüŒ³(˜Ï³>Ƀ]EäJ¶çÎ?}«TTöðâ‘E š,©=Ó$”¸šu%éböKL¦Ù›2\mÏ’¦+O‹ˆ ÖÜI¡º ¼ëቦÅ)*-¼.¼fm3ývÝ«ÕÚ-Z]FËëÉí§·ïn»5éH·ÛÐ6Ù`{PÓÇ<èW÷X‘àMPº;emTF¾@­ó ÞJˆdÉh¨4°gt¼Ðý>c˜Yo¬>Wm(j“A$u…áy'º(-UºýFÚ5íIAyË6gM+E6ãŽtiM)Ôq™D‘Y‚½<­C›RÙ’ ÐPk{¶Ä,m‚!6°©Æ"<ë¶<-µÊÖÐþ„¢›AJêÉû››ÄºZ³³¡€;HÄ– ùó=?!²äs[Ò·iÓ<E=5….)*ØÿX½I_}Å’ÓÅ.ð¡ÙÖYøgpbÉ®7 þS&"e!è'+2ÝÆøÈìáiióØ•ü'ôê ŒH³0+;B_T¤q©™uæG2ÁI˜‘’–f‡gBðmBÉûtSgÛ„oe¦šVÇiz±èrá4ŸÎÏÓâp¦V(eZkHúƺjIáË]ê"]–Ý®ø’LàPƒ‚õíÛ»Õ"ðÈ6–‘Ýút8…~KµÆGª ø>qá¯è~]óÛrB©˜šB!)ªeà·kB†¥5K¿/|3úE±ÓJ ·H@˜éPðSSHô’¢ ŸÖÿ.i1üá°Ñj@.-N©V á³U_¦)Þ%‹4œlaaÓ×U•l;r F‹H&¦ú*%p°†‡zï%[ §4Ëã )%²¢æ?Kînp;7ÝByLõR¢Î°6]BJB¾§§*'?ñ}¤ØÁØœÛ:ÑÑë-Ñ(_U‚™v1c«OÊŽó=I[êÎ"E”|§CÆ‚ ©ýò\oC›^“=d^¨ÚJ†téIŸ¾%û¬jÖÛÐaüØ ¾ÐQï7÷«‹ëë¶ë,‚7tí|ï¶p¾WWÍßß.‹ Í!¾U(<Õf¯f¼ÍJü¨Òûy½ŽÁÀØ”BQÇ­HZ ~C lÊï1àM9ÀŠÚM¾"i øMSÂѧSÙSHø’¢>UMV4º¶ÊEò©H^¼_­>½\âÂÔΧöÄ×_9›Aò!”t\|)¿‘"¹-7°3‘ -Ù6H™Uÿa\h᫪Ñ0Hy¨ÓêH»Ay’—¢3tJ«ª[縹OÒÝé¾ ÍKèFõ¦„X“ìëò$7¹K°4IcÉž.<’x˜¶|ËÝBå§îV¥BQ«†È{5ý‡ÏïÄbذi ÜÞæ1Uàývµ,í#<Ùf§6…Û%,{8†ZµƒÝké6ÃóE*nVÑö6JÍZBâô&Aª1ýï—~½{šõ¹Î‡8Á¿a0ˆåCUŸÐ²Jþøü± UÉ¢˜/ƒK¬Flõ £çæ¾!ÛäëýD½hŽ)D'úFž–!õøÔÀ2EhÜl›5$©c]•T‘*‚,Ó¿¯ªª$ÑfWõÖdŒu55ñþþ¾|·ðœkU—;Z**L‡Î’‘ªþ›Æd’^f6¾?±cçÁDŒì 9àZjÅ€çpè}È5©rZ¸NÍ!Ê7Ë`G€ªÌxø,Âp·ß¶09©[¶ó.ŠIwB:?Œ”s{ŒÈÇ`Í ªû£XàÓqôŸ–+‡v|3Ws?Š>²ÇÙú’B¶? ¿´]ïq YgVFF~AÁCh­1w2ÄÀúPâ×jΙ]PßzJÉ"Q}'ÎÛ˜…C²æL èþ¨âA‡HY¬9³º?Œ…SøÙSƒ9wNÓÓ§ºJÂä–&&n·5¤Çú#;«Eºe7ƒÄcB±èÌF§ÿÃ)b6žEáßxÅk<áºáx,HÖœYÝÆB“?TGú#{îL0íÅE[CÜP¨›e›Æ£DgÖ™™‘‘EйXccÎdPÕEÁ#Ùð¹¹h<(ÉèôŸ™qj2ÏNYÛ³¡³†eb¤;é{‰ó—"u*š]j *¼Ng GÃHs(§àÀÑ“ÕÛ;H’K£2­$¯‚ôi!)©ªë"t”H\†¶Í#q0Xr#€êéßt$|ùò1i³ìDæaÙ–|ó“Ö –íÝN_ß~º]tGHakPã¼1Hw7Z³Ô¦ &‹´Urb 6kÍû©» ’pô.éöVGgà)‚ÈÄ’“!‚Èê¶;m0Šôå8¶ðKÐUœª5Äh?á;È´Æ´Tu«»Ûûdx´ø¶Zæý ;µb16å@ƒPHKîìáóÐ!¬¾jÇ€>°>CÏþZ6í‹…ÏbŽ­ !s¥¹ÈËß#R\í¡ªë«îÇ/p‰ãý‚—8 Ô+þ ЛC²¡(«„rß>¦ÃƒÒÞ£Í_äâúZÀÊŸÙûláMJ-ý5R•Ñ ŽÅ©ºÂã—§ŠÀyƒ“¼øR®^êWÁ÷—´ýNe1åÓIeËú°+cÄtSÌàÈë”,ÑÎXDö¤(‹ )¤#ë«/Åù¾%U„ë ´ÆxéU;øˆmü!â;šÅÐÛ´H6C|_v§åŽT´£G)ËùÆT¸CÈk ~l»Û¥ÊG@Û²"‹q+ÎùÓ*Ùq`´t£>x¾\݊שáEš’fÅb@ãœ~јrÈbû9˜éY´í¨jZ{êào’Ζ ¦®¬÷iKQP§»ìil4è@ÆH]½;(ù|õöæ~dÌ&i3¤¨qŸ>ËqŸúɲE U«V5~uÊ<…Ô×'Q¾ÛÁGe{L‹ß³>D=büñö>as ìk5L/rSôÓ^ðùùPÈ Ö'¢Ú\ ÛêôÔðû›ÅSAÄ2³ÙݵQNLh!³b¤jhái½3tÚ¤æ1-¢|ÙõæÜèé”'ë@»s±KY8pÍI»ÙêHCK› {{ñçÕ]òŽÊ‘šv™:Zá)}¹(‹YMÖUšÕ±hTì9òØiJ¤'¾LÉ:åt¬~ Eµƒä ÓbØÿà÷ú|…~"ÊK˹ÊËtGûÍpïeò™lÊZ°Ó‰ì2ªAËO¶Oš3»¯w^$vÇÃ÷;«§6ü|×ÜOý_i%Y0BÅãv:_$™ÀçŸ×׋œ½ùWY„vÉ((ðàû¸òݾíc õS9 øu™üy$í#1ôk½­ »uá©<³aèv8¯‡"3ÒôƒM®RÐ÷§;˜¡cÔì!ÛA“2þXIÂñÈfÂéîàªkba†êA^¦I;’Kì•f/G=ø]áô{Ø´Axæ0à§Ê“[;ØÄ˜¸Ø\ÜkŸ€àrÌÀ-!‡²~ŠA‹bË“NSOˆH=ï';t¾ÀdÈÝ™~᪳+Z-Î%²ižµ¨H¹ÿ(Üj …[ÕU)àRR:\‚·Hg´¼8ˆ‰ ƒ’9¢r|ÀÔ:ê`’Š»Ï†ü  )n2„eÂN>úpsó-üt“O£µŽN/ú% ̵ðöÞµ¡×µðlI}©öý[½Y#Omº Â91ƒ;()ˆÿAê ©Ë&©‹5sù. Ë_É1ˆ«ß^u÷o-ˆ"¬„•, ‚üd—<ãwãD‡)ŽÅ¶=ø «ÉjœøLÀ>Œd…™Lz*ìÑRMm‡ŽHÇ6° §£R†s©¦¹*«×a((ˆTœá»ÿtÿZn’–ÜÎÇÞ §ûÒ‚ðNÌ`PJJÞJ Ý6ÏèÀÅj[è‘ `® €/ì-öjĵ»kòœª6|ªÅbÃ…N}ròAÜÌE ü3©¸a›éémà`º•²Ÿ¹“Œ¼M·é¶©òÀŠ01ƒ?(©ûЮ®¯®WÿÏ’5â.É©êD|‘klÌÀ–5ÔE‰òæ>I‘¡VÅzKèï=»px½õ>/j´4{¢ÇÁ_%ÒÓe1×y4Ðu}r ógòÐ]Âô6¶ãþÝ-[¨[”‘ Q‰Í˜#+ÃXå#ûÅÂI@IhÙúPÒ6(pмIGV$Œ›O׫~ º\Põ¢&§²%±HYsäƒëŠcÃì§Ür<_­ ì'ØÍ9r"÷ &«ÌÈýxVÑ.L’oᣜœ"¶ZC01Õí>¨Ãƒek ÷€=Ùæ\vLÅÔš IU7µ}ÍSÄ´GMÒü´!§´8§9mÆÃŽ`Œ¢ Ò˜˜œ¼„ðÆ\.~Xc'yñeãqPÓ†ü-f1XD3¢ê«ýsÚŠ¯Ð~LŸ–e&^,üPì?G/?–ŠŸ­¥‚ÕK¨H \{5ñ#^,+H« D?¹ŽªÜ„±R p1qا‚\Ð>ÁöËÆEbIÀ««*,%}PVpÞß/M“‡1ØA ”µÔ3«,?—üH6ëcÙ´ëí‘l¿­»3·¡øíf‘tŒð“ñ«À ¤',}8/¼Oaѵ–ØâeßóŸKaec‰PeCHùX†Ï ,1ªéÞæ¬7eùí”ÖßbàÕtÀ=R7´l)¡—Y”¾Ù&:?Z³®,ظâ[€aì1ݯùÃûo€1›šãaª89WFŸ'|þØEß K±@¾Ã kÃIP,¡9èô úÇP xpô… }ò·e‰ý)a}WŒU4E:“æTu»a¸íj4Yö<ÀðsÞfïþK²Íe²â›‰›dŸf9‹® \Bp„„VÊ´ØÆÞ4a›ð ª’Eâ…H\ºnò1œ‘‘4¢=V>R}eìÃ/Z'CûqChô½¹Çž…eºqýëÙ'% ˆYd6…¦ Wd$¼cÎáÓDÛŠºƒ9ò»«›— œÁÅ8+¶o±]ƒ hÓ»"P®Z6Q?ÞñÈ$Ÿ™ðºLO0W Ô u^²p_NùÔ´zkH$g¦úgB«ãiÉB=yI8µƒIõþ HHXÂî\åÏYv?ÿU±;Ú×Û´ŸƒeXµ¼)ˆZ]ó]ó’Ì3“ W\±ÈË\ã{ YUèíÒ’}‘b—?ñ¢üÜü6çu·:½$½Ó×D`W2ª’[ä,8"„©>WÉ‹O«?^«ðуä!œ…ÛŒN¤­³í‚4O^Nò`R³Q•'<ç(ïØ,1©a±Æ`c˜Þ"Ï6!4¸”mý¯CE[" ì¨ÇñW µ—¥?aQ‰“(nãA´ S s¿—«žÂmÄKsÆ¢€D¸¬ÂÁ¶cª%…0–¬Úâìì då­ÜÔ¬}’‘Éö·÷D&fÝÄrßoÓyñ;\“½ÌjœÆÁÐUíY“¤bÑÁ}˜ºòµày[Kmv"uÔe©‘E’¸¾R¨®¯îÿ¼ºODÚÒ¤œÛÓojÖƒɈºªùå6yñG³g»äËnpKnû+Ö_>['ã~ÈÂŽK Œz0×›0\€yŧ ï٢狯W÷/9ýkð,2W!,©¬4ü4Œ fù…†Çl·ÈGPc׃,ÙŠiUŒ²UŸhËw¤)üºFØþö9¿‰í5S5êCc«¯™~¹®*øØF'%„Ó‘‚/¤>eït‘²Ô¼ü‰_Â5? «ØeˆÅì `•ôKÀöÕ7u?«KTÞ¶ŠPw[Sy(v}¤$ B‡gŒêÙÃÜÜUQŽwnrªÙvý^5O[¸„:NAΊùŽf’Is‚º7_¾çiú×àÌKf¯‡ôî¢×þ¦¸»ôDš*Ý’ñ»êšýs˜­vI‘×u} ÿ§Ïµ–÷é¶m¶eÙ±u–¢·_×k¼÷ciåCôŠÓ Юֵ¾Ø½sÊ%E~Ê"K<2ý„?aGÓD€î’Nê|.j¼¶0j¯²¨pÔ3úÿ‰­Y;3µ‹f„¾bò3íZÔÿ¤\×d®˜Úµ¸"í²ÿ—Ë0ºù0#¡.è£|¸¥ŽOc÷ÿ ÃòuVìKW_ ú¯Uiæ?msì”Vî;s?ß_€ |jÂ>±… i¡jGÒGV¹jÛt{|õ–À?"˜J[¾b… Í–+ (óóìBJÙî<•ËОò~•ð4;ÑÖz¤æþˆ·\~°p‚²m¯§Â¼©®–å!'¯¶yyÞ½:l«uZUbãw}Ç"ÂÔ ["k˜æ%Ó¼œÓTk ëï|¸¾OÞ ÑÏTÒd$|>Ðø'ƒ]ywd¸áÙd‡¿Îô‰EP#­WnÙŒ°hUŒùó– 9B Eá@“ n^³²aôOLÌù>(©ÿ"N¼wp\C9ÎÛ6ýÒO¢/çf+fï5:Fæo„”+œ`$n 4¹€óœýÚœ³|·nëìp`ËZî9a7c@aP2×.ä (‹# ]@û¾?<ÿ¹îþöÏŒE6«¾1·®Aö½ Á²?ZM¦ºBl¶G¯¯×ÿ,7þùi4cƒ5U2æÜßË3˜pŽ4Ùó›v¾5kú;ÿ,0±y¯ªéÿD„bpr_C=ÆçòT[ÒŸ‘ðâÞlÃä»FÃÈürÃÁÅ{ ñn.ŸÛ²Ù¦¹ïGÞjfÂXÉœ½œ3¦p8ŽHtùáèþ&Ý~#Ån½9ÓÛ l1›š¤Q4fÏ.û†‰zAŒƒÎ˜&·Ðt‘²cä˜Æ™¬9—g+.ë3Bpæ|sB´ËšoA¹¥˜AÑ‹›'T¨„ƒï!n£=ÖÍ  Ý$ß!Z]š³‹AÄvA”ÏœdT7fÉ;¡ñµ*>pùä1A{ãÕd¨/È~Â3$KuFf`Tf§±„ÂpB`™%FºÝ‡ÄôŸÖGØšƒ£Ñ4çK/àtYæH„Mˆ1ø1›šA¦Q4æÚ&ë4ºPÌÇAçL“cþhbV¸y“8œNÕC(²‘ê¢Õšnc>û€…5úö(®5 Éd“¡ˆ5c†þÆ$¯AÐZ T΀49厢m«ˆ¹d³6‡L«kÎ/*m4 ~uYè ¬‰›MHF6Ž9ÙÄ@¬'NCnºƒËNp‡OHN,Ì€äÍk¶ ââëx¯u‹´®v+Ã|§|çFSs0¦Š³+ç@Ô "ß]Ç„ª1éY6€ƒÎ7¥ÕA Ä€Û²Ï lîàæ@9¢‰R\= h„},›¡0œøobQ_Û’ì”:kØLéÎæÎ!í 7R?– tEÖ’ZD Z§lS2@ ÌÎY›³xÍ,Y;(]õ:a4Df ¼6ËC?PÙ²~ò'4í8x>±D¾}'¹ ïxÈkÉv•1Îï.P)v,âq„Nڼə³0–Ö;®óN¨8|þ o‹ >·¦ †ƒ‘¿îŠÉA7\¼7çÒårc¤73a¬dÎ*çRš³áhè²ÃÃû(.£% \G °¹uEÆÆ£ seÈ%7$59ÀØH›À¬Öf°éu™ö™‰»î¬š¾$R?šL Bs'Ò¼IZ§}I½Ï^ÃÛâ‚ÀmÌê°Áû— vpçw3q€øÍB²áˆ\Á³ÈA´ÅŒ{8løå ×yÊ_÷žˆ€}±óÓà“ÑhË8ø>SÓœÿ9[û«á%œcÙæ¡Mëiùr)¿Í7Bù°Åñ 71S*¾0%X¼•@"bsßX"anÉý&Bö7>ùßD!#:a Ê€n~›y#ç5¦pXeÅ™<þ£ÎoÓÊ ap¸Œçúæ©ÿIZ»Y@c-K.õ‚î¸"@rE£Íwlª}]•y¶ mD¶æAM4mÙĄÌH}ÀésÍQyœò›X˜ÃÑË›³D\ür﵎sGWëp®kW²kÛµ†0÷<71Žt·)Òª9–a«Î:#3ÎTŒÄ¯„”#–PN4àèv“¯·¤†ëܶ¡« [sp4šæ|iòëAÖf$„>àtYæ‰(Â×\oó §¸\>v’Ùp4Ž@ô¹âäýycÑZofÇXÉœ!½œ3¦p8ŽHt9âè~ܹ£I#ÇÙ"¯9“hDž3C˜)¡P`MÜ|lB2²qËÉ& q<°ž8­¹é.Ên^‹-@ÜÞ^Ôm«¬ú‚H}À³Î QU–yŒLSíà0õZ3™uOåÜaE@ä Æ˜9ÎXo&Vó¨5†C5VÉ'èe9·ÃbôÂgÌ:/Pí6b/Ek o¬:“}_¶UÒX ½ð³Ï T¬ˆ,vs8ˆèh,¯k˜Í[âõÄiÌLWp1–›Ü×™P L.«1kJN‹IæU$!3ÛsQ°Þ…ÞÌ Eɘ´0}abÎÂÑ8ÑäÚû¢M³nÞ7øå‡ÅŠ…NÇWs1À¼Á@Ü0hÃÚ:9Îv*t»­vfaŒµ¬¿1]Ö©Ùx\¡¶{Ïû¿+±çi·þWYø^mF ´*Ƽà­vÿ‹ : EâB“ Nž÷k®5Ù–5ì n½ócÆ–‘Isviû3“_ÍÅÅ4½#H|–Õm$(vG[[Ö§ºíf   J'»5VÃÁ8âð>ߥ§u]zFßÒ)\‰Z–¼s¬¿¾®¢¼Ô.oc\ë8¤Ûmyö:ÞcxY Aó|i×°ø=7RN]ÿL…Üñí´†j”§yy8°‘¶Î¶^T›MüÖ(˜ûÜLÆ C˜ûžë:ÚwO¹¸ˆ¾ÊsVÆlÂà¸FÁL9ˆ8AóÞÁqãÞ>ºñÝGm32绬bžãBŽPBQ8ÐM~a¼®Î›æ¼](ͶÎ*ï½ì3v (LZ¶ý<½¤;°˜\áè7õ¸ahËʳý7°û?ˆ›—Q@ÄÁù¿Ñ.ëVDæý¬É.kÂåf¯5 ƒqÅbß½àÝ$Kw$³ªËB(?þgmÁ˜59rÏ…üðE‚æƒJ“W8(t0–È–Ý¿ÿxåÓŒ!“šyðÅdi:ò?)yÎb@AotKàò‚õ>ݶ2ƒôP… y5/JÙGs)¯\¦ºdÿµÏË´eaª€e²b…¦ê8zë]¨ F°¾Úš­i¹z/4“›ûÆ5?BÁ9á2µZÞE_Eç_Ȧú6h’4Ú7ï"e¸ Ðæ™ã×)¡JÐìõ43j×™¿WE“ÁòÅî©HOÙVºŒ¦ÊÏÚ%nžW¡…l·Þ¤9 ô>F3¶L™*9dÎGªœ¼Ê;Ôp”Ž­•}ŒÆ»ºÄÁq·„ÏS9(?#ÃpÕ$ga ›#m7T†BÉ^q÷Kè³ãÌnaËÝž‡é"—\€!A³~¿d‘'ÙÂÁÕäò`©Õ —vÏðö©"±Ú2Õ–ÖNßsQàSÈ–mË£´úèµ&ìXe'2fkˆ¯;ã¢ã§¥ÓCqï= mÀÊ1ÍIh9! ƒÆaý*ö߯¯fg7=pHŠ6 f@PØÔK’·w«„öÕê,`v^Ó D‰DËìHNÚ./˜„?ø¾M h ØÉâx÷¼+ñTáœc³Äµ¶`AXë¯ð8´Ð„4HZˆ¼‰Ôs à±²NCp-™XA t½ ­4.=,UßµÅݧjš#;ü Vl²¼ƒ‡þüO `üsm¶¸šé!hÐ@ MMMÀ_ÿV ~©n…2<{;j}û4,e~>…4H6<²8Þ=ï0ÕG8çXþ¿2­Æí$X†²¿¡CŸoÂc÷2c]UÕÉr?Å .ÛN–k;%”eû‚mC¿b›mNö—ôÆÜlNãÕé.­_íH•—sí›Iž¿š¦^òÔKžÊòòKàF³4ái ßù~®ùm,\rrߺô¦Yô²÷„"¾ü=5Í˃ØL,"è ®©GªOÈÐ Ë­âÇò¬˜Ë³ß?ÛqÑ9?M ]ËècßÜ}Ú@<*ÖÜÕ'^¬x£1‘ÊÚ'Åëæ§ä1kÉ>Ë!¤XÉŽK6sXŠrv´k×2b¹é£^Ÿ«kÏ“»²5’ÎÿY»VfÚÄÕ‘ÐŒç:­2ü«…‚᥌ˆ‹}EmÞ K7ongj‹0XÝVLtiuf¼õ­â6u“ca¤cnuÚ¬<çˆ"]r«šfå9—ŠùÚWŸsOŠTM“3½Æ/'æßozµúYؽ€ssÿ™jºµõnœÙÈ‚4ù3ß´¬eß»úfíÿèz~É <Yoȶ<«-!#úQìÕÔcØtô†+óæWãâz›n3Æ™ˆÆö5Sµ™Îs¸±|Î:—Ò¾@°¼#Ï k:ó .¤{ƒP·¼ , ‘Aöwôrº× FÌošûüÊBšwü&ÔÍ/˜ÝV¢ˆi^rÓ›0¿&/ËoçÊþ.£yÁG®l¶>SÉ%õ[– 3[v¾ !á;¡nö»9*g5ÏD4ÆWLÕbº¥Ã2r˜ÉÖNJ÷‚΀ùiÝØíƒ„ÆöWPÔÛÝgEF{ËsmåHÌ<^îäL£fÉüÚ”ßñ/)t EòåM—ŒxüB†`FŸ°ÞŸ^ür,.T~JÞòÅ8˜¬¡•"Û?%¿•MÛÅdNØçÈù^•u -¢›îffâHI”ö0λ÷+hö©Ü‹æ%ïYöFr+MúPØNxç¾ @´oüÑì,’}cGÁâ»>ÑByòCq¤ÅÚ‡¤=‹duÌÆü-(åYã ˜ïM© ’@»žˆiß¶¤¿nLˆ¸ç8íYTJ´s]Ö@ÔóÆFH½w©õ}¿Úíä¬ÙgÚfo)»ò²Õõê&áu?,“GFqÚ³è”㣺LJÙaR/!eí_Ôô%mhÐxÕ±µ¦:ÏÍ K2–.ûCÌBsz•îÖ‡º<£Žcص:r@æ²9]ŽdøiÙ¬ôIvYM­ÂP‚ÉÈ3—sž:;i÷OïyçÊ ;;k(Ò yx˪4õmäq~íÖy9Qšú5ˆ íd@†îÖ9EåáèDMçê Ô; \Ìšo޾ z·hºÜ ÈËC¶MóžÛ\a½;W5Sƒìûd°§³~9{d÷EõÂøþ‚Qà羽לx¤Ê 5Ržbôï¼ËZ¶ÞáæœNmâÙH¨wëÍíuÂ’ `¡Šù¹-×[Úºœkâê¦^sê©"7pHS‘’4Û6è!\†YË*O Gµjª³c¡ÞSVkû4¬“uu$®sJÔÍ7ü§Ø!ׯÖщ¬l°ƒg³ÎÄA‚ùÄÇÁÉ››O+±•ÁêOvr÷g¤£õ‡K0nNnþ8"ECï˨F‚4£ÌÍèæ´utâ´µúpÚNL‘-ËÒsNoâÕXªwŽz›@?‰ö³D‡ÎžUÔzZªÁ±»¬d¾ŠU)“‡Ûœ¤õzh¢±êõTÿ)þµ„gãÖßîµçT=½s½”ä{6ïŸòðl¢¨wmSˆã VùÓõ&§­0YâÔ+NTĸƒüaÒ?D8èDÞDÇäVO™ðˆþm®|Qn}"»,u«¥FÕ©_ª`_Skr‚íCüTx´k±Dˆh_¶ÕÙÑã±ÂÄO‘Ü{w}ÿƸÂy$§QRý‘E˜OÝ\÷`,z æ´j:o•Áœð×m<vÒ nаéè¼²kâ‘ÍVMç‘2 NÍèz]g쾨^ß_8vÇ…Éû ¥3¶cxóe¥|,Øa6vá#“æXâ;­3&~Ä9o"‘—†ÄfÖûSZœÓ<È“ #‚‰ÂOÆ  нqnþtZª¯#æÞ*hæ´³çê£Õ;³_hä¹ 7ߦšz/%¹Á_ÄÄ×–çÜü›jêý“äÿ¦“V7ÙˆÎÉ=ICë¤÷î ÃÃ$mÛ:Ûœ'ñÛTóÃ@ÊÍ-UOï\/Õ»8¡ÍûVb.ÿ™U4{Wý¬\Fe̸Óèä£NUëåHûÙ¦uûjÕ–UòÕ-4<ñ(µù;*Þ¨ õ­;¿Â ™Þ0îóiQ ÚZUÙÞÝ~‰i]ö©c ´^ÑäÞøåm_Ÿýèô~ÔçÁú{n )eÕÃ/n^HZ7 ½÷ƒý%„ ÿêì˯3¾ü*ûò+Ú—o'7W­'4¹wä_o­ïö/éõ´ž(#&pÈm¸4Xq÷nƯ±Gx_\Öâ&*oºÕ8æb)ŽtSs¢Þ9:4QÔ»5ˆ>Âb† öl kŠƒíðå_žßüü“4­þÜÄ?xˆòÏ˵y¯&¡óµulˆ½?íÐ ß}¹·¾»J›ÆmZH«¦õ£â3ËÇ´8ˆ‰*H¡Ù‹SåþQ¨æ> Õè£PŸÜW¡*)ÖÍy7µo^Sï™$78ñ[œ¸¥š@ô|âãìXÕâ­TÜힺù ÇÅλ#M‹·\NqV³ö-ld>U[Q3ø'„¦U›¦d9™™K¨š³…ªžÞ»^j ®9 ÎðyM­T$ýæî¡¤eôdFÞ±Xߺ* Zà¹îš'WíF´žT&峯P\ O°yvÎ=´>ÑäÞ›?nÞÚßí¾ì¨×Ó{2^x‡æW™¦˜õ™—Õ©j½ öŽ&dí>æ®“Š’†Þ£\šVd`ÊP?Aê´VªU›x5ê×M‡©W'ÿ|¶æÚ´ÍÞê¶èªóÅßaØÉ]EAõ°KîBÎÃ,°›µuJ—<øQŸQ~<®!(¦óV;½ÞÄ«±Ôà\VŸS:>©Oi½[³±“£Z5ÕϱPï&<æ[ƒþaŽ5§ñ)höþÕÉ`&£°* *Ê.¹Ç÷¯·dÒŒ´“;z=Õ+EªwÎm:Ûc¶}v¢]™cgœ<ürgmޝ)S(_œkO>Wsòi­‘§ÙQ£jyÖÜÍ;½âÄGEl´5YšbÇøªL?;¹kÖU=ÖHöNëç¯q¾Ÿ\>Ù½TÚú¹…M;ù¢j¨Îôé½7ØyõÑĸ›O͉oªÜà£4¯îâ«—›µÎ9øÅ&|S5Mör7Ù‚Æ×Ö±EV&žµJ{|‡ÞWÛ̱Q5TOúôÞ•ûë›w(_Ü? Õܧ¡š~F“í¨oÃhêÜÍ?ƒæÄMUnðÖqæ[ÚÒ‡ç“Ç髺ÞkUXq]JÆûßMïyø®QÕû- *>;¬Œ¦þ=Üj꽕ägñ+꼿›»få‰ÇÑÁéñÊÊïa²ÝÍe­ÞÄÛ±Ôà¨ÓL=XqvnÆ«‰;H?Ø´¿³3ª–Σ^fävÅ N3ÇΪ¡úÔ§÷þ|¾ºyûê·7WÉÆÍ°‹EÜþžã"@él×pºí£¢1ñ±Kçgko¯öÄî€Ë¦1UCï@·m ÆÛs8-ØÚWiå¥ÙÏâ7ò`qCòýº¥:neF«¦º5êKaï-²éL}Rî'‹YN_ŸnÁÌÙ·Ì>N•EFÞe¸iwöÊѯfnÞQéý* :Bèn¡Ü;¹T‰c'u°€] dken¾(_ºô!ç`õvv)Å-Ú'¶Èç¦õ®»È– 1þ '†ÝÔêM<KNãg1~RQG U Õ·>½÷ ž |éIÝÒ©M¼ ®¹,°ž]û1g{7æ¬öbþ¸y‹òƒÝU°ÞV«ÐS‰7ƒsè~#ÂõýÇ·3Žì]Ýè5 Nìeº%£Ãú±[öhõ&.¥úÌŸQyæ¾6>»,®¬ˆ‹E‚ùEq¦çÎÔGSv°¼8¹aö@eÁôÎñ¢¾FUÕŸ© aÁÑC™;v†U‰w]zï<1ûòÏs‘U¤îî³/8j…Áÿ>–6D=TmÒ¿ËæUºÍ)Š–Ô{*?·yÓÁwVQ¸d —cœ“Þ®!¸± £µ—##U›+\ãÌ¡Zòr“æ~©êV§za„cÛòtJg7`tm. I”?ˆMªU»7 ˆpsýß¼¦Í•é…z{Ní¤Âß­49—Ô[Eµ÷â@Õ¶ñÐ˺xÕ„¹Õ¸ø…¡‹ýw¡¶²9«Sã;¯?&Ò#:`WF%ܤ ²@º@H.8øìï¬~„-ŒW‡CM¼¿pÍ7P$÷uÙ–Ô…äÀ|)šfˆ‡Xùwð˾Ã$÷Täã 蔚M!À±6.ïѱý«©D[?ˆÙ廣´©)ƒÏíoïýóŒEùÐè !Á}l½Tþ'C„ˆÙ§šk-¹2Õ Y£™Û\pøæóR™[óá©ð$pùÑQ(ñˆ¢òÅ1su,BÕu¥{cÅ®UífSº§òäÃ8§œçT„É€,[˜Ï¢¨órG«˜Xá£Ø»›vÅö±S ¨lª}œEoi¡¢Ç/G_Ý¿—G©Ÿ»…_X|éïáç@T½˜‡Ÿ{ ô§ocÈ,½õüµ›ç¯Ï_{{^¥Ûoó‘nñæ}òü&8=—çM"²jožÏr˜ÇªÂçÊ¥e®ºfù Rk’né&˳ö)97È$Ød]œÙǺÚ€´ç±QÙnЏÙàašøóýuRÂ6XÚ¨Accº¸ ú5#¿F ü¾ÔiÑì©¿ìª^žGe;J1Š!lζk:hCê˜Æ ¢¤äÑ{âêÉ (€…ˆã Ù±&+-M<Š'¾-©ØŽG6€ÀÁûRwú]Ó>ÔyøÚ"bwR}”ºƒ-/á´"{šn·å¹h#B„™AªÏêиU¾¯¯î"Ö8𢠄Ü8aæ5‹Ãð­QuHç}ÐFx\ïÕŠôõó{J3\qÌwꔺàåÇ…YÜѽ&Ø¿ÆÑA¡ ŽK²¸£{M°£ƒ(#¬¸¯(X?½Ãy„rãÎÖÁ•¬ƒ#WSëøIu!‰ñ'pvÛm^[’ÆúØ„¸NVœl"xÙ8»Ù`ýôvçÆ€XüÜ«Dø2݈Ÿh’bLºO*H?=gýÐó}\ëÌkg^cyp&dn?+'$1þøV7älZ…«h¾“_¸i/*…ðÁw¢ 7EÕ z)ÁsK޳J²¸£{M°£ƒ˜–'`Æ=WÃÎxϲ çW@ á†÷ÜrVÄn4Þ~4HG0…Äw7ý@¥F>|;o˜ £K5yu$9*fàœ÷aº©Ë^ª?)~äsá¿Q‘nu&Ù‘*/Ÿœo²Ÿ'ÙægZÂëyæ|9øG/0¬&=fí‘y9‚qb—ùµ7ÿSuK6HÂ<7Rê÷èôp’nhË& 0é Áß{¤ãòô™›‡5©Ê&c7xx9Ѷx:ÈN¼í“2õrPí[!˜CžÎ~v1º;I@¨ØAH¹cZó`b§×z@P+ÌjÒå5M²¾ãÛ6p ìÑ‘ EMOB'ÄÏ|Ѥ ßw ¤-åê.š ZÝÙöHóò¯sVXŒ$ß«<Ûò‹Üh¥RÕ,aͧÖÔÍèdaq‡w³­³ ‘á½øÇ6/;?%W÷7M’>¤YžnrÂÂ|Qf2¹¯"ü2cÖ»™K¾“­HIÍ „¨wô¬AvGŽhNÜ—»Yß0GlæôÌÞMOÙêlyTæ#2½Üü“àÜ„Püа99)”Œ.ò iªSÒËØ²Î¬w¡ÇÃAËL!Ä÷ß“–V|ú—XÁ—|›å·såæ"hØéûýL(SСäAåõêšä¯w«ÓGÏ-s&R™ù·Óô í¾ù¸0Vµø!ùç¶ûcLØê%­­Ð >XІÖìmJNe±"›mš²žÙ&5\Þä1i²‘„ö 韃ß?ÑÎ|S*×ÿ–;äð¡J/7—ó P7HÍkZ€IwI‰b¼âزìCv_éßÛ6ï.¸X_'š_¹Üè›×¦<ÐrR•»aÑÈk;ÅeEŠæ˜í[÷F^£ªw¼ä; é_+ö—SK?¼Í­!Uõf\DúàÞ\étg|™mºIŸª¯×žó‰Éš¼Â ìኤ6Q©èDò<-Êïö÷¥Œo»bsï*‹'ì QþÖî—Ÿh‚Å:üg¦s÷gY•ø;‘KH½ìDÔãWWWI•Ö7ŒoæÛìwîŽ JFǨˆêØ›÷o];TŽªYÇÕı÷кöeæÓÝÿü/ë¶)Ý›Ïû=”Ue™{¸=Q6»?ˆN`°$:L*ó9oga˜5L~õç5Øæ¨c޵Ç3t/GEº˜U4’ªÆµ”¶ôŽ€Ìûˆh1§gñ^_1fy|š©ï›ó3’žQ3zl MT ³Ã ¿i«oÄ1–Vëã͇[éÔœCÓÇÌú¹ŽpXë¦8çéè#bá¡j§·ß «ºü(èò0* j¬‘&ø#ã°)§mD2‰ÀÑLŸH}!EžÇô:ÓkL¯ ˜Ô8axP[ìfÍ(¤³êó‡Ðà¸ì€Ãê›MhcÏ^‡£ôÆ@4Á×ùSêÓM–´ŒÎƒÌ¨OqE{ÉUÒ"Øo¶uµòè++šfÿ…ܨ)¾ÿ˜¼`é¢"´« çe,Yå‰eдc¡rêwðöãÕ‡äëMøè¥h=¼/ÚYÇ‹vT†à’µ)H­Æøã³¢ ý<5jZ tüúf ùÞøaÕ™°!+¨y\ð€.Dú3lÓ¤3IËè:ÈȹÆÎjG«ùÕ~òMÑ©‘Œ„eHU•5µÝçåcwã@óB$¨ñ3Ö4ãèÈg³Ä¬á6¯Þf ûÑgMxE©Zän|Œ®M;Š+#Õ‰û/}P|E¨Ú NŠNÝêºq¼Þ³;jtÛ÷5oþ«ôhˆ%£“•“Ææ÷r5ç »»åX6>ƒþ‰®Ñ·ARuquGÇtâõÌšŸ·?G;Ř{†oWhµcÁ^K_êe];õLRKýp^Öú§ÛÙ x¯§Úf¿%Ù±çìü½Ø™k” Õ5ûÀç÷¼!ŒÔç0ˆ¹Ä1ñÐÉ÷¶N÷ûl»ÞæiãA¿NÝèûHX-:_xbr ‰s^Cá+hùrwXÑ4úÚÉ)÷qìúMkaf´úÉ,õÈvPûñðÝÏáï¿kæß¾~WwdkÌ?þóèîÓ dôˆŠ(ÙûxLÛ‹ž›öâ˜V¡ÝiM>SNiâ«ô±ÿ¯ùŸë턈‡ýoë]VSÙù-¥Î†8.wIU.gÔº;Ò^UUrõçŠÖ­ò¼ûZæç´Õb_ƒ(@W|ïÞÛN÷‰™µ¦ì˜Aã wjc©¤¡™P¾§z+¦‡Å‡X‡C)Ï!ê×á°P`u®Á¢hŠ´jŽeëŸGª…9<½¼¨U§ef]bW帓wÜÉ«ÇFg”äì“ß<¢L+Ò£¼ëÒì¯)Òuÿ­²´YnP×’9eQ/yiT“sJ`IVå¾…‹ß†fä“l^ØçÏüxxÇ]qwêVüW»Ý«Ï,pJ_vÛò[g”9q£BÊ„² Ù@ d^³˜7.˜v§¬@@\í ° Z(| Ά+.a_f`]™Àã VL×5³ o˜¤ ží‘l¿I» Ã2Îd ƒr¢k ÒI'ýspm™ÜÂ$6̃®èKÄaÔ S(FŠJß´'àOú žzù–3L¹õ‡T¥Y\’!—Ì5Lk#&÷TÞ&b†ÊÙ Ì~ËV"Ù¸] ã•T² &É®»rGGC íÒ˜"Nì  `àô§xLhn¨€“ÿY›¥tü×¢PÌà°tJòĆTÈDù. «7’ Ç”/&Ç:,lRÉ’˜ÔÁ‡Wñ4‡;U¶·ö}ãÁêטžºÑ‡l™ñ›Z>@Amà¤Oá³ùH`)¦*ólû„gbƒjP²bÛ²Ïô+j7Û?½ª L‚¾ÚQ3ôÛýû§UrÏL8`îæ‚+F0x;Líg#|pÕ¤¡M‰ƒolÌg§jÅûYÈt€}ð6´ûÎŬXsBÜéZ!wP“•vÉdļ>ÚZ?Û?S`aÀ›È ]¼²Ë6!,I 3Hà/0ƒXw˜ºBCåŸMrÇ<ð™ÚqÈ´ÙaÈ,Óp3Ùj?™Åg] 粄…² ÿ Þ%IŽ&u?Ás³iJ ûá¹öƒ32Ê&yiT‘óäÓÝ—«aŸ(I¸lÒËb`‰ÍÀÄ¢mÒÉNð…ù~c2ѯ¨ï>·es®ª²f'PËožLf¬X&JSP ,/^QÁLh1nÔPxó>…br3Eq5$"ßÔeºÛ¦M»Þ•§4+¼¼7±APUŒE¬L¸ ª¤M6š8ØdS.¹"gÂÄX·Çžû¬¾ •$m„B›·&kZRÐ _Æj,½XÕlÏï§÷Â2V¶¢fTà¢9Òç_šº{I± Ø]Ýò9m°“½N¶f!N5GˆA0¹€µ4ðÀï!H®oÞ¯ÄU <ÿ¸¢ð.!†âžšB–5ùÌŸsœ 2ˆ_bQzcÂ!˜ú{«–K¬§|º¿Ã#ýYæ¹ôÔ}ưHm²ÄÀSÞÇÔ…ªnÑ ³à·+vιa¡T¶æ…ƒ!Ð4ÝN‘p!排´ësén÷J40±†úÐöK.$–d“9ìˆ){º¥RC¼@BÇèZ—Ž¢ü†séiñgë»óé?±U¿¹±ªË‡lGvÔ2ÙÁ>‡ä˜>ð/m™ή"õ)k Ð&ëvds>x!–5mx™Üí[ö˜«\äÙ&ÉN¬' ÔH!u0²æÛº¬ÖÈç XIâÆï ÌÛ±à¨T8ÂH,þ °Þkܾ¢%æP$<•,V÷1ûrŽ£ZÇ0Ÿtú)á³Ü?uŒ¿½ë>,¨6KtÇÛ3-j~ÝL+Y~ Ktøy2mÙt¯Ö(Vl@&:ÆÞó ™0É â¥ÑQAÿ×K Ðïl@RcÁ P–7ƒcR•q…ÅêEž’ÇšA#bJ3°¾6ÍÀ+^í·•šý¶B¸¿ßVSWmZ·?ÑÊŠ}5ø±¹äýõ}w….ª!€-ËÒÌ^@1³Y²¢Óéi:nJ»G;¢é{ê†lÏüÐ#µx1L=¢‹èžª<¦yƂΆÿHÃØ£K“NÒ Ñ ¦½×çêP§;â IgdÓHe ª“H: E¬îJš#É÷?%W×ô7”kø&£ rN¾oÓíÑ£¢m×ÉNQ½§I×,©_t«Ñ5Éùiºc†™·ß‹âC Ø "+*Y^ƒŒ/¥w #—rÂöïøÞ®IA»ë$ šj…¯WÒJ’ÊÀ˜#O„àç¥ІDgÐÔŒ\(]G©M %]06Û² ËGÙ!“˜pÞ˧>ÂPË&P°ùt‹·82€wÝ©yvñmE¶Ù>£Cæý=hÆgKûÍm^P Fl`U•)\.1l»sn…2‡c-6ÕyçW׫ȧ÷×g÷Ñ›9ÍŠVו͛òmvjž²§mwXX0¢ûãÍ{w~+¶nïçöH×ê4—4÷öŠDˆ`\n¶Mæç°¤iu䌃&^ªÅ°ío×_p\11‹ W0òÎvb˜OÂ?Ëã.³y6 ²øÆßËM¿w áü7RoH]6kú圽ÈÁ„ ÀXa ¡Ïû&éd&‹ÄöEoóÌ·Û<Õ·A‘¤5Ï[¶Þ‰Xǽ=ƹª÷ã­×EãW¼ÇºV¹äÔË>> ÷´Û†„4fz†Å×(k:Þô[Þ˜ê[a ÒÂËCò^$^;~™Ø ÇZlÈi|‘LMÌ€‘º›h·…/·lÒ¢KgB&)÷¬ï¹K1ÝÌü\¬iOÜï ([aQÝ>4úôãw ÒÛ“o5éÎùzÒVÖ?îè·rñîðª[¸j”-iy®·…@¢jš‘%½$z †½Ã±×ƒ,4§í–ÖŸÿ(JcÀæ²,®YéÚíXm‡ÆoI[—ÝZñ­Ð€½n!zW¯ý‡T6KV˜:=c^p¾ýl>oó.ž*ÝæÌ6¡ Ó вõûðIŠV¯©˜ôi€?^±€GÝ}7ÍcÖn^NšíØ|ÖhlûAwã—ÅàÛüª„¤hE°;i üÝÛÛaÈyðKŸ®³ý¡öt\ѶzßÉN·â‰I».JÔ0¾? k-ØöÞ†¬(ÏaÐo@î|gX/‘.£®…FªÏ¹Í…ÍŽk.Œ6¿¹9oà_ÇGêsŽsaô¾ˆWCgþ(•]yz„jœ ¦ƒSê;=wb¨˜…næìcdóÑÿJÏ•GÓQXÕÃR·ÂxË í}fçBáö7*ˆ*-efç»[Õ¶ºÞÉN[AiÁ;-fÜ}¡ä¿½ºþ˜¼Øe gÒú)á[´ûp¿yÖ´/±h›?Öf‡EÚìæöUœý„ÝŽ]Zầóñ¾çôìPtßÝ/÷bÆ¿‡“gx8¡jÄÃÉ<µ|÷õ¶¿,ëkÑgó÷Z51çÿ `CòsÒnl—~ x>,ª‰Y,½‚˪C`á—”®ŽsϰáÅã,.”p!ÞùÄ4¸þG“°'‘ ¤ýÞØ³FLγ·3Öõ×ÜÏyõ–·–B á6DTHwiÅÎeŠeÿQûœ54£®n¶‚‹%¿ŸÓ¾å¾Í(ò™æ%’€(¸=àÚQŠº#‚ÓÄSÌ(˜mMüÚYÓ äŒ(X*¦ýu.Û4d‡ŒÆ€ÕmIÜÜÛJÙNðŸK„í¨à5©ã÷O0ñÆWƒE¤iÔ~gÏNBX¾òrSQ¶9Ú‰þ›œú`îxo£Pµg«*ÄNͶ Ц¾?¿[}[ѱY˜µÞ@²‰"kÍ™×ùË/ù‚ZQìWî·¤n³=\¶í9õa³dC¥Õ36ký8D–¾têÂenÚ¨=¨ÓÃârlî꣰o„6¿Œ¥: ÝÔ ¢¤¦›2©”ÈˇŽÏ ÓæÕeÝÇóƒh·fÇiÐÕ]£N´›IÂ.Ò*/!Ò)û¯J +´‘‚æŒiÅFF!߈*ÏÒ‚‚d:—Hd§¬®=—ß&êsˆ¸ð }&ÂѬþ”cyÝ2y7 Ý&“,äù ig€ØŸ{BbõçàËa6ƒ5Úšé½Ù3µ0wb«-víÄ⣻šížëV°Øu=Ð<´áƺÙÖi…¹ÞÉÁĜ냂DŸŽj¦Dˆªõ¹ÚùF6ÒÛ°âkLüÁŸw´0@šcÐaò©¾À ^$%ì-¬r8mºZý&ºÜìb¨ì[‰Ê(~¸™E Z²qÐýZ,Y1ëôäËóF'Æ]q2T“^º}©t\J˜Ø§Y^ú†×0ÁàïTf¡³!~½×òEýà7s<èY±=hæˆW_o‘Ž…D˜êÏ8jŽ ߨßÉ'ôñÿó–M z–#UÛæ{/«iﮓ.Íuóý^}˜[œ¨[ôÂw7ÿ…ÞáÄ u1‚ü|–´g]YƒÇÆ€Óê;½Eú©u‘=_nÍv½ö·óa=¯KÏsªö&kÂ’ш›,_ö/?Lz6dІ±·+Bvrx<qgç LâÌê`0!T7RX•¢T@™XAà‘¢^L@þþiøBwãDˆ!°ðp0bÍd‘Kæôón+6ÓO¢Ì”µ^®¦ù{2ö¡Ùzn™’5­0@nêüWö˜—¬W¢\á.‹îÒ­€1»ÕÔ,¤‰¢ #4Ò|‹s>¾Ü¿oGØðªM›oaˆ§†Px%5 Z.•0)O¬ðŸ‚¥¡/LÄš™Ç)+™P®¸ ¿7q|"’Ç%QTÚ,Ù¡jô̇úDD!Æ›þ-¶ƒÝ½Ë;Ҟƛ>ÒÞW bï1ÍZ8«2» $½PÍØ°L•¦ˆ¦2—Iò±,+>i’&ÒvQkò×™4mr¦_ˆ¢(öf³&9‘Sz+Úôå™çBùDÝŠ¿ÖŸ«€ÀIþy—\ Âù¥•竬is™É™'µþ×Ì’ëšÐJûU˜@ócÙ™àö°uë]o±I‹¶¦ºöÉÉUM¿~Ç….W½ÒÊíð-»ïÌјœ­êå |©SÝ[p±âwaÉN)­eEÙöÍ%Z8(ׄ ÷¶G%`dÓ‡aÁF‡i[´%ÙÌãvs|b³%7xéGQƒœÇq2åHH£Ü¯©ð£Û‹. ~X8ÓÖ;bY›sD-”íÈ©ÌÍÍÒaœmÑp·GOÌíQ‹¾Mt,–g ®Ò¦y,ë]7ÝÍè×u ÛäÙØÆqu'Œ'’M·…°Iîëòû“_•q¤-0‘h3v#qjÆV„`ßoKúpÜ3ûzæAÀa ô*ˆ³97&:e-þ>q(d£fÓ¯áw^ö‘ÿ"‘ 3êHÅÈ„­@ð[8;I/öé6Z‡B¶å™ij‘Ö„Ê@ÉDÒMyn§MŽÜ¢ø†ÈÅ ¨`²¾“ñ«ù‡¼Ü¤y$¬#cnH¹ª §èº >ž°¿!rÉ”nP´öžÅx…íÅðF‰_Ùs·çŽw²ö7é!±þ£†ÉúÏ6ë ܹ֒ùÛu#bbÅFÈ -êEöf³Õ»ÏÒ¹òðZÀ£‹E'IkÕ‘¢± A<Œ[|ZÚ´>6*'#“>„pól¹p*Ðñ½œL¹AŸÜ­@fË ÿbM¸-a¹˜4èVƒ¶ðp@ŠÄÄÄ¢#!ƒ¾ˆ$ÄüZÑÓáÔFo´FÝðMØ(vDm ØáØØÄhº36a#†¦ŽIIãsuàs®ò2ÝEâgþ ndYìÙ˜cjÊ ‹Åîox[’±x\9³$…ËÏ þr1ÈJÍØ¦%‚ iFë‘l† Gœ¢£Ön)3úü–ѰSS36ºØÁ™ÑÄÎÿýïÿÓtó]«ÕÇs^NÇ4œÍ9²£9Êa˜áâDt';<¡s‹è> ômåBlóáƒÂþŽÔ<«MÌU¤€å#‡u£€•‡gŽÆÜÐjîrWÑŠ2/6¨%/š–æ6Dže»jŽYñË€H ^1ÕÚ™Å=ÖZx´Ùéçéà ò¤/ÂÝ;®„_Ž#V…Òæ©Øë²(Ï” ~ÖÎmÎGö½AÙÅ’ üÉÆåžiŒÉ”ûÉØcâç_ɬˆˆlW|òâêöÃËKnÀdn$KNÜ€ž¾|”Åî ±wêì_b_·ØÂ?åÄŒ Õq< K®‰÷/ ^7XÂÃ\~|xUÈú·ÆŠÈ(«ÞÎ¥7ÖZ¥Õš…¥W(»÷.NêÌ 1þ%ÉþåÑ2Ú7‹YƒìçisÄß}çf ±×´ŽáWo&䜉¡‹¬Z;htÏ´´Ú½.lUUc t‘µTÙxà2ªÉ”ÀåO»·D[´D£~îeÀñ{CW-ÖxŽu¿îaK~+h¬Ï¿Ð׿9ÆŸÙž™•=óuÂ>‹}Ý[c­óYí¡9@¯îÅXÖë^ÚOáFjçµöÐŒµ­“eÝì±_{ß¿(;¡/gò0蜫[êŸæQ›z¸–7 ¡s¤vƒî$ æJ;ä–Ó¼vWEL‡ÐÒîöðÈGÚZàÓMáê¼±ß`+ʺˆÙ˜+ϱÒ¿2p!Dkx©åî]Àì}mŽÆÐ@%U[»Ö…N±*Íj_¼± z¡|žõuîŽJfù:/ËoçʹÕÜzeâé{E‘ñll&ÑÝ×å)Q7óWz² ¾nwŸ»6Ÿ5–|רsÀ kó»ÁDie¤ŒSnÊï³E{ÛIU*d>¡ ^6}'Á%ÿÇb½ØÐ.øí`—õÓð ÷:½nŸ ðþîI²k2ÞPüÒ Ësm¥šà™<_v,Zç„Iðì÷3oÄ ªI{®i¦µá•xžSöÏ:=jr@íÒ™WÖ:®ˆ2ÿù ,r _Š¥P:G[ˆUâ㼬hqœ‰INÿÔ-¨ aí·< X5E;žÕÛ3æôûœªÍy.8ã>òÐBàø"Å…bp13LVBL$ÀO B:èc Ri$6*éJÜ«‰œjÀ°Á’Ågp‰;<ŸÂX$, oÞÅmªÈDq ýŠ¿syµ$JßJ’ž%îÂàw…€jÉ©Ê=?¨6CH˜½oÒ©xïbüfêÔ ´¤„ƒÜ… ÉiÙÓn±çFcöK\ø—/a½IŸ|(˜h[²vx"‚• ’±f3(xÈlpçžÃŠ ÚÆ<ÔñÊŠfXÐ 4<˜Ÿju!Lœ‹¯Fcuy¼v HT˜bê[2q{i1êó™ÓïšÅ’¾ˆ|{tSõyDóý9‘ƒ^Ý9Z‹Öû»?ѶÀdíh˜œßÇ]r'¤‰0›AÁC6ýNÿ¦?¨Íwhì{QŒKý\j iÁêœ,on‹»IÀŒ±sj…³jîv5D§õ¤jÛÀô²& 7ìÂV Î(Ò“wc¬*[1Qc^PÑþ:8¥Å6Èžk¿i¾†,-!‘ª°,á\w¡ÆÃü¿E×¢“ÔèRÝ/)…{Bv^î«Ú6½¬½9erÉžÝé¦<·9iýáŒôgqi $.*äkh3„„‰ü"Êxý¿‰üÅUZÜ®¬> ’ c 1A_@ž]´‰ö<œÙ.š@ãÓE“Ü /”Ž]4g@q¬É>ûî…QÖ´Ábr¦o-OuýÒŠ ‡k?¿GºVϹäL.)gêk¸HÌ{Yd¢m2ÈÚ¡€\ã¹R£.X³êÍ Àøîã´o—SUžË€ù±?Çà5ò§&ýaUÙ†¤ABÅüZàÁ—Øh Ùüöý[ßšx¨*J⨊,“,©å;b=ÆY¯·žä w .¤#fÜ*ùå—â’HTp^ =tf±¦lŠ×|¿4H—·‰åÕªF` Èâik¦SÞ#Ƹ%šDO8Û6‘¦áÇ”—:áÁÙH8‡WF>(¯>¦ÌÑÒ8“i†ج50i+Œ¨gz›8˪ÜN´S"øÕ/ɯÙ{¹^b·Ënü0²- ªdÞ¼•Ç ¢y¯Êj!ž'ëë?ºDxÂŒt]E7±@Œ`~å¡‹bq,öûúÖÜÙÙþä˾ï»â!?í;=qîWaÂÌÇáeÿpæ#*|Ö™¿ç›§ü¸uº÷7íxºß“w_z¾%¤&ëm™‹ ®sXÚÆ~°Z¿ÏT[kF­7W,ÂÌLÀ÷ùÚ@“Áø/;‡ûØY«mÔT›¬f?ÞùÀsáx5¡¹þÀò˜© "JÀaú\6WEGz¸ç,ßFÎ@†£v*Ù5 ÙsXk‚ו|žº¦Þ'û†õY,Ïÿú_Ç_Ó‡5µ0îªç{sÉB“´m|»3‚8-SDôÚÂð"m>SOÑ[aš¬Ã°S#Œ>šËŒ¶ØžšiÛ–&ˆQ£4þ ¦Ì;y× Æ­8þևȺɳ~ǸÞ´A¤Åa³.Ó³˜ºõÍ=ˆ^õ¾Ü¾EZk7VÑleEDYÌRÎWÃíÓsñ-#­íË*rk6n6Ÿò|6›º¼+·Uùï‹[Ä3ë Ÿ&—‹ÛùlRÂ'Fš5@pXÖ ¹È»nÊ,‘óŒ×Üv&3}=齤GÍÓ<ç¹iÒ=~&sp£Ùz…9ðF7Kɯ›FXpbžb×5Ÿ¥^²Yªm0ô‹³I‘µ—ýÑæ\Uƒn„%ùœæÕcdݘ F Ò4˾œ/.aYSf3ñà{¡ª§ü¸qíÊTaÙ…¼u.»¼"){ÈŽÛ##&ëßâÙÌ8FîûJÁqŽú.ï—ëåœÔ§ .cÌcA°rîqà˱/»Šf‹5Ѐá0Q•ÐÇeW¤p!ùr}™È|³Ú|"ý„¤$ßÀ×üm‚åf$·ý=9G)°Ü Ï­9@ÎY2“ $°¼Ìg™æ²ó÷ºšä5µRæöæï Õw3s¸@Ñ{!ç|NO¨7ÞáªæŠî%m/6ÍAlXL"y<6:'Q|­[2Ð.àlW…ú‹÷Œà™ßë™ ÈISl¹;ÏŠI%g—pð{ïi…ˆ6DwB3k†[‹. üÚ®ž½×r¹:³&?ŽX6Ûåå´ïOJÞž=_ eLÁK#Ï}1F¥{ÕŽyß÷ó:X…¿SvQ™ÑƒLØ{a#C3:È—ø …úqq)=³/±uõQi'-Èë`Å" ‡ÒÑÄl+€™Ò0»?½ñ²CÞƒœ1a¬ 1ü¬ðc“ï݆Üïëí³XˆŽ.m;̈Y¡P±åoEñ¦ë](6¸ú+ÉË=\å\G“­ 3Tšm!F£©¦(€è¶fÁ1¨/Ä3¶‰™!üXö¦Æ£í †åü”cH«ŠÆ™¥½ Ì'”ã™!M(jÄg–vðvσ|y÷FwÑÍgÄ“T0çØWÁãÏ8ä•'Kù%¡¯Å¤1¼ÁÛPóYéjÜÜ"†üV+Î3Ãs¾¾6ø¯<¥ìl‘m+~‹J*>w\Ž~ƒM#%«e÷§û²ä=È…¼žÂQ;ä½ t:·‹º±žðm·uß8êÖ·]ðœ^|b[ƒ.:ÎÆ{H|µ aWÿ>oŠCÑåûhcì0#†„|úD*¹1ˆ^^EØÝŒÒ. =›æTþ¥RÖáÌ\ç£‹Ø ?bšÛ›[lAÅÝÌB ›)n¶l'ߤ»,#Æõ%ôé¬xJ³uò 9ºùäÝvx6–;¶ù ÅÝÌBš/íˆæo§!ºç ‹KÓ<Øq|û0Œ±W³ûÓ‹n"CyrÞ#á®ÔD¢–ó ¢nKt¯‘öIøV{7}Ý>¾•ØqƬ0HsŽn:VÆA½ M¨h`“š²;cGð6´ïò®ÐÜp_&º‘ ¤GøË¼ž¬b›Q_ØÅÉ»ïAŸèF±SÖ—s7»h*¿>óYšù©{rP¡¬Dê³ó2 ¡›¢kÊ⥀>ø°«Ÿ‹j”:jîó»¾òf¦ƒÜH{õõç{ºý[Bø?>BiÊ‘`UïÀÓ¨kj”(1î^R6uUnß{ÚYîãÙ‚á²Q‘ žTäÏ—¼+>œ9ûS‘Þ°²Ì»îŠànŽa~Z9M3Õåe±^W`øZJRMÖ»¢êàä$Ë5^ ÛºðŒ_ë–´–ùèK²Û}¸Á8ÏÉòj%®›× œz#z3÷Nø¡Ø,tv¹;Ƽüv³†ü¢YÂ8ÝV3 ›Íгš{fŒ).òŒóæ=Z€Z„Ù“@ÈpLZʾ‚,œf\€]ŽÏæYwo)‡ =?)­jFëÄãeé)™d‘¿1ŽúøÀƒOM©>€ƒ¿È.ëÂø–``¯¦°÷&î(÷ξ+¼ÞöúJopï„˦åm£6îÜœž®òNA Ûƒæ?Rê0ÌÀë$Ø%Tœ÷ÄpwÒ##¶üÆ¢\¯Œ4f¦¤®)·*¢& ¢æBQ3Žì–°lA+“~A°Æ¥FI÷ë2ç4Y¶œ—ã}2wìj"Yò^xVËÆ¥ÑæGc)’k&ÒÆ›>£Õ±[§ÉܼQëö÷ÙS‘ïqs«*»à?›¼ÙŽAîaã¤éÉ!©XŽŽ ÓŒÆN$+±×a²¦]µÒ92Í»_˜JZÍåù††ŠÒBá§Q>Ư»\rVC”øÿšì95‚WÓtc<ÂÍKY aå43þ¦^!hËPÔb’±oÕÄZðó-—2“V=ÊÙÍ¢øµ¢Â³<àëÄeb¾D&ÙQÖí„‘4‡ØÕ÷†;vÛÀ"n6ªŸYVo^ËÜà I^¤£¨º *MŠ•5pšF×¶Í –#~»OÕxˆZ,à¿ÑÙFÏØ ´µY„׊.e¡Gó¸´oq»+‹Úf³ˆ[ùh™Ä¢wÇÂvR2k¥Èmïq’BÆÅ6rëm(ieÅó¹˜Äo¤…­|”¬ž”bÙxqsˆÝ1 °Y]”¢×qM²VB2§ŸH*>,\¢W“L²V*2§ŸH*>,œÐÇ,Ò¡Ñ&o§¤åöäËÉ‹‹'‡¿:£°«d «‹RÜRÔ@ÐJ…eó A;â·òÆQÆdBÙN&ÆÑ›^üWÞá¦èûÝŸ{u1Òm„ `’QóÚ3Áo+Äæ wšZ1£€n[Ìâ̙Ӓh#¼ùOperÀ¸Y«BÁ„§s ¤éÍ0b'Ù"îæ™½‰Å9­ÛÜôX~ÃÈå󡤕Ïçd¿Ôj–¶3RòºXE­È÷å¬Lh.‡¸UÜÚ|«¨ËæI£ì°üWiû™Äê—d<9x]™æ)î*šÙI ÷ìà )bv"n‡’ét_Å|é49;ÌåÇ!öûbvðñû¾ xdï3µ2’9½øÄ‘Ÿ‡¾šÑ‹L ^ÚãVÈú¢ãEá³2Û©øõ&~ÝÃò¼èÒÀÁJdwÑ‹8ë]{õfyFµÇΈý¦Ã"—Ë2¶G*"æÏÎÉ3dž™wÇÕ„RäGM•¸(8ÎtÊ\;`¢­gõ ÓxÌÈ'LǽçâjÆ8wM†àgJœ˜ ýÚ‡[ÌÄÞ=«ÇfVÿIãœbçú~}‘ËŒBdqð„/Vô™n³´…³ž7äD·û dÔj†ÇRÍÒóËÝÑ~­)„8âNXðð^íP3Æu a¼kî­DXdG0fÈö—-ù¾ðTŸÍ“Vx–wô¬ýƒ =Æq_HÓZÎôºèÃxUˆBCÿãT4oô`‰j&½"ؤéÖÒ¯,|Æk¨øJšÜÐ6‡UñËaþkaZN´áºhà­Oryõ’dÖ,êGP6aõÌ{éLÍhþ±xÍ^ïz캚ï¢Z?¶gËÇ“<öŠ—‘kq! q½¼–AýO.çiOqö8Í0YœƒmÔÔܱOËI+ #ÉOÄø'ùÂ._ëvûrñßÿù_ŽfÄŽò„¿ }A s‘Íûâ3©’sûŽáê¤ÙŒ„”<š@̦Ǫ&ÍÒ'ÅžÂñàjxÄ΃hÔ`Ó{éSÍ7Ødã£öÎÜ“'qcM+€Ù¬aváG|ÖÐÂÔ›d¼B»ˆ„&ú/TßÒôèØ­’>|£¨ºYš>²£á®7±Ú_¨&ˆÑÒÕDkeFñÄ0öÓˆpvz²qð÷ŒÀ2~¼Çb¹p^Úײ#b§B-ã¨J–ÓC©ú÷}]í<*È!*k‡%¾Wÿ†Œ~dšrçuË)ì „Y½(íî#éÁq*»{/ÞíÄÒf”ò^ùÛK·òw6¡¹X`Æ‹§/ÔŸÅ%/Úê!± 7gJƒ³˜„bv£09ܬèFkñ7gwO{`<‰~"ó­aLóîó¶xlçFSŒ¿MbCÊTA¸%åeμi½Náî)Gß!³Ø¿.Çö]AyoEuˆýÿkÅÅÿfùÃCYy/¶ú‰³òDÊ{™iõS}dÅ£G±<|Ù•VýôÝ|þâkÊ>¿/üÎì`8’!S-aœ´Ú0c'Úb¢£Þ(û z;–‘•¥ Zé³l®j—RVÇâzíâí eLÈÊ—ßâ3,d’Ûo[J›$ø–1ÇUÎaw5kÜkÀZOƒbmñ2Ã\ œaH‡¯ô–T]l˜åmô{¹ã*B‚´þÆM°Ë×$s¥àj7£T1eûY%=I+sž/²ˆxëcD7usqa×o^äÛ§²*Ð@„®GÊ!•P@ª¸ZˆÚl‘Ñ¢Û§²M˜²m^%÷x4ìÀÄ&´Šºõ²1Î<ËÌN°Š©!•ñ•¼CU¾;dc5Å(÷âp,Ûý"Œ§Ûh®ùeZRŸþ nQ›!cî}êÊ´Slagƒ}sÙ‡OCððjTq÷%mtE¾¸ÂñÖLj(þnêæ‚FVÁåìy²ÜGx´´Õh¡Fê2fh¨ ÇC{!7Jüx0s>Ö¯¤»¡?Ðá¯~ˆ¬‚¶«߸cÞ£6©ùã^ÏfCQÚä/ù®Å«Žêjÿ†q„ï÷5lÒ<u”wɺ·c\&i›ýZ^sÍrωä–d ªNwøQ»ˆ…0RDýŽP£ä×÷Á%)elåGr˜K$•Õ!ßzúw Úˆòlf¶‹%F‹¢Ì»»¨Õ l£®f{=y_êiP¬-^f˜+`_?’cÕëÓ 1u  Z‰³lqeÿÂfv6³ãÅPÂÔú!xÂYÆXæ4Ê\C~ð)ëÍOƒêçX4‡²mñÀ˜j2ËÛ ë厫4 Òú7Á._“,cÉê O|hÓC"QU4µ™"3ÆUÌo†³(6q6xз/˜±5J2¤è}aŽ ÙøÊ+®útñIÅvûT Öv¬Éðî-®¥ŒÂØÌ0 · Dâ$ˆS:;ß ß&/i«¦ÉŸ‹”f´}~¦ù-} ï§ Öɦ0Ûºª ¯CþV³fY¾D擦yš57ÃeX䘲ArËWaºˆN´3ÄÄñzcìcš£ñ?©æL(.Ã4™¸ÚãmÒð/½µI/•÷žñr˜Vº¼Ëx–{–^t’õo-)Ĭ>vу_+„µ ^Å ßY”O¨|ë²°Ëãìê Ú¬áÙ"[pþØzÃÝIÛܧ£ŽdZÒqÌÙaømŸ)æ*è’d7P/ÞQdœ’6#¢îw•ua¸ßÕL%Š¿›º¹ìé!÷€rŽýnø}/fýN¸-‰0ÂÅßkHZâu]èuëYîµë”þ~Ÿ´§#8Œ;¥äë#F¼‡Éø±r=.GÚÔ—µ%rF6(ð4&Ò,mê"|…üÖ!MýPî#¿`6«ýü‘UË£ ¦ 1r’}þ¦Y¾l—ë%g r)×£ÆeRÙ–¼t÷xRÑmBOdHœf Wäº#ó Ý×À.¯Úò¾ìxj 6Äþð°ÏÛ§¼iò·q—í1JéZæxÿQäðQ ò,ßN¿xJJÉÿ^æ¯æïS3¶Ëš  IhÞ‚LHHwYtÐ1¶!ÆKv7ß${(^Frõä‚bØâz,1C=ð£Ê‡&ÃP¼ìá2¾‡ÿóîóÊ};C„aTÀÓªOwkt_Ül>'W·gÉ¡hÛþåbãÙJÙ$#u +™„Ú›=ð{¡.ßÝ“žµ(ª„ô¯Šém˜‰­{Ñ?ÃÓÄ–o ¬*ê¡Ñ$ge‹ÚjtɤÎë^°€qz»²!ëæm’‘}3…Œ¥cùÈ ]è8cyû{VU;ͪª ±§j{/Ÿb „?‹èöw â?F_ÔÕÆpA‹D3õÒ ül›j~ö$7ƒxnã”Z HVwç‹#¾zœ› €ð2äkÿȧ¥[}ÿçò0­gxéZ· !ÜŸ'qz àþô¨rOJæs1Ï«áá2ì àeŽp%Vˆç±Åcîï àc‹˜ù³sÂÚÄãHYŒ ²‰ù_N4LGñ³Ž{~þÁ&ÂWWTè ;ÅÈ!ޙДçÔã‚Jü?“éýÒDýœC0|lÔœ"­xe•ä3TgÕ§™×CL뎞Õvy{3‚­à„Ün’I:†YLB9ö œ{+ÞpÖËŠ]~Ü|“l¾ƒÙÕâwŒ1Áĺ¼y,‚>ÇÇiŸ´cÈ'í¨}Ò`ÔÇ[fý²Ñk¢Y*†Ÿm(1n :ágÞbÅŒfWùqªÕÂÓh"0f³ô›Ȩ̈º*žê‰ëo}/c¹LàúÆ5— ±²žØ~ë ¶[kíO+ìð»0G…*¬ÝO6IÇñ4Ki&•/ÅÙ ÊßÊd_VÏrñmÓÑ›tšÕ „ŸÁ à1s»6¹¨:È4õ׉æ(^Ö@~ûjˆ|%?ßÞ^· Íñ±o¦µÍ&¤I6y`ÑKÉGѶeÛÕÊismÀÇ0ÈÞ3mÇLS¬Ù\¬ÓMò@†6dÎĦàgÎ`ˆ©™7¬œü‘üD÷?Ðý –3}–Ûê0Õ¬C˜Y‡±Ê¹¼¸f7AVø„#€ð²D†*îMÑX4ß¹ægí[»¯§ö5/ãPÀs¢Æ2G¼T]y(ÀW`Šm:†qL"`ã²ÜG 0ÏÓÎÀÇ0áa×›ÊH%Š]ûNV¢H¾ÝÖ§*IJ—iíñ%¤-¾<úÁYgž/û¼šfð²ˆd7u_ΗÀÏKµf]µ 1®ÚZÆI_.—tOþã{Â`—äÇcPeù„¾€ð²I†ÅÖšál 7ð9 Spü­C)Û†£Í¼ßç»"ÐSK‘±xjaÅhá}œ§–ÁR¦˜ÿ½šßù…ùD"<µ4jq®?vó<]¨}q®?:Aøã½5Šâe)—ñ4Öí·¥S:mŸ‹iMSƒð2 ´¸À÷xû ˜S$?b2¾óyb³ó}¸‘‹In(›MKJ¬4|“Ðú×sK^îÇæ8ÉlÃÇ^&1XO¢tIRˇ-†ù4Œ ææÒN¶¦ ´¥µX²Ùœ+ÖÙçM8‚áeËoÂà¦áŽf‘÷1mèŽfë#ý}Ót:­ 2Æè›Æè‡ù¦õHÄø¦Ù!ül±ù¦Q{XCÄødQ~j½‡iµôRKºŸËÀEòÚÚsÿ¿a–ÌñÍÀøYfúVI ÿ¸ïUŒSŽ ÀÇÒ§œÇÿÑN9£(~ÖE:儚¸/ŠíÛvbßÒGñ1QÈX>Ñ5\Šl!1ÒýfÃÇ¢Iî7¡á~c‘÷2ÍÃý†V›¿ûF'zŸÅÇ´ð}~j(îó'Ÿë y[ܱÂË@ó1µâèµ-¬ˆÙ¶"xY`Ûf6LØÖx5Ó¾ØMÈ—:`[˜Z°-¬³B¹lÛ„ûH9p¼Ì”R'·a×ßâºEHn×È÷!5Ú~—o·“ÌV| ÆüæxÚÊ ÛG ³+f“ÈágYo£Èß4C ¹ÃÄÏ›{ó_·m¸ù;þ°å0ý[ã`ð²¦ç ŒÿŽÁÃ~ÜÇ'IU7ÑÀŒŸ™\¨Wup.\]ì÷€ä 5ìðØL7K‚xED쟻oL”·ƒÂËšXo‡àW,ÊÛÁáeœŸ·­µ ouòždšácЗñ3¼ù.ÝæG¨0çsì#ó¸Z›ü ü„©±„`ø¡ÔÏЯ!9æmKÚêÎj÷þäø]ƒÊ>¥åÆÁ¶¨ÚÓ¸:%‹UÑòŒªÀÿfõbzá§Ô%GÉ`ú{žë½Ì…µqNF´Œ¦´nf¤\|ÔÖîKæž<ËË,‚“AÒHMÍÇ/*×èÑ• 1ÛÕíS±}Ž¨Ñœ‘¦ÌÕ¯QLiÝÌ"H¹ø kÔƒŒÿ]|nI3µþ-|XXùK^î±_¥L?ÕæËö,J£˜ºIK0î9Ü“n Â-Ç—© f´€Bƒ¦ÉŒÄ}–1ܪéÚbhÖ“ ™X-AÕáªÖñ„=¹Žó(Qߎ«ek”5’ÕsÊR7’QÖ"›å®5«þHÚ>Œ‡e+HÒ…5¡î-¢œ‡‚FÊJ¶~»Å¤²ð¡ÃÌIÊPˆ>Œº­8#EŠ9¦äìf¶†ü£>H¤@9“,ñ7Âøa âí{«¦KÎÌV¿OSm´Ãë0"H¹øÚ«“ÌC¹ Ä”lý’‚gÔbX9 ‹Š>-«§¼Úí£ Ë i$§æëKób<[ Žò3ÎæX",ÁŒr¬ë˜iR_ÌÌgIh¬Â 9¸ ÉEÄcBÏK•#ú{üoöiôµ:œºÈï’AÒh¹š¯_,­õaEÎÍkX)>¤*¾ªQpFY#E=g¿ðDª'ÓH’>ü†…èGîX‹Œw#Aü ’FŠj¾!KHå=Õωóê ù´sí=팟7ûΗÇçÉaD#‹Õ«8mÅèfNÈÁÅ\L£DÚbÛD-´”l£šÏ‡j K'Aã$À›S+/"/ª—†F„¾zþ!ûyÈrŠÉw± ¢¹‡Þe‰éMêV/ùißM4CÅð³%†uò_óèà +÷¾,¦V†’f#”|ƒ: i°&Ñ8–$8LG7½a¡²„qR5ý‰ e͵œC¦·Ëëwg×>C‚®hÉßaD5#Ašc@ì¿ÿó¿Úä–¦mÙæ7:&1ô½çÆ!fä©ßp£´Ã¡ë‘ >œƒË°*MDð¬DU¿º¦Uz¾‘ ^žÑºË+"”›yH¥ïåŸZÉÿÝ—š{ˆò*,”?¡$0@/}tI~®…Êëý鱬<˜¶ ¯)¶u³ËˆåÎÖ2ƾ/ÂLÉ›íz]ȧ¡<îÁ9ò°­`ik iS­ 2H÷-¡ôI+¶‘?îOÕó‡¢ýïò#ó"0í‘$YUw0*̼Ö-q˜1(õ¾hß;¤´—…Șª+šcS¶ðvnO ¬Û_R™d…2 †™Ü0ÌÖb:)$¼=®âk±xu¦žò}S-¹=M\JiÖbCÌš`‘¯1óÛW¤ˆŽT¦*=VˆÜ¢};† vœ‘L¤›#™ðïîíX$4·›ºßÑÑꆃ2#ÔÉ<É(ÈÂ~üó¥gcŸ,Êje«JúW6W_×/7?áqC¦ö^0â¡`ÂÓ¹Òg8ámw!Xó{3 }©]n†,ÿ8ç®;æÇÒ›ËoÖŽ½Ég’cAéÐIô]7ñé7ãmªÙ<Öæ·ç¶Ùá@zŸmY=ÊËdøïm}8©Ïë‹GÙkÒï{Òï ÒXžÿq*È@™=F³×˜óÛxKg42Ö>õÃ3«m!ìNލ×áµ¼Zë·×ÎWDAL.C#˜É~q[Î\­À`¹&®Ôº¼~gkç44ÚFµVç±/>™«&û` Q¥é­*“­›Ë°(›†·ÄL¶gönØŠZ¶ bžÞG×3»ñÓìîWöŒ6chÏYk|€hµ”ïÕ4‹B:ųo§åöª)6’ nùÀB\ÍV±6ЛJõªi3Z?·á“lÖŽsþ1öÎÞƒ;ÑcëßÖ£k6O/gÖû‡Î<åbk,3• Û\Èòãqÿ6[k±¢”ÆCi,1ÁĤÁ{æ+†ÙK`šñjø£ Ÿ»æ§Õ¹¹¶ç±tF#cí3Tè<¶ÍÞíGÔ«­³çå2oŸ6goÁœP¦·zVûçÐÛ@ÃKÀ8¬WÓf´~nÃ'Ùl¨ñì…û1ŽESÖó-‚›!¬î(õ,Sf³z^ƒ'تÖï\v¢«Ô¼o²2Àâ€R»è¸5C›V4Ìkð[ÕÚEW´Ù µb'T©¡2g°n.âlVÚd{fcYQCëÏ6ºÂ‚˜gh¡ë™Ýøiv÷+{&›¯«ù*»`«UªžÍ`Ý\†EÙ¤VÛ{Ƽêq«æµyF<uSòêÿ7‡ZéÊÑsá\Áð”g)r¿çÿê¹7ÅÒªŸŠÞ-E&µÍö©„OÎx~ÒvÊJ^°òÜM÷Ô=em}jÈX§z¤Û*ñÍ@N²=1oÚÍc^•¿O¬uŠ›°"ãͶÍvņìšþRÙÁÜ܇¢¾&`D0X؉Óƒsšaö6„F5ˆg®Ê»©bn_nM‘ï'¼‚ª¸“fö&VO)²A”È1ZµqµÛü˜ñÅÉhv'KU&ˆm——ûºv;m}ÀæÇ]õ7a›±Û«¦PïƒxP"!TI?±;m'RÕA¼¨2oª4|ÈC¾íÚ \‡(n²ŠŒ?[¼an QÀƒ#f÷¦wÈ›.Ûîó¶c‚=ç¦nö6„ݤ9»Žà¦Ëò{3ô¹ðÑWÞÍsûr®mdŽy¬› ,-HN¾}9_æ>N¡^ÒN†7„ÕÄ¥‹à6ïuµéëi¡ëhýüênÝ'LK®yš³g}Ê›ÝkN7Öb&‰Fy+u=·Jü3KÛ+ ·#®É<¼vâzv9õWœ½¨Çñõ ÙgæG'rýÒÝRæT ^ãƒM‡÷m?øóì ¼×/ÿ?‹ƒÿNŠ]w„qØ×_Ϭ¤È©±¼½½g²¯¥Û+rµÕk•3©ÄÖðÀMiÔU×’ŸyKž»¾³,êF,æD´’R’“ ’œ» e˲z‰^ˆ4Ê[é빑ùšü|7@¼GyõµØž0í_õ}ëC>~M'd•WÍ«8a™Üò“‹î3É´ß×ÙT§îQ« f)_Îsx1:±œÜ‡’¡ü'ùÿ¹Á¼-PD£L˜‡{é(¶ÑnhaEÎd}­˜i'?d_Í«QVž»éα•±…oÑN7Ð41‡Jm[oK7ﶯ—cÞÀeßj-nÃÜ `5°—][£âIÉ-&yO£Çžc –MãJùP›ÃŸ"ÊÂ(Ô3Bd(m<Õ7­Ó·bØHh–`jP_é„áå|™T~7ðÀƒÒî)ï& âÍ#4µìl}‰L±sÒØ_Ëî)É ó]ò9ï’ Ž JÒ€6§ûvÛ”Gºhæ9üŸ2®öOËœzá³§ µSÇÕaãi=7r^UÐ÷}Ø•-ö¼øU”+L»§¦>=>%­R'A6F ÉÍ^V’ìôôü‘K³Þànžk¿¹š8tâÄO|„»’™ÊI¶&ßÍ2òûúÔ%ïÉì8/+ïªþ=¼7µÇ9÷iîU!nUj^íÖ¦åâ:ñt³šÅ½*Â­Ê 20á–'ÃÑdŸ‚Ÿàfà^¥dÕ(ßmVÉòÔvõ´çe² ù¼¸G»ü­”¬´ß Ýý8}ïáY´—“§w˦ßâ‰ÜÔæñpŠòl2 iF@†d < (lävíPØA°aKI{îØÆûeùúcñ|EöÌM¯Ë»Sù ÛIʬôëG†)ôY2¸~ͤ)ÒwÌÏgŒæÒÊŸ´´ÄpiÂp{ fŒôP¨gÃp|í6)~Ó{ùRdÔèÂHîšxUB8UÌÊ3Y¸ßÎþ+ ïã{ø‘ÙìmM_¢oˆHwilÃU¶.63÷ßeá–„úŠÕ,ªÛ(Ý­‡r«áùc”z“Ø@¿–ÉF ¬žóGÿ~QÏ?PISmºö»ch5”è”9ÆôF´/“˜Q»³i™ÚH­…vŒCb»6›ŠúñѽÎ`Ë?PDS-ºêöøS¤f¹¾î^®/ß©ÙM_¾Sô]˜¢ïÆ}gQt ©¾£½îŽöŠƒyu¹ÍȈºó B}•jÕm”îÖC¹­µx¹3X²ô ã HI©›1s_ÉàH•”zqOÁ™û*^úÞAŠùO8Ê Êê,ïpÚw%ùx Mk“º"c³«M²+ðƦ1’Û} Oz,·‰hÚø8á°]4§J\»Ì‰ÁÄ6gF™ί BÆT¯¿!Ü °{Ý$2•w„‡”`ØÜl(ca‰y•jF>ôñ©¡»Zä =e@yŽÑ ›Ù DŒ$1ƒXt¤¿èN6VxïGiENG„ÍTõ¬44Ïúfõóâü»³–‹B­`Á]N¿Q£ZFaƒðvl§’'ï{W;/cñ‘£ÏrÎÊÿÔ4àÌÞr ’fîJ>ÁÚö’&aŠlCä½ÏÑ Ã›ÞÓÿP6ŒyNÝ$jä®e”«“ìé,­_μVý¤Æôó²‹]:чÉI–Ò°HG4ɪðÚ1Ê:,ÒêgÔžèz¢QÛ¸j2 ›mÒ³*i}ç%ÛêˆkЍ"ƒè¸5Æ "¶,~<_m樇ö¾®¡÷3¤'e´çôix5àÆ»°]NÆ©*óËúp_‡ð?îO1Mk g´Aæ’p Ö5IRÜúadÓ/~`Î߈®©÷QV(‚cf@6³9>M2ï…¿9³ "—ö1¤m*òSHÆÈ' ¤cÚUÞhÁ0·è¤6˜” ÷õäþIÕ^i§EZÍÌkOu8ÆUÏ@Ðl…Ìö~5PKDuôÄ쿛ˋë9¾þ'iœ‚f 'h‹ªhH+RNÒL425AŸ:Mf„|ÿäÐò,ù÷cœáxFDÁ÷ÅŒÌE&Ù§’'ã4Ó0½+q#ô¡ Ù™M¼¼·äÙ‡3ãàõÖ¾wò(ýž˜»VúÌLj{,=Ù%ŒtÅÒ0}É›²&­<¼±ÛH;W|Ô|”àÏ„ ñ©‚fD>Û• bíóûbhD{öx*wÅòW±¯qUY‘BÄ?)R“ ù·MÈäyïàÑôZA(åjÚ°,©:5?.G›4I˜3åï­9Šsö˜ïs8àYѳÅHKö¡nš˜"–\HK>áãã ½íšÓàöZ~ý×Dó”µüÓfü¾l»‰ 9Ä9ûצªÞï,¿äy‚BJ9bdNÆ«–ð4½šc3fu•åU[Bü ­²lI½}ÒÉ5ÅCAæWd~ŸEµƒ×ŽH2p«R†Ê ¦uyu~¾ZÞ®¯.7ÙÕe¶¸Ü¬É¼3û²ºÙgÙÅzs±¸]~ÖXóî©À‡Ê«š¯·Ÿ7º2g)«9^rŠ„ï9ýÓöªCÔˆv„ ñ/‹ºv ×<¼ÑâœPš€“,V­T7ËÅe¶ù•oO÷¿ÙS%Püõ¶¼ÛühécÙYŽ—f] ´¼ƒÆ‚xÈÒP~~"2¤Ðw p‚)$ýäµÉcýûÁ» 'yßàvé)¯?>NÒ]Û/ò‰Ïáx0¦‰ºÉ¶OyõXìÂë¾nR.Kêûê&[~^\~Zq\¢¢¤I¹»8x ‘2¦…4ª+Ò9\ß\]\ß2e»âþô¥ƒJRè³ÕwŸ"ÛDåÒùúfµ\Ü®8zùð廸Rá„öúãÇlqv¦BƒxNÅøóõåj£* Æñ˜¼¢âfuqõ…—OÑ4u…N%)îêææê†!>•O{òÿ¸–(¥)òçõ§Ïçäÿ¼ýõß[OX"Fñ®~b@ísyŒ‚BA ¶ùi}ÍàNsSØÇÕ•*OÁï.oV ò¦“ï3ÓA¾æ÷u‡Ïe)6ùÞÿxµá¸¯ySE¢ EüyqsIà÷¤A³ˆåÖ–÷›-Ë(>3(2é%þ„Žõ)oŸˆ~Â:ל4£‡àÊt*M­vU_²©.#&¾”©Ž¹dðHH-Ž)ººÞ·#ß”~VƒJ ñsÝ<ƒÕ‰n«êÅôw†3B£:ÃbcÀ÷'Ržee:+/Ô3¬T€CÍB¸žàfAñ„øòêâbqy†Íc}ùiƒ `4º‰€4o"‹›UáÓNÆ<°TäI³…µÌötÄUË —N¹ô’Œë×É#¬§49m•¤U,hÿ€úHû"C2¸5ÝÞ hÓãÙ¤62D²Küðß»)Èd­Ê^òýÉóƒ3ÓÒ””Þà¯ä þb:÷o°D°cGRÜUEZÂÇdù^SµK'¥8KõYÂC§ªÜ^`–Ô½}Ð2Qü?#{ˆ' •,YÙl°´G)È®o– ¼ªb/(voïù2æ_äÛöWÔCêë`­Ç}ݶ9»àúO5)ƒLÇŸTÑÈgÔÈ -Iù슬~À*… dÚ*Ž%÷ÝaÉä¯Þº´¤ÉïôÒ/¡yÓ&$ÇPÜR¦´É'‘ôÎRÃvp½˜›“ÌÚ½"uoý2P÷±þ”D×”÷§¸|œH÷Ò‘ÿ“÷NPXÔ:9!™zIÖq¥R¦wÁØ@&ìI«ªZÒÄ›¢ÀP´ã¤L"=:5©½sš'Yð<Šz6+Å/™›Vm) CFqi·69“™’%DIW5ÕÛ$ОC¬µìGÌeÞ©LTa…™3?îÉ|åPÚôjY¨¦Oe÷ùtO¾†ðHA{ª_3XuXgOÅþh†ÓóP¼Ïõk²Å<ûAA4,éjITž[)_|CÑî‹•J†¾K`"Ó’GÓ›_C¤R:ÈÊ`,CÚÃc“,šl¹©Ú+Œzz‹³,{³TE]S시´ñzEÚ êç¢ð7ô)ó¨lÌ=,¢4øŠ“ 4%ùPà†ŽU—U€«eÈ€ëùMñùðã3žW¡@2\É6ú êyØÛ‡Ï Ôà™dk!ûº?Ât¿Ñ’ß0d)þT•Ø>3–ñC£êãyRÏñÊl]XœÉJ–”£yvq™«‹31rtr*35kª£Gt…Ùñ‡[i«œRb€“ œ‹rÛÔ‰"ö=’kÐåúë…HW[G‘²ÏSBþÛ&ç#aÕŸŽƒ:¢c¿Ò¹^ÆNÈYÔúhEÃHÆ¿j\{dO~Åìá¸/:ýÞM[K>°H›?<Â?Y“Kó U–ì¡€ž©úšÁ&z$`Öësc³„ªúk É©xûXê¡|_×GŸ æÓÕPQjÚ× XºePVƒ‘™aAýP>Ò+)¨”®„n”Uª]p ˆË!­q€obצ·D9uoÇ‚.¨?Ô‡Ü@)¼¤2íAò¹%i Kc[(1ñËîÁKø%o—F )b,¯.ÏÖ°½±8Ï~\ܬ²/‹›¦†¸ŒžJg©ä¢5ÀRt­ÕvÚ3¨å@½,IS Ûôxá~Õa±c2™ÂÊ …ÜØÌHSä‰í7tiåˆë!Œ&÷9LâÁ„Íã#b&¨ÆY¨!_€Ç²%IdV3lTáÆ¶©d-Œ'*ÆÈ<ÒþwÌuEq5ò\vSÄò(eHé;m©‘ÆXZ­R¤±þø–XM*ˆ'R—21Ǿ|)pÜ÷ú”wl°Ï³ŸPRv0î¯*6ævÖ¥,ÿçâ||v­R«ÿûߨ™Žvj‘K…mõjÈZ|•ˆ.ˆC#LÊaH/tIwY³‹åí&»¸:»;Ç}¡˜í`ƒ'‚®–uàdÞ6¶g²×Ô(ðd·‘ÐØÌyáS ­Š—v 7ýË!òî ¸ h")b°Pï]é°¸QA¼SõÓ \Æ2½M±Q{m+ã§Úú?«‡¢{ªwt¶Är8õ£!ÝSY½ñÜéÒ7 Å…<)•ÈØÔaîÛf]ÑohÆÞ²É2CÑEoÙl¯„/¶<žN~ã¢0ê*«S!Â;¹Õá&/™ÉJr€%{Èм~K_Æ›ßâןԌʊ—6ö ^ s-‹¶.ŒýIÉ’²,©Äu.›Ñc,ËÂŒ§l º/â·#¦&(tê} ˆ©†¸dg %QS8‹=i¤CÝÈXáñÍÃõäøFÞ±*ûNSO R • ¨¥HJhR“è„î®*au:ÙFöZnŸ-Ðß<¸ofêäƒQîá›çnÛ¸á=Ľâ"`S€MlÊaÏà7®ªÐ„Èñ-bïîøÖÛ¸;¾©»vÇ·f¸ån,böM«Âèì8 ÝrÄFÀ_ŠVvhožÕ§îx ßܧ )IÈòêËêfñi…> ·«ìêîöúîv òõ©ìŠá—5X«Äé+þùóúvu¾ÞÝM—Ì‰Íæ· ü™ ßõ€yB¦2Hú¹_bZ"Ó¨ûÔ?ÿÖóÈŠòßb8zÇê¾’ÌÛTWLŸ}ú튘?ªQ_BæÌ1Õ¬º}&‘®¿vou*uRðdÉf|Šõ×RöÔQ OÚgóvì`«“nMsdº˜Q¸tñ _¬Ô÷P/мß0‹Î)\ë=R˜N)–ò^óDàõMýú±F¿ÈôOð@éÇÚ¼”*xŽ¥É1dúLβÈÐú†`κgÏ$s÷Ä@ŸûÀ§Ç>¬ùêær*´ÀbàlÐ?er÷w¦|`ì¯,˨°zÄ‘“;ãO¸'ÁÞîs˜½2?¸˜E‚¯aÐ+-eØK}& ^k~}m®Í#|}PškSC:[}\Üßf :½>¿û´¾¤Þ¾Bý~_¿f§ªÍøëÐÆ¨”B¥JP8?¿ú9»»Ü,>®²ó««Ÿî®7’DûL,o£·Ï)Š e›Ÿˆ•]ÖÓT52TöÿÒTÞä#_DªbÂ\Å«åÕŪ=µÔ(ʰð¨²a2­Å×iF¥ÐÓµúe`ÜÃ>œh…è©úx¾ø4°‰ÎÔ§ic=u«ÛÏWg}}Õ“PmˆÐÓu·YÝMÛ|ûTÌЫ ޱSY.–ŸWÆ>e “BXrކKåH‡Kíççàéª ÄUõ®&äë§KY ^:P1KS(KŸŸÿ¸Xþd-f$1G1#s1#C1ÓèâsE2—ÀùzyuùÑ\ƒÅÔ)$««:¹¢k¢sÊk¦²\=éÀqIg¹=uNâ\àHo»¼Ãð!B ¬^O)<×Ë –½õ"¢.¸3Ô2ÖÒÇõùíêÆXCd¢C q1¦hb¿,’ ¡öêf¹Ê>/.ÏÎW7UåóMÏš‚Ÿ$î#^­œÁ ‰Eì;O1R†Áõ|"%FÊos÷ãfuÛׇ•ëÓD…¤§ñv}±ººë«ò Ô†§i5EëKùn™|(®×½UvOeÏèO°X ³"6}YÐÃH[šØùM·Œµ»l}¹<¿;[m²Ííâv½TØ´Odäñ”¿”õ©‰&Ñ>¥DêÞ|&ãÏ‹/ë«;9úxªÛ.›ðEùTû}¾ÚÜfÚ÷ç©ëŽù±œ¡CaHÆåóííõâzmìR0JV…áOø¥/ù>’K,`œÇú’tlàÔp}u~N}Yœ+TX3¡8–±@Ö—_V—·W7¿‹äßeõïü[òÙꊪ.?zs 8©‚Ãõÿk}ù¯Å·ä#v»º„#È›¾îJÎû£õ2ŒžÎKòZ}‘Íç¢8òg÷NÀá ÎlÙ€éýiµºæ ÎäÓ¶’¶îËû—²!ÿ~ÝfUÝÂz¨#ÀÀR–*`œÅùúÇ/ëòï/Ëìòj³Z’÷J6=UÐÇ`õGIJ8ίgý!±R$õ4ëÇhÝD>y©(Ën/®ƃHJùY$©å·hj&¼À D{gA…öšÒÕ™ú dì(è"±— >Í;XoŒÔË`uR(¼X\.>­ÎÈçO–$]Ìò&z1"¤ˆ 4¡7G¶¸Q–˜&ØÙiжõ;ª>¢Pêé%³ýë›Õz¿¾ú*^sbz¡§ðr¡¬>1M Ó¤µ¦Io&TÓ©+÷í úǨõîv}¾ÑuWE7Óì–!ß‘ËÕ­uv[ÕÐÄ*­¡z® P¡;Ò ‹âKLRBaR£¨»%/Çê¢KhŠ©64lîÁ«›zikHBý"ÝÀ¹þ ª,nÕ÷dŽ¡šy„f˜›ò¶‡Ÿ‹7_G=£J CÆ ot{Mh½YYáÁO«_qˆ0P Û|1îµ}Í€C ûªo æºÙrÝlPäyŒÖ¤• ‡ëc¡ë«›Û¾¦ ªL“¶ Ê4i ªt÷uB?@waµ×J®×ï´ÛcV>dm«†¤åC \Ífy­?f›¢Žœ¾fÜ[î!¶y0 ”¥²}lVçëË»_²Íõj¹&©²´Ý1»‡CÐÉǾ€’"JŠ(BñÇÛëìGK¼|%ÚßN0ÎMŽþJ$å BçÜÁT˜î´)†}Ôù"«MÙf H)Gêo6šÍno—›«›þ–ÑVŸl‹âþÚE.… Í·gWwr™XÑjÚPÇÄ¥žÒÕ|úu `†4‡2~¡¹bã'º=Ū‹Q·!aˆxõ~%¬¼!vE•_YtvúE‰fá{TÍ›Zÿx»ï7¡Q+h»Ð"ÏŒ¢É›Kü´³üz8,VZð™GvVºíò¦+v^,²|[†2™ÁÛ¿,Ûm,–ëñ®·õZV»úµ ¦ÀäØM dX(Ék¾îžšúôø4NˆÌ§/*B‚5Xy¬*^íQu†ÓÆò Ê›=·€ÓÈbÙàðíLBÆF—7[p~ªGoÝ:Õ3ºBÞ B?»ß™4ù–ù¼Â<#UÆÄòB9ñ@eŠŽAPº^’V<ÈÚ;k¤3’)œ±ç%I?Gÿ(+í[1pzg¸ZÔš†·ñKYUõ*\Qg`_Êâ5SÛ€Y›1k¯žÍ ‰Ï&Úùkk‰êéÎÍÂJi˜(pÍ‹Cþ; ê~Þ: #RÛp¤}û@È$ÃB’” ¤Fƒ^SÁA.‘âT«g§ë/ä¡—¶z9«¿™cѹÀÛ]G‹»íÞö 輩۬±w]–ÌTùð izFª"Ð×ò&;ž*Ò‘]½…˜±4v]2Ñ¢{¤—dÓ_L¦¡*-Øü’tRYyïÈ~ZÛ^Øì©äa FÁÕÜì3ݔؿic¥¤­š#=›“ÒÖ&ÚcÁ¢.À’êö©&£U&)6Îf)I ‘Òwdœ&S6žÑÉÆõSCæNØ)ßµôµx©Ë…g×仂4‡gr’yy˜Kö›²±hx#2Úœ*”ÌTÇ,¸ <°à¿>a¼n76ËÈjøé–Ŧ]€:céŠÖ>òf‰¬ m|?ÄøÐæ E?ÛŠ×q¡ÛŨÞáóÕl^½cQ:e~¦L>pk /X‚³óÛ"ÅùRZ€ÎÔc„Øï仂Ã8é ĉÁs»êûî-:w÷ÙO©*@Õ©OFÕå¾h0@Ÿ™Ÿ©‘Æ´töå4s^ŽŽ?ìÈ"¬­¶ÈMÑÅÏüúp,÷~eÃò2lúc ™E£nXxGRûwOE&Q®×”f§!îڥʚµ‹Á@Š*<ÑKzž¡îüŠìL“ømWQŽÝ[Z’¿½TÈìT…ümWñp‚±=‹‡™†¾LViJÀšlçS>VuSøu,/ÕÅ~Œ „…³2\ü{Ö>R4ådÃ|‚ŸÐ1ÆUW<²Hù¾ÄñŸ¢³e˜`׎—ÔÀß%q©U¨>õ‰]ôÛ}Þ¶ÁÍÏ(IU“ìª:%y Ïö!rS]âç(>¬í‹èe^:¤„Ð#ê‚S)™¸“ñ|qh}õéRB§þØOïsñ®„†Z᩟Rå¶œµÊm9Éðù¨jpŸ/¾n‹£}rêjµ§£JË=ìïÑÍ|x[<Ê)£ L")¦öÈÝ)ÓK·*¥hVê}%c²mÞìÒ€ÃPLhî=·«®ïáVNqŽÔG­.ÂÖµgvuÇ|û ÑÙξ[™*@U©OFÇÿí§€ddÀä¯À– ,üê…fe ø÷ì›?ì›ûæ+.i‘|ýthrªB-Á®ÝD“ú(4 ýâǧ¡)HG¾-ÒS[/•§6M†êë=Óˆk; f/B}ut_ÚÛÞQ Îh4Óöó_â™™NöküTÿxª8èx(é 1eý§o‡½]1ýÇ-OÉOÕ)F´<÷¹çp™åeèôÇ(ò~ï_/2»Àg¿GT„,~é _îE/<¥@ƒ†ç¥ï²^_ˆ*ë?µ+=wà³z‚ˆ&~‹ºU¨?Q×ÒƒÛÇbKï(çœZM’L¹)iœ¬ƒå]Ú–_½•K©U>³«#3Ž gÔ#À!DUöŸÚ•¾å‡½÷‡g¦Jø¯!xæ³ì˜iëK&aYÉz›Rc¸ZV}·‚ïnZ¼8D•¿ÙÉT«&™ª‘¿  ÊòË8ª’‘®ÉÎR>ŠP³¹í›·–_/)¼õëŸS4•DûFl<X8{™å]¯®Ã0/#ߢÊéˆhÉì¹7•Ñö<M󸬨eóüu¥Y˜·"¬èŽBe>=€žµ­ºÞ]Øú€,¨Çɺ.Â\Z†/odÜz’'eØ<4„ŽízÑ‹=÷ývý&²Üé;9[}YsoïwŒ9„UÌŽyÓæP:ÜmÌ,c™¥õ¢,¦,ãê(ŽÉ\k#|nñV8ÝÃúC)*†P®¸ôúC“G•ðÄöV¯úÊýI>²ê…A­¦£„ÉòÐ7'5VƒPYºC¶ô’ftÞüÓǵsuM/‘ÔÖ…c¸ôuJYªA_Ûd ¿LÊOƒOSÅ1–ül¹IÓ´û T} ’Ý1߀D/ÆÉvd ·ž<›Âƒ­ëIdüˆß:¡ñ žÂÊ~ôÖ'C5h!<§hÖBxâýìyTþ·(èLˆ=éu,ÇûõôàøA‰Ö Cjça2è˜Z2ôÒû¢ÖLhzÝF«n·Myìæ*Ž&•³'ï,çTÆUªcCU!Gð;¼"Ñ”økS [‹¿Ö&çôî C1Éø  zÇdTåJ\-Šé}„ÆtpÆk4gáÐ:OÓxœ¡ñNNÑø¤÷Bà{œ³?]ãGN?_câ%Q§¾q¹‰›÷«ÈgrÆNâø‘RÏâ˜qÄÀc:>§c‚jçcFˆ¦\ƒÿšñƒ3~,õ£3&~eÅã(ž«é³ÙÍLó"•GV¾ãü‘¡KÞ{&bv=<àñŒv³tYåÁð™¿8Ÿ¨zà¨0ƒþã8Á4ÚÀ •š¸Ùi9Œí˜–ÆŒfJ!“ø:Žqo…\±¨êÇ„ô;ë‘.y>‹ž90ÀhíôE­ÕÄ3*§÷m‡çQO/rEJì§)o´û©Åu$S£Pä jTù>6ˆV&9²ûhŠJì£6ù1{VÀ7/oñj ˆBjé­ªE•Ã94M52¶_Œˆ „Æ TâÖ)U™2•©’?*Ówà‚e Õ쨼·˜è-¿¸çtüÎÅOì‘q ¤Zª+ô :EHQ+/Ÿ“×I†DÜ黑7HJ”3yu¤¼õxW>fæØ Gâ¿y€ ê3‡¡±³®fq"ƒKAp?4íj&’”Ïæú|ñ+ÈÎn¯X”H¡²}. Üo‰h#52Œ”bp…›ŸÖ×׫3¼-ª»•>û÷ŠúT_Á]"›ìçüZz1ù-²S¤vKdSÅ:Š£O+À| <ÖˆlJeoŠ®y£¬!\R‚i¸ÂOJüÊ\ž‰ÎmöÐäØÇOˆ£WoS£ÇÑ»ZfoŸ.V—½hˆõ– ´“W|,mÍ—½hÚ~È {ÚJp½Å(F¬ø}È0–‘"ý™|›vu²NÚÓý¡ì øñø ̹a›Tãõê/1†sÝe§f^ ž‚88BAÑoÖ±ùê6»»9§éËîI;~ž4{WáR GtÞ]ð0Ü >{§Ïêì¢:ã¼NYJ€y¦œT°c΄Y—Õ éÒOUµwˆr¥Ò»´nRH€!Ù-©æ.i0jÆìò¥–_òäç§rû$S[ºÔµ†€´‘ãó#„sæÛÁýQžCÒR™¦ôK§ã¾„3NøoàÝ×0"mŸ%ê5(gw×çë%„ÿuqqž­—pÊ¯ïØšºGô?zwÓ ?SK+ëö?“Fmâµ$ý“aåžáXbŽÁ´I៟ ½“ÿó’ÿûHû¶þ&y"}é0¾ü±Æƒ,Râ 1~«›¹Tr’æ¾Æ¯ESðS½’¦ˆÛ Î49ž5á}±©Räö{Á2‘㨿+vx<WÞúß ËDS!Ê<™WôùàÝ‚X\lq÷::Ú]ÑpÆþ†¼[ݬ—Ùj¹<_ƒÞ‡ûÇ¢_‚é _^ Q,Ä£V”¨!È¢Cƒy_˜ ßUмâÙŒ»äÓ†ÙÞ‘¹LÙøÂž6D–3ÏOoŠ&¯× äS]ËîŸ"‹•޼ªØÀó’&ÀŸ< ²ßù?‚$ *—5‡gf}Я¬f „ˆP-žð‰,Çà×Ú½ÖþÝS†A¯Äêo%Å`×x•ã§Õ W6¼…[)(fì_Ô)xÁž2Ÿ 3 MS ¥‹„„Íõ^lºº˜Ó´0À?Òß×}`ô+0ãbR–f¨ _æŒ`@6º"HtõbWE—J¶}/©‚ÞRjQ@ûøL„ÍøÏ!´Üu7£‹ô¾)Èu 7ð…ã2×Á{ ¸Cï¯ hË'™ƒ÷¾À^Љ (›ÅB‰i‰…kPWR<Ø{}{T³+zÌÈ,±ÍEXÁðŸhôó¶t]Ôƒ¥Ùe·…?%( -NOoÂõ¢•>-0~òú¼²xâ.…6|BAlÃÈϬ\!bϘˆçç\Èðï¸x 7Ù—\»¼Ì*¤œ¢¦$=÷K¹;å{e…=>(ÿ`DÝNDqN¨n #‡Ë«aÌP½/J®ïE.’eSW¸§7u5ï: Ô»ª¥h¥R…'ª²|Ÿi~uµ%DÜÚïé¬Uñk2Åù>ÕAWjZ/¤p1­9ˆÖ`l ƶÐ4ä…†Eô²m±»¦÷¾†ŽJ&……q ï%c×›«›ìê2»Xo6ëËOüÞØwÅW ÄÜNŸÿs$6õ_ý²¸¸>_mجŸ^E#—Œ7=á0Ö,Çgiž „ê½ ¦ˆ]?º ÑÙ‹¯Ó*ÿ«¨ý¯ÆêÿÅXÿ_䕞¿kb\+<’³õâkŽ(‘Û!LšïˆlèrŽJñ¬üCSèNOá¢àŽ~1ðVqÄ æ^+Øx©8_²éâµ~_y|''ï-O)æ ÐQe ãšžoM´‡°¾YqMõ;Ï0ý–‹ÒæíUg‡²bÛîmß°{7·Ü·HEˆk(÷²5>Иæ¯Oìxç”Úà 爸¿Á'Šžj •Åæß°X²^CþH ^ Ç&Û#–oiŸŠû5Õ%lž¤üª¢Øñ­š„7ËåÛm}‚ª'5O±`÷°†á F~x÷P°ÛÐÂÊZ‘bü v+í¢1!JÈA&3•B ¦Î³!ývÓ®¸"Ž”u´­otl™°Tò{KjØ·…=¸¸2í£¨r~¹šcQ1ß=±ÈnT³»€+iåxþKÞÖû¨ÂW¥*x¨U‚ô™Žê84'lØâ¼‚zØÑ“püTpÀ7ƒýÀ †„¢q>Šß üþ>E^\ú׿êò‡Œh\Bˆ /­Ò¸0ùZ5?§h2Nh3ÜR\O{e,ÉPO°£…8!’%>HðÓôf4ÀÕŒû“þ™| ƒ%±’t`p½âC¹å~=õ¨KúÈÛw̘¿¼4S*”ÞòÚ&ÙG𤹒¸§×°¬é§‘ r]ô—ª¥iÉ…”í.âêËräyŠÏÕ 2CG3éœ:-†Õ L¤sêÓ(û!ÒõmKº±`_?à:'ÊaDÏZ¡ÜŒ_n5”ù蓹™fÌÍ”ÎeTz|QV6'¿‚×ïG¤ÑPq' |¸Xžwè~–7±:¯¡§Z®Ÿ8é×¢*i}š^¢(›öSWb¦| –5xAx siL) ÄL…»½¼FLøê¿/ÑÑgÿ@TOñĘîGü)¼ÞPˆÏ‘”{Ëõ –s\åsÀ]±Ç4uïo=6¸¯Íßæaƒ‹ôW°ÑÔQ*O(ƒˆ×4µØM'ó$Ý4I)R ]…ز!½>O „p#®Æ$mçd˜˜ÄPᘩÄ\³G‰xDÕÿ»W±Çv¾ÖÉEû„ï>¸ é-”µ”¦èNM•)Ù&)gÍ’¢¦ •+ ù¼ö$wU›?@ÿÓ`ôÁÙ|x½vQ´*^iXçùtÈ!‹KþD¯ƒ Æj{ý0ƒzDÕ?xEMÐ÷¥(‘z¿›»d¯®ø½ ãVÎCa>Y;åíA¯é3üH0Õå¢ëûªqi”X×âO¦¦~%£uØk˜¯x%¦(ßkx´GL-õ,ŸO%uHêð'UÅï9‡(5”®ñΠ’_{ÞÃÝÐljþ˜R˜1d´ñ0ŸÝˆ˜ÖÂò[xÃL­Cô:ìÎçÓ ØŸËŽ„ü]s_бo—4ȽÁÇ |§1|KS<U;¬€yùÂ#.¸^nÚÃ=GHÛâÑ7=h‘¡=['ŸzW&‚¥,Etôú¯!ÐÌ1Ð 8Òe˜¡³-Aƒ f ^Ä«Š%ã2SS¼0_7¦ ³@ô¼-“Ó’÷ª‚÷EÆnf žñ3^ò^UÂð¾H9œ¸Xf9îï²à¨DòyÂÊgSØ\DFgˆª³€<’ž#€\’öõtÜyn>© ²>¤bMÕ•¤*–û"o’ó²:}E}Äànš60뺻?U݉ª9æ[RÓ41 ³²Üõ¡ØE>>µE¼Ê§#éšvªbÜÖ%9…Î »²ÉšS ÓÓÏÂQÇ]Ìpßä±›¶æºè½ Ù¶hºHë(BJ˜eëO—W7«l¹º¹VÁ"sÖ>û¢óÚd2¨ˆT@0]7Wç«lóÓê|u{uiTÆŒœA'3Ö¨šÍ÷ì@Ât2Y¦e³ºù²ºÑq]÷{«Á“Nâ~FŸß·²d¾7¼¯å‘‰Y(Ÿí¾„KätõÃØa¶áLA70;_on¹l£1GŸ˜”§ÞLÉíÕO+v؉éx;ì'¼` MÿÄX»Ô›€ºH$!ƒt2ºŒìŠ)=:˜2$ìzáqæé¬0:OR5ôƒ·ÿ ¼œ3Äv ËÞžîÛ¢›Ç †%°!2?N9œƒqt÷±ÐÁVµdþ‰ÿf5<¤ˆ¼,C¿ƒÏº¹ ä™^‚D¹p q©ƒ;=Œ—Š7y¦øgæö[¶)—À˜(6žî.ì($ÆÆ©é8 Ž'ð±Ø}ñ”¿í÷‰”`÷OØ… `(a¿ß\š 6P,ŽØ£oÏPXUÛ'5]òÂ"9ÈaOy°Yòç;Cœšp"]ŽsÁ#ŒÊK\tà”-Å4x¥ªÈÔKQ\Ç7¨g8|û1júȹLÃ%³Yüb9;‚œRäžs,³á‘ÌÐó},#Š¿ì•}©<™«žîI·ul4COpÂðÑZ&B¥LîSÙ}>Ý' üõœfîùúyÌ“tˆ—hðgÄi_ɰ²û·ðB×Y¡!ôý›Rü˜-|ˆÜƒuûôó×Hï‚x0áEÛ’á/=Æ.ü)ºVß„Þ÷‰(vÞ?b˜)t4PH´èÀL]ÝÔ Šn0 SAϯ‘WCÑ·g0—ÍpB¬©j·Ä©©:q­2,Ȩˆ/‡¬w“ÄŸPΖq^œàïäç%NÀÛ®ùë;Ä'¸ù¾xÍ߯Ièy¹ò,òþó>åÛçâ²2Í÷H KGjV=¯-Ñ/Nó¬TÑŸ“Ïì÷÷¢ßek)Ì·‰žÃ7Ó&¼ú [¸ªžŸõ~z …Å”‰Ca+äPÜ"lƒìá;ð¾ÎÔû¦–ðAVÜU¥œ |ÜAhO‡;L‰7úáñÒ¼mÑúwøÄö“T˜.sqŽûè€%!ft׋p¬çEç0ѵ†AñXi’f%:d¯©³ äÌïn“U¥èg(•“æJ7•Âã—#:‘O…<Z³ùÙòójùÄ1èÈú£m‰@„3ÞiíEQJ@„ƒ-V, à©T)n(FŒ  ÜNTÇ¿4û0˸“ ÅB)á?©3XN÷%뇄~c¤?à70¨ƒ¥I’–']qÀ[( ,'b|¯LÁ]ŸVdÄx ÆÏ\=O ,èÛ k!à$'”y·}Ši> #Ø„®··«<›t±¸]~fúJÒÝ«"O~*< ‡?«Õµ×¡ZÿƒŸC…TVQE ½ì¨¢v¿¶tK6«êé¯ß÷b˜)b»Þ‰ƒY#G”,~ÓÅ8?v.K?Ÿ$ÎfAtE%0d\DJàJIókHƒØ•íV»|„åTú˜”Jȵ| ¡®éSM==üý‘ÊÀúòvus}³"ÿÍ®½ý|uiP“aÜè:;äÇÉSŠ•ÖP9xðÝÞ\e‹kÏn2 dàðqq~þãbùÓ;ÅñÄß9¤Th ïN´ûƒH °í¶U¦—–ÏIÔ8U¬ƒ™?2Æp²qág©Òà ´³wàÛÁ —[ÕÏ·ÿ9ßíß° ‹†=èäQ ¨õ›h }a ‚\‘ÜÁž F¬;ê€Ú/Tãq(E¼ÑH¬¼áæÕ )nX%*²E{U‚ê×\ì÷nU†¯ ¿€vŠ]-UÑú,'JâGwª&¶LFÝž„5y;é*I ÷n†;¦}.–VÔ€ÿhz$£²~@æˆ1›KU°µû}rUjÐô¢QÏÿ9=œ*ø"†@l>¡[ìý[“Œ `p;4dÀ“ú 2¦xšv¢4 lÍT½ôK¶ðÇ®/žÒé]—EXÄnôò ø1f•†”Úé,´¨™q"1:‰›@˜ÊÛ=•VÝçm¹%SoŠÓ~CgÞßhSïI£K/º4…‹^›¢E“œ_›i*¿6Béׯ¨6ýÅp¼<æ»]Lš óXÒëë~Âqd–‹ ÓàÑáÛÕº WG*ÛÔ¤cDû EÇ ˜ öËP€$ågðAaÜVñp‹XßþwYý;ÿ6z}„Šx÷v塚ð ×®Ní]½ð/Ê”W:DЧÝBo1‡·ËŒ§.ÇL`ÏØÕ3<Åí2àš‡gâÎ >©Û@ymê:þSÿñ\Gò9Ü6Egˆð;¾²)•¥!}Åf9¤$4ƒû¢'ñ›ÍÿQûFz—wÆ¡0^í2˜>øGÌ#hà r“N,V4z=¸‹óPõò_82D3'ÅžÇf§y@øÝsU¿VôÄPp4”elá9=J${¥=1@‰}ý6:RdÞþôdjFà0\€Hˆ éù›ª U ·Ž }\BJ„;~§Îaÿš|)÷p3y¥…º®†&éëjøO•Õ©>µÄ®}‰Û~2™jô=læRÛ?w¶T÷ˆ†çËPw©îÄ*Ö@~~"Ö²…Ußò¨Îñ;å\ʨôMqjq˯7®ºï™/W  OQ…ÛîÖ¾ø köŒ(üÔ(ìyËÉAè0Rƒ¼[å}“OØ6Ø—pS«rÂ"˜ð€Wyq¨¡'È ªGàIYEÅèˆJô±ÒcÁAËà!Œ*%±•! ùÉnkfƒŒ0‡p&žJqHRÞá!ŸÈÓqxˆËо¿1J?P¶]D¡´]¯LÚN-’\?°[ùÌ+E*®T]ýwêTR\¥ºâßÓ¨ßä'Òá‘¿Nuˆ%ÕÒ§6Íl6PN/èóÖ­^ú'TÓ‡ÍìÀb›×@iO™vpV¸Ñð ð,?ä¿÷¿NZÛÄt‡ª”¡,íd kp š‘Ûc¾-Ì$LLoˆ‹Ã1ñ`I" y˜ðÀt' ŠbbAS$^¿Ž0xýêTOäMºÉc‡âß'’5ÕìTŽ&õ˜0N€ÆA5ÜÈ¡ÒP2¹ÈÐH¨Ï@i©¨s«·èãö6Æ‹çqÓhFV"ÕA ¼ÚFø@²“ b˜X`‚ƒÀ¾>í0"@Ö?ú©Q³9 ‰Ì¤˜ŒÄ4¥‚üâ9qHÑEL`™H‰D¡ªËÉgì´¸Ìã¦$ÐŒœDªƒÔÛ}AÄ#‹<‡“G2ÑáiãdÈt†L¼·v.,ƒ‹ Ç109cIãDþ[i©*™ÇEGA30ú(S¤ê† ‹‘Þ‘çpâH&:<ÍA¦iFx4“‘7i'Ç?îOí`©YUÎ2¸p‰O,ÉA¤®dž-4ÝIƒ¢˜XДqOE÷{5V,ƒ‹Ç1ðøÌ’Ɖ”÷‡‘±êýÁEä Ê×ä±CqGÂvy76TfYœ$–‰ŠHtj§fŒ ¤»© Š‘¦Œ“€ÕåcѸ{±^F­>®ß¿zYƉ>Ÿî1o1ÂQæqÑSÐ Ì~’©ã¤ä#‘WõÈHœçpH:$²¢-šr¬ªô|~¤RŽj%'ô:IÞUM÷ uo®°Kšâ A¦òEVŽŒÍy'È—–Æú%×2N¦>àO?¶W%²¸èH,Ÿ+‘è&ôÒ¾–ÝØœAÉäCŠãYhñd1—?B ’dÃDÆ >½h»ºÉGÆJ&Ï@éZI'Ö’š=Ù)a²‹ Å0ÐØ`‚‹@óRn‹ª~cÁó¸©4#‘ê uÜŸª‘׊¦;ÉPš2N¢ËØéÃìp锵l.J]Ê2§€i`v«)u|*È\£Ü.¢±yœÔ$š‰—L'õòV¤ºˆ ‚Âx>®üµ+íºI¢K5È4ÿL›‹€j¾‹ØB¢O?·,eËãýÕìÑPHCZP$®¾IÓÝ”Ä;üi‡ª{N_\¹ÉÃVQ?t·å覯öÁžQMŸ™õžÓ-¡¾Rv/§R}c*e—Е^°³l\,…ì‘°ìº>öЬð’&̤÷ÓyªÅ̺RzQ%ÞI7TÈöT½uö6f™ZöÔ¢™ïÛö•cÔOÅ2 $WŠ¡YŒ ¿@ MÙ„x-¨NÊŸ÷6CiD¼ñìDFGÐzåγºÚ•è¢ÃB2,¼ï ±Xûs5>dÁìñè¿E2jÇØý”°‹x½óXq˜ ÃÍ|yŽÿ21¶ž ÝŒîIòâ·÷­QlΘY¤Òôñ¢Ð’Vj1àªBÌ¿SñÅ«;Zƒ¹/°¬LEˆ¯Á®Øy¿`$Â9 ~ ¾wgŒes#ØiB݈®à^ÂÓ{Sûá[:È1dZø·WKFcb¾æM(Vȧ\þüj¹8ÇPŸ?/n.!P,spPX†¿RÊ·›¤ýëËÏÒhß\ý[Ûÿ¼jh#œìÚÙ&ô(¤é4,^HÇËäT%4ž¡—i°4%ª=q}œ!ú'Àð8,~œÆGm…77ö³…ߘuˆ?¥?TRæñ1Áè•¥Peê‡)ò;V³ŠÓ hÝið ‡R9äåV¹¦“±FÓòêyN¹¦“¶§‘µ*zƺøüŽÈ2GŠï”SÚÔ!/m››|‹UÉÂU(N*25AÎè F`«ü±Øa˜ŸŒÅÖ2\zx‚!bŸTC¼ ) †ÿQS( ôC£‘¼nÚᢩÎbü‰„gK1ðBTÀó'¾{"£ÑÓÃC¨“H¦Tr™ï·èfM«Óáêù/þWŠ‚ø´?̧ S¹M7üÀ ̯x>(;Íbë=N‡Jñ˜Pª ¦T88¶åïl°f»²_NÎÏBƒ;$€ÀÞjŠ ‹_²k¸Žmýÿ¬²W7ÙÙúãGPYN~@ßÂð ¬ ß ¸aa\ÈP‡fâ7$2Ó»Cq'êýG†ªãOÄY –¡¥ûúf’qÀs>à„Îpc ¨L©Jp •4ÃL?ÇäÛú‚$âiß$ô°D¾' »hòçÒèÆvŸæçTàoÓ†ºÓ\à#OŦ.«S4P?qá ®êû«Š?XbÐ:8ZÂŒ,9pH#ÐñXâZ»\:crsª nCì•yˆÈ0ðâIÖ—äúñ©zšŒ¼-†{ÙŽxÁ“µ“®ç1a¶t¸wîxµS ý-aZÃ8ÑUD L»Í#:±—ZC•_‰´Þ’eûÜpj÷pÓN~Á+Ûç'?uõkïUÁ ƒ]ñŸö^ƒž„¦WÀ°à¿j&„ÿö;ÚTL×!að³,=CøYhñ2å‘ÜZ.åßß$]yd§²eá 5.4¶eF¡?•n ’ȆÆÊ„?™ X`úAÕÛÈ÷¥$o0½[, Øå1eˆ¼íx}ˆ8Cß',Î_Ââü bõ<úòGÃÜj”ӎž–ƒQÆ‹¦P ‘ˆçŠzŽ2nÆÚ$;òma§Eëfبx¦V)Ð>³q:¯ žÀÕÆÇ"bšÔ@DWgwd²¡F!bjöåC±}ÛÚ[?Ÿ¦CJÃ!=ù vª^cãëSwpœÏéŒV+ýЋÊR¾ Å-‡cîÙ à°ÍÁÙxv|~ö6šNßCË·§ï€æ.-²üq !4-U“º2Þ`ƧÓéùÄû €&ŒUÓ­nô<ô‡ŸòXÃE¥¶2úñà¹Ì5pЫàÇ×AAe¯÷8Ѭ×#1Ú ãbŽO,¦A¨ žÀ.½ý’™ÇKõÜÆ• ±wÌú%}ÿ$êofx¦C.ß ÅÛG†Í'ú¼¾ÖwR¦:ûKªþ¾ÖÔÔš% å§lÛsO»êÙ«+¾Nî­{EÐgM%íH1È+ÅW®Ú1š_¥RÌóC ÞµÍ<‘À%šf b}e0ÚIJZ²ë4¯ä ma+©0FÀþ æKLöÖfùæ»sŠQNvk"| 'q‹#t(àÿ ¬µ ö zÝçX<_¯ ­~²HafµÏãô*òmNö™º>è#QŒ·Zv©ò,ÿJ»Mi1¡^›ìpBÿË'cyÛdnSR‹o:z½Ì²ÔȈç$ÏÇÊ>£º“'2¹Üj‹TC½,ÑJüNj x ×jÔ«À’Mû03Ê]‰õÜrpY˜]§fvEZûº{r…AÆê­yÚ¸ù2ÅH·2'RÂöKÙ…¨%«ÆN»ùv)©¶pÇð¥’Ì ´ëø÷> üUiÖßý݇X{Ê2nMp´¸ƒáÒ"˜©Íú;õ€ôE?Îå‹!Œ¯ú1¾r_õcLz<ÀD?Àqï˜ô Ñ,½IrÕïMæªyéÌ¥5˜rrz?œöd~èq}úÿÑ÷ %†A%J,o'“~$éü¡+‰$ËöçÅnw¦1m?’îOEBû£·F"îAÃa‹kãw ÝÛ™ÎõÛз5JkWBÒµ!vk»ëNW:Ëѧ֡§ÇÜfWZß”h§ÏÖùº˜ù½³x~°îÏW?ÝÞ-ÀºG¹ÖUäYï*Rõ5Õx¹;—Èóˆ úrˇÂÄ6ýð°/×]Vt¦Ybút>í˳ï~I Ë<û†ë‰b!µÍ—ZÓ¤zúYt[†[èÖî’å5T¿ƒb—yÖ‹Õ… ºãS,µÌ£T®©çLжÂÚ½*ø='Y†w]æÆëxÚF Ë=‡²# ½ aY1Ïö2zRc‰üÝ`íѦ±LîŠàÎñü¡e&O×ú¼k›&|- }l[&‚#™×hº:¤¹€RÃ,€FÏ·ßöñp\`æžìÛdëå>H¯ÑË(¾*²¥ª^UÉjWl=6©Gw~²ë.ojƒM€ Îø!™+VÈ |HaW»ÖY_]åÉ]ónxÏW×þºZ¸ÎB1DY ü|»‡@ô0¡û¯Â"s ñò>ÞC¾vȬÌoãõM²ø·m¾K¨JШªJ”t³¿8£Þ1ô>YÏ“a¶Û0Ç:×Ái®Ô;p‡úú,LZk'´šçZ“'‹xËØ>ß›® ˆ8ÝÀ L ˆÙ/¨Ù*—i¸qèý² »õ¯üŸkS‘laOÅ—b˜5J=$uØòoH¨ aúÉt$‹Â%•}Ú×y2ðÁèMÚq¬^+%š[ž&X.ﻘï @ X„ŘþƲaa¦µU¬.• ©%]†P¨:÷Ò9U÷àöXøÑŒ„Æ{rßáz3Ó]ði–RÕĸÏHÛÑ””¸})ÈXPÊIܲDÄÁþ½;„»x'ú Õÿÿ|>ù5z79¿¼ˆÈÁnjøê[.ßÕ t·uîS5w¸\Y™y[fÉüv-³›=5ŠæY¹Ë2û[îÂŒ¦5hmK5Ñø÷yKK±9„’pT#¹…~.z¨[Œþp¥$3ú5ÄœSn™îÒej›ŸþÆð…ú/µT(«+ÜGLcCÒ©¹ªÁa½½²!Õß]ÿÉ«e&¯*䛲ޭߏú»SÕ€:ž£'&1vÞåá’ŒßtB:l°ãæÑeÏÁäQùtt6o.ÿˆ]u•¯÷O°·†ì1ýAÛþà5Þ;-vÊÐ$š/“8ï¿Ý_áØ C“Pãœ8ÑÙ…1Åîñ‡ñѶÿwžÅ‹U\Þ—À¥‡–„í÷dZñ| íô„G™ê½bU²Sò×é:é·ËÞi‰+ÔXÖfûñ7­•l"©é*žgÃ÷+«!+œÒ){w n›žŸO î—°Ÿ¨¬)¤Xjï'ÒÑÿ$_bË&åÅ~¯Òy¹ÞÖ0â÷VMšèT–Jv ²¹ÙI!›ê\fµ‘‰p™åekÌ~ «éõý–¥Î,Wo5öÓGd*SŸ}·ÛÖº"Ëoâuú•^¦Öd–´I„R_òM°ô7"î%…‘“ìS¡d–kÚîŸqðŸÊØÇû!ù¼ûUµ¤ô> U+á BZÀvVËe„;£–Ì­_BìÚVs¸žã6Å´’ɕȷY¶¤x ¼U 6ÒA¼ÍŽgqzL£ý N¨Wn½<Áüêê®wË¡# b% ;q gOƒ¤¹ª—6R#Ï<‡æz õ?Š¡»Wé­uÞž.ˆ½/dÄO &î?ÿøo>õçÿ3Â8šÃ>uÔÔgÄUèû³O–³üus\HõÞ»ìÓ&3ø ©ÌnfQJ䣰ÀÕ ”~ÉWR0(z”Vfo'ˆ”œtãHi 7¤j¼Hu:!äEßD±ã) €Bº8š}<ýõ<ÂD¿Ž‹Ž.gçÑÑɉ¡ÏŒ™Rƃ@MûáüüWŒ¡¨§Š²o-+¤‹ªÆñëãa´Wýƒ±1¬ÚEÕîø òˆaõhº.ªÚç}ñh´8½wT”EPhvUlFÙ˜È!³„v+@|ºJuÀ—d´„@•X_ÑU¸ÙÃÛÄ]jAÞФê½B¿íßXú v&+¨² ®±)_å]šÜƒINL.Kr RõYc’ØÁø`â†ùîû~ÕÏ„ ê³NÄú¡­ît¯8ÀéDUm´;=¬±2¬€8úCw6+ÚÛ¿V ¤? ºO¦§ÓÙølŸüxtvÍN?ŽÏ/g.=Ö_ª•ܪŽÉp!ÂùM9;Ï¢Éx6ù­É '3¥Á?=ÄÙŠðë^¤ù£ø)Äï\f“óÑÅÑì}tr:YûI{|úF‰Ùáe4~º¹)!n\@oîÌ#BŒKük qæH‰UÒ¿â6Jš,±*ìáY²ÍˆÝ³kª4!µ¤† UuÙ/õ£†ߤðB\ï¼é”½\DK$—i1üÖ6.¾XW2à;Ðàðâ8úí tðMPv@®Ej%Û;‚_¹Äð-U}}ζ)€æG"0z @Sûõ6~0„F«Ù †§³£—X¯¨9¼E”gÙvè3È» ŸÜ§£É4šœŸÏFn„ÑA½r}ÕâÇÑ­ëpŸJ®á…v Pû…LÝg£€”ļ !ÈUhPùþ½Í³5ä2Ž9*ÎsS.àQÝÂÀIÃ_Úã8K7D¼ÍÓ¹õÝ*ˆ Ö‰+<¤þÿŒü± …Ž4Ô±u0òªÕÖPY0ÇÔ6ã´Íý­zs©Æƒ±ÃëÀ’ƒ›jG`¶­JÖwàRÙ˜ãÜ+]¶Ë’˜wÐiÌ“U¶Mëô¨n²bàì†eœ 5Ü}¨*¸2EÓw2ǰ … •#\#ç©$XÄ۸ʥ5λS³B!Ãñ*•‚a FÁáíNñ_um¾;)‘n{Ï5@qKÐ]½°ê@Ê:^‡qI–aà¶3—u—¨wl³Û¾–5B‹-Ot.”+3‘ò$ w…ÝÏŒómJ‘¹Kúê Η»E§:ÚUð2‡î`8Ký²Ú`¢Â› ¿'~\¹F®ÌL@9Î")6É<ÅÛà'ÙÇU(SñÙátsk: ×I¼Å¨A$,“kæ6é«Ö \á‡3ä¦ PäÞåF g…’7 c zŤî¹®Ú¡aì¦EïcNȰLµ.–(¼ «,OFö<N®t«ÒpÙ ff~~÷·týÏøÇïG¥y©žóW‹LbÙ"—áÓ¥ÞÈ£;;€‡˜ñê{;OÐá.*AÈ?é(ѶrÓŠž­Â‚ Aª~r¾ß€W5q©.ÂðÍc:׸N-â¬ú':wÄ+/æã:¸>)®‰o–1K4áÁ —Yuú®oz?,6Õ3T¼ÜþöôÃl¬ Çoß Y í¤‰¢[84€xBâ`HH+¡û¾»gxÇ­›;HD®’y¶J|ÊtF6î£TYÙD4.éš ÅÁ1ÊT5­uôвµRq±I²±LqÿŠNÉ~ÑÔ Š£…Üõ–2„»˜âK¿$¢œ:ɇb§ZªdQ!oøŠÊIÞUI…äfEðAX³Måœ ¥¨B>m;àP%ÀÙ!‹Júö{­½¯>ÃZù Lr¡Ræ -`ÇB++ÛY‚ªùDLG÷/©ë\?n&‰Y£¾òxUoI|ß7ˆd•Ì¡3OG}Õ—N!€ÞѽËB½ÂžGì>áXÃÇótÇ΃7tìcÆaµê²<©E[Ø ¤ðŸI‰Ï‚MV¤íì(ÖÂLPÂzG>FOŒ?#е0:Ñþ ¶Ÿ÷ùÞ+”ì¾' ¶° œð~¦c‡9Wd|4¥ì#™Ã$«åC@Žoœ¹,÷êizz÷ø þýü)õ¿ƒüUõÝâ¯u¶=´eëø@0t@çÈ*²­ÀØÌÑ&SéƒÕͪ!Ñ©%y’5 Xˆb!£Þ2|T.{¦(TͶ?0?›Lûg"`ýTÆhBóÓ±"äÄó†\Œ(¢ú(i3œÃíÍSC·2q3ƒ‚`†"®2`<£"½¹Ý¶ÉF> hOu‡½é³dÚÚ¯’ù²BˆÜoR3<ä8ò6£yò*“µWºŠ¤¹ˆÈhµ‡­ÈZ©Š¬™GA0I‘UÖí 놵f8ó2<´?~iæxÐ/ÀÙƒï ØÍ[I”H#@ÅåÜe_‚BuéÁÙí¸la:ªcÕ’ªV¢#r[ íãÛvb°,ïÁ殚q2¬ï­iì°kàRŸÍb„¶£'6P­¬gñ±ŸGñYj’låf@C~Œ~öEz“nãe6OšòlùVKpcωU\cä¤É;Ùƒ’í– eøÙ¯aV5ëô²h+¿@ÞR‰ßŽsßÅmµ@ 﨤Ƃ,»Yvú H²Ÿ-z,¨aÏãëxw¢'Ñv~†´  ¿·qq›ú¦èüVXâ­– ,OåkÞ#Â'Ü™å·(Ï®²nÆ d»h™€~ö/»«$W£Á¤Óga¤[­°€%¿êÂzkÀ£¹«- ÛÉuí€"¿Ëôª«,Újƒ@>P‰ß5 ¿ÉW],`ÑV ÒXð‘Jj,Ø¿wª§P°á,n8ö3Ûáy[¸={R½ìiøyû¨ß‚ìË¢ »ke(Ãzþ¥¦_´ÉŠíMžt¼åFº•ß6f\èÂk .CW[X¶Ýµìà"¿y|u•nW¿w±Bd[­Ð ÆŠ ÕXa j³‚eÛ­PË .ò[Q|Ù/`¼ƒ,Újƒ@¦TRcAÅO †^ɵs˜ELVʌ؅—$[™ÐpÂ?{댠¡ož4üi ðÌ  ¾Â»ùÐÅ’låg@Cÿÿ°Àeשl7ÙbÕ<|ÑC­å¹! É–8ìU/!ο(½ ,xH‚uì,2ܱÀã±—yh•T'i‹ØyΕ3YÍ`«&åî­çdÙC#[ÃÌ‚¡zÂ<çºÈk…DMmæWRm̤9ÕŸíE²­\/,ª~¦W]˜^µ2½²˜^ÙL×ϹƒQ\?÷Gé°9ø¡¯a7²ê§Þñöù™¾}}t–ØÉ"ôJ¶4ä¥gÞð‰ø¡-^gˆô[!|k•Ö[ÔÔžºÆÔ¶¦®YQ2ÁmI!Ä©DDõ“æ9þ_ÕçððVÁ¨ÿmä›å®P ÷ÿ­g`ý×ÏÄgåoðŽáù¯ÃŒã춉=Å7Íè‘OåÑè½:‡w›l¿®as@ ËÞ61²PÈ`ïûý¼Ìš^­~ÏãEÜpc•Ì!ÉÔ°)ANÞßñ§Ã²çùE¼= _WYC“«…µp¯H†öTSJ™kI±ÙåŪ‰D‹U-+œÄ)MW6Ã?U³¿Á18Õ&f«—­$~ˆâ5Ì%Ù ÿV"Ä`¯¶Ef¢@µ÷M=kòk¬0R!™)ÕÞ»=½•ªÎãuöp­÷ O\ÄA¬†UdB„ú(ÀçêÈfTvÄ›Mó48É4Ì“N€Ÿ^iö›YÕVA*ÊûV.-ÙÌh™w,vèàmZ™Qª™•€˜ñªl¤=ÏË"†,¼sÕ³m£•C£Òrõ$ZdT4fò©>S²P}åô§Ñ*¨JøO­%ê$ÿv¦?#DèÒŒÚ ÒÀˇF¸Ž$Ã4 -Ø3Ô>ͨÁÀ2¯%ÊÖ‡:Ø!¢mVhHmØK¼Üí–Û¼=ʵq˜&þ‡6«¾ÒÖèÁõ2.nã<*KþÐÈ×ð[¡~aq¾ÕÅV]-+[e­Bù®VxÅ*,¶­‚˜r»üWõ(ë­A‰C‘«±Oó¿ lŠØøoô.sYs¬¸ÎîÌÏ&r‘±ÖÙ ÖO ÊÌ„æ§c‘ú½þrÐ4n#‘ÃÚ±WíD0%°±Ó*o£b_@hhµ*T3±¾‰aflÏ*&Gí°¤VcÉ6dP鄤jªY4eÄÊSB<᳎ŷ‰\%j4wÀÌÔ²‡ò·Æ6- èÌ𼥿¶2\Ç÷’ÃYúÇÏ §ðŸà€Á?6Ãý6=àítµJædj8”@È ŸÞjßfuŸŸ®Fd¿ÛnÆÞº ®¥3?&áKGúþê‹™(§9J†s:|áTþþµPT‰t–ã(†0þP¡ü¡ÊùC=鳜ÏÊ”Ï*ŒÏj @øS™ð§ áOµ„Ï>/>¯>¯%|1€ðE™ðE…ðE-áÏ.þ\!ü¹–ðå—e——µ„¯¾*¾ª¾ª!ôÅõmb+\*V‡£µU!Îþ.ÕM‡Ê¥¶òèAöC…퇞tÏz°=+“=ëÇõS®ŸÊ\?õãzÞƒëy™ëy?®=¸^”¹^ôãú¹×Ïe®Ÿûq½ìÁõ²Ìõ²׫\¯Ê\¯zp]‰ —¥RcÛˆÂ6<®‹@!AOç>ÉqSTdöLu‹>TÒ”ÚOJCÂS›<5¿úÇíAu ÷\À‘DÛmòäiîIž˜[’§wé2È90ùâ ÄÑ7)ï72´ /¤0ëÂ×´v™& hßä_t<ï,O¿ª—B*…yÏI db½Ç·Ã>TIÁ ²ÄÄz[0æºXdÁi@gƒXoâ Öñ* âårÿ ˜w—.(Jân¹$”`Ñi±(“Ûah”;í%mWÙPÞÙî[ˆßªUG›"ß ¢é*ò5©ÂRàÌÝÕ2-niÿ±Fë°³×’flÚHºØ6w„qµàÕ´ß´CÔ†+(nƒTÜj$Š]oR¤*ï}°ßv¨ŽM€*, Ž.N%:µpPŠ.÷™×¥#Ukï`AÀÄ >Ab.>Ô<° GU)Õh1-#ƒÛêúûÃè4ê£Ë¶êçFÖÐôF"‚îŠüð ÞF: }$ºÎ*ž«·"ùEL帽9%!ZgðõÝÇNVsÈ^B éâ·Ùûó3ÎÆM>œ~ŽF”¨>ÔIµÕ ðÜ÷މit„êÞÄÄT“¢>-vóÞñcÕÐQ>µz³ïÙjÃÏÍ~”'Wq‘ø>-oíŽâºJ'eþ¼&| " Bc™'ê›.¶ÀeÛþ÷ÒVÓtªÈº£É"üÝ‚²þn'êÀ|·¾jû·£¦&ö IZDiTÇVЫëÌH·»«VxGÚ÷˜KÁûÝÕ¨¦ýý5ªŸ¹Ü¹Ã¬ÎJœú”š“OX4jhñ:pè†Q_Ð1–í8D2‡¼«¡‘̇MÒ_ÞâÛ©Z¼}pT|I æ†ÛÐÓó÷ÄhU¤º sH4OZ¹ª*:†‰ûÉåZ¯Õ9I l¦9rtækì¶Ûaw"ƒw|䵺Cj(VÌ!©A;ƒWK"¥˜þÕ‰œòs/3Š(ÛÆÆrI…”tªÌ!å'à›‰&ÑÄb »ïäDÄ_s*…ÂH¤Û´îIU‡Ï­ì5#nOÐZ¿:õPŸEÅn£WvùJ ÌFàgÁ”Jýdy²L  ¡.¼ ë¸Ë÷Q£'Õ ž¤Àgæ¤ß‰<çFõjâ®hp\*¶"yyµ!šY9\[Iž¸$¢ÿT—×Á´P;HÉ­[ïc“ïc§öMªR·V¨¡œY“¾YA1ó%¹g«R„6ƒb…h›p¡Yªk„~ N‚t™e4Ž!›‹„a•xk3¸?°ýóô†‘fö…æ[š¾šædÓwó Ÿäa‚­ÿžŒ²Ò¨ªµx* ,ÄÐÐìçË'»F3à­ôk·4nð5ž¡`göÚŒHe9PkËÓøÈóït„9ÍTÌo“j‡yøÅh<¸˜Ï°“‰×fµ¨dš*ÍÛ ÚÙÇm@‰ÙI&“)ël‹–Ëcžý¯ “õkØzrQXf6 €’€Hz®tR.LÉÀE“°åA©w(UJ᭄֥] žÒg2|¨áÑ^Q£š†Ò–ÂWDâ¬jZ^uE˜‰ªQœ*5è?%VUÓð£9P]ñ8ã>KˆX.{ [È6@³Å§èŠù.y’¦³H$UcžÄªŽ¼ê”^À’[c…6ÖDJ»”’4KÞZœ}^lµ "$ˆPcú·:5¤’-+ê‹Òø”›˜·kK¦]¾ òÆHçë±Ú`³ÑRß$\”ÃBA ´50];ÆgGo>ŒO¦B ö0wÌ#¸³Æ8lÓ£OcÌ3âñ:çÌÔ=áP ºœœx0’¬¥Çç>Œg§çgÓèÇÈõ‹¨“q‡Uªjû'Ìa‚[„öYÔŠªDü Ï æäüèäãÑ…2á¹Ï:]q5ð`¼hƨºx0~nƨºx0^6cT—ü=¯š1ªKùƒT7q­Í+X_Ó©QmB\®?kn9Q.D: |WêK‡…O‡Ÿ¡Bë«PØåDg§í‘­YÝ)­ÑÁZ;¶‹´ª•Óx‚2¼\ïÖÔÿ‚iÙZDFIœÏo=ÕMK& ªn¦ª{"ê¯SLm†ltÍOR)Žœjs!é~¬G„™ÿp´¦tƒ%Ô~#™ŽÛmñvàp– B†3¢‚è*ÞªP¤_“áã]ð±BIJ³€`q€Å˜ v"ÅpqMây¶B¬¡£j¾m \á˹oV˜å²wÏÜÑcþÍ ]šžùneÝRôVîìn¢êd·F×\ñ…—e©W|én ‰Ëö˜Ël:~¡Ûûtž zÏÕà÷Ir1ÕG«ºXm¤+ª%²ub2A=&²CG÷è‹(nL%ê“Ë3JEáØ§@CØ~Þ¼ÛS·´4S ÙŒoÛ¸Íè°ôuß䱤Ôa} ЫïšÎ‘¯wà’3²+æµ7•„¤Æ·`cá7§ÝÇ{Hù yc¿$ðDiøÒ½† ^jœ `cÕhLߪôÃ7W£‚mBùö*ßL/RB 53S±z!§ª°Œ¨$¬Ž¶;hRÊáðzÙ#ƒd3~Ö 'tÊ Ü>Åœ×Æ¢¾+³56Ô¯Ñj&r¦9m–}“3±Feôð8T6ÉñøBÍÉ•@œ)ýFJˆáh-ÄK`°Ÿ²F¸âÖ¾ÍÀ,ÉÉez_Ålö1¿…¼Õ«h¦¼/:°ÝËŠƈ>'WÑuüÑf| q Ó¹jh³ë-ŽnD/mðm¤0²’AOQ×zØ5DVàÎF’# ÅÙ{3ïpond臚Dkuw£ æ$Õ õ¡D$e “õšÀK¡á­ H`¢`¶ÌNoÓëm#¡Ź‘ŒäìÏŽ"57‚gkŒ»œäx¨E¿Õu4Cç±,4C£C“=kõ8òXuãTµÚöE@šødÛÎEr\åÑï¶ËÈãï‘xÛ”“:7"Kßï4 ªAc½&pîµcÛ½¥àk5"›èlÍÀ(ǸQ§VïÔoF1EÌö/TVƒù\]Ë'3™í¨®¤Nâ‚›³d~»Î–Ù;ŽGK>õ&ªŠ0_ »Ë%û¥ž$ãÚ³Ê ›é;\ž%ÆÏ@¨þ³Ì\@­¦ƒ¼IaÍÅÒûIqÅ­§‹¼;ŸÄoÙÛ£¿·“iÕ@®“N7¼+·ƒÉf™ía+Ý"=Ƽγ•*é¦Âü‹ú¬¢ël¹hn–»b°‹T “;Š“>Ù5Œ(’ÎæÅ÷µt!= ‡Õ¿;¨†Ù¬ÕÅíŸÚBبñ Y],Äm¶…ÃMã3Új˜q™ÇIìèž½ŸÍ.p€“ ³Ý>.˜Ã‰$þìjZI×ýŠ¡ÂbÛŽY ³5ÉÃVu°â%ôH#ÕKù2È®* ÷NÐe}W$×;ݤÉ2VwK ëC ô­Íïx‚pʸ8—U½©í4ùm{ZgÞ:ãb˜1x”9ž¬m½•=O&†€æ¸ú[æ$?j¡ãÂÞÍÒ TU8* °Œ¡¶z¤Õ¦ŸÝïEm€åª‹·Û<½Úmk½å\A©ñ¶•ýOõÉ#™…r1e o׈ÝXý}æ:äÊ4VOËl}g8p‘'x®H·=^]0Ä]PÛæÈX »A¥LÂCÌ*A°ßh ·©òtú¯µÓŒþ!Ã7Rj”®ƒˆ ¸Am!;®À%ö}zìèS0¡ÀpÒy £wö]§ÁŸü§È(÷:Ђ‹L}’°ïo…kcìíóçÿÜß&ëà:ÙÎoÙÕG©À5Ì —Z•NKeM¹(53ÒA(}Â5\/ƒÑméYcéüÄ|æauñõ›:‹í~™ÈoKžÙi9˜>ç)¾Œâ9«ÝósÕé…1Fn5^ä]Ò9_û6¾Ñ¤¬ËéÚ§r¼Ü¼¦(iØÿF{ÒUuœCJwô‚"ÏÛw~ Ø WR‹¨Ðì£e×'Xçe¦ŸïÿÂx´Åd<âûõ!…¡D> |%k5ÜÉÖð~ôª’mh«ÂÇïÓ)¬¤áÂ7ø:ÁÁx½2ìÛòÚ¿ª«˜ü'2Ùªæ—BAóàv ¸xGÑX …îå«nù Çèj,u)Ôµ—;œ=6F(!Hfmù¾Àõæ'”îÅÄÍÃÁw|ÿ•Â÷#ñk|„ß¾¸3ˆÏêY&0B&ãµÏ‚Etµ×N ݬm^íµ3ƒÞe\íõÂÂm‡<<­¥wë¡Ýö" w«c…@”IØ]œuÚÇ)®~WàE»É!E¹¹AH!"®´?°ª½i2€Îp^±&WqÙ徟sá·²ÏH°þ%¸œ½ _D” @)°˜¼Lª«³¸¸¼¤ ާº}B® b«X@G‹…݃Ò;IñŽ9¶@Õ)½ª-d¥rÂ÷UQÅ/ÌÕûE³´lzëE¯—G5¿7+‹´›í»¸M7úa¢ï»þ û8H(ññ%wƒBc¬e6MWœE{vÍwÅ6[QµØÓcôCÒ§ 4˜¾?ÿ_Ngç£éìh6)ZKÛ…Ó¦—›ÕB£6Å‚@0¹¶av•Ö&«ô6¿ÂÎkãòÃLäá†)U ÎGQ ð±Þù6Ez?RMìÿî'Rµ²Ù¼5¦" À»tdS•;óN”¯Xîòuª¥ÅFA‰õª/åì†ú‚üàss›~øGèsr+`‘{‹^–QZ»¤³3<¾#ÞñÞ7Šn—!–G€$Asô(¡,áýÐsî×Á&Åe;$¼âå}¼§%굪Öó‘Ûeó·èßx©i Tu+&Ê\ïMt¤´[\$£Ç‘@ï". Ú H[ô>Yæ/%d-6*…ªQ'¥)—j,PzÝ7Ët ]ü,{T• =Ôã1¸©-ÙGX5Ȫ¿"ÀD†õF¶Û¢‹_ËÆ®òÀUôC¥>~Á9Ѷõ‚‚ܨWqc÷ÌŠÛà»u #²ï¹Ñ*€ôáKV!¡¤\=¾ ì’¡ÆöЇ Ôun¤A„.™ïÀfe7n†¿+;²µô çÐ=‡›ÄìçUú:ƒîšª×I #ÝΣ8¸yª±°êǬ“\õ&¶ê)Åù¢nF£%Jˆ¨[S.2®t†Cõ ¤HW£ã¡AV•»µo¿KGÅqS~‰H J“qÓ¡5Fn(¦ ¼Š•¼êo&M–oØbÎ`f%Í`/·Ñ¿Æ"ʮſ²å›¯xaìtZ˜]‹c%Ü0u‚>ú–ƒå•Œà ¸[ß*`¥¸Âñm,ÿŽU+Ñïì½ Ô7¿–±cøþ)æmŠ«—£^ù»Ü,)@G\Ë„¨GÝnq—‹ …ÄØ›ý6§øxê-È!Œ_{êÛöž5„&d˜élrzö.:>?û4žLOÏÏ¢#Ü®%ÄÛý&ñOYtå3eAt³ß.ưn¦8GÖLf—ÉN{†ŠKñð,¸¡ÕøMµ&D?šwGÁ(7› HH oð_ þRìz»Ïk†ßÇùbw%™{úÏVt_—[³ »+®'zõ;¾UíÊm³ÉzpA‡^—»8£gj#©…vWò"÷®f˪úå6Uîn‘ êá|ËÊžªV³™ýd1F‹ªm®4€±BÄRИ""ºó5NŒõüHQ;ÔÚÓߦ³ñÇèóÑäL}¨SF_ôXŽžÍµ°Ó¾¸K×évº­¨á±Ðà«¡‘z…ñ»í@2c-õ+´ug1ŒõñkØÃÁ ¹Ñì奭sDü ‹ÁÓb„jœ·¼ŸOµÒWJ?-^S™Qïqå·pu–ÞcöM=£û®::5qIÛï»êÖ˜H¤Gîm–ˆ¤šb=_îÉ@Q.“p9±ä»¾­-âƒÚìèÝ4š\žPñ%Ý AB=„šþzz1ÒÝÞ!•(ëX{Qz³ÎÀy f‹Þ¦_BA )d¤ÙÑô×èdüæòÝ»ñ$:}wv>GãÉä\5÷hŒ„ÔØu¥¨"Çìôãøür6zŠXÙr{ OŸÐûB§)´¬ >á OòÌw8Ö‡õyXÚì]Ç•ÅP*´ê8^ÿïÝa()|(4]-6Ä~K±„_±¿þJôV+¹©üVpŒ‚Î*¼ã…Ëù.Ïaþ^¸E 3!&ÛŠ­~µ Hò„ŠU, ßˆßBžªí(Àâ÷ ê² «.D–'ˆÆÍ0Î\¶ðÙq¸ Ýj“Ö¼.‰•9H÷˜ÿAv|"\†Xîë̸ÂÛÁª×冂ªïèmRò` môÐnrOê5[¢® 6Æ©õ{ë\¿%©aI<ß÷ dZÞåÂiE.ÿ°í¢ÞœmXžu¨Ï}áöl[ˆfQäbÊg{…B-šÛÂÓJ%—æã»vpÌoNLáªË9Y2¤ˆ$fc‡¯MD}&!G!V¢/`/¼„€Ôì›dó²í²AÆ¥B­‹ñEðRu T„ØUXš8ÓÅ3-ˆïdZû¶ËNrïw^½´’¸{•²«¼üu‹÷¼€ñº’”¶JER.kNé[o•R>â±$R¥Õ1 G-»Ö†¦=¦`Ÿ\4RL4·ãIGÕŒ µÃfG‘9o1ä¡)FÿÔRÈj(Bfð7E…¤êÿæ½:½H#^†`BC…¶(-´ƒ˜¢Í³ívùø@%?AØN=ë¹Á¢5òâ)É1dÄË«áÂ×è P—‘È “Éú.¥v H<ÌÍåŠ|]g¹YñÆ)7|õ»¼ä>- ùRÍj9ÆPdÈ_“dC«N¦Ÿ"¾†…AHÔƒMQ¦®÷VñõÓ¹ŠlZcºlµâFíê újé¸Po³‡ÿ½îƒ+Q%>LÀö†[gQ3 KJ ºK¹ÛïPO?WìvˆU(-ÒA¼ÝþÓ!‚2-Ñ…„5›MßžO>F§gŸŽ>œžDï&ç—Ññû#˜ÝnI^ëÆÀy¢êOU9^5¦¯KµÊÞuÕ½ÍæM $á•¡9Ðæ÷¨¨¢_‹FluÞý^ᆽ™žŒÚÝCqýΤîÛ_ ‰0jK0ÒHÙ%àɨÞ㬻tÛéE°Wcü¦kØ@ï‹F’°stôš½¹Å˾0nöžg­FL‹ì¾™‡eøi°‚$ô²¤íy”*–=I¬Ÿ)®˜ÉƒÏN{Žêó7´r ”D ŒêÖ¦º¥ÀuZneÒâráHöL¥2=;jKHÑ‘ÌLÍÂ@­öFuC4Xzx8¡,/ë_H‚×88¾Gšl—Î6é¼Ô/u›LÿNg«kÙ×Îçn˜Sã_tý… C¦jÿÒÒ¨%J^7e­ÝÌŠ”ñC~XИg4ËkêM½  ‰];ÓÓÖ?Ûv8×%7˜Õïþ–®ÿÿøý¨Þͤ¼8£°KPsÄ›V¼RfbŽ;¨7Z×éï© <‹rss;éq_FIcoÔÀý®Íñjæ–=›|Y¤VßeÁ]”ÔôóNÅR>ùvié´Çó/ËÔñr´©~ßÁ¾¶t#àΡüÝ(VæŒ*)dª°•Mÿþœ1å}¯5hÖýµ¢rÈüº'‡¥Û<£àKà@ÞU±hQÌ›@BFE A…°¦v}¨|È¥ à~ ×Ì·üo½]îÕ`ô‹¢ú;æù, D]u1ƒm)ìf³¤Khð14½ŽŒ;¬P:±¦€8©>ì]ß´Ù2öWhÏ2[ýÍW-Ø(ãÞ …(ãqi$d¥õóoÕÛq¡”vㆤSž¦í½|g”,³€§kv¡·.ÛäÖ&tkj £‹ÄJn¤°WãFLˆLFÐÚ 9uÚPkæŽÑò cM¼ûäv%gjÓiцlIdÛ>Ñ"#ŒCƃ^¯XºÊ vΜžÍ沕=¶Âo0:I3$H ÆãEm5*]1Ÿ×¨QÝý0.T‘‡„‚`=$k@<’’bai°ªTÿ#YCX¹‡¾­ÄríÃÄÇÒ„ý†.œ{8WO¨OÙh$K`Çø»„µL¡ ®A£“Ëó¢¹Ï¸v¯QëZß7éâÇà“ê\ï«k~Ü]ðÆ›©‹ ÃF-YLÔ®é>*³\ÃlhV`W§¾<ˆßoR¿±|Ò†y2SŽ\kü6µäžI¸F‡ËQ¯§ß´ç%ÔjÞ`^¯gÓÑb‘ÞÉUÀñ†[YÖÀ¹f>¥½öØ¢ªƒ†\ªãˆÁ„(-1êðÀ½BÙ¦mçdýB!Ÿ YYílл­§Æ¹Jöt³¢&(LÉ×CM®Y®Ç€mÖ­“m}õÀ'm DžˆåÈ}:ÅxVë\çím» œ`õùéÚ˜ÏpÞ[bö8~zÂ+2É^rHMøí^…‘¦%Ê #ŠƒÊ¡‹Û{ï>SD8VõT`ÓøFojÇ€ÚûlÓ¨ª±×)F‰´L.ÎØ<()ãBõÓ5þën·üßóý& €£êŽ8'–ob‡”£|`6 ödíLÚ’«kŠ#Fr9—Q{d2:ô ÌKÎæRÊ1¤ù¤§¤ÎšX-”·AoÐиÎx¶ÑbÔfrš¡6!ÏÔe¬LðTÆ÷f‰ÌìÑÔ˜gÈ kä«Ó¸r¨Úï{b͉;è‹dó®"Û›f˜ ¸ýÞ †‚x’\§kg†&MxîvÁ‰À¡Ö¥*I[ÈŸPD®m‹ž®‚Ú,† æÓÑäôè͇±$ûÆgpxb«Æ Y$•À(=8 ‚¡›ŒÇ'ã³ã±a*æÙæQ¦s¬'<Ï#¶ÖôŒÚšr³Q'][=%§‰AÄ­Dã·ÔÛƒ´¤¨MÀBãKª«äÇlçúY€¾ÓW1,ð#º/›;A¨X˜ ÍÖ'kOi~ƒˆÐ#$€Þ3œ„—>>=B@|Yžhåi–žd{°9ÓÐZ)» s ¬û¨>x#R³Ó…üÙ;6žàö1\kÇЬßvœü¤­8S× —¶]°ü[ú“]såk&uj™:F­5¡jõ¤îK› #d11lݨ‰0ô/qÊÒƒUB@")~Xï¼M•¤j«¶{rhµÉ€FbC‹d¾Ã9úd‘n³¼»¢²"Ä,¨‰žƒ74:èѹ‘ú䯲÷f)ü$Ïû6E¤{°XÿÓxòæ|:ŽfçÑtv2žLFwi›—¬Ú¢í2Hk…Otd½=”©„³Ö'Îh™^b}'{†ìdä|“ßAZ-Éï(¬u¼ü^ áÔvFÐZSÊ9A¿q1BÆè‘)”“"Å: c{7Ùäšý†~Ë\››zÖEöº Ö_gd|%#B– …¨k®¾’½Æ#íIùʶU‡)5™ú*Æt 4Ü-%_Õ(w’©-ÓZm4!è:ú¸Ô|µ“‡ŽRÚ7ƒ_Ë•¸éúq-n¾¶«1´ý3û•®ˆ}„<+AJuW¾ÞH4Mið|‰L{›älS4dSjÓæÌ¥½ ©É]*&ÉiGMsVS†•eØîöèõ1fO¢f©Da‰–’[Ù»³5å7 #9&>vmVÍkÇô{½H—¬V,&=_çÜÒŽ¥’F™ûþº&ev­¥s¡ôJ„©{âæ’Ý”\ù©ì¶S5—í†s»[Ó9[9–U÷2µÖå˜XNØ,FBA¨ÐCBï’Æ¹CÒÔG´!Õ´©bªi?îV¡EøYUÝV€§|«]f3+¬3Vê.ÃÆ<×h‰Ôf!¾Ó’vå-QÛŒà¨.Wjï»[É–*Ö9ÐÞ ªÞ©½ pS¤ »m̙ڵ·!Þ8lN™ C®Ô»¬xL² PgÔ¯jª OçSO¢ »ý£2:“î}ù‰>í}Ù‰îãç9ìˆF}Ýeê1È8¡‰ÌyãL£•³z© ~r…¡(óëxÞ+Õ¬R â)nPÇ=ÕêD`N“ñt†Õéaðîòô—Ñým¼uüƇÄß \f-°ÅëŠÇ7EçŠk„KoÉ} w‚”m³¼´¯òÒJõrzÂèdÛ,„=ëZÿ3Zw›í–‹¢$ø÷þã?~ Ž–Eö—à–vVâmÞdK[ÁÓÀê;• ¿´À„¦¢çM×,²Õ€jh.:ÜÆq%ŽæŽMY:¿µ¼Nê–±LüWXw‡†0‘±¨†«@@+Z…ê»ÍÓ…Ù¾„Xv4Ù@qe‹æþ6‹îá^Fƒ+º‡uCõÄ)MPL÷E¼® ÚÙ—°¢´ˆnËA‹Ûc"G!pÀSeŽ8Â+~ö%Ž0-BàÐ^n,(|(ûhA¼dÙÏ’}¸ÎBÒû|»Wèë?ÿø¯-.4CAÌ!Å…:%Å3³ß©W‡rÁnÔ{H¨têû@Ù“®iw"ÍÏì6Ã…+œqBÆÑ±Ã?ŸžEGÓßÎŽ!©àdvy¡‰Û.¶¾7Öv²ýæÛ²›mÙ¶!2·‘ p´ÕÁÖÒçÌV?þõ¯/Ñ…–þô ð0€ã¿à¿ÁäGÛã4ø9à]»Éâ×räÎ(ÅcÌÌT7BG{¬a]âv¸ŒÆÓµ7'©Â K™ŠÉ'Bà€b–C§(Gg’Ä¿Šß˜SvGn2¨ì¬ ³A|NÊUÏä&+Cb½§rÕ…¸‰À8k¾­µ.Åx~Pʸ²¦æUm£“6Ž·Ëâ‡{^B"µÙ‡iðÃÁzó9¶bÿ‡Vóxáíÿ>²9ÇFC™{Á ¦l,nw[eÞ:‚­×ê’wëÞµ…PH@ŸÏ'¿Ž'ÑôýåìäüóYtqþáCt|~y6óÓ«aT¼ zòÒŸŒ?ý†ô耉ñ«Ë¤v+Ž¿æv”9à"*ËÆ|v x|˜ƒ£ÞA@¢phd|b WËá{žjÂ4¸Ð¢éÝàp´§óuC¸^-¡e\eÃÙ˜¶\¢_L(0¡Ñ%!kØøìèã8ÿc6>›bä+$¾É¶óÛx€— ò‰6ö‡Uôû.súºßÅHÜ÷D9 „ª«g`‡PE!_²‰NA7޵Ñfޱ߭zîŒcïVfH'ód“)Î, Á®¨sÊ0~…p½¸èÒá1;+?_!*/ig«+òÔJ·Éª  X½|ÕGñ:øŠ½×ü o¯z_£ÿC(././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.444556 ansible-core-2.12.0/docs/docsite/ansible_4.inv0000644000000000000000000106317700000000000021055 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Ansible # Version: 4 # The remainder of this file is compressed using zlib. xÚĽËrÜH¶®9¯§P[÷àœ¤}’»{›íÉ1¦ÄÌäNI”‰TVe·µÁ Ž Åõ£ô³õ“´_p¿ü_¾‚2+UêÂõ¯ï‡;~ƒã:“É&o÷¢ 7IQuxS¼üçQT‡|û漉Šä]’mÅ÷·‡ê˜þ¯ÿÛ›ào×6æS¾=¥BÿpœFR:üìÛp+6§½‰ªªL6§J¸…%»%Ešd§ï¡,DœDi¸“™æûpÅIšT/°@dÿ>‰R&yÇ·̹@Þ*^, ËÃ:B+¢2:â—´X }»‰dJ±¥ÈbFE!²m ùnã.üöúóýíÏoÂ?n¾ÞßÞ}v¸2gÄîo>Þ~þöðþËÍûÛëá/÷~zªˆ£mØ•Ùî”Å•®‘¨n)¢4 åicî{1–s¼¦iŠ4ªvyy¼H‚ƒ8•‰¬’XWþPFYR%‰‹¤²—¾6Ó^8æTúžÊ³·Q¹7 ÞÛër:ЬºWø#J“mTåe¿µ~•„oŸìïÄà^çN]§Sò«§´º¤Íq®·¡m?Cåô$&íáÅÓ‹²ÌËð(¤Œö6ý«]f›ûõ-Ÿ2y*м¬DÝ¢‰J”¯l½©×—&©3?¸&IÞ~¸ùåúÛLJðáÏ/êIvýñöÃõÃÝWóðQv£K{+²'ÕÃJÓM?^¦Uì%+Å1½»õ¢ÙšçJø(^.”í©­š¬!]’·ñAÄá1‘2Éö£ÚIwMâSuRuå%ßãô$“'ñJ‰Kñ¯SRª>ªtòµo^^;c²{íŒy&ÂüÕ³V¹êoDùJy«—B¨áö«Õ ›/ÏÓWÍ÷R‰W5¨Ôª×Ì·SýúWM˜d¯šîŸ2ÏT[÷š)S5"{Í|Ít×kå+£ç×L'«WhÑòSV…ªpä¾Ù»Ñw§Æ*¿½N“HÞèßë$ª?! Vô·õÌ×/ußös^ý¢®Öö²Ùº¡Ê+X%ŽF¹†çSåžuv6Û'5L ;ýýjW·IúÖj¿¾Û øs¯~Œé‹Ì­8¦¾P®G0ê!qÑF¢Îó‡l_2ÑM*tžK¦øT;ošaç%“}Î?æûK&øZ|~~y,Ä.RUú5R½FŽÛÝkd¹ËÄÝ«$z¨¿—ÌuÚ|ifŠ.Ýê|릇/’æT¦Ž«ö·êÉ•Tf4µ¶àYÿü.JR§Ÿ—"ݽ-ÒÈe]ºýÙMž?ºþ|I§Ÿ}‘o›¡ÔÊþû¿ýûYmÿs›Ço‚ÿñFýÑüÛ›»¼ÿËßš%Ôë÷·wŸÃ/¿ýzûùÞˆìé)*—Š/γ]²·iìOšéýýúëçÛÏ¿rþúùîþáö}øóÍû»O7á—¯wŸ¾<0è~þ3¼ùúõîë}øËõÃõGÅûßÃ/×÷÷òõ€¬ê‡›Ÿ¿ýÊ'¦¼÷×7l‚·¿ü^øÀª÷ñöóÍ=«â×›Ow°™6ÝR.±ßnýí£úÅVaî~çRºÿýö —Ö·Ï_oÔ3R?¸$U³øóÝ=›œqh}útýùãK5+nu+xý1üùú«Þ‹ô•Gö—[–†¥éš±µÍ ߃õóÃWý8ù~ùSõìÛ0‡ôßÕ úýÍ—¦N…Òãºjxó‘­ß¬ä;OLÏµæ‰Æ;©ñáæ›|uÄ>%?þýúÏ{&1]¡oþÁQ ·÷_>^ÿ^ýõ>|¸ ï>° ]]ý ùró!üíîþÃüÝûð—¯×¿~ºùüÀ×<|øöEuåU·(üóúÓGÅþþ!üýæOa; ổ©ð¿rŒÛMÿ#´‚{UACÕýð‘UùÛçj`üYÏÓææ7ï¿=ð<ý¹~ÿp~ºûðí#G7QË1µ¸¿Ü~|ЮzùËÝ×÷u÷„K¬®*Üý~ÃÕ#ýU©Ü|eé X©ðþÛÏ÷7lrlŽuëÞ~~ÿñÛ‡›{ÕP]«÷Â÷¿…?ßüvýÇíÝ7†š£»úªVãýï,Ec$U…Q-8çTÛo_®¿Üò=n?ÿ—êÒÛÇÏÃùö³y½ÅvSÔøzûó·ý`¼e™ÌUòª·v÷õOF)³<øíóå_õQnïùaí‰]u)c¬Íµ”3¯Ë¶X2–gk¾:a¶•ˆžä?¾Ü}e…äz*ï7¿Þ°–cãÕH¶7/×û_ªa¼þIÓÃÍg½\rÏ&ùY=9f¿¹ùb¦¢ÌPcðòñöç¯×-«úãöëCøñïÃÏw÷7ï?^ÿ|ðéâãÝõ‡ ,ç}¼Sšæ‰Í6Ic$Ç›O_8´~­ƒß1Mjh¡¿³éûŒEçAUà›½XÍ£øíãGõÐP}¯{õ伿é8Þ}üÐn­±½Ò7× Å¡éןn¿ëÆg×ßîxˆ[mÝŒéÙ'­ÏPô_ôîŠû=¡Ü,Þ±uHڦ߯ŠòAõ~.™áBÚzÍ<ˆxfé¾Ü~Ñû°<ºõ<ßϺVð5jzt~½»ã¸”wê.¾ý¬:pleÕk^7n>¿¿áкýC/}è»U÷JùÍ$ÏE½jk® 2ÏÒ±ª5ë§ú×·ŸnTÎs ên>ϱãÙõi 3þà&÷Eï¯ÿ¸aê±êĵçëë·ÏêÙÌÑ·ÔJ¦m`ëºÍœqæ¯ùÛÝßÃ÷ßîî>™i\Éßo¿0]C»ÎÜŽ 9¿ª6ç×?ù”‹÷A¯è‡h³•óši°V6gÙ'î7 ÓýÕ³Ô·oþdTcsÆ=ƒEùv hÞ8ag_E1ªlÝ;UY>Ýê]elõüáæžqWŸÑ¯êwjÀð©]é°ÃÙ÷¿±ôMŒ<σ^=ágzô<“™æ‰ÅöÀç}þÙ—©TöëŸ_Â[Õ³}`i4¬î¥ô˜V¬Ñiű{3íïw_?0õéëͶõ1ÕLrI²”ËßoÕ#õþÏÏïuSûõAÝÛl‡žþÒ+ö¿}S=–¿¶#¹÷wß>_JûÃúk›lºì?_›7íY2ÎE*¾·ÙCsþ(~…Á li#øµ¶¡¯y&d%¶Ý¥W4I¸O6Ç0wû×ïÔïDššÙ¾À¯®›ÈD¥¡Šo(’@ý\`…>´oÞ'2Îߨñ›:v˜Ó[æÀʙߞÌA]£|õI²*Õ?ŸJ>ÓA}.B§Ü™~Óþ刦R¢¯D#øPÿW3¤É¦ŒÊ—7ÍÑe¶fŠ\Æ"SU#·ÿ&ßYÆA&Õê¯úÏ^Ô½L L¨ÖÔ¿Y•ÄQ[~6HÎvÊôg hºx¦>šèMû·½Lõ9P´4uðõ584¿Óœ°ÔË0SïØØ¿¢êM"{…ñ?{úYþœ…‰”ú`Z#Ô¿ë?¼±襩«%1CýM·_oT©O šÔ :ò®PwŒ®JQúF|t#Ù/Õ­BT7¡^ƒUeû4«ë–ÊbÎdÑêúÁÅÇJ׺?ŠÕ¥ØÖ»²Oa#¤ˆ§}’.Fý—ïìÏ4Œú÷Aóó×–ã‹ýc£ö•™b—Ͻ~ç Ön£G‡ü-Ú¾9äñºé}š«Û¢|éY¶U~·ÛðË*lÐaœ§©°MÙ»ú›w›“ê9$Ù»Q`M¼Õº²ª+œÕ×­j”Åu¯†å¸ tm°¬^ÔóÂþ¾×§³A-hkóWoê¿R)žÔoE£OþT7ý“jØòòñ³¬ÒØŸ°õO]ž Ã8™# *z})ÛÐëúªÆ«?þ-Úg¹ù¾ÄF¨&T„E©úZ—j‘ÀеÈüñ3‹Ò$NóÓ6>"œîÞ:´N[ÿ) ]=M>÷Öz>Í\·¤ÑV–ŸýñœIGJ1ùÒûÃßô×LšîC”mç‘ATõ5IÒ¦­V5~Û6+·ú~Píw¾{£~¤i¸ß˜Oß4Mþ”Š>$þÅtväÒmVw\ÞÙŸÜi*¹ýÛÀ*Ü›?˜.ŽÑÏŸCÕd¦[Õ’G[Ó“®Ž…H¸aÓZÑ ­ Õ²çï¨1éÇj€uýÁ¾öé‹YSªË¢J7 ,Ì¢ãÊÍötT-¨ê‰ÖÝþE{ó†Oǰ=mª-‰:M`Ò&Mû—¿ê¿û¬ÿê¿©çWPÏÑ‹äxüÔí¤®>‘>UV¸ ÉÚ¦G¾dUÛ¨Ô-¦®G”žÕhÚMS{êøÏ7ò ®Mo´øÆ~×À\¦Êë/‡®³º3öetÔçY?77Bs`×u«³Ó§·éÑ|s(ÚèþH“¦mžŸöæ¿é®KŪ]üï´ŸU ”PP õô÷Q}ñ®%ZÍ`£.0I±g<èZ šŽ Ûžµ¾Ël=6C™H5‡ê—ª½VgrU{k.Cпu§qÁöt,Þ}•ø¸Í›Cò–„ÚŸ fä‚x1Mž¥/A|ˆ²½z@ò$H.ä/gL÷$¯Ÿé˜,¦‰/—à)ÏŒ>´Üršøb ”…ƒH ýÜô“(7yÝ øÑ/¨Ë¦Ÿæ§^ Ms.sažØ¯ˆÌÏ_•#Í@ðLJÝdLhäæÒ™/Ap$Šçåó,ÝŽoŽNm.™ù,Cšù‚ß«2Ò ,w—˜Í±S}gùݬ¼ËÃÏEý0«>œ™ñL‘œOèñäåò¨![†¢Lžô`SiÎæJ“cRq$JäU—NOk±Ô«žÚ\²zýÆœóÌí8›¤«û¥‰èÍ&ì•à+Tuc•{–R)Î&ÝUìYG’³iå!°ß âK;’\JËlv¨8›´,­¯Ñ™M`¦ˆøé½¹„úè÷ JŽ"?±´`½Ù„Œ¹fpu»N³ê¶G›°ô$[­åDºëÌööÆ­ìùÔÝϽfz·A¸SÊ¥’©;;;·iÞ_¬Kþáb=äß/6Œþt±ÎÄÃÅš’ÍÅF¥ñå‡RâbCœÝÅF7‡‹l’‹ 4/=/”^l`qºØcò‰¿ñ.ý—i¶õvŒÙ)GõÓéFý—A Æ«j¸Zäúìç|µSOêŸ7“^̯(&ŠæsBŠÿœ(šoµz(¦³Ša·0MÔÝMt¢Šô^O³”ã#=š¤q ¯%™;ŠW”Ã6I™ëÝ ¾ðS]™%ê>ôª)r"ª¿në£XM]ú–+¢Os¢«ýÉ5ÑI?ÒHÿÂz‡|b­¯‚µ-<°¶ƒÿdmSÖö¯d½ñ$ëW±ÞmO\·YoãÇì³Ûþûôñmÿ¾¿=Cï'Üê%¯"Y ì«N´ƒ*™Ã./cq‚SödŸ©>U‹reZ™;A䧪Ð館=Žh }u)ʧ•¹#ˆtJokά‘ñª»uÈW/ìmþœ¥yt©6¨‘w(ôIœŠ¨ÔÛø 5ôRmBÄe°f39R¶"ìÍE§ìÊr±Ö³»R®(Y~ÉkÕÝi¶¢¸Ð5q®ÐEy¡Ë¡…JûÝeýÁr‡)|2QéÊs§[ áÜæñ?ãH-^ücïÙìÇÞÅm<Ë{#Èq $YR]葯¥*MÐûù(RQå?Í\6þ‘¡Ù¹ä¾ØÝ^'ý“ì}£ÚI;p\àAaò;Ý!üèþˆLÙï~L­—¯_ȲŠÒôb-¡Qw*ì†ãâCŸ ùô»×ƒ.Ñ>X¾Âæ´%Ø!~Áœ¨Ñ²Œr¸‘]ð!RW" ¤w~7IâHr‘Ñiá48°\¬Â¸¶7Ü#Óöö-]¯ÂeÇ¥ OéHs‘ΆEp½k/ÑåÀD§b_FÛËÆÉáÛLÿÈs÷#hÉl ³Ù?²'SþÈvOþ€¯~“ù=oóNÉzk×¾K}Áþ¬A)\0ô|QÅŸ¼Öu ¸Xqòø"ž¿&¹SUäòB1þ1×¼ø1õ]¾v!§ú©Ã…šœZÝ¡°;Ž‹Ýo Lì r,ò²rz†Š2JáÆ¥FHÏQr FÛäíRâZkù['Bd=•?àú«ROv/j4¬¸Ãõo).ÚW©q 7”‹µ^5F a\`n©æHÜ8òÝ.M2q ‚FÚ‰ã²ó)5QéÆrV³p¼iùÛLø–ܽ‘ü¸Û¡øq Sùã*¼|¥ª^š7&õJ¶à|2õd—*ø03ï# Ÿ>^KÍÕ´ô“®^i¦æ½Îñë^[ù:WÕŽØëo3Ð8s]ÛÌ›RoÉ›¸Ö\É|;§Î¯¥fTõ³.ަ†¹ÍŸÚCXÙ²w²+ùY[:ùjý–UT˜K¹Ö\ÉÌÙ^÷Uüº5Z¾Ryf»œ¿µR¢ç¯©Íz‰öB§ŽÏ§eÔt3ý¼Ž¯…‚©‹óIyp¥*±Þžn)~½ÊS¼^ÑÉ×)´ä½•3»ûY™¶9u9wçó]¤½Iδåì{N»œgv›öss·u*éZ[—´}"¾ÍÏ]ö¡ðYæ¦/©Öî"Þ¦ÏíZ}}M©õÎeŒ_ïÎÙ½^Û _§š°ïÌíë®TæÍ¥ƒÌ;·¬œJ‡ù×¶’Žh.ò$XÜ 5Ÿœkr=YÍþ(DÈøhN`aξ_Íζ=tw½Ò›?ò, 2—N™™{ý‹[°F©™€‹ûŸFiyƒ@Ó¿ö­¼{íftÿÚ7lòÚíSöÚMCñÚ·eùÚM|¥€{ïc+zöî¿È6¿.u|>-{ë¾´Õ¬Ÿ”µ]_ÚdÖOÈÙ¢;hüz…X¼^ÑÉ×(´Ró'þ5T+{¶èÚ̸ëôñZjö;²N\¬%f½+뤫EÌyg¿n¡¯[”òu QЍŒì÷©•=[Œ]æSuÈKÞĵæJæú/«h/yÓ÷…W.ÐJÕñZê"*ýsÞNv%?kcU'_MÊÙXµ<~ݲ•¯uU«SqÆC©®\U›÷"7N¯$^=,MhÏç´-9kÖZr%/wgÆæ.VÒ2·:åZ5æm+qüš·xÍ"”.<—ƒÕ²æ¤]NvRZP_=JÚM}r t“ãp™ óÄ{E†_¢›=õ·ý‘éÁ¿Ý?AŸÕ)NA»×ýºårúÕk^A|×û¬¸ÒÖjK©œ¾°ˆ¤[È´/£âÀ•ÄŠÍ'ZmK€<‹9rÉV>Fk>Ûç\ÉZ¢õu-†lëŸ_’¤‹IøŠhÔ«§qøÖ#˜lò½Ç~J{L6WºZm>•ó'.€„ Ÿ»è§­òcÊ•ÎhͧálöŒÖR‡OÐA©&Ÿ¡›¦sûœuékpónŸ£» „C·I¼œfµÿ‡¤™ôûÉ^"¾Ûâe>‡¸p7àpá'srágWzáÇÖÓ…+ìË%êOÓ¢/wý›Ÿ˜öüÛ±=ïúÛé«=ÿ¡à´}È<.çâK2ó9¸Q.Ç ”qq,±˜{u4Þߖ'OÎ͹z Ú!gr7”<—uõãµhN#8›qýÃÎ¹â… Ý*yÒÌ}ð²—o›ìv<™ ÉqtëœF̧٥'}FÇê±™Îyú‚óÍÕC”mSÁen¤¹”÷‘+Ý|†ÕÑ»s‚Ã|·1µs–d%Ëz÷×7Õ£àLR”ÉST ³ 4›n}ðîœ+]Êà4¤vO37 ç[]<ÆÒ–Œ§Ùä#o:­7›Ïõó—Î óyúçuj¢Œ‹º…J®ÂiÎçÝUH<Ïü˜Œ5µ“›Ï¦ŸAùñ¨Cù|ŽD3³_à¡æ|Þ**« ²÷SÚäBVQp%ÅBŽ—¬Š¾sö!г9ù*êru9‘Ï=Í|¾>þi>Ó¡s’™éÁI.·ÙA0åÒ´Ülv·©Á 8Ì ºg]Ì!ÙQÓ)Á.ÓûK?\rhöû%gw>]²£ópɶfsÉ™’øUFõâ’CíÝ%Çž‡KŽ;“KŽ_a3½ä˜¯ºp?átÉç÷Ó&§4=3›®þuf&ýd_cQØñîúX¬šáRÿ6›fCæìײ=Îëû ÏUìNßunÞ%Ëòœø\¾õùxŽœþµ4“^~Oyµû½*>#œŠ(óT5SeÇ9îUùÙ§ Í±>¯½¦nftK•ruêrU|ªì:Q¾&-¦ÒëGD¬ªÎ\Š]Ó@ÒEµÂDw}úyM÷0uœr^SNÎ(; ¥ònSËk y6…Ãtòš~:§ê6…¼*=;ulsÔ««‡5®&é -eYŸ¾]Í2Õγô%Hvª²½ð|åS}ç)a¯TœÊ½o 5ed‚y-ÅòÄr ™T^M¶<™\gs›H^Í37\gH…ðlIçT‘)éUýå©è.[‘,N?Û\þ…1_N¤«Ò3ºe?ò´ñ¥ît&9N¥ç3þ4£¹:™»*:Ú¡auÝæp×´çænûúŽó¶nigKÇçjy²ºÌÏ®fšÕ5ßP÷»oc(5—Iz/ff}ú{î¡ÖïÜCöOÜÝ”î¶ëw£_l(¹åé îñÝŽ{hwà~%ÜÃ¢Ç MF¥ÜàãåÆ%9÷`Ar÷« ô¦Nè9<ñ=êÌvyÚØüótÞØ>–ãRDöc)î3¢=Á)]_öü4åY€Õ)ÒË@ˆ,._ŠÊ­[çŽ0‘]`NìšÐ­ƒ‰æ]êó-"¸õ8y1¶Â” û-PëºT¿%Ž›€„áðª!zòªá8W¥o.ÖúqJ¶j?ÌìZá.Pñ±Mø«½u©l³É9*<ÀÝâ›ô«í}œ5©[2¶*ßËéTÍ.PÙݲ˴ñM9»T·ìrm< ƒ½â×zëu?ã}Ì4 3]:n§¹ï¹ hݳ >f ¡¬Ê$Û_ì´òÀ=°ÄyGz@]êþ¬‘\+q´ºâ‰CdëYyÛˆ:ïù¦¢K^”ù±àN^¬ç•‡ü9H2~ã=áuˆj›d—(õžð*Ä…j¿{­¿P >àÛÏ ¶çXÙ«· ÅÅoÌR<Šö'–Quy&̧çx>ÁÜO# °újÒgâ™9õ@q=-ëÝ6&8£50¼þW½37|ý¬ˆß \xˆ§D<³ßøZÔ妛MÎqÛƒ\5Τ]¬pƒdlõ­—Ó©¤/PÛ\\öŸ:¤;Ìèºl«pq2/½ºßÁEz²ã¡Np¸Àõxb¼ú]Ù¶¤ UÜߥX|œR•¦«ÔP+xNv©Í[:b’M?îËü”‘Ä7C­ÕóuläTÌá$£óš“s‹Ü+Z.`»¼Z²$eœ^ÊXÔšÙ?ãðÆ’Üð¹½±¤5,ßÕÓs–dv™µgÄ’Êa âôRÂâ9póR«OK7=—×7EÌmwyÏ`I0ɸ¼X°¨5ó:û›Kª³ûtÜ_X”ˆå™ÆÏH€ù@ÉõLÙõ7Ë“acTäçß Zª¸½´€Ö?÷w –”—Þ À^XT_zeÛu¿(¿´×ÚfN}‰Ýñà“EéÙcN̆}ÕËpØ]¿$<ˆ{h…JAº]M\_ˆÚk8 T\‘ç;ÝÉvFÐi x^waP†ÉiÖGg‹Òc!IìEMÆ_oƒŸ½ûÇï½û†¼»p¿{¤>y?>¿x?—¼ÛƒÈ{„ºáçÄ||áÝ)ßy÷ÇÞ}ñÄ»ËüÈ5ÄO½»ÈGÆ.lîÝÛ¬8€'ï‡ß“oÓn/Pxª’Twx—b'J‘Å"ŒŠBdÛ$ò]ÿÇ­üèJ[¡kû—o¾6ÿùæ“ù÷7ßÔ¿'U"dC^…emQ1JoÿòÝû»oÞ?ÜÞ}¾W?úoäWAÛd,ÊüŸêv~sõößÚ ÿîžá߇úÿ¾¨ÿï=ýXlE¹a)þuJJqTƒ×ÑEÕ]ÕS–T/ïT»S•ÉF]¯l£DõÕ(hÛ]àî“%dùÚÿC•¿1?òæ%?•o¾|!•o£côWž½ž¥þFqœŸ²*Œ*‹%ÂT…NŘ¿xgÞ©àwç–\ÈÀ *Øþ²A+Ôÿ_á.Š+ÚŠèŽ=Œs§ý+0quÅw†L²]N`ì…!ˆ: "Œ#õO%íRÎÄ:³ÚXÂ%­“R.ë4Å…/¯ˆ —¾h¶ :ˆrfTQ½É8'¼r+ xƒ(g<ã ©4ýD²ÿnJPϺ»£.)¸c× A­´ NäZKÛgDyÕI)âRThs?ˆrG3QPî¿ó©úaR„¥>NDâ¤ó´’"°¿<ÂÄmˆ;£<:SÅi~Úê/0G¦Ï·õgâx‡ñ`›?J޶ûËát¨ý¥¦CÓy]Qõ':&xÕ˜ tÕ+V†&Z fâ J¨Ü›d>B%ÒM¨þ‚ ¢œÙTT þáeÄ8t‡Ì(5P§£ÔÀQD ×@ŒÀG@C¨ôv‰‚VÈÓPgJJ(h›’RÔ“H.n›DIDØÅ JÖ…8séÅ~„ê(ªhU­6ÎF;³6Ñ„:‰r‚`‰Ì¢BòŠvg£9›hÂlSîë¹`¾»Û´T\*)YE{Ò5Å9Cª8üJêd>Bõ”§´»hèL¨ ÷ŽNG)âQD ±NFà# ATEnqÚÅbqŸq'/â@‹õ2¡Œ0HUbYƒì¯*#Ožø(y&*z5CÔ*˜XmtZjuÅÂĤꡓY‰˜(¡ø®|7 <ÃØì² ´_!9Ÿ¢,uN½ûÚiÙl½¬‚8°*Ö†Ù ¾º¬6¶STnƒò±A€\TÃóH +E‘ËD_rã$ÃíÂAr)ÅQÿÌ< hë@œ³¬H”eEb,Ñ: _2ÕWQu’ÎI0B«‚ 2ŸªœÔl âR7M›dŸa$a‘§IŒß^ îØF@]æc`°‹lÓ;öÅfÑûa³Ô.}°Yà}uô‚Ç£à*žŸæñ£ê½%„6m @w±p|܆ò &e;ÃÙ†¸ã©Àfq¤ÊÇ(Û—pðÙ8ðÒåêzï×·VL{a¢[Ùb1%”UyŠ+ÕÅ#´³³áq·ºq^¼J¿x!}¶¨qé213f+]¦cÆlåê$̘M>™ö®”ƒ8€ÐÆaÕr+6º6Ã×pçYÇaWRöÄÓžxÚSðÔýUbÿ‚6q(b›Ïr§ßsÙ%9ÁF" ;{>öÊ®È1jWð]Ó Ux¿PîÊ}ß#Å£ªK¢ùwr6VñAÁ‹ì .ð.ÆRÅ`Å-¾êŸà‹9ðLvévQ’Â|½ w:²‰*>àp½(€NGx”§3éÑŒ?—I£Òp§èˆ}šoH×®ˆ1ê@ô†-½ „°ì’RVáNŸD¸ŒãX„TÅ&¼˜¥„>Î ÀTahgU÷·•Fœ3Áî´6˜2G±™P&ó’2&œ ˜›`x<¸Ux*ñ‡Î0!­ôGÑ [)SÆ. BTa aBÀKl f6~nð1ÿ(@4»F7/N$Â3ëx6›>Ø+lO÷rœ‹vÇ5«–YÚ“Ålê"¦×Ú%}ÉÒ¤-’L¿2?¢æ¢Aj>°t¨>Œ®Ã£@ Vb599y©.Q}$Œ;ïNmã»#¹(ðeNèOOcahKÖ'7I*q?F6Á s§§-áâRGƒ¤U…i0ŽK¨ uZbm˜‰Æ©=êƒytQ©{Á8´yìÌ[ñ]¯®Tâ(á1Ù\4Bm¢ËóÞü¤„!  ütÖ©ðË™.b‚^ºÚHØ<)徤€7'›¶ ‘¢ŠÔŸ ·Ú0@®Á[ŒvkÑn)üVú§ÌíŠÅà*ãÜ›¸Àæs„Ô'Vq†q¤ŽCWp³ü93w^'§±î°&Öž}‹ÕL}èlT£@wTˆtqKË$c¥lhÑqøýÞÂÁûÝ Tq:Yà$¸Î˜æê– GG–»Ž"J9{âYÔ£8êçØhö£ÜmÔ`ê×iᛥ„ÀUvƒUŸå¨K nÎÇ‘¥D›tuwé½Gèí2s‡´aØ-“gB7„‹9Žtç¬#Ñ‹Y¨ö‚¸V1íŽ\GSV+šÄT`**YFÇä1¥<ÐÛ Ô瑃Íis€3|«ÞúÈhèv+¢“¤T…. !TQ`50Gi¢t]§¿æ²´‚@VÀ`øŽˆ^„îˆ(ògQšËè&éq$@ÙFB[¦ Y´¦g€ª@¼©)£l›Ãøë#ñÐrŸ‹v'¶ÑÆjB=÷Oƒ >c·O)6yޝêÂ<†i b?a4q dq$½8Œ ‹#þbyÊ"ö¾Ì冨‹uÔäŒû³x2.“‚´†;ŽtÇ´‘ðüp-íA •µÿ:™ÃÏÑ&rPÖXÃØnJVÌE#Äö\T°¢IL¦¢‚öå Á´ç&àœúPIíGb¤&F%làéGAˆè5ú;šM€u€:–¶ _±^‚¦»½ØKO%¡@{QžŽñˆÔyÒð_ßGø%ì‚<^ÀÜáiC®ØÕ9)û± ü=‰E8ÛXð1}ÚÔßÁ z áÖ¡h¡osB±·Aá6‹þEVâˆoòÆ„6¼€/ò)É»}G¦ Ä8•³‚´²8 tçlqÎ4ªðÞø(ãÔØmÞ¦£\Ï^ »žù^˜—àë9 8ë@ðzæÇ”2 Æ!”ÇÌê¯zV a¢~M\{:eQ’'¼^Ž#Ý9ÛH¬fž2óMK¸bãLû M¨ZžÊ¿’e‚_Ã2¯^™âW®AÀRðŠ©8~ɺ Maí)J“­n{£rÒ}»P"†iÏʸó72A#hÔQIÛÚ8 D¨KÂ&F³Ý—ÀHâÙž£D¿pYö†p•XÖp'×Òè +±ÊÐBéÉÈg’•GÒ`} êH|ÀþѺ%Ã8wLwK^NG¸È»îtÄ Z'ñ8/q6ÃEÏKÌDe¿1ÿ6N“=«~7^çn£”5Æ6_Q©{Á8´9;‹À\¨f[‘û±(±‰E›CsÌßd;„wŠà6î4Y]iE¦wó;Ïòt¬ƒ@„ÔºÍötœ‡ª*¢" ì4!®£ÝvšlйçŽzŒ@Û` 3¶«·ÃÅöõv¤ÀÎÞ2‹Š(=/ì$ÁµÁ” «O÷ÞD*¬$´e“`ˆYT F[3v/*"ð^TDÚ½ë™áCÔ$«D¹Cö¹ Çñ(vOOò柑@-¤?yº¸òwqåïâÊÓE’=Fû=ÕÀ f·Ñ$ìt[ø_þ9Ø„ñ,ááÀƒ›B›ï÷ÈÆãð f¶Ñì‚Î\Ð *í‰ú$ê"aÖéI¤×Ø“8,óSE½g$Px+ ’ ³ìIåïÃä&˜Â M2‰¡©æ!¯û„óö)2"m/¥Õ¡$ÚrG…-wTÖrG@5g“';f@psÚ1mÒ£—ž2¼™DÉ “˜<`ES°i“¸,bì.š‚­¢ ØÏyùÖs´Š2£âk…f~­0…Þ–$ÍÁ{4³ˆN€Â_ éÙÐÌ+ bSÓÐnÚ™p<á¶mS×ós$ì:–ÄÜäu®Dš‘.ò AµnV¯…|ÅMÄ».bÌD*BªP¢ Â.Ñ©:äeò—ØBï*ÕlsÁΜm°û[K–9¶JªÖN=¨DÀN% ¾¬àJot‹«wZÁuÿRmÁ}W~Mì¾)¿tÜ“oyì7ÐË8Œr%³ß}€.×.)ų Ø‚tçŠØÆ!Õr— …ÚE¸ƒAŪf‚Kuä ¦ƒ°2=æ§ m û1®d&)Ç"BŽû·`ýW0•¹ÙŸ¬Ï_”p±ÎG;ÃÚhsö£Ä ºIlo¤b£Ql{ø#„-õ{É©&4,ð8εCª„Ôç¶œ¾Ãˆý(w@á=&Eñ—ù(ÌЄ¥ü’Ň2ÏT?½ˆ“HgÎ.º˜/2®R˜²ä¨ƒ¶*9Š.ça”+‰r-åS•¤’°ïÆÄöܘ8t¿…4o×n“Ý„ǹBš—ru©GÆêÁupÞâjGa®ˆz ­Ãܶ¹ZBsm˜ï@ÂQ˜+¡ òBXåæZHpæJXåæJ„ðT˜]ßЋâréÊi#WÅ-j»E»˜£0WÈv';p1ÛTØ•…Á„N×ðYÕßüYêÿ†zî#É¢L*ýñugÜZãݲÆ:{­¡ÿkfTz4#Tx*0 ‹²JvI¬KXVyI»ÞK*˜žJ`TvÀ Äàöá:²yx |vH |vˆêúYØ>ç6“zIù PŸvŽ1«ðÀ†Èócd®WV•úGKšЇQ :²£8nôajÀÙw3v&*$; ÝŽ‡p˜VÆ4TÓ8eŒCŠì)Qú#õ^Æcнx~'¢êD| c1è:–Œ¼ã? EÞñ :¿ã?ä$>¡O89)Dô{x}Tô›x}Zè»x`û 4¿öxA´`?«æÑc›1@§FQáÏ}õiáO~õ±Ï~õ™óBÿ[”zµr "˜‡F„Þîåϱ+Õ©Ÿ3J— =h»‹¶ÝÇ…ÜW"mu ¢V'²ÑyÀ‰lsp:orpvG“hÇá swì1LžÛ§ÏÁí#gái÷!tâÚwŒïØFÌb›‘{±0±ŽÅ›s:“l—“¨g0ôæÄO-@ç÷A÷¡ÆñQÝau$•ÚÆÑ›7bËFn'Èm­}€Ïqë³Âg¹õy±óÜÆÌÐYicfè¼´1sJšö·ë.’„<ŒÅˆëX0pRÕ8­jêzbÕR;éÐ[;LI颛te²?TtÚ~8Ù„ãäð@}nø >5vЀùGGZí„‚¼&t…¶LT3ýVäò­]ëßuuhLä;ùn6ò «‰ Td½æ×D"¨( ŠåãzB‡ãzBätîAi_„Ñv[ )êé „·톺/‚::°Ñö>Í7QŠâ¢œ1m„r@®$Ϋ®óbkGä¶ÆÚ§r{¨åö¾PŸÉáý Iès ÞÏ;áèŸw‡ÉeHod£Ý@ém˜KAÄÀðÆwå 6Â&‘WC|VÁ›Þ 7x£< !ƒs“ÀH€C¨â4Y9CmˆTÿ¼3O£ïƒ?9¦aîhàĦBŸ"“(€{š¨DðeãŒ?Y¿š4$süXÒÍåIC¶õ—[‡Xë/´‰V^bÂ' ©€Ó„†x®'-pJ2¨$“bå‹ú5„ÅNûâÇ|-Kbéƒ ^ä+‹|åq‘¯¨ùÊç"_ù\ä+òEŽâ‡z6Ü[…{‘Sp)ŒØÞëŠî½.èž|=]Ïñºžš7u:.oD¨ˆ£uͧ¡î¤úl9Bç|x Ÿ${T„ÁI~'§àR!0×ãúFl®çôðœèæ²Øyú|¸3±§ºŽ}ú‰ÜFAœO?áxW$¼+Þ„W÷p‘O"1ëóU$„Šq8„Å7â§.Kbéƒ ^dÇ#G°Žg/Ž(]]â¹­ÚáÜl‡hkµC0·ƒ‡`n'*ÁŽRœ‚I ™¤ a•Íé|Ç™ËÁŽ#®Õ;*xnž—ÁædHãHÒ9Òz ´N¡o@ê Ns¦8ÈÓä© Ú´uJƒ:AšÊ Oc§0hÓSÓÔ) tºª€¦)èSôé âÔaZ‚0%NG§"ˆÓ”)é©ê´:å€N7@S „iÂ:½à1µà1­@RÀ§ð©pŸBÀ§À©Ú´mÊ€0]@* N¦ÈÓä©Ú´>%€O€Sè4: ÿÑ¡?:쇆üðpêcÃ|pˆïׇöÏßͯJ¿iFÛðÇí™XŸ^äÐ zþn~­kœa~þn~ ÚJ£Ýtc5<Œx9ðB§3› þ^à="½yO±P$맘 ‘ÛgÄ"Y9»l„T¤ú\(§/EÐÆ‘îˆm$rõâRlEV%‘Þ«¿$óSé20À>¯âj¡S ŒJ`UˆvÈÈÐ4Îê¥ð¸Ü½h±ŽF°ÅwŸLå„NíÀŸÓpµÐj§÷ŒŒy‰“÷‚ÜQuÂæxªÉÍñ<“™ËI&0}’ÈÕ qÅÒ!Ur$å È•ÌAl™´':RÊt6Ø™µÆKÙåkö#ÎõÏØØV¾_?Ï_¾aLGºh´ççB8ŽŒ?1'©ë³h= TÈ>êÓm;ÿÌ7´!Ä$ÐZ :]2—o&L8§ „9¸Ý…AŒ ÖþëTî'L(ÝϘ:ž0¡%Œ²Fa%:ž24 ^?Æ•ÍÄ@`I,2‰–ñ0ÊÎF!xGQE [/ÄL‡ TY^ŸQŒEgB])û¡dZâM}NƒÄO¹ÍóreÉ_”Ë>êŠÝEh‹2ÿ§ˆÑ6iåÊXGQðH=“Ù`"É ;Œr¥¬£ ¼<…ÙòËSˆJÆ¡$…¹Ò5a$²ÔÿÍ;Îô&™”žî…8ó læYŠªJ²½„Éaît6 !¬Dtéz!®d:¢ÊúHéÇ8séÌmùoÀå¶8ÀrXPéOïÒüYϬ—ù­K Ö`lÙÌyøªâGGmFˆê«¢ûŠ·™È¶EžpôºÄhþzbžu²ÅeË™©¢ÌÍ7.9ÊmF‹l®Öò/µŠÉ“-º£|Ÿ%Uò$¤ˆÊøÀPnË‚D—CAßáqZåtéa0«¢$eû‚+C‘ž‘¤ÚIzë‘×0¯W›¥Ø'²*_ wNÒÓp#ÉU¸-"¯a^¯|6KÁ¸wÑUé2ôÔ¹K¿~±+r±‹ÁwžÅæç¨3ÊLW¢Væ® ðE®ÂE.€‡wyÌåvö,qFêy è]ÖC¾ÈU¸Èàóž‰Jípj0£ÌtjeîjÐ_ä*\äнg²q^nYöî.©ÝöÔ|‹¸ÆæÍœ¯¿r–¶{*Dö¥…üËËàpXâpC6"ô¡Î‡Ã$æœÍT£äYF-‹+Cd/»Sfþ&*^ \£yë‰y–W‹Ë—3²©}¤þŽc£ÍŒÍV-äYX ‡%7¾F˜f—Ô¼ÌqÌû Àز™cñÅvTÅŠ¨¿_žÃ+æ0¹ms;&›=l±?Tqz’ÇÉDçi†ÇŠžå;duËj”ì‘©Ýejp9ZZÿ&Ö¿mõlT]¾2tŽßá›Cçà×¾@tŽ<¯¶‚çü—Y)¢£FÊ·jµH<Æx<ùÛ± <¦ZžÖ¬ˆ—A–¡õT‡lÌX]Ã0øa°âé"V?v:ŠÒÿˆ™e==³ÓqB3BD{ÇaA ‡%7d#âå):¥ 3ÜsJ4S’gµ@,®X y{Qÿå+©‘˜Ÿ7õ_¦òÒX\ö¸œy›’".ã]6Õó3iõ˜J°†côÉh‘ì.Í£í&Jõ‹ sKj4}5ÏB€±9d3çá+~ä(¶ø‘£¸âGïbŠýx›ðàßGY”¾TI¬„”EÄ1v^•¥z‘õ.Á9T~óü¾É–íY¬Ûm"nÅ1šÑž˜g±ö±¸ìq9ó4¥7Æ2çÎúØlY ±Ãã´ÊéÒÃ`™¨§ªæï’ý©dzWM•jzªê]¾3 ìÎÙMûúÕ/n")ØJzNÐËo#ÈS¾-§UN—¾›óK–ýè+¢^–û¢<…;Àä¶ÍíØ×¬>šcع(çeÕÊñkÆg’ÏÝZž%U^ªÞ4Ç)lKjD‹c5›/ò_)w—â¬&ÑòDÓ·êN!™=3ÛõsÊØX’ópÊÕ… ñ™äóçg¹ëpNÒÃ,g·a‚Èk˜×«ŸM¶î¼˜‡Iž®B‹Ë—3²©ú¥$«D¹c™ =§H3:Vô,Ç «[V£dy!2yHvU=DZ¥ò¼&Íñ‚&Ýx‘Ëj_ þ.¡ƒ0í,{Vò%ÜK\‚K¸g0Î×a<¯ékœ©ë8Éì™Ù.ƒSÞî亮¯wÆŽåìü_À:ƒk®Îæ9E_Ï,ÝÎ «[V£teòU‚÷í÷Q¢ç©¨oùÎ`rÛævÌ`–ç=ùe=_³ oÍà}2Zdr—&Ù#wqŽ59üjMÖb5Ìž™íz8Í¿'Ǥz)R5e܈á Lu?+ì]âó¸—¸—pO7~Ú¤IœÑv«žó’¡à—‰–‡‚¾=Âã´Êé’lP?ÂUOí¥þê¯dz cU–f{VÖ³ˆçQùÍóûö°¼MdÅÁQÒsZT›–w™¶PLÞ˜l18bÝŸ•ôuÊ3º¯?ûa?[-e²g:»v]—êN×»2ÏÂ^Àÿ¬³¸Þªê¤?ïÆ1m¿®ëï¿Óe,úìü_Àº‡k®Ãé用YŸoX\±òöÂ4\”óóÇ1Ü¢ñ™äóG·–§‚õɺ¨G´9Ðó-Ç!£OF‹^îXŸ”‹ztŸ|OÆ!£OF‹îN_æ™ÈP]¼¿¼cQüÍøûð³PE›”«d&Z¶ŒGY(&oL¶ÈޤˆOeR½0uQåhrže7Dã3ÉçÏÚ™ôÚœ$G ÎiQí5ZÞe×B1yc²Åàè_'qL¶úZ¾ÞŒ‡AI†ÏÍ,ëùmõ8ÌVy‘ÄLFûZ¾&›AyÚȸL ïžåº.‹ñ¾®ÇEÈ¢Br¿aÑH„h¯ñð¹ٓu—'ßöN®}\:Yvr²oád߻ɻi“s·&ç6M¶ý™Œ3wdrmÅäكɳù’a×¥þŠw´3Ÿ²'[Ô#Zèù–ÝŽÑ'£E_w›4ßpXëéxùÒ:¦N›Œc#ðT‡hÊèøÖC Ãà‡ÁŠ‹®oËQ@³jdo]ÿد°ª2Úí’Ø¾œæ×êÏJÑ ¥¸Ü‰l[ä Çs`]—Ãw£ËZÄ-ìü_À:“ëæDæ’Ÿ‘åpßœÂYî'¤œSäôM¶ÌýYîÏʲ~L–ñ²ŒŽåú\ìPG|¯DÆó-(aç­0k)w¸—¸—pÏdœé³B+¢Ö9>94T”q” –×u9®@£{™‹pÿ°ÎìúbíßÙœWä2íáÿ’—æ’W…ù‚$™¬ôÉî—ª/súœ¦Ñ¿Hmiá/x].xI|¯Fóax®ª1£çå»ùÆ-2¹ÛG•xŽ^M9¼ÖŠ\– !Ê$ÛsWâYóµ,k•nPùÍóûöµüñõ|FZ^6•O™j(&oL¶èŽŽ›(~<õ®ÿb[Ô#zèùߎÑ'£Eº»BplÜž":³B¾¥VãpXâpãk„çl’1/k §‘<‹MT0lvžêМYS ~¬xº©ç&»‰Œ-sÞQ|ñchÖ—Þ÷ÇÊþ…]ŠâXe‘F/¢ wQ\­oaîɽÓrï\ä–šè ^ýRrA'X¹ÀÈFÎÛ©ÙYÅft¢æåÓìÔb´ÉeËÙÔ!—C¡Mdh–´Œo1o/Þ.èüUUDEBd·ÁDî:3Μoþ©~Œ¡ÍѼX!ߺTž²Ðîñr5‘¡yR2•¡;’ªÉp™Ü>gg¨AóRkÐT‘|d¨pš-C«lªÛ¥þËÓ[XÓB¼ö¿þý„9(k<¦¼ìè·š™Šk"E7¦¥8 Ë ±øbqäçåÄWR'¾’:1•Ô‰£¤N%uò-)iÐÛÎP‡î¨Ö¡šÚnCÕ© »ÝSMD(v¶Û@‰èÏ­{xÑ/2…±ÐŸÝhzk^¶õˆµ^`õšN ÝlU¾·ÖT…hL©xÝ\õÑše”íýÂE1š9sP§ók XLî˜|Q“Ìž –û÷ ÅHîzbž¥ÖÇbrÇä‹è¨(Ò$¶|13ûê÷bŸ—/Þ%è$LqÝ f¡ö+ÙEÜ \ xgrÍ]èÜeÍZÄölnËSUãöô• Øç6Îm™É,ŸM>ƒDkæ¹pŸæ›( ƒð–-žW¤X5U \Å[´<Óñö¼kW –g:ó>wëV¤BU6ïáØ¬ÅžÑñ”Õ0œã²5IºU¶ÑYè?@›¢;ô¦™CÂË­‡ŸÅ‡ òg2ÜæÇ(ɼ[“y%Š#õVɯõè€8LqØ!yÉ¢csµúËjsV¥µ‚qä²F3%¾Ç¾ûÏÒÑ>'G°ØÊ1t­ÇhlÙÜÑ|M{„žex^àsÚÃô)GÆ>5cgš«Ír²Ü{þwœç}æywyÝS&õsRôÝžžÌö–B9£Iö¨5ƒV“¡ÈF¼–yÍÒlzíR[Ò X¢ïOëCøYðƒ'bWUÁ°0;'C1¢e<—eÍ+i:¾m±hiV‡à©Ö \Þ³X5%ó]õ•",¢ø1òY [Qô0Ú(µ"Ñòq+}†±Á”’ðjާ´JâH2/ÓºÈRÜ6²ŒK·K¨ìÞÙ]Óü¶óMžE<«Cp×N[ù¢†ñ~HLEˆvüÍ+Ú¾å3#CñS¿åíU:Žï¯¯zñvAão=ž%2'CðÒ<¶|JÄûñìý4ö{øšOíʃÿ@€ÂoÈüjDø¬ŒHÔˆ"!¯èW Õ©>ÛÈgEvV‡`G¿£ t«ãaŠüÚÅ’Ñ í…‹¢ùÌK¨¿/ïÛp-‹¬5bójĆXLî˜|Q™oH„[õ«,bÿr[–#94r’ ”œgÙ ÑØ<²¹óóÅ2;»,æá϶vˆÅäŽÉ—Ÿ£$>ÿW©MÅ<Ü1–R³XLî˜|ù;â,4Î2c+2&k<¦üìäÕÁÿUÃe1sFŒ¥È,“;&_~Žû#Œ}®~K„¥ÿáß÷qÅÖN´<œi-–Â2P<ÖxLùÙ©b¶âKySR,…¥‘X|±8òórÚ²•ÔXÊ×’b))Äâ‹ÅՋ䨂1'Cò#½7Zèýý7ϨüT¾ÛŒ5ý(E¢âa Æ!f{w|YŒâM‰ñ¼En°˜va,jQrìÇ0Pi¾—ž¾zT;ZÂÇË*è‚Õ“ÿz¨šlÙŠ*JRßB[‘¥šžl1©e}®€9/ÈÏmO‚êÌ7äéB2Ø >ÈÅ‘ õ³Íñâ¾]e5Š9£4•{u<†`\¹¬ÑLUÑÞ·ÀÆ+J«h4‚¿9‘ùPЍÿN„o1œÓ£83z½W-¼ h Çg“Ï —µ$Ûê·ŸýÏ9«G·Ùêq”cÇg“Ï —5–sÿµèöüÏý@ñXã1åe§ùb%O‰Í©Ñí5ß¾d(5×O}º䲿kªªUù“(ËdËbpAÓËl­4š~Æ9ö/IÑmzï:î#±øbqDô’ý‹h¬Aq¢4ü ECøYðƒ§aŸ2þwhV5 [M®÷hT“ì^¼_‡š“!س2~/CÕ(|åx^î’«‹Lýàñ¨ªF¥.½±õmJV5)®‹,h5«éÕÔÌBòZæ5ËaSÝü%oéN½íjEÆ’5€œf9mÒ >'éÖœÖãY’³:cŽW©µ0þvü¬XÈÕ£J¼ôûœ¨šÒþQd»Äe¢¯‰èÿöœÖ9[MDÿ·Jkð/F‹Á kÝsðçZýì9Õ@wªG®?Åão æëЊ1xdñÆâÉß‹ÌOeÌT\-OgVkÅ`"ãüm'úWEQx’¢ cQVÉNO:øÒïTø»‰3v´D Âí¯( ´DГ ¹ ’iB»[£ÈË*ܤ¹z¤Tùà/Ar79gGvû‡Ž Œ\P僿$:UP‰>FQµ“¢o¥"Ú¹ÏÙ-ºv”¦\录n†wZÚqfoîjÈÓ†»ì]$A÷J’©ˆ5% ”Y(’ºF®g#NàÆ±¦ºNg!áK_Aèn¶áö :¿†D›‹u¥Ül˜X¦„Ñ0uƒe¢Â±q!UMO¯òs €ª;ÄD"¨qšŸ¶aœlÑÇþ$ÐÔ:ÀY}'>õ–âAêê;åùe“«À§d+hzŒa7Á8s)öN»)fˆ¡¯ ÅiI-ÃL(F‹·6¥ž§rÞì5ƒ<ǸõÜ–Ûæ®x·#f¨Ý^úŸÁuxÍÈig`JõúÃö(ìl´3±±i¢ Ø2‹ yÈ+ö(Än¢A쪌bo? 5a$Bu¿º=O: ‡‰ëp/rÕEP  ”¬ ‘ݨ®‡B|‘†¤ñ>p¨Ó¨ $²X Š'U|`më!yü:4òzÎÂÊû>ÒŸt·C|¯ð Æ™PWG&4°¡8-“‡€]Ñ/ãý2^/c?%}¶pE†ä‚8Ø¢vÌGÃüø›8Í÷I¥½fäIŸ™*Žx:ÉY3W öZ¢'} «ÄýR,Q¨a05^¨„9 †4_sVC7"æ\|öÆbÈ*ª’ØÒH’‘9Ì…U°f$bAÏÆW"‹²˜6c¹ïŠß‹ÇG‘Ó䄩˳"tèfƒtO, P<à÷‚½hæ³Óðƒy.Ö•Ú^gó•jìÑ\ ‰6½W<‚PÕMÁF¯“™g=~9Ïi¸r× J­a¶\`—·†èжù!ÉË’ h§«,ͧ Gv”a†íèt³,áìÄFÌ(¤¤à.ü‡blƒ.žáÕG÷ÂzGÓPžl΂4Ÿº[×;è~öÉY‰#ê©äÌm‚¶*Úää±Îl°+« &kÌ“O5/¶|Íq8´ûbUÈÙ‹ ¬=[‡p_Ô8¢PO/õ{Eê_¬ ¾D´B„þFCò@âÅÙdeáVÒ–¯Îi€äZ#Px#Ó‡eìmd¬A1¢4¸Œè½L ÅsVÐÏ¢Þ1E)¸nwªÝIißçÄ,žÓpuÕíqµ[2íK $#Tx*0y<†q)¶º1‹`Ò¹`gÜã1è‚!æ]$ê"œéJ· )$çë&£wÝO¯¢ÈH¡¤†Ä8$"Id‚eáÄ^›@âL‡‚.T¬zy¶s%ªÜ•¦Qw"ÉÇ(Û‚—håÌe£  åx¦ÏˆÎíðžœÃ)=6ÇãxhŽçî È\Ø€åèËÑ‹•ï1 I˜ÈùáU¯î`U‡«9\űêVm´ZCUªÎPUv¯ÆXƪ¯cÕ5+l2ÙªÞoÃMžWa^êWË¡Qr'ñÎAmÍF'Ñÿ­V Œ0^ž·™ãîho›Kj4›J­;#ÆÓf¶ËýœuD3J€ÎŸUGùLdh^”Œw‰˜%”¨H¼üŒDhnÌÊŒ¡{ÑŸ Ôw64M8ïhVŠæËJ!S…ó܋Jõ•£äèåmFˆæÌ Fˆîë))«“h‹mqÜ]gi>kÁÀ"w\.Í8ºÝ;âúŒUïfWùsi] À ÒLÎ$½³X.46À™g_„û4ß8O$¦q×¾l†Aa4Ž؈C£`#Œ8,0â°DÀˆÃ¹Ž842âÐ8ȈCÓ884L·;ÎhãÕmšCÁ$…LRÐÜ/Z.Crk¾ìÄJnÕë´RD·ò“ W2¬µ7iT;ÙlkÙEÇ$}A9—œ™UÛÛ숱(?üÄš Dx±'W“ÄÉ$ljë†Çqâºq™¸nIàgê4Ê™ {¶ÚDàóuä‡ðËyx å¶\#gYˆ3,”ÙêÌ uV…4£BœM!ΤPfQ¨3(ÔÙÒÌ }Ö„>cBœ-gJÀYd†„<;Bž¡ÍŠà3"øl8B›¡Í€f?è3ôYâŒ8ÛÎt ³äòìmfŸÕÀg4ÀÙ l&›Åf0àix þƒÃkph «‰Cjâpš2”& £ICh|øL:‡Í”!3u¸L*“†ÉðcCcpX ‰‘á08‡ÁÈþ¢C_hØ‹ y±á®ûP÷{IÞ¬ý½$o×þ^Ò¶öYZ˜&xÐ-}ŠÝЧ˜ í|šÊc3Ÿ&ôØÊ§i©ùjr´“Z£]Ôšê Ö„(ÊÁd"Ù6yé[âçuÜár€w*ð@‹í4`Øþ?Ã…íþ3XÀÞ?EîüSPà¾?Å„ìúSH„i?…E˜õShè¤_OÒø$ ¹€úÿCGóGj¯Çt›žHMd… ï™@„}”×éüè+"¿Çýà <â‚Qvôqߥ¥ÁÒ( xÝW5ÔŽw—À‚¹¿¨ÐzqY¡v|a¡£"tWæ"!F´ëÒ$„;03(Ö™±éð.Í4¡D»7&±“3‹ÀR:<ä҇Xú Ù¸ÐÝb¼[rÊÂwå å åO]vîð©ËÏÒ2ôБ› î}¯ñÞ÷ï}®0e­¸ƒ§¬wäðÚñÛïºS×’‡øW])íÐÑÓZ9mQ3Q¡Ý¶:k²€T„ 8Œ$0¢¼s½E&ï^oÑi;Øåë9²Œ=v^Îr^Q9¯¨œW('qQ´Å%.Ž¶Ô”EÒ\,í¨ÁEÓY^Ÿî.¹£ wqáÎ-Ö­õèÐzte©Xj÷•Úq%uY}:«>ÝTr•Ò5¥tJáî(¥ËGéìÁÝ<ŸžO׎ܩ#tç9´ G輺mh‡ÞU£wÒˆÝ3BÇŒÐ%C;cp7 v½Ž¢Œ“ú?a´=&®[ÛlÈ»™È5BÒüÇDPSQV4Ô^$ˆª#qÔz©AÕ"œ÷¤¡ç50üzå¢Ñ Ñ_– wIªX÷âÄʬ lF«­ ng+ž’˜VƒP ܆ⴻ¤Ï‘ú™­9Ö8qªÑ—u0NÐèà¦Ô“ºÐw±§F’ì1ŒöûRì#òSnY7¤t‚žÉ”©ôbax3ʧ«Q¤ó'Äý`Ù™óòh¿Ü›§tö©Áƒ jšó±æ"/ÉmÒDwÑ*,|g }ç )¶®øy-ØS‡ü;å¤Ù‰1Â(Cèé(S#¾ÚïþÚïžZ…ðþ.þÃßÅø¹ðè}÷ë}÷î}³¨¢Rw¡0± %Ñʤú;Ðæ¿¾õæœìH‹èJ›ÿzÕ¥ÖS‘±Øëtüœ)š)ümü©!üÕü©ð=ý‰‘SaºÞ›(Û>'Ûê@5³ ²:A«ãcÊÏŠŸ 6ðþx‚ìúnþ˜ÚÒR›YR›‰ê9/iUa ÂÚX8/÷Q–üELÏ`è}œŸ¥µgiêýÛy™ 2«@'u<ƒG›¾ó~hz?1ý—vˆí=¹(z12~S‘5 }þhF€ä‚8Ô¦÷K:#Dôã5§ä9¡ä9›ä3•$_dšÓ&¡ ± ÅiÉ=.rw‹Ö×z›CžÓnÑa,F[Ç:KóKâÇ“ócSš_àUDiÙ „m{ˆ‹0/L×ú–où(àʬ+|«÷ ý'o7õŸPS¥H£2™‰‡L˜xj‰ ’eþ”l7Â-» Ñí4Bˆ¯CUQ‘¸Ò×?îÊØ¨»˜ìàÅìǸ2™ä™ïÊc\½W,óáy„*wßJÑPåî{'ªÜq³DM%ãƒ8FaœæJ7êJiCJ %q’q632޲"Å>ÜæÇ(Éh¼ËB 3ÌVB ¬¯/CþN<-H¡8/¼Œ¤|L5RÞîÌp:ÑŽÃßXÌËa+ÆãŠ­zDf«‡iç<ž6™`ñ×òòf„||ù™ñs@ÄÞlÃô*?ùÄH‚b`³ Œ„‡ /~/r:³÷=0Ö :ð«ùâ{%Ê,J=ŸŸ32;ŒÏ“t€Âð8=§çíÑ÷Áê{ûûÞû^7>›LDu?Ô{×ýï9dÇC¿—°K±×5q²-=-L•¨v¬R •¸¬y7Çg9Œú5Ô=¼Ãiƒ®SŸ÷;ôô«¡íó~Y<²øÂ½´o*6=^³ÄÅÄšº&úkßlºÑ‡Sƒ<¾ìøu%Öä| zt$¦hMéy1o—Ô&t€åoÌ߇5n0“ÿ¤Å'1ª151« ø²È –·/o/~ü,w‘ç±ïÆÿÞñ˜ŸÕ š¡ÎÏwÍCÓ¾*âkiVl®y[5›[Q¤¹o1¡š²" ^ôæIòXhy:³Z>Ó LÄsšTÃƒé Žî¢ÿ Ô9)›\Œ3Ró~9:“CHŽgá²"iïçc#ÇW‘ùê±g5®mBÝî¾”)ª¹úi¤|ÜyÌ¢ÎjPýPgS»ã’}U¾}´¡ ÕL­âeÇφ>[Ï:1=Ág¤¨†ô4Çóš<>£àã±@Xm ,3€ë •È¢ ­ ƒ W2D`#\¸i$H‰^FàÁ†8F°s>H°¦z¥Ä箇Q®lu” ^&ͯ0Š]À*àÝ$h N˜_6aƒ¾eÔ°Aß1jØÜ¿aÔ°ýë$œ;@ Z?Æ•ÌÄ `ò?ƒ\½W,‚P©š™ìÐë5r%³ANlßsù6Š"sìŸj¹ó¶\ún>t•S…*4°¡¥ÐÒ@iŒÎxýQB„3ný¯WÒ8%T’I%„ òP z©Ð ä~Y ¯zèsžÈý;ži·Åš·Xã(7´Ý8d¾Å£ÕùÙHgLB' ÕâR¿j‘I?í°w0êÆÛAH„:‰~µECë¤ó7W[.!é>ˆ â4Ô™°ûpêŽFKE¥rºBbM5|Ø×R ð™Ôš SX(d@a™œGÉ€¥I5ËÓ0'¸^˜3¡Ð'iàíÈ4̉P‡¡-‰Iõ”%0^ãΦbœÁïÜ*ä·Éù˶–GDÕ©„:çÃ7&âN•˜+ ý8È,1ÿV¸?Ö÷ ÔÆv?îÄ£~"iO¬îŽáœyÛ3¯»É]-dY»¡ó¡NÐ:”Ò5)QD”Ë&Ù Úèz6Ò PGÆ×&! ˆbA02ËóÂýlÚŽjèŽ×ºsf²ÒÇ.æÐ]1‰r#´QA.ôåvŸ5w›Úkáý¼à€¾ß!ìhä;í'¤ÖgÒÚ—úÊçR_‘/õ•×¥¾òºÔWôKMß,s&@'n›é’“ˆI˜ ÛÞïºîý.ëž~Uñ53q+¸ÇÆ&£m´Yˆ` [nº¤>‚¾ùÆkN—œDLÂÄØð]93q!º?G'ËD…M×îXMGʦ¡™@€Þ>Ô¤£ Rè`0Ê–¢ùX ß\¤“â;ŒFQ$¾×È ><šÇùxwd3z¡6¤i¸…²L÷¸F|îçnÛr>ýD¢lÃ0ƧŸ„W4Â+áHø$JýuOb¿h6 ¶á¤ÞQ‘=†|sÑîÜ*š:èÓ‰)°D¬ìö×P'ánÙmÍÉ }9Òd&>‡YŠMžãk/ƒ0w>ªÓ߬ƇeˆržôaQ! ¤£P„õ¤ T¡ mßæ] ÀW€·¹<ž`°.ÆLÅ€`™ºÈ½2 ë@”óX˜=0§,©^´3áó±ÚpyV¹Ÿ;áîÃÔ&˜ÀLz•` Ò⯘„iGÈ¡—CÜQ4ˆÜD°«’Ò®NBA`J cÁg²ŽX]fí¡šá6”v ›àæÙEe–^ÐÒ‹­/²øw€š0Œ°©8 ÷sí;Èq¤;g‰¡ž¶éÖcd5î­Ã©c+“šÄK¢ÄØ(m©¹Â[ª§4ÂX½ w6„³Iœ$Ñ-ÏS{Ü+sÑnSï˜KAÄÀÊåe„A€WîàWt*Ÿ‰Æx©%^Ò®*#lì!hèöÈ'Ii%¥a”pÃXá6?F p pVE`CqÚ"’ò9/·$ÞQ0FÜãÌØ†ÈØw†ÄÈ×:àïú™üT  5puh CÉ´”—;fÃIÔð‹é¯Kêÿ“Ÿ—˜ v§ÖqAìÌì±Pê±FJ]EWFÑEQh=”²JY…@ñµO|Ù\ñÄ;ñuNp‰“¾ºI_Ø$®i’—3É+™´ELpý\ºDV-é –ôµJâ2%ºB‰.NBë’ø’$¾ .DRÖ )ËðÊ#mÑ‘¶ÞHXjWÁFdm\VW‘ÅDÊ:"e ^=¤/Ò× ‰Ë…Ô•Bê"!i}´4HZÄÉkäe@Ú mñ¶îGXò#­ö‘úð5>êòue´¨G^Ï#/åÑVñð<|í\¶#­Ø‘ëðu:ú}uޏ0‡®É¡ËqÐJÚ” ­Ô€ «nè‚´Ö/³Á+lØây]¼¤F[MÒÀ54dù _9ÃÍÀõ2òRy•Œ¶@Nðs{È´º†®ƒAK`èêºð­yÑ–»h+]„E.êúui‹´ªE\Ð"®eQ–±h+X´Å+º}ÉŠ¾ZE\¨¢®QQ—§Ð•©S,õ¯p›ÈÇp¯† ê>ÈÓ$vín«Øwçâ× U¬ù¥ãØx^u Ã[êq 3®ú÷ÓÂνuõ›8RÍ é:Ÿ‘peo$-A¸Ú‰.â<Á‡Q®¬‰®yŠàé<γLÿë“û _ùî ¬‰~8B~ŒbÊ•…¹’ª0øÚÚƒã¶a¾ù§p?d±‹vç5ÑA`ë×¶IíÃ$ÐV¿ì·y¹»W2 ýë$JôêǸb™LúÝæÒï6—·¹ŒËÓ†ÖúÏ„:ëPBk¯jq¥æ cÓ6Ҹω8;0"faß4³$/æVŽôØ4‹2çÑpÏǼàÁ´ ÊŸ¨œÍq jà‘Ç ²¸Ñ7r^ q¤”Ú³E{J>Öve~ +q,Ò¨žææ´¨ö´VÐhùdòÆd‹äÈŒ¡bõ ÚÂÖ¹Xgv3‹ Wy©ºÝiºòl´3´îŽà°íË¿r´¿5 t†µK4ÿÊ¡^V•…¶b”£0WÆ& !<’-¥‡=ŽseÔqpûé°‰¨­Ã\¬+¬Ž%µfAd—8 …Å9ƒê‡¿Žƒ!«¼ž¢ €Žb!Ø*¯§6@`I•@è67í6µ~ÎÄ:ƒê6ŸT?%áJJ•”à•|~Î(­Ñ(ÌO…¹´Ei~ÚÊ8Ò}°êÿÝ.ÍU×.ÛëéœUê¾”ýÓ»³Rgœ´aA|°êÿ]#¥§‹|Ü%Ù“ÈÔƒú…lªU {éHêŠc3wÞÌŒÙV=ðqi òXã1åcç)OOGákg B¶cUvNªw{ “£î“œL@F 08¿o£æÛ’y5_m{Am½f0ü6ŒÔve¢zÎËGÒ…ÆbÔu,~Á›Ùk·ML3Ô3z3î°Íi†ßû áýXð{x<hkÄLXHbµ™„£Ì„‡$T¡ý3½IÅBÌûgb3¨’RÀa(ŠKjôd²‚DB¬²?¡Q…ê(CçeÔB«b^–€ÈR¿Ô¿;eöÌGpôáñA/6ˆï">‡k0dZ&Ð ›#»ôÁ“F8h…Y¯³{fÏ Óçh§ï˜-uv.ñ¢âƒ6žOm‡Ç±(4©ÖI‰íð(Å¥´Ã:%q=bŠÒRV"tÊg± £8%£Qf¨hÛlÝÚååÑ΋ïE^V¤ƒu%W;C¥ V‚ëÏHµQñ#¡£·"C4edÐŽŸÕ(ó¬ÒµTe²¡< Ï«`~´JÐW!Ú¡4¡ ápCÚKM¾SÆÑnÚQ'~ŠÒdùÕŸ’N…h'/“}’©¦3ÖGÐÇÖ®z‹V/°z¤Ñ·«Ê(I)®ú¾ „9Ÿõ&0¡ß" <½ÏH@ìü4ïâÓ|/Cõõâ)¹¡ZÃi±@ý_½üJkÄæ°¨MÚŠ–·CRs7¥Nâp—¤ø2,$êmÙŠV”Ç;“[&îŽÔó! ‰»çb]Ùul@Ù¯¸=ÊPdÛ"Oà=Ó3¡Î¸G4¡(m)z;Ñík+”Jã …¸éI5oÄà•ç%‹ÔoÂ*ÚÀÏ£Ù`gup`‚iÌUJ&®R2o=÷EüSõÚïš u¥U¡ t(L+÷¤Çù\,Ä+÷øÃºIJx6Ï„¢¸è“·I™&;¿ÄêgyþHäžA´"¡x¡ÁÓhA<ûÞ´~™³ÞØH­Ög…P»C’Tá'8ÄÚNÇË徘À0øa°ºIA®eãX„[ÅÒê’NJ¬>£P—RIDRAiŒ(^º¡—þ(BM7ÄÒWI©¥? EqI¥Ÿnˆ 4F/Ñ»nõ¡™Ô*0+€@7´ÊЦ'Öˆ¹x=¥n´É=¸=AÚ4:eñ8gl=¯€°[×3Ǧbr=…BÐ1­në”NgøÍÂ:â7˺~Žß*ñF‚¨”›.i”$@­žwŒÒ¨<(gÂÞz‚Ò„£äêvŒ…9€>·¾¦ƒxiu¨3ês0Ä*~FÆÇ¥òQüÍøû-xѱ(€ ŸÅaÒ7_Ô%ήÍÅCôÍ×y)ólU©®òÄŸ‘A¬Ô2^Cø1Š¿ ýé<±7lOöϳˆý5>+(³BB}p,ŠÀ>šÒ#c€A¼;–4ÈN(÷ÅÂÓƒ'¾ys8?GQÌh‘=5§ýS‹&!¾3°I(ïô“{HB{‡ îsÙéÐt^j¦÷žúT‘‰ ®è•Ĥ÷¨%ãx=µždø¶á™P2‰¶ò^n:§ƒû¨ü›Æ0^ÕÈ»›:¶D¯T>ÝÔy …€7iÍ„¢Ð:”J«GŠ>÷Äœ…_8É÷BáqÌHPmPë™ë'íÆŸ"YÒAýz/¹hú0ų ãc‰£˜üÍøû Xxòì]?yö®Ÿ|z×O~½ë'¿Þõ“Gïú‰Ü»~"÷®Ÿh½ë§"ó«!EæWCŠÌ£†™W )2¯RdôRdÐt^õ9É€oÞOxgÂh4á¹ £Ê¾þ…7ÝÓXwf´±(0í¶i$K8xM'1³‹BUŠ×LoÑšµùx¹™#4kÒožOúMíIÙ¼.5šÎ ¢VÑž€ÙE!ˆ* Ç“$>ùH”ÂÞÉòÔ;íŒ ê w@=龡o¿e?”›qâíÄÛ¿£g8Žs¦ÝŽ1ÔÉ(•dG:}@#ÂÕ`G¹€8‚dÏHâñé¼ïŒÛÅJ¼—œRòóát¸&ôRÓ¡é¼DÔîè'ÒŸU%Š•î )|ÏO¨ÝûB÷4’ ˜iwÐP]Ð_Ç\‘!¹!¾†©·¨÷?wD}༌»£Íà{I¤— ¦(¤뜊‡¼ùš€x;ñ6òǪ¢Ê$ö©\ ˆ‡Z‚\©zÄ 5¯@ô@©H=/z/p™úzÅ4á%½^¡R6_N%]áI0BÜ|w¿ÂõÑíÔ[s&á®O}'Ý’ujÍêçD.¨ÛÔÇÄfIƒì„ÒÈ <=xâÓÈý.¾ße÷¸àdb2,ÂiN]a7Ûe væµÁ F˜“èÆ¢¤µŒ³Á®Ì*8ÐÁxKÒ¦%Ò9ABJÛ0ŽCáÖ@';FY´[Ú+*‹v-@xEŤßEáVƒÎH@vQ`%h•¹‡@h——ˆÐöÙàÈ8"†Ô®K“+÷¼‚Ü.nÓªw—X)¦Ñº%¦Tú'_gÒå-ó”ÞnL‚^Lk+LZb…ÇÂÄ”Ê`’Y‰˜ ¡ŒŽi¸[QR¦]V@¸µBÐ)ÀDù$JÓ½Ivz‹^¯W¤ SF*èIÑêü ñ8¯äérwœ”ÕÌ8Á×±t`"+ |L2!ý¥‰RÀ½’Ù`WÚ:8°Ás=â‹Ò$Bï×™PWÞz¨hB ´öŒdm?¤µÇ*ã´”¶p&¤…Ûº:%¡9˜F‚¬hS@šã ÍmàsuR/t.$Åû¢i²?T?d}ç ÚÄ!åVúÁµ(àŠ­<Îà¤'ÜbKñ$zôv$÷àö@iqHœ D2[;HóróѪ‰Æçètâvõ¦›@àÛm$¤›®MO¼éæâIô”›Ž¸g&”„ŒÒÒ÷ë,„CÔÄý9¥ØÊC²«Â¸ÌeûÙßæÀ5ÞIÍÙW­µæ£Â­É&é>ž †Mà÷o“–rïÎÄÂÄð=Û$%²1)„>7ë ˜|Ûê7Wÿ÷+Zuž‰u·±„Ê\'=ˆ(­a|ñ#‘{FÅ·‘ ¸ Ü‘ÓP”¾ë”4P#ï¯ÿŸ¸7[v]W—3_e¿×´÷Úg‡«î*ì°+ê¾ð( ’°»IPç/lÄÔTæ>±ÏšÝÈd~H‚ šÞÝ%"Eƒz)’ö¹'{ÝŒ½ŽxõK“w ž›»/M@–ç 0ÁV ä~îɦm®W¿¬žu%D’B0ç°6ªõ›Ó^ÌõÞ‘uä• À0Úd+È~×9°Py½ Œ÷©ÏÖôD%^ £ÊY£è§âídµE#õMkr"ØR‡Ä :(äO{úy×w¸x7º·Cþ´YÐA!]JY{¯4óµ5®~;°kƒ jøÛ«?°ÕÖúKß|èšÓ#ÑG}ôHøOuyüódÚ°)/Ñ;Ò¿>è3Ó†Ý|ÑVÙêà‚Ü‚ÈpÚNÛæÞåÚòg;j¥Ÿ-ÈsþŒ eÇcûÍPéaÛ¯<@¿£*7l{BÈ Œ'Ÿ6i§ÏÄK?môÎyn‹ú˜–Kýnà_÷Nÿ=uÕI}SÕ½øÇ¡Å[ñ½xüoWeÎìîØS õfVœ=TsvÝYj1ŠJ̉C¤¥3RÄH&)²ç„J«ó{ç~„œÅ´Á|Ç—¡>ð•îQXaQ¿a›òȪÁ¸ŠO[ª:Aá¹q¼ 7iA/ƒ‰‹÷ÀL))Ê{ßT¡v¨×ýÎ’^Z¦(ÜUÄ$|䘈Y^Ðã¦!iŠ8bÆƒŽ›$(Ö1V’Ý{‰ %…øm–iŸµ¯Ø£¬L÷…ûÒ0 °´ˆ“=_ÍXÎ4ÏÖU¬ř깺"”bÒgêKC5Ýót/A¡¦|–îh¥…›è9z`Å"¦x†."%(Ä4ÏÏ› àƱ¦îuwIСùÒÀÜú‰ÊqNV˜¯ìR  еmlítê–Ñ;¶ù­¨¬¢ÊŠü ׄüI*@ªvÓoEØIZP‘€© ;Q[*œ¤ˆS¶ªÞp‘'k_MUä [ZðIŠ>M›ë¥Ÿˆ8Aëk.U'i‡íP%Åz?—&7­* ç(^˜ô•Cº¶“•é&š°HÝp ´Ó…±¹ÊoâÛò÷t•à"¬ðâF20Q‘¥™bõ¡¨L¡ÃH‹*ÉÙ)A1%YpöØL@'_Zv+MÑ¥XDvM()ĦÔÊZsM2·õ…¹r“•ã:˜° Íä¢,ôŸKÐÏð¤|º‰‹rL^”q39¤¨(ï½v¯§òwÉ'ŠnrßHZt1#˜ È’.¿žtÍõt ­§\]=å’êÉÖQ×ð>ß­¼£NÜä$,»9´àbF20I‘¥ë^MدšªC5]Ojº.ÔD}§‰;M÷–¦ì&MÛ?š¶c4ah²®Ðd} i:?Sõz¦êîLÒÏiû¦SWh‘×n àÊMVvë`Â<4“CJŠrØ \Z„{†jØè\TdCaQíLxAÑôº\L>ÌgèRm>ð†+AwåAPYÑþÞ4|²¢O´}ÁïMÅì)65ˆÇLYìi¶:ˆ“ }³6’þêumÁ½Áר¿q$ 7 -ÍŽi…<í[ —ÕJº˜VÒ%´Ò-œµ‰6PJ°xÒ;¶rîÉ6e)ÏQ“³'§NÁû¼¹$-ñ¸­˜ýyãJWâϨ)/ð¨kBþd—|òçUòÇUÚ§U’%s~g)f–/§‹˜²‚§Xj'Æœ¬bÿ=²¿çIö7<Èæ ) =fš>}ѧÆNMœöoz’¿¶Ov*þŽ'û>úßq-ü=OúýyI~u¤Ú¥pOvZ’ìß÷›àGeI´³ßoNмª$Z>9í¢É —JNº@rÒe‘Ó-†¼vjµßòš¶Dc¦bæÑ4aùN1SsÄ3¹ Ð?õ9Áâ¼np•ãDVp{)š¼ûnûæ•WúÄ~t<~z¼C2xdÞ#£>°Æ@À"‰q€Ã‡ @–ˆk¿¹•Éý¶x\ô½á Eèô£ùHA²2’ F×M¹©¯C°ÓM—­îX´^0Ýä8³Á‹t­ËÖý‰´V££Œ½¬!îÛR÷áÜš‡ø­€´¬p“W¼@À¢É­éõ×»)ô©ù¬s ê 51ª³ Î†cÿ¿Íç?úæy§Ú?\–ÊÕ½ü×ÿ‡¡±º¼øº ‘ž4×"ÅÎÿC6þË¢<í{¨:·²{yÜÀt‚;¹?|ÑTÔ•´Ó‚©-øª{Ù Ñà„—÷ë7â19‘}/r{q6ˆÁÌM«kkoÃ3 Q©GõðÌãbèïV™ŽO¾6 ÂTþrU[¹Æúoœ`¢ruM÷X $TI€HÛI‹ÇvÒb±¨8l'K/ ÎgnM«eÁdzï@"·Vuªâ ÖÀh@æo?rûŸÿÉÇ_é‰ôƒž ß™‡»èÝ-ZxõÆœÙHr-/â¤@JA#‘]çq#’ખIIPïb> Õä#ªus˜< P8 ÿ:¨zßé,+š¨Á3ûHŠæ&OŒâë?þÓÿ• %üÊ ñ6Ò6ð.ŠFÎ!DànЯl$0ÄÍyˆÒ•¢êµ–Ã]ÉW'wh>4Ÿ÷ͨ…¹š^•M®U=ýáþDV[Zþø½å;pKËéÙð'ê£ÛÔ`m{¬€o0#uòò¸³_B䈣ytL†vßçŒ&bŽXJ¡Ã£eêå =áU}d+¤_>7R]Ý‚æÊ›' ]•g3oâ''O-çe×úxAÌ.úñ‚™Zýãê´ÀiY`ºÞÈ"ŽRÜáƒZªÛ×0amÞ¦NU“Ñï ¿GMI™ °ÓyÓI9W–ipËÔ]ãf¤¬Ç{G)óà˜¬&“Ò&•3N ¥¼%G=…Ä“g²Ûò2]…ŽY¦ÂNT¥çˆiÓ²&À,Õ‡ÑèmÒŠ}`+m3Ó¦«Þ‹¨ kxÜ5!ªz¾šœ<9´œ—›Åý‚—›Ãý‚—˜Áý[Þt›š½ý[ÚD•ùã~Ö]­{mÇM…ØOÓ¿=5vjb9¬»%S?l—òj>6â{㩟·Kvu¯ã¦«ó‡¾IÏB¢šŸ„8 žœ¥ÓWf"þ °ˆ£rpLV‡Ç€é*ïÞ0 p¢êjͯ¤ ŸÖû%+Ü.]ÑníR ¦*ÖZµöÖ$ý¢õ”2žéŠx ™°˜#–©°S·½ù!c) {ï(eŽé z˜°˜w†i€ÓqJÔ””rÀ^]SVà­ÓÙ%«º>Zºz»qKÀ™¨Æú`É“ÁɹMy¯’6š"ŽBÒÁ1Y¦«´{Ã4ÀÒª;v+Õ]÷M÷ÍRnlX¶±SjNó[¢&ÿÐÝù½ëüînyS÷ÊÔLŸD0úñÚè-ª`”FÙlÖÌkøå¤ZãÕÃÏ8Q=@1þâôÙâøXx?Q¾ÁÆ‹¬Â¯õxøQÏùayAö…œ‰îåtrº¾HꊠžL—œþÒ¹ä”ïm(Œñºõ6tŒQÐÇÈúð8 ‚Dr9‡ Á‚½8†Ÿyq‹?òÆ ·Æö²êµuÀ1¼ƒ RqŸÈV ÜW±ñ!,B:îe –"tó (d²ìTì²¹b#ùV±—jŒæÚ©ðcÀ0Û@$“Mö´y÷B˜‰Lwî”KRè¶l¾+ í:º@<£KötÁq¾Æfª\vj,þרm™Ø¾]i¿m¯+2ùÎ ÿ4`ò÷7½:“á×j4ù¨fb—+ù©Dã:%êú^g…z¼×aßïèžÓ–Æo‡Ú‡ÕÇÑ fsî#ˆ 4Ùd‚M,‹²€c ¢(à˜‚( 2¦ "dƇ“÷º«ÝîÁÝÖ÷r,ùS'oU~Óa/øŽà1 >>ö¾q2ÅÓ€DpJ<ÿúƒJúÇëOn©{ËZŠí3/¥Ò¶¶­Ø¬-Þ2éò›»p™¨+%uPÂQû¦295spη€Â |îà†"Ì•£j"{˜eÇÅFgumr£Óº6Á¡y]srpñß92¸ÌïœYÐw yÖª`îK2èˆÝw~S=t¥ÃZ8°¹¶ª.“w-…âŽRèè÷%Ô¼ó’¨tâ.(мo_FèØÍ%:Ts™¹ ì—‚š7’àrG,ÐøK †ÂIÌå;Ì ¢1b(Çà‘  H{?»ªgØ*´‘£ñ'9“\tîE'?ÛãaçåìEá7.$ż>ŒÓÜ‹0ž$´Šéá¯|0$çF¨„f67!˜\Jå^Ëš¦ÙÀÁ™¤0çoÎç2¬Ë ,\2gߊ¡ÜƒX°d›Ù~×9sÆ÷r&·—³g›N5àÒ3ÃÉÆ…ˆ©{èZŠe¤xÚÚÞË“ÊK*ïFŒ%öẩÉ̦Ãa£%<ஆù ô9þxð§øãAža:-•ËiµµdWHÌ€È=ù{ýåžÑºj¸¾À˜˜ßdÞ€èýkZî>×r÷¸–¸¿Ý`wÒaÐ|Ažä¸–=xd£qª[USOÃ… ìuðÙîta{eoÌy£…ÂNZøÎÜ5õCQux¥ÄÂ%~n¿[rŒúFŠ…¤pÚï³ûµûh•µŸMW0"n¥ßX ÕÿóÍõT4Ÿuo*¦«îÀ¡-²É-‹)‚~pdbz&Ð³á«ÆýuÓ â¯€ÑFð+ˆ1Á:(®×Á!um¹)mk%Ô+ñGa¡[]¾.â7•­‹;jáÛH˜vºé²¥Þ cz0¸Ógƒ®†ù°ûTAA ü·p7ÄÚ·½C?¾°û3𱆰ðAzC=JU‹‰&<Ž7ÁYlîŸÞ ÀR‰¥J<ê7w\è°˜ßÄÝï/U_›Ó0™9«=:è³AŸa÷SUKFÜH¡È£”H[©Bke¿¹À5˜yR±û/êḂa¾u7ÊžÎÚýv^Ÿ2(£“eãÑÞOHîm÷ÌJnn÷LÍìn·Ë®¥»‹.£»K¬ »O Т¶¸ÛÇFhI·„ÛÇçö„Û“›ÂB%àI€ÂQ0;©m(˜­Ô6ð^jŠa®ûuøÐ„ ¦}Qß…%ÃEQde‚o 2ãsÉÑÕ6ÉÑÕ6É¡­Õ6É©½Õ6ñ©ÍÕ6 øîjr{µ ¹¿Ú†Ù`íGL"† ó›¬m ˆ]Ö¶ è6k1 €,;ݰl“ݱlÚ²l“Þ³lÞ´l“Ûµl]Ö}—]Ò}ZÎ}›ŸÙvm‹Àì»¶¥€7^‹‚„ñ%É™Í×¢ ÌîkQxûµ-³ÿÚ‰Ù€mKïÀv·–ˆ=Ø È–º [4¿°$'ŸÜˆ-ŠAîÄeb¶b{ ˜ˆ-GÄmǶááöcÛвÅY¤R<|Ø”íbüRfïoɶöd[êÁðaK¶A?nȶ‹ùÿþù­-Ú¶dÙ¦w£òχwµCüodõõÿßÿþ_ÿóþàÿ=üÖÿ˜Ñö]Ìöãz*ÌÃϼ#êÞN Ñ9u6¨ázg™ñÅOÓÂcŠ‹_EÃ|õh%¹æ'Û77Æ`'†bçÙ(Æ3ûÕirpDŽåö§ysÉ5µ¦s/Äxj/Æ3듦VY+±´:ÓøZ#þ€¦º’QŸJ4ªSRQ§½#ˆ äWÁ|`Œi3 t»ø%TÈmI’•?ˆ©Ìg6ï™ÍzfrV†­Û•aëve¨ºMÆä"âñjj<ÅZ‰Æ¬ñ1þ€mA&m 2h[09+%Eähfvm$è^±—ÕS‰æuJ¡WÝÕ¯ŠOî‰u`R ÜŽX>½+O•jI€µÍîÔ™S±ïg{?Ó3¢`ø`ÀÍx˜OŽ'‰é©ôÌ(’ùà‚Ü‚ÈpZÛªš›­´ÕbyG-˜ú¦q¥>f\ñ¯WÓóówb(¬éÉ„Nys•n\>Û±çÈ$pÓ2 Ä^=cˆ›{TYža)'â9™ÜX{×|ò¥œHädrQ­U¾žtºÔÊ Î÷Ú€È>Ðù©Í$÷j*9¾¥äxàO}ö×ýp?t!0FîA¿"&Càù]Pñm?êR8Ùm߇˜÷{9ëÎò,1gÞ5ÆÛȈ„$BArÁ¦j¯|hv#µ1 ™oÔ€àwo¾¹’_q#f4^s1˜C”_~•8 ˆ„WJwg_)#zcЋÂ[nöב a‰`crXö^M„g†d»›4µ‹÷REõ:8¤ûcÞtÌx©Š:JÑ´7U«qÎ žw'F{ñ8QÎÌö¯•XZªø¦ì͸ۮß!ï¦ß«±ÈN5Ú9ÓûùðCêÜtŠ[0öØÂ.ÙÒ.Ýÿò‹‹2eã7§1-ûrù+ ,Xe“UfZê53) X&gÚÄLZR iÚMTFS˜< PP ¦ÏúÆôUßà>ê›q¿0÷Ø…Jèuð}Õ´ùMõÔèä­ ´øÈäé D±¯”LX´4•>»zíNeÞÂcz(ö¨Ï¼ž/È-ˆÌ¦í©ÏÞ9•ºÇ?|ßšZŸUqu7Ò¡?±âÖòi„ÑÌFÙÓæjÝóötn¨±h;1”ß‹3/æ2³#öj<55ö`80Û(ÙŠñÐTó£mêüB=½WJ,mPÂQû°É3t#…ÂŽR8íg~Ò¹}ŽG'RÇ- ôŸyæ,ž£ÙЇ=†{rîåpú‡õ‹Í0ɧmN†ß; ù§Eƒ`«úÔ7­a¶z4¾ÓgAÏ„÷g›-³W£Áýù&fÍLnµîüxÔq œ!îÄàŒNÓ´<­éDyg~F¨JíL(ŠÁ$ã+X×Ü{-ÀXê‚ gÃ[ß;÷ôgæ—F ÎdÄ}z>ˆCiÿ½[Bfˆûì~ææüD (˜`€æ7çêdÕ©h*E­¸Ó#é>³*ôdø°´=}¡&‚‡5ñ±ý½Û Ã/=X„àA‚´MSò 5Þ«ÉØ†J5 Â?jBÁòð¢ì¢Ü`æÜ5³Ô?O­ú{Ç<âPúÁ!Xöv³—3á©NÑ©Ü˨>wîcPzoM\þNco~_¢JÕ÷ÁiFŸlô‘B‘³^ØH˜™ ë(l_ã± ÏCõ=®ƒ}‡&< Ó'9Äð³RŸ;cµ]¦#²P¯ÜpºÁmªy£ŒYùsÍÝž×R ò…CÜ–««***ëBˆ%õB8§+ÿLÒµÊ:J‰´åý«8ŸüÚ¿gnFÉ‘˜?xd“ ÂŽ‹PÔȱùðîuíʵõK“‹P¼(ªÙ+¼h@rhgLO0Ã;çƒv¦]#K*~0Àó›ûøZK±Ì&£LÚÎÔËæZŠ¥¤xÚ^w®Í¤-ŠcXöÉ;áMî×[à–ùÛ‰¡àAÌ,ôgZÿqŒZão#…ò¶YÂg¸U‚·–­K¬Ø7wØ¢¶ôÒ~1=š|Ö“áÉÕýöj"8³¾Ÿ?0ûMc«E#S_.üAog•“Ÿ*"r4ö$§’“½S-ßÞ’Ýàã!%•c«grÓ•¤é[Ñ p«GÃÏz2|ß|èšÏ¾”уœIÞ~ò¯{9š|’3É»†¾£,¤hb/eÒòë©íÕhfrý´pàû9Wlè…Žìµ\à¢É«‚޼T㡃Z[r÷ŽXô=ÜëúœIÏ>èÙN‡µMLu5¸Có길K-šw˜‘6—oþÆN…vjòƒEë? ˜F’|o†lþʰÃê·Z,ue¨Aõá móI^ˆ19ˆñ̽_JÀúÍj¹~¿˜–}0È‚žÿ3/Í© »I6b,·gÄ&¦cÆ?UPÊWllsÊ;MV‡­ k›l3™õWß)j ñ^¦ÕhìaéáðçÆ2Š¥ ëupH]÷P:ßMɼÆôPèAŸ=þ¯†_âøÈƒp\ûs‚îs`Áb0C}–d²ìdlzïרžÛïu:¼Í;×Àä_0ù8¿é˜^³… ÊêdhÂ×L,Kæª\+‘œ£Žª»Z—§séZ[¥¡>ÈX@áƒE6[àßyÙ¨“{íá&îÇ0†Á!„‚°^; ØÍ°æ@llÔ€¡z_çû÷¿²’ä_Pùƒ‘?LBÅWÁY+ÁÄaº*¸·9ûÅãèGkLÅzòÁúaï§³vEžUPP{ÏÆc½ï~Öã^ÈòœOLþØŠ?ºdÎ%\à³=¡ÖÛÜ«©øø›óÛN[jfÜŠ?8Ðg¾}ä¢ü\þ‘ÓÉ©åŒ÷j*7¾pñ|`I«àÀƒB [SˆG%AxT’ðøZ*‚!ž )x’¢ÏÐRÝëüÆÜÛ×J,kPâ'ö›ÛB|%Ä‚~ˆ—ç;rVA Ïw8^¡Ú“ê{¦|«…¢:mæµt`+Il%‘-•Ù=ì© .;1œ9ˆ©ÌôÂY{5œš[>+ØjÕå76öJ ÇÔplsöëŸT]7½ SˆôG&Ä`’=Mp–º)4×¶Þj±ä^K´«Çƒ2'|!$¢r'öñ/>ê¬%Ò>þ…¶½®Ç¥;د&‡&‚7¡¾›”eÁô?-dP^'ƒVÅùôñ`Zš+%”Ó)³ÜÎlrå~èJÌÞ‰¡ÀAìÿŸÞæzro.ß–ذWc©¯YPãÜTÕªüîMN'߀ág*Q+6ùR fvR*­omMŸë­L=ÊEÉ™Kr#&Sã—ä|X{æ¶Wav{%ò›¼jÜß5ÿ|<29fòù¸Œ!¤æÇ“Û^ùue¸+v-S1uµ‡¥?wĨôÜ'òA]±ê2}à×&·òXÉ­9V«•_99p­„r~åÌhÀñ€½2Üm1={ÐçÙ5"ªÊrÁWZ0´k8-Ø¿²Ñ‰—b8rã™ º2te.¸Ê\+s!¬Ì…¤2dÏÌRˆÆ%údÜáøµ»öj41¹6W¥ò›ñª$>çïÄHè§ý¸ï”ì­)˜—Z޵ cÙ‰–ÚJˆ%õCàÑZ8sFMIMSâgòCS ?4•ðƒ¸šjuÕæçI•: Z×$WQ_9aƒSœ¦û„•¡É‘ä(<;6/j@PcóæÃ‡µŒ¬^m<(ŠÉƒ隇)¨FÉ‘2zÐ ½ºŠJc¡§¼ž¯kE $Ž;pÁF §ÝÇôT|f¾›KSÄ÷Œ¤èJqœ«ÖDeî;óE%\±^HäìuWqËAíÄ`ÞQŒgv/C'ÕõæÂMì`ÙA6Àùu•»— íÞbý/PòµÊÜWƒmrFâ  33qŒ2®.,¤ˆ Á3®:.) 1ˆ¬xö&<Œ hÂêô^@‡&KXi’ÛhC!K/ˆM/PzhÂBpK•VöÛ2ÓWB(sÂ9›Â½©z²–BYG)žÖý‘ŠúÔa9Ýá?{*ãSEt28¡µ?ËSAUϵJê¥YWQ?J§hú“º^;}åf©y ùýç‘Í,Hir][ ÆÚh„{-‰¯%Ñï5ûgßiÉy_ê™èAφ·Ô䦽š nñÉMÓÉœ Ît­M®X{äA30kØN!My¯$+a0 òûOÙíÉÝmo‚¦W> MðÉVWÓp !Û áœºÏï-¹ÌàN å bf™ÁZvÚ=ÚN…nËæ»âÖì8vÁ(—ìé‚ã|U ðÔa‘y5õWX óÎÏã84â{“l0!¯Íe ²?ãȃ&az3j“÷ŠÜ[m«…‚OZ<°»µ)þµ?¦Ç‚»;¤"_ö‡ƒ»ÿ“æßYàîÿ$y­*-ĈxÀÁCâ=£?YˆðO/¯§Â_Ì—.Nª(:M-Ýxhc“l4¡Xž*² µ·€9Âö,‚ê„7^Èà´à÷âp¨JWÜRµ{5œwPS'¶úVŽ­þKR1jÕö!âSˆî?›îƒfXÉñøƒ\”\r»xÐ ômßµ¿û“iÙ›ÍZNÄÿêý^xÌÍ'z:‡’økŽa* IJ#r<¾¥+†CËoCò›ðd»‡aç#8 Bÿ%mìì`ç A ?oµplæ“q]©–›²²VBa’˜´RW~ã â¼.tXL¿Wz>›J’å¿£Plo@/ýý<¼$º$5ØÞ¨¬öFÅ´ðêCuKu"µT÷Q‹wuEKMùY ¡NˆOù©í½-È×k)”u”Âgõ^r©VB(©âgµag97ì$熚ãÜäæôÈ™oæk%–ÔdN‰}Sœ™ÕW2(¤“Á /¿¯æŸÿþ© ¿+Õäúļ2ç•Í^™÷‚oŠi),dPl'ƒº6awZÞ‰¡´^Lí¶ÜTúTè°%+Ù¸‰;`éu68PÍߺfOúZ …vírê„»CšJ]ùáèq4{pà>>°U&fÀ°f8¼$º$5˜ßvy¯FC“Û.û ÑŽÈÑàìÒÙþÐÔÀ²•M‹'s*Uþ ÓéO×P<Ñ› ÿÎ ¤¼²É+ã¶G† “ˆÎªTuN}ÐyíÄÁ…II“6®Âå÷þHPzGnâÓM\‚mgþRæ¿©ü΋C½Ø¯-‹P÷³ eZÚÆ…„ .þË3N>’°¬,8qöNVÃöÆ‚vVÔä˜<è¶Ö‚omÅ,X ²Å5GÀ?„íÕlvðã×òÀúF:°ñ¾ÞªW¹®{Á€áßXPá{ðÓŠ¾:¶‘ø‹ä…“¼dB ]çecï—[܉A›d¥ö $,´¨‘ LTd~¼kMÌ­qɽ2¤8GùÍ#+Çm]š~yéUpäÅN׺_±DTÏ—¡„ûÀJŠ'©ºËHiÀÒ0‘8ÖoS–D”wsy1hÖï‚9xÉjã2”°6XIñ$µq) X&§45¹ßV‹E÷ZbîxPá lÇ.„d¶uú290áa¸K#Ä+f fçA„U7$…BÈŠdkÁbPÅÑêúdln©¡h[1”܉³ f2Ÿmqj?®dèµMíÔ™S3±‹¿N~ä«ûMÛ5-™>j‚Be †å³ó­>j¥¶ˆÍïä™!ÖmkØZCV¢žØ¯S¡/ê^r7ǽJl¿²IÎ$·ê›R¾Õ¢™–Xþ¸ùq eʆu€Â?n~TÃäŸó!€¹3 ÜñãdÆ+›çyeGÀ­ì¦ûCZ5u+¿OgS–>wA¹F—ltÁqŒ»ªËÅßžO!>ß"úç̲É, fdiˆÕ)ØÆ i!/ïV4ÔàÐG]$8)O¼2¡Ä'†8Æ~H‰¶‹³Phÿº+ÄØ{àÁCòåʳVåsG!ÔK?pô{îV#€~89ðÀ¡$ŸBBˆ0DƱ³À1ÂT)…_Ã_43åµI5ZIèX67RüÅûÐ}゘\вq 0L.AhuWkÝÏIŒp §‘„ëç½é•iïÓ ˆõÛÛÜËÅ\Ôk?ðé7ÍžÀÖªµ·Fú°‰Úh£ˆh|HŒ»‚¹ŽÍºñ™3n5’€qžÉ–†2jÇsÎå>ªDŒ#žîQI¸zumpç BHSùUº•MöA,n“>‡…âKE|‰È.GÕ6M)fØ™0Þ„ciU®ýfËÝÜã„£y $³ÇÜg…ƒ|ø]÷49S<¦>üŽ}š™->Ü´'{?×Ôx¤ Á´Ù`AR´]ó—Î k‚`4 ó[{ûÐß|ü•žH?èÉðãÆªïU~#·;ø4îöñ´’ÑI‘¤xøJÕ'ºR­Å`l'θêäK祳Â9¯º+îý÷°±=8æ€%²àÀ#ä7U_µˆaeÁA <…$¾$7˜Ü*jÀEg6¥jUu*Me¨ÖçNŒå®²ALd.¸´—³Àv½æ2.„XJ/Äsó⇌ñÉù1=–z¡G'æ·çî^ŸÎÚý vŽ:(¬×eãñÞ©uWxÊ ˆN׋þÒ9s—B(eÂgÒäþ‡Ðýß—:(eÐ;¿·¦ n¤O±Àož¦¾ME…\*±œA‰GmO¾É,X'ïÀ ßf£5à¹ý¸þ“ü)ƒÒ:•0,wdo\&f§ž ˆüÔ¶êK˜ß<݉¨áƒK"èD÷Þ”\Ì… ê•pÔŠ|úWäÓ¿bžþM×s«d®•PÐA ŸO'3µíýª…\ܵ<ªñض¿vÚïž7-õÚuÀâO™w P{§Çôd||õÅÁý>;¢ôO2¾ß¥‡ÏoŠ/Yþ§™ßHò“M¤¨KÀ4žJÅ=#£$‚w {ÖÙµ†å+çé#€j>k®a· Q‚…€¢½žng%ÃXyí5s#½LZ#½LZ#ºLü’±VȰ°`!¼…„"¬«üO YvF,ÑÓHÀõó®;a[jiA² …;X ¯÷•É1xH@´;57 áÐ……]D8½”¤—BHжl¤O–À9Hîg›w¦•ß¹"N,ÒÂI€Ö+ÿã"¦¥ ,¤ÖgJ€²ô‘ðû‰4ê@‚PI7šó_'Û«>Á+סŸÏùeÞ{ëL¯]ƒ½»Ò|q i°Èœ…˜B ËNÆ–,òräÁ Ð˼¬B„ñáäÍÅôçÎäv9ݘxå„ñ<–3—%hB!„$¹ŸÕ&Lÿ´  üÌ8 Ån`¤¸HiÆÝˆK›9 f4ç«j¾¦)RôúÈÄñ.Ó +î.=­:{hÂÀðkÉN1¨Ewb&;¾làtØj«´½šIýoš6˜ÌÇ%£ÒÏŒš‰Ì=)ÂýQAî…œ îåtòq ¢ð¦±¡HÆyŒ’‹`#Æ †„ÝqŠ {³ˆ{0ü›Åý\ßϧs٭؈úlÐãáËöÔé–:û-ºl3¯Å·-×]»bQ½ÏÙé ¿"CDŽeörrî¤×žeÉϲäg6¹½ïî'¸ú±c©'1“™\yq#Eó2k-¶ßý­©ÝEÿón:=¼ÒÑå7^OðÊ–^dŠ„bN¯­¤xÌ£êçý¬íiÜ%Âý ‚³Õ"ùƒ6[÷ÝÀß2´:ù7>d'F"âÌßùÁi ãam6ì¥c¯ôDòA‡ÿ:åg+ì:vÁ@¾2ç"é홂ð|l&jqý²ge5›yo‡/ÎÙdÁRðáùÌdTò‹@D΄f¾„C—ôI.é“\žÙ¨uSh+¼Ô3±ƒž om)ˆþT3Áš‰]ÔìÙ~*ѸNÉFítî÷Sæ¯ ˜àƒ“Ÿmÿnµhjª}jJúZ\jáÀ^ËnÎ~õYðµ0z0 ¦pC-&‘£ñ'9“üC·Ê°ÏɵÍ=ª™Ø•î™y!E{)•– ÊedâÕ'Uª®¢ƒ®õxä: z6|~Óù‡ üRÏ„z6¼èα3`âówøºéÍ…›þ†aYÚ$!jK• ká%fó^ ¿Ïï^B»úúÿ¼ë;ûê¼Ô¢‘ƒ– ls'f7—=ò@FnëØeˆq•eÉÊ„E×gFY´*N¹}0k)”ÛI3'ÅÓco'ÿ/ŠÚï(î€eÙèÀ#Ôs, 8oÀæ§ß#z&=÷>8œüÆ‘3Ñ™oN{S½tâȱ Èá\DFœ…±øbB ØXp)¡áP|E1VPMŒe+‰;,ñ f¡Ã“¢ß\ÂÁØsÊžNôLÞ45&p©ƒBz²KEÖšê°Ý©±Àu6ª™Ø¾r¡êˆ >Éñä¶rÇ.5ùÁj/Ç’Û*ådò¶±ÆåÃoˆü“Œ`õ~ö”Aa NØøõ…sÿ„%rnÅPÚYŒgö[¨v§B·eóM®5}h‚1“ìi³´Õ©±}§5¹UtÔbh«l0`6Œîîuá»ÜT^ Þ+L ŽÁ$s&ì{åƒ_G>îÀP+Éwwn³ë¥Œ‹oomUÙÛ^¹óÄsŠé‘гžïdU›»Û†þê;EÕ‘¨ßd£~ò¹½¯Ù}¯©=¯ýÁ˜3ûMNøFữô§?!MÕÞ©áýPðÑ"-hŠy0’/#ª‹ó7VÕ<¾i°¢éL%Ù]ó… El¸Ž Mò5ÿØEÀüø?ƒ0³ïöj.><ÿîyà6A¥jÔ¨VZZy]jå©Ö¢V ËÎÆ¦ÆîÕTl|¬à|঻ªÚü>†Š/ƒC7 ké&¼4VÁ¤É‘™RtáXß;?ì@¶9ø;~éä'Ù4ü(œ´HíR ¦,Ötéø¡u÷R'ä[Ø¥€ôvÒî!Øró•Éæ}Ä×`#¿ö¶6$Ùµ&Ý$úµÇ%Ú*zH\\#˜¬Èؽã µßâ LkñoÉŠ­ fÈxše\ G|ýD|(¢q©Ùµ3†‘^9{ ’誡WcŠ;H8P}É›ºç6؉¡à³Ïþñ¡¹ÛK=ª‰Î[]šúþujuWk}攘€Þ${šEÐp;­•`ê†Ø-È꺸v¦ ²®¤XØAJ¤µwz¸ÿ^ f¶wn¨ÿxàÒp#r"xsÉoª.JjKLgõ\xkJrIó˜?êÉð²Q‡&†` ¤Õ~ã%*ÿBˆeöB<§«+µ¥Z“[1–wã™] 㻓-dXNWÀ½Éìå¤ò¼¹û›—ªý&ÂÌÙ=2Ò_²Ñ$Mà³}ŸÏ1–£9²y†çц š_²ýþEèÈ’”Óïì@ÂùÍ}²”Ý´pmžûËtì™”°þÞ¤ †S§”7b *ä¦Ë‡ö“´‰ß;1}£c¿ííÞÍ'õÐ^K±¼ƒ>Ã剾ÔA9Ë nË0x‹y©])± aÀü2ÈœOŽ›„˜Ìùä†n¤pTbȨ­T×7V:0çÐb\DÃrVAØÎ¾#†êèãÖ&× fÖ ¶u%øF½ci+öësSªÎØÓ¯¦¦^^÷r(÷ ϼOÞåܶnk%–7(ᨭû·î^ ý0\'AÔŠ>:dƒàtºôKóuV±·¡`‚Mlp¢ò^“OúµKî¥Ä³¾mžÒ'õiOºT¶7ôà‰×VÍ`•9«la—…=ý٪T;a§†læÕ™Sã±óέdι¥ç›‡ÉEg¸Eƒ÷j(õSMÅ6§[c{6öJ Ç6™WS±[Õßæ±ô܈âcÄÛÌÃò‰1ƽêmÁ•ÁS¦vBâÌ÷wk\[U™º×µ"{çmPo“-lp¢Bw÷ÀZK±ä^J<°îEÃõ/…PÒ „ûïUã¿iæÜ‰Ý©±Ä£š9½­îÆ7H{f¶zLE_èášü`v¯yª  ×ý‹ì±X)±˜A Gý,tKmß»VBQ%õÞRÏ…‹étpÈoë.ÈÓ_Ö¯×ÇÜ"z(tÐg^OÜ‚˜ì‚ßhñÐL—û·u­‘üÆå]JÁ¸AJ¤ír.j—s9»œyo¯*4—t-ãŽb4s¯ÌUŒµÔÚ{{5’:¨³ †cëR;^æ‹ÆF ¥xÚ®S—¦ã⮵XÞQ 6•&{%7R(î(…ÓZf¡¨§ ÊháE¢úOS¦ó%„B!|¿[Ý«’ùªµ‘BYG)šö^T²õç£Hrg X~:™ ³ Êxù„ãÕæ‹[Úd­„bz%þqoý#°kÎÔ[å^ E~ªá3ܵ•a/tPT¯ƒCöÕI)%›à{hÅï«Ì™&ó®cH1¤Dø\ ßüD¹\w½¤<^y¡P¹¾4øéwÞ‹.]¨Dl‰°"ߨ ¿Eä(o«0߀ü¡§í}çwQ¹>©¢èühNA­{Ë¥œVÏŸM³Ñ”®‡Ç1Sc§&&`ý~Ðß'uïoþ·a@(Gyh„â£Ìe£Ï¥¿rÍÎ9váˆfçÒùÉu!¹8¬É‰¾Ü6’P%¢YÊ&­róÚ‰£šœ„Å4JB•dyL‘,;Ö4¦g ¨§ÓÁÉ‹9"g¢3—ít计žê9“ÜËÙä~rS¥ÙWLúÁ€ÍOvHEäLv¦cê¡¿ü&úJÅ^k±Ì^›é+˜^M#¦'‚s+itSs»ÕmµHØY Ögÿ˜òOkÕ2UQ(úl9A~jcô˜žLo’¾ –,Dð€8y¸AˆHÖ&$Êh"`±†Z <î@RxáËÏø ‚/uHÜ ƒCž[¦q¾A N˜ç'ù€Ç.Pþ<—nø¥kᢔqcrà^Žž®wmû {'ø¤"ßü^ØH˜7Ám9ŒœCˆÐ6ŸºóÓtš™ìi3úÕí. ÏReB<§=ý¼7Ôj™[-–ÖfA ®˜9O²‚ç|+w$x3̧ ‰çUàV˜ãðÁ +! ò­:¦Á¾a;¸Yþ}¯NîFaÝ?— µFÜÊ}¯²…ŠðË]¿…Óëo–î…œzG:4A@œI6™dÁ„aa[,[-šœj™øƒrQ¹h¼º¡Æñ/uPD¯ƒCúÑŸÜfi)Õ%¶HûÕ6MÉWÒÊìÕdEýn[ªë{%„Â!™S´3ê‘‘žØµi®îP×üdÌ/xíö­àA›]ólÔÂõIcû Mi—B(ªÎ4°»Ð3§©®\ΧÌé„LÎÚ½uøùÞ½®Ú|3Z¤>°AF›l²!ˆBhËa¬´`öAË>“aÏdÐ3²2d}® YŸ+ÃÔçZ÷\ΧÌé„DNlšð3&6Mø™˜&ü 9¯?JEݨÁÀób¥xì^‘uõ)Ã:!œ³Ÿ èzœSਔ¼ŸÄÐÊœ3Âýlïg¼¥9ìõXü [››ðhGí&;ÚA»‰uÌn’ó¡ù¼ïFíÔEÕjúõ¤êºéÕ°83Ô)4è¼òy cÐÏ¿.|€.£ T¡ìíܨ®@®Ý ÐÖƒ™=Þ¾~A€*uT®C²šù-lsï°Uv$e2aY.MY`oÃŽ•Ã0°ùÝf.f´›ßܧKÍ ;†mi—v,i[ÞÁ-j6l+†f0`ó÷[ßa“~!g²{9›*¹IŽ•Ü$G†JÞÜ­Íœê^öËßOŽ…êÇÞáüA•Õê÷o>5naÎêeÊ&lüÏî~8¼…0Ì›ÐM«#¢ô¢à`fÓéO×RaÏyDŽäåÔÙž͇æóbQ‡9ÝШÚ1êF DþûþHÚûYwµîµýã¦Ë ­Où­üÐOyæåP}Ø&çCóyɨãZx®÷. Âø°—œy¸År@"† óSŸ^¶ Ô·—-þñeËBô»oIˆ>÷-Úß¾ øø/v˜ÂKlÔ`v§fýr±óòn{|+ìMüˆ 1º°×µ¢¿tÎc,ÔD|¯&c£Ý‡›Ühïá&8Ôy¸I.«7²ú"¨'Pghâì"P¿Ü(}šŸb"²_¨”;Éï¿Ùíò¾ûB·ËúÖ{Ü&'}^ésÊÏN}òYŸb"¯³™›¡kY|íÀ¤H„°í7Ÿ)'Â9›Ü¯ÝK²¯ ˜ôƒ“ßýÖ¯YŽ 9[æß ùdøÙ"ÓêÚÞÌ¥§Ÿ5`vàž;ÏÔ|+§Ããwõç¡é{fÌ‚&àîŸÏ‚[PÜ„&oG~®ôü›S^˜Ó½-U€4^ýãØæ]¯~þÆÙdƒ O_ÝkøÒ^`×õ:yÛi Ú§_YpƒþÛG.Cxä²üœßYQöΊ¢w–ONöÙ¬ó“½6k ¦ßfÍò¨DJ”ÿý½kKsÁÇ_±[Ï(ú±¿“zÍ¿¾ÛÙf.¿r°I· ¾v`Ò;¤Q·Eø©«»acÁ@x †"ÿýê>%_È´á?`õ‡Â±®RbÃXWI¬«´a¾w¡…ó†™&o®šúÚçé×ÓY•~œ92z`”þ8°x'þ(,XŠ·§n³¿=t›ø½I Ûœ¦.ô—àT/õLê gO2ØÉ»ÏõòßÍ»Mþþ‹ë6ôûï¬Û¼o¾®n£rncsûnˆí ·8M‹uYoA–z!èÙð­êT¥{ÑÍqëÁ@Ì,H§ÛÒä {ÏÛ’ìL”§ Ëâ÷·(K=Cô|x ÿÙ‡×Ð( }x]–|ø{_4Ÿµ(ÿÊ‚C,hа9«„ai@>¿n¥¥°¶à –°º%¬nÓ#V«oû³þ‹­É$?6·ÒzÉøß÷Wá[æD[j‹¤h+m‘j¡-Òþ¼khüÒ2îR‹æ Z&ðø—^ÆÞ; á zý-²£×Þ"4{Ý=Tg”ûQKFÞêÑܳþÝðã.¨ÿüŸNãZYêKµæO`ôøqäñÄ´Û…óÈÆe¶ˆˆ@Ìì?]£m£o=ÿÚÀh 2.6,+„¨ Š2š°…b:Ýø¡‚Ư¬”Pê Ì¦c¢Qáµ2·‰áe2·Á±2wùýæ’ø =•Þëáð­Ó‘e-…"R¼ªL‡äëJÔÊNÖ–î~VÔé^ ¡À^ˆŸêápü‰Žè‰Ô¢“L_‘{9ºæ4¬áa< ˆåa²Uê®—áì`§ ýár޽ ³°¡‰lÞ™6AÑD|(¦¥õmËæšjïÃA-|(¨Z•ß½É-¾ÞŠ)n#ml(¢Ö¸²µØÛý fçs´&X„q•RÂÚA8„¹£õ.¶×u®…•ì Oó…§<m2D×½¿ v0ÉÓDhÂÈ×RÝëü&»‰¿ð"°ö^  ŸÁu“lÅ( æ3³;þíØ=ÿö4Ô®K4¿sò°8‹kNÕêª+]÷²kè Kö•%E]6÷‚Å[ha¯¥cðšìYߥQ(+#šËdë ê{ßAí\(¢§ ‡3ÌNf1–j<þ0§™N@¡{÷Zee'géD¡5uïgåéN^ËŽ­`¸ˆEçÎQS™VUE-|;zaÓE¬:¯n\³ð›DÚêQŽYÏ„×]×t­{T›‚ˆy +ˆ¬~ØÐ8‚zuµÐ*ÐKŠ…Mî¥lÚ«nгìüØ0K–Ÿ0¼…Ág o9À)ÃG­êóÛ©ÒÕ™~òÿÆNì²ÁŽ!õC?•Ÿ:—ß;÷ƒý­û-G”÷…#…¬UÙߪ¦ök ±kéAô};<Á°a¹+ˆ ²ô`@\[¢(:I¥Û;  al=LÚ}‚›ùK3,bÆ0–ÿ’Ö¶½J³p ޞƱŠýöŽUÔ÷¦o,ãU&ïšñÖ.¹Ž|P„sÎÇß“(k5 0ýž-»’£&$„àÊ?=@E¯]¯¼H²µØ~YAí P”§•›÷¹JŽMû\ef}nÓJnO[=“›¾ÍâB·eóºš%×Ãïüh¸­Û™Æ_YðFN+˜ Œµ2aXº†¾ºR4·—2im~Ó^ľalõhîYO…×âîÔˆŒ eݧÃðâùÓ¦è*å…sE¼X@×2ÓõÕÔZ¶õ`€f1ˆäÉrh$B¢Ÿ5¶®Ú¾S­¬mw‰Ö.Ž-?ô·ª‹Å[–éØ ‹X‘tÂrÚ$’Òé;S_EWÏÎ&x:Pß¶×UŠ‘ÇN0ÒÞ‰A « °ý&+1 0ˆ©Ìº¸ë)/›ZøyèØ ¦Ù;1h‚1‚Qì8 ¯SyÞÜé´w`²BYU:4 *Ò8—MöÁ+j‚ò¬M(–îâ‡.è/¶–í `†Ù€ÊoÃ^qa=ßIwIÖ.Îô4Äôtô‡¡ߟú|k¶§w­FCj4ö9¿œì§ ßdáÔ;1Ú‰³A g6×jعÏ0Í£ˆÊäY“Éé7ñ˜žÈνq»³Rjšù|k,sƒ94A0ÜÝÝ™LÓ§½‰ŒEŠ!% ÂçåIp³eú?/³Ñ€ÌïWFë.JB°µ f ’‚ÎN'Æsž/ÅéZ6gEÆÝéÁÔNŸ z27 y§\iÁȃ– ì~À//JF^«ÑУšˆm/eCöz,¥`à eÒÖ®Å7ÿ ;ææw«mìHºWy/ÂX:pÁE(›œOv`Á@L,E¯º«îƒ\–Á…~<éTk% =…àõlxr YDÎDg¦’ùC»RëïdÛe-FSb.³{ùuOž{? eÃÇ\p ç’—0¼Tˆ#G‘c0t ¢kUsÂüþMv§GSÏz"ü£TäÓj¡{%Õµ»Ù¡¼+-׵ة»þ ÂNâ˜_ÒEL¿,ÑïIÜ+Ò£ëZ6hײI;æŽñøò׎¢ónähh/Ï” ùUõúS}KÒ¯-(‚Ñ‚§t×E8¶›nÐßëZ‹VÂà@#<”è*x(ÑUð Æ>ùí/éhöj(·ß8“Ûƒf<°+«Ž½P±½š‹}åOõ•?ÏWî$3“]È}`sfØ\¶l.Ûþ5ìý:º.Œÿ wçSYD³U2:ɘßx‰øè1µd›ç½š`Æ{øû!òM÷Íæ^ËáࣜNn%¹­$µ¥2›J]éj¿Ùƒ˜Ë,yÓ‹àÙé·<øòŸr„ˆLQþS òg?€ü)1õ‡ºÒ÷ʵ?ȹää€ÊÏÌ ª m®ì¸š½=È©ä.E·€Vj8÷ æb ¾Gôxtö±?¸UúβС½– |k>»{Mg^Éñ؃œK.üŽqà3H¾e„a…Oa©ÆÃ5[ú"}ï½k°O7Z84õÙÔôáÇ„“Z8°×²kAàZ˜»Ÿ_3ÖR<.ñE£=µ÷si,5hq+†·Ù(†3?¦ÅÚÂFPìjR‡.ÅcZømvAqŠR•_Cw¶¿3Û=ÆŒàÍ‚i{êá¿Wãуš‹íß@üæ tò~2àò“7ÇÏÍÜÇÃÖ®¥Dg~ЉÌNŒfÖÅUs=îk%’vP½îÓé먜ëžOv߯ôTz¦ w<8Û‘Ñ©îP¯Wÿ%kùZæfjûx`ÉIXÒ“OÞËã$sW×äIM~‘ÔÌI-û"©e_$µà‹¤}ÒÒ¢OZšÿ¤¥%†´äæ? éÎ5.tîêUŸwj(µSgA×íÅù~dÂBµý‹¼™|‘7“/æfò%»™|Én&_‚›É—èfò%º™|ñ7“/ÉÍäKr3ù¢o&þ°~KqÕ8“NǃB.?©Ò'8fÇ_~˜åNxø´G»<°À9üGBnàå3B‚2‰Úp4Ârñ Kšc)†Ó1šù¢~ Mî„´#™8Äpæ²ùô]$Dà•J;(á¨Õµ›Ný4:4œÉt¾¹gÓ2»iá‘KBm\¸ !C…Ä~öæ >*¾eÈÂ=¿°ŸC¼Ëgsþ뤊¢ÓÖ²Œ1˜+˜d£‰€Å´~ÃðËXÖ&$Ëh"fI’‚DÂïxhB¢».bp{ÐE Hb7ºñð­« ¦}ü‹Ø8Î!ó„VåܨÛCd4¡XnŠ˜•pꛢ¢ÎOnàá‘éAü¼kjdüN Gb*ó°g&z¥†Sj.¶Îý6²'Õ¶yßÑO±¸ 2Ød£Œè!†yˆ9"„¢¶R†¢¶Rˆ¢¶" ÓŠ)L+¦0­ŒbÚµYôÒ÷ÊŒ&›¶æ_±¾¾°}}'`úú±ØVUR”…Mâ=d ¶tÿ³¬lx[ºÿ¿‰ˆ_A šÅ{ˆ@>©ÕC,hŒO|-‘M„º´\b.ï"ÃÑg1‹>‹A4<´òÒt½Qµ*¿ùM–ñoIQˆ`i] êÊɯ‚ø=œ~ÔãáûbìV¾wìŠ{GD_d+¸¹¡mQ4Ÿ59“ëÈ ͒Ƀ¹·RŒ•180Ì…ð”¡a™j6©)Kò¯ÕhÞQžX£ÚaY¿“ÿ#¹Äê¡ áL†5³É„aé›]“K-šu†Ý¢ÎÍÿEØ-¸«Ø’cÂÿE¶pqZ?Òcb(¶b(¼‡T|fr sÔ€ËÎLao.trs¡3› ›Vt®Wr&5žE¹E©©Ì]SªNSïè-”xÔâoëóAùWö¸Ÿ|yF`FQ’z0MèWä˜@½,×yÉl˜º!Y½ N¨ÃHy%¨ëGPöà‘å[Ûýƹ*]³4·'•“m˜cfpÉr› ."œ¶q7°o)ÎÊ…Æ\D8q½!ÏÚ†mx¢«-Ï‚ÑÕ/8*oÄŽ²ÞÆ1} (Ó§ 2½'EÕ‹  ÄÕ¯ô£Ü¿52ª ÇTúÁFD”¢œ•RŠ2rÝ5§Nÿ¼kj“¼×NWpÊF'-,PJ·0_ùpXaÑS®µ¹#¯} jž´Ö¥x&¥x‰ŸD£;8÷¥‘‰”»ˆcËS®»þCËw{’Ê–ÙèC@=Œuâ«Ã-üŽO.tD®sÄ,s$[åH¶È‘`#ÑG¢ŽøŽ$ëI–7¢W7ªm#xÉÝŠ¡È¶a_iÝaùб£™ÉŠáËÎWÛjÑÄÔl5P¿€:™w!Eãz)“Ö5qÌ…=¿+1šxÙï~ÆêöÌf;1”Ù‹3/F37í×)§&j­•HZ§Ìr|ZVÓµª%k‰Ä è£yÓ˜°”¨@=\ZåŸiª¨ ótÙ«‘äA5»ý,$¹Ÿr*¸“sÉ}ËûtÕ59ìЧð&™3aæ‚1nšÚ¬e¯&Ò{5Ûý½éùÜK9<ȹäµÄV‹g.ð žíÕÕŠR/ ¸èÞ€Ëo*r ÷ˆÏ>ÈÉä‚ѯq"?;öuPR«Îoµxì_s~6!Äb"ègá¿ôX  ¡¿†üλˆ`‡åYM¥›{/£‰Y‘TvXãu°âé¾mÙ\EPKŽ%8yy·=5"b'ƒb&sS×Ä bá6Ù›šërø½Ê5Û…¹gáFìÒöîN²²,ÙFŽ’´÷,ÈÉäÕµê¥ñwƒ÷ AŠ[ÞúåHè‹do"xƒl0`ò[wøJ‘òMîÔîõ¾•Än;“ þÚ…Åp.$ÎEýÖ=e“S[^Ä@ŒÁ! ‚¹VíÉÖMCÎB>°!¼E6Y0íãßÏWu½«® aŽP¦…S6:¥Bcû²o—’êë>ˆFN#~Ã.)3ÝØEóÍBu/LÒ_¹nÉqA/@:ßÌ FÙlDp5¶½p %˜Ü+ɨªÓŠ»P‘½šˆ®T¾_ޞΟ¢ü .¿ÍΟ’üßd|’D¬X&o5½™0t¾˜/AïÊÞ% lïÊòðã_Ë9ÖFžé¯q®®)É΢…Lî•DTr0ãZ Fe†2úÖ®Ý:ÿ :æÆw‹!Aúί hêÈÖƒñ™÷`A*¯ 9ßË™ä=ù.û¢iû–Ìɿƃs[|ìÄDlb›á°dãNŒgfz­¬]cem+hÏŒ‡fŸTèAÕñÏ)`÷¸³ÐÁQ§ãA!;÷#¡ <»=zÒ£gøQ˜ÎÏí¤`ˆ ñGr†éðäÇ¢ˆœÉÎ|šÝÝë:|©âÓo,‚ɦh,õž±ÔAy~ËFß·#r<2wßMÞ·÷j"7sßf_/vb84õrñ©û/¦*¯„HÖ |»27ÅÿÅžÔ½GV)r²Ù;,s²ÌËÞ=“SB<ž ˆÔä‹)dï¦Z‰Þ Öä‹ÙeïekumoæÒ3Å¿uÃEü<¬©ºî›îO$Ö÷t Ê‹[ówÅ­û»‡"ÖþÝCuºßnáfÕÜ[ßKKua™=-yjÿþà¥të±Í.ïâtê|6}õsþÍélêë꘤?<ÞA™¤Ïߌ<ˆþÊoª¾jÉÆ„C™Lx–ñ©ÓªNU› ¸g:0ãØÆGØlÆ3–Móqo9¤AËŒÇŧ)4Åàü·åý mxaYZ ÁB@Ѹ›û·ŒbiAR …ï9„vÁŠ`¬9m`õW¯ë°9ÚnÛPƼÙk×rÉ /ê#¢JRX x p—¦, —ø ÂJOäôdx×bwðšO¿6 âhþðËIýþcì¥~äP ¿î_† ¯í ƒ¹¢‡¹êõµé¾…%µÁi&I¹ÌQDEsð$( 1‰‚˹†a ÷–'ØZ —k6Xã–}E'¸FvǸû_ÑYˆðr¸ð0’‹} rSb–›ƒÜ”ŒBvÇÚ›ð$‚û¼3fCJ ÿ°ª,Lx oB²4®±V÷§B·eó}j—S¯«¶T½æÑ~ëIžÙà™9ÏlòLž:5pØÒœ;%nô›ñ˜£™ä–²‰5 $ì’a®ý䤣[¨^/j¢²ŒûàpOA .Â$àI€BSؾY>¤„5ñwŽcp|>¥µq0j:Dš¬-÷‘` ÚÃÏ0â›ÇÎF‚$»u Q|Ÿ³»Ïª:×öYñ.î(áÜ8’ÈÏÖ͸µ  ží1Ž¢&–ÈÚPÔÄ:YŠ],kCá^Ö‡O&»DÔ‡àq/þÃ'É]b#»KÄl$H‚»ÄEüH>p’pÉÁÏ@r$9 ‹àç’$¸†v6Œ·‘^A!ŠøÚºx—ÏÞÀá“’µñ°2xrŸßï|˜äN}èÅQÍ^¢ú¶e ±˜/ù 46ó%žy¬æ+:Ù%ud%¥“]\ÏHiÀÒ0±8ÃVŸÒrÚ¹P8æ¡¢Ò‚”*oå8 ŽwâˆIIJüµir9ÄÂE@â]„8­_ØÞÊV>¤ÁGuoýÎ~U.1×ÖJ€6XùE¾(:ý5†ï_Øà$Î ã{ôWØAZÒ{°³ ‚ß{p1kM楲öTûA³áDÁ( F™7"¹†¡c¢gçÞƒ † ñÏÍë]»ózné`®#)eÞHÒÒ^ÄRÜGD•¤°¤ý#‡V"4QÉÉ…óÛmˆÙvF,ÙÓHÄÕù…÷Ý3%/›ZKÙbf4Ÿ7ËÜÃ*˜‰ï¶oª“êûΜý𨅾Hï(¯ ÝÂH†æ$\Shi]\z°4ÁCRçRŒ:—BÔä 0pQå¹n{…mÚ³‰ûà8aäÓGÕûeÔ†ÍÄ%‹¼r£½[6»I0ï}ãwÓ4ã>,šóÉ‚*W­:›Òý«°¥øÊ|ºIÚŠÛ`¢ó 39$ÿ€b sXRãÞ‰¥&ň‹o” èvF2°4E&-qì%£—¡³à$l[k1ƒŽ'£‹Ú°D²/tC”Ú¦¸ilmX¢ÚŠo>J‚"ªmŠªmŠ“ˆ!øü *W‚Š%­T­ÂRÒ)h"V,Õ`•ŒN~ÙDœ„lÂËçâÚþŸª,“”\̋Žäe7…JPx+)^ªâKÒJ:p“2Ê[J·ïVwý­Ó Ü+õ"×^@Ó>þ-ÃZ80ÞA‚`sk\e;ÇûH¯¯!Lž(<Ňîjèõ"¹¯÷‡²É?Šæ³–¡m\H¨ÉE„s=ßë¢LÑâˆzÑh£—ô²z†JÄ–‹'qˆÒó™ë¾MÑìÛÚÎFÜØóQä—ÌÆEÀ#¼L|1‰‚ÏߪüÃNPÉbV$Óh%®lS$y…‹8 Ù„/ l«®U/‹ðÊEœÜD£žÁd# ã>4ÁxÂÆæª¾•ŒhmBâŒ&"kõ)Ǭh®ÁJz•YÝ=Lžäö³bé+ñíqŠ” èöNB¶D—ä…*n&”¿RÙº6>,s t¦y,„·PØ$³[–ÆÊ»d}”w›¢#Öóï}ÞšÖYÉ?„eq"±‚S68 Еo$¨}{#,‰kàG^w>"*a=|TµÉÓÖÖˆÆrF ËÇIQX• °ú¾U­!(!{<"–³lrUžºF¼hèÎŒ2o$©T‹8¢J÷Qñ•jFÚ*=´¡‰Z¤C¤°yfŠª¸3bÉÂö›âªâ$¨Š[•´*†0iªbÄJ„&ªŠ©–ÀOµð}’åî+sí|ïÕ£âg ï=˜ÁÃý‘œ)Üœÿr?rêÜ ©ø²‰¹à0ƒK6¸Èpü½¸Õ]e¬•L~iÇúÛûÓŽ#Mµttªe£“,hAåD‹)§XHY¾ˆ²|eáâɶͽË}’FÚ³rì…cM^™÷’Ôºu(QÍ;´’âñ5p) X& §WÒI)[Ã9Hê› ªe€¯QþðÒ†êÞƒ£5MC €$8¸»j?e¬njã[úÒ+á…ƒåí²ÙNvl¢ /˜c·œ‚K)ÌíΛº~’@Û88aZø"†ð]„j»&,à&*¨f8Ø#t:Îf‚bzŒ»8ZÝ÷¦¾Z)ä±C9l9¹¥ÄLF˜ NÆÕ«ÞØÞä ȶV¶ÙФ«„ARInõîðü²ig)G̈â&ªM»T±\²ÛD%¼1T’[?øÃUÐ&ì©<þŽ„Øù0£úù;ÊÞtYJŠdi@aºP6«I+رǶ^öHTý-ît䔂EsÿKq³ÛÛPPîâÝÃïTò°sŸ¶„*jÅ‘ùmOvî%'éÆ<Ò‡lĆ¡ç‰¸cáÝcï"à‘Ü+¦ ­tóÞC+ X+ÚÌwŽ$f“ùÑ ­k=“¾á×_}XU‹w‘˜ÎD¶w|ˆqÓªì…Û ‘Lƒ‘äò·­ËcµìK_Ì…!r.ÙèÂâ ›Ë Ÿ6gØNò¬I±ñf’}7åÛnJ·©”îRInRiÛ›îüµL+z¯F‚êÌ«ÉØ¡޽P±C¯á›±?M]4ŸöRµöÔ*k?›®8•Móqoß >êÄôïDõ™×g“>ÿnøÖê/¬Š9¥^ ‘¸ƒ=Éîדºfž g¿Ýƒ±"‚¿vBHܯYpšÞ' |=Ü/†{ä•p¿oü\sèy¼Î¿1Àó÷M ˜ü¹îzs1¹ý\KŠ”ea=¼VDMÕÞ}û³Ð6ïL 6ÉWTÇV0Ùh•-¬(ºNºîýšù$ÓÖ&™ ˜ü~%Aw: ¿ p®esh„òx£leDqéK}b_±,Åpþ ¦2ßòöTjeÙ{ïÎÎî ²`@ågv³[ågv±[å‡w¯Ûå7•ï¯ä_Pùƒ•¿¶§Nç¾ñFæßÀùÝ¿ lþ_ØæZÛô¿°ý´¶Ù[h­’7~h÷óùDD]`Žàò|Àñ8ãÐO]ugo¦•a¸‘xã ÒÙMŽ™€-M1Ž´H¢qÈ9Ûnã J$@ ’d˜‰Â ôµîOõUÓ­ªŽà2ïÀ hÿ¹Û½ÍœÜ/ІKЍ 2™dÁDÄ"¤æ'’“‹Ú.Ó“«Ù. ˜elW&üXÕvpùŠ$nÓ˜ðc³ MôpO !ÍÚ‚"-8Ši)Y’`%ÇÓOKÏ ’ :¬b4ÛmuiºJõ,ÁR Gb&³§Æ¾é-µhâ å÷óE'^ˆñÈ^LeîûöÔvÍûìÝÀÙA ˜üÆØÓÃtý]•̶JK’V(“³Ê¶V,ݧ>«VÚ{vhÄ­d\àÌ­88q+΃ÌÛŠ°œÝ_aë‘GXÖ&$Ëh"`±¦×2…Iá(ÿ>#¹¡í `ÿ>ÄßÐÜßUš_zèîc!b.8Éä2ô8¥;®=oèæÓÎ…x0ù+wgÐÅ©è̃%ˆX  ƒE,( ËÞ˜žJ8³¥nAþêS…j}åôNÉE?vBQü=:Í/©ÚÙ4–ÇY¨ ¯¦b[Ë?XHáÀNʤmÕU n79šz’sÉ»ÞÚx[=ž}ÔSáµå?L¬ÄplmÉÏa‰åS[*úŒo àìÞ óTþÎiò^ôI4æS ü‡QzlÖN G§ÇhµvIúLc8Á £{MçBa|*y§Ûƽ(øup è!<} q¡‡P¢º÷Añul&OŠbÊ%+–½Î1xŠc !dÆç’e†‰G÷NÒ+öÚà¿ô¬ÜÌNϦ¯~º¶ÅýjX¼¸ Š5¹dƒ …SX¿8‹±RÃñ ë·gcw¢Ø(vÇÇ&–¹Øf'¸Ø K[¬(ô•¿°Wb8y“™+ÝÑÃû6r"wSÉ›s#hAmäpòQÎ%¿ÓÕK-žùÎuP[Åžå§ ë”TÔü¦½¨8õŠîŠŽšÀ“IæM°ø•iÒ-œ„TÞ‰Ckšöt¾çšgÚYà0Î",x I|In&°ÎïûK|Uô¨ 1º€Ëw¬pnM×çwº­å0À(§’cÛ­Rcû­-Óö¦Ò‚Qè9šz’SÉeÙê±Ô™½– |¯ѣʗZ4pÐRýPâi@2÷ÞâÿçíM×äĵ®Û+¢¼ËöñþÞ«‰GŠ*éŒ Ò¹¯þH¢ A€æTý¨r— ÖXB€šÓá›áÈÃÊ‚Ÿ"mÌ 1F¬‰=M60gm ÆŒB‹zŒŸÑ‡, ÿËãÏ;ôÇ{/¯U羓v‡Ÿ½?Ü'ò?¹ïؠבgãÕGú„êßÐø73'™ÿ™—8ú_.">ùÒ¬;î›ëð#AwÇ ¿t‡ûEž¤º»ö”õ×Ù¹s'æ¼Éˆ95.wnä·ÑÁ\Ço“ƒ¹‹Ç.‘“¯Æ]'ߌ»4μwY`Xì^aÛÅAí …Á輌]e´ÅaÃÁ.ŽÂÓ¸4lx±àå=¸w̹ˆk,íS‚_ô–à§0ÙÑÉ[bÍ8¯1aøŠT€@îÙ¢æ2IEóUy_<‚~ gGAÏÃ?;zú©ñÏó°U\Kéß;~>ðîpÏȇí»}CŸïû°ã·OðÌ«ÌcY ¹‚‹r^d 7¬1Ø–ðŠßg#ȹ€ÏsƒÓ›?: è¡À½cÆž–¿èg§ÈZ‰Üo€óà]üE£»²VUe’‹â¯k›f‰xÜ4f8ú[wô·õÑ{‘GGÝÑQô‘Íb–aw¿xF½:øLÐý/PÌÝ?mj¶Ã_süLº8Ô켕"øT@ EÐPå)Ò-X…Õ¯ÃC¤[÷ ¨WG—îÚuÃ÷‹<+ïvR R+†‡ƒe EÐ:€á{G^ú¸¾zyèëúvìåûÏëÁ²ù,ë°9("=©EC ° ,á¿~¬øò~r´Gäæh߰ˬA ‚Oøe‚Ô=¸_ÌÏ2ksô¼†x8t$ÿ}¨j°ü×UÖ¢þ0ÿ´uÿ‹~ªªSa~öíÂéýñߺ¿¹ß ¾?>ê~޳pú|%^¸ˆ8.ÛâÀÝk]ýmãèë£_è>˜óyØmó0K]:Ž rZbñq9³´ÓãÌBÐN‡Ã A;ã?ö2Èù±WAΘ߿J¤þ}ÿe7¬¬êTÉ‹2{ßþeÿB¼ºG|["¾-ÛÑ÷ˆè…ˆìÁýÿ5³¨RØbDø[T)dq½WqCEfoM‰Ä ×1b4E‘š³05³Ñ†fÁ‚Ã+ÂTR×8Hs‚ƒM埆mëFBÆIµ&X¬P‹B¦÷ǵ¬©}qð ¿‘Çhs^ÁQM©šˆcœ¥f®·V¼·Ép~¿àõµ)Š-š9Æ_¥Ã`ÅqlßÊ·B‡¶¬|ëó~·Ê7:Ç£½±96íÌio\ÌÒ›ºSæ­Ñïm0œß+x3 ©Ö9Àoµ+’·Ð‹•Köhç‚y fßiŽ?˜Ž?˜Ž?hŽâΔtÑü-Å¥™Ç™€ø)Ä[ÊB —ª¬›Ëµ–âãÈך7N.˜·›E r¬E’¶ÊŽ6;ðNæ£ æíØÁ¢9Ü5ñÜÁßXÙ-ñN#b³ŠÌó–ë`Œ"3ïêàFr ñv²Èå™éƒP—)ÄÛÅB0—ú†«¼þ&š‰ü¡”ÊJ±ü9^.e% ý&îrø«q½*yI“ZÄÝŒ#Ër/æ·ƒÌ÷ª/æøW#3²Ìh`ÒÄû!ÏŠ)¾`RĦ·ø]6f+‘n»í´0y<²˜ÞŽö.ÑKZ£DH¹¿Ó„7xÞºý½—íª^_DÓÔéµm°:½óRí*qG/hªt¶Ìx¸ƒ_ôߪ:y€kÏ;ôÅG¶¯oY$å§ý| Éîð¼dûú;ðŒçyÙ®­mîP[}J¤+­÷k›o†=i ٌ߅ñ™4Ÿïɼ7Âep?…,½Éø+¶?^4µ9¤¾üS^íj[­ËêÝC}¤G/z¤éQGGJv+pÅÏ…â'@1­³òζž YÖÉ´WýÃU}¼Ú¯»i|t¼î¦Ø¡ñº›ñë;["«¬üÊeÑø[¸0.¥ù·ãiTËä–ªÇØëšT$o½·Lמ9öæ&ÕÒW\ÉqT²At”ô-²þu_ÿ!õè"c›&{8³þýaÿöÐâcÛ¦_êÈ.¼ÛjÓã}\ìñþÁw¨H ¿†øit¶Þíö¸VaÑTþ2Š‡Í¸ð¡¦x꺩qhëføÇ²NÂ.õƒðtËÇXÖMz3òºðßãN‰i\4ÝGr‚ƒM‡¾H’úÈ „lÝHÈxèUôHšõ±…?N8[ ä„ñåANøšk›©;áQl &köÆ<÷ð€ñJÑ¡^îó-9ÌFêYj×0º %Í¦Ž¾þGÁ§s0ßöãŽ07¾]„£Pž¿W„™H»α96TŒÓfãÈ}û"H‘­¾þÅ1.›éë°œ7WÜô‰|­9^é¤Ëé(ø´ïøulB—Õ:\®<ט¨I3¤ÉA^ú~+<Ÿtw8þV=“BeP ŸàS;1Ònâp`;û ä´Æ‰Þog¿áb¾ƒ ÍÁâøÓæK‰÷%?>°x ã\˜ìÁNkO>ç‡qn8š‘]PIm¼Ý /»ç‘uö(1l|D쮾櫇wc¶"œ–xüü_¯?¼çë_sj•‹Ú¬÷|­ÓØ7|ã´ƒeDiuŸ¯ø øÌP˜V‡ò²{­ʸuîÒN;¾V…o¦çU}k´Ñ'–T}ç‚j PðŒ»ÌÌ_ ¾ï_2vÃëøŠ±.ŒÝ‹ ‰úlÀÃ×jä¹eƒqJ`øÂíýü2õZ6)^2@ïe9ŠÀ|é.ÉKËkL©úû?™×vO£¦¼$i|â‰Fýmãè úhûªÂîŠÔ”‘9úLØ÷Ê,&œ&§*• y}äÑpïU4y"Ô¼i=Cuy0T}¤O¨æÇ9°1N9œýß±¥ &Q\½`ÜÉ &1žY£`ê©e ¦‘žZ‰`èñÅ^qž[oàæ¹%^QžXUÀ©åç0Þdè©VÉ™¯&ê÷ ƒ4 ^úT=è„×3k<Ç‘#×Gú4Ÿim¦iùEë>ø`ÀÝÁ§cþeþ;Ó„ýú69àHl¿ìG›¯>žÓWÖ馫î\Ã5y²Ùb<Ùh !ži²ºÏ6X]€g›«.¾SÕÿ™ÿÎÔºÿû69àHPÿgÿ;ZëúxN׺>¬Óµ®î\­‚<‘ùˆi¿µïÓ jd¨®y˜ë„Ë&åºM Êõšøuоä¯X/ù+ÒKþùlJ™_9-ƒYöËcÉÒ,iz ×CðÔ‚g÷`uäÌþ ÅnÂÔ ö:4Æ÷€Ö¡¡¾¬Þø= •éÿŠr?Ÿ£ µÛYç€Ù‘%pX½]瀑Rʵ5á@N†ƒK[:êˆÖ±E¤ŽˆXNê€ZS‹›î”òš|í¤Æ¿©[Õp<_ ÐOƒ/Ý­Eüf¹2ƒŸù¶pžŽfVƒ‹fZˆ\2žl](à ³£• ­ì8¥f×iC&»Ö›·‹½—ö̽¤øÙØ©°†‚èÔòSdÙ¸xY–‚mãÑW³#Ž«¡"AÙ u8:ùñ ›Á‡¦<ö}ê#Êš§;ãl;Aöž•W‘]jóo]%”M¯’ZŸ×@PØôVyõyÞÑ… O{] ú´ÿ¡…£åaüÂPŸ±@Ûa A°nˆ7¦%Ö¬Ö-É4DÓ%458ª)O’燫)ý¬“Ðô4Pq ùkÞ›Ü~™íþe£å'¨QÑ Ú]§U ¿5 0,ºÎ¯aŽ}gµ›aü½úŽd”—Ejº¢Ýß b.š¿_Oëÿ†¢iFÌס7€¸ìäøš¬à„› î;9¾æ{ÍuÃ= Œç¨¨’ŠjI*Ê&®.‘Ý.fáš®‹Škkjd¨v‘ž>Sš© vðñ‘n–¿`7¦áð ŠbFQB\_ VôK ¥)«nÆG-ã²N`57ÏßqàE&{GÇMoó(²whì´ î™ÖM«{b¤:ëÄù«ö8JþLy!t×ç7É.ú£Tù- ~:Äß%U5ly ù8@~N4l˜ z^³ò­ØáÕ+ßš[ÇrWíC^* ¶ ˆ§Ð‡Œ pÉÍ{„‰?§“Á“€Ró†ê&ÐkjAñ4(€N¥dÌøáyJüõ!…ßP§ð›é{#m¾c%R5i¯ àfùi™Ï`&Xµ×L_–`›ç"ùË$@íÏ¥ñ:9~…ñ”úõ£n:½Ý¡¶.[ðλó³{Á" ¥R&×cσïÅ;@O×õ@ð½ ¯.›2ß¼’¼{(ÏP©wˆkrõ¶¸šï\󥉕¼©5Á" tNÂ9™áp'vx!‹NÌ[s‰Çmý4,Ò0ÜÑ|æ—ñ£¤8.`˜£4``GΨþˆòhÖHÖ(Ê!˜6áH½8˜”æøK ³º™XÌÍò“&Kô,@°L°;Þà©¢þñW¢nRøeþ’âg2R¥>Í`Â÷#7ËW­cÁ_‘^ŽüElÍ|°¯c¬á{¬¡{”a{ð=x¸6To˜v' ‘}5iŒÝ‚¶hžfý̽‘†kÆYj>a)•QŽó"µ¼›÷ÏC,B©ô^Ø5û²zGõ“í¨£ó‹ê_Ž‹@‰ÎDQÔèáâ@^È`ß—¶I33l\eßbý”{,µÒ.Cej3]=‡0eUé§Z¿æÕ 9«4Ht7 lY7©†t¿é–*­ÿºå÷ú"’2¿”•ý¹÷Õs¾M9ß¶8;F='šr"É 'ê9o hGªhÒgZ·:’ÜìV¨6¿è:]§³<öÓÀÑõ`rèþtoÜ·(û¦kM-ø2˜)™Xô³€ù)à«ãÊã\ö²ht"õC‚¨Iõ~ &aœ2?E³qh.ö™š”}Æüýìì3¾Ç^Ü>ö.æŒñ2g”õ¿“•'D’²!•5-å*Oˆ$eCd*Sm©¢4ÇBÄ¿[Qs]çP’seºì†kBdYÔ†«*«\å ‘¤lˆDe•_¹Æ/ IX©¾ìZ}l’Ò9c¤VOÞæ›¡Õ÷~êØ#ú)O¾¼ˆåV5eNÓÒpUK£hÞë²­X–S,iaG³?<å©yŸ &þ¤¼d%j‘ËFÖar°ÂsÓñÂó2ÃLÓÙWPÿ(¡O½¢xI½(þ:eñOÙÖ %ÉOkFb©ucªÑ:ùÊ~A½Ý§3¿Žo9º­½Ãó2žÎ&;¸ýèŽlV˜Ýà§cÞñ'òiŠ~ 0¾*3?hýüŸ„jOð½ì{þ0 a|37åIÎ]?C'¡23…ÓÓbápNÌ4§y)*ÙØí¼9y‡rbfTÍëG§ä¤[X&¹è|7œKg“ g¡§F•ªO® n,-¬  yúŽ¢ïXºS+²É†„4¼aC¹èØÑŠ.!ÝØx´Gtþ4aÒô: +c 6¼a“ÆðO€¡‹Àd.Òìèìúk*C{BeéÑzØüèÜÖÃÒ‡f¹ö?lÒ¦ÈG`ú?z½vqYê#—•„Zê'«Xæê~IžÄ49@*º·D6Ål`,U˜½S‘“åÌî³øµÑìXÜŽ3`µ¿eå§Yª.Ÿù "à=£žÈR6o±ÐOöˆ åžHS®ËŠéûÂQd5ŽeZKÓJ]g@†mäùV"­©¾ Ç×y¾OYsËwäø Ñ7•Ÿ\ßä«,_%¨7£ Žájp4ÓFP+ò”Gq5<šl{ÍSªíHѵ@‚¯ªÌ{A3:µ¢8ÒTÐÜR£ŽjóÙú|u¾6YY?¦Ð~Q™êšÊÖ¯>îô_T¦¾¦Òô³2þ`_í &EÝ0©Wº ’-ͦʒ¯ð“'ͼºmäk{Áä‰3¯ë¶qe¯¨ùŽJ½ºû@ùê|m²2ù*_Q™êÌ+½”|­¯¨L}èzÿ*DžÆfXk-•þlþ˜‹ªB~=J÷KGG‹zz´¦ÓÒBÌQµ›®Ç®k’Ȇ!ýÁs@ù˜®oÏÍÏ QA2$¨{Z4²¾™FŒ_9Þ°¡LŒlvexMÍUv¬Žm~@°:¶9ú»êÀöèïÕò6kôõ¡š 5ûðY ”Œg WÛ]"ò(!hžiÅ0~a C!ÕM+²OQdi¡ŸEì˜à*8s"0+ÓEý‰Ø×†N¸D…Ë 9ýBÖÁkÐÞy˜iêÐ[«ŠH œ‡ªhÚ¢!ž7Þ°±l lzѦf€ªìëhÆ ^n÷›YÄ,ÎDš'ò‰Ë¾¥zYjd¨Ñ’ê­¯» ÐwÀÉñ^JæxÿàÓZ~Š,^^ü"^°Ù~Ò={xSò‹uÁ®ƒFç¸íIòзu€T[ª(ÏQµWý£JÞÑMŸŽ¡Iþ341¸ßé—ûJÊ@å¹3ö½|å¸Ã;`n‡îjØ=9/®Ž …§ÈZl--¯3ÍYw&Zêö&v&Bõ%è] zO‚Û‘ ª2-i‚n›!îšÜ›æ½®‚=&l³ñDvKÛMÍU™çÈ®î(É™]áÖ÷€Õ=Tm§ê3}i‚jzˆŠÎ«ç±¨ëTÖ²Hª2-šëgÆX,ö8KÇ/»z ŒÊœ{S]¶WÌ sÕ¬H{ÁÌ‚2IË˧¬Ê,¿h®N,®=Dz2 ŸþÒD4àŠï  û”äž«”çü‚\5ŒäX±ëvŮճ>çúÉÇü“hd–‚“µŽ€qÿ%8Lžÿ –‰ÍÏÅó?²ñw¸lü.ÊÆ÷pÙø.ßIÙ`©³<REIoøWH\õ…äXWºvT…zˆ €óŠ›O¡$wni“KšUÊi¢ñÒæë*”Lê²%}ÁÛÄbækl Ôà:OÙô\ÔÈŠO¯ Í`û5«¶kšwœë` &cN¶ï-¾ø©‘„úlñ¸UM™›¬„¦uÅ–VµÙ© DNÞŸŽš®îtÑôtQº%“ÿRÿ¥ÌÊXèT…ÎÑ¿³AèkÒ}¦p Ï*uáR.5aR¯·{ )ØJ¼[¡ËI°l°ò`g¡°‹sÑ¡é_l‡™úL_’`¸ÒWØÊšéN”…í²äš—EÚ”œ÷9+fùÂá¦y®ÆÝ5ÛŠÓ'r31ç32Lªø-+Ë„m>…ÒÔ-”êN¶&û2M‹²_Ë‚õÉyŸMËÁ”ÍOH®R•„ÉÇ ÍMG‡&dc˜áOŽ´Es°¤†ÐgŽE{Gg§ƒ6>m‰’ Ià²F­¼úÐ7=¼§\sŸi¾ú—¦ÔÇ–•=ônÚ}OÉÅ!y¿ ýÖT!3skª™¹5áêÌ£ ›š ?Hn ?XrôOM΄$9†,9¹H3•Þ Ñ´µ ™%׉‚¤kv¢€y«Ò°éªÒ°YªÒpÉ ˜—€) ”¢Û8OøAòbøÁ’S•ÕÉ™ðƒ$Çðƒ%Gåak΄$9†OIΟ¯áQæ!E"kê3ÂNË&prNèy »s}™ÏÊ;`¢?ó¹£²¦l:€$oÊäÍYxAÊ=sæO+÷qgN^ËçDbîãFŸ¤Vn ±Ô?˜æ’ë=‡’Ì{(ѽ–q[׬z¿‰%ùXBú1©f]ô{Io·íû‘®”èÎæD’¼I#Á†‰œƒÈqf5qÝÌý_Z§¶lbAùnJËKË@S‹Û-ù9p)Y˜9yÐí&sÄ€‰»¿tëþÌu*Žœš“ù)R™RqÀKS‘ò²…“1Åšô ˜!R0å2s`¹ì$˜!’0å2“`¹ì$ðõùâdeó¾1D¹O¹L}Ëe'Á¼W ‘„)—™Ë¥'A=B¤`¤R |ý,ˆ~D?  /ÿȼjÂ$aÆ&§¢cH¾7ÇA69!àcÐÏ´úd’ÌK…Ó'MtáòÄy¦$µZоÒ(¢æšÊPžP)ú¿~ªá[`8 ¿~†¨á:\ž8Ï”¤ †;© ez UÁCÕï Õ›gMÓäx…¨ÚAjv€Š­;;qZ=4°MIôwƒ 9X€yyè,›xNNÖxJfµ|¾íÞ2Ô­ÅûSÐ3ÃnI– Ú•c§¡g+D›CK Ë™"âêq9Ðë¨ ª†©ÒAï¢ao¢ï¡÷šøöc ƒ¥-ŒåÈ{þÂޤ§`Ú4sÅ%¨¿h –Ž¢×ÇÍ;CQda»Ï4KbQ'·ßIÁζÍż§\ÚÀ¶Y°¼Ñm›Xb Àqny[%f÷Cý—Ù×ÿdm¶=oU-ÍRzP€ý²Ðƒ£MÀ„<èëJ]DòE,“¬¼s’°A3`¨Ñ„ÊÒÿ”W;Lžè¾@2Ä$nÝ5#mÁ»Eî1çWNRõñ»-AÑ]Ò0Õ‘†kÞâa©CE]ó0Õ ›(%›í¨mâ@ÕG5­Zõ(õsZ&’­í`Ór0eKHSÆYj¶3EQ¶ú.¾hò>]´ §‹^§ ŸÉ#}ÿFΘ‰êÞ”„º tZræôi1¤u0Ÿ&T¢†ÓP3ÖýÍ8Žœ('–Ÿ9O‹]È+_àˆ¹M&þÂá¦U{ÍÒXÿÐgYPd]DÌwFÄ•»‹Iĺߧª:-ë´II]Ô]4–7:X6ôoŸæ’‡zœ(H¦f'båmh’U#š–Y‡œ`F^æ`NÐwÜ,ÜÚagêS^U%òËíž0Ÿð6±˜v^Ø ÐëùÒxËg§„}”ªÕ­ñ3Md}¹Õ©,’ì‹\OöÏÀHÐë Ñô R$+AÁwïGã'RÅuj‡U„IÇæyÈZŸ‡”´OQèG"ðëÑ>’ŠɰV„-K¶q¨­B7+y…ö»T¹¨.‰Š+ù'–é>²…Í;lôÂr36|Kåùcƒ W2¥™ª¾‚©îu^±ƒã%f8zÙÚ`ð±žkŒ¿8zÓ,„/2¶¢øùT ]@Ì¢¤y 0~²îvOÁ ½Çz wØñkø€ef€+Îõ%hrô8Z¾:f²®êßR™A¯ðÝ(/1³‚Ùåm§»…Ât¶¿T#ó‹Hò´¸´ kGp½¼_ܨãF–®Ê't#œï'¥÷¾úЕÊ\³"»$…€:©,/)ÍŠzVdXà¸LdOTvÍÞc½µÇÕ'çXN’R÷³4þúuE™‹ì‹–…M4ž‰:êÑôlÈB{®u¸*®ªRÀW§(ã·Ù5Œ'` ”Õì{ópIqœ%@†¦g ’®P •’0Iø7ªÌ¿RcT˜¬ŒE–ìVƉÅó1ÇÈ@˜„ñçèÛ…ëb¡vØãIX‚ƒä!TBe“„Žõ“W @\{2}±­Yö€,_`‹Wxl]¶-W6Èí?hG1\ÿܸ‘Û4~S²ðC–}¸¢VE¢š¢LèéX‘iÉx‘Ù©Pu(s23=™” ³2»UX1 ú/&_K˜|U¡ûÝ/fñÙ€ÉZœ#Hª†s„MÔ¿T»6Î.qAjÚïR]’²ù»BßêsR£ÁÑææ!­Ìæ6ÞÉpÑyéQÈ´„KI¸t0Sñ›±Xé!2/¿áÅKÝ·²ÖGŒKeÿÈÏÊöIˆ z$N.W!S23´„ cû˜íjVvNÀIÍüÝ;¡`ù‰EÕ¤Oiž`D2O®É×ìDþyûRó]%…ÙˆQ¾ËØæùeáKEækü”ÉÞeaö”—O•d¨© æ­9À"ƒõ³AZ\â‡ÐG€ÛUmã¼=-.qSt—' ôƒvâè*Û† õ¢ Jš騥¸.ÿ(l E'É[Ë’"CBÔ^»ºÜë²Õp™_áú¸ õ~íc¡Q¥ºs¥¹¶ Í,ÑYèj»D\×±µ5ÖRm©¢Çá»p"‘ õ1ÙSJÑÜœÏÉð%Úun®Øiag€"[‹$myU`†ÃU;Ç´)JSópמǑmD,b^±Îp¸j‡ã˜Ú-õ†µ$â¾¶¯Ì»aÊ?qÖ&’o>Ѓ™y¨ªa.5 ,+–˜D¨Çµà¬Ç·XRFlˆ 4âªea‚fg ‰ÙH+âŠXbIY±Ä ˜ÝCMÿ›€•ä?P™úTkª,ͱ{IÌXäâšä?C³QKÕÔiÜ$òù¤w…ÜpRFpbN>å5D3¸Ä’ò0bá d²n†UIækd<ÁQL%<7i[JlÒ4¬§,šî·‰¾\ÒB˜ÃiÒ{t< †-éÄ´P³@•FÛ¦Ld&yI2óÔ ÕøW¤â?t(ã"׈)ÊÊ{¸ì¸á¤Ä,àÄœPs@uæ9þnE- óó¯÷'"åfçDļÕÝÀŠ`éÚ䓲´æ£É¹ê^y[é»AFüФ¡ƒF(ê>]¸.f<6;ˆótÕ»XP}ëŒ-\glã:c*Û=„ÉÒS&KÛ2™âå­©ÈÞ$KÛ ™ÖµÌKJw`Ê2ï Lw¥dñ‘e­‰°2il£‹i2Æ4Ú ìgþL÷–óÂÏ „Tg@Ô7yÄÕEÉúiÖtë>šé^!Åü ÉAG:š¢™ÙH«‰˜SY9è©L}®6W—¨YVö(²îœÊÒî©LýZÚß$"IôoÙipÓYéXÐá´0>g$ŒÏ üy"áÔhN Æk¬üÓȺ™.æ²­cF›¼DD—HÔú–VŒRœ`;ƒÌ?èn eÉ Ù0Š£ÝÌÁ¼4ŠEü,Y'¶¶ÛCŒTž>oä“£Ny—eZÅe[4õÁÙCt§8Ši©ïÀušHb7y »\VWy,[ž-Ê›Һ@¶)íN›Š˜ñiw‚¼,õz0^­?¯Ó‚àRIÊóèœZª–ºÃx±iìž¿†N ":#äù2U™–  ýŽ`-JRõq¡ ÛÁ"Ú62؈3*l*¯ ¸Çåå€Ôƒµ?¡ ûúŸ¬¿¨{' ¤e~v%Y„ ºìž!D†‚V¡¡«ÐÐUèGÐ*ô#xú¼ ý[…B× Ð(hý ^}‚×zåÉe^Ö_j LÉGfד>ÜÄIff‚]%ä €<ÝúKé_’½87š“…;ÆCT7››@ÕãG¸êñ#\õø¨züX=~¬?BUpµ#\åT7V€5ƒW1îÝ| Šþœ…ùÞ»©E Á´ŒIz/*§I 53ç.1û$Ã}¾Ä© êÊšž0 ͬª3>º‘ÍÝxZ&ø™aîÇfç„2Úßt-ïm&BÕ”9”žNHËMÚÍœ²T͸R›|¦±$v~ŽžL“=K4;K4=K t™¿œ«å)$jo²àÀ3ó1ÅÓ3Cé(oS©yÀ;ÒË@Mÿ –™ƒeg Eˆ L°Ì ,;:^ú\!º[yþwˆŒTªþ7_ÿGýAôðõÑÿDÿ'_ÿ¿AôÿDÿ¿|}D_ÑWt}¾:_›«\ˆØ,·@}Nf¦ 'ÓSQéþEî_Qð»ªy€ L°Ì ,=*{V!^AÎÀÔ,X0;M-n·T_f%åÛß<3'S<;3mâyQ™yÐT¶þ§¼v»³òs°@31 yÙÐÿL~;%rÜ-‘ ¬ÿ‰ºdДÖÿÄ[,¨QªæZ—ŸJêŸ"š»°û–”þÁC˜·Ðv1³%=/»|BNú >59öÿ×/vNæXZ*z,5ds²1Ç”7)Ä $Ø’&€èœ5’±æË ùYÅ‹¥Å²B¥”ȯ«'DÉ``£¤x-¿=,\™2Ú˜}2ä=!G/25d²4Ó´Hã ¿ÀgTš·¦Fä‚6p δfµÎ›Pš9§Ý^…Ùˆk&S27 –*ájÄš"-œz’+Ú8ß% ’X°`‘ëÇ¿2ÏÛ"m¾.R5ŠÑùÜãBâšܨã†HB J9twº5ÃWÿ>-n%ËvŽƒ]{Å”´)÷’;2¶äV¿³~mZ$òCÓI„dgÑ„ÈPæhrÔ:²™±s¬Hn$*:EÂÖv݆ëZêõLë¦ÙgZËJ¤ŒfÇMDLDTù³¬?nYùyUU—O‘墩Ó?ý)MïÁS INÍO §•¥pÉ —ßThf• ì¹jÁðÒ°ü‚”°¶w#’{ I­(^F¶wd)˜N7£å’|"Oã\WeðCÊ[ª¿nGæTŠ>É—$È0"ÌÊÝÆÁ†èœÜIhfÒ{‰íž³CMôŸêâJÝA£è'ÎѯYøæ²ÁâøÒ¹×±‹É¦\Ñö¯›òC°ï å¯ùBvJ•ìËw› øj&õ‚µARL)j°KÕ-~Fê n1ËžÈè"NdÊ25!Á~LW+U ®Yþ‚ý 0ÃbêÇÓøAœ²PAË¢rÔ8RˆN–zGo›é¯j˜Ô;… ’bJQÃ\Ð…NWÀZ¼ÔÂ[ÿhç/HZû¨ Ü8p ¬íÇ0”93‚;$UYýÀ^@GC@—?÷:Mp›)ð±̨IÚª‹ˆíÆÁfÙNxÌ®¿sÇ–\JÈ÷ð=*œæ}¼”äK„Œ”ŒÛ:m¾ä™WM–6‘þ¦k$ݺn3B}Â¥ú.–„FÄ"¦_Ë{TÿtTêµÜJò% ú=©VOê#Õ“÷0eËEÜ-¤Ž6V[0oÉ s­@$òJ}|È/Ø`†ñ7é0Q·b¿¤¢{’R¡‚»To_7Òf¢¨Ê2C…oŃHÁ¯Õ _ì•Ú³Lu=·ppü„4'B7w˜£â¸¢™M`¸ž‘S¢bJ4¦˜™Ugb©ÿö–š—ZÏe“æ'Yфł¦YÆŠ°Bþ[*EûE¥é×2/±Q~»DŠvGD”Í/E™ÈKZÕ¢¸£¾8_Yó‹ÁE=Ždúü)ÿÄY›H²²“KpŸs)I 9“Fº¥7ë}ËDµWýÓ,C76^`)Pmž‹úK$IͲ_#aó µÖ¿Às~Ý(Är@!vJeŸòjçÆ¨òÖ|ŠZ#ÌŸÒFæðë‚“'ñÍHw’hu’hv’ ¹ ”@ùÀ3Ðï§p-Ë}…}ttß”k—ÛM¦(y9w20[ý³“² {²ð9ü7R÷od,P¢Â¥'\Rh©ÈElnjöªF?¿…s²„sÂLÓ˜%X*›5ÞÝx“ËŸpyIPU–6IÁmPŽþ%¸×Rd9ÇxŠ=-ÊÛîSÜÌ>Eœ •¦ äe¦AÑ‚¼†·Š¦¥“:[à»ôvÞWNëXÿlSëD6æ·,šLwlW¸|8/~4㳓#ÿIJ2HÌ’ÍLÊÈf'ä!E"ë`•Åg¦eЧgF?Â[Ôøšš‘ÍÎF¦Ì÷ä¬yØ1N ý©“ø&Åœd¹¢}w’hr’!W*ÿN¾^' œ3}¢@yËe~•µ —¯ù ä©?A¨üËK°|Ƀ™.[~æòÒŸ p~‚¶=ë“ÌÔæÈk·ÜÆ¥_<Å–eØáùe`àE/C¶ÍwÑÿPT»ƒF=”èNu¦ºÒ»Q"AJÙ‰æøwh~‰÷!ÈB{ÜúÖÜ»¶©n98Ò"è<%2•kîyÿÊï ÷×›œ{òy»tKºæwÙ`&^ïŒ ;êÙü„„HDˆÐÅ·%6ýô™›K&¦‚jOæ9KuqeT’õ@%ê·u&ÿ4µˆáy$‡Ð¤DÌÐÄl˜ nÔ¼€$s3oŽçûU¶M{•ñC…Ìú¤&`ç ¤Œ¸Î@H‘®býï¨Ï[X0#–Øÿ…J6'¦ºýù2ë?|Š:Á×Û%úúZb4#’•ñöo±DyðSþN¨ÝïáɶgÎ@ÏËë xŠÆ¯¿öÙZQ’âfbi?+wLž8S˜) ~¦ŠsÁO@˜šù{¥‰b”Ù ãçôÂø5ÕI"‹¯\Äp³´Gôó‰Ñ„ÈPÎDAR}‘PEM¢¨]KíªXjWÅPãhq”:fwo3³˜äµÀ¡‚Žaj63)ÿ&yÎ`¨e£9~g:~g:~g8ÚƒšÖ<§Å]7Ç$Ý-.j¾âz%aò;NQTéiaã´ÜôCGDJ5üz™¬™‹4ÓO Ç·˜R}{Ë:*Vªñ×+êYgJj*X4é3­[¥ûÿm­{ i nÂ|X4Â`Çî=uúx õÇ¿£ê/¨$ýñï@ýñ7iq+ â.¢<þÆðPÙÌ~Ï®ëÔ¼ øºä±¾[AwÆC`D?³_Î-8º~Eåþ÷>W¸Øp¬wH–;0@kzýÉü¢Ñ´Š`ìÀ!¶u8ÔT})Öõ¼@!†…\ÅÝj3¤§×m˜‡a·Z ãéõ–ÖòSdÙEÄÙ/Änñòê0‘ÁŒ8BX§ÛšRHs$Ö£hvúIÝLÊ“LÍ“â;0Iâ<]ž$Cí^W¬;A¡rE²ãÉñÜ`µ¶y\*ý·‚Ò‚®h¢¦E Õzã³3ôIó:¦ãc¹ÿçÎW¨f™#3¬ª0kj FeÞ@Bæ22H³l |qa ;ÿA/¯Pô•YšèûQrñÚÊÑ)¸I…|'ÔèüŽnýV׎ò”„iZª–ȸþªLèKàv3ssÓºFF9E#ò#:êÑQ‡†³a7B-TÎÝBæ3 ì«ÿÐ]"ŒNÔš™ê?ô4ž&Õ’*‰:ÞÆÝõÞ0n¨÷¾‡¦vÔ´¾^…Ò-H]¶”G¶,"<`#‹,Î@ÑÈú&bI¼B·˜ûÀd]­Ë xЦXëŸwÑÏZ)é.ôŽ çÁüİaÉÀæ'¤ªô³ItLÉÜdX2=ײ1 Š™šŠŽLOE¿Þ¸ÂÀ)>5-ý ÈZoƒ—–p a§"‘·´Ö ®èÔ”¼èô´ØoY*PV–pjRF8='ÁÚ’`H˜Ö#­®fä“PajÇO͉ÁG>LfžúÎNyQrÏÏL‡§g|qˆKÍ0 c;ØþÔÙÖØZA‡¸T`¡í`ËÏBi¦`j,˜ž‡ZVm#Bu·VtjF^tzZTäVeAž^U†?ºVîu'²®"âõ´ÊE|M‹Ä¬¡¯Ít‹¹¿°àJMîPqÍ$Û ¥Ù[(î^•%eœÛœ„YZGfFýê²âõ[W4ÌÐÐ8}Ôêùë"ðòû@Löù+’ly„1¼,1;ºiCyB[ÓSM‹z¬i×FK â7¢ $$l—]K Ö¢Eˆ|i¾3ªl'Œߤ!ªfrÒ(ñ¼ÍÌÊ‘ºõ$GÞ„BÒ”6DyfõæÏúªåâA–}Ïò kÜÆ«.›RН|sÍHÁ€WÅ™†Ì6W±ÊU”¡qݦ–¼^’‹ZþùbõŽ^Áqf¹xYÂÌ ~3VZS¼ÆáªœfÙ,øAy!>!võ2{í~ã"žsÇÃ+õ¥”/ HŠs¤Y×2nëšó‘cJ1¡°»™1ä´fÊM„¬{"©±Gý‰FÞËšãìDbÒýÂI³f¢¤žäŽ™dc{£ŽvSQ™¥2ì¤ßÎÛXHÝ‚¢Ê®|:ü‰“ar;N.!ÃŒ?^̆ז»€¨¶¹k‘Zò!<Ú·7‘bÌù¦ ŠôvãÔì RìH°šz\¥j.’Rw×8HR="ƒ‹4ŽaÚ}¤C¶Ûá¦Ý?ïMÁ¡ñ uÉã¸’Š•7JjMCEIc¢”êzCœVh Ã$»~£-ʨE™Q‹2£¥®gĨ“ëêÚKº=¹8”×­.¢;ô-–mˆŸ‚V0H³a}¦–ˆ˜à¸‚!ŽÃ¬ÃŽiEùÄ<å@f†C¢|Yžr@)ü›²œHJ#ŽLJ s¯iWÓŠYÇŽuYMQ¸åâ"-‘8'Ü8j43šêõ™fI,êärû¼—Ï;XÄyÀFKz=•õ:z›Êó‡^M7UÿÁZþ©t7/E&$l±|T›ªÿò=°<ÍâR¢¾yÏ*fa* ãGß”;9€ ô&¼jIW ÿöÓ‘ÊËç#mÐé<[(O­TF…Lä± ³I¥Ä}\åýùŸçߘã6ÐÓ´sx èûkûëú0mÚ¢™®jy V[ÉÓ¯#E–ä©öÐ÷ÅOQËK‘o¥i ëT­þï×%AÖzØ¡AzU«ÿû%Þ+<¬Sº¦ÛÍÐÑ(¢°‹ËPï¹vëEK‚’ü,˜y%1ñ¦©D•úèuGúHôç<j‹ ï x( ø¾Ý‚~%ZC|e ¯Bi¥à'×ÃǤRØ3© "‘q m¢¶†xªôÀåž•Wd×…ÃÓ¤c"u ]ôs‚§„!  øÖŒ[(D ÜŠÑ„¤d¡Jð¢™1<}:$Â(!NáÊå™ÊOl/ÅSÇP€7þ1KÞe!käùÂAñÐ1”¨§xêdå}¸áÝR‰¬µAòÐÒ¤ájI€Z’ªxý7ÈSÌ€°õFÆpà‘/$Ä ñb’OY4Œ"[ƒ<Å& ÀËþ^"ûúŸ¬¿S*åÒÓuŽŒØÖ¥îÞ×i"Cè»Ùœ< ìp ¡\ÌÇàä”à—ü"ì©‘²øþEñƒ-ü _?¶ ?¶ ?Bµ ?B¶ ?B¶ ?‚µ ?‚¤"DÈâ—8+Û„e¸¸ŒD–K¾"ú`õ»' ¦%P‹± Ÿ­ìŸ!D†Â\GÁ2,!ì<ð¯þÅB¾:¶[ŒPmEÈV"dû¬e‡ú$ë{k#².±µ8R…ïBã_û{\Ü|Õ/‚åUõ]01 ÔjÏÖg[ã²÷65/t«L|a–k§žE=ðÊen–ka\Ä.”§[‡Â/Õ>¤þ7¥–î!1Ûþ#:^Wû™ºLO\°hí†äv9FÍÝäyŠ^Ôñð:< ŽR¤Û@‚.^¸GŠÁåKé_Î7)7Ì×­‡áõs ‹Ú#|CE­y½Áu œ üKK±’sʾ4ÍÌêýƒY«Ð*ó ×ò ×òþµü#̵ü#̵ü#Àµüƒ,Îõ¥iþdVïŸÌZý“V™¹–¹–ò¯åŸa®åŸa®åŸ®åŸdq®/M“Y»™ušV“ƒ\ÇA.cþUæ"s ¸„¹ÖTYܱyÔR4—O™Þ fèByúu¨¨CvŸòÚÔ²HåªÝ y:Ž4ü:}F©ª[8X«®Ã¦‘75ÕAñð¶œ4P6% øMõ0óoÓJÉø"‹»þaØiêïijž™Õk¡Qõt¯e¥w‰¢ª¢ƒâa×Q"KÁtÑ}‰ÂBsŽ¿RÏÁ¤2ñU¶¸Ó ã¯Ôa0#¸wrü°V}¦ùBæ :(€¡`:ÍCæ¸Î”â¯c)¾:f‹±ú"âØìæeÖÜ–¿Û†ùÈYXÔÁìj@¿hŽLE¦!(¨*Ñ­¤Ûd^JgA´ºýêXRøûOÇ_ |ÿÙÓÝ+ÁÛÁ9ê8 )’IÉÓHU"ï¿ú^?5§'Ò†TY'$­ Ó$\-)Ô•SbS¦fI¸šý+õÀ¸Ûåaš.›VMÝ"ý¨M&Ù³pÁü!´6î& ìY¸`YÙŸ¥ÎY˜`ÏÂá´7Y˜ ¶˜¶ÙP“&¸ÅòTˆ#ø™6ñCÿlÑÔæçëËÿûÏ÷ËßËÕEûè[tôBGýý]Øv²h›Òüù–Þá•ÈOÐ)91ô¨£c«—ïžÈ›h³&T^æxzbz|Ì /®NÐéy^s­ïk·ù %Š„™'™’ŽþšéÉ´TØOM-âèQþ˜’û5dÓò€î!ð†H1‡öX˜Þóꢊ²¬ÈEïS`ÀÑæå¡H›T—Tß’52¯2ÑHjFvOÁÉMwŠ¡ÅN*KÏL*`Цüù±|Zr²,!ìÚsˆKI†áÒûê6Ø=u˜—z/=+ca¢¦`ÎäØ÷Lšx.â½Ì•"¯©ì^¥ T}qk` NK†ó¯ÝWw™ ÿBMˆƒLʆ%ÿÂJE¡K°_oˆ˜†•’M–2bꇸ0\Z è—ƒþ©Ï²þ§ŒIÈþ98ÉéÎ1Î\£'ª*©WÉ GÑ×8¢iݸk®±$óºaß7+³¯;?K*ÇßìÏ×Ñ8¸´Я÷ßúo“²ù»Â†ÊSÒ Á‘iÜá¦Õ%QqL¬Ñ´\¤UdÐôl˜ÿø­ƒ“LË…ùÜJØ€[ÙÊPÉX³yé0lzBZQ‹¢f¹ r’0RiúµÌËFv‹ÓòôWTŠ~Gí¿%é+·µ™ÙÔרþc.1»g ¤e8Ãpeô_C¥(U“>¥ír¿t:S”õgŠº3KyS– “‰&Îqž i³ç&4Ó’†M¢ÚrÒL¤r„WäÕdŠ%SÜEæd@“'ó8©©P_*-n%=s./ =—›„¦Ö=k³j–z”YBÏ…ÏK‰ÁG#ž›™VA#*ßByY0Pž{SÖùðT˜“þ"PøÏ0;üY!?˨¦º¤…jDÁý8àà’’QE—š„ïÁT ÷`*Ä{°þoîuÙR_þ8¸œ$tc¹ì$¤E#ë›ÐU·÷Épñ™Iù‘泓C~ð_Q™‰ >øw`¬“ÌL{¼îÀ6’:|Fä¨["MYwPo·4Ä('™’‚žÌî3 «"½Ý¸]k7ššŒMËÆ3­›VdÃgOnW{ NÉH¾¬»Üfˆ#5 /Ç\ó¸²üfaå©c B×Tÿ°÷kýx:ÐÏǹkøØ;¿þ 6å§ NÄ1~ßß@ù+¾P ]’#Kˆ9(€“¡€:™¨ñú8¥:†‚ê¤Bt^DGS@*EßÈ9A€T•BoÞúpêJ?Í]-Ä‚˜ÕUdI š™mgߺdn·†‚f¦^#8ª¸N«†£8c† Ì»‘ü"' ì1ÙŽuDšr"•þQÁö^c)ò,-šˆƒß'R¼;"M¹©Óûq§ÙBR¤{$nÝV‰™ÙWµêqéÏ0ßÄbö*2بÿ=+*~HCbê/˜÷IoÚ¢6§ö-”¢>B1÷Xê[3ÐÇNœÉõŸ`óM¤¿wŒ^HÐ:Ó´ö¥iã¾k`ÚÁº)]˜£þ¡’p Ï9€YÇ¥Ô R7\FÝ@‘îM&Š{««4.åä‚Ý;Ÿ‡É&I?O þZºÈ$uœ\ò{Ž7–Nà7à"ƒMqõë¢럄 XXÔÁpG¦"Ó#¨/³ØU(¼‘qÀEý3 wd¨1Œ`Ve\¢0-JU4³—Li'—ªNËyûŽ øš©P– LL\æ"ÍXë€ù«Z¥påÝk-t¯¿–ªlëol¶ˆ€mOŒ"¦|K+u‰ñç‡9Ç_Ïp¢|j¸áß}nøGŸøÅÇþQw\¡å˜7P€Õˆ"ØuÂ5Ço {ÁQ‰"¹–8ŽsèØÃ@G¥J3@ò¾É5,êa c“w/>a¿9pkòî)äu—…|â7¹Æß©Ã Fej¦.µESÄÖ4ÄOÓ¢žÆÐ,u‡§NIò\àPÑš¦—û.8¡^itÿuÐU>@Zϳ¥¾ àVK`V0»‡€­F„¿ÍC,ºÅ˜(6ShÕ-ßÙ½¦Q rK’¿Ûkê¦Vév™tu­Y€žfQ®/óÔˆ‹)‚ÂEÚ:{íó‹âåDbš#Ò¼ûE¶æKóae_Ä]ßan¤+ãh䡲Ï_—B¦÷ÇU7ø±ˆ á-&"ýü ÌÈ2 â´†wÉE) ¯º K.‘F´oYu–nbŒoÏÒâƒÖrÀüE ŒÓ²+U p³QÞ1c³ðõ°ˆ'cJÖ5ó»$’]ó+Á÷Àfåe‘$µY“‡3´|‹è¯jp¡æ“QW¤Fx‹ˆ(ø rnþ»ã Óœè™ÿî`s”—Ws#`•¡ƒZ§ì( §Ñ!48…h~ý„u¦KuÌgõò~#\€)óQ^ƒ@/Ù€+ž¹8€UÇ¥l?ã™êcÓŒ1¼b ©ÚžË ZWøë‚ðª~¡"-A¤%ˆ´ HSá"M…‹4&R^ÿÑ?jV˜¹3¾Ð:qþz.êq˜i%”²[N÷Ï(÷Vª†4«ù=Û?{x²lÆ èeÐì$°Å1YYë¿ÉíJcM‰_¼n ûâEšÊ>¾Tj–j…·µÙã²=ܦ®2»gð¾ò¸y€¬á±¾øè~áUšÑ‚•þi‚« ¨\4à`SÝ•6³Ü ’3ä§{åf¾<¦FèýÉSPRÒo–6ž\‘~¥ cfBdÌt—1Ms2PúóÆ4v)ò“ñØŸ7^w0'ŽãL¼¯¡+Ýî)¶ÐÚ¶«ð ·h'<Š­áÑdõ3Uv£ÈO6gÌÁÞrtsxö$á&2„—ÖòR‰´æ /ˆcMŒ T.hËV¬P€dÁY°âù'#|ušR§?úÕé3Žñ'Æ Ä_Æ@0—ÿ™× ¨Ëâïb ž.ö5ŸHîÈä¾ÃÃľ$´ D¤Ÿ¾#âØ,˜”¥ª­6¾ŠýìŸ Á×lÁt/‘e´wh é@#h‚@¶P  2écÅ‹b„¸”¹H펦6Õ¨ÖÏÛÐò¢‘•â‡(îhÑ-0¾j1²hÊY€N+¯Õ y™  Ñ áíb>  ð[(È Û¼Ã†ÄhÝÍ:ÜžÔסüjÄ´Y|•4(ê@ˆW–´|&_ƒ€,Ê™2¾bx{"bf` Ë¹A¾Jfþ´@ ‡¶ÒÍ׳R˜„;G„·Äº@æxüÙqNA\ÀçǪ¬~ ./„·ˆF f•(Ì€.+¯Ñ „xõŸ 0§Ä×§ÿÒ¸`–_`ð‚Œ[û¥_þ‘yÕ0Þ¸ì ½-{dÔ!á·.ýèfXtJñw³D§±ˆU•Á—Ö ä+õyz=Í.iðv Ї‘¡€Û"˜‰‰±Ô¿¿ÙÝÖ/10ÿo“å£Vфł%XgDÃ:#*ÖÉ|ÙÃ<‘Ç“eh¥¾–á±ï¡kÅÆ,ìe^"{íòÆ$ ß÷]ìviÂK?äÅl×ô)¾0Ï5ÈÓOƒ¢„xÙݭⲈeÑԚʹËóµ´»eMy°¬ý›8KÍV#×5Rà`Ó\­È>äc„ó,d>báÑήP©ÞT[Ô±z%ÿæñ2î˜ÄÂíƒäéò$)jß”é÷eú]¦ß‰ºHöáèŽ]×*¢^ ¿×òõ2qv ×D^Ûû¥E¾•oÃ|üÌ#¡]Ö¢Öû[ù+,ù§ÊÒ8mŠ d8°`Aý7Ÿf¯¡þS6ÚÑ9Â…Ä{îð•êmË×ç‹£Ê÷¬¼ Ê•;#AŠ VÃ{(HìŒ!Ù&R@ë&là CÛÞ ÿ5^a}¦ŠÒM8™áøKéb7+ O )°‘Ù#ú‰vÄñY£#Ò”‰®DIÔn²SApEƒ'›ýÁšÍ=é‡÷Å‚R–N"¦«‰ý˜AMd*×RöÊï °{Z)s[.»þNÃÊÂ{<”Füø© ™žú‹Ÿ”™˜&Á2,pJݯÓD2Ô,Èv`Á‚Œ¾´éÁ}é±~‰Z÷}eq‡&«í!Óu@Ü· 2Ífƒ„Z¬öj4vK$øju<ÓZffùŸÉ*$ý‚@ý߀óÞÎÀ'ý ¦ëžô+õƒÌ‰s†Ÿ$µ„¾C¾…²òÐAÉîМè÷P¢»ÿŒig˜ÞÆÀ²ü+°õs†ßî„ÛöA4-ÞÖ]!×u(k2+š æà ™XƒI‰0ÈCYüS¶u \8á¬|tð9ég aÛÓ“rÑOL¶­q… yÇ$ÙcJA>ÊFUeóý?Qü®.?îUu‰e–µ²m³ç™HIÏ™3EæLÑp¦p©K«±ŸØ|U2hòÜç “¾´»ªæ\áXˆíq–0IÓgFq釚ٱ…ÁkÜÖÙ¥¯èf;†­uu)ró¦Qÿ„2Gµa«ßæéÂ$²?]ô:]¸L>eÑJ}}åakâê4a2gO™ÓÉØãûïÊn7|‰E%®ií„ä}.zî̹ìÆÇÑë\áhö±3üCÖºÍ3…IÞp¦Àu¯T­yXy¦Ø¯Jœj£áDáòfwÑ–MÆA³¶:M˜œÙݼíiÂdL…yÚÞ9?O*Às÷K ‘Ó³éi1ì ù­"U¨œÌñô´h|” æ›m»²eaûtR^,_ôÞxVÞ¹™xIòHôÍ+õ¦1uI0ä§¹„ƒdb &%´ ü<Ôòž²o3&ɾc2ÅoúQPd_*%î[ƒY)¸E˜˜|øÕ[(Évå ÓìÏYÖfz¢r¥«Eàs ÍJBf² ñ¹?Ä·~ú‡þ&ÍeMŸ1Iâ“(Þ6y˜ûþLJ¸ï?õã :]ï–”Å&ëm„Jw§[s}C´wÏ@㛞!8}Š@ÛÖ`R48Àåÿ™&ždV&49D*š -áËJBÃo ?›îtk®o˜ºßÕgüÃÔüw„—˜…Cw„º¶ÿ]ïêu]Ûÿ^?»l]ÛÿôÏ à&âFaúÓ?}0Œº¾œÉÅüç„r*'µا‹õv,’þ‡…1ßÇp²lG‹æ@ݳV5²~ý*ËK-ß—Uÿó¯_gÇm‡×ÿüëWYFú¸“Av¿š©ã_$¬ÂÝ œ¼ÿÕ¼ØR8´ˆÕVô‡¯Ú üý¢U[1?ˬ=0Ta+êÙáçãîyYÞ5;ÎÊ6ùëWQUý´¶›nØ?E–uË›«<–öÍÒ¾¤íxYZdi‘¦E#-hÝâh*ÕQMš!Mîœ×5½ÿnÍÚt‰h„’g¹íaN8 ˜¨Çø”Ô*\÷ðThÄÕûRÚ†øˆXT]¨jp:ø!{º{ZÄ@YlsÎÉ Ñq>#*—W8 %†ŸÈUIJH.×VÿÚ€…´ óPëaQC kKe†I pJÎA‡íewtׄÆ49?¯$U`™-.”Ž Àb÷ [þid]ˆÌn54ìË‹Æ;¤‡à€´û ›þ…å ‘+ÌuõÓßcêÂxˆ¯‘‚CÁepO…nAu3Èøq€æ£6Ò¼?dlF3¤Éùyõëªp®¶a~ýê,„G­EX,=–$ŽüÞCýu‰ãF˜lm¶±Ÿ¬ù®ß<ú}N±âÝBy(v¨~“T (g!qÄ8Nž:MSQKl磨y¼²[Gô$*úÛ)vY*va*ji*bq*by*F¦¹Ù­ +ÃÃCÈ2’ê‚Àð=#¾wÂÁ²Ø„ùX ŸÕ»1åHéÌÃÊE!îðKò÷Pܹ‡pgk³9²,I–&Eª¯¤ʨ“¸ î*42¯2ÑÐJÇÅCô¥¼ÆàˆžDE_»FÖfI7ý“Ñ4"~ä‡ Þ}Kõr~Q£+\w tsº´¯ïS\Ö_^jý±^ÃyO<,M*‹¤*u.(=µ÷PÅaYÓŠ÷Ü6Âdk³1YNÉrŠ’Pv° ,á™pžŠÜ  "\S¯pJ @„ÔÿÚdùŠ1ú]ó Hn$-?£~ù-ÚHµ]ž‡c¿”gÜÚ:8¢'Q²ãzõ7&”Ú“­Í6†d ƒ¨6Hþ‚èªi@+ŠäBü:ò†èoÉú>â jK…ƒ¼Â>ÌöÏÿ…ö~Ðr( PQßeÓ}§­êòϧ6ìbý3Ða»OÁK¨ëPùò|o–² Tê*P±«宸¯ø%¯EßÖ™]ÙRÞ˜¿©†ÙEáñ’Âbé±Ì|¥LÏ[ Ó…÷I^b# +¯W@+Š·KÙÖúž_•Yã ê&ÍÏÎÒ¢ŽÙ,0š!MÎÓ«lá×+†MÙb¯ûº @0| òšQ5£j¸jX5ð ^¢RýxíÂx¨ ¤8ÆPpÜÃSAe—XÖMzKcüKÅÍGMeÑ„•Ô"0š!MÎß‹Ò3pƒ<½ðþÀ$†ÃÆS¤½r>»A>J#* W8 %†ŸûMûõÝñ¥ñmë5ýýýÅ÷óUóíåRiñÍ_’1äxÍ&yUe™qŠnIò73$B‘Ù€(V!ÈÅv—x¦çïg;b¤óO’ç©51µãÄùKj­_¡ñ$y~o1š} ¿(i!GxLU¦¥Ÿ ç³ç{áCü þô…}ó2•£i‹B¢ý7ÈÃÇT±„”Ë$†Ãæ¬Hш´0»a÷›-ø–Ïç”PωzŽ_é,ƒ!øT|-ìPm¨3¿Kòr²ã¾ý;óë€(V¡s.I¡úaÉåeáû¬¼‡9á£1ý8²$2ŸÒY…‚ËàçÆÒµŒËÚŒŸn€²yC;©6~ãîh‘çž [Ñ irç¼Ì¶qª)kxšû>è„ׂÞ;9Âa(1lΉ¤"¿Ô¥÷2f®ÃO„¯Ìá>E0žÚ?hÿxχ:Lúq\¶ÞÓÏßNª Gz’o),ú_³Ó ‚ʼnâsÎå#W—¸þªšÒfÔ¯æmCN¸hHÔAl‘xÔ·E¨jp>xsÖÚ,xè_ .ÄI»AøÁ&€Å~.쬼ßí9eS§±gú·!'$zHÔA|Š`ªœ >ÏúýõaÞ¯‘¶!'4Hd!>±Õ@ <ƒÊZùbßÃø¨ô¨8†PpÜãœBÕ^U{5{T\§0¹à é„RGЦ$ŸÒqD±¢y¹4eå}/ÙBœ÷° Dº0,ösa×2IúFarBÂB 7 ‹0P ÔàlðÝ ¢amU—ÿ˜eÁ|Kä-í”ØŒõ4¿2rF3¤ÉôÒÏ’i.ͶõéýÒÿâYvoPgܦ¨¨ÿŧÔ\!qÄ8NˆÎSÔ)°÷ò{˜·ÜËl ‹¥Ç2;'Õ¿¼i•Y[Gçê„Ú…¬™ã ‰#Æq:©c›ÕZVåÅüO¥fIGßÒzÇ:£6²¢Ë«¼œA‘ÜHZ'*Q˜Çf+û«PÞ×ÖæŒQ‡‰ŒW-CÁep?°“¾‡ñA:ê«PpÜã¤Âï ¾J6g$~gØÕ1 Àb?6z5l N @WÁ4L‹ý|ØÃ¼S¿°GŸ {˜ªêv«¼Çò¹?¸9Ü·žØSûíïÉPuŸÃt;û­ˆE›½æÌx²Úg4ÛÜ©7lpÜᢇ™¢j¨‹_ð‰¼‰6k.åÕ¾:1PF›,©žu,]P¾¥Óã-5;ÞC¤8|SµÝèM¿–Êuø‰ÐõáݰO–j<µÐþñî†úÍÿtoï¯Gl÷Ëù¥&zÌ·îøoû˜m‰uÇ¿œ[\â½.ƒ{x(˜>a,ÍF—›ˆåé±9+óÂDµÌM||ëØá}ŸÝ‡7}v Ûñy#ò¬íSAuk‹sÚ¥çDiå_»¦ÁÕkƒ(yW°I(¸ îá¡ÐmSˆÔ±5á¬B·×¡w½:±ãäžP—Žî5¹ÿûÝ‹6â~¿uÑF¼oö-rÇ©+Zr¹ŠÌ<ŠC7ˆMÐYŠwþçá0”6°ÈÑu†Ž]oèˆØ¡u‡ŽýðtDðèç§#‚‡>Bìçf3üf(L¯ŸåÛ}U’׊,i £¦íIÜ­‹ÜUóRÄÿÞ:†T|b•ã7&¾…rj59·Ç©uäÜÇWÛ·À°Ø=®í”R¯˜'‡ž ¸¶ÓP=¢=´fïF¸‡ì݈÷ýj½î€Í | á@œ ¿Cø75}Àº&x:ø^ž}PôPàþ1c-‹âé´3}¶/@¸VO#Û›@¯ ´»´A”¼/õ°ÓÁ "r0N»¨‡Xæ_4}H±¬¾hq`Xì>a_Jw#òãëènp]wüÏ2ks¬r Î:tÿK ¸ÖOßúßE¾s%ÿ*Òüjèºéî~»aÐ/úñV¡’ß:À·ƒ¬#}èÓß.†*ôkˆøÖõeí6„&Çž0Çú?Dulô‹;èåñg7Ç ãþÐn™î¸í‘éùýΘîheagã™JèŽy8ù àÿ-öŒû{Æ{‹}â<¶¡¸;Ôc‰»£=°¸;àcw!g¼Çn?ÎpÜw6¢M›T4e %ÚM9ïÐSü“¸3æÔ8Üs†¬æ »uSx·Úó£Ï†Ýí¶¬oeÛAµwüØ0Ø–yíý±áud5Á “#knÄþvåÀhë²é~â¢â‡4Çû¿I:í2’¢ª52¯²CµÞ©-H€Ú@òQS™ÝÜ'rŸf¤n3ï„/=³9Ö+Õõ‘GäX=Ã<¡W.½’x>{gÓv6_UÜÒ"MDÓÿîZþéwxŸŽñmD|s"vBшèwlŸŽ ù§*ký`œ¥‡î%Û..—QŠ:ê… á&¾ 7…„SHè7åö£TPÞ'Ç{…nŽ÷þȆU;±Ù®j'ô·›UíD~èòNè‡Þ#ïÄþþeònðØµŠ^©Ðuzè•ØNð‡Þ‹íÿþåØNðO¬Ö<±Jó|_gTÕÖ©ü/‘ôŸúŽõUìqßTþÍuÜ^¬æ¸Hå‘Hú‚z,ë =âóíxTç“v>]ç%ªÃ®§q­;œ=ìd„ÉÅ«8W‡‹0ñ(Öä’i3¯WÒè瑱6Ë ²YF÷vtÍ<0Ûøú$puàÑms}:o2«=b;UfÖˆê?œ½Ž7Ž=§9vø rêŠn“´±/¿ÎFë:ðP¨æ@ûšì\œMùÿÓövKrÛʺཟ¢.ö…aª×¶Î왳ovȲì¥sdYcÉËgÇÄD‹Åª¦›Erd·ÚWëææœˆ™—[O2Hü ÈL*ÂnuW1?|‚@"‘8f²ÇêÛOÕoǶ«c‹"|J³‡¦L+4[¯a ÕÁÍõœO byÅ?×§¢ñÕÔÂ*Š™´ŠœNè7 ½‰U4=m…£‡lp3›xj˜fvËмnšÖ-ñªë“4Â!経â(-£ÓD̨ֈAf\kÄ 3²uì‘#Û¬ÌÓö8¾#âÉú-c¸*Kçõ‚¢šC Õ¹eëxÚÆÇsÈÑŒv•‰KÖ±‰¦68bf;ÿ©®Ð0mãhÂÆ˜°rñXâýìŽM<ÃáiÖ ^Ã(ŠÃJ&˜a±>B¦KÛ4°X_Á‡Å$ß™I EX_A±jÑ!g3“(V-.äìòt|Ì[AÝõ[Fq|JŒ%Šê³wÅÇì]‘1{÷i{Ö酑ܼ†1 ÁPg%Æð„5$ÙI 7X°rwäü–1e!"UKA 7JRªWi„'£¤<%ú‰p×° ý¦Q<%+ ÛÙê ’pØ:†ólíGû†çzÃÄu;ju IknÃK­H¡ˆ¹«JX‚Û(¢îŠ…0‘+‘&…¡Z÷"ÒœÛb¸ª53áÝ—ÏL¢èu¸ž¼É t¯3·‰á68b”WLCyÅ4èWÌd K1`ÅÔ]‚ÂÎä‡ý´¡o žº@ào]Ý$îãxÞÖ;Žçl–ÁH”—¶ñŒÍŠðl Ë9lE{¶„†b>.0aI{-£øŽKSXªŽrXVjá‹@mnËO-˜aH¶i<ÍmbÈ Ž˜l¹Ý6#ˆÍl¢ˆÚqŽ"†‹ÛÄCÄŽâƒ!ðȰG+t°x†lb^Â`˜€!ª±‰¼u‹'9·ŠcVHzñéºôâÏuéE˜;¥WàçÙ³X‚rfm7ª¢ ŠÏÖnpE1¼ág2s›(n7ä\F­’b‰Íl¢ˆÁ¢*š˜Z¾¥°›FSTë¾(žc²,Q¯eÓ1ˆ*Áƒ%9·‰¡68bÃ8–Ï0Šâ°vŽáÙãS=~,Õ#‡R}s†š²{°´Šâ¦¬°BÒ»<áÉ 6j—§hbcäö¦z-£HŽ1¨[L EFàƒ"T1” ¤TºÒœt"™L£>u4Ža9 ÁÔÞc]¢‡õs›(†Ò&‚Ø}U4yk<ÉêïZ¼H³R–×åí%Íòí ëȹ󂄩Ï@’Hd!ja(`ð&±=¥UÌ!œ~¾c,cmLâ|mŽéùÜÂáÙ—ôV”ÏTþ! ´–k“ DQu]Ëú”– =Š @áŸÕ·[±íÌO~jen¬i´£ûC¬£bûC¤·Ãûýœ!TÚ˸¶XÆÊ–BxèS‰¤çöXâƒ=‹¼à²\ú¤ÊW?»¼dW °šözá”ØšØJüY/bMý¥l(ìõjÞ€#ªÛå5=Rc½¬0teô·¦’•¼h:Œ1½-™À™5äðaЇ–câ Ê H4ΰd‰@Ó@¢hÜŠ…&…5h™ûèûbÜ ò»î‘ˆ¦ªün;åÒ» »)ãܲ—{ݲ—{ݲ—»Ü²—»Ý²—»Ý²—ûܲ4kvçÅ"Ê“Xû d«bKað¿îw®ûÝžë>w§¨Ò+o<4Å êÑ !åy—y‡(Hâ°g ŠÌN=ºŠ!m^}BIì(Oì¨O0²U±¥Ðù××kLR¾U  ¢ A"?¤Ï¸1º-™Ì™UùS –zå×¢¹ìõ˜û±hÂk—Ç€¿cë èr¿cªxÉWñ’¯â%]E“f1ÉÇ×dL1h: C·ãm¸½nÃêrÛº7[\õÎOÞsB£)3hîTƳß6OX“ñ¤4¼`ÎÌsb&8ó2Ø|TdªeðwQŽR­+ßG—ØM˜ØMãa1¼,M.QŒ&«ˆ “[Ó8·¦`;”nTn£5þQ‰ŽÖøog=Úâ/Ø[ãAxlyãúÑžH¿%çwXØa-€» °‡ÿÏ?Û翃·??×ÿ‡o¯>ÛŸ¿'þÞ{†ßžá±§úêwñÒïâŸç{æy>yž7žá‡ç{àù¾w¦×}û.žv¾}ïú>~õ<ê _:ËNõŸó<ç<Ÿ9Ã[Îó9ó¼Í ?ó>æ}|Ë;x•Yþd–'™îCfyY~cºÇ˜ç+æy‰þa†g˜á¦zƒ÷òïåÞÅ÷K÷úÒý½DO/ÝÇK÷îýº;xtwðår½¸{øo÷ðܲ}¶,o-ËOK÷Ð2|³ ¯,ÕËðÄ2|°Tï+ÇïÊñ¸’}­t/+Ý¿ºéY}èOÊ(‡ý­ÄÏËÈ,·£åXÞÍ-ÃTGË,°ŒØBî¥JbI"ˆçÖ”½œù0js €ä¬¨ukŠçPç°Ænó¦…:ŠDza$>ÚÈCÖ2jx©Ï¬‘Ä­5ŽöÃÿ!ŽißÝ£Ï ãÉJà ñ<³²—/ñ–ö0p¼ áa„âóÏyFâíâø‚!žgÜN0Ѹ`>¦;¿|TÉMÜh·¾¨àÙ©`Y3,G[ZÒ¸(GwDˆcH•8•.–ä-¥ +;I°Ã“TqÏ iT9³Å‘U¡ÒMI#üX4d£-ž°´E†3 \G3M8ž‘ÂPu#ŽM?‰|} hö$Q h-*“@ß±C1V!ŸX’Í%ãuÀ>m Àè~›¶îêŒ6ÙâX[<á.zw‚r½3ÁGº‹Û• Ík'ó=Ýtœ×ôßkRW2š¡¸J34CuþÑ}-hÖ…5Н:BIYÓhS S©’HBx½n]kýqOa9š¡8J³u†UÞ¥Mó"}ðÿQÿyÌ! W<æÇsÑÊkc"ø´í„¹‹ƒ +Ѷ‰„Qÿ›?%T¢¡’ŠªNu*Œ\0„-Q(šªœ¨EŸ°Ž¨EŸ°€íEŸ0sQ¥¸¯;Îm˜cP4 qBþìÛ\ÿ<¶7Ë%Ͳº¯ºh%`~·²-ÌÍÏö6|ªAZ²´I³¢{Æ5-¯"Q—…B49¯:{·yÂf(DM…!ç±.ûˆŪ˜ QŠÆˆ’•u¾¥UzÍÛUztÿ>¦×k›_cb¯$×ún mSœkTéôï/3+.Â8ÄvºÄãI<{À5_¬ŽÅªåýxûÈõ 2[DõvØS²zØví`î&[=Ð; ¿Fl/ÅɾFl;ʼn¾nmG’üXï×°'XL™õNHí׌gh;ˆÜ©éJb»5Ú _â. 5j—EŒº¨]1Ò¶waÄ誄ÀÀWå-ñx*%jX¾*ÆŒ·¢më} 8žÔޝ7´]U‰á®*D tó2¿åU'ž@Úð4-8L/î r£n°¾Û‚ÚT7Xƒ´ñ s^9B®,±§Ê)ä.j $S5¦û Åt:amÑ]MHÎùVT‘«3’HdY€³j³. ¶ ±Ÿ» UáhÉîóìÁÙ&ýY!<ªB…çlÅaÝ8»ë72ÖyC©Œ,Ól'މˆŽÓ¸¸}Tí §I‹½49P\aµ‡º¨åö8uQ+ðqê¶å×Õ[X¸áÉr1¨zGfÖЙïdDÏt‚*Š®H»šýB^ÑY Ž®òœr‚ª 8*LªL¦ÉuMA@ªBrCo}æö Y“„਀H²¦.‹ì™©eDUAjˆ£ »ÄP…]ã hB-rm)js!{œ|/eS8¶B·‹R!Ï€²—Ô[«Å㈠/Z×i´.i;èhC…v.ee]qï–ЬJû©Ôêvѵ‹"¾–¦#K$¦ªèÉH]É@–ú…«¥¬ï¶`6E)k¤!ÅhÍa#æR°kþs ¨Uþ9ù¾«Eß4u«RÔd! ´œ(Ñ@\]|A|% §¶NÏY*ºã¹¾¥EEÔ€ÁŠ` ³‹"¨±—.Œ­NQ4fWôpv&l‰€U“]qƒØ¹ˆÍI³’ÊjŽ&‘<Ҝ̼¬³´´KLùíïžô ¢‘t)4»f¥Ð˜2mªçâòÌW¹cˆ´™¤%Y#Cƒ?•-.<ÎGç㎛K0.Ýû”ª`€`<Á÷)‡?<9ƒ6ìfrw ¨‚¤"2ûP@@d¢÷˜D~ÚçüÔ_‰¤][,eeK"\ˆ‡cÝ ÖNç¼—hú"1TúÞ4ÂôÚ¦W2±nõ`¸ë«*§Žà|húz­1(BrØ·XäUöŒôyÏÄ„p°‚FŒÇ{.곚Oòy0ÐbÆnBZ„ßwUM‹pø®Jjc=½3]—øxÚ™K|ôìŒù%2VvNµ(]«M­a¡åH,Ç£Foc‰ñ”–%Wš/J£ðäÜžÒ6?ö͵MÏ9]† HÁ$†¤¨Ì?givO–2³Gk°ö$ò¦=ä˜*ÀƒaZ”Â` ùÜóêZT9W͈,és—h Ž.ÞÓï¡êa<û¦|‘Õ ÷ö¸T% ƒ%¤K»^p•¸ d) „¢¥Ð^½!.ˆ¨&ƒÕ£aÆ(%†"–{ gD¸Ûœ1"ÌmÎ76¼mÁ66Uˆrlúªï¨ìUòhÔ'ÖhâÚšD[d¢ ’vlÑ”Á–NXäYßB.óM‚¡hù£>¡C{fJ<XÀ3Sñ·§¼­Å±ÍÓˆ“ÿü:¼ X%$Q -*|4+ ú°u‰€U¡âO5Yƒ;ƒ4…m‘å• ¶þ©5š³¶&ц´mu+'yT¿üMR¿i¢XÈ…H¯¹ «X‚„@̃!ié+yUC}ÌÌÑüû*s*óýXSx߈­)NÖlÕë-˜2ühTYšŠ '·+†$:}<Õ[–ÉçðÌ™ly °ä%Db!H*ò®­íšë¹=ræ\kXh]VrnòŒlBj];È¡¨¨;ê{Ï1E³–¦¶*S¦=ôN<]vO$FÂjQ8íaz‰$í|£>Ž)šüùFjüòÓcq¹¶dÊ3{4ï¼K”=•<#äufN¡N v…¢eÕ‘ßÏ { @å/úüCç? ð×Tþ˜Ý-ö˜-îÑ»ZæÌÉq‚9L°¢E bv!ιÖ䕾è]‡s¶¬Ÿ3=xnæ-í“31X.ÎêâÌ!.hÀŽüÞéÈoœŽö®y¼‘óãܘo9™- h8p/IÁBÖ"»zˆ™£eBÒ2€P´Ô§?äGÔ&Ù™V‡†Hâ7ÃÎTpö±p¶­w©(CòXejM"M¥4ý©,²‡œêD›Û£©[{ yØtŸžÓFm\4+àßÁVìå·x6ÔìCp2 p5î$­¨ksjåÚ¢¹ƒ-‰p_w)/zƦŒÈe/8ü‡9©w…´ °¾Fd=3ÇòsX›#3gDdÌíIÜ©±`\t æEÇ ]ÞhÃú~–·]q)²”îYÃÂ*B\,ž@T¼ 4Tþ» ¨øÄw!9ja²µ25-¡ÈÂÔÐÄ$~%©ÓncÖKà ‚W¤ÝÎôÇ@£­!ujÝ9ª˜²xd…oHyE[¥MYC.Lõ“¨Ð‚–e@BÕ‚KíÑKíÑ€H æÏ{Ž8 5Œ§‰—Ó€™Ð€“Í`(š}3–(dœA^MÃ$ë\§­¦©"»6mâ%]á=!)@HZêKg6ÞœéÙ~ü(h5%Ñ($9âž¹m{‰€–!î9Û·Á_'‡:*UÏñZ<桚*f -Kc©@‰Å⼤EYÓsK`¨², IÑ#Õa=Z¢y?Þ¨Ty[í—êŒö}¦zä†3·ÇÒìIä«â3Ëy¸@Ó—t‡¡*Þ¦Ô¡ÒwìIìm4yoeÛ¶&ïP˜Û“xƒ=…¼Iͨ²ÅR%øQ°BLrG‹ÂƒÊ.êׂÊ*êŸMÔ¯ÂIÁ’²À!êq’PÐE±”°èÓ9¾ ù QÅàâ È9ÈʵES[:Ẳ‡±fÑ«`4IueÏF¢Ï©Zç\MfºT>úÖKKŠ‘ÎA•CM ÷”ì"ƒ¥›sWµ°Šv¥%I×S#û±² /N/Ð:$@¢(üÿLòb©k‹e­l£÷7µ” ”å¯CškZ 6 wk ›ú›^”–"ä¯#HüRõT‹ÙÖÂQâƒ@ê°Te!:·FI:ü H%âÞ¢–¡NéJfÃm!ª@írôH@íkôðßÉè!/oîŽ9…:˜˜ë£?Ë {$w]ãħXUûÜI]Õ8‘¹=Y•NÞƒ€äob•pÌåpªÈÅ ‘V]+çòÝ3¨ÿ’#‚<>˜ØÂÝw+pÛg~h¸dÎ_nW¥âY@¢OPwÓ­Qw’/¢=Ûªâx×M±"Î㡱—ì]ïîp­p/½ÝýŽZ»ûuv÷ûh4‰cœÀÀÝ¡ùúM²zŸÚ8"C,Ín×Á ¯Üî¤W‘:$!ÝMµvíê0Ö!×é.5pI³ßÏ._¯BÛIæÞ·x÷›»ïm½–õ)-wS;ãkÕpû(…¨Ýt:`|•¶ŸFLì@œPT0A”Úèè‚mÉÅéXÀ:66Eå¶ô2¿ ŠSȸ´–U¡r'~ŠðâîP *Mã©„.m¯y·s L@÷’¯A÷ÑŽH0¸­u^÷–ÖØ$„uF²r‘í&u¹ƒbë 0÷~»Þº/ðp{aùòvïG[mÞß¿¼°üPYv®¦­?/f }SÖéy·êØ.ƒ_7ªŒù4E—±gE}Ù*ú²•ó«Eç­;WÇu¯j0¨ûÈ·á_À‡„æW„ ¬ØÛ‡ƒÜÜQÈíNÛÊ "ôê@~D(P„äæªGÌ„ï»Ô°óÞ‹ ¨PÏm¥¸àÏM¥ñá ^¥æ›–ʼH$}æîÙ@èvÝE×íº‹¨ÛuEˆýMY˜pý-m±¡û›Ås•í%ÐÁb ,¾@æ‚¥‡'Œ³L9Ùa…2€ÅÇ]—Iñ–$=8LaŒ…HKf¿U¨UD–ÐÖž,Aö²“ˆ%·Ø4ÐÙñ&îyûö»qe*î1Ç$®Kœ£ñDhl™üõ3/KsÕÌâ.˜ypX²XËd.ö YŒ-·.fií¸´ÉÒ»×êÏ”"ágo½ÌåKŽ»ÒãÁa‰c­ï döYÚ Ãñ$î° c©í·–³ŠÈÒ»Ó Ž%88wë}½ˆ,Ƀ¿qŸ~x XÜyÅiž@î#ZCî§šïŒ[‡ÜGõNN9›l•|]´‘§Ùd²‰Ï[#™ëOÃí!–åE¨±è^$ž>žÛܲI'âè[Õ·„c‰´ù,"ð‹QºŸÈýô¥ÍãÏòÊ¢<–uýÐ7…«€¡ó G ˜†\½û ÝO!_ší÷UG¸‹D"Sª}“¨ÞuKò©þ<üs’cÔǼ’æÏão«ò¤Ùð×zUŠ4þ9%ƒÍø[,m-2æ~L OìTµªnÕ?ã¦â˜žÎåê7¦¬ÿÌ7û´%ó,=•DÖ®)’±2¥°-Ú¬K%àá;1Æ2ÖÆ ÎrNw+ª46+E˜ÿˆ¨Åâèznr¦ ªD"P$˜SC£gÇ ¬sðhÜü7¬‚şŜΙÑx–DöÔÆ#¿¸€ØC0=–X !î(Ì rvÚ”äWØG”…b¨³y‰Ø÷i DTfÓñîšKgŸ›·‚¸ƒRÆ­<çê<„SúL¸°GÊÑö‰´ç‘çݦ0]ÿ¦ <êAQ(/zPQ¼ç·ÇRûìÉäë¾+óŽC‚@ ¸xo³5(Ž(ÆMSjÒ*/9š\’@çO&-ìiìiÃ$§ð=ÖÃ$G§Qµù¥øL”âÚbÙ+[áú±8Sßl3k4imM ÝÂV GúÂIìÉ.ô6ò0¯m:a"Uú°mnN!M¶µyÊéçæXæÒœÚ7ŽEóºÆ Y £cló+y)rb‹&¥-8¶±O ±T RO(GB9"&ÞCx‰€e±qïK öbû©1’¸=ª˜À¹ >–Ž%–mAzôºôJc:"‰JC ϼJ«ŽóV÷ `™+ò›ÝàçÐÆ~,Ú®OËcvŸ QK~¤’†–[šÝUÎÓ2!j1 -eZqž„…=V´'?ªp:m:aÕ׳íAÀR¿±üÛí…È|0Än/<¯ðèõ‹¬¬û³èä0þE&àl´ºéùÝh~·0_á æIQ'£y’‰Ä˜Ó˜_.EUtÏ‘Od€¿¯Â!i‰àò«ˆáòó â 0¯«KqíÛȨÆ^… BÒr.Äñ¾\ò6j+¤_‹­@ BÓRßÒ‚|C&ÖxöÊšD;2ud® ?é˜üÎE›?¥eI¦=µÇ37ö$òqÙüÄã2 øIGdðVÛ%ÕÞŠœÊ{ ¦¯ Ô~Œœ¦¢’¿VYÎkð^¼ƒÂx"q§#m¨‰; iCLÄIZ¸2¸ Xä«"c 1è"$_ˆÈáðÌ´}.š]D-ñx<žØFγŸêö|ls‘wl­^8ºT —(8–RÖ ÝBVE´cbBÑ?±ñ? ‚Þ[ z-h=3$d>¥%ܵöØö°‚•ßNôiÓZ—‹—^¢ñö»›ÊÝätUy'û‡cš‘ÌK´‘H¶ ÎÍ à°ô°o S S‡9wòÀ!kaMá›ûgQdiɽ/´(‹ÃºSM}&ë¨Ïdêõ™È¶…@ɧ´e°žCØ4mý‡¼„¬`bŽg¯ÍIÌc#üÄccü¼£¢B´EÝ·Y^·¢£³_‚D8 4-5ýíe`^ßbªÐ6¶ Ái<^šŒ†¨¨g,L¬ ü{êÒ€œ÷-wÆ‚1ÙA gÄDbª"úl°wìÀ!ÈÒñ?¬±Óº®©Ë"{&kòÂà%Ù¬w†¦HÜ?äÏMZ;‚^Ç€@“Ð¥]‘U)ù•8À °DþNB'²„A…“Š"$>†Õ/">vÕ/ 2f5@¾…õö,r/m@À/BcÄì¨õ éý¥îØ¢‰ƒ-‰°Š*äK+­®äª÷ %¨È¢B¾ô„¦åW@È-þà­€Š[äI[ ‘™ô#³)¨ÇdP ÐnÈ+S£)žp“‘ÙrGF ֈ豩 ΦҗѥxPbªdD¡Ëéå›ð©·ä»ä)}f‰òcѤ¬Ä`‘î k9Ö3Æa€ÖŒØE€×0  Ç3¨â9Ô9¬Ñ„ í4¥ÒK{q'~d#U©%Ÿ®E–Ê ’¿Ï>ôÎÜy"è[ø%‘¸¼ÿ6ÏjŒ¿{Á@á¯"ù?öe×¾xl‡Xddw£ìïöì•}òØÁ̘®f Oi8sJ£h£Ì„3¶±L8cÊ„3­‘ Á–H¯äÀÛ €á>„kb¼‘Kþ8ä’>Îó¸dð7äMvA<ë‰!†®É>ˆå)îù3…èÄÅTÜ'ÒMµKÛN¶C‘µEÓQûPÄ5@¢°üqN5Îÿ1pE¸> CøÉ|³!♫ŸŒ÷Ë„n,ëÌú4 F³®„SYgƒ•q;Â@HA hðÈRoÍ”ýqXªv¹Y;èÙA ^…3¶b´· R‹3T£¶4‡½™ùAèbˆ Œ1föÛÓÐÈÏ~{yÊZ>3Œ$¤ Ù¸šú€ÌÑ’0OñaaN|Â<5 !¤P‚*?R0î-—:Æ­åòvg¹$mÀ(ãùöA ©ÛpSêm)ÐeQñáEGûسˆã9ׂÓnjÁi2µ ·–Z0ÊÔOšØ<XS?¥m~Ë»´dð!µP2±t1Ñž¢‚ÚTáÌ[Á¼Äj7qÓŒŠ÷ ù›èkjåôê_ÐoqxŽ"ID©ÄøPǧ™,‡Ñ¢<4ÔeÐ[Ô€&€×¢8Ô9¬ „+Óh<XúÆ-On6†£Ý,ˆ¨-‡¸â1&'pž®jpÚP «fºPBnQSBŒ†â £63ÞJVƒ§/D­M1ZÜÂ)@-rQ[—*œÞ¦ææêÄöCZIœ[Rø®R­›¼2¡Xdô"í»ûM–ƒ‘ŽlºsŒÂ#Δ€Ž›;ñMÌŽÑ9ÑBž»±Ë˜½ _çÑi'ĶÒu—prpô¦5æÑ»˜Ö$ÄmeZj¹5àýR¦uäûv)%„Q¢0ñæÝÂÔÀ¤déB Œ3 S0C3ìR9è TëÔÅS[â¨ÂbtTœùœéÌ0ž(,_oG˜ÏyæÕ¹©‹ ?°™Æó´†8ž—üœ›l¸Å¹¡õaŒxö#F"1ýÃŒS“>•ù-mغŽ ’ƒÃ»–Ìzv‚SQÖÒ*’Т¶ÞÆ6)mI‡KÀ ×ê–ºŸ@æmK WW<"¬*(QLµ!„©IŸÆ\¥6âÝ9AʌĨÿ¨ÄTëxÜi´ã¬AîñNÖ €HGëº žwí[tXý‚ó-:’~Aø<ïgK#J㈢gs‘ªÓcOÖæÂWilæ¤]*S,IÑ©Ýîã»ië®–FäÚŽBD SˆîÞ"ÒîK˜à®jwŠÒXžŽ÷yZªœªè^²B¼šò”h„Ä  %”…èrŠ/ji‹¢mmÑ„#Sƒ{èF&÷I÷í¡•OÌC4*‡˜‡ævÞ°I7‡8šéÒA×M:Žâ3=§.=g) )hý»ÏMXúíú¤2Ó=Ô€xò€ê¯6ÅY¹âÚ¿cvŠ,x.l‡¿·öŒ,8‹#)¼aj‡`*A5—W€¸@ÑÖ¤U!(ž±të5Çq§.àΊ&¯á®ãµÐVr%ò¢ÒÒEž¶´k«Î^smòZóX44/ž*}‘ÂkŽ$M\ªE3<´>koªWv(˜Ì˜LË“áŒòY£S]RCÁdÆd²hžm G¼Q#C8æ Á8 S§S&R%EîyÍ)¤ñ‘{²hªKpaŠbLr ê"µo‹³Ž¹ŽƒÕ¡ÝcäÕL™ôì …¬‚3 ДG†û»  4­û8¢·hî-{oÅd±Ãšœ„z”´üÛ¼ I“<¬ýYHæ-^RÜWð¾ZÉ2Yk@4qôÐ5=$í¡†,„àIÀG2¸ÅSw>„1h*H; $ òªÖÒEœ¶ªUÏs¥æ¬ÅÔ‚±# '.ÉÍ-Q„)KruüQ¨®Ôõ£ZЖÆ"¹£ç-$Ì­c¯êÇ”áÛ[šã¸Ksª—OÍ ]…Á+á„ËJ*Ô¥±™%Š7iLÐÖͧv(šøuóZŸÿJ~.çÆHºmG{U±TºT¦h’æXÚ4Ër!Ht}8âæl[@–@nK{}Z#‰4:Ì9úÔè0ù¸c£=*H9ZjbŠ–š’¡…î.£ûʈŽ2’—Œä"ÃûǘÎ1¦gŒãcùÄX1º7Œê £úÁHN0šŒæþ"ø¾èŽ/º×‹èòR/JF6¿=‚6¼k©¹\ˆÎ:¢§Žâ¦cùèX:ºwnæ"QcÄ+˜y´ØB˜˜ô9Ì•Opû0"«QîEö!¹L÷ð—²¥Ÿhl߬vÂ+Ù§ýLèðÚRŠ©ÑÆ\JŒöæ…á©Ú£F¯ŠliŠ^)ÙR·zâÓÅÒÂâÁù±h;÷ç1½\Š áº#÷§`…;M~Z€(—E˜¿¢9ò‹X ”(”˜±Ç–¶¶,ÿ¦ ߃©)ŠsSÐj;*ñØ’iTÞ±%Ëí´c †6_±N=æÆ6Ë¥n£sIÓù"©‚ó.Ë+F=û0ÔGRm;XìYıœ ñ@®ð™-б´¥U2JäJ¤‰d˜CîEj.Œ1l•1©Vu±TºT¦X’Ÿe¯Ò›ñbÉz %á²[DèÚCÒjB0Kè ˜µóõèEóg*]*S$IµÁ˜X¯s[ Yµ#™R«ªP"W"M Ãèd~¦Ñ üŒã’ø™77*éÁÍ·¹‘¨Š®nã'úI{0Ðô ©=லüØ=79A„Ï#ÀÚ'`'¿‡ÚÃx;ÿ´‡æFÞé·?ê¡:G+ ;i…­º[šE&+Xpœ™bˆJÓ˜” ¶¶?">is kÛQž/zGLݯÎ0J«à©)ЬÊJJ¨Ø˜t¤^¢4ŽHzMÞÞ !Ô1¡´:õ#`h¤v°Ø³ˆ#9ëØpb/Œ1œu|9¥ž#£àt©L‘$ã¶q-8ÆmàZPŒØºµ`(²û\@½¦.‹ì™Ú V0*F D‘š2îa)ò°Tˆv“gðfPƲ5ƒñ¬®ª<2&xÉ;‚R`†ô#U *;sP *7sPM|fæ-9l%lDþÃÑ ÌâᨎáÜ”ÇWÎ"äñF“ð,dë¦c Õ‚ (! $Ñ $-]z¥*˜™bxKS2[QG,=æƒÊ}@YfüAFaÞ ÊH¶ˆ ºˆü ¾±éü„‰\‰4‘ é=2½'&öÀ7KA<·Z0j²ŒÊ¬±>•sŽLznc­¼{ ÚdÆd²XžàBjÚúR”äwCÅœRƒVá. ¦&ýhæ’_ÝwÇ,-KØœÇwfÇR%CI~nMßæfúâR¦â>mÛôY}|Ii™Gk:w#Æ#ÌÜÁHFŒDc$ c½’7„4…9_’)f†CdqX¢à*Øû²!j†Ceq8¢NisvÀº¢ UŽáhÉd«L).U‰Â` ÑN®” YŒFaÊ1ÞàM9"Æ9¼)GlúŠ×國V^X·ÏLAsª¤‡%ªâ>9#YHÅzjÎllLþ-ÿ)™€Ðu´Ìg$ú¹u5Ñ'É­ë‰;KnCQ_¦\5#Y‰„`©øµhCÇç¨}AJ>oïZ×rá>ïîó~a=ï÷W&ÿû+“ÿý•Å?&²qCAL”ㆆ͈ÇuQ3òuQòuÛóñ-&ÜŒ-eŠC×cp8¢`Ù¬Ë+-È“µD¢ s8Òb£¼ÖeÅF|­KŠŠþÚÓ5\)]ÕÑ5 õΛ?3eLQ¨R GNÃ}¹4Ü—KsåñWÁ0l. ]‰Baʩ҆¯faˆ‘ ,-÷u•ß×l?؇¬Èâ°DÕì¶V³ÛY}æJhó¦,²t)S$Ž$ƒÄ“¦Â긪º —ÇÑÒÖŸÙR ²Àài¹Í¬å¶®–ըĭàÎ ª€à©`½º Þèk‡·ãïFî›QT7¾Š_ŧ".É↎¸”‹J"0nhyeÍ O@ÈZGKWÜrX—扙¢PÕŽœ¨˜¨u-QñQëB¶c¥ÖUp)ú„ eygíïöaÊÒü¼Ö°ü¯NnŠ;™bN^ˆ<2/èœöÜ2ž0XF¸û¼TI,IQÜ&7T!„xÖ“F€®Þ“ü,-ޤZöØFÓÖ¶„:ÏîóØsÔgt–Ñd•%¾nu$–$‚(n˜Üæ1Ç·Í™FŸÝ LäJ¤Ia¨–OEu†DМú ¡U¨uHD¯ù =$í¡†,„}cØ7„w#8Ô9¬1„á>yÑjÛkMz°Æ×óX0™1™,†g^up¤*¥n—¦Ñ\µ)¾VM‘4¢4Ž(z]6lv”w‚V«aŒxê#1õ<#ÁÔÀ¤bLäœtü‘s¾‘Dz©’X’b¸]Š’:²[šFóÔ¦øš4EÒˆÒ8bèݧչ$Ö¦Ç6šª±Å×§-”0Ÿ[š¢ébgs÷uM›ÌÍ ã™JCB­BqŠvbå9mxލ B4i@`8£n}G~ãzl£i[|c°…¹ibÂöѤmàíµŽæ;Xã+v,˜Ì˜Ló.Îï¡ "D3ÆC×M~´>’¼Ç6š6Øo a¶W…íMáyQ8ގׄì-!{IÈÞšW„â ¡xAÐÞ‘g-q•eiMS›â«ÑI#J㈧'Æî2¯id½Hêbìt%O½}ÞÊÑB ±Í84Ó¾ìØb\º…‚“S”yE3ylã©k[Bý›B‰\‰4Q kµ”8ÐðZÇóUÖ¤ÁF— ù;–îÄ*š¦¶BÑ‹?÷jÆ0þЫÉȯ|<))ì6ˆµE–Wõ“û«ü?æ(øÑÂýub¼FÕZ¸¿Âÿ[GÃû9 (·Í³º=/rXQ¿>ö¬€I4L0”»àRá‹áëX—Д}õð"/ÒsÚtÅc. ü*?Vu—Âõ‘Îa…t—‹»8¤I )ÉEb‘‹”¤(7ò MVC›—©:”Räi›ÝGö6ƒ¤u„)B¢búŸ5 ,ö,⑜aPVS£)«"ÊÅ4pÇpãD'ƘÀ9vCœ—sì>8/ç¨ío#gýÛq¿£Íü¶ÓãlèñŸê( „>æ3¦³‡¤=Ôà„°žÿ- „zo°$ï¶0hBh]Ä}×5iS h I[†Ÿ’=#Zo7ñ¢ÈŠê:žeÿÎêÛMÎrâç âÝ ñ.Œ–d ‰DL4Âp•ýÛ F<à(É»ªÝUè~q'J£ã›FéGœCM«/S_¦øò‡#°ök>H¦ðá„­nzôùa8ÁûjåËTûXö»±s8¦Pµ7f§µ÷'^ä~úv’öúê î²÷d¿€þ/ }Õ×¶î›oûsÝ sÏÛ­Iî¬yg¹|¥ræ]\ ¨¦ˆûÝå,S¹ »×½žPÝ_üþºw–üºöMü=«cï®ÞOþ Öˬ~m˜Å„cÚ4åóŽM$ˆË¬ƒ›(ܽšÄ”ìÐÿ¤ï§zÿ›¾ÿíÞùFïªvW¡ûiüýþôNú÷î픿LE|™:ØMþÞƒüì>°ëPBuñûëæK†„4MÞõž®u?(Søº×ívhî-{oÅ»Šý½ýú~±wŸï#þÅjä‹U¿TLÚÞ]¿”©_EÂíÚí;4÷–½·âÄî|‹w¾¹{ÞÖýDî§o'i_ âî!{ï®{Jö èÿÒùªÿ¬«=ïøŽ©àöº¿ŠÚ~"÷Ó·.í>¿Ôm~K«ößT~õ¨}y„Ïh@¸³ÿzV¤ ‰ýwD€ÓðÚì¾èä}DÊŸ€¥=޾c'›PEÝ·r®¶‚Sø1p"`+«ÆÐʱBNuýpK#BÍ<f¶(âÖM8«oM/{Ò´ëÚâÔw¤¶AI0 ÉBÖÒ´õ¥(YJ¦$‚¬¢ÍMcfȘatX ‚êR\c‡í> {¤°–{Éw. '@"§´$Jð£`…J2¢åôMYGœ»"e‚@’¡È‹üé™°gEdž$`¢Rúl)Š0nè‰&n¨‰nháÊà*`‘Ì[^±¡ÄF—eÀv¸A–Ö^òöR†u®oiA¿UKs”mN»¦h:i:_,Õü³ìÜ*ùꂉ2ùmDAI°(É€‚–cþ=r'L+8(I»L 2;L¤6°hâ¸+KŠ3Á `‘'\–D––å)ÍH ¬1‰úP2žó“Å-0š&öäqN‹1‰\‡bé£N*ç”8“Ë ,–>òds$Å›t®à…1&¡– }°àE !,¼z,ÚººÅìi^ѱ„!‰q`èŠvm¢Ñôí7Lº–õIÒjÒ6½åÄ9÷I¢ÆJ,²À¸Í@aQq[€ÂB"6þloê'Þ}Y Ð…(–ö£„Ø¿±.†÷à·ôÊz¿º$ €Î¿)š}ù¹èo,5A8š6.Ñp ¥›Ù—V…m¦_ZÕ±ži…öõ ±¸àÁ!I‘8±ËèaQe»·',h†Ac1ÈB¤]^rT¸$ €Ì¿nòVÖ@uÕkî%~(’¦]]{M«âOvSóàÐt98tQâxÎ/*oåýBŽ&Q$ŽßK¨üšà1†\Ä{h]$©uwЫ38qº4E:éUB›§%«qHÍ»QÙž×Ø×ŒÊYÚíÊ C„‡$p† –¨.-ʺ…§–ë­ ÃÑ%p Ëk'²ì˜fYÝsïÞ†¨,K K‘ì"Ï}ÆV4…!+20tE:aÛ%Í:Á’´Ä¡iÒÉßCT×ŰªÇ… JQt·´íŽY™ ±k ¦¸ƒGKTi#îkÞ“5Å ©2t!ý©Êy2\š…@–`‡~âXÜšºe‰ `‘d X‰Æ" ŒÛ÷s#,$b¿Æ:y¶¿q=ÝQ¿‡ƒ~Ç<Û!Ÿ¶ç§TQÐ\'^”‹@tž(Gúx Iƒ'ñã54yÛê䧴Ъ^‡Æ Y!2Ú°¨Ó9SéR™’H’—xËMŒe&ÖòkY‰¾œ™yaŽó™´-iac-­e¦M^ý"¯zÑV»vZåÚiukU-XÎ)ªGÆ:Š¥–‚F’ŽW—»¢ÅZÉzFeYù{ W‘P‚ w¡%´Ïæ˜M4’Ä6Ë̉1wœlñ„rv x©í%q/m»ˆbìxˆÀ㋤äv˜y¬C‘$rg"–RY\òì9ƒCLxq„1€$¥ +¶ÐÒ“¿K<Á’8à ©²d! ¿‚$ƒêÛ·Ú¼©AÂz/PHZF”=䈼ÛI’È»d‰œ~§Äs•q9ö$`Ï#/[B— d-ôÆ^’ âFãÝ^6»½döy¹pBë8!uäPºBÐv=㆜qC͸!f¬Ð²BÊv %Û#„¬IÛ®Ð)½©1U~”’"¡EU1ÆUŒñuµ[¸Þnazû„ç5}ÓÈaó5DÁ)R(¬„†PQ¬õê‚$ƒC]§&Ç’ã iq†m~¾O;ÖÌÏäôyŸ3! ®»ù!*†Éi Ž7ßãÍóó»Ùll‡0ƒ¡ ÷Fgªü*sfê NNýd”)ê°Ç›Þ¨–Hfg8­!£·©QÛ¤hmn”67:›•½S4öNQØ{D_3£®™ÑÖœ(kft53ªšMm£…©ÝŒÇÇÝ„“:F´4#Jš½[TônÑÐûDAk:䈙¥9A-f†·Í‰×&Çi‹.ízAXæ8ÚÊœø¨ê¸p2ó…9޹Ž)ç0§“¦ó%PY[4'b+`!WûHƒ3I_¢k"OØYkN¬µ&úÓ{*öØKÁÞCAÝ;AÝ3AÚ+ÁÚ#ÁÚ¹'âñ¹6?NiUEÔ(\«L ÂÜàZýCDó¹6Çô|–SWq¼¤·"â8J‡[È8ŠçµIŒq¢1œÍv׉Q,G³i$’[Vßd»8#ˆM-bX‹xJ*O†‘cGHe‹ä·ÿt¤·Ïtd±ŸÔ!S´ùSZ–øå·Œ"h,‘Mk(°¨ä¤CªÌ…îÂEy´FÓnåÕ$Æ®!Ь2Œå9(CPœÛİlÐÄ…™ P‹®´òå‘Ro³~åK|í¹E "EAä_é•ÈÒgE3½RxÕCzżK¦QÌ´E4¥òL ,­¢¨I+d§­ "=">Ãh’øÇdRœ d¦EÉI*–I}½ÆxS2‹(>Ú"–R-š í>ú-c(‚%á>‚ÙãwH†ƒA,±ÇïP|^bù¼Äòy˧Á5­×®D£7f‘å<·Ãta³fÚ,Qf†‚HQ9F7øÈQ‡]\D¨C+"þsäåÛÙD¹tF.Ûžœ‘ÉcŒwodòãÏ™+U0evé5Œ&‹ž]N‹d¢‚ÌW¥D·VÈ6š.ÅÁµ(Tp ed%S^aëxÖ$÷—.íó˜ÅÅyÃtQ$—XÀ4ž)Þ96IÚ¨n2†¯ÌS°àñ<âÏœB—ÂE íNó˜ÅÓÃ9ÖTQtïÚŠy4c¢Ÿm(ål[Z¡xÆ»ÝÆ‚^’è½$Ñ{‰¢×šeCh“ ¶AßZÚ ÛâÂ2š¤qÌIKU¢1dM—âN\*8Œ‡2²’±.Æ¥UãhÂÆ¤)œÛ\tuÄË~ÒSk,kc£Ý·-ì ¢´ mãhÊÖÏyœUDú4g´öÑÌÇyIŒŸ3HžRã^kq|ë#|µÊ½æñÄ9©ÂmѤúöãY£k[í^‚ajYײ猦;³‹fjíS^ɦ쯴ְ°Œ&:Z¢êÓ˜um]¹:¦X²`Šc«Ò[SšëÂ2ž«JŠn¨r89WÕ.Z["DS׉ÚEAh.JìIôñõ_ÝjÅ/Lã)KSRUC‘¤:žâ˜âk±7qα/qÎ5vO¢Ÿ-òU1±Ârļ&`§©*ç†Ñ$Á_]q£(—¦ñ\¥)åQRE’jufˆcŠ®Õ(ÇÂŒb”caÆ.äX¸Ýúªèž×¾8/˜/ïŠêœže¾L´å+ýùáµýüð|î)é–çÝò9´EÝ×OÇ,­Žo÷yÙ„Ê4 Ó[V4i—Šêð\÷í2"–}Sºj{çþ6/¸,îFx¸h^¤jyÊ~ÌËBt$De?æˆ±š„¨ áÇ ±ouzC“Ë@LÁÛü’Ë™±œ0¥M“Wç"Ëí>*_),ÀÆûî|}øh¾Þ 2œ&½/©d„ýtŸ& ]‰K«2™¸e#º§³0(‰ByõþãÛïß½9¾þåýû7¯?½ýåýñëOuJ}‚ì%yÓ-›¢Ð§ÄËüýøêõë7>½{ûñÓ¤H–§¹´ß—šDnzF)#†[ÔÇ7ïtEå¥è¶8õËâTï¨:¥»¦LŸOòU¬¦Õg•2-Å´Ð EW!Pÿ×?ÿñ?Ýoÿùÿõ{Ë?ÞÒ?êÖ¦­ßM¢`möúunS S¦uÖCÊÂtYUž~}zõø¦¸¤¸«òª)˜ýØæï%dù|x%òóáÿìs¡Ï½n•·©¬[bÛQ‰F°-çÇ_~} íçÝ/¿%]Ó2ýü<-Dv7Þª)´1ùIÿó›¼jönÓ8oùpÿ­/õá;/oçÝ.ãxê‹òÌ,)Ñ NÑꃕRÏõS™Ÿ¹8NÙö³•â ùúç­0œbáïÕ"Õ¹AüR5̤`õÑJÙë˸‚†Sêdб,²éOòŠ{n©Æ)Ø|´R¶ì¾ŠË3·hƒâ”¬?™ yäHe)CøáC<žå¬£'Æ^¢÷£ÓbЋ1öªý»¿9¡aÖºù[ €‚£¬MEHýù5ehSŒ÷™U%‘ŸVUŒ²VeøžPUÌçMËØëö«~÷£·¦cìõó¥~³œ¢JsSˆ;ÙSgìÀ“s•óÂ3eÔ¢ŽÖþZ?ÉwÓáíášw‡NÎ(궸rðvp‹<<Ý畼ÈÚÒC—ЇÿxÝò.=Ù'9?y˜ò:çf”(ËËÚ‰ÁÃN~6åihÇ=?¿ùôê‡WŸ^ÔÇCùUÍ`Yk[Èû_¦+øþI0À¥±‹ýûǺ¶{}XCëÚî÷Yޤ‡&ç¦hò²€,æDU€Uöáí‡7ïÞ¾ûþ§±˜çî^ 3º¼mZXh Ê,`­Ž”¡ngφÆI\œqøÞÊa>Í”èOïfW=ó‚ÀNøÕ %èÝ3É›¶ìoZuÀ\YtòåÜ·³±¶FÑsM˜»ÛÒL—Ÿ%ÞçeyÌ?çY¯ÖiÕ¦P%™Ð=7,he?‚v°Ñ ÔuS;ŒŸýûá÷{)à îë^Î&ÞÊ‘^'{?ký98¥"kótm€¤®šs)Œ¡þgzγö¹é¨ÖÒü;ÃÍÏT™Á9\E¥i-Í¿~Ü#xæý>1S¼Yamþ?ÊÐvêç qÝé\º<ã}0²ušýq3dƒ`/ó·,áÎÜ®••¢ß ω6O´ù«÷ÿy|ó믿üúñø£|W¿ó {ñ[#kô©nÏF %ÿú—¿@¯ÓÚ{¯Ðä@À†ÕåƒÒWÞ~pÝ?Òº)Ÿ-xDvéÕÖ&X&ÖòSz•gÙG] }ÈEŽ#Š*+ûs.þ]R„|+ŸÕàJ™Œ©¤ÐEñjnßø/ä@énjgIu³£Y›Ž<"8ða‡N8h:ÿñ­ñèÓ[ʿȷxì+‘^rÔ Ù˜&Æôwâ ;@óIWN}ù#v5$>HÕÊÄáÒÖ·é«Â|uMžEŒ‘›¶¾¶éíx)k{*ªx)¤D!½2à¯i)òݪ¤À"û™L`pÿ8åÝS.kÉÜź1ÞP!ò[̹I‹v354ḋN[‘Ÿ´ }žÄS}ä"?WÙÍPe=5Kïxž cËÒ¡š¥ù‘sß9#7D1;S‚ü,±4øM/vÝ÷§ˆÇi4× ú£0†nzøøð×þôUú˜ej—Xe'*":ês~ê¯×a|i!’â•ýè .=Ø/¾JŸÄQ»‡éhæYRY^ɇ¹ÖEŠ;õÏQZ™¢žD235ùÓP‹,ßü8lcùÊü£™§–®¦ãå'HxP÷gù.27*ÿœÞB™S˜ÄÂØò~‡Â¿~%ßn“C‰^|sx ?ZEEù,1‚‚rXŒæwÄ[û§* ¸¥×Ü·f®lÍRÁ«ß?ÞÂ߇ïáo¨ÝßÚÕeÁ¤_вz ?áx[3úy=šþWwáþ.^BpäÃ$íÔgòîçN+q±~.S£’á!»¥BÛ”jM‡á)^Uþ†Çù|N¡Lmú^þzø¿þûáÍ禬å4êgýJQ¥¸g©¡Ë™pþÐÐýÜ) FÁGëCžQ‰-älºUa%b_CÖ>1öÍ߇ŸÔߪ l!7± °O Iˆ±—ƒTðnœMêW;Ù…?㺥6µ”§ÏkÝ’îŽ`ˆŠ”÷L¾D(<Æi…öR]ŠH,À÷æ(è–·×ü|øð«€0™q¹½ÍeÁ¢ÈÀk‘áWÇô2[¤ü,Lm#°|uÊ%ï°÷A­¡þåð›µò]©.¥i‹Ç¢Ìe/“Ce©~RN”…‹Ë™½”¯i uLKʉTþ ‘S; ’(@T°Õáû7¯ùùÍñÕ»wÀðJþúÛÇ7¿Ú"óÏ|ÿeTp)Sö<à_ÿò¿€·¼»¯ÏlÄ+9è­Û‡¨ö`ªÔš|¯ï8ÌíGãàÈâC4yá[2Õ__ú+½ôòAý~x‹/SHBàÌ_˜öðáÝo?½5A“b’µ°Õ¢‰ÛçmlÁœûö¿÷í©¨Î Ïþú}³&Î}û]$AïÓÇ¢n!"ÜC#pîÕ"q ^› ,Ù{Èù& ˆÀµ0\zGG£ÑWãJ oÞ¢pd7ò”>Ç ¿µÇèßcú½â£Þ ÌÄè”èx/+´\ "KRÉñWû‹v=é²µ•)³•]pŸ“Ê2¦Z•*à0l†Éº¢Š:Ól>[Ú:¥ëÏÇùž$Ù‰®M›ãIœ7Zœ¼Â Y£Œ¾·àðýǾ:µ²Q›•$ŒÓDÛéT[ãú¢ÈaÕPõFõåkÎòå3îÍÁQ"þífàÌ$¯¦ ÊvJA ¥…)§Iq)2x´nÏêé •ŰBe|zGRçü"Çíg5nI‰³:¦ÏƉè;-ÎÉÔPÞßC~‘èvNN¾UynûzÚ€Õo_©9Õž¹£hî‹êsâ‹êG®wv*Ó”Ö à%¼a®Ö~ü¤"`̓î^¤É€ƒËyä"ÜaÎÕNT¤]ª¶ nlúH'u£tº´=AhE–f÷ö¥ˆ|í*Só~<¼~õú¯ö};uÂ~øNØï¤('ìwZjxd¢.ó”°—LðI·øÌQ`&ì?üúæÇ·ÿcZlm¨ûŽS”…˜”õéíÏo~ùíÓ¤0ª"ùÞ‡¿†1œ,hg˜>¬-„‰®Ö7áµÆ¿‚|[}TÁÕp%Ì»N[]G\ËZˆÔŽcÔèÁbØF› ¨Ö¬}ÙHZÁ FoŒjFRŒøÍÒ[„§q–ºqN€n§¡ûaFWå,[Þ–3áv*ûÄÚýüþÕëÿþñøæ=ÜӾʠñiçÑÑ8ã§¥˜YÇÝtÜ£ 2Û,¡MêÏ ¢<}o*)$?üòQjÒß~1ÿì¹àŽ^°<¦c˱SP‰#_£‰ÂI,N8¯ëBuµÖ¥rh ñ`º3¬x!ÍÁ1/Z“(á meßÞÃLÙ®¹¤ë:¼¡²JTbËú þϧcW£½#‚Ë<%á5˜W‹ýòpiÓ«rÜ-JÈàøÇw**N‡ÜTòÇw*dN$#öO5¨ªò§ÃEõGú}z¿Uñvò `RT.ŸX9ÒÎi} ˜'Ê<ÑXÇ8¬IìÀÏmq‰ytph ó»üZäCÝZމÆy­4ÿ <_‰Ã«ÃêÓO9t„n™QAk`×{Êz>ü--‹³nÔ°z*§µN}Ã8—‹úë+'jÂ]ðw>ÖKþ毖[ËfîÆ³Ãô³9ˆ¨ƒ…Û¯0ðálò£©½üà«eàhÈÜ +=L?›€L×b<8S§ÄaññÍÞê˜ý~Še?BY·½F~7ƒü"–&d?Ú&¸kÄÂéày1:ךæ\‰5þ`Aò[±F½Š<:Xq×¾2ÙÅ#F)nÚróÇdŒò·"‚2m¾òa 4)A Ñáõ®‡± ¼îÍ2Àú{¥Å–Ÿ$Æöl•ÈôðA/QYpµ¦s–•Ýä­êª~ësn]ŒEI\”qâÝäò–@pu_)G„éQà ï3DDéÀ v°`âðõ›×ß}{¨e©¢“C®o_¼8|óš¸ú@¯ šÕ½˜E”ÑÔa¯þN&P“UÃìvÖ¡›ñޤÁÄs;ëàMxTµàŒ¥¹­já!¾÷Ž ë“¤×ú—¤.†ós•ÞŠlî'5 ÂôÛ±KSgÛZÜ¿^ë+e±²Îë‹ ¢–•€Ì.³¥É×U}I¬í¸ü5¼§d3z­¿ùj¶O;Z«!¥GãŽ!…á¢Ç¡Ò2ÚjJq0Ê«¼Õ¯tçS5¨2KvzW= É `VíÜ]S³>ÞwE‰å:ô¿ ªf¡\ƒº%¸%×— ,œ¶ºo§ÌÞy/Œå¨qWàæ—…“ú s5áòm¦r֢ˎàäbr±…õÖìºÉ÷a¡&ÖŽCKϦ®•ÞhîÐj{·»4"¾v)óáWÓubwÞt›Æ|=Ùh'Lp!nß…9ü¦†Î× 8Ƭà_ÿ2yÒå» ,'C;.ò_¢GGo!zV>—ÆKo‚ͬȌ\{Ma)*4%Ͳº—“·´Óµ›»¹i|ÅÇ™››ºø„:x/>üóÿÏáŒEeßb®8 Wˆ«äÿ\EÁùÏåY$ ªæšÒçI]¢ Ÿ'tñ”­ö*Båü”v÷y«v,š­Czߥ‰“+Jx«IkÝ1Ë:\­0p@É6O¨4¥—¼{]|. ×xŒ™wžZ/“Z£†§Å6¾S¼üø¬–˜Ò‡\µM@\oŽyöÝÑ?W‹´ñ*‘W(r<ë,=‰ºo³|ìkÐl&6^6ò ÅþUûOÕ˜›L®¯‘}€›Xßj$±½ŸäìjÅXô·›Õÿ }£ì'ÿùÿ×^öïæ²þãÿƒ‘eûœÏkjÄK\›/ךªx©øÉ‰„2Ö§?rX˜“OóÇ—«ÍMäY›w¸þzbãg£®˜ôÌú#x#Õ0?Öý ÄÁ©OV¼Û ªíc‰P›c CLeí7˜]<ÑOüÛóE»Ú΢Ïä@J¨ú‡­Û!nHUƒ_‡¸ =—^/{=ïM?þ<†Žà#Ù¢”"Øäuì$= 9F¾V¬r|×F²Â½ ÂÆ[œ†Å/§.-*ßW·ŠiÀôA9"µPeD)Pä_ë]‰²A˜Ì ÒðF’Sxl{ð™-(O.Ú"€»õ«`ñÛÃ+xé¾úùí&G4½uf‹›(ç<5l?¨¸÷Ã×’Ó7Ð?Éëרååé(ÿC±›Øx ê+Žâ[Ù¥žá‡­PNǬ¿y÷ý‹Už©ÍÍül«ˆváÛÙÌ*X|\;{óþía<Ƽ}¶H£ù®Su¼ë´KP¾Uža.–‹PÞÍ2]‘Þ›¸×·–ôák©á-§Õ0*\S ÂÜ)w~ièUä\¶Mÿv+$âÚÀ°"n6lÌåFxï-Êf4*›dª"ôÁ¿}x=#¹Jn¶Mv›ÚlìœlÖZ™çôàû&-Ú5NCÎB»óÚz™N¯T¤¯êÎ gwøz˜6ÙK¿1 A§HÕñÂÊ'«_>W5¡DY;uûí|SE¥~•DÛî ò´ÔûpG¼ƒD•6â¾î(ÕíµõV÷ôÊ(>øçÝgºÎ&ËV ŒULß?”@ÁÝ}¿Ë)Äð±Þ-oûçB¨eÍ~l§Ž—ÄÖöÌÊKÖ^£Èª•UØBu¨uo`'öb‹š×:%·‹‚·¨Éq…¦&k–òÔÌͼ4‡‹¶àoÜÌ*X<æáˆy&§'EÄ]ç8ÙAaõ­¼]ßVö .Î:ø%OÂR­•ÞdÇó}Ö˜\Ò^ðKò`HZC!Šâv+«Ã*xÕÎKaIŠW£„hO™8üð××ìòº_Ë _­,Ÿ«G]`…Ç>¼y¥Æa²d[|ºO»þã µÒ'§^a—¥åSåµ±ÍMƒš‡ cÈÐÕÌr•J\W#+5¶í(‰ñ6YÝç˜ázÍá±h»>-ÕT•nJÅœlqý‰q«=ÖAÖ¬h÷|i¼Å)úδAl0ðTQäÞbÆÙ"é–Ö®3˜4©WOAPñòxê³L%ÌMú‡ \é_ô‡Vý·‡ŠkÑ¥å/YžVß^çÍý·‡ßÓ²íeGúcúKåªïêV"üôëÛ|*bªÅ©’×Ί¿ M7þ­÷©¡4éÜÙ1ÏÒr>ë­qõµn6‰…|a.za/Rõöê,Ç!jþxøZZJ9—“39ùæGŽž·+?³‘o -ªä&G¬íóÁ‰]%øsAÃFá ŽŒâ¹…ÒÑœjÂòÏüOUð|?êx½ÞóU|–®hþËÜ^KÆúšáɺ™È×¾ü¼_ÅåùÂÐÚ 4’@J/ÙŽÒ˜Zòg‹dåÏ)æ­³ñÒ±u³ªW>†+Š-ÚžtV1„=ɬ–TÍEš¤ýcyÒ‡ Tµ{¶ ·nÛm’m»*ì'ÕËüs#ç¦:Š*…qhÛoôjüXQ<ýÙ±ìÐÍoà>½VéøA~6ÐuÎÌ}[?¥çÕ#²Œ~Žò{ÅëWè(ÇP9é‘ß²?W;å‡Dëì>Ëùv:91 pT—LŸúÔ”Ìl]45 šä ²Q#ºu¦—´(‘<?K¸@qü~QÍ3ëE'Ÿ›ì†¶:ôKÞe÷XJŽM€\¡I©ßGTõyã®ÞÒ›¯èéûYýÉ6„™Íæ”fàbÆ3ºŽ U©odsj䧈¨¥kYŸ5嘅ÂEc‚樖èô†Á&íÀ »A=‰qLBÔÌôåW½T=&sÓ‡õP-kå‹Eö&T[Ñ/0oDWèÜ2D|¸Îy ÔÇúÆëïÔ³¢³ý¬•*_äèñÎÄ(ÀR^âí@ï«KOi¡¦)¯¢ºV™ê01’×Âcêgí^è¬ŽÙØ´eÚ:c½u¸nñsFi€±½p}¾¨ƒæœ £jæÙÛRÑûûÒ™Z…¸«kôèÂì"nOÿ×OŸ>|«~~üæ>?~ú²*•?e½pȸƒf< ØBy‡O\2oírQ_ŸæØ]tëÁk&Xl°+4µò¦¬a Ü¥{WõײæT¥~£k®SiidcÞ¸õ* ö„uÌÌlÍEn(‘^ÌÛþèhß›Žžu)Ío•Z}Ó%¨ã‹†„›Ä|¶~‚³+c´W5¶ók 2‘nk ­[F/WF®RšÃ­6‹lŠªÊÏèšÏv…¯¾Ò÷zDÂéS&Í»NMïÛ¾Ùô>€$¸@6ä™Y˜¸Jžá íg«¤ô‰³C®3$7¿µŸâìZÝšõÙ·éa̰´]š:³”ÄÓ±\å¨Î2ð3GÎÂ&Å5†§j34¢®é*SÝ.'TÕÁN›#Csê–ÞÄ*ÀL_cz+ý»®4ècqì(·ziºÊs¼Ù°xé®]šÛE”t¯=¶ëTÇ»ýƒÎ4¤ö(C%ã*W½}h”ÓuÆÃ{KUî˜2Z*…áÙÑb6~¤Û«ÙëaL¾‹'‡ì½ø^µ]¬ë€Ë9áóÙ†êʹÒLú u¨¬&¸—fuEMå‹Ó\­Ý òå¹! À¿Ý'F!ÊÅ8#IÇ3ß¾«'©©X¤kx±É[ÁÅFµþ¥øbseL¦n_£øBñ]\?:Vä`o¬O=Ýs¼,j<ãj)•ýØOÍüÍEzRŸ‹‹ìšìgm¿å¤%=cÛÏÖðL ÕŸ¬2ùCÔ:à@å·Žå2µò³±×(Bÿíã/ïM’WXVáú3ò¤qC¯M­ÄàÅJu<Ãp̬©Í­‡ÿö\<×i>Tr¶¯1¶--ýtë|q…úyPO;ÌÝÝ«7Ÿ{ˆI[ôcfæ§­/ ¬¦óõ%÷[S ¸”O³0 3u¢iÌ„BŸÎAÀF£ì&Kì#íÚ„¹‰±g7GÆ©,˜zåeƒ“èДD·ÁÈLp…•—ÏÃÂ%lRÓW f¸þØ@äD9?!†ÞÌ.À®R$íèV– ®èõ•Ië]?#m­œô¯~>@生¿=T’WÙëD§…¯–Ñ¥ÈöXué$îÉmäÐkÈ”´>èºÉÆ n ²£žÛê«ô>uó;~á¾R{¦ÂÄÈÏN_¢·‚ÖrFªý=êQ+æû¼4áò…\«*j¤»J¹®ÔñèjÛù‰›«sû;¾ZÍ:iÃgëç:¹ÒxÖôÂýdŸˆð¬Z(Õ’&‹S•·E'/`""TN§â¡> qOèæ!ºãźOê+ór~,ÒCóÜÝCÉò˯í¥ßlr^"Ÿ±™Yˆ¬¾È®¶Eþ¨òB˜õ"åºoBµ¤/ýÖI`–nƒš´øV1Ú„xË+Lƒ…߆af\ø–J‹Šä4š(Á }’ï"½¨íÄ]÷-dR…™Lzè…:†Ù´Ý¡&åM-! qô±!¡A+h64“@¤š_YœÚTJrÏ>ßb† §pL‚Üœp 3—0³ð˜ÁZG²ªài\ÌõÜ.Àn¸jý>þ¯smC锦ffò¢Y'$'6íáç"kkXùsH~…ks°pW˲Wiëná˜Ý×&w¿}¶~“+Ý8Ó+™÷dC›>!šÑ"Äïi¶gÆBÖksGÛ=G5Ñ6‡“ ±ô\£Cu‰ aQ¿¦ò Ÿ|ƒìT³Mȵ 1R×Júwˆí°YqôŽ$HÄØY_¦­YÖß8•\Zþ¡šRFCGzUã6¬uͰYqjШ¯±N1z ‰\›«Êµ4xäå‡óik_¥â蜔ÃÔ± ð„+†â•Py|Wyè“ðÎ๟9Ç`úH¹¿Ì̈íô`1œq·yb´ÉVVŸ~øavl>‡·»†xH/h´“}—MV·éõK@VŠ ÝÁÎÌìÍE:»Ö8àS“¬!¨"=Týí›Ë7øê´±”y‹Ï6ÄܹÒÎ3_è¸~ß$Fùï£иG°ž¤%0Ys7éÜhJ³'}‘"õ1×`ÃòÚ×â'*¯¿¿Ø¤ õ.<]»0Qu•‰]‚ƒbÍV¨%aý¥Mób·rÙƒnd?·EäÚI›À V€ œu¢F­öú)=-ýðËÇ·ÿã q¿¾;)³o6hÀ8YGŽMˆŽ7[G™þ»MP”}‹¾ƒŽM€\¡øMØ.œævˆñ6X'ƒm‚‹>ËÊš¿¼­éFú xn°Õ6šXÉ l·¬] ªÒL€áA<‹.¿™íçëäzäˆg0ëõ½ìO¢+:hl¿mŽwú“u2b_ Ë©á:ÅNŽàÔ•Üú8‡‘â{½_Ib›\°÷xnän.sbJUÂÃñ‹1ÅÕs¾ÛƒIˆÞ¹öÝñÿ¬sQ-»™`j`¤¯™ ÌG°t*¶h=:"xf$¦.š¤zÆ(ëo© !,#ÎÌüÔìE“œšða­÷JŸyµ^9úÐçü(»Ï^õ ½’ß*ˆŸ±ßDi0çPç:*Ý~¯z©×ýcÚRBgf!Âí´hR³ 1ŠÖ5¡N ݪð–Ào“Û„—}cžÇmåq[Éac#ïÌðM!Œà§î¹^/WÉÏᬣ®(íŒÖLÐ ÈŠ+ûIPs§W-ã4…İw(ëCœàtÚB‰9åò=Ô*ª~kÐSQÁa¾èYùÜ.@®Z]ySI‡/ª_^¥ùœRÆ&S+?E¸Æ;6QYÔÈc“çþ†¼ÿ£E€hÛÈW`âA DrúE¯q¹/ýâaúŸ¿ý¼}1jƒÂF¢Uã]Ï´ZåxÝêJøŽË ¶f;­œáÊΕã’‚ëjH}¡…e‘èÅs(·É/¢$¨,`4Žéº€!؇^Ü›ÌpŠð4ìHž*Ð=‚ùð(Á"$5°õ‘¤Èµ\¤®·Yªûa".À¹òìò+¼êòîÞzʪݺ)6¥ú¤ºÄ ˜†ø»Éˆd·6$$²å™´‘°¦Wù/«sÚž‡¯Ÿ³ìø`Ïö¯?¾Þ”WðVŒt[ÌBbôEz>&»ºìxçeþ¨Æ œ/c2êeºIãÚà}ßuMÚˆ÷ßšmH¹r¸öoSÿÎSnɧMS*`C@T§8»|ºoë½ýr£¤²8áü÷+¦¡ŠÒªzúúS.ïtÓÊ»˜?}ã ôCg®TGn‚Ÿ€ÞP ½ö[…¸G…_4ÄÉ*mÒòFªê…iˆ®¾Ðä€SG•Š Ï±l]áï_}xõîç-âyw<¥Ò²EwÍ Ó ñáBÝNιl$ôßšáÄÙ¸@¾ûËwß%ù·ä/ÿú¦ª3îU,²†îC÷B…ò¯yGxÍ»u×áô†æy²Ð6ïÜ ±Cš×ë[¦<†I*æÖkZ†k 7k<t“Êï˜:=kRÝË jߥÏy›|7ÞHTý’«ú%NõKžê—îi•4ÅE%gN3U© pÚCf}½Æé¯Ù®ŠÕWRÚ¶±$‰k¨Êš8YãV„VÄŒOåš2ƒu…÷ÕC¿§ F»Uò}`°|áëåH4ˆ;)²£ìŒ:ZGâXSä^NhjÚüðöÃA!ÿtéðµú¶ß„š,ÊòîÅ!-_|S'ÊãK« ×tµ´W_àÁ2Æi×µÅi^ ñbI(h¸¦qXÂ+´oJ“ )Í#4Bçc™V$ŽášN¸Œ óoï^½'Þ¹ÇöBÔ^bô´Šœ_¤©QùÓ‰ÞI¯ùŠ6çb%Ñ:»ÌTjò²ŽgŽŸ /l78O§èéê$žŸÁÇ·¶{iɇ8¥ÙnÕ¿Úê,Å“:¿ÓÁêcb™÷o>½þåýíÿ[ø½_D k›Œ,l´Ý&¯œïB.a}n<|)Ö5NmsûIöêÁcé~¶ƒ×rlÃ$=^óçy±j&‘ÊD*ju\ ¸£]‰­Ur:0¿}HÆìj¥å¯²þ!æÏžµ®OçùV‡Òè#„Õ±öõe6Q™ü÷×7§ 3²Ad(½†ÇxS4¦ß`‹²îy¼"c¹%GßgW«S•ñdž1ך„–³nÙŸó¶µ[ÑV˜]Š6’eœQ­unåc7\ã'¦í©èTŒ­pî/|É  ¸mY—pƒRT;q-|”Ô÷öH.ð¡ÌaRêh3{J×ù ¯kê"Òª‹kÒø]–>‚ê{]i ä?Óëžjœèýôþ7óMW¦y¦8Ý˩ļyý¶^Ò| oˆ®¸éœãd˜@Ô¡ÀÐi±:•/òÔvò˜ØRÎç„Õ%+„ä”(óho“ßÊGr¸F»²ëëê÷ã›wEÕ>˜ïÖ©•p)’˜kã§¥®ÐÑ=ˆ}лª§HÉå[Ôð\£÷P4Í3òÏŒ¼Õ%+]ÊP\«º…\Ÿ×6cš’Ç-5¸]ØyIWÍÎÍHÕ᪇®€yKô¢u5æ¼|®ûvH%ï Y¡*w*žWE‰¬+‘z¿¸À} ›Ó"¨þR=º6‡'±E6©™ºbêÇζÏ{Á)%{è·š²R×|¡˜C]¾Êp..빕õpžžÃ)Qê¬>ù‰NFs8åݾö’é¶ìñ<<•[gØ\a+,VÈFÊœK§£²ßà‹-ôc}AUÅÌÈWö’é“ÿ&÷Îõ\ ‡} ›Oy®žï¥Itµªkb>3ò1·—hæ%ÌA*=™nJy#êÓÀœ.1ì7Ï ØA—¸rޱ&¢½i˜”#!;Ÿç*í—T#Ÿ’aO¦‚gF>rö’éî(åbSS¦F/GœcÁP¦gF_Žã“NR÷O.ž>Ä&ÙÝjòß#¸±Šê^òQ9¾"+eaZCæúžëÝ›ö‹ _E‘§Ž 9øï`H~g·°?ßµùUv>0ww"½õž'ãµQ‹Í¬<2›"28äñRÀÚæQ¥ð$H a„.,&[yTªžñ Zt[ jgJØr…õòÜz÷DV7±—Íö|–-í(Û }P)§ë@¬è™¸¿mé:–qÞ÷ÇÊ¡jˆ!>ìÈÖKçjK¶Ãv»#Oâ\1 3õœÈiëÔÖ08 ø÷<¥Ó-Ù&Èat’ˆ°ˆ¹ÛNìwƒsÍvõˈ4šsíV8?Ù½v0;Sm2ƒ¶ ³rðï;ç£6¨ßõ)úòâÝ=‰uwAÙøgƒúÜûÂߦ¿…"`¶B×nŸx5 :l*C€)k™Êùx¦·Qh¸mÆãQÞsãöÓÃ`ÿ°3"ÔÁ6Ûõ‹ÊF4 ³ôe¥·•½–škZÔõˆÈ^ºbºÆS_hNŸé¦9¥U_ÛšÍCþSÁ×ü\¹;–«Ôá:ûŽûŽû®®ù·Nú‘ å-ç°ËÁ¦»†Ú Hð˜‡u¸;¹”WîÄj®2º‚Hò“ YÍïsYëx¾÷)éuíÚ­p…«|ý´ú"†­s‹ë×âóDGN‰]GT·Ùe„S*º%"S«®˜† ï–bu^:"UéŠé:ñ픥6¯YÜœ[/Q í©e˜µ¹n2 TÕk†nC 1nSŽNé·Z¡JK 9)FFéÁ-wzÓ|Œó™ÑvzÆE‰mq½ï¨t]ãuÒúR_w«Tÿ ßn3F¦Ü[1 ³Ý-õÞ¤ôû:½QÚìÄp…´ºl¥vO‰Ð­D>~M[/O^kå)½Ëkq§—ívþ-òv†»ºê…¼êÅôª¸’×Ê –—Ì&pý¢$ým°¬ksLÏg8°éx‘7­|F”²]rX\¹ÆçZÖ§´Äñ˜ØxË×W¬•‹*0\R¨ˆÈ•ÓÁ¢(ï& ×:fƒXàzOaðm¨¬R’E—ä\½(¾ –R‹#µÚ.,®Ô³8¶0|$›²ÊÇéõ@,ŠÅÝ¢7BQÁö, /'1ÖZÆ«WÊêðæ—þ½Ú³bÓª½_ÂâêɸæûŸ>Ì×ó5¦Ö }š×.H]_µ l>FREs\'±µÿeò—M¾û¯ßŒA–:¨°{Ê!8 ¶'ÎÓ‹5=YY¬æºô^íS2lã…ß-êrS²ÓÆa2ãžUzØWÂÒÈ[í‹Ä®Ã^$wÆžzžÉu¶¸7ÊÂ&ÀuØZlz‡Ôt±0…¬‘D¾Š¦^‚¹Í¢éø† ;.ÙüÕ‡·«­1ê`¾°‰—Ýx ßÿÏÛ»íF®#kƒ¯"`€A-`ÙÝ]žoLa0€ËvÕòß®*·³VuÏÜ$”JeZÛ™’ZTÚåuµc60órûI†'I¤ÄCI÷Åê.'#‚ßÇ )ƒ2ô°|æL}$k¸âK+kÍVÍ'Ì.´¾ÉFiwÛ¡dh4LÒZÀÈÜjÆbL2P©ÎÈ$Œ$‘#Ójzƒ‰lèÕ4ÂŒeø~ÕÏîŠs(QΔ@©Ê7 Þ/1±½šf°‰£-†úå"Ü/P¿\,ürê—¼hÕÍuQúòê>6«à„ eQ€{pùí—Å÷9´ô`aA]Jfo4ìSÅcY†Lg–Šfª“˜p‹n‰q8”`Ö]tÂXs±E­V€ê¸•ƒ[„ ¬°¡.%3f%((2Ú§žWCÚ]p-0+ÏD9ðo«ûOê ëa¨_„îç÷x¸£Žåóûý'¢frå‹H^H¤ $ý3o‘Ž]è¡MRÚŠÊ!ú…ýŒ€Š xêÕ4Â}ƒ§a‚ „„s%P²Â=+_þ‚ñ (ìªCÇ p ´ê‹ Š[…läZ5ŒPçÏéñ]¹Ñœ!*)$þ©UÈ46âiX}f¹<âc"ê­‡¨¯€ ¬63vuO_VÈe-ç’–áòñ¤é¾/;““We…雯a=yöΚGo¦$ WâÍÖJ6l²€£Ê@r'aÙHþvúAk%uU’; Ëž@ò·Ó]’.GÌÄœ0py;2´ç²äºQÝC˜b—rúåžz‰T[^¸¹“kÞÄÒl¹àæ=®9KsåBpÙW>V¡æ޹M2eÌ{Ö3Ë»º/?ùîlT!9axùyNÿ3ÚêÙ]®u¾]?6Åx £`Ql¼ß[°Y|ûÏ!/öüÅ?ÙInð;ÓÈ.·ÙoÅ•Ð8‡³‰ ÅÏÏ£Çó@ä¤ïš×“|›QÝñÜ ‚ ?:ÁGÑ8…I‡´ùm—GØ)ˆ]UWäÑI¨­|A¶,òFÀò˪̻B¼ÝÍÎc0¨"xqBi•ˆaƒ+Ó…žÚ(…¬“¢ =µ·-ë¾ÊÙ±Nö–XtA1qÛ0±²hàNF2nD¾ïlJÆ !¤By‘÷¯m°ƒ]c˜¤rïÊH¤8‘^ymáfÃEjŒâމð¶`"h”÷ùëf 63)ñ­ÆÜÍ”Å:GRSTÌ\˜/ÿ9¬™ým:/:PP «† ÛÈ܏Р%»@‰©(˜0²dD¦áBXÑ^ÖTL(…Ç)ÿ9y™ÇÔ{™ßâc1 ñî6ªÑj‚¸ÒtåA 7•gÚÙß@øRÜY I½}­ócUd“ývzQÐRYƺ–¹x\È’øƒPŒ,ÊNA_}Åó\ÅHFy"¦Ù€ð“jXÙ9‰wäÿh6!“©…š í$äœ6ýÏfãCxÈOµÿå·š ¡'‰Ä?„lòÓ1S²âªä'äŽýC/2šN|¸ wÑ}Š6|Ú=tp£šÙ é¥€žLΔlÐ}ÓF2W<ädÃQ5Lðx:®H¹Š³,él­¬ ®&è:F¨BbŒÅæ¶Ão‹2u ;–}Ž‚¦(˜p±d%\ÉØRˆB7S2!Dp•sÐ" È]Çþ³:kTuÁ‚2ŒFÍžöåe,~¥ Ø©è—ÇŠ½Mš³0 ì Þ–ï¡á HWs#%rÑ_Q0b/åÿŠýCÖWÌô}¸ä‹¥)™ÉËÃJ¼ã™ÿ¥„ ]_æG2EÁ„Š%ãj)Óp"¤-÷¡R5ŒY:$Sq$dGÖ¦`9žecä§Z]ÙÑÇÝ¡ya»]óŒ\L·i›À/d‡gøº†?˜¿³XÄâqœA‡Í@,‚'b. N6áS3•lŽfÉŠ+WÅ ˜0WJÀš»F=`i¬ë$©,RðÐlÄi´Æ‹=¹¶ª;‘ÂoѼ⚦YE6©A}ÉÊ{TÂsãå§í,Ƨ®¤ÿ;ý&~ZwÇ5+[ʦ!Æd2¹sUõÜ¡:Æ/»üƒzϵ^o©{Ï<ÄY åTlƒˆja7¼4 ÅJ´;f ü&%Ÿ Åö Òy }%°0!€« oQ9q´t|Nû…m¼ŸL– Ì4½Ñ[j$°^-'¡…g¤EŒ1ðAP‘±>[:á+ª–Ÿ&‰t—Ë"„¤Qßר†pÌ£Ö¥‹\“A8{@Ë\pGÐæ3Ÿh—Ï­@ˆŽ:>×òÙÒ› Ô”Œ:ùg«Uv6p"O$Ú9º ©0sË_O›²«Kv»t%ë›á:H ­ƒÌŽü[É䪩û¼bA"ï.ÿºúe<;atj÷]¾-8É` ÄTÕ]ÆFÌ2axá‚dùs^‰§CD_J:ˆ³4˜€³Áˆ³ª7}×GzOSUÉÓrbh%ؼZk4¼ÚJÔ)~T.¶ lÆe±PÕªûA†F–ï›°3¹·hŸk¹¤"Äqù5d‡ZLÂ(aÞ¼ˆ°‰¤º|ƒõÅmõe”º/Ü·Ñ”GbÒ1| ã3gt%n÷y_¾ä¯QlgF ™2hÿ,“C(çÓËâÔUýkš™1À.ˆ¸ÝÊ|̧ÇJ gŸùÄ9Ȱeú¥[¦šn+L 3v,¾&X¬hÏu§oµìºÛiî‚p }­fŒeÁYëÇ–÷‹Ûv.$§^~°åËÑtP4ªÏï$4¼Çuä"—”„ƒ¹Úç‚)Š#)òC™Â£ C0v“Ú¼û¥‰ÙŠ¥²nlŸ:ÀƒÂz bhN†Qá˜$7ÞáTÄ4¢:о—êF»Ën@Р³*¶uYoÛ¦Šx[LùÙÍgßû«ë¯ÙŽüÖ«–Ó à¤/Ì/9aØ´]ßÀŒw•Áˆ•ªgp”LÆûi°›„žÍI2ΤÙ×Ûÿ"<*D´£ìæì Ês— "C ²À:Ï(ß@ªË>ßFÁQn¡w•£]ë0alR_¸wØ÷v@° s‘KJÂÁ\õ烬dñ4‡GÄ“9×dAXS·:÷axú<йc.) sõ8w N³+“„Ú(†¹¥ÑûS‚pøyš¢x£RHQj•PéýAD ¼”›Ç¦yJ^ vÊ@µ2V€¿‹£?Ö±„µ§¤åO!Î&džl7‰væ L—Ê‹‰d×Çé¶?׳HÇ4ärv÷ù&'åȽZÆn{ò§’ôM=³óS]ªÎ¼É¨fwT"[1܈Z·žŠ`·¥ù…{–žq8)Ús7¯)Ι-ˆézs©È†§˜M OG ¹¦]Yἦ÷r¸»é.ÔdCö¹§æù&Þ‹&KÚšÞ‹Ïßi*mz´G»IHáù:L… ¾¯ çÝq¼•Ìk£Âs_^>|ɾ7Ô±y×WL7e!,-âJ@ÑwÑ—rÑÔex©ä°´R ŠHa¬DÇ–¨LÞ 8bKÂÙ#± ÈP}„ËYiVéj‡Å(¦@æ&õâJD½e²Á•BÍ/uD±w4îÕ@ˆš¬XŒb bnbV ”«ÁžG„“ ´HØíy•z„ãÓlG»ìaØ›¶¥%õïwrï6ØÑÑ»ÒSx‚KÏJjŽãÝ$s¥É"†«¦?sçU'ؙШG!ÆBHºëH7ÂÁÏâ$ÊQDIçf»]L9¬8>ÙóS5¡µ`–ëGlI¸ëż⫇|m0yõ0Ø (Õ  z|•O'FV!×7(ŽØ’€U¡ðÕ£&]Y4Ý6Á _›-ù¹æèúë¯+–ÝôÇŸéÕÌ&âBI{ù`[Jan+£ÉpŽB6ãqÜX’ÔÅPý£IÐé/Í€¨ŽJšãدx—q[ñè íL2€ƒ/Y îÇSô ¨ÉŽŸˆ¦5Ÿ±´ì·ÓÏ% ,Õxä»SÍÉÛèûS~&sÅ™;>Éd~? ×@TËiˆp2œsWÁÉìsú[ü±ƒ?Ui>÷xÌ»r+×L> 9ÜFÝ`<ž’ÎÒ32Èq‚4ŸdÐf LҺ跺ý<®tá½»¶g0ƒ£dpžB(Âc‰UxLâÈCWÌYÿBáîrIK:‚¯ËÇ[¤¯·T¥Ú?öÅáDúø8F.{~ÖF홋»¾2Ù•B~y$$ÊséÚ%K´k“ô¸]­¡;JâIqo]>ÙÆe ’R,‘¥køÏpÈÞ'¢ Ê^°"bªùtÆü)8ö¦ß–)º  ©qŠŸxMjv’ëmó=cÃ~!@,'4eŠå! ¤`£YBp’Y{˜ÉÇS0ÌŠ—V@Ä3bÆ…Î'‘i)>¹ÕHÜ;Ë.6ŒÝ”‘¦›€^›$ÐÁ €Pkãs{/ÃÝ"«WíšéŽvr}mr &òT¾>ç§Côb²ÉŽŸ”¦5ÛX¾f?X"Ò5£Íd°<Ô2áG"sôÿSùef NiP´z‡ zˆ™NÃ,€”x߈”Ÿ‘ž )‹®LÖ†–ÖàÌ]«Ç„L ÓdÉX†´yoÅSá¬M¾ÝäÖ:£gá6[~n ÍÑu,%’Ó¬&¢Âh9jÐXaOñN*ž°Î)”ýíâ ?9t<Þ=U>¼öUÁb³?ñ,âËßcÂÍfb¶ô1NXïš}v9¨d£NlQ¤.…¨Xz;šµŒ>½­Ht³³˜òs+Ž.Bc³dǨÚLC)€ÍÒ_òkšˆåÂ&™X9ÌAÙéʳAÈ7(Jê<‡tD9Ú¼È>ËgTƒÿcÞUôãI'Þ»jê’\p÷Ù„ð¶XX8˜Ê]d7ý'A´— y%&Ã[uºÎ3ÔÙ[y¡6‘ŸMæÀT5e‹wÇ ÀAŽsHG4£êÉ·PgÑ»‡·=&Á„,Žã>àÏr›²JË<‚´ÉÓcÈ.è$·Ì…… ŠŸÉÉÇñv×;º¤‰2o²a»Œ"Ï+æ·;A‚'–€–Ž>àxq@SH2Y´ƒÓ2L GÆ!³AÝn*jA¬– Lg† ÕÊ„S«5Á¥îà72ô"T$S> Hÿé$cFÐÐGêìP¼~ ­Ö` m_?…£òÀ{0ÍWÏdËÏâÁ‰‚×)þùœ…ŸÓüyœörL­ÄGa6ôügü7‹©õùæ¦ø–€|&½éSÅ ñt+-&¡ƒgbsHD;‰”Å©«ú×$ «1?Á¥êè­!)h`¡ÛME-ˆ•ýØ›ÎCޝSmN$Þs&K‚šžâ³áw´¿FƒIØà‰B@ÊçÕ?žBxüóTžÊ$dTKF\ÏI+ã"äHN¢Ÿe±[ÃuÝDW—«LȰ훶*’0U-aXr½Ô5”%§ )ºªýù­¢éª6ÜÎU%áåPç-ylb&-3†RÁ@gHÁ?œœð¨gðOÏáΈSiŽs†œã´àŒ;¹™øÈfÔYMÀ!ÍØÓ™éŽe†žÇtÄÔ‰…¸2ͱËÀó––ƒ–Ág+SªÄŸ¦4£Œ9?Éž¹¦6=#o· ¶ÔÊ"-˃ŸYNF/ŒÙòk6c‡&¶94›xVŠ0%¦£òáMÝçU]vâ<'ÿ­ÙüG‰rÙiSÇŸä]Z0›tæ½;OÁÖ=a.š¾¡ŽñßQ¸§!i¼Œ¶@ltÍ¥K¦A/Î1}—ïvU!nŸÅtâFC~jºšê°<û.ÒÆ°é2ÄÁy ¹²Þ¶Mß»û­bik6f¾ åç1Ãä¥WËk£H|‘´ Œb @5á©C4ÿÇÇ5qÙ $ïw>6ÆIÚWTcÞNu½˜*Ó²cÐû¨É^E | Õ÷êŒ](±òg_Ö)>˜Å’ÖÌšïüÕ×›A8ÊÏS–éK"²”*°µ”Á(È>ÉC:“Xþ†Gvæ [<_ãvRä‡2ÁÝ>¿U,}ÍÆâŽÐàø“ ¸ägÉ+yÄq÷v~—äwü"©¿Qwè4Z,¨îqª!i:Ê%ˆ·+«DÅ´¬FöBz÷ãËjõËÔ¡ÆÓ°pö6ÕÊd=´¸4[àJuv‹ÁáÍÊ)Mý‹J'Ñkô1oл^žž]ό☌^3û—F „Ûç}ù’¿&ã§ÛÃÒ”Ú^¶™ eÝ–eWÕû´5×`Ë_5a{¿`~ û^èD–DêBˆâoÿ F’~ÉSŸf–ÀD½ùˆùï9ò>Šb/ <«—ä†Üóq“O§Vñ‰õ’Õ€áRW<|YöÅcö‘§e÷â4öìÌv2‚aÜÔë'M§_wýñE§ §ØÒiü¡jƒ=Eijam½ª°G«KñØ ­jÄmRÂbŠØ"S`V†h"‚Õ‹™òÌK¹ÉÛèÃÈK+~.ŠÎl„MS2š„bJ{Ñ$pøÕ öwŠû²Þ%Áb'‡¨“q #PLeÙP6,ÕG¤ª·åOf./àñÌÎ/•TCfûŠÉ«)‘ú"ëJ_ócÉjÒ²(ËâiÍ·ÅÜ-­Ù]M’€Lûc/~›€yQ°€‡üµìÖ¼xjE1^Q=gªçNÕ±¡Š¤Œ' CêZЦ_8F›Ewàuh ðpy‹-~ê,Q ,l `Òœóçÿ‡c)o]iJ €»Ò7ó”\ÒG;{aÄÏtRÝË~zK·ò,#IbèiÔÈ¥¥Õ÷mÞVA”„ª—gò¾¤ùÜN{Ú㲈W“„x™€Q‹¢ˆ®y3~ç¨Jcí?¾E½ëNõZuŠ º0â§9©p’§:.øIçEò$´‹òoVÀ-øJy­¡ ¿½I[ësò]gFüD'•±¾²ŸÒ÷–t$Nÿ?Å`ÈgÉFÚª7œ‰aп¤RpG³6 fœ“³eWÔ“¸{aÆ{R›;›¥¼µ¯yî xc›­ñMÏô”Êϧ0?Ÿ¬~>ý ü|Š÷ó ëç“Åϧ·ô3‚‘du+0¾RÇDyHš³n£Io·k:š]?•¯ÁŒ&|t'Îõr»e€3ö7!çÛcU‹àUM÷kÖ7YYó8‡† ¢_ªþ1«úóì•ekL mÊì9?T[‘”P’Õe¹-·çð²`wúÖEÉ^œ†¼Åbµ(¡¥./¬ÛcÛt,t8¿f˜]q웈wÍq–".Jÿ›îÿ4iteÛ•„þÄ.¯ ãy¹6TšÓ––ýsÕ5<@¢ë¼ë3–6e6h¨uù"yÁáó0²]^ïc{|«)?™¹âÔë‹´3žövý¾† ä® Y¾Ò*_i>Xv[>æÍÉ×"Ñý‘J^iÊ €½î{3÷t¬ËŸE)B»$˜ù¸ŒyÊÀ¨:V1õ'9s‰Ê!¤´j`㟎ùrÌUÜæ<%aQkƒH?SñoT’Íl§4æ¹ÌP+ìå°â{t_`êÞ¶ÝGµvD_¶ì7kÏÛ–dËáÄc%p£Ã"È«&}ÝÉgLälycŸÏð¤,›àRYV[™¤+ˆãÃ6 æÿ²ƒÃj~1ÜÀ¬Þô¼ðOß·ÑçBLF|üT(Ky»C!üZÐá°ÝVÄYñPÖu8gù“ŒÏžÐ­C^¤Ùõ/t&¿nóâ)ßìöØ2Ÿk‹C"‘ð•³A"$h‘ôy·§zˆ \p8nI\?47àá8Š½Ð—Ó¡¯Î®ÅŒ[Æô}GÅ~y³®éÈr,r’ôœĨ¯l\&Æò¥Îþ5§@l¨—SL i£¯|ҕ̸FUqŒV<å ëŒUƒþì: Ú¦ ù \šP5}ÿ×7ûú [âk0â#«ªLn•‘/Þª…ÃÝÕa uWÎø¥c6|~£üh2âa©©Œ~?ÖoäÇÈÁ j¬¢M?Îù%d&öƒ™iê>frrØõáÇ`g;?ýcEÄöÏKEE6,Î_Y³6Le Œýþ¹cm•mÍ‚ €·5Û²Uá{y3}/q!Í™Ó?2þG:'²{uÍœÚm~tÃhÅÃL×nõ‘ìö~5nÐe"ñ<»ÝQÿWÖå³6ïÿû?ÿ?¾#Ýô,*ñsÅ6úä“Üý}Ç÷±Ùè›U–5C¦ÖηÙ￳ú"Ž^ŸÃK,ð¤Í ¤”»7?ËâDÙˆI‡øVˆ<ÛWÏ´¾ÓJݳèTbêr Ú­ÿ ­)®k¶›òð4(.ž†xÛ=AþxæFÏ¿ÕÉsUÛKã÷¥) {Eqáwžöæ~’ðÇ37ú]çý6ŒÓ¹=Ôë§ÿK|ž„;šµÕáoè4_šrW.çioîs Q¾°ä=é-\Í’ÞÜ×<ÿÜѬîÖ8§gÛ‰Ü=7ä=ª-œMSÞÜ×,÷¼±ŒŽVù¦gzÚ&òóÜõ¨¶ð3Mys?³ÜðÆ26úYå›’)‰?žf2âeK ‡ÐæqÇÒûµ¾c°áåÚë·an¶UŸú. Ë$4xœÕ€˜>ŽóbÿýŸÿE²âÔuì`¬”€òxl^…Þ±›òñZ*Š}‚²ïªò9ù=&ž_’SeVKÆËóeK¿}ÿ~¿bçZ)6ˆ‹"þRÊ€_ƒ1ר¯˜"94{UŠH0qÎ{EÿbtøìYênËþì¾÷!ö;vÕ¾yÃÍ'81a±!7?;ñ¦•yqæm+Hˆâí1 )›‰á d9QÇB½wÇ\<³<[7²Ûò16hNƒ#žx6¼ôfc$Cš2`¯‚ÍÜÓ±îó}œÓç<\Gq%íþÍ|Êr‹àe¤¹Lå“É#‹â¦\Ø‹sšËš¯Qwr'O>“ßηs©Ê"¨ô*`+ƒäì«zËâ­ÄÆisZƒ•ÄLw^Æä·®ŽTeT ¦ú°,ƒäìݶZ‚•€)è¶äÿ¶A·µüSpG³6ùü­‚nË|éÈŸmLáq“-{Msîu™øÖ~0¤)ƒö&ïϹ¿ë^Έ™±®Ú&(‹EpiÌõßlíOfýÄfFÙp EúÿM#’«¹'àelªïo‘¼¯Ž±ž[ðñå'—VÇ7ô%Ë/†˜•î6•S:6§:õR¯Es»>/߇dË:˜Xû º[JK±Ú½F^!6ñ0ÖT8Éì—Jžcnïá’a(·a·TNv›ƒñ5ºWcžîÚðs[¯‹æx¤•«§^)Éc¹ë¦¼}…`ÕŸ^…oë³QäLˆ¼Y·fÄ“²l‚KEëeòV¥Aû›.emYØC•ʤm©)Là_TO8–teXŽ¢•EºRx©[˜1ªV­xØë:c ~~3¿ùÆrE±Ô<»àÏü$í$-ߥåi<ßó/4m–MCÿÌûòUý§'/«ÊáðëùôO@®/m-㟴áԻʿҎµ4¸sĨüÓ¨§9v"”ÉTRölòIða iAoj–ò1—\6Å €|S3܉;j˜=2‚¥f ÃS(Úü(“˜€–Œú>·j¹àQD¸‰4§®Hâ%ÍÂIBÏæ#‘ju´¿ò½Ö=ægy¬»"E󧼨Øë<Ï×ìxÖº(»žÎ ÀÕk¨YpLüœŠžÛĵçÚ//ÅÅy%dï¨Úv?úŠþú „N?lTžš8<ÆžæZo ýšõö# 2̘‘ŠGUkœìo.DØ|øS¾éª‚Ö´¾ìh';N•e¾Ë†Ý)ULV@U½ëò¿ÝS{«_3ñûããá Zfåhz˜î³Œ¡ËÛ±†}eé3£–kÚ‚| —Eñ1'åç®Å.9mÒVJˆAGa:ÕÕB¤‚o[AW§ ¤ËWJeë*„R=êå}ŸüeÃKñVýMÝÓyVv/ɼ»¼¹Ÿ"¡I—}/ÄîÇêÐ5ÏÔ€-lXŒu¯¦…Û$ÇY~¤ß²Œ2 ìåýã+¡ýýmtü¨ºþDÿ)¾ÄýáÞÉé §/4WôMKëÑsyÈ.§§\?¨nØ=¸l]07Ûõö‘N¾ù¦< ›4Mà59•ÇõoW÷Ùû•e"î6V$@*ÊÇ®Ú2Dƒ“?^ëeHÿvã¢]@]öXxš–¥ì„Œ vÅÀÄ¿=àhU?\4'4¼™žà 5µ#­4Yƒº»È¾Qø|¼þÞп\˜ùéÕuQmqç…š ñ$¤–éÕíõCv¢ãY:?ã/‰^5´sþÙOÍŠë}¸¢zäýÏ Á€MÛÁc’Õè89ô?å/~&2ŒPˆfªvƒ 'ð·SÙ½Jü÷C‚zÄY’`i÷~ü]¹;ó)Ú± ±eÑÐIö $$lñ—w@bP´ã^ö*·èO´þÞEXc ³À3¹ m;nEVÏh'Tv÷lþé¬ÿª°Ÿ$ê‘[ÍÎfÙH¾|Î+ú±¬lxõ3 œýÛ X,ÌuT`“O8ÔF]#t]’ã—Õdã¯ü}¡á¶+Ÿ«ò%ÛjžyΩ½–>ˆW¢ïÌH·ä±éC˜ÍtÌIÍ3bur%“È~øåW¹€ùáæ'„Mß嚆ªdÁÏE´–1üÖ•rÕ'{÷üLJÝ "í( ÏÞ@”]QzUW}•x3æV§aHF°?P è8E\‹Šã27a5)Mƒ¤%+:PúÄ…ÁÂRØ/tåb0QòÎÏMe­œýš=‹)ѯنó¶¿Ò†~bètéÓU&U娄rašØt‰ªò_‡÷´gþ}1ý{W|ðͬ$xZ¦e]ÐySÛ4‡ö&ö²ÐÅ'?N£Ü–šÝÓTešøã×_ ŒÎ3•a3×w“¥M\~Ü]~ÅS ôÈ ³²—µ’ÿšµèî¹&J‚žÕ%þ÷ÏùDþ d "Qv³Z—Ü:ÐU<æCuŽJ—Wº‡'…Üð““_»ÇQj÷.­º­GÂVnÌ~fÚ(Ô›ûϳE‰›û½ý4]Uï'³À,–ò*«)Q,æ±³Jïè(¹ûæàcC[Üô Ï ö;ä4aã³Tp¸Izi0H…®<ð‰y¬Z"§ð«²¸­Ë®¢½>Šw a(Ó©;£|øWuøÔðéß„µúO6p0øÄš4èçk‘öqIŠÃ¥y;¾ð¼®›-®ÏZê™À*R†]„¯ìç/åqÇ0Böûñv[ÖîþV&ÅcÉòîB°Ï•FQÎâ; ’-tHVðÍ{’]^Ýf£Øü´¡ž½RŠ®‹2(1+bj©Ë%û½’Ãú&ó‹kJ>ýÌò¸D-eä.¹n”Ý‘Åõ«šQ«‚óz0Vƒ<Å‹[pÔø&hÕ÷㟚¤V™óí–(OýfLŠLQðÔ>Äf]'%åãËéœ!D a‡1ºNÈ‹ÔêÈ7 ‡Ù÷ðû‡o+þ“«!,öq‹-®98 ˜è˜Äµeëûùž&ïz¨Ø‡Ûg´0¾+â¸ì •]¡}²ªMÇΨäuM{)':ÅS:¼£4êƒ(Þ«”îø5Æ÷F2‡÷!dØ¡ZLùÛâ[áøkFÜbCk®-øAWìÛ ]9Ñýر¶ßþ¹kñå%ÿª  æà%¤*ƒ‹Fþ{/§nr#¿(>ÖÛƒr®ƒþ^F{c¡'cÀGav€#jyÜû–y—9WõÓš‹"™ÏíÀxZZ§AÍîø¯ÆNP â è<±Ÿ*ÅŒàAÿXÝÝY¾VL0 ;<‘„ŽŠÏQ ª™}¹2³¡bdÒîâØ(@t˜¼ÊçÛêþ“‘ `Ä¿…ø Ç13X1Tõ‡ ÇPã³Ã/ù>ˆòøNJ<ç™)8éAqÁzL`#~¦Mþ¦:c‹$ä¥ê‹Ç„Ÿ”qwqÀLM <ËÃÓG¦o2aÂù â§-½_¡Ã{6D*öØ%_ƒ¢©T1mu‘þÒÕù!û*ÍãïÂ֔ﻻ÷ì4Ð( /ó!±>çã!²O¿'—8䥨Ehy_ÀÊû[Þãñ*rÓîÕ²¾ÊúCåÛÑà….êzŒøøš—y§å]¶ 7Ö*Ó&1 8|cÖuòYÁ±ËS8ºŸÄFM?•C³g;¶J'õÌöóÚvsvÂ.em”#~áKÉ:‘òAüŸŸ<žŸ‡ÂrªÍO5<åÝÝ…Ú?HÄ<ÇE¶|󜇲 X\sš°{c® rãi}UˆœH'“¾&­–å ™LQl$ŸªåŒœÝÛ}éËšu¤sz›¶‰ÈBÖ°þYóm EÒ»r»D€^—vš1Yl-ˆ•i €vbU÷á_¶q]W%14QhìŽ3vd`Ò4áÖä8äÛ:Û°å:¸dØf'þ“ .nbBÄgBãD ÅËnÀÈÉ >ù‰Ï¦¦+W°ÙÖýq¼Å†'üÐ2c¿ÝîJçzh¢lÐ\Õ3+.³ù‹‚3…³d=%âþ+ 6çgmR¶³/²ûUUŸ=ß_e“Ú¸6.WGo¤Øç›ö×L9öpÓ:ç°ä•ôåWªŠ‘.P®R°~•Ÿe ÚUоi?¬øï.oöù¦ œïUM°uAí¶KO%ÁN/ó¯2íÈ„“yä¼Væ5cdbUÒ®SŠŠÄcñMͫ닾;°[“„_ÙÒï)ý7Ï)`Pä5ãàgP2Ÿ-{Ç®…Ž¢¼±¸êÃó‡›ö¡ì=Ó ™qA­ºñ_ªïüßL¤Íëõ–„lº,8Š_—×&<÷—_3:–î«:×:+¦òáš&x¶ìÔHWDrš[ðqåœä Ϊ+‚ذwÑîršóÔ”§1Š2§Xýº¢ÿã¹=;‡ŽÅ­v y—_£üò„³¼5¯žpæÇÏMÇœaÃHˆ¨àÇ“çNÇãšNçÙÈ*G"5©áj‚*fyuc¸£¡M!vGãwÒ±½'‘·8É!w»ù­%¶ÐÉoà?|ÝñUÿÓȱF“kxö—Ee²Hr*tŽ&«Q#9¥v°Û'˜ ˆ=bË‚äk M~‘‘Hå^z·-[:}Ï{~ù‡-ÜfùŽô|ÿç÷ïÏþüogþË/ÓX‡ÍñÏ‘Ûòaž¿ºt#'XèÄ]LiEøŠ³;g¸'OL:ðt¸ÒÔ;)lÀ!BÙZ*ô߃MÚãu'Ú›ã‘O¶ë©„²ö÷lÈî‚&ôP¥¥ë˜ l@ß7¢èònSÑ1x÷:à$:ÐmÉCï9qBBÐÙUÌ(gAåä=ÌS—«OÀ¡±‚¢ÉY5LH•øp† ÇOã²FÔ—.VjvÑÒP\‰6®Òlöí[.ªËñ¸Þϳț‘‹²ý&Àˆ-°Öm>î¦#S­y¡š€³ú‹DKF¸ú못<Í’ ä»;ˆiß]’[,"j³µ&7{«q‚°N¬æMÅ( O¼<Þf\¡òøÞ)$?ö°ÜtiµüoÇ4_6Ã?×›¦é×MÇz –p¶Ô’žÄÏ]š`üÕ±˜âwEâ·Ùòã_hÂñ×»&ò¤@I…ÁÀê¾/Ñ…?ÈI •oNåmtfÂsPƒdoj³êX°DòÖÕÀ°Ex~:òÍ«chƒ?dU XÎ…×Çr[åñ5ØaÎOÀ¤l"Ò>ÙÑÀ>gV5 XCÎu!;T¶ŽÌlYlØQÙœ‰&>ÏF$Ú2Ú·ëý¡ÙWbŒ*‹ GG¦˜Ü¬ÙXìcƳKùy>öñ¬ÐgâËœ,ãY¦ ÏÎ¥çÙØÆ³L2¬Ä´ñTc·8œwƒbŸkÌñé¾ >KâËÓJ³!ëÀžÉªº±ë9Ww™ò“ΧdŠFéÁ6"Âà@öv ! ¹:úêPÕe&Ò”‘Ûo+NJȘ'튆Ó$»üX^qmêFø a±3òù>»”§SäψbÆ÷õF5^!$Þåÿdpqø°ÀœˆäZ“X +³ýjÜ„^[Ðê¹$ht&l€7®‚²ûVAYõt¬‚޹!?{KS9ÎWAÕµOç¢Eí‹ún.TÌPçK¡Sù™EqßÛ¹† ^øú§»(¾°-âéŠ~QôvÔÕêq-/gø»ÛÀ/)è+:û‚Þ†|=ïKÞ h¨Š”??¡¦^†7}îÎI0C¤(l(s¸uÆÌ œq¡rsµŠs SL•¹J¯\z%/Ú`´F]#^]R ¾T/ £1£ºÑM08öáE·‡–Ü~YpŸË­ªŸò=î‹®ë õ›Î~Êèo]¹×Î~fø%û€añRψ’ÅË®ä# •©‡Ö£®ä¼h±3¨Ý"ª>œ îK›ýžÝcq¿IÕ_e+~”©4‚Ð ð=»˜}ÏMZðð–Æö+0&yxšªE\+:Åûú}V5\Þçñ—Yׄs&)öèW÷ŸÖAƒNfíù=êó{Âç÷#0úO$ž <ž ž‹ ÏO‹m%­»‰´Cûø^ŠÓRü ™^<“Ç%ø.äëCÛÜ®ú¹æGÃp¸—ŠFüŠ˜ TÏ~È ‡¿†ìÄ}ÙcÞâP.ÔL'!±ÈÀ¯ßò?áøÔë¯(„EFU,`ü//ÆÝÞ÷pÃ+ø;Å.MQáý1Â%ðË=F#ºérÏp]=–.~Íû¾«6Ëâõ+øBƒ‚ æü}Br±–ìá¡a¯k‰' XPùIl TEÁ•%Thvö›CÇÕ_–AÃ'ü¢ž Hðú =¿½”7âÐÏo3+ÏÞR—ÿxøD hÇßtÐŽcú«hÐJ`•IdM‚ò&€Ì­ÄCVu+:ª k”7dn%¸p[4™I¹0 2¶çfÍbÆr!¹pD.Z¸,dª-¯€…ÿ"ƒ"áÊ7¤”Aë3)TÆöÜlY„ÍåAóx]È›³3KK^˜©´}MS,ö‘ÓLçS$Z2BÍ×sµÖ^VAS,ÀôJ±d0kòΘ&K¦AS!À4HdM‚ò&€Ì­ÄqçdC$Z2BMS–dÉ5Ìw ñY’# ‚ʃ82±93ʶ°iŠÙþÏ.ð<¨Mq–óÏt&TXCfîÌÒžî´Ô\a™™ë|(Ó>õäR6ÀXˆ:!á>ó&%3×'^ZÁåéÈÌ™K]VûÇMÓžÛй,:V´ÈsG % ç‘[®9<4W0åg?xKµQGfòËÌÇo©.ìî 8;‚û³sØEΣ :K.žY´jƒ„dLü9;Š’ýï:øóàP7À1ÎU3B À‰=¨;šG~ j6\èC»ÿxp/MÙÇ|Å<&¬lÌgx‡ Kõ,ï'ãYÞs)ôwТê"¡l]«àåÏ CÐza†žö=ûÇrüçjËå ‹æÂ5ƒÜ™ÐrXÜç+èa繂…‚zè™þ9öL¸ûäó”5zbÒ³~Ì)èÌ[ÁÐペ¹ýP4-]̹è1cì€h©eC;‘þ\ç£ó >-êŒûPϘUÐhǨiúG£©7@;iK¬$œ&ò ;)=f´‘äÔ¶!Nr¨xÊù" ÷wŠc·SÎa;H}+öTGpõüƒ@û‘"ã*æ÷qEºÇ”h’£¹SæøÝ'‡®uðqW=³˜R†l[é€S}òÇmYô¬x•#›WÚ§[‰HÝì†#1ƒ8 iPÉ[¸o •Æ ¥l8Xo§=‹#F‚ïË0[ô3 J3hOèz6O µYaÏ\ñò:mΤdáÏ'@žRõèÛXÙN«ªþ‡¡=|M"p{‰f5Ü€£«z&aØ. ØÄ1VùO¶ Í4§¶ i’3SΨm8³šiÈù?pSÃìë™”l¨ÃŽÐ­ÈCÇÕ°5à³8F†Ž祘­àñ.t¤ :55ØCfïÊÓ‘Ñ>”ñFxâ4²„Œ)½g›;a¥(‚N81{èŸoÈç<DõñßÐF¦[s Œ@‡!39'Ô¨Â3žpR´/°Ù]¸³»°fúí‡}õ‡i˜-ìwÜów©¡Úȯó³k9Xs,»ü +[•T÷X¿ðßí¦Åÿ­óí±‚߱멬Dò¹*¥½¥Á~¨HOg‚ì9NS`ÍŠCsÚúÊ®A¬è93) 1û! ©\ô¦U‰MËÌf vô3y{¨åA"˜{#d½«´÷ƒ~I`6œät /N1 §)Ú 1µ”‡•RÝU]ù’S™ízX €n·bçaÐá¤n¶UŸ ‰Ó+0;¾[76äê¹Wju/YúÝìN„?HÓ•Ïòm<[‡;]“’ð1?°—0êšvXR€dX>Cn͸0.•f»Ù²Î+‹|Î1Ò ß\ª\+“M\{Üöaxð°åo#ä3²ƒlX§ùu¸gäüúNvñḇOÓ#"¬5K/”ÛQ–Íä¯á¤B›™¶“Ëx&Ba²/kš®œ—ˆ¦Cªm •IÓMƒÊ©F˜«Õíu`µ"C¤jvÆ?¾É€ƒ…&®?–ÆÛŒ¸Å­øB<ÖWÓC߯ƒXp\ÄQRß\ÞÎâ#}Y Alªúi­† dd¶âf5Óq…« aÆ'ÅAlM'&§¢ækþ‹ +HØtž |`Ë©êÎòf[í^‡,ùïlëK'AŠh$ç0Mw26‡P"KBŠ‚ö2'KȆ„…oòy`_ ´Û¦ ìéún–£ôòñQö+‰§ô3ÉŒÊaÆAР4ý%/ÿȤP6 9žÑ^àJ4Úw[r’4é©þéòÙËQ Лè[ð Nz‹ŒÊxürìú5ÿ;ÿ‰ˆÿ´Äÿ‘åm{¨øÛí‰Fá4³%÷ï8rÿ%÷ïñä"æª?áÓÕQT#$ºŸ^`$Qç}IÑ žŠ©À¿^~çOü’éà ÇJª¾dƒòÿ«W.SN>FEk]g6RgŠg}sÆþ?ûqÿ• ™?·uÒ“8_ª£R½<õ eÀ¾ZµòtpMœÇÞL†XpÓ™‡mÒã1Éó méÔòqÿ&¯·/Õ¶ £d±â¤5×Q©‰41Ëc%b1tÀ$ xÀ—¡]šN,c$-¼QH½ë`!½+•ñç.ÖdBhšrMZ)¬a!(¨¼šnŸ×Õ¡vƒº»*¬Pc‘ ÃF÷Ös?Èú؆›Ô`¨Pâ" [2­2!?€¸¯êS剭1³Ì'Å‘k“V# (ÔÐ… ƒº†‹[àq˜U”€€—gk3“¨Ò+94!k*š¢ Ó†mâñ@ß´;aè^üË{ƒ ЈÂuE·ôRn›&¤YèšvRNÛ?‘qý/ºƒzgzâuÓŽÍÆb‘þG‡±ÅÓ øe2©h@øR@»+~" ÛÇ¢]7-K žCôª›.…U7]ÿvuŸ}kÅÊ™\<Ç!—EЬÀxÈ¿tÄϼµæK‚¯^z]yÈ_ƒýbжÒQe4X"Ü)Z¾m×\4§pçÍ øh⮯3žüßÿù_$ŠT(…®Ú²´ü(¾ûxéŸÈÖ5·ð³MQE7©òg_vu~ˆúêŒø¸©**½ù;ï0&V,jBÿøi€¢¿÷.kžÆ/¿FØðݧÌùªŠ\G‚éE\]?Ýq‘}£ïî.èÿÅ4¿P2 sJƒ‚94–²[×Wܳ—L”Âþñð)¢`ºrÏŠŠjÛE1YÚ°Rµì 3!•]Ý^?$dÙ¯;Í!¹»{ü©Ò°í")ÖKÛ²=4q½…fÂN(ˆ=ñÏ9¶ÅœƒÏa°5ÞIAH³ç%õD=|,‹§ìŸ§²{e‹ Íæ?J6øÚ”;öH·ç—Ø%_]m±#ɸÓeBߨ?[~W_RDc×Ô\†°¤U®¥²Ô””c’Aià*›[³Ò_ ñŸL»=|,‡­Z$ù 9¦ªéaj!0Ë/í⺸ŒÁµª¦ºG~WÙïUë˜à`£­ÅJ0ÿ!–DZÚwy7fÓm@¸H ÁFþÛ8ÌfÏNðÞtCçOeY‡qŒáå¤Å8Uca—¹Ç<ÙV’¯»ÁÄ;ªšJ‹-ާú†.çôŒ´Næµ|'~ô‰gsÄ´+âÈ¿/ë¼ÆÕMÅ„Aè—ýÀ.Ž¥žÑ¢p$¬ì¥êÕÝ:×ÙHpHEƒ‚ Ú<Ž1XìÈÿ™&cW¾u )1>3üM'_Vß pjØÉõÚtrý«ñä:¥ÿ­ó|ÆÚ¨¢Ò£‰ç“€ˆñ³,øUqäóëê[–Ë{·ì£@‰W;ö§ßÀöÔŸ;€"2ª˜€Úb0õè$ 쟼ÖÅc× wÃ\ ùü…YÕ0A3R†øoü_ۼϳ]×'è.@ä±yAáQLpX²<çKhïûJ°€x À‘¦b%8¬C³8ÖígCþ”çùZ\ÒY?6À³ÑE &;Ÿ‰`„ ðfnÍW}‘µAm™»*@âÂ€ÊØž›# 9%+ă—KùENÖ×–…în‹ ¥nÖYæ9J¸ò ©0F=cþþ øD§[w‰òÌôds‡Ä°sæ»så…ö»ë Ï1Oßq΄M9¹²˜ž­D–çRÑHRÁÃ`Ëó8¥Aa‘§ýl© î-ä ™Y^Çæº"8s~¨rD¿±TZ䪈ز.Y˜l³Y*-²VDœY?×2ßIÜ)M·åss!¾ÈËö¹Ð,óþÔ!Æ-ºÂ23‘lÍŽÅÜ-šÑÛÏU–Y¶L÷¢˜„Ñ$WcHá)À3*W«¾ ˆAÚ†í‘tmÐ÷Þ¬¸@3sÂÀåíÈЖKµ?¶!Ãq£Þ"g]ʉ—³#?g.¤nšëÒªfæ9YVYF9m™…þj7Jz­­AÔÓ…Î’Ï(aÏ_e¼µÅ[QF à˜¿v={ö\Ê‹äO¼y[ àÓ¦µÈ[•äN²'üíô/‚è_è_è_„Ñ¿€Ð¿€ÐxÀÍ¡¸á}¾m²†ËÛ‘¡=—} ×=ˆê´ªŸò=â;¡+,sÉÖìÏÄY”–Ù:‰›¬·÷‰¸  À™.oG†Ö\ÏЖyY¡ãÚuß®ó0ø¥Ic‘áîÊ•™=W2\ .+]ÉHMŠX³þ™·ˆY¥*¾ÌŽ%Ú3¢ƒ£à…z‡¶ÆRV‹Ìtyy9Äôbig¤-‹jWÀ݆¹ý`0ü6èòÙs æ°}«®¹*ÉÁ¿Û–mWy_nͺòØ<—Û,ß±“AïÿüþýÙŸÿíìÏùeäȂǾ²àô—WwüˆêÔÕ!ø‘‚ÎPœ@¥PqO¸ëã¡zð•ûôêËxb‹…”fnð|@q{ y,Z\b7P–JfDBDÝ€>ž}EÇ!e&Ò”×”¿þãÛÊñ ´’qÀŒYÑ‚zãÈ?V[䉚¤¿|jº—¼Û²Æv]¡Þß}ütý‹ì^Îås9ëd¼t‚Û l{Ç *¨}ºmƒ1{Anô qÁàó}v)~Î>‰Ÿg,Îý4v!Ðw~¸;@Ÿrqöç÷gïÿ·©OQI¢ˆVÈ6•YÑÎKmìgñ'ºØñø<À`¥ý—³÷ÿ®—6²x§­¬Øêï¶dw€EoôÈW™Ý2‚vÚJÁ&× X3X%Á>Ž` ¥Zm-ä<âP1q(#)ndÁÿNJúå>£ŸîÁ2~v§:“ Úž‰±C¬tŒtt£ÄîÆ´Ì%/e8ö 3ï6UßåÝë8`@‚ÝÌ]*Ù°ZÎï1`ú>"³qâ Ú¶hš+rÚsLò ´,ÎLH°¡²ÂèËõ*[ÉÇëÜ•8h[Ù¢i&¢Èq"¿ÑšÁ.D³ðž7ò‰þÊ­Ît0˘üøÇÝåWnÔž´I͘ i“_Qº0‡7Þð¾Ý²§¾ví_Þýøzû‹7rg{¡cFÌ%†C´6ð?ó »@"º ÇK†J>ØÍpƒ–ŸÑn爟ø¹|£§ñ[èF= ÐAJ¶9ú<ãoßÒ¾8矓¾T»37XÔÖûLà ¦shß»j¿§U.ÏöqìNñ­£Œ_Â#e'æSŸo~aÝkn¢„ýc¶òýF¬Ä * ]É.Üä»)ÄïåµÅ^ÞÈjú¤SEþçðN1ëC(o7Ñàsm3µ™¬èW÷¡FÜQ‚¹Š£Ößq€‹‡71-/{!î±PÙ)F¡G%ìÊæ’ÕEµ2¾ýüE©˜‘5îŒÅ\Åt ¿Òx2êë(ÖAr {L ÀpìhA>ŠqØ«²Ï6MÓoª§’ÿòköTOT¸ë³êÈ߯¦ƒêŠ“@`¥†Õç˜åõöñ•T,,WÞ÷]µá~èÇ ºÈzbÄ®ìá8½í#ú—?Ÿ½ÿ·‰h1®çµxgz*>^jß"ø ü8;K·aŸ¤°ã,6U3ÒÅ µ¨º—ݱè™gʶæéé9˜'‰ JÀL…[îÞ‡ÂNÚØT-x/â >E8´KU `E0d’*mB~‡CÍ–Dp#`rr^‹[Š%¯¤/±sMÉ‚‘‹hqQÙIüªîŸ£OÙöôÓs,¡áºízfÜ£”&ßÜÝ|¹ùþð¡Êô´=lƒgyFe3V]Tkš¿_ß]Û&ztlÕåGOÂm ÷á]¢4qAÄ÷vÞŽn8—UÚÉ ùˆ‡ÙD¯ÇŸJb³$H½}>äØÏ¢b†ËBº·ì ðP¥EŒÚ©Mž{iÄKDte ® {n‹àÖfÒµ T%µZ<ýúãþ ñ±`ñh=5d²i!au;ü=MÉŽ‹høØ’éå§s/œ`ïtíà|Þ/»3؈/~±Ú·N­GˆŸüŒÅ…>‰«¨ØÍNâþxˆ=‰ûLðý&ñõ›Dö›‹‹)<%øBÊsß®·üM,â¹¢÷(¦ò÷ûLþŒñ?5Öæ„¼4Ý6îLÕx\@ 1Ñê]švÈjäzñð;ðOöîKt[›+ZàŽb:ZíšÏªëOùA†rŸ%}÷õÇÍ/`üøKFeñö’¸:Á÷Ö~Óµ¥cyÜ ·—œDþ`oõ±ÿ!%vÄ j&¡ šû–ø§A"¤Ÿ Þ…n@ÏÄœ0py;2tæ‚ú~úöy‡tWŽ˜Y÷f¬HuæuÌë™ׅ5¯ÀÝSØÆ©.eøù Ú÷Ô„\PÙÚ3se² ÛƒÔ¥ì0;‡®MCWQ쮟{ÃO¤ZóBïäù6ñ†t{Žø8ÿÜ$aͳ³æØT£I¶,Pb޽0šdͽcåÛ¬Òí9†í0Á6—t)ävd§H•qæŽÛòîýŒÎLñ›9 }MÈ ¹-ãß‘™$œùâV ½[-£€5Ó Ȧ‰*É„eO ùÛ˹WáÞ¦©¶¼v¼ £€-ÓÐØž.åÄ€ËÙ‘Ÿ5TËq5W{Á-¹»VÛYš+‚ˆ¸ò±ÖÿÀ…nз&ä€ÊÖž™5 äê³{áY¤ºò )OȪ²&ä€ÊÖž™= Ì"¯k}—¥YsA­Ñº–gYš5—€ÕUÿÂê$áÊ¿P Y#Ue\¹£W<‹Šˆ5뀵Kÿ²å$ȵæ[nÔ¥l– !+…ªŒ!÷SzžcS_çø½ ‹ô¿õ¶"Ok~%rÝ6‡ª€m|Ú*?*wn”£gâvfÆ*õ(ÈïW+¹ŽÝ¹ØÐ¯("Ž´U͈Òg×_W2Š4ïžN'+ú"§B€LLâúé û³Ê®¨Pv¯¸Fªbn(ºŽ º”˜WšÛé=KF{€5{:‰®Yê3t•À£l‚?ó`;3Wjú}`8æ¾øgJ&ƒÈ8»ìåk»n6ÿQBCɹuÍð5É ‘œ}“ÉHìÆc@¿³P3!Ÿ„æ Ù}J™‚ÄÛt{ÐIÞ„¦.:‘oÝ>ž‰GAaÈàÏF›4Lèôg£+‰O"Ɇú°yÍŠu±ëôCÔWõþT‘GZ%êüX:“˜„À;âé@V©:Rt§MÈ·È h$¢ˆ-ªÍŠ%|sh3¨ò¿§Ç»Úø.F"F…%%.–}cÍôŽÝÿ !Ç»ˆ)X –˜YÝBj&¬m»¯DwóEI¾´±µL¼(?FH¤M¯)*ø’1ÜŽ¥EkÑ®„hv/C1^*¢‘œÙ•ºu_Y¸ƒ2еÉ„·¦çaNÄÀAšÄ²OB<€3nö=˜(ŸCô³¸EŽLšFJªÜœÇó×Û«L¤°Ï®¤?„{ÃØ7™›bØuütÉ9C™aßȵ4Ê™¦é 'ž5Ú`ùÕj~—á3K=ÏÊžªn¸àKV"•KèØfûšmʬࣜí02k»Šv "f¿ëj¿­2 hÎÄÃuÑ—„ù…}2ª½AÓˆU•3~—«=A,ñ,1ì* `_^j|8S2!Dæ ÿþ÷¯_Ù<õï¿ÿ îÍiKŠœEƒ©¿íMÎ>Il™ÍÃkH2SÕÎù_çf5 ìª~.k:x D;êC@b€Éi¨ D[•¨ª€<f4Z Îçæp:–q85 œBÃóDǨÇ5qq©î@§«×Åï"Î6ï ø½ÅÑÀyñ˜Ýæùj˜ x9Åu˜~A‘ÕVS†ß³Ûû„Üj6¹µ6%_=žó¿ùÉÎ&¬Û2¨Û‹pÊ ^HJîü>¥¸Œ¯àu]Ówˆà£z[þ–ÂÓÃöä„LÝNEÖø +Íã5áHR‘ŸÔwEÖH ¯çŽ1uÓ ¦#b üiSûø๘žÿ”|ð÷øbxñü¹=¢WûïIˆ½×IJ¿Re³¯9EÖ.Îi ǽÿ”¿öß:/ް'°¼š²è¹s*s®É°È5A@E&&c¯±Ÿ©ÓسL;·TãæˆµâË¿¯²+E`Øt3ÖI#®.^"DqKG[¾°-e¯Q+E$ƒ¶ZË x& ]+£IRÿ1è,¾íg™Dÿí­Bm{‘׬%°1l' oÊÎÆ¦¨‘›¤²ËSßd+!:þÿ°Ëæa¼a!åØ-Ž–„/ëçªkjÈû`hK6¾V½¹/?òèwWB0»™aÿ£Ù¬·å®¢I€=6Œ73]ÅLê6›ìz”óùç©<•TT}? .m'ð7–ìÃ^4ÛrsªüÇ齚6¼£œúÒ;Ô :¹¼}•úÈ¥Ú®aãRnökÕ×T]È… ZÈ]Ù6„ǽò€þŠK`·U[²W僀ϔ]ÐQs¹°ï¥”¿¢ð'`•‡+x¿óêÃkϵœÝó?¨n-vJ¶$„/c|ç|måéH×Qçš6J£IÐ:êLÑ…c\GýœÓñO§­œæ›æ$fMý²ÊžÊWà¬^˜áðRÁsÞU͉pPÊsö}NžˆoHF?‹¬Q‡ù× lìŠÂ 9z©ës·ö&¹XoNÅmÂaåiÖ·1˜Iƒ±¬QÝl,ÞCÅ^°Y]d"aX/òƒ¦sà‚Tô0™”Úõ_}{Xñ³Ùh¤%)áû~MÍŠ“ iO~ð_Äqk:“ko+ù«Ü ñÖÖ’öv<2cÿ|¡l‡?‰êܬ²ò˜W1ÚQI øÀ» Ó¥"ƈ”õ–msèkp-lÓƒeÀ)HPeZ(»ˆ ¢ UM;>ê:C(«¶ÏøZñÈþ%´ã›iZar$aÝœ®èÂ1vmŸJ¶ÏÀ ¼ý0ìë)`¢-ÃÀñjzV¸Dl¬–?Ë‚íP=W¹ÀËï=ó©Tc^<ÐÉ&n¼ëÁ—¯Õ†û\Cí é ìì9g#õ6¯:ÞYS­lÔ]¤·+dÑ%v§Zð;XÜ¿â‘í/ˆR ™:¡ÌZ ddxW¤ã¯™QÒm6¥‰×íD -ÛìÓ`L¼•IcQ…”´h d¾¶åâëëD^òk[Û°]Y“¶‘&«nR)«¿üÄVk¶ }Xf0¬'žkº Czb&ÔÏ]8–G_´ã.ì8>-¼Ë«;òköÀ@üª”$/ãOÕ-Èm?Ì]dÆs`ø!eþRnÖyqBªëºÀJIÞ¿—^ò®¢åGÁF‡Ñ>­mº>`¦ï·cââÐ’•ŠEÊÄG†ŸâÇÑ>ìFhÀ Ò^¨xBðSn‚&Åða¡Ç ú´Ž\ö†EäQMP'Þ5û ¾,,qU¬w|Øš†¸É$ª4–úJ¥eA! é "HBMSýTLGÃÜKû|tÒ¤ib¡ÉÍGéGå•kÇ·G².åkD8ÀKE#^EL nÄ‹š~[šWv‡ÑÊŽÕ^¾Ó#Oü“lPõ0èJ廸߃¯SC6†65¥nAË{G†«Ä:Ø×:§˜6ë>ß ?^FU#3MÐ4¤ÐÜ^sùìúcÆ~ß@Ð{1jXÑ2ýþýNpöýÌJ¼\Ú²x¿ÎÕºhZÜÏ hB«Š‰*Ó´l4vùå6Û”ýKYÖê¦%{`´?uuV—/âÊ1Âùà“}À€À¤i%0È ¿îEÿ0•Ôï²|³æw—«ÏäÿáÓ¡Ú•ÅkAÛÑcÓ<q2šp±Ó´v9Žï‡Ê/&­>gwƒNöÕq·lB¸xÁÛì3oá*®Þ³ ³òeX5wš±2+aµ—0\;T†C¤Ö49EÓÃ13þš3ñ0(«6°&Í5m˜G9’ *2Stá+Âïg7Wï³›Û{Ú:{:¿†à æE¥L÷ Ç4š¤ÐÞQ|¿ ±KoV6¡ÞœiZñr$aÞÔ]8üÍš{X–滚û1?°£°}³\Bx±sØ×åêðc¿ì+1ýQ±Ã²u1ÄÇä4î>úÊ|Ð ¬Fu] ,¨F˜´½°`C£©œAÕa´L†^=ü¯Ãt—U‚¯è!?ÕÅ#80Pß{&­x§ Eò¦Í‡½¬¿3E+ÚTg™ "¢GÏB‹Š8 åõôìNšö®/rPÓõagN½4Îý<(øÐ»‡ä1å.é§¥;¢‘”mTQ…ÍŸŒ«Wã: ýäª%W%ÿýŸÿåaDjÁÏb¯±û¬Ø8uhƒÃërty?Hˆ©Þ;:å† 6ç¦cÙ ˆXoù(yxDDü°ªÛX"{›ûÐÔÇø^©Òˆ“>fÃC²A«e&m+/UV^tåëfÒ#C:_Kfâ ,[7[ ‰·×¾n·ïòšT}Ü|ÝaÄÆÏ¤âºI-ä„}žW,=3Ëi#V'¿K6ò®¯ò±7Ë=Á»Ú¿ YÕm$taÊÃû«ì† dßêÃkvË®bòÅ}Ð ·?ì°„}h¬&œœ4 È †a³‚¸8(HÆ’dÈðeÉN„ub,~õ›­w¼¥eÅ NÉÑx}X¡°Ï2Ä;È` ä(USì¬_Q€øÃ©A÷lÚ.Bྂ*\â•ÿÞÂ\Ôým¨f½ðÃ0dÊßÒyt˜5;æ^ê.à“0Xpm˜k{aùëÃW–åå—,Ær‡² &ã ÌPzB÷9j¹5ä²â&Ñ£6†æ:µ5Î4©X>ªÃÓ}_óqH÷yUó¥Šb9¿WÂØ}½ü>4!àÛyVË è‚ËÄ”V0pd7ÛþW9±a!å8~&Ï|0Ý#ãùÚh˜ ˜›0†7“ÓQ0¸‰ @ð9šÆ½,ü¨æ@'Ø})æ„—¾ÍŠ‹áB‰6Ø#P¬°I1s×’G“àc5¯Xz(fZ\Fúp‚}ˆðÓvÕ3ûFŠøËJÏQ£ågÄhù1Z~Ž-?ÃGËÏ ÑòP¸øÁòsà`ù4X~–ƒeÛ ñköC"Ç|ÈžÛ:¦F´5¼F´5¼F´uDhkph!QCXÙ^)VQ! ¥J„^;Æܽjñ¦Øb(ƒ¯Œ |¸_ªzÝæ„С6~«Ï lc Š§íÅ"í¶Üå§CŸåÛcU³[(ý…–sÎkË*“2žjBÖeG9éØR Sp8ÚúØu5 ýé^µ€Å¨Ã TH?gÖ¶Á×d¨ú9_Œ#Ëõ7¾'ޤ´V–Ó ôŠíž¬€¸C!ƒÐjýÚXAeY•¨ù¸`BÞç{4êIdž˜JÌ×+ºòØ<³QÛž¿º!ö±Ö‰7+Œ’§¬äÉ –ˆcçzYš<•%•àS"Ô‡µ,‡þ¹ jPs³ÛßõÐèdi+1ûuX³IÃA®Ý‹óxføžz³ ‰=8×2‚Ýùc2¼ïwÞƒˆãÂàÐþ?­2þβx¢Ø‹Ó qÞCñ‡çÙp (ñ1΋ǠO©EÛx. D…÷¯Yهɤ„MÉÄàåŠiŒ£* ‘P øÚ:>³‘•uÄ<v 8ŸãµãsÉLkÉqŠ"%£d¹žÉŽPBYÎ øèZ¼†”8ç_ôñòš_™<ªÑvÔ{‘î´Ñž5 ;øï6bæcVÁA è»\6€@ý‹Š?pX[fÉ Ci¾¡¬À×®;x´’ª¯D6sq8¼ ŠcÖ€{ã &zf¬ „¬7Ó‡®ôîã¹p؈¥¢ ¬v"éj|x:6 ´ª6“ Ö8Çý|L»”aÕÃÚ¤AÙ†Y…A >î2á<>Wê2l@ÝÆÝGòF y{ -—(Jp6z-VA‹ úW‡þ2TtþæUÑc\wÒÌ=${y¬Øý$Í#ÕŠþ›¦¨rö€ÐKÕ?žÃÈò€P0ú„mÒH¸`ŠxºëC~ÜlsT“ª®&È!ßÈ0¾ò ÖH"¢:ðVùqÍžR èqŒª&¼º L ?=^:[Z{F–5»)³aŒÊ–8¦Pfàø¾c®eƒ¾è-˜‹o/¿øç2L[L…¶!E¬ê6¤º° ùwöÀúpø‹aD?çwùz[î»8 XÌÄáðÐ]¬]N߆aÛ_>]fï¾°‡ Ï>åâY—ý½îå„]û3Ã`¯ÜÊh6ì‘{Q,1µb°ºÀò'¿ÊêükÖ5Cð:Ï{*,£q›8°~›õm˜IË·©etDÎå~Ø_æo¿úЋLƒêÎR׊z’œ¯7ò(`j{:AÕ!|3ª9xk¨ @%¿èRƒg2}ÌBÕFb„€ ªsM'×xºõ\tA@ýMß=&’ë]¹-;|Y»¾ éLZ‚–›# òêòË]¦ê5ès>VY+c•ÀŠê1degQÃêÒn;ÐË}8µJ¿“§ô¡¡‡(ëq¨Í5mdF9µµŸNvùYD`öÎuG[A@ýM­•÷Ç.Lõ¶ü DÂDEþWcþ—/.ëO,~eÅÞ„èJä8ƨjb¯ êsÈ¿Š´lÅÓ\-]ÎûòC•ãZ¶AÑ„RÓß¶aÈt››˜f‘×tv¼2 ¤8€‚ªè ÀÅ‚(ÍcÞ¶U½0Áw³EÑlÕ%êáFõÛeM*v¶Û×ÿJûèNi©ç@¿Xïq€÷c €éC8ïŽfØ †´&MG!.‚*xk³Ôà/×°xÎC–‡jÿØl\õ¹–ÿ £Êõ¸Ot~*¥»-‰ ±eU7¡^ C¡Û’MÛ klWx^a¹ÌÝÔüÌí‘=}õp½^ֲ棠V >,,'ãÍ7^jì€û°5ÇGx¿ò?ÇÃù_¢†Ô~>$`-Ьk+fER=îÀJz~@Ńw<@ÖìŒê6Ôº0XP³3i{aá›ÝXQ d‚yÀ(¨•AVo æ¹gèù‹²¯å¼Ëâšoè8|`§+·ä±Úõë¢kÈøŠïÈÇdËHË­©uˆR”~ï©(¿‹@µ‚Ô¥!“€ÖjRuñ¶ÒAßB šN(þ}ß±Lå!Äwΰϣá Ô~Àž/O>±a_ èðVê°à,k{•:¼Í²û¨ÿã"¤4ØU9’Ç2?ôëâ±,ž‚ ¸p©â¼H/·[%œšH>ãÉÊ™LÚ[ýìúëj¸¶`‡o¢KEõv™d¿Î€‚Ø –ã̵Ҧ“(vlQκ ©n[Qt43jKvìô {ÝÈÅMìâ¸Ó„ ºYÁ;á]]d¹Z¦©±1svÓœÞ8@’›+Z(bê—}|">›’ÅS\Þ•Yf²ÙïYŒ,`MÍW©`‡ŸhYØ“oâM`2r€`áOÉZÛÏÀ2p±ð1ªhç;FRTßr‘#¯uå¢èX 3 qhg·c»–ux¥ €Ÿê:²ýû–­ïU¬Ö°çE.Ü_Ê ©zt-×Õ,H¥ŒŒ)J¯ÔëHÎtI9Ð÷•ŸäÐj"ßäañÅHjUY¹}UûŠ•¼Öy, aoxöM[h˜ª–¬Qj§XÎ[Ñ/ O‡è؉]êk}+“äŸdýÏSyBú|¦e„:È,3O‹«¿­2.äÄHÇf9!§c‰ß6ëñê’bÅÿ¦•’ÿ2 :VeqêX/÷½y*§ªÁ ^N÷Yõ¦Ë»W6rç/ZæGBkë«zfÍÒ¤mã©Éªo¯²ýJž”‰$~l›íkÚY;H½ä»ç÷ëªåÏ£G6m©…¬ãê#—ͪ–Ruæ5›ÁÀa˜9\õ/®ñÖvhÁ Øqêâ ^=;2­T>&îGÈžO <”î²à@«Ë/1‹v2…7 tUF0 êv ªpÔp”@€plÐ1“øßuw\çOèÛën ¤Lð|)‡‡s³SNëù/YJö×Ó†Gme“@ù™ÆQx.;OdÇOIÓBcŽ,}ƒ8bÍùs^x¹§ÉR’½2ÚÒÁÛÛ¼ZÝ$?Ýr!r¸t *Àª¯hœ6"ÙE9`4”›¡Aª÷ÆågqS Ur­=äu´wm¶ü¼šAø#ýg1…C¯7Xî+*1†3b2(úFŒ»ó¢hNøW0æ|LÍÊ¡D¢¼å²†¦ah_“P&¥°^c¬”ñÞZšÐS”°€c½²°†kêå†×|KöØs/—FÁ¤Äç’¯¤’2¶å8Œù(šTÃ(DyÇn IÀä)E„?Ì YlëÐ7Q`†<ôjxØ1~±ØA€6øãêúëôøŽTÛ5l©;Ú&;~Ršs¤ fàˆ-^É(' A1CO`bÌùš•C‰D9Èe MÃä®1éíph2„l'#™&òšÑ”®®J$‰×LÖÐ4œ^CȢȒcC¶›$Ãk—1/Uƒj…8oYm! =ÅD²ëÙ%~L½¥ó«æ•?Üå#‹»¹sŒSÌfàˆ ®¸Sq>xîKÒÓ^¬Œv¼Œt-4æ8˜ÌÀ}ðü¦fwù&Ì yw_­Nä›I0Ñ…Rif±DÉãÆË‡/Ù÷áið@ú}ÅÓ9Ô`A]Õæ’ÊKsx&>J¹8ï‰}ÓÔ>4XEóWmD²KëÕ¥ÑPnP¯¸x˜£‹é›cuÌ÷ɼl3 .†…Riœk±DÉãÖ+.šÝ2Ù0Ÿ–õsÕ5uŠ!¦Ï$¸bH¥ñ©Åb%ƒOo¦ä07Ê[¾‰®Ô­–<Ì–zÈc\a3„Á­9F‹ÑŸ¡(O±N(žp…_<­±ã »xBr¡ŒO‡hn¼²³$0ê=Õ<¼öUÁâ3?‘6]3÷›ô2³ˆ!çÅ J†>«ÙIÞ5ûìrPÉF` ç·‰l6VKÆK½ä)0£Ñ¢p&+àÀò ,^®Ó ,v µÊ/2–’ÒIÀKbÙõÊ?®i"˜BWÑÏ¥ä!²Fy,z Úô#ÅU6·Á>†Áù&wýqŒé #« ‰¡Ú’xÑh FXW £Àm&[Hg]qñð$wUW¾ä‡C½â3£»T§“Ào6{dþû$å²ä–ˆÌGƳOá>ƒ)WU1|g--¡ ;´aÿ1ä^É?)¿gn{>¢í`.QÞršÃ31ùíuõ·»ˆoË$ÑÌj B4èë¥)F;*ä˵Ð3º'è«ÅL'üf9ÍAh¯ÊÑž ýVu ÿN±<’|¥,† ¾PŠZ´{ð_§™–Ñ%ø/“ÜÖ­ê¾ìvÑ ]Nk‚fÝ@1þqÃrÐ<%S³1㨶!ý¾+ÓŽ# F=”&â¨Å8`3˜¡ñÝ Ñ¨QÆ”]š¡†Ç˜|ȠàƗ˲݃!‘)“t£€M0õÐq‰ÅBgŽPìN «L¹¥°8­yã‡. Ý4DbŒªv¯á‡3íiÃølóí–fAÍeÌGÔ¤F!ÊUv[Hš£Dbv{qMWn+RäÅcd¿h±ãá3×BcŽqƒÙ ±éÒ2Kà1Î˜Üø,Î#).„­x¹á/|:qž@_èÒT¤XĆb¾?=Æ%ÅñIÂÎn È ¬NWLálXº¥ÞØB†$ñºªE4‡2'¤Ú'¸nå°å£fÐ Âå«)zÕ3D¶”qûr”Ázh[î*š=ûuØpœkáõÙ½áëÂt=ŠàtêËž…uŽÑŽ—š®…Æç“8b½ãÏÊðLñ' Œ 58jº¸§¡ÁNN‡$üWEFÙÜœH¬CŒv¼”t-4æ8?˜ÌÀÏ<0üŽ*ýT+jKikh©ÏÂVÍ<Ëe¡ëdIÈ"VÆ"–ÄR®……/‚V¿¢–½­w-t­p¥YÚ YÓ²,f…­_‘¾éò}™$ì›Ã–’A3”/¬¦pèõOˆH ‰ž,Ÿ¶ŒsÉÒ†Œ¢ÂUô 0”¦^H¼ó‰Àßw9{îLœ)îÒ„àØô0tYˆâã'¿É0V?~’ò4wÅWÏ-I@_¿IT „ù5HçU|ð_»¾Ç§1gQ ÊŸ}YÔÃŽ({æ6í .Qõ27OñÌ43@‚RIÖ4þÏDüs*RïEnëÇòЖ]E‡%'K“'zß•mÞ͘vå?OUWnù)Îv4ÀžU/³œdýœå‡¶>ûó_e@‡ -•b­ëºxJIÎlUÖ,†UÇþf„JB?º}“å²»G'ÜÐÕÚA[ÖbYaV5–ˆ×’…–]O´Gù“ê¿L$ï«ç²Îr6×gc Ú½t,Êé–À6뚦×|î.ÊT}ù§ý©Ú–ëæ¥.r0sƒ®àú[óÂüQˆ.…<²óBW—(¤<ìØanJ+ ÏdÀŠ¥žIûðÒ* ÓM›Õ-õc&,;/^Û=½ô¨Ù•¢½çIöîæjõKvyëgºmŽía¡éà'ä4jÏù¡ÚÊÏÿŽÖ)’”ܾìcÜhV·Ðœ ÃÕ\kØ»®9ÒŸÒh›®wã]UéùØõЧ¹³9œž ÚO‹[DKUKñ(‚êgYótÚ8ßÝýþWêS!âižM[Ö„<ŠO!±A×Y•œîn1/~£)«ÕoÜl x¢_"­žÃð?•¯m^u¡tu )l&ÒvÕ3ïÂé‡E^Фò /´&2±ðØqòZjá1'€‹E Iº¸%¦ ‰r õ¾kžéÇUŸ¥íd}¹Ó;eúq­êýбÓÎùjõð œa9(/S¥w’Àrh«¶Œ!¢è¼Ä¤ß”Òö‘Î(òc(#]ÝCH ›ù\W»]UžýVG:ê¿g’t¬Ü{¦ö© yJCÓö°²f÷½Zý/41ïŠG:¢B=2í…£º³]ÉÚ!°¹å@rø‚À?J.ñä¼ÌŽŠâÓ˜ÍÀ½dïTJ|lÍÞpà±–ó‚³ 4ù º.š¬øHj:°šˆ¿LyDÃqÒ]Fû·%1a¨èWUñä9Œ›õæ=[IñšÑЇ¡®Ãiþ(;¶j:¦Èi¬ÔÀŠæ‚£!V£è_»Ø†@þóüù»ŒXU »œSMÄBÉ"£Xn(Zó´ýíŠÇ²x EP éÑ]F ¾ZöæI˜u‡ˆÚ§+;™HQm»g¾Û£ŽSÙB}!Rî*1x¸#¿)…²ѽz[í«>?4E™×ÃkþWàž!Òàœ¦ª~îP§ƒªi8{d¦ýã¼,;­6Šg­®…Þ7¦–ýΖs¤.¾ä{LÉŠÀ`Qª6/‚늴‡ÿŸ¸w[ŽGÒ„_…WkUf•Ê>íØþ¿Ù®™RyR·”©ÎÈʪ™›0IE°Ä YRÔռƼÞ<É ÄÉÙ;ÖS º{|âèpÏ:c‘Ï‹³–âÖ˜@I^‘¼íƒ!¼UuåàóuÊ×ÂM…ç·qÛÆÉÿDo@#ÚHSUtG<¦ÖJ*¼`Ôžýb/¹Éh@ÍL¬£v©Öî9Ïñ$øâ{ ©žÐ/\k AÝn×ΑV7mZŒ‰@ƒ¤¢NxU{¯ÇVÁ%Ù“‰«°•/Tâeº¶â¸ïbÝØ‚½ÖŠ6™ËÅšîÌ\8“ÀfûµèÔ/ÇšHX–û¦úiÓŸ¯ï <‘ßú‚|5ƒáõ,ÔÕ~Y?{™•›Àº©À£ärM{n/„³¢Ò¸…Ú údN%íÙ áp¦}ŸËuÈ‹xëú+]ªí.¤ð l½½Þš"¸${2qmòXT]:RÃmÐÕ]ôcQñRÿúú‚ÍØ`4¤¦&ÖQ»X{^¶I$¦l (÷½”ˆn47íu%paòkxG^•y8[Êï slÝ—»¿|©&ë¼Øí¤ØùZ³Ò[€>u»¬)ùÍ.Æ}Ùd@L ô›ê]S²…bàä³—œaÖŠäƒÞ‹ƒq³ªx.[2+ Åo‚u ö¼gHûÍÔær/¹Ùl@y,YKðR/€Ñ*™^`gÊý®vC(– ”A(áÅe±\$¼Þl>‚+çúµq“íÃoÿ‡Ù ¨cU›ÌåRvn.œI`3Zê,ÿã‚sŽ™µâ£.‘Å¥ªoj,”m§"] õ2®Ù¡ºà ð¢ÅBÐôW0ºX….¤ð ¬ØÔ#”;€7Øåjtn/„¿¢Mær±ºœ™ gZ›6o@7ØËÑ&26.XéÔÚx¹ö95@pP¥Q¸T³œØ $Ø ¹ ‘î…˜RHN—ZMv¬Nddÿû.\Næ3"ÒU8Oáyq¹Æ¹`/€¹ªMær©V:7Î$°­J?˜êrç¦Ä•ϨkŠ’²|÷ü}† Lý [׬mÎ~ízÌî@ìfìÈû¨É¸.€û8© \«zá'Åuš°s˜ÅµvDR:ˆÍ:"´, ¯_s/«tU¯8Õw€î¥Ý¥Îžãæ‚èm6ø·ÌŽãOm+_B U°À{!£8«¦lG+g s¼â_‹©ùÚ”Z®ª®*HŠÉOQTϦN|wŠ›¼êXßNä¤À :Ë’&đլl/DÆ!ñÀsÆÂÚ8YÕ/Î 8PâêFÅä¢é°ªAék(x£Gà*@¹Ÿ€Ö¤ë }jŧäcñ‹y¯X5ë:¦Uô¦ÌqK¯ušÒ¡è*ˆqê3Q÷ ¼‡1BiMåx׋ÚAi…T.ÂÖ7©C>MKU³DÖ§}ÔC<0|j¡ÿö%h3Öº:$ x £8,ØÁOOK†H =ãŒd Ç*þøæN¾`1Â*K²æ/[ µwA]–0>À7v¾§0ŠôìüŸ~†¿nü+öú1þ#4ú¥QuZ)Rðj]ršÂty†*¸P÷Mÿ[ôNFÔ3±{œæ­-·ê»Fœ9pØ7UW¯¢ Zða€òrŽÎGè=ÈôùK%”1}K(Ö0ðÆnl4bLP™„`¯!æj³c]„\\2çS;se¥óbÑ[A÷¡—÷¯RÏd‚Ëàñ™¯Å¶qš6c4ÞK&¬\5m¹g©þÈçf0un`õÛÈŽþ󺮪âßÖPÔMxP” SŠï9 æ8¿Û‡è‹DŸ%=y›ŒXâ÷ÖS eø/#:ysšð ¨NÝú÷Pë4ß÷mTæî¹ð:åõN§¼öçsÒ®~±!mÜs[õ–Õ¼áäõéoT&}•^zÚöx·ÒßàÍo¨›‡ªÈ“<Ã%ø_x#uZC„_®…‰5Tul¥‚GCÈöL½˜bAÏÊákÀ¡ª>æûëëSœñ./¸F´icYo*¯±Àex°øÉ¶*×pÕÊ(Ic¶`ÁÊQ•ã b>BÑ=:åñH®ô|·~ï²æL£ ªZ±£ ‚þ'~Òç…ð±ïE¬wx{úM8ºx„WЫbXÒäuKã£éZ É~Îø¦ë¯ßÊ‹D¼eÒùCˆyÍÙY–ð~ÜÆu´ qœ]6bg¢«¨ËYÅÕ >Ôrñ®· ”ò" ãvZIëÄ褒™Á–lðÑ€r.®m+|ÚÌË2Œööóz%ŸÑ€.>ò—¿/ÌHÚX³äµ™òb©)ÚšÞâD5íËy5Ë—s »í–„øâ¢µÈꀈø. ^¬@IáNv-$‹Þßb1Ùa% ͈¡¢íßoîp,‚ ,­¥S•¯|Å ^ì@^„¸þÌ—|ËdÂêé9~\Ga4àÅ€‹#mâ#lcì°±f¬zŽËŠ<ÿY²áÉ4â/ן"þ9?æØbš,ÿp¶[‰|0à›×€òÊÀŸ²XýÆÀ¿\²8ÿNŽm[ƒ_¼?©%u#%Uù|ä ×ü÷ÆÓGÄ^f­øpÝK_CûÃÖ\æÛý•-±‹Fe5Ѷ’’²~œú×*’çˆ&>=y/~iá­‹×1>‰ùšf›ð×|ÞÎßµ(O‹NŠ^¢.@YS±:‡ ù^ž/x¿FŒTÄå7 ¿Î«í9Î[¬bE`—µÏYVŠ£s³¼Ù51ÿ4«‹ê ;¾áÄŒ6Œ¼æHëSÕBf†þqJ¦®£QÐÍèEîãªh¦kf0Hj;*×·¿:òÆ©¿…晵ّu¦nC; Ë\Ÿâ°,‹î¾Ý‹=÷›§sBJl1p>ßËžú ­ÅŒ¨ÿÜŸð­ë×áwÄU®p|šžŸRºZh“p ¼6 ýº€;~%.äŽÆÅJœÿÕ6™»I´Õ1OMŒ¤&âjS—L¹ÂÉûLÂ1ÞyôšçË̾bëš3ÒžÄQÈ•/>åiWQ›°²SÄ Ab=±]Ñeu“—mð½+6Š3qƒ§v° Ï#6O1ÆËp@;åèD">¤[Q©Ë6l¤'óL¯»:…мÑ<·ŸÀx˜û­IÓt®ÕÓwl°2ÄyšÚ‹¡J<àCˆ³! …Å‚U\;v”o;ðµE©bôæÆáäç­hµ$vKlô4yx¿YýæÔÝš$­¥M”mzÑán0Ìe݈gQ.Ö2ZQ+ÞÕ¡ÔƒÞÎä1·ðn«úRl†¬+hMl¸ù K/0„S|8K’ÅÑ‹SÙr!ôàÁ™9ÑIÄfÅÌxAg)Ž©PöÈzñy,x·téŪne0«‹ý›á Þ}±§é~»Úí VëûǨj„,¥s‘øìãpú[ì\&áå;Wv@EQ1熴7F’ߢºçàÃ×_›ß(׆}Ñc nBoª+š ±~#PlOžûpAèóðñÁ‰²d]±“‚€s¢jFÚ öåš×Æ}¸Á'Ñõͳˆt{«ZZ|:…otL4˜ŸÄå½÷°ÅÁ׉m¬mrôpprŠa’Ž=ú•7vb?üÊûé4-nÞA ƒH.9ð× pô5Š„²#àÖ‘ˆ‹~ÎóS?iû}êÇ!X–¼Å6…îYŒ/þI[9KꎑÂÓj‘¸åS¶ßf/|¸ÍŽecsIÝ‚{–«RþaøÑN«ã4eà³p~ Û˜‘Tq’¨)cíîkíü½v„sÙ dMù®‰ùäD=Gs¾¡|ÕÉ8›Cx/?Ñ4‚íåú³1c•ÑPE?3È€gù/'èª<ńƭ陣”Úćã]ÜþmÀÁhçlÛ͹&])˜(ša 1éö‰ò-NÏvEÅß"¿kÉyÇÿmžê˜±g>ûo ËŒÀ'âH¼sõ&R×ÍSt}{ï ó…´ÚoÓê¹lócø®¢Á€‰ÀT\­%FýCæ >;Q..-i»`£¬84ƒ¾,¿±ßë±;¢INüX•ÐÝ“Áëú.øRz±Ðå3g™Cœ½p¸Š–$Èhb*%’»A|"Îô˜³d³’QnêzF %6éò2?Æüx™‰1ωMŒ.mp?1Õ4ã“rrñk0Ø¥‡suq¦Xf :;>K•þˆQ…wRd¾&Js vÈù¢"‰K9(ÂøR7¼[„ âEíí¹#Î ¶‡¬¨ ëÍ%m ýQVkæ¬:S-οfý­Œ¼”gp”]7•5nØ€)?ÃuŒèeXKötF_ƒ´dõ¹=pÀrªâDÈkæë¸íš^ÁÇŠ™Å‚޶Í(ŽN~Â\®–îo¢?_ý‰/ŸþÂÿëÈİŒîTÄåJ‚Š ?v  y"Gßî®?‰,Vâú֌ԗCZã¼t·/›y:ªž™JgÌoåò¤Ù]îgJ«h™‘É£6¾D®Žù™²žpú-.÷ÕVÜÛ/¸m#HUV¿‰½Ågj¼ gUóÖt¬ ΚE#Z)6z—<ÆI&†‚þlÖE?ÄØåÀ" :9ùÑ ÿ§Y³3…ÁD×B¢—4ðèÛ¨xTEûB›U5 .¤tï±ì ~`?þ÷þCÀ ñ˜g…s?­b¶Ýe jþ8G%#J."3E×àêæÜb#æ ´ª›Ñ©Â¾À‚"TÛ´°@ÖU°7™3W¤ŽÇ%k¢wq):¡hW Ãè/<% Ã€Þ îO\£½M8 * ! ×¢3ßà"ÄÐb\Η¤°Ü{e$õƒDH¯ç²à'åýà‘²ç¹m8 ªa8WB Aç ,8ÿÀ \/o 2oP~xÂ’¿Y”ˆPÔR`R7›¶”õE^ÞªîÄåµUKÎ*ç²à‚7ȇ \ÎW¤ðÔp^f¼ŠoPòžçÍeÁsCHV¹Û–Ð…[Ujþ‰”jÍ×’WíªzäŽ×*%%šÓ„¦¢r¾hnT˜—L„QõMjfÓ6 ŠÞ‹@­¶,gƒÙúi¿MóÜh .¨™®±˜FIÜiúÌ?5@?ŽÒl‡·AÅ-Ük™Â3Ž,A~,ÜçnÔ1bfÂWíÃô¤ýëáœTmž@V¨Ï5ƒˆeøð[ÜÎ Ïi¾‡7*Ár±‰Žþtg±½˜7Üjtݵ‡ªÉÿp•#îÉb¬7B—eXUTîìâg=¨§]nw¨ì·x·ËštÛQ|Z—´UYmû¾ßz™þŽ€ |3ÞŠXB³Z{1RYPQ³Þ©ÏÉ®Çd{*_¶l¿!ã‰,YLå5÷h>ÉÅ(ùœ·«w÷7Ñ·O®8œY›¤ îPT-#h:•ÁGWö+â©h<^ƒËXÑrC„P€à ÎjG‡bˆÇÒgƒ-%h?Ï\%•«G±NQtSEçW¢°[Ih¶šš ŸP:cOp&$£FFRJß‚<‹mïèïÂùy÷Ž^W4â—bê]W10‹“¸8Ú󡽌@æ'‘$Ås^ðßìÅ#ÀÊÈÈÞQ‘'‘ïã'<À¿öÀñõ‚[ñDцĤëgÒñ‰Ð)+ÎÑ1g/‡ˆû|ê„Ã;¬AǽˆÛ:ß*ÐõŒÀ…”Ú Ë¯˜'.ÑàÉð4uJ)¼V µ%„|à·üsxÇ6Õ´F9%–J.B¼˜ÐÁ ŽF¡æÍdu¢®žaéB(nMÑŒYˆ#ô.œ¯‚‡®gD)¤\:>¡eO9%bË\׈¥—t¢)ùxH9Jžjš‘”r8ý™ñÿâu&ÑÝ?nöέÝ}\¦ù¶àÝå¶ä’¶ °&«¾ÔàAtÇø_•Ü'[9{ ÇJà}“ ~]^;Ë_‹°/p¢÷!o?v;-@Õ¥ïÔ•ªì ‚¢~rƺŒ IUv@BQ‘’8Ïžû2Äo= oECðnzÕ÷(•ô žX›¬ÈbF.W]ÝY /„ –ð¿æ j®ë­g†:WòN¼> ¬ìçl­ž82m8h¨HçŸx¡KMé'2Ȫò,ŒÓJ:!LZ¿?æ"^Ûk/Z° ×åµ^›£¿‹wý5nµ¿òc2„H‡\wT2KF|4µ>T¿…þýŠŸ“lÝø*2Þ$Ôle2H.“ág‡úùà0^û}rJ›¯:ÑÒ˜H^ývöÓè1“y^}ƒ#È£¾ó]¥ÉÛ>{að÷|U¤ÎÚ—eÙŒƒÇDI}az*ë^™áV’ ãóâ<Èøa$Ö¾<;žu´ô¹øEßÂÞž¦£­´¬„¬Îâ8†«‘R’Í”õ}Ÿ„eFqí7Yðâ"Þžë’åPI鹌!Õ߈BºÊEðj‚x‘2çº.ƒ3¦¡…½Æ°^üëR|è¹üÌÜG'äøTµŒàAfðŒÿ#5¹žð@™«¼Š’ìC¸²;ìùŸIÕ„;JL¥Xïà _àòÞvIJb/8 ço1"B0à™ª ò((öö1Mmþy£ÃÇëO×N´T]Ï oLº,rÿÉÄ"FdRxÎòý¡{¯dneÜò‘‹hA¬ÂüjžÙ¦1;伆¬H¡û×s]3ÅAÒ…'k¸¡-ñETS‚£™mñÍ5†hö£ãk\ב*‚“‹¨êdÕþCÌcœàê¹ÍkÚ¢ÕaÈÌoYûˆƒÁúâì³v¬+Û+N¬ªN(ÚÕ@Ã0ºà…ï\{Ň½¶ê¸Ïš¤ã¼"úá°ÿ1$êí!çÿ„wTŠ–"È,¸Ž‹ï!Ú—Z™uÃ]§šfˆõ“·†$¢ÑxŒA)Ÿ{â ®dMÏãÜÛó£xêœTÇlÇ+/¾*^Ò6ÂUeÕ H8ðrYùW/ó…OFîZ"ÕÖ‹ ‚ðÅÙÎ`”…ÜÊŒƒ_ù¿ñ€Rñ´v7Œ2;ïâ”ÝŽy Ø-fÌ,–”ÔÄÓG ˜¯‹M`˜4ø§ >Ô|ÌÛBÒðpRSU#‘AÁ¿ò&„œAÖY‹þæ¦yµ‡¦êö‡èãC”ß}æ]£Œ½æE…vš>×µ“ñ9G’´™ÁTÕŽf8øc`Uõd /̸ /ϪL ƒ³¦gFŽR2l¬8·Ífe‘Â.À-†©w¨›(!K1ŽWìþá6€¸á.f¼Ç¯†²•«jêçd›%lte F¿lÀÈb"®nbðN²ÉD¾¸ý.a¯o{±œ7 .æËB¯¼mø+'¶åëÊ'#]ÙÊFŠÚ˜œØë· ΢itª‘¹¾‹"=¡£Â޾=Üx@gÇrÛVuN>Õ¶Ád-u°¹ÿôE†:HDÄZÏŠ€¤xÜÏumL¤¤…Ç·:yýîöДÀve ø"Ê;-d6Ëv\Ì&Z–BúF  WÍ –UãM­jœ|@„È¢ÉOp%aEû›™p2\¼„ ¹MòB›‘y©Ú.J(ë`óehLÜ[åˆGÐV3.nº’ƒäF ãÉôeÈ’|ªÝ¶Âh£f÷/ Oäßí(78Õ,QØEL…±ÉwÇ-‹·"8s0™%mMVw>įp{ùöÍ}´áë±¶éŽÑu’d×åïãûø˜ç!¼…X¿1?n7–ÈLÑuðÉ~‰ÜO°„1ŽÕ)ÃàG±ÉÆò*€& ClYÕ‚e!?œ`)ˆ¯‚kÓ“g]U•¡¢ëà’Èêc\¦°¾‚/¾©SE»°¨î &…5v"Œ_VÖ5¬x¿+Í=é)Ô$³ïQs /©ø/ÛGÞwMøØ·¬o$§K«.@·âQ$y¦õŠseà¡_r†à7|¸]xÓ&ÆõÇç˜RÊKêFÌš°°&KsvØÊóg"¾e+v˜mDýܵ¯>?¾zß'"%K1™ço¿\ßDŸßÝG_„èúá–Ò%ݶ°ñ%;ÜÀRIw€~«Q°LßfEA'IÛÌ5Ûð£è³¹«k6y&üPN7}ªç¬y—î‡êK»ÀjÕ׊Ìä.MÝTx‡FÛfËÎQÓ…ÿåFénuE#2)¦eK‡([ÑíýMtˆ›º³±øäìË»ÍW(z'ò}œ ¸53jR1oŽqÓ~ÞD˜ ÀÙ(Ê4{ €âÊÍåƒxèü¥Ç¾/]ÑXRLÓûïn®ï‡7†W±G•E÷’î¶}A îE ºü„ øöÍÐùâ§¹É-ª;‘îrâv &¯«¼ìCŸö4|Á7Y g0UÉWEž¬àa°ä¤4Õ[¬”A(B¡Ü¿vH~®KÚN"“À£#øÎÙu°‚÷4é€Uu'bq' ÿ‚ŸÔÖÄÿSù·¦|KåtE3`!&¼ž³øipdÅ ú§[q¸è„‰^#„Õ«®h†)Ä´{Â×u×·¿:Ê]F-Ï%}3^MÚPºßóµÕv5Ö><|åÛª¶^Ñ‘Mµm˜Ù%ÌŸ¿>Ðû2n¹­ž²’JAUv0@Q¨õ3uj?W¶AíE— ¢KôǾÓwn¯©ˆ½„¢hà bKXá{xÔ8bs]H)¹„Ó/¤évILªhZa‚ÜÈ;¸%nIE›nÝd¼I—õY/Z -â78ìcJä¡êÚ™ äbóGý.¼ôÞyÁ€rc­Â÷®A‰<\O”]àMÃ5÷®iË}]цsºÈï1z­ñ¹¾¸–G¨jÚ¢ÜD|àÆ˜?ž©' 3]3ÎARF©j›<;‰¼òu·ãcDtû#ŒWà3²çÝÆs|vs(«¼¢Ó˜«[˜(Â:Î`ŸUE%¯ L™Ó%ÌÿÃEâ4m2æ®—cN»€0Õ43‘rJÛÁ«1¹!ñÅc„ÏÓ Æ/Ä5·Ð «ªVÌ((.Ýà§ãœÍýÐæu‹ ?!eÿmIÝŒZw²bÞ^úï#ñ=îÀÉ,"eG[5˜³C$OñI¼•×ÏI‘oSÒÞÆDÕL§T{X¶~«l¬†wMž0Þ ¿TÍ‹Ny U‡&Ü3{Ô1¢nSîŽñËM¯Š>ŽÊÜw4gÕ6A§·p´SU#èAPæ(*…gÈíæ³’íE^ÊRy墂ëgEê1@qóÙK QËHt] ))/þ‹Ïò~ˆL ”|rm‹”^„ëEZ!f¼ÜGRÀ+‡‘üÍвÕÔ<€ÎÛ´|ˆ³Þð.hSUG'Þ¼ íÞN͘ób¾së³eû[|Š· %'âTÓŒMÊõ™60ê Ä¢†Íà=øZøLbî-l¸ „Ͱ«þ!‰ÁûчL¯E#4Ѷ’ðiÙ¢þ®AçÕð÷l"áá‚¿«Xøø¢já‚ Â|+bÆÅu]È cøúýýMåœ:ý–•O9Åv]^„¯—´pUYu0”"|à‹÷·ŠõØdÁ…{@Hrê1ðÁ7:ôÈxzpǿ˒æ¢!,ÖðƾÔ"pP.ª»Ð*I'e°ÙÓõå+<‘³¤ás[2rMÝ…\«…˜ˆÖTΑ|˜‹ ~}ôw<]lò&|MQ2"Ïe„ 9³ƒí¼ còÊ\r¿ýrí õ‰Û)Šð÷R×3–R. °d/¶»‚O® Z8˜eFTqq‹~øK<Ž„ æÄ~NŠ*~ÚòÕ %’Á²¾¹&-Þ:^Àϼå¦Ç¼äðå_ÿC GBX¬£†/ÝnW“#ç"²Ûñ¤ÚkQŽz-:wڞ좺“é¸ë&Ø)%ÒâýGq¤ÓRÕ´PØ“– g…—pC£ éz %" 5ñNO £ÃçM$…\@óD²#ÏKÚFЪ¬:›ø>ðLýĺà磎ëÑ?²†¯4+±nÇÚ¼…[ª°ìtêvÙ)狲$Í·ŸëÇáSu³ #蹆/NB<й® —/˜ºÉáŽç²¾³°„´7¶S²Ø)ñFuJ|!Â"Ïu€œÛmƒ$}6XpbóL8ÈŸŽtl§£/ª“k? ߃+Að 0Q4!éŰ'{Ì £3úÄâ Ð?tbìÊäÞ{ézf„(¥vþÇ8ác•ôp£;SÒõjjfl ¤yB7WE.’?tbÛuáÀ#ª˜îª$.¢7|=ÀÎÏm^Àµ8™¸.ê¼Ì¢»¼ì^\Ó¸ÞÆm¾…;Õ4¢íå|‘0:æ‹…-l»¢Íkþ»wo¯"Êw0ÖŸâ¢s·B°ÌÛáÞÄLÕŠÐ#hxèá{‚†ˆ1³æºV¸Jä¬MÖ^S¸½ ²,n’ ª¦k…*$%Tüï’,R±c…ìu.Rä;ݻ˲jqýßdÂÈb¦ oÂDÊNGŠ;‰”UšQ&‡SM3ló‡òW~¸Ã ]Qó@,‡…~ oEÀZK€Œ„ç‡O<ù˧¿Q1švØ\Î9Æèr2k³RF® íìM˜YLÔÛ°Ò%¥„ôW‹ó 2¸Âכ܎üù탈–á¤X¤áû*Š’‘¢§Y '„ ´i³4Ú#pa;¦»íÓ)|î¨é ©Å™ãݽó x ÙvOð(ž©!‚Z„%ô‹pŽÞÕ~[Ã|Žpê>×5£•’V\Uƒ¿w,§êÚºká‹ù8Âp1þç6Oˆ°çê䃰ôKÂ(;à9À—Îà…ȯÿ€wÿu/í&‘–1 ¾ªhÎÅ”ÄCyó'ˆ™£}ëÌËÀ…å<€uªlÛÏ7FÈ£kÆÝðØoø»7QõÄz/~hp~y‚þË6IGÙ«Ä颡"`ûUØÞ›\Mônèyr¬Jˆ1MM&,& ! WÁóæ†Äg!e„òvéª8(hz³ð¡/NâÖø²¾ ñÂöx×sƒ¼8Þ£“óå9MÃ8ß}»ïZí}Rï”°T…; Uч¢Ò¡a‹Œ‹>2• ÜKBòÓõŒ_’¹Ÿ| Qƒâóea×É¿ªÏí¡’ ¶æì[Ø/Üm …QVk¿Þ@ÉKn¼|?«¦iÁ)äD“èXËg°Çq¼‚ç>×›ØNóÁË%"xUÕŠmð…@8þ”ØÄS¯&žz7ñ›»[?¬äv´ëÔԮ߆´ë”´k¢ª9K6k»¦dÃ¾Éø{bÿ%õ¹u ?Iê4×µ•ª”œ–©üÚU¢òÞCÒÁ§½3UÊQPÌ0"aŠ7[”G¡™æð3ÆŸpÿ\›"t¢h>]ÊÕr'Û]Èàç< ÓÔÌ¥s´˜~AÞ-šå4 º‚ D|†—b^8KPAÛ¥~`ž2˜§Ì æIÒì³VîAßó'Û¢êóß·q‘á ·xÅXmvÌðµ´9ÙàUƒ2C' +èßþ3ˆäZra¤ld°ªB9Ð\¸Õ ¦WjûkqÒ]KAå ¿¿Og0±à$ÑË/ð"tË»þCã"1kªSž&& nfR~ÙðˆÂ¤÷+êGÑv2Y[½às…¬Œ þ«Ëún(½@D< Q Ýè^ÒvŸÜíîÁãÕî@è9\¸ >i˜(Z£Øp ’4Y áñâBú/ÞK‰«¤rb¥4qwÃÖî‚òÉTt]×ѯiwxðÂ"å¾zŒÛ&! UÔÌ€AhœÏ¨ùžqËK¸¶Ys¤D š©ZJÁíýøÜ —O%·1ä Üø\T7ÃV…Å•®ê¹K³Çëþ‰¼Û|ò|ÅÖ§ tQÉŽ _pd|) ÿÐð{±þ2`4~óö NÂð/7Lð³„;ÕMFòq5Y°×ååJø÷¢´Ê¯x'wr¸rƒ›ÛyùØÄ¬mºBµÿäG þÁ;ˆ´½|›=]'-é›Åˆ/Öá&Û0â^>‚iKÊ‹ž=Âé`¸åvåÇMF^U 6ÌT œkj`nÂå¼ôçÁ=Kcü3ÓM8X( Ú5^>È´è}¶˜¸ ¾Ø ÇBx­!äÍDÏ4p`«cMMøÔˆur^#2è$©FžØ™…_SÕÔŒøQH (Á Vm$4UÕžöÑ=gÝH«”÷^;BÃÑh¥˜ôéÑ«³Ã‰DØ?¯(ð53\ÖÀô…*å ý“á â<ŠÛŠÏŸŸË6?Šœ¶­â:²6éjRе™ª‘Ò ¨æYÿ„ßD8/³gN9O¶)Æ×9R‚˜m˜ÁÏ4Å'(åsÔ?–!]⺎FA7£—cEà0j™QsÕéqs¿Á™>pÁÚçå ü먾ÿFFÀ3…¤E¹É‚Äù’\ïÃÿ‡Ò‘v¾„yÒÆ¤¬PSM#ö^NKëÀ›-žÖ@8q™'Ê/ l ýXL]µ.i›+²Ç¿[^⻢z‰>Ýrä×¾ÝZäÿ·þÌ€Á(n'Áÿ/„G)9VY°`e¢Ê[©Ü|º¾Â’Sž=ÓxL´­zY+~˜@È ûcþ’¥[—F`É„•…¦`§òñæ!zâ°ôôˆà‹ö1)Äš¦57`壈[Ù`Š€vz²©(Ùð*™Ít|Õî·Ìcü©`v¤ÄØœëZ VHZËTˆøa~YÕ(¦êvä/> âþ׿PÆuÛ¬¢°`ÁÊB•·ùtýðõK‘˜‰HCS¶3  là{ÑüCÐÓ;ý ><ÜOÆ{àóêv›×´ÎFWv0@QÅG78áë(>ÅyQ¹•Pí¸÷|¼™ôE§£[psR›˜™X/ÕÄå>Ó¹½»½X2šSÞ‚²òôÆöL2>AV5qž÷Áçj Ú]Û‡…õ`žýW`ïÅšÓ*3}+‡QÚÊaóå[‡öeÝi¦oå0J[9p±¤³Ó©¦÷xnj™lÿá‘8®<Æ5åî…®gÄÊ¥ÆÚøW[Ey).[ s•ðØv„,ÁEªh™!ruÿIô~îÐeuŒSzäEu#JMxü ¾Žþ^íî–x¦cõ„)h1\P˜N€ì@ÀÆNXò.«¬â>\–p@„§.`5a'©vî!Õúî„jùYcºÚypÓ¤5áЦf„ØÈÐcúÄ@¤?{ër°ís·ƒ’ 3ëê”t®ª+qK±iRÙ‰;÷»‚r³GS3BãBÒ²üïÿü¯6Js¡øÏtP®,i²Ìu¨YÑnÜV>n«Äùãùö”„ŸîêzæŸG)µî¾åMÛÅ…ˆÔwÑì‡o7Ÿ~„œÏ7®+‘Uº D©(±r5Þx®p.ðù훦ÇGÈø×ûŸ}T’„0óqY2¢7é ž®ÏÙîÀ8RËèX7½dt’ÒWDtW9:Œ|F³7ë•j®:Äác»¢ddÇE´»Ÿã×Yù)ÛuE}„ôÀˆ‡ˆçsËú6ÄŠ´76ZÕ.©»‘M.lr§”/Êû“ ã÷„njÞ8©Ù]çº6¬jv×>à d#ž‚Û3º+Ø$^P¶a×b÷/õ¥ß3ÁÿIS³á<§ÑÎà®L^â_jÓèCû¹ñò:Ëy“=ó©Þ–˜_ÙeÉÂjYo²ðçÿñ稗W;¯¼ÉáÝ’]\@‘4+¨-ÙqÓ´h¡»oÿÜŸ”ô¸…ô«ëÌdËMn¦¹@p” ®9·¯0õ ÃeÉMp¢·@OJôûÌœf?Œ {û+˜Mlxpê5–Øôk™? y …NA3àÆ/ècWøS”f¬mªóOàQÓ´ðOUÿ„P“a¢×ÙÁÜI®ï=èõ1‹é“¨E ‚º|BêTjÉ€¾Ùt ¼‚ÄäÏR(~è9Ò\×´Ïô1ÏŠTÆ÷¦£nâçUÈG}Ÿ"çÒ ˆRR¶9&ÑÍŽÁðD–I ©é-ÜfÈÂjQ-6µÙ[쀶;ù OL¿SfßàDù-,ÓoP×—kV&Eź&[YCËv\\'ZÁ˜WUÏ¢Ä>•ÇNVë5½iBÇÇýaJ±²†l朴•©DÖU›ÅZ0y%Âûd¯HˆÑ¡¼tï¤Ía›•Z*+ZY¨ûÇ&nC”_’É…Z¯Á‹äT-öª¶ºl'ôÚçû|Ç¿¼‘Ú©åeJ©I.ÒÛå•7±*»XÓ4˜r*RÀ¯l Ë–‚ _¢‘ÞTïÂÛf•] uVYpû¬2k U¸w˜20/S>‰“‡L2ÛºVêiØEÞef=ÍUíÙÏî ’¡³¾I;¿“q¢oË~^wؾC¡­-¯¥÷Ã\ÁoKÿâBL‰u¯‡É’‹úL€|U‹7 ÁºÌìû¶MF¢{ ¦Á$Õ†øñáÝ—àÖÇ ËŸˆƒ»²õ™,¹ÎôÈWµ>ƒ¡Ü+{ÔÍõ'Y¯ …ý%ˆs^ê ±ÈKRµ©¦<È  HwôŸ£ê†3ª:Vœ9z|¾¹Þ@ýˆ¿à¾õŠóˆàâGeU0.³ ;½`\ºñÝ1˜ðCis4o‹¬!ï±"BëÂaU¹Ï,8øŒò×”øÔ€>ïÒigQ×Y¹ÍYÂþ[SU#øAPËÅ·¹ÙÜѾÑSŽó_á÷¨w,ÝÖO{l]׆[JªÀï^éCófóÖnúÛ|Jù‡º©jêE6ðºrø%/ŠHzÖ˜%ŸC– =´70{ûwt„¹” þ ·¯¤Ò+´ ?—©OC{Æäé„°] Ê6Þ½è¢Ç¸¬µ_šÖ ™Ô¼<Ú•lPK™ $64ö²M³Ç’Ñ…Cœ+¡*¢ó¤Õq¹ì˜Åg‚OöTÓ†•˹pœà7é*Ò þ¢¾“.­Í²¾}„K‰Ã£Øëº44ÂÜPäûHåb3æ ¶¨ºÀ"ý½éåúNLJë±*ÛCqÞîx¿?A¡¸lÃÆl¢1%$Gò±“FÎû£øñº¤ó¶ˆwYAÖ¸L™I™ýÀ×ù:Ä}Ì^Ú [RtlÅq¾Ñ†£¦á…s½çÍŒm¨×PÊÙÓ:¨Sƒ¸Ôk™¥ósà3^)²BþÂØá);S9hÚ Bv‰Am6#xH¢ CÑÇm'RHp‡!±™šhkø'çÿðZR¢ÅÉ—L‹Â¯£Àm±ÙÉGÁUvŒË-±ÉéªèRpÒõòo1c\‘3‘æ³>òðœ™n"f¼‹'®xJ,ž;î³&íÚ³LÊŽtIß Y“Fì_›|Ï¿ý)âàËê¹ÈÒ}&Rܰª8A3çOßrÞd’<õˆ?þJr€`+Hiܬ„¸¤‡w1O‘Žžj0’’1ã"#Cù-n z“¤³ó¤¥æù±ÂÞòé9/ÓêÙ¿^H™WÕÝu2IwËË¿‰“¤ê óm9rrâ?n‹ü˜f¬3U3î^P`®RHq——ÝKôp}‰gn )bê§Z {¯,duÜð“€IQ3£¡É}õ]Qñ×O˜ ‘û¤Ší/ÔŠÌ•¡÷w—´Í Y5·Éð ïĹ«ªÙãHßF]›¹»Ñîš®Üî2þ$¤à-#þÕsÖ¼i*X 4Î$Uu^þQɈ‡‹h£!ÿ›ë%Å0.º€=f/Y^Vªš ‰ƒ"í|)ÛÒ(ÃhjÜ´ \ž<YhÞ_UË eDEŠÂO^*êtC¬ó”Ð#ŽJf`)ÓÜ‹”]¡©oßÊéX.\Šûïs °_„ œþžs )1&tv¬ù°ZN>å>­ŽJªž™JIÇ&>½îÊþå¥/žàÜÈÙXùU¶kšg¥Á€¶..šr^÷/—ê^é‚þ´ÿŸápG%#D.¢…iÒçÃÐN6U7¼‘üùÏÑ-ЮeÐ^6˜¾Æz-²GR¦0Kê6:£°FÌI#ô˜›!Ÿ¯ªeÁ/³ö.ùïɬA?Á5Ž7›·?E|%È•Üh ÎMª–miö6|ßdGýŸÿýWrƒ„±™Sѳ)„ N7›_†wP@ƽHÌ$Z‰ í‘4A8zLŽÃ¡ÉO|$á‡{îiBÕ´” zºž›2Vø¸Qy@ÄxjEA‚©ëÚ JI„{+>c̬¾ƒÃ/²‘Š"Wb2%—“k÷|µý{±Mªš°ž\Ô7³Ñ¤ý±ì.i{àJwþ¨ ÿÄ X£º..ì,O_ÖÕ=€qá`¤ÉÊ¢¾4wÐVEºˆ)£Ë¢¾6öÇ&ó,álVиt¶nÇ’&¯×¾Ï v|°*Zþ˜[H9¶¬jÀ%ŠÂcàU²£jÅ(êø£¥-ê{ é@lÕî7Lî¼znk´æ‰[×u±hò¶+ùÔ©Ù/0bˆ‹ÌI°‰û žDŸ›}\æˆôóQÇ`‰‹žòùõÃm§5t¼™hÛr—çA¿8o²àâ¤_תçgþètV1ñ'¡T^€Aõ˜·»&Ož˜zM,œŒÍŽ™×¢–z0_5} kð(@ù7(?dz;è]…]ÅПVhÈnâIR<ÆÉ˜„ðƒ»"«8޼ª‹OêíKv¬Nà˜ðéö&ú̃lemíy›k+m¢}j>mª— LÉøšyóx9V/ýµbon²aá1Õ Õô Ô£oï"ay²\ ÐhÂÅ‘ßO¡¸÷ ã×ÿ!fÓLÕÁHšˆÏá˜úßz"d›™ëºŠþé¤fv'OÑ?³c÷Ã?¾Ýÿ8 >÷¢gfè÷9¼tg÷}…¨|¼¸(^8=!YÎ2lOÔÄf¢ëª‰~\ÑkñA©”{௨¸¡Fæ¤(»H¨a&¯Ä}— ê/P­êµŒ8Ù)*ÄžKšðí»ÈY³ \ µìYzÕA²é>wÖªÚ[³FZ¶àb¥¯‘Â+ ô5ÖíÊn·E?F´nAÛÈJ•#O·ûÔí"ùRmÒzQo›¬&TÈDÓ Yʉfš ‡qœF?ðg<“§â1>àMÐëžAW×”=ZUÍ „D“éJ‰¿€šì‘z×{AÙ nõ´[içiç ‰v— TÝDÕ §”yKË”EeÕæò¼3Ç> RIµ&Š6¸C(-;Á ëm[³ÿÿõ`º`ŸÛCUòwï÷.o2±F$¶‡%#1“9mÔ° Á=Œ!›Cõ ‰¨ŽÛîuÄŒÁ%™4ƒ…Y™œ# êáÆþ{·Ë)iöTÓDå¤7©yñ KH=õ’³6Øþ 2|”¿®ëo÷Ä ¤o;n¡ õºŸ©š0‚"*(~ “ñ ‚e|tÎ¥¤ÖbjC"\MÛXÈ.ƒÏœˆ_¶ÉŽ­Ú(2Û0£Ÿiô ”œà0+üó ÉtçoðÖÆFÌi£ob÷åzÔ÷äIåæÅ‡ÂÁ xºÃ­]¸@c07`¥¢ˆ#'™ôüu4\Õ˧‚à[ù­/)*/ òþŠ©¸;˜ÿ ¦•3`VŽž$H' Ê®N.æµaââà VCáU ÅÎYË_ ­häð ’‰"Oe•fŒÌCÕv°²È)NÓŸ`Ù·ðÄù.2„€\_L+‚xFo$kOnŒdf£®‹—TÅ6›»!K4LÀñÙAçʃOZÒjiÔ³ñàR*¹; þî³äÓÆm“%F“ ZSw`—Â*Ž3ß® A›„O5màQN ¨.¾€F3…¼ñë}`Ã3lEÓ ä\ƒö{º©Ê–7¦äÕbh¬a [p2éå‘ÑÏ5ô°?ñ—๟ êÇA)˜—Ët=8âuûœpÇ|AÙÆ¬>ÐßLßJ ÐOÙ¹ŽsÚh­ëÚ KIõl0Žú/á€}¸&¢¿\†DCQ´q±é›ßÁ¼oå{MBí¼<Ë(‡¹ÜªÆ‘/Îù ׉Øumk±÷²³ƒeÃLï¾â6*\¢Þ•'ä%Od:ª¶‹Êè=œw(;âU÷e¹¢‹š©»x*ÝTQïÞ ~EÝ©#óZ0âb§ª8ªêWªu_ˆ¯b)„4ê­d úÔü—s]E5ÛåR×É*èöÓ¨—[Ó…þÞemïBÕ´±A9ÃbS<[ƒŸ%1Š¥åd4Y°ñÑä]“Ôë®­@!óK;©Ú—¡o×PÒLøp þ¤6B/z@=¹,N· ;…SÒD¤˜<áå3Ò8ºÙ|ÀNhécÎ[™ð‡€pIß T“Öü‘?wí«Ï¯ÞÄ"qQÛÀï°_„&8¿2oJ_g#EÝMó(}W>ÄEó‚¶‹Ï U/K:•ZPvaNŸ¾GùâvÝͳ ¯©†ºÍÒd{>¿”™»€¢*ˆ‡·_>nîïpõù«>8€|ÏܳÐ`=Š’…b.—þ|yùÿzû'Шç‹Ú¾ræÙºræ‘|O€g~+J´|Ô¦h¹ ô1k“C$–¾°¯‹ø¼pÑŠÒ£×·¸Œ‘øF6?öSÄŠœÆy;~,:vp!=dPUˈdÄ0ùñÝ·×x|F1Õ½b5‡£&–aÿ{¦kÆ8HöCltbP×ÑǸXõØ>Ç2<#fèE·B9š+Ûð÷¢j—ÖãSÖ+]ÜØ‘quþdûÄ|{¯;òß+2ÒQä\ÙLk•~*-TËÏ%¤}ÆÞø‹|*=ü€×ƒ•Ù™Š}¢ï€ßKk؇GyÆ.4¬ä1a½8*™pµôÀûùüHaWœA` г ¬êL41çëQA€ßå`ÐSU#ôAÐäé; E7\Ê ’'6Û4«‹êLŠ m4a¦0U@*Ÿ€Å™cǧrÔŒë:åœP·ï²Œ”vQÝÈBV#Á+Íeû?ø«\Äg8YŘœ±w|Ʀ+SØ’Œ“‚¼ 5™0²š)h¯¹x]ßÜEø4wGKì-RÃÀ/ë»ð«à'àå#à9 nîROB+¾èSÑ:p±¸hyÓâ$)oKÚ&œƒ¬˜DEõÌ'`,ß ½Î÷û3æl\6:æ¥G7Éâ:á¯öÒ‚#]p /ª›)¨ÂzPÁëøÿ›ë/QÜ$‡üäQò”<µ>9j¹ b+E(ÏavÆê,ãsuv.ùx ž>Ððb=;Ë²ï ž2†¡¾u34Þ8ÄøÉõFá¾×3‡Ð ǸlÀx".FLùeîïïËbp>ƒš%l : 9YMÔtvƒ/›xÈè4ó#=A¡Åˆ“ž¢•´Þ7ÛðêÞÀ€¬}ý ‹Nq^@Œïw‡ps®ë⤷¥À™ãÏÕ«›MØfêÀS¯m-uXS©ƒÛIMj$õ*JÞlôvrû@ïe›s]'bé¹9 '¢WƒÃ&|¥@YÛä¶œäæš$üë^“©0ô/I¥  ]X–t xE¬IjìcÍY KºDëêÑl,”C`]öÚ2HÁúÚ¼TØëÝͦç†Úôþf‚¬éŠìb4c¡5 ªVÂ_@`k8;YÿvάxðuÑ®} §F|±¿ux.EyÛÖ% ¶Ûq³ I<×ZY; fü‡ÖÔ#Õ-{á²¾›á˜ÁpìDæÂËP¼T«Z:© '“AA'3~Mf#c3­|g¬89©:h×½-s#¾Xß¡EyOˆQ·–õ=ÙéM«Çܰ²Gð`¡„矩‚ú>ê;‘® “<õǸ†ÛQš=æ¥W.2–áÃSFÙbéš9HI¤P•Å9ª›œ—2_ÿÁ]˜¨Ù“T`¼­á.cð»á…n0a>Q~»"ƒ¢ò­¸ ~¡}ÅÔ>†Ü~EÉŒ£ëYÐW}vœ¾Ý ‘œ°­°ø·l=NÈeºoò”€YS4ƒbJü ðÚçÅ[(–ø÷@ÈS“Ûcñ’Â\ׂº—Ôî>Â×âþóÃYä”ÓàeRÕ{UJª»£“$"àVÔÌXAhqÈì/! @{®³ ñVlEÆóÇ©ªz/¨ÁåÅ8|𾉙`!Ö¸yÍ…¦ßR”ÌXyãx=æßâÝr‚‰e.¶Ç­Ì“»•ŽJáek2aÄ=SpƒãÀx€Ï(0MF,@g*n¨Ãrr\¤¸·D/Y—1 t£ª›Bè[R¿H'á6g¡aQö&²{(\O„‡¬8e°Œv}ž©1 ‚ØWÀµ±/>Ð""•ò¹ûÂ] —ÑÃËRW4Ãb2h_éâ_qùۯؼ U-#0Q/¦¡G>Ÿ4'ZÁUï)oªÇö.>»A¾IáK@MÏ »÷fóù<ó0ý<úMò ¤;´ÔðÒÝsx ¦¥yyú@£¸@N­{·ÇÅt§ €ÎKÿçGþËÕ_\€!=jÅÖ9›miÌ5‚pÒ6ÄL&üPŽ›aYÛg•Þ$p>/œŽ¤`ÆAŒ‡àÅý<Ç\'˜#ùÀuªjÖ êlÇ€.1/;𽔞w›O÷.Ü"Ùìöª$¬ÕæÊF슨¶Æ‘)‘á{gWMBɸ¦ë™¢”¹+@Ÿ!Ž›ÿáÓϯqéãB\ógMwÜŠj G¾¨od K+â™ ²ÆdûÀè2|±‘W¾<8€¬€Ð€ £“™q2RTÖ;Ø:Oàú8>Áܹð4ßu-]Ñ•¤ÁZW4³1e¸†ÍYv×­2jo„ØÇ¯_¢wðmt#~½rN6ê S oãg¶ÍŠ˜µ9ÑgÀnÈLpYMKÓÕ©ša#µ¢ë_6Ñ»QËÙ °í_ë¸Ù&5a^0Ó5r%ÕþêãÃ; ™ÁÖAôׇë/ÑÍÃ'bòlæ{ÿš-ݽÆóJù­ nälKà(Ÿ69%Æñ\׈v”ç‡ •å-H·äsEq<6¾%Ц“| ñÃiL4]+!¹Õ¿îQç°:+ÛW™óŠC@áÁCœâ.k6b%£ªˆÊo ¼ñ»”·©|ó‹P‡Z^™,¥ÔŨfA΅ƶt„ÉQ"úUxôÖŸ4ñ9lœ—mVƤ½k³ÉFýú9/ù²YÌôμÀ#¡|•WQ³Ã®ŠwÃJ³¦¡ uº¢™ˆ¹@tiEÙƒ$@µÌÀ¹Œ¶âsU†³]'îSÚ¢ÈâFy±3k³£{âÌø«»ýA°½ðÞdAÛHb”E* {”¿o>R'O(ä…™´³>Ñ´cÝ˹ß]µçÃ5cXò2d¹/P>WIœª¢&Š©-ús•o6oeýGøÜýÞY“PP6‰b£u]ï›,|rȃÇnp]Í»ä4£ ÔU-0¥ ¥,¥„«0Û8ßÇÛœ1B̺¹® ±"¹¸‚1ø˜\G_AREáem%•ÛC·àäçâĭ¨NHW4²‘b"Ÿ—ø ˜EB'1 „(rÌôNàMAr]Ó ]ÊMŽî¿ß+ñ~€92×hÒæÇŒ´ç9Q4–b¢ñHï>Aê¿fYÛº]ÃZ>iÔ1b“~°óβ¤ÉZynøõpNxKHà¾CÛòèáÂøœyøñ¦fDŠBªãZ$Ü2Åp!κŽÕÎAë”k{àÍý!úŠš®á|UÚ¸?ýš(ñK±q]«ØûÇ”]z\î~QÝ„XÖ&żgžT(!†Ø 0±€í.[WàF^Àð$Dz”]d¦‡@.A„¶Ó:Õ´QТŒ~¾Œ‚I„)z++œì7´ÒV5m8QNÅÉâãŽ/îàë‹5)›ËDÑF`š^0¦}\ ÿñ9ù cýø¬â}Ì›ì‚õàrëç÷¿¸@•ù %ˆ®gR·¢‚Dh ÜØdØ•ªkëÎåb×Õ0\6ÕŽ°dëaŽ’òìR` IÈbýŒÏ£/(p‚G»°7õ1G­hñ‚Œˆ%‰Ÿüœ’ºö¸ãxÍZ£ #Ò™ÂÞó™þñˆûäp_/ƒ@G¼±àþ8 “0М…¿ ×Yôó×û ‚ë¸Ð2qÉdó¼×ˆã~÷ 3{謮žâ½,é_PvašI‹uˆ‰¨} “7«Œ [QvÁÑÅõ3ø ÉúDñùžO¶Å7°|ÈŽ¾Äàþ×1&SÓÔ]ä„°=)‹Iw—/ÒÞÞ‚²‹Ë°Ççd"öýfå&ô¡Y²=®i¦"åÔ½¿ìoßÊhc¼ãù†RÑ·_ÿü§?q "¯yÜ4ñ™ù1 FYÒv0Q"ˆH6}üu<Äý­]õBqŸ\Ò6òd‘„òg ‹äé§ág©ª–"ÈhDòÎMËM^Å-OG\-ý9~ʪ’’üoªi=Èih1xÍý½ªÊWwן¢~©î~ŒvM§IÌ„ƒQæZ¢>g;I`äëðÃEu#MxÁO˜[ çïxÔðË ‚{LþdÒÝ.éΟJº[b2v úÈ"€F~YEBµàCDÄš™“鳔˴SJÒr 1ˆ¸ÝÉ fº jRa›|’‘é°œú|Y߃H/67.ƒÏoÍ \ ¦ j™€£ŒÚÛâ´£bd|Ñýkoþa¼²äBº«Ã—Š’'1;lþúæÁ•Ãþ%I¶k3'šmaÏ54÷ »¬¬NÕåã½Àé动ËúFvºôph&þj0 o<¼’Þø÷]ÆÚÕ,æVÜ\@´¤¥§Åˆ/ÖÙRT Øg³©SïÓΟßäüÕ~‰>ž{Ïö׿f¥p¨·‚¸~]UE`Y¬-† ÐÞ©ÿdëê™;Ü'XÍ{fÊ·ŒŠZià×⮜Eé@ØÂÇð’PÕŒ¬QH\­Mó6úõýÍ»¿ ~‹^±^Ùö÷®"6jšAJ9uÄÂ/póëû Æ:‘®ù.¸Çð;2£ŽâQ»³Ë[1y¬ó, å×û;jµàJâ‚zŽùï&%uLPA±þû5@ÂŽ †wå)ÔqHSsƒ¯ò?·!–4YVúyã&|¡(™á5Z”¶²J³«ßØdêôï\ʰ;ne~Ä¢"D`YÖ7ÂÖ¥åÍ‹ä‰E¯£¿ïZ™í¹¤óûQøï2èÍÄaCíÎ78½Éã üÁ~½pœ ‹<£ í¹‚ZwÿÁ»Œþ)ŸÃã1ç8g:u‰ÍéX?H›^M5m”Ɖ¡Œ%,¾Q„‘_„³Ì½OÆ(@Õbæº`À[DÑ2Bí\\áø‰O¤Eü”Ÿ°‡–Çh(Þ¯þ£ªþ‘eµ»aƒ+2%‹ÝDÑÈ¡÷_¯´âµü¾NåÂ3 j˜鑎’¶Ö Rî¦y®k™€¦fĉB‹+_^›Ÿ7ï°QT5Ÿ¨ñ?ü®È`k²`Ç?Íb [#xð"öFþCTóÙšˆTÕ¾È^ï“­Ü`÷'`МG¹«Qn–·ö(gÖ¿ˆ½Þu°‰‹-ý*G7EÕ¥}ƒ ^¹¨dÛ,$}Ô’š‘ ©×ôù\î­<}ÿPT»“§~Éö"Qê»—6kàÃíC$ݨ,S¬I~ÜSŒj\ tm^ð9Vôáæ ¿ÅááQó(ûž-Ÿp×EÐ:ÍmÄ~ª2 á×{B ‘ûz9œ‚ßÈØïÊ=_ªÁ7n<ª£ˆwYÁ(5M /!§V?îCã5u‡‚>˜w$¼;¬;¥Ð_§ 8=Y@s:æ¤ö~Ì=ÚûQÆ1—k,‡‚T$@†f#ÒýüpûáG².³–T³ÀçB¦â–®šb¡9\$FEr¥~AË‚X^©Wû—Ö|q^¶Qš‹P¾Mcˆ{K@;ѵ`î%']{_ÚcîØýFý`&Ï«Ý<Ú˜ÔÄG5 z.„Àcí„„ ‹¸¶zë8ìçeûvâ­‡Q=,œ­UßÈ@—îcv|¹ýá¦öEf޲u"ïv¬Û…Îw-ÚfÔŠ¬'ª° m³² Ó°}ÇߺèkUç {½QãÉcŸqß_ DL¶º—¼òdD%ãÅC}ï[?n‰ÏO€»€SÜuëxG8„–à{AÊÎ)/ÓìÅ› J ü7~Q„¦ŸiâG>ÎôÿnÇ(g,dGÍÃʬX…ìÕ‚Î2dHŒ.ƒ†Ä,RÅàâã!nD4i'ªp#»më(®ó+OÚCÄ*ÿ^ÅaÁEwG²E.6ÞYYÓ.ƒ æáý8,„ñË×tüm,Fá&&Ü z…e ýS_U‘†ìØÔ]Ø…ðî÷øÄ³rc+u“XŒ¹ø,©.±û¤Èaº&.ç˵.º œL6u!¼Ä@<áM¤ô«¤È=9´YHx³² ?ˆ.¡ÿÊ¿÷-ï0_Z³² ëô¾|õgK˜Qùk¾£¬*>fÅCÃ/xO˜oOqW´êgïáÆ®?-EBý¬êÖ‚­|©›ª©1xñ7ö`âYn3•iÙá¯o­¿ŠWâ_?ÆyQa&ÖÀkãvýYù¡ôÕTZ/?Õÿ‚ÿïcÖþQf –_¯Ý>0B+¸øÒЂÓË%=­ø”M UQì4KaÈRöbØpðä@…ï…ü }ß5Ezöšá3ûψ êËz†²[È‘‘,<Ó=Ë@#?ôÑü†òˆ>Å|9VÇÆŸ{êvYSB„µ×‡¬8†5y‹ò´pFÑ«AT» >¸yaWÍE†³nnŒ·%>—ÈSó4):ÖǼ).*/*š—Ò?†g÷­±²ŸàO‘ÈÙªÚ™ÛpU’¢aO£+˜‰é^£•dBxèU0`Âa£Ó„ øä¸Q¯2^yR>4rpÁ׋¾€v#v3Æã!7rÏqª1Æ7Óý“Oÿ‹‰P„ršèZЍ—'Éüº‚Q¶z”ŽDöu¼#9äÉWüïM1¥ì \bÉÛH$ÉåRµ9i’ÜŸl8ȪHúm‰»LeûÃ?þû±çüúŠ ¹q“‘Tާ\µÌÈ,½¬<+6{É*gE×Á$…w'ÿgŸ½×<¯§‡*õƒ¶™nQv€µm¥O¬®i1þ-Å£…H¯_ÔÞs=“¦1‚aôœòM~¢JKxTu0DÈï3·Ìÿ’kd…‚ë¬pöÓ~«üE5Âýg¹¢`ŋ֒4{bŸX>…¨Éëšg?SŽªŽ炞`*q˜AF¤ë»`Ii1EèÿЋsó#ïúÃâí-& Ød¾%Ì’¸È¨ŒTe•wg[ mõ18‘®F?ñùÞ@årÃg±Õ;Ü›ú ŽKþ^í®<9ŠÄ d–šº‹§Ö“g‹¼ °Q4Ùâ!Fˆ;§UÝ]kóàÞYW©v‹d$áQà¸ÈùcKkô-<idaÝ7øWø€3þ.¡Ÿ*û Dì— ø@óë#Gqr§²l "*X@µ¨%Ó(¿´`‚§®ë?l“4ßv5ø¢•‰ÃÈR©€äÕ‚ŠŒ„! S}»>–x|~óö¶ú‘𮼩¾Óe'•aù þx™õ¬ùÔ-À3ÎaÀ]B|:B“[z‘eþTNɧğ„ž‘èáÛÿH¦ÿjÃV@n˜7â†yy#æQP¹“vЬ&Ü|´Ý¢)+Ÿ #ý÷OÇàOGoا£O5`ù.¤ÇÖħöxèø%ùoH—fTŽèÿ•žpâ³go6ý­â% šÚõ€Az~í¾'ȘWc#¼Š ¢þ=;v«HL ¸X€ø„ÿÕÞ(>Þžv0A³¾oÓ‚’ ñÐJŒwÞYWËè »³g±ã†m ÷pùÚ÷-^º†ë! }ðâ5.`EÓŠä– ÷ÕxEÌ•¯µ÷Uºóí¦4ñi7u/:~Iþ»ío5x—ÃÀ´ˆ¤ØÕT\k•°ë„°ß¾‰6‡¸H27b‡:z#®< y^+_Ts€÷D€µB.OUÛU˜¢¹(ټз¿©jèWù#±YЗ¬òûWÞTv£-Ên"®ОDïéïËÀwÕ½¬w™AÉÀë¶á*ÓiþÝw%œðˆ&’3ñY•¼óreà$æs‰cvÜù¿{U²·nÓv‘CYyì ûz‚O}AñlÉÀ§\àyñêârÇêuýS6Ú‘ÀzrÖøHShrq²\ušpÑß-Êã"g˜å®g1 ùÖd]JÉ,Tm”]͆ß˃œ‘ÉÕUfŽ# p³i»YdÒ ¦©òxTæBTÞ󯃮M«çrÍ€›ƒ/J‘Å%¤²À3n ?ÜŸ£õ‡×|Nž5üM¨ kƒ|Í\Ø{)Éé„Uu']F²ßø“ ä™&MÞû3Èêu•¦p³â☆ÿá_j£Ãò=zør{ýåßEè)_NAáecpåX@œô}£4±8³ß ïIþ(<›âÃ#ëoàC"§.ªÍJ_õB =äýyóÏ»¡†®ž¶™-€¥úóa“ÎeErÉ&Ò-ó@ü;œ“ «š6Ì(7tæ|gŽ€¡þJ3’PÎõmXiu=,@+=€‡½æËŠ6¨¾¯·Ö¬=pŸâ&Ç6 üTÛÆ`õ^Äí$ ¸ûÄHñŸÿ´•ã—¸ÎÿêÝeaŠ_Ê_ÍäU×þSô©pýëëMõØò¾:ps|}’¢4ÃSqr+XùÒYÁã¿ÿó¿zŸ~áâråÉ \ ÂRº,¸xò  ¾"Ò¿_¹‹¹¦FMØë +)÷Û°rˆqrΛ¬ÿ΃ZúÕôŒìPJœíB¢Pñgÿcm>ƒ{%FÿdIýrw‰ÉmÉà§0£)[Õíd´ÊÚò‡ã—³YƒGÊ@Ë— ì@ÓÉ(ÚN. «¶¸±Ÿ€¦Ão×\œÔŽtE#^!6¶$ù·¹)]?Ü|þ4lê{vå=jsZÔwpš5¨¸Ùåm[djÓ|#>“¸NµmY#+à"$HT²¦©šš¢»*¥ÑY²`£¤Éi½©.õ¤ÖQ[Ó0 F¼ºäÀqUcܳ€ E3Røɰ÷Y•îÖÔŽÁˆ‹Žªb¥ö!«ÞîV×Nh »¾‹œjÀÀKÆXO©ŽÛä°^å«ù-ó$«©Ò6×Àø9†ë¶I×ð‡â÷‰^ölÜ,ÚÆŠý(u6RGȈ !¤Š>dqÑŽU aÓh…°`ÁJ[•7E©{)E£Ö¶µXC\é]¬ÔTy3µ¯_ÄpñPHÔøl(MzÃëÛh)ÒFR·õ5—YÑÇ Þ)OqŠK1¬¦D-œûi&НCŠ¿­kªs}QEÚÈîîo+©ï5®¹ŽºLZ=E²¡É RW€ŽyÒTr4¡¿;&+¶òžéKý$åнâm’ŸIu]­Þ ÈDFzØ­¢°¦#X4áAÈõâK^«^ø>a–ÈW¬5m–<Èêz.ÎýÄcÍz´~Ê×ÔêLÝFr62{øÇíªš º¦nP´R.©/‡‡dØô^pªí"`ïõ€ÅŠÞnøtˆ%·â}rYó¢:ÕuSãà­z·š¼‚÷30M¤Ó„•´¦`f*ÅDÚH½¦"vŠ¢ ˆ |©¨]KØ£­°¦Ú6ƒ¬‘Åf QÉVî~/°Êl–ìDô,ŒAz8é_ÓeÈyi†‰hÉ”§\Ty+E.%ä®§FìŒf¼IÚ‡?éŠq•ǺmâzÍìjÙ†•¨®afÉå¾r¹U“-ÆŠ§ì—©âW@ãi6d%» ff¼¹ûGv¾.SÅŸL{U¥NÕU¹¹[W‹m“—û/äLßJh”63B™5ïÞ™µÙq½«‘ÙŽ•â\ËLe/àj„QhhÛUšª˜4rù*Óà7ñ#'“¢*WšíX‰ÍµÌ,…ì È®zïÈÎCžîBãÝlŽ]€¼Ïf@5N’ª#¶¨¹¾ ¨”Öð^Ëï(°×´!£O®¤p[Õ€ä%Ø5§‹&l4u#ÅoBlÕ±ç©yÄÔÞ/´68S·Ò„Í”šÇ)B£Ã0-ÞŠ¡,,Û°Ó5Ìì6o¹œ¸³C>d8±S^‰òÚ‹Î)7Ͼ±o9qÆðœíUEÛ£×um𥤑À/òy0…]ò¸eÏ9žÉ2˜©šŒ‚Óôë2xMq‘Hˆ¸Ž€vùþ(Ò çáS³e#hEÔ …¢¼,`qÛ÷m¨ãɃ¸E±¤í`¢lEX¨T]ûªz|µÃœ÷¨á"Â{ÿ8Žûpi(˜Ñ„‰Ò\A‹jz}}݇òÀgúŒÒ½þ|ýË»[á,w&DëËXÝuLHšøÉP3—f˜Û8=ÅÍ´ªÛ8ŽÂIù]]ßÜ}~³yŒé §qe]g¼:s‡©1všDr>”4"ð;TÕî1ÝŠFN¡2Ó¶0e5boÞ¿ yËdHOfÔ;­‹ênêV•\ÿýåÙòì™JMÑuðI#)|xafûz?’x©š6V(§súð¡ÒNëÕc|Ì‹óÅ_´}MåäChÆæ;À/³|ØUÍŠê™›pÔ“¢0£Ø?ûÔÜc-ï Ò3Æu‰p/K/8PϨc¦1„èùº1>ÏpÏ`=€©g¦j© gp¤Õ½ñžôTÓÊaŽçc?g¹x96þ´Hëus½E >º¼öŠŒß¾½{{ñ.˜JЋ–FFN=l[þ.>QèL•-œQØ»öðê+~{ÉÉxvªËíŽOWÊœÄj¦nã5 ë̾=|оýzwýiðê¼M!9÷cÎûí¾}ºýñRDi³‰‰®“â¼9^º=ö°šf«¦ñ'Æ…5n_¾à–óÖkð2ìèk¬¹º‹ÝÂ*ky…õ(js5ðtãE +‘­3þAü)"Z¯gHIUŸIà'Ê6½¨Ø„q„L|R4„Ǜڙ:ƒˆ*Ø„ÚÜ<¬¯#Œ!ždÐãnÓlבæ&#ê3•Ɉ=†(B‘ºp£¢ ¿ŠF+žü^LÞ†ë®ma‹ “©_”iHÒ§ OŽ}úK ƒÈw¬_p³ZK[±áÉ4\ÄQæâÌW̽¦ÝË3îúpf9äËÛ¶Éw¦êz¼èÄnÄX±úqKÅ‚U”×øÎиŒ>oÞ+K>‘×zâ+Vyв*7-ªîþªV.Ì‘nNÃÓ-þáß.[× ÿ'KDzÉ‚¶&¯¿À,’êDyzámÎþ‡×T𢠲‹kg`;>úd©ûÕ3m'ÅÙž5²û›ÕEœÆEÏB¤Ö.=8ä|-˜ ʪnc4 ÷óy¥ÑÁÓ!%ÔÚ¾¤X½3UîLæ©ÛO_ß}y}ó.ºûû9qgªðÚ™*¦;S߃Â1-×UÖ’ )M\cwÿöâûÇ"Þ¯Øé«ÛˆÂ:­»ë߅׺Z[²àbg¨7 xÉÉȱíH”5¶ÓÁý¼Í`x ä]ÑBÊvÅZ×`ÃÆi¢¡~'—šñÇóý±Þf˜vï¹!/òŠš¡@"’.þ1ø0Oêøæõ?PÇÖŸéõߪ9,ÔS¦,ôpO¤T ®j©²ôp¸§žïM]¤fXÛdñqsÕ=‘Ù‚ ;CUAOMž3Ø@ÅìÈ"tÁe/I5{©«¦]ÇU³áEVhhl‡‡‘|xA’ô>Ö`ˤy“H¯Ì¾[½¶ÙÞålé‰/Ú½ŽF|ä8<¾t¿ÚÖFDX׵є’:¹¯| çˆ2ùäw GäåCi²ÖdHé¨{ƒ~;‚!û€r'é2ŒN Õ¨ë`’~ìà´ðr ›lWU¤ÑAÓ´°rb„㵘¹„¬'¡Öum¸¥¤È4lŽ/yª+¾ÀÁt®½žªÏÖV {,*Ò.ªh¡†bZkcïá› ÷pß~;g9<ù4Û¸Ùg-ù¦Á†‹¬¢1ç+~—Ë>âÇ›¸ft²Š¶“&È.į¿5Òeòe±1ë„Ê ¿½4-ÞÚŽ4cÔUm”„ ~•'ñ¢þ¡zÀ~ V|zÍÞ®×hô–lØyjú¸ˆ#|ø*qüáµTƒhþ )Û¨WûÔÛææò !JÝ>™iÛÈ ²ú)O|æÇ_"åñ%w×OELÉ= 'ÒØ|—Î&cU×|ØÒS]VÊ%§ø6|­E»£iÚ¡œÎI]ÅâL$ïÀ¬¯þ{«Žv– 8ø¹¼úY%!*ú>ÈÄ•¶×"{º¾¾ì2úÔ45 zSû`oô¾îÛ—/îžÀß…âôotLä0Q¶éEõ»ÞœŒî»&¼¿/Ãj·Ùs|¦3Ó 8ÙIq}WX~§{·—Vïö`žä-ð}7KãÖ÷RMBW¿kòtÏiUG7qÎmW–٠Κ¾“³Ö_D¤'\Ö­Iüæ)^ñNžbïwò4ñœÄdD£(NÐ϶½õÖ“XY1j²Î¹®‘Ö(‰¬djNxõ’®i2΢áuçqbF.fôúSoÈHü[Yƒú]VV§*ºùôyãÇœ·”†Ê\Ñu0Iõº!|cñ ‡ {ÏˋÞZu{¿zÓn<á…'Û¤qZ#¾U~çVѲêáóÍ[µø}OåõÒí\ÙZ΋·k/“4 >ä¬$d2ä 7SC¢ï^²ÂqÄxcBçñ‚`µ šèTôó\‡%ïrX8וsàIרAÙ ç¼ì»• ÉWo¦ëâ?¹™­6èå+Ù>èá~\Õœiðue+~)*× Š r²ÖŒ[š=Æ|Dˆ~ê?:êëÊ—2£f¾t™¼À‡VåEÄǦ:öƒõÊv—y+ ÑPU­4Pi<ð%ï÷£Ç¼9B¾´¨«÷Mœf¯Óê¹,ª8Ô.?Y±¯°¤n§»°§Ý_NF‘~Y0šYËgÁ‚•’*¯õ°c÷ê/ʆÉòéõF]M믴þj£õ×Éžƒ¥ÖüøååS¼'öñº²•U á5þ]“íE¯ˆQ·×Ìhh&švú%ÀՕRíiΑse;!ªUŠüª*)@“AIíéZa I­ï–£-_¤Àx{¾™îಠmg£:¹|áD£…Ï!œ äï40±øDììM+i^=ðA媌™˜L-²¿ÑCõÌU‰\5e;]!ªÍš–vBœüøWÞÜVm,ØY.ŸoöÇ›·â„“]`¶!ÎÀ‰´T];!qÒ®PÁÆ(¾Õ·@ˆ#ÖºgÈ*“¼²\ÿ–Ñœ?&šVr·ñn æa|• tYS]'¸wEb¢hZ™€œÊä\ç Ù{ ¬ÚùóDÓŨœ0úÄúŽŒò(uE;`í˜2úöåýÚ«ÞÖÝ®ÈÁo~ªjD>ºÀœú¸Ð˜º˜ÖhÃo®!æoÃ_rò‚»ó±¼|!z¸Ú)-”Ñu“óFˆ|6¸±áŽ]3qå"rž¥â€Á/"|ZÄéB¹ñ¤ívÁe¶¬o*¯‰´Ú‡/±Unª"æÄ_çEÑ+&'æÇ&¯[Âäg®kg’Ú¶ÃC\§¯eWqÕ$dÿ#Ò™¨Ûõ³լ’~p-ŸÿËÝ».¹$邯‚_k’™2U]]SgÇll̲SRUÎ(¥lQ¥ê=h ’è23ë׼ƾÀ<Ø<ɆLj {æ¬Yw‰ ¸ðÏã~óðª˜'ªv¦ª9fšœ+Úôä0¨.p ‚‡Ow·!–çÙ>÷YšÒõælæRýò”øs~ê=À¯MI<sŒêv&“ªºÊ¡Ê>Âù&uJÁ5˜=¶×òƒI{‘Åx BØ;iÜ8~“òå>óœ&‚‡¸‚Å«Xèº6Êý-²xÈ1еˆ¬¸C16ù§`™™wqu\Ý'£ö ¼wØ'‡ìÈñûrç}ïñƒÞ<`8G¯çÖUà÷Þ«À¹ÿ’hŽ]Í—Dß/Óó–v…ò-Ía¢;K¤— ûËRóRBàÇííÇ;tÁPLò-sËä&EE- sð—»ÛÕêó'Îs‰Þ³W…õŒ¨°žÕ ëÙÞo|î(Úù›CõRc=ãk¬gC…I…ŽŠ_½õŒ®·žÍ]Ga§ˆœMx"øÕ`Ïþ5Ø3¶{^ªÁBâÐuMÚ޶ -Ti`† “›‡;vÁ•P`·hÓ~ÇÁ½$¨Û <Ýo‚°&ƒ¦ µ…?ŽÆåæL†\dæß‚%oÏë3vnƒ¸Èh¼@ð‚'Ì¢ð#Wï ²…¸ß/0IØÕÔ W°Úþz4ÿ­¥«óà´5‚,{Àœ¾lö¨d¼³žw#x'âãàÂn€^»'yUÕJ™ ‡Ax—þ±æ¢ÎöOTçì—Œ)ë'˜‰r¶DÓ›5ƒK©>„k3ŸŠ¬;ô C,à@Ks »P³-ê,ÀQ™‡Èyq(_Dú£®¬|KœûVºÑ³…˜õÄDÁÁH¶·(ÈFc"“w°0Ä6´Uö K;Þ‹Ô(8Œ/§Ê"»§zó÷µ8êg¼ Âj°¦€7²hšº.1R‡@)\ ·ÑÕD¼…¾wÍÏB l x#}.!7ª#Œ£Â8Ú,EsþÉײ‘þ‚iRo[“n}6…ÏB , #©Ÿe½žÕœCб¡¯$}¶ŽÎ!XíRå1~?åç1&ªV›˜ Ʋm‹¦ó³FÓµšÃ%Qöä[êÏÝ:mšm×zV³f»…ºŠ“©ç@+ÏNž]lË*f\V벊¸˜W4æ“yTÜÅ<ø\ÖÐm¶A¡LÖ~ 6úùÅÑØç#I“ÃlTP&‚¼“…¤¤ÿ?©àìä*.¦žë"0—*(#AÞÅÂ'°83(û¨¸›yUíÝš0F‚†“ù&ÐÈ|ãda¾Y2¯n»"­Òòå¼uŸê6ªÏš¦ cì⳪¾f´­V Ù%£ºl­-„¸'æ ¬qcy[„ß*¹…É×äÃ×wý¢»zR.- è±&Kžõ¢gB°ÑÓä½wâÂ.׫83Ô~ýúõáÕê5–Ù© ã¥é/²âÒ|™§Quu8÷B1(Y,gÖþJÅn(ö¿fb¹½7«›äCÑæMýÄ.ùÄLÐϲ0Yeéåw]׿s!ÉÜñß„y¸yÜ'üÀ4l·>äpV:¢¯L/Ò†±\ß^!•g!æˆLøA3v00Mú‡gr×ADù´LnN]-Âh>à– áK]ý˜W^¤TM&×߯ÿ’A¬BŒß>û†Â™¨Îšß .ÂùrÚ>žHrwû·äýððX»¨‘×·Á‡œ÷\(Jý3üžßp¡ØßàÀw·ÅT×–¸Ýab×E„„ð[š¨Ú)w]˜÷WÀBi FWcílÄ•Ø_Û´";Z\”vŠz/uüv“Œ5ml0»áÂyøGe0iÛø,‡ÎgfbÀÆÉ-ÈD~ža&¦ºVVNA&"°ò‰71R´òAE›ˆÀÃ3ÞÄT×ÊÆm"œEãK¡ÁÙßHã¿æ„Vgmžné†ödºqhšI°j.œMÐñý;—ÃûØùߟ¨ZáOï‡ò:ã>R´‘1pgÏÒí¶>U†Æ5‚‡×Á‘‘¢ÇìQ‘À$ð¾X¶@Þ)[®“qÔú8K»bñ%Êô®‚¸ÃÉê/·×Ë àÁZ¹ÎÁ‡Ë †…ÕX£j ív mƉT•åÏöƒ87õ¶7Ul\úR[é`߻ׯª³ÎêG§™Åv^—Pi‘Çü6Ø ßò:ÔlT_æ5>Ô A4å%†Ä2VÄäàƒf3æÒomŽÃ£­+ˆÜè14Òœe!ä†Ù ù`ù ÎÅN õ6ùΙ–¸!ç‰TZ¿-ÜQBå+~í´QÁ ;QdH0GfžS+&õE^^v$±BÕ¶t¿ò]Qš3DFG?äa`¥†æC©O·[23gWõmÞea–ÀX^ÍW’Ê´?K ŸêÇ"¥ÄÅq—/iVÔR…,%Û´¤ã„-Y§[¯®á<†…ìXcTŒ`ñAtÐ!ÉRÔ‘6 ¶©iíùFFÃ@‘áv2\Æ…ËY8 "£ƒ Ø;!„æ³'åÆ{7µf™“ª¤²‚çòKë^¬×eKª^;ò+ºprEçÊ¬è ´àa Ná¹Ðƒd¦æÄ¡Šgüä«@Š%lÞ¡ïê‚ezƒŠ>{™Â¥eZm¡Œ âÂ&<¹<k”Tf6RBkÎÐÔèã¶^·ù÷Sîq«g™ ¦Åw3rÊ“Oðöñ$âáàúœØ_G†Ï’,â­gŸÖ†²ÌRÑBéT´„sàš!3ã4#e¼ð6˵¹2´Tò‘ÞT«~û°­0hfLÉD¿ˆA’”ëmÞvyH_pŠ‚ 8èh Uƒi‰ @_D:„6*ΓcM‹ÙL®Ÿ„èÌOB<”'Xç ƒ,rÂ+î"ì’u©BÅ0qºs r© ‹_ÒŸx_ý~ }©Â1ñŽÂä„ ƒ©ò `‚HR{¸Çª³æ÷‚c|sÃXÕf êp=úçkÚLÁœæ9°ïeˆ¢h³ÄfÐ~K±óóˆ¦j3… .s‚“®gÒ¸_`1Q5¦T+ŽO'¶¬»z c½3LWé˜o©Ž¨›çõÖãDœ®7g¨âµÃÃ*‡´ŸõRP/ðz¢¯&>7y%‚¾úüð·¥=åu›U0vð-£fýYRº´šŸÅ+¿úºö«´ê‹$¬ÕwÏ相 õ ìDiņÿÕê×FM -Dš ÷Z|ª;ÇE‘ÄÚÓÖ´ÛCåp–Ôi¶Ýùæo]{Á".‹²ê˜Bä–bz6°Û6ˆãÌÛwž³þ‚qRe[•v!Ž©Û-“Â(ÃêÍß©ˆ§Yš²Ý(.Š3©ñ5§Á™Ò Ìh|óQƒË@ .çðA$¤§oû2E°¦È£,÷zZ§kÛ-²(«ˆw÷€ »Ù= C’„* ©L Ö©H;;oë:¤M‹iW­ÓíÂЕéÖ/æf-ËóÚÇ»~–Vϲì-» )O¸ð_-FÇrq!bb±mó´Ëßfy™w 66ô]wš°1QÅM\(B±{I˜Ü.:Kx˜Åâ˜ÓAv‚–¦† Ç䯄<šæ )ë};U™“¶d;N©Ï}œSZ&´-O¤óX°¨ZhA„1uUqvžˆUk]QùŒÿ–ÁlÏ©Z2Ô sÅt®¤‚vs¢>J‰Í‘²–Eç%ªqÅ4p$ŽûcÆd‚°@g·% e‚X*ÙaÛ@Ïr1U·P„Ñ©:W\A†ÐS¯æ~¤k£!$—G¼¢’–7mÌ@Ç@0‘–|%©\QQ¥]º«DØm²>t ú*ª´…»bbËŠý±Y“ª®½ÎËÎXHhâ w%å4šóÏCG>ÝŸÒ6ób3c#eÐBUùJ({ö›Ä\s¤ÎTF&ÖW˜ÉÑ™OzTE€¹RïO´:R½eêÐÍLOYÑ­óçmÞxíD°ÂXè”c§*a:I¯³L²&Í·•¢g¡R8RÊÄ×EwÁ\¶‡FßI[“ºÅ*EØRAƒÔnb·‡$ëÍS€ùŠú²ù ¼l>¹Ú<9˜ßÂEb$DÄ„¡¤ªaȼ¹ h¶ù®xöž™ªÛ( Â˵FÎÀ¨fˆÇ¡lt+©´Ð(Ô®*ÔÙvú™¶.½æ–= ZLщI@xÙ`¯ YºžÅ`Äv,ªhϳãe Áf—&î‚ÚU¯†$ֵ谨½‰–ˆõòËå—1ù+G2:§Û£7Ey‰ˆº¥ h Ht^CÜAÍfxgÈÒ·8ó|Ç #]»¡³£ÁZÖñ¿FØÌ/¦ ÚÉÏ·S}›íŠ´Í~&vÅÄ–)tíɯŒªŠ£™Ø²^Št=‹}x"L‘áeƒÏ,Ök—nʼ¿ ÀÃþy ƒ’%?0é+&}%¤ôÊÔ«C©èÙ”éeCåiC…²1ö;³°bíz³÷*àSu›Eƒð\'MäTÑW WTÁI@7tÇ Ù U¨á»¡ò3ÃV³"(Õ 8’ª’e¯‚Z˜–*ëºÙ¤ÛÇ­y4å©.’¸T¼Bï÷>ÀK o Ìœüb’ €ð8G:™ÉºQ eâFÄž\–wë6/Ó—:-U I«\1šÅ1`nC±×±u>$¹âˆžœ:aM®K‹ëÒ~!e£ÀŒŸÕËMQŠú²Y Œ0¬ËýÒnг™B¥–Çø µ`)§‡PšÂÙ\ƒòœÍª(Ö$çÃÍcÍ%cІxXžXô‘Çšçw ̨¾h^0Œ”Ï>©§©Í„úãéü¯å꫻ŸQ†x&ºIÛÊ&ÊIuÎIÌ«©4(/ÑZ<².ÒÅë$ÿˆ_ÞŸêÚ©x]wHÿÑ‹YßÎÆ~]19`Å…[ä_) ¦e€°3S¦—&ü¨‡ýË‚ä5ŽåŸÃYþÙ•åÜÕã[!排ÉÔó‚“ö?§K"$q}®‹˜¨.°C]5é¼f'ªvZ³aã#¥OH?Œàû`ª¨KƒÌ£‡®¾$Ë5~зè&¸5¶ÀŠ™2–‚K/†JÿpìØ)Z6{1o©›fórÝHÛê<); –¨zPŠ,~ΊŽzžC7ªÏ™® Ûá'Iš¼Ê «êuÍöV{qÇFš9U–_òZö1(/1ê—xä=“)­Bžàò­S“¥pM­€òç‚°8P.a¹‡ÝÓÍbÝÓ;¿c€ *àªüºÄóf:XbÛÛ/ê ’tùÆ/Œg6\’(búBX7?‚5ñ«©Z³Tj2ŒÔØËµoŸWèa·Á³I0(Ûx„ŒÑ€ŽŠW›0Õ] 27*c¾÷Š1`¿‘ØDÕj<æâº€dxÊkò“{aÐÔæìgB}qà™ËËS¿çpžëX/†ú1ÃÞáÒ‹Žïoùü˜YÐÿo²NO>ÜŒAiì*r-E>íúUëµL´=\Š]—ðãýÄbH½U¬álÑTLæP°æýs¾… ½º”<²Z¼©³!óÒ¯õv^Û „@X äžTFU£Áš 3þ†þ€€Ñ,'ÍŃOÅD’<ŠíEó-Xd}ÚD74ÛÓ¾IYÃÅËd~ŽZ·®¨ÎôSuûâJ«W´’b|û•¯Õ§vvMVÿRÓÖì ³Ÿûum{ Yfôƒø*y¥ï- :×Eýöü§ä«x"äv·Ý¼®Ìp£Ýû禦µ#í_‹ÃÓ鈋+6W¨n·osò½ÄV‰cqÍøÐ¿_þäðÓí6ÚEˆ±ó©ë‘‚hév©Å†6=y^QwB'ø-Í3û6=²îcšj«¿~Lؾ('‚Ù&^€#—mxu“eÐß‹Æ y§›è ¤²/p¨gw§›íÊŸ»@fŽ•·s£´ °>¾ 'Ù:1+²ç@fŽ•ç’­I¹ î˜bmH)C*ºñªvu(±ÉŒ*ðKøRÚþµÚ|é¢"(¬ø(Œ8‘*S‡³,‹8R  s"y#2"d“S¬ÑÉèØ L@ˆÒö½ }ðd<æÇ õÒÁa·Ç~P³—F8[!ò.Ÿ‚vbY?U»¶–1pܘ/Š,%¡IåÏê)ák¼+³UÍ~}ؤÔ47®"ÓLf[H;…$BбN!lÙþ;cW\-'±gˆõÇÉ Î¥lÐ&õJ’žÓ¢—»‘j‹3 e¥` i¯;Û´êx!;×pêª8Ó„s‘óÙÒ­Ä5§M ×S¹X$$ãAoȦ|Êò¹ŽQ4œ¸ºû^ÆÀñcý¼˜B^¹[r‘í!?†V#ŽW±Wý\Æ\bS9¬ £`”„’Ò{Ãz`,×¥,JªW(\Á‘aL®säÕim™¡NÔ'1›”Žzòù­Ì3f•u0³I*ò`›7} "ÑúÎä´!Û¶h"ÔŽ($gEY?ª*N|;§œe î_Ç™”¾4g¤I·Q¸©@™š½äô{¥»5NGå!p,‡t"YªfÑ”›K^ÁᵡŒŠÚIÞ`æÎ˜v€X´´ƒÞY@¼7tuu@ a!vK¦ãa棅®\[?¿¸Lãiò“I<ñvécòÇ–ôó*Ÿ9ô‘‘H ñë9½~X>d6’A’—ž×¤6O8l»Fß—õ&-×ç´-XQ `>µL}¬È³UÞ1îþ¥9làÊÅ“^OöÈ–\W]q8Ë45-Æñ÷¶€Å}Ýx5V„H”»%lkt¡ü"‹nHÒNQtKfæï#efŸØÓ”e²Š_p„V®TåC%þ‚_¢­¥¶7U¥ƒ¸>°šf¦X[—`VW_‰Ö§UDbzÆk`oàˆ1Æ2÷^ØÏå[Ï\Þ¦›MÑ¿cF]~Ü0~o—>&¬7ÛA†öçÂØ›Rìz,¯®Ûów÷MÄ;‚6?æ3Ùö – H#ùOA´Žý6€Ê Ô2¥±¢J틤&Úå^O±¬ëÇSãÈk.àsUy×9í´sBXÄûëUrsÿׇ·ðŸÕÀ†VܧåBÙ#yÜÓÅž )Ñ”§½Ã…\ LÜl={å`zM[——ÓU„éL\5Ú0å°ÈÂ^‹KÕ%'<˜v¸îk Á†ËóÝ%âw*K ¿Û·h0ñ*ªþ2&m¬zÙ|~ršp°ª/ÝO4Œ ë£M>C·j]°÷;ÀtÌ2Ui¶PœÅ] ›YŸòÁ?ÊЉÚ,§Tg… #Ö¾u9mPš.D®©ï‰V¤€yHñí”òK?¯’›‡»%ó\÷YÏ(Κ鱿ú¾xlë¯ÅcÏc‰ƒÛe£Ú¬ý>;“ `{ýšü¤×o?üÞ+»ßUõšüÑï‹î̘xmi‹4y|ÉŠsŽõž&>vÞŠ¿\ø’øw½M›îÔâ›;»þØ‹Bêz$-§à‹|óíQŒ¹Ùy)U+ÃM‚ä“g{2ŠòUið`1 <&ð‡Hú“v¬êý Ò|ìȬ·`4³÷¯l‚GšgŸä¥ª3ç*ÊKÎÑiÿÂ'ÿÖ ºNd'EªžÝDÅ”à°Lãkn£ÚÄ-TèºbùHÿJàùU^mÛ—¦Ë³ab™×ä°uˆ¼I²—*=Û´,_Ø8¶»vðÛˆÀÖÙ‹AÓHG•ãû©Åo¶˜íÔ# Þfè‚2Ò˜5J ¹…{“Á½ìt­è;ËäÃWXJ9Xòv› É¡)ž¦:ái=cÓù'í°™_•gÿoìý3çmºÞáƒ5›´Ænà2×\†¹j±¹+Úü‰fn1UÍr÷žöpŸÒ—„ÿEõ–M†»<=lÔ,FS¡±Õð(ÌàsÚ4>+z“AJ›?ß–õ)KnŠ69ß4M¿0<»¢Ó2‡–{ÕÇ´ñ_Ùü¹Ûº° Ú,-›®º"ÌW}[¾iVÛ0ÍFMG»ßïxä³@t¤¤2äηLPÙµïJ*$ (hJ¦mísq£!Úš}çÏÞfy+~öLÞ;2ÙÕeæ0ûcÓ^àÀeÕÉþ„‚÷´GV±–œK㌧Ã(J6÷µ^W_0_kQ@îù‰táz)ñ˜¿,9Ÿý³f»G<Ëù‹‰¼<]w.2Ö¨Œyrb[í7ó®4«ê Ò_W šµ[¯ `õ/öÿHªpbt_·/Aik±SÖU¦õ·F·K÷‰P(râÆ+ MHVÆ*<§@:.L •ˆ«Õ»=ÛGuj|í,XÞ‹3Ûÿ¾¥Méjj>û•wÉûÕß >;Œ‰¼32IÜ›µÞEf‚°ÀjW“ämRÛbs‚Á¥ÅŽH'«~ëëw_V¯¡Ñ’õÿª¡¹1ïO…;‘ ª! 8¶@—æoÒ@#©“…‡TM‘_‹ý!¹Q%¯~½‰–!µÙÇÏR—õÑÄé'~À‹÷D_É^3R¦¾QHºœIZZ¯@àÒôq¬Xò‚zˆÁõy}x·WçÕͧ×ÓwAìù„Ñ:Ë›²~Y×çÝZÆ;ðuÆ"â‚oæõ™«Þ±çÉ7á©ût{(ªœÏ)Rá>\ó!­S‹JΊÑ>ó¦MÛ—kÏÄõJˆGÐÞˆí ¡TƒÍCá| *ÚÏ»ÿJÅ­`ü‘+zæ«>m$Î:šm¡«žà|X, ¬\öòôÄFQÅ!ÉlF±Sé,%®Vå½ëu‰+Ë`‚nÜ,­– V²‡Ö3(Ÿ.á-S4j[÷:²Íú¯ÿøI"âøú wÎ.\] †ôÝÍ(Xrøþû XyL@°¶Zzº½Pp_wøLµÓ:–Ž.‹ÎnxXò#m>UÂaÂTÉ,‚§" û˜rï¡KæIt °À¬Wú:­T–-Ñë9ª½rõí,|þvc P12­r¹°À­2ÄØÄÆ»O«>X.~^f#øºQP…aDY`¤ë(¥h3‚ᆲ(Ï·¿Â¼Í{öþñ’(êGG¶!Ž ËuTáµÆ¹ ÓÀV~Ëרªó@º¿²”´FÞLúÚ•Z(%*J'š¼o}2‰Uo5ðL`Ý<¸ìM@–9 *Ö’ÇBøåBö¡Àâ6Æ@Ò[*läÎdí´Úª¾@IŽù§|J›_ˆ¢L÷sCìF^4#¸|8Bƒ0‹´Ìs¤gÈžï¾­’^JŸà">D ‡íÕH 'š…Ø~ý~ôÏ_‘×¼f­|^Ñ$­«#íxz )s@.$Íe1rJÆàçLmj±/–êJÍyÅJáÀõËŽ_»–zŒEvƒÆ4ÍäkÏäâÐt˜Ñ„R0„@C»ææÖpŒžt+§ú“'˜ 'Lîó¡Põ6”‡‚L ÐPHmÐ_q›Mr÷™MÖ¶uéF¬ûrH(5 IŽë¨ôÚâ WöŒóá.B"ž¸¾ B5Ò!÷j*iþU…Í´Ú"žŸY~óX©ÛIJa±Ý¦‡ÞR³Ù4Ñûo·lšj—™¢ü¼0c2XàЋ÷AÀÛÎ2cÇAø| L”¼‘±ýÚ"º5ð»:¤Ø©”]ÑÒ^ð¶L YÓòþèI}Æî€±’eFöˆ&· Ùó×à‰Mˆí÷aÒ ¿´·Lîqd½LôþFþ™ý‰&òzS×a›g`ìÇJs›É@"©~Mœ»z£œíJ9 =Í(h–ëËÑ ›CšB“6Ì"]„ì–w(Ê@ª ÑAiÔz„~Ýo«¿$ƒDñ¥zvóô¸’¯Q@iSÚžž¶pþÐÅ-\ýCÛ¹mYWy˜KLP(·hŠ¢·K]Ivßîßö;˜Œ Áéêã:íDgcå»°šÌ†ˆ¢kÒW3HzBá]Añú‚`\æàY€kâº%Ä% îPèÆ«ØWŠ?x`­ðönïM{~;u¢I'¤É·ÅNÄÿ"Þ.nÿfáÜ`Ýy‹>ëQ†'üCwPšKf 0r ÍèìSÁ‰;FA“´-ÇG¥ÌÎØ¸EÿµßáùÕ5«â÷~y¸…´nòÖíž4ÊfMQLÄÀvx¦NÃ3%ù0¿Úÿ`g¼!ŸŠÝ·N>ð^~˜àøªË Ð<ŠÓo -t°è­f:É–›—¤Jl’ñ·ßîÞ9 ®O«K-’&沄Á½8ÜEè›p”=ÆíŽ?InÙ':!Ð&÷©‹¼Äf\æÅä·Ïy ñg§³™t¯ã„¨‚xè*òL€ÒÉGi–6ìDm[E÷HY=Žß(5õýZç¿7~ã†AIËžì1%FÔøha)-?Gjßfá0ħÊÌ´<\·Éeä,¼”s L¶m7KÖaUÌCpPRÄhu?<§ ÝøìÖZT—ùµ ѼÊó—0–Š"×`üVô7›úõîUу ôØiªµ©Ó6sãØkÖÂxŽqp\{-µÎâ¾JÓØÊ½óNM ©Ò†å°ð.² ÅQSô1>¸ceBr2ÝÒÕU¢,#J=ϵÿlÎîtí}šPrü Ÿk]4Ѝ¦(j6òk}g†èð òÈ¡mÚš­ºT1]]—$<O`0L¥…Cû ÇãQ{Ø¡8§Š†çÔìÛ4Ë#ÐÔ‘ðL…Þ(¶Ÿ|úíþ+H9ózJ‹.)Ï”øõðƬZ’Qv›|Ër­<½á@VLÃr¥Š€!Åä‡K+^þ`K›íÑF«TGý\mÃ|à+wGÈãɽM{"¨CkÃB0kÎ,PŸõ Mu—Šÿ€î„ʽíÜA|îüYxºOq0¬-|z§Ù™ÕrúοúÁÉ>Á“wJîøÔÃ6çÌ#á`Øž#hf²nïoPónÒ”s«þDÇ ŽÃIX•žr@Ö¯Ê]i5‚`èÖYM{ù2eÚu)Ä–‚¶™w+{ªo‘c=þÕŠ„×Pc [©‚¯›àm„ _NÞŠ¸¦nEܪ£ˆl‰ºpÔ¢MŒªQáÉgTÇLjÏ bÔÓqf“§ì*ƒpV ;U _ …Zp÷H~>´,pÈ;•ÉhÔE0ñIoBÂÐ×ô_†AP5õ6ç‹ÜòÀ%<¡§8ƒåâCoÑÌÖ”=ð¬/MÞv‡6OnÎÄ"!ëzÊ9!" ‘äW]6´÷›Ù>œ†¬hÎ?‡WôtAÚLòî¾!§†-ç…³"[R—æ †a¯£-¬nWwóåº#Ù—+˜ ·ñL•‰šǼ­ò(5 AP×S™ò7ò~6y¦DÖ<ѲÞ>fõSBq„ '5ô!ø±¨øŽZäh5s,‘õ ¤.UJKU æ]Óí¶>U]/ä‘Öe½ßœª¬ ït‘PîPõ´F·?ŸÈÞË^؇arî¼øþÍÎCÏØ•>ìø$žM¬å2nÉq@ý L{ó“êjSÐÕoöZ\ïä¼¼SuMxw ‚Hœ^e¶Ÿûé«)Ú€Wï>ZºFHжnld‚Ü\h©'°÷-X'ðdštûû*‚³¥ APS›†õa…<ñO>ùÅÐñP0D@\MŽÕ—«»Ïß”êÊ5!H„)ö1† )玫“4r ^Ô›«nÌ‚k â:c.5&;s#±ê¶MÑÀÖ¬ícP’pìT­ñ|Û×Û‡·wÉŠ¿Œ1ïv>BŸ#8wNaL¥Ù&ɨÖµp¬Þ„C3íM×Ö´]€lUlc¤îE·W²¤.•‰O8úÆ:˜",äyêð¿Yä–&y»j<@ØjóEßÞ­PlêÍߩȺÍ!Š'†‘¦!æá'‘5 N ¢ƒ¹Áp¤tÕ˜u~œ+ |®/X¾º`fŽëvÆü2†ìÈ7 ö÷ð¿Üÿ²\Ci:1ÔƒJˆÒ׿EYÞŠËš)h6_4dgcгì:WKƒ¬ó¶CýK¹rÈ…©-wÆäƒ¢3;¹³â­ˆü¯‚cÐoY{ç²âÕ¥aÇÉÆúv6½4Ú¶€ü4R_¶¬Ï;zPpúŠe´ÍaÝÖ)²å¦CY„ÔÛ¢ŸN¸¶ÙƧWÁ¾äÏ ÇÅœXÛ}§3«º* –³-`K4Lª¢S×Ú*é_%¯>Ýܼî¯'ôZZ™|.¨ÐÌc9’î‹ÓE8³¸´OQqIgž#ýn¬~å×&äÛSyŽÌ)2ÞKHÎEßYÀØ8³iÆ6!UBRÎe'gRd\?§ ÊÄ]ý% j°  FtïçÏâ‚d¹Æ{k‰¸As2­!éJ)?‚‘¸ùЯäîó*oá²8e4UhÂf87’mfHWlƒiŽD{µ1Uå7ÉcP+2R_ ttèQa~DRÞ€èm  fÑPMÉé¾L,»:áèP '-Õ&%Å–—~8±“œ×%²”xX<ÐÕÔ)|bGÎG КWÄH“×!ÒY¹4I^œ kÔ K¤Um†êÛý¿óCis³ÆnÄ‚*¯)’ÖdÞ­g53=ìHªéãÏ2aéIµQ‘eQxïš»˜œ£ýNâF.’ mç|ßxö nx|ðñál[Q¾Öµ—ØÔ}Xë{~ê¸Ê8Aìÿä|ÏßÀ(ö-­D‹º§¹ó÷²írHž$­Ö¢Âõ%;…X`¬(Œ[Ü'Ê_±cå«h þ§etýð ‚š¢dïð ×U*´ÙR‡@Òmè7I²*jÂX"ªhÌ]åËÌî‹¶­Yb ilÆä7±5mŒ%ZŠ~4àbée;ß“m¿&ûrÃè90Ó#ž‰B¶’=®Ußárië¡Ó–³q7Luçh(’¢j¤?R~BZ³÷QÜpV³¹PO«Ý«™•Zt¹¢Ÿ¬Z²û©¨²ú‰¼¥ÿäÏ˦jâܺÛÞºßùË…/•iCÖMJÈSÝfë²®O þÃ&í±—„ìµ&+§hÚ"?‹SŽoVIÿž_fÄ'÷®84$ÎñAjsVs!9aA† –®"È—p5_ùؤ„ŽÖÅ®¹« lûU¹À‚þ»NOYÑ åóδì8s¬À¾‘×+¿á9»\åîâ (N] áú"Vu;')6'è½g9Ù¶Eã4òAYyÔú;„`¢¼£ó©Ê[~¸Ý§•<…¡Úæm‰àŽ/‚cu+­^X©ö)Õ¿î翆GBºEP‚&•z.;5¥¸Ô‹Ú,ŒâTitQCÎBj%ï¨\òN“ãÝ‚º<sL™Ìò]ë°ecVÕʆ Ê!)¡ÕxÅBÔÚô=¾Õ“›©³Ã¶Y—9mý(ŒÕ­4zaµ3&³ÝŠy÷ëíCò„Pæ»ß"kU·š¯ß»:ÔO<ú¼<./"üŠ;]Æ!Ë@”oß°ML¬+Ž03ïMNU_$DŽմ¹[}~ûí×wðÿ¿Ñ®Ò©â·D©½*T*UdÝæ[è‰z«[‰ô¶Löi•p!¬ù¸\TiQ^2ýyå¼áÿ›Š Ìf×< ˜—õF + ]C»Z\P— ÆdaXèD&ˆž€©js2Ø+dø€Íð™ ᆕIGh ÈÀ´#dÉÖqib%5RáS %kO¡o©¾¢ÝM>"àQ^ |„ðéë˜Í££qfà5–2í~„ÑÕ© ñ~®–~hƒÞÿí=ŸuÞœŠ2K„Š„ —íE@S¶/Bo‘›ÁîŒÇnfI%sÝ!êb½÷¬œ Ãc˜›ë ‹dsYGì /z~¦«ªV›™ åÊ~íF[>,NØv•?õë÷ÞöeCê ø±Á=UÓÆŽÉií=ŠƒlT›¯QFw»âÙÓjEÕn62»ïøµŸ¬Z¢‚ü/¢Œ'AU C`ŽuÓÖÏ~ùDÝJ Öc"²'ýoX¡D~ýúõaQµØNá~§ ÈÆÉ¤6ÞØ=løDh·ÿîn…$ø”oÒ&löof‰œ®4¦F9$T"QDˆ)§ó‰‹82ýéÄa_ ðøò¸Q¨>XÆ,ÙÐG.÷9,B È…i†“|ô“…ž h…ðPô$˜VËaàã_MÔ­v÷ˆzìîSÎÏ%ÝÁú8Õ„JeÝ¢¦þa[m‘–Å9ŸXô£f°óÓ4D‹#Ÿ1?«Ì_®l'TT[Jê::x(<»^u‹AXô ô”wK¶§2m“’ÝK,ö惤Xmx¤¥/SÛôÒd“n¯Ú|—·9»I°Í÷ .–„+Ž´"ʳuÖÂE´>Î0ØÜ¡Š‹lÛÐÎ[÷T· {ʳ,‹ƒ±ŸøUuƒžÕZ² „°!MŽÔ¯,![óÝóûÎûÀ6®óèP~S¾{´ãúp™Ç±q3hÍŒq¶üK¾é3$ôäùªž9oÊ×(r|o^H’Mìôy{R‰éOÈ¥¿Ó&.Ü‚háM&py<$Õx.ØoýTòâ ŽX Óz‚¾ü,X tMšêHáaµël·˜3'ª]mºÙÝñ;íÃ@œh/nf §‘†Êå {uÿׄ¿BqÈÈz›úmKÑu­6sIÕÖÛ!ÑÍ©;Ðî9ãÉO¥'¯no^óœ_ø€w9yìêJaþ”¾Øƒ’Œ-mX¶h–­Îò‹Œ77ÇñKTŽÎÁs–Øjse¶›hkïbP£}ϺCSµÒa‚ý†p…ˆGP=ŠµÈ…ˆF£óÖs·çHyÁn&Ê“~É•¸)ПN`ƒs·X]»–¯1¼êMíÝ;)[y Qž"/ÕöÐÖ›ù³ëžjm[Ÿ5ù"ôQ”NžK ª¦Ì©ëûìÚéUoi›0„©$õsü g3“J1#¿æÏpÛhBš<ßäÕ¿b-eþ2}”s¢“ûÖèØÅÇ©P›r l¹¦ßÈÖ%Ρ ÂJVSÐn ’oxÌ:wû!QcPpðL˜–ñP¾KjÕ³üŠfY×ÍzsÚ>æ¾ô&v^ƒ¸v%—Ý,!ØI)ò:-k,`ì[^ÔN‡ÚÂv“‹É–h Ó좚l?Ò¨˜ÅffÇ HH:ÌÀØ©Œ•ú±;¬ÍtmA{¦mL%ˆg’ù'6ø¬ÏÄC=îæj§|'`?Öt5¿ózÑíñ~§ã¶6Äïªþ²ñLÅ a¢8Êí{žL¦v.ê}JHBa¿úöÉ:å0¶¢ñ¶¿AÚÝ,zŸÊ Íͳ"í^o§ôL—Ò*Þ×=ŸžH& Šãá¶Y^×nÿ°M_ïÛìónÔ¿Éi;Ù¶yîÛÛÔ”íÖsÑżÃŦóÙ-_Û5íãÅVÚEë­ómú÷»üØ”Îa»–1ìL4 Tû%5ÜHòq¡2›*o³Ó±ñ¢á~ͯ]ßNdöj_czXvGŒ°kúb©°Ã˜~7¤ç?Ö_6~f0ªPM‡À9-O¹cõ|””êõlÇ:M—¾ë-|`/¾ÄÿñrÒDuÎGüŸ !¬‡†ó¸šÕÅÎf¤3wEü .æk·DŸæåFI[/¥ q´O­'VóùiÆMÚm8&<´]Höš ,0ä'؉-½GeÀ%Gá¢ü!”1 øQ“SYJ{ÅùÉdóâdtYïÙ©[ÿ˜ ,˜?È«7‰A;ÄWc¯ÄjlRÀÝ/bÑŒßÞ3³aÍjY-<#~$ûÅb©å½ß„瞥 Æ0bF{™C-¶QP üf;£ÐgHƒ²™c’ª1SÖE&$‰›@". •®›Í°/Ï×`EwÁZ¶ûULðãñ´aAhåôÿÜÈUI÷ÌCÿ Ê8#ý% BÚžaè?o}€áX›µ£ ®6òJANžB,ج(Ø]mƒl7#Œ„ƒý·í}¡%!máÓ?µâ:l 8k¿t1J[Ø+d¯¹ÐõH–GÕÊÙU+J„pvÖçToh]sËU­ ìc(“°AIûøGÌßÀ/Œi…ØÜˆV¢4éðÇZ×\Ê?ÝQjPÉ뱤Ìú8½ÿoÄ{·*åéÙ쀼¥Ku{ÙxµúpÃãÖ¬ø¬&IVïþýÃûD]Fó.ÆÂêMÏ…ôÐß…‘ÃGåÇ©ÛH¢ò+!÷[~ ýÅÙÜÜÜ'pm Ü/­ˆ‰Ãã-†fºpIÑFf˜*”éò<áÕĬ÷K\éî%GõÆCªW­´L”ùqû–ÝÔ´Éפ®Š­ý3v-þÉw\æúý ³ÜçÙ×iš.¤€%įÇâ×½¸Ú$ÝÜܰªö6iKkÂn<ǰôý¦$Ðà4…¶›íËûÕWyY±ˆÇ‘å<—µ§ŠÝ6=¤O²úü©¸u¡·Ù7ëtÆPÃ@‘äjBíËzCKÿ_~yHR~1æÕ.=åK`ò±/Á½PÝD`©#á¹ =•1£zêêª>Ö'á#±ä øÉü¾*éóu'ȹø"à‡)ÚŠêØýrAºùs—²M{¤>¦N_ç´âͰ„àˆ`ânDçÊt0*/ö‡MÝ’(Õ• ”ª®J:ÝÀU¾_‘ _Žè_öú-:ñ ¦Û²€ žä„6†¼|.áÉïB´þS%÷¸Cƒ ¡äóêO?ÀéN¶Þ‰ K3•Z’€ñnÁ˜}ÔuÛ.Hzý%Û²¯¤Çº r@™.fO©Šì\KŒô啹‘¹AhèúÑÚè²÷+•¿¡_{à=`@’!§¦©[¶tû%'+˜”ÍÝmrópçÂv%¶ÔW¡}€ *Ý­qÈcù.Þj‹Í©ã‡ÕrÚh7ðMò¾;¼I>Þüò&ùöñæŸû(ëºH¨×É«-߇™öÏXA*º$«s2°º~íâ¿òÇh.4A¡¼¨)ŽÙ¿¸êê+ðu©·…8áxH;ˆ1Û_ššnÙÉ3šÓ:Z^ÙÍ©NîøsˆÀ¢s$ѱnqÁÁù9B >;'áó$ Ÿ!ß{@§$jñľ+–OfÖ_%FÝäA)õ!óu‘µé–‘\¾ÜÄQ÷ê ½¤oŠæR¼ûrs›ômG2e˜ãëqR…ÄsÃÑÙ RÞ ½„¿öy·˜ŸRv øu9È­/Þ¢ ÌÚýÉÝâgˆW.4E/!É4űnO’–ÅŠ}ŸA@.Þ\¯x·Ä™3ÏEåv=ä Êó`‹Œ ª3wbˆjnÂúÓ0O“ÒÎö«ÛÕÝç/¯áH_“·Ø¿ ût¡H¼ýx›ü½Þ7úØŒÚÞ䇆ô’®k*ù_nîÞ¦"ÝK½È€e½}Ìê'¶$€¶m‘¶IwL[ôË¥ ›UaÉÎ’|‰3w,⾌î,ŸAÒ0eÂîLÁ§ÇRêÁÅ}ƒN 4•€ªw„JÀÉv¾Oþ!Ž®‰ˆÛJhu Xn&}u{÷aõ&ùÿk ùé¾>¼ÆQ.‹]¾}Ù²›h«®•vM+%AòD‚ÒÓ{ÁU$­]âÏù®õR™ÙâÊPï†9ˆÄö s/Êâ$<¸ÀHûßÍå;p=tTÞ  oPçÍó3›Ü2rfBì†VzÜp©²§\,—‰¹ìs îÈR} zäÁ8ªèo$sl°h#™åMY¿ÀÞE_*&Bš £õ—ºîôìy·úÌrᨴy¶+È¡ïŽ)YÁ“×"âÉy}SB ©D‘2—µ˜KòΟ+É;,-"‚a¿ztbzT,íãÂiz-P0ªª5(í¨ÞÙ/^¾Ä°N»6&3½W«[l?ƒv‹i=ìÍXÕ^¢Èd-—µ XavH@9 ö¯ò§ËL¤BÜA7‡ïãþV]ãËÉ€±@JÕ˜Ôô]Ââ ÃÔ䧯މ„ØÑ]`0l…cÔ»vÙ{q®c¹ÃL®Žåõ=éŸû·K«é_½x®õäÇF<ê¢e°Y?ZTù݇‚ÈÒ²— ìó ¶~ÃöŽÛÕ~å,ÙùWy#m+-)ÛOœAûÖ×eJ1x~÷.aGõ LÓž}?å'µÜ;síÇ®»Â ¬^0*Z¦Xàö1 ˆ¬CËNÕì0u‘¾ƒœß™Åö“Ó†½$.žý¥Ùaå‘^i¡'ÈÃÉøZlè+zr 8!}{Í”p8’7TõÉÿ5Tô@C¢ŠV=+鉾•À Í#‹å-¤”˜ ‚wbÐÅ×ôHÞÉä½X3U¶sScÆM0O–7°e¹ØWo’SÅñØ?Å^L‹Jˆºä˜¶pyǦ…S5>œ V⪼)Wjý.5Ûëpè\hfž8!¯„¦-Ô–Ø )Þ|EtÅV>¼bŲ:ĬÉoLîºt{à¾`¿hý¥wOØz›ÓV›ÀÞâ>º|HQp‰ñït‚¡m’¤âŒÉÑþqÚ(R3ul‡긜-D¿I ¾ 5ܶdk‚‘S5¼ýµAáRyÒ"³{çSv)[àªÄü,ÍåmÒÎÊPÚfò„8Ÿ¡Šä&ì% Hu«;ô+† ßÏ¹ìØ¦i¹¦Ê:ëp÷øüäãp¶þD‘ëwñ¥!7ÝøšgfiåùÀ¢NÞ-cë bpŸ‡>v'/‡ô S¥¦»ÿú›¸WòBYfƒÿȼÅðld¦‰‚ÁFøO‰ý~Iù¬SÄ¥9½«Çq•¬a•˜éïïo“ |>ðÑ PYdàRiFmÞþQà¤y+g"*-ï ɬ5gú$ ’ˆ‚ά¾‡šQî@”½Tr¢É‹_ÁÄÁZ”æ*ñ‘¸¬Ëi5õöÛ—”~c±ò>—W]dÐ3°R¥¦u}Ë&ß$¼Î†ÙhYm79DCï+nÜZ_?-iöábV5Ð Nq!Þ›¤£Ã˜Šþ)Þ‰þ ‘Ÿ±íÎÏæfççY\ú| ®‰ñ3ü_©½^®¼^ª»Åkn“–ÑZ¿Z›Ú½`®S5mPš3v¶ŠW:ÕÊü£nuòTÇl§_}<ïÕÆfþ6gþžÅ¥ÿÇg~M|ÌüŸáÿJæÿçåÌÿÏK™_|Ð1ó›´ŒÖZ3¿eS‹š¾`±Sþ7(ÍÙ;›ÿ?ñ¶LÇ:þ}·¢0Õ1›l- 6OIiÖïþI®ÃÑŸÂòvSì‹TîíÂr„á¥ëAézª„4¸Y§ÍqnKo[ÇKföòãÈDWY¾+ M¾y¸Onn?ºQè÷ª³`‚lŒ`8bºª÷žÒ™ nÓ€·mNêS;ŠB³d\SÓºíe½ƒ Sy p,UEåÔŸ‹¢\fÌà/á ¹,¨–¿ªÎ(²ø¼|hXN.«jìð»_®î–½À5]ryCÎ[²fqÉÉò•(>Xê#M¼ý„ûì ›³µÜÅÂÁ‚‡àaÒ6$££q³¢é'ÄͧB—LÍj¢$#nFÃÑéjAÕÇÚY²4y÷y%³®ïXÕñ­®ÈRuµê jHÅD"VLÄ»b"ˆŠiàë\ ð|z>I ˉ$×´‘,r/zâpP—oU]Öû—8Lç`HO@´Õq÷ëðvUJ²{ù£ØWiaÖ–¸@ºùAÐ} ßÀ26ñwÀ`Ö%©0ûPœ–Éêjj6¿ýåÓÍ×äãêSò@ßà³8¯Ó²HCÞ1‚‡ÔÐ(|¼KØC~r+E׉ Ù¶EÓrÑ@pd¸Ê˜ êÉ5Ñ€G@ðM@|½_ýÊözüå†þP§#>ü“&;ÐAÌB 0dƳ¢!@LF,›A^ª-ÑöÛæ°°ìMu×i’»]ÞÂæ†TD;•‘-»Zð¿]4é,íRÔQ?'ešƒŠ¶c>•aÒ}J–˜«×e–q2C!˜U~ßÝ<Èm£û'Õ³¬ãöàªÒ©ÃÐÑÖã0ÔÀÜ•«ê·òxïÌ“ƒà’´Høñ!˜>ž˜†S—8Õ ø#·ð€`~Á‡ñCû`BDæþ¼Ü]A‡5ÏdYW$‰3Ûºª@ü »“ÃéNÑð|]Ó1mC¬L+üz£†kW7dU„¢ŸUÎE>ÓC™¿û´Òªjß-lÑ ñY4hü ôÃüùq£2 ¡ÍWuµlȱð©:À“k$’ì »8Ã{E‡4±CêÇí`èòÑjaÞ!Õ§d™v]“E ©Àà9‚’Fðëׇw}7="KÄFy74Ç~Û¼\kUO/²‰U:ŒÔ:=ÎÕMIÿS‘í»„¦(Ôôû«ø£¢"]Z–â¬&\êmbßÝ ã½Ï ÍWFÆ\!ï¸U9„"”CÍtƷîV¿¾S àΟ&°¤+žÚlRo]•ù9/e¨Éðñdצ;ÚgÕh˜àМ5e}¤Áß(í£/Ûéb°`ØQ¥qnåY»?”݆"幤èP¹Ð~ï6Ýrˆ'[—cÈ90߉ê¸oÝ?gbóƒi'ê\U ;†¿­›qûc™E¯¡Ò€‡ldS¬p‚Ês%fW´ùíýôqFË"¨Ú´áa¨´µM"œ)r¦u‹¯†æH—ëj© GôñBo+ ¾¬ûÃÝû²Þ¤åº…w1œ`Àspƒª=Nvþ.i™…þ¿þ[Ð3˜Û§p¼e­ó¼é»=ìÜí³|M\&¯t_mÆÝ@ëç’¹+äÔBÇ0 ±Gž÷þ%DnÏ ÷‹†äà ±ÃiTH¾=µ0S-åúMBa•"Û¤«Õƒ9±ª*q¶,JcõH4šc0š½ê?*}Ùcqö¢;f:”_ÐpgDèH*‹Äj„åÀLjšvðArÊ×Z3Žg»ïŽlSÁ–ÝJ@Õ´ÌSWÓFÃÓIÅ1“²T¼› 7„ÒœB!‰*ЦëuDº²Å2¾b%UQ|½}€]ò¿½{£D?É-¡E?(Œ½‚ã-úXjD<úåë½û^q€<Öܵ·æO™°pÄ4Mß0“ÅO!îÇŽ´UpòÍÀ¹ñ•Êåþ!0–T½õSP6iÐy% œm©lIiht@$(­a5,aÊ,(ZˆÂú\8I‘%ñ¦Ix®ÂˆvÛf}HËÝ‚öD"lÂt#®!X È]1¹`GÄ£ïIzªA¾e=t“‡ GPÑS;QÀŠmŒ¯¼ÚÚÀý#<KJ5N[ú0x!c‚#bØå§SkNdººágcÚ|[·Y +3ŽÞHWãÉŠ”xŸ|aï½iîÃ6–Ï£9ÓÜë'4÷Îã¯sÑv'Ú‹’E`8’ºª%Ë A¯¬ûTdù:¸Ë®£àè  ¯ß©DâÐO=Ô¤ƒeÈ2#ˆe&Ra¼îÝ?÷Ù Q¤MÃ’–ÕýÉ`– ©JZÚ|½ý˜7M“ˆ—~c ŒŸëŠƒ$§ÅÔ°“o‰ß>ßâ1_CЩj:‚•PPóàÝÃ*ß&wÿþ>yÈM÷º¹&ÛBZŸ‘2À è)J†i·þ{[Ÿ 3z€ª€9®]VòF’Rƒ3ä_îj•_rm/„ÝÑ‹;ø.ê‹ð… ‚ž¢4ͦASÞEàTwá4Å]Œ§¶‹/l3ݶ5!ÊÉ6¡æE VŲœÐÜyÁŒ´Ls¤§U•°Î¦¼ó¬(ÙÊ߉GQmŽqpüz­ »þgò=¯›tûm`‚ Õ«hŒþ-=§âøïÇ¿%BÂÙpGÈjÛ~3PË,ÇŠ†#{ÊU&LÄ“lN¸_´+¡ÍºAÚ ¬­˜æYဒlÙÏÅ6š°2ÞÕ[6õÀ?¤˜¾Ð!=ü!Ùºá/¤-DŠÛ®½}œû-xîìÇ倰(§”¶Èýj¾ˆŸØGÚØÎhü¡WêâQ¿¹"Ô®¤c¤CüѵiE؆†àŽ2ÚÝ9c ÍMzÏyÇov£ŠûZô«+n;ÞCbž7ìØãÁ{Ðïƒ Z ‹¸üç½ô‡[öûºì×/³-~MQðwúqžÊW£=ß?¥/ëb{ŒA͇ç¨*ÏÌ…AJ ±äîöÞcQ$ÒB¦×"&bó£÷f¬ÅK¿…KÌ¢åGÿEK )›zeÏ…l–ƒ›`ðÄFAMHÏ ‚›x3:¾ï1Úωi™HÝ¿¬þúÑŸUݦ۠9#žW3ûÌßx3#Ç(¢ƒgJjó¶ºÕ¾‘Š–ôl›Æ`¦C9°ЦT[}¢µ‹’$Í¡ÝK*@Çë¯ÞÝÞ¼öOO؈ouæ#(̺GÎÕ‘âdÍŽÍ©¦¥$~¸]X¸Ž7EÁ’›Wùøµ8Ýz/âÅÙ„è³Ѽùp\a(û‰#©@64ìw0\2¤På -!MÒ‚ÒXsb)Þ~–Ú–,”RFà;ÃTõ gö8Y­>Æ¡6ÏSþÜÜ*ÔòjËD¸¸ÖÞ½wA¡Ë噺à¹x#†•ª6é'ÁÉ=Ó‘üvçÀmNÛ!FÛ ß¡VC,<¸†.p²zŒ "5´ ÷Þ±Éj¿˜l×nzh ÉKQœÐSÞù²<òûÝè¨&è‚#†¡ª¦gGج"_ù—¨*hŸ¢Ž#3n†å¢cÔ 3Sh‚ÓQ0 cbŒ{¡^ßàE¬ÞuOi›¯‹cØÑ-#‚¢¦¦Ï~ð7 {CÙñ‹¢ðÓ \rEÆñNüŽJòÔdaçËÍH¹ÞøõcמªÇ zƒ>†•ÖÒ x¦Ñ©ªò2¤ lgâšñ쉟õ§-YïònrÝóc™C¯Áh|€_¾%ùívźw¼Ã æpÝ6UŸ‚vžöžôƒ§¦¬Óìv§ßÖ™gZ«Ñá…$èÀ'l¢Ýi†}4µ>š=*üI׵ů»Ãp†#{ˆÔÀk²ÌnPѦ–Îpz’=ö¤#"Ê{ƒ8‘Ät½ñ&j™P¼ÎÃhdô Æ8ˆQãrùÙ¹LC&vu*¬røöñæSÐjÈSZ„'E}ÙxfÆÿ?X„ i5'eüpÉ&§/Ø ´'w¯l_§MSŠÃlçkÐ@+ÜU³òô0å_Ùv\¾u|P ތ˟‚6’,º³æês¼?þÄv›Äb²ádЋùø`žÎv¥3˜Ã½s÷\ÎŽ“«yH‡z·ƒ>RDªcLwÎ=ÂùU""yá)ÝEõÀ€çÞjÏ3ÿýæƒkqmVmMä—Â3PË\ÇŠ†éq³vÒÚú´?ò®,ƒnOÿîq{úw÷ÛÓÿêx‹ø÷þ¶ó²®O1a™”zQ:ŸK ‹–;(ù&š±”Ÿ£cªMñ½øž¤ç´(aLŠâ™¶ù滥¹)!žb± ýu sÙ³ú¦5ê½£õS0DúË1s¾Í~üõð "…ÙÍœ2CzÒ‰°àÈ®lƒv«˜PÐ<'-|†©5|Bžº¢„mQó÷"è2ñym‚K]$‹-ˆçOXˆ«£C âÊòg7*L…ÛüáŸ>I›?üÓšGÂÆT¨’ÿ¡n:¸÷i;Œ6Oê Ì…_òîÔV㶃e¸knŽÖgŠ£n yEì‡^0ù÷±7éx[tÝÒ1qÞñ¬j0ÍBO¢MZ>M‡ûç¢=ÑïáÆí#9×´´¶E»LÑÂ8S b÷BS± ÉýýŠÍ^@M#… ¹ÇÕæÈ.¡®_·8OøÚqU‹ '0Ј˜ú\˜P&éß‹'ª¸gоÛAüG™à† }3³&ù =Àó‹¥m”2`vð„†¹äæx…†wü)¬ÀMí•¶â^ ¾NàÄ9|?8/È“ùCv€³ùC–ÍC[ÌL—'žß~Îk ̦»b2¦ï£2Vð<ƒöˆñÝýM\ÆôELÆ žcÐ7t7wqG$ëÉs¶—G&èUéöû)mcÒÔ!=’UÌÒ†— Uå1*骊[m)x>Ü«IµõéSäj«©›?Çd¬ày0íã‡ÏŽÊ˜71 p|©òˆîêþ/‘ÙÆÍÑÓÓfn|'9š@ `¬,tÀ¾÷}8±á-36j‡ ³UÀéêc$j*–-¦9JDñP‘K`ö.íèK¿´Ü·õ©‰ÃU…r¢ÊGLáô'8A£re‚~ÖOÉû*o÷/3×RYì©«¿×§6œ— g™›¦5æÇ_c€þIAXn¥%ù¼­GácÅôµzÓõ+¡•uÚÍßú,ƒ?:†ÑÃþë?þÓÓ‡|/}XX‚tô¬ÀœÜ»ƒoûwš&UùaoáõB[ähÒ è•l˺ a¢¨/›Â<¿³_pIÖæï|Ï÷Bk}–Ÿ!±åÞŠ~R YDØ?ò€1°ú"w V@2Úà÷t\]Æ *t PþpŒLO1•Π͈ñÿ…§â•³ÌÎó!ê·x¡lM½ÝÅ(³˜NÐø¡öS $ÎÌñ=âAì£æ3¨CÚ›¢"õq ¼ÁÝHÛÚLKå&Ø`o, £]2‡3ò÷ÊMµñ|Á}Ö…qÿH°‡H>¤Éøv~–‘ØÉŠîv|›€ÿ†-m{O°¿‚æ0R$¯à›ooàˆàùô5?•ò ÉDžòM"J-¼ƒ©!Ò¤G)ôZžèðM™,dÅ,–«Ÿe`ò!ï½û´ò¥”Ó¢Äà Àt¥¨ Œ¨BfaoeüPšW²dó2ÊEp‚¹>Ac¼Iòç”vJó7,k‘¼Ê rãXòÆ\pÀ©4öƒœˆ? Ž©±{?F!#F¸ÃÑ~p®ÞULއãx¾9*hucË•ãtUC4ذ¶¡llaIÿ¹ä˜P=˜†Ò31º†aý™V/ʾgZpÚì ®ðya. kÞÛœŽ·ù‘ì×iv,ªh›võÙFìûã¡­—D ”tœ µÎEœ0q„„º¨3hµz? ¸!. (—dÏÇ›YÞqhmÒ‹d Û‡üc„½¤Ãòí%¼Ó£¸"ß^’÷0ñ´»„ ø¾PÑ.ꕈ= #lˆDÿãBÔö¾¡pÈ÷[á.ÄþR­gœ†óÒmæñH.BþH"p?’KRÞ<†…pº™ìRn¨.Sú«*Féïw”]ˆ=Lé\‚½‚ÀžM8]’=)ÏÍEPrˆÎ%} ¢ˆ}?Õ]z Oðü¡¢]Ò+§î"Åb€ ð¹$õ§|Cß<¿\‚ÿ;À )º'F!Ò5éÈÏÑ|aCwõ†k|†àáü3.¢úå¢n‰è•©S~Ò’¼br¯#9çBn‰áÃA Ú?º£:Èô7&æF¨}1Øìa<ú˜€Þˆ^ÄûÀŒ5ûË“nÙÀ"~Þ¤]—·ŽŽÚ—ÉšÕ'›á/.Búå­w’MYoa#·¢÷#|a¢ É+RÀi€ êl GVUTÃÍíEWù3mò«´«[NS•-ó3D]íêd“s_<òþL¨&zª²¾H$»æŠò»â·i:ù ë6|ïÍ Ê_š¢ÕÓ%§†¹g§lºa‡¨¹´ÉìœiéEŠ×.ý™Š§ò+ºÄáw™ª…ч[ÓÅ­c"‘]÷õÏ|$6õ ÊÓí:i¶ý5ô‘Y[pØ›Px‚k‰í¾;pò…]·Ï`¯ŒðdL˜¡=¼0â[Ù2;Û<5?Èo]À¡üM¼?DË û]*çî磳óq½=fmYî>öç9‡µLt¢)÷ë%©õ=Ø=òŽÿ%¶Ã÷WFøÜÓ8 æJYÝ£˜OeW4e>DtŒË}{H«}~ ªßùOÁÐÜU+Œ¬ùõ†×ï'vù8eNó4Ûç›&¤LÏ9ï¢Ò8ßMtL düzÇþÚ–'øÓÙ#Y^FËþ,´?MÞ”ñ{‡d ð%'‹OÁ\iõY¼çŞДÙÜ †/錀x¢º:#ûÐÖà*6«‹7ü"èˆÒ ]tD>W#ž‚ŒÜäߥÝÉÝ?»¿*^0⡽£k+l)9áæÝç{~Ï7O´9  ³ÍY×–Ñüx²‡çq‘`¬Üo‚C3Õ”Ñ]›“ßóùˇ{¹×s”·µ;6wþµÝ`@œ„7ây¸CIxî¤/øMY$Ûð0ˆ!žÐ10ì…ïËÐÒœt°÷Mr¬)宸±²ÍÓ쪮Ê~K z„?h}É{uLÎ¥eùâÜ¡<æÇMÐÐÕ èàMý¿ÛA*1 ÒZ‡wí#yŠõ,í ŽzÊ·õñú‚-;ÍópÇ6gÙ›$s9V¡òk«kREräÐÉ§ŠººÄÛ#HÞi™T'–ŸŠîTùSrNËSî—}Î*˜)”鳬nD¢ë •#§Àh,S$!‹`ÀøSˆYïÍ"º›Ö|ÁLy—ÌH”VÎ ‡ä8R9¬=Æ‹SMϺóS*ïH £”º%û`?çÛSœhHbº.oâNUÂû±ŠÃƃ_lä?R%fU?é–>“Ê>œ&ÿb}ƒ9‘ˆAݨê*Ùþ™kX´+ë'ˆaÕÖç`Â3xH®cíà걄 ³°,6"[_z1ø4M]GÈ©ž ÓŠ@ƒYÙ¦¤»`îDMñB®¹ˆ/ÂÉG`{.špvš U‰b}ÛÒò)­Ê¢¢£ ¶‡DÏÉ.Ÿqðôr>º”S¢x!>m"ûÂ9Ãö_—1/æ  y$† bpnªîTUyüþ÷2žù NTòÙúÒ àû ×»ýb¥mË´8fù9”Ø"æ"Ãy±·Ÿ=T®{IÄÛ®–ssêÂ3[Šf{þëS'²é…aÝú©(ËD|M ñè'p(ÿûÁ<Ú¯X¹T´=²ü² ´;Ðâ­J$ðÒÁh1y%‡ì?G+ßHäe² 8åa v¢ÎŠçAt8>úÈ)§+ §¹ùÒ2!îáåByH&§ %ù>ìz+°G²j0"}©øãD<q@—î÷‘Ë®éAZ(‰/çÑÅoºáwq.AºÓÕnååuY’¥L@J÷v^*Ë[?àï–‹»Ù@ryÿh߉å&Ê÷ÞkŽâýÝu±6?R“¹?rƒÔÞÇoî#óädŠ­ÞÄÇoàBÛ·åæÍì¾m.Ô#ŸGv#oÀ‰U>tD¶¾ôl8;FI7nV6@z$çå2óÅòr¤¬|¹œ‘ª'7K]šãçâÐL|‰<¼MÛ¶Èۼʚº¨ºÍSŽwÁ<÷Ð÷ H6eº}|ût(è€Å¯ÃaøäE\î ¤ øiV±ïšurmÌ ž³Ðã‡â>ùQ§ësÎ÷bEbcu#¦CðÞòû„?Ç| ÓAT‘±TÑèN ]É’êðē瑱ø P޼¨"çs¿ºó¤ÑÄÍ™MHžlÔÜø” Å5-ý—EÐQ( ¬Ï1eÊÂÍïPsÒÇ^m« ÿüÃ…Ø÷ÀaüÏ?Ì{€­&ýòõ!9ç-;AùC$ŸüéR>ùSŸüÉÁ'Šä“/å“ãøäGŸüèé“8pg;UP*~ª:r•>tKÄA1üT‡Öì ÍMEi²Yd Ò¤ Àƒøæ0ðSÂy™Š)¨¤Þƒgºé^ øxF‡ÈQ™fAñô¦£b(&‘€ˆW³l°µ ŠK„DqÃ1³ ˆ,Î&,»´,‚Œcdg®_ cû^ŒñEP†;!˜¬¸¤{ýÙoÆ÷E øšØ¡~š²N›¦„S ^¦Ñg¶'ÒÕGŸ“<ýЦ…CÛñ}²ü1owY å†ýÑç%!É®z¹ˆÿ!î‹ï6âSñÎ?¤ C.빘.›VRi–ÑvI¨œõ…Ì0.ä=ËÙlþN¨¢—Óv£‚+|µÜ^ÊQQ3ꉇã F"ù"0¤+<Ð+C°×E×ð¥ `ÿ\È3Q|bòVï&þðð;jve{+°ƒ7Œ01–:%r<ªžÜL+ölø^—Ä7A/•žq’ób©§1ÓªµR–ÙæXWEWǘ‚™€á¹ ª#~âÀ\¦CÇîeZm!5yZv‡D¨xð>I‘䩉ÑÙ1#â=0Òçé«åž×P›Àwe]gqùª^„¿Ã‘ýŠÇ6*O†£L}¿r¿°ÑdQU‹qiíÈ^I«âˆ‰cåA¼„fß9’‚d—p„ìï3u¬yܯîVï>ùdyš;â™–9LêcS¤’û®b°·õj ;À—ØŽ5þÈ<L|” & .˜¢e€K¤¿¨jb4 px¾ªò(Íe“è»ÅRèÓºšêÖ¬3OÖA7SãÁ]`€2\æ,¥!Í-»®¹œ[v]Ë-»ÉÊù‡¯—sË¡»¤_ô`ÇÖÈ3¿~½¤k¨ô]£ »°ÆÝŠû› ºæ˜%)öUÚÑo]ÎG¦Ï;KG軤Ñ]MqI/5E<ç4ÅØ'pOäårÒżÅ!Ó&û2n¨ªKVà zp¬‘W>}ºd5ÜÔÍŸ/ç=Ø5€5rÍÃç‡?_Î5äxÉ\£ »°F®YÝÇÊ5Ï/r0qÈÓ,o#vümÐNN11°N è»Ä¦áGæ•ñû=ß$ìa¦,p²K3/Þ×ë™Ò—Úrü8 p\åÂiJó\+½ãž'´ÀúùàéÝ_Í«N3âùêêâ¶GqÍc”Äî?PSÁâ˜Ç¤¬CzŒögñ»¿å2ñ6ßžÚ6NŸõ ßCÈàkâ¯h;>a™o_GÙ¿6é@~`X“…1âuá3iÛ"Ö*# eË®)â½YJ¢G«Î xî\M³³DÝõäÔ¾ ÿ/šhg;fA8O Æcܼ½º{Hº6ÝÁµ ¾>ÄwLl˜`} Œ“ÿ¶°5‚h%oÞèÆ|PŸrf[„üWäGÖ‰?ãÅBÀàû:c„Æ÷ä; Ò;F¾bבdì0‘’C¿û£k¢8iÔÁ3ˆéšÄÊÌ®ÃÃÄ~|Þ*ª/q†aXsˆF&îãSWQ}©3 ÚB4ê±IÑOM­>¾]­~0;¥Û„ñ“[EõMn†a˜»Œ–Ü0ŸºŠêKaæ&ãQ'‡øÄ{LoÚä0Éõ¿Æ£\^€rL¹œôˆ”óçüØt— ®!Ðç8|Ú†í'&pÒJ<ݵth)*ˆî9Š2ô$r€S”«€=ÿÓ#?œ‹æ§ î°ÀâI›@bัHz±2èj¾¯R\zAÿðNÏ6OE!ÑxN1]SRAÓq”eHÎýù§‹äÜ9X'¾H9—âÆ"éÅÊ´˜çÜŸ‚s.µ)zÎ5bº¦düœ{™Œ#ß^(ÛÆbèCi”g‡lÊöîCöLÄø¹58³Nòê*/ÙjÞ!OZ%ÛÒi'f„Œ§´¾Q÷°›e²‚tm±°,rf±«=F{.Û¢9Ð.æ43¬£ãF ²oõöëÇUÂ_$âMºÝæ ©ÉûŸi²-‹¼êÞ$u›å0»y¡ãð¢n‹îÅßS<].ä¯Ypw¯M¡,¾£mE½ÛÑ¿éTd½x~»Hµ¡V½L¥:6,zu´ü/Lªªø¹H}ƒûHgLuQïÄ¡ïÁo±þɯ¸ÇÏñ¡Yüpó{¡Ò#ûÿOj{/ÙôÆkyÿ‡5¼û6ÚœŠ å䦈›YñÞ!Á?k®B¹RÅÅC©ÆcêKÔÄ3¿‹ô#\áaD‰Ôˆ³Wr%f*¦Ò”¶˜Ù6m³Ý÷¬Š·;mOÛ€¡î¹Ý—5mûß~{÷ù>ù]ˆ&þúî“ÿáz틱ö®Í‚zzb¼‹M8Âìçlq<5܆Kf0ü1F‘¡Ë÷V†î¤Ù®õz§x I«®àƒH‹w«„c&Mº}L!`›oóâÌû;LñžÛ@’Í©(»«¢Šàѧ|öØGsçÐÕ—R}TçÂä©?ýã°ÉÙUÓŸz”B^ëÚ2ðšBÞ7š¶Á5¿}ù8DîïÀqšåÀ ;šWòÖép„ü,ÍÁßOu—FpÀ O¾×‡ç ¡Å%OÒsZ”|œ%²-3Ì1´ýN38wÌ‘]°ÛÊØ…$‚¦hx7(ºã½‚C  µ,-"ç"ë÷W“¾æ½ecOØ|ÐѦ-uܔћ‘’w]X÷sÌÁ½ê¼7„@ËæD5¶Ô©q)}øk8¦ÞËšð «zib:ߥ§²Sï>MÙí\´m?¥ýé³Ö~ZÙ²ïˆ+8ø¯ÿøÏXžïj>uB» U}¢­mÐ ¡÷Ç‚ÓÇͯ *©À}(’È- *ÖˆË{0²Ûþÿ”½ù´Öeª#¶W*èHÊζÁËò\ZX™ Fê{¡?ÁA=$?Ã(]Ä…‚ü#r¸<-Õ-Fl/oèH†®jÿêéW¦‘ ÷À!3ÌŸÇëϳ°heú´Sr ïªAÕ Ž¿ ˜E©9mÊbK…žêö1Iž§¦mªµam„yÏò"ÆaÅò@¥ÓnÆ{Ä 3‰Ó¿€¶ŸûfNUÑá4>²“EC VD`ˆÜ÷øïžà&Íú\¦Õ:;lÑÂæÏÛò”å¡—1á—=¶€²®l€¿EnÔ‹²z+\<¶QYú³‹Ì*<Öå"¨Wª1.ã±my'6 G‡÷b?‚Šâ}ŸÊë0—9x{YOE¬ð߈៘ÕáìG.é’h®¸¬ "V¥ÈoÄÈ1+ÚÙ\ ÞuüV W]¾VfwþíÒíª˜1´·Cz  ðÎ:Œk †ƒß‹æüs†F@Ê$¿ßÜâ…Í0êD/V™3aHÕWªÈÆW%uÈäô»˜FùŽë0˜Î0ž@ˆ›£pýÞ°"1ßuÏÏmð ÉMždUðâíövó2FFÞ”wÜ6·Ši'I·-N_nã ž–ÌGyÿù6€§”è×ól\]윋´e•Lßf<…z{³1¿Žºnaœ‚èQ¨ã‡íKÅ7Ü ^P.?aH¢*5¾DðŸeÐsÌJ†ÁÓ*Í£0M2ÜZF j¦Çb¤ï½7Ý_^~xpð+ƒ¨†1ܵX‘â –Ü›SÒ 7kÌÀš 2QÕ¨m˜À½c=úž)0”PyäBÒ@|à V>Á™±nŒ—n~Á`ëréËœ ÛåË_PØâ’u᪢ŠCÑC_­×¨ÛYÄP•»[UFáç-¡±Òyµ‹‡"Ãc‘Å´ÊòY„ ®• Ö`LËÈ í!®-m‰‚Fžá–ì ¢!ÕÎ~✳9æî^ì|”ôexk%–Ê<†,ô‚³ ÔŒ Â4`€0vŠ*ÞYòÎs6 F꾨°ôx,]Kt ‘‘5!>˜sÑ„Ý4SÚ“<‘0ÆÊ‡J,-bCKLJˆŒ¬ áðȦ ˆ&ìÐòáy“GØõ´ c—Í?j uJC3& ‘Ç„³r£ŸuNŒˆÆÄ=öânFçø`tÈ{!9¸FÞ(ÖnÑ} 3œ¬Ò!Ð7ÃaâšSn òGî¾[}‚±ýÎb¼ó>yŸÔ!?Ò•ÚC/þ‘o_šïweC‘.ÿæ'#Yô½Ó©Kp«œ•ÆbÛÿŽ!"¸4噋À T!ýjO›Â˼/‘¿ ×\ˆŠP„? ¸³#ñº¹AWö!šÀUÜÀåÂÍU¨Ö%g~Í-kwùþŸO#5°±H#±Í”? r¾7ŽŠí´âþ·F—¿ü {ÎUbO?píeWBîÄgURáš‹4@q¨ç€ÑKØšx¿ ÝæÅ3¯TäKV«L PŠ:燢d@äɃ0`{aŒpàÞýÀaZ#LóU…¦7(Ž¿Ø¤¤¨ÊÛ  ³ˆo¬MäÑÉ<Óf"h¥R–­jQÈ«às–>CŽÚqW"¿´-†‚½ÿüA^Sú(‚ßœ#?ðºÉœQ~f1ÝÓ!Í3âAþ¬½ê"Äæ¿&%nõH2qà…ZÜ]¦lRy¤k¯ Gí[S>å¼iWa‰6í¿ItÛH¯j­õpã=ãú.ž4<çÅ}šG_Ñ çÕ\›b¢iÇJBë³ð©pÍIP8í/ònMžàò95…§+-Mñr,-%ñÖÉšƒ6–i$•ºšïbÂ*8…¬~!¬2êÕ<Ò‚Ø ÆM)ÁO÷FUä\¤üæP,áÖ>a,à,à°cÆ1à¯4ÈEÝS…å‘Tƽ´"<‹£x»ýSê~dpo]¥µØ§,½î¹–Ál9cqµâ8šæ gYÚ±ËË9M§ˆfŒ{öâ®? +âîà v²B{ºx4-é=t³$å${ì¬S4Îè·”ªM(ì')úö~ûó'^m}þÂ~ÞF8ù aK¢siËy¾Ž6äXª¬1<°¯bš!LÒ–¿åÏ»Cì.ì1Y[³K`F’¿·!x–«½˜É«Æ4!$ür!—8«^´¡–4Ç©?ÞÝl\ˆ1œ•XІ˜‹É‡›ÍG'b˜œléÌ9ó%KE¤hvÊ+ôB7µJÅD¤åö>øEüí¸ȋkT®=@–`Îùm>o®]ˆÑs…[»ômˆ¹hïœj—çð”çèYtŒjC±Åà<ÿ'üõwF”žÐªœ¨ubcC‘jÛ_š~Œ©7¿iL艤©œÆ£˜UÀ愇0-}ùÀÔÑ}Jªè¾ Ê]šÆEó%á%¨J]d0úÀºzpƒfH8ß’×Ty@â¤j< =|úÍ|Bi)gKô®Om>ã¦ßt]Å;öÿ0x—Å÷–ø6¡QΆüÏÁ‹»wo_¶žù%xä¿JIv¬NWâXÄ ¦ÿËæ59bø‘Ü]áQïˆß«·åáƒOŸÞZ82œ|L¼ÅóÝ¿ýë?|£¤bæGÌ2¼þs™0×óa_Ifúê‡ÿh6J5X’ŠzCÖ¶Þ$U}ÅUÒ¦™¤mk#–•‹šµA<$÷ZØ)ץ낖dŸç >_°à¡>À m@›ˆþ×þo¤ÔIŽç‚fyîv­°ùG\Ó¦¹PI|üp· Úpžrø9)K¿‹&𮺠0³Ì k’¤ „)šh¾ÔÂi!GÉob6?Â6‚t…Š-–R°WÓ_[ÔGwÍ\K çÅó+)'ßnj¶¦³ü%V1—gùÖ›4Џ*Ô‡4+„ܲiøŽÃ3 i]òÖBºÔ åGØü]Sx‡UÀº8o†`븷ㄖuatâ*¹Â{×iú ÷$)ô»MÛ"Ì2Ðö¡$$Ø”y•3^Á‹íÃæeÛ®ˆ]d=É÷eI²f­Ñÿ€ÓZoR¾à,tƒg–ñ™ÁoÕ}ÁžP^õ²¬œÑ)K!·Ü³LJXuc£«|Ô‰Á¬_â&ÂEòýÌ—pe® 0"M†¯ à o¯â9ÝÅyõCá¶f¢k®Od¡ðSá&CRÀ <ÂèZ¨°í ɾ lhS=Áþ´›+¸ö!s¬àÝ~ÞÔ¤&hâøC”•lòæ)\Ž“Eä5å¦Êî¾^µpíTùcÆ÷ëXÈQ Èb2ÎQNùŸØ¢ÌÂR ª)3–—]¯~ÍŸ0Hz¬ärä7? \³O³ÃT2àÓgˆ -À›Ë¤iÅ›¢oÁÝÍmp3¼Õõçç"dª½¸»ùù¥¹'™µ¸D!B<à…©?ýTŸqÖqÚ^÷Ga·úoŸnîåŸuæ2A‡÷æêkùLw°õÆ™¼fÒiÖhm]…-à5¬ElßÞÝsFqlÇìžhœºTAi±7‰ÿ¾}û‰ iA"Ø$È(ÂøAž‰5âËFI¶‹N°-ßéþ®y0-Î#S¹-œ>8ã®$ º·¬¥£¿‰áêE1‚ž>›d¯¹÷\&“ø«34>°ÑFÍíÊ%Ž0íµ&Ÿ¸rx(çßá’ð,1±¬Õ&ßjÜybPJù½°yþ6>%i “ûÝY0°*IU—°9¤ü \.*\Èó0£Id>3Õ0¯+gý: ]í˜E«ü)Œ¢Ï]¸íþI]î´TâhÑè¬Ä’5ɨÙÿÇöó=ûƒ 6€yÍÏ 6S»Íaç࡟„Mú‡Y–eÈÓêÊ¿p *²ž ƒ,“ÄD²îFžc™×l¬BÎ{Ç´©#¤@T°ð ¨OL‚¶Ì8¥_¡BàÚñIc6ÄtóW³ˆgÆ«µ-< bØá”9°C$fËITNoÛûùþ”gÛQT½ÙÉÅúÒ¯½ûÁ(sO˜)²( üAò'ÔI2ŒéfÊâêá@½—½7·õáÊ0Nj¬t€™Ñ¦£ŸxhGLÎõ"1¢™Q“¶½“OìˆUaFX)63£%LÅu—7·7·ÛA¯šx±iã™n­‘š–|‹Ò:&Ø$‡°–\%§üŽÿæÃ'$òEÑœÍA¤>µ!Þ@ˆ”. ã ´È8¤§}:M]µ ÚBôšÍ {ø‹ºÅ ^…{ê…|ØE€QŠà@>)(~ƒZn!Úy38\´ ]-L¦#L ¢ Âø^öØxÎëZ[ë»lըІþt #f‹Ý‹h[¤ãF6ú £ˆP—zª$´*“¨ŠÉã#rC m¡ÂH:XÏš­·„6ó}ôõoo?ß¹hòDöøÕ×ÔB‡‚+ð;ÙÛV_))«ÆýŠ3Å)˜6µž©(Óð qojÅŠ87›2bDÚƒe=ç&í ;Z°½IüŒaj?㣠$žKØfÄ•H½”í=u‘µ-É'þ·ymSWyLRR‘]œüœKû%eµðµ‰/£ 5؃3KÚ(hË•˜.ûi„etJ‰‹Vi~ô%“ÚB¡†8r ö>:hƒ¨…-w ®@òoAÉWæÙ™'â¿ñ›?ê°7P°Æfxök¡ÃòZºÖ?c‘…@5$ÆTQ$”/ñfÑ-4›biH%ó¡©@{Öû® Ö¤›ƒW u¥˜ˆÕÐèD&D‹R¿ï¡/rî*át¹EWë¦ïЉ\™â²+Sz¥ìJö¼~!¹ÜöÉèàÍž_šŒJ·hC˜ÛË= ðë+y¦ÂÃtÈ)óæ‡ª@eÜ´! æœïç÷›KNø»Ð-É9GèÌBÚPrÏ"•]JO¨L;<šÌºsI’®([ UHÚô[ »ñmûܘŸuNÃìXcLÁ)á´É ŒÇ ÅôxóÖ8íâSTìÄJáN®.±^å`]òs0½%0Âw?ÁñÄœ¯R³·|Gmß ¢ð¾'|¹ŒßÒ"fè¢4±'÷c•ø‚ 1m´’\¦·¿Ün@ ñÄi%¸ÿ LÂÖDGÅSoœ5çÇT)*Ç!¦M¢J„.Q妬|ÀXTÆjlæ#$Ñ1‘jÀˆ vºöÒžŸÍ—1}Ütç8ÙÓv6œ[°p’*£æ¾"›®<ÄçQ^ÏÆÑÆÈÑæ9¸É±÷[·Ê‡|«H™…)K³¼.#÷*wP—ØØ|”>Íë yoÊ÷îéÕÑå&rϲ,8PÄÞÜl¯noáè‚9xÁ:(.&PÚ¬ZCÕ¡¯ü…¼ÃZñã×RÀL¿¾‡¨ÓˆñS焃›0àù•xa;Ó}kߢ9íþ^¿Ž´-Ó#É“"ÊkØOçLR¦Ë¯oêríK •ILÐ:³K¨F<Çb‡c¸g‘]|Ùßtê…6¯œ”ÀUÀù¨¶bïŽeXœ˜…J› ·sXpSPQwãž„¾AZ(L‡ºŠÏX*Ç{ˆU0Úât÷‹"å¸&¬ª2Ù×ÓpÇ: #÷ÜŒ6n$Z[þ¤×[=•y}<~ýhÊèä>~2ý>‰ï_nÜ:yì»A]qôIp+±§‰˜ïaI2Öç;„ÔW?9“PÂér˽…ì«7ÛWöüð¨Y²’÷î59e:>»~‡â„~Ý!í²ZÕ%«‚½ñ“/Ó³WË"7ÞX¸%T;æýŽÜ`P"–eP$à!X€ôùORþˆž –àEQ‚3oÞoš@Øú g–E|W…–3œTgݤ ŽN×~óÑ5f>ºÖÉG׸ùèÚs>ºFÍG×ß-ùÍF˜¹H'áæ!ÏY5]2É9/ŸÑsŽ ÖX”È8¯ˆ—ΙD~=w(qm˜ÍR„}}88ätòެ׳¿kª³¿Ù?1~N l®Àfœ÷Åk<ð3€Ù^‡Ù,!·ãHEL/ªTîÚW¶¸ÆÉ×É×Þ²Å5R¶¸¾l¶ð•+p2ÅEò„·,”#|gˆ£8Gƒ@ˆ¤ÏWÚµŽ¯ö!xIÏl׬5É#VŽ 'f%fêò['pHM¸8@!33áÔwK‹pM›ôÁ`ëQ¤×A¢($-÷ì÷MÛÜè’vm<À+&ûÑŽ†PIªÁmH¡ZäóþY{yVl‹"Îø5dyú{â•ÚˆX‚”äX§¡ŸL3ÄvE"-Éâp°ŽÙ¿)Šo\m=oqD´NŒî7 tZCz%´â> …@vÇÈg>½ê3þ€£8-\›“ä•ßR¬¬ãI æWüÜ«Ý8XsiÄ·ä6aÄw×X‰!ÊH ¹ËÕVo~ZòŒ:ümy‚àÖ¦¢y"×8m·âf¿á_$¯Ž³&̆8<¹³ î(‡äÏ„aÏzìƒ?4͇Ây½Ìøˆ^&OåÝ?l¬‹?|5ƒûwPŽq¨Ð Øt¶=^6Cxáߺ ùlˆ3+š.«í(¯‰w|iʱqî|½Æœ.Ë¡±Ø1%_•!KR¤aDÎô(<) C®$—Pu¹*1äAQñz&gB)œÐ«øöTã+«g>M%Jƒ½†l-Fƒs!AêꄯEj-ƒ¸Œâ̧„F—B…n«Éë2∱cL*á|MŒùWlÅRb^F4¡+D"G9Htîݹ §º p[=úPR¡‡;i­ƒì{§ª<ðïÚ —Q ‰B|z ¶ ÄeðÒñBès]®»u>ÿ€/@‹iÍÿüÃ¥è_{ íLÿúRôßx ÿÆ™þ›KÑÿ»úw¦ÿ÷KѧèSgúôBô±©»Ð_Æ¢ ÏÃ9³ÎÂ\5¢³âÚ&¾D¹LÈ2=À,sîfÙ¥z€´Ïè ô@mˆ )@ÓÇrk­¹ŒU +|9Âò›¸­&}¨Ë(SWøE¤Ã´Õ!\†þÙ‹«.±5Û ÑÀøVƒ½Fíã™sçÖ}Ά5{…èìfЀ÷À¼IköÃÇ„'´Ú—ùCIÎh”U †´}êp¯Á™ß,Þ<@£‚rbÿÂì4wp÷”c©±ˆn(‹K” xôžÚf ñ þÿý3®CP++÷Šýñ– Ôxn”Q©ÚSìçv«[s%Öá%œ!±þAIͺâÊ늸»!Àh³áF‚û ŒDKë䩃£â²áƒM‡†g÷ùåˆ.0é»P¢ý5Û›»OÐlžXG!‰ìxÅYç˹q„˜¸W˸ÚìÕ(£îÒ‡ÛMçÃñãÆITÞödÕî±ÁX•Û·÷ðÎÎaö ‚Yí°{€i•Ða$ÁÇc´ãÝ›?áÿ™<³bíjðœ*yÒŠyWYË3îΖ×ü(÷qíy‹vI•ðBþK_©?EwD™'z² r¦H;hÇHÚD»©íݶ9!ÀÏ “Œ_ å°_¸Â® Þ¹äw—:6÷Ù™´òó¹Î’êywÊiEÝ»K¨Ú©0ä„4 øƒa h>þ„¡‚4X–À‘92g¶â¸øý4óÍ#wªìw’r¢C0#šÒ´OÒ•ÊmÊc$#Rí]ÊœÿË֩܈šd1ùæNN‰§Mqh=8÷¸ýǧ@<Çpl˜b°3f$’‹ÅÞv¢¾ZQÎSG¡¡4I¥¾ù$™*62dlá¢H·$ã^+Üéöa´I Ò÷pç<ØÄcRVu˜>%%)ÂĽúPãéÒY:Gòm¯xŏNÖpî¢(óÇ0=‡U™|“"ÔžšÐÕc NtäXbøÒ…:gܼ šwx©­û@‘†.ƒŸÂ*«&¼ÃñÌÂq_£ýnæÞŽïX„ñ±t 0ÁX}g1¾?d»ýlº÷Šƒ‰»ø9 ÏI$}ó;RZÂÔ£¨DpM- ŠÂÍœÌøâ$bvÉKÿãÎçKçÁŒ’gzºÔöhi®<æ.·›Ìƒ™°kL•éÈ·‰] ʳVøenØ„» §ô9Vù3HÆÜÔ‰j_Êm_ˆåR…hž„È%”?®ò¯$sä8Ò£Ö™©®Ïz€†„(ÍqËá<¢&Å©½kÉã¬Li¨Òˆ™[pÛEØ?Ç,øœ/ ïò2`&— ¶_)„o+”¾Øž>çµ°¿½Ùˆ/ÁÇìÛÄ£fIJÕå #¾Ÿ)fYXêxnFï|þº±3º­Unª ­yO‘ôx÷ìÄþëWj0:íá°Q]tBaÒG2aÂíºMXÿÛ´÷‚Ñz›·Ûª›ÏÈÚ´×i"÷¼æõè)ì]k|‰ÀÊ”Æ(‘xÕ'M·6 L7÷“ M&­KÉŽŠx¯ )`yË™Ó#¥ð”3*M…¥ãït]ÚB“™¬:óG6©ÄìÜ»C}ÓéÎæz+òâÚ•E¡I×KŸ7×ýòn»Ê)P¿Ë$våÒÑdÃM\kà2Œ“šîˆß «QŽÛ44PõøÍ`ˆ ø8N &¬ªëÞ/Èô?ƒÚÒ.a‘Çmm%( 7s2£šãËÍÛ¿nZ]J¢ºLªgòœ‹*Mœûà³€z<§æ#ÎM€@„€í3Ê™uY§ŸzÕ–?ǬbİKªÀ26o Å=»QXð‘šôèd¹ÕŠÇ§ £0B.ÚK˜z*)\‹¶EáfNf”Â7·7·Û±-ÛˆŸGë!Ï#æ`ÀÎa$œQ»UTsPZ„†"ÕJk¤!¯ˆ`¿ÆÝÍms#¶,¦½'Ò¶É|ì£ËïQl÷8Õý&7/ÜDD}“'YEƒ¿ÝlèK³èôëWòìHc¢—ZÂDtYKrEOaIâ€=‚û®ÃŠÕ•Y°ç£"y•;ßÈ ?«SBÛÝ¡ Œˆ‹:XnƒmîE§n:,bjÉ¢F7ÇÉcéæÌnÀˆùcfEž§n\G(ZìÎç·O7÷üeyÇɯ‚N¤U_ŠÒÇ ßKÓñâcž°DwõÀ¯@Y§Ö³W.ùÇMã]ß’ ¢‰Oʈ7{Úno7–44‰% yPikpî ü‰D„==@×’ì"?³Xë4&–"›Ý½§Öœòˆ:û-_Å4æØ!p®Ÿo·íÜ«Ý,ÌøâŠ3<Ê™ÿì½ Bʺ^›wwб2Jhø'Ëc²KŠ2ÌŽntgÀt¸ŽM]:É´Ç7ä[”Ö1A¥§D5ä9Ä@"ŒÂÏœŽèelîþôöá;:¸«Ù €$JÏ3‡åÂ,h”îÝÝ,4öãÊ*oðÝLbZïYhÔ Fé;‚@J^ZŸÏaù Ã(¦S@#–=sw†MÆpf6ÒeÔfL'&”¦OdÏ|E'}¥ù¡zb®ÿ+©ÈÙqànø öz€Ò‹ {À#³9Ç¥¯xѽè n?]A]oþ:hÞ[p—>ë÷yþ••›¯b€ÔüEa¿×™_™ƒ ˆÙ§ tÒnné<ð¾Vþ%BV† ò³üËð<øÊ7|i¢€˜wÓðÍ C¿A“œÃÚ^ÝV-t¡ÍE‰êSܧן • „pоÛ^"Û³È)׫}œE5OËFÓ*ðîç­H>jOšiRÅf…6‚4§Û®ðGðö~+ü æ|K¦g –} nÜL Ù/mOá\ÿgQR‡TRÁ¬Æ~`ÄãþKÇ$“n°øÅ¶¬u¥y]8”ÔfÒKÖBnenP‹¥Â\4˜iÈjǦ®äaÜøtJ`Ú£÷ØŠ}ÄÂV%¸ÚÉ›^S’]îº2@7ÒeKdЇ‡M{U­|ždAIþ€]¼®ÊoᣠtUÆÈ¶Š´85äÛ }ë*ĉ„1)=席}¨Nñ?{ÀÈ( ]œ³ê[«!a¸ï2¨8_Ç åhûŽ·â®J¤,¸§Ü1¶U£êr<ÃÏç0…± ‰ÑÅ#ÛjÑ⨲F÷’k$EÁÉ(çð[ÄFB ñ ÍÙ^‰Ã¥¹ ¿%çúd5ÌÓÂöñ’Bvé˃ Œ¬¼˜q&èuX3" ª] A¾V@Éü‰ûÐGï PmF#±ø!ÃôòŒ$Z]¦EXº\ª¡í Vƒ4#G*ØàÈDúõË'gaHuÊ=TÎ}Xk98ˆªZæ¹C¾Æ©‹±ù»çŒ¿y/hÂRÎbÃjWö>QråËó‘§^ÊÛ6ôåA>ê—Yþ&4Û|Þ>´5ó‡û<~vÕ­)žž¤SÂÛª7ÓÐU 83ác8ĵ•D¢ÌV)Í{û:¥©øø?®Çßô€ÄPÀtCY£…SÁc2¶%)r¼øÙ«;íx¡2f"Z²OY©<¶’’<…ij¹Ã©#š³°ªa—;FìþF!¼o”¨³`bI…? Ú‡Žr Mõ®[J0œ¾cuÔþÂUdÚdÛîPûÄŽkÅæõø§+¸b‡ê2¸ñ(.k¡Ûøâ±£Èä]èŽ Â|¾ 9¤Ìk•i‡™ky†Ö{„Jh„¢ÇGÚ ÒÉò‚ßvrÜ­0ƒ¤Akh7ÚƒÿûÍ}ÀÞ'çäOÑÌ šž3_só0Ñe©ð0!aÌ 5êä@݉MÁ´ öLUÝùÛï·Á‹ß“,Οh‡’ìø’‹ðyÊYÜö£¤Õ$Ì·:ƒ8ªMªCUX*u7׎„zÏúý+ª(ƒ¸ŠrªUé™Ê¦³ãÁaÔa\•9‡E‚¦LÌT0U)sw³ùÖM×ôá!ñõÁ’ÆF•ÕJÕô×(RU„W*ªÈ¶PT‘²L<Ü® e›‡¨ŒýЇYšd_ae;­N|ŽÆI+£OèH¨(öS½½™hÅ”‘»ÿàT8ë\‰í£WÁǺ!‡ç lŽ6Á­a'|„K¤àX$A “xgX†:åO < œ`…ŽŸðîðœ‚ó¾Qþ_ÿù¿ñ…¦á%¦û ^â¨H &5¸GMÉ#IƒðXq}ï‹í§›—HYœx¡¾´Â;j$ÁÄÏÓ3MÀ5X—›Ú Í(ìÇGÈ!¿I”+s8XÊyR A©ÉÕÏqÅ!Ë9IS\»ËÿhPS~A”(®/ø^ƒ2}n<ÃSÅÊqTäj_ú ásœë{–: ¯/àk³LrîG3 jvgò±ÉÇC2+ÍEÂLo¤åBUϡ Ìþ9xj…r–]7´èÿîBÿPcîA•U'ìxäûÖ*åê• ü^ áüÕâÊÅ7a‰ÒÅóÖ¤@éñvIaf£F7wŒŸ;ñ¥šXD6ÐFÓœál$‘ÝÀgîÈxÌ´—øÆ×ëÍÆñ:w9Û«…kŸæe¬CU†‡Câ%‚ˆìm Ï÷̧ð&‘jü„aaZ$qƒÐî*‘y»}޲u™’o,¿DŽG…´€-4ÀŒò¬=¿k_Úkç ™wp|¡×$wÓÇiý.b$øs^WõžD'èG§ò%"û| 9Th\Ÿÿ™×ìE ߨ÷úX“¿Çs  L ÚíRûq^JÕž¢¢\˰§Äˆ"Ë8ßžÁÅk]ýŸ-âéUX¸ÊwWòeë|Õ‘³ëžUPKöªa#B³\"Á6`–úr•å\§UR¤d–¾ ¶uàip“”ßÒ Ë+i²a˜†Ydâ°v‰¸øíxæÚßEãZã4_L åƒ9Téþ—ý‚éìnÕJxûà+ƒàl?}B û¦Nrý̲t^ž¸ë¾…ÁҘḢzè\KC”¹±{ƳpL°u.WÉÛQ!ßë+¾"¶ 6¦iXAÓn¥IcŒ"ÎÌ$4¦MÖ—Ó–¥ I®ã(P&…á 7ˆL.34O]‘à?Xsüã¶Ôâø£ GaF€Ö ÐC5a>Áèyéj7·ƒ‘¯–½?øæXØjFW°H­÷‡8oÀlnØW7i}L2ž†í5ºü‡t)ÜÀ©86"#Pd»Ó¡—d1ùfƇ›M4^½ïXøjN›waJÊŠïšÝÉúÕ(/é ©DÎé«y»ñÀȽmÀ aý_ÿùÿRñÇç-·Û¿^ijUÉcºl@T—0¬E˜…ZSaj8’á˜æl t¯›ÊÄç3vi}vWC¦-Hßv¤ÉÝݶ>nƒð¾±Q²\zµ7]EÐEÓ¥o;å†ú ƒ@|ŽÑ“.6=K m5Ô}ÌNˆ¶Wé‡þuXÂ_‚,m:Ë‘½~댦vvWa„¤­AÛ>Ìå? Hw ^ž·V`iM‰Ýx#‘xØ?°ß[ö&†ùü¼ªyøÖOA_ qŒÒ›Æ“Gë8*(néìso6!{h z‘0ö¸Žc AëcQ-ÁŠw×í\A®(20_†{÷SkN2›_𪵦ÈÔpÜt Ï[©Ñ»Ã(€3ï3–03)„é²[ƯŽƒÒ%4CAÔƒÓ¡"M LE®p[CYQ`õÚ6<Ë…h™Z0-ŬÕmçòØLÆó—ÁfÞTà[{1tè(!¶óe&þ‹ßÊÊÖv¨7öwÜé ð7¸×Wp<çàMi'{g©á]´55”¶\‘·bmæk–?eô‚4;/ÐuqœkP`èh žaàŽ9šW¨LûË»CYf‘ÖXOìd9€íx$xÏžPXynh¶+°&÷yÿO3ªË¶$ü09ÜîQå%AÌûºÈkj¬â|¯2§œˆ 6nÃVaVTMÚ,òUwvéí§M°g ËWìnLÁ&Ú 'PNR(€tÄè› ïžÞ,sIY”àLœUÁº>h¦iþz ]!À¦5±q#bvWÈV,g˜Õ<”ùn‰NüP±ødïcԇДd4y·êÙQé)’žÔ=»¾Ö”¤‡+ò­HC6¦ÏK‘åúaùÉ`¾¦¹Xþ‰õáÛ¾{?hÅí½Á¡¸bì®dêbKФ§•˜ÿÿS2/]EÌK3ýòñžçF¬ÜCï:‘¤ÀТٛ.zKĬœNw÷·þõsÙñ¼h£Y»zE-üÖ­W_óNxÖwVF¦«Jßt HL*6Îfye$ êEúLqª ®ÙŠÒ›„¯Hx:D™†™‡Z‘Da¨ØÏqåsÙ¦9™± £ô'{¦ «Ô{&#Ò7?5»0ú%¼ÇàmN{ÊúÍY ¿%I>Òæ/ÍTIßj«øÕ€Õ3àâà‰1B4U¥µW– (hÂøUK;%”eÄ®8–NÉè™0³¥¤÷ptnü},úvìÒÝ/ùº:íÀ«QˆÐ(L°´Eè,gRÏÀˆÀžDiúóí$ÃþP]™TB/9°`/1]4ÙùÁïwð¥ÌÆÃ®å ¼ó‡îEiP[§‘ùø˜²xlïoÄ…ï‰7e6Zª@´h6YÊÍâüoq‰­ž,2f¦ñŽKŠ@{S[…)Âôê‹6¯t_ófÇs¦Èk–1êãè‹Â­¹C>ò˜Ab•Ϥƒt¨¿;'ei¿VXW•9˜Q~iƒµ÷È`~DË`-.£©“/˜e8mÆŠ-—ý·~Ô`ˆBìÞUbiëÐYª:¬oó­çÚ£‹¢ Ö"¨ú­þ58Vî}ŒceÚ­8VãžÄ‡‡‚ ?Æš}>±¾c„Áú¨®*ˆ‘&M¹&A°OauÑin*D«æµÛ«*‰6çb2Ž º:Žâ¨*‹jÃB´W;²Ñv‚ÒÌ®!©¥ÂËÖxá–—RRpPŸøk‡§ñ* 6ðô [×^5Ž2>"!b£À¾Kgá4u*èetÜçü‰®ã×ZG"\­ÂU²c•à2ZI¿eN¾¿ŒÐ­uëc©ý¥M”a/*¤/ QÄÓ“íRÅ”û ÷ÔTL°­•ëVš‹ ò2òoêE¿1´µ|-Ðjcû® yõ¤•LbÕ{N¤fV&¸Oû¸yÝÐãºyRyްQyˆ£¯·R­a0…àõI‰µiÕÚ„oÎe^`%&Xúì[K.ûá‹îãO;rrt§µ §Oºo¬ÊîÝ|t"ƒz‘&áÖû,©àS,]Qz–#E¤‹Èá½Ð LZiâ)×'ÓI†¶à;¨-ÒÈ|¤TMá`*?Å"#qƒ«$ó¼¼9жLn*­ˆôæR"Á¥_ÎG¡f±tÅéY*nó{Š_…¬•@;3 ©­Ç@U!·¡ÚÚeÂ×ÇUž‘:aü笺xÑ\š…Í7>þ·#„®£@³YÇ¿4"oÜ3ÍHWŠÆLÕÏgC¿ l—yô ’-™?½Q¡À›Ë(€%€ýKÐFbmEZ•é=s–]#œÕkš¶}Û‘M7Ì牻öö2¯rfêêRØTŸ1ÌT*þÚ‹ËÈ~d0v>6{‹nw3¿ŽI¯šÙ7¿=£u5Uhì;[.Âïdð§mÛŸ!E40ŽèªÐÌiŽëNuÊÅdÁjH¦`f¢(¡ŒßVË!,J `t© £þ¹|âq5îK„8"5£J8]þCc±˜+]®´‘ÈY°a'Å  ±(ÒœËòYþn^^T˜’DuYb,OÎB‹ÓHÍ_¾ '™*Q5ž¶4CëQUzÿáýï½ÓÉýMJ~ë×v6³=æ%†JJ@}™†æŠu Ø!_û—gï¼Ó–yòÔëyÜÉ.û‘—¶!ÓþÙ _JœÂ<›ñ+š¿œ™ÕÖE1î­‘òŠß!NµË0>UjÎÙãʤD5Ôiˆ1ÎG§°ìÿ÷-´²X-” ÎDšÎxª ¼ôÝ5Q@Z±Sã ¢\¹kñºzG³äpÀ(;m„Õ˜¹|ê‡0=íN9­v_ By˜‚iS‘Ïö9à…ÇAQïYIWY{B,ªÛ_Ö¾f"Dc:BÜë}{ã[¬¬0F3—`šÒîFso*`í>b™(ÐßkÚñ÷»³”RÑåèÇPúÜÃQ=¸Ý~òróèËXiŸZ§}:JûO—K{–ïÐ:J<#:ëiVx-ËÄ–LšÞk”†K*4]U¶#MÄÙ!ð¶Ðt•x(_=¥ªB[v@iËQÍ,¿><|òÜunÎ[†‘3ý ”.ýΰ;ø#i7ØVßßoÏþf©ðÑÓLúcR ì=é£hë6K»N“²ªC8ÇB½qGØuÒG1ྼßä"ÜQ¨[0ï¸ ¯3Â3”Δͯ~ãð±D*ß} êÜL¯”{’QÁ)î} 3)t ý%¤ÀRÂN•åDߊ½ª<\ˆüS’ÆQXÆ»Ãq†µp³ª+Œ ¢'SpLó}˜¾þííç»àw6xÿ·÷~·½£…³²3i'Öx•Gj5#“ÌUr ù+²‰ý¹½9¤5e&vãë›Çï6>ÇåàL5,¬wâ ÍWHËÀã+¬7÷¼Wí’µ‰šÛ2•EgêƒÈá°X|=,>É:4=šÓæÊRë+a²ãW$8ºÒà=0ŽÞ½K°ùžYMÛ+¸ÿõñÖópÜÆ\;ñ¼9`+“þñ__³÷Ò†zæGLY~´åÇ%I~ô§GUgIY¶<'NåB£¡BßJÔ{¬ì‹‡ˆ\éXoá),É.K¬'È+Lûƒ«ï?Þz»°ûhQ³ÿ~ÚÅöþ¹°´©w–ݬàýæ§ Ë³«?I™´Þ“ìÛkã2/ÄUØk*“èPV®øméUXQ4yT¨¦B 0†’ÉWA~8ÀÉ|¾¡œ(Ñ*‰è¥„£[´¢±`ýP¬&\«šw©ªª‹Ä\a·L›sû……¼a_ؤ5+/¼•hb߯ü¶Ž†x&+ƒßîô¢žDaáºÐ¦ÀXIɾÅxâàöfãgk ÿ¨ÛšòB‡¨r ™óô±ˆœÔqd‚°F² ?™Ú¶ÛT“cVü d®1‰r‡+Ú§l¥‚n󛥘ÿp!9@Ðà(g\¦å‹",Ã3©— «,-ÂZJ¥¬q޽&dj&Æiâ¼:%T¬5zTW<ÍÔ—¯5ÊT¹Ïlu¬Xŀͤ.JLa4$è¸ÃÖ»Áúl¿“AIäâjµ¿~D×ãLÎàkн Rih20›TÄâm°¯Ñý&õ¾-wö ”%@}-†æý†zPiHm|­´ÉÈà©b+Çìr£ßÌ‘Õiº‹ wšè^:fÑ4t˜ÚNÊ  Do¢ „\1g(Élþ¸„(B“W7Ÿ|¯ «# ñÖ…§Ï”ýc,@«¡tè 'e¡dÕBÅâôL+rnîãó&b'~ÓDíüw £Ø¬€ZÉ¥ìÄZÝN0QÐü †©“½ªž7îUÏ›¿jÕóU'{yþJU^9³-]…zÇCµã\ëü5+uŽ{•óW­q0E²Öæ/QÝT§’„Õî‰$ÇSå"‡ HCŒÙh‚K¼ ä;oS\Od_•$‹)B%3ƒ¥!ÄØrRïþNö<€GŠÅ˜‘³3¼~D8çYRååîFÖe@±B¹o!ï~«Ê„<’à={BƒüÐ’ºAƒÏû²ˆPCZŽŒLÈp7MàÖÇ;ñÝvÛ@ÈÍæ£ÈGàÀ$)(‰vÂŽ#¯H=®*€ñ]u›ŸÀ{3‰ù«Ô4èPóqI ökÂÒ:+0Väè[È| ñà)‰¤òx‰¡ü|V!«6iQôˆK›>õæ‘wÖiøœ×®¤ zœ…IŸ²|â±c¥DÑãÜo”$éæ‘ÖÕ³½‹†&c°ðå¼³­Näìʶ¡Ç–[ôÙò˽qÙ•êå.Œ"¸‘|\Zû㞇Zã>5Tyåï¹NêY< l à;-Âê„Â}‚¤É½³»­«<ËÏ9ë³lÅ4Æ‹›íË‚{¤f‘á1r”c„£)Fc5Îì9ɪæ®á=kàãlÐ{q"ûCìZô ô¸ƒªøÿüþ­'Šî M Žøù¢v,\© 3jDZÏèŸ?l|P‹òó¹Îà~n„*K ¦Gxh:v{Ó¼ôWM%4¡Žì{zœÁ`\@·W·>øÁíl —dŽ$Ç8zL[«]öüJ<÷@ù\§PÁ»wÄ&@z¤;3U-ܾõJ}wHó',ú}0C ¸éH†öåéU,¬Èx‹×~3@N‹ƒk¶ïcè1æªÌþy»yï‹&Kc’#޾è‰;]Óqˆ¢GRÚ¨Ò²é%{¹×qðyÞ´U—9]„uIÉ7”¹”¦=CUê‹÷þúa½ïãI`«€*#ø L\Çeb6Ö('×~ù¸ñDÍa®wŠ¡MorÚ‚ô3Îçÿ¸ø„ÁѤÚX©z{î%ǺNâ«PôøªÒÈþ•—-͇áJ…ȵ’¢hR6ªªY¼j[ª*ܧÄ#{òÜU•²ê´ÏrÈþÉÚ½e…üÐf<™UÉ„öi}}í醭Aò2Fáßá˜(N{GÓÚLƒ-— Ì2<ˆO âŒî1²@G_n5'ÁÛûíÏŸ^þòó'_äù#zrq½ˆ¦/DÏv$‡ Î ‚«NO‚$EUÖö½ÕY$}!¤Ý\ž`9ñÞ“ç ® ™EÒ@ÚÍ p÷ñî] ƒxÒ /xX †HúH»9 š×žø;Þ¡4‹¤Ï_}ŸRËßËJ”žvHÌ!­ 0±Û,·¿4W*6Qy?%UtÚEyV•¾ÜýÛ¿þ¸ûá›ó ºÀkª¬ÁŒß‹ Û,ЫþÃÏÀa¥°®òØŽâxc•¶±pS$®Ý¦™cÎèDa4§¸¯›ÿúÏÿ'&‡°NA9¾i”$J¬“þqûéõÇÛO¯¹‚Ÿ’ì+Ó™eÔC‘ *.cçGò!¸“æJ%:8 áÖ;Öç¸S3 Óô|0±—”¾dæv›Ì5Àvº7õ»?™ôI–ˆf³Ëæü©Èä{r –·óŒ'@wO|9¥eñ†%rˆ§²×Xá!ÊäHéÝÛ#ŒƒÎXÜȬd½#Aøí-ìGx$R¿­°¾b|ëÍ×@«’ ¶æ¼ô`Õ€¨ÆDR)¾ÞÚ†]È7¾Iò1 ƒ¤8$ß^³¢¯ÊN#ìv¯ß ž±|Ê;ÿúºG»üŠ“ÏÅŽfy^ æ4¬±TÅ>~¸Ûm¸ ë•7Ë ²‚¯È¹HÊ *¹øsMÕpãJ³y *hu®„먊Ն¿}º¹¿°ªi˜Qo’öÑ]õäX#1eUQ/ל§iì|#±ª±œ}Œ…ÿéÓ[O7ÏD Ì©‚µ“kf¼9ÑëB5"ÜðFˆR ÍU’ö µAàÐô:xç0B²L0…êFRÝÝÜòëï»!¡ô:»ÔS®Ne^OÁ=ÞýkKŸ³ÈC¡ƒ¶Rz¤ž,Ý!“0KþlrèEбLÒæ ¢„ \ ýú( »Ë…aÅ'3š¬º.µ»±¡_=3–âÒ)š–Lc;„¡†¯ùÒfWdi’°Ì–K<ŒîšYŒsÈž0³û®æð¯/~W Zi§Ñ¥$ªK8U. –Ü„&è"¾±¸j´‘мiýÆçŸn†^,~~.BVž_ÜÝüüÒÏAµõ(GaQ%„÷ã1Wvµ¾ã,ø• ‚Û ü ×ødUMI ƒ2èÈ¡ÈeE‡)ò´qzãMrÅWœïcŽ6¤iþÔs×#.:ž+."_˘ð½•9¦»j è9-\NØ/Ù««8eßW‚¾÷¿¥ƒfç¢çÍO®¹B”©¶÷w›àñ‡×?F­û¨MÅìú| YC™d‡YÃ!ª‚cM?é,‚–gQ1^R¿ªdc7ð;LOy#˨·Ssµ&*„ºÐaZ_8_²æ¯DV³i§!¬çkh¹ËˉU±lß<@Lk.Zd©É€pͦ̋ê…=È^@wSo}°=qn[ö]®hêÚ·âÅ.Éhf˜kŸ T …;Œe¹b]„YÆÏþ–„Àþ£*g±gc¡íÃæeÐ ]BOü¹mŠ0·M+­ÝHs2J½j'ž˼FœÊU šk×ÃXÒNn†`ô2bµƒŸ]ÑES¡ÛŠ7À‰(…˹?ü€½¿z¨SkL[¥¦SkÃÝpbšíû!îgýÁŒH §N`šŽY7§§PòÞ6òH² .T–Ñ÷±*qm…^ßËÚ´Ä9B)KˆZõñÌ5C·QA寞øu?“ã:Z"eùýpHð÷h*qu¢,ä-ð2ë.M¬h–Àmëø¢ ­U“0 ²}Ùnnî_¿ãÿ´r3î-,Ã3á·ìøô1)«:L›í*˜Ã»9hcQ'@#Yåû€¿ò,W"n:ï¡™‹ÂlG:ˆ‰}~FyR§]@ìzl j%’ºã‡aÜ6aÁ_W>j=ÑÞ]óþûáx¦~ mMP¥-WòúCp÷ùí»»æL«Â(ríwÍéÑîÌÔW/´gƒx‰ÝŒ0>'YBY}^åØu·Œ|ÁU†¦`1–?‘>ˆ¦aéšëûšDÁb²€ϼPLBêL±ÃÐ¥È,&áYsºÝÕ"q›nWÂh–Fc—:›soYì¸÷>WÂ#MÆÕ˜ò—ð)è…28¡à”iêÊz ¥I¼g8âþëögáÜB¾ö°¿¡•IQaÈ0@2PAØM¯‹ÉùÆu±>ÊZO§šËxú2 ¬Å=âgs@Z.çÒ*‡‰üªö¡,Ä•f j¬OBˆÔ)Ó{å[‘x ðŒ5Öc9.”Qª29Ý›Ë9@c1¤9WãAþ¾pª‹œR5=íäowufAõšBŒü°7xã[Êb§ÌÑX–Æ~¤‰ª}ëW–ªÎ2’ºxŸY…4¦)óDö0´üöˆ<5îeêí½©"’±!k*<ŸÙ_ŽBÍêÉ45_¤%½>dIkÊýuÃ)zGA¦PšRô •Þ¡m ¥PJ칫Ó.z¿ÿ°Ý¼ ¨ 4>ìïC8(w®…†(šr ›É½k⩪ôàJ“Ì(ÒƒY ÅŒ_fÇšר*Ñ4c>´'’˜IlÞzi*ã8spéA豃շoï·^è‘6î“xûË]‰ªÀ4)LGäÛ—žkïø?íÄéW)¦PšBô Çyà—[~ÙG} €Çß–þ<{¯ÜY!…ûîáB\WòS(Mö=Ã1}Vþ›WÞø»Ó6d« é‰N®é'«:O3¾>³4¿æ<ïŠ2ÉK—S)kˆšJLíÇ’Àéoq)uÂÛ49‡IŠ“5Pz’ô ^‚ùëæÄhMQý¾ücÈ„ªa™ö ½‚7ùž‹”üM,5’,†1¡À:³^=ï-U¹\Í€^9à«£}V,:^²(ù&³í~^—‘kÕ;‡§™cëQ‚4ïƒö½IIAw‘ëðqˆ¢G_ÚŒ7Û«ÛÛVô½ðu]³=˜-ØÆ«µïï¼Ð‚?p+½1&ÍÖlþŠ ?~%{ßýõC!”ÒP¥Â|å‹>eûüý!”}i¨ÜX(_ù Oiû¨¦PPšô{†*úÌ4زw,jÛ䘟³àÅûíöóK/dœª³˜÷wÔd£©‡4Riñ%Yp—ïaóä³nÓ®MýDOa2âÿáÝý»ßÞù¹C¡ùlžÀÙë:«ÊggÖS,]ò=K®Á[q¡4/²ðL®>¾õ×éñhîÌA‘cf¢G{wÏÈÕ-ÉeXœàZ™Îó9,Šfqåã&ãܽ ô%ô¡[(Œ‡2?÷Û[j&»ãWW{šÚŸ%Áû¤$O°‘x|%¤ðS‰:Þ¡Ñd­º%C> «ªLöµ§ÛcÙ,ÿ¹²i2oÍÆ‰þå\uôAû:ÒmôhžÂ½_n¼Ñ>bèõti6fSºÍ ´»ƒn¬Ç8z¤»«Ö¦ÞŽ}Üo!¿Z°6¥äN‘4ywv“û£1ûÿC»±À‹Ô™95dL'L·Í~{?GõºˆÖeÚÝVüs% ¶#s….¿~ùÔ\˜ÉïR÷<'=‰¶Dn - ä_íÂ#kmî›ÕÔhÚºôm'W¯Ý«üÀTb¡e7À“0?í2’O{ÖÔEatrgQW ‰ý$ë°ÂÔ„Doc*¤ffŒd ÈL3óøÓkö¿7¢µaªøë0&ôиE96‡§©ÉØZ(S(7aã}V¾båˆzðÚ'bÂ÷¯H}N”ž}ÃQá7´þB´:wþ: übªæ–ÇçkˆššLíÇÒÀ%YÍ•þÎŽ¦¢ ®k1cM+Å œOï^ÿþñîæ?|ÎÐÁÍGr6åÖžžkÅÅWò½hR VaÄͨöXZ¡ø’YGÖhG±¶ ÝŒ¡¡«Ç-.àgS\ý4;Vhį©HŸÙàöŠÄCµZ ÊåóÀ¿mîá:¯+z Á1çWòìGTRòz<-W¹k ¥FÓuh+¶Ö$´HÃçAeîóºâ™Bݲz›õÉÀ1”Ÿj»8=SؾâzYòš¦@CÛq®“oåô§'1 ¸²kZ¦)ÆÐVQUm6p-ªßui–óö¶¹,´³*0M5¦êFŸ‡ Ú0~Ô`ƒ/ðä,ÄG[a5.ðü <0ù ìÜ©+ ;uÅ\§nã¿SWVGäL(]˜8=ÆÆ\”/ò!Ìd¶t< ‘’²â‡ðÄAš Ò|7QêꄨG‡f.³ý^*ˆ•öO%Œ]ï´3ü€±V3pßK>á)E"[QHô½ø÷N,=ð¤PÁ«2ùn97¾J0s1d“ü$p»ìdÎXÕõ&åT/÷›L"sª03GÍX°ý^Ùƒ Uè¡«¶ßM…³»û8sÎS<ªBÂÃù·ÛêÒcýžÕóùDZ0s Î?|? ®1%¸¶—àúûIðS‚7ö¼ù~üS‚¿ÛKð÷ï'Å”€ÚK@¿—Yíþ`={<FˆÆb4ößM‘ ³/™eö}É,û~}IZ„g<zhÆ*€íwS¦âÄçÏ\ ný½´h.Ýú£Î«O¬±2ï%P]!–˜ÌX fú½$x"{Œ­}óˆÆb4öVDúÑJ“sR¹÷1ThºJ l'CQé‘K¾õ  Ï®ƒÎ„i0àL?7íž=Ø›±½¹û4vÖæƒwœ—䌅w>=¤ÂÒT¢oiÿ§0sŽ÷S˜Æ÷irß^Iâ:‹Cî½<É‘*”øöóšÂf®íÛ«ßo JÊô¹½­žÂ!*/{w¥¯ï݉¤…³Ã.%˜¦lÓñ‚±tH._z”¡ªR$ :$3˜ÚÓH#ÂÃç JÎpY8ûOhÏ)¤m¯wWÂ誢¼Àý··Ÿï¼îc¦Ú©ñvvªØÌN}me§ Ò¯ &Ù¤š?8Üë‚3 Asˆ]s„°Éyˆ¢É]ØŒˆoïn/±Ó™ž‘Ü"O€tÉϸEÞÞ5nîkáqßyí’ÏZregpŸv>×™ûq%˜¦lS.Ýöþnt¼ŸäQ`¿!ƒb1„2Av"È-eüáed@¸£rŒc @{K%gÏÿòO» $ÞU°Û§ú˜ÁÓ”al=n7á}ï›:%M¨—ë#ÀÝ(ÆîÂ1ަÕ¸2Ý~ö}ñ.­˜q˜æi/rT`PSЉ¹Û=H ˆßcV”kÝ—û‡(ºzq›‘Hi~Ûòå[/”;]¦®ig«³ º%!½¤ß>lü ´Åù ¬£3pšjŒŒÇUg~¨žBøÑ8¦i$ìŸÅn(®=Àªüž¼O<Ÿ]¨ØOÔ[-fõTœšt|x.¸Ÿ­p©¼xÈ·/Õ—\@·–Tíi]¹ЄJüúç÷¿Œ`ôÄkŒnFá·†Yž]õ®â#_Zo)®ÜU‚èÒšö§€‡ý;q.ÿ« ³`OÚ<Ǥ`ã'&Y*ô{^yÙÞÙœîó)Q^oÚJ7Pβöp +Õ<÷W¶èš2‘læÙ›0ɼÅñ¡€2Hâe_0oìµî(JVzJç6I…e Bc©Êëí;_”aœÔHsK³€b ÌǾ,ƒ/7o?þÚN8‰K‘‚voÆwD|éßÑN½{ÍT«TQ»25?!Ý–'&\ÇШD§0;Š£¬“|.Á¯o7añÖª… (Ö´gbå¶Ò‚÷‰˜µ—àËð̧Y{'žJ!üø ”•'ÎAj%˜fR LgjøSXÆ3vÒÀê(FË®†3“§1þï³øÚÆ<)É®“KÆž¡ŽõLNƒ÷¼÷“³2$—s M²gs ýfŒF2¹•½Ú>~K70ô14‹qÿá?>±ràÑçS¹N õ ôˆ‚Áˆçï··^NÝÿ s’nôzzôÀ`DñöSœ|cùÚís>¸áUðû‰d¬ÄXƒqÇÅqðœ×|¤už À_ LN4ãIa’±ï‡1Ì|°ahò˜ÄPl†íQ/0žØ|)%Œöþ&+RwáÇ3Í0ýîáÜ ÿ <öFàDfËN|gátÈO'—xó¹/òNUæ)_‹ñ§ \~ÌíïÜZÀ2Ф±T "ßbOíõ#àtÖvÈ@ÕùZÉÞsÑ@àlÊVÉÓC>“³“)µh/¢iñÛŽ%sN½÷lœç'Óobðé¤ÅDG‚ÆdìZw¼kÞÈùoÔù\ãèD~£C¿3š¿[Ÿ0¬x;Qí´H²àf׈v˜;^®:¤«ÄÜŪ|»ûø#+÷l|S2σ•œÆý:i5÷¦Î´S5n|ޝ¦ík¹ß}%ÏU¸wâ9Ñ!Ûÿ;)÷¤Ìi ßz«æÒ8tK߀c>¾’ãíÍÆ{uÎýnºí!h1…ð“= ð ãÿ œŽu󈪆Ñ!ÛM\Åß6îOÏaø‡°‚ C0'°’šz/ÁÀ['Ésì–ŽXË^cye7v‹¯qìáö´8“I?–?òTÛu¾bˆ¡Kr:gÁyúj½Š¼¸vcÙhQdÁ9¿ÍçÍu¿Öö¹Mšþ‡pâ;ÑaÝÒ¶÷¢Ù>N\.·º@è#²Ã•]oMµË¹Ð1€×öL(?ÿyÉ,MITóíqä9•û”ã – óÉ‘A$A@ôýß2.üš£} =¸…ªIˆiB¢¯Â(Œh‘:ù ŒýÎh¼åòæöævû/>Ëþcž®×L*0Vh÷-Æ‹sùÇMs$2Õ"ÛE„ý>@n‚mkÂsHk´'v‚üMÐ{ê—s™¢‘.SKÖ¥ õ8!¹,⟠bã;—6ïîžC|*â4D]3T¥¸~â¿ø@°ÈoyÈYä¸ÝmÒP•׿óí¶µð×MÇ¢$çÜþ&ëE4C=„­ôÂökŽË•Ç~Â2œ¡&ýÞ\ÛÒWÄG¾Ÿ|%;¸8ü)|vÑ` £Á½g$ê ¨0åüB\¢ÎÊZÝÐÁyÊ"šï‰mÓuèø­D ø“(MàWg)¦`ÚJôLU+:·âœÊ*I˜ž= r³:LYƒå~LT[ ÄÄ9Üõ$Âáßñ¤Š ¢.¶j|' ŠSHɘYdQ[‘±ýx$ÂÚÙÞ6Õ­We°ô°Rá»rÿ=Wüè˜+~\Ìa Ûž}l–ÄK+.Ï=ýÑþ4õÈ^ƒ+„¯‹þø°Ag•G^KǼxð±ÏlÌ—ùÝv;˜ =½ø‚8…[J…IJÓ‹¹6)IiêìBlGƒeßjâ!ãOO„ŸÈ~wÊiµ‹N$úºkNÔ»ò_†Õ”cD,-l?]&ð>àï;o¾tr»djÉ@ÞµQñÓW>¨À Ú2`*5b2ÄÇð¦ùŸ¥ßçù×sX~Åà«4à=0Ÿ©øêIÆ«2b³º>JXS•† KZ‰-p^{ ;±»8 ©u³¡DYÑchÃéÿ’Ä1ɤ§ØËgQ¥ÛalÒŽ KS ºýe¥ßÉ>‹"m–IÉÆ2iêqž¢@“cVuéD| ¢A½5¹xBÓzïž¹Ç :Œ“ 3Îò¢c:íÕZe>2ü»¹X€äœü)/í®¢{Ø%£…¬›Ål®,`é 3°7™Q6à¤{wÕ¼ƒLÂŒ®†j1þ¬á!½ˆÄF`0ß“4aƒ²ç<„»+ëÔY4 lM—Ö2œ4ãöœ1{Éy.[+§z)¶WN”€0~»¶­ MÚÊSæ>6qÈ(È5TGoƒK`zR M'^Y䪨Iš³£”wKÄ3n eÔ\g)Ô0z²ÌÌQL²ˆ—É'‡¦wä?‚Ñãß¶Jß÷½ä÷Âæø-1Ù×Ç]m¿çgjM‡©áäH){üúåSã[‡øR|ƒ@R¹‹0BÒÖ ±IÐ>† !.Åñœ!Ø“'¸4ZnÉqë»ê jK¤Â˜T§2P³Hb] šP¾ËÜ?Ôi•¢ûß K_5~qip“”{â-Ó<ŒV(Ã,ÂÞ'2K[p'©G"Ë—Wò¥ï²)jDwE8ÚJÈúxÔHµ…ñ8º­È®ý¸ mÔ½¹§V?ݸöó¼I <’ÍCiKÐrÞñ=öÐ4±º¢ÌÏ=-d通‚oÍ Åé9?Ê<%¡rî¡hë6ãR‘”$Ÿ'·cÍš™<&1«+^üþüŒ7Ǥ‘Eay<¨7£Ò c§ªt o](¥õH²f \=<³‘NCõ"¬=+„&&ŠZUÒÞ‡xéå-ÅT!ø“c M³,m9:K¥û~þÄy/ÄiJ•'Iªc,7©G!BQâéK3°Ö’Gì’÷ämH3X"°ßè¼i£–Pžr_’M˜ùÒ,)(4¤M- §`+õÖÁµu\€šìŒÜòª¬·üÙ•±“û [À®¥v ʲlƒË>ùmhTΓp(ºiÊæG-—¬Ûæ.ÐI[“ÆN«Þçwÿ°Q>Ta$hl}©ã>&Sik33ÃÞõ¡| ÊÚ–lE²£ÃÁÿe8m-ÆŠQj[^ X ‚yÓ¥ +ûÂ38úJp+±žÉFh°™SöøMq~(wÕ–3ë1”6ñÖp”ü½êßç“ñöÝ JÇ ò‰“ç3ø5©ôÀ&cú÷I°gõèQéÑÔ¿šbrUÁ¤jÒÑÿP)pð+OZ=%Õ)€»ÙïnnÛk.¡”ƒcuHK¥¦nw@©¾2bŽÞ»>…kÕ¬j£Qѯ´{K¢´yÂr” ñ¢Ì5 þY€‹êÿŽÛðù÷øå4ŒGçž&°•–=˜‘ž7›ff`°¯ÏO/I·²,¼H7ŵQ®‡¢jnê*‡ š£àK'yð…È=s˜Ú…›%¡ñâæË—ÍËËiºg”=H:…µP´2ôç´&Už³6âSþ¼ËHyl—PüK–gÿd)çE6%´tC ±|âm›Ë^µOÜEJ¸p’r|3²Ü`Æ=Êë/_MààÞ8–,7ÚiT_£¿%VsJÏÉ'»ÜG­k‘l=±³ºYê9Äa®ð#Šø8.¯!Z(¤\L~RÈäuYY±S^Ñ"¯~ü×]˜ýQì®E±‹HšÖiXb ¨ñ Y—PGb_Øl‚¢Þ§¬%KA½s¾‡*¦Ù{úbóéîþå¥õNŠvT+WÉ]óîdÞ²íìó·ác˜¤!>A¾œO#¦Y˜¸J³ø†»¾-âHÙ&ßÊÑ‚ôÚ›ÀRûýÍÇ—|zèDVîç‡Fž“~xp‚‡¼°àežaÉö¹Uí3sÏ~Ì]ò)ôøj; 踰Ô$« +ŽgŸ™zòwi;Èñ-oð"à/âºH/™wO?²ˆA§z……lü¨ºð%'iU¸Ó->òêÅ æÂ"Ã=¸Ü“–¿Œ;ûw¨#y›wÁ¡d#‹8}YùÒúÒz×lró)ïô3êö@Çâf)w  ·½ÔEðâóö×—Ýf¾‹,Œ" WžžIU&‘G™'q¹ƒTœw/.9Ê;Q@ øn Ò™© äb“g]”öÔt=d'ÑgìÞgûkWzùûË ö q ?š Ád“P#åþ‘oxJ‰ÿ{C¸îÎÛB±1ÒH0þZ9µ%ìä™/͘Úupr1ci?òËÇVlYðß$œ úÕGS ÀµP­2¾qp³ý÷‹ÕûP)xi k¡QDµp÷GòG~h÷¿`µÙéJrLpË¢…dÂ^µ©ðfˆ—4x{Qi7ù¥a&VƒX@ýÏ—6fÓgš nV˜ÂÚh×Ì.ò”‡«6Œo­\7ñ®BZh4ð6þöó²®÷è^H¥ìŒÚ÷êáÙĬÇ~¶îï6þU(˜Y¦èë§*`]ú0³ÅK„ªÏÁå úÆ)×]S½-SJ‰ÄkߺTÉ™uÒ0u Zè"ìGeëöfó;kÙä;ߢÔÕÙGgi k!Od¼Oøá.xñkkgqðp*IXw¬€É™õÉ_^¬«ùȆ±n>4@-”k!ÆËIYWø±¹áÛ_üv³yéÅ…ØL̵rQiì[¡å] #ùèeÓë#®×Çá¶WUÎ$ººP=þzÙÕ:…µPª27ƒ ÿ/ü/~¿ùÐßñSå0˜îØiÀº›7þûZOIìeЬÀµQµ‡2'++©e [[ƒ˜Tr >ÓŠœÁÁÛKŽ¡Ÿ*­ÂÔFÆJÝ*üþ°¹TõÿT¡‹â"ÇœOŒRž“L öšF€©D_þ-¨N¬¯‘пu{MYa•[N÷®]a½î¢Õë"ªú(¼Â^õˆ"Ûµe’‰ØÌé´Ï¸Ô19ÀªfÉ7²Ž ©¹¿‰Ö4 +öê|™ŒŒßXOP-_i¬™ò˜u’Åä›6Zðj¾üê½x§þŒ|ö¶{üàSó¥à><Z„~«,ùûãjõ4 )“¨,_Áì¹ùFÕÄó7jü²ÜéÇ~zô ñNíéðç›®²Êñ}IHð%ÌŽìÿy _¼ÿòåå«Ù8F),et"(ƒNbÇcö+%ð,hðXí[Öà¦ö|†¬«ŒZ[=ÌÆÎ(•Fá§*ò·RGnˆ'Ü•ô$*|ˆRˆûäøG ÞÝùU ¤²J­%.J“Ùôy+RqeaD@‘ f±æ®ðÜäŸ@¬Å½3˜•þ‚Qp‹½AÄ’ëŶ¡ÍÚBÖ$Új>2{…ͬòe(S:ÎLÌH(RA/æü×¾NÒxW•ÉñÈ7ž™§Ä2Ì ‹£ùR rçbHCU&´ã~¨3ñ^ü¹kþ¶OÄ%n‹ö³©u aßË .¼Q)Û³U$ª)E|¾Üý3ßÛ§ç,Ì­©ÑlÊý|oLƇ!ErèÅ›u¾ÒkÁjbŸ3 K±›ÌÊÿbHÄ•ƒQôÒëÄ9?uEÚSÌVÚÏcÌÅ]a1«üdÆÃ‘‚Iì›E¹®r…©m#¿³Fah4Ÿm8cNît ™¨ÒÃ0úû0úJ²x·¯Ù¿•S²ÌC­RÎ&ÏÏ"ìÏ<¨EvÄ©åÀ¦¹#ÅXšÌú–ki¶aíh"1´!7ŸnFŒâ„~uJ­1À ‹6øü„ aw—hkÇX5ƒ¢Mò ®¥S~°Ü,ã$ùà ¡YóÙ$y'-~+²"¼sLÒÖ| jK²ðtIRÈ ­Éêô±!WF f‰5£ÝÞ}c?­¯µFGa9Ÿ.màõ‰ð¹ 1´!§J2 FÒ±Æàgj…™Âp6Õ>ð°F£‹<; bгgƒYàÖ!õx?AÝ!Ë"•ÅE4+Þ³élCÖè«Ó.:‘È­—8´Bqb6› ¿ð·Ђ+cBŠ”2gQUb*-¡­1SÚΧ ŽÀ¨GUÚ£¸éH]’¦$Å`ŒGÖ’çLjš“KÎpY·K NVÈtáç×l!ˆIü¢®kÕ"­AT›•aq¢ÀIóY¨5SÃÕ•óÔŠ¢Ø,^bRU@šQîèQ›ÒJ'pÉ;ð^ØgàN‡¤9¹5R†lP²«EEØÇ2Át¥aÄÀ~Ëø³9þq¤´P¡é&ÊÀv5udh[ºhLíH.$ )³Š”Ò¯ç.ä›’Ïš^ù]0WùÎ#,$mgtÓڸɀ¬€ ye’»0]yùlANZ.óéÄ_Ší;Á­|ñNÜm׋¿E/Þ+k’Åü>!„NÚ:äJŠ-ÌæÖ{aóNš43_Ã%ïÀ[‘QÝÉb¤¯y‚ꤠG &±ŸOÍ(ç1ÆH ³Fah4Ÿ,œInê`ÝÙQ%‡EìQ:\³H:lô:ZÀͬ+2GafNj&•̘H§~H›ÀÑV¸©mgí nº³jú4¦v$‰èÄ s'Ò:¤[£}I‚½Í^ž™¯á’wà=›Ôd÷/Íàè\ßÍ$êoê#02%3›DÆ Ð3Vðô¸é/gºÆSþªï ¶å:›ž¶=LFk#ëÑ·™ššØÏÙ.Ú‹.î’Ìæ gª°<’J,—eþí#,‚êé †XÉÜ7`â(¶Nôgsgê%õ)BòS›ô§(b ëà&F°à]—)¿!åPz\û†+iük™Þ……Cr¼fÎŒ ôÍCû“´Ë8«„†V ©Ô4ç…@É”2mÌ)ð©ö]‘§IäZ‰Îb­“šX.%¼áaíh"1´!§N5sFyí8å7AXãцŸOb§¨ëÇZ¥¹aTKw­KS±K µK#nÑ7ˆùœâšÑ¥YXÐSî¶ê¬Y‰üÀdVø­ eÈÅ•†EF›¦»ˆ”pár人°€µFGa9Ÿ.4½íÂÚÑDbhCN•d–ŒZs5Œ#6œñ2iìz°îl ‰¨SÅ(öõcÑZ ³Æch4Ÿ m8cNît ™¨RÄ0ú¸sG.“F†³EVs&hD–3C:SB®Ä(n:R—„¤f)IÝ㑵乘šäPvó.`éÔÛÛ+ˆšm•‰¡ ¹Ù¤³bTäyŠ‘hc=N­ÕJbmX8sZŒLÉÌ&Ž1Þ›Áª•`z¬†¦+é½,㺣ûI+~³IgEªŠ{)J0=zCÓ•ä{ˆ ¦X$­øÍ&Ÿ),,Ëpzµ½±¾¦nJ_Á#kÉs61MÉa,7™¯3i-0™¬Æ8®)-&ͯ"™ÄSÜï夽f…ÁÈh6XfzàÁŒ)¹³1$¢H íØgU˜d.7Ø¥ÇÊ, •Í‚\ÅÅëñp&bÆAéÖÖ(â|§²C·{g•ÆÐjqã·N—u ‹ÀÇ”ÊÌvïõøÇ•{žâÝŸyf7z]™á 4™M ±Ñ*þ¿Y@C:®LŒH(RÁ(æíškI¢¼„½Á•uz¬`-0š³\]ÚþÂÃo×übÎ}‰¤ ¿…ÕmMRü.»*/Ou/ÃÌš1r<Ù­@u'cÈÃú|wžwené}Ke<åAÐ…%ïT7¾¶QÕŠ¥ry['j͇0ŠòÚòTõ ÎBÔUVóKB"ðkNí+yÆ`ÖÁcFªU¢£'Ïæ¤™’Y%²Ìâë™î¢ò¹¨r.¥M†›‡˜a¡0˜ïªóp«‰1‚tc`yU]?Æð±œæÙÊ®Xˆ÷ ø¬ä,ê_X ƒè»Ä\;Ò ©µbšæÇ#ÿ©Ê$²’zb&Þ ƒù>7cÄÁ-ú1Wu´5¢{NåElìS–³2ó3WÌKAŒ(¸ÅÞ â*Å bûHJj»z d-î}“ùI0ÈŠ+ #ªÉ/XõžÖ{Ø…B£2)¬÷²¯à̰˜³ZÚÏÓ†4'†ÀÉ”ŽzS‡*/,ëÿ9€åøwÁç—Q ˆAä]â­eÕŠÈz1k…ã`|„èFÀ îÖðf’¥9’Y”ù?Á”þ«X³dæ-gSd#ÙñC¢fÃJ‘VzTØ`,9“ˆß¿“ÿX¥Ó Ð9³ùÁcÁ ƒ1ÕX̘ÀcX&Ö7Í®CiÑÎ÷¦d(+v8Ä,8©:XZDä´GMÁ³¯‹c•5 :³fk3d´0“™ŸHZaÀëÈ’ùþGpÑg—2kHslfí–Ršp6äPx™SR®žhò( 2á6î}H-KÎÈ•Éâ=æÊ‹+ #3™ëGÛ©‹¼²B³›<Át¥aÄÀº³LÿHKÀ À\ÄÇÁ]s~Ï%êÚ±¶Ïí¤Ž9}`!Ò¨9¼çuíX;åêæ¬ MTG¶ QmBÎE\iM-÷…©ŒâÚßI×vRµ8¶QÕŠ¥jûãzÔX›7yéjEp'ìX*ÍwFé€Í‘X2UÝÊÃÝð`·"”Q7fTfã®ݘÂ:­vùžÏ3„‘u¢Ì"­Ð˜Ú©*sè3ssûIœ„´$4°^!!Â*".b¼ݪ¨ÅÎ=›êFe<ÙAÐÅ}ŽšñµªV,g¶0ÎG-ÉbòM+2<¤ø¼päþŠ;rWAë€öàn»·LÕ€©Û¸Š¿Ï„uGä‰T².ã듈˜øÇÔaˆˆ§4y%¾š1ç–û¼®‚g6ê ~Ò~Ï”¾2¤èÊΈX/[abÒtÿ )7`¨C z£Ë v‡0ª¨³%zc³¨Zç05†fD•uÈ^íƒÎN+si^Í«e¼DGq)o?O5¯í3Ô!ÍÊo„)rÔÊ"µ±al­3Õ ˆn\—ª­i¾z/-ƒjš®äŒxÍÕZÖYM\EgŸÉ¦öKÔz¡µãf¥f.\Š™aëÇ´rÐêõ4+f Qçñ½ÉhËñsž“¨wM‘ÖGÖ%nžUa™,ÞíÃúÆ,ÌR¢L ç3~–ÆÔœª;KC‚‹…}ÈÆº¸#¨çÇI?MûNqÄΫ$)wIO¬ܳ0„d£ä•w¿P.ÕPcô¶Ì‘ôu˜.rõ³H"C°¤?øÌò²» }!„Y??,”ê@„6Oðê¹ XuÙË€kc©ßsÑgš5[$¼´Ú7ôJˆe®}“H:$L4ã_w%ІMKc§¥½÷4m€%R‹Óf)I+#F.d´y,¶Šm#`[ù•ü즞á 6à$°©—oï·ë«•‰Ã „Ž?ÚuËE"#O´œILRR5iÁCØS€öÍiE°D¨\?zÖ…xj¯9ÃjIXQµ˜è’X,¿2Æ®™Æ¥BRBh¤ RÏU* Ï•wœKÉEƒqgc[×BcÒÛèw­dvÕîSQz⇿ÒB°È­Þ †öúOtâgZm 3#Ñ]Øh™©ºØÛâk_k麟Õ4_¤2t<{7¨}Ûwö\ó´>»TH €%>ýàúѳ.S{Èæÿ߸5PÛ‰.‰™¼¿gCŸ¯2ÆæyfqUUVÄS~àÕ/Ñd¹¶1ÒB^^°mh̬Ø+‹Âm€ùdäÍ~_ÔVÆÕ<¤7ÁªKñ Ì¿Ázû›þ/ø²;.‰˜ûµœ‡ùïÝn!צ¿|©n¦3Cšê¯jòKöRöOÙ¾¬à"ù¦¶BTuúµœ\@F]ð¦¨OíŽ-}ȳۦw&:ÿg[™mj¨šP¼n–·%>j¡àˆ”¥ ¼†vAmÞîÄ×ïnµE˜ŸYÝV\ÉeÕ  M­â>u>] ,®N»•C @ )®jº•CêpíëNUb™š.0ƒIˆpü®¨ØiÑÍý¬DµõqiæK¬ÎXµ =kÙ÷±Ø¼ãÛÈ/»†¯S#ëM±mŽ…×–ã(5E GÍÞqeÞüZ ®·ùö)`œ‰Xl_2UŸéªÚäÛo!ë\Ê0à‰ƒN¶èÐ4²Å Ô=4u-—§¼q r¶hF#î˜Bݯ*d‰ã“PwG¯´PÓX<ÑbÎCÑ2YDK£~»¥$¡¿[ɰ 4¤…Jíº\ îú›ñNá„Ø\ÅiYoÜÙ²Þº#‰4æÔû˜Z?Ôù‹ÝNÍš}¹¡mö–{å°€ru¹ºÎxÝŸ—Iˆí!œvqi˜-“rv…Xç9eí_Ôží%mlÐÄ&„iO¡tEÆ3$!çxˆY Ç7ùNxú`æÿ^-™8 sNŽçš ÷l.z¶*ý Ž{µ S î5¤¬ œ‡FƒôãSçû³ÐŦ ?íü©†B”·È+{¼JSl£ÈÄáÚ­òr¢4Å5ŠŒíäŒ Ý­+Ê*èDÍuÀ§X€a?\·†–ô¼ƒ€ª9”Û¼b®¶>(¬±O«‰š Ô(¤"c]ûÄÈÅDጿ‚+H…¿A\=thN™rc„îðêÄwÚ•=ÛïˆgS› Ó„Xïn.3 UÌO}³ÞÒÖåÔ±0íšS¤†Ü˜†4$!Ùvp,V-Û*¯#ñZÕL°ºÐ€”ÕÚ! 2¢®jâ6P¢n¾ã?ŹHRô0·&NeC°“g·ÎÎ(Á0ñypöîún%\¼xÊc<MÇŠ‡K0<×Ç8ÄïÌàÝ´Nl"Ú—m{ŠD¬+LpŠàÝåý x4z&gQ2ñ¨" “\ JžÌńɜUÍ†Ö˜Ì ¼qó9°C ‚xÔ§cC'$Thâ“K„ΪfCdLè¨ð„nÐFäÇb¢pÆ_GÇ …Iüµ1Û±¼pYi^jv-›»ð™ âÚÀ§Cœ§›äÓ¥1Ñóú”W³ð»L8Lt<â€áMtógÓ2±j2 ÞjÖÊ©´‹Ñ‹Î H]»ˆÃ6Õ´£TäF¼ˆ…®­® Äá›jÚñ)r#¾é¢ƒ&›ÑEÁS4¬° |€3N³¼ï»rsšÜÚoš'Rq°L=;¸Aj€¨ÏÐÂØÌUAE7ºf<þ¿Š™•1 ú 1 £MÕŠRä8û¼ë߬ú¦ÍžË®‡&^C’úð†ïBt*X±É»WøÞéó¾”Å¡mEhÊp‡ $¦uÙç‘%pT°¢¢ÁøM·}wŠÄ1(Øqt§ýZdJeûüÆ¡P4¬0 |ÀÁþÀ&þk4–¿°üUÅòW4–oÏÇ8(£‚ €üýë7î„ù’]ϊĘ1 ¸éÒh%]—Ž%f/n¢â@#wãÄV\!—æD½‹4Q´ÃÅ´NX¬PÏÆ¸Ç#½€Å EÓ‹ä&øà# _´0ª t¾ö‘ ñ¨`ÇÓÍðíã½7î6'$nYȪfÅ1ñ•å§¼ŽúÓšDþâÔÆw m¨ShµN¡}z%¸^¡m^(×Íi~«!¬iG¦Èác&>b‹·Ôðfb‘VWõ ‚\ù5/;‘¸š¦-—3ÀŠh¬”lϯùÞs$\«²±.:‚ß{ßÂFùœRµ 5>!4­Ú4¤¬ŠÀZBKNiIhêÙÑ Rc‘“H3|^S+m‘‹G¨h9ñŒ†Ž}Àb“U®åmº×áq×(¨~#Vä•Iùì0÷ WÉ R}Û@É¿QÓir¤ë¶‰œ;ZvXBfÀµºy¼Gç8ÓÞ¤O¦¨¹‘Ð hñ¨€±ÔÇX,£† ‹ý#ßå) 5'&¤ÁÉà‹SÿDkåSSENL5+¦AhÀ4~ÁæÙ©ŒD6*X1ÑàÍ—ë+Üñ;µv=;}¯…7j™¦XINYʶ©ZÑi‚@m Û±Š]‡U4ìˆ*e%–ý)CÚrÔö²Um‚J¶šÇÕê(|)ÞÌ>m7Z›W³¹ÄŽÁ çQp ¡ @!—Ûaá<GçuÛ‘Á#Žî„Âñ²†×c¢½ízTºÔ®ìŽ/9R‰P ÒC¬£ÓÁïèt0>âžònÇo.BcU31éB2øÌ½ºø0§ÅÈQ?ÀÎâ_a!Š«¡`²”Á¿¿½Á0S6¢àØõLT†Ô.n'"a£$¸Gblˆãi ¸âS-”^Ó”Ba‰®=U¨æTÓZ£î DÔ 8tvÅ FCLó*WvG0Xƒ(¸n]±ErmßzÀa?Æ>úQí ý€ô=b{QXL Ì> Án‰h{q˜šl¦ÜˆQÙ‰ÁšÐ .ÛwIgjºr˜l/ƒµl‘ … ²ÞhoqË í¶Œl@L É>@¹¿¼~Âß5´¡®¡v Ú> ªoÐv=âð94'0M¹mä¦ ·´¥OÇ„ƒG^u;jSØ€®ãñË•ÙìU;nUÐÀ±é£íÚ$ÀjÚÑ*rXü¦¹e×­(Üã>Id«Þ­.5Úd+Ñà¨&p8ØŽM4SˆhÑ`a7{º¼Œܘ&¦!|Àópq}õæÓ»‹l ófp@ïÈU¸K) tök8˜ŠÆhhL0Êp~,úæ2c_übüýL ;éñó퀨½vÿ»º«þ ~#Ï„xµ¤‡Ýž¨2cU3aéBCéÏ|ÆRÔ¤ébÁ™:Sdƒ„ ¾á0a÷éL1Š‹}ȨÞGîuFc+ýóTUDCWâf¤òØ\$.ZÿTE\MMgé;¼cìTÁÔ˜;š“ì¦$Û³‹ÃbhL°Èð1ç`vi÷hLl³1˜©fE7éÙÖ%ßxØ; Uo‚P—Ò.R‰cpÂSTqM Û> ‚/(,Ãfm ›Ú•&4B‹Ùè=ÅŽcNþaÌÉÅ|¹¾Bá`ÏL¬·mÄnøTg‚f”`€¾ðÇ,.ï?_€ì_ba û‚Ü:rÂ÷±ã²Çª7¤K ™5n‚£ò,~>¸=oìÌ‹M‚ðæ<Ó‹O©PMS›.Q0ÜÌTpÅ©;D%„SÕÄ3t¬¢#Ò蹩"æÆ @Á7–œê²-:±ÜxàÀ*ì¼§òoº´ãÂJÓ&ý»!oòmEYôE·§ò!¿Û¬¡pÎÎuÈdhH@¸¶K¢©ú pA ˜C»Îw»ŠßçDzzMæ2ã9QB>TÍ&¯’jê!€\lÛyð( F×IH¢ð ¢ª~4 ˆ¾iuOÕôAar$Q ¦¢Âã6ÚÈó¿*VÑN%¥©íK‡A6™‹ÄàÂ$ûïzNÅcÈÖ¦Æ/‡½üœ)ŸhÓÅž'˸Éf3ùD±°§#žÑiY „QsquyÈ…?~Eïù×™¬82Ï¿èÏÔÆYz;ùÛ8äoGäo“‘·ùö[ø†i¼…0v!Ï_p‚£UE2ñ‘U{÷zVÄ:V;¯qncZæV6˼LÜùö)ß”UÙ¿f'L‚-Ö-³úH¦â(,?::§)pÙ óžhª}“ÌÆÀôÝ®ÝÎ!Ønñ”Ú­\'°ø=®Š?Ü_f ¸lÓ6Úö%VÇɬ™.‰˜è1Ï}ìòšì)^ö"8/’MÇ:á%j¸³—[V0æ4)3ŠŠRÂ`‘«g×÷¬ä.¹¥# ¥ IJ"都âKjÇ!\§gÐQ xð!“ÒÂÀ°JÞ”¬ì¨ÎÝVFxR"ÕäLo˪“µìk¾Ý6§º_€âj&¤z˜ÐpiS\åûúùâvÁ(ÈLÊ$Š3¯YœFjzîæÌUFmânoV¤¯h2ÃKêÜ«tF©›½Û¹Ï¤ŠGÂ#³ñ‘H€¨œ»¹ƒ£ŠGÂ#³ñ‘H€¨\`ƒ$~kÄÐÀâL‡C„‚q˜ŸZ‡ØÄ:D¦ÕŒü‚Äà™¹˜·Œ¯Hc±ÍlBb׿u…hd”$&ÁâL‡C„1cÁ¿Ô,$x欮â×U…$Ïk£ñ«¢†gâ"'zy“ bÁ¼Mó æ-Ìœ¥Hü"¤ÄàI­nÈÅÃWÑ–YëKYå›è`Ð&.Õáé¨Cê²nA ÆT³WÂ"×ÀTñHxd6> Sf¬/¡W–¸ Lòšr5Ä0’Wrk8 †„A’q$L!I]2Á-–P) ÷ӆÉpÆ®+Þ<ê6ÎÇ0JƒÔù 5œ-VŽó•ûOTDne»¢­š×n` 厯êl«-á]˜Eví@Èßq«ï¥ìŸJÆ‘i sÿäôŸª{²A湑SÜÚ¹ü,ßЖMPaÒM!=¸ºØ‡°+Ú†”ìy—”mÒQv‚v*ÍMCk¬pMJ•»]Œ®¯”WsÕ;¸¬ñ)ïø5-âO^ïIV«03Ö¤óKäãÛÿ"ð6öSdJjöDBüp"ýQÔ´‡éµº‹&ˆV÷§rûDóòSÙ°uZ|o«rË_·¤e”JµA6ÂZJ­w¨»Ù©Âüqû‚l»rS¨ô~úûÿ"?K’¿d÷×$ËŸó²Ê7UÁ.У)S²;1Û‚¿ð..î'A²Å÷b›@RQs“!Fê=ý;¦ò<͉ûfĆ9ÿÒs£›·ÙJ,¨ÌGdz³ùGƒ m@ÃR(9!òëMPJdl*ˆOÃQË„ps`üPô´âÓ¿„¿‚Yn•ÌæÛ©ƒþäûíTД‚1M<¨¼AñIH&µ·K.b]þ’€lÔrg"• ÇNÃ7tø–AWõà‚¼»•è ¶ú™ÖV Ø8‡Öì*/ŽM½*iH¶yU$PPõÜø™ÔðœQžÕÅKFÊAÒ?GÜ¿ÐÁô‹9•~«gQ*èg¨ÒßšÍy˜êY½°¦‡˜òÀž(Æ+þ‰m"9äÇJÿÞöœß­¹ ëDÓ•Ëi}^Ÿó+̳¶Ù.Oj7mQ“§rßÇ7òU;ðA»{Ò¿V쯨–~Œ-®!5õ‘â›+›nK°é%Sª¾];„‰ÉºPa§þ‹À”6Ñ~ر¨ª¼n¾ûãÓ¥œ±Ý±P\MýŠpå±Ê(Îïh€Ç:ügç¡ò¼JæñA9Ý,”‹Â7Ì£㯇Õw›žŸÇŒŸÏ2‚фDzàyÊ0YÑr‚mLqAGÉ­¼od6næhÛ&Œ• M7~!§5Å÷Ÿ³ŸXA:k :T†Šóó2\žË6‘˨éçBåÌ~ðæóÅÇìëõüÙ <4~Tr§"júÃ󅇢.:óF¾* ÒߊWb†-ÁŽ?lCÖï$«Í„¹®`æ¤êB4b<Ã\<£y(ZNè £æ;H¿XÍo÷Û9}ŠMÝÉDV)µ]Ùtpz_5/ò-1 –ÄH$M]ÓÍC&>[%®a—¼¹* û1dÍüŠÒöȳ]7›^»ôG©÷Ãý¬øŠÐö³)6u/tç|гןl‡ ,1ÿÑ$4D£’äͤ±ù­Y…аW‘ž’2éŸè:±’&ÄÕ-ÓAHDÖ3kih85O1ÏÑwÍ­v øZ¦&½ªëOz&iMú/pº7"é_ l¶³óú ¨§ÚnÜŠ¬ŽœÝ <ó`2㢶®n |}/™‚¦â Öuâcö¾Ë÷ûr»ÞV9IH~›º»&lG˜]B`5¾š–¯xÀ†¦«”3’xøŒKÝ´e-ÌŠÖ°˜e0ŸÕ~<Oüƒø»eýíëwÓ#ÛbþåOñ˜F%'"*bdïËSÞŸýãDú³§¼m :œ¶ä3MSø&!ðÿ5ÿs½}†· Àÿm½+;*v)6Ä™p¹sªrPcìn‹þ¢m³‹ßW´n5§Ýצ:¡­~ ¢]pß½+©{ŽäÌZSvÌ€$ÓÚ1U4¬$3ËToÅô°üûp(å£aKvç–©ó–<5}z™B|ù(R+©å$æÝb7å8È[òâ…Xþ“Ö|þßuw”Äí$ÈäB˜ÐÓ DÏ Ú:‡H7d…—ЊʤðT¶y›oé5¦(£ !hijrR6kͽg/2YØæ°3l ˆI'Y¦ñtžYå˜CF³€ ÂåDxuÓ@UÍQR¯œðÝfz Í…83ƒŠaª Et©ã«óµú÷Zn ó&Ê––Kªä¹SSmZy³Ê3¯.º.¢)nË=ë œZÃÓTtÝDAH¬yÆSå• MѲY‹½ºª¶‡°c޵´CC›µ‹W,&QgÍ –hF2¤¥Þ yîTSSOpÉV;É;eå ä³ÌU*•'Ï ²_Ý`,o©îå±Û½y`7ŸË9}ó†¹Þªi—$øeIÜlìÛoÊ»y粆a9Ñõi9U(Ÿa­o²ðë× ýq“ â~Ô¡ƒS¨Ðíš!~§]Ûô"¤%hEóÁ”ÛtJm^.ÃK1“Y †imÃìžÊ'ÐD8mDŠ¡9¸vøJ$ó‰ˆ ·ë` o+Õ†“Çd×-LH¯@:¦1ÅÏÓÂ0t̹ل͵cz挾ì˼ofvß38.RI]šW Ù(Á¨ÚåóêbÃÄ1å‹É± 󳈡$üð÷£&šÃÐ*û[û¡ñ`õëVxl\Ûï\ à¦æ  ¨b9Fé®-¸ƒ[ðNl›ªÜ¾Îâ31ƒa5*y¹mY7ý†Ú-÷¯oºü‚Þì¨Úwÿv·ÊÎq»˜8#¾Ú>f Žô)¼º‚ЦªX†Ÿn,†§Tõò}2¾ÝÛDB‡ïn†µ(ÆR×KYRÍVB:&“®nhjƒ\ À‚c\ ¾Ö¶­šz^¶Y ¡h)j˜I_x•½ºˆ§¹ÁXj¨<ã«Iñ|fO|¦v"2-8í™åšî`[ý—•ðUWÇU%ÂBSÓPq)’Ú¢î|w›¦IÃ~$ºCâŒhÙÂ$Ï*jžÜÝ>^ŒG'‹ŒËfƒ,†VœH@ÛKÄæèÁðEþá¬naw˜3ã>õ 9µmÓ±K™šo‰\f¼\&JSRU«âû6ß>%r4´½ä¤ì”ÕtÉ‚äüBîFwEÅ/˜y*1ëö{Q| ¸?‘Å‚—•*oaÆ·ÒeÃÈ¥b§°CßûuQÓáz1šiÅoP²JA’ÊÀœ£Ê„ Æó<‚蜆ÄfCÐÕŒœCG¥Ík#c8’mÓÎËGÕ†!“ŸG0ã6’3–/}Ìc­š@ÑæË-Þâ9 ¼“ÉÁÔž+÷%2ï5ö¢%_-œÛ’¨:ŒøÈš*Sº\bt»‹n…ʈc->Õ0 øÕåêòéÃ¥$ íÌéVôB7œ7Õ(ìMJÔ:ö?œ¶°z‡Ÿ–ÜŸ¯?ħoËöíÓ`kº^Ð\Ò=Ú«3!‚L¶¤L¬hzႜsÒÄKµ˜v ñÊñú à†‰ ƒAÁ™îœ¨Ãt ÿh6‘^fa>"ªø”ÆßšÍà;†ÿ­è6E×5í9ƒOôF˜ðЦä|®Þ“LÊfLAˆùEo«2uØ<Õ÷QQ¤-ÏÛo€@,ðdÄ8¨vŒp´^×$­xëº^ˆ\rŠr¸2&„{:Æ·!!YžaWN6o¦moLõ½4FiK‚7‡ìƒ¼Œì™ØÇZ8äT&S2Š‚|\[øvË&¯k±u&d²fÏÆž»3̬NõšŽÄÓúCÙKCˆÚüÐè×Ï_n í1µšjº!¬GkeýrK{Ü6)Ȫ¸e§k·cµU¿)ú®‘{Å7B C ôäFô®[§O©|–¼4mzμÒx^=¸OÅûÐͦÇÊæœÙg”d®ÑÁ°hú´ŽOQô¢¦bJ×"P±;€å°ä¥ì·OI Ýv|˜-ZÎIs?ÐrY ¿Ý1­J(Š^»£¥Àß^ÝŒ;@Ñ“_úu]î]"pCÛ‹^ÊN]ñÄ¢¼8yœßµl'»!Ê!vd‰9°ž#!Sv}b=QÁæÂnà< œœ6ðO*pM=œ £ý"$®†Î üQ*¿rˆy„JÏ×Á)3ÎDOÌåˆYÛü0oÁ‘­Gcð5‰;®£°&ÂÆ¶Ãxà =°s¡ð :D•€ž¦Ì.ÕÛÔöB—²ÓVPÙðε͌ÛGšøW—Ÿ³Ÿv%¡b&ï^3î¢=¼€S•¤ÿË–ìÒ¹’–)Ù…6öMžÃ‚ l»²Å OÃO`…ôüTlýîã½çT3žçcbx>¢jÄóѽ´|ûõ¦—~c±Öò8[:jÓDÿ¨àcòsÒN·K»~o}:ÓDË àç²’b.ÍæT`qœ;lÀÇCwγ¸PÆ…øàÓà¦MžDr™HÙ#Y”½;ó$^þdè#jCtp<Ø]_îËmžºrã³äceÕs6kÃ4J•>"q%ÊŽÜxç¤õœÑ@‹Ë1'âÕç(blP#îkžÅnjEQQ³­ø ‚0f’·L£Øñ…íý“Õ„Ÿ‘ª`ã¢|bG€ƒù®eަny›ÅÎa EÔÔõp–¢rmC¸ÎÛª»gÙ“XÚLx©i –S'E/\K… t{mUæ5%ÉtΑÌbnŸ©‡Mo˜çlè7qAÐêwõv5÷món$sjšÃ ŽòÄŒ²°6RN¢!¹&_°q»Fðj ïýw®xgfÏÔ†Bè ÝpÛÛ=v\Ž¿o×­èGnÛSdo ÃøöTÓ¾ ³ïòóu„‰ôQÁAbG5SâÒ°õ©Ý¥Þ5e·áå¡kL‰|áßå•f"äiÖñþ©¾—À(š1e x{¶œÿ]­>‰Y{½ºüÖ 2Š7gwB­ås7Ó§1õXòr¶é1ö¶³úAœ•ÕlP…‘l®à€­«ˆ”ØçeÕ¤^xâ0‚á/U‚ÔÙª…¤>h¥²~N[Ëõ¼Üž-«ö«¯7H`sîf˜ê€ºofÛ¡wv‡¾á´e+‰åÈÔöad-íÝe&Ãbç ´¿ú>c¹t¢îe0[(Ü^ÿo´Ï3$omJìh!ƒ¬±ó p3Îd°HœVˆì«V"¸2[q^÷ @×$žÜ0µC˜¬ƒ šÉF\‚Ên?,ÿ™ÆÉnÃÇÌÐpŽvÅå³RÏ'â&à°“ÉÍ¿6L5ŒV•{CfP™XAðQî!™*xýËØCËy"ÜV"¸ŽðtgpÄ dQLæ ë3`63,¢ÊÚ ×щ|=«üL¶‰Nlª¦—ÈMÁeŸyÉz#ÊpSËgÐfÌÙ½¦‚”&Š.ŽÐHs§+Û¢fç]Á¦W}N¾Íc<5„⫨yØr©ŒI%r…ÿÔp}Ýø‚} S‹™0OUÉÅrÅe²{*Cô3Z8’ü¦HqäŒ#®>K~ª=÷1Kq'¥ãMÿ;À–q%ß}h1€áf¿ûð« „¿ôð%/{8¬M»$“X8Íø¸L•¦Œ¦2çYö¹iZ¾h’g‡¢—÷pvŧ‚ôÙ‰öÜk9˜-Iv,zLé}yiiÓW•‰{ÿu/ÿAØ~Ò®²úý÷ûÛìdàÿ™·‰{ɪ¦2“s/jýß¡]äÓ‘m§£®þ×dµËÿ¿×®´¤ELŽWÓGø `Lhi$έ jb}©ùªŽ|ý”C×çëhÄɨt:62šxŠFðq5¥˜ØMx¸ HC ¤B4 „Jq$¼ˆS­í0çyT‹]ò|L¥(‡0hg™Zc&ÚP£l°®¸oWÖ£g©‘ŠÝTö@DƒÈA\>þœŠÝ¢ï¯Jx¦Çë‚¡èÌÓCé²q¤°×]°HòºïÊ-F1ÕÔ^sýž ¯!$šÂã_tÀR`}Õ#©Ù+UÏGás›ªöÖÑÙŠ'±¼Êô˜Óq`ÝôÀ†Up¸žÌaN^ Üp±hh6SÒAXð%‡—$ÓÑò¶(Ÿa§QîB‰ÜàyZäNC”©È!Æ›ÜF:Àúë™|9g^8ÑùÅ‚eA7ÉZ(û™S™3 í#aÀöO‹ñîŸ9÷OV¾0{jºL8@#Üæ„¼4ÝNî°Ê=ç®ËáhóQßÉ‹[a<û½ØH¿}’ÝwÍ÷×´*!îRRüNJ6§á¸Dœšñ!8+ÔÃgÚ0 8À‰Þ§6—RÙÊ ™Öl¦µ üìá¶à…Áf42)4¾Á_î–’I‰°Ï·‹ (T[q”™¦•iWP™X2‘|Óœúi“£¶(i…aáb0«`²^ʤÕüCÕlòj!®š±8¦\ÕÇSHÈ¡Â'xà-Ä\1ǽ£g1_aÞ‚É,ñ¾'ñöâùN¼S&#$6`IÃdÓˆ—›u ÞqWÀ¦ÛKˆ‰_‚\Ó¢^—ï`Ï«\½P_ ø¤‹'’Õjdé6| į~]>Yú¼;ý¢i¢™LIn œBn~R ï2Gݼ7Ô¤Ìn9…ü?¯¥¾‡&>Ñ ðWØÎH~…` —.”‹‘ 2êûÒnbi­èñpìo¬Fãøë&|I0ú®-Ú@° 5–N«Ñ¸„ÑMø†ÝÀ²d’´0?7'>§¶jòÝBéŽ!.±<ö|)ÇÔŒI{ï‡ÌH·™bË¥Ut*)Oì€Bâ \LòMÝfJ’ ¾¤PV´^ŠÍx1"O¢f­ÒÙfñõ-§á¸”ššñ%;Ú©-ìüÏý7‘ë]«ÕçÖ¼¢F›‹LËaCÇ Oyö0‘:·ˆv}K±™£¾¯\GT>)ÞåÊ@-±Ú,¹‹4cû(bßhÆNI„Ot¤±8¶S¿é [QæÅqöéinÃmõÌïó©¬Ʀ€™½cjµä­kýà}Ò!²ãažÇC4É£½Ë#àüŠ3þ žØÊÉk½}ꚺ9Ñ”à§ÁãÖ|T¼è#41–bèOŽÖ i ì‚1™f?Ù{)¡`Û;jªˆ3òìÜVöÓÅÍÇŸÏSÒL.“6Š¥¨´={ùhêÝ îë¬ËŠ“GÂ…~:ËI|bÌÚ·XÁ'ÂÜ"™½î°„§ùã7ÁǨæì[¬D\d×;ºô.µW鵇N…½C)㙹9i3ƒæøÿÉ–äùbšÅ?dr0^åä ÿ^nœ-<ÅAÓ;‡_]eL(:çn²Zí Ùý‹¶VetóvU-VÐDÈ^ªj|æ6ªËTÁ·y*cYlCÐoÍú_½ ¨Ç;wÐc-2þû~2Æy[~+h®ÿú¾!æ%öøÜÆð)ØÙÛOŒŒ7ª¥löÉX—ÚçóÚC§zwo‰m=é°„»P;oµ‡N]Û»X&WÓÚû!¢òˆ~Ð1Á`J&ÐÃk-uŽ»,(ÆL˜˜ª„"™) é„_ÛbÓQC‘J#¹QÉxRâ-näR΀–*à%ÞýóŠDb3(aÉ h$H.nS}D¾ Š› VÜøCOÈç¨Qú>RŠt€”x€Š¿‹8‡T_Û*±CõBÒÔð|3©’L\ÞB73S§f¤%ey)ÞœœV‘.‘á{qI™ýJZ¤—~_Âz“¿¦$ÁDÛCx”õÓ78P¹9dæd¬Û Š2Gž³s/bÇm#LUßY±L ¯[åK­Q3„ ¸òÕi,‚²-÷t¢HV˜bšZ2q¾´õpæ ^³A. ™Ê(uD7U3 çD& çha¬ûä~¢í¡3ÊúÙ0¹´Î]3§‰p›AÑC6ý#Ïô¦V›ÑØ¢HÃZj iÁ N•w·År°dGì¢Zá²]ç»]÷§§2µ}dY‘köÈ;HÑ,òcrcl*{9Qg^PÑþF8æõ dO]Ú²€EßCC•V˜(UX•ˆ®»Pãaý?…ˆ¡ë!!%ídh<øæ…&á¾(vIðMmAÖßœ2¹lÏ¥N"ÓœúªèÓéhúAB\C‰KÎ#5§7ôBÒDöˆ*ßô>‘GÜæuQ¥ÓUÕƒ$™0†L%”8D›h‡é‡h‚MÊM3¿PFÑ,JXž3ŠcWìËïIUM-&çêkyhlOÛvÍs¹Këe ]/r.È!ôß‚Ò÷QP¤é2âüJdê‹uRxèª BÐ…^Çá.Ój²¢çC\º—¹!,2‘ûü‚uTó@¥B.¤4(hQçuŸ>аèû +ÒNLF"RȤÓ@ðCý\vý)¯ÖÛ§œ2iÎnÂCÃPð·˜B8“‘§Œë˜o©Z1‡ŸnÁO( øIáx‚U^§W ‰¶Ö `DåR‡á,ŽT(ì± ó¶ ,ú>ǨmaÖÈJ4²vÝ>‰Ô æãÒíùÑí½Ùq€ Y6o¶UsÚ‘žN@Þl <ÆÚœÂM1FY€¢ç£èù(Ê(ð'“H&¾±=é‹–ÝUp J+PÊ69)v·rŽ¢²‡¥ûWT Ç›ðÓRtr"DÖîe8"]1Ê^^ª;¢dÄŽp .ˆ ñQ·&²²˜ðsÓž‚Wê!Ë0„ókëf¿g簾1´™ð2Ô4†ì4 Y*wÍ1/sOÓõ“b’:öi)¨ yª^ãÅ;óþ ö‰ØxI¶†óbÌCg¿›²+^òªJ$¤kû9 Y-k†Ý©*–Ê!Ì=,AM/—á¾µÑ[ >;ÆÍŽbi,¦¼dq“ÂáúÈ®$QLçÔ« ?M# 'æ•H¼ Êá­H^É¡žœ„cqìQã½RõYÈ%M"™G<‚³VÀFBp¬l2¢^¨6I”u¹És´€Ë_*¯ñ½½¾dÍv>6ã?‚$)àVɼ{-ÛO­¡É«ºZB ß³ëû"ò Â5mºŠ~f‚XáÒCWeÉqQUÍ ¬¹‹³ýÙ×VßwÅ>?Uýp{âÒUaÆÌÇfÅ:ó2|Ñ™Þó ©ïg§{¿IjíiSѺ?z¾e4'›m™—º.Á”¤vX×M‘F#u½º7Ì,DÞDØä”n ã¿õ±8nRg­k^ª.]?{óAJ±ñjÆ¥~`z,” ) ¾çºèi ÷mog S^žŠ¸ÆP|‡µ&¨®´{껦b¯u“ì§‹ËÏ?ÿÂéyì°‚¥>ÍaAÿGäú,îxÊ6¦KS™·tã°‚ÊOëŽd¾ôNûôJÊm^ÍËB‡/]SGïpEàÒ¹Û6»D†ÍEªÙé<šÝrÐ;p•~É»d ¦•AÜ Ôõ™€Rºd;ÒvÍ?¨H"?MÙÏ‹ê¼ø·¥¨àº^"Šóä!=~–¢Á¯¬©ÊcÙ§²™šR n<$cA‹qlR»í©o ƒQctÏ'ã®f¹šÃ´p5 !éåÎj$ÈLQÑs‹]0„-Gõ”¼¦éˆÌ0þi)¤ØžºyÛ–6^Rš‚¹‚ÃB–¼ëÓ‡ÇN;x¶Ó!²NyÑ~LúáÍD:¬8ë:cîÖ·ô r¸áµmªrûšÈÖjÄOVWÑ¸Š‹‡e™H¹\“§oÅ+\h™ÈÖÔ÷¤5ޫէŒ~_ŒSŸ÷å¶ÎûySÝÏH ë”}Ín/—ã¤\Ÿ˜Hkb!À̸rQ’»ïÊ#,‘Ë+ïárÛ…hb=éQÚ^zšç¼¤6ºÇ/D§7š-êš´?-E^§ÆÄ唞Âë^ÎRoÅ,à †~iœM/6¸4G›Ke s#,iwš×‡Ä¼±™ðÒ4f_?_ܲ< YŒâû *RßOî¨=™:0»ŸF]Šê&e„®ŸÏxc²Þ/F£MÜ÷ýZ}—÷ëýå’Ðç -BdìcA`¹ô8ð¹­ÁË®æb©-6U }þ[Ï] âîs|Ýœ_ÁˆøWµÐè(mw²ibÓd‚ýw£KÅ÷†Ðv?Ö»:Ö÷دnÂ纰Å9늭tçy/´²«Û8ø#‰pÉD4õ.¬´!¸²«‹%WFg Aà!æzƒ@Zy>U}‡ŒQ‘5ø|…_ÏÝpx&ªÇðjÙÎdÏMÙªø:åVuá`âê…[Õ† À .ñQ õ~u(] ,f]Ý«„²Tâ&áX8šš   OëoÅk<MÏ K…0ôy×ÓÜ&Û®lûx(6u'"M8,fñɦä"ިῳš>§;¤©8^Ìx9 7Ž˜‹Þ2V†NŒu+òØäy˜È¦j¶ß†…èäÔv›ñв(ÅNM§4\t^0µÉÓ_ùs^Vð”KtÍfGTÚ¹PÒŒ*‚Š2H.kB¦FÎÔ"f7CiL½å †åò”cL©JÆÙµQÄ&ó åxfLJñÙµ¸Ãó ,nct—\ü=v<\lZјS«‚Û qL•N–ÊGB#ªÅ¬1¼Ûš¨ýˆìèj]܆üNç™é9_,üÊ“UË–áãe·¨¤Ú—ŽËÉ5ØfÀ“²š8^jeµè#ÀÅTÏÁQ;¦^F:»UÃdœg°å¶!é…£!Ør!%QxRKƒ®êGƒß­"GÀ-ìêoò®8}^%“q›ñ³(a ú;ª•Ý€Ü^^'pN.FíCdQb²³Ò?"ÕcÒ:>…ë|r[ô=„Ti4¶Ô„žª‡‘Å$¶<8“ÜbÙn¬I ¼6<äL }:;|åbQ¼°œ\|,úaÈâ#¤S‹ÏT=Œ,¦øÈÔN(>élDtÏq/EJñkÄéåÃbÀ‡^ÇÃK."S}8ôapWŽ*"IËùÕ0Ýk„< ¾Õè⡯ۧ—· ‹V4æä¢ã4ƒGÕÚpÕŒ«F©9»3n h¢¦Ë»F$¢¸±}™äB6Ñöàe‘¨R‹‘©„n{˜OtL!IØ)3õàí.Ú–ÌoÚ¢>Kà@ó&?õOhŽjà>;ç À=}WÏ\áÃ>öÍ·¢öâQçQ¤ ŸßÅêÛ‘N¤ì÷ß[8ßÓW¯Å8@jŽ#ÁºÙ§Qß5L£d÷îee×ÔåöÉ l¬sŒgkŒGEƒ{RÑŸÏy_¼¹*rñS‘>ˆ²Â»îŽÚ]MÃø´tšGÕf ÅXÏ+ ~=|É®Y¾±L%1ÄfQÁƒW®ë¥¹Äîè›CÛœª6äÓ8m;CVi£F¨Ùõ®¨{89)¤ü¹°m äýµaMèQŽW’ÝîÍ»ç9»¼{?<7¯'8÷FD#Gž°Š0䢟µrdØ[xÈb_åÏ ªËÆ[pq›Èë}δÏۦˎp—%W#1¤fñÁS±W!ƒÄ øÑx%N†Hjù(i%žÿ!h}NÇ0ñ©©ë9r)/صEøyÔì¤=ac˜¹{{ñõ®mÊ:väc¨ÙñI!\[œIq?à}±+ÄÕÙå®M©ün vù¡XÂ8Ý>z†ìÙ¨Ÿ•’óð2[ ×Y4ñ ¹#Ï®\E?䨽@ÌÛŽ}ÍË,‹• U'5Ó„ Ëv6Ñ8Žj-Ë-øýð«&ïYBE³‰¦ð(gŽ dœ‡eƒåV/jîÒoÇêc݈9ÔíøMaNB\¦im×øÌ.æþ^*ì¾ïüpèŠCüXͪl§¡‹Ú[fv§ø ãÇ-[´ÿ´v6…˜áØÈT8|E1œG.‚W Û¼ŠÁŽö˜Â[p0ü¤´¬ñæ ¢²‘Ìb„'ȸÙåSsrÃ4À?ˆya­%ìb¯ sУÒý»Â‹6@¯¯ôF·N¬‰`6‡šO 7¾„1‘®òAEÚ£æïIuf°ç$Ä#TsìAØÃÈH,¿‰[®£WH¼Ç­ÂÔÝ*‡¼*!'-ªöDQ=»%B,jew –_Ë ÚÌË\ÂŒDIzvp~ïÓ¹cßP¥Ä”GÙs2ók3Îk)’{¡BÒ©/È:•°sš,éyÙU›õS‘Wls«.ûè?—¾ÇDzZ8yxvÌj!ÑÓaZÆî'’•»×a²¦=µÓ8Q0p›w¿07ÕtÒ•rS¢C-¡ð§v£| Ô[!='åþ†øÎIÈlšOqÝœ_ËId¸VN£ñC ˜ú„@$—©ªƒ"h²š™ 8ßr¿–´êQ.^}#Ÿ<Ë#z'©“ÒÙt½¨ÉŒ‘´4áØ5v wê¶CÝNÊV‡Õ«—rÏ68x tÔ0@¥¨@²ŠÎÃøÚÖ3ªä ‡OÕ T äߌÄX¼gl&±‘u‚׊®å€ÇeB±oÙv×:i›Í¡îÄ£ %ïŽ[•Ý FÑH‰ÛÞ~+ƒNmâÖÛTÓ‰JÊ…¤o¤[•xQ$¤T4( a ©›"VešA4)yצë4Jâð$BÁ H^M²é:¡Œ’8<‰P0(‚˜Y¢C£Kß I“FbKń‚ÄàWgU¥ ˆ† ¥-EMP„_ìHßÊó[ñœèÄ¢ 4#^z/ï2†ˆí÷—^]Œ0&á20‹Ô²|fPA³6_¤ËÐÜŒñ s±«Ï ³$“dhü3\™f¨U¥hÀó±FÂD#LØIv¨‡±0XšÓºÛBž!L\>Ÿj:I¹ ’ô¥V»¶‘"B•´"oê9‘p©†´UÜÆþª¨…C ‰ ~•ÖkžóäYþTÙ jEAšåˆç5⇨«„ ¦­úzN@\*„!a«H×rÆ2áØ»>±P›ªB& B0vñ~(29‡MßH“ÆbKÌ©©v*¿PϵCXB0þ85}BUsB`B!ââÀ"!%LU'A0ó]'¢Q…'-‰púª LTìi+d¦ª?)0+c© ®5Á5#Âò¡K´ªA</á¬wƒ8ê-d¼±§ÎˆqÓáA*ä‚$òHEÂü98yÁ3óK»Sn5áåQSåÞ¦èG:g®1ÑÖEQ×4dˆùŒé8z.® ¦¹k 8*i,ì‰~Á–2±ÏꙄÕoäÇ”:×ÇMô)÷eƒH'ôXÉgºíÚ̺l̉îðAÉ¤Õ ÄR1ürw¼]k 1ޏ3<Ыª`Zƒ ,ø›fcE ‘Û‚˜Ežñû\Ú¿ÈP̉æY+<Ë;º¨ypÁ@œÖCÚÖræç…i•!ƒ#úÛ©è^ùÁ•&"šÒ|6‘DÌÌbßdßi‘›r °J_ï…i’ŒÃ}ÑA­Ïòñ9ëK1’¹·~D5a3VÏÐKgª ½‡÷5£êzêºvQͼÙÞÊñ¤¼{E#q-.f!Îu êodp¹LyJã¤a¹dq ´ISsübŸ&É3 §ÁO”ü“}¯‡Ý¾ÞüÏýw ‰£<ñ•ÁTt Äw_|¢Y’1i à¬A˜æÅH ¢¤,l"V5¹ˆ J|…ãÁõôˆhÒ`½ô© ¦ 6…ÿ(GÔ™ ý’6Öt°ÓšŠ÷!¼cßHÜ9HÑ Íñ o"2ˆ›ž¨ØÔD´ âUI Þ$¨a”¶®ìèd£‹Á6¬v¦'ªÍ„7u5…¡´ R20ý<à˜C‰ž­ø‘7°øß€®cq<vžÉKÙÓŽ8¡&èRH""Uošz‡È €ê˜;"ð\ý ‚80]¹Cà *1Q¤Ý&Π臲۠` Ë‰£Ì(ä\ùŠ[ù½žQ\füÉc*™³¸ìyÅK=’x:s œÓP%¦æ&Å‚ãi%Z«<݆·Àì$ú‰ÏÆF4L0ÍÛä¤8æƒÜhŠ0ƒç4lHÙ2ˆmI¡èÌ €†=õ:…·§mÇ(âî]@ÆÕ¯0}tD“è˜ísö_§]ößu¾ß—5z±§.Ò“aPþkóìçñÑ ”¼=JÈÈeWšXÍWˆïáÓW,•*߸3{6‚¤F˜©Ö@ndÎ ‘8²3yÆP äG•om™˜Yº¢¾ e TÊ1;.î¯C¸w¡ø”œxå+>ÓD¦!°ý¶å°i6å}IélQvaWEÓª°@„R¹ hØsA"Œ)ãÐKoiÖ¥f]ßßNˈÑÁ“›Á KÉž)lµ[Àʘ’|KÌCÓ‰\Ê%fU'IøÃÐíÉýU<¿y“oŸÊº`~ÃÕõ rL&p UZ.LT]\FAÆèñ©$™ˆl›×Ù¦†Pìb³ˆ™&(ŽiôÌìN°ÊBc2ã;­Cu^Ų3ã¤bUJ«8Ò–ë}âùœ#éÚ+Û”IL~â=@ª."¾ î1yeÛ)v I oOûøi;¼š”ܦ¦ î —–Ø N0$’ð‡¡Ûš¡ŠNgäÉrŒ²7µÕÛB­ÐÇ;Cc)´Ç4ôƒžx{´cn›ÚÜð?˜Ã_³OÌÒ7öÞ1´/'U>­ |¢fVÜ É~Ê[xv”=uÔÔÕ+»GxS5°ýÉe~¤ƒtY÷¯m6mMÖž³Òs"{¤"QÙ¾~Ô­âÌ ²øWN,ÿ£ÙD§ä¨ãJ?*aO5•VÇ|‹:ôRt•bv´7—ì¶è(Ȳ¹Kª¨etU4­zʶI(• І=ªæ@[Œ*©Õç—¦ä®è.ÄÒÒþYÌìŽbf'“¡„©õ>ŸxÂYQ¦0 ’²çÄteÆü4*Ú¢;–„°S²É®ï"fH§eÚh„àÉÍà…¥ä{Œh!¯ØI‚7ñm~H$)‹&ª.*£`ZÆüa9‹â@“Æß½`&Ô8Ș¤ÇÂô)¹ðŽO\™pÙ!“ˆdûTPpY[ÛÐáÝkZIñšqѰ+E— l´“1;e°ñòmBi;9N<šfw5?(7Ìd~8j¸¥ÏÁû)ªtŠ)̶©ëuèoÂIk¢`'(ä²Qn¤†¤qkn„±Ä'0Ç)™[ŸÂ É3†¢?ßú”â8\ñ?+çlVBÄ4´Ü“&HÖð/µIO•sdB<ç%®"/¤iEg±%4×MÛ'~&œi0Q@%ÃXg™~ÆõIˆaŸÒxŠ.6R,±ç‚ ‚=ÛÞ¦¢˜†d^Óp,Ù``I%óÁQ±g9J›¹ˆ|Aß"Ôt‘HzßuÌ Ëû®v(IøÃÐíiϹG¤sj¿ë/í'ÂLH„ð£†Ô±)ÞäDo2Ý›Ð)*HýªÊÈ©‡Ñb§¤|Ó²ïáD2ë¬ÂIψ9™ºnRƒdbbdy`(8ÊÔMü ù3¬C¶]³/«ÄÌeÁÉÀ”OÌ XfH ÉYüðÔ=Ûíõ¥D ãR."Ç(dšë-­tvR1LÁP™çü‰¼Sß ŸÐª9º¼&寏¬=u…b¿ÙW9yÊ».õ»lût8¤ûQâüà ‰>ïóu^A¿x¼J‘?åÏUyã˜ÐÈÄ.kÆx\€JÆe :!¡ÍeÑCÃHbȵ¥x›oAÃ Š¤ÔQO.(Ä.K&Åþ¨óà¡É8+(>R›qì¿ Ao“×á×"L`ˆq$«_®™ûâjõ)»¹{¼ÊŽ!æãb~€[Z É,Šª C&ï(†«Õçì’†—{p/bÊ¢Xò›GE³"Ã5T:]Á\2Xǧ®CnhQuF; …r$EÞ½ˆ±¤HäÞÆûš»štÙUIØOWѼZŸãÖ?¼]ÙQÁ¦{EÒ´‚¡9è8ŠæèéW|ÅæJÈ–Q%tWÏ«h£>ŠOMŒVD!÷¸%ô_»™¢ðûàyµ²¼´ÑÍ­Cš —awÇ'{˜\L燄|ž.ʆ™TQ+Í×›—œò“O¤IvE”£½ˆâzªòyᡳhÏÖ˜GÙLZª 7¦á'¨Nø…Û[± í:oç²M ISçÑÝm)šOM]<53M+(²R'r}ã^êŰlf–ß&ªì6Z¹eÇ.v¬_X"Ã(QîgSÒí ©I-"ò¹¸z¢²VfUYß¡ÎÜbç±VLàƒbævoóµ €éšï3é(Pl@Þ½2VÉO÷$ãâ }7¯lv1E²Ë#¸†•vú„”¤ EŽå¼¹¶bC Ä j;AM]¸¿¹>[e{:´cQtf08:“!¦F#mX9»“Žì¢ÍÚ¼s¡n™Ôǹ´Žq´Ž¾Ì¹½¹„»(˜{•#L ˜Œw.S4q-ñRó3òJªfÞh_3"Ç5!œP©úòX€ÓÃnº 9¡±[îÀ5„«EÐC¸¢ `ˆ ®‚Æ t¼rEáU5pD”©äÛmsªc˜=Ï+Ï1eñù`iy>Wy=ÏhňŠÛޝŸ/nÀÏs½Ç®ÞÆ«·ŽqÒ×ÛKv{&»Â€Ý@ì²¼m£2 s‡w„ §ñ~o­.V9 ðg_‚˜bÏŽiYjûœLsSå»"ÒåLÑq¸œ1 LÄŒáf¿hWw¤&>„'“¸w.æ®ÊNð¦ÙÕ¤¸Î9- Ø \ç8Áx×9Zªëœ× ФÓuNäÖuNC’æ[æ6a‚ô-ã´Ò|Ët€ðGŠ{ × Š©ÔA’ ;êNÛoż’¨™@Qb ÚÅÓö¼%Ð)²w,˜µÅyæâyÏ1q‘/l ÏÙ¶Ô'R»ÈÇØÇTOpRƒ:œ™l¢ÈX}ü8ŸADŠÏ ÛŽ‹Ëgó‘]€—ä?¨ÁKñ©sÀ° ùÔqŽaŸ: Ã~^QÛÇ5Ý ^b;0“ÍÿÇd‰ŽwbÇÌÖᎠ\§›âñå2€ašâñõ.rr™ìñ嵂c—èñKñ[ñÚç›yuO·¡'4#Œ¿ݦèB0±:U¹/¶¯Û™í½iCiÐqjø€‹a•èªæ±a4ËU-¶&¸ª9ôQÔ®j<Ûð®jœdŸ¯ µxŸN”ùÄdŸš¨¹tš;…ÛŠ Ý‚³hQ.:€ §— …à0Ã…BÃÕÍ€t1 Î2Â…BGÅôÖÛ®˜·ò;µƒ¢9jB§M?ak=ÜBàI¼ŠÉQò6ßngÑV-`3yû# Cm5Kì9ÆñJÙPu›À136UñÔ,·ÆÀgvoaGÛÔQ†yÇÀöÜü¾:ÅaÆeÅÆp˜Q¦3§™èY óy¡A3·*&fp4¥’‘up„º®4 KìxèæÓ IQwwᤃIò r›@±Iõ Š®bIžAn(r8Ï žkQžA.~ b5͆WЗ€Y7¼z{¶Í[6P5X™§åZ¢Ó“ÇŠÒéiÜÄ;=iÐf÷Ñ‘=´z?Œ®S§¬Í ¡UqIh)ÌÄ –œw*£ <¾Ó‹-p¤›¸†PÜÁ–rÂ4`CUÑÂp•·²}𼤂C;žø_ÃUPoâ’¢&'tŠˆ3¢Èx£`ÿ]š7ùŽ?׉| §Í1©s){nʪÙÃ_\™¯JY/B;Ì’pHÏŽzbx?Ó ¤@ËBHY¨žiÒ!Àhù”\.};̉ô$ùì9íå°¡ßòr®M+nUŽ!¾Øí´$ækáêö©Ø~KH扞æ(e&+ !ad  Bx¦¥ÿfoXÓÍ|­—%Vþœ—Šq¤û£¼ŽH“†ANS0Û:ÞÐΞeHOS—oO”&ESdÛÕB0žÕ|B‘\,Åz‘™Ù•¡lÀ£NŒÄêOf/Pxæ…-x&¤­U× V—Sux¹”£Äp]Úh56ñ4mБp¡Çî_Òyªh…¬ˆ™å–•^ ² (K"bõÛá2Mæ””s[°£µÈ{;>PÈF…(:³˜àIX;Æ(ܨ׷Czv´ú»Ûj¡>›m!T¥¼ÁìË*m46U´SÄÌ”‚oh)¨‚€¦IÅ¿{Óê)¯wURbY4­àT93¹D aôliªèÅg‘Š@Xµõblš”i’©fÇ'…&‰GHU< K"…€ –‚tY9³~Îþ»þè­VÕ.oç¬9õ­©0•ž¦Éç«‹û”u ã©Oìa-šVôªœY¤DÁ LÆ5MJ ¨Z®&$œU× Q—4oE"M‰Á7MD¸¦ÜmçÔ#§¾îTzŠûîúê2¥µe[¬eÓÅÁ¢iE¯ÊMqC¨ì=|8g®uD­q×6ÐKékØ5 ÿÚEÐÄdE%§+èâ°Ø“É „Û.iÛaªh…¥ˆy'o\5e ub†ÆDÆÆ®¨ŸSZ-xðêòSôïéG!‰j,'VS Áï­XÌšd’ˆËçüTõ3i¨6p<˜Æ4O¾Âç{ÙÏÅ++¸±5%W¦švŠÜ$x¬ue"i& cÞ4QE€TÃNÕ&¬ºvˆšäéãåý›/W÷˜!A_ú;¨¦cÈ%&Àþç¿þ›dô¦Š ’wÛ'æQ‰ j‘íØ ‰×uL»oó˜ící~-ƒ^´õÙ–õa|?Oþ½mŽG:µÃTÇT{½¦}nhŸ[´Yzþv*è@Y|f´¯™ä¯éL$™ÊOíxåFåZÚ†‹g§ÍpB¾jf¦œÉð…SãG$Äì4°‚…ø.U l#˜kêJ®/.ÂvI¢ÉÕ\]†;‚³TNšÆ"ªJò‡äf³[ŠX§éÃx³ù,Þ ;­ÆæŸ«f ±Lë£Ç³8ùy¼ÍÌ^3»Í|ÑŸXŒd=ê9-.^_†ñ¢dÓy:ìœÃ‘Npù ç0'[*c]F#8OL(Ù«†-È~iâ³8k§ò ßÅ[ð õÔüwµèZ‚-ÓÊÙãýa‰³Lº¸ ËBi"6ÖyÛV¯‹•§ÕˆÔ˜ÚPJ‡ÌX`Ö±§—K†ÅS`yµü(âKçü¼<·çö2L$™ÊÏ’¡Ëp[¼Ù÷NÈWWc/ÓeÙ6mÉ&ÞasFØjõ¢ü—лŒÆ§€uX¯†-È~iâ³8[r|¾p;N[te³Ü"¸ÝdkÀ’ÏcÈb¬—%<ƒ«š¿?€çâ{ÀvZ~»šx%™–iålqþ DY"=ì…c¡´`u˶÷v“i`PŠsï[ åSbX–ð ®j63‡Åň.š±3²Ô’™ °[ŠX§i¦Íæ³xcí´›®š%Ä‚ÍÑ’²Í`*o3³âüϦ^.³Mc\U%káÛì–"–ÄIͶ9||>+UŽúq½‚75G±–ÏãøÐDÄîuœyTe]þ3OžéŠc^¿‘ÿæðü#__üV×¹ú"#ésù¯.­fàÅ/g ìnûTöTà¼é§í†¬Èj€•ïa¸p´–4§ŽÎöÙ™õxÈv n؆¼ ˆ¿ÐOò®˜hȦi¾ó ß[XÓ \Ê©€ß‰oAxÛæØžh÷}WnN}BÙp™pž(¨È/y`v!ÑÚ®»ÂÓ è‚ð…¸ ü=BC§‚¼d솅 x)oCÿ ÂðáÐnú€ÒöÀeUÈ?ÝŸÚ¶èW!Û^[´Ç܃³óø,Cz» CCO| ¯XŸŠð@8µU|«„Ï¥ô/ü§Éú&Ëá:¨†€cð+þsY¼¬Q— E QTlñ•g,·…P`°x8Ã`õCÑoŸ´§Ãò \®²Š£3I W&ÄÁ}¦Ù…õÕˆ7…Ë Uñ劌b† äœUæ+ÒÙ5ǼLͧ©²¼"êÍ‹+&‡…ŠVM[$,y$›§'vÈNN¸S ú{yÅ%»Ï×5‹×ó¦++N.64ÚÙ³•€¥0jC‹<}zâ°D*å±·yUmòí·hR5„Iœi†ü†FÊ|àah˜ó'R!SÁ¤(Æ‚OžBù ¡ µXØéÓ§€%4p©‡G>gæä±‚@<ê`ѦöyVý B.ÅVÔÏe×ÔÇðYØ(#A”Š ê}tÐVøD‹ÿP5ª×æ]~,’fkKAì¦9æ„ J;ˆd£PµÍËœ”œØ@!ä18gW‡w¿eTá,tÈ™PU‚cÂh`5éé8Dø¼»òtœÓi, zªŠ§¸!£‹„‰AW¦ÄÕ¯þ£Ù 7M£¬“WÕÁ¢…wÍú¤Y¼ÃB¥”Ç"¤f‹*žªÄÆ„±Àš¶€»¾êßÃK‡h7k¨¡aw‡¼.ÿ93×-V€4Z²Þ{v‹àüJå6Æ>UÅR`—ÂzÜÙ:Ÿ„Ï\†UM„_´’Ž\ÕCeÒXl]‘W3ª ªDÆ„ÑÀš9I6¹¸Ö«Á'ÙæíZ®©&£³X ¢Tu¢ÐöyY5”Ûyënc8ìº*žÂv-Ý4‚€<¨Ä@¥íÄî´ U7‚‚*TÐPùFû|Û“X§VÂ`ÕŒÅ?ËË7l Í@QM¢° öÐIh“ÝDÖâ’\èbYÌ¥û ±jXØU¹/¶¯[¸}Ž_ Æ\‚UK„þ¦êdvÃB®”Ç"L^%µâC®ŽJññD:‰ Hüé K¤èÁJŠ>ïšè´%¯õ6©¢Ä²Q¨è€¤ž M1Âǰ SÏ Yõƒð¸tÛBfRciUÒŽ~Jx™P GœéžXŽª™^„ùY| ›í=é5aˆ«˜ïdP&Žƒ±Ïr¡ˆqPe5ÈÊ÷0Ü%|(|',*Ú±6Ì¡² Bšm)îP}lâó¥Í»¾ä×n¦y*Ø 8 âÚ• ÊYz¢˜<¦@Ž%„˜†•Â@[‘%ÉŪd"R›Ý×è;m¸ÉL44&,4ª­çÙvéŒ};•]‡¯íðŸ‚Ì%à/óål¥186ÝIÑcÒž¯ÜæÒŠbÄȼ¯¡Ó}³+ ë|m”wÔû§®9ž2¢Ô›(ŽIsA»K*ÎÏ Â|¤õ Þã †cf©%oªîÁ®3äs*ÖYŠ[‡½ø#ͯãO 2Z­nרÌs¨Œq¤Teµ§#//î3¤cå"• Ž”• …G 7_`~†ce„C¥"ªAþ²zŸ]žHßiy¾, sÎ.¸ {òx?ÂÃRåíoè6~øèytKLkI,Ún"Ь·×ZqA4ôdÔ8Àú+èHh˸c&¹aZ•4 ÀGõîZÜl¢‹ÃT9âäÀA#½ÒH±Î£RNƒ(¾…áõy"©Un¢ì9Šòޛްø·lò|­-&s¢ì†9ŠúÛ&G°S£ÀjÙŽ†5 PÓÓÔjÂVW¥/~­™NŸSûÌàhióë1K¦“è0¥ô ôÆË ¨Á…©À=ý„8ß¿;Ö¯Û”ç.Ã:\Âo¦9{cœ¼Í«¤áê ‚“è_ˆöî¶Þp„¸Øë¸«vt\TûüÚ®Æ%œ±|¥">ûì?›¼®ƒ¹ïç1Ã÷söèŠèЮóÝŽNJÉzŸËà£RÕ €‰ Œðž¡©Ø"çŽHqÏU»äÍèD¨3.v/ >*E|:"œ³K›ÑLÏ)zeW¼äU›iv½I̺TC 3;ж ñ8&ºN,£d{ò,ŠªæDÁ„Âí“ÙHA‹tÿqZœÑlL “ÈŠ‘ÄGIBqºhVo×ñL-JfĪ"j’7ADî$ž’¢·©Mâׄ\Êú[~À·‹ºü$JꊫÚEw2SIœ£„/Þ„òeS³Æ,cšID@PˆCTÄîØ\Q4‡Cx½Ë%?‰ˆ‡:âjH»OIR»ž·!åÁðükTÔƒ¸-Æç_}½‹è­/¢·ŽˆÚ˜ìkÝy׺3ÖwÊíšÎ)z|U´(™Qª"ˆ¨IRܹ«´ \Ñâ“ø¦—òŒšˆÉ«UØŒdryÔz/BX…Í(žMÏNE‹þg9›êL"%ÔyîñTõ%í¼ŠŒ‡‘¬©éØìn•í öòªdú<ίo?‘fDÞ}¼Ï.øçìÿ,Ÿ9€sÃ`-Ä!²g¶ë91s©«8ƒq[•0ñB"Ò6<ünR°Ï™4Û7Ywª31‹ ,!ÁB¤Yä<Ö¢dM7‰ð>PlðÄQÓeǦ+$Ψ’9žê8P²§)”êÄððÏ§Ž¯àÒÿuü$Çéƒ7ƒž¨XA2a“ÿÅW•Y!‰ç-©Sn²ª.ʗįÞÿ~ñùs&¾ Ï›p;(Ø £¥€?üQ\§ |O¡7¹wëúÁóWÓ5ÜüSäø)‡UÍ tbÚmWló¾ØýÂêÙs±Ëò=ì«þúç_=ûó_Ïþü—ŸÇüRW¶uÑ¿4Ý7L’ZŠp…Ç(3×IE%i5Á¥i…©Ê%dÀç·j%HÈ„´E §j#Ï vL†¤­r¸uí€5IŽøâc*äÈu‹’$I(4 ™QÕ®8ð.U<›R|bŠv’£φÏW÷ =Wâº[× vVmvJ)› |’²'¹¾ ÖŒl¢cV%V™˜&Sà 05CæçBäj–EÉNŠ‹¨ãeù‰¢Œ˜ºæQ¶6Dð»ÕýµwŽ™ÇE.›Muœ(ŸÀÑŸE7rmªã†ôv€ôõm ¤6ºìµ‚×ÊR÷Î&K¾}Ê7eUöð°32 æ,[YÄÊ\ÞFÉžù(ŧÂð'­;mT±KZxtiZaªr ÍWÏ®ï3¾ŽÈ­¼ïóèìH[étªÙò|YqâKDY\êØŽgqañŽoˆO)k'Q«ª¦†Ÿé *Ê=zÍ>ƒ3Еxm^‡êC·8khX‘>þ`_?_Üâž/}éßœN;¿÷¥Ãgtù¢Ò›m{\çUÞ1ž‹!=…Js©s]jXEbŸ4?EÖvþþxÝݽË`åîþê‹3]b‘ Þò :y!T­4ÁÃà€Mæ‚§õ½o‚Ùat}ð…䢸O]GcâKŽEÓŽ]‘CÙ¾ät$5–!ZïsFÃRÓø÷ewdw†ÆC·©Z±k‚ãªøºHé§i¨jœ¶•Œ)+Æë‡6lœ*‹6D³XÅçŽU7ÀHË/Ÿä|â¯&´l²*Û9颓Lº¾g×òHÆ”EU?kQ.ï>¿_-‘?L&UÓ@#bhY9H™>¿%°É&l—ÓqªŠüÍesÜ41øÛêtH)Z=+‡QjìÀ)6(X÷4H9i#3ùù=±x}×TI,E ³óÈÅði vn|¥˜èÙ) RZgÈËTbWHÇÈpÝ#;1R†œúVSé¡‘Z± ŒE˜Ý>©ñÄç†C;ÈHË™eùÔÇ6-{&Šv£Øì5X, Ùa¨¹X{ŠÕíÍý½þp_PÑÎÀr¨ïPÔEGK‘r¸oî QDÕÕi:ðæaD€…Lùsf8«”ð¦šù 4¶©ô ÜquZh˜Þ—Ç´úTÑÎ`*ï#ýöæ ncBÕÚó þ„Ô7ÔÜØµÔDîŽXzrkXáKO€ô9ïʆ–òøÂî\ñQå8Àß)@~U·jtMõ×»²c¶ª|ST`ƾ>œÊ]ñ†þ*ª†-|«Z¤ïNì}{fûß” 3jð ÒIFÐïÆy@çK ×:ÂxW‹—¥*X•gk綘F3WÊï­ý=Œõ!¯r8}^Ðq´ƒ®C|7~ùx}w»ZßÝ®/nW×tºþúþaE¿­o®W7—Ÿ4”mÞ?‘x¸¾óýÅã§•½”õ²ÕÛd5žÿtUz¸—‡,73É¢f¿“-<¢õÊ“xF ƒ3j‡%µ–Ò«Ë‹Ûõê?y’qem¤½£•¬+7§ÞZ3¨]Yÿ³ÇîêÄksêÔÝ q$ûPöŽcÙkò”wÅn=ÜÙ›1LÝ‚}?Í~a[ŸüóxCtÕ®¤ï nõ“æÃš_ûü)ÅÂïOT‡–]©ó`Þo“ìÐüÇŸ&ÍœÍÝÐ윖‹}>,ñØê[/9øgá¢éÖÛ§¼>Ð$Š.¢Mw&ui±¼{X_~º¸ýøþJÚ¥ÂÅY--mŸfž›8&D,´ìßÑvíþáîæþQD¶+6§CR\“›¾zÿîËÇÁ¢ØâM´*µ¥åû‡÷—ï¥õr¿wÿ4ãTù ”…íëÖWWªi8ó@ÒsuÅüçëÛ÷+5¾ëƒÐW¢xxs÷U¦OÑuM—dkr»ïî„ŧòðTÑÿ§•ÄQ›[þtýñÓgúYþÌz‹4KÕ¸½»¿ Cä[Ù&™bŠÜØêï×÷ÂÜ©î UZ^©úÜø—Û‡÷´¦Ó¡…ˆƒD6 I³/u¹m:Tyw·’v_ò®N2ʹÅß/n©¹ã†hñzг•í&‚DÚdÚgBû’ý ëSNžhü4®¹¸ã’GÕ°+`òjýœW'³&jú±­Šïk¶³eÚŒI[š;æ8ˆ"²N—Й]ƒe–(††Eê¼Öç4@Ú#QX +ѺΠl²&âL·y)޵°WÍp‚¡ošÊ›†¨%Jnâ÷¦ûyÀ®³Ýªñ²ð?YNî 1ª“V1˜~³9ÑÜ-kÛMCôÂÖÙ`Ê\Ê]H¹½AýòîææâöŠÖëÛ+ì+'XЖöb'¦§ì+óP{qG"ýÒmay˜œZ¶5ì‘ÚgRû’N®³,Qu9¯#´T\ð$þ-_tKaÕîbÀ‹žc£sA÷’ýÉ¿¥í® CöÚZéÙ2UÓ"ä!²Ú=°¿²¯ì/gõ «.;q)œU´$ìJ^›µ¨ª×3°sÆí\ªß2yaÈñxªË­¥‹ þõ&Äíÿ;³&>²ó»ŠÈºì¶¶´Og {ýp™Á0°.ªbÿz.W†kÛÏ,š_Gg~ª†¼{å‘èÙ`òL˜~¦=%m$èÿi½S§7ŽhƒŠÐ(­¤h¸ÎFãÍÛI tÐRÑRUZÄ]Q°Kúý l*œ†æÞg.“]H%z1Qf=)mᨰ5R‹àðœ¥d›]BÙ%¼£ÆÔlOÀ[Ž1aiïQ°§y¯"Q•ÚçŸ6töt,]ñj"<¦eÿé´¡½!|R¬=5/kXª¹^?Uk7§Ëp{Ÿš—lË:<øöŠEË*¹Äõ%˱°ªØÊ]ç`©˜^–Ù–l5¿«´ù k cZ]~tÄä’æÑÞ±k¹ÙÀŒí$ˆP%º®¨Šœ€¯78šº™RÜüÿ*œT;{K‹M«ât:ÏAî ¶GæŒË© £0b]ñíøÙ7)«@ «õVA]FÔ>ö R ¾ÅÊLÕ˜#Ìpþ·±SŒ\?ÕH\ÝŒc@`íhÔø¤Ì™b/Э]MXeEäLZC6qëPgChäTdªè™n=¡)\ÓÙbµ¥rNгÁÎM¹íšLQû¿˜áÉ1¾ïqÿ éç(rló”Aþ±ËåHX¼wÄÇA½x¼FÚ~ás½µ8éˆÆÒF+ñ gÂÆß¶*¾ò—âsñ^QM‹ÐN6Uyñ§ƒGøgÝå#=fàL5p)>ªOóüÉ9ퟱPÁg|¦¼‚ AõËyÕ4-fÆÂäôh¸*§ö=c fùŽKYOFf–5þcyàuq-=¾ÏRÖgª¡©÷¾6ì޼g/ä0›A´þ;s\ÿÚ|r’¹i6ÏL›2mi`fþI™®7àƒýœwñ«ƒ3°qÆl\ÞÝ^]ÃöÐÅçõ»‹‡÷ë¯+->~›nêLuŒSÚ¹T¤ørŒÑc­·ÕiW,­4d‰Wiƒ{•uð°î1‚4y‹8Üäª`–JH~á«,¿ÀÅ.Ã]ÆÙ&‡ù<쓉)½B"e®úïlB:¡Á¡$4ˆNp¦…*ž,9 Š&2£ÌÈÿOÂ1HqäB®À)júéLX:û“¶êÈ߉Z¸R´Yþɽº†f?¬¥®j2‰ª|.Øð…57lÜ/ÅÀ ++{˜Ôµ~órLÿoÅ+í‡vDÉÕ¿üå/œ¦4Ç›µÄÕ iElšk–µ vš iš™9“fh+tËw©×..Wë›»«/ŸÙÒ±ð ` ÖZ´¢ 3ÊNb»ÿL÷ž“ï©y’hšs™ø<¢Z‡¦˜¯•»ëdw¼]C&1QğxÛƒ]dÎnR´ †:…ÈÒlEwЙÄ;ZS8jÕ¶¶öÚvÿ®š<ýS³ã'!ƹcmžÊú™…àý©˜¶aª>”Ag£eVÔÙÈ`ÝfA³¶† 6¦S=cªbâWÂØ—•¼aБó}WYŸŠá~¯ptl÷™NjÇÁÀ™4p)>dãظU0ëä ·öoª ²ø¥ â×ÊB+d>ÀÎ5²SD΄ÈÙh7¸‚ÆeÔ°B “Ÿ²+ø nsL Pà4ÕX<Ó,^Š“’©!EE GûJkL-·•âcaçŒÛ‘ûKÐ?>€ßÐÃúþ??ÑFYl4©qƒÛ-ô:N9¼"œrÚ·“蹩³ÁÔå”ñ Lñyå—º„EòlE øK¹}`A,Ð߃À°`@;«²‚þ6\¯˜Àú‰Z¬O™Áì˜=fϤÙ+ø›-îðHûš°…Ø¾û‡í«ºyؾvS?k‹þtX”¨@C+ÍðOV¸©ñ碃&Þ“¬›Sßžâ=¸‘3näL¹¼ûúþáâã{æ¨ñø~}÷åñþËã$Ê4B=FéU¨G(< »^þvÝ_×°ûmGDLä˜É³Ñä˜äËK–a|³½bà 3üÓ"½Ù¤ O­©u·5KÔÂuXGÀ¿½€¸#ÎÅÖø2:y^Æö¨É7:êÍõ‹èŸ –\êÄ>“Á#,ÿ$ï^7¢ãƒ}ZR»×¶‡}W¾O.-ó•„Tæ+fúrïQ=ewPËa7Õ„ŸFe>©ùi{ÓǬMø¿®‚€݃fU··¶ r¦²JíÜZRVÙó‡`JÌLº$Q&¥\< /c˜ùû]X_Ég‹… ®Ên ]©à9Ïs¸c9ˉiÀ¢ˆ Þ-<ß­7ËÝzó_@ƒÕ›X±÷,ÏÑcdj³æyXb/$ÓcÚÁï9â…‚§GÂ\˯~’‰m|d™‘©A—Õûºzd·™ËˆÃÀ!Їû2ðá¾ ëÿ¦·‹ž ­±üžç@ÇÌu¿Ò`Ö7¯¾#aA˪{¨²Þ©´ˆ¿­Â^®c˜Ì³¿â5…}B¯þÅèpsª*}ŒŠ€b;“ã®ã ÆÎLN'gã›óE4¦™ùõùÍûé%9kúõ:{ŠÛ"¾“w³j@… ”6áüüêSts9ŸM¢ó««Ÿo®çƈâ³:ób0qñ9DuM6ÿYåÜ%Àût, ‚TÉ>â_åm¢ú¦d + ÅO““«‹I úØ«F(Õ‹GdÕkȬÉóq'@‰kòKåäîÖñý‘gF%ª³óñûÊ9ÑÂÅqlŒQ¢»˜¨é×i™¯ºÔ— J\7óÉL3-ãåCò ½ âx;•“ñɇ‰·OYªž’õùü¸še/¬P¼ÊTÍIžŸÿ4>ùÙž”oþ5l $¿ çS5Ÿ?ó[PY]=ƈÊr«k‡Yâõ™2$C˜IWˆ(&CpUw±<츳 ¸ ª¿9¹Ál-š–³¹x ï^/Xw/¹ç¾Â" ï]:›ž/`ÙÇs‡Ô¼CAã I’í[$Ô šöjv2‰>Œ/OÏ'³¹Mùù¦ÏÁÏ÷>F÷$¨ÎšìâFÈÂó^]1uýæ7?Í'‹2Ćg‡# ¤Ä¸˜^L®nÊ”ýW]6 Yvˆ`Psxü+*nÙ¥ewOº§ô“SXkd~@ô.0ç˜x.Œ¦·‚CF“3ãç.š^žœßœNæÑ|1^LO,kŠõí}ˆS^jDñÃ=ÿ ¾ÀƧW7æûû{ÏUw6¥OëQšèj¾ˆÎ§sóˆ<ì÷»x—¾B‡ÂHÞåÃbq=¾žz»LJ¶Ål3R&â1^4BÀB 5˜Ø1½Tx9\_ŸÓ¯ãsË~L_árh,ï™^~œ\.®f¿z/Éoéö·ø+õÙÚ'Û¢º>ØÙ -áÿÇôòã¯ÔGl1¹„8ïy™{kf¾ƒy£Äy©^«æ£ù9Iv² ì™$wæY æ‰3óþ<™\Ëj°ú´M̹®ÓÛÇ4Wÿ>/£mVÀŒh‡À`¡ -0±â|úÓÇéLýûËIty5Ÿœœš˜GòA”G¤C/`•‡¤ærœ_OËcRë’@’Ùh¿Ù æVú!è>E-.®-Ž{oR’{‰S2,ïyÜâÐñ‰óÎ…óšÒúÄ+ôäí(h™ÃÛK¿ó VÜò2¬Ïi‹ñåøýäT}þÌ•¤5±(ÎO§ !DÍ„îÑxfM¦™ –d¡xY· úB¨Ä«æ»×³Éz¿2ý6¼ê¼ˆP"¼[ë/ÌtÄCÃLÎÓÂLîcBL‡}º.^q¼¬7‹éùÜåÞ&ûWšÝ2’÷¹œ,jg·Û ú¡¤ô†ç úz¯èd ;Ž"!˜a,º…z9& H×á“ÿ6<ØâÝ=”›<¸$M£†H3È@0WC•ñÂ~O^c¨æ¡ùf»<}„ýÛÏÉKWÏ=/%Á¨±Â íviÖÙôãX ~žüŠC„ 1ìº ñ·-3yD–©gýn…[¶Æ»…ØúXec„O¶Å¯f‹2ÓKŠÌä,)2“³¤H›¡Gô´)ê¼þpåJýN±"‡çHüÚî†Þ7 (¼37n>9Ÿ^Þüͯ''S5Â93wNq©ÙyÍfwnD1+—šxqª&ùzg±úvìzбºá™©óý¯‚WèÎÊÛŸ ±·C/C)†àÆÀaŸ KwTúd 6¢„EaÇ ËxÓóéÂ\É=컼κ@Õ.j,`¦nE¶)Sœx};Ê{;U_~1ÅI·çv‚—ä«PìkÈç ?ñQëpå¸òÊÆnÑs}Í0_Î^û°%W4ôÙ—¥©¡¸ƒ¯S¨Á„ýæRý5½Tóõ‰’¥*Ó­Ãíî"Àxï"|½w‘6dy_;ï[ƒ×3Zþ_Ú§ ã<åuVüí¯‘FçV¥ËË)QÞº4¤ úã¯Pއ¨¸×ÁÕüo…T„x(¸âlQ¤ôÝÑF|gÛð]­ ßÕYðÃÑü`[ðC­?ø,ØEºHJÝÍ-bðu„H$ñŸTzácÁ9¹‚«ü>Þ¦à3AqˆÝ:{Á°ˆ,w#ÜF’¬°ƒû/AéPpÍ,–žnÓ™/15/bs0‰p‡À;c¨†4ýg~ÂäÚ’DŒS³=ORݳv'ìì~HŠ¡Q<å¦ÀÆJp3´%ݳ1¢[nèn9 =Öû©Ü“ózRzü¹ã]ZgËæ5ãëé¨Í9¼´’ÀçTs|åÛ½ÐÝ<9-5Î0ƒù©ÈuÞ â3ωD.H *)ád¬VŒz;¡tÕËRKÑŸw§ßõö^6Ø®þþ †^Ù‰{‘WÒ§6T/#t΂^h-¢7i ¤\Râ Ê\)R,¿Ôçùà\Ç}̲²)wL˜Ü=sv?Cœ|ÛvÇæïȼ û¤è}cX‡Sñ$E×¢ÓùÉéX=“¤o‡ƒ~lwxÞDà:ãØ,«—m¼I—ÎØÛ€{¼ëv"–ãÌU”PÒ÷Qg¹QC4n_¥û4iïlË öcJQÅú|9äA‹6YЕ˜ùæÙa½‚DçB¨^P’ø±‘&ºÅ±\ñ—ÝYKjº¿† ä_‚}ºSÿÅëžîïÔo>]õ¡J–Ÿõü¾‹ ZÃóµÀŒï|½¡³ÚÉ3—f0}Ys§å‰kìlZ9’KD”^…ž '[R#š)`Ôå+ï›Æ6”J Q¼LûƒN…ü$-–Y0>™ö£J·«ì©èmëq}áÂJ<ÅëÏû‡<;Ü?4”nmßÃ.¦hÒh"V³§ÖÇÏöÉibc¹ÊõæöpJ~ÝA$M×Ç§ä¦ äëçˇtŸ4|%,»ÓŽßÖ<˜¿é_û òä6.º¼±"(éôX- Û˜äÒ³8*yK‡œû yGµÉ¤üH¾ŒSÖhl†šª[£?Ò­S¹ZO³Fõ3âZß¼“Ò¹YÕ¶åžI‹¢¥Óä)²Ÿ?¯W´tÇý”,Xoã§¢&m»4ÏŒŒ6¬Eóxÿ“ÁOsO÷á5EÝwHº°üÜà Ÿç­TGæpD[tQé?-t0ÔGZi]qbÌ>ªÆNlTœ¹ûiV¼—þãVwîx¹js÷·¤¤ÕdÎl2_4ÛTì_Ö|ro¡YFy}ÇZ#Lü A^ºð¶ ôÄ›8v‡­z)*©‘;+ñÓêXÍÁî†>°"æ¾Æx˜Vj°ÝŠ;øZTúnþYƒ\$ЉD©$Oi·¥y‘§Øû:· ÈÅ|[w꜃´î™(v ç ¤åC¦†Î,ñhñ Ÿ!”X©I¤h %ï<´q®Û‡<.è“qSÐçsü˜¥«;÷y¼JÔãð¹Ãu2²’'–“55 p= ­–0q|Ä 7‡†ü§Lxߎ͂|‡^èú6õöô©qêî£óƒ_Åx[Ę?È ÆÂ€MèõjÄ[mo æIþŠÓ¢¶ry&3 í,•ÜE]élE—×IQÔŠŽ°Ö '–Iˆ³Ç^†ø\ƒ| †ý¡3®KE¨´×SߦP®m£:ÏÝHm¢³[ˆ²tä˜W²‘gÓÐIJ¯ß›ðË :þ¨GÖkä°µ4¡ëŸ øÙf—®»]–elúф̉ÉYk®ëHäS^ß±z3t±Uhí¶YPÑ"òJs¯êúBˆÕ^u#Ôâ̤×S$›Ýþ%LÕß(Œ8Q˜ßõw˜ðpÛ°ïËT«MÔ®·'½ßfyÒ­Ë`Yââ Èí¾Ö Œ¢Œ‹7ÀÖU}’<®Âü†7Y¼Ý'÷œ 5^§8ÀêFTÑãs©¨gÇ2S°¡¼½ïFk+ŸÝROýãrEïÇÏ«IÔÞCõ6l³PÉ&Ÿ-M\úg#>¤ Ö‰ÿ:q Ícš¹ O[˜î5¡H6EW>WKsºÍÝx?'/ýiA©Ê ­ÝH­zW}h­zWAµ½‘‚\’çe²«Ÿ·(iZ§µ‘4]ƒÏÒÝû ,«óW5yåH£ढ.S±7¶ܶަµ 5ßÛ‡¿²}÷³µu4£ÝØÈˆ pÕkÍa™YËzš¹| ‘|óöFC'Û[<ªÚϱ30%i¸†×Ar³w²ÁÕ³ À‘haŠ·03QÔ¸m-‹Ùnnä}Rc²eœ¯Â#†ªšf.µ×Sg·PåWG{w¡uUxqÕi«§ÛÅËÏl”ݤÚÉl¢²[ˆ’Ý÷Ý” «¿ 5°èv_H”AñïØ—î°/ìKX]¯^'àîÆáèÙ„Îzv®%vÿP8né©–OCž¨Ž|™„‡v¦¶Ùâ+561âZÄ kPè”t{Ú¥ï|¾bQ£Pƒ…žû:3'ÿj?l!n'´¼;””˜¬Üú²Y×Ó?Ý-y¢³X’Û¸ãp™e~4"¯×Ýï‹×øü»¢Ïâ—»ðÕ¾è…Ña”ë?N».ë••ˆ¬ÜZOzØ­ Vàöy‡º-z¸*Dè¶5Д^a—,©¶ŽÃjeõi2¹ïP³ °ïÃ"}îLnT «i«§S3Ž/N£ÃD‹Q–[ëI_âͺó‡O„‰D~UÁ£.ËŽ‘³ÞxÂ5‹"QiW¬ ×u·Kd{µÆ7J ÷üÍñãµLFŽhÌo¨µüÒŒj ìÔÒÜ×\K)‚ÙÜò¥3 Ë»Wê€n*œpNh¶Å‹:ÇÇŠÖÁ^dFyדëÀ3̋ԷhÛê–Y#Üqs,¢ç¹šdº¬ØEPª£ùu%öÝ„ÝF¨¨KàŠ– mw¼‹º> êÕãD=ºQaŸêË;°äƒ’ [¸¸Øm/z²XYuu5‘ÓÉÇɹ® –CòÓhçEâOx%áRMnv Y¤Ùr¡†l²_YQšÛaEå  r³¼vˆ=ƒîƒ Âþ?gÌã=v!©Ï¶º º–¦.ŒÎ±Œ„BÒŸ½–0;op]Ÿò¨6?Ugýº6äÎÄÏQÔ…ÿ4Þ²jímA+mKåÙ_¯l%ý;æ¶’þ¸å{(ì$PÆ5ÏÒ¨ [IïŽ9 +é]…‹òYÀ7#R·òDÞBÚ$‡|ÖT9ÙÆ°—Í‹t¼aˆ„cPâÞ-Q†LZò¡¦ GàæÍèÞ!C¸±ê’Âè§pR;•’ž¨aŒ› âê[8ÒR²huÉH«,lŸTkå,g¦¬A95%`MµtHÔqt:¯ïÐp´ÉVÃJ‚vˆÚ„Åë§ø¥wÂ$@aÍÓéÙY4>ÿ4þuNˆ˜Ÿäy?RTªQO~Y¨>áæÛƒƒmµ@Q•&JúÚ)ÐBÝ\êé˜_}lFÔpò[2ÑÓfÐö'î}U7dÃ}ÆùÕõ™_ŸÅ<úÑâŠÓkÊâsªàVXL¦ÈÈ!aáüçéõõä‹ÊÀí6©qŽ(m\ɹó…Ýâ.iÖ&ã±MéÞA»‹ 6«`ð2CÌ=´Y[Ráµ\ÝÕ©ìšEà`²†>k×åD9ï=¥’î,Ùç/d5¤ì ðîv¨ŽKžiîߊsÝåñ=~nŽÈåš-Cqs¹^Dg³ñû‹Ée)#o¶…âˆ'ÇJJô… é<3üê;[`Z²’´([ÚY°ºÕṋ×6`Z=KûƒúZ®²`‡ÛMº‡»€I0é‡cÇ®‘?ÅäóÙ>:äëþwÔCPß0¸ó)¦š¿ZD7³ó‘ÃݪÇùóQË6\HpŠóæBêØ6²{Ï3ëU]¼3Mk-f¾fšÃAèʲ}”媛ÎUϹÍ:×V°nú>ÌòB  ÇìPݶP·yèc0ŽGqÓ1îfl|zH—æhAkmSèÔ3²û|éîuư¾ÝWŸOF Í1«{:ìÖ)„}EàÒáèJQú>Ÿ‚ ÊéÍõùôj"ü:¾8N§'PÃé×/êwHDKEç*òLKÍÖÆÁ'õÀ3ñ”ªnʳuÀ85CÖ‚ÙŒò§‡Ä½‰ÁÿüŸÁÿú_?ãu‘ý%xP}„ê°0Æ.ÃØ£ )9Ù>íèÎ^¦b¤?¼÷£‘'imÌÔ)äÁ¿(ÆðI.*yeï´ÐÈ*9€%+ŒËtµêîůY5ÔªìÜ=¡öJìDq²Ä ýÁ‰W“\@Øuðg5ûêd6=‰&''çÓjþÕds›àð@÷K0Á’õ-5ée:Ü+ÏÌYwh03“¥õy%䉈Õ%NE±‘š½Á$R–RÖ™'s©çr‰<yW¯×ȇ,3Ý?!ëµAžly(|IàO9òŸ'ñ ?‚êÜ\1Ô_Õ‚Oë­[mž-Ð*šZ·ÈÔšÁ±ƒS’¾{÷ÅdXACL.¡",Õ]À´ï'3!«–‘³€#(ŠjëíE„[ÙÄHÇ,Hã5b`cwÇ[ûªŽ 0+³‚þ‰~_—ÑÕ‹‡J°$®QÏ”½ìŸáAözgt»$´E ZšdYvÌ0T^¹†€–ñY…§ ò³ mÜüèúx™À( GÕ“AÓx—´…ƒ–D…ÑËëÔºæ“,à¥/°†7jú¤•ÝjMâ[ô{mGó‚Æ^»û³˜k‹ù‘ù` ZTøÂÈÏ 4º¾×t]p¨Kâ¦ÛŸ”ª\P@+ÔE†L)ðiñS§Ï+—¶ ¨Ž lø„ ‚Þ2ŸY³fÅmìÓñs®uä;®Ì'É |ûœŸÂèY4©ê¹ÓÕ!^[Ã(èÉ ü#€)þ¬8f¡ÔÅ ¬ðŒ.¯æž1Ãö±÷R¦Ñ¾G³©~¤y¶Å]Æc×ÿîâQÎø¡¹PH@×yÂãKØî¶ì¦¼óµ›»–h¼Žœ”ô®q)äo[¯inkÏ Šyñ:tA'ö±Rü万F?3ÞGÆûÄä¹zíañ?- ìÔ©¬uß± À„° O0R[pgW³èê2º˜ÎçÓË÷R{”šZp%H‚q'ÜüÖ¡{³{)YƒÛÎñu¬Á½«­qèÈ”AZt:Êi$Ž2æÁø¯ª$ 52tzçHõúr€ ÂýH(­žƒgb2ÄÁ æ”›ÝDô¿àCw_¼ÞÓ)ˆúù„ï>øP¹O(?)y²?äÛÈJ™w9?–„2*‡WP£Ìkÿ+¸Ùñô?9æ…|5çæÎžÌ¨ºMž(ã÷ëq+È!µ—ÒâÞƒ-ŒÕÖî'àèÕý`m :àn‘!ÙzõÚAA–.•´¸:n+. »ð£ÙTžG½¦6üH0uºƒê Ý‚‹Ú Öµþ“i²'5Z‡-×»¼S_ßkhšCÓ’ËýëQ’§¾¦ÃŸD…ãgZµ.(-"¿%ã†%Ü95n3™Ù|ÔhãîõÎÃìNŸù`˜é<ÇW»ó×cHìÏMG¢þÞªÓ}L8ˆ}»1C}áÑ7\½À©ëäÉC²-ª÷£Ç¼L}á<À7,ឣC&Œm1Ð= f©¡=/Ä[=ÁB ":†Cdæè=ЗšÑÀ Y¡Á„Ƚz²åø̔'ìrG ÄPòò`ýh1ËTWÞ&×*ï=ãg»L¥qeám œ.5³Œ·™9m­Òü|ÄÊgžÔyª4Îm5>ÕdX9ÛÅÓa·ê¸»eÈlÄ”ÚûjêVœ¬“8ÎÓíáùÔ ïc?×Íía»?Í.^ªûpcøÉÆPÆ:/õñ9’MXTð*vªkZÙĸ»¬$5g„]ÙÑÌ!Á”ø9¡ù£ÀmoÕyÓ“ƒ1XÆõ.>o¢x.9. @+Øn·÷tK—äó=Ä£iƒøïü<[«.  ¾â6SÒG¾?„QÃ¶Ž—Ÿ±&•õ°qøÛq¬„1k¼Çq°\g[¾É/‡Íq”à?K½úiE¸–1æ5ƒËœ±ª´Å€¼ºz6›U÷Aïöáwõœ)‹TÇnzYô‡ þt÷ûrûça ÒjhkIs¼†€¬:ær>;˜7WK]f–Ê2¥©´†)P7E …³"­Ò¾²üŠÉ@ýýø|ü˯ÑÉøäÃ$:΄`•€¾‚J;.·2²£wjýÐÀ¯„c=Xªt±¤Qø<$fézvõ~6™Ï…õ>Ù«Ççd{t˜yé ð=­ŠRr‡ñõ4Àf!¦úÑ2É÷O•BBàÓœ¾¿¼šM¢“Él¡O–´£âs²Nö¶´i±@=~ÉÀÇŸu™e>™}œÌ\ÜȪ™ãŸ"˜gäP”º;'ìJ$=»d¨æDNËu Õ ]újF’~ç†ó÷£óé|!4øŒ ûbÔ'_&Y\ý<á@/æxÙ¬K(Æ\€Cböeòb ׌àOjr Fµ?E±œ!#a—ÍQG'‰Æù™ÍPBî½íèQ–ëd†Þ†dñâp[$û×9 ÆÒØ[â[0AoÓ­l‘kE¾àïå7;òHŽS*.B#˾ÿªè3/焱JÐ!.ù÷S,b+íªÍrO÷Ø,y3 ÊùLÌ;ºÙô°Ž 17QFã?ˆÎ1àmò?&Å»ÀhpITu}¢¥zXh`?j×dƒ›?ôÆ·§ªl“öA Ë”°2cn•ôÃêÏ -yÇ%WOlÁNë%Nöà“;Û¨ihpʵ‘ÉýRWˆ6™`Ùö4m[”P‘p¸T÷*¿bB ¹äõ+£7ŒHB’ëï}:àò§¥kŸÚ^Í‘·ªÛÚT6¸¡'8`BqGHƒ¨¦õÞ§û‡Û`Œ¿Fà¬s+ëöC¶ŒÂpm݉öþ ƒ:õ•Œݾô¿è®"_4„¾}±.?Š ¯"—`ÛCä5r» ¹¬<. 5¦`~íDZÏ`5óE;ÿ½ ôe—þ‘²}‚#¢' „eDžÙäéoY@·¤:G¦ ð=õjX\xKaáDÜ¡*– $tɈN×ü–fÝ`²R>n¢Rm‘/gé8ð÷™úy‰5Vüóñn¼Nžâ—f#\YáPm¡ÖŸË4×~ˆ—ŸËr±´²ÿ#c:PNŽ@u›íÜÎ>Aó ¹ˆÑ—ÁþýNw¼ ÃV”“`ôJ;Ð>‚à/{È»l:P°*[׉ ð‘(9#| ¹q.à‘]ެÇ>èêRfV4àã6FqØl8° >b¨m\xö#|'†vš¤Lkmɰðô3Œ9¸F8î†ÑCMwj…g„ÜÔ]ú´ùЇéðºšQÿEÎãg Ѩ~€K ÓѰz\ig«z{DWú¡Ö‡48§ :ù09ùÒÜW8¢òÅY9Ð9®WÉ^=ÃE Q¨@´—/ÞXHš G‰w5 †=Ê–¸§i†I¼š¢¦ÙS‘°PK»'ÂOòH‹is4» èƒcœÿ#^¾Ô™mßY´H$Mæ¡—d½Ý°DžJ‡µ‰÷ˇ!c„¡ëñb1™aÖÅxqòùRõx¬ì1ú´mðˆ½ãˆ ,ÒS´ŒW²m"Õwåü„ïzï¡XIÑ„«öz@fF@G~Ó²§h e¢‡d½«¯‹Ô¥Ä¦§p BÔ„w` [˜üüŸÔY$ù}Ò÷ê?…OP“ 4ÖZRP_Il_8ˆ[R±¯¥´™|ù\ÝךžüRÝ×Rú›]¦fäË—~Q_§I%÷0 ¥ý÷¿þ·…§Î²?d|Â;88+ŽŽ2þÁ ¶y¢:]½õدþ*°´Zˆ±^¼žV y œ|i¸)耬Û–©äƒ¹ËÖPSöUäÃRIÃ4Îl˜™Jr¥ÈÄ”î)ž½Z++Üϼ­J² Ü„)7Ác¨[ñ!ÄB:> wGï××v¨c:¾Àtû¬„ûS -]‡ wªÊDèÞ4”ÉVv¨ð€ÅE™™úÓ8zÌ@mUða—¬ªìÒ”.‹¼jm—­æºád(›¥ì’áü¥Ìµ:&³¬`ØyeÅ“Í4¥[IÕµ²ÞqÊú¤sx îõõ¢7{&Xëݲ?pêT@uÞ)xˆôžòiËÅÀ#!1Têj ™ñ8jB:³éo~Z2:µMý ¢ñiÃ..ºî2Ùó‚à­½˜§ËÓËLNOçÑÇñl>rVÅÕp¨×TÍVQ¹| ëã\×:p|<¤ppû¢¯àŠvÀ™¡ ~UõïH8'CPUG§‘°òìûedûÇ:Z1ì¶5ÑJáßÌp O£|]:V.dÃUãk¼ÒÉEÈ(‡ñƒ5fQÊÓvÅœt×:€›DãÃ>ÛÐy|8ÜÚ& ŒEµìð„£Zgm/ÄVi»‡¢V I×¢¢<_Iµa_lI›µÑ6;þÕ1Æ ³·3 kšªéà ÏUû8R̘ÒÑbvÒʘ9,U§ðO×IòêlÔ¡FôKXúê’?Õ«g›‡B95­0›ZzŠWéýý1d 0½\Lf׳‰úotýëâÃÕ¥‡†¦/Y´‰wG3†„V•\þ³«èb|í³ãNým…FòØp6>?ÿi|òóÈrIéî¶‚ !)MáïÕº?È;oKk®Yó9´;NÄ.˜ÿ#ãͳ;,//‘öÎÎK˜¥ô JÒ6¿8øÌé÷¨Úƒ=*Ú®cgÕ¯ßê ™ ì¹`ĺ"'ÕòEõhY4¦ø”^†"Q,?´Eð¼üݶÄ,b6V½æ?Þq*Ù¡¹/Ø«ó‚šËÖ­·“yY¨w€XÊ­±xMHuÇçÓSÊÿ:^,fÓŸnÕ LÏ'§£7îË–[eƒ›Ú¹5•K?Ú¸okÖ—ôȳeu©a)I; ¨›}·+ŒÑ¢nêUr‹M±}‰[¬­æ¥ÅàçG(·/¡À…ia=B“ËÅÕì×h|ùktsy­&q“Óh:¯ÿ‚bèÉõŸWY}QؽI¤ÌIÅ!j(k³åd·“èú â3—jb=½ªµIîÒç×±‡±jlQ㋳é/;lÛáJ™{1½˜@MÃꔦRó°þec ·Ss ° _½éð·zÉ%ßûÄWŸõêS9 óáדÕ-†_®¯fö”É!Kcue+ôq{íI?æ}œç}1ø491̹rÊä—żÊçÿê÷çÔ8^Þ@·¹¥ëðeì÷°J§ÁHæÛ‰oP•²~{µ5i48WW±ñÛñ 'C8ôßM¢&5«*—š6¦w/¸“õ Œ„†V\Ã^ º‚ö×\o$—ê]Ã×DJs^„ÚhåÒ×u°jÇþ°=òÉdhqÐîÕêí¤U’ò@oô Õ¿»”ü¶hÀ³4Ü©QY9Sõ€1› m° ¥~\m;›|’ÛÉ^›î[ϸbˆAI[ófo_9äµ·¯cFªZ ‡ÊD’™ù8vb=˜ñ[ؼTo”þ¸°ô1Ï •%%<ÎùˆI娪ü‚¬·Ö‹€ U“Šã­p.@…æ'“ˆ¦ „ïz·OFÍYÝÆEºTSoÂ)þB3ï¿8Sï£rd§’";õeÈžúd+Éçü8Êç\“>ç^ÚðOHzº‹W«|`zkR–ìÖÓë~Bü2K)tJgÝ»ÚU:j´¶©ULj¾÷G\:†` þå¹€êÈ'pH«^Âa[ÅÕ-bwkø·tû[üÕàõRïáJ^Ú½'}íNîT¹-Õ¤øY*7r 7»€Þ²VËî4]NWOÛ¸&÷F]v§¸£ÇàЦ‹ñøQÝêkl_×ñh|ýÇçï è›ßÛüóáV­œ¢ÔuÄÛÏúï[Ø´fÚÌ`°­À°Ö[-¾ Ëk®²gß=cQÉ–Nþõ ö8Ÿ×&¦hWëšT–òe¢Ù-ºHˆ“÷ô3æÑïPÃëÊ7??è š¡á^ýËPHÿ æ"0úœ$;54[æÉÞ“ÿºy3tCÒ¥„×ÚqŽtS_£‹û‹®Œñ£¢}Q_'H&ƒ…Ñ5ë/U¦²Ýs£fˆùe°Ì£`Ò$wBµ ŽA 9˜òߨFÂA²–Ê$Ê£ÏÛìiKqm½¿U]¶Ú)àÍ|!×jô éOÖÙK㬅ÃP(~:¢ôPŒ ¡1WªÀü& u+¡ôhÃ0¼A!„„ ãD2̾jÔ¶†úíêó¢éöüsß>ƒ0d-ݲƒz¿“uŠ[Ðæ01v ‰l£-GGžØû•Õ(HäNíÞq(±òéA ¡Óf÷å3ÿ‘8› ?¶‘‘ö,9è>€UÑ·ûwì×'¶ò1Tè"8°+y¸Mþ¡î(ø_˜‰jßÑ `„†z·ÒÛ<>b kB9e+ô§·I ‘?€·Mâ|@´MI‘/.6Ú16Ð’nU°¨¨j¶z,î=œ¶µ ¶5œV?¹²:xûE*°zhÔe°GF}60lÔDW÷}ø±ú”‚Öz^­dQY—DÎî¸t¦ÕÒ†GoÁÈ.¦‰xÙ×Ò´V0ÁõÞÖër]M!µw¢Z9­A½PÚ»O%F·Ü¦!¤¡zwN{¸oh©µŽ™§rª¢Ù™Û®Ì©©©±†™ËtVˆë¼ +¤%2'¢[»0R’xoâ?Ê_'çÙÄã-T!£œXìj ëÁc:áòÅ.^&~#|s ßÒfãøìàC-†äª1n°·šA(>+èH‹OÏ <=·Ò+}·jn!þ£*ïPÃáVrÄðÑãf(K°§^m†%Ôf å &+ð@‹ëì°Â¼Q9&Ù1Äk5H «Ëä5Ì!m1PBcŒÓѳm†i,ŸQú`›AÛ}¬8Mi ŒL»IÍk“>ÚbÔËm¢Ä k"Ñj ùÌ‘cÍÆ¨éŒšx/ëma6SÇcÉ)j6äî[^õk¸UF¦Í ÍcÑ™9ÚbT–«bÒÐ;ŠD«A‚ä3G޵“ç väy« JßÇ®š›‰ïׇ¢²ía“³@›‚ã1â=j1$Ë-t¼Õ BñYAGšxHöl›® ´™!8;>ð¡Cv —Bl5`ç½vmW ½Ý4 ’o7mÄ ï!žªæâ-ÄE®â}ÓEZÐX>SôÁ6ƒŠÝ!o²Ž·›‚(^;ðH³°Å²Ãæ–î³$ØfV×cß?J"͆š•ôzL›yšÇ2kͽ٨ú:ÅÛ¬a mi$9r¬Ùep¼kX¹ ãm†0ŠÇŒK:Òň()’ÛQÚ0)‰VC@.L½SƒKai6&Û%TÒ´a«EÚÌ1X{®ôÁvƒ‹§tß4Y±„º%x5fÉáàŠEƒIp¸ÕÄ𙚠P}zRì³<¾oø‚[BmÆØx“®­Ã͆êÎêMÂÃmƆnj9h3 L—É6{j²BdÚMÑh^{ôÑ£vëÃ¶áµ¢ã­ÆŠÏ:ÒlÄ>âÜh³iè”±6“ö! ‡€é±lá¶ø¨INR)úãX§eZM3h>»ÌÑf£_²†‹GÛ A ¡½™üiŸÖs«ƒmÔ ïaþ¤š}Ä:Å`×Õs­Q6AÚkÖÐMLMy½19XÕ'M˜Ð—Ó…9ÜåÜaBÜâT^¥.¹µ¹ÏÍÜ¢¯úœ‹´[Ô•½²Ù¤¨©ÍÏ{N{QeR.Ù‘ÔÝQ$R® é%½à€NaSƒ¥>›3,îòq£Ÿð’VN“ÊFv¤Ea—”JDz)±Td•7s;s–v„™–[k˜eøLŽ©‡:›«BŠù‰¼„!‹ŒCvDÒ"¤3úç¥]XJë…jä±i©é`•"̶«}ƒ$E*caBÄâ2çœ:„¹ÖÆJq×A®ÀecaëñJA‰Ã0-ƺÚÙ˜Ïgqmeã.xIS.ñ]ï(>Î(l’65¯ •]ië.ö¨ Šòë_—>^q~ö›`Q¦èãä°JÖÉ}\¾0áO@ÿÖ ]KÚ{NBׯ—“àZ÷$ö嬞ʗs1:è12]üÅÕ ›YbŸâ|Û?u²ÖEÿüêd|ŽÉo?g—:™=+¬(ãþ¯”õ­ÄG²þë+eÎ7×ýÖ–?¯ZC”_=¤à‡®ŒtœEöéxYÏ&¡4„¼oùŒíž8Û½B>\€‘dDÝl¶,ÞIÊ!yÜøgÌ(ZÅ?¦?´Éòá‰ñ¨’0Ü2ûÃ4ð;–ñs èÞ9Mø†ÃUÙÄ÷éÒªž+5ª)å:õ¼gUÏ•º”^nK>ÐÅÇ·'ÎïÔ³ž©MœÖíªÊÞ®%"‘E–wŒ9 Í肦`·ñ}²Â\W'˜#à¡ÙW3]…â 0–}„¬@8Jg×£•¨†ZU{©I‹ç¥‰!ðZUÃK‹‚ß?¨Ñèáwh†¤y¯—èß­·‡Í-Üç?Áñ?>ÔËéòü¡œ…Nzó `Á æ3ÉE»$_B‚Éûc3+DŒ• -ÄxÀ³²HÿH`g7Z¥åëÔúyChðÃØÔ äbüKt6…º…Óÿ1‰Î®fÑéôì (ÓÍa#U1ÊgØ?M1Jm ûçœËH uHHjeFh´I6:­D÷‘¡­Åv`‹b–îéÍTã€Ï :Ÿ+sþ…bØ‹2$JðFJ˜™ãçxx‘]¨ƒXAð/E Åkõ`'yü9õe{ò‡‘¼˜sb'òã¹À&Ž ²±»„53p$x¦Û|? Õðè*k%¾ŠO®]µI :¤§Ç³¥$¬ûØx9ãáü°…ä%Ç×–DlFà “Ð¬Tç¿ÄtK”¡ KöŠ\Íâ"ÁO2~ÎÔ-Ô•í`ä°¹‹£â°ë˜gDGö(µPÔN³ÄÄI£®Wv5oŠª3U'Äá_ß^¨ÿߦ™:™<]*lNkþ{‡âVõ—o¯×oÿý¯ÿo´IïaÞÒº¬ž­—˜0LEðZ"¤Ï‡C0Û]}(\”½õ¨Œ4°ˆ·Ûht0‚Â6‰¼Òip¢h@OÆ÷dœ×$OØGg+H×Ïð·â¢?RwÅÒÌRnP«î—Øw‰Ô½AucÆ\Ajô‹ ÊÝ6ÝÀŠ@ï8в¦ðc« ª^sO½Ån³rîÒB$;Uóš§)²Õ鉕lvè¡ ó1¶‰–?0§0æcãÞž†m<+m÷I6χ¶­GÚ1íj«í Vº„²}ðLÑeO¥WI§a VÉ]¬:Š.£´’†Ã«aøÈo/Í1¾¡‡ÁÆl«õÓï $ú§t"’É@C<¾þÍSÒÎ <1ÿ%P}9çTØ¥{H6êØB™i#õv7¥ÂM !€Ì)Ó-üÉŠzeìG›wPŸ–T½ÁT3°Çuࢮ#1dÄS­ªcÉ)vdKpyŒï=sÀFVœ¨Þ|’Ø @'Ÿ} Û-zAynÆ çç€[¿rRë³k*Õ‚jDˆA)>sõ£aQ*•*x‹9÷ ·Y&’¯³DÓ¬A¬?AL3±­–ì.Í+u„[ØJ*L‡‰ë……S¹AÞùA”³Ã–Ïà FƒÂ€þÍ‚µÔÞA¯ {Ëõ"êU᫟¬RX\ís;½Š|™“—LŒ‘(5c-»ty–G¨ýMi1¡^›ìp*vÈ+cùeß ôz™e©‘=úJîU4J 'OeU¹Õé†zY¢•ø™ÔðnÕüW%»ö a–’»ëEåà¦0™tŸšÙiíãî)ñ¹Êª—räùÆ-×)&¨–Õ‘¶_’È®E-Ù¤¡ÞŸQ6\1|¨¤ Ší.þ½…OvR*Ÿõ³ñ?}ˆµ×§,ãöãÕ#L—VÁB}Ьw±ÓÈ£…®eÈÒ:`ña­’ÛÃ}´Ï³¸pÌ HOÔ¡E¸ýÁ%—ì5¢v[<}& ðZÍ„ól³£zôòoê ×LžŒÖhIr1AHæ0Á`3o‚ÌFŒmVtæ“ÁÉe_È$ûkW.‘—Aæz­NM© ý®çwåwCèÇøƒÃøC?Æ¤Ç Lô œô¾IÍÒ›$WãÞd©>/¹´SΦ'Ñäää|Ú“ù¹Çù=ëü¥ïJº‡4J”XÎf³~$éò¹+‰¼÷×¶ow¦1Û~$Ýlõ'oM Þƒ†³×¦ï’q»3¡»!wkr宄&sCÊåvg£®t–kR­ RµÍ®´¾%ÑN+ž­ëu=,0ë{=Vñü`Ýﯾ»½¿Û]äVw‘—½»H5ÖTóåî\"Ï36üÕ—³X÷89&¶ùù/a_®Ç¬èL²ÄôñjÞ—ç¥û),ó¼ô=Ÿ'õ½ÿ¦+ óø9QLßÔrE±ÌÆÚÖf­%Y½Ô-º-S;tõgÒò~­ß}3Ë<ÛUÈêÂCÿ96ZÖl*çÔsÕF[aÅö ~φ©d—uøúɤ¶EÂ2AÏ©¦Äk¡s#laæÙó‹L½^ÕX¢§:Øç´i,‚Ç"¸†c¼Vi™ÉKÃ>ßã¦ÅeËF`ä–EçHÖPš.€öGPjXQÐÓ,÷»Ð>N×ìàÀ:—}ù‚l»~ Ò;teŠo‹l­ºrÕ²9{MêÖ=ñ¶Ë“Ú`à„‚3yN–¨^UÂ¥±«]Û,Šooóä19W­T÷»Z¸ÍB1DÙxüôðõ`ñø¿ ‹¬·Äë§ø¥¨øz°|ˆ·÷Éê¿ïóCB]‚FU]¢T¤þÑ9õŒ¡§Ëv™ ³Ý€õÜe¼ ¦AºQÏÀ#Æ/裰DiíÓÐΡkMž¬â%l™ûü|ºZ$ âà0- ”‚ ‚uºIà¡§ÍŠ®Öãÿ¹6É"N>ìQê!©CôLÈCÍe¨ž@NªÛ$Y.©D±ßåÉÀ£CØâD=VJ4·¼Z°]žw5Û0ïñTÇR ƲaÙ¿µU¬.Lߥ¢ŽP¨>÷*¾U#”{l2iFBãˆå÷ø]¦)‚§åT=1Fai;šê–·o; JeË[¶£¸ƒ7~º‹×qbýÁPsOW³Ÿ£÷³«›ëˆÜú憯þËå;”î¶çÀcªæ—+ë!3OË"Y>l³uvÿBEs¯Ü- Îã-wHÓ´¶m¡è‘û<¥¥Ì%BI8ê#¹‡qn°¨KŒ¾w¥:T’‘5Ä\¿nY ï2dj[ ÿÂð…ú_úR¡¬îpX2‡ºtKÕƒÃÞ~%\×?\_ÍÛu&*”¤³N¬¿q§ÙŠºÙÞcçØ1éNù€ Ø ÊãþhïµïÀ÷䨒[ºà–·Ü–u@ •ï^޶ýï`ûóqÆ?k럽æ{W²õÊ®+œDËuçýÓ!(»ªpjœ«óS]‚ëpŸœOÆ3HÜy¯6q9ü[ßZ¶—iÅ«5|©güs”Á8Xj,Q¨cJ>\(pTû á® T‹·”h`ovPߥۤ_g0 X¡Æ²²!\ÄŸÝâ{å9R“âM¼Ì†”«Y3Lé¾€qíË«¹bÁ€öqSeM!ÅV;nJ§g”ª®-Qä\­üéÐ0âæW-kœè‚»Jv²¹‰‘ïuÂڥʤ ŒLèÙ7¢q5½¾Þ²³+w7ªw-o}Pcו˜Ax¡ãi~®s®¶ÅâÓWsøY¨£,W/<•Ó#*=ª>±‹ÿsk ,¿Woñô˜·¦0*Ì×ÅÒ7n¡† ÓJ‰¢bÀ[Ê‘qÞ¨ÊÄÐûŠûÂ,T­tèŠê°qyEu+yfyŒ+Bø·T¾îüz฿Zû EÓJ%l"ßgÙšRupÌFm’Œ:y›âÚ¡F#ú 7>Àüêìîë¡Ó,b% »ØwÿPt\ aGjZžç0–Ùç‘– `,\ÊvÎl ˆø1dÄO¡îÿëÿò¡ÿëÿ0ë°N5õ±@5úúžì#dt-÷;œÒƒf™½ÃÞ}Úd¡ù¦ „…¡D> \=@éçlp'%ƒievµwòÉA7™VÁLUªÇ‹Ôˆ²¥ô-´­á1e• ( ëñl|1ýù*ÂÜU?O~Æ7‹«h|zjè!S‰`uËÔ‚©DDÓž_]ýŒ©Dõ\Qà6geRÝ8¾}<Ç‚/iÿ<~ keR½;¾‚<CXýšA•êö9‘š_œÞ¡-%Ec4šð–ÝÀ¤3;“tf‘PØ4Á««T¼IFKT‹õ݆»¸p»¸K/È‘eªß+ôÓþep­_c®W.`[8ÈTcõ1MžŠÁ$§¦þ*¹©z­±Èö`|0ñ†ùÓŸGø`BH“eªÏ&뇶þ•3¼âܸ3ÕµQ˜ºº)beX™&ô‹ÏlvØ÷}[5~5èz2›Oç‹Éå":¹º¸_žF‹éÅäêfáÒcÿ¥¾’{50y#.D8¿)——““E4›,f¿6ôj¦4ᧇm¾Ý«4?ŠB|ßÉ5`1»:®Ç‹Ñét6²{{¼úF‰Ùáa4/~º¹+!î\@o½×sUŒüמ­â²šª¤Çm”4Ybu؃k¬Å OøZiFz!)gª1êº_¹Ri ¾HáµúaXp3ø¾¼û_“+”DK$÷°q2¹‹ÏÖ™ x48<øçã_‚a>é*ÂÈu³HÍ¢±$Î&ø™[ ßZÐ0æl[œh¾%£'4eñ²ÝÇφðˆ<ÆšÍ`x;êããv£ÃYDy–í‡Þ/LÔŒú®}ÏæÑìêj1rÓ‘ë3—ˆ.[‡kTÒp /´ÇLÈ€ÚafîÞ¤$–]A®BƒÊcøïCžm¡övÌ9‘p€jWêÖ.8þR é"Ý1dÕ²ÞY‰ç:ñ¡`…‡ÔÂFþ¢ƒ2Ž êÄú1òå7 ÙPY0'ô]Æ%›§õäRoó†w%ÕNÜm[•lÁ¯µ:­÷/,é²]6¤J„cžl²}X‡Gu W6,àh¨á&ð3Ð?U'c²GW–gú.äV L³ò xY' `•¿Ê¥;5λS³B!Ãñ?Ô:*}†}, Ί8Åÿªsó]IIÜ3ç²áJ]‚î ì…%PR68;ÌÁH² +Sˆ)…7ë1QÏØî°'›§[ž(è\(Wf"åY {Œçû”º—ôÕ\®«N}´«àe5ÜÿÀ,¨g³Ãš÷~Oö¾r+‰_™™€0oŸERì’eŠ™ÙÁ´«P¦â£!ÃéÏ­$Ü%ñ“8Yà3@>«û¤K¦@TØ‚p…Žÿ*@‘ß››º¼8Jn’Ž-è.”vºæF¸j‡†±?-:˜ºèƒâ³9K~cOqlq`Ôˆïî¾÷äâRÃBÀ.gÓóÅDÍ>NÎÞ ÙŸí’&‹ò‹84€•úC2‘HR« ¸G8æÙ­7%"·É2Û$>e:"©Pª¬l²`—tM¢ëàeªšÖÖ~EÙÚ¼‡\ê$YX§AäC C±›:i‰´»ÑR†pwQ|%»D”ËmùPìò\•Ê["äM R9ÈAi•òYn% „µÌT®ÓQÊëäÓ¶S>UR<‰4ª¤o?×Ú'í,ž•A°È”¤*U›Òv6º²²]YªZ3JÄtEˆ’º®åV’¬Aê-7ñê)‰ŸjM‘Ì[%óÖY £dÊêM'@Æ„7~rYhHø†»¯4ÖðñÀñˆóÍOôÛÇŒÂfÓe_R‹¶°Há¿”Ÿ»¬HŸÛÙQ¬…™ „õ~ù=®0>Fkatò-¾ìŠÞûû¤P²§œ,ØÂ*pÂû‰~;ÌyªÆ§o’¦2$ó6ÉjùP 1áM2—åéY½"Mwïéÿ_ƒÿô ÿÆ FýßAþ²ÓÇÔå6wH@ö­-[Ç‚¡:Fž±Õd[i±£]¦fÑo6÷›†â¸–ä[¬±ÅB ðõ®‘áB5¸ì™¢P=ÛËóg“ "cÿYg‡X*c4¡ùÓ±ª*¼‰— õ;QDQÒ:f8–hx3^¦†"ne(âfÁ E\eÀŒREzÿ°o#2’| ÑNuƒ‡½éµdÚÚ·’ù²BˆÜwR3<ç8žó6£yžó*“­Þ@ER\ DdÉîa+²Vª"kæQLRdU†m;ö…a«.½ Ïí·dš9žõpùì{ËV%ÒÈDq³tÀ‰ PCzðr{ƒ¿¸laúUǪ%U¯D¿È_´OÞ°÷‚e‰¸ 6ÕŒwaýhMËà€íD—Æl#|;:q⪕á,^øígÆ)|Ö…š$[¹П`ƒŸ}•Þ§ûx-“¦šÖÆ[¾ÕÜØsj5×XuŒòNö d»%hÙ€ ~ö;XRÍ:=,ÚÊ/Æ€3jñ[À%ºXÀ¢­¤±à=µÔXe÷ëN/I¶ó E 5ìy|oãNô$ÚÎÏ–Ôâ·à!.Rßúœß K¼Õ”åuR²Põ©oèŸF« ãæj-Qù``úÇa„ªQšÑ€™pxYø­®cÉ0ÍB öµ§½ØæµÊÀŽd;D´Í ©m˜p‹×‚ÇÃzŸw G¹6nÓÄá§Íª3µ ¹´`ã¨Ë$4"¸+ _{ècñ”î—o¬¿›-`!çïzKXÂþ-ZëoÇ2X`“5¯åãaþo˜\…`®òª¼r¿ƒ†}–«ÞøÍÝ:†œLyÜÐ!Xòo| ¿%Zà×ç™nn´êv]‰Ên´ å»ZEà«°Ù¶ r;ÞàÕ,¡Þ”x+r5Vàaþ¯›#6þ7zŸ¹¬9$8ÝfOoÌŸMä"cÿYgƒXbrt&4:©¿·Ÿß4ÍÅIämíü›Ž«ïD0'°‰3ÚGÅKY,¢Í¦x£>Ûû´|ÖÐ19joKj5–ìCÖ •NH:¡¦ZDsF¼P†L ñ”:?$jœ¨qÍþ·ÁL-ûVþ­±M †º0NÙ°]eˆV_ï¼¥>m1 Ž„tÄd2eJ˜Ò7c²ò ”XªØ6·P´Œ)ÔÛx(Q]ŒOÈ´¦¾™ ð<õNRkt„êÉ$©U·“R±­ËÞ Õ¡£<µ~ôî¥ç×þܽŒòä6.ß«åíÝQ\wé¤Ì¯×ŒAêOøXæ‰z§‹=0dÙ¾ÿµ´Õ4j²®h²Ê¿· ¬ßÛ™úaÞ[_·ýëøâ|n‚òÜ E”fð[r}zb]ÇíápÛ ïH»óS.øp¸Õ| áFDŸ5Þ[ÜéNg%. MŸ“Ø4jøâuàÐF}B'Øvàœåœ‡²†Fê´6qÈx!8çS}ñ^‚qñ9žRÞC2MÿHŒâ#5TXBi³eÒÊUUѹ…t.6(…*çz›¨ÁIR@¶AÍ‘£kãØ°Ý{¼ç_~Pk8¤¦DŪŒ´3xµ$ƒ‘_Ê!?÷:£Ïml,'ŽHIW•Šw~‚JÁ£&[Ø}&g"þŽk›7RÑhÔqÛÊ^3óõd‘ö«Óõë¨8ìôþW#_IÙhüu0§V?Yž¬ø„О…mÜåý¨Ñ“nr:BsÔo‚äƒtsí5‘W48a5[ùõ¼Úc°œ¥±‰­$O\Rcc®ÛkÈ`}¦¤äÚ­‚±©À³€C û>ÕþØÇm©j(gù¢ïLVPÌÂ…AîYì®”7Ñ X‰gÜèd*W„êa`ƒ«]–;D#$¨¯$É‘eéžÚ·\ˆËžžÂ<Ò,ƒÐÂGÓkÓ<ƒlzq¾àƒÔðhïE¨yMÃiKá#"é5-ïå"ÌL~ªyœj5è¿%öUÓð£9Ð]ñLÓ±Kæfn{ [È6@³Å§èŠå!y•og‘H]×<‰UyÛ©â‡/S¾Æ m¬™´v+•—:Û¸þ¼øÙ&ˆ Béók(}]VÔ'¥ñ©–:'RÊຢ ”r’Ñ×±7jLáw9¢Ýœ¾uñ¨¬"„‚@•¤`ÁvM.Ç?ON¦BM÷°œÓ\€…œ¶ùøãK8xÆŽ53ŽY¼'ª½T7³ËŒ¤ÆòÉÕùùäd1½ºœG_E®·EŒ;±R]dpFg /ì×Q+ªñƒ~ýÆùMâ7~¼o,¼ÙÕøôb|­Né[šu¸âáÁø®£êèàÁø{3FÕÁƒñ}3FÕ1ÁƒñC3FÕá@cðÚ-ÛíCó –fìthT[܇ë¯^. ¢Uï©zeÓaUàÏСShìv¢³+ ÷(HŒ,Žîœvý`¿³´O–Ó…Š8ݶ4žƒ…ÞZDFIœ/<ÝWS& ê¾æj¸#…(îR¬^ˆltίÒÉŽjs!½¬[„Å=qú§tƒ5ô¦#Yà;ìVñ~àü˜ B†3¢†è6Þ«P¤$ªD¸à!b…ˆeûÁæ›±D€Åpr”7&^¸N ÄúVŠØQŠš«yµš]¾Û`!ÛÞ#}Gùw¬ekFú‡m”u«Â]¹²‡mˆª³Ãp–µÞC¦«)$.Û13 ¯Ùt|C÷Oé2ôœ«3À÷“䙲KG¸âÖÞÍÀ,ÉÉuz߯lö ?…bW4S>Øžd «AŸ’ÛŽè:Õ@3>&³G†‹t©>´ÙÝž2Ü7¢—«)Œ¬ÔaQ¿ç¨kÝì"+Eo# É%Ým„½_v¸6÷²åôž“Ê¢µz¸Ñ„kœjüÜN"’²)ÊzMà¥$©ðV*$0¹7)¬ íð$g¿h”…½<ÛÂrv;8ÉñäŠþV–7Cç±l"4C£C“Ý]uòX ÜTGÚöìÔœìÛ¹HŽ;9ú»í4ò¸Ã“#;åJíÈÒ¥·Ã;Ÿõ c½&pö´cÛã£à#k5"›Ì‹ÍÀ(Ǹ¨Ó Ëû®Ø(ìÌ&ó…º>¤R÷Í2Ùš9@ŒÑQ£Áúö·_¶®ùXÝWÕô‘RßÛeDkXš5µŸ‡¥¨!› MÁÍÓJÀÜÚS%«¿6GSu«Säq]`XhºÑÝ>ýk}ú—»Nå^¬†§Í ¬…€!»ÅUʾÆy0¸Û‡!8^Åïç¨X%ëúíÏ­+©‹á2ÿ"Y>l³uvÿR÷$ëß\P²±Ç¨óÛÂîòòÒÀ¥×K¼üí¯2C ާg‰ñ[®ÔìOÖÝ`K'#•Æš“µú#ë>Ad ,Ï/ãrE»!ú\°Ž'[ìr—à ÝwZ¥º±°Bes¹—©’½x<°IâÛì°^²CîªîHHÓÙÇÍ[EÕµP¦¯ü´ ÔÑœì®×/Ÿ­íXÅŽ¿Ë°âº\¢éØ¥!b‰/զץzÜDq¾ÂCûöäM8Ã1o“­Ò»—c,ÔyÃúšŠÚé6O¬Omú»<ÛÀJ#¸°Ý©ÛÇ‹î6í³l-gÛ!VaºXNdw°¾Èkfƒ/-òÕÛx@œS¸Oö¾‹ÞÓrÃWrZî"ïŽø*žÿÙN¦Ôd}›tú|vÅà9y²[gž—C.“H÷0ö‚TÝeëUóAW vOa£‰@q žÀm<§äúÁ×µ÷ ÕàÙôØñ3Ò¤.o<ü|m !ô Y],ÄàRÛÂá¦ñ(¨;Ì8 Àžð5û°X\c”#Åžñ»Ôß>ì»"iá£Ál»m‘Àâ«™¶T¸¸a »L»}ÑËÎ’nuÊÂõ„:[“<ïÕ $^ò^´N·ŸÙUEáŒ$<ÉÝAOâÅ·¨»%oÇ!ú&ƒ÷¼Ë:g\ܬ^ÔÎv¶NâÛçð½Íé0}oUö¼¹gî­àx”…Nda7KƒP}{Pi€ÍàÅÝì‘Vk˜~vµ–«Ïo¼W£ÖÛÃþXë(ç J£‹PÙÿZOÄ}ËVö“)cxÇt]ä_¬C®ìö´ÌÖw@¯óé¾ÇÐi¬U¹ö›S¿DV‡©º¸D~ÊšrÐj¶õƒP(úz9j¸ö%"/·Ò½Æ6^Фã×P„†½êÔÉ×çÚ(ö/ëDþ¶ä™|êáSžâÃ(î¼<)Θ?XªÑ:LŽ‚t¯¨ñ$rêà8´ï5)놤;—ßë=5VÒ–€Rö¨î8OÂC®éU`@î€$%E±ˆMjò]{?BηÝÅË}Ñÿñh‹Éx$Ä#öãC C‰|ø>²VH{uÉ>´Uáå‡çi îH¸Àè¹!Þ¾ŽÆmyõÝULN¨ˆìÕçýÉ~Dóàr 8yGÑX îé«aù Ûèjlu)Ô¹—œ=òU(!„‚ÀïÄÃÀŠ’À˜Ó%ø_¥ðç‘›M)1&⓺—°p‡wÚÄR²`ݾhÏÐî¡V¾a o_´G¨þn_´wÆ=߆Ü<­¥;ë¦=ôM­& ÷ S©AŠtHú’uJ¯!ñ·°*¹ËÕÚêŒd„"Òt£ƒ´TïM«t<€ãŠ5¹Ëqý">¾”ðoÁú¯àfq~p‹òÈGÞ:©º¸ÙÛNø`e?â J=gW+{¥|à5rlêSzu[ÈJå4i„ï뢊™«÷ƒfiÙôÖƒ^WYIèä‹Qê;ZDZIïsÜ·ý¦™‰Â°¥Á¹q£‡Zg¯ Ä#%^“ГNÊ¡V6!õjbªxLW0A6]¹³îDËõ!ЧZZl´Xúúù¨ˆÔäg_¬Àüü—Ð)P€§àCU¢´(IçE|F¼ó½/cWB-ÏI‚6PBYÂY'`äÜo€MŠ!*J’ øñ.ˆ×Oñ ÅÉnU·žüÉ0šßE: Mk ª 2h¿ñÅ$L»¥4zœ7ô®ã‚Ö»9qÂ'+Šz!üŽØ¨ª:)͹%PsÒã¾[§{²àkÙ£«=¡ ÏÁMoÉVꃬÆ+EEdØod‡=ÆI´DÛ—'®¢*} ”®ˆˆ² ”î^=Š;{dV<ÚÆ0#ûó X$’>¼Éj°3$Ó¦«Ç'¤€<› Ôø=ô!huž;ù ÂLÍw “²s=–£ZÆ 0Žó@è‘ìËÓ¤:ômÃ5Õ¯¯’fº9íÃì&ÝÀ\Xc¶I®F{u—â|U·¢Ñ’¼MÔ­Œ97™xC‚™ûepÔ ¤«Ññ§AV»•N©Ë@Å1WR‰H J“ñ§CkŒ( dL9•;…f)y5ÞLvš,߇1¥Rœ_€=`ši”4ƒ=½ÜcÂ_|‹(»“ •–w¾Êb°ÓeHhav'Ñ)pÁÔzéÑ“BPË.À€«õ¥VŠœOPtæôÀ¬ZIl|ÒÜtüZjÄÑu/¯±nÃPܽD˜ŒÔ?äfI9úŽLˆz4ìÆw¸ZH¨3 ßãWÝê Ëq{úÛö‘5„&d˜ùb6½|\]~œÌæÓ«ËhŒïB¼Ù%þ%‹®œ€`–,ˆnñëõ’,çÈZÉì²Øi¯@s)­+¶÷´[S¯ I)—]àQ0ÊM& ÈOø_ÊÉWzÇ j†?˜èÃâp+Å.û¯Vt_·[« ‡[î'z;¾Tß•‡„W“õä‚ò@¾+7pEÏôFÒ nåAîÝÍ–Uõ Ê3mºÜÃ*4Âù’•ÜU­$f­2ûÎbê<ÕÛÜɉ±BÄRÐXß,zŠó-.Œõ|IQ;ÔÚó_ç‹ÉEôi<»T/êœÑWýo–£gs­¬ÛôR<¦Ût?ÝVÔðØhðÕÔH=ÂøÄÆÝ¸Í\KýÚº‹æÎú÷;„å L¨m¢akcDûQ.ùÖ†.‹N¨qÎ8)‚úJß*I|µxOEdF½ç•_ÂÙYzÇŸC×] tjÒÅ·_w5¬1 âÇîe–Dñšb»\VÉ@Q.“p;±€+r¿— ñAm1~?f7—T|NwCP¡æ?O¯GzØ;¤se9Jï·8OÁÆlÑÛ´âs(H!!…Œ´ÏŽN'?ݼ?™EÓ÷—W³I4™Í®Ôç-€™8ç UäXL/&W7‹Ñk”‘ËSxÆ„ÞÊ8M¡e p{’çdyÀ¹>ìÏÃÖfï>®¤(†R£ÕÇñþïCIÑàC£*h±!ö[Š%üŠýÅðGš`´Z)¬êï´‚c Và=o\.yëÿðÀ(w«ÉüÝÆPìõ£U@…RT\`ì!¥G@|ò¤Pߎb,¾¢.‰d±{àFd¡ùCëb¶5I·¤#F0¬40pÂkµY´›]Z_¤$Væ Ýþx ²ãËávÄú¥.ûŸ+¼„ÌÛ঺œŽ`(¨úÊ>$% –ÐVÁHí>÷¤dªž³%êÚ`cL­¿÷Îù[R‘šžÄË—„¬QË2¢œ8í,ÂéŸÓÛ.ÕÙ†åY‡~Ý— Ù¶EhE.¦|²w*$¶¹,¼¼Tòti¾0ްk—dqáÄ%CŠHRjwxëDÔgBr‘˜¯Kô$’ Ýš}—ì¾o;mq©Pëzr|¯ºeu¬©áªF,Mœéêk“Ê‘¯dZû´KZï{^=µ’¸{–’¢§üv‹û¿€1ômT$å2°æœþqû­Rºð#Þ É“CÜâ«Î »|\˜•Ÿkð}~؃‹m1ßÒ×}¬nÒ,Їm÷…\tÒ»Qÿ-Ý<à¢k€ÝܤNPª‰œ|O¼3.hñ:]™ñO+{YÞ5 ‚Vn°x›öÌo©Ò.™†£—·]kç=¦TìÜ4R7t0ªÔª>Wc¿Px¡ÓŒ~ª¥Š"ЄÌàwŠž IÕÎ{v z•F¼. !À„† mQÚp1E›gûýúø¬oßÂPØšVƒõÁ¢½òâ56Ë1dÄË»âÂ×èPW¸ÑÊaÎú.¥v´†ÌÍíŠ|Ýe¹ÙùÆ¥7|ô»<ä>G-*H³kŽ ®òç$ÙÑ.‡S±ˆï`ƒêâ§(Sçû øzÏí\E6ˆ­¹]¶Yq§võ}³v\©÷Ùónø ÀÃJŠhI¶°½áç[ô† &¥Ã¥Üw¨»Ÿ+ v?Ä.”6ë BÿeÁ ‹¶êBÂZÌÆ—ó³«ÙE4½ü8>ŸžFïgW7×Ñɇ1,€®®Ô2h.œ'ªÿTãm\ÎôÜxCm59Dõœ‚Èþo}—ÚW_i/îܲm4W3!]¥Oßt¿‚ÈÖ¤ÔŒíðˆ}êzÊvÀôÜP5ÛA§_uôÖÉ.Ôb\v=a¼ÿþ×ÿ½¡:±û,ò7ü÷¿þ”/Àó¾ïJKYSB­f­å°…â?6»NýK h‡¢=^¯³'²3<᪄m¾tPöO”å"¡ï>$W°Ö¾â…Ç A¹ÁŸà÷œÇOz„zØîÓ×ðò?li¯»oìê‰á´ù­»_Îàç÷Åàúuœ¹0t»J mºšsá¦IÕũť‘Ips•ã1zžG„A%A&² g &äé7‚1žš™ý¾pâjÚ‘—ÔJWÔJï#¹0Ãm‰ ¹ ×:‹Wv—)iÎïãuü||ÏIvÏ)ŸN&ÀDŃã¤ÊËA®¤ÇÖÿ˜®mäM[1V«Þ“àSr ኣCžöï[µ[“§Vš¯û÷ ZG×VP¨Þ¦BÅ>ÁÊë2ªí; Q@¡ m ›ù$º_ùbr¹ÏK.r0Ò û¸Ç)}zˆa4O9Ãaè9ak4þ þû°‹½ 4 >€oóDßkøý#²ƒë^OnPq\ñbãŠGqhÖÙÿEÊ´ÿœä·uK ¿çóïÔ]4“Êôxsüæ…Þ!ó1ײ¤°D¶;úí°ÙaLu1àBÐI[ŸÉ”pœ\;ÁgœcÐ+.¸ºðS:m¬ÒË“Ð>Csǿŗ¢VÈ»•VÔxKxÀŒW„úZ¯”ÁàÚïè.OÕ%¼O‚2Pâdü]@ò6¼ÝAp”‹—©"g‡…ÛûŽöµ3B2kÔ— ý“>Né¥7Ǥ§(TâÚ­“çHõô1”Kw‡jB¯.òœgG5v³Ë¥gÄ«d§ çUÔJÅw£æÙмËYƦb¿T]—@}ÐWuƒW¶TÕrBEçßav¼t{ÈEpš€ï-)ŸqY…RwŒ©Tò(“gBg .{=Õ*{SdTÔÕ¨õ![6„?ÛF¼ @›Ÿ£¢Š~[¬±Õq÷}… öÓütÔî`ÚˆëwGuŸþJR…Q[ݸFÊ.)SFõ>kØ¥Óà¼^ð‘^QÆÀ†sØÁ‡!ß"$¹€é×;ö?ýÂ8ê{^­²§f–á»Á R©Õ’¶W`ªXöò²¾§¸×&+ØUá¨émqdüú¦ÙS°¶^Š3šÓ ìÂ*vù_¾ë cr ªÿ””Åœ }hÃI®ìùÆü-À¾¯‡>6ê2n#ðNŸƒ17J)r¿¦ÒX¶ãƒ£ÂŸy¶…¾:æ‘&<Ú;êªG–M[ù<«¬Á"Ý‘I.ë.–(ë€b„ûþí‡[>$ËÏ›¬öç‘”ì׸=#^ª7@t®§kzwG®ö­» íÜå­ øœê–Qã4µܙϪ³DU’óc x4Œv|¢ÕZéOuŽþ^ùA -\yá =®ô¬"Š¥TM¦X²Ò˜ÂH\ÃÔN.Û¡jc;gµÈc0¶@C¤Û¶Î“ת5É”E§n<ºL„6REé.^­ò®Œ,NĬJ‡ü,\–¬ýŒD¿ìüëNA’©‰qL=”zf¨<ñ¨ÞÁ¯•¯ü‰ƒëÖrshÂß~*,'EîñǨ>j« ž…V‡%N4ÉÙÿjB-É;ßci5­/·2ØëÐè„Ì|»;ìß|¼†„üjx‹¹Ëçá¶} ¯öWÕ—Ñjå@)I˜:é'5¬M1ùKëöÜʤÅåÂ/‰ºJe-wÔV¬#™YÇ…‰Zí…ê†h°ôôpFÅö¶+>‘C߸F‘?¦M®³]ºl'uÅKÃ&3¾ÓEˆ[âèÚùÜ;5ÿEçaX 1dª÷/í7Z Ñuàu<‹œÏ¬HOæwåã³¼¦ßÔMìÚŸ‚ZÌ’œuE,iJÙ:’ĸ}’M F‡Œ =^±ŒtQæôĪK$|leï`t’fH;µ¹>ÞþnŽxð»V]V p¸±w²ßp£Ù_£µJH¥ýíÑãÁz쬚Øe3ÕÌy=ä*³‘¨î¾¿×ªÉCB©¾ž“-¤YHޤ¤Œ_¬j}f~I¶¼Anµ/`ZnµM|,MØ?ÑkçV/ÕƒT‡‡l4’%°ü»„µNa˜PƒF<–çCþå>еU­û‘_¤«¯‚jôr÷RÝ—ä!7«N]î6ÚhɆg©@€àû3¨Íòu³¡YÝ)œnð ¼B¼KýÆòANäÉLùåÚXã•*¨%çSÂ5:„\Îí-Øÿm×¶Û¶DßýÒ‡ȶi iQ4pl65êÈäKóDÈ]•EW”l(EþF¯_ÒÛ^È¥¸¤’—Ä"93‡\iw¹;sþ¬M^)t¾AÊŽ`®ŠWRBañ©ÓYÜqY±ô¸ΧL"#j&‘È­zÉ"¯&>üàß¡£;té,yÐðâ‰7GY¼Sûî´+,ÔðÄ¡h¡¾©¡ñ1ØÐ”þP®Ì{jºe¾nïø¤‹@®§ÀòÉoÉ ¤Ótå²7->ÁY6úçgzc>ã >LÖ‰$y¦k/˜8þöïÂãÝéà²abÁNå£ï·7C9'Þ;Ãz«'TPoJ÷‘6|[nX=̨ÑSÐ&Ϛܜqãà•òîªÿôÁÚl_.³@Œf‚»:`1ÕP•e„:=°å•6‹Aé{8&kyà‹-%ÔËÊBfu+zÑS*½TäÅÈQâYËHCê¦Jœ*›Þ(Fnj–ßÁ1aUêÛ¸³h ³ø»gW4$¤ób=(.#ö~gÙéÆyœô‹—(¸Ä¾×˜GSÍ §ÍÏÙ¸À}V=“x “>›˜ÈXPå÷S®Þrs†A@ºëQ‰Çãü¶XzëY°ÄÄ+Ý3¢“ÇþŸ:GƒÌ%Îz&VXìF‰›ËÃñÉáÛÓ4ûpzñîd4ÉÒ|z„³ÕÔ°^vOØÑ‚Ããß²ê'2Z´¦ã{&ì¶ßgñÃÅ×( «XÃñfÔ-‚XÇÖ|ajQFl€‰"vŽ“@l‚ò—»º”íÚ°ÑÒd˜äu?)ÄVÄ”òbXaû*&v܉/¸Ç½ø‰]wcÃöWR¬ÝgT¶Îö’¬ß×WR˜]²ƒ!áØÞ¼r"b\î’’Ý­ÛH‹V¬@’Ó@û¤(ÌnYv+ûÖñx̆"GEoéDaO›T¬ìøh»„°ÆPpâ²}Ìzx”;ì¥4^C­£X9Ähr©èmó\#j§4V½ÛGKç”ÌJ$R¼Âw 7©p.Ü®¦w7œ àîÔývĸõô²p@¬+{ H8 ´wEÞcô¾#Dj÷Cš2µÕŽwÊ ø9TlýQ€Ÿ›Sf»>mBÍ” C£ZñïÌ•nç-ìxöƒ6mÚÞO·¡N+è<×AÅZã¡ ‰µ~¸ÙTà£À ¥‹(›OW3R„Ý,ͯT¸ÄQSÙÈ‘j3:®û¢Ë÷$Åç}=ö,×ÅM€Ë0¢ï!ÏÀàlí1$­8ž]¹*7 Ö_ýÛrL×Ö‚Xù"…A R<–8†ÉôØèÍשÎððÂætrƒÀŠq"žÒ¿iƒ@3óOú½ß!¢k—Ól &s¸‹ÉóΰøXlóîÑ• }K‚ð¢;•q:9ßÙ³ÀP¸YêŸô°fÛ&D}Fÿ€m£ÒcËç{9GÃflëÉ} VôÚÚì¾T¯¦-¹Fq$~6ºŠÛmÇãy¸ÜS°iúçz¬Ì±<Äv <ï#Á1=f^¾¯ã;ŸCp º¦£ V¸Ì'' w¾Üê´žÓoSÊÔñ€‡û ö¸Ý²ÜŒ‹o…įÍÐq‘?ž8ÉxjîÔ}wÜ nËÅê=S­»óáÉf—kÚLç:Ø¡eßû‰¹Ì]-@„ÈýCYí£òæ AÿÕÔx¼<›¶{IK‚9݆„%/·!YÉÇi&.eßMÿv„Î#—¤=o·ûñà¨ÁPÖ~Üá«ÛiÔεYÔІÊž /RÙè‰=ñ gð^öMòîâäŽXV¯öhH´ úÏfS^åº)_s>]{…‚C$[À‰pÜ:ÙJÓe£ÄWøåJ;%;À<¦}7£¿‡¶>Ûu™AYÞõj J¤½Ý‘Èv]* )2öWˆn^n³Þ¥ó䯿’¿ÿ~“.ªòy2—饯q_.˜ÔŒw²u!וּl„Ši̶„²/÷.ÂÅìeòqÔ Ü]Aµe®ƒ7s'…·-'ÈJ@#PKÀ^ŒËrf"k‡GYr¬g3[¯Žo"®ð@¢c•ÀTø8/³Gx–ȶf„¥[lV K–ŽôXM·Ù5ãþ‘¯¬¨²y]碫K…1ÄPZ•c(Š¡®'÷1TQ)ˆa*øÒ„.Õ?Ñù6[–À—œ/ú!Ùªe©Èîj¾ÕÞ—ÿýó/¾ª% ;mØ» Ì5ÒWñæòSýÕÁ­ä^i˜N=K4žbIt´Å´¹¨0£ý(ô£Ø‘›¹:e‡“£#СŸ_|0Ú3nYUèëV=ùª^ZU¯zÚá!³‘à‚qD ”cÏb¨/_¼x=(œrìaÚ„øüÿMÆ/Ý*£ä»„iZòÙHê-6<Ò½é‰L‰ »‘pDª©-@ÔæG´ÕM½c’)|ao02½þ¶/¦›E¶Y©û¹e¹Np©g„gÒñ[8õ´]€êEh˜ë$T˜Ö¬FÛÆ5–dØ^Ö,ÛÀŽ™üX[ËÈðü •ấ‰«ÇFOi˜.\/ªo_ö¼í‰ÌÎO'É·_¿4lC8ŠýH Iœ;ôÓžÃ9jäQÉöá|Á4Æj¾YkxË ¸vô-o–½{=t¤Ä‘GŠ]MÇÙä—‹ó㳫Qöáìô4;:»‡ÃÏr}Ÿ#<9 †?NO?bx¬fAªîf¦—;Šã_îú'377 ͉{lL!]kÏqÚ5ã[ ìêê` ÛtK Ô¶óë·H–d]ª<óÒéûŠŠ¢(@¯B¾²x'r˵Y³­Y•çŸw•L­PrõÓÊò¢Ì™åæÃ_þºŠ£×>ÜZMÁo™MBÊJaY.þÏI,.á7…‘ñ«rK¢ˆÔ¥In B¤ªÀon ú;¥ fiLmh„\KP:å7T‰\•½VU¹=S(Bf`4 þª„¤àsFëœË½%•\KPGÚ )XIƒŸHpZ{–¥&ö˜f2S‰Á_yjé ª[ÔÞ¥œFy‡_4ŠªdF!¶#`xNl.Ï 6—É­±¨nÚX°­=•QZ¶'Íž¦"Y£6'UÛªW£Hƒ jASI^R8•T4FYÒU¥Á{¦*ãD1Ì8*¥0¨,•tÔ4Oz*rìÙçjËrÎiî-…™Çààë´Ò:L›·•!y’Ÿè$Í '°\¼Ei7AZ %r<6 É nÊà·QeÀ ´GYük!ZV*çLâ )Ës¶Í E@Ü ­”â]eàÂ1Oâ°uË¥@“@!“ýèNF<(ºpçÅNxÑ ,PôëT!Ž6žÿCq›ãM]Ýb|b[nèÍr~âzýM½qL¯wЫ±Ù\ªþ“0y&óÎ%¿AE˜ªx׳9–³Nwˆ'Iˆ ìÎÁ¡[4^se9<õT†S‡tµs¥ÞncÖ%v·‘ËÊncš7QÞÎ$)\Ÿl£8ºq6 œ§˜uÂÓŒn›È}|ëw  º1¶×;Ð\ѧ³ï“‹šIQÉù¡ >ìJÌxŠz¸ê‚®DLd¯2ú¨k!£™í¡Œ.¨Q'[sµßC”ŽžÀX̵2K@&×îœJÖߊC‘]q ªò;Ó¢Ýøœ!KfÅ;wÜôâ˜Îó±@¦ózýRÿ=q¢ 'gVÀXêŸÎËOJe´!Do5~}—eˆ¹'`%kŒØK"üÞm 9÷B~<•§IŒG?@XJÓ”yPDœ€wg¼)ðŒÔ”@0$ñn­ükã HD!+<á‘kÙÍ>†ËHð;Ûñ'wm°…&ChùpÙešÊú\׬²êrÙk.zÍ}Wn³<§3aBk×H¸êQ,Ï×̸]7ÜŠ CK™LXë—ðÄ-,AAwhÊÐðî%Ý.žÚdNs“âÚß…?'>”s€•aÚ|©w4˜µûEůÝጛ°&JáÈšó¤¿åB+ýæ’ëÿÂJ!±L¶„L\ô H0ðrçÞÍ­lcº4òe— Õ€ÆtOBÎäèjè`ÚZ„ƒOCŠ×~KwöæÒUZú z-nyý=€"ôYé0lY"NH]Qëfõq‰wò‹——%Wpé˜ø>¡¶‰ã4J’ˆ˜#~CŽËÌÑÛÜ‚Êß9I»ÀqW— ^eáäÌNé­©+zà ™>ìJÌäaùœ!îJвˆr8=ÓKŠ·'l®3âÍa›ç¢¨¬ó›æÍÄv@+kDÈæú“[!U7ñ69Õw‹ Ÿßò%¶¹]Þµ­›eV?N¤»*¯]¼U­ªù¡"«#Ñ$îÃ= ë¦oïšF\÷Û8iÓgÓæ‰P¢I¡~%:õ¿ð “¼Iu”I~•ùòÑ(ÁßrëgÆÇ –º#7àbc{à±÷ñq®`Ø›ý íÊsçœßz«c¡»†°²î䫟>!™5)Siã´Vw_Ÿ#aúØ®/´{±ý.jÇ—ËË=j?>뤟ÚGuØ7]ŒÛ2ŒÒƒûéÚRxôaõàÿˆRX.ÔC€D™›¼q†TÏór‘cÜäcÕsYˆÊ[F?¢ËZhN»0l,~ú'ô‚ s6ZRñ°å2'´FD—Ju±SÕKM´ctQðï‡Õ“®?¼aó3ŒË7Ðè¿t¸‡/škcž;¥Ç™20ó‰^혺KûIûÒã«ûÍcüø!g>ù§‘KÇÔÄœƒ”|µi‘‘»—«]í<´ÊAˆÝ+Í1^öÁ“@^CŠÂ!§Q‹ò§™F•a:¹2¾ÁGd4¨fpƒÃMñb®¨cœów˜›YÿZ©ãê“CÔ1@áv¢æª^oU™ÈEH×Π<ÇÍ‹+’,¸…îI¨N¯v­üY£Õ×3„†0s¹‡W¼¶¨Á±£Q.?{†5U¸s?×j/ü½àÕ/I7üc%cSmMê¾Í¸0SÄ‘ûE ñ¦È-Kߦâ³~  ~ à¨ý"ÃXW} /£N;Ït@hŒ^?”õ³Ø‡ßsµiÈ5K×Nß5áì*ý‘áL§‡¾Lÿ 0þÝW¶ç‘9 ›Ëo¤5Û¾w·W âW½jsðåÞ&mÁóÃ{a™N6½ú´üç <êÏA“ íBzä.è5UZ9Çá}àR4æ£/ßç½"¼¬¾ X­¹M©oõƒèr®pZæÿLä.¯â|BÍo^ä®û¹•Î/ÿîÑ]ÿÜ1‚±>TÆBï5AFCi²>Á·ÙŸ¦î<4././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.444556 ansible-core-2.12.0/docs/docsite/known_good_reqs.txt0000644000000000000000000000106300000000000022417 0ustar00rootroot00000000000000# pip packages required to build docsite # tested June 9 2021 antsibull # version floats free, since we control features and releases docutils==0.16 # check unordered lists when testing more recent docutils versions # see https://github.com/readthedocs/sphinx_rtd_theme/issues/1115 jinja2==3.0.1 Pygments==2.9.0 PyYAML==5.4.1 resolvelib==0.5.4 rstcheck==3.3.1 sphinx==4.0.2 sphinx-notfound-page==0.7.1 # must be >= 0.6 sphinx-intl==2.0.1 sphinx-ansible-theme===0.7.0 straight.plugin==1.5.0 # Needed for hacking/build-ansible.py which is the backend build script ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.444556 ansible-core-2.12.0/docs/docsite/modules.js0000644000000000000000000000013200000000000020462 0ustar00rootroot00000000000000function AnsibleModules($scope) { $scope.modules = []; $scope.orderProp = "module"; }././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.444556 ansible-core-2.12.0/docs/docsite/python2.inv0000644000000000000000000024660500000000000020616 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Python # Version: 2.7 # The remainder of this file is compressed using zlib. xÚ¼½]wã8–®y?¿¢×š¹=ꮨš:uæN–åuÊ’K’#2ë† "!‰e’`¤må¯$%J@ì F¯•¶IÓ”gxIL(¸¡$úQÄ%E{}Q@…aÁ¯É DWôHlhB‰¾Y¨mü'•}bEJ ñÛÉÒzÛBj]ŸK:- r6Ô ñšÈ×*˜nƒín³X}ÕoV%ÝP}‡`s5s"û0βàÐ*ã‚×)&ZWYÅô‡5÷¶Õ‚ŒÃÔߟ—³)6ô€‹nšÇ -žrì-?é;%’ÐOS©^j 1¥™5¿êCgA-ìeßÚP9¥A‡V¬cxf)9NyMƒaQb4¬í4îIIwqjéù"á¢.lœ1[àÇén®¾­_7>üób¶Yoç³õêÑOfõº›û( Ã Š™øC̹åßHù /Iš#xüÇéHòy½Ú}C²̧˜Üß-ž½JÏ…÷+=dé¹(`€©¹èZ{)¦ S6iRp¯4†ŠTQܾB0ÊÏ"¦DKÉ÷qÞ[ª91¾WSšgZžX„âÅ,Ä0ÿDŸiº×nPt€$ÏÞŠ•~˜Å÷ËgÒíKÁ>Ϧ©–±4‹{s3@ %Ä=s‚8ã $?œ‹b¿(i 'ÌŸb œ(¨@Ÿì“„ Iö=Cœ?ÓâH¡îÕ·úó €ƒ•ß•aíÏà| Î-27Lßq Î5ƒWƒË×<2uFzà;I*ê˜Óbò¸x8††Ìã§8¡™á;‡žùëþ€ª”¿ḟõŒ™VÇ+F^7j®ý‚,SBQåvÅ2L,Ða5÷ò6ð)2 o"j*Oâ0.1ìËù¯o`N.¿f‰91,Ëñw’ÓðgtÉ {²¸4S»SAIàä?3ÃGýzð ¦Ï’ð©0T6죘x1u %à‚ËD^Òwšxð+ö˜V$Ì ¢ýcZ}³È¶­3Seæá%ÉB :1pL;èíȆ€)·c‹Ì0/г^J©9Ñr­?þªwÏMçÕ Î·ò¼ePˆ×ŒÇÇŒFÒ#ùÿ3áoH„ší]{D=24{ÒR6F` Kt…pcœšióKë\w®QãŽyAÅ¿íë®ÐÇ„y‚û(h®£ºüÍyõ³‡šŠºŸ%­Ç±€P…Õ¸7†¯ç\Ö"}K—ˆ7}·ÍˆN'n¸ÑÞˆ0ÆÖæÞØŠ ¹9w±›?Ó™ybÞe&¶IBÒKôm´€ÄÝPð ®7bÔb0c ¶ð´Ý‚j O(Ó²É9¥ª¦¥Õ¸¡¾‰7}·Ö•S#bêê¬À4‹Ö"§ û³(}<µt´F¦;¨AƒÞ°i8å$†-Ö Œ¹õµ¸7·¾zȾ’m€Éß"l -`ã?eZ ×,6ŸµR¨:p"pxIÔ5¨=—Ï$ÏEâÕGÜLtÝ"“4äùs^íës B#­ÏPUšËGÀ\aÓÚž²páÌEÖJnþ·Òßÿž‘ÒOã±+e:|`…–mùa[¯45‰¬yϽ+øIís!Ñ’´Û^‡´&,2¢!ð! W [ÚˆlOõº&.ê“¿L‹Ãóu<ÆP€¦Me{¢u¯vÒ÷› s˜Ü?“$Ñïä7†É‘ɹ<Ó ôÁl>Í@ˆ®ðɦ>„ð=¦0+”N–ÇÚ† †™cìÀrŽýðúô4ß`àÚ^Ì c݃ÒW–nW½×3&«8Vf`ÁÓÂv,áA0™ ³åt»EpO¯«Ù®¶Ì E·óå3VV#±¥ÉˆhÆ¡Z×ê ‹üTºÈd9”ô¦Zàg Nš+«[m|ˆkhs`ŒóM (÷…ÄÊvàÄN®à”©D› ]ñÔ¸®¿óBæI7Ä$Û!£…Zps™žÔt0Ýs–Túå}ÝgÄ‹"(‘ Û*’…}m™6éàþ“³{ŒßãˆÂ¡”ASPmǃ3¬@q‘½H Jð¢Ñ‚ô ­wt—üJû\%eœ'g½.pÜ û HtCSg÷H«mµ/ C¯2LïŠÊ«˜üÎàQŽè'˜GïÝðmÉ™Vm&çÅ{E¤Œß¡9®/ŒÇ0Õ[oPYSvìÁ° Óaë B­·ÁôPÒâ‰úmÞgÞj[% ÂÃ8HÉzÓo²¢ñÞÞÙ xPf"+f²%ƒ¢‘ú<”LâF”FüHK]‡Ã\g¹´AMHuxQo¬j€ÊŽ2"‹á>ž!|}GÅQûaÙ´ŽQ»žldõ~—a}‡Ê ú£TÐC˜•`¬¬'9î4gy"…yKpºå  -g}ÓU®vÞ/¸\ÛÅ{®VU±¸¼4l²g3€Ø˜QñhZ1á5›+sñ›Zl ì1`‹ª]Ò§<ÍôÍ-°,͉þ¨†…2¬å«rRš+IM˲€û%)ó;kúöi£bh!+Ú‹6f¦T<†¼Êû;µ¯œé¬ˆ÷]¿ws5ÉDåqò7ùšaYšQ1øJKDykà-ö PE\™Ñ@´5– ‹vß%…ÆïÛ|*-£¦jáØm´¢˜`±ZìÀ áˆ,h(Tö„@VLžèI”åx íÝäÙ#D,1C0Dòöd4¤Ö["¬ œ!óÖ ûvÜ@†Vx ÍmðÈ ã£Í7 üÈ}¡rh}ÛÄá 7öèòVH kÖ· ôÕКvëØp´šJPtVÃY61Z¨ïÓ ¬óP7’ÊËeêþ0íuÑÛÒó@ƒD}sÁ)Œ%cûØi+XN‹R{EŸÉöó¦Ê‚iv†åB‚˜»Á€IÕa$^É¢ÎÏY8ÿ ðÉ)ÄÍèë™on`òʇ`6].{äzÑ©ÂÏŸÍ_šÃ¢nÄf¾{ݸ:‡Ê/«¹£S×pÈɦ~<\ÊW׿2a'Œ%ÂŒ ,6’¶E++dT˜!óÊ‚1®)!CctÿB€™´Å¤Ù}ÓPÈhB:·Â•¡$‹?Ln'e´[G\«5$Ç¡<Ø·ûßàô¾>¨‚9–ŒÃf7%œIxÂ’jã7lÆò²ÁÎF_œÔfy0ŃæXºöà@v8 ýE¦Õ¡ùŽŠ ëMÏ8ç¥ÈRRïÞB³ c3æTï…ƒq½Åòàˆ+ òk'ºiŠKd#,AÀÁ¤[8%Ÿø†¢&8’m?Ö#Xd1lök!@5êÁpÈlɛͧp²¨7“"À8<ùô8Ü£qá> ÇzÚì«F6¦eAZ{¿pøƒ’·¤žNàapwg™3iǦC3&$<³f å 5ÇF¦¦íÓvÌ4+ÑCߢ¤4\±c€Ûàë â^îÛ/ ;„ Ì3‹âC¬?Ì`@äq·3À½nÓsÙì6®¿4¨+ÿ‚YA 7 ™>ñiD¾Úo „*Eþ"ð+¢õ:"8ì:z½Î¶$…op¶c¤Ív¤8mñqª¿Yy¿®ˆ_ñë)Eþ"èâw§ƒÎª;1²j;FÚlGŠ“GñÓ/âTõK-±+HÆQN=Ë캰õuÐå­/…Ξ¾6‡î”¶#¥Óv¼Èy?uìt7Õ¡¶B(¹×Õb¶~œÃQ>ÝÎ óWéZ’HIŽæ›&h~IÊ8û ~˜mÑð†|´íINÑB¯»§¿ü݇þëúxØ|FÍôL¸qDe £ÆYÑ0eœÙÑ¡/JvÚ|îs€3mTÂŒ{$@ÃÞt+eÞÞ䀩æ É6’®›$,T}R?T Râ¾åBʨvˇõŒ†jù|Xÿÿ·êïû?ÒÝ‘8U&<ÁÉv½Ob;1Í—­û豈Ù˼Ò%àsø…C¯úAÉ[Aæ©ÜGíÀB½ìóŒC7ôeõ]?ü÷|¶ƒ£¶…<+¹¢¸hÊ;Ä!‘,Hž›Ïý›¬È/4“ ô&;›ý½£Á´œÆn»Ôƒ‡ù×Å*˜.—ëÁîÛF”³m¯Œi¼xX®g¿€*N"uû—ÖVUqwx"˜-çSíM>Ò ¬œG÷Î[¨e€nuâ–šç³Íü ÐùêžâZ?]¯8ê6S:³|ÁšL»kÌ…ÁÍõ ›éì7ç¶ê}]aaíôm<=¸Ø1ß_Ñ7´çeÍPïØlÐ à·jÐxW’  Š†›ŸzÕ±2z¹ÏÙÌ}aº@Ìü¬ô–é¯RW÷‡‚ýI³^MïWYùK²vžHQ7‹"¢¡ƒ¥Õ8ûYÅÅùÞ¥¶€Ëž$ÎéQõºŽÎëãÎ)ÉózÅtø£DMÔwá€ÖDžÒœ#ÒEB›Lï1Kg×Ò (UÅH6?ÿõÕÈÿñ_ÿ‘Äû‚gQ kGõ‹ÿ%]Ê{ ¿ív/[Zˆ(h)yÐûT–9WN&ퟙ€¼üF²(©…ë0þbÕuœD,xYowÚ²h’ój‘¬Ó¹> ë·½´k o(Ïq%…ºÆÏž0ÐW ¤~ÌßÅÀœ{à%†M1KEÿ ­˜,™†¡ܱ¯€ó¼ O¬Êˆ±¡æ¿$?Å!Êû2AP1ÃUŒÉC‹‰é%ÇCtÙÇ•ú§¦‹D`˜@>a*ÙK"Z AT8.¾ÑÓ:/ê_<Ðüˆ™bòrf…1·$bTsBƒ²ÿV×H bT”Æ»g"‹Ã3bò(÷Z£à¬Bb¨X&%¦Ð­·S…mWÿù¸>DŠRŠ©eÿŒPüBQ¬âðMô<Xv‡k>6¨º((V¸z¼ ŸËMäfå‹‚f†ÕÕè¦lÅ Ãí0Ó‰ý,çQŒ)4ƒJÔ?F¥Zò™‰æ"dT LÖ*¥¶æ¯ôv\D Tt_l­1—×@ï4úž@²†}«}„í£¹É·Q˜äÝÒ"& ¸únc¹_Ž¥¤(Ý©Çù÷ÅL¿vìïg~dáïÏËÍË̲›!bágšyhØÏp§1Ͼ.êGÃÛ´ê0Y™õA³³GÈU)ãèkdÕ +ÿþ”q™ø{ô+rå¾¥õë²ÕäË(yiGdàœð³íË=ï£ú}¯VvØÉ”¿ÉïÎO¬XçÔ´Aª'fVÙ’wê£rù,x샑‡ÄµWF üAùŠÍä¾ «òµ¹k‰?_w6cpe)AH‡çü6ÿãÇzóðbµžn¾ܯN—0íínº[ÌÜÝŸnÜ= áz«íR²þ‚«r?y¤ûê¸-Mýl½2ÖKKÈM¼ò®MVL³hרápõNy–>Z—@MäN Å8„Ùúu{æ”æäÇóôÄ Ù' Ÿ’8{™Y/Þ-ji9œ+/Šú Èž‹1ÈÉÑ!þCnÆÑ£RñZíÕ飮ääV¤·æNÃË}–î:‡¤â'›Ew)—2—W“úÉdb5‚Œêö,:¡SoP fñt®Æù†“Å„ª¡½¦È\ØÉtnþø×Ó0Á뀻L, “„ÐÓõë&\Ný~»ìì³y×&¥˜:±°—ˆÊ‚·Ó"úŠ• ¹{@ŽrëiÁ0ó>“¼¹˜*i±úåi9ýº ¦Û¹²u}ßaÞQ»ƒfßæ³ß$µaó§éërb¾Î@οM¿Ï #ªA ãÕ×ùnömºi®ôã‹ÕËr:›¯_Á]ì0>n³o³õóËt3‡ÃÛù?_ç«™ 7þ1Ÿþ¶™?c:Ÿ¾€‹§´®þœX¬¾Cÿ¬h¥oKÊ7½ª¦ÜOæi^žMã¿x%äÍ `Ø%p÷-™–x)b&ú‹3ŒB¸žÐ6ú½fÚ*ÞW c:XaG1s#1˜ü7‹3(cÚøfGüi\µ@%áoAÔt[Càöu5}}\¬çßµu‚W©¢˜õªE» ¿k—¬zdã@®iYéÉ͇v¨£û–ß×´‹½ïIÔRlqåÈb>è^er}0¼¯K¯’•Ká¢cÓ€‘äåmx¿LŸ¶f¶•a\cŽà“›±±!Ÿ÷gÖÖ-š}¥ `‹¦É˜r»,g3™8’O=Æ\Lu‚ˤùÂ35óhíDýzÏÊ‚ñ¼>¿p‰'ÿñ[Í6åtm\»F/”fñI}” (Oå'–DöŠ:†B ö=ù/ðÊ<÷ý5õÊæÏ˜UÊîÏ/«M6oG©H,|£¥­{PLC‡V‡l*^OÏAhrˆ³¸^ÈìÇ%h±ÜŒä´¬r=K̓LnÃeµØn-´H'ç‘4“„}ˆ>½âtÈ2;LØr&*$Kž}Ø”sÂñÔÚ²FSÀ(¹ÑÃ'¿\°j ÁæåˆAlMM«égÐNký‹ r'ÍÏÓw:FÞ4óëÎ(œâ˜¯ÑÜdžó´(5ó† Ü©*#ö‘!¥ž”fê¹õF˜`§ºù‹‰ÿãÃÙ·Â=’’È«5G!<±â-ÎŽÏñç"ó“ØÍ^¼:ÞFæõÑOf[t¤´ñÑî$Ídx¦îEd´Ðø¦°7ŸÅŸmöª³,£v\,Öúqºz©[ m¨IïyxCk1Ë®DZ {.‡¥vñ§6šeüÙ‹¡p+Ú+1’Ôi½ ·UY²ì}:¹žhøÖš0vÍÒ=s–®wþ;¹}Œ ç@·[šˆé¨k@.@}¶Ã•Ù”:¹Ê£Ÿ°0Ib.Òçìì¨ß)tøÍ9ÝòZÉu–¸y)ºÇP9¿ì¶v.½b%}`ìÍ x¦†];=— ÙÚº\{aÐù ÉÚónîY^åÎêu qsZF°vbç\Lš¶mØkõf×›ÇÎå¯rø¿Ë”äQ¬Ÿ¦ „¦/£ƒ 2§TEË)~ti¯À¸4n§¢¥ãÔt1Ô\› °É¦¶Û,·Ý ¼©ëŽõ½iý®ß£6Ïç¿Ïæ/Òj¥fËÐ Û…ä~‡éÃrav¡é¼Ñ·?&ç?6‹4T?âHäѤ|›„r*•%ζ/ÌA(-F¨¨·z½ŠQãcê?|Ëì‘xÙËð–šÈÄÀ?ÖŽ¤nñn!‚+7Ív½÷À'í) ÝôÕ¢÷ÞhœÞšV’štqwÏ."ŽcP àÖÜä¹*e"_UÜB­£ÑŸÜÆc8?{ƒ`_ÅIgA ¥:ï5l$7ß×äp= ‚C%·ü}j_k<ª¯ ®IÝi¸ökN×7y¢ÝèWýRã“hYˆJâ›hô@ yßîÊjGy×+ž°|ÄYAõ¥²y×Yó|&ç”y1MJÜà7\m|o£>…p\5ç[pþ EUËðóbýüÞλAhÌemßÐCR×D„|ž Q¥H íùg.úåyö,“ۥ릊CužäÁDÀ¿ý6ÿ£Þc<ß›õz§ià×Íf¾Ú³õêiñ¿nov»Á¬‚Çén —ëÙtÏ7pÐç¿Ïg¯»9[­w‹'ppÿù:ßü|Ÿ._Ánš=€f;ßá<û±þñ÷¿ý‚È‘ýûß0¨˜Ñ€‚ºd$B4IÒèƒwZ/gY'ë¡vv4D>ÊAÏ …òx3-š‚þŒK(üÏŠgy;"‘ëÕÁ*TWy%áy¼™ «éTê%õ(Ï£ ááWÑ>.¦+¿\ìvË9RbþûËtõlÿŸ^E?³™oׯٽͷ³Íâe·Þ@u ½dž_—»"Ì«5¬—Ì%ŠËÛè0x3ÿçëb3C˜-J YiÊQé¶´DU¹–s¯pdj'fâyoR&ŸMfÏ´žÙßOÍ/È[Ñìñj¯\Ÿ{34FºÝÎèF‘½˜ï‘°l\êSÁHåËiQžÝ8î>?'4oÏžöRZ½ê'vý¸Åt¡é€¢Ê@LÉL÷Ô6ï4!«ŸïHò¶cÚ’Ð%ûȤ¶¡ÏÐÔh‡ßR1Õå¯^†Ó&‰|£g'Søb.Ö9EÏ95æŸ|§Ë?õ|:o@iòïJv‘‡ëm?ÎŒ¼Š™1gpLÝàÜås&åÜ,2.*½Hé% `™€ÓPBòp}œgÍάèJZÃÄÎÌ’å&p³zé4„ÎÔzÿo1ÌÜæ4Œ±þ[±™-¢8†òŸ/¬¹Ý ÀlDIvL`)¿ùúp¹×ÐþÀ¼Ù–çÎÁDg¬5|⠼փܘø`#ˆýÖE>¼ü£oª/\8€óŽ#q¤e(£%ö®Ý áԩд!צ¤xÃ0&S&, O$ËhUìÀ˜´Z™‚)NÒü#ŽÊT—zÁCYÐÓe‘…„c GŽÍmŽËmŽÊmn6hAp¤¤†³þ&@ºA$E‡k¯ƒv@™ùN…;׉¾•î[Än*¡N:é O2úQoÆqs.Ã,?aº¹þ)Š ¡á À'€iZv9Žö©>ÍÕ«~º×/Ý–.貃P› 7c+8÷Dž'TÞ=–PÀ×tIAÒ«¨oÆÓ§Xó²ïIûbj¼Aï–½…Š£ºØå±¹DõMr¹±“”†ÍŒZf ®Î°º'–4ô J*8ÌpÊ&˜Ve%jÎ9å-©xüNG“sêÚ%÷ Ò»˜£ÈÈIœÑ dòw_YóQ9€Ægì›­UJƒ“(°ã(UÜ´Ñ]JžMlî#öTRÇÈ®Z¨¶:†\!f”c¤z-4F¢ók¢ƒc'·½'‡fl%Ç(9 ¡Ü†| êDJp5GƒÔi 5y'h{¥’gÂ\nfòMŸAY0™Ï1Ç<«‚¨X†øN2r d¸SÎM@F£½(-¾{àæÝbN¸LA¿Ô}S @&g­ºTôÇõjÚÞŠ«Hö¨ò²ÒÝkßÕ«~ë^?înêÔùÔ%íx7VÏ£ú]ß§æ9‰ŒÛ@»ä-’‡é—$ÎÀ`B>PÜûä9ÚÇ„C™°` Ù¿Wš¨ƒèl$4ßgj'ュäŠ5{QŒW@AQ4¾¨Â…òáåQbÂ;DZ ^ŽÅãU•@¹%§î@Ôu­„¥àzV²”™<Ì”l{)˜«ÀÍ[ɾ.–†f»dÇX³7¥f&ÓúçÜÞt4ºpsKÓôê¿6¸wôžpú÷¿iC[¿ê¶y¼ÿËߣËB¬Æ§.}‹ÕÆÁØ_¿ |ûë”oÿÊ·¿ÿ ãÆ«š±.HLkã›´©•\’vyLÈ«"áä@±Þwp°ïÖäÒlÚG{}5Œöý:(ž=Ôîçw“½˜–¼$;ˆqµ~hoá`LH2–Å!H()i²]yÇ1¤üãð}¾?gUº7,£ÙHéŸ;ÔÎl‚6_Ú±kogåGVв* þ±@%;ÑlÔõ<|“猋³;+d1ÅFrÀ¼» @oPå²¹c<„Ï|£²Þy•ÃJ¬ÊOûö‘Àá(‘eeœUFe¦KÞÄÏ*ÐzÆU ¡9ŒÇ=‘—÷ëB2¦d9°»Pº¬ú¸sÒ(°%U¢U¬U0WÿÙݨ¿ï^ÿÜtÌâ¼±¶÷ì™X[?s4Ca¹ÚM膅Ò±Sµ‡œtc´{ˆÒBÄ»3pS‡ã”Q7ö‹3ÂÃ8Ö›—ýQ`ûÂ:a¼Åo¸…ü\›Ë ɗ}p=ê’ÃΞè'ü‰æ8®ªàÜþ A§ŽdQ©£ÀŸH“:’äNX„ý‚Âpñ©™Ä‡3,5kÄù*àȯ2D°›r£kDÄ+]"5 ´Ã\=Ó‡MLjÿÍíbŸáÔ`³µ~¥‰z|µ¾\Ñ$ô€‹øx’qÆÍÇŬ "˜  &Ó›á×õ_<2­^È7ýŒROÕ¿L ·lè(èQóf’AôDxðFÏ8XÚÊÀ‘ ÁØ<"ó‚¾Ç¬B†X}º( ç,¥å$Ÿ–Yy‚2E ÔV4À®Š“ÈlhFºPž]0²Ðyòç}­ûóK_[<{ø×icDÞl¥ß°{µÄ$l~Õg¤=$¦]T:ð‘†à€vµB ìS¬7arkk´Lˆq›‹•0O>‡(XìE=§o0Âx’ÜH˜÷èØDt>ÉÐ-2º&áÞým!"—8|3œ6ÎÕ«^¥ _ŠëaŽS¿ëC¸K‘.X}g‹á`XÿZ¢+·®JØ °&5(I¨ü0¤aû²ÃöŬƒß×ö[Z‹©Ýð)ËÊ“ˆ£¡leÎ#©|ñ’ùÕß+,×D¹É!)¥ñ¤¼•΢{'zµÒ±k•°BßvÏKd…è¢Í§•Ö>AhtÎÔ/&™ÜtÙ"µdòW¤©äy^¤ÀH¨O¶ht0Ùr#“þAÉ L0ºõCÓÉXHQ»²ßº[0ìT»íN©ÙlÓÃCó„’ÎIªmøaä%7"Qkž¬ŠÃ—…­i;›¡ñœC&­4­åUˆäM¹ÇΡ=”àIŒÔ)(g’ö³’Û„<ŒôƒÅ¨?LŒ&Ëõì·íâ_:‹Í-Ñ8=nÖÏÃÎä n‚óÍFkÉúÎÙjý¸ØÎ†Ý½L_·óGwËé‹Õ×a‡ò?†mw‹årØ‘¥ÍÁ™Üg9ì,o›Ëï^¯p¨ÎåûGºÒyKX÷ß¹£Æ’=[ vg)?”ìP˜¿Þ¹·¬~ݹÌû²vÿs—¼<¤Æ ­~Q,<ê¿‹Šç:·“'yJy[²B û”1JãúðEÁ„-"ôH9#ÈÉ~ïÚvÌYï8°·z&­’2Ήñ#ƒûÉ¡îg@YŠâ‚ÊgFëˆPÐÕ*‘;zhnÃu!JÊ]S¹Ü›Šs¹×hñôº…B¯_îï|˜tnRt@N€…íðTez«îêM?ê鬥zÓ˜+tçÚ²¼j¤V“¥[;Öž¥‡`1'¥á0²…2.[ãʬy‹s(c\Ͻgd>NµÉ¡¹Oge„—ÑiåT粪½;w$XïÖkÒ‚aümïe@ûÛ ´ÑÖÜÜ®÷[âÞzƒ®bŠéùI_1å›~ÅTOIÈŒÍý»uÜøÅßèæAI2¨{À‚&vĤuø™Ctc‘ÁR²iœÿå¿ @~"æa’ˆ]Ó2g‰y@æ-%Z÷ÀR-ôüg °Ž@ªˆa^j&ÖâÙ,Õ ¿8︛ˆŸíÑì~wd~V´2ÓCÍH›‘O-XØÇ;P<1~Ö"j^žHÁA>ÅrR "äV–¦83iÌQéÀ2Ú–6§DÈÙ%lî¬Àå0H…z ­ëƒ’©¨`ªy7&G*1û+ÈG,¿;‚9`@Óšìµ-âE¿q‘ò¦B¢vuÏ„Óoè¸òp7ô™å$a4䆋¤ .i‹Õ'ƒ®›—€*êWQh –hau&Èdí¤ÂYU„¾:üÄ>ø9+ɧÙLM Ø›Îl¹k™7Çh4dÏ+‹@iJ2ÓTAv‹¶rcE ¹¶*ŠÇúuñsë8x˜ÃÜ/î_wOù;¬¦Á«wÅLð…Þ?Ü yÏWØ9Û®-ÏFŽfPn®ˆ¨ÝÃg(ÕpÑZÒ$É£ ­±¥s‚QÖˆ˜ÏskÔ)ŒE#2@#ŽÅ¶,(I7—ˆcø»˜eqÍ6´ÜCÁ#Ñä%{¨¤ƒ™šCzWcؘ6´½§t¢Á%;x.bz*hžÈs«jøÀa ŽÕ…±ZŸ00GZF×|q4Ãqñµ ÀzÝ‘À†¢°~*3b—ÂìŽÅÇŒ¸b =ÃÉaŠƒ˜w¾U9†¹Št'mŸ–õÄ€y¼ FŸJ,·$‡% ýL¹2SÐ:³€õ+íp\<žÕ³„Y=i0¶Ú]cVW2ÍSi á>3¹…iB¶ôÔf§[cëšô¸¼×$Êõݬ³™¨Á;ÌD[%:’IWYéÇNh¢LSOæ¨"¯ú0isVI/U®Ή9 ñj_ZV_Uª<"ÆQ€Æ7ÑÏ£K…¼Á™é–.|¼.ˆáB†Aø7QÐÁ~&yÞØ¼Â²x¿+e¶Ö+µÄ–þ¬ä7`?…¯Å  ÑczóÒÚyÜÜ#/ü^‰€ý6þ“F(ò;I*Š/¸Í—œ›ì^nLhn pIßk~j ±gãû°æÏŠ"£&HÛ-^ …öà:VÅl]ÌUÀxË—£€åÆ/‚oJ¤ä3©‡Øøa¼Á÷†åb,gó%Y®¬Däf³¨¬r˲ã€gbôvQ™„·í<4÷Zö˦Àr)y£ã¬™ú€ÄÄélè«—ºQ~ó"áò®Ôâ¸7gSGâ–åïhV@’=%Ïòw4{ŽÂYÁã«æy¦Ü©_jr§yq¤%Sg‡vîQ.joÅ=P¸ßy :zR­±:Mú4¯u)Ô¾j§ÔQl^æ¸Õ1lŸHœrb>—dV(l‘/LQ/&¦ÛøœHueœ~àÓ¥µ˜, 3yUÚª½)MÓT¹«4ƒjØKÚ0ø„‚­§0œï×+ÙÜÐòÎCË]„ÃÞwì{»`J6Ó–0©¼ ¬ˆŒ9¥,æYh0•Ôg•ìׄíÚ™Ü.Wq7T PŒ£…C™i_kJÍå•<_`6Ñ}¯q×¿Š®-‹ÖVŒò’Fp¶ñT$Í©ÖÁ?ã@³71œ4&yóV“âí›™úM_9oh&Û´´9-§Ì:KU‘øÈ4×zI°Tü Îâ2&I±r5žÓ0C~¯ÑÏ<.(÷‘¬3–]Œ÷KC›5,&m´&&¯Tñ‹Ðíé"lâ´ƒ'4ß ôáÇ))Å!üò—ÿú?>œ†UAýF,kïrÑ'4r)¢1‘‡”øoƒµ'R^üÔÏ;Ûy1I!Ål‹mî§\¦I.î#(:/ùMh )¹”1†NmX¾í×üU‚ø°7_­œ%qxƪ¼\hD1¬á¶Kªm {Ĩ‘;ÅQ›]_}ècai9B¥sn9Çcv^Ÿ¡±-3ݳöúÞõ?_×»y0ÕÔ;~^¬ÏS°Z¯æ ׫×çùf1sa¶YÜžºLÕÆ­Z솤hËqùÓ ÿ×d&ѵ¹p*XWRm+’㎀e{‚@Ôxý‰Ž©Ïó`bùÑ)ßû€úØrÜ ”•!q*%ÊeP’½“k•I´j¨&ÞÔçÜsòëM'Ñ\i'±e¸+d?¦ÕwÝô­Ê°¤ý<Økõ¥TßUw>¢v{ëúñ´8Vòƒ¤½a¼ÿÛ²†{blî'˜oË“Ñnš–@чø8ÏDÒËU%1\l>÷8zöX7ÿ®ÎŸ^W³Ý/sS®é±Ç$™‘ì5“S¨U]ßAðWZÎd×êª#þ¤ÌªÏm§×ô ðtI8†ü¶™o_—;@º.ë×r–eèÐ85Ikžè[F“HY&_†Ö …•¢—õbµ›o`‰úò®ì½œ“î'AmßXÖºà '1é~a&¼þœ²ŠXۭ̹¼bˆ¿fÍ×\Ç8ÿX¬pÅàGœÁÊU?˜=ÊQ«»750 ê»^¡Éw¥3J#~((Z¢¾FŽãhy¶1 Qd¼Ì·ÙPr¥ƒË’B"'Ipœ‘ɦ«|ꥄ´ô-2!Åñ2‚dTËÓ¢P–Y±¼ÈâòœCÛ·à…ÅÆs¸v7*ºÐjO^/ØÛXn´Wç6°ÛE/ÐT"v€µ;$‰Y»{ÏÛŸ ô) L÷–šsIA@»|‚„Ô«k ä Æ¯%ˆ0\os_ЂµM+Q_š !þf8!l"1°_jÙFÈ)>A0¸žTÐòUÁ X/a¼ˆUà2V3¾B— ^^ÞY[£p“÷oóví‡u=d`½¡×®Pe±º§#!—ËÄ %cpLϵ®Ñ³)MÛS³ ¨1·åÎä×Q:7ƒu@Þ‹1Esû‚»?õžÉ¬Ùr¤‹HfDÎqœ“±„ŽšâM€y'¿qNqÉu̓§ü=,€ž€]Ü´„ª^õ—PëÇóö®¬Óq¼þÍÝ-áaÛ¤˜‚U¿$‰1þ=>܇77\]¾ÒècmU(‹ïÌIÒ|åÁ ä'â%à—„1ß'${ó3ÏDôÍ„(>Æ¥À± ùÉG@î",|RZz•u›“—€ä|.ßý±Užû¥á§g9® îIy 3Û£(ÍaDH29ÏÎŽòœ@ ½#Á7 #½ š š“Lñ#° ãôTDA^°£uŒdFù‰& ŠMˆ Z+Hv5ÜæNÑðÄ€D}˜ïi10á— DÌö‰WÏ⤤@Ò<-“È8Ö71‘_t(˜âçO0Î¥IªüA1^·ÎÅ!‚IàÌFJn>ô‰Šƒ·Qã!âÜÔÔÁ c*²HÇÌrUªŠ“^ùåªܯáqORMÙßI‚@SÂ}`FòXW2ú‘“Ì€ó7¦@Æ0ƒ€ŒÁ»ŒÁÃö3VÍ4+È ‘õ7¦Q¤˜ñí¡]VN2šØfÚÊi¦]¿|Qÿ’½Ñ˜\OÉ ±§‰iÇŸ³+K–úiœâ(2Ù hx&FêœV;o®"rÅM´NEn:Úï,tòÍÛÒd1ÑU`”xˆ¶0ÂǤ.ŸÁ¥Ú™kªME4ɾ"1}%êyB­ÂQ2bzk®P-1¸V—c`gm5Œ·)º<ƒ!õI‘)„sò”8”1ýL•#ÂW’5ì–^ÉŽÁǘÒT3.¼7äd'~î™Öâ—ÝÏ–³ýî=¦mHEÜòá¤<ÑÂGA~óÈÕRŸy7]I^2K²cÍÄXL‘ÅÄÿˆÀ—èµ/¡…:'Ð $¿‘…N\V*ûŒˆSxB@ˆ%yifk×³Ö yš½Ã Ža"·Ï_õCî÷2™.â2^8 ŠúÆL§ †É ï°²’û·c„ÄZ,G€Ÿ*< &˜›SÜÉTÍY”lÏJ,JY‚AÅ_ç,¬rÑU''ÆYI†B‹fýÊÅ‘v½ ŠfÒ@'ÅAq¢=ßÓãù‰âªô¥çsÍJ0LÉ'6–¢Ç¢¸f]€(Oæ{­\…¨v$Ž—¦4‘ªàÄÇr¢A5¥E‰E‘ A¢AÇeœ€Uá‰F8ñžíAN0 è<ß)ª ­š°wt’¾ã¸Œ]¾‚É2N)«J[•ê¦?Ž©r"q \˜%i¹!ÕÊæU‰Kâ‚FùHð(Ö[lú^·A,IÐ ªªÉµ«°h-öYi—fÅ~^íqí‘qEAŽ©ÅO,ŠËì8ߪ¨.9¾Q,.u«Ì~‡· ûÞ.ü T»’Ù¾ì­e^^Õm%¾eo¡Å µûšîKI”©ƒ½þa\ jlxIX(ãuC¨<óÊŠ(ÎH‚òZòò/Ñ~¥9J!æ,”·PG†é«_g–þ ô-2tÿC¸˜âaS>5Û¹DYf629Û¾³œ%Ui±½>¤ ªÇ]Îåo—Kàà4ÃærÉ|ªˆOù:S³ µ¶Me` ¨~ñk tK¨~!\þø“e-²tûðØ‚zÓ!á³G¶O"^¢½öì.^½BýŠU>…ß·gi5ð½K«àѨ_ð½LÇb:ÄiȲÈO&óÄ+³ K'nOý’vó¸°ÝfÃ{vêÿ\ôé€[ÜKÀF® âqæS“½FµÂŸqv`>% ü³ÝÀ‚ @U†ã4ïBȧB œ¦Ï´Ž þÅÉ·mGŽð£;ϑϨ;(ñøußýî}®Gë××útuþÝœ_çÕ½ùµ­íª_[&ÿ‰h¢·NåÂy”ñ†G—Òš÷.0µLÉJ’uÙáàT¼ä;$ „jÕjRö¢"ã‘4²´Õ0¸¼íOÍyÇþ¢¯zÕ_ò­7?qaJ¦Þç‚ÂŒ¬íX^Ð÷˜UʯÌzNÕÀ°œšÎfõ‰ÔY©&§ÒÉe V;½ ûëŽY”ûÕû{§ÖvÝÒ0N‰þ,Só®Ëæùáq8«oèÕVø.ßg‰ëÖûÜŒ?53™—qfU£†ã3ƒ$Ùs$E80”FkãÐ4!ÄÕÝ—rS62àò&mRP/8àñ1CÇ ÑPØAJŽX™üŒ'tÙQt·Nã2z4®¸: È\Dâµ}3¿8ÜhÊíÅÔ$\.ŠßMçÙÖl%Š-/Ž¥ŸÈ¦ëóÀ³ yŸ¢q1(óÈH†gåõŸ>~Ë:G#<îåwµ÷ŒúŸ´`88A;aÇ¿üÝ£IY9ÓÑ1g83^|ç¬Á ?þ+ÐL”Q ¾SNã zùZ!{ó´JÊ8O# 9s <|W|žxá%û ²¤× Ši·ã0®ì:õd¥€{Þƒ£?+’•èH$Š‘U« òºØî .«!ÝØŽ›“”*ñª© ?p#›u~ŠÈƘÿÄ6ã¢Ó- "é’4;6¦ˆÑÒtϱ}ýô cTH¯ÓçU†óìW¼„Ž˜.4,»†hä(ù‚cfÚw0j¦}¯˜ik%àÝëU&ûwŸ­^qÌtû†ÆL–oà“åÏðZ<û€È¹tËãgˆÌ¯ƒãfˆðL©Ë"¦Iü§ß˜b÷ò7Cì(Àgˆ-œ ƒ˜!vÐ=šÄÍï03Ä{ èïžÿÄ €gˆß™€gˆï+v¢vÃÃ'+78f¢vÀMÔ.8z¢Ö*àæL-˜3]PIÏE1éiYü¤ç¢€˜ô\Xø¤ç‚þĶLÓ–ŽD;mñÀÌ{t2—›ÍÀ2óË—cØ$H™óÁ|U}Œßci™çáü¯¦GvFçŸ%Õ%Âx»È.I `DºÆÑ:§'ÑZtŸ‡Æ´¦3´a•Œ ˆÙv‡FÎÔ«lwÀá“¶;®‰¯Û`"yÉr„¯jŒ.\Muýk`¼¯—ÑÝÕ,òØ|i´÷Õ>ê±¾`i¤…K‹É`úlp/gYoôÌ!ÌѰÉà¼c—ÛS¦”Aã×ö£+ ¢ ¾ä†­ fç2òDÔ“ÆÎ„ºÞ<àJÀÓê=¦ଔ4‘% Þá Þêw0Õïú;˜šçq{{Z¯í’}ľgb¿‰’yØB¢TæíS:(’7b£­FG…’ìá‹m0û6ÝLg»ù&øï×Õoåb5G±[ú³¢YHŸIž€ù}Ç6÷“±ìH¹˜´“%,g=y«Þ±`UN£€åòN?î/¨Â¥n½öÛ‚£„ìg‡o‰ù !AÅ {´)ÛÅôç_FQù2Š 0¯šáY5ͤzÉ¢v½ÖåŽr¨@†ñU^›Í pCTeñ!u æ%h,Y„D¤‚¡Cª_jz¤æɲ˂€6l]2‰Eçh ©”{…Q 2» Áh(²ìÔûóî­äF"üòGþŸû*NJùgæ†åš´ä“0̓z¸v¿S:¾É+>i”µQè;½Mmý_ Àq¹wu,;¢„ìÍFäõDœQeçÛ™…Î`g(5•ë¬>iààöPPWÙ7_é\œµ~§jVëè¶=$2ä”å)ÉÝ:JÖõÂTê·ºjм!… ¼Ó@þu#r­r$µóà¨Q›'ÆZÜ•Ò%rO’d­?ã\3ÈuÑÚ‡y.˺  l:…£ Lf³ŽT;`u‰‡FBž*ó‡0©"4ýetà£Ù9“2¦ÞÈaÌÞ:7<¢YT™<×5~xEÿ/J-E¬y4ŽV{u¹.‡A;ãöUè¾:—ûNGнœˆ†w‹ñ‚¥(6AB²cEŽã$%ý¤a¥¦Ñj:Þ;|è§;ŽV÷îË¢·ª\u¼4ÊcvªŸï.;jö´¢£†3{M(¸–Ëñ4ùIŒ£ÑÚ‹®æˆ-zú–“ò4Ž{§ãU˜:Ž—rÈGÍ š,¤|9MW8f— ×’ÉGÓ쌆Æ­Ó ¦c+žÇæeD4ž¨¦Œ$Þ­ïã¶É<'ãSùÝwä±Ç)|Âv¤™Ì‹¦.rÄ„èVëÚlŒ$YvnºÎtЂò~¿Q„䥋%T$Ó=ýK£Éìz·hÚwEåðMmÉêæ¬uÄÔ—øñäD;áÅójß^¿Ö»¶ÌI«su&‡š`ìå£QD‚¨J÷ã(¥<MèVTo¤r¾‰©S1NÀŠ<GèCël„¬â$E$ï¿c£•Z£-ÞB;oq^r_±ðDÃ7o‘„6Ù}DXvˆ¾*²6ëž#Èjy$-yaÓû!7BÑn¥F*K=ŠgþÍ÷ë êÃ¢Ç ’}ŒyÝsÞmtPû99–ã€@]U‹aI4|>ŠÆß{¥^­]âáÜë{LËËQ/j¸{+PïAñ—ÉI\|ÄóõE.x¥HÃׇêÊæË"2ír·¯Ìua «PPµ¢„¾m¢é§wQÎÐM5í¶/ÉÂs fšbÞ2†ÆäIþñõ¢ióL:rn-÷§SÑå&9xfd‘-›éZпIÕW¹MO´Þ}ÎËõ–¼w'Ðì.w¥Û«Ù¹ÔíòÓóUåfý­¢nRó‘I<Ž„¡»Å”¿{·9×5= |æ~Cû‹Àdþû|¼læO‹ß;{<\2àªá‰‡/Y*n<Æ®rj§Ÿú58ݬΡøNŠ¥¸·–ÜL¢*ÔhÍÏ¢µÌ䇇±¤šYZŠ_¥.ë@1µmôò½ Qa.“øí©Q‚ô¬}…Iÿ"f¤PkHÕWG '£Þ}ržZ| ±*3h¨OUû4}úpÕeîÏ奙DÔƒzp"Ù‘c%^‚†oÍÞã‚eh¦ÿÈɇÒèì&ÁકJH)ï Àj‡ð_¾”‡$G„çI\?+fÛr<¤Q%Û3– ª=/±ý’ÈJÌ$¨µê¸oÝ`Zcÿ9™lvËÇ`9ý׺ͫÝcœÓÕúǰËHÚE2ÜQ«qÚkáÍnù9uqi·Æ}ëÖf`»ë’…%½I_ÜÕïúéÛ<Ÿ­Ÿ_¦›Åv½ ž–Ó¯[] v%ºìãzµ ¦³Ùüe<,§«ßäá)¬Ànó:žÖ›à/ ¹<¶©²ÌpâÊȱPv%Û*6Ÿ‚°°»&¹!þIf"þ¾ZÐ^ž0¤@?Iš7[TPÝ‘&Jà˜°=Þ{9È÷ ù‰“ª^ ×V>7¼ÍÏPLŽu÷í#ÑÖz”ÆÅ#´פڼ©oðøÑAá|®ÉzSG§ÍÃ@ÉtkV'—?P¸†ëJÊ›˜®†VIÛC§ {[ÿpJUF?s*ÈÎ+$hÙÊ çUš’Âhh@ÕßÌ—ËÅËvêšç×6ʹh5Œhß åðªåeó•hÙA´xgóŠç¬*BŠÆ?"ꋯ«õfÌ—#¡…Š=ÎwÓÅ’áBàyº\üküø¶ØÍ·/Óh(¶®Ê¼*gr^l‘nÈffÉÔ3X¹Õ©Ô ZZÐ,Ö·Íüe½Ù-V_á£Ú f‹§'·BrëÕòài±Ùî‚'‘÷¯›9Bäêùö·Å Äýë¥5¾1 Ni4Ðc*½VXï…ƒˆ¡†X—öf¾>¥Ä‹ ¶{Lšqòr°D•—©ÉÍ ¢R¯BAkPÙåÇ¥ü#¨‡—Û‚ :ò›g^Ò°bמɬҽñÚ¯ú]ÒÞ<·^ÿÕe»PûÓ|õ™‰´/Y˜(Ûâ…†IÏAy’«Ä¦¹8Ð%Ëåek°Ï& Üô4¤‘Eýâ”z£w/—b‹öV>=׸°ó“ÙUç¾ßÕÈùIП†Û^:GÇ|ý,HhÏ¢s †ÌpGR̲Rl–ÂýƒVG1j6F Íü5U{¬¨ûÇîP‚râÜKCÉfÈ×­S^šMŽUjºrc•›8»‹ñXŠ"Æá(zýLMr´0Ê»F(ÞòÄ=Ibbk8‹tËK¦M ¨H]â né–Z'†~éòºþ%øß¬øÇ>¶ÇèVÒ¬µ'œþýo£HeŒå£ý¬X^Ä8©þæÃ;P90%týòAZtÈÜ6ÒêËõt¾©6J­KúJ=SÎÉq,™q‚¤®ª"…´(Ü|®DK6û!Yaɹ‹Cæ]ß?RÕmíŠêrwš:±‘Uäl!³5‹ ±ƒ´zk•€äÔBŒXÝÛìÊ!çš—ß."údîjàá!·›ÈÀxÛMdh°í¦"¦ßªQôU"¹´ùæ)28z³ŠDª^×ÂblÞ­2ÊäZD–EØÖI\Ü ìõ½Ìä*,+£UB­ NI áåj{Ð>óU”Vs#y ‹l¤=UӺ㰤YãÂbíÛ竎¾’ßÈyQ/¤ùJgÜZ1œÕ"šH[Ç㈉éÓxbbÒ9Ž3TCm›£Xwú?-n»"&%&/+¿ ˆZsæi•³VˆŠLRÿ`ÑŽÚð\Œ¤&-øfc±•×ÜÈd\Uyåè¢ã)¶ÆIÆSÔš®A«Ô\¤øXZç„‘h1¹5\.’ú«Ù.¼ ÅfkÎGo-øxõ›Y'¥Øx1¯v[® é|ä ­R^·|Ú®]çõÞD›Æuì U‰Së¼L¼6MÊä+’çIª»²&Ï‹çùôú·e–v½W«¢˜Õ:ò7„‚\V„S§*s…À"µÏ4M —"4†ç«F•¶Ã¨uºÝP)c٭؊e>zên©³3\ÈfæóËfaCiëÑ^yk^>Q™wÛŠzOÀr$¦s 4ÂÊxÅep×2Pƒ—XÆlj¾óÞ§­m–$!9§Aq¿|ùë_®—³Žè½Z³Nx¡zˆ4ª4_¤)©|ò"à u4 Wo¶IðIeD[ÕÕ÷mM-¿!';6ÝÎ ƒß] -üZÌÀár- ’‚éª<ÿW¡Ã"Î+áYœëÆö­™›ì+EsLŒÅo5náÎPW´J•M÷óŸ´(ê­ýýèÉ7ý¨©§ó/‹¯š]ʦãXž'ܺ»~|Ü,V¯Û9ˆX­wÓïúú&è»»Û§Õzûú"7t»3_§‹•»ëåF„èg÷ÓÇ9ÄñÈñ#Äõóö+ÄùäøŸ3ˆóíÒ=žÖ+€ë×­{æÌ¾-–×›•{ ÎÖÏÏÇ«ÕôA”Úù#ˆÙÌŸDýƒ2Û¹{z>ŠÒ¾ü æ|=ƒÛl6óº3ëg€ÛøÏÝù?_®ç¿/¶î®Ÿ¦¯€bÿi¸¿­·"š?V àU…éì›3³xܸ§ûb¹äèbõ²Y%s @v€ãïS÷g±vwº•U àüqõv5uOñå—o€âµü²Úþ±ro´—©ÿu¨ËŃy@œ‹.â\Zú‚¸žþq¾¹—€å Ò‰,×ëgÇÏO‹¥ûXãy¹X¹7Óbì°]ü  .šºÅ7@àEIŸïÖëå:+Ø@r5‡µ‘Â=¬¯´M]òlµž®ÖׯO[€óÙvpý8ÝM!Îçß®ç€!Ÿp ©ß«õ0>®!õdµ~ž?C\Æä«õ R×/¿A´E,êß Äƒí $Õ·ˆãÈõb¾{XB2têá…{H/œÏŸ_v@È @8ß®AÅ} Ìëjá>Ì[ýZ­_dàÅdÞø>ß<-µ¦¬ôÀË0¢}A¬-¼,^Ü[wUa®!’Øî@°6ÓÕW€ëùóìÛWˆsQ€Î…h#§—€äÙ¬=æöÛ+lD!«âžg[P1ÚnãíæÐÓŠ´ŒVD ønñ sü¸~u»èÜž§«?6s@ï~ß=–“^gËùÔ½4¼®¦;@V½nç÷ ÿX¿.@K1¿C†h¿?½.‡ÞêQû-ax' `Q¼=ºdø"zyÝ_¿¾šqyJi‡ö#Qwb÷*œÓ¢%‹ÐX¬}b±H¥©¿tX(Ó_Ä·‘2Ÿ>¿Ñ³'¾g¤ˆY)Zö*Çfé’±·*÷ É3MYá—I½â+Ò’¬ï4òQZo½èwZöá£ñB3ù}~´–tCãd>ÚÔ7ÚŽ á™mIä¶g¯,Þ–,_¨}ø†}{-ˆWí¯OË&öšY}{M¦< k v§ÐòJÌÄhïîÎiÄ ÂÒé„Gïòh{Ýe¿;ÕQQìÙ'Ì}Á>¸ÁžŠ‘©ÊÒp5“ O,6ÜìbDÚEw‚UY ŒK“\;\W"‘C Dš¥4«@@Îx, 0 ¹øOâèUiZD0q ôâ$À€íYp‰;ÅUPšE@Ÿd¨†ˆ¡€((ý•“HbQШ 0FZõ‘¿\ж;yb@¿ª ˜ʨ[\аdÅÙ­q¿·ÚæF¤¬âç¹´Û\dî@qܧæ“ó} t~1ÿYÑÊ<æ½u­Œ@h®x6:ÏAùÑ÷8tŒæOšY”wnÛµN'§æûîݶ7R ;•õ„¾+{DLé÷Äü¹¡ ’Ÿâî…@Õ®kŸî¨UANUcœuî£qß1(ìHˆ2ÊK³I„;¤Œµ« RæÑOÃ5³éV¥³z¤E ¶a¸®Í*XÚ;ÑOu_èŒåÎcvý}Z‡Tãr2h¿¢sAÕ¡îAÌ8±»w-\Š&÷äæ:ÎbGݼhì- ;µØ5YJÊÆüp/íêwýlžÛçØ]ø†ºúˆÀBbîùLhÙnp•$Àâr_Œ•]Þöòòfº ´·¼Þ±wÐ^Z| ˧®÷½ÖÂEá‡ü Ç«tDWU’àÃ-i¤Ç×ßää@n+”÷ªd×ñܵNL´»•á"€NBö4%DÊÂÿ^ FÞü•äÖ¾B¥NÔóÕ’“'i¶M W|„Ô—üàæ³.V*g¹¼Hê¨öÈû µ]ŽFJŠcœùªðòìW®s™Âã$ŒTòN)2BÒ¨rã›6rÈ- žé6G™K{¨ýVd©QËŽ:£>9ÜQÁånG›³ t†t5dÉàh .8¿ª«„*>ÓŽG×t«ãÓ1u•à]‰¼0ÚðMA½ê÷êÇîç—º:²*2v8H+ƒ‡Ü8ªµ°½Žˆ5q­_jbÛ¼X±rºCEj‰gWã>ÄŸÆP!Æî`^Þö£wyóÔü¦‹Þòz°¾§5¢aœš>>¸Ë\Ö "IœÆÒÜ|ÆÒ8»\“Ò:†ÆÕ/Æþ¤™á dÍ’@ë\ŽK]—.L˜PRÀ©æË,’šê#BhPå` `G‡¤€§\ž)8 Kë®06à1Aÿ7‹³òjoºoaÌiAs–ƒ™‚¶_ÜA?§Â}‡GÉÒ‰`³ªÊ0…æY™‹—ú†Y½ê·Êõã§Ý‹¶5î@·®'doÜ;g†Ìûàm˲æ„ûˆ HDZ‚ÃÅ9Òòƒ&!KÁž%Ì8R7Cé8)²„ƒSMò‚•Aˆ&s Éyt,¨kW_ô òÓìõ´ÒýÒ¿žQî1\I“)+(¢ÉP¤¼oëŒ"KZŸpåœÁ¸ óò¶ßï_Þ„i”¬½‹ÍôçnkàåQ³sݵZ›qO¼DÜ?XáBQШ )&JV’$SËíRV…zp|òé£ Q¥˜@<ŠMK·n4Eïö=áal\~ÐiéDö/;ª4è}$Rã•Î,,}%þŒÁ¡8†ÚÜ<†½ ç¯_ƒÙz¹œÏvÓ­•¸–¼A«ínºÒ_;¡–óéo®n×ÿ-‚ã,½~ŸOµVÍôÎwSwí×(qäMÔ˜íwŽÅŒŸì›û³Û#)ö;{pë ^«Ì1ÀÇvˆéî¼¶ÊÀÝ¢60F ZòTP~bIä†Ä<ûÞ¨³û:»sXºrh¢½~“|ÑoäCÛ©¦+uqNm‹ù÷j#¯y¤¢!äIÀrš¹».(+Ž$k&3n ?×Õa×­©4ͺIÑÚSúOú©NUÝ._ÑÞ±sg’7Và¤(dìˆòJ^½[—4m™»qÒ/}·¯EÅãa祭ñÓ(j¤Ä ¶§‚ ©[EE2°ªáªòó7 åyу¨È´4{׬§Äåuse 8í%–—†|‘¯4ù¡U?¬ß캒"˜k0µé©g²*€r¹œ›C¾Ó¥†z.’ãEü°'s£ÒÅ;^ëjÄ*në°Ë1MÕ ¥šªç_W¯­á¡úËVGë~™àFË&’Œ£’"3ŽJ5Ž .0r7`WG·Þä Oóõ¨î"jo!I’v㽇”íqw•Qvgæ-ÁKb0„â®’ŒŸdœ7I†Ue^Ùïw“£ãQ«q"‰¬ä{yŠMþ±”ÄY ΛOÎXe®*P:êÄeHPž<€2H¯:‚%Ø4IЉ’`9¬‡X_ÐÊkqFõ[ÑŽýmh⑘ å±ñLØ1éÊJÇõ!-7çYUìyXF«:÷¼*$t%ÞIQ³›c÷xæ Ø$„÷=swÌö†ÿ¶{^¾Èõ#ëW“—W\{TÛ›,”g×öGCEr—¸ÿ‘¸9ã¯ÛTå"r"Y”Ð N›] ¨d²®%>Áàäz¥§¤¦yóNSúêç$ÚŠŠ^ñec¯R_øîv¶f$ËX¹!ýFID  U6aÀ ßv»—Y½ãßpD̵u`® –“®")N*-¹—Œ˜o”çbØæ¥¼*O—¬õQ)®ù‹–Cƒ›«•«ÀàþwˆTY‰?2ƒ—üYéç«Å&PuÙtÊ ´ŽõœDÉÆ–Ⱦ÷IùÑÜI¸olpÆ-×¹ipÕöûi ìÍ·Šl=šîm`¸%ÙJ¡Eš,§Å5¤²Ã„÷•‹LNå±M“ï@ü$qôºY‚Ñ+›ÀS¸¿m6 î3Xà5‹¯—Ê5ÚçÆêPå-cÙ‹<^²Ëïšó9óÎÕ7 ¶Så.E(Ö¯’Äý5ñh1ÓÕ€8ìÊ G-êªÐ÷}÷)ÉÛ7×òŒ¨ºJÄp4½©î!ÝÐëæ®;·7飙¶Þ9ï$“ã»3ÝÄvÝO›A¦ý˜Ñ+gU1MQ‹ÜúÔDŠé?Æ4ïúúÍs¹5烑²ãOÊXÿyâF¥‹‡…qåÖÈD±èÖ‹/Ç‚ž¿ Ù”-èQ{é4Q*”*¬Pÿ‰Šä…üŠÄ$Žò Mé ä!1WhT²÷8¢èçÜÍ;]ͨ»òçéËß´}ì“—Íz·ž­—Á÷ùf»X¯L#®™ËI|Cqýÿi;ÛîFqeߣÜ3={ŸsîK·ãtûŽc{lgºg¿aam&1’x>ý•ă±Q UAÖšé$ ß_Bè©Êʦ)4ê#ÕD2É#ÐãV¯@pZßB_+ú8톋B6g3oÕb‹À‰ôƒ˜÷µ}Vö#U›Õ(ÑXmT ª­ì´'U¤Z¬òAÛ-ý0£åÈfœç¾öÔ„æ@ó. dþÙ;‡ÿ&*ð‚–hQì)Üù¢R «¾ÀÖ-û`|Öéáš‘’kÂF£ÿ¸€Öz`pÁÃ]U:°µ—1B•±2·ØK‚¦CzIËÂm+˜ŸÑZÆë~;<É3Z,öê0Ýž«§´V¢ˆhX2(½rž~&€Þv»ÀÏ¥ ¢P"¹ÌÙ3.Î$ÿ2YÃs"bYâÇjKÍ—¼Hm“1³‚þ úûG%wÑ™}i'À]àØ,“u'túžaBw¼zĆ;˜ܦä˜NíE„à,ÎO¬Œž£É<·(ƒLã%Ù:…”ïò–)ÛÕeå­E—”®T+øû t9Ð% %/ÓrWú0õ¾¾Ì»ùÒ˜š›Uxös7[Öø¾àê|Ïü¬¼¾šwxXÒ7Uë”t·É¸£×¿}óç›Ùt·Úüé’¾õŸÞtõ¼ž/fŽÁŸ6«ÿÌ–Ž·«—Ítæx;›l¦ß½Ùf³Ú¸„÷ƒ¿‹(c^íõÎX.ìtA´?)ÿ@‡Côaiîåä¤6Ñ‚bJ»‘Έ@G"Q¨ýfzÅ8²µU&(¼Èñ¶{6k÷*5b=ƒo@‚WïÄbçGÑæÕQ©Êä¸Ý¨r,Ûxí²ºkjèª;åo½ÉlëTÊ­ºgŠT_ÿZ»ž†ð*aa+c4!Ø šU/ÉB¾ÿ­®™¤têÌ„?ÑAr¥Â³ŸøGdBnÈÒ³¤NÓ€ø­ÇŽ%Šd€) È…áþíåàú ^ª<÷¢VòÍõèNÁæ›Íð/Q¶?Ì[É«{ÝJW]WƼÕ'D(imü†+2eYéÁNA¶ÜªLüÉ?Éð›pï áj…—qI’cUûÐk«†XT•x9±c–ŸÏ X6”P*$eûÐnÃTAª& Ù(IX¦(yfÊ«‰´v޽ ñiK8!Ô;g”(y‘È`ûhª$¨n übheJ¯ôé†'{ÆÎ0Xvkx v/j¡Ô¼)d¥5,x Ì“š}‰Õ¡ÑdcGl:$ö\Èöp@†•Ì0=î rƒb&5s‘Èd³Q}ÐÁªê1‹»]•#K<¤cC@¹ŸìÁót…õ<èS~×CuÎÈÁ­ ù°—3wÙ̯pFy‹ƒjC$Ü<`äݱ"øªfžQrœ¯¬'˜jØLi3L²U•½­§–sn(¾*´£p¾úê›7¦[‡P}…¾˜YÁÌ'%Ñò´û…ÈÉÀ h³ëÊm~¬ý(C¼„šaœ1@³÷<¤Œ½¢ž¤Ä°ïª…¡ÞìmÕ X| Ú9÷7{É™˜¯\RV†T,=B¨»ç×ãìiò²Øy__žžfo;ÿqqøR»Î¡ øPûew¨ÚQ¹çvªªƒž²¸ìKú2§",;Þàð!*ù¶c<àZP«ð‘2¼rAªÕ6P¼¯ÄŠ#›žVpäƒä Z53×gßsL ª½@&J71îy•™>$âÇKö®°G¦&0.mâÆw®UMXç¦ý–ðÝrúrí~¯”sû¼Í3=Šrxô:(ª…Þ±Ü9s¯öº¿qlTZœûp¬±Öq\tW÷08.)Ë(t-vwˆk;ÕÂ\ÛâÚ´ç’Z2?®¾Gœ Sþ¡th« •û‹~ID‘êõõp•ª™¾å¼ìj1vRÔÓ>ÄìJ9R´­é˜˜œe¸ÐÚ²ºç©_уaž˜CVàí ìQ¨¹Û96wäÔ^»å `é•U§쟬"ü¬œ„5–щhñÞ{”Ÿ¼Ê€Tí§› ¨MÞÓØ‚é%€×ql`˜ñôýÑàcÆ‹t¡ ‘Õƒ zðcAJuûì±s"ŽZŒ°ž^΋yb1Seå•´"§×4“õ= E-+óI¤²¯D|C¹ÿÊÈ…9g쯔 ¦ºÑi+õÅžvá 6DÈðŒu/£!¼Ðîà¥ó;¤²XÐ}ly£ûØêâÿÛ®––©À4: €¯û=dæ¿{xZ,G¥´"dJ~ç„ÈÊá/%™ªdâè°8CU -܃[¬¡ÝÄ+‡}Æ’WÝë¾úz$Z´!¦¾ ¾¾×§®îV§:DÌkóòÖ—œÿj|u£ó ªÓ©N“Ü%$àzìšß¨',0óFèæ®!’úŽ>¨ÙHžéNäŽVäÉ´œØÆðg%Êë³ÂÝgÕ·ºZ^ž,vÞãüÛÜèá­¶˜é÷ÉÆ{žüD«ÇÙv¶C›åôÏínãN{Tí³+…×n E±´rt¶—UQ ø¬-ÈÉŽKb/ö“£e¿ª÷ÃŽ,SNq(ùJÅ@ç0 œÃ¢¡CvÆA´ŠŽXóŒùñX•>ÃèLß3 ÏÊëê»ìwm Ö8kð2H7Ò¶€åƒ*N‡£œ.“÷<Šiyº†£í mc¼îÖT«¡$ÄYÑ7.é2ê@(N¡~[ž§Hy4º:^F„Ãð‰ðÚåDµñšlíôòýE"Þ\ЊjÍ–ÕuÛÌ*ðÕ¹/*|æolH“ýÙM+ARX€&tAzÁ9N(—cœ›¦†R£“–ñ[T¼Gd{X"ÔÊ|¥[ý²HÙÜŠIpc M2|¹®IZ³_ÑzF«³½Så`…†Ër5=EqH…g‡ƒ².ûÆhuâHlŽ*tûÑ ŠYéþ‰ø¾åŸ$î쿲kC€Æ•M_ÿXí2í$è · 7Cê6¹UðûÕ§4–„~š“ÚŠ¬]›ã"W†  é[Îã'±ãú¶ŒKý…¶ÚºË ü¹‘òP·Bƒ3PIö~ºˆ/á3E`yÙû" ¦<9DG,ÈbZd¬ò».Ðx)8o-ƒ€Ó×êv¹Ó´å :j·î:êƒK†i(F ­c[Yê‘jj0/¦Р uæ/F¿f„‚Ú£ x¬úJEQl3º%SËf6®k½}}ç¦i0Ô”&À×zoà 6”Ò¢CÚFXUœx‡Och?ú¹Ìv,Ú(yz¯©†[ØÌÞeÐÎ!BS¹ '/[J£äc[ïì§7óì!ºÏrœ›]Æyæ­A˲€ä(õñVRŽÒwÊÙg>²ìxu|¹›½±D5åã¼¥ŽÞ8oª+;F±ïªªÉ¸º4•„£ÌñÏ‹awIÙ§¨W+\óÇ¡êmc59þœbS|ù†Ç±œ gŸÞQJÉöy¬f»¥4vÊÔ›ßû¿ 3¾UÝŽôÄm­qš‚;I=—§Ï¿UåÝ(:/ûc…Õ°g¯1_÷3²vŒÁÔö"Fë´n´F*¥7’£”¥[E½qwEÊEüe\m9KX} ÇïH Ù{0Š1Þå?N¥G´q2¤+8$Ö5ÀŒ¾ZËG"wŸíŸÝOü=ç°Šj¤n&,˜$ˆA«mkð®µþa,Ĩ x1g?¸ž…ut%&.à³×ÛòáëËÓvþÃ>Æ{üŽ«ÝórÏ´˜Ìë¡Ï¯~ù‚ç¼Pu§~õ ¬î™r7cWÓjÎo3Š÷üˆI߃˜‡¯þþ›Êç Ø!´ùMÐô©û{ CŸ~z¸"!’Ï×ìÅe’ÅW¯¨-¼êŒ¢¤ºÒ”Ùm‘·HD{Ò ¯UʧƒŸHŒñDb”'*Rå©€&d=—S¥‡ÕåheMcŸ¿£Jóó÷Ò N”³3°Ïƪòà1ä2Ú†ÂóF"ð•S¯>Ú(ZZƒ´|ÑFê•7ö$`M«ÏˆUÌÝüJ(õ PÙÐ1jΊA9Kéž¿Sº&Iú¥†*ÍŽWωNo«?!çÕ]w24-CÞÛóã.%@­ö %”…‘ —IåÊ•íwìÉ1—yU» ‘®žœêvaГˆáO"hOBi#ªŸžð$÷£D {ïFÚý7Êø ‹%ZNÆé°–vYh >MEñ#§ê'møTý¤Œ¡ªŸÐ7ZÒ·è³eKº“Àõ|!ž?ùÂ{e¬Ê¥ £Ù@\&{}uØ€çé1:Ñêg ¸qUFÓ`Ò0¸úI2ÔlB6*{Yê› ÍÆ‹û˜aM´ 5ÑH›jT¼vòBEIM¼B‰­´BémCÈ®S×ZT!9dbYIPë£f‰õQ²¤À JÜŠ¨·?ô!È“‰® xê#"Š}Õj‘eè3“[1FöŠQ²WŒ‘½‚š½”â~”9Ö’o‹àT‘´ÕØ%Ïgç4¿Ðè5Ï´eè—$ú <•;Sbïq¦ÛÎÔ!)…¨Å̶±¡ëH ×Ú ä¶©-"†? mÕDvÕõ¯ I]#ø)ø!VÞ3~ˆU×Õ)Ö³Ú~bnñmP»¡K…;–ºò8û™8ù1ð@úžáÊë{ƒ7è=#°Åö •AGô&‡ŽÕ ŸÎއ~ù7~ö—Õ0E5tú„.@c/@hŒxî'¸Ð_pÁi X#Bóô"¢c‚!*0"é!;fŒ!ä™±$vƒe„fv¡?RTàó/îÁþ^`B9Ï"ñò1Ïù™‚Ÿyˆ¡òæ Š³{è£>ûîÁO—”çîÁ•eü&x‚©þr ŒÉ˜ù¬ðNFsà_þ ‘tY^Ù˜Fnµ9åïF~‚¨F¨n×Kˆ¿3D!Du)¸.B;Ñq þ+…ÿ6÷øá¿»¾¼Fʸ»'*Kv÷o¾¦êà•¼)͆ Í&Ëî ÕºL‹{øûÀ"¶E¨ûð {wzV}®î-*Cßϵ ;e›ð-ãQnn[¨þðQ½44œ„Ñ™*O2<‰/$XŽMSZzÕשv–ces¾WNâ\·1·ÁÚþ¶ w’÷ÌOÝéV=}õ©YŠíLѯÔ}p]©¬ü,,lXÉF©É]锂Š8®ÜaY™-¤8«üÑnæˆQ÷ìÆq„É)P…¯z | Ôšµˆ¤rÉìÛ™lt1 ã2ýÂÈO]®õqA/å[R¬æ rN³œÙ>Ü ²º—;3Õfp± Æšc&ãðj*€©ŠáDZõ#šÅžJS9b”ê`áµ+çcLPÞ½e™Ù^'ÓBE2|R¨¾Ûíg›;¶„ÞâFN•Ö¶=ën‚E”Áã:¸ï*"Ûhÿ€¡ÎÐ$¨9¨NxS¹òô,&Û^þž¨a*úm麨þ¼¾ll’oë&ò›ÊâF‡ ÔOÈ[¦NB]V¾pÌN¦Ú\ xžü\Ì–îáu–}¦w’9 ´ñeÏI嫜qgŠI!<¸ÏÐÇý³é˾ºX#ü|óQ¾jÛš j〷p¼à®Ôxj¹Mîµa¨^½uGÐy zðlš@‡ß»û¶ÎoE|•QÕÜ·SGZºu¥}s†k?x•3•uµ²aªÈ¹ŽÎ³þã©IR§â$Ê;àb8V.cÊÁ¹9k±RE≠‹R²Ü¦t}]å;.ÏE.Áë[Ý·]^þÚL;o¦Åµ€éä+.ôƒrAU]˜RãDÀþDñ$ÏxŒI]I(KÉaºMèÙ¸fjeÕMÁõÕÆÚ¬–zR™cÝû‚ÉØ±ùÚ ß”…<Ùâd—yR~¼CfY£´’%âꛡ3ùÕÆÇ·[ʘO=d@ÅTúb­mº ÑkQD’pWjÅR9œMaŽ|%¬v(píMžÃ ¦–1µMè‚z“SîË×ÌûècÌ÷4²ÚH›^¯Üªçžr(Îdsñ4—ÕWáŸ$Rd ‘Ë¡7ëZ?™qU§ë ŽKêF•¿¯ºô~«K¡cšïQø(À—~¦ê¨®J<•­âSÄâpÊ \†]ùy’³#ô¹¢ÞZ¯ZÙ툷:b­Ã;°ÈDw{õð댧,Ì,’”Ð¯Ñ ·V›”ÅP•-íñ^Š(¤4ª?–œúZ¨Ù ŠÏ=±j¯=Š’/kÊãâœÌÁ#JZŽÙë•GLõ9aÕ6¸g§6ÑÒÔ§ wd‰WÈW£´µÈÔj 9>*w…Þ/dá[›*܈zhÑú-¨æpݹºe˜ûèˋ߼Åjú›1Š+w ,¿.ÐÄ‹ —%ŠP‹¸8\]&ß:„ÂÇc,>šwB<ïèˆNÌOáõGzÝŸà%x3¢Ž±ÁKHm ¾¨´@¿(‰ 3]Ï–²f¨HÅHCˆôq5S…NÃPßí¶ ÍgõÛS¥ÐÞ äKBOöë¯ÐËM%MD•¨7hÍ%jwy4às|nCäÂâ|¾ŒÒ2Æþaž(Òz#ÜtiG76oèÎJRÅ˹'òeƒÅÎ~â!g騫žÊ^û¹ücPÃi­…3ŠWUfX#gT.Jdo¶%E²xyžçS¤ÛŽèÆ–>q¼Ñ•íýÇe¼§å)É¥¸ç« ú¬(FXÁÅ#ð0É8Ú^‘ðLNzYøY± ÿêkb樼ùÔb3Òg9u|‚é Ñþ>¼%N¾, ÅŒ ²­o ޳÷åFq㿊è(Ÿ&nDÇW´9U' ÞßlÍúF‹CÕ¨SÆ“èس:,œ3À幺c(‹êjCu»®º mq39hÕÎøI(š´yª¸¥–g1×ôN®•W—êßµ²Nh]‘oI\Ù&Æû‡CÛW„,œýªÆ{oúÄE.zZ¸³dÜ|²ÿÝùï:×øþ/ z4XÞÝ Û„q %ª€ þºTæBUYãú#w7Þ‘DæNL^ïæ¼¼øxCÔA™µV܇־¬ØÁ—-›re•Î5ž3ìçÃÞå~8Q&éÌç÷«{Ýü©®/—»µ±n·¹{àÁÏdÎÑÚÉ=æ^v ´<݃±Ò¦´¬çL ®°8àgJÊáÕvîmáéÃbJlÑÉ£<hðµ‹H˜lrtv +ÿ£‘”ĦœôŒÓnãØ¾86Ç3°1­È~…’Þc夆çãfŒC_#{8Ф¯•S§Èí#4M'×röê+Û$2žó€ÇteÁæBÇwìœr )Qœ÷Ð×ýê^·÷¬®O¹Z5NGnP£>£ÿUÁ~­Î¥W6㈵Θ£a}Ü¿2Ûêü´Ký…lôŽ:d<5$;í„ë…˜² ž°‘XF“`Ž —3‚jÅ}PÃÈ· ,gUþ^ÜMª2v`™:ýÔ!?uš26qaHã§¾¯ÓÀsJã8ËFDu¥ ²I.‡ÿ´—"¯R9U&©,Ë5¸ÙvfE_úžY‚nLZà1Â7y‹„Ê.”ÑÞ û›†}D9 <ÄÜ'“<£æí‘±œÊ‘ëJÅêGP&2üì(€¥°4 ^ÛGToPje“¬œ³c¥WSË cèHioöä‹ $¶õµ¨½hD­dÑ *Åâho%¢6œÑ¹ õ†Ê–%ñ…&Ħ3J¨œœLQNk┿ÓÀl@!ÅžR;Ï(Ï F.ïÄÌKhOŽ4þ*cvfzºCµ•QÙHd¤¥™ØrQ®„±#‘£5 Oþa'±< b}L¹ r´¬É¨#‚Œ:"Ȩócò` 0ÊXXèñ`Eu:u0͈éTŽáñ!µ²msF~/Ô&+#VÌŒ\ÃŒB¡ÄL6d’QÇ!‚89&ÇbÀU ™f â4SP”X†”„"‰´Ë ‹-Db†2)ˆ Ý,¢w>­Ô7;ßVš­ÕnC|·ü=X÷Ëh0!‚O‚z9À¶‘±ôͲ,nÕD4]o,X¯ub¹Û®K•Ëé9|»¤†¦‰E*"×€ˆ\¢!u "¿ÕhX¡¸YìBÃÍ OÖC04y]ï£od°Y¸B³u„›A#š”3F.‰ÙÑŒÐäÍxMPs9&¶LCªMLäȵ\ÙFåŽDó†úþ›59åíÊ›¬×3—÷*Cnÿ\N]~/'›?]B:ÖÁ•÷8ß̦ˆ+·ø]iösºp ¸—î„\>ΧD.W“ÝüyætºÛ9Š>­‹Õ·°óå÷Ùf¾s ¼üêš›Éòqõìòqµ\üéòÇÆ)œë«ßÎ~™-wó‰SØ~w}øí÷Õfç-æÌœjŸkrUÛ³Ú8Ö¿Ýì§ÓKÝm^Übÿ±q{Okïq¶›L¿»„\®~L\Ê^råtõÇlãTÿÖž[ì§öv;›ýæM_6Ž!Zfr;sHãîyí=O~öü!‡<»ùòÅ¥hʰ›ÙãËóZúº >û9ßmw“ÝËÖ˜?ݤƉP‘ ‚oçß–“Ø­d¿é^Žß&K‡ä%»-‡š²;9zsý²Üm&S§7êT”ÝoÚÔ[ ý=ìŽè>h`q©tVÎ\XÚŸÒàF™›dp:ÄþQ¸¶|ˆ¹Zù£q šqî˜[qlÇ ™ûѺÏ“ƒÈ3T`OyŽ/D[gvͺ"«^Ÿ]TÎek#_}ß’Ê{hOÀrI¤?‰2à·,y‹²rânÛjó>ì bÇøUP†›bÂ"„ßA1²)&¬³°[;s@44Dãq@´•ÄÚ°ºKpË¢û°<{uY9öp¬j­j@ƒ×¦ ƒ¾„kh÷\˳Bí×r,?G–ï!&lá˜#we–¼¹‡-˜D\m:¹úoGDøc”8‡N1)OYê#Œ œ1qÄǼI묫,»`^{$üܵùxâØ=dêXbÔ@0F4æ1¢1£„9õ<2à««¤È;©X0æªëÞ,Ÿý¿xæô•Éá"p”9¾³s”8§âÕ9Çί‡èÀ]Ã&®…F«ûKAbÙsÒ½ÓW!»òÔwª7Æx ŸuÔ=Ó·}Ýß‹š5§æJ·±½/X….àç3OÒŒ¢,+3‚¥œTWNpTê'a!XF#ßü §6ÇáŸPpˆÜ™È‰è4¦v¬ÐA¿ ÂþŠû/ǰ…û„8«üx¸…tŽ—Ûy0aÝG¸YϘ§ÖUøì<v*Œ³Œ!0K±4!pK³x 0‹BMÚ1Ò˜[ÐÁ1¡"¬»nê¿'1&,ÃNQ1Òo˜°(áØU:÷³Ü>¸ ž»‡¬,œ«!¼p§œ—o…,¨õ7‡Ð—³{#-.½ˮ»öØ2¸å¼ÍmØ<@-BæªÙ‘ÉHe¢»¿Åüœº©“†üâÞÁg_8¾î¡š¸—¢"ˆøBÙ$åŽ9QØçÅí µk·¿ºý—{PçÕnûØú&d9~~F¼ZT4,@5÷ ‹P×{«ív¢~ŸÙ?ÓމݫXÇËì9ú°¬øô áé?<ùW°‡}q¨Jº»¸ÑjÁÉO‹±ä@7àD­<ë‚ÖÓóF>Râd8çceÛ¹ò^:ÎƒÖ ãHj<Ùƒnvñr\–ß ^ÜIï±± èH/•AN%)Rwd¼–Ð%w<±ÔÏdyËY6Ve)cceè»/Õô]ciùqL—Ó}ÊH­î­OòŒénä†6º7bÇ!•à^ÉËX ²`$A)6rΉÑVŒý°r.”1ŽÞ´9DÚÑ¥ÕÀ»Á\u¹<ÂfŵZäv§>¦àý¦"Á>Ò ‰j%`*ç ‹^”)ö©j£7w“] |•qš‰XoîÄ5¯1L“ÕîPmyã ö™Dþ¥~G(¨yG ÿX:Ä3…f¯çòz·Êkë2üýÁï&x+ÜCV˜»B¨„öæ#Õôå™07$…fòÝrœèy¯ u*kƒÖã¼Î—à7™Ò hÏæòÒrÐ.2ååïóoßgÛí”ç½×êïµþaoím¤ÑLC(ægÊwòpG‡Å9EsQr¤<ãK’¢Ÿ²aÔ>MLJ¯d‰,ñ9ë<5P˜8¤~$‹$çõ É\ô} •÷ÂÈcKá=ÊÑwJ¦•ý‚3¼+àS=nã~ìæAÕUå†<®¶jw õÛ²[àÁOS–@åÒÊYSÂ(O/,dûâHàêÕG$–*«f¤|ŒÜ߇Ç+wÀë±È£Ø\8Ê{ÝâQ]ŸŸÓ¹òTŸ _¿ã²Ê")ö‘ËÌó,[‡@ôI0n¢Ä jVª»Hµ2ËÒR«ÝNÖÑ ]¾g4«>8Èw¼úG, ÷ggsé«nv‹_}ÃÏ‚“LsXÚoDnèÐ2y€©¿ü7_™£Á“2H@%“âÃSéÕkÇ•ùœÆÙ'F.ÁS”ò7©ÐqT»H IË7!–qun–²&½ÈÆ8ñd¸$8Ññ"ŠC2]-ÐS/[‹˜Y¢¶$S V%“±·H h™xÂ{Öé=¬’19Ûк ¡—óü8òž¶}i·`äL~’_¿ Ù^ÉÛ@Û^Þ4´íÕǪÏí nÈD}ÜYÛ–„ЧŒŸ7Lð"ƒ§âŽ2[ÙZ'G¼ˆþA|Ž+»ãôÇh«`Ÿ¢ÙÚ}çúV÷——×ÍVÕÎoqàAvN±(ÆíôA¾'­@ëíCKlV,ç[ï_AÅù/ıîL¶1¿˜¹3`#¤o™ ¤º¼^­¡âx_âëàrÞËS(‹A(dÐ' $§ï,–?…?lX „ž,•9ç¡©¿‹Ÿ¾Œå¢¼® œ‰[ Òbä¾8ÆìÅx¼Ú.Š‚rÂÃQˆO]}xyÛíQ»ôþTOÕs.YvHQ=4Ô{yÇPíÕUØÊH‹j‚×»3ÍQ¨»æhô‹Ù«;ÜÀ™`õsf“XVNýc›ZÙX*wý-, RìŠÂÀ¯ÔŽ|}ž*nó2òïîæaSmY×\zõ­nÑ-/¯e[›_Ö™6Ìl¬Ã-┡“3Ô¨¹ð‘PƒíÚÝ ]#(äŒèm€H:ôIZ/‘¿}vSÝ‚¹Ö󺃭gD@Ís¹3ÂW¾á}÷”%S‘Ï8Üb—÷º…¾º¾¾²òÞF ÌC _WÎ<Õ‹mAŸBeaçtHä¥!v[šï9¸yÁ„72¸Àù޵ì%° U4ŽTʲҢÄ}4•ök®;v£óÔÔgL­Ç1g!4‚¶ò‚gôÈÕDŽԫÏÄ:ÀeÁë–¥üÒ-GòšÅæYƒÔaí¦R:ÁõÑ<§À¥í°nšßÃnšå5uHìݲɧÆnÂç®Ìáá³›·á/^{—dçšÛÝ'¹ÞZ_¦åoöÝwZw"­d˜m‡Ï>hÿÂLñØŽªožV_žª¦ª®WÇZ|Tö¢Ê=Ñh´¬:‚Æ–IAm'J¬ (R–!ɧêíQ2¸aIyÜФ¬jhBn©1ö5Rcùíá<Еj y”zy§Sèë5²»y¼vå'ykðwÁe'e”.o´õåðÜ6Úa„í“@²[É b» íäFy«“Õå­þZ·iðû‘Q›na?¢àtö“ä{ejÏÛ—­"ØN&–nÄp ûH9)²£>ûD²-UCËÕoû(ǃj؃Lá_rTêŸ`Ó%󣲦DÊú1 MýŒå´—¨~À“h ž°¶06#Ú&ü3ü=bªÃj‚RHÄ©8°‰“͕̅"ö3W$‘e_ ½ñä &HEãÉž2¦•È÷î%€ÅÂ0±Íüw/JÒ±ò“™ÑYwð,/=ξ¾˜d¬-øð¸ÚM‹þps‡ ß–«Íl:ÙÎúÃ:ĸXM' ©g‡ /‹Ý|1_º¨ùypZíÿbAnìêÀÐОX;R9#6èl ¶Úˆvò×…Q“@¥d~çM:‘¹¢Ø( Ëñ*’¥½‡Œ 9ñO°Ù¢-óà¡zPé ;²ç‚ß ­÷%Ck”=X”KF6®þ…{¨²¬üÔQ·U#ÝGðþþ»ÐMyîšÙÑ1Á×bëÖb•ô>(èZ¾0q ©m;Bðò¦a0VÝPŽŠO‘Èyv#kkÜÀå9B2®Ncì•UÁ«ÊuÌlÅÄ ÷BGg1HEo¾X*ƒ]¤È2–äuVz1KŽù‰¦%pä­ãà׎ Cž@ýâ)K7”7%‚e¹g1ÚkõáqOc½}”„x^ýÒdÁÁÖæÚ%”s 2F²9ò/TûqV2&#†ªˆaÕ[ŒR½Åmõ®òÕÓÝ Þ‰óWšèÐJ¢4ÒŒ•sõéÐ#ø"%*èÍìÔÒfa‚YÎ.Ã;]€ÐrL˜fæIFš‚ÊALJŸee53ˆA.T†9(\5ãEb‡ŒÿÃ’js-’mvÕb¹j+4ã¶¹!ˆñüx³p´<é›Â‚`s€ ÃÕEÙ0?_\ ¿.öD'¨¥N݇¾1ŒHË›†iuc³˜?ÏwÞÄ<ájÓ&L¹‡¥ë÷8ÙMHàÓvþZRŸgÏ€Ûç~v¹<Ö; ëÍjJ"éqn¶´b°ÝMˆô‡Ì]<èÍ—OóåÜè ݆¾l'ßfÞ×Õî; œ~Ÿ/7³% ÞÎO8°gmäÔîuz6®a‡39~³Ì¯­h!ü#!VAˆUï9CR>X´’òŽ¡‰TW7³ŠêŽTè.ôCÂ_õièõè„GCyQì‡ðr¶?W¾Ì‡àCï—¿[guf•g‰U°ã;¯ˆ‡CJ‹ 4œÛ©Ç€‚çð8ÖËJrb©öFA{æû…B°Èê†zù?Dúe"¿}¢Ò 8óßé|+ë å.Ê7'KHe ôdGBí2 {’pÏà ….’H-.‘ù¥Ï¥T-ŠÍn»üüª<‹TÕÓKûuGb¡e—V†N§Í€ ŠoÖ»ýøõ~·3oÝ›6¿Õ×Ìeè^Nëð=Ï-²[÷»ihÝۨߟäkÝhuz™{©‡ÀO¼wH`ådÊ£CØøÇ«Õ^u†KéËãHÎÐJê«D‘ű"ÁL¹‹$5Ÿ¶Òwº…M_•ÿzÖ -ø–²ØT¼cDpbæ3UúN'eåUýoØÇmBô0™ÑC²s}f &Ðæ*°r~Œeÿ.ü¹¥‡…ÉÞc,®ö¨ußž¾Õ}}åeVÛ+26yX¼`X1‹‡ ;'»ùCˆçtëwÁs '+¥\T °„ÙÈ"!±¶õP€yeo <`ejk©Ærl%Ö Š=lçð×µ–mVÙ„G JF5­âµh_k®t)B ñµ¸ÑÕß>ë=©Ú“ký€JmëÝó¤ú±ž¯gÞ×—'÷²i\,y¨×Ïo*=÷q:–tW¹0tVòâü|.re¯b ¤Šåw<¸…<žcÈ\u¯› êúöÛóB­§°oTŒ¸yøÔÙê¾ Í“7µY-8ùYÆÃux(»3Èæ FI6£Q~’¦ä×Ì>Ö›“rÿØlå#)ü$ŒÙà®e, <™º¤Á‚x¨KB™ÁÃU†–•J¨~ãdŒ©ï&^‘ìýXMnÂJ1BZ²±Ú¾îÇC$~æ™lØ3g.*Eòšð÷dpñ¯u˜«ÌÐS+!‹ÌÉ7w3'¿ÛÅÈkÚh½kán›DÃÔÃèÈ„l¶ƒ' 2)× ªþýpC—iqbX¤HÁO wáYüÆ€lW· 9¯/áã~+?;çÛ‚÷zl쟖$…·õÿ6 ôÔ Pk]"f@vË;†ÜVWªûô tú¡ê -L,pã É1~ PÚÊi a±±Í!'l¤ õÚ<%‹Ô (ç¯À¶ %6c2VPäóÏÔn‚Ʀ<õZûE™â4%å-ùmês¤(¯ˆŒ²ëÍý˜(›t"c|W^cDê“’{…½æ<V‚g¡ë _åô^}:•· í«¾lŸ žn½÷T×}¾1Y ñXÎnôP|ÿ<É,TmªGå•·twJ5»ÚÿÑóJë¬')K5Ì«L#á³ÿÊêè‘$Çõê×Ýã"EÎø,¾.¼£–YìµPßêÖÂòòt·Yx_7³ÉoÞìÙÒd±»-pON±Ô|7žm”WÐ'4$S¹@CÌ7»§>(ÛMär;ÿæ ì=>-pÀüÛÒS~Ј€ÈªéçGc×莥~ºAõ9ü]¶EêB4Jy6ùCÏΊ4G“˜,É9¡¼a¨½òâl9ùº˜y/[YÌ·óÝÌX2rvÇÃz3{šÿœmÝBkñ¯fkAPp÷´øa¨~†üN:Œ.k9ëñÿg•ûˆ½o)s„1®Œã9XOÖa”‡àβpÆ”ò$`ÿGå¥%´KÌ9OýêN·Ìè«jš)Kôq˲7`™ÿŠ_¹g?ŠÏ~²ÎøÇÅZÃÛçÝ™²+R;ØóÎ×=¶ÝA~WüØRÞ3椺¾1Cɼ]f«.l)€ú‘0À´“ yp ;Åœˆy<óNLþŒ^ÂXÈ(ñŸ|uX O((#%=æÇˆèAÈŽ –„g?ŠIh¯Ÿ½B *ëøÛNŠü¤–¸íøÑ>¶²éLËš@P®þèô¬(ôwY2éqoX¥‘ÌD±a‡¢:UGP©ì{ذ'ÙÊÒ˲!é(ÛëGµA\¿Q¢ äÚ© %á)4ï¬-ouÛøòòû žƒµÀ;ânªî@9}«›°òòäÉ›/–Ú\øoñ²œÿt¶«éoÞã·ÍäÉl&?°Ä#6Žíì÷õdú&ËJn'ç¨Èž'?§«åè»ÊX’S9z©êìhÀíõÌÌu¯”{½™xu Ú´³õ².4?Ÿ¡¥G¼œ>úÇcÆŽà¶Ew¡€Ç±_çÆ¡æ¥‘uŠLðŒŒ—H=eþE-A³D IŒ²S ÈÝŠ?ûÉe¨†²(¥˜›o 4ÁË"âYmh:IÉ´(£ C4FzÙ,ø{pœí&ðîü 6N}õYÀ/düYô£ÿÒ.?jSå)º˜:§2Ƴå<÷cµe?9Zv‚BMƒàÞJkäávqéCXU»´&ä†%47<©é(´Ýp”蓯ižÐrNÙ‘5³ôŸJymxa9° ñëÉf;ó¦«ÅròlÞ¥a'gÓÅîÏ5ÝðwT‘á^ÙEàò¶¶{¢ ³³åÔ7¬Ð¬0`°ªSWΗU[íå™0õ›À*]·é…~ [bïç«s…x…ò§§LkV­ŠëK¾%½z ×'ĈŽJ{…a£¼6YÌ6;Yâ·ÓÍ|½›¯–Þ÷Éòqû}òÛÌ{šÌ/FÓÇ,3_îf›ådáÍ6›ÕÆEcª$–«åÌ9ðJGeÞšh6³ß_æ›Ù£ 3b9[x_çËÇùò›¶PÊè ¾Ô÷!¾g/ÐŽ&¸·ž=ëß¡²}Ï~Ÿl½Éb½tI  ;›>~w »t—Ý.ç®Aw‹íÛ/Þ¯.ÁWëÙr»]xÌ6[ù ˆ²¥¼¢p˗篳é™= šBNçëïjŸßló‡ÞË;{šmfËé̯ö->ϳ¯«Ÿ²³{^OvŽôr¥Ãof[÷ÜTÌ—·/¸à¿º×åÜC_°€ële!_Éãwµ›ǨºèJÕí‚j#êöµXoV»•¹¿È[âW4‚#d†cû•˜[£0nÙUd)ìaº˜Ï–;oò²ûŽÁªÖÀÛÈŽZÙÈ>¾ú8:$ áÉKýÌ?ñr{¢órŸ!^…§ ‡Íýµ)à1…Lèa2­ì蕟8M¼: 4‰ JO•Ý>¶~õÕ P6þhB,E (²7F“Á¹ ôÆD½¥¦ž-¢uª\°›úêçëCXü=óÕâf_¡KÒg«'Üh_1$à¡ y²̘/,Ëhn[m.Ð%Û9/jŠŸÓ¬¬˜x´éEI ¹^t'ÿ•acÕ=€¤kg}àGR«„ÚÔPË0hi©‹…·MY% R$ª `©Öò†vª…@ׂ~’o˜’ÀÊÚüËø†åE–àP9ž›?ýéMÕAÏï³éoòßÉÜiÊÕ!³É|œ=M^;ñóßÿõÕ^ÝùMí6/ÛÝìÑ{šo¶N°wÊóTÔ½]p]1qj–“ mµ›Ë>G6¡;[~(m†[×ÆÆ…fIq&%¹³Ø8Z®|Ù·ÓëJkÃû^ß×{ê®ïìEªøÝKy£»b©.nŸ¼Éz=[Wñê&øfú}þÇ̘??¿ìÔ‹3±\½,óåoÎÀv9Yo¿¯vŽ€œMªÓØÎ¡§¨Ð³?œÃ~›?:‡/WÎaŸÍ>ÌÀ¨Çü™øÐ3~qÎ o¶|zv}ÝÞ|ös6uüôuñ›{àé÷{àÇ9"ðüiåx±D¤¹Ì9Skb¿™}sßš=šC×åÔ9-›ÙĹŒÌ7ß6k÷Àf@à—­û›Üüøù x… üâx[•kç¼ÞVeۨʷ;Prw½Ŕ«Zá®^•tw .íîÄ æþØýtüSÚ`Jû `BÁS7~bý“èŸÎÉxÁdðú‹ÏÌù>|4ú5Gš^Ô éñåyŽcI`µžüþâ–œ(¨¦¬î›q%õvààUÞ3Ž_Õõ'ïëäÉ|$­Aï٫͈rê»E2–€<žæ ÿ4Êå/òaž“oHbƒ~µÑèyòÓ Ê\šäÊŸJå~\Ùí®ªt­¶+ÈâÅ ÔÛ¬Ç,¨VV– P¼Gù ƒ|¤¾2% 9t1Bðx—9xcQÌòÐ,sxáÇIqFéÉGatŒPO!bþŽ*Q‘h,6:y”Ç8¢HSTªþâЗ9cðø¯B`² ›I±ü'J@êgÊÇaxÞJ¾ñ[¬™÷EE^ÌòÚ˜{g`lÃTOZ·HP7H0/Í¿—C "B1ޏø£8e°Z ©fÆ€`êIƒ;¢ÇˆÂp;¤w§À¸¥³ TâšQ{,õøGèv™èz׌uqÔÃ]$‚«ž×A²{4Êäpà0äØBʵ3¢ÒS4'}Ý Ö(Þýy2|=È¥:ÃÌjbðF(UŽ’¼Ö¸ÛºJ»cÍh‰àªë­·7¦·;§,•õÁ2vW·ñ»¾%ž®´žÿ‹5Ú«$°*ü2‚‚üÿË`•Á _~® ÿžŽÁ ¿ø×Pøï¡ÿ3Tà‡ üßáÐò ÒÙOëæa¸²,Ëp}ËÔ(ªËÛ4LP‹÷±m µˆÌ -l n ïÅ,fš¬líGŸØ"!&·=Ø.•™ü8ÖÉŸ‰²ÛN43õs¹Çróܱkb™&÷\Àb_™°7Wƒæv·*\oM7³Énæ-g?¼éj¹]™?ißIÁëÍj:Ûn½o›ÕËš äÇ1 ×å_öíÇX¡‡Ê¸½±B Åx‘§E>ž^¦7\¶CvMåŸßëÚ3b§-tà´U©"i6Úv+¼‹È+¸íB§õ¥V<ûð·¦e”…;¯å”‰”‘‡²M–Ž<Œ’¡ œ\-J‰œeç(T¤Þ}èc•Þî&›Ý“:ž¼ý¾úñc¾|\ýÀש–ÊîQY˜6r8¨¼¬ë³üÈúÙ¢Â÷'ëÙ2w¥Ó6¿DAkžÐÛÐ{­Õ¹-ö¾=ñ÷Q–FnHj«—å•?–D¼²ÔÐæËõËn‚Lü ‰j7 ,¶{Hý©q(íÓΈ=tEâÀ@MÞ1ŒÑÔÕÉËã|¥7ƒy³åt¥­³L×ÓgïÛÿ|19ª|EåW³õ‚οé,&?¼ÿ¢ ë.°¯ÓUái±2Û'qXÌ—³ÉÆûå¿Gùò¯D~ý2‚È ·òüB}±Ï“oó©;ç)GÃ6k«6ìÈru6Ôí×&|Ñð!“ÑfðÀÉNŸýì• ‚–zؤ:L¤õÓX›áˆTøçô= ¡]J6ZýCMtÆÞÁ½j6NÈ‡å„ørÎŒÌÔ»:mL¨9%'ˆ¥¿¡iÅ¿ÁiEñŠ^k cÃÒJc‰_±þ—ü¼-:óßÝzVƒ D½¶aÍá)‚#9óƒÇtò¾yXW‚=k˜7 ÷hß³ÝðçPÓHõrÞsÀ´¢¾Õ}¨ò²üáÕ}ß}oÛ+¢ÙK`ŠEß4ÅSÞ˜êé°i^|ƒv½®,p@á…žZÆÆñÖX¹0cŒ±V8Æ|ïÇÃ4”Í£ºÍb9ØóÃ2Û¦x!2±„tÌðèÊ·lØÇiþ!ž|ôè˜@O]B&30caU$èB‡Ê={tNß4]œéøÐ!%šÚ@—h¼73bW7§èZ¥ÉÊ P‡äzÇ]' ‡+(°‡ˆÜ¾\¥Ô1Èi“» ½Õ¹j”àà‚ÇÈnÊSÝoºô»Ì‚¡e ìÙeC¤TMf"T”ˆ2ëwŽþ¦sþZ¤X…ö¨È4²3À·ß‹á£¯¼æya$ÒØ¿œdú<Ï8P» *¤bˆò["t” ó"w ÄÌÏt}ñ?8ÁùÚ‹LV5\«g9NX½ ã øid3ÍÞ žß\Âí‹(Îe––/¿ìßœ¸KÎx–½X_`µÚ®MãWg‹\ž7àé%‹Ž§Ü%‚VIuÕã¸ôBâ¤Ïå Ö³QO=xý·“µ¡,W®‰R€Íª)|ãrÀ5E9àØ¶9M个øîig—Ê¡Lôáòí)78›Âªp.ºéÍþ€ÜÏA÷æÐK3Ùh]ÜQ­«oQÚÒ›»>îÕ‘±>~ލ’ŠŒõÊG Ž”ò³(Õž9ÐQ¦¯ý4:S®ºd¸8:» ¬Çw ˆÚ”2ºº"¿ëÏË¢Õô»€'öè,”O\;RŽ ‰ìÜ’Ä<9:Wœ³ÿ%¹cÈzç CPµUɱ‘—ƒ6_Ût ¬»Y§ÄUR…óTÃë¬ZO£³ëH§‹ý\íju ëܦ§â·`_œ‚]~}}÷³¤j^ú‚ bû)Èí§ µŸÝ j(Í“ /‚Ú_žÑì<ë}=õ3‡€Õ>²ÞÅÑ(6ía“…}B¼ÏÑ}xU®[6ä{ƒGê ¼CÈ€'‡èÍ Ë»¦ÙauG/é_½“§=^[g4m=PèÍ6\vUT‰Ú-ôà§©›o*{ŠQèp«±'ñ9H¼Þ!‹]EÈÖùÌèÙ –ZË„¨9nH‘КŽRˆ9X«ä-S•R—õñ 5GÕÀ-Ju)hH¶ÝòÇÙ¯H®y6FÎ×?©Ü,ÞgE}³“Í¥úwé¡ïž· 7¨îÚTZ°ºÖ{²ç¼ÚO ZmùórþÊÀ#Ö^V—=7ž)5AY㻾›­úž!WËëÓ«ûëwò¶@eBÝ{Zmž›×@²Þ¢…b>TGœÓ’úmùBHæwæËQ -Æõä'!Æ^³ý ¹•C=ÿLcw~FŸ"ó¤>æ¡òÌÔYêv›2†á­F½(+ à òSëÊÓ\íºcç=ðµÑd>7ÿ¸ÐòR=FÆóq$ˆï-©àÉz· žLý亂ðF¿åÔ›B«žÁÏ)µº$v“÷í?óõÚhM!²^˜ÝØ$æU1Á¤]1êå¾8 _Z·{c´À>•ÖÏÚ|ºõÒ‘ØÇ¯´DGrpžQÑzȱ"B+Ò°Ô·‰8!çqÆŽTT\Î44Ž’×A¥Êæ\¬VžkÈô tl}µ†í }/œsr#T/Ä“â-4@)Ë_Ô:Â(YÎè[M­qv–-°]†Å‰œG{ó쪾Û_5wvú7c_tK›0ÛPÕf)ƒ«¸žÿr2®×m`.z9Þðgq¤³ê“íÀøá ¬ŽSxàlÁU€ùGhÀï*ûÿ\†)ˆ½§+ö0~fÊ$fçË.cä©Ö”±¥KÔ}qŒÙ‹É”_¼„yi³{v¿¤.ºz‡Œ;}NáE¬ê¦¡•­n,eÏ*k¬\O–NáFêFc›rVˆ«I®ü½Ú’ØëW~~ ÕïPPA×Ê¡ûÑ‚ª :PÙ9â(úž¡0–×ó Ì|Іé }‹âÒr–*Ä É¢†ixPÙÙËì•‚"ã9ðDnÈ~yQy;à‘z˜%oQÆ“3Kò?üì[ág¡yÜ&òÛTÚTû ´‚(™"!m˜àE°G–Då¾dãÒ.,°›mwOÆÅ;ã}ßíÖÞËfDåO¾¬Š¤´*›ŸS~o˧F¾¼åv±aA³™~šêTÍu‚±”ÃÚ˜„Ú¸âU;WU„Î+s¸¶I•…äÙ‘ûä¿1Þbe!«ýÿ‡Œ‰Sµg}%BÆ…÷—þ°ŒLº:·S–R%j#kˆ;cQÆo9+•åyÝÄâhËÇÉ;è#o|dw›ãò¦¡I®nìä/?ä/)TÛù û*Oï#lŒ¾(0rr||º¤§êÓî¹0ã©wkx€Zi Þ«ÁP½„8óžPó]Àú1¤H–×È=e};ÉŠU¶ÂÇËzå@BVGuöc”6Gó‡h@þé-|ÈêÄÛ³˜§¶Pu ݨ“š8›}«Û””—xåÔM¥¿ìõJ€ö$­ü쭪ר©©‡æ€!J9(ݲœ{‚N@i™¼èkØ-½ª,œÚBL.•êo†=òfX²ošET…hHzÚ¯äôïšÎ•ø{}væ e]9PXB\øÈ:–u“8zñØdQ@öCRzDu­ßÄx9S'Ç-Õy'–=¨¢Ò³þ‘4ÄGg`Í —z|9e% |Ù¨¾±©åĨîT¾2<°ë»Ú\F¿€KŠ«!=,ܘâA½²Þãp}´í„›u›fÜÒÕ~¦î4AÞèÎÔE?PEÿKx©†u÷Ó×¼qþO˜c`Ô‰2=BlbCpœzè_bÀʃ!ôñŒS×E ‡œ_qáEÌXŠžgdy–¢‰"Õº‚:Õ«KàôÕ?î.ÿ°óg +àï àQV­(7V.yî(ZØ}øÒ¡¡²ncî%lhÆRxƵr­'täªcÉúÅg–\4 ×Dº3׺0êT”ùu©;Ý·¥¯Nž×³©è\™»À³ß_& gbçòëdúÛï/«Ý̘Î7Ó—ç§Åì'ž@=ÃtµX-Ý??O\?ÎgKçz\!‚*³éÛÅdû€ r§âv“ ž@E4[>>O6¿¹—ÖÙï8}T`åb·úmæ\0¾i·LdpT¢æKLqšog«'¨m1ËÕR¦éy¾,ÓäR¨Å×ÍdêÜ,fO»í÷ùÓ  ²X–Û-&,N|í^‰Ûß¿º†•YJ‡ ÿâü”ËɳóKZÎ~(÷ÎÁW¸—³Üy«§§í̹ ,_ž¿ºWÉ¥§+¼sά֮!e¯:EÔÜ*8*oÖ ÷WªÂ¢Ä7¨ªº™ûŽ««W—,D}Ú êÓvöÐŒ`ö‘‹Áƒº ”û{×;Ôqd!S¹Ë{‹Ø»S¬?쫞È]_Û¸8'H(”…(ghHŽNHˆ}È›@BX¦×- ŒžZ;zÝ)\ÓÁ<Ò‹k誠â;FœyÆß±¨{ÏÚbÜ{Ö+”³39ó7lU€-„Hêgø÷•f¹$Q-)¡ž ÆÐ„ÃàKQÃyÎÃO›1Âk»âÎk›óã1ÆGÜ åþÑÛCN`írtÞ|l£ýQw‘æâÎüˆÂ#`‹ÇÙ¨×P"‡À®ÝiÅ8€ùÜÜ`9W^Sví­§õó˸6ï¿;….RpÛÁ9h^d9dßCßꦿ¼¼ñß×Ì|°¥ÅÝ»&2Gf+Gœ¨H$À㘅S?yó<ù)ÆW3såå˜'`Ÿa¦ÑQèìøƒ_áåóˆ:#LÍLí-kN0ñ^Ùq@Pr4”x¶#6.åð’&ÀåàgX($‚ͽ òQÄXÆâˆˆ¦ŒbÁ܇­Îôq V[#¾(h¤¶µèŽ…ìX{Æ@±,Þ¡œò©]õH s!ϱÀ;²±$$´ ŠÂ· êT0O‚8Â6zds‡ EÊégøÆX;‘@gžrˆÖtÍ(,Å6*Êñ¡-R˜êñ)¼¥Ï9Žh­‚ 9`¦$ïÄÏXY×#¯í‘x‹D´Ç>LÌÈĩϘØò#ãP'þcΑ=¾W!5Y< 3ÿˆe^Ù‹´rb°²‚“̺ß ¥È&Ýd¥Ê[ºù–¾IÈvJ „ dAM¹@‘í :@¸ð™lDý™4µ+”K>Â)c–S3„Ò…IP¾Z|ѸòE ÈðåãàKžÌ‰ž t•êì"¶Ì– ¡Øê/\±…c|†²Úï‹ÃÛŒ)4E#ï<‹Ã€óLf©Ÿ3|}  d/B¨•åH_Oü2œ)cÈ>D`+~­J ž ”ÙŸ«ú¯v1TÚ¶q„{÷[Ý1ÑáŠìê}ܘxvê{4 ÿb¿${eª_^JãÖäçF{ e;û”¹‰oÙÚFÚ[[]Þ" +9m( œHc9`K'6žfîÇ­ûHûÞ> £¬ÜÝãC_F:Z÷"Ê~ì‘g2ÏÏû(—zZ/‹ˆ«ÖÕ†~‘èZé…™/rÏ‘ŸX‡ß½:×MËú©àtº—·øïgÕ1£žöõ \+/‚ÐûÕûâý—¡ꇓHýl»~w”ÈA×õMSõ-o4£.ùÇ´Z鿟°ÜªÜàÛ×(ÝU±›°ZPbŒ5¦öÄLÕôØ_ï(¡úŒÙß…,5ùå :Øè¤%ÔvÛI|æ"ׂ•ÔT`ʓܱUÖÒóÇHØO~ œp×ø¦=d㨌ñPód¨€,PÏO -«í$Eò14ÆHKÎÎbŒ—¼`BŒ 1JR¢qZšç"Σ…7Ž!&_×xm IfpÝTcÕ.©µaGö‘>ûypbCËÓÆÄH"e²†Jøl[í$$¥hnÙ(¥i—C €ž{K‹¶|[ÿEÏeís­&ª¿KSt%^åèrð£x\dlÖ¶`²Aí¢…äd(¿Kϲ{ðlH ÎþÇct8 ‘€ Џ°r¬ú’£õºÄ‰gÍ/tÄÊI¨5½! äÌÏ«M@ƒÈ²à>àœÏ T»‘e‡·ÚƒY?Ï3P¡âœç*ò’°*k†Ë]·V‘ËIéuL Ô¸}ÙÕÔäP™¦2<-²û,âp[™  # _Z®QæQ¨}ð½Æ†6ªidx:ü ¥Ä°çP‹J‚þbŠû:=´Ø½û¢R:¤‘ü¶¨v!ûÍ=x^¤ö{ä˜õr2ñýÞºÂðia©Cž–8iöð‘èÉ?êú»møÁ;û¯Œ6m͇¯ÃîîGgÝáƒù+$ OÒÇñw? cp£¥…·x¹´Põöûkžaye‹‚œè§F.ªžšhÜKW 76‹åMó×=}«ûm¯¼¬>)GœoÕtØjg¶­Ô’xò“àò²Yð”AÕÊ|Hå,&Í•õ§ÌK¥À;°Bb£$à7OûN¤W$¯ 8ïSȘÚ ØYé¥[‚ª™÷äÏkvÝ7>fæ¨ýB}ÀÛ—.õó“ú^ÿEþ#ÿ.8¸Ù׆xi\ Y$„È*ˆ]©óM×Ú(NO ñÑqø$ µ µ3øÅÒ€}Z°/“½Ðö{¿ú" &E~juæ†àK'bPD†ÌSOÏ=_^ö2ö7³5LíÇè(í¡)쨌‘DùØŒ’¨§Æ¥žÅ—“FsÁèxퟩ§9ïQiåg%8ŠV’ HÓ5cáV¾G¢ê¤™3õƒ{Ú­)%äŽU ÷Ïþ‡vV51BÊdkÔ!>G+æƒ|¥øLT{éI_9e"‚¢þ¾Û­µŽ&vÑþ×ý‚OÑ”ó׈­3®&óŸ ;^ÎjÕßùº–(µÇ²¦ë05‹†5ðF…Á¹ì0¢·‘õ¡%ž1_ôNmôâq‹—ù˜1‘òÛÃjb€µ|Ü” ZC°VS+ž…ÏG|ô-¶êîË¿¥B¶jIØšö Õû姪6o˜ŸÑO¹aåNuêKºãÛUøWJ¶ê}Yïבõþg¸^Vý­¶¸tjSÜR_å¶ýL‚PãVz’ý¨ÓlÄnQ]ßN×Ç &¡üª5HŸ úHä ˆQá¶süBš†õØf‰á©¢¤es­XF­æ|sRÛ´2Ö-—m¾HêJΆ‰)ÃfôGQô¡ˆc¯Zª¢) Mÿ‰cÛ¸6]Qdžg‘2¸)ÛÚ )9óQŸÇÓ'_ (ŠòKV})< šB$d•xcYtˆü}LÌeÜZ­Ø^pøËfA›4Ô uÐÿR.PPZ¿[tÀRǾˆâл.ƒk—¶ú°F¤]VZo±Ôσ–LõMÓšiyc­þµ|E½€HUI--%¤°UGPIq뽿-‹í}dŒGå/!;À–ôìè_âK"‹„k‘ ãUóÚ)¼B¡î na[B>Ø›¯¢•†BŸÈ…?ŠÜ†µ@¹ [mïî¦7 )–•åíz2yFÃWÒ€¬æXD6ÖXäç¿ÿë¿Ü˜Íl;Ûü1{ôž^v/›zžO7«íÊèØÆ-§Ž·yšzÿúåË·Ð//s£v èÃþ’[69Ù /fXî±8DÇvbX$²|}"K°È›ŸE>>¦¾à]Lö\‰­.wõÏ/¸à¿â‚ÿ üßNÁe† w£oQÈxvùvOЇ<è´_ï~–4ž¾î‘ú&H)›ÁÉk‹Ü×´[øÅ9ËÚ°áIm¼ö9Zý‰Çµ•OzìÊ!9n)ó4eàiõ ò؇ìè°«ïÁÓ˯¯òÅꊔ¼híü¯Xþ‡üÇSeÞòñÙŠ)«èüœ&ÐÉœéöÁe@+ƒÜÜôÑg?{%ƒ,$6 N~’°˜Hë'¦±rêŸi¨ðÏic/G«¨‰ÎØ;äbÊÊ]íà⸜Å1ŠÒÆ 5§ä±ô74­ø78­(^qÂkm`BalXZi,qâ+Öÿ’Ÿ·EWž°\,ë!@èCêžù¯;˜{–ò^·s©®Oý8Vkr637mx$0Ô†i{³³wˆ½86µ?äÏߨåj¤Ò8¢s¦•³IÙ×\äM à¹K‘e¶fwVæ?.Ø€\¸ãu>¼©k´G¸—#JÉ®°úU"j[?.°h³’ªJîñû}Æß¡%©ëmC³ÐÜê©h·wlÀ“\;¿³|^ÅIx àÁ/ãA^Ñ{¤Ž . VÐÖð÷“õ“Óéúñ õ1 }Š‚Sh>¼QÝë–ºêz‹5ÅÖ¦5%B™Û4ÇUÝìFVßøÊØ¿ÞÀ7ÔóWo>]-'ÛÝl3ßþfêKzáÙÏébò<ÙÍWKÿ}²|$¿¿Ì¶¤XWØ- zвxû—mýbqèvùèMóÉ—\mÿ\NñØÓ|1S‹Êxr±Z­ñÔóìyµùÏ-W³§ÉËbGA·;JR—«“9!¾õËæ›c~ŠcŽ|Ë{Ýú__/¿®ŠA°Þ’>ý6·|彑5Æxðq!€™N¨qN0PHíˆ Ž‘W/Þ”+·"íyxÈ)zå&1¦$/òØÎO‘S‘¨7´'vãýj±\æ^6žX”Œ ¥w®õ|LÁ)Æüè±¶½¬)¬v'ÉÔlÞ))<–¼EÙX kÇ©–„ê¸Ç(R*³<ÁêSç)µªvÆ Ld^›§÷âèåã$RÝôô¡™÷ÌOÓ±JŒ–=+ƒ˜iy"`lÙü¤VcGT•eÒã•MJšäÐ.{«¿V‘$® ~ÔQ²߯Øxk¶oŸ«³Žj°}h )?öµÚ=tVÜ(<üØ~›Wû)ï¤OL?$©qpR¦tž½ÂeQ*ºmÞЀÌ,EÊ’’¦ã$Io¨²3¯5LÓL7e:¥U’1BE^™ïÄ–~꣔?®ó Ò°Äâ(ðUJ½"‹()8Êò&ZãH´@$¼O½ýEý )TghÈPöûÊúH”ëóÑ‚&uй§Ì xQràX7?ŽjGwèòPÃõ/ܹ(~„dj¥¼Õ‰³º<åI5´¶.·EZ4…YËᔹ¨[Ýî\ èu ;œª1œŸeþ… 7è(pÈ hü}”ðƒrF†yêÿ]ÐS^z7¤âÊY:•–prº§Ì®ÜK’b+D<„w>V—nð¶¿ ´9—Êã#C¢.Z[p/€nîðm½ÂaðC Û†Ž¾šu$ðuí^ÛNÜóÃó gó`Q^ïvÒòZÈÏ`xyb&rFýóÀkóЦ9öJOÈdj5‰lgõ.4:ågåñ¡>a‡‚WÏ7ôã Ü8eÔCñ‡@»æyäAq†,‘Õvо4„âÉOR²Ñ +Ui¨’4i²x•òˆ Y§*ƒ4fe.¡1ði*³²UQ®[²"€{)ã¦%9Ë?¾:?£k‘šà[^Öú•ÊáJÌÃa*â"rv&©œËNvý£v¢[éÙóz÷§×3|˜†Ñ²Œ©âFlòL Ø‚jÔ@×gHe@jÖf›5U²ƒø¦Ú ÔT”ö}&äNd¤´Ð Ž\ Ä•@ŒR ÄH• ¿–{T£ö=b2@pºT«þ”vmž„ìƒÚ(ΓB\ MA/VN´õûÓ“¯ ‰²l€Æ3£Cµ>@f›û´¼Pe TåèÙOÕÖè3®4Ýà1KŽåQ T‰Òî{ä””–~þ({ÄIówÒÚ¯`PÈÔÇ –È‚Å!2#5]g~Ü£ù@Å«~£ò1OM“fQ&òæÁñq·;/Aˆ_òÓ›ÇGòQ¢|~ežQ?[Õ÷Óò.öe}ÅDãI]ÿ^6s¢‚œ¦m#9Ö†ý\õ¨ŽŒþòŸz‰FÿAZ¾©ð–tä{//-–A{xÚŠU;E¼ƒÞ[9B£6wKcY숸rÈKé±j”Ú[ñüIm¦uù¶HSžå´.ƸÀB[=4Kå~v$Ìþ·—$÷?(O¤xhð#ãɱž§S¢þù}÷¼ M®>/–[2Jå{é,ŠŸÚAs”D}kóUp¾¾0ÜH‚Z9—MRž_ê CÕÆÑ)Ù:¾Ž ¤÷´N“ͬNdÛ|þ¡H¥E÷•¤* X’êûêCÆ›,Ò2EÌ7Z6*öK)O~ö–O¬¬Zõyë[rÇŠZ¾/»*®åO©:(·“Ÿ_†jÔÞ#öÅAT# •ë•r)ïn"N唪#j‚™|Ó¬^€ÙÉßÁêS†deHý»©uôZß“€DʰdëÛ‰©@Põª™2XàéºzaN¥•¿ lüË!ЧäÄ!ú,Uh×õ`aÙCæã+Ùçˆêå–Œ%Ÿ"®ÌøÕßAâåJÇ'è‚fz‡ÊfŸ£ú9D)N9~e—OÈ_µ‹œõì! ‹— ãëŠÏ¨Ò¹ü”~#÷ËÍöã WÅllázl2f‡¯÷ä{Ë8ÿÝéß?¥>7ÊŸÑé5âŸÒ`èß?³+©#ø¼Wú)£üyæjR|tiøp06bÁ ‹s:æÛ:dõ–ÀÏQ­OŒ¥ 6~c«zÞ¾u=´èè‚õŠŸ×|S=çãƒZsX!Й ½vž(Ó‹¾g\’¼¡Ë³–Ö…×-@Dýk=µ‰±:âÄ)ÅQÂ>Ž?,û®´Êöoª·ÍÓ3»iHk¥là«’WÊ êd*Ë,ˆ¿[ö¡4›={jÛØxªåºûxzE¦v†|½äLï•P.:¢SçdYœ÷°ŠîBÖ†U+Ï££eé­ÞL®Zµ¿£ÑYNUµÛ2]ÇÔ},^c'·Ê…1%›M¡#§5ò˸’ª¹·¢jÉé°nª£6r¥×ª#WùÙGy©|K÷ÚÀ×t£½a‡Ñ À7–+3Q£Í“´ t.¢Õv³ÜW+—¥ÒÊŸÑiá±{"-ú9}ÑKé#0ü„>éEVž±è˜<î‡Ëý<Ç£&¯4ãáÕ{ƒ÷•žíkE¯,Eg!ËXèõï@ÉfÊih¢ÜFÁXƒ‘² :DôÄ ÿÜÕ$ï Ôõíä§“5ƒF‚õî<«¡Tg™Ê”8ZDöðc" x8è©n6ŒÒ#]áÔªúà›mlßšßp}_o›µD£b¿ÔCPÏí…ý•!e™ž7ÙÍbuûl7 “µ % ¯õ“g?MAÓ1DqÙWñL¹úqŠòëzëhú)Ê6%Áòº˜,x`ýÞN’Ò´-Œ«\ÈÆ/á¢5$û4á‘K¹–±œËØMÝU¦1Ž¡Ædc¥í¡èŒF‡I×ólÁã·~+¥6Ê«_ƨzcŒ·Óº.€“°‡ƒœ…ų‘E[ÞRéŠ~{‡Ò(“vù;ëÈ:eYmȆªT¥ÆcÕrwY/G¯ù¨è•g8GVE­üšè•–ª²2T³²[õ½Tµª¬\¼P¶Sŗm ·Æ¨ÃuùÙ«ÝZ‹ÙGÈ¢3få–?¬œ66ÛF€ÅÆ™@ßwvê=€cDåÿÊÆ±°N=tpâQK¨›OÚËs½ôµ÷-=HèK®›*©:L~Ú—›}"²QçÈe=M‹Ü¼È‚¡’嵉Oymb´×ÖZá£WÙJDW«»ýÓ¦97û3ÆÑéµ´Gz%rP¾i†‹ô—ÒÈ”¯åþ[Å Ô¶\n–ÇRí®º¦|·T6–nŸMo‚亚$¦i?Ì…UŸV¬Ä§+ñiÅJ|R±ã+)©Z¬xTEjAÍÒÿOÛ»-·dí‚÷z D쎉ªÝW—]‡nOÄî%ÙÖß’¥¥ruß0@¢Ð& Zf]õCì‹Ùÿ¼\?ɬc€Ä‰¬¹¨²ˆ\ëËD"+W®Ã¼5s’–†ÄRò&ÛiË*ér‡Øú‚uõó§óŽx<½ìéæ@ö<_¥Éæ`þsŒFŸµ:2ö3üâàЦ¿E»çÑí&®d3}Ö p†ÕþF¹ÆLžgâ~=ê`‚Uù<·—'‡sã­ÎüÐ~h ­ËåïÔ“9zÒ®X„ÂëËøõÄá•û/ÐÛãšÆv9~˜ðà}ºÚþŽp“l¹éÜ\Ú1g¼µ«CÛYѱ<„q•'‹1ŒE²Y¶)lõ‘£¬ý-ÛŽ"6©˜ë;—”5ö-}þ&YüÓ²‡¬—<—õ £ZóÛC˜o÷g}€÷s±»þ6¼Ç·²ÿóòvz~ñöêôþâüuŒíŠÞèŠR$ÇqÏ«£{7DðGW‚ª~€U²œÎ²ª<åöi·Ëw/Šfì:î³âº‹ƒ>£æz|ofåÔ‘âcˆ3[£)|›øÈ¥!RJ°ÉôWg4’aþ «™‡ò¾À :Ùç®n†ƒ¬¦Ò-ûÄ0 ÌÛª^…ÒhŠ;MC²1‡ãÀhÅœ©mÎ ƒqð0ö»|®îÌ!˜6áo!eáoœg7S³«†›ìëŒmŸ¦ÇÕ®|ÊužÎ©Ìa[¤c_Ïa>´­°ÜÁÁÖÍÅ´+8dz¨M»²€Uí¯^¶­ºM·{Æqä³`*æcZå¶±<£ZÖÐħã'T6•Õâõ|½È•x‡~'ßÂŒÃÔ¦˜9Ue£QÜʯFqRsÿ:Š9Þ áÈß!íŸWI‘ç¿Æñü ynÆñäÄ3–‰¸þ>ŽéWä¹ÇS ÏdX/¿DÚ‡a´ß#íÏ#ò|ÇóŒ<¿ kÓH;?lçãYãYžÆ³dãYÖãYÊñ,Õx–Ýx–ÏÃ>û+¤ý2þÅ‹ÄòÏ:Š¿‹–«¼,ñNHñiŒËÎËW ©q­’YºBÒ秤*7éó·/_¼br¢9ÚäÏ«t±ä®'/¿ïäý¾“÷:‘Á)û6ˆ¤ÒËúߘÎgO¨ŠG`–ÌÊ>P%û>ÁI§Èá`÷M„Žî(÷"ºf’“—?v¾è/Zå¯ú>~/¤‹Ñ·¥¨U¤{'¥|Kÿ03¹i‘næé~KL Œ£Ó]•¯“ ÞúvÒÙ&zUyô*¢cNU$›rEž#\¾!õ0áýKN~ü>žeUœP:ѸȖOUË OŸ³M‘.«ÉÃ@Ñ„}ðç'ÿëý¯¾~þôó›Ë§wÿ˜žžŸu¾¥´µ.2¹‚áú6Êóa<ÏùåÏ—ç£ÙÞ^ÝÜÜÊ|5yùö~4ÛõÍùÃÕÍx¶‡«ûËÛ«Œf¼¹Ír{óñb<×Ýaý1yx39»;„íþîôl|}÷w‡~ò_FuæÝÅéߦ0ÂnGð<\^OÏ®N'“±LW—“û±<×§£Û6¹]Ëäêòìb,ÓýÃíÕ¦³Ó««éÛ‡g÷—7d›þí㡜?ŸÞÁ:®â›ëÛÓ»‹é˜auvóáþòŒûq£ñüâêâþbzz7šéíé˜á(Lï®nÞœ^fÃÜ…£™hTþñOò}w ßËù^ç¹®ž?ÜNïGføe8ÇŇóé[XI¯Ælc¿\œM'÷×÷cX‹óééÝ»á\oA¸¼³ñ½»¸Éñþôç lÕÃõŇ/ty}{sw?}{ws=šiÜä¦Éý˜íòÃíÕéÙÅ8iÏ0}8€iìþ­|‡ |Ê=VâS¾±"Ÿá-ó)çÍ_o¤Ô§lwvÊxN9’à”y”÷_×·ÓÓ7“›«‡û‹‘l°œ|<½;ÉuùvΫ ~Aø ·ã¹©sÆ2£ì8=½½½3¯nNÏGÊÄrvu3y¸»ËuóaŒ@A<çwoGòŒ“[ˆe¬ÔBLW7 NF2[˯Oÿv1¾·‰k¼$ýaÌxƒÁ9}=ð·q,Þ 9Œ§Ç8ÎQ2ÑíÝå‡ûéÅ/·wcy@ޏ>„Ú7–íÃÅǫ˲«ð÷ïo>œN.nø[§›ÏŸ“"¬Xå2‡ïüâÍûØà´óñ:çÍ?î/Înd—ÃÖŽÉxNWîOß\PëûÓÉûÉÅÅùœ7ׇÔw;ùùâîòí?Æ3_~˜Ü^Èö=Žñæâ|•Ë|Úk8;ÜœtzÀ§ùpó0¹¸›\ÞÐU7·÷—×—ÿ<€óöôþýx®Éû›ô®g7îã‡|(7ˆÿ÷·ãïßß]À)à°yûðáÍÃÛ·w‡Lü²oN'|ÿonaé&Á»â?^ŽZ ïN/A üùôŽ#$†»‹û‡;Ô/]Ùòînàœyóp7Ž¿ûÈJî?ŽØG&ð.·°¯ž]ÜÞå­q`¶qª2æùx)s}(ÏwÔc:b¬Öj´ºj´žj´‚j"ÕÔìËCYîÆ*"™g䀙Ƙgì)€¹Fià™eÜ!€yƇí»ÃØ^Æöj4ÛHEç]åœÑÊ?–íò ®ïNï/¾Íw3ºªÛpFVu{zö·éäâï ˜`ÄÕΗ§F â\^\Ý•¦ÓÇÅjœö]>3±”«¼*û9ˆ ’iúe[0uþ)Ý ¹¹¿ÿË0V³ñ\Éz ;4ÑÆILÌ€2ËwlزÈçAˆ%:¥²ê)-Óh!±Kà(ÙëË»žŸÇÉ6ûVËÔšïTiofÿJçÐì«dŸb†Aټ筕%F–˜Yâ÷iMØUO±†ˆ ZìŠüù²Þ¾7È~ ÜFAÚëT@ù BïœÏþÅ… z³ZDo˜\=„-Î"[¦euxKω¿³©ò¥Ã°IÙü8ï˜ád¬õ@GtG'hêòò§Vƒ˜Ÿ,WÍ&Y,p°¢K]œËH V_<ÎÿüÒö ³]¡'žé…ÅçÆÿ"&ÏÆeÃ…¿Y¶Él7GtNУ’.à$a¿Ž¢»MkKÒGèCãhqzÁžÏ¶U«xžo³e7T²R„3¢ÞqXV6ä=,o¶Üø«…rpÔÐ2kY²Zaœ! ×+3_¨òéÃgf?¼ ¬&Ñû4Ùlë@‘ÂPÐlÝl1V(¢q¬£»8ƒáw‚¶YNÇ*ø‡H‚XD9ãA µ–nf5$t8<‰Øi›õ áªÈõ¥Î %¥p.‰=]ÏÒÅbû…¡d+/fWKí²Ÿßg¶™¯v‹´Ÿï’ #ôÕTV(À?œ€Ø:¦Ç(ñ›£‚–bÕ§&ogùŽ#Àƒ/6Ç_‹] úqk ð=ˆÏÃbØCö{ uTóõ[ 3ën/-Tôª}uS‡ýv•ñ4î^dh¹{΋O¦^Ëi—x¶'~´ñ#ÛÄ(dhJy½)fY…Ò‚xÍ)dj-yÊŸ«üÛUNÃ^[Á…!ÒwHÊHQNØm¬ÕPÑ›¹…¾!êYƒ¯‡£æT©,L˜d½]µØY–OøµLo™6“c¦qHî‚V,ã­¤1 ­Õ…y9MvX¼£·›á"‚?cU£¸èc·lñáW]R°mÃ;V¬å0­ùª[€]ð; JÚfB^dÉ*4B|0öª0ÏŠtd›E› æóšê,A•ÃÞâMºÏq§Ú—/ èó‰vù3`¥RÔ7Áˆ 0˶]=|`ZLËj]™óvîç¬B‹þ¤"Á @@ªÚ`Ê GvÄpù0ñZ¢Ö„ÅaØpk´~BÌEðm=ÒlA­K¸b‚PÀrü‚}¾Ü˜O9°'N].é‰ÒÁ:öÅƾÜ~3Y¼{•R*m¤þ†^–)|©ÂÄßu¿(¢[„7:pþËxÔ _Ο@ 1üº÷KÖ÷êDc@é—}í*_8íh„{œ-à-1/\QŽW/®¯(Jö× ·ÊÐãa5ëJX` ã)ÒŸ sd\a *ÞäU:f´Ç'ÖµrÈz§ÄbÝßVúm®a+°ç¦] mÍ~£=ÍÔÈ ªA× ŠgÙ-æa¤i‘n“úª8jÀi¼òxSvKrቸN»AÏÙ©æ1A™Òb ìÂîb¤ìÆ,w›dg¾ÇÔBÚqsS¼—q]Æb,²^x²€Ä €àœÜ’—âQ;Ãn‰+wºˆ’ð¡åÓßk·PÀо±[æÛCÿÀ¼f2K柪<¸~cd– ‡ßš¿ŒÄ\讄:]ÉI}(Š·î\SÀa¾“ºÊ Á$ƒÌX¡a¶x\ Y ght„~ƒÖO QÁNè ­wÞúíѼ4ˆ¾Ù2kýžšª'Ù$«}™µÓló”~¡¤¥%L¡Íø€„È…~Ë´8¾þO—BÓØM CÖÐ÷†LÛºP-èÄm{¯zÕ_á±Ηò|ìž Í诬Œî'^%›O1^Ì·îmáPdˆ`ªlÓ…F÷2X{]Šsj† ¤0¶P ÃÁ}âBOáZôRŠdËÍ{Áq¶Š³«§b,Œ2îý(ÈŸÿ~›Ýj5úÝ>“ÿ^H2®-”ÚÆoK@ÙÓ:0µWd Š^t¯;ƒú?ÿþߨ;ø&Ê‹o"˜Ô 8v±Qd}-þ]§áE”!·6dŒOc¸Ê¤'\ú}ÔMº)ÏŠüŽ6x§PùjÕêüœÎ„Ö¼ÿÄ aµoZ.³îÏE$ õ>)Ÿ¾‰ÞÜi*šÔ94pöÆlÔÆHl1ç— ~-‰ÐJ;Ž©®6š&S$jDIØ¡?„žÌ?Á(øäƒ"“2-$¾j¾«¶»Šn#@¸XGð!µdµÚKÅ]ãÍ»/äºø:]çÅþs–>;ý(&¹ Åß|?{—âmký—H˜­ˆßçãÎsAž‘ÆXÝäâ¯EÄÒréÏì„5ˆi>²¶È(ª xŒ.@ˆ€ØV«¶ÓLo«ØÒ=Ö´Ûd_üjØz Ÿ7ðåúƒ`H÷9\ÖTˆS£|þ™•§3Zgª¸ hð‰šMÃêmNg%˜x-“ugÙ6Q©,ÙTÍÕþLK,†ðiÓóל·ZÂ8VŸ‡;t5š‚'³}•&E‘ì»fŒÒx} OìDGd›1D¬Ú–×^X¡Hâ¼Qp'õ5WY‚°õ) £nË C|Bo£BùKøšfa…`nÍ·gþ=OtlvÉêÄ7Âp€yF›qFý>7ãßõöÝôšK‡’ÜD ¼‡°»uÊìáÜ]s|v-î[‰kC1€åÒÐeºy²-wræð¤€ÙÏø‡a9:ÀO…<5¥a1–5>>&¢À÷½¤eÁÑ]­3®}.˜:Ó"ôrºø‡[8óÌ-Ó$¦%®†{jsɆ‘Y¥  S_BpT €L%ÙêíÁTuUð5¸DA„.4‰€Ô HV‡‘2’ä ¾ác^¬4CÙR$Û –0œÉµá¿¬xó"ÛbÚ­&€)K[ÉBŸ cF_ÃU0Iíèæ±×Žmö¬‘ÖÅöÅ;m°›8§þ M Wyh1=&ü“$€<ÛTuv q×DQ:Ÿ}9×qÚà7E2øI:{8Í£wI1È™g(ª³½ƒp¦æÀC²™uý¦Hð×£é2âð®Ø täìCV³= ÚœÐò*’iíðW–¬²ßhù¾æÆù…Sâþ µ¾¶UA8A»]%™U¶Ôú˜šÔyÅ*Â73‘Ò*´‡àSa©¤ß埥H‚³NKjü~[͵¯ÇºR‘1òLà¤0ß6\|*,Xî™u²Ýf!n)`€k¡ª½)Y˧db¦³<%‘e&Ò÷ è{¤œ·&=gNÙšj]l,N›Ì¾1jÐÕ·uwW—#u“uAV,ðx1Y.'|¥…qâ}eµŒ Ž5§PO»žu”Ý€RÖÆ Š”-Ó_wƺÊcÕYš•®ÖeZ…XuAOëÓ²\eÁÊð±ð¬²†æ\2ølöfQˆoQè,›ì¢ BH™‘ŠÖf sÕ)B¾aì…¹a¤ù\XÐ {µÛ†¦=–ÉB~û)A“ ž «õ”Da.Õ…å°ÚdtO±ÑƒP©ÔGj >Î µ¾xH‹ªÖE þퟲåS“QKìªò3<‰Þ#ñUú®ðùœ&ŸôÙƒ‘FùˆŠJ;µl_<°¾£".¬ž“¢¦ yL~mê@>Ë.QVFOI±ø¿#d„ƒ`BÙWn£4–=™ÿå/-Úæ½c70Of-v×eæèÏNߨÆ'ó§ô±ÚtÏw†Ìoïoëw}óDŽ_‡ÝÈ#{2[¥! }‡=ÃÅz·â ¥jÓHˆPÀš®Ázª3ÙoE­a´8ÚåEg„:FÙŽxØ>ª†ôî™–ôT» žÏ3_¸¶ŠîI͵K¸^=c¥ÞÙx´36.3gôm™Îw0²÷½äg ­ÒâR#\'ö>ØÔŽOå‹ôåb>×ñ‘¡#á¢Ýx$Ta`´" ?U+ÄÆ)‡þmZÃÔ†®ïk´¦ÇÂzŒuQ ˜µ#vÕíˆIÈfy` p\”ÒVõ,nîéœ ø=RênvÃo‡Ñ•ß@+†¹OµD]²pÌ󴘫DÖ7d…6.šKH—©—VQðrbNÈeÈY¬ýK6 lYiíë¬YI9ò‚ýLø^¸ã’«&– sX0ƒé4}Ìu_AöÙcFÊnũңšDü‚ÅW¹Ç½¢Á`LX«Ë|sÌŽn@àa,— ±žšBMZ¹ŸRëó$½‹‰ŸDÔ~l¹![Y%þ ùÀáÁuà*Û`ÊÁJa·ˆog“¡ª…´·%À{pÇÁ=Öà²ãà²Üê8¸U î×ãà~­Á}9î‹·È X[Tór0*º}X(¯£¼= œP nѶ²sií"Ï0I2¢¾¨úäÐbeݹBœ}—¯ÝN—àÄÔ±PÇÊÞ¹ËÚ Ó‚æ†X#¥NËelM=ÊÃå9¥Pý]>%­öJ°¹UöØpñÄérWŠtkæ ß#û²vÂùižØ:àÈõÝàŒY‚ϳr»JöeD{r*Ú…^ŠÐIß½]j|bç~‰]ƒ7LjrÒ=l+Ò–{ ¼ð9£Å¯Líë¼Õ°ØÃîDæA'>‡Ò÷‡®Ÿ¡ yŸŸ+—ºY"ΘÙ#»ˆAŽïÖŠm°Ð^z®Amâ…ØACŒ†Êû*$yæÞ¸D眷m%1üqþKb²¢ÅÐÕºÓˆ†ûÌùREkÒ³XÓˆ:ÊzQAìúOÖ‡%ÛyuÏ6<År±d›/s§â_µŒq`¹G9Y{@À(`‚ñ¹ô®¾$³m‘£’ó’‚›Gd]E†É­€cÿæTÝjÖXXµ¢É½³ò䟲´Û6žiìþÌþÂù¯¤w‘G:WKþ+)h·ÄK|û¤Ö¬À>j`›¯²ùþ Þk ¨âámk`Фç‡âHï#ÂvOñ[ü=Cê ü$êªHÓ1®ëÊc<×õ–¦JPd­_ä5Ðzº]íJüoðIUoKP´)üã‹ bZðC{€R¸‘R<,µ}À‰&›ì+Àµºö>–XpÆ ÌÇÛ}¹5þ4¸Å¶îÁ9÷îöZÏ=ÖÐ¥BQÜ…B1žÑ/çWYºXoK¦ì }ªg¾°©p'²å®/Å~[µ©ý©Ì‚à/Ø(¶O°º›P3óòsìIeM˜òs«$Ì=óÚ2Û \ë ïJ’u?ßy–¬Ìä[c=†—'°VÔ½¤_ÏZüvFÇËÁ0Á.Pj\™ê<_Sűºb¾LbœhADõ:Ù¢˜ŒwÁ5¯’a"…ኽÑür(Qú|°SP–¹Ôñʦh˜§ìVìE‰öÖV·‹Öé­ŽLóºYĸÌ97úXÃhmx‡‡“öéàL¸\•¿ÅóÆÉP8oP´¢épqî7Fj]´W®qþ ’(9ˆÇ(–w9KõÔÉ® tЈA#Ê",Ê[iÿÓ“ƒÏ¯ŒYɳ†ŽuÒ ¥,Š4îåÏo… ÓißxJȽ†Ø²aho™7bÞÈðì¼H³åfÜX{ËLͱ¦â-Zí ~ecÈiÙÄEBgíÕÈ~|k9#%ŒÛc 2zf°žrx[/ x .é$Õì7É:›£›é§qßÿŠ"A@oÓOÍQ õ2´†¶¶Mx³´ß2Y×£¯òâu´Õ§fof{;q¿65Ž©©¶s)¬ò›á_îŽèýPR2Ì=‰p€Ì°KÍÉt0òÄ öU‘ìᔑ¾zlNÓfÛZŒœ<æºsáí§“®Ô Òã˜b'Ro¡‡Gœ­£ü:bƒ·+¶EV|W%Vnò nUQ„AȲÍÓJ0ŸíÇ­¯l¢¶o®¯Ÿaf‘US™ý6ú›þì1{ßu玲·DU_³ wûáÏã;£_hÖIj!Þ´¹‹+ €m“Mºê9Ü3,QÚu~ØÃc¡®nÛéÄoä=°Ìò/Öö‹‘<õÙ Oi¦8ürÃzÛ{=·ÏI¬bý¬uÑ£ÕÐ=0,¿ëÿÂUˆê¼<?®áïÔyÅw _}­5¬Ð”rH´A†eÓKíZ½·m]h)j¢cpRWÀßøúe ey¼'HD¦0Ýl=ƒÊsá1cApŠt‡-6]$ÝìÂ!·Üqœ˜v~1vÀ'Äܱ̘b•õ’µ*me·ŽTÀM”N/X~ãˆ5£rݱ θð ·.ƒ3¼-U+?ôm• aò&ÒoÍ«žV¦­ct܀ך=2{Jʧî~ešö¡ŽátÑ”g·Ù®MûD4LҌŋbDLÁ¸Ë¶©³µ¡àO ¨w2zÇ'¼U\k˜Me/š l}&€1ÏÖ”šnŸÂÄDÞ%%Ðæ¦“Cþ„q.´uŒÇä×QüoOÿnx;Õ¸kN~PHa øw;èŽi /ÍJVÃx'Lkxù‚~ïǼøda´@ŠÒßwÙÉ$EÝ«z@h~§øJ€&AsãgŒ›n×oÎâÆæÂëœ1‚÷^\ˆZ›ô9$ñÛ{ ð÷báŒ>¤Ïº'§æ}lç­Æ^y3‹Þvï£.º_ï¸áÏlU¶mfÂç†ó„}²g^º Ú"õlFÊ~1Pðíày¢Ôq¶ùì‡"½] ­]Ö«Üm@—#GÍ/ݼ•ç™n‰†›bçÄf»ð­a˜–U6GÝá#_%…7Z*6òÈG —{Ybx‹ÇKÆø+€Ãq!ß6ãÛ¥ÚØ¶<÷yŽÛ,ØùrȰa@qN¬µ“ ñéjãf\übîf!Æ„{B¦£l ŒZæTL±9r§ýÓßÃôäq+§ò¢Çà*#Ê{ ™{µ·îa±äÔµÐ5Å2ë̈ްÈ(&W÷å%¹»ñ»è–ʃn#Ð4"Ó±ƒ@N#“)$bd™«<Ò“ß%œå"+æèeÐ9a"oû!6v´:a£i43 Ú0-ò¹ lsOs«|bbhbvD9¬ÑŽëèåÑÈ%¡ªÅÄð@fç.Ýë¶K‡&®É-÷£6yèrž» 6cl´`ö"’@' c‹‹CoŒà æÑÌ H¢[‡œcëNXØÚ“”°M¯»OÆ š<§Ûªµ}™ˆÃ5‹&žÿ+º§6‡Mm|!Eöy¢¯®Òe‚¯èÑ¿ö*Ð.ŠÅ¦†à‡uò-#."\³ø 'Ìì!7<`»;ütãDÁôÜÄö³¸,!‡-Êz*€³1ñØ=CAi¯un›C·V U¡A"Ésê3®‘X§–V'`}†ð“ºãú¹“…v¬Ö†Ùr²ÁKetšxmXÞÄ4Vu¨»šîÊOE†+€ï‰ p-ÕˆNbÒäÈ‚ÜÆïÚü±uQ^xí¬Ïöçº7ÈÚê¨ Ãæ[Y;:šïRØØÒx]8.‰ÿ«Ûýí¥ÛpgYƒ××À˜ˆöÒòÀ9OÛ‡½-¯û$šP‘7ôàÝv¥·÷!\S,‘3 µtB©î”^§œ,znîV¿h/ëÉ*9X³…n_˜™nmƒ9m: ðÖ–ƒH>ù æ<&mÍÏçLÆTæ]òù/×Ww·gµ\„@î„“é;x°è›´Šð²A!Íɪ+§A‘,!ø&ËåoIˆ×Âoñ–_¥År€!·üï0ö|~Ÿ:q¹j‰§ÂHo™#ã±±îŸóNy²EÛA50­áÕ¬gƒ×Ìað–Íç¤@ûÀ©#Ä–û)›?Åf×:ÉéèTteÆk±Ï‹î¼oè1 Ô¾åw^8›äš²(õû]º(Àà,1k›‡©?q Sr->ä‹ô:Ùz#d˜Ä©á°×c«õpÃп&îÕu(õZ¢Hý‰*Zмhkˆ˜²ú}Øóø8];Œò£.ÞmÔ͵=hF÷So†M%‚Ü™çp\ïÜ\×¢$º¯¶éÍÀRnleE?¬É *ŠHcÔY=ã@àð’Ñ–«·å–½"aq®{m"'Ü1´P¸¾óÓûÓI€$ÁÝ‰Ú IR;3 Búý}*8ô ì³ínµòGÄBLÂi[…I¿Ž‹¬Å F[-Žr\?¿?¯;­Ãi÷váÐÆn=[ÌzúIˆL­üÓV)ÖèpÊ4A.ƒ÷X"³Õn&%( ¶ Ót…;q­Ý;tʵ¤|}ÁIߤÕs ë“QààS´4yÜé&Y)§VK0ÂÃY—Yf6`ìù9t N‘ü…ÃÚ¶ Ðéï£k D3¡Zz,W;±­ «‹(É“ñø}¦&3€ã·‡ú+κ#úáï(l{ tâ߆ÂüdS)/ȼ†ï4^{]ûÝ‹W(þüC‡ÖF#ôF 6˜‡é¬:ºÄ«a›TO‡ ÞŸ„,†=ôq|ÂdâQãM„vDPštÕž&nh+ÖI¶ê9œú4 EO_[=.Sm?-ã'òbßfçkæÞ3`ÌÒEWÊ!C`C¢*‡h@AÄ8ÝäeÖÍBo‘cÌNÒ&r™ãHæ\üQjPI²eÿ<ü'UDØê"`*Ê6ý^ìCÞ}Øá‹ÂN°+Òc æäiÙú .„1Z¤óU¢IÔ \œF‡h±Cè LyaÝ(q“OÐè¦ÚÇðùêóÂÇaÜ „úÛ|Õ£ðåp.g±äfCù¾ÈÈXö6竳¯ðk‹_Î1ÎTúë±ég Ê6Û]«íA•oÉ [ò‰ûSßß(f F 8(uZó\ 5Ÿ=ˆõ„$Ø‘¥Hdµ½\_Z®†\w-À#U¸æÌZP¹°‚VN7”…ǹñë*ÇV5 «EcežO’ç$d ÓLjÈÒv„í“€³,Œµ Û 1®ÒùQ†— –—ø·QŽmE§SJ[ÿ©.˜ÝS0u<ʤÔ¢Š˜ˆ ¬ÍºO´µbx“™ÚÄ=òE3-м†u?"bˆLP4…éR´4pX¹B ®{A 5ã‚ZáOÜà³*þWÎVÄcw6á§,·‘€ *­®G¯è‚có æ…âë9 ¸Ï‰í¾èÝÖ}‰:XÛAæÔd±ß:§e„â¶õÈuÛÕôdÌj¶ò0þˆX „Z=f9¾pG âÉâg Ž}ÕËð &V˜øÄ¶±ÙÙÛ7üZü¦5‡Å -XÁ H‰³Nû-‡ó ³¢Dç­ 0 ³Èža˜m"Q½²æŽÇ¦WEøª£ñ¶%5ÔÈb|0°üɃ‹p|îÊRX”Ž`¦ÁÜ'ÎY¨aaéZr´Ø_ŽK#hW¸¿ÙÃÏÍžlÁo³NêþŠMC¥Ðè;xì›’p žÅIȧ¡Ï ã¸ÊÎáùyëFµ};›¡—ø¥°ä<&¿ÚàŸËØ÷òÔl­O¿gñþÂ(h£™ègýô£6®Ç_©ÚÀÂÕ´Fo ŠÔX­öÑiù æÇßwiÉ "­w«*[dk~98½­é[^ïñytQä58·Fu,Ú?¨Áè9ƒaqœhŸšHo+ò­ôÒûÔùÛÆý·v*Æ’ò®êòØÍUhbÙÖ]Ö`ÛeÂ"qÙPåwiLú•µ1Áü¯4ì}+¦·é¢‰$ŒöŸÿ÷ǧ=*3-•Çùžâjï ýÏ¿ÿ_ÓF‘zëØòX³ú1 ïd:sÁu”ú¸ñ¢[(`z;½ž²3X¸Ñµpœãú[ä1Ú¹Z9ThCY5|ÙŽeðVor(€Z‡Cû qêµ.‡%|FR›ê™~9!R{R“Ô2ý ¨ån¦ì8@æ¹d¸0÷XÏé,šðÑБj>(rÖªQ\”QYµ;ìÐseyåáŒÈÁmèkßÅt_9$ê¹Ip@yzɽÂ"âï¢Üsz‰ÛÉ!Q:<Œ„Àë)ŽÉÍêðs4¼<ºô~ûŽJœmĈb»ˆÍveuHxfà«z‡­©¼òǘrŽQÄ0[;ÁÇGGç–Ir†9Yª–Pæ¦2tÂcsüQ±mÄ<ŸâJ•ÍÐ6˜Fwµ?VÅ騬öè#{ =6ñ< g¦FùÑãêäQÃ6ŒÔõ˜p êÅ{~8@ž›¡ãp AuÍ'“aº~ ÑUG„Eö9¢ë!êØPCòbüWe&óUóâÈü€ ê×=^+çºÍZqHì¨ùS‚Ö­Öîlä"€Df˜fŠ~?£÷xn±ÆÔ}Oêb™Æ(‹ ˜– 㞈Ãoä×p<‹¯’Ír‡©j°Ë3ŒÉÅ“ý¦J¾ &¼A1«í#)‘…‹©o­VºxÝ®¹ LŠ®r;ˆ©¾ô$wH•ƒãÍÝõIJÂg¨VÝ o¦©ë»…“B8t‰>÷•CŽ{'ë%Pÿž-¬P¡vJÇ.[E«!JG¸áC›óÐ⦸©˜UòÒrö)(Ó?l¸¢¶xW:1,Ë¡YœÑ©œPÜè‘÷^ð3$:ëè)gÙfª{ÜV[÷dpkYa7›á £n¶ÎgEèßà„™Ždk*.ú88‡{»ù@_‘n‹qc_­ÀËñ²"ppAŽO™jB¯@ȃê“õ4Êr—$$4JÝa˱º³MŒiw aWÒ]kÀç„P’WËšlaÔ‚·Êan[ŒqÃÙ¦èPÝãÄ'>Y&Å m®l®Ó¾¯*±Ã0iç†bíVé¹áy–æÉ€ñd‰‡ß?ë˜}Ü/²cÆ6ŸUâäøôh]ÍD×HõC‘¼RÍ Aí¾£ïƒœ[CrJÑÖ„|ÙŽ± zøÔ-¸>e¥!;Ý.Ójþ¼ØžÀG6ò²VÉOÕß®“¹maUéýˆêà:™ËeÔRì€ú†[¶¢ÙÔ¸ZŸˆM¬I$Iù¾01øy–Œ=f¸T€™½×‰VùüSïØ'¶Øa‹‰-À£.È\NwZ»«5öZ½“_>©*^óÿàÿ–mA¬ÃU§ûÌ…„u .ÌI¼',uf«¥ò»Ó´×,ƒ™%k˜²Tnejâ›Jäð< ’°ð#c9ý”îGÏ gб´‡Œ÷§ôËïñp~§P‘OÙò‰Ã.pýsŠßÄ~ÓÜBˆUrÌÑŸæ(ÝÖ¿&=4_AnÀ8ï1<Á׈Çå†|ÿ·‹Lÿ§“"ò)/«©œBÛÌÕTV$‰z%¯Jø¯û *Duÿéž ‚Ðy’¨!p¤:gàxÑyn´œ‡ƒCú4â•Åä c*8³‘¹¿»€ø%€hC§÷…‰g†Z@E¬ÅÐaø>¾Ï£w;8é+Pcp‘oªŽÉf»Èò5« N7UËïlã·L¥kÿ.¶^Æo-­ûºïo>Þß\ã†ÕyìÝ“ "!M>wèDWBåÖWW~·Bøêqƒu&On»oE¦ÈFò:/i‘†LÿP‡ÐcF‚mf·J ×DË}C^ƒP dB?Z?KÙöV¥ûN¡ÎȰîØ0¿É*qE¨ÜJE™àt´Ì½¡ð‰}x´ÝÇp0¥\™ÇI]¡ÔÄ®)›þ¡Lã´ñº$ˆ‡ø!¡£Tyßp+ÂAêR,aÃØü©ª¶ eW=u_ÊÖ4Eïïïo),Ê)p6„Ö€¿¬øÊ‡ÃJ˜_Ãç¡‚¼@Qiï9ñ¶6˜-ƒM{G)Ξ¬ýZš}Ð}7‚ê}·‹2ºeÁ×ÅœAÏy±ˆ×Ëá]x+L×ËZ‘rH›ÑåNCmig“Îûý֛ؑ.8ˆ”ÕCìÏhZÃò& ,—[¥ÒÑ­¹F¯-åÁßsRï¬ì»?oZM Ä3MÝ$¼£jFŽl¶ýè¿Õ„—Â…o)?}@p€½ÿ1ÃD¶H{ÎÍxô¼<¿8±\ÇÊïNýc_çÒaE!Äméø$ÈŒ=e‹6IKL­çW–´ç¼t´ßgöxäõjö¨çoÂaÑjœªô³a4÷àˆõû\ƒÒöûîs ’8Óóòúôö{seÆüó1Èo&âz½«† q\ɦ¤;Â67ÁÊ½Žªòy¾¢«sØs4Þpó~³‡@Ÿøñ@ZgE0 æŠ×‹´qÑŠ Ç8¿\®CÎ/æë¸Ë/fÔ|%¶£4T ag¥‚-† ÷PWýQ¡ÓwBªav}æA5á>8ØUM²ÕMß° Py`?—/Ç3nF(¯Q;S”OÙ6¢(TŽA\†·/šà2ÅSDo†x×øÒ²Ÿ3·ý2ù(Œ|±iG¤•Q)l%§‚ÚqÏËôgì\¶¬óeêunóB¼±ðâ×~J‹¬2Ѧ¾Š¤‹D#ïô©Ö/=êo0K¬ó å‚{Ñ´[“Êqƒ¸b>lö _B—ÚÏ~OnÚxf´ªT>ì3£rcè˜ÛtŠÉ=0è.…1‘~¦!Å\ä¸oªdþiíÎqœŽk¹:Qâ{­y•A 8“®*’íÃÈCß=ÃÙ\¹Xg?åõlj=p™÷šT 1‚©ßć¾€Ñ‰ñý¾Q …ú +c<©îëÖú\›ÿêT?€AµîIG÷"C8½¨žcq#lgÛ¸&Y‡¤×Ñ}¶å‘t_dóO2Øô–ì­ÑcH']iÄb&8‰ /YE7 ‡ÀÈ@ìm±$‹¾lú×Ò:N{9|IÎÊæ ¨¤œ `ê„Bw&ã)ÈV^IGÑ,w¹x‡Ì †°›91ÁÞã,’b1W» ™61ËkÇ»•ñЙ­¤ 3Y3i“•£ÈxÍ‹¼ÌÑ–\ù÷:ª` oOF¸”œ7°s븮Èr1\™&Åü)nÆP €p,9¢YKñr'a8%Á„sßòï¶C¯’ÓŠð¯|í¶$½†§ÌJLÊÛEË”êFXüþC•¼•cnZ ŽÊ¥Òé¸ö9ÖÒe«4ÍÀƒæt<¨Cˆ³WG „n#ð«"0`™Pš ÙLUQþ ̤x»­2¿Ñ¤²fûŸDªó£ýý-õâÔ¡±ÝP[w43´X÷eœÝú@[`„c~ë˜ IPc$Éeš k1àénÚЈ©ïksPÛ<èÒÁ†¡³>– âhAâozëøé×]ºKG'â0ãi•¬g‹dÄ‚{E cϪÔScÏ=¾×LÐ ^yP›Ù1±ÅÀBJk¡QÔ›1¼Dl_³Ïw-‚HU‰§3•ÀNÿž¬fûAÖÝ«ùt•V™¥›»q­³æ±‰÷”–ƒ2‡´H»FÆt åp⤋Ò¥v·k¨ÄArã0I5‡#CYèB®aìd¹6}~"µÅ½Îë!ŸumÝ«jÈ84Yµ¦v‘ñeøM¬†Èw‹<(й›–{ØjlfQÄÑ)ß ›XÑK¼~E_<¢gQ ëá)e Ì6Ói¨§˜ëqéÿóïÿ͹áåL2Ë)>E-¸Zª°†Që~Mžs˜ÅX'ííæ2EJľϷlíIbºtó9+ò Ý#׌ªƒÐ޽u¤t¬ÊéBMú9ÇŒÁLfó\/h¥Hƒ5^<>fs¯ôŒ.U6PöFªv»ÉOAé<P(÷f´\„`Ve¿™?%-P\¦xBI ô®¾³i¶¼ú·j´‰µ¡_W^¤­uA™SR¶ÕÕ€®0òp˜J–©¨£ñµµ08•òm‡‹Hèé:ÙdÛÝ ïðŠä™‹hT;¨U®y T*RÔ*wyÅS†ýá\mÏ:¶™HÙ°ëñqn ±o€SéÇïCUq ×$T´Á¢óê‡ïÿüšVüï~ü†þ}õ’ÿ"šb&”½W•rŠÍ– -…„K„gdPÊ\´‰“£>Œ˜Ò­¢žt¶Vd@‰ŽW4蘳w¤Ynê«õl1 ¢.fÒ?PŽhœG— Å`!²MRγ,ˆ#e¦”vC¬Ìn8cËDZ¶&g——.þ“¯äöK 6Rш& Bb##)ü¾¶§Ì²RýÀ¥žî"¡¢ùG«? %vµÌaçzZ[ÈrÑÒ¡X €Dƒx6j!|™7iñ •{Ø”ËÂþö2ú›8V`9÷©]ÿIáVe¨C!'¥ÙoÙö¥AÄ„(!‡`µŒ± ¥Ù¿û0.ÒɹV‡dQŠYxÈr £_'°ÏN@ÌW˜Q¯% é" Q¡”Þú<¾»¹ÖAŽÒÿ»Ë¨¤-ÛAZ¨ˆ°\ºp ïà­žácÛOT›€¡{Ö{â@öî²6çáIÃ~‘».Ãþ´ÛåX*\¢1Šiô¾»·¼Ï×zA\ÇÂÁ"Þ.@8# ÚÄÑAªŒòå—ˆ-“Æ®Ããa­bÍ#B®$ 唦)ìh0/œÎíƒ_s~jÜ@ðÎL]ÙŽpyWKüß¾° M,#¡â:§hd+pxcæ ,Ûò_ëqƒµ†Ec;´4Õ+¬¥Glt¹AL6Ù)Íq…FÜÊòb›™4±ÍÊ´XSÚÃ[¦çY¡J>Õh‹,YåK^ㆰ5‘s„ô»cÖDîÆLïVâx\7kàB}š ÖãڡĈ‹ð³GJµc uóãQ¨t«Z·*ôŸ Wƒ%ÚDEó‡„= ‘MžðŒü,rUºåǺÛ嶨m´ÌbOUqÃ1p°Á”_™ 7$ZûmPn£&ÖbÉm Y”¥šM&Õ ¯›·âæòõèï¥DŸn¨æåç BùYÚåô…&?sÔ;ΠÄ!AštOëóVÍÌÜQÌ̽ ~é£y›;* 2C@ÜÁ HÃçÝ/x¦"±"-Öh•í,­1ž§°-²r»‚{­š­‡·Ü­ò…=,øÓζÚFMÛd“®:j¢r¯&æàTn”žl¬zzQ"vjCH–$µÙr @F“ÍÐýÔl›!DSèè|î½=3;VÙ:má¦2f6”öè¹ `ò0鹿y/f^$K%ÊTtb4Š­Ì=æ BîÍäÜh»g…šÑ¦©*MòYüçßÿ­PZÝÔeñðäDÄÀ§[…ý‡ ™aä‹0 IÛ„ŽOÌü7Þm/$ü,™Öùi:@—˜;µ}NWùÖ\Ö6j4ÅÚzK)ç£e-Û‡I»…޶¤tµE3,•Ãw'\U‰ \ÌXLÃÈ\¦ÐBI‹þµˆ&&4ÞQ{Ê”Eøró„‹ ÷nV¢X¼ž­äl#sj‚'á¢ý…ÂjÑŸ¸åá±zNŠTÒTê¨8w=t›ñ&M…¦éB«76fÝÏöyëÚAx|:îVÒ½°üž9g)ôÛ‚U³Ôô>Dw!P.d¡ãÕþpߤ­&Ö­ƒÀ±ÿÛÇ5Èùü—ë«»Û3ç€{-jÏ¢k“h…A©Üƒ¤'¯ì’´þ¥¨­«#˜Åí¬Ç¸U™‡¯5Ö y×â'Ö9_¯ê‰œò:ÆŽuÚ‹Ü'¯ëA`Uä’z j­×Ñi†Ä­Ç<|m üêÐë´,ÕV&,.¬<ª ¥Dç„×+j‘m©Wü~ '›”û¿6ÙÔŠã#ÏáÅæOµêÚ5n¹[%?ymò¤{/Sï¶Ö-Ö)vÁéÁëè:+ñDò<^˜íô aÁ7˜\y›¥wS(À†–Ö·<ÇìÉv«)X¢Iì®Si-"£‘pPJºËfOmØ]‡  ø²‡@»!ç4W¸´‚']1žëöÉDÙºàØRÆr¨ë»4*Ö'° ‘`­b‹ûéaÛbc+E¦¦­µ³¥¾ø Ž<Ø€iªÏÑ;XiLW°äqJWÏèØ†Š÷Çšþ‰æÉ¶­(²u ×ÁS×èퟃX|Úµb‰\ìSÖØ^‡_3ƒ„ŒÇÑëN[ù6ø"m"Ó9k‡Yô4ýPZdMYzÝúí'ì´“¶H‹‚@‹Ê æü‡ÚA1pÌ[·F×ö,º6'Qg¾½·ŸÞ‚eëvOES( †–CU~ØÊõ]D5n‡ˆ«ÍXÊ:5C¹kK°ß+ðMžƒöé¢ žKe¡€ß™ÚÕ;.Z&vѳÇ} 2”˜V#5‘¶vÄ‚¾3Ã<=IJÚÔ0¼)Ö–o²Ó Ò²²¯è6—ü°r"¬Ò9û‹EGM¦\gex­‡çZ‰{×ÖA}àZ´¤‡Z§‹, q¶,%k³Ž¬u¡¬£ñ þ(¡ÞIq^GuÊÝå૬t”xß²ˆfû(Ç‹ZEe{2l›1§ Y™µMV*‘æ1U@ø´q/õÞ²&‹®ËÏó¢ ×€%ZQ‘&®Lw+g3ÃË1ÒL¢ŸÏþøG´~ÇikÀÛvR6…R¡­Ÿ–9¦¦¸µ™•Áâ‹ÑœJ¿6gµÕiIœš>R·òOLâ’¢äü߯–&l†¸ÞUáó%h=•¸°]ï*T¹¦_æ«ÇS«S8æ‘{xPŠjgB²}_ß8¡¤˜·€2s™[ű©¾é ë9Œô¬8Ï,öÐùŠ5ø2Œ¡qúÝ„í7j¸{@Ï•n²ã˜“.'ÑWÿHÉjý—H«;ØlZukR$ø«[ûð¡C·&×iA@.@¡#@ñgNÔ19èð£^Ïad,bdƒ†v®ÌP_8øN)l«£e i(=ë}ZFIHòmÕêb®e _u¹˜‡ïFÂç= ä²½{»MnùÅ^!pž£xX&“"­à…‘¬ÅWÐ\:¸²µ‹\’+ô"ýF7ÅZƒ¥÷¥¬›É$vÜ:ÅÁ:õ÷CJ¿Ü-íµŒ+º¡ôòïŒmÀö¿H·õk¯vm·«éÞZ-·´\äaþÔ•çt¿ {ËnÕWv+ž²ŽæM=‘-^ŽÃgÕpru,[ìXÍßÚ§HüNT"Mb*禴SÐgòV1Ø)vტ0W,æßîA{›µˆÀT ¸*úzKeù„.XèkN¶Ÿ–mºU)X¡ãLÆqš`5«UŽjXâ ¬” ®R"°3v(f­(¸°’ÐR/Ù‡¨ÀÓíoÑļe¥×2­R(½[`\‡xäuÅ ¢¬ÉJ[ø$› —6—HLÅÌL6Qø.¤eUMíËooÚRàm{ÜnXBEßãæöUë~µÍËìK  itþ­ó’C[À‡½½™\þ¶þ"¦6‘Î:‘ÍŸâUöÉèÀ¹[01­Ý5h»-²°‡—HLEW!8ñQTí#zê."’ñ4„ÆE+I’êÎÃ*xžƒÇÒ–ŠOr·eº[äq¥ÞTÍÛˆísPk éya¾‹¹ïoÜSo÷Sõ ™RÁ´Ô·aÉÿPôûùjÞ¨D‰ÊY1IĉfEþ\“Û=‚Aább}U¹™e™Ò"“õ̆DXã¶2XJÐ4 <|¸ˆ+Â\ ¼¥•/˜ƒ†*Æ”ùE®l)keÉù€À©‚{.T–x*ò;‘„ç[¾‘€PcühøæZcÄ33Sw;€9Œþ0"–0¤P…ãi*(ªtÓL"ÃoÝ-X=¨…K¸¡òVÜ-Ï)ª›©…ƒæh¸ ”£yVmØÂŸ*ž×h|¹La…R,’ìƒæA¯H·Eq[(ÚVä#“ó}õu›J‘:9[°\¦ÐB)`øeE‡¦²"¶†LAbÒE ¶”júZC}ñ%ïjPð(ŒÚ<¤q£ÓTªPƒÁâqþç—Á]•K–©Ì)‚Bù¼ÄG¤ «[ù+Ž/Ñ¢ØsŠޡו~¹ tÐÜa+ËgyÕ.9;ÅR™CO²s.¢²òEõÅ®1p€;pS@ _ÕÌ“JΤßÛ}ÎJrÖ `Sc3 ­ƒ‰~ï\û›r^ %à¢ÍøÌ-=½<¹W34}Ñ“Ùb™ÚàxAd£U¢Fp€À$37œ(gÍÍçëˆ7Äp}nœM*·Ú†3'»¶xp–¨”ÖQé˜A ~*Í­±wË=aŠwû®¶á% •hö:dRkÕºUQ(EÅ̵ëEa¹Y´Xpq‰À1UÍ‚K¬·JL½GCÑ¢r4À*•*SñVð,CzcÌhÒŒdžoN¹›žÞùè§v_§.õÉçwy¾NÃÊ=.¥ÕVüú£s–-§¨Ò£J÷ËÜ"î8N•¿bJ‘``)T¡ã(ñéíeôòÅŸœ0dá÷÷+ÍÍ Ÿe^FJ]CJqǺš|;™\©Ê÷­+Ñ1ÀL³ÒSQxq­ø~$©@*1p·ªÁ}~,Û¡È‚"Ø:H,º£ƒ=|R!qŒú´õFWËj®~ 'fƒÝ$ÀŒ„ÊÑâÊ“ÐÚN%aë7-3ðëò&tÝÆ”¬3÷Ñ\}¾m¯K݆µ5:€oÎUG·PÔì}´æVôÒm}`‘ÝD ûÎHXLå "÷¥Ñ‹ïB9Ì£wV,*,X‰)•Š,µ¯G …P*w›0¦{Ømn&]¢Ön“ìZ’6iŸÀ£Ó‡úçFêEËh’27x€À ò” VaáÉ[4N%ÍTm3³Ccœ61G³*3u0eÓ,\㊑êVÚB´n=áÁ ¾’¾+ àè_SHZúS¡Ý¾ÎšJ«ºÛ"ÿœ¡"ļ‹“ßÎBBgm[åmµB‰©©¬_ ÿVoN½Z7¨Ðm›d³ žµŒ‘ ¥ s½…MÖ3h:ÊN2b§†¢M5*EŠ_Unm"@QÄñªëÄ*]ÁêÕ"`™B©Àв¡*þªKW0¶­­•2EJOù„Osö›Í4$»†«É¼vƒH–V¤Hka:ÖǓҜ•*J‰ä»‹¶d±ÑXL(–»t©Š-NA!>j!«Ráá{**`¸‡z¢ÕqMÁŠî,0×Û ¹œbséE@ µâ¼~RÕÜC-¨6/Qd(¯¢ý„Ô£ e¼ITÞDü¢o íÂô®hS[r‰4©0JK²DMŠYV±ð#%ZT>Ü]Õ€_¶#¿t¡ù¦@¬P@uCeà=¾>À{ o5iÒ2SCͤ‰pÅË#›×Ó"·Ü ìÌ…ÀNop=¤ôBŽE>±i™|/øužÉ©RÜxê$De tM]¥° Švr"ÚíZ.w;öWªI»]¶ãe EÌX†xx¸<7ö°3çíòлxéóýw/mŒ{8mÚ¾ZÆè†’ï ‰ÐìK&ÏIX«ÏæsPüýxúsí…1µs‘>á¸H…ŽÚÛÌ\.ÖÌܤ‡à´T µçƒRþ,Ö"ywW!ü +êSØ\KФ¡#±z‡‚=¡{f<ì`=Lš:¶gÉÞª…‹Ä"|b=µ¯7ÀÁªÒ0•I£•’Ž”ø¦Pß{ò#M Ͳn`ÊeÖö!¹H*:úxÅc#Úâ8¹ÓÏŠöÞ¡+à/‹¢eéä1V`ªðÜûåüÎW»|Yõhñ@hhßàxÈÔw/¤k¹â—"kA¡—ü¨gUƒ I—ˆ¸ °ŸÞ^Ö‘_ §BO BâÕdøØtCaXÏoZC<*Ûv·ZõT'$~uÊW7KŸiˆO´BϤ ¾<Š)>z!÷„øw[„¶\tÁE˜×Èô¶û ?h½ŸËäK[}Pdk@º†—úé//å2±¹/2öÐZcÓÏP9‹ÖÈ€>…_^^1£o‰Õýb.K›µµÆ¤óüºà?ßå¡aùÅwims] ¬Ð"ž^«Iš·Zڻ߲V½ˆ1¦ÒÑB…×4t¤úçå­*pm+º„’?W!ñ1/ŽACvAÊnÅéHÿ:I²Òr$íØõ+3CÌ„žF –Ý–]Ñì(åH6Ùçl~GÖˆA5Ö¨ÏO9Åe2¾0ÉÚ¥c±‹`S*gD»ÝÙ‰‘ÙÉDPQڪú™ç !”ã—æ;YåfsꛞŽ vãurúšðP‰½\Qãœ9Èyp-¾Ú’Ówl”(xîå¨G;ìn_=ËŸþ%¦•×€òß1µ°”.’ä8-jœq²H¶Õ(„SáppB$‹ÏujÃÈÑíc@ÂãSá1î…× ÎÐŽ]CÕ+±±{¬(¹2ˆŸšÁÓÉÐÔs¤ŸÉsV‹½Ü=;mÄå¨H2¼žXpºs¡3¨,ǨÞ\ÙDCÇ!ËÒ3]Tq¦F¦ãK¾<(Ï»°‰wÿš’‘ÌfQN)ØZ71ÊÿÆXc&Wt}Œð'gÛHË‘»…e4¹FĴ옇¥ˆIÛÿ‡)•íw³œ–x28T*€˜ §î²]È w}@¨.Ñ)w{^üRªµ{×féGÙF„¿ZFáÎE{ÖKàØœ§¸Þ¤ûfÏÏ),SbòŠn“/”î5æ¢Àèߟ³ô™ëšÎŒŠñ±‚­eiû<)Óc;a=ÅzlÓ:&f@Iæ*ùÇšFÔëHrz2ñœhO4ylN¡¿ÄRSýåô €¸¥ /œÝN&€ Ç`"ÑýÆ9ªÎÁj :µN`5jZô êD -v¿ n¶_µµÁ†O"Ñ (}>79Ä v‰«jP˜ bž¨7Oƹ%WG“Å—* ª—L¥Ó¤PQnüw‘ƒ˜¯™¶Î;¦_¢Þ3kiÕÇ„טʑ¾Q3ÿî>8Õ_BêTqÌ`= cïpŒê¼÷Ö¯ÃX¯Ïßz\£êæzÍ£úK‚‘ÙþÚdzýRWÐ-òÂÑ5ðÒ^“y°íHÝ&;Xj@ã<$v_+§&ËÖ 9E«3ŠŸ6Ó´Å0¢ªÿúôÃåÛ‹Éý ´T‚Ž4FžAÄÏ9†Ô³¯Ç&b7¦÷ùw€UŠêœ¯ÔcíÑ’©(gƒ Ek xp;m48l± j&€Ž“þr7ÁØÞ4:‘Õ-:FãM‰0ºçBá|̪a>CJ޳OÙ6F“ت$[Ñ¡]6 %9° ^ J²pŸ‘r£uNrº±.ĆÂrXò86d?”pR°$ä¤#Ó‡>p¬¶ A}ÝxÅW1›  Àh¨qsv¢ôË÷^$€È6P"EÞ¯´§´p´È5MŽxÕÝ’zT-ÂĹvN̶9Ÿà´0ÅÅg–µc‰Ô…´±¡…YÉ!)ÃocÞ>¼@b'9q’âô-šeSsÀî¾Ó²ZWíºB@­.^_éý½ièóSR•›ôùÛ—/~tW*‡^r‘*µÚ üà0­&„ÔÕô¸Ö257UK/Ž×0Ø3t„z‘Ö \ƒ³^ %ö18V©žë[†o=Ω $œ®‰Dô–ˆ»ks´y—pVð@3ó0tm ˆj4Þ®IÈZiL‚†É šWEºLí¡\{<ˆS¦«î•ï 2ç5þ†dVè›eeÛ$Øáw¶1\q5Ħ&€pR»öð_%1ihÀŽw—&%²±{ÞÎ[ÔàcÊ 8$‰S‡ˆÅ5¡Ì[Gœ )Ë÷:Dzùíró¡|/¥Q¼q+ÌOÁ‡ðs\D›àm]>g›¡ªF×JÇG—ª‰hÛ3½8¸º£Ð[Ê”tºEˆv$3®ÄG vY4àHú.»ZïÎÐAý½\,[ƒ w<ì¼ð×*•k?/§Á>©ï“ź±›F4ÜQµ0À,"¯É(ÚÀÞUOñ§t?ÕK‹…é6šÈ=JØ0°=ñÖÐV`V¼˜ÇÁ^)7IŠgŒÐ¨Cn ÆAKrÑ&Ú–sA®Ûo €·¬| s¹ÞÙ³TßZA™û¦Uåì+ÄY§ÓFƒ°(M!?,£»mc‰4fRf,· õ†69)–ÖkE¤…†…ß¶†ÑÓO@Üø8®zIüÙ¼sþæÁa4Ëèðz"áØÆŽáƒÒ•Ç<ßöwÑÆL‹¬US• ¤M—[ÁPÚ»{|Ø`ÚÃA´Íøà`(±›RfàJ8áã>õl¹iöÙ±-BQ‚1Þáº>Ç/Pñ¼e–†äI{J6xÑH8? Âù©‡o¨c›?8ü©#F¥5ÞÚÜÃŒˆŽàƒôh†“À´ÅE¸f—æûà˜j5ǵ8mªmÏêàěǗÁ(ófyÈ71Š1ÔÔÅꇣQ^ šŸ¯ñ\ˆPþb¨#ÕÖÍÂRo“€ßÒ<äü-•Ϩ>a¾E¶¿ù#L6y5âJãM‡ŠÄ‹ŠÙf0c÷uÜÅÔ8ߎ7¿À ˆÞ-išƒY¤ÌÉÒg?·x7mª˜ö4»=è¶åÃ=…t[o\6»Õê@,àtQ(³yc“èPfx¸ºŠn…넃‡+•Øj‰ÎÜ/réˆ;Ch^ºéF˜ÓiŽ5'?q“;4W'½ƒÃÜšàAèãÀr×±z^¬)elPÚvs—_#n‚µfõÚ­=»ù1kDûŠÄ%µ%Û|b‡¯G` ¾XG?É[}}NV;±•ážÊg¨«€¸S‹e£³œäóêwYçw²3ÌW‹ÿ¿özm6gx2u¢4¶d"¬×P§Ö1êHh:8 þ*YÏÉ1†vˆÍ(jqmÍ‹iþXs-2&µð‘5rC ¯)cä”-<˜›À(w €_}=®ryg&ÂÀ«Ñ;vK0nŒÛÄ«*K³hÚ˜XMRšr“ϸ&áL•;‚‹,wØûr€"b:€yº `³6­ÍÈEÝ4ï„ {bìË’¯à¨Ð¥±ÅHÚý¢à–Ñ[ä?Ñì8¨±Â£ ÊI—¯…—\G.2qUOŸ£ÄtY3°[ @”•Oñ0ˆÌ²0–°½Ho ½ÅÀ<ˆ£Ê.`„u&|‘jQ¿{Á©æ3®AŠÙQËËkyù:š?¥ð€¿:[tÔóêÀz^…ꉾâL+ óÿuG­ßXë÷Z« ¿«ߌwT÷ÃÕýð:½Õ-w0»½’¬äÇ×”“”- õàÑ`·ÎÄw¾y\¡£L“ÀÌbJþå¬#Cß&JUbÑ4Ñm<ãsë¸7We$ÜÑW¸1}Ý숧üÙ|µ’þJ.ãïógó½@".Òˆ¹}lÿ}Ò²óâ2T…ù>1€­E6Þ>§¡:¶ì·ŽËPѾÜ@]y\<¼T·ó=dcëf$±Òƒ¤†ýI’×Äf-†v+9oKè6ßÊarÔ"uk؂˥˜AL‰½;nLýØÂ +‹°KTbGZÙ8«bøp Q/Óö»â>3GæBÀ¸ÌlÑÝ¥hmJ7b™é_czéïÄ^X´Ïw…ŠõÎC×CºA¤)ƒÚC³ÀªõŽùeÊ¡ª, HUFJŽé–m ´‰zô™,šZ™y=fÚ8y*yv×'P}„\Ç®IÁ@$•Ö$KŸŠ4ñs·ã ÿù*_îBY%èLÞ ¡䆟bP‡9ƒvÔçxpZ¿ ^ÅèîkŽ^ìÀE»Žî‹Àù×(æ˜csN»ÎPƒ…±ëž©nÀõî k±µ…÷.ŽSZçÅQЇÂ(ŠcTÕ€#šê¼XÂz„öÚ1Ç#nÑ€9¡'±O +Ñ1LÙIT5jÜosÜv?Ø J9|YœÖ½J2y9OÙJuN×–di·:­ù(¬Ãu¼®‡oû°ÁUmU°¯r°o1»ÅJÆò÷/‡‚½äÙðÎ$2 G:²9b WC^ññŸÿ?xlùÏ¿ÿ»-#ÔCÛôÃË×n03è(´¸œ!‡77~Ú¸ q´c•(M+EÕ/ËܨVÄŸ†"þd^w:%”éß™?'NVÙ°0äxQnt´Û'8ãDíVùØù`›Í?õùü0MÍ‘C9³MY a»Å_ª0Þm¶úsƒ»ÐJL32ù˜Ûv™Ä¥j ‰ž˜|§ SîfC&»ìbÎ n"-«dßç=7žö·DmåV´|\åÉÑVU[zºá$™¦‹ Žßa[²}Õó¡s×ø÷öæö•ýÚÈÜYy€Ù©9ݼŒ¡žcͰӆ„F™ôdô—e‰W¼DÑßå–8hØÑŸß;Í*šÆóÁI-„&Ë^…',“bŽ¿mš*ܾãD@yL£BŸNý«³³í´Ôð…]*6í]^f_\³_4k·Ú3á `§]”ÖR³ZQMß¡¼Ê8¸ â?kSŽ¡º‰4#5 Ѫös:FNkñ¨Å–qXtç- Ö=•hÌQ™Eq3Uá—5-C^!Ú¡­F;«æO­×šu‡­SŽÉlV€ä+Žš_1X¤`_#zûiA¦Ó=“Ø{Å[b¼eF;‹ ZŸ¥c Ý*pïùTÔïc•ÂdÄ2Jw…\Ç)3h˜©6ƒíÁŹqé¡úqYš‘Ù¤sh~G. ©%¹7Xþ /ƒ‘«ýƲvfé ‹Õ þK¡E½7Ç¥I6»Ä¼P¼ÊÖY•tÜ/Öð®,½ÁÀ]îš Q“k0`G1 ‚ÅØD#î§â±ë¢1°I—»­}µ–èjÙ&s&¯â&ŒÙIçÀÞ°­s·yžNm¦27¬›ìŠŘ04gIÏê’&å~‘QXzÏ;xß$îƒËúQxÂÄàUÉ”M z#Ø8V¸‰ÄLÜF~ÙK¼vrúîôŠ©ÙGß"3…nGÏoq‹©A/²%m; ûœ˜ÛÁG6`àï’G;µRÓÿY¸ÛË¡!&è‹´!©Ÿ´»`ùZ¤Nÿ½: E_²o„e‹)ïvJÓk¢w«?ýéO½Ç"‰4Ƹ%a y°m„ A( ߊ4äÈz%”Ù±2HqFë»cÙK¢¨î±á¦–¢·øg¶õÂã¸V£¶gsmàPøD]彋²K;BÈÎ6bó•(•I%J 2F¢$®£$JBP‰²Hž§Ùf»«hÈ3gàÞî‹€d)­•à3§b¸eƒFÓ¹éÐè¥wérçTçÇ)IU~†èØ11 %óê<ã)U]ï&9 ºƒ€xAj©kЦáã#}œç»ÆvÑqGlM*ψÑBÀÀ,yá8E”&—7#´mí r Rƒ&Àd ríåºt@¨‰}뎵1eòØ„l5\?é°‘†±˜ 4©fáfë4› AYü dq(OÎ’a@ß—Râãï“¶P*aœ@¸½ñ€÷n"qº Η·½kVK&KSC ™ÿínE©æ™\u|¨¬}¶0˜èpè÷lœÄ µíÒ;Œ´kÃpAstÅO#}z^ëÃÝ šd²šÆZà4†m;öE÷ù–Si¸©«O B"-uÖyrBøÚÅ8/>_`-óñþAŠ*m»qmØÔ|MRɺÎÓ²6ŸÔÛü¾'…Ü*N ‚©0â NËER:`ùß®>0L³tµ«]tb P§g»emcÁ'¶ÿUWÿž"[qÈ }ûÿ¶pjtÙ0ÚþÇã;æq0°kæ­ù0l¹E0f¹8„mFKˆÊeDDzpœ´GFÜÃU>NùWË;QÃÎé™tó9+`£¹=_̼Ã^²ý}@ŠÀ;/G`AÑK6œ ì°P#wÇ 9R&éqòí‚n™|½RgkC)5.g]»BÆBgPæFmåé/æžÞÂÍŸR\ˆzÞšÈ ò8(E ãÌ$Í ~Ü]Q9±%ÕCMy`ÑŸÊ7ÝyJ1xõ‚C7Þ3`mhn¶àhšq(ˆ±bDcH mfÛμwSc•)Z¡øüL6R.¿Eë9~.ùN¦ïÔÁä_}}._ðÅËW_Æœ~`Òßvm³tqjÌñ[3~{tÜlå}åÚ?¼üóhr£®"hzcPRL3¢õã«×Ñ„2ްÚäBùDŒô’t„2öúËëÈðHç ÎR\†6íxKyŒŒmV Âk‰íËåV˜ôãoaDz0ÛtûªÃÌï•o6øÝëš±7…çqm«ÎõPä×ðrh b$‰þÞçù§ÒC‘~xͧ°¸dsËtÁ>,>ÜOCá~zÍ&&8D¬jÓ‚5A8¡Ä!,ÑcÈ*[¼ZN.P¡Iµ?`а«6Ú_ð¯“í:éuTmlSe4: 5nóHfiE±eND¢e–[hy£ÇÝ£µSZ^×ÚöªEöøè¨2´Êká©7;ìŠÜÈÏFB¬8MRŽC….#óVìaiêºËôT3x—A;4PÞÙ&px(jÍ“ní\=ýk¢ö*ê×™ÚK#æàkŸq_â¤ëmL°½Iê¤àÖnÝ”u½2õX_U^uNCLUÛÜñˆç&sÞŽ/¥-/@r0H矓"è§V‹4‚ß®(wåkÄ¡QêHö&î !ï¶’t·]y‡¥®æ^cµâñy‚µÌ»¸t·iP ;Q›ípOÊeK¨z(0öî2º¼»ü%^½|JWŸ{4¾LÓwOÙcuŒ‡-¨“-ýèŒÜœ:Êâøü–O«¾@ÔDbÄRüaqkć¢=L‡¡¡؇®„m«:êfžÌÅ<ýú}RÒ:P¿GNZî÷HJ[f˃,Ã/YõŒ`¢iŒà¬ÉÑ­³hj™*æ!–Œ4m@R¦dBö—ë«»Û3ÞRì”V çUûèQÜH‰Oœw;TÍ¢˜¬fi¾[ßÑö{a&ƒX# 0\˜pî«þ‘´9èaö"&o34PáFÎ× ‰¼à¶SåS“{še=´Rs׌G#V@³KG ºjõø–m LW¬\o*švMÛ¾!E•€´ä˜’Œ&N³Çõ?X„1æ—aÞ|D¼Óé”è§Ó“r]m{ÆüÚ‹a=¹¾¿µC¹Rå!ŒQá­ûâh‡Ú`ÆD>ÿÔ+€Mc!eÎÃÚO¼æ ©íöƒËkÌ^ ¾ÿœî¾ðÞE lg¬Ó¼•ËüpVè\¹a…,¾$èx+Ï0g"w ð*½ ª™PБ¬×„´KTMuîn”~øÙžÕFcÜšTÞò #T<ôRúi¼ÛSFL@ìµÏqs‰8);§•*ð’OnN9‘Übx ؤL¼„Þ‰U(lvLYD´O¦ uU‘lÊÎXAM\eF“UÃlÑá„ÓgÁYÇ$–F;Ý,u›Pâ[a"ìs¶2W¡ £°{g”Ô£#$U{òwô,eW1éb•D¹ŠçiQñÅz+Xis®:ÄĽÉ73¼ÐiÏua™?äeaÂËÅ+¡•)|¼¬Ú÷BM”{6[ØãOÕ6п®q½¡gØxפlé»V¬]ýX;39¬E¥noé¼l séòˆÞh¼FA¹í[D$[Úlˆ)2XÏI7ƒøù—yÓ¿£ò#óGgàÄ%I|>ñ¡áN€ “"+ÛWÚú}fNüÈH)X`ä= át ô@¼Fz`$T&÷ß_ú£ïˆÏÈ.g• Vˤ½ b^ž*q°£ÃŒ‡9§[hõ4êCi½÷ÑØ¬`åå:ü{_€uÜÆK£m7¿J×ø­í ±c‚¶"W¹è†Ú›ˆZúo(,“ƃ‚'|¡qøª M70£ÖP—PTKwDR:1æîÉÀᄎt¾ë¦UÛ°³ûÌns3 ]â°:­™û9奭ڭO—s¡·°Ê; ¿KŠEI4ñ¬NÊ}9Ñv¼¾/ή5Ù—Nf­’´*ödÙí ,:î­JúîœÂ½Î3Krvf­1JRjçBÄFÙm2”á<mÆ&¤´Ç‡¸O Ï‘¨Â Õ1©V¡Søïƒaþá†>ûZ8‡ìk¥«MŸâ’iœÙxOŒ S0º›Ñ‚aÛP Löœ3G€º£XgyÙ÷2DdÝ(Ñx{ž”=5××ÞSRA쎜ÉÕ‘S¸>jÞIvÒ%ŠS@!vx»ÂN?5%ÝX¶qÑþCŠ–ŒæÅƒZ5>òŸî9×-}lžè53½ÚO¦ìr!Ó…gÒ·Õ§ƒA¸ã¾h€ÐA¸êï“ãáNÜñh¬^©¹ßh¶Æøm½šÞPÙ ò€|@^•øÔ(• ¿ö½Úà­Â›ŠsÔ™š¨ %¯¤#.:XÌ â+h*ŠÇº(Ë­~Vž-j Š j(­ö+À+¹ ›9:ÒGs4´@ë‡2¬yƧþñd☞ŸãCÔR;ƒ›wåÎ?8zyÎ(-'‡Ä¥À˜qf`SäÁNHg@OÌ%)_—Щg;g´ú9#(5ª¯Y™GkqÿÀjõµ•â V0ªz²&Nu1\ ©3œôØFœbóz‰&&;QR§ú¨Ê"%8EBà®v6£šÍn@ «CB‚àÙ„Ûçuöùs ·¢1‘%R0¢pýzøq=SGç¹Â ö©áÈÕ¨êCÚ]^Ûj¢^í´ÓB}µÁŒ2•N{n‹I7¼~D³y5)„Wæ.l'Ã%(ÞF6Ý•¿ÅRBg®* þî;1²'4Ì™›Î×!03ÎX†™WF¡Á£ñõu¾ ÞBÕ|f…4RFºÜtU(·¸é¸FÙ,_§E²Ø†)Ç×T²ðS„ûU‰„?;5QÖYÏØã–_MÛnVÍwÄß΀4[ƒÑtšy.΢°ˆЯ$cÌG@ÑüSy7Ú^ AFò-ä8iW$ß}õµåWBùr挮lðr† MãT‡Úš úñÈe#^éÍ7TC mÈ/‚èQKŠ«>Ýîp‘¶Ak×®º‰òb>K{¬xž9‡~â÷ZÄ 8ãü„ŽÝª?›ZýÛMU£,’vPF@]“ËÛ\_l¦¶«ê¨&?UÒJ 9eúÕ­UѪ:ÛV†ÁÝ Ômù€m-.°w|::¶f¨–wo5Ü[e@/ܯø­dJCÄíà´Y°ÂDæ™O,«ÌÄÉ Á\§ÍÃh^üÔ‰R¦´êÛ|ôø,Ö#iœF|kÅä 08ŒhãÆ-.eíKÂã‘"ñŽÜÆÊ¶2HÌRÑ…hÃZ×Q!˸Ô#Œ«°ÄÐÕyÝŸ/ÂÛU•íŒÿœÂàŠˆiyºÑÁsE€s®2&ÍJ{éb|-~n€¶*Q›³¿‘Š‘›3p!“&ë%F Xˆzdßßî³¶ñ ºâÍœô,Ì? ±`ƒ¿ÖQ•ÎúÄØž•êœeÔ¶d,Î6¼2·Ë–µO;OÕ…olž»+º¥ÎkÁoϤ¿ÃŽü”e˜}¹ŠòÈœk‰zÙß—äeøZ@ÝŠûüžê(5u^K-©ùß“îéÅY-ϧ˜Ì ÷«€„«ìé>ß̬BÇàýgöN¡¹1™8Θ×LÀíÝe‘®ïçi8Ê•ïjbØòf<£‚ß 7»<¥ªdÛúàʆ¶DËf]„›»¸­ÈóönIy,ZŒÕÔ®‡ÚV ¦”« 9¥ |R˜‡¾ƒªíluê "*_ü ê *Ì‚å6Ÿçå:²µA Ì”l¶ÜäŸôË)Cn™aÌB˜²¼´åIÍó¨‹,úÖzÅ[½° ô+ðO ŸèAÃ,ÁèÚŒ2ÃÂ]9ùÓèÆ[óó!YŸ5 ph\»fìœÈÆ"ˆV£3ubB˜Â†àe[Èm‹@sçR—îÚ=¦3å5W-H»úwlïQ7ß«5eú fÀ•L År>Ç¿BIÜ¿oxƒ[V¾PTÏlêånqC€‡+ßø–­ÓUîmša67šd˜E«ˆKw¬nõžø”“0­Ô(ïßÒò4Ò••UºÃÈîê#^ƒvô$ÙØë¿iyMÎŽ˜»|ßËŸêW\Øœ.àˆ@O@™1 ›ðžZâS“yý” «—v üF2†ap€]$tOvÍe;[²dY ïWâVQ"]œêt· œ5ת}T“_“ ÊW³rêsÑdØ$mÓx›êö^z><\ 6Ê Ûe€²oSïQˆÃEÉ™(LÎâzÉP‘ºÿ&Ó• <,:­A¸ÉïÊLˆ|ªµ˜£@¹’Àœ«½çN®#¹k»aiLPHpu!hJ0çiºkeïøæfÛ ·Œ²u€A)5•/ønñDyãaõôÈÍIÔ\ÂßäÁiû£œÞ°ž#ÆÕvÔè;íéÿÄÞÕ}ÝêÃíÐ2…ùÊ[†YZÒäÚÊ)(VíÀH©–À< íFIµ¤óRyJÕù´ JÉiËÅå°¹Ds€ §`é^ÁÕÂÁ9ß!NÅn´ÕÌïöX«}ÚxíBÓA¡ S£¿¨ýY’ºÚù,„‰ëtŸga¢<|?áWÍZÂÛ á9AsiÓŸ;]æêUÔ6ãI EEª‚TÒËïM»£ b£áWbÏ€æs¶Q–çäÓ(;ák:¼éÍyûQ—nµæà¹.„¾#g_ âZ(&!‘ÎDD’®m•WR«6øiX| >]É_¸°­¼j?Õ#°€>›åæã3¼ÊVd„>’C¦3ÓØ¼1Þ sÐÈuuºø°(Pí§&/àäJÌ;õ„O¡C3ýˆñWïžMy‹ ÞW­Ï¦¸ûx6½ªÕö{—>©?›Åòû<¢çÂ<5Y7dѽNâÂíZX°G‡'Ňõ¯k,‹,@Í1yìþ٤þ;ޤ4wX>5–öñ}^?M®HjßlæåÌ·¨Ÿ,Þœã©2ëÀj‡=K§Ã]ñ\<›Â$Fű\l:F½ƒìSv1 «ÕtŽÌÍ„Ê%»L¸ÏU2BûqÉ%¤ƒ¥«Ç•¢YŠ™ö&z¡ŽÊÐ]Ý=9öPnÖšÐ% ùÒ6Ï+¼EöM¢=3Þ ?md{秇•l©ï{O@UBî¢ràvaø“*Ï“Ìeä/ú´Úó´±LáOØ»Ÿ°ýë:¥úëz¡þëš|ÿ¥Ûzo0"yð²ZwnÑõ~±X•+—`áze4ÉvŽ\c¤g˜jµÊLªn}nti"vÅ{/ÊØG.Á4/ÐÑ`°[­ñ‘>èµ–1XjÐZx·Ü‹Þ€Ûò†`ð ´Y ^~‘VG ÈE ðþK½çìK½ââèWƒ+ÉÊ WC­jlëk$#0Þô(ÐGGF»f³RÛðΈÅp{G²]ÆÐf«,ª÷L;~¡ !$„7Óä!G$ÿ¤êÇT(6’'‰ õò$±¬— Ó¢È©0}›Á44Az׈UìÃbÆ> ªØ‰«f˜YæÞ†¿Ë…B~o<ûSõ»yáy1òB‚œx@NF@N$ÈKÈË—ä[È·# ßJï< ߀|'A¾÷€|?ò½yåy5òjÒTNa ¶“Wž’Ë÷uÆ%¥ôñ^¾—†%âm‘3¸£2oô¨àr?¿«?I“Ó÷ìñó‘©C'CRj •eüxo%ï³ú!Ë žCáCÓ=%UVt®d.ÒOÏçÐßZ„§éº©êéŸüÊ«>TPÊ~ËÐA4˜µZÖT2ÅžÍÍÂdnÔíÇÉC>çhÜÈXewsÒ§j;›”SeγÀ©ZmKeœ ̼(ª@2__\T8X1¾g–M¨Ôð"²P¯=”;cü’ùl5=)QmÝoüN5z6øôíéo“~Ž— aJRf”ªé¾ Í”KM‚p@­“ŽPޤ*[§Ûe Ql˜Ýù¸AÙ€95f Y„;rŠœžaĈT¾^¥Œßd2¬s°.LNŠÊ ŸÛõÐÐneDsl÷@¹rÉ{RûW=Îwµó«Ñ:¤»ÐPlÊI&ÕôÈãi×÷Ý3“µ “ζSÈÄ÷ÃôýÍÏç“ÇùΛÉB?U•iùM`"oqK?<ñÚWä<г@(”8æŽe,ÐÚç¢~0±—à¿›±¯ÏÖU‰dßàØºwnn=PÀ!:Åæˆ'¥ ÓZ ]¡”|•î;¨M•>~Ce\‡IÍgE®¦Ã°‘NEû®fðÅž¡<ûNËÝ1±J\G[ˆX˜1ÿomO5bDŸò¬˜ÇÐŃÐBZoâçi]ʼ p•>X‰£0ŒF>†!ž@Y!ãÓñañ1¿cÓ‰&ŸUÔˆ"ÛpÌ—¡ 'å‚ IU…Ïù6ºË• î¾9†£ïJ×\p$nCà NÏÔ¿óm+ߎþy༰…`OùÌËØû&ÉEÉ$Jq(J!QêCQjBá ˆÃ'O¦\ïìÉü2¦@{BRöÓ8³Q¿¯[ÌFÿ](®ä././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/python3.inv0000644000000000000000000032616300000000000020615 0ustar00rootroot00000000000000# Sphinx inventory version 2 # Project: Python # Version: 3.9 # The remainder of this file is compressed using zlib. xÚ´½]—â8–ï}>ŬužÛf¦²{zj;‚€L¦ˆ"_úÆKØ\a,§eGõéI~Á€$ko9תʈýþ’õº%K[“U0{Ù¾¬§Áãüë|3_-ÿ#üo$ÿßþ#üÉâÿ|£ùùŽ£cqJþo8úÿþãoÿçùÇÓô)x\=çË@ü* sÖB'zbùÙˆ¬þЬÇßœàët²]­'ãÅ"¯?¿Ö†íiîVô‘V™ËrPŒÂ®’G5±…Å(ЫHÁô’œ(†³‚Vt~ÊXÎ9WK`ÎP'­Ì_¯âØ ‹cƒ(š$úñ=¤wH|bitúðŸÕ*£shZB› UzJÉ”Mç¥ É"jÈë»eTÖ’×úð²—§YN)2e¢1ôô”g"G­gÆWi"W9Öe¬6d<ð•'„×4KHH§yÎrc\¡Nâ‘ʯHb¦)8š E3?¤,ÇdÃ< s*×I‚y¼ŽIö){Oh0䂱×2S âdg‹¯4kzˆy|È‚'ŸPa;SrZS-‘ ü–njÑÔïO‹É‘äkºÇ=î)fÛKõ~ ðòJ‚qBóYBwæµö½ß52 ÷ÁžiT"8¯,ü›AW: ÎtB?L£‹úRKˆ)ô¤þUŸ¹Ô2<õQf³Ú†ªEKlj%üÈJ1qà`v~"‡1¯h0,\‚†µãŸ6|º·%§q„ê+]ðQPrdôdò-¢fõºO€ä‡78µ#"Zú!Úy–Ó}üá¡P¤ÊVŒ:vµðK£€Q̼Z*x'yZp@<”-(8 K'ÈÎ!N•1UQ?dObŸ#¢oÈÈ£ò”"÷9õª7>UfOʤ8’4J0-e/:w~Cþ) ÛÆC¤ªÚpJ#ÊNˆl‹ÕD?(bœò¬Ñà 0?“€Ç‡”$A]l#$¡Dý†I>g )0yÐ ÏÁ{œFìcèId“Í›ˆGM[®*pJòPt5¤8#"þ@”(ËDŠÿ"rì ú¦VÆj˜ pƒV5DÝ• ]«¯›~‘—Â.’xňþÛcf9;ää¤Ó~ÅøDÄp…sqd©Ì<Ñk" ígcêZ^¦âëÓIô8XvÔ¸“tÕfà,?²w9ªŠ0eŠxl.&xAÜ,ÌBá×8 8+óŠÇÏy$qŠyÙÕyŒ‘5 Ñ×ÓªÛ„ÃÒšÕ4ÎY*—?pt);(Uˆ¢‹ réù Ì㈂“ýšì¤YŠÈ÷w¹¸HÃ8D”ؘƒI"†&íûªp.¾Ÿ×|;ýB©<«^¯!—t0܆ãj,Ä ê…§/o~ ì à‹#Z ,b^@Eê·B7ë,êc1WçÚð[öJSÔ»h⢡]J°ƒ_IM¯@Þ E”Œg–Ñà¤Ìój|ƒóSãëÉ^ò#ÆE‰¬ÀbÉ™iõ5g÷a{ËO ŸDZ›þÛbøÚй¹y5Wž³wg|øq¼ª9_V/kþi>Y¯6ÓÉJmööY¾l§> ø4LÛ±’xÿØx t2ÃO¯¡VÛÅã4ÚÆú­ 0ñcÆ’)$á9e¾.$ù´Zn¿ ÙÓ1¦QlçO^ªåýUGÙ¨Z|Ä?ÿf) ^¶“›®ÐLbºBt7ØÖs†©Õ4)ø/ô ©qóÁx(O ˆ'%ZJ~gw[+NŒ’“„pÞn{„óÂþ4Øs½èS5ýÄ¡èËI–£ÃBo²Dâ›û°Ï9û8›L=b©h–ðæ:f€L3xSxaÄ‘8å Do.‚‹j?/è N˜g´NTT`L5Inå2nZ1 ’ƒäöô þDó…†W›ÉéÏOVõ—†}£†àjǨzŃ€¥¿A–¾i#¼!¸fêaù’E¦ÁO|%II]« åY”»ƒŠqZÜ̓ª _ÇN¡E H{^Z—úÒjMR‹Îå<8%‰ÜÍÅU/¹Qo69˜5u–6hÚ|÷DŠðHÁ‘ΨÀÀñK?õЉÞM<¤é ¥•Œßhê›Ar[móµ+{çGõê&Áž”ç8'2;]:ñ«0”‹I”{ýW‚¦PlM«×ZßÚ ;P\Ø^ŠmT”ÃÔ·j€øp YEf—דƒê™Ï‚ù«rœ,¦I R¦Füšz±žY­ÕAg±E#å¼*æ µ²:Md´KÝéM¹ åÜ£"Gô¼Ì0…³d)æ±Ñ•ÁlÿYÁ³˜8},XH0]ý5 yÜ£Ë.sEeIÆ…‹O3ÎR;ö_ҜĜ6ñ7’ãðgçTdù«éý¨™ÚsËki 'ÿ™ÎÅèw½_aúbíg¹¡¿qáÀ1 #󡌓°öÓ}BÕGzÖ˜Ø^Pr¥Ë.‘ñ~NØÎ0EéCe3Gr7EUñ8 æ©Û³‚­“JMJmP‚¹ yC@T.üÉýl0h+7RºÔdÆjJášÈ¦S§§IÉaÝÜm>ìëÄ«GÞ}èWØx¥ã™þ 2ýÒh«üGh LV [x¬7y „´v2šÊžþ c¯R‚æ¡×F™Í$ •0bXOß˯4¡¥«”ÇÕKåJë> #e9Ld„Œ+ñv¸oÄ.ç¬À˜%»M˜\•6ÌðlÌù#q B4K º°ywNçpÞPÊ’04TÓøØ‚&«”-vYšÞn™qöMa>Aow· аXo!4vºÖ3´óú[=ci‚vNdý8MYAš®IÂx©_„r€ 5¦Ÿ¬_i m±ûá§f=”5Ôœ~J®aü«$‰É\îQØøóÆ§˜7^…¥ëì´ÄçùbSX÷XÜ›x-3MMg¤avŒye_ª€σŠú†MïBš3ÁÚØjC]6…í«ÁZNSöšpEUÁ\PUKrÁ8ŠÌí¸:©bçÌvŸÎ„¥É©HAv@vúACÙ_¢’} ëלqÔ£_K(¿-¤8ÊUYV*ЙX ÊUø­S03ö¹YÊÕ[(vò‰âÐlÞ8À[r@˜zÒrò85;Þê…ºÅâ-€ªžÕ [V^ÔgO½xï§_²‡Ä´ÜdVc#Ð.5lÎ>RÕdn‘¸¨O1޿Сªc½ÿÜ•q"¹…yAÒV»áÌŸÔ÷V¶ãfƒË­§³—åd[]‘0 À¤fXÕS¢·Ër*þmŒ›; vÂ~®‡}Æ‘«EuNù¸‘Ʈωž?"Ù/Î˧wèÑ/!8 &—š.ä6›*“ðÀ½NC5áé» .éémëD|s¶6ãtâ&€oë0Ƨµ…7šðHvCó­ºT‚˜œÝšó^B3±Iâ’_¢£9äÙ ßzM¥×-H‚6ð¼Ý€3jÏ(Ó~KSpÊUÍØ¢ ÉÒƒ¡½±Û1[†µ®KÓ5V`œF+QÒû„½ƒYT„>‘Ê¢ ÂáÌK*}ÝÐü|]Ð~"ü-†¿²8z.rcî°-áͶ²¿±@Àìo®” â(ÊøVÇÕ¾q”yreeQíçEàðZ¬ë¿ïB>‘,¹ ë²€pðrW r¼Ýæ^ELÅ#`™:Vô”åðŽ g®îVº÷XŽ•þBøôŒÄqOõX)ÓÙ+´hê Ûxå©É³BæÓ),çGµ¥‡D ÒÌoÔv ÃŽ›SEXdDGà%0@.¶¼ïÙ«C\2Ôþ ™[†ç«çBšô4–>¨äíìT-\õßš«>¯(µÄéB“ÆÛ•f•JOn¥179¤7…—ﻛǀpOà1®Î郯É;<³Íh_uï@êÔÎË€ Þ¯h•«7p®îë¡T ģ9ip!¤Úö¯­¶Vj# ªŠñ %Porn!å6–¦³á°ç“è<•©|©X à'u LZ +W™ÈøW<2Ñu/¡ÌCGc\N´95ì\ë…>)¹¨ê§!”Zó¤{y3cFC/šàÏÍÎ2(ƒ‹Aˆ²œRu#Q ÄrE_?…Ѹ]Ò‚™Œ+J ÜQÈBËÌÚŒêŒMèj;dõŠ¥»€ì8KÊ‚:.]ÞóQ„FS4*/YDzQüvbè˜Õ ˜å2q„ÎðXnwÂÃê¶*ŸRk%Ro‰a²£ÒJø1Þ¾*'"ZëGp*“"Î’³·Ü@:,÷UÈØ;õÉ©\鋤°x¹“îð½uÄ œT ?|JÊãAÞhަýZÎ@-Æ—OéèïÀqãñå–1ûÄìÕ2½[dN9Íß(º+÷kɾ-x€– m±Áøb09í5n°(‚)˜°m̱p ½Ó5óØXQhVO@†åMCÈyú,;exÎ7`н“¼hZ‚}RòÓ¥?ÅhxÑ«Ç=×=!]wúA î‘ß›K† ·¢ó©)ßü‘#ýí¤VæÍ°-Ö™vÙL9xUx$¶¼˜ Ü2ž/Æ ƒ·$lBµd£Ù²ÃIW„mb€¶µÚã}AóËõÎÜ ˆñ7Öß`Çž‰é–÷@÷,§Vn\ ƒ1ÛÈÓ˜®¡çiVµ³”îJ—Þ±„ä®yi[óÎá™Åõm-Nx¤¶¼ ¸qM.di}1ö~ ×ߥ{8 fÒ÷ç˜$ù¡Þ½~•d>D–KŸmxŠˆõ õŒÚýý¦wæUèQÀä|ðÃuVÑ¡²œ¾Á(&§Pû0-ÀXQ-ñºCcÑÚIwŸJï Æ›É|®ËuV%FËpy¿½y·ˆ@«[¦ ´|—ðØ:öwóPÔ²ã£VûÚ°¸ºô ˜W&Ù¡øÜØ6i8â£q®÷gåÍ—88`Kæ§_ŠW)4F¦ØüÂÇŽáé¾Á­äÐl®ã– ®HŸfØ\IªŽÉЃKj\9°eÕ”ùš5m“·Q14Í“5òybÊÅCÈËìþˆû…›‹ž55ûtॽW$mr×âÀ}ÕáîEÍ»9{Qõ¤(ò%Ų4¥Â$“;„áµý›Þü÷ߘ7ȘïMPk@&¹@w ÊÏ-¢ï´A¶Ç6/(ôù¾LÇw7}Ø _Åóå|  GAM¡Š@°G²dÒƒNBå¥&ú>Ì"0߈¶ oÓ¦Í{=#žÄ ^ÉWÐä6÷ðVP.’!ó¡§^è‹ár ø„1“ ãUOþ›G«>AŸÊxMˆ…‰h© Ú¾×qx”^§INñäCµSBo<ܸñP6¨Át€Ï†€Ë´q´1¾´p_ÇkÔ°õUüÃò:‹¾`&£Å…̆ŸIÎåÚu,G õ‡éÜ~ RÏý¹ß‹˜k,La „(Û&Tƒ\N'ê*{ƒ(í-÷-1"Žâf=ÍÍC„IèÁ;ÉS¤ü!šŠOj"ú&½›áà˜³„º!pB$<ïÕ½9Áž4 YTÕO¸\&«U@òà /LÓ·8gi} B£ØÿŽÎLeÎë m«·ÖU•ƒÐóYôU)J†e4/ÎÚk ·¯®Ë4§gX× —\aÀn¨Ã"Høãaž ý`ȧRžÒH(_/˼`¿èW)õa‘Wã¼\/´t»$:ÁÐAü–ÄDŒ‰Ù†þìw½Gîz 3ù´BšžÎ”´õjévˆâ†ñŸÊM\M\ÞèiDÇ:Ÿ,ÐóÍ­ÑH…f³oJ.ÛÅ3ê¥ã•Ÿ Ÿ>•zÛU×ä94^Þ‹–)&JË›•~Òèh°^ 1«ƒJWÞä­Ò…—qo°e½¹ŸÄf42£êýˆèzÜnä¬[œ7lkìáÌ«˜}`ŒªèÜ +Ã_LKT=˜ÑM­‰38ν»ßFÞƒcØÏ­ ë~¥ mr4­míy5ÀcÌC’»'ÞÞíh×;…dØgý¼@Ö\ 4]®)ªî†—óy¥e6ݯ­*³¨–¼Í^ü¡/LGš+…‰P·xÁ#º`ú9…4¤)¼.ÏMa_ÒŒ¸?¾r´m½åDw.¹ÂfqŠâÖôÄÞ(œ,¹óÚa|Dó<8qÈÚT~ÄE[ªIù4`*0ÞÝ Ú.¾ï‡ãÃÍ9:½EFºdf×T}ìêHÉ÷«V]]{=o”# •šÅTmúb6[Ö6ý°º¼Öð:Éþ„à ]¢ˆOôÆ+·7>¹ý’Ê(QSMº}»>sÙMË(.L÷Þm<¯!y÷ÊØIôS_È&ø;4>ù\Ρ«ÛÈ7E$úw8ÄJ÷˜>Ûî¸7õÃsgfM¹´”šüvÕ›tõòÄázŒ`¸È„³@^ÙìzLD†¯¯º•føæößòšV³i äˆOÔL½&Ыûþz®Äé†Ü†ÓÅ áÜs“275²ãÎWèÜ@î·çÜ€ÆKè{I×+wn±Ëµ4pÞùÞœkè‘7²iós ‹¿“ B‰.K÷‹ ˆ •C°à•žAX¤ê¨4®ïÜიêâHŽ& ÎãÞ/+ݳY±Üi(loØo…°žB1qódåÎщ®ûß,­œÀ­ö{hèåïáq™¥™5ÀSË@‡% ÊÄÊ_˜xÂÓh5йò[ k¶yÓ¾nÃ_|I 0LÆ‹ÅíkÂûP…ž~ŸLŸkWºnÄzº}Y»‡Ê/æË©cÐÕódõèØ5ÑrÆ¢_ãÕLfThs•·Æ oÄ€Sê dZœ5C  aËWïûl¹ ÿL€Y½ÁäÙñø¦µg# Y Õ…¡ õQüa ;*²vvy-|CŠÑ[Z`XxלYAÑõýX¦?6-Ú1ÓœÐÆmÞfļi£1ºò7ƒõý(®ÄÂg”ÈcˆÈxfÜ^Á.Lï›õŒÈ€xë×0 ˆtàr„×]%c :êþžé·¬¸âúëhLtÕ˜œÒ)‚Žº¿÷ÌÙ\$,æ² n7Í\Ì–‡ m¸ÕÈ€ëJîBÖïö©üWíê±\õbÚ°§Íwz9è­ù‹˜_bÃtDÓäú 0Ñ!æ¾ÉÙ ‘7›žiƒ&UU|«_WįúÝ)Eþ"èêw£ƒ.ª!Šj3DÞlz&ê§_(.«/µÄ6')—§~=ë캲Ýë ëÛ½ºx%t£´(Ÿ6Ã=œGõ ~{ø±ãíXGÛêaþ1_Þ{å°rŸðQ~BFù|”ÿ@F9ÞàâÜËr^¿&¢\¹c5¾í¡¥[ÖÉÐ|Õ%Fh~AŠ8ý ?=L6hxMÞ›Ž‡$£h¡—ÉæHl²3ÝÎ~û'>½ÛÙß?ùп#1¹$bxë@ãSlÞQìFz¤»ú [̃TÏo±HÀQ¿ËÓEÆm\¦ë§Œ‹uvÔì_Ì…“«h>ý©ù¸jf<ú×fgY<"«ª"PÜpbÛJ¡†¸jæ†ÄŒÇØz€CÒ³Í#Ý“2)|ylRÉT£$nhZÈíðòý_§`¨^4…AOãïÁäËx|/^¦°5WÃ6+³®¼Já(J=œ¤×ñ¯i†ª,=þÙ­ì&KâGÉøàK›rÇq-jKâD 0!¼P¯`öbxVC|"É–á¬óöUžÄšöšMÖðßT³„¿ ù¶žoáý³:eªó_I»Ó¯äy€}Ï-‡¸åâp·[‚ÝíÖ—ãõçõ’לîÍ+¶ïU õœ³3]Ó=”VÀêá§“-µ½¯¶’b´Á=¦A)Œ²Êb¨ýºù¡ºÆª dïP7¸Éå©#Œ³Œ¦ÈÒÂ<冋¢Í 9ÑÝüšü“ã‡Í]ƒŽÓ"g·á¢èY<•H¡©-ßW Æ…É Õçàaúy¾ Æ‹Åê[°ý"í]Âî¢xX¬&€€2N¢¯&§$?܆—WY>½M¨÷Ô\1ÒÓLíå¹÷`¯2•žÆ›?œÊb²˜ê +y‡ª|·!¢½E„Ãýc_s`ÇÜ׸lî¸ ôãt²žÎ`¹ô8}^O'ãíôÑ©é®t,ß¾W÷íá‘¥Eu«¨LjeÑ)¢éòÞˆ¦Ig<æýÎ{ïdšF`ç.a×4,s¿QS—cÚñ¸w;2då¾çã/˜‘„ßÚ–;Æ’»`IŒþüîÓ5‹äýe­GèrÈÑ%“›à®~ªäºÉ_4u«ˆÂN™.¿:µ£ö@FLŒ%Žäΰ [Iï\¡Í¥—¾¨Õ…‡bôÞªsL u7–Cˆìœ‹­pG¦4|[üáΘ¼‡B‹ù—œhzrvÈÉiV& 0i¸tvY¥ u Ìa¾V§ÆyÓ⚤;Å©ÛîÜÎ| ¸æ›`ûãYïâØ0; 懔åtz¹ØÇ1yâ£ÒË\ç~æ‚È%DÄU=҂΄½àúHm?ëðK #×gªï/r‹aAÉÅ uÔ·êþ¨Ù¦Ù¤ïwÞQÌܸ§ñw§îþiúô0]7KÙáçK·p0#]Ì”àvÉ’m„Iæ–Kö"¦q2ücœ«Õ‰³ ”ÞŽc©øè.ÔÍ®Ýðº»éóò$”SÒE×ÝßÎõ-ï •Í×tq<@Bͧà:ÿ*cêØˆw²t_Úª6³ñbs_‰5æ_~¹ZÞ×”o|;z^LŸ¦KÝœD[Ð5ºžO¾LVOÏãõ}„Ú•¾Ü®_Üžˆf¹²ÒA“¤TߣÊÔԸͥ/}+µÅê>,nlר ð¬íÍ¡·ëùòó|öé/܀̻ Æ†Ú l¨êøF‘\n§äd;>¦áë=§´ÍâD´÷˜ðZ'Ñ%+f¬Láe>K˜<ý}xf1"Wf¥œï" [m£#bŒQ»& ¢+›«IC<Û<• ªKöA‰Ž9/3L3çãv«þƒ¢˜#yÔ&/{-3pœOÓí—`²o6Ö¨_µ¹_M¿Ï7[w`6ÞlÕEcÎÄr¥N 9‡_¹ÝlÇÛùÄ=ü×ñÚ=-êR6x!¨I(º§’ÛàÜÚäÔ‹ty4„›ÍQ®1vp”« ‰v—2ˆýÖ€ríZ9ºö`?a`Q ió´Pö=Nᬘ[íöÎâúÀ’Ÿ)ôLóSÌ9f©MWd?)7°<ÏãÏ›àa¼™ª­/·=ÂÕtQÉ ƒÍ˃¾»µÒ?¶Ó }œÎÆ/‹-Œ™O¶¸Ø¾Œ¿NƒÙ|9^ÈíT`òóÎ|N¶«µvx±²Óñ3¸bØÃeÌbµüŒ#å ´z帙¬çÏâQAtå0LÌ—ŸAÐöåy1Å=Ÿ,ÙìZp‡ë=܈ÞCÌi.oûCœ•yˆ™ ¬å›~ÄØ^sˆ7ËÔÚs¹ :«“4<‹iܺï`¨¸ËK°¡¿K×—!éB^Bf1Å{æ=!òYaÀ é…)¿@€Ü’8‘ò–fVÂg³j_ª“Y*Oµå_Ò4êÕM|{ã‚î\€¡}¸mv ÿF B³ÕŽ|4žW^ò±8Wžñáôµ}DÎ#úy4©]sàd""ª?£ú7ÍÙc,ß †ü ºó6 ‚ÛRÌcàê5|ÅDòz…ô÷(Aµç Á^­,VLý^û¿Ú8._WHàoYiUdçExÃ6]¥/a$¢9,…'§ÆôU_jR'oX< _É G!Ï.‚ˆâ(wý響úîþñëÏÅ0ñªOßWŸ+´ËlçOÓÕËVø`õÞÈ÷Y†*a„©­1™©Ú‚€Ät EËec ˜yŒTðP8n–`U}…Ò2GG$”{!¨ö•¤”ÿTKe@°Þr#EŸ¾V^¨€©F8y?l§Æ»ðdj‡øü®aÈÏÆjY@Ý‘ÚÑmƒwÂ=QQùaGA{ûꑱ׺׺Í;#ÓCÌå©;'ŠHoq$,Ttup}–Q•å,£yq†r\¾« aqÊf§ÆÍ o¶Ý0î>$‰?¥FäÖ¡›âºtÉô#Ë©Z&¼%I˜°›â„ñÚ…Q¢æ³wï mC|qß8ä‡í?úJØrwÀÜç[!j‚ÜùØLÊ¡\Qƒn/÷îærC8<‘üÃÈ /€XIšÒª§c˜â䔽ÇQq²ŸG¤2§ïqެ$[I8¢’plis\isTiKŠ\)h’€¹¥Š"²¢ÃåäÝäqĺ]=†ã•žóƒ(ú«½ê/ïG‚æ‹qج½Þ™@Wì5”Jù®µ¾,¡IVy@¯m„Ö³üË‘( Hý‘¾QRÁ!ge6€àI̵EM8b””Ò7Ì`ÒÂ*Uß™Æg±°º˜@>| ׸…Y4[.=dÛ  F=ô¨Ž$GQa‡Q*¹¼mÄOJšÀQ}’úpˆâª„Ô¬öÐh8Í×”½§CË œÐ\è QG*¡!ª¿TðÓÉ]Í o•Ö7’KÒ§—›x&]»Ã¸5y¬ÝÞŠÊ'Bi+&(‰œœ «øF3ªÊO[ê>‚º ="•×a}ɩ꬈¨ý{Få®îw’A9uš ‰ÜG<Ý>g'•L (×É1\"=W#¸ÚÝå.U8¤LC©æŒ¼á“͸žäôÄÞ(œR'q XÁPõ¤`˜ZR0L)²†È«íu¸m Ývþ[€‡q ˜nÔ~×!òâ¾;Ÿ«}¿w]!/®4e¸Q°i÷h™%}3…ÝQàÚ7h1(Enù–º†KǜLJÔ-4oz— UTUN颙¥¹å‡Üd4c¹cD2p]yÅ$Õ’^ ÜB·‰v ] ùôNb·ÌˆÓUæ²p­*"è*w ùݱHK\“šSòêrR/«ô”\+Bs[Øê½kà"NK7åGš¸†£Žµð1 ç€2¿9…›þt ¦^!i”ÐÜ‘ÈÜÎÆr×äºö53¹Ó£5s‘Ú—”S\À.­—ÆÎá2·Êð9a;âVq?ŽÁ¦Náæ{Ç`®RZ•¾nÝ‚§ŽÁÞ\á9w ¶dn‚ò=éHÍ­ ,6Çxï&¼ §]DÜ‚Öf¶S@çîjÁˆÛ0¸pŒÜ±~>‘â©^àëËÜ’è,¸¬ß©:Œœ;Ôe³ýP.†Rwæ«tsÀÀáG‡êʈ@¹IÐO¤l8Kån§Ä1‰…k8ÇAPhsë$-µgù½SÀjÿA¸ódÖ\U³zÓ¯ÓE0þ6žouSN-½Z.~ã; N~LVOÒ¡öÆ…Z»÷Kks·&²¦E™»Ά®áœû¯¼ÖÇ-d!¦ú4r Ë-ÞM¹s W­Þ:…Þæg·pÒW™SÈ×ô‹ë½H·/Žs˜oÇØ1Î3NgÅýË*Nq¨Îv QWþ8…Ì®ápؼªuKŽÜ ’Ó#M¹éÝ÷=‘ƒÆwéÿ-•U›v »?uR5=´ñpWX½@da}·,ªNšœNæ³wdœ†¹:kÝYsâ š¡t ¤Íâ¤3wYtA^+Ï’Ne›H}’(÷£®úí– —Àe þN’Wç°¢S ûz–[‹L‹·Õ—šÜú õKÐÜÇÔå àˆ„AœÖždÛýÃwC¸£+‹A¤Ô6Åà]ô¢¥†Õy7%–$ÒC§hì$›±J^/ŠyHò¨~Jî¡´—Êõ†<%…i†“”ì4ÊJ~ôÄåËKzé,C꓎~¨˜™ÛSÌôÍI|>®÷K+YßäµÞ¦É“ ÿ·Œ £ï|·VGíª:ÙãeMÿ@`é¢ áQŒO¦÷QËFaŒ\̃úÒÅÁ$«w™fêôM ž‹:M…Ne ™Õ:Ï*BŸ*t#UmËWü~©ŸþÜQWÏç_—n¥åñ’_$Íižpÿ<‘®ŸsV01Y+CÆ® ·Ö^ìD’L¯¼Ñ’'Ñ!$3RÊ<‹ÚøõÌ)s‰ÕÒ˜y$áÒM:*©Æ÷!ê eãB2ëT?*v\îà‰¥Eâ;L>ÇÑ>òÉc–ÇÅ[Å„aJ¤×gßõM?ûûÊîöµŽ‡œc³Uq#*½Xc¶âû²grg¥=Æc¤¬×†´jüÉâOŸÈ‡õè“‹†¼Ö{gÁÏæpxAøkÐk8Ú$¦M ´6Y]¼“=g¨Wr6%½àW¯åªUè!ëeh?É ÙSßQaC:D¯î±tÚ¢ãüE=Ø_$ð#þ†¦Ñ¾ºgfüFâ„ì»pCó7{áZËEÂ/ú5œ¦„ý2j¥#ë«öýBR…ÊÅ@úÖ³èì %kMÁ{íÛ~!åo˜T‹ªäÐÓ³M!º˜“ì{ì5ˆ«pv~DÄä™ííÍÂE§uˆé­B?„Išœ‡“û݆Q’שoÒ_‘GyU¼œÜ«Ô³Ø¹Þ>ÄI&ÊIµç$xÑé¤çøRÒI«èÚ2¶þÄI͵p“?’¦Z))Ùö8N«ÜeÕe.~Ë{Q«ÍÊCì“0©1‹ÕiWÒ©Òºž¶¹FÈkǃNOmRˆ£ÁE]µæÅsuÖÄì6%ü'É€ròÅ\ ϶“!U›ý˜Øߊٮ­*ÊÙ°ž¾0²9,¿÷Ò}ëîÞ¹¾…u{bPûYÎ|x³'X7^yªÆ T¾»¼$À/·¬Z½o’,4÷ÈM匛z¯-»\·â2Õ•:¹×˱ŽÂHnüÇNœ<‡¼úŽŠ»5süÞ„Zñn½ÆCQ^¾Ïy¥áµ+äFÊ}òâ,)»J²ÞV—È]ü‰÷.è:Kó_™îþ Lj¸ârœ˜õD¯È~Ï|°ÌÖ74ïŒ#¤@õ“·Ðèqúuùru7áÝ4çØEðy~ui¡¯ZõÓºð€R”‡2•½>›)ßkõ"uë…u S¾6þA®–;V¾ˆhžÿª´Qœþ:mV¿HÜmbƒïß§ÓÝlW/[dï!Íÿ²¨WLÁ]c(ÌN1T\"è {¤¬É¹äGš$þŠE=Õ„?b™çò¼Z€¦\Þݵo·HZLṳ̂¨-zpôÚ3b“•yÌ"b1ȯu‚¬5{‘iÊË4­Îãû¤*æ~ ¡Ã·,NÇ«ž¨‡“K#yû¦3ijeªqÇé8¥‹Ü{û>-#§è)ü5Úéë O§$åýŽÈpÆÒaTêKº8ÙS?AŸ·Î•BµúPæ:5K½¨DS>¢ZáD­šüøËUÃÎå­Ãjíaf,N‹!D/ޝo78ø*5ƒ­¯Ž˜ª| \Jr€'­/ ¸ªn©Ø•o•áÓ¥ö¶íÕ:ÚÙWLŒ&yïûb¹Þê­S¿rÆïîhTj[ÆK¦^ÏÀ¨•´jÅÌ‘S¾;†Z8U³–²`þZjÇH»Þä%Çë=hž"Cô‹M†É*>xÇì`ø±,"uŽüô@S>ŒÜ°y(,¨ÚžòשÇH¡œ†oèÈû‚˜¿”lF}G¦…üÛ£ÚVX$žªÀïÞ¬îl†Ðj×jÐbE|Bgð½SÜZ€¼/ðÆh´­=ö3)ý‰ j1AHí²ÄÍ\,ÆZGâ­#ñבø±q¾ Ï–„Ò G¶;Œ{óÒT1*‰› B§`ö˾íÒ¬g£ÀÆ ÎI汨ZŸpÐ{…c9Õ»…“_D1ÏzvX0]tpÔ7l÷ ìŒWë:á= :ý|Ÿ¹Ð¯P/ô,õêT¶cà¡W:4òWòÍâFÆ;§k!ËÝž ™!²Ù~rÀU¥gËC¯Œ¼"̶³¨W@>†<ä%a³—{qN½ú™ƒ~Pù÷l’è ¥) ûREË! £}fÇ5U´÷ÙÞê«ûq¢ú8§Y»Œc[îPe åÊ(nŽrÝ%°úî>…õç$2Ž÷]òÉÂÓ§$NÁ`BÞQÜÛdÚÕNÒALçvN挃#£Ö-™&j/Ì„jAŸ"Ív ;‘(v¨®žO(Uꓪ”(0©.‘‡rˆz,±"/¯ÿ§8ÅDU&P$=X5â¨Ë•£ ìng;1³³|3%ûl æJ`·¸#œþóÚÞ¾úꮳ¯?&¿ÿwÔÞPª‰©K_c4…c»ßþ‰‰M`¨Øþþ Ûß?¡bûç?P±ýó¨Øpå¶Ã•&ªŠi¯öu1 ¬DdòþÇH9êÇ_—Ç$¼Ì¹ò†¾ƒÃbvúÎ"ÚÝ÷ⳇH{ËN¼n´“7€$=¿ ó]?ƒ°p0&$)KãH'ŽÒUj ¢ãRÍ1pø.ÛÓò´3¼Ô²‘ͽªnP3RG—˜ý™5ž³·cy{5—#ȳKN-±W—vVÇš†·ZVnTÀTå6Qꊃ•y‹“‡ªÏö#zZ$§&/¦úàe «é(>@á›+†Ü/@õ*¥sͰ;•ÒFü,c mŸ\ÕšÁy»ðáÍÞ8ôHÁ2à0£Õ.J¹s%—wfê¥B½¯â`=¯B€¥ú¯ºÚèVîÃËêßîGì7Úà£]VõÕŽéê‚êè/˜‹ÔEÜOÆÜ¸PjãhꎅG¾J«®9¬³ðn!ºßÓö*àªõõƹió¿ LxÇz“³þòÞîl¾°ž:¾Æ¯¸‹OXL>í‚ˬZ—vöH?àO$ø3Ãqe çvŸ:w$‹ÊþD‚˜Ü‘&wÂ<üû'†{>‘›I}‰ Ì5çÄÅ*àÈ/SD²ëz£ëDÄWº.D~Ü×´h‡¹D¦O›Žÿ›ûÅ{†7ïoïŸF~¥yõñÔÆrAï˜ ¡{˜Ç‡#ŒS^û €2ˆdÖ (™LïIJ7~]Ù1Žc^'Âçú®¿¼/âs!f´9Ñú{àE$¯×íFÒ…$‹ ’˜\XQ16ÌL­+ v–º,r0šFü½¾k~d$ ²ã`toÚJc…rvj:)‡aDú0'IZžP\v$®µý`\âÁ%ìQŸc.fw!EpE\$®l6)€8£/m”üYrxVâ22‘7Yg`ìD^©òÄ&Õ=ÆÙ²¬Îd9ÝÇH˜—{œ%˜Ú–£z¥×Uä¨Z“{”ÏD“Ïq5™¢Ì^k¬¨Ü–‹ÇOøN²ÐäéÚâº4Õ|“w ‰ë ÿÚ›ÜÂè)înUqœEÅáÖ[RnEqŒÅqÖ‡ZNa5ñ4<´ äK‰#¬$ް8Â:âˈ#¬"ްˆ8ÂâPKˆƒ­ >‚gØúá(ˇ£¬޵x8ÖÚáK‡ƒ­·p8غá8ˆí·hø Ê’á8+†O·^øÞõ`¬>‚wW kå¯Oú…£¿>ݯ‰ÏþýiÂN¢YsδûÞ[PKH÷}êWýû(;»OJ~tiNh—Q¶0±W|í¾Rç®—M)x§™ÙÁ\¯F™–œFÊe Dcë]æšÂŽ2J_Ýr¨›Ÿº…ÓÛð×%àBÈ3¯.aÃ眵G©oë~V}wWÿC’ȣܹj¾4R£I¿ÍÜkZ‹¤ËŠK‹£¼Á]_'2çT> #ó÷adþá%ó.j³WÎ\Šèª¾xH‰ NÊ[é,æÄÃ<^¥4ÄÓ5JX¡/Û§²yvÑQȹB•ݦ^§ë#‹ƒH¦,ªÞý ¢v®wG&6èÃR>œRP÷ƒ$°ÚzÔÖl­uÎÔ¯âwd2r P©“¿z´¤J`K? ¤À@¨O±ht0År%“åþIÉrL2ºÝ©Æ¢²²…Ý.×øgîÔ>“غYÂSó„OPZ8I5vŒlK!2µâàÙª8| P¸˜ð(œÍò$ ™µœ~•H: :œà:B [{®lÒìuÛYô)Åç÷³ñÙLú°Ù,£‡Ü¶¯òTßçâ«hîPéÁ̈ùX¦>p`Ï8=s’7°ËU9gL] Å9m½Á¹c4}‹s£·&;”œ( •#•+!,×L(v¦úSìt5H|zÙ­¬×/v71Œ:¾ûœñ'$|QzpÌíëX¦¯ú’ßÜçútÒPwæÍº mñ¶cjç¤Ìxa‹¹°¤ÏPÊèÆÅÂpÓz•y5,)[˜ÂäŠî–‘å8 Ô6g¦IÅýÚmÆ©<Rµ{¿hãÌéžæT|ùŸr䕉&÷§œaâååNýŠŽ·hÛa½ºBO†ã áëpî S˜íG}ÔßÜ7Lõ) ™Ñ¼`×á €÷üÃÃ"Õ0‡ ¤µpµ?2ˆnœî]•EÐ?Ãò¶_vN ßÇiísÊ©Ó擄z°0øoÿêä¸ä©êœÿÙ‘Àr?‹¥Ybž4é€Ü¼Ó^Ø@{þ3%Øq@û‚”.9úìHÓcG£ÉIë1¬ Þ 7?¯]÷ùøYÒÒx'—jn‰«¼4»ÇXØ™9'ž²âl<û©E∦Ex“(PLbVRñ΄(Æ¢®ÎÌItÁ˜|`)mj›S&d¬M›;«pYLRN¡ˆÚY€²)/`Æ–)²f–bŽž“wëók°Ù×x×]ˆ/îû ùá\n¸$ê¨ëDØ‹LÿžüÂ[@Y¿ÕGúüw’ÈL»!Üp‘[— X éh¡ºJ¡¢~õ°Ð{Pt†•‹Ó6U geúêð#{çç´ f§05uXÚx-´»–Ù]©FCF±òÿz:‘Ô4{ҀݪíD„ÜØC®mŠâã‡Õ“Î$è0׃‡),üþe;ûퟜ°ŠB$¯:* D0É"y¿»ùö9ÝÊÑÅÍë[ztý”é¤S;*õá4õÂã4ÌéIa$©’!U% /Õ¬,¢àÊ‹|n·ÜD.7D¦êá£f§œ¡“Ó€óK>^ʱBÝÈ ‘ ¶)|eÌN—Ü5¸_R¦©GžÖ0¢wЈy¯yX(,PèÇ)‘ëš9Ý£`¸7¡úJ;óOª ù¤šŸ{ý®×î ™ÅæU+ á¾p 'Iuߘifß~¯yÈËw“#‰Ó§jwÞ}‚o4LðèD2óÚ³³Š¼ÛMÝ>f§\u2"zÂ#Aò ·©ÔÝØMTÏΑR«È³Ô¯ôì©rb¼PÕËpÖÑYˆ—»Â²¢ê¨Rf‘ÙVîÑX‰q$§Ñc¨âéð#uMmÁÓí: ±Œeb´:á„^8ÍÑÔÀ#Û)4'•E½#• û'A®õÝȨDT¸_2È.ìíQEk¯*¿Ë{†>Ó”æ¤`½I«h”šË%ßih+y§I^ì瞇sAÝÊÜ*3él¼Å‹´{ʃ^̶rO•úJO/•aªß1 ôÎ]QéNükLß}Uò!’âŸ)ˆaÙûq„µ’ùÖýZÃ?-¥j΃$©’ÚП¥ÜŸ8ŒVá%³V— žUgGò}–Mü¼¾’¤¤~Õ·ÞaÍ–/·ÇÆœ‹ZgØ£ kî_ïܲ"YÔÈGäH^[ˆµ,» U¬Šù^ W–ýx“K,GúQxæd¥à›“f·4ÎÂFõJ‰|$Õj¾N˹ŠO•"?…ö²8´+ÐóP¹æefy;Ù£ÀÙ‰^TFáMW OÍ­Ö^õ ꎿ¢•NNºÊæymn©Lb,çgãÒ™úR7ë¿H¸\8È;séw$®Yþ†f$Y=žåohöÿ„³‚?o»†êx˜¤š»Yî ´ùZS¤íWÍ:l›×Ưu {Ûž'…Œ˜Ø’jdrp€²4,s¹B:Ú—E™SS+¸ ¦É¼» 9{¥éôƒ†eavÓoÒ6ˆNäÉ+ÑŠ#«ï h7÷JJ.ƒú œ?–EÄÞÓaEËÝ).†œ©Ÿd`%$ïª"–RuË’e/&F;TuhpÁ„FjʇPÎ~óNSüj<,Ó´^oHQÞ}ô+½º7màÇW¢U,RVÄûs0\m§o$‰£4u‡ì>ŸsRΟKìI·G¹¡ahÑøDYY ùô„íA"ã@ R̪ü¬ÐNî”âBål-ÉæÔå»\>ìãƒòþ›Œ6€Îü¸|ù@xVñYBÌ‹ø·zwBõÇs›&O‰ÑÃjµ˜Ž—Áf;ÞN7æÉLu3l'ëéPrräå—wºN¤×zz‹Œ;çÀ:òž JÒ¡äö #ƒ¥-N‡‘:ŠÎ‰eƒ¥”²jÈ·äÃÔ‹ê!‡Ôúhœ´xëYvæÂ…ËÊB­uÊ:ˆoßÞ¢·Ï’R»;lµâMw7pù‹ SEl{{•Ë,‰Caj®TÆ÷™\Îr›*§|õ¼yõFCØW"5GßÔ])*öT½¦P¯”7ꧯäÓø{0_n§ëçÕb¼¯–ÁãôyûE{Ø­_¬zغÊ}Q¬}¸dÃäÝ’ Ôdcé+³&ïØË7*CX£·’àÞ±ÚÂ#=?ÉÓή“H? À4©¿ÖMfš¯Æ;®vYª½Z“êó'’’ƒ1ƒ¯D jþB29Ó¸ØõÒœ—ÀˆX<¦„Ô%M‘u¨TåÑÿF´g9§J?bT:ë‚”çù,»˜¬>¥xyŸlé¨`kÁmð(úNù°, Iâ)böaUPõ¢þûti§úE›ÌÓÚ(GÀ$ -“¤SpœVn=ÅôB ¿¹¿+‘)‘wYY®Ç°ÐuŠ1¤ª ÀA¤ƒ‹š¥ßjo@¦1H~o„Ôw“Kñzˆ‹„µírT°¬ý¸ X—Ü$,0ò2õxSûõ¼4¾’ܧ,î]RÃî”À]Çv Ö]­Ñý}+—ÔQy{§Rÿû4ßlæËÏè|2é²$ TU\ùÍr9E¿fvœF‹[ºw¹ïâ²³¦oöÌw¬ ßD¡MÒ]èˆÒ Däô`|ñöäç";„Q_†…ågG¡‹fqøjÙž¢£âñÐO¥¥OÜâªDêC «Îî­¶ùíNOG®8æìæ”4àG–áiż² ÿÏ]Ëmż¸B£¸zµá#ù¹rèv_Æò›ûVŸ>M·_VÁÃbõm6ßh×1.ô6YÿxÞ™§Çÿ›/ãOÿýO8ôß¿}r…ÚÌÓUUP•½y‡¢–yå$q¥Úa9Þ CîÈÈh‚zýƒf$†&Sü,V˜žŠè>ÈrvN–ë,Ì(?Ò$A± ¦\Yd%4Áìâ¨Ý¢á‘‰4z7ß´l`rÂÛMCÌö†VÏì㤠ÀxöòÞ("æ€q lojÚÂCUÈp² ;›Ánå; 8ÅÏ`\1Ž$Ù#r㨺$–›EÌ\"˜μRàCÉ=n˜nXqðnQb<„B<{ƒjêAaLß!ò±yw €â$÷7rW¿©uGÈ©&ùo$A 'ÂÃnJ²°­¤ÕÏ@ùá®ÞǺMSúž`Õ ¸b¤À¬KÆ`I|ˆL«ÉÎè†øNÉ ±£‰i7¢³+ vòÓ8ÆQDSo ÏÌ8yg§Õ•¯«ˆ\ÝZž¹§ÐÑ·l “¯mWAžCô…þIªú´ÍÎÜRm*òv/O ‘™¾Õœ¦Rá(1•‚uW¨žÜ«‘Øfc瘊.Î`H½½¤ù Â9NÞà©äè ÇN°8bª$˜2CdIArÔAF%÷›p8·‡åÉÏÚ¾—¨ÉÑVüÜ1­ƒl{œ 9ŠX÷~FS'Ú§"úðRiî£ _ ej%Ô¼WÉ®$*ô@ 1VþÉõ¾ÁÐR¼€VêŒ@|FŽ:;qYȽgä’Í{xD`(±ÊS®ê®iÙ­»_sij5Fò4}ƒAàéheKÉ=táÒ/\Ê‹G"AÑÊ™é8Z?™"A£s+¹{=DH !Ë#š£À“LË5Ný{E‘yÁ„íE)K0¨øëœ†e†`…™†j“‚e’¢Ð¼^h‚r¨YQ„¢©ÅiVÉ"Û™i;-ߺ bí \prGç$ŠëJÚÎÕkôpðD>°O)¬,ŠNˆŠð˜Ä)¦úÄQˆê¿â(Áq§pdŠª8qʱœè¹PÝVuE0‚Dƒ8Ž+[´`ex¤N@ü†çE (í7Šªƒ}K°&ì =’Þp\ÊÚe0YTwz Ø²Èé>§ÓäDææ¸4KÒâ[ÛÊfeËâœF9yOð(6Zlþ^¶Aæ,IÐ ª©É•º0oœxÙ‚¤M#,Š«ü¼Üáú#⪂´åÍW˜õ¢¸rÁÎð½Š"öbq¹[¦ð8½9éßÙBr5E­¶¶”w¾¿[¿í~7“GÆuK·wwdÎþ¢é\9e í·_õj]®gÕ<ºm»+¶oÇ ì›TžÁ9 I"Æ^Ãâ‹£F•qh–GqJ4/ÿÛ)C)øæßó úÒ×È`H÷á'ò-ÿSœ¢Q–V·òb`Û¶–~–³¤lnÃÀÄ.éÝÚäoíè§¶” æÓD|ê×™š½Qö°M.ûaõ‹__\K ûcõ‹°SÄ¿L×кH„ì´‹}xlE½‘ðÙ£ØG/ÐQïYeŸaã`\ëêàûöVÅ£ñ¶^c\õ+}šòhˆ<õÏO¿ñRý‚3+<sÆiÈÒÈO&õÄK³sc'A\ý’¶Qº°F@Í{êÿRô1'ÌKÀöëU¼L¢‹Â_xœùô^–U¥ðWœî™O*þj6¢Pá0„òiÒgû½i㉣‚uò/ÂÚõ´t}¬\¬‘æc ùU>fŒŸùáa7 `3xØ ~¶‚ÏPí?Lû Ñ^ó_ÏîÑ«ûõ¤òŸˆ&zŠ.œG¯yt-­xï Sɬ IPÕŽÉÅfÞÌD‰aûUÅÊþQ?šÇ×:…×Q#ò½Á‘·mj W*»+›ÙÌê çÔî¤ñ²;Ý¿sŸEåiÔ?òóžÊ×ròm3³ú Ð#,£¦£ÌwLþ–  áá1ŒÀìm™}œsãžJ3&oQS9eù¤¦í'fнHR˜)´¤ð* ŽwºÛwŽÚð)°DUxÈ“C¾ãð휂Ó0>ýÙñú»û|­? <-·¢^ñ]p’ˆ *` &žú²Ði§†Êߎ+÷’dÇ‘`áÀPÞG‡¦UŒ^\ž‹ä‰4î#Pä$à °SFrê<>¤è,¨5”á8€Dp"¬LvÆ“ºò)ºÛ)àRz0¾wr¥ˆÄ+ß·~Ïp¥¨{ Z7äp¹(~39’pd—æ(^tÝ8–~ û¾ý‰àÀ˜ž½˜PØKÇK ËÜO %)ž• SøGÿé·ls4Âã^q—;ÏGÿ‹æ 'Èd'ìðÛ¡Ñš”#0¼wˆÓ7š~,÷ã?°õ Äʧ8Eƒ^±–ÈÑüT&Eœ%HKBݽé»â³Ä /Ø;É‘5½êPŒÓ×^\9â Ú¶pü³gwb8ú³$i~èœD1²iåôDâ4¦»Å…ñH°ÂèÆÜœœh 2¯'EÌÐ*–å}4ÒÖnqÌ|ýFÍ×o5óu­|¾È¤–ð9ïÇLÚ¯hÌ”ûJ>ånpð<±ÁóÄDÎÈ?Ïì(`¦‰7Ïì€ç[]1Ùêà?}âÆÌ3»¸WܸyfG>Ïlà™lÄ<³ƒîÐ$nžy+€™gÞj@§‰·üV<Ïì€øÁ<Ïì€øX±Ó½+>å¹Â1Ó½V7Ýkqôt¯QÀͼ1ójQ©S«˜:5,~êÔ* ¦N- Ÿ:µèOlÏä1ùéH4“oÌìI'ÓÞ –™¶¯ÖaS)åÜór÷1~‹¥ŸÂ‡ó¿ëÙ~T4—íL«Œª9ìa¿Œ¿NƒÉj¹~ß~ÕŸg¶¢Û/ëéøqáæi[1œ“9OE-ˆ#Ü3>¿Sñ$‘’y^O' f¾ñÌ—`f;_þ€@+a½ìk‡öι°^½,ƒÿúï—gHT5™Îóåg8ø¸ú¶„S³Åjµ†c_Æ‹2F…N¿N±(&S +e÷*òMwbáL½ÈQ\½¤?¾K×¥Ûâc"yxÉrD¬j†+B‚@n“ Œ÷Éó"º¹{ó ÆEHd@Cb›º@¬ï)5Ò"¤Åÿ¨ 0íé0„—‹¯ôÌ!ÌÁ°—Ô<.è ¤MOfØ>e.“ADµ¬]$C¨ËMn®„2ÜŸ}¿ßê·ÕUßÝo««?Œ›Ûšï:„.yØ×cMìñäA6hšêr¬gåÇf'Ô‡/È*0ß“/ãõx²®ƒÿ}YþaêÒ,b”ž¢Ø ýYÒ4¤O¤À’¾aë«”Yz \LÞ‰ÉO«³žôL{ÈY™Ñ(`™¼=œû ªt©»ÌÅøó:€à )ûYÆá«íÝ‹«ÐTL¾Kºº„þüm•Oƒ¨Ëª64‚¨î˜ ÍKþ vç‚r()«–ÚÃ]ÕX¸@ŠIo.š.Ë)+Óx‹V ‹dÉ›-X~ªí·îÒ¢˜ò>vþŸ»2N ùg6ø¸‹5¾íÄg¢¼ÂúžûÎð*U—À#ùÛý©³íL“²ûºh"Ô¡‹ ñ è‘zG%߯Ó _q6¡úéÍ//CãLÝ~DòƒË#Ý 9ÍrVßÄ¡büYž21Âçµa ¡/G«@TÖÔCÕƒPêº!î\µB‘•=Ý’©=Ã{fìn€ºU8•NO;³ûF B’Rì\Kû'!;óÕezBÞÇ¢òÞ•’CC|)9gîHxÇ*ï+6:å…cØ}N]eÿ¬7¸ÍiâT-'8†um,;‘Ì- «¤¼´0Í·¸Ý…è±*&Uf§7L5šÆ¼ê[ÝÈWCra!¿Ñ@þu%reI&ä½£F53ª?1Ü]É>-Ñ\v$IÑú+ΚIPkf™lP‚αù&0šL:RÍÐëò yðKô1aRо»¶ÔÚáßG³s–qH½Ó˜¾”£7o±|4ó2•ǧ‡Ooš2Qké bõGÃhUÇ–DïUÄaЬ?ùªFtW‚,¿=‚„×C°œb…7ið‚Âh:I%9 “•ôƒ†¥ZXRËSwgüýt‡ÑªÖ~êʽª‰¡:h;å!;ÍOX¯ƒËZ<è éL_ .õr8M~æi4XÑÕ°G?½f¤8#ÅÞèp ¦zƶòAD39Éf!åÃÈi†Â!븺¸­™|0ÍŽ54œh•1Zñ>øªÈvQ/Ç £î’JëHITÊCÈ Ðâ©êRNâ3ÿÞ’û O9õaÑ&Œdc^ è7oÔ|Ž¥…ypé!cøI4|>ˆ1Éû‚ZRÅÙ×k¢†—Æ8Ê ¿¨¶‹ùËd$ÎßcŽy)$W3¼r¤æ«sÐEýV™ˆfÞWæ²Þ…UÈ©ZèB'ß7)‡›èn–vûŒÀž¤á9“W1Bc4“|nõ ý•IGN×å*†Ë$O¶,²E= X~ëŒÅW¹ÉO´ÞmÉëä•–¼|5ÐGp½·W—Ñ T}òmöEåjI­¢®Óö‘I<}ÂÐCÚ‰¿y©—eB |æ~fy+0š~ŸNäq¶Ù¼{Î¥.žxXò‚äZÇZÛENm‹U¿Ç«¥Ý!ßH> ÷Ö’ûSTƒìA³³è-Sù.c(©zF„–â©vi(¦vg·¯Ð ¦mÅo³Z 2²Þ+hp#…oÛ¾:ÂŒî.÷ÔâCˆ•éIC½)ÓøÃ»×÷ÃÕ) M8ÀvP™G’h3Và%¨Üq˜¾Å9KÑ"LùZ ¥ÑÙ ‚ÁU/•B^°„ÕÈ÷áïŸ>”‡$C'„gI\?Kf;¸Ð§QäÛ1– Ê/°ã’(JÌ$¨q÷ìxȃ…½±ùÚ}«Õw÷qÔŸOVOÏãõ|³Z³Åø³Ö1AW¢Ë>®–Û`<™LŸ·ÁÃb¼üCž¦Ã l×/Ó`¶Z¿ä"̺LSÃ<#ÇBÙémʸ0n(¶°Û:»!ñIf$þ¾¸ÑÞÍÓ§@?È)«÷g º6Jà°>z9\¥ û¤|F⤬\µ—ˆ¸áM x¦bt¨‰¦Õ£4Z7¯ÐJ\‘jç¢þtSÿ,ºR\ÌYíhèôy¸(™nkÂêdòJ×q]Hy¡¶ÂþR±‘ih”Ôš!tÊðnßN©LéGFEù¶µãž-[zá¼òL^Âó „KNó_“f·> £© RüeÞkâƒ:v4¤üƒ°·Í‘‹ ôyÕøñ<µ£=K¢¡bGV^a {»ø5©¸J×SãGÑÈW×F Z–&ùf†D—o†ªmNR¾§ù´³f8ÜCݪÂâ”ÌöœÑ_Q$ݶ,äe ¿òF²§ÿå‘ÈÛ™‡ã‘ÃÁEp$¯Ó®…Lîçæ`é)UZC[-•è¯ê*å_d±T%¶î˜›dðµ¨ÈéP¸,«ï䢶ôôËb8ÉÃ…¬íJ†ˆáiþ4ýZ-Ç Ú ïtEâÿ¬¦ôÕM qú‹cèl(Žg’‹†TP¹/’Z u¹Å“œ†ì6bˆNè¯0á5ÊMï6`ú_j7êeN#¿ä‹@-ØØV•Û0†Ùòåû M–u #¨SR/ÊåÛâ ùÌWQvC‘¼¼Z®êzªžª•fKžÕ! 9Ö|;•=]Äô%x¥e½ºº¶ÅÚ§Ãô¤E(lµ!%#šô<0E—¡ ¦˜Ðt@5>xúú¬0ˆZõò¾k$Eíë~(Õ¢ áñdÃí,&#˜Ëki4”"¿\4ŒœåŠd¸žùÎE¤–Ã;dˆ¦Ó:L0 ”1Pi'ìPÒáRx CežÜ{и4FMăÊUoŸ”¬7òð!%­ÑE‡mzXå›Õ³Õ»Ë5KwiVX¶qã;°¬ÖÓ³Ÿ¤ô ·t$óár¡yjöX %i¼‰¥•wzPÙ¬¹5kAãeÂp©êº£ÁÍ@%{Š?³¯”à°&[–SÒ\Æ6ÌžÓ,!!ÖVåà|ðÑŽÿšžR9ÜЊãÃw“–ë­ábï$yÅKÉųçºgE-*ô.J¨+ùŠ¿ú››ÓÂ\Óiq.ë²@WuY¤€«ö-TÀù/Igï! ¢ÓJX´îŽì¿ƒ5•a2  Ó¤.Ú?ñ†jºM¾¡ªö 8B­gŽQtø1²çÆðª|hYçY´ºÛLÚ'‡Ù´|ÿŒÚGýH;Ú‹i‡Ù5Fvè~­Õ䃋žF¢U,g¨¬ã‚X¶gQª×3á†Ê¹Í<¡ªÎ³O¨0ÿ5ÿ%ÿu= ÿ]ÿ%­Uªþ‚‡ÿ@ïô*Ø3…v”«|cìâ´{E¬qË@V9%³J5 ‘!r™–@UêMЦ½âkÓÆùɲ$‰òÕ"*Æ—¿-ë­è­ZŬґ¿!ä)Q% ·V#øøÔ,¹ÌOö&…î²Mÿv£J3|V:ÝÁ¨”²ôZlÉR=éïXélë»Üù¬uWh¨mÝ*zWßê/ÕÂ¥‘Ùù¡­¾ëU4®²=ÄöÔºšÝ¯Õ9ëõ€C)X3b„ú–e¬jÞE?@æûeiWCtýp&ziÛѺ*€©%V_NêA×’#Þw`Ç]¤Ù½µj—4{Z„Ç ·œ ’•ª5 –%y"rËkeRا1V=õöã¹­cˆÊÑQ]VZZ‡þéòªu·:ž¯+×Ô=Šb=ô¬ÃUhêÕÁ¸4‡h':Yÿ¦ÒUÍ©*|»ŸS fYì÷ú²Ý>=ÊXI¯æÚ´ÔNò²¸Þƒ^.J>-|¸ÆÝÔ@å\)¨^Îøj ÖœnÉÃ7âÁÛo-¨œ×ÑÌ¿’ 4b¶jÕI‰„¦‡êÖOÁf‘À{LÐW÷°³åjóò,o…pg>çK÷ЋµHÑçðãÇ)$ð øúió| ü¯ $øfá^>³Õúeã^8“/óÅ# ôz鞃“ÕÓ ðr9~µvúbÖÓ™hPf3uÏÏGQÛÀ‚¯&`³•ÝÂzú/wfõ»ÿ¹ÿ× ôôû|ãz6~Tû¤ãþ²ÚˆÇü¶/¢*Œ'_œ™ùãÚ=ßç‹  DçËçõ골™²]»8ó•{ÐlR€às@ª7˱{Ž/>}T¯Å§åæÇÒ½Ó^ü¤þ÷5 a,æÂò€C$øôû$ÿ4þ ¾™¸×€Å2ˆ,V«gçÀO³ùÂÝÖxZÌ—îÝ´°6óÔEW7ÿH¼¨éÓíjµXrg 3$—SX)ÂÃÆJ@ûÔ%¨Ì–«ñrýð2Û‚O6s@èÇñv >ý =˜|"4¤}/W €}"BCÚÉrõ4}‚„ØäËÕRWÏ@´Å,Úß3$‚Í3$×7kHà-(ôH5ß>, ºð"aÀÚ[Žg­îÊL¼¯[²Î’¥-³è ¥ãúZ$u{+*üJ"Âk4cð EŠÓÓ¼ÿjÜòÉu)+m©¾pN\ˆ™>ÃûÊBX*€½%@c⇜4Žˆ:„,âyù5ú¿vsõÏs.Lú?”ÖϮӫþ}Z-ÄúÕõóÝVª3™._{l £¶¤jÑ$C ê¯ÊE”ס]~¹¼¨­U‰ÞãµíË G‰öµ]4Š4ýÄjDt¿w‹E¼›DLö¹ ëÇT¸ °4F'au•yïæB;Tæ`ûê˜Xí«£ŽÝÑÀQŠŽè´,a§Ü¨\²C q+Ž¢Ø«vy‰³¶©.Ÿö6ÖÕ“ù·Y£Ð×–uÎÉöp¡¦ÝÔ‚êoj;pµßC7î2P,*Ô#c¯¾Ú[îŒÐÕnLßæ3{Y¦r•ä8\ÈáAŠAñ¹œ’Üp‚¼Ÿ5 ¯g+r ôz­ò“EÓœ÷¹: ÞÛÈÉ´Rç<®`µ•þH>@ Ôž¶´ÅÒ$Èk7]WGõìºé¨7§w>£N!"°0з8:4W_ņ½`W`¹ÃPJû\7“mž^'dûd¼ñg}Kì´S[Ãü¡üUY¶Qø©îL…ãÓ"Ù!Ñ…uàã­hdÀ§¿)ç|²Ö¼ÓôP^\Þ?b±×:2Ù*1qÕ‰ƒZÎ F剛œü½º+©kFˆ•ì:y^EÌU‹¤Qy¼âÀƒìè"´ qôÛç" B§üËXæ1=¤Z/Ô¡=s×H~ ©«ŠÈ?ÝÊu¦Rx˜„QJÎ)£DHš²Ü¸¦rU¤ žÎý¦¥Ì{ÛöÎL"ZÕxj:%ï.9ÜQÁånG›³ t†t5TÉh ¡8·ª«„*.Ó™ŽC×t®ãÒ1u•à]‰9©`ÿ¨¯yz=êkŸ<ÔëÄœóý ò.M¨îþE[ YÆwÔàÊáž“†ÕÜÊN*’S΄¦ÍÝi½í¡•Pyú9"!M‚Ø!>•7´f¶‰‰iB•¯À³WCjÕ‡c É“ôÝÌÄÉžp’†ä¿T”åœt??pö7Ik—‰—E¼g6Ú˜«A§í ¶eô·F)–}‚!µr]½µêYsv¨ €ÃÓGU/.H¨ul c#N…ŒúŸŒjºw3*ŠÎõæ-0#ƒÊ‘/˜á$ao𔟉´ç4ôJVŸ6«ŠSH`å™|Øßy–®{Îêç‡Ê#ÂUÙέGÁNû‘Dé]ç™ –¦:o&ì=‚"²%98~åPä@òw‡,3í0\%¯à¤HbfÒX€s)-WeÍ px<‡ÿ*(8Š\ïHÜHåÜà èYúœƒð$TÃôƒ©aÓ®8ÄäÄ: Ę£ƒ³A¹Âeƒ"QÙàP¢ßEd‡¿o`­·"Ô)ñ#"¤Q†,ã,÷ñd†!…ˆý·¡k‚8öË€¢ïB?SÚûrdTžê'!É.?tAùš E*¿ïŸ(2'Õ~+P}¥aLã¨}z=ÄhŸ÷ó=`¤RH¦nþ‰’P{þ˜ÿJPtÌ ûz‡: øA¿ÁF@ýâ$ îñÈ)uõÕ}ÖÑœDEˆJyA•Ç5u±‹éû¨½òr–±/S<¯ªY€ÿ΃,3×)(T؃‡°·–«ê-šz÷/þd9Ÿ{“íø¾w»}Cž!soüÝÖv3þá{·o÷›oÇÛ­ñËùPöjë°°0eq\O^zþÂØ¼CúÂØ¸ïøÂvÏ ùÛÒöð]íˆÞüjÕå@µ H ÝfÌho^EÛýÙ\jfÔËm`„@D@BÈœˆcí–ô6B…¿—ÃÜX‘í µQáÕÞÞ¼MýÂ\À²[À_¹Hí‹5I«ÅÙ‘ï«MP«ê§õVòQîE;_¦=Ñ×ëÖ¨šiáH™,ìŒRÙHÑ@ÈVc_ëpôzégœhê Púk$j©&¢>á’PíU®uË ”ó#dýòI˜ç€Ýk`Yÿ®ÏêÑuçWýüXþá©!µn4ÝèÁœ¢ÙWì5LZøP.SCMb¨g}©Qþ.“c%ÿüð´ïhÞî¤ÒÅ;A÷GT‹B;8êÃòúZ’¾,ï.éyÁò÷ÇÅ˶Þ×|­¼žIØQ7—Ó[k‘x•t™T²Adp*j7:‡/á‘Á µ½H¹·®x:J™î\³W$aG4Ý3g 9¶Ò\¼j¯ó>È:t¥3”Ì0åÄŠ<+Ì·õÙ‹ '5ft‰×ަ‘¯þ1u3«¯Ô"ýˆ^椥£NZ€¸ fX Ê™IeAuÚc³!FçCŒå°¢9l¶c9|eÊO̓5³þæêÁõPýHDdÚig‹µöMvÖdÄ0¿Q{ñtš‡×ïÜ<˜|†11OrÎ4Îà-˘úx-§…Æ5Ç ¼v?H$ÒÝBR©–„‚èÓ]Š _í{ VÊxÀRKW4¬°­Õ2M)Ëz X¦RPŠènžiWözGÿýöiuqïMû¿5îÌÕƒëØ«ïƒèQþùP®ë­Ó‹0F]äª*èÍGIãÒ¿o)Åf„hæ×Ps.S—bׄºZʰŒ¤VÖÇ@Às$p„YëZÆúÙUÎ7¿ñqšYuß7ëòËçg2þP² ËëKAmvqðJ¾é:[Øèyü˟νÍÖ×øË´’øîýFó+o½Y.Ðøf<ÇÆ]àRM¸§špL5á–j—jêO©ÀÂW¿ÙBµ{ƒÍXDD³»ÌÄÅõH>Ðá6{Æúšh3iØñ©Sò-ÇÙî5ÚóIBQòOíB²ž:Êb‡ÊÈŠ„æ ²¿úÛsõäº5¯~•ÿ¥{Ý‘yŽÔûšAH¡íŸŒ "(µ?(Ðî èÅ ÞdŽ5#9ä@qèÑ«sþ–Æu-¸.+òÁuQQ?>=' ao]oÎI};¨Le߈ ¢w£²i(c£§aLÍÝ5RޡljŠ\_¹¹æ ö†õÜXþ¥¿àÈ×GýHÒœæ”=ÖX˜ù‘Z¯ÌÔÑoMº_ön×b×*å_>#²Xõ¯aaõoí›@UL+1§hí³ö2öþ„ïÞ€~™ìÍ•ðÛç¹þN÷+=n8 QÙ×s'‘z ÏóààkWæŠÎ2õU¸jyŸ“ý`r,Ñž¨FÈiÊb´H¥EÒ(é©vbÀ\ÈèPJeÑöm›Úà¬Ç‰î»D¥H_SöžbŠG‘‚ZÉ<Ó4yÖÓ.ÊÕ5â›<È Ñß æÙ¹¼l÷hSùzC©ž÷V?»¢*Èyí~«oÁíJìRe¤)Ë7²à<•wF ´&õ8¥¤sRwÓbJT#Tã(hê¶€J†ƒ}P-™öÕÅßb9Ù}ÉŠ›É9Â0¯šù±-cC¨ñSAs–Rëj›#^èæ3Œd^È:Èym­v©âëNÙBUðF ª‘SÝnµÎ“Û]ïä—Ö­¬®µçZK #&Ú®Ï]«àñB×sÏCíö,˜L"ÃÄG}e >JFN7Ù0RB¼¦u*LîZuarºq€ÒJl3À fãk. ±¢Ñð,©ŽžÞ@ =ñ£ÎYªÖ°”£u]–‘2oAL£—õ-¡Ï[ÆæL¿Gû¦Æ‚åuÂü»¬IÂr2¥"@ª*µ2^ëfCJè%¥*—Ô:‰ÔÇóçú*¤Z9[©#¾!‹]u¶õs¯¾¼­WÎýNÑ;C¼!ÒŒ”¬z1öJÉŸ7ÌÍd°}<)ÿ¦oYÎu´£Î¾©Šù7b[ÁŽ“¢Ī=¯4¥¥‹ùˆåƒê–Gwö” [ò‘QNÄ0bjµ3­îωdzú;Í@ÀVöˆ¯U÷Ôo fü@Rjc  T;Fiè’Ç÷á·?þû‡$¬ïqBëKJ±UÅÐjàh)öwnÞ¥FyЦúÝ¿9¥Èêýäá¤|Qê¬ã*†‘&¥kòaE“à• «(HÅ¡õ|º÷Ùëpª‹iøé®·juœ x%ÓtÁ\-(¤ƒ¼o-|¤Q“ÕߩյnJòöÅPšªú‚$øEÙÁüïÝ¿†|÷ò`”S §¤¼ïm ÒÙ£6š–…tNwÊ×°ãËëõו¸Ïû—/ d£Dæ_,¿`S–‹/$¶o'ˆcöN"¿jÄÀ¥³úÎõuòr^‡ðÊ)Ëý:y†V¯‡¯¾š› ÓÊö…¢œ/Î_Äç±(ë€}U ¨õSñÿ"•^§É}ü˃`Jh¤Hå”BÎíš_PÝ!šZ?bs¦£ÜÕŸ1 ¢!cwvÜ`¢M,±Õõ\™3ùpz"xsšjÌ®†ÈݹL$ãñJKgö7•Þ5JâÖ¬0-ËŠÑ} ˆÕ¬è¾#0úSÔ'ýoe“…–MY´,>劋ÚÙU`D®º+WIÙ–EÊ3ã¢ÚK€Èü -ËTV£Óô€}›Zª¼#Ò·]ߺ)–}:ƇŠ5„¿‘è;qÕr®µNíÕ-m‰‰~×$@!ªzyG!Ó k×r·)?G¢ÚÓ²>³UÏûóú™j_ªMåV±§êxm<ºŠvR£g"Dp “¸öü¥M&„vEêT²/n4#éêÓ¦_‡0tÄËÝ]~x¶wbP}–$A -[úªUgÔ¿"ÅË‹·níàÂè–±eZç*C•7¡“¥ !© ººuÈ0ª‹¿"}ªñ_ ©>oÊâíÿñßÿýê,%þÍ®y‹mvÙ˜•7Ó}]ýQ´^'U­Köàº_‘{7×*0šõîßæÃ'B¿N‡/–on4Vº³ChPáæ:ó!EË» ‡¯"âÔs ¯{û´‚«²lHãÏå›qé°¹§ž~U%Ÿâ«¤kÙ¯hóߪÉäq6ÐØ¿Wi¨Q.ÇŒS‡6¢_=bþj¹ÙâÒ³ÜwÜSðûV“¶O'¦ÞðÑC¾ IôÉOV%rt]º+÷“ Cç´V Ê¿=Vˆü×ú$ëq;Ae"è¼NÕÏ®¦åÍï³çñêŸ}±:¯ˆÑj½Ü.'˹ÿÃ[ofË….‘nÈ´÷ÿõ-Þb³LwLì©ÎÑ¥9 u 27øðH4Þ“oÚS·@ÝBá-N–@Ü;¶·. rÕp¢hŽ'߀Ow™€IÓõ-ö#+Ò*Ø=©7”@Au'.©ŽÚ»fo üU0«K–3–cø˜ §½îÒôC$~ý ©À \¤E±ÃpÉ'§‡c.0¬úb+² D•æ”i®å½Á5Ρ\çB40ÊÙǧöæÂ°öð ×L‹1l3sB´QrT¬óTr“Ô^[z“4Ì%o°‚×2 ëœÜ$qƒ n‹…k[,Úbq,òˆ½ãÂU¨p‰¬»îùW:R‰’Õ­¾I2Ž+¿ÅN„rÔ„‚ó#¶…)(KñµF².ïZäûÿñ;7‚!›AÎDØþf3‡O|Ôº ©@Ûƒiþm¼ÒÌçLái«eüoy‘ioéÓ*”^âà  ä–&ä[7ö‡cÄ53Qõ¨g"ZþœËéwßÉÏ.Õ1?¹6N—D¦‰OÖ™l4ñï_fóílÑ›ìLX{¿¶Þ¢™ß2W—Ì’Lë¹Þ”`øõ{ô—÷ zõýÑŸÎÖÞd»\ÿ¶‰ßê·?Y>¯fsojiþ°^þÇ[Xo–/ë‰gc„”_mÕÕæóSÞ¬ëï9K|Á [ð"]muø3 4„¢Øïé¦vfc®v¤_£ô;z$Ú»¯€”¼ƒà²k ,'%S﮳±®2»ÊxÓíÊ— ¬TúU³úi_ Q?ñýêïÕu„ýáuEÎé`¢C–ìÈû a¡TÛ=µ‰1üKê²ÔξݾƬ¨6Ä:Dè„W÷¼Ú¡-Lh¨—º¬bNZ¦ÝÑÓ7h ŸY µé”Ì:³TµÎŠÍ™ÂˆÈR=\„êû‰£Á´N]“«~„¯Áa5ç¢}.W7Ê9sH<‡"QÇ¢Zþvz­¡JÕPÉ\ëT>'Çé<“^¨\ÐßÑ4àŸ5€âešÊŒWPiy£RûFENctÅQðhüý‰ìó.øÑ>Pd?á-z)ô<~œMüÅËó½·Fµ³¥ `§Þ ¥Êß™«ÊÙ¨¥PÏ”öŒ;,¨Ÿ)•‰ã%Uxã7â7]-JD Ý_¨òéÙ¶ù8 û-~vJÇ@ñ2[ª¸¨Öûl9ÄQœÔií"Íò pµE§¿-ªž]·Dõï÷¬H£1?IÓé]5C]=ªÎíÆŸ~íTM3Ó°•âýj„½Æé\„^߇ˆŽ ‡4È ÷{h…&K¼ù½˜øÞÂ[·ËußÉ@O–ëåËv¶ð€6¼ÙVb÷sðÂÛlûwª¡Ÿóåd<ß@¹åÃڃư]ër?Æëñúq§¾{¿.×S¹ ¸ì#tëÖ7©Ñù!6P™=‰tœ,"H’åŸü+Õû°³Äå[¨³P™cZgÇ·qN²X{†W‡oºíŽu!h©ÑŽêŽOÚ±¾ñ8ïm \îŸøzlÇz·E²&„CLܲ¯¹[Ä¡Rª»ƒÒˆi‡žZ®àêÄžFœ:¶òc¨:PØ÷&\ºGP\ùDÀ\‘øPe®”ë­rYXùpY¿sNŠeB–³·€£B®®3Ä¡œÉñrJÔ€;vRh? •BR¦µ&¦êQss2”-ª²+Ó’䌣SºUÀ¦4M¥@™˜à’ìª|šw³ÝSDÓ§`ŽÉdY–ÒȼfrDê Vn0Àq¦"؉òê9)>Óð@R<ÙRp…÷€æÍ¨†îª „p0l`±ú딪›UŸ¼j–Ó »‡ó¨áŠÄÐnÛFÔ%ô¼tiO°ªquS(‡µHÎ)dTóNº€«öŠìýÙgz¶sDhe4¡P‘¾óÊý¢%•iHF¾_¶Nչ龉‰È#å8ýlá2ï›–ö.qæêóžüƒ÷¹šõΤz‘3ÑÜ—½øAsü¤*§Ž»Ï\³û¦Ê aý«¶ìzÁ–îÕa{šfKãå+ ÜPÅ~O8‰fKåÿµwÀŒ"åIslÇòà];G5ƒZ?97±?œÌ:æ€b‚}çTçL±Ÿ[ÿ\”2p­¦û Пp3£ŒWЛ4çÂ`ùÜÁ@ þS¥4äµ* º. gUK1[ÚĬ²TCí]@^Aí3¶Œ}"wëª0õÆ/ó­ÿòðà­ýÍì?½+ðçÚd•X•¡úäJ, š0.ОÖ­i]Û}?"qÕ7ÞJœš08•ÕÛG èW×ù1@ ÖU¢¶—Ó¤<ÿªé—jµˆÞ£FX6rsà‹ä$Ž!æ\Ž“‚‚j™€‘*3û´JCNÔJ`/Ȼ¦åV›Öw¼[תÖÖº9'»”>‡l 'ʺ'¨î°³jÝSP³¾%¹u➌G§ÎÆ¢QépöƒÆT^KXßn ®tô,à\Z•Qi[ì.ÛvªƒÙ¶;Ķ!é Ö%µb~rå¦[¦Ú~¤Þ߯ 4£ .”tO‡Ç·zM??ʉÿáhüK*Ь<-3ÂÛos¯ÆrßDúÚÒ7­ÓuͳÎr×sÇæéõ²}2®þü¡šó\ò\ì\e¶zûçø“«‚`ÉʱQõ¥O7<²Õ Y’©¿FA¶Rä#‹Õ ÎBTø‡˜íªà®J²ö¼–ûÒ†Qc,k–°\µ’"V÷.ˆ|±ŒÓ7Ó ?€¯/QB«(—¾èž —ò5Éž~Ä$uVSû0ˆTys¶ ~ÆÔ:wÖ»qÑÊMÒSí¾^Á·.-=¢™{äP!güu¥wZžLyˆÁôdô†”s/›‹Sz³®fÛ«YeϺ\¶b;΂H5Q·îcµVTýMÀ‰_ á¿z¯Fʹ÷j„œKiWÈ1}†éÿºj®ý_G˽ÿ눹ö)çþ¯£5Dÿ×È Óÿ5j®_GGý9X‘I£EÜÕ˜ìOã s¬FÃ¥º(v2Á|¶w‹P%#\EäÌ,Õ]^Uq~'בO£3ÌPáLm¨º2Ì0áÎaþx7Ðüñn¸ùãÝPóÇVˆfoÿT·!fCh¹ÎEï‹Þ 8½r.z7Ü\ônÀ¹hWK¨e¬ÁR€žýnЙíÝ03Û»g¶­žYF|ê1A?r¶g…{”rõš9Ë8ö\wNsö»!æìwƒÍÙïž³ß ;g¿zÎ~ç0g¿rÎ~7øœýnÐ9ûÝpsö»¡æìwCÍÙïÜçìwƒÎÙïœ³ß 9g¿nÎ~7àœ½«5À8aØ€»AWîZ¸xànЀ»AVî[¸fànˆ€»AVî†Z¸hànЀ»!Wî\XTQqü²XÕ r^Óú>¢›TÊ»ßè‰|µGÛ%ŸšuÛM»hßóBiQ$IÀéßmBú:cE÷n 5µÇ¿ÞfþɃwN{)4¦5Ñõh ¬ÚàŒ‰æHÕ ‰®]ÐX {sƒÃY5@\Õû /Çér¼õõ3#{‹Ý¹3þlŸ#á×÷˜V àÅy'-QfMÅÚ=Ç=ƒRùè[ÎþÑ›|êÁUÚ©þ5}^zCVºó3õ”´Ž¯ôÛ§=4OäÿÃW“oÈ ‘ :Vw`i9#Œõ§Ãhüý Wôž†¾Ø+KY&xn9(×ÿ4YP>ºNÿêçñ|ëOg³mŸß¹.Úa&Oãµÿ<þ –SoãmÀz1ù½Ù®í‰©ÿð¼…˜oa€·ƒŒý)XßÇD Œ˜†Kf>ñÇó¹}Ò~²œÏÇ[Æl¯`ij·ÙŒ½ ’}îv¼þ ‚/ÏÞz61ÛÙ3àuKï× Pà×ãéì—ªŠöÈöiù²ñVV¶Jsü¼z¶g~ˆôÞA^-Üö5¹Z‚ÂåÖPù X¢_àа•/½ðFE¡ìŠ nÊuXåRþM€*´j†ñEÞœ³G•Û¶j$~êÞ@4S ÞDfbÔ=­R€'mõ‡_½Á¸4öã =œÍé@•/ð‚£¾\¢Ò‹å ¨`ècÏ„k kÏ1;êÒ×3ª+Ÿõ ëªß•»ƒ§ âþ p‹W&×v ~ `:$¡9^&¿ñ*ýH½Riö --p€ Õi(aִ׎Ϝd6S)¼ÄVw‰³VÁ¦äiõé$¥ºO 7é ü« œ á(z@”@5Ñ¢åå¸sÍ*ûš¥#÷/¬wrEÔ†­Z ¶Á8‰I€ÍfNöF\ʘìFÏ'”œ¼‘FÏÙa-‡'ÕR˜un)5(z&Bèn;3)€ I…`+ó‰î4b`<äTm<‹QpDvÅEx¹nH\oSÓ{|B«|&AŒMhY®&GGXØÛï‰w½\8 ›£u)(¾öÃAá¥ê£{ô€,/òŸ(. ^É©!ãgYp0ì¼%€oÏ\Út¬à÷€§ÍœÈŽ£ ËQmiMªÔŸ$Ö/Š8vš‰t¬ÇIVbÓ‘®ŒMý× mrùF‰SúœI¸¼Ô¹ÅàÎRIøê‡AÔdALÔ®Æo¶ZEÙ»—Up¡w ­-Ï»@ÐpRú'‚¢¡¬F'?«:,Àx¨v9 2Ñ® Ô#æVoЕëÑQ¾‡ÐQ_»Hê¦!r–ÍKÓ‚Ý ©Î¨ ’1í€ )¯ø1¸øµC<ÔÝAÀCÝWa*Šb›ñÿÃéîJ¸Äp481l÷ÔÒÇî˜L»òvÖºôT¶Ö@y_[—Wú¤§–Þ¤Xz6uhÚœå:/”C(Ël)/dlœ³~I lÄiüÚ ”r.½·^Ô¥'׫Š#+âèaíiî8 Ò© ’¦—šj³‘£P2¸² iäªù´Ý®†IËŽÒ éØÕK‚ìlUÉE÷YÎÊøç0ï|¦åôíC#9H}<—”CìmÀîÅñBv¸:¾Øzo$U½ò0¹t¥7LN]ËQì¯UÕÒ“úi"ûÕƒîVïABØ~fäKÔëõÜÙÔUýß)È0¥¢+5HÎ ¦©ª™q¢N«¢Y͆IÄFKNn†{éV´NI_öv彀ê;­Èh4¿"ŸÊÃùÐ’,sUlÆÏΛLŠ£ˆ­Y«Ï_ßA*ÿæy¨qTGi蘩¦xSìþl®‡wQ-G´½qWk˜¾ùB²\ f~®fÏúëNËj ³cú×Eø&nX¾égÕ1VDŒ»XuHN[ü-"‚yí3 R¼ÀÆ •톺ß3+r™"-‰üò°LÆ|ô©Ÿy¨Ï[æ™2×ß•ØÝpÑCœg¤C…_ ¿½æÆž5\psn4Þ±Þ ]?»ªÓÍï÷Áî3îKç3ðŠ(=ú4÷™_%·; ëö ÜàŠIv¶O©զ‡ê}ñ»¥YWä ºCå[£RmÄr~#1ĉAÞ¨Èd£FpBƶMO}ÈñMÄjpÄITÃ$ûü*ÍÏOÕ›4'‰æ|€‰UåÏâH3C0¡ú‰¡‰Š¨Í·-§`˜(\SØ€¸tQ¨PëÃiH˜VÛ~ê0¸•P  ª¡AbØ”N)‹édžŸ0=LK•Õ«‰12d·òtÑ1¸ÆÅ%ž§°T”¶+‘Û C ¢ ʉ«Zâ88 C®ÒJ*G μBSÃÞD¸¿‰À½Éi¸nŸ‰õŸ¾²4h*Àýp«€íÈ[™ntLR<,Üâ.+,½å`Qø¨þ7ªÿÄŒ†ê?uûal@§n½Ç㈖¼C'†³rV' p^•LF¹#þJ>èòºl$ÑÖfš¯õ6 JhŒÒÖ¢ [Îpq,6g#ÊÁ}œdÜi%€j¤k7m¨yÕȧXÕÈ+ÙN+ß^¶´Cr9LCT…P¤Ë$±–ÀÖÇ’EÖGÉ¢æg(vp.¢rßõ%ÐÓ‰kí‰\ˆˆ(vu«…–ÁÏMÎuÄÉ+I^1Dò lò"Šû‚mŠðX÷_¸Ò˽$Ë?qtß%øÑk‚%Ø!…1™Òá PWÙp\I€gï]t]ïŠ÷7¯C„•cóÞÏ…òYïçBõ»r‘¨*š“g|”‰Z7È=Xfï®+ ¸8±æ…Êg=/Týnpå|†^2 Ü:p@Ûq.ü:ö ùQ“jù±'ÉäAÈô1j 3ë#À\h]ºi¬!ây¬¿ÁÌq Ö,ÙA¬³OA)„ cÀ‹FäÀ ÈGT{A5é-å×f|Ðäû`ý‘Œ“?ìÍ÷ÁN@¬Õ~5 Ö>fÚ#í}æ²1XsPÚìE‘Ø[‚¤ÚÁfi"~üÌ  Ê‘±])¤¢ä[*‹½Úÿ"êØØš§6‘Š¿8 aâ¡r)-1°è·£öÿñß0ó dèXd•dh·Ë¢ºì*Øë¯ØêAÔ%>kj‘Œ½D9¤âADƒЂÊá| Ç·D X`ãXe n`ƒ•<(ìò2çRÏ^·ˆmkÍ`.P£~£äÝ“ýÈ÷É_ÖÀu¸°ü&K+´wú˜ê{rÁººwõÉ‘(=’øû–_·j·ÙàÓö£"h‚ÙîOÇI±4þDÂz/©FPÎ 3\Úª/ž2qE±cû½¨o¨ã9Ó,¾6WÂ@¹nîØ°T©ŸúçÙÍÓëÉvûäYþmÛ(\­¶ hÈQãO_øõÂJ_J[j u{iǾCT4—ú]/<Ìg HX/ LîÿœÍçö%¿i‰®†¦ý¦¦N&"ÒŽ4”úT ưJC$AôF/£ßÿ§ôÃQPn¢SÍœ¨™‘Û#à|ºS½Z§œÄ1x瘼%a+eϽo×"¯;ùŽÁugß}8Ž¢U¾²ª?öö®ä®tžË<´Qºªí0‰QõD;ë‡Êq’éîlK©/BN3´Üšdq’:Ýai.¨4èÏóòÑunW?ßÓ4¨f™W9Óá:Àd|³Y¦s"d Ô\KãEG±4ç,†Ä®"Ô’hDµw©Ü€‰r´ˆeÕÍ´[þ5héBËè£DC*¯µ»@ÑDßÞ"Á9Ò¢Êã™l«øç,­Ö‰Ý*-eYúQ¯Ò[Ã4¨¿ãY–‹ íhÞÌ–@!U¾?Ï @ôTˆ¤¾6b™¼ÈF4æG«OeìÀYI¥æÎM{Œ“ÖµŽuNÖLµuP»Iò}ˆÙGÖ{ý²ÏÇ—'}åA„¥À†æa2« XSñ ‘‚@*×D¹Ÿ°ºMOU§› ‹êZ•¿û²ô>6¥Ð2Η¨þô‡†¯®I›¨óyÓÚµ •­â%q4a,ÁNü,ÍÉAwá¼193²—€7ÆËelX`¤¯{õò+Î2Â5nóPJàlì‘[©M˜ÂUeƒ{½—‚F˜CõÇðqEIy$,r8÷@ê½Ä JfÖ„ÅE’δ§ ´íÓ=(AUŸÓ¸½²OÎÒ/C[C`\®n¨0î@R¿Y£J{ªÕr|Tmº\%ÒØwCØÍÐâ¦õ[XÏþ®gMêQϬ©üyþÝŸ/'½«ÂîXÜÏÁÄŠ€—ˆPg˜ØŸüu÷æºÕoÿ7 ð`Þἃ:’ ÓzÑ@¯»£þX?¢NÚè]4j å›QYÎ(‰€]eÅÆ­HŨ„ñ+âœÖ7'êns¿°¹n'.ž9t.A{µzEŠü¨Üï‡e/o>af«ypN5KsÖrà‘h#õìÈ43k±òÚ¢-c›c½2çô~“îÒ:R^³ÆƒVø?FËû[ÿÝ\Í0ŒÒèOF5wœ^ˆW?bº¥[ÑæÂOô[*ãÝð0%Óö6k¥Õoz°Ö8ÝÈŠN›ZcÈöà•h÷ûõ _Ø RQ@’ªÎ 3òAó°î,¤j7 }èmÝ+a£ôJu_” JÍÕ|ƒ$WF£Á´x1PZu¯¢$fúË]ÀRͷðaºz÷®§ê"Â@ÎÅb_z??ê?3UÝŸJˆ¨ã÷Cí ׺XéhZeü”½tµs¯v>€Ì€ïø—þƒ¾­ÐÚy ³n$³n(3ÌX}C“lˆ!mGgˆv +7@kЕs®Ë]1çJ£.>aE>L÷ðC¹ërÞ’|#~x¤qĵnè­åB–¦$l?»ÎÂOr£ILë)Ý0ñSÍNTÑU¡WqˆJÑ/\^â̾B9c®½g¿.'áÛWéš\H¥îÓ4ÿ’×ÞÔ5€îÀ cºöÒEO6?ª<žêÓJs‡ÓL£O{غÝʪ;˜ü*=H4dăT¼.›ø –mÇ Ø†*Ão_¤Ý *ä²Â›¯¼NBÕ& ?;­¹ÈEE’|ÒCî9!“æÖ×x©)‹:´Tía©Ê·BTí’ª?ñ¹JÅå¥[C(ußÒUOÆÊÏ™”ŒwŽ\¤Á¡ñ•éZB±Ñ½œ„nhi÷Eµ3ÝgŸÃ¸RnäûœdZ×òNÂ"ÿÝP¶«§¦fXmYŠßšÉàÊ‹ !" B2L®mŽ'Ñsy¶Ðþˆó«3ù¸`ªßÔ·²¹vÖW…Zÿö5~¦á -yGðôå{€’ÔÕí|¸Z¹çsöÀALÌœ´=ýy'ݹÖã«“ìYë0°v»29°îú‹Òâ+‹Ü[ô®nDï(m±m «•Í‚!§Xcñ ãg%4 ùªk"ä3§÷RÌ}}úJQ}!úXS¡z¶/â…Ý¿•’+¦9FVQ‡ßâÏ¢T‰ùzá¡$X}:‰Qíq)œ–_¤ŒË0‰†Ruß©qÒðeÕ»š­jÖ5`üj¹aã8ЉRp[~Év®·ê)$»ØyõQ ¼(t6®·êŒzf†®éÜúj²3Ð ËÊ(Ô¡>0³#Â/PÙþøõvâ˜|ý«uf¥_W:ê@F»bÿÿìý¢{X­zî¡™|aZ‘Æ4}>!CƒsDàˆ¼+8ÌFý3Åuðþ%¢ƒì×8^QÝ)0¨àåÃβÕ`a¨1Α³TÖp—’œ‡½¥²|rU«_ê¿«€ bÜÊÓ‘8±mˆ— °ÞÚ¼Ümà‚Ó¦¹zÍ@™Ð»k5pIrfj? öxÃKi"¿Î*ù[èÄ[¢1%Æœ¼´./E#û@–+?bʸm8‰þvœ[ýÙ©sã4Ïtþdêg×éSÿ¾XlW½å±Ë]#9J¦¡Æ;ƒ™Ü1Íú„ÓÞ‘v#•ÝÚ­5-xuR°£1Í)A*¼“8d æÝõŽ>ÌÜQ·ÉøcB£Çà óv±Î›ú Œâ0v ˜”’÷2Ž•ÿј—TÿðË ¯‰ì6Z§?½Íøm¡ÎUp¦û&oÆ2†ÊÝ¿ ŠÁʻɮ8ÄäÄWöËUŠ<8óªÇ“¸|TZÌC+íH*o‡™lð ªä®Oåù‹g9 YŒWPžé>ñø–$Sfx ³™ƒFQ}Õ÷hç×p‘ìt¥êg×ãžú÷ S ]ïõgh£v$ýY´#’[8Mª‹${ ×-˜“ Ã¥ûÄ ·]”‚uÙiÃi YRV.1W…ô†­ˆüpœ±Œ8ÛýYïG»4홳TÆrìÄÅŽ“=áÊSÊ)oÊ»BÜÇEŽ“áHôƒæ8’¢ÃL‘¯©;8R}~D‘;ÆbX)Àj$ ª²­6—©yp U“…d唦¸Ä’¿b9Õb`Y’,ŠNcµŸ£ínÕé€È÷¤oò Å7HW7vYbØfl³M2Ž'eêâàòã =$† .G×±š-K9V]Ó$+§ã?ÍJlFÃט˜É«ÖÐVs6æpÙs ÄRì8…b{~êTch,ŽtK$9€Ï“"F²ÈÖ“¢CTß±‘$²ý,AQìª1NòáHÙpÓŒ½ã@îPeêâ@lLs^tmû@&nLXŠåùÑ?b‹ŸC£ã0‡¦(¡åçP‹lŰqM ; 9\•F–òŒ $‡‹&ÇvÖÛYs‡y'Q‚@5qõ|l·§úæA/é4šá whB8:OÑ!"«WÇ„p$º–9ôïN(rhÀ]zxŽíár"©8µ £g¡Âa)³9³¼î"jÏÏ–áaßY„\JPy¯<Š„½°çH¹fY·®>I5¯¾Iµ:_ zÂ;ç/Á¦Gƒ) Y6kN¶³¼ ¥ÏL¡p³–åÎûg(ݬ²Á¹ÿªdîPta¢èÒD]ŠuËœ³µ 0Ü>Áa†M/|˜§õ 8ú†Ûe0Û´î`°¸IîR ÚÎLžuŸ`ú›P1²qr©61’s©mèʆ1%Xî€2]±e§]º€ƒÈÊéR7…KwŠ®×NÕY«å@E’]>‚’Ó/9¸Éµ»½ l5T@qå¨Ci¾ÜÃÁz¨ É_p¦ÁI­ï>#“ã^í€È:Š*šj8Š °å‹â3 ‚"ÀªCÄ€ “6¸°š£´ SëäpŽÉ†hÂÔØAql)> ’à Wì”lK°B3pF˜Ü‹ †i?-"`d¾ÇÛ T‹oj£"& Q­*ž)Á0$ÇâpJ÷àPÆB4AØH`G ¨ÆÝH0?Â1X+’gêð°f¸zسF\?X–1FãÉv¶\lt;?Ïuzæ?Ç¿7þö÷Ê›úÎj›írí¹Ë %ãˆû“'oòÝ[ãU‚Ðt‚î6¯ZÒ]Py®sSðÕÞÃd^ß…ŽŒ†ÄE€¥"Çãõ‘m—à›²8Zv¯Á[Àñ©[æ©ähZ{ÝûM²ô³ÀÐò¢e¦?n+Q¡¼õ¨‰„‹¬ÚéÑ$)Z•¤_ Z^ûëþÆ'_–"Vˆà@œU:‹Ñ:Ç@ ‘BWÝ_«ÒâÅ8IØâÝÄÉÇ…p%ÜûO²ëƒŸò§É|êO–‹ílñâM{nÑfgÂ¥ùôåyekëýšmmm¿Ïæs[[9¶ZYGb»ÛO)÷ҼߘÆtDÓúVÏëlÔB4‚"êž#(#>­ï*frå¥c² š @í©û ÀûåOÆ‹ídí··sPY/³G+Óéx;öÖk+ÛÙÒÖr±|Zn¶–¦³ÅêÅÖvå­Ÿ-M·Ë—ÅÔÒøeãÙ½Ùò»ÙÆ6©–›‡Ùܳ2]­—Ûåd9·2Þ,¶?Çk;å­÷¼zÏì”_ãÒv|oí—ÍøÑÂòÁŸ/'ßmì–VV[ϦJ;Û`_ì ׋©,Q‹{€ùz¼˜.- öóƒœÏçËŸþÆÏg‹G;d2_z¿¼‰ñÓË£·ßÛûÜ=ÂÌŸAæ0qö·Áâò —o íÀÌÿõÇ·ï@{þÝ?Aòÿo¾Ì7O³‹º¼ôÕ Ç¦Í—–›ß‹‰áýl1^ÿ¶±´®eÒÔ®+_úÓÙÚ›,—vQÚ¾½÷k2·³³kí–þbêÍÇV‘\,ÇÛÙ³gg:Ùn-E–ªµ³-ž¼õlkglÛâ/ýÕxûdcgÛ-HËér1ÿmgùsmeg[D6Þ¿_<9{[”Í“m"mž–ë­?Ÿýð¬*´mtÕPg¹¶¬Ò[ï—UæoåðÉj'M×/vý¹¶ËÒÕr3ûå?Œ§?|Y¶ Ï&½:Ðb¹öäðÊ<Ûäw±-ËR²:ØO9‰†¤Âf5þ¹P­·}"TÈôeõ FÈùË‚XÏdñ¸^Ùš®—o³±´¶›ê¬Ô8ÓÆlêmÇ“'ËÅòçØ¦-m,—6¦ËÞÚª?YÉM­ì¬Í¬ -ß:ÈsúJ,^Suü@¨…͹¡ l½U+Wž·’C‹ˆ—æóå½Mõ+çãÿü¶5]N¬eK9dð¶žµù|9žZ[ŒÖ?lGLÊôi&뙩m•P¶–°šo&OÞÔ¿omjneü0{XÚÚΦ6}ae»Ü>Ù´G•ñÚÛx[¹ð–kë×\[ËoÔÈ`:³Hæç}÷'/kKK«IIi)ßÏÂòÁ¶-:Uʦ³Í÷ÙÒÊØ®˜ý,˜KÛµ§VÌu{!.ÌmÌKÃÍv¼}ÙX*Ï΢mEœbce¾™=.ÆspZÆ·°_,ŸÆ6«>?m‹ÇOëÏ¥å¦ZV¶ˆéÖ[?Û[¿,¶ëñÄ*V ܯñv»®¦Ùž­õÚ[ÍelÍ7³ÿ¨…Œ_öVQ.ý’Ù%W°Óßë}i.λ´"?Šcõi†„y}%Œç‚d·_0<Öß|nK†Ç}„­±a—à¥i}?²)gÌ2‘Û{f,MylíYº9—à…E†°ì³ü¨æC"”~{Ó…yyA˜mö¼."æˆGdß|o»eøF•·4dMv±PZı…zµùÁB±È¾ÙY’ôòê½9ìÚpgair×|iûAÂØ2¦Ê”l3ˆ-@ø ` ‘Í ¶ÖÂvMåÐVîíßÐîU›«mÌ >.mµ·ÌrËŽ¨lThi.*÷â¶Öe+bmÝ4P6¶yLßöÂÖÚ>÷J7µïr ó÷ ¶ÌAµ7k³ðÕºý=Ô÷7úöI¨cFåž¹#áÔtõc‹‚ê«/c¿¹ŒÍ ß#ˆíÎÚ˜¨½2Iß ¶€X€X@b\î5lîi±'„µyÌ‚(x;ì4µ¶Î ïšxfo sÊd¥ø´”8–Ø›Ii)[` ÑýP;¼ì¬•¿SH!¤Bj[&÷+c{Ë̲XÇ ‰W yÄ€‘GLSb5LjvöÙHŠÜzD¥ŒÙ¬:7Ë!G,±±ý¨ þdÜÖô•Èù À˜rËÒdù!'Ö£Ù{ZÇûÕ:÷’×=Ý3[ÛÔ¶7›BÍ%2•ÓM;=ûѲ²´gݺ[õí‘VÏú6J—¿»CÛÝÅv?×IáB–$,Å„X“œì锕Iˆ‰,ù õí˜0*“g!Ç‘o‡Yú̧ð7TƒR$— 9óèºS‡r2¶1:¨Ù•£Ì]—ŽJÌ oýØŸÌ4Nígb\Q–íy‚`8LW×^á8&d›€ÉnÅ©VËš‡NN–pPÄéA‘úk{õ\‘eŒçÂ/dשîzSidX¿îU±_ói¬m—È•½ÕPTN¬öê@¡m§žQÛ5Cei¹zœ©¡¨¥) ªLÐDoÔö+GƒÄ2BÖÃÁ ’£‹÷ XN—åh ˆ¦–嬰_PÉÞ圚@l-…í_MYÚOéÀÉAö„ûAîÛ¯ñV‡!¶ö“’Ê0™ã7F©×¶Ö1ÉâÀvrÀëéŽåh|ú`ykϘ$*oujVƒü$ø° ìšµ]1kÙ`¿WË(Ÿ@LNƒ‚È”)bÂ!\Ð={ëæïå5‹SƒĹ_­WËZöĘ \b Db db~R[¶ar6™‡SçÖ]¸©Ÿ泃€,ó Èj¼¬Æ ØÚº€¬~ Èê·€.R µŒ ‰ dZÀÖ¨KsˆµØBt½c9ÖŠ!¶bœŒ!Òo[p2¶•VW¹š7ë¥beé«Rç6ÖÉZþÝoWŒlº«ÔOŽÞQžñïâ×f Ëïr1\çô ÿ¡Sj×ßà`¹•¬Å¡·ßŸ¨0z#2²’"Áª¥…ƒ4e80©w¡ H|‘JœŠTÚL7á(GG9ãR.dü<8 ð­žÄáT­w 9Li¶ZX7ëyÕ¥æÖû[NÝ@½ÙԛƒGÀÙ³8fï7›`N~g,ÍzŸ–øö‹µ±íZ§47¸â<·ÍCÐ6•<ë¯vVݧœÙB‰uKuΖ[lIj½øÛ]—çŸö‹PEËbVTSûÒ[¤°¡¬€ì*Ìß »¦ïíé eù{ÓÚ›ÚNº”m1V v!üœ•‡Dì·¡ÚoÓ¬J¥EPD”Õ=xÏVƒöyÏvƒÓ³åf3V÷Ì;Ù/Ä.UŒ<,Ø„~V³n á—ÿð«# £]±o·ž5X¨Zx Ò”Äb(9Ãò0JË00ê•ßÙ@‘“Ø>ɇJ6óÀªföBVcé®ù:8À«2Y~ÛS@éí9ªÐeL ³æ³Ú R²£HK”%w8±rŸ(w³Cif„ •pÍøx©¶ŸJ+¨öáâäÊ>e V÷\‹¥9g.™œk£{&vp©—Jrþ $(ÅN91ØËŠ¡_V}©' þ¾Yë{ûjD—Õ~”/sõÏ•ç_ã(®+Ð!7[µ3ÓùÕSTŒƒ!QèZ =•³æt Ê‹ úVÛz‰èb:¯±¯N{pFƒ5éfOœÒ´Im òW¡nqþ}'‘3œ ÒCm(øk•¡@Þ)?ÊgšzX>멈Õï«zóãåºÊw œÚ÷U#÷Ž¡N;PÁ`w?5>Äl‡Á´žðÍÜ‘%QQ}—ª›rœ‚œ4r' ï›`s@CÆÈÈ&ÚÙÊMTÈ”&XÖàü,»g\ ÇØŠªbê瘬‰µ¾ÌÍ\{®È5‹9Pì=Eµ jX}ÑÀÂÍÞh‹,?§Œ`°Ý©&‹ßP$²Ým7J¹îN~(Š+éuC€«^9+Â#‚;-ãÁrj‹.ñ(òjC7|lRp‚†FAïNßD…_nA¾d/8EÂí! p¬e§ìd=-r‚ [*på7Wpq>‘c´7!Ô¹¦ö#O‚<IJšÃ ·A9ˆ'Õ0‰ ,‹$Ý3ºq£ºù ‹}}æ‰\Z½Óüè#:Ý3¾yk4ß¾ õ·žåsMZ=“•ÕbGá=”ehZ]r™è}FhøŒè^W>éyQõë–$Y\ïê»®-w Œ‚,#©®\šÀ0f)Áp,ûD`Ù§_ž3b'ÈtÑo­¸ä^ENãþ¼®ž]çvýû,ÉäÿÔà©¿AìâÜ\Ö@ õ\F`–VKåÖùí^dò¨EË;nc AÕ—ør¬ƒàh'M¡,.¶ji½ V èªx€Ùz…Ô7ìÄÕ²j3§Ì×ð58–ÕcÏxÒ_àë‡×%¾yðð(ß7Ìå‰hî€SáSí%7iX3$',ÚíõÞvº~ðð¼ÕßTyŽ_q¿žç0襺 ëjH¢'Ló"3%à˜i~d¦±L›Yå£ë¬ª~^-WÿèM¼ua.g L³da€Â ÀPDtŸD ‡½“8Ôîd1 ús(eˆäÈdrû`ꯂÂãÇIÎá&¹vÒc€Ô2j9¯‹É‰á¸öó·Òl05A9"E Á_I¿UÌåûÿBþf3TþòØ­/‡{Õ··Þu¨+²ù}Ý,É'=­’úUJ·CUæïš&²ù©;ÕÎ8­·\]E¦|t›ê畬Aù犗^ŽzÓ«ƒë8uuD¢+ª6<jóM³ÒŒ× 9‚ysÉ\ߤ“–üù»÷õˆz®ó¾ö`çPµoÒÁžÁžp¢ßÖ|IBè«"œµ»®êHõ캒Կ¯NìUýè¢=̨òÒí«¶\Ó.ßRˆ”‹]]Õ¸ ËKà$Ň]æKàÚOÅ þ³± œÀX×[RcIe„Wη.Ë`_i?¥ºua/‘Ѧo—ô .´³L±..]X-J–ÿö»u¦QQUVn<ÇóØàDÍÙ‰Ïx¤VyÁ8>p‘sšùP ¸*¼×å1ÿ¼.‹ò7ƒWÓilÍ~û¯ÌMŽoÏëãWq~®ã,Sž:Þ Û2ìÌ>Õz|ì·×;œ;·ÿô»¹®^¡}|ý&§G«ÏIõ7ó'Ú ­+‘p–¾1ÊeÄçz÷ª«Œ&OÞä»7õŸÆ›'편ìvöìm¶ãêÝ4_D¶“¡}Ùo†“@ë¶Ÿ ãæìaù¨§Ü”?OT¾ŽÂ##®wõÕÕ¸‚›Ö *§2zg_F´jÁŽ­Rƒš|ÁÓþV0*ŠŒp ùP—lƶ<"o[•½-Ê¥–FdTË¢òJÍ OQî­µ78Ÿ|X£ 5u]>¹ªê¤èïWÊ'ýö#/©;é¾N¤žˆ‡úvXk`N÷ìßMä.{˜^bU»µ…Qëi^ÿj°d€ö…fc`tÇþ͈Ÿ²Æ³„lî<0Y‘#dÿÒzÿ1@y ^ýH·¨Ü”_Ka£Ã@‹GeøNÕ.ÊÈ Ð)`@¦Ò¾3¡œ.çAš‹®%ËêCBךzÔÓª•?ï¶í¢WŒšCi= kHãݸFÚÉwÜUjT®R£þyÝ‚—5 Ëu€Mù±ŒíH¼œê}ýiÀðÈôWǃÈGÆP1<I ÉBcYß&º£9TëÀÆì ® B½ƒ…ªXŽË2ušã™0L¿Bm€´ ŒüÿøZ"Hô›atLíh B` ‰8û=4r²u“©PćqEJ »Ã4ÐK*ˆ@•¨w"§1¼ z"”'cqaZy¶×Í9ôPuŒa¦ÞÀ¯' ò§qO×ÍIWl4ÞLf³ÛfSïþåÑÂl¹Ïç·í,Bœ=.–ko2Þx·m-Bœ/'ã¹…Ô³…ÉË|;›Ï6jêÐÈWWáPµ%­cG/¤Û^®3Θvñ¥)ÏØ¡w£7h˜ao/+rÞÆÊú½EÓ¨šÛ[SÐÔåd.d^Ø¿xÛ4Ùš7W‹ø¬¤ ái¹Å^÷ ЀÐ\ó)Eǘ.QÐ1²ñן‰×@eAäû"8zYõ'0AÔ¶wH8íe›Ö@±š[äÍí¶ó‡·¾_Ú´þ¿n›˜Wþ/Œ‰écMŸ­rä®_Wí%ÌK±½H" {X‘ªëfŽˆ0È,´Ó–ØSý!›Kën[pÛ`šü`ù~§jhak¸íöÒ´ªzV†©•eé¢I7€¬ö #ëAùG*G«üSXWã.Ï6¼¿7UF­HË„ÆÇA­ÖíÔ¥j8V5"11M;ÜHLá¤RÇøÌR¤àê‹J›1Iù§%³¢MøTÌÃRÁå Ô_ü]ëÓ&@SAxîn”6ÀÕµ?rîïhÁùÒa›[*%Ô]›h^9;ˆƒO ª®¼u,µ8GµÕ<(r†o\„[!i ÄyQçŒ_özDøGÆ^q¢®ÕL”wëªËGÕ— |<Ê™O‘!*ooÈú¢ÝYÛ³PYëNÝÔÏzúÙê÷uÒÕ:~—»äÀæ#à<øÔÞnБrUŒ§ë‰> Þsö7Ië"(…ö€ަÂ!hfšZ߀Y~Ôï$¹I»¤Ø­5x{N75©g†x ûÆMUºšj€öH€o¨îÂVðP7¯ö4õƒõ|ö<ÛúãþYt—îÃ&˵‡W/(n:ÞŽQàÃfö\TŸ½çùròÇnÿýâ½à^Ì&Hpù0›#ÑÕz9A’[\ÂGv½Á…¸Þ®Ö³%U[RQèæ]7³Ç•·˜Î8|;F–ßÍÏñ þµú³ÅÃl1Ûþ¢/›ñ£çß/·O(pò4›O×Þo¼ù Ü>­½ñ†ÞXOÔrj»ºò ¢we†e—“ÖšŒh!‚"Ô ¦@D·<½FåñÙíºß==¿îz;Ï&íßšßúÇ%—r¥+RH”‹4ë?÷Q>¹Žfù«ü¯oÜúÚÏ)ƒ3¦ FÈeÿéŽòÉU̪_Ëÿ?}°‡…AjŽß õ[o©îs– ì†m7÷n0³º#— 9Ñp«Ÿ]g`ýû­ýfg|4nÓS²œø=èoÒÒåæ#kƒ›Aýž.-—³W’ú¦ýN7УvÓù °à±:lÇ$Ì5%@=ê)åÏ«ÙJöÚ/ÚÚ¡;XDÞ2¦ýd† ÎÙ€.ª¦»än2ÕèþC6iå89(?¢Ã)†&ðì$¸Ì$ø¬$ÈŒ¬9Î’}çàÙOP™OÐYO\2Þ4œÕ0¯r°–æ°ÒR1£ÆY# ×kroÜ\rƒ¥q®_š»Á⃥‘á “-0 ÕŽ5ÙR×â.¡âÙÜŠÞ4 ¸ €7‹È6Õd [ ‡ã4Ô°NÆ…ah"ŸjF'êÉ} ȦþWÿõLCß,ã6êó+ù@% 2G•›eÌFÄ¢ØÈtÆŸx«ò¨š’}PÄ9º¤L«ÑÓPüí&J£ã9ÅÂ$ßËÆ‰s‹•KBT #ÎøwòéÂZŒv,DÊp–ÙGî2+ÙîONnwJC*Iûµ4q$Í•WÝJùèºO©~¾Ñt·‘ß÷ƬÃv é®,ÆAB $ÊÞÔW™0í…õªñ—ßד_1ùÐ$·|Ò“Úê׿Éð"Uw¢à‚§êØ?ñë3=@8 ^Ióö@’A‰fB~‘ÚH‘³$j$ðÒU1£àÑHøÍEØ2Íe$ d¯VuT²ŸÖ5œ’±#ã²£ÑnºBd9 4 ~ùèºÁ¯~žl×sÿ~í¿ûÞo±íÙaÓ¸$'Pj¦v„­Õ ˜`HÆr†~ÌÖÛ—Ó„psgÖO.6³Gûp¤ñø~½…óõ3(sF¼l@ö“§ù@í— X"=¬<ýÓË d?›ÏaöÀø‡ v€€÷øl=`¹{Ù¬ÿ€ß@ÀÏÙbò"ü{ÍÎd2}€e…?{\À€·}o€ÑzYß%ˆ­« RºÎPM!;uFöXÚ›ªtö‘/ÔñVTˆù±œì¾ÒIÊ&x…Á< ‚ "¬Îa½Ëe‘ùûŒbòRþQÞÁ‹,“ð÷£uVYïëMÏ©w‹¯|  ÑúÚM˜sL²”™ë#¬Ñ\³à.ô åÞb|?÷ü—3mfÛþ%'çaŒVkïaöËÛØY—â÷ýž…tæöq ¢HýQ})¿bÊÖ*'7îÌìÕ¥@»ÀÐjé \ˆ?ØÖq½ÝÓâÂ…Òv¤ÍÞîà|CÙµ'…ºY¥ÒFøæÐÑ^H•<Å2UTcÓáÔªrì· ÃÈ ¿Û­µ­`³Õk¸(ÖJ~éצ=-ê^Ë_Ô!>òF†È›ê?Á[“‡¬xµæ¹4PíÖ"GCR¦a½Ôæªx{P`-Õ.y åïþíq‡­`§»‹U»\«°Ú]uàA2Șãq5}¦³ÔMb;Y9uåµÌËÔMfSzL$m\ßh[ž|rLÝVd°Ø¸¦°3ŸÒ¦ ; UÙ —á9Ä)¿ÈÞ5'8äƒëÙúQ-GeúûDOà9‘‰ñWLsòþHUÏ®ãUÿ>9û,|•b]ºí‚ðU7ê·À Ýš Í’D·›Ø¯>n‡'íxÂ^(dq4‰é"Ôæ9Z§àB7¶ÀIªDü˜‘ÚUNRáòAÂÂ!uk> ÒOW ršá Mýœ©ÚÜé X)u·ââ"XUØ|ãmrVR2.Q‘àkñ@…Ëú£Úw97›1±éQß®yd\΄𵨺D’Ê%ƒãiü“eOŽÜÃÀ1•ÔݯC$SÎò VþÝÒƒáð—V¨m¢ì»•G'©70NMžõ—˜°£º rÀµ§g,¢-=ãQíh¥°'¹,2ºÏ60:ò%ÍR\ÊÉBšËö…FØl“pÈ ƒ»|¯FÈêÀ´ùŠŽÆQ3Ù?8Í?q¸ýáÂ2#¼ìÞ‚'°¯7ž?Yκ}çfrêMæÛß+ ªšû@JÓ.Öëêêë&QÚ^ɧ€éŸOëoV Ø5„UGdÃz…vÇ«¤M×Wõ„»ÆËDéä¨, 2ýÕ×·yù&r"‰P¨þôÕmpu'`[ºÎI¿Ùéh‹#B%4ÎÔD'5ùÛxî­·²ªm&ëÙj;[.ü§ñbºy÷ü‡ñlþÒ{ók«¦—™-¶Þz1žûÞz½\[iÈÑY>=ﯪá%4Qá.– «X–ÆË2~ýG{zµ÷ï—ÙÚ›Z2õÞÜ¿Ÿ•÷xúÚöë ”ïN÷ê¸è^æœzk?”°Ÿ3å=—×UˆKöi¼ñÇóÕÂ&‚ÊÖ›LŸlm޳ɓ§ÎZ,ŸŸe‘Pý€5n«Íbfmº™¿}ƒÿÃÖx;ß¼ý2öæß`æV1&‰œ‚ÜW·äÞ¬k­µÑÓ¸žê8I’jµ´¿ƒÕ3ïœê†è7 ¿~½Ûàrå-d1ñeQßÈFÅ&É/uîÃ-^žï½µékŽGõXNf«'å¼È[ÿ(½]zÞÚ[LA°º)µÅÖrø­vCضÒÞx}l/A°2AŠˆ!RÕ‘…Y„¨óV¾Slšïýaí¬ÞjrK¬ã ÇZ¥jõת :™Ê¦HäÊ£»JPa7<é ‰œµwÏÁc\î ƒ²!„_Â4;Öâ€Ø&Ò~ùÂWßåŒû¯ä3f¿¹l #Q~m)³$<:L·øúH2A+‰£Ÿ_Õ&qíé1£„:]Û, @ÐÎ2(³_=1Õu©$:ïäÑ*©“H¹‹39W4ÂÑ:À<'«BF@ö‹À£¤š.RÕ'A©fº+×—þù@¡…©Û€x} 5ê÷‹?ƒ4_˪ª(‚ÉÿÎÖ$/8pmb;ßü8%åÍfùd>zÿš=¿<û›—Õj¹ÞVß"­JaWd¶piW¡`»¬‡}ôµÓÞzöðÛŸ¨«ÅªožOã™Õ÷„+rîàÔ{¿Ì·â׿þû• ·ÙLm×/õ]æa¶ÞØÁe;ôÐLnúÊþ¹öß4¯–èÕ,gr&‡‘õZc½Õ»]‡9 Elh¢–ÂÓW{yl  ³d[¾9ÃvН-yxôo9й¤.¦Q7‘ú2Ðëm+òÁõ¾õãÃlîùã­,Å÷/[ù·õäiö£÷3P+¡c›ï†ý[8~ÖÁq‡ˆ£âÝ¿“*”¼sÃQd4âÚÉFOsÒ ²gqAHšë¶üô K{’6{î­H¼SݵÃýÈG¤QìÚkÝCö›«f>~¢í¶û ö2[{Äi‘‰ìÀR ""RÙ+Âz 9ˆ ‘ºcwOA˜ ÙÄ ™ÄDö &ã45ø5×P" B‘ÓF‘e ÷ÿ“é9ôšÇ’Ðìˆå(¤R©;J·a& ¸LXí¶§^†Ë©ãÉ8ÙÓ0&Š=ËbXYáÀ&C[#ÌyŽJe‘Å v‚CË 4€Ò>¦)°òRrhG~“÷ SƒmNÊŠk7ö2Ðèï=}I³»öziE=êYV)~(ûë\³Ý½ƒö1õ»"U{Dý€tEá–LåÔÆ—}švwCÂ8P±b]BW»ñ· .—í‰@¢oðtÛ’$kJ¾ei‘öÄÅNußZ_r·4Üð¼ýþu^¾ ú1Q©&zWUM˜êë› –M ”S¨wÆõû©r x¯#ù€",Ì¡ÈÙ`ÒQ¯\´îpí ÷#ÍI;µbäx'34·ê±¦É-)—®¥o±àcFtt;Wðäÿ¿9«8+|ûÃ]Aþß=Î ÿpø§«À¿\î\þ?Wÿqø_GȵMgn`•j9xÍ´^´f¸™ÏȽIô[V ¯¿±Ÿƒ8lbÛ_tú(ómÏýÌE&Ú†#Ú¬³Ç0‘»Hv°ØÕ74õ×¾öñu <=ß/4›ÔýÕz¶,÷»OæãM¯ó¤ Í ±{o¾ü9”Ødí·ž/ÿø>þ9þí?¬—Ïþÿ-ïÑRõ¢ÊU§vª•ÔÂû©¶æo–s7Õz9ñ6ÿq½|Yá•–þÏÙbºü‰Pâ˜D«ê_æo²P¡Q˜è‘‚ÅX‘g†£á`=^žl4úIkªïlœªÇðï\ûPn${{Z˜Ä¨Yð :õJÒy6\w6@Q÷\½TtËÓ5|ŽN½íxòäM›V^Û§ÞÅK¿“L3ø4{|rnÑgÓ¹ç,2Pﲚ­-÷Še$ET¤’s©=•€r V¤í¹Fhm©D^µkÌ6tF#§WȘKèÎÕ»’Q79û‚ÒÀ!.N C+ASW|{RIÈÑtBS§"õè¾#™i9z™«ƒ?εy³¯·ÊAêæiù;ê¨l§Ê?üÜÃÆåeÕ8<¶z½?ýJÙ+7ùÉsÄZ³?»ÔZº ìºbq6næõ†aGÅ÷Í‘½ÿ¤iTíUC©M—/[L!šÖÓ”ªâf‹ÕËÖIAFÞIâ§ÚVÛ¿ºÌI¶•?)ï#£¼Úïè,â0©¹ršÐ\h9õE×Zl¨xÝrèe wYÞ Ë¹…+Ê!¸ÂäŽxåQØE„)L‡;Š4(4ËNòIÏŠ“úuü2-Ë£øÊ©Ã²¼:düÿÓönKŽãHÚà}>…Öþ±µn›VTwVu÷ÌìÚü¦™šRH*I‘‘Õ74Š„$VP$‹‡ˆP]íCìî“,'’AÑÆEU†H|@Àá>Y/ÿüÜèØº$ëÈò¹–›}ºðüÝŠg>zvþÆÎ>š+J]æËæÀ] ÀqÄhíüí=|þ©’?÷@bÕ*O¦ û8ú2wÇ9àM¯- aŒÊ py(ýáeTt4xŸÒlSýª¤}rÓc ÖyÝ l$|-¢Ù›aÛ¼c߀ ¥·À×Y絡ᦅNÉ›ÖF³ —Ñ òˉvÛ¡żúŒŽË {¿B›u7ëŠ%Ü YØ 3*¬YoäpÃ&fÿ7þÞ :uߺÜXÕ4 äÎc£6w‘>Ñ lRåΧ]¬‰¦Ç^]+sü1ýGE'¸œŽ*@(¯4äÂ^6åÃ_Œ¥{î«Í”ôÃì,y‹hZWOðP‰ŽÈW¸…hJˆqÆŒáÆ;7´ã€È–QõÀÂDɵ¬žf£:)¢)8ˆ—_«Ät†·ÜXÁq~ü]9T¨ÇÕ· È`ãÛ†Á'´ ÀÓ/ï›æD0:ÌѶ¹'6Øœs¸m§ 1,ÍÔ4§HÉž¤$òL«r+gôÐfHáæ<ý”D%`\½Ü‚QaJÅã>îZ¦RøvG º$/´wº®SwïàGð>ŒÝ\ÕJ·Ô)IR*ÕÏÝŠ Ú›#ï@"*³³´dÚkœÒɃj{NL»Ü¡ýö…v\*ƒ“üˆ bÒˆ;ú/ª´_¦qàSÁ’W"Âi?VÀ2„]-ÕŒQ໎þ™“÷¹ÂîXàÊœ¤1àˆ”ö6„TYÌQÀ½òBÓ70xT÷®€· ÷ŽLŸzu1­]S B¨LŠ]€Tã?v¸GòŽ˜s0Í¥= ×^½BDÝ…«ÑΟ ›!An‘®–s&)ˆŒ¡x«P!a«;ê·RŸÜwyû§CR0bí8ŸÑE‘ËtJÌ4ŠNsBWJHWJôN©ÅÎRZªé7a¡›Ã½¶®iéK?è¤uŸ§“ìoÝ’}î”ìÌ>¡'dÆShÖßšMJzZÈL§…ÌTdgH‘]š”Ýl8iÅÜ!¡0»•2?©mga«„ ªÊ[ˆú¼k f‘´ó'¼¹i„X¿ÒÙôµÓ:È‹£}pÐíüð·Mû?â ×NáOçX‹%Þ\]U>-Ñ«›Ú3d¦à$ >ÄúkäbŠ-×½¦ æàÊtc„?ÓcäÜÔåÚY2:?œˆy5Àé/l(ø&ÌŽêà(†0ÖŽ*úªiHÁcfP" ÍY)pD>ýçäf/Hœú¶º®Ü(:7V…|yUêÅþ¿p:Kˆ:C ÊLt5¥lÉQïÐy÷Ü ?[ ÂbÖÉãeø¬épÙÅŽ}š@©T'ª•½k¨Uþ|\Æ)n53©ñT ä=é¸j·m,¯)-Q˜w˜¾s³¢~Y<ó+U.Hj–ãjôÝ Ç›¡[µÈ UÝ“vë¦ÆÀ‡ ùPö¶Ë³ºUŸGƒõ–z7¡„w@+°«±=ëŠ7ÿp0Z%2z½<3ÆGZÛ¹.húHêÈx|d†í‰¨x¤4ÄÃ#÷Ý92Ñ£½Óׯ1Õ„‘€a¡+vÅ]h®ÎFh‚ƒþÆðml[ õ›è Û…/f…¨rššB…³u#h`œë>0E kÚºAFÆuœ’ƒ)4;ŸÌ a½Xõª¶H'·Áp#ÎmUî¤O«;ª›à<6BrÏÚ(ßÂBFUþ—ˆ ´Dº¢­ˆÚÆÕ…Ùb~!aD` ¹yu!ß^¯/Ô›-û«q.ª£›`mªZ4yOˆNYëgë¿ØÎö-T¼o# i»dLpÊæØÜ±Î_¯u³}]­¶Ü•€¸ÂÛ•"tÿ8Û1d;‡ l;’øDì ˆ cGñJÒsuÊx¬*Žr˜Ý™2B0¦á»éNDq°3^v!|§óŠØ…—™ãtGŸý&ŽxÙ eÅ‹y|pbà¡eR¨QÕ86I‡Ö, > R*{ãôlÁaVX(Ò¿…zlŠÝƒËcL ¸Aö§þ6f¦@3\¥y.ÕPz âL30Ø»†qÁŸçžŸºVÙ©¢ë°½>âX+ªÈŽxTåyŠ‚k*fUiEæ™åšÈò†ê‡@„E– f¨»ÑüyôëÆ™þÒØG²¼^4»w³ÀÛÒ'ë"Šš£VtGKŸ ò[K1‰ÍNòË™Sy™-£Í9[‰³Bv½iÒ77ýR¸©oÏ#öó›hŠÈ€èaã,–‹Ñf<›ázÀƒûB jðëèÛÔ™,Ç›íz¶ø²Áå9[l§ëÅt뀲fN-èùhýeºÁ‚–‹/†Ù-—«ûÑøg3ôã軳:;,î‰m6àÑbl\ÑnîÑÃZ îNðoK$•®º l=|1ý6]£…ÙêË ˜­ÀëÇwg3û×]“,.RLHè½_µl蚌Ÿ'¸l7_—kÃa³yÍçèq!á «hã¾’ ó™!;à¦HØ!ë8u³ãšL[ú¡ \y9Æi;f½ 6“Áü´˜LiÞš¸ç]ð¬ìøÙ¸Ùo÷ ¬3mGÎd¶6€~]>NM¡ÛíÊyZÏ  ›§Õ F>cúãÁ¥ ·É˜ßB˜³€ÎõRz {õ³›FAtÈÖÄSWups뉛gO?¡HõkE=GzȘ}¾ÕE‡)Øâ¶t¶í‚ƒëû)»§-5f4Éœ ±ââs$¡ %‡W¼/XîîÅoè(cj ÑF·èî(IóYt_¹¶„™Z;f°ˆ?2Øéõ!$lFN»ð츙S ¹‡È cÄ»ßZbcÜ¿Z #¸º G^fà÷Öe 4É ðQ›´¬õ;áã"7!½’›!ƒy)E ©Jƒc+®£ˆã½ù&Xði {ïü¾± ñ˜Reç(wßƂò$žâ[o€µ…-­´‹D¢é@¡s6ŸgNÛ¦ž‚vâåÜœ>[•ˆ1Æn$ò»¶©9ËÁÃc÷¾Óvi¯ D¾YÕíãô@LrÌœ s Ú$U•2B?ð¨€ç9xô›ÃPœË"±píG®Áù74–öV¢ˆßöјÅ•vcc8¸†b÷wqKŠû {4LÉ]îìÁ`>‚hëb†ÅƒÃØõ˜åÒéÞˆK¸ âì(ÏÞ7sNröL˜†a´,8ÑY†®)Šfcò\e Í€oJ*hR§~7Y~×’¹%‰ŠÄœ #¹ œNþíîZ°`Âài˜V¹X†<89½.5³)…Ì5W:Ä´éÍGBqè˜öJ NjnÐy'BŽd&hا°ŸBä]}Ã’ß‹ %™9Ò™M§SçŸÿÉ‚b÷Çg ´~‚R3ÕU‘À c—ù7î–ua:ü$pºh.Þ{(FøÇɵ€Ÿ\¯‡B˜Ë9Eñ‡0DÂOm&-°\ø†D⊺¡á,àº.«çÂÜŒ¡ˆ‚Ü<ÿ· ?r¿’Ä‚ ÿμ4Hr»Æ‡Ø¥“w4·sÛHã[¾ê¼­ú:)¼mù!Úš(­-S9“—C/<üQ/TTÎöV,àê§h0D/a’´Q}[Î,qß"óÖd·Ï¥ÖŸS›¿ˆvt'Ïm/´yŠ(„[°ÆûÊUÃýenm)«ªw³Õ·8ÓœK"»ëGð-Éš@¢Ý½MÍ8¦sƒ.¾S7äë± #|%”Qœû³=ƒþNm7–”På9³ú³þPÇ;û8ÅsL_…ÌCµ#Cݱ¨ †YÂA¸Ñâh ¨Y]Ïc~÷UM2ïé ¾È5ARnƒ{æÚès×vß»¶+³¹XTHó²—Æå×>à:FÓ"³ªLAPßÍaw¾KN±ÙÄ,$_èB%uÁ­šn‚l¢>¬„—˜äƒ[=¥tƒñ™Ó⬥‰özg,Ç– Yv!¶õh€N1C•·G 4|©ÝÔ± /cµ€µ1¨(Cä¢Á·¢ž´¢Uœ7Sp­¯c TÄ?TsŸÜ›ævmð›.Îo¡Ûœ·csl«[.@4 …—­ë%&}q½º„‡ã9\#¼_.·0‡5M^ zù:ûòu=Ý` ËÅr»\4†r¿ rÖ£g pµ^ާ›3^=Á·9³ ý€I¿žŽæØ*ÜŽf¨ä´¾GÃïyZaKÇÝkÝ ó?âˆtLœy²·6õík€Ú´ÃÂÃd(ÃÌà—¡3ÌÌ2ÌL2Äeä»çPê«!5s>ÏŠÖ[« w•ŠÉväô‚LGqGgA5HBÒ=Wôw0ÚQ¸ì¤{nTmTQ¸ìDŒ Ú3¼¤`}C?_ó‘]ßZ’ÔI Þ-»éRø7( ø]e`ëÚ¨“ôPTµòo¸GîÆÂ¢ê÷Ùq$-ñDY/Lv,m77³®Ÿ’Ƥ†â(oÕ!^»€—÷Ëù¤eÍS\!b©K7(Ün»¾y‹Â;è Wº”AIÍ)’³Á‰¶‘KŽ< ¼Ì”ƒ.}çÍG@·± .27î—£…tïž‚0Ð<Üfh$áy,G šƒæ¹²‹ß[p™L;Œ+IùŸm£ò’PÃbò¥Ãа;ÝïÉn®çºÓ¥´ÇŸ{-à™dºx,f\ý•v”C°>Èôîð\‡Ft™—‚Ë&?—ðtc¡šP;j‰6âÇVPëÅ5s'Ê»}ÚfjdIþºsSKnp'e±ýPÅì5Àïv±F)¶$EžÇ‘FLtŒîÃX»±Þ•ž´[ú]YJwž’Œ§¿àÊJ¼^/×ÛåÏÓÎ=ûËzJ‡ó™U¨ÙÓ]g›)÷úÑdaÙ X,´L³/Sw  j~¿§]¿f>}Øn¾Î¶hªŠé¸Ø`ÒâÈWÝé|óË}×´´êQå éŸ:åbôع‘Óç9-KçäK¼Xâšq±u–›içÞ²xz¼ï>x ëp¹êš’*&cÄÉQu³šwo|H‹"_¨à|îœ%Ö³/_q2 Dà>1N׈qº™>Î:§Åèx­£/ 5…Ív˜÷·³ù¤sØþºš:H-af_Ëuçl¾Ýw¯H‹ªúGçz¤!½ðšÖ¼¢/›WDðb ´»W®qÔÀ"–3‰¼Øo‰J©'8ˆùösØ“ O'zgæzTµÎpÈ"Âc¥G¼ëÖ7×MÞŽãWZ3²&Yæw(+p-î®H|íÒº þ- hó¤e)ºÑlåGw*4K}g–‰Þh+ÄËß PÐàa;×{Ñ·;¼mn{ö†Y–nŠÓÉÕØ§Ö9êà øRì|GÞáE®ÿæN,û8=¹Ö$7F”8ž­ükªä¶V®)îÇs‹Œ8Žö ž0Žà²IŸ”]ŒCú禓…“ŸÒ_õšn/|†½NKå¨éщ…Õ¹=3ôjRí–Ö”v†ßµë£OÙ¡/ªx¿}°1‡±}‘Éëqh.WÀaWÕ´êK^XG})A¾3A—Û]v_[5´ ‰ä a7n7k†šŸ=c°y#p :ææhãšãp³Š{sÃóœq ®Y³ãï›u;ñnƒŸîå}¦Q©ò´ÜùìG«øêÌD^Xd"º€ÅW‰2ЉjQÛš,R1qÊBRk¾¾ê¸ËLßÊ¢½½Ö ÙMa»Mcù›ÈM²cœ}ˆƒ»A°áqòX¯ƒu"ò‹SbI!Ü‹±w™%— jA‡ótRÕz@éL¤ª£b[[µø]YCf<òÃ̺ŽDß©èv¥¸k~ئ¶ù`Ç5 ö{»Ê†¾*¨är|Q°û©uEÕgÑì[²}î&Òvå$V5Ì)zª É`V=ßL–,yœ»¡µ»8¹EÇמ¥Ôé°m`ï~ƒmüZ›r5Èx+*ß9‘“Þ×^w"þÛ’-ÈYËYÇ-vÛÕIˆk\Ë­ÞroƒãÄ›»/ÄÉ*ÚVg’üܼZÊÏ׫$úŒÖÇÂ`ë2‘¸ uß:¥.’ækbYîÃ^fVMšæ¡æà†½º.;¼vßVÍ.3«¸:`«2ëˆÙx)Ae"½ÝèÕÍ0À£›lz¸ *uiÍâ›ÑèŠàtu|#Þç "=ýžLVDS'kFµIS=âÍM}$Š‚Èi %݆KbýŽ›whõ/¯%úh4¶öÎÈò‚Ô ±J ÉTÅs÷”˜â2,PGA@ð]A¨äDæä“­Â ]d÷ö© î‘(tÍùúyTxCv ùrPx©@Þƒ<޼0À ½=RÜÁô:€µ¨nPœâå1høúcŽÛa’1‚zjbGÁ¬H¢I0ø6| KE ‹ó‡¨\kE€Ÿ˜ïŸ°¤¤2¼¬²× vØ ÉY88£ÃöŸ™ì[„qŒœ7ñsRTœðC‡C‰É8òS÷€Å¼³„ÙŒà*Á`0HCDFUÙ-¬” g´hMÀ’=­Q~¬SP[¬]-¨@¨$ÎЀ í[ƒ*péS*ìÝY4¸ÆŸÁÉŒÁJíû@L¦Z ¤M‹e© ”Š€ ÓóÏÁ÷Ë1Ý–¹~ éZãâ+¤ Ã~Wì÷X1Ð y‹ÓÐ÷â8¥Uêæ_CïhrÞ2•\#Å÷F€å) {áõƒ¥+ó½ d°ÀøÍD×ÌBW†Õø 0¸3Л`´àã+ÐǰPD ¶aŽì üŸÌ„îë eð.—H”§¶ XÙTÞpèŽy |ì|òÆœ;G‚Ÿ$Ô$S¸}aqüØã~ïýÀC–öÝÃJ¦3áSåu°rn>VOmÎb‹áš»<Þ¹ ÎîFÙ9ò¾ðËHqºÙ]^¼º8b?ï *_‚èA”ÄúÈNF0À1 CTz¨6žÍ„P ,H9¦ªäVÓ­°ÊëOW'@ÍÈ4.h­Lù&çÈ=ûΑ:I×ôÈ&fˆ†ÉѤ½úÞ( 4‡vÍ |Cr³¶ž»§ïbn’PI³Jã÷3ª—\[¢}u‚k½vBƒ/²ÌÿBÎ6ðW7,†€œv$5kcY€WñœÒ/&¸¬˜˜Æu)¹s`l¹ít¦“t±oÁÀŒ†-ð‰ë½¸+ ªýc+aÃè,Àþ:ÑY5á”uªÅD¿0댞œ-0Â>"o/”Й ìƒÑÀ”dqøJœ›‘î@é`³A‰¡¯š´x<Úeì2ÐF㬮¢¢(ÿ[~s­7CΨěº‘{ÐÜ&hA«© œå· ‰™ß›äȼ¾-1sN6*VGÐØ CY´n6>ºT•åÞ™»fɾ¹ˆž1 &O{WŠrZ6T'2î}ãª@êŒ)¢•Ë„ìÝ"Ì'—£P¿˜r!éhß »·å?W_“=&4þƒD8ñf" „Ö@|u³#r0£†ñ ´Óo:ÝZ V˜ȱŸ©Þ‹,˜6’.9” Ñ·„rÈB ßñèæÜÕn×ôøÅãÀ ŒàÈ#&HL…ƒîçou¦²:y“ª[³ŠÓŠ×`@uo[€ Ó–)Uã‰g«ò®_WDç±§‰Ø YsàÆ¨A/À5ÿ&øƒø˜ôE’Äižv™ Ü8†eÊ»òAÆ&EâfÒm:g’Ûšª˜Vàn¯¾NÇ?kki`ºè½ú䨉K‰‘ŽÅѯuÉ¿¹)•O‘P9»}Ã7¶•ƒœK¼–Ë÷͈½T¸ºCÀÂÐM§Á!ˆð8XÚ:Ç Ê‘yF1‡zÎÖêøÄ‹•JÓÜ`É»³ÝQiÁìŠxÖn‹%]3¼Rì6/à" ¼Ø'¬o6íTÞ_mTßí?HùòJÛ¯®¸.I<7'ý «Ûøø´ "½ÕÆMÚÞÁɼüÐ]N7Œ9n“б’›‚ Ž›nÔzbx“'Èœî*†r67!)#6™ O84Ï]:0ÂÊo7&(Nr h/<ßùÑùìüµaÞ¸ Žø×aÚaãÔ££ J«ðÖ ØË&À_¨C-úc,¬1/g¯:K >Ëâ¶Ù†X÷˰øÆ`HÜHDÌ„~Sõø©_Æ-qÓ‰0ÊìƒTçä°…jó$[Ñšüz¶@ ›®ÚVlsϰ­ê<Ö ñM/¨0ÈÏ:ޏ2y4 Oq–3BK&¶ñר³}ðôÁñà†š(tÝ9¾°}i?,}|Ô,²%Ȭ fQy)ÍŠh!î©Y’ä}pôP–¹¸¨`IÑG7}Í^xâƒí'=ãˆôQÚPýI=JÖõ¨޾ÆåZ“ƒ&¬^wšµd$ë…¤—âôÀ!÷+ûhuª©õA³M ÛöfûZ}”åÙM£¬»¶b~•ä/óòødW,Ðì`~säæLqUͬx,)önZ‹”ÔW7Yòtá |ãb„qtx¤³¤{ 6%8¹ï“÷X](â"·LRØô3+ŠÂ|êÉL›uôX!™QãT‡êœNw"ª¬0ÍŠ>7\e_WèœÙ¬“9-»±âX›){Š&N,áÖÂ)ì¾#ß9a칡e7ß™(‰9Kq)l{ï›› ¦}a´XÛâ¦&r>b¸;ÇG~OÃ(gvÎaØMj™9ƒýç1ÞBàp£µÙ{n¡U¼K1,ªà;çä¾Ó“A-ÐÀõõÊ™[óÉ·Ž¡²}S.Œ®®µð¸–†/¹VÈp,˜}~u#?Ô^ËoÁKoÙHT¬‰WK¡?¸goG‹_Ûª»dh€ÂiócÜìÇ 6$7:;.Üpiï…8Nà#~ÿŒN|sÿߘÖy ¸ OÏÜ=ÓÝŒSg=’Fq¿TÊ~±u²Çª°Q½±¶Æ<@2r§áJJUãdú0zšoMEÄÃl¾®ÉlmÊðè;!c †‹€Õ_ˆÅPùÁMí6 ØÈzÇ ô-›÷RöRM=ì‡ ˜lÆï5—¥¸ÕZJÄÖþAºiÖÈÕ~š%Ï]ïØG×ƒâØ‹æ:•½P.ùìűâê°9q›'ŽöÁª¨}Ô=‡–Ì®hð—C×Ìu€mÉ€«§rõ1 "¸qæ0‡öÅÊŸ8d¿'ž]÷ZÄ‘¼um?SVÉlxViœPs¶"‘SQÛšèžbmôçn<ÌÐq‹<–]Û´H¬_·ÄžïD’ÈÛ£Vw-¾,'°KBbÏÄ£ ÙóÀ¶¥eÏɈk‰à.h òJ_±åfnK %§ø•ïCp¸iæ™8E£f{3ÜSêýM7`Ó¾lÞ2a¯®÷Jøc¢ý48– ÍCDù6Ž7`I¡Îì¯X¯è¾n·«Þ8î<áõ·qÂó\Òr܅ᢂ7k1]ºMõ´žÛV‘¤°)Lâ¦ië=,®÷ð—²OÝCËNóS+…öötžüߪ$›‚l’0È­ Ra°)û¿ó»VugÍ)~/b­÷®pgŸÆ'gwÖ;jîÌ”„…GY~Ž è§NÛVJ½¥nbOCŸ_+ à+ŠßbýQE'‚ÆÑ¦dô]³–Þ‰V Yã‚eP+†"²/E—#‹yÝ5ÎZÝ\#_Kp÷nx£"?V4J|¬1#() O6qÂëèP€nƒ —Ó$8Пý–þгÿâÓ "ö®°À ­^5! ½0Ö™-âÉÄñ¯Z÷ÁYiAßsY‘-z †°ˆ^¢ø-²þü±ëÉÃveßw.˜ÀxüÑ}§ëÝ…cÚmp"qaÕ6ºÀ¶ÿä Ë»BoÛ½4D¥²ö´?[—ɼ3]Ð]¹jDw U“Ü)2’R9“eoVòï!{àG¬+–¥=N‡MtU©õÓ_ÿf[Úq¿d•Æ`ŸÛö‚íÎc¿sSKQÜÂ1%[h÷Sµ}Îý|=·ûô¾šªNÆKš’,‰#»I[ÃõFÞO[ÕZ¨a¿™§þãÁ¶h&¡•ñß=–ü{ùYÜ/ûsÅh]7<õWÀ¼Jƒ8…AöA´UçõL>¼ʬ‚Œ-:à¼Ássòqñh9ýf¶&ÜqX?£þ‚­*Ÿ´—Ï­ìŸ?”ýÇeÿgßì©øíTw#,ø7ýtMõë3ëiaÉ4ß ûR«ùºNÄÔ±üà~ŠW9¾ê‡Ï¶öXø’•éF¾º†öOëòö©R6ö]bûr®Ë1lÇÀ;6‘Æý¦ŸUe+")jHŸÔҦŒFRí‹0tÄ®vt`óY¥´ýRàë¯Þ€MpôÀ–ý•39úPMX¾8Ë{jÔ²Êz ãÞvaæuz,"7 é±92ªi³‡ò}_ò®²É˜=”«ˆ^IìéÐׂ²M»r¿Îvú®39b»Æ”@ìÏWÒ[ŪMíó´ŸNëD½íüï ¸Pvý¹á-&*Äa$·Nºoñˆûp½”)qó#xôý,¦=s&úó³d³fòÚo;væi3íLR5&D•í;ÓƒcNšYícÑVèqrÅÒÅ2 CG{8íšya¨4ëc×lÝÌç0Œðo_¥+k®§ÂY(Çñ.ΙD«]f%™¶ëV’¬áo8:Z)f]¾$îÆx繑³'‚[Û&¦ä©û:> ÝóGÐÓº£êÌ?Sn€ðÄ¥ñeÏÄ)qýáe=ÞIExò¾ùA]¾%±L©!†øÉM2lUœK˜JÿLÿçÀ:§Åà»F爋é<ðvËy4xŸÒlµ«¨[è“›¾ÅyG7ŠHhˆf_l†¥ 2÷dÍÜS¢BÎáÐð?ÓB§ä-ˆ|<ŽÊ:ýàq9ѸÆÑ¡ÞRæÞ=r8.3ìý mÖýܬ+–pƒfU`ƒÎ¨°f½‘à ›˜ýßø{+èÔ}ëJÐrlp‘š¸/)Ù7ÏüÝõd!žKg ÌšD†Ø½XQ×8ª`;P†A­Éž¤+›Ý3ý÷gr†@h¾”ǽR”:£ï^È™¾Ðô‚6šGe€Ê] »à[|ñþŽ9ÄÁ5 C,âlvÎ_‚À#¬@³<ïèÿ_µ‹û𜼹9Þ'à?˰ì !/8(£ÅŸÊU“ظ ϰPe– iÕ¹SÀ¼?ì\ïE勞`·Kã7ÝRùºA@ªWí:õÅ–®æó4Ã6› …‘·žhœÜÝ™Pˆ¾‡µÛ¦´ÛHùåæhùÁx鵃"ŠjîwìÕuŸãÇ OÒYG—W\EÅT—ó .-hг] |ž6}Ç'$$ù)˜Y~ߤc70È@=¢êGÈ £Ë<¬ Š“Èàs§ï‰ùÓè5HãèD¢|C…lËM3ËCXdGt‘¿þ<ýÕÏG›Ít㬗˦ãVèÓz=]lñrñ0ûb~ÚL×Hèä×…3mGHØ|9ÍÇÑøël1EbWÓõÃrý8ZÀa#>køÈMw @Fó¹3§$n¼žŽ¶Sg>[ülÜ<Ý;ô';]<=N×8²ÐÓïÓñÓvŠ-–ÛÙ² ¿5"˜~_gó/ìá‰Îëéfù´†)jº¯g«írcÁÍ€x|šogèÒ.–˜¿àòÛ¦PÕ9Ÿm¶†Ðõô—§ÙzúHU¦b7î+^ÁßÜ` KfgqùºÅ{Ù´<ã/î Iô9UÀ5Ôã½3£ºéh³®gMǾž~§ òãh;[.Œð_é`6RMec”ëû¡<–°Y¯B÷¼‘ ‹ƒn¨”Íg£ ®¸ ¶ùu1ÆÃfó)˜æá‘óår…G=N—º « ·Xê#„Ü„n¶&E],ŸG3ƒüVOë/ë3;Ú3þîzüËçürOffÂÆ_f-WŽjTZ޾îœ=,Û›U>;ïêî{‡À‘ö^–tüÚõ.öÏÚýc¾÷9L(ËHæ½|qû#Üμ#9õѾŒ,§µ—öGD=p±[ú7ì/qŒa|pÊãûŠ{ÀI_õÑk‘”]1²¿~øtq,‰|ðîÖ T–“Å{0=#ý|%·5¬Tœe!Á)a§\apj9D‘ÂK‡ùÈÅI_=†ÑòøÜ]Xß´ùQ^Á鉕öIcÊŒÒvÊžÍ6¶fÀhEÕZí´Mº²–¤œððÚÇÞ}-9º¾Ž½åo¤3Lº˜hZnDZ‘¿èª¨1Ü=o¾Ì„W“†½EÆ>ÒHHub6™ÄoóÎjKºQ-dQ™œ„÷”$é§Hì–ž%›ON±äÀ á: „®ôd Q‘¡Qï óàú\NHˆ),/u´¤N‘&%¿;Ðþ–UôY4A9Ç8qvgøÇˆAÞ5ý®@œ :HOØ™Õ1Øç¸Opä•r Ç«¾4FÅö –Ļ⻟ê"þðWWyŠÇã8*~«O•¤‚6Á¬¨Z×ÜÕ[LîìŠý^3ÓµƒÐ%Ý4Õ\ïVWMÀ~\ì4R¼zoUð}»¹18NÜß ó’gÌr® h×kWpãr³;=ÜS”`„„ÜùqDLò2K5xgv‹À¸–¸,›¬‹ÈL\ åÁ%^&\2ì­?-®ðÃìŠ?Ö.)°râoÿ˜o85+‹ôùõ$MŸùñI›ž¾ÓaîFteÆž.ĵ´¦µ~å #ªžïfØÖгZè8>­^«cK-x²|œV7&õ™ð –=SÅÅý×Iì']4c¶­î¦‚ñèf”³H±L¢ ¢H#Uްp‡!Æ<¢XqLy-õÁaù5"ö•*³ˆJ—ÂÓÏx·ä=_Ï$¾ø£RE¸!&‰¨ö 8²ûóÖ=,t·fͨLëÆÕ8}Ͻon,ØœEn¸)vBÏ1ç2Áu†˜zËJ¨ºx3ߎ%;g99±œø$» þ Ó4EKééãjû«£Ü5롼Aw3yM ØŽÚÈÏ:‹ÒXŽæ6&ÓRÑ Î²¥ª ¦¥à…- rAÒSYÌ;Nf=²AÖË ÈzyÙïQBík@hïx»þ&rmùäÝT(΢"+;…Û¬y ­XŒ.ž$©Ç#sÜÈ·Ã-h6¹kVÐ|èGnr^Øq½©Ità—ûQ= 82º$5+ ñGa¿ߌ ÚVD>à ÑŽ„>²"ZV^ïaxò…¿Lñaˆ&†Ýi–«Çç]¼2ƒü)~\û|$>ˆ2’æ÷d§&Ÿd˜ûÍê.t­ªÎ|Ç„Á#9þžÖ3CºLÛT׿ûI0‘™ýß¶%8Àmô7£íOOÊ[²ÝyÀÚE‹íx³+‰} â"³j7®¡™Š»”$!ív†ðyÞìñ3–„šÎVqþ&ÉfSD¾)’$Ns³)¦qƒÅl÷°™*wÓƒÁêsŽr÷Ýä‹`ƒÇìžÓ8:ÈuºIÖß¿nçf‹ëïóÅÆj¤írµ)ª9j×rœ‚(¸µ7/Òh÷èå{6‚󘊑ô!5±>ŠUg‚mML§Þ¼æùR¾yð¼Ú°ˆ¶´éǰ~L7æé /äüõ †Ù䯱¼19_s÷Ï›}ÄÀÈÝÇHßÜ Â!ݬob©:ô9m²¿ÁWÇý·ûûCƳbþˆ©C‘ˆÀ`>²Æ?D6+ækO}0/kjýµt#jK]èe@–”­Am¹«VÄýñ묶úZ4ü"wö{©êM±«¬Bú*#ü¯%rŒ-g‹«y{ê6„Värkö˜c/o3 µ"ïu uAìDÙÇp'ÁÇðf¹›æHÝk…|œ÷9®)³Ö#¡>©cßB¢$Þâ÷Ë[„áTƒbýˆª(É?°:Ä}Ø#îqPxnG§Ž™ûêÌ~qJúäÛ§ÒâõcX奙¾˜Ö/cFúWN@q¿µ©Ž&íPn·;Êž¤Oö<î¿cIξ»ÕÕÓYä……OÔ!KKïžeÀÿ5Ï‹‡Îع\Þxø‘œÙ»ÆãŽšß½n=Ô©qiHàÿ­·¸Q$­ 6SD$ŠûáŠ÷û–{¸ø|4n‹jØEéšð=(ˆeS1|fÙó8 ³¾˜®×˵3º_®·Ó‰Å'ÕØÀ“¤3]lgÛ_û¢Ün׳û§íÔ™~ßN׋Ñ\ð;ëéCOyÜ&ÎøëhÝ'%ó®ÜQÇ#ˆðu´ø2u¦#ˆmí,Áþj´ÞÌ_zÊfò´šÏÆà^ÕOÌ¢F&Óñ|´žNœÙÂYõÆ}ÑCÀ[켿J‘õ-œox5Ùö5xf‹Ùækocq¶/Wó)mÃÞ*8×ëéxKkx¼œôWµ³Å·]¡:ÛåÏÓEOœÿó´øÙ=Ð.áL–T*Í™ÛèžÈg›Õ|4¦ž­f=Ñ.–[g³¥Ýv4oöémLú´YM“Þz×b)+tÓ£Öï ˆ£Çþ0¥ÝΨˆù¢/ʧ{*lg}5 ŸOt.ø6íÿãûîE‚¯?Eõíè{OdÛÑç£íøk_”tŠbs_O|O‹ûåT mãÙ÷ÞHÇó冊¶1Äæq6TÞ7{N·"ïSÔÓ*`úú®Š e[ÐâöªÔ>-¦ßW´Z)/•ö½éVtÂ[,Ÿ}OÎLÍ±í³ž¼dÌpâžõ I貈„–«'ú„?g'°[2!^XqwyµËÙ¡\%§ºF 7ùúcåÇbýñ)\Ö¹?ç„]_µXš_‘Žã°8E‹â´Ó{ø5áé‘u·¯z«Ò:agÏ*6Àzí¢ÓÈÃÐÛðHG}òNø9hßŵÐ'¥º§ÛsYó ?÷K r³ßÊ(Çv;…Wl=zÆÚóŸ¾s·0¼•.÷-›©Æ½&ûÞ:À’ƒñ^ˆfQRPiÍÉP„p0wÁò-ŽHoß»îrzE+­AžæAGÕd©ÔÛ÷núê4”ˆ~´{*ÇŒÎÏŽl->dbÌ11â¾g"Fú1s¸H¤ø0'=ÑA§$8DbãÔŽîû)ìµxܳª#¯~YÏ‚¯ÍšÚ„¯Èˆß _œú$%¾sÛãŠ6KˆìsâÌ}×^0£ï×jð|3úÞɤâÐÙEÉÖx7iDD84 ÍÖÄ‹팾ÕWÕîÛÛq\c†ce˜j[V…0jnaùž©"Q[°‰FÆÛTwž\‡gíM†¤%lÓîUÔ÷–ëK;ÚÏZ†Ä+æ¯ãÑM­ç]Cr:¯Ä)Ä«>yi}Ó‚ríi’CFrÙMæ±' ôGÿ$‰œÙûeÚSÿ=<«¨OFÜs/gÔ=ösª-õ!êJå[ô§¾ÊÆ|j×5G;j¹&ÎâðÕòÓëTà³þèc ° ‡>Z§JTÚ õS°»=]1…ÓžIßÜ4²îÛn:{îÓ:Ó8\èÌCtBR騔I”Æ!bkÆ9ôÌ—ôçLLî«gÖ^ظm©Ã+‹¾bË)‚숹הMô•³ãS9Eu>Š©¢£ÚóÆ''›¥Öd!yÓ÷^ H_Tâ`éXÜ­D]ÐØÕ6®nY]ëA7}¡4Bé"*k]z°Ú…‡¤€ƒÑ‡ ¤½Yn“éä}…OGô…D$•Jž)É<7¹U›·H¨7|tœ&Eîdq‘z¶”¿qN`ÉoÉSD6_HÿMË(‹º¶çI´¯HîJ眰¶Ÿ+çyÚé¯ÊÜ…’méõÊØv„P¹‰ì…œµu ×b#«ðþüK«?s3æ_8õG1g=“²†ê¿&ì[ly)wDuãþœ!Ý‹s¦¬­7æLIÛ½§ue¥R{£„¶MM*"è@pz\ú¶ë§€À«l]>‚|y±kU‚f]U‚hôǺ©Õè‰5û fË>²Ù²i¶ìCš-ë­Ù*;|æCV°auaKa_4¦äÔl)úáì©Y*Œ=5 UÊ×J]4oEÛåò¬¢2W¸µmÁ¾X¯wÝzc¾Ø*ë‹÷VH4Ê•X$÷ÆÙîË–}X·Ê>¤[eÖ­²êVYÿÝŠR‚Ä {e4í¨iâQ59‡* +ã2EÓ¸òö>ˆ(D#1/Ytð[þÏ»ó¯ÅmrgÙÑL p_ uùÔÀúƒ‘í'=€²ñ÷0ô³u·{Cq•;‚Æl”& 7|FßFa{qØæO É'@žm=]1ž²C„G&V²‹4´bÛ”N.”óÝ\U8DÔÃ;¸íñÈÆLf>|x9ÑW&@» Qëv›\ãdú×ÛàãÃŒ cŸÕ67ñº¹I¼™Át¹‹@míµ—´ùÄ1‰“ò§m5nƯüʨŠü¸,‚(ËÝÈ#šEžÆ`'ÈNÝä7e˜ã „¼Ç›ís›Ä^ßKO ZžÃS92–¯k׺eµì÷•]„v™ôÝ œo£ÄO<Ó„º¬ÛMGlÙX›PôÚ^zÊ;šÊIÜüxK=éžeŸ¸¦êSª·±Û ôvöžey[f–bü@çêOÑÕ»IÒ¨‚ðWWº‡xÌö; 6xÕ\W)*ØnÌZbJiM+À{y»¨¡¬ð®©°ìù½ëÿ+Häå¤&“îÃ5toC˜Ó|W.?v¿‡­€;òNûPswi™ã©p¯»ôuIÛÞ,϶¸óíÈ8!‘A†ÌÙçî¬ XÚ¬½U¨Çž+]§{/(îL=9ã2ý×låÜÓÿ}n0—jM¦óQ³ŸµVÜü_#,f³]®‘9Ô¤¬GýAûmhé±ÕU%Þ'»â`Œ¦=Î2ÍŠ.ÀºÀ 7ñðÃh˜J:IÑ>6ËÒÙ' å6GãEŒD&)ÑQ¢A̘!©ú›ÐAñ§†T.æBíÀƒõAºA³_a3ѳ0Â0wãõؤG3¬…4xª0eYëåÍî,yK åÛ,\ýã›q¶,T}ÍZ‚]ܤñ$N柣ÌÖ¥1§)KêÚ¡½Üº6à‡]±‘Ýœ tÎ.È3s†4>è•Îwívߺ7Y¸E¿m¯0Ѭ%,çèêÎ7Îüìeð IË\Yn5/ήtI§¹n}Æß6­ÐÄ(2û«ÕåóSBýÕ¼…Ñ{WYÕjª­arDehÚ¿¬˜µ›(mœKUBØ1•vøæ<´·&®÷¢»‚Þ™Nrzi.~W Ó}B¼ôzàÐ?®Ç <‹y\MèÍEVø& nuØÚ‡Ev슚Ï$³ Ì'ØÏ«€I¼×¶A+Ðô#©œŒ£Œ \ºÞo‰[x‹œ_8m¶" ÿšÏîõÓb;{œ:ߦëM³CK…paóùÇϺ©áPmC"Þý†¥¦Tõ¾…Å JÖêÿ"}µð½âåµH/f»:¸ýl==——W3®±Õh(~´mò Û‚ùýC»°º ã–ÏõŽñÛã†ÞØá…œµÃ®<Ší¾`çqùíJžÇ}¥‚üC°<Öön= »°áä$bºúÿd¹ÿ_‰¿ƒu.8x¬xÀñE/ß²^;Òšò^†G7;w.{ÃäìeŒÈ;ù±üîüQü@Ÿ@à Τ^k(€üF'(.†¨\„¡ÐD þ7 ˆû.ˆÀÿ¤âÊE3ëÆÿÒþŽÿ7À,q˜˜a° †Zã@)`6ݾþGHû Ùê€yÆaÞó½[™þiw(~6¶<<ÄÇCŽxH€‡œðßñ )ð×nÍþ¤}GÓßÝÝ1 ]†œÿ aœe`ìË’ÂÓ!ˆÏ?Òÿ^:[’¾Ý<‹ÈÛŸï~äÉYš‘÷Åo!ñìV_F±?Æù‘®´oÔ/ÙÿÇG70M<€W‡OŸj-ÐO­ú;Û©qi>tÑ®£ø»¨ÙJÒÙåßâ@Zs+»E*“-ÈÛ_3ª ƯÄÿ û¼5‹âîy’OŸÿÑú¡ÿhýÐ<þñVëB'€tCð–‘^d$'dH 0eÊöÓ,I ØStÀ—‰Y‡ƒQ‘Ç'7§_½:S(|äñàÇÛÂÈS7ÊBfÄób]ºK><áû?¼ùôã?‡ eÚÇô»3îÿ†Ö·êjøÇ» UD \‰7áRŽ7!}óé? wA>t=p‘5LƒÃ1×Tð[¥äÀsº†pžÁ†;ô>ý÷ÿ÷­fý+mÖûéÃr=1¨žgT?Pœ°j-óöaàÁß°!¢5&¿íúijÚe¾£*ói6Ÿ8ãåb³u~žBÇYaÁóÙf‹Åd³™¢sÙÌgã)´…À"XÔöi5Gd5ÍçÎÃÓ‚ÇZ1ƒ9Óï¦ÈŸŸ‘ÈÇéöë!ú Ù‚Õ­0˜Åv4[lP É”Å<ƒ¸uhÐd ±’°¨‡¦» Зùò~4GãÇ)„•U“ÙxKxýeŠÄ<­&ͦ;èiålQËÎö1A„)®<`!D„XWÎhü4 :Õ:ßFó§) å̶˜ÙëËtëŒ úYHÈ3Ígtf×í×Ù”Ê͇õò þ:ú6…Vzbþ:Ãf«åzË2DƒpãP€6Ûâ«f a§•*ÐÂd¦—J4V1•8cÍT US…3ÎqiÐŒHíTÂÖ†µŠW4%ÒHÓ”`”ª9ÃÍìÿóô¸rF÷›åü 3É0°Ï£õ‰š=ÐÉ}¾§í·Â£!ôæôûØá1ÑpÖؼAûvF+¬ˆñ Ú.±ªî|9‚ y3]s¥‚ÌaÑ(íŽAĺfN3F"© àró´ÆÖ [z!1&¥Ã©­ ‚UZ»R` Üüú8úyj°x¢kNÜìºÀŒC:hûùrü3BÅÅtµÅajÂÊ ¢‡D)î+º„³B ÛÕ¯´ã,˜æ>[N¦÷O\ 'Ñë«›6oöówôýz:úyµœ ½…6Óåϸåt=žÒÁOÊS<ÜðK'ÓoT2É®²Ÿ×Tã¾ÿu;›QÐNDМ~ŸŽŸÊÕ û0¢ ‹ñ.+úëhóu3N ËGƒÒÎùj\ªx®hì|úe4þõyFùyó°é‰h³Ì–xŽÇÑœŽ SÊ5è`‹åÓ¬·¶M¶œOV£õƤw-WÛÙãì_™2Ë"ÚÎg÷“™AYWëåÃl>å‹T°3 øu<ŠØËh8,Œ©‰n¿Rù>1”˜°>ššvJaVÃ5[ÿ\AŸ÷OÓµ‰ìÎ|?Ú4ÑÓöá?ð¨o4»¥IvtµEEÞÔˆ]ft­õm´­¿ ”ôõ”1€íÓzÝ£[ÓµÜÃòiC@Ef‚ÚÜÜÐo¡Z,•sT>Ríwƒ†œ—räÃlAϯX:+œŽì>4»2‹\Tr ráÅA¸•Ç`—^…[Fq ö´à‰1Î@Tl±¨U+¶³oS4n‰Îjµ¤J2«Õhü3êPM@6Ó_ž¨®…È …Xú±mbÄç•ÛæX R:ξ`áWœ[æ<ƒdaœg·,¸yO¸ÑT¿’+šà„_SN:©{:ÑÙƒ¥ºC¦,»¸È‰{@Á0È`ÄÞåG’‘ôÄ“QDƯƒ×ìU¼¡›?ÈwÒ˜w$Ó.w¿{îžIZR€í€›xßøj a¦¹C~ª> hŠü8”Q_ÍiŠ4#yáz처÷À2¢$ÒÕŽ(v™(Î:£ £iÍI´W3»{M9øÂŸFE”køcŸÿ©5+ûg‰º°)sýWð›ã™³Ã•)ï!A”EˆÁ„!h-C©On¸Þ œÂQ}DHÝÓ480÷Ø4Å0=µ©w‹Tq¤¾@áT#1ƒ¯ÄM­¦ Ø+IÃbÛÞ`™@ˆ`ã.ºàÑ' ­Ã˜Þw·KÉ«†0=0·ÉÂìÒEzú}‘_GµŠÜÇqHÜhóâÐ7@`%nhI“,·`bp`Ѝ-Þðióädù)Wß6ŠX4?Úé8–]¤Ïà‰èÅò½S¾g ºò^grY`A8, ‡Œp(3“÷ncÒ.xkl婺G1Q)ï‹ ô3'§ñý.ð©JÉ-/9\^!ÉnãUR† "/,|r7ã à–ABéë8úÃçQF¬e×€bÜþe±2ai+ÍPÇqÁ:å£-îÁ/ŸÀ¼Û¼$´=®Æ…fQð&›Zªˆä,²Ó4M£ºüjVò0‚œ}ê­¼Y…@zwT¯±\JÅj‚jžP•£ûÙàEû%KÂ3#³[f.x€äÀp§¹ y.o¨A¾G^tŠzÀP݊Ͱ\n…Ë—=(Ir‚Å<’‚a$A³ét(œ2¡¿ç /ˆ]ãŠ97O€®L‰<¡ë!Ï‘‡‘ã8éœÁLÆÐ>Ùch Å4P—’écXž2 ’‘ïãO .„KŠRÃ3!㑼 U_Mƃ87ï´v݈ŽùT;ÿÀ]|èÅ¥îðcGq‘ Æœeð(X9¸Ù„R†¬3 tT×(4 : ª¨Õh„¢>Ø0Àæ<­áV)ÛT£—rV´[)f1í²{Ùð I ×K¨Vâ£ ó “ŠN¶óT²båoºZc(A#Lt¦èL7wè*ØËލJ(¨*˜/†´Diéd5ãU]ü2ö|'ªµ+­5‘a˨)Y¥ì¥çî;=£æZTTº¼IƒœÊÏŒ<à ºonCíe-]™¦ËÝìEå¡0ŠÆ“RžÎ³T‹òŽ.Ïúíœ>y-wQr:¡ë[^& ö.&!Ù‡R™èF >Y)¤ÂºgâÁg÷力ò0Ž•_ë ÿ6Xê šÐì`?·’Á+¢|¯$Œ dsHò©V‚!YÒ)<ÌøxÑê%gfN 1w‰ŠP!×ì^]q«tM›Y"?·¹ÁÄI–‡¢2mÑ·üü`¸ cïE¿ùpÝ0ë"bÎxî%p\íC°ÿAÒÎds¾]¢àÌg|~°˜2Q•Á+Rýg¶íðX£QìàvøBÎà!ÛÂÃ’åâÆu;‘L­ZóòZvɇÜjT–ê¬È¦$1šnˆTŠFü.y~/Hq«(,¤ø…>cqgoðDJ„pHIQìh9ÙáP;‹J§˜ÔÒD§>?ÃÕRIÛPazÞñ,JÍúð–³4f® ï˜ÀVQ”\-‡®ÊLÿQ\bB þà'«48à¢$̽dH¼c<äq£LúÄv¼Å@Ä?”>ê=EeÄcHXe$‚Yi2’µ†«÷†Ê.›Ð´7–¤¬»\÷ȯW¿™hxš¬S¨˜1c¹funÉ΃‡(ö77§ EŠ“…¢k? lID~ü–u(W"»2n¤/ ÚãŸ9­ÌÆk‡…<¡·¦Á‹)¦œÿ Ó†œfd´Lgv²Ëç¹|΢¹fTæ÷§?_†»¦¦ ¢ˆû¯Á´ÏU‘Ù°B6Ò±2…ìð˜ê$Ïn?NoHQ®Eš?H¦ŸÍJþ[@f#Ì%`ã@¿,sÙsèâá$»¦ÐyÎ8‡W™ ãœÎ:ÞeFÊ¸ç’øà^;<Ò¯l.iúš6ƒ ªµ;GçÿqúV#@ò +|_áÏÁ3û»ìýYG Ÿ)(Ž/Tº(2—e`¯†¾ àt3Ø-‡? »³³ êO ÷D²?sºmІ®¹€0Ô1¤ÿ'ô ¥g£9Áœø?•Þ–»Ø|ÈÄ«^çs­q‘Ѳ0s•#'©°*\-H¾^ršÙî¨I ù ÕouêpòeÍw•“w™ûÎbK•1&á4S}o¶Øpß™{ÌÔJnkâ*m1„”íœY¹…j'‡‰Ee ] Y´(MUrø (^I¤Ý@‚\?ªönxªÝ–k©JÒƒqlq€}s½q¬|ß›q¬$l²u)âhÁ€XT—#v$9UâyÚzW†S'ºÂ-«2%ì“ð¥Piznæ¨^.bè´`WXÁ}b§OAÂÒ—/8•7Ó¤·›o`ÜSüå Æ™2KìèÐ~­CY— ´J» ‚žÑr¡Œ6xÛùû°S½µ"Lû9À¥âèx"9Õ`*¶¦‚i†72çI‡,©,ÆMA A†¹vQÕœ‡mͲý¿f*¸få]~ÒVMF~×ÈÉÜgÐè(`TÍ Áÿ¿ÿçÿ°@­aÿ¸iêžÿ28‘Sœž_ò¦rá74š³âi.2bæÃêfÇB;Á¼Ü¢$¯€ªè €reeGuñ~À0ÆàhÅ^H•N‚‘ÑÅÔ9 ´¢olj3~{£e²Ê_˜/ìÊg2[”Mùj‚rÉ;SèôUESÔD  €YŸØ| xo×Íyšr …¸sløµÇÑ×])£,ò"5S1>ßÀ êw" zÐJ`uĆnô2„âÚÞÓ\C” ¥4Tn wüÚÏ[Šwü`qUè·.çDìd»ztA'Ø¥`$„Jï„–Wuã½o*€‚OÒÝ8ü¿>ô‡k3`.Z=ýç\´ÒÆ€øèÒ¾=+áõbFEâ )¨NÃ,JQ-}ó¢n‰h»¬+ÑÅE¯@u¡Ê˜ÙK…Ç_qú—­mI˜Ù]b––kAðúªP²F’xøã?þúÊ»Z·ðÿQ‘ tåð‚5Þ— iÙY’ .?0˜•rΤ6¾Kã7:×1þ4CíÑàÙ‰´ª.ùOfVÊ¡eµfþ_/i<•Aþ5]/‡ãùèi3Üo&pJ½ ƒ{Zæ€i¶l¿NÜ“ÆàÇ»ÿ¼ûû`²3ÿ¦ÌËç]±ß‹ ¥‚1ØP¨ú+S<]9Xf5ÈùpàTÝ ^˵Åkéêhª¥@ !(¨ØªlË*ÚØñ /u2I°º‰2.ò¤ÈÙ•ªì'0 õ™9µ†g‘qÛøk*¸:±ØâÆ‚¸§¿ù5õ qCe¥vOb—ž€óV¸ .¹|Vú1»´&#v¨{SšÅŠ|_ãaÆXœìßÿÎ4qÆ%x;„=üÔZG,^wâ­‚«,v_r‚ ôz6Ü© <¿â×< Óº/Ó$ÅHݲ“ê›®ÿÊ›Š,üTšœÍÊ[«9¼ó]U0Í€Êríꀾs+û&jrË7%Xºjx”ìσ2e©•EÛ°i }@ëš>)å(}äIãÓ[kF‘VóÙ~©"Š˜+÷’|q1Â?ÖF`4ró–=©‹ÉžE¦ßSv¦Z8gƒE!8Ãà… *:PÛ2T¤Ò4$­WÝ®TV_÷²²+êg$™çRˆXTÚ,E€Mì«÷Âu£ï\|eµËd"¾¬m)þø<,`ë+ÝïÏ¥E­HHW­ ú‰˜ÝÎzo¾™ì—«CÞ1ׯ6Ã}• ?Õ]‘TçŒ'%:%—hêÞ nù‚h¸,ÝÀyu—Zw“Z]ÿm w‚;Þ.•ßk*¥_)ÄÕ)»WNåWù…Tk×^“¸«tîfxVB³ ˜«\ƒà)ÇŒáýEaéÈÏ ±mpc/$’ýP‘ÆŒˆÊˆ¨U›‚H^‡È ¤¾L._zͯytTƒ9VÊ­³¥ÝtyÏC¢`P¾7ѱ’§Z§]E——)#bŸ5qð7’D¤kvâöЫ›f<ò¥¢b÷”¾¹iÀoŒ\I;àÊwœkÃ÷k+¨¯r–S”âü‚LìáW.Ö‹6ƒNõ+ß•–þÚBº xy\M ÞI­X¥½ š„"<À€õ‰ê¾,Or±…Rƒ_lŸ”{&¶^ÖœÚ\®Áá)‚ß‹|÷aì6”˜= ø“)±1U/.áòzç5ƒx#Hdº:üàUoÔðê•è;üSÖÏ]Ⱦ¸é‚ÉaÕË]“$i(}ȉ”eÄEQx°÷k`%<\~eq+ógTM«&U¸ÛDÈÜáú,]q“ô¿ÐÖŒ*¿ªFõ%ìQ÷Á¡™V¼¬–ð"þ4EÁ•µO?&MŒò”­î/F¼Í›¦²@îl« ¬—³Cí>ßÖU#Ráë­ªNÔ ¡\ æðþG õOÕDZ ç:êä&IÐ/8öQ¤ºøHªñeG7l³Jn¹ñ„­ÉÅ‘$ìô¤ƒ=ùó4üî1Û«¦“ÞU9¾AÚ¸^Ç^ãØsŽóðEƒÑ×igêÇ/C_£¤Ua—ò¤DnR]#aw± /jØú…=u-‹¤¯¤Æž[yÉ/ü%•óMÍ!íà‘ËnÈýïOÞþg+*ÏÝ5§:e—ÈMËÑ}Yx×;’}žØ©Œãa»º4TQk׋͵zeØÚúU"Ì,üØ(©&éÚ(Ö™»]Þ¥¤“ -8t˜!»BZ%£ùÓtšÒbn9=!—’ œÖÅ÷.Ÿ×IøþxçÝí±Ðd„ò©ö~û4> ÆŸîê·žK/w6t³!“b°ŒGèL?$Õ¼ %…$Á°Kï"\~4o4¾­Ñ -÷?X~r„¨cìf©tØÚ>È¡Ñá£ÚÛ?•z i3â©Öª®’|ì²…½pw,PŸt@1¢£ØƒÒ¥G¿’Óµ-[Å€ã'u+¢š:¹¡Å¸Ûë¾V¾ Øt„pÑ` G†LEàýšÿ„j§¶Inªm]õ¹·6vi¢6A\9œ„#©×ѱ§ö´²&çìúS°;wWùõ¸<‘¹hI6V Ü€Ö<ó!,äÆÇøÍfýÆÅ‚H€›—DTˆ8òž^+øßcLÁÞ†(Ø+žœX‰á7¹²ûDÅÁ9éÔ”»éü· ÷›ö[¦»‰ŸÞKU,©Ì™} à*d(ͯDq†üÇÏŽ0 Ñ%žÜ ¼“i¥ÛcáNñâé€'–iù¿ÿE—WPÂ7P܈'“v;âò=›P×ù˜çφé¹MQ®```΃è…ìr/¢ d‡°0£ÂóeèI‹ïÏ æÂwdùæ’kXÏ)ˆ^Ý0ðYyÚ½|vÊìš®žßÎŽ~wAçÛÑùt–ù±{;ºý]`Ù4t¿ÙÑývAÚÑ…t±]|A—ØÑ%t¿ÛÑý~A—ÚÑ¥t–ãRF¼Ûѽ×éü ¥S½<ß0feJ¹¢ªå ÎN­ÈÅþ´ÅÂQÅŠ¨ x©µ‚x‡¿ézˆÎüOpWŸnel—Ïp!Éom€¥¡JX͇=(×*ü‰Þz¿¾P‰?Iƒ†Ê1JÛ2˜§ŠÔC oÕŸKÕ÷µi„X8b}+”ºYKi¾N•)¤u·ü]­Í?U_óz-óÂ1cHÉ‘¦ZêiŠ£] M|ONO³¿ 2"vÇ}iÓÀvº«&*WíY1R~ ›ÌTÄã!U™Žšú‚WÕ=bÉÄ ŒA:LÔ™±ÊWNÁe€¸öIY›,Œ´}ˆ*7Ž•rˆ,Ë®,½í½êWÈênõ¹- ‘ÞZw—)+¥¦ÏVìYµàY’Û«øJœ‹Óà•íV¸FÆì‹»DÝ*‘ÙI”w;0÷ÝEâ p\ðÇõs ñ¬fS1áݸú.“(ü0Þ‹­Î¡ÎVé*Ck$ÝýH_»Ž–·3CuCS<‚X³˜#IÀ 7XƒA=åñ੺ Á/@|ºüD~"\Í•ïm¶a@Ø íxýÉØÝû3,e7rZ¹vø.ˆiÛžbÿö%Š-[?JÈ€÷”OC½Ö´nÎ';s³Aߥ“Äìò)œ(9|»¾S.×Là ÓP0ñŽ ðZÝiS ÖÙÁÞùªà䵯V¬3¤Õå/IRj‘¸ˆA{m›NÑÔ•ÒNÞ pSî3»Äør†í×ûOFšÖè%ÊíJy#¾B ÈØG«è>5kG¡cÅû/eP"ICk‚}°ó©Ê…žJÖÚ».W3œÌh³­Œ.b¸‡ƒ8eׯ„’ `'¡E—‡DL*ñ$Ј¢¸”Š_Ò~¸qÌóäŽ'Ì.îHüoÂAÓ–•þÇåÅóÒòIµŠÒ™=«s_Òp§¨æee.¥+Æ·qrfÁ<듸x( pÄÏO`ƒÜzò—~F¬”±^ÒjYê蛢ò*þÊÍi]úòWˆ MóG·'6|=7£ Æº»´6»ŽÏǺ{ü×yçTš®T.öÁ±ÿwÊÅy‡l€6Y™¢ôGžÖ¹¤pEèþHyKñ}«Ä©ë0M.ýqt¹Æ·^=Ò÷Âí)®®M²TÅ™äxç&7 …€å†žì&3%á¼›o”4ßÐle.Ñ—B<=':GŸü]I¿èt–é¤ÜƒxÙë°¦Å_Ód¯ZÍ›‚Û¯dUÀòJCíO9„Ôú®à&*3´ò2Ü>¢sDΪ—Ùû/kÐvê|rV4Ã0v}¬záÕ®ë$OyÎÉ­q8ÏÀg6—yòëN°¢ŒA#á9ã³Þ1$ ϸ–#\UêFÊRÖqR E°Š—0ɶ òá> ¡ŸÁ5×ò|.k·Ñ¼Kg&Nâ¨b ùq™›4ÃÒ¡iÎ`,·*ÇÕ%_­Ÿt¥«u -›Òn}#Þ¿(}Ý×gÁNã·HXÑ aþis©q#O~úÈV›”Th]Ü6w2 ÂÿÑ„ˆmÎŒÿ*çÊ ®æ0Ÿ­T"™p?¹úª=w)4ÌŽ.s]À`A7¶á‰c «¸ã”‡××8躯)cIæ/·ó'«ËG%¬Âè»lo&DÖãC‰lè)ͼ:¨f¸Ï·ð»—u¦0‡Œà‘-ïŸéŠ#ð†ìÀÕþsÎ0 àòèåºÈ|Lz˜ÌA×à ê óÌ€í+ŽQr}ð§8ý¯A"Ÿª¹u°;—÷Ï*GLN3GJ¨”º·Üš¥¯÷ð|ìÏLm¤ËܪT­Ÿ;3o ³PLåš3ýi=xTM¨iËGe²ã7ôp£ùtÓ6ƒ*Föxè†Ò&\gÆ©¯óHXÏc¨øŠ4Iƒ¬ã·ÊÄ-"’j6RšIØu†ÚÞ çâ7Î8ùÊï%œ¯å«ÜÓfÁè6ýV×Ú¶¡²›ed©.e¶Bëi5ܘý}¶y¥\×,‚,q#Þ8—à´,e)7èr±Ä¹`§3¹åõ¶^È-…ìâ÷ÒО3ñ¥†ˆ¯„.JÄ?®[m×>¯ZçL­â›ñ¥{7̾–´T¦]¡ÄWïzó,”¿yjh\…g­ G‘ü(êO–9°]¢ÙsZ~ßFUM“ŠÓÎãÚF6$ºF)S\”J]Ï…w©Xù™ß3ßê5ì'6Ò-îÔ€Ryy<œÌdµ•¯~×g"05ÈfŽc'-ƪºè\YüÎ-n‹•”îØD!) Y´GøãÝO·nVS¢<òg•§U7P_§Š"qûÄý~í ®Hy~ŒQ‚$~ ð‚«F^¸Yב«ÈëƒWR'¥¹L 7qª>»,‘f¦ÅÒ)ZµmönÕÔ7Õ«•‰´[@­<_ã·m<øR>©pu7ePt®¿j £,<8’Ø7˜ü+¥’½V*ú3íσYFù*°kÅ9þ7%%aœœ´1+ Ê.1Û8fZΫºÕÄpªß*»$yŒY½Ò©ðÆn7Ÿ”T@ý€ ‚{XqÚùIùÇëjw®Üåù½¤À8Ð|XutZ[Éøµêé xœ>ÌñYêD¼”ŽøP^IÁÅwteê†oÔcK\ã'U+²;KÎ ÚDHPv»çŠ~À|º·Ûi@¢ê&Ã( 9AÑÚý›ª… o‡ôÕ‰d4kq¸ù?(ÁTФŸz EÃH7í(ÕFÒŒЦ@™,±W‘Ûª$&MTSŠŒ{¨øÄ¯rÁ~TcÐ>?öÊù½±¸íÄåî6†D Á5gKHA± -xÉžY3gŒ5S†ÿ¸ý¡Š¤ÂÁ±»ff£‚¸²+¿ o ß3Œ²qî7`RÅ0óŽ-¬’¦ÉCvõ}ÝQv]Ìž ¬×îA5œ7™ž9t}uƒFVyL{W,Ìn·šðÀotо”Weü&PU¯Vhà’Irmù‚Š—Ðê-,†ù?[¦Åa|8WH5-$»5ÏàOsrpéª\§þ¹–¬"¹äcç f•,Vì, 95là ט¯Ü;µWø(ªyk…Ée"^¾ºl63¿‘Á`ð•ùT’2=A5)‹ÃŒ¨Æœ7u’Vm9¨À NÑÉ"8Õ}uÞJËÇãÿŃ<ÈCòßrªu\8ß»|Wú–WÌŸ,\›)ê°í!;ª#‘IWmÁÊ÷¥SIÕM,GµŽ«6ê•…5ìóoØ>Ík0/úš.vE.ß–‘=/ h«I…Ü×1U-ÁùvKÝп›Eô¥P1)µ¾¬Ë㢷w—?ÕRüjŠÒ½¤(¼”O3†ÿÓ꼚U ^‘>Íä—â©¡/lÄ™O‰¡ó°Gô |1ÜÁ†½ª ‚ q‘„ÒV¬‰W½Î9UjQ ™Œ†Z«”’ßi^Dhºîÿ*ÅœÂ5õæèÿ§íÝ–ã6štÑû~ DÌ\Ø3†d‘:ØŒØñMI÷OJüIÊöÌŠ`7šawФÚW~‡½.ÖD̼œŸdWžêTáЭ¹°ÅFe~U(Ô!++×)›W„ÂgÄ»|BA«"ob–6–µ[糘ngcJ´Þ}ƒK4z=Îg¿]^\_ÝàcsÞÉgVjÖ¾3' «Jªy„ÀОÌR^±¼G‰cê öå`2…°ùçúÖr¿¾ã4ü"_WÃ4¹A ‡±ç³ÛÔ `ÞÀÃÞÐ5€é=qä~<òƒÇá¼r»ÙŒÃ»&Ž&^§÷[‰§^«ÏúrX6`PwŠ/M Ë¿YhB ç¢¸ úןÿYqRf†ûcƒ.Û=j üCþ„A{ßêÙ©óÒýlµLËü)Îêø)/†ãŸ×xIjz5Ñ¥Ÿèý~•Ü[èõñ@•OÈqÆ͡‚,MC†ØÏó ‘îË6jo›>uÚUµ½÷¯I>ëò¤sÂA5­æ•KÁkægfp–M¹š6Ê™Øp/³Ù2Ö»ÆÐ ¨˜¬ÞˆNK:cdÆkvOÊËî|epw§¨]g¤¼ä !Õõ€Ð6Šb°–˜µ¹jƒè)£ >&ëtþ1Ÿ§—Iá@rèÅQ`v±CQ‚-- Müso1ª!Ãi‰ õgØ  9Qß1¥«›Q`ïˆÇÅéÚa„îqìF}º4‡^ÄèÞašÍ0™‘;sò8ŒëO—,ö«mzJ7¤(KÆkÅäd_¤14(£Ï 婚Wé3æÃ¿[.Váð]*ˆÛܳ<èø÷Á5ܪGÞZ¾~¯”aô{`J~Îß./\Ô-DæäÂ=`;ªv!hÔFmÄw«œ„tÆt*û.îèô€ðçíîÊÊ·ä õFËëÅMšè¾ëÄùŽ/ž; ð?¼ü²’ Ð?Š·é_x"íýÛ¹°r+w½¾®»‚Ë‹F»f êû•ZNWMÈpä+äÓ½“4Œ¥"òˆÙaºªÒC! (v®‚âk»Ô¦pÚ'F[ª£¦«úNs°Æ[I‹§›6 ;O—AŽÁ¨6$èS™å¦nÝ'?•dÿˆñ"h˃=Líeˆ-ˆº"5 zcÙ yˆd£¶Â½.ðÕWTÒÆ¶Lˆ)šr¶…Ñ–Ÿ:MÃ<­I®áâü´°ÉPOò‡wºðâœÂk{v½‹Õä«Ç=…ÓwˆqÍf®nêrGžà¡¨¹˜+ìyÖiÀ²YîÈ÷\ù,0Ñm—žÇὛߓÇ%»-3ôd‹¼oð[óFe™—wÌ@§GÄ¢»xT9ÛÛ Q茉tùFÇÉlŠ_ (& Q=ÚVƒïÀÚœ„IdàqidV<™Þá%ŽáÁïÝ öC'þñË'%(Ñë§Acò¨Õ oq>$pªÅ&y]|VwŒÄ¶¶Â¤p é;úÎc–âöxñt¦u»c;ÝCCíE=9Šªõ®ixúÕ®/©Ð#*äÔTì¶ íuMrjîAÀÄÉ= ëüˆ!Ò1w¦K ÖÂ!Í>¤Å¥súšA+Œ3`ËÎêø?rr»ç0„&• ¨¸jÿ(8&§öa`N¤çõÀ¡q¡]جãžÞ ®ãØÁÒ„°0§:óøÖY-C»­yÅXÀìcµdÌ–c!ÆHß‹ŸÂ«#¶zŒ×Ð;{è°öZ ŒµMBØ„¡=Ñg5cð|ËJG(FT´­Ó?þÈOHx qÍ™ßí±ó3ÈŽŸi"‚i¹6f.VÔ§Š–­\GãM5 ŠªÂ3%a®aéÃx—Êø–™œÄ`g{}tƒ©O¬3HË`Ö¶˜ ˜Ó¢Úœ’À¢rû_ÿÕŠ©9ñ4Äê¶sø­ÝuüÙW÷gk[€ù†ÛÞƒM›Þøkp s:\Oáf´9·y†?fBݹÖDCœ*[jn¶¼{ÈØ‘<›fÙ}[ž¦—¡ñd·9ÚÑgVŽÀ‰²4V¶‚C?ø“/¤f²õ/ܬ ‹©ýVûB2†‚K~7¡Â«Øu“íVÛÿ³£™ŸëËèŽï6˜u :ŠÚߨÚí=‚WUIü-LÐKÛÈÀì¢y1¾¦Èú¿²ÿýëÿý¯¿þü¿êC¬ÿúó?ÿwT&Y•b26}$yZ¦tI(¦óšµPÃ0æ-„bW­VgÍMßeÚaª¯A`ô2SuSÖƒƒz‘"FÂ0¦‰,$Såžmjr68IŽŒ1w6õj§–5ÿxpñ¤õvUgólMóB µ¸5äæ¹ý M,”I¨ÁE^‰óA¾YíbóÑ ü€d•TËož+W¸f4bÛó…jŠ?·N“ 5¡ÜbH „ ’ü1…¡ 9ý¦ Â|ÆâdK¼$aUàX (­•Î<••)`ÄPÇ|±ádQoò‡¶¨çf?ŒûtëKÿÏL#ãDX·Y‹m›1 GBþ úçsíY&¬­½Ð“ÃFäsör`ŃƒÄ„öןÿóZ-,zFøî;L‡´UmüÛ_þ·n#Ÿ›Øü˜/˜†¤LÙbÁŸM”æÐuâÉ ¿glŽ9y#³Õ17K2é=ÆR¢ÈÅ{ÈïÎ&ÒrxUmS„PObyEOói¶QÂWV‡íÄ—o1mÚsëo5wÁÎñ—æëô}j¸q{/øý±ÄÞËí=†YîpÄ _#§8ßaWÑ7ë“1€”?/3ÆVž…ξþˆ"nf…j{'0²g9'tÕ Oé]tWªÑzY¬~¯ðiP«„N³Qö‰ga™ ˜ûjpx‘Žq0?ÞˆÏôo¤{1¤__ÂصÝÎyy!O<ƒ€ˆ_Enõµ“‚(v¸Ì2ÓS$¹R³:b-é[|£ŽlÛûk²¿îè»Ûµƒú”pv¯« `ÚoýqÈžSP”ËS÷âÆ`p_}§ý¥.@ox*2Ïw´³l³2GÖdU‚ Wc×îîºw¢êÖîtÎ1ZgbƒKˆe_¤³@W¯þX'žàÁ,+GiJ[©½F§ÄáX&`ð“­Ñ=ÝŸ(LW¡È7mT¬NöUÀð\e;–¨:'«ì´çû)MÄÇŽ¢£#—ýÔ“ÕîÐ+!˳£ï¨‹”Úa‡päš•vdw¹ÏfÆ ûLÙwÚg=æHÜâ§ ô-^|¯Vnì1\øðÕ:„Ãs;éþêw„êZö <OìU®Îµóì1¢ÆGêXS«&ä«Uþ4­vk°;¬zd1$Ž51°—ã‡1éa–—æBU¢XW>à0ô†Ü£^…Xl&Ky¹F zÙ;LD I¬Ö0Ù ÞT“)¯«¶‰Î4“À¨·ÜöÛP2;CöóÎÀºQU½[¥Õ¸•Eå–0|L­Éá1ú–æƒÔ@ÜH€‰´{5³7*Ý ÂºUøoØq›„ÕKõ½ã‹ds¿…i ØåâÇ$íÖÍnS'_v48O„Ä!j*öÊȵ”¯l¼îð--L˜O®p[ˆrts³×HzyÑ#e¯‘Ç6‹u6Û®’²=î Âe¾½_ÂäÃØ‰¥Ž_ˆÁô¡Ël4ìÉÅ|¾i¦Ü2ôG-Ï{]¢@DC¸¾.+œ|ÐR€¨™<7‚¡‚ÎÒïìKæ ï‘¯ÇÆ¤}Ú^¦ëâ £ÙíUëdV÷Eæ© û¨}{eXÕ ó*`ʥ᧠a«Æ±´Šõq¨.ÿ#ÝTéH¶¶:µƒ¢w†MØB|e;ÏjËè·Q é8T·b·jüiDqJ8×½ÃvH[ß³JW$Ä¡e‡fatªM6IøÙ':J^$‹ÅuE`šVëíéÌú~ÜPb”µÛ¾#´Ûj­kòIƒ€k‡f<LÒ/u<Ýg±uCØ6P¼Ï¼:ŸÒ€¬ôvú%Ó %ÜH÷œþœp©qÓ˜ù=aëÀÅV«C®þï…CÛvXãf°d9C"Üß'åÄ̘©cH:h¨3Glq(˜´s´ªb“yCK£{ýdÀ$3ÄÃí¬4{Ek dj ÒŒß[¹Ózèç6 ƒX°¹+šÑ/MçRþ 2=ØÎ¬«ÁånàBÉôv²Z€7ÊŽ´šÕ8isÒ÷vôÕp,•Ÿ¹z™¾£„ÆTCÞ1õºê£}Æ5ªÇsÍ,O鞊bÝܧõìi¾½œÜS>ò8¯¾øtBëdÖÌ\ŽÞ„&Ùe2cÛ$’Ôæ{,´ª=ÙjÐ"­p)íÓD|T{(_äÑù\GÿWÈwÉèÈÞšK$x~Ó¡ÜÊz‡1²Å[Œl1¢k?dõêU¶üL ˜9»µ2›àÚ/¸E²_ðËØ—§Î B‹ð—Kj†¯Óÿl‘«C+L§Î ža¼°›ž÷d…:Â^Õ½ýaÓ´;È‹0ÏâøNbûÌÖs®Â‡ Kc¬¹bÁ0éÆ#Í Ì"Ù§)È¥1–骱ÔóCÞ`y@ÍÚA`{RbŒvØ3èÀ[7Ž="íuz—[;ö˜Ñr˰«Y6`iœÓåÔa¯¤8ÓÎ:ˤš>¤»Ñ+½â[ÆÉê>/³zÊ_ D–vàƒú€,_ó¨ØÍúÖ8C55A»»õ¬ðË4)|‚-€P ¾Ÿn§"fGëQîtÀSøºª_«üë jÅúå«ÄrV8_)‡Ì2»_Rî¼=lIaœ+v>Ó†M ¤è>*›"¦ÙUøP÷UÑå+M–jäÆÚ7eÈÜûð÷wÿ6ý+uÐ2¯ê)«Ñ|±ÚESÞ4FRÕ)x†8/òÇkãíw§m¢=' çj9A_b{tK8¤Ðik\;K›ÛJÍ¢u’ÑÈŸâÛ\à½öOn ›11™1¢’°—u.6NÇ;§Ñd®ìËÒÙÌêÐkd|å{hj%Ú@ …V$®ÍׇO¿Þ~b¸–uœõرúB¦JsÁ” ÁãáwD.—‡hFmÛ°¿½-á.&Æ 6Ü&…ÔU$ó¹–ÜZ¤H‡ÍaFÁÓ¶eâŒê6ª=Ü!ãå}³Ïš×A÷¢BcñS†+vÁ«‹Ü‘Ë=w¤æ©gÔªÅÂ÷Qñ1!©ý/J,'û iÉðô8È þ­*ôV•ýN7L¥8#ͺ%§ç6+pÔS¦²+¥[#''rDïÕ qIwYõàMÛÝ'Áᆸtâ#`æ€ Ýâ3>#Ê–#-XÅIlÏm½ì6góßr|¸½½ÂxŸ§  %G¾äý¢;ž|4:çûÒì¸ÚÝ1ÊÞ­‹Áæ“¥ný>7AP :f^b/+B+Beßz_r·?åå<^ßî×+æ½¼ï%/¬¢ÌTÏÂG< ’_ÒÁ§tk,S »ï¹f~oQðÞX ¦§n„ߘ9Õ–´k®y§ÙªÕˆX"dA)ŽÏéf³þRÖ¸>jü6é¬?YÒ:öÓ4K…ÝéµîpÄßò’x<µEJÚÜðš™ÄêЉsÓÙ‹BÄT‰ãµI±¹À˜îÿ³¹ßŒ¹ßvK½ ±y$üù"R¢špœL³9SûÛ6=ä ˜@)Ùæaˆ„piž6Âó·ï&æÍ=Y}4¶ËÏ-VÕñ –"èë,_¿£…SlÿùöüíÅ;CÚsP?8NQFxƒ•å9ÚÁ‘PçA±•æÙâ@Ë·l!ºÎì~“—{DçQgÌ{'ڀﭵe$`}ÃH…T¼ìŽ$–þçüòôê¥ök&þÎ%Ì˯­õz[Õÿ¸ASÖ¯¾¼%l“—¶,Â2+!`¬NKq‚Š­²ö¹Ð7¨¼¹ÑAQCÙ¾Pã!a/Î×¾°ÚŽè0ë# fÔ"Bl:ÎYÇ—$ÒI…ÌbcbÒkÎ|N\eº²¢áE&*ÃtÅÁ-“i¿†Yim ØŽïEðÒŒ­¨]æA5Á-”_õØ54 ym6B «í›šd {zÆû£yÌ3ƒÃ~LŸthCÍÎ@Õžƒ²:Ú—õ0ä=— 0Ê\IFqµLW+̤¨ºø.S‹ø.ä´2nÂçÌŽî’†uE7€¨úw3â2ù2Å¥j™Æ{·×#°˜!¼Œêé;7ìo‰Û¬î2úéìünFÀâÁÁ=¯å:iPÑAýgëöÆ,φa¾xþûï.‘×8ûg4@ÛùaV{ž¾áº·4"ö9æ˜kè)7<ÞÏÁ|NŸ9ܬR„šU9®ç?üœy|x°ÅŒl*lJ>$|…½^»fuBÏ=¾Ûe߉ÿ¹ó–-4®í ãËAE-|Šê!Ž<ÆÏqÔ¢ \|a¶ßdTüœÊLCðH¨åtÚ–˜ÉµÏ‰åV«95&½mXÒ³}ù-ñd ¤ ½ý¤:J–"Šž;¯¥˜˜f Ÿ ;_²Z¡Ím˜ÇKPÙ½ÖTG]?¤’ëT­Jé#.jÄ…:5R°µKn›–™ rjœ·&RÂçYÓ>'h_Q'$Ëgà@ i„°Ã•殺„nËø¡ìÃ:vP±¬.R¼Ì×é(¸Ì‚;ÁïJ³¥ÚÏÚøª{ÕD…ô0_¨Ã݃±=«û6XŸ7’Ǩ*%ΠZ·­|V£{‘ ¬^”¨Yq+ë“[ÇH2‘‘N¢Û¬ Áy[f³‡Š€i³@û0nÒI9{ZQøÿ5©ÛxS"÷ê&ôX“È®éÑE¬Ð)k$yoZ‡.Æ#&Ñù$·g$µ¢ì¶ß!/„ŒÑQÒÈmH#É(ƒe ό΋a'…$Nu âàEå|Ô·#^ŽçNbQ†ðZžC²vL`/8ñ2›©]%_Ô‘á·~a…êp;‹ÑÐгK{ë¸b®Èp\•&ål·#§{aÔé™=ØIì¼k7Bcê…Šžm1d 9. ÿ‘ßEÛ‚ø Å7òQq‰°Mf ²osŸðàE»jÜáù{<Gaµv-D„À±¬¶³p¶g'‡¬›Š˜%AZåE×¹HÖÙj§ë¾q1ç85ŒÇ¨90eL>æžœ­½JvùV²×õº¹;UÀí¸L¾ÍŸ6œaTÃþ¾ÍÒÃP?Ÿk0ν_G2óÄé0Û Ý“{ôc §)ø¡&MOK{°Ôé•<$ºÜMˆÂi†)1œ}âhö4¬Á|¦=Œ8Ƹç+Yö1Ìøk$®Þ\*pâ¤=®6$åÒcºGèŸs‹›"5ñú” †ü«„è±ðt¤|¶ÙãL̦5C •ºw³dPTç³|ERã çÿ0¥ùàn‘sÕr[ët`]ºyË÷@ó8Pýú;ßwµ¢¨Z3­‘G{àUŽ+3å=™%²\g˜cº‰6‡#HïwìêàÌ0в.+ñTQr× *Çì4ÑA-˜x±”;ÆmŒî…ëŠJ˜ªP”ª”üV¿G­b @ÉZ;~ÀHzÉg»Ý5ucV<qEÕ“e2ÔaÏ®¥kÚVz«už¯ª½:9{5ZBh7Ø - V¦³,¬2 AaÆ`à3HÓ}¯\þ£B5)î x=ém PõèÕ¨Îãb›ûáN ªü´ÿYL÷-³°GŒá4*®3'atS7 ;½cºñ– (ÆÿŠÃbèñjOT ÀEÞäqº´BqRͲlOø&J«Ž¯ß%`e?¤»}{Äð»¸j<~Åf.¿Ê‚Û¡¨n(ðƒbSP…º]ïá‚ó0 Õ›&é禎蜢†:!ƒŠå€¬~Âu»ÞÓ5àˆßÂ:$k†”¤lø¥#uxA´Õôƒ?OáÃ]$›Ã 8®¡¦™Ü™ïõ†ˆqôÉæïb'S7ÐÞ «¬˜Bªy¿oÓm:jp"‡œ«d}7OFHxÈà0öˆ9DiléÆ¿:!uàU{µ™â‚¬Í¹´qw*ÁÄ¢ÝÁ³n•¨ºlQ¯¾Ec0Ã…%i„þûxÜyV×^‹ˆ+…„ÿNVw»Aé«Ùt•Öuøˆß>Ý4ú~3€C ÜàÔ1pô-Ñ7u1vN”¯ædø7ux ©L|vÐõO½’!ž²“C¤ÚÞÉÑÐ~‰+תWH¥@5¾ÓÉÃñÞnTÐs&Òî&´š°¼6FPî ¾³„|Ç6ÊNíIŠÊ)¨qŸC>XòäW.¾$;€¸uey°*VeEBתèüù§&(2â–’=HÄÎÚYscS4™&Ï<}ì‚TÅâË«pòB;3A ÷Už]¨šˆsm °¡~·áÜt•!<7󥼬IjÅæ €…8S¶‚&Íj5èƒXdâ9ûÔûEä¶ó5;ÔÊõ«(™[ôù*›í:‘BüsÁ2ÝóÞ+é:˜† naÛ#%,Z%Þ‚&¡º ôðgB­i²î vØÅ¿=(:¢h'’wTu¼üö5l·™u‚©†×±,¼*³uº÷6hT] PÎŽýy©$^Ô ¡ùŠ*hÀåS"—É )CKck%¬!ëªK–¨p_€?ÄUÕÀlçYhA¡"b:@ºL6Y±“Ò¨Lž¨(‹j›µžâJT… ¥œÝòáIĨÍÔ``µñú¥†J€© } ¶¼xýþ{|Dÿ¾~IÿþðŠ6|?ÛT3¿óÖÁz—Êýmz·Å¼Ò:â®0ÎKM,áqD…ÍhI.@¨Uˆ(ãö%4JIþiYëÌdÜenÎÎÏmü¥]¥ T8lЪ‘Èð _6¸»¬ûËp%üˆ©p£ÄBPì’x9r›­ÔÌòŽ )cX¡ÄÏ?ÔÆÀÆ›Vÿ8òBýÁÿP¼Î£Ðv÷GVE3#j4uTKá@䃔2ÂÕ”.¹«ä¡vÐ1—VlO/8‡üŒ œ>þz­:ðgó¤ºÔd·ª–b¨ïõ­i ã…ü˜©Rl@’bÏ~>Ä–B³/·ïr‰Œ‹4úTG|¤ÞÜY:fk±fjbAc! -Eõ2…¬pp6÷D,nꨱšUÁÜ?ðyk€È«Ñ‰éü´‘uåkÁ7BR´®}éÄ 5Ø7¾°|‰ƒðÄuõ¡±HÄT4ÔŸQ)q· ‘A`ÿ¢O%˜—ü32¡’³7)H4‹Ä3 4U ¬¡çµ«V§cÕ 0Рهý,p|m´êxÖy¬¥1--p*ÎKIÂÓ®ËtUDiÖaÊö)k1°Ë“]ö¨ƵªR©DSã·«S1S”oB¬™Óy›Ù¶¥ÓÎ_‡.Q†Ô&Ã{¬îÄâuôFGÁ¡Q<ät"¨z@™J:£ÅêÔbrȦ·ŠjG#=¹BêÓåº&ÃÁßײþÅ‹*µ+±¢tµk B“-w*¦Ë¢„Ì?â¶ØÆáRÝN¡†V~®Á.ãÑq<Œ&‹i[Ué ™þº Ø© éeþ‚å·ÉeX‹ÀÈ+v‚UÖâf Šž'–3Ò‚J,<›W-p!X  í8° ªOXd³‡•Þ}[n¹+ü iHK¸Ñ¦.³eªvJ4ÿ—(* Ø<ˆËJ‹3üûž3U¶DÃYåÕ&¨ÇÜ.UŽßãæÊäuÍ:@èÓ_•he«³f­ÜÌn C®ž0–RÈü©/%!% 2Žc¦AZ!Ñ܆'*6Òr ž[tBŵNzÏRµôͳJÍwU£šgA‰Ù.·«|f$gw® °lªmÕT$›tÕQ–;5õ pƒLe@ã‹"±U˜ó“|á¯Í”K|9thgä6 °»Ú!L˜V1AÚôxðAEiC’Ð[vÒÎò ·Îþ®(Ò:[§n,Ó­!J>á©2ÇܽjpãsWp˜ßyuê1ér-ƒ°ŒýpúþõçAÃApªþúó¿ $ü¼ P š<8ʤ»*sµEØÓN‰gHÑ‚EÜ<¦£'ý DsN†6ænN0HÁª õŠëÀ¦m;zH¤¿ÍmE’"][.râÚ@—¶¬8Ï’UîïD,a鮣·øÌjE¶XvD.âÞc:è=: ¦¿r$Øb—ÍÓUØÀþñ›ÉTÈx d ÿõÝŠOCü¾Æeæ¾§•ÕѬË%ÄÝ¢~JÊ”ÃÈɲÓC:èäÑ€ÆBÝt¦•³±Þ²–Ÿx·j¬|V§þK.âJ˜ŽVrõ‡mžÌØ:– ¨s[æ X@ÀDƒ«ç†@Ë/Ï/ß™¢)]?,â’%Æ[XÉ£µuÂyŸíÔõv©²ªY Æ8>Š9žVG} J»byĵ HäÝ¥º¯®QÈ&Pç¢OêSaSËá½£]6ÓNÉ Å÷Ç@ÐÿgTÚ¨•cTáú„®Iž°¾©lv3ÆDëÅrŸœ˜û šOéPÍ1³ØQ<üÕØ‘÷©¢ÍÃ¥uÓsxá4‰ÝpýðDÒè.W œn«1WÐK¼c./òÈ~rÒŒu¦6*ñ× 5 =5 ]»F)9‰å5ýSCWG™¦ãâ°V]Ÿ’0>ª÷±vŠqOuZ¹N/®É7kX…¼HTÄÍf:'VºÌ°ÊZ2¶¦Eeo–­‹…F†Î6¦ŸÓ—ÓM5é1I(#¦Â¡z{ië ®:iF=ò:ƒ¿lœ \œfsMyßÒ¶!¥vòÁh_œÈÐâ©.»‡ìty ²ƒi ŒT+ !ÜTpt—Öeà½÷2ážïîéÊàgNòvF× ñL{ßh–´Îý:C*a@¢Bý%¯eűmÙ¦av Q ÔEº ¤C³3µÑàk‹.’ÝF-ÆZ¢u´1¡Hc"ÞµÁ’®­$njÄȪ¦ÊR yëPϹ Ðk‚tL½tV†ôK‘lœËWT’&‰”qBi+l Wçs㫯>í$!ÔòÿÞ|ú±Rز=4Û™8vzจ…Nn&dSàñ¯4½ì|ÀŽ^‡ÿ«ek–Ì–~,)$0CKGÌÍ\á^­òep<Ýô,½ÐX¸D¥o:{%vOÂ+ŸÓ[$täwÄ®fÉŒ"0{ „Ùòe À[b£—]™“¸uJÉÓùvÚž¨ÅiWÖ2›^ý±ö®Ûðœñ€BLçĵÈÜÛ\üûå©G\åæ]î]À¹ˆÐ…®aŽÍ•€’Q2[P‹.Ê& š%E¨Udê:ªƒþF‹'‘®,D”©½€P¢}èL5!œ“.a-çºY±UK¿Æ‚‹¤‰Dgo=1% lZfmI(ddjlL{LL R¦öà„.dLMKÀEdB[ªYŽ*~׌aU3?pÅk¿«o-Bk¯vzͺi<Ò¯Óy–ø8cd­ÈZFGº† —êg†ÌÙª}¬¢ãĤ¯üg—3ºÍA Ù¤1¨ é<ºÛE #7*ªÂuð·hgÐdUþ¨„›GT7Gò\® §÷uõ8+k P"5 *Gªt±]EÚÓU¼°Œ\ÞD¿œýë¿FåvÒÔ€ê_3½|U¹$\gƒuIôSزmeV­Cµ=SsRÍòé‡ÅºoK˜Ð.hØc† º°,â2Ø}()˜ì  |*jû))3$sQC$E¦ÍõO•”³HÉó”h ÝôÙŽê÷3X~S”˜¢lØÅXù«•ãfKѵØÈú„Ü_­b©ÁÐÛ§ô<úts£³‚ÀEyš¥îF•«/_Þo½ RF}‚_ÑÏd`›ÀiZý4‰xä°NÎVÇYš8n9K ô©kÇYº.0 ¹H@k­¸¥+sãÂ7tð]Ì÷»°Iè ¨˜E…¶Ô#o6ƒî [bØ5±L±eÔyež ¶µö`` 7‰¨p> ÛˆLQ¾ý`œÌtÖ!+³µâ·³Õó6ì3Œ‹4S‡…ª»›Î©ÐE }h…QCÔT]cü€VÅóͼ«>UìVô¸Þ• Ày Á³JC¡^ä~¥°]îâ#Ž!îH|Àbj ŸöVBm*·.‹Û®Q<”¼².œ¡DlÕ¬˜ypðй;¸éòšá¿fóû´Ý™uÖù–uÖx½šÕø:µ¬ÔLg_Ï ¬C“Å pÙôÔq „¬QØÁ 2±÷aB£!Í’2f¤A|UfU”tíE?œ ¤’3Иχ  Š4:8`¤Ààу†ÔQ¦ÒV1íì¬ ­z–d&¸AQu•”S;« ¢Óv Å'°6úøV±UÓ›÷bK|Ü8ÑÔþ;–ZîXj¾cÑx‡öH‘õ¶¬R–0 Q!&ýÉ¢, Ð©Ï:ò»³·»M²VR.ê2Ȉ×É—Œa/å€èš£©_¡}KtU²ÃÚnLXß2³NÛMࢠØä}#Q<'°lV{`ȈÇ*&0›žÅcÜCß6U’$"€jHDš’ñj”¦P5Ú «9×¹8.>ñ@%ø«1›¦âuÜÐÂOªYÃQªa×÷%€þE¾Ÿ¢¸‘£UK,Ü–«€äN%Ü ¢Â.¾¾0þ=Må;ó`ìL,·‘™ƒ¶‰"Á¯Ê$ckC&.Óß·ªwšµ€ìr§Ö†1¼œŸ œœN¿Ù¬…+輻)œš„ËÚáXm‡pË µG¨>…F´*Íïò:lÓ¦r+·¸ÉrϘ>aYõ¬þbu§W-²eÈv¸ÜnÉa q:Ün³¹/› bFÞçÏçouŒ %Ëç%Ôç¸~½|qt¤QÓ׸ ž*Rà/K¬Û³²Þ¢ NùaZú””ð¼³UÊ[SÒM þhŸÿõ<˜GïQû×Ó_©´Ëtá…£"Fd:l—úÛ¤½±±îôÅ»NJQSë«t/ù5½‹¥ˆßݾAãTGÞ:¬,H`BË):V)Å:I%ÜV¢Â—gH‹× › HéÁ‰e”(q?…¿ AÁι,p7 LuŸ…¾qL‡Í¾ùùÜ ‰CâZ¾ ˜Lûî„¿ÌC×ÍTÂf s}ÙÜžº¿½½võ®_üž½_ı,,eCS,ºÀå?Û ¹þ‡ 1å`“;Œ]·rBk »’í²ž˜Ä©Ió‘Íæû½ýtºo¶b»ZõTÇ$nuÂ× k.qàÔª\gÜ÷¨)ýxJ*Txl©ðfé¦)ºã#IöTaè#ÊÁŒL  Ã„ŒÎõGV_Ì=Ñ)OG¥~5‰R{’,fdϪºvÉZ±.àˆ]‚™ræ}3e®@¢Ú„bÛgKw¢\ú¼JëmAn^¦ÿ舭Džì1›ƒHmÖåÛŒ}PŸ–9†¡Ñîêó‡s C±`…¸kå ìÎ ÌVŒëÃ…ì×ÓôÝa ñKC0þÚüjˆ#ކ­Æyâ›pʃqc=×hßhG—çØŽpäÉß©]¤UÃ̽²¨ÁgJ¥ÈàÿËËî ¶ž-“‚"«  féÄqïªâÁ⿇äõâô> 'é5Q[÷ͬ° Mí œø3NæIQB8eæf2LÔP™Çj.æàç1 ¹é)óh§ì[æÕ¨w°7¤Í<ˆG×ñ0Ç»_Ùºí·’°&Ž-jÕDg3Xb7;uÊÀ*øtbq{ÑÁs<¢Õ ƒn¦ƒû(O-ÙfVÒÉe5¦–s‹íÌõå÷Vrà«@ç«l•<7çóÀà5Æä°jdv`ƒ…ï:ÙDnZ„jVbM0XAh$ >¸SÿuL'MÓ̇|ÆÏ5X#i÷ì41HE;§ÔÆL§QI(Áâ|e"®‡$ÆZÌxN¡àÄ„Œ~~›ZL!6Çî|Ä,<è×Íå6ójJHÞ6ÛIþIÚ Œ1‘ º<† h£ˆ“š‚ǧÕÈ=Ã0*4¾ñD̃ ŒE Ú Í--Ý“í$–Y¹*![gµI5hœûä½.ðKá”ĨCâ‘COÇ ‰!I–% s&ÊOº“‹¢µk3™f¥-tX{TLÊêDoSÁxF½I³6> Þ˜pÅV,.ψÒѸà+öÇãâøZ°ÅæR¡Õ&"—‚E/w‹QkY1¾{÷/Só‚,Þ|†/±VÒØ=íË\Åx®óG™—§¿M¯No?D雎—ëÝ!—YÃ¥oꛯÆèé.5S[~/VÈ£f/™ØFt—Æ-„Êcûj*,®Û‘ë4ÚÎNHþ Í׳›ács©<ô-ôÅ#ˆTÖðIä7z ÆóÕP €š;)U€±aë’e=Ž¥˜é "Ö&dÃTÅ–t¦Ù¯ǯSgßr‘º‰ü<£šYÙVæSiž‰x¶5È¡gafÛIÍtäÙa"$·(­£6ÅïïÿbŠÍ:ÞsØì1@au4@¯*øŽº{}0Åk¼˜|GùKª‡;o²T@onÍ-bPÜÖ¬61ot¤Õ‰Ø#/8ÁáuÕtð3oLÖ1hÕÅœÀ«ÎnÚ/€ÜÇ– ˜pl%>]‚5 FÈÒÀ½zr0™V³ÐÛU3óbÞ˜‡kü:ª»%ÍTˆ þ-2›æ<(1{ é. c±ˆ´±¦UC„+Žfº^OFbâ8kÞbK[.Q“sx2á&C¦¡EÙ>ÛVh‰2­êu<Ù ‚Ÿ]“IIôÆØJ>«ßîi™ÔÕ&}z~ôì•=a˜Vrü1BªQzl+“ŠE¡Gˆä»< Büœ¶¡V/†»´—É)60æš!6ÍÞÏq9ò©÷HÄØ]Ë+˜ó= =y|·º¾XœZ k›r©>ÅÍÚ$ãõéŒËô>5G$Ú}éðN•®º—ƒV°ÂR|æe8Öxßܪ²x®S%ùßÜÅ=UˆuM ÂÊvØÃÿ)‘IBàõpüüù\G\6ò™ÂyZeÈ ªN ìiK1JQ•ljiJg,$=þI¸éü8€³Q}²¤mâÇ Cø)þŸÉC´®žøX VŸ±ÃöC5Îf£°$.Ô’‘Æ™»«÷Ï"ù¼‰ƒ¢ö80THúnR‚3pÕ- Âl,SƒŽ•º'¼Ú÷Ô_«””d&k#Èḵñc;¡Zû›z×’DŽqõ%·Z {«dþ‡t7ÕI=ñâÛÈ=ºC?°9u5ÐV•F-]1ç,{!Ü(§qÖ“f¬Œ}ÉL-´ÂÊ6ÐÎ0¦¯9MôÀÙM»E__^½\Á/³è6hÑÍ¥[Åx)µlͱ g»À ªA,³rW„1àWkñ¶è¯Ic"%ƪhòåÝ’òÞ8«°àñQ³P60¼)‹—ù€ö"ƒÜ HkŒÙšv9t¾‰fÃ]†Ç1³q;ÝŸ¹Î×ßé胢Ѱ_V³¼èg¤‰Xëð1ÝŽOÍWŒžÕkº[ø11ª Ŧ–YÁq‚b;)ÄÀ­à†Ž¾ØïJlH³GëæžãNI\îD© Ÿâ£W1æþR–)ŸdükIÑÈΈӬUˆøz8â롈™Ä‘iŠ>°s‹øl™làqÞ ÂyÓ‡Ãf€ãgÇÀ„Èdò¯w² 2Èéz¤ëàôÚ9ÁzB@0 a1Hç¥Éc"€4"u^HX% FÑ9Jˆq2Å?$'ÑiU¥Ç<ºEÀ‰púä55àܰÆr½ctº¢!Ž[4¾ìa ¡Û{æºéÖFˆï®'{¾I%örû¡ÔÙ À~úoù *C s[¥@»k($ÞWE! 1‚ÄúGÊç·Q_øæÙ}Vj ±Éë7 ?åꈔ81C Û ÆPäà¾ÝqU¡(¦ÚÃy¼‘T€ìønž³M—$£†óL6uŒ»˜·îuùññchª³‡\€l¶«ÕžXŠÓF)r\ž«Á*ÞŸ/.¢+æšPäMïtÂS-Òé«C*qÈíÛ@;IÃ5ɬ ¦Þ;%C{U±’2XÌÁ´ Lê7?¢­NAJRÐ|IK(0@yÖêŽËwkÌY ½hSŸmÖ QšÃ±F|LVÛô@â×x#î´åkèe~»v øÇ,ˆùTYÕpJ6s_ÕêÔ@\ylèWpS¡’Æ>ªgÅ×s¸ðvGÇ÷ç¾ø.Ân¥£2€|V•å^ádlôw(ÒjÎÃ)6i̇Í Œ½`I‹c(¾7©ÐóÍ4/§ùbá—sõE Ñ.¼‚‹Sµ¯ÞéŒ2d‡-ÙçòŠÄÛ ŸðQd=š@0üÐÍJÇãóC7föZJ­Ší–ŠÁœdo੎Ûb 8[Üùf±G—ø.­ŸRØ%Š“õLØ#f×f¦Î7húq%Im™J0%ºFœ§‹d»ªc¾%,T-˜ÏÅãu(*)&=e¹<5ŒêXÜêO}x‰f½ˆï„O§33˜œý@)çÉÀŸ5&J1hæ)¾£óð¸7%hÄÜÑ7°1}Ûîˆeþ¤¿Z…¥—ñù“þ^JŒ,Óˆ¸]l÷}Òªóz×W…þ> €©…7Þ>wŸ&6ï·–³OѼÜ@Yyl<¸z·Ómmkë&¤Î«?³$NëµpÚgÜñ,¡E^ðÉrÔ"u¥Ù¼ËÊñ€Éecë|ÚÍÌjeav³náoñ@gu¬>œ’ñïÓðz Ÿ˜#uf‚ˆ´ÂlЕP F¥xé˜éîáñ5¦—þÁ@x\³Á¢]¾-E ›‰°.ã¯Î%Y¤±ÇBßx 1‘1ÖgYÇõä&Óý蛫ÝÕù·“<=à÷ìüg6ªx6ãt:qµå½oã·÷@ D¬Ä n 35AÉöÁÒ8hÙžnò©’DòÍj÷µêˆ7y,­êÀ P‰;ÕW«LbUœ'`Ì-r©Ï¬ó>[¯“ bZa¾ÖábÙ•Ã`ÕeGcŽ8dò¾û!ø)¡¦I»¤ŽYÆDÇ\y|5qÒ¤¾Nüìz`1 U„ªj–e1Å•žÇ&¢IèÉ«(8½9;?稷óè'™pÜÕîí/¶t2s¸Ñãh­²`IUµºa±¸ŸYÛ€XÚèâ‹É²Í˜ÐÈ ã…2JË3Ì«×Ld0n¢^‘oÆú¸‰ÒaQ72xë^Jð¤aHNjÉxkÛA@Ï#J :Ç—4Çk½´†¬2ón‰”ühá’¿à }ÛMZÄß¿<î·¼zw)³ýùA¨üëÏÿ´G.b½~=ëõëH­d¬Ž®!¶d#Ç£*z Yذ ã¿ù~ þ›ïO¢+µJoQ¡éQµÈ«|óÅPÌôþ [s‘î¨ßr”àŽNäS§?ÁEZ ‡7Z ˜Kx†ÿa(ü'l_ .1ãÿv©ÎMš*º¡ Žy‰ØÇßÿÐ/V#ô÷ úLîßÔøÎìGŒôãP¤O`aÆeT  §Œ :Ë!Ü‹ï‡~"Eybb¶­,îÕ`¸W'd¸‚e´v&œCG£¢<1Ôb}"§†; §†ì\&Š'#¼Œ æßÇô :_pÖÆøa0†×é#ƒûi»XØFs‚o‹yôÈ´ › $4ËÄhÄb'תLg–”4öyñãà×Pcðô®BÁ‡‰Ÿ±C!½ŠtôæDGã/£Ã C»ovª_vpT±IÑ[ˆGÖòrà<{ñò]1уÁÊ:%§E}†_<{!àƒgÝK˜uh¼}PË ¦,&d )­}õbè8xõ†–¤a†k˜O7ä•ÿ)Òa £¥ÔEøGCׯ£ð‹Cƒ”³*¸áÅ;þf·d¢gÃJÈe{C:‚ëèNzóóìy¤„çôÂÏÀjÅïúòh(ØÍ(¾ÖUßä}š9*êÛý_ mÓ«£;ž¤ê(ÕÂø-㜹÷jhã^©Æ}ÆÍ¸‚дP6¤€›F|3ñ~ÝéQ¦SxgRØßÏ?¨åŸ&?Ί·é*½çFpμÙÞÝËç!ä"ÿ¨^ü=hœîŒUáu Û±»þøf( zo^.µÝ-Yj|&€ö2¸6Ð^Âþù gÙyggÙA˜à†×„ýNã›e‚oh„$zóºOÉÈ@o@ìÜ$w¸ûÎR%x,@ÒHá6–þ„uån±1JÄw3à.~éœÍÚ¯N“àÜrÚ³œXLWæù¤Xîªýã˜^172-²ÙÞTt|ó· ‰¬2D{K*|†èŒ[à"h¿YfUÇÅzßüB ÷5 ´ˆi‰'Ïï†À|ÚÖq¾PGÍH A÷ÿ°öXŸ3_ ãëóƒÂ?í(3~L¼­›)ÑþN󱄲:m7üëo–™jÐG#'D¸f‘èÀ £&½Zfƒ^øšiáü¼ÊïP†$\Õ‡`h1ö8Ûfw‘²$Ž“ ú¤æl=çk×&¬¥[ÑD±U'pdu)¹55=|ÕôPÔu 5ßÖŶ>7oá0 dd€\4‘“¯þÙ¾þ·Zõï”õ/T|µ/´6rr­È*›B^+lzQ-Vyr°[E‘¯zT¦Uº²\J®r A¨W‰¼8îÙlrÛAòêÓÕ±ì8ÄÜY¹‡ÙÔ\¶7¼¢ *1…"U(ìª+âŸÆÇañêMK áPñ^‘ˆ ¦?• }¶rˆÔë`*ZSѶ<éU†¶m^°ú)ÜöL^%.^ƒÉrE±§® áw2+·†®ˆÜÃÁ…p¿#÷&<˜«ì‹í® K=‡x:cNZ©6§]a|¬  &{ q’Vå ÷‡Ð׸d°áAèvï 옱xµÚÀ`s…ý”Ž17Â;ä b¿D<Å>7Ò¨ìY¬¦!OTs0èP\% oO(4aÖ`}ÇÛ@H³Ìä‹jzˆ‘ið¥MêÏ@ É¹ìn8½°Å„ÄÇVç…àÔŒT"†CQrwW¦ÇHú†À"ûÐáæs°ÏàÒ‹nˆè%€V«#‰Ž¿=›„óÑ®ñŠÍnQfª3³tLTÚ+áaîÝ!Уï¦ËìQ ݺ¬}ïWÑZZoxÅ!)Ó» áÄêŒóÞ2s您Ë{â=ʶ„[ìg‹-*¨ÐW êCYÓ+×IøÚ— }&TÇEú ì+l,Û;3ô#£pþƒøÏ™l©(i²Ù&+µÒ1’«Ax&¦²y'8ÉUƒ»æ©ñ@® f9 ‚Ôo‰$kANÁ)c;êÀÀþ±”È„¦ø¯ˆn¯¨WšúÛ2™á5P™ßO{ÓúB§•hP;÷ƒÖ ‰8öÖ„ÿ .µMáÐ:5‰ÅëŒëZTLµN+0ÛWô@ˆ˜ p~£Ú¬ñ{£Å6R~Rç"†=´–Kz )u6Ã}|ukÍ´nj§X‡$œ˜Z’6!çª4fE¸GÜŠA æ„d]°!Çüe.À@k7Äá¢0j”k cêuFÚðûVcð5̾ñõ8â†ý9U óì³TÅ[Ä×±/n ­ZÄvÑeåÕÍûèâüìÝÇ›wÑéÏ×ïÞ]¾ûx½ÿt]ýÛí‡OÕùìG8ímïVF¼Ó^8™%äÞÜ?wl ¯)‘ ®aŽÍ!m&’3çÃýWi÷¼jÏNßÿQÇLX! å–<³;z ^à´Úæ8Ý,á_·™ÏªnÑäî 7àvÎR ¼As††Å4Á{¬ÝLm~JZ˜w‡åq¬HÏ’ÙR჉êl€\Ý•~«GºEJã% b²ž%„"áƵL…‹ÝZôòYŽ<Ï 5þŸÎt;J1OÉ¢Jý6Ëzãµ¥Ô¨c0ž/,ž& hPŽÔ®«:ÙRÌLh¦‡:Ê4Q^o7˜ÊXGe„ãï¿ÿ¾wig%ÆÌ2?èô¤ª2KÌ‘£ä~`j™®Vý>])4'˜Æ9Š®•uR,ËOŒ!³Ù ÔŽ­ßÆ™Èíþ=+,W’jò{ݼÜñ4úGQ˜á¦Orþ®$qº71AÃ/ ©ñ¬¥ÞF;YÈ/Òö¥„ã%dÜšwÙ¦Ût¿ÈYÿV E8Èv ‰bKH)fëu²=¢èa®É±FµÂ$Ö d̹2ÆE±Æ…lùº'<1µnWËäišmäÞhÜKXvØI¿ó•öÐó4©áуÐs%7öyý …Ã?ñPM<Úd? «læ jð{R ùq<ê#±„ŒM-D­º Á¹ºÇêÚñäÇàBâ¿U¢áÏBÎ}tÂhKühÖ‘¿¨Ð¢Gî¤ñé&ÎÐ1ÑÒ$z@rª£Lœ„/ºýpÞëð肞Fòtâ ü-Á!ºÉx×ñŒW¶ÐR+BeJý™¨€} |»ƒ)µÖ"~2Á±Àbà Xp·½ot-<1!¸¼@¿øŸTp–û¼OÙ'º¥#b¶‚jÌ}"a^³RÛ†ÊÊ´#dÒÀ‚6Ðóû©à Ñ}AÂŒ”1Ì uvÁÝÐ4äóØã,È6‹S¨wd›1FÆŸÄ!’²!P‘’½5§ª¨Þ–›Ñ§NáÒÇN3ò=ï°“'Bè£gZ?rÔ‘ ÙV \'IGÎfËÙº…ãðàÀª«_‰•1P¶fYÚ w܈aË÷´å*‡H€]s®^–¤¬×PŠÇL6 ”ѳ՞º™k†½•¨hÊí>Ãd»‰ù²u€‚¨­í¬‡ºJ¾ð­`ç;BIE*ïè¤AkÞÊ ¤vëMM‰°lŽrú›ö1p  ß®úTH¦„ÇB㢿!±U‹gêf-­´À ZãDù.¢¬ê0šÁz‚i¶n‘™&ÍÔdš8°IÄÌ$¢äÜŽŠàÅ „ahR¥àåÖ@ÏXÒ¤ò+ðX¥çñcEv=}ê"ÿæÛè±zFÆ;ß|«0f˜\Í·‡ð-Ê‘™š”GüÈ‘†… ò:¾ G?¼_3 C‚‘TgU¡^ŸD7Ô«xðNø-DØžt¤”tßüxiîÀÑî=C›öJ½%Ÿ ´ç–iV‘Ç>±®G¸Äº!N0€í øVF [ÃÑÐØÇŒÓèCž?4^ EzuB:Џ"ßd5R0°• ÷f(83‘ô;ë®Ï€yï­¼pL cb)رİ:Õ7YF¾6ÅogedPüë¤Xæ½êÕÖFu#ŒZ+i ÆmyI/“ snüIÈ¥Ìp3­öv¸{.‚„–¤Ð¾3Ï Kæ*/™§Ùì¹;tëÛÙ;4Ú¾é-@"J2¸ƒ¡HȯÚóÁ{ÞYkÔuDè§ÆKFù©­ì}ÃÍ‚nÛMéW¥c2îÜ(jpd[%;b°L—¦g)†Øe€qUOqOã)@ÂãÌ£ŽŠ·ãã¨R»¬DÁ3Ý<>&¥7\#'ª’™¶eµ­N´=ojî{Ôû0†W´¶(µï^%# 7€Ù²6®Ú Ým>Ž4DÆ&GêIµ„EøiúXMçiZLgy± L ÌBðÄÈ£>Â2…cjçuÑ4/{ªe¶¨‰x‰ôŒ³Ì½+gµ\¥_zDa Ñ¢ü0ƒ ¹%ÌRNí`HD%ŠóV©£61™ð+2H9úë¡u9mŒBóe$:꫽'Á}…éƒÀÙ"ûf P³f’dA´´p**á´šôx€ Ö÷R*‚IIéÇ´ZxšV+~ ޶jù(Rt8Ó…:ùÁ–‡Åf©çª…iÆä^v\‰û.4Ö# 0úkgP)Ù«¾t‚/›>$‰1¤.™A‡bƒe<‰±†5vÐàï=ÑU¡·„žÞ*™å_ Ðý½²!cÑ!¾—T9»]ZW„ÔAh~tܼaŒ—Ù ³(^HªN•ótÑÌÍæ¯k^SÄ&asA|fÕÞ3p¹ÃÏÆÓ)ÒO§“j]=»ÌÚÉ–{sy{e4àÞK0¢…G”nÚÓ=8óÙCÚã"J4­’8÷k?òê7`¤ÐÅ<•7˜AQƒ£†/]Í3Nw_8ïÂPÎ#å|; ác^“ ,=Ž„wRѵnÇK9¶Ý7lÛ­Þ$ÂWAýîèÛâCk¾àÉIlÏgK[Ïzeû†uR‘âcHõnŠDÍÁÊ¡Iü`•çÍÌ`“ìÆ­•¸¬#úy3¥àœšE ÒyIÜ׺® \ÕŸUÛ³¦'¹}‘&v>{™T¿ƒŠæä˜M:ÀËé­,hÌfƵAûHL‡Û~Õ™…¤+Ìà‘¨™ ú¶¬úòš˜ÈÒj§±ñ„b‚²i;Íüf`c8.Ί’B@W6Ë|5Š– ÜX³–ÈkD÷\çO­¾éÈ´Óà¾ùDsÄ·?RàVJF6AÄB`•úg1r­«^NˆÑ™ÞÜ\D,¯#÷&ßÜÁ•v8­ÐËë®Û4mˆVõoVïz¡n„>i67gUR¯ªÇÓã MG·7Ñ‹gÇ“ªîÌÄæZ¥ÛÑ!# : J<ªIŸa‹e¹\TA¡‡J¬ÌK@gª~Ê0f¯%­Kb§À­¤9dÌÓYÕÊédÝEò#ìñÊfá¬![pÓkMàgOI öx0Œïóv`„^È_‰?:Ó]–é|ª(¦N(ù=Är‚ÂCž†Šu †û@| È r8a\9ž0â!F”# ˜]a·Tu^ŒŽÏISN"2ߢ´ãyA°%]ƒª,ç}uvq%ÖÓÖ¹ˆPØ0Œ!Òj–(šô÷ƒïaξj>Œ£/}¬jÏA‚[ñ²p%!ìý§C^_L˜1в^™4 Úóš¬=âd•ÝoÖÁ°D¥#oA4}ÌÁð]t“ý‘’gÙ©@f·‰† i,2ˆ—†hìí7?‚¤o Áé>÷8L»ÚÞ‘?9DÆ¥-¥ï žsã²™³‡zîQôyÕƒ1Pc¨¼ZN‹r˜¹üárMçÇ–²ÝBÝ¡‰-3üŠ>ÁÁÓøÒE"ÚSj&I>¢ž…ÂþR#÷„†¥æµùeDZKP@©·ÝRJm‰3ŽAÎ4©°å&`Ùi vc¼VoˆÅNâh}nˆäœÎCIÀM¹AÓŠÂ7 Ý nšÔxº>ÝϘÞB”ˆ¡gŠ=›E?'å¦ÔùYTê|v¯6«Å¤´ˆô œôí‡1ò,IÉ⡨ñߎ¢@ùÌ´YUm© ®ï®®Ã×uqãºNàº/]¨Û¤tâYHqÏ@µ¾¤spÌ=~%âŽ-À”R½í‹(ì6¤>»ìLJ¦]÷ãDÀL wyµw÷=Ú`³½?‚²w[œ¯¸Ú»»m”ýûÙFy<°wïÓ½Í'þY#tžŸû`ŠL{ìü…MÌÌß;5ñÆ«êtµé»L$k½ÅúZ‘1º›ÀÐíO×O÷ÎeÉÚë:kqzô±™uœº5’ÝÄ蓜­Þ­ÑE‘ìL‰’U éaú;ÿƒã÷4 ÝQ0,¯ú>5/{aiŠ­Ø0 Üí»›ÛéÕõ»÷ç¿!Â,©zú´)ÞbNs I†¢zã~.óm¡Ý°'hä"ºí>Ýši☘uàÖ>F$$&ºmÃü¦C$,<#Þj„CyïÁ™µm<ÚJüõçÿ!Å8ŸTÕøŠï’ÙC¥N:K¸»ß¦½õàkú“05¡bRHêà6žèõVÑGç ¥ ] î++Ð —â1ßq.¼EžèxÔé”x$z¸0– ™cA¿¹½¸ù6:½:Øqž,Œ©WÂ×½=Z§ãá›Þ8 üñŽ©.o¸c¯!e¸µ˜u…,)SNóB*èÁ·0ó§Ñ‡ÔcÎС6›Çúr7¬Îè$À¡öü-\ƒó…0bN>ëÄœð?H}1¦·ÌÓhÅ<þ ¾€=÷¹ùR̾Ø[1.Ì_è¤A¸={´ƒdvhzÇËtNQb3[Õ»äá€0Ìø·ÐÆÌ^H…T¦EšÔû•6ºªì‡SÙ8°³î³µaz5]HÒòðï¾9ü‹‡êòð\þ}·‡ÛÇÃ>j9vŸ³M>Pþ?“b‰10„±^ŽX“zû @žzEð~†IµÓbTjÑ}rõ/i\{‰®á¢rE+ÜG|ëò.S©’øÔ}b­,ž ÕQAí‰Y€)¼‹ùg°XÓ ¨žéTÎ8XÖ8V ¼lк÷>°¥–~­V-m‘µeß«.èVc°éó_þW] tõןÿ=…˜G˜Ô/ÅVàrÒ=Ôj|[;9B„‡ á?XÇ&”Ÿ·w ŠÕµT3ô«QŒ¸eÅ^§O{#¡F÷0c ŸÉî7à¿ç»YÜ-H+ÂÊ~¨:T˜ƒ2Ê„Ì º²€Ö>÷€Y[0›<¦H[ûf¸?šÝÿ|ë´LeÁ¨ÍsÏ>º·QJ‘çG‚Ô µ»®öúò·´-/Fâ «;û:ËÂõWF·_«“f.›‹׸CßêÀub}àQ8“«§p}мe\ZWÈ´(!¬3µ†òŠááÎê2OÐß·yWÞåíªÍÃjr„ÚÖ˪N$ý‚P£¦l¡êrj·Ï€“Ä$ðÔ¯~±ý&!~±êï£ÃáŽ,¸ÃÑ4XýPÕ»Uï§6¨Ûú!º!žI½…›)Ìg9>¶&2w¸Tb¹®~˜³Þ¶–üÌí£O ºÇ,Y=gw—Å*jå95Ü„V€W{óvCCI±¶æßÄ[Þe5¼jRÞhË©°™„ƒ³€Û9 èÓ´,œZy ¯ˆî’ºÆ< q¶™­¶-‹ Hùâµe™°)1ŸØ ýüF $;í×¼|0¡KÉáÃSsØ÷‹d‡sˆ¯/u!‘³ŸŽšþ[ÊG¶Ud —®ª,ʶ9’\äy!ueé¢Î·å°juSäù‚b¼ˆcÀ t´~ʇuO?0Þß\õúù9V¢6ÿ„gÊËðàhå<¡Lwì ”TQɆP13œÍ2Nlëp;¡OB–znªèõsFP‹³ìÑUÌÓhý[fLݨo '?Ѐ£šg·Ä»øt7Ã^f˯éÒ¨ÙÉ-ÈÄï…æƒ)0ÅŠëtfVF¸"ƒà®Ê»QÍf? yá¨e:>›ð@¿Nÿø#‡pvxç }ʈ–úßMUÜ7uœÀ²HUUýHš›¶»Ì§¡‰htºR6Tº’‹ç†Ì¾*’:8몿 gÚ)šÎ4—Ü¥VVÚLéÀèjèÚ…ü𗨎RV0;¡¡‰wë²?¸ðrÆpÎ<êx<§Þ˜Û¥#•Ó Q}Âw&²«à–yÇg©­hc¿.ù*ûßàä|Ê¥ ó˜?ŒÒœœ G½lŸ²|øJKŸÏ øœêQ‹Ëym¯- xxý7É#½8K€ó£¥ã¹ò!ÝÝe›y§€Ñ¼·ÉdyV±<ŠBŒÅÿNL³á*YßÍ“á(Dß\Uá*2®ó|5P]u‹¤°ó:Š+£š@8TÁŸUßÙ ‘1Üv¨3YcúÒq­!eb.sž6PÕÂ9{8õ•ƒ úœÏ–ó"›gùzdo*JgËMö»¼œ{–)Z/ [ü. =ñ£0;j"ù×Ùøˆ5ìfŸç¹Há£_å@ÎÞ!¦¸bõma!Χ‘^Ž ÜM Ø5®»U"f„ÎÈÎ"§ÓÔ!?‹µñذ!xé2 b5P|¹ê¦C¦¦c¦üGâ@n{CÏ7¿âªz§öˆè#F;ÃÉŠù|>pJ<7oø8˜W!3àÀlúD‚A¥F>˜–àáNÖÀi|*ÿ¡†Óâ 7œh¤bÖjÄÞ…Ô )Z½'¾f„H“j[¦mþ@']^µvh^Â}¸)-Éön”Þºó_¢÷Ü'‘×%Ì2{l…¿ ‚+&vµú˜I¼ÞÅÝkˆûšÿ ²p ñôÐãÏ5Ó6N?e²¹¡ñ¦´ÛŠ¥©ßRž”§Æ5&F†\ƒÀƒüÕ,/Rï|ä8h†áT-Ð&U{PæÀ&ñ5”Áºv–Ò ·´/ÔÈfÿ KE¼»ðè9ØžNëT/jä¦q“J#(ò¥ãÚ5Hö÷¥R"D¾†µé»;{ ÂèPÁ‹"ŸNß>¾Ý07æ¦ 8ˆª6hš‘¶”—ÈkWÏ0* ©¦”„‚zð;Ái†Ÿ=nñê•Ī&I?6jËʔӷÈ7¯\otɼî˜ýÔV=›5N¡§*+ËBáµäe4Ýc²N!ØitðÞw«é‰}[¬F¾È-±ÀpÐ÷\ˆµÝÀ _¬ï²Ï³®~fŸià©SýX.<Kþvœ‘Äg‡—W²æqÿ1Ý<à Hp~ÉÔ¤LV¶ƒºÑ‘%žÒäÁdj0F :‰4-“zÃom.5º5o?æO›…/˹ÕKþ$ç·L0i-Uv"gÿ:æXȸœ ³Vït(wœÝ΋dï„¶J¿5XýÜÁÜuÎñÍ+/¨gêùV{ä{q¬I¾ÉòèÙ½`mMüžzxky+ògKo.kK à¸[ŽWÙÖÒ_ \ýÖžªÙÖ"®ÌZ„z— öÎÂm$Œ¦Šwä/²-ÓØ‚Œ½Zy­]{ Á”³v` mK™•Û‹®—ôa º³Üzí¥Ø^ˆwÅ D†n\ÆäSGª¤ê5»U”1Q2Û2ëSŠ\HHLƽ3ê`3ƒ0Îlˆñ ´ÆBý€œXIY&»a&Â?iò&H5 r˜9U gJf•Ò«\2ÛQþ‰€ ´·?Œµ¶zߣˀ–IŒ‡iA¹û!Ûð¨~„š6_F.(¬·X§kµ@>féÓ0ˆK¤Ws.}"€ž×‡áFê°÷È‘.âq¯ÞC?wÒ(fࢻcp(•¹×ûò?ÄiT,˜ ˜ Zé&ƒÁ;SÊ‚RQh´þò6ÿ‘nÔŸ„Õ—  h]‡Ãcº(LVǃP;¦Óq¶5˜Ø¼Ø:1И°¦Ï”8}'÷ §ìsð“!‡Rk79?2±i¼ê?õE@šú.¢<ð_·' fcÑ`)6!²>•ëlne^/‡ÎY2[üi›­à~Ôš¹ÕàÀ2NLzOPòá±ó;R¤iL4íl^]vD¡Z“ÑÕ¤’ÓxÙz½õ¸¸¥&wÛmW­$)!,>» ã¨v\ö´Â£± A]©ÅŠý>ÐSù“í! @·’üs»1‹Ý¨ø`ÛMöÎñDýŒô‰>†àL¸ËꧬJítƒÛ$wd“æù,$»¨"Ó”9›/Z:í¨c6æ gÙ¸øµ°0dˆ¯J@ªÝ¼Ã™xxMU &»à«ÖVjë 3¼†G ÅÿÜG©þç¾Bý?×å_»¯×ÙÍý;}S›s‹¢§H XUùBÃi»Ú¤OÏž½Ñ+IÞ s¶v8‰Á‚zÈ:dÓf{n„šâW£SÙu „:I¶BõÆvzc7"Êá[áÑXjÜm‹Ž¸T½ŸåÎúC§5Ý mæ¢ÁË/’ꀹp1úÞS‡ùmÌ»¯Õw³¯Õm‹¯Õ]û=„GPÇ65`GíÕiŽXs L8$èkwÿb…!”H’ÛÍÃ&ÚH4¤žÈžå ”‹%Òfî|&ŽŽdÉ4u¶ÚC,öáQròœ#1a’®8Ëýz‰Y¬˜9昨o§wàȽ¯¸1!¨Fbç—T‘­'FŸÿÃhæ°”‹åúÚ ¥Ûè} K”¶:¾Néb¿b­9hqø]ÄŠ…«áê÷j«Öª©bú‚ªg·+¿¹UÊùœ7Æðö ?æ5â(à*]lW°_N¶)ëÎSq˜°_ž{Ni ÙAc” Ÿ€æË½íl—šÚŠª­!éÀzUæ9áDg@u‰ÉFõ $°æäTçÚ Ü;G±)Á@…0é(.A€GÖÚÖžp¸¨éj Ï ºy|Lšîå·”ÿ‘v~6@ä'²Ù,[w§Ï0þ n^d}v‰˜ÇÀ­›N  {ÀÁ $º„´"u^--%‰ŒhÐ¥"OW«d“æÛªÝ¨öA(ÎöÐhn`Ù@ñ5§ðÒªØâRƒ-ò2qQ¨¿R1CAÜãÙ}f‡ËjÇǽÏÚ–ê¡äu7HƧ©¾»ÛÞWAKt¬Š˜oâ¼µ}Õñy:ÏêÆ½³SÀ·ÎL…oßqÏ´/›“¼sŠ?—që0˨í³Ïõsô4¼žÛ£ÄÁ±ÇHx„Ô³ åjw2Ac¸‘o5-ôŸoÏ¢o~¾¼ý6zÌo±Èî·¤ðš@"ç¬d°Ô…zɃÉv›Í{ÎbŠ¢ûýü¢»òΪ*S½Ep8ÔrÊ™`-}B¦°Xñ]Ô\~Dm½ò&`SÏíkž_ µÚ°ê|–¯&pÑŽrh[ö@Xl¤ž§‹~jh›'3\ÿÖlçØŽ£°Ý2»_ú^SÊÜWU‡ÌÀp!/’Zà"nL*#¸‡Ó¢ó#_„[kDïG#–Øf‰5šÉKY£€y<áå>¥lÕ·mÿÔÎÔÚ†—¾DÓm-*C@uÔ_4öI}Â’ä§=ü)Á"ƒ’~C„1 m Q§û° uú¨Îóø.F+Pçq> 0Øÿp Rë[ôQ ¯_xˆƒáÆÛŒÃRðJ6u@úª²å–|ñf–Z,V; â_r–‚Öª)0ØPT"¶PÔq$WýWB°#ª?%iÜŸÈ Êc:uÒ æú‰‚<&MJcƒÀ ¢æÎ ¼Ýõ»¼®qc«Þæ@²IŸœ{­šds`´ŽÛ‡­Zª¼ÇEª%AK¢$üøèÙë Òò5±»ôñk4úëÏÿ¬pæd8ÃD¸ÕúµS(`?{)/Ç„†SÔԵȊ~^Mjso×C·kÃã9j&ç(èq ¨Ê!C΄𴿱á\©“¹ÚYÂL¯?íU6Ëêè§<¯•(Ì@ê]_YkÚ¼¬Vþwú‰^©Ot“ÎÔRÆá锜4[‚= < 'Ñé ÃzÙ|«×/~EG…†É`yOƒ.$ËC´cËÄfu¯†V÷ ‚"ç…^ºlé¹È."Çü’jQRgŒ/»®r¶úF…o†¾ßx¿¼zVÍTû1&”H˜Ñ_þê\~—ÖÞî…ÔŸæžX‚ 4+ú¶oÔT¾N1P+9Rd¸ƒÒ>úïÎ?Þ^7+øqh?ž@ '°Æ¹©óâ\²ÍF:,K¶© ]¹ Өꇗ«R„±1ÀlÁ í’^ÁDÕßg(˯j2•ù—l Κ)ûg6«y=´5w.“‡ÔVE]$ªV°(K”‰æ<§ÆÖ‹ ]â~øA-«LœÒpMø·O˜y­…9ôóþ >/yuˤJI¦Äs;«ó0ºdhÇùñh`5Š0Vçž2{I*‚N Õ]D‡Xš*XI¿°ag³{ó¨ÒΰªŸU“ZÜ¥=ë)}3ŸÁÚ“î4÷"{3‚¼•=Jtßðó™¿2vÜëÓ{êÌ{±]£ïHõË\T´˜8°æàd·Ô±ÂÍmr¿o¼ý…k, t[‘ $•l«ÔÉhÚM-bPií1'O >C“ÿ8/¢ ½ºáE—^>Ë–ÛzºpeÃJ÷oȈ†ó‹ñŠ–"¨Èµ€ñãQ¥3³ãÐeÉg±G¿©[OÆç®õœ›‘‡Ðb<*殦Ae&÷Új•¸¶Ã—¸¸zZÚÍKþª/¾%sêÊĽ ½ãfÃu=weÏÕ&‚° À£û"¼ŠLjùðþ¥?¯UâÚÆ‹Z%´4æ^ÔYϹkO:Yʷš\jæŽõŒ¦~ÿ÷ëW×—Ëåë«Ê1³l ݽΚ¶¯³„|íü¯Iú9åDbgRåûp‡¯ã­±‡WvN\.§%gòäÆvP'ïݵQfm‡8Ãu|St;z€2³Lóž£qA¶£FÂp²Þÿ“ßM(u®¹“:¼)Ëø>ŒÞÏ(f#ΣÊ<"  Wè‚vâ ÓDÎ)îWò³Ûø‹‘#þbDÓTíEo–÷ÍŒ7"®M¸RaŒ“j®„ȇþ¸-ìoAŸŒé“ñ3ÚÞÆt¶pßg»C$‚¦ÛÄsW" üÊ‘”2ðP‘'µ¾0™uÑ"FDl±Å§®Í2a¾’\ÿòN(¿bs_jévͦIve®úœŽŽ”862ޏ"®™šo빪y j¾ÉŠó¼®¼zjÅúš¦*Á¿på_ð»BßqÊâføyn³¬È;Ý— oåÔµƒO¡ƒ¿[ghöAãÀ¤‰t¡ Ø„É6j|‡î#V*hÝ[w1 ò¦vZv> ºNÖgÆ©}e(n¥eäʖݬ¤}-­mÊÔÿT…A ÊÄÜÁäÍØ£¢¾ÓGû(ì[Â8qÄbA×Ó Äü2ó6—k®*›L''üHõÁÛD‚ÀIlפ~RLfP¡ß'¦Î#†Lž?JŽ©Øvsiüˆ‘!Ðdz(m¶¢%oãò!Ž1Dð±~n}\1Pšb2·{ú>Bëø‡vü¨Ö{~ý–‹PX×sð€öëÇ¥÷<4Õ×<|ûàš÷'Õ_Äé yà÷ëÇO,UÀ£`äG'»é+`·bOgýâãO:¾ƒú’•Ù3à í6SÚ6k!˺ûf !p‰çc!ö-À¬Ò´pD°ùïóå’–„72*Љ²/ïæ V)Ívæôõ°¡¯¾¯Þm¼ZÕM å±{"Ø­bAsÕÛÏBÔL˜½——o4aŸ¦Ž÷AE>¤Çå¤ l÷÷v4“V•=Ëò{ù$…Âàšµê@zÉ1íÍcÊXÅ-UÀ†Í©ÖûºN¢<+²»’¾M=Û¡NÆ#–RÃüDÅ[ìæTðéjß# Œ*"ó†qšÃ†îÝZîU”ÍÕ .‡~xÇ„ðwâXŠ89”¢Mb޳]Ú¢aO¡9~$´G1¶ E: F#;ZATÁ8ÉÏŽ¿Í­dx‘ÉœD`œ#KÒBYÍ`1Ý}Š€¦ÉÞÞx«¼Ódʘñ_uh@Þ‘ëÈq{Í*à†T¤A$B82h?Ì!£AÉ*P9;[ºPóìYíDÀñÇ',ÅC8•ÉnZ‚ ÁùpŸ®—¸Ë*ìüTt(áÛ§¸_uÛè¯Ñ‚²dC>† ß`Þ KƒDˆ†Ê7)Ž( wS„g\ÖÀ½¥Tp»ÈÒ¿LŽšsÑ3.j“E].AY~J”—qjul^o>¹vˆî#zHâtÕ63tPŸ¤©éw s  à@ÜR`}2eI>6ÔŸ¸ *¦ú¡Þ-@ÐgRqá·ï1-y?²Ëã ûÙØ¼„[øçÙæ«‹“nÍ‹ëÝþ–¶1p l*Ò!Ý÷Bï p¯ß¨ß…áuŸžÅV½"à°HGüÁ=î4]%)gi!Ëêk÷­ªJ‹/3t²òIò ý"ípª¼wJº–¼IôU ÔÖ€ &R‡K:WêÔ:NwÃ0kƒyÖ†aHÒ áÞÉ0ÒÆÄqw{ƒ*÷c¼y½A;ÞXëÓjsºj³Ó•º;Iäº$Žº½A‚ÝÃáŽ~AX¨/É®’ùS^†÷’Ìå=œæTžŽ‰¥}ëv\’%Jq©¢à‘¬ £eÀ@ɰh°ÞLÊ`íWŸÖI®¦ˆÔ8s—kšÎøJ×r aHš½‡ê¾o ÆïÖŒl#$ÀS\3îpOœvo¡ 1ÆÊ_:8© ¾€\ÿ³<Íí;0® ©Û¿¿”3,Ä—ÛÙÕz#âà[˜÷¯Ù ƒy%ÌDZÎù|o°¶…¼T´<.¬Vù?…“././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/requirements.txt0000644000000000000000000000111000000000000021735 0ustar00rootroot00000000000000# pip packages required to build docsite # these requirements are as loosely defined as possible # if you want known good versions of these dependencies # use known_good_reqs.txt instead antsibull >= 0.38.2 docutils == 0.16 # pin for now until the problem with unordered lists is fixed # see https://github.com/readthedocs/sphinx_rtd_theme/issues/1115jinja2==3.0.1 jinja2 Pygments >= 2.4.0 PyYAML rstcheck sphinx sphinx-notfound-page >= 0.6 sphinx-intl sphinx-ansible-theme >= 0.7.0 resolvelib straight.plugin # Needed for hacking/build-ansible.py which is the backend build script ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.934559 ansible-core-2.12.0/docs/docsite/rst/0000755000000000000000000000000000000000000017270 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/rst/2.10_index.rst0000644000000000000000000001004000000000000021564 0ustar00rootroot00000000000000.. _ansible_documentation: Ansible Documentation ===================== About Ansible ````````````` Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates. Ansible's main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with other transports and pull modes as alternatives), and a language that is designed around auditability by humans--even those not familiar with the program. We believe simplicity is relevant to all sizes of environments, so we design for busy users of all types: developers, sysadmins, release engineers, IT managers, and everyone in between. Ansible is appropriate for managing all environments, from small setups with a handful of instances to enterprise environments with many thousands of instances. You can learn more at `AnsibleFest `_, the annual event for all Ansible contributors, users, and customers hosted by Red Hat. AnsibleFest is the place to connect with others, learn new skills, and find a new friend to automate with. Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled. Because OpenSSH is one of the most peer-reviewed open source components, security exposure is greatly reduced. Ansible is decentralized--it relies on your existing OS credentials to control access to remote machines. If needed, Ansible can easily connect with Kerberos, LDAP, and other centralized authentication management systems. This documentation covers the version of Ansible noted in the upper left corner of this page. We maintain multiple versions of Ansible and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you're using. For recent features, we note the version of Ansible where the feature was added. Ansible releases a new major release approximately twice a year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. Contributors develop and change modules and plugins, hosted in collections since version 2.10, much more quickly. .. toctree:: :maxdepth: 2 :caption: Installation, Upgrade & Configuration installation_guide/index porting_guides/porting_guides .. toctree:: :maxdepth: 2 :caption: Using Ansible user_guide/index .. toctree:: :maxdepth: 2 :caption: Contributing to Ansible community/index .. toctree:: :maxdepth: 2 :caption: Extending Ansible dev_guide/index .. toctree:: :glob: :maxdepth: 1 :caption: Common Ansible Scenarios scenario_guides/cloud_guides scenario_guides/network_guides scenario_guides/virt_guides .. toctree:: :maxdepth: 2 :caption: Network Automation network/getting_started/index network/user_guide/index network/dev_guide/index .. toctree:: :maxdepth: 2 :caption: Ansible Galaxy galaxy/user_guide.rst galaxy/dev_guide.rst .. toctree:: :maxdepth: 1 :caption: Reference & Appendices collections/index collections/all_plugins reference_appendices/playbooks_keywords reference_appendices/common_return_values reference_appendices/config reference_appendices/general_precedence reference_appendices/YAMLSyntax reference_appendices/python_3_support reference_appendices/interpreter_discovery reference_appendices/release_and_maintenance reference_appendices/test_strategies dev_guide/testing/sanity/index reference_appendices/faq reference_appendices/glossary reference_appendices/module_utils reference_appendices/special_variables reference_appendices/tower reference_appendices/automationhub reference_appendices/logging .. toctree:: :maxdepth: 2 :caption: Release Notes .. toctree:: :maxdepth: 2 :caption: Roadmaps roadmap/index.rst ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/rst/404.rst0000644000000000000000000000056600000000000020340 0ustar00rootroot00000000000000:orphan: ***** Oops! ***** The version of the Ansible documentation you were looking at doesn't contain that page. .. image:: images/cow.png :alt: Cowsay 404 Use the back button to return to the version you were browsing, or use the navigation at left to explore our latest release. Once you're on a non-404 page, you can use the version-changer to select a version. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/rst/ansible_index.rst0000644000000000000000000001013400000000000022625 0ustar00rootroot00000000000000.. _ansible_documentation: .. This is the index file for Ansible the package. It gets symlinked to index.rst by the Makefile Ansible Documentation ===================== About Ansible ````````````` Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates. Ansible's main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with other transports and pull modes as alternatives), and a language that is designed around auditability by humans--even those not familiar with the program. We believe simplicity is relevant to all sizes of environments, so we design for busy users of all types: developers, sysadmins, release engineers, IT managers, and everyone in between. Ansible is appropriate for managing all environments, from small setups with a handful of instances to enterprise environments with many thousands of instances. You can learn more at `AnsibleFest `_, the annual event for all Ansible contributors, users, and customers hosted by Red Hat. AnsibleFest is the place to connect with others, learn new skills, and find a new friend to automate with. Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled. Because OpenSSH is one of the most peer-reviewed open source components, security exposure is greatly reduced. Ansible is decentralized--it relies on your existing OS credentials to control access to remote machines. If needed, Ansible can easily connect with Kerberos, LDAP, and other centralized authentication management systems. This documentation covers the version of Ansible noted in the upper left corner of this page. We maintain multiple versions of Ansible and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you're using. For recent features, we note the version of Ansible where the feature was added. Ansible releases a new major release approximately twice a year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. Contributors develop and change modules and plugins, hosted in collections since version 2.10, much more quickly. .. toctree:: :maxdepth: 2 :caption: Installation, Upgrade & Configuration installation_guide/index porting_guides/porting_guides .. toctree:: :maxdepth: 2 :caption: Using Ansible user_guide/index .. toctree:: :maxdepth: 2 :caption: Contributing to Ansible community/index .. toctree:: :maxdepth: 2 :caption: Extending Ansible dev_guide/index .. toctree:: :glob: :maxdepth: 1 :caption: Common Ansible Scenarios scenario_guides/cloud_guides scenario_guides/network_guides scenario_guides/virt_guides .. toctree:: :maxdepth: 2 :caption: Network Automation network/getting_started/index network/user_guide/index network/dev_guide/index .. toctree:: :maxdepth: 2 :caption: Ansible Galaxy galaxy/user_guide.rst galaxy/dev_guide.rst .. toctree:: :maxdepth: 1 :caption: Reference & Appendices collections/index collections/all_plugins reference_appendices/playbooks_keywords reference_appendices/common_return_values reference_appendices/config reference_appendices/general_precedence reference_appendices/YAMLSyntax reference_appendices/python_3_support reference_appendices/interpreter_discovery reference_appendices/release_and_maintenance reference_appendices/test_strategies dev_guide/testing/sanity/index reference_appendices/faq reference_appendices/glossary reference_appendices/module_utils reference_appendices/special_variables reference_appendices/tower reference_appendices/automationhub reference_appendices/logging .. toctree:: :maxdepth: 2 :caption: Roadmaps roadmap/ansible_roadmap_index.rst ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.935559 ansible-core-2.12.0/docs/docsite/rst/api/0000755000000000000000000000000000000000000020041 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/rst/api/index.rst0000644000000000000000000000376700000000000021717 0ustar00rootroot00000000000000:orphan: ************************* Ansible API Documentation ************************* The Ansible API is under construction. These stub references for attributes, classes, functions, methods, and modules will be documented in future. The :ref:`module utilities ` included in ``ansible.module_utils.basic`` and ``AnsibleModule`` are documented under Reference & Appendices. .. contents:: :local: Attributes ========== .. py:attribute:: AnsibleModule.params The parameters accepted by the module. .. py:attribute:: ansible.module_utils.basic.ANSIBLE_VERSION .. py:attribute:: ansible.module_utils.basic.SELINUX_SPECIAL_FS Deprecated in favor of ansibleModule._selinux_special_fs. .. py:attribute:: AnsibleModule.ansible_version .. py:attribute:: AnsibleModule._debug .. py:attribute:: AnsibleModule._diff .. py:attribute:: AnsibleModule.no_log .. py:attribute:: AnsibleModule._selinux_special_fs (formerly ansible.module_utils.basic.SELINUX_SPECIAL_FS) .. py:attribute:: AnsibleModule._syslog_facility .. py:attribute:: self.playbook .. py:attribute:: self.play .. py:attribute:: self.task .. py:attribute:: sys.path Classes ======= .. py:class:: ``ansible.module_utils.basic.AnsibleModule`` :noindex: The basic utilities for AnsibleModule. .. py:class:: AnsibleModule The main class for an Ansible module. Functions ========= .. py:function:: ansible.module_utils.basic._load_params() Load parameters. Methods ======= .. py:method:: AnsibleModule.log() Logs the output of Ansible. .. py:method:: AnsibleModule.debug() Debugs Ansible. .. py:method:: Ansible.get_bin_path() Retrieves the path for executables. .. py:method:: AnsibleModule.run_command() Runs a command within an Ansible module. .. py:method:: module.fail_json() Exits and returns a failure. .. py:method:: module.exit_json() Exits and returns output. Modules ======= .. py:module:: ansible.module_utils .. py:module:: ansible.module_utils.basic :noindex: .. py:module:: ansible.module_utils.url ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.935559 ansible-core-2.12.0/docs/docsite/rst/collections/0000755000000000000000000000000000000000000021606 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4455562 ansible-core-2.12.0/docs/docsite/rst/collections/all_plugins.rst0000644000000000000000000000026400000000000024653 0ustar00rootroot00000000000000.. _all_modules_and_plugins: Indexes of all modules and plugins ---------------------------------- .. toctree:: :maxdepth: 1 :caption: Plugin indexes :glob: index_* ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.936559 ansible-core-2.12.0/docs/docsite/rst/community/0000755000000000000000000000000000000000000021314 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/code_of_conduct.rst0000644000000000000000000001702600000000000025171 0ustar00rootroot00000000000000.. _code_of_conduct: ************************* Community Code of Conduct ************************* .. contents:: Topics Every community can be strengthened by a diverse variety of viewpoints, insights, opinions, skillsets, and skill levels. However, with diversity comes the potential for disagreement and miscommunication. The purpose of this Code of Conduct is to ensure that disagreements and differences of opinion are conducted respectfully and on their own merits, without personal attacks or other behavior that might create an unsafe or unwelcoming environment. These policies are not designed to be a comprehensive set of Things You Cannot Do. We ask that you treat your fellow community members with respect and courtesy, and in general, Don't Be A Jerk. This Code of Conduct is meant to be followed in spirit as much as in letter and is not exhaustive. All Ansible events and participants therein are governed by this Code of Conduct and anti-harassment policy. We expect organizers to enforce these guidelines throughout all events, and we expect attendees, speakers, sponsors, and volunteers to help ensure a safe environment for our whole community. Specifically, this Code of Conduct covers participation in all Ansible-related forums and mailing lists, code and documentation contributions, public chat (Matrix, IRC), private correspondence, and public meetings. Ansible community members are... **Considerate** Contributions of every kind have far-ranging consequences. Just as your work depends on the work of others, decisions you make surrounding your contributions to the Ansible community will affect your fellow community members. You are strongly encouraged to take those consequences into account while making decisions. **Patient** Asynchronous communication can come with its own frustrations, even in the most responsive of communities. Please remember that our community is largely built on volunteered time, and that questions, contributions, and requests for support may take some time to receive a response. Repeated "bumps" or "reminders" in rapid succession are not good displays of patience. Additionally, it is considered poor manners to ping a specific person with general questions. Pose your question to the community as a whole, and wait patiently for a response. **Respectful** Every community inevitably has disagreements, but remember that it is possible to disagree respectfully and courteously. Disagreements are never an excuse for rudeness, hostility, threatening behavior, abuse (verbal or physical), or personal attacks. **Kind** Everyone should feel welcome in the Ansible community, regardless of their background. Please be courteous, respectful and polite to fellow community members. Do not make or post offensive comments related to skill level, gender, gender identity or expression, sexual orientation, disability, physical appearance, body size, race, or religion. Sexualized images or imagery, real or implied violence, intimidation, oppression, stalking, sustained disruption of activities, publishing the personal information of others without explicit permission to do so, unwanted physical contact, and unwelcome sexual attention are all strictly prohibited. Additionally, you are encouraged not to make assumptions about the background or identity of your fellow community members. **Inquisitive** The only stupid question is the one that does not get asked. We encourage our users to ask early and ask often. Rather than asking whether you can ask a question (the answer is always yes!), instead, simply ask your question. You are encouraged to provide as many specifics as possible. Code snippets in the form of Gists or other paste site links are almost always needed in order to get the most helpful answers. Refrain from pasting multiple lines of code directly into the chat channels - instead use gist.github.com or another paste site to provide code snippets. **Helpful** The Ansible community is committed to being a welcoming environment for all users, regardless of skill level. We were all beginners once upon a time, and our community cannot grow without an environment where new users feel safe and comfortable asking questions. It can become frustrating to answer the same questions repeatedly; however, community members are expected to remain courteous and helpful to all users equally, regardless of skill or knowledge level. Avoid providing responses that prioritize snideness and snark over useful information. At the same time, everyone is expected to read the provided documentation thoroughly. We are happy to answer questions, provide strategic guidance, and suggest effective workflows, but we are not here to do your job for you. Anti-harassment policy ====================== Harassment includes (but is not limited to) all of the following behaviors: - Offensive comments related to gender (including gender expression and identity), age, sexual orientation, disability, physical appearance, body size, race, and religion - Derogatory terminology including words commonly known to be slurs - Posting sexualized images or imagery in public spaces - Deliberate intimidation - Stalking - Posting others' personal information without explicit permission - Sustained disruption of talks or other events - Inappropriate physical contact - Unwelcome sexual attention Participants asked to stop any harassing behavior are expected to comply immediately. Sponsors are also subject to the anti-harassment policy. In particular, sponsors should not use sexualized images, activities, or other material. Meetup organizing staff and other volunteer organizers should not use sexualized attire or otherwise create a sexualized environment at community events. In addition to the behaviors outlined above, continuing to behave a certain way after you have been asked to stop also constitutes harassment, even if that behavior is not specifically outlined in this policy. It is considerate and respectful to stop doing something after you have been asked to stop, and all community members are expected to comply with such requests immediately. Policy violations ================= Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting `codeofconduct@ansible.com `_, to anyone with administrative power in community chat (Admins or Moderators on Matrix, ops on IRC), or to the local organizers of an event. Meetup organizers are encouraged to prominently display points of contact for reporting unacceptable behavior at local events. If a participant engages in harassing behavior, the meetup organizers may take any action they deem appropriate. These actions may include but are not limited to warning the offender, expelling the offender from the event, and barring the offender from future community events. Organizers will be happy to help participants contact security or local law enforcement, provide escorts to an alternate location, or otherwise assist those experiencing harassment to feel safe for the duration of the meetup. We value the safety and well-being of our community members and want everyone to feel welcome at our events, both online and offline. We expect all participants, organizers, speakers, and attendees to follow these policies at all of our event venues and event-related social events. The Ansible Community Code of Conduct is licensed under the Creative Commons Attribution-Share Alike 3.0 license. Our Code of Conduct was adapted from Codes of Conduct of other open source projects, including: * Contributor Covenant * Elastic * The Fedora Project * OpenStack * Puppet Labs * Ubuntu ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/committer_guidelines.rst0000644000000000000000000001524300000000000026266 0ustar00rootroot00000000000000.. _community_committer_guidelines: ********************* Committers Guidelines ********************* These are the guidelines for people with commit privileges on the repositories in the ansible and ansible-collections GitHub organizations. Committers of `Ansible-core `_ are necessarily Red Hat employees acting as members of the Ansible Core team. Committers of `Ansible collections `_ are members of the community or Ansible Engineering. Please read the guidelines before you commit. These guidelines apply to everyone. At the same time, this is NOT a process document. So just use good judgment. You have been given commit access because we trust your judgment. That said, use the trust wisely. If you abuse the trust and break components and builds, and so on, the trust level falls and you may be asked not to commit or you may lose your commit privileges. Features, high-level design, and roadmap of ansible-core ======================================================== As a core team member, you are an integral part of the team that develops the :ref:`roadmap `. Please be engaged, and push for the features and fixes that you want to see. Also keep in mind that Red Hat, as a company, will commit to certain features, fixes, APIs, and so on, for various releases. Red Hat, the company, and the Ansible team must get these changes completed and released as scheduled. Obligations to users, the community, and customers must come first. Because of these commitments, a feature you want to develop yourself may not get into a release if it affects a lot of other parts within Ansible. Any other new features and changes to high level design should go through the proposal process (TBD), to ensure the community and core team have had a chance to review the idea and approve it. The core team has sole responsibility for merging new features based on proposals to `Ansible-core `_. Features, high-level design, and roadmap of Ansible collections =============================================================== Collections maintainers define features, high-level design, and roadmap of the collections themselves and are responsible for merging new features to `Ansible collections `_ based on proposals discussed with their communities. Our workflow on GitHub ====================== As a committer, you may already know this, but our workflow forms a lot of our team policies. Please ensure you are aware of the following workflow steps: * Fork the repository upon which you want to do some work to your own personal repository * Work on the specific branch upon which you need to commit * Create a pull request back to the upstream repository and tag the people you would like to review; assign someone as the primary "owner" of your pull request * Adjust code as necessary based on the comments provided * Ask someone from the repository committers to do a final review and merge Addendum to workflow for committers: ------------------------------------ The Core Team is aware that this can be a difficult process at times. Sometimes, the team breaks the rules by making direct commits or merging their own pull requests. This section is a set of guidelines. If you are changing a comma in documentation, or making a very minor change, you can use your best judgement. This is another trust thing. The process is critical for any major change, but for little things or getting something done quickly, use your best judgement and make sure people on the team are aware of your work. Roles on Core ============= * Core committers: Fine to do pull requests for most things, but we should have a timebox. Hanging pull requests may merge on the judgement of these developers. * :ref:`Module maintainers `: Module maintainers own specific modules and have indirect commit access through the current module pull request mechanisms. * :ref:`Collection maintainers `: Collection maintainers own specific collections and have commit access to them. Each collection can set its own rules for contributions. General rules ============= Individuals with direct commit access are entrusted with powers that allow them to do a broad variety of things--probably more than we can write down. Rather than rules, treat these as general *guidelines*, individuals with this power are expected to use their best judgement. * Do NOT - Commit directly. - Merge your own pull requests. Someone else should have a chance to review and approve the pull request merge. If you are a Core Committer, you have a small amount of leeway here for very minor changes. - Forget about alternate environments. Consider the alternatives--yes, people have bad environments, but they are the ones who need us the most. - Drag your community team members down. Discuss the technical merits of any pull requests you review. Avoid negativity and personal comments. For more guidance on being a good community member, read our :ref:`code_of_conduct`. - Forget about the maintenance burden. High-maintenance features may not be worth adding. - Break playbooks. Always keep backwards compatibility in mind. - Forget to keep it simple. Complexity breeds all kinds of problems. * Do - Squash, avoid merges whenever possible, use GitHub's squash commits or cherry pick if needed (bisect thanks you). - Be active. Committers who have no activity on the project (through merges, triage, commits, and so on) will have their permissions suspended. - Consider backwards compatibility (goes back to "do not break existing playbooks"). - Write :ref:`tests` and be sure that other's pull requests you are reviewing are covered well. Pull requests with tests are looked at with more priority than pull requests without tests that should have them included. While not all changes require tests, be sure to add them for new features, bug fixes, and functionality changes. - Discuss with other committers, specially when you are unsure of something. - Document! If your pull request is a new feature or a change to behavior, make sure you have updated all associated documentation or have notified the right people to do so. It also helps to add the version of ``ansible-core`` or ``collection`` against which this documentation is compatible (to avoid confusion between stable and devel docs, for backwards compatibility, and so on). - Consider scope, sometimes a fix can be generalized. - Keep it simple, then things are maintainable, debuggable, and intelligible. Committers are expected to continue to follow the same community and contribution guidelines followed by the rest of the Ansible community. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/communication.rst0000644000000000000000000002735500000000000024727 0ustar00rootroot00000000000000.. _communication: ************* Communicating ************* .. contents:: :local: Code of Conduct =============== All communication and interactions in the Ansible Community are governed by our :ref:`code_of_conduct`. Please read and understand it! Asking questions over email =========================== If you want to keep up with Ansible news, need help, or have a question, you can use one of the Ansible mailing lists. Each list covers a particular topic. Read the descriptions here to find the best list for your question. Your first post to the mailing list will be moderated (to reduce spam), so please allow up to a day or so for your first post to appear. * `Ansible Announce list `_ is a read-only list that shares information about new releases of Ansible, and also rare infrequent event information, such as announcements about an upcoming AnsibleFest, which is our official conference series. Worth subscribing to! * `Ansible AWX List `_ is for `Ansible AWX `_ * `Ansible Development List `_ is for questions about developing Ansible modules (mostly in Python), fixing bugs in the Ansible core code, asking about prospective feature design, or discussions about extending Ansible or features in progress. * `Ansible Lockdown List `_ is for all things related to Ansible Lockdown projects, including DISA STIG automation and CIS Benchmarks. * `Ansible Outreach List `_ help with promoting Ansible and `Ansible Meetups `_ * `Ansible Project List `_ is for sharing Ansible tips, answering questions about playbooks and roles, and general user discussion. * `Molecule Discussions `_ is designed to aid with the development and testing of Ansible roles with Molecule. The Ansible mailing lists are hosted on Google, but you do not need a Google account to subscribe. To subscribe to a group from a non-Google account, send an email to the subscription address requesting the subscription. For example: ``ansible-devel+subscribe@googlegroups.com``. .. _communication_irc: Real-time chat ============== For real-time interactions, conversations in the Ansible community happen over two chat protocols: Matrix and IRC. We maintain a bridge between Matrix and IRC, so you can choose whichever protocol you prefer. All channels exist in both places. Join a channel any time to ask questions, participate in a Working Group meeting, or just say hello. Ansible community on Matrix --------------------------- To join the community using Matrix, you need two things: * a Matrix account (from `Matrix.org `_ or any other Matrix homeserver) * a `Matrix client `_ (we recommend `Element Webchat `_) The Ansible community maintains its own Matrix homeserver at ``ansible.im``, however public registration is currently unavailable. Matrix chat supports: * persistence (when you log on, you see all messages since you last logged off) * edits (so you can fix your typos) * replies to individual users * reactions/emojis * bridging to IRC * no line limits * images The room links in the list below will take you directly to the relevant rooms. For more information, see the community-hosted `Matrix FAQ `_. Ansible community on IRC ------------------------ The Ansible community maintains several IRC channels on `irc.libera.chat `_. To join the community using IRC, you need one thing: * an IRC client IRC chat supports: * no persistence (you only see messages when you are logged on, unless you add a bouncer) * simple text interface * bridging from Matrix Our IRC channels may require you to register your IRC nickname. If you receive an error when you connect or when posting a message, see `libera.chat's Nickname Registration guide `_ for instructions. To find all ``ansible`` specific channels on the libera.chat network, use the following command in your IRC client: .. code-block:: text /msg alis LIST #ansible* -min 5 as described in the `libera.chat docs `_. General channels ---------------- The clickable links will take you directly to the relevant Matrix room in your browser; room/channel information is also given for use in other clients: - `General usage and support questions `_ - ``Matrix: #users:ansible.im | IRC: #ansible`` - `Discussions on developer topics and code related to features or bugs `_ - ``Matrix: #devel:ansible.im | IRC: #ansible-devel`` - `Discussions on community and collections related topics `_ - ``Matrix: #community:ansible.im | IRC: #ansible-community`` - `For public community meetings `_ - ``Matrix: #meeting:ansible.im | IRC: #ansible-meeting`` - We will generally announce these on one or more of the above mailing lists. See the `meeting schedule and agenda page `_ .. _working_group_list: Working groups -------------- Many of our community `Working Groups `_ meet in chat. If you want to get involved in a working group, join the Matrix room or IRC channel where it meets or comment on the agenda. - `Amazon (AWS) Working Group `_ - Matrix: `#aws:ansible.im `_ | IRC: ``#ansible-aws`` - `Ansible Lockdown Working Group `_ (`Security playbooks/roles `_) - Matrix: `#lockdown:ansible.im `_ | IRC: ``#ansible-lockdown`` - `AWX Working Group `_ - Matrix: `#awx:ansible.im `_ | IRC: ``#ansible-awx`` - `Azure Working Group `_ - Matrix: `#azure:ansible.im `_ | IRC: ``#ansible-azure`` - `Community Working Group `_ (including Meetups) - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community`` - `Container Working Group `_ - Matrix: `#container:ansible.im `_ | IRC: ``#ansible-container`` - `Contributor Experience Working Group `_ - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community`` - `DigitalOcean Working Group `_ - Matrix: `#digitalocean:ansible.im `_ | IRC: ``#ansible-digitalocean`` - `Diversity Working Group `_ - Matrix: `#diversity:ansible.im `_ | IRC: ``#ansible-diversity`` - `Docker Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel`` - `Documentation Working Group `_ - Matrix: `#docs:ansible.im `_ | IRC: ``#ansible-docs`` - `Galaxy Working Group `_ - Matrix: `#galaxy:ansible.im `_ | IRC: ``#ansible-galaxy`` - `JBoss Working Group `_ - Matrix: `#jboss:ansible.im `_ | IRC: ``#ansible-jboss`` - `Kubernetes Working Group `_ - Matrix: `#kubernetes:ansible.im `_ | IRC: ``#ansible-kubernetes`` - `Linode Working Group `_ - Matrix: `#linode:ansible.im `_ | IRC: ``#ansible-linode`` - `Molecule Working Group `_ (`testing platform for Ansible playbooks and roles `_) - Matrix: `#molecule:ansible.im `_ | IRC: ``#ansible-molecule`` - `Network Working Group `_ - Matrix: `#network:ansible.im `_ | IRC: ``#ansible-network`` - `Remote Management Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel`` - `Testing Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel`` - `VMware Working Group `_ - Matrix: `#vmware:ansible.im `_ | IRC: ``#ansible-vmware`` - `Windows Working Group `_ - Matrix: `#windows:ansible.im `_ | IRC: ``#ansible-windows`` Want to `form a new Working Group `_? Regional and Language-specific channels --------------------------------------- - Comunidad Ansible en español - Matrix: `#espanol:ansible.im `_ | IRC: ``#ansible-es`` - Communauté française d'Ansible - Matrix: `#francais:ansible.im `_ | IRC: ``#ansible-fr`` - Communauté suisse d'Ansible - Matrix: `#suisse:ansible.im `_ | IRC: ``#ansible-zh`` - European Ansible Community - Matrix: `#europe:ansible.im `_ | IRC: ``#ansible-eu`` Meetings on chat ---------------- The Ansible community holds regular meetings on various topics on Matrix/IRC, and anyone who is interested is invited to participate. For more information about Ansible meetings, consult the `meeting schedule and agenda page `_. Ansible Automation Platform support questions ============================================= Red Hat Ansible `Automation Platform `_ is a subscription that contains support, certified content, and tooling for Ansible including content management, a controller, UI and REST API. If you have a question about Ansible Automation Platform, visit `Red Hat support `_ rather than using a chat channel or the general project mailing list. The Bullhorn ============ **The Bullhorn** is our newsletter for the Ansible developer community. If you have any questions or content you would like to share, please reach out to us at the-bullhorn@redhat.com, or directly `contribute/suggest content `_ for upcoming issues. Read past issues `here `_. `Subscribe `_ to receive it. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/community.rst0000644000000000000000000000027700000000000024100 0ustar00rootroot00000000000000:orphan: Community Information & Contributing ```````````````````````````````````` This page is deprecated. Please see the updated :ref:`Ansible Community Guide `. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/contributing_maintained_collections.rst0000644000000000000000000003537000000000000031354 0ustar00rootroot00000000000000 .. _contributing_maintained_collections: *********************************************** Contributing to Ansible-maintained Collections *********************************************** The Ansible team welcomes community contributions to the collections maintained by Red Hat Ansible Engineering. This section describes how you can open issues and create PRs with the required testing before your PR can be merged. .. contents:: :local: Ansible-maintained collections ================================= The following table shows: * **Ansible-maintained collection** - Click the link to the collection on Galaxy, then click the ``repo`` button in Galaxy to find the GitHub repository for this collection. * **Related community collection** - Collection that holds community-created content (modules, roles, and so on) that may also be of interest to a user of the Ansible-maintained collection. You can, for example, add new modules to the community collection as a technical preview before the content is moved to the Ansible-maintained collection. * **Sponsor** - Working group that manages the collections. You can join the meetings to discuss important proposed changes and enhancements to the collections. * **Test requirements** - Testing required for any new or changed content for the Ansible-maintained collection. * **Developer details** - Describes whether the Ansible-maintained collection accepts direct community issues and PRs for existing collection content, as well as more specific developer guidelines based on the collection type. .. _ansible-collection-table: .. raw:: html
    Collection details Test requirements: Ansible collections Developer details
    Ansible collection Related community collection Sponsor Sanity Unit Integration CI Platform Open to PRs* Guidelines
    amazon.aws community.aws AWS ✓** ** ✓ Zuul ✓ AWS guide
    ansible.netcommon*** community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    ansible.posix community.general Linux ✓ Zuul ✓ Developer guide
    ansible.windows community.windows Windows ✓ ✓**** ✓ Azure Pipelines and Zuul ✓ Windows guide
    arista.eos community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    cisco.asa community.asa Security ✓ ✓ ✓ Zuul ✓ Developer guide
    cisco.ios community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    cisco.iosxr community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    cisco.nxos community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    ibm.qradar community.qradar Security ✓ ✓ Zuul ✓ Developer guide
    junipernetworks.junos community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    kubernetes.core kubernetes.core Kubernetes ✓ ✓ ✓ GitHub Actions ✓ Kubernetes guide
    redhat.openshift community.okd Kubernetes ✓ ✓ ✓ GitHub Actions ✓ Kubernetes guide
    openvswitch.openvswitch community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    splunk.es community.es Security ✓ ✓ Zuul ✓ Developer guide
    vyos.vyos community.network Network ✓ ✓ ✓ Zuul ✓ Network guide
    vmware.vmware_rest vmware.vmware_rest VMware ✓ ✓ ✓ Zuul ✓ VMware REST guide
    .. note:: \* A ✓ under **Open to PRs** means the collection welcomes GitHub issues and PRs for any changes to existing collection content (plugins, roles, and so on). \*\* Integration tests are required and unit tests are welcomed but not required for the AWS collections. An exception to this is made in cases where integration tests are logistically not feasible due to external requirements. An example of this is AWS Direct Connect, as this service can not be functionally tested without the establishment of network peering connections. Unit tests are therefore required for modules that interact with AWS Direct Connect. Exceptions to ``amazon.aws`` must be approved by Red Hat, and exceptions to ``community.aws`` must be approved by the AWS community. \*\*\* ``ansible.netcommon`` contains all foundational components for enabling many network and security :ref:`platform ` collections. It contains all connection and filter plugins required, and installs as a dependency when you install the platform collection. \*\*\*\* Unit tests for Windows PowerShell modules are an exception to testing, but unit tests are valid and required for the remainder of the collection, including Ansible-side plugins. .. _which_collection: Deciding where your contribution belongs ========================================= We welcome contributions to Ansible-maintained collections. Because these collections are part of a downstream supported Red Hat product, the criteria for contribution, testing, and release may be higher than other community collections. The related community collections (such as ``community.general`` and ``community.network``) have less-stringent requirements and are a great place for new functionality that may become part of the Ansible-maintained collection in a future release. The following scenarios use the ``arista.eos`` to help explain when to contribute to the Ansible-maintained collection, and when to propose your change or idea to the related community collection: 1. You want to fix a problem in the ``arista.eos`` Ansible-maintained collection. Create the PR directly in the `arista.eos collection GitHub repository `_. Apply all the :ref:`merge requirements `. 2. You want to add a new Ansible module for Arista. Your options are one of the following: * Propose a new module in the ``arista.eos`` collection (requires approval from Arista and Red Hat). * Propose a new collection in the ``arista`` namespace (requires approval from Arista and Red Hat). * Propose a new module in the ``community.network`` collection (requires network community approval). * Place your new module in a collection in your own namespace (no approvals required). Most new content should go into either a related community collection or your own collection first so that is well established in the community before you can propose adding it to the ``arista`` namespace, where inclusion and maintenance criteria are much higher. .. _ansible_collection_merge_requirements: Requirements to merge your PR ============================== Your PR must meet the following requirements before it can merge into an Ansible-maintained collection: #. The PR is in the intended scope of the collection. Communicate with the appropriate Ansible sponsor listed in the :ref:`Ansible-maintained collection table ` for help. #. For network and security domains, the PR follows the :ref:`resource module development principles `. #. Passes :ref:`sanity tests and tox `. #. Passes unit, and integration tests, as listed in the :ref:`Ansible-maintained collection table ` and described in :ref:`testing_resource_modules`. #. Follows Ansible guidelines. See :ref:`developing_modules` and :ref:`developing_collections`. #. Addresses all review comments. #. Includes an appropriate :ref:`changelog `. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/contributor_license_agreement.rst0000644000000000000000000000060700000000000030154 0ustar00rootroot00000000000000.. _contributor_license_agreement: ****************************** Contributors License Agreement ****************************** By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.446556 ansible-core-2.12.0/docs/docsite/rst/community/development_process.rst0000644000000000000000000005170000000000000026131 0ustar00rootroot00000000000000.. _community_development_process: ***************************** The Ansible Development Cycle ***************************** Ansible developers (including community contributors) add new features, fix bugs, and update code in many different repositories. The `ansible/ansible repository `_ contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core``. Other repositories contain plugins and modules that enable Ansible to execute specific tasks, like adding a user to a particular database or configuring a particular network device. These repositories contain the source code for collections. Development on ``ansible-core`` occurs on two levels. At the macro level, the ``ansible-core`` developers and maintainers plan releases and track progress with roadmaps and projects. At the micro level, each PR has its own lifecycle. Development on collections also occurs at the macro and micro levels. Each collection has its own macro development cycle. For more information on the collections development cycle, see :ref:`contributing_maintained_collections`. The micro-level lifecycle of a PR is similar in collections and in ``ansible-core``. .. contents:: :local: Macro development: ``ansible-core`` roadmaps, releases, and projects ===================================================================== If you want to follow the conversation about what features will be added to ``ansible-core`` for upcoming releases and what bugs are being fixed, you can watch these resources: * the :ref:`roadmaps` * the :ref:`Ansible Release Schedule ` * various GitHub `projects `_ - for example: * the `2.12 release project `_ * the `core documentation project `_ .. _community_pull_requests: Micro development: the lifecycle of a PR ======================================== If you want to contribute a feature or fix a bug in ``ansible-core`` or in a collection, you must open a **pull request** ("PR" for short). GitHub provides a great overview of `how the pull request process works `_ in general. The ultimate goal of any pull request is to get merged and become part of a collection or ``ansible-core``. Here's an overview of the PR lifecycle: * Contributor opens a PR * Ansibot reviews the PR * Ansibot assigns labels * Ansibot pings maintainers * Azure Pipelines runs the test suite * Developers, maintainers, community review the PR * Contributor addresses any feedback from reviewers * Developers, maintainers, community re-review * PR merged or closed Automated PR review: ansibullbot -------------------------------- Because Ansible receives many pull requests, and because we love automating things, we have automated several steps of the process of reviewing and merging pull requests with a tool called Ansibullbot, or Ansibot for short. `Ansibullbot `_ serves many functions: - Responds quickly to PR submitters to thank them for submitting their PR - Identifies the community maintainer responsible for reviewing PRs for any files affected - Tracks the current status of PRs - Pings responsible parties to remind them of any PR actions for which they may be responsible - Provides maintainers with the ability to move PRs through the workflow - Identifies PRs abandoned by their submitters so that we can close them - Identifies modules abandoned by their maintainers so that we can find new maintainers Ansibot workflow ^^^^^^^^^^^^^^^^ Ansibullbot runs continuously. You can generally expect to see changes to your issue or pull request within thirty minutes. Ansibullbot examines every open pull request in the repositories, and enforces state roughly according to the following workflow: - If a pull request has no workflow labels, it's considered **new**. Files in the pull request are identified, and the maintainers of those files are pinged by the bot, along with instructions on how to review the pull request. (Note: sometimes we strip labels from a pull request to "reboot" this process.) - If the module maintainer is not ``$team_ansible``, the pull request then goes into the **community_review** state. - If the module maintainer is ``$team_ansible``, the pull request then goes into the **core_review** state (and probably sits for a while). - If the pull request is in **community_review** and has received comments from the maintainer: - If the maintainer says ``shipit``, the pull request is labeled **shipit**, whereupon the Core team assesses it for final merge. - If the maintainer says ``needs_info``, the pull request is labeled **needs_info** and the submitter is asked for more info. - If the maintainer says **needs_revision**, the pull request is labeled **needs_revision** and the submitter is asked to fix some things. - If the submitter says ``ready_for_review``, the pull request is put back into **community_review** or **core_review** and the maintainer is notified that the pull request is ready to be reviewed again. - If the pull request is labeled **needs_revision** or **needs_info** and the submitter has not responded lately: - The submitter is first politely pinged after two weeks, pinged again after two more weeks and labeled **pending action**, and the issue or pull request will be closed two weeks after that. - If the submitter responds at all, the clock is reset. - If the pull request is labeled **community_review** and the reviewer has not responded lately: - The reviewer is first politely pinged after two weeks, pinged again after two more weeks and labeled **pending_action**, and then may be reassigned to ``$team_ansible`` or labeled **core_review**, or often the submitter of the pull request is asked to step up as a maintainer. - If Azure Pipelines tests fail, or if the code is not able to be merged, the pull request is automatically put into **needs_revision** along with a message to the submitter explaining why. There are corner cases and frequent refinements, but this is the workflow in general. PR labels ^^^^^^^^^ There are two types of PR Labels generally: **workflow** labels and **information** labels. Workflow labels """"""""""""""" - **community_review**: Pull requests for modules that are currently awaiting review by their maintainers in the Ansible community. - **core_review**: Pull requests for modules that are currently awaiting review by their maintainers on the Ansible Core team. - **needs_info**: Waiting on info from the submitter. - **needs_rebase**: Waiting on the submitter to rebase. - **needs_revision**: Waiting on the submitter to make changes. - **shipit**: Waiting for final review by the core team for potential merge. Information labels """""""""""""""""" - **backport**: this is applied automatically if the PR is requested against any branch that is not devel. The bot immediately assigns the labels backport and ``core_review``. - **bugfix_pull_request**: applied by the bot based on the templatized description of the PR. - **cloud**: applied by the bot based on the paths of the modified files. - **docs_pull_request**: applied by the bot based on the templatized description of the PR. - **easyfix**: applied manually, inconsistently used but sometimes useful. - **feature_pull_request**: applied by the bot based on the templatized description of the PR. - **networking**: applied by the bot based on the paths of the modified files. - **owner_pr**: largely deprecated. Formerly workflow, now informational. Originally, PRs submitted by the maintainer would automatically go to **shipit** based on this label. If the submitter is also a maintainer, we notify the other maintainers and still require one of the maintainers (including the submitter) to give a **shipit**. - **pending_action**: applied by the bot to PRs that are not moving. Reviewed every couple of weeks by the community team, who tries to figure out the appropriate action (closure, asking for new maintainers, and so on). Special Labels """""""""""""" - **new_plugin**: this is for new modules or plugins that are not yet in Ansible. **Note:** `new_plugin` kicks off a completely separate process, and frankly it doesn't work very well at present. We're working our best to improve this process. Human PR review --------------- After Ansibot reviews the PR and applies labels, the PR is ready for human review. The most likely reviewers for any PR are the maintainers for the module that PR modifies. Each module has at least one assigned :ref:`maintainer `, listed in the `BOTMETA.yml `_ file. The maintainer's job is to review PRs that affect that module and decide whether they should be merged (``shipit``) or revised (``needs_revision``). We'd like to have at least one community maintainer for every module. If a module has no community maintainers assigned, the maintainer is listed as ``$team_ansible``. Once a human applies the ``shipit`` label, the :ref:`committers ` decide whether the PR is ready to be merged. Not every PR that gets the ``shipit`` label is actually ready to be merged, but the better our reviewers are, and the better our guidelines are, the more likely it will be that a PR that reaches **shipit** will be mergeable. Making your PR merge-worthy =========================== We do not merge every PR. Here are some tips for making your PR useful, attractive, and merge-worthy. .. _community_changelogs: Changelogs ---------- Changelogs help users and developers keep up with changes to ansible-core and Ansible collections. Ansible and many collections build changelogs for each release from fragments. For ansible-core and collections using this model, you **must** add a changelog fragment to any PR that changes functionality or fixes a bug. You do not need a changelog fragment for PRs that: * add new modules and plugins, because Ansible tooling does that automatically; * contain only documentation changes. .. note:: Some collections require a changelog fragment for every pull request. They use the ``trivial:`` section for entries mentioned above that will be skipped when building a release changelog. More precisely: * Every bugfix PR must have a changelog fragment. The only exception are fixes to a change that has not yet been included in a release. * Every feature PR must have a changelog fragment. * New modules and plugins (except jinja2 filter and test plugins) must have ``versions_added`` set correctly, and do not need a changelog fragment. The tooling detects new modules and plugins by their ``versions_added`` value and announces them in the next release's changelog automatically. * New jinja2 filter and test plugins, and also new roles and playbooks (for collections) must have a changelog fragment. See :ref:`changelogs_how_to_format_j2_roles_playbooks` or the `antsibull-changelog documentation for such changelog fragments `_ for information on how the fragments should look like. We build short summary changelogs for minor releases as well as for major releases. If you backport a bugfix, include a changelog fragment with the backport PR. .. _changelogs_how_to: Creating a changelog fragment ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A basic changelog fragment is a ``.yaml`` or ``.yml`` file placed in the ``changelogs/fragments/`` directory. Each file contains a yaml dict with keys like ``bugfixes`` or ``major_changes`` followed by a list of changelog entries of bugfixes or features. Each changelog entry is rst embedded inside of the yaml file which means that certain constructs would need to be escaped so they can be interpreted by rst and not by yaml (or escaped for both yaml and rst if you prefer). Each PR **must** use a new fragment file rather than adding to an existing one, so we can trace the change back to the PR that introduced it. PRs which add a new module or plugin do not necessarily need a changelog fragment. See the previous section :ref:`community_changelogs`. Also see the next section :ref:`changelogs_how_to_format` for the precise format changelog fragments should have. To create a changelog entry, create a new file with a unique name in the ``changelogs/fragments/`` directory of the corresponding repository. The file name should include the PR number and a description of the change. It must end with the file extension ``.yaml`` or ``.yml``. For example: ``40696-user-backup-shadow-file.yaml`` A single changelog fragment may contain multiple sections but most will only contain one section. The toplevel keys (bugfixes, major_changes, and so on) are defined in the `config file `_ for our `release note tool `_. Here are the valid sections and a description of each: **breaking_changes** Changes that break existing playbooks or roles. This includes any change to existing behavior that forces users to update tasks. Displayed in both the changelogs and the :ref:`Porting Guides `. **major_changes** Major changes to Ansible itself. Generally does not include module or plugin changes. Displayed in both the changelogs and the :ref:`Porting Guides `. **minor_changes** Minor changes to Ansible, modules, or plugins. This includes new features, new parameters added to modules, or behavior changes to existing parameters. **deprecated_features** Features that have been deprecated and are scheduled for removal in a future release. Displayed in both the changelogs and the :ref:`Porting Guides `. **removed_features** Features that were previously deprecated and are now removed. Displayed in both the changelogs and the :ref:`Porting Guides `. **security_fixes** Fixes that address CVEs or resolve security concerns. Include links to CVE information. **bugfixes** Fixes that resolve issues. **known_issues** Known issues that are currently not fixed or will not be fixed. Each changelog entry must contain a link to its issue between parentheses at the end. If there is no corresponding issue, the entry must contain a link to the PR itself. Most changelog entries are ``bugfixes`` or ``minor_changes``. .. _changelogs_how_to_format: Changelog fragment entry format ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When writing a changelog entry, use the following format: .. code-block:: yaml - scope - description starting with a lowercase letter and ending with a period at the very end. Multiple sentences are allowed (https://github.com/reference/to/an/issue or, if there is no issue, reference to a pull request itself). The scope is usually a module or plugin name or group of modules or plugins, for example, ``lookup plugins``. While module names can (and should) be mentioned directly (``foo_module``), plugin names should always be followed by the type (``foo inventory plugin``). For changes that are not really scoped (for example, which affect a whole collection), use the following format: .. code-block:: yaml - Description starting with an uppercase letter and ending with a dot at the very end. Multiple sentences are allowed (https://github.com/reference/to/an/issue or, if there is no issue, reference to a pull request itself). Here are some examples: .. code-block:: yaml bugfixes: - apt_repository - fix crash caused by ``cache.update()`` raising an ``IOError`` due to a timeout in ``apt update`` (https://github.com/ansible/ansible/issues/51995). .. code-block:: yaml minor_changes: - lineinfile - add warning when using an empty regexp (https://github.com/ansible/ansible/issues/29443). .. code-block:: yaml bugfixes: - copy - the module was attempting to change the mode of files for remote_src=True even if mode was not set as a parameter. This failed on filesystems which do not have permission bits (https://github.com/ansible/ansible/issues/29444). You can find more example changelog fragments in the `changelog directory `_ for the 2.12 release. After you have written the changelog fragment for your PR, commit the file and include it with the pull request. .. _changelogs_how_to_format_j2_roles_playbooks: Changelog fragment entry format for new jinja2 plugins, roles, and playbooks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ While new modules and plugins that are not jinja2 filter or test plugins are mentioned automatically in the generated changelog, jinja2 filter and test plugins, roles, and playbooks are not. To make sure they are mentioned, a changelog fragment in a specific format is needed: .. code-block:: yaml # A new jinja2 filter plugin: add plugin.filter: - # The following needs to be the name of the filter itself, not of the file # the filter is included in! name: to_time_unit # The description should be in the same format as short_description for # other plugins and modules: it should start with an upper-case letter and # not have a period at the end. description: Converts a time expression to a given unit # A new jinja2 test plugin: add plugin.test: - # The following needs to be the name of the test itself, not of the file # the test is included in! name: asn1time # The description should be in the same format as short_description for # other plugins and modules: it should start with an upper-case letter and # not have a period at the end. description: Check whether the given string is an ASN.1 time # A new role: add object.role: - # This should be the short (non-FQCN) name of the role. name: nginx # The description should be in the same format as short_description for # plugins and modules: it should start with an upper-case letter and # not have a period at the end. description: A nginx installation role # A new playbook: add object.playbook: - # This should be the short (non-FQCN) name of the playbook. name: wipe_server # The description should be in the same format as short_description for # plugins and modules: it should start with an upper-case letter and # not have a period at the end. description: Wipes a server .. _backport_process: Backporting merged PRs in ``ansible-core`` =========================================== All ``ansible-core`` PRs must be merged to the ``devel`` branch first. After a pull request has been accepted and merged to the ``devel`` branch, the following instructions will help you create a pull request to backport the change to a previous stable branch. We do **not** backport features. .. note:: These instructions assume that: * ``stable-2.12`` is the targeted release branch for the backport * ``https://github.com/ansible/ansible.git`` is configured as a ``git remote`` named ``upstream``. If you do not use a ``git remote`` named ``upstream``, adjust the instructions accordingly. * ``https://github.com//ansible.git`` is configured as a ``git remote`` named ``origin``. If you do not use a ``git remote`` named ``origin``, adjust the instructions accordingly. #. Prepare your devel, stable, and feature branches: .. code-block:: shell git fetch upstream git checkout -b backport/2.12/[PR_NUMBER_FROM_DEVEL] upstream/stable-2.12 #. Cherry pick the relevant commit SHA from the devel branch into your feature branch, handling merge conflicts as necessary: .. code-block:: shell git cherry-pick -x [SHA_FROM_DEVEL] #. Add a :ref:`changelog fragment ` for the change, and commit it. #. Push your feature branch to your fork on GitHub: .. code-block:: shell git push origin backport/2.12/[PR_NUMBER_FROM_DEVEL] #. Submit the pull request for ``backport/2.12/[PR_NUMBER_FROM_DEVEL]`` against the ``stable-2.12`` branch #. The Release Manager will decide whether to merge the backport PR before the next minor release. There isn't any need to follow up. Just ensure that the automated tests (CI) are green. .. note:: The branch name ``backport/2.12/[PR_NUMBER_FROM_DEVEL]`` is somewhat arbitrary, but conveys meaning about the purpose of the branch. This branch name format is not required, but it can be helpful, especially when making multiple backport PRs for multiple stable branches. .. note:: If you prefer, you can use CPython's cherry-picker tool (``pip install --user 'cherry-picker >= 1.3.2'``) to backport commits from devel to stable branches in Ansible. Take a look at the `cherry-picker documentation `_ for details on installing, configuring, and using it. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/documentation_contributions.rst0000644000000000000000000002734000000000000027707 0ustar00rootroot00000000000000.. _community_documentation_contributions: ***************************************** Contributing to the Ansible Documentation ***************************************** Ansible has a lot of documentation and a small team of writers. Community support helps us keep up with new features, fixes, and changes. Improving the documentation is an easy way to make your first contribution to the Ansible project. You do not have to be a programmer, since most of our documentation is written in YAML (module documentation) or `reStructuredText `_ (rST). Some collection-level documentation is written in a subset of `Markdown `_. If you are using Ansible, you already use YAML in your playbooks. rST and Markdown are mostly just text. You do not even need git experience, if you use the ``Edit on GitHub`` option. If you find a typo, a broken example, a missing topic, or any other error or omission on this documentation website, let us know. Here are some ways to support Ansible documentation: .. contents:: :local: Editing docs directly on GitHub =============================== For typos and other quick fixes, you can edit most of the documentation right from the site. Look at the top right corner of this page. That ``Edit on GitHub`` link is available on all the guide pages in the documentation. If you have a GitHub account, you can submit a quick and easy pull request this way. .. note:: The source files for individual collection plugins exist in their respective repositories. Follow the link to the collection on Galaxy to find where the repository is located and any guidelines on how to contribute to that collection. To submit a documentation PR from docs.ansible.com with ``Edit on GitHub``: #. Click on ``Edit on GitHub``. #. If you don't already have a fork of the ansible repo on your GitHub account, you'll be prompted to create one. #. Fix the typo, update the example, or make whatever other change you have in mind. #. Enter a commit message in the first rectangle under the heading ``Propose file change`` at the bottom of the GitHub page. The more specific, the better. For example, "fixes typo in my_module description". You can put more detail in the second rectangle if you like. Leave the ``+label: docsite_pr`` there. #. Submit the suggested change by clicking on the green "Propose file change" button. GitHub will handle branching and committing for you, and open a page with the heading "Comparing Changes". #. Click on ``Create pull request`` to open the PR template. #. Fill out the PR template, including as much detail as appropriate for your change. You can change the title of your PR if you like (by default it's the same as your commit message). In the ``Issue Type`` section, delete all lines except the ``Docs Pull Request`` line. #. Submit your change by clicking on ``Create pull request`` button. #. Be patient while Ansibot, our automated script, adds labels, pings the docs maintainers, and kicks off a CI testing run. #. Keep an eye on your PR - the docs team may ask you for changes. Reviewing open PRs and issues ============================= You can also contribute by reviewing open documentation `issues `_ and `PRs `_. To add a helpful review, please: - Include a comment - "looks good to me" only helps if we know why. - For issues, reproduce the problem. - For PRs, test the change. Opening a new issue and/or PR ============================= If the problem you have noticed is too complex to fix with the ``Edit on GitHub`` option, and no open issue or PR already documents the problem, please open an issue and/or a PR on the correct underlying repo - ``ansible/ansible`` for most pages that are not plugin or module documentation. If the documentation page has no ``Edit on GitHub`` option, check if the page is for a module within a collection. If so, follow the link to the collection on Galaxy and select the ``repo`` button in the upper right corner to find the source repository for that collection and module. The Collection README file should contain information on how to contribute to that collection, or report issues. A great documentation GitHub issue or PR includes: - a specific title - a detailed description of the problem (even for a PR - it's hard to evaluate a suggested change unless we know what problem it's meant to solve) - links to other information (related issues/PRs, external documentation, pages on docs.ansible.com, and so on) Verifying your documentation PR ================================ If you make multiple changes to the documentation on ``ansible/ansible``, or add more than a line to it, before you open a pull request, please: #. Check that your text follows our :ref:`style_guide`. #. Test your changes for rST errors. #. Build the page, and preferably the entire documentation site, locally. .. note:: The following sections apply to documentation sourced from the ``ansible/ansible`` repo and does not apply to documentation from an individual collection. See the collection README file for details on how to contribute to that collection. Setting up your environment to build documentation locally ---------------------------------------------------------- To build documentation locally, ensure you have a working :ref:`development environment `. To work with documentation on your local machine, you need to have python-3.5 or greater and install the `Ansible dependencies`_ and `documentation dependencies`_, which are listed in two :file:`requirements.txt` files to make installation easier: .. _Ansible dependencies: https://github.com/ansible/ansible/blob/devel/requirements.txt .. _documentation dependencies: https://github.com/ansible/ansible/blob/devel/docs/docsite/requirements.txt .. code-block:: bash pip install --user -r requirements.txt pip install --user -r docs/docsite/requirements.txt The :file:`docs/docsite/requirements.txt` file allows a wide range of versions and may install new releases of required packages. New releases of these packages may cause problems with the Ansible docs build. If you want to install tested versions of these dependencies, use :file:`docs/docsite/known_good_reqs.txt` instead: .. code-block:: bash pip install --user -r requirements.txt pip install --user -r docs/docsite/known_good_reqs.txt You can drop ``--user`` if you have set up a virtual environment (venv/virtenv). .. note:: You may need to install these general pre-requisites separately on some systems: - ``gcc`` - ``libyaml`` - ``make`` - ``pyparsing`` - ``six`` On macOS with Xcode, you may need to install ``six`` and ``pyparsing`` with ``--ignore-installed`` to get versions that work with ``sphinx``. .. note:: After checking out ``ansible/ansible``, make sure the ``docs/docsite/rst`` directory has strict enough permissions. It should only be writable by the owner's account. If your default ``umask`` is not 022, you can use ``chmod go-w docs/docsite/rst`` to set the permissions correctly in your new branch. Optionally, you can set your ``umask`` to 022 to make all newly created files on your system (including those created by ``git clone``) have the correct permissions. .. _testing_documentation_locally: Testing the documentation locally --------------------------------- To test an individual file for rST errors: .. code-block:: bash rstcheck changed_file.rst Building the documentation locally ---------------------------------- Building the documentation is the best way to check for errors and review your changes. Once `rstcheck` runs with no errors, navigate to ``ansible/docs/docsite`` and then build the page(s) you want to review. .. note:: If building on macOS with Python 3.8 or later, you must use Sphinx >= 2.2.2. See `#6803 `_ for details. Building a single rST page ^^^^^^^^^^^^^^^^^^^^^^^^^^ To build a single rST file with the make utility: .. code-block:: bash make htmlsingle rst=path/to/your_file.rst For example: .. code-block:: bash make htmlsingle rst=community/documentation_contributions.rst This process compiles all the links but provides minimal log output. If you're writing a new page or want more detailed log output, refer to the instructions on :ref:`build_with_sphinx-build` .. note:: ``make htmlsingle`` adds ``rst/`` to the beginning of the path you provide in ``rst=``, so you can't type the filename with autocomplete. Here are the error messages you will see if you get this wrong: - If you run ``make htmlsingle`` from the ``docs/docsite/rst/`` directory: ``make: *** No rule to make target `htmlsingle'. Stop.`` - If you run ``make htmlsingle`` from the ``docs/docsite/`` directory with the full path to your rST document: ``sphinx-build: error: cannot find files ['rst/rst/community/documentation_contributions.rst']``. Building all the rST pages ^^^^^^^^^^^^^^^^^^^^^^^^^^ To build all the rST files without any module documentation: .. code-block:: bash MODULES=none make webdocs Building module docs and rST pages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To build documentation for a few modules included in ``ansible/ansible`` plus all the rST files, use a comma-separated list: .. code-block:: bash MODULES=one_module,another_module make webdocs To build all the module documentation plus all the rST files: .. code-block:: bash make webdocs .. _build_with_sphinx-build: Building rST files with ``sphinx-build`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Advanced users can build one or more rST files with the sphinx utility directly. ``sphinx-build`` returns misleading ``undefined label`` warnings if you only build a single page, because it does not create internal links. However, ``sphinx-build`` returns more extensive syntax feedback, including warnings about indentation errors and ``x-string without end-string`` warnings. This can be useful, especially if you're creating a new page from scratch. To build a page or pages with ``sphinx-build``: .. code-block:: bash sphinx-build [options] sourcedir outdir [filenames...] You can specify filenames, or ``–a`` for all files, or omit both to compile only new/changed files. For example: .. code-block:: bash sphinx-build -b html -c rst/ rst/dev_guide/ _build/html/dev_guide/ rst/dev_guide/developing_modules_documenting.rst Running the final tests ^^^^^^^^^^^^^^^^^^^^^^^ When you submit a documentation pull request, automated tests are run. Those same tests can be run locally. To do so, navigate to the repository's top directory and run: .. code-block:: bash make clean && bin/ansible-test sanity --test docs-build && bin/ansible-test sanity --test rstcheck Unfortunately, leftover rST-files from previous document-generating can occasionally confuse these tests. It is therefore safest to run them on a clean copy of the repository, which is the purpose of ``make clean``. If you type these three lines one at a time and manually check the success of each, you do not need the ``&&``. Joining the documentation working group ======================================= The Documentation Working Group (DaWGs) meets weekly on Tuesdays in the Docs chat (using `Matrix `_ or using IRC at `irc.libera.chat `_). For more information, including links to our agenda and a calendar invite, please visit the `working group page in the community repo `_. .. seealso:: :ref:`More about testing module documentation ` :ref:`More about documenting modules ` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/github_admins.rst0000644000000000000000000000235100000000000024664 0ustar00rootroot00000000000000.. _github_admins: ************* GitHub Admins ************* .. contents:: Topics GitHub Admins have more permissions on GitHub than normal contributors or even committers. There are a few responsibilities that come with that increased power. Adding and removing committers ============================== The Ansible Team will periodically review who is actively contributing to Ansible to grant or revoke contributors' ability to commit on their own. GitHub Admins are the people who have the power to actually manage the GitHub permissions. Changing branch permissions for releases ======================================== When we make releases we make people go through a :ref:`release_managers` to push commits to that branch. The GitHub admins are responsible for setting the branch so only the Release Manager can commit to the branch when the release process reaches that stage and later opening the branch once the release has been made. The Release manager will let the GitHub Admin know when this needs to be done. .. seealso:: The `GitHub Admin Process Docs `_ for instructions on how to change branch permissions. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/how_can_I_help.rst0000644000000000000000000001075400000000000024753 0ustar00rootroot00000000000000.. _how_can_i_help: *************** How can I help? *************** .. contents:: :local: Thanks for being interested in helping the Ansible project! There are many ways to help the Ansible project...but first, please read and understand the :ref:`code_of_conduct`. Become a power user =================== A great way to help the Ansible project is to become a power user: * Use Ansible everywhere you can * Take tutorials and classes * Read the :ref:`official documentation ` * Study some of the `many excellent books `_ about Ansible * `Get certified `_. When you become a power user, your ability and opportunities to help the Ansible project in other ways will multiply quickly. Ask and answer questions online =============================== There are many forums online where Ansible users ask and answer questions. Reach out and communicate with your fellow Ansible users. You can find the official :ref:`Ansible communication channels `. Review, fix, and maintain the documentation =========================================== Typos are everywhere, even in the Ansible documentation. We work hard to keep the documentation up-to-date, but you may also find outdated examples. We offer easy ways to :ref:`report and/or fix documentation errors `. .. _ansible_community_meetup: Participate in your local meetup ================================ There are Ansible meetups `all over the world `_. Join your local meetup. Attend regularly. Ask good questions. Volunteer to give a presentation about how you use Ansible. If there is no meetup near you, we are happy to help you `start one `_. File and verify issues ====================== All software has bugs, and Ansible is no exception. When you find a bug, you can help tremendously by :ref:`telling us about it `. If the bug you found already exists in an issue, you can help by verifying the behavior of the reported bug with a comment in that issue, or by reporting any additional information. Review and submit pull requests =============================== As you become more familiar with how Ansible works, you may be able to fix issues or develop new features yourself. If you think you have a fix for a bug in Ansible, or if you have a new feature that you would like to share with millions of Ansible users, read all about the :ref:`Ansible development process ` and and :ref:`how to contribute to collections ` to learn how to get your code accepted into Ansible. Another good way to help is to review pull requests that other Ansible users have submitted. The Ansible community keeps a full list of `open pull requests by file `_, so if a particular module or plugin interests you, you can easily keep track of all the relevant new pull requests and provide testing or feedback. Become a collection maintainer ============================== Once you have learned about the development process and have contributed code to a collection, we encourage you to become a maintainer of that collection. There are hundreds of modules in dozens of Ansible collections, and the vast majority of them are written and maintained entirely by members of the Ansible community. To learn more about the responsibilities of being an Ansible module maintainer, please read our :ref:`collection maintainer guidelines `. .. _community_working_groups: Join a working group ==================== Working groups are a way for Ansible community members to self-organize around particular topics of interest. We have working groups around various topics. To join or create a working group, please read the :ref:`Ansible Working Groups`. Teach Ansible to others ======================= We are working on a standardized `Ansible workshop `_ that can provide a good hands-on introduction to Ansible usage and concepts. Social media ============ If you like Ansible and just want to spread the good word, feel free to share on your social media platform of choice, and let us know by using ``@ansible`` or ``#ansible``. We'll be looking for you. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/index.rst0000644000000000000000000001252000000000000023155 0ustar00rootroot00000000000000.. _ansible_community_guide: *********************** Ansible Community Guide *********************** .. note:: **Making Open Source More Inclusive** Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_. Welcome to the Ansible Community Guide! The purpose of this guide is to teach you everything you need to know about being a contributing member of the Ansible community. All types of contributions are welcome and necessary to Ansible's continued success. This page outlines the most common situations and questions that bring readers to this section. If you prefer a :ref:`traditional table of contents `, you can find one at the bottom of the page. Getting started =============== * I am new to the community. Where can I find the Ansible :ref:`code_of_conduct`? * I would like to know what I am agreeing to when I contribute to Ansible. Does Ansible have a :ref:`contributor_license_agreement`? * I would like to contribute but I am not sure how. Are there :ref:`easy ways to contribute `? * I want to talk to other Ansible users. How do I find an `Ansible Meetup near me `_? * I have a question. Which :ref:`Ansible email lists and chat channels ` will help me find answers? * I want to learn more about Ansible. What can I do? * `Read books `_. * `Get certified `_. * `Attend events `_. * `Review getting started guides `_. * `Watch videos `_ - includes Ansible Automates, AnsibleFest & webinar recordings. * I would like updates about new Ansible versions. How are `new releases announced `_? * I want to use the current release. How do I know which :ref:`releases are current `? Going deeper ============ * I think Ansible is broken. How do I :ref:`report a bug `? * I need functionality that Ansible does not offer. How do I :ref:`request a feature `? * How do I :ref:`contribute to an Ansible-maintained collection `? * I am waiting for a particular feature. How do I see what is :ref:`planned for future Ansible Releases `? * I have a specific Ansible interest or expertise (for example, VMware, Linode, and so on). How do I get involved in a :ref:`working group `? * I would like to participate in conversations about features and fixes. How do I review GitHub issues and pull requests? * I found a typo or another problem on docs.ansible.com. How can I :ref:`improve the documentation `? * Is there a :ref:`mailing list ` I can sign up for to stay informed about Ansible? Working with the Ansible repo ============================= * I want to make my first code changes to a collection or to ``ansible-core``. How do I :ref:`set up my Python development environment `? * I would like to get more efficient as a developer. How can I find :ref:`editors, linters, and other tools ` that will support my Ansible development efforts? * I want my code to meet Ansible's guidelines. Where can I find guidance on :ref:`coding in Ansible `? * I want to learn more about Ansible roadmaps, releases, and projects. How do I find information on :ref:`the development cycle `? * I would like to connect Ansible to a new API or other resource. How do I :ref:`create a collection `? * My pull request is marked ``needs_rebase``. How do I :ref:`rebase my PR `? * I am using an older version of Ansible and want a bug fixed in my version that has already been fixed on the ``devel`` branch. How do I :ref:`backport a bugfix PR `? * I have an open pull request with a failing test. How do I learn about Ansible's :ref:`testing (CI) process `? * I am ready to step up as a collection maintainer. What are the :ref:`guidelines for maintainers `? * A module in a collection I maintain is obsolete. How do I :ref:`deprecate a module `? .. _community_toc: Traditional Table of Contents ============================= If you prefer to read the entire Community Guide, here is a list of the pages in order: .. toctree:: :maxdepth: 2 code_of_conduct how_can_I_help reporting_bugs_and_features documentation_contributions communication development_process contributing_maintained_collections contributor_license_agreement triage_process other_tools_and_programs ../dev_guide/style_guide/index .. toctree:: :caption: Guidelines for specific types of contributors :maxdepth: 1 committer_guidelines maintainers release_managers github_admins ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/maintainers.rst0000644000000000000000000000431200000000000024360 0ustar00rootroot00000000000000.. _maintainers: ******************************** Collection maintainer guidelines ******************************** Thank you for being a community collection maintainer. This guide offers an overview of your responsibilities as a maintainer along with resources for additional information. The Ansible community hopes that you will find that maintaining a collection is as rewarding for you as having the collection content is for the wider community. .. contents:: :local: In addition to the information below, module maintainers should be familiar with: * :ref:`General Ansible community development practices ` * Documentation on :ref:`module development ` Maintainer responsibilities =========================== When you contribute a module to a collection included in the ``ansible`` package, you become a maintainer for that module once it has been merged. Maintainership empowers you with the authority to accept, reject, or request revisions to pull requests on your module -- but as they say, "with great power comes great responsibility." Maintainers of Ansible collections are expected to provide feedback, responses, or actions on pull requests or issues to the collection(s) they maintain in a reasonably timely manner. You can also update the contributor guidelines for that collection, in collaboration with the Ansible community team and the other maintainers of that collection. Resources ========= Please see :ref:`communication` for ways to contact the broader Ansible community. For maintainers, following the `ansible-devel `_ mailing list is a great way to participate in conversations about coding, get assistance when you need it, and influence the overall direction, quality, and goals of Ansible and the collections. If you are not on this relatively low-volume list, please join us here: https://groups.google.com/forum/#!forum/ansible-devel Pull requests, issues, and workflow =================================== Each collection community can set its own rules and workflow for managing pull requests, bug reports, documentation issues, and feature requests, as well as adding and replacing maintainers. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/other_tools_and_programs.rst0000644000000000000000000001755300000000000027156 0ustar00rootroot00000000000000.. _other_tools_and_programs: ************************ Other Tools and Programs ************************ .. contents:: :local: The Ansible community uses a range of tools for working with the Ansible project. This is a list of some of the most popular of these tools. If you know of any other tools that should be added, this list can be updated by clicking "Edit on GitHub" on the top right of this page. *************** Popular editors *************** Atom ==== An open-source, free GUI text editor created and maintained by GitHub. You can keep track of git project changes, commit from the GUI, and see what branch you are on. You can customize the themes for different colors and install syntax highlighting packages for different languages. You can install Atom on Linux, macOS and Windows. Useful Atom plugins include: * `language-yaml `_ - YAML highlighting for Atom (built-in). * `linter-js-yaml `_ - parses your YAML files in Atom through js-yaml. Emacs ===== A free, open-source text editor and IDE that supports auto-indentation, syntax highlighting and built in terminal shell(among other things). * `yaml-mode `_ - YAML highlighting and syntax checking. * `jinja2-mode `_ - Jinja2 highlighting and syntax checking. * `magit-mode `_ - Git porcelain within Emacs. PyCharm ======= A full IDE (integrated development environment) for Python software development. It ships with everything you need to write python scripts and complete software, including support for YAML syntax highlighting. It's a little overkill for writing roles/playbooks, but it can be a very useful tool if you write modules and submit code for Ansible. Can be used to debug the Ansible engine. Sublime ======= A closed-source, subscription GUI text editor. You can customize the GUI with themes and install packages for language highlighting and other refinements. You can install Sublime on Linux, macOS and Windows. Useful Sublime plugins include: * `GitGutter `_ - shows information about files in a git repository. * `SideBarEnhancements `_ - provides enhancements to the operations on Sidebar of Files and Folders. * `Sublime Linter `_ - a code-linting framework for Sublime Text 3. * `Pretty YAML `_ - prettifies YAML for Sublime Text 2 and 3. * `Yamllint `_ - a Sublime wrapper around yamllint. Visual studio code ================== An open-source, free GUI text editor created and maintained by Microsoft. Useful Visual Studio Code plugins include: * `YAML Support by Red Hat `_ - provides YAML support through yaml-language-server with built-in Kubernetes and Kedge syntax support. * `Ansible Syntax Highlighting Extension `_ - YAML & Jinja2 support. * `Visual Studio Code extension for Ansible `_ - provides autocompletion, syntax highlighting. vim === An open-source, free command-line text editor. Useful vim plugins include: * `Ansible vim `_ - vim syntax plugin for Ansible 2.x, it supports YAML playbooks, Jinja2 templates, and Ansible's hosts files. JetBrains ========= An open-source Community edition and closed-source Enterprise edition, integrated development environments based on IntelliJ's framework including IDEA, AppCode, CLion, GoLand, PhpStorm, PyCharm and others. Useful JetBrains platform plugins include: * `Ansible `_ - general Ansible plugin provides auto-completion, role name suggestion and other handy features for working with playbooks and roles. * `Ansible Vault Editor `_ - Ansible Vault Editor with auto encryption/decryption. ***************** Development tools ***************** Finding related issues and PRs ============================== There are various ways to find existing issues and pull requests (PRs) - `PR by File `_ - shows a current list of all open pull requests by individual file. An essential tool for Ansible module maintainers. - `jctanner's Ansible Tools `_ - miscellaneous collection of useful helper scripts for Ansible development. .. _validate-playbook-tools: ****************************** Tools for validating playbooks ****************************** - `Ansible Lint `_ - a highly configurable linter for Ansible playbooks. - `Ansible Review `_ - an extension of Ansible Lint designed for code review. - `Molecule `_ - a testing framework for Ansible plays and roles. - `yamllint `__ - a command-line utility to check syntax validity including key repetition and indentation issues. *********** Other tools *********** - `Ansible cmdb `_ - takes the output of Ansible's fact gathering and converts it into a static HTML overview page containing system configuration information. - `Ansible Inventory Grapher `_ - visually displays inventory inheritance hierarchies and at what level a variable is defined in inventory. - `Ansible Playbook Grapher `_ - a command line tool to create a graph representing your Ansible playbook tasks and roles. - `Ansible Shell `_ - an interactive shell for Ansible with built-in tab completion for all the modules. - `Ansible Silo `_ - a self-contained Ansible environment by Docker. - `Ansigenome `_ - a command line tool designed to help you manage your Ansible roles. - `ARA `_ - ARA Records Ansible playbooks and makes them easier to understand and troubleshoot with a reporting API, UI and CLI. - `Awesome Ansible `_ - a collaboratively curated list of awesome Ansible resources. - `AWX `_ - provides a web-based user interface, REST API, and task engine built on top of Ansible. Red Hat Ansible Automation Platform includes code from AWX. - `Mitogen for Ansible `_ - uses the `Mitogen `_ library to execute Ansible playbooks in a more efficient way (decreases the execution time). - `nanvault `_ - a standalone tool to encrypt and decrypt files in the Ansible Vault format, featuring UNIX-style composability. - `OpsTools-ansible `_ - uses Ansible to configure an environment that provides the support of `OpsTools `_, namely centralized logging and analysis, availability monitoring, and performance monitoring. - `TD4A `_ - a template designer for automation. TD4A is a visual design aid for building and testing jinja2 templates. It will combine data in yaml format with a jinja2 template and render the output. - `PHP-Ansible `_ - an object oriented Ansible wrapper for PHP. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/release_managers.rst0000644000000000000000000000762600000000000025356 0ustar00rootroot00000000000000.. _release_managers: ************************** Release Manager Guidelines ************************** .. contents:: Topics The release manager's purpose is to ensure a smooth release. To achieve that goal, they need to coordinate between: * Developers with commit privileges on the `Ansible GitHub repository `_ * Contributors without commit privileges * The community * Ansible documentation team Pre-releases: what and why ========================== Pre-releases exist to draw testers. They give people who don't feel comfortable running from source control a means to get an early version of the code to test and give us feedback. To ensure we get good feedback about a release, we need to make sure all major changes in a release are put into a pre-release. Testers must be given time to test those changes before the final release. Ideally we want there to be sufficient time between pre-releases for people to install and test one version for a span of time. Then they can spend more time using the new code than installing the latest version. The right length of time for a tester is probably around two weeks. However, for our three-to-four month development cycle to work, we compress this down to one week; any less runs the risk of people spending more time installing the code instead of running it. However, if there's a time crunch (with a release date that cannot slip), it is better to release with new changes than to hold back those changes to give people time to test between. People cannot test what is not released, so we have to get those tarballs out there even if people feel they have to install more frequently. Beta releases ------------- In a beta release, we know there are still bugs. We will continue to accept fixes for these. Although we review these fixes, sometimes they can be invasive or potentially destabilize other areas of the code. During the beta, we will no longer accept feature submissions. Release candidates ------------------ In a release candidate, we've fixed all known blockers. Any remaining bugfixes are ones that we are willing to leave out of the release. At this point we need user testing to determine if there are any other blocker bugs lurking. Blocker bugs generally are those that cause significant problems for users. Regressions are more likely to be considered blockers because they will break present users' usage of Ansible. The Release Manager will cherry-pick fixes for new release blockers. The release manager will also choose whether to accept bugfixes for isolated areas of the code or defer those to the next minor release. By themselves, non-blocker bugs will not trigger a new release; they will only make it into the next major release if blocker bugs require that a new release be made. The last RC should be as close to the final as possible. The following things may be changed: * Version numbers are changed automatically and will differ as the pre-release tags are removed from the versions. * Tests and :file:`docs/docsite/` can differ if really needed as they do not break runtime. However, the release manager may still reject them as they have the potential to cause breakage that will be visible during the release process. .. note:: We want to specifically emphasize that code (in :file:`bin/`, :file:`lib/ansible/`, and :file:`setup.py`) must be the same unless there are extraordinary extenuating circumstances. If there are extenuating circumstances, the Release Manager is responsible for notifying groups which would want to test the code. Ansible release process ======================= The release process is kept in a `separate document `_ so that it can be easily updated during a release. If you need access to edit this, please ask one of the current release managers to add you. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.447556 ansible-core-2.12.0/docs/docsite/rst/community/reporting_bugs_and_features.rst0000644000000000000000000000657300000000000027632 0ustar00rootroot00000000000000.. _reporting_bugs_and_features: ************************************** Reporting bugs and requesting features ************************************** .. contents:: :local: .. _reporting_bugs: Reporting a bug =============== Security bugs ------------- Ansible practices responsible disclosure - if this is a security-related bug, email `security@ansible.com `_ instead of filing a ticket or posting to any public groups, and you will receive a prompt response. Bugs in ansible-core -------------------- If you find a bug that affects multiple plugins, a plugin that remained in the ansible/ansible repo, or the overall functioning of Ansible, report it to `github.com/ansible/ansible/issues `_. You need a free GitHub account. Before reporting a bug, use the bug/issue search to see if the issue has already been reported. If you are not sure if something is a bug yet, you can report the behavior on the :ref:`mailing list or community chat first `. Do not open issues for "how do I do this" type questions. These are great topics for community chat channels or a mailing list, where things are likely to be more of a discussion. If you find a bug, open the issue yourself to ensure we have a record of it. Do not rely on someone else in the community to file the bug report for you. We have created an issue template, which saves time and helps us help everyone with their issues more quickly. Please fill it out as completely and as accurately as possible: * Include the Ansible version * Include any relevant configuration * Include the exact commands or tasks you are running * Describe the behavior you expected * Provide steps to reproduce the bug * Use minimal well-reduced and well-commented examples, not your entire production playbook * When sharing YAML in playbooks, preserve the formatting by using `code blocks `_. * Document the behavior you got * Include output where possible * For multiple-file content, use gist.github.com, which is more durable than pastebin content .. _reporting_bugs_in_collections: Bugs in collections ------------------- Many bugs only affect a single module or plugin. If you find a bug that affects a module or plugin hosted in a collection, file the bug in the repository of the :ref:`collection `: #. Find the collection on `Galaxy `_. #. Click on the Issue Tracker link for that collection. #. Follow the contributor guidelines or instructions in the collection repo. If you are not sure whether a bug is in ansible-core or in a collection, you can report the behavior on the :ref:`mailing list or community chat channel first `. .. _request_features: Requesting a feature ==================== The best way to get a feature into Ansible is to :ref:`submit a pull request `, either against ansible-core or against a collection. See also :ref:`ansible_collection_merge_requirements`. You can also submit a feature request through opening an issue in the `ansible/ansible `_ for ``ansible-core`` or in a corresponding collection repository (refer to the :ref:`Bugs in collections` section to learn how to find a proper issue tracker). ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/community/triage_process.rst0000644000000000000000000000077400000000000025067 0ustar00rootroot00000000000000************** Triage Process ************** The issue and PR triage processes are driven by the `Ansibot `_. Whenever an issue or PR is filed, the Ansibot examines the issue to ensure that all relevant data is present, and handles the routing of the issue as it works its way to eventual completion. For details on how Ansibot manages the triage process, please consult the `Ansibot Issue Guide `_. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/core_index.rst0000644000000000000000000001037500000000000022147 0ustar00rootroot00000000000000.. _ansible_core_documentation: .. This is the index file for ansible-core. It gets symlinked to index.rst by the Makefile ************************** Ansible Core Documentation ************************** About ansible-core =================== Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates. Ansible core, or ``ansible-core`` is the main building block and architecture for Ansible, and includes: * CLI tools such as ``ansible-playbook``, ``ansible-doc``. and others for driving and interacting with automation. * The Ansible language that uses YAML to create a set of rules for developing Ansible Playbooks and includes functions such as conditionals, blocks, includes, loops, and other Ansible imperatives. * An architectural framework that allows extensions through Ansible collections. Ansible's main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with other transports and pull modes as alternatives), and a language that is designed around auditability by humans--even those not familiar with the program. We believe simplicity is relevant to all sizes of environments, so we design for busy users of all types: developers, sysadmins, release engineers, IT managers, and everyone in between. Ansible is appropriate for managing all environments, from small setups with a handful of instances to enterprise environments with many thousands of instances. You can learn more at `AnsibleFest `_, the annual event for all Ansible contributors, users, and customers hosted by Red Hat. AnsibleFest is the place to connect with others, learn new skills, and find a new friend to automate with. Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled. Because OpenSSH is one of the most peer-reviewed open source components, security exposure is greatly reduced. Ansible is decentralized--it relies on your existing OS credentials to control access to remote machines. If needed, Ansible can easily connect with Kerberos, LDAP, and other centralized authentication management systems. This documentation covers the version of ``ansible-core`` noted in the upper left corner of this page. We maintain multiple versions of ``ansible-core`` and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you're using. For recent features, we note the version of Ansible where the feature was added. ``ansible-core`` releases a new major release approximately twice a year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. Contributors develop and change modules and plugins, hosted in collections since version 2.10, much more quickly. .. toctree:: :maxdepth: 2 :caption: Installation, Upgrade & Configuration installation_guide/index porting_guides/core_porting_guides .. toctree:: :maxdepth: 2 :caption: Using Ansible Core user_guide/index .. toctree:: :maxdepth: 2 :caption: Contributing to Ansible Core community/index .. toctree:: :maxdepth: 2 :caption: Extending Ansible dev_guide/index .. toctree:: :maxdepth: 1 :caption: Reference & Appendices collections/index collections/all_plugins reference_appendices/playbooks_keywords reference_appendices/common_return_values reference_appendices/config reference_appendices/general_precedence reference_appendices/YAMLSyntax reference_appendices/python_3_support reference_appendices/interpreter_discovery reference_appendices/release_and_maintenance reference_appendices/test_strategies dev_guide/testing/sanity/index reference_appendices/faq reference_appendices/glossary reference_appendices/module_utils reference_appendices/special_variables reference_appendices/tower reference_appendices/automationhub reference_appendices/logging .. toctree:: :maxdepth: 2 :caption: Roadmaps roadmap/ansible_core_roadmap_index.rst ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.940559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/0000755000000000000000000000000000000000000021223 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/debugging.rst0000644000000000000000000001533400000000000023716 0ustar00rootroot00000000000000.. _debugging_modules: ***************** Debugging modules ***************** .. contents:: :local: .. _detailed_debugging: Detailed debugging steps ======================== Ansible modules are put together as a zip file consisting of the module file and the various Python module boilerplate inside of a wrapper script. To see what is actually happening in the module, you need to extract the file from the wrapper. The wrapper script provides helper methods that let you do that. The following steps use ``localhost`` as the target host, but you can use the same steps to debug against remote hosts as well. For a simpler approach to debugging without using the temporary files, see :ref:`simple debugging `. #. Set :envvar:`ANSIBLE_KEEP_REMOTE_FILES` to ``1`` on the control host so Ansible will keep the remote module files instead of deleting them after the module finishes executing. Use the ``-vvv`` option to make Ansible more verbose. This will display the file name of the temporary module file. .. code-block:: shell-session $ ANSIBLE_KEEP_REMOTE_FILES=1 ansible localhost -m ping -a 'data=debugging_session' -vvv <127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: badger <127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595 `" && echo "` echo $HOME/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595 `" )' <127.0.0.1> PUT /var/tmp/tmpjdbJ1w TO /home/badger/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595/AnsiballZ_ping.py <127.0.0.1> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595/AnsiballZ_ping.py && sleep 0' localhost | SUCCESS => { "changed": false, "invocation": { "module_args": { "data": "debugging_session" }, "module_name": "ping" }, "ping": "debugging_session" } #. Navigate to the temporary directory from the previous step. If the previous command was run against a remote host, connect to that host first before trying to navigate to the temporary directory. .. code-block:: shell-session $ ssh remotehost # only if not debugging against localhost $ cd /home/badger/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595 #. Run the wrapper's ``explode`` command to turn the string into some Python files that you can work with. .. code-block:: shell-session $ python AnsiballZ_ping.py explode Module expanded into: /home/badger/.ansible/tmp/ansible-tmp-1461434734.35-235318071810595/debug_dir If you want to examine the wrapper file you can. It will show a small Python script with a large base64 encoded string. The string contains the module to execute. #. When you look into the temporary directory you'll see a structure like this: .. code-block:: shell-session ├── AnsiballZ_ping.py └── debug_dir ├── ansible │   ├── __init__.py │   ├── module_utils │   │   ├── __init__.py │   │   ├── _text.py │   │   ├── basic.py │   │   ├── common │   │   ├── compat │   │   ├── distro │   │   ├── parsing │   │   ├── pycompat24.py │   │   └── six │   └── modules │   ├── __init__.py │   └── ping.py └── args * ``AnsiballZ_ping.py`` is the Python script with the module code stored in a base64 encoded string. It contains various helper functions for executing the module. * ``ping.py`` is the code for the module itself. You can modify this code to see what effect it would have on your module, or for debugging purposes. * The ``args`` file contains a JSON string. The string is a dictionary containing the module arguments and other variables that Ansible passes into the module to change its behavior. Modify this file to change the parameters passed to the module. * The ``ansible`` directory contains the module code in ``modules`` as well as code from :mod:`ansible.module_utils` that is used by the module. Ansible includes files for any :mod:`ansible.module_utils` imports in the module but not any files from any other module. If your module uses :mod:`ansible.module_utils.url` Ansible will include it for you. But if your module includes `requests `_, then you'll have to make sure that the Python `requests library `_ is installed on the system before running the module. You can modify files in this directory if you suspect that the module is having a problem in some of this boilerplate code rather than in the module code you have written. #. Once you edit the code or arguments in the exploded tree, use the ``execute`` subcommand to run it: .. code-block:: shell-session $ python AnsiballZ_ping.py execute {"invocation": {"module_args": {"data": "debugging_session"}}, "changed": false, "ping": "debugging_session"} This subcommand inserts the absolute path to ``debug_dir`` as the first item in ``sys.path`` and invokes the script using the arguments in the ``args`` file. You can continue to run the module like this until you understand the problem. Then you can copy the changes back into your real module file and test that the real module works via ``ansible`` or ``ansible-playbook``. .. _simple_debugging: Simple debugging ================ The easiest way to run a debugger in a module, either local or remote, is to use `epdb `_. Add ``import epdb; epdb.serve()`` in the module code on the control node at the desired break point. To connect to the debugger, run ``epdb.connect()``. See the `epdb documentation `_ for how to specify the ``host`` and ``port``. If connecting to a remote node, make sure to use a port that is allowed by any firewall between the control node and the remote node. This technique should work with any remote debugger, but we do not guarantee any particular remote debugging tool will work. The `q `_ library is another very useful debugging tool. Since ``print()`` statements do not work inside modules, raising an exception is a good approach if you just want to see some specific data. Put ``raise Exception(some_value)`` somewhere in the module and run it normally. Ansible will handle this exception, pass the message back to the control node, and display it. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_api.rst0000644000000000000000000000407000000000000024743 0ustar00rootroot00000000000000.. _developing_api: ********** Python API ********** .. contents:: Topics .. note:: This API is intended for internal Ansible use. Ansible may make changes to this API at any time that could break backward compatibility with older versions of the API. Because of this, external use is not supported by Ansible. If you want to use Python API only for executing playbooks or modules, consider `ansible-runner `_ first. There are several ways to use Ansible from an API perspective. You can use the Ansible Python API to control nodes, you can extend Ansible to respond to various Python events, you can write plugins, and you can plug in inventory data from external data sources. This document gives a basic overview and examples of the Ansible execution and playbook API. If you would like to use Ansible programmatically from a language other than Python, trigger events asynchronously, or have access control and logging demands, please see the `AWX project `_. .. note:: Because Ansible relies on forking processes, this API is not thread safe. .. _python_api_example: Python API example ================== This example is a simple demonstration that shows how to minimally run a couple of tasks: .. literalinclude:: ../../../../examples/scripts/uptime.py :language: python .. note:: Ansible emits warnings and errors via the display object, which prints directly to stdout, stderr and the Ansible log. The source code for the ``ansible`` command line tools (``lib/ansible/cli/``) is `available on GitHub `_. .. seealso:: :ref:`developing_inventory` Developing dynamic inventory integrations :ref:`developing_modules_general` Getting started on developing a module :ref:`developing_plugins` How to develop plugins `Development Mailing List `_ Mailing list for development topics :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections.rst0000644000000000000000000000343600000000000026515 0ustar00rootroot00000000000000.. _developing_collections: ********************** Developing collections ********************** Collections are a distribution format for Ansible content. You can package and distribute playbooks, roles, modules, and plugins using collections. A typical collection addresses a set of related use cases. For example, the ``cisco.ios`` collection automates management of Cisco IOS devices. You can create a collection and publish it to `Ansible Galaxy `_ or to a private Automation Hub instance. You can publish certified collections to the Red Hat Automation Hub, part of the Red Hat Ansible Automation Platform. .. toctree:: :maxdepth: 2 :caption: Developing new collections developing_collections_creating developing_collections_shared developing_collections_testing developing_collections_distributing .. toctree:: :maxdepth: 2 :caption: Working with existing collections developing_collections_migrating developing_collections_contributing developing_collections_changelogs .. toctree:: :maxdepth: 2 :caption: Collections references developing_collections_structure collections_galaxy_meta For instructions on developing modules, see :ref:`developing_modules_general`. .. seealso:: :ref:`collections` Learn how to install and use collections in playbooks and roles :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Ansible Collections Overview and FAQ `_ Current development status of community collections and FAQ `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_changelogs.rst0000644000000000000000000001061100000000000030700 0ustar00rootroot00000000000000.. _collection_changelogs: *************************************************************** Generating changelogs and porting guide entries in a collection *************************************************************** You can create and share changelog and porting guide entries for your collection. If your collection is part of the Ansible Community package, we recommend that you use the `antsibull-changelog `_ tool to generate Ansible-compatible changelogs. The Ansible changelog uses the output of this tool to collate all the collections included in an Ansible release into one combined changelog for the release. .. note:: Ansible here refers to the Ansible 2.10 or later release that includes a curated set of collections. .. contents:: :local: :depth: 2 Understanding antsibull-changelog ================================= The ``antsibull-changelog`` tool allows you to create and update changelogs for Ansible collections that are compatible with the combined Ansible changelogs. This is an update to the changelog generator used in prior Ansible releases. The tool adds three new changelog fragment categories: ``breaking_changes``, ``security_fixes`` and ``trivial``. The tool also generates the ``changelog.yaml`` file that Ansible uses to create the combined ``CHANGELOG.rst`` file and Porting Guide for the release. See :ref:`changelogs_how_to` and the `antsibull-changelog documentation `_ for complete details. .. note:: The collection maintainers set the changelog policy for their collections. See the individual collection contributing guidelines for complete details. Generating changelogs --------------------- To initialize changelog generation: #. Install ``antsibull-changelog``: :code:`pip install antsibull-changelog`. #. Initialize changelogs for your repository: :code:`antsibull-changelog init `. #. Optionally, edit the ``changelogs/config.yaml`` file to customize the location of the generated changelog ``.rst`` file or other options. See `Bootstrapping changelogs for collections `_ for details. To generate changelogs from the changelog fragments you created: #. Optionally, validate your changelog fragments: :code:`antsibull-changelog lint`. #. Generate the changelog for your release: :code:`antsibull-changelog release [--version version_number]`. .. note:: Add the ``--reload-plugins`` option if you ran the ``antsibull-changelog release`` command previously and the version of the collection has not changed. ``antsibull-changelog`` caches the information on all plugins and does not update its cache until the collection version changes. Porting Guide entries from changelog fragments ---------------------------------------------- The Ansible changelog generator automatically adds several changelog fragment categories to the Ansible Porting Guide: * ``major_changes`` * ``breaking_changes`` * ``deprecated_features`` * ``removed_features`` Including collection changelogs into Ansible ============================================= If your collection is part of Ansible, use one of the following three options to include your changelog into the Ansible release changelog: * Use the ``antsibull-changelog`` tool. * If are not using this tool, include the properly formatted ``changelog.yaml`` file into your collection. See the `changelog.yaml format `_ for details. * Add a link to own changelogs or release notes in any format by opening an issue at https://github.com/ansible-community/ansible-build-data/ with the HTML link to that information. .. note:: For the first two options, Ansible pulls the changelog details from Galaxy so your changelogs must be included in the collection version on Galaxy that is included in the upcoming Ansible release. .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_contributing.rst0000644000000000000000000000615100000000000031301 0ustar00rootroot00000000000000.. _hacking_collections: *************************** Contributing to collections *************************** If you want to add functionality to an existing collection, modify a collection you are using to fix a bug, or change the behavior of a module in a collection, clone the git repository for that collection and make changes on a branch. You can combine changes to a collection with a local checkout of Ansible (``source hacking/env-setup``). You should first check the collection repository to see if it has specific contribution guidelines. These are typically listed in the README.md or CONTRIBUTING.md files within the repository. Contributing to a collection: community.general =============================================== These instructions apply to collections hosted in the `ansible_collections GitHub organization `_. For other collections, especially for collections not hosted on GitHub, check the ``README.md`` of the collection for information on contributing to it. This example uses the `community.general collection `_. To contribute to other collections in the same GitHub org, replace the folder names ``community`` and ``general`` with the namespace and collection name of a different collection. Prerequisites ------------- * Include ``~/dev/ansible/collections/`` in :ref:`COLLECTIONS_PATHS` * If that path mentions multiple directories, make sure that no other directory earlier in the search path contains a copy of ``community.general``. Creating a PR ------------- * Create the directory ``~/dev/ansible/collections/ansible_collections/community``: .. code-block:: shell mkdir -p ~/dev/ansible/collections/ansible_collections/community * Clone `the community.general Git repository `_ or a fork of it into the directory ``general``: .. code-block:: shell cd ~/dev/ansible/collections/ansible_collections/community git clone git@github.com:ansible-collections/community.general.git general * If you clone from a fork, add the original repository as a remote ``upstream``: .. code-block:: shell cd ~/dev/ansible/collections/ansible_collections/community/general git remote add upstream git@github.com:ansible-collections/community.general.git * Create a branch and commit your changes on the branch. * Remember to add tests for your changes, see :ref:`testing_collections`. * Push your changes to your fork of the collection and create a Pull Request. You can test your changes by using this checkout of ``community.general`` in playbooks and roles with whichever version of Ansible you have installed locally, including a local checkout of ``ansible/ansible``'s ``devel`` branch. .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_creating.rst0000644000000000000000000000433400000000000030367 0ustar00rootroot00000000000000.. _creating_collections: ******************** Creating collections ******************** To create a collection: #. Create a :ref:`collection skeleton` with the ``collection init`` command. #. Add modules and other content to the collection. #. Build the collection into a collection artifact with :ref:`ansible-galaxy collection build`. #. Publish the collection artifact to Galaxy with :ref:`ansible-galaxy collection publish`. A user can then install your collection on their systems. .. contents:: :local: :depth: 2 .. _creating_collections_skeleton: Creating a collection skeleton ============================== To start a new collection: .. code-block:: bash collection_dir#> ansible-galaxy collection init my_namespace.my_collection .. note:: Both the namespace and collection names use the same strict set of requirements. See `Galaxy namespaces `_ on the Galaxy docsite for those requirements. Once the skeleton exists, you can populate the directories with the content you want inside the collection. See `ansible-collections `_ GitHub Org to get a better idea of what you can place inside a collection. Reference: the ``ansible-galaxy collection`` command Currently the ``ansible-galaxy collection`` command implements the following sub commands: * ``init``: Create a basic collection skeleton based on the default template included with Ansible or your own template. * ``build``: Create a collection artifact that can be uploaded to Galaxy or your own repository. * ``publish``: Publish a built collection artifact to Galaxy. * ``install``: Install one or more collections. To learn more about the ``ansible-galaxy`` command-line tool, see the :ref:`ansible-galaxy` man page. .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`collection_structure` Directories and files included in the collection skeleton `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.448556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_distributing.rst0000644000000000000000000003672700000000000031315 0ustar00rootroot00000000000000.. _distributing_collections: ************************ Distributing collections ************************ A collection is a distribution format for Ansible content. A typical collection contains modules and other plugins that address a set of related use cases. For example, a collection might automate administering a particular database. A collection can also contain roles and playbooks. To distribute your collection and allow others to use it, you can publish your collection on one or more distribution servers. Distribution servers include: ================================= ======================================================== Distribution server Collections accepted ================================= ======================================================== Ansible Galaxy All collections Red Hat Automation Hub Only collections certified by Red Hat Privately hosted Automation Hub Collections authorized by the owners ================================= ======================================================== Distributing collections involves four major steps: #. Initial configuration of your distribution server or servers #. Building your collection tarball #. Preparing to publish your collection #. Publishing your collection .. contents:: :local: :depth: 2 .. _config_distribution_server: Initial configuration of your distribution server or servers ============================================================ Configure a connection to one or more distribution servers so you can publish collections there. You only need to configure each distribution server once. You must repeat the other steps (building your collection tarball, preparing to publish, and publishing your collection) every time you publish a new collection or a new version of an existing collection. 1. Create a namespace on each distribution server you want to use. 2. Get an API token for each distribution server you want to use. 3. Specify the API token for each distribution server you want to use. .. _get_namespace: Creating a namespace -------------------- You must upload your collection into a namespace on each distribution server. If you have a login for Ansible Galaxy, your Ansible Galaxy username is usually also an Ansible Galaxy namespace. .. warning:: Namespaces on Ansible Galaxy cannot include hyphens. If you have a login for Ansible Galaxy that includes a hyphen, your Galaxy username is not also a Galaxy namespace. For example, ``awesome-user`` is a valid username for Ansible Galaxy, but it is not a valid namespace. You can create additional namespaces on Ansible Galaxy if you choose. For Red Hat Automation Hub and private Automation Hub you must create a namespace before you can upload your collection. To create a namespace: * To create a namespace on Galaxy, see `Galaxy namespaces `_ on the Galaxy docsite for details. * To create a namespace on Red Hat Automation Hub, see the `Ansible Certified Content FAQ `_. Specify the namespace in the :file:`galaxy.yaml` file for each collection. For more information on the :file:`galaxy.yaml` file, see :ref:`collections_galaxy_meta`. .. _galaxy_get_token: Getting your API token ---------------------- An API token authenticates your connection to each distribution server. You need a separate API token for each distribution server. Use the correct API token to connect to each distribution server securely and protect your content. To get your API token: * To get an API token for Galaxy, go to the `Galaxy profile preferences `_ page and click :guilabel:`API Key`. * To get an API token for Automation Hub, go to `the token page `_ and click :guilabel:`Load token`. .. _galaxy_specify_token: Specifying your API token and distribution server ------------------------------------------------- Each time you publish a collection, you must specify the API token and the distribution server to create a secure connection. You have two options for specifying the token and distribution server: * You can configure the token in configuration, as part of a ``galaxy_server_list`` entry in your :file:`ansible.cfg` file. Using configuration is the most secure option. * You can pass the token at the command line as an argument to the ``ansible-galaxy`` command. If you pass the token at the command line, you can specify the server at the command line, by using the default setting, or by setting the server in configuration. Passing the token at the command line is insecure, because typing secrets at the command line may expose them to other users on the system. .. _galaxy_token_ansible_cfg: Specifying the token and distribution server in configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, Ansible Galaxy is configured as the only distribution server. You can add other distribution servers and specify your API token or tokens in configuration by editing the ``galaxy_server_list`` section of your :file:`ansible.cfg` file. This is the most secure way to manage authentication for distribution servers. Specify a URL and token for each server. For example: .. code-block:: ini [galaxy] server_list = release_galaxy [galaxy_server.release_galaxy] url=https://galaxy.ansible.com/ token=abcdefghijklmnopqrtuvwxyz You cannot use ``apt-key`` with any servers defined in your :ref:`galaxy_server_list `. See :ref:`galaxy_server_config` for complete details. .. _galaxy_use_token_arg: Specifying the token at the command line ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can specify the API token at the command line using the ``--token`` argument of the :ref:`ansible-galaxy` command. There are three ways to specify the distribution server when passing the token at the command line: * using the ``--server`` argument of the :ref:`ansible-galaxy` command * relying on the default (https://galaxy.ansible.com) * setting a server in configuration by creating a :ref:`GALAXY_SERVER` setting in your :file:`ansible.cfg` file For example: .. code-block:: bash ansible-galaxy collection publish path/to/my_namespace-my_collection-1.0.0.tar.gz --token abcdefghijklmnopqrtuvwxyz .. warning:: Using the ``--token`` argument is insecure. Passing secrets at the command line may expose them to others on the system. .. _building_collections: Building your collection tarball ================================ After configuring one or more distribution servers, build a collection tarball. The collection tarball is the published artifact, the object that you upload and other users download to install your collection. To build a collection tarball: #. Review the version number in your :file:`galaxy.yaml` file. Each time you publish your collection, it must have a new version number. You cannot make changes to existing versions of your collection on a distribution server. If you try to upload the same collection version more than once, the distribution server returns the error ``Code: conflict.collection_exists``. Collections follow semantic versioning rules. For more information on versions, see :ref:`collection_versions`. For more information on the :file:`galaxy.yaml` file, see :ref:`collections_galaxy_meta`. #. Run ``ansible-galaxy collection build`` from inside the top-level directory of the collection. For example: .. code-block:: bash collection_dir#> ansible-galaxy collection build This command builds a tarball of the collection in the current directory, which you can upload to your selected distribution server:: my_collection/ ├── galaxy.yml ├── ... ├── my_namespace-my_collection-1.0.0.tar.gz └── ... .. note:: * To reduce the size of collections, certain files and folders are excluded from the collection tarball by default. See :ref:`ignoring_files_and_folders_collections` if your collection directory contains other files you want to exclude. * The current Galaxy maximum tarball size is 2 MB. You can upload your tarball to one or more distribution servers. You can also distribute your collection locally by copying the tarball to install your collection directly on target systems. .. _ignoring_files_and_folders_collections: Ignoring files and folders -------------------------- By default the build step includes all the files in the collection directory in the tarball except for the following: * ``galaxy.yml`` * ``*.pyc`` * ``*.retry`` * ``tests/output`` * previously built tarballs in the root directory * various version control directories such as ``.git/`` To exclude other files and folders from your collection tarball, set a list of file glob-like patterns in the ``build_ignore`` key in the collection's ``galaxy.yml`` file. These patterns use the following special characters for wildcard matching: * ``*``: Matches everything * ``?``: Matches any single character * ``[seq]``: Matches any character in sequence * ``[!seq]``:Matches any character not in sequence For example, to exclude the :file:`sensitive` folder within the ``playbooks`` folder as well any ``.tar.gz`` archives, set the following in your ``galaxy.yml`` file: .. code-block:: yaml build_ignore: - playbooks/sensitive - '*.tar.gz' For more information on the :file:`galaxy.yml` file, see :ref:`collections_galaxy_meta`. .. note:: The ``build_ignore`` feature is only supported with ``ansible-galaxy collection build`` in Ansible 2.10 or newer. .. _trying_collection_locally: Preparing to publish your collection ==================================== Each time you publish your collection, you must create a :ref:`new version ` on the distribution server. After you publish a version of a collection, you cannot delete or modify that version. To avoid unnecessary extra versions, check your collection for bugs, typos, and other issues locally before publishing: #. Install the collection locally. #. Review the locally installed collection before publishing a new version. Installing your collection locally ---------------------------------- You have two options for installing your collection locally: * Install your collection locally from the tarball. * Install your collection locally from your git repository. Installing your collection locally from the tarball ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To install your collection locally from the tarball, run ``ansible-galaxy collection install`` and specify the collection tarball. You can optionally specify a location using the ``-p`` flag. For example: .. code-block:: bash collection_dir#> ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections Install the tarball into a directory configured in :ref:`COLLECTIONS_PATHS` so Ansible can easily find and load the collection. If you do not specify a path value, ``ansible-galaxy collection install`` installs the collection in the first path defined in :ref:`COLLECTIONS_PATHS`. .. _collections_scm_install: Installing your collection locally from a git repository ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To install your collection locally from a git repository, specify the repository and the branch you want to install: .. code-block:: bash collection_dir#> ansible-galaxy collection install git+https://github.com/org/repo.git,devel .. include:: ../shared_snippets/installing_collections_git_repo.txt Reviewing your collection ------------------------- Review the collection: * Run a playbook that uses the modules and plugins in your collection. Verify that new features and functionality work as expected. For examples and more details see :ref:`Using collections `. * Check the documentation for typos. * Check that the version number of your tarball is higher than the latest published version on the distribution server or servers. * If you find any issues, fix them and rebuild the collection tarball. .. _collection_versions: Understanding collection versioning ----------------------------------- The only way to change a collection is to release a new version. The latest version of a collection (by highest version number) is the version displayed everywhere in Galaxy and Automation Hub. Users can still download older versions. Follow semantic versioning when setting the version for your collection. In summary: * Increment the major version number, ``x`` of ``x.y.z``, for an incompatible API change. * Increment the minor version number, ``y`` of ``x.y.z``, for new functionality in a backwards compatible manner (for example new modules/plugins, parameters, return values). * Increment the patch version number, ``z`` of ``x.y.z``, for backwards compatible bug fixes. Read the official `Semantic Versioning `_ documentation for details and examples. .. _publish_collection: Publishing your collection ========================== The last step in distributing your collection is publishing the tarball to Ansible Galaxy, Red Hat Automation Hub, or a privately hosted Automation Hub instance. You can publish your collection in two ways: * from the command line using the ``ansible-galaxy collection publish`` command * from the website of the distribution server (Galaxy, Automation Hub) itself .. _upload_collection_ansible_galaxy: .. _publish_collection_galaxy_cmd: Publishing a collection from the command line --------------------------------------------- To upload the collection tarball from the command line using ``ansible-galaxy``: .. code-block:: bash ansible-galaxy collection publish path/to/my_namespace-my_collection-1.0.0.tar.gz .. note:: This ansible-galaxy command assumes you have retrieved and stored your API token in configuration. See :ref:`galaxy_specify_token` for details. The ``ansible-galaxy collection publish`` command triggers an import process, just as if you uploaded the collection through the Galaxy website. The command waits until the import process completes before reporting the status back. If you want to continue without waiting for the import result, use the ``--no-wait`` argument and manually look at the import progress in your `My Imports `_ page. .. _upload_collection_galaxy: Publishing a collection from the website ---------------------------------------- To publish your collection directly on the Galaxy website: #. Go to the `My Content `_ page, and click the **Add Content** button on one of your namespaces. #. From the **Add Content** dialogue, click **Upload New Collection**, and select the collection archive file from your local filesystem. When you upload a collection, Ansible always uploads the tarball to the namespace specified in the collection metadata in the ``galaxy.yml`` file, no matter which namespace you select on the website. If you are not an owner of the namespace specified in your collection metadata, the upload request fails. After Galaxy uploads and accepts a collection, the website shows you the **My Imports** page. This page shows import process information. You can review any errors or warnings about your upload there. .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`collections_galaxy_meta` Table of fields used in the :file:`galaxy.yml` file `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_migrating.rst0000644000000000000000000001622100000000000030552 0ustar00rootroot00000000000000.. _migrate_to_collection: *************************************************** Migrating Ansible content to a different collection *************************************************** When you move content from one collection to another, for example to extract a set of related modules out of ``community.general`` to create a more focused collection, you must make sure the transition is easy for users to follow. .. contents:: :local: :depth: 2 Migrating content ================= Before you start migrating content from one collection to another, look at `Ansible Collection Checklist `_. To migrate content from one collection to another, if the collections are parts of `Ansible distribution `_: #. Copy content from the source (old) collection to the target (new) collection. #. Deprecate the module/plugin with ``removal_version`` scheduled for the next major version in ``meta/runtime.yml`` of the old collection. The deprecation must be released after the copied content has been included in a release of the new collection. #. When the next major release of the old collection is prepared: * remove the module/plugin from the old collection * remove the symlink stored in ``plugin/modules`` directory if appropriate (mainly when removing from ``community.general`` and ``community.network``) * remove related unit and integration tests * remove specific module utils * remove specific documentation fragments if there are any in the old collection * add a changelog fragment containing entries for ``removed_features`` and ``breaking_changes``; you can see an example of a changelog fragment in this `pull request `_ * change ``meta/runtime.yml`` in the old collection: * add ``redirect`` to the corresponding module/plugin's entry * in particular, add ``redirect`` for the removed module utils and documentation fragments if applicable * remove ``removal_version`` from there * remove related entries from ``tests/sanity/ignore.txt`` files if exist * remove changelog fragments for removed content that are not yet part of the changelog (in other words, do not modify `changelogs/changelog.yaml` and do not delete files mentioned in it) * remove requirements that are no longer required in ``tests/unit/requirements.txt``, ``tests/requirements.yml`` and ``galaxy.yml`` To implement these changes, you need to create at least three PRs: #. Create a PR against the new collection to copy the content. #. Deprecate the module/plugin in the old collection. #. Later create a PR against the old collection to remove the content according to the schedule. Adding the content to the new collection ---------------------------------------- Create a PR in the new collection to: #. Copy ALL the related files from the old collection. #. If it is an action plugin, include the corresponding module with documentation. #. If it is a module, check if it has a corresponding action plugin that should move with it. #. Check ``meta/`` for relevant updates to ``runtime.yml`` if it exists. #. Carefully check the moved ``tests/integration`` and ``tests/units`` and update for FQCN. #. Review ``tests/sanity/ignore-*.txt`` entries in the old collection. #. Update ``meta/runtime.yml`` in the old collection. Removing the content from the old collection -------------------------------------------- Create a PR against the source collection repository to remove the modules, module_utils, plugins, and docs_fragments related to this migration: #. If you are removing an action plugin, remove the corresponding module that contains the documentation. #. If you are removing a module, remove any corresponding action plugin that should stay with it. #. Remove any entries about removed plugins from ``meta/runtime.yml``. Ensure they are added into the new repo. #. Remove sanity ignore lines from ``tests/sanity/ignore\*.txt`` #. Remove associated integration tests from ``tests/integrations/targets/`` and unit tests from ``tests/units/plugins/``. #. if you are removing from content from ``community.general`` or ``community.network``, remove entries from ``.github/BOTMETA.yml``. #. Carefully review ``meta/runtime.yml`` for any entries you may need to remove or update, in particular deprecated entries. #. Update ``meta/runtime.yml`` to contain redirects for EVERY PLUGIN, pointing to the new collection name. .. warning:: Maintainers for the old collection have to make sure that the PR is merged in a way that it does not break user experience and semantic versioning: #. A new version containing the merged PR must not be released before the collection the content has been moved to has been released again, with that content contained in it. Otherwise the redirects cannot work and users relying on that content will experience breakage. #. Once 1.0.0 of the collection from which the content has been removed has been released, such PRs can only be merged for a new **major** version (in other words, 2.0.0, 3.0.0, and so on). Updating BOTMETA.yml -------------------- The ``BOTMETA.yml``, for example in `community.general collection repository `_, is the source of truth for: * ansibullbot If the old and/or new collection has ``ansibullbot``, its ``BOTMETA.yml`` must be updated correspondingly. Ansibulbot will know how to redirect existing issues and PRs to the new repo. The build process for docs.ansible.com will know where to find the module docs. .. code-block:: yaml $modules/monitoring/grafana/grafana_plugin.py: migrated_to: community.grafana $modules/monitoring/grafana/grafana_dashboard.py: migrated_to: community.grafana $modules/monitoring/grafana/grafana_datasource.py: migrated_to: community.grafana $plugins/callback/grafana_annotations.py: maintainers: $team_grafana labels: monitoring grafana migrated_to: community.grafana $plugins/doc_fragments/grafana.py: maintainers: $team_grafana labels: monitoring grafana migrated_to: community.grafana `Example PR `_ * The ``migrated_to:`` key must be added explicitly for every *file*. You cannot add ``migrated_to`` at the directory level. This is to allow module and plugin webdocs to be redirected to the new collection docs. * ``migrated_to:`` MUST be added for every: * module * plugin * module_utils * contrib/inventory script * You do NOT need to add ``migrated_to`` for: * Unit tests * Integration tests * ReStructured Text docs (anything under ``docs/docsite/rst/``) * Files that never existed in ``ansible/ansible:devel`` .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_shared.rst0000644000000000000000000001156100000000000030041 0ustar00rootroot00000000000000.. _collections_shared_resources: ************************************* Using shared resources in collections ************************************* Although developing Ansible modules contained in collections is similar to developing standalone Ansible modules, you use shared resources like documentation fragments and module utilities differently in collections. You can use documentation fragments within and across collections. You can use optional module utilities to support multiple versions of ansible-core in your collection. Collections can also depend on other collections. .. contents:: :local: :depth: 2 .. _docfragments_collections: Using documentation fragments in collections ============================================ To include documentation fragments in your collection: #. Create the documentation fragment: ``plugins/doc_fragments/fragment_name``. #. Refer to the documentation fragment with its FQCN. .. code-block:: yaml extends_documentation_fragment: - kubernetes.core.k8s_name_options - kubernetes.core.k8s_auth_options - kubernetes.core.k8s_resource_options - kubernetes.core.k8s_scale_options :ref:`module_docs_fragments` covers the basics for documentation fragments. The `kubernetes.core `_ collection includes a complete example. If you use FQCN, you can use documentation fragments from one collection in another collection. .. _optional_module_utils: Leveraging optional module utilities in collections =================================================== Optional module utilities let you adopt the latest features from the most recent ansible-core release in your collection-based modules without breaking your collection on older Ansible versions. With optional module utilities, you can use the latest features when running against the latest versions, while still providing fallback behaviors when running against older versions. This implementation, widely used in Python programming, wraps optional imports in conditionals or defensive `try/except` blocks, and implements fallback behaviors for missing imports. Ansible's module payload builder supports these patterns by treating any module_utils import nested in a block (e.g., `if`, `try`) as optional. If the requested import cannot be found during the payload build, it is simply omitted from the target payload and assumed that the importing code will handle its absence at runtime. Missing top-level imports of module_utils packages (imports that are not wrapped in a block statement of any kind) will fail the module payload build, and will not execute on the target. For example, the `ansible.module_utils.common.respawn` package is only available in Ansible 2.11 and higher. The following module code would fail during the payload build on Ansible 2.10 or earlier (as the requested Python module does not exist, and is not wrapped in a block to signal to the payload builder that it can be omitted from the module payload): .. code-block:: python from ansible.module_utils.common.respawn import respawn_module By wrapping the import statement in a ``try`` block, the payload builder will omit the Python module if it cannot be located, and assume that the Ansible module will handle it at runtime: .. code-block:: python try: from ansible.module_utils.common.respawn import respawn_module except ImportError: respawn_module = None ... if needs_respawn: if respawn_module: respawn_module(target) else: module.fail_json('respawn is not available in Ansible < 2.11, ensure that foopkg is installed') The optional import behavior also applies to module_utils imported from collections. .. _collection_dependencies: Listing collection dependencies =============================== We recommend that collections work as standalone, independent units, depending only on ansible-core. However, if your collection must depend on features and functionality from another collection, list the other collection or collections under ``dependencies`` in your collection's :file:`galaxy.yml` file. For more information on the :file:`galaxy.yml` file, see :ref:`collections_galaxy_meta`. You can use git repositories for collection dependencies during local development and testing. For example: .. code-block:: yaml dependencies: {'git@github.com:organization/repo_name.git': 'devel'} .. warning Do not use git repositories as dependencies for published collections. Dependencies for published collections must be other published collections. .. seealso:: :ref:`collections` Learn how to install and use collections. :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_structure.rst0000644000000000000000000003210300000000000030626 0ustar00rootroot00000000000000.. _collection_structure: ******************** Collection structure ******************** A collection is a simple data structure. None of the directories are required unless you have specific content that belongs in one of them. A collection does require a ``galaxy.yml`` file at the root level of the collection. This file contains all of the metadata that Galaxy and other tools need in order to package, build and publish the collection. .. contents:: :local: :depth: 2 Collection directories and files ================================ A collection can contain these directories and files: .. code-block:: shell-session collection/ ├── docs/ ├── galaxy.yml ├── meta/ │ └── runtime.yml ├── plugins/ │ ├── modules/ │ │ └── module1.py │ ├── inventory/ │ └── .../ ├── README.md ├── roles/ │ ├── role1/ │ ├── role2/ │ └── .../ ├── playbooks/ │ ├── files/ │ ├── vars/ │ ├── templates/ │ └── tasks/ └── tests/ .. note:: * Ansible only accepts ``.md`` extensions for the :file:`README` file and any files in the :file:`/docs` folder. * See the `ansible-collections `_ GitHub Org for examples of collection structure. * Not all directories are currently in use. Those are placeholders for future features. .. _galaxy_yml: galaxy.yml ---------- A collection must have a ``galaxy.yml`` file that contains the necessary information to build a collection artifact. See :ref:`collections_galaxy_meta` for details. .. _collections_doc_dir: docs directory -------------- Use the ``docs`` folder to describe how to use the roles and plugins the collection provides, role requirements, and so on. For certified collections, Automation Hub displays documents written in markdown in the main ``docs`` directory with no subdirectories. This will not display on https://docs.ansible.com. For community collections included in the Ansible PyPI package, docs.ansible.com displays documents written in reStructuredText (.rst) in a docsite/rst/ subdirectory. Define the structure of your extra documentation in ``docs/docsite/extra-docs.yml``: .. code-block:: yaml --- sections: - title: Scenario Guide toctree: - scenario_guide The index page of the documentation for your collection displays the title you define in ``docs/docsite/extra-docs.yml`` with a link to your extra documentation. For an example, see the `community.docker collection repo `_ and the `community.docker collection documentation `_. Plugin and module documentation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Keep the specific documentation for plugins and modules embedded as Python docstrings. Use ``ansible-doc`` to view documentation for plugins inside a collection: .. code-block:: bash ansible-doc -t lookup my_namespace.my_collection.lookup1 The ``ansible-doc`` command requires the fully qualified collection name (FQCN) to display specific plugin documentation. In this example, ``my_namespace`` is the Galaxy namespace and ``my_collection`` is the collection name within that namespace. .. note:: The Galaxy namespace of an Ansible collection is defined in the ``galaxy.yml`` file. It can be different from the GitHub organization or repository name. .. _collections_plugin_dir: plugins directory ----------------- Add a 'per plugin type' specific subdirectory here, including ``module_utils`` which is usable not only by modules, but by most plugins by using their FQCN. This is a way to distribute modules, lookups, filters, and so on without having to import a role in every play. Vars plugins are unsupported in collections. Cache plugins may be used in collections for fact caching, but are not supported for inventory plugins. .. _collection_module_utils: module_utils ^^^^^^^^^^^^ When coding with ``module_utils`` in a collection, the Python ``import`` statement needs to take into account the FQCN along with the ``ansible_collections`` convention. The resulting Python import will look like ``from ansible_collections.{namespace}.{collection}.plugins.module_utils.{util} import {something}`` The following example snippets show a Python and PowerShell module using both default Ansible ``module_utils`` and those provided by a collection. In this example the namespace is ``community``, the collection is ``test_collection``. In the Python example the ``module_util`` in question is called ``qradar`` such that the FQCN is ``community.test_collection.plugins.module_utils.qradar``: .. code-block:: python from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.six.moves.urllib.parse import urlencode, quote_plus from ansible.module_utils.six.moves.urllib.error import HTTPError from ansible_collections.community.test_collection.plugins.module_utils.qradar import QRadarRequest argspec = dict( name=dict(required=True, type='str'), state=dict(choices=['present', 'absent'], required=True), ) module = AnsibleModule( argument_spec=argspec, supports_check_mode=True ) qradar_request = QRadarRequest( module, headers={"Content-Type": "application/json"}, not_rest_data_keys=['state'] ) Note that importing something from an ``__init__.py`` file requires using the file name: .. code-block:: python from ansible_collections.namespace.collection_name.plugins.callback.__init__ import CustomBaseClass In the PowerShell example the ``module_util`` in question is called ``hyperv`` such that the FQCN is ``community.test_collection.plugins.module_utils.hyperv``: .. code-block:: powershell #!powershell #AnsibleRequires -CSharpUtil Ansible.Basic #AnsibleRequires -PowerShell ansible_collections.community.test_collection.plugins.module_utils.hyperv $spec = @{ name = @{ required = $true; type = "str" } state = @{ required = $true; choices = @("present", "absent") } } $module = [Ansible.Basic.AnsibleModule]::Create($args, $spec) Invoke-HyperVFunction -Name $module.Params.name $module.ExitJson() .. _collections_roles_dir: roles directory ---------------- Collection roles are mostly the same as existing roles, but with a couple of limitations: - Role names are now limited to contain only lowercase alphanumeric characters, plus ``_`` and start with an alpha character. - Roles in a collection cannot contain plugins any more. Plugins must live in the collection ``plugins`` directory tree. Each plugin is accessible to all roles in the collection. The directory name of the role is used as the role name. Therefore, the directory name must comply with the above role name rules. The collection import into Galaxy will fail if a role name does not comply with these rules. You can migrate 'traditional roles' into a collection but they must follow the rules above. You may need to rename roles if they don't conform. You will have to move or link any role-based plugins to the collection specific directories. .. note:: For roles imported into Galaxy directly from a GitHub repository, setting the ``role_name`` value in the role's metadata overrides the role name used by Galaxy. For collections, that value is ignored. When importing a collection, Galaxy uses the role directory as the name of the role and ignores the ``role_name`` metadata value. playbooks directory -------------------- In prior releases, you could reference playbooks in this directory using the full path to the playbook file from the command line. In ansible-core 2.11 and later, you can use the FQCN, ``namespace.collection.playbook`` (with or without extension), to reference the playbooks from the command line or from ``import_playbook``. This will keep the playbook in 'collection context', as if you had added ``collections: [ namespace.collection ]`` to it. You can have most of the subdirectories you would expect, such ``files/``, ``vars/`` or ``templates/`` but no ``roles/`` since those are handled already in the collection. .. _developing_collections_tests_directory: tests directory ---------------- Ansible Collections are tested much like Ansible itself, by using the `ansible-test` utility which is released as part of Ansible, version 2.9.0 and newer. Because Ansible Collections are tested using the same tooling as Ansible itself, via `ansible-test`, all Ansible developer documentation for testing is applicable for authoring Collections Tests with one key concept to keep in mind. See :ref:`testing_collections` for specific information on how to test collections with ``ansible-test``. When reading the :ref:`developing_testing` documentation, there will be content that applies to running Ansible from source code via a git clone, which is typical of an Ansible developer. However, it's not always typical for an Ansible Collection author to be running Ansible from source but instead from a stable release, and to create Collections it is not necessary to run Ansible from source. Therefore, when references of dealing with `ansible-test` binary paths, command completion, or environment variables are presented throughout the :ref:`developing_testing` documentation; keep in mind that it is not needed for Ansible Collection Testing because the act of installing the stable release of Ansible containing `ansible-test` is expected to setup those things for you. .. _meta_runtime_yml: meta directory -------------- A collection can store some additional metadata in a ``runtime.yml`` file in the collection's ``meta`` directory. The ``runtime.yml`` file supports the top level keys: - *requires_ansible*: The version of Ansible Core (ansible-core) required to use the collection. Multiple versions can be separated with a comma. .. code:: yaml requires_ansible: ">=2.10,<2.11" .. note:: although the version is a `PEP440 Version Specifier `_ under the hood, Ansible deviates from PEP440 behavior by truncating prerelease segments from the Ansible version. This means that Ansible 2.11.0b1 is compatible with something that ``requires_ansible: ">=2.11"``. - *plugin_routing*: Content in a collection that Ansible needs to load from another location or that has been deprecated/removed. The top level keys of ``plugin_routing`` are types of plugins, with individual plugin names as subkeys. To define a new location for a plugin, set the ``redirect`` field to another name. To deprecate a plugin, use the ``deprecation`` field to provide a custom warning message and the removal version or date. If the plugin has been renamed or moved to a new location, the ``redirect`` field should also be provided. If a plugin is being removed entirely, ``tombstone`` can be used for the fatal error message and removal version or date. .. code:: yaml plugin_routing: inventory: kubevirt: redirect: community.general.kubevirt my_inventory: tombstone: removal_version: "2.0.0" warning_text: my_inventory has been removed. Please use other_inventory instead. modules: my_module: deprecation: removal_date: "2021-11-30" warning_text: my_module will be removed in a future release of this collection. Use another.collection.new_module instead. redirect: another.collection.new_module podman_image: redirect: containers.podman.podman_image module_utils: ec2: redirect: amazon.aws.ec2 util_dir.subdir.my_util: redirect: namespace.name.my_util - *import_redirection* A mapping of names for Python import statements and their redirected locations. .. code:: yaml import_redirection: ansible.module_utils.old_utility: redirect: ansible_collections.namespace_name.collection_name.plugins.module_utils.new_location - *action_groups* A mapping of groups and the list of action plugin and module names they contain. They may also have a special 'metadata' dictionary in the list, which can be used to include actions from other groups. .. code:: yaml action_groups: groupname: # The special metadata dictionary. All action/module names should be strings. - metadata: extend_group: - another.collection.groupname - another_group - my_action another_group: - my_module - another.collection.another_module .. seealso:: :ref:`distributing_collections` Learn how to package and publish your collection :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_collections_testing.rst0000644000000000000000000001344400000000000030252 0ustar00rootroot00000000000000.. _testing_collections: ******************* Testing collections ******************* Testing your collection ensures that your code works well and integrates well with the rest of the Ansible ecosystem. Your collection should pass the general compile and sanity tests for Ansible code. You should also add unit tests to cover the code in your collection and integration tests to cover the interactions between your collection and ansible-core. .. contents:: :local: :depth: 2 Testing tools ============= The main tool for testing collections is ``ansible-test``, Ansible's testing tool described in :ref:`developing_testing`. You can run several compile and sanity checks, as well as run unit and integration tests for plugins using ``ansible-test``. When you test collections, test against the ansible-core version(s) you are targeting. You must always execute ``ansible-test`` from the root directory of a collection. You can run ``ansible-test`` in Docker containers without installing any special requirements. The Ansible team uses this approach in Azure Pipelines both in the ansible/ansible GitHub repository and in the large community collections such as `community.general `_ and `community.network `_. The examples below demonstrate running tests in Docker containers. Compile and sanity tests ------------------------ To run all compile and sanity tests: .. code-block:: shell-session ansible-test sanity --docker default -v See :ref:`testing_compile` and :ref:`testing_sanity` for more information. See the :ref:`full list of sanity tests ` for details on the sanity tests and how to fix identified issues. Adding unit tests ----------------- You must place unit tests in the appropriate ``tests/unit/plugins/`` directory. For example, you would place tests for ``plugins/module_utils/foo/bar.py`` in ``tests/unit/plugins/module_utils/foo/test_bar.py`` or ``tests/unit/plugins/module_utils/foo/bar/test_bar.py``. For examples, see the `unit tests in community.general `_. To run all unit tests for all supported Python versions: .. code-block:: shell-session ansible-test units --docker default -v To run all unit tests only for a specific Python version: .. code-block:: shell-session ansible-test units --docker default -v --python 3.6 To run only a specific unit test: .. code-block:: shell-session ansible-test units --docker default -v --python 3.6 tests/unit/plugins/module_utils/foo/test_bar.py You can specify Python requirements in the ``tests/unit/requirements.txt`` file. See :ref:`testing_units` for more information, especially on fixture files. Adding integration tests ------------------------ You must place integration tests in the appropriate ``tests/integration/targets/`` directory. For module integration tests, you can use the module name alone. For example, you would place integration tests for ``plugins/modules/foo.py`` in a directory called ``tests/integration/targets/foo/``. For non-module plugin integration tests, you must add the plugin type to the directory name. For example, you would place integration tests for ``plugins/connections/bar.py`` in a directory called ``tests/integration/targets/connection_bar/``. For lookup plugins, the directory must be called ``lookup_foo``, for inventory plugins, ``inventory_foo``, and so on. You can write two different kinds of integration tests: * Ansible role tests run with ``ansible-playbook`` and validate various aspects of the module. They can depend on other integration tests (usually named ``prepare_bar`` or ``setup_bar``, which prepare a service or install a requirement named ``bar`` in order to test module ``foo``) to set-up required resources, such as installing required libraries or setting up server services. * ``runme.sh`` tests run directly as scripts. They can set up inventory files, and execute ``ansible-playbook`` or ``ansible-inventory`` with various settings. For examples, see the `integration tests in community.general `_. See also :ref:`testing_integration` for more details. Since integration tests can install requirements, and set-up, start and stop services, we recommended running them in docker containers or otherwise restricted environments whenever possible. By default, ``ansible-test`` supports Docker images for several operating systems. See the `list of supported docker images `_ for all options. Use the ``default`` image mainly for platform-independent integration tests, such as those for cloud modules. The following examples use the ``centos8`` image. To execute all integration tests for a collection: .. code-block:: shell-session ansible-test integration --docker centos8 -v If you want more detailed output, run the command with ``-vvv`` instead of ``-v``. Alternatively, specify ``--retry-on-error`` to automatically re-run failed tests with higher verbosity levels. To execute only the integration tests in a specific directory: .. code-block:: shell-session ansible-test integration --docker centos8 -v connection_bar You can specify multiple target names. Each target name is the name of a directory in ``tests/integration/targets/``. .. seealso:: :ref:`developing_testing` More resources on testing Ansible :ref:`contributing_maintained_collections` Guidelines for contributing to selected collections `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_core.rst0000644000000000000000000000151000000000000025116 0ustar00rootroot00000000000000*************************** Developing ``ansible-core`` *************************** Although ``ansible-core`` (the code hosted in the `ansible/ansible repository `_ on GitHub) includes a few plugins that can be swapped out via playbook directives or configuration, much of the code there is not modular. The documents here give insight into how the parts of ``ansible-core`` work together. .. toctree:: :maxdepth: 1 developing_program_flow_modules .. seealso:: :ref:`developing_api` Learn about the Python API for task execution :ref:`developing_plugins` Learn about developing plugins `Mailing List `_ The development mailing list `irc.libera.chat `_ #ansible-devel IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_inventory.rst0000644000000000000000000005543000000000000026235 0ustar00rootroot00000000000000.. _developing_inventory: **************************** Developing dynamic inventory **************************** Ansible can pull inventory information from dynamic sources, including cloud sources, by using the supplied :ref:`inventory plugins `. For details about how to pull inventory information, see :ref:`dynamic_inventory`. If the source you want is not currently covered by existing plugins, you can create your own inventory plugin as with any other plugin type. In previous versions, you had to create a script or program that could output JSON in the correct format when invoked with the proper arguments. You can still use and write inventory scripts, as we ensured backwards compatibility via the :ref:`script inventory plugin ` and there is no restriction on the programming language used. If you choose to write a script, however, you will need to implement some features yourself such as caching, configuration management, dynamic variable and group composition, and so on. If you use :ref:`inventory plugins ` instead, you can use the Ansible codebase and add these common features automatically. .. contents:: Topics :local: .. _inventory_sources: Inventory sources ================= Inventory sources are the input strings that inventory plugins work with. An inventory source can be a path to a file or to a script, or it can be raw data that the plugin can interpret. The table below shows some examples of inventory plugins and the source types that you can pass to them with ``-i`` on the command line. +--------------------------------------------+-----------------------------------------+ | Plugin | Source | +--------------------------------------------+-----------------------------------------+ | :ref:`host list ` | A comma-separated list of hosts | +--------------------------------------------+-----------------------------------------+ | :ref:`yaml ` | Path to a YAML format data file | +--------------------------------------------+-----------------------------------------+ | :ref:`constructed ` | Path to a YAML configuration file | +--------------------------------------------+-----------------------------------------+ | :ref:`ini ` | Path to an INI formatted data file | +--------------------------------------------+-----------------------------------------+ | :ref:`virtualbox ` | Path to a YAML configuration file | +--------------------------------------------+-----------------------------------------+ | :ref:`script plugin ` | Path to an executable that outputs JSON | +--------------------------------------------+-----------------------------------------+ .. _developing_inventory_inventory_plugins: Inventory plugins ================= Like most plugin types (except modules), inventory plugins must be developed in Python. They execute on the controller and should therefore adhere to the :ref:`control_node_requirements`. Most of the documentation in :ref:`developing_plugins` also applies here. You should read that document first for a general understanding and then come back to this document for specifics on inventory plugins. Normally, inventory plugins are executed at the start of a run, and before the playbooks, plays, or roles are loaded. However, you can use the ``meta: refresh_inventory`` task to clear the current inventory and execute the inventory plugins again, and this task will generate a new inventory. If you use the persistent cache, inventory plugins can also use the configured cache plugin to store and retrieve data. Caching inventory avoids making repeated and costly external calls. .. _developing_an_inventory_plugin: Developing an inventory plugin ------------------------------ The first thing you want to do is use the base class: .. code-block:: python from ansible.plugins.inventory import BaseInventoryPlugin class InventoryModule(BaseInventoryPlugin): NAME = 'myplugin' # used internally by Ansible, it should match the file name but not required If the inventory plugin is in a collection, the NAME should be in the 'namespace.collection_name.myplugin' format. The base class has a couple of methods that each plugin should implement and a few helpers for parsing the inventory source and updating the inventory. After you have the basic plugin working, you can incorporate other features by adding more base classes: .. code-block:: python from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): NAME = 'myplugin' For the bulk of the work in a plugin, we mostly want to deal with 2 methods ``verify_file`` and ``parse``. .. _inventory_plugin_verify_file: verify_file method ^^^^^^^^^^^^^^^^^^ Ansible uses this method to quickly determine if the inventory source is usable by the plugin. The determination does not need to be 100% accurate, as there might be an overlap in what plugins can handle and by default Ansible will try the enabled plugins as per their sequence. .. code-block:: python def verify_file(self, path): ''' return true/false if this is possibly a valid file for this plugin to consume ''' valid = False if super(InventoryModule, self).verify_file(path): # base class verifies that file exists and is readable by current user if path.endswith(('virtualbox.yaml', 'virtualbox.yml', 'vbox.yaml', 'vbox.yml')): valid = True return valid In the above example, from the :ref:`virtualbox inventory plugin `, we screen for specific file name patterns to avoid attempting to consume any valid YAML file. You can add any type of condition here, but the most common one is 'extension matching'. If you implement extension matching for YAML configuration files, the path suffix . should be accepted. All valid extensions should be documented in the plugin description. The following is another example that does not use a 'file' but the inventory source string itself, from the :ref:`host list ` plugin: .. code-block:: python def verify_file(self, path): ''' don't call base class as we don't expect a path, but a host list ''' host_list = path valid = False b_path = to_bytes(host_list, errors='surrogate_or_strict') if not os.path.exists(b_path) and ',' in host_list: # the path does NOT exist and there is a comma to indicate this is a 'host list' valid = True return valid This method is just to expedite the inventory process and avoid unnecessary parsing of sources that are easy to filter out before causing a parse error. .. _inventory_plugin_parse: parse method ^^^^^^^^^^^^ This method does the bulk of the work in the plugin. It takes the following parameters: * inventory: inventory object with existing data and the methods to add hosts/groups/variables to inventory * loader: Ansible's DataLoader. The DataLoader can read files, auto load JSON/YAML and decrypt vaulted data, and cache read files. * path: string with inventory source (this is usually a path, but is not required) * cache: indicates whether the plugin should use or avoid caches (cache plugin and/or loader) The base class does some minimal assignment for reuse in other methods. .. code-block:: python def parse(self, inventory, loader, path, cache=True): self.loader = loader self.inventory = inventory self.templar = Templar(loader=loader) It is up to the plugin now to parse the provided inventory source and translate it into Ansible inventory. To facilitate this, the example below uses a few helper functions: .. code-block:: python NAME = 'myplugin' def parse(self, inventory, loader, path, cache=True): # call base method to ensure properties are available for use with other helper methods super(InventoryModule, self).parse(inventory, loader, path, cache) # this method will parse 'common format' inventory sources and # update any options declared in DOCUMENTATION as needed config = self._read_config_data(path) # if NOT using _read_config_data you should call set_options directly, # to process any defined configuration for this plugin, # if you don't define any options you can skip #self.set_options() # example consuming options from inventory source mysession = apilib.session(user=self.get_option('api_user'), password=self.get_option('api_pass'), server=self.get_option('api_server') ) # make requests to get data to feed into inventory mydata = mysession.getitall() #parse data and create inventory objects: for colo in mydata: for server in mydata[colo]['servers']: self.inventory.add_host(server['name']) self.inventory.set_variable(server['name'], 'ansible_host', server['external_ip']) The specifics will vary depending on API and structure returned. Remember that if you get an inventory source error or any other issue, you should ``raise AnsibleParserError`` to let Ansible know that the source was invalid or the process failed. For examples on how to implement an inventory plugin, see the source code here: `lib/ansible/plugins/inventory `_. .. _inventory_plugin_caching: inventory cache ^^^^^^^^^^^^^^^ To cache the inventory, extend the inventory plugin documentation with the inventory_cache documentation fragment and use the Cacheable base class. .. code-block:: yaml extends_documentation_fragment: - inventory_cache .. code-block:: python class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): NAME = 'myplugin' Next, load the cache plugin specified by the user to read from and update the cache. If your inventory plugin uses YAML-based configuration files and the ``_read_config_data`` method, the cache plugin is loaded within that method. If your inventory plugin does not use ``_read_config_data``, you must load the cache explicitly with ``load_cache_plugin``. .. code-block:: python NAME = 'myplugin' def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path) self.load_cache_plugin() Before using the cache plugin, you must retrieve a unique cache key by using the ``get_cache_key`` method. This task needs to be done by all inventory modules using the cache, so that you don't use/overwrite other parts of the cache. .. code-block:: python def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path) self.load_cache_plugin() cache_key = self.get_cache_key(path) Now that you've enabled caching, loaded the correct plugin, and retrieved a unique cache key, you can set up the flow of data between the cache and your inventory using the ``cache`` parameter of the ``parse`` method. This value comes from the inventory manager and indicates whether the inventory is being refreshed (such as via ``--flush-cache`` or the meta task ``refresh_inventory``). Although the cache shouldn't be used to populate the inventory when being refreshed, the cache should be updated with the new inventory if the user has enabled caching. You can use ``self._cache`` like a dictionary. The following pattern allows refreshing the inventory to work in conjunction with caching. .. code-block:: python def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path) self.load_cache_plugin() cache_key = self.get_cache_key(path) # cache may be True or False at this point to indicate if the inventory is being refreshed # get the user's cache option too to see if we should save the cache if it is changing user_cache_setting = self.get_option('cache') # read if the user has caching enabled and the cache isn't being refreshed attempt_to_read_cache = user_cache_setting and cache # update if the user has caching enabled and the cache is being refreshed; update this value to True if the cache has expired below cache_needs_update = user_cache_setting and not cache # attempt to read the cache if inventory isn't being refreshed and the user has caching enabled if attempt_to_read_cache: try: results = self._cache[cache_key] except KeyError: # This occurs if the cache_key is not in the cache or if the cache_key expired, so the cache needs to be updated cache_needs_update = True if not attempt_to_read_cache or cache_needs_update: # parse the provided inventory source results = self.get_inventory() if cache_needs_update: self._cache[cache_key] = results # submit the parsed data to the inventory object (add_host, set_variable, etc) self.populate(results) After the ``parse`` method is complete, the contents of ``self._cache`` is used to set the cache plugin if the contents of the cache have changed. You have three other cache methods available: - ``set_cache_plugin`` forces the cache plugin to be set with the contents of ``self._cache``, before the ``parse`` method completes - ``update_cache_if_changed`` sets the cache plugin only if ``self._cache`` has been modified, before the ``parse`` method completes - ``clear_cache`` flushes the cache, ultimately by calling the cache plugin's ``flush()`` method, whose implementation is dependent upon the particular cache plugin in use. Note that if the user is using the same cache backend for facts and inventory, both will get flushed. To avoid this, the user can specify a distinct cache backend in their inventory plugin configuration. constructed features ^^^^^^^^^^^^^^^^^^^^ Inventory plugins can create host variables and groups from Jinja2 expressions and variables by using features from the ``constructed`` inventory plugin. To do this, use the ``Constructable`` base class and extend the inventory plugin's documentation with the ``constructed`` documentation fragment. .. code-block:: yaml extends_documentation_fragment: - constructed .. code-block:: python class InventoryModule(BaseInventoryPlugin, Constructable): NAME = 'ns.coll.myplugin' The three main options from the ``constructed`` documentation fragment are ``compose``, ``keyed_groups``, and ``groups``. See the ``constructed`` inventory plugin for examples on using these. ``compose`` is a dictionary of variable names and Jinja2 expressions. Once a host is added to inventory and any initial variables have been set, call the method ``_set_composite_vars`` to add composed host variables. If this is done before adding ``keyed_groups`` and ``groups``, the group generation will be able to use the composed variables. .. code-block:: python def add_host(self, hostname, host_vars): self.inventory.add_host(hostname, group='all') for var_name, var_value in host_vars.items(): self.inventory.set_variable(hostname, var_name, var_value) # Determines if composed variables or groups using nonexistent variables is an error strict = self.get_option('strict') # Add variables created by the user's Jinja2 expressions to the host self._set_composite_vars(self.get_option('compose'), host_vars, hostname, strict=True) # The following two methods combine the provided variables dictionary with the latest host variables # Using these methods after _set_composite_vars() allows groups to be created with the composed variables self._add_host_to_composed_groups(self.get_option('groups'), host_vars, hostname, strict=strict) self._add_host_to_keyed_groups(self.get_option('keyed_groups'), host_vars, hostname, strict=strict) By default, group names created with ``_add_host_to_composed_groups()`` and ``_add_host_to_keyed_groups()`` are valid Python identifiers. Invalid characters are replaced with an underscore ``_``. A plugin can change the sanitization used for the constructed features by setting ``self._sanitize_group_name`` to a new function. The core engine also does sanitization, so if the custom function is less strict it should be used in conjunction with the configuration setting ``TRANSFORM_INVALID_GROUP_CHARS``. .. code-block:: python from ansible.inventory.group import to_safe_group_name class InventoryModule(BaseInventoryPlugin, Constructable): NAME = 'ns.coll.myplugin' @staticmethod def custom_sanitizer(name): return to_safe_group_name(name, replacer='') def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path) self._sanitize_group_name = custom_sanitizer .. _inventory_source_common_format: Common format for inventory sources ----------------------------------- To simplify development, most plugins use a standard YAML-based configuration file as the inventory source. The file has only one required field ``plugin``, which should contain the name of the plugin that is expected to consume the file. Depending on other common features used, you might need other fields, and you can add custom options in each plugin as required. For example, if you use the integrated caching, ``cache_plugin``, ``cache_timeout`` and other cache-related fields could be present. .. _inventory_development_auto: The 'auto' plugin ----------------- From Ansible 2.5 onwards, we include the :ref:`auto inventory plugin ` and enable it by default. If the ``plugin`` field in your standard configuration file matches the name of your inventory plugin, the ``auto`` inventory plugin will load your plugin. The 'auto' plugin makes it easier to use your plugin without having to update configurations. .. _inventory_scripts: .. _developing_inventory_scripts: Inventory scripts ================= Even though we now have inventory plugins, we still support inventory scripts, not only for backwards compatibility but also to allow users to use other programming languages. .. _inventory_script_conventions: Inventory script conventions ---------------------------- Inventory scripts must accept the ``--list`` and ``--host `` arguments. Although other arguments are allowed, Ansible will not use them. Such arguments might still be useful for executing the scripts directly. When the script is called with the single argument ``--list``, the script must output to stdout a JSON object that contains all the groups to be managed. Each group's value should be either an object containing a list of each host, any child groups, and potential group variables, or simply a list of hosts: .. code-block:: json { "group001": { "hosts": ["host001", "host002"], "vars": { "var1": true }, "children": ["group002"] }, "group002": { "hosts": ["host003","host004"], "vars": { "var2": 500 }, "children":[] } } If any of the elements of a group are empty, they may be omitted from the output. When called with the argument ``--host `` (where is a host from above), the script must print a JSON object, either empty or containing variables to make them available to templates and playbooks. For example: .. code-block:: json { "VAR001": "VALUE", "VAR002": "VALUE" } Printing variables is optional. If the script does not print variables, it should print an empty JSON object. .. _inventory_script_tuning: Tuning the external inventory script ------------------------------------ .. versionadded:: 1.3 The stock inventory script system mentioned above works for all versions of Ansible, but calling ``--host`` for every host can be rather inefficient, especially if it involves API calls to a remote subsystem. To avoid this inefficiency, if the inventory script returns a top-level element called "_meta", it is possible to return all the host variables in a single script execution. When this meta element contains a value for "hostvars", the inventory script will not be invoked with ``--host`` for each host. This behavior results in a significant performance increase for large numbers of hosts. The data to be added to the top-level JSON object looks like this: .. code-block:: text { # results of inventory script as above go here # ... "_meta": { "hostvars": { "host001": { "var001" : "value" }, "host002": { "var002": "value" } } } } To satisfy the requirements of using ``_meta``, to prevent ansible from calling your inventory with ``--host`` you must at least populate ``_meta`` with an empty ``hostvars`` object. For example: .. code-block:: text { # results of inventory script as above go here # ... "_meta": { "hostvars": {} } } .. _replacing_inventory_ini_with_dynamic_provider: If you intend to replace an existing static inventory file with an inventory script, it must return a JSON object which contains an 'all' group that includes every host in the inventory as a member and every group in the inventory as a child. It should also include an 'ungrouped' group which contains all hosts which are not members of any other group. A skeleton example of this JSON object is: .. code-block:: json { "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] }, "ungrouped": { "children": [ ] } } An easy way to see how this should look is using :ref:`ansible-inventory`, which also supports ``--list`` and ``--host`` parameters like an inventory script would. .. seealso:: :ref:`developing_api` Python API to Playbooks and Ad Hoc Task Execution :ref:`developing_modules_general` Get started with developing a module :ref:`developing_plugins` How to develop plugins `AWX `_ REST API endpoint and GUI for Ansible, syncs with dynamic inventory `Development Mailing List `_ Mailing list for development topics :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.449556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_locally.rst0000644000000000000000000002321200000000000025630 0ustar00rootroot00000000000000.. _using_local_modules_and_plugins: .. _developing_locally: ********************************** Adding modules and plugins locally ********************************** You can extend Ansible by adding custom modules or plugins. You can create them from scratch or copy existing ones for local use. You can store a local module or plugin on your Ansible control node and share it with your team or organization. You can also share plugins and modules by including them in a collection, then publishing the collection on Ansible Galaxy. If you are using a local module or plugin but Ansible cannot find it, this page is all you need. If you want to create a plugin or a module, see :ref:`developing_plugins`, :ref:`developing_modules_general` and :ref:`developing_collections`. Extending Ansible with local modules and plugins offers shortcuts such as: * You can copy other people's modules and plugins. * When writing a new module, you can choose any programming language you like. * You do not have to clone any repositories. * You do not have to open a pull request. * You do not have to add tests (though we recommend that you do!). .. contents:: :local: .. _modules_vs_plugins: Modules and plugins: what is the difference? ============================================ If you are looking to add functionality to Ansible, you might wonder whether you need a module or a plugin. Here is a quick overview to help you understand what you need: * Modules are reusable, standalone scripts that can be used by the Ansible API, the :command:`ansible` command, or the :command:`ansible-playbook` command. Modules provide a defined interface. Each module accepts arguments and returns information to Ansible by printing a JSON string to stdout before exiting. Modules execute on the target system (usually that means on a remote system) in separate processes. Modules are technically plugins, but for historical reasons we do not usually talk about "module plugins". * :ref:`Plugins ` extend Ansible's core functionality and execute on the control node within the ``/usr/bin/ansible`` process. Plugins offer options and extensions for the core features of Ansible - transforming data, logging output, connecting to inventory, and more. .. _use_collections: Adding modules and plugins in collections ========================================= You can add modules and plugins by :ref:`creating a collection `. With a collection, you can use custom modules and plugins in any playbook or role. You can share your collection easily at any time through Ansible Galaxy. The rest of this page describes other methods of using local, standalone modules or plugins. .. _local_modules: Adding a module outside of a collection ======================================= You can configure Ansible to load standalone local modules in a specified location or locations and make them available to all playbooks and roles. Alternatively, you can make a non-collection local module available only to specific playbooks or roles. Adding standalone local modules for all playbooks and roles ----------------------------------------------------------- To load standalone local modules automatically and make them available to all playbooks and roles, use the :ref:`DEFAULT_MODULE_PATH` configuration setting or the ``ANSIBLE_LIBRARY`` environment variable. The configuration setting and environment variable take a colon-separated list, similar to ``$PATH``. You have two options: * Add your standalone local module to one of the default configured locations. See the :ref:`DEFAULT_MODULE_PATH` configuration setting for details. Default locations may change without notice. * Add the location of your standalone local module to an environment variable or configuration: * the ``ANSIBLE_LIBRARY`` environment variable * the :ref:`DEFAULT_MODULE_PATH` configuration setting To view your current configuration settings for modules: .. code-block:: text ansible-config dump |grep DEFAULT_MODULE_PATH After you save your module file in one of these locations, Ansible loads it and you can use it in any local task, playbook, or role. To confirm that ``my_local_module`` is available: * type ``ansible localhost -m my_local_module`` to see the output for that module, or * type ``ansible-doc -t module my_local_module`` to see the documentation for that module .. note:: Currently, the ``ansible-doc`` command can parse module documentation only from modules written in Python. If you have a module written in a programming language other than Python, please write the documentation in a Python file adjacent to the module file. Adding standalone local modules for selected playbooks or a single role ----------------------------------------------------------------------- Ansible automatically loads all executable files from certain directories adjacent to your playbook or role as modules. Standalone modules in these locations are available only to the specific playbook, playbooks, or role in the parent directory. * To use a standalone module only in a selected playbook or playbooks, store the module in a subdirectory called ``library`` in the directory that contains the playbook or playbooks. * To use a standalone module only in a single role, store the module in a subdirectory called ``library`` within that role. .. warning:: Roles contained in collections cannot contain any modules or other plugins. All plugins in a collection must live in the collection ``plugins`` directory tree. All plugins in that tree are accessible to all roles in the collection. If you are developing new modules, we recommend distributing them in :ref:`collections `, not in roles. .. _distributing_plugins: .. _local_plugins: Adding a non-module plugin locally outside of a collection ========================================================== You can configure Ansible to load standalone local plugins in a specified location or locations and make them available to all playbooks and roles. Alternatively, you can make a standalone local plugin available only to specific playbooks or roles. .. note:: Although modules are plugins, the naming patterns for directory names and environment variables that apply to other plugin types do not apply to modules. See :ref:`local_modules`. Adding local non-module plugins for all playbooks and roles ----------------------------------------------------------- To load standalone local plugins automatically and make them available to all playbooks and roles, use the configuration setting or environment variable for the type of plugin you are adding. These configuration settings and environment variables take a colon-separated list, similar to ``$PATH``. You have two options: * Add your local plugin to one of the default configured locations. See :ref:`configuration settings ` for details on the correct configuration setting for the plugin type. Default locations may change without notice. * Add the location of your local plugin to an environment variable or configuration: * the relevant ``ANSIBLE_plugin_type_PLUGINS`` environment variable - for example, ``$ANSIBLE_INVENTORY_PLUGINS`` or ``$ANSIBLE_VARS_PLUGINS`` * the relevant ``plugin_type_PATH`` configuration setting, most of which begin with ``DEFAULT_`` - for example, ``DEFAULT_CALLBACK_PLUGIN_PATH`` or ``DEFAULT_FILTER_PLUGIN_PATH`` or ``BECOME_PLUGIN_PATH`` To view your current configuration settings for non-module plugins: .. code-block:: text ansible-config dump |grep plugin_type_PATH After your plugin file is added to one of these locations, Ansible loads it and you can use it in any local module, task, playbook, or role. For more information on environment variables and configuration settings, see :ref:`ansible_configuration_settings`. To confirm that ``plugins/plugin_type/my_local_plugin`` is available: * type ``ansible-doc -t my_local_lookup_plugin`` to see the documentation for that plugin - for example, ``ansible-doc -t lookup my_local_lookup_plugin`` The ``ansible-doc`` command works for most plugin types, but not for action, filter, or test plugins. See :ref:`ansible-doc` for more details. Adding standalone local plugins for selected playbooks or a single role ----------------------------------------------------------------------- Ansible automatically loads all plugins from certain directories adjacent to your playbook or role, loading each type of plugin separately from a directory named for the type of plugin. Standalone plugins in these locations are available only to the specific playbook, playbooks, or role in the parent directory. * To use a standalone plugin only in a selected playbook or playbooks, store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``callback_plugins`` or ``inventory_plugins``) in the directory that contains the playbooks. These directories must use the ``_plugins`` suffix. For a full list of plugin types, see :ref:`working_with_plugins`. * To use a standalone plugin only in a single role, store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``cache_plugins`` or ``strategy_plugins``) within that role. When shipped as part of a role, the plugin is available as soon as the role is executed. These directories must use the ``_plugins`` suffix. For a full list of plugin types, see :ref:`working_with_plugins`. .. warning:: Roles contained in collections cannot contain any plugins. All plugins in a collection must live in the collection ``plugins`` directory tree. All plugins in that tree are accessible to all roles in the collection. If you are developing new plugins, we recommend distributing them in :ref:`collections `, not in roles. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.450556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_module_utilities.rst0000644000000000000000000001154000000000000027552 0ustar00rootroot00000000000000.. _developing_module_utilities: ************************************* Using and developing module utilities ************************************* Ansible provides a number of module utilities, or snippets of shared code, that provide helper functions you can use when developing your own modules. The ``basic.py`` module utility provides the main entry point for accessing the Ansible library, and all Python Ansible modules must import something from ``ansible.module_utils``. A common option is to import ``AnsibleModule``: .. code-block:: python from ansible.module_utils.basic import AnsibleModule The ``ansible.module_utils`` namespace is not a plain Python package: it is constructed dynamically for each task invocation, by extracting imports and resolving those matching the namespace against a :ref:`search path ` derived from the active configuration. To reduce the maintenance burden in a collection or in local modules, you can extract duplicated code into one or more module utilities and import them into your modules. For example, if you have your own custom modules that import a ``my_shared_code`` library, you can place that into a ``./module_utils/my_shared_code.py`` file like this:: from ansible.module_utils.my_shared_code import MySharedCodeClient When you run ``ansible-playbook``, Ansible will merge any files in your local ``module_utils`` directories into the ``ansible.module_utils`` namespace in the order defined by the :ref:`Ansible search path `. Naming and finding module utilities =================================== You can generally tell what a module utility does from its name and/or its location. Generic utilities (shared code used by many different kinds of modules) live in the main ansible/ansible codebase, in the ``common`` subdirectory or in the root directory of ``lib/ansible/module_utils``. Utilities used by a particular set of modules generally live in the same collection as those modules. For example: * ``lib/ansible/module_utils/urls.py`` contains shared code for parsing URLs * ``openstack.cloud.plugins.module_utils.openstack.py`` contains utilities for modules that work with OpenStack instances * ``ansible.netcommon.plugins.module_utils.network.common.config.py`` contains utility functions for use by networking modules Following this pattern with your own module utilities makes everything easy to find and use. .. _standard_mod_utils: Standard module utilities ========================= Ansible ships with an extensive library of ``module_utils`` files. You can find the module utility source code in the ``lib/ansible/module_utils`` directory under your main Ansible path. We describe the most widely used utilities below. For more details on any specific module utility, please see the `source code for module_utils `_. .. include:: shared_snippets/licensing.txt - ``api.py`` - Supports generic API modules - ``basic.py`` - General definitions and helper utilities for Ansible modules - ``common/dict_transformations.py`` - Helper functions for dictionary transformations - ``common/file.py`` - Helper functions for working with files - ``common/text/`` - Helper functions for converting and formatting text - ``common/parameters.py`` - Helper functions for dealing with module parameters - ``common/sys_info.py`` - Functions for getting distribution and platform information - ``common/validation.py`` - Helper functions for validating module parameters against a module argument spec - ``facts/`` - Directory of utilities for modules that return facts. See `PR 23012 `_ for more information - ``json_utils.py`` - Utilities for filtering unrelated output around module JSON output, like leading and trailing lines - ``powershell/`` - Directory of definitions and helper functions for Windows PowerShell modules - ``pycompat24.py`` - Exception workaround for Python 2.4 - ``service.py`` - Utilities to enable modules to work with Linux services (placeholder, not in use) - ``six/__init__.py`` - Bundled copy of the `Six Python library `_ to aid in writing code compatible with both Python 2 and Python 3 - ``splitter.py`` - String splitting and manipulation utilities for working with Jinja2 templates - ``urls.py`` - Utilities for working with http and https requests Several commonly-used utilities migrated to collections in Ansible 2.10, including: - ``ismount.py`` migrated to ``ansible.posix.plugins.module_utils.mount.py`` - Single helper function that fixes os.path.ismount - ``known_hosts.py`` migrated to ``community.general.plugins.module_utils.known_hosts.py`` - utilities for working with known_hosts file For a list of migrated content with destination collections, see https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.450556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules.rst0000644000000000000000000000663400000000000025652 0ustar00rootroot00000000000000.. _developing_modules: .. _module_dev_should_you: **************************** Should you develop a module? **************************** Developing Ansible modules is easy, but often it is not necessary. Before you start writing a new module, ask: 1. Does a similar module already exist? An existing module may cover the functionality you want. Ansible collections include thousands of modules. Search our :ref:`list of included collections ` or `Ansible Galaxy `_ to see if an existing module does what you need. 2. Should you use or develop an action plugin instead of a module? An action plugin may be the best way to get the functionality you want. Action plugins run on the control node instead of on the managed node, and their functionality is available to all modules. For more information about developing plugins, read the :ref:`developing plugins page `. 3. Should you use a role instead of a module? A combination of existing modules may cover the functionality you want. You can write a role for this type of use case. Check out the :ref:`roles documentation`. 4. Should you create a collection instead of a single module? The functionality you want may be too large for a single module. If you want to connect Ansible to a new cloud provider, database, or network platform, you may need to :ref:`develop a new collection`. * Each module should have a concise and well defined functionality. Basically, follow the UNIX philosophy of doing one thing well. * A module should not require that a user know all the underlying options of an API/tool to be used. For instance, if the legal values for a required module parameter cannot be documented, that's a sign that the module would be rejected. * Modules should typically encompass much of the logic for interacting with a resource. A lightweight wrapper around an API that does not contain much logic would likely cause users to offload too much logic into a playbook, and for this reason the module would be rejected. Instead try creating multiple modules for interacting with smaller individual pieces of the API. If your use case isn't covered by an existing module, an action plugin, or a role, and you don't need to create multiple modules, then you're ready to start developing a new module. Choose from the topics below for next steps: * I want to :ref:`get started on a new module `. * I want to review :ref:`tips and conventions for developing good modules `. * I want to :ref:`write a Windows module `. * I want :ref:`an overview of Ansible's architecture `. * I want to :ref:`document my module `. * I want to :ref:`contribute my module to an existing Ansible collection `. * I want to :ref:`add unit and integration tests to my module `. * I want to :ref:`add Python 3 support to my module `. * I want to :ref:`write multiple modules `. .. seealso:: :ref:`list_of_collections` Browse existing collections, modules, and plugins `Mailing List `_ Development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.450556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_best_practices.rst0000644000000000000000000003224700000000000030723 0ustar00rootroot00000000000000.. _developing_modules_best_practices: .. _module_dev_conventions: ******************************* Conventions, tips, and pitfalls ******************************* .. contents:: Topics :local: As you design and develop modules, follow these basic conventions and tips for clean, usable code: Scoping your module(s) ====================== Especially if you want to contribute your module(s) to an existing Ansible Collection, make sure each module includes enough logic and functionality, but not too much. If these guidelines seem confusing, consider :ref:`whether you really need to write a module ` at all. * Each module should have a concise and well-defined functionality. Basically, follow the UNIX philosophy of doing one thing well. * Do not add ``get``, ``list`` or ``info`` state options to an existing module - create a new ``_info`` or ``_facts`` module. * Modules should not require that a user know all the underlying options of an API/tool to be used. For instance, if the legal values for a required module option cannot be documented, the module does not belong in Ansible Core. * Modules should encompass much of the logic for interacting with a resource. A lightweight wrapper around a complex API forces users to offload too much logic into their playbooks. If you want to connect Ansible to a complex API, :ref:`create multiple modules ` that interact with smaller individual pieces of the API. * Avoid creating a module that does the work of other modules; this leads to code duplication and divergence, and makes things less uniform, unpredictable and harder to maintain. Modules should be the building blocks. If you are asking 'how can I have a module execute other modules' ... you want to write a role. Designing module interfaces =========================== * If your module is addressing an object, the option for that object should be called ``name`` whenever possible, or accept ``name`` as an alias. * Modules accepting boolean status should accept ``yes``, ``no``, ``true``, ``false``, or anything else a user may likely throw at them. The AnsibleModule common code supports this with ``type='bool'``. * Avoid ``action``/``command``, they are imperative and not declarative, there are other ways to express the same thing. General guidelines & tips ========================= * Each module should be self-contained in one file, so it can be auto-transferred by ``ansible-core``. * Module name MUST use underscores instead of hyphens or spaces as a word separator. Using hyphens and spaces will prevent ``ansible-core`` from importing your module. * Always use the ``hacking/test-module.py`` script when developing modules - it will warn you about common pitfalls. * If you have a local module that returns information specific to your installations, a good name for this module is ``site_info``. * Eliminate or minimize dependencies. If your module has dependencies, document them at the top of the module file and raise JSON error messages when dependency import fails. * Don't write to files directly; use a temporary file and then use the ``atomic_move`` function from ``ansible.module_utils.basic`` to move the updated temporary file into place. This prevents data corruption and ensures that the correct context for the file is kept. * Avoid creating caches. Ansible is designed without a central server or authority, so you cannot guarantee it will not run with different permissions, options or locations. If you need a central authority, have it on top of Ansible (for example, using bastion/cm/ci server, AWX, or the Red Hat Ansible Automation Platform); do not try to build it into modules. * If you package your module(s) in an RPM, install the modules on the control machine in ``/usr/share/ansible``. Packaging modules in RPMs is optional. Functions and Methods ===================== * Each function should be concise and should describe a meaningful amount of work. * "Don't repeat yourself" is generally a good philosophy. * Function names should use underscores: ``my_function_name``. * The name of each function should describe what the function does. * Each function should have a docstring. * If your code is too nested, that's usually a sign the loop body could benefit from being a function. Parts of our existing code are not the best examples of this at times. Python tips =========== * Include a ``main`` function that wraps the normal execution. * Call your ``main`` function from a conditional so you can import it into unit tests - for example: .. code-block:: python if __name__ == '__main__': main() .. _shared_code: Importing and using shared code =============================== * Use shared code whenever possible - don't reinvent the wheel. Ansible offers the ``AnsibleModule`` common Python code, plus :ref:`utilities ` for many common use cases and patterns. You can also create documentation fragments for docs that apply to multiple modules. * Import ``ansible.module_utils`` code in the same place as you import other libraries. * Do NOT use wildcards (*) for importing other python modules; instead, list the function(s) you are importing (for example, ``from some.other_python_module.basic import otherFunction``). * Import custom packages in ``try``/``except``, capture any import errors, and handle them with ``fail_json()`` in ``main()``. For example: .. code-block:: python import traceback from ansible.module_utils.basic import missing_required_lib LIB_IMP_ERR = None try: import foo HAS_LIB = True except: HAS_LIB = False LIB_IMP_ERR = traceback.format_exc() Then in ``main()``, just after the argspec, do .. code-block:: python if not HAS_LIB: module.fail_json(msg=missing_required_lib("foo"), exception=LIB_IMP_ERR) And document the dependency in the ``requirements`` section of your module's :ref:`documentation_block`. .. _module_failures: Handling module failures ======================== When your module fails, help users understand what went wrong. If you are using the ``AnsibleModule`` common Python code, the ``failed`` element will be included for you automatically when you call ``fail_json``. For polite module failure behavior: * Include a key of ``failed`` along with a string explanation in ``msg``. If you don't do this, Ansible will use standard return codes: 0=success and non-zero=failure. * Don't raise a traceback (stacktrace). Ansible can deal with stacktraces and automatically converts anything unparseable into a failed result, but raising a stacktrace on module failure is not user-friendly. * Do not use ``sys.exit()``. Use ``fail_json()`` from the module object. Handling exceptions (bugs) gracefully ===================================== * Validate upfront--fail fast and return useful and clear error messages. * Use defensive programming--use a simple design for your module, handle errors gracefully, and avoid direct stacktraces. * Fail predictably--if we must fail, do it in a way that is the most expected. Either mimic the underlying tool or the general way the system works. * Give out a useful message on what you were doing and add exception messages to that. * Avoid catchall exceptions, they are not very useful unless the underlying API gives very good error messages pertaining the attempted action. .. _module_output: Creating correct and informative module output ============================================== Modules must output valid JSON only. Follow these guidelines for creating correct, useful module output: * Make your top-level return type a hash (dictionary). * Nest complex return values within the top-level hash. * Incorporate any lists or simple scalar values within the top-level return hash. * Do not send module output to standard error, because the system will merge standard out with standard error and prevent the JSON from parsing. * Capture standard error and return it as a variable in the JSON on standard out. This is how the command module is implemented. * Never do ``print("some status message")`` in a module, because it will not produce valid JSON output. * Always return useful data, even when there is no change. * Be consistent about returns (some modules are too random), unless it is detrimental to the state/action. * Make returns reusable--most of the time you don't want to read it, but you do want to process it and re-purpose it. * Return diff if in diff mode. This is not required for all modules, as it won't make sense for certain ones, but please include it when applicable. * Enable your return values to be serialized as JSON with Python's standard `JSON encoder and decoder `_ library. Basic python types (strings, int, dicts, lists, and so on) are serializable. * Do not return an object using exit_json(). Instead, convert the fields you need from the object into the fields of a dictionary and return the dictionary. * Results from many hosts will be aggregated at once, so your module should return only relevant output. Returning the entire contents of a log file is generally bad form. If a module returns stderr or otherwise fails to produce valid JSON, the actual output will still be shown in Ansible, but the command will not succeed. .. _module_conventions: Following Ansible conventions ============================= Ansible conventions offer a predictable user interface across all modules, playbooks, and roles. To follow Ansible conventions in your module development: * Use consistent names across modules (yes, we have many legacy deviations - don't make the problem worse!). * Use consistent options (arguments) within your module(s). * Do not use 'message' or 'syslog_facility' as an option name, because this is used internally by Ansible. * Normalize options with other modules - if Ansible and the API your module connects to use different names for the same option, add aliases to your options so the user can choose which names to use in tasks and playbooks. * Return facts from ``*_facts`` modules in the ``ansible_facts`` field of the :ref:`result dictionary` so other modules can access them. * Implement ``check_mode`` in all ``*_info`` and ``*_facts`` modules. Playbooks which conditionalize based on fact information will only conditionalize correctly in ``check_mode`` if the facts are returned in ``check_mode``. Usually you can add ``supports_check_mode=True`` when instantiating ``AnsibleModule``. * Use module-specific environment variables. For example, if you use the helpers in ``module_utils.api`` for basic authentication with ``module_utils.urls.fetch_url()`` and you fall back on environment variables for default values, use a module-specific environment variable like :code:`API__USERNAME` to avoid conflicts between modules. * Keep module options simple and focused - if you're loading a lot of choices/states on an existing option, consider adding a new, simple option instead. * Keep options small when possible. Passing a large data structure to an option might save us a few tasks, but it adds a complex requirement that we cannot easily validate before passing on to the module. * If you want to pass complex data to an option, write an expert module that allows this, along with several smaller modules that provide a more 'atomic' operation against the underlying APIs and services. Complex operations require complex data. Let the user choose whether to reflect that complexity in tasks and plays or in vars files. * Implement declarative operations (not CRUD) so the user can ignore existing state and focus on final state. For example, use ``started/stopped``, ``present/absent``. * Strive for a consistent final state (aka idempotency). If running your module twice in a row against the same system would result in two different states, see if you can redesign or rewrite to achieve consistent final state. If you can't, document the behavior and the reasons for it. * Provide consistent return values within the standard Ansible return structure, even if NA/None are used for keys normally returned under other options. * Follow additional guidelines that apply to families of modules if applicable. For example, AWS modules should follow the :ref:`Amazon development checklist `. Module Security =============== * Avoid passing user input from the shell. * Always check return codes. * You must always use ``module.run_command``, not ``subprocess`` or ``Popen`` or ``os.system``. * Avoid using the shell unless absolutely necessary. * If you must use the shell, you must pass ``use_unsafe_shell=True`` to ``module.run_command``. * If any variables in your module can come from user input with ``use_unsafe_shell=True``, you must wrap them with ``pipes.quote(x)``. * When fetching URLs, use ``fetch_url`` or ``open_url`` from ``ansible.module_utils.urls``. Do not use ``urllib2``, which does not natively verify TLS certificates and so is insecure for https. * Sensitive values marked with ``no_log=True`` will automatically have that value stripped from module return values. If your module could return these sensitive values as part of a dictionary key name, you should call the ``ansible.module_utils.basic.sanitize_keys()`` function to strip the values from the keys. See the ``uri`` module for an example. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.450556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_checklist.rst0000644000000000000000000000765100000000000027703 0ustar00rootroot00000000000000.. _developing_modules_checklist: .. _module_contribution: ********************************************************** Contributing your module to an existing Ansible collection ********************************************************** If you want to contribute a module to an existing collection, you must meet the community's objective and subjective requirements. Please read the details below, and also review our :ref:`tips for module development `. Modules accepted into certain collections are included in every Ansible release on PyPI. However, contributing to one of these collections is not the only way to distribute a module - you can :ref:`create your own collection `, embed modules in roles on Galaxy or simply share copies of your module code for :ref:`local use `. Contributing modules: objective requirements =============================================== To contribute a module to most Ansible collections, you must: * write your module in either Python or Powershell for Windows * use the ``AnsibleModule`` common code * support Python 2.6 and Python 3.5 - if your module cannot support Python 2.6, explain the required minimum Python version and rationale in the requirements section in ``DOCUMENTATION`` * use proper :ref:`Python 3 syntax ` * follow `PEP 8 `_ Python style conventions - see :ref:`testing_pep8` for more information * license your module under the GPL license (GPLv3 or later) * understand the :ref:`license agreement `, which applies to all contributions * conform to Ansible's :ref:`formatting and documentation ` standards * include comprehensive :ref:`tests ` for your module * minimize module dependencies * support :ref:`check_mode ` if possible * ensure your code is readable * if a module is named ``_facts``, it should be because its main purpose is returning ``ansible_facts``. Do not name modules that do not do this with ``_facts``. Only use ``ansible_facts`` for information that is specific to the host machine, for example network interfaces and their configuration, which operating system and which programs are installed. * Modules that query/return general information (and not ``ansible_facts``) should be named ``_info``. General information is non-host specific information, for example information on online/cloud services (you can access different accounts for the same online service from the same host), or information on VMs and containers accessible from the machine. Additional requirements may apply for certain collections. Review the individual collection repositories for more information. Please make sure your module meets these requirements before you submit your PR/proposal. If you have questions, reach out via the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) or the `Ansible development mailing list `_. Contributing to Ansible: subjective requirements ================================================ If your module meets these objective requirements, collection maintainers will review your code to see if they think it's clear, concise, secure, and maintainable. They will consider whether your module provides a good user experience, helpful error messages, reasonable defaults, and more. This process is subjective, with no exact standards for acceptance. For the best chance of getting your module accepted, follow our :ref:`tips for module development `. Other checklists ================ * :ref:`Tips for module development `. * :ref:`Amazon development checklist `. * :ref:`Windows development checklist `. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.450556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_documenting.rst0000644000000000000000000005517200000000000030247 0ustar00rootroot00000000000000.. _developing_modules_documenting: .. _module_documenting: ******************************* Module format and documentation ******************************* If you want to contribute your module to most Ansible collections, you must write your module in Python and follow the standard format described below. (Unless you're writing a Windows module, in which case the :ref:`Windows guidelines ` apply.) In addition to following this format, you should review our :ref:`submission checklist `, :ref:`programming tips `, and :ref:`strategy for maintaining Python 2 and Python 3 compatibility `, as well as information about :ref:`testing ` before you open a pull request. Every Ansible module written in Python must begin with seven standard sections in a particular order, followed by the code. The sections in order are: .. contents:: :depth: 1 :local: .. note:: Why don't the imports go first? Keen Python programmers may notice that contrary to PEP 8's advice we don't put ``imports`` at the top of the file. This is because the ``DOCUMENTATION`` through ``RETURN`` sections are not used by the module code itself; they are essentially extra docstrings for the file. The imports are placed after these special variables for the same reason as PEP 8 puts the imports after the introductory comments and docstrings. This keeps the active parts of the code together and the pieces which are purely informational apart. The decision to exclude E402 is based on readability (which is what PEP 8 is about). Documentation strings in a module are much more similar to module level docstrings, than code, and are never utilized by the module itself. Placing the imports below this documentation and closer to the code, consolidates and groups all related code in a congruent manner to improve readability, debugging and understanding. .. warning:: **Copy old modules with care!** Some older Ansible modules have ``imports`` at the bottom of the file, ``Copyright`` notices with the full GPL prefix, and/or ``DOCUMENTATION`` fields in the wrong order. These are legacy files that need updating - do not copy them into new modules. Over time we are updating and correcting older modules. Please follow the guidelines on this page! .. _shebang: Python shebang & UTF-8 coding =============================== Begin your Ansible module with ``#!/usr/bin/python`` - this "shebang" allows ``ansible_python_interpreter`` to work. Follow the shebang immediately with ``# -*- coding: utf-8 -*-`` to clarify that the file is UTF-8 encoded. .. _copyright: Copyright and license ===================== After the shebang and UTF-8 coding, add a `copyright line `_ with the original copyright holder and a license declaration. The license declaration should be ONLY one line, not the full GPL prefix.: .. code-block:: python #!/usr/bin/python # -*- coding: utf-8 -*- # Copyright: (c) 2018, Terry Jones # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) Major additions to the module (for instance, rewrites) may add additional copyright lines. Any legal review will include the source control history, so an exhaustive copyright header is not necessary. Please do not edit the existing copyright year. This simplifies project administration and is unlikely to cause any interesting legal issues. When adding a second copyright line for a significant feature or rewrite, add the newer line above the older one: .. code-block:: python #!/usr/bin/python # -*- coding: utf-8 -*- # Copyright: (c) 2017, [New Contributor(s)] # Copyright: (c) 2015, [Original Contributor(s)] # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) .. _ansible_metadata_block: ANSIBLE_METADATA block ====================== Since we moved to collections we have deprecated the METADATA functionality, it is no longer required for modules, but it will not break anything if present. .. _documentation_block: DOCUMENTATION block =================== After the shebang, the UTF-8 coding, the copyright line, and the license section comes the ``DOCUMENTATION`` block. Ansible's online module documentation is generated from the ``DOCUMENTATION`` blocks in each module's source code. The ``DOCUMENTATION`` block must be valid YAML. You may find it easier to start writing your ``DOCUMENTATION`` string in an :ref:`editor with YAML syntax highlighting ` before you include it in your Python file. You can start by copying our `example documentation string `_ into your module file and modifying it. If you run into syntax issues in your YAML, you can validate it on the `YAML Lint `_ website. Module documentation should briefly and accurately define what each module and option does, and how it works with others in the underlying system. Documentation should be written for broad audience--readable both by experts and non-experts. * Descriptions should always start with a capital letter and end with a full stop. Consistency always helps. * Verify that arguments in doc and module spec dict are identical. * For password / secret arguments ``no_log=True`` should be set. * For arguments that seem to contain sensitive information but **do not** contain secrets, such as "password_length", set ``no_log=False`` to disable the warning message. * If an option is only sometimes required, describe the conditions. For example, "Required when I(state=present)." * If your module allows ``check_mode``, reflect this fact in the documentation. To create clear, concise, consistent, and useful documentation, follow the :ref:`style guide `. Each documentation field is described below. Before committing your module documentation, please test it at the command line and as HTML: * As long as your module file is :ref:`available locally `, you can use ``ansible-doc -t module my_module_name`` to view your module documentation at the command line. Any parsing errors will be obvious - you can view details by adding ``-vvv`` to the command. * You should also :ref:`test the HTML output ` of your module documentation. Documentation fields -------------------- All fields in the ``DOCUMENTATION`` block are lower-case. All fields are required unless specified otherwise: :module: * The name of the module. * Must be the same as the filename, without the ``.py`` extension. :short_description: * A short description which is displayed on the :ref:`list_of_collections` page and ``ansible-doc -l``. * The ``short_description`` is displayed by ``ansible-doc -l`` without any category grouping, so it needs enough detail to explain the module's purpose without the context of the directory structure in which it lives. * Unlike ``description:``, ``short_description`` should not have a trailing period/full stop. :description: * A detailed description (generally two or more sentences). * Must be written in full sentences, in other words, with capital letters and periods/full stops. * Shouldn't mention the module name. * Make use of multiple entries rather than using one long paragraph. * Don't quote complete values unless it is required by YAML. :version_added: * The version of Ansible when the module was added. * This is a string, and not a float, for example, ``version_added: '2.1'``. * In collections, this must be the collection version the module was added to, not the Ansible version. For example, ``version_added: 1.0.0``. :author: * Name of the module author in the form ``First Last (@GitHubID)``. * Use a multi-line list if there is more than one author. * Don't use quotes as it should not be required by YAML. :deprecated: * Marks modules that will be removed in future releases. See also :ref:`module_lifecycle`. :options: * Options are often called `parameters` or `arguments`. Because the documentation field is called `options`, we will use that term. * If the module has no options (for example, it's a ``_facts`` module), all you need is one line: ``options: {}``. * If your module has options (in other words, accepts arguments), each option should be documented thoroughly. For each module option, include: :option-name: * Declarative operation (not CRUD), to focus on the final state, for example `online:`, rather than `is_online:`. * The name of the option should be consistent with the rest of the module, as well as other modules in the same category. * When in doubt, look for other modules to find option names that are used for the same purpose, we like to offer consistency to our users. :description: * Detailed explanation of what this option does. It should be written in full sentences. * The first entry is a description of the option itself; subsequent entries detail its use, dependencies, or format of possible values. * Should not list the possible values (that's what ``choices:`` is for, though it should explain what the values do if they aren't obvious). * If an option is only sometimes required, describe the conditions. For example, "Required when I(state=present)." * Mutually exclusive options must be documented as the final sentence on each of the options. :required: * Only needed if ``true``. * If missing, we assume the option is not required. :default: * If ``required`` is false/missing, ``default`` may be specified (assumed 'null' if missing). * Ensure that the default value in the docs matches the default value in the code. * The default field must not be listed as part of the description, unless it requires additional information or conditions. * If the option is a boolean value, you can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Choose the one that reads better in the context of the option. :choices: * List of option values. * Should be absent if empty. :type: * Specifies the data type that option accepts, must match the ``argspec``. * If an argument is ``type='bool'``, this field should be set to ``type: bool`` and no ``choices`` should be specified. * If an argument is ``type='list'``, ``elements`` should be specified. :elements: * Specifies the data type for list elements in case ``type='list'``. :aliases: * List of optional name aliases. * Generally not needed. :version_added: * Only needed if this option was extended after initial Ansible release, in other words, this is greater than the top level `version_added` field. * This is a string, and not a float, for example, ``version_added: '2.3'``. * In collections, this must be the collection version the option was added to, not the Ansible version. For example, ``version_added: 1.0.0``. :suboptions: * If this option takes a dict or list of dicts, you can define the structure here. * See :ref:`ansible_collections.azure.azcollection.azure_rm_securitygroup_module`, :ref:`ansible_collections.azure.azcollection.azure_rm_azurefirewall_module`, and :ref:`ansible_collections.openstack.cloud.baremetal_node_action_module` for examples. :requirements: * List of requirements (if applicable). * Include minimum versions. :seealso: * A list of references to other modules, documentation or Internet resources * In Ansible 2.10 and later, references to modules must use the FQCN or ``ansible.builtin`` for modules in ``ansible-core``. * A reference can be one of the following formats: .. code-block:: yaml+jinja seealso: # Reference by module name - module: cisco.aci.aci_tenant # Reference by module name, including description - module: cisco.aci.aci_tenant description: ACI module to create tenants on a Cisco ACI fabric. # Reference by rST documentation anchor - ref: aci_guide description: Detailed information on how to manage your ACI infrastructure using Ansible. # Reference by rST documentation anchor (with custom title) - ref: The official Ansible ACI guide description: Detailed information on how to manage your ACI infrastructure using Ansible. # Reference by Internet resource - name: APIC Management Information Model reference description: Complete reference of the APIC object model. link: https://developer.cisco.com/docs/apic-mim-ref/ * If you use ``ref:`` to link to an anchor that is not associated with a title, you must add a title to the ref for the link to work correctly. * You can link to non-module plugins with ``ref:`` using the rST anchor, but plugin and module anchors are never associated with a title, so you must supply a title when you link to them. For example ``ref: namespace.collection.plugin_name lookup plugin ``. :notes: * Details of any important information that doesn't fit in one of the above sections. * For example, whether ``check_mode`` is or is not supported. Linking and other format macros within module documentation ----------------------------------------------------------- You can link from your module documentation to other module docs, other resources on docs.ansible.com, and resources elsewhere on the internet with the help of some pre-defined macros. The correct formats for these macros are: * ``L()`` for links with a heading. For example: ``See L(Ansible Automation Platform,https://www.ansible.com/products/automation-platform).`` As of Ansible 2.10, do not use ``L()`` for relative links between Ansible documentation and collection documentation. * ``U()`` for URLs. For example: ``See U(https://www.ansible.com/products/automation-platform) for an overview.`` There are also some macros which do not create links but we use them to display certain types of content in a uniform way: * ``I()`` for option names. For example: ``Required if I(state=present).`` This is italicized in the documentation. * ``C()`` for files, option values, and inline code. For example: ``If not set the environment variable C(ACME_PASSWORD) will be used.`` or ``Use C(var | foo.bar.my_filter) to transform C(var) into the required format.`` This displays with a mono-space font in the documentation. * ``B()`` currently has no standardized usage. It is displayed in boldface in the documentation. * ``HORIZONTALLINE`` is used sparingly as a separator in long descriptions. It becomes a horizontal rule (the ``
    `` html tag) in the documentation. .. note:: For links between modules and documentation within a collection, you can use either of the options above. Use ``U()`` or ``L()`` with full URLs (not relative links). .. note:: - When a collection is not the right granularity, use ``C(..)``: - ``The C(win_*) modules (spread across several collections) allow you to manage various aspects of windows hosts.`` .. note:: Because it stands out better, use ``seealso`` for general references over the use of notes or adding links to the description. .. _module_docs_fragments: Documentation fragments ----------------------- If you are writing multiple related modules, they may share common documentation, such as authentication details, file mode settings, ``notes:`` or ``seealso:`` entries. Rather than duplicate that information in each module's ``DOCUMENTATION`` block, you can save it once as a doc_fragment plugin and use it in each module's documentation. In Ansible, shared documentation fragments are contained in a ``ModuleDocFragment`` class in `lib/ansible/plugins/doc_fragments/ `_ or the equivalent directory in a collection. To include a documentation fragment, add ``extends_documentation_fragment: FRAGMENT_NAME`` in your module documentation. Use the fully qualified collection name for the FRAGMENT_NAME (for example, ``kubernetes.core.k8s_auth_options``). Modules should only use items from a doc fragment if the module will implement all of the interface documented there in a manner that behaves the same as the existing modules which import that fragment. The goal is that items imported from the doc fragment will behave identically when used in another module that imports the doc fragment. By default, only the ``DOCUMENTATION`` property from a doc fragment is inserted into the module documentation. It is possible to define additional properties in the doc fragment in order to import only certain parts of a doc fragment or mix and match as appropriate. If a property is defined in both the doc fragment and the module, the module value overrides the doc fragment. Here is an example doc fragment named ``example_fragment.py``: .. code-block:: python class ModuleDocFragment(object): # Standard documentation DOCUMENTATION = r''' options: # options here ''' # Additional section OTHER = r''' options: # other options here ''' To insert the contents of ``OTHER`` in a module: .. code-block:: yaml+jinja extends_documentation_fragment: example_fragment.other Or use both : .. code-block:: yaml+jinja extends_documentation_fragment: - example_fragment - example_fragment.other .. _note: * Prior to Ansible 2.8, documentation fragments were kept in ``lib/ansible/utils/module_docs_fragments``. .. versionadded:: 2.8 Since Ansible 2.8, you can have user-supplied doc_fragments by using a ``doc_fragments`` directory adjacent to play or role, just like any other plugin. For example, all AWS modules should include: .. code-block:: yaml+jinja extends_documentation_fragment: - aws - ec2 :ref:`docfragments_collections` describes how to incorporate documentation fragments in a collection. .. _examples_block: EXAMPLES block ============== After the shebang, the UTF-8 coding, the copyright line, the license section, and the ``DOCUMENTATION`` block comes the ``EXAMPLES`` block. Here you show users how your module works with real-world examples in multi-line plain-text YAML format. The best examples are ready for the user to copy and paste into a playbook. Review and update your examples with every change to your module. Per playbook best practices, each example should include a ``name:`` line: .. code-block:: text EXAMPLES = r''' - name: Ensure foo is installed namespace.collection.modulename: name: foo state: present ''' The ``name:`` line should be capitalized and not include a trailing dot. Use a fully qualified collection name (FQCN) as a part of the module's name like in the example above. For modules in ``ansible-core``, use the ``ansible.builtin.`` identifier, for example ``ansible.builtin.debug``. If your examples use boolean options, use yes/no values. Since the documentation generates boolean values as yes/no, having the examples use these values as well makes the module documentation more consistent. If your module returns facts that are often needed, an example of how to use them can be helpful. .. _return_block: RETURN block ============ After the shebang, the UTF-8 coding, the copyright line, the license section, ``DOCUMENTATION`` and ``EXAMPLES`` blocks comes the ``RETURN`` block. This section documents the information the module returns for use by other modules. If your module doesn't return anything (apart from the standard returns), this section of your module should read: ``RETURN = r''' # '''`` Otherwise, for each value returned, provide the following fields. All fields are required unless specified otherwise. :return name: Name of the returned field. :description: Detailed description of what this value represents. Capitalized and with trailing dot. :returned: When this value is returned, such as ``always``, ``changed`` or ``success``. This is a string and can contain any human-readable content. :type: Data type. :elements: If ``type='list'``, specifies the data type of the list's elements. :sample: One or more examples. :version_added: Only needed if this return was extended after initial Ansible release, in other words, this is greater than the top level `version_added` field. This is a string, and not a float, for example, ``version_added: '2.3'``. :contains: Optional. To describe nested return values, set ``type: dict``, or ``type: list``/``elements: dict``, or if you really have to, ``type: complex``, and repeat the elements above for each sub-field. Here are two example ``RETURN`` sections, one with three simple fields and one with a complex nested field: .. code-block:: text RETURN = r''' dest: description: Destination file/path. returned: success type: str sample: /path/to/file.txt src: description: Source file used for the copy on the target machine. returned: changed type: str sample: /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source md5sum: description: MD5 checksum of the file after running copy. returned: when supported type: str sample: 2a5aeecc61dc98c4d780b14b330e3282 ''' RETURN = r''' packages: description: Information about package requirements. returned: success type: dict contains: missing: description: Packages that are missing from the system. returned: success type: list elements: str sample: - libmysqlclient-dev - libxml2-dev badversion: description: Packages that are installed but at bad versions. returned: success type: list elements: dict sample: - package: libxml2-dev version: 2.9.4+dfsg1-2 constraint: ">= 3.0" ''' .. _python_imports: Python imports ============== After the shebang, the UTF-8 coding, the copyright line, the license, and the sections for ``DOCUMENTATION``, ``EXAMPLES``, and ``RETURN``, you can finally add the python imports. All modules must use Python imports in the form: .. code-block:: python from module_utils.basic import AnsibleModule The use of "wildcard" imports such as ``from module_utils.basic import *`` is no longer allowed. .. _dev_testing_module_documentation: Testing module documentation ============================ To test Ansible documentation locally please :ref:`follow instruction`. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.451556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_general.rst0000644000000000000000000003014700000000000027343 0ustar00rootroot00000000000000.. _developing_modules_general: .. _module_dev_tutorial_sample: ************************** Developing Ansible modules ************************** A module is a reusable, standalone script that Ansible runs on your behalf, either locally or remotely. Modules interact with your local machine, an API, or a remote system to perform specific tasks like changing a database password or spinning up a cloud instance. Each module can be used by the Ansible API, or by the :command:`ansible` or :command:`ansible-playbook` programs. A module provides a defined interface, accepts arguments, and returns information to Ansible by printing a JSON string to stdout before exiting. If you need functionality that is not available in any of the thousands of Ansible modules found in collections, you can easily write your own custom module. When you write a module for local use, you can choose any programming language and follow your own rules. Use this topic to learn how to create an Ansible module in Python. After you create a module, you must add it locally to the appropriate directory so that Ansible can find and execute it. For details about adding a module locally, see :ref:`developing_locally`. .. contents:: :local: .. _environment_setup: Preparing an environment for developing Ansible modules ======================================================= Installing prerequisites via apt (Ubuntu) ----------------------------------------- Due to dependencies (for example ansible -> paramiko -> pynacl -> libffi): .. code:: bash sudo apt update sudo apt install build-essential libssl-dev libffi-dev python-dev Installing prerequisites via yum (CentOS) ----------------------------------------- Due to dependencies (for example ansible -> paramiko -> pynacl -> libffi): .. code:: bash sudo yum check-update sudo yum update sudo yum group install "Development Tools" sudo yum install python3-devel openssl-devel libffi libffi-devel Creating a development environment (platform-independent steps) --------------------------------------------------------------- 1. Clone the Ansible repository: ``$ git clone https://github.com/ansible/ansible.git`` 2. Change directory into the repository root dir: ``$ cd ansible`` 3. Create a virtual environment: ``$ python3 -m venv venv`` (or for Python 2 ``$ virtualenv venv``. Note, this requires you to install the virtualenv package: ``$ pip install virtualenv``) 4. Activate the virtual environment: ``$ . venv/bin/activate`` 5. Install development requirements: ``$ pip install -r requirements.txt`` 6. Run the environment setup script for each new development shell process: ``$ . hacking/env-setup`` .. note:: After the initial setup above, every time you are ready to start developing Ansible you should be able to just run the following from the root of the Ansible repo: ``$ . venv/bin/activate && . hacking/env-setup`` Creating an info or a facts module ================================== Ansible gathers information about the target machines using facts modules, and gathers information on other objects or files using info modules. If you find yourself trying to add ``state: info`` or ``state: list`` to an existing module, that is often a sign that a new dedicated ``_facts`` or ``_info`` module is needed. In Ansible 2.8 and onwards, we have two type of information modules, they are ``*_info`` and ``*_facts``. If a module is named ``_facts``, it should be because its main purpose is returning ``ansible_facts``. Do not name modules that do not do this with ``_facts``. Only use ``ansible_facts`` for information that is specific to the host machine, for example network interfaces and their configuration, which operating system and which programs are installed. Modules that query/return general information (and not ``ansible_facts``) should be named ``_info``. General information is non-host specific information, for example information on online/cloud services (you can access different accounts for the same online service from the same host), or information on VMs and containers accessible from the machine, or information on individual files or programs. Info and facts modules, are just like any other Ansible Module, with a few minor requirements: 1. They MUST be named ``_info`` or ``_facts``, where is singular. 2. Info ``*_info`` modules MUST return in the form of the :ref:`result dictionary` so other modules can access them. 3. Fact ``*_facts`` modules MUST return in the ``ansible_facts`` field of the :ref:`result dictionary` so other modules can access them. 4. They MUST support :ref:`check_mode `. 5. They MUST NOT make any changes to the system. 6. They MUST document the :ref:`return fields` and :ref:`examples`. To create an info module: 1. Navigate to the correct directory for your new module: ``$ cd lib/ansible/modules/``. If you are developing module using collection, ``$ cd plugins/modules/`` inside your collection development tree. 2. Create your new module file: ``$ touch my_test_info.py``. 3. Paste the content below into your new info module file. It includes the :ref:`required Ansible format and documentation `, a simple :ref:`argument spec for declaring the module options `, and some example code. 4. Modify and extend the code to do what you want your new info module to do. See the :ref:`programming tips ` and :ref:`Python 3 compatibility ` pages for pointers on writing clean and concise module code. .. literalinclude:: ../../../../examples/scripts/my_test_info.py :language: python Use the same process to create a facts module. .. literalinclude:: ../../../../examples/scripts/my_test_facts.py :language: python Creating a module ================= To create a module: 1. Navigate to the correct directory for your new module: ``$ cd lib/ansible/modules/``. If you are developing a module in a :ref:`collection `, ``$ cd plugins/modules/`` inside your collection development tree. 2. Create your new module file: ``$ touch my_test.py``. 3. Paste the content below into your new module file. It includes the :ref:`required Ansible format and documentation `, a simple :ref:`argument spec for declaring the module options `, and some example code. 4. Modify and extend the code to do what you want your new module to do. See the :ref:`programming tips ` and :ref:`Python 3 compatibility ` pages for pointers on writing clean and concise module code. .. literalinclude:: ../../../../examples/scripts/my_test.py :language: python Verifying your module code ========================== After you modify the sample code above to do what you want, you can try out your module. Our :ref:`debugging tips ` will help if you run into bugs as you verify your module code. Verifying your module code locally ---------------------------------- If your module does not need to target a remote host, you can quickly and easily exercise your code locally like this: - Create an arguments file, a basic JSON config file that passes parameters to your module so that you can run it. Name the arguments file ``/tmp/args.json`` and add the following content: .. code:: json { "ANSIBLE_MODULE_ARGS": { "name": "hello", "new": true } } - If you are using a virtual environment (which is highly recommended for development) activate it: ``$ . venv/bin/activate`` - Set up the environment for development: ``$ . hacking/env-setup`` - Run your test module locally and directly: ``$ python -m ansible.modules.my_test /tmp/args.json`` This should return output like this: .. code:: json {"changed": true, "state": {"original_message": "hello", "new_message": "goodbye"}, "invocation": {"module_args": {"name": "hello", "new": true}}} Verifying your module code in a playbook ---------------------------------------- The next step in verifying your new module is to consume it with an Ansible playbook. - Create a playbook in any directory: ``$ touch testmod.yml`` - Add the following to the new playbook file: .. code-block:: yaml - name: test my new module hosts: localhost tasks: - name: run the new module my_test: name: 'hello' new: true register: testout - name: dump test output debug: msg: '{{ testout }}' - Run the playbook and analyze the output: ``$ ansible-playbook ./testmod.yml`` Testing your newly-created module ================================= The following two examples will get you started with testing your module code. Please review our :ref:`testing ` section for more detailed information, including instructions for :ref:`testing module documentation `, adding :ref:`integration tests `, and more. .. note:: Every new module and plugin should have integration tests, even if the tests cannot be run on Ansible CI infrastructure. In this case, the tests should be marked with the ``unsupported`` alias in `aliases file `_. Performing sanity tests ----------------------- You can run through Ansible's sanity checks in a container: ``$ ansible-test sanity -v --docker --python 2.7 MODULE_NAME`` .. note:: Note that this example requires Docker to be installed and running. If you'd rather not use a container for this, you can choose to use ``--venv`` instead of ``--docker``. Adding unit tests ----------------- You can add unit tests for your module in ``./test/units/modules``. You must first set up your testing environment. In this example, we're using Python 3.5. - Install the requirements (outside of your virtual environment): ``$ pip3 install -r ./test/lib/ansible_test/_data/requirements/units.txt`` - Run ``. hacking/env-setup`` - To run all tests do the following: ``$ ansible-test units --python 3.5``. If you are using a CI environment, these tests will run automatically. .. note:: Ansible uses pytest for unit testing. To run pytest against a single test module, you can run the following command. Ensure that you are providing the correct path of the test module: ``$ pytest -r a --cov=. --cov-report=html --fulltrace --color yes test/units/modules/.../test/my_test.py`` Contributing back to Ansible ============================ If you would like to contribute to ``ansible-core`` by adding a new feature or fixing a bug, `create a fork `_ of the ansible/ansible repository and develop against a new feature branch using the ``devel`` branch as a starting point. When you have a good working code change, you can submit a pull request to the Ansible repository by selecting your feature branch as a source and the Ansible devel branch as a target. If you want to contribute a module to an :ref:`Ansible collection `, review our :ref:`submission checklist `, :ref:`programming tips `, and :ref:`strategy for maintaining Python 2 and Python 3 compatibility `, as well as information about :ref:`testing ` before you open a pull request. The :ref:`Community Guide ` covers how to open a pull request and what happens next. Communication and development support ===================================== Join the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) for discussions surrounding Ansible development. For questions and discussions pertaining to using the Ansible product, join the ``#ansible`` channel. To find other topic-specific chat channels, look at :ref:`Community Guide, Communicating `. Credit ====== Thank you to Thomas Stringer (`@trstringer `_) for contributing source material for this topic. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.451556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_general_aci.rst0000644000000000000000000004123200000000000030154 0ustar00rootroot00000000000000.. _aci_dev_guide: **************************** Developing Cisco ACI modules **************************** This is a brief walk-through of how to create new Cisco ACI modules for Ansible. For more information about Cisco ACI, look at the :ref:`Cisco ACI user guide `. What's covered in this section: .. contents:: :depth: 3 :local: .. _aci_dev_guide_intro: Introduction ============ The `cisco.aci collection `_ already includes a large number of Cisco ACI modules, however the ACI object model is huge and covering all possible functionality would easily cover more than 1500 individual modules. If you need specific functionality, you have 2 options: - Learn the ACI object model and use the low-level APIC REST API using the :ref:`aci_rest ` module - Write your own dedicated modules, which is actually quite easy .. seealso:: `ACI Fundamentals: ACI Policy Model `_ A good introduction to the ACI object model. `APIC Management Information Model reference `_ Complete reference of the APIC object model. `APIC REST API Configuration Guide `_ Detailed guide on how the APIC REST API is designed and used, incl. many examples. So let's look at how a typical ACI module is built up. .. _aci_dev_guide_module_structure: ACI module structure ==================== Importing objects from Python libraries --------------------------------------- The following imports are standard across ACI modules: .. code-block:: python from ansible.module_utils.aci import ACIModule, aci_argument_spec from ansible.module_utils.basic import AnsibleModule Defining the argument spec -------------------------- The first line adds the standard connection parameters to the module. After that, the next section will update the ``argument_spec`` dictionary with module-specific parameters. The module-specific parameters should include: * the object_id (usually the name) * the configurable properties of the object * the parent object IDs (all parents up to the root) * only child classes that are a 1-to-1 relationship (1-to-many/many-to-many require their own module to properly manage) * the state + ``state: absent`` to ensure object does not exist + ``state: present`` to ensure the object and configs exist; this is also the default + ``state: query`` to retrieve information about objects in the class .. code-block:: python def main(): argument_spec = aci_argument_spec() argument_spec.update( object_id=dict(type='str', aliases=['name']), object_prop1=dict(type='str'), object_prop2=dict(type='str', choices=['choice1', 'choice2', 'choice3']), object_prop3=dict(type='int'), parent_id=dict(type='str'), child_object_id=dict(type='str'), child_object_prop=dict(type='str'), state=dict(type='str', default='present', choices=['absent', 'present', 'query']), ) .. hint:: Do not provide default values for configuration arguments. Default values could cause unintended changes to the object. Using the AnsibleModule object ------------------------------ The following section creates an AnsibleModule instance. The module should support check-mode, so we pass the ``argument_spec`` and ``supports_check_mode`` arguments. Since these modules support querying the APIC for all objects of the module's class, the object/parent IDs should only be required if ``state: absent`` or ``state: present``. .. code-block:: python module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, required_if=[ ['state', 'absent', ['object_id', 'parent_id']], ['state', 'present', ['object_id', 'parent_id']], ], ) Mapping variable definition --------------------------- Once the AnsibleModule object has been initiated, the necessary parameter values should be extracted from ``params`` and any data validation should be done. Usually the only params that need to be extracted are those related to the ACI object configuration and its child configuration. If you have integer objects that you would like to validate, then the validation should be done here, and the ``ACIModule.payload()`` method will handle the string conversion. .. code-block:: python object_id = object_id object_prop1 = module.params['object_prop1'] object_prop2 = module.params['object_prop2'] object_prop3 = module.params['object_prop3'] if object_prop3 is not None and object_prop3 not in range(x, y): module.fail_json(msg='Valid object_prop3 values are between x and (y-1)') child_object_id = module.params['child_object_id'] child_object_prop = module.params['child_object_prop'] state = module.params['state'] Using the ACIModule object -------------------------- The ACIModule class handles most of the logic for the ACI modules. The ACIModule extends functionality to the AnsibleModule object, so the module instance must be passed into the class instantiation. .. code-block:: python aci = ACIModule(module) The ACIModule has six main methods that are used by the modules: * construct_url * get_existing * payload * get_diff * post_config * delete_config The first two methods are used regardless of what value is passed to the ``state`` parameter. Constructing URLs ^^^^^^^^^^^^^^^^^ The ``construct_url()`` method is used to dynamically build the appropriate URL to interact with the object, and the appropriate filter string that should be appended to the URL to filter the results. * When the ``state`` is not ``query``, the URL is the base URL to access the APIC plus the distinguished name to access the object. The filter string will restrict the returned data to just the configuration data. * When ``state`` is ``query``, the URL and filter string used depends on what parameters are passed to the object. This method handles the complexity so that it is easier to add new modules and so that all modules are consistent in what type of data is returned. .. note:: Our design goal is to take all ID parameters that have values, and return the most specific data possible. If you do not supply any ID parameters to the task, then all objects of the class will be returned. If your task does consist of ID parameters sed, then the data for the specific object is returned. If a partial set of ID parameters are passed, then the module will use the IDs that are passed to build the URL and filter strings appropriately. The ``construct_url()`` method takes 2 required arguments: * **self** - passed automatically with the class instance * **root_class** - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys + **aci_class**: The name of the class used by the APIC, for example ``fvTenant`` + **aci_rn**: The relative name of the object, for example ``tn-ACME`` + **target_filter**: A dictionary with key-value pairs that make up the query string for selecting a subset of entries, for example ``{'name': 'ACME'}`` + **module_object**: The particular object for this class, for example ``ACME`` Example: .. code-block:: python aci.construct_url( root_class=dict( aci_class='fvTenant', aci_rn='tn-{0}'.format(tenant), target_filter={'name': tenant}, module_object=tenant, ), ) Some modules, like ``aci_tenant``, are the root class and so they would not need to pass any additional arguments to the method. The ``construct_url()`` method takes 4 optional arguments, the first three imitate the root class as described above, but are for child objects: * subclass_1 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys + Example: Application Profile Class (AP) * subclass_2 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys + Example: End Point Group (EPG) * subclass_3 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys + Example: Binding a Contract to an EPG * child_classes - The list of APIC names for the child classes supported by the modules. + This is a list, even if it is a list of one + These are the unfriendly names used by the APIC + These are used to limit the returned child_classes when possible + Example: ``child_classes=['fvRsBDSubnetToProfile', 'fvRsNdPfxPol']`` .. note:: Sometimes the APIC will require special characters ([, ], and -) or will use object metadata in the name ("vlanns" for VLAN pools); the module should handle adding special characters or joining of multiple parameters in order to keep expected inputs simple. Getting the existing configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Once the URL and filter string have been built, the module is ready to retrieve the existing configuration for the object: * ``state: present`` retrieves the configuration to use as a comparison against what was entered in the task. All values that are different than the existing values will be updated. * ``state: absent`` uses the existing configuration to see if the item exists and needs to be deleted. * ``state: query`` uses this to perform the query for the task and report back the existing data. .. code-block:: python aci.get_existing() When state is present ^^^^^^^^^^^^^^^^^^^^^ When ``state: present``, the module needs to perform a diff against the existing configuration and the task entries. If any value needs to be updated, then the module will make a POST request with only the items that need to be updated. Some modules have children that are in a 1-to-1 relationship with another object; for these cases, the module can be used to manage the child objects. Building the ACI payload """""""""""""""""""""""" The ``aci.payload()`` method is used to build a dictionary of the proposed object configuration. All parameters that were not provided a value in the task will be removed from the dictionary (both for the object and its children). Any parameter that does have a value will be converted to a string and added to the final dictionary object that will be used for comparison against the existing configuration. The ``aci.payload()`` method takes two required arguments and 1 optional argument, depending on if the module manages child objects. * ``aci_class`` is the APIC name for the object's class, for example ``aci_class='fvBD'`` * ``class_config`` is the appropriate dictionary to be used as the payload for the POST request + The keys should match the names used by the APIC. + The values should be the corresponding value in ``module.params``; these are the variables defined above * ``child_configs`` is optional, and is a list of child config dictionaries. + The child configs include the full child object dictionary, not just the attributes configuration portion. + The configuration portion is built the same way as the object. .. code-block:: python aci.payload( aci_class=aci_class, class_config=dict( name=bd, descr=description, type=bd_type, ), child_configs=[ dict( fvRsCtx=dict( attributes=dict( tnFvCtxName=vrf ), ), ), ], ) Performing the request """""""""""""""""""""" The ``get_diff()`` method is used to perform the diff, and takes only one required argument, ``aci_class``. Example: ``aci.get_diff(aci_class='fvBD')`` The ``post_config()`` method is used to make the POST request to the APIC if needed. This method doesn't take any arguments and handles check mode. Example: ``aci.post_config()`` Example code """""""""""" .. code-block:: text if state == 'present': aci.payload( aci_class='', class_config=dict( name=object_id, prop1=object_prop1, prop2=object_prop2, prop3=object_prop3, ), child_configs=[ dict( ''=dict( attributes=dict( child_key=child_object_id, child_prop=child_object_prop ), ), ), ], ) aci.get_diff(aci_class='') aci.post_config() When state is absent ^^^^^^^^^^^^^^^^^^^^ If the task sets the state to absent, then the ``delete_config()`` method is all that is needed. This method does not take any arguments, and handles check mode. .. code-block:: text elif state == 'absent': aci.delete_config() Exiting the module ^^^^^^^^^^^^^^^^^^ To have the module exit, call the ACIModule method ``exit_json()``. This method automatically takes care of returning the common return values for you. .. code-block:: text aci.exit_json() if __name__ == '__main__': main() .. _aci_dev_guide_testing: Testing ACI library functions ============================= You can test your ``construct_url()`` and ``payload()`` arguments without accessing APIC hardware by using the following python script: .. code-block:: text #!/usr/bin/python import json from ansible.module_utils.network.aci.aci import ACIModule # Just another class mimicing a bare AnsibleModule class for construct_url() and payload() methods class AltModule(): params = dict( host='dummy', port=123, protocol='https', state='present', output_level='debug', ) # A sub-class of ACIModule to overload __init__ (we don't need to log into APIC) class AltACIModule(ACIModule): def __init__(self): self.result = dict(changed=False) self.module = AltModule() self.params = self.module.params # Instantiate our version of the ACI module aci = AltACIModule() # Define the variables you need below aep = 'AEP' aep_domain = 'uni/phys-DOMAIN' # Below test the construct_url() arguments to see if it produced correct results aci.construct_url( root_class=dict( aci_class='infraAttEntityP', aci_rn='infra/attentp-{}'.format(aep), target_filter={'name': aep}, module_object=aep, ), subclass_1=dict( aci_class='infraRsDomP', aci_rn='rsdomP-[{}]'.format(aep_domain), target_filter={'tDn': aep_domain}, module_object=aep_domain, ), ) # Below test the payload arguments to see if it produced correct results aci.payload( aci_class='infraRsDomP', class_config=dict(tDn=aep_domain), ) # Print the URL and proposed payload print 'URL:', json.dumps(aci.url, indent=4) print 'PAYLOAD:', json.dumps(aci.proposed, indent=4) This will result in: .. code-block:: yaml URL: "https://dummy/api/mo/uni/infra/attentp-AEP/rsdomP-[phys-DOMAIN].json" PAYLOAD: { "infraRsDomP": { "attributes": { "tDn": "phys-DOMAIN" } } } Testing for sanity checks ------------------------- You can run from your fork something like: .. code-block:: bash $ ansible-test sanity --python 2.7 lib/ansible/modules/network/aci/aci_tenant.py .. seealso:: :ref:`testing_sanity` Information on how to build sanity tests. Testing ACI integration tests ----------------------------- You can run this: .. code-block:: bash $ ansible-test network-integration --continue-on-error --allow-unsupported --diff -v aci_tenant .. note:: You may need to add ``--python 2.7`` or ``--python 3.6`` in order to use the correct python version for performing tests. You may want to edit the used inventory at *test/integration/inventory.networking* and add something like: .. code-block:: ini [aci:vars] aci_hostname=my-apic-1 aci_username=admin aci_password=my-password aci_use_ssl=yes aci_use_proxy=no [aci] localhost ansible_ssh_host=127.0.0.1 ansible_connection=local .. seealso:: :ref:`testing_integration` Information on how to build integration tests. Testing for test coverage ------------------------- You can run this: .. code-block:: bash $ ansible-test network-integration --python 2.7 --allow-unsupported --coverage aci_tenant $ ansible-test coverage report ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.451556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_general_windows.rst0000644000000000000000000010623400000000000031116 0ustar00rootroot00000000000000.. _developing_modules_general_windows: ************************************** Windows module development walkthrough ************************************** In this section, we will walk through developing, testing, and debugging an Ansible Windows module. Because Windows modules are written in Powershell and need to be run on a Windows host, this guide differs from the usual development walkthrough guide. What's covered in this section: .. contents:: :local: Windows environment setup ========================= Unlike Python module development which can be run on the host that runs Ansible, Windows modules need to be written and tested for Windows hosts. While evaluation editions of Windows can be downloaded from Microsoft, these images are usually not ready to be used by Ansible without further modification. The easiest way to set up a Windows host so that it is ready to by used by Ansible is to set up a virtual machine using Vagrant. Vagrant can be used to download existing OS images called *boxes* that are then deployed to a hypervisor like VirtualBox. These boxes can either be created and stored offline or they can be downloaded from a central repository called Vagrant Cloud. This guide will use the Vagrant boxes created by the `packer-windoze `_ repository which have also been uploaded to `Vagrant Cloud `_. To find out more info on how these images are created, please go to the GitHub repo and look at the ``README`` file. Before you can get started, the following programs must be installed (please consult the Vagrant and VirtualBox documentation for installation instructions): - Vagrant - VirtualBox Create a Windows server in a VM =============================== To create a single Windows Server 2016 instance, run the following: .. code-block:: shell vagrant init jborean93/WindowsServer2016 vagrant up This will download the Vagrant box from Vagrant Cloud and add it to the local boxes on your host and then start up that instance in VirtualBox. When starting for the first time, the Windows VM will run through the sysprep process and then create a HTTP and HTTPS WinRM listener automatically. Vagrant will finish its process once the listeners are online, after which the VM can be used by Ansible. Create an Ansible inventory =========================== The following Ansible inventory file can be used to connect to the newly created Windows VM: .. code-block:: ini [windows] WindowsServer ansible_host=127.0.0.1 [windows:vars] ansible_user=vagrant ansible_password=vagrant ansible_port=55986 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore .. note:: The port ``55986`` is automatically forwarded by Vagrant to the Windows host that was created, if this conflicts with an existing local port then Vagrant will automatically use another one at random and display show that in the output. The OS that is created is based on the image set. The following images can be used: - `jborean93/WindowsServer2008-x86 `_ - `jborean93/WindowsServer2008-x64 `_ - `jborean93/WindowsServer2008R2 `_ - `jborean93/WindowsServer2012 `_ - `jborean93/WindowsServer2012R2 `_ - `jborean93/WindowsServer2016 `_ - `jborean93/WindowsServer2019 `_ When the host is online, it can accessible by RDP on ``127.0.0.1:3389`` but the port may differ depending if there was a conflict. To get rid of the host, run ``vagrant destroy --force`` and Vagrant will automatically remove the VM and any other files associated with that VM. While this is useful when testing modules on a single Windows instance, these host won't work without modification with domain based modules. The Vagrantfile at `ansible-windows `_ can be used to create a test domain environment to be used in Ansible. This repo contains three files which are used by both Ansible and Vagrant to create multiple Windows hosts in a domain environment. These files are: - ``Vagrantfile``: The Vagrant file that reads the inventory setup of ``inventory.yml`` and provisions the hosts that are required - ``inventory.yml``: Contains the hosts that are required and other connection information such as IP addresses and forwarded ports - ``main.yml``: Ansible playbook called by Vagrant to provision the domain controller and join the child hosts to the domain By default, these files will create the following environment: - A single domain controller running on Windows Server 2016 - Five child hosts for each major Windows Server version joined to that domain - A domain with the DNS name ``domain.local`` - A local administrator account on each host with the username ``vagrant`` and password ``vagrant`` - A domain admin account ``vagrant-domain@domain.local`` with the password ``VagrantPass1`` The domain name and accounts can be modified by changing the variables ``domain_*`` in the ``inventory.yml`` file if it is required. The inventory file can also be modified to provision more or less servers by changing the hosts that are defined under the ``domain_children`` key. The host variable ``ansible_host`` is the private IP that will be assigned to the VirtualBox host only network adapter while ``vagrant_box`` is the box that will be used to create the VM. Provisioning the environment ============================ To provision the environment as is, run the following: .. code-block:: shell git clone https://github.com/jborean93/ansible-windows.git cd vagrant vagrant up .. note:: Vagrant provisions each host sequentially so this can take some time to complete. If any errors occur during the Ansible phase of setting up the domain, run ``vagrant provision`` to rerun just that step. Unlike setting up a single Windows instance with Vagrant, these hosts can also be accessed using the IP address directly as well as through the forwarded ports. It is easier to access it over the host only network adapter as the normal protocol ports are used, for example RDP is still over ``3389``. In cases where the host cannot be resolved using the host only network IP, the following protocols can be access over ``127.0.0.1`` using these forwarded ports: - ``RDP``: 295xx - ``SSH``: 296xx - ``WinRM HTTP``: 297xx - ``WinRM HTTPS``: 298xx - ``SMB``: 299xx Replace ``xx`` with the entry number in the inventory file where the domain controller started with ``00`` and is incremented from there. For example, in the default ``inventory.yml`` file, WinRM over HTTPS for ``SERVER2012R2`` is forwarded over port ``29804`` as it's the fourth entry in ``domain_children``. .. note:: While an SSH server is available on all Windows hosts but Server 2008 (non R2), it is not a support connection for Ansible managing Windows hosts and should not be used with Ansible. Windows new module development ============================== When creating a new module there are a few things to keep in mind: - Module code is in Powershell (.ps1) files while the documentation is contained in Python (.py) files of the same name - Avoid using ``Write-Host/Debug/Verbose/Error`` in the module and add what needs to be returned to the ``$module.Result`` variable - To fail a module, call ``$module.FailJson("failure message here")``, an Exception or ErrorRecord can be set to the second argument for a more descriptive error message - You can pass in the exception or ErrorRecord as a second argument to ``FailJson("failure", $_)`` to get a more detailed output - Most new modules require check mode and integration tests before they are merged into the main Ansible codebase - Avoid using try/catch statements over a large code block, rather use them for individual calls so the error message can be more descriptive - Try and catch specific exceptions when using try/catch statements - Avoid using PSCustomObjects unless necessary - Look for common functions in ``./lib/ansible/module_utils/powershell/`` and use the code there instead of duplicating work. These can be imported by adding the line ``#Requires -Module *`` where * is the filename to import, and will be automatically included with the module code sent to the Windows target when run via Ansible - As well as PowerShell module utils, C# module utils are stored in ``./lib/ansible/module_utils/csharp/`` and are automatically imported in a module execution if the line ``#AnsibleRequires -CSharpUtil *`` is present - C# and PowerShell module utils achieve the same goal but C# allows a developer to implement low level tasks, such as calling the Win32 API, and can be faster in some cases - Ensure the code runs under Powershell v3 and higher on Windows Server 2008 and higher; if higher minimum Powershell or OS versions are required, ensure the documentation reflects this clearly - Ansible runs modules under strictmode version 2.0. Be sure to test with that enabled by putting ``Set-StrictMode -Version 2.0`` at the top of your dev script - Favor native Powershell cmdlets over executable calls if possible - Use the full cmdlet name instead of aliases, for example ``Remove-Item`` over ``rm`` - Use named parameters with cmdlets, for example ``Remove-Item -Path C:\temp`` over ``Remove-Item C:\temp`` A very basic Powershell module `win_environment `_ incorporates best practices for Powershell modules. It demonstrates how to implement check-mode and diff-support, and also shows a warning to the user when a specific condition is met. A slightly more advanced module is `win_uri `_ which additionally shows how to use different parameter types (bool, str, int, list, dict, path) and a selection of choices for parameters, how to fail a module and how to handle exceptions. As part of the new ``AnsibleModule`` wrapper, the input parameters are defined and validated based on an argument spec. The following options can be set at the root level of the argument spec: - ``mutually_exclusive``: A list of lists, where the inner list contains module options that cannot be set together - ``no_log``: Stops the module from emitting any logs to the Windows Event log - ``options``: A dictionary where the key is the module option and the value is the spec for that option - ``required_by``: A dictionary where the option(s) specified by the value must be set if the option specified by the key is also set - ``required_if``: A list of lists where the inner list contains 3 or 4 elements; * The first element is the module option to check the value against * The second element is the value of the option specified by the first element, if matched then the required if check is run * The third element is a list of required module options when the above is matched * An optional fourth element is a boolean that states whether all module options in the third elements are required (default: ``$false``) or only one (``$true``) - ``required_one_of``: A list of lists, where the inner list contains module options where at least one must be set - ``required_together``: A list of lists, where the inner list contains module options that must be set together - ``supports_check_mode``: Whether the module supports check mode, by default this is ``$false`` The actual input options for a module are set within the ``options`` value as a dictionary. The keys of this dictionary are the module option names while the values are the spec of that module option. Each spec can have the following options set: - ``aliases``: A list of aliases for the module option - ``choices``: A list of valid values for the module option, if ``type=list`` then each list value is validated against the choices and not the list itself - ``default``: The default value for the module option if not set - ``deprecated_aliases``: A list of hashtables that define aliases that are deprecated and the versions they will be removed in. Each entry must contain the keys ``name`` and ``collection_name`` with either ``version`` or ``date`` - ``elements``: When ``type=list``, this sets the type of each list value, the values are the same as ``type`` - ``no_log``: Will sanitise the input value before being returned in the ``module_invocation`` return value - ``removed_in_version``: States when a deprecated module option is to be removed, a warning is displayed to the end user if set - ``removed_at_date``: States the date (YYYY-MM-DD) when a deprecated module option will be removed, a warning is displayed to the end user if set - ``removed_from_collection``: States from which collection the deprecated module option will be removed; must be specified if one of ``removed_in_version`` and ``removed_at_date`` is specified - ``required``: Will fail when the module option is not set - ``type``: The type of the module option, if not set then it defaults to ``str``. The valid types are; * ``bool``: A boolean value * ``dict``: A dictionary value, if the input is a JSON or key=value string then it is converted to dictionary * ``float``: A float or `Single `_ value * ``int``: An Int32 value * ``json``: A string where the value is converted to a JSON string if the input is a dictionary * ``list``: A list of values, ``elements=`` can convert the individual list value types if set. If ``elements=dict`` then ``options`` is defined, the values will be validated against the argument spec. When the input is a string then the string is split by ``,`` and any whitespace is trimmed * ``path``: A string where values likes ``%TEMP%`` are expanded based on environment values. If the input value starts with ``\\?\`` then no expansion is run * ``raw``: No conversions occur on the value passed in by Ansible * ``sid``: Will convert Windows security identifier values or Windows account names to a `SecurityIdentifier `_ value * ``str``: The value is converted to a string When ``type=dict``, or ``type=list`` and ``elements=dict``, the following keys can also be set for that module option: - ``apply_defaults``: The value is based on the ``options`` spec defaults for that key if ``True`` and null if ``False``. Only valid when the module option is not defined by the user and ``type=dict``. - ``mutually_exclusive``: Same as the root level ``mutually_exclusive`` but validated against the values in the sub dict - ``options``: Same as the root level ``options`` but contains the valid options for the sub option - ``required_if``: Same as the root level ``required_if`` but validated against the values in the sub dict - ``required_by``: Same as the root level ``required_by`` but validated against the values in the sub dict - ``required_together``: Same as the root level ``required_together`` but validated against the values in the sub dict - ``required_one_of``: Same as the root level ``required_one_of`` but validated against the values in the sub dict A module type can also be a delegate function that converts the value to whatever is required by the module option. For example the following snippet shows how to create a custom type that creates a ``UInt64`` value: .. code-block:: powershell $spec = @{ uint64_type = @{ type = [Func[[Object], [UInt64]]]{ [System.UInt64]::Parse($args[0]) } } } $uint64_type = $module.Params.uint64_type When in doubt, look at some of the other core modules and see how things have been implemented there. Sometimes there are multiple ways that Windows offers to complete a task; this is the order to favor when writing modules: - Native Powershell cmdlets like ``Remove-Item -Path C:\temp -Recurse`` - .NET classes like ``[System.IO.Path]::GetRandomFileName()`` - WMI objects through the ``New-CimInstance`` cmdlet - COM objects through ``New-Object -ComObject`` cmdlet - Calls to native executables like ``Secedit.exe`` PowerShell modules support a small subset of the ``#Requires`` options built into PowerShell as well as some Ansible-specific requirements specified by ``#AnsibleRequires``. These statements can be placed at any point in the script, but are most commonly near the top. They are used to make it easier to state the requirements of the module without writing any of the checks. Each ``requires`` statement must be on its own line, but there can be multiple requires statements in one script. These are the checks that can be used within Ansible modules: - ``#Requires -Module Ansible.ModuleUtils.``: Added in Ansible 2.4, specifies a module_util to load in for the module execution. - ``#Requires -Version x.y``: Added in Ansible 2.5, specifies the version of PowerShell that is required by the module. The module will fail if this requirement is not met. - ``#AnsibleRequires -OSVersion x.y``: Added in Ansible 2.5, specifies the OS build version that is required by the module and will fail if this requirement is not met. The actual OS version is derived from ``[Environment]::OSVersion.Version``. - ``#AnsibleRequires -Become``: Added in Ansible 2.5, forces the exec runner to run the module with ``become``, which is primarily used to bypass WinRM restrictions. If ``ansible_become_user`` is not specified then the ``SYSTEM`` account is used instead. - ``#AnsibleRequires -CSharpUtil Ansible.``: Added in Ansible 2.8, specifies a C# module_util to load in for the module execution. C# module utils can reference other C# utils by adding the line ``using Ansible.;`` to the top of the script with all the other using statements. Windows module utilities ======================== Like Python modules, PowerShell modules also provide a number of module utilities that provide helper functions within PowerShell. These module_utils can be imported by adding the following line to a PowerShell module: .. code-block:: powershell #Requires -Module Ansible.ModuleUtils.Legacy This will import the module_util at ``./lib/ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1`` and enable calling all of its functions. As of Ansible 2.8, Windows module utils can also be written in C# and stored at ``lib/ansible/module_utils/csharp``. These module_utils can be imported by adding the following line to a PowerShell module: .. code-block:: powershell #AnsibleRequires -CSharpUtil Ansible.Basic This will import the module_util at ``./lib/ansible/module_utils/csharp/Ansible.Basic.cs`` and automatically load the types in the executing process. C# module utils can reference each other and be loaded together by adding the following line to the using statements at the top of the util: .. code-block:: csharp using Ansible.Become; There are special comments that can be set in a C# file for controlling the compilation parameters. The following comments can be added to the script; - ``//AssemblyReference -Name [-CLR [Core|Framework]]``: The assembly DLL to reference during compilation, the optional ``-CLR`` flag can also be used to state whether to reference when running under .NET Core, Framework, or both (if omitted) - ``//NoWarn -Name [-CLR [Core|Framework]]``: A compiler warning ID to ignore when compiling the code, the optional ``-CLR`` works the same as above. A list of warnings can be found at `Compiler errors `_ As well as this, the following pre-processor symbols are defined; - ``CORECLR``: This symbol is present when PowerShell is running through .NET Core - ``WINDOWS``: This symbol is present when PowerShell is running on Windows - ``UNIX``: This symbol is present when PowerShell is running on Unix A combination of these flags help to make a module util interoperable on both .NET Framework and .NET Core, here is an example of them in action: .. code-block:: csharp #if CORECLR using Newtonsoft.Json; #else using System.Web.Script.Serialization; #endif //AssemblyReference -Name Newtonsoft.Json.dll -CLR Core //AssemblyReference -Name System.Web.Extensions.dll -CLR Framework // Ignore error CS1702 for all .NET types //NoWarn -Name CS1702 // Ignore error CS1956 only for .NET Framework //NoWarn -Name CS1956 -CLR Framework The following is a list of module_utils that are packaged with Ansible and a general description of what they do: - ArgvParser: Utility used to convert a list of arguments to an escaped string compliant with the Windows argument parsing rules. - CamelConversion: Utility used to convert camelCase strings/lists/dicts to snake_case. - CommandUtil: Utility used to execute a Windows process and return the stdout/stderr and rc as separate objects. - FileUtil: Utility that expands on the ``Get-ChildItem`` and ``Test-Path`` to work with special files like ``C:\pagefile.sys``. - Legacy: General definitions and helper utilities for Ansible module. - LinkUtil: Utility to create, remove, and get information about symbolic links, junction points and hard inks. - SID: Utilities used to convert a user or group to a Windows SID and vice versa. For more details on any specific module utility and their requirements, please see the `Ansible module utilities source code `_. PowerShell module utilities can be stored outside of the standard Ansible distribution for use with custom modules. Custom module_utils are placed in a folder called ``module_utils`` located in the root folder of the playbook or role directory. C# module utilities can also be stored outside of the standard Ansible distribution for use with custom modules. Like PowerShell utils, these are stored in a folder called ``module_utils`` and the filename must end in the extension ``.cs``, start with ``Ansible.`` and be named after the namespace defined in the util. The below example is a role structure that contains two PowerShell custom module_utils called ``Ansible.ModuleUtils.ModuleUtil1``, ``Ansible.ModuleUtils.ModuleUtil2``, and a C# util containing the namespace ``Ansible.CustomUtil``:: meta/ main.yml defaults/ main.yml module_utils/ Ansible.ModuleUtils.ModuleUtil1.psm1 Ansible.ModuleUtils.ModuleUtil2.psm1 Ansible.CustomUtil.cs tasks/ main.yml Each PowerShell module_util must contain at least one function that has been exported with ``Export-ModuleMember`` at the end of the file. For example .. code-block:: powershell Export-ModuleMember -Function Invoke-CustomUtil, Get-CustomInfo Exposing shared module options ++++++++++++++++++++++++++++++ PowerShell module utils can easily expose common module options that a module can use when building its argument spec. This allows common features to be stored and maintained in one location and have those features used by multiple modules with minimal effort. Any new features or bugfixes added to one of these utils are then automatically used by the various modules that call that util. An example of this would be to have a module util that handles authentication and communication against an API This util can be used by multiple modules to expose a common set of module options like the API endpoint, username, password, timeout, cert validation, and so on without having to add those options to each module spec. The standard convention for a module util that has a shared argument spec would have - A ``Get-Spec`` function that outputs the common spec for a module * It is highly recommended to make this function name be unique to the module to avoid any conflicts with other utils that can be loaded * The format of the output spec is a Hashtable in the same format as the ``$spec`` used for normal modules - A function that takes in an ``AnsibleModule`` object called under the ``-Module`` parameter which it can use to get the shared options Because these options can be shared across various module it is highly recommended to keep the module option names and aliases in the shared spec as specific as they can be. For example do not have a util option called ``password``, rather you should prefix it with a unique name like ``acme_password``. .. warning:: Failure to have a unique option name or alias can prevent the util being used by module that also use those names or aliases for its own options. The following is an example module util called ``ServiceAuth.psm1`` in a collection that implements a common way for modules to authentication with a service. .. code-block:: powershell Invoke-MyServiceResource { [CmdletBinding()] param ( [Parameter(Mandatory=$true)] [ValidateScript({ $_.GetType().FullName -eq 'Ansible.Basic.AnsibleModule' })] $Module, [Parameter(Mandatory=$true)] [String] $ResourceId [String] $State = 'present' ) # Process the common module options known to the util $params = @{ ServerUri = $Module.Params.my_service_url } if ($Module.Params.my_service_username) { $params.Credential = Get-MyServiceCredential } if ($State -eq 'absent') { Remove-MyService @params -ResourceId $ResourceId } else { New-MyService @params -ResourceId $ResourceId } } Get-MyNamespaceMyCollectionServiceAuthSpec { # Output the util spec @{ options = @{ my_service_url = @{ type = 'str'; required = $true } my_service_username = @{ type = 'str' } my_service_password = @{ type = 'str'; no_log = $true } } required_together = @( ,@('my_service_username', 'my_service_password') ) } } $exportMembers = @{ Function = 'Get-MyNamespaceMyCollectionServiceAuthSpec', 'Invoke-MyServiceResource' } Export-ModuleMember @exportMembers For a module to take advantage of this common argument spec it can be set out like .. code-block:: powershell #!powershell # Include the module util ServiceAuth.psm1 from the my_namespace.my_collection collection #AnsibleRequires -PowerShell ansible_collections.my_namespace.my_collection.plugins.module_utils.ServiceAuth # Create the module spec like normal $spec = @{ options = @{ resource_id = @{ type = 'str'; required = $true } state = @{ type = 'str'; choices = 'absent', 'present' } } } # Create the module from the module spec but also include the util spec to merge into our own. $module = [Ansible.Basic.AnsibleModule]::Create($args, $spec, @(Get-MyNamespaceMyCollectionServiceAuthSpec)) # Call the ServiceAuth module util and pass in the module object so it can access the module options. Invoke-MyServiceResource -Module $module -ResourceId $module.Params.resource_id -State $module.params.state $module.ExitJson() .. note:: Options defined in the module spec will always have precedence over a util spec. Any list values under the same key in a util spec will be appended to the module spec for that same key. Dictionary values will add any keys that are missing from the module spec and merge any values that are lists or dictionaries. This is similar to how the doc fragment plugins work when extending module documentation. To document these shared util options for a module, create a doc fragment plugin that documents the options implemented by the module util and extend the module docs for every module that implements the util to include that fragment in its docs. Windows playbook module testing =============================== You can test a module with an Ansible playbook. For example: - Create a playbook in any directory ``touch testmodule.yml``. - Create an inventory file in the same directory ``touch hosts``. - Populate the inventory file with the variables required to connect to a Windows host(s). - Add the following to the new playbook file:: --- - name: test out windows module hosts: windows tasks: - name: test out module win_module: name: test name - Run the playbook ``ansible-playbook -i hosts testmodule.yml`` This can be useful for seeing how Ansible runs with the new module end to end. Other possible ways to test the module are shown below. Windows debugging ================= Debugging a module currently can only be done on a Windows host. This can be useful when developing a new module or implementing bug fixes. These are some steps that need to be followed to set this up: - Copy the module script to the Windows server - Copy the folders ``./lib/ansible/module_utils/powershell`` and ``./lib/ansible/module_utils/csharp`` to the same directory as the script above - Add an extra ``#`` to the start of any ``#Requires -Module`` lines in the module code, this is only required for any lines starting with ``#Requires -Module`` - Add the following to the start of the module script that was copied to the server: .. code-block:: powershell # Set $ErrorActionPreference to what's set during Ansible execution $ErrorActionPreference = "Stop" # Set the first argument as the path to a JSON file that contains the module args $args = @("$($pwd.Path)\args.json") # Or instead of an args file, set $complex_args to the pre-processed module args $complex_args = @{ _ansible_check_mode = $false _ansible_diff = $false path = "C:\temp" state = "present" } # Import any C# utils referenced with '#AnsibleRequires -CSharpUtil' or 'using Ansible.; # The $_csharp_utils entries should be the context of the C# util files and not the path Import-Module -Name "$($pwd.Path)\powershell\Ansible.ModuleUtils.AddType.psm1" $_csharp_utils = @( [System.IO.File]::ReadAllText("$($pwd.Path)\csharp\Ansible.Basic.cs") ) Add-CSharpType -References $_csharp_utils -IncludeDebugInfo # Import any PowerShell modules referenced with '#Requires -Module` Import-Module -Name "$($pwd.Path)\powershell\Ansible.ModuleUtils.Legacy.psm1" # End of the setup code and start of the module code #!powershell You can add more args to ``$complex_args`` as required by the module or define the module options through a JSON file with the structure: .. code-block:: json { "ANSIBLE_MODULE_ARGS": { "_ansible_check_mode": false, "_ansible_diff": false, "path": "C:\\temp", "state": "present" } } There are multiple IDEs that can be used to debug a Powershell script, two of the most popular ones are - `Powershell ISE`_ - `Visual Studio Code`_ .. _Powershell ISE: https://docs.microsoft.com/en-us/powershell/scripting/core-powershell/ise/how-to-debug-scripts-in-windows-powershell-ise .. _Visual Studio Code: https://blogs.technet.microsoft.com/heyscriptingguy/2017/02/06/debugging-powershell-script-in-visual-studio-code-part-1/ To be able to view the arguments as passed by Ansible to the module follow these steps. - Prefix the Ansible command with :envvar:`ANSIBLE_KEEP_REMOTE_FILES=1` to specify that Ansible should keep the exec files on the server. - Log onto the Windows server using the same user account that Ansible used to execute the module. - Navigate to ``%TEMP%\..``. It should contain a folder starting with ``ansible-tmp-``. - Inside this folder, open the PowerShell script for the module. - In this script is a raw JSON script under ``$json_raw`` which contains the module arguments under ``module_args``. These args can be assigned manually to the ``$complex_args`` variable that is defined on your debug script or put in the ``args.json`` file. Windows unit testing ==================== Currently there is no mechanism to run unit tests for Powershell modules under Ansible CI. Windows integration testing =========================== Integration tests for Ansible modules are typically written as Ansible roles. These test roles are located in ``./test/integration/targets``. You must first set up your testing environment, and configure a test inventory for Ansible to connect to. In this example we will set up a test inventory to connect to two hosts and run the integration tests for win_stat: - Run the command ``source ./hacking/env-setup`` to prepare environment. - Create a copy of ``./test/integration/inventory.winrm.template`` and name it ``inventory.winrm``. - Fill in entries under ``[windows]`` and set the required variables that are needed to connect to the host. - :ref:`Install the required Python modules ` to support WinRM and a configured authentication method. - To execute the integration tests, run ``ansible-test windows-integration win_stat``; you can replace ``win_stat`` with the role you want to test. This will execute all the tests currently defined for that role. You can set the verbosity level using the ``-v`` argument just as you would with ansible-playbook. When developing tests for a new module, it is recommended to test a scenario once in check mode and twice not in check mode. This ensures that check mode does not make any changes but reports a change, as well as that the second run is idempotent and does not report changes. For example: .. code-block:: yaml - name: remove a file (check mode) win_file: path: C:\temp state: absent register: remove_file_check check_mode: yes - name: get result of remove a file (check mode) win_command: powershell.exe "if (Test-Path -Path 'C:\temp') { 'true' } else { 'false' }" register: remove_file_actual_check - name: assert remove a file (check mode) assert: that: - remove_file_check is changed - remove_file_actual_check.stdout == 'true\r\n' - name: remove a file win_file: path: C:\temp state: absent register: remove_file - name: get result of remove a file win_command: powershell.exe "if (Test-Path -Path 'C:\temp') { 'true' } else { 'false' }" register: remove_file_actual - name: assert remove a file assert: that: - remove_file is changed - remove_file_actual.stdout == 'false\r\n' - name: remove a file (idempotent) win_file: path: C:\temp state: absent register: remove_file_again - name: assert remove a file (idempotent) assert: that: - not remove_file_again is changed Windows communication and development support ============================================= Join the ``#ansible-devel`` or ``#ansible-windows`` chat channels (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) for discussions about Ansible development for Windows. For questions and discussions pertaining to using the Ansible product, use the ``#ansible`` channel. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.451556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_modules_in_groups.rst0000644000000000000000000001311500000000000027727 0ustar00rootroot00000000000000.. _developing_modules_in_groups: ************************* Creating a new collection ************************* Starting with Ansible 2.10, related modules should be developed in a collection. The Ansible core team and community compiled these module development tips and tricks to help companies developing Ansible modules for their products and users developing Ansible modules for third-party products. See :ref:`developing_collections` for a more detailed description of the collections format and additional development guidelines. .. contents:: :local: .. include:: shared_snippets/licensing.txt Before you start coding ======================= This list of prerequisites is designed to help ensure that you develop high-quality modules that work well with ansible-core and provide a seamless user experience. * Read though all the pages linked off :ref:`developing_modules_general`; paying particular focus to the :ref:`developing_modules_checklist`. * We encourage PEP 8 compliance. See :ref:`testing_pep8` for more information. * We encourage supporting :ref:`Python 2.6+ and Python 3.5+ `. * Look at Ansible Galaxy and review the naming conventions in your functional area (such as cloud, networking, databases). * With great power comes great responsibility: Ansible collection maintainers have a duty to help keep content up to date and release collections they are responsible for regularly. As with all successful community projects, collection maintainers should keep a watchful eye for reported issues and contributions. * We strongly recommend unit and/or integration tests. Unit tests are especially valuable when external resources (such as cloud or network devices) are required. For more information see :ref:`developing_testing` and the `Testing Working Group `_. Naming conventions ================== Fully Qualified Collection Names (FQCNs) for plugins and modules include three elements: * the Galaxy namespace, which generally represents the company or group * the collection name, which generally represents the product or OS * the plugin or module name * always in lower case * words separated with an underscore (``_``) character * singular, rather than plural, for example, ``command`` not ``commands`` For example, ``community.mongodb.mongodb_linux`` or ``cisco.meraki.meraki_device``. It is convenient if the organization and repository names on GitHub (or elsewhere) match your namespace and collection names on Ansible Galaxy, but it is not required. The plugin names you select, however, are always the same in your code repository and in your collection artifact on Galaxy. Speak to us =========== Circulating your ideas before coding helps you adopt good practices and avoid common mistakes. After reading the "Before you start coding" section you should have a reasonable idea of the structure of your modules. Write a list of your proposed plugin and/or module names, with a short description of what each one does. Circulate that list on IRC or a mailing list so the Ansible community can review your ideas for consistency and familiarity. Names and functionality that are consistent, predictable, and familiar make your collection easier to use. .. _developing_in_groups_support: Where to get support ==================== Ansible has a thriving and knowledgeable community of module developers that is a great resource for getting your questions answered. In the :ref:`ansible_community_guide` you can find how to: * Subscribe to the Mailing Lists - We suggest "Ansible Development List" and "Ansible Announce list" * ``#ansible-devel`` - We have found that communicating on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) works best for developers so we can have an interactive dialogue. * Working group and other chat channel meetings - Join the various weekly meetings `meeting schedule and agenda page `_ Required files ============== Your collection should include the following files to be usable: * an ``__init__.py`` file - An empty file to initialize namespace and allow Python to import the files. *Required* * at least one plugin, for example, ``/plugins/modules/$your_first_module.py``. *Required* * if needed, one or more ``/plugins/doc_fragments/$topic.py`` files - Code documentation, such as details regarding common arguments. *Optional* * if needed, one or more ``/plugins/module_utils/$topic.py`` files - Code shared between more than one module, such as common arguments. *Optional* When you have these files ready, review the :ref:`developing_modules_checklist` again. If you are creating a new collection, you are responsible for all procedures related to your repository, including setting rules for contributions, finding reviewers, and testing and maintaining the code in your collection. If you need help or advice, consider joining the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). For more information, see :ref:`developing_in_groups_support` and :ref:`communication`. New to git or GitHub ==================== We realize this may be your first use of Git or GitHub. The following guides may be of use: * `How to create a fork of ansible/ansible `_ * `How to sync (update) your fork `_ * `How to create a Pull Request (PR) `_ ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4525561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_plugins.rst0000644000000000000000000007012000000000000025652 0ustar00rootroot00000000000000.. _developing_plugins: .. _plugin_guidelines: ****************** Developing plugins ****************** .. contents:: :local: Plugins augment Ansible's core functionality with logic and features that are accessible to all modules. Ansible collections include a number of handy plugins, and you can easily write your own. All plugins must: * be written in Python * raise errors * return strings in unicode * conform to Ansible's configuration and documentation standards Once you've reviewed these general guidelines, you can skip to the particular type of plugin you want to develop. Writing plugins in Python ========================= You must write your plugin in Python so it can be loaded by the ``PluginLoader`` and returned as a Python object that any module can use. Since your plugin will execute on the controller, you must write it in a :ref:`compatible version of Python `. Raising errors ============== You should return errors encountered during plugin execution by raising ``AnsibleError()`` or a similar class with a message describing the error. When wrapping other exceptions into error messages, you should always use the ``to_native`` Ansible function to ensure proper string compatibility across Python versions: .. code-block:: python from ansible.module_utils.common.text.converters import to_native try: cause_an_exception() except Exception as e: raise AnsibleError('Something happened, this was original exception: %s' % to_native(e)) Since Ansible evaluates variables only when they are needed, filter and test plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary. Check the different `AnsibleError objects `_ and see which one applies best to your situation. Check the section on the specific plugin type you're developing for type-specific error handling details. String encoding =============== You must convert any strings returned by your plugin into Python's unicode type. Converting to unicode ensures that these strings can run through Jinja2. To convert strings: .. code-block:: python from ansible.module_utils.common.text.converters import to_text result_string = to_text(result_string) Plugin configuration & documentation standards ============================================== To define configurable options for your plugin, describe them in the ``DOCUMENTATION`` section of the python file. Callback and connection plugins have declared configuration requirements this way since Ansible version 2.4; most plugin types now do the same. This approach ensures that the documentation of your plugin's options will always be correct and up-to-date. To add a configurable option to your plugin, define it in this format: .. code-block:: yaml options: option_name: description: describe this config option default: default value for this config option env: - name: NAME_OF_ENV_VAR ini: - section: section_of_ansible.cfg_where_this_config_option_is_defined key: key_used_in_ansible.cfg vars: - name: name_of_ansible_var - name: name_of_second_var version_added: X.x required: True/False type: boolean/float/integer/list/none/path/pathlist/pathspec/string/tmppath version_added: X.x To access the configuration settings in your plugin, use ``self.get_option()``. For the plugin types (such as 'become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'netconf', 'shell', and 'vars') that support embedded documentation, the controller pre-populates the settings. If you need to populate settings explicitly, use a ``self.set_options()`` call. Configuration sources follow the precedence rules for values in Ansible. When there are multiple values from the same category, the value defined last takes precedence. For example, in the above configuration block, if both ``name_of_ansible_var`` and ``name_of_second_var`` are defined, the value of the ``option_name`` option will be the value of ``name_of_second_var``. Refer to :ref:`general_precedence_rules` for further information. Plugins that support embedded documentation (see :ref:`ansible-doc` for the list) should include well-formed doc strings. If you inherit from a plugin, you must document the options it takes, either via a documentation fragment or as a copy. See :ref:`module_documenting` for more information on correct documentation. Thorough documentation is a good idea even if you're developing a plugin for local use. Developing particular plugin types ================================== .. _developing_actions: Action plugins -------------- Action plugins let you integrate local processing and local data with module functionality. To create an action plugin, create a new class with the Base(ActionBase) class as the parent: .. code-block:: python from ansible.plugins.action import ActionBase class ActionModule(ActionBase): pass From there, execute the module using the ``_execute_module`` method to call the original module. After successful execution of the module, you can modify the module return data. .. code-block:: python module_return = self._execute_module(module_name='', module_args=module_args, task_vars=task_vars, tmp=tmp) For example, if you wanted to check the time difference between your Ansible controller and your target machine(s), you could write an action plugin to check the local time and compare it to the return data from Ansible's ``setup`` module: .. code-block:: python #!/usr/bin/python # Make coding more python3-ish, this is required for contributions to Ansible from __future__ import (absolute_import, division, print_function) __metaclass__ = type from ansible.plugins.action import ActionBase from datetime import datetime class ActionModule(ActionBase): def run(self, tmp=None, task_vars=None): super(ActionModule, self).run(tmp, task_vars) module_args = self._task.args.copy() module_return = self._execute_module(module_name='setup', module_args=module_args, task_vars=task_vars, tmp=tmp) ret = dict() remote_date = None if not module_return.get('failed'): for key, value in module_return['ansible_facts'].items(): if key == 'ansible_date_time': remote_date = value['iso8601'] if remote_date: remote_date_obj = datetime.strptime(remote_date, '%Y-%m-%dT%H:%M:%SZ') time_delta = datetime.utcnow() - remote_date_obj ret['delta_seconds'] = time_delta.seconds ret['delta_days'] = time_delta.days ret['delta_microseconds'] = time_delta.microseconds return dict(ansible_facts=dict(ret)) This code checks the time on the controller, captures the date and time for the remote machine using the ``setup`` module, and calculates the difference between the captured time and the local time, returning the time delta in days, seconds and microseconds. For practical examples of action plugins, see the source code for the `action plugins included with Ansible Core `_ .. _developing_cache_plugins: Cache plugins ------------- Cache plugins store gathered facts and data retrieved by inventory plugins. Import cache plugins using the cache_loader so you can use ``self.set_options()`` and ``self.get_option()``. If you import a cache plugin directly in the code base, you can only access options via ``ansible.constants``, and you break the cache plugin's ability to be used by an inventory plugin. .. code-block:: python from ansible.plugins.loader import cache_loader [...] plugin = cache_loader.get('custom_cache', **cache_kwargs) There are two base classes for cache plugins, ``BaseCacheModule`` for database-backed caches, and ``BaseCacheFileModule`` for file-backed caches. To create a cache plugin, start by creating a new ``CacheModule`` class with the appropriate base class. If you're creating a plugin using an ``__init__`` method you should initialize the base class with any provided args and kwargs to be compatible with inventory plugin cache options. The base class calls ``self.set_options(direct=kwargs)``. After the base class ``__init__`` method is called ``self.get_option()`` should be used to access cache options. New cache plugins should take the options ``_uri``, ``_prefix``, and ``_timeout`` to be consistent with existing cache plugins. .. code-block:: python from ansible.plugins.cache import BaseCacheModule class CacheModule(BaseCacheModule): def __init__(self, *args, **kwargs): super(CacheModule, self).__init__(*args, **kwargs) self._connection = self.get_option('_uri') self._prefix = self.get_option('_prefix') self._timeout = self.get_option('_timeout') If you use the ``BaseCacheModule``, you must implement the methods ``get``, ``contains``, ``keys``, ``set``, ``delete``, ``flush``, and ``copy``. The ``contains`` method should return a boolean that indicates if the key exists and has not expired. Unlike file-based caches, the ``get`` method does not raise a KeyError if the cache has expired. If you use the ``BaseFileCacheModule``, you must implement ``_load`` and ``_dump`` methods that will be called from the base class methods ``get`` and ``set``. If your cache plugin stores JSON, use ``AnsibleJSONEncoder`` in the ``_dump`` or ``set`` method and ``AnsibleJSONDecoder`` in the ``_load`` or ``get`` method. For example cache plugins, see the source code for the `cache plugins included with Ansible Core `_. .. _developing_callbacks: Callback plugins ---------------- Callback plugins add new behaviors to Ansible when responding to events. By default, callback plugins control most of the output you see when running the command line programs. To create a callback plugin, create a new class with the Base(Callbacks) class as the parent: .. code-block:: python from ansible.plugins.callback import CallbackBase class CallbackModule(CallbackBase): pass From there, override the specific methods from the CallbackBase that you want to provide a callback for. For plugins intended for use with Ansible version 2.0 and later, you should only override methods that start with ``v2``. For a complete list of methods that you can override, please see ``__init__.py`` in the `lib/ansible/plugins/callback `_ directory. The following is a modified example of how Ansible's timer plugin is implemented, but with an extra option so you can see how configuration works in Ansible version 2.4 and later: .. code-block:: python # Make coding more python3-ish, this is required for contributions to Ansible from __future__ import (absolute_import, division, print_function) __metaclass__ = type # not only visible to ansible-doc, it also 'declares' the options the plugin requires and how to configure them. DOCUMENTATION = ''' callback: timer callback_type: aggregate requirements: - enable in configuration short_description: Adds time to play stats version_added: "2.0" # for collections, use the collection version, not the Ansible version description: - This callback just adds total play duration to the play stats. options: format_string: description: format of the string shown to user at play end ini: - section: callback_timer key: format_string env: - name: ANSIBLE_CALLBACK_TIMER_FORMAT default: "Playbook run took %s days, %s hours, %s minutes, %s seconds" ''' from datetime import datetime from ansible.plugins.callback import CallbackBase class CallbackModule(CallbackBase): """ This callback module tells you how long your plays ran for. """ CALLBACK_VERSION = 2.0 CALLBACK_TYPE = 'aggregate' CALLBACK_NAME = 'namespace.collection_name.timer' # only needed if you ship it and don't want to enable by default CALLBACK_NEEDS_ENABLED = True def __init__(self): # make sure the expected objects are present, calling the base's __init__ super(CallbackModule, self).__init__() # start the timer when the plugin is loaded, the first play should start a few milliseconds after. self.start_time = datetime.now() def _days_hours_minutes_seconds(self, runtime): ''' internal helper method for this callback ''' minutes = (runtime.seconds // 60) % 60 r_seconds = runtime.seconds - (minutes * 60) return runtime.days, runtime.seconds // 3600, minutes, r_seconds # this is only event we care about for display, when the play shows its summary stats; the rest are ignored by the base class def v2_playbook_on_stats(self, stats): end_time = datetime.now() runtime = end_time - self.start_time # Shows the usage of a config option declared in the DOCUMENTATION variable. Ansible will have set it when it loads the plugin. # Also note the use of the display object to print to screen. This is available to all callbacks, and you should use this over printing yourself self._display.display(self._plugin_options['format_string'] % (self._days_hours_minutes_seconds(runtime))) Note that the ``CALLBACK_VERSION`` and ``CALLBACK_NAME`` definitions are required for properly functioning plugins for Ansible version 2.0 and later. ``CALLBACK_TYPE`` is mostly needed to distinguish 'stdout' plugins from the rest, since you can only load one plugin that writes to stdout. For example callback plugins, see the source code for the `callback plugins included with Ansible Core `_ New in ansible-core 2.11, callback plugins are notified (via ``v2_playbook_on_task_start``) of :ref:`meta` tasks. By default, only explicit ``meta`` tasks that users list in their plays are sent to callbacks. There are also some tasks which are generated internally and implicitly at various points in execution. Callback plugins can opt-in to receiving these implicit tasks as well, by setting ``self.wants_implicit_tasks = True``. Any ``Task`` object received by a callback hook will have an ``.implicit`` attribute, which can be consulted to determine whether the ``Task`` originated from within Ansible, or explicitly by the user. .. _developing_connection_plugins: Connection plugins ------------------ Connection plugins allow Ansible to connect to the target hosts so it can execute tasks on them. Ansible ships with many connection plugins, but only one can be used per host at a time. The most commonly used connection plugins are the ``paramiko`` SSH, native ssh (just called ``ssh``), and ``local`` connection types. All of these can be used in playbooks and with ``/usr/bin/ansible`` to connect to remote machines. Ansible version 2.1 introduced the ``smart`` connection plugin. The ``smart`` connection type allows Ansible to automatically select either the ``paramiko`` or ``openssh`` connection plugin based on system capabilities, or the ``ssh`` connection plugin if OpenSSH supports ControlPersist. To create a new connection plugin (for example, to support SNMP, Message bus, or other transports), copy the format of one of the existing connection plugins and drop it into ``connection`` directory on your :ref:`local plugin path `. Connection plugins can support common options (such as the ``--timeout`` flag) by defining an entry in the documentation for the attribute name (in this case ``timeout``). If the common option has a non-null default, the plugin should define the same default since a different default would be ignored. For example connection plugins, see the source code for the `connection plugins included with Ansible Core `_. .. _developing_filter_plugins: Filter plugins -------------- Filter plugins manipulate data. They are a feature of Jinja2 and are also available in Jinja2 templates used by the ``template`` module. As with all plugins, they can be easily extended, but instead of having a file for each one you can have several per file. Most of the filter plugins shipped with Ansible reside in a ``core.py``. Filter plugins do not use the standard configuration and documentation system described above. Since Ansible evaluates variables only when they are needed, filter plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary. .. code-block:: python try: cause_an_exception(with_undefined_variable) except jinja2.exceptions.UndefinedError as e: raise AnsibleUndefinedVariable("Something happened, this was the original exception: %s" % to_native(e)) except Exception as e: raise AnsibleFilterError("Something happened, this was the original exception: %s" % to_native(e)) For example filter plugins, see the source code for the `filter plugins included with Ansible Core `_. .. _developing_inventory_plugins: Inventory plugins ----------------- Inventory plugins parse inventory sources and form an in-memory representation of the inventory. Inventory plugins were added in Ansible version 2.4. You can see the details for inventory plugins in the :ref:`developing_inventory` page. .. _developing_lookup_plugins: Lookup plugins -------------- Lookup plugins pull in data from external data stores. Lookup plugins can be used within playbooks both for looping --- playbook language constructs like ``with_fileglob`` and ``with_items`` are implemented via lookup plugins --- and to return values into a variable or parameter. Lookup plugins are very flexible, allowing you to retrieve and return any type of data. When writing lookup plugins, always return data of a consistent type that can be easily consumed in a playbook. Avoid parameters that change the returned data type. If there is a need to return a single value sometimes and a complex dictionary other times, write two different lookup plugins. Ansible includes many :ref:`filters ` which can be used to manipulate the data returned by a lookup plugin. Sometimes it makes sense to do the filtering inside the lookup plugin, other times it is better to return results that can be filtered in the playbook. Keep in mind how the data will be referenced when determining the appropriate level of filtering to be done inside the lookup plugin. Here's a simple lookup plugin implementation --- this lookup returns the contents of a text file as a variable: .. code-block:: python # python 3 headers, required if submitting to Ansible from __future__ import (absolute_import, division, print_function) __metaclass__ = type DOCUMENTATION = """ lookup: file author: Daniel Hokka Zakrisson version_added: "0.9" # for collections, use the collection version, not the Ansible version short_description: read file contents description: - This lookup returns the contents from a file on the Ansible controller's file system. options: _terms: description: path(s) of files to read required: True option1: description: - Sample option that could modify plugin behaviour. - This one can be set directly ``option1='x'`` or in ansible.cfg, but can also use vars or environment. type: string ini: - section: file_lookup key: option1 notes: - if read in variable context, the file can be interpreted as YAML if the content is valid to the parser. - this lookup does not understand globing --- use the fileglob lookup instead. """ from ansible.errors import AnsibleError, AnsibleParserError from ansible.plugins.lookup import LookupBase from ansible.utils.display import Display display = Display() class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): # First of all populate options, # this will already take into account env vars and ini config self.set_options(var_options=variables, direct=kwargs) # lookups in general are expected to both take a list as input and output a list # this is done so they work with the looping construct 'with_'. ret = [] for term in terms: display.debug("File lookup term: %s" % term) # Find the file in the expected search path, using a class method # that implements the 'expected' search path for Ansible plugins. lookupfile = self.find_file_in_search_path(variables, 'files', term) # Don't use print or your own logging, the display class # takes care of it in a unified way. display.vvvv(u"File lookup using %s as file" % lookupfile) try: if lookupfile: contents, show_data = self._loader._get_file_contents(lookupfile) ret.append(contents.rstrip()) else: # Always use ansible error classes to throw 'final' exceptions, # so the Ansible engine will know how to deal with them. # The Parser error indicates invalid options passed raise AnsibleParserError() except AnsibleParserError: raise AnsibleError("could not locate file in lookup: %s" % term) # consume an option: if this did something useful, you can retrieve the option value here if self.get_option('option1') == 'do something': pass return ret The following is an example of how this lookup is called: .. code-block:: YAML --- - hosts: all vars: contents: "{{ lookup('namespace.collection_name.file', '/etc/foo.txt') }}" contents_with_option: "{{ lookup('namespace.collection_name.file', '/etc/foo.txt', option1='donothing') }}" tasks: - debug: msg: the value of foo.txt is {{ contents }} as seen today {{ lookup('pipe', 'date +"%Y-%m-%d"') }} For example lookup plugins, see the source code for the `lookup plugins included with Ansible Core `_. For more usage examples of lookup plugins, see :ref:`Using Lookups`. .. _developing_test_plugins: Test plugins ------------ Test plugins verify data. They are a feature of Jinja2 and are also available in Jinja2 templates used by the ``template`` module. As with all plugins, they can be easily extended, but instead of having a file for each one you can have several per file. Most of the test plugins shipped with Ansible reside in a ``core.py``. These are specially useful in conjunction with some filter plugins like ``map`` and ``select``; they are also available for conditional directives like ``when:``. Test plugins do not use the standard configuration and documentation system described above. Since Ansible evaluates variables only when they are needed, test plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary. .. code-block:: python try: cause_an_exception(with_undefined_variable) except jinja2.exceptions.UndefinedError as e: raise AnsibleUndefinedVariable("Something happened, this was the original exception: %s" % to_native(e)) except Exception as e: raise AnsibleFilterError("Something happened, this was the original exception: %s" % to_native(e)) For example test plugins, see the source code for the `test plugins included with Ansible Core `_. .. _developing_vars_plugins: Vars plugins ------------ Vars plugins inject additional variable data into Ansible runs that did not come from an inventory source, playbook, or command line. Playbook constructs like 'host_vars' and 'group_vars' work using vars plugins. Vars plugins were partially implemented in Ansible 2.0 and rewritten to be fully implemented starting with Ansible 2.4. Vars plugins are supported by collections starting with Ansible 2.10. Older plugins used a ``run`` method as their main body/work: .. code-block:: python def run(self, name, vault_password=None): pass # your code goes here Ansible 2.0 did not pass passwords to older plugins, so vaults were unavailable. Most of the work now happens in the ``get_vars`` method which is called from the VariableManager when needed. .. code-block:: python def get_vars(self, loader, path, entities): pass # your code goes here The parameters are: * loader: Ansible's DataLoader. The DataLoader can read files, auto-load JSON/YAML and decrypt vaulted data, and cache read files. * path: this is 'directory data' for every inventory source and the current play's playbook directory, so they can search for data in reference to them. ``get_vars`` will be called at least once per available path. * entities: these are host or group names that are pertinent to the variables needed. The plugin will get called once for hosts and again for groups. This ``get_vars`` method just needs to return a dictionary structure with the variables. Since Ansible version 2.4, vars plugins only execute as needed when preparing to execute a task. This avoids the costly 'always execute' behavior that occurred during inventory construction in older versions of Ansible. Since Ansible version 2.10, vars plugin execution can be toggled by the user to run when preparing to execute a task or after importing an inventory source. You can create vars plugins that are not enabled by default using the class variable ``REQUIRES_ENABLED``. If your vars plugin resides in a collection, it cannot be enabled by default. You must use ``REQUIRES_ENABLED`` in all collections-based vars plugins. To require users to enable your plugin, set the class variable ``REQUIRES_ENABLED``: .. code-block:: python class VarsModule(BaseVarsPlugin): REQUIRES_ENABLED = True Include the ``vars_plugin_staging`` documentation fragment to allow users to determine when vars plugins run. .. code-block:: python DOCUMENTATION = ''' name: custom_hostvars version_added: "2.10" # for collections, use the collection version, not the Ansible version short_description: Load custom host vars description: Load custom host vars options: stage: ini: - key: stage section: vars_custom_hostvars env: - name: ANSIBLE_VARS_PLUGIN_STAGE extends_documentation_fragment: - vars_plugin_staging ''' For example vars plugins, see the source code for the `vars plugins included with Ansible Core `_. .. seealso:: :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_api` Learn about the Python API for task execution :ref:`developing_inventory` Learn about how to develop dynamic inventory sources :ref:`developing_modules_general` Learn about how to write Ansible modules `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4525561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_program_flow_modules.rst0000644000000000000000000011574100000000000030430 0ustar00rootroot00000000000000.. _flow_modules: .. _developing_program_flow_modules: *************************** Ansible module architecture *************************** If you are working on the ``ansible-core`` code, writing an Ansible module, or developing an action plugin, you may need to understand how Ansible's program flow executes. If you are just using Ansible Modules in playbooks, you can skip this section. .. contents:: :local: .. _flow_types_of_modules: Types of modules ================ Ansible supports several different types of modules in its code base. Some of these are for backwards compatibility and others are to enable flexibility. .. _flow_action_plugins: Action plugins -------------- Action plugins look like modules to anyone writing a playbook. Usage documentation for most action plugins lives inside a module of the same name. Some action plugins do all the work, with the module providing only documentation. Some action plugins execute modules. The ``normal`` action plugin executes modules that don't have special action plugins. Action plugins always execute on the controller. Some action plugins do all their work on the controller. For example, the :ref:`debug ` action plugin (which prints text for the user to see) and the :ref:`assert ` action plugin (which tests whether values in a playbook satisfy certain criteria) execute entirely on the controller. Most action plugins set up some values on the controller, then invoke an actual module on the managed node that does something with these values. For example, the :ref:`template ` action plugin takes values from the user to construct a file in a temporary location on the controller using variables from the playbook environment. It then transfers the temporary file to a temporary file on the remote system. After that, it invokes the :ref:`copy module ` which operates on the remote system to move the file into its final location, sets file permissions, and so on. .. _flow_new_style_modules: New-style modules ----------------- All of the modules that ship with Ansible fall into this category. While you can write modules in any language, all official modules (shipped with Ansible) use either Python or PowerShell. New-style modules have the arguments to the module embedded inside of them in some manner. Old-style modules must copy a separate file over to the managed node, which is less efficient as it requires two over-the-wire connections instead of only one. .. _flow_python_modules: Python ^^^^^^ New-style Python modules use the :ref:`Ansiballz` framework for constructing modules. These modules use imports from :code:`ansible.module_utils` to pull in boilerplate module code, such as argument parsing, formatting of return values as :term:`JSON`, and various file operations. .. note:: In Ansible, up to version 2.0.x, the official Python modules used the :ref:`module_replacer` framework. For module authors, :ref:`Ansiballz` is largely a superset of :ref:`module_replacer` functionality, so you usually do not need to understand the differences between them. .. _flow_powershell_modules: PowerShell ^^^^^^^^^^ New-style PowerShell modules use the :ref:`module_replacer` framework for constructing modules. These modules get a library of PowerShell code embedded in them before being sent to the managed node. .. _flow_jsonargs_modules: JSONARGS modules ---------------- These modules are scripts that include the string ``<>`` in their body. This string is replaced with the JSON-formatted argument string. These modules typically set a variable to that value like this: .. code-block:: python json_arguments = """<>""" Which is expanded as: .. code-block:: python json_arguments = """{"param1": "test's quotes", "param2": "\"To be or not to be\" - Hamlet"}""" .. note:: Ansible outputs a :term:`JSON` string with bare quotes. Double quotes are used to quote string values, double quotes inside of string values are backslash escaped, and single quotes may appear unescaped inside of a string value. To use JSONARGS, your scripting language must have a way to handle this type of string. The example uses Python's triple quoted strings to do this. Other scripting languages may have a similar quote character that won't be confused by any quotes in the JSON or it may allow you to define your own start-of-quote and end-of-quote characters. If the language doesn't give you any of these then you'll need to write a :ref:`non-native JSON module ` or :ref:`Old-style module ` instead. These modules typically parse the contents of ``json_arguments`` using a JSON library and then use them as native variables throughout the code. .. _flow_want_json_modules: Non-native want JSON modules ---------------------------- If a module has the string ``WANT_JSON`` in it anywhere, Ansible treats it as a non-native module that accepts a filename as its only command line parameter. The filename is for a temporary file containing a :term:`JSON` string containing the module's parameters. The module needs to open the file, read and parse the parameters, operate on the data, and print its return data as a JSON encoded dictionary to stdout before exiting. These types of modules are self-contained entities. As of Ansible 2.1, Ansible only modifies them to change a shebang line if present. .. seealso:: Examples of Non-native modules written in ruby are in the `Ansible for Rubyists `_ repository. .. _flow_binary_modules: Binary modules -------------- From Ansible 2.2 onwards, modules may also be small binary programs. Ansible doesn't perform any magic to make these portable to different systems so they may be specific to the system on which they were compiled or require other binary runtime dependencies. Despite these drawbacks, you may have to compile a custom module against a specific binary library if that's the only way to get access to certain resources. Binary modules take their arguments and return data to Ansible in the same way as :ref:`want JSON modules `. .. seealso:: One example of a `binary module `_ written in go. .. _flow_old_style_modules: Old-style modules ----------------- Old-style modules are similar to :ref:`want JSON modules `, except that the file that they take contains ``key=value`` pairs for their parameters instead of :term:`JSON`. Ansible decides that a module is old-style when it doesn't have any of the markers that would show that it is one of the other types. .. _flow_how_modules_are_executed: How modules are executed ======================== When a user uses :program:`ansible` or :program:`ansible-playbook`, they specify a task to execute. The task is usually the name of a module along with several parameters to be passed to the module. Ansible takes these values and processes them in various ways before they are finally executed on the remote machine. .. _flow_executor_task_executor: Executor/task_executor ---------------------- The TaskExecutor receives the module name and parameters that were parsed from the :term:`playbook ` (or from the command line in the case of :command:`/usr/bin/ansible`). It uses the name to decide whether it's looking at a module or an :ref:`Action Plugin `. If it's a module, it loads the :ref:`Normal Action Plugin ` and passes the name, variables, and other information about the task and play to that Action Plugin for further processing. .. _flow_normal_action_plugin: The ``normal`` action plugin ---------------------------- The ``normal`` action plugin executes the module on the remote host. It is the primary coordinator of much of the work to actually execute the module on the managed machine. * It loads the appropriate connection plugin for the task, which then transfers or executes as needed to create a connection to that host. * It adds any internal Ansible properties to the module's parameters (for instance, the ones that pass along ``no_log`` to the module). * It works with other plugins (connection, shell, become, other action plugins) to create any temporary files on the remote machine and cleans up afterwards. * It pushes the module and module parameters to the remote host, although the :ref:`module_common ` code described in the next section decides which format those will take. * It handles any special cases regarding modules (for instance, async execution, or complications around Windows modules that must have the same names as Python modules, so that internal calling of modules from other Action Plugins work.) Much of this functionality comes from the `BaseAction` class, which lives in :file:`plugins/action/__init__.py`. It uses the ``Connection`` and ``Shell`` objects to do its work. .. note:: When :term:`tasks ` are run with the ``async:`` parameter, Ansible uses the ``async`` Action Plugin instead of the ``normal`` Action Plugin to invoke it. That program flow is currently not documented. Read the source for information on how that works. .. _flow_executor_module_common: Executor/module_common.py ------------------------- Code in :file:`executor/module_common.py` assembles the module to be shipped to the managed node. The module is first read in, then examined to determine its type: * :ref:`PowerShell ` and :ref:`JSON-args modules ` are passed through :ref:`Module Replacer `. * New-style :ref:`Python modules ` are assembled by :ref:`Ansiballz`. * :ref:`Non-native-want-JSON `, :ref:`Binary modules `, and :ref:`Old-Style modules ` aren't touched by either of these and pass through unchanged. After the assembling step, one final modification is made to all modules that have a shebang line. Ansible checks whether the interpreter in the shebang line has a specific path configured via an ``ansible_$X_interpreter`` inventory variable. If it does, Ansible substitutes that path for the interpreter path given in the module. After this, Ansible returns the complete module data and the module type to the :ref:`Normal Action ` which continues execution of the module. Assembler frameworks -------------------- Ansible supports two assembler frameworks: Ansiballz and the older Module Replacer. .. _module_replacer: Module Replacer framework ^^^^^^^^^^^^^^^^^^^^^^^^^ The Module Replacer framework is the original framework implementing new-style modules, and is still used for PowerShell modules. It is essentially a preprocessor (like the C Preprocessor for those familiar with that programming language). It does straight substitutions of specific substring patterns in the module file. There are two types of substitutions: * Replacements that only happen in the module file. These are public replacement strings that modules can utilize to get helpful boilerplate or access to arguments. - :code:`from ansible.module_utils.MOD_LIB_NAME import *` is replaced with the contents of the :file:`ansible/module_utils/MOD_LIB_NAME.py` These should only be used with :ref:`new-style Python modules `. - :code:`#<>` is equivalent to :code:`from ansible.module_utils.basic import *` and should also only apply to new-style Python modules. - :code:`# POWERSHELL_COMMON` substitutes the contents of :file:`ansible/module_utils/powershell.ps1`. It should only be used with :ref:`new-style Powershell modules `. * Replacements that are used by ``ansible.module_utils`` code. These are internal replacement patterns. They may be used internally, in the above public replacements, but shouldn't be used directly by modules. - :code:`"<>"` is substituted with the Ansible version. In :ref:`new-style Python modules ` under the :ref:`Ansiballz` framework the proper way is to instead instantiate an `AnsibleModule` and then access the version from :attr:``AnsibleModule.ansible_version``. - :code:`"<>"` is substituted with a string which is the Python ``repr`` of the :term:`JSON` encoded module parameters. Using ``repr`` on the JSON string makes it safe to embed in a Python file. In new-style Python modules under the Ansiballz framework this is better accessed by instantiating an `AnsibleModule` and then using :attr:`AnsibleModule.params`. - :code:`<>` substitutes a string which is a comma separated list of file systems which have a file system dependent security context in SELinux. In new-style Python modules, if you really need this you should instantiate an `AnsibleModule` and then use :attr:`AnsibleModule._selinux_special_fs`. The variable has also changed from a comma separated string of file system names to an actual python list of filesystem names. - :code:`<>` substitutes the module parameters as a JSON string. Care must be taken to properly quote the string as JSON data may contain quotes. This pattern is not substituted in new-style Python modules as they can get the module parameters another way. - The string :code:`syslog.LOG_USER` is replaced wherever it occurs with the ``syslog_facility`` which was named in :file:`ansible.cfg` or any ``ansible_syslog_facility`` inventory variable that applies to this host. In new-style Python modules this has changed slightly. If you really need to access it, you should instantiate an `AnsibleModule` and then use :attr:`AnsibleModule._syslog_facility` to access it. It is no longer the actual syslog facility and is now the name of the syslog facility. See the :ref:`documentation on internal arguments ` for details. .. _Ansiballz: Ansiballz framework ^^^^^^^^^^^^^^^^^^^ The Ansiballz framework was adopted in Ansible 2.1 and is used for all new-style Python modules. Unlike the Module Replacer, Ansiballz uses real Python imports of things in :file:`ansible/module_utils` instead of merely preprocessing the module. It does this by constructing a zipfile -- which includes the module file, files in :file:`ansible/module_utils` that are imported by the module, and some boilerplate to pass in the module's parameters. The zipfile is then Base64 encoded and wrapped in a small Python script which decodes the Base64 encoding and places the zipfile into a temp directory on the managed node. It then extracts just the Ansible module script from the zip file and places that in the temporary directory as well. Then it sets the PYTHONPATH to find Python modules inside of the zip file and imports the Ansible module as the special name, ``__main__``. Importing it as ``__main__`` causes Python to think that it is executing a script rather than simply importing a module. This lets Ansible run both the wrapper script and the module code in a single copy of Python on the remote machine. .. note:: * Ansible wraps the zipfile in the Python script for two reasons: * for compatibility with Python 2.6 which has a less functional version of Python's ``-m`` command line switch. * so that pipelining will function properly. Pipelining needs to pipe the Python module into the Python interpreter on the remote node. Python understands scripts on stdin but does not understand zip files. * Prior to Ansible 2.7, the module was executed via a second Python interpreter instead of being executed inside of the same process. This change was made once Python-2.4 support was dropped to speed up module execution. In Ansiballz, any imports of Python modules from the :py:mod:`ansible.module_utils` package trigger inclusion of that Python file into the zipfile. Instances of :code:`#<>` in the module are turned into :code:`from ansible.module_utils.basic import *` and :file:`ansible/module-utils/basic.py` is then included in the zipfile. Files that are included from :file:`module_utils` are themselves scanned for imports of other Python modules from :file:`module_utils` to be included in the zipfile as well. .. warning:: At present, the Ansiballz Framework cannot determine whether an import should be included if it is a relative import. Always use an absolute import that has :py:mod:`ansible.module_utils` in it to allow Ansiballz to determine that the file should be included. .. _flow_passing_module_args: Passing args ------------ Arguments are passed differently by the two frameworks: * In :ref:`module_replacer`, module arguments are turned into a JSON-ified string and substituted into the combined module file. * In :ref:`Ansiballz`, the JSON-ified string is part of the script which wraps the zipfile. Just before the wrapper script imports the Ansible module as ``__main__``, it monkey-patches the private, ``_ANSIBLE_ARGS`` variable in ``basic.py`` with the variable values. When a :class:`ansible.module_utils.basic.AnsibleModule` is instantiated, it parses this string and places the args into :attr:`AnsibleModule.params` where it can be accessed by the module's other code. .. warning:: If you are writing modules, remember that the way we pass arguments is an internal implementation detail: it has changed in the past and will change again as soon as changes to the common module_utils code allow Ansible modules to forgo using :class:`ansible.module_utils.basic.AnsibleModule`. Do not rely on the internal global ``_ANSIBLE_ARGS`` variable. Very dynamic custom modules which need to parse arguments before they instantiate an ``AnsibleModule`` may use ``_load_params`` to retrieve those parameters. Although ``_load_params`` may change in breaking ways if necessary to support changes in the code, it is likely to be more stable than either the way we pass parameters or the internal global variable. .. note:: Prior to Ansible 2.7, the Ansible module was invoked in a second Python interpreter and the arguments were then passed to the script over the script's stdin. .. _flow_internal_arguments: Internal arguments ------------------ Both :ref:`module_replacer` and :ref:`Ansiballz` send additional arguments to the module beyond those which the user specified in the playbook. These additional arguments are internal parameters that help implement global Ansible features. Modules often do not need to know about these explicitly as the features are implemented in :py:mod:`ansible.module_utils.basic` but certain features need support from the module so it's good to know about them. The internal arguments listed here are global. If you need to add a local internal argument to a custom module, create an action plugin for that specific module - see ``_original_basename`` in the `copy action plugin `_ for an example. _ansible_no_log ^^^^^^^^^^^^^^^ Boolean. Set to True whenever a parameter in a task or play specifies ``no_log``. Any module that calls :py:meth:`AnsibleModule.log` handles this automatically. If a module implements its own logging then it needs to check this value. To access in a module, instantiate an ``AnsibleModule`` and then check the value of :attr:`AnsibleModule.no_log`. .. note:: ``no_log`` specified in a module's argument_spec is handled by a different mechanism. _ansible_debug ^^^^^^^^^^^^^^^ Boolean. Turns more verbose logging on or off and turns on logging of external commands that the module executes. If a module uses :py:meth:`AnsibleModule.debug` rather than :py:meth:`AnsibleModule.log` then the messages are only logged if ``_ansible_debug`` is set to ``True``. To set, add ``debug: True`` to :file:`ansible.cfg` or set the environment variable :envvar:`ANSIBLE_DEBUG`. To access in a module, instantiate an ``AnsibleModule`` and access :attr:`AnsibleModule._debug`. _ansible_diff ^^^^^^^^^^^^^^^ Boolean. If a module supports it, tells the module to show a unified diff of changes to be made to templated files. To set, pass the ``--diff`` command line option. To access in a module, instantiate an `AnsibleModule` and access :attr:`AnsibleModule._diff`. _ansible_verbosity ^^^^^^^^^^^^^^^^^^ Unused. This value could be used for finer grained control over logging. _ansible_selinux_special_fs ^^^^^^^^^^^^^^^^^^^^^^^^^^^ List. Names of filesystems which should have a special SELinux context. They are used by the `AnsibleModule` methods which operate on files (changing attributes, moving, and copying). To set, add a comma separated string of filesystem names in :file:`ansible.cfg`: .. code-block:: ini # ansible.cfg [selinux] special_context_filesystems=nfs,vboxsf,fuse,ramfs,vfat Most modules can use the built-in ``AnsibleModule`` methods to manipulate files. To access in a module that needs to know about these special context filesystems, instantiate an ``AnsibleModule`` and examine the list in :attr:`AnsibleModule._selinux_special_fs`. This replaces :attr:`ansible.module_utils.basic.SELINUX_SPECIAL_FS` from :ref:`module_replacer`. In module replacer it was a comma separated string of filesystem names. Under Ansiballz it's an actual list. .. versionadded:: 2.1 _ansible_syslog_facility ^^^^^^^^^^^^^^^^^^^^^^^^ This parameter controls which syslog facility Ansible module logs to. To set, change the ``syslog_facility`` value in :file:`ansible.cfg`. Most modules should just use :meth:`AnsibleModule.log` which will then make use of this. If a module has to use this on its own, it should instantiate an `AnsibleModule` and then retrieve the name of the syslog facility from :attr:`AnsibleModule._syslog_facility`. The Ansiballz code is less hacky than the old :ref:`module_replacer` code: .. code-block:: python # Old module_replacer way import syslog syslog.openlog(NAME, 0, syslog.LOG_USER) # New Ansiballz way import syslog facility_name = module._syslog_facility facility = getattr(syslog, facility_name, syslog.LOG_USER) syslog.openlog(NAME, 0, facility) .. versionadded:: 2.1 _ansible_version ^^^^^^^^^^^^^^^^ This parameter passes the version of Ansible that runs the module. To access it, a module should instantiate an `AnsibleModule` and then retrieve it from :attr:`AnsibleModule.ansible_version`. This replaces :attr:`ansible.module_utils.basic.ANSIBLE_VERSION` from :ref:`module_replacer`. .. versionadded:: 2.1 .. _flow_module_return_values: Module return values & Unsafe strings ------------------------------------- At the end of a module's execution, it formats the data that it wants to return as a JSON string and prints the string to its stdout. The normal action plugin receives the JSON string, parses it into a Python dictionary, and returns it to the executor. If Ansible templated every string return value, it would be vulnerable to an attack from users with access to managed nodes. If an unscrupulous user disguised malicious code as Ansible return value strings, and if those strings were then templated on the controller, Ansible could execute arbitrary code. To prevent this scenario, Ansible marks all strings inside returned data as ``Unsafe``, emitting any Jinja2 templates in the strings verbatim, not expanded by Jinja2. Strings returned by invoking a module through ``ActionPlugin._execute_module()`` are automatically marked as ``Unsafe`` by the normal action plugin. If another action plugin retrieves information from a module through some other means, it must mark its return data as ``Unsafe`` on its own. In case a poorly-coded action plugin fails to mark its results as "Unsafe," Ansible audits the results again when they are returned to the executor, marking all strings as ``Unsafe``. The normal action plugin protects itself and any other code that it calls with the result data as a parameter. The check inside the executor protects the output of all other action plugins, ensuring that subsequent tasks run by Ansible will not template anything from those results either. .. _flow_special_considerations: Special considerations ---------------------- .. _flow_pipelining: Pipelining ^^^^^^^^^^ Ansible can transfer a module to a remote machine in one of two ways: * it can write out the module to a temporary file on the remote host and then use a second connection to the remote host to execute it with the interpreter that the module needs * or it can use what's known as pipelining to execute the module by piping it into the remote interpreter's stdin. Pipelining only works with modules written in Python at this time because Ansible only knows that Python supports this mode of operation. Supporting pipelining means that whatever format the module payload takes before being sent over the wire must be executable by Python via stdin. .. _flow_args_over_stdin: Why pass args over stdin? ^^^^^^^^^^^^^^^^^^^^^^^^^ Passing arguments via stdin was chosen for the following reasons: * When combined with :ref:`ANSIBLE_PIPELINING`, this keeps the module's arguments from temporarily being saved onto disk on the remote machine. This makes it harder (but not impossible) for a malicious user on the remote machine to steal any sensitive information that may be present in the arguments. * Command line arguments would be insecure as most systems allow unprivileged users to read the full commandline of a process. * Environment variables are usually more secure than the commandline but some systems limit the total size of the environment. This could lead to truncation of the parameters if we hit that limit. .. _flow_ansiblemodule: AnsibleModule ------------- .. _argument_spec: Argument spec ^^^^^^^^^^^^^ The ``argument_spec`` provided to ``AnsibleModule`` defines the supported arguments for a module, as well as their type, defaults and more. Example ``argument_spec``: .. code-block:: python module = AnsibleModule(argument_spec=dict( top_level=dict( type='dict', options=dict( second_level=dict( default=True, type='bool', ) ) ) )) This section will discuss the behavioral attributes for arguments: :type: ``type`` allows you to define the type of the value accepted for the argument. The default value for ``type`` is ``str``. Possible values are: * str * list * dict * bool * int * float * path * raw * jsonarg * json * bytes * bits The ``raw`` type, performs no type validation or type casting, and maintains the type of the passed value. :elements: ``elements`` works in combination with ``type`` when ``type='list'``. ``elements`` can then be defined as ``elements='int'`` or any other type, indicating that each element of the specified list should be of that type. :default: The ``default`` option allows sets a default value for the argument for the scenario when the argument is not provided to the module. When not specified, the default value is ``None``. :fallback: ``fallback`` accepts a ``tuple`` where the first argument is a callable (function) that will be used to perform the lookup, based on the second argument. The second argument is a list of values to be accepted by the callable. The most common callable used is ``env_fallback`` which will allow an argument to optionally use an environment variable when the argument is not supplied. Example: .. code-block:: python username=dict(fallback=(env_fallback, ['ANSIBLE_NET_USERNAME'])) :choices: ``choices`` accepts a list of choices that the argument will accept. The types of ``choices`` should match the ``type``. :required: ``required`` accepts a boolean, either ``True`` or ``False`` that indicates that the argument is required. When not specified, ``required`` defaults to ``False``. This should not be used in combination with ``default``. :no_log: ``no_log`` accepts a boolean, either ``True`` or ``False``, that indicates explicitly whether or not the argument value should be masked in logs and output. .. note:: In the absence of ``no_log``, if the parameter name appears to indicate that the argument value is a password or passphrase (such as "admin_password"), a warning will be shown and the value will be masked in logs but **not** output. To disable the warning and masking for parameters that do not contain sensitive information, set ``no_log`` to ``False``. :aliases: ``aliases`` accepts a list of alternative argument names for the argument, such as the case where the argument is ``name`` but the module accepts ``aliases=['pkg']`` to allow ``pkg`` to be interchangeably with ``name`` :options: ``options`` implements the ability to create a sub-argument_spec, where the sub options of the top level argument are also validated using the attributes discussed in this section. The example at the top of this section demonstrates use of ``options``. ``type`` or ``elements`` should be ``dict`` is this case. :apply_defaults: ``apply_defaults`` works alongside ``options`` and allows the ``default`` of the sub-options to be applied even when the top-level argument is not supplied. In the example of the ``argument_spec`` at the top of this section, it would allow ``module.params['top_level']['second_level']`` to be defined, even if the user does not provide ``top_level`` when calling the module. :removed_in_version: ``removed_in_version`` indicates which version of ansible-core or a collection a deprecated argument will be removed in. Mutually exclusive with ``removed_at_date``, and must be used with ``removed_from_collection``. Example: .. code-block:: python option = { 'type': 'str', 'removed_in_version': '2.0.0', 'collection_name': 'testns.testcol', }, :removed_at_date: ``removed_at_date`` indicates that a deprecated argument will be removed in a minor ansible-core release or major collection release after this date. Mutually exclusive with ``removed_in_version``, and must be used with ``removed_from_collection``. Example: .. code-block:: python option = { 'type': 'str', 'removed_at_date': '2020-12-31', 'collection_name': 'testns.testcol', }, :removed_from_collection: Specifies which collection (or ansible-core) deprecates this deprecated argument. Specify ``ansible.builtin`` for ansible-core, or the collection's name (format ``foo.bar``). Must be used with ``removed_in_version`` or ``removed_at_date``. :deprecated_aliases: Deprecates aliases of this argument. Must contain a list or tuple of dictionaries having some the following keys: :name: The name of the alias to deprecate. (Required.) :version: The version of ansible-core or the collection this alias will be removed in. Either ``version`` or ``date`` must be specified. :date: The a date after which a minor release of ansible-core or a major collection release will no longer contain this alias.. Either ``version`` or ``date`` must be specified. :collection_name: Specifies which collection (or ansible-core) deprecates this deprecated alias. Specify ``ansible.builtin`` for ansible-core, or the collection's name (format ``foo.bar``). Must be used with ``version`` or ``date``. Examples: .. code-block:: python option = { 'type': 'str', 'aliases': ['foo', 'bar'], 'depecated_aliases': [ { 'name': 'foo', 'version': '2.0.0', 'collection_name': 'testns.testcol', }, { 'name': 'foo', 'date': '2020-12-31', 'collection_name': 'testns.testcol', }, ], }, :mutually_exclusive: If ``options`` is specified, ``mutually_exclusive`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`. :required_together: If ``options`` is specified, ``required_together`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`. :required_one_of: If ``options`` is specified, ``required_one_of`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`. :required_if: If ``options`` is specified, ``required_if`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`. :required_by: If ``options`` is specified, ``required_by`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`. .. _argument_spec_dependencies: Dependencies between module options ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The following are optional arguments for ``AnsibleModule()``: .. code-block:: python module = AnsibleModule( argument_spec, mutually_exclusive=[ ('path', 'content'), ], required_one_of=[ ('path', 'content'), ], ) :mutually_exclusive: Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names which are mutually exclusive. If more than one options of a list are specified together, Ansible will fail the module with an error. Example: .. code-block:: python mutually_exclusive=[ ('path', 'content'), ('repository_url', 'repository_filename'), ], In this example, the options ``path`` and ``content`` must not specified at the same time. Also the options ``repository_url`` and ``repository_filename`` must not be specified at the same time. But specifying ``path`` and ``repository_url`` is accepted. To ensure that precisely one of two (or more) options is specified, combine ``mutually_exclusive`` with ``required_one_of``. :required_together: Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names which are must be specified together. If at least one of these options are specified, the other ones from the same sequence must all be present. Example: .. code-block:: python required_together=[ ('file_path', 'file_hash'), ], In this example, if one of the options ``file_path`` or ``file_hash`` is specified, Ansible will fail the module with an error if the other one is not specified. :required_one_of: Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names from which at least one must be specified. If none one of these options are specified, Ansible will fail module execution. Example: .. code-block:: python required_one_of=[ ('path', 'content'), ], In this example, at least one of ``path`` and ``content`` must be specified. If none are specified, execution will fail. Specifying both is explicitly allowed; to prevent this, combine ``required_one_of`` with ``mutually_exclusive``. :required_if: Must be a sequence of sequences. Every inner sequence describes one conditional dependency. Every sequence must have three or four values. The first two values are the option's name and the option's value which describes the condition. The further elements of the sequence are only needed if the option of that name has precisely this value. If you want that all options in a list of option names are specified if the condition is met, use one of the following forms: .. code-block:: python ('option_name', option_value, ('option_a', 'option_b', ...)), ('option_name', option_value, ('option_a', 'option_b', ...), False), If you want that at least one option of a list of option names is specified if the condition is met, use the following form: .. code-block:: python ('option_name', option_value, ('option_a', 'option_b', ...), True), Example: .. code-block:: python required_if=[ ('state', 'present', ('path', 'content'), True), ('force', True, ('force_reason', 'force_code')), ], In this example, if the user specifies ``state=present``, at least one of the options ``path`` and ``content`` must be supplied (or both). To make sure that precisely one can be specified, combine ``required_if`` with ``mutually_exclusive``. On the other hand, if ``force`` (a boolean parameter) is set to ``true``, ``yes`` etc., both ``force_reason`` and ``force_code`` must be specified. :required_by: Must be a dictionary mapping option names to sequences of option names. If the option name in a dictionary key is specified, the option names it maps to must all also be specified. Note that instead of a sequence of option names, you can also specify one single option name. Example: .. code-block:: python required_by={ 'force': 'force_reason', 'path': ('mode', 'owner', 'group'), }, In the example, if ``force`` is specified, ``force_reason`` must also be specified. Also, if ``path`` is specified, then three three options ``mode``, ``owner`` and ``group`` also must be specified. Declaring check mode support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To declare that a module supports check mode, supply ``supports_check_mode=True`` to the ``AnsibleModule()`` call: .. code-block:: python module = AnsibleModule(argument_spec, supports_check_mode=True) The module can determine whether it is called in check mode by checking the boolean value ``module.check_mode``. If it evaluates to ``True``, the module must take care not to do any modification. If ``supports_check_mode=False`` is specified, which is the default value, the module will exit in check mode with ``skipped=True`` and message ``remote module () does not support check mode``. Adding file options ^^^^^^^^^^^^^^^^^^^ To declare that a module should add support for all common file options, supply ``add_file_common_args=True`` to the ``AnsibleModule()`` call: .. code-block:: python module = AnsibleModule(argument_spec, add_file_common_args=True) You can find `a list of all file options here `_. It is recommended that you make your ``DOCUMENTATION`` extend the doc fragment ``ansible.builtin.files`` (see :ref:`module_docs_fragments`) in this case, to make sure that all these fields are correctly documented. The helper functions ``module.load_file_common_arguments()`` and ``module.set_fs_attributes_if_different()`` can be used to handle these arguments for you: .. code-block:: python argument_spec = { 'path': { 'type': 'str', 'required': True, }, } module = AnsibleModule(argument_spec, add_file_common_args=True) changed = False # TODO do something with module.params['path'], like update it's contents # Ensure that module.params['path'] satisfies the file options supplied by the user file_args = module.load_file_common_arguments(module.params) changed = module.set_fs_attributes_if_different(file_args, changed) module.exit_json(changed=changed) ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4525561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_python_3.rst0000644000000000000000000004351600000000000025745 0ustar00rootroot00000000000000.. _developing_python_3: ******************** Ansible and Python 3 ******************** The ``ansible-core`` code runs on both Python 2 and Python 3 because we want Ansible to be able to manage a wide variety of machines. Contributors to ansible-core and to Ansible Collections should be aware of the tips in this document so that they can write code that will run on the same versions of Python as the rest of Ansible. .. contents:: :local: To ensure that your code runs on Python 3 as well as on Python 2, learn the tips and tricks and idioms described here. Most of these considerations apply to all three types of Ansible code: 1. controller-side code - code that runs on the machine where you invoke :command:`/usr/bin/ansible` 2. modules - the code which Ansible transmits to and invokes on the managed machine. 3. shared ``module_utils`` code - the common code that's used by modules to perform tasks and sometimes used by controller-side code as well However, the three types of code do not use the same string strategy. If you're developing a module or some ``module_utils`` code, be sure to read the section on string strategy carefully. Minimum version of Python 3.x and Python 2.x ============================================ On the controller we support Python 3.5 or greater and Python 2.7 or greater. Module-side, we support Python 3.5 or greater and Python 2.6 or greater. Python 3.5 was chosen as a minimum because it is the earliest Python 3 version adopted as the default Python by a Long Term Support (LTS) Linux distribution (in this case, Ubuntu-16.04). Previous LTS Linux distributions shipped with a Python 2 version which users can rely upon instead of the Python 3 version. For Python 2, the default is for modules to run on at least Python 2.6. This allows users with older distributions that are stuck on Python 2.6 to manage their machines. Modules are allowed to drop support for Python 2.6 when one of their dependent libraries requires a higher version of Python. This is not an invitation to add unnecessary dependent libraries in order to force your module to be usable only with a newer version of Python; instead it is an acknowledgment that some libraries (for instance, boto3 and docker-py) will only function with a newer version of Python. .. note:: Python 2.4 Module-side Support: Support for Python 2.4 and Python 2.5 was dropped in Ansible-2.4. RHEL-5 (and its rebuilds like CentOS-5) were supported until April of 2017. Ansible-2.3 was released in April of 2017 and was the last Ansible release to support Python 2.4 on the module-side. Developing Ansible code that supports Python 2 and Python 3 =========================================================== The best place to start learning about writing code that supports both Python 2 and Python 3 is `Lennart Regebro's book: Porting to Python 3 `_. The book describes several strategies for porting to Python 3. The one we're using is `to support Python 2 and Python 3 from a single code base `_ Understanding strings in Python 2 and Python 3 ---------------------------------------------- Python 2 and Python 3 handle strings differently, so when you write code that supports Python 3 you must decide what string model to use. Strings can be an array of bytes (like in C) or they can be an array of text. Text is what we think of as letters, digits, numbers, other printable symbols, and a small number of unprintable "symbols" (control codes). In Python 2, the two types for these (:class:`str ` for bytes and :func:`unicode ` for text) are often used interchangeably. When dealing only with ASCII characters, the strings can be combined, compared, and converted from one type to another automatically. When non-ASCII characters are introduced, Python 2 starts throwing exceptions due to not knowing what encoding the non-ASCII characters should be in. Python 3 changes this behavior by making the separation between bytes (:class:`bytes `) and text (:class:`str `) more strict. Python 3 will throw an exception when trying to combine and compare the two types. The programmer has to explicitly convert from one type to the other to mix values from each. In Python 3 it's immediately apparent to the programmer when code is mixing the byte and text types inappropriately, whereas in Python 2, code that mixes those types may work until a user causes an exception by entering non-ASCII input. Python 3 forces programmers to proactively define a strategy for working with strings in their program so that they don't mix text and byte strings unintentionally. Ansible uses different strategies for working with strings in controller-side code, in :ref: `modules `, and in :ref:`module_utils ` code. .. _controller_string_strategy: Controller string strategy: the Unicode Sandwich ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In controller-side code we use a strategy known as the Unicode Sandwich (named after Python 2's :func:`unicode ` text type). For Unicode Sandwich we know that at the border of our code and the outside world (for example, file and network IO, environment variables, and some library calls) we are going to receive bytes. We need to transform these bytes into text and use that throughout the internal portions of our code. When we have to send those strings back out to the outside world we first convert the text back into bytes. To visualize this, imagine a 'sandwich' consisting of a top and bottom layer of bytes, a layer of conversion between, and all text type in the center. Unicode Sandwich common borders: places to convert bytes to text in controller code ----------------------------------------------------------------------------------- This is a partial list of places where we have to convert to and from bytes when using the Unicode Sandwich string strategy. It's not exhaustive but it gives you an idea of where to watch for problems. Reading and writing to files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In Python 2, reading from files yields bytes. In Python 3, it can yield text. To make code that's portable to both we don't make use of Python 3's ability to yield text but instead do the conversion explicitly ourselves. For example: .. code-block:: python from ansible.module_utils.common.text.converters import to_text with open('filename-with-utf8-data.txt', 'rb') as my_file: b_data = my_file.read() try: data = to_text(b_data, errors='surrogate_or_strict') except UnicodeError: # Handle the exception gracefully -- usually by displaying a good # user-centric error message that can be traced back to this piece # of code. pass .. note:: Much of Ansible assumes that all encoded text is UTF-8. At some point, if there is demand for other encodings we may change that, but for now it is safe to assume that bytes are UTF-8. Writing to files is the opposite process: .. code-block:: python from ansible.module_utils.common.text.converters import to_bytes with open('filename.txt', 'wb') as my_file: my_file.write(to_bytes(some_text_string)) Note that we don't have to catch :exc:`UnicodeError` here because we're transforming to UTF-8 and all text strings in Python can be transformed back to UTF-8. Filesystem interaction ^^^^^^^^^^^^^^^^^^^^^^ Dealing with filenames often involves dropping back to bytes because on UNIX-like systems filenames are bytes. On Python 2, if we pass a text string to these functions, the text string will be converted to a byte string inside of the function and a traceback will occur if non-ASCII characters are present. In Python 3, a traceback will only occur if the text string can't be decoded in the current locale, but it's still good to be explicit and have code which works on both versions: .. code-block:: python import os.path from ansible.module_utils.common.text.converters import to_bytes filename = u'/var/tmp/ãらã¨ã¿.txt' f = open(to_bytes(filename), 'wb') mtime = os.path.getmtime(to_bytes(filename)) b_filename = os.path.expandvars(to_bytes(filename)) if os.path.exists(to_bytes(filename)): pass When you are only manipulating a filename as a string without talking to the filesystem (or a C library which talks to the filesystem) you can often get away without converting to bytes: .. code-block:: python import os.path os.path.join(u'/var/tmp/café', u'ãらã¨ã¿') os.path.split(u'/var/tmp/café/ãらã¨ã¿') On the other hand, if the code needs to manipulate the filename and also talk to the filesystem, it can be more convenient to transform to bytes right away and manipulate in bytes. .. warning:: Make sure all variables passed to a function are the same type. If you're working with something like :func:`python3:os.path.join` which takes multiple strings and uses them in combination, you need to make sure that all the types are the same (either all bytes or all text). Mixing bytes and text will cause tracebacks. Interacting with other programs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Interacting with other programs goes through the operating system and C libraries and operates on things that the UNIX kernel defines. These interfaces are all byte-oriented so the Python interface is byte oriented as well. On both Python 2 and Python 3, byte strings should be given to Python's subprocess library and byte strings should be expected back from it. One of the main places in Ansible's controller code that we interact with other programs is the connection plugins' ``exec_command`` methods. These methods transform any text strings they receive in the command (and arguments to the command) to execute into bytes and return stdout and stderr as byte strings Higher level functions (like action plugins' ``_low_level_execute_command``) transform the output into text strings. .. _module_string_strategy: Module string strategy: Native String ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In modules we use a strategy known as Native Strings. This makes things easier on the community members who maintain so many of Ansible's modules, by not breaking backwards compatibility by mandating that all strings inside of modules are text and converting between text and bytes at the borders. Native strings refer to the type that Python uses when you specify a bare string literal: .. code-block:: python "This is a native string" In Python 2, these are byte strings. In Python 3 these are text strings. Modules should be coded to expect bytes on Python 2 and text on Python 3. .. _module_utils_string_strategy: Module_utils string strategy: hybrid ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In ``module_utils`` code we use a hybrid string strategy. Although Ansible's ``module_utils`` code is largely like module code, some pieces of it are used by the controller as well. So it needs to be compatible with modules and with the controller's assumptions, particularly the string strategy. The module_utils code attempts to accept native strings as input to its functions and emit native strings as their output. In ``module_utils`` code: * Functions **must** accept string parameters as either text strings or byte strings. * Functions may return either the same type of string as they were given or the native string type for the Python version they are run on. * Functions that return strings **must** document whether they return strings of the same type as they were given or native strings. Module-utils functions are therefore often very defensive in nature. They convert their string parameters into text (using ``ansible.module_utils.common.text.converters.to_text``) at the beginning of the function, do their work, and then convert the return values into the native string type (using ``ansible.module_utils.common.text.converters.to_native``) or back to the string type that their parameters received. Tips, tricks, and idioms for Python 2/Python 3 compatibility ------------------------------------------------------------ Use forward-compatibility boilerplate ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use the following boilerplate code at the top of all python files to make certain constructs act the same way on Python 2 and Python 3: .. code-block:: python # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type ``__metaclass__ = type`` makes all classes defined in the file into new-style classes without explicitly inheriting from :class:`object `. The ``__future__`` imports do the following: :absolute_import: Makes imports look in :data:`sys.path ` for the modules being imported, skipping the directory in which the module doing the importing lives. If the code wants to use the directory in which the module doing the importing, there's a new dot notation to do so. :division: Makes division of integers always return a float. If you need to find the quotient use ``x // y`` instead of ``x / y``. :print_function: Changes :func:`print ` from a keyword into a function. .. seealso:: * `PEP 0328: Absolute Imports `_ * `PEP 0238: Division `_ * `PEP 3105: Print function `_ Prefix byte strings with ``b_`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Since mixing text and bytes types leads to tracebacks we want to be clear about what variables hold text and what variables hold bytes. We do this by prefixing any variable holding bytes with ``b_``. For instance: .. code-block:: python filename = u'/var/tmp/café.txt' b_filename = to_bytes(filename) with open(b_filename) as f: data = f.read() We do not prefix the text strings instead because we only operate on byte strings at the borders, so there are fewer variables that need bytes than text. Import Ansible's bundled Python ``six`` library ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The third-party Python `six `_ library exists to help projects create code that runs on both Python 2 and Python 3. Ansible includes a version of the library in module_utils so that other modules can use it without requiring that it is installed on the remote system. To make use of it, import it like this: .. code-block:: python from ansible.module_utils import six .. note:: Ansible can also use a system copy of six Ansible will use a system copy of six if the system copy is a later version than the one Ansible bundles. Handle exceptions with ``as`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In order for code to function on Python 2.6+ and Python 3, use the new exception-catching syntax which uses the ``as`` keyword: .. code-block:: python try: a = 2/0 except ValueError as e: module.fail_json(msg="Tried to divide by zero: %s" % e) Do **not** use the following syntax as it will fail on every version of Python 3: .. This code block won't highlight because python2 isn't recognized. This is necessary to pass tests under python 3. .. code-block:: none try: a = 2/0 except ValueError, e: module.fail_json(msg="Tried to divide by zero: %s" % e) Update octal numbers ^^^^^^^^^^^^^^^^^^^^ In Python 2.x, octal literals could be specified as ``0755``. In Python 3, octals must be specified as ``0o755``. String formatting for controller code ------------------------------------- Use ``str.format()`` for Python 2.6 compatibility ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Starting in Python 2.6, strings gained a method called ``format()`` to put strings together. However, one commonly used feature of ``format()`` wasn't added until Python 2.7, so you need to remember not to use it in Ansible code: .. code-block:: python # Does not work in Python 2.6! new_string = "Dear {}, Welcome to {}".format(username, location) # Use this instead new_string = "Dear {0}, Welcome to {1}".format(username, location) Both of the format strings above map positional arguments of the ``format()`` method into the string. However, the first version doesn't work in Python 2.6. Always remember to put numbers into the placeholders so the code is compatible with Python 2.6. .. seealso:: Python documentation on format strings: - `format strings in 2.6 `_ - `format strings in 3.x `_ Use percent format with byte strings ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In Python 3.x, byte strings do not have a ``format()`` method. However, it does have support for the older, percent-formatting. .. code-block:: python b_command_line = b'ansible-playbook --become-user %s -K %s' % (user, playbook_file) .. note:: Percent formatting added in Python 3.5 Percent formatting of byte strings was added back into Python 3 in 3.5. This isn't a problem for us because Python 3.5 is our minimum version. However, if you happen to be testing Ansible code with Python 3.4 or earlier, you will find that the byte string formatting here won't work. Upgrade to Python 3.5 to test. .. seealso:: Python documentation on `percent formatting `_ .. _testing_modules_python_3: Testing modules on Python 3 =================================== Ansible modules are slightly harder to code to support Python 3 than normal code from other projects. A lot of mocking has to go into unit testing an Ansible module, so it's harder to test that your changes have fixed everything or to to make sure that later commits haven't regressed the Python 3 support. Review our :ref:`testing ` pages for more information. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4525561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/developing_rebasing.rst0000644000000000000000000000736000000000000025771 0ustar00rootroot00000000000000.. _rebase_guide: *********************** Rebasing a pull request *********************** You may find that your pull request (PR) is out-of-date and needs to be rebased. This can happen for several reasons: - Files modified in your PR are in conflict with changes which have already been merged. - Your PR is old enough that significant changes to automated test infrastructure have occurred. Rebasing the branch used to create your PR will resolve both of these issues. Configuring your remotes ======================== Before you can rebase your PR, you need to make sure you have the proper remotes configured. These instructions apply to any repository on GitHub, including collections repositories. On other platforms (bitbucket, gitlab), the same principles and commands apply but the syntax may be different. We use the ansible/ansible repository here as an example. In other repositories, the branch names may be different. Assuming you cloned your fork in the usual fashion, the ``origin`` remote will point to your fork: .. code-block:: shell-session $ git remote -v origin git@github.com:YOUR_GITHUB_USERNAME/ansible.git (fetch) origin git@github.com:YOUR_GITHUB_USERNAME/ansible.git (push) However, you also need to add a remote which points to the upstream repository: .. code-block:: shell-session $ git remote add upstream https://github.com/ansible/ansible.git Which should leave you with the following remotes: .. code-block:: shell-session $ git remote -v origin git@github.com:YOUR_GITHUB_USERNAME/ansible.git (fetch) origin git@github.com:YOUR_GITHUB_USERNAME/ansible.git (push) upstream https://github.com/ansible/ansible.git (fetch) upstream https://github.com/ansible/ansible.git (push) Checking the status of your branch should show your fork is up-to-date with the ``origin`` remote: .. code-block:: shell-session $ git status On branch YOUR_BRANCH Your branch is up-to-date with 'origin/YOUR_BRANCH'. nothing to commit, working tree clean Rebasing your branch ==================== Once you have an ``upstream`` remote configured, you can rebase the branch for your PR: .. code-block:: shell-session $ git pull --rebase upstream devel This will replay the changes in your branch on top of the changes made in the upstream ``devel`` branch. If there are merge conflicts, you will be prompted to resolve those before you can continue. After you rebase, the status of your branch changes: .. code-block:: shell-session $ git status On branch YOUR_BRANCH Your branch and 'origin/YOUR_BRANCH' have diverged, and have 4 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) nothing to commit, working tree clean Don't worry, this is normal after a rebase. You should ignore the ``git status`` instructions to use ``git pull``. We'll cover what to do next in the following section. Updating your pull request ========================== Now that you've rebased your branch, you need to push your changes to GitHub to update your PR. Since rebasing re-writes git history, you will need to use a force push: .. code-block:: shell-session $ git push --force-with-lease Your PR on GitHub has now been updated. This will automatically trigger testing of your changes. You should check in on the status of your PR after tests have completed to see if further changes are required. Getting help rebasing ===================== For help with rebasing your PR, or other development related questions, join us on the #ansible-devel chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). .. seealso:: :ref:`community_development_process` Information on roadmaps, opening PRs, Ansibullbot, and more ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.453556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/index.rst0000644000000000000000000001100600000000000023062 0ustar00rootroot00000000000000.. _developer_guide: *************** Developer Guide *************** .. note:: **Making Open Source More Inclusive** Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_. Welcome to the Ansible Developer Guide! **Who should use this guide?** If you want to extend Ansible by using a custom module or plugin locally, creating a module or plugin, adding functionality to an existing module, or expanding test coverage, this guide is for you. We've included detailed information for developers on how to test and document modules, as well as the prerequisites for getting your module or plugin accepted into the main Ansible repository. Find the task that best describes what you want to do: * I'm looking for a way to address a use case: * I want to :ref:`add a custom plugin or module locally `. * I want to figure out if :ref:`developing a module is the right approach ` for my use case. * I want to :ref:`develop a collection `. * I want to :ref:`contribute to an Ansible-maintained collection `. * I want to :ref:`contribute to a community-maintained collection `. * I want to :ref:`migrate a role to a collection `. * I've read the info above, and I'm sure I want to develop a module: * What do I need to know before I start coding? * I want to :ref:`set up my Python development environment `. * I want to :ref:`get started writing a module `. * I want to write a specific kind of module: * a :ref:`network module ` * a :ref:`Windows module `. * an :ref:`Amazon module `. * an :ref:`OpenStack module `. * an :ref:`oVirt/RHV module `. * a :ref:`VMware module `. * I want to :ref:`write a series of related modules ` that integrate Ansible with a new product (for example, a database, cloud provider, network platform, and so on). * I want to refine my code: * I want to :ref:`debug my module code `. * I want to :ref:`add tests `. * I want to :ref:`document my module `. * I want to :ref:`document my set of modules for a network platform `. * I want to follow :ref:`conventions and tips for clean, usable module code `. * I want to :ref:`make sure my code runs on Python 2 and Python 3 `. * I want to work on other development projects: * I want to :ref:`write a plugin `. * I want to :ref:`connect Ansible to a new source of inventory `. * I want to :ref:`deprecate an outdated module `. * I want to contribute back to the Ansible project: * I want to :ref:`understand how to contribute to Ansible `. * I want to :ref:`contribute my module or plugin `. * I want to :ref:`understand the license agreement ` for contributions to Ansible. If you prefer to read the entire guide, here's a list of the pages in order. .. toctree:: :maxdepth: 2 developing_locally developing_modules developing_modules_general developing_modules_checklist developing_modules_best_practices developing_python_3 debugging developing_modules_documenting developing_modules_general_windows developing_modules_general_aci platforms/aws_guidelines platforms/openstack_guidelines platforms/ovirt_dev_guide platforms/vmware_guidelines platforms/vmware_rest_guidelines developing_modules_in_groups testing module_lifecycle developing_plugins developing_inventory developing_core developing_program_flow_modules developing_api developing_rebasing developing_module_utilities developing_collections migrating_roles collections_galaxy_meta overview_architecture ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.453556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/migrating_roles.rst0000644000000000000000000004331700000000000025152 0ustar00rootroot00000000000000 .. _migrating_roles: ************************************************* Migrating Roles to Roles in Collections on Galaxy ************************************************* You can migrate any existing standalone role into a collection and host the collection on Galaxy. With Ansible collections, you can distribute many roles in a single cohesive unit of re-usable automation. Inside a collection, you can share custom plugins across all roles in the collection instead of duplicating them in each role's :file:`library/`` directory. You must migrate roles to collections if you want to distribute them as certified Ansible content. .. note:: If you want to import your collection to Galaxy, you need a `Galaxy namespace `_. See :ref:`developing_collections` for details on collections. .. contents:: :local: :depth: 1 Comparing standalone roles to collection roles =============================================== :ref:`Standalone roles ` have the following directory structure: .. code-block:: bash :emphasize-lines: 5,7,8 role/ ├── defaults ├── files ├── handlers ├── library ├── meta ├── module_utils ├── [*_plugins] ├── tasks ├── templates ├── tests └── vars The highlighted directories above will change when you migrate to a collection-based role. The collection directory structure includes a :file:`roles/` directory: .. code-block:: bash mynamespace/ └── mycollection/ ├── docs/ ├── galaxy.yml ├── plugins/ │ ├── modules/ │ │ └── module1.py │ ├── inventory/ │ └── .../ ├── README.md ├── roles/ │ ├── role1/ │ ├── role2/ │ └── .../ ├── playbooks/ │ ├── files/ │ ├── vars/ │ ├── templates/ │ └── tasks/ └── tests/ You will need to use the Fully Qualified Collection Name (FQCN) to use the roles and plugins when you migrate your role into a collection. The FQCN is the combination of the collection ``namespace``, collection ``name``, and the content item you are referring to. So for example, in the above collection, the FQCN to access ``role1`` would be: .. code-block:: Python mynamespace.mycollection.role1 A collection can contain one or more roles in the :file:`roles/` directory and these are almost identical to standalone roles, except you need to move plugins out of the individual roles, and use the :abbr:`FQCN (Fully Qualified Collection Name)` in some places, as detailed in the next section. .. note:: In standalone roles, some of the plugin directories referenced their plugin types in the plural sense; this is not the case in collections. .. _simple_roles_in_collections: Migrating a role to a collection ================================= To migrate from a standalone role that contains no plugins to a collection role: 1. Create a local :file:`ansible_collections` directory and ``cd`` to this new directory. 2. Create a collection. If you want to import this collection to Ansible Galaxy, you need a `Galaxy namespace `_. .. code-block:: bash $ ansible-galaxy collection init mynamespace.mycollection This creates the collection directory structure. 3. Copy the standalone role directory into the :file:`roles/` subdirectory of the collection. Roles in collections cannot have hyphens in the role name. Rename any such roles to use underscores instead. .. code-block:: bash $ mkdir mynamespace/mycollection/roles/my_role/ $ cp -r /path/to/standalone/role/mynamespace/my_role/\* mynamespace/mycollection/roles/my_role/ 4. Update ``galaxy.yml`` to include any role dependencies. 5. Update the collection README.md file to add links to any role README.md files. .. _complex_roles_in_collections: Migrating a role that contains plugins to a collection ====================================================== To migrate from a standalone role that has plugins to a collection role: 1. Create a local :file:`ansible_collections directory` and ``cd`` to this new directory. 2. Create a collection. If you want to import this collection to Ansible Galaxy, you need a `Galaxy namespace `_. .. code-block:: bash $ ansible-galaxy collection init mynamespace.mycollection This creates the collection directory structure. 3. Copy the standalone role directory into the :file:`roles/` subdirectory of the collection. Roles in collections cannot have hyphens in the role name. Rename any such roles to use underscores instead. .. code-block:: bash $ mkdir mynamespace/mycollection/roles/my_role/ $ cp -r /path/to/standalone/role/mynamespace/my_role/\* mynamespace/mycollection/roles/my_role/ 4. Move any modules to the :file:`plugins/modules/` directory. .. code-block:: bash $ mv -r mynamespace/mycollection/roles/my_role/library/\* mynamespace/mycollection/plugins/modules/ 5. Move any other plugins to the appropriate :file:`plugins/PLUGINTYPE/` directory. See :ref:`migrating_plugins_collection` for additional steps that may be required. 6. Update ``galaxy.yml`` to include any role dependencies. 7. Update the collection README.md file to add links to any role README.md files. 8. Change any references to the role to use the :abbr:`FQCN (Fully Qualified Collection Name)`. .. code-block:: yaml --- - name: example role by FQCN hosts: some_host_pattern tasks: - name: import FQCN role from a collection import_role: name: mynamespace.mycollection.my_role You can alternately use the ``collections`` keyword to simplify this: .. code-block:: yaml --- - name: example role by FQCN hosts: some_host_pattern collections: - mynamespace.mycollection tasks: - name: import role from a collection import_role: name: my_role .. _migrating_plugins_collection: Migrating other role plugins to a collection --------------------------------------------- To migrate other role plugins to a collection: 1. Move each nonmodule plugins to the appropriate :file:`plugins/PLUGINTYPE/` directory. The :file:`mynamespace/mycollection/plugins/README.md` file explains the types of plugins that the collection can contain within optionally created subdirectories. .. code-block:: bash $ mv -r mynamespace/mycollection/roles/my_role/filter_plugins/\* mynamespace/mycollection/plugins/filter/ 2. Update documentation to use the FQCN. Plugins that use ``doc_fragments`` need to use FQCN (for example, ``mydocfrag`` becomes ``mynamespace.mycollection.mydocfrag``). 3. Update relative imports work in collections to start with a period. For example, :file:`./filename` and :file:`../asdfu/filestuff` works but :file:`filename` in same directory must be updated to :file:`./filename`. If you have a custom ``module_utils`` or import from ``__init__.py``, you must also: #. Change the Python namespace for custom ``module_utils`` to use the :abbr:`FQCN (Fully Qualified Collection Name)` along with the ``ansible_collections`` convention. See :ref:`update_module_utils_role`. #. Change how you import from ``__init__.py``. See :ref:`update_init_role`. .. _update_module_utils_role: Updating ``module_utils`` ^^^^^^^^^^^^^^^^^^^^^^^^^ If any of your custom modules use a custom module utility, once you migrate to a collection you cannot address the module utility in the top level ``ansible.module_utils`` Python namespace. Ansible does not merge content from collections into the Ansible internal Python namespace. Update any Python import statements that refer to custom module utilities when you migrate your custom content to collections. See :ref:`module_utils in collections ` for more details. When coding with ``module_utils`` in a collection, the Python import statement needs to take into account the :abbr:`FQCN (Fully Qualified Collection Name)` along with the ``ansible_collections`` convention. The resulting Python import looks similar to the following example: .. code-block:: text from ansible_collections.{namespace}.{collectionname}.plugins.module_utils.{util} import {something} .. note:: You need to follow the same rules in changing paths and using namespaced names for subclassed plugins. The following example code snippets show a Python and a PowerShell module using both default Ansible ``module_utils`` and those provided by a collection. In this example the namespace is ``ansible_example`` and the collection is ``community``. In the Python example the ``module_utils`` is ``helper`` and the :abbr:`FQCN (Fully Qualified Collection Name)` is ``ansible_example.community.plugins.module_utils.helper``: .. code-block:: text from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.six.moves.urllib.error import HTTPError from ansible_collections.ansible_example.community.plugins.module_utils.helper import HelperRequest argspec = dict( name=dict(required=True, type='str'), state=dict(choices=['present', 'absent'], required=True), ) module = AnsibleModule( argument_spec=argspec, supports_check_mode=True ) _request = HelperRequest( module, headers={"Content-Type": "application/json"}, data=data ) In the PowerShell example the ``module_utils`` is ``hyperv`` and the :abbr:`FQCN (Fully Qualified Collection Name)` is ``ansible_example.community.plugins.module_utils.hyperv``: .. code-block:: powershell #!powershell #AnsibleRequires -CSharpUtil Ansible.Basic #AnsibleRequires -PowerShell ansible_collections.ansible_example.community.plugins.module_utils.hyperv $spec = @{ name = @{ required = $true; type = "str" } state = @{ required = $true; choices = @("present", "absent") } } $module = [Ansible.Basic.AnsibleModule]::Create($args, $spec) Invoke-HyperVFunction -Name $module.Params.name $module.ExitJson() .. _update_init_role: Importing from __init__.py ^^^^^^^^^^^^^^^^^^^^^^^^^^ Because of the way that the CPython interpreter does imports, combined with the way the Ansible plugin loader works, if your custom embedded module or plugin requires importing something from an :file:`__init__.py` file, that also becomes part of your collection. You can either originate the content inside a standalone role or use the file name in the Python import statement. The following example is an :file:`__init__.py` file that is part of a callback plugin found inside a collection named ``ansible_example.community``. .. code-block:: python from ansible_collections.ansible_example.community.plugins.callback.__init__ import CustomBaseClass Example: Migrating a standalone role with plugins to a collection ----------------------------------------------------------------- In this example we have a standalone role called ``my-standalone-role.webapp`` to emulate a standalone role that contains dashes in the name (which is not valid in collections). This standalone role contains a custom module in the ``library/`` directory called ``manage_webserver``. .. code-block:: bash my-standalone-role.webapp ├── defaults ├── files ├── handlers ├── library ├── meta ├── tasks ├── templates ├── tests └── vars 1. Create a new collection, for example, ``acme.webserver``: .. code-block:: bash $ ansible-galaxy collection init acme.webserver - Collection acme.webserver was created successfully $ tree acme -d 1 acme └── webserver ├── docs ├── plugins └── roles 2. Create the ``webapp`` role inside the collection and copy all contents from the standalone role: .. code-block:: bash $ mkdir acme/webserver/roles/webapp $ cp my-standalone-role.webapp/* acme/webserver/roles/webapp/ 3. Move the ``manage_webserver`` module to its new home in ``acme/webserver/plugins/modules/``: .. code-block:: bash $ cp my-standalone-role.webapp/library/manage_webserver.py acme/webserver/plugins/modules/manage.py .. note:: This example changed the original source file ``manage_webserver.py`` to the destination file ``manage.py``. This is optional but the :abbr:`FQCN (Fully Qualified Collection Name)` provides the ``webserver`` context as ``acme.webserver.manage``. 4. Change ``manage_webserver`` to ``acme.webserver.manage`` in :file:`tasks/` files in the role ( for example, ``my-standalone-role.webapp/tasks/main.yml``) and any use of the original module name. .. note:: This name change is only required if you changed the original module name, but illustrates content referenced by :abbr:`FQCN (Fully Qualified Collection Name)` can offer context and in turn can make module and plugin names shorter. If you anticipate using these modules independent of the role, keep the original naming conventions. Users can add the :ref:`collections keyword ` in their playbooks. Typically roles are an abstraction layer and users won't use components of the role independently. Example: Supporting standalone roles and migrated collection roles in a downstream RPM --------------------------------------------------------------------------------------- A standalone role can co-exist with its collection role counterpart (for example, as part of a support lifecycle of a product). This should only be done for a transition period, but these two can exist in downstream in packages such as RPMs. For example, the RHEL system roles could coexist with an `example of a RHEL system roles collection `_ and provide existing backwards compatibility with the downstream RPM. This section walks through an example creating this coexistence in a downstream RPM and requires Ansible 2.9.0 or later. To deliver a role as both a standalone role and a collection role: #. Place the collection in :file:`/usr/share/ansible/collections/ansible_collections/`. #. Copy the contents of the role inside the collection into a directory named after the standalone role and place the standalone role in :file:`/usr/share/ansible/roles/`. All previously bundled modules and plugins used in the standalone role are now referenced by :abbr:`FQCN (Fully Qualified Collection Name)` so even though they are no longer embedded, they can be found from the collection contents.This is an example of how the content inside the collection is a unique entity and does not have to be bound to a role or otherwise. You could alternately create two separate collections: one for the modules and plugins and another for the standalone role to migrate to. The role must use the modules and plugins as :abbr:`FQCN (Fully Qualified Collection Name)`. The following is an example RPM spec file that accomplishes this using this example content: .. code-block:: text Name: acme-ansible-content Summary: Ansible Collection for deploying and configuring ACME webapp Version: 1.0.0 Release: 1%{?dist} License: GPLv3+ Source0: acme-webserver-1.0.0.tar.gz Url: https://github.com/acme/webserver-ansible-collection BuildArch: noarch %global roleprefix my-standalone-role. %global collection_namespace acme %global collection_name webserver %global collection_dir %{_datadir}/ansible/collections/ansible_collections/%{collection_namespace}/%{collection_name} %description Ansible Collection and standalone role (for backward compatibility and migration) to deploy, configure, and manage the ACME webapp software. %prep %setup -qc %build %install mkdir -p %{buildroot}/%{collection_dir} cp -r ./* %{buildroot}/%{collection_dir}/ mkdir -p %{buildroot}/%{_datadir}/ansible/roles for role in %{buildroot}/%{collection_dir}/roles/* do cp -pR ${role} %{buildroot}/%{_datadir}/ansible/roles/%{roleprefix}$(basename ${role}) mkdir -p %{buildroot}/%{_pkgdocdir}/$(basename ${role}) for docfile in README.md COPYING LICENSE do if [ -f ${role}/${docfile} ] then cp -p ${role}/${docfile} %{buildroot}/%{_pkgdocdir}/$(basename ${role})/${docfile} fi done done %files %dir %{_datadir}/ansible %dir %{_datadir}/ansible/roles %dir %{_datadir}/ansible/collections %dir %{_datadir}/ansible/collections/ansible_collections %{_datadir}/ansible/roles/ %doc %{_pkgdocdir}/*/README.md %doc %{_datadir}/ansible/roles/%{roleprefix}*/README.md %{collection_dir} %doc %{collection_dir}/roles/*/README.md %license %{_pkgdocdir}/*/COPYING %license %{_pkgdocdir}/*/LICENSE .. _using_ansible_legacy: Using ``ansible.legacy`` to access local custom modules from collections-based roles ===================================================================================== Some roles use :ref:`local custom modules ` that are not part of the role itself. When you move these roles into collections, they can no longer find those custom plugins. You can add the synthetic collection ``ansible.legacy`` to enable legacy behavior and find those custom plugins. Adding ``ansible.legacy`` configures your role to search the pre-collections default paths for modules and plugins. To enable a role hosted in a collection to find legacy custom modules and other plugins hosted locally: Edit the role's ``meta/main.yml`` and add the ``ansible.legacy`` collection to your collection-hosted role to enable the use of legacy custom modules and plugins for all tasks: .. code-block:: yaml collections: - ansible.legacy Alternatively, you can update the tasks directly by changing ``local_module_name`` to ``ansible.legacy.local_module_name``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.453556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/module_lifecycle.rst0000644000000000000000000001700200000000000025261 0ustar00rootroot00000000000000.. _module_lifecycle: ******************************************** The lifecycle of an Ansible module or plugin ******************************************** Modules and plugins in the main Ansible repository have a defined life cycle, from the first introduction to final removal. The module and plugin lifecycle is tied to the `Ansible release cycle `. A module or plugin may move through these four stages: 1. When a module or plugin is first accepted into Ansible, we consider it in tech preview and will mark it as such in the documentation. 2. If a module or plugin matures, the 'preview' mark in the documentation is removed. Backward compatibility for these modules and plugins is maintained but not guaranteed, which means their parameters should be maintained with stable meanings. 3. If a module's or plugin's target API changes radically, or if someone creates a better implementation of its functionality, we may mark it deprecated. Modules and plugins that are deprecated are still available but they are reaching the end of their life cycle. We retain deprecated modules and plugins for 4 release cycles with deprecation warnings to help users update playbooks and roles that use them. 4. When a module or plugin has been deprecated for four release cycles, it is removed and replaced with a tombstone entry in the routing configuration. Modules and plugins that are removed are no longer shipped with Ansible. The tombstone entry helps users find alternative modules and plugins. For modules and plugins in collections, the lifecycle is similar. Since ansible-base 2.10, it is no longer possible to mark modules as 'preview' or 'stable'. .. _deprecating_modules: Deprecating modules and plugins in the Ansible main repository ============================================================== To deprecate a module in ansible-core, you must: 1. Rename the file so it starts with an ``_``, for example, rename ``old_cloud.py`` to ``_old_cloud.py``. This keeps the module available and marks it as deprecated on the module index pages. 2. Mention the deprecation in the relevant changelog (by creating a changelog fragment with a section ``deprecated_features``). 3. Reference the deprecation in the relevant ``porting_guide_core_x.y.rst``. 4. Add ``deprecated:`` to the documentation with the following sub-values: :removed_in: A ``string``, such as ``"2.10"``; the version of Ansible where the module will be replaced with a docs-only module stub. Usually current release +4. Mutually exclusive with :removed_by_date:. :remove_by_date: (Added in ansible-base 2.10). An ISO 8601 formatted date when the module will be removed. Usually 2 years from the date the module is deprecated. Mutually exclusive with :removed_in:. :why: Optional string that used to detail why this has been removed. :alternative: Inform users they should do instead, for example, ``Use M(whatmoduletouseinstead) instead.``. * For an example of documenting deprecation, see this `PR that deprecates multiple modules `_. Some of the elements in the PR might now be out of date. Deprecating modules and plugins in a collection =============================================== To deprecate a module in a collection, you must: 1. Add a ``deprecation`` entry to ``plugin_routing`` in ``meta/runtime.yml``. For example, to deprecate the module ``old_cloud``, add: .. code-block:: yaml plugin_routing: modules: old_cloud: deprecation: removal_version: 2.0.0 warning_text: Use foo.bar.new_cloud instead. For other plugin types, you have to replace ``modules:`` with ``:``, for example ``lookup:`` for lookup plugins. Instead of ``removal_version``, you can also use ``removal_date`` with an ISO 8601 formatted date after which the module will be removed in a new major version of the collection. 2. Mention the deprecation in the relevant changelog. If the collection uses ``antsibull-changelog``, create a changelog fragment with a section ``deprecated_features``. 3. Add ``deprecated:`` to the documentation of the module or plugin with the following sub-values: :removed_in: A ``string``, such as ``"2.10"``; the version of Ansible where the module will be replaced with a docs-only module stub. Usually current release +4. Mutually exclusive with :removed_by_date:. :remove_by_date: (Added in ansible-base 2.10). An ISO 8601 formatted date when the module will be removed. Usually 2 years from the date the module is deprecated. Mutually exclusive with :removed_in:. :why: Optional string that used to detail why this has been removed. :alternative: Inform users they should do instead, for example, ``Use M(whatmoduletouseinstead) instead.``. Changing a module or plugin name in the Ansible main repository =============================================================== You can also rename a module and keep a deprecated alias to the old name by using a symlink that starts with _. This example allows the ``stat`` module to be called with ``fileinfo``, making the following examples equivalent:: EXAMPLES = ''' ln -s stat.py _fileinfo.py ansible -m stat -a "path=/tmp" localhost ansible -m fileinfo -a "path=/tmp" localhost ''' Renaming a module or plugin in a collection, or redirecting a module or plugin to another collection ==================================================================================================== To rename a module or plugin in a collection, or to redirect a module or plugin to another collection, you need to add a ``redirect`` entry to ``plugin_routing`` in ``meta/runtime.yml``. For example, to redirect the module ``old_cloud`` to ``foo.bar.new_cloud``, add: .. code-block:: yaml plugin_routing: modules: old_cloud: redirect: foo.bar.new_cloud If you want to deprecate the old name, add a ``deprecation:`` entry (see above): .. code-block:: yaml plugin_routing: modules: old_cloud: redirect: foo.bar.new_cloud deprecation: removal_version: 2.0.0 warning_text: Use foo.bar.new_cloud instead. You need to use the Fully Qualified Collection Name (FQCN) of the new module/plugin name, even if it is located in the same collection as the redirect. By using a FQCN from another collection, you redirect the module/plugin to that collection. If you need to support Ansible 2.9, please note that Ansible 2.9 does not know about ``meta/runtime.yml``. With Ansible 2.9 you can still rename plugins and modules inside one collection by using symbolic links. Note that ansible-base 2.10, ansible-core 2.11, and newer will prefer ``meta/runtime.yml`` entries over symbolic links. Tombstoning a module or plugin in a collection ============================================== To remove a deprecated module or plugin from a collection, you need to tombstone it: 1. Remove the module or plugin file with related files like tests, documentation references, and documentation. 2. Add a tombstone entry in ``meta/runtime.yml``. For example, to tombstone the module ``old_cloud``, add: .. code-block:: yaml plugin_routing: modules: old_cloud: tombstone: removal_version: 2.0.0 warning_text: Use foo.bar.new_cloud instead. Instead of ``removal_version``, you can also use ``removal_date`` with an ISO 8601 formatted date. The date should be the date of the next major release. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.453556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/overview_architecture.rst0000644000000000000000000001664500000000000026401 0ustar00rootroot00000000000000******************** Ansible architecture ******************** Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs. Being designed for multi-tier deployments since day one, Ansible models your IT infrastructure by describing how all of your systems inter-relate, rather than just managing one system at a time. It uses no agents and no additional custom security infrastructure, so it's easy to deploy - and most importantly, it uses a very simple language (YAML, in the form of Ansible Playbooks) that allow you to describe your automation jobs in a way that approaches plain English. In this section, we'll give you a really quick overview of how Ansible works so you can see how the pieces fit together. .. contents:: :local: Modules ======= Ansible works by connecting to your nodes and pushing out scripts called "Ansible modules" to them. Most modules accept parameters that describe the desired state of the system. Ansible then executes these modules (over SSH by default), and removes them when finished. Your library of modules can reside on any machine, and there are no servers, daemons, or databases required. You can :ref:`write your own modules `, though you should first consider :ref:`whether you should `. Typically you'll work with your favorite terminal program, a text editor, and probably a version control system to keep track of changes to your content. You may write specialized modules in any language that can return JSON (Ruby, Python, bash, and so on). Module utilities ================ When multiple modules use the same code, Ansible stores those functions as module utilities to minimize duplication and maintenance. For example, the code that parses URLs is ``lib/ansible/module_utils/url.py``. You can :ref:`write your own module utilities ` as well. Module utilities may only be written in Python or in PowerShell. Plugins ======= :ref:`Plugins ` augment Ansible's core functionality. While modules execute on the target system in separate processes (usually that means on a remote system), plugins execute on the control node within the ``/usr/bin/ansible`` process. Plugins offer options and extensions for the core features of Ansible - transforming data, logging output, connecting to inventory, and more. Ansible ships with a number of handy plugins, and you can easily :ref:`write your own `. For example, you can write an :ref:`inventory plugin ` to connect to any datasource that returns JSON. Plugins must be written in Python. Inventory ========= By default, Ansible represents the machines it manages in a file (INI, YAML, and so on) that puts all of your managed machines in groups of your own choosing. To add new machines, there is no additional SSL signing server involved, so there's never any hassle deciding why a particular machine didn't get linked up due to obscure NTP or DNS issues. If there's another source of truth in your infrastructure, Ansible can also connect to that. Ansible can draw inventory, group, and variable information from sources like EC2, Rackspace, OpenStack, and more. Here's what a plain text inventory file looks like: .. code-block:: text --- [webservers] www1.example.com www2.example.com [dbservers] db0.example.com db1.example.com Once inventory hosts are listed, variables can be assigned to them in simple text files (in a subdirectory called 'group_vars/' or 'host_vars/' or directly in the inventory file. Or, as already mentioned, use a dynamic inventory to pull your inventory from data sources like EC2, Rackspace, or OpenStack. Playbooks ========= Playbooks can finely orchestrate multiple slices of your infrastructure topology, with very detailed control over how many machines to tackle at a time. This is where Ansible starts to get most interesting. Ansible's approach to orchestration is one of finely-tuned simplicity, as we believe your automation code should make perfect sense to you years down the road and there should be very little to remember about special syntax or features. Here's what a simple playbook looks like: .. code-block:: yaml --- - hosts: webservers serial: 5 # update 5 machines at a time roles: - common - webapp - hosts: content_servers roles: - common - content .. _ansible_search_path: The Ansible search path ======================= Modules, module utilities, plugins, playbooks, and roles can live in multiple locations. If you write your own code to extend Ansible's core features, you may have multiple files with similar or the same names in different locations on your Ansible control node. The search path determines which of these files Ansible will discover and use on any given playbook run. Ansible's search path grows incrementally over a run. As Ansible finds each playbook and role included in a given run, it appends any directories related to that playbook or role to the search path. Those directories remain in scope for the duration of the run, even after the playbook or role has finished executing. Ansible loads modules, module utilities, and plugins in this order: 1. Directories adjacent to a playbook specified on the command line. If you run Ansible with ``ansible-playbook /path/to/play.yml``, Ansible appends these directories if they exist: .. code-block:: bash /path/to/modules /path/to/module_utils /path/to/plugins 2. Directories adjacent to a playbook that is statically imported by a playbook specified on the command line. If ``play.yml`` includes ``- import_playbook: /path/to/subdir/play1.yml``, Ansible appends these directories if they exist: .. code-block:: bash /path/to/subdir/modules /path/to/subdir/module_utils /path/to/subdir/plugins 3. Subdirectories of a role directory referenced by a playbook. If ``play.yml`` runs ``myrole``, Ansible appends these directories if they exist: .. code-block:: bash /path/to/roles/myrole/modules /path/to/roles/myrole/module_utils /path/to/roles/myrole/plugins 4. Directories specified as default paths in ``ansible.cfg`` or by the related environment variables, including the paths for the various plugin types. See :ref:`ansible_configuration_settings` for more information. Sample ``ansible.cfg`` fields: .. code-block:: bash DEFAULT_MODULE_PATH DEFAULT_MODULE_UTILS_PATH DEFAULT_CACHE_PLUGIN_PATH DEFAULT_FILTER_PLUGIN_PATH Sample environment variables: .. code-block:: bash ANSIBLE_LIBRARY ANSIBLE_MODULE_UTILS ANSIBLE_CACHE_PLUGINS ANSIBLE_FILTER_PLUGINS 5. The standard directories that ship as part of the Ansible distribution. .. caution:: Modules, module utilities, and plugins in user-specified directories will override the standard versions. This includes some files with generic names. For example, if you have a file named ``basic.py`` in a user-specified directory, it will override the standard ``ansible.module_utils.basic``. If you have more than one module, module utility, or plugin with the same name in different user-specified directories, the order of commands at the command line and the order of includes and roles in each play will affect which one is found and used on that particular play. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.940559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/0000755000000000000000000000000000000000000023232 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.453556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/aws_guidelines.rst0000644000000000000000000010532100000000000026770 0ustar00rootroot00000000000000.. _AWS_module_development: **************************************************** Guidelines for Ansible Amazon AWS module development **************************************************** The Ansible AWS collection (on `Galaxy `_, source code `repository `_) is maintained by the Ansible AWS Working Group. For further information see the `AWS working group community page `_. If you are planning to contribute AWS modules to Ansible then getting in touch with the working group is a good way to start, especially because a similar module may already be under development. .. contents:: :local: Requirements ============ Python Compatibility -------------------- AWS content in Ansible 2.9 and 1.x collection releases supported Python 2.7 and newer. Starting with the 2.0 releases of both collections, Python 2.7 support will be ended in accordance with AWS' `end of Python 2.7 support `_. Contributions to both collections that target the 2.0 or later collection releases can be written to support Python 3.6+ syntax. SDK Version Support ------------------- Starting with the 2.0 releases of both collections, it is generally the policy to support the versions of botocore and boto3 that were released 12 months prior to the most recent major collection release, following semantic versioning (for example, 2.0.0, 3.0.0). Features and functionality that require newer versions of the SDK can be contributed provided they are noted in the module documentation: .. code-block:: yaml DOCUMENTATION = ''' --- module: ec2_vol options: throughput: description: - Volume throughput in MB/s. - This parameter is only valid for gp3 volumes. - Valid range is from 125 to 1000. - Requires at least botocore version 1.19.27. type: int version_added: 1.4.0 And handled using the ``botocore_at_least`` helper method: .. code-block:: python if module.params.get('throughput'): if not module.botocore_at_least("1.19.27"): module.fail_json(msg="botocore >= 1.19.27 is required to set the throughput for a volume") Maintaining existing modules ============================ Fixing bugs ----------- Bug fixes to code that relies on boto will still be accepted. When possible, the code should be ported to use boto3. Adding new features ------------------- Try to keep backward compatibility with relatively recent versions of boto3. That means that if you want to implement some functionality that uses a new feature of boto3, it should only fail if that feature actually needs to be run, with a message stating the missing feature and minimum required version of boto3. Use feature testing (for example, ``hasattr('boto3.module', 'shiny_new_method')``) to check whether boto3 supports a feature rather than version checking. For example, from the ``ec2`` module: .. code-block:: python if boto_supports_profile_name_arg(ec2): params['instance_profile_name'] = instance_profile_name else: if instance_profile_name is not None: module.fail_json(msg="instance_profile_name parameter requires boto version 2.5.0 or higher") Migrating to boto3 ------------------ Prior to Ansible 2.0, modules were written in either boto3 or boto. We are still porting some modules to boto3. Modules that still require boto should be ported to use boto3 rather than using both libraries (boto and boto3). We would like to remove the boto dependency from all modules. Porting code to AnsibleAWSModule --------------------------------- Some old AWS modules use the generic ``AnsibleModule`` as a base rather than the more efficient ``AnsibleAWSModule``. To port an old module to ``AnsibleAWSModule``, change: .. code-block:: python from ansible.module_utils.basic import AnsibleModule ... module = AnsibleModule(...) to: .. code-block:: python from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule ... module = AnsibleAWSModule(...) Few other changes are required. AnsibleAWSModule does not inherit methods from AnsibleModule by default, but most useful methods are included. If you do find an issue, please raise a bug report. When porting, keep in mind that AnsibleAWSModule also will add the default ec2 argument spec by default. In pre-port modules, you should see common arguments specified with: .. code-block:: python def main(): argument_spec = ec2_argument_spec() argument_spec.update(dict( state=dict(default='present', choices=['present', 'absent', 'enabled', 'disabled']), name=dict(default='default'), # ... and so on ... )) module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True,) These can be replaced with: .. code-block:: python def main(): argument_spec = dict( state=dict(default='present', choices=['present', 'absent', 'enabled', 'disabled']), name=dict(default='default'), # ... and so on ... ) module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True,) Creating new AWS modules ======================== Use boto3 and AnsibleAWSModule ------------------------------- All new AWS modules must use boto3 and ``AnsibleAWSModule``. ``AnsibleAWSModule`` greatly simplifies exception handling and library management, reducing the amount of boilerplate code. If you cannot use ``AnsibleAWSModule`` as a base, you must document the reason and request an exception to this rule. Naming your module ------------------ Base the name of the module on the part of AWS that you actually use. (A good rule of thumb is to take whatever module you use with boto as a starting point). Don't further abbreviate names - if something is a well known abbreviation of a major component of AWS (for example, VPC or ELB), that's fine, but don't create new ones independently. Unless the name of your service is quite unique, please consider using ``aws_`` as a prefix. For example ``aws_lambda``. Importing botocore and boto3 ---------------------------- The ``ansible_collections.amazon.aws.plugins.module_utils.ec2`` module and ``ansible_collections.amazon.aws.plugins.module_utils.core`` modules both automatically import boto3 and botocore. If boto3 is missing from the system then the variable ``HAS_BOTO3`` will be set to false. Normally, this means that modules don't need to import boto3 directly. There is no need to check ``HAS_BOTO3`` when using AnsibleAWSModule as the module does that check: .. code-block:: python from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule try: import botocore except ImportError: pass # handled by AnsibleAWSModule or: .. code-block:: python from ansible.module_utils.basic import AnsibleModule from ansible_collections.amazon.aws.plugins.module_utils.ec2 import HAS_BOTO3 try: import botocore except ImportError: pass # handled by imported HAS_BOTO3 def main(): if not HAS_BOTO3: module.fail_json(msg='boto3 and botocore are required for this module') Supporting Module Defaults -------------------------- The existing AWS modules support using :ref:`module_defaults ` for common authentication parameters. To do the same for your new module, add an entry for it in ``meta/runtime.yml``. These entries take the form of: .. code-block:: yaml aws_module_name: - aws Connecting to AWS ================= AnsibleAWSModule provides the ``resource`` and ``client`` helper methods for obtaining boto3 connections. These handle some of the more esoteric connection options, such as security tokens and boto profiles. If using the basic AnsibleModule then you should use ``get_aws_connection_info`` and then ``boto3_conn`` to connect to AWS as these handle the same range of connection options. These helpers also for missing profiles or a region not set when it needs to be, so you don't have to. An example of connecting to ec2 is shown below. Note that unlike boto there is no ``NoAuthHandlerFound`` exception handling like in boto. Instead, an ``AuthFailure`` exception will be thrown when you use the connection. To ensure that authorization, parameter validation and permissions errors are all caught, you should catch ``ClientError`` and ``BotoCoreError`` exceptions with every boto3 connection call. See exception handling: .. code-block:: python module.client('ec2') or for the higher level ec2 resource: .. code-block:: python module.resource('ec2') An example of the older style connection used for modules based on AnsibleModule rather than AnsibleAWSModule: .. code-block:: python region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) connection = boto3_conn(module, conn_type='client', resource='ec2', region=region, endpoint=ec2_url, **aws_connect_params) .. code-block:: python region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True) connection = boto3_conn(module, conn_type='client', resource='ec2', region=region, endpoint=ec2_url, **aws_connect_params) Common Documentation Fragments for Connection Parameters -------------------------------------------------------- There are two :ref:`common documentation fragments ` that should be included into almost all AWS modules: * ``aws`` - contains the common boto connection parameters * ``ec2`` - contains the common region parameter required for many AWS modules These fragments should be used rather than re-documenting these properties to ensure consistency and that the more esoteric connection options are documented. For example: .. code-block:: python DOCUMENTATION = ''' module: my_module # some lines omitted here requirements: [ 'botocore', 'boto3' ] extends_documentation_fragment: - amazon.aws.aws - amazon.aws.ec2 ''' Handling exceptions =================== You should wrap any boto3 or botocore call in a try block. If an exception is thrown, then there are a number of possibilities for handling it. * Catch the general ``ClientError`` or look for a specific error code with ``is_boto3_error_code``. * Use ``aws_module.fail_json_aws()`` to report the module failure in a standard way * Retry using AWSRetry * Use ``fail_json()`` to report the failure without using ``ansible_collections.amazon.aws.plugins.module_utils.core`` * Do something custom in the case where you know how to handle the exception For more information on botocore exception handling see the `botocore error documentation `_. Using is_boto3_error_code ------------------------- To use ``ansible_collections.amazon.aws.plugins.module_utils.core.is_boto3_error_code`` to catch a single AWS error code, call it in place of ``ClientError`` in your except clauses. In this case, *only* the ``InvalidGroup.NotFound`` error code will be caught here, and any other error will be raised for handling elsewhere in the program. .. code-block:: python try: info = connection.describe_security_groups(**kwargs) except is_boto3_error_code('InvalidGroup.NotFound'): pass do_something(info) # do something with the info that was successfully returned Using fail_json_aws() --------------------- In the AnsibleAWSModule there is a special method, ``module.fail_json_aws()`` for nice reporting of exceptions. Call this on your exception and it will report the error together with a traceback for use in Ansible verbose mode. You should use the AnsibleAWSModule for all new modules, unless not possible. If adding significant amounts of exception handling to existing modules, we recommend migrating the module to use AnsibleAWSModule (there are very few changes required to do this) .. code-block:: python from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule # Set up module parameters # module params code here # Connect to AWS # connection code here # Make a call to AWS name = module.params.get['name'] try: result = connection.describe_frooble(FroobleName=name) except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Couldn't obtain frooble %s" % name) Note that it should normally be acceptable to catch all normal exceptions here, however if you expect anything other than botocore exceptions you should test everything works as expected. If you need to perform an action based on the error boto3 returned, use the error code and the ``is_boto3_error_code()`` helper. .. code-block:: python # Make a call to AWS name = module.params.get['name'] try: result = connection.describe_frooble(FroobleName=name) except is_boto3_error_code('FroobleNotFound'): workaround_failure() # This is an error that we can work around except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: # pylint: disable=duplicate-except module.fail_json_aws(e, msg="Couldn't obtain frooble %s" % name) using fail_json() and avoiding ansible_collections.amazon.aws.plugins.module_utils.core --------------------------------------------------------------------------------------- Boto3 provides lots of useful information when an exception is thrown so pass this to the user along with the message. .. code-block:: python from ansible.module_utils.ec2 import HAS_BOTO3 try: import botocore except ImportError: pass # caught by imported HAS_BOTO3 # Connect to AWS # connection code here # Make a call to AWS name = module.params.get['name'] try: result = connection.describe_frooble(FroobleName=name) except botocore.exceptions.ClientError as e: module.fail_json(msg="Couldn't obtain frooble %s: %s" % (name, str(e)), exception=traceback.format_exc(), **camel_dict_to_snake_dict(e.response)) Note: we use `str(e)` rather than `e.message` as the latter doesn't work with python3 If you need to perform an action based on the error boto3 returned, use the error code. .. code-block:: python # Make a call to AWS name = module.params.get['name'] try: result = connection.describe_frooble(FroobleName=name) except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == 'FroobleNotFound': workaround_failure() # This is an error that we can work around else: module.fail_json(msg="Couldn't obtain frooble %s: %s" % (name, str(e)), exception=traceback.format_exc(), **camel_dict_to_snake_dict(e.response)) except botocore.exceptions.BotoCoreError as e: module.fail_json_aws(e, msg="Couldn't obtain frooble %s" % name) API throttling (rate limiting) and pagination ============================================= For methods that return a lot of results, boto3 often provides `paginators `_. If the method you're calling has ``NextToken`` or ``Marker`` parameters, you should probably check whether a paginator exists (the top of each boto3 service reference page has a link to Paginators, if the service has any). To use paginators, obtain a paginator object, call ``paginator.paginate`` with the appropriate arguments and then call ``build_full_result``. Any time that you are calling the AWS API a lot, you may experience API throttling, and there is an ``AWSRetry`` decorator that can be used to ensure backoff. Because exception handling could interfere with the retry working properly (as AWSRetry needs to catch throttling exceptions to work correctly), you'd need to provide a backoff function and then put exception handling around the backoff function. You can use ``exponential_backoff`` or ``jittered_backoff`` strategies - see the cloud ``module_utils`` ()/lib/ansible/module_utils/cloud.py) and `AWS Architecture blog `_ for more details. The combination of these two approaches is then: .. code-block:: python @AWSRetry.exponential_backoff(retries=5, delay=5) def describe_some_resource_with_backoff(client, **kwargs): paginator = client.get_paginator('describe_some_resource') return paginator.paginate(**kwargs).build_full_result()['SomeResource'] def describe_some_resource(client, module): filters = ansible_dict_to_boto3_filter_list(module.params['filters']) try: return describe_some_resource_with_backoff(client, Filters=filters) except botocore.exceptions.ClientError as e: module.fail_json_aws(e, msg="Could not describe some resource") Prior to Ansible 2.10 if the underlying ``describe_some_resources`` API call threw a ``ResourceNotFound`` exception, ``AWSRetry`` would take this as a cue to retry until it is not thrown (this is so that when creating a resource, we can just retry until it exists). This default was changed and it is now necessary to explicitly request this behaviour. This can be done by using the ``catch_extra_error_codes`` argument on the decorator. .. code-block:: python @AWSRetry.exponential_backoff(retries=5, delay=5, catch_extra_error_codes=['ResourceNotFound']) def describe_some_resource_retry_missing(client, **kwargs): return client.describe_some_resource(ResourceName=kwargs['name'])['Resources'] def describe_some_resource(client, module): name = module.params.get['name'] try: return describe_some_resource_with_backoff(client, name=name) except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Could not describe resource %s" % name) To make use of AWSRetry easier, it can now be wrapped around a client returned by ``AnsibleAWSModule``. any call from a client. To add retries to a client, create a client: .. code-block:: python module.client('ec2', retry_decorator=AWSRetry.jittered_backoff(retries=10)) Any calls from that client can be made to use the decorator passed at call-time using the `aws_retry` argument. By default, no retries are used. .. code-block:: python ec2 = module.client('ec2', retry_decorator=AWSRetry.jittered_backoff(retries=10)) ec2.describe_instances(InstanceIds=['i-123456789'], aws_retry=True) # equivalent with normal AWSRetry @AWSRetry.jittered_backoff(retries=10) def describe_instances(client, **kwargs): return ec2.describe_instances(**kwargs) describe_instances(module.client('ec2'), InstanceIds=['i-123456789']) The call will be retried the specified number of times, so the calling functions don't need to be wrapped in the backoff decorator. You can also use customization for ``retries``, ``delay`` and ``max_delay`` parameters used by ``AWSRetry.jittered_backoff`` API using module params. You can take a look at the `cloudformation ` module for example. To make all Amazon modules uniform, prefix the module param with ``backoff_``, so ``retries`` becomes ``backoff_retries`` and likewise with ``backoff_delay`` and ``backoff_max_delay``. Returning Values ================ When you make a call using boto3, you will probably get back some useful information that you should return in the module. As well as information related to the call itself, you will also have some response metadata. It is OK to return this to the user as well as they may find it useful. Boto3 returns all values CamelCased. Ansible follows Python standards for variable names and uses snake_case. There is a helper function in module_utils/ec2.py called `camel_dict_to_snake_dict` that allows you to easily convert the boto3 response to snake_case. You should use this helper function and avoid changing the names of values returned by Boto3. E.g. if boto3 returns a value called 'SecretAccessKey' do not change it to 'AccessKey'. .. code-block:: python # Make a call to AWS result = connection.aws_call() # Return the result to the user module.exit_json(changed=True, **camel_dict_to_snake_dict(result)) Dealing with IAM JSON policy ============================ If your module accepts IAM JSON policies then set the type to 'json' in the module spec. For example: .. code-block:: python argument_spec.update( dict( policy=dict(required=False, default=None, type='json'), ) ) Note that AWS is unlikely to return the policy in the same order that is was submitted. Therefore, use the `compare_policies` helper function which handles this variance. `compare_policies` takes two dictionaries, recursively sorts and makes them hashable for comparison and returns True if they are different. .. code-block:: python from ansible_collections.amazon.aws.plugins.module_utils.ec2 import compare_policies import json # some lines skipped here # Get the policy from AWS current_policy = json.loads(aws_object.get_policy()) user_policy = json.loads(module.params.get('policy')) # Compare the user submitted policy to the current policy ignoring order if compare_policies(user_policy, current_policy): # Update the policy aws_object.set_policy(user_policy) else: # Nothing to do pass Dealing with tags ================= AWS has a concept of resource tags. Usually the boto3 API has separate calls for tagging and untagging a resource. For example, the ec2 API has a create_tags and delete_tags call. It is common practice in Ansible AWS modules to have a `purge_tags` parameter that defaults to true. The `purge_tags` parameter means that existing tags will be deleted if they are not specified by the Ansible task. There is a helper function `compare_aws_tags` to ease dealing with tags. It can compare two dicts and return the tags to set and the tags to delete. See the Helper function section below for more detail. Helper functions ================ Along with the connection functions in Ansible ec2.py module_utils, there are some other useful functions detailed below. camel_dict_to_snake_dict ------------------------ boto3 returns results in a dict. The keys of the dict are in CamelCase format. In keeping with Ansible format, this function will convert the keys to snake_case. ``camel_dict_to_snake_dict`` takes an optional parameter called ``ignore_list`` which is a list of keys not to convert (this is usually useful for the ``tags`` dict, whose child keys should remain with case preserved) Another optional parameter is ``reversible``. By default, ``HTTPEndpoint`` is converted to ``http_endpoint``, which would then be converted by ``snake_dict_to_camel_dict`` to ``HttpEndpoint``. Passing ``reversible=True`` converts HTTPEndpoint to ``h_t_t_p_endpoint`` which converts back to ``HTTPEndpoint``. snake_dict_to_camel_dict ------------------------ `snake_dict_to_camel_dict` converts snake cased keys to camel case. By default, because it was first introduced for ECS purposes, this converts to dromedaryCase. An optional parameter called `capitalize_first`, which defaults to `False`, can be used to convert to CamelCase. ansible_dict_to_boto3_filter_list --------------------------------- Converts a an Ansible list of filters to a boto3 friendly list of dicts. This is useful for any boto3 `_facts` modules. boto_exception -------------- Pass an exception returned from boto or boto3, and this function will consistently get the message from the exception. Deprecated: use `AnsibleAWSModule`'s `fail_json_aws` instead. boto3_tag_list_to_ansible_dict ------------------------------ Converts a boto3 tag list to an Ansible dict. Boto3 returns tags as a list of dicts containing keys called 'Key' and 'Value' by default. This key names can be overridden when calling the function. For example, if you have already camel_cased your list of tags you may want to pass lowercase key names instead, in other words, 'key' and 'value'. This function converts the list in to a single dict where the dict key is the tag key and the dict value is the tag value. ansible_dict_to_boto3_tag_list ------------------------------ Opposite of above. Converts an Ansible dict to a boto3 tag list of dicts. You can again override the key names used if 'Key' and 'Value' is not suitable. get_ec2_security_group_ids_from_names ------------------------------------- Pass this function a list of security group names or combination of security group names and IDs and this function will return a list of IDs. You should also pass the VPC ID if known because security group names are not necessarily unique across VPCs. compare_policies ---------------- Pass two dicts of policies to check if there are any meaningful differences and returns true if there are. This recursively sorts the dicts and makes them hashable before comparison. This method should be used any time policies are being compared so that a change in order doesn't result in unnecessary changes. compare_aws_tags ---------------- Pass two dicts of tags and an optional purge parameter and this function will return a dict containing key pairs you need to modify and a list of tag key names that you need to remove. Purge is True by default. If purge is False then any existing tags will not be modified. This function is useful when using boto3 'add_tags' and 'remove_tags' functions. Be sure to use the other helper function `boto3_tag_list_to_ansible_dict` to get an appropriate tag dict before calling this function. Since the AWS APIs are not uniform (for example, EC2 is different from Lambda) this will work without modification for some (Lambda) and others may need modification before using these values (such as EC2, with requires the tags to unset to be in the form `[{'Key': key1}, {'Key': key2}]`). Integration Tests for AWS Modules ================================= All new AWS modules should include integration tests to ensure that any changes in AWS APIs that affect the module are detected. At a minimum this should cover the key API calls and check the documented return values are present in the module result. For general information on running the integration tests see the :ref:`Integration Tests page of the Module Development Guide `, especially the section on configuration for cloud tests. The integration tests for your module should be added in `test/integration/targets/MODULE_NAME`. You must also have a aliases file in `test/integration/targets/MODULE_NAME/aliases`. This file serves two purposes. First indicates it's in an AWS test causing the test framework to make AWS credentials available during the test run. Second putting the test in a test group causing it to be run in the continuous integration build. Tests for new modules should be added to the same group as existing AWS tests. In general just copy an existing aliases file such as the `aws_s3 tests aliases file `_. AWS Credentials for Integration Tests ------------------------------------- The testing framework handles running the test with appropriate AWS credentials, these are made available to your test in the following variables: * `aws_region` * `aws_access_key` * `aws_secret_key` * `security_token` So all invocations of AWS modules in the test should set these parameters. To avoid duplicating these for every call, it's preferable to use :ref:`module_defaults `. For example: .. code-block:: yaml - name: set connection information for aws modules and run tasks module_defaults: group/aws: aws_access_key: "{{ aws_access_key }}" aws_secret_key: "{{ aws_secret_key }}" security_token: "{{ security_token | default(omit) }}" region: "{{ aws_region }}" block: - name: Do Something ec2_instance: ... params ... - name: Do Something Else ec2_instance: ... params ... AWS Permissions for Integration Tests ------------------------------------- As explained in the :ref:`Integration Test guide ` there are defined IAM policies in `mattclay/aws-terminator `_ that contain the necessary permissions to run the AWS integration test. If your module interacts with a new service or otherwise requires new permissions, tests will fail when you submit a pull request and the `Ansibullbot `_ will tag your PR as needing revision. We do not automatically grant additional permissions to the roles used by the continuous integration builds. You will need to raise a Pull Request against `mattclay/aws-terminator `_ to add them. If your PR has test failures, check carefully to be certain the failure is only due to the missing permissions. If you've ruled out other sources of failure, add a comment with the `ready_for_review` tag and explain that it's due to missing permissions. Your pull request cannot be merged until the tests are passing. If your pull request is failing due to missing permissions, you must collect the minimum IAM permissions required to run the tests. There are two ways to figure out which IAM permissions you need for your PR to pass: * Start with the most permissive IAM policy, run the tests to collect information about which resources your tests actually use, then construct a policy based on that output. This approach only works on modules that use `AnsibleAWSModule`. * Start with the least permissive IAM policy, run the tests to discover a failure, add permissions for the resource that addresses that failure, then repeat. If your module uses `AnsibleModule` instead of `AnsibleAWSModule`, you must use this approach. To start with the most permissive IAM policy: 1) `Create an IAM policy `_ that allows all actions (set ``Action`` and ``Resource`` to ``*```). 2) Run your tests locally with this policy. On AnsibleAWSModule-based modules, the ``debug_botocore_endpoint_logs`` option is automatically set to ``yes``, so you should see a list of AWS ACTIONS after the PLAY RECAP showing all the permissions used. If your tests use a boto/AnsibleModule module, you must start with the least permissive policy (see below). 3) Modify your policy to allow only the actions your tests use. Restrict account, region, and prefix where possible. Wait a few minutes for your policy to update. 4) Run the tests again with a user or role that allows only the new policy. 5) If the tests fail, troubleshoot (see tips below), modify the policy, run the tests again, and repeat the process until the tests pass with a restrictive policy. 6) Open a pull request proposing the minimum required policy to the `CI policies `_. To start from the least permissive IAM policy: 1) Run the integration tests locally with no IAM permissions. 2) Examine the error when the tests reach a failure. a) If the error message indicates the action used in the request, add the action to your policy. b) If the error message does not indicate the action used in the request: - Usually the action is a CamelCase version of the method name - for example, for an ec2 client the method `describe_security_groups` correlates to the action `ec2:DescribeSecurityGroups`. - Refer to the documentation to identify the action. c) If the error message indicates the resource ARN used in the request, limit the action to that resource. d) If the error message does not indicate the resource ARN used: - Determine if the action can be restricted to a resource by examining the documentation. - If the action can be restricted, use the documentation to construct the ARN and add it to the policy. 3) Add the action or resource that caused the failure to `an IAM policy `_. Wait a few minutes for your policy to update. 4) Run the tests again with this policy attached to your user or role. 5) If the tests still fail at the same place with the same error you will need to troubleshoot (see tips below). If the first test passes, repeat steps 2 and 3 for the next error. Repeat the process until the tests pass with a restrictive policy. 6) Open a pull request proposing the minimum required policy to the `CI policies `_. Troubleshooting IAM policies ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - When you make changes to a policy, wait a few minutes for the policy to update before re-running the tests. - Use the `policy simulator `_ to verify that each action (limited by resource when applicable) in your policy is allowed. - If you're restricting actions to certain resources, replace resources temporarily with `*`. If the tests pass with wildcard resources, there is a problem with the resource definition in your policy. - If the initial troubleshooting above doesn't provide any more insight, AWS may be using additional undisclosed resources and actions. - Examine the AWS FullAccess policy for the service for clues. - Re-read the AWS documentation, especially the list of `Actions, Resources and Condition Keys `_ for the various AWS services. - Look at the `cloudonaut `_ documentation as a troubleshooting cross-reference. - Use a search engine. - Ask in the #ansible-aws chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). Unsupported Integration tests ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There are a limited number of reasons why it may not be practical to run integration tests for a module within CI. Where these apply you should add the keyword `unsupported` to the aliases file in `test/integration/targets/MODULE_NAME/aliases`. Some cases where tests should be marked as unsupported: 1) The tests take longer than 10 or 15 minutes to complete 2) The tests create expensive resources 3) The tests create inline policies 4) The tests require the existence of external resources 5) The tests manage Account level security policies such as the password policy or AWS Organizations. Where one of these reasons apply you should open a pull request proposing the minimum required policy to the `unsupported test policies `_. Unsupported integration tests will not be automatically run by CI. However, the necessary policies should be available so that the tests can be manually run by someone performing a PR review or writing a patch. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/openstack_guidelines.rst0000644000000000000000000000041000000000000030156 0ustar00rootroot00000000000000.. _OpenStack_module_development: OpenStack Ansible Modules ========================= Please see the `OpenStack guidelines `_, for further information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/ovirt_dev_guide.rst0000644000000000000000000002034400000000000027145 0ustar00rootroot00000000000000.. _oVirt_module_development: oVirt Ansible Modules ===================== The set of modules for interacting with oVirt/RHV are currently part of the community.general collection (on `Galaxy `_, source code `repository `_). This document serves as developer coding guidelines for creating oVirt/RHV modules. .. contents:: :local: Naming ------ - All modules should start with an ``ovirt_`` prefix. - All modules should be named after the resource it manages in singular form. - All modules that gather information should have a ``_info`` suffix. Interface --------- - Every module should return the ID of the resource it manages. - Every module should return the dictionary of the resource it manages. - Never change the name of the parameter, as we guarantee backward compatibility. Use aliases instead. - If a parameter can't achieve idempotency for any reason, please document it. Interoperability ---------------- - All modules should work against all minor versions of version 4 of the API. Version 3 of the API is not supported. Libraries --------- - All modules should use ``ovirt_full_argument_spec`` or ``ovirt_info_full_argument_spec`` to pick up the standard input (such as auth and ``fetch_nested``). - All modules should use ``extends_documentation_fragment``: ovirt to go along with ``ovirt_full_argument_spec``. - All info modules should use ``extends_documentation_fragment``: ``ovirt_info`` to go along with ``ovirt_info_full_argument_spec``. - Functions that are common to all modules should be implemented in the ``module_utils/ovirt.py`` file, so they can be reused. - Python SDK version 4 must be used. New module development ---------------------- Please read :ref:`developing_modules`, first to know what common properties, functions and features every module must have. In order to achieve idempotency of oVirt entity attributes, a helper class was created. The first thing you need to do is to extend this class and override a few methods: .. code:: python try: import ovirtsdk4.types as otypes except ImportError: pass from ansible.module_utils.ovirt import ( BaseModule, equal ) class ClustersModule(BaseModule): # The build method builds the entity we want to create. # Always be sure to build only the parameters the user specified # in their yaml file, so we don't change the values which we shouldn't # change. If you set the parameter to None, nothing will be changed. def build_entity(self): return otypes.Cluster( name=self.param('name'), comment=self.param('comment'), description=self.param('description'), ) # The update_check method checks if the update is needed to be done on # the entity. The equal method doesn't check the values which are None, # which means it doesn't check the values which user didn't set in yaml. # All other values are checked and if there is found some mismatch, # the update method is run on the entity, the entity is build by # 'build_entity' method. You don't have to care about calling the update, # it's called behind the scene by the 'BaseModule' class. def update_check(self, entity): return ( equal(self.param('comment'), entity.comment) and equal(self.param('description'), entity.description) ) The code above handle the check if the entity should be updated, so we don't update the entity if not needed and also it construct the needed entity of the SDK. .. code:: python from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.ovirt import ( check_sdk, create_connection, ovirt_full_argument_spec, ) # This module will support two states of the cluster, # either it will be present or absent. The user can # specify three parameters: name, comment and description, # The 'ovirt_full_argument_spec' function, will merge the # parameters created here with some common one like 'auth': argument_spec = ovirt_full_argument_spec( state=dict( choices=['present', 'absent'], default='present', ), name=dict(default=None, required=True), description=dict(default=None), comment=dict(default=None), ) # Create the Ansible module, please always implement the # feature called 'check_mode', for 'create', 'update' and # 'delete' operations it's implemented by default in BaseModule: module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) # Check if the user has Python SDK installed: check_sdk(module) try: auth = module.params.pop('auth') # Create the connection to the oVirt engine: connection = create_connection(auth) # Create the service which manages the entity: clusters_service = connection.system_service().clusters_service() # Create the module which will handle create, update and delete flow: clusters_module = ClustersModule( connection=connection, module=module, service=clusters_service, ) # Check the state and call the appropriate method: state = module.params['state'] if state == 'present': ret = clusters_module.create() elif state == 'absent': ret = clusters_module.remove() # The return value of the 'create' and 'remove' method is dictionary # with the 'id' of the entity we manage and the type of the entity # with filled in attributes of the entity. The 'change' status is # also returned by those methods: module.exit_json(**ret) except Exception as e: # Modules can't raises exception, it always must exit with # 'module.fail_json' in case of exception. Always use # 'exception=traceback.format_exc' for debugging purposes: module.fail_json(msg=str(e), exception=traceback.format_exc()) finally: # Logout only in case the user passed the 'token' in 'auth' # parameter: connection.close(logout=auth.get('token') is None) If your module must support action handling (for example, virtual machine start) you must ensure that you handle the states of the virtual machine correctly, and document the behavior of the module: .. code:: python if state == 'running': ret = vms_module.action( action='start', post_action=vms_module._post_start_action, action_condition=lambda vm: ( vm.status not in [ otypes.VmStatus.MIGRATING, otypes.VmStatus.POWERING_UP, otypes.VmStatus.REBOOT_IN_PROGRESS, otypes.VmStatus.WAIT_FOR_LAUNCH, otypes.VmStatus.UP, otypes.VmStatus.RESTORING_STATE, ] ), wait_condition=lambda vm: vm.status == otypes.VmStatus.UP, # Start action kwargs: use_cloud_init=use_cloud_init, use_sysprep=use_sysprep, # ... ) As you can see from the preceding example, the ``action`` method accepts the ``action_condition`` and ``wait_condition``, which are methods which accept the virtual machine object as a parameter, so you can check whether the virtual machine is in a proper state before the action. The rest of the parameters are for the ``start`` action. You may also handle pre- or post- action tasks by defining ``pre_action`` and ``post_action`` parameters. Testing ------- - Integration testing is currently done in oVirt's CI system `on Jenkins `__ and `on GitHub `__. - Please consider using these integration tests if you create a new module or add a new feature to an existing module. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/vmware_guidelines.rst0000644000000000000000000002202300000000000027474 0ustar00rootroot00000000000000.. _VMware_module_development: **************************************** Guidelines for VMware module development **************************************** The Ansible VMware collection (on `Galaxy `_, source code `repository `_) is maintained by the VMware Working Group. For more information see the `team community page `_. .. contents:: :local: Testing with govcsim ==================== Most of the existing modules are covered by functional tests. The tests are located `here `_. By default, the tests run against a vCenter API simulator called `govcsim `_. ``ansible-test`` will automatically pull a `govcsim container `_ and use it to set-up the test environment. You can trigger the test of a module manually with the ``ansible-test`` command. For example, to trigger ``vcenter_folder`` tests: .. code-block:: shell source hacking/env-setup ansible-test integration --python 3.7 vcenter_folder ``govcsim`` is handy because it is much faster than a regular test environment. However, ``govcsim`` does not support all the ESXi or vCenter features. .. note:: Do not confuse ``govcsim`` with ``vcsim``. ``vcsim`` is an older and outdated version of vCenter simulator, whereas ``govcsim`` is new and written in Go language. Testing with your own infrastructure ==================================== You can also target a regular VMware environment. This paragraph explains step by step how you can run the test-suite yourself. Requirements ------------ - 2 ESXi hosts (6.5 or 6.7) - with 2 NIC, the second ones should be available for the test - a VCSA host - a NFS server - Python dependencies: - `pyvmomi `_ - `requests `_ If you want to deploy your test environment in a hypervisor, both `VMware or Libvirt `_ work well. NFS server configuration ^^^^^^^^^^^^^^^^^^^^^^^^ Your NFS server must expose the following directory structure: .. code-block:: shell $ tree /srv/share/ /srv/share/ ├── isos │   ├── base.iso │   ├── centos.iso │   └── fedora.iso └── vms 2 directories, 3 files On a Linux system, you can expose the directory over NFS with the following export file: .. code-block:: shell $ cat /etc/exports /srv/share 192.168.122.0/255.255.255.0(rw,anonuid=1000,anongid=1000) .. note:: With this configuration all the new files will be owned by the user with the UID and GID 1000/1000. Adjust the configuration to match your user's UID/GID. The service can be enabled with: .. code-block:: shell $ sudo systemctl enable --now nfs-server Configure your installation --------------------------- Prepare a configuration file that describes your set-up. The file should be called :file:`test/integration/cloud-config-vcenter.ini` and based on :file:`test/lib/ansible_test/config/cloud-config-vcenter.ini.template`. For instance, if you have deployed your lab with `vmware-on-libvirt `_: .. code-block:: ini [DEFAULT] vcenter_username: administrator@vsphere.local vcenter_password: !234AaAa56 vcenter_hostname: vcenter.test vmware_validate_certs: false esxi1_hostname: esxi1.test esxi1_username: root esxi1_password: root esxi2_hostname: test2.test esxi2_username: root esxi2_password: root Using an HTTP proxy ------------------- Hosting test infrastructure behind an HTTP proxy is supported. You can specify the location of the proxy server with the two extra keys: .. code-block:: ini vmware_proxy_host: esxi1-gw.ws.testing.ansible.com vmware_proxy_port: 11153 In addition, you may need to adjust the variables of the following `var files `_ to match the configuration of your lab. If you use vmware-on-libvirt to prepare your lab, you do not have anything to change. Run the test-suite ------------------ Once your configuration is ready, you can trigger a run with the following command: .. code-block:: shell source hacking/env-setup VMWARE_TEST_PLATFORM=static ansible-test integration --python 3.7 vmware_host_firewall_manager ``vmware_host_firewall_manager`` is the name of the module to test. ``vmware_guest`` is much larger than any other test role and is rather slow. You can enable or disable some of its test playbooks in `main.yml `_. Unit-test ========= The VMware modules have limited unit-test coverage. You can run the test suite with the following commands: .. code-block:: shell source hacking/env-setup ansible-test units --venv --python 3.7 '.*vmware.*' Code style and best practice ============================ datacenter argument with ESXi ----------------------------- The ``datacenter`` parameter should not use ``ha-datacenter`` by default. This is because the user may not realize that Ansible silently targets the wrong data center. esxi_hostname should not be mandatory ------------------------------------- Depending upon the functionality provided by ESXi or vCenter, some modules can seamlessly work with both. In this case, ``esxi_hostname`` parameter should be optional. .. code-block:: python if self.is_vcenter(): esxi_hostname = module.params.get('esxi_hostname') if not esxi_hostname: self.module.fail_json("esxi_hostname parameter is mandatory") self.host = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_hostname)[0] else: self.host = find_obj(self.content, [vim.HostSystem], None) if self.host is None: self.module.fail_json(msg="Failed to find host system.") Example should use the fully qualified collection name (FQCN) ------------------------------------------------------------- Use FQCN for examples within module documentation. For instance, you should use ``community.vmware.vmware_guest`` instead of just ``vmware_guest``. This way, the examples do not depend on the ``collections`` directive of the playbook. Functional tests ---------------- Writing new tests ^^^^^^^^^^^^^^^^^ If you are writing a new collection of integration tests, there are a few VMware-specific things to note beyond the standard Ansible :ref:`integration testing` process. The test-suite uses a set of common, pre-defined vars located `in prepare_vmware_tests `_ role. The resources defined there are automatically created by importing that role at the start of your test: .. code-block:: yaml - import_role: name: prepare_vmware_tests vars: setup_datacenter: true This will give you a ready to use cluster, datacenter, datastores, folder, switch, dvswitch, ESXi hosts, and VMs. No need to create too much resources ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Most of the time, it's not necessary to use ``with_items`` to create multiple resources. By avoiding it, you speed up the test execution and you simplify the clean up afterwards. VM names should be predictable ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you need to create a new VM during your test, you can use ``test_vm1``, ``test_vm2`` or ``test_vm3``. This way it will be automatically clean up for you. Avoid the common boiler plate code in your test playbook ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From Ansible 2.10, the test suite uses `modules_defaults`. This module allow us to preinitialize the following default keys of the VMware modules: - hostname - username - password - validate_certs For example, the following block: .. code-block:: yaml - name: Add a VMware vSwitch community.vmware.vmware_vswitch: hostname: '{{ vcenter_hostname }}' username: '{{ vcenter_username }}' password: '{{ vcenter_password }}' validate_certs: 'no' esxi_hostname: 'esxi1' switch_name: "boby" state: present should be simplified to just: .. code-block:: yaml - name: Add a VMware vSwitch community.vmware.vmware_vswitch: esxi_hostname: 'esxi1' switch_name: "boby" state: present Typographic convention ====================== Nomenclature ------------ We try to enforce the following rules in our documentation: - VMware, not VMWare or vmware - ESXi, not esxi or ESXI - vCenter, not vcenter or VCenter We also refer to vcsim's Go implementation with ``govcsim``. This to avoid any confusion with the outdated implementation. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/platforms/vmware_rest_guidelines.rst0000644000000000000000000000627300000000000030542 0ustar00rootroot00000000000000.. _VMware_REST_module_development: ********************************************* Guidelines for VMware REST module development ********************************************* The Ansible VMware REST collection (on `Galaxy `_, source code `repository `_) is maintained by Red Hat and the community. .. contents:: :local: Contribution process ==================== The modules of the vmware_rest collection are autogenerated by another tool called `vmware_rest_code_generator `. If you would like to contribute a change, we would appreciate if you: - submit a Github Pull Request (PR) against the vmware_rest_code_generator project - but also ensure the generated modules are compliant with our quality criteria. Requirements ============ You will need: - Python 3.6 or greater - the `tox ` command vmware_rest_code_generator ========================== Your contribution should follow the coding style of `Black `. To run the code formatter, just run: .. code-block:: shell tox -e black To regenerate the vmware_rest collection, you can use the following commands: .. code-block:: shell tox -e refresh_modules -- --target-dir ~/.ansible/collections/ansible_collections/vmware/vmware_rest If you also want to update the EXAMPLE section of the modules, run: .. code-block:: shell tox -e refresh_examples -- --target-dir ~/.ansible/collections/ansible_collections/vmware/vmware_rest Testing with ansible-test ========================= All the modules are covered by a functional test. The tests are located in the :file:`tests/integration/targets/`. To run the tests, you will need a vcenter instance and an ESXi. black code formatter ^^^^^^^^^^^^^^^^^^^^ We follow the coding style of `Black `. You can run the code formatter with the following command. .. code-block:: shell tox -e black sanity tests ^^^^^^^^^^^^ Here we use Python 3.8, the minimal version is 3.6. .. code-block:: shell tox -e black ansible-test sanity --debug --requirements --local --skip-test future-import-boilerplate --skip-test metaclass-boilerplate --python 3.8 -vvv integration tests ^^^^^^^^^^^^^^^^^ These tests should be run against your test environment. ..warning:: The test suite will delete all the existing DC from your test environment. First, prepare a configuration file, we call it :file:`/tmp/inventory-vmware_rest` in this example: .. code-block:: ini [vmware_rest] localhost ansible_connection=local ansible_python_interpreter=python [vmware_rest:vars] vcenter_hostname=vcenter.test vcenter_username=administrator@vsphere.local vcenter_password=kLRy|FXwZSHXW0w?Q:sO esxi1_hostname=esxi1.test esxi1_username=zuul esxi1_password=f6QYNi65k05kv8m56 To run the tests, use the following command. You may want to adjust the Python version. .. code-block:: shell ansible-test network-integration --diff --no-temp-workdir --python 3.8 --inventory /tmp/inventory-vmware_rest zuul/ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.940559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/shared_snippets/0000755000000000000000000000000000000000000024416 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/shared_snippets/licensing.txt0000644000000000000000000000147300000000000027137 0ustar00rootroot00000000000000.. note:: **LICENSING REQUIREMENTS** Ansible enforces the following licensing requirements: * Utilities (files in ``lib/ansible/module_utils/``) may have one of two licenses: * A file in ``module_utils`` used **only** for a specific vendor's hardware, provider, or service may be licensed under GPLv3+. Adding a new file under ``module_utils`` with GPLv3+ needs to be approved by the core team. * All other ``module_utils`` must be licensed under BSD, so GPL-licensed third-party and Galaxy modules can use them. * If there's doubt about the appropriate license for a file in ``module_utils``, the Ansible Core Team will decide during an Ansible Core Community Meeting. * All other files shipped with Ansible, including all modules, must be licensed under the GPL license (GPLv3 or later). ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.941559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/0000755000000000000000000000000000000000000023540 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/basic_rules.rst0000644000000000000000000000433500000000000026572 0ustar00rootroot00000000000000.. _styleguide_basic: Basic rules =========== .. contents:: :local: Use standard American English ----------------------------- Ansible uses Standard American English. Watch for common words that are spelled differently in American English (color vs colour, organize vs organise, and so on). Write for a global audience --------------------------- Everything you say should be understandable by people of different backgrounds and cultures. Avoid idioms and regionalism and maintain a neutral tone that cannot be misinterpreted. Avoid attempts at humor. Follow naming conventions ------------------------- Always follow naming conventions and trademarks. .. good place to link to an Ansible terminology page Use clear sentence structure ---------------------------- Clear sentence structure means: - Start with the important information first. - Avoid padding/adding extra words that make the sentence harder to understand. - Keep it short - Longer sentences are harder to understand. Some examples of improving sentences: Bad: The unwise walking about upon the area near the cliff edge may result in a dangerous fall and therefore it is recommended that one remains a safe distance to maintain personal safety. Better: Danger! Stay away from the cliff. Bad: Furthermore, large volumes of water are also required for the process of extraction. Better: Extraction also requires large volumes of water. Avoid verbosity --------------- Write short, succinct sentences. Avoid terms like: - "...as has been said before," - "..each and every," - "...point in time," - "...in order to," Highlight menu items and commands --------------------------------- When documenting menus or commands, it helps to **bold** what is important. For menu procedures, bold the menu names, button names, and so on to help the user find them on the GUI: 1. On the **File** menu, click **Open**. 2. Type a name in the **User Name** field. 3. In the **Open** dialog box, click **Save**. 4. On the toolbar, click the **Open File** icon. For code or command snippets, use the RST `code-block directive `_:: .. code-block:: bash ssh my_vyos_user@vyos.example.net show config ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.454556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/grammar_punctuation.rst0000644000000000000000000001733500000000000030362 0ustar00rootroot00000000000000 Grammar and Punctuation ======================= Common Styles and Usage, and Common Mistakes ---------------------------------------------------- Ansible ^^^^^^^ * Write "Ansible." Not "Ansible, Inc." or "AnsibleWorks The only exceptions to this rule are when we're writing legal or financial statements. * Never use the logotype by itself in body text. Always keep the same font you are using the rest of the sentence. * A company is singular in the US. In other words, Ansible is an "it," not a "they." Capitalization ^^^^^^^^^^^^^^ If it's not a real product, service, or department at Ansible, don't capitalize it. Not even if it seems important. Capitalize only the first letter of the first word in headlines. Colon ^^^^^ A colon is generally used before a list or series: - The Triangle Area consists of three cities: Raleigh, Durham, and Chapel Hill. But not if the list is a complement or object of an element in the sentence: - Before going on vacation, be sure to (1) set the alarm, (2) cancel the newspaper, and (3) ask a neighbor to collect your mail. Use a colon after "as follows" and "the following" if the related list comes immediately after: wedge The steps for changing directories are as follows: 1. Open a terminal. 2. Type cd... Use a colon to introduce a bullet list (or dash, or icon/symbol of your choice): In the Properties dialog box, you'll find the following entries: - Connection name - Count - Cost per item Commas ^^^^^^ Use serial commas, the comma before the "and" in a series of three or more items: - "Item 1, item 2, and item 3." It's easier to read that way and helps avoid confusion. The primary exception to this you will see is in PR, where it is traditional not to use serial commas because it is often the style of journalists. Commas are always important, considering the vast difference in meanings of the following two statements. - Let's eat, Grandma - Let's eat Grandma. Correct punctuation could save Grandma's life. If that does not convince you, maybe this will: .. image:: images/commas-matter.jpg Contractions ^^^^^^^^^^^^ Do not use contractions in Ansible documents. Em dashes ^^^^^^^^^ When possible, use em-dashes with no space on either side. When full em-dashes aren't available, use double-dashes with no spaces on either side--like this. A pair of em dashes can be used in place of commas to enhance readability. Note, however, that dashes are always more emphatic than commas. A pair of em dashes can replace a pair of parentheses. Dashes are considered less formal than parentheses; they are also more intrusive. If you want to draw attention to the parenthetical content, use dashes. If you want to include the parenthetical content more subtly, use parentheses. .. note:: When dashes are used in place of parentheses, surrounding punctuation should be omitted. Compare the following examples. :: Upon discovering the errors (all 124 of them), the publisher immediately recalled the books. Upon discovering the errors—all 124 of them—the publisher immediately recalled the books. When used in place of parentheses at the end of a sentence, only a single dash is used. :: After three weeks on set, the cast was fed up with his direction (or, rather, lack of direction). After three weeks on set, the cast was fed up with his direction—or, rather, lack of direction. Exclamation points (!) ^^^^^^^^^^^^^^^^^^^^^^ Do not use them at the end of sentences. An exclamation point can be used when referring to a command, such as the bang (!) command. Gender References ^^^^^^^^^^^^^^^^^ Do not use gender-specific pronouns in documentation. It is far less awkward to read a sentence that uses "they" and "their" rather than "he/she" and "his/hers." It is fine to use "you" when giving instructions and "the user," "new users," and so on. in more general explanations. Never use "one" in place of "you" when writing technical documentation. Using "one" is far too formal. Never use "we" when writing. "We" aren't doing anything on the user side. Ansible's products are doing the work as requested by the user. Hyphen ^^^^^^ The hyphen's primary function is the formation of certain compound terms. Do not use a hyphen unless it serves a purpose. If a compound adjective cannot be misread or, as with many psychological terms, its meaning is established, a hyphen is not necessary. Use hyphens to avoid ambiguity or confusion: :: a little-used car a little used-car cross complaint cross-complaint high-school girl high schoolgirl fine-tooth comb (most people do not comb their teeth) third-world war third world war .. image:: images/hyphen-funny.jpg In professionally printed material (particularly books, magazines, and newspapers), the hyphen is used to divide words between the end of one line and the beginning of the next. This allows for an evenly aligned right margin without highly variable (and distracting) word spacing. Lists ^^^^^ Keep the structure of bulleted lists equivalent and consistent. If one bullet is a verb phrase, they should all be verb phrases. If one is a complete sentence, they should all be complete sentences, and so on. Capitalize the first word of each bullet. Unless it is obvious that it is just a list of items, such as a list of items like: * computer * monitor * keyboard * mouse When the bulleted list appears within the context of other copy, (unless it's a straight list like the previous example) add periods, even if the bullets are sentence fragments. Part of the reason behind this is that each bullet is said to complete the original sentence. In some cases where the bullets are appearing independently, such as in a poster or a homepage promotion, they do not need periods. When giving instructional steps, use numbered lists instead of bulleted lists. Months and States ^^^^^^^^^^^^^^^^^ Abbreviate months and states according to AP. Months are only abbreviated if they are used in conjunction with a day. Example: "The President visited in January 1999." or "The President visited Jan. 12." Months: Jan., Feb., March, April, May, June, July, Aug., Sept., Nov., Dec. States: Ala., Ariz., Ark., Calif., Colo., Conn., Del., Fla., Ga., Ill., Ind., Kan., Ky., La., Md., Mass., Mich., Minn., Miss., Mo., Mont., Neb., Nev., NH, NJ, NM, NY, NC, ND, Okla., Ore., Pa., RI, SC, SD, Tenn., Vt., Va., Wash., W.Va., Wis., Wyo. Numbers ^^^^^^^ Numbers between one and nine are written out. 10 and above are numerals. The exception to this is writing "4 million" or "4 GB." It's also acceptable to use numerals in tables and charts. Phone Numbers ^^^^^^^^^^^^^ Phone number style: 1 (919) 555-0123 x002 and 1 888-GOTTEXT Quotations (Using Quotation Marks and Writing Quotes) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "Place the punctuation inside the quotes," the editor said. Except in rare instances, use only "said" or "says" because anything else just gets in the way of the quote itself, and also tends to editorialize. Place the name first right after the quote: "I like to write first-person because I like to become the character I'm writing," Wally Lamb said. Not: "I like to write first-person because I like to become the character I'm writing," said Wally Lamb. Semicolon ^^^^^^^^^ Use a semicolon to separate items in a series if the items contain commas: - Everyday I have coffee, toast, and fruit for breakfast; a salad for lunch; and a peanut butter sandwich, cookies, ice cream, and chocolate cake for dinner. Use a semicolon before a conjunctive adverb (however, therefore, otherwise, namely, for example, and so on): - I think; therefore, I am. Spacing after sentences ^^^^^^^^^^^^^^^^^^^^^^^ Use only a single space after a sentence. Time ^^^^ * Time of day is written as "4 p.m." ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.941559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/images/0000755000000000000000000000000000000000000025005 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4555562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/images/commas-matter-2.jpg0000644000000000000000000015023300000000000030423 0ustar00rootroot00000000000000ÿØÿàJFIFÿá@ExifMM*‡i X ÿÛC   !%/(!#,#)8),12555 ':>93=/453ÿÛC  3""33333333333333333333333333333333333333333333333333ÿÀX"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷Š(¢³((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢©j:¾¤¬m¨^Cl%%SÌln>‚˜h¨áž+ˆ„°È²!èÊr*J@w¢Š(çÒŠ(¢«jöúe„×·EÄ1X¢<äòEC§ëšœ’Çœ²D&…£89ÁŽå@®¯býQ@Š( Š( Š( Š( Š+>û\Ò´Ù<»Ëø!“þy–Ëß#š`hQPÚÝÛÞÀ&µž9¢=6TÔ€(¢Š(¢Š(¬[_iךËiq ‘p¯"eàeBÉ÷€cÁïÓÒ¶©ƒMnQE (¢€ (¤PB€Çq“Œf€Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  wú¥–˜Š×“¬{³µpY›pI©,ob¿µ[ˆ–EF$*nAäW#ãeÙ®hr’pÂx±œs´7ô­ßL‡C·É bÞ-üU´¹«§jJ¥úر®jéšD·p$o" ²å€äŽ{Õ][¹Ô¦\ZEØÌZ)K‚9®søTZÍí¾§àû»›bÆ6Pz ‡A¬Ï ÊãÄIü³kyÐîZi{·.”¨J}U†\øËP‡Rž³€´7²Þk󃞬0GçêkÄ$ZR˜î&·&â%2DÀ0ÀîǵrOâZFûX¶ÒãÄagsó1#=«OÄ`zÚ+Ë©þÆÖƒ1üâ&˜J»IÛÀ?ZºñpŠ|¶Óï8í5­Mq%梓Þ\N#hÕVVi*X‘€:ä~U‹¡/„½<¹˜Å cb6ÕnLjm (.!µåço¶î‘Æ}8«W–ó§„ôï;ÎóÑ|I’ʬ_h9ä`ÅsP›’WCË+9ÊÉôÕõ5¼+.ý.T8Ìw ¼{€ßÖ·kÏlu™ôá{ik ¦(ë;/ÉÚA>…¸‰ã®Æ­_I¨­•ìßhITùr˜ÕX0ÁÆg·jÞQz³ÒÄaêsN¥´»:ª(¬o«?…5@„†û;‡ØxçíPq¾4žâ?ìØb–HÒY$Þcr„á8ä{ÔÞ –YtËÁ$“H±Þ:!’FrUàIÆs\<`Žtò¼±#’‚H$ò@=2¥F.b‰dK-FTši²ˆ—,1+¹UÈïé^¤ð‰P²jéÞÿ#™U÷ïcÑ|]χeN?y4)ϼ«Tt’SÅÌ¡¾Y,•÷Yþjòø»KþÎŽîV–'w1ý˜¦éw£jç8Ž0G­S§4¯b9—svІÒîÞúÕ.m¥YaeY{ÿŸJÍÔüQ£é´—{eP¥’8žB»ŽvÐqŸzÌm¤lQPZ^[ßÛ%ŬÉ4-Ñädu_nÕCZñ ž†Ð-ÂM#Ê¶Â»Š¢ãsžG#§<ô¦4›ÑÔSQÖHÖD`ÈÀ2‘ЃÞHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( gƶ^}…Ðm­kxŒN:«eÿLJåXvÚͽå¬[Åÿ[¼%±´œwÈÇNãšíµ[í-*êÌ>Æš2ªøû­Øþx®½¹œYAg;^–A$l&ïŒc¿{u­akYøIRtåN«²ÜX湋Om5deYCdïåôÆTsZ>b¹M~KÙ/"kcrnUdIž»IÎ1žø®§%©ïVÅÆSÓV^§KHT0ÃG¡¥¢²<ÖñÁOÓW€¡Drj¿‡/£Ò¾Ã}qÊÖqÊ6œ̲0 ŸRp>¦µ|S§K¥#[ÂÓÍm(!R|+)ž3†${ŒW™y{r¶öÚeé3Íd¸C oýöÝòçè þuÙJ©JÎV³ü fÜetÝoXm_Â3=¸ƒÉ¿·‰€}àþò2yÀþö? 5_>fµ²¶œÁ%íÊÁæ©‘pKÎFàªqšµ©èwv¾ƒJ²·7²IrrêB7ïf8ê OLTV–ڽηa+éZEm?™$³M ¥HIäW›Z USŠÐã¯FS­Õ×S2hîavÒæçšÏSµŽ9ÜÒ!’6RØã8$uǽcøŽàI¥¨M&¿âFfW«’¼ávgŠéï4ýZ_+ý€µƒÞA/Úw Húmÿ{½I¬xvî ‰§°„]ZÌÍ#[‚£1ËmÏ ¤’qÔ}xÖŒTó=<º1£9©híå{–žðþ—¦GPñMi6ÝÆß³àÙglç×Ö½ £†âˆb4Pª3œ0+ËàðœÒÜÖíç1ÅiÜ`áeI–2G«+tü3ý+@ÐeÒ"šîä$Ú„«¨ß*(ä"“êy'¹ö»§ZŒ)ËÙ»¹~„Ü—7By ©Ø}œ©9ùÙz}œ›¶x^û¦k a±½Ò®¢Ò£U¥Ì‘ªùbSX{º`ƒÒ´—EÖo®®öÞEãþþdºÞÉãb£·êOz×Õ´G˜Çs¥ù]Æ«Ù2#’1ü'Œv8ã§C^éÊRríøœõ°ó«7Q+5·»“y:g‰t¸e–-¹É¶T¡åYH¨ä\-­…‰ñÓ¦·F°¬Ð‹r 1PGpnœ×iáý;Q°Ÿo6 Lë"­³3váÌ\×Ö©ÅáI£ñ#êFö#lnÚÄ!;÷•#³Œsé]Pzjz¸yÚ/›F×â'ˆl¬ô L¶6±[[µÔrL±&Õ8ËÐ{WÖ–ë$…4鿵$Ô–Szåû8^Wwæ»~ŸZöY#Ibh¤ExÜdaÀõW2þÓ^\}¢ñm;Ú‰~R?»»¶ûfº(U„§Þú󄛺3ƒÁiàJidE·û`eq÷TïŒÏûÙ5bÕ-ßÅÖÊ‘¹kk†Eun>G¾ BkVÑmõOÜèÀ›ky¡òT yc¶ÑÓŒU#‘i—‘^M©_ê1FÈtÉ…ÝŒ@ÉÇR.u̧Aʬ&º°Ñ×ÃÖœ°0vo2HUW(À%#Ã'ó®& {‚xïo¥‚Ú+,)<³4œç,9'%HQÔ±ë^¨@#dzäeðKo o~‘[¡&-Öþd‘zIÇ+X´G(B2‹v¿cؾí1Ü ¹·,¨;ÔÇ“^™\‡ƒf±¾Î¦nmcœLâ2ÒñÎ ç{‘Ç+¬¢m7¡xÊÑ­5(ö<çǶò]jÓ@¼™,c1‚xm²1aퟔ~"ºEñ®’ëní~lÒ,fnÁ¢Ü@Ëg€ ž ŸlÕÝkB¶Ö¡O1Úˆ²b¸Œ Éž£‚§¸5‘gàé§Þ¤‘Ž‚(IõÉ'…t)Q$¦Úkñ<ö¦¥uÔ±®’uû%eùÖR„÷%“#òó¬CgïXnΦ×EÖà3¼¢Ù œínF1œãë]–§¦E©Û„wx¥FßÑýèÛÔv#±‚+6 ñœ‹«¸Dc¼ïùço៭y³„¹›]NZÔ*:ŽQIÝ[^†CÆ?á ñ¼|ÅnÒ<@tSµd }'Û5Ï‹9.µé—M‹ö²i™®¶yhÀèIn¾€gµz§¦øF/ôí>$F’ÚTyÁfSÔõ9'“\Ï…ôÍEõËMRkía[9må[• ͸¡'ªšê§îÂDZ„Ÿ±ÃÊ7÷•¬sð ŠNúÃc¢§Ûn|ÌòpªHèp3ÎZÖ‘ä>ñ `X¥‚U÷Bô×]â{Y®¼-©[ZBÒÌöì±Å2ÇÐv¬;Bº›Ãš½½Ì?g—Q  ²~ï=³šµ>¥ÖÄ:´¤Ÿue÷Üç4Ÿ¾«¨_ÇeqöCçM* c,ÌPAþ'ìÖ40Ì÷·š¤q/olú&ly!$*ÁÚ'ž…G¨¯CðåªÝÏ{c-œ³7eo»œ©#½^ÖôHïôN8­¡½¼‡ËiŠcwq¸’:úã5×S(Õ|®ë§‘æF’qW2|=¨µ¦¬Îãy²‘ä×÷a±XVBâÖêûj4tašß´Ìcß$Ì~÷ @°1Üc¥ðþ}m§ê–ú±µôãm«³6œ–ŸÂ¡ƒÂ×Ï#%åÕªÆFÇšÖ2³L£dŸ»žøÏ¶+ÎÅ.z—TîeZ”ç_Oé•t‹¸m5ë{«W¬u_ÝHS¡˜QÿIïòúVßˆÏ‡Ò yµñDsåT“žø’1Ôtõ¦ZøKO¶’<4Í2 -íÃìŽÀ¸ÎLçÒ¬k:êïo(»šÖh7x‚œ«c †uPsSJ.*ÍZnœT&ÿá8dŠh#–G‰Ô22‚;íOªöqiÖYß.»ŽI¬Uš…QHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(¦œt4QE (¢€ QHw`ª£%˜àM†h®"Ã*Ktt`Àþ"€EŸäù©æã;7 ØõÇZ’ŠŠâæ HL×G C«ÈÁT~&¤VWEt`Êà ƒE-Q@„0FAíKÞ€ (ª:¦³¦è$úì6‘;lW•° ô¦ìQH¤2†R# Žô´€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£­袊(¢Š(¢Š(¢Š(¢Š¯u}ibŠ÷wP[«4?0,Q@ ŒƒzE (¢€ (¢€ (¤f¥˜…©'€ŠdÑ@Q@Q@Q@Q@Q@UMGP‹L³73Wr UÀ,Ìp<~tÀ·Efèš±ÖlÞãì²[•¦Ç`Ç€xúô¬8üQ}'ŒãÒŒ0ÅhgšÈ%ÎÈ÷‡Ýœ}1øÑf>Wv­±×Q\E÷ÄDƒW[M1®(t‘ç æ/<ªààÀâ 㓜ê* ^Ôu\ÁæD4øŒ¤(ƒ¨}‰óg©!N‚áz÷SÔ. »:ùfXð€mÄÒ!uáW¯½D“‹³2æWZ™~2¾¹²×·Á3«EièªÌ0DÇ#€r89®øõ¯Õnµ‹Ë¸ Õ-çþמÛʆi€Wyl¬s÷O¼Wwá½v÷Q‡S¹Ô¼˜íí˜*²Bñ…Ëçw'~µMhŽ™Å(E¯ëS¥¢¼ÛRñæ¬oÑ-"ŽÖÝÀ*òÂzbËø…Î3Žk¯Ò5ï¶x|ê7ð7‡rΧ%w/B~òž=óŠs¥($äŽu4ö#ñ„)>‚¨è®¦îÛ(Ã!¿|¼ÐjgƒâŠ :òbŽ(ã½”*F»@û§ úÖ¹â)µXŸIŠ8RæVù"ù˜«.wHÕa·%yãó®ƒÃl¿hÕc¤èøôÌcü+I9éØçUc*ÉEôš7«•Š 6Åß-¬qï*3´‰rôÊŠênæk{)æEÜÑÆÎ Éžƒ“^e¨jòêñÞN/öÈ–mmäùƒyQ´99É“ãŠÚ*ç¡B<ÒkÉþGaãmÇÃû<èŒÈ ä¿á¹¾Òœ fÒ.?à W7¬¦¢Þ°[ñ/Úù|Á)Âeð8Î1\õ®©ª[AèjJVû#I°E Œíá@ÁÀçƒ{×D(Ê¥4£ÝþHä””&îzÍÈë'¿M6Îm2g¹´K“Ár¡ŠŽp2IïSøcXÔ5ns"´%ä;î—zü­œžœŒW'2½‡ícÏÉÔé袱üJ—§ùÞg˜¦Anûd1çæÚ}z{ã8ª4JîÆÅs^7Œ ±ÌwQŒû6SÿfÃgPMi"°¸ÔQÊä—œþò^@¢rÄ Œ•ÝØ“]Œ¤Õæ‹OŠtš=:â7+n£1\R ·'nN;ŠÚ’j¤}Gˆ§ìÓMßÐëôy…Æe&íÅ LŸp?¨5v¼ßÁ²^\jö&Òm[û9D¬ë>ñ  cïÞž”ë­wV]föÄKwöS)ÚbÁ•ÜÈÈÆz(!rOP;ŠÊ²önÍýÆ.ªŒnÎÇÄZÃhZ$÷ënfhð6’B®N71£©À&¦Ñu 5MÒúkI-$š0Í ‚§ñçÆ{\}®­¨YiÚ¬¶²Íµ˜X™/˜ÐÎΠª÷«g’G+Ž3ZúV­zž¾¿šcuuo,áL  ílvIj®i Êö±ÔQ\ -ñ–žâÆÐÛyï  îe8+œ¤óÜU½SÅwï5ŸöT_¹ž8Ø„<Œìåv`º´©Ï?J©Ó”äC©®vtW)/‹Ý4ël‡Q‘Ò(c$„rÙù½@[#®WÁ¬m#Ç7êñÿh.bpŒck¯8*9qÔ¨ÏzÊWWF°ÃinD§´›Üêh¬jwÚe½›Y˜ÐMp!y^=û2¤—#©ÏÒ±,üky¨XB¶±ÂnP˜î®–%©U\óÈ眜ž”¢ÞÆð£9ü*çs\—‹ä1j:aØ®¬“)ŠÃøpzŒŠ»/‰Ö?Z߬(×7*vB_ pĶÊ=~ƒ½s¦ººãé®ðùR'šèc&HäB ¡ëÛ8­ðÔ¥*‘vÒç5Y$šêvÚÿiЬäÎw·'ÕI_éZ5ƒàÌÿÂ/l´³üŒõ½XÍZM#HꂊÊÖ5I¬•`³Š9nÝK#ˆ¹ÆæÇ8Ï¥sþñ±¯A ÁÚÜ#6Ña$ ¬ˆìHu==y³º½ˆu"¥ËԛŗÅ­iq%ÄËÊA¨'ÍŒgާ ŠëÏSõ¯)ÔõÍOV•.î`Ó!6- Œ–]Ì&Qód|£÷}yä×oá]r}~ÒîâSjËþR5¶â§åRFOÞÁ8Èâ´iÙ5)Ê0Œš7ë#Ä7ÛZZ¼De®£Fd9Žõ“wã˜ãÖE•®›%Ä ÉtfD^»–nrp85¡¯È·]•Å»+Æ×P:·÷”œd~u3„£UŽZŽð—+.éW"Kg*¢)Iè9?§išÎ¬Ç+é×qÜ$Mµ™3ŒõzƒØŽ giI•©]Ê¥¢Ši€$"‘¨<4–¶ºm2ÊæÕ‹¢Ê·½€Û”PC´àÇ4£¬n]7ÍMKÐ騮%> ­ÑžÞ×Maz„2¤²|¾Q$ Ç*FÑÎ}²kWÃúýÆ£9·½Š”‚Ñ´àãAç#Ôzbµtj(óÛAsÆö:(¢²,(¢Š(¢Š(¢Š`‡âõ?ðŽK&2!–[ÙVE$ýÉ­Êl±G4O¨7R¬¬24vw<ÎöῳÛNšu‚Úy ’2HÎWhPG¿9ö[NÚþ’±¼²Ï$³žc“Í»®N1èµÛ[øSG·Yì¾j¼^NÙÜÈ?î€ztõã­ZÓôM7Jfk;DŽFi ,äznbN*Ü‘ÛSM©rÂÍõ<– Øê-u¨Cipû#­u³¨ÃQÃƒŽ˜ôÁ¯SðÕÅÅÞm=Ê*»Û²/-Jn;^À®+MàŠIGŠ6tû¬Ê _¡íOª«QO[Yž|cÊr:€6þ,_1VâêÙ£wS±ˆ 7LŒt¬ÏË zøŽi|´–Ö!#+|Þ_šÁñï´šôBªNvŒúⲊåw.î¤å·üU8º¶‚ÏÆðØYÅqëi#‚5À å则Ϩ«þ4Ñe¸Ô¢¹†Ò{ˆ¯`k[‘ *W”n9íÅwFsŸ\RÖ¨á%%Ð*?h’}SÁ4º]¬$SD E,㛲Íõ,~¸ÏzÇø}4òë7‘½¼±-µ¨ŠC"ã2¤'½z|òædr-<ŽÆ0\iþ Óü@‘o‚‚CÓiV<Ø2»OžµkKÔ¯•FvòtOùâG‘éE‰›+æ 7ð@½9”0Ã~¼ÒóêkXVpi®ŽæsŠ›}.qK¢\IáÇÈb²X䌨Þ3µ•‚·‚>éõöŵ+÷´„>¨]'ˆ°x£Ábp£?(#·Zíh®wnK§ïs'`ï\§Šu{í3S²û5äVÑyNÌ'@c•·( O²x9®®™$Q̆9cIõWPAü R5‹JIµs̯/n|Sw,^EµÅÔ°ùÁnÆHâ\ä¼’cŽp}°1’k¶Ö´éî|)=œr4—)”n¥Ý0GâJþµ¯1@›"‰#_§Õ9v*¤ÔÒIY#Êl5ëûvÒll/ìÍ{º$‰Ã4Šä&3…Ë’r0ÏJÙC¡i’¢Ìº³1Øù¥|q×Ãð®Ö=>Ê–¹ŠÒÝ'lî•bPÇ=yÆiÍiló žÞ”cÁoÏ­ÜjÉ4­Ôä•d®öw0üj/êOò¦|¶cÀÉÞœŸÀVnˆË'†µà…e§b›[ æ4'§¾k²tI£¢²žªÃ þRêÅWN¹†Æ(¡’QŸ¸äãØu¥},usûœžw<ù´íOUÖ.VÆÎ颎éÎg”%¬r¯€rÇžÃ×ëZZ†›•$¬²ÞíSÚS3|ËÈ w1#ž+sÂË.uY$ŠX‘¯[ËY#(pׯ=ê–½,)â›8¤•ä[pŠÇˆ˜ð=kLUG7ʶ¿OSŽp÷›_š3¯ü?Œ·—$2£ h~s Ž ´À¾ãL ã';@Ô.,n,c°±²wic[© ŽK‰§RpϸýÀ3œsŽkÓÏZ` AYÇEc¶P§ìí¡Ãxõ­Öâžâ8D–“ .áG, ò~¢­iš—â/ è7!M–‘«y /š›@hÛŽP‘úpy5ÕËS%Š91Óz†þu À«u‚kþ&<º¶aëZÖŸ{e°\ÛÜG(’'m§*8#$G¥r·¸†+©'³Š9uök}2×vÁÀÈ.z³pl×w¦Xê‘,WöÜ¢Ê$\í>£Ò«éþÒt¹ÌövIÄmóY™Ü@ÌIéXNZ_CÔeQÚú¿·!Ò£´°¾3Ïz"‰$ha.¬äœýyúÖåsV~½ÿ„–}Fúh!–™,ç]Ã(QÀ9<äWKZ4uÉGKé\=€Çƒ) |Ûµ8ìçÀüësÅ7Z® iBQ+M‡xí~ѵv±å2 ÀÈéXÞÒu¨h^Åq*¹ÍÐi¤r2ÅGݯN+ZvQ“o¥ŒevÒ.xȬp¥Ä’Õ-åPÍýæ)´êHàw­Ý`ŸìmCþ½åÿÐM[tW]®¡‡£ ŠUÔ«TŒyV YÜj6“}Ï%¶¶nžúÞvòvB墚>瘧Óî†;žõèþÔ'Ôô”žá0á™<À»D¡N7ØèqÆ*x4m.ÔH-ôëH„©åÈ#…Wzÿt㨨õißKÐn$²²yÚHŠ@è=»éW'ÌtÖ¯í]Ú,E¨ØÏ7“å´’óò$Ê[޼VkÏ|¢¬æ×Xh<¸má1Û³ÛùO3‘‡“¨¹'Ò½ œâ£+'sž-µvsÞ0pºm¢ÊBÚ5ä_hcÑPÃ'°Ü&¼ü#%ëlb–Ô-¯¯£všRÞaqÆFP*õ$ã>¾è²##¨ea‚¬2úTe·û?Ùüˆ¼ùå°mõéÓ­c(]™T£ÎÛo¥Ž3T¿–ëÀ¶Œ2—‘¤³¿Ê#‘ædölžœÖ [C‘¬’1–]dÀ…dýß“ƒò€ÜdÏ\÷¯UxÒD)"«©ê¬2áUîtÛ Ûakugo5¾r"’0W>¸éZ©Xí¥ZT⢻Üó+˜Öoi®Ôykæ…Î$.îÛ€#>ÕÔ­ÒÝ繞WÌf 17À!8Ü 6kÓç·Ó-tÃoq ¤6Úb‘UbäçfÙ¢VV9?O¢ÜkYj–÷‘´‰c¿·Þ<¦b~RS‘¹ämàw¬Ï @4½RÆ=:æå­îXä‚bádrV`÷ùAÀ³Ó‘]>¡á}+S¿kÛ˜®<öUVh®å‹!sŽ€ïV4ÝMÒ7›U‰¤ûîX»·¦Y‰'ó¨i¶e(IÉ3Œñ–¦éúÕ…Êið ŸsLb·]Ó2ɰ8fÚ ÇSƒŠÐµñ%Σ}â ‹ éV–j-€nd!‰pHÝ>Zê5-2ËW³kKûtž ínÄt ŽAˆäTv5–`öPÆÏ™óL®]¤ÈÁÜÇ“ÇJÒèèrN)uG–¼‚ÞãµÒåšú9œ¬±ªæàÄq)êyÇEÁ5ÒiZ€»ðÜ6w[êPàŒ#¾å?©_ø tzG…´Ýãí0ùó\Ø’ÜJ\¢ÿuGAéœgÞª^øj ->ìM>&»žXË®îÎNzd bº+VŒÓŠ]nsªm ¡Â&ðÖ£Î$žéO~¤Š©ðü–ÓîdÆãþ™-mèztÖ[[݈Œ²K,Ž#%—æbp ž=ªm/FÓôX$‡O¶G#ùŒ¡˜å±ŽäöŠåŽ‘±­&ãK‘ù~iº†£â¯ì»¸ËD¯qæÅZAü€sænô{Â%Ó^´ŠbÌñ¥Ä,ÍÉ,„.O¹?tÖ¾†ÛÅë‚îfw.V ªK… sÔýÑßË  }µ¾/’i-:Ùä{fºÞ"ñkºKæeìÝÓó'›Å0j²ØÉÈH‘=Ç•û•v [9þ%ç·YwžÓ¯¯MÔÑÈ$p¢Q…D¡zo®?—©\zšG›[…QL ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤*¥·mÆ3Žih Š( Š( Š( Š( Š( Š( Š( Š( Š( ³µ=B{Y¢´²µ7“#ȨÒlUEÀ,NvPæ´kQ•¡ñÖŒÌ‡ÉšÎæ ý·æ7 õ!Xþš=øñF³kpèDZu±‘âp.]™rû*ƒþÕjÁbº6°÷ͶËP“÷ÐîùRsÒE·t u8>µWÁþÿ„bD=ÇŸ%åãÌ1µ?ŸÎŸm©[ø‹Vút¾e†™>ngQò<ë÷cSѰNXŽ„ëR›rÐ}ŽŠ(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÂ×ügáÿ °UÔ£†fXKÈGû«“@´W•_|uÑ ¸ i£êwPƒÌ‡d’““úWsái>/Óî•30FÙ,2®Ù"oF_ëÐÐ+›”QE (¢€ (¢€ (¢€ *µþ¡e¥ÚµÕýܰ/Y&p‹ùšåeø³àHeòÛÄvŽQ‡æ)ŠçgERÓ5};Z´zeõ½å¹ãÌ‚@àCŽŸCWi (¢Š(¢Š(¢Š(¢Š(¢Š(¢¸¿|GÓ|É Ñ}¦ä€Æ“iÁÎ1Áçƒí@¥ç:wÆŸ ]Â’]-ÕŠ¹#÷Ê1ÔñÛÞ½Úê ÛX®m¦I •C¤ˆr¬B KEPEPE×tä`ˆ ³18¦€Ï¥SÕmLö%7Úb"X õÞ¹ ~<¡5à~6øãu¨]Ïcáõû>š„¯Ú "IÏcþÊwÇSÇN•Èèü]¢Ü­Ü:½ÕÒ•1ù7変¿>ã¨ÁªH“é[ÛÉ|AàÉî´7uÕ«y!ò$WÙ³‘ìi|ª[j¾³–ÞÝm^%ò'µ`•xd>ùüúך|)ø†ºž½>ŸåEq©ÈÓ$0‚gUg p7ö· ï5}6ûDÖÄZ±æeŠœ¨ÇЪ?ï¡Ç\VkÝveo©×ÑUôûû]WO†úÊQ-´ë¹ }Aˆ<yb¬UQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËø÷Åiá Mx›ZúlÃgþ)ê}”r~•ó$ÓÜ\Í$×SÉ<ò¹y$’]Rkؾ<Ú0²Ñu#:ˆ¢’X $òK(mÀwÆÂÖ¥ðçÂ÷ÃÚmæµòj@²\GÑ “È2ÈéI¥¸¬Ùâ3J‘/Îê¤ôÜqZ¾ñ^¡á-@jÚl’WÎG%ÌjOÜ|Ø#¡¯£´_xgÃïæiÚ=²OŒäl‡þÙ?•yÆý M;^°Õmí£qˆ#P Ê¤œz‚?#S&ì†âÒ¹ïÖWpߨÛÞÛ8x.#YcaÝXdTõ•á£l<7§Åhcò¡"ÛD* øV­XQ@Q@p>!Ãà]D ²ê×@‹hÈÈOWoaØw?w•ã?ô)õoxVHíŒöñ.@\…C2Œ·lsŠhLá-¾øãÇútšþ¥©(–䇊+×`e\}àÂN+)þ xÝghƪÿËEºiúd×ÓÌñ¬¾^ôW움8íÅ$²ÇO,²$q Ë;œ¤žÕ¶‘|ˆù¦-+Æ|C¥Þù°§Ûa˺yŽOÀƒíÔWÕý@ã­yGÄ­2ø$É¢Ímyucp“Ååʤ¡—>¤vîEz…œÿi²†m»K %HÁSŽA÷ŠÒ2æZ’Õ™8ïES¢Š(¢Š(¢Š(¢Š(Åž$µð—†îõ›±¹aFƒ¬ŽxUéšùVûR»Õµ[½[R3ÜßÎå²Ë’û£o°À =ëÚþ5¬—qiv¼[ ’áp2@UF~ŠÌqï\Ãß OÚ‹'½Ym"»’3)ßßu 9S=FáÚ†ì";…^"Öôhï#¹³‚ù2X])A¯Ì2àsúzÖV—ãÿøäéBH–+wek9cÜŠÁŽàÁùϧj÷½+İjšíÅ•œÚeÒÄHvµº,ñ¨'”¨xàœf¼Çãn™¦I§IªiÖ€]Áv©yr±ŒÌ0î›8õæ¡7{ öêë¯øsOÕ•6 ¸]£ '¨iÖ‚¡ŽèQÅ¢Æ#Ç<•ÉýI­Ú±Q@¸Ÿ‹z´š?ÃmRHIY.Ú«ÛÎÿß9®Ú¼£ö‚½ŽÚZù—¡”{*1?ÌSBg–ü3ø}gâ»ÔºÕoZ1.Ŷ…É)÷`0‹Û'ŸOZöïx#ÃÚ—†ÓÃvÒÚéR•"͹»eO/Ï~ óT¾ø_QÒ4í;YmvúâÖ}>7þÊOõaÝA-ÉÇ~Ø©~!6·m¦É­[^Ù¦–ÃíV…¸fÝŸàã†9#57¼­pè|ùàÛ+×ñ­º[öëGy£ò›Þ3Ð|ø××}ä:”7‘Å2FõSȯ–~ÞŧøÄê×1ïKK9æ {¶Ü(üY±ø×Òþ†[ iñË @Æ-ÞTk…L’pn¹üh©°âG’è~ óí\­ž«6Ùíÿ…'*H•} mÃç®sÐ×?u$z—‹l¬óýœŸo˜/÷˜Oæíø è(ŽÁÔ(¢Š`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyŸÆ(¥¸Ó,ciÚŒÁ±•+ ø?.ÖoJÕÕ¼C¯Ûkzd0Á§ÁapŠóM*K,!U@ç œu=«¢×ôXõÍ.KVeG*á×rüÊUX×µG ]I6”M…»´?e¸U'Dd{†Ì*'¦¬šñÔN”çI™áº?qÖ)SÛ8Î9®KWÓµm_áÌ>&*5 $Œü±*sæ( »O8Øõë£:½²jW2G©Ýß*Œ  VnUý c4ž#´XЭ ¸3Û ®-ÛË}ÛÁHî§¥gk"ž¡àm6=+ÆÒyQÝÜ*c¡ !\ûæºZ‚ÊÎ >Ê;e+ *98÷'©÷©ërBŠ( Š( °u`bÔ¤¸T›0»˜ñ&OóþU½YºÞ•«§ËDuü’Ib8úŒÁãéJJêÁ±‹ÿþi«Í®4nÕû‰%bzž§*åãø­áûéô»›•D.ð™$?»t>‡ßõ­]w@·ñî… ­Æ£g¹P[°VgØó~üˇà÷ƒ"… m3ÍB>ûJþg×vì~•Š·Ú/^‡Gi¦èº>™Ò­-m­XÈhG Žsõ®Jÿ=ËÈOýök³Ñ4ý*8<7¦4ï’!ki¥2¥ºÞNO#p\Ï=pMw1E,Q"¤h0ª£ ¸.¤Ë°ú(¢´QEQEQEQErÿuñáß \\ù’G$Ò%²4Xó¹Á+ž7’3@Ž⟎´Ë9ôXm¥½»O2•N }Ã9 ©zŸ`k?àö§/ü%7ºt×mösh.Œ,À(Ú…±ß€+‚¸•¤lLÿ2¨^À¨ŽJî¾ Ã¦ßêzÏÛ%¹¹„E dsäw7¶I”ÐÏZ´Ñ´OÞÝ^ZF–r^’dYHY[©m„à·¸æ¼sÇÚŽá›Ûù&¹kš“4Vò bVi7`ËÆ8÷Ûx‚ÇO?eÑñù¤>ìÜý©]À÷O†z¨Õþéoß,‹i}8þX®²¼‡àF§š~©¥–+:H³”=#iÇýò+תÄQE ùëãî¹Þ+±ÒY ‘ØÚ³²çÌ—§äƽçUÕm4M.}FöMB¹>¬z¹'S_%ø¦ÃÄ:·Ž‚ê–S[êš¼Áã†Eû¡Û ¨øU!3×´{ñ­øCÓÿá'»ðÝí”~_šFÕ¹Œ 7ápx9Årßuç½ð­•Ýüú9%£½¼™oæ_”Ÿùf>fà`׸Ãi¦øoÃÁ8E±Óm†YÓpUEå±ëÔñë_,øóÅ7>0ñ3ê!Z,ùv0‘ŒF8=ϧNÕÕÜok¿ ôfÖüWž¨ÍK¦Î‰NHú–ÚÿZ¾¥o.(À'j(ÆO@îkËþxWû'Âï­ÜÇ‹­K2G̰ƒÇær*í¼G$×fÐíÇï5)3.ÜÞ7Ôä(÷oj™>iXŠã<%]%þ½,aU˜IÇ"ÝسîF[þ]5"cB¢€ª `8VEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\G‰o“Lñm‰Ó.!‡P¹„›Å|´m!b2¨å~c´H9î*ߎüe„ô -ÄSj·?%¬.~QÎ è£?‰À¯&Ðæ‘¼P“ßÞË$º˜’ÒöæCó7˜¸SìÂ`Û1\õáâ[È`ŸÃÊÈX Æ’F[Ùƒý£Šç®õe¼PÚŒ–qÜÛi 4¶ˆwy‡Ì¿0O˜ž€6ÑÉ&ªjÿo¼! }—ZÓf:°¢·ºÊ˜.Y@òz°Ç^;Õ ëvv^–ᮚ[˜mÞöc.7LÄix8öàqQYݽóJÖôÍnØO¦^Ãs¿vÜ’9G õ«õóIy`!½´¸š ¸NöhX©pypqש â½'¿›|>!*þ`>^£áqÛÌ^Ü£j¤î+ž§E `À2TŒ‚ZZc (¢€ †îîÞÂÒ[«¹’x—sÈçET×5Ëé’jŒÞ\)Àe¤cÑTw&¼?Yñ^«ãm] Âa²€o·¶W!#lñ#·ñ7qN拫ظӔ¢ä¶_Õ½N²çÅjZÿÛ§Òm$ÂGs ýše ©§ªñžøè¤°ñÑÍ ëÖÑÆÃ÷wØ©”ÿÛŸ|Wê·º¥ÌK´Û¨òäøKo¯5ÑZøËS‹CšÛM'ìê›Då –×=vâ sŽÙg¥D£ÌôÜ|’ŒÞÌßÔux¼/{m‘»{ ^Kä‘ÉiÝÔ;¹ùÀóëŠî´èÞ%€Ë¥Þ¤¤}èÊëõùŽ+À´­NY.œÇG¦[ÂX™9oPÄ÷f9?ýz_ìK´Ù}er`¼rexœ¹'8r¤tôª[{¥*qRq¨ìÿ­ÿ­;JQ^£üO×t©ÒÓT_5”cʹãÌìËýNG®+×4/éþ"³óìe;×X$ùdˆú2öúô=©¦™)JŸÅ÷ôf­QAEPEP\Š|=uñÆâoͦ7Ù¤PÏ•x =9ïŽ=OWâ=Dé>¿½ó#„ˆÀ%ÏÊ£þú"¬é¶ƒOÓ-,†1)@Æp¥)r µÏ¶ø­MfËyw¦GpŠº´Œç8 cqž­z€¼<%$÷·W)=üè"ýÐÛqŽŠ=yç&»ŠN+'&ʱÁ|SÑu-_D³þÍY¡™³o†ýè(xt#ã5â76šœÏ þŸ=´ªnŽb(a‘…Ï#¯#Œñ_Uô™¬hV½n`Ôl œB¼‘‚ÉþëuóN2èÄÑó6•y.“â«»Fh®ƒ‡#i ¸> «E}^y$׌øá–­eãUÔõ¸­¾Ãe¹í¶JÉ'!r;c$óß•쵩!EP1M¡Ñ[k—8=Ö¼¿Ãºxñ/Ž_¼¶*ºHK`ìkóŸlúµv>)×eÒ­¡µ²h£vJÄÓÈ8šW?ÝQÛ©$ ó…øá?i'JÑu)µ[Ç»ón®"‹x%ˆÞÙ8Rp0O'&‡{YöaIŠX£n]Üàúþµæ"ðŸ©xµ£fXÒæ8ÌÊŠZØÇ÷”q„.ùvÞ¸ýWãÆ»<Ò.•§ÙÙÀIÚf̲côQùÕÐ~'ŸZËáÝZíõ+í–±ÜFÁ#‘†üç£Î~÷…µiž± j1Þè0^¬QÚÚH µN›`FO¦Tg_ÃjÚ„—>!™H7¸KE#î[);9sõ••â >ëTº‡AK…·µ˜ùQEœ¬G˜ìOp>@wö®Î8ã†4Š$T*¨8œWPc¨¢Š  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡­j‘èº5Þ¥,o*[Æ_ËN­è=¾½ºÕú󿋺ƒÁ¡éºzt½½g¡HÔ¾?0´ ži}q­^ÜjWî²Ïuó6QSøQÙþ<žõ—ï:{%rñ¢’±“ÑI(µÿD¸kLáÖDt'‘ÿ'ò"»M-¸-Ë—êÈO\ú~µ-üFMOWÐôÞÍC6mü¨‰Å»tú–*Ğǎ€Ò´†Ößàþˆ +Þj/‰3ó${‰‘séµ@ÇûUÊøŸR‘ôK]5Yš×íMt„®ò»Húñœ{š‹ÃBâk ‘¦@®Ë ƒ÷€ÞÃÜá*ѽ.¼²É< iI/÷ õoåPj‘"hó")ËB:Œð?X²aö,*©‰Œm·¡#©_皃QmòÙ[ùm8-þêüÇù ˨ÿà-^MkÂsNÊnaÍ´ÅzO—?ˆÁük¥5å߯ˆ›YÓð¦;”͸Ô*õÐh)“KÉ4®8Ô³±èäš}Cv¡ìçRp mÎ3Ž >~ñˆçñïˆÂdiЖ[€£JãÔúz`xÕëkhí!òã眳¬}Oùã¥gŦ­¶Œ‹nTÜÆË+ eÀïè1‘CZVó¥Í´SÇ÷%@ëô#4ãj]J®iEh–ËõõdÐc¶µŸa·›‡n ‚NG|’kb ‹Ëê¨ß¡ÒŒïЫ.–M±ÈÚI–i£ÇR==‰‘íZ'“EÄUÔ-ín­ wi¾<Œzƒœ ƶþØI§øÆî)¦óq`Âþ'O1rýÜαäG{¨xReÉ'«t{r*ÜðŒ†/iD±\Dï€ßû%&–å)ÉEÆú½ET€QEQEƒâwIF•¦°Üou†?Ù2±ü£Çã[ŒÁU˜ä㓊ÀÕ`Yeé“]©`ŠYˆ I'5a&rÞñGöÞ·«ÚˆR8aÖ¼nsl•êì}Ï¥uuåVÛÁñ*McNºsJ"Œ‰2’‰d+;¯ª™Jcœd1õZß ‚Š(¤Í¦2üDšÙãQvП»äƒÉõÇJó†ÀQØ úsâ‡Ã¸µHܼΘÈçn âõúPm¢,I\ç¶jNtàzSÝ>xã[ñêhÿé?fŒÌ×Íþ°B w%±ÉäŒõ5í5⳺ž$˜»| Ÿl1¯o©z QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^SñvrÚ¦…k´ac¸›9è~UþY¯V¯ø­“ã ??utæ#žæ_þµa3€¿‰' ŠÃèNüOçÂ× n2(9\ŸÊ«_‘öm¹ûÒ"ÿãâ¯Éô¬ÀËÔtØd±œ+4h˜T ŒŽrcI¦YO›•Š=¹+;›<òݺóŠ»xЧÿpÓáˆÂ…W“æc—ê=>‚‹è!ÈŠˆ¨ŠT`0UeY5ˆÉÆaгü”ÕÊ¥ Ÿñ3ºC·¸õ?ZÎÇáåçØ¼f¥Â¥í¼¶Ìruü~Sù׸×ÍQ^7Q±Ô‰ YÝE;ýÕa»ô&¾”XR žAÅ\v-VÔeòt»¹¹·þ:jÍdx¢S†¯¶œ3Çå)¬BÿZ`xû-ˆnž_#ðªzÛ¡Y)ãlA.*ìÅDr ñ´à{b©hlE¶aЃûèՈЪ­"Ũ3;O³îfc€0ÝIüjȪÖÑÝÜ,’X ^¿yô  A‚# úŠ*hÖÚ8’‘®ÐXäÔÔXÈMÿë€ÿÐièò›è“á¾D?GVOýš³#9ÔçéòÅüIcS<¢Ýíî:y70IùH´îØÅ­÷Ö’  ¢Š(¢Š(œ»Ä].BÇhÒî€\ñŸ2.*‹%N³¶(]ê°ìeRE56§”ñ6„êÌn"b= {¿,­TñDBëRðÕ©vRÚªÍò÷Ç#…Cøl_Pm5O°Ù´p¤®ŠÒÁÉÉíV?ˆôùã±T¹Ödk o!VŠxÔà.þ¤g§~Ù«í{=׎RÊ"ÚÆÅ¤¸“±’VPˆ?'ñº@=@ëžE&í+# ÂúM½–•mvmÝ/î-ã72JKHHQòäòvQÀ©<[Éá=P4bUdbpBàqÛŠÚïQÍ wIÊ)£©î¤`Ê¢úÜvÐånô{[¯[à xìåÓ‚,1¨þ\¡Âã~\g××^k}ÞéÁ–ÿ÷)Éêð†>ù‰•¾¢»8¤I¢Ibpñº†F^ŒÈ?•m¡#¨¢Š`òÏÅo[xwÇWieiwþ¨:Fç—OÔìÕõ1eÜáT'Ð ð‹‰ÞѵY‘VëP–in¡[k®>Š} 4ì&xÝQT#ÜgŒ}“ÄœÞ|gœmjöºøóÂ*¾ðO‰#ÕìòðŸ’êß8ÇÜ}GP}kë7RµÕôËmFÆQ-­ÌbXœwSýi1¢ÕQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ø›?›ãÃsäiñ.= ;“ü…{MxoÄ2ÄMCÚÖÙF4žÂg¨òá-žgŒûè…]=jëf{(¶’pIÐ[ŸÒ­ýjï¸Óî9ÇÈjÏ~•èÍ…Àÿ¦müªoz@-YµÓãDÕuÀ’ÂîcÜÇ"#ó U«¡ðÜk/†ük_LY—'‚SõÅTwš™Xž6+©SôÕ$Õ¼ ¥Ï1ÌñFm¥>­(Oã€ðñó '¸½[áÛü3¨AŒy”£ðeVþ´â W3ãÙ„>ê~k¨ß`ÿJ髸‘&Ý Æ>ò_Æ?%vþ•hç3¶òsŒ#*§ º˜#øó5nëÎrx6'ò5[Dñ"±>°«~|Õ½UféöxÏI?ôVñUgâúÏ“ÿ-8ÿ€ÐœRiÔù  –Ì?´¯Gñb?ËmA¯hWŽ6¦ìú`ƒŸÒ¦¶`uKõî<£ÿŽšMb!6‹}èÖî1ÿ4ïÑJ³Ãªr²(qøŒÓë;Ã÷-yáÍ.éÎZkHœŸrƒ5£R0¢Š) (¢ŠçõW ãCæU.¦ÚÞÂý7~µˆ.¡°×tBêO.ÖÒ+™dcÐ «“õÆ:µwmŸéwlI cs„´G?¬Ãþ£áÝ.gT‚îíÖbÇÆª—?íp*Ä Û\ µ+ÒßlÕ&k× Õ¿Õ§ü01ëšèé` Û(¬Û»)!ÜTà ÒÑHf,ÐOGrB›mF³Lÿ=,‡ñRàý7Âáì »Ñdfc¦Í²&cËBÃt%à4ï·“£-Ø($¶º·•Î>jƒŸÁˆüjkqø²ÿhÄeóêÊõ­`Èfµ¾õÌê~+¸‚öæÓIÑ.õY-HYÚ?•€<úUˆ½âk‰ Ð.#ƒ™îŠZÄ3Îé'è ?…yŸÆÏ jÚ¥¾úm·™cbŒ…U¹ J…~‹Œôë¥Õ|Q=œöš‡‰tè´6ÖF–!-Ò¼·í*ЍQ¸’IÀâŸ=çˆ|`<6ÆML8'P¼ÿ\çþ™ÄOvàúT·¨Ï°ø{®ßÞ­ û µÁÆcººXÛ‘‘…<·û¹èkI~”bÆÞרûi%OqÓµ{=ßÂÝóLš“su¨ÉPº”É,oÔ2º¼õtâ¼?Å? 5 Ü•Hc»¶+˜åP˜º?ÚÇðžOlÓR¿Q4M?‚4Hƒ½ßÄmÍÆq¼¹üŽk økñÇšŠh^½Î“4˜mF±» ć¡éë^L&@P¤Œ`ÐÃ*îA«°·h®;áv¯&±ðûL’f•¥·Anï!Éb wú3]!…QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^ãÿù(š¯ýq¶ÿÐ {¥x‡Äxö|A»oïÙ[·þ†?¥)l&q÷7ÖCÑ¿ñßþ½Zª²ŸøšZ®F|¹N?ïšµY çüxÜ×&þF¥t}Ev3g8Î?vÜþŸùFà¹ÁÔúúÔѯÞÏÄP¶ ›C¸À=È+ÿÅV]6kŸ²Ø^mBÒM ·R;o!OèJqv`.0 z Wª|!‹o‡õI3þ³RÒ4凩¯YøMÏ…oÿ ŒßÉ(Žàw•Á|J—çÑ­÷pešR¿î ÿãÕÞךüE7‰tø³ÌVR>=7H£ÿe5¢rY6W Ÿ)øÿ€š¯£cûOÇO³Gÿ Šµ9ÞBÙÛ±³ž1T|>CxzÃ#É} ~•B4ª­Ùo>ß`ñ)\úì8«U^oøûµú¿oöh¾‹%Ôšj}±$YT•Ì™ÜÃÔç¿_Ê´(£4™ â[…è^ÕäkFXÄÑQñ‚µŸÅos¬…y.‰o9$/“ЫŸQÁv5ÌdÂÆ »à"¯V'€+èï‹úŸ‡õ \èOr·ZË•{;[U2Ê%Œ…ÎÑÔö5“ðŸámÆ˜ë®øŽÙRu!ììÜ|Ñ~w÷çÛ¯ZÒ-ÛQ3Ñ<áöðǃ´í.LyéùˆÿžË~]? èh4P0¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWüQM¾4…ñþ³NLûâFÖ½’¼¿âf‰©ê^$ÒŸL±7R=¬±±ÞPS–cÐr}MT&ys.íb2G)nH?VÁþUl‘Ï#Š“ÄÕtû7’ûM·‘Š0G¶g+œí0×V]¥ž=¢È–¨†G9åPÕ·— ý¡vl“›xˆk–†=£þ§Ú–?³¤0Nø¶#0È݇÷ õ½ªôQG~\H¨£ QPY]ý±ÄNˆ Xcxõ¢7öw˜öŽrj–§{– ¶ìÌûЩØûÀõÆ;V O ¨."–îKkhv™ÞU1†û¥R{dž½¨[Œ±Ã:õÿ…0ü³ç"æêy@Æ?Œ¯ã÷kÉomot™Z=RÎK9#ÉùùG’Q‡ 1øûW¶øØÚxBˆã&Í$8õo›óùª¢¬G^Qã×Ç¡Cgn—G§ï^½^¼oÆÒÅлCŸùÀr{aßüjÐ3.ãþ=¥ÿq¿•Pð÷Ëáû$çåo#К¿67FÈR¤;qXú÷i¡Y²‰“a£”?1ìƨFÙ`3Î1Uç»´lý×aù©¦ Öäµâ‚:ù`ÿ#QOz¦Xì÷{crIû;të@=¨ü* Ô£ÆLcÛìì¥!¼¸aû½>àúyŒˆ?™  ÝA >+Óg$bdh‡®zÖöqÍs÷]ϯéw¬1¬lp±¹byNü« <ƒÅz'ÃY ð›CŸõ×ãÐo,?ô*ì+‡øc þËÕáÏÌš‹1ÍdWqRÆ‚Š(¤0¢Š(ÅÅÿáÔÖ8ÖF’FèÛˆÖ§×m|7©8b¢+9NìàŒFyÍRñ¬‹…nÙó°lg gå ~”¾,tþÅK à_ÜÃf?Ýw¿ñÐÕÝ9íæs?†¢˜¿Ú­^[†a–t6ë úcëÜQñ?˶Ólï÷ºKäÅ·9rEÇñ$ã¾Úë-´[{]nëSWróôCÑ ¨EúcÞ²dq®xö+u­t$ó¥çƒu"ƒö¡'ê∿zè{íÊ¿‹®ÓD±YE‘e“S XxaÈûïÀÇeÉ5é*Pª¨ =+›ðŒÉ=ω]Ak2¡=ŽÕAÅt¸Í:Ós–¦“¨ê>iN±ý£ªøŸRÓ¬JGXÇc$¬¬Jù…™˜cŒªpzä}+³µ·ŽÎÎ X³åÃÆ™ë…ʰü(¯!Öï¤\½Rm§ýˆñÿè󮆩+#®-×ÅwÐ_ßÝ[Ú[Ì׺tQ?–$¾;‡$©ÈÀÁPÙèÕßÕ_J‡W°’ÖVxÉËš3‡‰ˆ#rŸ\=Á ÐÕÀó}94'}!¶mN쉮îRiÛ,¤€ÌNÑ̃9=¹¬½^<¯ìéàŽÖõ) žÖK¶•Œr©òP0.œƒž8­kÍVîÃÅZv‘­Dº5¬òA å¨Ûéb¿*7ü²$ àœç ôäQ¦x¢ßÃVÐE`Ì{És"D¬UTüÌÛ”e˜ãýê‹43‹ÿ„vÁ!kOy‡ âʞb G€p@Œq‘ïZ^ÑïâSøAõ{íCÃÚMŠÈÑKpBK•]¸@Û—zWA5¥¾³6« …«ë\ZÇt·—r ‰(60~ê Çbk+GÓ øuâ«=~(7x[ ó7–6,ûJ¡'ªd¦GašoAX°±ñ}–‹£ÚÛÙy0}¶èÁRcÉTN:e¹>¸®ÀòkðšCÄþ)×:«Ü¥„'9!^qìYšºúk` (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^1´Žx4Ùd–eD¾†6 *»¨*þ£ÅtµŸ®XË©h÷Ð2,çkÄ_ u`˓ۑÖߌ¬ôK]2ždÒf2­oâ¶Ü!f*Ø+.às×>¸¯“OmúçJyà¸6Ì ÏîIU¾`ÃÓ¯"½îAcâm2ëN¿¶uÜ6\ÚJpñœäŽÙ 8ô¯ ¾ÓmtwV±³; †ñÑ¸Ž¤u ’3׎k(íf9.w úÕ[L‹{D+…ûL=ò]³úŠ´HbæÙa°Ñ$)›K„ã¹ÁaŸÓKf"¯ô«þ´´¿ñm…½ÿ”l–9ç¹}ß)#$çÓ’¼öÅRÇ4ý5#þÛÛr7Aq ·Xc'ÌŠ±@í´QéÍ%¸¡®h¶öÚÛá¥^J‘}†öbÑ‚ÿq£”ò¿‰î0Ew¶¶ÐY[%½´)1© *a\¶º¢×Ãf•1 q4¶vÀ Ï*ñî`=:ûŠëSõªƒm  ¯5ñþ‹y'‰íõk{)çˆØ›w0G½ƒ 7 ÏF?•zUbëPyÚ–”ä|±I+†CyxÖ©»+…®yriÅÕ=ôK´þòhÂ(ã¯\ÿZÅÐ#èv`vúšöMFSi¥ÜÌ‘ù†8˜„õâ¼–Â/#O¶ŒõX×ùf•9¹nV'l`Õ{»¸làietEûÍŒûz°FzÔšVc«x«I²¿‹Íî7Ï ÊŽÀlŒþ¡$Êñ«#VSÁ´æ#T‘ù$+»j™nôqV Cm¦Iªx›N¶ŽåàóQ¹T€ž¼t®®ãÀ÷qFÆ×QŠg(·y`ûnRqùV>„Ò'‰-LN¨æ €†Bá3ŸÈôm'{év 6LeËrI*?cRR‹Ð¸¤Ì߇v––zœ×P,K=ÊùEeU’íG¯+³¬ .ÏZ®s´È§ê$lÖÅY!EP0¢Š(Œñà—S“JðÜ µIen~H‘w1ãéVÛAÔ5{LŸUš'±Ò—Ì#c™î: \c«ÐsÉ&«@N¥ñbö\f=#NH´’ÇñÚvzØ"ŠÚ…ìZns}>|›hšW© 3ŠÌð†Ÿqc¡$·ª¡}#^Ýã´’s·þ6¯ü¡ñ5=CNðúž.$ûUÐëþƒìÎQ~›«¤x{špV@ÎoÂ1ªA¬:¦Å—Wºlg<‡Á?˜5Ðî óäÖ„:œ°¸º¹Ÿéºg8­©Áh$ Åʳ—ÄRØÇðkð„ŒIwîORÅØ“øšÝ¬?•ÿ„NÃaÊ€à}7µnVÄQ@Êš–™c¬XËc¨ÚÅum(ÃÇ*äóë^OâêÞ‰ÿ°õ 'Ñï¥í§É)óX²íXƒ /28õ¯c¯=øÄ/„­$Ó™’ýu+o³¸ a˽xÎHäÓBff—ã»;½gKÒ¬bK]emMƒÁx¾ZFÃa Èá€Q‚Ou§2 OO¤¯©Ïo4–úŒW2n¶ûÊ‚ã‘YBÜzs^kªÙxçÄ’ô,Lrø `×™ù‰O%É­Ô®½}›Œ’í=À]¤÷Pžæ¹_Ù¥Ÿ†.{t·¼O&8!òÂÈ`$”°å˜¨(àôÚ½HÍ ôb±ô•ã¿~&&¥¿†5‰XÞ )gu#çÏQü ¾OP=zûPQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+ñ)#ðÔº¤†ÞþÑãx®#8t×pÏpFx9¼IF»A'$±,rI'$“Ü’I¯nøŒìžÔ ãïD?9TW‰÷©€ôÏ ­ïÚ¼;à›ŒãÌÒŒxúloêk¾ãzí?ʺ°ÿ„#áû0m)ˆìÀæ+GÂð]Oãlf‚ ó’xŒŠ¿ºlü ŽÞõ[Þçâ&þíÁÿÈF¦;ë6>òîã¾Õ/äÔo; Š0GBxã¶sƒÏ^kzŠ+KXaYúºÊ-Rx€&:ã–LÀ{àä}=ëBŠ¸Þ«woo¢Þ\I4b!lìpäm8ÇÖ¼¶ZÞ"A¢ð{p+Ö5½+MµÐ5Yá°¶IE¬Í¹bçaç5äñ.Øc_EQúR§P“¸úÐð’y¿4€~ê ¤üDdýÖq uâµü–ñõ %-gúíl,n.K#2mXŽƒêO‹÷¤ZÑúZ5ƽ¬_> £¥œtTPÏù»ûæ¶IÚ7zsUtËF±Ó ÎeUÝ+z»±üÉ«2gË|uÚqùVä^ Éðf’ÇøàÈÇROõ­¹$X£y?@+ÁÛ¿á Ñ·’[ì‘ç?Jµ®ÈbÐoØ›ìînHÀþuƒÜ®…_)_ iÙyÿ7c[• Â-ü;¦Ä½Ö<ýJ‚hÖ좊) +„ø´ÊÕÝ×)ñ$oÉ<4ñZÜÁq$hpJ,ƒ~o”ži¡3Φµ^n™ìnL¢Îý†pŸòñ9PNàßtã\0ç9‚[Û¸õ­ •–5ûUº[À®XÓˆãWÿ–ˆ¨Ku9éšÙZ:]Mc¾Ñ|ÄŽK%—ËpI†Ú5?6‰GC¾”‘X®¥][êïy£ÚêpË22†LÈÞd õ ®}9Ï"¥n§Œ4ˆtßÚ¸DMVu[ø¶ žb}Óôl€G­q:ñþÙðµõõÄÏ:X³iÛׯ‘Ö9=YÉTs὿^ѡ״k6veYGÊêyVtþuâÚïˆôÈlÔ³[Á#éSÛMk~Ú›¢\F9Ç2sØ0¡ïq£ð?Ãy¼_¡iú¾—t-. ÔZ+Öf#ä:ÈŸí.qŽüzWÓ É&¶< v¼e§·^ëªÿ…xÍzçÅVÛá8OÍǯÞ?Ò¼Ž¢Bÿq±×iÇå]Wˆ°~xLrS$sÌ'úŠå ƒé]N¼Yþ x2àñåÍŸ¡W_è)Çf/[ž™`ø…¢nëLñèLDÿ쵇Vt{²x»Ã·'¢jQ)>Î ìÕ1Ü£(£§Vƒ (¢€2¼Ná<+«3tû$ƒŸuÇõ¯!éÅzÏ‹ð<«Œ}™º×“U"Xb·ü|dÓvÆQù¼uÏ×Mðøîñ=ÀÇ dÝ;æDÿ ºñÿŠßÄ+Óhqõ†>j¥\ñ*y¼@Ææ¶qî 0j0,iry^#ÑÚ)üwækÚñÆ+ÃípºžŸ&UDW°HIô.kÜSRÆ‚Š(¤0¢Š(®n鿵£=M%G¢kx¥^’"°üFjJЊ( fŒÛgƒ5sÿNÍý+ÊS^¯ã§Â˜abèÞå©úÕ"Xê~Þ ½e<%  õ2~Šk•#5Ôü8Ëkúƒ‚ÑC5±ýh`dø¾3Ä=Pö’ÖÕÿGÒ³k[Æ„·o¸À[Keúÿ¬9ýk&˜\Hb„Ê¿z2²ø ý+Þ2On¢¼íwÙÜ/¬Oü{f‘1¸Ñl'c–’Ú'?ŠIh¢Š‘…Q@5Ë“i¢]ʹóZ?.,u2?Ê£ó"Ÿ¦éðéZe®Ÿl»a¶‰bAì*–¤Ëy®iºpçÉ&úQŽ0¿*õsŸø j³*Ì@d“éQQé`EsTFÒ'½“þY©*¿Þn©x3J¹Ò|5n—á´n ¸»`927<ý=ª¥½”¾(Ôíõ[¶ÆnD–6ø*goùêãû¼£¿SÚºªqV@õaJ>ðúÒP:ÕÍø/÷z$ö›‹}’úæ ŸA!#ôj‹Qo?â‡o‚|‹YîO èƒÿB«^H‚jÒBñ¼Rês¸xÎA9óê#ðªÖJgø›©Ls¶×L†ú»–?ú¬Ò¼†ö:Š(¢´QEV_‰•ŸÂšÂ¨%Œà2ÕµjT±´Ö7 Ë1ò/ò¨u 2ì†þF¥„C¡¼~–hİIèèWó§¨CxuüÏ i/œî²„äwýØ­*å~j°êÞÒš0RKXVÒxÈÁI#H?¡ükª­AQHfp|!~§?0Eã¯2-y_RkÓ¼yr–ÞÜýé¢Eú—W˜š¤&Õ|3umkXQË-¼[½¾y+•=+¨øVŵ«9b†Ø(þè*çžhb(øë ãÙF-§ÀÝ:áä‹[_ÿÂÁ„À:Zm>¿½lÿ1X´ÐtÀg¹ÿÇM{†”‚=ÅE·Œ㢼UJèêTþ#ë~ºkÏhӹ˵œa©Ò“6¨¢Š‘…#2¢31@$“ØR×-ã‹ÛìÈt=<±Ôu—û,{zÇüµ”ú^þ¤P!¾ ºmiuÂ=FP–Á†1yU vÉ.ßkøŠÊãQðÖ©ghÛngµ–8ˆ8ùŠ9úÕ»;H4û+{;d ¬Q¨èFò¬wıé’ý†Òu¨²‡òÇ ž+v^¸–ÆïYë)hZ]ÿ êñê:€šhþÞ!Ù<$u‘>W;`Öíy·†íÚZF×qÏ;EuqràÍ#ÎGeä`{W¤ÖÓ+°N’å å<¬^iºA§H!½»"L[JªgícîEuuåß5X´ËÍfˆ2\Çq |úù/ãŠ#¾¢®®u_´–Ѽ ¥Ú8"C•³×.Ksï‚3ïVT­B|ª5+RN[–xÏîµn(@^˜ãé\N¿&ï‹>„“²Þ0Áï…¬ ï'p{ÅQV ¢Š(¥_¼)*½õìznŸs}1ÄVñ4®}ÿJbg”IhÑÇ-¶«.ý0É9Žâ"ZM:ØNŤ8\ŒìÎFkcÂðêW>8‚æù ”%ƒÜ ¢|q)U(Æ#,Oµføuî-|=§[ΟhµÔ]^Ë—–Þc”`3”ÎÈò&jfã­Fô\$~´ Yæ\F$"ŒàWFÇlÔ­Àõš(¢˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Åþ·ñŽÈà­Õ¾ém¥Qʾ:{‚8#ü+ç]+ZME¥ÐDñàŒ¶7þ±¯ª«ÁüqðWR“XºÔ|6 šÖw2ý‘ßcÆÄå‚“Á\ôäc¥ &#žwÜPG"nÞ8ÜG·½zWƒì.õï„ZÆŽƒi•®í­EÚ¤7#ê7ö¯!´øOã;ËøìÛBšÔ9Á¸GîÄ‚!ɯ¨ô»Òô‹->6,–°$*Ç«P3úP•„|Ý®›¿ Imo«XÍ ³.S§Ì€pqõŽþ)µ v[Nǰ8ôŸŒ|!§øÏDm>ølu;íçQóBøàQê;×…Mð;ÆQß"]:X3sö«uÆïÂŽT üÖáÔtRÐ[®`»óæmûƒùƒåǦcðÏzõJá¾|?é÷‚æõ.¯oYS•ƒ€3ÉêNMw4Æ‚Š(¤3šñÆ—yªø|%’y¯ é;C йÈã#9¾+Êí®b»…e„³£t8¯y AC_1øëáWŠôrêûCKËý:y Šö¬L±‚~ë(玙ª™Ôõü«°øa [ÏO·åw·MÞá‘õ‡ç^ m üK¼“ȃN×ùãtÿy°+èÔ¼1àø¬õ{ƒ-ü²4Ò‚û„dàÏsÉõ41?¬=GIÕ’'eÛ%œìªHE?:±ôR2}EqS]ÅmòÅ^[Ìp¸µï\‚2;Zñü“TÔ'¿Ñµ„I'ròCv§hç8R3DZéBc9í[Åzf•o昧ò‘C $þ=«×~Þèü>±¼ŸdÏ+ßþY6ó¹G¶rG×·Jò{ÙÏV·kVp óå#HqíÒ½¿Âµð†mtKI¤ž8 1–@vbI8:ô¡°7(¢Š‘Ý]Cek-ÍÌ‹1)gv<+Ït?Ã&µ{¯ëéqgçB±ØF`y;}Äýånl߀í]‡‰4Ùõ=+Ê· òÆâEΑœsê#ÜW:-üDŠ«‡ ãþ_ã ŒvÇøV„dŸ34§JüÎÂêÞ2šîÊq¢mN¡w@ž¥±œy°£Þ¹FºÖ4½Rò9µ,„m0Ôd“÷ײ$”Èáx6=—šìÂê¾Ck•žcY[’É!¨v nö}k¥½²[½2âÅ[ÊY¡hw û”Œíš^ì4€ç(ÇJyÂø?Ëÿ„‹KT†8ÿâJÓ°‰0¡£Éúžz×¢W?á¿ Çáæ’C{%ÜVÈÒF«åÇ (Ç©99Ï5ÐQ9s;¢'.i\+Ì~1iÚÖzJÜ7\.ç>Iaú­zubø‹@þÞ†Ø%ãÚÍm/›‹¿;JàƒÛ jS³Ô•º¹[ÀÚÀ×<¦^™D")A<ïO”çë€çïæó¾:é!m´™°Ç¡g$ñéŸʳ<<÷þ »ÖtkSipÑ܇Dº”ÃÃ(Ê‚>\…*H.doéo5»jw×dK+mŽÐíÏ?{¡=IéMRi¹t5öo—›¡êTQEIQEWž|Oñ ¢Y ‰cžõ—/ nh` üØð×¥_ø‡ñÓÁj€¾~©r¬- ßoE¯ç^eáÏxfÛF}gX¸¾›Å“;¼ÓlÆ9¾è@£îàŽOúî#Ñn°`ÑæHoï¢W¿Ž& n–øÂ¦áœ9×’K±ÈÅy·ÄýsF–öãLµ²²þÐKˆ§i-ßzÂUƒ(œOlzôçVÿÄ"Ö'³ðó_–¹ÿ[™1™IêÏ´øœqè8¨|Uàiü žš”ñ=ýäo+Ee`E rßÄÄ“íÇzJ6Ü.}5àmVçZð>¨Ý¶û‰­”Èÿß#ߎ3]q Öxþh±\.ÙR7}ö+ú]¥0AERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ÎOP’}h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÂ×¼¡ø–XæÔíç‰ i,R¼NœãrqžjM+š‰8¸ÓôÈ!¸ ³Îå¤#݉$ÖÍîER¢Š(“ñÏ€tߨÃÔmwnO‘u‚ÈU ðA®/LýŸôx&-©ë7·‰Ú8U`‰5ìS¸¬gèú—áû²Òla´·_áyov=XûšÎ¿ðV‰«ø„ë:µ¤wó, 1Ü háPI8^䓜šèh EpD#†4Ž5à*(~ú(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠBÁq’zdã4´QY·šåúYN'ódPÊReäàr:r)&ôF•JçU³µÓþÛ$‡Éܼ–-´ }x¨tÍzÏT™à„J“"ï)"à•Î2È<ði¨É®khMÕìiÑX:®·waut‘AnñAÈYÝ·ržé×5µnòIk’ª¬ŒŠÌªr#$Þ¡4Ý„¦›q[¢LJ+†i$ÓüSy9–b ÎÜ4¬Êíè¤àu=+¹éTÕ§IÁE¾ªáER3 (¢€ (£žÝ{PEp^Ô$½Ô,LŒËæA<¬€»ò¡‡>‡5ÞÓjÅÔ‡$¹BŠ(Á=)WšêúƦ—ÚŒ‰}u“tÑÅrap@ù{ý+Ò‰8õ­*R”oª¹’•üŒëí{LÓn…µÝÎÉŒ~fÁ¹ ’2vƒ*½±ÏM «Ç"†FSÃÈ"¹}DïñmÐì–p/_VÖ—„¤g𮽃2Eåç×i+ŸÒ°Œï'Æp­ÍVTíµš(¢¬Ü(¢Š(¢°µ}qí ‰l©û®ÜòÍýÄ‘œ’xu5Q‹“²Bm%vnÑ\Æã®nÒÚöÎK?0…ŽV‘]½ºOnݳ]=9ÂPv’°”“ÕQPPUDÕtén¾Ëý«ÜÏ%™K~Y¬3eÚÀIògºXåÆåÚÇØ+—ƒÃ÷÷šcßYEoŒ¶Ï>KOAŒ($ŽpkÌIóÉßCŽš­99Ùh`ø€7ö¶¢¹ç‚¸í”·uâÈ£tKH>Övƒ+¬¡UIÀ89>¾•—â§WfÇ@’sèAÒ²ÒÒâ-<ÝA §[¸…¹*àʨÀ$λlšW>™R§R•9Tv[|ÏA±½‹P³Žæ…p~Và©}ÁªZ§‰´mu‚úù#°DJ­#€zÖ²ôK¹lô-ZU Æßtȧ¦|¼àþ#õ®B8æšúÞÚ¸!»¿v’K‹¬•‘ÂdçrxàqŠºTTùœ’<ŒEéMÁk©êVWÖº¤wVwσ+$mÏ¥(»¶k³‹˜LÙ Æ$¸öë^oákÆ·×l.bùùÌQ#e°Ølz†\në‚s[v³G&­¥JØR/%MÏÔœJ1ŸsYb!ìd£½ö1uÒKMÝŽ¢óT°ÓÈw@Än î#×j;oM²‚Þâ{ÈÖ+Ža#-æqŸ” “Ç5…~Ë/‹çhð|«Xb”ú6÷`?&çê*¼5Ö«á?‹7…dµ%¿|X…]1À<üÀþ”dœœ{N¬gUÁì­øœÿ†ï“KÔ´û›¸çH±vŒD,Í’ù^Ï8ȯDÒõ›}_íDs§Ê­æ \åC r{­yþŒnu}N;žÞðÎÞ`˜3Ç.ÂÈã÷®‡Ã·Úv™«]i)swquqvÊÎöá#$c*1ÛhÎO_ZÚIt=TiÞðm»/ºÇ_\/EÖíÜO¿ÙYþYÚ5sÁ8?¥wU ¶–ÓH%–Þ$Q€Î€>¦Šsäš“W±Ã%̬y<Ÿe’ÍÂÞlC c:Ì ¸6wó:×Wá ë»­fê9/ç¹…-•ˆ’Mà9r=8±µÐüA\"y_ÚÐ+®Ñ´ƒ9R+©Ôµ­;ÃW‹mœ<É¢óŸìá0Qž™$“ŠíÄÖU ¢¡«FáÊÛ¹N÷oü&—ãwØíŽ{ctƒ¥Pð  ²Š xaštWº™ß÷¯ÈPFœg©ÇLUÛÂ?á6Ô²yû¶¶é+6éõ6:¦§Ê¥ž’=·–í#hg%º©ñŽãžµá7?i%ʯÖ&©oþG[¥kK{ÊÜ„†âÓxåÁ ì@=z`×)uãë§o6mk©’åæ•£ÆáHØ;ûw5ìÌëñÄÇý1--A»–ÿ&²m´æÖ|Qu§Z_%›˜#2¬—žrüÛv¢\só é]”Ÿ4™íà­:Ú§—Ðï|=â3«Èö×ÃÂij)†BÉ*ŒŒŒðqùŠß®_AÐ,4MaþÒßÛÁòÛÆ5Š&ÀûƒœeGSÚºŠn×ÐSåæ|›Ï(‚ÞIŠ–¡rSœW—Msw=ºHH–êR¡C îÃØnoʽNHÖhž7GR¬=ˆÁ¯)f±ŠHö—žÊP6÷ŒnãÜ(?wà¹íñ[C–¿KìYÔ´ë.ÿû?Pû<‰<%âh³†ÔƒÜ9îlWaá­H¿‡XÎí$–E¢rNY‚Œ©ÉîT¯ZæuÝf×_Ö"šÅŒ––°² JÞîA dÀQøœv­ÏÛo°ÔXÃC<Û°Èp+qéœÂª¿4ðÑMî(YTj;öZå­ãÉ -¦K˜®@F)ýá‚A¸D²Û•I0 àäà`g$ ×-sËsË#éPܬ6²Lç;º2†êT®{Œƒ+kMh­|J¯r0³B ¶~6£ä–SèXÇû¸ëŒøÑªÜùŒ1RuU&»ÿH«â-pj éñX]+[Þ.阠PU¹ãvqnõRÓ\¿ÐàœE´–ÌìÒ;or€NkKÅÚŒ]Þ¬‹0»IPÞ{…ȹùAÇ#Ž•W@ð¥üš„ qµÖšå=ÈÊ—ÕìâÞ¿Ž—Z×­ôU‹|ÜK);b€ÛGV9 ÈQÓ!Ôï_}’ZÛG·|Q\)yd^Å€#`?‰ü(Õż¾'º·-ËYÄd‰°r7ÈG§j£¦è0ëVžTZŸÛ&?mÁÞq+#dõ#hÆÓÇÒ¼×)ÊN ìsJ¥YÔ•(;XéáÖí_BþÖ™¼˜ H%÷;¸ã­r¾!ñLWÚ Ôcuj$h‚4»Nx‡);½â˜£¶ƒJ°…BÛÆYÒ<ã%†ìýpk”…p4‹†Ô¤¸¸¾·’K‹Pª#·ÚWh6åË’¥uÆ=Ïk FQsníÙ[õ;7:ªdqp‡¯1𮢹?q}«߸?øëé]T›¼§Ù÷ö¿\qS-ÌñJÕ¥êpú×.’îh´ù-­­aÅö‰ÐÈÒ¸8`ŠùAã=Næ¶¼'¬_jöw^b—ËŽâUeã'åÉÆ ÆA óèkðõ¦—«[Þß?—o-‚Ã̤ˆßv[qþÞ8¯AÒõ3Sžâ :d—ìåw˜×wgîžÐäŽõÑ^ AGæqÁ¹krµßˆ+›‹{kIî^ÙUw` “ÉóéÓ­?L×ΌûÖóZ]í.±M‚$QÔ«Cc##¨ÏJäÝ'¸Ñ ÆgG’äË7‘þ³o— ÔîÚ½E.Øìörݽ­“$ös]†²€w¨,Æ?Þa^j«+·Òö8Ö*|ÎNÜ©ÛÌëõO[i7‹o5½Ä™PÌñl!8ËÁ€÷Å=¼I¦®±ý™æ±›–\!1¬‡¢þ÷·Ðuâ¹ßÛ‰\q$Ö†êÔÄùÂ…ÈÀÁèxÏéV¼g†¨ët[\i‘K!cÚ´¥ENj7ÞæªjŒT îŸôίþ0êbÑ|æ‡w—öÅ\ÿ8ÆzãVHëžé‚@Ÿbnt­&‘÷p-Ì3¹ËNs!£»ðÃé[}Zœ—¹.ÿz8ý¤–èö2B®æ É'µeYøŸBÔ/~Çg«ZMq€Di $ƒÓ½JÈñÍï—e°Mð”{‰£Îª¸ ögeϰ5‘oº†óMÕ¤¶¸x§û0šòáð¼ä$ƒŸ—£,B íáÞ$ ¹‹uõ|cÚ¦´·¿ñ |ÑKuæÉo Ⱦè€Ážã5ØãÚŠãTÒ“‘1¡Ôuìâ4m&}_OÕ>Õm-„Í<>A˜uh”bg¶zXº®„ò2Ç«h󼑖[tg_ø ¯ {õ:V‘|ªÈëÃÕxxòÅ]vg àý{}T_Çc%ªFñ“8"[‚ØêNÑËrxÀÅwtQCw&ss—3 æ¼Cáé.¥}BÁÝÛ$‚‰±Ð‚x =Op{éhª„å sEÙ™Ê*JÌóˆ´Mnò XKjs†¸¸dÚƒ¹\úǽtú•¥Õ†•£Z\J|³"JŠÈ¹ùŽX˜äò:šè(«­ˆ©[ãdÆœb¬ŽgEÑœÉb°CF-X«€¤a‰Á#§Ê=³ëToô b5–ÊÊÞ›\o4·[$€~S’¤ ã¯N{J+›ÙFÉv3úµ>EleëZ}ƯáÉì·EÌѯ,I@àƒÔsŒŽµ‡t‹* £vð´÷2‰C«… ŒžOJÙ¢´¿C«™òòô2µ×YTwg†æ DWãrƒÔðWއôªZO„ °½[Û«©/nSýQt‘û…Åîr}1]J¤”yÐÏ•^ö9o·:ž¿«i«µƒ%±·•VÙ$2.íÖéƒZú6•§-¢Jó#Ë$®.îŘàp9=_¢¢Ê÷§ÍmL½sGµ´A$\@ûâr2:`©ö#úÕËŸêšHoìí&vó‚û×<Æ<ã±ÀÏ5ÞQT¤Ñ¼+T‚å‹ÐÆðþ‘>–·/rд³2óq€8ëõ5³E›¹œ¤äÜ¥¹Èj™.žm&h–³[LHO'cp?Ù#鎕«¡èM¥;Ï,ûæ‘2 ù@#Üõ­ª+W^£‡³oC5N)ó%©{¡ÜGw%Μñ•”–’ÚVÚ»VVÁÛž¤AëÇ5-¶„]£“Pt¡ !;A$òØ?‡µmQ\ÞÎ<ÜÖÔÏêô¹ý¥µ8߉ãÖt™’Úy£1ËîciòP€@è05Âz;YøfÖÏP´}¼’ùbD„21SƒÐFk£¢´¾–:¥QÊ dq-°¼º×m¡³±šQ%‹Ä®‰ˆÑ·dnn‹Å?Åú]ÃÜÙOoequ€Ú:ÛÆ ' ·#Ší(ÅiN«§%%ЊΠdQŽÂ +Ø–â# $‰*ä6긮WÄþÔg¸·MÆÚKD²û"Æ×W–8êF1ùWqEL&á.dL¢š³9íwFºÔ µ–8­§š8Z­ål$ªÛsó`ô+žG95J³ÁM$³[¶ûH­“tp6ycÓy z ߚ먬¹#{èÁË­LÝ+F‡J3ºO<ÒÎTÈò‘ÉQÀ8¬ë? MmoÚøÉM$ÑÄbƒ>ìåó’>cÛž3]KM¬"´tAEPEPEPEPEPEPEPEPEf€ (®q.µÖñ£[fZ‚K˜×Ê)°mÃ}íûòéŠÝŽŽŠcK:£:«¿ÝRÀúô쌑‘‘ÔzP1h¦¬ˆÄ…ucè4…•³ðƒÀ<ŠáYóëvº‚XÍ+,ìP•É Æ$µ‘áM]%®]õ§‘#òá•C.rí¸œ1¥`x¼ïñ}µ£Æês’&nQN:•J<îÏMÏF¢ƒ÷֚Ϊ@fU-ÐŒý):³õY4{5­æ¸i%XcŠ,e™º ’u5¡X>,ñ,¶‘²/ f>ƒ~?™=…'h¶ RþÖÓc»6ÒÛ33£C)••Š‘‘yz°ü*vé×QwŽölÿÀ›xýVå(»¤ÅN\ÐRîeC®Ç7ˆî4am(x"Y Ä®ÂHÈP3œãž˜§kÚÀÐôÖ¼û9Ÿp¤ðIäû çnní´ÿˆ¯-ÌñÃE]Î%}ÊÔþ5žÞóÖÒÅ*Ë—#!Èo‘ÿúõ¬"¥4ŸRê.XÝv:¨&[‹h¦PBÈŠàÙ©+žÐüE¤;O³mZÑ®…¼HÀJ_hÏLæ·ÝÒ5,쨣©c€+1¢™Ñ\F$†T‘‘ƒÌSèQU¯õ M2ØÜ^ΰÄ]ÍžIè“T!ñV‰5âZ}¾8§s„IŒ¿¦ÝÀøS°X¯âvïBŽÒKK(nZge:sUqÆÉÀ?•o! °9 üë•ñôö±éÉ4ñ£ýª?° U²Œ@ë€5wÃþ&Òõ;k+Hï"7Í-`T Ñک¥Èšß_Дõ7読é‘Á$Í{ÈäòX†ÉßýÜu-ì+#Z¸oxvuÐõ8¡•X|ɪ̮GÌŸ_ozÝ^ÇMEgh%އf¨Ç¨È‘ˆÞîU©Á'“Î0; ]^Ӵͯ®’óæ’“œŠOAÅ4£áÌΪŠjH’Ư«£ †SGÖHAEPEPMOP‹JÓå¼dd,k–bHÇ94Í+T‹V´7E4XrÊ© ؃øÖo†|#|ÀŒ§–à‘œbE5_Â2¤êÍ¿˜#ÿdª¶—5TÓ¤çÙEQRdÅ̱y·G ytŒdðÖ¥íÐÖŠØ&НŒ²Ý[•õÍQ‘ùÒnÊäÎ\±r6 ž+˜h$Y"q•eèEIYž øoN ç÷ È­:cNèFu »U$œ*(.c¸ ·p*pC ž”ÍHÄ®óþ¸?þ‚k”ðEä­'Ùdå~Ç©ÏR9üÅi^]¬'+I#´¢°"ñ8“ů¡'B¹S $áCnØ9AÀbzñŠß¬Ç{…Q@Š( Š( Š( Š( Š(  oßÜéú|-jÁk…ˆ¾*' Aè8=³Yúv½“áÖ»Ö/'›lì†CöÆ7tQÐ ŸaZ>'²šóC—ìèdžYãŒur‡%G¹ßĈ.nYä²Óî.DXyV] €>U<Æ28ž€ÚI£¦•:sƒæ•ÿl¯D~7˜®bÿOe—~wƪ¬ª ÁÀéÞ©[Äz¿‰$ŽÆúúuˆ.ô³$ÈÀ\r>ûŒúÖÖ¡\jÚ­´Ó[\Ag LŽeËóÆS =ÏnÕY¼«[]/“R¹ ¯qÛ@²ªýß5G'é‚?•mO’îí|ÿ TTghj¼ŽÿM’î]6Ýï’$º(<Õ…· nø5ˤsÂe,íuu#%òĈ҉‹%BtêsœÀ®‹BÓ›IÑ-l‘šÁ1Œ($“…ƒ8J}ëû}/á’·yÒYQò®¥SodÀàãëÚ¹e~†5¹{œ¿‹#òµë©á• >Ï(™t™9]«î@À÷4Ý*G³ñ £E –÷Mt-®c‘²ÄÉ rw`aÉþu·­èZ¥ßˆSP³ŽÝ£Œ@ËçLGÌŒOM§Œ6?ZY¼9{/ŒWQýȳKt[Ì;Él ·½óÒ´ºµŽõZ –[?¾ú¬á<#¯ÝI!#±¹x‰>g¶“%Ç« ªŠÖ𠸻Ôîõ‰’?5ân Îé˜ÈÜõû¡á]½á£«ßZÝÅt¶òB›¢ßæ! Ôc~¦®hú2éVrDeóf”æIBmÎÑ…í€k*tÕ·Ùÿ_q稵/#–ð ± Ú[Xœw/(ß‚+Ÿ›Âÿbñ ¯…⹇ìÒÃyÞÑC±Û#v‘Æcúæ»xcPÐn.æÔn¡œ¼Q[Ãåö ž?5Kâ Üj7Pjzl¡/àÍ·vÒJp@`Iê }kžJÌ× åfûéö2ø;ÃúµìæÝ¦’O5De¶tTL–ç¯'ë\XÒ/5Ë™u9$K‹$%%¸º(ˆì8o²Ã8Ú1]ׇ|7qmáÛÍ?[™®…ë¹’”ȨŒ0T7y'OŠÇO‡2Áz^ëWˆœ‰§µÝ:ñÆH!Xû‘Ÿ\×EÆ7»³îETä﹯§_\Xx&Þu¾MEÙ–+{‘“¹ZMˆXžX¨<œ â¹£öNkÁ³»y–7y˜Ü7–Ù$öU,˜ÛŽ¥v­áÛoøFÿ±cštŒ ¤û³"¸máý3»œtíX÷^Ô#/=•åºÍ椛/+ÏÁ„ó`žu®:‘mèa^–‘íß©£á©¸Õmû¥Â>?Þøš×¿‚K­:æÞ"‚IbdRùÚ çâ¨hÚLöÜÜÜÍÍr# ‘©Ú›AÆ äõö­zªi¨¤Í(EÆœc-Ò<¾ëI¸°×bÒ!º†?9 íí€ò÷3ä ÄîÀ^§Ö¶u‹k4ðÞ‘¥â]Ãæ<Ôe!›cç;xêOªÿˆü-q«jÞÚ],rlTtf(FÒÄ2ºòæ#¡…ü+qe Ákb–òÜ%êܺò£Æ6àpz(¹Ç½tRšSŒŸFuW›©I+ü¾óšÖétØCN’A¨éòJ¡*ÆAÀQŽ£yÈ­½v³ea#O$~u¼«ó¬Nìä€2Jdç°úUÙ¼!ª ;L´·žÄ-­¼‘8“~æÈ ŽÀq“[²ø~)ôËKv“lÖÖâ @ÊË€ •<$j1=­8¦õ×ó8åI´Òò1ôCo£^B/5 c<¨¶Þ\'Ìwl€R£çŒà›­v5ÎÛøråg¶3Þ@ ·•eXíàÙ¼¯Läž3]sÅYXÒ’j6µŒrÊ Q ±7«mx΃I ~RFáƒÎ+εm3P°ÕgMJéž³5-NäD;‡š#n§ƒ•=@ÊœŒWcâ­ëR¾Šî H®ÂCå2yn‡qmÀž=;‚1ïYö>¾»w]KZÊs87iî;aŸ°ÇIÇ´]–çu)òÁÞZ>I|[¢ªIk®Ásµ’(¬å ™óQœbzäýMWð•¶'Òu]OU´3\G$vöÈ… ðëË• GØêÚrjšEÍ!<Øö«cî0åOà@5ÂéþÖ[±–{mâgkñ‚ ³yj;¹QÉÆk ·IÚÇ£i§b m:â}qnâ»ÙöÙ´RÜaågp›ŸÿUhjZEÍ–‰w©”šv¹‚Þ20 & ‹I‡JЋIÔíõVÏÌ‚Úëy¹óP Ÿ7ðõΫ⋭GÃòÚÙÆ²Nd‰Â³…,ŠÇ“ì+Šœlï-îFŸ,ùæµ¾þF%‡ï~^[£•xåš6qGïsž=˜Wi V:“ ýÏö‰¹e‰2 º«Ÿ-Ã6•Ú6¶rN}k»Ó¬.lü5¨Çy¶’kƒ&Öp܃ªúâ³´¯ ¦·5ÝÅþ¡<–étèm# ŠÃƒ†aó¼Ž3]Ôe§)muóÜÖ¾³j>f.µ,š«Øêó46æGÂqæ`YSïSÇ=0jÕî¥xÚ=¾—u3Ç®Ÿh%þh×Êgh²NHÈîzq’+oZŒÿn­­«›békxÕ~U.üF:{UËï [M¢­³~ý$3 gùü× «yž¡”‘ÇN1ÓÇâ7ÐÏ­_š['ú#ð†‘¯#Ãu=²€<ÌQæ; Á—øv€¼mõ«Þ?Š8õI®¼é`oìÙ`Qæ I7esüCµZÓü~š……Ôòó‘7Ï%ê®G–¥°pqW|]£j:•µ•œw5«Bá§œ–÷0MuRqU–ÇF'_…ßïýNJ[K1`y´Ý·—i›oÞ ZåÈ!“,s’lž@5Ù?‡î¡ð$:.ñ{Ξ@hðÌU äò<Â1ÏZìžý¼AàË››6{yå·‘vƒóE"‚sìANk„_ëÚ¤æÒm*-±ùÏ*£/™a& -ÄÀÎ éƒÒøWKÖ!ÓuQs[ ¸ËI3l*Ï á}øÍtU;Z;¯ÅÁÊú˜Öú´Ö5ºÝ?M¼Š<“–rJá£q$ -Û>§#zÓY“I´Õ‘™î<‡‡ìé#–;¥à.ãÎÝÀŸašÏ°Ò¯Ú×Pž}*â]ÙÆ“ÜïÎBí'®éMÓ´ýCR²¿X­'…Å­ ŒÝFÑo–6bÊ3ÛgÞ¸`¤¤®c‡…ERmÛ¯‘˜u­GT´¿°k¹/â9ä*+ø.…F@XÐíǽtÞÇöΫÈËCnqøÉ\ž›¨YÜ•Ò57Žvh•^,¼x%‚ªŽeØîcÉö®¯ÂzŒº”÷Út–bU…PHêÅöï9ùIþðâºån]n«¤¨µ®ßO™ÕÖO‰u9t âòË)Uß°¸ŒrP3šÖ®kÆ^ ›Ãö–3A5¼M%Îí ê‰\Œí'žÞ†³ŽèóÞÇŸÚÏ6·­Ä¶úâKuæ¯ÙÚ}FD”¶.€-€É:ðk§ñ(¸_âîãXs›W‰`Bm‹‡#v¿6ÓÔV ×0ø¯R—û7MŽ9n?ãÕ‹0‰™‚…R¾½N1è+ÐüIks>†|ˆÚâx$Ž-xiv0,¹àzÕâcuu¥ú.‡<¢å E\çü¢×–×%µC¥‹gòšútù‰eÚ5è Éç¥7Æ'Ôm¯¿³ô»¡k°¯›2ÚùÌ9<"€À òØíYúÓ뚯‡ì‰í´Vy$tfÞHTº gœm<ç=†j–¬ókßZ¥ÔBâêIm'ƒËÝ4 ¸`#\ðHÀÉsÛ54š:𰌖šÙuõ;+SmSI¾‚ìþþd‘€z•;[¦Fsî `x †»L±%4èÏ=ò@ÿÙj¶‹%î“âY´ÍBX¤º¹Ñ–8PAxÏÑré“ÔàÕ¯‡ã7{ÿgÀÔ3fº”æ½ÄF*ªäÛ¡­§kóøžkY…¹·2Oí„« Œ®2ÛŽàwz Èñ'Š5/įmhñR-¯Ä;£.efêq´ñÐñW4æOøOîíùY#y¦Û´µ’>sŒrsùVoU"ñ$ˆn`¶ó8းÚÀÿÀXW=;·©XT¥&ªyþ‘izíÈ– B Vîò#"¤©3d8$66°ÎGò5é'ƒŠóß'ÙüO|ËŒ:ÚÎF?ˆ>ÒOÔ(ü«{Åzõþ‹=µŽÕ`˜¸–{ÅŒm_”ŒÉÉôõ­æjÝM±±šVºèt”U-P®i~#òüøÃìÎvžã=Æzõv²9Š( aEPEPEPAç½PEPEPEPEPEPEPEPEPEPEPEPEPEPEPW6éunÐÈHVÆvœ?Ò¨hZTºM­ÂM2M,×/34hTs€89좵(§wk ÚÜÀ¾Óo¦ñ$qE Z'{¼»Yv3“…ÁÏQÜVýR°”R½º…QAAEUÔu m+OžúòA®çn¼{ç°ê+;뻸’VÓe·G‚Í"‡ú¨Î¶hnÀ_ük:ÇBÓ´ëÙîí Û4Äîbå¶‚rBƒ÷A<:š³-Ú[Äe™$Dy‚îߌñïRÃ4W¤ÐH²Dãrº† Ð˜¬?ø{þ kx¼Ûu9}·þr6F:d`ŽÆ·(¦Ð­sAðäz3<ò\5ÕÛ¯–e(U3ª£ Ï'©Ó]ßF<´°®}¯ƒèqPÜÝAgnÓÜJ±Ä¸Ë1õà~9¯ìõíwM*ÖzÖ£n;l¹p¤{óÒ¾øUâcƺcM«´2.'–W ,„¬ÞàÓœÒz+èvº­ì²E °–0 Ç"20¡Á=êÕckRAÆžá¿âaçíµŒšLÿ¬þîÜ’OúVÍ(»¡…QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( £¸¸†ÒÚ[›‰R(bRòHí…UI>•%eø“FOxz÷K‘Šý¢=ªÃ³Tþ`PøÃãEíÄgáHÄr ôñåÛÝð¹ý+Ên.¤¼»k»ËÉ®/î3Ë6çÍw¿ ü!aâ_YZ·šK{-Š"Py›› ‘ÉéÓ8¯LÕ¾xNÿK–ÚßMŽÎäóÔ'÷ŠÃ¦IÎG D¦–Œ[Ôñï x÷^𬖰Ǩ<º\r©’ÒU ‹o›ouã$`ã=¹¯§Á )O ƒÁòþ•à›‹ßÇ዇òC#3.â"Ú[§sü8õ¯£<;,ï¤,WE öÒ=³”à‡ôÅR}Z(¢˜Â‘™QYØ€ª $ö´µ‡â·èËe2¾¡q™eêÛGü51#ñiÕVKM>·¼™Õm^ns!<¯`'©Ú;Õƒoý{¦Mo$í-ÅÊÛ\™$/çŽw÷Ac¸éZqØY[\µÜVÐÇ7”°™BÞZýÕÏ ô¬Û`uoÉ>OÙ4¥òg†¹qóø¿W>•”få"š²:*Q׎´”£¨­ 0¼"?â‘Ò½~ΤýyÏëOÖ¯¤Ò•îá͔ñ"'ßxUöË5ƒn#¹ðŽ›,_pÄ@>¸b?¥RñÄÒÛZYOO/ïJNI<8ã¿ú¾• ãC™ð—„§Ñ¼â?x†úÚ[ˆÓ&u;cÌå?tU^Iàû×s¥áïÚÉm 曪BGÏ È“=ךÊðÆ»gâKÝm–Ñ£ŽI|«„ÃI@»™{g=:ã®:TÏàO‡·¬Ìö:T×L£Aœ·´d =3Àoj’ß@½}MÕ-e[}všBÅ~I„æ4Rî’zõSȦ®Õ®ýREÒµë}^â8£Ä,ÞvpgpPÌTsÀëÛ 5ÏG%‹´á Ìomyk2¼–凛k2çއ©Á ‚9=Œú¦›G¬<7P©Äw–ñ•m¿ôÑ9Á÷RG°§m>æÕÔt’5’6VF § cNª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£§J( &—W_†ú–­kk Ir/55›ts ²HÒ©Ëæ21]o‹íµÝCDSáÛË›{‡û¦‘žTí,\d ã s[—‚ {ø.äX•™L>k ÿíÐÖ]ÐÙ¯}¦ÞVîè&Ñ •£´<9ùrG¦ãè+94¥t†¶+é·³{ _P]v T‚âóy>f’}rr{þ« H³&¡4LÞKÙ'á†=FàyèkÅêm î½ÕnVÜS#-—÷À@F{çÞ¶ü91ŸÃ¶ ~òB#l `¯ÊxíÈ¢žº°f¥QZ+ÄÄ¡ÑeÆDz¬öÜ?› Þ¬¿ªdù’à›'¶ÙTÿ Ö.î’[=?O öËÆ`’8ÊBªg#¾20;’;f´4Ý: *Â;;}å$»œ³±9fcÜ’I'Þ³õ-ðø‡CNÍ5»ÿÀã$~±ŠÛ¨¦—-Ê{…(ê)(5b9_„ƒC¹±V%¬oî-˜Ør@ü˜VŸ‰lžû@¹XFn"xßB~xÇãT´+f±ñO‰àé÷Þ'ü-­ÿFk£¬¥¤®5±æ^³¿Ö|-q©øvþK+¿·Ü¬m…h|·p![ƒƒƒŸZIøK _j·—úÆ©{®_oÛ:\HDØÎo9§lt¯EÓtëm&Ïì–‘ùp‡g Øblj4]iV¬^âÖ6¦A•|¼0hç q¦øGPðÖ³} èM¡¡]ÉÅݼò”{AŸõ{°Aã®Ñï“ꇮk•±Ò5?j÷ŸÙvÖÓè÷J²r’C(b p`$œäVÄ:¤ò$»ô‹è¦ŒdFÁ÷\6ßϪjÄ•uí K×MGK•-5›uÄ3°Êʹϕ(yæ½EO¡kVµ>Ù¬ïíÛË»´vËBþÇø”ŽU»Æ™ºýØ$ÛÙiê~î÷7¨T~f¬Å¦ÆšÔd’I.üŸ ¿ ç8 uç¦sŒœu5i\döSÁ#\i®‘ÈN^â9}z}Óî?Ó­5h®.>ÉœšØ Ô)5±\¨Ê‡I»L´ž Ô呇,LA SÅý¥k.%˜_BqÉA¯åÁü…My;ZÙ\\$~cCHnÀ'íÒ‹¥¾Óí®Ð³Ä’€8 Æ{õ¦§-ÅʇÙjvzˆ²Î®ñœIGCèÊySÅ0´þÕãBC›9J‘Ø…$~¢‹ýÖúE›ç·»F —0²)ýDZÈ=ê•ókÇF¿²6°ÝÏ%´‘Áqˆb¤ èÇŽOPHúV±šd´Ñ»+Þø;ûNxb‹P‡ß@$ýFáø×K©ò27Ue=˜}EC…Á;±]\xe„Wò½ÆŽÇÞ;{^pSÕ“ÑûtoZé3‘žÇ½ch÷76Ok©ªýºß0ÜŒ ²z8ÝqÏæ;Vv%ð~é¢ófðÿYaûÍaêéÜÅê½W¨ã€F}$6º££¼»·°³–îîeŠÞ%,îݬm.Öâúñµ­J&Žw]––ÏÏÙ¢>¿ôѺ±ì0½ŽR>"»ƒP‘HÒ¡"KH˜cÏ~Ó0þèþÞ=«oõ5'Ñ+« jH’"ºTŒ‚;×âO];R½°™­´9X\߯‹$’8ê†ùxè\äÀ}Ç‹M>×ìÖºu‰//w³un?­%NL|È÷lÔ—–º}³\ÞÜÃmõ’g£ñ5óN±ñ³Åú–VÖâ 6?Khoûé³\6¥«jZÌæ}NþæòLçtòÇÐR¢ú‹œúÄ?ü3¥–ƒMIuy¹„l‡>îÝkWáí½ÕÇ€t›ý"ù#Ya%­nɾâReäÕòÅ})ð í§ð Å»‹kùyè+2kE¤G3;‡Õ®l£Î£¥]¡KD7‘ê6üÃèV¬ÙêÖ7ä,fä+Æñ·äÀVŸz\ŸSSìâW32/õ‹{»Gu=ÆÝÞUµ»Êqõñ4í Úx,æ–æ"k«‰."ÛŠn<)=2Ç«“ëIN1QØM¶QEP^2’H¼#©I!’0üz ¯=¾ñf¿§øå­Zêàý¢ê?°ZÈC4mÇlœÀœü¸¼ú~»köÝþÜ&ó$ ñÉǽy•ô‡[Òü?5»2ܦ•tÀ‘²F©ŽO`Ê(ê-Ï\£8íU4ËÕÔ´«K嬸ôÈÎ*Þ3Å`_CÈüªë:—”Ú†£/ÙRG¾JÞX`瀧ٔc±¯Rº·Šk›'–%s¥Ð•ÎÖØÃ#Ó©®3J¶xuŸ·YÅ4Ó¶¯yöœBT4.v1ãå)ëÎ+·ºœÛZK?»Bçè9?¦kY[™Éè¤ ®¡”‚¬2î)j„QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEfjÖó&ÍFÎ6’êÜħ|}ÓëÝ}þ¦…6:î’qetÀ9—¯#ê9Ø­:Åû æ™-ÅŽ'±üÉm Ÿ¼Ñžœõ*{äƒÎ+9Æú¡§cByáµç¸š8aw<’0UQêIà À–+Ï"Ç“XèmËÈ¿$÷«è½Ò3ÜŸ™‡Ljů‡æ½š+½~à]ùm¾ÞÌ.Øb=™'{SÀìZèi j÷îbx‡CƒPð^¥¢[‘C-“Ãq¨ Ÿ/Êú_ ãæá»C_t£ë_^•:…ÑLm3É·›j‰dQE1}#û?[ü {qÆéµÿÇUE|Ý_G~Ï’nð>¡9ME¿TSIëTQEIAEPEPÇ~ë“Ðôý2Kûý:KHZ]*äù@¯’(nõü³ô®²²&µû/ˆâ¾Œ(qˆ%;y%rWŸ¡?¥%tª£z ;ÒŠB3X œŠR zƒÞŒc½.hÃò‹FŸB‘Ù¥°Ç”XòðPþå?îŠÜ¬ÙÜE5¶¹§Çæ]Ø“æD£™à?}¸#Üc½m[\ÃymÍ´‚H%Pñºôe<ƒ[ÅÝKES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Æ:ºè^Õõ2H0[9\|Äm_ÔŠøÌà±Æq“Ö¾©øÍç¿Ã=B }ÆI¥…6*î.<Àpú~•ò«ƒ”laÕ[‚?:¤K )¡èiOHÀ+Ý¿g[ÓåøƒO=Cp£êOòãF‰ªk÷b×H°¸½›ºÂ™ õ=úšöð‡‹ïí5y„ZŒö*âÒ/eŽœq»*Fi0=®Š(©((¢Š(¢Š*®£²ØËäny‘né¼rãÓñ«TP—)ygÌrdW_lŒÔÕ‹¡²Ï¨éLùû%Áx†:E Þ£ð%—ð­ªÆJÌ¥°‚ŒRÑR0®vÅâмDÚI”-®£¾âÎ2~䣙c_càvù½ªåö´‘^fØ"Ýêl»¼øX—ûÒ7ðÔö—¨x^y4éoRëÎ×Ñ–æ+¢¸_19XÕ†3Ê‘Ü1$“W7%êutU]3Q‡WÒ­5#¹‰dQÝr9Ü? µZˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šæüg¨Ùé6uýüâ h5(ä`p£$d‘ÐsÖ®D4]\$Ñ 6û#*ê#“#ØóT~ è‡ÄÖ4ôÊÐ"ã?:|Ãùcñ¯cc¬±ŽC!ÚAúŠNÁ{a]ø ·Òn|5¦¼„rßf @*þø6ͼÅðÖ˜„¼ðçÅ|¥ý·«ã?Ú÷ÿø'øÔ7:•ý⺿»E–wqùKÙ¾áÍä}e{âÿxZÜÁ.­¦Yªø÷·*[þøNs\§†|o¡ø¿â´sé†î7M=àtaVUR[pÈ#$sÖ¾n/@ÐW©|¶Y¾"M+uƒO•—êYùU(ê&î}/EP0¢Š(¢Š(¢Š(œÔ‹éþ-µ¿Xç’)íÒ÷çk‡ž2ß_XW–GcjÃ5½ÇÓµ 5•Ò³{ÆàÆÃÿð­lvïYÏq£š>(¸–yá·Ò%G‚O.Aw*ÆG‚î8 Œõª•ÄÚž¢ä^^y0Ž™)‘þÓýãø`VƳ£Ms:ßéï^,~[G(>\霅b9RpæO段WÓxÔtûëp3¹¼†u_ø‚¤{ƒø éÃû&µZ˜cö÷/xfØÛx¯P‰#Ûl¶‚€I’@ßRv޾•ÙW/à¶¶—š¸;–òm°·c *ãØç=ó]G^+ž´¯6sÔiÍ´bøgÛê6ª»c·Ô'¢’ù¹­ºÃðÔ'‡¦oèѦÏ'úL 8¶rx#ý‚#õ¯£ª ËK}BÊ{;¨–[yÐÇ$l2HÁЉ¬l/5K³éö—scý]¼M!ü…Y¼ðþ³§êöšUÝ½ÝÆÓ 2ÄUŸ'ûñ_^hZu–‹iý™ig ¯ÙÀ Œ ‘{?sß=Á®ãf€×¾ƒ\´^i2‡Ü:ˆ˜ŒþL¿Sí=ë—KŸ>jz­£0¦—yež†â@Åzoìùhòx»R¼Ù—–O©gá^ÏáÝbÏÆ~µ¾’– ¸v\[È7ýHúæ©ø+A¶Ðå¼µµµŠlËZ£ Áuݼ3íµ—“éïDg}ÑØQEÆQEQEQECwmå¤ÖÒçË• 6:€F* 6áç²Q7úø‰Šo÷ׂãWk+R–]2_íã2Zœ ´EË( ïÁHéÓI]Æ¥:S!š9áIau’7PÊêr„Jq¬K9Ý2Fѵùô9¤-orïO,>èÏï"ÿ€’{6;V¶­|4Ýòôõ†&qõÇ®*—‰,gºÓVêÉj «Qýæ^©ôeÊþ5åí¾µ£ir[°{mBâS;È?÷ÎãOrMM&ÄiºUµ ëÇÕº“ùæ®QEl ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(µä.Ê'…sy©\cʵ…åaœg8üNq6:ì>ÑbÔµ=In´Û¡æ]ÜÄ7ˆ.œn mþ'„ZΤo¨âÎ[á­ì¾ ñΫàk÷a³³fîqàIÅkÔ×ýÄÈÝ#¿€©ÿ®‘ò?…¿ïšðˆž:ѼC¬iú¶ƒo}oªX:ì»”*+¨;†W$ä‡Ð‘[W?ÍÛZ‰44‡Êš9|Õ»É]¤nÀÛÐÃôÔ]Ô…ukýE69Rh’XˆhÝC+àŒŠuXQ@Q@Q@âŠ(Ÿ$ðÔïsRK¤JÅç‰M£®«Þ3Õ€èrGq[‘Ëð¤±:¼n¡•”ä0==ÅI\¬³ k‹ Jͤ^+LѯK7Tq‰É¡ÉPLêÉÃå¯b±vQ¦˜¥½´ã]¾Y#ü -Ÿöˆ®­$d•‘€!”äíXž'_&ÚËSW)-ÜR;£0×èUÏä*"õ)›ÔPx&ŠØ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ø“=¶¢¶^šê樕þÊ›¦“f6F£¦Y¹çŒ!äu¯Ñ<yÕ´7”òé7wmc¨[Ù“™%ŽÄ¬‡äzð2+Ó$ŸY°]j„óÅ4rü±Ú)™–9™ÀÊ© )îÀ t¨­´TÓ_již($Çàëÿ²Šµ¨Mö}6îp?ÕÂïù)5] Þ!´KyGI‹Íÿ}9oëZuSJO/H²Lcm¼cÿn·$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQE•âi¾Ò%Õ5IÄPG÷GV‘»"ŽäÖ­|õñÿQšOéšysöx,üÕNÛ݈'ë…Å4&miònÃLºŒ+jq<—Všb pï$žg™#ž<­¥yà22À ½xVïY°Ô5‰n't[ˆu þZGµVO(‚yL)nÖ`ãŠçü×'Ávú¦…©ÀÏe|Kï&ÊíBy`(=kk^ƒDÙêzX¯es××Nγ38$ã2¿Í¿Áí÷k9|E-Ž“Ï ©âX¡ó´Vq,z}é\ð³ªôÞNñá«_³Í{ªk7“²qn¡QH6 Ï$üž9íX)<ÖúÔÌEæ-…&rÌÃÐŽ<Ò:¸ÊœàäÖ¯.nî/|H÷êévר̌›6)@Ô ¤nïŒÑ ÁQV ¢Š(¢Š(¢Š(¢Š(?^–h{šôM|gÚ˜~Ë/þ‚kÎt‘ë÷®@¹°ŠáÔŸ”°fLëŒgè+¢ŒSM3« %$úý¤ñÜx‚Y q$RØBêêx`]ðGáSëßò.êõé/þ€kŸð|FcS8¶‚#‰Dsmü7~µÒj±ô{èY`t÷R?­qÉrÊÌÁŦÓ'´*Öp2ýÓ‘ôÀ©«3Ã׉áû„ȬPËò°ü5§Z²Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^ûA鸽ѵAüQ<ß ÿЫÝëŠø•໯é66vwÛÉÎ÷’PHTç§¾)¡3ç]T×|,µKW"×T…ßÊ @š5vB29Vr2+¥¶ñŽ—«x³A²³‚m?AûdoqjÒŸõØÛæg<Äޤn<ÖçÄ߇ږ•á_ A¦A>¥™°NÐÄw °mûFN ÍxØV°ddaÉ 0A¦â˜\úpLúl-{âû9¤œ®Ëk„ùÚ1ü1ü¿rRFK÷b›k©Oá ûMKU¿†ëLÔ"ò¦¸÷´L²g}P3ãHâ¼—Dø±¬ØjVwW𦤶«å&ù ˜ÓXöÈæúñɯCÓu¿jšM߈’ø[_ܳDm!P¨¡ˆV·›ŒõȲ³‹¹Z3×Á:A¢¸}ÄøìÚ=’®%¶`Æß$›A%`àŒ°æõ®Ò á¹…f‚T–'•у=A«ßQQEQEQEQE^ý ºuÔc«Bê?ï“^M§Å/öÕ¾¨a·°µ¶”Žx—qß £?ZöR8äwé\Ƈá),l/`¾¹ŠSqPâÝ ìÙ»NN[?…kN\¦”êr~¼(Ê×¹îó¢Ê‘‚?tµ­­çû PÚþ[ i|ýÓ´kÁâxîµÛ{‡ŽY ½´‘®ÐøyÇn1Ç®jß‹î–= [@Ø’ó0õè„fFúÏâG­a?z£°äùäÚêÌ…Wïá26é#»”1õÝ‡ÏæÆ»Šá~@–þ68m¹é”^kº­gñ2'ñ0¢Š* (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òOš\RxRÇTHÔKmzØ ®¤sëÈëtÉ"Že "+¨ €Ã<ÓLGϾøS‰>E©Z—‹]ye•7‚E2NAõ>•Ìø__Ô>ø‚òÞþ9íà•V+¨Œ;º«mb3ÜAÁ8[ Û=Ä^]Õã5äéýÖîÛø.Õü+££­ÎÝÙË{êŠ(¤EPEPEPES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¤æ’Š)€QE€(¢Š(¢Š`QEQEQEQEQEQEQEQEQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢˜Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.456556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/images/commas-matter.jpg0000644000000000000000000024657500000000000030303 0ustar00rootroot00000000000000ÿØÿáB…ExifMM*V^(‡ifÀHH0221‘ 0100  ó Ò¤(A]HHÿØÿÀ– "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC ÿÛC  ÿÝ ÿÚ ?úCöæ×o´¿Ú+PŽ+'¸ò´ȹiA¦[ Îz‘ž29¯— ÕæÔ„,‘ÇÄD$kÀÈP³’ŠØ'µt?ðR=P±ý°n"‚é­/hŸsëý•k&У¡ààð+å]?ÅGÅ^”Ý<˜ÓÐùB0¹“\ dÅR1_}„ÁZ„j=šW?Zȱ˖š}=Š+ˆn Fˆ•W@ê­Á G§á_¡zߊ<}¯èð>¤Ú6o¤Ãu=À(26îIÜ¡Tg“_˜V—2%ucUç Ç^õö‰h}cFð/‡´¯ ­ªê@$¹˜ÆD÷I¸°oÞœåFW_'•Yßµ÷ètøÁ‡Æbg–ÐÁÒU'(ÊÊ[/u{ÏÉ\ü>ñŽßPño†îˆ%Ó¦ßucy†éÕ£dmŒœ†ÆX#)É#ø¸¯¨-¿h›/ŠÞÿÃý6öÿì{F£inc[˜cÁûI,¤œt'>øïñSÁZ½çŠ†Û–¸º wçʬ’R¸e?0(8 À®÷öeøÄŸIx-õ=6öy-¡fta*"“ÎrJ©ëóWŸŒÃÔ„EºÚß“?Åx<«à±¬o$+;Á¦ž×M+ZÝì}…àÚƒöy‹â¥–±áËi«ßÌ-–è,HÌÁ7ì T:Æzæ¾<ý£õÃuñûÅsæ^¶Ò;ª?JñŸƒZ¥ø»áÙ5‰D6Ë©Bò’ØÚ¡òF{žÞæ®üWÖd×þ7k2϶FóT G Ãǹ€ŽÇ85ôxJÓ¥ˆÒNܽ[gí™7a2|á¼/3nƒmÉ·×d~ø?4û=JÓç‘M«[$W XŒ0UR¤ŽÁ°¿Zᵉš³c} Ü2„ŽäH¡ƒGÁA!ò>•ùñÇâ·eâÉ~,²ÙišTâ;¨£r²î $ŒrIê6Œã#=k¼ø±á_Xé2x+È-ökI’êòŒBÒH7¯ üõ9=+Æ¥‡®Üyæï;ÙïoSù{7ð¶:t1xÉÙW»VWI_vÿCcã§Ç6ð‡ÅÛžQí>p6o28ó”ÈÙÊ(Ü£ $×¶ü(ø'ŽüO¨x¹â’öÕt¿µØÚ„–½º)ä7–m²(]ÇPõ¯Â¿x’mjkÏ=ñšð¼j‹+13œªŒ±êqÎxÀ¯Ø¿ÙHмE­êž7Žå-džlì´ÀˆäBÌÐÿ¥8æb ›IN@$WÝñEå¸VÝÛñé÷ÜüGN510©ìí~èû›Kø‹ã-_Æ3j¾!Wû;L¤1†H$¸ ‚ñ«3|©†U-ÎrzW?Äf·½ÔµvÕg–`îA]±HÄ"Ž}}+‡ñ…Ñÿ„RïÆÓÎe½´ev2TäÊ™\&^<î' q_=_øºéã±Ð´É7°ŒD®ÝìóF²íèB¨JüÂŽy*Ïšhúª|6©Sj¡úiñ"ò/ _júìèÒ"[É‘‚Ìv ÷`Çè+âŠ?~ÝX+NñÄú\Nfû5圮«€U³$ÈPÄœíÇÌ3]x×C[-RÆîfv°ùvª¹]÷»C£¾ßº§®KØWçmŸÆ)> »xÆïHMf RÆâÆ[e¸hP(¹YÖÆí‘Slˆ@ÜŒTžkÔÈq¾Þ©^PéQ©Sí#Û~Ô´?‰¼ iñB½\ÑLP˜Â´rÍ1B‚àaÊ0`‚ƒœ“œó_„:oí…ûj!ŽãÇÿà´Ô`d[Q`bq#a1“òŒ9Ú>úðÿůØßFø;i©K¡ë^¶y⸊%³H³T}«·'*œp1^÷aã(B zØùì^/ÉJ‚?SRèp:ž<¼Ÿ/¡VU8]Ú÷ûϲ¦ã%¹ÿÐÇÿ‚¢¼Iû[kŒ7½Ï†¼7ä•?u†—m¸|cëšø[š”p Àw´i%R~R6a1œç 1϶+ìoø*f ŸðÚœ¨øsÃW(ãÐi6¡•¿!ë_*üÓ­|yñ†Åi~·’÷ i’ÛDÊã€:{äñ_¥àSž0ò¿õò?GɧÂJ®Êé;ocÕ­õm9.WpR›€cÎ1ž}ê}.îÊIL·îâ™È?<©ô$(ãðÍz\¿RØnž™¯—|AàŸi‹­_XØ]ÝÙi3¼KrñL‘Èc*êå³|»ÇËCÇП²O†> _ÜŸ‰Þ »ƒO»Ž9­Í¾¥Œ…%Äo÷{GÓ½yùÍi„ç=ùžCÅY-ÅQ©‹S­Z-/u¤’z&í¹Í| Òl|Yñ§FðÞ£ÏäîŽÐŽzŽAô#¡äVOµíâÕìÚ£Í<¶š©ó|4­åÊÌWï68ë^½ðûáw‹þü]´Öt©ôýVãNóe*e{u8&2¹(Ä[=úWÌß®µÆñƱ}ªÂ±Ü_Ï-ÑX_ÍŽ&yÊ.1ÎáÇ‘Íe—W•Zë•Þ6?K^"d˜œÊµZX˜8¬?"×yk¡í_´'ˆt_xûSñmƒæšTFx$í ¬bpsŸNƼnËÆz¦Ÿ¤›>òD¶|[ŽÆ¥NGNGçß=+Ë®|b×úÏm½¤yU‘@Wó"$L[v7 ·>‡ž{hj~'ŠãßlÓlÜ› y¦‘Й Èχµ}5 $©Â4ãÑÙ+œU)d™÷,ðª-©]h­ugߥ·¸ÕuÝVuÙdXŒŽCÆàª©È嘎Èý5ø'm­üøYeii·ê3Íq,…ɆK†’H-ÛæÀĨ²Àä*“Ðü‰Ò¼Yq¦ZjÞ ûKê1H ùsˆÁ•Î3Ü„=*ûóJñÒÅðwÃ7WóÎ×WwVñOn¥[ˆ“Ë…#Ýõ›™Æ7d÷¯¨ãÚ³•PšÑ´¾äåôhÔÌdðÿm«ö¾Ÿ3íßxömjᢀ¼6±AÅÆÂ¢ ä¬1Fœí%‰=pO©¯%Ö»©Ùj_-¥ŽÖíà'r÷6laJ¾ÖÀç¾+:ÜxƒT›Uhö™#h!j¤Mó.Õlá¥f_›q$ž¹5ù6îÔQúf.\°¼´>Ÿñµ}öWòÃö‰–K¹wÁKï1©ì ·^ÇL øÃâ êmðÿÑGvQqÉäðwÜJÑ’ÉÇUVnœŽµ¤þ3¹Õ•ú+ñâ—ð"í>x…ͳLÑ@ÛÈ ‘aB“‘÷·€¬‹Šüʾڞ†þf+uq Æv¾TîÝÄœàûšú=µ9¼AðÚÃJ·“ÌmGOYÐ+(ó'ºº€ˇl¨öÒ¾«;”jûþ̬|3ö³²Þ7ô>ÍñçÆïøÿLø]âz40<)¹ ço”±±dà)",ƒÈläc8¬^ý”þ|=ý ü5ñ§ÃŽ­,7Žl<4vés„{¦`¬í ºHÄ^dM Hb` )Á +ù›â¥/ÂÏÂ×d>•&Álåò§vÂUÊçhà t¯¿bï_´³~Ú_|9­øÃÄC¯ø¾Óí|º…Ë[›5)©òp1Ž^qPÁV„eÉ+oó_ðÇ‘_-u"¥‡ÿÑñÏø*¦¹emûs_Ãuý߇ü8„’&‹hA`[æ¸àq_ ÙÁø†9dŽuv‘ RÖ* óAãŽ+ê?ø,)1þÜú­älG• øT¾q·F´àsЫgó®ûö¸†ïö’°Ÿî‘¤Ïº,îR$lÄûŒ×0X 1×Ýý¯†9QÊê×”y¹íÜøîM+XеHô† #ºî`F£ƒÓ†ó®öH|i¥kºLþÖn$Û3Á­ÄŠª„y™Œ+q̬qëÏzýEñWŠ¿m 6þâKé„sNÁÌQ1û:±òØâpI)Éãð¯ˆÿdÿh5ø…¨üJñrFt_ ¥Þ«x®€ÆáàQí'_™†º;×™CŠêÔÃË4’ŠZ'{ߦÇÎåü[EО*½5Ë=%–Ú~'—éŸ~3ÚNÇCñïØEšËbf)¸/TÞŒc寢¿e¯ÛÆð¾§mã]zKÀÍl°‰ÕT1³–ç$¶2zŸ_NWãÞ«ð·àoÆ;âdž‹Yð¯Œtaqia¼AND{¶•R2VÇL¹­Šwß±¯Âï‡^øª|8¸Aã[WºŽ;ÇV¶dT8}ÒÜÉÔÕÑ_O‡…JV«k5mÖëWäx¸ÏiÒ…:Ô(6æ¯mUßC+â_üâÞ·©¢iú4É1–ilc,°¹è m#'Ü“ë\†¿hm U†×Lñg„tÙÛÉI%‘^Xä’MÛ]÷|¹ÃÀ ¥~xEªÍw«†[¦>`cÉC€NyÈ÷¯R°yîõ » ÇaG–H%ŽüHÈ>µú]^¥†£j6vß©êðõib+{Y}ÇÜ0üCøCsàù¼-7ƒJ-Þhæ³¾‘]Ë&Ü:É•f}Ì ƒÀ× ñ3ãì¿áÍ÷Â~_Úë[”’8d†H¢œFÈQ¤ù[a<:‚r÷å¿|U£|5øJ,´à'Ôµømím ûñÈ’w#ªòÁWÔçÓŸ<ðÇâ'ÅVMáÖŸ>©yó.|¡Âž¬HóÔ×6E–QœeŒÅË–œ^ïKùýçÓq2¼' 9M­R»þ´:­kÆ~ƒD±Ò´´3Iä<—>Ñ9BÙv @ŸoµÅvš•ž…ý¥©¥Õ†•Ûä–5 1oØÜŽ˜w`ÇSøWÈ~3ý•þ9xB:çˆ4½ˆëæ4AÕ¤UQÎTp:àšò_øÎÛJžãFÖ%–+ð‘¹BB$WÝžF2 °ÁȯW3Áá3 7¶ÀTSä¾Îú¿ò<¬»ŒË1Š{o¦ßæ~Úø‹Å~-Ö‡„|?-½ÛêNåãʈ˜#lódUØv¨'hcÎyȯvðŸÀ_ˆ|eeðûÃRÁoâ-Bkˆl¤¸¬H^aI–]˜™€ã­p ü+#ø¶;/A$ÆÕ<ëÂ\ø ÎQó ôWÓŸ¾%xò×ã¦ñ ô·Óãð‡ˆb jÃ{JÈäAŒŸ5Œç¦+ð|Ç7öx§)(Ç~÷æJRÈðÕ²÷R®µÜm¶Šç羫ã-WÂÿtmÆð˦ÚÃ8‹PŠy^+;/%Â)‘cLƒ´g!NI$צ|W‚Í5­cñÜ%ÀKdµ°6²yÑ2]I&+æ›8AÆz×ÿ‚·|!Ô>~Ñž Ñlq6ypÚ•Ü»¼Ç†äîQN݈ÙFÛ™zW…hšæŸwà+Z“ʓ̞%Œ>B,VÖ¬½:ãÌ?îþa%aèâ­g³õ¹ùµLÖ*¥l"Z;I}Ö±ÏNö×>³kh³,ö79ù”•PW<^N23ߎ¯^ÕÚ-> /Bc V¯‹¸åÔùi&C`t9 ƒŒT>ð'Œþ Ǩ|8øy¢Þx—X¹í8môød¹œ¬p&È¢RÅU[ôSü;øyñóâ…ôÒ|.ð–³âYô˜£’ê 6Ê{‘‡YJàU(Aù¥\ñI«è™ÅN½:m{GgcÖukf‹P²Ó`/oUf_Ÿ1dÚrFÝʼn¯Ó¿Ùž[«¯ø)?Ãêq²Äš¾•eo±¶Æ²ù‘—Æ~ó«3Šø‡Áß ­5o[øzûOºV¶ÔRÛM˜bŽ/5VXdQ‚…q l`šûÏöeÔ­î¿n†Z¥ÜM$—ž'Ó1³qT"lnx%”±ÀÁé^^':J¬ió¿Ìöée–ÃT«-·GÿÒðŸø*_Ãm_Çß·¯ˆ­´ÝÍo'†ü2ÓÊŒVˇh7ÈÀ—ÎÕQËR+—ý‘µ?|,øÙgâsZ†ÚÂÛN’%’à²N[fÂÏ*äp7WÑ?ðVÝfmãÝõ¯‚mP_K¡øjãS¼’LéPlP `a>èÚ>fÊ’Ù¯ý’´mŸ´„4Ûi“P½¼²¾kÉnˆ‘s†r,Olƒš\CŽ©SáWáµ’[ÙugÝæyu8dª^þåßù#Óðµä>+MÐ4ˆÿâaaä!‘¤†S½·° ’  “òŠü£Ål¾áÚTªUä…îÞº½l´ó?zð9ñ&¥8sNÚy-.϶¿m?Œ |+êsÀod‰É‘@Œ1—* 3÷UA'àWó ñ7Ãí¤xŠKëU_±_³Io*Ù"“Ë.ìsé_Ñÿ‰µÏ׿àðGˆ¬m¼G­f#F‚y-ÍʧšÃîd($1äŒ×ä—í¥¤ÿÂ{ñÃOð—…bT·‹u½¶ÅØŠ‹ómÛÀãð> gðUc†Qv”[mí§d~•ã? b3 «ó¦àÒŒRÖî×LúGþ íyâ=@Á¢ÙÞ"Nmãv’áÖ(’ ZRÅÝþP¨¨§'®¯Þÿ~Ç>?ý”~j?õ-Oñš-¨»ÑlÑXgQ¸;¤/òK ÆHÂãsœÏägì/ûB|8ý‘?i oÀ’x#Ä>O ê³J‚A ¬— 9ÀIAÞð1ëŒWéçÇígâ¾»ày~|-ñÚü6¿Ptûõ¶Žåb‡9Å+ü¥:ª²“‘Ž3šË;Ëðõ±¯—ÆþG…’â±Ñ<­Jܶ½þÒê“î:?µŸíñ{ö´×–/ˆ.¥6—}’S QK%KÁ˜R§o²wsžk7U¹¸Ðµ³ñÅ·Š/¯£‹TnÅÄq¤b%bï/¾ÅçšøóYñqñ,—:¬mºkù é’Zg ×$Ð×èx­(чà _©ùßP¯—â¦ëFÓžËÈþÄ¿à‹¿b¿ZêÖŸ¾^èÞ6°ðÇÚ5¯^ȳ-ÛCåÇ0€dxRINàŠª^z^_ûF|_ø·ÿÝý‚þx+öQœhš·ŒüÝ\¿òažiÚDŽæE02°w¹U$ Û# ¤WΟðB-OÃß üeñ7Oñ†£i¤Z§…'‚Ýï."„I#ÜîÚ­#ľ¹øk§ÁK¿a¯ƒ:Ãßhš>Y&«Xê÷>N!0Ç” 30Ä1È„.Ó–RÁ…|­z1Ž#McÐøùÙb¯Uhµ}N[þ ¤øfçSøWûY6˜ºv¹ñÁ²GÈ]ˆ/ÞçH@'p†áâõ*'ŠüÖý“õ6³ý½>éÐÈE¨ñNŸ ,W èÒÇ+9åXì™<â¿GlÚ·öiÓÿjŸ¿²Úއâï xNƒ@ñ¡¨0{{…†'q2Hˆ²D–êÌÁÈRåzƒŒ_ØÃÇß±çˆ|CðÃÅZ¤~µñ†¯¬é ’¼óE}w«êQÈc„]«Ã”‚ÍŒæˆÐ!ØÁùó^WR2X†·>·,ã*t°?S”uW×ÉßCÿÓàਾÖl?mË߈2ݯÙ[ÃÞ¶ŠÛ2¹Ñí@^œîbOÓ#"¼ÓöGñ'†þøÿIÖ|W3ÛɬKsr©å´›q)@‘«“ÉÆF÷Ñ?ਞ9ƒJý»uüPÆïOÓ<¡Iajé˜Vá´«MÄ‘ÖVÃs´_.þÎ?ô‹øcâ…ÃËwŒ÷–ÂÂ(÷Üð¸…# ìÄää àâÚ¼¸Jº÷wÛ¦‹úÜý“#áüFg•O-ÁSu*N-(­üÞº%¶»#«ð—í ã/~ÙWwšýßü#m­L^)æ—ÈûÒ2asÀ@U€Ú ã é^Ãà‹?þ|Sø§ñKÃÛjw:•ÈMÆÙ%>r̨óÈv¦c_1¶œã…8ë_™|e©kõýRÖÐZ^Ýj—Or¥¼Áiw4jÀ|ü¶2>¿O³õ« öpý™|ñÃ%߈¼w/›=õÒ‰<¨U ùq£es‚ªÎ>cÖ¹'†ÇãáE੪J¢QWÞVÖöV·ÏSÅân ྥJ–c9âqJ…(S]lê4Ü­ÕÅ[³: Oö¹ø9­ü,ñWÁxVÛ‘jÐ-?³ Þ†ýÛË…åæ\ž£¾9ð÷ã‡ôØÆÿ$ՙŜÏ</'©M'vá]¶š]9¢ÓºéÜü‰“Éoá{-rÚo:ê[™¡’Ñcc$J Èç¦Ù £¯Ê{V¶—Y B9 OµFÙ Œ¨9$g~Ÿ|е_ÂËøËð^·ðÊéðµ°ŽêhâÓ¤´ ³ùŠÉóãr–y°Í|»ñïã?ƈ!²ðwÅ}GJÔ-ô{¦šÓb€ b»wy°|®¥x9ÏP+ôÜ£ÅLMlOöviEB_Íu¶¶^~Lö°|„ÇFy‡ Ööô©ë:r\µ©­îâ›SŠë(½:¤|ÃñÂE½½´Öc¼éÖHÏ\mŒìB£Çœÿ*úGö#ø¹e¤Þ…º–¬ºU¶¥"ÊÒHÄ+IŸš3ÊŒQÆì¶Hâ¼űOªèÛ€{{Bñ·;JÇŽxô¯”'3Û9ó¸³;æ¾ÿ’ÒÍ2©`&¿®‡™€â¬NCœÇ3¡­÷óV³Gõ:<âOü)Ö´¿ÁqªëIç4Z”w×LHNJÈ‘Àc|¢cW“-“_÷Þ&oøáWAe³ð„?`[„Ë ¦$ŒîÎIsNIÅ|ûðkãÆ sE¹ø+¥øÚ÷GµÔ£+oŒ^˜™¹‘7Œá”ãÔWêìËû9=ŒÓ<{§ëwºl±ÝÞib]’I6C8}냑ÇB01Í%x’ÝxNöòþè,ikl­<òº’VXÒ<8R¹ùñ· ɯÐÿü[ÿ‚£|/øSiðUø!oƒì"°=œ»>Μ©cnyb2Xç%‰¯Ò›æñ§†t”øÉcá«+İÛ}ž%A„&íÅ…®áÁ!²=këÙ“ö’ðǯºÔÚ‘»±½ðõÔ°jzEØâÝœ\~x›$£àgFE|>IÅ1S›£­­£wûµ;8ψñŠ)b°ðvnóJÏæì Ÿ>*~Ðw–rYü@Ñ®t] ´Åcl–ϨšO–LÈÃ.ꤙ‰è3^-ðƒÃÚ¶£âæŠ+M×lX$Ûzþ¬?k…#_ Eû<øD}{Nñij=ž–‘‰%†ùä ³Æì?t7eœä(\“šþ?ho†ÿÿc߯‚¾3hgF»¾‡ ÅÒXÚ5nx¥Œ”a‘ƒƒÆ?Ùr,ýb°®•8¨ÍŸÎ\YV´óâkÍÊ/ðìjiº¦¡ÿ ¿…åh™5lÚ¹¹ ¢&Ó,ŒCÑŽÝzŽµÞøžêÎÂîë^Ô£ÓõX¦¶³¹„ÌÍSì%òü¼ÊdE“o–0>nkÆ4»{-VäxÃZa¥¥»oñÿÅß ßü6²çì­áÍd[ë÷ð¶¥w©DÉsu=ÌŠ°BWhXIJl [h#€0I?Düø©ñ—Ã_°ÿˆ<1¤xNî÷PЗ[Óí/’k50-º¬—¡ay–æCh²“ÉÀrq_Hë?oíCT[ |;Ð~˨I¦=´²jG,Š °iÒi#žHw2ýÑU\ ¤–á_ üû~ø3J»ø}ea ÛéSÜø‡WÔtÉ.b¹i_WY7Vâtan.4çŽÝÁʰ$‡õTò<$°ŠH­%ͬ®ÛëÈðqù)EFI½nßv|—ðâO‡>| ñOÁßþñ%柯]Ç9†´ÅÂòH—k$ôï?0ÏŠxûÆ?³v»%¥—À¯ êº êҽܗ÷fáeb¢î;Hlœõ÷¯×‰ÚíWûC|×üñPðÎcw|ës}¥Ïsu Å¢A{0²¶‡Êgaqsm"Í*ÎÊM´cfø Á1~0xÅwÉ6¿£ÚXÙJÑ<×FçtQ½É·¶vX`•]¦e9XZO+7a#=ؼ“,ÆF´± ÆR»²“µûÿ‘îð.m[!Îif¸¸ÊOÉ®©®©­{Ÿž$ñ –¶³èm–DÇÆ»ˆÈë’O8ô¯¹W’óo$™ôë?4]GIÔî´›ÿ,^èÚÆ—6Ó¹IFeáˆäCƒÜäüàëïøºÇÂÖ€ù×s,?…G.߂׭Àù—&QÄ|t›ŒŸ{lþjß3ôÏò O<…lµZŽ&1«N?ʪoûvW^‡Ó¿²„ÖÃÄr|Iž!$֣˱(hÄÃÈÊÀ†Âå@Çzþ…ÿc/ˆN«ã 9µÛ«mfâÚG6º[ÛùD*õämÇnp Î3ƒ_—Þ ø^42ºV‹"Ù…A÷Ôuçú×¶ÜøcÅ~ÒâþÇÕµ+]ýðö¶×O³·;™’qЊþcñ3:¥šÔŸ4í}[ÑœÃʰQ£Mk»ó¹ýë4WÝrð%ͲüÌT‚ªGðäÏçï_‘µß< 5·Šî|­Ï¢ë0éóN’XÍ$.¯™"$EAù×…9úWÇ~3ñ^µ¥éøz÷ÆzÓhðmSß2VÛ¼)n22sœWh¿ ¾0üGý—üOñÀ>*µƒK–Y,fÒµ&i¥˜ h§bÌ®Á•Q[>¹ù_ ø{%ˆŽ65¬“^Wõ;8‡?§—Ñžµ7%4û>‡ëü+ö®øïûS|añ>©ñÛÄ+¯Yø+GìM5´K:Mví-4j¤þì8ƒI9ùyøÛþOÔ¯4ßÚ7Áº]ä(šmî$öïÄH& ý3€¼q^‹ÿæø£Ãÿ|yñwá¿‹ òõç¾øp¶þm6L=ÒŒÆãø[¹Ï½y¤ÞñE£…žà¤qÀÆÇzu¯¢ÄÆI¿fì.Kc»Ô|7qáû&Õ «Ïgtæ-§*ÑóqÔ+ë/ø'Ý÷…/à£[HŠ[R|[¥9‡¦ÇH0sÔlb¾1»Ô|G©ØG£M3Åil ’áØ„Lòy?Ë©¯¡àŸÕž¥ÿ%øöivøÏGV–Có8IŽ:(ïÇ­sTR”dÛèÏB•WËêÿÕø_þ Gc,·WŒæ!·Má ˜ÁèUt‹HöȯŠbŸ |AñÿÅOx_á•ìVÅï…õˆ³*#Äö÷¦ˆ[x;C+ŸAuê¼×Ú?ðY d/üƒWÐõße¼ðdž­›sü«æèV€1ƃ×Þ¾ ýŽí>i¿uåø½©^iZo†uöX^ý‚í® ³‘í¢†RB³É"Hßr¹ 2°àýï RäÄÕ§-çJ>i+?¹£ö.1kÁ¹f*ŽÔ¥R”ü›—Ó:D­µåŠi˜G#] 0¼“ &¼¿ö_×?d-{ᄟ"¹Òîañ=ö¥¨Ü]˨ÏtšuͽºYDó[Â<çžÞá ÒF¤œSõñ£4¹¢¿ðéTR>ÿ>øð÷Sÿ„ƒÅš„ZE´Ö¶—I#é5…¤×72Û lÍ3lYFôhI-‡5êÓ§5%½ýæUJIŸš1|øÐm ³Ok+2ÉsBþà,sN]¤uPø ÆY7ÉÞÙûÇ#üWø•©F-îuíNá#óYVkÉ™Qæq$Œ ¾w˜¼À’+Š×¾|Sðv‘¥ø‡Æú%öa¬)’Âæö"ŠåV- 2€ãk©ã<2ž„VRæÓý8'9Ç_ξކ"”õ±æF”£fºdípþ¾º»vy§¼·±%™ÎâI'©îOã^ùû/h×Mâ¹¼Ij¡^ÐÔ°ã/œûp£Ÿc_=øŽCc¢išÇÎæòUÀáq¶<þ×G¦øïÄžðÇöNvÖà’Íåü¬Ku%ºôé_“åt*cpعÐvUfìßX«+üìEøƒŒ£”ãò¼.*îxl<’ÝIóNÛôæIùÜýóøUãË Vö="îÖ9/¶|¾QĤc vûô÷¯¨]èv¦inmFd—QÔ Ð‘˜Äqa"2ýܹ#¯Jù áŸí {ð¯J“ÁZÍœŸÙÏÙŠD)"˜€+òŸ»¿jnúU¿~Ñ^ Ô|] é0k†æÁõ ¶‘Y®Ÿ§HUÉY&œ¹•ö¶0dÀËp+ösâOüÃÆŸ>]ü`ø]âÈþæÄÜÚiOe78ßös:¹7!Iíæ¾û‡°²ÀÂ\T,îÛùŸ–ø…Ÿ`± XŒ5UÍÞçó“àŸÚVðÆWâ—†-]õ;ƒ:¤Ä¶TÊ1¿9ëížEox]µ}rê[«¸¥ºËI,¬K31$³2I=ry®[OðÔ¿5KÍÅh`¿²•àž W$Ñ6×F• ‚O­A⊷61,z*FOÎq“Áü1ýkõGJ5%ÍEtÜþ[Äc*Tv«µî{­ìréV^eƒÆ| ÜŒŸ§lדK©Úïi¢¼d`bu=θü+çÛÿˆZÝÕÃÜ\JÅ[Ž©&²çñdÓó1峓“ÎiÒÂ8¯zW.ŸŽué¯n—N3»Â9*9ëÏojú»þ šªßðQ?…Wñ¶Œ}ð.’¾Êì$C†÷îM}éÿʼn®ÿà¡ÿ&,H¼k¤nCÁ*.S¦xë]ئ¾­$»TÛk]ÏÿÖüÉÿ‚éLbÿ‚‰ë%iÿ„oÂÞÝ4;>õòGìéª|Ö~'ØøË㥜—Ú~™isöû8 ûQ¸@Ëk7•¾=ʲíó~öݱºWÖ¿ð]õû?ü;U“·†|,Fì h?¥~=Yj÷ÚuôzŒñ6VEë1Û{×ëµòIâð|FòÕ„}×ß¼_“±õ¾ñ½º¥|»5ƒ©„¯e8­Ó_ ãýèöÙ«£ö3Qý¬ÿàœÚO‹§¶ð7Â"t+OdÒÙÛ}® Úöí’Fóæ”MV’ÛªÛHLO$8qš­é¿ðP 3¼]ñ+Ã^7ö>'³ð½Œ–·Ÿe‰Z 8#™$…!xQnÄ$@ˆ6œWåTwþñt¢}PcêOf@M´¤÷uÆIî2>•n_x¶Ú?6Ö¶[ö–Ô‰TŽ;¯#â–ˆ°Iª8ëÒ¨·Sz?G³üÏc7ðo2pẋý³ÒTõ’òœ>(>÷MvgègÇOø('‹~-|/¸øWáÏ iÞÓï,,¬'m=Èa ¡áb![yŠ‚Ñ1~KÆ Oø)‡Çý/CÓtM.ÓE‚ :(ßòn¸´K%·Ÿk\‰¢6î"„$,Á‹ÆÛˆ¯Î­VÃ[µa¶ K1+­’ú{â©iþñ®¬@´±™ûò!D<’Íú×·_7˨ӽJ°åÿÿ3ãpžgøš¾ÂŽ«—ø%þGÙ´çí•®~Ó^ð¶â &ÛOo¬’Ü]ÂwM¨^Kokm%Ĭ&;H€]§9b0Íú-›Æ|G­±]>Ôf™ÿ†4é’{žÂ²m´¿ xO/â¨Üsþ‹fÙ\ŽÒIÐ{XzLj.¼G.é~3h¾"ñmâéú¹o-äç!TÎߺcôu\žÃ=«í?Û·á —ìõûfé_ü?kVšüâx¥BnWï$ØÆb¹L+s÷°Ýy¯œÃñ”ð5ª`¨+ Ñ^ŸÖ§™œp¥LÒ´1ù„ß´­ïÊ]ï«?¾Á2?jOHc»{[Ü€²ùÒ»;&s‚«sß…Gž ÿ‚mþÆþøUm«üEðuÃ%²D\£w‘o™dÉàñÍ}÷û:|PðgÄé¾-ðU‡“o©&æÞl¶¸ãÏr#ûÊA•῵§‰üYñÒ†¿ ÂA}";ÜÏq”K[tÎéŸû£ àœb¿9Æñ6/YO.^W²Vÿ‡>–—ÒÂÁáð‘v}[»ÿ€3ß¶w¿Ùáu‹ø~hÃK°Òr"I#ù“v¢ù®Ý¹b;Wéükþ âO…¾,Òdߌڑ»ðÞ£"Úh—3ŒÉi;¶#¶gêbrqïºß.@#(~Ô ´ÿÙËÃ~°ñ>–Úæ¡âmHOxî¶ë È|µ šP¾ò~R:çæý{ãÉñǃ<7ðŽÇKÓ´¤_¾¤u x ¤Œï·MÊ üÈ$³”v¯®¡7‰ÂòM7ï¡ùþyƒ„q JI=­Üþƒ¿à®ðH{öñ ßÿf¥´‹Å³ÈOMšU·Q8ÂÉœF³ðn!_¹Vÿ!_¿gÏß³ï‹WÁÿü1©x[P”–H5/4)ÚZ&#dˆñ#0÷¯é—öÿ‚šøçÁŸdðí7âk]gÁúýü²K¨_0I´«§C2Ëœ)…äæº1;z~Îýº¼Gðöìý‰5@Ö ©émpš ˺BÍà‹wä½µÜ+…cåÉÆp YwWÀJ8j«š=ìrc8z5›5©üKéÞ×5}6mJQvö¬ˆç‚àɤÛå9?OZêeðhö+.¤ÜHCG â# ã <Ÿ@+ìƒ>Ñåð«ø‡ÄÅl'‰açLÇ1ÈÀ‚K/–Gm¹9ÈÙZüºÔ®äÔ'ð‡Á{ÿÜãJ‚Wp»ÄkÂªŽ ’9ùcŒz·$ÓôCöøSá߇_·§ÁEÕäíCâÍ*DXÈ´ À† Ààž½s¶zG‹|]koaðÕf°ð´R’÷ª„IvňÌNÀ|¨¹ÏÌI;@Wп±_„´ËÛgá=žœò[Æž-ÓnZÚ5S$Âü÷a݉<íF:ñÓægIJÄUpr´{™÷/ƒéÑ£)8^Inöùÿ×üôÿ‚üÚ­·íú&e\\x7ÂÒg¾²á_é_‡óÇ$’|¿wôæ¿z¿àá[#ößÑoÈâãÀ~a‘ýÛ=§ÿA¯Áèq;IÚzýk÷¾®§—Q—•ª0µ‰‘l9ÿ=ëzÞâîÅËÙ;Ã']ñ±CÀ„UXBGÛŸóïS1ÉQœz~ëb0”kG–´T—š¹y^k‹Á×ö¸Z’ƒ]bÚÑ¿Ž|`’7‘ªÝ*ì··×¥súŽ·«êªWR»žuÏü´‘ˆü‰®jââTK†ˆòÇiƒ#¿áR¤žr¨Ïlzׇᬶæ†)ú#êñÞ$q&›£_UÅôu$ÿSU5ȃ qôëOÆ HI €wV†ì ÝkÖ“P,U’>N…6åï;ÜýøGã(føa£ÚÈP[Ä¥XuIõ÷çüúÿT ãoÁO?bíSÃNÛx"žՇï%h£ûñ÷d;:Žç¿‰øÆóÃ7ëH~Ï#ËÛÿÞ¿e¿aïZçì•ûLxâA¾è> ¸÷;بK[–»‚îŸJü3‰ò9P­íiêÝßêÑûö]ŸÇ‚ZJš±ögü×öÀñþirÐh÷·öÖö-a’1A,Ó­6èðü`Ôÿf¯ƒÖ–Ú~—¡jMy?Ø0±ý²à ‡–ØgËåÉä0ǯɯ ü/Ô|@Íy4ÌÒ¾ZI9f<õ'$óÏ5Y.MJ§6/ _d|Î{Å5•8áh?{«_‘Øø«ÇÞ0ø‘¬KâOê·zÍõÁÌ—7R¼ÎÞœ±8Ðp:+™–ê⣚vqÜw®'YÔ´Ø% ‡“ìH?È×Ó:‘k–šÐüú¤§y½Koâ NëYºðíĪú&VhÛrÇ<GãW4-#Ç×cksÊ…ü»žG«IË9‚¬J§-Ž¥€õª~±¿ñ/Ä ‰™žT*g+æ“òžNy¯Úÿ…ÿtTñ 0_Û~ãN!UÀV¨òÁ,¿p7ÌÀrH$x żOC.ŠRÕµ{3ïxc…ç˜TrŒšIŸøßÁ~8ø¤Ã¥øNÀÞ^GogrˆÑƒ M0Û²+ðK2•.ÝF0_yà[« Øx›â´×½õ̉$º\1º¿Ú»ÖVþâ:òƒå œ•PE{o޵Ë]oãv¥gá©<è4Õ‰$øT¸eÉÀg‚<”±Ó"¼“Âúˆþ6ë¿ð¯¼ÛIÓæwt2¶‘~[ursó8ÚÅr[w~¥IÒU*.Uk¶÷±úÍ,’gËKWµ¼ÊÒ¿‰%;üAuòjêRÞ×+g§Ú¨!wl ²HvaR5Ç }_ûü/ÔíðÏÆ nt{(üMdÑm÷W&RZ]¹D¹ùS8ÎI¯b¶ø5àï Geuu Wló®mäÿWÂí_1òqgjíd r2?À_ŠïªþÚ´>4t—ÄölEò­ ÏEùrܹÇËÔ±Çqò¸<Þ­z¼¸H«ßsé1¸C ?m/²ÿ#ÿÐùCþ+ŽIk]JF#ð†€A“ß“ùWóågŠOœä¿@­B¿ðqOü'‚ÿìCÑôI¯çÊ?õñý?Æ¿páÿ ”¾›<ÜÓøöò_‘mG’C7 ö¬ Bu‘ÑOœƒÏLtüë ›ýZ~5Çݯ—êÿÈWÐâ:”º†CsË Ì±õ÷­¨ä‘¢Hw‘Œ(=²rqøœÖüyÃþâÖÌ *Z÷&Š,n9ïšÚÒ,«ª[éÛ¶ùò*é¸Ö\} tÞÿ‘¢Ãþ»Çüë& Ú= NI3èí'áÖ†±ªª«Ç΀çNFá^¸¾»Ã°ù·DÁ`ÛmcVp±9áIãÙÆ4›Ž†?…þ_ê7rk蹞vóå’\»¹nX–999ëë_FÛxvÃÂÐGnŠJ€ð1ÎÞõÉø/þ=?íþB½/Ľmë˜ÿÐkÃ̱3çq¾—<ì (ÛšÚŸ6ø×Rg¸1ûa'†=ûÿ*ù¯Ç¶1‰úØùl0@öãŠúÅßñóø·ò5á~9ÿTúä+ßÂÅr§äyµ×½ó>ñý|¦E}uâí` Ÿ°;Lsû˜d˜(' feÉê6är~•ëÚÕχæÔ.m¬:mˆR|Í$}¦Rq†ìyöüû#ÿȳ­¿qÿ¤¦¾Ùñÿüyx›þ½—ÿM¦¿–8û:¹»Gt¬¿#úƒ‚)ªy|®/îu?ü-´¸²’4¿ñ$¬±¸ŒlHÌ‚"$;™˜–cü@z‘_Cü=´à'‚£Ò4Yd¸»¹Hî//xI¥$å•NA¶M£Ó“óÇ‹ä›xýóÿ¥b¾ñçüƒcÿ¯HÿôëÍÎ13tU6ôr†ÇÒäôâêIµ²ÐÎø»ñVô[ëWvFk[M/È·š4mÍ3ˆ„É’Hʦñ‚y-“Ÿý•ük«j?·ÿÁ¿ Ü8š;Oi¶Çríüäi’ØÜ6³Ääœt©>-ȹãoúýƒÿH¢®'öEÿ”“ü)ÿ²ƒeÿ£!¯Ð83J3Ò=?CâøÇQA«÷?ÿÙÿí8Photoshop 3.08BIM8BIM%ÔŒÙ²é€ ˜ìøB~ÿÀÒó"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC  ÿÛC ÿÝ ÿÚ ?ýñÜÿdýŠôy¼¯3þ)Ý#äÿ¶Wæ¾”ŸnƒÏµß—üúKã騫Hw“þeÝ#çÿ¶WæG†/ Ì‚ 2Ifÿ2»°ÿô™/Àtî–2_Gö]þgÜßSØÁý‡âo/Q“þ>ø+ƒ›XžÇËûT‰æoþ ÑŸQ¾ñUßÛž?³ý6Wm:_ÎzU*ûþáÐ]Éö]cÏ‚ãý‡þ™Ó5üË©<É?w$&úþ±óüAŸqû»„ûõzx<½V;_žHãƒ{ÑSé¥ÏÎfÇþ‰>Çÿ—„©üÏúgROuÝÜŸ»ýÝ¿—Ó:‚µ?¥xN¯û,½‹àìsê·ŸêãOùé^;ûÉ>/ý]{¿Á¯¿y?ü³Ë®m_pð8æ§û)ì:®¹¦ø:ÆâûQäŽGòÑþY×—ê?ôëëKxí4û¯ô7ûïåÿñÊÀø¯®}ºî;KYìûþGùéÿÆëÍt}*ëÄÑØØïÿr¹°Ør›å9-Ô}µcÞ§øÅ£Ýù–gÿìù>ú%OòH–óÇ'™ŸqÓþZW›ëþ ѼA¬gj·‰g£Û¿Ï¿þZVYŸ?!òõrŸѱ±=Æ£ªÆÿÙò|éÿ«“þÙלøàdßñ1ðÅÂ[ù;¤ÿêüÊí4?ˆÞµŽK­Q?ÑþãÑÅOÀ’yš¢yŸÇ²:ö¨É)ãpßÂx;à´kŸñQÜ$–ñ§ÜƒþZWÔy±Çkîã>JðÏø[þ ŽHü»àÿžuÚxsƺ7‰à’}ãÌŽ7Øÿ»¬ªfUþØfÔ±U½úÇή’[ÿ× ðÏ3˯Zøá?üTöÿîWA?ï>zú 'žíœO“ fÑÿý4xëôSJ‘äÒ¬Ò=þdi~sÚ¿úU¿üóëôWC#ÓcÿwòG\¹Ž'ø_ýúÅë¹ü„ŽO/Ìó>Mžecj©©jI#ùž_—\þ±|ñÝIÿLþåkiWÓÝØùïï$OÞ¼O¬óŸ’R§ÈliSÆúIpòyu•àwÙ¦Þl“ý_™÷éšUßÙ-$ÿ¦‰òW)£ê¿Ùºã§úÉDJéúÉC.·Ç¥^HŸë$y$ª>&º‚ë@Óãy<»›?í[×'K[HÑ?åá#ßÿ]+7\x'K?3gú<ÞŠxžy›û#É5‰ôëbG¾Ù%¿‘±êtÖ4«¤³‚ þ]ºyމþ¯Ìÿžuá~-¾Ÿ_ÖdŸí»þåtúˆì`Ó¤±´¼Hãþ4òÿå¥}Õ½Ã:§ÒÓÉžû+È‘Þ\}Äÿž•ÇÏãH<%£\XÏ'™y²4D®SÀúŒ~1{ËíFá<½6@‰ÿ-+Ï|Okk'Œn#º¼KÉ#HÑ?yþ²¹H>øsàéî¼y%ôŸ¼¼Mû½·Â·ÒIá‹7ŸdrlûÿôÒ¹_ ß}–ÒO?dvvpF›ÿé¥x]Œ#ñW‹n “T{éï½?å¥:uO¥>yžÿâOkæj¶²'™fŸ"ÏJÆð±}â;ïíJ4òö|›+Î|[©%ß—¡é· æIó»¿ü³Žºï…ð}“J¼DË’9þûÿ¬®iÎz_V÷PþÜòßPŽùg_?hú¯—¯ëš——þ¯äG®í5$‚}Q?å¤}yΙ¡ÜOòG%åÔXØcÖ4}I-t?Þ¬ßò?—F}ÕŽ¡<ã’7Þû#ó+‘žúëËNƒd&÷OúéVüϨXÏ#Çæ|ïåÐeˆ=MIã.OÞI'Ü®ÇûGËHÑÿÖoù+Êþ×ê¶e“Ìû:ot®¥î¾I?yö/ä©ö‡³ç\ñÚ´Ù,R?ÞHû6yŸòμZÇÄørÆ?ùç÷Ñ?é¥všmÜw^8ÿN‘$³·‚Gtùi'þÓ­_øC×-,î’Oìû>?>?yuG§†<çÇ4‚ *ÞÅ$24ùÞ¼É5ùí$ŽO´?™—òyŸûR½oÅ_^ùäž=Q>Ç™³gü³òëËçøeãø-$Oì´’9~ô“ý_ý4¯B‘é{7àñWöª[ù÷žÜÿžu•ªüT×ìuŸ°Á¨=¼–ÿÁÿ,ä¬má·ŒuT¼×4hÒãÌóg™þ®Oùé'üó®!ü#㋸#yô¹þÙoæ|ÿóÒ8ë§ †‡9•^IžÙ¡þо4´y?â`þ\oÎÿün¾ÄÐ>4ùšTwÚŒ~gÏ?—_‘‘Ýj²j_»ß$—}?åŸîëë­+\ºÁVó¾ù$·xä}•Å™aàs}V™÷Üô9 š|þmúlÿÚ•ØÚø›JžêKäß$;×ç'†/®µË¹£:Owq=Œi$vé^§_}ºµ¿ü|oÞï[a©sÀô©Õ: 7íR_^<’ô­)çùëð«ÝH—jÿY¿ïÉ]Z~ò²ÅÒ\þë÷Ÿû¿ý’½‹á]Ôö‰ª<'—"xmz_Ãk¿-äËýÜ“Ç\8“æ¸çÜ›Ÿm>ÉŸÈòI'˜îÿõÓý]uß ´¨4? j𿣗%ÂF‰ÿ\ëеÿh~4Kµï’Hãù6I\ψ.íu//ºUÇ—¿Ï"'ü³ÿ¦rSø½,þ~ÇØÀçõ›]gÄÖ6òA²ßG·xþGýen«úåž?ü{Æ›º?ø·ÃšW…cµMA$¸ÙÄI?ÕׇéºÍŽ£uÇx‘Ü~óçzæö^áÅK[“à>ÈÔmlo´ët¾Ì³¸ûéÿ=+äÿø* j²y䳸}èïÿ,ëÝ-5$éz’\yc}’?™P|Pw×4 ‹K[t’;ž7zË Rp™ïäÚðŸ!äžø“ªéV2hr<š}ÇÈŽÿòξºø{áhÖpj;äòþã§üó¯€ ‘$ƒÌÿWþÝ}‘ðkÆ3ë>“J»“̼Óÿw¿þ™Ñ™Sä÷à}'d£mDò¿‰¿ l|köp÷÷±÷Ç^5æ'üóJúã.±w}¥FéoåÙùÿ}?ÖWÍûë»)©>Cêx*œ+Q÷É÷½}Cð>O#C¼ÿ¦²¾W’zú£à”~f#¼»’¿Oðq:¢pŸ§óüOý3Jñ­õ韧ò<]óÉüÁ^Y½+£.=~ÿu7¼8‘Ýkšz?ü´ž=ÿ÷ò¾èXx#³ÑÒO2OîWÁZôvºÍÔ‘ÿn•ô›c¬É¯Ùê^cù—¿wùgÿLë›3?;ã¯~±î¬‰&¹ÿ«ÙXn¸ö¿ÚšsìÿG}‰ûÏùg\‰þ%iÞž?Ýý²ò4þùé_9ßx«UÕn®/¤¸x䓸JáÃ`œùü7 δ9Ϭäñm­¬iö„’KïÔzWˆô}WFŽ.?ßÉ÷ëÂ4߆×Ú®•%ô÷ž_˜›ÝýeaøsÁZ޹äö— –o÷÷~etÓ§ ™ÕÊhÂ|œçÕ~#ÕldxÓÌþ?¾•Ë]ê¿ñLë«ÉüBl¯˜nçÖtk©-g¸xä·ûû?yæQwãýWûO ¼‰ûÇßç¥tá²|Ï2È9(ûhuKM“Nì;<Èü´t®Öì1Þ?Þ\I½+™w’ÓÌy$3}j{ï¹ÿ,ßøÿå¥}þ û“óúµ}óдíVêêîDÓ·ÛÇ#ÿîëÖC©ü×>1õ]ÏÂ:ú=æ ñÏ;ÿÏ8éXÁàïgi_¼ŽßäßÿM+‘øw}®©®j»ä¸“äþy×%Þ›¤zmßîä¼}èÿ=+ä±8ÞIò@Ò– œàÿáþÍžÍÿÖ\\&ùçy+Ô|ï\}ÏÞWâÝGì#ùžd‘ü•áÏøHü#ªÇ=õÃÉ¥êHèÿ,äÿžu•,Ië}X·âý–Iþ®I>MÿóÒŸ¦Ák>•¥ÚÉú´Þé\&¹²}Ïó?yy}³güô޽ M»O·\]Gÿöö»>J×Ú<1¥j¾ˆï$HüÉ#ùþyÇZÒ¼kki&¸ïnö÷üˆõáYí,u-Ré?¹&Ê«áW}cJ¼ÙI%ÅÔŸ=kí}ËHõýx$Óc¾óí÷ÿéwwÈš‡$¾y<É>û¿üô¯9ì`’;ãO2ß䨕oU¾]Ià¨÷Ǻ~ýÒ²ö‡³9ùÝàÐäÖå¥âI¿|•ã¿ð]iV7¶2~îãç}ŸóÒ»ÝO&‡&›k#Ç»ù¾¼vÒ?²éWžfˉ#O‘ë§ }N CrŠž4‚}/MÒµ’HÓ{ï“Ìó<ÏúgYOñÓÇûäѯ®HäI7ùñùrGüóŽºï€šTçÅ ?í—[¦ÿ-ÿyæyq×c®GÇ VM7ÄØÿð½ÅÓê‰oåÇ%¤òÎ?úi^µ#ÍÄòBg៎øsÃ’iO¥¤‘þò7t“Ë’OúéUtÚkȺòõý=íãß&Ï"Hÿç§úûi]Ýßì›ý£añ"G§Æñ½¬óÿËO3ý]y^¹û+üP´“ÈÓ¤µÔ$“í òIþ¯ËÿžŸ÷îJôéÔ pâjÀç<1®XÝxâOÁ²;yíö<ŸòÒHä“÷öÒ½oàgÄ)ïµÈô}FÝ>Ï'™ç¼ñÿË?õu•¡þÍš¬ãøÆGÒï4·³Ø–¿é»»ÿYÿ]*xĈõ MKº¸Ž7Ø—Oo'Ùä·“ýepãj@ΕSô×ÞþÃŽê Ÿ»Mè‘ÿ«ó+Æ? |1¯Á²{Ï/ËûŽ’«ó#¯$Ò´ÝV?^A}¿ÌçùãòäŽ:óŸíýWìº}Ô›ÿxñ£ìó?w_øŽî7̾·Þý4­˜ü¦ý†MKNÖ'ŽÞG‘÷ÚÜy‘Ç_D|9±Ö`Ô|?k&¹uqg¥ßZ|óÇþ²?3þzW·©9Ð9©Ôç™úMòQòQäš_$ׯÿÑý ø þGì9§ÏÿRî‰ÿ¢à¯ÆGR‚íãHÿÖI_²ß?äÅtÿûtý~/A²ÒÇÏHÒKˆßøëßÊ7=<Ði°j2I&û.?¿óÖ’]Zé¾\wQù~cùiP]ë—séRy’}žO¸›+˜’x$µ³‚úOãûõéû>sÑö§¬i³ÚÀ—.?w"ltùiF¥áø4«_øøO.D®GGžîGòü¹6|ŽÿòÒ´¼[çßhöóÚIö‰>ãÿÓ:óªî¦M¥O"ZIæG³øëI±¬vAå§—üÖÕpT÷é® ÿu€ž—ûºê¼9¬>†ŸjI<É$ž4Ø•ÉoJ½áˆ$’úâëþYÛ¼ŽˆÿòÒŠ~ùóü}þê}_câ«ï xrã\ñ4~\›>DOõ’y•òŸöƱw%äóÜ~òñ÷º'îüÏúg]ÿühž*µÓàý\i½öÏJói7Ç—GÀ|ð”?XdwIÿ<êÔ¼ÿãôý+N{ä¸$òã·ùéþÓŸÄú¯öT$qì‘Ýëcíñ9¶¸XXÔ`µ’/8ÿvû<ÏÝ×}?Åf}*=ìÓËŽ=›ÒOõŸôÒ¼êîÇNµ±¸»ŽGŽHßcï’³¼ÿŸ÷»ýºº”Ž· ‚­ïÀ~÷ÿ®•ï¿gOíýBÇþ~ ¯÷ɿ˯lø;ÇãHäI?Ö&Í\Xßáž—a¡õ_pì¾1j6¶:öWúÉ$Ÿz:Ë8ëç4ßÿ~ëÖþ-Ú}¯U¸× ÿxßÈß^3¿øüÏÝÉZåßçpð ~e}¥ðv8 øsÿ·#×ÄÞe};á]réþÙé^Ù%åÃìtó?y,ËßÍÇß/ø©©&£âÛ¹åÇå¤{+Î~ãÿÏHÿØ­ÿø~}_’Öy<É$HÝÞ¹-ûbFõÝ‚÷ {\'Oý”î<%¦Á®xŽÎÕäÿVûÑëÝ®¼Oÿý­Æ¹}þ²DÙj•âÿ ÿâë8ý\ŸÁ]§ÇKO°êVþDž]¼Ÿ&Ä®*¼“¯ïŸ RçÆòLñ©ç{¹äw“÷’|ïZ:ÉõË8'ÿWçÇòW9&ù<½’¬ûûêݤïñÈŸòÍ÷פþôŒN “ ÉDûGMÐíg±¸º}ÿ»MŸ%yÒAóÉ¿Îû+¸ðÿ4©<yuk"}£øÒI?yæW•è××ѥ泿Ùíî>Gùé_?†¥8Lþ|ÄÓœ'É3Î|Mh÷W×Ðoòã}é¿þy×›j2Oçù–›<ÈÓäJöYÿä¨j7ÒtJúŠGæXŸÜ=³à–±¬Ï©Fö1¤’FûÓÿ®ŸÃðAãÿ‹×k›#~÷Oùg$•ÅxKU±ðLJ.$µÿ—{_“ü³®«öz¾Ócñæ¹â«4¸ÓîbNÿòÎJøœÚŸ'<ÎêuO°gÒ¿±¤·þÊ‘$·“÷‰ÿ<ëűÁ£göïÝÉfòH›?å¥zN¹ý›¦éR=Œivÿ?Éÿ-+Íuùô­Uô½FîDó7ü›ÿç~yìùçÎ}£k¦¦¢›î£òþÐû÷¿ï?ÖS>#ZI}£Hÿ?ÙìÓÉû¿.¯iWpj:¬žGú¸ßÈeQñýÜ—ñ#ƒ÷—±ÓþzGtÒøÏHòëäMFûKÒ¬dOø—¦÷òäÿ–•Óßj)ckq³ýeÃüï\>•uk¡ë:¢ZÜ}¢O¹¿ËÿÚ•=Ö«£ÜO$‰™÷ë´ Ú5Ôúnq¬¤‰÷$wGÿ–•¥ð¹î ±ÓöGûÉIÑ?ë¥prOž“Nƒd’Fû<Êõ Īçƒþ>-ÓÈþZV•}ȵ)wˆ'ƒÃ6?nOÞj|îÿôÓþyÇ[žD´±’yÿyyxûÝÿçy>¥©Oªøžßdždvï½÷þï÷•ÚÿnG ?Ÿ<žgûŸòμڇ³2¾/Oý•'îãó$¸xö~ïý]xG‡<½b=SMù-î,ßc½z7ˆõíË«fê?.ÎÍ>Dÿž•ÁøFÒÇûMF/íš…öý•íá©û‡¹†3¼#ãþøòßÄvËÉ,þGGÿ–‘ת]~ÖZ?Ú¿±çðºYønñ$‚ê Y?y$—Ÿë+çßÚOô—Ö‘¼ž[üû?å¥y}ÓÁ?—u~\’>÷wÿ–’WÐa©Âp<|n?@ßö«ð]ݦŸ¦¾—=½žŸ}oä×¥¤uê þ&øKÇ ¬Zi×Äi©Ý;þó÷qÉæyrI%~Yë }'ÜûŸöιÇÖu]ÌM*â}>;Ï‘Ò $·ó?ë¥tÒËyÏO’ìG‡þ%|9“F·Ó × ’ßK{4K§“þZyŸ¼òÿç¥w4éüA¥¦•ª$–rZßÎû$ýÜž_ú¿ûi_ŠšTžg†6&øã>tÿ¦•ôÃÏßxž =òIo§Ù§ðIåÉ$ž_þ‹¯7†ä3§†çúçõŽ£ûHÒóP’ }û<¹<ÈëÏ>É£Áw¥èÓépIÄs¾øÿy—ÿM+å \»Ð'¼ƒ@’ê9-Óbo“þ™ÿ«¯ ×>&øªúú9ìuK«xìÞH6?üó“ýeqS§Ï?d~¼Çi§kYùöi$e·õŸ»¯œ>&ü/ø;¥k–wÚåœÿlñô–»ÒOÝÇÿM+Àþ8×?áÑõ/¶%ŽŬhèñùž]|õñßÇ“ê:—‚ÿá#‘#Ñã½’GºHÿy—\Ô׿ÈrÒçç=Æ>O‡š‡á÷ß%ÅåõÃüÿ»ýÜêë‘×ôm_ºÓô=bÝ$ŽK‡ûù\Äo‹×_þ*Hš&—£¤ˆˆÿòÒ?/ýes:®£?мyá;¨7ýŽ;)éI#ó-ÿÕÿèÊéÀÓ÷Îê¿äŸð¬µ‹´ZèãÛÛÜy±ÿ矙û¸ÿøå}ð?Jñ¤šæ—©_j‰yog}i¤òÏË“ý_ÿl¯Ÿ“á¶¹&¿¬Aý±uo‰xö6©q'ü³ÿW'™ÿm#¯WøiñCÖ4»IõÈ/,äÕ-éüÈäÿ–ž\‘Ç_I‰þ ÅOã?dÿïº?ïºŽŠøÃsÿÒýø±û¿ØrÏþÅÝ#ÿEÁ_:R$÷q¤ŸïºÏJý–ø¶žgì+gåÿе¤è¸+ñÃÁ{'Õcóãýå¿É±ëÜ˾ØÁo·éÏ%–ž\%Qµò6Gi<Ÿ¼óþG­ÉïÿíÈŸù¨ßy–¯æZÇæŸõ•í}gÜ:=™èÚSÏvŸë<ϳü›Ò³´©õH/$y?w#üéTm.äµÑþI9/'ùöVýÛ½«ÞÏ97ÿY^MC¶RõÜ¿™~_Éþ²µ|꣤gvÿ»’Dþ ?yÿ,ëÍÄŸÔœþëDt©ôíWìpÿ?—˜›ÿíQÿ–•i µ¾Ñ¯ ’á#’7ùëL1óÜ}ü+C’I-ç§úÍîõ«ï#Ì®sÃèðiÑ£ÿË7­ù'Hþz±Oñž¶AÉ , ß ëÙÏy×üyÜA"&ÏùgU<wÿΣõ×ú¹<ÄwOùçVüGáÏì? Ûë—W%ÅÃÇò%Aötv:>¹žÿgöNþet¿€ü«;Äá}¼Çé±Ýë:Ç‘òG¥Ü]otùg^ï¬Xè–7šsÆŸg$ØÿöξiƒU{MsPK’G¿z;ÿÏ:ß×<]u®$rOÛÙÆ›6'üô¥TâÃa§íáÉ?pÊO¿¿Ìýåv¾×?°õÿµGþ²D‘þÚ«® çHÿÕ×kðËJ\ñÆ—jÿßß\Ø“õ®#§©ËñcNû4ÿ?ýd½ÓþšWÍ/þ®¾¶ý cÿŠrÏþzyõò’W6 ¯¸xžÿ?yû¿2½{ÃñÝ|6ŸCñ2F÷]âoŸþ™É^4ÿ,ëì­6ÒÆûÁZ~¬lòä‚=Žÿ¼ŽJ×S’?ˆ?`ð/‰º­®³ã‹ë]’G"G³eyçÉÿ=j÷ˆ4¤Ñ¼Ayk'—÷7ÿË?úgXò}úé§SžÓð?öSÖþùxîÍçßû´ýÝz‡Ç{OµhÖz¯ú¹-çþ ñ¯…ÉŒmÓý‰+ÛÇí•üÿïÿã”Ï?þºVçˆ4ÔÓ®¤žÓ÷–r?ÜHëŸÿYûÄÿYýÊõiÕ÷Õ²œÚ…hí.§µŽO²ÈöÿìW¦Øøþìi4íFßË’ßî:Gþ²¼žý÷êw‘äMþ®ƒ‡6áz zn«âk]WÃ7XþïÌûïÿÆëæû´µ‚xà÷qï®óísÁk$ìû<Ÿ}+ËüO&˹Çý_ûòν|§ã?⌖¶µ$ðNñÁú¸ÓçÙTu[G‚êßdo’$nèñÿ¬®r çþ×»Oõ•Óì¾»ºþѾßqº|•õO…øÈõßIæiÖ²yvò~áÓþzWÒ|Mý†ŸðŒxªÝ#ÐõÏ‘ãÿW%|¯ccò^j7r}ŸËûŸôÓþÚWÛ>E§ÂO Ýù~]Äi³ýt¯—Ïù99 0ÞüÏT´ñ±‹dð^«'î㵓gý4ÿ¦”iº<÷×ÖqÝÆòYÙ¼›ÿyÿ,뇟Qžíôê7 $—²"l“ý_ýt¨üâ©.õ/${ã’4ùþY×çõ)ò[‚¤uV:®£iªÿÅ9²8㺓äy?ÖGPkž-}gX“U‚DŽ=. <ôùéXñ¥®›zŒ÷ o=pu¬Ö²j³Ü?úeÖÇD¢#¸ê´©ôèü3çÏqþ™xòHéÿm$®È´´ðÌpG"Gö‰ÿƒþþW ¨ùpx‚âÖÝÛÛ¤{³¼G<–0G©i[äŽ87Ý'™þ®º½—¾~®•~–Ÿêãžáß÷•è^ñÛ “XŸdvöïûÿóÒ¼[CÔd’Öñ-Ö\'üó­”Õm,`³ÑÒ7òìþy÷ÿËJ詆9jU=SÓÁê?ú¿Þ|ïÿ=(ÖgžûC¸¾ž7ŽÞÝ>GÿWæV†úê 'þÏó<Ï2’OùgÿLëŸñV¹w¨§ü#þ_Ùìî<½›ÿéŸúÊâöftÍÏì´ð•»¥ãýžáãùÿíyç„­'´µŽùÿå£ÈèŸòÏËÿ–uGân«<ú—áô÷vï¿ýsÿžu?‚¼ù ’?ŸÌÙÍŸòÏ˯J/pî£ñ™ßõÇ´¾¸žÖ4·¸Ùó¢«ÿW^{öèÏæ}úà<c=׉ãò?ÖY¤›ßþy×·ää8q5}ó:{§þÑ‘5þdo÷ÞªxÇç‚ÎïËýÜŸÜ­)Ò{ëë‰'ß$ŸíÕaãŸCÈÿ—à¯[ Sß<ŒM?pÑÒ®ÿâ™û ¼¸¸ºû‰ÿ<㯬¼+¬_x~ >Çìï~dhîŸôÒ¾?øm<ë–ðO'ñƉÿM+é};\žûGþÍžO.;7ßþ¯þšyuâçôŒð^ùì:åÕ¦‡ý©ª§ï>ÏóìJð˜,R ‹G÷—Iu¿Ìÿž•êþ4K¯øV±ÝÁn’}¡ãGÿ¦•ógõùÿÐ-ü¸<‰ßþzyòμŒ·ß÷Ú”¹ ~…|Ö Ô~ÇÜ$—#ì¯/øËucwàM>õ‘Ç}p›ÓþYù•ã?üc}áËf ôy<¿µ@ÿôÓýenxãÆ¶—~Ö4;7¸ùüôûiÿÛ#­}—%sÍ¥OíœÏ€Ó˾’úî?Þ}–Mïÿ=+¿ƒJ×>èXèÛ<¿ìHü÷õŸòÒ¾}Ð5VûNޏýæøàÞŸóÏ̯ҟ üñ6¿àëÍsC¸µŽãXÓ£<ÿùgå×M*œžøbOõ_üfÑ­,ç‚Í5ãO²£¤qù‘Ûù~_þŒŽ:ô¯ž#×?á.Ñô¯èïo%Æ·i±<¿ôy?yæyþgþC¯^»øñÂî?D·Ñ5ãO-ÞÖòO/ËŽOùgSø+áGÆ]+Æžµ×<7ö}/Oºçt¸ûG—¤Ÿ»ó+Ö©Š„áÈy´ÔŸ³§üô£ìéÿ=)›‰_*tþðÿÓýø§"CûZú—tOýÖ¿vOcâ9.­6Gæ~ò¿f~/ÿɈÙìÿ¡kDÙÿ~à¯Å‰ÓÌû<òIû¹çzöò“ÓÁ–§O2×ísþòMÿ"Tú¬ïkHíüÏ’Hÿëz«r%ô¼Žò ç¯6þÎÔltí?í{?ÓzÓ:î ùôÛ{©<¸íÿËÿ–u–'Ùó¹N§ï–´o?Ï‘|qìù+£îW3c>•kòGpžg÷¶>×ÈÿxŸ¼ÿ¦•äbiLþŒá|M4aråsÉÝ]ê^ù>Îñ¿Éÿ<ëgσ÷ž\‰åÇU-{é'ƒd–÷ý”R§ÈyãÿÏOúçF$óxo6„èûÄ÷ÚŽ±¬øbK[©>Ñgoò:ËJí`´ó>Gäo’??çÙÿ,뀵ԞÅ.<¸ÞHîçÿ®”i^'ü?®hoÇûõ¯µ÷€ÏòJЯî@ÍÖ-.­n´ýEöIop’'ÉW­.’ M5ã’K‰䪰j·wÚU¾=ºG%»ïOùéOMþgü²ö‡Ýpç ÏØCÛÁû¿’½oà×îüygä~òHÒOž¼…$O¿æ~ò½›à{Áÿ ÏýÉ+š¥Sëx£’YòÓûAH’xVÝÿÕÉçÇ_ WÖ?´yžŽùgçÇòyuò+þò¹°_âx{K÷ ÿÞ¿@4­:=KÀövû¿ÜGó§úÊüÿ´ýãùíÇ_¡^ŸìºUœb¨þYÖxãÄñ§$à|Gâë[«]~ñ.¿y$o&úæ?ÖWcãù?â±Ô?ë½q{ÿÖW¥‚«î¢p¿û´ O j7zo‰ãžÒ?2M›½Ä÷×sǾHü¸ãŸc¢WhúÇö7‰ìî§ýå¼;Ö®±¨ß]겤}žÞáüÍŸûR»ja¹ÏÇ3ü7¶­8?öªj©'ØÖGòlõõÒ¸©çû]Õåòl·ŽÝ>⫭ϰϦ¦¡äHž]ºFîž_üô®WNžÆx.6GÂG£Ö´½ÃæðÙ•j3÷ -'ÿWçÿËDþ ´ó¥Q±ƒì7ÑØÁ™ÂlGxës\Ò¿±î㱎á$ó#ûôT?^á.(öÓö32Þxüý’¼ãÆ)äyrÏÂ|õߺWãóýžÿyþýwe?üFÁQú¯9cÛ“ËòÿÕüŸôν XŸìžŽ4‘<ˇÙþ¯þY×á_²Ï¦ÞZ|ñÞFûëK_ºyäÑôhãHäËÞõïâjûçó:G§hñÿ½³Ó§$¸¼¾Ž4úg_Iø‚ÖêÐþyž\r<žz<òÎ8ÿw^á˜.¿áaxJûGúžÿjtÞW¸Gñ5ÿŠ:†«§iÿlŽÎ ÿ¦•òÙ—¿1áÏ2’Ö=ÆâÅ.I#Ÿb#ÿÏ?2»:Çþû«‡±“þ>çÿ¦uÈø›Y‚ëÅ^Ùß˳ydŸòÒ·>Õ&¥c&¿ÈþO?ç¥xµO­Ã{ãYþ׺«ŽDß±+sû)ôoYÝ'úË-ßü´’Jó'×$’êÍ<¿õsüõé^1’ûþ8-6y—^Ä®Z¾ç¸t{RÞ°éc$ö¿¼“gÜùi\ýö±igî$’ î‰ûÏ/þºV®i<úoÙgÙöÈÓfÄÿYÿm+6=6ÇÀö2@û.5‹ÄûÿóÏþ™Ö´ù¥"¯„lmn­o/®ÿÑãß±*õÕ§™æ?úÏ´|Ÿ%giÖ¿ñ'Ù‰‘ù?üô’®È÷V‰%§ü´ãùßý]YÍPõX#±Ñü+¥ßA'—qäH^W>¥õݽõÔ–ï±Ëÿ–ukÄÌòiQ§˜þ]»ýÊʾñÑÙéÐFñüûÓþZIN#<1â=b fêI$ÿžòlDÿ–•ÑxH#±¼¾’4Ž9<ÄJç'ƒJ-ÞÖ7’K7‘Ýÿç§ýsª)‘á·y{7ìI?夒WSøKÚòj©~Õ5„Ùþû?ç¥yÏÃ)î þÔ¾óÌ“îW¡ÝX½ßÛ{T¸òï?xþ_üô®+ßaÐô=>îxÞHïáÝþY×n©æã_¿Îsï²ÖúDžO.K‡ù<ºÎƒìŸe‘#ß$‘üŸ?ü´ó*ŠjSß]Ç<¿™qæ|þ_úºŸQ±žI.<‰?盥zøopá«ïÀçüw›â==ÞDýÛïIþY×Ó~¾òõ›ˆ'ÿ—„“bÓI?Õÿè¹+ç+àY³ŽM’GxŸÁ{6çÁugÜ}¢òÞê4ßÿLÿé¥ræÔùÎ,·Ü™ïZ¯‹`´Ð#Ñä·Kˆî'ÑëæŸ]iZ‡#‚Æ?.â;écÿÏ9+×£yï´íc|ž\–o#¦ÿùiÿLãÿ¶¼¯ ñUÜZÙßyhŽá6~ïþzW“–Ó÷ÏKïÀèþ jSýº;Y-ÞH÷þÿþ¹×¶üFðãÆ’A¥H‘ý² èŸóÎJùëáˆàð^«%Ýôo$r'ϳþYÇæWÑþ*Ö4©'’êÆã̳¼µßjþ_ú¹#ÿ–už6—ïÎGÎÞº{]âêy?³¼néÿ<ëõCÅ_,~þÍ>ñÛ½çÚîAqåÉÿ+ò—Ã÷nžM:Ýý¡$Gÿ¦’WÜ?´‡„¬~ézüšå¾—åÀ<ž_™åÿ¬ÿ®uÑRŸ9ž ú‡ölÕgþÕþÊ‚âêMTÓ­ï¬`xÿwo$Ÿ¼’9'ÿ–’o¯šu_|WðÏíuoዽB{{=cQ´GGÿy-üÏùg]Ÿ?oχ¶1é~±ð=öŸglâÞO.?õŸóÒºK³×Æ_ŠžëKºÄš}Ôibïü´ó?wY{)œTéý³ôçÿžt|ÿóίo£}pš{CÿÔýøÅ?—ûÙ¿ýKZ'þ‹‚¿,nàÔ ’ÇÌÿVŸ&úýžø°OûÙ¤ÿêÿáÒ?ô\øM¦ÝÏc}òøëÛÊOK uOû‡·Ÿý\q¼uÐxÖt“Ë‚ <Ï3ˬ›äH>K½÷ì’ ÔgóìtùÿÖI÷+´÷)|Ýy–º_‘ÿ,Óý´¯ t  Ýx;K‘/í—$ûÿÏúºùoÄwi?—{<Ëž¾½øeð‚ VÓû)õ‡ŽââÖ9ß}¼Ÿg’?õž_™ZÔ§É–ž'’¡Ã¿ƒ¼?/,SPó,ãHä‚t“þZI'ï<Ïúg]÷ÂÞûNÖ-|¹DwùgnOû9ÝO¨Çý¨'™Iç¿ü³òü¸ü¸ë'ÄuËM=GÕãT‘$‘à“÷rGûÏÞÛ:çøÎ¯íjð<¾ë᮪ž.³Ñ´ë2ÞóçwÝùtkÖ|2÷“ßYÿ£þñ?ÖWyá†_¿´lü½A<¸ßf÷¸ÿW'üô¬ßx/â®yŽýCË{„ÿÈŸòÏþýÖ^Ïß4¥Ö„=ù•lt?ø:}?U{w¸ŽãËÿ¦‘ÉŸë#®Óâ¦}}£hwPHñÇìßåÿÏJó)õˆÚ„´»¸ßý"xö;ÇæyžgþÔ¯T×Ö;ËtûŸóÎI+æê³ê¾8¸žêÝíãÔ “zyê㬩á¡8e‚ãZ‡¾nAwkOûiF zXß«Î=;$žâ;HÞâ8þû§ï?åt~×5_ j1øƒJ·I$äÞñÔÿ§í[Ïùio%¬Žþgü´¯ª<%kiwá[8ç·I>yç¯71ÄòÒã™Î±¬xŒ~(kþ4Ó¿³u4·Ž7ß½#’¼Ú7ó?ùgò|û㯸-t} _/ìqÉýÇýÝpz§†/“POìô’Kx>y?é¥pà±§nSÇÔ0Ðäó¤sÆïûÈ÷ïzûCøáXìmÿâ`žfÍ›þY׎øsÁÚö±%­õº}Ÿì±ïD“Ë®ŽO„þºó6yñÉ¿ø$ó+§ÚsÌós®(Âã'Ï3Å|c¨Á©x›P¾±ýär>ôt®f½éQÿlGý ñÿgýÏ>?õ•ã¶7zÖ«Š«þ7òëÒÃS?CÊxÓ F j7rFò$uÐyòlùäó>JæäŸÌy$’ÝÿÑßcìªVž ívúl›üÉ+×ö~áó˜ln¶+ÛOíž§_=õ¦±i©IåÜIötGÿž•Åj¶/iuqúϳ¼hò'ü´«×¼xàžI-äþ®rî JDޏOÞ>÷wÿ–•–‘óùþQÉ>z3=FÆ{Yî´x$“Ìû:oúéQøüÍWþšFŸr¸;K«ëK¯·}¡#îVÌ—wS¼‰$žd›7½gŠ=.§õiûiÌ’yã<÷ýÜq×x«R‘Ìó#ûè•ÜxŸ÷~ŽûÌxä¸}ŸêëÇgóä´óÿåÞ?“ý]}S†ä÷Ï'Ä.-öÓä¢t~µºŸX’8$ÿXžcÖ”óÇ}âÞ=òGfõ£ðñM“PÔ§‘?wkóì®9'ŸÏ¸»µ‘<Ï¿]µi{çå5~Õ4ÚÚxâI4íò\\Gä"?ü³ÿ¶•ôG‚ü¨èŸÛìòäyßþzWÆ> ¾‚;½CUžÝä¸7¢'ü³’¾Ò±ñ4|(Ðô;K2òóøÞ¾;ˆ>3ÒÉ=ÿ|ó-WRŽOÜOþ²;‘ºÝúW‡Ò;Y÷ýŽ?“ç¯Õnç±Õ²®¿w&ýèéÿ븂Æ}FÇOMWúEÔ{Ñ?çpÔ¥îý?~dGüN>Ékû¿´>øë´Ôu‹ëK«x.¶}žÏäGxÿå¥r¾1û.•âÛ?°Èþ]›Ç÷ë£×ûWNQŽ?´GòI¾²©Tî¥HŸÃþ5ŸJ{ÇÒ­þѪ\$›ÝÿÕÇ\Œ÷rkòH÷wé¾yÒOü‡\ê]ÝØéRZÚ~óP¸ùÝ<¿ýIc¨é¶šÆ—¦§ü´ûïå×M<7Û2©Téõù'N³Ñô}ñÜGóÎþ³þþWA®'Ù4ë8ç¸I#Ù½Ñã®oQ{¹õÍRêÖ?3ËùßþyÓ/§Ô^I'òÒHíàë_dy´ýóµÔ®ôëí68ã‘#’ãîWá[´¾’ñ.äxä·û›?ÕÇY:åõÔooki²8ãHÝ'y?ÕÖW‡.þæÿiG²HîáŠt½Ã§ñ—;ÚÞXÁ'ï>ä ÿM$­VÓËÐ#Ò “Ëòü´tòÿéZ‚Öï´ù ÿ—‰íö?üô“ýe#»yüiúvÈìüøÑÿé¥y¾ÐôªR3¼w?öSøNƒ™n‘»ºËOúg\çÄ;¸-,mä´Ë·’ ˆŸôÒ§ñt÷ZÏüÈ?ÕÙ¼i³þ™×1ñoýêÏG’O2Hçûÿ,ë×Àüg“Wà9]*9çK{#O3ßÿ¦u¹§‘¨Çÿ-#¸ù³¼*÷PiQÏ~g—æ:Tú”÷Ryv?êäÿYóÿÏOõ•èÕ«ïœø€äuû¹ã¾Žî ‘ýö×:õ‰}á™5›ÿÞ\yñÿËJòýfê ÒâGý瘑¿—ÿM+Ò¾º]ØÜiÒH‘ý¡$tGÿž•ž;à8iÒýùÕOöIíuËäxä“Ëx$®+\H'ð­¼poó#“Ïÿ,ä­É M_|åÜ'ÏLÖ “XÒ®/ þüŸ"Ï:óp?Ä=˜nC‡økvj·7Û$ŽâÖDMÿçýewzýõôžÓímwÇqgu&ôOùiÿ¯Ñ’ +\ûGþ\ç¯t´ñ5ŒI<–~d’$›Ñë»Ož|ç›Hó_í(-5(þËÛÉpþ~Ï3þYÖ®¹ª½×ƒ¯4¯õ‘Ç>ÿúéæWâ9y,î£ÿW³c×U¬XÉ&£Áo$—ŸÇÿ=?y]4éBùÓOß- ëËï’O³Á'Ï^•û?<übð_ØyÆ©nÿù¸·ž Â7’yqÞ]}—ç÷Ÿ¼ÿYÿ¢ä®›ösÐçƒã¿ƒìROÞ[ßFïÿM#ó#’º*Tç€T§îÑ7ïhýí^‡ýRý*JøÓÏ?ÿÕûÿã/™ÿ gäGûÉ<;¤è¸+ðÆî±xÞëýdŸòÏþy×îÆiÞ×ö ·ž?õŸðhŸú. üBŸGºÔ “Ró97Æî'ü³¯o*øì¹¨ù÷SÙ¢~òÞá>z<ˆícýÛùŸÀ•zÕãƒJût‘ý¢;wþ™ÇDè‰}#Úïû<‰òWO´ä™ôøg<‰$¼ñ¤žgßùé^ÅðóÇž#ÒžÞ R±Û¦ÄG“ÌòëÏ|9uÉâ ,`¸ýÜŸ:=wTÄþìó*a§ñž¡cñ³Çúv³$ÿÚqçì/Ë“þÙÖ—ü.Ÿݽä~deºlIÒ?ÞIüóó?çx´ö“Á’$$‘¾÷ÿ¦•£i³ì2G<Á÷?ç¥eÎgì_ðçÆŸZiQÁö8.#óÿ׿îüÊ|ÿµYÒÍã³HãÓÞIÑOÝÉæË?ü‰^£ÝÉwkp‰û¿³¾ôDÿ–u±äO>›qþûÈÓ~ÿ/ý_îë:œNŸ<iø•ãÿj>ÑßG¼y5 ‹ë{éÑ?ÕÇå×GiñÃFÔ¼OgöóÞiöé#ºOþ¯÷Ÿêÿw_0ÿcyšVŸ¨ÇûÏ-$ßÿÛ+;C¾µÓg’êxÿyqò%ií!ÈeK ïŸik?|1¬ë–ú¤i%œpHï—û¹$ÿ–~du¥cãÏ…ßÚº]ÔñÚÛÉx›>Hÿyÿ\䯕Ñç㾃gÙölùë‡ñÛÁåÁÿ2Í÷ï®5#§LýÔuÏÿ?2Çì÷‰±Ý$ýäuáïំV°G>£[ÉguäZÀ—ë-äÿ–•à–š«Èš^ªŸòÍãw®\yäÕo'ó?ãÝ÷ìJÓ Hέ#ïÿ xÁz¥å÷˜þ\ipŽïåþóÌÿWå×½é^ ´µðþ–‘Þ?™"GòG_•šæ¥c?ï.'’;„Ñ<ÊûóFñÆ«‡ìôä¼xã‘#ùÿí|æN:p8Yò±cáǾ±ì7eäžgî?åŸúÏùé^kªü5×-lu˧Ù%ÇÜDI?ÖUjº ¼òãîIåÿ«¯Ö~6øž{é/­n?³ÝFîž]på´ùÎlO¸zV‡á_ZxžIþÆþ\pG¿þºUMsU×4}FHKžHäMîéûÏ.JàîÿiÚ_GuºIæ$"IåþóþšWâ¯ÚRÖ^8ç·O/~÷Ù'úÏúé_SO)o´K«T’Oõ’}÷ÿ¦’W;áÄŽÉuo‚wû%ã¼»ßòWi¥Z=ß™<ë#O2½ÒÇàe§ˆ< £Écqö{‰9çwŽ?ÞUø-¬èqäj‰ÿôÿJÙÿ-<Êί¾ÚgŒëþ ð]÷ÿ±ç·xõK3cÿÓHëçíJïËÓ£?å£×Ñž<øA®húULj>I,ãùÝ<ÏÞGÿÇ+ç=GŸÄz¯Ÿ»Ž??é} §$ŸÄÕöÓä4£‚};ÀŸÚ>cÇ& þEaÏc<––ðZHñÉ"ow¯IñÄéiáË= 6Gö?Ý?ç¥qZ­ÚZéQÉÿ-6F•ÑKß8q>áé_ ´×MXû‘Ü\$hŸ»ÿYÿM+Ø Ó­lSKÑ “þAÿ";ÿäJùÏá•õô”“¼%¼Ý?眕êë÷ÖGt–ÿh¸‘7¾úù|ÊŸ=sérš¿¸<÷ÅWÛ'’3ËŽ7Ø›+Þ MGÈÓç´¸I.#Ý£ÿÓ:ðÏiQê^-Óîã“ÌŽO2yöGþ®Jîõ]KQ´º¸Ù™åùŽŽŸôÒ²Äÿ!é`¹þ2Ʊw}â=~òéã±Ç÷?ç¥vž#¾ƒFÓ¬ô _ÞG–õåpx‚} º¸Hã“Ëù(ƒ_ƒYº’î{„’ò?àÿW\UpÓç=kÈniÒÅA&£=ÂGö4‘Ñ+*úÒH5[=V8ü»xçùöGXú¡uoªlÝÒOÝù•À]Iÿι%Œ÷ yÉ$ýÜŸôμ_ùx{ŸsŽþÑžëâÇÙ$ÿ‰äzå~(]%÷‰¤Ôdÿ–#ÿÛ:ì|§_ÂUo¨ß¬Ù#ÿßÊóßéÉu¬x'ÿ—wÞŸôÒ½|Æ|Þ7à5|?"ZXÙùêöI³þºUMVIä¾Q“þYÏô­Ÿ ¾•ªØÿe_£ýŸìûþyÉGˆìg´Ôu ÿG’DÞˆŸòÒ´ÿ—áKà8íM’ÖîDÿY“ÿèÏõuÑx: MËŸÌ´}ÿ眕—ö×Ô’9<¿ÞIå¿ýû¯B“@‚ÓßÛïyæI#dzgüóŽºjb~ÁÃO ïóšZ­¤w×_jžGýßÜÿžu…áÏ}—X¸ÒµY?Ñäû‰ÿÆêMKXžx,þÉ"GóÇ£ÿÏ:óÙ.ç»xçó<»‹wÙþ®¼Êt½óÖ©TµãO°ê¶z’FŸé½ÑërÆêû_×ä‘#KxäMû:“Æ6]éVwSÿ¬‘#ùéú>¸ö‰÷q¤’H‘¢:WWµ÷*´½óŽ×-#‚ëì3ÇåÉ¿øëééV²xcGÖg·{±¥Â$‰ûÏ.OõqÿäJù£XŸí×w—óï<›?é¥}Cð¿Xþ~©ÿ¼û=×ÉKWÜ:pg†|Wò-_OÐ-.?ãÏÌwùéq%{OìÙ?ü^/ ëHŸ¼žÞùé'™_9øªÒêû_’K¯ÞIq<Žÿ¼¯¦¿g}ÇJñwƒõ)äI>ѨÚlOùç$’~òµö¿¸ä3ö^üÏÞôo¨‡JZò¬x§ÿÖû»ã£Éìnð¬ÿ„kDÿÑpWáj]Ï=Œ{äy$Ù±ë÷gãŸü˜~gü³ðÖ‰ÿ¢à¯ÁÍ6xþÉx‰þ³~úú\’Ÿ¹3§ Pëtgòío-$‘<¹+ Ÿý]š«ûõç63ùïŸòÒO‘ëÕ ±óôëw»‘>äŸ'ý4­14ù¤Ã.s’ŸÏîþYÿÏJèô­bH/£K¯õr'É'™þ® Ô¿wc$gîöF›+è þÎÚ?ˆ<9¥ëj— ¾¸±8ØBó8³,Ê~3Æ®­gû,oÿô„ù6W9çÉkwÏ¿÷i³ý]}¥?ÀÄžÖÞÖ Aäû?˜‰ûºã¯¿g­Jwßâ}ÿõopá³ú›W?¡3åíÒ85]b8ÿwæ&Äÿ®uꞃÌÒµ‹G$’Kéÿ]+´ÿ…âkK©'K„¸ŽDØŸ¼®/Uðÿˆü®Gk¬ló. ¸$ÿ–~]jñ°­?pטágðÿ‡,⎎Iÿ姘ÿM?y\tz]_[ïýÜq¿Ü­+ÄOà½Bÿ–qü¿úiQé^}׈ãŽÒ7¸“dnž_ýtÿžuÑðßµ‡Û5ní^ÒêÎÓý\rO'É\wˆ-<‡Ô>ÿï=›ëÓ|wáýr{í=ãÒî­ã·}ï²:àï¤Ø÷ï$³ùÝÿE×NÎpÕÄBsä³á‹O?Áמd¼>åy–²“ÚÁöäÿ–²½SÃúĨגI¾8äMŸêÿÕ×›xþ@ðyo’>ÿŸÌ­pÕaíýó‚ÿ„í.ÒHÿå¦É>zð‹¹÷Ïþ³ýcÈõ=ß‘‘É"~ñ+•Ô®ö]ÇüóOùéFS”‰ý¥í‹WwÞ™æoª2]ÇyóÓïÔ:jyï#¿ü´J©¦Æÿj’ ¨ßýºú1¿€ët4òÒâú?ø÷·ù÷½¾ò.¤’Oõw?ý³¨.çžÆÒDOø÷‘þt¨ãòüøàµÿYqž® —!èo>£u$þbyq*}*µÿ§O³Ì#Jånîà‚ÆÝ ¸ýæÿà­ ÞëäÝÇ'—¾¼«ø|÷ÚÌ{÷Çå¾ý‰%ik“Ý}º4{‡’;„Ù³ÌýÝ&•¥O©xšDÿW$~gÏUuYílo¤’û—nû+*u=þCª¥.Hsž•£øïÄ~Žßí×v~b"?üóòë‘»ý¤5Í:{ı¸{Èî Ù±ÿåŸï?å§üô¯ñ¯Œ__Õd{_ô{8ÿ‚¸4Oùé—^æ )äŸ<Ï’Ææ\þä\Õ~3x×XÒ®4{ëǸ·ßò;ÖW‚¼Ai£ÝÜO$ž\’%pq¼§ÉUcŽùg¾9+ß©‚ä}gèüA¬_j7Ò?Ïöyz%aÿhÏwÙgÌ“ÉQÚ?™ÿ-?yP?ü´ÿž•­,4!:˜™ÎgѾңðäv:t‰Æ ñ¦ôÿžqÿ¬®ÇQ»‚95÷rFŸ%|¯áýfïÃ÷V÷Ö¿ë-ß~Êôñ?öÂ^]¿îä‘6"=|¶;-Ÿ?9õ8,l'CÓ~¼ö:>±¬Ýÿ«ýÜ E£ßxª°ØÈ‘ÛÆŸ¿ºy<¿3þ™ÇYZ棇ðçKµƒ÷r^yŽ•ÊiÖž ´ðÿúÄ’ÞOßïó?å¥xžÏß>¢ž7’‡s¬Âb‘é°o¼Õ?ÞOÝ×£höºþ¿'Ùcòã·òþOùéQéZ<÷~\ÿ'—ïwy?ÖW´øfÓJX¸×ã·òüÏÝ¢ÏJ1¸Ÿc@ô°Xom?|ßÓ¼kcáù<ÏÞI÷þõ•áý#Žñ5ÞO´}Äÿžuê6³Ï=¬žîüϹ¾­Zé^Cùï²9$ýÛׯÿiT>Ëû6‡žxÞÕ|w¡ø_¸û=œ—Q£ïÿžrË:ô?Ú#ö}O†¾#ûW‡ãó4»„ÞŸ¼ÿW^_ª¥Õ§Š¬îü¿ÞG2Úoü3ÓüLñ¤‘Û¤{ÿëzÿYäñ¸Ú~Ç~j²]AæG&øãø?çr±Ïk;ý†î¾‚ñŒ¥Õ-.¯ÏP·òüòy»£âo4mCü?ªy’iï¿bIæWÊþñ<úô—i¾I$ùþZWºx‚éõ_Ûß_~ï̺6'ü´þšW; É_œîÁfPB×…|U<úl—Ьò6"yêüºâü·ÔuY'û;ÜGx›Ýÿçoê^]¤éßèñìØèŸêëÃú­Ö›áÉ5/-#ó#7ÿÏ?ÞVTêûç$ç4«¿. Sír}žI4MŸôλÝÏwká¿ÿ«Žâ ›ÿé¥y–¹ö3Û¤›<ˇ‘þJõ½gb|/ÒÞÓgúÆû?çkSÜ÷Îl7ÁÈyͪNFð£ÉÿÇ]ÆùäðÄž\vé&ôÿž•ÅÏwiž~ù$“Ët®«ËŽIÿM{ìÿ–qÑPÖ‘“Áwi—þ²DÙ¾°þÃå¼’<‰'˜‘£ÿÓ9+JÆ 4«8ÒãÌòß}ZÑôµZk)"y–ÿ:#ÖgQ•}}wu¦ÇkÉ-ãûŸôΨéWiªÿÄ·þ=ãþÙѧ:A¦Üy›äû;üèÿòÒ²¾×c±ü‘Ç'–éÿ=?yZáŽZ¤sÏöŠlŽ9>GO/þZÓJú_Ái§ÃÝqçÿG’K©6'ü³ÿW_6H‘Ç}#¤i$~|Ÿ%}Wc§I€4ôžOÞ\|î‰ÿM+—2ÄònùúïCž}V;¤ýäq§Îõînþ×ñCÂïuþooª[¤ ÿ=$’HüÉ+Ž’êÆÖ 4í:O.K‹©}ÿë#Ž?õ~]u¿`Ùñ§áúAåÇwÖŽéÿM<ÊÒž$éÄÓ? ¨Õ/Ò¤ªC¥-y‡Êÿ×ûËãœ?ì û¿3ÃZGþ‹‚¿t¤òÞHÿç¢WïOÇ §Ó¿`‹{§ýç—áÝ#äÿ¶pWá§Gû¿/ÌJú\§à:°å ÿÒ®#“÷qýôz÷ëHàºðÌwqÿ¬ûÿõμ<¸5-ùuì^ŽêO\yry~\ñìG­scßËŒ­fÒy<¹Óý\Ÿý®¿Fþ¿üP?ï?q_ž^|V2Z?ü÷ù6Ë:ý øk²ii÷>ý|ïÀù~61üwñoNð«g£ßY½ä—:££éïqºHŽõãºÇ‚¼ik§IioûÏîGO-ÁQä÷Ï›ÊpXYÃß>ž±ø÷à ¿. þÕ’$óÇ^ñoÆš7мO£ê^‘äŽ8$I÷Çÿ=+Ì ÐñòÆÿÐõDß¿þšÏ:úöÇÇÚ¿µOÁîôø#“ý4ÿžuÀ~Ð:?Ÿ¥YøªÖ?2M=üÏõë#ÿW%x™N&½ò–ãg üó0?g{½Pµ¾.<¹ãÿY^í'‚¼1¨þâ}.ÖHÿƒ÷uùŸ¦øY±º¸’ÓPxíî?¹ûºÜOˆÞ8´¾·û±u${ãOžJúLË)¯ñóž¶e†­?~>üŸáÃÛ·ÿ•?Àÿ‡3¦ÏìôŽ?úg%zV•;ɧY¼’y’I{ëà¯|~ø“¡ø«XÓm/K;;©xüÊñ2ï­VŸ'9òôêNsä;¿¿ |9à ǬiQ¼ro>y+ä™?wÿLö}úôoüañwôì­rH>Ͼ7Þ‘×™G<Ÿë+ôŒ—^÷ÏJ|„’]Ïkw²9?wtÛ<ÿ³ê°ËO‘ã®.HüùãýçðWM¥I"$Ë:ôq4¹ {x/|è5[¸6lÿn²´ïßß}–?ÝùŸÇÿ<ê G÷‰éýú½¦Ú~þ9ÿç¥yÇÒR/Obð<$žgÏ]LJ4§þÊûT‘ùqÉ<=r7Óù¬ˆŸÜ}zÆ<~³‚ ?ÖOÿ+Ì̪û‡­‚¥ï› à߬ÞOåÿ•à_yœYÞ7“÷%2IÿÕÿË?¾ôŸ$ë?y%[ƒÌ´g™PO'™æ$ùûR¾ËÚr@øŸg9™^{ù’Uçwÿž•¥cá/]§Ú ·.Oãòë¦Ò¾ëúãþîÝãûïqTͨ@ôé丩ü÷èy?y^ÅuðƒY+ÎukSþþß÷ߣ ›ak ’â¡ïÌÄüÏúçH“ÉÕGyãÿ–t©=vû>xOÁ3Ü5äñÅœ2}ŽÏOµÞîÿòÒJ½á jWV±Úß^y–ÿÀ^Ukâ¯!-Ò×|qÆ›?ç¥}5á'yï­ü½’YÛ¦÷tÿ–uñØÜ4à}þSRøÆOàtŽÆGº¼Hã·þÿž”ËÒGŽýÜr>Äÿ¦uFúú;ï¶yryqÈþbo®›CðäúÝŸ‘þ²?Þ¾K‰ä‡¾}þ “ŸÜ=—FÙŒj‘#Žß÷›ÓþZW%â=r;¤ò4¨äýßßJÊÕá#ƒCÔ.àßÅ¿ðW‡ü+¾ñŒ|O&›> þfÉç® ‡¶;qÙ$ùJžúy7Þy÷+õOÀ÷SüFýœ.,cýåÄpI"Ó:üÖ´Ò§ä{èÿãÝäMé_u~Æ>'Hôms·RyŸgŸzÓO3ýeií9Ï;§>HLüÜño‡ìtkë{­K}¿˜þ^ÿùçå׋øÇÄzUõÔ–:ToåÆÿ&Ïùi_|~×>Ò´~îÝã·¸}îþ_ú¹+óÇQðäúkÇ;Ü}¢HþtÙ_S”û‡ÍæÕg8팉ý£™û¿Ÿd•îzåóßiZ]¥®ù#¸ºùþ¹×€¼ž\›çÿYïù+Ýô© ºñ6‡'™o¬ŽèŸóÒJîÌ¿œùü¶©ÜxŽ?°øTŽHÓÌ“ìñ¥r±ÏkÃm.äÿH¼ºüóŽ·#ò µŽê Ÿ¼3þšVnÉ<ÄŽtÿ®ŸêüÊæ©‰œJ>s™Ò¼©Auú:y–ï¾}’}£÷qÿ¬¯¤ãÔmd»Óï§ýÝœi¿gùÿW^9ð½5+R¼µÒ®I$‚DÞÿôÒJêõ>ÆÒóJ¾ŽI/.'‘þYÇ^F&¯<ÏKK’#ö­GPÖ-ygquò?üôó?Õ׬|´µ¾øÅá½GËòþǪY¦Çÿ®‘רÇc£]izTùÆÿ¼ÿ¦u«ðO_þÑøÅá9'ÙwžÄÿ¶•®ß9±Çô ú¥úT•Xt¥«>LÿÐû«ö‚ÿ”yܳ¤è¸+ðŸNºû^•ÿòñgýÏùi_ºß´ü£ÊOû´ý~øryüÉ-`÷r'É_C–ü:°äúÓÆ‘ÏÏ/î>øëÕô=I.´9>×'úFÉþšW—ê¶»ÞG“|qÜ|éÿ]#ÿ¦uÜx:ÇíPHŸòÎ?‘ÝÿöŸý4«ÆÕ=¼ÆZ‚ô¹ òÞ?´A½?yÿ-+ôWá%ßÚü£Éþ®M›+ó ËŽ ãýåœÿù¿D~ÿ¢xKGÿ–iòWÂñÀxYðŽ¿ãO xIã´×/ÞIGMõ•Å]¦ø5„øþzùûöˆw}Cùiwß˯’îxàŽÿsý]k–å°­岜£ÛCœýÇžºŽMšÄ\ß’¾ øukuñ6òêÇþ=üøö:«®Ö{Hõ[Ϲælù·ô¨-dÕcŽ}’Gùˆõô˜l±÷Ïo–ûügAðËÃ÷zÿФÑà‘#ŽK­ï_ zô&¥uû¸ìÒI<Êùßà/‚þéjž#’?ÝÈûÿôe} ®hzoˆô«Ußö{„Øû$òäòëæólo=cçóüO=~CóóáÏŽ'ÿ…“¨xŽ}ÿñ0Ÿ{§ÿl¯¿üM¥A¯øfóJxÒHïäÿž¼¯ƒösð§–ö?j·þw’½ÎÆÆ=:ÒÏGóâ;tØîõ–7sóq5 ~Dê0O£ÝÜXϳíï"ló?真»£M“̺·þYùñÿèÊö_Ú#©£øîMFü¸õDÿí¤uâÚ:o¾³Ìÿ–ñÿèÊý"•XVÂóŸIOÏ@ýsÓd°Ùÿ¹~Txþ3Ç ƒþŸ¤¯Õ½6.Æßþ™Á~Nøã÷ž;ñý}Ió×Ïðß¿Š™òø/Œæ ûÿ»ßZQɽ6Ï:‘$’8ÿŽ’<øä’¿R=úeTƒËõž\•ÐZOäG#É¿þY¶–ˆ^µ_ý8ÿé¥eS“íž–Ÿg™i]š‘Ç¥yóïó7Dz¹¸?wÏ'ðV–±ª¤±Ú'ü³¯"©ëaªrIöYþÙ|òwú<ðZÚèÿòÎ8ëÃö]¤ÇåþòOÒ½BÒ=FûMÒÿwü=x˜Óép5=Îsƒø¡â«¿_[ØÏü{ÿüô¯3Ò‘<ÿ>OùgZ¾*ŸÏÖ/þYþí+'ýE¬iúÉ+êrÚ|”‰Í±<õËÝù’I²½ßàׇ×çþÜ×7Éoo÷ËÿY^-á]M\³±‚?õ½ëõOáχí4Û[{ãOÝÿ—_%Æ9ÿ±‡$µàü–¿}1šW-cÓc±û:Iòl֤ؑ~ K_‘ãHãÿb½¦ÒÒÖÖ2 *ßËJür¦m^gëôðT!ð2øŸÃžE¬›7É^-¬xsÏIxüÈÿÛ¯°õû_µAûˆëǵ9 µ“ï?ß’½l£1œ&Ü+C’gæÏ‰´9ô;é#ÿYúå~Júâ•’IåìûÿóÒ¼x#äƒþZG_¸å¸ßmùó?Ëa ûç~ÿÿg¯føkã4­+PÒ®¿Ö\&Äúi^-æGSÚN ÿQþ²?ùiZãpÜð<ܶ¯±™õ^‡§%ÚF“þî=’#¿™ÿ-+鯆º=¤T“ù‰q&͈ÿóξBð®³çèz|òFžeÃìw“þZG_OxrúM)þÃcGŸse~AŸÓä?hÉ*sV¹ck¬–7Qù‘Ü?Èõçšß²j¿ÛvÈä‘ÿåŸúÏ.»ÝêWÐGüóþåexgY’Æ=÷RyrF›¼œ6:|œ‡¯R”'ñ—µDÐüË$ó<ÇÞÿõÒ¾³ø૯Aˆ>Ky5Þ«’¼Àž×>#xÒÞx?y¥ÙϾéßý\Ÿòҽǟ´žá_ɦèvi¨G§¦ÄÙÿ,ë³ Hò3*¾ÛÜ=oã7†4ïøcTƒU$Ô6HðÏJüP×5ì~ѧ_¬·y#wÿž‘×Û> ý¯uùï£}GÃi¿Èè’¬¯¼}áÏOy¬ør?.ÎGóýdôξÏ-¤|&6¯'¸x´½üÇÿÇ+ÞþZjV“É®AîíÒDGùgûºðýçý3ùÿ޾¯ø{:Xü/‘ ýä’$›ÿ餒I^¶mîP<즗=s™Õ´®ü%o=¯™'Ú<Íé$ôÒ³u+[íQÑôëI<É-ì~ãÿ«Ž·KZûãá'ìýðçàì1ÿÂ%§¤w’&ǺžO2âJ嫉8±9—Øç“þÇÿ³ïöW—uáx$’ÞMéæ}ôJü2‚“Äz†‡¥~ò?µI"¬ŽO3ý]M#²xsT‘?å­Ãÿä:üfý‡>GâߌZ‡u›w“KÐþÑ:o÷l’O/ÿ@ýå:xžCÈÃÕŸÆz÷ÀÏØM›J³ñ'Å»É$’ã÷‰c›<¸äÿž’WÖ·±ÿì÷{cý”þCiò¬ÿÑ•ë|y¡ü/ðV©ã¿þîßOO1ÓþzIú¸Ò¿)´¯ÛÿâÜúü—×Öv?Øÿ}-R?ÞyõÒ³§Ï?|)ÔcÒ>2þ¶>ÐõMWáEÄŸg$wÓž9$“ý_ü°’¿9t8'±´³÷ÇqgæZ¾øÿÕÿÓ9+ú2øiãÍâôÿè[$³Ôaûÿ‘¿&ÿlO†ÑøâMÆ££[ù_Š ’ÝÇû¸î#ÿ÷‘Ò©W÷2œlùù9ø3£Au¡ø“\º·ÿ|Ó÷Ÿ¼’HÿÕ×+¬j·ZÅÔšãÛ¥¼—Ÿq?矗åù‘ùuèɣϣü6ÐãùìäÕ7wI?yyµòyþ³ÿŸy.®>tý_îëħWß>×Ù{†móÇý¿o¨ÝIåÇn›}tÿ¼9=¯Åï ùñ¼~^©nèÿóÒ?2:ò¿ê°k:œé¿íþáþZ~ò½³á%Ýô<¦ß\$’G}oþ¯þYÇæ«¯J‘æâ}øº¿º£÷U(éK]ÇŸÿÑûËã¼ì'ï<5¤}ÿúç~yðŽ%½­ºIqï'ŸÌÿž•û£ñÎ »¯ØÞ Oøø“ÃZBä+ñÓáçí|iªÇ£IqåÜH‘ýºëþYÛùuéa±¾Æ§–á¹Èü+à§ñ6&¿¨Þyz}»ïyßþYÇÿLëÐÞúÆ==ÁZZIæO½îŸýgý³«Úåß…gþïHòhú?ɤë$÷~gý4¯'ôkë‰ÓíRGÎŽòy~]y¿Ycê)ṞÇáÏŽ#Ödº“Kxíî>w2?õu÷ÃÄžið_oŽHÒDÿž•ùã¬jZŒz¬oö‰äŽDûþdž_ýû¯mðç‡>/ë>QðåãÇgü æÛ:ós4'ñŸ%ÅhN‡¾}ªèñ–ï®iéq$qßþY×?ÿ »À“§ïô´ýÉ?Õ×În•ûFZÇ#Ïpÿì"yu¥ÿ´E¤qÉóÉæ}ýñ×:s„=ÉŸ OÛÂäÏbŸàÃiçû_ö{ÇqþÄ•áÿ>è ºÐÓÃ6òG&¡>Í'™Tu~Ð:4ݽ›ÉiûÄû?úºà5/‰>*ñˆôíÍŸñ'“zoþZW·‚ößÎvá½´ê|gÝ^ÐàÐ<9g§y¼Ùóþò¾Wø£ñ_Äö>.¼±Ð/>Ïo¥ÁôOÞy’S/¾;øªÓY¸Ò’ÞÖHÿü¹+ç/íÉî´­rëQÙ%Ååô{ßþyÑ–äžÿ=`Ãe3nzǨè~$ɬÜiOª<‘ýôO/þ™×´üø±¯øÇY¼ÐüGp—lßù~]| iZ”~#‘à·y-ölÞ‘þïý]oü/×.¼âØõ—·y#·y7ÿ¬Ì¯o”áy9 tæYM ÃÜ>½ý£ü1ý³á)5/÷š[ïDÿž‘×ÀO/U³O/Ìó'çÿ¶•õî«ûMxcU±¼Òµ-..á$Oùé_é×piºå¼ï—oñ¿ú¿þÙ]9M.J3„Ï# OØÃý}´wŽÆ?úf‘ÿèºü¡ñsùž1×ÿçúOý_kZ~ÒÞŽÖ8.£ž?“c¿—_ k7Ðj¾ Õ5+_ÝǨ]Hé¾µá̶p¯Îs`°Ó„ÇéV³ßI¥¤o$—±*Ö«£êº¥Ž£nö÷|û÷uoÀ÷i¥köwßhK-÷ïzê¾/ø¶×Æ>1þÑ´¸ó>Α£ºËI?é}m\LùùãËþÖñÿ«’·Ñþ×iÿ-#JågƒËÿWÿÖþ•?–ûº14[ P±ùóÆPk.ŸÚ>Güó§ÚÿÇ÷™ÿ,ê×ïõ)'ÿ–’=q{3Ò: /¼Ë«ùç"l¯¡4;HJ³“ý >zùíàì1¼ë#û•ëÑÝÉcá[Ë©$OÝÁ÷?é¥x˜ê^ùôwÀ|½ªþÿU¸“þYÈõšïæyunïýd›ÿ¿üV8üŠû,7¹@øìOñwýŸt§ºñt—Oþ®8äùÞ¿K|3i ÿÚëósà~¹€÷—R~óÌù<¿õ•õ |Cø¡Gui£ÿ£Éýúüs‹0Ó­\ý³„êBO³àƒ÷u]ã‚4þ3û_&èß´F¹Ôv>#ÑÞ?Ÿï¥{ü%_Û6¿j±ýç÷÷×çxœ¶p÷¬ÃTç ñ§‹té²]_\'™ÜD“ýe|Ë>³ªøþI/§¸þÇÒÿ¾ÿë+•ñþ«&¿¬^Ou¾Hôÿ¸Ÿòμkźˆí$Ž íÞÞ9<½›ÿå¤uöYNSG“ß< Û6­ û‡MãiV>cèúƒÉòoùäó+ç=JÅຓ÷ë?޽S¾ñ¥u%¢[½ÄqýÇOùijøÿ©¡é['ÙÇßÞ•÷ùn&Ÿ!ð¹¶[:ÐöÇÏÕy#ÿÈŸÁUkSJàOÞIqÑüuùñ7M¾±‚?3™qælGÿ–u­?Œô²Šœô9æx‹|A}=¬ŸèéæI÷üˆÿÕ×£Z¼—ÞDÿ»Žá7¿ýt­›è5'û+ÿ«“ýc½Mi¦Çi=»É'™ýýŸ¼¯­ÃüËc}ùœ[èwÒkhÐGæ\Hÿ&ú÷}: ¯ØÛø~ï÷’Góÿ¬©þXÁ}ãI/¾I>ÆŸ&ÿùéXþ1ºû_ˆ.$Oùgò|õ͉ÄóÏ0ß¹÷Ì­Gþ'ŒwWR'™#ï}Ÿ¼«Sê¶—Z橨ù~\w ±±à‘$ýç–’UKë´$ßðÏJºXc/¬Ÿzü9ý¸5_†^Ðüá_ Úê–vðlK§ŸËýå}qð?öÃñÅo‰:ÃÍCÂÉeÜs»ÝG;Éå¼}«ñÀé%óìÿ––óÆéÿ\ëôö-îþ9ÛÝ?ï<»[›ëÎÆá¹z”¡8sŸ®~1#ÁZäéÿ>Wú.Jøïö±Ž?„7š¯–þeåõÃüÿóÏ̯¯|~þGÃߨ:ïÿEÉ_<þÄ—P]üÒ䃨žágýt¯3ìgµ<“þ '¯Í¥|5Ðô¨ÿy¡¨§˜ž^|Ä+ñóCò,n®#òÿÑ÷ï¯×oø(ï·ð\óÇçÜ?Ïÿ\ëó.#º}žZ~ñþÝסƒø_-?SÿàŸZÄ÷5xÿwa¨Èðìÿ–~du'íï¥F>èþ#ù‡_yo³þyÝÿ¬£ö´±´Ð¼S¬Ÿ¼ŽêtþõuÙ~ÜÖ0j_䱓÷h¾·MõÁöÌý¯ûQù¹>¹?‰ þÑåÇp‘º'üó·ÿ–tZgI๠ÿW%š]¿ý´òë‡ Ñìo?夑Á¿ôÎ8ãÿYSùÿÙÞò/£I#¸OõŸõÓýeyµpÜ“?DÃba:<“<£Á×sÏö9çÌû?Λÿå{gÀ÷_¼/}òI'ö¤hûÿ餟»®ÓÃ÷ÖºTwÉÇogc$÷_ôÓþyÇ]?À‹[è<à»ç‘ãûF¿g³þš~ò½*U xõ*û‡ô$¿tRÕ/žžº}¡óÿÒýø¡£Ï¯þÃöz5ÃÛÉqáÝ7ÿÏ?ÝÁ_˜šoƒ´¯øfO>á#Ž4ùÌÿH¼“ÿi×ë&¾âÓöFÐäxÒãËðý_úˆ+ñKÄ~*{¿¶aÆ÷šäoó»ÿ«·Ž³ösœÏ©É9!sœ¾ñi·ðŽXÿ¬¼MŽÿòñÿÚë$“ÌÓo¿y'É\Ú_A¨Ç;ÉæI#þógüôÿžuô/üúÍöû¸ü¿1ãtOùi'™]ØžJ4_ ÏZg9?‡ÿ·<Éà‘ã³³Mîïÿ=?埗_nüx?á³K_úió×Êÿ®´­Hü1¥H’Goþ½Óý_™þ¯þý×п³÷™ÿ öÎ97ùq¼›?w_7™TœáÎ|oòB¤ø«âळ\‘ü»‡‘duÊÿÂðø{úýAíþÐû}¼•ç?´ddžýß™ûù>çýs¯”5ÄI>Çö¯õ‘¾ôOõž]i–åМ=óârܦ¨sŸ§‹´?A$úuÂ\G'߯øÅðÖÆêÒOhè÷š{ùîéÿ-#޼¯àÕÜóøƒK’Ò7òäóÑ?ö¥}ƒâ"×Ãú„óï÷=ýü†~ýð?4µ[è'ñ¦ËXüÈäƒz=aÇ?ú©£¤¼ßçÿ×Jµ A$úÌoåÿÏM‰]?ÃmûâLzÛþîGÞõöþÓ’9÷øœOîyæ}ðgÂV6>Óç¾>Ñyå»»ÇûÈã’­|TðUŽ«à½B;Kt·¼·Mé²?ÞIåÿ¬®ÿY¾ƒÃ’úOÞ[ÙÁÿéž×?á1ðýž²òÇ«JøŠxÚþÛœüº¦:¼æ~Miß¼ùÿ奻ïÙåÿÏ?õže~Šü/´ðü#o¬ÿcÚý²Ý6Nž_ü´ÿž•ñgÄo ÉáÏëú¿1ätùé•×|ø‡ÿ_‰£µºßŸ¬|“ÿÓ9?礕öØÚ~Ú=Ö©Js£Îjþп £ðΣ¿£ÛýŸO¼ù6'ü³’¾lHÞD“ÌÙû·ù+õ—ƾµñ§„nü/¾×üw'‡/¿wo§Ïþ•ÿ´ë\—6…>ùÍ‚ÇrCß=³áÀÍRÐ?µ|[nòIy÷$ÿWr_|3ð×áç—cáû?øšHñïG“Ìò㯲µ]GMð‡$ԧ˳ÓÓgÏÿ¢ã¯ËïøªëÅÚýæ¿w¿Ì¸Ÿäýçú¿/ý]i”Ô­Z¿9͆Ä×c*útºžIç·K?3î"TðGuÏïÔÉO±ÿY_mì½Ãé0ÆÍ—}ªHßïÕHÑ$“Ï}þeiyžEŒ¼ÿ–Ÿr ºžàŽOõ~_ß®ohzÞÔÕÓy%ŸŸþ®GÙ]Wˆçž=âÅ$O.G®VÆ=,öH’ysýÄ«^*žKX$Gß'˜û+È«ñžÅ/àI<¾Oùçýúƒg÷?ò%I}ö’yoÿŽTiýÏü~¾–ñµ~3Û~ N‘êR<ÿ¼ŽÝ÷ì¯IñÆ~=Gû+NßvÿÀŸ¼¯2ø-wkÿ 4v3Éû»ÄÙ_MOð3J×õXï­$òäøÓ÷~e|&mR…üõÖ² 4ëQ÷ð犧×5›{HìÞI$ùßýe}—àí+û*ín£xã¼Mû¯xá•á›ïí[¨ÒâHþã¿úÊèµÏô­~=’~ò4û•ù¾w™Q­ïÑ>ÿ)ÃN÷ÏÑ­4¨5ûËrÝ<»‡“ïסøƒá^‡®ysùi%½º~ã÷Ÿêã¯<ø©çèÄw_'ïäß]Çü£_Z}†{‡ó-Ò¹ªT¯ áÓõjŸ¾gOáû Úì‚ßø+äÏ‹wÚV²l“Ëòÿ¹_ixâêÖêÆM’«Jøâß—<Ë8ßçzöøožu½ó›?§agççŽü~½7á^”šÏŽ4»_“÷o¿þý× ¦ÚÏ}wöH?y&ÿùç_Rü$±±Ñµ[‡’4ó-Ób;ÿ¬Ž¿M̱Üä?ËrÙο9WâÆ”ï?ŸóÇ$}+õ£ö4ñýŽ>[éSìPÑþG?å¤~_ü´¯ÊI¾êI$ýäqýǯCý•>-ÿ ñÇ‘u'™¥ê’lŸÿŽWÈÓ÷à{ù•9󟦼ý£åøM$þÏMî‰û¿2?þ9^máϺækOþ‘¿Èèÿë-ëê‹ïiSØÇ®A'™gyýÿùç_üPÐôèõÉ5D·Žãý}«ÿí:òjÙmXVýÍbдׂàÐî ùìï$ûˆþgîëóÇ£ñ5ôsÚFòyo÷ßþY×Õ1ØÉåéºÅš\G¿÷ãó+røbÒ9 }>.OãHã¯KÉöÏn®SÉpüÖÿ„‚úêy6ÀÒ?2ª>ªð'Ú§ßöû6?úºýÒ´Ú¥âe¤’yÿËŽ¼‡â¿‡ “Ã’OºGqïGOÝÿßÊõ¾½æñ¹hCœò¿„“¿ØuO]Hñý£ÌûõÏÏ?žòoÿ–ŸÇ]lA¡ü$³ãýæ¡<ˆŸõμö ã’?úgýÊ0ÔùçÎxxš¼ä-ïOÞ'üó¬=aüôŽÓËy$¸}Ÿë+F=òAçÁþ³ýºCGŸÆ:\~óË}î•Ðy´és̽àë_°ë:£ùŸ»³ù?ë¥~ŠþÃó¤ÿmàý\v7ðŠ<hºxü¿´O#¿ý4޾ñýƒQ?áqHÿõ“ÿFW&§<š”ùÖŠgß×ßþ‹’¾8ÿ‚uëÚ_.4¯3÷š~£:?ý´¯®¾-Èÿð­¼Qÿ`»¿ý_•ðN¯Â3®jžÔdòôýc÷èïÿ,î?çyòìòjSç>“ý¿ô{©ü#á½rÇþ\ïvI¿þyÉ_˜:uÔn’IÿåŸÎõûõñOÀoÄŸêžÕ$òþØŸ#¿ü³“þzWåš~ÄßµdÒ¼»XìþçÚ’â?/Ëÿ®óÒµÃb}ÎC×Ãby }ÿùK‰¼âOMìÕ5OÝ»Çüþî·?or†º=„Ÿ$—š¤{þ™Ç_M|)øk£ü(ø¤x/MÿW§ÇûÇ~²Iÿ=$þý~[þÜÿ`ñ7Ä›?XÜ$–þ‚O=?åŸÚ$¬©{ó8}¯¿ÎzoÂÿ†¿³/ħÓü9c¬_\k—1¼ñ¤’ËOõ•Å|FøWû;èqà½Ä—Òk‘ÞÛÚý•äÿŸ‰#ŽOàÿžuå°æªŸðк}¤ê䵸¬3ÿfþÕú„¬þÛ³}ÿöÒ:éú·ïšXÙÂgÓ¾1øà­7âW„þAqÕ¬k..­-埙»®/fiO3íÑâ—ÈzÐó1é^ÐÿÓýø¯tö?°æŸuæ<~_‡tO¹ÿ\à¯Æ:ûCÖ$“ì2eɳc£ÿËÇÿl¯Øÿ7IiûÙÝIþ®? hŽÿ÷î ü}VÖêîMKÌ{xä}艙æñé`°Ü篖âyTñUÕŽ‡g¥xOxíìß~ÿ/ýdŸóÒ»ûOÚxKM³¾ùõ B?/{¼~_ý³¬?j·wÑÇk?—qýÿµW3ãI ŽäÓ¯?´$·xÝÝ?wÿlëÍ«JsŸ!ö4½ÈsÀÑ×,oµË[‰ç“÷q¾÷ùi_b|‚H<gûã“|Ÿþy×Íž{¹ä’Õìßìöé¿ü³ÿ®uõï ·ºðäsÏy{䨉ÿ,ã¯;ÄòCø®5§î‰ü xÅ-ÿá ·ûGØßÌM’y¼®€žº´’ü¿¿òI'™\çí®jº•¥Ï¥^=œ’]}ôýÝ|§kñ+Æ2G±5‹¨äþÿ™]Yn½hsÀüó)ÃVpûó¿|9à¿“J·xüÏ‘Ýäó+Ã>=øÿUµÓ¯<9£Û½¼{?tñÿË?úaÿ=*5Ÿ<žñÂ\\[üé?ý4¯MøËá+øPGßæ[¦ø7ÿË?.²§Ï W¾eïÃš5óÁ=¼–2~òÝ<ºúwöwð¬Û:§Œn£3fÄzùO@í=‘¤—{?í¥~žxÃÿØ~³´ýfÈÝÿë¥}FmŽä‡!ô™ÖcÉ…ä<ƒöˆñ7ön§ø~ í¤ñïOùçë*O€¾&Kè5 ÿ«þÏ}èžgü³ÿW]ÿ‹~øgÇzŒz޹¿Ìäù$ýÝGá„þðŽ«&«¥HþeÂlty+Äö°ö‡ËSÄòPä I<¸îDt¯¿áÍCQƒýe¬ŽŸôξ6ÁrWäóy–’|‡È_´×Äo·]Â¥\~îÝ÷Ýlÿ–’WÉðN”·×Ï}}q©]~òòá÷»¥>Ñ|‘¼ð:ýG$ÁBŒoO’{êõ§ßŽ©OþZ6;$xë¸õ餟{ÛÁÿ,ÿyL»‘>Ëÿ¨$ûñÿÓ?2£»ÿi+†¥#¶‘Õx/þB2Ó7ß]ˆí<ÿÉ?ü´’’¸¿ùÿn‘ü¿Ýÿ~»aßûÞùiq?ÈŸóÒ¼œO¹\úŒ7Àx>¥}ªMÿ¼¬í•«ªÚOi}"I—$Ÿ>ÊÊݧî+èðßñ8ŸrgGá[ïì¯YΟ»òçûõúMà­}çŽ9üÄ’9:ü¶ƒþYÿÓ:ûKáψäƒG³ŽîO.O.¾2ßmõÿs(B~ÆgÜ÷~#µÓ´¯·OpŸòÏäÿ–•á*ñˆ4Ù-õÍK{ˆäà®/RñÞ¹ªÛéV¿écüïæ«Žºmcâ‡à·ŽÖI>Ñ$""ËJü§ –Ìý[ì xÄsâÄkëx?²ÞÏìÜýeuÞð^£á„“R×.K‰c¥zMŒ|qâÛßÞ´Hñ¢Hñù~]r¾#øAñN;ÍWÅ:¢iqÆÿ:A%{ô½ÿpù¯iTçâ{éã‚H ‘$’áþDI+åïéWRy’_~ïÌþ ë| ¡É>¿Þ±xòGÜO2º‹Dÿ?É÷>âW¥–Òö33ͪε|ðZÄÿÏž?ÝÇü ^ìîš=ô“dz˸OþY×—ø×Ͼ¸ºó<¸÷Ç=zUŒï%õæÿÞy&ÊôóltùÇ2š5¨ê©õ¬›6~ïäÙ^W:O¦ÝW¨ëš4úwØõT·xãþ=ŸòÓý]?\ð"j1ùö·‰æI÷+‡ „>3\G לù zWÃ/ÚOÄzü"¾ ÿLÒãùßýd~e}ë¡øJñVg}kªIåÜ&ôß™~s|+øeáÉüUoÿ Pòôøþ}é~¸h'øQ¦éVznªA½š|›äÿYYUÄÂñ8ì—F|‡Ï^*øOý›“¼iqqñ§îëÇuËè-S÷’y~Z}Çÿ–uöGмU¦ÝÚùzu寗³äýå|‹â¯ jZŒw_h‚Oùiþ³þYÑH÷òÜlþ Çžè×jžO°Èþ]sÿ­×Ã${?yå§úÏõ•Wþü‰}¨<’G÷ÒÞW„kŸ§øâ«x ·{}/ÏbW¯õs§6ͨ‡?ñUû-އáõÙé½ÓþšW i}GŽ.žûÄú¤‘þò;wØ›+˜µŸË¯K’ã˜ÜO=C¸Ž-7Á[Ÿ ´ç¾ñ7ö¯™þ‡oò;ÿÏJã¼ÿÝÉÿ<ë¼ð\ï•"Gîþýsã~\Æz,–°]É#ýŸËŽ?‘?ë}û8|MÐ>øÞOë–ï%¿Ù|½‘ÇûÊùŠ;¹öIÉæG¾­éZ¬–7QÝyi$‘ÿ~?õ•æÒ¥ÏîLèÆÕ÷Ó¿~Ýß õ_ ëûò\k7"yêüÈüºüêð”÷~Ò­ç‚G·¼üôtÿ–u?Ф±×üwáÿ½­¼z‚[»¼»¸Žµt­e<\ú§‡ÞÍ-ííÒãÈtË’ßìŸóÒ»²y ™ru|(ýº¼?k¾‡ñF'·¸ä{ä÷r'ý4¯¡Oí¥û9¤tþ,‚9çD’9<ÊüTøe¥Xø«ûrÆûd~]¯ßõvÿ¼ÿYZÒxsGƒâo‡ü&ž’YÇóý©ÿåó÷¼ÿ¶u¥<’3ÄæGßßoモq¡ü$ŽKËËÄÙôñùqÇŸ»ýßûuù/ªë—Ú­õåÔ÷%åÃùîïþ²I?ë¥{Ž«¦ØÝøOÒŸOÒã³’ú4tµ“÷Ÿë*iÖ°j¿ÙRiz]½ŸÛ£Dx$ÿHŽ?3þy×M,£æþÖ9ÿ¯¾üB·ñý¦žš„–ðlØòytÿüXºñÿÄÛω¿cK{‹‹èçòOõ~\•è~-𖦧‰#¾Ðít»=-7ØÝA'™$’×:ò¿‡¾ѼT—žŸdz¤ž[ØÝ?üôÿžu­L¶”±¾ç9ô‡Œm›¯üIð_ßCHÿáMžG™þ²¹ÿübŒ¿¶ƒüyö?ìù5 RÑ<„“ÌÿžuårxsÀóêºäóÛý¢ÏÂv±£¢ËÝ䟻’Oúç]ÿÁm+@Ö>#xÅÚ>žš\–~"³àI<Ï3ÌÿžuÉÊ!sšáó(LþŠïÝ÷7×Ë—´?ÿÔû×ãe£Ý~À‘ØÇþ²O h‰ÿà¯Ã¸ü }[Ákþ‘y¨>Èÿå§—þ²OúçþD¯Ýω±ÚÉûééwpöñÇáÝ!ßgü´ýÜ»¯Ê'ûu¯ü}Û§ö†°Ÿ'ü³ŽÎÓËÿWÿLüÊêÃby=ÃÖËi@ó[¿#F´J’Ý.,ìÒDwó?yq'ý3¬{_²ê0oµ·OíHþ}žgú¹?ö¥Oivž#¾¸Ó¤ýÝ›ý÷ÿÈu¿á* 7ÄqëGûÍûÑþzRÄb9®ÁR=Ò{½ÆÏM¸¸Hï$OßÁåþï̯¤þ~ãC¸‘$ýÝÄûÑþY×Çþ4»»±{8<·’âGß=×ü³ŽI?yåÇ]½câ5Þæxráä³äGÙ|æ7 Üð8²Ÿ¶¡Èz7í5™áýîãûU|0“ý—Rû,›þÿþÔ¯¥¾$Ïã‰ô«9üy¾;??äGòëç-o¤Ÿþy×Ôðç$(Ÿ7’`½ÎHËðƒR“Mø…§ÈŸêî¿B¼A“èwGÿ- “gýû¯Ìÿk2X½ž±iG%Ÿ÷ÿå¥zö«ñÏÇO%­¥ÄÈŸs˯?Ä£§á®70œ'Fœü ðÌž#ñÿØnãýÞžò;»ÿ«ýÜ•úãÁá êä’yqÛ§É¿þZI_Ÿžñþ«àçÔ.´=‘Üj½ßËó?ïÝZÔ¼GãÿZl»¸žòßûž_—|¾eóÏÜöô¼œù'Œ­Èjê_>!Á¡Ûß&¸þd½Ñ?åü^ø…cå¼£Éþ­Ý<ºã§ðˆ#µßö7’Oà®;Už}çžÝüÏãGŽºiæU§ð@ú:~ð­rV¬~‘øsâÇ‚õ]OŸQÖ-mï$HÝÑäŽ?ÞWÁ_4«Ojh%åÇïÑÒHëÍd×Òùsó?Û«Ö·z­ÜÏ–þ\ŸsetåØìn|ü†xnáÈOøÇ¦üÿ’•¥þóìÿ?Îõ÷ÇÄ×þ ržHþË%~`ǯÿe]Gö¸ÞÎóïï®í>,xžëJ¸Ò§ÖâÎñ6:?ï+§W­Z§Í̼ËëOŸ ‰Îûö$ž_ï+ô<ÑŸî~âs¿ñ¸(sücüiáYü¯Üx~úá.$·ùÒ¹;þ>¿wþ®»Gâ¯x‚ãÄ–'™xûö'ï#®~ÓÃþ#ƒçþ˺ýçðyuõ¸ÊŒáñŸ™Ô§:3ä­?çßÿ=*DÙ"I¾´dðι²?ø—Ýߺͻµ¾±óúÝãó>ä—Zýf„þ· ‰§3¹ð?—® þgû•iîã“UŽ ¯õqÏ\ç‡È´?ç£ÿjÚÚý«X·ûŸéüõáâióžý:¾áÌüCžIõ™'òÿwü^y<³ewþ4Žyõ‹È ÿ{wù+„’ çýý}.à>s2þ1w@ýþ¥oçþò9çJõøŽúMrM:û÷vûäØÿóμe$x$ßÿ-#û•~ÆûQOßÁ#Ç&ýõÙa½´9ܧ6ö5¡3ô+ÂZ¬ò%Ôĉò:W¯ü2ŸÂ¾1³ñ'˜ú„vï¿÷òy•Ç|5ø¿k%¬v:Çîï-þã¿ü´¯§­5ûÚyhJü‡†¯…™û® 6¡‰é¾ø¾š­¬–/%®‡o³øãýåy'Å FûÆ7WeÔ.¯-ÿ¾ÿ»ó?íuºW€-gxþç—]äþÐô=+™þ‘|ý\lùÏ^ž „=óá‹«<9kçÿ«ó>û½x_‹|TúŒÿÙÐIæyŸ'É^©ñ³Æ°o“J´ÙqÉ^'à=ëÄäry~dvï½Þ¾ï-ÃNöÓ>?̧9û…¦Øÿei¶v¿?™'Îõ«k¬O¦¼’y~eŸßž¶nì^Iãÿ¦u¹¡øJ}VÆâ,ßÌ“äG®Z˜˜Lô°Ø™á¡îüþ5McF¸µžáü¿¹Ï:î4iÒëN³‘.O->tÿW\Ïü#‰àyã±ÔmÒHõ3çxÿçv>øQ}ñ'ÄØ~“û>8þww¯'†õ9'ò{ó9ψ××Öš2«>~s€žw’îIÿç£ï§¢TZO#ÿ×O’:؃GºƒäxüÊõýÎC佯¾@‰$‘ùóÑöW¶Á£O¡é¶v?êüÄùÿé¥yÿ‡4§»Ô£ŽùgæË:öo´ðŒ~#ñÞ£ÿ ÅôYÿa¼p#½ÇÙüÏ/ý]wÖ>8ÕoµMJŽ×O“fû«§ýß™ŸòÒ9?ås>Õt;ƒ²G¨Ûÿh}¢ú?Ü<‘ÛÉÿ]?y]o†|Mÿ ;ø’yìàÌÓ£‚ W“ýËþšW·†äœˆÆóóóœ‡àïhßÚÒ¤±’ãP±Ž×b]Ç'îéoµ/|9} ~ÞÖòóGó<‡OÞ\×9#ÿžuõ£é¾8Ðä¾·µÒã’xþH$ó#“÷Ÿù±ü~‰?ŒuDù$Ž9þGó<Ï2?úé]¾×Î>|鯯µˆ5ý- ðý­ž¹¨Õ#I$“ËGDÿ¦óÒ¼ïg9ügÚÒäÚøQžùõI'“ÌŽ?³ÎˆÿòÓ÷•ô×ìû§„o#‚D¸ó'‘ße|íâ î¼9­»Çþ‹"Iÿn’y‘ÿíJöÏÙÝì|1á-BúúDŽÎGÞŽòW‘›T„(7eµñ?¹£iÔy<#§¤ÿãûg™_ÝÀ—^^ÍŸ¼MÿLüº÷?Œ_,|hñèÖ?ò ³}ûßýd•á—×i§XÜ_}Ÿígò÷§üô¯#-Í«NƉû?p,£õœ×ÿ ’x-R8ÿÕÇýʨúžcï’9>Ý×=ÝÖ¹ªÇtñ¤qÉüè¾ðÿöþ«§éWR~îáöl¯ ¥ÃœöØŸ|æÏü]ä„á‡$»á·ÃÍWÄóǯê6ïåïùÿÕÉ_K¿‡-<9cö­rá4ûxÿ¿û¿3þÙ×»h~Ò´{{#ÿG³O’¿<¾(øâëÅÞ8¼äÿ‰]›É"«“Ëÿ–•®[–ûj‡ó~7Œ1¸ÊþüÏ¢tísáäŸTòãßó»ÿ«¯Pÿ…má/éQùñ¥åœŸÆ‘Ç%~Ýß$𖲫‘?ퟙ_Tüñ5õ¥Ý¿‡$“ýá#tG“ý\•ëârŸcïÀó±¸jüœð<â¿Â þê;#ýæŸyælùç^ïû7Úé^'ðÄšTû$¼Óßî?üó¯bøÓ Aâoj¯ûÉ#MèÿôÒ?õ•òOìçâì?Ic'ú½A6Wm*¾Û x”ó*Ó t´·€JM/Äv1ùqýÇýßúÊøïû6 ’Ó?ž¿X~6xcûáî©—æ\[§Ÿý3’:üËÑ´ßíÍVßJƒ÷r\Olòë·%öÂÏœõ²œÿ|gÑ? þO¨øF=bêÝä’á÷¥yŽ-,|#¯ÇáÿÞI$ž_ÎÿòοKt ÇóӒ?.ßOƒ{ÿÓ?Ý×åç‹uÏøJ¾!^j²lòî.£DOúgæWÉ`}f´çôNñ‡0£>JÞümðwÅ¿ø)ã±Ö#{Í/ïìõ•õñcÀ#µû_Û Óäþ4Ÿ÷uÎk ´ëíÞy?y&Èöl÷‘þNÔ­/®4Ûí.xäß"«ÿ–uò_íTf~™K’ñ,9'îV?M?á;ø{þ­õ ü‡_/~Òzÿ‡5ÍKƒC¸‚ââ97¿‘_$Ýi^Cï÷rGüF8.­<Ï>7ŽM›Ñ¿MáÌL+{çäGáÎ+)­üð; #ÿžqüûÒ·<+âTþòãžÍçßæHò}ÊûQž ù ž ƒÌÕo6~ïÌ+‡»4ï1?Û®â9ü¿Þyÿ¼®/ÅPy]×ÏåÉó×v©ææXns˜û\rTÇæS<¿.¦‚ þûÿ«þåz5O Yäû/—:¬ÿbºoøã_Ñçó-/â?¹±ë’»“ÌòöË:7דS üg¥‚̧Gà>ÙðWí-ccpk›ÿwIãÚ> ëI Ò¿Ò$‘6#×ÈZö1ÝG«³ìò|•èúÇ‹éôßí\}¢ÞOŸe|v' £F¿9÷˜lÿZ$5º»Ô|AªýªÞIqüô÷†4¤ð–Œÿ¦\'ÎÿóμËáÏ‚µõXüý=ä’?àOùg_IÝø+_’?µýü½ÿÁ%e™fP„9[)ÁN~üÎÇ}Ý×üô’Gù?wÿ´ëôÇáÏüká]/eÂy–i½ÝÿÖyŸòÒ¿>,m.´ ë}EíÞ9-ßÌMñ×ÒúÆ/?—ý«—qüqùë+âq¸Ÿä>¢¦[ÏÕ>#x/À—ÐiðO³T¸·žO‘#ÿWæWMð¿ÁÞð=Œ—iqö…ç÷$ªºWtígMílÿÑÿ¾‘Ö7‰þËu¥I²Í#“þº~ò¼Ÿíióœ?Ù'зzÄó¦ôÿHýùi]ç€5ÿ·iRyŸë#¯Ïÿ|_´ð=ôšŒdy4ùäºòüÉ#¯µ¾É j¶’j¾ÕP·¸ÿ¦Ÿ¼¯£ÃTç‡9ñÙ¾’gqªÉ缑Á'—_7üPðÇÚ´é>×ûÉ$I>å}_%Œ¼äýç߯2ñŒštö²y§™ÑPæÁTä>øQ«ð»Y¸}F?ø—ê>Ï3÷‘×´øÅ< ñךš\I³boŽ?2:‰¼>—v²:[ù‘ýýé_/GªßxsÆ>[ïŽÏûO ‰Ÿ9ébióŸøƒÃ áÏÞiÏùq¼›*¯Ÿ¼ò6Wª|JÔ£Ôo®/ øäzò¿·$é'—ÿýÝ}ޝ¸|.&‘¿àè#žúáÿåºG¾µ¼zŒ“¼Ÿ»ßóì® ~}y<ÝÇqò:Túv£ßy?Ö=VûgvîrÄy#Éþ®O¹\‰¤ýüpAþ®º¯µO¿ËÿYgiZTúψ#õ‘ïùÿwÿ,ëAbjö–¿aÑìíSý\i^‡à…ú¹ Iu®oûf¨ò&œéæGåÉÿ,ꎪéj’G&Ï.O¹ÿLê8>/kšoö^•áÏô;}/Ëù?çâOùé]9mSÉÆûþá{ß ´ ¯^<ûãñ%½Ô@ï'îäÿ¦uÐZx+ÁÖ—r}ºÍäû>ö§äÿ–‘É^]â‰3ë %®f–qÜj?Ú(é'úºÒ“㜗Þ#UÕt4¸ŽKìçƒÌû?™üô¯oÜ< ˜jâkšw„µIãO oÓþÏ?Ùn y<Ïû÷PZ|9ü=ÒüG Gÿ /¤K¯2ãìþgú¿ùéÿ=+‹ñ7ŽàÔ´8ü1á]4}/~÷D¸ûD’IÿM$ª¿ðšÝÿ g᳤qÙÝI?ž’¬ÿ¦u>CJXiž½?Ã]MñþŸáùã{}.ÞÆßQ½Ù'™ÿ,ÿyåÿè¿ûiEÃ]‰¿aýýÆqc%íª$’G$‘ùê뜓âö£¤“éZÙï$±·±wÿYåùür¨é¿5X?²î¯¬ÒâóOK„ûW™öôy?øÝtýfõÄ|1¨ÝøQžÞëG’òúKYí^ãÌ’Kúg'ü³ó+¸øQà}×â7„õ‹].ëC“Kñœh$’}³÷Ÿë<ºùSÞ5¾Ò¼M§øªúáï.,ßÏ%zŸÁßë:ÿí à¹ï®K{zÝÑÌ’?õ•ÍSc3¦ž |çô£åÁëG—­N±ü¢å×Áž·²™ÿÖûããÔö?°œö›$’? h›7ÿ×8+ðU±Ôc¾·¾ó$ó5Gù?ÖIC^;Ò“\ýŒt½)ÿwžÒÝÿ矑~!ëðiºUÝÆ¹&Èã·ýÅŽÿùiÿ<ë»Wìæ[N†ŠµË­FêÞ8#ýÝœþYÿöÊò½RÔlo¤º‚GÌùö?ü³®íÖ¶žd“ï’ß~ôÿžžgý4ªžZ_$—PF’\±ÿ<ë§à‡<Ï †œëÂè-7ÄßkÐä±Ô®K=‘º~ïþZyuÏèÛúäøGJ‘ä³ßó§ü³òÿé¥rVžg‘oiþ®?¹^·ðÚéì_TÓÖ\Gåüé_’æÕ'Z|øèGG¯ª>(ø}í|õÜŸ¼ŽxÝëæËè#µI4ß/ÌŽO¸õö<9†¡F‰üßãøùóÖ™•<höòXÉü§ýt’½7á'™Ä ¯ùwž4ß^e}?–‘º~ïçÿWÿ<ë®ðοö~ÏXHÿãÝã}‰}¾'’ty |–6§<=Ãõ^û|v—'ü³I6ߺüˆž.úò ¿õž}ÆýÿõÒ¿\ô­J WJ³Ô£Ù%½Â~d|lð=÷üiq?ÙÞM>ñ÷¤ÿòÎ?úé_?ؘB|“>'-©ìkœŒû?á’Oùi¾½7á&±<šÿ†ãMò~ÿfÈÿçyvÿ3F’ÕÿÖoûž]}!û4ø*yï¿á#ž7û>žÿ&øÿÖI_AbhBÔcq°…ì¿OÔ?yþ®ÖOž¿*<9¬¾‡â;{èÿåÞë~ÿúg_¢?|Ukះ·’'úËÄÙyŸ¼¯Ì¿->Õ'ï?w"W6A†ç¡9Ÿ%–á¹ÏØ‹»C·#ó-ï-wÿßÊøáG€7–³Çû½ä}ïüôÿW_BþÎþ#OøÞÖyíiä?ý3޽cMðΕc¯Üx‚øøÕ#?éœuóõ13£9Ñ<Ú•9'ÈyÿÇÁá/j—I'—%ÂyÿóÒ¿1t9 ŸU³ó?ÖI<{ÿïå}WûUø™.õ]?Ã)ûϳüï²Oùi_)ø~4“_Ó÷ÿÏÔr¾·%Àòag3· OÜ?c4׎ *Íü¿.=›Ýßþ¹×Žë>ÎòA}¬Aþæ#þî½^ùùóÎ×þC¯É ëGûWT³¿—çÈéû¹?ç§ýs¯—Áe°­9ó™äµ'F¿?9îŸî¾]É&£áÍa>Ùüi^-¨¼ú‹Ç}<'ð|õϦ©~óýü½Ÿq#­+Ôl^8/­Þ8äO¾ñùuÍÉ'†ýögõïñÎGê—ÆnAwþ‹ò¬òöl­Ȇ{?÷$¬9?ÑGû•¥¥O祼žg—夕õ¹&m Ô9þÙñÜkÂsÊkÿp‚Å Ÿ_¸ºõuGR.Þ;O’?-?Ž´|9ý£ü³Þ¸}JéçžIãþþÊú ùÞ&¯¸aÏkä<‘ÿ¬ùþýT{§©>×$uæy•ïR>n úŽŠY#¢¨SŽ‘ÿ¬¯~øAãV é<9oqoHûÿç|ô›ÿwÿm>ý}WðÂPIk&£}'ÙþÙò#Éÿ,㯗ÏéPä÷ϨÈ*ÏÛû‡ªèzÇü#“ÜkTiö‹‡þ:î4‹ÚV°‘éZú<ŸÜõu¿¥xKÂ^eŬŸ¼ŽßøüÊܱø{à½F97Û¥¼‘ýįÉqµ ~ц;ÇFñSÇ–ž\i÷Ò½Nøká[WŽIôô¸ù÷£¼q×ðËÁPhi$vÿ/ñÉÿ,ëéKKHþË?ú¸Óïׯãq3ûv&¯¸W±ÑôëX#HíÒ?÷#®#ÅV>™åÇ]ÿ›äòäÝýÊÆ»Óž2¼š˜™ÀáÃU÷ÏüJÕ~xþ;s}¾—qå£ÿÏ8ëí-WÃð<¼Ž¾kñƒ¬n¼Éü¿Þoßþ®¾ƒ%ÏçraÊ}´ÓïZÝi_n±ßåÈ›ÑÓþZW†=Ü—Z­Ä<‘ì’¾0ÿ…·ñcÂ^þÃÒ¤‚ãËOÜyñ×9ðËöÄÓ£×$OˆÚ{ÙÉûÄwƒý_ýû¯¶Ã~úáð– tgd‚×C“ïýÍ•ð7Ä=:ëU×/'±ŽK‰$òÑþšWØ:wÆÏ„>&Ò¤M\‚I.äG“Ë“þýÓü+á›_øÓKò6\GùîñÇÿ,ÿ礕§³šž6Å|ý‘t _G¬|M·}SP¸Mè'î㎹_‰¿²‡‚îÒñü+i~ZHð"ËI+ôÿU´Akä'ü´ù?íxGÄö:T“Áÿ6#ÿÏ?úi]4±³çtòêì7JQÿ–’=eí`tÒ¥ÎQŽt?ñÊöÏÙêO?ãŸÃÿÞÌbÓÿFWˆOk$FóÇû¿ïÿËJõïÙ¾wÿ…õðÿþyÿlZ|ÿ]+ž¯ðÍjÔv×ÿb¯þÅ/ÉGÉ_4dÿ×ûçãN³?‡ÿ`{}bÖO.K? iÿlà¯çñîõ?Úµ_õ‘ÿ¨Oùg~øþа<ÿðO)-àÿ–žÒÿ!Á_€zsÿeXÉ%ô‰æ}ÄD’¾ƒ(¥Ns§ PÕÔcH ’ $y.$ƒçßþC«´ž$»õÜzãtÙïµ[é žO3íù»]Vî Æ;TÿY%|ßcg?ÜÀþŒðÓ%£ib~Á=Ö¹óùþïË}é_F~Í:êOª_]~óý]|héw}'ý3Oûù_jøö_ý¦®´K?ø+fŸ§ëùˆÿhòüÊæ¥B9 ~]âÏ6œÏ®µiZÎý•¨Û¥Å¿÷:ç?áWøOÞ>ŽŸ÷î¼#Æ?i߇ž“ž'’êãO·1Þ ´yqÿߺùv‰^4‚êH\ºŽ=ÿ}ä¬é俜ü‡û&´> Ÿ¤ ð¯áïü´Ðà¯?h/èÞñ=œš[ÛÉ÷DýdžexËüIñÜoå¾¹uÿ-+˜»ñ«¯Ï$úýãÞ\[ÿÉþ®¾£)ËkB~üņÃN÷Ϭ> |bO ¤~ñù4ù>ãÿÏ?þ×_`]ÃáÏé[$ò5 9?¿îäÿãuùÝð¯á>/Aª_xsÈû?‡íwÝyòy»ÿžqוÁãxgÌþÀÕ'³ùö:$ŸôÒ¹±9ç?pÏ2ËañÀý4Ó¾ü9äºM#ÿa䎺}sÆ>ð¿Q¸K;{tù-SËó+ó>/|F»M‘ë—R¹%aßkú–£kçê·qy'ñ¼Ÿ¼­iä“­ñœ4ðSŸÆzoʼn7ß¼AÓÿ£ÙÛü–¨ÿú2Jò‰6oÙ•]ù $òFñÉ'Ͻã¯wÖ>ßißìþ4¾ ‘ÛÜ?‘öT÷•÷X,50äé{>C´ý˜¼TšWˆï4ké;;Äß½äÿY%}É?ˆô;D’éõ?wÿM#¯Î?€? îþ2øîßÂPjŸØÿhK‡ûWýs޾ž±ý¾ëüž Ò¾,%lj7ìû+ùžg™ÿ-?w_-›d°ž+žg“S-„çÎ|7ãÿÿÂUãS\ôˆäy#Dÿ¦uá˜àƒ_Óçy<¸ãº~ÿùçæVÿ>øÁ^;Õ>Ïn÷š†žû?Ñcó<ÈÿöeIá_ZÏö}ÅÇÉ=¼ÿ¼’¾º:Uö'OÕ¹ ~­ZxãÁÐAüO-vŸÇLx?ÞlXÿÀ$¯ÉëM_»¾“GƒKº¸¼ç{T·ýäöγdG´žH7ŽHþGGÿ–rWËSáÜ™æÿfÌýbÿ…àßÌþرó?ë¥|¯ûFx·Ãž#ŸCMò Èãó7ùòξ:“ÌùgRXïŽëýetÓá~CÖÊiN~xÿðFŸòÎD®qÞM*O!ÿw•¸þfÿúæ•ôj´’ùiܯ„Æá¾¡Šç‡Àhe8šþQ:3øàG¥jV°iWÏ'™qüËN‰U<ÿ=$GýÜ‘ÿ~™çù•úÖ ”'Vü—™RΌʓ§—Y_îãõz}ó¼›ê¤ñצxd‰Gû_ü¤‚:÷òyòÓû••_rNŸ<Íÿ x~MXŽ×þYý÷zúöêKK[}*Æ4òãOŸd•ã>Ò¤Ó’9ãýßÚ>ÿüô޽FÿW³ÿ¯Îó¼O<ÏÕ¸sì`G¯ê7{ô>8äþ4ÿW^Óá_xþÒÆ;é5O3í÷<¿óåמ¿5/XÇkºIÜ­ÿ ü[×$µÔ »·º·’H7À‰™ÅÇüó¯ŽÄÒ÷²©‰ä>ÓømöëTŽÆêDŽM›Ýä¯i“QÓ¶I\'—üuñ߀5ÿk–±êº®–ú}ÇÜtùi_D}®ÖÅ#Kët’Iø+óÌoÇî=ø—ÚlûŸïù”ŸÚ±ïóJ宵X.ÿqinž\ŸÆ•›²KH놡ÍJ—$ÏC“Y‚{O߯’¹^%¯ÇÜò<»«rk>\ryòÀ+Æ|cñ&×G“ËI<Ï“ç¬ðØiÎg·N©¹ýŽŸj“÷‰åÉ÷+óƒâ¥¤úWŽ5Hÿw#ïÿ¿•ö·ã‰5)ãû_îÿw÷ëâߎÄw^5’x$òüÄùëôÎ §8V>;Ž}ú›G<Ÿþyÿ~¿gàÞ×ãÐõk—$wž\°?ï<¸ëñ2 ¸ÿwŸ¼Ž?ï×ïÏìF“Øü þؾýÝÃÿ¢¢Ë8ÿÕ×ÝæÔ½Ãò\5#Þ?27òä’¼/ã,þ_…uIýdi¿ä¯UþÒóü¸ßþZ%q¾4Ðío¼9yû$ûBIÿlÿw_-Kã=*tæ§ÅÞ ûWˆõ>7“÷òWò|þzo’?îWGñRÒ}Çúæšûü»{©6l®:×Rž3ÿÅ×ßåßäâ~3}/¯§xä‚ßý]znw=ªF÷[$“ûžgúºñØõ‰àxÞ×÷rI[–:ãïòõ+?.O樂±4ŒÏ^“Q´“ýdž_ýs¦G?™\Î>:~ãýgûuÑÚ:A>ÄÙå×P¿jjåwúV±c&§îãßürW•ϧ•>ù'g—¿ï×Òå5y!9XnyÎ`wµ>MGËÿc}sž ¾“RÕdHÿÕÆû»‘ôooÿ–‘¦ýŸóÒJó_!ç2?õ›ëãrÚ~Û:Çô§â³2ˆ`àuÖ;í~“Ìÿb¿põ_럿d¯é¾ñ"x^ò4ý)äû<~\rIæGæWáRy<ôÑ>ý}ÿñ7ö…ø{âoÙSÃÿ 4íAÿá$·Ž=éÿÛ+íjÒ?›êÕç>Èðv‡âïƒ_³×Œ'ñ6¹ÿ K„‘-dûG—|©ð?ÁnþÿnAà;ïx³üzùg´÷ŸóÒOõ•ÍþËß´/„| ð÷ÆžñýãÇ©Ë_ùiûÏ/ÿEù’G^á/Úà×À?…~-×5 ÜiïóϧGåÉq™û¿ÞGYû#„ßý¡fÏ ÝxWÀþ#ð·ÿž¹®^ÛÚÝZ¤že¼lÿYæUˆsþÍŸ³‡Š´…zÿ‚Ó\ûDÿÚš‹ÿ¬·ÿ–»Ž¸¯ŠŸµ/Ûï…~ð¯Ã™/¿´4Ð.´·Ô?á,Mˆéÿ.ÿçÌ®Útç3›à>¢ø%á™ô?„þ¾ðçÃý:;ˇÿNÖøáφüñÀó뇅Óe«ÁqåÛÉÿ]<¿ùgU<ûdk:çŽ<'ã éØw‚DxãÌ·’?ùçYû*‡Q÷F«cðç\“Äñüž·Ðö\%ŠXùlËÿWæyi_5üI±ƒMý‡ô»+K2;}Râ4ùé™^m®~Ö~’ SUðwÃû-\ÔeÕóùrÛHã¯$×þ=kÿÁ/àÓéé¼þڿ够¼ÿžuÛ†ÃLå¨{üò4Ÿã„rOÿ.öWõÃk¯ÙzïöŒ¼MßQÆ’_\lyÿãßíòÒ¿5¾ü[×> x·þ¯[¤—$ëþšUO|CñůŸüáˆÒO\_I:Z§ï#’I?埗þ²»ñ8.yœ'èôˆÖ?¾.xÓXÔ4½.;9ö]kÛÉ$–ñÉÿ<#®»âW‹`µýü7ñ* R\iú¥»¦£uoöy$Ìýä~]|S'í'ñÃá¯3«Ú¤Þ-Ò¼?à½KÄŸµÉö}cD·KXÓþZ^Iü³ÿ¦•ø›}}>³}qªÏ#Éyxûßý4¯´¿h> ñ7€<'ðOàíåÖ¡¥éo½î§÷’y»Ž¾lÒ¾üF¾ñŸ‚§ÑÞÏTÔ7Dž?.?/þºW¥«¶s{CÍ¿ÕÓìãúßeixƒÃú¯†uËÏj»#¼³žDtOÞG••cû‹¿õž\‘¿ü³¯oë0ûLí }qæË?¹Tm'ùöO'ï.>}•÷ëÌI<·ûþ\Ÿù±õ+¯/Q³ùçåüÿür¾ˆòïmFp?cðçˆþ¥„>Á‡®Z=Ž«"?ü´ù÷ÔÁû‰+£ñ§Úìmõ?yözâ‘üÄþšQÁÙ”ëQäŸØ5ñ‡ …o<>Ùaç“þzUzTßÿ<êtJûsñ¢8ÿwÿm+¸ð–‡=õÔwÏþ®?¹\­§Û¯­íSï$þ ú{JÐãÒ¬c´Hü¸ã¯ŸÍ±¼ä>«†òÞyóÌ‚Æ àJé¬dþ é‰içÿÛ?¾•jÒÕàºùÿÕ×çXš¼çê´ðÜ Ô`ó>tÿ–Ÿù½GÁßt?$pj6i–û÷ùuŒšTV¾d÷Åsš®‡k'ü}ÇæGýÇ®*˜˜|;½™í:Çí'á›´Ž{[‡Žâ?¹²?õuÊé¿´›}}ÿõ{þGýåp–6:›åÿĽ#“ËûÿóÒºÔðæ›}i$ö–éæ±y_VÂ…:µÏwÒ¾9øÓî^$ïÖ‰¿hÏ @Ÿ¸¼OÝýô޼ èpIþ•f’yuGþïǪù÷zzI‰¿g™\¿Ù4&g‰çä$Ôh™ï¯¤H,ßìßJFñ‡5ýWÏÔcû?ûLñöüHíÓ÷ŸÜ¯?Õt7ñ:YÁ¡Ûùš„÷ã’¾ƒ ”Ðä>o›W£3êË´Ðï´¯>Ò96}ô¯ÏψÛÅRyy‘Çüi]æ¹iñGÀI£ÿgþ“̯ºŸÏ=äy$“ï½{Y.[ìgÎxyþw:Ðä1ÿçH¿±n=¯ìõ¡ý¯|rIýÿM+ùËò#‘ãµOÝùŸr¿¦“Ýh ü'¥]ìŽHã³Dtÿ–Ÿ»¯_;ª|v ‘ëZO%ôždåÛ×xÓÄi&•¬h’y—‘Á#ï¯b}sËÕo4§ÿ}Þ¾ Ö|wþ•ñ"{üÉ4´Ž ÿöξJ‘ï᩟‹o¤Õ|q¬Nÿòñ<Ÿ;×#üõÕx·Ì}ròO3ýcïJçà±y+ïð^åç1?³£GçÏüóß]ôú3ÏsÚGXåýøüºõ}*Ó÷?úº18<É-O2?Þ~– Vxþåmëö©$Ÿ¸Ž¸IäxäÙåþÕ3:ïøI§ƒÌòê8<[}¿g—æyß®e$ßÿ,èµ´’÷ÑìÀô;\óÞ=û+±Õ|Gö½6ÞÇÌýßý3¯$±ØŸòÏÌòêÜúŒ~?ÝÇýÊæ«HÓ ?RÔ­|ýò¬îl©í/´éàÌýçûõÌþîéüÈÿy'ðVÅŽŽñÚG<ÿòÍéÔþ!Ðs:Ärj·è±ùqÇ^Åû9ݽßíðî?ùç¬YÿèÊó-sQ±#ƒMËøöËJîÿfÇó?h‡ö´ûÿõÒ´«ü0?«Š*J+æ€ÿÑû“öˆýßü×þå­#ÿEÁ_Ï"Zù÷Öû?åãËß_пíÿñ®ù7ÿе¤è¸+ùîÐÞ õ[=Ÿê÷×¥íy0³>»pÞÛ0„ËÆ3ý–Æ8 ÿ–^y§I'—qÿ=>ýu^8ž>Ý#ÿW\üö¿d“ýgîäMï\ü'O÷<çè~5fSž7’`X>×;ÇÉ$Ÿq¿V¾þÉžðÿÀÉ>#xÿÂóøƒÄ— #¥—™qÇýt¯ÊG’ èÞ?õ’}ÇÿžrWë+ø«ÄsÿÁ;®5ÄÕ.¾ÙÜFæIö/íêüÊú|M#ðêµ'çoxJÿ… £ë?€î´ýBâûcêqû¹<ÉÿÔGXéûüz×5_"ÓÃéo‘£½ÄqÇÿÛ?ë}Q©]G?ì9à9äß$‘ëöÓý"§ý²÷¸ýÝݼ’I%¼qÇZ{æ~Ðøÿþ{Å_¼iã KÃ’Zè~Ñõ„{«¯ô{xü¹?wåוü^ø âï„VŸâ íBÇXÐõ‘.¬n>Ñ~Š|/Õ~!Ç?ÄË Ûèþ(Ñÿ¶.7èRGÄ’Ó?2¼“öËðw€4ß„>× ÒÓÂ~(¸¾?±à»ó#ŽÞOõ’Gú¸ë» ‰Ÿ9ÍTð¿ØÇJñ±ãýB[éÒ\G§Hû5üÈü¿úgÿM+«Ð?dÝgÇz±ñCUñe‡ôû;넺G·ýÜ~\ŸòÏ÷”ŸðOËí;@ø›®OªÞ%¿ö]Â;Ï'—æI^ǯø«@“öIñFŽš¤l“X¸t$ýä‘ùŸóε©Ïöx׎ÿd)ü1ká}WÂ>,ƒÄ?Š'ŽÖ ¯³ýŸìþgýsy<ÊôÍö7ø{áY$ðþ¹ãË­?X·O?|öè’ÛO2­Ýø×À‘þÍ? ü9©kŸg¸³¾ï£µ“ý.ßþšWÐ:Æo xUï/¼Mñ2ÇÆ¸µ‘ ±º·ŽK¿ûiGÖk‹÷gÊþýš~Çð’?Œ¿¼Y>Ÿgö©t‚8äó<¹<¸ü¿Þ~ïý]oÏû1xFÇ\øwñ'á_‰.¤ð߈5í]Þ?.â;3ýdr«¯\ž†^'ý“lÿá<Ô'ðÞ‡ªj’<V±ùŸgýç™îÿçŸý3¯*Õh_„> ÿ„áÏï'¼ðÿ„ï¾Õ}|ñÿ¬ÿ®qÑûùœ?»;ÇýœþøÓâÅ üy¬_I†þϲéäŽK/Ëó$ó<ºòø;özñ‰µ WÂZ©¬Yèv»-t¿.H㻸ýd’Oÿ,ëSRýª>ÝÝ|\òãºòü`‘¥—ú?ý3ÿ–•å³÷í à|=ñ'ß[ß[Ûë¿íÚ_îî#­>­_?v}ãÿ… ¼¥xâ¤þþ˸¼Õ#µºÒþ׿G'™þ¯÷ž]zÿÄ›¿øÇöšð_îü>žgØcî’ã÷ž_—û».¾ø›ûHx_ø{á¿øK¾·ÿ„oQŽõúO2Kˆãÿž•ØOû^øx_â4xõÍ <‹§ó?ÖGåÿË:ÏêUÄzü ~èß>4øƒCOG¥ê’XØØÝIû¸äó?ÖI%^áçÃoŠ:ÿ:w…ÓÃòjš¤v·Úty–òGæË?ÝÿÓ:ù뿵}Ž•}âÍ7Å^OxOÄ_j{“÷–òSÑ$êÿÕÿË:üñŦ•â}sMMòGg}pˆ‰ÿ-<¹+é+Ú‡QÑþ8j ÒÓÌÔËû/™þ¯÷uò†¹¬O¬jº†²ÿóžâwOùç$Ÿ¼­0ØiÃã;ðؙ´’Dû_†dÿž’&Êà4Ø#“äŸ÷=w~µhÒFÿòμæÅü‰ëáx_÷5çú/ÆP­‚£‰/Iñÿ«¦Iû¿.Ÿ'Ÿ'úÿür™ùïåÉýÿ¿å×ê5>ùž>yòÅð¯Ãÿj¾“R}ÿèÿ"ÓJú"êÓäËý_ß®áͪZhÖ{ÿw'߯_±´û\_–’I¾¿.ÏñÜó?bÈ0\”ÆÖ2Dûîºg±žxÿéžÍ›ëgþÉÿç§—%v:Uª}–H.£JùNeÈ}•:G¥FöäGûÊìC±¾µ’I?w$ߨ6GkuõÓïµ¾ù “ìò~¼Š¸“§Ù'wiöï!ÿyýÇùg]އw­¤‰ò¶•¿?‡í ÕcÖu’[Û½y<çöωµÏì¯ÝÙÆ›+_Žìù ú”žeבæyŸÇTuýJ7´ûTÿ¼·ûûÿçšv£ï7’Iø#®cÄ×ím~Õ=»ýžá6ozîÁT‡?$ÆÒøÎWÆ:äØÇ¯îã’½ûö^±ÓgñÅÝ×ï>ΑìOùi•ò–·ßÚ1éÏ'ú=}ðK_ÿ„sÆ>dòyqÜ&ÍõöUi~àü×ïÌûÿÅZVªÇ#ë–éqÉ>Gÿ–uù—âï…zv¿¬kÞìvöÿåráªN8±¸.xž“¥Þ•}óÇåÉ~àüø£â?xcÁzUô‰żÝ?é§îã¯Æ/ì»×$ŸËòüǯoøñÆšŒtýFÆD¸û:}—Èÿ¦uíã}ø?†¥ïŸ¹-Õn´­ÄǘždiÇÿ–•ù'ÅïèoŽ$û\[ëóþó÷•õŽþ9ϧx+T»Ö6Io#ùŸóÓÌ÷uù—¬ê·zËÜ~óË·¸}û+Ä˰ßlôªb}Œ9ì/¨ÝI<ñÿÇÇßzè,t8÷üÿêÿØ­Í6#çÿWýÏ.¯yiiû¸#ýÝ}O´>_Ús‘ØÚAiòWFŸsä¬Ûçó>HÿïºÖó<õñùrr¸J—v©:o®VM*×ø?y]æÿ>ÖOÝùß®Qä‚7ÙÿŽV€r¿ÙIÉþ®I?Ž•ÓËÿ–‰$ìG]—ûÍŸ%>KKY#ýÞÊÓÚš¯ÉIÿM+ìž—û·’Mÿóλ‚þIÿåŸý3¦hÚX§îãó<¿ïÖ~ø{1šn•ŠI=öÈã>ã×?¬kï©y–¶‘ùvÿÜó+X×ßU“þyÖ<¼zé§OùÀµuwü×±~Íÿ¼øýðßþÃvú2¼OËù䎽§ölÿ“…øoü³þØ´ÿÑ”ñ¡ý_ÑQï£}|¨ÿÒûƒöŒO3þ ×$òÒO iú. þ~|1iåêVÿôο ßÚ $ÿ‚|ù¬“ÃZGþ‹‚¿ŸÝ)þËªÛØÿËO¸ï]UÝf~á§¹šQ™ŽÿwwÏîVïö»ßþZ[¥oøá<ÉíÿÜÿÈ•ÎZAÉ7þïÌþåiÂ~ýßñ†”ÿ´&X±ýüq§ü´ß_D_Z~Ð:?ÀXÓR‘ãøwq?ȉåù~g™_4ØÏ²Ýïûÿ;×é«ðËÚ¯ìá?Oy}q$šŒp<q'Ù#í_úºúŒIøç´>-ÿ…©ñ ÙøMqÿá³}ðZ§—ÿWÆ?|yãK­?Ä*×PÕ4ôÙ$èÿõοL>$ü5ý“~ø»Âúˆ<'u¬\x’Ö?Ü$Ÿ»·ÿ–~e|§ûeüðwÁ߈Ú\·û>—¬Zýª?ÖyçÌŽ²§TÒ‘ó†¹ñ+Ç*ÖcÖ5]^j–i²ÖëÌýäõÏþy×A?ÆßŠËÙÏ}ã Fãìÿ"o¸òÿy_F~È_|¯è~,ø·ñÏûSGðšHébò~îK/þZTúÏÅO€?üª$ÿ ÿá×-ß}Ö—o$‘Çÿ]$§SÉ3œøïGñ‰ìo®5+TºŽâá÷Ï"I'ï?ë§—F³®_k’ij·“ÞIÿ;Ï'ï?ïÝ~›øîûÃ?²7ÃoÁá_ Øëšçˆ9㸓ËýßîëÓuÏ‚ß ¼iãÿ…~&þ˵ÒãñbI=õŠ~îÞO.?2?ÝÖŸYñú rÖ 5K;¨íÿçëìòyþøAðGø•ð»Åž?¾Õ'³¸ð¿Î'—'™%}ጾ4ÖjCàEÖ‡kíÞK_²¥¤~_Ù<¿õžg—]¯À½ÀµøÑ¡ßl·ð½ôˆèŸê㎴úÁ™ùIáŸë7ɧßkïü#ú£Û§Ú’?õ‘ùŸòÏ̯JñÿÀ»ëïÞh|7¨Éo§ØÛ»ÚßG'ÚÿýÝ}ñûN×?ádü/×ü9p’|;¸žÓû--cÿGŽOúi_Bé×wp~Ñ/’O.K?Û¿Ïåù‘ÉåÉÿ(ö³1ögæÏŽþþÒ~øCocâ{yãð]›ùéyryrÓOùç\¯‚ÿe‹4ðŒ~.±·‚ÎÎãýB]Ir\×?2¾¨ø%âmW\ýœþ,_xžñõ 7ÉÿRy’Gý3ó+±ø›àéþ2øgá_‰¼âË?CÐà·ûR=Ä–ò[Éÿ-$òÿå¥?¬Îœ>ø·àαg¡ø¶4Žââ=+ÆŸ÷pHŸòÎJû×þ uüPðúGqÿú\îÿòÓ÷óÒ¾’MÿܯWÜ<ñûÿyþ²§ó?òQýßüõ§ï®£3[gúÉüÊŽ þ}þ®¨ùŸóÒ¤$’Oõ”^Ô½}wçÖmZ{W¥Ž:Ê©¦§ï wÿl•æ/û˯ø•ê>ýÞ'ý4¯.OÞO%~KÃ~þ*s?¤<¾ñ«*_x·Ã1èÐÞI?¾‘ÿ«¯l¾ð?ü‰'¾¸}Bãfý÷RËJâÿáox;Ã67 u³÷žblHëÖÊ9ùÏ'1§îi¿ÛŽŸjÕmÞ?-þûÖ妪ö·jó<¿Ÿ}sšŽîµrâ :7¸·¸ŸäO/ý]AæI™çìŽO¿²¾þ•O°~e‰¥È}C©|Fƒ_Ó£±I<¹6Gʽâ­J;YéPÏ=ŽžgúºùN Uín£ž ?ÕÕíWÆ7WpIþôSÃ{üçLiÎk7v7Z—þÝu^×í|9}Óì’ÞO‘öW‰Ï}¾êI*õÓÉÿ-+Û©J‡ÉTÄòOœú?Çž¿áâÏC‚4ºwËó$ÿ®uÏþÖß<%ñ³Ä~¾ðŒsÛÿcÙyóÿËI?wÿÆëÎ~*~Ì_¾éÖúÇô´O¼xÑ'µ“íÿ×:ô?~Äß|]áË?ý£KÐãÕ7±µ¾¸û=ÅÇýsþY×?î@öpý¡Sà›ë:þ—ý±áýq6]Zùž\•×x·ö“øeáÿ‡ºÇ€þø?þøü@ÿé·WRy’Gÿ\ëÏ<û&üWñoõφ²y>±¡Áç»ÏÿòÓHÿ¿Xßgyþ iZ\úç‰,u bñäôëY<É-?ë¥/g îžý°-gø{¡ø;âoàñÄš?˜–.ñÉæG\޹ûF|BñÇÅ /ÅWÒaÿÂ?ÿ »ŽHã··¯£àŸ>ðz¹ãK½R rΠ쯙öÿç¿ý4¯.±ð¯Ã/Š8ñgÅxâëX³ÓçÙkkeoþŸyûÏ/ý_ü³Ž²ÿ—‚ö¦W‰ÿn¯ŠßÚºv—§iúåÂl}U-ÿÒ<ºðO|mø‡áëžÒµô??úVøüÉ$ÿ¶•õgÅOÙ{áí¦•à¿øcûRÏOñ&©ocuk}ï?y^¶Ÿ?eï|^à|ú=ö¡¨j–»þÔò£Û×NÙ™Õ??4¯Žm<3gà¸5ÇKÓßz#ù»“þ™Éÿ,ëÖ>Ãñ¿RÐ#ø©ÿ ‚yž$º·Ó§O´¦Iÿ,ÿyü³÷•õ<û;øÄ<ø-cà÷ó<.’oÔ^Oô‰$þy×§xÂVŸ³÷ƒõø4´T“ı£ÝyéGöº×ë#>Iø·à¯| ñŸuaäþЂ9Ý-dÿGÿ¶ŸóÓþÚW¯xsöžð%¯„´{|3µÔ5 öAuk$–ñÿÓ9'òëî_xsÄ´‰>øŽÎ $ñ&‰þŠï~dwóÎ:ùSãf›kû=~Í6 ®­àÿ„“Ä—×;ù¼ŽÞ9?wÿlèöœþá™ñ§Åï‹zÏÆ/\xÇ_Ùæ}ÄDÿW½yFÿ2ª>ÉãÓþ=ÿ¹LŽ:ô©Õä8Ë^}OõGe> éö…{#I´ øë*?úg%^y?q±+ZULIüÊ–©ï«V)%ÝÔpÏO’¸³|O±£3èxs-öبQ;„òí|3$ÿêäÙ^Wi¿}zЧò4¨ícÿ–\§þD¯Îø:Ÿ<ç3÷_±„(àáö j§ï>D¯z𮕕¥Gÿ,ä“ûòW€éÏåÏæI™å¿ýü®Öß]ü'—û×ÛcpÜçáYn6gÎ{Ÿöæ›c‘<‰æ×J䯾%iV¾do’MÿÁ^+}wÿ»Þ¿Xÿ¿ÿY•äÓÉaÖ©ÅŸÀ}àK¯|JñšV•"iöñùnî•öî‡á‹_Á&ù<¿‘Ý㯙e»Hà´Ô/§÷’H¨ð½9Ö¡Ï2¦ø ãûõž*H?å¥e_]¦É Ž?ÞÌ®;Ïѓ̞îO/Ëþëåéá¹à}o´ä=&ûÄp]XÉþ‡æ¶õåz—ŒnõX#Ó´¨ÞKËwØŽ‘þî?ûiT¤ñþ•?ú ®øìãûî‘×?'ÄÝJµ“MÒ¶GóùõÒ½l618ÓWþ/_Až ¼þϳßóì“÷•çŸt?‡>Ò¬ßM5 É>û¼žg™T¼Gã¿ëé%Ž•§Ïq÷Þ?.¼óMÐõX5XßÇ‘¿™³z#ÉûºúLp‡9òøÜo?¸zŽá]JÒ£Õ`ÓÒ9$ùÑ<¿õuÅxƒNI<ˤ#ù>}•õΛ›¬xr8ícOÞ&Ä.¼Æ>ñ›w$q۽żŸÜýesá³)û|æÄà¨{ç©ãò÷qþïûõÎ_Iûý’½*ïÀž'’Öâê >êHíþÿîäÿW^OuæI}ûÍÿgýs¯ºÀâa8–æ^äýÂ,`’x뭱ѼϹþ¯ûõ•cñ¿þÏå×k¦ùò$‘ÉÿŽWMJ§ÍÓ¤ºtÇ[––)ü³JÿåƒÇûÏïÔûã‘>y:á©ÎQ«i~ïËýÝ=îàÌ$þ ûÿé¥qÞ&H?Ñcÿ¾ë=}öIoòë_ª›ûS¸žútõŸ»ÿb³á þ #ÿÈ•ÀO®?—%eZ_O$›äÿWýúÓê£=ïXy$ùäòã®~îûË}IûºÀûTŸêÿåõ¯³45dŸÌ¢K¿“Ë’¨ù‰÷ÿåfÝÏæIH¾¾yä¬iøÿñÊ“{ÉPOþ²´3ˆ•n4ùë7ýZU¸'ùã­½¡ÑH™ß˯fýš_þ2áßý†-?ôexïÉ$üºõ¿Ù–Gÿ†…øwÿa‹?ý\XŸ€ëŠ(¯šö`ÿÔûƒöŒÿ”wIÿbÖ‘ÿ¢à¯ç24Øñ¤ÿêä¯èÛöŒÿ”wÉÿbÖ‘ÿ¢à¯ç1Ïù÷qÇ_SÔýÃ:•yCð=ߟšo™æËOž¸¯Z¦ªÈ‘þî9>t©4ÝFK¨î¿ïºíüU¦¥õŒz•Œ¼çÿ¶uòXÞ|+ŸìLþ¢Ëy3Ì—Øý¸$’|ÿòÓûže~«èÚæ¹áÿø'=åÖ‡¨>Ÿyòl{_ÝÉï+òN Ÿä“ýŠî#ø•ãHü'€$Õ'Ãr}û_3ýJýÜ­Lþ]Äá§F~Ægên•â8õ_ØsC×<]pú„z~±»Ý~òO.;ˆëèÏŠ·Þ-ÖÏæyŸêüÊüWñmõÖ¥ãcQÔd{‹‹RíÝÞO3Ìíyú2²÷ÝI}þ‹#ù’}ôI<¹$ÿí•õ'ìïû4¿Å¿ÜxsÆŸÚ:¼v²]#ýŸË’O/÷‘Ö”éBžÔô¯Øâ‚ükñþ­b ?í ;dÿwæI]7À‰?t?„ç‡ĉà¿\]oþÑû?Ú.<¿3ý]~|êºU¦•â}CJOÞGg}$ ÿM#ŽOþ7_¡_ÿb›»«O§Ám î/5K?Q{«ÝÇ$‘ÿ«ýågSΕS¦ø¡ûH|+»ð'ü+§k—ºæ¡¡ê–÷³Ý]Gûˈã“÷’ñºó/þÔ>¾ý¨lþ4ØÙÏq¡ÛÁlxÿÒ$’?õŸõÎ:ðcà/ÅHüqoð¢M.OíÉî?ü{ùóÒ»~Ç~;ðφ5 ~ÇXÒüAý‡ÿÖ¶7d‘ùŸë<ÊÒŸ°2¨jøö¡Ó¼ñ+Çž8G{ˆüYæ$ ÿ>þe`ÃMjQü2Ðþc¤qèzöŠNò¬“Ìó<ºëcýŽítè~?ñÇŽ-t=X±óö<¼ŽI?ÕÁ_/x+ÀŽþÎÿhMÀú>±ª\xãCùÞ?ôI.<¿ÞGÿLëˆÕ~øïÅ_>=üT·}SKÐõˆ ±‚O/íÓOúgY~î~^ljÿ\üº µxþ3þò~îJý-×þü$ø·ðËCø©ð»KÜIª[ÚÞڽǙ‘É'ü³¯e¾ƒáþ8xoölƒáÜ…žËw}EãÿH’I#ó$­jcL}™øýý4ýçñì­(-,`ÿY¾J÷?ÚwJÒ´Žþ(Ñ´;?±éöo±+çØçß]´ýøçx?Ñ-Ò:£ÿê}õQß}tÓ9*U'Jë|1i$“ý©ãÿ×%iûÿ-#ÿ–^”òA¡èÿë?y³ÿ"WÀqŽmðQûÿƒ\9ïωø pþ*Õ|ûí«÷ucû´Ù%U“Ϻ»’yÿyW‘>J÷2 ·ØÑùßgóÌ1³¬hÚyp%i<ÿóγQÓgý4¦où<Ïùg^Éð´ˆ.ßÌz(žJ«æTT GÙ³ƒ¤úuâ'ü³ùöy•ô~¥©A~ÿÿ¯ÎxÇUð­ôcqåÇyò?ý3¯iÕ~!_XÁ÷Ú‚I‰üùvuÓ­Šç?hÈ8Žp¼‡Ð·Úªyy%pšÝ¢yu_>¿Å©?#ï>O’¯ÂÆÔgHÒêÍÿÛ.Jæ§’{Œõ¿Ö8Lô©üUkä}–ÆÏìòI÷ßþzWG|á*4‚Í$Ö$þ7Ž9+盯Ý]ÿ¨ýßý³ò뙞 îäó'“÷íÉ^µ,¦Ïâs¹ŸHj¿´Ûù~FŸåÇü{#òüÊñ]câTþ*ñõô~]½¿Éþ®¹Ç´ócÿ¬®:x<ÇýæúôðYl!çñ9Üþ3õSà…uÈ/¬õ™6j¸ÿ–é'™åÿÛ:ý7Ò¼ kšU¼óÙÁ$‘§Éûºü ý›þ=Ýü+¾GÖdó4;‡z?ü³“ÿ×îwÂÿi×zlz®•p’iw‰¦ÏÞyôξo”ûó‡öÜë@èßÀ‚ ,_Kƒì÷ ±öGþ²¿ÿjOÙ¾O†Þ “\ÐìßûT}ûÓþY×îä“¥Ò|›<ÍŸ~¼ÏâWÃÍ+â7†/<3¨ìòîþyÿ«’´§Sñ*ûçóe§™þ£|‘Ç÷ëJ;´äŽI<¿2»ÏŠÿ õÿ…~*¼Ðõþ_Ÿ&Éÿç¥x”÷Þ_ï$ÿ–uïá½øo³ä:§Ô¿ÿNõ›öä$ßþ®¹Ù5ÿV•š÷Ï×u:D7s¤òGÿ‘+*9ü´‘)^2¨¯þýX©|`óü’S$žxÿqÿ,êO²É'ü³¢tÿ¦u™©sÏ"|õ";ÿ·U$ƒÌù?ñúfÏ.?ã ÐØGýÅQw«iû´ù?ñúÍòïù‘пˣïÿ¬©üŠ?“ýeU’:ý\þ_—ü~§ÙZ?eßþÉ[{SBM6x$ÿEûî½Ãöo±’?_ç‚4ÿÝŸý³ýåxBA#ýÏÝ×»þÌP_?ǯ‡þ\oåǪZèÊåÄÕ÷‘ýQÑKòQòWÏšÿÕûöŒÿ”wÉÿbÖ‘ÿ¢à¯çw¯èëöŒÿ”wÉÿbÖ‘ÿ¢à¯ç zûNø&qbOݧ–ÿÜÙ^àía6cÝÉæyŸs}y…KÏÆðIåÉüÏ:äâ<’¡È}ÿ‡aý™Š÷ÎÄÚšöÿùgq÷ËÿW_p~Ë~ ðŽ¥àMSÄŸßÇ(þG¾“ìúdqÿ×I+å}+Q´ñöèÿÒ>ãïÿÑ•õ/ÃoÚ3Àþø;qð⧆ï¯4½ò:]XÜ}žK3÷‘ÿ«ÿ–•òùNw8OØÖ?Hñ ‚¡[ý¿ïÂgпþ x×á'…þ!Ïá}/Gñ$z¥¤I¥É–þ_Ú#ó-üÏûù[ÿ|yៀ¿¼àïøG“þ-þÛ;ÛÿË?28ÿwÿ+äoþÙ×>Ùü$ðÇ‚ÓK³ÓÞîI?wgþ¯Ìÿ¦•å_¿i}Wâߎü7ñ }×K¸ðÚG²¸’ãÌòü¿õŸóÏý]}Ž”Ï犧ê5¯Â‡6ŸµÎ©®&–‘Ég¢G}¯——%ßüôòëŽý“~4üeø£ñGÆ?Ä;4ŽÎÎ ½‰ö?³ýŸË’HãŽ9?ë~z럵ŸÅüQ³ø¯kö]/T·µŽKY<Ëy-ãÿž•èw_¶çÇ fí+[‹ÌI t±·òüÏ3þZI$Ÿë+J¸išR>Zñnø—ÿ_…ôûèçyä“íI'™þ²Jý±ñ­õ®«áÿkúç„î4{8<û­m$ÿO’8ãÿWåÿÏJü#ØŸ¼ó$ÿY÷öP÷i—Ï$qÿ™û¿û÷YTÁHõ¿Žþ4Ò¾!ü[ñŠ´}ÿÙú¥ÔŽ›ãÿ–uäž_—÷)žŸû¿ý„ŸþšW¥NŸ!ÍPŸ—÷ã¨$ÿV)îÿßýäuÐxCþÕž9ß÷vÿíד›fУ@úÞá:ÙhC“Ü5|+¥'ï5+¯õr'ÉÿLëÄzãÝÝù~ò8ÿôenx›Ä iØtØÿÖ}ýŸòθ7Ïûúø\—Ñÿ¨ò~î½7â7ì…ðö2ëGìäýæÇƒý_ýû¯±©›Bä?ž)峜=óò^8?í§û”'ÉäÏ:ôßü9Ô~ÝÉûǸ³ßò:Ë:òù?x›Ò½ºxÞsÌÄá§ •?×ÇòGûÏöé߫֎îñÇÉ$®·Nð‰ü@ñ¾›§¼‘ÉýúæÄcaöÍpØ*óøýcþï÷u?Îÿ$ò<•ôf‡û9øªùãþÕ‘-ã¯pÐ?dÍ-ïµG’OãýÝxœú„¤ÁdþÙ•û/|6ðçˆìo/¼A§¥ä›þMÿòξу᷅dHÒ= ?ïÝUøyà ÁÖ1éÚÁæ?ØÒ8ãÿ¦•õ.«¯Ú@òAž]Çýs¯ñwŠ­-ldóÿ¹^µªÀÿêÿézu?}ä¾ ŸÒ·<£ø»J³ºÓ¤.ñ#xÌÿÈué³Ï$éûˆü¹#ûõøwû1|{O Ïoàï^=¾Ÿ#ï±3ý\že~Îèz¯öŬrO3øÓþy×Èã°Ü‡¯†\çÍ¿´OÁm;âÆ‡$Ÿgòï#óÿE×áW<+¨ø+_¸Ð5ËwŽòÝö>øÿåŸý3¯é®êÒ »I }ö÷ÿÓ?õ•ò‡Ç¿Ù_Gø½iט–zźI²ù#÷•Ý–ãy>0ÄáÀ¯ùi'îüº«<y›üÏÝÿ~¾‰ø©û9üPø]?üN4÷¼³·ÿ—«XüËzðO3ÌI?wåÿÏHÿö}E,L&y)®õ"I>Íé%=àÿ¶”ló#ù?åtÓ«LΑ"]Ñ=Þúƒì3ÏåùþïûõÕXø:êîÆMUäO³Û¼{öGþ®I?ösTªjrû·ÿíuo÷ryþý×GöD‘üù#ýÜÜ© ƒ{ÇGþü‰ÿ´ë?hheGc¿ïÕ­‰kû¿/ÌþúWqk¥ZiP}«Q‘$¸“î@ÿòÓþºÏ:än£žK©'ùiü %eíNŸfg=¢Oî?wY_ÙÃýºè7ùoy»“ïÿÓ:ê´­ ¤’ëX‘ììãûŽ‘ÑR§!ÓO Îyý¦<Ÿ"[¼Ÿß­kK<ÿ!ÿy'÷:íÞ{­~ì¯ Ù½½œ&ÄÿYÿoWscá/ì?-'ßöãýÝyµ1°:pÙDÏ+O—<‘ù’I÷ Oõ•ퟳ÷‚üGkñÃÀz­÷üKíãÖ-ÑäÿYûÊ‚D{Hßäòãþ?3÷~eoü ÕRŽžíqÿKtOùçþ²¸¾³9ž—öL!úBÞôozfÊ6VGÏÿÖûöŒÿ”wÉÿbÖ‘ÿ¢à¯æú⿤OÚ!?ã^d'ý :Gþˆ‚¿›ùÓ篩áÏ€óqD=Oÿ,ê4ÿ¦tG'˜ŸêëèÌé“Ú]Ïc#ý[ýïÂfÆ«£O£ÝþòO29?ˬGãÿWÿ-½oJ×4ßZ}—R#“î>úæõÏ]Z§ŸcûË¿±?ÖßÊâÊxŽ¥ÜâO¤âÏhÖ‡×2¯€ããGŸä’·-nãËò#y>Ï÷ÿyþ²°Ñ$öyo—ü]?ýZIÿ-+îéâa[ßø7ZŒù+@èþÔŸnãäŽ4ÿž•#ݦÏ2°Ò’JÏ’Ož´ög›íƒ|§–ŸøýAw<?‘þ³ÌûõF?3gúÇûô÷OãÿWY{#Oh^Þ’ËO/þšU_=-ÌOÞUGž¨»ü”ÖMX5)ä’I£yë9ç¨7ùiæ=L½$óÿÏJdq§ü³ª›÷¿úÊž8Oõu­0¥Ï9û…¯õïÿLé|¿ž=•kNµžyüˆÿÖq?øåwšW„’ô½VOÝÇü^eÄt(Ãûçé<'áÎ+ïÏÜ£ø~{¿ÞOÇoþD­ÍsÄš5¯Øm#ýäŸòÓ̪ºÇŠ£$±ÑöGæ}Çÿ–÷î¼çd—oæ<'ûõñ¸l llùæ~Ç›qF Ã}[ñ‡ŸæI'Ÿÿ-+cMOô¿-#ó+:8Ò?ùi]o…vI¨Çÿ=+ïéa¡F‡!üßõ‰âq\ó?TÿeïŠ)ö» ë7{6Aû¿ùi_¤wÞU´Þû<ÍŸêëðÇá–«&•â}>ûýgÙß{ïÿ–uû¥áI5ÍßUµ“÷w ¿ä¯€Æû•9ϬÄá¹ ~9þÓ^¾Ñ¼Gyu$~fŸqò|ŸòξºðäðOŸ¾;9>ü‰_»<câ âÅãó<ÏËÿW_•‘èii¨ÜxWQ·I$ß±ëÛËqÞáæÕÁsÌí~üÐ.­c×DÔ<ϸÿë+ì +ÁI¤iºGåÿr:ùÏà%Ü ñö6¥qåé÷ ò;ÿÏJý"ƒÃ–²$oŸ»“øÓþZWÍæX™Ìú\8QãÚoÛë§ýÄiu¶¿ µ(?×È‘ÿÛ:ôݲ?úWý÷å×û‰#ù?ôey´°Ð N6`ò +ÀsÀþ}Ô‰æWy$ÿdµÙþ‹­ÉäMŸ?úÏïתÉ$æy‰ûºé¥N<‡Ï?Œòÿ_$i#üžfÏ¿_ üCñSÀ’'Ú?ïŠ÷ˆÞ ‚Å$äó$ÿ¦•𖳩]øƒQ‘-7ÉóýÊõ©³#Ó­R}Gí×r~î?¸X~-¾{ç‘dqì®ÿÃþñ7Šž;6ÝãŽ?¾ÿòÎ8ÿë¥ixãá—‡4 [x.µ‡’Oùo³þZ×:é§RL79ò„ñÇw<ÿ,ÿ‚·ô?xÇÄ z>—=ÇÚïÇ}ý¥ðËFÐíìlt4’â7ùäó<ÊúÏàïÄ­_Ð5 *M=4ûËØé—‘×WÖgöìØ™ ð_‰üž~«nöò~ïï×ì_ìiñ'þO†Q¾£y$š†Ž’A;¿ü´¯ÎÚ3Æ–ž#ñön›ûÉ>æô¬?ƒ?|Mð­õÓ®<½>óätÿž”±4ùàsa©rLýãðç‰ôߤ’XÜ}¢òÝþçüó­Yîü„‘üÇ’Ktû‰_†¾ý¢#QýáüÍéþ®9?øÝikŽšü$º^Gÿ-6ËHëšž:b©Lþs>;üÕ~xžóMHÞãK÷¥ÓÇÿ£+Ç ´’ïùŸÜ¯éÇþð¯Åÿ \jPY¥ÅÅÄ|ÿ\ÿôe~ø›Ã‰áŸ^hz¬g¸·ybË:ú\·ÏîmL7¾pþDþ^ôËÿb½7ÁsÀŸhÐ/¿ãß\I÷ÿË9?å…ciÖ6¯åÆ›$|rºk]}W\Ž *?Þ[¿Éÿ=#­18žCZtŽ"=RŽúM#¶[¾Íÿ£+´òì|9þ‹ËR?‘ßþ}ÿëzlmm`³×4ïøü¼M—S¤òÓþ™ÿÏ:ò´±‚7Ù‰þýs}gœÓÙòuôÉ$“É'ï$ûû?å¥fÇ‘¾ÿ3Ë®âKH->y?ÖU]+Ï“–þ_ð"Gþ²Oùç]4±!NŸ<Ì­7C÷wW{ü¹>âÏJômáæ¹â׎{ë„Óìãýæ÷ÿWåÿÓ8ërÇÃÚSÛê^ ‘>Ñ#ìH?ÝÛÿÛ:èüU¯ÚèTwZ¯îã¸ùü„“÷•âbq¼þä ¥‚„=ù›–3èz5¯ö7€4ô’Hÿ×Ý?ÿÿ–•Ì_x·Ãÿñ8Ù¨^oû‰þ®¼†ïÆš®°òiÚný?Oß÷?õŸõÓþzWG¥xõ·žûýO÷üñþò⸽”!ñ¾Òs3µsQø‡<‰c[éñüûÒ?.8ÿéwô;«ŽŸãºÿG·T´ØŸòÒOÞV6«â­7@‚;;g™fÿ$ôÒµ~ÿÂ[âßÚÀúæ«É¾©fÿêÿwþ²½j\œ‡'œþ•>ùçGÏÿ<êo.?J<¸ý+#ä½™ÿ×û»öÿ”zÿÜ­¤èˆ+ù·ݼ•ý)üpµûWìäÔ­¤èˆ+ù¬ž?1ä7ù•õ\8qb ;$ÿž”;¼oGúÊ$Ì.¾Ž¡¾ž›<½þ]T€“ÿ'ý÷]Ƈã[í7ËKïô‹xëŠßæTŸ$•àæYÐ>ׇ8ç–OÜ™ì¿dÐzÞùñsõlnÀýbñÆöè$I?ÕÉýÊüšøçà«¿ kñë–?¼Ž7Þî•úõcvúÿ†lõÿ—„äOùg_$|wð¬—ÚT‘Á²?“äÙ]8j‡ÉR©ïòxr{éQÝÏû¹#}û?å¤uõ·À¿‹þGüPþ-“ÌòÿãÖwÿY'ýt’¾Ñ®§ð^¹$òÏ~ÇG¯^|÷Qëö2¶›+§Hõ©¨Ú•ÚH›>y?¸éPhÒ?Ÿ²yË®ᯈí|qá(çÝÞ[§ÎÿóÒJîô¯µI?–ÿêÿë¥xÂ¥#cXÕm-SÈžá<ÊòÏëy$~îOùiÿ<ë±ñŒzTö©öyq×Ì>#ñ?Ûµ(ôm+÷Ÿhù6Gþ²º}¡Ÿ³<¯Ä׌u_²Ç#Éü%^»øe?‡4­é²8î<´OùéæI_]xcÁvž Ð?¶.£ÿL‘7üÿòθ? iZ¯Ž<[ˆ5‘éz{ïDó<¸ä¸¢Y…JP„9Ï(ñÅ×Ã_ƒ_aÓ®<½Bñ÷¿ý4ÿ>\•ð6«¬j:Ž¥%õÞù<¿‘ëôöŒñ?Âû«=+RÕ;‹ùgžg—_™SÚFòGŸhŽ9$tw¯o†þsÀÆãiý#Ô^Oøû÷‘×O¥xÇÄz•x–2DI?Õ×·õSÄ«™££;ϪÆ÷¼’Gûï^ –6·^doû¿.¼{N»’Ñþ×É$ß÷<ºôkMUï’K¸?wò|é\ÕM0U?œŸû9>×äyi$‘ü›<Êí<1®xáw‹cÕ´;‡·³ãwD¯+»Ô®¤ùÿyŸíÖçˆï¯§Ò´ýV9?ƒcìÿž•ÍR‘Ýí ~ñê¾<Ò®þGâ;ë3í–±»§üô¯+øCñK]f?†Þ&Ùö¢yú[¼žg™oÿ-#Ž¿+öø%žw"Ig§Áä$ wøéã ø»Â2XéÚ‡Ú-ï9ìQäó$´“þyÉF”á1û:‡É>IçÔcû&ù?Ö;§™þ²Oý§}áÍ+ȃûJ“Ì“|ntÿ–’IûÏÝÿÓ8ë˼+ö+G¼ž ŸlûŽïÿ¢ë×ô;·Ð<#çýŸË¼‘.?yþ¯Ìÿž•Ûªe‚¤>Öí[]RÆI9$y>ÊŸóÒHëƒÔ`þÊû<ë.#ûÿõÒ—MÔo ºÒÒõšïÝÒ?õ’ËHëØ®ü¡ØêQëýÂ}²ó÷ïÉåÛÇüô’¹½§ }Zs „!Î]ñ£¥hï±â;‡¸¼·ô[TÿÑ’W†]ÚkŸµÏµj?»øþyÖ—„¼9¯øÿU“Ë‘ü¸ßçºxÿwöùç_DXø;ÁÚt»Ü?—ûÄwI?ÖÓJËë0¢vý[Û;¡èv}ok¦éï¨\Yýôø÷ŽOúi]V±ªì“û;Q¼xï$OŸd¼Ž?úg]åÜ6¶Ÿeûbiú\¿D‚OÞIåÿÏy?ç¥pz®±áÈø$ÉjŸ¼ÿÈ•Ÿµœæ/«r#±Ò´;XÿÓ?ß÷’W |þÕŸâÇ‚ßí Ú–{Ñ#ÿY™^Awª¾¹~^øíÿÞ½à†“üXðœÿhHãT·tO/÷’W­N©Ï‰øß¿2—Ì¡vm¿%ÖgÅÿÐýø©Iû“÷ŸñIiÿúI4“¢$ûÿå¥M~?DŸöŽ?ú“ì?ô’:þc/¿ãîGÿ–•õ\8sbJ»4ù)“ºo©h¯£¨s{Bžÿ2Jƒøéóýÿúgýú“ËòÓ÷tŠ O¿W£ª‰Vã š„‘ÔÐ~⡎¦N”ý™Ÿ´ ŽG“Ìþå3Èòþäž_û”ÿùéC½qTÊhL÷ðYþ*Á3WMÖ5Xä¸xêIr¦&¼Á:RS|¿÷üÊzt®SŠ(¬Í‚½«áÏî,|ÇÙ÷ëÇR½GÀ÷qý†H?çy9·À{ù¹\÷¨.ü÷Ùæ'Ü®s|šUôo?÷÷¦ÊÊ‚ïçó?夕«vð]¤nò~òO¾õñ>ÌýF¥^zgíÏÁoÁªü=ÐÑöI'‘Ü®â‡#¾Ódò#ó<´þ üÝýŸ¾/Zø}#ðæ±xöñÛ¾Äw¯ÓxŽØùŸ¸¸÷{6I\5=Ãäq8nIóŸŽŸ<%>•¯ÞIå¿—'Ͼ¹ÿ†Þ*‚3JŸ÷Ÿ&ÄJûçöøeþ‰qwi™‘É_‘‰©OáÿIÉåÉnû+ÛÃ{ð¬û‡ßþñžÖã#òíäùþy?Õ×Ýz¹i}iÜ$‘Ü}ǯÊûXê¶1ÝyždŸÜ¯eø_ñ]-ûU¸òã“äDzòjá¹&zTýøBü[×'‚ÆO²Iû¹?¹ÿ,ë™ý›<%¥}qã¿~óìï&Ä’¼K⊴¯ÚÜAÃÉÿ3ç’¾pÓ¿ioéZTžðåÇö}œóºGûÊéÃe¼ç>e‰…ô‹ã‡Ç? øa>ɨÜ<‘ý÷D“÷ž]~|øÿöŒñoмÍÃòcèÿÀ¬òÿøå|û}w¨ëÒjZ•ÃÞI'ñ¼•U7Éÿ,Ò½¼>[%ͧ2Ó»ÝÏ%Ôÿ¼’Oãz‚OÞñÏ2ž’ü´¯KÙžÆIîé)wþ²£yë/j0yàÿQÿ-?¿]'—k#þóïýô’¹üÏÞV–Žóý†OúgýÊΡۆ7/µYíGûBIÿ㎷4 cûgN¼ÐÒÝ$“gÚ‘?ëŸþÔ®xüô“þzQáE4=~ÏRùãòÞ=éÿLäÿY\áPï£ûîÿ¾•U'±òäŽI8ÿ‚¯xƒCžÓR¼Žÿw›þOùçþ²¹¿"²Hÿë<·þ º|†^Ò¡¤ö–“ÿ«¸òäãÙ²ºëJѬcyÿyyp’:#Éþ®?þ9X~µ‚Æ ëñïoò@ÿ-$£@±¾ñޱÔ›äóçõ~_™ûÉ?ísT§« Rg¨iÖ)cáøßýgÏç¿ý4“þyÖÌú–ñéWÛ$’GÝÿE×a&ý›¡èsÏ™qy=ú$»òÿÕÿè¿ÞWvÿðŠÁª__F’j—|yžgï?å§™^µç™õ°ÜÓÅ^ð\jºäoq®^>ô#ÿWåÿ«®Qñßô;]ÇæG§Ï%ªZÿÏI$ÿWæñÊñÝJîë\žóQòÞO/ï¿ý3¯løC¡ÝejÉÜ}±6Z£ÿÏHÿå¥tÔ¥@0ÜüåígÄqØèöokþ¯OûîÿòÒãþ™ÿÓ:«ðçÀψç¸ñŽ«oöxä‘çÿ–ŸôÒ½šÇÁZU¤ÿÛþ;·K‰4¿/ý ?ãÞ?ùçý4¬oøþ XäÔuoÝÙÇælµƒý\óÎ?/þyÿÏJáö³œ9 zô©r|f­÷4ÝJ’ÇN·M?KÙóºGûË‹Šñ›MWQÖ.£±±‘ã’O¹úº«c¦ø»â5ݽõ­¿™‰±Óý\vÿôÒ½FǺ7Ã-:ãYÔn>ѪGò#¼Ÿêÿëœuʼn§{‡E?|UÒ¼ø-ÿ´¶Iö¸^s‹ë7ÞG†dûGÏóº«ÿ¦•¹c©j¾4Ôdµµï$‘þ}ñÿ£Ç¼­-sÆ6¾µþÃÐî;Ïã{XÿÕÑN‘ÓR©£wáø4Ø>Ãi³PÖ>ã¼ÿñïo'ý3ÿž•¹ð¢ïRѾ1xÖ›$¸¸Õ-ùÓÿE×%à¿ ëúÎ%÷ÙÞ9.'Þuþ®J÷¯‚^ƒGø›áùõ?y£nèïûÉ$ýçüô­)baŸOžûn:RÒAþ¥~•-z_Y>ÿÑý/ñL&ئÒ/1äð–ŸòÛ¤üÃêRGô‘ÿËMû?ò%PzØßûÙüŸó)Øé$ü¿ë;#Õn?ß’¾ƒ†êûæx“Ì£ýe?ËJdü _`q‡—óDz?2?öèÿWþ³ÿ¦~óþzÿ™4Ç'‘ÿ<êO/þšRùtýŸ¼ *‘Õ´¦y~]>ƒ”g—æQÈÿÖ~„ýÜ›ÿåGùsÈò«þ ”TÁ>üŸ¼ýÝ2Gó4’ŸüHŸøýfïýÿ—'úºÌ*ÖŸ¼y'ÿžiTc«QÏäZÜyð Í‚jQvŠO2 ­™¤Ž ßåÓãÝÐO³ü~gü³«Éóÿ¢ÆñÇû´ùêµ+ÉY”OQÒ§JJ€®“×ße»Ùþ®9>þúæé|ÿ.¸ªRç;pØŸc>sÝôÛ¿1ü·ÿW]ϳËGÿWÜÿ¦•äš6¹æ$ŸóÒ:îôëïí'Ùÿ-#O‘+æñ8o|û¬6eÏ®yüÿ¹'—'ðWÙß²÷ÆËï ê±èåÃÉoqåÆŽÿòο;®µ²]~ÿ|qÇ]އâ?ž9ÒOÞFñýÏÝ׉W îûOmúñn•cã Iö_Þ|Ÿ&Êþ}~9ø+QðWï#ž7ýäÿ%~ÐþÎ1}sÁvp]Ü$—$'™T>2ü Ð<]â;=sY·K-ãwÙÿ-<¿õ•–ìOŸÄáÌÿ¼câ¤þÜñýCçwxü¹$¯_Õ|ðw@º“MÔµK¯í }®É?ôe}ãÏ}—G¼Ðí#K;{tÞÿ,㎿*¤ï—ûʽ¨ë7×ÑÆ“Þ<‘Ç÷þyÖwÙ|¿¿ûÈëì°Ô¹)Ÿ%Äûi¤ñÿËÞRý­üÏúgY^[Ç'î?Ör´mm_øÿyVyÆ”$ÿ–Ÿ»þ µ³÷•<2Gÿ-Ìþ™Ñ«Æòo¨ö†žÌg‘ÿ,?å3ì²±Zö‰™ûú[«Tÿ–»®cC{GýÛùŸ»­l‚ÒDòü¹$z‘àƒËÿVõwNDD“ï>ã Ö™‰:O²O"?õ•Î$çÉ¿ýd•ØÏ<e¸®~3d“½iHÒ¥#¸IÞïJ·yãó.>ãÉ[o‚çÕmtø4í‘Épò<ïÿ<ãÿÚ•WºUÖ¥£ÞGÿ¶Gó¢?üó¯bþÊŸMÒ´h{$Ô/ Øåÿǽ¿üô¯‰ä=|6œòsJ}fêßCÓmÿwoò@ŸóÏþšW¡xJÆ=*ÖãJ‚4’ófÉ'Hÿw™ÿ<ÿé¥uObš¬A²Hôôß{uæy’Iqÿ<ëÒ|áû©ü9%Ö£n–òjçºÏ8ãÿW%x˜ÜËÜ=¼[ÈlÿÂ?cáÿÜOâ 94{=?å¥ÄŸòξ~ð?‚ ñ¥¥æ«â;‡ŽK‡‘ßþZ£ÿ¬ÿYÿM+ß|ZŸÛš‘Ï#Çoquþ¡?wöˆãÿW^!&«}þ‘á*4·ó>yÝäÿWüó®6'œöý—¾fèÞÒ¼]â?øF|+fñÙÆ’#ÎÿòÓÿ×£i×VºjYøWÁÛ.>ÆþD÷Iü´“ýdqÔvAàï ùúWîî5Gò7¿úÉ$“ýdõÎi¶7^O=.<¸î?wù?ÕÇÿ=<ºÖ¥YœßV÷ÎçÅ·z>•åèðyŸ»}ûÓþZI^cáY5ûïíýrO³ÙÛü›Oý^½w<a·Õ~HìãOžwÿY$ŸôμUñV«â«èô;ÞÞÏû‘ÿË8ÿøåk†¥ÉpÄûç³xWXI/¤±Ð#{=ßäÓþZIÿÆëŽÔ¬SÄúÄ’%ÃǧïùÝÿåœuÝÁ ]&•gáýGŽòOÿçœqÿÓJßÓ¼2öIhû>Ç—½Þ?øø“þzW™Sïž–‘ÅØÏ=®ªi^÷qüŽÿòÓËÿ¦•áÁuwÿ%Ävï¾êéÿÕÇÿ\ã¯_Ð<+ÿ ¤òG£[ÿgøoOMˆÿóñ'üôó?å¥{7ü"Z7‡4íž\rGo÷$ÿY%sTÆýƒ¦– íœT°]i¾FÇoñ¼Ÿ»Žµ|öé>(øMüÄ’Þ;ë}Ÿ÷ò¼÷UñÔóÿeG²â8üÍZÇûºê¾Øùþ8ð½õô‰o$z¥¿–‰'úÏÞWì§ÎkŽþû5ú•úTµ¢mí‰^ÿ¾~TÿÒýM‘Ù'GÿyæxZÁ?òR:þ]ü@‘ÿlêõÞOý_Ô®›ÿÙ{Ãp«ó<5¦'þJG_Ëç‹`û.¿ªAåùéWþºW§ÃÿÆ_áœTŸr˜‘ÇSIþ®JÎýŠûª‡œNÿë*ÚG@‰æSÓþ¹Ö@IåÓãÿ®””V„Ô$¥’JФÙA2MŸôÒ¡çý]>9>}•ÿ1÷ÿËJ~ÐØ$û’#ÿË?¹ÿM*ŒiçÇæ?îëFïdžeeyï²JÈÎþ\ZUX'z½?ܪ±¼ó΀/Gþ®™Q£ÿ™ÿ©+@³Ì§¤iN¨¼Ê h¢“ˬÀ|tê]‚’³¨] ¢Š_õ•˜U-Á<ðIòI]¾}]Æé'ú·¯>çý]hØÝ=«ùŸóιq4ùàzø,O!ôBho¬ùr|’y•Îk:Þ?ŸÁóï®×á­ôÃǾDòãþ µñ&Ö WŽÖOÞyŸÆ•ò~ÿ·>ÇÚÂp>…ýŽ>$Ï#ðþ±'ú=çÉý3¯ÓˆZ—Ù#ÿ„cÄú~£Ÿ¼·xÒ¿_~1|^ðÆ•ð/þ;éKbÇdyŸë$®N[ûóÍ«‰„ÎO‹ÿžO´ZiמdwÉ÷+äÙÞK¹6Ë?öëV{¹õ_žîG“çÞ‰Dv‰;ùŸòÏþy׿†Ár&'9™PiI¿äŽº(ô¯ÜG³ÿ«°y|‘½tzn•<ÿéiûÈÿ¹^•J§“J‘k£Ç${ü¿ü‡ûÊè4¯¤i¾OÞ±]Tÿ~JÔ‚-7Á"W›ífvÓ¤s“é_eÌòë ?ÖIæFŸ¼ÿW]Ì›$ó#’GòëêÒ=ñù{#ÿ¶uu 9#OõôO:lß~dܨ'»û/îä“þXo<×:èöfE·öló?yU,nßd›ëçùüô“÷Ü­+àóãß#ù{þt£ÙšûB ßýd_î÷ï¢ “¼ÿ.ÿcÕ¿#Ì´¸?åÝ>ãÿ×J<+£>³}obÿñï'Îïÿ<㎲©îS÷Ïhø_c多Œñ¥Æ¡¬'‘ký;ÿËI?øÝ{™w¥_Ii¥[§ö…ÂF—Nÿòégÿ<ãÿžr×Jç~é¿ÚWÚ§÷qÛ§Ùtäÿ–¼ÿW^›}h—wѼä’ßç¾tÿ–—óÎ?úg_™f_¿>ë)ÁL©c¥Ogöo$} õ—óÏ̯l¾»±Õc·±±³{xíà·IöIåþóþy×£'‘±¾MCI'üÏõ’Ï?úéX'ÿ‰¬Ûä¼>ôÿÈpWpðhÞð<šSÉû¸ß}Ôþgï$¼“÷’Gý´ýÝx¹}uui%Œo$–ï¾Mÿêä®Útá9™û_pÕ×xö~cüÿ»ó$“þºWË{^sÖöD?ñ*µ¸ûuÇÚ>Æ›-RÝתÚk—zTsê·ÙqÜyˆŽ’y’IÿL㎻Éí4o ¼sëþ]ÄŸöÓËÿ¶òÒ¼sÆ:ãêW×éÑ½ÅæÍ‰;ÿË8ÿëi†¥Ï0«î ýÆ›¥yo²Î;‘$ó.?í¤Ÿòβ¾ë¶3üið]­Œ'™ªZ|‘ÿ«ÿY^{ªÚOª¤v6»,î#xÑÝ$ó$¯Føú?†~(x> 7Éyyª[£ÝOþ²OÞË?ùç_S‚Ãv7îÐ?ê—éRVr¤{Gß§lOöë×öp?8?ÿÓýqð‡“ÿ ïáO´2?øGtÍûÿëÒ þ^~-ùðŸø‚ÿWõÆÏûù_Ó–†óÇû3x_È<ÏøGtÏ¿ÿ\ ¯æcâ…§—âÝR{¯õŸn¸ù?í¥z|?þôtUþåßë$ÙåÿÀꌟè¿"«þý^ó#ß²?õߪ_¼“ýdu÷'‹íýçÉW“̨ ÙÏÿŽyukx¬Ê–?úéFÁFÏ.´Oõ”Hò$tG&Ê‚y?þYÖuI¦ v›èyàó#ýÝQ‘ÿw&ÊŽO2I<Ï2³6/?üóª©þ­ê 'ÿ–òÒ’ÒI#I<ú“ýe_ÏRT•¥#f¥Ž«äiWT–é'™÷ÿÖU:kÆ”Ï.OZ %ªi÷êåW ºDþe>:˦ÐjIEW8nÁ¥$Ÿ¼ó)þÓ~ÕæI&É#®óû7N?ãß÷ŸÜJ婉;)aŽVÓ@´ÿžæTéá‰?Ö&úê£Ðìdýÿ™åÉSÇ¥<Ÿráã®o¬^ÌÇðý¦« j_n´‘$òþw®Óž&º×Ò9ü´ŽHÿ++ûU’8ü¹JÙ´Òµˆç·I#þ7JæötΟi85‹Ï³÷‘¼>øßË®»Äþ5×üU§iz=õÃÉg§¦ÈÌ«Z”²8-w$~²­47‘7üþekõh8š†]ŒÏåïÿ–uÓZZA¿Ìƒg™þÝOi£ÿ«Oùi'ý3­˜<9<Ç<¼þú=eS›ÙØéQÈõÓéÖ?dÿ–Ÿù¶,ti'ó$òüºÒû ðy»ÿÈ•ÍStÓ¤@‰ûÈü¹*¤þdlJÕ‚î <Ï3g™ÜùéYÓÝ'ü´®juNš‡>÷sÀ’'üô¬ çžOõòy•«¨¿üó®b{´ß³Ë®êTŽ àóÿå`_A'™%ti?–’~ó÷•›}y›ÿ夕¡SÏ_Ï÷Ö¤ï'ï?Û£R´Ž?3e3Füÿ²§ï$¸JÖ R6àžO°Þ'™ûÈÒ?ŸþÚW­øsC{OG¨Áû¹5Oô_õú.¼ÏNÓ~×wª@’$qþíßþZ~ò¾¯Ó´§ü?£ÉÿviÈŸóñÿ=+æólË’Öå8.sÒt ÇGÓ¬ím$ÿC³HÝÝ?å¥ÇÿkÿžuÐi¨úv•y¯¾Ï2ñö@•‰§}6;?éQýž=ûÝÓþZ]Éþ²´¼vúv¡ÛؤŸ»·òÑ?yæI'ï$¯Ì±5yæ}ÞÜ9û§ƒ_Žù7Éo'Éj'ú¹?å¥^ñn¹kŒ—W[ä’ÎÖDù?w’«®sÃö“Æ—š®±qæG˜ð'ý3ÿ¦•ã‰î­<ê»$þÐòÞ×dŸòÏþZGE*|ó5ö¾áå:ŒŸc¾¾ÿL¼‘$tO3ý_ýt¯FÑ­ »ŽMFúã˳³OÜoÿžŸóÒ¼®ÓÃúæ¥uþƒúD‰ÿ<äÿYæW¶øû+JK Áp’In‘ïwÿWöŠú ˜žOpó)œ‰õý\µ’ûQÿ‰~—gòZ§ü´’ãþzyuâÚUôúÿˆ$Ò´xÒ9.?p›ëGX±»ñWˆ?³m#{É#ù÷¤~_—%{§Ã/‡6žy5Éäòõ ûÑÓý_—]¿Y…û/m3оxr×@{ˆ$ÿL“î;§þÓ®âØéPIá4¸¼“÷’;ÇæIæñºâàÖÅäµÑîÎÎ?¿:GûÉ$®r rÇNÕo'ÕwžZ|‘ÿ¤I'üó’Oùç_Sߟ9ïû>CÖô«»ë¸.5¸}?OÙûû¯/ËûGý3‚?ùg\wö¬³ý¸š{Ûùqþ><¿úç[ïâ×,c¾ž4ŽÞ4ùÌÿWuãI¬¿u‹È49ÞÎ?’úù?åŸýs®šX.sš¥SsUñŒúþ¹ý£u²âóïºOåýžÒ9?çqOw>¹}g«'Øü?oó¾Ïøø¸ÿ¦•<þE­ŒæG&ŸnŸ"Oû¹$Ž?ÝÇ$ŸóÒ¸DÒ§ñÚ/¯¯8íÓ|îŸêãþyÇ^Õ,47‰:?ø›CºÓ¼ÍÏ˳·}–¶©ï.äÿž’Ó:£ð5G㇃õ­—‘ê–›ßþYÛÇæ«Ž¼ÊûUŽûXû'†$xìíÓcÝ?ü³þyÇ[ÿ.¼ÏÚÀö¶1¼vÛŸ"Iþ³÷•õ8,7%3ÄÄâ}Ãú[TùE;eX¢µögÊÿÔý^Ñ¿äÚ|/ÿbî™ÿ¢ ¯æ³âïüÇý\èÊþ”ôoù6Ÿ ÿØ»¦èˆ+ù¬ø»ÿ#Ʊÿ_×ú2½<“øÇuOà;uQT·U}ÉóõOþºˆ(ŸýuVeT¯÷**•þåhj†¹ST3ýÊΩ4Ìáþ®ò„ÿW%ý]å þ®JÌØÎ“þ?ëoþYÉX’ÇýmÿË9(•%GRV”Œi…OASÇA°´QEÒ%N””©Ò’…*t¤¥N•Îàïøô’ºëµÈø;þ=$®ºÇ­xuOk ]“þYÕ¸þåT“þYÕ¸þåq5M‹_¹]^‡þ¢æ¹K_¹]^‡þ¢æ®‘¶+øg ÿñý%ié_êÍf?üIZzWú³]'‘Tìma‹Ëû‹ùV¯ü³’³íÕÖ‡ü³’¼Ú†”ËÚ7úÊeßúº~þ²™wþ®¹êFþY·ÿòÒ´£ûÿð:Í¿ÿ–”RSœž±Ÿþ>d­™ëÿãæJö©aÿÇÜ•Çß’§øû’ ¸ûòPgTä®ÿå¥IáÏù GQÝÿËJ“ßò޵¨ŽÿCÿ‘Žßýøÿôe}qcÿ!ý/þºWÈúüŒvÿïÇÿ£+ë‹ùéõÒ¿<Ïþô\”Òùt¿ûoW¾(È7Gÿ®ò躢ÿò8éöÞ¯|Pÿnÿ]äÿÑuñO£/ßÇ…çýzÛ׉|Mÿ‘sÂõÞJöÛïøð¼ÿ¯[zñ/‰¿ò.xOþ»É^ž *üß %—þ?¾ßëäïKãøÿÿ¿uÂOùÿí¼•/ÿãÿþý×JøÎsÏ<9ÿ!/×Õ}5§ȱoÿ_Uó/‡?ä%âúú¯¦´ïù-ÿëêŒÌÓ`kñÿgþýUÔ¡‹íWŸ"ÿ¯°«ZÇüÙÿ¿Qj_ñõyÿ]ã¯2‘ëT2¼]4°ü9“ÉvOÜI÷Iʳþÿȉýw«ž2ÿ’s'ýp’©ü/ÿ‘?úï_C†ø7yOÄ)¥û çÎßñõêj¦«4¿ðªíþvÿ–êˆ_ñãyÿ_USUÿ’Woÿm+¶‘âbN5?äN®óövÿ’ýà¿û ZèÊàÓþDêï?goù/Þ ÿ°Å§þŒ¯¨§ð#à?§ (¢±>dÿÙ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.456556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/images/hyphen-funny.jpg0000644000000000000000000014073400000000000030150 0ustar00rootroot00000000000000ÿØÿàJFIFÿá@ExifMM*‡i ô ÿÛC   !%/(!#,#)8),12555 ':>93=/453ÿÛC  3""33333333333333333333333333333333333333333333333333ÿÀô"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ó8FH-ÏÖœ²—Àjô¿‚þÑA‘‰´¨ðMI©Zj>ºšÓWÓæ³¼Š3/“!:ú« †² ij^ñU†…±q£¨³›Ê”ºFf2òXTò±ó#*Sµr;Ñž`ëǦkKÄñ7†m-îu­([ÚÌâ1*N²„sÑ[oLã¯JÄ¿C•tçgZ\;0º¶†Š˜£C¯ç@L±n•ÑxÏFÕ¬¼+oqwàMGƒÏ€}ºÒTiy< ž{Õ Â~*ñ5˜¼Ñôs-‹1Uºštƒƒ´HÏp1ÁªtÚØJk©‹·s’}ií"ª“œU­kDÖ¼7sî™%‹MŸ*Më$rc¨¼gØóX×E¤TF²³K·F;ÇØÒåw³6—&…ÃJ~aùÔ¬FþÕÒüCÒµ='K±¹¾ð>¡Æ/.,dVyÇ;;pOà+2÷¾'µðÄ>!›IQ§M2FërŒÌ%* 9ÉܼU85°”—S0ôè õ¨$S¸c§¥oê¾ñg‡í"¹Õ4 \F† Rf~ê°Rq“ÆzdPëžñ?†l¡Ô5'ìö³0O1'Y<¶=…éŸ^•*CæV2‘Y—ŠI8¶t¿ ø—YðüšÝ†•šr š×H§HcƒÏcMÿ„;ÅMá‘â#¡²éÞHŸp™ žV3¿g\cŸ\sŒQÉ æFd`àdþtùä8í+OÔµÛØìt[o®?0ªª‰ýæc­mjþñ~d÷º†ˆÆÎ1ºY­fI¼±êT|ØÎ01B‹aÌŽj=ÅŠ“ÖœS"¯h&±â‹ù­t+$ºxbYœ´ë NÞªº†¹iöèKe{[¥±–E•J¬ÎÕ¹ã·Nýi¨¶È›oZž'>•éÏÁsià!©XO«Oâ·†F³yâòÃ’¾hû£€ ãæíÞ¼ëÃz>·â™š K’ñÑCJÛÕ<ôÜíÆ}ºÐé²TGÜŽ)ùËjÕÖüâ¿ Ú=ö©£dŸë.-§YDcÕ€ä|T:†õïIvt]5.£µdY®R>Yr1»­.FW22ÊfQŽ™¨®ku5½¥ø/ÅúÄw³XèŠég<–ònºEÝ"2®zà÷éïOð…üMqivo­´û8Ò^ÝÕ9I;T†û¯ÛµW#29Ã.ŒÔlç‚k£øàÆð7‰¢µ·ûdÚmÔy·žêDfgQ—(2;w®q‡Ú“Ver NFj£œš³pEUïšhLšÝ†î:õKÂÀ‹ ~è"ìǦ+Êí×-^¡¢DðižcüÄn9ÁÈ=åT„\‘ü™r±³nùH=­he¤åPœwçBdO+jªŒréNŽä$(ˆ¤€À¤2h‚gbìŸy›=ÈúRÊÑÀx‚=I`? ÔMv`b«Ž›Ù Se%Ú›Ô‚w19aü°(4‚Kçi>ÒûAÊ‘ÛüjÄ1Ã#Ÿz5_Lÿ“cûÏüÚþMŠ_ûÝÿ9)þ‚]_öoû-¬fyäÓ.bŽ8ÆK8g@õȦx|:þÌ· "uÒo`Œ)ˆáþøæ?h—þƒCÔ¯õkÙÞhÍ’+áLj«žrÁ?z?ÃMîÃá…æ“«J%æ9âóžVåÉŒ‘‘žr@'ã®kà4j< ®Kn«ö澑wcæ8‰6 údœ}M^ø5ä µ[}A%Žò+ë•™fx}«ÙïœÒ[9¿ÙÄ•}~ Íåˆí\)b@cædïùVU‹4¿´š¼’;²j“Ä»˜¨"bô&´?gYBêZä%†çµ¶p3ɸÿÙ…T‚ÊêÇö’€]ÛK¹Ôg¸…p$ŒÄÀ2žã Ð2ïÇhïÇ>´q”ž!f™A®§ã<²[¯ƒÖd_í¸xCŽ+•øñp-Ónl~ ^iZ›+ÏWqMðþYù²„ôÈÎÁȬ?ÙÔçL×Iÿž–Ãÿ!V—µ»‹àþ­o|’%ÌÞG"Hu`>`Ùç9'­f~Î_ò ×륿þ‹¦—Á²ãÄ^?‰¤,©«¶´ÝØ)ÝŠÈt^êøµ]F;öff»K–Y˜°åÇ'8õ«]jCRMP뺳j Å»7æ…þè|çž3Þ äã8§»qÒŽf>Ua— s¨Ü½Î¡{w3 C%äÍ+m[œrkNÓ_ñŸ`-,¼G«[ÚªíX’äá°\ò£éYˆ~RiÊÙ491r¢ŒÈò™ JÒÒ¼„³HORÄòM\7ú©²:y×uq`SËû/Ûdò¶wnqj‹h¦H¥Ec²-Xê:®•i%¶—¬êVVÒ¼6מ2p:ȤŠãTJ:lzæ­žPÆmE㈊œåvg99ïUÑÀêMJ#šwbI4ËGH‘åÒõ[ë‘BÈmæ(áБØö¢ ÍVÊ9£¶ñ³M#K*Å{"‰¾ó0’{“Ö›CÚ«ÎÙ|tÅO3—A-ÖM>X¥°»º´¸‰v$öÓ4rÜn\R\^j—”Ókš¬·ð °ÜÉví$cž‰ÈêzzšxO— õ“#“š9˜Yn î¡*O©êwÚ„Š†57— 6Õ=@Ýœ ³c«ëzE¿Ù´Ý{T´¶ W'bg®Ðsª»|¹qM°¸ïEßp²q ]4ó]Ï=ÍÅÇÜO!yŒrÇš³<º•þž,ouÍ^âÈÚ[Çxð½ÒqÆ)>òÓØÏ£™ŽÈ±qq©]Ù­…ƹ«ÜY€¸¶šñÞ,)FÒq¥G< qjð9áÆ)ʄ䎔¨NOi6ØY!—Wz­ô o}­ê÷vÈÊ ‹Ç‘2½>RqÅKcw¤HòéZ®¡§s [†EsêW¡üª#"ù½('-žÔù˜r¢K©ou+”¸Ôõ+Ûù£ÎÇ»¤Ùž»Aà~^[qqÂΧ ‡C‚9°cŒÕv“ËcííJïqÙ ªO©ê‘,:޵ªßÄ­½cº»yT6È O8'Ÿzl³j7:Jé—:Þ«-‚ª¢Ú=ã´AW@BqŽ0(i•Í?ŽÙ5W}ÉåDsϨÝik¥Ï­êÒéꪋi%ã´AW@BqŽ0(šçR›JlÚæ«-Šª ´’íÚ«£a8ÀÀÀÇó…ïÏ¥Wf-'s0´NÃÃ_®ôËá…ðòÜ«¬è.¾Úýac›MÞµËC{« -&mgR:xPÈ\Ÿ+Ýp?‡=ºTn6 ç£fùzóG;bQC¢’[[¤º²¹žÎ愞ÚC¨ôv«Z†±­ëP }S[Ô¯­†‘5Á1œt%Gýj¨Bc楹£™¡Ù1¶r_i÷O§jwÖ:v³¡,£ ;qš…IJÜÉqss=Ìó6é%¸»¹Æ9cÉéR³á‚ã÷§0f„Ø4‰lõ VÂÝmôí{V±¶Ÿ&ÖúHÑIë…“I›QЕÿ±õ[ë'Ë'Ù¦*БÓ#Ö¢G¦b3ŸçK‹• †óUµ·š kA33ËwΫ#7Þ,Á'¹=iºtÚ†’’3WÔìöï[[§ˆ6;HÏØ×q4l98çÚŸ3 !ú|úŒ·Ùkºµ¬·/æNðݺ[“¹ˆ?1äò}MC±£“í usö¡)œ\ùÄJ$<–Þ9ϽL ¬|õ¨]€õ¢ì,‰n¯µ{é-å¼×õ‹‰-¤ÀÓ^»˜œ’~Sî*­Ä·WwOq{wypà+Ku3Jäƒ'žõ:`Æz…”’hæadSc$õªÄÕ©²µTo½M5t4õ;sm™*¸`¿ã^— f@ •eäï\/ƒ§[}a7ûÔ1ƒèMw°F|Ù$$Û?P‰¢•P\‚£“·8´õ¥Æd„·ƒüþ•#p…Ô˜  n¶•E”.JíÆÚŽT~UJ>:•þdÿJ"Ù)ò¯,3œð©]Ì…ËóQ»±éOÌr)`¬ÛN╆VxÕ˜Ç +§ýòûb.dBÞ÷`/¸©Ðíy8Éä r,d¥ÆÞÄÐI¼Å•"A†Æ~_âüjf3 ºáW$ ‘ž§žõ;‹Ÿ9ʰò±ŒªtüOZG¼*îfêHýh”O Ë˹æpx%—¥H»_ˆ#lâ•z{€içd4ޝÀ$ïM·5xÓùÉ<{]>Qó7(ê{íQÄ³ÂÆ9$ ‡“¼mÁô©ü’쥀ÚÊ}i –ñŸ$’Äõ,:PMj¹œP2i’Ú,¸‰¤ÝùŠî©àÿ$¡¢n:tüi&U]Á=H<š š1Á1¶Å'!p(­+x™aβ(¢ÁsË"Èç߃ššWS$ù8¤ÚYKzsP11¸õ¡ çœÓÐ`bŸ³-…¢à1WnsÒÙã¥JP‚i@ïéH Ò£S‘K’Ç”®1þè²ÒsÐ{RÜ(< UùS=éP3”\.ÕÏJž"@ùŽ)ÌÀ)ò¤Ü#ôª²K‰:ô #-“Œÿ*”’*-×ò§mbFzQa\°G¿­VÄš²Ì?­UØYòFh@5!,àŽžµgî/^iFidqƒéEî+3 éœÐWaãŸzr_# =À*N*„FX°­DWæ'T¸g·Z2HãÅWÈ”±" Aó{™×å¦ÄB-“Èê*]ù)ÿ­JÍè;ÐÁ=*IòˆÏjo À-IåçŸÂ††Üyb1»4ž^ÎGNôÏAÿê¤DŒ»¾ŸJ©,Ylf¥iˆ|sÒ‚Û$c4ì"“ä\uãšc—޽ée;º~urÍ@Ìsž*›º¬Ìr V­TIgKáK!sæÍkxT»œàÛ?z¸HU¹5ÅxEC[·4‘ðzpMw‚1BtUhŠ328r6œí^úÔw-wW´—<íÇ=È©¢ßºŒõ ?ÏçE¬ ¤lIn2£pDZ*XÊ“-äo“\á¶rˆ¹úTrj¿emñã2Á#þO‹K1Hei.`>U‘·søÒÄ!Œ•Nö'Œc'×§4€x» U‰‰ÏéI;\$E#pºÏÓ½Iš„©’ ϶ JÁÑK³/¾{P2¬|¼™e“uÏ'éJЈXùs2&9sŒþ´å̳Iæcžp?ïšS#±ùŽG\bËœ*‰YpN–+[ªªÉ8ÆØÛœU††9F$rO\ƒü©¨J¹ª´cŒäþýj` È‘]e8^Ÿóý)²Í ûÒ¡˜ö§™ÎD€ö†3éPVÆO›.Bñë@ 2–™ÝZC6ª„ãëNòÜï;.r‡ïšU"Ràî;šXú•‘Ü3ÉÅTŠÒçg@Üõbrh«dÇü¼žqš( a(f9íšz’µ&Ði¥r8ãˆÁÉ#µJŽTi¾^Ñž´ÐsŠH{b{ ÓJ¶yâ¤^‡æ–B6Z‰BæœÄ384Á•þT±–-ÏcLD»¸Ó Ï­6QéJJCä9§FŸ.{ÐpG^hÝòœPp$ŽE5“œ“×µ,nÁíK+8ô¤22ÛW¢Œ’ßΟ´9¥Œ( t¦MÀ¦3z˜AרR¨ÁϪ;™0BŽ”·‡1ÞF?™Åÿ"«[î<’>µeÜc=¨heg%¤ã·zc¡-êiã^O½9—2ŽÂžÂ°õM¨¤þTõÚÙÏoJtÇ÷YÆ=*µ«e˜Z@6[’8¸XñžG¥6g ÇŠ¯0%‡½0'W¿Ö˜ù~ù'ÜšaA=6"4Lpx©àpJ~öÀüÅL«Üž”ƒ´SP°ãúT¬ÛNisK  À<O @Á9¨öý8¥|•´ÀxÀŽ´ÆýÑH§§^)üƒÀâ€*yëV”î'w¨î“h#!Ü¥&1ÎxûÜúÔhpŽzS¤¶j$$!Ïzb!c™GøÕ…“ô5“ž´1꣚z€1àTN¼pEL˜xäÔ ßóH “t÷¨Þ§—ƒþ5_ â© O„£ê"7”*(ÞPŸ¾GAú×oa,±«E1-7Fç¨ö¯?ðä¥nPd–Ûùñ^‚C,ù9ÛòƒT…} LFÈÉ%N1ÜÔ¢6»³Ûº8>m¡—‚GáK ÈÑ ãµ1¢òÃ>=ùê(4´X[™š`Þoâ5PI2LÛ˜,j0Wn9õ¤{¦žFñÆ’ŽŒýja Ž€J\àRŠû‹’ÌAPx÷8§)IåŽÞäcó©>Ç!}yËŸzc Žõ àφ'™2fG? ‚ïΈæFdpŽŒ>]ƒ9¦2$¨d¬yé’ÛêX’D;‚§PE"fYÓ&ܮќ‘Ê„ ¿»³Œ“O’,ÆÇî—œ–Æ?t‘ùÛcT`žÞ”Àjº7ú±ÅH0ax¦‹y±ª¨áÍ,±Å±KL=õ  ÒK¸í¹ÏM¸9ý)$XùN:(þµ0‰·yŸu|©ÇçJL’²SéÀŸð  æ§c$Y‰Eþ´Uô …Þíß,ÜÑJÃæ<ÑX:TœcúÓ2§®iÀô¥@ѶX‘HÀcò©¤7o\TîàЄK÷AíM °éRc#üEDX¡ (€pÃSe€oÒ ŒóCãf1QFùsœäÔ¬¹àT1¶E5°™9/½,jyÍD[rŽx©ã?(çœR`†Ìœt5#•HÄœö¦ìó-ÒŠÜçà QHÛQV‘ 9=¨aÔ—p< UiGÏKæ6ÿjl¿pžÔX bázSœ‚ W„–¯µJ@ÉüèI´/4ŒÆ‚ÏáL Ìphy6ü“õª¶ç,ji ŽÕG`â„!ò!.)UyùÒo%š†ù½#R1ëMv =ýi…Ny<Óv•8íL%#œòju'iç¥4.ð¦ 9>”²6çÏJy]ƒùÔIó7&‰Y±@|Ø¥*dv¦Ä›—š0w`qLçŠáOZ\íàt¨ß¯<~4€n6¶ìqéS†ÈçðªÌß0õ©è¢À‡0fB{õb[hÕ¶`±`âªA†›8â„î"Ïz®§‚NZw¯Õ%SæSLâzõÏ­G ùx54£_j®Ìq@åÏ=j%䊞Ny58æšØ–oh†¡k°n>`â½àp»ÁÁëÎ}ë„ðÆÁ«[îRÝBûpk¾h_r¨ ©»æg5H Q\Æ»K.xj/=®>ê1ëNG°¬ùlRàŸ–E9äÆÇ#õãéW"¶‹N´Ì žrÍ÷‹ýi^㵉¢¶·hŠðìNâ1ƒŸ\R¸‰‡˜Q“Ÿ™Žÿ¯C"ωv2¡Õ‚æ¨Èª÷"ÍßžsÉëøPÀºÏ”äàeŽyæ›)X2îòÊð›?…W")[t:2€7„ᾦ’+Ppì&`y~žàv¤ãÇÙû§aŒcséMiÑ—29ˆ’_$·ÿ^§3²;ÄŠÅzîE Ç¡5›÷„´Oü;†OàGJ=ed+ òבžäiÁwÚGû­ÆÓìj¸´ÅÞ'sž 8ÍO •¶oVoé@ˆö¡‘u“Í~ˆÇrÆ¢šìQ«žîÛ!V€q¹Ë#dýÝÜ-C;y’&áޤz jÝ@~a&sÀTõÿ=é¬û¯`˜¨'š•'·ºì¯Ò«Ë4“¸Š6?Ú*hI."ól»†zíãE7bCò4näwó(¢ã±Á;njQŽôÔáŽAÎi­÷¹¨&íÊEEpïL‡C“×µÒ0QŠb/™Ï_­K${‡©Š»š ÀüéŽôâÙÔj7œôw`zw¨±¸gŠR»ŽIúSÄxȦ”)ÁаÒ“gÎJg·0%(LާŠ¹Ç™)Ør)â¾wbœ1Ð℆Xæ‘ølw CY~aŠM›ÇãS@êi"®G EMœfg$ÔѨdÎ>‚“n ÇOJ+’ÅO<Ôû¼³P>äÂ>ñÈü)¡2Ì’OQQAòsNU,¸4øÆÕ•U‰çг!ܿҩÊO=hHZF&˜3‘Ozgª×xJ?3QrÊ„úWk+ùI— v°Êƒ“øW áBN«ݰ î#һɚ% K0gé×ïô§Ðc¬e±7™kå"Ÿã<ã׊mô6¿ayñ,±©Ë"1‘íKöUœ2AtÑ•àmãƒüê ôä •½x¶pX6?:C!/q;Ž6†!ÉÆµX·2–C‘Ëœqþ}i¯f$I¦À9ÿÊÇ×ZY¯.#@È7'L(·&VXä`@Ì ƒÍ-Â<‘²Œ÷§øÖe²Ì–ና,‡9nÞÙfyã¢B¡\£~F>ƒ<Óäµ1ÄA"Ÿïtþt¦9$ 1÷| Öó"(T ˜çŸÊœ%ÇòÞ§Ö€)’9"š2©ÔÉoÞiÃ|‡åˆ€q¹™±ô«žR¶7Ÿî/Éâi£òÏ Ñ‹J@Š’4¼ˆ˜:}ÐP?­¼¢á¦šd\ü¬àŽÿh-¤hyp£qaJmäÛä’X¸ ãÛã#‘“2’E'€  ¯z8uó¤Þ2s°u?Nô·´H 0íùF ¯4 0¢!"ü‹È#úý)ˆŒ\Z¸Ü„íÿ®E¿Z*!%ÊgËm¨NTlè(¥t3ƒ-óàS%8ôü)äpI¦6XŒ:-¡ÌX=ÅVJ0x©–LEŒÔ`g-Óµ$ÌØL÷úÔ Äãš7ãç¥.ݽpsLcjûSˆíOv'ŠŒü¤zzÓ°\z) •cŽ¡ÆßÆœ_rûÒhð§S‘žyªËÍ‘V9íCœãšÁ‘À#·u¥HnI£a±dP:ÒÇ“‚iH.اb€ãT2FIýà:ÓÁÎ2(ãYÙzÓ™ýjIxïZiÙið]M,AæÉXsóðqÏãME°nÆS. 23µ¹Íh\ÚMy¾Sù;¶ïǻ֪:¨Ç¥-ƒrÚmÛë‘Ö™)MG  SŸ.´ Œ8õ¤‘2ÙïíM–Ç¡§JÅxé@‡ãääsŠ®l˜ÅJ§<ši-¸ñü逻É8šxB_ÍE·kfž«g©˜Ñ<‘LŒcÒ¡ØWb¦’ët ç=j5bÀ P%Æ:S*üôõ©~TRxŇ>´€‹r¯Ö•qÆ~”¦<¶N(cŸ¥;…€#SùU Ð +g ŽZ_Æ€Y•³Ž)Ïœqü©Ì:B~^}:PÀb&å%=©žPSœÒ– d›’ç 1^õÀ/O¡©[åíÚ«ÈKS°¤æ™î|SäùE2ÚàšhGmàÛt‰–N4뎄ñ]Äòy…wB‘ž¿Zâ|$Â[¹±ƒ98k»ˆÅ<1m/Ç#ÖšØƬ ]U8]ŸáO™a‘J´M+uØSõ©#a(bªCŽªGTW7,‘‘"SüqïHe6Šòê@ò(•üyÏJ™aÛe¸I ®å©f³Ù&žF~¿»àj„ìÔ8¶ [– Kcÿ¯í@‡¹1'͵Ù'ö¨cV\H£xPvÏ_ëP¾§®Åä(£FÒòª³ 䵫0‰vä¯çI±ØÐº¸Ž"3sóm$!­EÈxö£ì3ÂíúÖ|\Ø‚\•~X±æ´ä\|Â{¬‹ŽÃaûBBViј·÷±ÄT…Nÿ4Ïòà_»ŸSL’ñ!Pd„«tPÍ×Ö£K¶Sбƒ‚CIíÅ[k³!»“†äÿõ¨U[‡2C¸vÏÝãP-À1–‘[,y*˜ÀúšHã†o1ãL•BsøQp'Š5[¾…9Ñ€Gÿ®’háN äõ$žÿ^œ…eŒD#u ÁB¸ûôÈÕÒo•K.xÏ­1"d‚Y2ô?ß#4Tr:o?2¯¶:~´P<Êcóvõ§"å:÷¦à¿×Þ”exÇZ†!\758@‰ïQ?ZÛf dúR1ócšnÖ(zâ¤Bž¥1ÓÐê¥3ŒÓ.$çå4±Óšb:ž=(%·`gñ© íéAc•ÆKdõÅ2Ip0*XÈ(sŽ*œœÊqÚ€èH ð}ý*läg±¨Ø` äЋ“»½2SŒãÓÝÌ2ëQ3œãµ;ø”“¸Ó¥<ŒRFù8¯¥8°ô¡ˆ’&D!¥‰fAÕãwøWQa¡ÜxƒÂæòÊ6-k3·]»ˆ÷ÁÅrÎz×mðþöïK»¹¾Z[x -Ô“M ‘«1á-úÕ9õ¶„~íüÇ;È?zÜÕaH”ð m;@¾´ Äʉp…×jàuÆp*¼ÊQmÂqœ²¦qžØ««2NA<;Ó>Ï gx‡i$HÆ   ëqn±šuy1òªŒ’¥VþÐ0•†áÐÉÊà±Aš´Ën÷"4sŽ6.*œpK<Í;$‰.ÐXPHJJËhÑ3ž¶y÷ô«±Â²:¼ã•û¥úçéD‘þè €Ëµ@c–úàSR-©äÆ6ºð çJC,°EÇ™8ÜzÀ¡èÈ]~Î@=d~bœ$[ƈ[€•\¬R?™3‡^éñ=èe§yTy«žAmß(úRyWHŸ$À9ûĦ*O<˜¶ÙBÀi \ý<ù¦>‰ïƒÓô e|MX¹äîëš*E†ZÕ˜úí-ŸÆŠós”ãÅ5NG`>´÷lŽ)ª‡š¹1fÈïÒ¤Ž"Ç‘šL}µLnqNâ°Çm¼g¯¨Ø±à Qþ²ARH¼sÖ–ÀÊܳcÖ§XÈZH@ßÈ«Ghàc&†ƒ¸Í çµ)]¼ö÷¤Œž™ c‹m_SPÆ3'#­LÊ;sP¦Lƒµ12Ñ`£rX“SHɨ sÒ’) ½@©ºŸ‚þ˜§G»ƒ8¡µ¨F.NÈj|¦¥<‡äB~‚´m4õb¨‘ýAV¬Ûï=ŠÊ¸§ŽŠvG¡O/“W‘„ÓÝEÂ#¸šîb¼Ò´7GµŽK‹rÈg¼ fFü¸=3Æ+ lÌ’™%mòl~•9¶è«ž;V/1kH£¢9\^²fmãM,Ûá_½ròЀÀwü*ƒé2‹Ó •°~bCÃ×ë]Ûù|öúT²À2rr8éPó ·/û2’‰‘™w‘‰ã9ŒC6FO4\DŒ¤ ô4*\öÅ"MÁÈâ¤29éÚ±rHô !'¥XUSÉêi2¨LP2 ùÒLù\u§ç8Å@X´€u¢ÀîY6Ãî)ŠNãœñNÎ8±N 6ñƒ@Ë4€ÜRùdw ¤ô§–ù}½©ÜDg Æ*)0ÓÙ°:Õy äñé@\«#sQÇ’ôé:ûXTnéT#¥ðÛ”Ôâ\$=kÐJ2*£>JòIñé^w  £Ôâ0ìÞA¸ÈrkÐáŠilQ¦pÎéíBÌL `É€AÁÅW¹Xf‘åhÂãŸ3'¶*»ÆÎätBƒ*ʤãð£e­²4óNf‘ÿØË íHd‘AŽË+(ã#’>¦’K5fÃ@¿óÌãéšrËn¶ÊÁÂ!qÀþ‘£eH‹2C—”%XËÆŒc,AëúÒÇ*JØ·¾~„Õ8Âe±ˆ©È#¨€«"8ÛkˆÎÁ÷\‘×ÛŸé@Én$1À|Ʊ÷W¡'Ú«¹y·Eä‚[ü(v·eÉ}«Ÿ¾FOàMUµòe2I ÊÙl*`qÜP˜4YxÜ;8¸h9aœ’i³2Hx22©V0Î,Æ8§4C '“ŽðÓ„6σÀrJcf3ºrƒÂ'?¥K$±ÆU–éïQ$ÆÛËFò±îzçß„mT\JžZçÇs7à*Fh®~s3ƃ¥HÏáLþφ&yB)~ÊNy¦¹‡pk‡rÙäü€í@Ç:Ë+Žñ‚ô`ÿ *Hç²uÎÖëNh 6eÉÀîjLmN´Æùi†O“æ¦ÀFÄïÎ*™°É4Ä]ÝiÎä «Ú‹_–>xɦ»3ŠUF#$àÒ:zSAŽ¿¥JX1úŠƒ±Å9ÍÇ’åý*2¥Š@Øô™.zq@\x?- ½*¨ HW'=½(bû‡ Œu4+  Ò^¤ÒvZ±¤äì‰-áiÛ 0£©ÇJÙ·µ 6À±=¿úôëkeŠU3ÜÕèãïÔ׊Å9»- „TÕÞâÅEÀ©R-ÇwåíN’©Âyh+cîŒ)<×a)³¶RQA v[íN êÃ9«Ð[7Í—; ‡ßŠ–=)äól°¹9w€žÕ¼iŲÅ"ئ’$‘mæ)!ù.CRÝYͿ0ÂÂ}«~ ‘eÆò›„»¦:qLÔõ»k½:kw³—{ ¡BB::õ­T`ÌV*|ËMnHÔóÅG°*z¯z1‹meÀû¬¸ýi|͌ČÖ±p[£µ;•÷†P%‰ÆÉÏ¥1-®f˜¡‰¢gçR1îzÐÒ!iïže_ݤd‡+Ç'·ë]š–í—vVvcó¤ Ú£kœUñ2‹åGse=ž €Q¾ì‹œ}+>î×íQ)‘Y3þ®B¿ç"½>ïI‚î A m'æª&Ž—öéÓ"¥¬$˜åÏ öǨ«…àï`ëF¤m4y Ñ=»²H¸aúý*åN{×Q¬i-oq%ÙÆÃû¹óÕÌÏ ÛÈÑJ»]_LW¥F²¨¼Î ô7äÄEèsŠb0sÅ*¾çç¥n`J ¢’DÁùM+ŸNôâF0@üiôùS9Î{ÔR6WŽMKÎÑÀ¡”€8¤€bä!ãšHT4œâ¦mæ£Neã¥6¤["¤B6€xõÍJʾ^N Bdø^¥qØI”qÇJ %>s€1Q?+ýh Œ·~j"¸äÔÜÑ(ÊÕÏá©Ð¼RIÉ4è~ð¦E£H±ê08\òOjîDž^É)þúù˜Ï¥pº4>uõºvÜ>ƒšï-àIŹ”7 8ç×!¦NêmãÝ 1܆èè{{Uqo²HÌë ßÉR¹\ÿ!V–­ ØBq×­0ʰ9diaón]øÿ $ÚŒ<)·?.â6ƒýM>@…äAOÊÀÅ1R ’IàlÀ\•[+À‰¿él€}@¤ÍÐ~rŒ9“Š`u-¸gû¹''ëíOhL;TM°¯ gOÔt“4#™÷HßtË~4Ìð’£yrÈ›ú€síV„±Úò*ÑvÃô§<±… ž¤79úRÉ0gòÀII\º¨éøÑ`¹ ΰº´e° ýEX‡ÎhÇ6þê¾¥(v‡ ò±ò}x*º^72ź<à ¯=hWŠR„Å#n=™wÆ’1¢ìÎ܉…÷¦”2 Ë#FŠxEdýiÎdŒ“æ(B@  }Ö˜Š7öñÜ]¯˜Ž€ëV`ÓÄ Y"\c¨<Ó÷+|¤’1È29ªÿd¸aº)PTKžiåÑdî7l™ÿ*¼{£]³´›ÁþãSÐV<þEbÇ5Ž1R¬…œýivg'µ@ÆÄ¸äÐË–ÏlÒ `Í;$zb˜‰eHÅTt!³V|Àª zTEƒŠ¥o˜r?rí ÏçHÇ+ÅV$æ§QÆZ…^H¦# Ý?*br1êiØùMG»'Þ¤-Æ9¤$í?ZØÒí„|ÍëØVm´>}Ê©éÔ×M»Ïvãð¯;Y¥ÈW. ›u$j Ç *Ä »æ=O5_•W»Ò®F6ÆqéÒ¼‹]ê{"€»‰' >•ÕYé[íbÝ *£#‚OS\Ôi•Åh[jÚ…¥¨·âd\ãÌRN;¥uÒåIó˜ªs¨’­¨Í…œÆB‘BÛÛÇò®6ׯþDË"ÞhÝÆå°0zí#¥Ü7:ë(¼¼‘QyÙŸSYKá+>´ïþô•ÑNta«¹Æð•𶆬šÍã\fXtíÎÃdQÜí wç§¿j½§M5õîÉì®,|Ÿœ1e7TÖ ~Ó#8û"7©bM\M6¤ ¢žª¬p Ñ:´%´u.8J«y¬Ö¶ú•»!º‚-˃µ±šçí­ì±ä-âKò,ÎF<ÎÀã¯õ¬Èâë%•zLJµBÙg¡Í`¦–èÞ8y$Ò‘‹ñ$ÚTÁzZPœn‚>”9ÑkÝf2¡Wª:_èjr˜¡-p§rã’}…y®©§ÎUí® xîâæ0ïqýE{m¦©g}oÁ:::ämnG·±öë^_âÝQu=m®#R¢"Bz¤óùÓ²¤ÔÓªÅÓ’Ûð81Á¦´‚ _Ôm„WTÿW0Þ£Ð÷ªL£o½zqi«£Í”Zvd‘äòy©AÁÆ)¨Ú*YÑÒ†$@ÑC~‚¤ qÉ¥"¢˜È  TƒGÝ9«Ç.ç OJšnSŽ”XHäÆ@¦Û©9$}MF¹  S‹íàsš>ažôЙšcduëO ßšG"àŒ~ ž*i·OΠ“¥Q“ï’ɤ‡© m®*„už[TMË» HÖº™b²ût,σ fm¬r¹ïù×5árZîE cÉ8ô5Ù¶@O½žØ¦¶d‘ƒ¢‘¾&åX¨ÿ?JY.cDgHäôÚ¼~u[ÌýÓÄ×øè”ûsIËå“u"ª‘òår)\¡-îâ¸VÛ̽T…É÷©A¼1¶Á(ç_Qõ¡·‚ІkmŽ,î:Ÿ¥LÓÈêye;‘Áü¨`WŠ9’0ÞwO›æ9ãPÎf™Z=ͽÜõížÕqîX¶Èã’CþÒtª2Å$R´Ó*þôãà/Ò-£hJª¦wpô©dHåo™$‡G_èhÑr©Ô –ƒR3ÈP)‹(~ñ Ò˜Šå¤Hüd\vÆãùÒ1]è³ÈÈ ÖœÈp#Â:úlÓ•d‘] nr^€¦.G–sôþµNrde‹aCÆO•\1ÈcF§=?ô‰—"÷ÀïƒHdjñ³ä €w©§™!ãyYg!3Mn.âqŒœrWéHeS Ž) (râ€&G&Y¤•‰=qE2B¾ùäg¥]çAž8¤vÅ‘œ ULöÈ©  e,y4Ö㎾Õ(À*¾ì¾3@\îûRFq‘¥?o®hÚu¦")I9§ÅÀçñ¦1ÜØÓ²UqÒŸ@GËcƒMZr(9b(Ï8€ß¡úÓù¦’íI»¥5tØþV|rN+iWoeô¬ý:<"lšÐFårsšùÜDùª6}>Ÿ%$‰€xÇaÖ®íý×AɪQœÜ7¥\èTzÖq6èNœ.)À‘ÐR)@­“3cL`ôQK·¿åKŽ{Òž„š«ˆ‡äcŠaL”WÀªs/•\òø[Ðgó[S>ö=öçy>aýk8“§5¬Ü>àõ¬çM…“Ðâ½lïWÐñqÔùg̺ŠM£§¥9äÈQÍ<óá]‡õl®{Ô ìqJfF>¹=èó ÂUãó¸¸<¼.@a‚@æ‹…¬$¬ö§ˆ×h'“ŽÕ rÃL ·8‡SùÕûu1§É€ ,vG ˆòG9Í+ÀBÃû¼ôª¦î6,ciÎ2FyïZ Ñ;wÈ4N¹w"tŸÞFå¨{lË…ÈÁÎàI«¬œ±È±5W噄I.$'±àNÀDC¹b?)8ÆÝ‡ó«Œ_,¬¡GLæ™%¼…W%:ö8"½f!$¼9þº@V}É,Œ¤ '¨åÍ:5Ù#D·g¥z@lUFÕ£‘¶ª9o÷j©°NH$“Áæœ hÎàÀ?0ÉÈÛO+‚^û¹ÁS4¨ß¸¬Y–cTòØR)ÂM’§pIâªÛ¨%†*½*AûÒ1Óò8­³it2Ye¹$¬²3Ó5Fqûö¡æ´Dï”rŽáQ\Û-ÓµÌÏ¥:x'JW‹¹5ñŠ´RjÌÌ~>ïZpÎ0sF0NA :ƒÆ)ÊFê¶s•æFqRÛ°+ŠuÀ Ef<“GA–‰dþUsƒN#9üéA_PhHD2§ÍÇAL`ÃiÅXÛ’Nx¤uæ€ $óÏ ©Jçµ7€ßJs( Øn•Vå³Ó¥NÛ·{T . èS-ž*å©ägòªdsíW,ÐXðÌ sTIéšj‘¤[ŒË÷«Û(¸f*7ž¤ ÄíRÅ$0[G#;@\Œd ¿€è$P£å9,:ý*˜]Y#†ÕÌÈoΑã–%G…U¢l—dçOOʦ1ª ýÒ˜Ørƒ·Ò«"3²®!Æã§ùéHe˜•LA“Øfã4¨ðÙÊ÷'9¨ÝÖPÊ Êž@= 5E¸±~sŒãXΛ™®Á8_çíL%rr¸ãÂß…DR[n%´y=GzZ†„ï8Cï'ø†F=?úô%ܲGÑÅž·ÿª«5õ²AþŽˆ's.DÆ©«öÊd·ædßü@.Ð~”A£¿FÊ]åOð:ç5b`Î7鯭K»ä1ȱäô)œÔQ°WpÑnîsŸZ,¹ G32—îœ ³â‘BªôP§3JO &8ÇQL0€ªŒêX䓸f€wn(»Fq÷Ó¨ö¤,¦Y ÈØû¿Ä ‚7“Ì£>Ty*@û¿Jùui"ÎãíŠ@,@Éf,Äõܼj)c²y3¬ǿ4S³ £ÎW*IïšRûŽ3šWŸ­5 ïëR™‡ŸÎ¢f/ô§Íó LÚŽ˜õ ÇÔÜÓܽ©€è9!Î=鉠ÆAæ‚1€GãNF+žôd19¤2&P«Å5>^Õ9]Üt¦<8 ¹n{S ûÃ="Œœf•ŽÌúQ%x´]7i&tp·ÉøSÁ#Ò«Zº˜Tç­N§¨ïÒ¾rQ³>®›MÄÙvúÔå±·ž•I[œt53`ÖRŽ¥­—OÝ»½SGãŸÎ¤òøÏFMW,0-‘Î}y¾¾ ¦­p…Bä‚  ^Œ¬õæ¹ïhRêb9­T4Ñ«eGVP3ý+¿Q*¶}N Æ›•&×MN&FÜjÌ0˜|´ElêádFCÙYH­Hà‚OÊ;W¾î|ÚÔ¯—šWh;OµmAmp£9äV-íĤü¤àá@9fH ‘ärHQBl¬€¹†\}àqøTÊ¢C¹ŸžrÄf¥Ž%C±B’ gµ=¡‹%Þ' žsúJÐH£P¡7zçž=©^§Ê®òS©QŒcùŠ|1´`’É pvgž€w©L±ª4kŒ`³‚6ç·ÿ®€3ð ¢2dß'Ý`23Ü`ÓѶï$IÔSŒztëVåâgO4p@•9ôÇCÅ@gI–5*ÅÆG/žO®=ýi«n<âÑ£oQœçP ¨ÌälpǸsVî ÀÉ>b“’;síT¥Ø· ¬Æè äg¦hfKU¼¶…U ‡ZÉ;¢”¤ŠUÇPF+bÖ5¶CûáwSõíL»[{Òñ#‡¸BvÈOÞ¢pRשQ•Œ C?ò©¤¯¥@Èñ¹WR¬8 Ôžfc¹Z±²dlب‘‹9©8eéÍ1c+ÈúÓ@YDôúQ(À¡”;MHd.=8Í ÆœF­0pØ#0ÛŠV‘€8ÀªÓ8+ïSÈ2zÕ9sÒšB b1W´äy.bTl1aƒéTXb´ô‰Œ7qHù[<ÓB=ORÅËJdbÜ3sÔtö­¨ã’0‘€@nI9#>ÃéTí-£6ãäËÝs»~Iß»)CÎsÐvÍX¯q³4MÞ„`¹aôªö4˜€’JÄòN*ê²Ê»ÒD|x'ßÒ¡’ÑJ“2 Ç£;:–4D÷¾sâÿX2'UÞB$”sÕzþ53¨Â!Ú’HSœŠlˆÎ±‚’!Æ8õ½IBEs Ä› ‚ÃÐÕ¸ |:ÝLgª‚vþUÙÚCx8Ã5J.€¾Gf~†«mÉßa¢Ömã÷„Ž2j ¥aCn3Ÿ»ÃþµJD~VâÀg£7• m7V#n:ä‡4˜ÑBIW9È`1Œð=êÐ ‡‡=Tž)‘ió<žkÊ¡G¢ãó«9¾F 1ÞÄ”Îf0ëßžµQÞÀ´|ãjÙœ*‡sç¦J­$¬á—nÒz6yÀG‘­¥.¨Ã~8'4èï]¥!#ùcÓó¨a²pÅåšY$9ü±SG…T}28¥¨X]\óÄ}¼h¤ “–'?AE:$î#­éÈÍG»$â†Ü@ ãqÆ{RŽ™¦d¨éÍ)l¨äãÖ‚IS ¹#9¨Ë–l-1ËÆi#|qß°§°Ë+ò®Z‰›æ8çÒ”¾¿=ê4Ÿ=©f"qϧ¸x¨Ž@¦4‡=x¢À4æû G$µLª ÷=é’`¢š6þä/§z½ü`ö"±l¥r¹ëÚ¶TªÙ¯ ŽÇÑa$ªRWvȬ~•d°1æªÊ~LŽ Ô±>èøë\²WÔ쎚Qºr~• |}jª½)å²AÍfâhY“Þ¬Epba(8+œgò¬ölw©#“h4FñwBqRM3#Å6Úz.-µ¼‘ÈêÂi 39àsÓݪ¼vè¶<˜úWT×q\Ù›K¨V[vꇃøƱF—8vÀ49ùCÈQîkèp¸ØM(Éê|Ö'R Ê+B½¯ïÖ_»'¦8Æjàˆpû˜Žþþµm4§…ƒ—áKIÿ–x8'ž´—1Wï|Çœg°ßšº8$¬fÍ|‚Cmo –ç²sÇ©>•aL±‘æ1g<Ì9ôü=ªŽ›nö6Ó\…V¸¹•¶gÓ·5x/–ÄnL䜃Ÿþ¿µQ°‘v9p3žëùR‰¦Y]äv»mÉéþê9®FYpYˆä†ëõöȨ%.Á€?ˆϿҚy´Ä¸ÞÙë¸ÉÿõUxÓkrv0áäMÄsÇ~>µ`nXðͼ œŽÿ‡çPJ¬Yã?:®@<ý)pb$KHr3銡0V¶žË»)ôϧJº¨%òÊ@qò¹éøö¨lÞh Q”í“*NqßÛ8üéÜ“&ån.š81—ä \ä‡v=& {c¸I#c9àçŒJ%”Af2°ÎÕ€O¯ãÔSb†VØåˆb›˜‘øÿ…!’ÞÀ—QyŒIýà#__²Xü¤VüR}œyhL™\õ¨Æ3Y×Va\´ter6Õ!ÕèQx9šz¸V+ïéP±‘dÛ±ô"ž‘M!Î}×?)­Å‘A$ÔbNµ­o¡Ý]cäò×»?ÿ®ja YÛ©7z‚”‹?çéV©É‹™`–a’x«i×—\C >}JÛkMÚd0‡VíÅZ}_ȵ,.!Š4DQ¦I=¸ÿÓÙw'Ÿ±ÉO§Ï ¢"¤±8ã‘ÿ׬ûˆ™© àãµvQêöRÒ‡YYrYÅT»ŸN˜*º½7Ë40æ96·œ*³7| šÍXI‚s]m¤–k"Æ<£¯Zˆhâጱ`)èzìRhpì Fݤå`)½›»ëøÖ£«E½Æ&ÛÀÇ'ð¬Ë{ 4›Ÿ*0½Æ:V•œˆó€\‚}*Z)2âÌÍ´›è#õȪòH.bg;Xðsçzµ#á dîÚTàý= P¸0˜ËÜ›‰;ÿ ™˜’ÛÉjÇÊde$pÃôô«¢ÚIãf“9ÿö5Ï6%Â&Ã1yAo»éõ­¤ŽêÞÝ@“rãÃ?HËF)xW\®RGôíQ½»¿Ê¸8õ?ÌU×6]ù7 äîû¬y_ά\Ý*ÐÌ…Ïu<ý=¨æ…W£(ãø”çõ¨neºˆ"—GVè²rOåKïžØxBÉÙÈÊÿõªAj#-4¥¤÷#¥!¼‰~UAµ~ògÓø@U£ WŒÖomóPdœç¥HÅc›Lç9€!&I]X#èÊ;ÿõéå`¶Bè|Æ'¦üæšòJn¨ÛµH!€ çéL1»¶èwžªG'üúП1¦´XÀ$œƒƒM,ØÜ$%¸]x¤ Z1æ3GþÎ0iåIFU}¾žôÄB$¸QëÿëE•Éê°G£k:½„— $6WÓ[$’`3*¶qߊõ¿€#ø Ó[oý«ÀÖ–—Ÿ´¾/#I<›‹é­ƒŒ(™FG¸RÆ®×FwÔóY.#HÖWYb‰þä*·Ð‘Šp!¶á²B+Ûu¯ˆ×^ñƵ§ø¾Îâ]áiÑÅh®®1órq»99ž}+ÅÙžöõ¬b’+u)µŽEÃ,%‰@ RjÃNæ÷…<¬øãíí£Ë§$Vr,nn¥‘I$g¨Þ†«xSÃÃÄ^?‡Ã7·mlÉ%Äs½©îŒ›‡BTö¯Vø wpÚ6±¦Êc1YÜ©Œª`þð9=ë”ð–¥u¬~Ñl»1nY/-ÐF@XÕÔgÔã½4‘7g;ã¿ ÃàïG£ZÜÝß ,’uó# û‹8 ^˜Q\âÜÛ³ÛožHíÍÂG;B¹‘P·Í…#ïc8¯¡5 vêÏãþ—£Å o{¥Ÿ=ü dm¾k/ÏÔW§NMpßm µøïáç‚%CröK´c{ý¡—'ß áCнÂç¯/‡mç±]QÖ. Žâe¿·XÀxÛ…9¬µ&g,“ì&6}£ÔàW¯þÒ SJÐëçOÿ  é-ð׌µ];PÐlî"¹U‘o$–˜>]™Á9#æçÜW=áDÒ_ÆJë³G—çï¹2ýª ÞÄ€?j(M²¼—‡eÜv×n‡æ•"b¿˜®šÒî;˜C#«« äW±XüA:·Å'CðÝä>kiÄ © GÍŒ®6 ÇO›é\/Å[ ]âQ[H’$¾±K©›½Ôœ{…õ5Å‹ §eº=¿éÔP{3ššæ!gšEqŒ±¨!Õ!‚5’_28ŸîHñ:£}ŒW]ðÂÞÎ÷âm ¼Tqœ³[+Œ8ǨRÄzW[®üC¼ð¯Žu›YÜÍá˘ÕtôŽÍ¸dãvyÈ$ýcC Óæ“ÜêÄæ§YÆ hyŒ·¶ðF²< +° ´n,O@äÔ[²I|’ó —ïFa}Ëõ⺯ƒñYÞ|Y¿h-,­í®§°ŠeÃD2àô;ŠîtÍN{ÏÚ'W´'•e¢ˆáÂØfÎOS˽?:qË©µï6ELÚª•£ófÊžâ­|39ø'pqŒ‹ïý é6‘ifêïK·Ÿ"G’0ìÁ°wcšl—pCum!7 aòH}8ž½ê=!WûÃÌm¨c\4g§ƽgáÝ”š_Á»Ý{J¶óuÛë{›•u‹Ì‘äÄj$µp¾¹õ«nÈG—Ák$ín²Éü1ŠD1:Œäà0©®®¬-ä)4ÁL 2F‰½¦nØ^™â ßü]SÄVˆ,­ìK,\±Iœ`mÜ«ÈÆ9éÒ¹‡>*ð¾‡áýwW½Ôlâñ ÒÌ s TÐqМý \ác†¿š ”¶G-kt­‘°¼lݸÜ#«_¾Ö¼mu¨&‹&˜Od©dMÅ·côÚ}+ÔtIî¼}ðFâÃÅÜ–÷ ²¼A9]Æ9GOzÉýžïn[IÖl&xÚ(^ „eP2«Éï÷GÓšW V×1Zø¹t­nú{Tµ¹žÚíôåÞß !Jn‚ÃÓ¥I¨ÞèvÔ#JÔµ[›!y üI¼€ 0k´Ò¯nµOÚRÚêèÇû‹Ëë(•#ÛòG¸$÷?7Z¹ñŸþJo†?ëœ_úR´s0±À¯ˆm­— 4‘3µÚÝù>€S<Ód•£˜ …hŒl¾‡nzÏÆ RïHÖ|wj2jM˨#>ÌÜöê++öˆ‚4ÒtKå@.Rib;Ld‘ôÈùØXòû­vÝ£1¢C±¥XFO¦üUy¯¬f¶ÃÊŒq°ùrcžœãíþ1ü+ð$Ó£…vYÛA¶HUЇÚ•`A''¯sšgÄ•OøQ6ÁcO*Çj/E“G; -)»¶³i'EŽ8†Y°Iþ|T'YŠ8ÚYãòñòÆ óÅE«J¯¦ÏrÂñ„È `þ]~µîÿîäÓþX^¨e‚òÚD"ºîã*À‚=©9 ðÈnák•3£¬Œ»£¬2¾£#‘Dš¥š´"Èë÷¼Æ…öâ½³ãšEqðÚÊòhÐÌ—2¾>îå;°} ɱû¯ós1Xñ5¥ 稑£<°E– Ok«+3´³M•%[˘’=íólß÷þ”|ÜŸ 5l˜_\ñÓ‹G3 g¦x·L¬ÒËäŸÊñ6Ð{ØÀ«'ÄZR^$‚ìùi&ƘD|µoBøÛú× ü¹÷Â9lõ8`šÖÚYm<¶Œmx«a€ë÷=ißïŠ>ÜÚj0[›håšÌEAWÊÚ¬=~sÏ^ç'šNWÆßø–ÂÞilç¸U™[ä‚Wàò0UH¬¥ñ6 •òy¶Òÿ¢¹ w-òä ë?gé[ÍiÜ–"ÊÅr}å]ÃKù¤ñßÄ=•0ê^j€9giË’>QŒô©°îqšM‰ñ_‹4ý*-Zkk9ìå¸óm6åJÀúšƒ[’øÂÿC¼Õ®î¢ðÉMö$îÝþ­ztëZ>Híþ;j¶Ð…Xa¸Ô8Ô` -À†I®Ò+Xm>-ø«Ä—Yúv‘ ôb=Àõ¢× êxÔš¶ƒ¨ëÑÇu©jiþTžcYZfO0À!צ ÏáLMOGӵ˰êWóiÁ"XÚößlžcnÈÚ«Ó é]ƒ4߬ïîãëQ°»½˜ç«I*7òÅ\ñü—í#þ¾l?”ô¬¬;»œ×ü%zmî&È07ZÈ >ƒåæ¯XÞÚjFAoræH˜ aeú£Evž?Ôn´ï‹ž0Û3ËnPß+²+c=1Èæ©üU·XüsáÛ˜G5Å­Ìr¾9eSý N#RfL‚ ¡Xí$áF*¯‘3£F’.3×ù<⿻ǎªãƒLÓwÞà!t]džäø>Õ6(D´(°çýiÈŒ°«:©7#Ò¤SråÓ`ã÷yÚó¨B¸—˜$W<#ž£ÔS°®XF,¬Òõ­B©µÙT0årÙ§¬A#!—cìÙÍ'Þb0@ÏSÍ!‘²²œy{½óELb,r®¸ÿzŠC4¾ÏâƒÿMm¿ô®4=oÄ?5Û_^[ØêPjw1\M#¡]²à€UO]ÝÁªþñ¶»à™µìˆtéõ£gû\r1AY}MQ´Öõ{OKâkyá·Õdº–ä˜Ð˜¿y÷“i?tç×>ù­.Œ­sÛõsñγà›ë«Ú¸ºUÃudb¹ÚÜA=é£â°¾:‹ÅÐéúD:‚Dј¢Ö',,À6KÇœúSH–Ï_Öäè<=ÿ`§ÿÐg®{âÏü— ¹cÿ¥RWsñ+Ä^:³ñ|–º`Ôm-ͼq¬ryEHq’7ç?9ïéU5ÿë>%ñfâ;ØtøïlB…F|¹ ƒp,OV9ÁSÑê_´Û¤èây¸?î ¥§j~6øE¤iO¬ÝiÚ®ƒu*C1I#Ka»äfQÐäv¯>ñ¯ÄkÇPÙÁ«A§E«»§Ù#u$°ÁÎæoJ×Ò¾/kvz-¾“¨išV³mj[›È‰tÚ0¤ö8ð½Ò|zðΙ¥ÜizÍ…´v×’Iȉv¬¤Áˆg®O|לø+F¶ñô"÷wÙnf>hS‚ʪX®{gn?“ÅÞ7Ö¼owoq¬< –ÊÂ-¬i»<’I8OjÈÓu+½UµÕ,dÝÚJ%‰˜ddv#¸=)“Ôúò[o|gð…t›(,´Ï³KrÑÛ _2FI”=[_ïâþ?3'Ä=9”à-9ÿ¶²V6«ñw^ÔüA¤kGLÑâ»Ó ˜ˆ‰Ûyt*CÙÛÉ 9ëšÀño‹µOk0êz¤6‘M¸·UµFUÚ¶Næ<åz-r”¬ô/x[MÖ|Qâ;kOÞ[ÙjPF×1\Í+ÆP©…* ä7L`Œ×´x?ÄwÞ%ÖuxÒÃO½»°„4³Ä„Å:ü£•`0ß09}+ç}[Ô<;­Aªé“¯-É*Jî ÁwW¢šû´—6º6ƒm¨Ê'»X\»Ó¾x÷$VqŒat5”¥VWêm|-ÓáѾ9ø‹IË[YÙÏ›$' žø…t:#ö›ñ>G]!1ù[×hþ$Õ4Ú\G.¦ï#\×+?˜rÁ€Æ9玘Ýxgâ­¬ÿ¤×üPmtÈ?²žÖ3o’c*0ÜUK…>Ãü¨Ô‹Ñ¥ÇYõíAOü·‡ÿI løù¼ŸŽÞ“†R˜ú³ë^mâÿÛßüN¾ñ‡¯wªKm5­Á‰€,‘ «qAâ®k?|C¬êZEüº~гérùñ7•!ÜÅHÁ%²œà rqG´Œ[M•õz“Œes¡ø÷ÿ#Nÿ^Ÿû]+¤ý ÇüPºoý…cÿÑ3Wx·ÅšÏ/­¯u4ÓâšÚ/.!lŽª~pß6æ>ªßŒ>!ø‡ÆúT:n©•Ü …kT‘X°V\e†0ç·¥Oµ†º•õz·^îǪk§þ1šßñ(´ú.¸ß‚gþ.LƒÓJ—ÿFG\ÕïÄ\ø|'-¾”4õ¶ŽØH‰'›µ6àç~3òŽÕŸá¿ê~׫¥Ei$­lÖånU™v–V' Àçåèr‹”Z}Ë…)Æœ¢Ö®Ç]ñSZkˆ^!µXÉ{ˆ-\º¡ #ñÝŠôKSº°ý-oôÛ©-îaÒ-Ma”-NüExˆ|A}â¯\k:Š[Çq:¢²Û«*«´`1' õ®ƒÂµM“DTÓoô– M®¥dPyeR;ô ЍÉs4cR“PL赯kóüÿ„ŸQñ¶«u ż2¶Ÿ.J9y$·¢¸_Å!ñܰZkÙAgdÿhû=¨`gp Y‰áIÉ)ÔÿëöýIû>ÿÉ1¿ÿ°„ßú.:óxÛÄžÐît=2-"h&‘æ-p’bÊ…!€è£ŒS¼ãø+A›IÓàÒZ &i˜ÝÅ!}Ì¡HXŠ;R±ýœß}οíoh?ômoü.ÿ’¥ñ#þ¿SÿC–¸?ƒ~.м{­.¿ö_>;u„¬2HnüýÅ8ûíjh~3×mõO^x^-&æÆ÷T–TžîB<`²àðI¦Ÿ ´&¸ÝÍÅøýcÿîìn"ŸâïŠtiÀh®ô»iu]Êßú0W•éVúÿ‡õøõÍ:{+MÖct÷ÈådyX`Œtõ«k©øÎËâÕm íòÚ}•£ÍåÈ=7g9½ 'øN’ÚüFƒK¸ÏÓlï,ä'¹IP>˜«¾0b?h-1ÁžÄçè&ÿıoØxÞïÅ–ÿØbúíd€¬¾HÜìä쯭&¤¾)Ô2 ,~ÿcÚõ;/‰ÿòV~×ÛèqÔï ÓüKáyî˜Ä7Kˆ×sL@¹®o]ºñ‡ˆ|G¢ëM¡¥Î‘!–Ý#ŠeF9æ‰#å¬ßˆ—‰õ˜ì5mdèèté’¶‰(¼ˆ~`I$|ƒ§=hü:ÜrÎö‰kx“B¤†êÝ£`pyçµEw=Ãܬð’Žn¼þ5q.n¼K¯jZíâ4&áa‚-¨b,±©ÂJ†$ 'gìá ùÚ@ûÇ‘SmKL©÷R°S˜£`ßý1WÄÅÞC u*8c‚9ЊÍü-Á>ôù;´,€(ä÷…+…ŠÏ>$(Ò‡Éã=…/œÁKpÞÛH÷ó1ùW©Ï°©à!SlÄîXõ©(’8EÜB’OZ)àƒ ©Ž¿zŠáF‘{Kœpvã˜4r¤5öÿ¹]–ðŒqšAÇk£–=Ž^i{i GÈî{}Ê©6ƒ!ÏïØÛ?þ½væ8w1ÁúR-SÄ~t%Rg…i0.±Á?4gŸn)#ð»;çaHûþuÛKu—Ûüê2FÈŽfäð˜íîj®„qÇÃ.¼ý£ñòéÇÃGý!¹ÿ¦ýzëÖKœíxTC'§1+~ñ`o”ð$~£@¹Â7†ˆ7;~±Ÿñ¤lÇÒœ°k¹–KrVE,rWœc¥Kªé¸• ûQ îμ:ãþ^“ñCKÿÛc‹Øþ› zòØ€ R‘ã¢þT] ìóïøFeÆ>×Ý4 \`bâ#øï‚Dsò¯ä) ^0¿ðC¹Á ÎIÝsãŒ)9§'†&»®f~bœ{Wså*€¼r1b!þ`¥qÙx¤UÑÌMá»R‡ì÷—!€ÿ–±)þù5A¼9yœ¬ðžxëþÜlû‰Žß(¥Û8Ø™úu¨t ÍV"kKœ<~¼¿ŒÕݤ #b]½iá¦ÅǦ)û8ñ;žlÚ=ð ¸Njì›À m^?Ú¯N1ÂGú¤…0ÚÀÇRqíMB(™U”·9]Qº²ßkwóÛIÔßC[“$‰(‘q"cåǧj–[v&3ØUi£– Ûh#j¯bor»°QµO}ÇÓÛõª¡O(HßÕ:Ô³‹èâ Öá|ÅóÈkGÑnu¦TLFŠy'4¹‡mÂ2„¬{ˆS´?É©þÌ'‘®/"F¹ÙŸA‘š/¯mtuòYÄ“ ˆsƒîkžžòçQRŒJÄOÝÏsöR ÝÌÔL˜-±ÀÏë¯Ü]D"@#AÓŽõbßJ…°%ÇçWÓI³éä!÷"\æb*¾æ=«GMÕ粘aÈBÀý+Y´›|q°ÅFÚDXÆáEÄu0Mgs¬r/“t¦1Ÿán¼û‚QiQ%Õ±¶™T>6«‘÷\3íÒ¹µ¶0ÆÑŒì8'žã¡­[mKËEÜÙÛ!Ï$zþ‚©L,‰`žKË[«I­—̃åØÜäØü5N·[’“‚HÀ{+{^Æ´RêÖ=EÙ‡œ3ôÿ>µŸ:Cxà"¶w#¿Ôw§Ì¬º^££*íh™–D™çFÄ…}’#ôÏNõØê ±³\±eÆpBk˜ÔPØ^˜ãbbbb;硪`™›o\(„2£(ÊgqFïŸ^iñÆó¯–ϲD²ÝÀíÿתòÇ. æ|À­µÇLz}*ßÚU ~jåÊmaÙ‡b? ‚Š’Å$WK¼~̸ ×wáùǕĪÎFOóçÒÊÈfVCÀ>•£¢Þ¥¨ÉRß4úûåî¡mo"¬ŒŠÇ°=~”‘_C#˜ÅÜ(Tnùä øÕ«]ɹÙ3Ôßñ¬ã eŽPQÖ“HJLéÒâ @U¸Œ3 ¯Ì>oqR™£ ~ú"qÎr¢%R‘À"ħ9O©ÅO*+¼–ˆî'TcøÇ_E«\[H6€@È>ùÅ,0«d[¨Ç ÅY‹]—IÔÝ!Ťñ†$üØnF@¤í`‹mšMy{'–ˆÐ3à‘Œ÷ÅZÿH·‹L’žÌ€ç5—¡2ǘ`i¾ëcÔP\ê&éMÈB™È É‘±©†DrCc“ô4ï³\ÈÆuÆä_½8©$d/,m´õ8À«d('ƒÀqL È­nZt–| §t{FsøÕ‰7”ýâïÁÚ?¥JÄÈŶ㨡¨%‘b+† œôȤ[!þ B¯¦h«&Fã1q×"ŠW‹9ã½#6ÞIÏû´¬>bHÏAFAíÏ¥tÄ@òp&lñòŽ0ÏämŸê?ʬ„'’•&Á×Ìqëµ±@šÊÊK´ã‰ÉüsIä XÏÙàG$ð¹äæ¥6»†ÄÀ1Î?ŸZ•`•Fã#Ƹ?¥1ãšPß¼Œ(ÇÝØsNi¡L:®„¨?­NcX0ž#ï&?­E<‘(Üÿ?b P˜ÐlÍg8ëž´ŒˆÇ$}p*¼rZ:eÀê9ü;T¿&>Aìi rÆ8ôïA¨òAœûv ³õÇäiâqH®2i¡»ãŸ­;qÝŠLR3ï@`GSŸAÞ—ÔƒI»'†#ÜPWw?7°Ïô qô¤-Î9Å.p(¬Ë˺œdÒäòx4É"«€AÁ”£;Ž8Ô™lô¤;ºv§ó¼xö¦ž£žôŸ0¤ ŸZ“*Ï~)1ÔPvç€i¡s‘ïOÈÆ>\w¤ÈPeGCúV}ìïËB¿å¡\ZdޤP0>¾´™Î‹©/.Xù’ÅkŒC-Þ­<„Çf²&8ÜXƒúU‹‹+£$,MÑqÇÿ®Ÿm`!P¤n楢Դ1cÓä´’’ÌNNkNÞËjTtïZ&/AõõNÚGÒ•‰¹] ÚF}jÈŒíÆÞ¾Ø§ÆvñúÓºñÇÒ…r/,pIå›r{š°s€;Ò q¸õ1L ·¨¨Æ2ßQW‰F+džÔlŒ~T¬3݃(gÜGô¢Kv–#Ÿ­^Ù¹ÉÆ?Ò´` ãô¥aÜÎH^ ŒÀƒ‘ŽÄUy­K6ây'&µŒCóQ4}ˆâ‹ È{`;Uÿ ¯•®À¿ÂçoçHè½9àzÖ¿„ìüÝ\M·åK“ééU¨›ÐÕÖ`wΞƒþ½qW3µÕ£M´Ÿ-Ù$êCõÓë³­¼žS&sƒ1Æ+•¶_>;«pß0Ývéü³[K{¶+Ϻö±/™ Ç»#ƒÉÏõéU.ÕáŽÙ²¡C#ȵ8Þ9e|å¶ Œdúê7˜\mi1ÜZÍ–2X˃œñéV¬SÍ`6…xùÈ㊆â0¬ xÛ´2zƒK§ï2d¹M§ƒÏðéN"g£A:¶˜¤íîzÖK02œ7éVt©œÛ˜æPzúýGz†QK‚Hî0x?CNFbÎpi@=ÏáëB°#úÔƒ㯿#,ßs棈3Ü3PüióAì¥Ãeå Ó –úKu?»lÄR{͸B€QÚœÖñÈÜIõêqQF€Cά6Ò»—iãȬîl‘$%Èeê~µ*†Qó¾y+6S5¨ó@Á#ˆãÚ«&¯— 7`ŸõŽ>ñö¢ã³5|ß,ìÿ{5¶diz3Œ1úÔQıɿ»xê£8µoœ ²À#4€Añ»-ϽRF‘œ‘¨ô¢œÉñu–N"¸öÎâËüý|º¢ÖqóÐõïLkxU€l(W×ß5|ÌÂȼÞ.³Ý Ã÷ißð–iýâ¸ÇûµAm b1޾•9ÓdûQÌÂȱÿ uˆé ϶ÒÿÂ_hGú›‘ÿlÿúõY´áÈÙëŠsièGc§"‹°²-/‹l?‰.TçþyÒŸiÙÎÙÉ‘¤tåÇðôô¥rtàzQÌÂȶÞ.ÓŸ“ çÜÅL>+Ó †e÷Uq§F^Gv•RM" ei—NUyéEØYLjôÂrnåRé\µ¨úŠÍ]&UGÔS?²­ÈUÉöéEØYÃ\ÓçözIý³¦‘ÅìXÿz±ÿ± bNÑÀô§®‰ 8©#¾Ú.ÂÈ×þÓ±tÊÞEø°§Ç©éÌ0. ,?Ú†thXä©ü)[C‹´*>¦‹°²6[T°RA»Œcý®´©ªX3ancb{°ÿ°žmÓ¹4I¢Z…D¹¢ì,ÿí;2Ç÷ñ wÜ1M•‘oøù„ý^°WC·aŸ)O·¡@¿òÍ}óÚ‹…‘¼u;R~Õìõ\øƒLè÷1ã×­dÙX~ìèHº=±6ì~Šh¸hhÂI¥ƒµglz„4áâ 1²ÐPEfÜœ BN)#Ða^¶øÈçš5 a¬éÍò‹¤¡¯ìû]D}9¬Y4;pÜ üª948CÝàP3aï¬ðÒ¢úf»? $Qé2܆ ¼õ¼Åt(‹“>µèZ5».š-cl(\ÙAì=ýëH=I–§5¬Ü‰µ' 9p‡j„&zóùÖ|ÎlÄsÇPá‰'©$þµZ×-¢²¸r£rÝ·ÔŽõFm· n¬rªWq=1Œâœ†Š®ŠöÑ@|åG×ÔTJ±¹DfÛ—À$}ÜÓíßlˆ&0K0½Uýç˜Jå¶·nsŠ‚‰>DM…ã=…Oer`pXTíb:…úwËF\ ‡èAåM2Î?:BB’Ý ŽÿOz¨²YÜéî"7yY\£‘ÿꨮS(%£Þ:ú~µ^Å"—Oò¥;ãÁC°ó\õI·½˜©è r(“%#«Ž7eÔŒõOµX 8ãÞ¸o°Ý7Êדã|Æ“û6ìýÛ¹‡Þ¨¸ùNá°AǽCbM^dæhø?NµÈÅg|€µM×'5~Âk›K–dÛ (‘±Ó­&Çw)QÀ?YÁ0ð¬[mVkƒ—·+†-¸*º÷ÿg+$D¹î1ŸÄ…gsb9c¼¸É*†=Ü9oéDvWh@±cšx×”²>óÜÆj¤×÷¬ °lvUˆÿœRcEÛe–×2ÓV÷ùª™ãþ•É ^ú+¢ÆžUŽ}0jü†¯&Xy8Û•ˆ¢ácË‘¹Vy÷½h¬u¼½çÍUóÈòúQNâ3PÃɈœÿ{ÿ­J#w1&ÞëúV<×:´häÉëüV=WU áÐþÅ_çëYI«\Fl˜ç¹þµKýµ8\}±Ÿïõý)óÄ9$h$Qóò †î)Lkµñ7rr0MeÿlLÀfÄŽIûÔ fEäX±n™ßŠ9ãÜ9%ØÑXŽzP=y§ŽÒB`cëXÒx‚hD–„dc;éÑø‰9Y Ó`Îió!rÈ×10/ãšO(ïÁŒûÕ!®Ãøõ¸?€¥þ܉±‹IÇrx¥ÍáË&hˆ•FÀsÎ)B)$nÀp+3ûj.ö—?Ö® l YŸöhçqòK±¢PísŠFÎå}ª€×a˜&ü¥ ×mÊmîüŽh÷$‹øa¨£ââ…ÜiËŒd\¥g¾¹o“²Þ\Ý(\€°ó!˜åRŸ4{‡,»;I‘~F'Ú•£ ô?ž+8kv`€ÂluÏ–iÇ^²þô§¡ˆÑ̃•ö.•Úqô­5` ¡²¡<äãʪnØó¹ßñ„Ðuí<äyŒ1ÿLÍÈVeøíã¨>‚† ¿ @8㊢ºæšG3`N:̓ûàÝ4î‚Ì·{fE?ÂhR › sž*šêú~NfPL!Ïò¦®§§Oš Õ$Qt;2ó É ÇsBym°Ãzcš úž+Ó¡^MêÖ<‰cV'Éÿ"‹¡Y–œ)n[9#€)³ Úv£OSPZÌ·pŽGJY5KBŒEÔ-“Ð5Af8Eü°çµl[^-Ö(Õ¹;šÁ]FÔï+<_BqVìµ+hÛÌy°>\¦šafY×ía2¡œàìÃgÖ°å· 4À)¥Ú¸þèÿ:Ü¿Q4qÜÍ"¹¡²{V^§"YlÛþ²oœ.}ºÕ r÷¼€ »ûš¢7E —h(­´ßÖ¬É 7¤19l`zç“DÈ‘[Žw²±üxÏëHe` B¿t“ŒÕ½2XUÝ_åW «¯U#¯ëÍR• Nã4Yd¶ÑÎsž” gij+#0bà ֨ÜD¯!eÆIçoCÿ׫(­JÈ뵺©õ¨Ä‚V'+»<ã¥&È+öŸ˜c5.Q ©ž3Ž*Êã%x¦´qoÖ¦¯ìO†)ÏzQʃ˜ ,1Ê­a@~àÎk@Æô "î<ñéš9Ps3;ìQã„Ç®hû d|ƒëWÙGAŽsšR€¿¯Z\¡Ìgÿg¦GËÅ1ôÐÄü‡ê il†O=ŽiÍG G~ ¨9™—ý˜„ ƒKýš Ž3ÍjÀêÇëM(wO&ŽTÆpÓ“‚GéHÚjp0¿•jÔôô£±ÏéG(s–¹`¨`ON•^ 9MÌ\cšÚ×W÷°)#¿APئe#=ê¹D™kû*?î/×ßì´ÇËâ¶•p£¡ãÒš\ŸÒ§•Ìcÿf¡àÆ´Ó¥ÇÇîÖ¶ŠûcšFLc:\ÌcdÆF|±Ÿ¯JoöTYÿWúÖÖ`dûÒìÚ8?Z9˜ÄþÊ8Øhm"0 ÙÛÖ¶öÝ2>½) “‘··­¡Ìa!§½GL}ÓùVØS°„œr1C ;[4r‡1…ýŽŒzÊ£}1Ë/î×E°c•aÅ3ËT#ƒŽ¼ÑÊÇ7™fP9Ï{T§FSŒ(ÏÒºUË‚yéN*3Þ‡æ9Ñ¢®ï¸1ô¥:$dãjþUÐmžÔÒŽPæ9ïì8?JaТ |ƒnµÒ2 ŒÒ¸ô¹Bç¶œ¿j•vð Z°Ò}Í°í ‚Mi[Fî~ãÌ=>µ±§Â'§Š¶.†)Т?Â)±é£ƒ°~UÒ—'hZ‰£UýsI+÷*ÅjTVžß_þ°¬ïÙ8»Êóå¨öÏÿXVìGc†ÀëÅ&¹SZ$„d©$‘ßŠÚ ÆHä¦0Ïtøá\åU$S¹æ)òo%‡¦jxmÊÜ«3`pOÓ4†`~בI ®jîI Ͷ )Ã+aEA §ïPJ‘Ô•Ž£™Ûž†¶4´`€ ƒóJE­#šÉ\)ß#­df‘ð{fº•ƒ‚è>Vê?•1`]Ç#út¬¤Ù¤QÍÉgüÍ=tmÄ1Èì3]/–ž¼ –TŒg|Vz—ds°xuYÆss]¥ˆ‚5D^éž•j(”ÍJ£.9\†©\Z¬ï¸ïºFWnv‘ŽŸ=(ÎFºs–¤`{Hýz`SÍ p:núSØ8Çî¤ëê?€¹;ÉúŠP qïM˪çÊ“éÅ/Í‚X‚€•²NâÓ9£-»Ç>Ô #?7ýòi†R@ù9î§Šq.ᔞ1‘F÷ÝËF¨Œ¹b¾z𦜭È‚9 Š—sägaëÐR3½§~ôÖ”äe›T>ŸZO4‘à¨à@om§÷køBÍòå¯÷©KŽ„‘î4²ŒE+³ŒsèØ§üØÆsŽpÔÒÈ@ýâçµ8¸Ïß@qí@šÞ~Ñpqš-D ç?­?YÃ]A†-Çõ§Z·1å€ã$žÔ±‘ÀÚËõ¦.ÐpCS¼Å“¡ãÚƒÔüÇ'±( VŒÂ˜Þ[ùh0 —8ÛÜR1Æ:þŽ[éN20HJ\ay ‚9æ¹*âà Fâ)»T9úÓ‡>SŒvZiû§åÏ'õü«Ç­QTYHâsÜ{Ö:6"N=ë@èTeóŽ0iÀžï1õ¤·È‘Å(Ù€<âM+0LŸ(+ޝùõª6Ø[ýi×£æÐî]§æ~ŸÝ¥cÓ0çû¿ýj‹€IóFp9© *õüè2n $ôÛOÜ0G˜ÃØŠbäc÷ŠHš~ ó‡N˜ ÷í‰ö"í€|ÁŸ§_֌ḑyõ8£k`~ñ3ž¹ ;‡'|xãÖ”K&XþïéÒ£*åœS€9©v0Só©Í™€&DÀéƒHò7•°ð?‹­+ãîã>½)»\¦p8¤‡rì­ŽzsO䌩9õ¨¾u ÃoçÖ“krJ¡É  ÙÎ@Ø>¢€Çq>P¸"¢Ê‚#õúS¶¸Ýòõ fF²ÍöȺ F>´û#›äÜ:¯Cõ¨µ…?lŒåΤ²¯†z…9÷¦#i—yà cF¹É@pE­ƒòè3ŒÔm»ŸÜÓ£Rªbiw)$HÈRU†=èE|’adÇûT1%Wÿ )}ßïñ¤C!Ę硣 Î§<šfwbО´“÷b0I—h?O­<çaýûß4鲨ó_¯jFÁ²=GJà½yâ€ ãæ‘¿A6 žzü´ß0÷»õÅ8¶y ÀaÎìÈ€c)Ñ‚7êFxâ…o—Ç¥*2…?2ç'4¤1N fšþf@ÛR=éû¸"šÎ¤d:œg4€æl×l²t?5nYdÚǤc¹¬;<ïcþ×jܱ Ú¡'·z`LKç;Tw57l…³·ŒzÔ¤©?ÚiQ´aW§cHey‘Âe½3ŠMÒnÇ–@Û×52ª…aŽy¨°‡.:†4ˆf‹Íùv“Øʹ´eÄ1<õ­•^=r½N,™ :u§¨š9;k&2•±ŸNõÐÛÚ¬Ô€CnÏJ°¶hŒq¸|Ü€h9y±œÓrBQ´÷Ý•è@©³M(ø$3tíƒR¦ìunzäTîVÃ#*wuþí q&ðõ åÛ›hù÷gqüV ’‡l«=¸¦—Œ¼ àö¥€ nö9J“x—ôÊS1*1·'èYWFzÔ£ê¼ú­3øp|³ÇB)ˆ‘d?:àÿµUuVÍ“tê*Ú3”ˆ~OV9³À Ã¥!•€Dyõ«¹–5úÖ²ÀýÜyéÅj0FƒìiˆxÎ:QM\m"ÿßTRž¨U­æ,OzÆÿ—xØð7ç[Z²•´~:ýk'ÛF íÈõ昰:ù ®v÷â•È“ö±ýiaQäÇžã­ £$œ;P3‚:©ã #üiTŒ˜}7õéwÁ AÇSÒ€–ÈÇLô£ïqëMòQ¹ÇnÎ)Û'ŽþŸýjyâœ|-FARrN3Š“hëù`P0&>~´à ªü‡·oþµ1׿^7uëJ# 1׊k ÏÜê>”ìƒäÀ>£4ÑŽaBÀ¤{vù2fXÑ™“Ôâœ0péMx²„‘éšmNCguÿëвu]£9Í8(xÁéÖ†ŒƒÁ$gûÆ·¯ÍÓÜÒ…8!¸ïÅ78L–9Ç­8Ï,9í@Ú©S¨Fzj[EnPW (þf£Ô¹Ôcäž_Ʀ³ÿÌó£§ãLF¶¡ÅBû@l2}iï»iäç§ZfOÌ7÷© U³®i0@\1ÿ¾. {¿¯ÿZ“‘‚OéÿÖ B`çï‘Ç4d‰Ìß^Ô™%N7 À yŒFIöS[#qÞÃ¥+’bFÖÝ–èàS†ñèG Z@5çÉsÐ~4ˆY¤?9ü¨Ãnn„ñÛ§ëHŒ‘ŽžŸýz™‹íwŒÄ %Ͻ \õÁü)Š[Ë;‡sÚ|–^{ô"¹qùSI$ƒÆEðvŒãրąäô¥RvãŒgÒ‘z)SßÖ€Áã€r})Ž?r8\€MKǽG& 냃þÏY’CtûÕ·§äZ¨´²*•9Ç æ“ËL@Å*ºŒ£?Za)Œöö4 *¯ÑOÌ:q¸Ðàd}êÇ€x5Uà’ÜÆãH1´•#©ÍKònn§¿Z\¨^§Ž¢«¦ ‚p@êsR2§“ÓÖ€Œ #$äûSvŒu=>”Årr =GåB/ËÎ쎂FTäs‘ëF<âš àÏ¥ -–lçÒ˜ 1^¹úRàmžx¨ñƒÃdý)Uw¾3뎔†*}óÞœÍGx$Ô˜ùp *0pÇ¥E Q ƒqÈ_éRœã¨üj 3äJxû§ùP—ñ1»úVý >J‚Ø#¨¬+ço­ërJõšb$ Éù»þt×W$ëÛ§|ÁOÀÒ6î€Ýé ke[‡ZpRÉO®*!æ™2@'¡©ð l~}hÀÝéÖ˜ÈÙ;v“îqO°3üé¿>X㿨 ³g$uõ¤ “‚?‹zÈ A節IÁ(3»žhûNXmÎi·÷9Èüi»Ø;nL ö9§F~SÚ€É< ?G ` Î *¹É#©Åÿ6Jô”@™Èe9*Ã@Ç­(bA!H ¹Ü>öiŒ@„ã!€úÒœç¡÷Å*“€~aÍ.î¹Íg½³T5qþŒ§ïVŽày¬í`ÿ£ ÏñR?ÕsÜ*×9ÇBk ð"ö5°_Þ˜ È÷¢”?xQHe=iØXmÆ^³àb©à*ö·¿ìDž>~ÜúÖ|D°ˆت$Ý ˆ×17AH\c”n½¨;‚®m§#>´†“þx¿JRë´~íúúPÎÃ×ó¥Þä®3׌šZ<}É:t"—|||¯¥ØàsÓ¹ »ŽØ=èܾX;[Û4íÉ»£uì ±ÏáNÜÄôñ ±ESØëÏjb´xêÜóúÔŒÄ)¤óÊ*nè²Ø$ñÒ¹r9ÇŒç(zc¥ŽGÈIÉí@]3÷ŽS™ÐùÏ^ô†SÏÉÓÚ”È2 ^~”i1î\¿sÎ)IRßë;ѽIû½ø;iIÙ߸ `¥2~1ØÓMÀù=Å0:ž öNÜ€Ç'Ú€25,A@#…©´Ì‡$ôUþU[RlêGØJ›Kÿ™A‡ô  Y mÏҚʹ*3K!\r¢‘¶n¨4€!8 œzQ±yéØ 1?p~£Ë$ü£×šCƒ´ŽN)Ì1KòÎi FTpGã@!¹_AOd!zŽ”Àˆü´æìà7ŒcÒ„WÇ,Ìi€Š>f;@瓊0rrà)Á_ –zR çqÈè:Ò¨¡A¥5ŽXuéŽE*ïÉÎß­)ó pAëLãbK3ÀdR».@Ü:—cÏJcy€•h•P’qÏ­9É»H|ÍŸqzúf• •¢çÚ = ¬ýdæÚ!þÝh‚Ç? â³u¼ˆbÊ€7õü)2Ñ{Ö'”§ç‹µ®Ü ‚yúÑGüQF€Q× ^¹ù«>Û†N½€5£­ÿǸàgyéô¬øGïbã¸?ΘÌX&O@?»Q‡o,3ÎÚjV Ñ• }ßJiû£ëH³H¹_ÈÒù’|¸Ûø©æ<0ÈüE'ñgŽ£µ3|›º¯nÆ‘¤”±ÚëÍHù$·¶x4Œ£v0³Ö æIœíOÌÓ„ŒyÚ¿ZW{½¸çÛ&gm§÷kùÿõ©¡øÆÔúfž~½Çzùyê=€OÞ"1ÓÔPÒxŒ¼î¥#q ³qÍ O8u’(ó>Rv®~¢•¥%¸<õR6IÎÏj}síÅ1“ýYüé çB9ÉéNç=Aø¤$“Æ0>”†"°ÀÂâ¸Öv¥Ý…Çà“žÿÁÔÛáïô«XÄÓdg-Ûè*½èΨÙì=1Ú­i£÷òñ‘žŸ€  wŽ)€¡à)ÆsÐÓÝy”pIÇæ) žÊk3]?ºˆ`ýêÓÇaŠËÖ÷ qº˜¯úȹï[,Ä`ò}ë/­k–ݨ٠\y#ŽØ¢À(‘‹à4xÇ®i¾s†N;JÉ0_,ã4Ó±~cRyþTåfà’ ëB»·u*GPiBÛ…Px¤Ù2r¿/@H ï,9íÍ8n‡ËùÓ6@Yyo¦ìSŒpsÔ:56¸;·ç¦1×ð¢ÁrÓ¤˜á>ÔˆŽÊGƲO‰´s8‰®%b{yÀ®iÃÄš8ݺïpR Oœœ‘Æ3ØþUVÍB!>^M!W*A‰FrO5”þ&ÑЄ{¬çå)o§G\ñšé_a»e¼n(àðFq¸b¦ÌwGJàð dt*žHS׸®sPÕ48£³m#^×çº{¨Q£¼µDˆ¡`£µ\%ѼŸ3í¯åã;ü§Æ>¸¦ÓBM3UC±ÎÞFiÄÃ*ÀÖ$^-Ñ$˜ÃñfQžÎï¦4ëèdÉ~T¨ÉC†?AŠVcº5×vü*@žc`=ûÖmƳag2ÛËpïpÃp†4iôPH©lµ« ë–·†ç7 Ö)£qÿ` $¡0Φç’yëWlï¥<ýãšÕðgÃôñ}þ«s®j6Ò&¡=ºÇhUl¼¤÷®kÂW2Ýi6÷HZW³ÔäSjÃNç@Ç‚v¿áÖ£Üwÿ3×>Õ$Ó$Q<ÒÊ©Œ³1ÀÞ±‡Š4²­0¸ŸÈÎ ëo!Œ{n)ŒÓ.À¶Ktãš_0|ÙÜ9¨ ¼Šh ÄW+$,+1õª'ĺk1\M2FFé!·yàJ¤TØ.jÏMøÁÇÑ&U~bzb²uYÛèrjV·QNUz¿÷OpqZž#ÒüMá2×SÖNŽl&¹Š6ÓJβwa zvbº²o]ÁÛOþµ(‘€ÉfüV¹}/ZѦЦ¹¿×õèõÒ”ŽÖÑ Ùó&³m.Ô]Þ±»¡›³JƒÎ;ÐâÁI3wÌ>`ù‰ãž)¡›9 1ÏjÊ*ÑÙÝ…ÑuŒ|ì¶òûÇo[¹Õ´ûX!»žâ/._õl ¶üôÚIü)Xw.‰Iã¦:SV^Ÿ0ä~u˜•Lx£FóRbò*’Ê–ò1P:’ð(°\Ø24Œ&qHY?sîÖ{kúTI†ê6Ž|˜Š+6à:ô¦jâme0ý y…s³Ê|ŸÃX.m8 Ï­W¾Ú-&W;;uOþMæ&åT¦ÐA‰ÁçÆ;Õ[ßèëÆ×3Œ 18,}ÑfC!8´>¸þµ·k™ÀÏc\ªkzrY¸yöH¬ÆÈÁÃÀÛŒþ•·i¬é¯ipæ]¿f$VGŒ{©ý(°\ÔfQƒ±AíŠFÛ¼` ɓĚ$q†{ƒy¢p?õG±‡"AבŠ)–gYNk'Z9x2G9éZ»Oræ²u‘ûø3ާ½6#þ•ÏzÚ$“ÔV, þ•1ÔÖÆãü¨w7¨¢“ÔP+Âí.ÚÿÄþ Õî"Yf³’;;FaŸ$mÜå} ,9öúÕßjS|FѼMaâh༷‹Q’ÓÊQ±1Àu›¯½7àû(ºñd_Æ5b=ŒCÈÕo€‹dcÄ~•¢Ø‡¹ðMœx·RŠY œ°o=X%Ĉä'Äô-6êçL´˜Ýx†ûZ·¿½ÄÍåE¸ìV`0 . Ï$ô"‚n²øËZ•2=«2°èAº—ªj’øƒâ²ØÉ½Eü¢ACجÌÖ ›ÜiÚœñÁ§\j1%ã;m_$e˜Ø¸®öOG7į ø·ÖW$¸ºŠÍ•09åÆLu®&úÙ5]CFÒegH5 J;yÊ7–rXØœcñ®³][? üEðO†t; { ¦3Î"L4ÌU Ý[žIç‚„9nRñîŸo¦|MŠK4XQÓL³¬cåI0\6? ¡áû{{ï‰~‚ùVXvÜKoó+J¨ ’=@ÜGÒ¶¾'>"èùÿ d¿ú5k½Óõ={\Ò4}ímïæ2Ïos4…㲬€pOnÔº‡C»ñ7Ä GÁ¿/ ñ%½ÃøRâÑEˆ†Õ\<¸]Ùn3ÿ-Rzmãœ×#ðò+Kï‹q{)­ôؤ½º±·¹„¡XGŒ)é‚ÍŒt®Ïž$Õõj?4?úõ»þqVßÅ' ñCá¹?óüãóx…bþÑññ¢×¥çóŠ€:ïŒ<|?³ÿ°…§þ…LðÞ›m«|Óì¯nE­œ–*nf'"¹Î{| óOøÃÿ"Ÿý„-?ô*ζ}Ÿ³+ÿ@gžEs¾Òõ/ÚÞóC—I6+Rah”ªBå ÀÅmüWAÓ"ñ³Ïçø‹X²Ž8&vŠ+ž€íƒœg†²| ¡~%xdô+ŸýjßÄó>)݃’²aUü^JWÒã¶¶5¼iu¢üŸYѭ̺ýí´·FD‹Ì’YI;0IÀƧ·&—Åv—zßÁˆ5ÝjÏÉñ…ª] eƒË’9†àF€9^œôéNÒ5 í?fô½°žH§ƒKr’ÆØdeb ±â¥Ð\q©‘Ö\t0Lší.|yøáOø>úÆ}Mëw š#ª¨è2>èxÇã^}⟠ÞXüOÒô GÄWš±Ôcµ‚k©ø’8ÞvÊ“Ž‘þõw>$[/ø×Àþдø,¬nï—Jaæ*B¨fêÀÏ$ô”Äs¿l†…ãM3\Ò’. w*˜ÁId…†ÖeèNö®÷âî¡ykà$‚Ñ¡Y5;ˆì$i#ÜJ¬¬@ì}ëŽý oôÏû]èQ×Qñ}Ôø'F˜°X×U´vf8 9äÒÂøŒ?戜”KÕÏ®Åe~Ï?ò×>¶Ÿú&¶¾ßîŠAûqwùÞ±gŸøð×>¶Ÿú&˜Oƒ—÷7Cź}ÐC¶­)U:»1lŸâäwþUË|'²¾*êPùkäé‘^ T#ˆÉ¹Û‘éòä~5ÑüÿÏŽÿì0ßúÖ©Ò‹ºìr6Ór·‹OÞe¹Éß?…uº&«5ÿÇ¿ÙÍ,tØâ‚A‰·”Ì H,Ùç8Çç<Ÿˆ¿ä©ø¯#?¼µã?ôì•ØhZí‡Ç?ꓬkka[æU.áDJÇfw’;ZãüF |SñX ÷–¿úL”¥°ã¹·ð·þGíwþÁöÿúÕÏêâçŽtÜ €IùòÔ>ìËc$c =?š A>×A9ÿ‰}¿?ð7§øø^¾;ãø"ÿÙh[ÜÀðݼV´=͵º„…noYQF–†68Rk~óþNsNÿ°9þRV6‰ÿ'#xé½×þˆŠµµ)|¯Ú{HR„ùºS(=‡Ë)Ïþ:iˆÅøƒÿ%ÓDÿ®ú_þ”µt_µ;½/âwùmÄx–î[lº†ùdxQñèv·ÿ¯\ïÄù.Ú'ýwÒÿô¡«gâÿü”?†?ö?ú6Þ€-|HÔWAø‹à[Ë[;SyyvÖ³\Üúùqâ›eÿ&Ìßö“ù5MðþDÍOþÂóèÓÀÛ“­|,’Æý#–Þ™m?,c*¬A¯.Ü×”øJÿ^Òæ†oÝÞÙ,DrEm¦Â"YqÓŸjõÙÛþIÍ×ý„åÿÑqמü:ñGü"ºÜW_Ùާæém—a˜ËþÇ$zqúÒ:Ÿƒò^\üMñ%Ö¡-Ä·ÒZ+\™íM³$…ÇÊS·U…_Š,+€<Ûn‡¹·Lþµ&ñGÄ+¨ëÒYè ¸ ×‘Æ0j rí‚G­?'—ž˜©08ôô"€¥Ï=é>_lý)ÿëP¹â²5ƒûè8Ç'úV¹ã¿ãŠÆÖ[÷Ðg{z!ÏÛ¡Ç©­¬ØV5¶>Óãüë_€:ÐÇ ¢“"Чý©«xg_mWAšÞ9nc¹·¸Œ´S…'i8Ádò*Í׌|O©[\ip[hÚ47¤µÔÖ1–BÜ1àG Ÿz£«¶ë˜Ç?Cõ¦Û/ã'ÐÿJ«‹•éë^Õšïë¦ymg«-êÈÜ+‘°Žy¦@—óêZ¦§«Cup³8¶ #_” Ù=½Mi3&ÞsíQeá>Ô\,Š·Ö’Ü%µ•mï-'K›yq’!ÈÈî*Ö±â/kWúMìÖ¾ŠçKŸÏ‰Õ%bí´‚ '!yû õž82nåûžÔÐÑãñ\¹ õþ¿â ~ßT×?²Á·¶{tK%‘s¹ƒdî'Ò£žÞQsi§\›=FÊC%¼ànÚNA ‚Ai™˜:uÅ.c+÷ÔóEÂÅïøMü[ö—ºJðÄzƒF"{ñ ¥Ù; u÷Áb+]RÃS‹_µ¿Yuåº{™.&OÝÌ\aÑ”tB1Åhæ"HÞ½E #*6ºõ¢ìVDöÞ>’ˆún³âÔÓôût±ž’Ê%bI^…,}‡AÏ­dx“T²ñwÄ íW@¾oÜÇi-­É…“lÑ–#åp ‡zÑ! ºþX m,?x½qNáÊ7\ñ'‹õù´¹nmü=ÚmÚ]Dâ9X»¯nNUOäàsY^0øáíßW}&/³E,q}‘%\ïÛÛ‹tt­…“óŒv4Œ`o\÷ Ôó1ò¢/kž/ñ>—™ª -#ž)˜ÛG2Èvàb?Jªš§‹×ÀÇÂCû û?ìÆÛÌ1Íæí=ó»ü+D®ˆÆ›åœ6ÒO­;±r¢¸ÖtkLÕt‰,^æÎ)!)x“çƒÛÖ¤ž}kXñÚÖ²ö <%º¥Š0\)c’“Ÿ›Ö®y[G¼dÒ9Æsňô­K_ð͵͆ŽÚuæ—tÌïc©DJ!¼©û§û¤×Ö—T¿×|Qgm¦êcM°Ñ *é§é±¯´åC–þŽ€ùSö{tàg­HˆØ\Ðw¢â²3t/x¯Â‹}¦éi£=³ÝËr Ôr³åÛ¦U€ý*§†¬žÃJ†ÖGVx¯CÍ4ôù¿çZ:p'©þt›¸Ò°·öMv°¼w/mso*ÍoqÞŠEèGøw­xümâõ–9¦Ó¼7{ ¡¿’)E®@Ï^áHP®O*H¦€FNÞ4&Ð4™u¦_ÞÝKª]jfMr[ˆî¾ÙåŒ$‘œ Uή1ŠÔÖüEâý~}*{‹oÅq¥Ý%Ôr¬r±gãžUOóÍ)ÉãktëJP‘ŽzŠwb²)kÓëÞ1¿‚_f$PÛËn«`’)>fÜ“¼ž›E\»×üesáÇЮÎfa0 î­¤2‘ŒᶆŽ:óK°î8-ÇëJ9=E.f>TQðþ©ã øLørÌèoe¶Eó&Šc&’y sŽ*?Üø¯ÁÜŤ¶2]¼Ïµ$¬AD ÆÖ^:։Π.ã¸ãòÅÌ9QC׌<)s«O`t9T¹73 㘅bIÂá†Ìzæ°âÑìÓÄ0ÞxÂ{¨ôéäšY'Ó‚ÛLï¼60H^£ Óž+ªù¶ŽséCd·~3Û­Ì9Q×þðw‰¯üCåÔþÑh-â¶”<ÓC»«d¨ÀÀÆkÝÜk ÕõémZÐj3#E¤y‰"¢î¡!sŽÕ:C±e@È  Ô9\lMáèÞñ¦©>¹vmc¸²…"e‚IîHùã¯z¯aã^/x“Qð¼z]Ý…õØ1Ë{‘¿¼‚b¿ìŸÃ9Sr[f0G­>arêfÛ[êöZ¬Zõ½ÔO®Çw%ԓʇʕ¤] ŽBíÀã¦+BûÄ>0¿ñF™¯ýÃñ^XG$Q¬8ÁÜÙ @ç ž´âñøÑ“æŒÀ)s1ò£+U(ÖüMˆ®Î’º…³Û´)H">K—$òO8?•;ů‹üAªhºÆ š,sh“ùöë rª»nFÃå‰#1Ž„w­U'œñŸz«¨ÇŒÇ=èæaÊŒ¿ëÞ*ñ^¥¢j—Ë£G.‘?Ÿn°G(VbÈpùc‘˜ÇB;ÑãOľ+³Š÷Z]1RÂÞàF¶)"–óAÎæ9û£Ó½*ôeÃùÖÔ'1/^hævT_ñßÄ/k¾±Ót=An55º¶eŠkv|¤gvôÚG¨ïYºæ»â?}ŽÛ\M: I„â |É"‚±cÂŒäøÓ÷«d’cKÔžG4ܘ”J1jþ0‹ÀçÂJ4OìólÖ¾aŽo7aÎNwc<úTW^+½ð,^˜èͧ‘¤s„—Î]ŒH;±ž1Ó¥j‘ǧ­gÍ€GÓ½.f>TS‹Vñ„^>DþÏ6ÍkææóvóØÏ>”ÿ k~-ðu…͆•ý‹-¼×-rMÒJ΀ʰùGjµ’[þÍ&q¸ŒœûÑÌÕþ Õ¼]à}M+LþÃ’§-u¬ÛˆPFU€ÇÊ;T>øFòÍ%´¹'6FÚQv’Á¾WiÓ­kާŒúÒ“è1øQÌÕìÖýïµ=CR{curgql"ü `Éíêjã7ÊN{Q¸Hçœt¤fÇéHa¿k»¬£©É¡«Åw6 EV…L/™UÎc‘ǓYrH«ü2£”»µ1RQçG.G¾a ÿÏl1¯ 5¦¿[P³±»¸‘\¬±³Ü£E#„eÚoFC+»¥.ÈK’x‡QŒIæÛE–Û$ó—Ëo›ålŸ•¾GààüýÖÂ6¹©«•kXÕ•œ2´l ² Ȥg  åÁå-UßU–á/Ž6Žõ,þÕ‰V†5Ú6¾á&iŒª…9ÕÒx‚Fˆò U¿¸ÔndßHèn¢•I î_/ƒ•Ûægi h² ²c®jq"M%¢G †)#ÄÊŽáʱ8;O ƒòž Ju-z;„³}"t»q”µk9Vgœ¬gæ#ån@þþéÅ µ™f²·´hÒ4·k&ŽKtHfÞ€5WqfݽY·yD …ïlÞk 4ÕŽ+ÈRm¡x£, ‘¸mËŒ6ècÎ" TWq2È.ËÃ^¾tW[{vF U•I C1<…R±÷T†8˜jzÛtD¬÷Cuª‹II¹P2Z!ÿ-@$¦@•J-nE²¹ˆEÇr÷ÒK,«¾n X˜«¾énÝùÜZLísÆâõ×#†óM¸}9segöFŒ˜Ò—ìÿf ÇÉ8À%¶Éçv«œ–AvNÚ¾¬°Ïq&¶Þ <¹çkwXàq€RG'j8$ ¬AÉŠYµ]^ÖQ Ö™öi‚™<©í¤‰ö`’û[h Çv1„cœ)ÆMÌöóØÝY›wŠkÆ`³$‰…‹ªÂc€Ê­¹†Ö‰w;1(ÐÔõôÕõIu` Wk¡$1ÈŸ19@e‰b­€å²v”*ª–AvJš¾«,R4Zh–8Qe™ã·wXc#r¼„pˆWæ ØyŽi±ª-»Ý8 H›l·&ÄÇ&v©åx$™}FkÚëdF+e):ÚãvÖ’··xãòä+”#« ”®™C仂ãCkkÏnmã¹XÓ1Gç<Ä"•Ü„´Ž ‚‡aR@’‹ »6…ö¿ö¯²a]}¯Ëó>Ëö ¼í™Æÿ/¶gØÆxÎjõ­BîTŠÚÁ.e¹¼-#IÆ~URKp ã<z .ÅOøÖ6ÐNiv¼~X sâ+Þ~Xztÿ/ü$w»¸õþéÿÇÛKŽqžôX øHïp ÿ¾OøÒÂGxXñÝ?ãXÛNqšR¼š,6G‰/¹;`ÿ¾OøÓWÄw£ø`ÿ¾OøÖ@SŽ´€J,6¿á$¾l·ëýÓþ4Ÿð’_>Kûäÿd`Ò`ðh°]›ÄwÄ‚c·ÿ¾OøÑÿ ð9Ùoÿ|Ÿñ¬|?J0{ŽôX ¡âKìÅmÿ|Ÿñª÷ž!¼’ÕÕ¢·žp§ük;ð¨®?Ô7Ö‹Ë ­Üù*6EÛ±ÿÕÄ—« ¾ë´ÿs+þ­ º3´ æÐñ%ï$Áo÷OøÓO‰/yE¿_îŸñ¬Œ‘Öšsº€6?á"»Ág·×iÿˆ®Èæ |ÿºƱúŒzÒóŠ,°ñàoõtþéÿQâ;Ìÿ¨ƒò?ãY9Æi8X.lÂGvIÌÿß'üiá#»ÿž0ÿß'ük6ŒœÓ·Ð5‡ˆ®Çü²‡þù?ãHþ#» uäßãY œæ‚ÄŽ´YÍSâ+¢y†˜)ÿjk÷*xŠ/”ÿeäçð¤fíœQ`¹­ÿ ÆàvEù7øÓÿá#ºþîsµ¿Æ² àQ»"€¹®|GvG܇þù?ãH93=/453ÿÛC  3""33333333333333333333333333333333333333333333333333ÿÀĶ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦$±ÉŸ-Õ±×iÍ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ч}«iúaŒ_^Coæggšáwc®?1S[^[^ÅæÚÜC<}7Äá‡æ(j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ|Eã}?ÃwÑÙÜAq4­˜| 0 ’Sìk¦®+Äþoëfüj l¦%B¾QrHÏ=GµD>+hxæÓQÏýsOþ.—þ®…ÿ>šýûOþ.¨¤ƒþƒßÿÅTW_ ¡·´ša«HLq³ãÈàgûÔ¬Ÿ´0ß§±‰£S¿áhxû—¿÷èñUãuÙøKÀÑø›J–õïÞܤæ-¢0Ù©Îr?½@ü-ÿr÷þýþ*¡—⮎,6—ŽsŒ¸UÌÖ{ü#R~MhïkŸýž–?„ˆ²)“Z,€Ê-°HôÎþ(Ò«ç}Q$ÒüC}»¼-ÌŠŒ„©1Æ1_DW€øÁBx¿T§žOçÍz‡Ãí~ã\Ñ$[Çó.m\!sÕ”Œ‚}úºêó?„g`×ýž½2€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€*jwé¥éwWÒ)e‚6¨8ÝÓñ¯;O‹’wèªGl\ãÿe¯DÔì#Õ4Ë›XªOBÀdŒ÷ÉGð³BAóÜ_9÷‘GòZËÿ…¹ÿP?ü›ÿì(FtN?ëïÿ°­øUþþýïýýüMpþ:ðÝ—‡/m"±3š2Íæ°<ƒÛ@/ü-¸?è'ýÿüMð¶àÿ <Ÿ÷üñ5çzE¬wÚÕ…¤»¼¹î#‰öœ3qù׫Ÿ…Ú /G¸•øšËo‹qù4g'ÐÜÿ²×AàßI⟶™-Rßìå0‹gvîÿðÏÿ…U¡ÏÞ£ÿÿˆ­ÿø^ÃÃ1ΖM;™È.Ó0'Œàp©üèžø«ÚÏš; 3ìU³ú^oáÍb}[¶º†FTÞ«*ƒÃ¡<ƒøW©üLP|çÛ:§ZñjúfŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¢ºÚLÈ(Ü~-d`ÐÌÕì ¹Èëxøÿ¾¼~½“áüŠoÿ_Oü–€;Z(¢€ ðŒxÓSÇ÷×ÿAïá:ÿ‘ÓSÿ}ô ³áš»v&? ÿã^‰u{ic™ws ýéd ?ZñmÄÒè:žž¡µÉö©Û’ŠÁÇrI c[ÿuÝdÝ[PÍ Î%ÌøóôÍw¿ð—ø{~Ïí{\ÿ¿ÇçÒµm®í¯bómn"ž>›âpÃóâ^$ðF£áÈE˼w…¶ù±ä=·ß­ehšÕæ…¨Çyi!RÞ™ùd^àŠú"ŠŠÚtºµŠâ3˜å@ëô#"¥ ™4Ñ[ÄÒÍ"Gò]Ø?Xž)ñ=¿†tá+%̹CŸ¼}O°¯)¶]oÇÚèŠk’Ý]‰ÿW {/éïúЭ?‹¼<’l:ŦsŽ$ÈüÇ¡g©Xê ZÎòÞà“åH\Wÿ ´“g±/.ÖãJJ•Ïû¸éøþ5æwÖ—¾Öe¶i+«gÀxØpA÷4ôMÆx ŲëöòÙßo­Ô6ð1æ'LýAÆ~¢»:θ×ô{I¼›RÎ)AÁF™Aßž?½±ÍɬˆÃ!”äƼCâ ªÛxÎ÷hÂ˲@=ÊŒþ¹§øWÅÓxoNÔ4ÈÈ…Êœ·Ó}x kšxm¢2Ï*EêîÁ@üMdÉâïFû[X´'ý™7ÌWžÚøCľ.Æ£ªÞ˜cš??$àÿu ?*«®|8Ô´‹/!¸Žî(†é)VQÜã¸ZõË=JÇQRÖW\×Ê6>¸éV«æË[»‹”¹µ™áš3•t8"½÷ÃZ±×*Ñu©|›äy¹>[)F?@G?…kM4Vñ4³H‘Æ£,îÀõ&¾rÓîMž¥kr“Ê•_rõ9®Î=sâF¡%̳}›Lð¹ÉDöUþ&õ?ýa@½ßÄ Ú1O·ùÌ:ˆcfž1úÓm~!xnê@Ÿn0±8tl£óÆãX¯ð›O0‘¥r²ã†eR¹úqüëÎ5­"çCÕ%°ºÌËÑÔô"€>†ŠXæ‰e‰ÖHØeYNAÆŸ^Yð³X™o®4‰´ – OÝ`F@úƒŸÂ½N€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€>f¯dø_ÿ"›ÿ×Óÿ%¯¯dø_ÿ"›ÿ×Óÿ% ÖŠ( ¼#Ç_ò:jï¯þ€µîõá:ÿ‘ÓSÿ}ô  ¿…ºLwzµÎ£2†Š¢0Gñ¶yü?zåyÇÂSþ‡ª.Fsß¡¯G  À—ÕQÀ Z»óê£pýE|ý_CxþE}[þ¼¦ÿÐ |ó@CxsþE}'þ¼¡ÿÐi““YžxcI`‹8ôIâ[“iáNu8e¶}§Ð‘úšñ?ëO®ø‚æïq0†òáˆ:~}ôRØøanÊâkÇ21ï´3ø×ŒW¦kþ/ðþh³ÖëN1…ÌE¶§nTñÿ Z¯ø•,RxÂA’Y1ýîOò"®^üSÕæ…£·µ¶¶sÇ™‚Ä}3Çæ s–Z¹¯\´ÙÜLò6çš@B’z’ÇŠØøh²·Œ#1çjÃ!“ýÜcù‘^Ó\׃ü%†lÜÈë-ìÀy²€u}¿t´ã_©¶B}ùj¡àM"=cÅ0G:‡†3ºžŒ`}2Ej|Uÿ‘¢Ûþ¼—ÿCzw–ð’Ý®ÞM›ú|é@½HÊ®…X¬0Aî)h ›.¢^M9ÈÊÐâ½á§ü‰ñÿ×i?y¥ÿ!K¿úìÿú¯_øh?âþ»Iüè°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯3ø¹ÿ0ûoÿ´ëÓ+Ìþ.ÌþÛÿí:â¼)ÿ#f•ÿ_IüëèùûŸò6i_õôŸÎ¾ Š( Sâ7ü‰wïÇÿ¡Šñ$Rî¨:±À¯møÿ"]ßûñÿèb¼^ÑŠ^@è‘Hüèè6Â-3M·±€b8#=ýOây«TQ@;ñN5OBÊ9’Ѿ»˜ )ß ¿äh¹ÿ¯&ÿÐÒŠ¿ò4[×’ÿèoKð¥Iñ5ÓcfÀŸø…zý1âŽFFtV1¶ä,3´àŒC‚:}Ess´—72¬PÆ7;±À€%¢¼Ã[ø§!v‡E·Pƒ´N2O¸^ßåT,­¼wât‹Û˜mß‘#Ëä¡Áy#è(¿íÖ/A*€ ¶Ê[܆aŸË•3ákñ\ ÕÁÿ¾”ÖG‹4;Ý úo¯¾×4±y›òN9#?J×øZ¥¼W)ÕÉÿ¾”Zö:å~#)> » g>ß8®ª¹Ÿˆ?ò#j?öËÿF¥xe}£éÑé:E­ŒJÃSŽíÜþ'&¾vF(êàTƒÍ}/@y7ň•u«@ùšÜ©üãù׬הüYÿ¦ÿ\[ÿB  φŸò8Gÿ\dþUí5âÿ ÔŸ!“úW´PEPEPEPEPEPEPEPEPEPÌÕì ‰>¹Ééxøÿ¾¼~½gá<™ÑoãþíÀoÍGøP QEWƒxáƒxÏS*r<À?%½æ¾ñl‚_ê¬1Å˯ÇÒ€;„Ÿñëªÿ¿òjôŠó?„óÿ¶?ûR½2€2¼Nû<+«3þ‰(üÔŠùî¾ñ_üŠz¯ýz¿ò¯Ÿ¨è½þ@:wýzÅÿ ŠƒÄÖÍwáNf¶r£Ô‘ü©þ™'ðÞ™"ƒkàvŒŠÒ##€>f¯tð êÞø:Ë —„4.=<~„W“ø³A“ÃúìÖûOÙä&KvìPžŸQÒ¯ø#Åc×ïÎæ°¸#ÌÇ&6æ?€=³ËMûö.ÿïcšuAg{kn³Ú\G'š í™SÜ‚? *öòoŠä³ê©£ÆäAn¡åQüNFF~€Ì׬ׇ|B·’^³ƒ‰BH„÷@þ`€'øw¡A¬ëÏ-Ú -íHPôf' ·SøWµW|7Öí´­jh.åX¢º@¢F8ã'¶rkÖîõ+o´]]à 8Î÷púzþ土Z'ah§ówÿ o¯ù.ëÉ¿ô4¬k±ø‡^7p#-¼qˆbf.'?›¿ðÎí-¼\Ø´@ñ.}rÿe h®câà}@É1ÿºzä>%Ê#ðt«ÿ=&\ÿJñZúd@ äõó5})mÿ°ÿ¸?•K^Mñaó¬Ø&:[“Ÿ«ð¯Y¯$ø¯ÿ!ë/úõÿÙš€+|/ÿ‘±ÿëÕÿš×²WŠ|6¹KD®@ó¢x×>½¥{]QEQEQEQEQEQEQEQEQEx&±ácKÔe€i÷3DùrÅueíÈïŽÕÝü1Óu-55}e=ºKå´~jm$ÙàóÜW Q@Q@8×€êš.¹.§sq6‘|­<Í'ú†<’OP9ë^ýEq ´ ÍN»¸¾‰¡–é—lN0ÁW8$vÎãǵvôQ@µ 4Ô4ë›) ¸ÿëÑø£jšæ™mk¦À²„”Ë 2< gêk¯¢€8Shöë¬Ks³] oŒ†ÃuöÆkbûU¶°š fKs6|¨"]ÎÀu>€{’(õGMÕ`ÔÄÞRM?—,sFQ•±Ÿä{TzÆ·g¡Åo-ï˜#šQd\…b çò4¥Efkõ–‡öczdT¸“ËWUÈÞ¥¾Õ­¬'†ÝÄ’ÜÏŸ*—s°O 䊽EQÓµk}I'1¤Ñ=»ì•'Œ¡CŒÿ#YòxÃJŠ4¸s8²y<¥¼ò”[ë×qŽ:ÐõB×vÉr–ÏqÜ8,‘˜zÔÕ}OW±Ò-Vâò`ˆì‚Ììz’kŽÕîÛPñ߆˜Y\Û\ÿ¤ Rï'߯­wõGPÖ´Í(¢ß_AnÏ÷UÜ}ñWIÀ'ãÒ¼×BÕ­¯Ä³<“=Ñùàdqí®h«¢²!ñ¬·±{È–ìâ d€„“ŒýG¸5Þµii|– K=ã.ñ ¹‚úžÀ}H  +;N×,u9æ¶…Ý. ÿ[o*‘=ð{r9µI|_¦ÉsukwrÝ[HÑ´@YÉ^¤c·¹ÅoQYš.½c¯A,–f@a}’G*md>â´è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ŒÐQâ‰ËŸá‰qžÅyþUŸ-¾¹à[V¸±ž-G@VÜa“ïÆ¬{ǨÈç8®Äh:jêÓjb.¦]’‘#mqŒr¹Áè;Utð¦ŽP[È`VÜ-ÚâF„6zì-·ô  xeY¡ŽU+¨až¸"¸ß Í-«Ê¹RIœc8‰ÈžnçÃú}ÓÃ#¤Ë<)å¤ñÜH’ô.OãšådÖµmOÂ~"±¼¶ê–1„˜ÅÑÕ‡${íô¥Ó´câ_éKªÄšlq¡’8`Úû”`†rÄpsü#Ö»2ÏN…ⵄ"ÈŤ,K3±êYŽI?ZÊ_xynÍÀÓÔÛŒ{ÛË'ýÌãðÆ(YhÇÄ B䀘9ÊïÃøGúTÞ%GÄ/ Ƭ<ÅÞXzãúéµ]OÖ¡H¯íÄ¢3º6«!ö#‘TßÂ,µ´†h_zÍ翘O_9=~;Påq^ÿ‘ëÅ?ï§õ®Óå:…Uú\ƒ­§—]ñ®èËmu>Ûva1T·Ì=±Žh†Ì~Ç«GsÿâùÆ~÷ uüCQ Fdø•â‹oøôXÖ7ÇC/ËŸÇ!ÿ:én4>âõ¯LREtëµå‚g‰œz¤gñ«6:}¦›oö{8ó¸…êO©=I÷4Èü2‹¨Èok÷RÝÈ ¸þgó®³Tóÿ²/~ËŸ´yåcûûN?ZKѬthæKLK4†GË|Çêx«ôÈü7¹‚_A l¾t28™{‚XOàGåTüy"‹¯ÈJ9/ÇÚ0~PA^¿†ÿÖ·® ¸WÈòF°Žå·ŸðՕ⥆_Ãv7̳Ēîîß»õ®®éK žL’›õ"yÞQû¡‰ëS_hÖ:•åÝÔ&I¬Ü¼q[ƒœÏ ~TÌx©U¼uá`ÀÞ9çØ‚)oÿä®iöoç%u7:]Ýõ­ìð¸µ,arOË‘ƒÇCøÔ7º©[ê1»·c•$d sÇdr:æì‘[âö¤XVÀ>‡÷cùLŽ1qñvImGË ,:n#~Wòö¦‹´üU¾ó¾Ómd¥^)=Çäãr‘Çòö®ÂÃL²ÒâxìàXƒ¶ç9%œú–<“õ *ïX½ñ'…5«ôž]6%’(âååÀêÌzg#€3NŸþHÐÿ¯TÿÐÅt#ÁÚžy~À§ÏÉt.Û2z¹À>ý»b§‹Ãz\:,šBÂæÊA†¥fïž Lo²S…ùqëÏQÒ´ ôcT~Ö2|íàÅZ¢³áÖ-¤³¸º}ÑE­HôÇ\æ¤û{.ã%¤ñ ŒÉ½¶àØàðhåÍ躛Yér\Åpÿi“`˜ã˜’3œ~§¯ÎmôÙÁòŠƒžçë@4VM†¤±5žqñÊð’KÞm÷ÈWÙ€9lžWãÍ$ÚºGwsj–ÓK%¼bGÙ·#=I£Ed'ˆ ’;9–ÚàCu ‰$!@ {c9ìy«pjQMs{V­ó c# þTrŠŠÚ´ÛG?–ч‚¿P;f¥ Š( Š( Š( Š( Š(  —:|WW¶·23æØ±E #4_X%ñ·/#¡‚Q*íÇ$zäUº(­½„v×·wJîÏrT°nƒhÀÅDš`ó!iîg¸6èÖ]¼c$€ <÷«ôPM1,î§š+‰¶M!•¢$mÜzž™ýi÷Z|wW–—.ÎÙ™•F0Iæ­Ñ@ÜÀÓ¢„žHY[phñϱG5N]Þ{+«y^F7D4²ð‘ŒtãµiQ@óiIq)5ÄÏ4.$IÎÝÊÃðÆ=±RÅasÉpîò\H» Œ…ôè*Ý’4 q¦ÛÙ‰¦g}ðÊ ‡$úc½h[ÂС<“9êòcùüªj(oÁ2]Çö«…Šæ_9À|ƒžžÝ:TÚ皺 ÚÂ,ÀdœñÐ}kJŠÍµÒ£T´iä’Sn€D€¨@Æp_­C7‡`™.ãûUÂÅs/œÈ à>AÏOn+bЍ–º›_™¥0ˆ@8À\çÓÖªÙ¬%´if)$Æ`Ù•³œƒçZ´PziJ5(ïÞæi'HÌ6Üô«EáØbŠ–îçË·›Î‰I\)É>œõï[4P]BÂ=FÍ­¥gU$ÈyŠlztBå®ffžfM›¤ÇʽÀW(  ë$XWwÝNR# øã${f«ÅáØbŠ–îçË·›Î‰I\)É>œõï[4PH,RÚîòíž[¥ƒÑ€&™k5¥Šâf–MÌÅ™‹c'8Ïz¹EgÛéKk=Ì‘\Ω;´Fž¤qŸ×Ðíÿ±âÓVIV(Ø0`FI>˜ëZ”P|úRË|·±\ÍÀO-ž=§zû‚©MïmnšYYí•‚9Éa‚O½\¢€*[X%­ÝÕÂHìn3+cŽ8Í[¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š++ZµžðØG{£[¤’S‘Šբ€(ë <º=ÔVÑ™&’2Š ×ƒ×ØÕC§L/ô… þgnl½´(­š(/I¶ž½J[ˆŠ4×£dȽ"[\Ý^´_"[,0’GÏÎãúúÖ­ÍeÞ'‡,m %å7 %ʆÛ¸±ïƒÚ­´W‘x‚æímLªöë,@rCs‘ϦkjŠå×K¿´ŒAþ— ȸ’&`<Ì18È8î?*ÒÔ$½¼ÑnÒ+Y#بx=1ƒëZÔP-Å„â}$ˆ½½±ýá|¤.óïSkÖÓÝØ$PEæ9EPœgè+RŠÄºÓnu;Énd_!RÝá·V ¶æ8éצémv©s¦ºMn»|Ù% ƒ¶Tdò~‚·h  ]" Ûh¯a’Ù’I&’Q1aµ‰éŒþ•R=:öo¾—öf‚uLeÝpçvãŒþøë]-‘kl{…Ó¥„ª™d sº¼ž3ô©ôKW²ÑmmäM’*e—Г“üëBŠæµKmNíµ(Í´²« [m²ç#<·Ô~Ub[[˜oô™£´’Hm¡hö+(db w8è;Ý¢€(k q.s¼[ç’=ø<Ÿbj¥Å„â}$ˆ½½±ýá|¤.óï[TP¤º|úžÛf™î&iapË·ž€ääcÿÕP{H´‹dS4pÎfÁæê'Ô×EEs©k¨ÛC¬Æ–­$×2;Å.õ TŒ×9”ã§Ü‹] nÆ;wW˜er¬ƒ×Ôšè(  X-nÖMjäɧ;aRÃæ ¸S횣-´–Ú^’±A)¼´Ã´Q²—U †;yÈ'Šê*¼Ö6óγº0•WhtvCL‚2(ž‡%´öóÜB³‰^R'3®xƒÛéU~Ç{³]œBD×?$+¸|Êh?­mCvñùq EÉ8ÏsîjJÂ}:xÛC…a/ ¯3#å`¸“ëšlÖRÉâIÑ@6×P¡œƒÎã÷éôÏ¥o2‡FVèáµ³·²Œ¥¼a9'$’}ÉäÐôQEQEQEQEQEQEV[ûv¸¸€3y¶à4‹´ðÈÇ­5u+W²Ží´2 rÄœ­f]Átž#f‚'òîí|£(#ê~‹ÓÔÔZбX%£6fE‹xÆç$á¾€¹ô  i5k(¤ØòŸõ‚"ÁIPþ…±ŒÕ©eŽšY]R5fc€+›Ñíb–ÒÖÖò+ß: 7´/$î-Œ^§éWµô‘ÛO>[Él·*ó„RÜ™¨ “PkO‚ÚIV-’I0hʆzŽyô«qk63KåG+3ù†"mÃSŽ>µNÙ¤›Ä÷7/ÉvÂ8‹FFᜒ?Îj =®ì<)-ÔV¬×²3Êc*s¸¶3޼ ÖT´–ôZ+°˜®å (aê ?…Dúí‚G3™¬RR±1ØAÇ8+2ÐHþ Žâ_µÉvd‰%„®\žp01Çj®m®ƒ]L‰îåß"„%”3õ#¯A@Ú̧QÒa·••f‘¶žrsíÍh[]EvŒð±dV+»Ç¡î=ÅsÚÍ•Õö¤VÒ7U¶´ÌyRذù9ë•­í>à]YE/’ðœ`ÆêT¡F(µ‹(%¸äröàBÆÍ´œð:bˆõ›eV?hÿTÞ[mcè1šÇ1Ü']¸[yL·34h›æN~&­IjÑêš%¸‰ü›hØ– JîÚÉ(FëT´³‘RweÜÁwlb ž€¶0*¬×r¯ˆÒ‘„Ú4Ò¨Ï8cÜKy©Cmö˜®ÕšõD°ˆHHíó<þeÃjzäË ›Ä –ÿ)¾Rx=:І™«CªÆÏ HªŒ\ã¼jn¥ÿ„–;uˆÔË*ö?6;@e=´"9PLJFWæïŒõæ¨È.¡®Üe.-Õ Â›å$ãך½c}ibòâøMŽJHcÙÁ8 ©5/ö½ž.rî¦ÙCÊ­äX‘Bö³h&H&6°ÂwmŽÙ ÷P3×¥A1šþÃ_º‚å™! X*`>†€:fÔ-‘­TÈsuþ§å?7ü(›Q¶äFffwH#Bû©Àⲉ7>!Ó¶A8µ·…ÊHÑ0ˆ¸ãZŽÀÜYZjQIo3ÞË<Œ !"L”îéå@òê¶PÁï8ò§`±¸‚Oò©a¼†{vž=þZç9Bx#5ƒ™%¬š ƒ#H—–W• G?S[·Þgö}Ï’¥¥ò›`K`â€+iúž£“ xãLÒ)Q´wÉõïR¦«i$±F$`fÿTÌŒ«'Бƒýk Xf¸ðlv¶°O¾4ŒJ†2¥¹Ëž¼úUû¨Ž«}§ˆ#u¶¶NîÈS‘÷TúúPË^Î×Íó$b°%d˜'ÔGö¤1­:´r2 J<Æ êvöÅsÛí⸽Ò.®Zn.‹eá!¤Žtžþ•gÈ1jºŒWKx‘ϵb0FY]ÆÜ€q€4®5ë8Ô.ù~Ò7!Db6÷< þÊ¢ºÔ?ZÀÄ?gi^5BKdàp9ÏΡxÅŸˆ,±k0µŠÐ¤[#/‡'¡Æ{w5-ªÊÚî©xÐ>#"ˆ•?>N?Pøu;9ìMâÌ Hf`WqŒgöµžÛ‚]”Û¦ù£e`¾¸"¹åµ¸MKc ÁXî<Û•T;Ç$çiâ­ê0!ѵ ‹H®¦¸¹ †IP†a8\    «]FÚõ¶Û»?È;>äUª¨eK&´´H%eq±Y*GñÕn€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€*O~j–ežä>Ò:.ÑžjKk¯´™¿s,b9 y‘q¿ǵeÉ"¿ŠÙ˜ü––e‰ôf?à*…åÙÓ4›O=ÖkùšRÙeŒp îF1@UÌ\Îmnµ¯*i|›{E]­+0óOZšWá³óäó˜‰%;ÎX*äçÔzèh¬KIN©y¨½Ä®¶öҘʼÄާùVj]^Üè:Z5Ä«<÷aVLáŒ`žO¯u´•™€`Jð@=*`K(%ý䮤—c$…ˆã±=ÏéQ‹? O¨´’™dŠIi®yÇÆxõ  Ý2ý5;îãFEr@ ìHþ•n¹XížÎßÃðÅ4Ë4’+86cs.ÞŸ¥?]½ûE¬ÒY5ÎøæX’e”¢ÈÈ›¿$~4ÓÑX’‰.|P¶þ|« V›¤åw1nÇçOðÛ;ØNí#¼ms'•½Ë@pOÐÐÅÌk·¿hµšK&¹ßËL²”@ùów䯶õ9¶‘w.â!bãœqúÐÊ+–t¹µ´ÐÙ.®öiP8i†B2ÀŽ˜SµÛß´ZÍ%“\ïŽe‰&YJ |Œ€ù»òGã@=‰(’çÅ oçʰÅiº@ŽWsà~uBÚþæÛEf†Vgº¿h-šF/å©8zã€7îïÖÒæÒœÜɰmíÆsVëŸh#OYEæË!··y¥”·_—8<Ãåã]^iÓٵʬ×AVF…tÝ„ÏN: t7—+ge=ËV$.@ïÒ–Úqsk áJ‰Q\+uÅfø™ö$°©ÃÎéýK隣rí¥k0‹yf’8¬ä–â6UAÚpxúPKEs–‘ê‘é÷žd‘’Âyåi~B‡AéŒu¥Gyx×Wštömr«5ÐU‘¤!]wa3ÓŽ¤@=/¨ëš¢µÕÂ[ÇåÆ9JüÛrzt­ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¢šæ+}¾k…Üp3@ÑEQEQEU[ ´è^(YØ¥©^ë>Ó ž²ÙÞ-¢Ÿ3 !Øzƒ÷HàdûЦØx·HÔµs¦ÚÌï6 VØv>:í=úÊ´-õ[«û›.Qîm±æÆ3•Ïóü+Í´}n /ÅR^xŽÎm9£mìâ’‘ ýOÔÔÔzÍÄÐxæÏZðì‹:ß¡d…•—*éƒë´~$Pi§ÞjÚˆŽ›¬\Çsâ¼¶’¢ÚTäÆ}p5{LÖíñf³%¥»\YÛÍ‹›xþùˆ’UÔ{qùúr;-/Y¸Ò Õmuë¯9ôݯö˜2Äãå8òÿ9­yîî5-íZЦEx`vc#9ïœgñ®6KØ|QwâËv´O“¹”ÒŒ°[Àž"þÅÓá³Õ“csºK;–û€‚C!=¹ü}Åw:¬Ú¦…íʬ3.äs€Ž¤†ú3K¥x‡NÖ®.b°•åç Bý¡¯:Yïuö]ÉÌ6º•åÕás=Çjúã*JÖ]oÄ^‚ÏMX/šþUºÛÍ€çé’~¤úó@‡EyžµâÆÖ/<·I¥èbS ÝDŒÏ3 Àþ‡<ô¦ƒ£Ék†—¨¥×“pfß&3Ô瞦€6(¬yüS¤A©¦ö¯6í›o—4…NqÎÐq[QETéÖ­q<åùÓË“æ8aŒtÏ¥Dtk&‚Ú-ޱÌL$`Éô9Í_¢€0ôÝ ªGyî®g;T¾K èsœçõ«±èöqÜC8Y Шí+ŒcyÕ~ФúU¤’Jæ6wúÕW`¯õ⥖ÆÞYmähþkrLX8 Æ:UŠ(C)V‚0AïYë¢X­“Ùˆä0? ¬p3œxô­(´¶6óOo3¡ó-óåb6ä`ôªÇAÓŽáå8_7V[Ô ñøV•VpCw5Ò)ó¦ ‹:RYYA§Û {e+’B–'9ïV(  Ó éÇpòœ/›+­êxü)5ûk‹½[kT/$…W Œõ­:(´6ðL&T-(]Ý‹¾ƒ=? ¬t8îS€eóp%`½@Ï…iQ@Eg7s]"Ÿ:`¡Ø±9¥W-ˆ±[!yûÐy”lç ç#­_¢€)G¥ZGr× ŒetòÝšF;—ß'šŠ- ÂŽ9‹G™XíÏaÏOjÒ¨žææHÀwû¢€wgôKèX+\aЂ)"²·‡Ì+Z_õŒä±©=½ªÅFÛH³µbGÙÈ´¬Ê¹ë…'£‹B°„ÀcŽ@`bÑæV;sØsÓÚ´¨  ðØÛÀn hA¸rò|Ç’•:ÒÖ+T¶·M± ÂŒçÞ¦¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »»ŽÒ#òz*÷&¹‹‹‰.¦2HrOAØJß¼Óc¸/4’ÊX)ÀÈÀý+›  }/SÚVÞvùz#ÞÆ·+šÓ,㼑ÖF`dm5ÐÓŒ;¸ š’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( >óÃ?Ùþ,ÒuMÉU ®·N}î~§ô©µZ^Éu,7sA%ÅÜwmÀeV]ÙÀã®ãÏ5ÕQ@Ïo ÌF+ˆc–3Õ$PÀþ²5_ Új)§H³6‰¡0 `ä¨p?*Û¢€åF%2ùkæ‚øç™¬ø´KX´ŒââxD2.~SŒsõÀ´è £1´{c‚Œç­diž°°ÐÓI™òÙœ „’sÓñ­ª(W𦛫Ãn¥^ÒKaˆ%µ!1è8Æ*-/Áö:uá¾–{»ëÝ¥D÷rïdƒNµÐÑ@ž‘â]ÒM&ÓOÓµ+ 墒fÁþð'ŸóÍeêzU׆tØ‘^Þ OY¹ògº‰BGdýÅé´wϱô¯Qª×úu¦©hÖ·°$ð·%[×ÔÇÜP EÿÃØ$•-,.ô¶pEo.á²x܈ý=;VÍÇŽ-mm­–K+–ÔçPÃOŒo‘sÓw¦G8ëÏJµiàÍ Îæ+„´gxpbóeg Ž˜⸠84‹q¨Øøž{« `ÜyÂìϦÒÈ$“ïÇi[î¯õ5B:âø‰®äeSÐwÇô  çT²qø)ÿ ?µl¿ç¿þ:šºEšŒË{–4ïì«/ùáÿñ ûVËþ{ÿã§ü(þÕ²ÿžÿøéÿ ?²¬¿ç‡þ<Æì«/ùáÿñ ûVËþ{ÿã§ü(þÕ²ÿžÿøéÿ ?²¬¿ç‡þ<Æì«/ùáÿñ KªY´N¢nJ>SþÍ×Oý•eÿ%–ít¹d°X¡¿‘âVîde zmiç?…^´Õžü<Ö¶èÖ‰3DÒ´¸'iÃ0\r3žý¨NŠÄÓ”V 1› 1Ú?º:Ö„PEÄh¿z’Š(¢¢¹¹‚ΞædŠ%gvÀ-ÅÞøù&œÚèvmy/üõ|¬cß×ùV|«­j\ê:¼¨§þXÚ~íG¶zŸÆ€;Ë‹ëKP~Óu?õÒ@¿Î¹Ù®t[{–¸ÑõÛ³Ë(™Lÿ¾¹Çâ9¬ü?¦Frmƒ·rì[?­XVž£ÆßñˆëôZjó5”Æ8uþôJáÑÇ÷‘‡~µÐ×–>‘`Ì®¶ÉˆC+Â62‘Ђ+¦ÒüW¨6šÌáY#/Ëp%QÔŸé@mZÃPµÕ,£¼³™e‚A•aü±ØûUš£¬Çs6‰}“¹xDAÁ݃ŒòkEÒÓÃqIezºn¿c+I*Ü­)ôçôPG9¯gªZ&•}7u¦ÚM/÷ä…KÇ›áÂM§4¯jðMC‘‰Ï*«¡¤TT@ˆ¡UF ÂÕ©ê§l߇óKI„ÜM%ä¿3nùsë[5KIP4ØÏ®OëWh¢‘*BœpqœW=o&­'ˆntöÔÁŽc—p·\¶âÀüv€:*+™Ñ<@íad·ÑÜ;Ü\Ën—Wa`ï´uÏÝ\gÈ«vúÜq¿>iea¨5¤HcT!¶†pF2rH<â€6謭cP{oÜ_šÑ‘7嫼|Œü¤àþu8Õ"}B[8¢–I!eYYvâ2Ã#99Æä@¨ªwŒpÝ‹DŠIîLfSXÈLã$’'޾¾•Z]~Ú!p|›‡û,K-ÎÔ„žA=qÉ4«EbÜøšÒ>È.n e»w‰Wo”Ù;,;Ç_LÒ?‰í#ŠêG·ºQoj·x*¹’#œ2üÞǃƒ@tV\ì^Cosæ´FŽƒ2¦q•Á=ñÁÁ øšÖ+9î&¶ºŒÁr¶ÒÄUK£61ш#æ   ª+ûUΫnŽ·0+ÚË'Ù¤‰2ÅX – pqÐt!©l¼Em{-Š-½Ìk}Io$Š 6Hà’qƒÚ€6(¬h¼E ÍÅ„vðJc½wÌøÊ ’F =¸È­Yåha.°É3‘ÇŒ·æ@üÈ  (ªšn£©d·P¬ˆ¥™ H0ÊÊH þ"­ÐF³o´%Ü+©ˆý hÚÍö‹håþðçëÞ£ÔFtùþíC¢’l9ìÄP…Q@Q@Q@Cwÿsÿ×6þU5Cwÿsÿ×6þTKCÿÿ®‡ù Ó¬Íþ<[þºä+N€ (¢€)g'öØÔüÆßö³”ãÝ»?Z¤|;Ù â@ßoûx|¿¿~1éÚ¶¨  Èôƒ¥=Õµä±GrâI¡ ¥Y€ ‘Æ@þ”í[IM^Ùí§y)VCl´§¨o~~•£EfE£›mB{›[É¡Šá•æ„!˜2 gúV5߇§²d62Í-¤ZšÏäàb%%‹õ ÇÔõ®²ŠÀ>QåªßL±E{öØãÚ¸X’ î98ú÷«–zA±»™à¼•m¥•¦6ûT€íÉÁÆ@'œzÖ‹‡b·³Ó K‰3§ÌeF |äîÈ#þj[-û>âo³^J¶’ÊÓbª@cÉÁ#!O¥jÑ@º^’ÚTkw³IiD0¸_Û±’oëQO C3ß…žXáÔ1ö˜×7$Ùèy­z(K²– {U¸ò|»gH!‡ý ŠÙ z|Øü+fŠ(¢Š(“¨“ýÓü«/AÿW?ÔZÔ›ýDŸîŸåYzú¹þ£úнQ@Q@Q@Q@rÞ ñívt]¼ }¢àr-”ÿ7=‡ãSø›[šÐÃ¥éä FéK#"ÇÏ¿`=iº&—hA27ÌÌç,Ìz±=É iZ6Vê„gq䳬ǹ5°€(¨çmHÞŠh„~mÄ— ÓqÛõ­*†Ö?*Ù¾2~µ5QEdøƒ_µðöžn'ùän"ˆ\ÿAêkǵvÿ]ºóo&ʃòF8DúëSø§Y}o]žpù ŽžŽÿ_ƱhÓ^Ébgx¢vœ>§ü;UÍWžÓP‹ÍžFŽ×Vb@¿áY4ª¬î¨ŠY˜àÔšö m*öèŽ ‰¸­iEáyúë„_d¿Â·¬hôëd¸9™bA!ÿk?­X  TðÍšžI˜ý@þ•çíßN½¶³Ecjéæ«°-’Ï·{ fëzŽ¿bm/£%AÊ:œ2PhÎ>ê²E«\iŽÿ¹ž3")=qÓê3ù õšòïøVÚ¾“{öí+R‰Þ Éå*äáôç§^õÞøZ‹]ÒÒéË•NÉâ=cqÔP¥Q@µBÞãOÑ´é’Ö]AŠ›§82ìyëô®;\ðŽ«ákîc»ŠêÎ|Gs'ÙÔÈ ž¿6HîçéúÞ‡c¯Ø›[ØÉ”‘xhϨ5Êßx[ħɧKâHŸJ o{ˆñ @sÉïŒw4ÓxoK‡GÐm­-îâ0»Ä­ÆíÜäÚ֮ o^jA4¡—Éb“P~5׎¿=k©ðö“.‹¤¥¤×’Ý˸»Ë!'“ØgµjQEU=WþA³~ÌUʧªÿÈ6oÃùŠ4¯ùÃøÿ3W*ž•ÿ Øæj埜ñk÷:˜¥&·Ž-˜ä,sŸøhQ@ô>ž3L¶™,¯šéŽÓ‡¤;}¾ÿéO:hµ&[k¨/.ÍÃG2ž…Tc#¡AÏ5½Eb\hRMá'Ñ~ÖYÚ(M 'éøv§\è†ëY¶Ô[ÉŠh\: C²c˜Û³{úvï[4PEÖ•r5ÅÕlg‰$x<‰£™IVPr`ðFOÖ¡“AŸÌÔü›¤ ©Æ«1)Ìm·ieî;‡¹é[´P>þÂjC0Hn4䱈’U†O¯Þ•S×´Y¡Óµ ¨ÜH?²>Éå…;‰]ÄõÏJë( jçAºÔãk¿µ,-h¶ðª.àÍ“Á;±Ž1ëM¸÷qyÖÈ'¼†éV8ʪl+•Çü­tôP]î—%Ưo|’ ÛËVøöñßÖªÚèÚ®ƒ‰ÑŽ›FùR7îM¹+zŠã´D¸ƒT· gÚ´²ìC½f²VËa’ F3‘Œó]³a>£m pKçY$RRUÊ6;wü+FŠÌдÉ4›µ’Häýô’+F»F‹cºÖPmCþAó»Uô_øðÿŸéV5ùÍþíWÑãÃþ¥hÑEQEQET7ñç?ýsoåST7ñç?ýsoå@´?øñoúè«w×-kjÒ¨‡#çKå ú¶?#U4?øñoúè©5=7ûG쬷A%´Âde‚pG ðx&€(Ùx•/íôÿ&ßý&÷ÍÛIò¨ŒÄ°28ãœÓŽ«¨ÿoÚißbCÛ¼ÓfbJ€áx;yàç¶sÛ^ŽÞ 1ìÉqg$¯ ûTœHIeaŒsíÚ­É£³ê×Ë}2ÜCDïµO˜ŒAÆ1È(?IÖÁ±Ó­ãIfººyö‰çÜTFì³ã¦pž•$~'3Ü[ÛCe›‰.¥´‘\äwpr1ÎJ–ÛÃpÚ-£Cq šÒI^)呉eaÜdût$>·‚êÒáeÉòÜ1lfY$R¤ŸÀô‚€+ÿÂN‘éŸj¹`e¼k97Kû´e$n/ŽޏêEK®^´>¹½pèV çìÓàã#î¾==ªX4aoÌ1ÜnK‹™.d]NòIR;ŒŸcÅ$š³øi´5’D¢1ï,9Ïóí@_ø‚{YõHâ±IWNn$fŸnå œ´óòŸñ%γç0³´€Éq%§Ú[{ìXÐð2@<“œ;•$ºS¶ªÒNäê6ëo&@Vÿ1¨ÿáU¸Žâ;Éc—ì¢ÒVU¼AÐàôaÏ?¥dèz¯•š÷“\4_´Èí.S Wq+Ž[ž¹õ­ÛmFæâÑ.Í¢%¼yÈÍ8ÈÎ 1ÁÎA8ÁüjÚøfÞÝmÕæycŠÉ¬Y ;xͼ6«+Iæ•|¶ìcƒýßëíV›HŽMV Bi7Ën_Ê;`´‘Õ@<Ï4’éõv¿ŽæXŒ°ˆf@!ÔGQÇS@º~¹3ZéÖÖ¯<—V&u{‹žFÝ¿y¶œ“»®? [ •±š{?³ÛÞ[Kpæî*#ÆàF:`äOÐU½?@ŽÂ[ÿb¶kdJò}þQQÁá›h"Ó"HñØÃ$\æ#€?—je§ˆ¥¿2-¦Ÿç?ÙÌAfI'ˆÙ±…~øæ·”’ŠYv±Œç²­t{‹M9¬£Õnv,~T U7D;ã’ª€ª*–,@ÁcÔûÐfÿQ'û§ùV^ƒþ®¨þµ©7ú‰?Ý?ʲôõsýGõ  z(¢€ (¢€ (¢€ (¤f¥˜€ d“ØP¦§ö—µÛæËE‘ÚÇžÛæ÷ÑÍu…ác¡-܃ÞÍ%Ëû–cÓ»@Cr7Dûìõ©ª)y–þÑ?¡ÿ–Š( ³µû“gáýBu8d·}§ß­h×?ãy<¯ê<•Eëêê(Åjö‘gþ ¶²1Q"¶v gúUÑÐdk–¬N2Å0Gõ  Ý?Àw×éno£Elüá éÇó¯AÐ|¤hs¥×ï.®åd”ð§Ô(ãóÍ'†cݨ»ÿv3ù’+« Š( Š( ¸}iÏ„Y=œr§óÅh«+ u!•†A¥®ῈòÁô{¦ÿJ³û›º´}1ø>˜®ê€ ä¾#Z]]øJ_²–"Y•Š0"Aü+­¦L]`Æ¡Ü)*§¹ÇJÅðíÖ†,îlÄVvr.@‘‚üÝIêrÍlAsÔ~e¼ñÌ™ÆèÜ0ý+Í|=máýf/µø“PI5̦Òâo% œ^;séZÞ ±°‹ÅÝÆŸìÅX╉BøËm'®óô æŠ( ©ê¿ò ›ðþb®U=WþA³~ÌP¥È6Çùšeþ«ŸsinÐO,·lɈÈç$cŒÓô¯ùÃøÿ3YºÚÍý½ <1îÛ4Ù'!FbaÉâ€'OA65ä6—rùñÍ ª‡‰“ï–bsÛ4¿ð[¼¶Ñ[ÛÜÜ=ͯÚâªòœxŒG_Z͓· ·¹–Iå¹Yb%I•sÕ@ÀÉ5sKÐæ±ºÓæ–hÛìšp²!AùŽTîü—õ  ãñœÖV7‰dká›xUF÷ÀÉêp1Ü“z¥¤ë7A–òæ ›—ŽyÃ,a7*+°ç8±Éíše—†î¬"ÑÚ;˜š}:9!;”í‘ùP ^‹xàkÛy#pβBJ“!È}¹ûË’^´¦úŸ–£Wyñ¤½´MígvàûpTrqϵh%Úý–K‰‘íÒ<–óqÀò ÅS·Ó$‹Ã–úd‚ÞfŠ„ˆJ8PÈ÷ð÷¨mü>‘xzïH32Ãp$U–«tUÏ$zªué$Öíž4¸[±šàUnÒ¤2ŒäpO\u©$×Öê뮐ȵ†{˜dxTùªç¦ p;ÔvÍ5tçžÚIî >M”–˜D#;€ùúÿ³Ó·©©ŸC•´*ÀLžeƒÛ¹l?•Ž=³Šuljmmákk¦ŽÎeŠyW[?{$|æOµC.®ö^$¿†V–X…¼&xÀ,Ò1|…¤/®8Í~–æËY„\"¾¡:ʇiÂm0ïŸÖ™áÉï5‰5X®Ò µŽ!náIØË»poU`ØÇøP‹eloµF¸’fŠÒÖ9Ì ü îÉ žIÇCŒc޵2kö¾|ÑOöþU·ÚËJ£.ì0ICƒU5 æùµ'3Ä}b–Ì0HF²G¨ù¿JšãK1ê¨2‹ˆOki-Âe¤ç ±Ó­íâ’9¢ydg©Hp½Ÿj×¢¹-#Yº´´€MÚœ¶«+Mó®dm¿.9QŒuü+EüIöˆµ†0bÑö¿Î­Œ–Ù¸:‘Þ€7(¬»ÝR{}^ßN·´I¤ž”;Ͱ.Ò8?)õëÿë¬ééçåú{Š˜kbâ[KkK2âæØ]mwرÆqË0’Nèh^Šä4ý~m7ÁuôÁ.[ï“ιØî]¹qÇn>µÖ£‡EqÑ€"€oõº•eè?êçúëZ“¨“ýÓü«/AÿW?ÔZ×¢Š(¢Š(¢Š(¬¿Ì`ðÞ¢ËæDÇ÷˜m_ÔŠÔ®{Æz¤V×(ï]D ¦2v㯺PË;e³²‚Ù>ì1¬cè*jÏÑõ›MnÁ.íX…l€ÊAî­ *'ÿ¨¿ÝcüªZi\¸nàùãü(ÔQY~!Õ—EÐîoxóvÆw<ñü(R¸ß‰WbEmŸžâaÇû*2\WYhÎöp<§24jXããšò߉‡Ú|@–Šr–±GûMÉý6ÐR[Ìmîb˜uÃÀ棤a•ã¯Z÷o ÂæPrPç]%q /V÷ìÀåãa~ÓÚP—XYÍwrá!‰K»JóâlÓk¥-”òb&Q†„Æ}G¯çYÿîu!®-´²È4ö^Á“ܟSŸæ*§Ã¿E¬ë\Ý.ëk0¯·³9?(>ÜùP´WžüGñEö•=®§ÌÐHéçI"õÆH~ æ½ ¸Ïˆ^}kNKÛDÝyjÈ:ÈÇÔu[ðwŠá×ô´3Dš„gd‘î¿£ïüó]Ex7‚ô©u_Ù¢²ÊÞŠ¤Ôà~5î—3 {Y§n‘£9ühÁÓV}Æ3j6Ý"»ínBÇ#ñîö·1^ÚCunŠd‡Ôšù¢)L­+1ÉóMzïÂíhÜéÓé2¶^Øù‘gºÈüþ…@EPšx°k°Ás¨êf„-ã}¨Ïù‚s×ð«ÞÖ5(î­ìõD´µ²¹‡uˆ‚ ©#d¼ŒäjÄÚ®½ h®­öieiæ=Œý7~bŸià$j–÷6œÿf·™g‰0tAöþ~ôÙÑEU=WþA³~ÌUʧªÿÈ6oÃùŠ4¯ùÃøÿ3W*ž•ÿ ØæjåV8ñ¡‰¢s{ö £1Éœ Üôlç¥2/ÙJ-\ E½Ô¦. ’?8œŒàà‘ƒ@ÔVU¿ˆ-.`Ó¦Hæ #Gå+Äîçý“Ó4ý+Z‹W]ðZܤ_0ó%Pr¶Ò¼ÏOzÒ¢²®#³X^FŠuÞ 9Uù~éÈçߥlQYWõ½½âÛ{‰§û:”U!Ÿfür};ôÍYÓu(µ8exã–&†V†HårºõàhåFçTŠÞðZ¥šàÇæùqíÎÜã<‘ŸÃ=* YÛ-ÌŒ²µ½¬¢)çU#c޼äã#8úЭNãR†ÛP³³‘dÝw¸G fTgç©Çªºk–óJà òLâGXÔ(%¶ïäàzdäç¥jQYv> ²Ôn!†×Ìs5»\)+…`¬§<†Õ­7P‡UÓmï "¨q‚½.¡ÿ ù¿Ýªú/üxÀÏô«‡üƒæÿv«è¿ñáÿ?Ò€4h¢Š(¢Š(¢Š*¿øóŸþ¹·ò©ª¿øóŸþ¹·ò  Züx·ýt?ÈUxì&ŸÄ´òÆÑÛMm²>yr7#é¸ ±¡ÿÇ‹×Cü…iÐM†„–7S,îæÖËìj ¹r¤¯Ê)ÒhÜj"òáüÇT‘„ Û_‚¤Ž ŸÔóZ”P~›¦É§ikb/eGŽ) ¨1¨°H÷ÍR“ÃòEpVSóOÇ™ èFÒ§n}s[´„Œ2p=è)ti"ÔòBtyÕEÈØ„JW€Ý>SŽ8ìÖ ‡ÃK¡ ÒßL™n6U#2Œž§µnÒ 2¤ê(ÛñZýƒėìSË4yQÏ™» ÿßgš#ðìQXXZ­ÄŸèwféó1.H#Óç?¥mQ@¬v:”~ {Ø#HÌ—_½†Kueòþéu”`Œ¨o''ñ­«Ý+íZ­ôw2A4 é”îFÆFöÖ… çq@Ãñ-Œës&a½7ð9bå°G§ÌEOmu î-ï%މ<Ùm©ð ‘‘œ ÿJÓ¢€0õ ;¹|Qa<£mf¦)%1øð*¯/ƒ­Z" »ˆbkFµp6±pX±l‘Á,I8ëíŠèÑÖDŒHÈ äZÉm%Ü’Nì×V‹jøa@nG¿ÍQÇáñÖ—ÞKĂ͜(ýäc‘ÁèAä­mQ@Çü!± 5µ]BácfͰªr›‰Gžq×Úµì­o ½¦ºó-ŒQ¤Qú0Îæè1ž8ÉéøV…É¿ÔIþéþU— ÿ«Ÿê?­jMþ¢O÷Oò¬½ý\ÿQýh^Š( Š( Š( ¼ßâÕÞ-ôÛ0ßyÞV_ ÔפW‹üK¿~,hTåmbX×–?ú? ä#–HdY"vGSÊpGã]W…¼gq£Üº_Éqsi'P_s!õþUÉÑ@労+…Bš¥²ïßa\ô­Hg†á7Ã*H¾¨ÀÒ¾y«zf£q¥jÞÛ9Y#lã<0î± ¯6ñýûjZå–…$#®ð;»pàþ=]­æ¹miá㬘Œ"D\òÄ”~µÂxMŸYñúåà,±9`ÄpÒŸð?•zk2E;¨ƒ$öW€êw­¨ê—WœÍ+>`Oò¯^ñ¾£ýŸákœ6$¸ýÂÀºÿ㹯 Š( ›á߉WÃþ$k+§Ûe}…ÜOÿÂ~œ‘øûW¹×Ë—Ñæ0㪚õ‡>=Kø#ÑõI‚Ý Û ®ÖLúÐgâ?[xKkIþIæ†P2coðõ…<8žÒ~Ê%Í#™% z`{*üÚÅ„^G%ʇ³‹Îpr‰Œçò¬Ëxvü…MJ8Ÿû³ƒêxýh  8 ààâ–¼—]ð^§o}.¥áÛ†º·Ëÿ£Ë‡BNqÁäsÚ´|/á R×Q‹Y×ï ) Þ#’mÌOmÇ8ñ öÓJ±°¹¹¸µ¶Ž)nX<Ì£ïóéêMgøÇP‹Lðާ<®04iÏ%˜m~&´.õ[ 8ê7q%¦ÐÂ]Ù ÈÆ:ätÇZðoxÊçÅÚŠÃhôèXù0÷cýö÷þCñ$Ÿ°b|Ìúƒ]w¯‡Œ,'lÏä°õÝÀýp æ-áòcÇV<“VìîÒö ”8xdYêhé:)‘H“B’ÆÛ‘Ô2‘Ü”úãu›T×¼m,‹a—ÚÅDÏ¿žàJži ºYŸM»Aû¹à™‰Ür?*·âm&Öí­µÔ×K¼µ'Ê»$`ÕH$?çYVßô—„°Ü‘!a…|Âàt`xúf€:˪ɦmÖaXï"‘£,¸Ä tq_éZµÏÛ,¡¹òe‡Í@Þ\˵×=ˆìjz*ž«ÿ Ù¿æ*åSÕä7áüÅWüƒaü™«•OJÿl?ó5r€9½OŸÚWî/ Q]‘P'1ΣjÉœò1Ž=E[þÅ—ÎÒ'óËg$’ÍòàHάNXœVÍÍÅá˸ìíìÔ&ÞÞýn£>YÞTHdÁ9ÆyÅiÙiÒZêúÙ‘Z;ÆÂ‚¥P)ý3Z4P9ae׉o¯¡i ›Y&Açà¡+œgåàñ߯Z}·†Ú+M:Â[…{M>q_7]Gcœuížõ§áEÔn¯X\ùV÷Q.èÕyY”GÎzGª9®’ŠÅ$Íý”Ò\#Kk;\NÁÖ;+A–ü…2; KM[±4RGÏ;—…ˆÞOPÁúznÑ@úæ‰ý±åƒå#GƒÀKg;”޽¸ãñéUåðÛ=¶¥b·Yjy>_7]GcœuížõÐQ@>%„OkkknÏúÌ’Ú„¸ §¹è ÎOCߥL4Sk©[ßXÈ¡¢´f9!©ÈèAÏ×=ºÖÅÎZxjm2{I¬n¼pK ­,x»‡.=wžëKBÓ¤Òt[k $YÙ½F23Ç£EVÔ?ä7ûµ_Eÿøþ•cPÿ|ßîÕ}þ«-¾§q¹/mšÊI_’†ÐãŸJm·‡o'ñö¥-îË2ƒ.väG#±ƒî+¹ð×›;k#&²Í%ÔˆFÈÛ,û÷?§Ö©ëÚn¹¢ ;Ë«xïM•-EåƒÂ:÷çöõæ€3áïŠlå?fDoöḠŸÌƒOÿ…y⋸ÞK¢‘IU–}ìÇÐc#ó"½Š)h’XØ2:†R;ƒÒŸ@2êwš­ü©iwq;Çn6"ÊÄ„œÿž)°®¯së^‰ñ+Ã?c¼þÙµOÜNq8î?¯Ðÿ?­yýkd‰ü>š®Y¢fK”ëŽr~gÿ×Y5KÕît©õãbH¤VDœ± “Ðv qðª5O [9–×ýÿà?wÿÅtõâßý aKªÞØkôëš+kH'xžr¡0®[o$íÒµ¶LבÙÙÛ‰gkQtÁäØIÂŒàòyü©ŸðŽÛ„ÔcK²úÕ-XdŠªÊ=ÏÌzÓÓD\Cs ËÇr–ÂÕÜ(!Ðt$zƒÐû÷  Úw‰âÔäAonÁÌÝí‚r…Çb:Õ;}{ÎÕ-5 ]à³}îä‹yeR9÷ 3мž··x ÄÖë±µ`0ÅÄäôläçÞ™…-’`’âI#ŽÅìèØƒŸb09 mïî®üQ¦Èñµ½¼ö2ȱI,7!—gÔõ­}KQþÎ6ºóÍÊ[ýìmÝžzsÓ¥U´ÐšÞúÎé陵í`ku ªCޏïòŒŸÐU­SM]NPÊñIÉQÎ;ÑyâE´Å \5³Üìi@p6¶>b݆*k} ­šõ–ñä7r‰dƬ¤íÚAÝ8qÓ­E†¢³û#X]Km-º<{‚«FmÅH# <Œt  ’›Ëë+9­ÙË•–D˜Ûv’ã¡Ý·?CY±_j+¨I¤ÉR¥½Š<Óù„33 Æ=TñïøW@ŠQK `³u>õ>æj¯Ô´°ˆeEPC€IGMex{Yºûƒkuï¶[“™·1( ÃÇ|Ÿz¼ºñþØ“Oh!$Bò£Gpü¤®1òžGsO·Ð"¶] G<™Ó¢dœÚsUì¼.¶RÛºßÏ ‚)aEu_¸ç<2NG^ôºˆ¥¼—JXˆ¢Ô¢i"a6æRª m¼Wo4û‹›ø§KÙa‰6f4ba÷|ô&¡·Ð"¶] G<™Ó¢dœÚsZpImhÍs%Ë®s,€nsÎ8ö  袊­¨È>o÷j¾‹ÿð3ý*Æ£ÿ ù¿Ýªú/üxÀÏô  (¢€ (¢€ (¢€ k ’6CÑEbé{™­$á³ÇÔVÕfjv.î.­óæ¯P:Ÿ­z¼R(KƒåÈ8Éè€4覫£Œ£+cšuQEQEQEQEQEQEQEPH$âª\j6ÖëÌ›ûªrh5;“óó8Ú£ëLÑá1X†#™ïõQŠ)µk¡4Ãl ÐA[€t´QEQE¯jcGЯ/Î7C(BÇ…™£\_Å š/ ª)À–彯¿öQ@;4²O3Í+—‘س1êIêi”Q@Q@t~ð¼ž$Õ6¾ä²‡ <ƒ¿¢sYz.˜úƳk§£m3¸RßÝIü¯~Òô»MÂ;+(„q'æÇ¹'¹4ÆøËÀ¶2híw¥[%½Åªn)À‘\ûã¿zòJúCP¼‹OÓ®nçÇ• lì|Ÿ|Þy&€ (¢€ (¢€ ö_‡6z‹Æ ÝÞ[yªg®3øûWWÑúe·Øô›;\cÉ#ü” ©â]JM#××Ñ%Š?‘œ1 ÔÕ-6fñ_TÎTËwnñ¹ÇÆW8úŒÕ_æ}7OÓU°××ÑDGªç'õÅCjåÛPš=1ñ  ~¾7Þ´ß[ƒo ô(påŠès\—‡ÉÓ|e®é'"9ÊßB;|ßõ ~ÐE1MRxðà:þ@å@¾µ‚úÞ[+´• úÿž ð_h³è¼Ö3Œ…9û:‡ü÷¯}¾F{G(péó©÷×3â­ ?ø|M·À Gî{§ãÛð ­]&ûKü½[KpŸãŽFŽDú`àþ?eº4nÈêU”à‚0A )n€Ÿ¥z¤¾ÅÌl9ÜÅ$ôÇÝ5Óh‘\ëÞ ‡\’Õ¬ôÛ8š;Yv³î/ŽÃùzWŒW¾øcU²»ÐtØã¼‚IÅ´jñ‰`Á@9ÏZÜ¢Š(¢Š(¨náóídˆueãëSQ@:$àÄöíáÈÒµ«P´– ¶Úç9ËüêÍ®­êŒ#“¸nŸ_¢‘YXeH#ÔZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤$(É z¥uª[Û‚„ÙTÿZZœGiåóHz{U>ŒHF?gYÛK}söË¡òUOþµmPEPEPEPEPU.të{£¹Ókÿyx5nŠÇ: çå¸ {¯ÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúz?÷Çÿ^ìúz?÷Çÿ^¶(  ìúy?÷Çÿ^§ƒF¶‰ƒ9iõéùV€¥¢Š(¢Š(¢Š+Žø™i-ׄ‹Ä¥¼‰ÖVÇeÁÿãÕØÒ2«©V© Ž |ÏE{N­ðßDÔ]¥€Ie+sû“”Ïû§úb¹›¯„×Êßèš¼£þš£'òÝ@yEw_ðªuÏùûÓ¿ïãÿñbÛá> Ïþ•©Zƾ±+9ýq@f‰u-–»cs-$s¡ :·=?•ôUrÚ€´d¹•’^Š}BŽŸ­u4Ã|QÔ¯‡á±FÃ]Ëó{¢òRµãõß|W™›_²€Ÿ‘-wîYÿÐEp4QEQEsH¶ûn³ckÚk„Œþ,}^ðþÏíž2²ÊîHwJÞØþú"½Î€9-\ý¿â‰drÙÅ%ܸížõó©|ÂHõÙî¶±pÃéòÕo J—~&×5Y9ó.>ÇÝŒsø”Òxâ/I¨]ÌÃ5Ì’´’6ËäýEKâQý›â­YFÒ)ÎxÃçn~„±ü+_VÝosov¿ÂvŸóùÕØixRö4æHÓÎŒUçÀøÔú}Âëþµ¹È-<*Äú8ëú‚(YYd@Õa‘î+Ÿ³¸þÏÔ$…Ïî‹9íèkGH”µ©…øx[iÒ²õˆöj ¾¡¿§ô GâG…|™[\³OÝÈÒPºßßü{ûýkÎ äúNž;ë7²¹PãiR­ÈuéŠñßøjO êÆ5ÜÖse séÝO¸ ôÿ_Z[˜íµ]ìBN=˜ò?<{WM¡á-B(¥Ô¼<,|Ñ”‘7Gs”®çŠóÊ÷AÇ€ôø§‰%„™GPÀþñ»ȵÑ4ó}ÄZ•’“Æ%EùçWľ1ÓG˜¯e®[Ž»1¸ü8þufóÀz<ò¬Äútç?¼³§éÓLUáÏiò†²Ö-.Ô uŒþiÉüèkDñEžµ#Ûl–Öú1ûË[…Úãéê+n¹ ]^¾ñ†««ÿgCö0ÁE¦âòdc Ooþ½uôQEU+*Úà–ÚQtãô«´P9ÐFx¹#þÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûþžýñÿ×£ûþžýñÿ×­Š(ûw¹?÷Çÿ^¬Ûé6ÐÄý®Ÿ•_¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<«âÅŒ«©XêÌO“ŸFŸ×wèkÎëèÝSK´Ö,$²½ˆI þObc^a«|-ÔmËI¦\%Ü}£‘ÿÀþ”ÀÑW/´CL}—ÖsÛž€È„ô= S ŠžÖÊêú_*ÒÚYäþìHXþ•Üøwá¥åÌÉq¬ÿ£ÛƒŸ![.þÇë@Ÿ 4V‚ÖçW™H3þêÿt±üN?*ï¯n>ÉaqrF|˜šL}4ø!ŠÚà…8£P¨Š0UÖ¡{ P†!™$¶‘ä©€9M4°øiööm³,3Ï»=\îÿe¬íZ&±øAamÞ,ãýæ2Tm©Å«x/Fð儊חe!“!˺ôÍt6·Œéú%Œ`*>§J¾‹†á@ž»þÐðž›3rL6Ïr¿)þU™à‚lŽ­¡9lØ]7”þy?+ü‰üiß÷Çáùìß­¥ä°é‚ó&™y'â5•Öê[µ»Ÿúh¼ƒùmÓ m—Þ|x×~Ƴµèø†OªŸóùÖÍPÖ#ß§±þãþŸÖ€9è¥xeYá”äV¾¥§Ùø«D’Öa܆êb~ÄžEb×A§éÒZ\ÊѲãuô Õt{Í#S}>æ"&S…ÀÈpzëš÷ ØM¦xZÂÒávL‘’ëèI'­/ˆ<=o¯[.XÁw ÝorŸz6ÿ ÎÑ|GqðÑ<@¢ ExŠn‰r;}}¿ýTÔÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…C)VƒÔ¢tM$¾ã¥Ùõ6éŸåWè Çp HÑQEQ€)ÔQ@Q@-ô­>ÖêK«{+x®$Îù0³×šç|L¢ëž³Ü8šK†›#ùëk‡yF©ãëÉÐnŠÆ²Vÿ¦Žrߦá@<"Æ=gÄÖǢߙ@ÿ?áRøîÖI<=öèúNŸ*]F@ô<þ‡?…&€¾_”òB©$€$žÕÊkš§„u›V³¾Ôí‰S”‘æ½TŠéî­ÖîÒkg$,±´dޏ#Çø#MÓît'·¼Ó,ÞêÊâKiYàRÌAÎI#ß…3Ã'hõDÐo/¡¿ Ùo!mÅÀÚã±Àïúõ®â¨Á£iv³¬öúmœ3/I#U‡â^ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  :ÕÄÖºýŰýüVò<|g àÖ?ƒ´ë5ðÕ…Ä2^_ô‰¤'%¥#æÏÐñøWL@ ‚2Q\œ¾1M)Òµ›Ý:Þf-%¼G)“×o#­/†$û_‰üOx¼Ä×B¬:•?Òºº£¤iš&šd’NKÔ“ëW¨’—þ$ßb—;mõˆ67§š?L©®¶¹¿ØËs »n.ôùî"÷zþ™?€­6þ-OK¶¾‹„ž0øÏLŽGáÒ€-ÑU,uK H9±¼‚à!Ãynn€ ã5;Â!ŸXŽ&“H¿+öµA“ ŸßÇ¡ïõúRÁã{Û˜Mì>º›NÉçÃ(wã©ÙŒÎ·4ÝgIñ%“‹i£vË Œ0¨e?þªÓ†h®`I¡‘dŠE ®§ ƒÞŸ\—„•´Ýg[ÐUÙím$I ÉÎÅq¿Ëõ®¶€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€•]¬0Aî+ð·üK¯5? \³imI<´-éôÏê}+±¬={ÃXšÚîÚñìoí‰òîc]Çiê¤ddP £i²ÁáXõÝ+1jzl’$ê¿vád†ðéô¯KÓ5u]2Þúû¹Ð8ž£ê[BÑ!д•±Úl±yÇ.Ç©Åcx86ûWðó“‹9üÛpOü²~GåÇç@ áŸø”x“XÐb6¶Úún¡Àü hjÞÓµ;v†[+àr.m[c“ïëüꇉ‡ØüWá½F0<ÇœÚ?ûJüË$×[@‡áУ¸"âk››—ß5ÄÇ,ätü?kÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌëÚ>¢º½¾»¢ym{¦‚C…=3ê?ÃÒºj(“³Òu­cZµÕ5å‚Ú+2ZÞÎÝóŸâcù~]»õ”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/index.rst0000644000000000000000000002106100000000000025401 0ustar00rootroot00000000000000.. _style_guide: ******************* Ansible style guide ******************* Welcome to the Ansible style guide! To create clear, concise, consistent, useful materials on docs.ansible.com, follow these guidelines: .. contents:: :local: Linguistic guidelines ===================== We want the Ansible documentation to be: * clear * direct * conversational * easy to translate We want reading the docs to feel like having an experienced, friendly colleague explain how Ansible works. Stylistic cheat-sheet --------------------- This cheat-sheet illustrates a few rules that help achieve the "Ansible tone": +-------------------------------+------------------------------+----------------------------------------+ | Rule | Good example | Bad example | +===============================+==============================+========================================+ | Use active voice | You can run a task by | A task can be run by | +-------------------------------+------------------------------+----------------------------------------+ | Use the present tense | This command creates a | This command will create a | +-------------------------------+------------------------------+----------------------------------------+ | Address the reader | As you expand your inventory | When the number of managed nodes grows | +-------------------------------+------------------------------+----------------------------------------+ | Use standard English | Return to this page | Hop back to this page | +-------------------------------+------------------------------+----------------------------------------+ | Use American English | The color of the output | The colour of the output | +-------------------------------+------------------------------+----------------------------------------+ Header case ----------- Headers should be written in sentence case. For example, this section's title is ``Header case``, not ``Header Case`` or ``HEADER CASE``. Avoid using Latin phrases ------------------------- Latin words and phrases like ``e.g.`` or ``etc.`` are easily understood by English speakers. They may be harder to understand for others and are also tricky for automated translation. Use the following English terms in place of Latin terms or abbreviations: +-------------------------------+------------------------------+ | Latin | English | +===============================+==============================+ | i.e | in other words | +-------------------------------+------------------------------+ | e.g. | for example | +-------------------------------+------------------------------+ | etc | and so on | +-------------------------------+------------------------------+ | via | by/ through | +-------------------------------+------------------------------+ | vs./versus | rather than/against | +-------------------------------+------------------------------+ reStructuredText guidelines =========================== The Ansible documentation is written in reStructuredText and processed by Sphinx. We follow these technical or mechanical guidelines on all rST pages: Header notation --------------- `Section headers in reStructuredText `_ can use a variety of notations. Sphinx will 'learn on the fly' when creating a hierarchy of headers. To make our documents easy to read and to edit, we follow a standard set of header notations. We use: * ``###`` with overline, for parts: .. code-block:: rst ############### Developer guide ############### * ``***`` with overline, for chapters: .. code-block:: rst ******************* Ansible style guide ******************* * ``===`` for sections: .. code-block:: rst Mechanical guidelines ===================== * ``---`` for subsections: .. code-block:: rst Internal navigation ------------------- * ``^^^`` for sub-subsections: .. code-block:: rst Adding anchors ^^^^^^^^^^^^^^ * ``"""`` for paragraphs: .. code-block:: rst Paragraph that needs a title """""""""""""""""""""""""""" Syntax highlighting - Pygments ------------------------------ The Ansible documentation supports a range of `Pygments lexers `_ for `syntax highlighting `_ to make our code examples look good. Each code-block must be correctly indented and surrounded by blank lines. The Ansible documentation allows the following values: * none (no highlighting) * ansible-output (a custom lexer for Ansible output) * bash * console * csharp * ini * json * powershell * python * rst * sh * shell * shell-session * text * yaml * yaml+jinja For example, you can highlight Python code using following syntax: .. code-block:: rst .. code-block:: python def my_beautiful_python_code(): pass Internal navigation ------------------- `Anchors (also called labels) and links `_ work together to help users find related content. Local tables of contents also help users navigate quickly to the information they need. All internal links should use the ``:ref:`` syntax. Every page should have at least one anchor to support internal ``:ref:`` links. Long pages, or pages with multiple levels of headers, can also include a local TOC. .. _adding_anchors_rst: Adding anchors ^^^^^^^^^^^^^^ * Include at least one anchor on every page * Place the main anchor above the main header * If the file has a unique title, use that for the main page anchor:: .. _unique_page:: * You may also add anchors elsewhere on the page Adding internal links ^^^^^^^^^^^^^^^^^^^^^ * All internal links must use ``:ref:`` syntax. These links both point to the anchor defined above: .. code-block:: rst :ref:`unique_page` :ref:`this page ` The second example adds custom text for the link. Adding links to modules and plugins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ansible 2.10 and later require the extended Fully Qualified Collection Name (FQCN) as part of the links: .. code-block:: text ansible_collections. + FQCN + _module For example: .. code-block:: rst :ref:`ansible.builtin.first_found lookup plugin ` displays as :ref:`ansible.builtin.first_found lookup plugin `. Modules require different suffixes from other plugins: * Module links use this extended FQCN module name with ``_module`` for the anchor. * Plugin links use this extended FQCN plugin name with the plugin type (``_connection`` for example). .. code-block:: rst :ref:`arista.eos.eos_config ` :ref:`kubernetes.core.kubectl connection plugin ` .. note:: ``ansible.builtin`` is the FQCN for modules included in ``ansible.base``. Documentation links are the only place you prepend ``ansible_collections`` to the FQCN. This is used by the documentation build scripts to correctly fetch documentation from collections on Ansible Galaxy. .. _local_toc: Adding local TOCs ^^^^^^^^^^^^^^^^^ The page you're reading includes a `local TOC `_. If you include a local TOC: * place it below, not above, the main heading and (optionally) introductory text * use the ``:local:`` directive so the page's main header is not included * do not include a title The syntax is: .. code-block:: rst .. contents:: :local: More resources ============== These pages offer more help with grammatical, stylistic, and technical rules for documentation. .. toctree:: :maxdepth: 1 basic_rules voice_style trademarks grammar_punctuation spelling_word_choice search_hints resources .. seealso:: :ref:`community_documentation_contributions` How to contribute to the Ansible documentation :ref:`testing_documentation_locally` How to build the Ansible documentation `irc.libera.chat `_ #ansible-docs IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/resources.rst0000644000000000000000000000076300000000000026312 0ustar00rootroot00000000000000Resources ^^^^^^^^^ * Follow the style of the :ref:`Ansible Documentation` * Ask for advice on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) * Review these online style guides: * `AP Stylebook `_ * `Chicago Manual of Style `_ * `Strunk and White's Elements of Style `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/search_hints.rst0000644000000000000000000001004200000000000026741 0ustar00rootroot00000000000000 .. _search_hints: Writing documentation so search can find it ------------------------------------------- One of the keys to writing good documentation is to make it findable. Readers use a combination of internal site search and external search engines such as Google or duckduckgo. To ensure Ansible documentation is findable, you should: #. Use headings that clearly reflect what you are documenting. #. Use numbered lists for procedures or high-level steps where possible. #. Avoid linking to github blobs where possible. Using clear headings in documentation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We all use simple English when we want to find something. For example, the title of this page could have been any one of the following: * Search optimization * Findable documentation * Writing for findability What we are really trying to describe is - how do I write documentation so search engines can find my content? That simple phrase is what drove the title of this section. When you are creating your headings for documentation, spend some time to think about what you would type in a search box to find it, or more importantly, how someone less familiar with Ansible would try to find that information. Your heading should be the answer to that question. One word of caution - you do want to limit the size of your headings. A full heading such as `How do I write documentation so search engines can find my content?` is too long. Search engines would truncate anything over 50 - 60 characters. Long headings would also wrap on smaller devices such as a smart phone. Using numbered lists for `zero position` snippets ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Google can optimize the search results by adding a `feature snippet `_ at the top of the search results. This snippet provides a small window into the documentation on that first search result that adds more detail than the rest of the search results, and can occasionally answer the reader's questions right there, or at least verify that the linked page is what the reader is looking for. Google returns the feature snippet in the form of numbered steps. Where possible, you should add a numbered list near the top of your documentation page, where appropriate. The steps can be the exact procedure a reader would follow, or could be a high level introduction to the documentation topic, such as the numbered list at the top of this page. Problems with github blobs on search results ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Search engines do not typically return github blobs in search results, at least not in higher ranked positions. While it is possible and sometimes necessary to link to github blobs from documentation, the better approach would be to copy that information into an .rst page in Ansible documentation. Other search hints ^^^^^^^^^^^^^^^^^^ While it may not be possible to adapt your documentation to all search optimizations, keep the following in mind as you write your documentation: * **Search engines don't parse beyond the `#` in an html page.** So for example, all the subheadings on this page are appended to the main page URL. As such, when I search for 'Using number lists for zero position snippets', the search result would be a link to the top of this page, not a link directly to the subheading I searched for. Using :ref:`local TOCs ` helps alleviate this problem as the reader can scan for the header at top of the page and click to the section they are looking for. For critical documentation, consider creating a new page that can be a direct search result page. * **Make your first few sentences clearly describe your page topic.** Search engines return not just the URL, but a short description of the information at the URL. For Ansible documentation, we do not have description metadata embedded on each page. Instead, the search engines return the first couple of sentences (140 characters) on the page. That makes your first sentence or two very important to the reader who is searching for something in Ansible. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/spelling_word_choice.rst0000644000000000000000000002626400000000000030466 0ustar00rootroot00000000000000Spelling - Word Usage - Common Words and Phrases to Use and Avoid ----------------------------------------------------------------- Acronyms ^^^^^^^^ Always uppercase. An acronym is a word formed from the initial letters of a name, such as ROM for Read-only memory, SaaS for Software as a Service, or by combining initial letters or part of a series of words, such as LILO for LInux LOader. Spell out the acronym before using it in alone text, such as "The Embedded DevKit (EDK)..." Applications ^^^^^^^^^^^^ When used as a proper name, use the capitalization of the product, such as GNUPro or Source-Navigator. When used as a command, use lowercase as appropriate, such as "To start GCC, type ``gcc``." .. note:: "vi" is always lowercase. As ^^ This is often used to mean "because", but has other connotations, for example, parallel or simultaneous actions. If you mean "because", say "because". Asks for ^^^^^^^^ Use "requests" instead. Assure/Ensure/Insure ^^^^^^^^^^^^^^^^^^^^ Assure implies a sort of mental comfort. As in "I assured my husband that I would eventually bring home beer." Ensure means "to make sure." Insure relates to monetary insurance. Back up ^^^^^^^ This is a verb. You "back up" files; you do not "backup" files. Backup ^^^^^^ This is a noun. You create "backup" files; you do not create "back up" files. Backward ^^^^^^^^ Correct. Avoid using backwards unless you are stating that something has "backwards compatibility." Backwards compatibility ^^^^^^^^^^^^^^^^^^^^^^^ Correct as is. By way of ^^^^^^^^^ Use "using" instead. Can/May ^^^^^^^ Use "can" to describe actions or conditions that are possible. Use "may" only to describe situations where permission is being given. If either "can," "could," or "may" apply, use "can" because it's less tentative. CD or cd ^^^^^^^^ When referring to a compact disk, use CD, such as "Insert the CD into the CD-ROM drive." When referring to the change directory command, use cd. CD-ROM ^^^^^^ Correct. Do not use "cdrom," "CD-Rom," "CDROM," "cd-rom" or any other variation. When referring to the drive, use CD-ROM drive, such as "Insert the CD into the CD-ROM drive." The plural is "CD-ROMs." Command line ^^^^^^^^^^^^ Correct. Do not use "command-line" or "commandline" as a noun. If used as an adjective, "command-line" is appropriate, for example "command-line arguments". Use "command line" to describes where to place options for a command, but not where to type the command. Use "shell prompt" instead to describe where to type commands. The line on the display screen where a command is expected. Generally, the command line is the line that contains the most recently displayed command prompt. Daylight saving time (DST) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Correct. Do not use daylight savings time. Daylight Saving Time (DST) is often misspelled "Daylight Savings", with an "s" at the end. Other common variations are "Summer Time"and "Daylight-Saving Time". (https://www.timeanddate.com/time/dst/daylight-savings-time.html) Download ^^^^^^^^ Correct. Do not use "down load" or "down-load." e.g. ^^^^ Spell it out: "For example." Failover ^^^^^^^^ When used as a noun, a failover is a backup operation that automatically switches to a standby database, server or network if the primary system fails or is temporarily shut down for servicing. Failover is an important fault tolerance function of mission-critical systems that rely on constant accessibility. Failover automatically and transparently to the user redirects requests from the failed or down system to the backup system that mimics the operations of the primary system. Fail over ^^^^^^^^^ When used as a verb, fail over is two words since there can be different tenses such as failed over. Fewer ^^^^^ Fewer is used with plural nouns. Think things you could count. Time, money, distance, and weight are often listed as exceptions to the traditional "can you count it" rule, often thought of a singular amounts (the work will take less than 5 hours, for example). File name ^^^^^^^^^ Correct. Do not use "filename." File system ^^^^^^^^^^^ Correct. Do not use "filesystem." The system that an operating system or program uses to organize and keep track of files. For example, a hierarchical file system is one that uses directories to organize files into a tree structure. Although the operating system provides its own file management system, you can buy separate file management systems. These systems interact smoothly with the operating system but provide more features, such as improved backup procedures and stricter file protection. For instance ^^^^^^^^^^^^ For example," instead. For further/additional/whatever information ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use "For more information" For this reason ^^^^^^^^^^^^^^^ Use "therefore". Forward ^^^^^^^ Correct. Avoid using "forwards." Gigabyte (GB) ^^^^^^^^^^^^^ 2 to the 30th power (1,073,741,824) bytes. One gigabyte is equal to 1,024 megabytes. Gigabyte is often abbreviated as G or GB. Got ^^^ Avoid. Use "must" instead. High-availability ^^^^^^^^^^^^^^^^^ Correct. Do not use "high availability." Highly available ^^^^^^^^^^^^^^^^ Correct. Do not use highly-available." Hostname ^^^^^^^^ Correct. Do not use host name. i.e. ^^^^ Spell it out: "That is." Installer ^^^^^^^^^ Avoid. Use "installation program" instead. It's and its ^^^^^^^^^^^^ "It's" is a contraction for "it is;" use "it is" instead of "it's." Use "its" as a possessive pronoun (for example, "the store is known for its low prices"). Less ^^^^ Less is used with singular nouns. For example "View less details" wouldn't be correct but "View less detail" works. Use fewer when you have plural nouns (things you can count). Linux ^^^^^ Correct. Do not use "LINUX" or "linux" unless referring to a command, such as "To start Linux, type linux." Linux is a registered trademark of Linus Torvalds. Login ^^^^^ A noun used to refer to the login prompt, such as "At the login prompt, enter your username." Log in ^^^^^^ A verb used to refer to the act of logging in. Do not use "login," "loggin," "logon," and other variants. For example, "When starting your computer, you are requested to log in..." Log on ^^^^^^ To make a computer system or network recognize you so that you can begin a computer session. Most personal computers have no log-on procedure -- you just turn the machine on and begin working. For larger systems and networks, however, you usually need to enter a username and password before the computer system will allow you to execute programs. Lots of ^^^^^^^ Use "Several" or something equivalent instead. Make sure ^^^^^^^^^ This means "be careful to remember, attend to, or find out something." For example, "...make sure that the rhedk group is listed in the output." Try to use verify or ensure instead. Manual/man page ^^^^^^^^^^^^^^^ Correct. Two words. Do not use "manpage" MB ^^ (1) When spelled MB, short for megabyte (1,000,000 or 1,048,576 bytes, depending on the context). (2) When spelled Mb, short for megabit. MBps ^^^^ Short for megabytes per second, a measure of data transfer speed. Mass storage devices are generally measured in MBps. MySQL ^^^^^ Common open source database server and client package. Do not use "MYSQL" or "mySQL." Need to ^^^^^^^ Avoid. Use "must" instead. Read-only ^^^^^^^^^ Correct. Use when referring to the access permissions of files or directories. Real time/real-time ^^^^^^^^^^^^^^^^^^^ Depends. If used as a noun, it is the actual time during which something takes place. For example, "The computer may partly analyze the data in real time (as it comes in) -- R. H. March." If used as an adjective, "real-time" is appropriate. For example, "XEmacs is a self-documenting, customizable, extensible, real-time display editor." Refer to ^^^^^^^^ Use to indicate a reference (within a manual or website) or a cross-reference (to another manual or documentation source). See ^^^ Don't use. Use "Refer to" instead. Since ^^^^^ This is often used to mean "because", but "since" has connotations of time, so be careful. If you mean "because", say "because". Tells ^^^^^ Use "Instructs" instead. That/which ^^^^^^^^^^ "That" introduces a restrictive clause-a clause that must be there for the sentence to make sense. A restrictive clause often defines the noun or phrase preceding it. "Which" introduces a non-restrictive, parenthetical clause-a clause that could be omitted without affecting the meaning of the sentence. For example: The car was travelling at a speed that would endanger lives. The car, which was traveling at a speed that would endanger lives, swerved onto the sidewalk. Use "who" or "whom," rather than "that" or "which," when referring to a person. Then/than ^^^^^^^^^ "Then" refers to a time in the past or the next step in a sequence. "Than" is used for comparisons. .. image:: images/thenvsthan.jpg Third-party ^^^^^^^^^^^ Correct. Do not use "third party". Troubleshoot ^^^^^^^^^^^^ Correct. Do not use "trouble shoot" or "trouble-shoot." To isolate the source of a problem and fix it. In the case of computer systems, the term troubleshoot is usually used when the problem is suspected to be hardware -related. If the problem is known to be in software, the term debug is more commonly used. UK ^^ Correct as is, no periods. UNIX® ^^^^^ Correct. Do not use "Unix" or "unix." UNIX® is a registered trademark of The Open Group. Unset ^^^^^ Don't use. Use Clear. US ^^ Correct as is, no periods. User ^^^^ When referring to the reader, use "you" instead of "user." For example, "The user must..." is incorrect. Use "You must..." instead. If referring to more than one user, calling the collection "users" is acceptable, such as "Other users may wish to access your database." Username ^^^^^^^^ Correct. Do not use "user name." View ^^^^ When using as a reference ("View the documentation available online."), do not use View. Use "Refer to" instead. Within ^^^^^^ Don't use to refer to a file that exists in a directory. Use "In". World Wide Web ^^^^^^^^^^^^^^ Correct. Capitalize each word. Abbreviate as "WWW" or "Web." Webpage ^^^^^^^ Correct. Do not use "web page" or "Web page." Web server ^^^^^^^^^^ Correct. Do not use "webserver". For example, "The Apache HTTP Server is the default Web server..." Website ^^^^^^^ Correct. Do not use "web site" or "Web site." For example, "The Ansible website contains ..." Who/whom ^^^^^^^^ Use the pronoun "who" as a subject. Use the pronoun "whom" as a direct object, an indirect object, or the object of a preposition. For example: Who owns this? To whom does this belong? Will ^^^^ Do not use future tense unless it is absolutely necessary. For instance, do not use the sentence, "The next section will describe the process in more detail." Instead, use the sentence, "The next section describes the process in more detail." Wish ^^^^ Use "need" instead of "desire" and "wish." Use "want" when the reader's actions are optional (that is, they may not "need" something but may still "want" something). x86 ^^^ Correct. Do not capitalize the "x." x86_64 ^^^^^^ Do not use. Do not use "Hammer". Always use "AMD64 and Intel® EM64T" when referring to this architecture. You ^^^ Correct. Do not use "I," "he," or "she." You may ^^^^^^^ Try to avoid using this. For example, "you may" can be eliminated from this sentence "You may double-click on the desktop..." ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/trademarks.rst0000644000000000000000000001300400000000000026425 0ustar00rootroot00000000000000 Trademark Usage --------------- Why is it important to use the TM, SM, and ® for our registered marks? Before a trademark is registered with the United States Patent and Trademark Office it is appropriate to use the TM or SM symbol depending whether the product is for goods or services. It is important to use the TM or SM as it is notification to the public that Ansible claims rights to the mark even though it has not yet been registered. Once the trademark is registered, it is appropriate to use the symbol in place of the TM or SM. The symbol designation must be used in conjunction with the trademark if Ansible is to fully protect its rights. If we don't protect these marks, we run the risk of losing them in the way of Aspirin or Trampoline or Escalator. General Rules: ^^^^^^^^^^^^^^ Trademarks should be used on 1st references on a page or within a section. Use Red Hat® Ansible® Automation Platform or Ansible®, on first reference when referring to products. Use "Ansible" alone as the company name, as in "Ansible announced quarterly results," which is not marked. Also add the trademark disclaimer. * When using Ansible trademarks in the body of written text, you should use the following credit line in a prominent place, usually a footnote. For Registered Trademarks: - [Name of Trademark] is a registered trademark of Red Hat, Inc. in the United States and other countries. For Unregistered Trademarks (TMs/SMs): - [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries. For registered and unregistered trademarks: - [Name of Trademark] is a registered trademark and [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries. Guidelines for the proper use of trademarks: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Always distinguish trademarks from surround text with at least initial capital letters or in all capital letters. Always use proper trademark form and spelling. Never use a trademark as a noun. Always use a trademark as an adjective modifying the noun. Correct: Red Hat® Ansible® Automation Platform system performance is incredible. Incorrect: Ansible's performance is incredible. Never use a trademark as a verb. Trademarks are products or services, never actions. Correct: "Orchestrate your entire network using Red Hat® Ansible® Automation Platform." Incorrect: "Ansible your entire network." Never modify a trademark to a plural form. Instead, change the generic word from the singular to the plural. Correct: "Corporate demand for Red Hat® Ansible® Automation Platform software is surging." Incorrect: "Corporate demand for Ansible is surging." Never modify a trademark from its possessive form, or make a trademark possessive. Always use it in the form it has been registered. Never translate a trademark into another language. Never use trademarks to coin new words or names. Never use trademarks to create a play on words. Never alter a trademark in any way including through unapproved fonts or visual identifiers. Never abbreviate or use any Ansible trademarks as an acronym. The importance of Ansible trademarks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The Ansible trademark and the "A" logo in a shaded circle are our most valuable assets. The value of these trademarks encompass the Ansible Brand. Effective trademark use is more than just a name, it defines the level of quality the customer will receive and it ties a product or service to a corporate image. A trademark may serve as the basis for many of our everyday decisions and choices. The Ansible Brand is about how we treat customers and each other. In order to continue to build a stronger more valuable Brand we must use it in a clear and consistent manner. The mark consists of the letter "A" in a shaded circle. As of 5/11/15, this was a pending trademark (registration in process). Common Ansible Trademarks ^^^^^^^^^^^^^^^^^^^^^^^^^ * Ansible® Other Common Trademarks and Resource Sites: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Linux is a registered trademark of Linus Torvalds. - UNIX® is a registered trademark of The Open Group. - Microsoft, Windows, Vista, XP, and NT are registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/en-us.aspx - Apple, Mac, Mac OS, Macintosh, Pages and TrueType are either registered trademarks or trademarks of Apple Computer, Inc. in the United States and/or other countries. https://www.apple.com/legal/intellectual-property/trademark/appletmlist.html - Adobe, Acrobat, GoLive, InDesign, Illustrator, PostScript , PhotoShop and the OpenType logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. https://www.adobe.com/legal/permissions/trademarks.html - Macromedia and Macromedia Flash are trademarks of Macromedia, Inc. https://www.adobe.com/legal/permissions/trademarks.html - IBM is a registered trademark of International Business Machines Corporation. https://www.ibm.com/legal/us/en/copytrade.shtml - Celeron, Celeron Inside, Centrino, Centrino logo, Core Inside, Intel Core, Intel Inside, Intel Inside logo, Itanium, Itanium Inside, Pentium, Pentium Inside,VTune, Xeon, and Xeon Inside are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. https://www.intel.com/content/www/us/en/legal/trademarks.html ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/voice_style.rst0000644000000000000000000000315200000000000026620 0ustar00rootroot00000000000000 Voice Style =========== The essence of the Ansible writing style is short sentences that flow naturally together. Mix up sentence structures. Vary sentence subjects. Address the reader directly. Ask a question. And when the reader adjusts to the pace of shorter sentences, write a longer one. - Write how real people speak... - ...but try to avoid slang and colloquialisms that might not translate well into other languages. - Say big things with small words. - Be direct. Tell the reader exactly what you want them to do. - Be honest. - Short sentences show confidence. - Grammar rules are meant to be bent, but only if the reader knows you are doing this. - Choose words with fewer syllables for faster reading and better understanding. - Think of copy as one-on-one conversations rather than as a speech. It's more difficult to ignore someone who is speaking to you directly. - When possible, start task-oriented sentences (those that direct a user to do something) with action words. For example: Find software... Contact support... Install the media.... and so forth. Active Voice ------------ Use the active voice ("Start Linuxconf by typing...") rather than passive ("Linuxconf can be started by typing...") whenever possible. Active voice makes for more lively, interesting reading. Also avoid future tense (or using the term "will") whenever possible For example, future tense ("The screen will display...") does not read as well as an active voice ("The screen displays"). Remember, the users you are writing for most often refer to the documentation while they are using the system, not after or in advance of using the system. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/style_guide/why_use.rst0000644000000000000000000000176300000000000025764 0ustar00rootroot00000000000000:orphan: Why Use a Style Guide? """""""""""""""""""""" Style guides are important because they ensure consistency in the content, look, and feel of a book or a website. Remember, a style guide is only useful if it is used, updated, and enforced. Style Guides are useful for engineering-related documentation, sales and marketing materials, support docs, community contributions, and more. As changes are made to the overall Ansible site design, be sure to update this style guide with those changes. Or, should other resources listed below have major revisions, consider including company information here for ease of reference. This style guide incorporates current Ansible resources and information so that overall site and documentation consistency can be met. .. raw:: html
    "If you don't find it in the index, look very carefully through the entire catalogue." ― Sears, Roebuck and Co., 1897 Sears Roebuck & Co. Catalogue .. raw:: html
    ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.660559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/0000755000000000000000000000000000000000000022700 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.945559 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/0000755000000000000000000000000000000000000024207 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/action-plugin-docs.rst0000644000000000000000000000020300000000000030433 0ustar00rootroot00000000000000action-plugin-docs ================== Each action plugin should have a matching module of the same name to provide documentation. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/ansible-doc.rst0000644000000000000000000000017000000000000027117 0ustar00rootroot00000000000000ansible-doc =========== Verifies that ``ansible-doc`` can parse module documentation on all supported Python versions. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/ansible-requirements.rst0000644000000000000000000000030100000000000031071 0ustar00rootroot00000000000000ansible-requirements ==================== ``test/lib/ansible_test/_data/requirements/sanity.import-plugins.txt`` must be an identical copy of ``requirements.txt`` found in the project's root. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/ansible-test-future-boilerplate.rst0000644000000000000000000000033300000000000033142 0ustar00rootroot00000000000000ansible-test-future-boilerplate =============================== The ``_internal`` code for ``ansible-test`` requires the following ``__future__`` import: .. code-block:: python from __future__ import annotations ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/ansible-var-precedence-check.rst0000644000000000000000000000024500000000000032313 0ustar00rootroot00000000000000:orphan: ansible-var-precedence-check ============================ Check the order of precedence for Ansible variables against :ref:`ansible_variable_precedence`. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/azure-requirements.rst0000644000000000000000000000046600000000000030616 0ustar00rootroot00000000000000:orphan: azure-requirements ================== Update the Azure integration test requirements file when changes are made to the Azure packaging requirements file: .. code-block:: bash cp packaging/requirements/requirements-azure.txt test/lib/ansible_test/_data/requirements/integration.cloud.azure.txt ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/bin-symlinks.rst0000644000000000000000000000116100000000000027357 0ustar00rootroot00000000000000bin-symlinks ============ The ``bin/`` directory in Ansible must contain only symbolic links to executable files. These files must reside in the ``lib/ansible/`` or ``test/lib/ansible_test/`` directories. This is required to allow ``ansible-test`` to work with containers and remote hosts when running from an installed version of Ansible. Symlinks for each entry point in ``bin/`` must also be present in ``test/lib/ansible_test/_util/target/injector/``. Each symlink should point to the ``python.py`` script in the same directory. This facilitates running with the correct Python interpreter and enabling code coverage. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/boilerplate.rst0000644000000000000000000000033000000000000027237 0ustar00rootroot00000000000000:orphan: boilerplate =========== Most Python files should include the following boilerplate: .. code-block:: python from __future__ import (absolute_import, division, print_function) __metaclass__ = type ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst0000644000000000000000000000010200000000000026365 0ustar00rootroot00000000000000botmeta ======= Verifies that ``./github/BOTMETA.yml`` is valid. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/changelog.rst0000644000000000000000000000061700000000000026674 0ustar00rootroot00000000000000changelog ========= Basic linting of changelog fragments with `antsibull-changelog lint `_. One or more of the following sections are required: - major_changes - minor_changes - breaking_changes - deprecated_features - removed_features - security_fixes - bugfixes - known_issues New modules and plugins must not be included in changelog fragments. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/compile.rst0000644000000000000000000000010200000000000026362 0ustar00rootroot00000000000000compile ======= See :ref:`testing_compile` for more information. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/configure-remoting-ps1.rst0000644000000000000000000000037700000000000031254 0ustar00rootroot00000000000000configure-remoting-ps1 ====================== The file ``examples/scripts/ConfigureRemotingForAnsible.ps1`` is required and must be a regular file. It is used by external automated processes and cannot be moved, renamed or replaced with a symbolic link. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/deprecated-config.rst0000644000000000000000000000014100000000000030300 0ustar00rootroot00000000000000:orphan: deprecated-config ================= ``DOCUMENTATION`` config is scheduled for removal ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/docs-build.rst0000644000000000000000000000015400000000000026766 0ustar00rootroot00000000000000docs-build ========== Verifies that ``make singlehtmldocs`` in ``docs/docsite/`` completes without errors. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4585562 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/empty-init.rst0000644000000000000000000000060300000000000027037 0ustar00rootroot00000000000000empty-init ========== The ``__init__.py`` files under the following directories must be empty. For some of these (modules and tests), ``__init__.py`` files with code won't be used. For others (module_utils), we want the possibility of using Python namespaces which an empty ``__init__.py`` will allow for. - ``lib/ansible/modules/`` - ``lib/ansible/module_utils/`` - ``test/units/`` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/future-import-boilerplate.rst0000644000000000000000000000410300000000000032061 0ustar00rootroot00000000000000future-import-boilerplate ========================= Most Python files should include the following boilerplate at the top of the file, right after the comment header: .. code-block:: python from __future__ import (absolute_import, division, print_function) This uses Python 3 semantics for absolute vs relative imports, division, and print. By doing this, we can write code which is portable between Python 2 and Python 3 by following the Python 3 semantics. absolute_import --------------- When Python 2 encounters an import of a name in a file like ``import copy`` it attempts to load ``copy.py`` from the same directory as the file is in. This can cause problems if there is a python file of that name in the directory and also a python module in ``sys.path`` with that same name. In that case, Python 2 would load the one in the same directory and there would be no way to load the one on ``sys.path``. Python 3 fixes this by making imports absolute by default. ``import copy`` will find ``copy.py`` from ``sys.path``. If you want to import ``copy.py`` from the same directory, the code needs to be changed to perform a relative import: ``from . import copy``. .. seealso:: * `Absolute and relative imports `_ division -------- In Python 2, the division operator (``/``) returns integer values when used with integers. If there was a remainder, this part would be left off (aka, `floor division`). In Python 3, the division operator (``/``) always returns a floating point number. Code that needs to calculate the integer portion of the quotient needs to switch to using the floor division operator (`//`) instead. .. seealso:: * `Changing the division operator `_ print_function -------------- In Python 2, :func:`python:print` is a keyword. In Python 3, :func:`python3:print` is a function with different parameters. Using this ``__future__`` allows using the Python 3 print semantics everywhere. .. seealso:: * `Make print a function `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/ignores.rst0000644000000000000000000001115500000000000026412 0ustar00rootroot00000000000000ignores ======= Sanity tests for individual files can be skipped, and specific errors can be ignored. When to Ignore Errors --------------------- Sanity tests are designed to improve code quality and identify common issues with content. When issues are identified during development, those issues should be corrected. As development of Ansible continues, sanity tests are expanded to detect issues that previous releases could not. To allow time for existing content to be updated to pass newer tests, ignore entries can be added. New content should not use ignores for existing sanity tests. When code is fixed to resolve sanity test errors, any relevant ignores must also be removed. If the ignores are not removed, this will be reported as an unnecessary ignore error. This is intended to prevent future regressions due to the same error recurring after being fixed. When to Skip Tests ------------------ Although rare, there are reasons for skipping a sanity test instead of ignoring the errors it reports. If a sanity test results in a traceback when processing content, that error cannot be ignored. If this occurs, open a new `bug report `_ for the issue so it can be fixed. If the traceback occurs due to an issue with the content, that issue should be fixed. If the content is correct, the test will need to be skipped until the bug in the sanity test is fixed. Caution should be used when skipping sanity tests instead of ignoring them. Since the test is skipped entirely, resolution of the issue will not be automatically detected. This will prevent prevent regression detection from working once the issue has been resolved. For this reason it is a good idea to periodically review skipped entries manually to verify they are required. Ignore File Location -------------------- The location of the ignore file depends on the type of content being tested. Ansible Collections ^^^^^^^^^^^^^^^^^^^ Since sanity tests change between Ansible releases, a separate ignore file is needed for each Ansible major release. The filename is ``tests/sanity/ignore-X.Y.txt`` where ``X.Y`` is the Ansible release being used to test the collection. Maintaining a separate file for each Ansible release allows a collection to pass tests for multiple versions of Ansible. Ansible ^^^^^^^ When testing Ansible, all ignores are placed in the ``test/sanity/ignore.txt`` file. Only a single file is needed because ``ansible-test`` is developed and released as a part of Ansible itself. Ignore File Format ------------------ The ignore file contains one entry per line. Each line consists of two columns, separated by a single space. Comments may be added at the end of an entry, started with a hash (``#``) character, which can be proceeded by zero or more spaces. Blank and comment only lines are not allowed. The first column specifies the file path that the entry applies to. File paths must be relative to the root of the content being tested. This is either the Ansible source or an Ansible collection. File paths cannot contain a space or the hash (``#``) character. The second column specifies the sanity test that the entry applies to. This will be the name of the sanity test. If the sanity test is specific to a version of Python, the name will include a dash (``-``) and the relevant Python version. If the named test uses error codes then the error code to ignore must be appended to the name of the test, separated by a colon (``:``). Below are some example ignore entries for an Ansible collection:: roles/my_role/files/my_script.sh shellcheck:SC2154 # ignore undefined variable plugins/modules/my_module.py validate-modules:E105 # ignore license check plugins/modules/my_module.py import-3.8 # needs update to support collections.abc on Python 3.8+ It is also possible to skip a sanity test for a specific file. This is done by adding ``!skip`` after the sanity test name in the second column. When this is done, no error code is included, even if the sanity test uses error codes. Below are some example skip entries for an Ansible collection:: plugins/module_utils/my_util.py validate-modules!skip # waiting for bug fix in module validator plugins/lookup/my_plugin.py compile-2.6!skip # Python 2.6 is not supported on the controller Ignore File Errors ------------------ There are various errors that can be reported for the ignore file itself: - syntax errors parsing the ignore file - references a file path that does not exist - references to a sanity test that does not exist - ignoring an error that does not occur - ignoring a file which is skipped - duplicate entries ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/import.rst0000644000000000000000000000515400000000000026260 0ustar00rootroot00000000000000import ====== Ansible allows unchecked imports of some libraries from specific directories, listed at the bottom of this section. Import all other Python libraries in a try/except ImportError block to support sanity tests such as ``validate-modules`` and to allow Ansible to give better error messages to the user. To import a library in a try/except ImportError block: 1. In modules: .. code-block:: python # Instead of 'import another_library', do: import traceback try: import another_library except ImportError: HAS_ANOTHER_LIBRARY = False ANOTHER_LIBRARY_IMPORT_ERROR = traceback.format_exc() else: HAS_ANOTHER_LIBRARY = True # Later in module code: module = AnsibleModule(...) if not HAS_ANOTHER_LIBRARY: # Needs: from ansible.module_utils.basic import missing_required_lib module.fail_json( msg=missing_required_lib('another_library'), exception=ANOTHER_LIBRARY_IMPORT_ERROR) 2. In plugins: .. code-block:: python # Instead of 'import another_library', do: from ansible.module_utils.six import raise_from try: import another_library except ImportError as imp_exc: ANOTHER_LIBRARY_IMPORT_ERROR = imp_exc else: ANOTHER_LIBRARY_IMPORT_ERROR = None # Later in plugin code, for example in __init__ of the plugin: if ANOTHER_LIBRARY_IMPORT_ERROR: raise_from( AnsibleError('another_library must be installed to use this plugin'), ANOTHER_LIBRARY_IMPORT_ERROR) # If you target only newer Python 3 versions, you can also use the # 'raise ... from ...' syntax. Ansible allows the following unchecked imports from these specific directories: * ansible-core: * For ``lib/ansible/modules/`` and ``lib/ansible/module_utils/``, unchecked imports are only allowed from the Python standard library; * For ``lib/ansible/plugins/``, unchecked imports are only allowed from the Python standard library, from dependencies of ansible-core, and from ansible-core itself; * collections: * For ``plugins/modules/`` and ``plugins/module_utils/``, unchecked imports are only allowed from the Python standard library; * For other directories in ``plugins/`` (see `the community collection requirements `_ for a list), unchecked imports are only allowed from the Python standard library, from dependencies of ansible-core, and from ansible-core itself. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/integration-aliases.rst0000644000000000000000000001446500000000000030715 0ustar00rootroot00000000000000integration-aliases =================== Integration tests are executed by ``ansible-test`` and reside in directories under ``test/integration/targets/``. Each test MUST have an ``aliases`` file to control test execution. Aliases are explained in the following sections. Each alias must be on a separate line in an ``aliases`` file. Groups ------ Tests must be configured to run in exactly one group. This is done by adding the appropriate group to the ``aliases`` file. The following are examples of some of the available groups: - ``shippable/posix/group1`` - ``shippable/windows/group2`` - ``shippable/azure/group3`` - ``shippable/aws/group1`` - ``shippable/cloud/group1`` Groups are used to balance tests across multiple CI jobs to minimize test run time. They also improve efficiency by keeping tests with similar requirements running together. When selecting a group for a new test, use the same group as existing tests similar to the one being added. If more than one group is available, select one randomly. Setup ----- Aliases can be used to execute setup targets before running tests: - ``setup/once/TARGET`` - Run the target ``TARGET`` before the first target that requires it. - ``setup/always/TARGET`` - Run the target ``TARGET`` before each target that requires it. Requirements ------------ Aliases can be used to express some test requirements: - ``needs/privileged`` - Requires ``--docker-privileged`` when running tests with ``--docker``. - ``needs/root`` - Requires running tests as ``root`` or with ``--docker``. - ``needs/ssh`` - Requires SSH connections to localhost (or the test container with ``--docker``) without a password. - ``needs/httptester`` - Requires use of the http-test-container to run tests. Dependencies ------------ Some test dependencies are automatically discovered: - Ansible role dependencies defined in ``meta/main.yml`` files. - Setup targets defined with ``setup/*`` aliases. - Symbolic links from one target to a file in another target. Aliases can be used to declare dependencies that are not handled automatically: - ``needs/target/TARGET`` - Requires use of the test target ``TARGET``. - ``needs/file/PATH`` - Requires use of the file ``PATH`` relative to the git root. Skipping -------- Aliases can be used to skip platforms using one of the following: - ``skip/freebsd`` - Skip tests on FreeBSD. - ``skip/osx`` - Skip tests on macOS. - ``skip/rhel`` - Skip tests on RHEL. - ``skip/docker`` - Skip tests when running in a Docker container. Platform versions, as specified using the ``--remote`` option with ``/`` removed, can also be skipped: - ``skip/freebsd11.1`` - Skip tests on FreeBSD 11.1. - ``skip/rhel7.6`` - Skip tests on RHEL 7.6. Windows versions, as specified using the ``--windows`` option can also be skipped: - ``skip/windows/2008`` - Skip tests on Windows Server 2008. - ``skip/windows/2012-R2`` - Skip tests on Windows Server 2012 R2. Aliases can be used to skip Python major versions using one of the following: - ``skip/python2`` - Skip tests on Python 2.x. - ``skip/python3`` - Skip tests on Python 3.x. For more fine grained skipping, use conditionals in integration test playbooks, such as: .. code-block:: yaml when: ansible_distribution in ('Ubuntu') Miscellaneous ------------- There are several other aliases available as well: - ``destructive`` - Requires ``--allow-destructive`` to run without ``--docker`` or ``--remote``. - ``hidden`` - Target is ignored. Usable as a dependency. Automatic for ``setup_`` and ``prepare_`` prefixed targets. Unstable -------- Tests which fail sometimes should be marked with the ``unstable`` alias until the instability has been fixed. These tests will continue to run for pull requests which modify the test or the module under test. This avoids unnecessary test failures for other pull requests, as well as tests on merge runs and nightly CI jobs. There are two ways to run unstable tests manually: - Use the ``--allow-unstable`` option for ``ansible-test`` - Prefix the test name with ``unstable/`` when passing it to ``ansible-test``. Tests will be marked as unstable by a member of the Ansible Core Team. GitHub issues_ will be created to track each unstable test. Disabled -------- Tests which always fail should be marked with the ``disabled`` alias until they can be fixed. Disabled tests are automatically skipped. There are two ways to run disabled tests manually: - Use the ``--allow-disabled`` option for ``ansible-test`` - Prefix the test name with ``disabled/`` when passing it to ``ansible-test``. Tests will be marked as disabled by a member of the Ansible Core Team. GitHub issues_ will be created to track each disabled test. Unsupported ----------- Tests which cannot be run in CI should be marked with the ``unsupported`` alias. Most tests can be supported through the use of simulators and/or cloud plugins. However, if that is not possible then marking a test as unsupported will prevent it from running in CI. There are two ways to run unsupported tests manually: * Use the ``--allow-unsupported`` option for ``ansible-test`` * Prefix the test name with ``unsupported/`` when passing it to ``ansible-test``. Tests will be marked as unsupported by the contributor of the test. Cloud ----- Tests for cloud services and other modules that require access to external APIs usually require special support for testing in CI. These require an additional alias to indicate the required test plugin. Some of the available aliases are: - ``cloud/aws`` - ``cloud/azure`` - ``cloud/cs`` - ``cloud/digitalocean`` - ``cloud/foreman`` - ``cloud/openshift`` - ``cloud/tower`` - ``cloud/vcenter`` Untested -------- Every module and plugin should have integration tests, even if the tests cannot be run in CI. Issues ------ Tests that are marked as unstable_ or disabled_ will have an issue created to track the status of the test. Each issue will be assigned to one of the following projects: - `AWS `_ - `Azure `_ - `Windows `_ - `General `_ Questions --------- For questions about integration tests reach out to @mattclay or @gundalow on GitHub or the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/line-endings.rst0000644000000000000000000000013300000000000027312 0ustar00rootroot00000000000000line-endings ============ All files must use ``\n`` for line endings instead of ``\r\n``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/metaclass-boilerplate.rst0000644000000000000000000000126600000000000031222 0ustar00rootroot00000000000000metaclass-boilerplate ===================== Most Python files should include the following boilerplate at the top of the file, right after the comment header and ``from __future__ import``: .. code-block:: python __metaclass__ = type Python 2 has "new-style classes" and "old-style classes" whereas Python 3 only has new-style classes. Adding the ``__metaclass__ = type`` boilerplate makes every class defined in that file into a new-style class as well. .. code-block:: python from __future__ import absolute_import, division, print_function __metaclass__ = type class Foo: # This is a new-style class even on Python 2 because of the __metaclass__ pass ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-assert.rst0000644000000000000000000000133700000000000026660 0ustar00rootroot00000000000000no-assert ========= Do not use ``assert`` in production Ansible python code. When running Python with optimizations, Python will remove ``assert`` statements, potentially allowing for unexpected behavior throughout the Ansible code base. Instead of using ``assert`` you should utilize simple ``if`` statements, that result in raising an exception. There is a new exception called ``AnsibleAssertionError`` that inherits from ``AnsibleError`` and ``AssertionError``. When possible, utilize a more specific exception than ``AnsibleAssertionError``. Modules will not have access to ``AnsibleAssertionError`` and should instead raise ``AssertionError``, a more specific exception, or just use ``module.fail_json`` at the failure point. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-basestring.rst0000644000000000000000000000103200000000000027510 0ustar00rootroot00000000000000no-basestring ============= Do not use ``isinstance(s, basestring)`` as basestring has been removed in Python3. You can import ``string_types``, ``binary_type``, or ``text_type`` from ``ansible.module_utils.six`` and then use ``isinstance(s, string_types)`` or ``isinstance(s, (binary_type, text_type))`` instead. If this is part of code to convert a string to a particular type, ``ansible.module_utils.common.text.converters`` contains several functions that may be even better for you: ``to_text``, ``to_bytes``, and ``to_native``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-dict-iteritems.rst0000644000000000000000000000052300000000000030301 0ustar00rootroot00000000000000no-dict-iteritems ================= The ``dict.iteritems`` method has been removed in Python 3. There are two recommended alternatives: .. code-block:: python for KEY, VALUE in DICT.items(): pass .. code-block:: python from ansible.module_utils.six import iteritems for KEY, VALUE in iteritems(DICT): pass ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-dict-iterkeys.rst0000644000000000000000000000026400000000000030135 0ustar00rootroot00000000000000no-dict-iterkeys ================ The ``dict.iterkeys`` method has been removed in Python 3. Use the following instead: .. code-block:: python for KEY in DICT: pass ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-dict-itervalues.rst0000644000000000000000000000051700000000000030462 0ustar00rootroot00000000000000no-dict-itervalues ================== The ``dict.itervalues`` method has been removed in Python 3. There are two recommended alternatives: .. code-block:: python for VALUE in DICT.values(): pass .. code-block:: python from ansible.module_utils.six import itervalues for VALUE in itervalues(DICT): pass ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.459556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-get-exception.rst0000644000000000000000000000134600000000000030132 0ustar00rootroot00000000000000no-get-exception ================ We created a function, ``ansible.module_utils.pycompat24.get_exception`` to help retrieve exceptions in a manner compatible with Python 2.4 through Python 3.6. We no longer support Python 2.4 and Python 2.5 so this is extraneous and we want to deprecate the function. Porting code should look something like this: .. code-block:: python # Unfixed code: try: raise IOError('test') except IOError: e = get_exception() do_something(e) except: e = get_exception() do_something_else(e) # After fixing: try: raise IOError('test') except IOErrors as e: do_something(e) except Exception as e: do_something_else(e) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-illegal-filenames.rst0000644000000000000000000000216000000000000030724 0ustar00rootroot00000000000000no-illegal-filenames ==================== Files and directories should not contain illegal characters or names so that Ansible can be checked out on any Operating System. Illegal Characters ------------------ The following characters are not allowed to be used in any part of the file or directory name; * ``<`` * ``>`` * ``:`` * ``"`` * ``/`` * ``\`` * ``|`` * ``?`` * ``*`` * Any characters whose integer representations are in the range from 0 through to 31 like ``\n`` The following characters are not allowed to be used as the last character of a file or directory; * ``.`` * ``" "`` (just the space character) Illegal Names ------------- The following names are not allowed to be used as the name of a file or directory excluding the extension; * ``CON`` * ``PRN`` * ``AUX`` * ``NUL`` * ``COM1`` * ``COM2`` * ``COM3`` * ``COM4`` * ``COM5`` * ``COM6`` * ``COM7`` * ``COM8`` * ``COM9`` * ``LPT1`` * ``LPT2`` * ``LPT3`` * ``LPT4`` * ``LPT5`` * ``LPT6`` * ``LPT7`` * ``LPT8`` * ``LPT9`` For example, the file ``folder/COM1``, ``folder/COM1.txt`` are illegal but ``folder/COM1-file`` or ``folder/COM1-file.txt`` is allowed. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-main-display.rst0000644000000000000000000000057600000000000027752 0ustar00rootroot00000000000000no-main-display =============== As of Ansible 2.8, ``Display`` should no longer be imported from ``__main__``. ``Display`` is now a singleton and should be utilized like the following: .. code-block:: python from ansible.utils.display import Display display = Display() There is no longer a need to attempt ``from __main__ import display`` inside a ``try/except`` block. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-smart-quotes.rst0000644000000000000000000000017700000000000030024 0ustar00rootroot00000000000000no-smart-quotes =============== Smart quotes (``â€â€œâ€˜â€™``) should not be used. Use plain ascii quotes (``"'``) instead. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-tests-as-filters.rst0000644000000000000000000000135300000000000030566 0ustar00rootroot00000000000000:orphan: no-tests-as-filters =================== Using Ansible provided Jinja2 tests as filters will be removed in Ansible 2.9. Prior to Ansible 2.5, Jinja2 tests included within Ansible were most often used as filters. The large difference in use is that filters are referenced as ``variable | filter_name`` while Jinja2 tests are referenced as ``variable is test_name``. Jinja2 tests are used for comparisons, whereas filters are used for data manipulation, and have different applications in Jinja2. This change is to help differentiate the concepts for a better understanding of Jinja2, and where each can be appropriately used. As of Ansible 2.5 using an Ansible provided Jinja2 test with filter syntax will display a deprecation error. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-underscore-variable.rst0000644000000000000000000000144200000000000031310 0ustar00rootroot00000000000000:orphan: no-underscore-variable ====================== In the future, Ansible may use the identifier ``_`` to internationalize its message strings. To be ready for that, we need to make sure that there are no conflicting identifiers defined in the code base. In common practice, ``_`` is frequently used as a dummy variable (a variable to receive a value from a function where the value is useless and never used). In Ansible, we're using the identifier ``dummy`` for this purpose instead. Example of unfixed code: .. code-block:: python for _ in range(0, retries): success = retry_thing() if success: break Example of fixed code: .. code-block:: python for dummy in range(0, retries): success = retry_thing() if success: break ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-unicode-literals.rst0000644000000000000000000000154700000000000030625 0ustar00rootroot00000000000000no-unicode_literals =================== The use of :code:`from __future__ import unicode_literals` has been deemed an anti-pattern. The problems with it are: * It makes it so one can't jump into the middle of a file and know whether a bare literal string is a byte string or text string. The programmer has to first check the top of the file to see if the import is there. * It removes the ability to define native strings (a string which should be a byte string on python2 and a text string on python3) via a string literal. * It makes for more context switching. A programmer could be reading one file which has `unicode_literals` and know that bare string literals are text strings but then switch to another file (perhaps tracing program execution into a third party library) and have to switch their understanding of what bare string literals are. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-unwanted-files.rst0000644000000000000000000000053300000000000030301 0ustar00rootroot00000000000000no-unwanted-files ================= Specific file types are allowed in certain directories: - ``lib`` - All content must reside in the ``lib/ansible`` directory. - ``lib/ansible`` - Only source code with one of the following extensions is allowed: - ``*.cs`` - C# - ``*.ps1`` - PowerShell - ``*.psm1`` - PowerShell - ``*.py`` - Python ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/no-wildcard-import.rst0000644000000000000000000000151000000000000030451 0ustar00rootroot00000000000000:orphan: no-wildcard-import ================== Using :code:`import *` is a bad habit which pollutes your namespace, hinders debugging, and interferes with static analysis of code. For those reasons, we do want to limit the use of :code:`import *` in the ansible code. Change our code to import the specific names that you need instead. Examples of unfixed code: .. code-block:: python from ansible.module_utils.six import * if isinstance(variable, string_types): do_something(variable) from ansible.module_utils.basic import * module = AnsibleModule() Examples of fixed code: .. code-block:: python from ansible.module_utils import six if isinstance(variable, six.string_types): do_something(variable) from ansible.module_utils.basic import AnsibleModule module = AnsibleModule() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/obsolete-files.rst0000644000000000000000000000143700000000000027662 0ustar00rootroot00000000000000obsolete-files ============== Directories in the Ansible source tree are sometimes made obsolete. Files should not exist in these directories. The new location (if any) is dependent on which directory has been made obsolete. Below are some of the obsolete directories and their new locations: - All of ``test/runner/`` is now under ``test/lib/ansible_test/`` instead. The organization of files in the new directory has changed. - Most subdirectories of ``test/sanity/`` (with some exceptions) are now under ``test/lib/ansible_test/_util/controller/sanity/`` instead. This error occurs most frequently for open pull requests which add or modify files in directories which are now obsolete. Make sure the branch you are working from is current so that changes can be made in the correct location. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/package-data.rst0000644000000000000000000000025400000000000027244 0ustar00rootroot00000000000000package-data ============ Verifies that the combination of ``MANIFEST.in`` and ``package_data`` from ``setup.py`` properly installs data files from within ``lib/ansible`` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/pep8.rst0000644000000000000000000000016700000000000025621 0ustar00rootroot00000000000000pep8 ==== Python static analysis for PEP 8 style guideline compliance. See :ref:`testing_pep8` for more information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/pslint.rst0000644000000000000000000000022500000000000026251 0ustar00rootroot00000000000000pslint ====== PowerShell static analysis for common programming errors using `PSScriptAnalyzer `_. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/pylint-ansible-test.rst0000644000000000000000000000024200000000000030646 0ustar00rootroot00000000000000:orphan: pylint-ansible-test =================== Python static analysis for common programming errors. A more strict set of rules applied to ``ansible-test``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/pylint.rst0000644000000000000000000000010500000000000026254 0ustar00rootroot00000000000000pylint ====== Python static analysis for common programming errors. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/release-names.rst0000644000000000000000000000017100000000000027461 0ustar00rootroot00000000000000Release names ============= Verifies that the most recent release name has been added to ``./github/RELEASE_NAMES.yml`` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/replace-urlopen.rst0000644000000000000000000000014000000000000030031 0ustar00rootroot00000000000000replace-urlopen =============== Use ``open_url`` from ``module_utils`` instead of ``urlopen``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.460556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/required-and-default-attributes.rst0000644000000000000000000000020700000000000033126 0ustar00rootroot00000000000000required-and-default-attributes =============================== Use only one of ``default`` or ``required`` with ``FieldAttribute``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/rstcheck.rst0000644000000000000000000000012200000000000026542 0ustar00rootroot00000000000000rstcheck ======== Check reStructuredText files for syntax and formatting issues. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/runtime-metadata.rst0000644000000000000000000000025600000000000030205 0ustar00rootroot00000000000000runtime-metadata.yml ==================== Validates the schema for: * ansible-core's ``lib/ansible/config/ansible_builtin_runtime.yml`` * collection's ``meta/runtime.yml`` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/sanity-docs.rst0000644000000000000000000000013200000000000027172 0ustar00rootroot00000000000000sanity-docs =========== Documentation for each ``ansible-test sanity`` test is required. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/shebang.rst0000644000000000000000000000073200000000000026352 0ustar00rootroot00000000000000shebang ======= Most executable files should only use one of the following shebangs: - ``#!/bin/sh`` - ``#!/bin/bash`` - ``#!/usr/bin/make`` - ``#!/usr/bin/env python`` - ``#!/usr/bin/env bash`` NOTE: For ``#!/bin/bash``, any of the options ``eux`` may also be used, such as ``#!/bin/bash -eux``. This does not apply to Ansible modules, which should not be executable and must always use ``#!/usr/bin/python``. Some exceptions are permitted. Ask if you have questions. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/shellcheck.rst0000644000000000000000000000020400000000000027042 0ustar00rootroot00000000000000shellcheck ========== Static code analysis for shell scripts using the excellent `shellcheck `_ tool. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/symlinks.rst0000644000000000000000000000033300000000000026611 0ustar00rootroot00000000000000symlinks ======== Symbolic links are only permitted for files that exist to ensure proper tarball generation during a release. If other types of symlinks are needed for tests they must be created as part of the test. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/test-constraints.rst0000644000000000000000000000022000000000000030257 0ustar00rootroot00000000000000test-constraints ================ Constraints for test requirements should be in ``test/lib/ansible_test/_data/requirements/constraints.txt``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/update-bundled.rst0000644000000000000000000000252700000000000027644 0ustar00rootroot00000000000000:orphan: update-bundled ============== Check whether any of our known bundled code needs to be updated for a new upstream release. This test can error in the following ways: * The bundled code is out of date with regard to the latest release on pypi. Update the code to the new version and update the version in _BUNDLED_METADATA to solve this. * The code is lacking a _BUNDLED_METADATA variable. This typically happens when a bundled version is updated and we forget to add a _BUNDLED_METADATA variable to the updated file. Once that is added, this error should go away. * A file has a _BUNDLED_METADATA variable but the file isn't specified in :file:`test/sanity/code-smell/update-bundled.py`. This typically happens when a new bundled library is added. Add the file to the `get_bundled_libs()` function in the `update-bundled.py` test script to solve this error. _BUNDLED_METADATA has the following fields: :pypi_name: Name of the bundled package on pypi :version: Version of the package that we are including here :version_constraints: Optional PEP440 specifier for the version range that we are bundling. Currently, the only valid use of this is to follow a version that is compatible with the Python stdlib when newer versions of the pypi package implement a new API. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/use-argspec-type-path.rst0000644000000000000000000000100100000000000031060 0ustar00rootroot00000000000000use-argspec-type-path ===================== The AnsibleModule argument_spec knows of several types beyond the standard python types. One of these is ``path``. When used, type ``path`` ensures that an argument is a string and expands any shell variables and tilde characters. This test looks for use of :func:`os.path.expanduser ` in modules. When found, it tells the user to replace it with ``type='path'`` in the module's argument_spec or list it as a false positive in the test. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/use-compat-six.rst0000644000000000000000000000012500000000000027615 0ustar00rootroot00000000000000use-compat-six ============== Use ``six`` from ``module_utils`` instead of ``six``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/validate-modules.rst0000644000000000000000000000023300000000000030176 0ustar00rootroot00000000000000validate-modules ================ Analyze modules for common issues in code and documentation. See :ref:`testing_validate-modules` for more information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing/sanity/yamllint.rst0000644000000000000000000000010600000000000026567 0ustar00rootroot00000000000000yamllint ======== Check YAML files for syntax and formatting issues. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.457556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing.rst0000644000000000000000000002467400000000000023447 0ustar00rootroot00000000000000.. _developing_testing: *************** Testing Ansible *************** .. contents:: :local: Why test your Ansible contributions? ==================================== If you're a developer, one of the most valuable things you can do is to look at GitHub issues and help fix bugs, since bug-fixing is almost always prioritized over feature development. Even for non-developers, helping to test pull requests for bug fixes and features is still immensely valuable. Ansible users who understand how to write playbooks and roles should be able to test their work. GitHub pull requests will automatically run a variety of tests (for example, Azure Pipelines) that show bugs in action. However, contributors must also test their work outside of the automated GitHub checks and show evidence of these tests in the PR to ensure that their work will be more likely to be reviewed and merged. Read on to learn how Ansible is tested, how to test your contributions locally, and how to extend testing capabilities. If you want to learn about testing collections, read :ref:`testing_collections` Types of tests ============== At a high level we have the following classifications of tests: :compile: * :ref:`testing_compile` * Test python code against a variety of Python versions. :sanity: * :ref:`testing_sanity` * Sanity tests are made up of scripts and tools used to perform static code analysis. * The primary purpose of these tests is to enforce Ansible coding standards and requirements. :integration: * :ref:`testing_integration` * Functional tests of modules and Ansible core functionality. :units: * :ref:`testing_units` * Tests directly against individual parts of the code base. If you're a developer, one of the most valuable things you can do is look at the GitHub issues list and help fix bugs. We almost always prioritize bug fixing over feature development. Even for non developers, helping to test pull requests for bug fixes and features is still immensely valuable. Ansible users who understand writing playbooks and roles should be able to add integration tests and so GitHub pull requests with integration tests that show bugs in action will also be a great way to help. Testing within GitHub & Azure Pipelines ======================================= Organization ------------ When Pull Requests (PRs) are created they are tested using Azure Pipelines, a Continuous Integration (CI) tool. Results are shown at the end of every PR. When Azure Pipelines detects an error and it can be linked back to a file that has been modified in the PR then the relevant lines will be added as a GitHub comment. For example: .. code-block:: text The test `ansible-test sanity --test pep8` failed with the following errors: lib/ansible/modules/network/foo/bar.py:509:17: E265 block comment should start with '# ' The test `ansible-test sanity --test validate-modules` failed with the following error: lib/ansible/modules/network/foo/bar.py:0:0: E307 version_added should be 2.4. Currently 2.3 From the above example we can see that ``--test pep8`` and ``--test validate-modules`` have identified an issue. The commands given allow you to run the same tests locally to ensure you've fixed all issues without having to push your changes to GitHub and wait for Azure Pipelines, for example: If you haven't already got Ansible available, use the local checkout by running: .. code-block:: shell-session source hacking/env-setup Then run the tests detailed in the GitHub comment: .. code-block:: shell-session ansible-test sanity --test pep8 ansible-test sanity --test validate-modules If there isn't a GitHub comment stating what's failed you can inspect the results by clicking on the "Details" button under the "checks have failed" message at the end of the PR. Rerunning a failing CI job -------------------------- Occasionally you may find your PR fails due to a reason unrelated to your change. This could happen for several reasons, including: * a temporary issue accessing an external resource, such as a yum or git repo * a timeout creating a virtual machine to run the tests on If either of these issues appear to be the case, you can rerun the Azure Pipelines test by: * adding a comment with ``/rebuild`` (full rebuild) or ``/rebuild_failed`` (rebuild only failed CI nodes) to the PR * closing and re-opening the PR (full rebuild) * making another change to the PR and pushing to GitHub If the issue persists, please contact us in the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). How to test a PR ================ Ideally, code should add tests that prove that the code works. That's not always possible and tests are not always comprehensive, especially when a user doesn't have access to a wide variety of platforms, or is using an API or web service. In these cases, live testing against real equipment can be more valuable than automation that runs against simulated interfaces. In any case, things should always be tested manually the first time as well. Thankfully, helping to test Ansible is pretty straightforward, assuming you are familiar with how Ansible works. Setup: Checking out a Pull Request ---------------------------------- You can do this by: * checking out Ansible * fetching the proposed changes into a test branch * testing * commenting on that particular issue on GitHub Here's how: .. warning:: Testing source code from GitHub pull requests sent to us does have some inherent risk, as the source code sent may have mistakes or malicious code that could have a negative impact on your system. We recommend doing all testing on a virtual machine, whether a cloud instance, or locally. Some users like Vagrant or Docker for this, but they are optional. It is also useful to have virtual machines of different Linux or other flavors, since some features (for example, package managers such as apt or yum) are specific to those OS versions. Create a fresh area to work: .. code-block:: shell-session git clone https://github.com/ansible/ansible.git ansible-pr-testing cd ansible-pr-testing Next, find the pull request you'd like to test and make note of its number. It will look something like this:: Use os.path.sep instead of hardcoding / #65381 .. note:: Only test ``ansible:devel`` It is important that the PR request target be ``ansible:devel``, as we do not accept pull requests into any other branch. Dot releases are cherry-picked manually by Ansible staff. Use the pull request number when you fetch the proposed changes and create your branch for testing: .. code-block:: shell-session git fetch origin refs/pull/XXXX/head:testing_PRXXXX git checkout testing_PRXXXX The first command fetches the proposed changes from the pull request and creates a new branch named ``testing_PRXXXX``, where the XXXX is the actual number associated with the pull request (for example, 65381). The second command checks out the newly created branch. .. note:: If the GitHub user interface shows that the pull request will not merge cleanly, we do not recommend proceeding if you are not somewhat familiar with git and coding, as you will have to resolve a merge conflict. This is the responsibility of the original pull request contributor. .. note:: Some users do not create feature branches, which can cause problems when they have multiple, unrelated commits in their version of ``devel``. If the source looks like ``someuser:devel``, make sure there is only one commit listed on the pull request. The Ansible source includes a script that allows you to use Ansible directly from source without requiring a full installation that is frequently used by developers on Ansible. Simply source it (to use the Linux/Unix terminology) to begin using it immediately: .. code-block:: shell-session source ./hacking/env-setup This script modifies the ``PYTHONPATH`` environment variables (along with a few other things), which will be temporarily set as long as your shell session is open. Testing the Pull Request ------------------------ At this point, you should be ready to begin testing! Some ideas of what to test are: * Create a test Playbook with the examples in and check if they function correctly * Test to see if any Python backtraces returned (that's a bug) * Test on different operating systems, or against different library versions Run sanity tests ^^^^^^^^^^^^^^^^ .. code:: shell ansible-test sanity More information: :ref:`testing_sanity` Run unit tests ^^^^^^^^^^^^^^ .. code:: shell ansible-test units More information: :ref:`testing_units` Run integration tests ^^^^^^^^^^^^^^^^^^^^^ .. code:: shell ansible-test integration -v ping More information: :ref:`testing_integration` Any potential issues should be added as comments on the pull request (and it's acceptable to comment if the feature works as well), remembering to include the output of ``ansible --version`` Example:: Works for me! Tested on `Ansible 2.3.0`. I verified this on CentOS 6.5 and also Ubuntu 14.04. If the PR does not resolve the issue, or if you see any failures from the unit/integration tests, just include that output instead: | This change causes errors for me. | | When I ran this Ubuntu 16.04 it failed with the following: | | \``` | some output | StackTrace | some other output | \``` Code Coverage Online ^^^^^^^^^^^^^^^^^^^^ `The online code coverage reports `_ are a good way to identify areas for testing improvement in Ansible. By following red colors you can drill down through the reports to find files which have no tests at all. Adding both integration and unit tests which show clearly how code should work, verify important Ansible functions and increase testing coverage in areas where there is none is a valuable way to help improve Ansible. The code coverage reports only cover the ``devel`` branch of Ansible where new feature development takes place. Pull requests and new code will be missing from the codecov.io coverage reports so local reporting is needed. Most ``ansible-test`` commands allow you to collect code coverage, this is particularly useful to indicate where to extend testing. See :ref:`testing_running_locally` for more information. Want to know more about testing? ================================ If you'd like to know more about the plans for improving testing Ansible then why not join the `Testing Working Group `_. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_compile.rst0000644000000000000000000000375600000000000025155 0ustar00rootroot00000000000000:orphan: .. _testing_compile: ************* Compile Tests ************* .. contents:: Topics Overview ======== Compile tests check source files for valid syntax on all supported python versions: - 2.4 (Ansible 2.3 only) - 2.6 - 2.7 - 3.5 - 3.6 - 3.7 - 3.8 - 3.9 NOTE: In Ansible 2.4 and earlier the compile test was provided by a dedicated sub-command ``ansible-test compile`` instead of a sanity test using ``ansible-test sanity --test compile``. Running compile tests locally ============================= Compile tests can be run across the whole code base by doing: .. code:: shell cd /path/to/ansible/source source hacking/env-setup ansible-test sanity --test compile Against a single file by doing: .. code:: shell ansible-test sanity --test compile lineinfile Or against a specific Python version by doing: .. code:: shell ansible-test sanity --test compile --python 2.7 lineinfile For advanced usage see the help: .. code:: shell ansible-test sanity --help Installing dependencies ======================= ``ansible-test`` has a number of dependencies , for ``compile`` tests we suggest running the tests with ``--local``, which is the default The dependencies can be installed using the ``--requirements`` argument. For example: .. code:: shell ansible-test sanity --test compile --requirements lineinfile The full list of requirements can be found at `test/lib/ansible_test/_data/requirements `_. Requirements files are named after their respective commands. See also the `constraints `_ applicable to all commands. Extending compile tests ======================= If you believe changes are needed to the compile tests please add a comment on the `Testing Working Group Agenda `_ so it can be discussed. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_documentation.rst0000644000000000000000000000304700000000000026367 0ustar00rootroot00000000000000:orphan: .. _testing_module_documentation: **************************** Testing module documentation **************************** Before you submit a module for inclusion in the main Ansible repo, you must test your module documentation for correct HTML rendering and to ensure that the argspec matches the documentation in your Python file. The community pages offer more information on :ref:`testing reStructuredText documentation `. To check the HTML output of your module documentation: #. Ensure working :ref:`development environment `. #. Install required Python packages (drop '--user' in venv/virtualenv): .. code-block:: bash pip install --user -r requirements.txt pip install --user -r docs/docsite/requirements.txt #. Ensure your module is in the correct directory: ``lib/ansible/modules/$CATEGORY/mymodule.py``. #. Build HTML from your module documentation: ``MODULES=mymodule make webdocs``. #. To build the HTML documentation for multiple modules, use a comma-separated list of module names: ``MODULES=mymodule,mymodule2 make webdocs``. #. View the HTML page at ``file:///path/to/docs/docsite/_build/html/modules/mymodule_module.html``. To ensure that your module documentation matches your ``argument_spec``: #. Install required Python packages (drop '--user' in venv/virtualenv): .. code-block:: bash pip install --user -r test/lib/ansible_test/_data/requirements/sanity.txt #. run the ``validate-modules`` test:: ansible-test sanity --test validate-modules mymodule ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.461556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_httptester.rst0000644000000000000000000000150100000000000025715 0ustar00rootroot00000000000000:orphan: ********** httptester ********** .. contents:: Topics Overview ======== ``httptester`` is a docker container used to host certain resources required by :ref:`testing_integration`. This is to avoid CI tests requiring external resources (such as git or package repos) which, if temporarily unavailable, would cause tests to fail. HTTP Testing endpoint which provides the following capabilities: * httpbin * nginx * SSL * SNI * Negotiate Authentication Source files can be found in the `http-test-container `_ repository. Extending httptester ==================== If you have sometime to improve ``httptester`` please add a comment on the `Testing Working Group Agenda `_ to avoid duplicated effort. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_integration.rst0000644000000000000000000002136600000000000026045 0ustar00rootroot00000000000000:orphan: .. _testing_integration: ***************** Integration tests ***************** .. contents:: Topics The Ansible integration Test system. Tests for playbooks, by playbooks. Some tests may require credentials. Credentials may be specified with `credentials.yml`. Some tests may require root. .. note:: Every new module and plugin should have integration tests, even if the tests cannot be run on Ansible CI infrastructure. In this case, the tests should be marked with the ``unsupported`` alias in `aliases file `_. Quick Start =========== It is highly recommended that you install and activate the ``argcomplete`` python package. It provides tab completion in ``bash`` for the ``ansible-test`` test runner. Configuration ============= ansible-test command -------------------- The example below assumes ``bin/`` is in your ``$PATH``. An easy way to achieve that is to initialize your environment with the ``env-setup`` command: .. code-block:: shell-session source hacking/env-setup ansible-test --help You can also call ``ansible-test`` with the full path: .. code-block:: shell-session bin/ansible-test --help integration_config.yml ---------------------- Making your own version of ``integration_config.yml`` can allow for setting some tunable parameters to help run the tests better in your environment. Some tests (for example, cloud tests) will only run when access credentials are provided. For more information about supported credentials, refer to the various ``cloud-config-*.template`` files in the ``test/integration/`` directory. Prerequisites ============= Some tests assume things like hg, svn, and git are installed, and in path. Some tests (such as those for Amazon Web Services) need separate definitions, which will be covered later in this document. (Complete list pending) Non-destructive Tests ===================== These tests will modify files in subdirectories, but will not do things that install or remove packages or things outside of those test subdirectories. They will also not reconfigure or bounce system services. .. note:: Running integration tests within containers To protect your system from any potential changes caused by integration tests, and to ensure a sensible set of dependencies are available we recommend that you always run integration tests with the ``--docker`` option, for example ``--docker centos8``. See the `list of supported container images `_ for options (the ``default`` image is used for sanity and unit tests, as well as for platform independent integration tests such as those for cloud modules). Run as follows for all POSIX platform tests executed by our CI system in a Fedora 34 container: .. code-block:: shell-session ansible-test integration shippable/ --docker fedora34 You can target a specific tests as well, such as for individual modules: .. code-block:: shell-session ansible-test integration ping You can use the ``-v`` option to make the output more verbose: .. code-block:: shell-session ansible-test integration lineinfile -vvv Use the following command to list all the available targets: .. code-block:: shell-session ansible-test integration --list-targets .. note:: Bash users If you use ``bash`` with ``argcomplete``, obtain a full list by doing: ``ansible-test integration `` Destructive Tests ================= These tests are allowed to install and remove some trivial packages. You will likely want to devote these to a virtual environment, such as Docker. They won't reformat your filesystem: .. code-block:: shell-session ansible-test integration destructive/ --docker fedora34 Windows Tests ============= These tests exercise the ``winrm`` connection plugin and Windows modules. You'll need to define an inventory with a remote Windows 2008 or 2012 Server to use for testing, and enable PowerShell Remoting to continue. Running these tests may result in changes to your Windows host, so don't run them against a production/critical Windows environment. Enable PowerShell Remoting (run on the Windows host via Remote Desktop): .. code-block:: shell-session Enable-PSRemoting -Force Define Windows inventory: .. code-block:: shell-session cp inventory.winrm.template inventory.winrm ${EDITOR:-vi} inventory.winrm Run the Windows tests executed by our CI system: .. code-block:: shell-session ansible-test windows-integration -v shippable/ Tests in containers ========================== If you have a Linux system with Docker or Podman installed, running integration tests using the same containers used by the Ansible continuous integration (CI) system is recommended. .. note:: Podman By default, Podman will only be used if the Docker CLI is not installed. If you have Docker installed but want to use Podman, you can change this behavior by setting the environment variable ``ANSIBLE_TEST_PREFER_PODMAN``. .. note:: Docker on non-Linux Using Docker Engine to run Docker on a non-Linux host (such as macOS) is not recommended. Some tests may fail, depending on the image used for testing. Using the ``--docker-privileged`` option when running ``integration`` (not ``network-integration`` or ``windows-integration``) may resolve the issue. Running Integration Tests ------------------------- To run all CI integration test targets for POSIX platforms in a Ubuntu 18.04 container: .. code-block:: shell-session ansible-test integration shippable/ --docker ubuntu1804 You can also run specific tests or select a different Linux distribution. For example, to run tests for the ``ping`` module on a Ubuntu 18.04 container: .. code-block:: shell-session ansible-test integration ping --docker ubuntu1804 Container Images ---------------- Python 3 ^^^^^^^^ Most container images are for testing with Python 3: - alpine3 - centos8 - fedora33 - fedora34 - opensuse15 - ubuntu1804 - ubuntu2004 Python 2 ^^^^^^^^ To test with Python 2 use the following images: - centos7 - opensuse15py2 Legacy Cloud Tests ================== Some of the cloud tests run as normal integration tests, and others run as legacy tests; see the :ref:`testing_integration_legacy` page for more information. Other configuration for Cloud Tests =================================== In order to run some tests, you must provide access credentials in a file named ``cloud-config-aws.yml`` or ``cloud-config-cs.ini`` in the test/integration directory. Corresponding .template files are available for for syntax help. The newer AWS tests now use the file test/integration/cloud-config-aws.yml IAM policies for AWS ==================== Ansible needs fairly wide ranging powers to run the tests in an AWS account. This rights can be provided to a dedicated user. These need to be configured before running the test. testing-policies ---------------- The GitHub repository `mattclay/aws-terminator `_ contains two sets of policies used for all existing AWS module integratoin tests. The `hacking/aws_config/setup_iam.yml` playbook can be used to setup two groups: - `ansible-integration-ci` will have the policies applied necessary to run any integration tests not marked as `unsupported` and are designed to mirror those used by Ansible's CI. - `ansible-integration-unsupported` will have the additional policies applied necessary to run the integration tests marked as `unsupported` including tests for managing IAM roles, users and groups. Once the groups have been created, you'll need to create a user and make the user a member of these groups. The policies are designed to minimize the rights of that user. Please note that while this policy does limit the user to one region, this does not fully restrict the user (primarily due to the limitations of the Amazon ARN notation). The user will still have wide privileges for viewing account definitions, and will also able to manage some resources that are not related to testing (for example, AWS lambdas with different names). Tests should not be run in a primary production account in any case. Other Definitions required -------------------------- Apart from installing the policy and giving it to the user identity running the tests, a lambda role `ansible_integration_tests` has to be created which has lambda basic execution privileges. Network Tests ============= For guidance on writing network test see :ref:`testing_resource_modules`. Where to find out more ====================== If you'd like to know more about the plans for improving testing Ansible, join the `Testing Working Group `_. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_integration_legacy.rst0000644000000000000000000000772500000000000027374 0ustar00rootroot00000000000000:orphan: .. _testing_integration_legacy: ******************************************* Testing using the Legacy Integration system ******************************************* .. contents:: Topics This page details how to run the integration tests that haven't been ported to the new ``ansible-test`` framework. The following areas are still tested using the legacy ``make tests`` command: * amazon (some) * azure * cloudflare * cloudscale * cloudstack * consul * exoscale * gce * jenkins * rackspace Over time the above list will be reduced as tests are ported to the ``ansible-test`` framework. Running Cloud Tests ==================== Cloud tests exercise capabilities of cloud modules (for example, ec2_key). These are not 'tests run in the cloud' so much as tests that use the cloud modules and are organized by cloud provider. Some AWS tests may use environment variables. It is recommended to either unset any AWS environment variables( such as ``AWS_DEFAULT_PROFILE``, ``AWS_SECRET_ACCESS_KEY``, and so on) or be sure that the environment variables match the credentials provided in ``credentials.yml`` to ensure the tests run with consistency to their full capability on the expected account. See `AWS CLI docs `_ for information on creating a profile. Subsets of tests may be run by ``#commenting`` out unnecessary roles in the appropriate playbook, such as ``test/integration/amazon.yml``. In order to run cloud tests, you must provide access credentials in a file named ``credentials.yml``. A sample credentials file named ``credentials.template`` is available for syntax help. Provide cloud credentials: .. code-block:: shell-session cp credentials.template credentials.yml ${EDITOR:-vi} credentials.yml Other configuration =================== In order to run some tests, you must provide access credentials in a file named ``credentials.yml``. A sample credentials file named ``credentials.template`` is available for syntax help. IAM policies for AWS ==================== In order to run the tests in an AWS account ansible needs fairly wide ranging powers which can be provided to a dedicated user or temporary credentials using a specific policy configured in the AWS account. testing-iam-policy.json.j2 -------------------------- The testing-iam-policy.json.j2 file contains a policy which can be given to the user running the tests to give close to minimum rights required to run the tests. Please note that this does not fully restrict the user; The user has wide privileges for viewing account definitions and is also able to manage some resources that are not related to testing (for example, AWS lambdas with different names) primarily due to the limitations of the Amazon ARN notation. At the very least the policy limits the user to one region, however tests should not be run in a primary production account in any case. Other Definitions required -------------------------- Apart from installing the policy and giving it to the user identity running the tests, a lambda role `ansible_integration_tests` has to be created which has lambda basic execution privileges. Running Tests ============= The tests are invoked via a ``Makefile``. If you haven't already got Ansible available use the local checkout by doing: .. code-block:: shell-session source hacking/env-setup Run the tests by doing: .. code-block:: shell-session cd test/integration/ # TARGET is the name of the test from the list at the top of this page #make TARGET # for example make amazon # To run all cloud tests you can do: make cloud .. warning:: Possible cost of running cloud tests Running cloud integration tests will create and destroy cloud resources. Running these tests may result in additional fees associated with your cloud account. Care is taken to ensure that created resources are removed. However, it is advisable to inspect your AWS console to ensure no unexpected resources are running. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_pep8.rst0000644000000000000000000000067300000000000024374 0ustar00rootroot00000000000000:orphan: .. _testing_pep8: ***** PEP 8 ***** .. contents:: Topics `PEP 8`_ style guidelines are enforced by `pycodestyle`_ on all python files in the repository by default. Running Locally =============== The `PEP 8`_ check can be run locally with:: ansible-test sanity --test pep8 [file-or-directory-path-to-check] ... .. _PEP 8: https://www.python.org/dev/peps/pep-0008/ .. _pycodestyle: https://pypi.org/project/pycodestyle/ ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_running_locally.rst0000644000000000000000000000640200000000000026713 0ustar00rootroot00000000000000:orphan: .. _testing_running_locally: *************** Testing Ansible *************** This document describes how to: * Run tests locally using ``ansible-test`` * Extend .. contents:: :local: Requirements ============ There are no special requirements for running ``ansible-test`` on Python 2.7 or later. The ``argparse`` package is required for Python 2.6. The requirements for each ``ansible-test`` command are covered later. Test Environments ================= Most ``ansible-test`` commands support running in one or more isolated test environments to simplify testing. Remote ------ The ``--remote`` option runs tests in a cloud hosted environment. An API key is required to use this feature. Recommended for integration tests. See the `list of supported platforms and versions `_ for additional details. Environment Variables --------------------- When using environment variables to manipulate tests there some limitations to keep in mind. Environment variables are: * Not propagated from the host to the test environment when using the ``--docker`` or ``--remote`` options. * Not exposed to the test environment unless enabled in ``test/lib/ansible_test/_internal/util.py`` in the ``common_environment`` function. Example: ``ANSIBLE_KEEP_REMOTE_FILES=1`` can be set when running ``ansible-test integration --venv``. However, using the ``--docker`` option would require running ``ansible-test shell`` to gain access to the Docker environment. Once at the shell prompt, the environment variable could be set and the tests executed. This is useful for debugging tests inside a container by following the :ref:`Debugging AnsibleModule-based modules ` instructions. Interactive Shell ================= Use the ``ansible-test shell`` command to get an interactive shell in the same environment used to run tests. Examples: * ``ansible-test shell --docker`` - Open a shell in the default docker container. * ``ansible-test shell --venv --python 3.6`` - Open a shell in a Python 3.6 virtual environment. Code Coverage ============= Code coverage reports make it easy to identify untested code for which more tests should be written. Online reports are available but only cover the ``devel`` branch (see :ref:`developing_testing`). For new code local reports are needed. Add the ``--coverage`` option to any test command to collect code coverage data. If you aren't using the ``--venv`` or ``--docker`` options which create an isolated python environment then you may have to use the ``--requirements`` option to ensure that the correct version of the coverage module is installed: .. code-block:: shell-session ansible-test coverage erase ansible-test units --coverage apt ansible-test integration --coverage aws_lambda ansible-test coverage html Reports can be generated in several different formats: * ``ansible-test coverage report`` - Console report. * ``ansible-test coverage html`` - HTML report. * ``ansible-test coverage xml`` - XML report. To clear data between test runs, use the ``ansible-test coverage erase`` command. For a full list of features see the online help: .. code-block:: shell-session ansible-test coverage --help ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_sanity.rst0000644000000000000000000000271600000000000025027 0ustar00rootroot00000000000000:orphan: .. _testing_sanity: ************ Sanity Tests ************ .. contents:: Topics Sanity tests are made up of scripts and tools used to perform static code analysis. The primary purpose of these tests is to enforce Ansible coding standards and requirements. Tests are run with ``ansible-test sanity``. All available tests are run unless the ``--test`` option is used. How to run ========== .. note:: To run sanity tests using docker, always use the default docker image by passing the ``--docker`` or ``--docker default`` argument. .. note:: When using docker and the ``--base-branch`` argument, also use the ``--keep-git`` argument to avoid git related errors. .. code:: shell source hacking/env-setup # Run all sanity tests ansible-test sanity # Run all sanity tests including disabled ones ansible-test sanity --allow-disabled # Run all sanity tests against against certain files ansible-test sanity lib/ansible/modules/files/template.py # Run all tests inside docker (good if you don't have dependencies installed) ansible-test sanity --docker default # Run validate-modules against a specific file ansible-test sanity --test validate-modules lib/ansible/modules/files/template.py Available Tests =============== Tests can be listed with ``ansible-test sanity --list-tests``. See the full list of :ref:`sanity tests `, which details the various tests and details how to fix identified issues. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_units.rst0000644000000000000000000001634200000000000024662 0ustar00rootroot00000000000000:orphan: .. _testing_units: ********** Unit Tests ********** Unit tests are small isolated tests that target a specific library or module. Unit tests in Ansible are currently the only way of driving tests from python within Ansible's continuous integration process. This means that in some circumstances the tests may be a bit wider than just units. .. contents:: Topics Available Tests =============== Unit tests can be found in `test/units `_. Notice that the directory structure of the tests matches that of ``lib/ansible/``. Running Tests ============= .. note:: To run unit tests using docker, always use the default docker image by passing the ``--docker`` or ``--docker default`` argument. The Ansible unit tests can be run across the whole code base by doing: .. code:: shell cd /path/to/ansible/source source hacking/env-setup ansible-test units --docker -v Against a single file by doing: .. code:: shell ansible-test units --docker -v apt Or against a specific Python version by doing: .. code:: shell ansible-test units --docker -v --python 2.7 apt If you are running unit tests against things other than modules, such as module utilities, specify the whole file path: .. code:: shell ansible-test units --docker -v test/units/module_utils/basic/test_imports.py For advanced usage see the online help: .. code:: shell ansible-test units --help You can also run tests in Ansible's continuous integration system by opening a pull request. This will automatically determine which tests to run based on the changes made in your pull request. Installing dependencies ======================= If you are running ``ansible-test`` with the ``--docker`` or ``--venv`` option you do not need to install dependencies manually. Otherwise you can install dependencies using the ``--requirements`` option, which will install all the required dependencies needed for unit tests. For example: .. code:: shell ansible-test units --python 2.7 --requirements apache2_module The list of unit test requirements can be found at `test/units/requirements.txt `_. This does not include the list of unit test requirements for ``ansible-test`` itself, which can be found at `test/lib/ansible_test/_data/requirements/units.txt `_. See also the `constraints `_ applicable to all test commands. Extending unit tests ==================== .. warning:: What a unit test isn't If you start writing a test that requires external services then you may be writing an integration test, rather than a unit test. Structuring Unit Tests ---------------------- Ansible drives unit tests through `pytest `_. This means that tests can either be written a simple functions which are included in any file name like ``test_.py`` or as classes. Here is an example of a function: .. code:: python #this function will be called simply because it is called test_*() def test_add(): a = 10 b = 23 c = 33 assert a + b == c Here is an example of a class: .. code:: python import unittest class AddTester(unittest.TestCase): def SetUp(): self.a = 10 self.b = 23 # this function will def test_add(): c = 33 assert self.a + self.b == c # this function will def test_subtract(): c = -13 assert self.a - self.b == c Both methods work fine in most circumstances; the function-based interface is simpler and quicker and so that's probably where you should start when you are just trying to add a few basic tests for a module. The class-based test allows more tidy set up and tear down of pre-requisites, so if you have many test cases for your module you may want to refactor to use that. Assertions using the simple ``assert`` function inside the tests will give full information on the cause of the failure with a trace-back of functions called during the assertion. This means that plain asserts are recommended over other external assertion libraries. A number of the unit test suites include functions that are shared between several modules, especially in the networking arena. In these cases a file is created in the same directory, which is then included directly. Module test case common code ---------------------------- Keep common code as specific as possible within the `test/units/` directory structure. Don't import common unit test code from directories outside the current or parent directories. Don't import other unit tests from a unit test. Any common code should be in dedicated files that aren't themselves tests. Fixtures files -------------- To mock out fetching results from devices, or provide other complex data structures that come from external libraries, you can use ``fixtures`` to read in pre-generated data. You can check how `fixtures `_ are used in `cpuinfo fact tests `_ If you are simulating APIs you may find that Python placebo is useful. See :ref:`testing_units_modules` for more information. Code Coverage For New or Updated Unit Tests ------------------------------------------- New code will be missing from the codecov.io coverage reports (see :ref:`developing_testing`), so local reporting is needed. Most ``ansible-test`` commands allow you to collect code coverage; this is particularly useful when to indicate where to extend testing. To collect coverage data add the ``--coverage`` argument to your ``ansible-test`` command line: .. code:: shell ansible-test units --coverage apt ansible-test coverage html Results will be written to ``test/results/reports/coverage/index.html`` Reports can be generated in several different formats: * ``ansible-test coverage report`` - Console report. * ``ansible-test coverage html`` - HTML report. * ``ansible-test coverage xml`` - XML report. To clear data between test runs, use the ``ansible-test coverage erase`` command. See :ref:`testing_running_locally` for more information about generating coverage reports. .. seealso:: :ref:`testing_units_modules` Special considerations for unit testing modules :ref:`testing_running_locally` Running tests locally including gathering and reporting coverage data `Python 3 documentation - 26.4. unittest — Unit testing framework `_ The documentation of the unittest framework in python 3 `Python 2 documentation - 25.3. unittest — Unit testing framework `_ The documentation of the earliest supported unittest framework - from Python 2.6 `pytest: helps you write better programs `_ The documentation of pytest - the framework actually used to run Ansible unit tests ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4625561 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_units_modules.rst0000644000000000000000000006220200000000000026406 0ustar00rootroot00000000000000:orphan: .. _testing_units_modules: **************************** Unit Testing Ansible Modules **************************** .. highlight:: python .. contents:: Topics Introduction ============ This document explains why, how and when you should use unit tests for Ansible modules. The document doesn't apply to other parts of Ansible for which the recommendations are normally closer to the Python standard. There is basic documentation for Ansible unit tests in the developer guide :ref:`testing_units`. This document should be readable for a new Ansible module author. If you find it incomplete or confusing, please open a bug or ask for help on the #ansible-devel chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). What Are Unit Tests? ==================== Ansible includes a set of unit tests in the :file:`test/units` directory. These tests primarily cover the internals but can also cover Ansible modules. The structure of the unit tests matches the structure of the code base, so the tests that reside in the :file:`test/units/modules/` directory are organized by module groups. Integration tests can be used for most modules, but there are situations where cases cannot be verified using integration tests. This means that Ansible unit test cases may extend beyond testing only minimal units and in some cases will include some level of functional testing. Why Use Unit Tests? =================== Ansible unit tests have advantages and disadvantages. It is important to understand these. Advantages include: * Most unit tests are much faster than most Ansible integration tests. The complete suite of unit tests can be run regularly by a developer on their local system. * Unit tests can be run by developers who don't have access to the system which the module is designed to work on, allowing a level of verification that changes to core functions haven't broken module expectations. * Unit tests can easily substitute system functions allowing testing of software that would be impractical. For example, the ``sleep()`` function can be replaced and we check that a ten minute sleep was called without actually waiting ten minutes. * Unit tests are run on different Python versions. This allows us to ensure that the code behaves in the same way on different Python versions. There are also some potential disadvantages of unit tests. Unit tests don't normally directly test actual useful valuable features of software, instead just internal implementation * Unit tests that test the internal, non-visible features of software may make refactoring difficult if those internal features have to change (see also naming in How below) * Even if the internal feature is working correctly it is possible that there will be a problem between the internal code tested and the actual result delivered to the user Normally the Ansible integration tests (which are written in Ansible YAML) provide better testing for most module functionality. If those tests already test a feature and perform well there may be little point in providing a unit test covering the same area as well. When To Use Unit Tests ====================== There are a number of situations where unit tests are a better choice than integration tests. For example, testing things which are impossible, slow or very difficult to test with integration tests, such as: * Forcing rare / strange / random situations that can't be forced, such as specific network failures and exceptions * Extensive testing of slow configuration APIs * Situations where the integration tests cannot be run as part of the main Ansible continuous integration running in Azure Pipelines. Providing quick feedback ------------------------ Example: A single step of the rds_instance test cases can take up to 20 minutes (the time to create an RDS instance in Amazon). The entire test run can last for well over an hour. All 16 of the unit tests complete execution in less than 2 seconds. The time saving provided by being able to run the code in a unit test makes it worth creating a unit test when bug fixing a module, even if those tests do not often identify problems later. As a basic goal, every module should have at least one unit test which will give quick feedback in easy cases without having to wait for the integration tests to complete. Ensuring correct use of external interfaces ------------------------------------------- Unit tests can check the way in which external services are run to ensure that they match specifications or are as efficient as possible *even when the final output will not be changed*. Example: Package managers are often far more efficient when installing multiple packages at once rather than each package separately. The final result is the same: the packages are all installed, so the efficiency is difficult to verify through integration tests. By providing a mock package manager and verifying that it is called once, we can build a valuable test for module efficiency. Another related use is in the situation where an API has versions which behave differently. A programmer working on a new version may change the module to work with the new API version and unintentionally break the old version. A test case which checks that the call happens properly for the old version can help avoid the problem. In this situation it is very important to include version numbering in the test case name (see `Naming unit tests`_ below). Providing specific design tests -------------------------------- By building a requirement for a particular part of the code and then coding to that requirement, unit tests _can_ sometimes improve the code and help future developers understand that code. Unit tests that test internal implementation details of code, on the other hand, almost always do more harm than good. Testing that your packages to install are stored in a list would slow down and confuse a future developer who might need to change that list into a dictionary for efficiency. This problem can be reduced somewhat with clear test naming so that the future developer immediately knows to delete the test case, but it is often better to simply leave out the test case altogether and test for a real valuable feature of the code, such as installing all of the packages supplied as arguments to the module. How to unit test Ansible modules ================================ There are a number of techniques for unit testing modules. Beware that most modules without unit tests are structured in a way that makes testing quite difficult and can lead to very complicated tests which need more work than the code. Effectively using unit tests may lead you to restructure your code. This is often a good thing and leads to better code overall. Good restructuring can make your code clearer and easier to understand. Naming unit tests ----------------- Unit tests should have logical names. If a developer working on the module being tested breaks the test case, it should be easy to figure what the unit test covers from the name. If a unit test is designed to verify compatibility with a specific software or API version then include the version in the name of the unit test. As an example, ``test_v2_state_present_should_call_create_server_with_name()`` would be a good name, ``test_create_server()`` would not be. Use of Mocks ------------ Mock objects (from https://docs.python.org/3/library/unittest.mock.html) can be very useful in building unit tests for special / difficult cases, but they can also lead to complex and confusing coding situations. One good use for mocks would be in simulating an API. As for 'six', the 'mock' python package is bundled with Ansible (use ``import units.compat.mock``). Ensuring failure cases are visible with mock objects ---------------------------------------------------- Functions like :meth:`module.fail_json` are normally expected to terminate execution. When you run with a mock module object this doesn't happen since the mock always returns another mock from a function call. You can set up the mock to raise an exception as shown above, or you can assert that these functions have not been called in each test. For example: .. code-block:: python module = MagicMock() function_to_test(module, argument) module.fail_json.assert_not_called() This applies not only to calling the main module but almost any other function in a module which gets the module object. Mocking of the actual module ---------------------------- The setup of an actual module is quite complex (see `Passing Arguments`_ below) and often isn't needed for most functions which use a module. Instead you can use a mock object as the module and create any module attributes needed by the function you are testing. If you do this, beware that the module exit functions need special handling as mentioned above, either by throwing an exception or ensuring that they haven't been called. For example: .. code-block:: python class AnsibleExitJson(Exception): """Exception class to be raised by module.exit_json and caught by the test case""" pass # you may also do the same to fail json module = MagicMock() module.exit_json.side_effect = AnsibleExitJson(Exception) with self.assertRaises(AnsibleExitJson) as result: return = my_module.test_this_function(module, argument) module.fail_json.assert_not_called() assert return["changed"] == True API definition with unit test cases ----------------------------------- API interaction is usually best tested with the function tests defined in Ansible's integration testing section, which run against the actual API. There are several cases where the unit tests are likely to work better. Defining a module against an API specification ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This case is especially important for modules interacting with web services, which provide an API that Ansible uses but which are beyond the control of the user. By writing a custom emulation of the calls that return data from the API, we can ensure that only the features which are clearly defined in the specification of the API are present in the message. This means that we can check that we use the correct parameters and nothing else. *Example: in rds_instance unit tests a simple instance state is defined*: .. code-block:: python def simple_instance_list(status, pending): return {u'DBInstances': [{u'DBInstanceArn': 'arn:aws:rds:us-east-1:1234567890:db:fakedb', u'DBInstanceStatus': status, u'PendingModifiedValues': pending, u'DBInstanceIdentifier': 'fakedb'}]} This is then used to create a list of states: .. code-block:: python rds_client_double = MagicMock() rds_client_double.describe_db_instances.side_effect = [ simple_instance_list('rebooting', {"a": "b", "c": "d"}), simple_instance_list('available', {"c": "d", "e": "f"}), simple_instance_list('rebooting', {"a": "b"}), simple_instance_list('rebooting', {"e": "f", "g": "h"}), simple_instance_list('rebooting', {}), simple_instance_list('available', {"g": "h", "i": "j"}), simple_instance_list('rebooting', {"i": "j", "k": "l"}), simple_instance_list('available', {}), simple_instance_list('available', {}), ] These states are then used as returns from a mock object to ensure that the ``await`` function waits through all of the states that would mean the RDS instance has not yet completed configuration: .. code-block:: python rds_i.await_resource(rds_client_double, "some-instance", "available", mod_mock, await_pending=1) assert(len(sleeper_double.mock_calls) > 5), "await_pending didn't wait enough" By doing this we check that the ``await`` function will keep waiting through potentially unusual that it would be impossible to reliably trigger through the integration tests but which happen unpredictably in reality. Defining a module to work against multiple API versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This case is especially important for modules interacting with many different versions of software; for example, package installation modules that might be expected to work with many different operating system versions. By using previously stored data from various versions of an API we can ensure that the code is tested against the actual data which will be sent from that version of the system even when the version is very obscure and unlikely to be available during testing. Ansible special cases for unit testing ====================================== There are a number of special cases for unit testing the environment of an Ansible module. The most common are documented below, and suggestions for others can be found by looking at the source code of the existing unit tests or asking on the Ansible chat channel or mailing lists. For more information on joining chat channels and subscribing to mailing lists, see :ref:`communication`. Module argument processing -------------------------- There are two problems with running the main function of a module: * Since the module is supposed to accept arguments on ``STDIN`` it is a bit difficult to set up the arguments correctly so that the module will get them as parameters. * All modules should finish by calling either the :meth:`module.fail_json` or :meth:`module.exit_json`, but these won't work correctly in a testing environment. Passing Arguments ----------------- .. This section should be updated once https://github.com/ansible/ansible/pull/31456 is closed since the function below will be provided in a library file. To pass arguments to a module correctly, use the ``set_module_args`` method which accepts a dictionary as its parameter. Module creation and argument processing is handled through the :class:`AnsibleModule` object in the basic section of the utilities. Normally this accepts input on ``STDIN``, which is not convenient for unit testing. When the special variable is set it will be treated as if the input came on ``STDIN`` to the module. Simply call that function before setting up your module: .. code-block:: python import json from units.modules.utils import set_module_args from ansible.module_utils.common.text.converters import to_bytes def test_already_registered(self): set_module_args({ 'activationkey': 'key', 'username': 'user', 'password': 'pass', }) Handling exit correctly ----------------------- .. This section should be updated once https://github.com/ansible/ansible/pull/31456 is closed since the exit and failure functions below will be provided in a library file. The :meth:`module.exit_json` function won't work properly in a testing environment since it writes error information to ``STDOUT`` upon exit, where it is difficult to examine. This can be mitigated by replacing it (and :meth:`module.fail_json`) with a function that raises an exception: .. code-block:: python def exit_json(*args, **kwargs): if 'changed' not in kwargs: kwargs['changed'] = False raise AnsibleExitJson(kwargs) Now you can ensure that the first function called is the one you expected simply by testing for the correct exception: .. code-block:: python def test_returned_value(self): set_module_args({ 'activationkey': 'key', 'username': 'user', 'password': 'pass', }) with self.assertRaises(AnsibleExitJson) as result: my_module.main() The same technique can be used to replace :meth:`module.fail_json` (which is used for failure returns from modules) and for the ``aws_module.fail_json_aws()`` (used in modules for Amazon Web Services). Running the main function ------------------------- If you do want to run the actual main function of a module you must import the module, set the arguments as above, set up the appropriate exit exception and then run the module: .. code-block:: python # This test is based around pytest's features for individual test functions import pytest import ansible.modules.module.group.my_module as my_module def test_main_function(monkeypatch): monkeypatch.setattr(my_module.AnsibleModule, "exit_json", fake_exit_json) set_module_args({ 'activationkey': 'key', 'username': 'user', 'password': 'pass', }) my_module.main() Handling calls to external executables -------------------------------------- Module must use :meth:`AnsibleModule.run_command` in order to execute an external command. This method needs to be mocked: Here is a simple mock of :meth:`AnsibleModule.run_command` (taken from :file:`test/units/modules/packaging/os/test_rhn_register.py`): .. code-block:: python with patch.object(basic.AnsibleModule, 'run_command') as run_command: run_command.return_value = 0, '', '' # successful execution, no output with self.assertRaises(AnsibleExitJson) as result: my_module.main() self.assertFalse(result.exception.args[0]['changed']) # Check that run_command has been called run_command.assert_called_once_with('/usr/bin/command args') self.assertEqual(run_command.call_count, 1) self.assertFalse(run_command.called) A Complete Example ------------------ The following example is a complete skeleton that reuses the mocks explained above and adds a new mock for :meth:`Ansible.get_bin_path`: .. code-block:: python import json from units.compat import unittest from units.compat.mock import patch from ansible.module_utils import basic from ansible.module_utils.common.text.converters import to_bytes from ansible.modules.namespace import my_module def set_module_args(args): """prepare arguments so that they will be picked up during module creation""" args = json.dumps({'ANSIBLE_MODULE_ARGS': args}) basic._ANSIBLE_ARGS = to_bytes(args) class AnsibleExitJson(Exception): """Exception class to be raised by module.exit_json and caught by the test case""" pass class AnsibleFailJson(Exception): """Exception class to be raised by module.fail_json and caught by the test case""" pass def exit_json(*args, **kwargs): """function to patch over exit_json; package return data into an exception""" if 'changed' not in kwargs: kwargs['changed'] = False raise AnsibleExitJson(kwargs) def fail_json(*args, **kwargs): """function to patch over fail_json; package return data into an exception""" kwargs['failed'] = True raise AnsibleFailJson(kwargs) def get_bin_path(self, arg, required=False): """Mock AnsibleModule.get_bin_path""" if arg.endswith('my_command'): return '/usr/bin/my_command' else: if required: fail_json(msg='%r not found !' % arg) class TestMyModule(unittest.TestCase): def setUp(self): self.mock_module_helper = patch.multiple(basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json, get_bin_path=get_bin_path) self.mock_module_helper.start() self.addCleanup(self.mock_module_helper.stop) def test_module_fail_when_required_args_missing(self): with self.assertRaises(AnsibleFailJson): set_module_args({}) my_module.main() def test_ensure_command_called(self): set_module_args({ 'param1': 10, 'param2': 'test', }) with patch.object(basic.AnsibleModule, 'run_command') as mock_run_command: stdout = 'configuration updated' stderr = '' rc = 0 mock_run_command.return_value = rc, stdout, stderr # successful execution with self.assertRaises(AnsibleExitJson) as result: my_module.main() self.assertFalse(result.exception.args[0]['changed']) # ensure result is changed mock_run_command.assert_called_once_with('/usr/bin/my_command --value 10 --name test') Restructuring modules to enable testing module set up and other processes ------------------------------------------------------------------------- Often modules have a ``main()`` function which sets up the module and then performs other actions. This can make it difficult to check argument processing. This can be made easier by moving module configuration and initialization into a separate function. For example: .. code-block:: python argument_spec = dict( # module function variables state=dict(choices=['absent', 'present', 'rebooted', 'restarted'], default='present'), apply_immediately=dict(type='bool', default=False), wait=dict(type='bool', default=False), wait_timeout=dict(type='int', default=600), allocated_storage=dict(type='int', aliases=['size']), db_instance_identifier=dict(aliases=["id"], required=True), ) def setup_module_object(): module = AnsibleAWSModule( argument_spec=argument_spec, required_if=required_if, mutually_exclusive=[['old_instance_id', 'source_db_instance_identifier', 'db_snapshot_identifier']], ) return module def main(): module = setup_module_object() validate_parameters(module) conn = setup_client(module) return_dict = run_task(module, conn) module.exit_json(**return_dict) This now makes it possible to run tests against the module initiation function: .. code-block:: python def test_rds_module_setup_fails_if_db_instance_identifier_parameter_missing(): # db_instance_identifier parameter is missing set_module_args({ 'state': 'absent', 'apply_immediately': 'True', }) with self.assertRaises(AnsibleFailJson) as result: my_module.setup_json See also ``test/units/module_utils/aws/test_rds.py`` Note that the ``argument_spec`` dictionary is visible in a module variable. This has advantages, both in allowing explicit testing of the arguments and in allowing the easy creation of module objects for testing. The same restructuring technique can be valuable for testing other functionality, such as the part of the module which queries the object that the module configures. Traps for maintaining Python 2 compatibility ============================================ If you use the ``mock`` library from the Python 2.6 standard library, a number of the assert functions are missing but will return as if successful. This means that test cases should take great care *not* use functions marked as _new_ in the Python 3 documentation, since the tests will likely always succeed even if the code is broken when run on older versions of Python. A helpful development approach to this should be to ensure that all of the tests have been run under Python 2.6 and that each assertion in the test cases has been checked to work by breaking the code in Ansible to trigger that failure. .. warning:: Maintain Python 2.6 compatibility Please remember that modules need to maintain compatibility with Python 2.6 so the unittests for modules should also be compatible with Python 2.6. .. seealso:: :ref:`testing_units` Ansible unit tests documentation :ref:`testing_running_locally` Running tests locally including gathering and reporting coverage data :ref:`developing_modules_general` Get started developing a module `Python 3 documentation - 26.4. unittest — Unit testing framework `_ The documentation of the unittest framework in python 3 `Python 2 documentation - 25.3. unittest — Unit testing framework `_ The documentation of the earliest supported unittest framework - from Python 2.6 `pytest: helps you write better programs `_ The documentation of pytest - the framework actually used to run Ansible unit tests `Development Mailing List `_ Mailing list for development topics `Testing Your Code (from The Hitchhiker's Guide to Python!) `_ General advice on testing Python code `Uncle Bob's many videos on YouTube `_ Unit testing is a part of the of various philosophies of software development, including Extreme Programming (XP), Clean Coding. Uncle Bob talks through how to benefit from this `"Why Most Unit Testing is Waste" `_ An article warning against the costs of unit testing `'A Response to "Why Most Unit Testing is Waste"' `_ An response pointing to how to maintain the value of unit tests ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/dev_guide/testing_validate-modules.rst0000644000000000000000000005057500000000000026765 0ustar00rootroot00000000000000:orphan: .. _testing_validate-modules: **************** validate-modules **************** .. contents:: Topics Python program to help test or validate Ansible modules. ``validate-modules`` is one of the ``ansible-test`` Sanity Tests, see :ref:`testing_sanity` for more information. Originally developed by Matt Martz (@sivel) Usage ===== .. code:: shell cd /path/to/ansible/source source hacking/env-setup ansible-test sanity --test validate-modules Help ==== .. code:: shell usage: validate-modules [-h] [-w] [--exclude EXCLUDE] [--arg-spec] [--base-branch BASE_BRANCH] [--format {json,plain}] [--output OUTPUT] modules [modules ...] positional arguments: modules Path to module or module directory optional arguments: -h, --help show this help message and exit -w, --warnings Show warnings --exclude EXCLUDE RegEx exclusion pattern --arg-spec Analyze module argument spec --base-branch BASE_BRANCH Used in determining if new options were added --format {json,plain} Output format. Default: "plain" --output OUTPUT Output location, use "-" for stdout. Default "-" Extending validate-modules ========================== The ``validate-modules`` tool has a `schema.py `_ that is used to validate the YAML blocks, such as ``DOCUMENTATION`` and ``RETURNS``. Codes ===== ============================================================ ================== ==================== ========================================================================================= **Error Code** **Type** **Level** **Sample Message** ------------------------------------------------------------ ------------------ -------------------- ----------------------------------------------------------------------------------------- ansible-deprecated-module Documentation Error A module is deprecated and supposed to be removed in the current or an earlier Ansible version collection-deprecated-module Documentation Error A module is deprecated and supposed to be removed in the current or an earlier collection version ansible-deprecated-version Documentation Error A feature is deprecated and supposed to be removed in the current or an earlier Ansible version ansible-module-not-initialized Syntax Error Execution of the module did not result in initialization of AnsibleModule collection-deprecated-version Documentation Error A feature is deprecated and supposed to be removed in the current or an earlier collection version deprecated-date Documentation Error A date before today appears as ``removed_at_date`` or in ``deprecated_aliases`` deprecation-mismatch Documentation Error Module marked as deprecated or removed in at least one of the filename, its metadata, or in DOCUMENTATION (setting DOCUMENTATION.deprecated for deprecation or removing all Documentation for removed) but not in all three places. doc-choices-do-not-match-spec Documentation Error Value for "choices" from the argument_spec does not match the documentation doc-choices-incompatible-type Documentation Error Choices value from the documentation is not compatible with type defined in the argument_spec doc-default-does-not-match-spec Documentation Error Value for "default" from the argument_spec does not match the documentation doc-default-incompatible-type Documentation Error Default value from the documentation is not compatible with type defined in the argument_spec doc-elements-invalid Documentation Error Documentation specifies elements for argument, when "type" is not ``list``. doc-elements-mismatch Documentation Error Argument_spec defines elements different than documentation does doc-missing-type Documentation Error Documentation doesn't specify a type but argument in ``argument_spec`` use default type (``str``) doc-required-mismatch Documentation Error argument in argument_spec is required but documentation says it is not, or vice versa doc-type-does-not-match-spec Documentation Error Argument_spec defines type different than documentation does documentation-error Documentation Error Unknown ``DOCUMENTATION`` error documentation-syntax-error Documentation Error Invalid ``DOCUMENTATION`` schema illegal-future-imports Imports Error Only the following ``from __future__`` imports are allowed: ``absolute_import``, ``division``, and ``print_function``. import-before-documentation Imports Error Import found before documentation variables. All imports must appear below ``DOCUMENTATION``/``EXAMPLES``/``RETURN`` import-error Documentation Error ``Exception`` attempting to import module for ``argument_spec`` introspection import-placement Locations Warning Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN`` imports-improper-location Imports Error Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN`` incompatible-choices Documentation Error Choices value from the argument_spec is not compatible with type defined in the argument_spec incompatible-default-type Documentation Error Default value from the argument_spec is not compatible with type defined in the argument_spec invalid-argument-name Documentation Error Argument in argument_spec must not be one of 'message', 'syslog_facility' as it is used internally by Ansible Core Engine invalid-argument-spec Documentation Error Argument in argument_spec must be a dictionary/hash when used invalid-argument-spec-options Documentation Error Suboptions in argument_spec are invalid invalid-documentation Documentation Error ``DOCUMENTATION`` is not valid YAML invalid-documentation-options Documentation Error ``DOCUMENTATION.options`` must be a dictionary/hash when used invalid-examples Documentation Error ``EXAMPLES`` is not valid YAML invalid-extension Naming Error Official Ansible modules must have a ``.py`` extension for python modules or a ``.ps1`` for powershell modules invalid-module-schema Documentation Error ``AnsibleModule`` schema validation error invalid-removal-version Documentation Error The version at which a feature is supposed to be removed cannot be parsed (for collections, it must be a semantic version, see https://semver.org/) invalid-requires-extension Naming Error Module ``#AnsibleRequires -CSharpUtil`` should not end in .cs, Module ``#Requires`` should not end in .psm1 missing-doc-fragment Documentation Error ``DOCUMENTATION`` fragment missing missing-existing-doc-fragment Documentation Warning Pre-existing ``DOCUMENTATION`` fragment missing missing-documentation Documentation Error No ``DOCUMENTATION`` provided missing-examples Documentation Error No ``EXAMPLES`` provided missing-gplv3-license Documentation Error GPLv3 license header not found missing-module-utils-basic-import Imports Warning Did not find ``ansible.module_utils.basic`` import missing-module-utils-import-csharp-requirements Imports Error No ``Ansible.ModuleUtils`` or C# Ansible util requirements/imports found missing-powershell-interpreter Syntax Error Interpreter line is not ``#!powershell`` missing-python-doc Naming Error Missing python documentation file missing-python-interpreter Syntax Error Interpreter line is not ``#!/usr/bin/python`` missing-return Documentation Error No ``RETURN`` documentation provided missing-return-legacy Documentation Warning No ``RETURN`` documentation provided for legacy module missing-suboption-docs Documentation Error Argument in argument_spec has sub-options but documentation does not define sub-options module-incorrect-version-added Documentation Error Module level ``version_added`` is incorrect module-invalid-version-added Documentation Error Module level ``version_added`` is not a valid version number module-utils-specific-import Imports Error ``module_utils`` imports should import specific components, not ``*`` multiple-utils-per-requires Imports Error ``Ansible.ModuleUtils`` requirements do not support multiple modules per statement multiple-csharp-utils-per-requires Imports Error Ansible C# util requirements do not support multiple utils per statement no-default-for-required-parameter Documentation Error Option is marked as required but specifies a default. Arguments with a default should not be marked as required no-log-needed Parameters Error Option name suggests that the option contains a secret value, while ``no_log`` is not specified for this option in the argument spec. If this is a false positive, explicitly set ``no_log=False`` nonexistent-parameter-documented Documentation Error Argument is listed in DOCUMENTATION.options, but not accepted by the module option-incorrect-version-added Documentation Error ``version_added`` for new option is incorrect option-invalid-version-added Documentation Error ``version_added`` for option is not a valid version number parameter-invalid Documentation Error Argument in argument_spec is not a valid python identifier parameter-invalid-elements Documentation Error Value for "elements" is valid only when value of "type" is ``list`` implied-parameter-type-mismatch Documentation Error Argument_spec implies ``type="str"`` but documentation defines it as different data type parameter-type-not-in-doc Documentation Error Type value is defined in ``argument_spec`` but documentation doesn't specify a type parameter-alias-repeated Parameters Error argument in argument_spec has at least one alias specified multiple times in aliases parameter-alias-self Parameters Error argument in argument_spec is specified as its own alias parameter-documented-multiple-times Documentation Error argument in argument_spec with aliases is documented multiple times parameter-list-no-elements Parameters Error argument in argument_spec "type" is specified as ``list`` without defining "elements" parameter-state-invalid-choice Parameters Error Argument ``state`` includes ``get``, ``list`` or ``info`` as a choice. Functionality should be in an ``_info`` or (if further conditions apply) ``_facts`` module. python-syntax-error Syntax Error Python ``SyntaxError`` while parsing module removal-version-must-be-major Documentation Error According to the semantic versioning specification (https://semver.org/), the only versions in which features are allowed to be removed are major versions (x.0.0) return-syntax-error Documentation Error ``RETURN`` is not valid YAML, ``RETURN`` fragments missing or invalid return-invalid-version-added Documentation Error ``version_added`` for return value is not a valid version number subdirectory-missing-init Naming Error Ansible module subdirectories must contain an ``__init__.py`` try-except-missing-has Imports Warning Try/Except ``HAS_`` expression missing undocumented-parameter Documentation Error Argument is listed in the argument_spec, but not documented in the module unidiomatic-typecheck Syntax Error Type comparison using ``type()`` found. Use ``isinstance()`` instead unknown-doc-fragment Documentation Warning Unknown pre-existing ``DOCUMENTATION`` error use-boto3 Imports Error ``boto`` import found, new modules should use ``boto3`` use-fail-json-not-sys-exit Imports Error ``sys.exit()`` call found. Should be ``exit_json``/``fail_json`` use-module-utils-urls Imports Error ``requests`` import found, should use ``ansible.module_utils.urls`` instead use-run-command-not-os-call Imports Error ``os.call`` used instead of ``module.run_command`` use-run-command-not-popen Imports Error ``subprocess.Popen`` used instead of ``module.run_command`` use-short-gplv3-license Documentation Error GPLv3 license header should be the :ref:`short form ` for new modules mutually_exclusive-type Documentation Error mutually_exclusive entry contains non-string value mutually_exclusive-collision Documentation Error mutually_exclusive entry has repeated terms mutually_exclusive-unknown Documentation Error mutually_exclusive entry contains option which does not appear in argument_spec (potentially an alias of an option?) required_one_of-type Documentation Error required_one_of entry contains non-string value required_one_of-collision Documentation Error required_one_of entry has repeated terms required_one_of-unknown Documentation Error required_one_of entry contains option which does not appear in argument_spec (potentially an alias of an option?) required_together-type Documentation Error required_together entry contains non-string value required_together-collision Documentation Error required_together entry has repeated terms required_together-unknown Documentation Error required_together entry contains option which does not appear in argument_spec (potentially an alias of an option?) required_if-is_one_of-type Documentation Error required_if entry has a fourth value which is not a bool required_if-requirements-type Documentation Error required_if entry has a third value (requirements) which is not a list or tuple required_if-requirements-collision Documentation Error required_if entry has repeated terms in requirements required_if-requirements-unknown Documentation Error required_if entry's requirements contains option which does not appear in argument_spec (potentially an alias of an option?) required_if-unknown-key Documentation Error required_if entry's key does not appear in argument_spec (potentially an alias of an option?) required_if-key-in-requirements Documentation Error required_if entry contains its key in requirements list/tuple required_if-value-type Documentation Error required_if entry's value is not of the type specified for its key required_by-collision Documentation Error required_by entry has repeated terms required_by-unknown Documentation Error required_by entry contains option which does not appear in argument_spec (potentially an alias of an option?) version-added-must-be-major-or-minor Documentation Error According to the semantic versioning specification (https://semver.org/), the only versions in which features are allowed to be added are major and minor versions (x.y.0) ============================================================ ================== ==================== ========================================================================================= ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.945559 ansible-core-2.12.0/docs/docsite/rst/galaxy/0000755000000000000000000000000000000000000020555 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/galaxy/dev_guide.rst0000644000000000000000000002246600000000000023254 0ustar00rootroot00000000000000.. _developing_galaxy: ********************** Galaxy Developer Guide ********************** You can host collections and roles on Galaxy to share with the Ansible community. Galaxy content is formatted in pre-packaged units of work such as :ref:`roles `, and new in Galaxy 3.2, :ref:`collections `. You can create roles for provisioning infrastructure, deploying applications, and all of the tasks you do everyday. Taking this a step further, you can create collections which provide a comprehensive package of automation that may include multiple playbooks, roles, modules, and plugins. .. contents:: :local: :depth: 2 .. _creating_collections_galaxy: Creating collections for Galaxy =============================== Collections are a distribution format for Ansible content. You can use collections to package and distribute playbooks, roles, modules, and plugins. You can publish and use collections through `Ansible Galaxy `_. See :ref:`developing_collections` for details on how to create collections. .. _creating_roles_galaxy: Creating roles for Galaxy ========================= Use the ``init`` command to initialize the base structure of a new role, saving time on creating the various directories and main.yml files a role requires .. code-block:: bash $ ansible-galaxy init role_name The above will create the following directory structure in the current working directory: .. code-block:: text role_name/ README.md .travis.yml defaults/ main.yml files/ handlers/ main.yml meta/ main.yml templates/ tests/ inventory test.yml vars/ main.yml If you want to create a repository for the role, the repository root should be `role_name`. Force ----- If a directory matching the name of the role already exists in the current working directory, the init command will result in an error. To ignore the error use the ``--force`` option. Force will create the above subdirectories and files, replacing anything that matches. Container enabled ----------------- If you are creating a Container Enabled role, pass ``--type container`` to ``ansible-galaxy init``. This will create the same directory structure as above, but populate it with default files appropriate for a Container Enabled role. For instance, the README.md has a slightly different structure, the *.travis.yml* file tests the role using `Ansible Container `_, and the meta directory includes a *container.yml* file. Using a custom role skeleton ---------------------------- A custom role skeleton directory can be supplied as follows: .. code-block:: bash $ ansible-galaxy init --role-skeleton=/path/to/skeleton role_name When a skeleton is provided, init will: - copy all files and directories from the skeleton to the new role - any .j2 files found outside of a templates folder will be rendered as templates. The only useful variable at the moment is role_name - The .git folder and any .git_keep files will not be copied Alternatively, the role_skeleton and ignoring of files can be configured via ansible.cfg .. code-block:: text [galaxy] role_skeleton = /path/to/skeleton role_skeleton_ignore = ^.git$,^.*/.git_keep$ Authenticate with Galaxy ------------------------ Using the ``import``, ``delete`` and ``setup`` commands to manage your roles on the Galaxy website requires authentication, and the ``login`` command can be used to do just that. Before you can use the ``login`` command, you must create an account on the Galaxy website. The ``login`` command requires using your GitHub credentials. You can use your username and password, or you can create a `personal access token `_. If you choose to create a token, grant minimal access to the token, as it is used just to verify identify. The following shows authenticating with the Galaxy website using a GitHub username and password: .. code-block:: text $ ansible-galaxy login We need your GitHub login to identify you. This information will not be sent to Galaxy, only to api.github.com. The password will not be displayed. Use --github-token if you do not want to enter your password. GitHub Username: dsmith Password for dsmith: Successfully logged into Galaxy as dsmith When you choose to use your username and password, your password is not sent to Galaxy. It is used to authenticates with GitHub and create a personal access token. It then sends the token to Galaxy, which in turn verifies that your identity and returns a Galaxy access token. After authentication completes the GitHub token is destroyed. If you do not want to use your GitHub password, or if you have two-factor authentication enabled with GitHub, use the ``--github-token`` option to pass a personal access token that you create. Import a role ------------- The ``import`` command requires that you first authenticate using the ``login`` command. Once authenticated you can import any GitHub repository that you own or have been granted access. Use the following to import to role: .. code-block:: bash $ ansible-galaxy import github_user github_repo By default the command will wait for Galaxy to complete the import process, displaying the results as the import progresses: .. code-block:: text Successfully submitted import request 41 Starting import 41: role_name=myrole repo=githubuser/ansible-role-repo ref= Retrieving GitHub repo githubuser/ansible-role-repo Accessing branch: devel Parsing and validating meta/main.yml Parsing galaxy_tags Parsing platforms Adding dependencies Parsing and validating README.md Adding repo tags as role versions Import completed Status SUCCESS : warnings=0 errors=0 Branch ^^^^^^ Use the ``--branch`` option to import a specific branch. If not specified, the default branch for the repo will be used. Role name ^^^^^^^^^ By default the name given to the role will be derived from the GitHub repository name. However, you can use the ``--role-name`` option to override this and set the name. No wait ^^^^^^^ If the ``--no-wait`` option is present, the command will not wait for results. Results of the most recent import for any of your roles is available on the Galaxy web site by visiting *My Imports*. Delete a role ------------- The ``delete`` command requires that you first authenticate using the ``login`` command. Once authenticated you can remove a role from the Galaxy web site. You are only allowed to remove roles where you have access to the repository in GitHub. Use the following to delete a role: .. code-block:: bash $ ansible-galaxy delete github_user github_repo This only removes the role from Galaxy. It does not remove or alter the actual GitHub repository. Travis integrations ------------------- You can create an integration or connection between a role in Galaxy and `Travis `_. Once the connection is established, a build in Travis will automatically trigger an import in Galaxy, updating the search index with the latest information about the role. You create the integration using the ``setup`` command, but before an integration can be created, you must first authenticate using the ``login`` command; you will also need an account in Travis, and your Travis token. Once you're ready, use the following command to create the integration: .. code-block:: bash $ ansible-galaxy setup travis github_user github_repo xxx-travis-token-xxx The setup command requires your Travis token, however the token is not stored in Galaxy. It is used along with the GitHub username and repo to create a hash as described in `the Travis documentation `_. The hash is stored in Galaxy and used to verify notifications received from Travis. The setup command enables Galaxy to respond to notifications. To configure Travis to run a build on your repository and send a notification, follow the `Travis getting started guide `_. To instruct Travis to notify Galaxy when a build completes, add the following to your .travis.yml file: .. code-block:: text notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ List Travis integrations ^^^^^^^^^^^^^^^^^^^^^^^^ Use the ``--list`` option to display your Travis integrations: .. code-block:: bash $ ansible-galaxy setup --list ID Source Repo ---------- ---------- ---------- 2 travis github_user/github_repo 1 travis github_user/github_repo Remove Travis integrations ^^^^^^^^^^^^^^^^^^^^^^^^^^ Use the ``--remove`` option to disable and remove a Travis integration: .. code-block:: bash $ ansible-galaxy setup --remove ID Provide the ID of the integration to be disabled. You can find the ID by using the ``--list`` option. .. seealso:: :ref:`collections` Shareable collections of modules, playbooks and roles :ref:`playbooks_reuse_roles` All about ansible roles `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/galaxy/user_guide.rst0000644000000000000000000004256400000000000023455 0ustar00rootroot00000000000000.. _using_galaxy: .. _ansible_galaxy: ***************** Galaxy User Guide ***************** :dfn:`Ansible Galaxy` refers to the `Galaxy `_ website, a free site for finding, downloading, and sharing community developed roles. Use Galaxy to jump-start your automation project with great content from the Ansible community. Galaxy provides pre-packaged units of work such as :ref:`roles `, and new in Galaxy 3.2, :ref:`collections ` You can find roles for provisioning infrastructure, deploying applications, and all of the tasks you do everyday. The collection format provides a comprehensive package of automation that may include multiple playbooks, roles, modules, and plugins. .. contents:: :local: :depth: 2 .. _finding_galaxy_collections: Finding collections on Galaxy ============================= To find collections on Galaxy: #. Click the :guilabel:`Search` icon in the left-hand navigation. #. Set the filter to *collection*. #. Set other filters and press :guilabel:`enter`. Galaxy presents a list of collections that match your search criteria. .. _installing_galaxy_collections: Installing collections ====================== Installing a collection from Galaxy ----------------------------------- .. include:: ../shared_snippets/installing_collections.txt .. _installing_ah_collection: Downloading a collection from Automation Hub ---------------------------------------------------- You can download collections from Automation Hub at the command line. Automation Hub content is available to subscribers only, so you must download an API token and configure your local environment to provide it before you can you download collections. To download a collection from Automation Hub with the ``ansible-galaxy`` command: 1. Get your Automation Hub API token. Go to https://cloud.redhat.com/ansible/automation-hub/token/ and click :guilabel:`Get API token` from the version dropdown to copy your API token. 2. Configure Red Hat Automation Hub server in the ``server_list`` option under the ``[galaxy]`` section in your :file:`ansible.cfg` file. .. code-block:: ini [galaxy] server_list = automation_hub [galaxy_server.automation_hub] url=https://console.redhat.com/api/automation-hub/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token=my_ah_token 3. Download the collection hosted in Automation Hub. .. code-block:: bash ansible-galaxy collection install my_namespace.my_collection .. seealso:: `Getting started with Automation Hub `_ An introduction to Automation Hub Installing an older version of a collection ------------------------------------------- .. include:: ../shared_snippets/installing_older_collection.txt Install multiple collections with a requirements file ----------------------------------------------------- .. include:: ../shared_snippets/installing_multiple_collections.txt Downloading a collection for offline use ----------------------------------------- .. include:: ../shared_snippets/download_tarball_collections.txt Installing a collection from a git repository --------------------------------------------- .. include:: ../shared_snippets/installing_collections_git_repo.txt Listing installed collections ----------------------------- To list installed collections, run ``ansible-galaxy collection list``. See :ref:`collections_listing` for more details. Configuring the ``ansible-galaxy`` client ------------------------------------------ .. include:: ../shared_snippets/galaxy_server_list.txt .. _finding_galaxy_roles: Finding roles on Galaxy ======================= Search the Galaxy database by tags, platforms, author and multiple keywords. For example: .. code-block:: bash $ ansible-galaxy search elasticsearch --author geerlingguy The search command will return a list of the first 1000 results matching your search: .. code-block:: text Found 2 roles matching your search: Name Description ---- ----------- geerlingguy.elasticsearch Elasticsearch for Linux. geerlingguy.elasticsearch-curator Elasticsearch curator for Linux. Get more information about a role --------------------------------- Use the ``info`` command to view more detail about a specific role: .. code-block:: bash $ ansible-galaxy info username.role_name This returns everything found in Galaxy for the role: .. code-block:: text Role: username.role_name description: Installs and configures a thing, a distributed, highly available NoSQL thing. active: True commit: c01947b7bc89ebc0b8a2e298b87ab416aed9dd57 commit_message: Adding travis commit_url: https://github.com/username/repo_name/commit/c01947b7bc89ebc0b8a2e298b87ab company: My Company, Inc. created: 2015-12-08T14:17:52.773Z download_count: 1 forks_count: 0 github_branch: github_repo: repo_name github_user: username id: 6381 is_valid: True issue_tracker_url: license: Apache min_ansible_version: 1.4 modified: 2015-12-08T18:43:49.085Z namespace: username open_issues_count: 0 path: /Users/username/projects/roles scm: None src: username.repo_name stargazers_count: 0 travis_status_url: https://travis-ci.org/username/repo_name.svg?branch=main version: watchers_count: 1 .. _installing_galaxy_roles: Installing roles from Galaxy ============================ The ``ansible-galaxy`` command comes bundled with Ansible, and you can use it to install roles from Galaxy or directly from a git based SCM. You can also use it to create a new role, remove roles, or perform tasks on the Galaxy website. The command line tool by default communicates with the Galaxy website API using the server address *https://galaxy.ansible.com*. If you run your own internal Galaxy server and want to use it instead of the default one, pass the ``--server`` option following the address of this galaxy server. You can set permanently this option by setting the Galaxy server value in your ``ansible.cfg`` file to use it . For information on setting the value in *ansible.cfg* see :ref:`galaxy_server`. Installing roles ---------------- Use the ``ansible-galaxy`` command to download roles from the `Galaxy website `_ .. code-block:: bash $ ansible-galaxy install namespace.role_name Setting where to install roles ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, Ansible downloads roles to the first writable directory in the default list of paths ``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``. This installs roles in the home directory of the user running ``ansible-galaxy``. You can override this with one of the following options: * Set the environment variable :envvar:`ANSIBLE_ROLES_PATH` in your session. * Use the ``--roles-path`` option for the ``ansible-galaxy`` command. * Define ``roles_path`` in an ``ansible.cfg`` file. The following provides an example of using ``--roles-path`` to install the role into the current working directory: .. code-block:: bash $ ansible-galaxy install --roles-path . geerlingguy.apache .. seealso:: :ref:`intro_configuration` All about configuration files Installing a specific version of a role --------------------------------------- When the Galaxy server imports a role, it imports any git tags matching the `Semantic Version `_ format as versions. In turn, you can download a specific version of a role by specifying one of the imported tags. To see the available versions for a role: #. Locate the role on the Galaxy search page. #. Click on the name to view more details, including the available versions. You can also navigate directly to the role using the //. For example, to view the role geerlingguy.apache, go to ``_. To install a specific version of a role from Galaxy, append a comma and the value of a GitHub release tag. For example: .. code-block:: bash $ ansible-galaxy install geerlingguy.apache,1.0.0 It is also possible to point directly to the git repository and specify a branch name or commit hash as the version. For example, the following will install a specific commit: .. code-block:: bash $ ansible-galaxy install git+https://github.com/geerlingguy/ansible-role-apache.git,0b7cd353c0250e87a26e0499e59e7fd265cc2f25 Installing multiple roles from a file ------------------------------------- You can install multiple roles by including the roles in a :file:`requirements.yml` file. The format of the file is YAML, and the file extension must be either *.yml* or *.yaml*. Use the following command to install roles included in :file:`requirements.yml:` .. code-block:: bash $ ansible-galaxy install -r requirements.yml Again, the extension is important. If the *.yml* extension is left off, the ``ansible-galaxy`` CLI assumes the file is in an older, now deprecated, "basic" format. Each role in the file will have one or more of the following attributes: src The source of the role. Use the format *namespace.role_name*, if downloading from Galaxy; otherwise, provide a URL pointing to a repository within a git based SCM. See the examples below. This is a required attribute. scm Specify the SCM. As of this writing only *git* or *hg* are allowed. See the examples below. Defaults to *git*. version: The version of the role to download. Provide a release tag value, commit hash, or branch name. Defaults to the branch set as a default in the repository, otherwise defaults to the *master*. name: Download the role to a specific name. Defaults to the Galaxy name when downloading from Galaxy, otherwise it defaults to the name of the repository. Use the following example as a guide for specifying roles in *requirements.yml*: .. code-block:: yaml # from galaxy - name: yatesr.timezone # from locally cloned git repository (git+file:// requires full paths) - src: git+file:///home/bennojoy/nginx # from GitHub - src: https://github.com/bennojoy/nginx # from GitHub, overriding the name and specifying a specific tag - name: nginx_role src: https://github.com/bennojoy/nginx version: main # from GitHub, specifying a specific commit hash - src: https://github.com/bennojoy/nginx version: "ee8aa41" # from a webserver, where the role is packaged in a tar.gz - name: http-role-gz src: https://some.webserver.example.com/files/main.tar.gz # from a webserver, where the role is packaged in a tar.bz2 - name: http-role-bz2 src: https://some.webserver.example.com/files/main.tar.bz2 # from a webserver, where the role is packaged in a tar.xz (Python 3.x only) - name: http-role-xz src: https://some.webserver.example.com/files/main.tar.xz # from Bitbucket - src: git+https://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 # from Bitbucket, alternative syntax and caveats - src: https://bitbucket.org/willthames/hg-ansible-galaxy scm: hg # from GitLab or other git-based scm, using git+ssh - src: git@gitlab.company.com:mygroup/ansible-core.git scm: git version: "0.1" # quoted, so YAML doesn't parse this as a floating-point value .. warning:: Embedding credentials into a SCM URL is not secure. Make sure to use safe auth options for security reasons. For example, use `SSH `_, `netrc `_ or `http.extraHeader `_/`url..pushInsteadOf `_ in Git config to prevent your creds from being exposed in logs. Installing roles and collections from the same requirements.yml file --------------------------------------------------------------------- You can install roles and collections from the same requirements files .. code-block:: yaml --- roles: # Install a role from Ansible Galaxy. - name: geerlingguy.java version: 1.9.6 collections: # Install a collection from Ansible Galaxy. - name: geerlingguy.php_roles version: 0.9.3 source: https://galaxy.ansible.com Installing multiple roles from multiple files --------------------------------------------- For large projects, the ``include`` directive in a :file:`requirements.yml` file provides the ability to split a large file into multiple smaller files. For example, a project may have a :file:`requirements.yml` file, and a :file:`webserver.yml` file. Below are the contents of the :file:`webserver.yml` file: .. code-block:: bash # from github - src: https://github.com/bennojoy/nginx # from Bitbucket - src: git+https://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 The following shows the contents of the :file:`requirements.yml` file that now includes the :file:`webserver.yml` file: .. code-block:: bash # from galaxy - name: yatesr.timezone - include: /webserver.yml To install all the roles from both files, pass the root file, in this case :file:`requirements.yml` on the command line, as follows: .. code-block:: bash $ ansible-galaxy install -r requirements.yml .. _galaxy_dependencies: Dependencies ------------ Roles can also be dependent on other roles, and when you install a role that has dependencies, those dependencies will automatically be installed to the ``roles_path``. There are two ways to define the dependencies of a role: * using ``meta/requirements.yml`` * using ``meta/main.yml`` Using ``meta/requirements.yml`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. versionadded:: 2.10 You can create the file ``meta/requirements.yml`` and define dependencies in the same format used for :file:`requirements.yml` described in the `Installing multiple roles from a file`_ section. From there, you can import or include the specified roles in your tasks. Using ``meta/main.yml`` ^^^^^^^^^^^^^^^^^^^^^^^ Alternatively, you can specify role dependencies in the ``meta/main.yml`` file by providing a list of roles under the ``dependencies`` section. If the source of a role is Galaxy, you can simply specify the role in the format ``namespace.role_name``. You can also use the more complex format in :file:`requirements.yml`, allowing you to provide ``src``, ``scm``, ``version``, and ``name``. Dependencies installed that way, depending on other factors described below, will also be executed **before** this role is executed during play execution. To better understand how dependencies are handled during play execution, see :ref:`playbooks_reuse_roles`. The following shows an example ``meta/main.yml`` file with dependent roles: .. code-block:: yaml --- dependencies: - geerlingguy.java galaxy_info: author: geerlingguy description: Elasticsearch for Linux. company: "Midwestern Mac, LLC" license: "license (BSD, MIT)" min_ansible_version: 2.4 platforms: - name: EL versions: - all - name: Debian versions: - all - name: Ubuntu versions: - all galaxy_tags: - web - system - monitoring - logging - lucene - elk - elasticsearch Tags are inherited *down* the dependency chain. In order for tags to be applied to a role and all its dependencies, the tag should be applied to the role, not to all the tasks within a role. Roles listed as dependencies are subject to conditionals and tag filtering, and may not execute fully depending on what tags and conditionals are applied. If the source of a role is Galaxy, specify the role in the format *namespace.role_name*: .. code-block:: yaml dependencies: - geerlingguy.apache - geerlingguy.ansible Alternately, you can specify the role dependencies in the complex form used in :file:`requirements.yml` as follows: .. code-block:: yaml dependencies: - name: geerlingguy.ansible - name: composer src: git+https://github.com/geerlingguy/ansible-role-composer.git version: 775396299f2da1f519f0d8885022ca2d6ee80ee8 .. note:: Galaxy expects all role dependencies to exist in Galaxy, and therefore dependencies to be specified in the ``namespace.role_name`` format. If you import a role with a dependency where the ``src`` value is a URL, the import process will fail. List installed roles -------------------- Use ``list`` to show the name and version of each role installed in the *roles_path*. .. code-block:: bash $ ansible-galaxy list - ansible-network.network-engine, v2.7.2 - ansible-network.config_manager, v2.6.2 - ansible-network.cisco_nxos, v2.7.1 - ansible-network.vyos, v2.7.3 - ansible-network.cisco_ios, v2.7.0 Remove an installed role ------------------------ Use ``remove`` to delete a role from *roles_path*: .. code-block:: bash $ ansible-galaxy remove namespace.role_name .. seealso:: :ref:`collections` Shareable collections of modules, playbooks and roles :ref:`playbooks_reuse_roles` Reusable tasks, handlers, and other files in a known directory structure ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.945559 ansible-core-2.12.0/docs/docsite/rst/images/0000755000000000000000000000000000000000000020535 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/images/cow.png0000644000000000000000000001322100000000000022032 0ustar00rootroot00000000000000‰PNG  IHDR—‚">ísBITÛáOàPLTE3f™Ìÿ3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3ÌffÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿËñýÛÁ’gšÌÛÏÄöݯ »Õ{Pi¡ÑÌŸnããæù÷öøû÷‡ZAøûÿ/,˜¶Á•j6ëèÎÞÕÓÒÒÒï÷ü‚yÔÕÙÍÓáþûûøûûûûûûûÿš¦¼O\cXB?Õðí¤¶¶\\\\[OœtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIÚ½. pHYsÄÄ•+IDATxœí±~£¸‡IŠL5/áÛlR%Så Ryš§šTóI³¤Š§ržãÚ͵SåAì ¿Î•„dƒ9 ÿï÷ÛM4ŽÀŸ…p’ìàG2t°/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%àˆÕËln²A ¥^Jo-½Ü&&s”Pê¥ôÚÖËËYÉÏ«5J(õRjÛ_00ðp^ŽÀKÀ‘á¼Ül =»À3ίȚ¦ë‘›Ú¼wXÁ'Óðr5ÿ㨺ª&œV?f?~½Û—¹X›3Wïûlâ›&øtüW΋| ©¹lT{Jn»„ÌžeÌ›ö+vŒ×l>_Ø—Ô½Ü%Ƀ½æ¶špJÕìÓù»m™“©1q%VÍîFååz6›&ßBj.ÕR×GrhCIrùŸ¹c¼Zð/a6M.ìKê^.MÝÈ&îJ÷ÄÛ<_c™›9g%äTsW£órúQYª=ÿìäÉS—¾òˆx„æ·ËÊÖåMÍKqvu´é¥œ u.ÞUÿ÷ÚXÞ\xy\µÃ|D·×™@/E‡ißÛš—ËäÌÞ]n“ó¹æŽË>ò¡±L°SÃGgs‹fˆõ럗—å±[‰Âµu´±šo–?.¯ô²l>…ûbl¾«Ý¿­‹á­s++=’)†4ÙËåµX±ø·7³Ž1nÖ+’bͽ؋k½!÷>ì©pfôZIW+FìjX^lr5[Ǭ¶ïtwç'×媵x´ÕOÔÇzöÇöyÖÚbFÛø™\¸^ì­½{¢^ Yì}¿ðú¡èsóS}ZŽãÍey$ÇP`_ó2ç¦ØˆÂòý³¹lJJå­üWÿVD¸¯Å ¿ÅÞèBGP«?5VK~W¿¾6"ˆ¯äL•oýû@÷F¯•òjr¬¤Žâ±ÅòHÜXöÝ~Ìòª4mu 3^¹žïS¹iîCñÑœD]ÆQ/ÅѰ¾§îÊKq_'É$ùú^_¶oååÅb5Ñ“äz³™&¥¤é¢æz¢CLÏ~m6Åzòè<ȱn¾Ì³•â‹™ªAˆÜæ¯Í*Ñ[¹+–5>€ÇòŸ¶j·j”÷‹ùäÖ½¹ï$ºQÊ«-Ë éÍ|5-½$Ǭ¶ï”•¬v½X,6Í´Õ5Ìx²óQÛR¯Öa½X߉…‹…ûÄi«¼ÄKgw¹“}EáÞ“:ˆšú‰,Û·ñR ¢WÜêïdn E×CþÝÏÿ1/s Ò€­ä+躦þáñ²j°ú­A”ÏÔªïþètS4:ý¡FfbÀþ½Z15¼4ŽÝ÷&©ñ•"H«½+¦º–zÖϯŒ:¾t:G¼tìEû¾U×N©8¾¢,.ÝÉ2¹‘«Ùu˜—Õ´ì,šNë*âÃ2–eÿêõÔ<ƒïÛŠÖeY|¦y'Õ—ª—T­NåY¯akœã¼Ñ÷Tq3:-ÉCûLÏœ¦—䘙ûÞ¤Ú›ZÒjLX m©Ghqõ&.i,çhÓKçÅQ¾jååÍZþš·….;ÜÃKÃ…´‘4YÔÔûž½ƒž4ÿ²é*¾­è&¦Å‡ÿÕhÇK5ªœþuþž×©G0÷Û}ßèzËŸ´¤¦“ÄÔÁô’3sß›˜^’‡>-ÓKq¾ÿc½ýCÛRÐÂKû饫¹º«ýŸÕ¦Éùß²ïXêéqsÙ!Ü^ž]æ4›PÔ\+/ÕõÒQO¯§ö)+úK÷Vä·îF:Ôàï©<Žz›N/Å`Kä^wʶz„­Ñ7z£“}§ÑiI{iž^šûÞ¤Ú›ZÒjïŠÙ£j̹%mK=B›Ù.ëùÅôòѱ­êâNyà.Þu×S[v¸ ./ÝÑ¢æV÷ÏÅ(._ï»QÅ·•|ÿ‹cPÔ<襌°N®’Ûµ:kÖ#P/ýCªjÈE£Ó’ÚÁ%9Ñ:½4÷½ 9›½”—A3ýq×°~]¼ÜÙ:LÃË­ëB2»kxùZô¢µe2Ì|áºÃîóÒ½¢æï|ÝüS,Î^ÆzåøÒw0ä ãQä—úPçÇS·¥ÈÖZ|ñ|¶™Š1ß%õÒÿQTýNKêeSó[îôÒÜ÷&æyœDhã¥äÅ:U;Óá×=j¥fss±ý:² 8Wïò‰K2x6Îãá×ãd¿Ü½­¨©ö1ýê»kºG)/cÌ.ÒêË£kêk|z‘N‘sjU[;ÍOø@t£.NKù'º†ÃËC;mzI"´õÒj¾µ-e„Vw­lÇ=ñ.µ7ïQÖŸ}p£¼ïâ¥Ø¡s)öæŸæ¤¾³ô’·ïE}ÖÚ“|=݃{·’7²/k¾Ê‹ú¢£%i uB^üëÖÁü„D—ÛøöööÖŒNJÕ¼z±•ª·³¥se i„^ñÒ‡7ùÛ…\³-fÕo?bgéßBJéÞ¶yàX/•hÉ߉íY°r¨ Ú' 9›”á—dáÙÊ>¿ct!É—òú¢ÜŠå›©æ³¢ÿªE Ÿ°?ºî¯ËkÝ,}Õ•Ì–ÉRí˜Ñ}·„+÷†FðyI≓S’ˆ+LÛ £¥-F„âº#à’coA–^ZGŸtíÉ™³S¦,¬ËyY=·q¦÷+oÒîµ#–»ËâÜ˽ÔSiòÆOr¶(Žº,^,б¿{+y¬ê‹¯6“ü*—äÛ´ °É°¶aK¾ÌþèbS“âØÐ褴,/gô|«é%=ftß›{[í ·uwAÔËåÄõmµ¶¥Š°×O†yYM{–”^¾øÇ56=ØÊáË9‘Ý]^â ¸qdyIê•ìïdúrcørNdß[»8fn’Zþܾœræ^'®,/I£š¥WõçÆðåœ@ ¼¸&ºëÏ73ìåÆðåœ@ |8³¼Ô½ Lüû19'ÀØqfy©{ÙÌ|@_¸³¼à½3Àx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðpÄê¥|²€Ø“BK/·‰É5J(}PéVÿ]…;Au—÷(¡ôA¥ÓK_.JŒ/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀ‘¡¼Ìæóî£|=ÿóá5+órê}\Ù‹ü›aɶÃk^ vüö5<ìܾ&`Æ`^ÚÿŒjÈŠwI2›„X^pc¸ëëŸ>Lö({@ÑžúCÒá5;†óRôf7VKó³9ú{¨á5;œ'êÔaŠ•nŠ_üã€ðš€zÙ©ÃÜ•oÃûß‹oSðcÈyõer†‘°2¤—î¿ÂÆÎ ÷!—ø[»ÀΠ^:ÿÊ/;Ã>·‘¢ÃV†õr‹»„ÀÊÀϹ¥˜ó6öRt˜¿‡m`ÉÐÏ?á^ °0´—ÝwŸ™¡½Ì¦G<¸›ÍM6¤„;IQ3´—GAómÏI ½pÔÄíåå¬äçÕš”Ð_FMÔ^‚O ¼—€#‘zø¤/Ž•8½ œõÄäh´ðð²mö§ÀIÏ´|Sã¨üàä0ñ²]öà~°ªxL~pzxxÙòŒ›ßT¯î&áœL¼l•}£Å{AÕ›ó{€!`âe«—ÉÉkAÙËåõåý›µ¤þ]®…3¸xÙæeò¥Ñóíôß ^XJùfª_»ä÷ƒÀÅË6Ý™1¼”©±~mVBÅ·FI×-eD‡l¼lÑ¥ÕðR¿ dý¡ëš£ÃŒ6^†gß0ý*†šùcï´¤0/Ý‘ß#øx~•ýTU,†šKíåWò¯{éå·ÀÐðñ2<û†áÚSi¢\—–t]cvù=¢‘—ÁÙ7 /‹_sãhIñhnù=¢‘—ÁÙ7–ÕKçů¹‘´$©º‘ß#8yš}ø¥¨ç~„~7R­j›`h8yš}Ãx‡R(xþºÏþ-…4JùéÍGä÷ˆV^†fß0Æ¢‹L¾ˆÿ¾YJä6d»``Xyš}ø»¸_«[¿¬%s$Ú.^^†>ŒF|£éÓÍ’éoË`Xxyš}#K¯BìÚý¸·Fðåéø˜î+ //O„/OÇÇ”Ð'É8½ôäéø˜úË#¥—€=ðp^ŽDêeù6í£;qzE¾ L•Aœ^2Ê·1ŸÏ]wÜF_Íÿ ˆ(½d”oCN…ºQ:}§VE&QzÉ(߯ÒxJ¤mtýø Î÷bô’S¾Gá¥óYcôb7 ÄBŒ^¶xM§ï|bûó;ç£sþèËä콿–ENœ^÷/}çÛ_‘Ô¹]oôê_ðb{“½ ^öžoC¾Iäé¾}Ñ—UVt˜ âô2ü%~óm¨!¢çºÅÝ,£Ãl¡—­>Å~óm(%E{\³©žè¤D&:ziæÛ8H¿ù6„wï¾—ÙÜÑéE82Ô‰ÑËÔ=ch©Ûc¾ ™?n±X¤Î¹;zíäL 5>»—½æÛ¨ž{wlÖý‘^»!H½l¾åè¤ß|bŒ¨žOŸ8&ÜÑï #%F/[ܸë5ßF9Ft]¶¸£7†¤ÈB‰Ñ˳¼×|¥K.©œÑ-+ !F/ïúÍ·QNõˆëÛˆ×Ý"!2¢ôÒ’¯ÀN¿ù6*»ì3ºõ*™@L¢ô2ôÊgØ|îè/¶þ»™Äé¥Î·áË›!/D\ù6Nƒ3º}ý„-‹€8½Ôøòf ï‰š¸½DÆ‹ÏJÔ^‚O ¼—€#ðpd\^ÒÌ,ýçiA&˜®ŒÊËlröî*õ´`\^Þ™÷Yh©ÿx ðòdñ@ àåÉâÀËîvž“ ^v^vßZõx¥øÕv?^v^v§z«lkP^v^v§Ê“äȘ/;/÷êo÷•´(©^R)™&·‡ãÀK5:,¹hWzÝOÿ:Ïîì{ÂËÎÀKêåC›Ò4yÿòºs¼§ /;/ M¾¯“«ävíÈ/;/`™\<Ÿm¦ÏŽsð²3ðòv9ÌLù‰àegàåQÛKò¼¬Ž·Üàegàå1¨ ƒâÒÇñ6;¼ì ¼<†OtꙨO ¼Œ,ÂH€—‘E ð2²#^Fa$ÀËÈ"ŒxY„‘/#‹0àedF¼Œ,ÂH€—‘E ð2²#^Fa$ÀËÈ"ŒxY„‘/#‹0àedF¼Œ,ÂH€—‘E ð2²#a\^öžoãÔ=>-£òòù6NÑã³2./A,ÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gà%༗€#ðp^ŽÀKÀx 8/Gþmy^«IEND®B`‚././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.945559 ansible-core-2.12.0/docs/docsite/rst/installation_guide/0000755000000000000000000000000000000000000023146 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/installation_guide/index.rst0000644000000000000000000000026300000000000025010 0ustar00rootroot00000000000000****************** Installation Guide ****************** Welcome to the Ansible Installation Guide! .. toctree:: :maxdepth: 2 intro_installation intro_configuration ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.463556 ansible-core-2.12.0/docs/docsite/rst/installation_guide/intro_configuration.rst0000644000000000000000000000427300000000000027770 0ustar00rootroot00000000000000.. _intro_configuration: ******************* Configuring Ansible ******************* .. contents:: Topics This topic describes how to control Ansible settings. .. _the_configuration_file: Configuration file ================== Certain settings in Ansible are adjustable via a configuration file (ansible.cfg). The stock configuration should be sufficient for most users, but there may be reasons you would want to change them. Paths where configuration file is searched are listed in :ref:`reference documentation`. .. _getting_the_latest_configuration: Getting the latest configuration -------------------------------- If installing Ansible from a package manager, the latest ``ansible.cfg`` file should be present in ``/etc/ansible``, possibly as a ``.rpmnew`` file (or other) as appropriate in the case of updates. If you installed Ansible from pip or from source, you may want to create this file in order to override default settings in Ansible. An `example file is available on GitHub `_. For more details and a full listing of available configurations go to :ref:`configuration_settings`. Starting with Ansible version 2.4, you can use the :ref:`ansible-config` command line utility to list your available options and inspect the current values. For in-depth details, see :ref:`ansible_configuration_settings`. .. _environmental_configuration: Environmental configuration =========================== Ansible also allows configuration of settings using environment variables. If these environment variables are set, they will override any setting loaded from the configuration file. You can get a full listing of available environment variables from :ref:`ansible_configuration_settings`. .. _command_line_configuration: Command line options ==================== Not all configuration options are present in the command line, just the ones deemed most useful or common. Settings in the command line will override those passed through the configuration file and the environment. The full list of options available is in :ref:`ansible-playbook` and :ref:`ansible`. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.464556 ansible-core-2.12.0/docs/docsite/rst/installation_guide/intro_installation.rst0000644000000000000000000006267600000000000027635 0ustar00rootroot00000000000000.. _installation_guide: .. _intro_installation_guide: ****************** Installing Ansible ****************** Ansible is an agentless automation tool that you install on a control node. From the control node, Ansible manages machines and other devices remotely (by default, over the SSH protocol). To install Ansible for use at the command line, simply install the Ansible package on one machine (which could easily be a laptop). You do not need to install a database or run any daemons. Ansible can manage an entire fleet of remote machines from that one control node. .. contents:: :local: Prerequisites ============= Before you install Ansible, review the requirements for a control node. Before you use Ansible, review the requirements for managed nodes (those end devices you want to automate). Control nodes and managed nodes have different minimum requirements. .. _control_node_requirements: Control node requirements ------------------------- For your control node (the machine that runs Ansible), you can use any machine with Python 3.8 or newer installed. This includes Red Hat, Debian, CentOS, macOS, any of the BSDs, and so on. Windows is not supported for the control node, read more about this in `Matt Davis's blog post `_. .. warning:: Please note that some plugins that run on the control node have additional requirements. These requirements should be listed in the plugin documentation. When choosing a control node, remember that any management system benefits from being run near the machines being managed. If you are using Ansible to manage machines in a cloud, consider using a machine inside that cloud as your control node. In most cases Ansible will perform better from a machine on the cloud than from a machine on the open Internet. .. warning:: Ansible 2.11 will make Python 3.8 a soft dependency for the control node, but will function with the aforementioned requirements. Ansible 2.12 will require Python 3.8 or newer to function on the control node. Starting with Ansible 2.11, the project will only be packaged for Python 3.8 and newer. .. _managed_node_requirements: Managed node requirements ------------------------- Although you do not need a daemon on your managed nodes, you do need a way for Ansible to communicate with them. For most managed nodes, Ansible makes a connection over SSH and transfers modules using SFTP. If SSH works but SFTP is not available on some of your managed nodes, you can switch to SCP in :ref:`ansible.cfg `. For any machine or device that can run Python, you also need Python 2 (version 2.6 or later) or Python 3 (version 3.5 or later). .. warning:: Please note that some modules have additional requirements that need to be satisfied on the 'target' machine (the managed node). These requirements should be listed in the module documentation. .. note:: * If you have SELinux enabled on remote nodes, you will also want to install libselinux-python on them before using any copy/file/template related functions in Ansible. You can use the :ref:`yum module` or :ref:`dnf module` in Ansible to install this package on remote systems that do not have it. * By default, before the first Python module in a playbook runs on a host, Ansible attempts to discover a suitable Python interpreter on that host. You can override the discovery behavior by setting the :ref:`ansible_python_interpreter` inventory variable to a specific interpreter, and in other ways. See :ref:`interpreter_discovery` for details. * Ansible's :ref:`raw module`, and the :ref:`script module`, do not depend on a client side install of Python to run. Technically, you can use Ansible to install a compatible version of Python using the :ref:`raw module`, which then allows you to use everything else. For example, if you need to bootstrap Python 2 onto a RHEL-based system, you can install it as follows: .. code-block:: shell $ ansible myhost --become -m raw -a "yum install -y python2" .. _what_version: Selecting an Ansible artifact and version to install ==================================================== Starting with version 2.10, Ansible distributes two artifacts: a community package called ``ansible`` and a minimalist language and runtime called ``ansible-core`` (called `ansible-base` in version 2.10). Choose the Ansible artifact and version that matches your particular needs. Installing the Ansible community package ---------------------------------------- The ``ansible`` package includes the Ansible language and runtime plus a range of community curated Collections. It recreates and expands on the functionality that was included in Ansible 2.9. You can choose any of the following ways to install the Ansible community package: * Install the latest release with your OS package manager (for Red Hat Enterprise Linux (TM), CentOS, Fedora, Debian, or Ubuntu). * Install with ``pip`` (the Python package manager). Installing `ansible-core` ------------------------- Ansible also distributes a minimalist object called ``ansible-core`` (or ``ansible-base`` in version 2.10). It contains the Ansible language, runtime, and a short list of core modules and other plugins. You can build functionality on top of ``ansible-core`` by installing collections from Galaxy, Automation Hub, or any other source. You can choose any of the following ways to install ``ansible-core``: * Install ``ansible-core`` (version 2.11 and greater) or ``ansible-base`` (version 2.10) with ``pip``. * Install ``ansible-core`` from source from the ansible/ansible GitHub repository to access the development (``devel``) version to develop or test the latest features. .. note:: You should only run ``ansible-core`` from ``devel`` if you are modifying ``ansible-core``, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point. Ansible generally creates new releases twice a year. See :ref:`release_and_maintenance` for information on release timing and maintenance of older releases. .. _from_pip: Installing and upgrading Ansible with ``pip`` ============================================= Ansible can be installed on many systems with ``pip``, the Python package manager. Prerequisites: Installing ``pip`` ---------------------------------- If ``pip`` is not already available on your system, run the following commands to install it:: $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py $ python get-pip.py --user You may need to perform some additional configuration before you are able to run Ansible. See the Python documentation on `installing to the user site`_ for more information. .. _installing to the user site: https://packaging.python.org/tutorials/installing-packages/#installing-to-the-user-site Installing Ansible with ``pip`` ------------------------------- .. note:: If you have Ansible 2.9 or older installed or Ansible 3, see :ref:`pip_upgrade`. Once ``pip`` is installed, you can install Ansible:: $ python -m pip install --user ansible In order to use the ``paramiko`` connection plugin or modules that require ``paramiko``, install the required module [1]_:: $ python -m pip install --user paramiko If you wish to install Ansible globally, run the following commands:: $ sudo python get-pip.py $ sudo python -m pip install ansible .. note:: Running ``pip`` with ``sudo`` will make global changes to the system. Since ``pip`` does not coordinate with system package managers, it could make changes to your system that leaves it in an inconsistent or non-functioning state. This is particularly true for macOS. Installing with ``--user`` is recommended unless you understand fully the implications of modifying global files on the system. .. note:: Older versions of ``pip`` default to http://pypi.python.org/simple, which no longer works. Please make sure you have the latest version of ``pip`` before installing Ansible. If you have an older version of ``pip`` installed, you can upgrade by following `pip's upgrade instructions `_ . .. _from_pip_venv: Installing Ansible in a virtual environment with ``pip`` -------------------------------------------------------- .. note:: If you have Ansible 2.9 or older installed or Ansible 3, see :ref:`pip_upgrade`. Ansible can also be installed inside a new or existing ``virtualenv``:: $ python -m virtualenv ansible # Create a virtualenv if one does not already exist $ source ansible/bin/activate # Activate the virtual environment $ python -m pip install ansible .. _pip_upgrade: Upgrading Ansible with ``pip`` ------------------------------ Upgrading from 2.9 or earlier to 2.10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Starting in version 2.10, Ansible is made of two packages. When you upgrade from version 2.9 and older to version 2.10 or later, you need to uninstall the old Ansible version (2.9 or earlier) before upgrading. If you do not uninstall the older version of Ansible, you will see the following message, and no change will be performed: .. code-block:: console Cannot install ansible-base with a pre-existing ansible==2.x installation. Installing ansible-base with ansible-2.9 or older currently installed with pip is known to cause problems. Please uninstall ansible and install the new version: pip uninstall ansible pip install ansible-base ... As explained by the message, to upgrade you must first remove the version of Ansible installed and then install it to the latest version. .. code-block:: console $ pip uninstall ansible $ pip install ansible Upgrading from Ansible 3 or ansible-core 2.10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``ansible-base`` only exists for version 2.10 and in Ansible 3. In 2.11 and later, the package is called ``ansible-core``. Before installing ``ansible-core`` or Ansible 4, you must uninstall ``ansible-base`` if you have installed Ansible 3 or ``ansible-base`` 2.10. To upgrade to ``ansible-core``: .. code-block:: bash pip uninstall ansible-base pip install ansible-core To upgrade to Ansible 4: .. code-block:: bash pip uninstall ansible-base pip install ansible .. _installing_the_control_node: .. _from_yum: Installing Ansible on specific operating systems ================================================ Follow these instructions to install the Ansible community package on a variety of operating systems. Installing Ansible on RHEL, CentOS, or Fedora ---------------------------------------------- On Fedora: .. code-block:: bash $ sudo dnf install ansible On RHEL: .. code-block:: bash $ sudo yum install ansible On CentOS: .. code-block:: bash $ sudo yum install epel-release $ sudo yum install ansible RPMs for currently supported versions of RHEL and CentOS are also available from `EPEL `_. .. note:: Since Ansible 2.10 for RHEL is not available at this time, continue to use Ansible 2.9. Ansible can manage older operating systems that contain Python 2.6 or higher. .. _from_apt: Installing Ansible on Ubuntu ---------------------------- Ubuntu builds are available `in a PPA here `_. To configure the PPA on your machine and install Ansible run these commands: .. code-block:: bash $ sudo apt update $ sudo apt install software-properties-common $ sudo add-apt-repository --yes --update ppa:ansible/ansible $ sudo apt install ansible .. note:: On older Ubuntu distributions, "software-properties-common" is called "python-software-properties". You may want to use ``apt-get`` instead of ``apt`` in older versions. Also, be aware that only newer distributions (in other words, 18.04, 18.10, and so on) have a ``-u`` or ``--update`` flag, so adjust your script accordingly. Debian/Ubuntu packages can also be built from the source checkout, run: .. code-block:: bash $ make deb Installing Ansible on Debian ---------------------------- Debian users may use the same source as the Ubuntu PPA (using the following table). .. list-table:: :header-rows: 1 * - Debian - - Ubuntu * - Debian 11 (Bullseye) - -> - Ubuntu 20.04 (Focal) * - Debian 10 (Buster) - -> - Ubuntu 18.04 (Bionic) * - Debian 9 (Stretch) - -> - Ubuntu 16.04 (Xenial) * - Debian 8 (Jessie) - -> - Ubuntu 14.04 (Trusty) .. note:: As of Ansible 4.0.0, new releases will only be generated for Ubuntu 18.04 (Bionic) or later releases. Add the following line to ``/etc/apt/sources.list`` or ``/etc/apt/sources.list.d/ansible.list``: .. code-block:: bash deb http://ppa.launchpad.net/ansible/ansible/ubuntu MATCHING_UBUNTU_CODENAME_HERE main Example for Debian 11 (Bullseye) .. code-block:: bash deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main Then run these commands: .. code-block:: bash $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 $ sudo apt update $ sudo apt install ansible Installing Ansible on Gentoo with portage ----------------------------------------- .. code-block:: bash $ emerge -av app-admin/ansible To install the newest version, you may need to unmask the Ansible package prior to emerging: .. code-block:: bash $ echo 'app-admin/ansible' >> /etc/portage/package.accept_keywords Installing Ansible on FreeBSD ----------------------------- Though Ansible works with both Python 2 and 3 versions, FreeBSD has different packages for each Python version. So to install you can use: .. code-block:: bash $ sudo pkg install py27-ansible or: .. code-block:: bash $ sudo pkg install py37-ansible You may also wish to install from ports, run: .. code-block:: bash $ sudo make -C /usr/ports/sysutils/ansible install You can also choose a specific version, for example ``ansible25``. Older versions of FreeBSD worked with something like this (substitute for your choice of package manager): .. code-block:: bash $ sudo pkg install ansible .. _on_macos: Installing Ansible on macOS --------------------------- The preferred way to install Ansible on a Mac is with ``pip``. The instructions can be found in :ref:`from_pip`. If you are running macOS version 10.12 or older, then you should upgrade to the latest ``pip`` to connect to the Python Package Index securely. It should be noted that pip must be run as a module on macOS, and the linked ``pip`` instructions will show you how to do that. .. note:: If you have Ansible 2.9 or older installed or Ansible 3, see :ref:`pip_upgrade`. .. note:: macOS by default is configured for a small number of file handles, so if you want to use 15 or more forks you'll need to raise the ulimit with ``sudo launchctl limit maxfiles unlimited``. This command can also fix any "Too many open files" errors. If you are installing on macOS Mavericks (10.9), you may encounter some noise from your compiler. A workaround is to do the following:: $ CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install --user ansible .. _from_pkgutil: Installing Ansible on Solaris ----------------------------- Ansible is available for Solaris as `SysV package from OpenCSW `_. .. code-block:: bash # pkgadd -d http://get.opencsw.org/now # /opt/csw/bin/pkgutil -i ansible .. _from_pacman: Installing Ansible on Arch Linux --------------------------------- Ansible is available in the Community repository:: $ pacman -S ansible The AUR has a PKGBUILD for pulling directly from GitHub called `ansible-core-git `_. Also see the `Ansible `_ page on the ArchWiki. .. _from_sbopkg: Installing Ansible on Slackware Linux ------------------------------------- Ansible build script is available in the `SlackBuilds.org `_ repository. Can be built and installed using `sbopkg `_. Create queue with Ansible and all dependencies:: # sqg -p ansible Build and install packages from a created queuefile (answer Q for question if sbopkg should use queue or package):: # sbopkg -k -i ansible .. _from swupd: Installing Ansible on Clear Linux --------------------------------- Ansible and its dependencies are available as part of the sysadmin host management bundle:: $ sudo swupd bundle-add sysadmin-hostmgmt Update of the software will be managed by the swupd tool:: $ sudo swupd update .. _from_pip_devel: .. _getting_ansible: .. _from_windows: Installing Ansible on Windows ------------------------------ See :ref:`windows_faq_ansible` Installing and running the ``devel`` branch from source ======================================================= In Ansible 2.10 and later, the `ansible/ansible repository `_ contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core``. New features are added to ``ansible-core`` on a branch called ``devel``. If you are testing new features, fixing bugs, or otherwise working with the development team on changes to the core code, you can install and run ``devel``. .. note:: You should only install and run the ``devel`` branch if you are modifying ``ansible-core`` or trying out features under development. This is a rapidly changing source of code and can become unstable at any point. .. note:: If you want to use Ansible AWX as the control node, do not install or run the ``devel`` branch of Ansible. Use an OS package manager (like ``apt`` or ``yum``) or ``pip`` to install a stable version. If you are running Ansible from source, you may also wish to follow the `Ansible GitHub project `_. We track issues, document bugs, and share feature ideas in this and other related repositories. For more information on getting involved in the Ansible project, see the :ref:`ansible_community_guide`. For more information on creating Ansible modules and Collections, see the :ref:`developer_guide`. Installing ``devel`` from GitHub with ``pip`` --------------------------------------------- You can install the ``devel`` branch of ``ansible-core`` directly from GitHub with ``pip``: .. code-block:: bash $ python -m pip install --user https://github.com/ansible/ansible/archive/devel.tar.gz .. note:: If you have Ansible 2.9 or older installed or Ansible 3, see :ref:`pip_upgrade`. You can replace ``devel`` in the URL mentioned above, with any other branch or tag on GitHub to install older versions of Ansible (prior to ``ansible-base`` 2.10.), tagged alpha or beta versions, and release candidates. This installs all of Ansible. .. code-block:: bash $ python -m pip install --user https://github.com/ansible/ansible/archive/stable-2.9.tar.gz See :ref:`from_source` for instructions on how to run ``ansible-core`` directly from source. Installing ``devel`` from GitHub by cloning ------------------------------------------- You can install the ``devel`` branch of ``ansible-core`` by cloning the GitHub repository: .. code-block:: bash $ git clone https://github.com/ansible/ansible.git $ cd ./ansible The default branch is ``devel``. .. _from_source: Running the ``devel`` branch from a clone ----------------------------------------- ``ansible-core`` is easy to run from source. You do not need ``root`` permissions to use it and there is no software to actually install. No daemons or database setup are required. Once you have installed the ``ansible-core`` repository by cloning, setup the Ansible environment: Using Bash: .. code-block:: bash $ source ./hacking/env-setup Using Fish:: $ source ./hacking/env-setup.fish If you want to suppress spurious warnings/errors, use:: $ source ./hacking/env-setup -q If you do not have ``pip`` installed in your version of Python, install it:: $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py $ python get-pip.py --user Ansible also uses the following Python modules that need to be installed [1]_: .. code-block:: bash $ python -m pip install --user -r ./requirements.txt To update the ``devel`` branch of ``ansible-core`` on your local machine, use pull-with-rebase so any local changes are replayed. .. code-block:: bash $ git pull --rebase .. code-block:: bash $ git pull --rebase #same as above $ git submodule update --init --recursive After you run the the env-setup script, you will be running from the source code. The default inventory file will be ``/etc/ansible/hosts``. You can optionally specify an inventory file (see :ref:`inventory`) other than ``/etc/ansible/hosts``: .. code-block:: bash $ echo "127.0.0.1" > ~/ansible_hosts $ export ANSIBLE_INVENTORY=~/ansible_hosts You can read more about the inventory file at :ref:`inventory`. Confirming your installation ============================ Whatever method of installing Ansible you chose, you can test that it is installed correctly with a ping command: .. code-block:: bash $ ansible all -m ping --ask-pass You can also use "sudo make install". .. _tagged_releases: Finding tarballs of tagged releases =================================== If you are packaging Ansible or wanting to build a local package yourself, and you want to avoid a git checkout, you can use a tarball of a tagged release. You can download the latest stable release from PyPI's `ansible package page `_. If you need a specific older version, beta version, or release candidate, you can use the pattern ``pypi.python.org/packages/source/a/ansible/ansible-{{VERSION}}.tar.gz``. VERSION must be the full version number, for example 3.1.0 or 4.0.0b2. You can make VERSION a variable in your package managing system that you update in one place whenever you package a new version. .. note:: If you are creating your own Ansible package, you must also download or package ``ansible-core`` (or ``ansible-base`` for packages based on 2.10.x) from PyPI as part of your Ansible package. You must specify a particular version. Visit the PyPI project pages to download files for `ansible-core `_ or `ansible-base `_. These releases are also tagged in the `git repository `_ with the release version. .. _shell_completion: Adding Ansible command shell completion ======================================= As of Ansible 2.9, you can add shell completion of the Ansible command line utilities by installing an optional dependency called ``argcomplete``. ``argcomplete`` supports bash, and has limited support for zsh and tcsh. You can install ``python-argcomplete`` from EPEL on Red Hat Enterprise based distributions, and or from the standard OS repositories for many other distributions. For more information about installation and configuration, see the `argcomplete documentation `_. Installing ``argcomplete`` on RHEL, CentOS, or Fedora ----------------------------------------------------- On Fedora: .. code-block:: bash $ sudo dnf install python-argcomplete On RHEL and CentOS: .. code-block:: bash $ sudo yum install epel-release $ sudo yum install python-argcomplete Installing ``argcomplete`` with ``apt`` --------------------------------------- .. code-block:: bash $ sudo apt install python3-argcomplete Installing ``argcomplete`` with ``pip`` --------------------------------------- .. code-block:: bash $ python -m pip install argcomplete Configuring ``argcomplete`` --------------------------- There are 2 ways to configure ``argcomplete`` to allow shell completion of the Ansible command line utilities: globally or per command. Global configuration ^^^^^^^^^^^^^^^^^^^^ Global completion requires bash 4.2. .. code-block:: bash $ sudo activate-global-python-argcomplete This will write a bash completion file to a global location. Use ``--dest`` to change the location. Per command configuration ^^^^^^^^^^^^^^^^^^^^^^^^^ If you do not have bash 4.2, you must register each script independently. .. code-block:: bash $ eval $(register-python-argcomplete ansible) $ eval $(register-python-argcomplete ansible-config) $ eval $(register-python-argcomplete ansible-console) $ eval $(register-python-argcomplete ansible-doc) $ eval $(register-python-argcomplete ansible-galaxy) $ eval $(register-python-argcomplete ansible-inventory) $ eval $(register-python-argcomplete ansible-playbook) $ eval $(register-python-argcomplete ansible-pull) $ eval $(register-python-argcomplete ansible-vault) You should place the above commands into your shells profile file such as ``~/.profile`` or ``~/.bash_profile``. Using ``argcomplete`` with zsh or tcsh ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See the `argcomplete documentation `_. .. seealso:: :ref:`intro_adhoc` Examples of basic commands :ref:`working_with_playbooks` Learning ansible's configuration management language :ref:`installation_faqs` Ansible Installation related to FAQs `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels .. [1] ``paramiko`` was included in Ansible's ``requirements.txt`` prior to 2.8. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.945559 ansible-core-2.12.0/docs/docsite/rst/inventory/0000755000000000000000000000000000000000000021325 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.464556 ansible-core-2.12.0/docs/docsite/rst/inventory/implicit_localhost.rst0000644000000000000000000000420700000000000025744 0ustar00rootroot00000000000000:orphan: .. _implicit_localhost: Implicit 'localhost' ==================== When you try to reference a ``localhost`` and you don't have it defined in inventory, Ansible will create an implicit one for you.:: - hosts: all tasks: - name: check that i have log file for all hosts on my local machine stat: path=/var/log/hosts/{{inventory_hostname}}.log delegate_to: localhost In a case like this (or ``local_action``) when Ansible needs to contact a 'localhost' but you did not supply one, we create one for you. This host is defined with specific connection variables equivalent to this in an inventory:: ... hosts: localhost: vars: ansible_connection: local ansible_python_interpreter: "{{ansible_playbook_python}}" This ensures that the proper connection and Python are used to execute your tasks locally. You can override the built-in implicit version by creating a ``localhost`` host entry in your inventory. At that point, all implicit behaviors are ignored; the ``localhost`` in inventory is treated just like any other host. Group and host vars will apply, including connection vars, which includes the ``ansible_python_interpreter`` setting. This will also affect ``delegate_to: localhost`` and ``local_action``, the latter being an alias to the former. .. note:: - This host is not targetable via any group, however it will use vars from ``host_vars`` and from the 'all' group. - Implicit localhost does not appear in the ``hostvars`` magic variable unless demanded, such as by ``"{{ hostvars['localhost'] }}"``. - The ``inventory_file`` and ``inventory_dir`` magic variables are not available for the implicit localhost as they are dependent on **each inventory host**. - This implicit host also gets triggered by using ``127.0.0.1`` or ``::1`` as they are the IPv4 and IPv6 representations of 'localhost'. - Even though there are many ways to create it, there will only ever be ONE implicit localhost, using the name first used to create it. - Having ``connection: local`` does NOT trigger an implicit localhost, you are just changing the connection for the ``inventory_hostname``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.662559 ansible-core-2.12.0/docs/docsite/rst/locales/0000755000000000000000000000000000000000000020712 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.662559 ansible-core-2.12.0/docs/docsite/rst/locales/ja/0000755000000000000000000000000000000000000021304 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.946559 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/0000755000000000000000000000000000000000000023071 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.464556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/404.po0000644000000000000000000000260700000000000023745 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-23 10:50+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: Babel 2.9.0\n" #: ../../rst/404.rst:5 msgid "Oops!" msgstr "Oops!" #: ../../rst/404.rst:7 msgid "The version of the Ansible documentation you were looking at doesn't contain that page." msgstr "å‚ç…§ã—ã¦ã„ã‚‹ Ansible ドキュメントã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€ãã®ãƒšãƒ¼ã‚¸ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" #: ../../rst/404.rst:12 msgid "Use the back button to return to the version you were browsing, or use the navigation at left to explore our latest release. Once you're on a non-404 page, you can use the version-changer to select a version." msgstr "戻るボタンを使用ã—ã¦é–²è¦§ã—ã¦ã„ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æˆ»ã‚‹ã‹ã€å·¦å´ã®ãƒŠãƒ“ゲーションを使用ã—ã¦æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。404 以外ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·å¤‰æ›´ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’使用ã—ã¦ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.464556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/api.po0000644000000000000000000000651000000000000024204 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-23 10:50+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: Babel 2.9.0\n" #: ../../rst/api/index.rst:5 msgid "Ansible API Documentation" msgstr "Ansible API ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/api/index.rst:7 msgid "The Ansible API is under construction. These stub references for attributes, classes, functions, methods, and modules will be documented in future. The :ref:`module utilities ` included in ``ansible.module_utils.basic`` and ``AnsibleModule`` are documented under Reference & Appendices." msgstr "Ansible API を構築中ã§ã™ã€‚属性ã€ã‚¯ãƒ©ã‚¹ã€é–¢æ•°ã€ãƒ¡ã‚½ãƒƒãƒ‰ã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¹ã‚¿ãƒ–å‚ç…§ã®èª¬æ˜Žã¯ã€ä»Šå¾Œè¿½åŠ ã•れã¾ã™ã€‚``ansible.module_utils.basic`` ãŠã‚ˆã³ ``AnsibleModule`` ã«å«ã¾ã‚Œã‚‹ã€Œ:ref:`モジュールユーティリティー `ã€ã€ã€Œå‚ç…§ãŠã‚ˆã³ä»˜éŒ²ã€ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/api/index.rst:14 msgid "Attributes" msgstr "属性" #: ../../rst/api/index.rst:18 msgid "The parameters accepted by the module." msgstr "モジュールã§å—ã‘入れられるパラメーターã§ã™ã€‚" #: ../../rst/api/index.rst:24 msgid "Deprecated in favor of ansibleModule._selinux_special_fs." msgstr "ansibleModule._selinux_special_fs ãŒå°Žå…¥ã•れãŸãŸã‚ã€éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/api/index.rst:36 msgid "(formerly ansible.module_utils.basic.SELINUX_SPECIAL_FS)" msgstr "(以å‰ã¯ ansible.module_utils.basic.SELINUX_SPECIAL_FS)" #: ../../rst/api/index.rst:50 msgid "Classes" msgstr "クラス" #: ../../rst/api/index.rst:55 msgid "The basic utilities for AnsibleModule." msgstr "AnsibleModule ã®åŸºæœ¬çš„ãªãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã§ã™ã€‚" #: ../../rst/api/index.rst:59 msgid "The main class for an Ansible module." msgstr "Ansible モジュールã®ãƒ¡ã‚¤ãƒ³ã‚¯ãƒ©ã‚¹ã§ã™ã€‚" #: ../../rst/api/index.rst:63 msgid "Functions" msgstr "関数" #: ../../rst/api/index.rst:67 msgid "Load parameters." msgstr "パラメーターを読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/api/index.rst:71 msgid "Methods" msgstr "メソッド" #: ../../rst/api/index.rst:75 msgid "Logs the output of Ansible." msgstr "Ansible ã®å‡ºåŠ›ã‚’ãƒ­ã‚°ã«è¨˜éŒ²ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:79 msgid "Debugs Ansible." msgstr "Ansible をデãƒãƒƒã‚°ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:83 msgid "Retrieves the path for executables." msgstr "実行å¯èƒ½ãƒ•ァイルã®ãƒ‘スをå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:87 msgid "Runs a command within an Ansible module." msgstr "Ansible モジュール内ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:91 msgid "Exits and returns a failure." msgstr "終了ã—ã¦ã€å¤±æ•—ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:95 msgid "Exits and returns output." msgstr "終了ã—ã¦ã€å‡ºåŠ›ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/api/index.rst:99 msgid "Modules" msgstr "モジュール" ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4655561 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/cli.po0000644000000000000000000017767500000000000024227 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/cli/ansible.rst:7 msgid "ansible" msgstr "ansible" #: ../../rst/cli/ansible.rst:10 msgid ":strong:`Define and run a single task 'playbook' against a set of hosts`" msgstr ":strong:`一連ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã€ŒPlaybookã€ã‚’定義ã—ã¦å®Ÿè¡Œ`" #: ../../rst/cli/ansible-config.rst:21 ../../rst/cli/ansible-console.rst:21 #: ../../rst/cli/ansible-doc.rst:21 ../../rst/cli/ansible-galaxy.rst:21 #: ../../rst/cli/ansible-inventory.rst:21 ../../rst/cli/ansible-playbook.rst:21 #: ../../rst/cli/ansible-pull.rst:21 ../../rst/cli/ansible-vault.rst:21 #: ../../rst/cli/ansible.rst:21 msgid "Synopsis" msgstr "概è¦" #: ../../rst/cli/ansible-config.rst:30 ../../rst/cli/ansible-console.rst:35 #: ../../rst/cli/ansible-doc.rst:33 ../../rst/cli/ansible-galaxy.rst:30 #: ../../rst/cli/ansible-inventory.rst:32 ../../rst/cli/ansible-playbook.rst:35 #: ../../rst/cli/ansible-pull.rst:35 ../../rst/cli/ansible-vault.rst:30 #: ../../rst/cli/ansible.rst:35 msgid "Description" msgstr "説明" #: ../../rst/cli/ansible.rst:38 msgid "is an extra-simple tool/framework/API for doing 'remote things'. this command allows you to define and run a single task 'playbook' against a set of hosts" msgstr "「リモートã®ã“ã¨ã€ã‚’行ã†éžå¸¸ã«å˜ç´”ãªãƒ„ール/フレームワーク/API ã§ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã€ãƒ›ã‚¹ãƒˆ 1 å°ã«å¯¾ã—ã¦å˜ä¸€ã‚¿ã‚¹ã‚¯ã€ŒPlaybookã€ã‚’定義ãŠã‚ˆã³å®Ÿè¡Œã§ãã¾ã™" #: ../../rst/cli/ansible-config.rst:37 ../../rst/cli/ansible-console.rst:63 #: ../../rst/cli/ansible-doc.rst:43 ../../rst/cli/ansible-galaxy.rst:37 #: ../../rst/cli/ansible-inventory.rst:39 ../../rst/cli/ansible-playbook.rst:43 #: ../../rst/cli/ansible-pull.rst:50 ../../rst/cli/ansible-vault.rst:44 #: ../../rst/cli/ansible.rst:43 msgid "Common Options" msgstr "共通オプション" #: ../../rst/cli/ansible-console.rst:70 ../../rst/cli/ansible-inventory.rst:46 #: ../../rst/cli/ansible-playbook.rst:50 ../../rst/cli/ansible-pull.rst:62 #: ../../rst/cli/ansible-vault.rst:87 ../../rst/cli/ansible-vault.rst:121 #: ../../rst/cli/ansible-vault.rst:155 ../../rst/cli/ansible-vault.rst:189 #: ../../rst/cli/ansible-vault.rst:219 ../../rst/cli/ansible-vault.rst:257 #: ../../rst/cli/ansible-vault.rst:311 ../../rst/cli/ansible.rst:50 msgid "ask for vault password" msgstr "Vault ã®ãƒ‘スワード入力を尋ã­ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:75 ../../rst/cli/ansible-playbook.rst:55 #: ../../rst/cli/ansible.rst:55 msgid "privilege escalation method to use (default=sudo), use `ansible-doc -t become -l` to list valid choices." msgstr "使用ã™ã‚‹ç‰¹æ¨©æ˜‡æ ¼æ–¹æ³• (デフォルト㯠sudo)。有効ãªé¸æŠžã‚’一覧表示ã™ã‚‹ã«ã¯ `ansible-doc -t become -l` を使用ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:80 ../../rst/cli/ansible-playbook.rst:60 #: ../../rst/cli/ansible-pull.rst:67 ../../rst/cli/ansible.rst:60 msgid "Become password file" msgstr "become パスワードファイル" #: ../../rst/cli/ansible-console.rst:85 ../../rst/cli/ansible-playbook.rst:65 #: ../../rst/cli/ansible.rst:65 msgid "run operations as this user (default=root)" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦æ“作を実行ã—ã¾ã™ (デフォルト㯠root)。" #: ../../rst/cli/ansible-console.rst:90 ../../rst/cli/ansible-playbook.rst:70 #: ../../rst/cli/ansible-pull.rst:82 ../../rst/cli/ansible.rst:70 msgid "Connection password file" msgstr "接続ã®ãƒ‘スワードファイル" #: ../../rst/cli/ansible-console.rst:95 ../../rst/cli/ansible-playbook.rst:85 #: ../../rst/cli/ansible-pull.rst:97 ../../rst/cli/ansible.rst:75 msgid "outputs a list of matching hosts; does not execute anything else" msgstr "一致ã™ã‚‹ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ã‚’出力ã—ã¾ã™ã€‚ä»–ã«ã¯ä½•も実行ã—ã¾ã›ã‚“。" #: ../../rst/cli/ansible-console.rst:100 ../../rst/cli/ansible-doc.rst:55 #: ../../rst/cli/ansible-inventory.rst:81 ../../rst/cli/ansible.rst:80 msgid "Since this tool does not use playbooks, use this as a substitute playbook directory.This sets the relative path for many features including roles/ group_vars/ etc." msgstr "ã“ã®ãƒ„ール㯠Playbook を使用ã—ãªã„ãŸã‚ã€ä»£æ›¿ã® Playbook ディレクトリーã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€roles/ group_vars/ ãªã©ã®å¤šãã®æ©Ÿèƒ½ã®ç›¸å¯¾ãƒ‘スãŒè¨­å®šã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:105 ../../rst/cli/ansible-playbook.rst:100 #: ../../rst/cli/ansible-pull.rst:102 ../../rst/cli/ansible.rst:85 msgid "use this file to authenticate the connection" msgstr "ã“ã®ãƒ•ァイルを使用ã—ã¦æŽ¥ç¶šã‚’èªè¨¼ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:110 ../../rst/cli/ansible-playbook.rst:105 #: ../../rst/cli/ansible-pull.rst:112 ../../rst/cli/ansible.rst:90 msgid "specify extra arguments to pass to scp only (e.g. -l)" msgstr "scp ã®ã¿ã«æ¸¡ã™è¿½åŠ ã®å¼•数を指定ã—ã¾ã™ (例: -l)。" #: ../../rst/cli/ansible-console.rst:115 ../../rst/cli/ansible-playbook.rst:110 #: ../../rst/cli/ansible-pull.rst:117 ../../rst/cli/ansible.rst:95 msgid "specify extra arguments to pass to sftp only (e.g. -f, -l)" msgstr "sftp ã®ã¿ã«æ¸¡ã™è¿½åŠ ã®å¼•数を指定ã—ã¾ã™ (例: -fã€-l)。" #: ../../rst/cli/ansible-console.rst:120 ../../rst/cli/ansible-playbook.rst:120 #: ../../rst/cli/ansible-pull.rst:127 ../../rst/cli/ansible.rst:100 msgid "specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)" msgstr "sftp/scp/ssh ã«æ¸¡ã™ä¸€èˆ¬çš„ãªå¼•数を指定ã—ã¾ã™ (例: ProxyCommand)。" #: ../../rst/cli/ansible-console.rst:125 ../../rst/cli/ansible-playbook.rst:125 #: ../../rst/cli/ansible-pull.rst:132 ../../rst/cli/ansible.rst:105 msgid "specify extra arguments to pass to ssh only (e.g. -R)" msgstr "ssh ã®ã¿ã«æ¸¡ã™è¿½åŠ ã®å¼•数を指定ã—ã¾ã™ (例: -R)。" #: ../../rst/cli/ansible-console.rst:135 ../../rst/cli/ansible-playbook.rst:140 #: ../../rst/cli/ansible.rst:110 msgid "perform a syntax check on the playbook, but do not execute it" msgstr "Playbook ã§æ§‹æ–‡ãƒã‚§ãƒƒã‚¯ã‚’実行ã—ã¾ã™ãŒã€Playbook ã¯å®Ÿè¡Œã—ã¾ã›ã‚“。" #: ../../rst/cli/ansible-console.rst:140 ../../rst/cli/ansible.rst:115 msgid "set task timeout limit in seconds, must be positive integer." msgstr "タスクã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆåˆ¶é™ã‚’ç§’å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚æ­£ã®æ•´æ•°ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:145 ../../rst/cli/ansible-inventory.rst:96 #: ../../rst/cli/ansible-playbook.rst:145 ../../rst/cli/ansible-pull.rst:142 #: ../../rst/cli/ansible-vault.rst:95 ../../rst/cli/ansible-vault.rst:129 #: ../../rst/cli/ansible-vault.rst:163 ../../rst/cli/ansible-vault.rst:193 #: ../../rst/cli/ansible-vault.rst:231 ../../rst/cli/ansible-vault.rst:277 #: ../../rst/cli/ansible-vault.rst:327 ../../rst/cli/ansible.rst:120 msgid "the vault identity to use" msgstr "使用ã™ã‚‹ Vault アイデンティティー" #: ../../rst/cli/ansible-console.rst:150 #: ../../rst/cli/ansible-inventory.rst:101 #: ../../rst/cli/ansible-playbook.rst:150 ../../rst/cli/ansible-pull.rst:147 #: ../../rst/cli/ansible-vault.rst:99 ../../rst/cli/ansible-vault.rst:133 #: ../../rst/cli/ansible-vault.rst:167 ../../rst/cli/ansible-vault.rst:197 #: ../../rst/cli/ansible-vault.rst:235 ../../rst/cli/ansible-vault.rst:281 #: ../../rst/cli/ansible-vault.rst:331 ../../rst/cli/ansible.rst:125 msgid "vault password file" msgstr "Vault パスワードファイル" #: ../../rst/cli/ansible-config.rst:44 ../../rst/cli/ansible-console.rst:155 #: ../../rst/cli/ansible-doc.rst:60 ../../rst/cli/ansible-galaxy.rst:44 #: ../../rst/cli/ansible-inventory.rst:106 #: ../../rst/cli/ansible-playbook.rst:155 ../../rst/cli/ansible-pull.rst:157 #: ../../rst/cli/ansible-vault.rst:51 ../../rst/cli/ansible.rst:130 msgid "show program's version number, config file location, configured module search path, module location, executable location and exit" msgstr "プログラムãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã€è¨­å®šãƒ•ァイルã®å ´æ‰€ã€è¨­å®šã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ¤œç´¢ãƒ‘スã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å ´æ‰€ã€å®Ÿè¡Œå¯èƒ½ãªå ´æ‰€ã€ãŠã‚ˆã³çµ‚了を表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible.rst:135 msgid "run asynchronously, failing after X seconds (default=N/A)" msgstr "éžåŒæœŸçš„ã«å®Ÿè¡Œã—ã€X 秒後ã«å¤±æ•—ã—ã¾ã™ (デフォルト㯠N/A)。" #: ../../rst/cli/ansible-console.rst:160 ../../rst/cli/ansible-playbook.rst:160 #: ../../rst/cli/ansible-pull.rst:72 ../../rst/cli/ansible.rst:140 msgid "don't make any changes; instead, try to predict some of the changes that may occur" msgstr "変更を加ãˆãªã„ã§ãã ã•ã„。代ã‚りã«ã€ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚る変更ã®ã„ãã¤ã‹ã‚’予測ã—ã¦ã¿ã¦ãã ã•ã„。" #: ../../rst/cli/ansible-console.rst:165 ../../rst/cli/ansible-playbook.rst:165 #: ../../rst/cli/ansible-pull.rst:87 ../../rst/cli/ansible.rst:145 msgid "when changing (small) files and templates, show the differences in those files; works great with --check" msgstr "(å°è¦æ¨¡ãª) ファイルãŠã‚ˆã³ãƒ†ãƒ³ãƒ—レートã®å¤‰æ›´æ™‚ã«ã€ã“れらã®ãƒ•ァイルã®ç›¸é•点を表示ã—ã¾ã™ã€‚--check ã¨é©åˆ‡ã«é€£æºã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:170 ../../rst/cli/ansible-playbook.rst:170 #: ../../rst/cli/ansible-pull.rst:167 ../../rst/cli/ansible.rst:150 msgid "ask for privilege escalation password" msgstr "æ¨©é™æ˜‡æ ¼ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:175 ../../rst/cli/ansible-doc.rst:70 #: ../../rst/cli/ansible-playbook.rst:175 ../../rst/cli/ansible-pull.rst:172 #: ../../rst/cli/ansible.rst:155 msgid "prepend colon-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules)" msgstr "モジュールライブラリーã¸ã®ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス (デフォルト㯠~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) を先頭ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible.rst:160 msgid "set the poll interval if using -B (default=15)" msgstr "-B (デフォルト㯠15) を使用ã™ã‚‹å ´åˆã¯ãƒãƒ¼ãƒªãƒ³ã‚°é–“隔を設定ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:180 ../../rst/cli/ansible-playbook.rst:180 #: ../../rst/cli/ansible-pull.rst:177 ../../rst/cli/ansible.rst:165 msgid "override the connection timeout in seconds (default=10)" msgstr "接続タイムアウトを秒å˜ä½ã§ä¸Šæ›¸ãã—ã¾ã™ (デフォルト㯠10)。" #: ../../rst/cli/ansible.rst:170 msgid "The action's options in space separated k=v format: -a 'opt1=val1 opt2=val2'" msgstr "スペースã§åŒºåˆ‡ã‚‰ã‚ŒãŸ k=v å½¢å¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚ªãƒ—ション: -a 'opt1=val1 opt2=val2'" #: ../../rst/cli/ansible-console.rst:185 ../../rst/cli/ansible-playbook.rst:185 #: ../../rst/cli/ansible.rst:175 msgid "run operations with become (does not imply password prompting)" msgstr "become ã§æ“作ã®å®Ÿè¡Œ (パスワード入力をæ„味ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“)" #: ../../rst/cli/ansible-console.rst:190 ../../rst/cli/ansible-playbook.rst:190 #: ../../rst/cli/ansible-pull.rst:187 ../../rst/cli/ansible.rst:180 msgid "connection type to use (default=smart)" msgstr "使用ã™ã‚‹æŽ¥ç¶šã‚¿ã‚¤ãƒ— (デフォルト㯠smart)" #: ../../rst/cli/ansible-console.rst:195 #: ../../rst/cli/ansible-inventory.rst:111 #: ../../rst/cli/ansible-playbook.rst:195 ../../rst/cli/ansible-pull.rst:197 #: ../../rst/cli/ansible.rst:185 msgid "set additional variables as key=value or YAML/JSON, if filename prepend with @" msgstr "ファイルåã®å‰ã« @ を付ã‘ã‚‹å ´åˆã¯ã€è¿½åŠ ã®å¤‰æ•°ã‚’ key=value ã¾ãŸã¯ YAML/JSON ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:200 ../../rst/cli/ansible-playbook.rst:200 #: ../../rst/cli/ansible.rst:190 msgid "specify number of parallel processes to use (default=5)" msgstr "使用ã™ã‚‹ä¸¦åˆ—プロセス数を指定ã—ã¾ã™ (デフォルト㯠5)。" #: ../../rst/cli/ansible-config.rst:49 ../../rst/cli/ansible-console.rst:205 #: ../../rst/cli/ansible-doc.rst:80 ../../rst/cli/ansible-galaxy.rst:49 #: ../../rst/cli/ansible-inventory.rst:116 #: ../../rst/cli/ansible-playbook.rst:205 ../../rst/cli/ansible-pull.rst:207 #: ../../rst/cli/ansible-vault.rst:56 ../../rst/cli/ansible.rst:195 msgid "show this help message and exit" msgstr "ヘルプメッセージを表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:210 #: ../../rst/cli/ansible-inventory.rst:121 #: ../../rst/cli/ansible-playbook.rst:210 ../../rst/cli/ansible-pull.rst:212 #: ../../rst/cli/ansible.rst:200 msgid "specify inventory host path or comma separated host list. --inventory-file is deprecated" msgstr "インベントリーホストパスã¾ãŸã¯ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒ›ã‚¹ãƒˆä¸€è¦§ã‚’指定ã—ã¾ã™ã€‚--inventory-file ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/cli/ansible-console.rst:215 ../../rst/cli/ansible-playbook.rst:215 #: ../../rst/cli/ansible-pull.rst:217 ../../rst/cli/ansible.rst:205 msgid "ask for connection password" msgstr "接続ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:220 ../../rst/cli/ansible-playbook.rst:220 #: ../../rst/cli/ansible-pull.rst:222 ../../rst/cli/ansible.rst:210 msgid "further limit selected hosts to an additional pattern" msgstr "é¸æŠžã—ãŸãƒ›ã‚¹ãƒˆã‚’追加パターンã«ã•らã«åˆ¶é™ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible.rst:215 msgid "Name of the action to execute (default=command)" msgstr "実行ã™ã‚‹å‹•作ã®åå‰ (default=command)" #: ../../rst/cli/ansible.rst:220 msgid "condense output" msgstr "出力をè¦ç´„ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible.rst:225 msgid "log output to this directory" msgstr "ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ­ã‚°ã‚’記録ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:225 ../../rst/cli/ansible-playbook.rst:230 #: ../../rst/cli/ansible-pull.rst:247 ../../rst/cli/ansible.rst:230 msgid "connect as this user (default=None)" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦æŽ¥ç¶šã—ã¾ã™ (デフォルト㯠None)。" #: ../../rst/cli/ansible-config.rst:54 ../../rst/cli/ansible-console.rst:230 #: ../../rst/cli/ansible-doc.rst:110 ../../rst/cli/ansible-galaxy.rst:54 #: ../../rst/cli/ansible-inventory.rst:131 #: ../../rst/cli/ansible-playbook.rst:235 ../../rst/cli/ansible-pull.rst:252 #: ../../rst/cli/ansible-vault.rst:61 ../../rst/cli/ansible.rst:235 msgid "verbose mode (-vvv for more, -vvvv to enable connection debugging)" msgstr "詳細モード (-vvv ã®å ´åˆã¯ã‚ˆã‚Šè©³ç´°ã«ãªã‚Šã€-vvvv ã®å ´åˆã¯æŽ¥ç¶šã®ãƒ‡ãƒãƒƒã‚°ã‚’有効ã«ã—ã¾ã™)" #: ../../rst/cli/ansible-config.rst:185 ../../rst/cli/ansible-console.rst:239 #: ../../rst/cli/ansible-doc.rst:119 ../../rst/cli/ansible-galaxy.rst:787 #: ../../rst/cli/ansible-inventory.rst:145 #: ../../rst/cli/ansible-playbook.rst:244 ../../rst/cli/ansible-pull.rst:261 #: ../../rst/cli/ansible-vault.rst:342 ../../rst/cli/ansible.rst:244 msgid "Environment" msgstr "環境" #: ../../rst/cli/ansible-config.rst:187 ../../rst/cli/ansible-console.rst:241 #: ../../rst/cli/ansible-doc.rst:121 ../../rst/cli/ansible-galaxy.rst:789 #: ../../rst/cli/ansible-inventory.rst:147 #: ../../rst/cli/ansible-playbook.rst:246 ../../rst/cli/ansible-pull.rst:263 #: ../../rst/cli/ansible-vault.rst:344 ../../rst/cli/ansible.rst:246 msgid "The following environment variables may be specified." msgstr "以下ã®ç’°å¢ƒå¤‰æ•°ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:191 ../../rst/cli/ansible-console.rst:245 #: ../../rst/cli/ansible-doc.rst:125 ../../rst/cli/ansible-galaxy.rst:793 #: ../../rst/cli/ansible-inventory.rst:151 #: ../../rst/cli/ansible-playbook.rst:250 ../../rst/cli/ansible-pull.rst:267 #: ../../rst/cli/ansible-vault.rst:348 ../../rst/cli/ansible.rst:250 msgid ":envvar:`ANSIBLE_CONFIG` -- Override the default ansible config file" msgstr ":envvar:`ANSIBLE_CONFIG` -- デフォルト㮠Ansible 設定ファイルを上書ãã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:193 ../../rst/cli/ansible-console.rst:247 #: ../../rst/cli/ansible-doc.rst:127 ../../rst/cli/ansible-galaxy.rst:795 #: ../../rst/cli/ansible-inventory.rst:153 #: ../../rst/cli/ansible-playbook.rst:252 ../../rst/cli/ansible-pull.rst:269 #: ../../rst/cli/ansible-vault.rst:350 ../../rst/cli/ansible.rst:252 msgid "Many more are available for most options in ansible.cfg" msgstr "ansible.cfg ã®ã»ã¨ã‚“ã©ã®ã‚ªãƒ—ションã§ã€ã•らã«å¤šãã®ã‚‚ã®ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:197 ../../rst/cli/ansible-console.rst:251 #: ../../rst/cli/ansible-doc.rst:131 ../../rst/cli/ansible-galaxy.rst:799 #: ../../rst/cli/ansible-inventory.rst:157 #: ../../rst/cli/ansible-playbook.rst:256 ../../rst/cli/ansible-pull.rst:273 #: ../../rst/cli/ansible-vault.rst:354 ../../rst/cli/ansible.rst:256 msgid "Files" msgstr "ファイル" #: ../../rst/cli/ansible-config.rst:200 ../../rst/cli/ansible-console.rst:254 #: ../../rst/cli/ansible-doc.rst:134 ../../rst/cli/ansible-galaxy.rst:802 #: ../../rst/cli/ansible-inventory.rst:160 #: ../../rst/cli/ansible-playbook.rst:259 ../../rst/cli/ansible-pull.rst:276 #: ../../rst/cli/ansible-vault.rst:357 ../../rst/cli/ansible.rst:259 msgid ":file:`/etc/ansible/ansible.cfg` -- Config file, used if present" msgstr ":file:`/etc/ansible/ansible.cfg` -- 存在ã™ã‚‹å ´åˆã¯ã€ä½¿ç”¨ã•れる設定ファイル。" #: ../../rst/cli/ansible-config.rst:202 ../../rst/cli/ansible-console.rst:256 #: ../../rst/cli/ansible-doc.rst:136 ../../rst/cli/ansible-galaxy.rst:804 #: ../../rst/cli/ansible-inventory.rst:162 #: ../../rst/cli/ansible-playbook.rst:261 ../../rst/cli/ansible-pull.rst:278 #: ../../rst/cli/ansible-vault.rst:359 ../../rst/cli/ansible.rst:261 msgid ":file:`~/.ansible.cfg` -- User config file, overrides the default config if present" msgstr ":file:`~/.ansible.cfg` -- 存在ã™ã‚‹å ´åˆã¯ã€ãƒ‡ãƒ•ォルト設定を上書ãã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼è¨­å®šãƒ•ァイル。" #: ../../rst/cli/ansible-config.rst:205 ../../rst/cli/ansible-console.rst:259 #: ../../rst/cli/ansible-doc.rst:139 ../../rst/cli/ansible-galaxy.rst:807 #: ../../rst/cli/ansible-inventory.rst:165 #: ../../rst/cli/ansible-playbook.rst:264 ../../rst/cli/ansible-pull.rst:281 #: ../../rst/cli/ansible-vault.rst:362 ../../rst/cli/ansible.rst:264 msgid "Author" msgstr "作æˆè€…" #: ../../rst/cli/ansible-config.rst:207 ../../rst/cli/ansible-console.rst:261 #: ../../rst/cli/ansible-doc.rst:141 ../../rst/cli/ansible-galaxy.rst:809 #: ../../rst/cli/ansible-inventory.rst:167 #: ../../rst/cli/ansible-playbook.rst:266 ../../rst/cli/ansible-pull.rst:283 #: ../../rst/cli/ansible-vault.rst:364 ../../rst/cli/ansible.rst:266 msgid "Ansible was originally written by Michael DeHaan." msgstr "Ansible ã¯å½“åˆã€Michael DeHaan ã«ã‚ˆã£ã¦è¨˜è¿°ã•れã¾ã—ãŸã€‚" #: ../../rst/cli/ansible-config.rst:209 ../../rst/cli/ansible-console.rst:263 #: ../../rst/cli/ansible-doc.rst:143 ../../rst/cli/ansible-galaxy.rst:811 #: ../../rst/cli/ansible-inventory.rst:169 #: ../../rst/cli/ansible-playbook.rst:268 ../../rst/cli/ansible-pull.rst:285 #: ../../rst/cli/ansible-vault.rst:366 ../../rst/cli/ansible.rst:268 msgid "See the `AUTHORS` file for a complete list of contributors." msgstr "貢献者ã®å®Œå…¨ãªä¸€è¦§ã¯ã€`AUTHORS` ファイルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/cli/ansible-config.rst:213 ../../rst/cli/ansible-console.rst:267 #: ../../rst/cli/ansible-doc.rst:147 ../../rst/cli/ansible-galaxy.rst:815 #: ../../rst/cli/ansible-inventory.rst:173 #: ../../rst/cli/ansible-playbook.rst:272 ../../rst/cli/ansible-pull.rst:289 #: ../../rst/cli/ansible-vault.rst:370 ../../rst/cli/ansible.rst:272 msgid "License" msgstr "ライセンス" #: ../../rst/cli/ansible-config.rst:215 ../../rst/cli/ansible-console.rst:269 #: ../../rst/cli/ansible-doc.rst:149 ../../rst/cli/ansible-galaxy.rst:817 #: ../../rst/cli/ansible-inventory.rst:175 #: ../../rst/cli/ansible-playbook.rst:274 ../../rst/cli/ansible-pull.rst:291 #: ../../rst/cli/ansible-vault.rst:372 ../../rst/cli/ansible.rst:274 msgid "Ansible is released under the terms of the GPLv3+ License." msgstr "Ansible ã¯ã€GPLv3 以é™ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å¯¾è±¡ç¯„囲ã§ãƒªãƒªãƒ¼ã‚¹ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:218 ../../rst/cli/ansible-console.rst:272 #: ../../rst/cli/ansible-doc.rst:152 ../../rst/cli/ansible-galaxy.rst:820 #: ../../rst/cli/ansible-inventory.rst:178 #: ../../rst/cli/ansible-playbook.rst:277 ../../rst/cli/ansible-pull.rst:294 #: ../../rst/cli/ansible-vault.rst:375 ../../rst/cli/ansible.rst:277 msgid "See also" msgstr "å‚照情報" #: ../../rst/cli/ansible-config.rst:220 ../../rst/cli/ansible-console.rst:274 #: ../../rst/cli/ansible-doc.rst:154 ../../rst/cli/ansible-galaxy.rst:822 #: ../../rst/cli/ansible-inventory.rst:180 #: ../../rst/cli/ansible-playbook.rst:279 ../../rst/cli/ansible-pull.rst:296 #: ../../rst/cli/ansible-vault.rst:377 ../../rst/cli/ansible.rst:279 msgid ":manpage:`ansible(1)`, :manpage:`ansible-config(1)`, :manpage:`ansible-console(1)`, :manpage:`ansible-doc(1)`, :manpage:`ansible-galaxy(1)`, :manpage:`ansible-inventory(1)`, :manpage:`ansible-playbook(1)`, :manpage:`ansible-pull(1)`, :manpage:`ansible-vault(1)`," msgstr ":manpage:`ansible(1)`〠:manpage:`ansible-config(1)`〠:manpage:`ansible-console(1)`〠:manpage:`ansible-doc(1)`〠:manpage:`ansible-galaxy(1)`〠:manpage:`ansible-inventory(1)`〠:manpage:`ansible-playbook(1)`〠:manpage:`ansible-pull(1)`〠:manpage:`ansible-vault(1)`" #: ../../rst/cli/ansible-config.rst:7 msgid "ansible-config" msgstr "ansible-config" #: ../../rst/cli/ansible-config.rst:10 msgid ":strong:`View ansible configuration.`" msgstr ":strong:`ansible 設定を表示ã—ã¾ã™ã€‚`" #: ../../rst/cli/ansible-config.rst:33 msgid "Config command line class" msgstr "設定コマンドラインクラス" #: ../../rst/cli/ansible-config.rst:62 ../../rst/cli/ansible-galaxy.rst:62 #: ../../rst/cli/ansible-vault.rst:69 msgid "Actions" msgstr "アクション" #: ../../rst/cli/ansible-config.rst:70 msgid "list" msgstr "list" #: ../../rst/cli/ansible-config.rst:72 msgid "list and output available configs" msgstr "利用å¯èƒ½ãªè¨­å®šã®ä¸€è¦§è¡¨ç¤ºã¨å‡ºåŠ›" #: ../../rst/cli/ansible-config.rst:80 ../../rst/cli/ansible-config.rst:110 #: ../../rst/cli/ansible-config.rst:136 ../../rst/cli/ansible-config.rst:170 msgid "path to configuration file, defaults to first file found in precedence." msgstr "設定ファイルã¸ã®ãƒ‘ス (デフォルトã¯å„ªå…ˆã•れる最åˆã®ãƒ•ァイルã§ã™)。" #: ../../rst/cli/ansible-config.rst:84 ../../rst/cli/ansible-config.rst:114 #: ../../rst/cli/ansible-config.rst:140 ../../rst/cli/ansible-config.rst:174 msgid "Filter down to a specific plugin type." msgstr "特定ã®ãƒ—ラグインタイプã«çµžã‚Šè¾¼ã¿ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:96 msgid "dump" msgstr "dump" #: ../../rst/cli/ansible-config.rst:98 msgid "Shows the current settings, merges ansible.cfg if specified" msgstr "ç¾åœ¨ã®è¨­å®šã‚’表示ã—ã€æŒ‡å®šã—ãŸå ´åˆã¯ ansible.cfg をマージã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:106 msgid "Only show configurations that have changed from the default" msgstr "デフォルトã‹ã‚‰å¤‰æ›´ã—ãŸè¨­å®šã®ã¿ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:126 ../../rst/cli/ansible-vault.rst:179 msgid "view" msgstr "view" #: ../../rst/cli/ansible-config.rst:128 msgid "Displays the current config file" msgstr "ç¾åœ¨ã®è¨­å®šãƒ•ァイルを表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-config.rst:152 msgid "init" msgstr "init" #: ../../rst/cli/ansible-config.rst:162 msgid "Prefixes all entries with a comment character to disable them" msgstr "無効ã«ã™ã‚‹ã‚³ãƒ¡ãƒ³ãƒˆæ–‡å­—ã‚’æŒã¤ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ—レフィックス" #: ../../rst/cli/ansible-config.rst:166 msgid "Output format for init" msgstr "init ã®å‡ºåЛ形å¼" #: ../../rst/cli/ansible-console.rst:7 msgid "ansible-console" msgstr "ansible-console" #: ../../rst/cli/ansible-console.rst:10 msgid ":strong:`REPL console for executing Ansible tasks.`" msgstr ":strong:`Ansible タスクを実行ã™ã‚‹ REPL コンソール`" #: ../../rst/cli/ansible-console.rst:38 msgid "A REPL that allows for running ad-hoc tasks against a chosen inventory from a nice shell with built-in tab completion (based on dominis' ansible-shell)." msgstr "(dominis ã® ansible-shell ã«åŸºã¥ã) 組ã¿è¾¼ã¿ã®ã‚¿ãƒ–補完機能を備ãˆãŸå„ªã‚ŒãŸã‚·ã‚§ãƒ«ã‹ã‚‰é¸æŠžã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å¯¾ã—ã¦ã€ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãるよã†ã«ã™ã‚‹ REPL。" #: ../../rst/cli/ansible-console.rst:42 msgid "It supports several commands, and you can modify its configuration at runtime:" msgstr "ã“れã¯è¤‡æ•°ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã€èµ·å‹•時ã«ãã®è¨­å®šã‚’変更ã§ãã¾ã™ã€‚" #: ../../rst/cli/ansible-console.rst:45 msgid "`cd [pattern]`: change host/group (you can use host patterns eg.: app*.dc*:!app01*)" msgstr "`cd [pattern]`: ホスト/グループを変更ã™ã‚‹ (app*.dc*:!app01* ãªã©ã®ãƒ›ã‚¹ãƒˆãƒ‘ターンを使用ã§ãã¾ã™)" #: ../../rst/cli/ansible-console.rst:46 msgid "`list`: list available hosts in the current path" msgstr "`list`: ç¾åœ¨ã®ãƒ‘スã§åˆ©ç”¨å¯èƒ½ãªãƒ›ã‚¹ãƒˆã‚’一覧表示ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:47 msgid "`list groups`: list groups included in the current path" msgstr "`list groups`: ç¾åœ¨ã®ãƒ‘スã«å«ã¾ã‚Œã‚‹ã‚°ãƒ«ãƒ¼ãƒ—を一覧表示ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:48 msgid "`become`: toggle the become flag" msgstr "`become`: become フラグを切り替ãˆã‚‹" #: ../../rst/cli/ansible-console.rst:49 msgid "`!`: forces shell module instead of the ansible module (!yum update -y)" msgstr "`!`: Ansible モジュールã®ä»£ã‚りã«ã‚·ã‚§ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’強制的ã«å®Ÿè¡Œã™ã‚‹ (!yum update -y)" #: ../../rst/cli/ansible-console.rst:50 msgid "`verbosity [num]`: set the verbosity level" msgstr "`verbosity [num]`: 詳細レベルを設定ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:51 msgid "`forks [num]`: set the number of forks" msgstr "`forks [num]`: ãƒ•ã‚©ãƒ¼ã‚¯ã®æ•°ã‚’設定ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:52 msgid "`become_user [user]`: set the become_user" msgstr "`become_user [user]`: become_user を設定ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:53 msgid "`remote_user [user]`: set the remote_user" msgstr "`remote_user [user]`: remote_user を設定ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:54 msgid "`become_method [method]`: set the privilege escalation method" msgstr "`become_method [method]`: æ¨©é™æ˜‡æ ¼æ–¹æ³•を設定ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:55 msgid "`check [bool]`: toggle check mode" msgstr "`check [bool]`: ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’切り替ãˆã‚‹" #: ../../rst/cli/ansible-console.rst:56 msgid "`diff [bool]`: toggle diff mode" msgstr "`diff [bool]`: diff モードを切り替ãˆã‚‹" #: ../../rst/cli/ansible-console.rst:57 msgid "`timeout [integer]`: set the timeout of tasks in seconds (0 to disable)" msgstr "`timeout [integer]`: タスクã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’å˜ä½ã§è¨­å®šã™ã‚‹ (無効ã«ã™ã‚‹ã«ã¯ 0)" #: ../../rst/cli/ansible-console.rst:58 msgid "`help [command/module]`: display documentation for the command or module" msgstr "`help [command/module]`: コマンドã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:59 msgid "`exit`: exit ansible-console" msgstr "`exit`: ansible-console を終了ã™ã‚‹" #: ../../rst/cli/ansible-console.rst:130 ../../rst/cli/ansible-playbook.rst:135 msgid "one-step-at-a-time: confirm each task before running" msgstr "one-step-at-a-time: 実行å‰ã«å„タスクを確èªã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:7 msgid "ansible-doc" msgstr "ansible-doc" #: ../../rst/cli/ansible-doc.rst:10 msgid ":strong:`plugin documentation tool`" msgstr ":strong:`プラグインドキュメントツール`" #: ../../rst/cli/ansible-doc.rst:36 msgid "displays information on modules installed in Ansible libraries. It displays a terse listing of plugins and their short descriptions, provides a printout of their DOCUMENTATION strings, and it can create a short \"snippet\" which can be pasted into a playbook." msgstr "Ansible ライブラリーã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るモジュールã«é–¢ã™ã‚‹æƒ…報を表示ã—ã¾ã™ã€‚プラグインã¨ãã®ç°¡å˜ãªèª¬æ˜Žã‚’表示ã—ã€DOCUMENTATION 文字列を出力ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Playbook ã«ç°¡å˜ã«å¼µã‚Šä»˜ã‘ã‚‹ã“ã¨ãŒã§ãる短ã„「スニペットã€ã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:50 msgid "**For internal testing only** Dump json metadata for all plugins." msgstr "**内部テストã®ã¿** ã™ã¹ã¦ã®ãƒ—ラグイン㮠json メタデータをダンプã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:65 msgid "Show plugin names and their source files without summaries (implies --list). A supplied argument will be used for filtering, can be a namespace or full collection name." msgstr "è¦ç´„ãªã—ã§ãƒ—ラグインåãŠã‚ˆã³ã‚½ãƒ¼ã‚¹ãƒ•ァイルを表示ã—ã¾ã™ (implmaries --list)。指定ã—ãŸå¼•æ•°ã¯ã€åå‰ç©ºé–“ã¾ãŸã¯å®Œå…¨ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:75 msgid "Select the entry point for role(s)." msgstr "ロールã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:85 msgid "Change output into json format." msgstr "出力を json å½¢å¼ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:90 msgid "List available plugins. A supplied argument will be used for filtering, can be a namespace or full collection name." msgstr "利用å¯èƒ½ãªãƒ—ラグインを一覧表示ã—ã¾ã™ã€‚指定ã•れãŸå¼•æ•°ã¯ãƒ•ィルタリングã«ä½¿ç”¨ã•れã€åå‰ç©ºé–“ã¾ãŸã¯å®Œå…¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/cli/ansible-doc.rst:95 msgid "The path to the directory containing your roles." msgstr "ロールをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘ス。" #: ../../rst/cli/ansible-doc.rst:100 msgid "Show playbook snippet for these plugin types: inventory, lookup, module" msgstr "次ã®ãƒ—ラグインタイプ㮠Playbook スニペットを表示ã—ã¾ã™ï¼ˆinventoryã€lookupã€module)。" #: ../../rst/cli/ansible-doc.rst:105 msgid "Choose which plugin type (defaults to \"module\"). Available plugin types are : ('become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'netconf', 'shell', 'vars', 'module', 'strategy', 'role', 'keyword')" msgstr "プラグインã®ç¨®é¡ž (デフォルトã¯ã€Œmoduleã€) ã‚’é¸æŠžã—ã¾ã™ã€‚利用å¯èƒ½ãªãƒ—ラグインã®ç¨®é¡žã¯ (「becomeã€ã€ã€Œcacheã€ã€ã€Œcallbackã€ã€ã€Œcliconfã€ã€ã€Œconnectionã€ã€ã€Œhttpapiã€ã€ã€Œinventoryã€ã€ã€Œlookupã€ã€ã€Œnetconfã€ã€ã€Œshellã€ã€ã€Œvarsã€ã€ã€Œmoduleã€ã€ã€Œstrategyã€ã€ã€Œroleã€ã€ã€Œkeywordã€) ã§ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:7 msgid "ansible-galaxy" msgstr "ansible-galaxy" #: ../../rst/cli/ansible-galaxy.rst:10 msgid ":strong:`Perform various Role and Collection related operations.`" msgstr ":strong:`ロールãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«é–¢ã™ã‚‹æ§˜ã€…ãªæ“作を実行ã—ã¾ã™ã€‚`" #: ../../rst/cli/ansible-galaxy.rst:33 msgid "command to manage Ansible roles in shared repositories, the default of which is Ansible Galaxy *https://galaxy.ansible.com*." msgstr "共有リãƒã‚¸ãƒˆãƒªãƒ¼ã® Ansible ロールを管ç†ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ (デフォルト㯠Ansible Galaxy *https://galaxy.ansible.com* ã§ã™)。" #: ../../rst/cli/ansible-galaxy.rst:70 msgid "collection" msgstr "コレクション" #: ../../rst/cli/ansible-galaxy.rst:72 msgid "Perform the action on an Ansible Galaxy collection. Must be combined with a further action like init/install as listed below." msgstr "Ansible Galaxy コレクションã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚以下ã§ç¤ºã™ã‚ˆã†ã«ã€init/install ãªã©ã®è¿½åŠ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¨çµ„ã¿åˆã‚ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:84 msgid "collection download" msgstr "collection download" #: ../../rst/cli/ansible-galaxy.rst:94 ../../rst/cli/ansible-galaxy.rst:265 msgid "Clear the existing server response cache." msgstr "既存ã®ã‚µãƒ¼ãƒãƒ¼ã®å¿œç­”キャッシュを消去ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:98 ../../rst/cli/ansible-galaxy.rst:273 msgid "Do not use the server response cache." msgstr "サーãƒãƒ¼ã®å¿œç­”キャッシュを使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/cli/ansible-galaxy.rst:102 ../../rst/cli/ansible-galaxy.rst:277 msgid "Include pre-release versions. Semantic versioning pre-releases are ignored by default" msgstr "リリースå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã¾ã™ã€‚セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã®ãƒ—レリリースã¯ãƒ‡ãƒ•ォルトã§ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:106 ../../rst/cli/ansible-galaxy.rst:156 #: ../../rst/cli/ansible-galaxy.rst:195 ../../rst/cli/ansible-galaxy.rst:236 #: ../../rst/cli/ansible-galaxy.rst:281 ../../rst/cli/ansible-galaxy.rst:338 #: ../../rst/cli/ansible-galaxy.rst:375 ../../rst/cli/ansible-galaxy.rst:444 #: ../../rst/cli/ansible-galaxy.rst:481 ../../rst/cli/ansible-galaxy.rst:514 #: ../../rst/cli/ansible-galaxy.rst:543 ../../rst/cli/ansible-galaxy.rst:588 #: ../../rst/cli/ansible-galaxy.rst:633 ../../rst/cli/ansible-galaxy.rst:670 #: ../../rst/cli/ansible-galaxy.rst:707 ../../rst/cli/ansible-galaxy.rst:744 msgid "The Ansible Galaxy API key which can be found at https://galaxy.ansible.com/me/preferences." msgstr "https://galaxy.ansible.com/me/preferences ã§è¦‹ã¤ã‹ã‚‹ Ansible Galaxy API キー。" #: ../../rst/cli/ansible-galaxy.rst:110 ../../rst/cli/ansible-galaxy.rst:160 #: ../../rst/cli/ansible-galaxy.rst:199 ../../rst/cli/ansible-galaxy.rst:240 #: ../../rst/cli/ansible-galaxy.rst:289 ../../rst/cli/ansible-galaxy.rst:342 #: ../../rst/cli/ansible-galaxy.rst:379 ../../rst/cli/ansible-galaxy.rst:452 #: ../../rst/cli/ansible-galaxy.rst:485 ../../rst/cli/ansible-galaxy.rst:518 #: ../../rst/cli/ansible-galaxy.rst:547 ../../rst/cli/ansible-galaxy.rst:592 #: ../../rst/cli/ansible-galaxy.rst:637 ../../rst/cli/ansible-galaxy.rst:674 #: ../../rst/cli/ansible-galaxy.rst:711 ../../rst/cli/ansible-galaxy.rst:748 msgid "Ignore SSL certificate validation errors." msgstr "SSL è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:114 msgid "Don't download collection(s) listed as dependencies." msgstr "ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ãƒªã‚¹ãƒˆã•れã¦ã„るコレクションã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/cli/ansible-galaxy.rst:118 msgid "The directory to download the collections to." msgstr "コレクションをダウンロードã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚" #: ../../rst/cli/ansible-galaxy.rst:122 msgid "A file containing a list of collections to be downloaded." msgstr "ダウンロードã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€è¦§ã‚’å«ã‚€ãƒ•ァイル。" #: ../../rst/cli/ansible-galaxy.rst:126 ../../rst/cli/ansible-galaxy.rst:168 #: ../../rst/cli/ansible-galaxy.rst:207 ../../rst/cli/ansible-galaxy.rst:244 #: ../../rst/cli/ansible-galaxy.rst:313 ../../rst/cli/ansible-galaxy.rst:350 #: ../../rst/cli/ansible-galaxy.rst:395 ../../rst/cli/ansible-galaxy.rst:460 #: ../../rst/cli/ansible-galaxy.rst:493 ../../rst/cli/ansible-galaxy.rst:522 #: ../../rst/cli/ansible-galaxy.rst:555 ../../rst/cli/ansible-galaxy.rst:596 #: ../../rst/cli/ansible-galaxy.rst:641 ../../rst/cli/ansible-galaxy.rst:682 #: ../../rst/cli/ansible-galaxy.rst:719 ../../rst/cli/ansible-galaxy.rst:776 msgid "The Galaxy API server URL" msgstr "Galaxy API サーãƒãƒ¼ URL" #: ../../rst/cli/ansible-galaxy.rst:137 msgid "collection init" msgstr "collection init" #: ../../rst/cli/ansible-galaxy.rst:139 ../../rst/cli/ansible-galaxy.rst:423 msgid "Creates the skeleton framework of a role or collection that complies with the Galaxy metadata format. Requires a role or collection name. The collection name must be in the format ``.``." msgstr "Galaxy メタデータ形å¼ã«æº–æ‹ ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ãƒ•レームワークを作æˆã—ã¾ã™ã€‚ロールã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åãŒå¿…è¦ã§ã™ã€‚コレクションå㯠``.`` ã®å½¢å¼ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:148 msgid "The path to a collection skeleton that the new collection should be based upon." msgstr "æ–°ã—ã„コレクションã®åŸºã¨ãªã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã¸ã®ãƒ‘ス。" #: ../../rst/cli/ansible-galaxy.rst:152 msgid "The path in which the skeleton collection will be created. The default is the current working directory." msgstr "スケルトンコレクションãŒä½œæˆã•れるパス。デフォルトã¯ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:164 ../../rst/cli/ansible-galaxy.rst:203 #: ../../rst/cli/ansible-galaxy.rst:293 ../../rst/cli/ansible-galaxy.rst:456 #: ../../rst/cli/ansible-galaxy.rst:752 msgid "Force overwriting an existing role or collection" msgstr "既存ã®ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸Šæ›¸ãを強制ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:179 msgid "collection build" msgstr "collection build" #: ../../rst/cli/ansible-galaxy.rst:181 msgid "Build an Ansible Galaxy collection artifact that can be stored in a central repository like Ansible Galaxy. By default, this command builds from the current working directory. You can optionally pass in the collection input path (where the ``galaxy.yml`` file is)." msgstr "Ansible Galaxy ãªã©ã®ä¸­å¤®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«æ ¼ç´ã§ãã‚‹ Ansible Galaxy コレクションアーティファクトを構築ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰æ§‹ç¯‰ã•れã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å…¥åŠ›ãƒ‘ã‚¹ã‚’æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ (``galaxy.yml`` ファイルã®å ´æ‰€ã§ã™)。" #: ../../rst/cli/ansible-galaxy.rst:191 msgid "The path in which the collection is built to. The default is the current working directory." msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒæ§‹ç¯‰ã•れるパス。デフォルトã¯ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:218 msgid "collection publish" msgstr "collection publish" #: ../../rst/cli/ansible-galaxy.rst:220 msgid "Publish a collection into Ansible Galaxy. Requires the path to the collection tarball to publish." msgstr "コレクションを Ansible Galaxy ã«å…¬é–‹ã—ã¾ã™ã€‚公開ã™ã‚‹ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ tarball ã¸ã®ãƒ‘スãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:228 msgid "The time to wait for the collection import process to finish." msgstr "コレクションã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセスãŒå®Œäº†ã™ã‚‹ã®ã‚’å¾…ã¤æ™‚間。" #: ../../rst/cli/ansible-galaxy.rst:232 msgid "Don't wait for import validation results." msgstr "インãƒãƒ¼ãƒˆã®æ¤œè¨¼çµæžœã‚’å¾…ã¡ã¾ã›ã‚“。" #: ../../rst/cli/ansible-galaxy.rst:255 msgid "collection install" msgstr "collection install" #: ../../rst/cli/ansible-galaxy.rst:269 msgid "Force overwriting an existing collection and its dependencies." msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ãã®ä¾å­˜é–¢ä¿‚を強制的ã«ä¸Šæ›¸ãã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:285 msgid "Upgrade installed collection artifacts. This will also update dependencies unless --no-deps is provided" msgstr "インストールã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトをアップグレードã—ã¾ã™ã€‚--no-deps ãŒæä¾›ã•れã¦ã„ã‚‹å ´åˆã‚’除ãä¾å­˜é–¢ä¿‚ã‚‚æ›´æ–°ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:297 msgid "Ignore errors during installation and continue with the next specified collection. This will not ignore dependency conflict errors." msgstr "インストール時ã«ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ã€æ¬¡ã®æŒ‡å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ç¶šè¡Œã—ã¾ã™ã€‚ä¾å­˜é–¢ä¿‚ã®ç«¶åˆã‚¨ãƒ©ãƒ¼ã¯ç„¡è¦–ã—ã¾ã›ã‚“。" #: ../../rst/cli/ansible-galaxy.rst:301 msgid "Don't download collections listed as dependencies." msgstr "ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ä¸€è¦§è¡¨ç¤ºã•れã¦ã„るコレクションã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/cli/ansible-galaxy.rst:305 msgid "The path to the directory containing your collections." msgstr "コレクションをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘ス。" #: ../../rst/cli/ansible-galaxy.rst:309 msgid "A file containing a list of collections to be installed." msgstr "インストールã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€è¦§ã‚’å«ã‚€ãƒ•ァイル。" #: ../../rst/cli/ansible-galaxy.rst:324 msgid "collection list" msgstr "collection list" #: ../../rst/cli/ansible-galaxy.rst:326 ../../rst/cli/ansible-galaxy.rst:535 msgid "List installed collections or roles" msgstr "インストール済ã¿ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’一覧表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:334 msgid "Format to display the list of collections in." msgstr "コレクションã®ä¸€è¦§ã‚’表示ã™ã‚‹å½¢å¼ã€‚" #: ../../rst/cli/ansible-galaxy.rst:346 ../../rst/cli/ansible-galaxy.rst:387 msgid "One or more directories to search for collections in addition to the default COLLECTIONS_PATHS. Separate multiple paths with ':'." msgstr "デフォルト㮠COLLECTIONS_PATHS ã«åŠ ãˆã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’検索ã™ã‚‹ 1 ã¤ä»¥ä¸Šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚複数ã®ãƒ‘スã¯ã€ã€Œ:ã€ã§åŒºåˆ‡ã‚Šã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:361 msgid "collection verify" msgstr "collection verify" #: ../../rst/cli/ansible-galaxy.rst:371 msgid "Validate collection integrity locally without contacting server for canonical manifest hash." msgstr "通常ã®ãƒžãƒ‹ãƒ•ェストãƒãƒƒã‚·ãƒ¥ã®ãŸã‚ã«ã‚µãƒ¼ãƒãƒ¼ã«å•ã„åˆã‚ã›ã‚‹ã“ã¨ãªãã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ•´åˆæ€§ã‚’ãƒ­ãƒ¼ã‚«ãƒ«ã§æ¤œè¨¼ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:383 msgid "Ignore errors during verification and continue with the next specified collection." msgstr "検証時ã®ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ã€æ¬¡ã®æŒ‡å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ç¶šè¡Œã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:391 msgid "A file containing a list of collections to be verified." msgstr "検証ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€è¦§ã‚’å«ã‚€ãƒ•ァイル。" #: ../../rst/cli/ansible-galaxy.rst:407 msgid "role" msgstr "ロール" #: ../../rst/cli/ansible-galaxy.rst:409 msgid "Perform the action on an Ansible Galaxy role. Must be combined with a further action like delete/install/init as listed below." msgstr "Ansible Galaxy ãƒ­ãƒ¼ãƒ«ã§æ“作を実行ã—ã¾ã™ã€‚以下ã®ã‚ˆã†ã« delete/install/init ãªã©ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¨çµ„ã¿åˆã‚ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:421 msgid "role init" msgstr "role init" #: ../../rst/cli/ansible-galaxy.rst:432 msgid "The path in which the skeleton role will be created. The default is the current working directory." msgstr "スケルトンロールãŒä½œæˆã•れるパス。デフォルトã¯ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:436 ../../rst/cli/ansible-galaxy.rst:703 msgid "Don't query the galaxy API when creating roles" msgstr "ロールã®ä½œæˆæ™‚ã« galaxy API ã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’実行ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/cli/ansible-galaxy.rst:440 msgid "The path to a role skeleton that the new role should be based upon." msgstr "æ–°ã—ã„ロールã®åŸºã¨ãªã‚‹ãƒ­ãƒ¼ãƒ«ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã¸ã®ãƒ‘ス。" #: ../../rst/cli/ansible-galaxy.rst:448 msgid "Initialize using an alternate role type. Valid types include: 'container', 'apb' and 'network'." msgstr "別ã®ãƒ­ãƒ¼ãƒ«ã‚¿ã‚¤ãƒ—を使用ã—ã¦åˆæœŸåŒ–ã—ã¾ã™ã€‚有効ãªã‚¿ã‚¤ãƒ—ã«ã¯ã€ã€Œcontainerã€ã€ã€Œapbã€ã€ãŠã‚ˆã³ã€Œnetworkã€ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:471 msgid "role remove" msgstr "role remove" #: ../../rst/cli/ansible-galaxy.rst:473 msgid "removes the list of roles passed as arguments from the local system." msgstr "ローカルシステムã‹ã‚‰å¼•æ•°ã¨ã—ã¦æ¸¡ã•れãŸãƒ­ãƒ¼ãƒ«ã®ä¸€è¦§ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:489 ../../rst/cli/ansible-galaxy.rst:551 #: ../../rst/cli/ansible-galaxy.rst:678 ../../rst/cli/ansible-galaxy.rst:715 #: ../../rst/cli/ansible-galaxy.rst:768 msgid "The path to the directory containing your roles. The default is the first writable one configured via DEFAULT_ROLES_PATH: ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" msgstr "ロールをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘スã§ã™ã€‚デフォルト㯠DEFAULT_ROLES_PATH: ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles ã§è¨­å®šã•れる最åˆã®æ›¸ãè¾¼ã¿å¯èƒ½ãªãƒ•ァイルã§ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:504 msgid "role delete" msgstr "role delete" #: ../../rst/cli/ansible-galaxy.rst:506 msgid "Delete a role from Ansible Galaxy." msgstr "Ansible Galaxy ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:533 msgid "role list" msgstr "role list" #: ../../rst/cli/ansible-galaxy.rst:566 msgid "role search" msgstr "role search" #: ../../rst/cli/ansible-galaxy.rst:568 msgid "searches for roles on the Ansible Galaxy server" msgstr "Ansible Galaxy サーãƒãƒ¼ã§ãƒ­ãƒ¼ãƒ«ã‚’検索ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:576 msgid "GitHub username" msgstr "GitHub ユーザーå" #: ../../rst/cli/ansible-galaxy.rst:580 msgid "list of galaxy tags to filter by" msgstr "フィルタリングã™ã‚‹ galaxy ã‚¿ã‚°ã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:584 msgid "list of OS platforms to filter by" msgstr "フィルタリングã™ã‚‹ OS プラットフォームã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:607 msgid "role import" msgstr "role import" #: ../../rst/cli/ansible-galaxy.rst:609 msgid "used to import a role into Ansible Galaxy" msgstr "Ansible Galaxy ã«ãƒ­ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:617 msgid "The name of a branch to import. Defaults to the repository's default branch (usually master)" msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ãƒ–ランãƒã®åå‰ã€‚デフォルトã§ã¯ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ‡ãƒ•ォルトブランム(通常㯠master) ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:621 msgid "Don't wait for import results." msgstr "インãƒãƒ¼ãƒˆã®çµæžœã‚’å¾…ã¡ã¾ã›ã‚“。" #: ../../rst/cli/ansible-galaxy.rst:625 msgid "The name the role should have, if different than the repo name" msgstr "ロールã«ä»˜ä¸Žã™ã¹ãåå‰ (リãƒã‚¸ãƒˆãƒªãƒ¼åã¨ã¯ç•°ãªã‚‹å ´åˆ)" #: ../../rst/cli/ansible-galaxy.rst:629 msgid "Check the status of the most recent import request for given github_user/github_repo." msgstr "指定ã—㟠github_user/github_repo ã®ã€æœ€æ–°ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆè¦æ±‚ステータスを確èªã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:652 msgid "role setup" msgstr "role setup" #: ../../rst/cli/ansible-galaxy.rst:654 msgid "Setup an integration from Github or Travis for Ansible Galaxy roles" msgstr "Ansible Galaxy ロール㮠Github ã¾ãŸã¯ Travis ã‹ã‚‰ã®çµ±åˆã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:662 msgid "List all of your integrations." msgstr "ã™ã¹ã¦ã®çµ±åˆã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:666 msgid "Remove the integration matching the provided ID value. Use --list to see ID values." msgstr "指定㮠ID 値ã«ä¸€è‡´ã™ã‚‹ã‚¤ãƒ³ãƒ†ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã€‚ID ã®å€¤ã‚’表示ã™ã‚‹ã«ã¯ --list を使用ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:693 msgid "role info" msgstr "role info" #: ../../rst/cli/ansible-galaxy.rst:695 msgid "prints out detailed information about an installed role as well as info available from the galaxy API." msgstr "インストールã•れã¦ã„るロールã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã¨ã€galaxy API ã§åˆ©ç”¨å¯èƒ½ãªæƒ…報を出力ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:730 msgid "role install" msgstr "role install" #: ../../rst/cli/ansible-galaxy.rst:740 msgid "Force overwriting an existing role and its dependencies." msgstr "既存ã®ãƒ­ãƒ¼ãƒ«ã¨ãã®ä¾å­˜é–¢ä¿‚を強制的ã«ä¸Šæ›¸ãã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:756 msgid "Use tar instead of the scm archive option when packaging the role." msgstr "ロールをパッケージ化ã™ã‚‹éš›ã«ã€scm アーカイブオプションã®ä»£ã‚り㫠tar を使用ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:760 msgid "Ignore errors and continue with the next specified role." msgstr "エラーを無視ã—ã¦ã€æ¬¡ã«æŒ‡å®šã—ãŸãƒ­ãƒ¼ãƒ«ã§ç¶šè¡Œã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-galaxy.rst:764 msgid "Don't download roles listed as dependencies." msgstr "ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ãƒªã‚¹ãƒˆã•れã¦ã„るロールã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/cli/ansible-galaxy.rst:772 msgid "A file containing a list of roles to be installed." msgstr "インストールã™ã‚‹ãƒ­ãƒ¼ãƒ«ã®ä¸€è¦§ã‚’å«ã‚€ãƒ•ァイル。" #: ../../rst/cli/ansible-inventory.rst:7 msgid "ansible-inventory" msgstr "ansible-inventory" #: ../../rst/cli/ansible-inventory.rst:10 msgid ":strong:`None`" msgstr ":strong:`None`" #: ../../rst/cli/ansible-inventory.rst:35 msgid "used to display or dump the configured inventory as Ansible sees it" msgstr "Ansible ãŒèªè­˜ã—ã¦ã„るよã†ã«ã€è¨­å®šã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’表示ã¾ãŸã¯ãƒ€ãƒ³ãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-inventory.rst:51 msgid "When doing an --list, represent in a way that is optimized for export,not as an accurate representation of how Ansible has processed it" msgstr "--list を実行ã™ã‚‹å ´åˆã¯ã€Ansible ãŒå‡¦ç†ã™ã‚‹æ–¹æ³•を正確ã«ç¤ºã™ã®ã§ã¯ãªãã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆç”¨ã«æœ€é©åŒ–ã•れる方法を示ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-inventory.rst:56 msgid "create inventory graph, if supplying pattern it must be a valid group name" msgstr "インベントリーグラフを作æˆã—ã¾ã™ (パターンを指定ã—ã¦ã„ã‚‹å ´åˆã¯ã€æœ‰åйãªã‚°ãƒ«ãƒ¼ãƒ—åã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™)。" #: ../../rst/cli/ansible-inventory.rst:61 msgid "Output specific host info, works as inventory script" msgstr "特定ã®ãƒ›ã‚¹ãƒˆæƒ…報を出力ã—ã¾ã™ (インベントリースクリプトã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™)。" #: ../../rst/cli/ansible-inventory.rst:66 msgid "Output all hosts info, works as inventory script" msgstr "全ホスト情報出力ã—ã¾ã™ (インベントリースクリプトã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™)。" #: ../../rst/cli/ansible-inventory.rst:71 #: ../../rst/cli/ansible-inventory.rst:126 msgid "==SUPPRESS==" msgstr "==SUPPRESS==" #: ../../rst/cli/ansible-inventory.rst:76 msgid "When doing --list, send the inventory to a file instead of to the screen" msgstr "--list を実行ã™ã‚‹å ´åˆã¯ã€ç”»é¢ã®ä»£ã‚りã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’ファイルã«é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-inventory.rst:86 msgid "Use TOML format instead of default JSON, ignored for --graph" msgstr "デフォルト㮠JSON ã®ä»£ã‚り㫠TOML å½¢å¼ã‚’使用ã—ã¾ã™ (--graph ã§ã¯ç„¡è¦–ã•れã¾ã™)。" #: ../../rst/cli/ansible-inventory.rst:91 msgid "Add vars to graph display, ignored unless used with --graph" msgstr "グラフ表示ã«å¤‰æ•°ã‚’追加ã—ã¾ã™ã€‚--graph ã¨ä½µç”¨ã—ãªã„é™ã‚Šç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-inventory.rst:136 msgid "Use YAML format instead of default JSON, ignored for --graph" msgstr "デフォルト㮠JSON ã®ä»£ã‚り㫠YAML å½¢å¼ã‚’使用ã—ã¾ã™ã€‚--graph ã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:7 msgid "ansible-playbook" msgstr "ansible-playbook" #: ../../rst/cli/ansible-playbook.rst:10 msgid ":strong:`Runs Ansible playbooks, executing the defined tasks on the targeted hosts.`" msgstr ":strong:`ターゲットã®ãƒ›ã‚¹ãƒˆã§å®šç¾©ã—ãŸã‚¿ã‚¹ã‚¯ã‚’実行ã—㦠Ansible Playbook を実行ã—ã¾ã™ã€‚`" #: ../../rst/cli/ansible-playbook.rst:38 msgid "the tool to run *Ansible playbooks*, which are a configuration and multinode deployment system. See the project home page (https://docs.ansible.com) for more information." msgstr "設定ãŠã‚ˆã³ãƒžãƒ«ãƒãƒŽãƒ¼ãƒ‰ã®ãƒ‡ãƒ—ロイメントシステムã§ã‚ã‚‹ *Ansible Playbook* を実行ã™ã‚‹ãƒ„ール。詳細ã¯ãƒ—ロジェクトã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ (https://docs.ansible.com)) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/cli/ansible-playbook.rst:75 msgid "clear the fact cache for every host in inventory" msgstr "インベントリー内ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®ãƒ•ァクトキャッシュを消去ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:80 msgid "run handlers even if a task fails" msgstr "タスクãŒå¤±æ•—ã—ã¦ã‚‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:90 msgid "list all available tags" msgstr "利用å¯èƒ½ãªã‚¿ã‚°ã‚’ã™ã¹ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:95 msgid "list all tasks that would be executed" msgstr "実行ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’ã™ã¹ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:115 ../../rst/cli/ansible-pull.rst:122 msgid "only run plays and tasks whose tags do not match these values" msgstr "ã‚¿ã‚°ãŒã“れらã®å€¤ã¨ä¸€è‡´ã—ãªã„プレイã¨ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:130 msgid "start the playbook at the task matching this name" msgstr "ã“ã®åå‰ã«ä¸€è‡´ã™ã‚‹ã‚¿ã‚¹ã‚¯ã§ Playbook ã‚’é–‹å§‹ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-playbook.rst:225 ../../rst/cli/ansible-pull.rst:242 msgid "only run plays and tasks tagged with these values" msgstr "ãれらã®å€¤ã§ã‚¿ã‚°ä»˜ã‘ã•れãŸãƒ—レイã¨ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:7 msgid "ansible-pull" msgstr "ansible-pull" #: ../../rst/cli/ansible-pull.rst:10 msgid ":strong:`pulls playbooks from a VCS repo and executes them for the local host`" msgstr ":strong:`VCS リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ Playbooks ã‚’å–å¾—ã—ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ã€‚`" #: ../../rst/cli/ansible-pull.rst:38 msgid "Used to pull a remote copy of ansible on each managed node, each set to run via cron and update playbook source via a source repository. This inverts the default *push* architecture of ansible into a *pull* architecture, which has near-limitless scaling potential." msgstr "å„管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã§ ansible ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚³ãƒ”ーをå–å¾—ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚å„セット㯠cron を介ã—ã¦å®Ÿè¡Œã•れã€ã‚½ãƒ¼ã‚¹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’介ã—㦠Playbook ソースを更新ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ansible ã®ãƒ‡ãƒ•ォルト㮠*push* アーキテクãƒãƒ£ãƒ¼ãŒ *pull* アーキテクãƒãƒ£ãƒ¼ã«å転ã—ã¾ã™ã€‚ã“れã«ã¯ã€ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã®å¯èƒ½æ€§ãŒã»ã¼ç„¡é™ã‚りã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:43 msgid "The setup playbook can be tuned to change the cron frequency, logging locations, and parameters to ansible-pull. This is useful both for extreme scale-out as well as periodic remediation. Usage of the 'fetch' module to retrieve logs from ansible-pull runs would be an excellent way to gather and analyze remote logs from ansible-pull." msgstr "セットアップ Playbook ã¯ã€cron 頻度ã€ãƒ­ã‚®ãƒ³ã‚°ã®å ´æ‰€ã€ãŠã‚ˆã³ãƒ‘ラメーターを ansible-pull ã«å¤‰æ›´ã—ã¾ã™ã€‚ã“れã¯ã€æ€¥ãªã‚¹ã‚±ãƒ¼ãƒ«ã‚¢ã‚¦ãƒˆã¨å®šæœŸçš„ãªä¿®å¾©ã«ã‚‚便利ã§ã™ã€‚ansible-pull ã‹ã‚‰ãƒ­ã‚°ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ã€Œfetchã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã“ã¨ã¯ã€ansible-pull ã‹ã‚‰ãƒ­ã‚°ã‚’åŽé›†ã—ã€åˆ†æžã™ã‚‹ãŸã‚ã®å„ªã‚ŒãŸæ–¹æ³•ã§ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:57 msgid "adds the hostkey for the repo url if not already added" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ URL ã®ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ãŒè¿½åŠ ã•れã¦ã„ãªã„å ´åˆã¯ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:77 msgid "modified files in the working repository will be discarded" msgstr "作業リãƒã‚¸ãƒˆãƒªãƒ¼å†…ã®å¤‰æ›´ã•れãŸãƒ•ァイルã¯ç ´æ£„ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:92 msgid "Do a full clone, instead of a shallow one." msgstr "簡易クローンã§ã¯ãªãã€å®Œå…¨ãªã‚¯ãƒ­ãƒ¼ãƒ³ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:107 msgid "purge checkout after playbook run" msgstr "Playbook ã®å®Ÿè¡Œå¾Œã«ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’パージã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:137 msgid "submodules will track the latest changes. This is equivalent to specifying the --remote flag to git submodule update" msgstr "サブモジュールã§ã¯æœ€æ–°ã®å¤‰æ›´ã‚’追跡ã—ã¾ã™ã€‚ã“れã¯ã€--remote フラグを git ã‚µãƒ–ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ›´æ–°ã«æŒ‡å®šã™ã‚‹ã®ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:152 msgid "verify GPG signature of checked out commit, if it fails abort running the playbook. This needs the corresponding VCS module to support such an operation" msgstr "ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã—ãŸã‚³ãƒŸãƒƒãƒˆã® GPG ç½²åを確èªã—ã¾ã™ã€‚Playbook ã®å®Ÿè¡Œã‚’中断ã§ããªã„å ´åˆã«ã€ã“ã®ã‚ˆã†ãªæ“作をサãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€å¯¾å¿œã™ã‚‹ VCS モジュールãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:162 msgid "branch/tag/commit to checkout. Defaults to behavior of repository module." msgstr "ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã™ã‚‹ãƒ–ランãƒã€ã‚¿ã‚°ã€ã¾ãŸã¯ã‚³ãƒŸãƒƒãƒˆã€‚デフォルトã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‹•作ã§ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:182 msgid "URL of the playbook repository" msgstr "Playbook リãƒã‚¸ãƒˆãƒªãƒ¼ã® URL" #: ../../rst/cli/ansible-pull.rst:192 msgid "absolute path of repository checkout directory (relative paths are not supported)" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®çµ¶å¯¾ãƒ‘ス (相対パスã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“)" #: ../../rst/cli/ansible-pull.rst:202 msgid "run the playbook even if the repository could not be updated" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’æ›´æ–°ã§ããªã‹ã£ãŸå ´åˆã§ã‚‚ã€Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:227 msgid "Repository module name, which ansible will use to check out the repo. Choices are ('git', 'subversion', 'hg', 'bzr'). Default is git." msgstr "Ansible ãŒãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å (「gitã€ã€ã€Œsubversionã€ã€ã€Œhgã€ã€ã€Œbzrã€)。デフォルト㯠git ã§ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:232 msgid "only run the playbook if the repository has been updated" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãŒæ›´æ–°ã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿ Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-pull.rst:237 msgid "sleep for random interval (between 0 and n number of seconds) before starting. This is a useful way to disperse git requests" msgstr "é–‹å§‹å‰ã®ãƒ©ãƒ³ãƒ€ãƒ ãªé–“éš” (0 ~ n ç§’é–“) をスリープ状態ã«ã—ã¾ã™ã€‚ã“れã¯ã€git è¦æ±‚を分散ã•ã›ã‚‹ãŸã‚ã®ä¾¿åˆ©ãªæ–¹æ³•ã§ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:7 msgid "ansible-vault" msgstr "ansible-vault" #: ../../rst/cli/ansible-vault.rst:10 msgid ":strong:`encryption/decryption utility for Ansible data files`" msgstr ":strong:`Ansible ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–/複åˆãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼`" #: ../../rst/cli/ansible-vault.rst:33 msgid "can encrypt any structured data file used by Ansible. This can include *group_vars/* or *host_vars/* inventory variables, variables loaded by *include_vars* or *vars_files*, or variable files passed on the ansible-playbook command line with *-e @file.yml* or *-e @file.json*. Role variables and defaults are also included!" msgstr "Ansible ãŒä½¿ç”¨ã™ã‚‹æ§‹é€ åŒ–データファイルをã™ã¹ã¦æš—å·åŒ–ã§ãã¾ã™ã€‚ã“れã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•° *group_vars/* ã¾ãŸã¯ *host_vars/*ã€*include_vars* ã¾ãŸã¯ *vars_files* ã§èª­ã¿è¾¼ã¾ã‚Œã‚‹å¤‰æ•°ã€*-e @file.yml* ã¾ãŸã¯ *-e @file.json* を使用ã—㦠ansible-playbook ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¸¡ã•れる変数ファイルãŒå«ã¾ã‚Œã¾ã™ã€‚ロールã®å¤‰æ•°ãŠã‚ˆã³ãƒ‡ãƒ•ォルトもå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:39 msgid "Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault. If you'd like to not expose what variables you are using, you can keep an individual task file entirely encrypted." msgstr "Ansible タスクã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€ãŠã‚ˆã³ãã®ä»–ã®ã‚ªãƒ–ジェクトã¯ãƒ‡ãƒ¼ã‚¿ã§ã‚ã‚‹ãŸã‚ã€Vault ã§æš—å·åŒ–ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚使用ã—ã¦ã„る変数を公開ã—ãªã„å ´åˆã¯ã€å€‹åˆ¥ã®ã‚¿ã‚¹ã‚¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å®Œå…¨ã«æš—å·åŒ–ã§ãã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:77 msgid "create" msgstr "create" #: ../../rst/cli/ansible-vault.rst:79 msgid "create and open a file in an editor that will be encrypted with the provided vault secret when closed" msgstr "é–‰ã˜ãŸã¨ãã«æä¾›ã•れる Vault ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã§æš—å·åŒ–ã•れるファイルを作æˆã—ã¦ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã§é–‹ãã¾ã™" #: ../../rst/cli/ansible-vault.rst:91 ../../rst/cli/ansible-vault.rst:159 #: ../../rst/cli/ansible-vault.rst:223 ../../rst/cli/ansible-vault.rst:261 #: ../../rst/cli/ansible-vault.rst:315 msgid "the vault id used to encrypt (required if more than one vault-id is provided)" msgstr "æš—å·åŒ–ã«ä½¿ç”¨ã™ã‚‹ Vault ID (複数㮠vault-id ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«å¿…è¦)" #: ../../rst/cli/ansible-vault.rst:111 msgid "decrypt" msgstr "decrypt" #: ../../rst/cli/ansible-vault.rst:113 msgid "decrypt the supplied file using the provided vault secret" msgstr "æä¾›ã•れ㟠Vault シークレットを使用ã—ã¦æä¾›ã•れãŸãƒ•ァイルを復å·ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:125 ../../rst/cli/ansible-vault.rst:227 #: ../../rst/cli/ansible-vault.rst:265 msgid "output file name for encrypt or decrypt; use - for stdout" msgstr "æš—å·åŒ–用ã¾ãŸã¯å¾©å·ç”¨ã®å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«å。標準出力 (stdout) ã« - を使用ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:145 msgid "edit" msgstr "edit" #: ../../rst/cli/ansible-vault.rst:147 msgid "open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed" msgstr "ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã§æ—¢å­˜ã® Vault ファイルを開ãã€å¾©å·ã—ã¾ã™ã€‚ã“れã¯ã€é–‰ã˜ã‚‹ã¨å†åº¦æš—å·åŒ–ã•れã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:181 msgid "open, decrypt and view an existing vaulted file using a pager using the supplied vault secret" msgstr "æä¾›ã•れ㟠Vault シークレットを使用ã™ã‚‹ãƒšãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’使用ã—ã¦ã€æ—¢å­˜ã® Vault ファイルを開ãã€å¾©å·ã—ã€è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:209 msgid "encrypt" msgstr "encrypt" #: ../../rst/cli/ansible-vault.rst:211 msgid "encrypt the supplied file using the provided vault secret" msgstr "æä¾›ã•れる Vault シークレットを使用ã—ã¦æä¾›ã•れãŸãƒ•ァイルを暗å·åŒ–ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:247 msgid "encrypt_string" msgstr "encrypt_string" #: ../../rst/cli/ansible-vault.rst:249 msgid "encrypt the supplied string using the provided vault secret" msgstr "æä¾›ã•れ㟠Vault シークレットを使用ã—ã¦æä¾›ã•ã‚ŒãŸæ–‡å­—列を暗å·åŒ–ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:269 msgid "Do not hide input when prompted for the string to encrypt" msgstr "æ–‡å­—åˆ—ã®æš—å·åŒ–ã‚’è¦æ±‚ã—ãŸã¨ãã«å…¥åŠ›ã‚’éžè¡¨ç¤ºã«ã—ã¾ã›ã‚“。" #: ../../rst/cli/ansible-vault.rst:273 msgid "Specify the variable name for stdin" msgstr "stdin ã®å¤‰æ•°åを指定ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:285 msgid "Specify the variable name" msgstr "変数åを指定ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:289 msgid "Prompt for the string to encrypt" msgstr "æš—å·åŒ–ã™ã‚‹æ–‡å­—列を入力ã—ã¾ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:301 msgid "rekey" msgstr "rekey" #: ../../rst/cli/ansible-vault.rst:303 msgid "re-encrypt a vaulted file with a new secret, the previous secret is required" msgstr "æ–°è¦ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã¨å…±ã« Vault ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å†æš—å·åŒ–ã—ã¾ã™ã€‚以å‰ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/cli/ansible-vault.rst:319 msgid "the new vault identity to use for rekey" msgstr "rekey ã«ä½¿ç”¨ã™ã‚‹æ–°ã—ã„ vault アイデンティティー" #: ../../rst/cli/ansible-vault.rst:323 msgid "new vault password file for rekey" msgstr "rekey ã®æ–°ã—ã„ Vault パスワードファイル" #~ msgid "a REPL that allows for running ad-hoc tasks against a chosen inventory (based on dominis' ansible-shell)." #~ msgstr "" #~ msgid "module arguments" #~ msgstr "モジュール引数" #~ msgid "list all current configs reading lib/constants.py and shows env and config file setting names" #~ msgstr "lib/constants.py を読ã¿å–ã‚‹ç¾åœ¨ã®è¨­å®šã®ä¸€è¦§ã‚’表示ã—ã€env ãŠã‚ˆã³ config ファイルã®è¨­å®šåを表示ã—ã¾ã™ã€‚" #~ msgid "directory to checkout repository to" #~ msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼" ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4655561 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/collections.po0000644000000000000000000000151700000000000025753 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-01 12:38+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: Babel 2.9.0\n" #: ../../rst/collections/all_plugins.rst:6 msgid "Plugin indexes" msgstr "プラグインインデックス" #: ../../rst/collections/all_plugins.rst:4 msgid "Indexes of all modules and plugins" msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.467556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/community.po0000644000000000000000000077335700000000000025503 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/community/code_of_conduct.rst:5 msgid "Community Code of Conduct" msgstr "コミュニティーã®è¡Œå‹•è¦ç¯„" #: ../../rst/community/code_of_conduct.rst:7 #: ../../rst/community/github_admins.rst:7 #: ../../rst/community/release_managers.rst:7 msgid "Topics" msgstr "トピック" #: ../../rst/community/code_of_conduct.rst:9 msgid "Every community can be strengthened by a diverse variety of viewpoints, insights, opinions, skillsets, and skill levels. However, with diversity comes the potential for disagreement and miscommunication. The purpose of this Code of Conduct is to ensure that disagreements and differences of opinion are conducted respectfully and on their own merits, without personal attacks or other behavior that might create an unsafe or unwelcoming environment." msgstr "ã™ã¹ã¦ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¯ã€å¤šæ§˜ãªè¦–ç‚¹ã€æ´žå¯ŸåŠ›ã€æ„見ã€ã‚¹ã‚­ãƒ«ã‚»ãƒƒãƒˆã€ã‚¹ã‚­ãƒ«ãƒ¬ãƒ™ãƒ«ã®å¤šæ§˜æ€§ã«ã‚ˆã£ã¦å¼·åŒ–ã•れã¾ã™ã€‚ã—ã‹ã—ã€å¤šæ§˜æ€§ã«ã¯ã€æ„見ã®ç›¸é•や誤解ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®è¡Œå‹•è¦ç¯„ã®ç›®çš„ã¯ã€æ„見ã®ä¸ä¸€è‡´ã‚„相é•ãŒã€å€‹äººçš„ãªæ”»æ’ƒã‚„ãã®ä»–ã®ä¸å®‰å®šãªç’°å¢ƒã‚„歓迎ã•れãªã„環境を作り出ã™ã‚ˆã†ãªè¡Œå‹•ã‚’ã›ãšã«ã€æ•¬æ„ã‚’æŒã£ã¦ã€å„自ã®åˆ©ç‚¹ã«åŸºã¥ã„ã¦è¡Œã‚れるよã†ã«ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:16 msgid "These policies are not designed to be a comprehensive set of Things You Cannot Do. We ask that you treat your fellow community members with respect and courtesy, and in general, Don't Be A Jerk. This Code of Conduct is meant to be followed in spirit as much as in letter and is not exhaustive." msgstr "ã“ã‚Œã‚‰ã®æ–¹é‡ã¯ã€ã€Œã‚„ã£ã¦ã¯ã„ã‘ãªã„ã“ã¨ã€ã‚’網羅ã—ãŸã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。コミュニティーメンãƒãƒ¼ã«æ•¬æ„ã¨ç¤¼å„€ã‚’ã‚‚ã£ã¦æŽ¥ã—ã€ä¸å¿«ãªè¡Œå‹•ã¯ã—ãªã„ã“ã¨ã‚’ãŠé¡˜ã„ã—ã¦ã„ã¾ã™ã€‚ã“ã®è¡Œå‹•è¦ç¯„ã¯ã€å¿ƒæ§‹ãˆã‚’ã§ãã‚‹é™ã‚Šç¤ºã™ã“ã¨ã‚’目的ã¨ã—ã¦ãŠã‚Šã€ã™ã¹ã¦ã‚’網羅ã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/community/code_of_conduct.rst:21 msgid "All Ansible events and participants therein are governed by this Code of Conduct and anti-harassment policy. We expect organizers to enforce these guidelines throughout all events, and we expect attendees, speakers, sponsors, and volunteers to help ensure a safe environment for our whole community. Specifically, this Code of Conduct covers participation in all Ansible-related forums and mailing lists, code and documentation contributions, public chat (Matrix, IRC), private correspondence, and public meetings." msgstr "Ansible イベントã¨ãã®å‚加者ã¯ã™ã¹ã¦ã€ã“ã®è¡Œå‹•è¦ç¯„ã¨ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆé˜²æ­¢ãƒãƒªã‚·ãƒ¼ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚主催者ã¯ã€å¸¸ã«ã“ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«æ²¿ã£ã¦ã‚¤ãƒ™ãƒ³ãƒˆã‚’開催ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚ã¾ãŸã€å‚加者ã€è¬›æ¼”者ã€ã‚¹ãƒãƒ³ã‚µãƒ¼ã€ãŠã‚ˆã³ãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã®çš†æ§˜ã«ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼å…¨ä½“ã®å®‰å…¨ãªç’°å¢ƒã‚’確ä¿ã™ã‚‹ãŸã‚ã«ã”å”力ã„ãŸã ãã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚具体的ã«ã¯ã€ã“ã®è¡Œå‹•è¦ç¯„ã¯ã€Ansible 関連ã®ãƒ•ォーラムやメーリングリストã¸ã®å‚加ã€ã‚³ãƒ¼ãƒ‰ã‚„ドキュメントã¸ã®è²¢çŒ®ã€å…¬é–‹ãƒãƒ£ãƒƒãƒˆ (Matrixã€IRC) ã¸ã®å‚加ã€ãƒ—ライベートãªã‚„りå–りã€å…¬é–‹ä¼šè­°ã¸ã®å‚加ãŒå¯¾è±¡ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:28 msgid "Ansible community members are..." msgstr "Ansible コミュニティーã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã¯ã€ä»¥ä¸‹ãŒæœŸå¾…ã•れã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:30 msgid "**Considerate**" msgstr "**æ€ã„やりをもã¤**" #: ../../rst/community/code_of_conduct.rst:32 msgid "Contributions of every kind have far-ranging consequences. Just as your work depends on the work of others, decisions you make surrounding your contributions to the Ansible community will affect your fellow community members. You are strongly encouraged to take those consequences into account while making decisions." msgstr "ã‚らゆる種類ã®è²¢çŒ®ãŒã€åºƒç¯„囲ã«å½±éŸ¿ã—ã¾ã™ã€‚自分ã®ä»•事ãŒä»–ã®äººã®ä»•事ã«ä¾å­˜ã—ã¦ã„ã‚‹ã®ã¨åŒã˜ã‚ˆã†ã«ã€Ansible コミュニティーã¸ã®è²¢çŒ®ã«ã¤ã„ã¦ã‚ãªãŸãŒä¸‹ã—ãŸæ±ºå®šã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒãƒ¼ã«å½±éŸ¿ã—ã¾ã™ã€‚æ„æ€æ±ºå®šã‚’行ã†éš›ã«ã¯ã€ã“ã®ã‚ˆã†ãªçµæžœã‚’考慮ã«å…¥ã‚Œã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:37 msgid "**Patient**" msgstr "**寛大ã«ãªã‚‹**" #: ../../rst/community/code_of_conduct.rst:39 msgid "Asynchronous communication can come with its own frustrations, even in the most responsive of communities. Please remember that our community is largely built on volunteered time, and that questions, contributions, and requests for support may take some time to receive a response. Repeated \"bumps\" or \"reminders\" in rapid succession are not good displays of patience. Additionally, it is considered poor manners to ping a specific person with general questions. Pose your question to the community as a whole, and wait patiently for a response." msgstr "éžåŒæœŸã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€ã©ã‚“ãªã«å応ã®è‰¯ã„コミュニティーã§ã‚ã£ã¦ã‚‚ã€ã‚る程度ã¯ãƒ•ãƒ©ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒæºœã¾ã£ã¦ã—ã¾ã†ã“ã¨ãŒã‚りã¾ã™ã€‚コミュニティーã¯ä¸»ã«ãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã®æ™‚é–“ã§æˆã‚Šç«‹ã£ã¦ã„ã‚‹ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。質å•ã€è²¢çŒ®ã€ã‚µãƒãƒ¼ãƒˆã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã¯è¿”事ãŒè¿”ã£ã¦ãã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ä½•åº¦ã‚‚ã€Œã‚¹ãƒ¬ãƒƒãƒ‰ä½œæˆ (bump)ã€ã‚„「リマインダーã€ã‚’繰り返ã™ã®ã¯ã€å¿è€åŠ›ã‚’ç¤ºã™å„ªã‚ŒãŸæ–¹æ³•ã§ã¯ã‚りã¾ã›ã‚“。ã•らã«ã€ä¸€èˆ¬çš„ãªè³ªå•を特定ã®äººã«ã™ã‚‹ã®ã¯ãƒžãƒŠãƒ¼é•åã§ã™ã€‚コミュニティー全体ã«å‘ã‘ã¦è³ªå•ã—ã€è¾›æŠ±å¼·ã返事を待ã¡ã¾ã—ょã†ã€‚" #: ../../rst/community/code_of_conduct.rst:47 msgid "**Respectful**" msgstr "**相手を尊é‡ã™ã‚‹**" #: ../../rst/community/code_of_conduct.rst:49 msgid "Every community inevitably has disagreements, but remember that it is possible to disagree respectfully and courteously. Disagreements are never an excuse for rudeness, hostility, threatening behavior, abuse (verbal or physical), or personal attacks." msgstr "ã©ã®ã‚ˆã†ãªã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã§ã‚‚æ„見ã®ç›¸é•ã¯é¿ã‘られã¾ã›ã‚“ãŒã€ç•°è­°ã‚’å”±ãˆã‚‹ã¨ãã¯æ•¬æ„ã‚’æŒã£ã¦ç¤¼å„€æ­£ã—ã行ã†å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。æ„見ã®ç›¸é•ã¯ã€å¤±ç¤¼ã€æ•µæ„ã€è„…è¿«ã€(言葉ã«ã‚ˆã‚‹ã¾ãŸã¯èº«ä½“çš„ãª) è™å¾…ã€ã¾ãŸã¯å€‹äººçš„ãªæ”»æ’ƒã®è¨€ã„訳ã«ã¯ãªã‚Šã¾ã›ã‚“。" #: ../../rst/community/code_of_conduct.rst:53 msgid "**Kind**" msgstr "**親切ã«ã™ã‚‹**" #: ../../rst/community/code_of_conduct.rst:55 msgid "Everyone should feel welcome in the Ansible community, regardless of their background. Please be courteous, respectful and polite to fellow community members. Do not make or post offensive comments related to skill level, gender, gender identity or expression, sexual orientation, disability, physical appearance, body size, race, or religion. Sexualized images or imagery, real or implied violence, intimidation, oppression, stalking, sustained disruption of activities, publishing the personal information of others without explicit permission to do so, unwanted physical contact, and unwelcome sexual attention are all strictly prohibited. Additionally, you are encouraged not to make assumptions about the background or identity of your fellow community members." msgstr "Ansible コミュニティーã§ã¯ã€å„自ã®çµŒæ­´ã«é–¢ä¿‚ãªãèª°ã‚‚ãŒæ­“迎ã•れã¦ã„ã‚‹ã¨æ„Ÿã˜ã‚‹ã‚ˆã†ã«ãªã‚‰ãªã‘れã°ãªã‚Šã¾ã›ã‚“。コミュニティーメンãƒãƒ¼ã«å¯¾ã—ã¦ã¯ã€ç¤¼å„€æ­£ã—ãã€æ•¬æ„を払ã£ã¦æŽ¥ã—ã¦ãã ã•ã„ã€‚ã‚¹ã‚­ãƒ«ãƒ¬ãƒ™ãƒ«ã€æ€§åˆ¥ã€æ€§è‡ªèªã€æ€§è¡¨ç¾ã€æ€§çš„æŒ‡å‘ã€éšœå®³ã€å®¹å§¿ã€ä½“æ ¼ã€äººç¨®ã€å®—æ•™ã«é–¢ã™ã‚‹æ”»æ’ƒçš„ãªã‚³ãƒ¡ãƒ³ãƒˆã‚’ã—ãŸã‚Šã€æŠ•稿ã—ãŸã‚Šã—ãªã„ã§ãã ã•ã„。性的画åƒã€æ˜Žç¤ºçš„ã¾ãŸã¯æš—ç¤ºçš„ãªæš´åŠ›ã€è„…è¿«ã€æŠ‘åœ§ã€ã‚¹ãƒˆãƒ¼ã‚«ãƒ¼è¡Œç‚ºã€ç¶™ç¶šçš„ãªæ´»å‹•å¦¨å®³ã€æ˜Žç¤ºçš„ãªè¨±å¯ãªã個人情報ã®å…¬é–‹ã€æœ›ã¾ã‚Œãªã„èº«ä½“çš„æŽ¥è§¦ã€æ­“迎ã•れãªã„性的注目ã¯ã€ã™ã¹ã¦å›ºãç¦ã˜ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ã•らã«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒãƒ¼ã®çµŒæ­´ã‚„身元を推測ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/community/code_of_conduct.rst:65 msgid "**Inquisitive**" msgstr "**探求心をæŒã¤**" #: ../../rst/community/code_of_conduct.rst:67 msgid "The only stupid question is the one that does not get asked. We encourage our users to ask early and ask often. Rather than asking whether you can ask a question (the answer is always yes!), instead, simply ask your question. You are encouraged to provide as many specifics as possible. Code snippets in the form of Gists or other paste site links are almost always needed in order to get the most helpful answers. Refrain from pasting multiple lines of code directly into the chat channels - instead use gist.github.com or another paste site to provide code snippets." msgstr "å–ã‚‹ã«è¶³ã‚‰ãªã„質å•ã¨ã¯ã€è³ªå•ã•れãªã„質å•ã ã‘ã§ã™ã€‚コミュニティーメンãƒãƒ¼ã¯ã€æ—©ã‚ã«ã€ãã—ã¦é »ç¹ã«è³ªå•ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚質å•ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’å°‹ã­ã‚‹ã®ã§ã¯ãªã (ãã®ç­”ãˆã¯å¸¸ã«ã‚¤ã‚¨ã‚¹ã¨ãªã‚‹ãŸã‚)ã€è³ªå•ã—ãŸã„内容を尋ã­ã¦ãã ã•ã„。ã§ãã‚‹ã ã‘å…·ä½“çš„ãªæƒ…報をæä¾›ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚最も有益ãªå›žç­”ã‚’å¾—ã‚‹ã«ã¯ã€Gist ãªã©ã®ã‚µã‚¤ãƒˆã¸æŠœç²‹ã—ãŸã‚³ãƒ¼ãƒ‰ã‚’貼り付ã‘ã€ãã®ãƒªãƒ³ã‚¯ã‚’示ã—ã¦ãã ã•ã„。ã¤ã¾ã‚Šã€ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«ã€è¤‡æ•°è¡Œã®ã‚³ãƒ¼ãƒ‰ã‚’直接貼り付ã‘ãšã€ä»£ã‚り㫠gist.github.com ãªã©ã®ã‚µã‚¤ãƒˆã«è©²å½“ã®ã‚³ãƒ¼ãƒ‰ã‚’貼り付ã‘ã¦ã€ãã®ã‚µã‚¤ãƒˆã¸ã®ãƒªãƒ³ã‚¯ã‚’示ã—ã¦ãã ã•ã„。" #: ../../rst/community/code_of_conduct.rst:75 msgid "**Helpful**" msgstr "**助ã‘ã«ãªã‚‹ã“ã¨**" #: ../../rst/community/code_of_conduct.rst:77 msgid "The Ansible community is committed to being a welcoming environment for all users, regardless of skill level. We were all beginners once upon a time, and our community cannot grow without an environment where new users feel safe and comfortable asking questions. It can become frustrating to answer the same questions repeatedly; however, community members are expected to remain courteous and helpful to all users equally, regardless of skill or knowledge level. Avoid providing responses that prioritize snideness and snark over useful information. At the same time, everyone is expected to read the provided documentation thoroughly. We are happy to answer questions, provide strategic guidance, and suggest effective workflows, but we are not here to do your job for you." msgstr "Ansible コミュニティーã¯ã€ã‚¹ã‚­ãƒ«ãƒ¬ãƒ™ãƒ«ã«é–¢ä¿‚ãªãã€èª°ã«ã¨ã£ã¦ã‚‚歓迎ã•れã¦ã„ã‚‹ã¨æ„Ÿã˜ã‚‹ç’°å¢ƒã§ã‚ã‚‹ã“ã¨ã‚’ãŠç´„æŸã—ã¾ã™ã€‚ã™ã¹ã¦ã®äººã¯çš†ã€æœ€åˆã¯åˆå¿ƒè€…ã§ã—ãŸã€‚æ–°ã—ã„ユーザーãŒå®‰å¿ƒã—ã¦è³ªå•ã§ãる環境ã§ãªã‘れã°ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¯æˆé•·ã—ã¾ã›ã‚“。åŒã˜è³ªå•ã«ä½•度も答ãˆã‚‹ã“ã¨ã«ã‚‚ã©ã‹ã—ã•を感ã˜ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ãŒã€ã‚¹ã‚­ãƒ«ã‚„知識ã®ãƒ¬ãƒ™ãƒ«ã«é–¢ä¿‚ãªãã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã—ã¦å¹³ç­‰ã«ç¤¼å„€æ­£ã—ãã€è¦ªåˆ‡ã«å¯¾å¿œã™ã‚‹ã“ã¨ãŒæ±‚ã‚られã¾ã™ã€‚æœ‰ç›Šãªæƒ…報よりもã€ä¸­å‚·ã‚„悪å£ã‚’優先ã™ã‚‹ã‚ˆã†ãªå›žç­”ã¯é¿ã‘ã¦ãã ã•ã„ã€‚åŒæ™‚ã«ã€å…¨ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ãŒã€æä¾›ã•ã‚ŒãŸæ–‡æ›¸ã‚’å分ã«èª­ã‚€ã“ã¨ãŒæœŸå¾…ã•れã¦ã„ã¾ã™ã€‚コミュニティーメンãƒãƒ¼ã¯ã€è³ªå•ã«ç­”ãˆãŸã‚Šã€æˆ¦ç•¥çš„ãªã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã‚’æä¾›ã—ãŸã‚Šã€åŠ¹æžœçš„ãªãƒ¯ãƒ¼ã‚¯ãƒ•ãƒ­ãƒ¼ã‚’ææ¡ˆã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯å–œã‚“ã§è¡Œã„ã¾ã™ãŒã€è³ªå•者ã®ä»£ã‚りã«ä½œæ¥­ã‚’ã™ã‚‹ãŸã‚ã«å­˜åœ¨ã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/community/code_of_conduct.rst:88 msgid "Anti-harassment policy" msgstr "ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆé˜²æ­¢ãƒãƒªã‚·ãƒ¼" #: ../../rst/community/code_of_conduct.rst:90 msgid "Harassment includes (but is not limited to) all of the following behaviors:" msgstr "ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆã«ã¯ã€æ¬¡ã®ã™ã¹ã¦ã®è¡Œç‚ºãŒå«ã¾ã‚Œã¾ã™ (ãŸã ã—ã€ã“れらã«é™å®šã•れã¾ã›ã‚“)。" #: ../../rst/community/code_of_conduct.rst:92 msgid "Offensive comments related to gender (including gender expression and identity), age, sexual orientation, disability, physical appearance, body size, race, and religion" msgstr "性別 (性表ç¾ã‚„性自èªã‚’å«ã‚€)ã€å¹´é½¢ã€æ€§çš„æŒ‡å‘ã€éšœå®³ã€å®¹å§¿ã€ä½“æ ¼ã€äººç¨®ã€ãŠã‚ˆã³å®—æ•™ã«é–¢ã™ã‚‹ä¾®è¾±çš„ãªã‚³ãƒ¡ãƒ³ãƒˆ" #: ../../rst/community/code_of_conduct.rst:93 msgid "Derogatory terminology including words commonly known to be slurs" msgstr "一般的ã«ä¸­å‚·ã¨ã—ã¦çŸ¥ã‚‰ã‚Œã¦ã„ã‚‹å˜èªžã‚’å«ã‚€è»½è”‘çš„ãªç”¨èªž" #: ../../rst/community/code_of_conduct.rst:94 msgid "Posting sexualized images or imagery in public spaces" msgstr "性的ãªç”»åƒã¾ãŸã¯æ¯”å–©ã‚’å…¬å…±ã‚¹ãƒšãƒ¼ã‚¹ã«æŠ•ç¨¿ã™ã‚‹ã“ã¨" #: ../../rst/community/code_of_conduct.rst:95 msgid "Deliberate intimidation" msgstr "æ„図的ãªè„…è¿«" #: ../../rst/community/code_of_conduct.rst:96 msgid "Stalking" msgstr "ストーキング" #: ../../rst/community/code_of_conduct.rst:97 msgid "Posting others' personal information without explicit permission" msgstr "明示的ãªè¨±å¯ãªã他人ã®å€‹äººæƒ…報を掲載ã™ã‚‹è¡Œç‚º" #: ../../rst/community/code_of_conduct.rst:98 msgid "Sustained disruption of talks or other events" msgstr "会話やãã®ä»–ã®ã‚¤ãƒ™ãƒ³ãƒˆã®ç¶™ç¶šçš„ãªå¦¨å®³" #: ../../rst/community/code_of_conduct.rst:99 msgid "Inappropriate physical contact" msgstr "ä¸é©åˆ‡ãªèº«ä½“的接触" #: ../../rst/community/code_of_conduct.rst:100 msgid "Unwelcome sexual attention" msgstr "歓迎ã•れãªã„性的注目" #: ../../rst/community/code_of_conduct.rst:102 msgid "Participants asked to stop any harassing behavior are expected to comply immediately. Sponsors are also subject to the anti-harassment policy. In particular, sponsors should not use sexualized images, activities, or other material. Meetup organizing staff and other volunteer organizers should not use sexualized attire or otherwise create a sexualized environment at community events." msgstr "ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆè¡Œç‚ºã‚’æ­¢ã‚るよã†ã«æ±‚ã‚られãŸå‚加者ã¯ã€ç›´ã¡ã«ã“れã«å¿œã˜ã‚‹ã“ã¨ãŒæ±‚ã‚られã¾ã™ã€‚スãƒãƒ³ã‚µãƒ¼ã‚‚ã€ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆé˜²æ­¢ãƒãƒªã‚·ãƒ¼ã®å¯¾è±¡ã¨ãªã‚Šã¾ã™ã€‚特ã«ã€ã‚¹ãƒãƒ³ã‚µãƒ¼ã¯æ€§çš„ãªç”»åƒã€æ´»å‹•ã€ãã®ä»–ã®ç´ æã‚’使用ã—ã¦ã¯ãªã‚Šã¾ã›ã‚“。ã¾ãŸã€Meetup ã®ä¸»å‚¬è€…やボランティアスタッフã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã§æ€§çš„ãªæ°å¥½ã‚’ã—ãŸã‚Šã€æ€§çš„ãªç’°å¢ƒã‚’作らãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:108 msgid "In addition to the behaviors outlined above, continuing to behave a certain way after you have been asked to stop also constitutes harassment, even if that behavior is not specifically outlined in this policy. It is considerate and respectful to stop doing something after you have been asked to stop, and all community members are expected to comply with such requests immediately." msgstr "上記ã®è¡Œå‹•ã«åŠ ãˆã¦ã€ã“ã“ã§æ˜Žè¨˜ã•れã¦ã„ãªãã¦ã‚‚ã€ã‚„ã‚るよã†ã«è¨€ã‚れãŸå¾Œã«ãã®ã‚ˆã†ãªè¡Œå‹•ã‚’ç¶šã‘ã‚‹ã“ã¨ã‚‚ã€ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆã«è©²å½“ã—ã¾ã™ã€‚ã‚„ã‚るよã†ã«è¨€ã‚れãŸå¾Œã«ä½•ã‹ã‚’ã‚„ã‚ã‚‹ã“ã¨ã¯ã€æ€ã„ã‚„ã‚Šã¨æ•¬æ„を表ã™è¡Œå‹•ã§ã‚りã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®å…¨ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ãã®ã‚ˆã†ãªè¦æ±‚ã«ç›´ã¡ã«å¾“ã†ã“ã¨ãŒæ±‚ã‚られã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:115 msgid "Policy violations" msgstr "ãƒãƒªã‚·ãƒ¼é•å" #: ../../rst/community/code_of_conduct.rst:117 msgid "Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting `codeofconduct@ansible.com `_, to anyone with administrative power in community chat (Admins or Moderators on Matrix, ops on IRC), or to the local organizers of an event. Meetup organizers are encouraged to prominently display points of contact for reporting unacceptable behavior at local events." msgstr "è™å¾…ã€å«ŒãŒã‚‰ã›ã€ãã®ä»–ã®å®¹èªã§ããªã„行為ãŒã‚ã£ãŸå ´åˆã¯ã€`codeofconduct@ansible.com `_ ã‚„ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ãƒãƒ£ãƒƒãƒˆã§ç®¡ç†æ¨©é™ã‚’æŒã¤è€…(Matrixã®Adminsã‚„Moderatorsã€IRCã®ops)ã€å„地ã®ã‚¤ãƒ™ãƒ³ãƒˆä¸»å‚¬è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。Meetup ã®ä¸»å‚¬è€…ã¯ã€å„地ã®ã‚¤ãƒ™ãƒ³ãƒˆã§å®¹èªã•れãªã„行動を報告ã™ã‚‹é€£çµ¡å…ˆã‚’目立ã¤ã¨ã“ã‚ã«è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:122 msgid "If a participant engages in harassing behavior, the meetup organizers may take any action they deem appropriate. These actions may include but are not limited to warning the offender, expelling the offender from the event, and barring the offender from future community events." msgstr "Meetup 主催者ã¯ã€å‚加者ãŒå«ŒãŒã‚‰ã›è¡Œç‚ºã‚’行ã£ãŸå ´åˆã€é©åˆ‡ã¨æ€ã‚れる措置をå–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚ˆã†ãªæŽªç½®ã«ã¯ã€åŠ å®³è€…ã¸ã®è­¦å‘Šã€ã‚¤ãƒ™ãƒ³ãƒˆã‹ã‚‰ã®é€€å‡ºã‚’求ã‚ã‚‹ã“ã¨ã€ä»Šå¾Œã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã¸ã®å‚åŠ ç¦æ­¢ãªã©ãŒå«ã¾ã‚Œã¾ã™ãŒã€ã“れらã«é™å®šã•れã¾ã›ã‚“。" #: ../../rst/community/code_of_conduct.rst:127 msgid "Organizers will be happy to help participants contact security or local law enforcement, provide escorts to an alternate location, or otherwise assist those experiencing harassment to feel safe for the duration of the meetup. We value the safety and well-being of our community members and want everyone to feel welcome at our events, both online and offline." msgstr "主催者ã¯ã€ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆã‚’経験ã—ãŸäººãŒ Meetup ã®é–“安心ã—ã¦éŽã”ã›ã‚‹ã‚ˆã†ã«ã€å‚加者ãŒè­¦å‚™å“¡ã‚„地元ã®è­¦å¯Ÿã«é€£çµ¡ã—ãŸã‚Šã€åˆ¥ã®å ´æ‰€ã«æ¡ˆå†…ã—ãŸã‚Šãªã©æ”¯æ´ã—ã¾ã™ã€‚コミュニティーã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒãƒ¼ã®å®‰å…¨ã¨å¹¸ç¦ã‚’大切ã«ã—ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã¨ã‚ªãƒ•ラインã®ä¸¡æ–¹ã§é–‹å‚¬ã•れるイベントã§ã™ã¹ã¦ã®äººãŒæ­“迎ã•れã¦ã„ã‚‹ã¨æ„Ÿã˜ã¦ã»ã—ã„ã¨é¡˜ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:133 msgid "We expect all participants, organizers, speakers, and attendees to follow these policies at all of our event venues and event-related social events." msgstr "ã™ã¹ã¦ã®å‚加者ã€ä¸»å‚¬è€…ã€è¬›æ¼”者ã€å‚加者ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ã‚¤ãƒ™ãƒ³ãƒˆä¼šå ´ãŠã‚ˆã³ã‚¤ãƒ™ãƒ³ãƒˆé–¢é€£ã®ã‚½ãƒ¼ã‚·ãƒ£ãƒ«ã‚¤ãƒ™ãƒ³ãƒˆã«ãŠã„ã¦ã€ã“れらã®ãƒãƒªã‚·ãƒ¼ã«å¾“ã†ã“ã¨ã‚’期待ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:136 msgid "The Ansible Community Code of Conduct is licensed under the Creative Commons Attribution-Share Alike 3.0 license. Our Code of Conduct was adapted from Codes of Conduct of other open source projects, including:" msgstr "Ansible コミュニティー行動è¦ç¯„ã¯ã€Creative Commons Attribution-Share Alike 3.0 ライセンスã®èªå¯ã‚’å—ã‘ã¦ã„ã¾ã™ã€‚ç§ãŸã¡ã®è¡Œå‹•è¦ç¯„ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªä»–ã®ã‚ªãƒ¼ãƒ—ンソースプロジェクトã®è¡Œå‹•è¦ç¯„ã‚’å‚考ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/code_of_conduct.rst:140 msgid "Contributor Covenant" msgstr "Contributor Covenant" #: ../../rst/community/code_of_conduct.rst:141 msgid "Elastic" msgstr "Elastic" #: ../../rst/community/code_of_conduct.rst:142 msgid "The Fedora Project" msgstr "The Fedora Project" #: ../../rst/community/code_of_conduct.rst:143 msgid "OpenStack" msgstr "OpenStack" #: ../../rst/community/code_of_conduct.rst:144 msgid "Puppet Labs" msgstr "Puppet Labs" #: ../../rst/community/code_of_conduct.rst:145 msgid "Ubuntu" msgstr "Ubuntu" #: ../../rst/community/committer_guidelines.rst:5 msgid "Committers Guidelines" msgstr "コミット担当者ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/community/committer_guidelines.rst:7 msgid "These are the guidelines for people with commit privileges on the repositories in the ansible and ansible-collections GitHub organizations." msgstr "ã“れã¯ã€ansible ãŠã‚ˆã³ ansible-collections GitHub 組織ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’対象ã¨ã™ã‚‹ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:9 msgid "Committers of `Ansible-core `_ are necessarily Red Hat employees acting as members of the Ansible Core team. Committers of `Ansible collections `_ are members of the community or Ansible Engineering. Please read the guidelines before you commit." msgstr "`Ansible-core `_ ã®ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’æŒã¤ã®ã¯ã€Ansible Core ãƒãƒ¼ãƒ ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹ Red Hat 従業員ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`Ansible コレクション `_ ã®ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¾ãŸã¯ Ansible Engineering ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚コミットã™ã‚‹å‰ã«ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:11 msgid "These guidelines apply to everyone. At the same time, this is NOT a process document. So just use good judgment. You have been given commit access because we trust your judgment." msgstr "ã“れらã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¯ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é©ç”¨ã•れã¾ã™ã€‚åŒæ™‚ã«ã€ã“れã¯ãƒ—ロセスã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã‚りã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€é©åˆ‡ãªåˆ¤æ–­ãŒæ±‚ã‚られã¾ã™ã€‚コミットアクセス権ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã‚‹ã®ã¯ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åˆ¤æ–­ã‚’ä¿¡é ¼ã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:13 msgid "That said, use the trust wisely." msgstr "ãã®ãŸã‚ã€ãã®ä¿¡é ¼ã«ã¤ã„ã¦ã¯æ…Žé‡ã«è¡Œå‹•ã—ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:15 msgid "If you abuse the trust and break components and builds, and so on, the trust level falls and you may be asked not to commit or you may lose your commit privileges." msgstr "信頼を悪用ã—ã¦ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚„ビルドを壊ã™ãªã©ã™ã‚‹ã¨ã€ä¿¡é ¼ãƒ¬ãƒ™ãƒ«ãŒä¸‹ãŒã£ãŸå ´åˆã¯ã€ã‚³ãƒŸãƒƒãƒˆã—ãªã„よã†ã«æ±‚ã‚られるã‹ã€ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’失ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:18 msgid "Features, high-level design, and roadmap of ansible-core" msgstr "ansible-core ã®æ©Ÿèƒ½ã€é«˜ãƒ¬ãƒ™ãƒ«ã®è¨­è¨ˆã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—" #: ../../rst/community/committer_guidelines.rst:20 msgid "As a core team member, you are an integral part of the team that develops the :ref:`roadmap `. Please be engaged, and push for the features and fixes that you want to see. Also keep in mind that Red Hat, as a company, will commit to certain features, fixes, APIs, and so on, for various releases. Red Hat, the company, and the Ansible team must get these changes completed and released as scheduled. Obligations to users, the community, and customers must come first. Because of these commitments, a feature you want to develop yourself may not get into a release if it affects a lot of other parts within Ansible." msgstr "コミット担当者ã¯ã€ã‚³ã‚¢ãƒãƒ¼ãƒ ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦ã€:ref:`ロードマップ ` を作æˆã™ã‚‹ãƒãƒ¼ãƒ ã«ä¸å¯æ¬ ã§ã™ã€‚ç©æ¥µçš„ã«é–¢ä¸Žã—ã€å¸Œæœ›ã™ã‚‹æ©Ÿèƒ½ã‚„修正をプッシュã—ã¦ãã ã•ã„。ã¾ãŸã€Red Hat ã¯ä¼æ¥­ã¨ã—ã¦ã€æ§˜ã€…ãªãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã—ã¦ã€ç‰¹å®šã®æ©Ÿèƒ½ã€ä¿®æ­£ã€API ãªã©ã«ã‚³ãƒŸãƒƒãƒˆã™ã‚‹ã“ã¨ã‚’念頭ã«ç½®ã„ã¦ãã ã•ã„ã€‚ä¼æ¥­ã§ã‚ã‚‹ Red Hatã€ãŠã‚ˆã³ Ansible ãƒãƒ¼ãƒ ã¯ã€ã“ã®ã‚ˆã†ãªã‚³ãƒŸãƒƒãƒˆã•ã‚ŒãŸæ©Ÿèƒ½ (ãªã©) を完æˆã•ã›ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«é€šã‚Šã«ãƒªãƒªãƒ¼ã‚¹ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ユーザーã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã€é¡§å®¢ã¸ã®ç¾©å‹™ãŒæœ€å„ªå…ˆã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã“れらã®ç¾©å‹™ãŒã‚ã‚‹ãŸã‚ã€è‡ªåˆ†ã§é–‹ç™ºã—ãŸã„機能㌠Ansible 内ã®ä»–ã®å¤šãã®éƒ¨åˆ†ã«å½±éŸ¿ã‚’与ãˆã‚‹å ´åˆã¯ã€ãã®æ©Ÿèƒ½ãŒãƒªãƒªãƒ¼ã‚¹ã«å«ã¾ã‚Œãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:22 msgid "Any other new features and changes to high level design should go through the proposal process (TBD), to ensure the community and core team have had a chance to review the idea and approve it. The core team has sole responsibility for merging new features based on proposals to `Ansible-core `_." msgstr "ãã®ä»–ã®æ–°æ©Ÿèƒ½ã‚„高レベル設計ã®å¤‰æ›´ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŠã‚ˆã³ Core ãƒãƒ¼ãƒ ãŒã‚¢ã‚¤ãƒ‡ã‚¢ã‚’確èªã—ã¦æ‰¿èªã™ã‚‹æ©Ÿä¼šã‚’確実ã«ã‚‚ã¦ã‚‹ã‚ˆã†ã«ã€ææ¡ˆãƒ—ロセス (TBD) を経る必è¦ãŒã‚りã¾ã™ã€‚`Ansible-core `_ ã¸ã®ææ¡ˆã«åŸºã¥ã„ã¦æ–°ã—ã„æ©Ÿèƒ½ã‚’マージã™ã‚‹è²¬ä»»ã¯ Core ãƒãƒ¼ãƒ ã«ã‚りã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:26 msgid "Features, high-level design, and roadmap of Ansible collections" msgstr "Ansible コレクションã®ç‰¹é•·ã€é«˜ãƒ¬ãƒ™ãƒ«ã®è¨­è¨ˆã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—" #: ../../rst/community/committer_guidelines.rst:28 msgid "Collections maintainers define features, high-level design, and roadmap of the collections themselves and are responsible for merging new features to `Ansible collections `_ based on proposals discussed with their communities." msgstr "コレクションメンテナーã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³è‡ªä½“ã®æ©Ÿèƒ½ã€é«˜ãƒ¬ãƒ™ãƒ«ã®è¨­è¨ˆã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—を定義ã—ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã§èª¬æ˜Žã—ãŸææ¡ˆã«åŸºã¥ã„ã¦ã€`Ansible コレクション `_ ã«æ–°æ©Ÿèƒ½ã‚’マージã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:31 msgid "Our workflow on GitHub" msgstr "GitHub ã§ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ロー" #: ../../rst/community/committer_guidelines.rst:33 msgid "As a committer, you may already know this, but our workflow forms a lot of our team policies. Please ensure you are aware of the following workflow steps:" msgstr "コミット担当者ã¨ã—ã¦ã€ä»¥ä¸‹ã‚’ã™ã§ã«ç†è§£ã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ã“ã“ã§ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローã¯å¤šãã®ãƒãƒ¼ãƒ ãƒãƒªã‚·ãƒ¼ã‚’å½¢æˆã—ã¦ã„ã¾ã™ã€‚以下ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒ­ãƒ¼ã®æ‰‹é †ã‚’ç†è§£ã—ã¦ãŠã„ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:35 msgid "Fork the repository upon which you want to do some work to your own personal repository" msgstr "作業ã—ãŸã„リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’自身ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ãƒ•ォークã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:36 msgid "Work on the specific branch upon which you need to commit" msgstr "コミットã™ã‚‹å¿…è¦ãŒã‚る特定ã®ãƒ–ランãƒã§ã®ä½œæ¥­" #: ../../rst/community/committer_guidelines.rst:37 msgid "Create a pull request back to the upstream repository and tag the people you would like to review; assign someone as the primary \"owner\" of your pull request" msgstr "アップストリームリãƒã‚¸ãƒˆãƒªãƒ¼ã¸ã®ãƒ—ãƒ«è¦æ±‚を作æˆã—ã€ãƒ¬ãƒ“ューã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’タグ付ã‘ã¾ã™ã€‚1 人ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ãƒ—ãƒ«è¦æ±‚ã®ä¸»è¦ãªã€Œæ‰€æœ‰è€…ã€ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã¾ã™" #: ../../rst/community/committer_guidelines.rst:38 msgid "Adjust code as necessary based on the comments provided" msgstr "æä¾›ã•れãŸã‚³ãƒ¡ãƒ³ãƒˆã«åŸºã¥ã„ã¦ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ¼ãƒ‰ã‚’調整ã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:39 msgid "Ask someone from the repository committers to do a final review and merge" msgstr "最終ã®ãƒ¬ãƒ“ューã¨ãƒžãƒ¼ã‚¸ã‚’行ã†ã‚ˆã†ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚³ãƒŸãƒƒãƒˆæ‹…当者ã®ã„ãšã‚Œã‹ã«ä¾é ¼ã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:42 msgid "Addendum to workflow for committers:" msgstr "コミット担当者ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローã¸ã®è£œè¶³" #: ../../rst/community/committer_guidelines.rst:44 msgid "The Core Team is aware that this can be a difficult process at times. Sometimes, the team breaks the rules by making direct commits or merging their own pull requests. This section is a set of guidelines. If you are changing a comma in documentation, or making a very minor change, you can use your best judgement. This is another trust thing. The process is critical for any major change, but for little things or getting something done quickly, use your best judgement and make sure people on the team are aware of your work." msgstr "Core ãƒãƒ¼ãƒ ã¯ã€ã“ã‚ŒãŒæ™‚ã«å›°é›£ãªãƒ—ロセスã§ã‚ã‚‹ã“ã¨ã‚’èªè­˜ã—ã¦ã„ã¾ã™ã€‚時ã«ã¯ã€ãƒãƒ¼ãƒ ãŒç›´æŽ¥ã‚³ãƒŸãƒƒãƒˆã—ãŸã‚Šã€è‡ªèº«ã®ãƒ—ãƒ«è¦æ±‚をマージã—ãŸã‚Šã—ã¦ãƒ«ãƒ¼ãƒ«ã‚’ç ´ã£ã¦ã—ã¾ã†ã“ã¨ã‚‚ã‚りã¾ã™ã€‚ã“ã“ã§ã¯ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’示ã—ã¾ã™ã€‚ドキュメントã§ã‚³ãƒ³ãƒžã‚’変更ã™ã‚‹å ´åˆã‚„ã€ã”ã些細ãªå¤‰æ›´ã§ã‚れã°ã€å„自ã®è£é‡ã§è¡Œã£ã¦ãã ã•ã„。ã“れも信頼関係ã®å•題ã§ã™ã€‚大ããªå¤‰æ›´ã«ã¯ãƒ—ロセスãŒé‡è¦ã§ã™ãŒã€ã¡ã‚‡ã£ã¨ã—ãŸã“ã¨ã‚„迅速ã«ä½•ã‹ã‚’行ã†å ´åˆã¯ã€æœ€å–„ã®åˆ¤æ–­ã‚’下ã—ã€ãƒãƒ¼ãƒ ã®äººã€…ã«è‡ªåˆ†ã®ä»•事をèªè­˜ã—ã¦ã‚‚らã†ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚" #: ../../rst/community/committer_guidelines.rst:47 msgid "Roles on Core" msgstr "Core ã«ãŠã‘るロール" #: ../../rst/community/committer_guidelines.rst:48 msgid "Core committers: Fine to do pull requests for most things, but we should have a timebox. Hanging pull requests may merge on the judgement of these developers." msgstr "Core ã®ã‚³ãƒŸãƒƒãƒˆæ‹…当者: ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ãƒ—ãƒ«è¦æ±‚を実行ã—ã¦ã‚‚å•題ã‚りã¾ã›ã‚“ãŒã€ã‚¿ã‚¤ãƒ ãƒœãƒƒã‚¯ã‚¹ãŒå¿…è¦ã§ã™ã€‚解決ã•れã¦ã„ãªã„ãƒ—ãƒ«è¦æ±‚ãŒå­˜åœ¨ã™ã‚‹ã¨ã€é–‹ç™ºè€…ã®åˆ¤æ–­ã§ãƒžãƒ¼ã‚¸ã•れã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:49 msgid ":ref:`Module maintainers `: Module maintainers own specific modules and have indirect commit access through the current module pull request mechanisms." msgstr ":ref:`Module maintainers `: モジュールメンテナーã¯ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’所有ã—ã¦ãŠã‚Šã€ç¾åœ¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ—ãƒ«è¦æ±‚メカニズムを通ã˜ã¦é–“接的ã«ã‚³ãƒŸãƒƒãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:50 msgid ":ref:`Collection maintainers `: Collection maintainers own specific collections and have commit access to them. Each collection can set its own rules for contributions." msgstr ":ref:`Collection maintainers `: コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ç‰¹å®šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ã‚³ãƒŸãƒƒãƒˆã‚¢ã‚¯ã‚»ã‚¹ã‚’所有ã—ã¾ã™ã€‚å„コレクションã¯ã€è²¢çŒ®ã«é–¢ã™ã‚‹ç‹¬è‡ªã®ãƒ«ãƒ¼ãƒ«ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:53 msgid "General rules" msgstr "一般的ãªãƒ«ãƒ¼ãƒ«" #: ../../rst/community/committer_guidelines.rst:54 msgid "Individuals with direct commit access are entrusted with powers that allow them to do a broad variety of things--probably more than we can write down. Rather than rules, treat these as general *guidelines*, individuals with this power are expected to use their best judgement." msgstr "直接コミットアクセスをæŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã€ã•ã¾ã–ã¾ãªã“ã¨ã‚’実行ã§ãる権é™ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ãŠãらãã€ã“ã“ã«è¨˜è¼‰ã—ã¦ã„る以上ã®ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ã“ã“ã«ç¤ºã™ã“ã¨ã¯ã€ãƒ«ãƒ¼ãƒ«ã¨ã„ã†ã‚ˆã‚Šã¯ã€ä¸€èˆ¬çš„㪠*ガイドライン* ã¨ã—ã¦æ‰±ã„ã€ã“ã®æ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æœ€å–„ã®åˆ¤æ–­ã‚’下ã™ã“ã¨ãŒæœŸå¾…ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:56 msgid "Do NOT" msgstr "ã—ã¦ã¯ã„ã‘ãªã„ã“ã¨" #: ../../rst/community/committer_guidelines.rst:58 msgid "Commit directly." msgstr "直接コミットã™ã‚‹ã€‚" #: ../../rst/community/committer_guidelines.rst:59 msgid "Merge your own pull requests. Someone else should have a chance to review and approve the pull request merge. If you are a Core Committer, you have a small amount of leeway here for very minor changes." msgstr "自身ã®ãƒ—ãƒ«è¦æ±‚をマージã™ã‚‹ã€‚ä»–ã®èª°ã‹ãŒãƒ—ãƒ«è¦æ±‚ã®ãƒžãƒ¼ã‚¸ã‚’確èªã—ã¦æ‰¿èªã™ã‚‹æ©Ÿä¼šã‚’æŒã¤ã¹ãã§ã™ã€‚Core ã®ã‚³ãƒŸãƒƒãƒˆæ‹…当者ã§ã‚れã°ã€ã”ãã‚ãšã‹ãªå¤‰æ›´ã§ã‚れã°ã€å„自ã®è£é‡ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:60 msgid "Forget about alternate environments. Consider the alternatives--yes, people have bad environments, but they are the ones who need us the most." msgstr "代替環境ã®ã“ã¨ã‚’考ãˆãªã„。代替案を検討ã—ã¦ãã ã•ã„。ユーザーã®ä¸­ã«ã¯ç’°å¢ƒãŒè‰¯ããªã„人もã„ã¾ã™ãŒã€ç§ãŸã¡ã‚’最も必è¦ã¨ã—ã¦ã„ã‚‹ã®ã¯ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:61 msgid "Drag your community team members down. Discuss the technical merits of any pull requests you review. Avoid negativity and personal comments. For more guidance on being a good community member, read our :ref:`code_of_conduct`." msgstr "コミュニティーãƒãƒ¼ãƒ ãƒ¡ãƒ³ãƒãƒ¼ã®è¶³ã‚’引ã£å¼µã‚‹ã€‚レビューã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã®æŠ€è¡“çš„ãªãƒ¡ãƒªãƒƒãƒˆã«ã¤ã„ã¦è©±ã—åˆã„ã¾ã™ã€‚å¦å®šã—ãŸã‚Šã€å€‹äººçš„ãªã‚³ãƒ¡ãƒ³ãƒˆã‚’ã™ã‚‹ã“ã¨ã¯é¿ã‘ã¦ãã ã•ã„。優れãŸã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒãƒ¼ã«ãªã‚‹ãŸã‚ã®è©³ç´°ãªã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`code_of_conduct`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:62 msgid "Forget about the maintenance burden. High-maintenance features may not be worth adding." msgstr "メンテナンスã®è² æ‹…を考ãˆãªã„。メンテナンスã®è² æ‹…ãŒå¤§ãã™ãŽã‚‹å ´åˆã¯ã€ãã®æ©Ÿèƒ½ã‚’追加ã™ã‚‹ä¾¡å€¤ãŒãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/community/committer_guidelines.rst:63 msgid "Break playbooks. Always keep backwards compatibility in mind." msgstr "Playbook を壊ã™ã€‚常ã«ä¸‹ä½äº’æ›æ€§ã‚’念頭ã«ç½®ã„ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:64 msgid "Forget to keep it simple. Complexity breeds all kinds of problems." msgstr "シンプルã«ã™ã‚‹ã“ã¨ã‚’考ãˆãªã„。複雑ãªã‚‚ã®ã¯ã€ã‚らゆる種類ã®å•題を生ã¿å‡ºã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:66 msgid "Do" msgstr "ã™ã¹ãã“ã¨" #: ../../rst/community/committer_guidelines.rst:68 msgid "Squash, avoid merges whenever possible, use GitHub's squash commits or cherry pick if needed (bisect thanks you)." msgstr "squash を使用ã—ã€ãƒžãƒ¼ã‚¸ã¯ã§ãã‚‹é™ã‚Šä½¿ç”¨ã›ãšã€å¿…è¦ã«å¿œã˜ã¦ GitHub ã® Squash コミットを使用ã™ã‚‹ã‹ã€å…¥å¿µã«é¸ã¶ (cherry-pick)。" #: ../../rst/community/committer_guidelines.rst:69 msgid "Be active. Committers who have no activity on the project (through merges, triage, commits, and so on) will have their permissions suspended." msgstr "活発ã«è¡Œå‹•ã™ã‚‹ã€‚(マージã€ãƒˆãƒªã‚¢ãƒ¼ã‚¸ã€ã‚³ãƒŸãƒƒãƒˆãªã©ã‚’通ã˜ã¦) ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã§æ´»å‹•ã‚’ã—ã¦ã„ãªã„コミット担当者ã¯ã€ãã®ãƒ‘ーミッションãŒåœæ­¢ã—ã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:70 msgid "Consider backwards compatibility (goes back to \"do not break existing playbooks\")." msgstr "下ä½äº’æ›æ€§ã‚’検討ã™ã‚‹ (既存㮠Playbook を壊ã•ãªã„)。" #: ../../rst/community/committer_guidelines.rst:71 msgid "Write :ref:`tests` and be sure that other's pull requests you are reviewing are covered well. Pull requests with tests are looked at with more priority than pull requests without tests that should have them included. While not all changes require tests, be sure to add them for new features, bug fixes, and functionality changes." msgstr ":ref:`tests` を作æˆã—ã€ç¢ºèªã—ã¦ã„ã‚‹ä»–ã®ãƒ—ãƒ«è¦æ±‚ãŒå分ã«å¯¾å¿œã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。テストをå«ã‚€ãƒ—ãƒ«è¦æ±‚ã¯ã€ãƒ†ã‚¹ãƒˆã‚’å«ã¾ãªã„ãƒ—ãƒ«è¦æ±‚よりも優先ã—ã¦æ¤œè¨Žã•れã¾ã™ã€‚ã™ã¹ã¦ã®å¤‰æ›´ã«ãƒ†ã‚¹ãƒˆãŒå¿…è¦ãªã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€æ–°æ©Ÿèƒ½ã€ãƒã‚°ä¿®æ­£ã€ãŠã‚ˆã³æ©Ÿèƒ½å¤‰æ›´ã«ã¯å¿…ãšãƒ†ã‚¹ãƒˆã‚’追加ã—ã¦ãã ã•ã„。" #: ../../rst/community/committer_guidelines.rst:72 msgid "Discuss with other committers, specially when you are unsure of something." msgstr "特ã«ä¸æ˜Žãªç‚¹ãŒã‚ã‚‹å ´åˆã¯ã€ä»–ã®ã‚³ãƒŸãƒƒãƒˆæ‹…当者ã¨è©±ã—åˆã†ã€‚" #: ../../rst/community/committer_guidelines.rst:73 msgid "Document! If your pull request is a new feature or a change to behavior, make sure you have updated all associated documentation or have notified the right people to do so. It also helps to add the version of ``ansible-core`` or ``collection`` against which this documentation is compatible (to avoid confusion between stable and devel docs, for backwards compatibility, and so on)." msgstr "文書化ã™ã‚‹ã€‚ãƒ—ãƒ«è¦æ±‚ãŒæ–°æ©Ÿèƒ½ã‚„動作ã®å¤‰æ›´ã§ã‚れã°ã€é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ›´æ–°ã—ãŸã‹ã€é©åˆ‡ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€šçŸ¥ã—ãŸã‹ã‚’確èªã—ã¦ãã ã•ã„。ã¾ãŸã€æœ¬ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨äº’æ›æ€§ãŒã‚ã‚‹ ``ansible-core`` ã¾ãŸã¯ ``collection`` ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’追加ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ (ãŸã¨ãˆã°ã€å®‰å®šç‰ˆã¨é–‹ç™ºç‰ˆã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ã®æ··åŒã‚’é¿ã‘ã‚‹ãŸã‚ã€å¾Œæ–¹äº’æ›æ€§ã®ãŸã‚ãªã©)。" #: ../../rst/community/committer_guidelines.rst:74 msgid "Consider scope, sometimes a fix can be generalized." msgstr "スコープを検討ã™ã‚‹ã€‚時ã«ã¯ä¿®æ­£ã‚’一般化ã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/community/committer_guidelines.rst:75 msgid "Keep it simple, then things are maintainable, debuggable, and intelligible." msgstr "ä¿å®ˆã‚„デãƒãƒƒã‚°ãŒå¯èƒ½ã§ã€åˆ†ã‹ã‚Šã‚„ã™ã„ã‚‚ã®ã«ãªã‚‹ã‚ˆã†ã«ã€ç°¡æ½”ã•を試ã¿ã‚‹ã€‚" #: ../../rst/community/committer_guidelines.rst:77 msgid "Committers are expected to continue to follow the same community and contribution guidelines followed by the rest of the Ansible community." msgstr "コミット担当者ã¯ã€Ansible コミュニティーã®ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ãŒå¾“ã†åŒã˜ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŠã‚ˆã³è²¢çŒ®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¼•ãç¶šã従ã†ã“ã¨ãŒæ±‚ã‚られã¾ã™ã€‚" #: ../../rst/community/communication.rst:5 msgid "Communicating" msgstr "コミュニケーション" #: ../../rst/community/communication.rst:11 msgid "Code of Conduct" msgstr "行動è¦ç¯„" #: ../../rst/community/communication.rst:13 msgid "All communication and interactions in the Ansible Community are governed by our :ref:`code_of_conduct`. Please read and understand it!" msgstr "Ansibleコミュニティã§ã®ã™ã¹ã¦ã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¨ã‚„りå–りã¯ã€:ref:`code_of_conduct`ã«ã‚ˆã‚Šç®¡ç†ã•れã¾ã™ã€‚読んã§ç†è§£ã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:16 msgid "Asking questions over email" msgstr "メールã§è³ªå•ã™ã‚‹" #: ../../rst/community/communication.rst:18 msgid "If you want to keep up with Ansible news, need help, or have a question, you can use one of the Ansible mailing lists. Each list covers a particular topic. Read the descriptions here to find the best list for your question." msgstr "最新ã®Ansibleã®ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚’把æ¡ã™ã‚‹ã€åŠ©ã‘ãŒå¿…è¦ã€ã¾ãŸã¯è³ªå•ãŒã‚ã‚‹å ´åˆã¯ã€Ansibleメーリングリストã®1ã¤ã‚’使用ã§ãã¾ã™ã€‚å„リストã¯ç‰¹å®šã®ãƒˆãƒ”ックをカãƒãƒ¼ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã®èª¬æ˜Žã‚’読んã§ã€è³ªå•ã«æœ€é©ãªãƒªã‚¹ãƒˆã‚’見ã¤ã‘ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:20 msgid "Your first post to the mailing list will be moderated (to reduce spam), so please allow up to a day or so for your first post to appear." msgstr "メーリングリストã¸ã®æœ€åˆã®æŠ•稿㯠(スパムを減らã™ãŸã‚) 調整ã•れã¾ã™ã€‚ãã®ãŸã‚ã€æœ€åˆã®æŠ•稿ãŒè¡¨ç¤ºã•れるã¾ã§æœ€å¤§ 1 æ—¥ã»ã©ã‹ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/community/communication.rst:22 msgid "`Ansible Announce list `_ is a read-only list that shares information about new releases of Ansible, and also rare infrequent event information, such as announcements about an upcoming AnsibleFest, which is our official conference series. Worth subscribing to!" msgstr "`Ansible Announce list `_ ã¯ã€Ansible ã®æ–°è¦ãƒªãƒªãƒ¼ã‚¹ã«é–¢ã™ã‚‹æƒ…報を共有ã™ã‚‹èª­ã¿å–り専用リストã§ã™ã€‚Ansible ã®å…¬å¼ã‚«ãƒ³ãƒ•ァレンスシリーズã§ã‚ã‚‹ AnsibleFest ã«é–¢ã™ã‚‹ã‚¢ãƒŠã‚¦ãƒ³ã‚¹ãªã©ã€ä¸å®šæœŸã«é–‹å‚¬ã•れるイベント情報を共有ã—ã¦ã„ã‚‹ãŸã‚ã€ãœã²ã‚µãƒ–スクライブã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:23 msgid "`Ansible AWX List `_ is for `Ansible AWX `_" msgstr "`Ansible AWX List `_ ã¯ã€ `Ansible AWX `_ ã§ã™ã€‚" #: ../../rst/community/communication.rst:24 msgid "`Ansible Development List `_ is for questions about developing Ansible modules (mostly in Python), fixing bugs in the Ansible core code, asking about prospective feature design, or discussions about extending Ansible or features in progress." msgstr "`Ansible Development List `_ã¯ã€Ansibleモジュールã®é–‹ç™ºï¼ˆä¸»ã«Python)ã€Ansibleコアコードã®ãƒã‚°ã®ä¿®æ­£ã€å°†æ¥ã®æ©Ÿèƒ½è¨­è¨ˆã«ã¤ã„ã¦ã®è³ªå•ã€ã¾ãŸã¯Ansibleã®æ©Ÿèƒ½æ‹¡å¼µã¾ãŸã¯é€²è¡Œä¸­ã®æ©Ÿèƒ½ã¤ã„ã¦ã®è­°è«–用ã§ã™ã€‚" #: ../../rst/community/communication.rst:25 msgid "`Ansible Lockdown List `_ is for all things related to Ansible Lockdown projects, including DISA STIG automation and CIS Benchmarks." msgstr "`Ansible Lockdown List `_ ã¯ã€DISA STIG オートメーションや CIS ベンãƒãƒžãƒ¼ã‚¯ãªã©ã€Ansible Lockdown プロジェクトã«é–¢é€£ã™ã‚‹ã‚‚ã®ã‚’対象ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/communication.rst:26 msgid "`Ansible Outreach List `_ help with promoting Ansible and `Ansible Meetups `_" msgstr "`Ansible Outreach List `_ ã¯ã€Ansible ãŠã‚ˆã³ `Ansible Meetups `_ ã®ãƒ—ロモーションを支æ´ã—ã¾ã™ã€‚" #: ../../rst/community/communication.rst:27 msgid "`Ansible Project List `_ is for sharing Ansible tips, answering questions about playbooks and roles, and general user discussion." msgstr "`Ansible Project List `_ ã¯ã€Ansible ã®ãƒ’ントを共有ã—ãŸã‚Šã€Playbookやロールã«é–¢ã™ã‚‹è³ªå•ã«ç­”ãˆãŸã‚Šã€ä¸€èˆ¬çš„ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ã‚£ã‚¹ã‚«ãƒƒã‚·ãƒ§ãƒ³ã‚’行ã†ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/community/communication.rst:28 msgid "`Molecule Discussions `_ is designed to aid with the development and testing of Ansible roles with Molecule." msgstr "`Molecule Discussions `_ ã¯ã€Molecule を使用ã—㟠Ansible ロールã®é–‹ç™ºã¨ãƒ†ã‚¹ãƒˆã‚’支æ´ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/community/communication.rst:30 msgid "The Ansible mailing lists are hosted on Google, but you do not need a Google account to subscribe. To subscribe to a group from a non-Google account, send an email to the subscription address requesting the subscription. For example: ``ansible-devel+subscribe@googlegroups.com``." msgstr "Ansibleメーリングリストã¯Googleã§ãƒ›ã‚¹ãƒˆã•れã¦ã„ã¾ã™ãŒã€ã‚µãƒ–スクライブã™ã‚‹ãŸã‚ã«Googleアカウントã¯å¿…è¦ã‚りã¾ã›ã‚“。 Google 以外ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰ã‚°ãƒ«ãƒ¼ãƒ—をサブスクライブã™ã‚‹ã«ã¯ã€ã‚µãƒ–スクリプションをä¾é ¼ã™ã‚‹ãƒ¡ãƒ¼ãƒ«ã‚’サブスクリプションã®ã‚¢ãƒ‰ãƒ¬ã‚¹ (例: ``ansible-devel+subscribe@googlegroups.com``) ã«é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/community/communication.rst:35 msgid "Real-time chat" msgstr "リアルタイムãƒãƒ£ãƒƒãƒˆ" #: ../../rst/community/communication.rst:37 msgid "For real-time interactions, conversations in the Ansible community happen over two chat protocols: Matrix and IRC. We maintain a bridge between Matrix and IRC, so you can choose whichever protocol you prefer. All channels exist in both places. Join a channel any time to ask questions, participate in a Working Group meeting, or just say hello." msgstr "リアルタイムã®å¯¾è©±ã®å ´åˆã€Ansibleコミュニティã§ã®ä¼šè©±ã¯ã€Matrixã¨IRCã®2ã¤ã®ãƒãƒ£ãƒƒãƒˆãƒ—ロトコルを介ã—ã¦è¡Œã‚れã¾ã™ã€‚ Matrixã¨IRCã®é–“ã®ãƒ–リッジを維æŒã—ã¦ã„ã‚‹ãŸã‚ã€ãŠå¥½ã¿ã®ãƒ—ãƒ­ãƒˆã‚³ãƒ«ã‚’é¸æŠžã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒãƒ£ãƒ³ãƒãƒ«ã¯ä¸¡æ–¹ã®å ´æ‰€ã«å­˜åœ¨ã—ã¾ã™ã€‚ã„ã¤ã§ã‚‚ãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã—ã¦ã€è³ªå•ã—ãŸã‚Šã€ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šè­°ã«å‚加ã—ãŸã‚Šã€æŒ¨æ‹¶ã—ãŸã‚Šã§ãã¾ã™ã€‚" #: ../../rst/community/communication.rst:40 msgid "Ansible community on Matrix" msgstr "Matrix上ã®Ansibleコミュニティ" #: ../../rst/community/communication.rst:42 msgid "To join the community using Matrix, you need two things:" msgstr "Matrixを使用ã—ã¦ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«å‚加ã™ã‚‹ã«ã¯ã€æ¬¡ã®2ã¤ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/community/communication.rst:44 msgid "a Matrix account (from `Matrix.org `_ or any other Matrix homeserver)" msgstr "マトリックスアカウント(`Matrix.org `_ã¾ãŸã¯ãã®ä»–ã®Matrixホームサーãƒãƒ¼ã‹ã‚‰ï¼‰" #: ../../rst/community/communication.rst:45 msgid "a `Matrix client `_ (we recommend `Element Webchat `_)" msgstr "`Matrix client `_ (`Element Webchat `_を推奨ã—ã¾ã™)" #: ../../rst/community/communication.rst:47 msgid "The Ansible community maintains its own Matrix homeserver at ``ansible.im``, however public registration is currently unavailable." msgstr "Ansibleコミュニティã¯ã€``ansible.im``ã§ç‹¬è‡ªã®Matrixホームサーãƒãƒ¼ã‚’ç¶­æŒã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ç¾åœ¨ã€å…¬é–‹ç™»éŒ²ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/community/communication.rst:49 msgid "Matrix chat supports:" msgstr "Matrixãƒãƒ£ãƒƒãƒˆã¯ä»¥ä¸‹ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ï¼š" #: ../../rst/community/communication.rst:51 msgid "persistence (when you log on, you see all messages since you last logged off)" msgstr "永続性(ログオンã™ã‚‹ã¨ã€æœ€å¾Œã«ãƒ­ã‚°ã‚ªãƒ•ã—ã¦ã‹ã‚‰ã®ã™ã¹ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ï¼‰" #: ../../rst/community/communication.rst:52 msgid "edits (so you can fix your typos)" msgstr "編集(タイプミスを修正ã§ãã¾ã™ï¼‰" #: ../../rst/community/communication.rst:53 msgid "replies to individual users" msgstr "個々ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®è¿”ä¿¡" #: ../../rst/community/communication.rst:54 msgid "reactions/emojis" msgstr "å応/絵文字" #: ../../rst/community/communication.rst:55 msgid "bridging to IRC" msgstr "IRCã¸ã®ãƒ–リッジ" #: ../../rst/community/communication.rst:56 msgid "no line limits" msgstr "行制é™ãªã—" #: ../../rst/community/communication.rst:57 msgid "images" msgstr "images" #: ../../rst/community/communication.rst:59 msgid "The room links in the list below will take you directly to the relevant rooms. For more information, see the community-hosted `Matrix FAQ `_." msgstr "以下ã®ãƒªã‚¹ãƒˆã®ãƒãƒ£ãƒƒãƒˆãƒ«ãƒ¼ãƒ ã®ãƒªãƒ³ã‚¯ã‹ã‚‰ã€é–¢é€£ã™ã‚‹ãƒãƒ£ãƒƒãƒˆãƒ«ãƒ¼ãƒ ã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒãƒ›ã‚¹ãƒˆã™ã‚‹`Matrix FAQ `_ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:62 msgid "Ansible community on IRC" msgstr "IRCã®Ansibleコミュニティ" #: ../../rst/community/communication.rst:64 msgid "The Ansible community maintains several IRC channels on `irc.libera.chat `_. To join the community using IRC, you need one thing:" msgstr "Ansibleコミュニティã¯ã€`irc.libera.chat `_ã«ã„ãã¤ã‹ã®IRCãƒãƒ£ãƒ³ãƒãƒ«ã‚’ç¶­æŒã—ã¦ã„ã¾ã™ã€‚IRCを使用ã—ã¦ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«å‚加ã™ã‚‹ã«ã¯ã€æ¬¡ã®1ã¤ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/community/communication.rst:66 msgid "an IRC client" msgstr "IRCクライアント" #: ../../rst/community/communication.rst:68 msgid "IRC chat supports:" msgstr "IRCãƒãƒ£ãƒƒãƒˆã¯ä»¥ä¸‹ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ï¼š" #: ../../rst/community/communication.rst:70 msgid "no persistence (you only see messages when you are logged on, unless you add a bouncer)" msgstr "永続性ãªã—(ãƒã‚¦ãƒ³ã‚µãƒ¼ã‚’追加ã—ãªã„é™ã‚Šã€ãƒ­ã‚°ã‚ªãƒ³ã—ãŸã¨ãã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã—ã‹è¡¨ç¤ºã•れã¾ã›ã‚“)" #: ../../rst/community/communication.rst:71 msgid "simple text interface" msgstr "シンプルãªãƒ†ã‚­ã‚¹ãƒˆã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース" #: ../../rst/community/communication.rst:72 msgid "bridging from Matrix" msgstr "Matrixã‹ã‚‰ã®ãƒ–リッジ" #: ../../rst/community/communication.rst:74 msgid "Our IRC channels may require you to register your IRC nickname. If you receive an error when you connect or when posting a message, see `libera.chat's Nickname Registration guide `_ for instructions. To find all ``ansible`` specific channels on the libera.chat network, use the following command in your IRC client::" msgstr "ã“ã® IRC ãƒãƒ£ãƒ³ãƒãƒ«ã§ã¯ã€IRCã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã®ç™»éŒ²ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚接続時ã¾ãŸã¯ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æŠ•稿時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å ´åˆã¯ã€ã€Œ`libera.chat's Nickname Registration guide `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。libera.chatãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®``ansible``固有ã®ãƒãƒ£ãƒãƒ«ã‚’ã™ã¹ã¦ã‚’見ã¤ã‘ã‚‹ã«ã¯ã€IRCã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/community/communication.rst:78 msgid "as described in the `libera.chat docs `_." msgstr "`libera.chat ドキュメント `_ ã«è¨˜è¼‰ã®ã¨ãŠã‚Šã€‚" #: ../../rst/community/communication.rst:81 msgid "General channels" msgstr "一般的ãªãƒãƒ£ãƒ³ãƒãƒ«" #: ../../rst/community/communication.rst:83 msgid "The clickable links will take you directly to the relevant Matrix room in your browser; room/channel information is also given for use in other clients:" msgstr "クリックå¯èƒ½ãªãƒªãƒ³ã‚¯ã‚’クリックã™ã‚‹ã¨ã€ãƒ–ラウザã§é–¢é€£ã™ã‚‹Matrixルームã«ç›´æŽ¥ç§»å‹•ã—ã¾ã™ã€‚ãƒãƒ£ãƒƒãƒˆãƒ«ãƒ¼ãƒ /ãƒãƒ£ãƒ³ãƒãƒ«æƒ…å ±ã¯ã€ä»–ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã‚‚æä¾›ã•れã¾ã™ã€‚" #: ../../rst/community/communication.rst:85 msgid "`General usage and support questions `_ - ``Matrix: #users:ansible.im | IRC: #ansible``" msgstr "`General usage and support questions `_ - ``Matrix: #users:ansible.im | IRC: #ansible``" #: ../../rst/community/communication.rst:86 msgid "`Discussions on developer topics and code related to features or bugs `_ - ``Matrix: #devel:ansible.im | IRC: #ansible-devel``" msgstr "`Discussions on developer topics and code related to features or bugs `_ - ``Matrix: #devel:ansible.im | IRC: #ansible-devel``" #: ../../rst/community/communication.rst:87 msgid "`Discussions on community and collections related topics `_ - ``Matrix: #community:ansible.im | IRC: #ansible-community``" msgstr "`Discussions on community and collections related topics `_ - ``Matrix: #community:ansible.im | IRC: #ansible-community``" #: ../../rst/community/communication.rst:89 msgid "`For public community meetings `_ - ``Matrix: #meeting:ansible.im | IRC: #ansible-meeting``" msgstr "`For public community meetings `_ - ``Matrix: #meeting:ansible.im | IRC: #ansible-meeting``" #: ../../rst/community/communication.rst:89 msgid "We will generally announce these on one or more of the above mailing lists. See the `meeting schedule and agenda page `_" msgstr "通常ã¯ã€ä¸Šè¨˜ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§å‘ŠçŸ¥ã•れã¾ã™ã€‚「`meeting schedule and agenda page `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:94 msgid "Working groups" msgstr "ワーキンググループ" #: ../../rst/community/communication.rst:96 msgid "Many of our community `Working Groups `_ meet in chat. If you want to get involved in a working group, join the Matrix room or IRC channel where it meets or comment on the agenda." msgstr "Ansible コミュニティー㮠`Working Groups `_ ã®å¤šããŒã€ãƒãƒ£ãƒƒãƒˆã§æ´»å‹•ã—ã¦ã„ã¾ã™ã€‚ワーキンググループã«å‚加ã—ãŸã„å ´åˆã¯ã€ãã®ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ãŒæ´»å‹•ã—ã¦ã„ã‚‹Matrixã®ãƒãƒ£ãƒƒãƒˆãƒ«ãƒ¼ãƒ ã¾ãŸã¯IRCãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã—ãŸã‚Šã€è­°é¡Œã«ã‚³ãƒ¡ãƒ³ãƒˆã—ãŸã‚Šã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:98 msgid "`Amazon (AWS) Working Group `_ - Matrix: `#aws:ansible.im `_ | IRC: ``#ansible-aws``" msgstr "`Amazon (AWS) Working Group `_ - Matrix: `#aws:ansible.im `_ | IRC: ``#ansible-aws``" #: ../../rst/community/communication.rst:99 msgid "`Ansible Lockdown Working Group `_ (`Security playbooks/roles `_) - Matrix: `#lockdown:ansible.im `_ | IRC: ``#ansible-lockdown``" msgstr "`Ansible Lockdown Working Group `_ (`Security playbooks/roles `_) - Matrix: `#lockdown:ansible.im `_ | IRC: ``#ansible-lockdown``" #: ../../rst/community/communication.rst:100 msgid "`AWX Working Group `_ - Matrix: `#awx:ansible.im `_ | IRC: ``#ansible-awx``" msgstr "`AWX Working Group `_ - Matrix: `#awx:ansible.im `_ | IRC: ``#ansible-awx``" #: ../../rst/community/communication.rst:101 msgid "`Azure Working Group `_ - Matrix: `#azure:ansible.im `_ | IRC: ``#ansible-azure``" msgstr "`Azure Working Group `_ - Matrix: `#azure:ansible.im `_ | IRC: ``#ansible-azure``" #: ../../rst/community/communication.rst:102 msgid "`Community Working Group `_ (including Meetups) - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community``" msgstr "`Community Working Group `_ (Meetupã‚’å«ã‚€) - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community``" #: ../../rst/community/communication.rst:103 msgid "`Container Working Group `_ - Matrix: `#container:ansible.im `_ | IRC: ``#ansible-container``" msgstr "`Container Working Group `_ - Matrix: `#container:ansible.im `_ | IRC: ``#ansible-container``" #: ../../rst/community/communication.rst:104 msgid "`Contributor Experience Working Group `_ - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community``" msgstr "`Contributor Experience Working Group `_ - Matrix: `#community:ansible.im `_ | IRC: ``#ansible-community``" #: ../../rst/community/communication.rst:105 msgid "`DigitalOcean Working Group `_ - Matrix: `#digitalocean:ansible.im `_ | IRC: ``#ansible-digitalocean``" msgstr "`DigitalOcean Working Group `_ - Matrix: `#digitalocean:ansible.im `_ | IRC: ``#ansible-digitalocean``" #: ../../rst/community/communication.rst:106 msgid "`Diversity Working Group `_ - Matrix: `#diversity:ansible.im `_ | IRC: ``#ansible-diversity``" msgstr "`Diversity Working Group `_ - Matrix: `#diversity:ansible.im `_ | IRC: ``#ansible-diversity``" #: ../../rst/community/communication.rst:107 msgid "`Docker Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" msgstr "`Docker Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" #: ../../rst/community/communication.rst:108 msgid "`Documentation Working Group `_ - Matrix: `#docs:ansible.im `_ | IRC: ``#ansible-docs``" msgstr "`Documentation Working Group `_ - Matrix: `#docs:ansible.im `_ | IRC: ``#ansible-docs``" #: ../../rst/community/communication.rst:109 msgid "`Galaxy Working Group `_ - Matrix: `#galaxy:ansible.im `_ | IRC: ``#ansible-galaxy``" msgstr "`Galaxy Working Group `_ - Matrix: `#galaxy:ansible.im `_ | IRC: ``#ansible-galaxy``" #: ../../rst/community/communication.rst:110 msgid "`JBoss Working Group `_ - Matrix: `#jboss:ansible.im `_ | IRC: ``#ansible-jboss``" msgstr "`JBoss Working Group `_ - Matrix: `#jboss:ansible.im `_ | IRC: ``#ansible-jboss``" #: ../../rst/community/communication.rst:111 msgid "`Kubernetes Working Group `_ - Matrix: `#kubernetes:ansible.im `_ | IRC: ``#ansible-kubernetes``" msgstr "`Kubernetes Working Group `_ - Matrix: `#kubernetes:ansible.im `_ | IRC: ``#ansible-kubernetes``" #: ../../rst/community/communication.rst:112 msgid "`Linode Working Group `_ - Matrix: `#linode:ansible.im `_ | IRC: ``#ansible-linode``" msgstr "`Linode Working Group `_ - Matrix: `#linode:ansible.im `_ | IRC: ``#ansible-linode``" #: ../../rst/community/communication.rst:113 msgid "`Molecule Working Group `_ (`testing platform for Ansible playbooks and roles `_) - Matrix: `#molecule:ansible.im `_ | IRC: ``#ansible-molecule``" msgstr "`Molecule Working Group `_ (`testing platform for Ansible playbooks and roles `_) - Matrix: `#molecule:ansible.im `_ | IRC: ``#ansible-molecule``" #: ../../rst/community/communication.rst:114 msgid "`Network Working Group `_ - Matrix: `#network:ansible.im `_ | IRC: ``#ansible-network``" msgstr "`Network Working Group `_ - Matrix: `#network:ansible.im `_ | IRC: ``#ansible-network``" #: ../../rst/community/communication.rst:115 msgid "`Remote Management Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" msgstr "`Remote Management Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" #: ../../rst/community/communication.rst:116 msgid "`Testing Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" msgstr "`Testing Working Group `_ - Matrix: `#devel:ansible.im `_ | IRC: ``#ansible-devel``" #: ../../rst/community/communication.rst:117 msgid "`VMware Working Group `_ - Matrix: `#vmware:ansible.im `_ | IRC: ``#ansible-vmware``" msgstr "`VMware Working Group `_ - Matrix: `#vmware:ansible.im `_ | IRC: ``#ansible-vmware``" #: ../../rst/community/communication.rst:118 msgid "`Windows Working Group `_ - Matrix: `#windows:ansible.im `_ | IRC: ``#ansible-windows``" msgstr "`Windows Working Group `_ - Matrix: `#windows:ansible.im `_ | IRC: ``#ansible-windows``" #: ../../rst/community/communication.rst:120 msgid "Want to `form a new Working Group `_?" msgstr "`æ–°ã—ã„ワーキンググループを作りãŸã„ `_ ã§ã™ã‹?" #: ../../rst/community/communication.rst:123 msgid "Regional and Language-specific channels" msgstr "地域ãŠã‚ˆã³è¨€èªžå›ºæœ‰ã®ãƒãƒ£ãƒ³ãƒãƒ«" #: ../../rst/community/communication.rst:125 msgid "Comunidad Ansible en español - Matrix: `#espanol:ansible.im `_ | IRC: ``#ansible-es``" msgstr "スペイン語ã®Ansibleコミュニティー - Matrix: `#espanol:ansible.im `_ | IRC: ``#ansible-es``" #: ../../rst/community/communication.rst:126 msgid "Communauté française d'Ansible - Matrix: `#francais:ansible.im `_ | IRC: ``#ansible-fr``" msgstr "フランス語ã®Ansibleコミュニティー - Matrix: `#francais:ansible.im `_ | IRC: ``#ansible-fr``" #: ../../rst/community/communication.rst:127 msgid "Communauté suisse d'Ansible - Matrix: `#suisse:ansible.im `_ | IRC: ``#ansible-zh``" msgstr "スイスã®Ansibleコミュニティー - Matrix: `#suisse:ansible.im `_ | IRC: ``#ansible-zh``" #: ../../rst/community/communication.rst:128 msgid "European Ansible Community - Matrix: `#europe:ansible.im `_ | IRC: ``#ansible-eu``" msgstr "ヨーロッパã®Ansibleコミュニティー - Matrix: `#europe:ansible.im `_ | IRC: ``#ansible-eu``" #: ../../rst/community/communication.rst:131 msgid "Meetings on chat" msgstr "ãƒãƒ£ãƒƒãƒˆã§ã®ä¼šè­°" #: ../../rst/community/communication.rst:133 msgid "The Ansible community holds regular meetings on various topics on Matrix/IRC, and anyone who is interested is invited to participate. For more information about Ansible meetings, consult the `meeting schedule and agenda page `_." msgstr "Ansible コミュニティーã¯ã€Matrix/IRCã§ã•ã¾ã–ã¾ãªãƒˆãƒ”ックã«é–¢ã™ã‚‹å®šæœŸçš„ãªãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’é–‹ã„ã¦ãŠã‚Šã€èˆˆå‘³ã®ã‚る人ã¯èª°ã§ã‚‚å‚加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ミーティングã®è©³ç´°ã¯ã€ã€Œ`meeting schedule and agenda page `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/communication.rst:136 msgid "Ansible Automation Platform support questions" msgstr "Ansible Automation Platform サãƒãƒ¼ãƒˆã«é–¢ã™ã‚‹è³ªå•" #: ../../rst/community/communication.rst:138 msgid "Red Hat Ansible `Automation Platform `_ is a subscription that contains support, certified content, and tooling for Ansible including content management, a controller, UI and REST API." msgstr "Red Hat Ansible `Automation Platform `_ ã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„管ç†ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã€UI ãŠã‚ˆã³ REST API ãªã©ã® Ansible ã®ã‚µãƒãƒ¼ãƒˆã€èªå®šã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã€ãŠã‚ˆã³ãƒ„ールãŒå«ã¾ã‚Œã‚‹ã‚µãƒ–スクリプションã§ã™ã€‚" #: ../../rst/community/communication.rst:140 msgid "If you have a question about Ansible Automation Platform, visit `Red Hat support `_ rather than using a chat channel or the general project mailing list." msgstr "Ansible Automation Platform ã«é–¢ã™ã‚‹ã”質å•ã¯ã€ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¾ãŸã¯ä¸€èˆ¬çš„ãªãƒ—ロジェクトメーリングリストã§ã¯ãªãã€`Red Hat support `_ ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/community/communication.rst:143 msgid "The Bullhorn" msgstr "The Bullhorn" #: ../../rst/community/communication.rst:145 msgid "**The Bullhorn** is our newsletter for the Ansible developer community. If you have any questions or content you would like to share, please reach out to us at the-bullhorn@redhat.com, or directly `contribute/suggest content `_ for upcoming issues." msgstr "**The Bullhorn** ã¯ã€Ansible 開発者コミュニティーã®ãƒ‹ãƒ¥ãƒ¼ã‚¹ãƒ¬ã‚¿ãƒ¼ã§ã™ã€‚共有ã—ãŸã„質å•やコンテンツãŒã‚ã‚‹å ´åˆã¯ã€Red Hat ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„ (the-bullhorn@redhat.com,)。ã¾ãŸã€ä»Šå¾Œç™ºè¡Œã™ã‚‹ç‰ˆã«ã¤ã„ã¦ã¯ã€`contribute/suggest content `_ ã«ç›´æŽ¥ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/community/communication.rst:148 msgid "Read past issues `here `_." msgstr "ã“れã¾ã§ç™ºè¡Œã—ãŸç‰ˆã«ã¤ã„ã¦ã¯ã€`ã“ã¡ã‚‰ `_ ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/community/communication.rst:150 msgid "`Subscribe `_ to receive it." msgstr "ã“れをå—ã‘å–ã‚‹ã«ã¯ã€`Subscribe `_ ã—ã¾ã™ã€‚" #: ../../rst/community/community.rst:4 msgid "Community Information & Contributing" msgstr "ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®æƒ…å ±ãŠã‚ˆã³è²¢çŒ®" #: ../../rst/community/community.rst:6 msgid "This page is deprecated. Please see the updated :ref:`Ansible Community Guide `." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚æ›´æ–°ã•れãŸã€Œ:ref:`Ansible コミュニティーガイド `ã€ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/community/contributing_maintained_collections.rst:6 msgid "Contributing to Ansible-maintained Collections" msgstr "Ansible 管ç†ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®å‚加" #: ../../rst/community/contributing_maintained_collections.rst:8 msgid "The Ansible team welcomes community contributions to the collections maintained by Red Hat Ansible Engineering. This section describes how you can open issues and create PRs with the required testing before your PR can be merged." msgstr "Ansible ãƒãƒ¼ãƒ ã¯ã€Red Hat Ansible Engineering ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®è²¢çŒ®ã‚’歓迎ã—ã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€PR をマージã™ã‚‹å‰ã«ã€å•題を作æˆã—ã€å¿…è¦ãªãƒ†ã‚¹ãƒˆã§ PR を作æˆã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:14 msgid "Ansible-maintained collections" msgstr "Ansible ã§ç®¡ç†ã•れã¦ã„るコレクション" #: ../../rst/community/contributing_maintained_collections.rst:16 msgid "The following table shows:" msgstr "次ã®è¡¨ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:18 msgid "**Ansible-maintained collection** - Click the link to the collection on Galaxy, then click the ``repo`` button in Galaxy to find the GitHub repository for this collection." msgstr "**Ansible ã§ç®¡ç†ã•れã¦ã„るコレクション** - Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã‹ã‚‰ã€Galaxy ã® ``repo`` ボタンをクリックã—ã¦ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’検索ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:19 msgid "**Related community collection** - Collection that holds community-created content (modules, roles, and so on) that may also be of interest to a user of the Ansible-maintained collection. You can, for example, add new modules to the community collection as a technical preview before the content is moved to the Ansible-maintained collection." msgstr "**関連ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³** - コミュニティーã§ä½œæˆã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ (モジュールã€ãƒ­ãƒ¼ãƒ«ãªã©) ã‚’ä¿æŒã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã€Ansible ã§ç®¡ç†ã•れã¦ã„るコレクションã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚関心をæŒã¤å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㌠Ansible ã§ç®¡ç†ã•れã¦ã„るコレクションã«ç§»å‹•ã™ã‚‹å‰ã«ã€ãƒ†ã‚¯ãƒ‹ã‚«ãƒ«ãƒ—レビューã¨ã—ã¦ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æ–°ã—ã„モジュールを追加ã§ãã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:20 msgid "**Sponsor** - Working group that manages the collections. You can join the meetings to discuss important proposed changes and enhancements to the collections." msgstr "**スãƒãƒ³ã‚µãƒ¼**: コレクションを管ç†ã™ã‚‹ä½œæ¥­ã‚°ãƒ«ãƒ¼ãƒ—。ミーティングã«å‚加ã—ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å¯¾ã™ã‚‹é‡è¦ãªå¤‰æ›´ãŠã‚ˆã³æ©Ÿèƒ½å¼·åŒ–を検討ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:21 msgid "**Test requirements** - Testing required for any new or changed content for the Ansible-maintained collection." msgstr "**テストè¦ä»¶**: Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ–°ã—ã„コンテンツã¾ãŸã¯å¤‰æ›´ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã¤ã„ã¦ãƒ†ã‚¹ãƒˆã€‚" #: ../../rst/community/contributing_maintained_collections.rst:22 msgid "**Developer details** - Describes whether the Ansible-maintained collection accepts direct community issues and PRs for existing collection content, as well as more specific developer guidelines based on the collection type." msgstr "**開発者ã®è©³ç´°**: Ansible ãŒç›´æŽ¥ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®å•題ã¨ã€æ—¢å­˜ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã® PR ã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ—ã«åŸºã¥ã„ã¦ã‚ˆã‚Šå…·ä½“çš„ãªé–‹ç™ºè€…ガイドラインをå—ã‘入れるã‹ã©ã†ã‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:258 msgid "\\* A ✓ under **Open to PRs** means the collection welcomes GitHub issues and PRs for any changes to existing collection content (plugins, roles, and so on)." msgstr "\\* **Open to PRs** ã®ä¸‹ã«ã‚ã‚‹ ✓ ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒ GitHub ã®å•é¡Œã¨æ—¢å­˜ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ (プラグインã€ãƒ­ãƒ¼ãƒ«ãªã©) ã¸ã®å¤‰æ›´ã«å¯¾ã™ã‚‹ PR を歓迎ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:260 msgid "\\*\\* Integration tests are required and unit tests are welcomed but not required for the AWS collections. An exception to this is made in cases where integration tests are logistically not feasible due to external requirements. An example of this is AWS Direct Connect, as this service can not be functionally tested without the establishment of network peering connections. Unit tests are therefore required for modules that interact with AWS Direct Connect. Exceptions to ``amazon.aws`` must be approved by Red Hat, and exceptions to ``community.aws`` must be approved by the AWS community." msgstr "\\*\\* çµ±åˆãƒ†ã‚¹ãƒˆã¯å¿…é ˆã§ã‚りã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯æ­“迎ã•れã¾ã™ãŒã€AWS コレクションã«ã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“。ã“れã«å¯¾ã™ã‚‹ä¾‹å¤–ã¯ã€å¤–部è¦ä»¶ã«ã‚ˆã‚Šçµ±åˆãƒ†ã‚¹ãƒˆãŒæ°¸ç¶šçš„ã«å®Ÿè¡Œã§ããªã„å ´åˆã«ç”Ÿã˜ã¾ã™ã€‚ã“ã®ä¾‹ã¨ã—ã¦ã€AWS Direct Connect ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ”アリング接続を確立ã—ãªã„ã¨ã€ã“ã®ã‚µãƒ¼ãƒ“スを機能的ã«ãƒ†ã‚¹ãƒˆã§ããªã„ãŸã‚ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€AWS Direct Connect ã¨ç›¸äº’作用ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚``amazon.aws`` ã¸ã®ä¾‹å¤–㯠Red Hat ã«ã‚ˆã£ã¦æ‰¿èªã•れã€``community.aws`` ã¸ã®ä¾‹å¤–㯠AWS コミュニティーã«ã‚ˆã£ã¦æ‰¿èªã•れる必è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:262 msgid "\\*\\*\\* ``ansible.netcommon`` contains all foundational components for enabling many network and security :ref:`platform ` collections. It contains all connection and filter plugins required, and installs as a dependency when you install the platform collection." msgstr "\\*\\*\\* ``ansible.netcommon`` ã«ã¯ã€å¤šãã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã® :ref:`プラットフォーム ` コレクションを有効ã«ã™ã‚‹ãŸã‚ã®åŸºæœ¬ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れã«ã¯å¿…è¦ãªã™ã¹ã¦ã®æŽ¥ç¶šãŠã‚ˆã³ãƒ•ィルタープラグインãŒå«ã¾ã‚Œã€ãƒ—ラットフォームコレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:264 msgid "\\*\\*\\*\\* Unit tests for Windows PowerShell modules are an exception to testing, but unit tests are valid and required for the remainder of the collection, including Ansible-side plugins." msgstr "\\*\\*\\*\\* Windows PowerShell モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ãƒ†ã‚¹ãƒˆã®ä¾‹å¤–ã§ã™ãŒã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€Ansible å´ã®ãƒ—ラグインをå«ã‚ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ®‹ã‚Šã®éƒ¨åˆ†ã«æœ‰åйã‹ã¤å¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:270 msgid "Deciding where your contribution belongs" msgstr "è²¢çŒ®ãŒæ‰€å±žã™ã‚‹å ´æ‰€ã®æ±ºå®š" #: ../../rst/community/contributing_maintained_collections.rst:272 msgid "We welcome contributions to Ansible-maintained collections. Because these collections are part of a downstream supported Red Hat product, the criteria for contribution, testing, and release may be higher than other community collections. The related community collections (such as ``community.general`` and ``community.network``) have less-stringent requirements and are a great place for new functionality that may become part of the Ansible-maintained collection in a future release." msgstr "Ansible ã§ç®¡ç†ã•れã¦ã„るコレクションã¸ã®è²¢çŒ®ã‚’歓迎ã—ã¾ã™ã€‚ã“れらã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ Red Hat 製å“ã®ä¸€éƒ¨ã§ã‚ã‚‹ãŸã‚ã€è²¢çŒ®ã€ãƒ†ã‚¹ãƒˆã€ãŠã‚ˆã³ãƒªãƒªãƒ¼ã‚¹ã®åŸºæº–ã¯ã€ä»–ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚ˆã‚Šã‚‚高ã„å ´åˆãŒã‚りã¾ã™ã€‚関連ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (``community.general`` ãŠã‚ˆã³ ``community.network`` ãªã©) ã®è¦ä»¶ã¯ãれã»ã©å޳ã—ããªãã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§ Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€éƒ¨ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹æ–°ã—ã„æ©Ÿèƒ½ã«æœ€é©ãªå ´æ‰€ã§ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:274 msgid "The following scenarios use the ``arista.eos`` to help explain when to contribute to the Ansible-maintained collection, and when to propose your change or idea to the related community collection:" msgstr "以下ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€``arista.eos`` を使用ã—㦠Ansible ãŒç®¡ç†ã—ã¦ã„るコレクションã«è²¢çŒ®ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚„ã€é–¢é€£ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å¤‰æ›´ã‚„考ãˆã‚’ææ¡ˆã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’説明ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:277 msgid "You want to fix a problem in the ``arista.eos`` Ansible-maintained collection. Create the PR directly in the `arista.eos collection GitHub repository `_. Apply all the :ref:`merge requirements `." msgstr "Ansible ãŒç®¡ç†ã™ã‚‹ ``arista.eos`` コレクションã®å•題を修正ã—ã¾ã™ã€‚PR ã‚’ `arista.eos コレクション㮠GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã«ç›´æŽ¥ä½œæˆã—ã¾ã™ã€‚:ref:`マージè¦ä»¶ ` ã‚’ã™ã¹ã¦é©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:279 msgid "You want to add a new Ansible module for Arista. Your options are one of the following:" msgstr "Arista ã®æ–°ã—ã„ Ansible モジュールを追加ã—ã¾ã™ã€‚オプションã¯ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:281 msgid "Propose a new module in the ``arista.eos`` collection (requires approval from Arista and Red Hat)." msgstr "``arista.eos`` ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æ–°ã—ã„モジュールを実装ã—ã¾ã™ (Arista 㨠Red Hat ã®æ‰¿èªãŒå¿…è¦ã§ã™)。" #: ../../rst/community/contributing_maintained_collections.rst:282 msgid "Propose a new collection in the ``arista`` namespace (requires approval from Arista and Red Hat)." msgstr "``arista`` åå‰ç©ºé–“ã§æ–°ã—ã„ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ææ¡ˆã—ã¾ã™ (Arista ãŠã‚ˆã³ Red Hat ã®æ‰¿èªãŒå¿…è¦ã§ã™)。" #: ../../rst/community/contributing_maintained_collections.rst:283 msgid "Propose a new module in the ``community.network`` collection (requires network community approval)." msgstr "``community.network`` ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æ–°ã—ã„モジュールを実装ã—ã¾ã™ (ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®æ‰¿èªãŒå¿…è¦ã§ã™)。" #: ../../rst/community/contributing_maintained_collections.rst:284 msgid "Place your new module in a collection in your own namespace (no approvals required)." msgstr "æ–°ã—ã„モジュールを独自ã®åå‰ç©ºé–“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç½®ãã¾ã™ (承èªã¯å¿…è¦ã‚りã¾ã›ã‚“)。" #: ../../rst/community/contributing_maintained_collections.rst:287 msgid "Most new content should go into either a related community collection or your own collection first so that is well established in the community before you can propose adding it to the ``arista`` namespace, where inclusion and maintenance criteria are much higher." msgstr "ã»ã¨ã‚“ã©ã®æ–°ã—ã„コンテンツã¯ã€é–¢é€£ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å…¥ã‚Œã‚‹ã‹ã€ç‹¬è‡ªã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã„ãšã‚Œã‹ã«å…¥ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å«ã¾ã‚Œã‚‹åŸºæº–ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹åŸºæº–ãŒã¯ã‚‹ã‹ã«é«˜ã„ ``arista`` åå‰ç©ºé–“ã«è¿½åŠ ã™ã‚‹ã“ã¨ã‚’ææ¡ˆã§ãã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:293 msgid "Requirements to merge your PR" msgstr "PR ã®ãƒžãƒ¼ã‚¸è¦ä»¶" #: ../../rst/community/contributing_maintained_collections.rst:295 msgid "Your PR must meet the following requirements before it can merge into an Ansible-maintained collection:" msgstr "Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒžãƒ¼ã‚¸ã™ã‚‹å‰ã«ã€PR ãŒä»¥ä¸‹ã®è¦ä»¶ã‚’満ãŸã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:298 msgid "The PR is in the intended scope of the collection. Communicate with the appropriate Ansible sponsor listed in the :ref:`Ansible-maintained collection table ` for help." msgstr "PR ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ç¯„囲ã«ã‚ã‚Šã€æ”¯æ´ã‚’å¾—ã‚‹ãŸã‚ã« :ref:`Ansible 管ç†ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è¡¨ ` ã«ä¸€è¦§è¡¨ç¤ºã•れã¦ã„ã‚‹é©åˆ‡ãª Ansible スãƒãƒ³ã‚µãƒ¼ã«é€£çµ¡ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:299 msgid "For network and security domains, the PR follows the :ref:`resource module development principles `." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ‰ãƒ¡ã‚¤ãƒ³ã®å ´åˆã€ãƒ—ãƒ«è¦æ±‚㯠:ref:`リソースモジュール開発ã®åŽŸå‰‡ ` ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:300 msgid "Passes :ref:`sanity tests and tox `." msgstr ":ref:`sanity tests and tox ` を渡ã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:301 msgid "Passes unit, and integration tests, as listed in the :ref:`Ansible-maintained collection table ` and described in :ref:`testing_resource_modules`." msgstr ":ref:`Ansible 管ç†ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è¡¨ ` ã«ä¸€è¦§è¡¨ç¤ºã•れã¦ã„ã‚‹ã¨ãŠã‚Šã«ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŠã‚ˆã³çµ±åˆãƒ†ã‚¹ãƒˆã‚’渡ã—ã¾ã™ (:ref:`testing_resource_modules` ã‚’å‚ç…§)。" #: ../../rst/community/contributing_maintained_collections.rst:302 msgid "Follows Ansible guidelines. See :ref:`developing_modules` and :ref:`developing_collections`." msgstr "Ansible ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«æº–æ‹ ã—ã¾ã™ã€‚「:ref:`developing_modules`ã€ãŠã‚ˆã³ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/contributing_maintained_collections.rst:303 msgid "Addresses all review comments." msgstr "ã™ã¹ã¦ã®ãƒ¬ãƒ“ューコメントã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/community/contributing_maintained_collections.rst:304 msgid "Includes an appropriate :ref:`changelog `." msgstr "ã“れã«ã¯ã€é©åˆ‡ãª :ref:`changelog ` ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/contributor_license_agreement.rst:5 msgid "Contributors License Agreement" msgstr "貢献者ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹å¥‘ç´„" #: ../../rst/community/contributor_license_agreement.rst:7 msgid "By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project." msgstr "By contributing you agree that these contributions are your own (or approved by your employer) and you grant a full, complete, irrevocable copyright license to all users and developers of the project, present and future, pursuant to the license of the project." #: ../../rst/community/development_process.rst:5 msgid "The Ansible Development Cycle" msgstr "Ansible 開発ライフサイクル" #: ../../rst/community/development_process.rst:7 msgid "Ansible developers (including community contributors) add new features, fix bugs, and update code in many different repositories. The `ansible/ansible repository `_ contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core``. Other repositories contain plugins and modules that enable Ansible to execute specific tasks, like adding a user to a particular database or configuring a particular network device. These repositories contain the source code for collections." msgstr "Ansible 開発者 (コミュニティーã®è²¢çŒ®è€…ã‚’å«ã‚€) ã¯ã€å¤šãã®ç•°ãªã‚‹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§æ–°æ©Ÿèƒ½ã‚’追加ã—ã€ãƒã‚°ã‚’修正ã—ã€ã‚³ãƒ¼ãƒ‰ã‚’æ›´æ–°ã—ã¾ã™ã€‚`ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã‚’管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚³ãƒ”ーã™ã‚‹ãªã©ã€åŸºæœ¬çš„ãªæ©Ÿèƒ½ãŠã‚ˆã³é–¢æ•°ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ã€``ansible-core`` ã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™ã€‚ä»–ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ã€Ansible ãŒç‰¹å®šã®ã‚¿ã‚¹ã‚¯ (特定ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¿½åŠ ã‚„ç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®è¨­å®šãªã©) を実行ã§ãるよã†ã«ã™ã‚‹ãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れらã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:9 msgid "Development on ``ansible-core`` occurs on two levels. At the macro level, the ``ansible-core`` developers and maintainers plan releases and track progress with roadmaps and projects. At the micro level, each PR has its own lifecycle." msgstr "``ansible-core`` 㮠開発㯠2 ã¤ã®ãƒ¬ãƒ™ãƒ«ã§è¡Œã‚れã¾ã™ã€‚マクロレベルã§ã¯ã€``ansible-core`` 開発者ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒãƒªãƒªãƒ¼ã‚¹ã®è¨ˆç”»ã‚’ç«‹ã¦ã€ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ãŠã‚ˆã³ãƒ—ロジェクトを使用ã—ã¦é€²æ—を追跡ã—ã¾ã™ã€‚ミクロレベルã§ã¯ã€å„ãƒ—ãƒ«è¦æ±‚ã«ã¯ç‹¬è‡ªã®ãƒ©ã‚¤ãƒ•サイクルãŒã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:11 msgid "Development on collections also occurs at the macro and micro levels. Each collection has its own macro development cycle. For more information on the collections development cycle, see :ref:`contributing_maintained_collections`. The micro-level lifecycle of a PR is similar in collections and in ``ansible-core``." msgstr "コレクションã«é–¢ã™ã‚‹é–‹ç™ºã¯ã€ãƒžã‚¯ãƒ­ãƒ¬ãƒ™ãƒ«ãŠã‚ˆã³ãƒŸã‚¯ãƒ­ãƒ¬ãƒ™ãƒ«ã§ã‚‚発生ã—ã¾ã™ã€‚å„コレクションã«ã¯ç‹¬è‡ªã®ãƒžã‚¯ãƒ­é–‹ç™ºã‚µã‚¤ã‚¯ãƒ«ãŒã‚りã¾ã™ã€‚コレクション開発サイクルã®è©³ç´°ã¯ã€:ref:`contributing_maintained_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„ã€‚ãƒ—ãƒ«è¦æ±‚ã®ãƒžã‚¤ã‚¯ãƒ­ãƒ¬ãƒ™ãƒ«ã®ãƒ©ã‚¤ãƒ•サイクルã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ ``ansible-core`` ã§ä¼¼ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:17 msgid "Macro development: ``ansible-core`` roadmaps, releases, and projects" msgstr "マクロ開発: ``ansible-core`` ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã€ãƒªãƒªãƒ¼ã‚¹ã€ãŠã‚ˆã³ãƒ—ロジェクト" #: ../../rst/community/development_process.rst:19 msgid "If you want to follow the conversation about what features will be added to ``ansible-core`` for upcoming releases and what bugs are being fixed, you can watch these resources:" msgstr "今後ã®ãƒªãƒªãƒ¼ã‚¹ã«å‘ã‘㦠``ansible-core`` ã«ã©ã®ã‚ˆã†ãªæ©Ÿèƒ½ãŒè¿½åŠ ã•れるã®ã‹ã€ã©ã®ã‚ˆã†ãªãƒã‚°ãŒä¿®æ­£ã•れるã®ã‹ã«ã¤ã„ã¦ã®ã‚„りã¨ã‚Šã‚’見逃ã•ãªã„よã†ã«ã™ã‚‹å ´åˆã¯ã€ã“れらã®ãƒªã‚½ãƒ¼ã‚¹ã‚’フォローã—ã¦ãã ã•ã„。" #: ../../rst/community/development_process.rst:21 msgid "the :ref:`roadmaps`" msgstr ":ref:`roadmaps`" #: ../../rst/community/development_process.rst:22 msgid "the :ref:`Ansible Release Schedule `" msgstr ":ref:`Ansible リリーススケジュール `" #: ../../rst/community/development_process.rst:23 msgid "various GitHub `projects `_ - for example:" msgstr "ã•ã¾ã–ã¾ãª GitHub `プロジェクト `_ - 以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:25 msgid "the `2.12 release project `_" msgstr "`2.12 リリースプロジェクト `_" #: ../../rst/community/development_process.rst:26 msgid "the `core documentation project `_" msgstr "`core documentation project `_" #: ../../rst/community/development_process.rst:31 msgid "Micro development: the lifecycle of a PR" msgstr "マイクロ開発: ãƒ—ãƒ«è¦æ±‚ã®ãƒ©ã‚¤ãƒ•サイクル" #: ../../rst/community/development_process.rst:33 msgid "If you want to contribute a feature or fix a bug in ``ansible-core`` or in a collection, you must open a **pull request** (\"PR\" for short). GitHub provides a great overview of `how the pull request process works `_ in general. The ultimate goal of any pull request is to get merged and become part of a collection or ``ansible-core``. Here's an overview of the PR lifecycle:" msgstr "``ansible-core`` ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ©Ÿèƒ½è¿½åŠ ã¾ãŸã¯ãƒã‚°ä¿®æ­£ã¸ã®è²¢çŒ®ã‚’行ã†å ´åˆã¯ã€**ãƒ—ãƒ«è¦æ±‚** (ç•¥ã—ã¦ã€ŒPRã€) を作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一般的㫠`ãƒ—ãƒ«è¦æ±‚プロセスãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ `_ ã®æ¦‚è¦ã¯ã€GitHub ã§ç¢ºèªã§ãã¾ã™ã€‚ãƒ—ãƒ«è¦æ±‚ã®æœ€çµ‚目標ã¯ã€ãƒžãƒ¼ã‚¸ã•れã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ ``ansible-core`` ã®ä¸€éƒ¨ã«ãªã‚‹ã“ã¨ã§ã™ã€‚ãƒ—ãƒ«è¦æ±‚ãƒ©ã‚¤ãƒ•ã‚µã‚¤ã‚¯ãƒ«ã®æ¦‚è¦ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:36 msgid "Contributor opens a PR" msgstr "ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ãã¾ã™ã€‚" #: ../../rst/community/development_process.rst:37 msgid "Ansibot reviews the PR" msgstr "Ansibot ㌠PR をレビューã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:38 msgid "Ansibot assigns labels" msgstr "Ansibot ãŒãƒ©ãƒ™ãƒ«ã‚’割り当ã¦ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:39 msgid "Ansibot pings maintainers" msgstr "Ansibot ãŒãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€£çµ¡ (ping) ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:40 msgid "Azure Pipelines runs the test suite" msgstr "Azure Pipelines ãŒãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:41 msgid "Developers, maintainers, community review the PR" msgstr "開発者ã€ä¿å®ˆã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒãƒ—ãƒ«è¦æ±‚をレビューã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:42 msgid "Contributor addresses any feedback from reviewers" msgstr "貢献者ã¯ã€ãƒ¬ãƒ“ュー担当者ã‹ã‚‰ã®ãƒ•ィードãƒãƒƒã‚¯ã«å¯¾å‡¦ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:43 msgid "Developers, maintainers, community re-review" msgstr "開発者ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒå†ãƒ¬ãƒ“ューã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:44 msgid "PR merged or closed" msgstr "ãƒ—ãƒ«è¦æ±‚をマージã¾ãŸã¯ã‚¯ãƒ­ãƒ¼ã‚ºã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:47 msgid "Automated PR review: ansibullbot" msgstr "è‡ªå‹•ãƒ—ãƒ«è¦æ±‚確èª: ansibullbot" #: ../../rst/community/development_process.rst:49 msgid "Because Ansible receives many pull requests, and because we love automating things, we have automated several steps of the process of reviewing and merging pull requests with a tool called Ansibullbot, or Ansibot for short." msgstr "Ansible ã¯å¤šãã®ãƒ—ãƒ«è¦æ±‚ã‚’å—ã‘å–ã‚‹ãŸã‚ã€ã¾ãŸã“ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¯è‡ªå‹•化ã«èˆˆå‘³ãŒã‚ã‚‹ãŸã‚ã€Ansibullbot (ç•¥ã—㦠Ansibot) ã¨å‘¼ã°ã‚Œã‚‹ãƒ„ールを使ã£ã¦ãƒ—ãƒ«è¦æ±‚を確èªã—ã¦ãƒžãƒ¼ã‚¸ã™ã‚‹ãƒ—ロセスã®ã„ãã¤ã‹ã®ã‚¹ãƒ†ãƒƒãƒ—を自動化ã—ã¾ã—ãŸã€‚" #: ../../rst/community/development_process.rst:51 msgid "`Ansibullbot `_ serves many functions:" msgstr "`Ansibullbot `_ ã¯å¤šãã®æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:53 msgid "Responds quickly to PR submitters to thank them for submitting their PR" msgstr "ãƒ—ãƒ«è¦æ±‚ã®æå‡ºè€…ã«è¿…速ã«å¯¾å¿œã—ã€ãƒ—ãƒ«è¦æ±‚æå‡ºã®ãŠç¤¼ã‚’ä¼ãˆã¾ã™ã€‚" #: ../../rst/community/development_process.rst:54 msgid "Identifies the community maintainer responsible for reviewing PRs for any files affected" msgstr "影響をå—ã‘るファイルã®ãƒ—ãƒ«è¦æ±‚ã®ãƒ¬ãƒ“ューを担当ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã‚’特定ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:55 msgid "Tracks the current status of PRs" msgstr "ãƒ—ãƒ«è¦æ±‚ã®ç¾åœ¨ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’追跡ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:56 msgid "Pings responsible parties to remind them of any PR actions for which they may be responsible" msgstr "責任ã®ã‚るユーザーã«é€£çµ¡ (ping) ã—ã¦ã€ãƒ—ãƒ«è¦æ±‚ã«å¯¾ã—ã¦è²¬ä»»ã‚’è² ã†å¯èƒ½æ€§ã®ã‚ã‚‹ã™ã¹ã¦ã®è¡Œç‚ºã‚’å–šèµ·ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:57 msgid "Provides maintainers with the ability to move PRs through the workflow" msgstr "メンテナーã«ã€ãƒ¯ãƒ¼ã‚¯ãƒ•ロー全体ã§ãƒ—ãƒ«è¦æ±‚ã‚’å‹•ã‹ã™æ¨©é™ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:58 msgid "Identifies PRs abandoned by their submitters so that we can close them" msgstr "æå‡ºè€…ãŒæ”¾æ£„ã—ãŸãƒ—ãƒ«è¦æ±‚を特定ã—ã¦ã‚¯ãƒ­ãƒ¼ã‚ºã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:59 msgid "Identifies modules abandoned by their maintainers so that we can find new maintainers" msgstr "メンテナーãŒä¸­æ–­ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’特定ã—ã€æ–°ã—ã„メンテナーを見ã¤ã‘られるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:62 msgid "Ansibot workflow" msgstr "Ansibot ワークフロー" #: ../../rst/community/development_process.rst:64 msgid "Ansibullbot runs continuously. You can generally expect to see changes to your issue or pull request within thirty minutes. Ansibullbot examines every open pull request in the repositories, and enforces state roughly according to the following workflow:" msgstr "Ansibullbot ã¯ç¶™ç¶šçš„ã«å®Ÿè¡Œã•れã¾ã™ã€‚é€šå¸¸ã€æå‡ºã—ãŸå•é¡Œã‚„ãƒ—ãƒ«è¦æ±‚ã®å†…容ã¯ã€30 分もã‚れã°ç¢ºèªã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚Ansibullbot ã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®æœªè§£æ±ºã®ãƒ—ãƒ«è¦æ±‚を調ã¹ã¦ã€ä»¥ä¸‹ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローã«å¾“ã£ã¦çŠ¶æ…‹ã‚’å¼·åˆ¶ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:66 msgid "If a pull request has no workflow labels, it's considered **new**. Files in the pull request are identified, and the maintainers of those files are pinged by the bot, along with instructions on how to review the pull request. (Note: sometimes we strip labels from a pull request to \"reboot\" this process.)" msgstr "ãƒ—ãƒ«è¦æ±‚ã«ãƒ¯ãƒ¼ã‚¯ãƒ•ローラベルãŒãªã„å ´åˆã¯ã€**new** ã¨è¦‹ãªã•れã¾ã™ã€‚ãƒ—ãƒ«è¦æ±‚ã«å«ã¾ã‚Œã‚‹ãƒ•ァイルãŒç‰¹å®šã•れã€ãƒœãƒƒãƒˆãŒãã®ãƒ•ァイルã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€šçŸ¥ã‚’é€ã‚Šã€ãƒ—ãƒ«è¦æ±‚を確èªã™ã‚‹æ–¹æ³•ãŒæŒ‡ç¤ºã•れã¾ã™ (注記: 時々ã€ãƒ—ãƒ«è¦æ±‚ã‹ã‚‰ãƒ©ãƒ™ãƒ«ã‚’削除ã—ã¦ã€ã“ã®ãƒ—ロセスを「å†èµ·å‹•ã€ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™)。" #: ../../rst/community/development_process.rst:67 msgid "If the module maintainer is not ``$team_ansible``, the pull request then goes into the **community_review** state." msgstr "モジュールã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒ ``$team_ansible`` ã§ãªã„å ´åˆã¯ã€ãƒ—ãƒ«è¦æ±‚㌠**community_review** 状態ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:68 msgid "If the module maintainer is ``$team_ansible``, the pull request then goes into the **core_review** state (and probably sits for a while)." msgstr "モジュールã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒ ``$team_ansible`` ã®å ´åˆã€ãƒ—ãƒ«è¦æ±‚㯠**core_review** 状態ã«ãªã‚Šã¾ã™ (ãã—ã¦ã€ãŠãらãã—ã°ã‚‰ããã®ã¾ã¾ã«ãªã‚Šã¾ã™)。" #: ../../rst/community/development_process.rst:69 msgid "If the pull request is in **community_review** and has received comments from the maintainer:" msgstr "ãƒ—ãƒ«è¦æ±‚㌠**community_review** ã«ã‚りã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã‹ã‚‰ã‚³ãƒ¡ãƒ³ãƒˆã‚’å—ã‘å–ã£ãŸå ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:71 msgid "If the maintainer says ``shipit``, the pull request is labeled **shipit**, whereupon the Core team assesses it for final merge." msgstr "メンテナー㌠``shipit`` ã¨åˆ¤æ–­ã™ã‚‹ã¨ã€ãƒ—ãƒ«è¦æ±‚ã« **shipit** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘られã€Core ãƒãƒ¼ãƒ ãŒæœ€çµ‚çš„ãªãƒžãƒ¼ã‚¸ã®ãŸã‚ã«ãれを評価ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:72 msgid "If the maintainer says ``needs_info``, the pull request is labeled **needs_info** and the submitter is asked for more info." msgstr "メンテナー㌠``needs_info`` ã¨åˆ¤æ–­ã™ã‚‹ã¨ã€ãƒ—ãƒ«è¦æ±‚ã« **needs_info** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘ã‚‰ã‚Œã€æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è©³ç´°æƒ…å ±ã®æä¾›ãŒæ±‚ã‚られã¾ã™ã€‚" #: ../../rst/community/development_process.rst:73 msgid "If the maintainer says **needs_revision**, the pull request is labeled **needs_revision** and the submitter is asked to fix some things." msgstr "メンテナー㌠**needs_revision** ã¨åˆ¤æ–­ã™ã‚‹ã¨ã€ãƒ—ãƒ«è¦æ±‚ã« **needs_revision** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘ã‚‰ã‚Œã€æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä¸€éƒ¨ä¿®æ­£ã‚’求ã‚られã¾ã™ã€‚" #: ../../rst/community/development_process.rst:75 msgid "If the submitter says ``ready_for_review``, the pull request is put back into **community_review** or **core_review** and the maintainer is notified that the pull request is ready to be reviewed again." msgstr "æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ``ready_for_review`` ã¨åˆ¤æ–­ã™ã‚‹ã¨ã€ãã®ãƒ—ãƒ«è¦æ±‚㯠**community_review** ã¾ãŸã¯ **core_review** ã«æˆ»ã•れã€ãƒ—ãƒ«è¦æ±‚ã®å†ãƒ¬ãƒ“ãƒ¥ãƒ¼ã®æº–å‚™ãŒã§ããŸã“ã¨ãŒãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€šçŸ¥ã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:76 msgid "If the pull request is labeled **needs_revision** or **needs_info** and the submitter has not responded lately:" msgstr "ãƒ—ãƒ«è¦æ±‚ã« **needs_revision** ã¾ãŸã¯ **needs_info** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘ã‚‰ã‚Œã€æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå¿œç­”ã—ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:78 msgid "The submitter is first politely pinged after two weeks, pinged again after two more weeks and labeled **pending action**, and the issue or pull request will be closed two weeks after that." msgstr "æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ 2 週間後ã«ä¸å¯§ãªé€šçŸ¥ã‚’å—ã‘å–りã€ã•ら㫠2 週間後ã«å†åº¦é€£çµ¡ãŒå…¥ã‚Šã€**pending action** (ä¿ç•™ä¸­) ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘られã€ãã® 2 週間後ã«å•題ã¾ãŸã¯ãƒ—ãƒ«è¦æ±‚ãŒã‚¯ãƒ­ãƒ¼ã‚ºã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:79 msgid "If the submitter responds at all, the clock is reset." msgstr "æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå¿œç­”ã™ã‚‹ã¨ã€ã‚¿ã‚¤ãƒžãƒ¼ãŒãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:80 msgid "If the pull request is labeled **community_review** and the reviewer has not responded lately:" msgstr "ãƒ—ãƒ«è¦æ±‚ã« **community_review** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ã‘られã€ãƒ¬ãƒ“ュー担当者ãŒå¿œç­”ã—ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:82 msgid "The reviewer is first politely pinged after two weeks, pinged again after two more weeks and labeled **pending_action**, and then may be reassigned to ``$team_ansible`` or labeled **core_review**, or often the submitter of the pull request is asked to step up as a maintainer." msgstr "レビューアー㯠2 週間後ã«ä¸å¯§ãªé€šçŸ¥ã‚’å—ã‘å–りã€ã•ら㫠2 週間後ã«å†åº¦é€šçŸ¥ãŒã‚りã€**pending_action** ã¨è¡¨ç¤ºã•れã¾ã™ã€‚ãã®å¾Œã€``$team_ansible`` ã«å†ã‚¢ã‚µã‚¤ãƒ³ã•れãŸã‚Šã€**core_review** ã¨ã„ã†ãƒ©ãƒ™ãƒ«ãŒä»˜ãã¾ã™ã€‚ã‚‚ã—ãã¯ã€ãƒ—ãƒ«è¦æ±‚ã®æå‡ºè€…ãŒãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¨ã—ã¦ã‚¹ãƒ†ãƒƒãƒ—アップã™ã‚‹ã‚ˆã†ã«æ±‚ã‚られるã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:83 msgid "If Azure Pipelines tests fail, or if the code is not able to be merged, the pull request is automatically put into **needs_revision** along with a message to the submitter explaining why." msgstr "Azure Pipelines テストãŒå¤±æ•—ã—ãŸã‚Šã€ã‚³ãƒ¼ãƒ‰ã‚’マージã§ããªã„ã¨ã€ãƒ—ãƒ«è¦æ±‚ã¯è‡ªå‹•的㫠**needs_revision** ã«ç½®ã‹ã‚Œã€ãã®ç†ç”±ã‚’説明ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/community/development_process.rst:85 msgid "There are corner cases and frequent refinements, but this is the workflow in general." msgstr "ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„å ´åˆã‚„ã€é »ç¹ã«æ”¹è‰¯ã•れる場åˆãŒã‚りã¾ã™ãŒã€ã“れã¯ä¸€èˆ¬çš„ãªãƒ¯ãƒ¼ã‚¯ãƒ•ローã§ã™ã€‚" #: ../../rst/community/development_process.rst:88 msgid "PR labels" msgstr "ãƒ—ãƒ«è¦æ±‚ã®ãƒ©ãƒ™ãƒ«" #: ../../rst/community/development_process.rst:90 msgid "There are two types of PR Labels generally: **workflow** labels and **information** labels." msgstr "一般的ã«ã€ãƒ—ãƒ«è¦æ±‚ã«ã¯ã€**ワークフロー** ラベルãŠã‚ˆã³ **情報** ラベル㮠2 ã¤ã®ã‚¿ã‚¤ãƒ—ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:93 msgid "Workflow labels" msgstr "ワークフローラベル" #: ../../rst/community/development_process.rst:95 msgid "**community_review**: Pull requests for modules that are currently awaiting review by their maintainers in the Ansible community." msgstr "**community_review**: Ansible コミュニティーã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒç¢ºèªã™ã‚‹ã®ã‚’ç¾åœ¨å¾…ã£ã¦ã„るモジュールã®ãƒ—ãƒ«è¦æ±‚。" #: ../../rst/community/development_process.rst:96 msgid "**core_review**: Pull requests for modules that are currently awaiting review by their maintainers on the Ansible Core team." msgstr "**core_review**: ç¾åœ¨ Ansible Core ãƒãƒ¼ãƒ ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ã‚ˆã‚‹ç¢ºèªã‚’å¾…ã£ã¦ã„るモジュールã®ãƒ—ãƒ«è¦æ±‚。" #: ../../rst/community/development_process.rst:97 msgid "**needs_info**: Waiting on info from the submitter." msgstr "**needs_info**: æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®æƒ…報を待ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:98 msgid "**needs_rebase**: Waiting on the submitter to rebase." msgstr "**needs_rebase**: æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒªãƒ™ãƒ¼ã‚¹ã‚’行ã†ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:99 msgid "**needs_revision**: Waiting on the submitter to make changes." msgstr "**needs_revision**: æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå¤‰æ›´ã‚’行ã†ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:100 msgid "**shipit**: Waiting for final review by the core team for potential merge." msgstr "**shipit**: マージã®å¯èƒ½æ€§ãŒã‚ã‚‹ã‹ã©ã†ã‹ã€Core ãƒãƒ¼ãƒ ã«ã‚ˆã‚‹æœ€çµ‚レビューを待ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:103 msgid "Information labels" msgstr "情報ラベル" #: ../../rst/community/development_process.rst:105 msgid "**backport**: this is applied automatically if the PR is requested against any branch that is not devel. The bot immediately assigns the labels backport and ``core_review``." msgstr "**backport**: PR ㌠devel 以外ã®ãƒ–ランãƒã«å¯¾ã—ã¦è¦æ±‚ã•れるã¨è‡ªå‹•çš„ã«é©ç”¨ã•れã¾ã™ã€‚ボットã¯ã€ã™ãã«ãƒ©ãƒ™ãƒ«ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã¨ ``core_review`` を割り当ã¦ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:106 msgid "**bugfix_pull_request**: applied by the bot based on the templatized description of the PR." msgstr "**bugfix_pull_request**: ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ãƒ³ãƒ—レート化ã•れãŸèª¬æ˜Žã«åŸºã¥ã„ã¦ãƒœãƒƒãƒˆãŒé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:107 msgid "**cloud**: applied by the bot based on the paths of the modified files." msgstr "**cloud**: 変更ã•れãŸãƒ•ァイルã®ãƒ‘スã«åŸºã¥ã„ã¦ãƒœãƒƒãƒˆãŒé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:108 msgid "**docs_pull_request**: applied by the bot based on the templatized description of the PR." msgstr "**docs_pull_request**: ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ãƒ³ãƒ—レート化ã•れãŸèª¬æ˜Žã«åŸºã¥ã„ã¦ãƒœãƒƒãƒˆãŒé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:109 msgid "**easyfix**: applied manually, inconsistently used but sometimes useful." msgstr "**easyfix**: 手動ã§é©ç”¨ã•れã€ãã®ä½¿ç”¨ã¯ä¸€è²«æ€§ã¯ã‚りã¾ã‚ã›ã‚“ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯å½¹ã«ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:110 msgid "**feature_pull_request**: applied by the bot based on the templatized description of the PR." msgstr "**feature_pull_request**: ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ãƒ³ãƒ—レート化ã•れãŸèª¬æ˜Žã«åŸºã¥ã„ã¦ãƒœãƒƒãƒˆãŒé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:111 msgid "**networking**: applied by the bot based on the paths of the modified files." msgstr "**networking**: 変更ã•れãŸãƒ•ァイルã®ãƒ‘スã«åŸºã¥ã„ã¦ãƒœãƒƒãƒˆãŒé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:112 msgid "**owner_pr**: largely deprecated. Formerly workflow, now informational. Originally, PRs submitted by the maintainer would automatically go to **shipit** based on this label. If the submitter is also a maintainer, we notify the other maintainers and still require one of the maintainers (including the submitter) to give a **shipit**." msgstr "**owner_pr**: 大åŠãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã¯ãƒ¯ãƒ¼ã‚¯ãƒ•ローã§ã—ãŸãŒã€ç¾åœ¨ã¯æƒ…å ±æä¾›ã§ã™ã€‚元々ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã‹ã‚‰æå‡ºã•れãŸãƒ—ãƒ«è¦æ±‚ã¯ã€ã“ã®ãƒ©ãƒ™ãƒ«ã«åŸºã¥ã„ã¦è‡ªå‹•的㫠**shipit** ã«é€ã‚‰ã‚Œã¦ã„ã¾ã—ãŸã€‚æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã§ã‚‚ã‚ã‚‹å ´åˆã€ä»–ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€šçŸ¥ã—ã¦ã‚‚ã€(æå‡ºã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å«ã‚€) メンテナーã®ä¸€äººã« **shipit** ã‚’æä¾›ã™ã‚‹ã‚ˆã†ã«è¦æ±‚ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/community/development_process.rst:113 msgid "**pending_action**: applied by the bot to PRs that are not moving. Reviewed every couple of weeks by the community team, who tries to figure out the appropriate action (closure, asking for new maintainers, and so on)." msgstr "**pending_action**: ボットã«ã‚ˆã‚Šã€å¤‰åŒ–ã®ãªã„ãƒ—ãƒ«è¦æ±‚ã«é©ç”¨ã•れã¾ã™ã€‚コミュニティーãƒãƒ¼ãƒ ãŒ 2ã€ï¼“ 週間ã”ã¨ã«ãƒ¬ãƒ“ューã—ã€é©åˆ‡ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ (çµ‚äº†ã€æ–°ã—ã„メンテナーã®å‹Ÿé›†ãªã©) を考ãˆã¾ã™ã€‚" #: ../../rst/community/development_process.rst:117 msgid "Special Labels" msgstr "特殊ãªãƒ©ãƒ™ãƒ«" #: ../../rst/community/development_process.rst:119 msgid "**new_plugin**: this is for new modules or plugins that are not yet in Ansible." msgstr "**new_plugin**: ã“れ㯠Ansible ã«ãªã„æ–°ã—ã„モジュールやプラグインã®ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/community/development_process.rst:121 msgid "**Note:** `new_plugin` kicks off a completely separate process, and frankly it doesn't work very well at present. We're working our best to improve this process." msgstr "**注記:** `new_plugin` ã¯å®Œå…¨ã«åˆ¥ã®ãƒ—ロセスを起動ã—ã¾ã™ãŒã€çŽ‡ç›´ã«è¨€ã£ã¦ç¾åœ¨ã¯ã‚ã¾ã‚Šã†ã¾ã機能ã—ã¦ã„ã¾ã›ã‚“。ã“ã®ãƒ—ロセスを改善ã™ã‚‹ãŸã‚ã«æœ€å–„ã‚’å°½ãã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:124 msgid "Human PR review" msgstr "ユーザーã«ã‚ˆã‚‹ãƒ—ãƒ«è¦æ±‚ã®ãƒ¬ãƒ“ュー" #: ../../rst/community/development_process.rst:126 msgid "After Ansibot reviews the PR and applies labels, the PR is ready for human review. The most likely reviewers for any PR are the maintainers for the module that PR modifies." msgstr "Ansibot ãŒãƒ—ãƒ«è¦æ±‚をレビューã—ã¦ãƒ©ãƒ™ãƒ«ã‚’é©ç”¨ã—ãŸã‚‰ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ—ãƒ«è¦æ±‚をレビューã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚ã„ãšã‚Œã®ãƒ—ãƒ«è¦æ±‚ã§ã‚‚ã€ãれをレビューã™ã‚‹å¯èƒ½æ€§ãŒé«˜ã„ã®ã¯ã€ãƒ—ãƒ«è¦æ±‚ãŒå¤‰æ›´ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã§ã™ã€‚" #: ../../rst/community/development_process.rst:128 msgid "Each module has at least one assigned :ref:`maintainer `, listed in the `BOTMETA.yml `_ file." msgstr "å„モジュールã«ã¯ã€:ref:`メンテナー ` ãŒå°‘ãªãã¨ã‚‚ 1 人ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ãŠã‚Šã€`BOTMETA.yml ` ファイルã«ãã®ä¸€è¦§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:130 msgid "The maintainer's job is to review PRs that affect that module and decide whether they should be merged (``shipit``) or revised (``needs_revision``). We'd like to have at least one community maintainer for every module. If a module has no community maintainers assigned, the maintainer is listed as ``$team_ansible``." msgstr "メンテナーã®ä»•事ã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å½±éŸ¿ã‚’与ãˆã‚‹ãƒ—ãƒ«è¦æ±‚をレビューã—ã¦ã€ãƒžãƒ¼ã‚¸ (``shipit``) ã™ã¹ãã‹ä¿®æ­£ (``needs_revision``) ã™ã¹ãã‹ã‚’判断ã™ã‚‹ã“ã¨ã§ã™ã€‚ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯å°‘ãªãã¨ã‚‚コミュニティーã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒ 1 人必è¦ã§ã™ã€‚モジュールã«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„ã¨ã€ãã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ ``$team_ansible`` ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:132 msgid "Once a human applies the ``shipit`` label, the :ref:`committers ` decide whether the PR is ready to be merged. Not every PR that gets the ``shipit`` label is actually ready to be merged, but the better our reviewers are, and the better our guidelines are, the more likely it will be that a PR that reaches **shipit** will be mergeable." msgstr "ユーザー㌠``shipit`` ラベルをé©ç”¨ã™ã‚‹ã¨ã€:ref:`コミット担当者 ` ã¯ã€ãƒ—ãƒ«è¦æ±‚ãŒãƒžãƒ¼ã‚¸ã™ã‚‹æº–å‚™ãŒã§ãã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’判断ã—ã¾ã™ã€‚``shipit`` ラベルをå–å¾—ã—ãŸã™ã¹ã¦ã®ãƒ—ãƒ«è¦æ±‚ãŒå®Ÿéš›ã«ãƒžãƒ¼ã‚¸å¯èƒ½ãªçŠ¶æ…‹ã«ãªã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ¬ãƒ“ュー担当者ãŒå„ªç§€ã§ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŒå„ªã‚Œã¦ã„れã°ã„ã‚‹ã»ã©ã€**shipit** ã«åˆ°é”ã—ãŸãƒ—ãƒ«è¦æ±‚ãŒãƒžãƒ¼ã‚¸ã•れるå¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:136 msgid "Making your PR merge-worthy" msgstr "ãƒ—ãƒ«è¦æ±‚を価値ã‚ã‚‹ã‚‚ã®ã«ã™ã‚‹" #: ../../rst/community/development_process.rst:138 msgid "We do not merge every PR. Here are some tips for making your PR useful, attractive, and merge-worthy." msgstr "ã™ã¹ã¦ã®ãƒ—ãƒ«è¦æ±‚をマージã™ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ã“ã“ã§ã¯ã€ãƒ—ãƒ«è¦æ±‚を有益ã§é­…力的ã§ã€ãƒžãƒ¼ã‚¸ã™ã‚‹ä¾¡å€¤ã®ã‚ã‚‹ã‚‚ã®ã«ã™ã‚‹ãŸã‚ã®ãƒ’ントをã„ãã¤ã‹ã”紹介ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:143 msgid "Changelogs" msgstr "変更ログ (Changelog)" #: ../../rst/community/development_process.rst:145 msgid "Changelogs help users and developers keep up with changes to ansible-core and Ansible collections. Ansible and many collections build changelogs for each release from fragments. For ansible-core and collections using this model, you **must** add a changelog fragment to any PR that changes functionality or fixes a bug." msgstr "変更ログã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŠã‚ˆã³é–‹ç™ºè€…㌠ansible-core ãŠã‚ˆã³ Ansible コレクションã¸ã®å¤‰æ›´æƒ…報を確èªã™ã‚‹ã®ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚Ansible ã¨å¤šãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒ•ラグメントã‹ã‚‰ãƒªãƒªãƒ¼ã‚¹ã”ã¨ã«å¤‰æ›´ãƒ­ã‚°ã‚’作æˆã—ã¾ã™ã€‚ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’使用ã™ã‚‹ ansible-core ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å ´åˆã¯ã€æ©Ÿèƒ½ã‚’変更ã—ãŸã‚Šã€ãƒã‚°ã‚’修正ã—ãŸã‚Šã™ã‚‹ã™ã¹ã¦ã®ãƒ—ãƒ«è¦æ±‚ã« changelog フラグメントを追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:147 msgid "You do not need a changelog fragment for PRs that:" msgstr "次ã®ã‚ˆã†ãªãƒ—ãƒ«è¦æ±‚ã«ã¯ changelog フラグメントã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/community/development_process.rst:149 msgid "add new modules and plugins, because Ansible tooling does that automatically;" msgstr "Ansible ツールã¯è‡ªå‹•çš„ã«å®Ÿè¡Œã•れるãŸã‚ã€æ–°ã—ã„モジュールãŠã‚ˆã³ãƒ—ラグインを追加ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:150 msgid "contain only documentation changes." msgstr "ドキュメントã®å¤‰æ›´ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/development_process.rst:153 msgid "Some collections require a changelog fragment for every pull request. They use the ``trivial:`` section for entries mentioned above that will be skipped when building a release changelog." msgstr "一部ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒ—ãƒ«è¦æ±‚ã”ã¨ã« changelog フラグメントãŒå¿…è¦ã§ã™ã€‚上記ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«ã¤ã„㦠``trivial:`` セクションを使用ã—ã¾ã™ã€‚ã“れã¯ã€ãƒªãƒªãƒ¼ã‚¹ã®å¤‰æ›´ãƒ­ã‚°ã®æ§‹ç¯‰æ™‚ã«ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:156 msgid "More precisely:" msgstr "具体的ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/development_process.rst:158 msgid "Every bugfix PR must have a changelog fragment. The only exception are fixes to a change that has not yet been included in a release." msgstr "ã™ã¹ã¦ã®ãƒã‚°ä¿®æ­£ãƒ—ãƒ«è¦æ±‚ã«ã¯ changelog フラグメントãŒå¿…è¦ã§ã™ã€‚唯一ã®ä¾‹å¤–ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã«å«ã¾ã‚Œã¦ã„ãªã„変更ã®ä¿®æ­£ã§ã™ã€‚" #: ../../rst/community/development_process.rst:159 msgid "Every feature PR must have a changelog fragment." msgstr "ã™ã¹ã¦ã®æ©Ÿèƒ½ã®ãƒ—ãƒ«è¦æ±‚ã«ã¯ changelog フラグメントãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/community/development_process.rst:160 msgid "New modules and plugins (except jinja2 filter and test plugins) must have ``versions_added`` set correctly, and do not need a changelog fragment. The tooling detects new modules and plugins by their ``versions_added`` value and announces them in the next release's changelog automatically." msgstr "(jinja2 フィルター㨠test プラグインを除ã) æ–°ã—ã„モジュールãŠã‚ˆã³ãƒ—ラグインã«ã¯ã€``versions_added`` ã‚’æ­£ã—ã設定ã™ã‚‹å¿…è¦ãŒã‚りã€changelog フラグメントã¯å¿…è¦ã‚りã¾ã›ã‚“。ツールã¯ã€æ–°ã—ã„モジュールãŠã‚ˆã³ãƒ—ラグインをãã® ``versions_added`` 値ã«ã‚ˆã£ã¦æ¤œå‡ºã—ã€æ¬¡ã®ãƒªãƒªãƒ¼ã‚¹ã® changelog ã§è‡ªå‹•çš„ã«é€šçŸ¥ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:161 msgid "New jinja2 filter and test plugins, and also new roles and playbooks (for collections) must have a changelog fragment. See :ref:`changelogs_how_to_format_j2_roles_playbooks` or the `antsibull-changelog documentation for such changelog fragments `_ for information on how the fragments should look like." msgstr "æ–°ã—ã„ jinja2 フィルターãŠã‚ˆã³ãƒ†ã‚¹ãƒˆãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚‚ã€æ–°ã—ã„ロールãŠã‚ˆã³ Playbook (コレクション用) ã«ã¯ changelog フラグメントãŒå¿…è¦ã§ã™ã€‚ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã®æŒ™å‹•ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`changelogs_how_to_format_j2_roles_playbooks`ã€ã¾ãŸã¯ã€Œ`antsibull-changelog documentation for such changelog fragments `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/development_process.rst:163 msgid "We build short summary changelogs for minor releases as well as for major releases. If you backport a bugfix, include a changelog fragment with the backport PR." msgstr "マイナーリリースã¨ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®ä¸¡æ–¹ã«ã€çŸ­ã„概è¦ã‚’示ã—㟠changelog を作æˆã—ã¾ã™ã€‚ãƒã‚°ä¿®æ­£ã‚’ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã«ã¯ã€ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã®ãƒ—ãƒ«è¦æ±‚ã« changelog フラグメントを追加ã—ã¦ãã ã•ã„。" #: ../../rst/community/development_process.rst:168 msgid "Creating a changelog fragment" msgstr "changelog フラグメントã®ä½œæˆ" #: ../../rst/community/development_process.rst:170 msgid "A basic changelog fragment is a ``.yaml`` or ``.yml`` file placed in the ``changelogs/fragments/`` directory. Each file contains a yaml dict with keys like ``bugfixes`` or ``major_changes`` followed by a list of changelog entries of bugfixes or features. Each changelog entry is rst embedded inside of the yaml file which means that certain constructs would need to be escaped so they can be interpreted by rst and not by yaml (or escaped for both yaml and rst if you prefer). Each PR **must** use a new fragment file rather than adding to an existing one, so we can trace the change back to the PR that introduced it." msgstr "基本的㪠changelog フラグメント㯠``changelogs/fragments/`` ディレクトリーã«ã‚ã‚‹ ``.yaml`` ã¾ãŸã¯ ``.yml`` ファイルã§ã™ã€‚ãれãžã‚Œã®ãƒ•ァイルã«ã¯ã€``bugfixes``ã€``major_changes`` ãªã©ã®ã‚­ãƒ¼ã‚’æŒã¤ yaml ディクショナリーãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãã®å¾Œã«ãƒã‚°ä¿®æ­£ã¾ãŸã¯æ©Ÿèƒ½ã® changelog エントリーã®ä¸€è¦§ãŒç¶šãã¾ã™ã€‚ãれãžã‚Œã® changelog エントリー㯠yaml ファイルãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ rst ã§ã™ã€‚ã¤ã¾ã‚Šã€ç‰¹å®šã®æ§‹æˆã¯ã€yaml ã§ã¯ãªã rst ã§è§£é‡ˆã§ãるよã†ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (yaml 㨠rst ã®ä¸¡æ–¹ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¦ã„ã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„å ´åˆã¯ã€ä¸¡æ–¹ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã—ã¾ã™)。å„ãƒ—ãƒ«è¦æ±‚ã¯ã€æ—¢å­˜ã®ã‚‚ã®ã«è¿½åŠ ã™ã‚‹ã®ã§ã¯ãªãã€æ–°ã—ã„フラグメントファイルを使用ã™ã‚‹ **å¿…è¦ãŒã‚りã¾ã™**。ã—ãŸãŒã£ã¦ã€å¤‰æ›´ã‚’加ãˆãŸãƒ—ãƒ«è¦æ±‚ã¾ã§ã•ã‹ã®ã¼ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/development_process.rst:172 msgid "PRs which add a new module or plugin do not necessarily need a changelog fragment. See the previous section :ref:`community_changelogs`. Also see the next section :ref:`changelogs_how_to_format` for the precise format changelog fragments should have." msgstr "æ–°ã—ã„モジュールã¾ãŸã¯ãƒ—ラグインを追加ã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã¯å¿…ãšã—ã‚‚ changelog フラグメントを必è¦ã¨ã—ã¾ã›ã‚“。å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã€Œ:ref:`community_changelogs`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã€changelog ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã®æ­£ç¢ºãªå½¢å¼ã¯ã€ã€Œ:ref:`changelogs_how_to_format`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/development_process.rst:174 msgid "To create a changelog entry, create a new file with a unique name in the ``changelogs/fragments/`` directory of the corresponding repository. The file name should include the PR number and a description of the change. It must end with the file extension ``.yaml`` or ``.yml``. For example: ``40696-user-backup-shadow-file.yaml``" msgstr "changelog エントリーを作æˆã™ã‚‹ã«ã¯ã€å¯¾å¿œã™ã‚‹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã® ``changelogs/fragments/`` ディレクトリーã«ä¸€æ„ã®åå‰ã‚’æŒã¤æ–°ã—ã„ファイルを作æˆã—ã¾ã™ã€‚ファイルåã«ã¯ã€PR 番å·ã¨å¤‰æ›´ã®èª¬æ˜Žã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚æ‹¡å¼µå­ ``.yaml`` ã¾ãŸã¯ ``.yml`` ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``40696-user-backup-shadow-file.yaml`` ã§ã™ã€‚" #: ../../rst/community/development_process.rst:176 msgid "A single changelog fragment may contain multiple sections but most will only contain one section. The toplevel keys (bugfixes, major_changes, and so on) are defined in the `config file `_ for our `release note tool `_. Here are the valid sections and a description of each:" msgstr "1 ã¤ã® changelog フラグメントã«ã¯è¤‡æ•°ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã¯ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒ 1 ã¤ã—ã‹å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。最上ä½ã‚­ãƒ¼ (bugfixesã€major_changes ãªã©) ã¯ã€`リリースノートツール `_ ã® `設定ファイル `_ ã§å®šç¾©ã•れã¦ã„ã¾ã™ã€‚有効ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¨ãã®èª¬æ˜Žã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:179 msgid "**breaking_changes**" msgstr "**breaking_changes**" #: ../../rst/community/development_process.rst:179 msgid "Changes that break existing playbooks or roles. This includes any change to existing behavior that forces users to update tasks. Displayed in both the changelogs and the :ref:`Porting Guides `." msgstr "既存㮠Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’ç ´æã™ã‚‹å¤‰æ›´ã€‚ã“れã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¿ã‚¹ã‚¯ã®æ›´æ–°ã‚’強制ã™ã‚‹æ—¢å­˜ã®å‹•作ã®å¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ã€‚changelog 㨠:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ ` ã®ä¸¡æ–¹ã«è¨˜è¼‰ã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:182 msgid "**major_changes**" msgstr "**major_changes**" #: ../../rst/community/development_process.rst:182 msgid "Major changes to Ansible itself. Generally does not include module or plugin changes. Displayed in both the changelogs and the :ref:`Porting Guides `." msgstr "Ansible 自体ã¸ã®å¤§è¦æ¨¡ãªå¤‰æ›´ã€‚通常ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインã®å¤‰æ›´ã¯å«ã¾ã‚Œã¾ã›ã‚“。changelog 㨠:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ ` ã®ä¸¡æ–¹ã«è¨˜è¼‰ã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:185 msgid "**minor_changes**" msgstr "**minor_changes**" #: ../../rst/community/development_process.rst:185 msgid "Minor changes to Ansible, modules, or plugins. This includes new features, new parameters added to modules, or behavior changes to existing parameters." msgstr "Ansibleã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ã¾ãŸã¯ãƒ—ラグインã¸ã®å°è¦æ¨¡ãªå¤‰æ›´ã€‚ã“れã«ã¯ã€æ–°æ©Ÿèƒ½ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«è¿½åŠ ã•ã‚ŒãŸæ–°ã—ã„パラメーターã€ã¾ãŸã¯æ—¢å­˜ã®ãƒ‘ラメーターã«å¯¾ã™ã‚‹å‹•作ã®å¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/development_process.rst:188 msgid "**deprecated_features**" msgstr "**deprecated_features**" #: ../../rst/community/development_process.rst:188 msgid "Features that have been deprecated and are scheduled for removal in a future release. Displayed in both the changelogs and the :ref:`Porting Guides `." msgstr "éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚changelog 㨠:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ ` ã®ä¸¡æ–¹ã«è¨˜è¼‰ã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:191 msgid "**removed_features**" msgstr "**removed_features**" #: ../../rst/community/development_process.rst:191 msgid "Features that were previously deprecated and are now removed. Displayed in both the changelogs and the :ref:`Porting Guides `." msgstr "以å‰éžæŽ¨å¥¨ã¨ãªã‚Šã€å‰Šé™¤ã•ã‚ŒãŸæ©Ÿèƒ½ã€‚changelogs 㨠:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ ` ã®ä¸¡æ–¹ã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/community/development_process.rst:194 msgid "**security_fixes**" msgstr "**security_fixes**" #: ../../rst/community/development_process.rst:194 msgid "Fixes that address CVEs or resolve security concerns. Include links to CVE information." msgstr "CVE ã«å¯¾å¿œã™ã‚‹ã‹ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®æ‡¸å¿µã‚’解決ã—ã¦ãã ã•ã„。CVE 情報ã¸ã®ãƒªãƒ³ã‚¯ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/development_process.rst:197 msgid "**bugfixes**" msgstr "**bugfixes**" #: ../../rst/community/development_process.rst:197 msgid "Fixes that resolve issues." msgstr "å•題を解決ã™ã‚‹ãŸã‚ã®ä¿®æ­£ã€‚" #: ../../rst/community/development_process.rst:200 msgid "**known_issues**" msgstr "**known_issues**" #: ../../rst/community/development_process.rst:200 msgid "Known issues that are currently not fixed or will not be fixed." msgstr "ç¾åœ¨ä¿®æ­£ã•れã¦ã„ãªã„ã€ã¾ãŸã¯ä¿®æ­£ã•れる予定ã®ãªã„既知ã®å•題。" #: ../../rst/community/development_process.rst:202 msgid "Each changelog entry must contain a link to its issue between parentheses at the end. If there is no corresponding issue, the entry must contain a link to the PR itself." msgstr "å„ changelog エントリーã«ã¯ã€æœ€å¾Œã«æ‹¬å¼§å†…ã«ã€ãã®å•題ã¸ã®ãƒªãƒ³ã‚¯ãŒå«ã¾ã‚Œã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“。対応ã™ã‚‹å•題ãŒãªã„å ´åˆã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«ãƒ—ãƒ«è¦æ±‚自体ã¸ã®ãƒªãƒ³ã‚¯ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:204 msgid "Most changelog entries are ``bugfixes`` or ``minor_changes``." msgstr "ã»ã¨ã‚“ã©ã® changelog エントリーã¯ã€``bugfixes`` ã¾ãŸã¯ ``minor_changes`` ã§ã™ã€‚" #: ../../rst/community/development_process.rst:209 msgid "Changelog fragment entry format" msgstr "changelog フラグメントã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼å½¢å¼" #: ../../rst/community/development_process.rst:211 msgid "When writing a changelog entry, use the following format:" msgstr "changelog エントリーを作æˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:217 msgid "The scope is usually a module or plugin name or group of modules or plugins, for example, ``lookup plugins``. While module names can (and should) be mentioned directly (``foo_module``), plugin names should always be followed by the type (``foo inventory plugin``)." msgstr "範囲ã¯é€šå¸¸ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®åå‰ã€ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ (例: ``lookup plugins``)。モジュールåã¯ç›´æŽ¥è¨€åŠã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (ãã—ã¦è¨€åŠã™ã‚‹å¿…è¦ãŒã‚りã¾ã™) (``foo_module``) ãŒã€ãƒ—ラグインåã®å¾Œã«ã¯å¸¸ã«ã‚¿ã‚¤ãƒ—を追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (``foo inventory plugin``)。" #: ../../rst/community/development_process.rst:219 msgid "For changes that are not really scoped (for example, which affect a whole collection), use the following format:" msgstr "スコープ指定ロールãŒãªã„変更 (コレクション全体ã«å½±éŸ¿ã™ã‚‹ãªã©) ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:226 msgid "Here are some examples:" msgstr "以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:246 msgid "You can find more example changelog fragments in the `changelog directory `_ for the 2.11 release." msgstr "changelog フラグメントã®ä¾‹ã¯ã€2.11 リリース㮠`changelog ディレクトリー `_ ã«ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/community/development_process.rst:248 msgid "After you have written the changelog fragment for your PR, commit the file and include it with the pull request." msgstr "ãƒ—ãƒ«è¦æ±‚用㫠changelog フラグメントを作æˆã—ãŸã‚‰ã€ãƒ•ァイルをコミットã—ã€ãƒ—ãƒ«è¦æ±‚ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:253 msgid "Changelog fragment entry format for new jinja2 plugins, roles, and playbooks" msgstr "æ–°ã—ã„ jinja2 プラグインã€ãƒ­ãƒ¼ãƒ«ã€ãŠã‚ˆã³ Playbook ã®å¤‰æ›´ãƒ­ã‚° フラグメントエントリーã®å½¢å¼" #: ../../rst/community/development_process.rst:255 msgid "While new modules and plugins that are not jinja2 filter or test plugins are mentioned automatically in the generated changelog, jinja2 filter and test plugins, roles, and playbooks are not. To make sure they are mentioned, a changelog fragment in a specific format is needed:" msgstr "jinja2 フィルターã¾ãŸã¯ãƒ†ã‚¹ãƒˆãƒ—ラグインã§ã¯ãªã„æ–°ã—ã„モジュールãŠã‚ˆã³ãƒ—ラグインã¯ã€ç”Ÿæˆã•れãŸå¤‰æ›´ãƒ­ã‚°ã€jinja2 フィルターãŠã‚ˆã³ãƒ†ã‚¹ãƒˆãƒ—ラグインã€ãƒ­ãƒ¼ãƒ«ã€ãŠã‚ˆã³ Playbook ã«è‡ªå‹•çš„ã«è¨˜è¿°ã•れã¾ã™ã€‚記述ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€ç‰¹å®šã®å½¢å¼ã® changelog フラグメントãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/community/development_process.rst:300 msgid "Backporting merged PRs in ``ansible-core``" msgstr "``ansible-core`` ã«ãƒžãƒ¼ã‚¸ã•れãŸãƒ—ãƒ«è¦æ±‚ã®ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆ" #: ../../rst/community/development_process.rst:302 msgid "All ``ansible-core`` PRs must be merged to the ``devel`` branch first. After a pull request has been accepted and merged to the ``devel`` branch, the following instructions will help you create a pull request to backport the change to a previous stable branch." msgstr "``ansible-core`` ã®ãƒ—ãƒ«è¦æ±‚ã¯ã™ã¹ã¦ã€æœ€åˆã« ``devel`` ブランãƒã«ãƒžãƒ¼ã‚¸ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒ—ãƒ«è¦æ±‚ã‚’å—ã‘入れã¦ã€``devel`` ブランãƒã«ãƒžãƒ¼ã‚¸ã—ãŸå¾Œã€ä»¥ä¸‹ã®æ‰‹é †ã§ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ã€å¤‰æ›´ã‚’以å‰ã®å®‰å®šã—ãŸãƒ–ランãƒã«ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:304 msgid "We do **not** backport features." msgstr "機能ã®ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã¯ **行ã„ã¾ã›ã‚“**。" #: ../../rst/community/development_process.rst:308 msgid "These instructions assume that:" msgstr "ã“ã‚Œã‚‰ã®æ‰‹é †ã¯ã€ä»¥ä¸‹ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:310 msgid "``stable-2.11`` is the targeted release branch for the backport" msgstr "``stable-2.11`` ã¯ã€ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒªãƒªãƒ¼ã‚¹ãƒ–ランãƒã§ã™ã€‚" #: ../../rst/community/development_process.rst:311 msgid "``https://github.com/ansible/ansible.git`` is configured as a ``git remote`` named ``upstream``. If you do not use a ``git remote`` named ``upstream``, adjust the instructions accordingly." msgstr "``https://github.com/ansible/ansible.git`` ã¯ã€``upstream`` ã¨ã„ã†åå‰ã® ``git remote`` ã¨ã—ã¦è¨­å®šã•れã¾ã™ã€‚``upstream`` ã¨ã„ã†åå‰ã® ``git remote`` を使用ã—ãªã„å ´åˆã¯ã€é©åˆ‡ã«æ‰‹é †ã‚’調整ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:312 msgid "``https://github.com//ansible.git`` is configured as a ``git remote`` named ``origin``. If you do not use a ``git remote`` named ``origin``, adjust the instructions accordingly." msgstr "``https://github.com//ansible.git`` ã¯ã€``origin`` ã¨ã„ã†åå‰ã® ``git remote`` ã¨ã—ã¦è¨­å®šã•れã¾ã™ã€‚``origin`` ã¨ã„ã†åå‰ã® ``git remote`` を使用ã—ãªã„å ´åˆã¯ã€é©åˆ‡ã«æ‰‹é †ã‚’調整ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:314 msgid "Prepare your devel, stable, and feature branches:" msgstr "develã€stableã€ãŠã‚ˆã³ feature ã®ãƒ–ランãƒã‚’準備ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:321 msgid "Cherry pick the relevant commit SHA from the devel branch into your feature branch, handling merge conflicts as necessary:" msgstr "devel ブランãƒã‹ã‚‰é–¢é€£ã™ã‚‹ã‚³ãƒŸãƒƒãƒˆã® SHA を自身㮠feature ブランãƒã«é¸åˆ¥ã—ã¦ã€å¿…è¦ã«å¿œã˜ã¦ãƒžãƒ¼ã‚¸ã®ç«¶åˆã‚’処ç†ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:327 msgid "Add a :ref:`changelog fragment ` for the change, and commit it." msgstr "変更ã«ã¯ :ref:`changelog フラグメント ` を追加ã—ã€ã‚³ãƒŸãƒƒãƒˆã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:329 msgid "Push your feature branch to your fork on GitHub:" msgstr "feature ブランãƒã‚’ GitHub ã®ãƒ•ォークã«ãƒ—ッシュã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:335 msgid "Submit the pull request for ``backport/2.11/[PR_NUMBER_FROM_DEVEL]`` against the ``stable-2.11`` branch" msgstr "``stable-2.11`` ブランãƒã«ã€``backport/2.11/[PR_NUMBER_FROM_DEVEL]`` ã®ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:337 msgid "The Release Manager will decide whether to merge the backport PR before the next minor release. There isn't any need to follow up. Just ensure that the automated tests (CI) are green." msgstr "次ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¾ã§ã«ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã®ãƒ—ãƒ«è¦æ±‚をマージã™ã‚‹ã‹ã©ã†ã‹ã¯ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒåˆ¤æ–­ã—ã¾ã™ã€‚フォローアップã®å¿…è¦ã¯ã‚りã¾ã›ã‚“。自動テスト (CI) ã«å•題ãŒç™ºç”Ÿã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã™ã‚‹ã ã‘ã§ã™ã€‚" #: ../../rst/community/development_process.rst:341 msgid "The branch name ``backport/2.11/[PR_NUMBER_FROM_DEVEL]`` is somewhat arbitrary, but conveys meaning about the purpose of the branch. This branch name format is not required, but it can be helpful, especially when making multiple backport PRs for multiple stable branches." msgstr "ブランãƒå ``backport/2.11/[PR_NUMBER_FROM_DEVEL]`` ã¯ã‚„ã‚„æ£æ„çš„ã§ã™ãŒã€ãƒ–ランãƒã®ç›®çš„ã«ã¤ã„ã¦ã®æ„味をä¼ãˆã¾ã™ã€‚ã“ã®ãƒ–ランãƒåã®å½¢å¼ã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ç‰¹ã«è¤‡æ•°ã®å®‰å®šã—ãŸãƒ–ランãƒã«å¯¾ã—ã¦è¤‡æ•°ã®ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆãƒ—ãƒ«è¦æ±‚を作æˆã™ã‚‹å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/community/development_process.rst:345 msgid "If you prefer, you can use CPython's cherry-picker tool (``pip install --user 'cherry-picker >= 1.3.2'``) to backport commits from devel to stable branches in Ansible. Take a look at the `cherry-picker documentation `_ for details on installing, configuring, and using it." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€CPython ã® cherry-picker ツール (``pip install --user 'cherry-picker >= 1.3.2'``) を使用ã—ã¦ã€Ansible ã® devel ã‹ã‚‰å®‰å®šã—ãŸãƒ–ランãƒã¸ã®ã‚³ãƒŸãƒƒãƒˆã‚’ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚インストールã€è¨­å®šã€ãŠã‚ˆã³ä½¿ç”¨æ–¹æ³•ã®è©³ç´°ã¯ã€ã€Œ`cherry-picker ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:5 msgid "Contributing to the Ansible Documentation" msgstr "Ansible ドキュメントã¸ã®è²¢çŒ®" #: ../../rst/community/documentation_contributions.rst:7 msgid "Ansible has a lot of documentation and a small team of writers. Community support helps us keep up with new features, fixes, and changes." msgstr "Ansible ã§ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå¤šæ•°æä¾›ã•れã¦ã„ã¾ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹ãƒãƒ¼ãƒ ã¯å°è¦æ¨¡ã§ã™ã€‚新機能ã€ä¿®æ­£ã€ãŠã‚ˆã³å¤‰æ›´ã®æƒ…å ±ã‚’å¸¸ã«æœ€æ–°ã«ä¿ã¤ã«ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã«ã‚ˆã‚‹ã‚µãƒãƒ¼ãƒˆãŒé‡è¦ã§ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:9 msgid "Improving the documentation is an easy way to make your first contribution to the Ansible project. You do not have to be a programmer, since most of our documentation is written in YAML (module documentation) or `reStructuredText `_ (rST). Some collection-level documentation is written in a subset of `Markdown `_. If you are using Ansible, you already use YAML in your playbooks. rST and Markdown are mostly just text. You do not even need git experience, if you use the ``Edit on GitHub`` option." msgstr "ドキュメントã¸ã®æ”¹å–„ã¯ã€Ansible プロジェクトã¸ã®æœ€åˆã®è²¢çŒ®ã¨ã—ã¦é©ã—ã¦ã„ã¾ã™ã€‚本ガイドã®å¤§éƒ¨åˆ†ã¯ YAML (モジュールドキュメント) ã¾ãŸã¯ `reStructuredText `_ (rST) ã§è¨˜è¿°ã•れã¦ã„ã‚‹ãŸã‚ã€è²¢çŒ®è€…ãŒãƒ—ログラマーã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。コレクションレベルã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ä¸€éƒ¨ã¯ã€`マークダウン `_ ã®ã‚µãƒ–セットã«è¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚Ansible を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€Playbook ã§ã™ã§ã« YAML を使用ã—ã¦ã„ã¾ã™ã€‚ãã—ã¦ã€rST ãŠã‚ˆã³ Markdown ã¯ã»ã¨ã‚“ã©ãŒãƒ†ã‚­ã‚¹ãƒˆã§ã™ã€‚``Edit on GitHub`` オプションを使用ã™ã‚Œã°ã€git ã®çµŒé¨“ã‚‚å¿…è¦ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/community/documentation_contributions.rst:11 msgid "If you find a typo, a broken example, a missing topic, or any other error or omission on this documentation website, let us know. Here are some ways to support Ansible documentation:" msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã® Web サイトã§ã€ã‚¿èª¤å­—ã‚„ä¸å‚™ã®ã‚ã‚‹ä¾‹ã€æ¬ è½ã—ã¦ã„るトピックã€ã¾ãŸã¯ãã®ä»–ã®ã‚¨ãƒ©ãƒ¼ã‚„çœç•¥ã‚’見ã¤ã‘ãŸã‚‰ã”連絡ãã ã•ã„。Ansible ドキュメントをサãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:17 msgid "Editing docs directly on GitHub" msgstr "GitHub ã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’直接編集" #: ../../rst/community/documentation_contributions.rst:19 msgid "For typos and other quick fixes, you can edit most of the documentation right from the site. Look at the top right corner of this page. That ``Edit on GitHub`` link is available on all the guide pages in the documentation. If you have a GitHub account, you can submit a quick and easy pull request this way." msgstr "入力ミスやãã®ä»–ã®ç°¡å˜ãªä¿®æ­£ã¯ã€ã‚µã‚¤ãƒˆã‹ã‚‰ç›´æŽ¥ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’編集ã§ãã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã®å³ä¸Šã‚’見ã¦ãã ã•ã„。``Edit on GitHub`` リンクã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå†…ã®ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã§åˆ©ç”¨ã§ãã¾ã™ã€‚GitHub アカウントãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®æ–¹æ³•ã§è¿…速ã‹ã¤ç°¡å˜ãªãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã§ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:23 msgid "The source files for individual collection plugins exist in their respective repositories. Follow the link to the collection on Galaxy to find where the repository is located and any guidelines on how to contribute to that collection." msgstr "個別ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã®ã‚½ãƒ¼ã‚¹ãƒ•ァイルãŒãれãžã‚Œã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«å­˜åœ¨ã—ã¾ã™ã€‚Galaxy 上ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ãƒªãƒ³ã‚¯ã«å¾“ã„ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®å ´æ‰€ã¨ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®è²¢çŒ®æ–¹æ³•を確èªã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:25 msgid "To submit a documentation PR from docs.ansible.com with ``Edit on GitHub``:" msgstr "``Edit on GitHub`` ã§ docs.ansible.com ã‹ã‚‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ PR ã‚’é€ä¿¡ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:27 msgid "Click on ``Edit on GitHub``." msgstr "``Edit on GitHub`` をクリックã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:28 msgid "If you don't already have a fork of the ansible repo on your GitHub account, you'll be prompted to create one." msgstr "GitHub アカウント㧠ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ•ォークを所有ã—ã¦ã„ãªã„å ´åˆã¯ã€ä½œæˆã™ã‚‹ã‚ˆã†ã«ä¿ƒã•れã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:29 msgid "Fix the typo, update the example, or make whatever other change you have in mind." msgstr "タイプミスを修正ã—ãŸã‚Šã€ä¾‹æ–‡ã‚’æ›´æ–°ã—ãŸã‚Šã€ãã®ä»–ã®å¤‰æ›´ã‚’加ãˆãŸã‚Šã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:30 msgid "Enter a commit message in the first rectangle under the heading ``Propose file change`` at the bottom of the GitHub page. The more specific, the better. For example, \"fixes typo in my_module description\". You can put more detail in the second rectangle if you like. Leave the ``+label: docsite_pr`` there." msgstr "GitHub ページã®ä¸€ç•ªä¸‹ã«ã‚ã‚‹ ``Propose file change`` ã¨ã„ã†è¦‹å‡ºã—ã®ä¸‹ã«ã‚る最åˆã®å››è§’ã„部分ã«ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’入力ã—ã¾ã™ã€‚ã‚ˆã‚Šå…·ä½“çš„ãªæ–¹ãŒæœ›ã¾ã—ã„ã§ã™ã€‚ãŸã¨ãˆã°ã€Œfixes typo in my_module description (my_module ã®èª¬æ˜Žã«ã‚るタイãƒã‚’修正)ã€ã¨ã„ã£ãŸå…·åˆã§ã™ã€‚2 ã¤ã®ç›®ã®å››è§’ã„部分ã«è©³ç´°ã‚’記入ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã“ã§ã€``+label: docsite_pr`` ã¯ãã®ã¾ã¾ã«ã—ã¦ãŠãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:31 msgid "Submit the suggested change by clicking on the green \"Propose file change\" button. GitHub will handle branching and committing for you, and open a page with the heading \"Comparing Changes\"." msgstr "緑色ã®ã€ŒPropose file changeã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ã€ææ¡ˆã™ã‚‹å¤‰æ›´ã‚’é€ä¿¡ã—ã¾ã™ã€‚GitHub ãŒãƒ–ランãƒã‚’作æˆã—ã¦ã‚³ãƒŸãƒƒãƒˆã‚’行ã„ã€ã€ŒComparing Changesã€ã¨ã„ã†è¦‹å‡ºã—ã®ãƒšãƒ¼ã‚¸ãŒé–‹ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:32 msgid "Click on ``Create pull request`` to open the PR template." msgstr "``Create pull request`` をクリックã—㦠PR テンプレートを開ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:33 msgid "Fill out the PR template, including as much detail as appropriate for your change. You can change the title of your PR if you like (by default it's the same as your commit message). In the ``Issue Type`` section, delete all lines except the ``Docs Pull Request`` line." msgstr "PR テンプレートã«ã¯ã€å¤‰æ›´ã«é©ã—ãŸè©³ç´°ãªã©ã‚’記入ã—ã¾ã™ã€‚PR ã®ã‚¿ã‚¤ãƒˆãƒ«ã¯ã€å¿…è¦ã«å¿œã˜ã¦å¤‰æ›´ã§ãã¾ã™ (デフォルトã§ã¯ã€ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨åŒã˜ã‚¿ã‚¤ãƒˆãƒ«ã«ãªã£ã¦ã„ã¾ã™)。``Issue Type`` セクションã§ã€``Docs Pull Request`` 行を除ãã™ã¹ã¦ã®è¡Œã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:34 msgid "Submit your change by clicking on ``Create pull request`` button." msgstr "``Create pull request`` ボタンをクリックã—ã¦ã€å¤‰æ›´å†…容をé€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:35 msgid "Be patient while Ansibot, our automated script, adds labels, pings the docs maintainers, and kicks off a CI testing run." msgstr "Ansibot ã¨ã„ã†åå‰ã®è‡ªå‹•スクリプトãŒãƒ©ãƒ™ãƒ«ã‚’追加ã—ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«é€šçŸ¥ã‚’é€ã‚Šã€CI テストãŒé–‹å§‹ã•れるã®ã‚’ãŠå¾…ã¡ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:36 msgid "Keep an eye on your PR - the docs team may ask you for changes." msgstr "é€ä¿¡ã—㟠PR ã«æ³¨æ„を払ã„ç¶šã‘ã¦ãã ã•ã„。ドキュメントãƒãƒ¼ãƒ ã‹ã‚‰å¤‰æ›´ã‚’ä¾é ¼ã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:39 msgid "Reviewing open PRs and issues" msgstr "PR ãŠã‚ˆã³å•題ã®ç¢ºèª" #: ../../rst/community/documentation_contributions.rst:41 #, python-format msgid "You can also contribute by reviewing open documentation `issues `_ and `PRs `_. To add a helpful review, please:" msgstr "é–‹ã„ã¦ã„るドキュメント㮠`å•題 (issue) `_ ãŠã‚ˆã³ `ãƒ—ãƒ«è¦æ±‚ `_ を確èªã™ã‚‹ã“ã¨ã§è²¢çŒ®ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚å½¹ã«ç«‹ã¤ãƒ¬ãƒ“ューを追加ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:43 msgid "Include a comment - \"looks good to me\" only helps if we know why." msgstr "「looks good to me (ç§ã«ã¯è‰¯ã•ãã†ã«è¦‹ãˆã‚‹)ã€ã¨ã„ã†ã‚³ãƒ¡ãƒ³ãƒˆã¯ã€ä»–ã®äººã«ã‚‚ãã®ç†ç”±ãŒæ˜Žã‚‰ã‹ãªå ´åˆã«ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:44 msgid "For issues, reproduce the problem." msgstr "å•題ã«ã¤ã„ã¦ã¯ã€å•題をå†ç¾ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:45 msgid "For PRs, test the change." msgstr "ãƒ—ãƒ«è¦æ±‚ã«ã¤ã„ã¦ã¯ã€å¤‰æ›´ã‚’テストã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:48 msgid "Opening a new issue and/or PR" msgstr "æ–°ã—ã„å•題ã¾ãŸã¯ PR ã‚’é–‹ã" #: ../../rst/community/documentation_contributions.rst:50 msgid "If the problem you have noticed is too complex to fix with the ``Edit on GitHub`` option, and no open issue or PR already documents the problem, please open an issue and/or a PR on the correct underlying repo - ``ansible/ansible`` for most pages that are not plugin or module documentation. If the documentation page has no ``Edit on GitHub`` option, check if the page is for a module within a collection. If so, follow the link to the collection on Galaxy and select the ``repo`` button in the upper right corner to find the source repository for that collection and module. The Collection README file should contain information on how to contribute to that collection, or report issues." msgstr "æ°—ã¥ã„ãŸå•題ãŒè¤‡é›‘ã™ãŽã¦ ``Edit on GitHub`` オプションã§ã¯ä¿®æ­£ã§ããšã€ãã®å•題ãŒå ±å‘Šã•れã¦ã„ãªã‹ã£ãŸã‚Šã€ãƒ—ãƒ«è¦æ±‚ãŒä½œæˆã•れã¦ã„ãªã„å ´åˆã¯ã€æ­£ã—ã„基盤ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§å•題ã¾ãŸã¯ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ãã ã•ã„ (プラグインやモジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä»¥å¤–ã®ã»ã¨ã‚“ã©ã®ãƒšãƒ¼ã‚¸ã«ã¤ã„ã¦ã¯ã€``ansible/ansible`` ã§å•題ã¾ãŸã¯ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ãã ã•ã„)。ドキュメントページ㫠``Edit on GitHub`` オプションãŒãªã„å ´åˆã¯ã€ãã®ãƒšãƒ¼ã‚¸ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç”¨ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚ãã®å ´åˆã¯ã€Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ãƒªãƒ³ã‚¯ã«å¾“ã„ã€å³ä¸Šéš…ã® ``repo`` ãƒœã‚¿ãƒ³ã‚’é¸æŠžã—ã¦ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’見ã¤ã‘ã¦ãã ã•ã„。コレクション README ファイルã«ã¯ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®è²¢çŒ®æ–¹æ³•ã€ã¾ãŸã¯å•題を報告ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:52 msgid "A great documentation GitHub issue or PR includes:" msgstr "GitHub ã®å•題や PR ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªå†…容を追加ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:54 msgid "a specific title" msgstr "特定ã®ã‚¿ã‚¤ãƒˆãƒ«" #: ../../rst/community/documentation_contributions.rst:55 msgid "a detailed description of the problem (even for a PR - it's hard to evaluate a suggested change unless we know what problem it's meant to solve)" msgstr "å•題ã®è©³ç´°ãªèª¬æ˜Ž (何ãŒå•題ãªã®ã‹åˆ†ã‹ã‚‰ãªã„ã¨å¤‰æ›´æ¡ˆã®è©•価ãŒå›°é›£ã«ãªã‚‹ãŸã‚ã€ãƒ—ãƒ«è¦æ±‚ã®å ´åˆã§ã‚‚åŒæ§˜)" #: ../../rst/community/documentation_contributions.rst:56 msgid "links to other information (related issues/PRs, external documentation, pages on docs.ansible.com, and so on)" msgstr "ãã®ä»–ã®æƒ…å ± (関連ã™ã‚‹å•é¡Œã‚„ãƒ—ãƒ«è¦æ±‚ã€å¤–部ドキュメントã€docs.ansible.com ã®ãƒšãƒ¼ã‚¸ãªã©) ã¸ã®ãƒªãƒ³ã‚¯" #: ../../rst/community/documentation_contributions.rst:60 msgid "Verifying your documentation PR" msgstr "ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ—ãƒ«è¦æ±‚ã®ç¢ºèª" #: ../../rst/community/documentation_contributions.rst:62 msgid "If you make multiple changes to the documentation on ``ansible/ansible``, or add more than a line to it, before you open a pull request, please:" msgstr "``ansible/ansible`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¤‡æ•°ã®å¤‰æ›´ã‚’加ãˆãŸã‚Šã€è¤‡æ•°ã®è¡Œã‚’追加ã—ãŸã‚Šã™ã‚‹å ´åˆã¯ã€ãƒ—ãƒ«è¦æ±‚ã‚’é–‹å§‹ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:64 msgid "Check that your text follows our :ref:`style_guide`." msgstr "記述ã—ãŸå†…容ãŒã€:ref:`style_guide` ã«å¾“ã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:65 msgid "Test your changes for rST errors." msgstr "変更ã—ãŸå†…容㌠rST ã®ã‚¨ãƒ©ãƒ¼ã«ãªã£ã¦ã„ãªã„ã‹ãƒ†ã‚¹ãƒˆã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:66 msgid "Build the page, and preferably the entire documentation site, locally." msgstr "ページã€ã§ãれã°ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µã‚¤ãƒˆå…¨ä½“をローカルã§ãƒ“ルドã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:70 msgid "The following sections apply to documentation sourced from the ``ansible/ansible`` repo and does not apply to documentation from an individual collection. See the collection README file for details on how to contribute to that collection." msgstr "以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€``ansible/ansible`` リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰å–å¾—ã—ãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«é©ç”¨ã•れã€å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯é©ç”¨ã•れã¾ã›ã‚“。ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®è²¢çŒ®æ–¹æ³•ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® README ファイルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:73 msgid "Setting up your environment to build documentation locally" msgstr "ローカルã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ビルドã™ã‚‹ãŸã‚ã®ç’°å¢ƒè¨­å®š" #: ../../rst/community/documentation_contributions.rst:75 msgid "To build documentation locally, ensure you have a working :ref:`development environment `." msgstr "ローカルã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ビルドã™ã‚‹ã«ã¯ã€:ref:`開発環境 ` ãŒæœ‰åйã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:77 msgid "To work with documentation on your local machine, you need to have python-3.5 or greater and install the `Ansible dependencies`_ and `documentation dependencies`_, which are listed in two :file:`requirements.txt` files to make installation easier:" msgstr "ローカルマシンã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’使用ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’容易ã«ã™ã‚‹ãŸã‚ã«ã€python-3.5 以é™ã‚’使用ã—ã€2 ã¤ã® :file:`requirements.txt` ファイルã«è¨˜è¼‰ã•れã¦ã„ã‚‹ `Ansible dependencies`_ ãŠã‚ˆã³ `documentation dependencies`_ をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:87 msgid "The :file:`docs/docsite/requirements.txt` file allows a wide range of versions and may install new releases of required packages. New releases of these packages may cause problems with the Ansible docs build. If you want to install tested versions of these dependencies, use :file:`docs/docsite/known_good_reqs.txt` instead:" msgstr ":file:`docs/docsite/requirements.txt` ファイルã«ã‚ˆã‚Šã€å¹…広ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã§ãã€å¿…è¦ãªãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ–°ã—ã„リリースをインストールã§ãã¾ã™ã€‚ã“れらã®ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ–°è¦ãƒªãƒªãƒ¼ã‚¹ã‚’インストールã™ã‚‹ã¨ã€Ansible ドキュメントã®ãƒ“ルドã§å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れらã®ä¾å­˜é–¢ä¿‚ã®ãƒ†ã‚¹ãƒˆæ¸ˆã¿ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã¯ã€ä»£ã‚り㫠:file:`docs/docsite/known_good_reqs.txt` を使用ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:94 msgid "You can drop ``--user`` if you have set up a virtual environment (venv/virtenv)." msgstr "仮想環境 (venv/virtenv) を設定ã—ã¦ã„ã‚‹å ´åˆã¯ã€``--user`` を削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:98 msgid "You may need to install these general pre-requisites separately on some systems: - ``gcc`` - ``libyaml`` - ``make`` - ``pyparsing`` - ``six`` On macOS with Xcode, you may need to install ``six`` and ``pyparsing`` with ``--ignore-installed`` to get versions that work with ``sphinx``." msgstr "ã“れらã®ä¸€èˆ¬çš„ãªå‰ææ¡ä»¶ã‚’ã€ä¸€éƒ¨ã®ã‚·ã‚¹ãƒ†ãƒ ã«å€‹åˆ¥ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ ( - ``gcc`` - ``libyaml`` - ``make`` - ``pyparsing`` - ``six``) Xcode を使用ã™ã‚‹ macOS ã§ã¯ã€``--ignore-installed`` ã§ ``six`` ãŠã‚ˆã³ ``pyparsing`` を使用ã—ã¦ã€``sphinx`` ã¨é€£æºã™ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:108 msgid "After checking out ``ansible/ansible``, make sure the ``docs/docsite/rst`` directory has strict enough permissions. It should only be writable by the owner's account. If your default ``umask`` is not 022, you can use ``chmod go-w docs/docsite/rst`` to set the permissions correctly in your new branch. Optionally, you can set your ``umask`` to 022 to make all newly created files on your system (including those created by ``git clone``) have the correct permissions." msgstr "``ansible/ansible`` ã‚’ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã—ãŸã‚‰ã€``docs/docsite/rst`` ディレクトリーã«å分ãªãƒ‘ーミッションãŒä»˜ä¸Žã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚所有者ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ã¿ãŒæ›¸ãè¾¼ã¿å¯èƒ½ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。デフォルト㮠``umask`` ㌠022 ã§ã¯ãªã„å ´åˆã¯ã€``chmod go-w docs/docsite/rst`` を使用ã—ã¦æ–°è¦ãƒ–ランãƒã«ãƒ‘ーミッションを正ã—ã設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€``umask`` ã‚’ 022 ã«è¨­å®šã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ã§æ–°ã«ä½œæˆã•れるã™ã¹ã¦ã®ãƒ•ァイル (``git clone`` ãŒä½œæˆã—ãŸãƒ•ァイルをå«ã‚€) ã«æ­£ã—ã„パーミッションを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:113 msgid "Testing the documentation locally" msgstr "ドキュメントã®ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/community/documentation_contributions.rst:115 msgid "To test an individual file for rST errors:" msgstr "rST エラーã«å¯¾ã—ã¦å€‹åˆ¥ã®ãƒ•ァイルをテストã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:122 msgid "Building the documentation locally" msgstr "ローカルã§ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ“ルド" #: ../../rst/community/documentation_contributions.rst:124 msgid "Building the documentation is the best way to check for errors and review your changes. Once `rstcheck` runs with no errors, navigate to ``ansible/docs/docsite`` and then build the page(s) you want to review." msgstr "ドキュメントã®ãƒ“ルドã¯ã€ã‚¨ãƒ©ãƒ¼ã¨å¤‰æ›´ã‚’確èªã™ã‚‹ã®ã«æœ€é©ãªæ–¹æ³•ã§ã™ã€‚エラーãªã—ã§ `rstcheck` を実行ã—ãŸã‚‰ã€``ansible/docs/docsite`` ã«ç§»å‹•ã—ã€ç¢ºèªã™ã‚‹ãƒšãƒ¼ã‚¸ã‚’ビルドã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:128 msgid "If building on macOS with Python 3.8 or later, you must use Sphinx >= 2.2.2. See `#6803 `_ for details." msgstr "Python 3.8以é™ã‚’使用ã—ã¦macOSã§ãƒ“ルドã™ã‚‹å ´åˆã¯ã€Sphinx> = 2.2.2を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€`#6803 `_ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:133 msgid "Building a single rST page" msgstr "å˜ä¸€ã® rST ページã®ãƒ“ルド" #: ../../rst/community/documentation_contributions.rst:135 msgid "To build a single rST file with the make utility:" msgstr "make ユーティリティーã§å˜ä¸€ã® RST ファイルをビルドã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:141 #: ../../rst/community/documentation_contributions.rst:194 msgid "For example:" msgstr "例:" #: ../../rst/community/documentation_contributions.rst:147 msgid "This process compiles all the links but provides minimal log output. If you're writing a new page or want more detailed log output, refer to the instructions on :ref:`build_with_sphinx-build`" msgstr "ã“ã®ãƒ—ロセスã¯ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ã‚’コンパイルã—ã¾ã™ãŒã€ãƒ­ã‚°å‡ºåŠ›ã¯æœ€å°é™ã«ãªã‚Šã¾ã™ã€‚æ–°ã—ã„ページを作æˆã™ã‚‹å ´åˆã‚„ã€ã‚ˆã‚Šè©³ç´°ãªãƒ­ã‚°å‡ºåŠ›ãŒå¿…è¦ãªå ´åˆã¯ã€ã€Œ:ref:`build_with_sphinx-build`ã€ã®æ‰‹é †ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:151 msgid "``make htmlsingle`` adds ``rst/`` to the beginning of the path you provide in ``rst=``, so you can't type the filename with autocomplete. Here are the error messages you will see if you get this wrong:" msgstr "``make htmlsingle`` ã¯ã€``rst=`` ã§æä¾›ã•れるパスã®å…ˆé ­ã« ``rst/`` を追加ã™ã‚‹ãŸã‚ã€è‡ªå‹•補完ã§ãƒ•ァイルåを入力ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ã“れãŒé–“é•ã£ã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:153 msgid "If you run ``make htmlsingle`` from the ``docs/docsite/rst/`` directory: ``make: *** No rule to make target `htmlsingle'. Stop.``" msgstr "``docs/docsite/rst/`` ディレクトリーã‹ã‚‰ ``make htmlsingle`` を実行ã—ãŸå ´åˆã¯ã€``make: *** No rule to make target `htmlsingle'. Stop.`` メッセージãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:154 msgid "If you run ``make htmlsingle`` from the ``docs/docsite/`` directory with the full path to your rST document: ``sphinx-build: error: cannot find files ['rst/rst/community/documentation_contributions.rst']``." msgstr "rST ドキュメントã¸ã®å®Œå…¨ãƒ‘スを使用ã—㦠``docs/docsite/`` ディレクトリーã‹ã‚‰ ``make htmlsingle`` を実行ã—ãŸå ´åˆã¯ã€``sphinx-build: error: cannot find files ['rst/rst/community/documentation_contributions.rst']`` メッセージãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:158 msgid "Building all the rST pages" msgstr "ã™ã¹ã¦ã® rST ページã®ãƒ“ルド" #: ../../rst/community/documentation_contributions.rst:160 msgid "To build all the rST files without any module documentation:" msgstr "モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä»¥å¤–ã®ã™ã¹ã¦ã® rST ファイルをビルドã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:167 msgid "Building module docs and rST pages" msgstr "モジュールドキュメント㨠rST ページã®ãƒ“ルド" #: ../../rst/community/documentation_contributions.rst:169 msgid "To build documentation for a few modules included in ``ansible/ansible`` plus all the rST files, use a comma-separated list:" msgstr "``ansible/ansible`` ã«å«ã¾ã‚Œã‚‹ã„ãã¤ã‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã™ã¹ã¦ã® rST ファイルを使用ã—ã¦ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ビルドã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:175 msgid "To build all the module documentation plus all the rST files:" msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ã™ã¹ã¦ã® rST ファイルをビルドã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:184 msgid "Building rST files with ``sphinx-build``" msgstr "``sphinx-build`` ã§ rST ファイルã®ãƒ“ルド" #: ../../rst/community/documentation_contributions.rst:186 msgid "Advanced users can build one or more rST files with the sphinx utility directly. ``sphinx-build`` returns misleading ``undefined label`` warnings if you only build a single page, because it does not create internal links. However, ``sphinx-build`` returns more extensive syntax feedback, including warnings about indentation errors and ``x-string without end-string`` warnings. This can be useful, especially if you're creating a new page from scratch. To build a page or pages with ``sphinx-build``:" msgstr "上級ユーザーã¯ã€sphinx ユーティリティーを直接使用ã—㦠1 ã¤ä»¥ä¸Šã® rST ファイルをビルドã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``sphinx-build`` ã¯ã€å†…部リンクãŒä½œæˆã•れãªã„ãŸã‚ã€1 ページã®ã¿ã‚’ビルドã™ã‚‹å ´åˆã¯ã€èª¤è§£ã‚’æ‹›ã ``undefined label`` 警告を返ã—ã¾ã™ã€‚ãŸã ã—ã€``sphinx-build`` ã¯ã€ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã‚¨ãƒ©ãƒ¼ã‚„ ``x-string without end-string`` 警告ãªã©ã€ã‚ˆã‚Šåºƒç¯„ãªæ§‹æ–‡ã®ãƒ•ィードãƒãƒƒã‚¯ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ç‰¹ã«ã€ã‚¼ãƒ­ã‹ã‚‰æ–°ã—ã„ページを作æˆã—ã¦ã„ã‚‹å ´åˆã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚``sphinx-build`` ã§ãƒšãƒ¼ã‚¸ã‚’ビルドã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:192 msgid "You can specify filenames, or ``–a`` for all files, or omit both to compile only new/changed files." msgstr "ファイルåを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€ã™ã¹ã¦ã®ãƒ•ァイル㫠``–a`` を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã‚‚ã—ãã¯ã€ä¸¡æ–¹ã‚’çœç•¥ã—ã¦æ–°ã—ã„ã¾ãŸã¯å¤‰æ›´ã•れãŸãƒ•ァイルã ã‘をコンパイルã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:201 msgid "Running the final tests" msgstr "最終テストã®å®Ÿè¡Œ" #: ../../rst/community/documentation_contributions.rst:203 msgid "When you submit a documentation pull request, automated tests are run. Those same tests can be run locally. To do so, navigate to the repository's top directory and run:" msgstr "ドキュメントã®ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã™ã‚‹ã¨ã€è‡ªå‹•テストãŒå®Ÿè¡Œã—ã¾ã™ã€‚åŒã˜ãƒ†ã‚¹ãƒˆã‚’ローカルã§å®Ÿè¡Œã§ãã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®æœ€ä¸Šä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç§»å‹•ã—ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/community/documentation_contributions.rst:211 msgid "Unfortunately, leftover rST-files from previous document-generating can occasionally confuse these tests. It is therefore safest to run them on a clean copy of the repository, which is the purpose of ``make clean``. If you type these three lines one at a time and manually check the success of each, you do not need the ``&&``." msgstr "ãŸã ã—ã€ä»¥å‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’生æˆã—ãŸæ™‚ã® rST ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ®‹ã£ã¦ã„ã‚‹ã¨ã€ã“ã®ãƒ†ã‚¹ãƒˆã‚’æ··ä¹±ã•ã›ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ãã®ãŸã‚ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒªãƒ¼ãƒ³ã‚³ãƒ”ー上ã§å®Ÿè¡Œã™ã‚‹ã®ãŒæœ€ã‚‚安全ã§ã™ã€‚ã“れãŒã€``make clean`` ã®ç›®çš„ã§ã‚‚ã‚りã¾ã™ã€‚ã“ã® 3 ã¤ã®è¡Œã‚’一度㫠1 行ãšã¤å…¥åŠ›ã—ã¦ã€å„è¡ŒãŒæˆåŠŸã—ãŸã“ã¨ã‚’手動ã§ç¢ºèªã™ã‚‹å ´åˆã€``&&`` ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/community/documentation_contributions.rst:214 msgid "Joining the documentation working group" msgstr "ドキュメントワーキンググループã¸ã®å‚加" #: ../../rst/community/documentation_contributions.rst:216 msgid "The Documentation Working Group (DaWGs) meets weekly on Tuesdays in the Docs chat (using `Matrix `_ or using IRC at `irc.libera.chat `_). For more information, including links to our agenda and a calendar invite, please visit the `working group page in the community repo `_." msgstr "ドキュメントワーキンググループ (DaWGs)ã¯ã€Docs ãƒãƒ£ãƒƒãƒˆã§ã€æ¯Žé€±ç«æ›œæ—¥ã«é›†ã¾ã£ã¦ã„ã¾ã™(`Matrix `_ã¾ãŸã¯`irc.libera.chat `_ã®IRCを使用)。議題ã¸ã®ãƒªãƒ³ã‚¯ã‚„ã€ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®æ‹›å¾…状ãªã©ã®è©³ç´°ã¯ã€ã€Œ`working group page in the community repo `_ã€ã‚’ã”覧ãã ã•ã„。" #: ../../rst/community/documentation_contributions.rst:219 msgid ":ref:`More about testing module documentation `" msgstr ":ref:`More about testing module documentation `" #: ../../rst/community/documentation_contributions.rst:221 msgid ":ref:`More about documenting modules `" msgstr ":ref:`モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–ã®è©³ç´° `" #: ../../rst/community/github_admins.rst:5 msgid "GitHub Admins" msgstr "GitHub 管ç†è€…" #: ../../rst/community/github_admins.rst:9 msgid "GitHub Admins have more permissions on GitHub than normal contributors or even committers. There are a few responsibilities that come with that increased power." msgstr "GitHub 管ç†è€…ã«ã¯ã€é€šå¸¸ã®è²¢çŒ®è€…ã‚„ã€ã‚³ãƒŸãƒƒãƒˆã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚ˆã‚Šã‚‚多ãã®æ¨©é™ãŒä»˜ä¸Žã•れã¦ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«æ¨©é™ã®å¢—加ã«ä¼´ã„ã€ã„ãã¤ã‹ã®è²¬ä»»ãŒç™ºç”Ÿã—ã¾ã™" #: ../../rst/community/github_admins.rst:14 msgid "Adding and removing committers" msgstr "コミットを行ã†ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¿½åŠ ãŠã‚ˆã³å‰Šé™¤" #: ../../rst/community/github_admins.rst:16 msgid "The Ansible Team will periodically review who is actively contributing to Ansible to grant or revoke contributors' ability to commit on their own. GitHub Admins are the people who have the power to actually manage the GitHub permissions." msgstr "Ansible ãƒãƒ¼ãƒ ã¯ã€èª°ãŒ Ansible ã«ç©æ¥µçš„ã«è²¢çŒ®ã—ã¦ã„ã‚‹ã‹ã‚’定期的ã«ç¢ºèªã—ã¦ã€è²¢çŒ®è€…ã®ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’許å¯ã—ãŸã‚Šå–り消ã—ãŸã‚Šã—ã¾ã™ã€‚GitHub 管ç†è€…ã¯ã€GitHub パーミッションを実際ã«ç®¡ç†ã™ã‚‹æ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚" #: ../../rst/community/github_admins.rst:22 msgid "Changing branch permissions for releases" msgstr "リリースã®ãƒ–ランãƒãƒ‘ーミッションã®å¤‰æ›´" #: ../../rst/community/github_admins.rst:24 msgid "When we make releases we make people go through a :ref:`release_managers` to push commits to that branch. The GitHub admins are responsible for setting the branch so only the Release Manager can commit to the branch when the release process reaches that stage and later opening the branch once the release has been made. The Release manager will let the GitHub Admin know when this needs to be done." msgstr "リリースを行ã†å ´åˆã¯ã€:ref:`release_managers` ã«æ²¿ã£ã¦ã€ãã®ãƒ–ランãƒã¸ã®ã‚³ãƒŸãƒƒãƒˆã‚’プッシュã—ã¾ã™ã€‚GitHub 管ç†è€…ã«ã¯ã€ãƒªãƒªãƒ¼ã‚¹ãƒ—ロセスãŒãã®æ®µéšŽã«é”ã—ãŸã¨ãã«ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã ã‘ãŒãƒ–ランãƒã«ã‚³ãƒŸãƒƒãƒˆã§ãるよã†ã«ãƒ–ランãƒã‚’設定ã—ã€ãƒªãƒªãƒ¼ã‚¹ãŒå®Œäº†ã—ãŸå¾Œã«ãƒ–ランãƒã‚’é–‹ã責任ãŒã‚りã¾ã™ã€‚ã“ã®è¨­å®šãŒå¿…è¦ã«ãªã‚‹ã¨ã€ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒ GitHub 管ç†è€…ã«çŸ¥ã‚‰ã›ã¾ã™ã€‚" #: ../../rst/community/github_admins.rst:30 msgid "The `GitHub Admin Process Docs `_ for instructions on how to change branch permissions." msgstr "ブランãƒãƒ‘ーミッションを変更ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ`GitHub Admin Process Docs `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:5 msgid "How can I help?" msgstr "貢献方法" #: ../../rst/community/how_can_I_help.rst:10 msgid "Thanks for being interested in helping the Ansible project!" msgstr "Ansible プロジェクトを支æ´ã™ã‚‹ã“ã¨ã«é–¢å¿ƒã‚’ãŠå¯„ã›ã„ãŸã ãã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:12 msgid "There are many ways to help the Ansible project...but first, please read and understand the :ref:`code_of_conduct`." msgstr "Ansible プロジェクトを支æ´ã™ã‚‹æ–¹æ³•ã¯å¤šæ•°ã‚りã¾ã™ãŒã€ã¾ãšã¯ã€Œ:ref:`code_of_conduct`ã€ã‚’読んã§ç†è§£ã—ã¦ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:15 msgid "Become a power user" msgstr "パワーユーザーã«ãªã‚‹ã€‚" #: ../../rst/community/how_can_I_help.rst:17 msgid "A great way to help the Ansible project is to become a power user:" msgstr "Ansible プロジェクトを支æ´ã™ã‚‹å„ªã‚ŒãŸæ–¹æ³•ã¯ã€ä¸Šç´šãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:19 msgid "Use Ansible everywhere you can" msgstr "å¯èƒ½ãªé™ã‚Šã©ã“ã§ã‚‚ Ansible を使用ã™ã‚‹ã€‚" #: ../../rst/community/how_can_I_help.rst:20 msgid "Take tutorials and classes" msgstr "ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚„クラスをå—講ã™ã‚‹ã€‚" #: ../../rst/community/how_can_I_help.rst:21 msgid "Read the :ref:`official documentation `" msgstr ":ref:`å…¬å¼ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ ` を読む。" #: ../../rst/community/how_can_I_help.rst:22 msgid "Study some of the `many excellent books `_ about Ansible" msgstr "Ansible ã«é–¢ã™ã‚‹ `多ãã®å„ªã‚ŒãŸæ›¸ç± `_ ã®ä¸­ã‹ã‚‰ã„ãã¤ã‹é¸ã‚“ã§å‹‰å¼·ã™ã‚‹ã€‚" #: ../../rst/community/how_can_I_help.rst:23 ../../rst/community/index.rst:31 msgid "`Get certified `_." msgstr "`èªå®šã‚’å—ã‘ã‚‹ `。" #: ../../rst/community/how_can_I_help.rst:25 msgid "When you become a power user, your ability and opportunities to help the Ansible project in other ways will multiply quickly." msgstr "パワーユーザーã«ãªã‚‹ã¨ã€Ansible ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚’ä»–ã®æ–¹æ³•ã§æ”¯æ´ã™ã‚‹èƒ½åŠ›ã¨æ©Ÿä¼šãŒæ€¥é€Ÿã«å¢—ãˆã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:28 msgid "Ask and answer questions online" msgstr "オンラインã§è³ªå•ã—ã€è³ªå•ã«å›žç­”" #: ../../rst/community/how_can_I_help.rst:30 msgid "There are many forums online where Ansible users ask and answer questions. Reach out and communicate with your fellow Ansible users." msgstr "オンラインã«ã¯ã€Ansible ユーザーãŒè³ªå•ã‚’ã—ãŸã‚Šã€è³ªå•ã«ç­”ãˆãŸã‚Šã™ã‚‹ãƒ•ォーラムãŒå¤šæ•°ã‚りã¾ã™ã€‚ä»–ã® Ansible ユーザーã«é€£çµ¡ã—ã¦ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’行ã„ã¾ã—ょã†ã€‚" #: ../../rst/community/how_can_I_help.rst:32 msgid "You can find the official :ref:`Ansible communication channels `." msgstr "å…¬å¼ã® :ref:`Ansible コミュニケーションãƒãƒ£ãƒ³ãƒãƒ« ` ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:35 msgid "Review, fix, and maintain the documentation" msgstr "ドキュメントã®ç¢ºèªã€ä¿®æ­£ã€ãŠã‚ˆã³ç¶­æŒ" #: ../../rst/community/how_can_I_help.rst:37 msgid "Typos are everywhere, even in the Ansible documentation. We work hard to keep the documentation up-to-date, but you may also find outdated examples. We offer easy ways to :ref:`report and/or fix documentation errors `." msgstr "Ansible ドキュメントã«èª¤å­—ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ドキュメントを最新ã®çŠ¶æ…‹ã«ä¿ã¤ã‚ˆã†ã«åŠªã‚ã¦ã„ã¾ã™ãŒã€å¤ã„例ãŒè¦‹ã¤ã‹ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚:ref:`ドキュメントエラーを報告ã¾ãŸã¯ä¿®æ­£ã™ã‚‹ ` ç°¡å˜ãªæ–¹æ³•ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:42 msgid "Participate in your local meetup" msgstr "å„地㮠Meetup ã«å‚加" #: ../../rst/community/how_can_I_help.rst:44 msgid "There are Ansible meetups `all over the world `_. Join your local meetup. Attend regularly. Ask good questions. Volunteer to give a presentation about how you use Ansible." msgstr "Ansible ã® Meetup 㯠`世界中 `_ ã§é–‹å‚¬ã•れã¦ã„ã¾ã™ã€‚ãŠä½ã„ã®åœ°åŸŸã§é–‹å‚¬ã•れる Meetup ã«å‚加ã—ã¦ãã ã•ã„。定期的ã«å‚加ã—ã¦ãã ã•ã„。質å•ã‚’ã—ã¦ãã ã•ã„。Ansible ã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹ãƒ—レゼンテーションを自発的ã«è¡Œã£ã¦ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:46 msgid "If there is no meetup near you, we are happy to help you `start one `_." msgstr "ãŠè¿‘ãã§ Meetup ãŒé–‹å‚¬ã•れãªã„å ´åˆã¯ã€`æ–°ãŸã«é–‹å‚¬ã™ã‚‹ `_ ã“ã¨ã‚’ãŠæ‰‹ä¼ã„ã—ã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:49 msgid "File and verify issues" msgstr "å•題ã®å ±å‘ŠãŠã‚ˆã³ç¢ºèª" #: ../../rst/community/how_can_I_help.rst:51 msgid "All software has bugs, and Ansible is no exception. When you find a bug, you can help tremendously by :ref:`telling us about it `." msgstr "ã™ã¹ã¦ã®ã‚½ãƒ•トウェアã«ã¯ãƒã‚°ãŒã‚りã€Ansible も例外ã§ã¯ã‚りã¾ã›ã‚“。ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€:ref:`報告 ` ã—ã¦ã„ãŸã ãã¨éžå¸¸ã«åŠ©ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:54 msgid "If the bug you found already exists in an issue, you can help by verifying the behavior of the reported bug with a comment in that issue, or by reporting any additional information." msgstr "報告ã—よã†ã¨ã—ã¦ã„ã‚‹ãƒã‚°ãŒã™ã§ã«å ±å‘Šã•れã¦ã„ã‚‹å ´åˆã¯ã€å ±å‘Šã•れã¦ã„ã‚‹ãƒã‚°ã®å‹•作をãã®å•題ã®ã‚³ãƒ¡ãƒ³ãƒˆã§æ¤œè¨¼ã—ãŸã‚Šã€è¿½åŠ æƒ…å ±ã‚’å ±å‘Šã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒåŠ©ã‘ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:57 msgid "Review and submit pull requests" msgstr "ãƒ—ãƒ«è¦æ±‚ã®ç¢ºèªãŠã‚ˆã³æå‡º" #: ../../rst/community/how_can_I_help.rst:59 msgid "As you become more familiar with how Ansible works, you may be able to fix issues or develop new features yourself. If you think you have a fix for a bug in Ansible, or if you have a new feature that you would like to share with millions of Ansible users, read all about the :ref:`Ansible development process ` and and :ref:`how to contribute to collections ` to learn how to get your code accepted into Ansible." msgstr "Ansible ã®æ©Ÿèƒ½ã«ã¤ã„ã¦ç†è§£ãŒæ·±ã¾ã‚‹ã¨ã€å•題を修正ã—ãŸã‚Šã€æ–°ã—ã„æ©Ÿèƒ½ã‚’自分ã§é–‹ç™ºã—ãŸã‚Šã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚Ansible ã§è¦‹ã¤ã‹ã£ãŸãƒã‚°ã®è§£æ±ºç­–を見ã¤ã‘ãŸå ´åˆã‚„ã€è‡ªèº«ãŒä½œæˆã—ãŸæ–°æ©Ÿèƒ½ã‚’何百万人も㮠Ansible ユーザーã¨å…±æœ‰ã—ãŸã„å ´åˆã¯ã€ã€Œ:ref:`Ansible ã®é–‹ç™ºãƒ—ロセス `ã€ãŠã‚ˆã³ã€Œ:ref:`コレクションã¸ã®è²¢çŒ®æ–¹æ³• `ã€ã‚’よã読んã§ã€ä½œæˆã—ãŸã‚³ãƒ¼ãƒ‰ã‚’ Ansible ã«å—ã‘入れã¦ã‚‚ã‚‰ã†æ–¹æ³•を学んã§ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:61 msgid "Another good way to help is to review pull requests that other Ansible users have submitted. The Ansible community keeps a full list of `open pull requests by file `_, so if a particular module or plugin interests you, you can easily keep track of all the relevant new pull requests and provide testing or feedback." msgstr "もㆠ1 ã¤ã®è²¢çŒ®æ–¹æ³•ã¯ã€åˆ¥ã® Ansible ユーザーãŒä½œæˆã—ãŸãƒ—ãƒ«è¦æ±‚を確èªã™ã‚‹ã“ã¨ã§ã™ã€‚Ansible コミュニティーã¯ã€`ファイルã”ã¨ã«ã‚ªãƒ¼ãƒ—ンãªãƒ—ãƒ«è¦æ±‚ `_ ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ç‰¹ã«èˆˆå‘³ã®ã‚る特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインãŒã‚れã°ã€é–¢é€£ã™ã‚‹æ–°ã—ã„ãƒ—ãƒ«è¦æ±‚ã‚’ã™ã¹ã¦ç°¡å˜ã«è¿½è·¡ã—ã¦ã€ãƒ†ã‚¹ãƒˆã‚„フィードãƒãƒƒã‚¯ã‚’æä¾›ã§ãã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:64 msgid "Become a collection maintainer" msgstr "コレクションメンテナーã«ãªã‚‹" #: ../../rst/community/how_can_I_help.rst:66 msgid "Once you have learned about the development process and have contributed code to a collection, we encourage you to become a maintainer of that collection. There are hundreds of modules in dozens of Ansible collections, and the vast majority of them are written and maintained entirely by members of the Ansible community." msgstr "開発プロセスã«ã¤ã„ã¦å­¦ç¿’ã—ã€ã‚³ãƒ¼ãƒ‰ã‚’ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æä¾›ã—ãŸã‚‰ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ãªã‚‹ã‚ˆã†æŽ¨å¥¨ã•れã¾ã™ã€‚Ansible ã«ã¯æ•°ç™¾ã‚‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚りã€ãã®å¤§éƒ¨åˆ†ã¯ Ansible コミュニティーã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã‚ˆã£ã¦å®Œå…¨ã«è¨˜è¿°ã•れã€ç¶­æŒã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:68 msgid "To learn more about the responsibilities of being an Ansible module maintainer, please read our :ref:`collection maintainer guidelines `." msgstr "Ansible モジュールメンテナーã«ãŠã‘る責任ã®è©³ç´°ã¯ã€ã€Œ:ref:`モジュールã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:73 msgid "Join a working group" msgstr "ワーキンググループã¸ã®å‚加" #: ../../rst/community/how_can_I_help.rst:75 msgid "Working groups are a way for Ansible community members to self-organize around particular topics of interest. We have working groups around various topics. To join or create a working group, please read the :ref:`Ansible Working Groups`." msgstr "ワーキンググループã¯ã€Ansible コミュニティーã®ãƒ¡ãƒ³ãƒãƒ¼ãŒé–¢å¿ƒã®ã‚る特定ã®ãƒˆãƒ”ックã«ã¤ã„ã¦è‡ªå·±ç·¨æˆã™ã‚‹æ–¹æ³•ã§ã™ã€‚ã•ã¾ã–ã¾ãªãƒˆãƒ”ックã«é–¢ã™ã‚‹ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ãŒã‚りã¾ã™ã€‚ワーキンググループã«å‚加ã™ã‚‹ã‹ã€ã€Œ:ref:`Ansible ワーキンググループ`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/how_can_I_help.rst:79 msgid "Teach Ansible to others" msgstr "Ansible を紹介ã™ã‚‹" #: ../../rst/community/how_can_I_help.rst:81 msgid "We are working on a standardized `Ansible workshop `_ that can provide a good hands-on introduction to Ansible usage and concepts." msgstr "ç¾åœ¨ã€Ansible ã®ä½¿ç”¨æ–¹æ³•や概念をã—ã£ã‹ã‚Šã¨ãƒãƒ³ã‚ºã‚ªãƒ³ã§ç´¹ä»‹ã§ãる標準化ã•れ㟠`Ansible ワークショップ `_ ã«å–り組んã§ã„ã¾ã™ã€‚" #: ../../rst/community/how_can_I_help.rst:84 msgid "Social media" msgstr "ソーシャルメディア" #: ../../rst/community/how_can_I_help.rst:86 msgid "If you like Ansible and just want to spread the good word, feel free to share on your social media platform of choice, and let us know by using ``@ansible`` or ``#ansible``. We'll be looking for you." msgstr "Ansible ãŒå¥½ãã§ã€Ansible ã®è‰¯ã•を広ã‚ãŸã„æ–¹ã¯ã€ãŠå¥½ããªã‚½ãƒ¼ã‚·ãƒ£ãƒ«ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ã§æ°—軽ã«ã‚·ã‚§ã‚¢ã—ã¦ãã ã•ã„。コミュニティーメンãƒãƒ¼ãŒæ°—ãŒä»˜ãよã†ã«ã€``@ansible`` ã¾ãŸã¯ ``#ansible`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/community/index.rst:88 msgid "Guidelines for specific types of contributors" msgstr "貢献者å‘ã‘å„ガイドライン" #: ../../rst/community/index.rst:5 msgid "Ansible Community Guide" msgstr "Ansible コミュニティーガイド" #: ../../rst/community/index.rst:9 msgid "**Making Open Source More Inclusive**" msgstr "**多様性をå—ã‘入れるオープンソースã®å¼·åŒ–**" #: ../../rst/community/index.rst:11 msgid "Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_." msgstr "Red Hat ã§ã¯ã€ã‚³ãƒ¼ãƒ‰ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€Web プロパティーã«ãŠã‘ã‚‹é…æ…®ã«æ¬ ã‘る用語ã®ç½®ãæ›ãˆã«å–り組んã§ã„ã¾ã™ã€‚ã¾ãšã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ (master)ã€ã‚¹ãƒ¬ãƒ¼ãƒ– (slave)ã€ãƒ–ラックリスト (blacklist)ã€ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆ (whitelist) ã® 4 ã¤ã®ç”¨èªžã®ç½®ãæ›ãˆã‹ã‚‰å§‹ã‚ã¾ã™ã€‚å•題ã®ã‚る用語を見ã¤ã‘ãŸå ´åˆã¯ã€å•題を作æˆã™ã‚‹ã‹ã€ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ãã ã•ã„。詳細ã¯ã€`弊社 ã® CTOã€Chris Wright ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/index.rst:13 msgid "Welcome to the Ansible Community Guide!" msgstr "Ansible コミュニティーガイドã«ã‚ˆã†ã“ã!" #: ../../rst/community/index.rst:15 msgid "The purpose of this guide is to teach you everything you need to know about being a contributing member of the Ansible community. All types of contributions are welcome and necessary to Ansible's continued success." msgstr "本ガイドã®ç›®çš„ã¯ã€Ansible コミュニティーã«è²¢çŒ®ã™ã‚‹éš›ã«å¿…è¦ãªçŸ¥è­˜ã‚’ã™ã¹ã¦èª¬æ˜Žã™ã‚‹ã“ã¨ã§ã™ã€‚ã‚らゆる種類ã®è²¢çŒ®ãŒã€Ansible ã®ç¶™ç¶šçš„ãªæˆåŠŸã«å¿…è¦ãªã‚‚ã®ã§ã‚ã‚Šã€æ­“迎ã•れã¾ã™ã€‚" #: ../../rst/community/index.rst:17 msgid "This page outlines the most common situations and questions that bring readers to this section. If you prefer a :ref:`traditional table of contents `, you can find one at the bottom of the page." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€æœ¬ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ãŸã©ã‚Šç€ã„ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦æœ€ã‚‚一般的ãªçжæ³ã‚„質å•ã®æ¦‚è¦ã‚’説明ã—ã¾ã™ã€‚:ref:`従æ¥ã®ç›®æ¬¡å½¢å¼ ` ã‚’ã”希望ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å‘ã‘ã«ã€ãƒšãƒ¼ã‚¸ã®ä¸€ç•ªä¸‹ã«ç›®æ¬¡ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/community/index.rst:21 msgid "Getting started" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/community/index.rst:23 msgid "I am new to the community. Where can I find the Ansible :ref:`code_of_conduct`?" msgstr "ã“ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã«å‚加ã—ã¦é–“ã‚‚ãªã„ã§ã™ã€‚Ansible ã® :ref:`code_of_conduct` ã¯ã©ã“ã§ç¢ºèªã§ãã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:24 msgid "I would like to know what I am agreeing to when I contribute to Ansible. Does Ansible have a :ref:`contributor_license_agreement`?" msgstr "Ansible ã«è²¢çŒ®ã™ã‚‹éš›ã«ä½•ã«åŒæ„ã—ã¦ã„ã‚‹ã®ã‹çŸ¥ã‚ŠãŸã„ã®ã§ã™ã€‚Ansible ã«ã¯ :ref:`contributor_license_agreement` ãŒã‚りã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:25 msgid "I would like to contribute but I am not sure how. Are there :ref:`easy ways to contribute `?" msgstr "貢献ã—ãŸã„ã®ã§ã™ãŒã€æ–¹æ³•ãŒã‚ã‹ã‚Šã¾ã›ã‚“。:ref:`ç°¡å˜ã«è²¢çŒ®ã™ã‚‹æ–¹æ³• ` ã¯ã‚りã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:26 msgid "I want to talk to other Ansible users. How do I find an `Ansible Meetup near me `_?" msgstr "ä»–ã® Ansible ユーザーã¨è©±ã‚’ã—ã¦ã¿ãŸã„ã§ã™ã€‚`ç§ãŒå‚加ã§ãã‚‹ Ansible Meetup `_ ã¯ã©ã®ã‚ˆã†ã«æŽ¢ã›ã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:27 msgid "I have a question. Which :ref:`Ansible email lists and chat channels ` will help me find answers?" msgstr "質å•ãŒã‚りã¾ã™ã€‚:ref:`Ansible email lists and chat channels ` ã§ç­”ãˆã‚’見ã¤ã‘ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:28 msgid "I want to learn more about Ansible. What can I do?" msgstr "Ansible ã«ã¤ã„ã¦ã‚‚ã£ã¨çŸ¥ã‚ŠãŸã„ã§ã™ã€‚ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã—ょã†ã‹ã€‚" #: ../../rst/community/index.rst:30 msgid "`Read books `_." msgstr "`本を読む `_。" #: ../../rst/community/index.rst:32 msgid "`Attend events `_." msgstr "`イベントã«å‚加ã™ã‚‹ `_。" #: ../../rst/community/index.rst:33 msgid "`Review getting started guides `_." msgstr "`スタートガイドを確èªã™ã‚‹ `_。" #: ../../rst/community/index.rst:34 msgid "`Watch videos `_ - includes Ansible Automates, AnsibleFest & webinar recordings." msgstr "`ビデオを観る `_ (Ansible Automatesã€AnsibleFestã€ã‚¦ã‚§ãƒ“ナーã®éŒ²ç”»ãªã©)。" #: ../../rst/community/index.rst:36 msgid "I would like updates about new Ansible versions. How are `new releases announced `_?" msgstr "Ansible ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é–¢ã™ã‚‹æœ€æ–°æƒ…報を知りãŸã„ã§ã™ã€‚`æ–°ã—ã„リリースã®ç™ºè¡¨ `_ ã¯ã©ã®ã‚ˆã†ã«è¡Œã‚れã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:37 msgid "I want to use the current release. How do I know which :ref:`releases are current `?" msgstr "最新ã®ãƒªãƒªãƒ¼ã‚¹ã‚’使用ã—ãŸã„ã§ã™ã€‚:ref:`ã©ã®ãƒªãƒªãƒ¼ã‚¹ãŒæœ€æ–°ã®ãƒªãƒªãƒ¼ã‚¹ ` ã‹ã‚’知るã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:40 msgid "Going deeper" msgstr "ä½¿ã„æ…£ã‚Œã¦ããŸé ƒ" #: ../../rst/community/index.rst:42 msgid "I think Ansible is broken. How do I :ref:`report a bug `?" msgstr "Ansible ãŒç ´æã—ã¦ã„るよã†ã«è¦‹ãˆã¾ã™ã€‚:ref:`ãƒã‚°ã‚’報告 ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:43 msgid "I need functionality that Ansible does not offer. How do I :ref:`request a feature `?" msgstr "Ansible ãŒæä¾›ã—ã¦ã„ãªã„機能ãŒå¿…è¦ã§ã™ã€‚:ref:`æ©Ÿèƒ½ã‚’è¦æ±‚ ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:44 msgid "How do I :ref:`contribute to an Ansible-maintained collection `?" msgstr ":ref:`Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«è²¢çŒ® ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:45 msgid "I am waiting for a particular feature. How do I see what is :ref:`planned for future Ansible Releases `?" msgstr "ç‰¹å®šã®æ©Ÿèƒ½ãŒå¿…è¦ã§ã™ã€‚:ref:`Ansible ã®å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§äºˆå®šã•れã¦ã„ã‚‹ ` ã‚‚ã®ã‚’確èªã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:46 msgid "I have a specific Ansible interest or expertise (for example, VMware, Linode, and so on). How do I get involved in a :ref:`working group `?" msgstr "特定㮠Ansible 機能ã«é–¢å¿ƒãŒã‚ã‚‹ã€ã¾ãŸã¯å°‚門知識ãŒã‚りã¾ã™ (VMwareã€Linode ãªã©)。:ref:`ワーキンググループ ` ã«å‚加ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:47 msgid "I would like to participate in conversations about features and fixes. How do I review GitHub issues and pull requests?" msgstr "機能や修正ã«é–¢ã™ã‚‹è­°è«–ã¸ã®å‚加を希望ã—ã¾ã™ã€‚GitHub ã®å•é¡Œã‚„ãƒ—ãƒ«è¦æ±‚を確èªã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:48 msgid "I found a typo or another problem on docs.ansible.com. How can I :ref:`improve the documentation `?" msgstr "docs.ansible.com ã§ã‚¿ã‚¤ãƒãªã©ã®èª¤ã‚Šã‚’見ã¤ã‘ã¾ã—ãŸã€‚:ref:`ドキュメントを改善 ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:49 msgid "Is there a :ref:`mailing list ` I can sign up for to stay informed about Ansible?" msgstr "サインアップã—㦠Ansible ã«é–¢ã™ã‚‹é€šçŸ¥ã‚’å—ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ :ref:`メーリングリスト ` ã¯ã‚りã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:53 msgid "Working with the Ansible repo" msgstr "Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®ä½¿ç”¨" #: ../../rst/community/index.rst:55 msgid "I want to make my first code changes to a collection or to ``ansible-core``. How do I :ref:`set up my Python development environment `?" msgstr "コレクションã¾ãŸã¯ ``ansible-core`` ã«åˆã‚ã¦ã‚³ãƒ¼ãƒ‰å¤‰æ›´ã‚’ã—ã¾ã™ã€‚:ref:`Python 開発環境をセットアップ ` ã™ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:56 msgid "I would like to get more efficient as a developer. How can I find :ref:`editors, linters, and other tools ` that will support my Ansible development efforts?" msgstr "開発者ã¨ã—ã¦ã‚‚ã£ã¨åŠ¹çŽ‡çš„ã«ä½œæ¥­ã—ãŸã„ã§ã™ã€‚Ansible 開発をサãƒãƒ¼ãƒˆã™ã‚‹ :ref:`エディターã€Linter ãªã©ã®ãƒ„ール ` ã¯ã©ã†ã‚„ã£ã¦è¦‹ã¤ã‘れã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:57 msgid "I want my code to meet Ansible's guidelines. Where can I find guidance on :ref:`coding in Ansible `?" msgstr "自分ã®ã‚³ãƒ¼ãƒ‰ã‚’ Ansible ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«æ²¿ã£ãŸã‚‚ã®ã«ã—ãŸã„ã§ã™ã€‚:ref:`Ansible ã§ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚° ` ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã¯ã©ã“ã«ã‚りã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:58 msgid "I want to learn more about Ansible roadmaps, releases, and projects. How do I find information on :ref:`the development cycle `?" msgstr "Ansible ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã€ãƒªãƒªãƒ¼ã‚¹ã€ãŠã‚ˆã³ãƒ—ロジェクトã«ã¤ã„ã¦è©³ã—ã知りãŸã„ã§ã™ã€‚:ref:`開発サイクル ` ã«é–¢ã™ã‚‹æƒ…å ±ã¯ã©ã“ã«ã‚りã¾ã™ã‹ã€‚" #: ../../rst/community/index.rst:59 msgid "I would like to connect Ansible to a new API or other resource. How do I :ref:`create a collection `?" msgstr "Ansible ã‚’æ–°ã—ã„ API ã‚„ãã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã«æŽ¥ç¶šã—ãŸã„ã§ã™ã€‚:ref:`関連モジュールã®ã‚°ãƒ«ãƒ¼ãƒ—ã«è²¢çŒ® ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:60 msgid "My pull request is marked ``needs_rebase``. How do I :ref:`rebase my PR `?" msgstr "ãƒ—ãƒ«è¦æ±‚ã« ``needs_rebase`` ã¨ã„ã†ãƒžãƒ¼ã‚¯ãŒä»˜ã„ã¦ã„ã¾ã™ã€‚:ref:`自分ã®ãƒ—ãƒ«è¦æ±‚をリベース ` ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:61 msgid "I am using an older version of Ansible and want a bug fixed in my version that has already been fixed on the ``devel`` branch. How do I :ref:`backport a bugfix PR `?" msgstr "Ansible ã®å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã¾ã™ãŒã€``devel`` ブランãƒã§ã™ã§ã«ä¿®æ­£ã•れã¦ã„ã‚‹ãƒã‚°ã‚’ã€ç§ã®ä½¿ç”¨ã—ã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ä¿®æ­£ã—ã¦ã»ã—ã„ã§ã™ã€‚:ref:`ãƒã‚°ä¿®æ­£ã®ãƒ—ãƒ«è¦æ±‚ ` ã‚’ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:62 msgid "I have an open pull request with a failing test. How do I learn about Ansible's :ref:`testing (CI) process `?" msgstr "オープンã«ãªã£ã¦ã„ã‚‹ãƒ—ãƒ«è¦æ±‚ã§ãƒ†ã‚¹ãƒˆã«å¤±æ•—ã—ã¦ã„ã‚‹ã‚‚ã®ãŒã‚りã¾ã™ã€‚Ansible ã® :ref:`テスト (CI) プロセス ` ã«ã¤ã„ã¦å­¦ã¶ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:63 msgid "I am ready to step up as a collection maintainer. What are the :ref:`guidelines for maintainers `?" msgstr "コレクションメンテナーã«ãªã‚ŠãŸã„ã§ã™ã€‚:ref:`メンテナーå‘ã‘ガイドライン ` ã‚’æ•™ãˆã¦ãã ã•ã„。" #: ../../rst/community/index.rst:64 msgid "A module in a collection I maintain is obsolete. How do I :ref:`deprecate a module `?" msgstr "ç§ãŒä¿å®ˆã—ã¦ã„るモジュールãŒå¤ããªã‚Šã¾ã—ãŸã€‚:ref:`ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ ` ã«ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/community/index.rst:69 msgid "Traditional Table of Contents" msgstr "従æ¥ã®ç›®æ¬¡" #: ../../rst/community/index.rst:71 msgid "If you prefer to read the entire Community Guide, here is a list of the pages in order:" msgstr "コミュニティーガイド全体をãŠèª­ã¿ã«ãªã‚ŠãŸã„æ–¹ã¯ã€ã“ã¡ã‚‰ã®ãƒšãƒ¼ã‚¸ã‚’順番ã«ã”覧ãã ã•ã„。" #: ../../rst/community/maintainers.rst:5 msgid "Collection maintainer guidelines" msgstr "コレクションメンテナーã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/community/maintainers.rst:7 msgid "Thank you for being a community collection maintainer. This guide offers an overview of your responsibilities as a maintainer along with resources for additional information. The Ansible community hopes that you will find that maintaining a collection is as rewarding for you as having the collection content is for the wider community." msgstr "Ansible ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ãªã£ã¦ã„ãŸã ãã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚本ガイドã§ã¯ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã®è²¬ä»»ã®æ¦‚è¦ã€è¿½åŠ æƒ…å ±ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’紹介ã—ã¾ã™ã€‚Ansible コミュニティーã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æŒã¤ã“ã¨ãŒã‚ˆã‚Šåºƒã„コミュニティーã«ã¨ã£ã¦æœ‰ç›Šã§ã‚ã‚‹ã®ã¨åŒæ§˜ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ç¶­æŒã™ã‚‹ã“ã¨ãŒçš†æ§˜ã«ã¨ã£ã¦ã‚‚有益ã§ã‚ã‚‹ã¨æ„Ÿã˜ã¦ã„ãŸã ã‘ã‚‹ã“ã¨ã‚’願ã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/community/maintainers.rst:12 msgid "In addition to the information below, module maintainers should be familiar with:" msgstr "ä»¥ä¸‹ã®æƒ…å ±ã«åŠ ãˆã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ä»¥ä¸‹ã«ã¤ã„ã¦ç†è§£ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/maintainers.rst:14 msgid ":ref:`General Ansible community development practices `" msgstr ":ref:`Ansible コミュニティー開発ã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªãƒ—ラクティス `" #: ../../rst/community/maintainers.rst:15 msgid "Documentation on :ref:`module development `" msgstr ":ref:`モジュール開発 ` ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/community/maintainers.rst:19 msgid "Maintainer responsibilities" msgstr "メンテナーã®å½¹å‰²" #: ../../rst/community/maintainers.rst:21 msgid "When you contribute a module to a collection included in the ``ansible`` package, you become a maintainer for that module once it has been merged. Maintainership empowers you with the authority to accept, reject, or request revisions to pull requests on your module -- but as they say, \"with great power comes great responsibility.\"" msgstr "``ansible`` パッケージã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã—ã€ãれãŒãƒžãƒ¼ã‚¸ã•れるã¨ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ãªã‚Šã¾ã™ã€‚メンテナーã«ãªã‚‹ã¨ã€ä¸»ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®ãƒ—ãƒ«è¦æ±‚を許å¯ã€æ‹’å¦ã€ã¾ãŸã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚‹æ¨©é™ã‚’æŒã¤ã“ã¨ã«ãªã‚Šã¾ã™ãŒã€ã€Œæ¨©é™ãŒå¤§ãããªã‚‹ã¨è²¬ä»»ã‚‚大ãããªã‚‹ã€ã¨ã‚‚言ãˆã¾ã™ã€‚" #: ../../rst/community/maintainers.rst:23 msgid "Maintainers of Ansible collections are expected to provide feedback, responses, or actions on pull requests or issues to the collection(s) they maintain in a reasonably timely manner. You can also update the contributor guidelines for that collection, in collaboration with the Ansible community team and the other maintainers of that collection." msgstr "Ansible コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã€ãƒ—ãƒ«è¦æ±‚ã¾ãŸã¯å•題ã«å¯¾ã™ã‚‹ãƒ•ィードãƒãƒƒã‚¯ã€å¿œç­”ã€ã¾ãŸã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã€åˆç†çš„ãªæ™‚間内ã«ã€ç¶­æŒã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æä¾›ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¦ã„ã¾ã™ã€‚ã¾ãŸã€Ansible コミュニティーãƒãƒ¼ãƒ ã‚„ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä»–ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¨å”力ã—ã¦ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è²¢çŒ®è€…ガイドラインを更新ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/community/maintainers.rst:26 msgid "Resources" msgstr "リソース" #: ../../rst/community/maintainers.rst:28 msgid "Please see :ref:`communication` for ways to contact the broader Ansible community. For maintainers, following the `ansible-devel `_ mailing list is a great way to participate in conversations about coding, get assistance when you need it, and influence the overall direction, quality, and goals of Ansible and the collections. If you are not on this relatively low-volume list, please join us here: https://groups.google.com/forum/#!forum/ansible-devel" msgstr "幅広ㄠAnsible コミュニティーã«é€£çµ¡ã™ã‚‹æ–¹æ³•ã¯ã€:ref:`communication` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。`ansible-devel `_ メーリングリストã«å‚加ã™ã‚‹ã“ã¨ã¯ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ã¨ã£ã¦ã€ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«é–¢ã™ã‚‹å¯¾è©±ã«å‚加ã—ã€å¿…è¦ã«å¿œã˜ã¦æ”¯æ´ã‚’å—ã‘ã€Ansible ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å…¨ä½“çš„ãªæ–¹å‘ã€å“質ã€ãŠã‚ˆã³ç›®çš„ã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã®å„ªã‚ŒãŸæ–¹æ³•ã§ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã«è¼‰ã£ã¦ã„ãªã„å ´åˆã¯https://groups.google.com/forum/#!forum/ansible-devel ã«å‚加ã—ã¦ãã ã•ã„。" #: ../../rst/community/maintainers.rst:32 msgid "Pull requests, issues, and workflow" msgstr "ãƒ—ãƒ«è¦æ±‚ã€å•題ã€ãŠã‚ˆã³ãƒ¯ãƒ¼ã‚¯ãƒ•ロー" #: ../../rst/community/maintainers.rst:34 msgid "Each collection community can set its own rules and workflow for managing pull requests, bug reports, documentation issues, and feature requests, as well as adding and replacing maintainers." msgstr "å„コレクションコミュニティーã¯ã€ãƒ—ãƒ«è¦æ±‚ã€ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå•題ã€ãŠã‚ˆã³æ©Ÿèƒ½ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’管ç†ã™ã‚‹ç‹¬è‡ªã®ãƒ«ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ¯ãƒ¼ã‚¯ãƒ•ローを設定ã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã®è¿½åŠ ãŠã‚ˆã³ç½®ãæ›ãˆã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:5 msgid "Other Tools and Programs" msgstr "ãã®ä»–ã®ãƒ„ールãŠã‚ˆã³ãƒ—ログラム" #: ../../rst/community/other_tools_and_programs.rst:10 msgid "The Ansible community uses a range of tools for working with the Ansible project. This is a list of some of the most popular of these tools." msgstr "Ansible コミュニティーã¯ã€Ansible プロジェクトã§ä½œæ¥­ã™ã‚‹ãŸã‚ã«ã•ã¾ã–ã¾ãªãƒ„ールを使用ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€ã“れらã®ãƒ„ールã®ä¸­ã§ã‚‚特ã«äººæ°—ã®ã‚ã‚‹ã‚‚ã®ã‚’ã„ãã¤ã‹ç´¹ä»‹ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:12 msgid "If you know of any other tools that should be added, this list can be updated by clicking \"Edit on GitHub\" on the top right of this page." msgstr "ä»–ã«ã‚‚追加ã™ã¹ãツールãŒã‚れã°ã€ã“ã®ãƒšãƒ¼ã‚¸ã®å³ä¸Šã«ã‚る「Edit on GitHubã€ã‚’クリックã™ã‚‹ã¨ã€ã“ã®ä¸€è¦§ã‚’æ›´æ–°ã§ãã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:16 msgid "Popular editors" msgstr "人気ã®ã‚るエディター" #: ../../rst/community/other_tools_and_programs.rst:19 msgid "Atom" msgstr "Atom" #: ../../rst/community/other_tools_and_programs.rst:21 msgid "An open-source, free GUI text editor created and maintained by GitHub. You can keep track of git project changes, commit from the GUI, and see what branch you are on. You can customize the themes for different colors and install syntax highlighting packages for different languages. You can install Atom on Linux, macOS and Windows. Useful Atom plugins include:" msgstr "GitHub ã§ä½œæˆãŠã‚ˆã³ä¿å®ˆã•れるオープンソースã®ç„¡æ–™ GUI テキストエディター。git プロジェクトã®å¤‰æ›´ã‚’追跡ã—ãŸã‚Šã€GUI ã‹ã‚‰ã‚³ãƒŸãƒƒãƒˆã—ãŸã‚Šã€è‡ªåˆ†ãŒã©ã®ãƒ–ランãƒã«ã„ã‚‹ã‹ã‚’確èªã§ãã¾ã™ã€‚テーマをカスタマイズã—ã¦è‰²ã‚’変ãˆãŸã‚Šã€è¨€èªžã”ã¨ã«æ§‹æ–‡å¼·èª¿è¡¨ç¤ºãƒ‘ッケージをインストールã—ãŸã‚Šã§ãã¾ã™ã€‚Atom ã¯ã€Linuxã€macOSã€ãŠã‚ˆã³ Windows ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚便利㪠Atom プラグインã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:24 msgid "`language-yaml `_ - YAML highlighting for Atom (built-in)." msgstr "`language-yaml `_ - Atom ã§ã® YAML ã®å¼·èª¿è¡¨ç¤º (組ã¿è¾¼ã¿)。" #: ../../rst/community/other_tools_and_programs.rst:25 msgid "`linter-js-yaml `_ - parses your YAML files in Atom through js-yaml." msgstr "`linter-js-yaml `_ - js-yaml を介ã—㦠Atom ã§ YAML ファイルを解æžã€‚" #: ../../rst/community/other_tools_and_programs.rst:29 msgid "Emacs" msgstr "Emacs" #: ../../rst/community/other_tools_and_programs.rst:31 msgid "A free, open-source text editor and IDE that supports auto-indentation, syntax highlighting and built in terminal shell(among other things)." msgstr "ç„¡æ–™ã§ã‚ªãƒ¼ãƒ—ンソースã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã¨ IDEã€‚ã‚ªãƒ¼ãƒˆã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã€æ§‹æ–‡å¼·èª¿è¡¨ç¤ºã€ç«¯æœ«ã‚·ã‚§ãƒ«ã§ã®ãƒ“ルドãªã©ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:33 msgid "`yaml-mode `_ - YAML highlighting and syntax checking." msgstr "`yaml-mode `_ - YAML ã®å¼·èª¿è¡¨ç¤ºã¨æ§‹æ–‡ã®ãƒã‚§ãƒƒã‚¯ã€‚" #: ../../rst/community/other_tools_and_programs.rst:34 msgid "`jinja2-mode `_ - Jinja2 highlighting and syntax checking." msgstr "`jinja2-mode `_ - Jinja2 ã®å¼·èª¿è¡¨ç¤ºã¨æ§‹æ–‡ã®ç¢ºèªã€‚" #: ../../rst/community/other_tools_and_programs.rst:35 msgid "`magit-mode `_ - Git porcelain within Emacs." msgstr "`magit-mode `_ - Emacs 内ã§ã® git porcelain (ç£å™¨)。" #: ../../rst/community/other_tools_and_programs.rst:39 msgid "PyCharm" msgstr "PyCharm" #: ../../rst/community/other_tools_and_programs.rst:41 msgid "A full IDE (integrated development environment) for Python software development. It ships with everything you need to write python scripts and complete software, including support for YAML syntax highlighting. It's a little overkill for writing roles/playbooks, but it can be a very useful tool if you write modules and submit code for Ansible. Can be used to debug the Ansible engine." msgstr "Python ソフトウェア開発å‘ã‘ã®å®Œå…¨ãª IDE (çµ±åˆé–‹ç™ºç’°å¢ƒ)。ã“れã«ã¯ã€YAML 構文強調表示ã®ã‚µãƒãƒ¼ãƒˆã‚’å«ã‚€ã€Python スクリプトを記述ã™ã‚‹ã®ã«å¿…è¦ãªã™ã¹ã¦ã®ã‚‚ã®ã¨å®Œå…¨ãªã‚½ãƒ•トウェアãŒåŒæ¢±ã•れã¦ã„ã¾ã™ã€‚ロール/Playbook ã®ä½œæˆã«ã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã€Ansible 用ã®ã‚³ãƒ¼ãƒ‰ã‚’é€ä¿¡ã™ã‚‹å ´åˆã¯ã€éžå¸¸ã«ä¾¿åˆ©ãªãƒ„ールã«ãªã‚Šã¾ã™ã€‚Ansible エンジンã®ãƒ‡ãƒãƒƒã‚°ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:45 msgid "Sublime" msgstr "Sublime" #: ../../rst/community/other_tools_and_programs.rst:47 msgid "A closed-source, subscription GUI text editor. You can customize the GUI with themes and install packages for language highlighting and other refinements. You can install Sublime on Linux, macOS and Windows. Useful Sublime plugins include:" msgstr "クローズドソースã®ã‚µãƒ–スクリプション GUI テキストエディター。テーマを使用ã—㦠GUI をカスタマイズã—ãŸã‚Šã€è¨€èªžã®å¼·èª¿è¡¨ç¤ºã‚„ãã®ä»–ã®æ”¹è‰¯ã®ãŸã‚ã®ãƒ‘ッケージをインストールã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Sublime 㯠Linuxã€macOSã€Windows ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚便利㪠Sublime プラグインã«ã¯ä»¥ä¸‹ã®ã‚‚ã®ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:49 msgid "`GitGutter `_ - shows information about files in a git repository." msgstr "`GitGutter `_ - git リãƒã‚¸ãƒˆãƒªãƒ¼å†…ã®ãƒ•ァイルã«é–¢ã™ã‚‹æƒ…報を表示ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:50 msgid "`SideBarEnhancements `_ - provides enhancements to the operations on Sidebar of Files and Folders." msgstr "`SideBarEnhancements `_ - ファイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ã‚µã‚¤ãƒ‰ãƒãƒ¼ã«å¯¾ã™ã‚‹æ“作ã®å¼·åŒ–ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:51 msgid "`Sublime Linter `_ - a code-linting framework for Sublime Text 3." msgstr "`Sublime Linter `_ - Sublime Text 3 ã®ã‚³ãƒ¼ãƒ‰ã®æ–‡æ³•ãƒã‚§ãƒƒã‚¯ãƒ•レームワークã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:52 msgid "`Pretty YAML `_ - prettifies YAML for Sublime Text 2 and 3." msgstr "`Pretty YAML `_ - Sublime Text 2 ãŠã‚ˆã³ 3 ã® YAML を事å‰è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:53 msgid "`Yamllint `_ - a Sublime wrapper around yamllint." msgstr "`Yamllint `_ - yamllint ã«é–¢ã™ã‚‹ Sublime ラッパーã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:57 msgid "Visual studio code" msgstr "Visual Studio コード" #: ../../rst/community/other_tools_and_programs.rst:59 msgid "An open-source, free GUI text editor created and maintained by Microsoft. Useful Visual Studio Code plugins include:" msgstr "Microsoft ãŒä½œæˆãŠã‚ˆã³ç®¡ç†ã™ã‚‹ã‚ªãƒ¼ãƒ—ンソースã®ç„¡æ–™ GUI テキストエディター。便利㪠Visual Studio Code プラグインã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:62 msgid "`YAML Support by Red Hat `_ - provides YAML support through yaml-language-server with built-in Kubernetes and Kedge syntax support." msgstr "`YAML Support by Red Hat `_ - Kubernetes 㨠Kedge ã®æ§‹æ–‡ã‚µãƒãƒ¼ãƒˆã‚’組ã¿è¾¼ã‚“ã  yaml-language-server を通ã˜ã¦ YAML サãƒãƒ¼ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:63 msgid "`Ansible Syntax Highlighting Extension `_ - YAML & Jinja2 support." msgstr "`Ansible Syntax Highlighting Extension `_ - YAML ãŠã‚ˆã³ Jinja2 サãƒãƒ¼ãƒˆã€‚" #: ../../rst/community/other_tools_and_programs.rst:64 msgid "`Visual Studio Code extension for Ansible `_ - provides autocompletion, syntax highlighting." msgstr "`Visual Studio Code extension for Ansible `_ - ã‚ªãƒ¼ãƒˆã‚³ãƒ³ãƒ—ãƒªãƒ¼ãƒˆã€æ§‹æ–‡å¼·èª¿è¡¨ç¤ºã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:67 msgid "vim" msgstr "vim" #: ../../rst/community/other_tools_and_programs.rst:69 msgid "An open-source, free command-line text editor. Useful vim plugins include:" msgstr "オープンソースã®ç„¡æ–™ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã€‚便利㪠vim プラグインã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:71 msgid "`Ansible vim `_ - vim syntax plugin for Ansible 2.x, it supports YAML playbooks, Jinja2 templates, and Ansible's hosts files." msgstr "`Ansible vim `_ - Ansible 2.x ã® vim 構文プラグイン。YAML Playbookã€Jinja2 テンプレートã€ãŠã‚ˆã³ Ansible ホストファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:74 msgid "JetBrains" msgstr "JetBrains" #: ../../rst/community/other_tools_and_programs.rst:76 msgid "An open-source Community edition and closed-source Enterprise edition, integrated development environments based on IntelliJ's framework including IDEA, AppCode, CLion, GoLand, PhpStorm, PyCharm and others. Useful JetBrains platform plugins include:" msgstr "オープンソースã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¨ãƒ‡ã‚£ã‚·ãƒ§ãƒ³ã¨ã‚¯ãƒ­ãƒ¼ã‚ºãƒ‰ã‚½ãƒ¼ã‚¹ã®ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズエディションã€IntelliJ ã®ãƒ•レームワークã«åŸºã¥ãçµ±åˆé–‹ç™ºç’°å¢ƒ (IDEAã€AppCodeã€CLionã€GoLandã€PhpStormã€PyCharm ãªã©ã‚’å«ã‚€)。便利㪠JetBrains ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:78 msgid "`Ansible `_ - general Ansible plugin provides auto-completion, role name suggestion and other handy features for working with playbooks and roles." msgstr "`Ansible `_ - 一般的㪠Ansible プラグインã¯ã€ã‚ªãƒ¼ãƒˆã‚³ãƒ³ãƒ—リートã€ãƒ­ãƒ¼ãƒ«åã®ææ¡ˆã€ãŠã‚ˆã³ Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’æ“作ã™ã‚‹ãŸã‚ã®ãã®ä»–ã®ä¾¿åˆ©ãªæ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:80 msgid "`Ansible Vault Editor `_ - Ansible Vault Editor with auto encryption/decryption." msgstr "`Ansible Vault Editor `_ - 自動暗å·åŒ–/復巿©Ÿèƒ½ã‚’使用ã—㟠Ansible Vault エディター" #: ../../rst/community/other_tools_and_programs.rst:84 msgid "Development tools" msgstr "開発ツール" #: ../../rst/community/other_tools_and_programs.rst:87 msgid "Finding related issues and PRs" msgstr "関連ã™ã‚‹å•題ãŠã‚ˆã³ãƒ—ãƒ«è¦æ±‚ã®æ¤œç´¢" #: ../../rst/community/other_tools_and_programs.rst:89 msgid "There are various ways to find existing issues and pull requests (PRs)" msgstr "既存ã®å•題ãŠã‚ˆã³ãƒ—ãƒ«è¦æ±‚を特定ã™ã‚‹æ–¹æ³•ã¯è¤‡æ•°ã‚りã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:91 msgid "`PR by File `_ - shows a current list of all open pull requests by individual file. An essential tool for Ansible module maintainers." msgstr "`ファイル別ã®ãƒ—ãƒ«è¦æ±‚ `_ - 個別ファイルã«ã‚ˆã‚‹ã‚ªãƒ¼ãƒ—ンã®ãƒ—ãƒ«è¦æ±‚ã®ç¾åœ¨ã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚Ansible モジュールã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ã¨ã£ã¦ä¸å¯æ¬ ãªãƒ„ールã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:92 msgid "`jctanner's Ansible Tools `_ - miscellaneous collection of useful helper scripts for Ansible development." msgstr "`jctanner ã® Ansible ツール `_ - Ansible 開発ã«å½¹ç«‹ã¤ãƒ˜ãƒ«ãƒ‘ースクリプトã®ã•ã¾ã–ã¾ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚" #: ../../rst/community/other_tools_and_programs.rst:98 msgid "Tools for validating playbooks" msgstr "Playbook を検証ã™ã‚‹ãŸã‚ã®ãƒ„ール" #: ../../rst/community/other_tools_and_programs.rst:100 msgid "`Ansible Lint `_ - a highly configurable linter for Ansible playbooks." msgstr "`Ansible Lint `_ - Ansible Playbook ã®é«˜åº¦ãªè¨­å®šå¯èƒ½ãªæ–‡æ³•ãƒã‚§ãƒƒã‚¯ãƒ—ログラムã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:101 msgid "`Ansible Review `_ - an extension of Ansible Lint designed for code review." msgstr "`Ansible Review `_ - コードレビュー用ã«è¨­è¨ˆã•れ㟠Ansible Lint ã®æ‹¡å¼µæ©Ÿèƒ½ã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:102 msgid "`Molecule `_ - a testing framework for Ansible plays and roles." msgstr "`Molecule `_ - ã¯ã€Anbile ã«ã‚ˆã‚‹ Ansible ã®ãƒ—レイãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆãƒ•レームワークã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:103 msgid "`yamllint `__ - a command-line utility to check syntax validity including key repetition and indentation issues." msgstr "`yamllint `__ - キーã®ç¹°ã‚Šè¿”ã—やインデントã®å•題ãªã©ã€æ§‹æ–‡ã®æœ‰åŠ¹æ€§ã‚’ç¢ºèªã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:108 msgid "Other tools" msgstr "ãã®ä»–ã®ãƒ„ール" #: ../../rst/community/other_tools_and_programs.rst:110 msgid "`Ansible cmdb `_ - takes the output of Ansible's fact gathering and converts it into a static HTML overview page containing system configuration information." msgstr "`Ansible cmdb `_ - Ansible ã®ãƒ•ァクトåŽé›†ã®å‡ºåŠ›ã‚’å—ã‘å–りã€ã‚·ã‚¹ãƒ†ãƒ è¨­å®šæƒ…å ±ãŒå«ã¾ã‚Œã‚‹é™çš„ HTML 概è¦ãƒšãƒ¼ã‚¸ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:111 msgid "`Ansible Inventory Grapher `_ - visually displays inventory inheritance hierarchies and at what level a variable is defined in inventory." msgstr "`Ansible Inventory Grapher `_ - インベントリーã®ç¶™æ‰¿éšŽå±¤ã¨ã€å¤‰æ•°ãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§å®šç¾©ã•れã¦ã„るレベルを視覚的ã«è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:112 msgid "`Ansible Playbook Grapher `_ - a command line tool to create a graph representing your Ansible playbook tasks and roles." msgstr "`Ansible Playbook Grapher `_ - Ansible Playbook ã®ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’表ã™ã‚°ãƒ©ãƒ•を作æˆã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ„ールã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:113 msgid "`Ansible Shell `_ - an interactive shell for Ansible with built-in tab completion for all the modules." msgstr "`Ansible Shell `_ - ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¿ãƒ–補完ãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ Ansible 用ã®ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–シェルã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:114 msgid "`Ansible Silo `_ - a self-contained Ansible environment by Docker." msgstr "`Ansible Silo `_ - Docker ã«ã‚ˆã‚‹è‡ªå·±å®Œçµåž‹ã® Ansible 環境ã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:115 msgid "`Ansigenome `_ - a command line tool designed to help you manage your Ansible roles." msgstr "`Ansigenome `_ - Ansible ロールã®ç®¡ç†ã«å½¹ç«‹ã¤ã‚ˆã†ã«è¨­è¨ˆã•れãŸã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ„ールã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:116 msgid "`ARA `_ - ARA Records Ansible playbooks and makes them easier to understand and troubleshoot with a reporting API, UI and CLI." msgstr "`ARA `_ - ARAã¯Ansibleプレイブックを記録ã—ã€ãƒ¬ãƒãƒ¼ãƒˆAPIã€UIã€CLIを使用ã—ã¦ç†è§£ã¨ãƒˆãƒ©ãƒ–ルシューティングを容易ã«ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:117 msgid "`Awesome Ansible `_ - a collaboratively curated list of awesome Ansible resources." msgstr "`Awesome Ansible `_ - Awesome Ansible リソースã®å…±åŒã‚­ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã®ä¸€è¦§ã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:118 msgid "`AWX `_ - provides a web-based user interface, REST API, and task engine built on top of Ansible. Red Hat Ansible Automation Platform includes code from AWX." msgstr "`AWX `_ - Ansible ä¸Šã«æ§‹ç¯‰ã•れ㟠Web ベースã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã€REST APIã€ãŠã‚ˆã³ã‚¿ã‚¹ã‚¯ã‚¨ãƒ³ã‚¸ãƒ³ã‚’æä¾›ã—ã¾ã™ã€‚Red Hat Ansible Automation Platform ã«ã¯ã€AWX ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:119 msgid "`Mitogen for Ansible `_ - uses the `Mitogen `_ library to execute Ansible playbooks in a more efficient way (decreases the execution time)." msgstr "`Mitogen for Ansible `_ - `Mitogen `_ ライブラリーを使用ã—ã¦ã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ãªæ–¹æ³•ã§ Ansible Playbook を実行ã—ã¾ã™ (実行時間を短縮ã—ã¾ã™)。" #: ../../rst/community/other_tools_and_programs.rst:120 msgid "`nanvault `_ - a standalone tool to encrypt and decrypt files in the Ansible Vault format, featuring UNIX-style composability." msgstr "`nanvault `_ - UNIX å½¢å¼ã®æ§‹æˆæ©Ÿèƒ½ã‚’å‚™ãˆãŸ Ansible Vault å½¢å¼ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–ãŠã‚ˆã³å¾©å·ã‚’行ã†ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ„ールã§ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:121 msgid "`OpsTools-ansible `_ - uses Ansible to configure an environment that provides the support of `OpsTools `_, namely centralized logging and analysis, availability monitoring, and performance monitoring." msgstr "`OpsTools-ansible `_ - Ansible を使用ã—㦠`OpsTools `_ ã®ã‚µãƒãƒ¼ãƒˆã‚’æä¾›ã™ã‚‹ç’°å¢ƒ (中央型ロギングã¨åˆ†æžã€å¯ç”¨æ€§ç›£è¦–ã€ãƒ‘フォーマンスã®ç›£è¦–ãªã©) を設定ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:122 msgid "`TD4A `_ - a template designer for automation. TD4A is a visual design aid for building and testing jinja2 templates. It will combine data in yaml format with a jinja2 template and render the output." msgstr "`TD4A `_ - 自動化ã®ãƒ†ãƒ³ãƒ—レートデザイナー。TD4A ã¯ã€jinja2 ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ§‹ç¯‰ã¨ãƒ†ã‚¹ãƒˆã‚’行ã†ãŸã‚ã®è¦–覚的ãªè¨­è¨ˆæ”¯æ´ãƒ„ールã§ã™ã€‚ã“れã¯ã€yaml å½¢å¼ã®ãƒ‡ãƒ¼ã‚¿ã‚’ jinja2 テンプレートã¨çµ„ã¿åˆã‚ã›ã€å‡ºåŠ›ã‚’ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã—ã¾ã™ã€‚" #: ../../rst/community/other_tools_and_programs.rst:123 msgid "`PHP-Ansible `_ - an object oriented Ansible wrapper for PHP." msgstr "`PHP-Ansible `_: PHP ã®ã‚ªãƒ–ジェクト指å‘ã® Ansible ラッパー。" #: ../../rst/community/release_managers.rst:5 msgid "Release Manager Guidelines" msgstr "リリースマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/community/release_managers.rst:9 msgid "The release manager's purpose is to ensure a smooth release. To achieve that goal, they need to coordinate between:" msgstr "リリースマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ç›®çš„ã¯ã€ã‚¹ãƒ ãƒ¼ã‚ºãªãƒªãƒªãƒ¼ã‚¹ã‚’確ä¿ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“ã®ç›®çš„ã‚’é”æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã«ã¤ã„ã¦èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:12 msgid "Developers with commit privileges on the `Ansible GitHub repository `_" msgstr "`Ansible GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã§ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’æŒã¤é–‹ç™ºè€…" #: ../../rst/community/release_managers.rst:13 msgid "Contributors without commit privileges" msgstr "コミット権é™ã®ãªã„貢献者" #: ../../rst/community/release_managers.rst:14 msgid "The community" msgstr "コミュニティー" #: ../../rst/community/release_managers.rst:15 msgid "Ansible documentation team" msgstr "Ansible ドキュメントãƒãƒ¼ãƒ " #: ../../rst/community/release_managers.rst:18 msgid "Pre-releases: what and why" msgstr "プレリリース: 何を/ãªãœ" #: ../../rst/community/release_managers.rst:20 msgid "Pre-releases exist to draw testers. They give people who don't feel comfortable running from source control a means to get an early version of the code to test and give us feedback. To ensure we get good feedback about a release, we need to make sure all major changes in a release are put into a pre-release. Testers must be given time to test those changes before the final release. Ideally we want there to be sufficient time between pre-releases for people to install and test one version for a span of time. Then they can spend more time using the new code than installing the latest version." msgstr "プレリリース版ã¯ãƒ†ã‚¹ã‚¿ãƒ¼ã‚’集ã‚ã‚‹ãŸã‚ã«å­˜åœ¨ã—ã¾ã™ã€‚プレリリースã¯ã€ã‚½ãƒ¼ã‚¹ç®¡ç†ã‹ã‚‰ã®å®Ÿè¡Œã«ä¸å®‰ã‚’感ã˜ã¦ã„るユーザーã«ã€åˆæœŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¼ãƒ‰ã‚’手ã«å…¥ã‚Œã¦ãƒ†ã‚¹ãƒˆã‚’ã—ãŸã‚Šã€ãƒ•ィードãƒãƒƒã‚¯ã‚’è¡Œã†æ‰‹æ®µã‚’æä¾›ã—ã¾ã™ã€‚リリースã«é–¢ã™ã‚‹é©åˆ‡ãªãƒ•ィードãƒãƒƒã‚¯ã‚’確実ã«å¾—ã‚‹ã«ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã™ã‚‹ä¸»è¦ãªå¤‰æ›´ãŒã™ã¹ã¦ãƒ—レリリースã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„るよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚テスターã«ã¯ã€æœ€çµ‚リリースã®å‰ã«ã“れらã®å¤‰æ›´ã‚’テストã™ã‚‹æ™‚é–“ãŒä¸Žãˆã‚‰ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プレリリースã¨ãƒ—レリリースã®é–“ã«ã€1 ã¤ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã—ã¦ãƒ†ã‚¹ãƒˆã™ã‚‹ã®ã«ååˆ†ãªæ™‚間を確ä¿ã™ã‚‹ã®ãŒç†æƒ³çš„ã§ã™ã€‚ãã†ã™ã‚Œã°ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã‚ˆã‚Šã‚‚ã€æ–°ã—ã„コードを使用ã™ã‚‹ã“ã¨ã«å¤šãã®æ™‚間を費やã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:28 msgid "The right length of time for a tester is probably around two weeks. However, for our three-to-four month development cycle to work, we compress this down to one week; any less runs the risk of people spending more time installing the code instead of running it. However, if there's a time crunch (with a release date that cannot slip), it is better to release with new changes than to hold back those changes to give people time to test between. People cannot test what is not released, so we have to get those tarballs out there even if people feel they have to install more frequently." msgstr "テスターã«ã¨ã£ã¦é©åˆ‡ãªæœŸé–“ã¯ã€ãŠãら 2 週間程度ã§ã™ã€‚ãŸã ã—ã€3 ~ 4ã‹æœˆã®é–‹ç™ºã‚µã‚¤ã‚¯ãƒ«ã‚’機能ã•ã›ã‚‹ãŸã‚ã«ã€ã“ã®æœŸé–“ã‚’ 1 週間ã«çŸ­ç¸®ã—ã¦ã„ã¾ã™ã€‚ã“れより短ããªã‚‹ã¨ã€ã‚³ãƒ¼ãƒ‰ã‚’実行ã™ã‚‹ä»£ã‚りã«ã‚³ãƒ¼ãƒ‰ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤šãã®æ™‚間を費やã—ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã ã—ã€æ™‚é–“çš„ãªåˆ¶ç´„ãŒã‚ã‚‹å ´åˆã¯ (リリース日ãŒãšã‚Œãªã„よã†ã«ã™ã‚‹ã«ã¯)ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒ†ã‚¹ãƒˆã™ã‚‹æ™‚間を与ãˆã‚‹ãŸã‚ã«å¤‰æ›´ã‚’ä¿ç•™ã™ã‚‹ã‚ˆã‚Šã‚‚ã€æ–°ã—ã„変更を加ãˆã¦ãƒªãƒªãƒ¼ã‚¹ã™ã‚‹æ–¹ãŒè‰¯ã„ã§ã—ょã†ã€‚リリースã•れã¦ã„ãªã„ã‚‚ã®ã¯ãƒ†ã‚¹ãƒˆã§ããªã„ãŸã‚ã€ãŸã¨ãˆã‚ˆã‚Šé »ç¹ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãªã‘れã°ãªã‚‰ãªã„ã¨æ€ã‚れる場åˆã§ã‚‚ã€ãã® tarball ã¯å…¬é–‹ã™ã¹ãã§ã™ã€‚" #: ../../rst/community/release_managers.rst:37 msgid "Beta releases" msgstr "ベータリリース" #: ../../rst/community/release_managers.rst:39 msgid "In a beta release, we know there are still bugs. We will continue to accept fixes for these. Although we review these fixes, sometimes they can be invasive or potentially destabilize other areas of the code." msgstr "ベータリリースã§ã¯ã€ãƒã‚°ãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã“ã¨ãŒèªè­˜ã•れã¦ã„ã¾ã™ã€‚ã“れらã®ä¿®æ­£ã¯ä»Šå¾Œã‚‚å—ã‘入れã¦ã„ãã¾ã™ã€‚ã“れらã®ä¿®æ­£ã¯ç¢ºèªã•れã¾ã™ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯ä¾µè¥²çš„ã§ã‚ã£ãŸã‚Šã€ã‚³ãƒ¼ãƒ‰ã®ä»–ã®é ˜åŸŸã‚’ä¸å®‰å®šã«ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:43 msgid "During the beta, we will no longer accept feature submissions." msgstr "ベータ版ã§ã¯ã€æ©Ÿèƒ½ã®æå‡ºã¯å—ã‘付ã‘ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:47 msgid "Release candidates" msgstr "Release Candidate (リリースã®å€™è£œ)" #: ../../rst/community/release_managers.rst:49 msgid "In a release candidate, we've fixed all known blockers. Any remaining bugfixes are ones that we are willing to leave out of the release. At this point we need user testing to determine if there are any other blocker bugs lurking." msgstr "リリース候補ã§ã¯ã€æ—¢çŸ¥ã®ã™ã¹ã¦ã®ãƒ–ロッカーを修正ã—ã¾ã—ãŸã€‚残ã£ã¦ã„ã‚‹ãƒã‚°ä¿®æ­£ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰é™¤å¤–ã—ã¦ã‚‚æ§‹ã‚ãªã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚ã“ã®æ™‚点ã§ã€ä»–ã«ã‚‚ブロッカーãƒã‚°ãŒæ½œã‚“ã§ã„ãªã„ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ†ã‚¹ãƒˆã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:53 msgid "Blocker bugs generally are those that cause significant problems for users. Regressions are more likely to be considered blockers because they will break present users' usage of Ansible." msgstr "ブロッカーãƒã‚°ã¨ã¯ã€ä¸€èˆ¬çš„ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é‡å¤§ãªå•題を引ãèµ·ã“ã™ãƒã‚°ã®ã“ã¨ã§ã™ã€‚リグレッションã¯ã€ç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã® Ansible ã®ä½¿ç”¨æ–¹æ³•ã«æ”¯éšœã‚’ããŸã™ãŸã‚ã€ãƒ–ロッカーã¨è¦‹ãªã•れるå¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:56 msgid "The Release Manager will cherry-pick fixes for new release blockers. The release manager will also choose whether to accept bugfixes for isolated areas of the code or defer those to the next minor release. By themselves, non-blocker bugs will not trigger a new release; they will only make it into the next major release if blocker bugs require that a new release be made." msgstr "リリースマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã€æ–°ã—ã„リリースã®ãƒ–ロッカーã®ä¿®æ­£ã‚’é¸æŠžã—ã¾ã™ã€‚ã¾ãŸã€ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã€ã‚³ãƒ¼ãƒ‰ã®å­¤ç«‹ã—ãŸéƒ¨åˆ†ã®ãƒã‚°ä¿®æ­£ã‚’å—ã‘入れるã‹ã€æ¬¡ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¾ã§å—ã‘入れを延ã°ã™ã‚’é¸æŠžã—ã¾ã™ã€‚å˜ç‹¬ã§ã¯ã€ãƒ–ロッカー以外ã®ãƒã‚°ã¯æ–°ã—ã„リリースã®ãƒˆãƒªã‚¬ãƒ¼ã«ã¯ãªã‚Šã¾ã›ã‚“。ブロッカーã®ãƒã‚°ã«ã‚ˆã‚Šæ–°ã—ã„リリースを作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã®ã¿ã€æ¬¡ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:61 msgid "The last RC should be as close to the final as possible. The following things may be changed:" msgstr "最後ã®ãƒ—ãƒ«è¦æ±‚ã¯å¯èƒ½ãªé™ã‚Šæœ€çµ‚版ã«è¿‘ã„ã‚‚ã®ã¨ãªã‚‹ã¯ãšã§ã™ã€‚以下ã®ç‚¹ãŒå¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:63 msgid "Version numbers are changed automatically and will differ as the pre-release tags are removed from the versions." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒè‡ªå‹•çš„ã«å¤‰æ›´ã•れã€ãƒ—レリリースã®ã‚¿ã‚°ãŒå‰Šé™¤ã•れるã¨ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:65 msgid "Tests and :file:`docs/docsite/` can differ if really needed as they do not break runtime. However, the release manager may still reject them as they have the potential to cause breakage that will be visible during the release process." msgstr "テストãŠã‚ˆã³ :file:`docs/docsite/` ã¯ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã‚’ç ´æã—ãªã„ãŸã‚ã€æœ¬å½“ã«å¿…è¦ã§ã‚れã°å¤‰æ›´ã—ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“。ãŸã ã—ã€ãƒªãƒªãƒ¼ã‚¹ãƒ—ロセス時ã«ç›®ã«è¦‹ãˆã‚‹ç ´æã‚’引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã¯ã€ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒæ‹’å¦ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:69 msgid "We want to specifically emphasize that code (in :file:`bin/`, :file:`lib/ansible/`, and :file:`setup.py`) must be the same unless there are extraordinary extenuating circumstances. If there are extenuating circumstances, the Release Manager is responsible for notifying groups which would want to test the code." msgstr "特別ãªäº‹æƒ…ãŒãªã„é™ã‚Šã€(:file:`bin/`ã€:file:`lib/ansible/`ã€ãŠã‚ˆã³ :file:`setup.py` ã®) コードã¯åŒã˜ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。特別ãªäº‹æƒ…ãŒã‚ã‚‹å ´åˆã¯ã€ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«ã€ã‚³ãƒ¼ãƒ‰ã‚’テストã—ãŸã„グループã«é€šçŸ¥ã™ã‚‹è²¬ä»»ãŒã‚りã¾ã™ã€‚" #: ../../rst/community/release_managers.rst:76 msgid "Ansible release process" msgstr "Ansible リリースプロセス" #: ../../rst/community/release_managers.rst:78 msgid "The release process is kept in a `separate document `_ so that it can be easily updated during a release. If you need access to edit this, please ask one of the current release managers to add you." msgstr "リリースプロセスã¯ã€ãƒªãƒªãƒ¼ã‚¹ä¸­ã«ç°¡å˜ã«æ›´æ–°ã§ãるよã†ã«ã€`別ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `_ ã«ä¿å­˜ã•れã¦ã„ã¾ã™ã€‚ã“れを編集ã™ã‚‹ãŸã‚ã®ã‚¢ã‚¯ã‚»ã‚¹æ¨©ãŒå¿…è¦ãªå ´åˆã¯ã€ç¾åœ¨ã®ãƒªãƒªãƒ¼ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«è¿½åŠ ã‚’ä¾é ¼ã—ã¦ãã ã•ã„。" #: ../../rst/community/reporting_bugs_and_features.rst:5 msgid "Reporting bugs and requesting features" msgstr "ãƒã‚°ã®å ±å‘ŠãŠã‚ˆã³æ©Ÿèƒ½ã®è¦æ±‚" #: ../../rst/community/reporting_bugs_and_features.rst:13 msgid "Reporting a bug" msgstr "ãƒã‚°ã®å ±å‘Š" #: ../../rst/community/reporting_bugs_and_features.rst:16 msgid "Security bugs" msgstr "セキュリティーãƒã‚°" #: ../../rst/community/reporting_bugs_and_features.rst:18 msgid "Ansible practices responsible disclosure - if this is a security-related bug, email `security@ansible.com `_ instead of filing a ticket or posting to any public groups, and you will receive a prompt response." msgstr "Ansible ã¯è²¬ä»»ã®ã‚る開示を実践ã—ã¦ã„ã¾ã™ã€‚ã“れãŒã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼é–¢é€£ã®ãƒã‚°ã§ã‚ã‚‹å ´åˆã¯ã€ä»»æ„ã®ãƒ‘ブリックグループã«ãƒã‚±ãƒƒãƒˆã‚’作æˆã¾ãŸã¯æŠ•稿ã™ã‚‹ã®ã§ã¯ãªãã€`security@ansible.com `_ ã«ãƒ¡ãƒ¼ãƒ«ã§å ±å‘Šã—ã¦ãã ã•ã„。迅速ã«å¯¾å¿œã•れã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:21 msgid "Bugs in ansible-core" msgstr "ansible-core ã®ãƒã‚°" #: ../../rst/community/reporting_bugs_and_features.rst:23 msgid "If you find a bug that affects multiple plugins, a plugin that remained in the ansible/ansible repo, or the overall functioning of Ansible, report it to `github.com/ansible/ansible/issues `_. You need a free GitHub account. Before reporting a bug, use the bug/issue search to see if the issue has already been reported. If you are not sure if something is a bug yet, you can report the behavior on the :ref:`mailing list or community chat first `." msgstr "複数ã®ãƒ—ラグインã€ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã«æ®‹ã£ã¦ã„るプラグインã€ã¾ãŸã¯ Ansible ã®å…¨ä½“çš„ãªæ©Ÿèƒ½ã«å½±éŸ¿ã‚’与ãˆã‚‹ãƒã‚°ã¯ã€`github.com/ansible/ansible/issues `_ ã«å ±å‘Šã—ã¾ã™ã€‚無料㮠GitHub アカウントãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ãƒã‚°ã‚’報告ã™ã‚‹å‰ã«ã€ãƒã‚°/å•題検索を使用ã—ã¦ã€ãã®å•題ãŒã™ã§ã«å ±å‘Šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚ãƒã‚°ã‹ã©ã†ã‹åˆ†ã‹ã‚‰ãªã„å ´åˆã¯ã€:ref:`mailing list or community chat first ` ã«å‹•作を報告ã§ãã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:25 msgid "Do not open issues for \"how do I do this\" type questions. These are great topics for community chat channels or a mailing list, where things are likely to be more of a discussion." msgstr "「How do I do this (ã©ã†ã™ã‚Œã°ã„ã„ã®ã‹)ã€ã¨ã„ã†ã‚¿ã‚¤ãƒ—ã®è³ªå•ã§ã€å•題を作æˆã—ãªã„ã§ãã ã•ã„。ã“ã®ã‚¿ã‚¤ãƒ—ã®å•題ã¯ã€è‰²ã€…ãªå†…容ãŒè­°è«–ã•れるå¯èƒ½æ€§ãŒé«˜ã„コミュニティーãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¾ãŸã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§é©åˆ‡ãªãƒˆãƒ”ックã§ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:27 msgid "If you find a bug, open the issue yourself to ensure we have a record of it. Do not rely on someone else in the community to file the bug report for you. We have created an issue template, which saves time and helps us help everyone with their issues more quickly. Please fill it out as completely and as accurately as possible:" msgstr "ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€è‡ªåˆ†ã§å•題を作æˆã—ã¦ã€è¨˜éŒ²ã•れãŸã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。コミュニティーã®ä»–ã®èª°ã‹ãŒãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’æå‡ºã™ã‚‹ã®ã‚’å¾…ãŸãªã„ã§ãã ã•ã„。å•題テンプレートを作æˆã—ã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€æ™‚間を節約ã—ã€ã™ã¹ã¦ã®äººãŒãã®å•題をより迅速ã«è§£æ±ºã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã§ãã‚‹ã ã‘完全ã‹ã¤æ­£ç¢ºã«è¨˜å…¥ã—ã¦ãã ã•ã„。" #: ../../rst/community/reporting_bugs_and_features.rst:29 msgid "Include the Ansible version" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®è¨˜è¼‰" #: ../../rst/community/reporting_bugs_and_features.rst:30 msgid "Include any relevant configuration" msgstr "関連ã™ã‚‹è¨­å®šã®è¨˜è¼‰" #: ../../rst/community/reporting_bugs_and_features.rst:31 msgid "Include the exact commands or tasks you are running" msgstr "実行ã™ã‚‹æ­£ç¢ºãªã‚³ãƒžãƒ³ãƒ‰ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã®è¨˜è¼‰" #: ../../rst/community/reporting_bugs_and_features.rst:32 msgid "Describe the behavior you expected" msgstr "期待ã•れる動作ã®èª¬æ˜Ž" #: ../../rst/community/reporting_bugs_and_features.rst:33 msgid "Provide steps to reproduce the bug * Use minimal well-reduced and well-commented examples, not your entire production playbook * When sharing YAML in playbooks, preserve the formatting by using `code blocks `_." msgstr "ãƒã‚°ã‚’å†ç¾ã™ã‚‹ãŸã‚ã®æ‰‹é †ã®è¨˜è¼‰ * 実稼åƒã§ä½¿ç”¨ã™ã‚‹ Playbook 全体ã§ã¯ãªãã€å¿…è¦ãªæœ€å°é™ã®éƒ¨åˆ†ã ã‘ã‚’å–り出ã—ã€è©³ç´°ãªèª¬æ˜Žã‚’記載 * Playbook ã§ YAML を共有ã™ã‚‹å ´åˆã¯ã€`コードブロック `_ を使用ã—ã¦å½¢å¼ã‚’æ•´ç†ã—ã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:36 msgid "Document the behavior you got" msgstr "発生ã—ãŸå‹•作ã®è¨˜è¿°" #: ../../rst/community/reporting_bugs_and_features.rst:37 msgid "Include output where possible" msgstr "å¯èƒ½ãªå ´åˆã¯å‡ºåŠ›çµæžœã®è¨˜è¼‰" #: ../../rst/community/reporting_bugs_and_features.rst:38 msgid "For multiple-file content, use gist.github.com, which is more durable than pastebin content" msgstr "コンテンツãŒè¤‡æ•°ãƒ•ァイルã®å ´åˆã¯ã€gist.github.com を使用ã—ã¾ã™ã€‚ã“れ㯠pastebin コンテンツよりも永続的ã§ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:43 msgid "Bugs in collections" msgstr "コレクションã®ãƒã‚°" #: ../../rst/community/reporting_bugs_and_features.rst:45 msgid "Many bugs only affect a single module or plugin. If you find a bug that affects a module or plugin hosted in a collection, file the bug in the repository of the :ref:`collection `:" msgstr "多ãã®ãƒã‚°ã¯ã€å˜ä¸€ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã«ã®ã¿å½±éŸ¿ã—ã¾ã™ã€‚コレクションã§ãƒ›ã‚¹ãƒˆã•れるモジュールã¾ãŸã¯ãƒ—ラグインã«å½±éŸ¿ã™ã‚‹ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€:ref:`コレクション ` ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ãƒã‚°ã‚’報告ã—ã¦ãã ã•ã„。" #: ../../rst/community/reporting_bugs_and_features.rst:47 msgid "Find the collection on `Galaxy `_." msgstr "`Galaxy ` ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:48 msgid "Click on the Issue Tracker link for that collection." msgstr "ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® Issue Tracker リンクをクリックã—ã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:49 msgid "Follow the contributor guidelines or instructions in the collection repo." msgstr "貢献者å‘ã‘ガイドラインã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®æŒ‡ç¤ºã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/community/reporting_bugs_and_features.rst:51 msgid "If you are not sure whether a bug is in ansible-core or in a collection, you can report the behavior on the :ref:`mailing list or community chat channel first `." msgstr "ãƒã‚°ãŒ ansible-core ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã©ã¡ã‚‰ã«ã‚ã‚‹ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€:ref:`mailing list or community chat channel first ` ã«å‹•作を報告ã§ãã¾ã™ã€‚" #: ../../rst/community/reporting_bugs_and_features.rst:56 msgid "Requesting a feature" msgstr "æ©Ÿèƒ½è¦æ±‚" #: ../../rst/community/reporting_bugs_and_features.rst:58 msgid "The best way to get a feature into Ansible is to :ref:`submit a pull request `, either against ansible-core or against a collection. See also :ref:`ansible_collection_merge_requirements`." msgstr "Ansible ã«æ©Ÿèƒ½ã‚’å–り組むãŸã‚ã®æœ€è‰¯ã®æ–¹æ³•ã¯ã€ansible-core ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å¯¾ã—㦠:ref:`ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ ` ã™ã‚‹ã“ã¨ã§ã™ã€‚「:ref:`ansible_collection_merge_requirements`ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/community/reporting_bugs_and_features.rst:60 msgid "You can also submit a feature request through opening an issue in the `ansible/ansible `_ for ``ansible-core`` or in a corresponding collection repository (refer to the :ref:`Bugs in collections` section to learn how to find a proper issue tracker)." msgstr "``ansible-core``ã®`ansible/ansible `_ã¾ãŸã¯å¯¾å¿œã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªã§å•題を開ã„ã¦ã€æ©Ÿèƒ½ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’æå‡ºã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ (é©åˆ‡ãªèª²é¡Œè¿½è·¡ã‚·ã‚¹ãƒ†ãƒ ã‚’見ã¤ã‘る方法を知るã«ã¯ã€:ref:`Bugs in collections`セクションをå‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/community/triage_process.rst:3 msgid "Triage Process" msgstr "トリアージプロセス" #: ../../rst/community/triage_process.rst:5 msgid "The issue and PR triage processes are driven by the `Ansibot `_. Whenever an issue or PR is filed, the Ansibot examines the issue to ensure that all relevant data is present, and handles the routing of the issue as it works its way to eventual completion." msgstr "å•題ãŠã‚ˆã³ãƒ—ãƒ«è¦æ±‚ã®ãƒˆãƒªã‚¢ãƒ¼ã‚¸ãƒ¼ãƒ—ロセス㯠`Ansibot `_ ã«ã‚ˆã£ã¦å®Ÿè¡Œã•れã¾ã™ã€‚å•é¡Œã‚„ãƒ—ãƒ«è¦æ±‚ãŒå ±å‘Šã•れるãŸã³ã«ã€Ansibot ã¯å•題を調ã¹ã€ã™ã¹ã¦ã®é–¢é€£ãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã—ã€æœ€çµ‚çš„ãªå®Œæˆã«å‘ã‘ã¦å•題ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’処ç†ã—ã¾ã™ã€‚" #: ../../rst/community/triage_process.rst:7 msgid "For details on how Ansibot manages the triage process, please consult the `Ansibot Issue Guide `_." msgstr "Ansibot ã«ã‚ˆã‚‹ãƒˆãƒªã‚¢ãƒ¼ã‚¸ãƒ—ロセスã®ç®¡ç†æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ`Ansibot å•題ガイド `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "These are the guidelines for people with commit privileges on the Ansible GitHub repository. Committers are essentially acting as members of the Ansible Core team, although not necessarily as employees of Ansible and Red Hat. Please read the guidelines before you commit." #~ msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€Ansible GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ä¸Šã§ã‚³ãƒŸãƒƒãƒˆæ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãŸã‚ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã™ã€‚コミット担当者ã¯ã€åŸºæœ¬çš„ã« Ansible Core ãƒãƒ¼ãƒ ã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦æ´»å‹•ã—ã¦ã„ã¾ã™ãŒã€Ansible ãŠã‚ˆã³ Red Hat ã®å¾“業員ã§ã‚ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“。コミットã™ã‚‹å‰ã«ã“ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’ãŠèª­ã¿ãã ã•ã„。" #~ msgid "Don't" #~ msgstr "ã—ã¦ã¯ã„ã‘ãªã„ã“ã¨" #~ msgid "Drag your community team members down. Always discuss the technical merits, but you should never address the person's limitations (you can later go for beers and call them idiots, but not in IRC/GitHub/and so on)." #~ msgstr "コミュニティーãƒãƒ¼ãƒ ã®ãƒ¡ãƒ³ãƒãƒ¼ã®è¶³ã‚’引ã£å¼µã‚‹ã€‚技術的ãªãƒ¡ãƒªãƒƒãƒˆã«ã¤ã„ã¦ã¯å¸¸ã«è­°è«–ã™ã‚‹ã¹ãã§ã™ãŒã€ä¸€å€‹äººã®é™ç•Œã«ã¤ã„ã¦ã¯æ±ºã—ã¦è¨€åŠã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“ (IRCã€GitHub ãªã©ã§ã¯ç‰¹ã«æ³¨æ„ã—ã¦ãã ã•ã„)。" #~ msgid "Forget about the maintenance burden. Some things are really cool to have, but they might not be worth shoehorning in if the maintenance burden is too great." #~ msgstr "メンテナンスã®è² æ‹…を考ãˆãªã„。ãã®æ©Ÿèƒ½ãŒæœ¬å½“ã«å„ªã‚Œã¦ã„ã¦ã‚‚ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã®è² æ‹…ãŒå¤§ãã™ãŽã‚‹å ´åˆã¯ã€çµ„ã¿è¾¼ã‚€ä¾¡å€¤ãŒãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。" #~ msgid "People" #~ msgstr "ユーザー" #~ msgid "Individuals who've been asked to become a part of this group have generally been contributing in significant ways to the Ansible community for some time. Should they agree, they are requested to add their names and GitHub IDs to this file, in the section below, through a pull request. Doing so indicates that these individuals agree to act in the ways that their fellow committers trust that they will act." #~ msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€å“¡ã«ãªã‚‹ã“ã¨ã‚’å°‹ã­ã‚‰ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€é€šå¸¸ã€ã—ã°ã‚‰ãã®é–“ Ansible コミュニティーã«é‡è¦ãªè²¢çŒ®ã‚’ã—ã¦ããŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚åŒæ„ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ä»¥ä¸‹ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹ã“ã®ãƒ•ァイルã«åå‰ã¨ GitHub ID ã‚’ãƒ—ãƒ«è¦æ±‚ã§è¿½åŠ ã—ã¦ãã ã•ã„。ã“ã®æ“作ã¯ã€ãã®ä»–ã®ã‚³ãƒŸãƒƒãƒˆæ‹…当者ã«ä¿¡é ¼ã—ã¦ã‚‚らãˆã‚‹è¡Œå‹•ã‚’ã¨ã‚‹ã“ã¨ã«åŒæ„ã—ã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚" #~ msgid "Name" #~ msgstr "åå‰" #~ msgid "GitHub ID" #~ msgstr "GitHub ID" #~ msgid "IRC Nick" #~ msgstr "IRC ニック" #~ msgid "Other" #~ msgstr "ãã®ä»–" #~ msgid "James Cammarata" #~ msgstr "James Cammarata" #~ msgid "jimi-c" #~ msgstr "jimi-c" #~ msgid "jimi" #~ msgstr "jimi" #~ msgid "Brian Coca" #~ msgstr "Brian Coca" #~ msgid "bcoca" #~ msgstr "bcoca" #~ msgid "Matt Davis" #~ msgstr "Matt Davis" #~ msgid "nitzmahone" #~ msgstr "nitzmahone" #~ msgid "Toshio Kuratomi" #~ msgstr "Toshio Kuratomi" #~ msgid "abadger" #~ msgstr "abadger" #~ msgid "abadger1999" #~ msgstr "abadger1999" #~ msgid "Jason McKerr" #~ msgstr "Jason McKerr" #~ msgid "mckerrj" #~ msgstr "mckerrj" #~ msgid "newtMcKerr" #~ msgstr "newtMcKerr" #~ msgid "Robyn Bergeron" #~ msgstr "Robyn Bergeron" #~ msgid "robynbergeron" #~ msgstr "robynbergeron" #~ msgid "rbergeron" #~ msgstr "rbergeron" #~ msgid "Greg DeKoenigsberg" #~ msgstr "Greg DeKoenigsberg" #~ msgid "gregdek" #~ msgstr "gregdek" #~ msgid "Monty Taylor" #~ msgstr "Monty Taylor" #~ msgid "emonty" #~ msgstr "emonty" #~ msgid "mordred" #~ msgstr "mordred" #~ msgid "Matt Martz" #~ msgstr "Matt Martz" #~ msgid "sivel" #~ msgstr "sivel" #~ msgid "Nate Case" #~ msgstr "Nate Case" #~ msgid "qalthos" #~ msgstr "qalthos" #~ msgid "Qalthos" #~ msgstr "Qalthos" #~ msgid "James Tanner" #~ msgstr "James Tanner" #~ msgid "jctanner" #~ msgstr "jctanner" #~ msgid "jtanner" #~ msgstr "jtanner" #~ msgid "Peter Sprygada" #~ msgstr "Peter Sprygada" #~ msgid "privateip" #~ msgstr "privateip" #~ msgid "Abhijit Menon-Sen" #~ msgstr "Abhijit Menon-Sen" #~ msgid "amenonsen" #~ msgstr "amenonsen" #~ msgid "crab" #~ msgstr "crab" #~ msgid "Michael Scherer" #~ msgstr "Michael Scherer" #~ msgid "mscherer" #~ msgstr "mscherer" #~ msgid "misc" #~ msgstr "misc" #~ msgid "René Moser" #~ msgstr "René Moser" #~ msgid "resmo" #~ msgstr "resmo" #~ msgid "David Shrewsbury" #~ msgstr "David Shrewsbury" #~ msgid "Shrews" #~ msgstr "Shrews" #~ msgid "Sandra Wills" #~ msgstr "Sandra Wills" #~ msgid "docschick" #~ msgstr "docschick" #~ msgid "Graham Mainwaring" #~ msgstr "Graham Mainwaring" #~ msgid "ghjm" #~ msgstr "ghjm" #~ msgid "Chris Houseknecht" #~ msgstr "Chris Houseknecht" #~ msgid "chouseknecht" #~ msgstr "chouseknecht" #~ msgid "Trond Hindenes" #~ msgstr "Trond Hindenes" #~ msgid "trondhindenes" #~ msgstr "trondhindenes" #~ msgid "Jon Hawkesworth" #~ msgstr "Jon Hawkesworth" #~ msgid "jhawkesworth" #~ msgstr "jhawkesworth" #~ msgid "Will Thames" #~ msgstr "Will Thames" #~ msgid "willthames" #~ msgstr "willthames" #~ msgid "Adrian Likins" #~ msgstr "Adrian Likins" #~ msgid "alikins" #~ msgstr "alikins" #~ msgid "Dag Wieers" #~ msgstr "Dag Wieers" #~ msgid "dagwieers" #~ msgstr "dagwieers" #~ msgid "dag@wieers.com" #~ msgstr "dag@wieers.com" #~ msgid "Tim Rupp" #~ msgstr "Tim Rupp" #~ msgid "caphrim007" #~ msgstr "caphrim007" #~ msgid "Sloane Hertel" #~ msgstr "Sloane Hertel" #~ msgid "s-hertel" #~ msgstr "s-hertel" #~ msgid "shertel" #~ msgstr "shertel" #~ msgid "Sam Doran" #~ msgstr "Sam Doran" #~ msgid "samdoran" #~ msgstr "samdoran" #~ msgid "Matt Clay" #~ msgstr "Matt Clay" #~ msgid "mattclay" #~ msgstr "mattclay" #~ msgid "Martin Krizek" #~ msgstr "Martin Krizek" #~ msgid "mkrizek" #~ msgstr "mkrizek" #~ msgid "Ganesh Nalawade" #~ msgstr "Ganesh Nalawade" #~ msgid "ganeshrn" #~ msgstr "ganeshrn" #~ msgid "Trishna Guha" #~ msgstr "Trishna Guha" #~ msgid "trishnaguha" #~ msgstr "trishnaguha" #~ msgid "trishnag" #~ msgstr "trishnag" #~ msgid "Andrew Gaffney" #~ msgstr "Andrew Gaffney" #~ msgid "agaffney" #~ msgstr "agaffney" #~ msgid "Jordan Borean" #~ msgstr "Jordan Borean" #~ msgid "jborean93" #~ msgstr "jborean93" #~ msgid "Abhijeet Kasurde" #~ msgstr "Abhijeet Kasurde" #~ msgid "Akasurde" #~ msgstr "Akasurde" #~ msgid "akasurde" #~ msgstr "akasurde" #~ msgid "Adam Miller" #~ msgstr "Adam Miller" #~ msgid "maxamillion" #~ msgstr "maxamillion" #~ msgid "Sviatoslav Sydorenko" #~ msgstr "Sviatoslav Sydorenko" #~ msgid "webknjaz" #~ msgstr "webknjaz" #~ msgid "Alicia Cozine" #~ msgstr "Alicia Cozine" #~ msgid "acozine" #~ msgstr "acozine" #~ msgid "Sandra McCann" #~ msgstr "Sandra McCann" #~ msgid "samccann" #~ msgstr "samccann" #~ msgid "Felix Fontein" #~ msgstr "Felix Fontein" #~ msgid "felixfontein" #~ msgstr "felixfontein" #~ msgid "felix@fontein.de" #~ msgstr "felix@fontein.de" #~ msgid "Please read and understand the :ref:`code_of_conduct`." #~ msgstr "「:ref:`code_of_conduct`ã€ã‚’読んã§ç†è§£ã—ã¦ãã ã•ã„。" #~ msgid "Mailing list information" #~ msgstr "ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®æƒ…å ±" #~ msgid "`Ansible Container List `_ is for users and developers of the Ansible Container project." #~ msgstr "`Ansible Container List `_ ã¯ã€Ansible Container プロジェクトã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŠã‚ˆã³é–‹ç™ºè€…å‘ã‘ã§ã™ã€‚" #~ msgid "IRC channels" #~ msgstr "IRC ãƒãƒ£ãƒãƒ«" #~ msgid "Ansible has several IRC channels on `Freenode `_." #~ msgstr "Ansible ã«ã¯ã€`Freenode `_ ã«è¤‡æ•°ã® IRC ãƒãƒ£ãƒ³ãƒãƒ«ãŒã‚りã¾ã™ã€‚" #~ msgid "Our IRC channels may require you to register your nickname. If you receive an error when you connect, see `Freenode's Nickname Registration guide `_ for instructions." #~ msgstr "ã“ã® IRC ãƒãƒ£ãƒãƒ«ã§ã¯ã€ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã®ç™»éŒ²ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚接続時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å ´åˆã¯ã€ã€Œ`Freenode's Nickname Registration guide `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "To find all ``ansible`` specific channels on a freenode network, use the following command in your IRC client::" #~ msgstr "freenode ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã™ã¹ã¦ã® ``ansible`` 固有ã®ãƒãƒ£ãƒ³ãƒãƒ«ã‚’見ã¤ã‘ã‚‹ã«ã¯ã€IRC クライアントã§ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #~ msgid "``#ansible`` - For general use questions and support." #~ msgstr "``#ansible`` - 一般的ãªä½¿ã„æ–¹ã®è³ªå•やサãƒãƒ¼ãƒˆã«ä½¿ç”¨ã€‚" #~ msgid "``#ansible-devel`` - For discussions on developer topics and code related to features or bugs." #~ msgstr "``#ansible-devel`` - 開発者ã®ãƒˆãƒ”ックや機能やãƒã‚°ã«é–¢é€£ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã«ã¤ã„ã¦è­°è«–ã™ã‚‹å ´ã€‚" #~ msgid "`Ansible Lockdown Working Group `_ | `gh/ansible/ansible-lockdown `_ - ``#ansible-lockdown``- Security playbooks/roles" #~ msgstr "`Ansible Lockdown Working Group `_ | `gh/ansible/ansible-lockdown `_ - ``#ansible-lockdown``- セキュリティー Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«" #~ msgid "`AWX Working Group `_ - ``#ansible-awx`` - Upstream for Ansible Tower" #~ msgstr "`AWX Working Group `_ - ``#ansible-awx`` - Ansible Tower ã®ã‚¢ãƒƒãƒ—ストリーム" #~ msgid "`Community Working Group `_ - ``#ansible-community`` - Including Meetups" #~ msgstr "`Community Working Group `_ - ``#ansible-community`` - Meetup ã‚’å«ã¿ã¾ã™ã€‚" #~ msgid "`Contributor Experience Working Group `_ - ``#ansible-community``" #~ msgstr "`Contributor Experience Working Group `_ - ``#ansible-community``" #~ msgid "`Lightbulb Training `_ - ``#ansible-lightbulb`` - Ansible training" #~ msgstr "`Lightbulb Training `_ - ``#ansible-lightbulb`` - Ansible トレーニング" #~ msgid "`Molecule Working Group `_ | `molecule.io `_ - ``#ansible-molecule`` - testing platform for Ansible playbooks and roles" #~ msgstr "`Molecule Working Group `_ | `molecule.io `_ - ``#ansible-molecule`` - Ansible Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ç”¨ãƒ†ã‚¹ãƒˆãƒ—ラットフォーム" #~ msgid "``#ansible-es`` - Channel for Spanish speaking Ansible community." #~ msgstr "``#ansible-es`` - スペイン語㮠Ansible コミュニティーå‘ã‘ãƒãƒ£ãƒ³ãƒãƒ«ã€‚" #~ msgid "``#ansible-eu`` - Channel for the European Ansible Community." #~ msgstr "``#ansible-eu`` - ヨーロッパ㮠Ansible コミュニティーå‘ã‘ã®ãƒãƒ£ãƒ³ãƒãƒ«ã€‚" #~ msgid "``#ansible-fr`` - Channel for French speaking Ansible community." #~ msgstr "``#ansible-fr`` - フランス語㮠Ansible コミュニティーå‘ã‘ã®ãƒãƒ£ãƒ³ãƒãƒ«ã€‚" #~ msgid "``#ansiblezh`` - Channel for Zurich/Swiss Ansible community." #~ msgstr "``#ansiblezh`` - ãƒãƒ¥ãƒ¼ãƒªãƒƒãƒ’/スイス㮠Ansible コミュニティーå‘ã‘ã®ãƒãƒ£ãƒ³ãƒãƒ«ã€‚" #~ msgid "IRC meetings" #~ msgstr "IRC ミーティング" #~ msgid "Red Hat Ansible `Tower `_ is a UI, Server, and REST endpoint for Ansible. The Red Hat Ansible Automation subscription contains support for Ansible, Ansible Tower, Ansible Automation for Networking, and more." #~ msgstr "Red Hat Ansible `Tower `_ ã¯ã€Ansible ã® UIã€ã‚µãƒ¼ãƒãƒ¼ã€ãŠã‚ˆã³ REST エンドãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚Red Hat Ansible Automation サブスクリプションã«ã¯ã€Ansibleã€Ansible Towerã€Ansible Automation for Networking ãªã©ã®ã‚µãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚" #~ msgid "Development on ``ansible-base`` occurs on two levels. At the macro level, the ``ansible-base`` developers and maintainers plan releases and track progress with roadmaps and projects. At the micro level, each PR has its own lifecycle." #~ msgstr "``ansible-base`` 開発サイクル㯠2 ã¤ã®ãƒ¬ãƒ™ãƒ«ã§è¡Œã‚れã¾ã™ã€‚マクロレベルã§ã¯ã€``ansible-base`` 開発者ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒãƒªãƒªãƒ¼ã‚¹ã‚’計画を立ã¦ã€ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ãŠã‚ˆã³ãƒ—ロジェクトを使用ã—ã¦é€²æ—を追跡ã—ã¾ã™ã€‚ミクロレベルã§ã¯ã€å„ãƒ—ãƒ«è¦æ±‚ã«ã¯ç‹¬è‡ªã®ãƒ©ã‚¤ãƒ•サイクルãŒã‚りã¾ã™ã€‚" #~ msgid "the `network bugs project `_" #~ msgstr "`network bugs project `_" #~ msgid "Changelogs help users and developers keep up with changes to Ansible. Ansible builds a changelog for each release from fragments. You **must** add a changelog fragment to any PR that changes functionality or fixes a bug in ansible-base. You do not have to add a changelog fragment for PRs that add new modules and plugins, because our tooling does that for you automatically." #~ msgstr "changelog ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚„開発者㌠Ansible ã®å¤‰æ›´æƒ…報を確èªã™ã‚‹ã®ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚Ansible ã§ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã”ã¨ã«ãƒ•ラグメントã‹ã‚‰ changelog を作æˆã—ã¾ã™ã€‚ansible-base ã®æ©Ÿèƒ½ã‚’変更ã—ãŸã‚Šãƒã‚°ã‚’修正ã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã«ã¯ã€changelog ã®ãƒ•ラグメントを追加ã™ã‚‹ **å¿…è¦ãŒã‚りã¾ã™**ã€‚ãƒ—ãƒ«è¦æ±‚ãŒã€æ–°ã—ã„モジュールやプラグインを追加ã™ã‚‹å ´åˆã¯ã€ãƒ„ールã§è‡ªå‹•çš„ã«è¡Œã‚れるãŸã‚ã€changelog ã®ãƒ•ラグメントを追加ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #~ msgid "Most changelog entries will be ``bugfixes`` or ``minor_changes``. When writing a changelog entry that pertains to a particular module, start the entry with ``- [module name] -`` and the following sentence with a lowercase letter." #~ msgstr "ã»ã¨ã‚“ã©ã® changelog エントリー㯠``bugfixes`` ã¾ãŸã¯ ``minor_changes`` ã«ãªã‚Šã¾ã™ã€‚特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢é€£ã™ã‚‹ changelog エントリーを作æˆã™ã‚‹å ´åˆã¯ã€ãã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ ``- [module name] -`` ã§å§‹ã‚ã€ç¶šã文章ã¯å°æ–‡å­—ã§è¡¨ã—ã¾ã™ã€‚" #~ msgid "To work with documentation on your local machine, you need to have python-3.5 or greater and the following packages installed:" #~ msgstr "ローカルマシンã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’扱ã†ã«ã¯ã€python-3.5 以é™ã¨ã€ä»¥ä¸‹ã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "gcc" #~ msgstr "gcc" #~ msgid "jinja2" #~ msgstr "jinja2" #~ msgid "libyaml" #~ msgstr "libyaml" #~ msgid "Pygments >= 2.4.0" #~ msgstr "Pygments 2.4.0 以é™" #~ msgid "pyparsing" #~ msgstr "pyparsing" #~ msgid "PyYAML" #~ msgstr "PyYAML" #~ msgid "rstcheck" #~ msgstr "rstcheck" #~ msgid "six" #~ msgstr "six" #~ msgid "sphinx" #~ msgstr "sphinx" #~ msgid "sphinx-notfound-page" #~ msgstr "sphinx-notfound-page" #~ msgid "straight.plugin" #~ msgstr "straight.plugin" #~ msgid "These required packages are listed in two :file:`requirements.txt` files to make installation easier:" #~ msgstr "ã“れらã®å¿…è¦ãªãƒ‘ッケージã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’容易ã«ã™ã‚‹ãŸã‚ã«ã€2 ã¤ã® :file:`requirements.txt` ファイルã«ä¸€è¦§è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚" #~ msgid "On macOS with Xcode, you may need to install ``six`` and ``pyparsing`` with ``--ignore-installed`` to get versions that work with ``sphinx``." #~ msgstr "Xcode を使用ã™ã‚‹ macOS ã§ã¯ã€``--ignore-installed`` を使用ã—㦠``six`` ãŠã‚ˆã³ ``pyparsing`` をインストールã—ã¦ã€``sphinx``. ã«å¯¾å¿œã™ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #~ msgid "`ARA `_ - records Ansible playbook runs and makes the recorded data available and intuitive for users and systems by integrating with Ansible as a callback plugin." #~ msgstr "`ARA `_ - Ansible Playbook ã®å®Ÿè¡Œã‚’記録ã—ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグインã¨ã—㦠Ansible ã¨çµ±åˆã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€è¨˜éŒ²ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’ユーザーãŠã‚ˆã³ã‚·ã‚¹ãƒ†ãƒ ãŒåˆ©ç”¨ã§ãる直感的ãªã‚‚ã®ã«ã—ã¾ã™ã€‚" #~ msgid "Ansible Tower team" #~ msgstr "Ansible Tower ãƒãƒ¼ãƒ " ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4755561 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/dev_guide.po0000644000000000000000000514027700000000000025404 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/dev_guide/collections_galaxy_meta.rst:5 msgid "Collection Galaxy metadata structure" msgstr "コレクション Galaxy メタデータ構造" #: ../../rst/dev_guide/collections_galaxy_meta.rst:7 msgid "A key component of an Ansible collection is the ``galaxy.yml`` file placed in the root directory of a collection. This file contains the metadata of the collection that is used to generate a collection artifact." msgstr "Ansible コレクションã®ä¸»ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ã„ã¦ã‚ã‚‹ ``galaxy.yml`` ファイルã§ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã®ç”Ÿæˆã«ä½¿ç”¨ã•れるコレクションã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:11 msgid "Structure" msgstr "構造" #: ../../rst/dev_guide/collections_galaxy_meta.rst:13 msgid "The ``galaxy.yml`` file must contain the following keys in valid YAML:" msgstr "``galaxy.yml`` ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ‰åŠ¹ãª YAML ã«ä»¥ä¸‹ã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:22 msgid "Key" msgstr "キー" #: ../../rst/dev_guide/collections_galaxy_meta.rst:23 msgid "Comment" msgstr "コメント" #: ../../rst/dev_guide/collections_galaxy_meta.rst:27 msgid "namespace |br|" msgstr "namespace |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:31 #: ../../rst/dev_guide/collections_galaxy_meta.rst:55 #: ../../rst/dev_guide/collections_galaxy_meta.rst:77 #: ../../rst/dev_guide/collections_galaxy_meta.rst:99 #: ../../rst/dev_guide/collections_galaxy_meta.rst:143 #: ../../rst/dev_guide/collections_galaxy_meta.rst:175 #: ../../rst/dev_guide/collections_galaxy_meta.rst:229 #: ../../rst/dev_guide/collections_galaxy_meta.rst:243 #: ../../rst/dev_guide/collections_galaxy_meta.rst:257 #: ../../rst/dev_guide/collections_galaxy_meta.rst:271 msgid "string |_|" msgstr "文字列 |_|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:35 #: ../../rst/dev_guide/collections_galaxy_meta.rst:59 #: ../../rst/dev_guide/collections_galaxy_meta.rst:81 #: ../../rst/dev_guide/collections_galaxy_meta.rst:103 #: ../../rst/dev_guide/collections_galaxy_meta.rst:125 msgid "/ |_|" msgstr "/ |_|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:39 #: ../../rst/dev_guide/collections_galaxy_meta.rst:63 #: ../../rst/dev_guide/collections_galaxy_meta.rst:85 #: ../../rst/dev_guide/collections_galaxy_meta.rst:107 #: ../../rst/dev_guide/collections_galaxy_meta.rst:129 #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "required" msgstr "å¿…é ˆ" #: ../../rst/dev_guide/collections_galaxy_meta.rst:41 msgid "The namespace of the collection." msgstr "コレクションã®åå‰ç©ºé–“。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:43 msgid "This can be a company/brand/organization or product namespace under which all content lives." msgstr "ã“れã«ã¯ã€ä¼æ¥­/ブランド/組織ã€ã¾ãŸã¯ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒç½®ã‹ã‚Œã‚‹è£½å“ã®åå‰ç©ºé–“を指定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:45 msgid "May only contain alphanumeric lowercase characters and underscores. Namespaces cannot start with underscores or numbers and cannot contain consecutive underscores." msgstr "英数字 (å°æ–‡å­—) ã¨ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã®ã¿ã‚’使用ã§ãã¾ã™ã€‚åå‰ç©ºé–“ã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã‚„æ•°å­—ã§é–‹å§‹ã§ããšã€é€£ç¶šã—ãŸã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:51 msgid "name |br|" msgstr "name |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:65 msgid "The name of the collection." msgstr "コレクションã®åå‰ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:67 msgid "Has the same character restrictions as ``namespace``." msgstr "``namespace`` ã¨åŒã˜æ–‡å­—制é™ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:73 msgid "version |br|" msgstr "version |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:87 msgid "The version of the collection." msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:89 msgid "Must be compatible with semantic versioning." msgstr "セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã¨äº’æ›æ€§ãŒã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:95 msgid "readme |br|" msgstr "readme |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:109 msgid "The path to the Markdown (.md) readme file." msgstr "マークダウン (.md) readme ファイルã¸ã®ãƒ‘ス。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:111 #: ../../rst/dev_guide/collections_galaxy_meta.rst:181 msgid "This path is relative to the root of the collection." msgstr "ã“ã®ãƒ‘スã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ«ãƒ¼ãƒˆã«ç›¸å¯¾ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:117 msgid "authors |br|" msgstr "authors |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:121 #: ../../rst/dev_guide/collections_galaxy_meta.rst:157 #: ../../rst/dev_guide/collections_galaxy_meta.rst:193 #: ../../rst/dev_guide/collections_galaxy_meta.rst:285 msgid "list |_|" msgstr "リスト |_|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:131 msgid "A list of the collection's content authors." msgstr "コレクションã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„作æˆè€…ã®ä¸€è¦§ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:133 msgid "Can be just the name or in the format 'Full Name (url) @nicks:irc/im.site#channel'." msgstr "åå‰ã¾ãŸã¯å½¢å¼ã«ã¯ã€ã€Œæ°å (url) @nicks:irc/im.site#channelã€ã®å½¢å¼ã—ã‹æŒ‡å®šã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:139 msgid "description |br|" msgstr "description |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:147 msgid "A short summary description of the collection." msgstr "コレクションã®ç°¡å˜ãªèª¬æ˜Žã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:153 msgid "license |br|" msgstr "license |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:161 msgid "Either a single license or a list of licenses for content inside of a collection." msgstr "コレクション内㮠1 ã¤ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã¾ãŸã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®ä¸€è¦§ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:163 msgid "Ansible Galaxy currently only accepts `SPDX `_ licenses" msgstr "ç¾åœ¨ Ansible Galaxy 㯠`SPDX `_ ライセンスã®ã¿å—ã‘付ã‘ã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:165 msgid "This key is mutually exclusive with ``license_file``." msgstr "ã“ã®ã‚­ãƒ¼ã¯ã€``license_file`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:171 msgid "license_file |br|" msgstr "license_file |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:179 msgid "The path to the license file for the collection." msgstr "コレクションã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãƒ•ァイルã¸ã®ãƒ‘ス。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:183 msgid "This key is mutually exclusive with ``license``." msgstr "ã“ã®ã‚­ãƒ¼ã¯ã€``license`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:189 msgid "tags |br|" msgstr "tags |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:197 msgid "A list of tags you want to associate with the collection for indexing/searching." msgstr "インデックス化/検索ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«é–¢é€£ä»˜ã‘ã‚‹ã‚¿ã‚°ã®ä¸€è¦§ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:199 msgid "A tag name has the same character requirements as ``namespace`` and ``name``." msgstr "ã‚¿ã‚°åã«ã¯ã€``namespace`` ãŠã‚ˆã³ ``name`` ã¨åŒã˜æ–‡å­—è¦ä»¶ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:205 msgid "dependencies |br|" msgstr "dependencies |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:209 msgid "dictionary |_|" msgstr "ディクショナリー |_|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:213 msgid "Collections that this collection requires to be installed for it to be usable." msgstr "利用ã§ãるよã†ã«ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å¿…è¦ãŒã‚るコレクション。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:215 msgid "The key of the dict is the collection label ``namespace.name``." msgstr "ディクショナリーã®ã‚­ãƒ¼ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ©ãƒ™ãƒ« ``namespace.name`` ã§ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:217 msgid "The value is a version range `specifiers `_." msgstr "ã“ã®å€¤ã¯ã€`æŒ‡å®šå­ `_ ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç¯„囲ã§ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:219 msgid "Multiple version range specifiers can be set and are separated by ``,``." msgstr "複数ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç¯„囲指定å­ã‚’設定ã§ãã€``,`` ã§åŒºåˆ‡ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:225 msgid "repository |br|" msgstr "repository |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:233 msgid "The URL of the originating SCM repository." msgstr "元㮠SCM リãƒã‚¸ãƒˆãƒªãƒ¼ã® URL。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:239 msgid "documentation |br|" msgstr "documentation |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:247 msgid "The URL to any online docs." msgstr "オンラインドキュメントã¸ã® URL。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:253 msgid "homepage |br|" msgstr "homepage |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:261 msgid "The URL to the homepage of the collection/project." msgstr "コレクション/プロジェクトã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã¸ã® URL。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:267 msgid "issues |br|" msgstr "issues |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:275 msgid "The URL to the collection issue tracker." msgstr "コレクションã®å•題トラッカーã¸ã® URL。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:281 msgid "build_ignore |br|" msgstr "build_ignore |br|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:290 msgid "|br| version_added: 2.10" msgstr "|br| version_added: 2.10" #: ../../rst/dev_guide/collections_galaxy_meta.rst:292 msgid "|_|" msgstr "|_|" #: ../../rst/dev_guide/collections_galaxy_meta.rst:293 msgid "A list of file glob-like patterns used to filter any files or directories that should not be included in the build artifact." msgstr "ビルドアーティファクトã«å«ã¾ã‚Œãªã„ファイルやディレクトリーをフィルタリングã™ã‚‹ã®ã«ä½¿ç”¨ã•れるファイルグロブã®ã‚ˆã†ãªãƒ‘ターンã®ä¸€è¦§ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:295 msgid "A pattern is matched from the relative path of the file or directory of the collection directory." msgstr "パターンã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ç›¸å¯¾ãƒ‘スã‹ã‚‰ç…§åˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:297 msgid "This uses ``fnmatch`` to match the files or directories." msgstr "ã“ã“ã§ã¯ã€``fnmatch`` を使用ã—ã¦ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ç…§åˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:299 msgid "Some directories and files like ``galaxy.yml``, ``*.pyc``, ``*.retry``, and ``.git`` are always filtered." msgstr "``galaxy.yml``ã€``*.pyc``ã€``*.retry``ã€``.git`` ãªã©ã®ä¸€éƒ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŠã‚ˆã³ãƒ•ァイルã¯å¸¸ã«ãƒ•ィルタリングã•れã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:304 msgid "Examples" msgstr "例" #: ../../rst/dev_guide/collections_galaxy_meta.rst:329 msgid ":ref:`developing_collections`" msgstr ":ref:`developing_collections`" #: ../../rst/dev_guide/collections_galaxy_meta.rst:330 msgid "Develop or modify a collection." msgstr "コレクションを開発ã™ã‚‹ã‹ã€ã¾ãŸã¯å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/collections_galaxy_meta.rst:331 #: ../../rst/dev_guide/developing_api.rst:40 #: ../../rst/dev_guide/developing_inventory.rst:468 #: ../../rst/dev_guide/developing_plugins.rst:542 #: ../../rst/dev_guide/testing_units_modules.rst:545 msgid ":ref:`developing_modules_general`" msgstr ":ref:`developing_modules_general`" #: ../../rst/dev_guide/collections_galaxy_meta.rst:332 #: ../../rst/dev_guide/developing_plugins.rst:543 msgid "Learn about how to write Ansible modules" msgstr "Ansible モジュールã®ä½œæˆæ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/dev_guide/collections_galaxy_meta.rst:333 #: ../../rst/dev_guide/developing_collections.rst:39 #: ../../rst/dev_guide/developing_collections_changelogs.rst:73 #: ../../rst/dev_guide/developing_collections_contributing.rst:52 #: ../../rst/dev_guide/developing_collections_creating.rst:50 #: ../../rst/dev_guide/developing_collections_distributing.rst:293 #: ../../rst/dev_guide/developing_collections_migrating.rst:129 #: ../../rst/dev_guide/developing_collections_shared.rst:87 msgid ":ref:`collections`" msgstr ":ref:`collections`" #: ../../rst/dev_guide/collections_galaxy_meta.rst:334 #: ../../rst/dev_guide/developing_collections_changelogs.rst:74 #: ../../rst/dev_guide/developing_collections_contributing.rst:53 #: ../../rst/dev_guide/developing_collections_creating.rst:51 #: ../../rst/dev_guide/developing_collections_distributing.rst:294 #: ../../rst/dev_guide/developing_collections_migrating.rst:130 #: ../../rst/dev_guide/developing_collections_shared.rst:88 msgid "Learn how to install and use collections." msgstr "コレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ãŠã‚ˆã³ä½¿ç”¨æ–¹æ³•ã¯ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/collections_galaxy_meta.rst:335 #: ../../rst/dev_guide/developing_collections.rst:45 #: ../../rst/dev_guide/developing_collections_changelogs.rst:77 #: ../../rst/dev_guide/developing_collections_contributing.rst:56 #: ../../rst/dev_guide/developing_collections_creating.rst:54 #: ../../rst/dev_guide/developing_collections_distributing.rst:297 #: ../../rst/dev_guide/developing_collections_migrating.rst:133 #: ../../rst/dev_guide/developing_collections_shared.rst:91 #: ../../rst/dev_guide/developing_collections_structure.rst:277 #: ../../rst/dev_guide/developing_collections_testing.rst:80 #: ../../rst/dev_guide/developing_core.rst:18 #: ../../rst/dev_guide/developing_modules.rst:48 #: ../../rst/dev_guide/developing_plugins.rst:544 msgid "`Mailing List `_" msgstr "`メーリングリスト `_" #: ../../rst/dev_guide/collections_galaxy_meta.rst:336 #: ../../rst/dev_guide/developing_collections.rst:46 #: ../../rst/dev_guide/developing_collections_changelogs.rst:78 #: ../../rst/dev_guide/developing_collections_contributing.rst:57 #: ../../rst/dev_guide/developing_collections_creating.rst:55 #: ../../rst/dev_guide/developing_collections_distributing.rst:298 #: ../../rst/dev_guide/developing_collections_migrating.rst:134 #: ../../rst/dev_guide/developing_collections_shared.rst:92 #: ../../rst/dev_guide/developing_collections_structure.rst:278 #: ../../rst/dev_guide/developing_collections_testing.rst:81 #: ../../rst/dev_guide/developing_core.rst:19 #: ../../rst/dev_guide/developing_plugins.rst:545 msgid "The development mailing list" msgstr "開発メーリングリスト" #: ../../rst/dev_guide/collections_galaxy_meta.rst:337 msgid "`irc.libera.chat `_" msgstr "`irc.libera.chat `_" #: ../../rst/dev_guide/collections_galaxy_meta.rst:338 msgid "#ansible IRC chat channel" msgstr "IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible)" #: ../../rst/dev_guide/debugging.rst:5 msgid "Debugging modules" msgstr "モジュールã®ãƒ‡ãƒãƒƒã‚°" #: ../../rst/dev_guide/debugging.rst:13 msgid "Detailed debugging steps" msgstr "詳細ãªãƒ‡ãƒãƒƒã‚°æ‰‹é †" #: ../../rst/dev_guide/debugging.rst:15 msgid "Ansible modules are put together as a zip file consisting of the module file and the various Python module boilerplate inside of a wrapper script. To see what is actually happening in the module, you need to extract the file from the wrapper. The wrapper script provides helper methods that let you do that." msgstr "Ansible モジュールã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã¨ãƒ©ãƒƒãƒ‘ースクリプト内ã®ã•ã¾ã–ã¾ãª Python モジュール㮠boilerplate ã§æ§‹æˆã•れる zip ファイルã¨ã—ã¦ã¾ã¨ã‚ã¦ç½®ã‹ã‚Œã¾ã™ã€‚モジュールã§å®Ÿéš›ã«ä½•ãŒç™ºç”Ÿã—ã¦ã„ã‚‹ã‹ã‚’確èªã™ã‚‹ã«ã¯ã€ãƒ©ãƒƒãƒ‘ーã‹ã‚‰ãƒ•ァイルを抽出ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ラッパースクリプトã¯ã€ã“れをå¯èƒ½ã«ã™ã‚‹ãƒ˜ãƒ«ãƒ‘ーメソッドをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:17 msgid "The following steps use ``localhost`` as the target host, but you can use the same steps to debug against remote hosts as well. For a simpler approach to debugging without using the temporary files, see :ref:`simple debugging `." msgstr "ä»¥ä¸‹ã®æ‰‹é †ã§ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã« ``localhost`` を使用ã—ã¦ã„ã¾ã™ãŒã€åŒã˜æ‰‹é †ã‚’使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ãƒ‡ãƒãƒƒã‚°ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚一時ファイルを使用ã›ãšã«ãƒ‡ãƒãƒƒã‚°ã‚’行ã†ç°¡å˜ãªæ–¹æ³•ã¯ã€ã€Œ:ref:`ç°¡å˜ãªãƒ‡ãƒãƒƒã‚° `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/debugging.rst:20 msgid "Set :envvar:`ANSIBLE_KEEP_REMOTE_FILES` to ``1`` on the control host so Ansible will keep the remote module files instead of deleting them after the module finishes executing. Use the ``-vvv`` option to make Ansible more verbose. This will display the file name of the temporary module file." msgstr "コントロールホスト㧠:envvar:`ANSIBLE_KEEP_REMOTE_FILES` ã‚’ ``1`` ã«è¨­å®šã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Ansible ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œå¾Œã‚‚削除ã›ãšã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルを維æŒã—ã¾ã™ã€‚``-vvv`` オプションを使用ã™ã‚‹ã¨ã€Ansible ã®è©³ç´°ãŒè¡¨ç¤ºã•れã¾ã™ã€‚一時モジュールファイルã®ãƒ•ァイルåãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:40 msgid "Navigate to the temporary directory from the previous step. If the previous command was run against a remote host, connect to that host first before trying to navigate to the temporary directory." msgstr "å‰ã®æ‰‹é †ã‹ã‚‰ä¸€æ™‚ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚å‰ã®ã‚³ãƒžãƒ³ãƒ‰ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦å®Ÿè¡Œã—ãŸå ´åˆã¯ã€æœ€åˆã«ãã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã¾ã™ã€‚一時ディレクトリーã«ç§»å‹•ã™ã‚‹å‰ã«ã€ãã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:47 msgid "Run the wrapper's ``explode`` command to turn the string into some Python files that you can work with." msgstr "ラッパー㮠``explode`` コマンドを実行ã—ã¦ã€æ–‡å­—列を使用å¯èƒ½ãª Python ファイルã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:55 msgid "If you want to examine the wrapper file you can. It will show a small Python script with a large base64 encoded string. The string contains the module to execute." msgstr "ラッパーファイルを調ã¹ãŸã„å ´åˆã¯ã€å°ã•ã„ Python スクリプトã«ã€å¤§ã㪠base64 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ–‡å­—列ãŒè¨˜è¼‰ã•れã¾ã™ã€‚文字列ã«ã¯ã€å®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:57 msgid "When you look into the temporary directory you'll see a structure like this:" msgstr "一時ディレクトリーを確èªã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªæ§‹é€ ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:80 msgid "``AnsiballZ_ping.py`` is the Python script with the module code stored in a base64 encoded string. It contains various helper functions for executing the module." msgstr "``AnsiballZ_ping.py`` base64 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ–‡å­—列ã«ä¿å­˜ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã‚’å«ã‚€ Python スクリプトã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãŸã‚ã®ã•ã¾ã–ã¾ãªãƒ˜ãƒ«ãƒ‘ー関数ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:82 msgid "``ping.py`` is the code for the module itself. You can modify this code to see what effect it would have on your module, or for debugging purposes." msgstr "``ping.py`` ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«è‡ªä½“ã®ã‚³ãƒ¼ãƒ‰ã§ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ‡ãƒãƒƒã‚°ã®ç›®çš„を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:84 msgid "The ``args`` file contains a JSON string. The string is a dictionary containing the module arguments and other variables that Ansible passes into the module to change its behavior. Modify this file to change the parameters passed to the module." msgstr "``args`` ファイルã«ã¯ JSON 文字列ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æ–‡å­—列ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ãŠã‚ˆã³ã€Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ãã®ä»–ã®å¤‰æ•°ã‚’å«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã€å‹•作を変更ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルを変更ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã•れるパラメーターを変更ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:86 msgid "The ``ansible`` directory contains the module code in ``modules`` as well as code from :mod:`ansible.module_utils` that is used by the module. Ansible includes files for any :mod:`ansible.module_utils` imports in the module but not any files from any other module. If your module uses :mod:`ansible.module_utils.url` Ansible will include it for you. But if your module includes `requests `_, then you'll have to make sure that the Python `requests library `_ is installed on the system before running the module." msgstr "``ansible`` ディレクトリーã«ã¯ã€``modules`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä½¿ç”¨ã•れる :mod:`ansible.module_utils` ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Ansible ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å†…ã® :mod:`ansible.module_utils` インãƒãƒ¼ãƒˆã®ãƒ•ァイルãŒå«ã¾ã‚Œã¾ã™ãŒã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ã®ãƒ•ァイルã¯å«ã¾ã‚Œã¾ã›ã‚“。モジュール㧠:mod:`ansible.module_utils.url` ãŒä½¿ç”¨ã•れる場åˆã¯ã€Ansible ã«ãれãŒå«ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« `requests `_ ãŒå«ã¾ã‚Œã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹å‰ã« Python `requests ライブラリー `_ ãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:88 msgid "You can modify files in this directory if you suspect that the module is having a problem in some of this boilerplate code rather than in the module code you have written." msgstr "作æˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã§ã¯ãªãã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã“ã® boilerplate コードã®ä¸€éƒ¨ã«å•題ãŒã‚ã‚‹ã¨æ€ã‚れる場åˆã¯ã€ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ•ァイルを変更ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:90 msgid "Once you edit the code or arguments in the exploded tree, use the ``execute`` subcommand to run it:" msgstr "展開ã•れãŸãƒ„リーã®ã‚³ãƒ¼ãƒ‰ã¾ãŸã¯å¼•数を編集ã—ãŸã‚‰ã€``execute`` サブコマンドを使用ã—ã¦ã“れを実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:97 msgid "This subcommand inserts the absolute path to ``debug_dir`` as the first item in ``sys.path`` and invokes the script using the arguments in the ``args`` file. You can continue to run the module like this until you understand the problem. Then you can copy the changes back into your real module file and test that the real module works via ``ansible`` or ``ansible-playbook``." msgstr "ã“ã®ã‚µãƒ–コマンドã¯ã€``sys.path`` ã®æœ€åˆã®é …ç›®ã¨ã—㦠``debug_dir`` ã«çµ¶å¯¾ãƒ‘スを挿入ã—ã€``args`` ファイルã®å¼•数を使用ã—ã¦ã‚¹ã‚¯ãƒªãƒ—トを呼ã³å‡ºã—ã¾ã™ã€‚å•題をç†è§£ã™ã‚‹ã¾ã§ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã‚’継続ã§ãã¾ã™ã€‚変更を実際ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã«ã‚³ãƒ”ーã—ã€å®Ÿéš›ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ ``ansible`` ã¾ãŸã¯ ``ansible-playbook`` ã§å‹•作ã™ã‚‹ã“ã¨ã‚’テストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:103 msgid "Simple debugging" msgstr "ç°¡å˜ãªãƒ‡ãƒãƒƒã‚°" #: ../../rst/dev_guide/debugging.rst:105 msgid "The easiest way to run a debugger in a module, either local or remote, is to use `epdb `_. Add ``import epdb; epdb.serve()`` in the module code on the control node at the desired break point. To connect to the debugger, run ``epdb.connect()``. See the `epdb documentation `_ for how to specify the ``host`` and ``port``. If connecting to a remote node, make sure to use a port that is allowed by any firewall between the control node and the remote node." msgstr "モジュール (ローカルã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã®ã„ãšã‚Œã‹) ã§ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’実行ã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€`epdb `_ を使用ã—ã¾ã™ã€‚ä»»æ„ã®ãƒ–レークãƒã‚¤ãƒ³ãƒˆã§ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã« ``import epdb; epdb.serve()`` を追加ã—ã¾ã™ã€‚デãƒãƒƒã‚¬ãƒ¼ã«æŽ¥ç¶šã™ã‚‹ã«ã¯ã€``epdb.connect()`` を実行ã—ã¾ã™ã€‚``host`` ãŠã‚ˆã³ ``port`` を指定ã™ã‚‹æ–¹æ³•ã¯ã€`epdb ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„ã€‚ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã¨ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã¨ã®é–“ã®ãƒ•ァイアウォールãŒè¨±å¯ã•れã¦ã„ã‚‹ãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/debugging.rst:107 msgid "This technique should work with any remote debugger, but we do not guarantee any particular remote debugging tool will work." msgstr "ã“ã®æ‰‹æ³•ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒãƒƒã‚¬ãƒ¼ã¨å‹•作ã—ã¾ã™ãŒã€ç‰¹å®šã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒãƒƒã‚°ãƒ„ãƒ¼ãƒ«ãŒæ©Ÿèƒ½ã™ã‚‹ä¿è¨¼ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/debugging.rst:109 msgid "The `q `_ library is another very useful debugging tool." msgstr "`q `_ ライブラリーã¯ã€ã‚‚ㆠ1 ã¤ã®ä¾¿åˆ©ãªãƒ‡ãƒãƒƒã‚°ãƒ„ールã§ã™ã€‚" #: ../../rst/dev_guide/debugging.rst:111 msgid "Since ``print()`` statements do not work inside modules, raising an exception is a good approach if you just want to see some specific data. Put ``raise Exception(some_value)`` somewhere in the module and run it normally. Ansible will handle this exception, pass the message back to the control node, and display it." msgstr "``print()`` ステートメントã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å†…ã§ã¯æ©Ÿèƒ½ã—ãªã„ãŸã‚ã€ç‰¹å®šã®ãƒ‡ãƒ¼ã‚¿ã‚’確èªã™ã‚‹å ´åˆã¯ä¾‹å¤–を発生ã•ã›ã¾ã™ã€‚モジュール内ã®ã©ã“ã‹ã« ``raise Exception(some_value)`` ã‚’ç½®ãã€é€šå¸¸ã©ãŠã‚Šå®Ÿè¡Œã—ã¾ã™ã€‚Ansible ã¯ã“ã®ä¾‹å¤–を処ç†ã—ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«æ¸¡ã—ã€è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_api.rst:5 msgid "Python API" msgstr "Python API" #: ../../rst/dev_guide/developing_api.rst:7 #: ../../rst/dev_guide/developing_inventory.rst:17 #: ../../rst/dev_guide/developing_modules_best_practices.rst:9 #: ../../rst/dev_guide/testing_compile.rst:9 #: ../../rst/dev_guide/testing_httptester.rst:7 #: ../../rst/dev_guide/testing_integration.rst:9 #: ../../rst/dev_guide/testing_integration_legacy.rst:9 #: ../../rst/dev_guide/testing_pep8.rst:9 #: ../../rst/dev_guide/testing_sanity.rst:9 #: ../../rst/dev_guide/testing_units.rst:14 #: ../../rst/dev_guide/testing_units_modules.rst:11 #: ../../rst/dev_guide/testing_validate-modules.rst:9 msgid "Topics" msgstr "トピック" #: ../../rst/dev_guide/developing_api.rst:9 msgid "This API is intended for internal Ansible use. Ansible may make changes to this API at any time that could break backward compatibility with older versions of the API. Because of this, external use is not supported by Ansible. If you want to use Python API only for executing playbooks or modules, consider `ansible-runner `_ first." msgstr "ã“ã® API ã¯ã€å†…部 Ansible ã®ä½¿ç”¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚Ansible ã¯ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® API ã¨ã®å¾Œæ–¹äº’æ›æ€§ã‚’妨ã’ã‚‹å¯èƒ½æ€§ãŒã‚る時点ã§ã“ã® API ã«å¤‰æ›´ã‚’加ãˆã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€Ansible ã§ã¯å¤–部ã®ä½¿ç”¨ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。Playbook ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã®ã¿ã« Python API を使用ã™ã‚‹å ´åˆã¯ã€ã¾ãš `ansible-runner `_ を考慮ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_api.rst:11 msgid "There are several ways to use Ansible from an API perspective. You can use the Ansible Python API to control nodes, you can extend Ansible to respond to various Python events, you can write plugins, and you can plug in inventory data from external data sources. This document gives a basic overview and examples of the Ansible execution and playbook API." msgstr "API パースペクティブã‹ã‚‰ Ansible を使用ã™ã‚‹æ–¹æ³•ã¯è¤‡æ•°ã‚りã¾ã™ã€‚Ansible Python API を使用ã—ã¦ãƒŽãƒ¼ãƒ‰ã‚’制御ã—ã€Ansible ã‚’æ‹¡å¼µã—ã¦ã•ã¾ã–ã¾ãª Python イベントã«å¿œç­”ã§ãã€ãƒ—ラグインを作æˆã—ãŸã‚Šã€å¤–部データソースã‹ã‚‰ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ãƒ¼ã‚¿ã¸ã®ãƒ—ラグインを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚本書ã§ã¯ã€Ansible ã®å®Ÿè¡ŒãŠã‚ˆã³ Playbook API ã®åŸºæœ¬çš„ãªæ¦‚è¦ã¨ä¾‹ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_api.rst:16 msgid "If you would like to use Ansible programmatically from a language other than Python, trigger events asynchronously, or have access control and logging demands, please see the `AWX project `_." msgstr "Python 以外ã®è¨€èªžã§ Ansible を使用ã—ã¦ã€ã‚¤ãƒ™ãƒ³ãƒˆã‚’éžåŒæœŸçš„ã«ãƒˆãƒªã‚¬ãƒ¼ã™ã‚‹ã‹ã€ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡ãŠã‚ˆã³ãƒ­ã‚°è¦æ±‚ã‚’ã™ã‚‹å ´åˆã¯ã€ã€Œ`AWX プロジェクト `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_api.rst:19 msgid "Because Ansible relies on forking processes, this API is not thread safe." msgstr "Ansible ã¯ãƒ—ロセスã®ãƒ•ォークã«ä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚ã€ã“ã® API ã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã‚»ãƒ¼ãƒ•ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_api.rst:24 msgid "Python API example" msgstr "Python API ã®ä¾‹" #: ../../rst/dev_guide/developing_api.rst:26 msgid "This example is a simple demonstration that shows how to minimally run a couple of tasks:" msgstr "ã“ã®ä¾‹ã¯ã€ã„ãã¤ã‹ã®ã‚¿ã‚¹ã‚¯ã‚’最å°é™ã«å®Ÿè¡Œã™ã‚‹æ–¹æ³•を示ã™ç°¡å˜ãªãƒ‡ãƒ¢ã§ã™ã€‚" #: ../../rst/dev_guide/developing_api.rst:31 msgid "Ansible emits warnings and errors via the display object, which prints directly to stdout, stderr and the Ansible log." msgstr "Ansible ã¯ã€è¡¨ç¤ºã‚ªãƒ–ジェクトを介ã—ã¦è­¦å‘Šã¨ã‚¨ãƒ©ãƒ¼ã‚’出力ã—ã¾ã™ã€‚標準出力 (stdout)ã€æ¨™æº–エラー (stderr)ã€Ansible ログã«ç›´æŽ¥å‡ºåŠ›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_api.rst:33 msgid "The source code for the ``ansible`` command line tools (``lib/ansible/cli/``) is `available on GitHub `_." msgstr "``ansible`` コマンドラインツールã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ (``lib/ansible/cli/``) 㯠`GitHub ã§åˆ©ç”¨ `_ ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_api.rst:38 #: ../../rst/dev_guide/developing_plugins.rst:540 msgid ":ref:`developing_inventory`" msgstr ":ref:`developing_inventory`" #: ../../rst/dev_guide/developing_api.rst:39 msgid "Developing dynamic inventory integrations" msgstr "動的インベントリー統åˆã®é–‹ç™º" #: ../../rst/dev_guide/developing_api.rst:41 msgid "Getting started on developing a module" msgstr "モジュール開発を始ã‚ã‚‹" #: ../../rst/dev_guide/developing_api.rst:42 #: ../../rst/dev_guide/developing_core.rst:16 #: ../../rst/dev_guide/developing_inventory.rst:470 msgid ":ref:`developing_plugins`" msgstr ":ref:`developing_plugins`" #: ../../rst/dev_guide/developing_api.rst:43 #: ../../rst/dev_guide/developing_inventory.rst:471 msgid "How to develop plugins" msgstr "プラグインã®é–‹ç™ºæ–¹æ³•" #: ../../rst/dev_guide/developing_api.rst:44 #: ../../rst/dev_guide/developing_inventory.rst:474 #: ../../rst/dev_guide/testing_units_modules.rst:553 msgid "`Development Mailing List `_" msgstr "`Development Mailing List `_" #: ../../rst/dev_guide/developing_api.rst:45 #: ../../rst/dev_guide/developing_inventory.rst:475 #: ../../rst/dev_guide/testing_units_modules.rst:554 msgid "Mailing list for development topics" msgstr "開発トピックã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_api.rst:46 #: ../../rst/dev_guide/developing_collections.rst:47 #: ../../rst/dev_guide/developing_collections_changelogs.rst:79 #: ../../rst/dev_guide/developing_collections_contributing.rst:58 #: ../../rst/dev_guide/developing_collections_creating.rst:56 #: ../../rst/dev_guide/developing_collections_distributing.rst:299 #: ../../rst/dev_guide/developing_collections_migrating.rst:135 #: ../../rst/dev_guide/developing_collections_shared.rst:93 #: ../../rst/dev_guide/developing_collections_structure.rst:279 #: ../../rst/dev_guide/developing_collections_testing.rst:82 #: ../../rst/dev_guide/developing_inventory.rst:476 #: ../../rst/dev_guide/developing_modules.rst:50 #: ../../rst/dev_guide/developing_plugins.rst:546 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/dev_guide/developing_api.rst:47 #: ../../rst/dev_guide/developing_collections.rst:48 #: ../../rst/dev_guide/developing_collections_changelogs.rst:80 #: ../../rst/dev_guide/developing_collections_contributing.rst:59 #: ../../rst/dev_guide/developing_collections_creating.rst:57 #: ../../rst/dev_guide/developing_collections_distributing.rst:300 #: ../../rst/dev_guide/developing_collections_migrating.rst:136 #: ../../rst/dev_guide/developing_collections_shared.rst:94 #: ../../rst/dev_guide/developing_collections_structure.rst:280 #: ../../rst/dev_guide/developing_collections_testing.rst:83 #: ../../rst/dev_guide/developing_inventory.rst:477 #: ../../rst/dev_guide/developing_modules.rst:51 #: ../../rst/dev_guide/developing_plugins.rst:547 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/dev_guide/developing_collections.rst:11 msgid "Developing new collections" msgstr "æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®é–‹ç™º" #: ../../rst/dev_guide/developing_collections.rst:20 msgid "Working with existing collections" msgstr "既存コレクションã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_collections.rst:28 msgid "Collections references" msgstr "コレクションã®å‚ç…§" #: ../../rst/dev_guide/developing_collections.rst:5 msgid "Developing collections" msgstr "コレクションã®é–‹ç™º" #: ../../rst/dev_guide/developing_collections.rst:7 msgid "Collections are a distribution format for Ansible content. You can package and distribute playbooks, roles, modules, and plugins using collections. A typical collection addresses a set of related use cases. For example, the ``cisco.ios`` collection automates management of Cisco IOS devices." msgstr "コレクションã¯ã€Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚コレクションを使用ã—㦠Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインをパッケージ化ãŠã‚ˆã³åˆ†æ•£ã§ãã¾ã™ã€‚一般的ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€é–¢é€£ã™ã‚‹ä¸€é€£ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``cisco.ios`` コレクション㯠Cisco IOS デãƒã‚¤ã‚¹ã®ç®¡ç†ã‚’自動化ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections.rst:9 msgid "You can create a collection and publish it to `Ansible Galaxy `_ or to a private Automation Hub instance. You can publish certified collections to the Red Hat Automation Hub, part of the Red Hat Ansible Automation Platform." msgstr "コレクションを作æˆã—ã¦ã€`Ansible Galaxy `_ ã¾ãŸã¯ãƒ—ライベート Automation Hub インスタンスã«å…¬é–‹ã§ãã¾ã™ã€‚Red Hat Ansible Automation Platform ã®ä¸€éƒ¨ã§ã‚ã‚‹èªå®šã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Red Hat Automation Hub ã«å…¬é–‹ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections.rst:35 msgid "For instructions on developing modules, see :ref:`developing_modules_general`." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºã®æ‰‹é †ã¯ã€ã€Œ:ref:`developing_modules_general`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections.rst:40 msgid "Learn how to install and use collections in playbooks and roles" msgstr "Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¦ä½¿ç”¨ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections.rst:41 #: ../../rst/dev_guide/developing_collections_changelogs.rst:75 #: ../../rst/dev_guide/developing_collections_contributing.rst:54 #: ../../rst/dev_guide/developing_collections_migrating.rst:131 #: ../../rst/dev_guide/developing_collections_shared.rst:89 #: ../../rst/dev_guide/developing_collections_structure.rst:275 #: ../../rst/dev_guide/developing_collections_testing.rst:78 msgid ":ref:`contributing_maintained_collections`" msgstr ":ref:`contributing_maintained_collections`" #: ../../rst/dev_guide/developing_collections.rst:42 #: ../../rst/dev_guide/developing_collections_changelogs.rst:76 #: ../../rst/dev_guide/developing_collections_contributing.rst:55 #: ../../rst/dev_guide/developing_collections_migrating.rst:132 #: ../../rst/dev_guide/developing_collections_shared.rst:90 #: ../../rst/dev_guide/developing_collections_structure.rst:276 #: ../../rst/dev_guide/developing_collections_testing.rst:79 msgid "Guidelines for contributing to selected collections" msgstr "é¸æŠžã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«è²¢çŒ®ã™ã‚‹ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/developing_collections.rst:43 msgid "`Ansible Collections Overview and FAQ `_" msgstr "`Ansible Collections Overview and FAQ `_" #: ../../rst/dev_guide/developing_collections.rst:44 msgid "Current development status of community collections and FAQ" msgstr "コミュニティーコレクションãŠã‚ˆã³ FAQ ã®ç¾åœ¨ã®é–‹ç™ºã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹" #: ../../rst/dev_guide/developing_collections_changelogs.rst:5 msgid "Generating changelogs and porting guide entries in a collection" msgstr "コレクションã§å¤‰æ›´ãƒ­ã‚°ãŠã‚ˆã³ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ç”Ÿæˆ" #: ../../rst/dev_guide/developing_collections_changelogs.rst:7 msgid "You can create and share changelog and porting guide entries for your collection. If your collection is part of the Ansible Community package, we recommend that you use the `antsibull-changelog `_ tool to generate Ansible-compatible changelogs. The Ansible changelog uses the output of this tool to collate all the collections included in an Ansible release into one combined changelog for the release." msgstr "コレクションã®å¤‰æ›´ãƒ­ã‚°ãŠã‚ˆã³ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚’作æˆã—ã¦å…±æœ‰ã§ãã¾ã™ã€‚コレクション㌠Ansible Community パッケージã®ä¸€éƒ¨ã§ã‚ã‚‹å ´åˆã¯ã€`antsibull-changelog `_ ツールを使用ã—㦠Ansible 互æ›ã®å¤‰æ›´ãƒ­ã‚°ã‚’生æˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansible ã®å¤‰æ›´ãƒ­ã‚°ã§ã¯ã€ã“ã®ãƒ„ールを使用ã—ã¦ã€ã“ã®ãƒ„ールã®å‡ºåŠ›ã‚’ä½¿ç”¨ã—ã¦ã€Ansible リリースã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã€ã“ã®ãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã—㦠1 ã¤ã®å¤‰æ›´ãƒ­ã‚°ã«ã¾ã¨ã‚ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:11 msgid "Ansible here refers to the Ansible 2.10 or later release that includes a curated set of collections." msgstr "Ansible ã¯ã€æŒ‡å®šã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚»ãƒƒãƒˆã‚’å«ã‚€ Ansible 2.10 以é™ã®ãƒªãƒªãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:18 msgid "Understanding antsibull-changelog" msgstr "antsibull-changelog ã«ã¤ã„ã¦" #: ../../rst/dev_guide/developing_collections_changelogs.rst:20 msgid "The ``antsibull-changelog`` tool allows you to create and update changelogs for Ansible collections that are compatible with the combined Ansible changelogs. This is an update to the changelog generator used in prior Ansible releases. The tool adds three new changelog fragment categories: ``breaking_changes``, ``security_fixes`` and ``trivial``. The tool also generates the ``changelog.yaml`` file that Ansible uses to create the combined ``CHANGELOG.rst`` file and Porting Guide for the release." msgstr "``antsibull-changelog`` ツールを使用ã™ã‚‹ã¨ã€çµ„ã¿åˆã‚ã›ãŸ Ansible ã®å¤‰æ›´ãƒ­ã‚°ã¨äº’æ›æ€§ã®ã‚ã‚‹ Ansible コレクションã«å¯¾ã—ã¦å¤‰æ›´ãƒ­ã‚°ã‚’作æˆã—ã€æ›´æ–°ã§ãã¾ã™ã€‚ã“れã¯ã€Ansible リリース以å‰ã§ä½¿ç”¨ã•れる変更ログジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å¯¾ã™ã‚‹æ›´æ–°ã§ã™ã€‚ã“ã®ãƒ„ールã¯ã€``breaking_changes``ã€``security_fixes``ã€ãŠã‚ˆã³ ``trivial`` ã® 3 ã¤ã®æ–°ã—ã„変更ログフラグメントカテゴリーを追加ã—ã¾ã™ã€‚ã“ã®ãƒ„ールã¯ã€Ansible ãŒãƒªãƒªãƒ¼ã‚¹ã‚’組ã¿åˆã‚ã›ãŸ ``CHANGELOG.rst`` ファイルã¨ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚’作æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ ``changelog.yaml`` ファイルも生æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:22 msgid "See :ref:`changelogs_how_to` and the `antsibull-changelog documentation `_ for complete details." msgstr "詳細ã¯ã€ã€Œ:ref:`changelogs_how_to`ã€ãŠã‚ˆã³ `antsibull-changelog ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:26 msgid "The collection maintainers set the changelog policy for their collections. See the individual collection contributing guidelines for complete details." msgstr "コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å¤‰æ›´ãƒ­ã‚°ãƒãƒªã‚·ãƒ¼ã‚’設定ã—ã¾ã™ã€‚詳細ã¯ã€å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è²¢çŒ®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:29 msgid "Generating changelogs" msgstr "変更ログã®ç”Ÿæˆ" #: ../../rst/dev_guide/developing_collections_changelogs.rst:31 msgid "To initialize changelog generation:" msgstr "変更ログã®ç”Ÿæˆã‚’åˆæœŸåŒ–ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:33 msgid "Install ``antsibull-changelog``: :code:`pip install antsibull-changelog`." msgstr "``antsibull-changelog`` をインストールã—ã¾ã™ (:code:`pip install antsibull-changelog`)。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:34 msgid "Initialize changelogs for your repository: :code:`antsibull-changelog init `." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã®å¤‰æ›´ãƒ­ã‚°ã‚’åˆæœŸåŒ–ã—ã¾ã™ (:code:`antsibull-changelog init `)。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:35 msgid "Optionally, edit the ``changelogs/config.yaml`` file to customize the location of the generated changelog ``.rst`` file or other options. See `Bootstrapping changelogs for collections `_ for details." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€``changelogs/config.yaml`` ファイルを編集ã—ã¦ã€ç”Ÿæˆã•れãŸå¤‰æ›´ãƒ­ã‚°ã® ``.rst`` ファイルã¾ãŸã¯ãã®ä»–ã®ã‚ªãƒ—ションをカスタマイズã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ`コレクションã®å¤‰æ›´ãƒ­ã‚°ã®ãƒ–ートストラップ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:37 msgid "To generate changelogs from the changelog fragments you created:" msgstr "作æˆã—ãŸå¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントã‹ã‚‰å¤‰æ›´ãƒ­ã‚°ã‚’生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:39 msgid "Optionally, validate your changelog fragments: :code:`antsibull-changelog lint`." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを検証ã—ã¾ã™ (:code:`antsibull-changelog lint`) 。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:40 msgid "Generate the changelog for your release: :code:`antsibull-changelog release [--version version_number]`." msgstr "リリースã®å¤‰æ›´ãƒ­ã‚° (:code:`antsibull-changelog release [--version version_number]`) を生æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:44 msgid "Add the ``--reload-plugins`` option if you ran the ``antsibull-changelog release`` command previously and the version of the collection has not changed. ``antsibull-changelog`` caches the information on all plugins and does not update its cache until the collection version changes." msgstr "以å‰ã« ``antsibull-changelog release`` コマンドを実行ã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¤‰æ›´ã•れã¦ã„ãªã„å ´åˆã¯ã€``--reload-plugins`` オプションを追加ã—ã¾ã™ã€‚``antsibull-changelog`` ã¯ã™ã¹ã¦ã®ãƒ—ラグインã«é–¢ã™ã‚‹æƒ…報をキャッシュã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¤‰æ›´ã•れるã¾ã§ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’æ›´æ–°ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:47 msgid "Porting Guide entries from changelog fragments" msgstr "変更ログフラグメントã®ç§»æ¤ã‚¬ã‚¤ãƒ‰ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼" #: ../../rst/dev_guide/developing_collections_changelogs.rst:49 msgid "The Ansible changelog generator automatically adds several changelog fragment categories to the Ansible Porting Guide:" msgstr "Ansible 変更ログジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã¯ã€è¤‡æ•°ã®å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントカテゴリーを Ansible ç§»æ¤ã‚¬ã‚¤ãƒ‰ã«è‡ªå‹•çš„ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:51 msgid "``major_changes``" msgstr "``major_changes``" #: ../../rst/dev_guide/developing_collections_changelogs.rst:52 msgid "``breaking_changes``" msgstr "``breaking_changes``" #: ../../rst/dev_guide/developing_collections_changelogs.rst:53 msgid "``deprecated_features``" msgstr "``deprecated_features``" #: ../../rst/dev_guide/developing_collections_changelogs.rst:54 msgid "``removed_features``" msgstr "``removed_features``" #: ../../rst/dev_guide/developing_collections_changelogs.rst:57 msgid "Including collection changelogs into Ansible" msgstr "Ansible ã¸ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ changelog ã®è¿½åŠ " #: ../../rst/dev_guide/developing_collections_changelogs.rst:59 msgid "If your collection is part of Ansible, use one of the following three options to include your changelog into the Ansible release changelog:" msgstr "コレクション㌠Ansible ã®ä¸€éƒ¨ã§ã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã® 3 ã¤ã®ã‚ªãƒ—ションã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ã€ä½œæˆã—㟠changelog ã‚’ã€Ansible リリース㮠changelog ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:61 msgid "Use the ``antsibull-changelog`` tool." msgstr "``antsibull-changelog`` ツールã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_collections_changelogs.rst:63 msgid "If are not using this tool, include the properly formatted ``changelog.yaml`` file into your collection. See the `changelog.yaml format `_ for details." msgstr "ã“ã®ãƒ„ールを使用ã—ã¦ã„ãªã„å ´åˆã¯ã€é©åˆ‡ã«å½¢å¼åŒ–ã•れ㟠``changelog.yaml`` ファイルをコレクションã«è¿½åŠ ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ`changelog.yaml å½¢å¼ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_changelogs.rst:65 msgid "Add a link to own changelogs or release notes in any format by opening an issue at https://github.com/ansible-community/ansible-build-data/ with the HTML link to that information." msgstr "ã“ã®æƒ…å ±ã¸ã® HTML リンクã§å•題を https://github.com/ansible-community/ansible-build-data/ ã§é–‹ã„ã¦ã€ä»»æ„ã®å½¢å¼ã§ç‹¬è‡ªã®å¤‰æ›´ãƒ­ã‚°ã¾ãŸã¯ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã¸ã®ãƒªãƒ³ã‚¯ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_changelogs.rst:69 msgid "For the first two options, Ansible pulls the changelog details from Galaxy so your changelogs must be included in the collection version on Galaxy that is included in the upcoming Ansible release." msgstr "最åˆã® 2 ã¤ã®ã‚ªãƒ—ションã®å ´åˆã€Ansible ã¯å¤‰æ›´ãƒ­ã‚°ã®è©³ç´°ã‚’ Galaxy ã‹ã‚‰ãƒ—ルã—ã€å¤‰æ›´ãƒ­ã‚°ã‚’今後㮠Ansible リリースã«å«ã¾ã‚Œã‚‹ Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:5 msgid "Contributing to collections" msgstr "コレクションã¸ã®è²¢çŒ®" #: ../../rst/dev_guide/developing_collections_contributing.rst:7 msgid "If you want to add functionality to an existing collection, modify a collection you are using to fix a bug, or change the behavior of a module in a collection, clone the git repository for that collection and make changes on a branch. You can combine changes to a collection with a local checkout of Ansible (``source hacking/env-setup``). You should first check the collection repository to see if it has specific contribution guidelines. These are typically listed in the README.md or CONTRIBUTING.md files within the repository." msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æ©Ÿèƒ½ã‚’追加ã™ã‚‹ã«ã¯ã€ãƒã‚°ã‚’修正ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’変更ã—ãŸã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‹•作を変更ã—ã¦ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® git リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã€ãƒ–ランãƒã«å¤‰æ›´ã‚’加ãˆã¾ã™ã€‚コレクションã¸ã®å¤‰æ›´ã‚’ã€Ansible (``source hacking/env-setup``) ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã¨çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’確èªã—ã¦ã€ç‰¹å®šã®è²¢çŒ®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚通常ã€ãれらã¯ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã® README.md ファイルã¾ãŸã¯ CONTRIBUTING.md ファイルã«ä¸€è¦§è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:11 msgid "Contributing to a collection: community.general" msgstr "コレクションã¸ã®è²¢çŒ®: community.general" #: ../../rst/dev_guide/developing_collections_contributing.rst:13 msgid "These instructions apply to collections hosted in the `ansible_collections GitHub organization `_. For other collections, especially for collections not hosted on GitHub, check the ``README.md`` of the collection for information on contributing to it." msgstr "ã“ã‚Œã‚‰ã®æ‰‹é †ã¯ã€`ansible_collections GitHub organization `_ ã«ãƒ›ã‚¹ãƒˆã•れるコレクションã«é©ç”¨ã•れã¾ã™ã€‚特㫠GitHub ã§ãƒ›ã‚¹ãƒˆã•れã¦ã„ãªã„コレクションã«ã¤ã„ã¦ã¯ã€ã“れã«è²¢çŒ®ã™ã‚‹æƒ…å ±ã«ã¤ã„ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``README.md`` を確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_contributing.rst:15 msgid "This example uses the `community.general collection `_. To contribute to other collections in the same GitHub org, replace the folder names ``community`` and ``general`` with the namespace and collection name of a different collection." msgstr "ã“ã®ä¾‹ã§ã¯ã€`community.general コレクション `_ を使用ã—ã¦ã„ã¾ã™ã€‚åŒã˜ GitHub Org ã®ä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«è²¢çŒ®ã™ã‚‹ãŸã‚ã«ã€ãƒ•ォルダーå ``community`` ãŠã‚ˆã³ ``general`` ã‚’ã€åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åå‰ç©ºé–“ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã«ç½®ãæ›ãˆã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:18 #: ../../rst/dev_guide/testing_integration.rst:55 msgid "Prerequisites" msgstr "è¦ä»¶" #: ../../rst/dev_guide/developing_collections_contributing.rst:20 msgid "Include ``~/dev/ansible/collections/`` in :ref:`COLLECTIONS_PATHS`" msgstr ":ref:`COLLECTIONS_PATHS` ã« ``~/dev/ansible/collections/`` ã‚’å«ã‚ã¾ã™" #: ../../rst/dev_guide/developing_collections_contributing.rst:21 msgid "If that path mentions multiple directories, make sure that no other directory earlier in the search path contains a copy of ``community.general``." msgstr "ãã®ãƒ‘スã§è¤‡æ•°ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«è¨€åŠã•れã¦ã„ã‚‹å ´åˆã¯ã€æ¤œç´¢ãƒ‘スã®å‰ã®ãã®ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``community.general`` ã®ã‚³ãƒ”ーãŒå«ã¾ã‚Œãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:24 msgid "Creating a PR" msgstr "PR ã®ä½œæˆ" #: ../../rst/dev_guide/developing_collections_contributing.rst:28 msgid "Create the directory ``~/dev/ansible/collections/ansible_collections/community``::" msgstr "``~/dev/ansible/collections/ansible_collections/community`` ディレクトリーを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:32 msgid "Clone `the community.general Git repository `_ or a fork of it into the directory ``general``::" msgstr "`community.general Git リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹ã‹ã€ãれを ``general`` ディレクトリーã«ãƒ•ォークã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:37 msgid "If you clone from a fork, add the original repository as a remote ``upstream``::" msgstr "フォークã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ãŸã‚‰ã€å…ƒã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’リモート㮠``upstream`` ã¨ã—ã¦è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:42 msgid "Create a branch and commit your changes on the branch." msgstr "ブランãƒã‚’作æˆã—ã€ãƒ–ランãƒã§å¤‰æ›´ã‚’コミットã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:44 msgid "Remember to add tests for your changes, see :ref:`testing_collections`." msgstr "変更ã«ãƒ†ã‚¹ãƒˆã‚’追加ã™ã‚‹ã®ã‚’忘れãªã„よã†ã«ã—ã¦ãã ã•ã„。:ref:`testing_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_contributing.rst:46 msgid "Push your changes to your fork of the collection and create a Pull Request." msgstr "変更をコレクションã®ãƒ•ォークã«ãƒ—ッシュã—ã€ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_contributing.rst:48 msgid "You can test your changes by using this checkout of ``community.general`` in playbooks and roles with whichever version of Ansible you have installed locally, including a local checkout of ``ansible/ansible``'s ``devel`` branch." msgstr "ã“れã§ã€``ansible/ansible`` ã® ``devel`` ブランãƒã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’å«ã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§ã‚‚ã€Playbook やロール㧠``community.general`` ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’使用ã—ã¦å¤‰æ›´ã‚’テストã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:5 msgid "Creating collections" msgstr "コレクションã®ä½œæˆ" #: ../../rst/dev_guide/developing_collections_creating.rst:7 msgid "To create a collection:" msgstr "コレクションを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:9 msgid "Create a :ref:`collection skeleton` with the ``collection init`` command." msgstr "``collection init`` コマンド㧠:ref:`コレクションスケルトン` を作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:10 msgid "Add modules and other content to the collection." msgstr "モジュールãŠã‚ˆã³ãã®ä»–ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をコレクションã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:11 msgid "Build the collection into a collection artifact with :ref:`ansible-galaxy collection build`." msgstr ":ref:`ansible-galaxy collection build` を使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’コレクションアーティファクトã«ãƒ“ルドã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:12 msgid "Publish the collection artifact to Galaxy with :ref:`ansible-galaxy collection publish`." msgstr ":ref:`ansible-galaxy collection publish` ã§æ§‹ç¯‰ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトを Galaxy ã«å…¬é–‹ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:14 msgid "A user can then install your collection on their systems." msgstr "ã“れã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’システムã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:23 msgid "Creating a collection skeleton" msgstr "コレクションスケルトンã®ä½œæˆ" #: ../../rst/dev_guide/developing_collections_creating.rst:25 msgid "To start a new collection:" msgstr "æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:33 msgid "Both the namespace and collection names use the same strict set of requirements. See `Galaxy namespaces `_ on the Galaxy docsite for those requirements." msgstr "åå‰ç©ºé–“ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¯ã„ãšã‚Œã‚‚ã€åŒã˜å޳坆ãªè¦ä»¶ã‚»ãƒƒãƒˆã‚’使用ã—ã¾ã™ã€‚ã“れらã®è¦ä»¶ã«ã¤ã„ã¦ã¯ã€Galaxy ドキュメントスイートã®ã€Œ`Galaxy åå‰ç©ºé–“ `_ã€ã§ç¢ºèªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_creating.rst:35 msgid "Once the skeleton exists, you can populate the directories with the content you want inside the collection. See `ansible-collections `_ GitHub Org to get a better idea of what you can place inside a collection." msgstr "スケルトンãŒå­˜åœ¨ã™ã‚‹ã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®å†…容ã§ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’設定ã§ãã¾ã™ã€‚`ansible-collections `_ ã® GitHub Org ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«é…ç½®ã§ãる内容をå分ã«ç†è§£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:37 msgid "Reference: the ``ansible-galaxy collection`` command" msgstr "å‚ç…§: ``ansible-galaxy collection`` コマンド" #: ../../rst/dev_guide/developing_collections_creating.rst:39 msgid "Currently the ``ansible-galaxy collection`` command implements the following sub commands:" msgstr "ç¾åœ¨ã€``ansible-galaxy collection`` コマンドã¯ä»¥ä¸‹ã®ã‚µãƒ–コマンドを実装ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:41 msgid "``init``: Create a basic collection skeleton based on the default template included with Ansible or your own template." msgstr "``init``: Ansible ã«å«ã¾ã‚Œã‚‹ãƒ‡ãƒ•ォルトテンプレートã¾ãŸã¯ç‹¬è‡ªã®ãƒ†ãƒ³ãƒ—レートã«åŸºã¥ã„ã¦ã€åŸºæœ¬çš„ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:42 msgid "``build``: Create a collection artifact that can be uploaded to Galaxy or your own repository." msgstr "``build``: Galaxy ã¾ãŸã¯ç‹¬è‡ªã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã§ãるコレクションアーティファクトを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:43 msgid "``publish``: Publish a built collection artifact to Galaxy." msgstr "``publish``: 構築ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトを Galaxy ã«å…¬é–‹ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:44 msgid "``install``: Install one or more collections." msgstr "``install``: 1 ã¤ä»¥ä¸Šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_creating.rst:46 msgid "To learn more about the ``ansible-galaxy`` command-line tool, see the :ref:`ansible-galaxy` man page." msgstr "``ansible-galaxy`` コマンドラインツールã®è©³ç´°ã¯ã€:ref:`ansible-galaxy` ã® man ページをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_creating.rst:52 msgid ":ref:`collection_structure`" msgstr ":ref:`collection_structure`" #: ../../rst/dev_guide/developing_collections_creating.rst:53 msgid "Directories and files included in the collection skeleton" msgstr "コレクションスケルトンã«å«ã¾ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŠã‚ˆã³ãƒ•ァイル" #: ../../rst/dev_guide/developing_collections_distributing.rst:5 msgid "Distributing collections" msgstr "コレクションã®é…布" #: ../../rst/dev_guide/developing_collections_distributing.rst:7 msgid "A collection is a distribution format for Ansible content. A typical collection contains modules and other plugins that address a set of related use cases. For example, a collection might automate administering a particular database. A collection can also contain roles and playbooks." msgstr "コレクションã¨ã¯ã€Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚典型的ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€ä¸€é€£ã®é–¢é€£ã™ã‚‹ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ãã®ä»–ã®ãƒ—ラグインãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚例ãˆã°ã€ç‰¹å®šã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ç®¡ç†ã‚’自動化ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãªã©ãŒã‚りã¾ã™ã€‚コレクションã«ã¯ã€ãƒ­ãƒ¼ãƒ«ã‚„Playbookã‚’å«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:9 msgid "To distribute your collection and allow others to use it, you can publish your collection on one or more distribution servers. Distribution servers include:" msgstr "コレクションをé…ä¿¡ã—ã¦ä»–ã®äººãŒä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€1ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションサーãƒãƒ¼ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ディストリビューションサーãƒãƒ¼ã«ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:12 msgid "Distribution server" msgstr "é…信サーãƒãƒ¼" #: ../../rst/dev_guide/developing_collections_distributing.rst:12 msgid "Collections accepted" msgstr "å—ã‘入れå¯èƒ½ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/dev_guide/developing_collections_distributing.rst:14 msgid "Ansible Galaxy" msgstr "Ansible Galaxy" #: ../../rst/dev_guide/developing_collections_distributing.rst:14 msgid "All collections" msgstr "全コレクション" #: ../../rst/dev_guide/developing_collections_distributing.rst:15 msgid "Red Hat Automation Hub" msgstr "Red Hat Automation Hub" #: ../../rst/dev_guide/developing_collections_distributing.rst:15 msgid "Only collections certified by Red Hat" msgstr "Red HatãŒèªå®šã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿" #: ../../rst/dev_guide/developing_collections_distributing.rst:16 msgid "Privately hosted Automation Hub" msgstr "プライベートã«ãƒ›ã‚¹ãƒˆã•れるオートメーションãƒãƒ–" #: ../../rst/dev_guide/developing_collections_distributing.rst:16 msgid "Collections authorized by the owners" msgstr "オーナーãŒè¨±å¯ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/dev_guide/developing_collections_distributing.rst:19 msgid "Distributing collections involves four major steps:" msgstr "コレクションをé…ä¿¡ã™ã‚‹ã«ã¯ã€å¤§ãã分ã‘ã¦4ã¤ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:21 #: ../../rst/dev_guide/developing_collections_distributing.rst:33 msgid "Initial configuration of your distribution server or servers" msgstr "é…信サーãƒãƒ¼ã®åˆæœŸè¨­å®š" #: ../../rst/dev_guide/developing_collections_distributing.rst:22 #: ../../rst/dev_guide/developing_collections_distributing.rst:123 msgid "Building your collection tarball" msgstr "コレクション tarball ã®ãƒ“ルド" #: ../../rst/dev_guide/developing_collections_distributing.rst:23 #: ../../rst/dev_guide/developing_collections_distributing.rst:185 msgid "Preparing to publish your collection" msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å…¬é–‹ã®æº–å‚™" #: ../../rst/dev_guide/developing_collections_distributing.rst:24 #: ../../rst/dev_guide/developing_collections_distributing.rst:252 msgid "Publishing your collection" msgstr "コレクションã®å…¬é–‹" #: ../../rst/dev_guide/developing_collections_distributing.rst:35 msgid "Configure a connection to one or more distribution servers so you can publish collections there. You only need to configure each distribution server once. You must repeat the other steps (building your collection tarball, preparing to publish, and publishing your collection) every time you publish a new collection or a new version of an existing collection." msgstr "1ã¤ã¾ãŸã¯è¤‡æ•°ã®é…信サーãƒãƒ¼ã¸ã®æŽ¥ç¶šã‚’設定ã—ã€ãã“ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã§ãるよã†ã«ã—ã¾ã™ã€‚å„ディストリビューションサーãƒãƒ¼ã®è¨­å®šã¯ã€1回ã ã‘行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ä»–ã®æ‰‹é †ï¼ˆã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®tarballã®ãƒ“ルドã€å…¬é–‹ã®æº–å‚™ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å…¬é–‹ï¼‰ã¯ã€æ–°ã—ã„コレクションã¾ãŸã¯æ—¢å­˜ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’公開ã™ã‚‹ãŸã³ã«ç¹°ã‚Šè¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:37 msgid "Create a namespace on each distribution server you want to use." msgstr "使用ã™ã‚‹å„é…信サーãƒãƒ¼ã®åå‰ç©ºé–“を作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:38 msgid "Get an API token for each distribution server you want to use." msgstr "使用ã™ã‚‹ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションサーãƒãƒ¼ã”ã¨ã« API トークンをå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:39 msgid "Specify the API token for each distribution server you want to use." msgstr "使用ã™ã‚‹ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションサーãƒãƒ¼ã”ã¨ã« API トークンを指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:44 msgid "Creating a namespace" msgstr "åå‰ç©ºé–“ã®ä½œæˆ" #: ../../rst/dev_guide/developing_collections_distributing.rst:46 msgid "You must upload your collection into a namespace on each distribution server. If you have a login for Ansible Galaxy, your Ansible Galaxy username is usually also an Ansible Galaxy namespace." msgstr "コレクションをå„é…信サーãƒãƒ¼ã®åå‰ç©ºé–“ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible Galaxyã«ãƒ­ã‚°ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒã‚ã‚‹å ´åˆã€Ansible Galaxyã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯é€šå¸¸ã€Ansible Galaxyã®åå‰ç©ºé–“ã§ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:50 msgid "Namespaces on Ansible Galaxy cannot include hyphens. If you have a login for Ansible Galaxy that includes a hyphen, your Galaxy username is not also a Galaxy namespace. For example, ``awesome-user`` is a valid username for Ansible Galaxy, but it is not a valid namespace." msgstr "Ansible Galaxyã®åå‰ç©ºé–“ã«ã¯ã€ãƒã‚¤ãƒ•ンをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ãƒã‚¤ãƒ•ンをå«ã‚€Ansible Galaxyã®ãƒ­ã‚°ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒã‚ã‚‹å ´åˆã€Galaxyã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯Galaxyã®åå‰ç©ºé–“ã§ã¯ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€``awesome-user`` ã¯ã€Ansible Galaxy ã®æœ‰åйãªãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ãŒã€æœ‰åйãªåå‰ç©ºé–“ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_distributing.rst:52 msgid "You can create additional namespaces on Ansible Galaxy if you choose. For Red Hat Automation Hub and private Automation Hub you must create a namespace before you can upload your collection. To create a namespace:" msgstr "å¿…è¦ã«å¿œã˜ã¦ã€Ansible Galaxy ã§è¿½åŠ ã®åå‰ç©ºé–“を作æˆã§ãã¾ã™ã€‚Red Hat Automation Hub ãŠã‚ˆã³ãƒ—ライベートã®ã‚ªãƒ¼ãƒˆãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒãƒ–ã®å ´åˆã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’アップロードã™ã‚‹å‰ã«åå‰ç©ºé–“を作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚åå‰ç©ºé–“を作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã‚’実施ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:54 msgid "To create a namespace on Galaxy, see `Galaxy namespaces `_ on the Galaxy docsite for details." msgstr "Galaxy ã§åå‰ç©ºé–“を作æˆã™ã‚‹ã«ã¯ã€Galaxy ドキュメントサイトã§ã€Œ`Galaxy namespaces `_ã€ã‚’å‚ç…§ã—ã¦è©³ç´°ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:55 msgid "To create a namespace on Red Hat Automation Hub, see the `Ansible Certified Content FAQ `_." msgstr "Red Hat Automation Hub ã§åå‰ç©ºé–“を作æˆã™ã‚‹ã«ã¯ã€`Ansible Certified Content FAQ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:57 msgid "Specify the namespace in the :file:`galaxy.yaml` file for each collection. For more information on the :file:`galaxy.yaml` file, see :ref:`collections_galaxy_meta`." msgstr "コレクションã”ã¨ã« :file:`galaxy.yaml` ファイルã§åå‰ç©ºé–“を指定ã—ã¾ã™ã€‚:file:`galaxy.yaml` ファイルã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`collections_galaxy_meta` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:62 msgid "Getting your API token" msgstr "API トークンã®å–å¾—" #: ../../rst/dev_guide/developing_collections_distributing.rst:64 msgid "An API token authenticates your connection to each distribution server. You need a separate API token for each distribution server. Use the correct API token to connect to each distribution server securely and protect your content." msgstr "APIトークンã¯ã€å„é…信サーãƒãƒ¼ã«å¯¾ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’èªè¨¼ã—ã¾ã™ã€‚APIトークンã¯ã€å„é…信サーãƒãƒ¼ã”ã¨ã«å¿…è¦ã¨ãªã‚Šã¾ã™ã€‚æ­£ã—ã„APIトークンを使用ã—ã¦ã€å„é…信サーãƒãƒ¼ã«å®‰å…¨ã«æŽ¥ç¶šã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ä¿è­·ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:66 msgid "To get your API token:" msgstr "API トークンをå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:68 msgid "To get an API token for Galaxy, go to the `Galaxy profile preferences `_ page and click :guilabel:`API Key`." msgstr "Galaxyã®APIトークンをå–å¾—ã™ã‚‹ã«ã¯ã€`Galaxy profile preferences `_ ページã«ç§»å‹•ã—ã€:guilabel:`API Key` をクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:69 msgid "To get an API token for Automation Hub, go to `the token page `_ and click :guilabel:`Load token`." msgstr "Automation Hubã®APIトークンをå–å¾—ã™ã‚‹ã«ã¯ã€`the token page `_ ã«ç§»å‹•ã—ã€:guilabel:`Load token` をクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:74 msgid "Specifying your API token and distribution server" msgstr "APIトークンã¨é…信サーãƒãƒ¼ã®æŒ‡å®š" #: ../../rst/dev_guide/developing_collections_distributing.rst:76 msgid "Each time you publish a collection, you must specify the API token and the distribution server to create a secure connection. You have two options for specifying the token and distribution server:" msgstr "コレクションを公開ã™ã‚‹ãŸã³ã«ã€APIトークンã¨é…信サーãƒãƒ¼ã‚’指定ã—ã¦ã€å®‰å…¨ãªæŽ¥ç¶šã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚トークンã¨é…信サーãƒãƒ¼ã®æŒ‡å®šã«ã¯2ã¤ã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:78 msgid "You can configure the token in configuration, as part of a ``galaxy_server_list`` entry in your :file:`ansible.cfg` file. Using configuration is the most secure option." msgstr "トークンã®è¨­å®šã¯ã€ã‚³ãƒ³ãƒ•ィギュレーションã§ã€ :file:`ansible.cfg` ファイルã®``galaxy_server_list`` エントリã®ä¸€éƒ¨ã¨ã—ã¦è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚コンフィギュレーションを使用ã™ã‚‹ã“ã¨ã¯ã€æœ€ã‚‚安全ãªã‚ªãƒ—ションã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:79 msgid "You can pass the token at the command line as an argument to the ``ansible-galaxy`` command. If you pass the token at the command line, you can specify the server at the command line, by using the default setting, or by setting the server in configuration. Passing the token at the command line is insecure, because typing secrets at the command line may expose them to other users on the system." msgstr "トークンã¯ã€``ansible-galaxy`` コマンドã®å¼•æ•°ã¨ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚コマンドラインã§ãƒˆãƒ¼ã‚¯ãƒ³ã‚’渡ã™å ´åˆã€ãƒ‡ãƒ•ォルト設定を使用ã—ã¦ã€ã¾ãŸã¯ã‚³ãƒ³ãƒ•ィグレーションã§ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã‚µãƒ¼ãƒãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コマンドラインã§ãƒˆãƒ¼ã‚¯ãƒ³ã‚’渡ã™ã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。ãªãœãªã‚‰ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’入力ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã®ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒæ¼ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:84 msgid "Specifying the token and distribution server in configuration" msgstr "コンフィギュレーションã§ã®ãƒˆãƒ¼ã‚¯ãƒ³ã¨é…信サーãƒãƒ¼ã®æŒ‡å®š" #: ../../rst/dev_guide/developing_collections_distributing.rst:86 msgid "By default, Ansible Galaxy is configured as the only distribution server. You can add other distribution servers and specify your API token or tokens in configuration by editing the ``galaxy_server_list`` section of your :file:`ansible.cfg` file. This is the most secure way to manage authentication for distribution servers. Specify a URL and token for each server. For example:" msgstr "デフォルトã§ã¯ã€Ansible GalaxyãŒå”¯ä¸€ã®é…信サーãƒãƒ¼ã¨ã—ã¦è¨­å®šã•れã¦ã„ã¾ã™ã€‚:file:`ansible.cfg` ファイルã®``galaxy_server_list`` セクションを編集ã™ã‚‹ã“ã¨ã§ã€ä»–ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションサーãƒãƒ¼ã‚’追加ã—ã€API ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ã‚³ãƒ³ãƒ•ã‚£ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€é…信サーãƒãƒ¼ã®èªè¨¼ã‚’管ç†ã™ã‚‹æœ€ã‚‚å®‰å…¨ãªæ–¹æ³•ã§ã™ã€‚å„サーãƒãƒ¼ã®URLã¨ãƒˆãƒ¼ã‚¯ãƒ³ã‚’指定ã—ã¾ã™ã€‚例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:97 msgid "You cannot use ``apt-key`` with any servers defined in your :ref:`galaxy_server_list `. See :ref:`galaxy_server_config` for complete details." msgstr "``apt-key`` ã¯ã€:ref:`galaxy_server_list ` ã§å®šç¾©ã•れã¦ã„るサーãƒãƒ¼ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。詳細ã¯:ref:`galaxy_server_config` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:102 msgid "Specifying the token at the command line" msgstr "コマンドラインã§ã®ãƒˆãƒ¼ã‚¯ãƒ³ã®æŒ‡å®š" #: ../../rst/dev_guide/developing_collections_distributing.rst:104 msgid "You can specify the API token at the command line using the ``--token`` argument of the :ref:`ansible-galaxy` command. There are three ways to specify the distribution server when passing the token at the command line:" msgstr "APIãƒˆãƒ¼ã‚¯ãƒ³ã‚’ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã™ã‚‹ã«ã¯ã€:ref:`ansible-galaxy` コマンドã®``--token`` 引数を使用ã—ã¾ã™ã€‚コマンドラインã§ãƒˆãƒ¼ã‚¯ãƒ³ã‚’渡ã™éš›ã®é…信サーãƒãƒ¼ã®æŒ‡å®šæ–¹æ³•ã¯3ã¨ãŠã‚Šã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:106 msgid "using the ``--server`` argument of the :ref:`ansible-galaxy` command" msgstr ":ref:`ansible-galaxy` コマンドã®``--server`` 引数ã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_collections_distributing.rst:107 msgid "relying on the default (https://galaxy.ansible.com)" msgstr "デフォルトã¸ã®ä¾å­˜ï¼ˆhttps://galaxy.ansible.com))" #: ../../rst/dev_guide/developing_collections_distributing.rst:108 msgid "setting a server in configuration by creating a :ref:`GALAXY_SERVER` setting in your :file:`ansible.cfg` file" msgstr ":file:`ansible.cfg` ファイルã¸ã® :ref:`GALAXY_SERVER` 設定ã®ä½œæˆã«ã‚ˆã‚‹ã‚³ãƒ³ãƒ•ィギュレーションã§ã®ã‚µãƒ¼ãƒãƒ¼ã®è¨­å®š" #: ../../rst/dev_guide/developing_collections_distributing.rst:110 #: ../../rst/dev_guide/style_guide/index.rst:214 #: ../../rst/shared_snippets/installing_collections_git_repo.txt:10 msgid "For example:" msgstr "例:" #: ../../rst/dev_guide/developing_collections_distributing.rst:118 msgid "Using the ``--token`` argument is insecure. Passing secrets at the command line may expose them to others on the system." msgstr "``--token`` 引数ã®ä½¿ç”¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。コマンドラインã§ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’渡ã™ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã®ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒæ¼ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:125 msgid "After configuring one or more distribution servers, build a collection tarball. The collection tarball is the published artifact, the object that you upload and other users download to install your collection. To build a collection tarball:" msgstr "1ã¤ã¾ãŸã¯è¤‡æ•°ã®é…信サーãƒãƒ¼ã‚’設定ã—ãŸå¾Œã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®tarballをビルドã—ã¾ã™ã€‚コレクションã®tarballã¯ã€å…¬é–‹ã•れãŸã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã§ã‚りã€ãŠå®¢æ§˜ãŒã‚¢ãƒƒãƒ—ロードã—ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ãŸã‚ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã‚ªãƒ–ジェクトã§ã™ã€‚コレクションã®tarballをビルドã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã§è¡Œã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:127 msgid "Review the version number in your :file:`galaxy.yaml` file. Each time you publish your collection, it must have a new version number. You cannot make changes to existing versions of your collection on a distribution server. If you try to upload the same collection version more than once, the distribution server returns the error ``Code: conflict.collection_exists``. Collections follow semantic versioning rules. For more information on versions, see :ref:`collection_versions`. For more information on the :file:`galaxy.yaml` file, see :ref:`collections_galaxy_meta`." msgstr ":file:`galaxy.yaml` ファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’確èªã—ã¦ãã ã•ã„。コレクションを公開ã™ã‚‹ãŸã³ã«ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚é…信サーãƒãƒ¼ä¸Šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ—¢å­˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’変更ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。åŒã˜ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’複数回アップロードã—よã†ã¨ã™ã‚‹ã¨ã€é…信サーãƒãƒ¼ã¯ã‚¨ãƒ©ãƒ¼``Code: conflict.collection_exists`` ã‚’è¿”ã—ã¾ã™ã€‚コレクションã¯ã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã«å¾“ã„ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`collection_versions` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。:file:`galaxy.yaml` ファイルã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`collections_galaxy_meta` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:128 msgid "Run ``ansible-galaxy collection build`` from inside the top-level directory of the collection. For example:" msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€ä¸Šä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸­ã‹ã‚‰``ansible-galaxy collection build`` を実行ã—ã¾ã™ã€‚例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:134 msgid "This command builds a tarball of the collection in the current directory, which you can upload to your selected distribution server::" msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® tarball ãŒãƒ“ルドã•れã¾ã™ã€‚ã“れを希望ã™ã‚‹é…信サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:143 msgid "To reduce the size of collections, certain files and folders are excluded from the collection tarball by default. See :ref:`ignoring_files_and_folders_collections` if your collection directory contains other files you want to exclude." msgstr "コレクションã®ã‚µã‚¤ã‚ºã‚’å°ã•ãã™ã‚‹ãŸã‚ã«ã€ãƒ‡ãƒ•ォルトã§ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®tarballã‹ã‚‰ç‰¹å®šã®ãƒ•ァイルやフォルダãŒé™¤å¤–ã•れã¦ã„ã¾ã™ã€‚コレクションディレクトリã«é™¤å¤–ã—ãŸã„ä»–ã®ãƒ•ァイルãŒã‚ã‚‹å ´åˆã¯ã€:ref:`ignoring_files_and_folders_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:144 msgid "The current Galaxy maximum tarball size is 2 MB." msgstr "ç¾åœ¨ã® Galaxy ã® tarball ã®æœ€å¤§ã‚µã‚¤ã‚ºã¯ 2 MB ã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:146 msgid "You can upload your tarball to one or more distribution servers. You can also distribute your collection locally by copying the tarball to install your collection directly on target systems." msgstr "tarballã¯ã€1ã¤ã¾ãŸã¯è¤‡æ•°ã®é…信サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ローカルã«é…布ã™ã‚‹ã«ã¯ã€tarballをコピーã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’直接インストールã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:151 msgid "Ignoring files and folders" msgstr "ファイルやフォルダーを無視ã™ã‚‹" #: ../../rst/dev_guide/developing_collections_distributing.rst:153 msgid "By default the build step includes all the files in the collection directory in the tarball except for the following:" msgstr "デフォルトã§ã¯ã€ãƒ“ルドステップã§ã¯ã€tarball内ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚‹ã€ä»¥ä¸‹ã‚’除ãã™ã¹ã¦ã®ãƒ•ァイルãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:155 msgid "``galaxy.yml``" msgstr "``galaxy.yml``" #: ../../rst/dev_guide/developing_collections_distributing.rst:156 msgid "``*.pyc``" msgstr "``*.pyc``" #: ../../rst/dev_guide/developing_collections_distributing.rst:157 msgid "``*.retry``" msgstr "``*.retry``" #: ../../rst/dev_guide/developing_collections_distributing.rst:158 msgid "``tests/output``" msgstr "``tests/output``" #: ../../rst/dev_guide/developing_collections_distributing.rst:159 msgid "previously built tarballs in the root directory" msgstr "ルートディレクトリーã«ä»¥å‰ã«ãƒ“ルドã•れãŸtarball" #: ../../rst/dev_guide/developing_collections_distributing.rst:160 msgid "various version control directories such as ``.git/``" msgstr "``.git/`` ãªã©ã®ã•ã¾ã–ã¾ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼" #: ../../rst/dev_guide/developing_collections_distributing.rst:162 msgid "To exclude other files and folders from your collection tarball, set a list of file glob-like patterns in the ``build_ignore`` key in the collection's ``galaxy.yml`` file. These patterns use the following special characters for wildcard matching:" msgstr "コレクションã®tarballã‹ã‚‰ä»–ã®ãƒ•ァイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’除外ã™ã‚‹ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``galaxy.yml`` ファイル㮠``build_ignore`` キーã«ã€ãƒ•ァイルグロブã®ã‚ˆã†ãªãƒ‘ターンã®ä¸€è¦§ã‚’設定ã—ã¾ã™ã€‚ã“れらã®ãƒ‘ターンã¯ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã®ä¸€è‡´ã«ä»¥ä¸‹ã®ç‰¹æ®Šæ–‡å­—を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:164 msgid "``*``: Matches everything" msgstr "``*``: ã™ã¹ã¦ã«ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:165 msgid "``?``: Matches any single character" msgstr "``?``: ä»»æ„ã®å˜ä¸€æ–‡å­—ã«ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:166 msgid "``[seq]``: Matches any character in sequence" msgstr "``[seq]``:ä»»æ„ã®é€£ç¶šã—ãŸæ–‡å­—ã«ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:167 msgid "``[!seq]``:Matches any character not in sequence" msgstr "``[!seq]``:連続ã—ã¦ã„ãªã„ä»»æ„ã®æ–‡å­—ã«ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:169 msgid "For example, to exclude the :file:`sensitive` folder within the ``playbooks`` folder as well any ``.tar.gz`` archives, set the following in your ``galaxy.yml`` file:" msgstr "ãŸã¨ãˆã°ã€``playbooks`` ディレクトリー内㮠:file:`sensitive` ディレクトリーや ``.tar.gz`` アーカイブを除外ã™ã‚‹å ´åˆã¯ã€``galaxy.yml`` ファイルã«ä»¥ä¸‹ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:177 msgid "For more information on the :file:`galaxy.yml` file, see :ref:`collections_galaxy_meta`." msgstr ":file:`galaxy.yml` ファイルã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`collections_galaxy_meta` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:180 msgid "The ``build_ignore`` feature is only supported with ``ansible-galaxy collection build`` in Ansible 2.10 or newer." msgstr "``build_ignore`` 機能ã¯ã€Ansible 2.10 以é™ã®``ansible-galaxy collection build`` ã§ã®ã¿ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:187 msgid "Each time you publish your collection, you must create a :ref:`new version ` on the distribution server. After you publish a version of a collection, you cannot delete or modify that version. To avoid unnecessary extra versions, check your collection for bugs, typos, and other issues locally before publishing:" msgstr "コレクションを公開ã™ã‚‹ãŸã³ã«ã€é…信サーãƒãƒ¼ã«:ref:`new version ` を作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コレクションã®ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’公開ã—ãŸå¾Œã¯ã€ãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã—ãŸã‚Šå¤‰æ›´ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ä¸è¦ãªè¿½åŠ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¿ã‘ã‚‹ãŸã‚ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ãƒ­ãƒ¼ã‚«ãƒ«ã§ãƒã‚°ã‚„タイプミスãªã©ã®å•題をãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:189 msgid "Install the collection locally." msgstr "コレクションをローカルã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:190 msgid "Review the locally installed collection before publishing a new version." msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ã€ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るコレクションを確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:193 msgid "Installing your collection locally" msgstr "コレクションã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_collections_distributing.rst:195 msgid "You have two options for installing your collection locally:" msgstr "コレクションをローカルã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€2ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:197 msgid "Install your collection locally from the tarball." msgstr "コレクションをtarballã‹ã‚‰ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:198 msgid "Install your collection locally from your git repository." msgstr "gitリãƒã‚¸ãƒˆãƒªã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ローカルã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:201 msgid "Installing your collection locally from the tarball" msgstr "tarballã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_collections_distributing.rst:203 msgid "To install your collection locally from the tarball, run ``ansible-galaxy collection install`` and specify the collection tarball. You can optionally specify a location using the ``-p`` flag. For example:" msgstr "コレクションをtarballã‹ã‚‰ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€``ansible-galaxy collection install`` を実行ã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®tarballを指定ã—ã¾ã™ã€‚オプションã§``-p`` フラグを使ã£ã¦å ´æ‰€ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:209 msgid "Install the tarball into a directory configured in :ref:`COLLECTIONS_PATHS` so Ansible can easily find and load the collection. If you do not specify a path value, ``ansible-galaxy collection install`` installs the collection in the first path defined in :ref:`COLLECTIONS_PATHS`." msgstr "AnsibleãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ç°¡å˜ã«è¦‹ã¤ã‘ã¦ãƒ­ãƒ¼ãƒ‰ã§ãるよã†ã«ã€:ref:`COLLECTIONS_PATHS` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«tarballをインストールã—ã¾ã™ã€‚パスã®å€¤ã‚’指定ã—ãªã„å ´åˆã€``ansible-galaxy collection install`` ã¯ã€:ref:`COLLECTIONS_PATHS` ã§å®šç¾©ã•ã‚ŒãŸæœ€åˆã®ãƒ‘スã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:214 msgid "Installing your collection locally from a git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_collections_distributing.rst:216 msgid "To install your collection locally from a git repository, specify the repository and the branch you want to install:" msgstr "コレクションをgitリãƒã‚¸ãƒˆãƒªã‹ã‚‰ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã„リãƒã‚¸ãƒˆãƒªã¨ãƒ–ランãƒã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:1 msgid "You can install a collection from a git repository instead of from Galaxy or Automation Hub. As a developer, installing from a git repository lets you review your collection before you create the tarball and publish the collection. As a user, installing from a git repository lets you use collections or versions that are not in Galaxy or Automation Hub yet." msgstr "コレクションã¯ã€Galaxy ã¾ãŸã¯ Automation Hub ã®ä»£ã‚り㫠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚開発者ã¯ã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€tarball を作æˆã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’確èªã§ãã¾ã™ã€‚ユーザーã¨ã—㦠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€Galaxy ã¾ãŸã¯ Automation Hub ã«ãªã„コレクションã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:3 msgid "The repository must contain a ``galaxy.yml`` or ``MANIFEST.json`` file. This file provides metadata such as the version number and namespace of the collection." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã€namespace ãªã©ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:6 msgid "Installing a collection from a git repository at the command line" msgstr "コマンドガイド㧠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:8 msgid "To install a collection from a git repository at the command line, use the URI of the repository instead of a collection name or path to a ``tar.gz`` file. Prefix the URI with ``git+`` (or with ``git@`` to use a private repository with ssh authentication). You can specify a branch, commit, or tag using the comma-separated `git commit-ish `_ syntax." msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¾ãŸã¯ ``tar.gz`` ファイルã¸ã®ãƒ‘スã§ã¯ãªãã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã® URI を使用ã—ã¾ã™ã€‚``git+`` を使用ã—㦠URI をプレフィックスã—ã¾ã™ï¼ˆã¾ãŸã¯ ``git@`` を使用ã—ã¦ã€ssh èªè¨¼ã§ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ï¼‰ã€‚コンマ区切り㮠`git commit-ish `_ 構文を使用ã—ã¦ã€ãƒ–ランãƒã€ã‚³ãƒŸãƒƒãƒˆã€ã¾ãŸã¯ã‚¿ã‚°ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:25 msgid "Embedding credentials into a git URI is not secure. Use safe authentication options to prevent your credentials from being exposed in logs or elsewhere." msgstr "èªè¨¼æƒ…報を git URI ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。安全ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ã€èªè¨¼æƒ…å ±ãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:27 msgid "Use `SSH `_ authentication" msgstr "`SSH `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:28 msgid "Use `netrc `_ authentication" msgstr "`netrc `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:29 msgid "Use `http.extraHeader `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`http.extraHeader `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:30 msgid "Use `url..pushInsteadOf `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`url..pushInsteadOf `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:33 msgid "Specifying the collection location within the git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼å†…ã§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å ´æ‰€ã®æŒ‡å®š" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:35 msgid "When you install a collection from a git repository, Ansible uses the collection ``galaxy.yml`` or ``MANIFEST.json`` metadata file to build the collection. By default, Ansible searches two paths for collection ``galaxy.yml`` or ``MANIFEST.json`` metadata files:" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイルを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイル㮠2 ã¤ã®ãƒ‘スを検索ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:37 msgid "The top level of the repository." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベル。" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:38 msgid "Each directory in the repository path (one level deep)." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内ã®å„ディレクトリー(1 ãƒ¬ãƒ™ãƒ«ã®æ·±ã•)" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:40 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in the top level of the repository, Ansible uses the collection metadata in that file to install an individual collection." msgstr "``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベルã«ã‚ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイル内ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:51 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in one or more directories in the repository path (one level deep), Ansible installs each directory with a metadata file as a collection. For example, Ansible installs both collection1 and collection2 from this repository structure by default:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内㮠1 ã¤ä»¥ä¸Šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ã¯ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルをæŒã¤å„ディレクトリーをコレクションã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible ã¯ã€ãƒ‡ãƒ•ォルトã§ã€ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ§‹é€ ã‹ã‚‰ collection1 㨠collection2 ã®ä¸¡æ–¹ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:69 msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate the location of the metadata file or files. The path should be a directory, not the metadata file itself. For example, to install only collection2 from the example repository with two collections:" msgstr "リãƒã‚¸ãƒˆãƒªæ§‹é€ ãŒç•°ãªã‚‹å ´åˆã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒ–セットã®ã¿ã‚’インストールã™ã‚‹å ´åˆã¯ã€URI ã®æœ«å°¾ï¼ˆã‚ªãƒ—ションã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰ï¼‰ã«ãƒ•ラグメントを追加ã—ã¦ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã®å ´æ‰€ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイル自体ã§ã¯ãªãã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€2ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æŒã¤ã‚µãƒ³ãƒ—ルリãƒã‚¸ãƒˆãƒªã‹ã‚‰collection2ã®ã¿ã‚’インストールã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:75 msgid "In some repositories, the main directory corresponds to the namespace:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ˆã£ã¦ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯åå‰ç©ºé–“ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:97 msgid "You can install all collections in this repository, or install one collection from a specific commit:" msgstr "ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã‹ã€ç‰¹å®šã®ã‚³ãƒŸãƒƒãƒˆã‹ã‚‰ 1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:225 msgid "Reviewing your collection" msgstr "コレクションã®ç¢ºèª" #: ../../rst/dev_guide/developing_collections_distributing.rst:227 msgid "Review the collection:" msgstr "コレクションを確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:229 msgid "Run a playbook that uses the modules and plugins in your collection. Verify that new features and functionality work as expected. For examples and more details see :ref:`Using collections `." msgstr "コレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインを使用ã™ã‚‹Playbookを実行ã—ã¾ã™ã€‚æ–°ã—ã„æ©Ÿèƒ½ãŒæœŸå¾…通りã«å‹•作ã™ã‚‹ã‹ã©ã†ã‹ã‚’検証ã—ã¾ã™ã€‚例や詳細ã«ã¤ã„ã¦ã¯ã€:ref:`Using collections ` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:230 msgid "Check the documentation for typos." msgstr "ドキュメントã«èª¤å­—脱字ãŒãªã„ã‹ç¢ºèªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:231 msgid "Check that the version number of your tarball is higher than the latest published version on the distribution server or servers." msgstr "tarballã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒã€é…信サーãƒãƒ¼ã§å…¬é–‹ã•れã¦ã„る最新ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚高ã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:232 msgid "If you find any issues, fix them and rebuild the collection tarball." msgstr "å•題ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã¯ã€ãれを修正ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®tarballã‚’å†ãƒ“ルドã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:237 msgid "Understanding collection versioning" msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã«ã¤ã„ã¦" #: ../../rst/dev_guide/developing_collections_distributing.rst:239 msgid "The only way to change a collection is to release a new version. The latest version of a collection (by highest version number) is the version displayed everywhere in Galaxy and Automation Hub. Users can still download older versions." msgstr "コレクションを変更ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’リリースã™ã‚‹ã“ã¨ã§ã™ã€‚(最大ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã«ã‚ˆã‚‹) ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€Galaxy ãŠã‚ˆã³Automation Hubã®ã‚らゆる場所ã«è¡¨ç¤ºã•れるãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãªã‚Šã¾ã™ã€‚ユーザーã¯ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’引ãç¶šãダウンロードã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:241 msgid "Follow semantic versioning when setting the version for your collection. In summary:" msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’設定ã™ã‚‹éš›ã¯ã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã«å¾“ã£ã¦ãã ã•ã„。è¦ç´„ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:243 msgid "Increment the major version number, ``x`` of ``x.y.z``, for an incompatible API change." msgstr "äº’æ›æ€§ã®ãªã„ API 変更ã®å ´åˆ:メジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå· (例: ``x.y.z`` ã® ``x``) を増やã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:244 msgid "Increment the minor version number, ``y`` of ``x.y.z``, for new functionality in a backwards compatible manner (for example new modules/plugins, parameters, return values)." msgstr "下ä½äº’æ›æ€§ã®ã‚る新機能(例ãˆã°ã€æ–°ã—ã„モジュール/プラグインã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã€æˆ»ã‚Šå€¤ãªã©ï¼‰ã®å ´åˆ:マイナーãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ï¼ˆ``x.y.z`` ã®``y``)を増やã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:245 msgid "Increment the patch version number, ``z`` of ``x.y.z``, for backwards compatible bug fixes." msgstr "å¾Œæ–¹äº’æ›æ€§ã®ã‚ã‚‹ãƒã‚°ä¿®æ­£ã®å ´åˆ:パッãƒã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ï¼ˆ``x.y.z`` ã®``z``)を増やã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:247 msgid "Read the official `Semantic Versioning `_ documentation for details and examples." msgstr "詳細や例ã«ã¤ã„ã¦ã¯ã€`Semantic Versioning `_ã®å…¬å¼ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:254 msgid "The last step in distributing your collection is publishing the tarball to Ansible Galaxy, Red Hat Automation Hub, or a privately hosted Automation Hub instance. You can publish your collection in two ways:" msgstr "コレクションをé…布ã™ã‚‹æœ€å¾Œã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€Ansible Galaxyã€Red Hat Automation Hubã€ã¾ãŸã¯ãƒ—ライベートã«ãƒ›ã‚¹ãƒˆã•れã¦ã„るオートメーションãƒãƒ–インスタンス㫠tarball を公開ã™ã‚‹ã“ã¨ã§ã™ã€‚コレクションã®å…¬é–‹ã«ã¯2ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:256 msgid "from the command line using the ``ansible-galaxy collection publish`` command" msgstr "コマンドラインã‹ã‚‰ï¼ˆ``ansible-galaxy collection publish`` コマンドã®ä½¿ç”¨ï¼‰" #: ../../rst/dev_guide/developing_collections_distributing.rst:257 msgid "from the website of the distribution server (Galaxy, Automation Hub) itself" msgstr "é…信サーãƒãƒ¼ï¼ˆGalaxyã€Automation Hub)自体ã®Webサイトã‹ã‚‰" #: ../../rst/dev_guide/developing_collections_distributing.rst:263 msgid "Publishing a collection from the command line" msgstr "コマンドラインã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å…¬é–‹" #: ../../rst/dev_guide/developing_collections_distributing.rst:265 msgid "To upload the collection tarball from the command line using ``ansible-galaxy``:" msgstr "``ansible-galaxy`` を使ã£ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® tarball をアップロードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:273 msgid "This ansible-galaxy command assumes you have retrieved and stored your API token in configuration. See :ref:`galaxy_specify_token` for details." msgstr "ã“ã®ansible-galaxyコマンドã¯ã€APIトークンをå–å¾—ã—ã¦ã‚³ãƒ³ãƒ•ィグレーションã«ä¿å­˜ã—ã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚詳細ã¯:ref:`galaxy_specify_token` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_distributing.rst:275 msgid "The ``ansible-galaxy collection publish`` command triggers an import process, just as if you uploaded the collection through the Galaxy website. The command waits until the import process completes before reporting the status back. If you want to continue without waiting for the import result, use the ``--no-wait`` argument and manually look at the import progress in your `My Imports `_ page." msgstr "``ansible-galaxy collection publish`` コマンドã¯ã€Galaxy ã® Web サイトã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’アップロードã—ã¦ã„ã‚‹ã®ã¨åŒæ§˜ã«ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセスを発生ã•ã›ã¾ã™ã€‚コマンドã¯ã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’報告ã™ã‚‹å‰ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセスãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…ã¡ã¾ã™ã€‚インãƒãƒ¼ãƒˆçµæžœã‚’å¾…ãŸãšã«ç¶šè¡Œã™ã‚‹å ´åˆã¯ã€``--no-wait`` 引数を使用ã—ã¦ã€`My Imports `_ ãƒšãƒ¼ã‚¸ã§æ‰‹å‹•ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®é€²è¡Œçжæ³ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:280 msgid "Publishing a collection from the website" msgstr "Web サイトã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å…¬é–‹" #: ../../rst/dev_guide/developing_collections_distributing.rst:282 msgid "To publish your collection directly on the Galaxy website:" msgstr "コレクションを Galaxy ã® Web サイトã«ç›´æŽ¥å…¬é–‹ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:284 msgid "Go to the `My Content `_ page, and click the **Add Content** button on one of your namespaces." msgstr "`My Content `_ ページã«ç§»å‹•ã—ã€åå‰ç©ºé–“ã®ã„ãšã‚Œã‹ã® **コンテンツを追加** ボタンをクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:285 msgid "From the **Add Content** dialogue, click **Upload New Collection**, and select the collection archive file from your local filesystem." msgstr "**コンテンツã®è¿½åŠ ** ダイアログã‹ã‚‰ã€**æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒƒãƒ—ロード** をクリックã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイルシステムã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:287 msgid "When you upload a collection, Ansible always uploads the tarball to the namespace specified in the collection metadata in the ``galaxy.yml`` file, no matter which namespace you select on the website. If you are not an owner of the namespace specified in your collection metadata, the upload request fails." msgstr "コレクションをアップロードã™ã‚‹éš›ã€Web サイトã§é¸æŠžã—ãŸåå‰ç©ºé–“ã«é–¢ä¿‚ãªãã€Ansibleã¯``galaxy.yml`` ファイルã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã§æŒ‡å®šã•れãŸåå‰ç©ºé–“ã«tarballをアップロードã—ã¾ã™ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã§æŒ‡å®šã•れãŸåå‰ç©ºé–“ã®æ‰€æœ‰è€…ã§ãªã„å ´åˆã€ã‚¢ãƒƒãƒ—ロードリクエストã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:289 msgid "After Galaxy uploads and accepts a collection, the website shows you the **My Imports** page. This page shows import process information. You can review any errors or warnings about your upload there." msgstr "GalaxyãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’アップロードã—ã¦å—ç†ã™ã‚‹ã¨ã€Web サイトã§ã¯**My Imports**ページãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセス情報ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã“ã§ã¯ã€ã‚¢ãƒƒãƒ—ロードã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ã‚„警告を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_distributing.rst:295 msgid ":ref:`collections_galaxy_meta`" msgstr ":ref:`collections_galaxy_meta`" #: ../../rst/dev_guide/developing_collections_distributing.rst:296 msgid "Table of fields used in the :file:`galaxy.yml` file" msgstr ":file:`galaxy.yml` ファイルã§ä½¿ç”¨ã•れるフィールドã®è¡¨" #: ../../rst/dev_guide/developing_collections_migrating.rst:5 msgid "Migrating Ansible content to a different collection" msgstr "Ansible コンテンツã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/developing_collections_migrating.rst:7 msgid "When you move content from one collection to another, for example to extract a set of related modules out of ``community.general`` to create a more focused collection, you must make sure the transition is easy for users to follow." msgstr "ã‚るコレクションã‹ã‚‰åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を移動ã™ã‚‹å ´åˆ (ãŸã¨ãˆã°ã€é–¢é€£ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã‚’ ``community.general`` ã‹ã‚‰æŠ½å‡ºã—ã¦ã€ã‚ˆã‚Šé‡ç‚¹çš„ã«é›†ä¸­åŒ–ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã«ã¯)ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç°¡å˜ã«ç§»è¡Œã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:14 msgid "Migrating content" msgstr "コンテンツã®ç§»è¡Œ" #: ../../rst/dev_guide/developing_collections_migrating.rst:16 msgid "Before you start migrating content from one collection to another, look at `Ansible Collection Checklist `_." msgstr "ã‚るコレクションã‹ã‚‰åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç§»è¡Œã‚’é–‹å§‹ã™ã‚‹å‰ã«ã€`Ansible コレクションãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_migrating.rst:18 msgid "To migrate content from one collection to another, if the collections are parts of `Ansible distribution `_:" msgstr "コレクション㌠`Ansible ディストリビューション `_ ã®ä¸€éƒ¨ã§ã‚ã‚‹å ´åˆã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’別ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:20 msgid "Copy content from the source (old) collection to the target (new) collection." msgstr "ソース (以å‰ã®) コレクションã‹ã‚‰ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ (æ–°ã—ã„) コレクションã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をコピーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:21 msgid "Deprecate the module/plugin with ``removal_version`` scheduled for the next major version in ``meta/runtime.yml`` of the old collection. The deprecation must be released after the copied content has been included in a release of the new collection." msgstr "å¤ã„コレクション㮠``meta/runtime.yml`` ã®æ¬¡ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«äºˆå®šã•れã¦ã„ã‚‹ ``removal_version`` ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚コピーã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒæ–°ã—ã„コレクションã®ãƒªãƒªãƒ¼ã‚¹ã«ã‚ã£ãŸå¾Œã«ã€éžæŽ¨å¥¨ãŒãƒªãƒªãƒ¼ã‚¹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:22 msgid "When the next major release of the old collection is prepared:" msgstr "å¤ã„ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¬¡ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ãŒæº–å‚™ã•れã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:24 msgid "remove the module/plugin from the old collection" msgstr "å¤ã„コレクションã‹ã‚‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインを削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:25 msgid "remove the symlink stored in ``plugin/modules`` directory if appropriate (mainly when removing from ``community.general`` and ``community.network``)" msgstr "å¿…è¦ã«å¿œã˜ã¦ã€``plugin/modules`` ディレクトリーã«ä¿å­˜ã•れãŸã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’削除ã—ã¾ã™ (主㫠``community.general`` ãŠã‚ˆã³ ``community.network``ã‹ã‚‰å‰Šé™¤ã™ã‚‹å ´åˆ)。" #: ../../rst/dev_guide/developing_collections_migrating.rst:26 msgid "remove related unit and integration tests" msgstr "関連ã™ã‚‹ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŠã‚ˆã³çµ±åˆãƒ†ã‚¹ãƒˆã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:27 msgid "remove specific module utils" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:28 msgid "remove specific documentation fragments if there are any in the old collection" msgstr "å¤ã„コレクションã«ã‚ã‚‹å ´åˆã¯ã€ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:29 msgid "add a changelog fragment containing entries for ``removed_features`` and ``breaking_changes``; you can see an example of a changelog fragment in this `pull request `_" msgstr "``removed_features`` ãŠã‚ˆã³ ``breaking_changes`` ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’å«ã‚€å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを追加ã—ã¾ã™ã€‚ã“ã® `ãƒ—ãƒ«è¦æ±‚ `_ ã§å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントã®ä¾‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:30 msgid "change ``meta/runtime.yml`` in the old collection:" msgstr "å¤ã„コレクション㮠``meta/runtime.yml`` を変更ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:32 msgid "add ``redirect`` to the corresponding module/plugin's entry" msgstr "対応ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã« ``redirect`` を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:33 msgid "in particular, add ``redirect`` for the removed module utils and documentation fragments if applicable" msgstr "特ã«ã€å‰Šé™¤ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメント (該当ã™ã‚‹å ´åˆ) ã« ``redirect`` を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:34 msgid "remove ``removal_version`` from there" msgstr "ãã“ã‹ã‚‰ ``removal_version`` を削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:35 msgid "remove related entries from ``tests/sanity/ignore.txt`` files if exist" msgstr "``tests/sanity/ignore.txt`` ファイルã‹ã‚‰é–¢é€£ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:36 msgid "remove changelog fragments for removed content that are not yet part of the changelog (in other words, do not modify `changelogs/changelog.yaml` and do not delete files mentioned in it)" msgstr "変更ログã®ä¸€éƒ¨ã§ã¯ãªã„削除ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを削除ã—ã¾ã™ (ã¤ã¾ã‚Šã€`changelogs/changelog.yaml` を変更ã›ãšã€ãã®ãƒ•ァイルã«è¨˜è¿°ã•れã¦ã„るファイルを削除ã—ãªã„ã§ãã ã•ã„)。" #: ../../rst/dev_guide/developing_collections_migrating.rst:37 msgid "remove requirements that are no longer required in ``tests/unit/requirements.txt``, ``tests/requirements.yml`` and ``galaxy.yml``" msgstr "``tests/unit/requirements.txt``ã€``tests/requirements.yml``ã€ãŠã‚ˆã³ ``galaxy.yml`` ã§ã¯ãªããªã£ãŸè¦ä»¶ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:39 msgid "To implement these changes, you need to create at least three PRs:" msgstr "以下ã®å¤‰æ›´ã‚’実装ã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚ 3 ã¤ã® PR を作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:41 msgid "Create a PR against the new collection to copy the content." msgstr "æ–°ã—ã„コレクションã«å¯¾ã—㦠PR を作æˆã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をコピーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:42 msgid "Deprecate the module/plugin in the old collection." msgstr "å¤ã„コレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:43 msgid "Later create a PR against the old collection to remove the content according to the schedule." msgstr "後ã«ã€å¤ã„コレクションã«å¯¾ã—㦠PR を作æˆã—ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¿œã˜ã¦ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:47 msgid "Adding the content to the new collection" msgstr "æ–°ã—ã„コレクションã¸ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®è¿½åŠ " #: ../../rst/dev_guide/developing_collections_migrating.rst:49 msgid "Create a PR in the new collection to:" msgstr "æ–°ã—ã„コレクション㧠PR を作æˆã—ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:51 msgid "Copy ALL the related files from the old collection." msgstr "å¤ã„コレクションã‹ã‚‰é–¢é€£ãƒ•ァイルをã™ã¹ã¦ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:52 msgid "If it is an action plugin, include the corresponding module with documentation." msgstr "アクションプラグインã®å ´åˆã¯ã€å¯¾å¿œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å«ã‚ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:53 msgid "If it is a module, check if it has a corresponding action plugin that should move with it." msgstr "モジュールã®å ´åˆã¯ã€å¯¾å¿œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインãŒã‚りã€ä¸€ç·’ã«ç§»å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:54 msgid "Check ``meta/`` for relevant updates to ``runtime.yml`` if it exists." msgstr "``meta/`` ã§ã€``runtime.yml`` ã«å¯¾ã™ã‚‹é–¢é€£æ›´æ–°ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€ãれを確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:55 msgid "Carefully check the moved ``tests/integration`` and ``tests/units`` and update for FQCN." msgstr "移動ã—㟠``tests/integration`` ãŠã‚ˆã³ ``tests/units`` を注æ„ã—ã¦ç¢ºèªã—ã€FQCN ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_migrating.rst:56 msgid "Review ``tests/sanity/ignore-*.txt`` entries in the old collection." msgstr "å¤ã„コレクション㮠``tests/sanity/ignore-*.txt`` エントリーを確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:57 msgid "Update ``meta/runtime.yml`` in the old collection." msgstr "å¤ã„コレクション㮠``meta/runtime.yml`` ã‚’æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:61 msgid "Removing the content from the old collection" msgstr "å¤ã„コレクションã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å‰Šé™¤" #: ../../rst/dev_guide/developing_collections_migrating.rst:63 msgid "Create a PR against the source collection repository to remove the modules, module_utils, plugins, and docs_fragments related to this migration:" msgstr "ソースコレクションリãƒã‚¸ãƒˆãƒªãƒ¼ã«å¯¾ã—㦠PR を作æˆã—ã€ã“ã®ç§»è¡Œã«é–¢é€£ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ãƒ—ラグインã€ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:65 msgid "If you are removing an action plugin, remove the corresponding module that contains the documentation." msgstr "アクションプラグインを削除ã™ã‚‹å ´åˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå«ã¾ã‚Œã‚‹å¯¾å¿œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:66 msgid "If you are removing a module, remove any corresponding action plugin that should stay with it." msgstr "モジュールを削除ã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾å¿œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインを削除ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_migrating.rst:67 msgid "Remove any entries about removed plugins from ``meta/runtime.yml``. Ensure they are added into the new repo." msgstr "削除ã•れãŸãƒ—ラグインã«é–¢ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ ``meta/runtime.yml`` ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚ãã‚Œã‚‰ãŒæ–°ã—ã„リãƒã‚¸ãƒˆãƒªãƒ¼ã«è¿½åŠ ã•れるよã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_migrating.rst:68 msgid "Remove sanity ignore lines from ``tests/sanity/ignore\\*.txt``" msgstr "``tests/sanity/ignore\\*.txt`` ã‹ã‚‰ã€sanity ignore (å¥å¸¸æ€§ã®ç„¡è¦–) ã®è¡Œã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:69 msgid "Remove associated integration tests from ``tests/integrations/targets/`` and unit tests from ``tests/units/plugins/``." msgstr "関連ã™ã‚‹çµ±åˆãƒ†ã‚¹ãƒˆã‚’ ``tests/units/plugins/`` ã‹ã‚‰å‰Šé™¤ã—ã€``tests/integrations/targets/`` ãŠã‚ˆã³ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:70 msgid "if you are removing from content from ``community.general`` or ``community.network``, remove entries from ``.github/BOTMETA.yml``." msgstr "``community.general`` ã¾ãŸã¯ ``community.network`` ã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã™ã‚‹ã¨ã€``.github/BOTMETA.yml`` ã‹ã‚‰ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:71 msgid "Carefully review ``meta/runtime.yml`` for any entries you may need to remove or update, in particular deprecated entries." msgstr "特定ã®éžæŽ¨å¥¨ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§å‰Šé™¤ã¾ãŸã¯æ›´æ–°ãŒå¿…è¦ã«ãªã‚‹å¯èƒ½æ€§ã®ã‚るエントリーã«ã¤ã„ã¦ã¯ã€``meta/runtime.yml`` ã‚’æ…Žé‡ã«ç¢ºèªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_migrating.rst:72 msgid "Update ``meta/runtime.yml`` to contain redirects for EVERY PLUGIN, pointing to the new collection name." msgstr "``meta/runtime.yml`` ã‚’æ›´æ–°ã—ã¦ã€æ–°ã—ã„コレクションåを示㙠EVERY PLUGIN ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:76 msgid "Maintainers for the old collection have to make sure that the PR is merged in a way that it does not break user experience and semantic versioning:" msgstr "å¤ã„コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã€PR ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã¨ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã‚’壊ã•ãªã„方法ã§ãƒžãƒ¼ã‚¸ã•れるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:78 msgid "A new version containing the merged PR must not be released before the collection the content has been moved to has been released again, with that content contained in it. Otherwise the redirects cannot work and users relying on that content will experience breakage." msgstr "マージã•れ㟠PR ã‚’å«ã‚€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒç§»å‹•ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå†ã³ãƒªãƒªãƒ¼ã‚¹ã•れるå‰ã«ãƒªãƒªãƒ¼ã‚¹ã•れã¦ã¯ãªã‚‰ãšã€ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ãã†ã—ãªã„ã¨ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæ©Ÿèƒ½ã›ãšã€ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ç ´æãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:79 msgid "Once 1.0.0 of the collection from which the content has been removed has been released, such PRs can only be merged for a new **major** version (in other words, 2.0.0, 3.0.0, and so on)." msgstr "コンテンツãŒå‰Šé™¤ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ 1.0.0 ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ã“ã® PR ã¯æ–°ã—ã„ **メジャー** ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (ã¤ã¾ã‚Š 2.0.0ã€3.0.0 ãªã©) ã®ã¿ã‚’マージã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:83 msgid "Updating BOTMETA.yml" msgstr "BOTMETA.yml ã®æ›´æ–°" #: ../../rst/dev_guide/developing_collections_migrating.rst:85 msgid "The ``BOTMETA.yml``, for example in `community.general collection repository `_, is the source of truth for:" msgstr "``BOTMETA.yml`` (ãŸã¨ãˆã° `community.general collection repository `_) ã¯ã€ä»¥ä¸‹ã®ä¿¡é ¼ã§ãるソースã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:87 msgid "ansibullbot" msgstr "ansibullbot" #: ../../rst/dev_guide/developing_collections_migrating.rst:89 msgid "If the old and/or new collection has ``ansibullbot``, its ``BOTMETA.yml`` must be updated correspondingly." msgstr "å¤ã„コレクションã¾ãŸã¯æ–°ã—ã„コレクション㧠``ansibullbot`` ãŒã‚ã‚‹å ´åˆã¯ã€ãれã«å¿œã˜ã¦ ``BOTMETA.yml`` ã‚’æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:91 msgid "Ansibulbot will know how to redirect existing issues and PRs to the new repo. The build process for docs.ansible.com will know where to find the module docs." msgstr "Ansibulbot ã¯ã€æ—¢å­˜ã®å•題㨠PR ã‚’æ–°ã—ã„リãƒã‚¸ãƒˆãƒªãƒ¼ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹æ–¹æ³•ã‚’èªè­˜ã—ã¾ã™ã€‚docs.ansible.com ã®ãƒ“ルドプロセスã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ–‡æ›¸ã®æ¤œç´¢å ´æ‰€ã‚’èªè­˜ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:110 msgid "`Example PR `_" msgstr "`PR ã®ä¾‹ `_" #: ../../rst/dev_guide/developing_collections_migrating.rst:112 msgid "The ``migrated_to:`` key must be added explicitly for every *file*. You cannot add ``migrated_to`` at the directory level. This is to allow module and plugin webdocs to be redirected to the new collection docs." msgstr "``migrated_to:`` キーã¯ã€*ファイル* ã”ã¨ã«æ˜Žç¤ºçš„ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ディレクトリーレベル㧠``migrated_to`` を追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。モジュールã¨ãƒ—ラグイン㮠Web ドキュメントを新ã—ã„コレクションã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:113 msgid "``migrated_to:`` MUST be added for every:" msgstr "以下ã®ã™ã¹ã¦ã« ``migrated_to:`` を追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_migrating.rst:115 #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "module" msgstr "モジュール" #: ../../rst/dev_guide/developing_collections_migrating.rst:116 msgid "plugin" msgstr "プラグイン" #: ../../rst/dev_guide/developing_collections_migrating.rst:117 #: ../../rst/dev_guide/developing_collections_structure.rst:98 msgid "module_utils" msgstr "モジュールユーティリティー" #: ../../rst/dev_guide/developing_collections_migrating.rst:118 msgid "contrib/inventory script" msgstr "contrib/inventory スクリプト" #: ../../rst/dev_guide/developing_collections_migrating.rst:120 msgid "You do NOT need to add ``migrated_to`` for:" msgstr "以下㫠``migrated_to`` を追加ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_migrating.rst:122 msgid "Unit tests" msgstr "ユニットテスト" #: ../../rst/dev_guide/developing_collections_migrating.rst:123 #: ../../rst/dev_guide/testing_integration.rst:7 msgid "Integration tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_collections_migrating.rst:124 msgid "ReStructured Text docs (anything under ``docs/docsite/rst/``)" msgstr "冿§‹ç¯‰ã•れãŸãƒ†ã‚­ã‚¹ãƒˆãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ (``docs/docsite/rst/`` ã®ä¸‹ã™ã¹ã¦)" #: ../../rst/dev_guide/developing_collections_migrating.rst:125 msgid "Files that never existed in ``ansible/ansible:devel``" msgstr "``ansible/ansible:devel`` ã«å­˜åœ¨ã—ãªã„ファイル" #: ../../rst/dev_guide/developing_collections_shared.rst:5 msgid "Using shared resources in collections" msgstr "コレクションã§å…±æœ‰ãƒªã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_collections_shared.rst:7 msgid "Although developing Ansible modules contained in collections is similar to developing standalone Ansible modules, you use shared resources like documentation fragments and module utilities differently in collections. You can use documentation fragments within and across collections. You can use optional module utilities to support multiple versions of ansible-core in your collection. Collections can also depend on other collections." msgstr "コレクションã«å«ã¾ã‚Œã‚‹ Ansible モジュールã®é–‹ç™ºã¯ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã® Ansible モジュールã®é–‹ç™ºã«ä¼¼ã¦ã„ã¾ã™ãŒã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントやモジュールユーティリティーãªã©ã®å…±æœ‰ãƒªã‚½ãƒ¼ã‚¹ã‚’ç•°ãªã‚‹æ–¹æ³•ã§ä½¿ç”¨ã—ã¾ã™ã€‚コレクション内ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³é–“ã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを使用ã§ãã¾ã™ã€‚ä»»æ„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã—ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ansible-core をサãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚コレクションãŒä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ä¾å­˜ã™ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:16 msgid "Using documentation fragments in collections" msgstr "コレクションã§ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_collections_shared.rst:18 msgid "To include documentation fragments in your collection:" msgstr "コレクションã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントをå«ã‚ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:20 msgid "Create the documentation fragment: ``plugins/doc_fragments/fragment_name``." msgstr "ドキュメントフラグメントを作æˆã—ã¾ã™ (``plugins/doc_fragments/fragment_name``)。" #: ../../rst/dev_guide/developing_collections_shared.rst:22 msgid "Refer to the documentation fragment with its FQCN." msgstr "FQCN ã‚’å«ã‚€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_shared.rst:32 msgid ":ref:`module_docs_fragments` covers the basics for documentation fragments. The `kubernetes.core `_ collection includes a complete example." msgstr ":ref:`module_docs_fragments` ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã®åŸºæœ¬ã‚’説明ã—ã¾ã™ã€‚`kubernetes.core `_ コレクションã«ã¯å®Œå…¨ãªä¾‹ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:34 msgid "If you use FQCN, you can use documentation fragments from one collection in another collection." msgstr "FQCN を使用ã™ã‚‹å ´åˆã¯ã€åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ 1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:39 msgid "Leveraging optional module utilities in collections" msgstr "コレクションã§ã®ä»»æ„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®æ´»ç”¨" #: ../../rst/dev_guide/developing_collections_shared.rst:41 msgid "Optional module utilities let you adopt the latest features from the most recent ansible-core release in your collection-based modules without breaking your collection on older Ansible versions. With optional module utilities, you can use the latest features when running against the latest versions, while still providing fallback behaviors when running against older versions." msgstr "ä»»æ„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã™ã‚‹ã¨ã€å¤ã„ Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’壊ã™ã“ã¨ãªãã€collection-base ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§æœ€æ–°ã® ansible-core ãƒªãƒªãƒ¼ã‚¹ã®æœ€æ–°æ©Ÿèƒ½ã‚’採用ã§ãã¾ã™ã€‚ä»»æ„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã™ã‚‹ã¨ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã«æœ€æ–°ã®æ©Ÿèƒ½ã‚’利用ã§ãã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã§ã‚‚フォールãƒãƒƒã‚¯å‹•作をæä¾›ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:43 msgid "This implementation, widely used in Python programming, wraps optional imports in conditionals or defensive `try/except` blocks, and implements fallback behaviors for missing imports. Ansible's module payload builder supports these patterns by treating any module_utils import nested in a block (e.g., `if`, `try`) as optional. If the requested import cannot be found during the payload build, it is simply omitted from the target payload and assumed that the importing code will handle its absence at runtime. Missing top-level imports of module_utils packages (imports that are not wrapped in a block statement of any kind) will fail the module payload build, and will not execute on the target." msgstr "ã“ã®å®Ÿè£…㯠Python プログラミングã§åºƒã使用ã•ã‚Œã€æ¡ä»¶ã¾ãŸã¯é™å®šã•れ㟠`try/except` ブロックã§ä»»æ„ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’ラップã—ã€ä¸è¶³ã—ã¦ã„るインãƒãƒ¼ãƒˆã®ãƒ•ォールãƒãƒƒã‚¯å‹•作を実装ã—ã¾ã™ã€‚Ansible ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãƒ“ルダーã¯ã€ãƒ–ロックã§ãƒã‚¹ãƒˆã•れ㟠module_utils インãƒãƒ¼ãƒˆ (例: `if`ã€`try`) をオプションã¨ã—ã¦æ‰±ã†ã“ã¨ã«ã‚ˆã‚Šã€ã“れらã®ãƒ‘ターンをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ペイロードビルド時ã«è¦æ±‚ã•れãŸã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã€ã“れã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‹ã‚‰çœç•¥ã•れã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚³ãƒ¼ãƒ‰ãŒãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã«å‡¦ç†ã•れãªã„ã“ã¨ãŒä»®å®šã•れã¾ã™ã€‚module_utils パッケージã®ãƒˆãƒƒãƒ—レベルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ (ã‚らゆる種類ã®ãƒ–ロックステートメントã§ãƒ©ãƒƒãƒ—ã•れã¦ã„ãªã„インãƒãƒ¼ãƒˆ) ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãƒ“ルドã«å¤±æ•—ã—ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã¯å®Ÿè¡Œã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_shared.rst:45 msgid "For example, the `ansible.module_utils.common.respawn` package is only available in Ansible 2.11 and higher. The following module code would fail during the payload build on Ansible 2.10 or earlier (as the requested Python module does not exist, and is not wrapped in a block to signal to the payload builder that it can be omitted from the module payload):" msgstr "ãŸã¨ãˆã°ã€`ansible.module_utils.common.respawn` パッケージ㯠Ansible 2.11 以é™ã§ã—ã‹åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã¯ Ansible 2.10 以å‰ã§ã®ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãƒ“ルド中ã«å¤±æ•—ã—ã¾ã™ (è¦æ±‚ã•れ㟠Python モジュールãŒå­˜åœ¨ã›ãšã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‹ã‚‰çœç•¥ã§ãã‚‹ã“ã¨ã‚’ペイロードビルダーã«é€šçŸ¥ã™ã‚‹ãƒ–ロックã«ãƒ©ãƒƒãƒ—ã•れã¦ã„ãªã„ãŸã‚)。" #: ../../rst/dev_guide/developing_collections_shared.rst:51 msgid "By wrapping the import statement in a ``try`` block, the payload builder will omit the Python module if it cannot be located, and assume that the Ansible module will handle it at runtime:" msgstr "``try`` ブロック㧠import ステートメントをラップã™ã‚‹ã“ã¨ã§ã€ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãƒ“ルダーã¯ã€Python モジュールãŒè¦‹ã¤ã‹ã‚‰ãªã„㨠Python モジュールをçœç•¥ã—ã€Ansible モジュールãŒãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã«å‡¦ç†ã™ã‚‹ã“ã¨ã‚’想定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:66 msgid "The optional import behavior also applies to module_utils imported from collections." msgstr "ä»»æ„ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆå‹•作ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_shared.rst:71 msgid "Listing collection dependencies" msgstr "コレクションã®ä¾å­˜é–¢ä¿‚ã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/dev_guide/developing_collections_shared.rst:73 msgid "We recommend that collections work as standalone, independent units, depending only on ansible-core. However, if your collection must depend on features and functionality from another collection, list the other collection or collections under ``dependencies`` in your collection's :file:`galaxy.yml` file. For more information on the :file:`galaxy.yml` file, see :ref:`collections_galaxy_meta`." msgstr "コレクションã¯ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ç‹¬ç«‹ã—ãŸãƒ¦ãƒ‹ãƒƒãƒˆã¨ã—ã¦å‹•作ã—ã€ansible-coreã«ã®ã¿ä¾å­˜ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ã—ã‹ã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ©Ÿèƒ½ã«ä¾å­˜ã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® :file:`galaxy.yml` ファイルã®``dependencies`` セクションã«ã€ä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’リストアップã—ã¦ãã ã•ã„。:file:`galaxy.yml` ファイルã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`collections_galaxy_meta` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_shared.rst:75 msgid "You can use git repositories for collection dependencies during local development and testing. For example:" msgstr "ローカルã§ã®é–‹ç™ºã‚„テストã®éš›ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¾å­˜é–¢ä¿‚用ã«gitリãƒã‚¸ãƒˆãƒªã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:5 msgid "Collection structure" msgstr "コレクション構造" #: ../../rst/dev_guide/developing_collections_structure.rst:7 msgid "A collection is a simple data structure. None of the directories are required unless you have specific content that belongs in one of them. A collection does require a ``galaxy.yml`` file at the root level of the collection. This file contains all of the metadata that Galaxy and other tools need in order to package, build and publish the collection." msgstr "コレクションã¯ç°¡å˜ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã§ã™ã€‚ãれらã®ä¸­ã® 1 ã¤ã«å±žã™ã‚‹ç‰¹å®šã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒãªã„é™ã‚Šã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯å¿…è¦ã‚りã¾ã›ã‚“。コレクションã®ãƒ«ãƒ¼ãƒˆãƒ¬ãƒ™ãƒ«ã§ ``galaxy.yml`` ファイルãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ã€Galaxy ã‚„ãã®ä»–ã®ãƒ„ールãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’パッケージ化ã€ãƒ“ルドã€å…¬é–‹ã™ã‚‹ã®ã«å¿…è¦ãªãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãŒã™ã¹ã¦å«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:14 msgid "Collection directories and files" msgstr "コレクションディレクトリーãŠã‚ˆã³ãƒ•ァイル" #: ../../rst/dev_guide/developing_collections_structure.rst:16 msgid "A collection can contain these directories and files::" msgstr "コレクションã«ã¯ã€ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŠã‚ˆã³ãƒ•ァイルをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:41 msgid "Ansible only accepts ``.md`` extensions for the :file:`README` file and any files in the :file:`/docs` folder." msgstr "Ansible ã¯ã€:file:`README` ファイルãŠã‚ˆã³ :file:`/docs` フォルダー内ã®ã™ã¹ã¦ã®ãƒ•ァイル㮠``.md`` æ‹¡å¼µå­ã®ã¿ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:42 msgid "See the `ansible-collections `_ GitHub Org for examples of collection structure." msgstr "コレクション構造ã®ä¾‹ã¯ã€`ansible-collections `_ GitHub Org ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:43 msgid "Not all directories are currently in use. Those are placeholders for future features." msgstr "ç¾åœ¨ã€ã™ã¹ã¦ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒä½¿ç”¨ã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ã“れらã¯ã€å°†æ¥ã®æ©Ÿèƒ½ã®ãƒ—レースホルダーã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:48 msgid "galaxy.yml" msgstr "galaxy.yml" #: ../../rst/dev_guide/developing_collections_structure.rst:50 msgid "A collection must have a ``galaxy.yml`` file that contains the necessary information to build a collection artifact. See :ref:`collections_galaxy_meta` for details." msgstr "コレクションã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトを構築ã™ã‚‹ãŸã‚ã«å¿…è¦ãªæƒ…å ±ãŒå«ã¾ã‚Œã‚‹ ``galaxy.yml`` ファイルãŒå¿…è¦ã§ã™ã€‚詳細ã¯ã€ã€Œ:ref:`collections_galaxy_meta`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:55 msgid "docs directory" msgstr "docs ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:57 msgid "Use the ``docs`` folder to describe how to use the roles and plugins the collection provides, role requirements, and so on." msgstr "``docs`` フォルダを使用ã—ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒæä¾›ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¨ãƒ—ラグインã®ä½¿ç”¨æ–¹æ³•ã€ãƒ­ãƒ¼ãƒ«ã®è¦ä»¶ãªã©ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:59 msgid "For certified collections, Automation Hub displays documents written in markdown in the main ``docs`` directory with no subdirectories. This will not display on https://docs.ansible.com." msgstr "èªå®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Automation Hubã¯ã€ã‚µãƒ–ディレクトリをæŒãŸãªã„メインã®``docs`` ディレクトリã«ãƒžãƒ¼ã‚¯ãƒ€ã‚¦ãƒ³ã§æ›¸ã‹ã‚ŒãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã—ã¾ã™ã€‚ã“れã¯ã€https://docs.ansible.com.ã«ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_structure.rst:61 msgid "For community collections included in the Ansible PyPI package, docs.ansible.com displays documents written in reStructuredText (.rst) in a docsite/rst/ subdirectory. Define the structure of your extra documentation in ``docs/docsite/extra-docs.yml``:" msgstr "Ansibleã®PyPIパッケージã«å«ã¾ã‚Œã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å ´åˆã€docs.ansible.comã¯reStructuredText(.rstï¼‰ã§æ›¸ã‹ã‚ŒãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’docsite/rst/サブディレクトリã«è¡¨ç¤ºã—ã¾ã™ã€‚``docs/docsite/extra-docs.yml`` ã§è¿½åŠ ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ§‹é€ ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:71 msgid "The index page of the documentation for your collection displays the title you define in ``docs/docsite/extra-docs.yml`` with a link to your extra documentation. For an example, see the `community.docker collection repo `_ and the `community.docker collection documentation `_." msgstr "コレクションã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¸ã«ã¯ã€``docs/docsite/extra-docs.yml`` ã§å®šç¾©ã—ãŸã‚¿ã‚¤ãƒˆãƒ«ã¨ã€è¿½åŠ ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¸ã®ãƒªãƒ³ã‚¯ãŒè¡¨ç¤ºã•れã¾ã™ã€‚例ã¨ã—ã¦ã¯ã€`community.docker collection repo `_ ã¨`community.docker collection documentation `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:74 msgid "Plugin and module documentation" msgstr "プラグインã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/dev_guide/developing_collections_structure.rst:76 msgid "Keep the specific documentation for plugins and modules embedded as Python docstrings. Use ``ansible-doc`` to view documentation for plugins inside a collection:" msgstr "Python ドキュメント文字列ã¨ã—ã¦åŸ‹ã‚è¾¼ã¾ã‚ŒãŸãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢ã™ã‚‹ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ä¿æŒã—ã¾ã™ã€‚コレクション内ã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã™ã‚‹ã«ã¯``ansible-doc`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:82 msgid "The ``ansible-doc`` command requires the fully qualified collection name (FQCN) to display specific plugin documentation. In this example, ``my_namespace`` is the Galaxy namespace and ``my_collection`` is the collection name within that namespace." msgstr "特定ã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã™ã‚‹ã«ã¯ã€``ansible-doc`` コマンドã«å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ãŒå¿…è¦ã§ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``my_namespace`` 㯠Galaxy åå‰ç©ºé–“ã¨ãªã‚Šã€``my_collection`` ã¯ãã®åå‰ç©ºé–“内ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:84 msgid "The Galaxy namespace of an Ansible collection is defined in the ``galaxy.yml`` file. It can be different from the GitHub organization or repository name." msgstr "Ansible コレクション㮠Galaxy åå‰ç©ºé–“㯠``galaxy.yml`` ファイルã§å®šç¾©ã•れã¾ã™ã€‚GitHub ã®çµ„ç¹”ã¾ãŸã¯ãƒªãƒã‚¸ãƒˆãƒªãƒ¼åã¨ã¯ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:89 msgid "plugins directory" msgstr "plugins ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:91 msgid "Add a 'per plugin type' specific subdirectory here, including ``module_utils`` which is usable not only by modules, but by most plugins by using their FQCN. This is a way to distribute modules, lookups, filters, and so on without having to import a role in every play." msgstr "「プラグインタイプã”ã¨ã€ã®ç‰¹æœ‰ã‚µãƒ–ディレクトリーをã“ã“ã«è¿½åŠ ã—ã¾ã™ã€‚ã“れã«ã¯ã€ãã® FQCN を使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã ã‘ã§ãªãã»ã¨ã‚“ã©ã®ãƒ—ラグインã§ä½¿ç”¨ã§ãã‚‹ ``module_utils`` ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã®ãƒ—レイã§ãƒ­ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãªããƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€æ¤œç´¢ã€ãƒ•ィルターãªã©ã‚’分散ã™ã‚‹æ–¹æ³•ã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:93 msgid "Vars plugins are unsupported in collections. Cache plugins may be used in collections for fact caching, but are not supported for inventory plugins." msgstr "コレクションã§ã¯ã€vars プラグインã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。cache プラグインã¯ãƒ•ァクトキャッシュã®ãŸã‚ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ä½¿ç”¨ã§ãã¾ã™ãŒã€inventory プラグインã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_structure.rst:100 msgid "When coding with ``module_utils`` in a collection, the Python ``import`` statement needs to take into account the FQCN along with the ``ansible_collections`` convention. The resulting Python import will look like ``from ansible_collections.{namespace}.{collection}.plugins.module_utils.{util} import {something}``" msgstr "コレクション㧠``module_utils`` を使用ã—ã¦ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹å ´åˆã€Python ã® ``import`` ステートメント㯠``ansible_collections`` è¦å‰‡ã¨ã¨ã‚‚ã« FQCN を考慮ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚作æˆã•れる Python インãƒãƒ¼ãƒˆã¯ ``from ansible_collections.{namespace}.{collection}.plugins.module_utils.{util} import {something}`` ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:102 msgid "The following example snippets show a Python and PowerShell module using both default Ansible ``module_utils`` and those provided by a collection. In this example the namespace is ``community``, the collection is ``test_collection``. In the Python example the ``module_util`` in question is called ``qradar`` such that the FQCN is ``community.test_collection.plugins.module_utils.qradar``:" msgstr "以下ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã®ä¾‹ã¯ã€ãƒ‡ãƒ•ォルト㮠Ansible ``module_utils`` ã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã‚’使用ã™ã‚‹ Python ãŠã‚ˆã³ PowerShell モジュールを示ã—ã¦ã„ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€åå‰ç©ºé–“㯠``community`` ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ ``test_collection`` ã§ã™ã€‚Python ã®ä¾‹ã§ã¯ã€å•題㮠``module_util`` 㯠``qradar`` ã¨å‘¼ã°ã‚Œã€FQCN ㌠``community.test_collection.plugins.module_utils.qradar`` ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:132 msgid "Note that importing something from an ``__init__.py`` file requires using the file name:" msgstr "``__init__.py`` ファイルã‹ã‚‰ä½•ã‹ã‚’インãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€ãƒ•ァイルåを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:138 msgid "In the PowerShell example the ``module_util`` in question is called ``hyperv`` such that the FQCN is ``community.test_collection.plugins.module_utils.hyperv``:" msgstr "PowerShell ã®ä¾‹ã§ã¯ã€å•題㮠``module_util`` 㯠``hyperv`` ã¨å‘¼ã°ã‚Œã€FQCN ㌠``community.test_collection.plugins.module_utils.hyperv`` ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:160 msgid "roles directory" msgstr "roles ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:162 msgid "Collection roles are mostly the same as existing roles, but with a couple of limitations:" msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã¯æ—¢å­˜ãƒ­ãƒ¼ãƒ«ã¨ã»ã¼åŒã˜ã§ã™ãŒã€ã„ãã¤ã‹åˆ¶é™ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:164 msgid "Role names are now limited to contain only lowercase alphanumeric characters, plus ``_`` and start with an alpha character." msgstr "ロールåã¯ã€å°æ–‡å­—ã®è‹±æ•°å­—㨠``_`` ã®ã¿ã‚’å«ã¿ã€è‹±å­—ã§é–‹å§‹ã™ã‚‹ã‚ˆã†ã«åˆ¶é™ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:165 msgid "Roles in a collection cannot contain plugins any more. Plugins must live in the collection ``plugins`` directory tree. Each plugin is accessible to all roles in the collection." msgstr "コレクション内ã®ãƒ­ãƒ¼ãƒ«ã«ã¯ãƒ—ラグインをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。プラグインã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``plugins`` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ„ãƒªãƒ¼ã§æŒç¶šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚å„プラグインã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:167 msgid "The directory name of the role is used as the role name. Therefore, the directory name must comply with the above role name rules. The collection import into Galaxy will fail if a role name does not comply with these rules." msgstr "ロールã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åã¯ãƒ­ãƒ¼ãƒ«åã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚ãã®ãŸã‚ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åã¯ä¸Šè¨˜ã®ãƒ­ãƒ¼ãƒ«åルールã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚Galaxy ã¸ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã€ãƒ­ãƒ¼ãƒ«åãŒã“れらã®ãƒ«ãƒ¼ãƒ«ã«æº–æ‹ ã—ã¦ã„ãªã„ã¨å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:169 msgid "You can migrate 'traditional roles' into a collection but they must follow the rules above. You may need to rename roles if they don't conform. You will have to move or link any role-based plugins to the collection specific directories." msgstr "「従æ¥ã®ãƒ­ãƒ¼ãƒ«ã€ã‚’コレクションã«ç§»è¡Œã§ãã¾ã™ãŒã€ä¸Šè¨˜ã®ãƒ«ãƒ¼ãƒ«ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚éµå®ˆã—ã¦ã„ãªã„å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®åå‰ã‚’変更ã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ロールベースã®ãƒ—ラグインをコレクション固有ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç§»å‹•ã™ã‚‹ã‹ã€ãƒªãƒ³ã‚¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:173 msgid "For roles imported into Galaxy directly from a GitHub repository, setting the ``role_name`` value in the role's metadata overrides the role name used by Galaxy. For collections, that value is ignored. When importing a collection, Galaxy uses the role directory as the name of the role and ignores the ``role_name`` metadata value." msgstr "ロール㌠GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ Galaxy ã«ç›´æŽ¥ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸå ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã« ``role_name`` 値を設定ã™ã‚‹ã¨ã€Galaxy ãŒä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ãƒ«åãŒä¸Šæ›¸ãã•れã¾ã™ã€‚コレクションã®å ´åˆã€ã“ã®å€¤ã¯ç„¡è¦–ã•れã¾ã™ã€‚コレクションをインãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€Galaxy ã¯ãƒ­ãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ロールåã¨ã—ã¦ä½¿ç”¨ã—ã€``role_name`` メタデータã®å€¤ã‚’無視ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:176 msgid "playbooks directory" msgstr "playbooks ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:178 msgid "In prior releases, you could reference playbooks in this directory using the full path to the playbook file from the command line. In ansible-core 2.11 and later, you can use the FQCN, ``namespace.collection.playbook`` (with or without extension), to reference the playbooks from the command line or from ``import_playbook``. This will keep the playbook in 'collection context', as if you had added ``collections: [ namespace.collection ]`` to it." msgstr "以å‰ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰Playbookファイルã®ãƒ•ルパスを使用ã—ã¦ã€ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®Playbookã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚ansible-core 2.11以é™ã§ã¯ã€FQCNã§ã‚ã‚‹``namespace.collection.playbook`` (拡張å­ã‚りã€ãªã—)を使ã£ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã¾ãŸã¯``import_playbook`` ã‹ã‚‰Playbookã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚ãŸã‹ã‚‚``collections: [ namespace.collection ]`` を追加ã—ãŸã‹ã®ã‚ˆã†ã«ã€PlaybookãŒã€Œã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã€ã«ä¿ãŸã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:182 msgid "You can have most of the subdirectories you would expect, such ``files/``, ``vars/`` or ``templates/`` but no ``roles/`` since those are handled already in the collection." msgstr "``files/`` ã€``vars/`` ã€``templates/`` ãªã©ã€æœŸå¾…ã•れるã»ã¨ã‚“ã©ã®ã‚µãƒ–ディレクトリをæŒã¤ã“ã¨ãŒã§ãã¾ã™ãŒã€``roles/`` ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã§ã«æ‰±ã‚れã¦ã„ã‚‹ãŸã‚ã€æŒã¤ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_collections_structure.rst:187 msgid "tests directory" msgstr "tests ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:189 msgid "Ansible Collections are tested much like Ansible itself, by using the `ansible-test` utility which is released as part of Ansible, version 2.9.0 and newer. Because Ansible Collections are tested using the same tooling as Ansible itself, via `ansible-test`, all Ansible developer documentation for testing is applicable for authoring Collections Tests with one key concept to keep in mind." msgstr "Ansible Collection ã¯ã€Ansible 自体ã¨åŒã˜ã‚ˆã†ã«ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9.0 以é™ã«åŒæ¢±ã•れる `ansible-test` ユーティリティーを使用ã—ã¦ãƒ†ã‚¹ãƒˆã•れã¾ã™ã€‚Ansible コレクション㯠Ansible 自体ã¨åŒã˜ãƒ„ールを使用ã—ã¦ãƒ†ã‚¹ãƒˆã•れるãŸã‚ã€`ansible-test` を介ã—ã¦ã€ãƒ†ã‚¹ãƒˆç”¨ã®ã™ã¹ã¦ã® Ansible 開発者å‘ã‘ドキュメントã¯ã€è¦šãˆã¦ãŠãã¹ã 1 ã¤ã®é‡è¦ãªæ¦‚念を使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ†ã‚¹ãƒˆã‚’作æˆã™ã‚‹ãŸã‚ã«é©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:191 msgid "See :ref:`testing_collections` for specific information on how to test collections with ``ansible-test``." msgstr "``ansible-test`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’テストã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`testing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_structure.rst:193 msgid "When reading the :ref:`developing_testing` documentation, there will be content that applies to running Ansible from source code via a git clone, which is typical of an Ansible developer. However, it's not always typical for an Ansible Collection author to be running Ansible from source but instead from a stable release, and to create Collections it is not necessary to run Ansible from source. Therefore, when references of dealing with `ansible-test` binary paths, command completion, or environment variables are presented throughout the :ref:`developing_testing` documentation; keep in mind that it is not needed for Ansible Collection Testing because the act of installing the stable release of Ansible containing `ansible-test` is expected to setup those things for you." msgstr ":ref:`developing_testing` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’読む際ã€Ansible 開発者ã®å…¸åž‹çš„㪠git clone を使用ã—ã¦ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‹ã‚‰ Ansible を実行ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã‚りã¾ã™ã€‚ãŸã ã—ã€Ansible Collection ã®ä½œæˆè€…ãŒã‚½ãƒ¼ã‚¹ã‹ã‚‰ Ansible を実行ã™ã‚‹ã“ã¨ã¯å¸¸ã«ä¸€èˆ¬çš„ã§ã¯ãªãã€å®‰å®šã—ãŸãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰ã§ã¯ãªãã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã«ã¯ã€ã‚½ãƒ¼ã‚¹ã‹ã‚‰ Ansible を実行ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ãã®ãŸã‚ã€`ansible-test` ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ‘スã€ã‚³ãƒžãƒ³ãƒ‰è£œå®Œã€ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã«ã¤ã„ã¦ã¯ã€:ref:`developing_testing` ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§æç¤ºã•れã¾ã™ã€‚Ansible Collection Testing ã§ã¯ã“れãŒå¿…è¦ã‚りã¾ã›ã‚“。`ansible-test` ã‚’å«ã‚€ Ansible ã®å®‰å®šã—ãŸãƒªãƒªãƒ¼ã‚¹ã‚’インストールã™ã‚‹ã«ã¯ã€ã“れらをセットアップã™ã‚‹ã“ã¨ãŒäºˆæƒ³ã•れるãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:198 msgid "meta directory" msgstr "meta ディレクトリー" #: ../../rst/dev_guide/developing_collections_structure.rst:200 msgid "A collection can store some additional metadata in a ``runtime.yml`` file in the collection's ``meta`` directory. The ``runtime.yml`` file supports the top level keys:" msgstr "コレクションã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``meta`` ディレクトリー㮠``runtime.yml`` ファイルã«è¿½åŠ ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã§ãã¾ã™ã€‚``runtime.yml`` ファイルã¯ã€æœ€ä¸Šä½ã®ã‚­ãƒ¼ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:202 msgid "*requires_ansible*:" msgstr "*requires_ansible*:" #: ../../rst/dev_guide/developing_collections_structure.rst:204 msgid "The version of Ansible required to use the collection. Multiple versions can be separated with a comma." msgstr "コレクションを使用ã™ã‚‹ãŸã‚ã«å¿…è¦ãª Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚複数ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã‚³ãƒ³ãƒžã§åŒºåˆ‡ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:210 msgid "although the version is a `PEP440 Version Specifier `_ under the hood, Ansible deviates from PEP440 behavior by truncating prerelease segments from the Ansible version. This means that Ansible 2.11.0b1 is compatible with something that ``requires_ansible: \">=2.11\"``." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ `PEP440 ãƒãƒ¼ã‚¸ãƒ§ãƒ³æŒ‡å®šå­ `_ ã§ã™ãŒã€å†…部ã§ã¯ã€Ansible ã¯ãƒ—レリリースセグメントを Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰åˆ‡ã‚Šæ¨ã¦ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€PEP440 ã®å‹•作ã‹ã‚‰é€¸è„±ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€Ansible2.11.0b1 ㌠``requires_ansible: \">=2.11\"`` ã§ã‚ã‚‹ã‚‚ã®ã¨äº’æ›æ€§ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:212 msgid "*plugin_routing*:" msgstr "*plugin_routing*:" #: ../../rst/dev_guide/developing_collections_structure.rst:214 msgid "Content in a collection that Ansible needs to load from another location or that has been deprecated/removed. The top level keys of ``plugin_routing`` are types of plugins, with individual plugin names as subkeys. To define a new location for a plugin, set the ``redirect`` field to another name. To deprecate a plugin, use the ``deprecation`` field to provide a custom warning message and the removal version or date. If the plugin has been renamed or moved to a new location, the ``redirect`` field should also be provided. If a plugin is being removed entirely, ``tombstone`` can be used for the fatal error message and removal version or date." msgstr "Ansible ãŒåˆ¥ã®å ´æ‰€ã‹ã‚‰èª­ã¿è¾¼ã‚€å¿…è¦ãŒã‚るコレクション内ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã€ã‚‚ã—ãã¯éžæŽ¨å¥¨ã¨ãªã£ãŸã‹å‰Šé™¤ã•れるコレクションã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„。``plugin_routing`` ã®æœ€ä¸Šä½ã®ã‚­ãƒ¼ã¯ãƒ—ラグインã®ã‚¿ã‚¤ãƒ—ã§ã€å€‹ã€…ã®ãƒ—ラグインåをサブキーã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ–°ã—ã„場所を定義ã™ã‚‹ã«ã¯ã€``redirect`` フィールドを別ã®åå‰ã«è¨­å®šã—ã¾ã™ã€‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã«ã¯ã€``deprecation`` フィールドを使用ã—ã¦ã‚«ã‚¹ã‚¿ãƒ è­¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨å‰Šé™¤ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¾ãŸã¯æ—¥ä»˜ã‚’指定ã—ã¾ã™ã€‚プラグインã®åå‰ãŒå¤‰æ›´ã™ã‚‹ã‹æ–°ã—ã„場所ã«ç§»å‹•ã™ã‚‹å ´åˆã¯ã€``redirect`` フィールドも入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラグインãŒå®Œå…¨ã«å‰Šé™¤ã•れる場åˆã€``tombstone`` ã¯è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€ãŠã‚ˆã³å‰Šé™¤ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¾ãŸã¯æ—¥ä»˜ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:243 msgid "*import_redirection*" msgstr "*import_redirection*" #: ../../rst/dev_guide/developing_collections_structure.rst:245 msgid "A mapping of names for Python import statements and their redirected locations." msgstr "Python インãƒãƒ¼ãƒˆã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã®åå‰ã¨ãã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れãŸå ´æ‰€ã®ãƒžãƒƒãƒ”ング。" #: ../../rst/dev_guide/developing_collections_structure.rst:253 msgid "*action_groups*" msgstr "*action_groups*" #: ../../rst/dev_guide/developing_collections_structure.rst:255 msgid "A mapping of groups and the list of action plugin and module names they contain. They may also have a special 'metadata' dictionary in the list, which can be used to include actions from other groups." msgstr "グループã¨ã€ãれã«å«ã¾ã‚Œã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã®ãƒªã‚¹ãƒˆã®ãƒžãƒƒãƒ”ングã§ã™ã€‚ã¾ãŸã€ãƒªã‚¹ãƒˆã®ä¸­ã«ç‰¹åˆ¥ãªã€Œãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã‚‚ã‚りã€ã“れを使ã£ã¦ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_structure.rst:273 msgid ":ref:`distributing_collections`" msgstr ":ref:`distributing_collections`" #: ../../rst/dev_guide/developing_collections_structure.rst:274 msgid "Learn how to package and publish your collection" msgstr "コレクションをパッケージ化ã—ã€å…¬é–‹ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:5 msgid "Testing collections" msgstr "コレクションã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_collections_testing.rst:7 msgid "Testing your collection ensures that your code works well and integrates well with the rest of the Ansible ecosystem. Your collection should pass the general compile and sanity tests for Ansible code. You should also add unit tests to cover the code in your collection and integration tests to cover the interactions between your collection and ansible-core." msgstr "コレクションã®ãƒ†ã‚¹ãƒˆã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ãŒé©åˆ‡ã«æ©Ÿèƒ½ã—ã€Ansible エコシステムã®ä»–ã®éƒ¨åˆ†ã¨ã®çµ±åˆæ€§ãŒå‘上ã—ã¾ã™ã€‚コレクションã§ã¯ã€Ansible コードã®ä¸€èˆ¬çš„ãªã‚³ãƒ³ãƒ‘イルãŠã‚ˆã³å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’渡ã—ã¾ã™ã€‚ã¾ãŸã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒ¼ãƒ‰ã«å¯¾å¿œã™ã‚‹ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ ansible-core ã¨ã®é–“ã®å¯¾è©±ã«å¯¾å¿œã™ã‚‹çµ±åˆãƒ†ã‚¹ãƒˆã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:14 msgid "Testing tools" msgstr "テストツール" #: ../../rst/dev_guide/developing_collections_testing.rst:16 msgid "The main tool for testing collections is ``ansible-test``, Ansible's testing tool described in :ref:`developing_testing`. You can run several compile and sanity checks, as well as run unit and integration tests for plugins using ``ansible-test``. When you test collections, test against the ansible-core version(s) you are targeting." msgstr "コレクションをテストã™ã‚‹ä¸»ãªãƒ„ールã¯ã€:ref:`developing_testing` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹ Ansible ã®ãƒ†ã‚¹ãƒˆãƒ„ールã§ã‚ã‚‹ ``ansible-test`` ã§ã™ã€‚ã¾ãŸã€è¤‡æ•°ã®ã‚³ãƒ³ãƒ‘イルãƒã‚§ãƒƒã‚¯ã¨å¥å…¨æ€§ãƒã‚§ãƒƒã‚¯ã‚’実行ã—ãŸã‚Šã€``ansible-test`` を使用ã—ã¦ãƒ—ラグイン用ã«ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚„çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã§ãã¾ã™ã€‚コレクションをテストã™ã‚‹å ´åˆã«ã€ä½¿ç”¨ã™ã‚‹ ansible-core ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:18 msgid "You must always execute ``ansible-test`` from the root directory of a collection. You can run ``ansible-test`` in Docker containers without installing any special requirements. The Ansible team uses this approach in Azure Pipelines both in the ansible/ansible GitHub repository and in the large community collections such as `community.general `_ and `community.network `_. The examples below demonstrate running tests in Docker containers." msgstr "常ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ã€``ansible-test`` を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚特別ãªè¦ä»¶ã‚’インストールã›ãšã« Docker コンテナー㮠``ansible-test`` を実行ã§ãã¾ã™ã€‚Ansible ãƒãƒ¼ãƒ ã¯ã€ansible/ansible GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã¨ã€`community.general `_ ã‚„ `community.network `_ よã†ãªå¤§è¦æ¨¡ãªã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã® Azure Pipeline ã§ã€ã“ã®ã‚¢ãƒ—ローãƒã‚’使用ã—ã¾ã™ã€‚以下ã®ä¾‹ã§ã¯ã€Docker コンテナーã§ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œæ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:21 msgid "Compile and sanity tests" msgstr "コンパイルã¨å¥å…¨æ€§ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_collections_testing.rst:23 msgid "To run all compile and sanity tests::" msgstr "ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ‘イルãŠã‚ˆã³å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:27 msgid "See :ref:`testing_compile` and :ref:`testing_sanity` for more information. See the :ref:`full list of sanity tests ` for details on the sanity tests and how to fix identified issues." msgstr "詳細ã¯ã€:ref:`testing_compile` ãŠã‚ˆã³ :ref:`testing_sanity` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®è©³ç´°ã¨ã€ç‰¹å®šã•れãŸå•題を修正ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®å®Œå…¨ãƒªã‚¹ãƒˆ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_testing.rst:30 #: ../../rst/dev_guide/developing_modules_general.rst:193 msgid "Adding unit tests" msgstr "ユニットテストã®è¿½åŠ " #: ../../rst/dev_guide/developing_collections_testing.rst:32 msgid "You must place unit tests in the appropriate ``tests/unit/plugins/`` directory. For example, you would place tests for ``plugins/module_utils/foo/bar.py`` in ``tests/unit/plugins/module_utils/foo/test_bar.py`` or ``tests/unit/plugins/module_utils/foo/bar/test_bar.py``. For examples, see the `unit tests in community.general `_." msgstr "ユニットテストをé©åˆ‡ãª ``tests/unit/plugins/`` ディレクトリーã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``tests/unit/plugins/module_utils/foo/test_bar.py`` ã¾ãŸã¯ ``tests/unit/plugins/module_utils/foo/bar/test_bar.py`` ã® ``plugins/module_utils/foo/bar.py`` ã«ãƒ†ã‚¹ãƒˆã‚’ç½®ãã¾ã™ã€‚ãŸã¨ãˆã°ã€`unit tests in community.general `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_testing.rst:34 msgid "To run all unit tests for all supported Python versions::" msgstr "サãƒãƒ¼ãƒˆã•れるã™ã¹ã¦ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦ã€ã™ã¹ã¦ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:38 msgid "To run all unit tests only for a specific Python version::" msgstr "特定㮠Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦ã®ã¿ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’ã™ã¹ã¦å®Ÿè¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:42 msgid "To run only a specific unit test::" msgstr "特定ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®ã¿ã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:46 msgid "You can specify Python requirements in the ``tests/unit/requirements.txt`` file. See :ref:`testing_units` for more information, especially on fixture files." msgstr "``tests/unit/requirements.txt`` ファイル㧠Python è¦ä»¶ã‚’指定ã§ãã¾ã™ã€‚詳細 (特ã«ãƒ•ィクスãƒãƒ£ãƒ¼ãƒ•ァイルã®è©³ç´°) ã¯ã€ã€Œ:ref:`testing_units`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_testing.rst:49 msgid "Adding integration tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®è¿½åŠ " #: ../../rst/dev_guide/developing_collections_testing.rst:51 msgid "You must place integration tests in the appropriate ``tests/integration/targets/`` directory. For module integration tests, you can use the module name alone. For example, you would place integration tests for ``plugins/modules/foo.py`` in a directory called ``tests/integration/targets/foo/``. For non-module plugin integration tests, you must add the plugin type to the directory name. For example, you would place integration tests for ``plugins/connections/bar.py`` in a directory called ``tests/integration/targets/connection_bar/``. For lookup plugins, the directory must be called ``lookup_foo``, for inventory plugins, ``inventory_foo``, and so on." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€é©åˆ‡ãª ``tests/integration/targets/`` ディレクトリーã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã ã‘を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``plugins/modules/foo.py`` ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’ ``tests/integration/targets/foo/`` ã¨ã„ã†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ãã“ã¨ã«ãªã‚Šã¾ã™ã€‚モジュール以外ã®ãƒ—ラグインã®çµ±åˆãƒ†ã‚¹ãƒˆã§ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åã«ãƒ—ラグインタイプを追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``plugins/connections/bar.py`` ã®çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€``tests/integration/targets/connection_bar/`` ã¨ã„ã†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ãã“ã¨ã«ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—プラグインã®å ´åˆã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å㯠``lookup_foo`` ã¨ãªã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ—ラグインã®å ´åˆã¯ã€``inventory_foo`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:53 msgid "You can write two different kinds of integration tests:" msgstr "2 種類ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:55 msgid "Ansible role tests run with ``ansible-playbook`` and validate various aspects of the module. They can depend on other integration tests (usually named ``prepare_bar`` or ``setup_bar``, which prepare a service or install a requirement named ``bar`` in order to test module ``foo``) to set-up required resources, such as installing required libraries or setting up server services." msgstr "Ansible ロールテストã¯ã€``ansible-playbook`` ã§å®Ÿè¡Œã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã•ã¾ã–ã¾ãªå´é¢ã‚’検証ã—ã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€ä»–ã®çµ±åˆãƒ†ã‚¹ãƒˆ (通常 ``prepare_bar`` ã¾ãŸã¯ ``setup_bar`` ã¨å‘¼ã°ã‚Œã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``foo`` をテストã™ã‚‹ãŸã‚ã«ã‚µãƒ¼ãƒ“スを準備ã—ãŸã‚Šã€``bar`` ã¨ã„ã†è¦ä»¶ã‚’インストールã—ãŸã‚Šã™ã‚‹) ã«ä¾å­˜ã—ã¦ã€å¿…è¦ãªãƒ©ã‚¤ãƒ–ラリーã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚„サーãƒãƒ¼ã‚µãƒ¼ãƒ“スã®è¨­å®šãªã©ã€å¿…è¦ãªãƒªã‚½ãƒ¼ã‚¹ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:56 msgid "``runme.sh`` tests run directly as scripts. They can set up inventory files, and execute ``ansible-playbook`` or ``ansible-inventory`` with various settings." msgstr "``runme.sh`` テストã¯ã€ç›´æŽ¥ã‚¹ã‚¯ãƒªãƒ—トã¨ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚インベントリーファイルを設定ã—ã€ã•ã¾ã–ã¾ãªè¨­å®šã§ ``ansible-playbook`` ã¾ãŸã¯ ``ansible-inventory`` を実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:58 msgid "For examples, see the `integration tests in community.general `_. See also :ref:`testing_integration` for more details." msgstr "例ã«ã¤ã„ã¦ã¯ã€ã€Œ`community.general ã®çµ±åˆãƒ†ã‚¹ãƒˆ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。詳細ã¯ã€ã€Œ:ref:`testing_integration`ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_collections_testing.rst:60 msgid "Since integration tests can install requirements, and set-up, start and stop services, we recommended running them in docker containers or otherwise restricted environments whenever possible. By default, ``ansible-test`` supports Docker images for several operating systems. See the `list of supported docker images `_ for all options. Use the ``default`` image mainly for platform-independent integration tests, such as those for cloud modules. The following examples use the ``centos8`` image." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€è¦ä»¶ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚„ã€ã‚µãƒ¼ãƒ“スã®è¨­å®šã€é–‹å§‹ã€ãŠã‚ˆã³åœæ­¢ã‚’行ã†ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€å¯èƒ½ãªé™ã‚Šã€Docker コンテナーやã€åˆ¶é™ã•れãŸç’°å¢ƒã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚デフォルトã§ã¯ã€``ansible-test`` ã¯è¤‡æ•°ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã® Docker イメージをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚ªãƒ—ション㯠`サãƒãƒ¼ãƒˆå¯¾è±¡ã® docker イメージ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。クラウドモジュール用ãªã©ã®ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„çµ±åˆãƒ†ã‚¹ãƒˆã«ã¯ã€ä¸»ã« ``default`` イメージを使用ã—ã¾ã™ã€‚以下ã®ä¾‹ã§ã¯ã€``centos8`` イメージãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:62 msgid "To execute all integration tests for a collection::" msgstr "コレクションã«å¯¾ã—ã¦çµ±åˆãƒ†ã‚¹ãƒˆã‚’ã™ã¹ã¦å®Ÿè¡Œã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:66 msgid "If you want more detailed output, run the command with ``-vvv`` instead of ``-v``. Alternatively, specify ``--retry-on-error`` to automatically re-run failed tests with higher verbosity levels." msgstr "より詳細ãªå‡ºåŠ›ãŒå¿…è¦ãªå ´åˆã¯ã€``-v`` ã§ã¯ãªãã€``-vvv`` ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚ã‚‚ã—ãã¯ã€``--retry-on-error`` を指定ã—ã¦ã€å¤±æ•—ã—ãŸãƒ†ã‚¹ãƒˆã‚’ã€è©³ç´°ãƒ¬ãƒ™ãƒ«ã‚’ã‚ã’ã¦è‡ªå‹•çš„ã«å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:68 msgid "To execute only the integration tests in a specific directory::" msgstr "特定ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§çµ±åˆãƒ†ã‚¹ãƒˆã®ã¿ã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:72 msgid "You can specify multiple target names. Each target name is the name of a directory in ``tests/integration/targets/``." msgstr "複数ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆåを指定ã§ãã¾ã™ã€‚ターゲットå㯠``tests/integration/targets/`` ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®åå‰ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_collections_testing.rst:76 msgid ":ref:`developing_testing`" msgstr ":ref:`developing_testing`" #: ../../rst/dev_guide/developing_collections_testing.rst:77 msgid "More resources on testing Ansible" msgstr "Ansible ã®ãƒ†ã‚¹ãƒˆã«é–¢ã™ã‚‹ãã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹" #: ../../rst/dev_guide/developing_core.rst:3 msgid "Developing ``ansible-core``" msgstr "``ansible-core`` ã®é–‹ç™º" #: ../../rst/dev_guide/developing_core.rst:5 msgid "Although ``ansible-core`` (the code hosted in the `ansible/ansible repository `_ on GitHub) includes a few plugins that can be swapped out via playbook directives or configuration, much of the code there is not modular. The documents here give insight into how the parts of ``ansible-core`` work together." msgstr "``ansible-core`` (GitHub ã® `ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã§ãƒ›ã‚¹ãƒˆã•れるコード) ã«ã¯ã€Playbook ディレクティブã¾ãŸã¯è¨­å®šã‚’介ã—ã¦ã‚¹ãƒ¯ãƒƒãƒ—ã§ãるプラグインãŒå«ã¾ã‚Œã¦ã„ã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åŒ–ã•れãªã„コードãŒå¤šãã‚りã¾ã™ã€‚ã¾ãŸã€``ansible-core`` ã®ä¸€éƒ¨ãŒé€£æºã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/developing_core.rst:14 #: ../../rst/dev_guide/developing_inventory.rst:466 #: ../../rst/dev_guide/developing_plugins.rst:538 msgid ":ref:`developing_api`" msgstr ":ref:`developing_api`" #: ../../rst/dev_guide/developing_core.rst:15 #: ../../rst/dev_guide/developing_plugins.rst:539 msgid "Learn about the Python API for task execution" msgstr "タスク実行用㮠Python API ã«ã¤ã„ã¦" #: ../../rst/dev_guide/developing_core.rst:17 msgid "Learn about developing plugins" msgstr "プラグインã®é–‹ç™ºã«ã¤ã„ã¦" #: ../../rst/dev_guide/developing_core.rst:20 #: ../../rst/dev_guide/style_guide/index.rst:277 msgid "`irc.libera.chat `_" msgstr "`irc.libera.chat `_" #: ../../rst/dev_guide/developing_core.rst:21 msgid "#ansible-devel IRC chat channel" msgstr "IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible-devel)" #: ../../rst/dev_guide/developing_inventory.rst:5 msgid "Developing dynamic inventory" msgstr "動的インベントリーã®é–‹ç™º" #: ../../rst/dev_guide/developing_inventory.rst:7 msgid "Ansible can pull inventory information from dynamic sources, including cloud sources, by using the supplied :ref:`inventory plugins `. For details about how to pull inventory information, see :ref:`dynamic_inventory`. If the source you want is not currently covered by existing plugins, you can create your own inventory plugin as with any other plugin type." msgstr "Ansible ã¯ã€æŒ‡å®šã•れ㟠:ref:`インベントリープラグイン ` を使用ã—ã¦ã€ã‚¯ãƒ©ã‚¦ãƒ‰ã‚½ãƒ¼ã‚¹ã‚’å«ã‚€å‹•的ソースã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æƒ…報をプルã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚インベントリー情報ã®ãƒ—ル方法ã®è©³ç´°ã¯ã€ã€Œ:ref:`dynamic_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ç¾åœ¨ã€æ—¢å­˜ã®ãƒ—ラグインã§å¯¾è±¡ã¨ã—ã¦ã„ãªã„ソースã«ã¤ã„ã¦ã¯ã€ä»–ã®ãƒ—ラグインタイプã§ç‹¬è‡ªã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを作æˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:9 msgid "In previous versions, you had to create a script or program that could output JSON in the correct format when invoked with the proper arguments. You can still use and write inventory scripts, as we ensured backwards compatibility via the :ref:`script inventory plugin ` and there is no restriction on the programming language used. If you choose to write a script, however, you will need to implement some features yourself such as caching, configuration management, dynamic variable and group composition, and so on. If you use :ref:`inventory plugins ` instead, you can use the Ansible codebase and add these common features automatically." msgstr "以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€é©åˆ‡ãªå¼•æ•°ã§å‘¼ã³å‡ºã•れãŸã¨ãã«æ­£ã—ã„å½¢å¼ã§ JSON を出力ã§ãるスクリプトやプログラムを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚:ref:`script inventory plugin ` を通ã˜ã¦å¾Œæ–¹äº’æ›æ€§ã‚’確ä¿ã—ã¦ãŠã‚Šã€ä½¿ç”¨ã™ã‚‹ãƒ—ログラミング言語ã«ã‚‚制é™ãŒãªã„ãŸã‚ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを使用ã—ãŸã‚Šæ›¸ã„ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ã‚¹ã‚¯ãƒªãƒ—トを書ãå ´åˆã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€è¨­å®šç®¡ç†ã€å‹•çš„ãªå¤‰æ•°ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®æ§‹æˆãªã©ã€ã„ãã¤ã‹ã®æ©Ÿèƒ½ã‚’自分ã§å®Ÿè£…ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚代ã‚り㫠:ref:`inventory plugins ` を使用ã™ã‚Œã°ã€Ansible ã®ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã‚’使用ã—ã€ã“れらã®å…±é€šæ©Ÿèƒ½ã‚’自動的ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:22 msgid "Inventory sources" msgstr "インベントリーソース" #: ../../rst/dev_guide/developing_inventory.rst:24 msgid "Inventory sources are the input strings that inventory plugins work with. An inventory source can be a path to a file or to a script, or it can be raw data that the plugin can interpret." msgstr "インベントリーソースã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæ©Ÿèƒ½ã™ã‚‹å…¥åŠ›æ–‡å­—åˆ—ã§ã™ã€‚インベントリーソースã¯ãƒ•ァイルã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ—トã¸ã®ãƒ‘スã«ã™ã‚‹ã‹ã€ãƒ—ラグインãŒè§£é‡ˆã§ãる生ã®ãƒ‡ãƒ¼ã‚¿ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:27 msgid "The table below shows some examples of inventory plugins and the source types that you can pass to them with ``-i`` on the command line." msgstr "以下ã®è¡¨ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``-i`` を使用ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã®ä¾‹ã¨ã€ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã«æ¸¡ã™ã“ã¨ãŒã§ãるソースタイプを示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:30 msgid "Plugin" msgstr "プラグイン" #: ../../rst/dev_guide/developing_inventory.rst:30 msgid "Source" msgstr "ソース" #: ../../rst/dev_guide/developing_inventory.rst:32 msgid ":ref:`host list `" msgstr ":ref:`host list `" #: ../../rst/dev_guide/developing_inventory.rst:32 msgid "A comma-separated list of hosts" msgstr "ホストã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_inventory.rst:34 msgid ":ref:`yaml `" msgstr ":ref:`yaml `" #: ../../rst/dev_guide/developing_inventory.rst:34 msgid "Path to a YAML format data file" msgstr "YAML å½¢å¼ã®ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã¸ã®ãƒ‘ス" #: ../../rst/dev_guide/developing_inventory.rst:36 msgid ":ref:`constructed `" msgstr ":ref:`constructed `" #: ../../rst/dev_guide/developing_inventory.rst:36 #: ../../rst/dev_guide/developing_inventory.rst:40 msgid "Path to a YAML configuration file" msgstr "YAML 設定ファイルã¸ã®ãƒ‘ス" #: ../../rst/dev_guide/developing_inventory.rst:38 msgid ":ref:`ini `" msgstr ":ref:`ini `" #: ../../rst/dev_guide/developing_inventory.rst:38 msgid "Path to an INI formatted data file" msgstr "INI å½¢å¼ã®ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã¸ã®ãƒ‘ス" #: ../../rst/dev_guide/developing_inventory.rst:40 msgid ":ref:`virtualbox `" msgstr ":ref:`virtualbox `" #: ../../rst/dev_guide/developing_inventory.rst:42 msgid ":ref:`script plugin `" msgstr ":ref:`script plugin `" #: ../../rst/dev_guide/developing_inventory.rst:42 msgid "Path to an executable that outputs JSON" msgstr "JSON を出力ã™ã‚‹å®Ÿè¡Œå¯èƒ½ãƒ•ァイルã¸ã®ãƒ‘ス" #: ../../rst/dev_guide/developing_inventory.rst:49 #: ../../rst/dev_guide/developing_plugins.rst:334 msgid "Inventory plugins" msgstr "inventory プラグイン" #: ../../rst/dev_guide/developing_inventory.rst:51 msgid "Like most plugin types (except modules), inventory plugins must be developed in Python. They execute on the controller and should therefore adhere to the :ref:`control_node_requirements`." msgstr "ã»ã¨ã‚“ã©ã®ãƒ—ラグインタイプ (モジュールを除ã) ã¨åŒæ§˜ã«ã€ãれら㯠Python ã§é–‹ç™ºã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。コントローラー上ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã€ã€Œ:ref:`control_node_requirements`ã€ã¨åŒã˜è¦ä»¶ã«ä¸€è‡´ã•ã›ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_inventory.rst:53 msgid "Most of the documentation in :ref:`developing_plugins` also applies here. You should read that document first for a general understanding and then come back to this document for specifics on inventory plugins." msgstr ":ref:`developing_plugins` ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®å¤šãã¯ã“ã“ã§ã‚‚é©ç”¨ã•れã¦ã„ã¾ã™ã€‚一般的ãªç†è§£ã®ãŸã‚ã«æœ€åˆã«ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’読んã§ã‹ã‚‰ã€æœ¬ã‚¬ã‚¤ãƒ‰ã§ inventory プラグインã®è©³ç´°ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_inventory.rst:55 msgid "Normally, inventory plugins are executed at the start of a run, and before the playbooks, plays, or roles are loaded. However, you can use the ``meta: refresh_inventory`` task to clear the current inventory and execute the inventory plugins again, and this task will generate a new inventory." msgstr "通常ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã¯å®Ÿè¡Œã®é–‹å§‹æ™‚ã€ãŠã‚ˆã³ Playbookã€ãƒ—レイã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹å‰ã«å®Ÿè¡Œã—ã¾ã™ã€‚ãŸã ã—ã€``meta: refresh_inventory`` タスクを使用ã—ã¦ç¾åœ¨ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’消去ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインをå†å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã¾ãŸã€ã“ã®ã‚¿ã‚¹ã‚¯ã¯æ–°ã—ã„インベントリーを生æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:58 msgid "If you use the persistent cache, inventory plugins can also use the configured cache plugin to store and retrieve data. Caching inventory avoids making repeated and costly external calls." msgstr "永続キャッシュを使用ã™ã‚‹å ´åˆã€inventory プラグインã¯è¨­å®šæ¸ˆã¿ã® cache プラグインを使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ãŠã‚ˆã³å–å¾—ã—ã€ã‚³ã‚¹ãƒˆãŒã‹ã‹ã‚Šã€ç¹°ã‚Šè¿”ã—ã‹ã‹ã‚‹å¤–部呼ã³å‡ºã—を回é¿ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:63 msgid "Developing an inventory plugin" msgstr "inventory プラグインã®é–‹ç™º" #: ../../rst/dev_guide/developing_inventory.rst:65 msgid "The first thing you want to do is use the base class:" msgstr "最åˆã«è¡Œã†ã®ã¯ã€ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:75 msgid "If the inventory plugin is in a collection, the NAME should be in the 'namespace.collection_name.myplugin' format. The base class has a couple of methods that each plugin should implement and a few helpers for parsing the inventory source and updating the inventory." msgstr "inventory プラグインãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹å ´åˆã€NAME ã¯ã€Œnamespace.collection_name.mypluginã€å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ã¯ã€å„プラグインãŒå®Ÿè£…ã™ã‚‹å¿…è¦ã®ã‚ã‚‹ã„ãã¤ã‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’è§£æžã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’æ›´æ–°ã™ã‚‹ãŸã‚ã®ãƒ˜ãƒ«ãƒ‘ーãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:77 msgid "After you have the basic plugin working, you can incorporate other features by adding more base classes:" msgstr "基本的ãªãƒ—ラグインãŒå‹•作ã™ã‚‹ã‚ˆã†ã«ãªã£ãŸã‚‰ã€ã‚ˆã‚Šå¤šãã®åŸºæœ¬ã‚¯ãƒ©ã‚¹ã‚’追加ã™ã‚‹ã“ã¨ã§ä»–ã®æ©Ÿèƒ½ã‚’組ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:87 msgid "For the bulk of the work in a plugin, we mostly want to deal with 2 methods ``verify_file`` and ``parse``." msgstr "プラグインã§ã®ä½œæ¥­ã®å¤§éƒ¨åˆ†ã§ã¯ã€ä¸»ã« 2 ã¤ã®ãƒ¡ã‚½ãƒƒãƒ‰ (``verify_file`` 㨠``parse``) を扱ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:92 msgid "verify_file method" msgstr "verify_file メソッド" #: ../../rst/dev_guide/developing_inventory.rst:94 msgid "Ansible uses this method to quickly determine if the inventory source is usable by the plugin. The determination does not need to be 100% accurate, as there might be an overlap in what plugins can handle and by default Ansible will try the enabled plugins as per their sequence." msgstr "Ansible ã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªã‚½ãƒ¼ã‚¹ãŒãƒ—ラグインã§ä½¿ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’迅速ã«åˆ¤æ–­ã—ã¾ã™ã€‚ã“ã®åˆ¤å®šã¯ 100ï¼… 正確ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ãªãœãªã‚‰ã€ãƒ—ラグインãŒå‡¦ç†ã§ãる内容ã«ã¯é‡è¤‡ãŒã‚りã€ãƒ‡ãƒ•ォルトã§ã¯ Ansible ã¯æœ‰åйãªãƒ—ラグインを順番ã«è©¦ã—ã¦ã„ãã‹ã‚‰ã§ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:107 msgid "In the above example, from the :ref:`virtualbox inventory plugin `, we screen for specific file name patterns to avoid attempting to consume any valid YAML file. You can add any type of condition here, but the most common one is 'extension matching'. If you implement extension matching for YAML configuration files, the path suffix . should be accepted. All valid extensions should be documented in the plugin description." msgstr "上記ã®ä¾‹ã§ã¯ã€:ref:`virtualbox inventory プラグイン ` ã‹ã‚‰ã¯ã€æœ‰åŠ¹ãª YAML ファイルã®ä½¿ç”¨ã‚’試ã¿ãªã„よã†ã«ã€ç‰¹å®šã®ãƒ•ァイルåパターンを切り分ã‘ã¾ã™ã€‚ã“ã“ã«ä»»æ„ã®ã‚¿ã‚¤ãƒ—ã®æ¡ä»¶ã‚’追加ã§ãã¾ã™ãŒã€æœ€ã‚‚一般的ãªã‚‚ã®ã¯ã€Œæ‹¡å¼µå­ã®ä¸€è‡´ã€ã§ã™ã€‚YAML 設定ファイルã«ä¸€è‡´ã™ã‚‹æ‹¡å¼µå­ã‚’実装ã™ã‚‹å ´åˆã¯ã€ãƒ‘スサフィックス . ãŒè¨±å¯ã•れる必è¦ãŒã‚りã¾ã™ã€‚有効ãªã™ã¹ã¦ã®æ‹¡å¼µæ©Ÿèƒ½ã¯ã€ãƒ—ラグインã®èª¬æ˜Žã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:109 msgid "The following is another example that does not use a 'file' but the inventory source string itself, from the :ref:`host list ` plugin:" msgstr "以下ã¯ã€ã€Œãƒ•ァイルã€ã‚’使用ã›ãšã€:ref:`host list ` プラグインã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªã‚½ãƒ¼ã‚¹æ–‡å­—列自体を使用ã™ã‚‹åˆ¥ã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:124 msgid "This method is just to expedite the inventory process and avoid unnecessary parsing of sources that are easy to filter out before causing a parse error." msgstr "ã“ã®æ–¹æ³•ã¯ã€inventory プロセスを迅速化ã—ã€è§£æžã‚¨ãƒ©ãƒ¼ã®åŽŸå› ã«ãªã‚‹å‰ã«ç°¡å˜ã«é™¤å¤–ã§ãるソースã®ä¸è¦ãªè§£æžã‚’回é¿ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:129 msgid "parse method" msgstr "è§£æžãƒ¡ã‚½ãƒƒãƒ‰" #: ../../rst/dev_guide/developing_inventory.rst:131 msgid "This method does the bulk of the work in the plugin. It takes the following parameters:" msgstr "ã“ã®æ–¹æ³•ã¯ã€ãƒ—ラグインã®ä½œæ¥­ã®å¤§éƒ¨åˆ†ã‚’行ã„ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ä»¥ä¸‹ã®ãƒ‘ラメーターをå–りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:134 msgid "inventory: inventory object with existing data and the methods to add hosts/groups/variables to inventory" msgstr "inventory: 既存ã®ãƒ‡ãƒ¼ã‚¿ã¨ã€ãƒ›ã‚¹ãƒˆ/グループ/変数をインベントリーã«è¿½åŠ ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚ã‚‹ inventory オブジェクト。" #: ../../rst/dev_guide/developing_inventory.rst:135 msgid "loader: Ansible's DataLoader. The DataLoader can read files, auto load JSON/YAML and decrypt vaulted data, and cache read files." msgstr "loader: Ansible ã® DataLoader ã§ã™ã€‚DataLoader ã¯ã€ãƒ•ァイルã®èª­ã¿å–りã€JSON/YAML ã®è‡ªå‹•読ã¿è¾¼ã¿ã€vault を使用ã—ãŸãƒ‡ãƒ¼ã‚¿ã®å¾©å·åŒ–ã€ãŠã‚ˆã³èª­ã¿å–りファイルã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:136 msgid "path: string with inventory source (this is usually a path, but is not required)" msgstr "path: インベントリーソースをæŒã¤æ–‡å­—列 (通常ã€ã“れã¯ãƒ‘スã§ã™ãŒã€å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/dev_guide/developing_inventory.rst:137 msgid "cache: indicates whether the plugin should use or avoid caches (cache plugin and/or loader)" msgstr "cache: プラグインãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ (キャッシュプラグインã¾ãŸã¯ãƒ­ãƒ¼ãƒ€ãƒ¼ã€ã‚‚ã—ãã¯ãã®ä¸¡æ–¹)。" #: ../../rst/dev_guide/developing_inventory.rst:140 msgid "The base class does some minimal assignment for reuse in other methods." msgstr "ベースクラスã¯ä»–ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§å†åˆ©ç”¨ã™ã‚‹ãŸã‚ã®å‰²ã‚Šå½“ã¦ã‚’最å°é™ã«æŠ‘ãˆã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:150 msgid "It is up to the plugin now to parse the provided inventory source and translate it into Ansible inventory. To facilitate this, the example below uses a few helper functions:" msgstr "æä¾›ã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’è§£æžã—ã€ãれを Ansible インベントリーã«å¤‰æ›ã™ã‚‹ã®ã¯ã€ãƒ—ラグイン次第ã§ã™ã€‚ã“れを容易ã«ã™ã‚‹ãŸã‚ã«ã€ä»¥ä¸‹ã®ä¾‹ã§ã¯ã„ãã¤ã‹ã®ãƒ˜ãƒ«ãƒ‘ー関数を使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:187 msgid "The specifics will vary depending on API and structure returned. Remember that if you get an inventory source error or any other issue, you should ``raise AnsibleParserError`` to let Ansible know that the source was invalid or the process failed." msgstr "ã“ã®çжæ³ã¯ã€API ãŠã‚ˆã³æ§‹é€ ã®æˆ»ã‚Šå€¤ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚インベントリーソースエラーや他ã®å•題をå–å¾—ã™ã‚‹å ´åˆã¯ã€``AnsibleParserError を発生`` ã•ã›ã€ã‚½ãƒ¼ã‚¹ãŒç„¡åйã§ã‚ã‚‹ã‹ã€ãƒ—ロセスãŒå¤±æ•—ã—ãŸã“ã¨ã‚’ Ansible ã«é€šçŸ¥ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:189 msgid "For examples on how to implement an inventory plugin, see the source code here: `lib/ansible/plugins/inventory `_." msgstr "インベントリープラグインã®å®Ÿè£…方法ã®ä¾‹ã¯ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ (`lib/ansible/plugins/inventory `_) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_inventory.rst:195 msgid "inventory cache" msgstr "インベントリーキャッシュ" #: ../../rst/dev_guide/developing_inventory.rst:197 msgid "To cache the inventory, extend the inventory plugin documentation with the inventory_cache documentation fragment and use the Cacheable base class." msgstr "インベントリーをキャッシュã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ inventory_cache ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã§æ‹¡å¼µã—ã€cacheable 基本クラスを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:210 msgid "Next, load the cache plugin specified by the user to read from and update the cache. If your inventory plugin uses YAML-based configuration files and the ``_read_config_data`` method, the cache plugin is loaded within that method. If your inventory plugin does not use ``_read_config_data``, you must load the cache explicitly with ``load_cache_plugin``." msgstr "次ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã—ãŸã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインを読ã¿è¾¼ã¿ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®èª­ã¿å–ã‚Šã¨æ›´æ–°ã‚’行ã„ã¾ã™ã€‚インベントリープラグイン㌠YAML ãƒ™ãƒ¼ã‚¹ã®æ§‹æˆãƒ•ァイルを使用ã—ã¦ã„ã¦ã€``_read_config_data`` メソッドã®å ´åˆã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインã¯ãã®ãƒ¡ã‚½ãƒƒãƒ‰å†…ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚インベントリープラグイン㌠``_read_config_data`` を使用ã—ãªã„å ´åˆã¯ã€``load_cache_plugin`` を使用ã—ã¦ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’明示的ã«èª­ã¿è¾¼ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:221 msgid "Before using the cache plugin, you must retrieve a unique cache key by using the ``get_cache_key`` method. This task needs to be done by all inventory modules using the cache, so that you don't use/overwrite other parts of the cache." msgstr "キャッシュプラグインを使用ã™ã‚‹å‰ã«ã€``get_cache_key`` メソッドを使用ã—ã¦ä¸€æ„ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚­ãƒ¼ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’使用ã™ã‚‹ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®ä»–ã®éƒ¨åˆ†ã‚’使用/上書ãã—ãªã„よã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:231 msgid "Now that you've enabled caching, loaded the correct plugin, and retrieved a unique cache key, you can set up the flow of data between the cache and your inventory using the ``cache`` parameter of the ``parse`` method. This value comes from the inventory manager and indicates whether the inventory is being refreshed (such as via ``--flush-cache`` or the meta task ``refresh_inventory``). Although the cache shouldn't be used to populate the inventory when being refreshed, the cache should be updated with the new inventory if the user has enabled caching. You can use ``self._cache`` like a dictionary. The following pattern allows refreshing the inventory to work in conjunction with caching." msgstr "ã“れã§ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã—ã€æ­£ã—ã„プラグインを読ã¿è¾¼ã¿ã€ä¸€æ„ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚­ãƒ¼ã‚’å–å¾—ã—ã€``parse`` メソッド㮠``cache`` パラメーターを使用ã—ã¦ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®é–“ã§ãƒ‡ãƒ¼ã‚¿ã®ãƒ•ローを設定ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®å€¤ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‹ã‚‰å–å¾—ã•れã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’æ›´æ–°ã™ã‚‹ã‹ (例: ``--flush-cache``ã€ãƒ¡ã‚¿ã‚¿ã‚¹ã‚¯ ``refresh_inventory`` ãªã©) を示ã—ã¾ã™ã€‚キャッシュã¯ã€æ›´æ–°æ™‚ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’入力ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ãŒã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã—ãŸå ´åˆã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’æ–°ã—ã„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ディクショナリーã®ã‚ˆã†ãª ``self._cache`` を使用ã§ãã¾ã™ã€‚以下ã®ãƒ‘ターンを使用ã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’キャッシュã¨ã¨ã‚‚ã«å‹•作ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:266 msgid "After the ``parse`` method is complete, the contents of ``self._cache`` is used to set the cache plugin if the contents of the cache have changed." msgstr "``parse`` メソッドãŒå®Œäº†ã™ã‚‹ã¨ã€``self._cache`` ã®å†…容ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®å†…容ãŒå¤‰æ›´ã•れãŸå ´åˆã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインを設定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:271 msgid "You have three other cache methods available:" msgstr "利用å¯èƒ½ãª 3 ã¤ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ¡ã‚½ãƒƒãƒ‰:" #: ../../rst/dev_guide/developing_inventory.rst:269 msgid "``set_cache_plugin`` forces the cache plugin to be set with the contents of ``self._cache``, before the ``parse`` method completes" msgstr "``set_cache_plugin`` ã¯ã€``parse`` メソッドã®å®Œäº†å‰ã«ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインを ``self._cache`` ã®å†…容ã§å¼·åˆ¶çš„ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:270 msgid "``update_cache_if_changed`` sets the cache plugin only if ``self._cache`` has been modified, before the ``parse`` method completes" msgstr "``update_cache_if_changed`` ã¯ã€``parse`` メソッドãŒå®Œäº†ã™ã‚‹å‰ã« ``self._cache`` ãŒå¤‰æ›´ã•れãŸå ´åˆã®ã¿ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインを設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:271 msgid "``clear_cache`` flushes the cache, ultimately by calling the cache plugin's ``flush()`` method, whose implementation is dependent upon the particular cache plugin in use. Note that if the user is using the same cache backend for facts and inventory, both will get flushed. To avoid this, the user can specify a distinct cache backend in their inventory plugin configuration." msgstr "``clear_cache`` キャッシュをフラッシュã—ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグイン㮠``flush()`` メソッドを呼ã³å‡ºã™ã“ã¨ã§ã€ã“れらã®å®Ÿè£…ã¯ä½¿ç”¨ä¸­ã®ç‰¹å®šã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインã«ä¾å­˜ã—ã¾ã™ã€‚ファクトã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§åŒã˜ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä¸¡æ–¹ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’フラッシュã—ã¾ã™ã€‚ã“れを回é¿ã™ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグイン設定ã§å€‹åˆ¥ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:274 msgid "constructed features" msgstr "constructed 機能" #: ../../rst/dev_guide/developing_inventory.rst:276 msgid "Inventory plugins can create host variables and groups from Jinja2 expressions and variables by using features from the ``constructed`` inventory plugin. To do this, use the ``Constructable`` base class and extend the inventory plugin's documentation with the ``constructed`` documentation fragment." msgstr "インベントリープラグインã¯ã€``constructed`` ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ©Ÿèƒ½ã‚’使用ã—ã¦ã€Jinja2 å¼ãŠã‚ˆã³å¤‰æ•°ã‹ã‚‰ãƒ›ã‚¹ãƒˆå¤‰æ•°ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã§ãã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€``Constructable`` ベースクラスを使用ã—ã€``constructed`` ドキュメントフラグメントã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ‹¡å¼µã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:289 msgid "The three main options from the ``constructed`` documentation fragment are ``compose``, ``keyed_groups``, and ``groups``. See the ``constructed`` inventory plugin for examples on using these. ``compose`` is a dictionary of variable names and Jinja2 expressions. Once a host is added to inventory and any initial variables have been set, call the method ``_set_composite_vars`` to add composed host variables. If this is done before adding ``keyed_groups`` and ``groups``, the group generation will be able to use the composed variables." msgstr "``constructed`` ドキュメントフラグ㮠3 ã¤ã®ä¸»è¦ãªã‚ªãƒ—ションã¯ã€``compose``ã€``keyed_groups``ã€ãŠã‚ˆã³ ``groups`` ã§ã™ã€‚ã“れらã®ä½¿ç”¨ä¾‹ã¯ã€``constructed`` インベントリープラグインをå‚ç…§ã—ã¦ãã ã•ã„。``compose`` ã¯ã€å¤‰æ•°åãŠã‚ˆã³ Jinja2 å¼ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã™ã€‚ホストãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«è¿½åŠ ã•れã€åˆæœŸå¤‰æ•°ãŒè¨­å®šã•れるã¨ã€``_set_composite_vars`` メソッドを呼ã³å‡ºã—ã¦æ§‹æˆã•れãŸãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’追加ã—ã¾ã™ã€‚``keyed_groups`` ãŠã‚ˆã³ ``groups`` を追加ã™ã‚‹å‰ã«ã“れを行ã†ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ç”Ÿæˆã¯æ§‹æˆã•れãŸå¤‰æ•°ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:310 msgid "By default, group names created with ``_add_host_to_composed_groups()`` and ``_add_host_to_keyed_groups()`` are valid Python identifiers. Invalid characters are replaced with an underscore ``_``. A plugin can change the sanitization used for the constructed features by setting ``self._sanitize_group_name`` to a new function. The core engine also does sanitization, so if the custom function is less strict it should be used in conjunction with the configuration setting ``TRANSFORM_INVALID_GROUP_CHARS``." msgstr "デフォルトã§ã¯ã€``_add_host_to_composed_groups()`` ãŠã‚ˆã³ ``_add_host_to_keyed_groups()`` ã§ä½œæˆã•れãŸã‚°ãƒ«ãƒ¼ãƒ—åã¯æœ‰åŠ¹ãª Python 識別å­ã§ã™ã€‚ç„¡åŠ¹ãªæ–‡å­—ã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ ``_`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚プラグインã¯ã€``self._sanitize_group_name`` ã‚’æ–°ã—ã„æ©Ÿèƒ½ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€constructed 機能ã«ä½¿ç”¨ã•れるサニタイゼーションを変更ã§ãã¾ã™ã€‚コアエンジンもサニタイゼーションを実行ã™ã‚‹ãŸã‚ã€ã‚«ã‚¹ã‚¿ãƒ æ©Ÿèƒ½ãŒãれã»ã©å޳坆ã§ãªã„å ´åˆã¯ã€æ§‹æˆè¨­å®š ``TRANSFORM_INVALID_GROUP_CHARS`` ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:332 msgid "Common format for inventory sources" msgstr "インベントリーソースã®å…±é€šå½¢å¼" #: ../../rst/dev_guide/developing_inventory.rst:334 msgid "To simplify development, most plugins use a standard YAML-based configuration file as the inventory source. The file has only one required field ``plugin``, which should contain the name of the plugin that is expected to consume the file. Depending on other common features used, you might need other fields, and you can add custom options in each plugin as required. For example, if you use the integrated caching, ``cache_plugin``, ``cache_timeout`` and other cache-related fields could be present." msgstr "開発を簡å˜ã«ã™ã‚‹ãŸã‚ã«ã€ã»ã¨ã‚“ã©ã®ãƒ—ラグインã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã¨ã—ã¦æ¨™æº–的㪠YAML ベースã®è¨­å®šãƒ•ァイルを使用ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ã€å¿…須フィールド㌠1 ã¤ã—ã‹ã‚りã¾ã›ã‚“ (``plugin``)。ã“ã®ãƒ•ィールドã«ã¯ã€ã“ã®ãƒ•ァイルを使用ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れるプラグインã®åå‰ã‚’入れる必è¦ãŒã‚りã¾ã™ã€‚使用ã™ã‚‹ä»–ã®å…±é€šæ©Ÿèƒ½ã«ã‚ˆã£ã¦ã¯ã€ä»–ã®ãƒ•ィールドãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã€å¿…è¦ã«å¿œã˜ã¦å„プラグインã«ã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ションを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€çµ±åˆã‚­ãƒ£ãƒƒã‚·ãƒ³ã‚°ã‚’使用ã™ã‚‹å ´åˆã¯ã€``cache_plugin``ã€``cache_timeout`` ãªã©ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥é–¢é€£ã®ãƒ•ィールドãŒå­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:341 msgid "The 'auto' plugin" msgstr "「autoã€ãƒ—ラグイン" #: ../../rst/dev_guide/developing_inventory.rst:343 msgid "From Ansible 2.5 onwards, we include the :ref:`auto inventory plugin ` and enable it by default. If the ``plugin`` field in your standard configuration file matches the name of your inventory plugin, the ``auto`` inventory plugin will load your plugin. The 'auto' plugin makes it easier to use your plugin without having to update configurations." msgstr "Ansible 2.5 以é™ã§ã¯ã€:ref:`auto inventory plugin ` を追加ã—ã€ã“ã‚Œã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åŠ¹åŒ–ã—ã¾ã™ã€‚標準設定ファイル㮠``plugin`` フィールドãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã®åå‰ã¨ä¸€è‡´ã™ã‚‹å ´åˆã€``auto`` インベントリープラグインã¯ãƒ—ラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚「autoã€ãƒ—ラグインã¯ã€è¨­å®šã‚’æ›´æ–°ã›ãšã«ãƒ—ラグインを簡å˜ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:350 msgid "Inventory scripts" msgstr "インベントリースクリプト" #: ../../rst/dev_guide/developing_inventory.rst:352 msgid "Even though we now have inventory plugins, we still support inventory scripts, not only for backwards compatibility but also to allow users to use other programming languages." msgstr "inventory プラグインã¯ãã®ã¾ã¾ã§ã™ãŒã€å¾Œæ–¹äº’æ›æ€§ã ã‘ã§ãªãã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»–ã®ãƒ—ログラミング言語を使用ã§ãるよã†ã«ã€å¼•ãç¶šãインベントリースクリプトをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:358 msgid "Inventory script conventions" msgstr "インベントリースクリプトã®è¦å‰‡" #: ../../rst/dev_guide/developing_inventory.rst:360 msgid "Inventory scripts must accept the ``--list`` and ``--host `` arguments. Although other arguments are allowed, Ansible will not use them. Such arguments might still be useful for executing the scripts directly." msgstr "インベントリースクリプトã§ã¯ã€å¼•æ•° ``--list`` ãŠã‚ˆã³ ``--host `` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ä»–ã®å¼•æ•°ã¯è¨­å®šã§ãã¾ã™ãŒã€Ansible ã¯ãれらを使用ã—ã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå¼•æ•°ã¯ã€ã‚¹ã‚¯ãƒªãƒ—トを直接実行ã™ã‚‹ã®ã«å½¹ç«‹ã¤å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:363 msgid "When the script is called with the single argument ``--list``, the script must output to stdout a JSON object that contains all the groups to be managed. Each group's value should be either an object containing a list of each host, any child groups, and potential group variables, or simply a list of hosts::" msgstr "スクリプトãŒå˜ä¸€ã®å¼•æ•° ``--list`` ã§å‘¼ã³å‡ºã•れるã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã¯ã€æ¨™æº–出力ã«ã€ç®¡ç†ã™ã‚‹ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒå«ã¾ã‚Œã‚‹ JSON オブジェクトを出力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚å„グループã®å€¤ã¯ã€å„ホストã€å­ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³æ½œåœ¨çš„ãªã‚°ãƒ«ãƒ¼ãƒ—変数ã®ä¸€è¦§ã‚’å«ã‚€ã‚ªãƒ–ジェクトã€ã¾ãŸã¯ç°¡å˜ã«ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:384 msgid "If any of the elements of a group are empty, they may be omitted from the output." msgstr "グループã®ã„ãšã‚Œã‹ã®è¦ç´ ãŒç©ºã®å ´åˆã¯ã€å‡ºåŠ›ã‹ã‚‰çœç•¥ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:386 msgid "When called with the argument ``--host `` (where is a host from above), the script must print a JSON object, either empty or containing variables to make them available to templates and playbooks. For example::" msgstr "引数 ``--host `` ã§å‘¼ã³å‡ºã•ã‚Œã‚‹å ´åˆ ( ã¯ä¸Šè¨˜ã®ãƒ›ã‚¹ãƒˆ) ã§å‘¼ã³å‡ºã•れるã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ç©ºã‹ã€å¤‰æ•°ã‚’å«ã‚€ JSON オブジェクトを出力ã—ã¦ã€ãƒ†ãƒ³ãƒ—レート㨠Playbook ã§åˆ©ç”¨å¯èƒ½ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:394 msgid "Printing variables is optional. If the script does not print variables, it should print an empty JSON object." msgstr "変数ã®å‡ºåŠ›ã¯ä»»æ„ã§ã™ã€‚スクリプトãŒå¤‰æ•°ã‚’出力ã—ãªã„å ´åˆã¯ã€ç©ºã® JSON オブジェクトを出力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:399 msgid "Tuning the external inventory script" msgstr "外部インベントリースクリプトã®ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°" #: ../../rst/dev_guide/developing_inventory.rst:403 msgid "The stock inventory script system mentioned above works for all versions of Ansible, but calling ``--host`` for every host can be rather inefficient, especially if it involves API calls to a remote subsystem." msgstr "上記ã®ã‚¹ãƒˆãƒƒã‚¯ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トシステムã¯ã€ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã«å¯¾ã—ã¦å‹•作ã—ã¾ã™ãŒã€ç‰¹ã«ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ–システムã¸ã® API 呼ã³å‡ºã—ãŒå¿…è¦ã«ãªã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—㦠``--host`` を呼ã³å‡ºã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:405 msgid "To avoid this inefficiency, if the inventory script returns a top-level element called \"_meta\", it is possible to return all the host variables in a single script execution. When this meta element contains a value for \"hostvars\", the inventory script will not be invoked with ``--host`` for each host. This behavior results in a significant performance increase for large numbers of hosts." msgstr "ã“れを回é¿ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トãŒã€Œ_metaã€ã¨ã„ã†æœ€ä¸Šä½ã®è¦ç´ ã‚’è¿”ã™å ´åˆã«ã¯ã€å˜ä¸€ã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œã§ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ãƒ¡ã‚¿è¦ç´ ã«ã€Œhostvarsã€ã®å€¤ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã¯å„ホストã«å¯¾ã—㦠``--host`` ã§å‘¼ã³å‡ºã•れã¾ã›ã‚“。ã“ã®å‹•作ã¯ã€å¤šæ•°ã®ãƒ›ã‚¹ãƒˆã®ãƒ‘フォーマンスを大幅ã«å‘上ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:407 msgid "The data to be added to the top-level JSON object looks like this::" msgstr "レベル㮠JSON オブジェクトã«è¿½åŠ ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:426 msgid "To satisfy the requirements of using ``_meta``, to prevent ansible from calling your inventory with ``--host`` you must at least populate ``_meta`` with an empty ``hostvars`` object. For example::" msgstr "Ansible ㌠``--host`` ã§ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’呼ã³å‡ºã™ã®ã‚’防ããŸã‚ã« ``_meta`` を使用ã™ã‚‹è¦ä»¶ã‚’満ãŸã™ã«ã¯ã€å°‘ãªãã¨ã‚‚空㮠``hostvars`` オブジェクト㧠``_meta`` を埋ã‚ãªã‘れã°ãªã‚Šã¾ã›ã‚“。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:442 msgid "If you intend to replace an existing static inventory file with an inventory script, it must return a JSON object which contains an 'all' group that includes every host in the inventory as a member and every group in the inventory as a child. It should also include an 'ungrouped' group which contains all hosts which are not members of any other group. A skeleton example of this JSON object is:" msgstr "既存ã®é™çš„インベントリーファイルをインベントリースクリプトã«ç½®ãæ›ãˆã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’メンãƒãƒ¼ã¨ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å­ã¨ã—ã¦å«ã‚€ã€Œã™ã¹ã¦ã€ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ JSON オブジェクトを返ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ãªã„ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’å«ã‚€ã€Œã‚°ãƒ«ãƒ¼ãƒ—化ã•れã¦ã„ãªã„ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚‚å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã® JSON オブジェクトã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã®ä¾‹ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:462 msgid "An easy way to see how this should look is using :ref:`ansible-inventory`, which also supports ``--list`` and ``--host`` parameters like an inventory script would." msgstr "ã“れãŒã©ã®ã‚ˆã†ã«è¦‹ãˆã‚‹ã‹ã‚’確èªã™ã‚‹ç°¡å˜ãªæ–¹æ³•ã¯ã€:ref:`ansible-inventory` を使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã®ã‚ˆã†ã« ``--list`` パラメーターãŠã‚ˆã³ ``--host`` パラメーターãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_inventory.rst:467 msgid "Python API to Playbooks and Ad Hoc Task Execution" msgstr "Playbook ãŠã‚ˆã³ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚¿ã‚¹ã‚¯å®Ÿè¡Œã®ãŸã‚ã® Python API" #: ../../rst/dev_guide/developing_inventory.rst:469 msgid "Get started with developing a module" msgstr "モジュールã®é–‹ç™ºã‚’å§‹ã‚ã‚‹" #: ../../rst/dev_guide/developing_inventory.rst:472 msgid "`AWX `_" msgstr "`AWX `_" #: ../../rst/dev_guide/developing_inventory.rst:473 msgid "REST API endpoint and GUI for Ansible, syncs with dynamic inventory" msgstr "Ansible ã® REST API エンドãƒã‚¤ãƒ³ãƒˆãŠã‚ˆã³ GUI (動的インベントリーã¨åŒæœŸ)" #: ../../rst/dev_guide/developing_locally.rst:6 msgid "Adding modules and plugins locally" msgstr "モジュールãŠã‚ˆã³ãƒ—ラグインをローカルã§è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:8 msgid "You can extend Ansible by adding custom modules or plugins. You can create them from scratch or copy existing ones for local use. You can store a local module or plugin on your Ansible control node and share it with your team or organization. You can also share plugins and modules by including them in a collection, then publishing the collection on Ansible Galaxy." msgstr "カスタムモジュールやプラグインを追加ã—ã¦Ansibleã‚’æ‹¡å¼µã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚カスタムモジュールやプラグインã¯ã€ã‚¼ãƒ­ã‹ã‚‰ä½œæˆã™ã‚‹ã“ã¨ã‚‚ã€æ—¢å­˜ã®ã‚‚ã®ã‚’コピーã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ローカルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインã¯ã€Ansibleコントロールノードã«ä¿å­˜ã—ã¦ã€ãƒãƒ¼ãƒ ã‚„組織ã§å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ—ラグインやモジュールをコレクションã«å«ã‚ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’Ansible Galaxyã§å…¬é–‹ã™ã‚‹ã“ã¨ã§ã‚‚共有ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:10 msgid "If you are using a local module or plugin but Ansible cannot find it, this page is all you need." msgstr "ローカルモジュールやプラグインを使用ã—ã¦ã„ã‚‹ãŒã€AnsibleãŒãれを見ã¤ã‘られãªã„å ´åˆã€ã“ã®ãƒšãƒ¼ã‚¸ã§ã™ã¹ã¦è§£æ±ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:12 msgid "If you want to create a plugin or a module, see :ref:`developing_plugins`, :ref:`developing_modules_general` and :ref:`developing_collections`." msgstr "プラグインやモジュールを作æˆã—ãŸã„å ´åˆã¯ã€:ref:`developing_plugins`ã€:ref:`developing_modules_general`ã€:ref:`developing_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:14 msgid "Extending Ansible with local modules and plugins offers shortcuts such as:" msgstr "ローカルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグイン㧠Ansible ã‚’æ‹¡å¼µã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆãŒåˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:16 msgid "You can copy other people's modules and plugins." msgstr "ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインをコピーã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:17 msgid "When writing a new module, you can choose any programming language you like." msgstr "æ–°ã—ã„モジュールを作æˆã™ã‚‹å ´åˆã¯ã€ä»»æ„ã®ãƒ—ãƒ­ã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:18 msgid "You do not have to clone any repositories." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_locally.rst:19 msgid "You do not have to open a pull request." msgstr "ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ãå¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_locally.rst:20 msgid "You do not have to add tests (though we recommend that you do!)." msgstr "テストを追加ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ (ãŸã ã—ã€ã“ã®æ“作を推奨ã—ã¦ã„ã¾ã™)。" #: ../../rst/dev_guide/developing_locally.rst:28 msgid "Modules and plugins: what is the difference?" msgstr "モジュールãŠã‚ˆã³ãƒ—ラグイン: 相é•点" #: ../../rst/dev_guide/developing_locally.rst:29 msgid "If you are looking to add functionality to Ansible, you might wonder whether you need a module or a plugin. Here is a quick overview to help you understand what you need:" msgstr "Ansible ã«æ©Ÿèƒ½ã‚’追加ã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®ã©ã¡ã‚‰ãŒå¿…è¦ã‹ç–‘å•ã«æ€ã†å ´åˆãŒã‚りã¾ã™ã€‚以下ã«ã€å¿…è¦ãªã‚‚ã®ã‚’ç†è§£ã™ã‚‹ã®ã«å½¹ç«‹ã¤æ¦‚è¦ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:31 msgid "Modules are reusable, standalone scripts that can be used by the Ansible API, the :command:`ansible` command, or the :command:`ansible-playbook` command. Modules provide a defined interface. Each module accepts arguments and returns information to Ansible by printing a JSON string to stdout before exiting. Modules execute on the target system (usually that means on a remote system) in separate processes. Modules are technically plugins, but for historical reasons we do not usually talk about \"module plugins\"." msgstr "モジュールã¯ã€Ansible APIã€:command:`ansible` コマンドã€ã¾ãŸã¯ :command:`ansible-playbook` コマンドã§ä½¿ç”¨ã§ãã‚‹å†åˆ©ç”¨å¯èƒ½ãªã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã‚¹ã‚¯ãƒªãƒ—トã§ã™ã€‚モジュールã¯ã€å®šç¾©ã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã¾ã™ã€‚å„モジュールã¯å¼•æ•°ã‚’å—ã‘入れã€çµ‚了ã™ã‚‹å‰ã« JSON 文字列を stdout ã«å‡ºåŠ›ã—㦠Ansible ã«æƒ…報を返ã—ã¾ã™ã€‚モジュールã¯ã€åˆ¥ã®ãƒ—ロセスã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ  (通常ã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ä¸Š) ã§å®Ÿè¡Œã•れã¾ã™ã€‚ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æŠ€è¡“çš„ã«ã¯ãƒ—ラグインã§ã™ãŒã€éŽåŽ»ã®çµŒç·¯ã‹ã‚‰ã€é€šå¸¸ã€Œãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ—ラグインã€ã¨ã¯å‘¼ã³ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_locally.rst:32 msgid ":ref:`Plugins ` extend Ansible's core functionality and execute on the control node within the ``/usr/bin/ansible`` process. Plugins offer options and extensions for the core features of Ansible - transforming data, logging output, connecting to inventory, and more." msgstr ":ref:`Plugins ` ã¯ã€Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã‚’æ‹¡å¼µã—ã€``/usr/bin/ansible`` プロセス内ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã—ã¾ã™ã€‚プラグインã¯ã€Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã®ã‚ªãƒ—ションãŠã‚ˆã³æ‹¡å¼µæ©Ÿèƒ½ (データã®å¤‰æ›ã€ãƒ­ã‚°å‡ºåŠ›ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¸ã®æŽ¥ç¶šãªã©) ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:37 msgid "Adding modules and plugins in collections" msgstr "コレクションã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:39 msgid "You can add modules and plugins by :ref:`creating a collection `. With a collection, you can use custom modules and plugins in any playbook or role. You can share your collection easily at any time through Ansible Galaxy." msgstr "モジュールやプラグインã¯ã€:ref:`creating a collection ` ã§è¿½åŠ ã§ãã¾ã™ã€‚コレクションãŒã‚れã°ã€ä»»æ„ã®Playbookやロールã§ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクションã¯ã€Ansible Galaxyを使ã£ã¦ã„ã¤ã§ã‚‚ç°¡å˜ã«å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:41 msgid "The rest of this page describes other methods of using local, standalone modules or plugins." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®æ®‹ã‚Šã®éƒ¨åˆ†ã§ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインを使用ã™ã‚‹ä»–ã®æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:46 msgid "Adding a module outside of a collection" msgstr "コレクション外ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:48 msgid "You can configure Ansible to load standalone local modules in a specified location or locations and make them available to all playbooks and roles. Alternatively, you can make a non-collection local module available only to specific playbooks or roles." msgstr "指定ã—ãŸå ´æ‰€ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’読ã¿ã“むよã†ã«Ansibleを設定ã—ã€ã™ã¹ã¦ã®Playbookやロールã§åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ãªã„ローカルモジュールを特定ã®Playbookやロールã§ã®ã¿åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:51 msgid "Adding standalone local modules for all playbooks and roles" msgstr "ã™ã¹ã¦ã®Playbookã¨ãƒ­ãƒ¼ãƒ«ã«å¯¾ã™ã‚‹ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:53 msgid "To load standalone local modules automatically and make them available to all playbooks and roles, use the :ref:`DEFAULT_MODULE_PATH` configuration setting or the ``ANSIBLE_LIBRARY`` environment variable. The configuration setting and environment variable take a colon-separated list, similar to ``$PATH``. You have two options:" msgstr "スタンドアロンã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’自動的ã«èª­ã¿è¾¼ã¿ã€ã™ã¹ã¦ã®Playbookã¨ãƒ­ãƒ¼ãƒ«ã§åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€:ref:`DEFAULT_MODULE_PATH` ã®æ§‹æˆè¨­å®šã¾ãŸã¯``ANSIBLE_LIBRARY`` ã®ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚``$PATH`` ã¨åŒæ§˜ã«ã€æ§‹æˆè¨­å®šã‚„環境変数ã¯ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒªã‚¹ãƒˆã‚’å—ã‘å–りã¾ã™ã€‚2ã¤ã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:55 msgid "Add your standalone local module to one of the default configured locations. See the :ref:`DEFAULT_MODULE_PATH` configuration setting for details. Default locations may change without notice." msgstr "スタンドアロンã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã€ãƒ‡ãƒ•ォルトã§è¨­å®šã•れã¦ã„る場所ã®ä¸€ã¤ã«è¿½åŠ ã—ã¾ã™ã€‚詳ã—ãã¯ã€:ref:`DEFAULT_MODULE_PATH` ã®æ§‹æˆè¨­å®šã‚’ã”覧ãã ã•ã„。デフォルトã®ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯äºˆå‘Šãªã変更ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:58 msgid "Add the location of your standalone local module to an environment variable or configuration:" msgstr "スタンドアロンã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å ´æ‰€ã‚’ã€ç’°å¢ƒå¤‰æ•°ã‚„設定ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:57 msgid "the ``ANSIBLE_LIBRARY`` environment variable" msgstr "``ANSIBLE_LIBRARY`` 環境変数" #: ../../rst/dev_guide/developing_locally.rst:58 msgid "the :ref:`DEFAULT_MODULE_PATH` configuration setting" msgstr ":ref:`DEFAULT_MODULE_PATH` æ§‹æˆè¨­å®š" #: ../../rst/dev_guide/developing_locally.rst:60 msgid "To view your current configuration settings for modules:" msgstr "モジュールã®ç¾åœ¨ã®æ§‹æˆè¨­å®šã‚’表示ã™ã‚‹ã«ã¯ï¼š" #: ../../rst/dev_guide/developing_locally.rst:66 msgid "After you save your module file in one of these locations, Ansible loads it and you can use it in any local task, playbook, or role." msgstr "モジュールファイルをã“ã®ã„ãšã‚Œã‹ã®å ´æ‰€ã«ä¿å­˜ã™ã‚‹ã¨ã€Ansible ã¯ãã®ãƒ•ァイルを読ã¿è¾¼ã¿ã€ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚¿ã‚¹ã‚¯ã€Playbookã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:68 msgid "To confirm that ``my_local_module`` is available:" msgstr "``my_local_module`` ãŒåˆ©ç”¨å¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ï¼š" #: ../../rst/dev_guide/developing_locally.rst:70 msgid "type ``ansible localhost -m my_local_module`` to see the output for that module, or" msgstr "``ansible localhost -m my_local_module`` ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã‚ã‚‹ã„ã¯ã€" #: ../../rst/dev_guide/developing_locally.rst:71 msgid "type ``ansible-doc -t module my_local_module`` to see the documentation for that module" msgstr "``ansible-doc -t module my_local_module`` ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:75 msgid "Currently, the ``ansible-doc`` command can parse module documentation only from modules written in Python. If you have a module written in a programming language other than Python, please write the documentation in a Python file adjacent to the module file." msgstr "ç¾åœ¨ã€``ansible-doc`` コマンドã¯ã€Python ã§è¨˜è¿°ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ã®ã¿ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’è§£æžã§ãã¾ã™ã€‚Python 以外ã®ãƒ—ログラミング言語ã§è¨˜è¿°ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨ªã® Python ファイルã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:78 msgid "Adding standalone local modules for selected playbooks or a single role" msgstr "é¸æŠžã—ãŸãƒ—レイブックやå˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã¸ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:80 msgid "Ansible automatically loads all executable files from certain directories adjacent to your playbook or role as modules. Standalone modules in these locations are available only to the specific playbook, playbooks, or role in the parent directory." msgstr "Ansibleã¯ã€Playbookやロールã«éš£æŽ¥ã™ã‚‹ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚‹ã™ã¹ã¦ã®å®Ÿè¡Œå¯èƒ½ãƒ•ァイルをモジュールã¨ã—ã¦è‡ªå‹•çš„ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚ã“れらã®å ´æ‰€ã«ã‚るスタンドアロンã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚る特定ã®Playbookã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:82 msgid "To use a standalone module only in a selected playbook or playbooks, store the module in a subdirectory called ``library`` in the directory that contains the playbook or playbooks." msgstr "スタンドアロンモジュールを特定ã®ãƒ—レイブックã§ã®ã¿ä½¿ç”¨ã™ã‚‹ã«ã¯ã€Playbookã‚’å«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…ã®``library`` ã¨ã„ã†ã‚µãƒ–ディレクトリã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:83 msgid "To use a standalone module only in a single role, store the module in a subdirectory called ``library`` within that role." msgstr "スタンドアロンモジュールをå˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã§ã®ã¿ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ãã®ãƒ­ãƒ¼ãƒ«å†…ã®``library`` ã¨ã„ã†ã‚µãƒ–ディレクトリã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:87 msgid "Roles contained in collections cannot contain any modules or other plugins. All plugins in a collection must live in the collection ``plugins`` directory tree. All plugins in that tree are accessible to all roles in the collection. If you are developing new modules, we recommend distributing them in :ref:`collections `, not in roles." msgstr "コレクションã«å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ä»–ã®ãƒ—ラグインをå«ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。コレクション内ã®ã™ã¹ã¦ã®ãƒ—ラグインã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®``plugins`` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ„ãƒªãƒ¼ã«æ ¼ç´ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ãƒ„リー内ã®ã™ã¹ã¦ã®ãƒ—ラグインã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã™ã€‚æ–°ã—ã„モジュールを開発ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã§ã¯ãªãã€:ref:`collections ` ã§é…布ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:93 msgid "Adding a non-module plugin locally outside of a collection" msgstr "モジュール以外ã®ãƒ—ラグインã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å¤–ã§ã®ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:95 msgid "You can configure Ansible to load standalone local plugins in a specified location or locations and make them available to all playbooks and roles. Alternatively, you can make a standalone local plugin available only to specific playbooks or roles." msgstr "指定ã—ãŸå ´æ‰€ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインを読ã¿ã“むよã†ã«Ansibleを設定ã—ã€ã™ã¹ã¦ã®Playbookやロールã§åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインを特定ã®Playbookやロールã§ã®ã¿åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:99 msgid "Although modules are plugins, the naming patterns for directory names and environment variables that apply to other plugin types do not apply to modules. See :ref:`local_modules`." msgstr "モジュールã¯ãƒ—ラグインã§ã™ãŒã€ä»–ã®ãƒ—ラグインタイプã«é©ç”¨ã•れるディレクトリåや環境変数ã®ãƒãƒ¼ãƒŸãƒ³ã‚°ãƒ‘ターンã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。:ref:`local_modules` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:102 msgid "Adding local non-module plugins for all playbooks and roles" msgstr "ã™ã¹ã¦ã®Playbookã¨ãƒ­ãƒ¼ãƒ«ã¸ã®ãƒ­ãƒ¼ã‚«ãƒ«ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»¥å¤–ã®ãƒ—ラグインã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:104 msgid "To load standalone local plugins automatically and make them available to all playbooks and roles, use the configuration setting or environment variable for the type of plugin you are adding. These configuration settings and environment variables take a colon-separated list, similar to ``$PATH``. You have two options:" msgstr "スタンドアロンã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインを自動的ã«èª­ã¿è¾¼ã¿ã€ã™ã¹ã¦ã®Playbookã¨ãƒ­ãƒ¼ãƒ«ã§åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€è¿½åŠ ã™ã‚‹ãƒ—ラグインã®ã‚¿ã‚¤ãƒ—ã®æ§‹æˆè¨­å®šã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚``$PATH`` ã¨åŒæ§˜ã«ã€ã“ã‚Œã‚‰ã®æ§‹æˆè¨­å®šã‚„環境変数ã¯ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒªã‚¹ãƒˆã‚’å—ã‘å–りã¾ã™ã€‚2ã¤ã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:106 msgid "Add your local plugin to one of the default configured locations. See :ref:`configuration settings ` for details on the correct configuration setting for the plugin type. Default locations may change without notice." msgstr "ローカルプラグインをã€ãƒ‡ãƒ•ォルトã§è¨­å®šã•れã¦ã„る場所ã®1ã¤ã«è¿½åŠ ã—ã¾ã™ã€‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚¿ã‚¤ãƒ—ã®æ­£ã—ã„æ§‹æˆè¨­å®šã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`configuration settings ` ã‚’ã”覧ãã ã•ã„。デフォルトã®ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯äºˆå‘Šãªã変更ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:109 msgid "Add the location of your local plugin to an environment variable or configuration:" msgstr "ローカルプラグインã®å ´æ‰€ã‚’ã€ç’°å¢ƒå¤‰æ•°ã‚„設定ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:108 msgid "the relevant ``ANSIBLE_plugin_type_PLUGINS`` environment variable - for example, ``$ANSIBLE_INVENTORY_PLUGINS`` or ``$ANSIBLE_VARS_PLUGINS``" msgstr "関連ã™ã‚‹``ANSIBLE_plugin_type_PLUGINS`` 環境変数 - 例ãˆã°ã€``$ANSIBLE_INVENTORY_PLUGINS`` ã¾ãŸã¯ ``$ANSIBLE_VARS_PLUGINS``" #: ../../rst/dev_guide/developing_locally.rst:109 msgid "the relevant ``plugin_type_PATH`` configuration setting, most of which begin with ``DEFAULT_`` - for example, ``DEFAULT_CALLBACK_PLUGIN_PATH`` or ``DEFAULT_FILTER_PLUGIN_PATH`` or ``BECOME_PLUGIN_PATH``" msgstr "関連ã™ã‚‹``plugin_type_PATH`` æ§‹æˆè¨­å®šï¼ˆã»ã¨ã‚“ã©ãŒ``DEFAULT_`` ã§å§‹ã¾ã‚‹ï¼‰- 例ãˆã°``DEFAULT_CALLBACK_PLUGIN_PATH`` ã‚„``DEFAULT_FILTER_PLUGIN_PATH`` ã‚„ ``BECOME_PLUGIN_PATH``" #: ../../rst/dev_guide/developing_locally.rst:111 msgid "To view your current configuration settings for non-module plugins:" msgstr "モジュール以外ã®ãƒ—ラグインã®ç¾åœ¨ã®æ§‹æˆè¨­å®šã‚’表示ã™ã‚‹ã«ã¯ï¼š" #: ../../rst/dev_guide/developing_locally.rst:117 msgid "After your plugin file is added to one of these locations, Ansible loads it and you can use it in any local module, task, playbook, or role. For more information on environment variables and configuration settings, see :ref:`ansible_configuration_settings`." msgstr "プラグインファイルãŒã“れらã®å ´æ‰€ã®ã„ãšã‚Œã‹ã«è¿½åŠ ã•れるã¨ã€Ansible ã¯ãã®ãƒ•ァイルをロードã—ã€ä»»æ„ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ã‚¿ã‚¹ã‚¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚環境変数ãŠã‚ˆã³æ§‹æˆè¨­å®šã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`ansible_configuration_settings` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:119 msgid "To confirm that ``plugins/plugin_type/my_local_plugin`` is available:" msgstr "``plugins/plugin_type/my_local_plugin`` ãŒåˆ©ç”¨å¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ï¼š" #: ../../rst/dev_guide/developing_locally.rst:121 msgid "type ``ansible-doc -t my_local_lookup_plugin`` to see the documentation for that plugin - for example, ``ansible-doc -t lookup my_local_lookup_plugin``" msgstr "``ansible-doc -t my_local_lookup_plugin`` ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ãã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ (例:``ansible-doc -t lookup my_local_lookup_plugin``)。" #: ../../rst/dev_guide/developing_locally.rst:123 msgid "The ``ansible-doc`` command works for most plugin types, but not for action, filter, or test plugins. See :ref:`ansible-doc` for more details." msgstr "``ansible-doc`` コマンドã¯ã€ã»ã¨ã‚“ã©ã®ç¨®é¡žã®ãƒ—ラグインã§å‹•作ã—ã¾ã™ãŒã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ•ィルターã€ãƒ†ã‚¹ãƒˆãƒ—ラグインã§ã¯å‹•作ã—ã¾ã›ã‚“。詳ã—ãã¯:ref:`ansible-doc` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:126 msgid "Adding standalone local plugins for selected playbooks or a single role" msgstr "é¸æŠžã—ãŸãƒ—レイブックやå˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã¸ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインã®è¿½åŠ " #: ../../rst/dev_guide/developing_locally.rst:128 msgid "Ansible automatically loads all plugins from certain directories adjacent to your playbook or role, loading each type of plugin separately from a directory named for the type of plugin. Standalone plugins in these locations are available only to the specific playbook, playbooks, or role in the parent directory." msgstr "Ansibleã¯ã€Playbookやロールã«éš£æŽ¥ã™ã‚‹ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚‹ã™ã¹ã¦ã®ãƒ—ラグインを自動的ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚å„タイプã®ãƒ—ラグインã¯ã€ãƒ—ラグインã®ã‚¿ã‚¤ãƒ—ã®åå‰ãŒä»˜ã„ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰å€‹åˆ¥ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚ã“れらã®å ´æ‰€ã«ã‚るスタンドアロンã®ãƒ—ラグインã¯ã€è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚る特定ã®Playbookã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_locally.rst:130 msgid "To use a standalone plugin only in a selected playbook or playbooks, store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``callback_plugins`` or ``inventory_plugins``) in the directory that contains the playbooks. These directories must use the ``_plugins`` suffix. For a full list of plugin types, see :ref:`working_with_plugins`." msgstr "é¸æŠžã—㟠Playbookã§ã®ã¿ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ—ラグインを使用ã™ã‚‹ã«ã¯ã€ãã®Playbook ã‚’å«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®æ­£ã—ã„ ``plugin_type``ã®ã‚µãƒ–ディレクトリー (例: ``callback_plugins`` ã¾ãŸã¯ ``inventory_plugins``) ã«ãƒ—ラグインをä¿å­˜ã—ã¾ã™ã€‚ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€``_plugins``ã®æŽ¥å°¾è¾žã‚’ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラグインタイプã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€:ref:`working_with_plugins`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:131 msgid "To use a standalone plugin only in a single role, store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``cache_plugins`` or ``strategy_plugins``) within that role. When shipped as part of a role, the plugin is available as soon as the role is executed. These directories must use the ``_plugins`` suffix. For a full list of plugin types, see :ref:`working_with_plugins`." msgstr "å˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã§ã®ã¿ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ—ラグインを使用ã™ã‚‹ã«ã¯ã€ãã®ãƒ­ãƒ¼ãƒ«å†…ã®æ­£ã—ã„ ``plugin_type`` ã®ã‚µãƒ–ディレクトリー (例:``cache_plugins`` ã¾ãŸã¯ ``strategy_plugins``) ã«ãƒ—ラグインをä¿å­˜ã—ã¾ã™ã€‚ロールã®ä¸€éƒ¨ã¨ã—ã¦æä¾›ã•れãŸå ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れるã¨ã™ãã«ãƒ—ラグインãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€``_plugins``ã®æŽ¥å°¾è¾žã‚’ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラグインタイプã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€:ref:`working_with_plugins`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_locally.rst:135 msgid "Roles contained in collections cannot contain any plugins. All plugins in a collection must live in the collection ``plugins`` directory tree. All plugins in that tree are accessible to all roles in the collection. If you are developing new plugins, we recommend distributing them in :ref:`collections `, not in roles." msgstr "コレクションã«å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã¯ã€ãƒ—ラグインをå«ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。コレクション内ã®ã™ã¹ã¦ã®ãƒ—ラグインã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®``plugins`` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ„ãƒªãƒ¼ã«æ ¼ç´ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ãƒ„リー内ã®ã™ã¹ã¦ã®ãƒ—ラグインã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã™ã€‚æ–°ã—ã„プラグインを開発ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã§ã¯ãªãã€:ref:`collections ` ã§é…布ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:5 msgid "Using and developing module utilities" msgstr "モジュールユーティリティーã®ä½¿ç”¨ãŠã‚ˆã³é–‹ç™º" #: ../../rst/dev_guide/developing_module_utilities.rst:7 msgid "Ansible provides a number of module utilities, or snippets of shared code, that provide helper functions you can use when developing your own modules. The ``basic.py`` module utility provides the main entry point for accessing the Ansible library, and all Python Ansible modules must import something from ``ansible.module_utils``. A common option is to import ``AnsibleModule``::" msgstr "Ansible ã¯ã€ç‹¬è‡ªã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºæ™‚ã«ä½¿ç”¨ã§ãるヘルパー関数をæä¾›ã™ã‚‹å¤šãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ã¾ãŸã¯å…±æœ‰ã‚³ãƒ¼ãƒ‰ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã‚’æä¾›ã—ã¾ã™ã€‚``basic.py`` モジュールユーティリティーã¯ã€Ansible ライブラリーã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚¤ãƒ³ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚ã¾ãŸã€ã™ã¹ã¦ã® Python Ansible モジュール㯠``ansible.module_utils`` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一般的ãªã‚ªãƒ—ションã§ã¯ã€``AnsibleModule`` をインãƒãƒ¼ãƒˆã™ã‚‹ã®ãŒä¸€èˆ¬çš„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:15 msgid "The ``ansible.module_utils`` namespace is not a plain Python package: it is constructed dynamically for each task invocation, by extracting imports and resolving those matching the namespace against a :ref:`search path ` derived from the active configuration." msgstr "``ansible.module_utils`` åå‰ç©ºé–“ã¯å˜ç´”㪠Python パッケージã§ã¯ã‚りã¾ã›ã‚“。ã“れã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’抽出ã—ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªè¨­å®šã‹ã‚‰æ´¾ç”Ÿã™ã‚‹ :ref:`検索パス ` ã«å¯¾ã—ã¦ä¸€è‡´ã™ã‚‹åå‰ç©ºé–“を解決ã™ã‚‹ã“ã¨ã§ã€å„タスク呼ã³å‡ºã—用ã«å‹•çš„ã«æ§‹ç¯‰ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:20 msgid "To reduce the maintenance burden in a collection or in local modules, you can extract duplicated code into one or more module utilities and import them into your modules. For example, if you have your own custom modules that import a ``my_shared_code`` library, you can place that into a ``./module_utils/my_shared_code.py`` file like this::" msgstr "コレクションã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹è² è·ã‚’軽減ã™ã‚‹ã«ã¯ã€é‡è¤‡ã‚³ãƒ¼ãƒ‰ã‚’ 1 ã¤ä»¥ä¸Šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã«æŠ½å‡ºã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``my_shared_code`` ライブラリーをインãƒãƒ¼ãƒˆã™ã‚‹ç‹¬è‡ªã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚‹å ´åˆã¯ã€ã“れをã€ä»¥ä¸‹ã®ã‚ˆã†ã« ``./module_utils/my_shared_code.py`` ファイルã«é…ç½®ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:25 msgid "When you run ``ansible-playbook``, Ansible will merge any files in your local ``module_utils`` directories into the ``ansible.module_utils`` namespace in the order defined by the :ref:`Ansible search path `." msgstr "``ansible-playbook`` を実行ã™ã‚‹ã¨ã€Ansible 㯠:ref:`Ansible 検索パス ` ã§å®šç¾©ã•れã¦ã„ã‚‹é †åºã§ãƒ­ãƒ¼ã‚«ãƒ«ã® ``module_utils`` ディレクトリーã®ãƒ•ァイルを ``ansible.module_utils`` åå‰ç©ºé–“ã«ãƒžãƒ¼ã‚¸ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:28 msgid "Naming and finding module utilities" msgstr "モジュールユーティリティーã®å‘½åãŠã‚ˆã³æ¤œç´¢" #: ../../rst/dev_guide/developing_module_utilities.rst:30 msgid "You can generally tell what a module utility does from its name and/or its location. Generic utilities (shared code used by many different kinds of modules) live in the main ansible/ansible codebase, in the ``common`` subdirectory or in the root directory of ``lib/ansible/module_utils``. Utilities used by a particular set of modules generally live in the same collection as those modules. For example:" msgstr "通常ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒåå‰ã‚„ãã®å ´æ‰€ã‹ã‚‰å‹•作ã™ã‚‹ã‚ˆã†ã«ã§ãã¾ã™ã€‚汎用ユーティリティー (ã•ã¾ã–ã¾ãªç¨®é¡žã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã•れる共有コード) ã¯ã€ãƒ¡ã‚¤ãƒ³ã® ansible/ansible コードベースã«ã‚りã¾ã™ã€‚``common`` サブディレクトリーã€ã¾ãŸã¯ ``lib/ansible/module_utils`` ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚りã¾ã™ã€‚特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã§ä½¿ç”¨ã•れるユーティリティーã¯ã€é€šå¸¸ã€ãれらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒã˜ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å­˜åœ¨ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:32 msgid "``lib/ansible/module_utils/urls.py`` contains shared code for parsing URLs" msgstr "``lib/ansible/module_utils/urls.py`` ã¯ã€URL ã‚’è§£æžã™ã‚‹ãŸã‚ã®å…±æœ‰ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:33 msgid "``openstack.cloud.plugins.module_utils.openstack.py`` contains utilities for modules that work with OpenStack instances" msgstr "``openstack.cloud.plugins.module_utils.openstack.py`` ã«ã¯ã€OpenStack インスタンスã¨é€£æºã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:34 msgid "``ansible.netcommon.plugins.module_utils.network.common.config.py`` contains utility functions for use by networking modules" msgstr "``ansible.netcommon.plugins.module_utils.network.common.config.py`` ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ä½¿ç”¨ã•ã‚Œã‚‹è¨­å®šãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:36 msgid "Following this pattern with your own module utilities makes everything easy to find and use." msgstr "ã“ã®ãƒ‘ターンを独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã§è¡Œã†ã¨ã€ã‚らゆるもã®ã‚’見ã¤ã‘ã€ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:41 msgid "Standard module utilities" msgstr "標準ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼" #: ../../rst/dev_guide/developing_module_utilities.rst:43 msgid "Ansible ships with an extensive library of ``module_utils`` files. You can find the module utility source code in the ``lib/ansible/module_utils`` directory under your main Ansible path. We describe the most widely used utilities below. For more details on any specific module utility, please see the `source code for module_utils `_." msgstr "Ansible ã«ã¯ã€``module_utils`` ファイルã®åºƒç¯„ãªãƒ©ã‚¤ãƒ–ラリーãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚モジュールユーティリティーã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯ã€ãƒ¡ã‚¤ãƒ³ã® Ansible パス下㮠``lib/ansible/module_utils`` ディレクトリーã«ã‚りã¾ã™ã€‚ã¾ãŸã€ä»¥ä¸‹ã§æœ€ã‚‚広ã使用ã•れã¦ã„るユーティリティーãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®è©³ç´°ã¯ã€ã€Œ`モジュールユーティリティーã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/shared_snippets/licensing.txt:2 msgid "**LICENSING REQUIREMENTS** Ansible enforces the following licensing requirements:" msgstr "**ライセンスè¦ä»¶** Ansible ã¯ã€ä»¥ä¸‹ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹è¦ä»¶ã‚’強制ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/shared_snippets/licensing.txt:7 msgid "Utilities (files in ``lib/ansible/module_utils/``) may have one of two licenses:" msgstr "ユーティリティー (``lib/ansible/module_utils/`` 内ã®ãƒ•ァイル) ã«ã¯ã€2 ã¤ã‚るライセンスã®ã„ãšã‚Œã‹ãŒå­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/shared_snippets/licensing.txt:5 msgid "A file in ``module_utils`` used **only** for a specific vendor's hardware, provider, or service may be licensed under GPLv3+. Adding a new file under ``module_utils`` with GPLv3+ needs to be approved by the core team." msgstr "特定ã®ãƒ™ãƒ³ãƒ€ãƒ¼ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã€ã¾ãŸã¯ã‚µãƒ¼ãƒ“ス㫠**ã®ã¿** ``module_utils`` を使用ã™ã‚‹ãƒ•ァイルã¯ã€GPLv3 以é™ã§ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’å–å¾—ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚GPLv3 以é™ã‚’æŒã¤ ``module_utils`` ã«æ–°ã—ã„ファイルを追加ã™ã‚‹ã«ã¯ã€ã‚³ã‚¢ãƒãƒ¼ãƒ ã«ã‚ˆã‚‹æ‰¿èªãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/shared_snippets/licensing.txt:7 msgid "All other ``module_utils`` must be licensed under BSD, so GPL-licensed third-party and Galaxy modules can use them." msgstr "ä»–ã®ã™ã¹ã¦ã® ``module_utils`` ã¯ã€GPL ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒä»˜ä¸Žã•れãŸã‚µãƒ¼ãƒ‰ãƒ‘ーティー㨠Galaxy モジュールãŒä½¿ç”¨ã§ãるよã†ã«ã€BSD ã§ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒä»˜ä¸Žã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/shared_snippets/licensing.txt:8 msgid "If there's doubt about the appropriate license for a file in ``module_utils``, the Ansible Core Team will decide during an Ansible Core Community Meeting." msgstr "``module_utils`` ã®ãƒ•ァイルã«é©åˆ‡ãªãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã«ã¤ã„ã¦ç–‘å•ãŒã‚ã‚‹å ´åˆã¯ã€Ansible Core Team ㌠Ansible Core Community Meeting ã§æ±ºå®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/shared_snippets/licensing.txt:9 msgid "All other files shipped with Ansible, including all modules, must be licensed under the GPL license (GPLv3 or later)." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å«ã‚€ Ansible ã«åŒæ¢±ã•れる他ã®ã™ã¹ã¦ã®ãƒ•ァイルã¯ã€GPL ライセンス (GPLv3 以é™) ã§ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:47 msgid "``api.py`` - Supports generic API modules" msgstr "``api.py`` - 汎用 API モジュールã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_module_utilities.rst:48 msgid "``basic.py`` - General definitions and helper utilities for Ansible modules" msgstr "``basic.py`` - Ansible モジュールã®ä¸€èˆ¬çš„ãªå®šç¾©ãŠã‚ˆã³ãƒ˜ãƒ«ãƒ‘ーユーティリティー" #: ../../rst/dev_guide/developing_module_utilities.rst:49 msgid "``common/dict_transformations.py`` - Helper functions for dictionary transformations" msgstr "``common/dict_transformations.py`` - ディクショナリー変æ›ã®ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:50 msgid "``common/file.py`` - Helper functions for working with files" msgstr "``common/file.py`` - ファイルをæ“作ã™ã‚‹ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:51 msgid "``common/text/`` - Helper functions for converting and formatting text" msgstr "``common/text/`` - テキストã®å¤‰æ›ãŠã‚ˆã³ãƒ•ォーマットを行ã†ãŸã‚ã®ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:52 msgid "``common/parameters.py`` - Helper functions for dealing with module parameters" msgstr "``common/parameters.py`` - モジュールパラメーターを処ç†ã™ã‚‹ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:53 msgid "``common/sys_info.py`` - Functions for getting distribution and platform information" msgstr "``common/sys_info.py`` - ディストリビューションãŠã‚ˆã³ãƒ—ラットフォーム情報をå–å¾—ã™ã‚‹æ©Ÿèƒ½" #: ../../rst/dev_guide/developing_module_utilities.rst:54 msgid "``common/validation.py`` - Helper functions for validating module parameters against a module argument spec" msgstr "``common/validation.py`` - モジュール引数仕様ã«å¯¾ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターを検証ã™ã‚‹ãŸã‚ã®ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:55 msgid "``facts/`` - Directory of utilities for modules that return facts. See `PR 23012 `_ for more information" msgstr "``facts/`` - ファクトを返ã™ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚詳細ã¯ã€`PR 23012 `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_module_utilities.rst:56 msgid "``json_utils.py`` - Utilities for filtering unrelated output around module JSON output, like leading and trailing lines" msgstr "``json_utils.py`` - 先頭行や末尾行ãªã©ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« JSON 出力ã«é–¢ã™ã‚‹é–¢é€£ã®ãªã„出力をフィルターを設定ã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼" #: ../../rst/dev_guide/developing_module_utilities.rst:57 msgid "``powershell/`` - Directory of definitions and helper functions for Windows PowerShell modules" msgstr "``powershell/`` - Windows PowerShell モジュールã®å®šç¾©ãŠã‚ˆã³ãƒ˜ãƒ«ãƒ‘ー関数ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼" #: ../../rst/dev_guide/developing_module_utilities.rst:58 msgid "``pycompat24.py`` - Exception workaround for Python 2.4" msgstr "``pycompat24.py`` - Python 2.4 ã®ä¾‹å¤–回é¿ç­–" #: ../../rst/dev_guide/developing_module_utilities.rst:59 msgid "``service.py`` - Utilities to enable modules to work with Linux services (placeholder, not in use)" msgstr "``service.py`` - モジュール㌠Linux サービスã¨é€£æºã§ãるよã†ã«ã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ (未使用ã®ãƒ—レースホルダー)" #: ../../rst/dev_guide/developing_module_utilities.rst:60 msgid "``six/__init__.py`` - Bundled copy of the `Six Python library `_ to aid in writing code compatible with both Python 2 and Python 3" msgstr "``six/__init__.py`` - Python 2 㨠Python 3 ã®ä¸¡æ–¹ã¨äº’æ›æ€§ã®ã‚るコードを書ã込む際ã«åŠ©ã‘ã¨ãªã‚‹ `Six Python ライブラリー `_ ã®ãƒãƒ³ãƒ‰ãƒ«ã‚³ãƒ”ー" #: ../../rst/dev_guide/developing_module_utilities.rst:61 msgid "``splitter.py`` - String splitting and manipulation utilities for working with Jinja2 templates" msgstr "``splitter.py`` - Jinja2 テンプレートを使用ã™ã‚‹æ–‡å­—列分割ãŠã‚ˆã³æ“作ユーティリティー" #: ../../rst/dev_guide/developing_module_utilities.rst:62 msgid "``urls.py`` - Utilities for working with http and https requests" msgstr "``urls.py`` - http ãŠã‚ˆã³ https リクエストをæ“作ã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼" #: ../../rst/dev_guide/developing_module_utilities.rst:64 msgid "Several commonly-used utilities migrated to collections in Ansible 2.10, including:" msgstr "一般的ã«ä½¿ç”¨ã•れるã„ãã¤ã‹ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€Ansible 2.10 ã§ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_module_utilities.rst:66 msgid "``ismount.py`` migrated to ``ansible.posix.plugins.module_utils.mount.py`` - Single helper function that fixes os.path.ismount" msgstr "``ansible.posix.plugins.module_utils.mount.py`` ã«ç§»è¡Œã—㟠``ismount.py`` - os.path.ismount を修正ã™ã‚‹å˜ä¸€ã®ãƒ˜ãƒ«ãƒ‘ー関数" #: ../../rst/dev_guide/developing_module_utilities.rst:67 msgid "``known_hosts.py`` migrated to ``community.general.plugins.module_utils.known_hosts.py`` - utilities for working with known_hosts file" msgstr "``community.general.plugins.module_utils.known_hosts.py`` ã«ç§»è¡Œã—㟠``known_hosts.py`` - known_hosts ファイルã§ä½œæ¥­ã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼" #: ../../rst/dev_guide/developing_module_utilities.rst:69 msgid "For a list of migrated content with destination collections, see https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml." msgstr "宛先コレクションã§ç§»è¡Œã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä¸€è¦§ã¯ã€https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:6 msgid "Should you develop a module?" msgstr "モジュール開発ã®å¿…è¦æ€§" #: ../../rst/dev_guide/developing_modules.rst:8 msgid "Developing Ansible modules is easy, but often it is not necessary. Before you start writing a new module, ask:" msgstr "Ansible モジュールã®é–‹ç™ºã¯å®¹æ˜“ã§ã™ãŒã€é€šå¸¸ã¯ä¸è¦ã§ã™ã€‚æ–°ã—ã„モジュールを書ãå§‹ã‚ã‚‹å‰ã«ã€ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:10 msgid "Does a similar module already exist?" msgstr "åŒæ§˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã‹ã€‚" #: ../../rst/dev_guide/developing_modules.rst:12 msgid "An existing module may cover the functionality you want. Ansible collections include thousands of modules. Search our :ref:`list of included collections ` or `Ansible Galaxy `_ to see if an existing module does what you need." msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å¿…è¦ãªæ©Ÿèƒ½ã«å¯¾å¿œã§ãã¾ã™ã€‚Ansible コレクションã«ã¯ã€æ•°åƒã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚:ref:`åŒæ¢±ã•れるコレクションã®ä¸€è¦§ ` ã¾ãŸã¯ `Ansible Galaxy `_ を検索ã™ã‚‹ã¨ã€æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã©ã†ã‹ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:14 msgid "Should you use or develop an action plugin instead of a module?" msgstr "モジュールã®ä»£ã‚りã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインを使用ã™ã‚‹ã‹ã€ã¾ãŸã¯é–‹ç™ºã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã€‚" #: ../../rst/dev_guide/developing_modules.rst:16 msgid "An action plugin may be the best way to get the functionality you want. Action plugins run on the control node instead of on the managed node, and their functionality is available to all modules. For more information about developing plugins, read the :ref:`developing plugins page `." msgstr "アクションプラグインã¯ã€å¿…è¦ãªæ©Ÿèƒ½ã‚’å–å¾—ã™ã‚‹æœ€å–„ã®æ–¹æ³•ã¨ãªã‚‹ã§ã—ょã†ã€‚アクションプラグインã¯ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ã¯ãªãコントロールノードã§å®Ÿè¡Œã•れã€ãã®æ©Ÿèƒ½ã¯ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§åˆ©ç”¨ã§ãã¾ã™ã€‚プラグインã®é–‹ç™ºã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`プラグインã®é–‹ç™ºãƒšãƒ¼ã‚¸`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:18 msgid "Should you use a role instead of a module?" msgstr "モジュールã®ä»£ã‚りã«ãƒ­ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã€‚" #: ../../rst/dev_guide/developing_modules.rst:20 msgid "A combination of existing modules may cover the functionality you want. You can write a role for this type of use case. Check out the :ref:`roles documentation`." msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®çµ„ã¿åˆã‚ã›ã«ã‚ˆã£ã¦ã€å¸Œæœ›ã®æ©Ÿèƒ½ã«å¯¾å¿œã§ãã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¿ã‚¤ãƒ—ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«ãƒ­ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「:ref:`ロールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ`ã€ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:22 msgid "Should you create a collection instead of a single module?" msgstr "1 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä»£ã‚りã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã€‚" #: ../../rst/dev_guide/developing_modules.rst:24 msgid "The functionality you want may be too large for a single module. If you want to connect Ansible to a new cloud provider, database, or network platform, you may need to :ref:`develop a new collection`." msgstr "1 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ã“ã®æ©Ÿèƒ½ãŒå¤§ãã™ãŽã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Ansible ã‚’æ–°ã—ã„クラウドプロãƒã‚¤ãƒ€ãƒ¼ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ã«æŽ¥ç¶šã™ã‚‹å ´åˆã¯ã€:ref:`æ–°ã—ã„コレクションã®é–‹ç™º` ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:26 msgid "Each module should have a concise and well defined functionality. Basically, follow the UNIX philosophy of doing one thing well." msgstr "å„モジュールã«ã¯ã€ç°¡æ½”ã§ååˆ†ã«æ©Ÿèƒ½ãŒå®šç¾©ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚基本的ã«ã¯ã€1 ã¤ã®ã“ã¨ã‚’å分ã«è¡Œã†ã¨ã„ㆠUNIX ã®å“²å­¦ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:28 msgid "A module should not require that a user know all the underlying options of an API/tool to be used. For instance, if the legal values for a required module parameter cannot be documented, that's a sign that the module would be rejected." msgstr "モジュールã¯ã€ä½¿ç”¨ã™ã‚‹ API ã¾ãŸã¯ãƒ„ールã®åŸºç¤Žã¨ãªã‚‹ã™ã¹ã¦ã®ã‚ªãƒ—ションを把æ¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã®æœ‰åйãªå€¤ã‚’文書化ã§ããªã„å ´åˆã€ãれã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ‹’å¦ã•れるã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:30 msgid "Modules should typically encompass much of the logic for interacting with a resource. A lightweight wrapper around an API that does not contain much logic would likely cause users to offload too much logic into a playbook, and for this reason the module would be rejected. Instead try creating multiple modules for interacting with smaller individual pieces of the API." msgstr "モジュールã¯ã€é€šå¸¸ã€ãƒªã‚½ãƒ¼ã‚¹ã¨å¯¾è©±ã™ã‚‹ãƒ­ã‚¸ãƒƒã‚¯ã®å¤šãを網羅ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ロジックをã‚ã¾ã‚Šå«ã¾ãªã„ API ã®è»½é‡ãƒ©ãƒƒãƒ‘ーを使用ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚ã¾ã‚Šã«ã‚‚多ãã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’ Playbook ã«ã‚ªãƒ•ロードã™ã‚‹åŽŸå› ã¨ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ‹’å¦ã•れã¾ã™ã€‚代ã‚りã«ã€API ã®å°ã•ãªå€‹ã€…ã®éƒ¨åˆ†ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã¿ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules.rst:32 msgid "If your use case isn't covered by an existing module, an action plugin, or a role, and you don't need to create multiple modules, then you're ready to start developing a new module. Choose from the topics below for next steps:" msgstr "ユースケースãŒã€æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ã¯å¯¾å¿œã•れã¦ãŠã‚‰ãšã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å¿…è¦ãŒãªã„å ´åˆã¯ã€æ–°ã—ã„モジュールã®é–‹ç™ºã‚’é–‹å§‹ã™ã‚‹æº–å‚™ãŒã§ãã¦ã„ã¾ã™ã€‚次ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€ä»¥ä¸‹ã®ãƒˆãƒ”ックã‹ã‚‰é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:34 msgid "I want to :ref:`get started on a new module `." msgstr ":ref:`æ–°ã—ã„モジュールを使用開始` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:35 msgid "I want to review :ref:`tips and conventions for developing good modules `." msgstr ":ref:`良質ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã™ã‚‹ãŸã‚ã®ãƒ’ントãŠã‚ˆã³è¦ç´„ ` を確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:36 msgid "I want to :ref:`write a Windows module `." msgstr ":ref:`Windows ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä½œæˆ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:37 msgid "I want :ref:`an overview of Ansible's architecture `." msgstr ":ref:`Ansible ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã®æ¦‚è¦ ` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:38 msgid "I want to :ref:`document my module `." msgstr ":ref:`作æˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ドキュメント化 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:39 msgid "I want to :ref:`contribute my module back to Ansible Core `." msgstr ":ref:`作æˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ Ansible Core ã«è²¢çŒ® ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:40 msgid "I want to :ref:`add unit and integration tests to my module `." msgstr ":ref:`作æˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŠã‚ˆã³çµ±åˆãƒ†ã‚¹ãƒˆã‚’追加 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:41 msgid "I want to :ref:`add Python 3 support to my module `." msgstr ":ref:`作æˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« Python 3 サãƒãƒ¼ãƒˆã‚’追加 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:42 msgid "I want to :ref:`write multiple modules `." msgstr ":ref:`è¤‡æ•°ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä½œæˆ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules.rst:46 #: ../../rst/dev_guide/developing_plugins.rst:536 msgid ":ref:`list_of_collections`" msgstr ":ref:`list_of_collections`" #: ../../rst/dev_guide/developing_modules.rst:47 #: ../../rst/dev_guide/developing_plugins.rst:537 msgid "Browse existing collections, modules, and plugins" msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインã®é–²è¦§" #: ../../rst/dev_guide/developing_modules.rst:49 msgid "Development mailing list" msgstr "開発メーリングリスト" #: ../../rst/dev_guide/developing_modules_best_practices.rst:6 msgid "Conventions, tips, and pitfalls" msgstr "è¦å‰‡ã€ãƒ’ントã€ãŠã‚ˆã³è½ã¨ã—ç©´" #: ../../rst/dev_guide/developing_modules_best_practices.rst:11 msgid "As you design and develop modules, follow these basic conventions and tips for clean, usable code:" msgstr "モジュールã®è¨­è¨ˆãŠã‚ˆã³é–‹ç™ºã‚’行ã†éš›ã«ã€ä»¥ä¸‹ã®åŸºæœ¬çš„ãªè¦å‰‡ãŠã‚ˆã³ãƒ’ントã«å¾“ã£ã¦ã€èª­ã¿ã‚„ã™ã使用å¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:14 msgid "Scoping your module(s)" msgstr "モジュールã®ã‚¹ã‚³ãƒ¼ãƒ—設定" #: ../../rst/dev_guide/developing_modules_best_practices.rst:16 msgid "Especially if you want to contribute your module(s) to an existing Ansible Collection, make sure each module includes enough logic and functionality, but not too much. If these guidelines seem confusing, consider :ref:`whether you really need to write a module ` at all." msgstr "特ã«ã€æ—¢å­˜ã® Ansible Collection ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã™ã‚‹å ´åˆã¯ã€å„モジュールã«å分ãªãƒ­ã‚¸ãƒƒã‚¯ã¨æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ãŸã ã—ã€å¤šã™ãŽãªã„よã†ã«ã—ã¦ãã ã•ã„。ã“れらã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŒç´›ã‚‰ã‚ã—ã„ã¨æ€ã‚れる場åˆã¯ã€:ref:`モジュールã®è¨˜è¿°ãŒæœ¬å½“ã«å¿…è¦ã‹ã©ã†ã‹ ` を検討ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:18 msgid "Each module should have a concise and well-defined functionality. Basically, follow the UNIX philosophy of doing one thing well." msgstr "å„モジュールã«ã¯ã€ç°¡æ½”ã§ååˆ†ã«æ©Ÿèƒ½ãŒå®šç¾©ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚基本的ã«ã¯ã€1 ã¤ã®ã“ã¨ã‚’å分ã«è¡Œã†ã¨ã„ㆠUNIX ã®å“²å­¦ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:19 msgid "Do not add ``get``, ``list`` or ``info`` state options to an existing module - create a new ``_info`` or ``_facts`` module." msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã€``get``ã€``list``ã€ã¾ãŸã¯ ``info`` ã®çŠ¶æ…‹ã®ã‚ªãƒ—ションを追加ã—ãªã„ã§ãã ã•ã„。新ã—ã„ ``_info`` モジュールã¾ãŸã¯ ``_facts`` モジュールを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:20 msgid "Modules should not require that a user know all the underlying options of an API/tool to be used. For instance, if the legal values for a required module option cannot be documented, the module does not belong in Ansible Core." msgstr "モジュールã§ã¯ã€ä½¿ç”¨ã™ã‚‹ API ã¾ãŸã¯ãƒ„ールã®åŸºç¤Žã¨ãªã‚‹ã‚ªãƒ—ションをã™ã¹ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŠŠæ¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ‰åйãªå€¤ã‚’文書化ã§ããªã„å ´åˆã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible Core ã«å±žã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:21 msgid "Modules should encompass much of the logic for interacting with a resource. A lightweight wrapper around a complex API forces users to offload too much logic into their playbooks. If you want to connect Ansible to a complex API, :ref:`create multiple modules ` that interact with smaller individual pieces of the API." msgstr "モジュールã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’多数組ã¿è¾¼ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚複雑㪠API ã«é–¢é€£ã—ãŸè»½é‡ãƒ©ãƒƒãƒ‘ーã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ Playbook ã«éžå¸¸ã«å¤šãã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’オフロードã—ã¾ã™ã€‚Ansible を複雑㪠API ã«æŽ¥ç¶šã™ã‚‹å ´åˆã¯ã€API ã®ã‚ˆã‚Šå°ã•ã„個々ã®éƒ¨åˆ†ã¨å¯¾è©±ã™ã‚‹ :ref:`複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä½œæˆ ` ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:22 msgid "Avoid creating a module that does the work of other modules; this leads to code duplication and divergence, and makes things less uniform, unpredictable and harder to maintain. Modules should be the building blocks. If you are asking 'how can I have a module execute other modules' ... you want to write a role." msgstr "ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½œæ¥­ã‚’行ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ã®é‡è¤‡ã¨å·®ç•°ãŒç™ºç”Ÿã—ã€ä¸€è²«æ€§ãŒä¿ãŸã‚Œãšã€äºˆæ¸¬ãŒã§ããªããªã‚Šã€ç¶­æŒãŒé›£ã—ããªã‚Šã¾ã™ã€‚モジュールã¯ãƒ“ルディングブロックã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。「ã©ã®ã‚ˆã†ã«ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã•ã›ã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã‹ã€ã¨ã„ã†è³ªå•ãŒæµ®ã‹ã‚“ã§ãã‚‹å ´åˆã¯ã€ãれãŒãƒ­ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ç†ç”±ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:25 msgid "Designing module interfaces" msgstr "モジュールインターフェースã®è¨­è¨ˆ" #: ../../rst/dev_guide/developing_modules_best_practices.rst:27 msgid "If your module is addressing an object, the option for that object should be called ``name`` whenever possible, or accept ``name`` as an alias." msgstr "モジュールãŒã‚ªãƒ–ジェクトã«å¯¾å‡¦ã—ã¦ã„ã‚‹å ´åˆã¯ã€å¯èƒ½ãªé™ã‚Šãã®ã‚ªãƒ–ジェクトã®ã‚ªãƒ—ションを ``name`` ã¨ã™ã‚‹ã‹ã€ã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ã—㦠``name`` ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:28 msgid "Modules accepting boolean status should accept ``yes``, ``no``, ``true``, ``false``, or anything else a user may likely throw at them. The AnsibleModule common code supports this with ``type='bool'``." msgstr "ブール値ステータスを許å¯ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``yes``ã€``no``ã€``true``ã€``false``ã€ã‚‚ã—ãã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‡ºåŠ›ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ã‚‚ã®ã¯ãªã‚“ã§ã‚‚å—ã‘入れる必è¦ãŒã‚Šã¾ã™ã€‚AnsibleModule ã®ä¸€èˆ¬çš„ãªã‚³ãƒ¼ãƒ‰ã¯ã€``type='bool'`` ã§ã“れをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:29 msgid "Avoid ``action``/``command``, they are imperative and not declarative, there are other ways to express the same thing." msgstr "``action``/``command`` ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ã“れã¯å‘½ä»¤åž‹ã§ã‚りã€å®£è¨€çš„ã§ã¯ã‚りã¾ã›ã‚“ãŒã€åŒã˜æ–¹æ³•を表示ã™ã‚‹æ–¹æ³•ã¯ä»–ã«ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:32 msgid "General guidelines & tips" msgstr "一般的ãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŠã‚ˆã³ãƒ’ント" #: ../../rst/dev_guide/developing_modules_best_practices.rst:34 msgid "Each module should be self-contained in one file, so it can be auto-transferred by ``ansible-core``." msgstr "å„モジュール㯠1 ã¤ã®ãƒ•ァイルã«ã¾ã¨ã‚ã¦è‡ªå·±å®Œçµã•ã›ã‚‹å¿…è¦ãŒã‚りã€``ansible-core`` ã§è‡ªå‹•転é€ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:35 msgid "Module name MUST use underscores instead of hyphens or spaces as a word separator. Using hyphens and spaces will prevent ``ansible-core`` from importing your module." msgstr "モジュールåã¯ã€å˜èªžã®åŒºåˆ‡ã‚Šæ–‡å­—ã¨ã—ã¦ã€ãƒã‚¤ãƒ•ンやスペースã®ä»£ã‚りã«ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒã‚¤ãƒ•ンやスペースを使用ã™ã‚‹ã¨ã€``ansible-core`` ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã§ããªããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:36 msgid "Always use the ``hacking/test-module.py`` script when developing modules - it will warn you about common pitfalls." msgstr "モジュールを開発ã™ã‚‹éš›ã«ã¯å¿…ãš ``hacking/test-module.py`` スクリプトを使用ã—ã¦ãã ã•ã„。よãã‚ã‚‹è½ã¨ã—ç©´ã«ã¤ã„ã¦è­¦å‘Šã—ã¦ãれã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:37 msgid "If you have a local module that returns information specific to your installations, a good name for this module is ``site_info``." msgstr "インストールã«å›ºæœ‰ã®æƒ…報を返ã™ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚‹å ´åˆã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é©åˆ‡ãªåå‰ã¯ ``site_info`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:38 msgid "Eliminate or minimize dependencies. If your module has dependencies, document them at the top of the module file and raise JSON error messages when dependency import fails." msgstr "ä¾å­˜é–¢ä¿‚ã‚’ãªãã™ã‚‹ã‹ã€ã¾ãŸã¯æœ€å°é™ã«æŠ‘ãˆã¾ã™ã€‚モジュールã«ä¾å­˜é–¢ä¿‚ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã®å†’é ­ã§æ–‡æ›¸åŒ–ã—ã€ä¾å­˜é–¢ä¿‚ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ãŸå ´åˆã¯ JSON エラーメッセージを発生ã•ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:39 msgid "Don't write to files directly; use a temporary file and then use the ``atomic_move`` function from ``ansible.module_utils.basic`` to move the updated temporary file into place. This prevents data corruption and ensures that the correct context for the file is kept." msgstr "ファイルã«ç›´æŽ¥æ›¸ãè¾¼ã¾ãªã„よã†ã«ã—ã¾ã™ã€‚一時ファイルを使用ã—ã¦ã‹ã‚‰ã€``ansible.module_utils.basic`` ã® ``atomic_move`` 関数を使用ã—ã¦ã€æ›´æ–°ã•れãŸä¸€æ™‚ファイルを所定ã®å ´æ‰€ã«ç§»å‹•ã•ã›ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ãƒ¼ã‚¿ã®ç ´æã‚’防ãŽã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ­£ã—ã„コンテキストãŒä¿æŒã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:40 msgid "Avoid creating caches. Ansible is designed without a central server or authority, so you cannot guarantee it will not run with different permissions, options or locations. If you need a central authority, have it on top of Ansible (for example, using bastion/cm/ci server, AWX, or the Red Hat Ansible Automation Platform); do not try to build it into modules." msgstr "キャッシュを作æˆã—ãªã„ã§ãã ã•ã„。Ansible ã¯ä¸­å¤®ã®ã‚µãƒ¼ãƒãƒ¼ã‚„権é™ã‚’æŒãŸãªã„よã†ã«è¨­è¨ˆã•れã¦ã„ã‚‹ãŸã‚ã€ã•ã¾ã–ã¾ãªãƒ‘ーミッションã€ã‚ªãƒ—ションã€å ´æ‰€ã‚’指定ã—ã¦å®Ÿè¡Œã—ãªã„ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€‚ä¸­å¤®ã®æ¨©é™ãŒå¿…è¦ãªå ´åˆã¯ã€ãれを Ansible ã®ä¸Šã«ç½®ã„ã¦ãã ã•ã„ (例: bastion/cm/ci serverã€AWXã€ã¾ãŸã¯ Red Hat Ansible Automation Platform を使用)。ãれをモジュールã«ã¯çµ„ã¿è¾¼ã¾ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:41 msgid "If you package your module(s) in an RPM, install the modules on the control machine in ``/usr/share/ansible``. Packaging modules in RPMs is optional." msgstr "RPM ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’パッケージ化ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒžã‚·ãƒ³ã« ``/usr/share/ansible`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インストールã—ã¾ã™ã€‚RPM ã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‘ッケージ化ã¯ä»»æ„ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:44 msgid "Functions and Methods" msgstr "関数ãŠã‚ˆã³ãƒ¡ã‚½ãƒƒãƒ‰" #: ../../rst/dev_guide/developing_modules_best_practices.rst:46 msgid "Each function should be concise and should describe a meaningful amount of work." msgstr "å„関数ã¯ç°¡æ½”ã«ã—ã€æ„味ã®ã‚る作業é‡ã‚’記述ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:47 msgid "\"Don't repeat yourself\" is generally a good philosophy." msgstr "「Don't repeat yourself (繰り返ã•ãªã„ã“ã¨)ã€ã¯ã€é€šå¸¸ã€é©ã—ã¦ã„る哲学ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:48 msgid "Function names should use underscores: ``my_function_name``." msgstr "関数åã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (``my_function_name``)。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:49 msgid "The name of each function should describe what the function does." msgstr "å„関数ã®åå‰ã«ã¯ã€é–¢æ•°ã®æ©Ÿèƒ½ã‚’記述ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:50 msgid "Each function should have a docstring." msgstr "å„関数ã«ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列 (docstring) ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:51 msgid "If your code is too nested, that's usually a sign the loop body could benefit from being a function. Parts of our existing code are not the best examples of this at times." msgstr "コードã®å…¥ã‚Œå­ã‚’多用ã—ã™ãŽã¦ã„ã‚‹å ´åˆã€ãれã¯é€šå¸¸ã€ãƒ«ãƒ¼ãƒ—本体ãŒé–¢æ•°ã§ã‚ã‚‹ã“ã¨ã‹ã‚‰åˆ©ç›ŠãŒå¾—られるå¯èƒ½æ€§ã®ã‚る兆候ã§ã™ã€‚既存ã®ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã¯ã€æ™‚ã¨ã—ã¦ã“ã®ã‚ˆã†ãªä¾‹ã¨ã—ã¦ã¯æœ€é©ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:54 msgid "Python tips" msgstr "Python ã®ãƒ’ント" #: ../../rst/dev_guide/developing_modules_best_practices.rst:56 msgid "Include a ``main`` function that wraps the normal execution." msgstr "通常ã®å®Ÿè¡Œã‚’ラップã™ã‚‹ ``main`` 関数をå«ã‚ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:57 msgid "Call your ``main`` function from a conditional so you can import it into unit tests - for example:" msgstr "æ¡ä»¶ã‹ã‚‰ ``main`` 機能を呼ã³å‡ºã—ã¦ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:67 msgid "Importing and using shared code" msgstr "共有コードã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŠã‚ˆã³ä½¿ç”¨" #: ../../rst/dev_guide/developing_modules_best_practices.rst:69 msgid "Use shared code whenever possible - don't reinvent the wheel. Ansible offers the ``AnsibleModule`` common Python code, plus :ref:`utilities ` for many common use cases and patterns. You can also create documentation fragments for docs that apply to multiple modules." msgstr "å¯èƒ½ãªé™ã‚Šå…±æœ‰ã‚³ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ - wheel ã‚’å†å®Ÿè£…ã—ãªã„ã§ãã ã•ã„。Ansible 㯠``AnsibleModule`` ã®ä¸€èˆ¬çš„㪠Python コードã¨ã€å¤šãã®ä¸€èˆ¬çš„ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ãŠã‚ˆã³ãƒ‘ターンã«ä½¿ç”¨ã™ã‚‹ :ref:`ユーティリティー ` ã‚’æä¾›ã—ã¾ã™ã€‚ã¾ãŸã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é©ç”¨ã•れるドキュメントフラグメントを作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:70 msgid "Import ``ansible.module_utils`` code in the same place as you import other libraries." msgstr "ä»–ã®ãƒ©ã‚¤ãƒ–ラリーをインãƒãƒ¼ãƒˆã™ã‚‹å ´æ‰€ã¨åŒã˜å ´æ‰€ã« ``ansible.module_utils`` コードをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:71 msgid "Do NOT use wildcards (*) for importing other python modules; instead, list the function(s) you are importing (for example, ``from some.other_python_module.basic import otherFunction``)." msgstr "ä»–ã® python モジュールã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«ã¯ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ (*) を使用ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹é–¢æ•°ã‚’一覧表示ã—ã¦ãã ã•ã„ (例: ``from some.other_python_module.basic import otherFunction``。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:72 msgid "Import custom packages in ``try``/``except``, capture any import errors, and handle them with ``fail_json()`` in ``main()``. For example:" msgstr "``try``/``except`` ã§ã‚«ã‚¹ã‚¿ãƒ ãƒ‘ッケージをインãƒãƒ¼ãƒˆã—ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚¨ãƒ©ãƒ¼ã‚’æ•æ‰ã—ã€``main()`` ã® ``fail_json()`` ã§å‡¦ç†ã—ã¾ã™ã€‚以下ã¯ä¾‹ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:89 msgid "Then in ``main()``, just after the argspec, do" msgstr "次㫠``main()`` ã§ã€argspec ã®ç›´å¾Œã«ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:98 msgid "And document the dependency in the ``requirements`` section of your module's :ref:`documentation_block`." msgstr "ã¾ãŸã€ä¾å­˜é–¢ä¿‚をモジュール㮠:ref:`documentation_block` ã® ``requirements`` セクションã§è¨˜è¿°ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:103 msgid "Handling module failures" msgstr "モジュール障害ã®å‡¦ç†" #: ../../rst/dev_guide/developing_modules_best_practices.rst:105 msgid "When your module fails, help users understand what went wrong. If you are using the ``AnsibleModule`` common Python code, the ``failed`` element will be included for you automatically when you call ``fail_json``. For polite module failure behavior:" msgstr "モジュールãŒå¤±æ•—ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å•題をç†è§£ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚一般的㪠Python コード ``AnsibleModule`` を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``fail_json`` ã®å‘¼ã³å‡ºã—時ã«è‡ªå‹•的㫠``failed`` è¦ç´ ãŒå«ã¾ã‚Œã¾ã™ã€‚polite モジュールã®å¤±æ•—動作ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:107 msgid "Include a key of ``failed`` along with a string explanation in ``msg``. If you don't do this, Ansible will use standard return codes: 0=success and non-zero=failure." msgstr "``msg`` ã®æ–‡å­—列ã®èª¬æ˜Žã¨å…±ã« ``failed`` ã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚ã“れを行ã‚ãªã„ã¨ã€Ansible ã¯æ¨™æº–ã®æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ 0=success ãŠã‚ˆã³ non-zero=failure を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:108 msgid "Don't raise a traceback (stacktrace). Ansible can deal with stacktraces and automatically converts anything unparseable into a failed result, but raising a stacktrace on module failure is not user-friendly." msgstr "トレースãƒãƒƒã‚¯ (スタックトレース) ã¯ç™ºç”Ÿã•ã›ã¾ã›ã‚“。Ansible ã¯ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’扱ã†ã“ã¨ãŒã§ãã€è§£æžã§ããªã„ã‚‚ã®ã¯è‡ªå‹•çš„ã«å¤±æ•—ã—ãŸçµæžœã«å¤‰æ›ã—ã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¤±æ•—時ã«ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’発生ã•ã›ã‚‹ã®ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•レンドリーã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:109 msgid "Do not use ``sys.exit()``. Use ``fail_json()`` from the module object." msgstr "``sys.exit()`` ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。モジュールオブジェクト㮠``fail_json()`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:112 msgid "Handling exceptions (bugs) gracefully" msgstr "例外 (ãƒã‚°) を正常ã«å‡¦ç†" #: ../../rst/dev_guide/developing_modules_best_practices.rst:114 msgid "Validate upfront--fail fast and return useful and clear error messages." msgstr "å‰ã‚‚ã£ã¦æ¤œè¨¼ã—ã¾ã™ã€‚æ—©ã‚ã«å¤±æ•—ã—ã€æœ‰ç”¨ã§æ˜Žç¢ºãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:115 msgid "Use defensive programming--use a simple design for your module, handle errors gracefully, and avoid direct stacktraces." msgstr "防御的ãªãƒ—ログラミングを使用ã—ã¾ã™ã€‚モジュールã«ã¯ã‚·ãƒ³ãƒ—ルãªãƒ‡ã‚¶ã‚¤ãƒ³ã‚’使用ã—ã€ã‚¨ãƒ©ãƒ¼ã‚’é©åˆ‡ã«å‡¦ç†ã—ã€ç›´æŽ¥ã®ã‚¹ã‚¿ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’回é¿ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:116 msgid "Fail predictably--if we must fail, do it in a way that is the most expected. Either mimic the underlying tool or the general way the system works." msgstr "予測å¯èƒ½ãªæ–¹æ³•ã§å¤±æ•—ã•ã›ã¾ã™ã€‚失敗ãŒã©ã†ã—ã¦ã‚‚é¿ã‘られãªã„å ´åˆã¯ã€æœ€ã‚‚期待ã•れる方法ã§å¤±æ•—ã—ã¾ã™ã€‚基礎ã¨ãªã‚‹ãƒ„ールã€ã¾ãŸã¯ã‚·ã‚¹ãƒ†ãƒ ã®ä¸€èˆ¬çš„ãªå‹•作方法を模倣ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:117 msgid "Give out a useful message on what you were doing and add exception messages to that." msgstr "実行内容ã«é–¢ã™ã‚‹æœ‰ç”¨ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦ã€ãれã«ä¾‹å¤–メッセージを追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:118 msgid "Avoid catchall exceptions, they are not very useful unless the underlying API gives very good error messages pertaining the attempted action." msgstr "キャッãƒã‚ªãƒ¼ãƒ«ä¾‹å¤–ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。基ã«ãªã‚‹ API ãŒè©¦è¡Œã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«é–¢ã—ã¦éžå¸¸ã«å„ªã‚ŒãŸã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒãªã„é™ã‚Šã€ã“れらã®ä¾‹å¤–ã¯ã»ã¨ã‚“ã©å½¹ã«ç«‹ã¡ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:123 msgid "Creating correct and informative module output" msgstr "æ­£ç¢ºã§æœ‰ç›Šãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å‡ºåŠ›ã‚’ä½œæˆ" #: ../../rst/dev_guide/developing_modules_best_practices.rst:125 msgid "Modules must output valid JSON only. Follow these guidelines for creating correct, useful module output:" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æœ‰åŠ¹ãª JSON ã®ã¿ã‚’出力ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€‚æ­£ç¢ºã§æœ‰ç”¨ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å‡ºåŠ›ã‚’ä½œæˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:127 msgid "Make your top-level return type a hash (dictionary)." msgstr "最上ä½ãƒ¬ãƒ™ãƒ«ã®æˆ»ã‚Šå€¤ã®åž‹ã‚’ãƒãƒƒã‚·ãƒ¥ (ディレクトリー) ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:128 msgid "Nest complex return values within the top-level hash." msgstr "è¤‡é›‘ãªæˆ»ã‚Šå€¤ã‚’トップレベルã®ãƒãƒƒã‚·ãƒ¥å†…ã«å…¥ã‚Œå­ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:129 msgid "Incorporate any lists or simple scalar values within the top-level return hash." msgstr "最上ä½ãƒ¬ãƒ™ãƒ«ã®æˆ»ã‚Šå€¤ãƒãƒƒã‚·ãƒ¥å†…ã«ãƒªã‚¹ãƒˆã‚„å˜ç´”ãªã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚’組ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:130 msgid "Do not send module output to standard error, because the system will merge standard out with standard error and prevent the JSON from parsing." msgstr "モジュールã®å‡ºåŠ›ã‚’æ¨™æº–ã‚¨ãƒ©ãƒ¼ã«é€ã‚‰ãªã„ã§ãã ã•ã„ã€‚ã‚·ã‚¹ãƒ†ãƒ ãŒæ¨™æº–ã‚¨ãƒ©ãƒ¼ã¨æ¨™æº–出力をマージã—ã€JSON ã®è§£æžã‚’妨ã’ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:131 msgid "Capture standard error and return it as a variable in the JSON on standard out. This is how the command module is implemented." msgstr "標準エラーをå–å¾—ã—ã€æ¨™æº–出力㮠JSON ã§å¤‰æ•°ã¨ã—ã¦è¿”ã—ã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè£…方法ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:132 msgid "Never do ``print(\"some status message\")`` in a module, because it will not produce valid JSON output." msgstr "有効㪠JSON 出力ãŒç”Ÿæˆã•れãªã„ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ ``print(\"some status message\")`` を実行ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:133 msgid "Always return useful data, even when there is no change." msgstr "変更ãŒãªã„å ´åˆã§ã‚‚ã€æœ‰ç”¨ãªãƒ‡ãƒ¼ã‚¿ã‚’常ã«è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:134 msgid "Be consistent about returns (some modules are too random), unless it is detrimental to the state/action." msgstr "状態/ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«æœ‰å®³ã§ãªã„é™ã‚Šã€æˆ»ã‚Šå€¤ã¯ä¸€è²«ã—ãŸã‚‚ã®ã«ã—ã¦ãã ã•ã„ (モジュールã«ã‚ˆã£ã¦ã¯éžå¸¸ã«ä¹±é›‘ãªã‚‚ã®ã‚‚ã‚りã¾ã™)。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:135 msgid "Make returns reusable--most of the time you don't want to read it, but you do want to process it and re-purpose it." msgstr "戻り値ã¯å†åˆ©ç”¨å¯èƒ½ãªã‚‚ã®ã«ã—ã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã¯èª­ã‚€ã“ã¨ã¯ã‚りã¾ã›ã‚“ãŒã€å‡¦ç†ã—ã¦å†åˆ©ç”¨ã§ãã‚‹ã‚‚ã®ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:136 msgid "Return diff if in diff mode. This is not required for all modules, as it won't make sense for certain ones, but please include it when applicable." msgstr "diff モードã®å ´åˆã¯ diff ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯æ„味をãªã•ãªã„ãŸã‚ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¿…è¦ãªã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€è©²å½“ã™ã‚‹å ´åˆã«ã¯ä½¿ç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:137 msgid "Enable your return values to be serialized as JSON with Python's standard `JSON encoder and decoder `_ library. Basic python types (strings, int, dicts, lists, and so on) are serializable." msgstr "Python ã®æ¨™æº–ã® `JSON エンコーダーãŠã‚ˆã³ãƒ‡ã‚³ãƒ¼ãƒ€ãƒ¼ `_ ライブラリーã§ã€æˆ»ã‚Šå€¤ã‚’ JSON ã¨ã—ã¦ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºã§ãるよã†ã«ã—ã¾ã™ã€‚基本的㪠python タイプ (文字列ã€intã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã€ãƒªã‚¹ãƒˆãªã©) ã¯ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºå¯èƒ½ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:138 msgid "Do not return an object using exit_json(). Instead, convert the fields you need from the object into the fields of a dictionary and return the dictionary." msgstr "exit_json() を使用ã—ã¦ã‚ªãƒ–ジェクトを返ã•ãªã„ã§ãã ã•ã„。代ã‚りã«ã€ã‚ªãƒ–ジェクトã®å¿…è¦ãªãƒ•ィールドをディクショナリーã®ãƒ•ィールドã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:139 msgid "Results from many hosts will be aggregated at once, so your module should return only relevant output. Returning the entire contents of a log file is generally bad form." msgstr "多数ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®çµæžœãŒä¸€åº¦ã«é›†ç´„ã•れるãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é–¢é€£ã™ã‚‹å‡ºåŠ›ã ã‘ã‚’è¿”ã™ã¹ãã§ã™ã€‚ログファイルã®å†…容全体を返ã™ã®ã¯ã€ä¸€èˆ¬çš„ã«ã¯æ‚ªã„å½¢å¼ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:141 msgid "If a module returns stderr or otherwise fails to produce valid JSON, the actual output will still be shown in Ansible, but the command will not succeed." msgstr "モジュール㌠stderr ã‚’è¿”ã™ã‹ã€æœ‰åŠ¹ãª JSON ã®ç”Ÿæˆã«å¤±æ•—ã—ãŸå ´åˆã§ã‚‚ã€å®Ÿéš›ã®å‡ºåŠ›ã¯ Ansible ã«è¡¨ç¤ºã•れã¾ã™ãŒã€ã‚³ãƒžãƒ³ãƒ‰ã¯æˆåŠŸã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:146 msgid "Following Ansible conventions" msgstr "Ansible ã®è¦å‰‡ã«æº–æ‹ " #: ../../rst/dev_guide/developing_modules_best_practices.rst:148 msgid "Ansible conventions offer a predictable user interface across all modules, playbooks, and roles. To follow Ansible conventions in your module development:" msgstr "Ansible ã®è¦å‰‡ã¯ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã«æ¸¡ã£ã¦äºˆæ¸¬å¯èƒ½ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã¾ã™ã€‚モジュール開発ã«ãŠã„㦠Ansible ã®è¦å‰‡ã«å¾“ã†ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:150 msgid "Use consistent names across modules (yes, we have many legacy deviations - don't make the problem worse!)." msgstr "モジュール間ã§ä¸€è²«æ€§ã®ã‚ã‚‹åå‰ã‚’使用ã—ã¾ã™ (レガシーã¨ã®ç›¸é•ãŒå¤šæ•°ã‚ã‚‹ãŸã‚ã€å•題を悪化ã•ã›ãªã„よã†ã«ã—ã¾ã—ょã†)。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:151 msgid "Use consistent options (arguments) within your module(s)." msgstr "モジュール内ã§ä¸€è²«ã—ãŸã‚ªãƒ—ション (引数) を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:152 msgid "Do not use 'message' or 'syslog_facility' as an option name, because this is used internally by Ansible." msgstr "ã“れ㯠Ansible ã«ã‚ˆã£ã¦å†…部ã§ä½¿ç”¨ã•れるãŸã‚ã€ã‚ªãƒ—ションåã«ã¯ã€Œmessageã€ã¾ãŸã¯ã€Œsyslog_facilityã€ã‚’使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:153 msgid "Normalize options with other modules - if Ansible and the API your module connects to use different names for the same option, add aliases to your options so the user can choose which names to use in tasks and playbooks." msgstr "ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚ªãƒ—ションを正è¦åŒ–ã—ã¾ã™ã€‚Ansible ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¥ç¶šã™ã‚‹ API ãŒåŒã˜ã‚ªãƒ—ションã«ç•°ãªã‚‹åå‰ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚ªãƒ—ションã«ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’追加ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ Playbook ã§ä½¿ç”¨ã™ã‚‹åå‰ã‚’é¸æŠžã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:154 msgid "Return facts from ``*_facts`` modules in the ``ansible_facts`` field of the :ref:`result dictionary` so other modules can access them." msgstr "ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãれらã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã€:ref:`çµæžœãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼` ã® ``ansible_facts`` フィールド㮠``*_facts`` モジュールã‹ã‚‰ãƒ•ァクトを返ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:155 msgid "Implement ``check_mode`` in all ``*_info`` and ``*_facts`` modules. Playbooks which conditionalize based on fact information will only conditionalize correctly in ``check_mode`` if the facts are returned in ``check_mode``. Usually you can add ``supports_check_mode=True`` when instantiating ``AnsibleModule``." msgstr "ã™ã¹ã¦ã® ``*_info`` ãŠã‚ˆã³ ``*_facts`` モジュール㫠``check_mode`` を実装ã—ã¾ã™ã€‚ファクト情報をもã¨ã«æ¡ä»¶ä»˜ã‘ã•れる Playbook ã¯ã€ãƒ•ァクト㌠``check_mode`` ã§è¿”ã•れる場åˆã«ã®ã¿ ``check_mode`` ã§æ¡ä»¶åŒ–ã•れã¾ã™ã€‚ 通常ã¯ã€``AnsibleModule`` をインスタンス化ã™ã‚‹æ™‚ã« ``supports_check_mode=True`` を追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:156 msgid "Use module-specific environment variables. For example, if you use the helpers in ``module_utils.api`` for basic authentication with ``module_utils.urls.fetch_url()`` and you fall back on environment variables for default values, use a module-specific environment variable like :code:`API__USERNAME` to avoid conflicts between modules." msgstr "モジュール固有ã®ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``module_utils.urls.fetch_url()`` ã§ã®åŸºæœ¬çš„ãªèªè¨¼ã« ``module_utils.api`` ã®ãƒ˜ãƒ«ãƒ‘ーを使用ã—ã€ãƒ‡ãƒ•ォルト値を環境変数ã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–“ã®ç«¶åˆã‚’回é¿ã™ã‚‹ãŸã‚ã« :code:`API__USERNAME` ã®ã‚ˆã†ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å›ºæœ‰ã®ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:157 msgid "Keep module options simple and focused - if you're loading a lot of choices/states on an existing option, consider adding a new, simple option instead." msgstr "モジュールã®ã‚ªãƒ—ションã¯ã‚·ãƒ³ãƒ—ルã§ç„¦ç‚¹ã‚’絞ã£ãŸã‚‚ã®ã«ã—ã¾ã™ã€‚既存ã®ã‚ªãƒ—ションã«å¤šãã®é¸æŠžè‚¢ã‚„状態を読ã¿è¾¼ã‚“ã§ã„ã‚‹å ´åˆã¯ã€ä»£ã‚ã‚Šã«æ–°ã—ã„シンプルãªã‚ªãƒ—ションを追加ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:158 msgid "Keep options small when possible. Passing a large data structure to an option might save us a few tasks, but it adds a complex requirement that we cannot easily validate before passing on to the module." msgstr "å¯èƒ½ãªå ´åˆã¯ã‚ªãƒ—ションã®ã‚µã‚¤ã‚ºã‚’å°ã•ãã—ã¾ã™ã€‚大ããªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ¸¡ã™ã¨ã€ã„ãã¤ã‹ã®ä½œæ¥­ãŒçœã‘ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™å‰ã«ç°¡å˜ã«æ¤œè¨¼ã§ããªã„複雑ãªè¦ä»¶ãŒè¿½åŠ ã•れã¦ã—ã¾ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:159 msgid "If you want to pass complex data to an option, write an expert module that allows this, along with several smaller modules that provide a more 'atomic' operation against the underlying APIs and services. Complex operations require complex data. Let the user choose whether to reflect that complexity in tasks and plays or in vars files." msgstr "複雑ãªãƒ‡ãƒ¼ã‚¿ã‚’ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ¸¡ã—ãŸã„ã®ã§ã‚れã°ã€ãれをå¯èƒ½ã«ã™ã‚‹ã‚¨ã‚­ã‚¹ãƒ‘ートモジュールã¨ã€åŸºç¤Žã¨ãªã‚‹ API やサービスã«å¯¾ã—ã¦ã‚ˆã‚Šã€Œã‚¢ãƒˆãƒŸãƒƒã‚¯ãªã€æ“作をæä¾›ã™ã‚‹ã„ãã¤ã‹ã®å°ã•ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã™ã€‚è¤‡é›‘ãªæ“作ã«ã¯è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿ãŒå¿…è¦ã§ã™ã€‚ãã®è¤‡é›‘ã•をタスクやプレイã«å映ã•ã›ã‚‹ã‹ã€vars ファイルã«å映ã•ã›ã‚‹ã‹ã‚’ユーザãŒé¸æŠžã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:160 msgid "Implement declarative operations (not CRUD) so the user can ignore existing state and focus on final state. For example, use ``started/stopped``, ``present/absent``." msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ—¢å­˜ã®çŠ¶æ…‹ã‚’ç„¡è¦–ã—ã¦æœ€çµ‚çš„ãªçŠ¶æ…‹ã«é›†ä¸­ã§ãるよã†ã«ã€(CRUDã§ã¯ãªã) å®£è¨€çš„ãªæ“作を実装ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``started/stopped``ã€``present/absent`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:161 msgid "Strive for a consistent final state (aka idempotency). If running your module twice in a row against the same system would result in two different states, see if you can redesign or rewrite to achieve consistent final state. If you can't, document the behavior and the reasons for it." msgstr "最終状態ãŒä¸€è²«ã—ãŸã‚‚ã® (別åã€å†ªç­‰æ€§) ã«ãªã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚åŒã˜ã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’連続ã—㦠2 回実行ã™ã‚‹ã¨ 2 ã¤ã®ç•°ãªã‚‹çŠ¶æ…‹ã«ãªã£ã¦ã—ã¾ã†å ´åˆã¯ã€æœ€çµ‚çš„ãªçŠ¶æ…‹ãŒä¸€è²«ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’å†è¨­è¨ˆã¾ãŸã¯æ›¸ãæ›ãˆã¦ã¿ã¦ãã ã•ã„。ã§ããªã„å ´åˆã¯ã€å‹•作ã¨ãã®ç†ç”±ã‚’記載ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:162 msgid "Provide consistent return values within the standard Ansible return structure, even if NA/None are used for keys normally returned under other options." msgstr "通常ã¯ä»–ã®ã‚ªãƒ—ションã§è¿”ã•れるキー㫠NA/None ãŒä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã§ã‚‚ã€æ¨™æº–ã® Ansible ã®æˆ»ã‚Šå€¤æ§‹é€ å†…ã§ä¸€è²«æ€§ã®ã‚る戻り値をæä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:163 msgid "Follow additional guidelines that apply to families of modules if applicable. For example, AWS modules should follow the :ref:`Amazon development checklist `." msgstr "該当ã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ•ァミリーã«é©ç”¨ã•れる追加ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€AWS モジュール㯠:ref:`Amazon development checklist ` ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:167 msgid "Module Security" msgstr "モジュールã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼" #: ../../rst/dev_guide/developing_modules_best_practices.rst:169 msgid "Avoid passing user input from the shell." msgstr "シェルã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã‚’æ¸¡ã•ãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:170 msgid "Always check return codes." msgstr "å¸¸ã«æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:171 msgid "You must always use ``module.run_command``, not ``subprocess`` or ``Popen`` or ``os.system``." msgstr "``subprocess``ã€``Popen``ã€ã¾ãŸã¯ ``os.system`` ã§ã¯ãªãã€å¸¸ã« ``module.run_command`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:172 msgid "Avoid using the shell unless absolutely necessary." msgstr "絶対ã«å¿…è¦ãªå ´åˆã‚’除ãã€ã‚·ã‚§ãƒ«ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:173 msgid "If you must use the shell, you must pass ``use_unsafe_shell=True`` to ``module.run_command``." msgstr "シェルを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``use_unsafe_shell=True`` ã‚’ ``module.run_command`` ã«æ¸¡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:174 msgid "If any variables in your module can come from user input with ``use_unsafe_shell=True``, you must wrap them with ``pipes.quote(x)``." msgstr "モジュールã®å¤‰æ•°ãŒ ``use_unsafe_shell=True`` を使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã‹ã‚‰é€ã‚‰ã‚Œã‚‹å ´åˆã¯ã€``pipes.quote(x)`` ã§ãƒ©ãƒƒãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_best_practices.rst:175 msgid "When fetching URLs, use ``fetch_url`` or ``open_url`` from ``ansible.module_utils.urls``. Do not use ``urllib2``, which does not natively verify TLS certificates and so is insecure for https." msgstr "URL ã‚’å–å¾—ã™ã‚‹éš›ã«ã¯ã€``ansible.module_utils.urls`` ã‹ã‚‰ ``fetch_url`` ã¾ãŸã¯ ``open_url`` を使用ã—ã¦ãã ã•ã„。``urllib2`` を使用ã—ãªã„ã§ãã ã•ã„。TLS 証明書をãƒã‚¤ãƒ†ã‚£ãƒ–ã§æ¤œè¨¼ã—ãªã„ãŸã‚ã€https ã§ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_best_practices.rst:176 msgid "Sensitive values marked with ``no_log=True`` will automatically have that value stripped from module return values. If your module could return these sensitive values as part of a dictionary key name, you should call the ``ansible.module_utils.basic.sanitize_keys()`` function to strip the values from the keys. See the ``uri`` module for an example." msgstr "``no_log=True`` ã®ãƒžãƒ¼ã‚¯ãŒä»˜ã„ãŸæ©Ÿå¯†å€¤ã¯è‡ªå‹•çš„ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ã‹ã‚‰å–り除ã‹ã‚Œã¾ã™ã€‚モジュールãŒã“ã‚Œã‚‰ã®æ©Ÿå¯†å€¤ã‚’ディクショナリーキーåã®ä¸€éƒ¨ã¨ã—ã¦è¿”ã™ã“ã¨ãŒã§ãã‚‹å ´åˆã¯ã€``ansible.module_utils.basic.sanitize_keys()`` 関数を呼ã³å‡ºã—ã¦ã‚­ãƒ¼ã‹ã‚‰å€¤ã‚’å–り除ãå¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``uri`` モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:6 msgid "Contributing your module to an existing Ansible collection" msgstr "既存㮠Ansible コレクションã¸ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è²¢çŒ®" #: ../../rst/dev_guide/developing_modules_checklist.rst:8 msgid "If you want to contribute a module to an existing collection, you must meet the community's objective and subjective requirements. Please read the details below, and also review our :ref:`tips for module development `." msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ç›®çš„ã®è¦ä»¶ã¨ä¸»ä½“çš„ãªè¦ä»¶ã‚’満ãŸã™å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã®è©³ç´°ã‚’読ã¿ã€ã€Œ:ref:`モジュール開発ã®ãƒ’ント `ã€ã‚‚確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:10 msgid "Modules accepted into certain collections are included in every Ansible release on PyPI. However, contributing to one of these collections is not the only way to distribute a module - you can :ref:`create your own collection `, embed modules in roles on Galaxy or simply share copies of your module code for :ref:`local use `." msgstr "特定ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§è¨±å¯ã•れるモジュールã¯ã€PyPI ã®ã™ã¹ã¦ã® Ansible リリースã«å«ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€ã“れらã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã„ãšã‚Œã‹ã«è²¢çŒ®ã™ã‚‹ã“ã¨ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é…布ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã§ã¯ã‚りã¾ã›ã‚“。:ref:`独自ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½œæˆ ` ã¯ã€Galaxy ã®ãƒ­ãƒ¼ãƒ«ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ã‚³ãƒ”ーを埋ã‚込んã ã‚Šã€:ref:`ローカルã§ã®ä½¿ç”¨ ` 用ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ã‚³ãƒ”ーを共有ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:13 msgid "Contributing modules: objective requirements" msgstr "モジュールã®è²¢çŒ®: 目的è¦ä»¶" #: ../../rst/dev_guide/developing_modules_checklist.rst:15 msgid "To contribute a module to most Ansible collections, you must:" msgstr "モジュールをã»ã¨ã‚“ã©ã® Ansible ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æä¾›ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:17 msgid "write your module in either Python or Powershell for Windows" msgstr "Windows 用㮠Python ã¾ãŸã¯ Powershell ã®ã„ãšã‚Œã‹ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’書ãè¾¼ã¿ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:18 msgid "use the ``AnsibleModule`` common code" msgstr "``AnsibleModule`` 共通コードを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:19 msgid "support Python 2.6 and Python 3.5 - if your module cannot support Python 2.6, explain the required minimum Python version and rationale in the requirements section in ``DOCUMENTATION``" msgstr "Python 2.6 ãŠã‚ˆã³ Python 3.5 をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚モジュール㌠Python 2.6 をサãƒãƒ¼ãƒˆã§ããªã„å ´åˆã¯ã€``DOCUMENTATION`` ã®è¦ä»¶ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã€æœ€ä½Žé™å¿…è¦ãª Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨æ ¹æ‹ ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:20 msgid "use proper :ref:`Python 3 syntax `" msgstr "é©åˆ‡ãª :ref:`Python 3 æ§‹æ–‡ ` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:21 msgid "follow `PEP 8 `_ Python style conventions - see :ref:`testing_pep8` for more information" msgstr "`PEP 8 `_ Python スタイルã®è¦å‰‡ã«å¾“ã„ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`testing_pep8`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:22 msgid "license your module under the GPL license (GPLv3 or later)" msgstr "GPL ライセンス (GPLv3 以é™) ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’付与ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:23 msgid "understand the :ref:`license agreement `, which applies to all contributions" msgstr "ã™ã¹ã¦ã®è²¢çŒ®ã«é©ç”¨ã•れる :ref:`ãƒ©ã‚¤ã‚»ãƒ³ã‚¹åˆæ„ ` ã‚’ç†è§£ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:24 msgid "conform to Ansible's :ref:`formatting and documentation ` standards" msgstr "Ansible ã® :ref:`フォーマットãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ ` ã®æ¨™æº–è¦æ ¼ã«æº–æ‹ ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:25 msgid "include comprehensive :ref:`tests ` for your module" msgstr "モジュールã«åŒ…括的㪠:ref:`テスト ` ã‚’å«ã‚ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:26 msgid "minimize module dependencies" msgstr "モジュールä¾å­˜é–¢ä¿‚を最å°é™ã«æŠ‘ãˆã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:27 msgid "support :ref:`check_mode ` if possible" msgstr "å¯èƒ½ãªå ´åˆã¯ :ref:`check_mode ` をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:28 msgid "ensure your code is readable" msgstr "コードãŒèª­ã¿å–りå¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:29 msgid "if a module is named ``_facts``, it should be because its main purpose is returning ``ansible_facts``. Do not name modules that do not do this with ``_facts``. Only use ``ansible_facts`` for information that is specific to the host machine, for example network interfaces and their configuration, which operating system and which programs are installed." msgstr "モジュールã®åå‰ãŒ ``_facts`` ãªã®ã¯ã€``ansible_facts`` ã‚’è¿”ã™ã“ã¨ãŒä¸»ãªç›®çš„ã ã‹ã‚‰ã§ã™ã€‚ã“れã¯ã€``_facts`` ã§ã“れを行ã‚ãªã„モジュールã«åå‰ã‚’付ã‘ãªã„ã§ãã ã•ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースやãã®è¨­å®šã‚„ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚„インストールã•れã¦ã„るプログラムãªã©ã€ãƒ›ã‚¹ãƒˆãƒžã‚·ãƒ³ã«å›ºæœ‰ã®æƒ…å ±ã«ã¯ ``ansible_facts`` ã®ã¿ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:30 msgid "Modules that query/return general information (and not ``ansible_facts``) should be named ``_info``. General information is non-host specific information, for example information on online/cloud services (you can access different accounts for the same online service from the same host), or information on VMs and containers accessible from the machine." msgstr "一般情報をクエリー/è¿”é€ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ (``ansible_facts`` ã§ã¯ãªã) ``_info`` ã¨ã„ã†åå‰ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一般情報ã¨ã¯ã€ãƒ›ã‚¹ãƒˆå›ºæœ‰ã§ã¯ãªã„情報ã€ãŸã¨ãˆã°ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³/クラウドサービスã«é–¢ã™ã‚‹æƒ…å ± (åŒã˜ãƒ›ã‚¹ãƒˆã‹ã‚‰åŒã˜ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã®ç•°ãªã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™)ã€ã¾ãŸã¯ã€ãƒžã‚·ãƒ³ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªä»®æƒ³ãƒžã‚·ãƒ³ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«é–¢ã™ã‚‹æƒ…å ±ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_checklist.rst:32 msgid "Additional requirements may apply for certain collections. Review the individual collection repositories for more information." msgstr "追加ã®è¦ä»¶ã¯ã€ç‰¹å®šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«é©ç”¨ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚詳細ã¯ã€å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:34 msgid "Please make sure your module meets these requirements before you submit your PR/proposal. If you have questions, reach out via the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) or the `Ansible development mailing list `_." msgstr "PR/ææ¡ˆã‚’é€ä¿¡ã™ã‚‹å‰ã«ã€ãŠä½¿ã„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã“れらã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã”質å•ãŒã‚ã‚‹å ´åˆã¯ã€``#ansible-devel``ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.imã§Matrixを使用ã€ã‚‚ã—ãã¯`irc.libera.chat `ã§IRCを使用)ã¾ãŸã¯ `Ansible development mailing list ` ã¾ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:37 msgid "Contributing to Ansible: subjective requirements" msgstr "Ansible ã¸ã®è²¢çŒ®: 主観的ãªè¦ä»¶" #: ../../rst/dev_guide/developing_modules_checklist.rst:39 msgid "If your module meets these objective requirements, collection maintainers will review your code to see if they think it's clear, concise, secure, and maintainable. They will consider whether your module provides a good user experience, helpful error messages, reasonable defaults, and more. This process is subjective, with no exact standards for acceptance. For the best chance of getting your module accepted, follow our :ref:`tips for module development `." msgstr "モジュールãŒã“れらã®ç›®çš„ã®è¦ä»¶ã‚’満ãŸã™å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒã€æ˜Žç¢ºã€ç°¡æ½”ã€å®‰å…¨ã§ã‚りã€ç¶­æŒãŒå¯èƒ½ã§ã‚ã‚‹ã¨è€ƒãˆã‚‹ã‚³ãƒ¼ãƒ‰ã‚’確èªã—ã¾ã™ã€‚モジュールãŒå„ªã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã—ã€æœ‰ç”¨ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€æœ‰ç›Šãªãƒ‡ãƒ•ォルトãªã©ã‚’æä¾›ã™ã‚‹ã‹ã©ã†ã‹ã‚’考慮ã—ã¾ã™ã€‚ã“ã®ãƒ—ロセスã¯ä¸»è¦³çš„ã§ã€æ­£ç¢ºãªæ¨™æº–ã¯ã‚りã¾ã›ã‚“。モジュールãŒå—ã‘入れられるå¯èƒ½æ€§ã‚’最大é™ã«é«˜ã‚ã‚‹ã«ã¯ã€ã€Œ:ref:`モジュール開発ã®ãƒ’ント `ã€ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_checklist.rst:42 msgid "Other checklists" msgstr "ãã®ä»–ã®ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_checklist.rst:44 msgid ":ref:`Tips for module development `." msgstr ":ref:`モジュール開発ã®ãƒ’ント `" #: ../../rst/dev_guide/developing_modules_checklist.rst:45 msgid ":ref:`Amazon development checklist `." msgstr ":ref:`Amazon 開発ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ `" #: ../../rst/dev_guide/developing_modules_checklist.rst:46 msgid ":ref:`Windows development checklist `." msgstr ":ref:`Windows 開発ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ `" #: ../../rst/dev_guide/developing_modules_documenting.rst:6 msgid "Module format and documentation" msgstr "モジュールã®å½¢å¼ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/dev_guide/developing_modules_documenting.rst:8 msgid "If you want to contribute your module to most Ansible collections, you must write your module in Python and follow the standard format described below. (Unless you're writing a Windows module, in which case the :ref:`Windows guidelines ` apply.) In addition to following this format, you should review our :ref:`submission checklist `, :ref:`programming tips `, and :ref:`strategy for maintaining Python 2 and Python 3 compatibility `, as well as information about :ref:`testing ` before you open a pull request." msgstr "モジュールをã»ã¨ã‚“ã©ã® Ansible コレクションã«è²¢çŒ®ã™ã‚‹å ´åˆã¯ã€Python ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã¦ã€ãã®æ¨™æº–å½¢å¼ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚(Windows モジュールを作æˆã—ãŸã“ã¨ãŒãªã„å ´åˆã€‚ã“ã®å ´åˆã¯ã€:ref:`Windows ガイドライン ` ãŒé©ç”¨ã•れã¾ã™)。ã“ã®å½¢å¼ã«å¾“ã†ã“ã¨ã«åŠ ãˆã€ãƒ—ãƒ«è¦æ±‚を作æˆã™ã‚‹å‰ã«ã€:ref:`æå‡ºã®ãƒã‚§ãƒƒã‚¯ãƒªã‚¹ãƒˆ `ã€:ref:`プログラムã®ãƒ’ント `ã€:ref:`Python 2 ãŠã‚ˆã³ Python 3 äº’æ›æ€§ã®ç¶­æŒã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ ` ã¨ã€:ref:`テスト ` ã«é–¢ã™ã‚‹æƒ…報をãŠèª­ã¿ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:10 msgid "Every Ansible module written in Python must begin with seven standard sections in a particular order, followed by the code. The sections in order are:" msgstr "Python ã§æ›¸ã‹ã‚ŒãŸã™ã¹ã¦ã® Ansible モジュールã¯ã€ç‰¹å®šã®é †åºã§ 7 ã¤ã®æ¨™æº–セクションã‹ã‚‰å§‹ã¾ã‚Šã€ãã®å¾Œã«ã‚³ãƒ¼ãƒ‰ãŒç¶šãã¾ã™ã€‚セクションã®é †ç•ªã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:16 msgid "Why don't the imports go first?" msgstr "最åˆã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒè¡Œã‚れãªã„ã®ã¯ãªãœã§ã™ã‹ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:18 msgid "Keen Python programmers may notice that contrary to PEP 8's advice we don't put ``imports`` at the top of the file. This is because the ``DOCUMENTATION`` through ``RETURN`` sections are not used by the module code itself; they are essentially extra docstrings for the file. The imports are placed after these special variables for the same reason as PEP 8 puts the imports after the introductory comments and docstrings. This keeps the active parts of the code together and the pieces which are purely informational apart. The decision to exclude E402 is based on readability (which is what PEP 8 is about). Documentation strings in a module are much more similar to module level docstrings, than code, and are never utilized by the module itself. Placing the imports below this documentation and closer to the code, consolidates and groups all related code in a congruent manner to improve readability, debugging and understanding." msgstr "熱心㪠Python プログラマーã¯ã€PEP 8 ã®ã‚¢ãƒ‰ãƒã‚¤ã‚¹ã«åã—ã¦ã€ãƒ•ァイルã®å†’é ­ã« ``imports`` ã‚’ç½®ã„ã¦ã„ãªã„ã“ã¨ã«æ°—ã¥ãã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã€``RETURN`` ã¾ã§ã® ``DOCUMENTATION`` セクションã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰è‡ªä½“ã§ä½¿ç”¨ã•れã¦ãŠã‚‰ãšã€åŸºæœ¬çš„ã«ãƒ•ァイルã«è¿½åŠ ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列を使用ã™ã‚‹ãŸã‚ã§ã™ã€‚インãƒãƒ¼ãƒˆã¯ã€PEP 8 ã¨åŒã˜ç†ç”±ã§ã“れらã®ç‰¹åˆ¥ãªå¤‰æ•°ã®å¾Œã«ç½®ã‹ã‚Œã€ç´¹ä»‹ã®ã‚³ãƒ¡ãƒ³ãƒˆã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列ã®å¾Œã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ã®æ´»å‹•çš„ãªéƒ¨åˆ†ãŒä¸€ç·’ã«ãªã‚Šã€ç´”ç²‹ã«æƒ…報をæä¾›ã™ã‚‹éƒ¨åˆ†ãŒåˆ†é›¢ã•れã¾ã™ã€‚E402 を除外ã™ã‚‹æ„æ€æ±ºå®šã¯ (PEP 8 ã®ç›®çš„ã§ã‚ã‚‹) å¯èª­æ€§ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚モジュール内ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列ã¯ã€ã‚³ãƒ¼ãƒ‰ã‚ˆã‚Šã‚‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¬ãƒ™ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列ã«ã‚ˆãä¼¼ã¦ãŠã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«è‡ªä½“ãŒåˆ©ç”¨ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。インãƒãƒ¼ãƒˆã‚’ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ä¸‹ã®ã€ã‚ˆã‚Šã‚³ãƒ¼ãƒ‰ã«è¿‘ã„ã¨ã“ã‚ã«ç½®ãã“ã¨ã§ã€é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ã‚³ãƒ¼ãƒ‰ã‚’çµ±åˆã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—化ã—ã€å¯èª­æ€§ã€ãƒ‡ãƒãƒƒã‚°ã€ç†è§£ã‚’å‘上ã•ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:20 msgid "**Copy old modules with care!**" msgstr "**å¤ã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ³¨æ„ã—ã¦ã‚³ãƒ”ーã—ã¦ãã ã•ã„。**" #: ../../rst/dev_guide/developing_modules_documenting.rst:22 msgid "Some older Ansible modules have ``imports`` at the bottom of the file, ``Copyright`` notices with the full GPL prefix, and/or ``DOCUMENTATION`` fields in the wrong order. These are legacy files that need updating - do not copy them into new modules. Over time we are updating and correcting older modules. Please follow the guidelines on this page!" msgstr "一部ã®å¤ã„ Ansible モジュールã§ã¯ã€ãƒ•ァイルã®ä¸‹éƒ¨ã« ``imports`` ãŒã‚ã‚‹ãŸã‚ã€``Copyright`` ã¯å®Œå…¨ãª GPL プレフィックスã€ã¾ãŸã¯ ``DOCUMENTATION`` フィールドを間é•ã£ãŸé †åºã§æŒã¤ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“ã‚Œã‚‰ã¯æ›´æ–°ãŒå¿…è¦ãªãƒ¬ã‚¬ã‚·ãƒ¼ãƒ•ァイルã§ã™ã€‚æ–°ã—ã„モジュールã«ã‚³ãƒ”ーã—ãªã„ã§ãã ã•ã„。時間ã®çµŒéŽã¨ã¨ã‚‚ã«ã€å¤ã„モジュールを更新ãŠã‚ˆã³ä¿®æ­£ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã†ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:27 msgid "Python shebang & UTF-8 coding" msgstr "Python ã‚·ãƒãƒ³ãŠã‚ˆã³ UTF-8 コーディング" #: ../../rst/dev_guide/developing_modules_documenting.rst:29 msgid "Begin your Ansible module with ``#!/usr/bin/python`` - this \"shebang\" allows ``ansible_python_interpreter`` to work. Follow the shebang immediately with ``# -*- coding: utf-8 -*-`` to clarify that the file is UTF-8 encoded." msgstr "``#!/usr/bin/python`` ã§ Ansible モジュールを開始ã—ã¾ã™ (ã“ã®ã€Œã‚·ãƒãƒ³ã€ã§ã¯ ``ansible_python_interpreter`` ãŒæ©Ÿèƒ½ã—ã¾ã™)。ファイル㌠UTF-8 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã‚‹ã“ã¨ã‚’明確ã«ã™ã‚‹ãŸã‚ã«ã€ã‚·ãƒãƒ³ã®ç›´å¾Œã« ``# -*- coding: utf-8 -*-`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:34 msgid "Copyright and license" msgstr "著作権ãŠã‚ˆã³ãƒ©ã‚¤ã‚»ãƒ³ã‚¹" #: ../../rst/dev_guide/developing_modules_documenting.rst:36 msgid "After the shebang and UTF-8 coding, add a `copyright line `_ with the original copyright holder and a license declaration. The license declaration should be ONLY one line, not the full GPL prefix.:" msgstr "ã‚·ãƒãƒ³ãŠã‚ˆã³ UTF-8 コーディングã®å¾Œã«ã€å…ƒã®è‘—作権所有者ãŠã‚ˆã³ãƒ©ã‚¤ã‚»ãƒ³ã‚¹å®£è¨€ã‚’å«ã‚€ `著作権行 `_ を追加ã—ã¾ã™ã€‚ライセンス宣言ã¯ã€å®Œå…¨ãª GPL プレフィックスã§ã¯ãªãã€1 行ã®ã¿ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:46 msgid "Major additions to the module (for instance, rewrites) may add additional copyright lines. Any legal review will include the source control history, so an exhaustive copyright header is not necessary. Please do not edit the existing copyright year. This simplifies project administration and is unlikely to cause any interesting legal issues. When adding a second copyright line for a significant feature or rewrite, add the newer line above the older one:" msgstr "モジュールã¸ã®ä¸»è¦ãªè¿½åŠ  (ãŸã¨ãˆã°ã€æ›¸ãæ›ãˆ) ã«ã‚ˆã‚Šã€è‘—作権行ãŒè¿½åŠ ã•れる場åˆãŒã‚りã¾ã™ã€‚法的ãªå¯©æŸ»ã«ã¯ã‚½ãƒ¼ã‚¹ç®¡ç†å±¥æ­´ãŒå«ã¾ã‚Œã‚‹ãŸã‚ã€ç¶²ç¾…çš„ãªè‘—作権ヘッダーã¯å¿…è¦ã‚りã¾ã›ã‚“。既存ã®è‘—作権年ã¯ç·¨é›†ã—ãªã„ã§ãã ã•ã„。ã“れã¯ã€ãƒ—ロジェクトã®ç®¡ç†ã‚’å˜ç´”化ã™ã‚‹ã‚‚ã®ã§ã‚りã€èˆˆå‘³æ·±ã„法的å•題を引ãèµ·ã“ã™å¯èƒ½æ€§ã¯ã»ã¨ã‚“ã©ã‚りã¾ã›ã‚“。é‡è¦ãªæ©Ÿèƒ½ã‚„æ›¸ãæ›ãˆã®ãŸã‚ã« 2 ã¤ç›®ã®è‘—作権行を追加ã™ã‚‹å ´åˆã¯ã€å¤ã„行ã®ä¸Šã«æ–°ã—ã„行を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:62 msgid "ANSIBLE_METADATA block" msgstr "ANSIBLE_METADATA ブロック" #: ../../rst/dev_guide/developing_modules_documenting.rst:64 msgid "Since we moved to collections we have deprecated the METADATA functionality, it is no longer required for modules, but it will not break anything if present." msgstr "コレクションã«ç§»è¡Œã—ã¦ã‚‚ METADATA 機能ã¯éžæŽ¨å¥¨ã«ãªã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯å¿…è¦ãªããªã‚Šã¾ã—ãŸãŒã€å­˜åœ¨ã—ã¦ã‚‚何も破æã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_documenting.rst:70 msgid "DOCUMENTATION block" msgstr "DOCUMENTATION ブロック" #: ../../rst/dev_guide/developing_modules_documenting.rst:72 msgid "After the shebang, the UTF-8 coding, the copyright line, and the license section comes the ``DOCUMENTATION`` block. Ansible's online module documentation is generated from the ``DOCUMENTATION`` blocks in each module's source code. The ``DOCUMENTATION`` block must be valid YAML. You may find it easier to start writing your ``DOCUMENTATION`` string in an :ref:`editor with YAML syntax highlighting ` before you include it in your Python file. You can start by copying our `example documentation string `_ into your module file and modifying it. If you run into syntax issues in your YAML, you can validate it on the `YAML Lint `_ website." msgstr "shebangã€UTF-8 コーディングã€è‘—作権行ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®å¾Œã«ã¯ã€``DOCUMENTATION`` ブロックãŒã‚りã¾ã™ã€‚Ansible ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€å„モジュールã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰å†…ã® ``DOCUMENTATION`` ブロックã‹ã‚‰ç”Ÿæˆã•れã¾ã™ã€‚``DOCUMENTATION`` ãƒ–ãƒ­ãƒƒã‚¯ã¯æœ‰åŠ¹ãª YAML ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。Python ファイルã«å«ã‚ã‚‹å‰ã«ã€``DOCUMENTATION`` ã®æ–‡å­—列を :ref:`YAML æ§‹æ–‡ã®å¼·èª¿è¡¨ç¤ºã‚’使用ã—ãŸã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ ` ã«æ›¸ãå§‹ã‚ãŸæ–¹ãŒç°¡å˜ã ã¨æ€ã†ã‹ã‚‚ã—れã¾ã›ã‚“。æä¾›ã—ã¦ã„ã‚‹ `サンプルã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ–‡å­—列 `_ を自身ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã«ã‚³ãƒ”ーã—ã¦ã€ãれを修正ã™ã‚‹ã“ã¨ã‹ã‚‰å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚YAML ã®æ§‹æ–‡ã«å•題ãŒã‚ã‚‹å ´åˆã¯ã€`YAML Lint `_ ã® Web ã‚µã‚¤ãƒˆã§æ¤œè¨¼ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:80 msgid "Module documentation should briefly and accurately define what each module and option does, and how it works with others in the underlying system. Documentation should be written for broad audience--readable both by experts and non-experts." msgstr "モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã€å„モジュールã¨ã‚ªãƒ—ションã®å‹•作ã«ã¤ã„ã¦ç°¡å˜ã‹ã¤æ­£ç¢ºã«å®šç¾©ã—ã€åŸºç¤Žã¨ãªã‚‹ã‚·ã‚¹ãƒ†ãƒ ã§ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã©ã®ã‚ˆã†ã«é€£æºã™ã‚‹ã‹ã‚’説明ã—ã¾ã™ã€‚ドキュメントã¯ã€å°‚門家ã¨éžå°‚門家ã®ä¸¡æ–¹ãŒèª­ã‚€ã“ã¨ãŒã§ãるよã†ã«ã€å¹…広ã„読者ã«å‘ã‘ã¦ä½œæˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:75 msgid "Descriptions should always start with a capital letter and end with a full stop. Consistency always helps." msgstr "説明ã¯å¸¸ã«å¤§æ–‡å­—ã§å§‹ã‚ã€å®Œå…¨ã«çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一貫性ã¯å¸¸ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:76 msgid "Verify that arguments in doc and module spec dict are identical." msgstr "ドキュメントã®å¼•æ•°ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»•様ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒåŒã˜ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:77 msgid "For password / secret arguments ``no_log=True`` should be set." msgstr "パスワード/シークレット引数 ``no_log=True`` を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:78 msgid "For arguments that seem to contain sensitive information but **do not** contain secrets, such as \"password_length\", set ``no_log=False`` to disable the warning message." msgstr "機密情報ãŒå«ã¾ã‚Œã¦ã„るよã†ã«è¦‹ãˆã¦ã‚‚「password_lengthã€ãªã©ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒ **å«ã¾ã‚Œã¦ã„ãªã„** よã†ã«è¡¨ç¤ºã•れる引数ã«ã¯ã€``no_log=False`` を設定ã—ã¦è­¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無効ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:79 #: ../../rst/dev_guide/developing_modules_documenting.rst:147 msgid "If an option is only sometimes required, describe the conditions. For example, \"Required when I(state=present).\"" msgstr "オプションã®ã¿ãŒå¿…è¦ãªå ´åˆã¯ã€æ¡ä»¶ã‚’記述ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒRequired when I(state=present)ã€ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:80 msgid "If your module allows ``check_mode``, reflect this fact in the documentation." msgstr "モジュール㧠``check_mode`` ãŒè¨±å¯ã•れã¦ã„ã‚‹å ´åˆã¯ã€ã“れをドキュメントã«å映ã•ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:82 msgid "To create clear, concise, consistent, and useful documentation, follow the :ref:`style guide `." msgstr "明確ã‹ã¤ç°¡æ½”ã§ä¸€è²«æ€§ãŒã‚りã€ä¾¿åˆ©ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ :ref:`スタイルガイド ` ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:84 msgid "Each documentation field is described below. Before committing your module documentation, please test it at the command line and as HTML:" msgstr "å„ドキュメントフィールドã®èª¬æ˜Žã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’コミットã™ã‚‹å‰ã«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãŠã‚ˆã³ HTML ã§ãƒ†ã‚¹ãƒˆã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:86 msgid "As long as your module file is :ref:`available locally `, you can use ``ansible-doc -t module my_module_name`` to view your module documentation at the command line. Any parsing errors will be obvious - you can view details by adding ``-vvv`` to the command." msgstr "モジュールファイル㌠:ref:`ローカルã§åˆ©ç”¨å¯èƒ½ ` ãªå ´åˆã«é™ã‚Šã€``ansible-doc -t module my_module_name`` を使用ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã—ã¾ã™ã€‚構文解æžã‚¨ãƒ©ãƒ¼ã¯æ˜Žç¢ºã«ãªã‚Šã¾ã™ã€‚コマンド㫠``-vvv`` を追加ã™ã‚‹ã¨ã€è©³ç´°ã‚’表示ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:87 msgid "You should also :ref:`test the HTML output ` of your module documentation." msgstr "モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ãŠã‘ã‚‹ :ref:`HTML 出力ã®ãƒ†ã‚¹ãƒˆ ` ã‚‚å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:90 msgid "Documentation fields" msgstr "ドキュメントフィールド" #: ../../rst/dev_guide/developing_modules_documenting.rst:92 msgid "All fields in the ``DOCUMENTATION`` block are lower-case. All fields are required unless specified otherwise:" msgstr "``DOCUMENTATION`` ブロックã®ãƒ•ィールドã¯ã™ã¹ã¦å°æ–‡å­—ã«ãªã‚Šã¾ã™ã€‚ç‰¹ã«æŒ‡å®šãŒãªã„å ´åˆã¯ã€ã™ã¹ã¦ã®ãƒ•ィールドãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:96 msgid "The name of the module." msgstr "モジュールã®åå‰ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:97 msgid "Must be the same as the filename, without the ``.py`` extension." msgstr "ファイルåã¨åŒã˜ (``.py`` æ‹¡å¼µå­ãªã—) ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "short_description" msgstr "short_description" #: ../../rst/dev_guide/developing_modules_documenting.rst:101 msgid "A short description which is displayed on the :ref:`list_of_collections` page and ``ansible-doc -l``." msgstr ":ref:`list_of_collections` ページ㨠``ansible-doc -l`` ã«è¡¨ç¤ºã•れる簡å˜ãªèª¬æ˜Žã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:102 msgid "The ``short_description`` is displayed by ``ansible-doc -l`` without any category grouping, so it needs enough detail to explain the module's purpose without the context of the directory structure in which it lives." msgstr "``short_description`` ã¯ã€ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’グループ化ã›ãšã«ã€``ansible-doc -l`` ã«ã‚ˆã£ã¦è¡¨ç¤ºã•れã¾ã™ã€‚ãã®ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå­˜åœ¨ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã—ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ç›®çš„を説明ã™ã‚‹ã®ã«å分ãªè©³ç´°ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:104 msgid "Unlike ``description:``, ``short_description`` should not have a trailing period/full stop." msgstr "``description:`` ã¨ã¯ç•°ãªã‚Šã€``short_description`` ã®ãƒ”リオド (文末) ã¯è¨­å®šã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "description" msgstr "description" #: ../../rst/dev_guide/developing_modules_documenting.rst:108 msgid "A detailed description (generally two or more sentences)." msgstr "詳細ãªèª¬æ˜Ž (通常㯠2 文以上)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:109 msgid "Must be written in full sentences, in other words, with capital letters and periods/full stops." msgstr "文章ã®å½¢ã€ã¤ã¾ã‚Šå†’é ­ã®å¤§æ–‡å­—やピリオド (文末) ãªã©ã‚’使用ã—ã¦è¨˜è¿°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:110 msgid "Shouldn't mention the module name." msgstr "モジュールåã«ã¤ã„ã¦è¨€åŠã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_documenting.rst:111 msgid "Make use of multiple entries rather than using one long paragraph." msgstr "1 ã¤ã®é•·ã„段è½ã«ã›ãšã€è¤‡æ•°ã®æ–‡ç« ã«åˆ†ã‘ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:112 msgid "Don't quote complete values unless it is required by YAML." msgstr "YAML ã§å¿…è¦ãªå ´åˆã‚’除ãã€å®Œå…¨ãªå€¤ã‚’引用符ã§å›²ã¾ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "version_added" msgstr "version_added" #: ../../rst/dev_guide/developing_modules_documenting.rst:116 msgid "The version of Ansible when the module was added." msgstr "モジュールãŒè¿½åŠ ã•れ㟠Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:117 msgid "This is a string, and not a float, for example, ``version_added: '2.1'``." msgstr "ã“ã‚Œã¯æµ®å‹•å°æ•°ç‚¹ã§ã¯ãªã文字列ã§ã™ (例: ``version_added: '2.1'``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:118 msgid "In collections, this must be the collection version the module was added to, not the Ansible version. For example, ``version_added: 1.0.0``." msgstr "コレクションã§ã¯ã€ã“れ㯠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ãªãã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¿½åŠ ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ (例: ``version_added: 1.0.0``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "author" msgstr "author" #: ../../rst/dev_guide/developing_modules_documenting.rst:122 msgid "Name of the module author in the form ``First Last (@GitHubID)``." msgstr "``First Last (@GitHubID)`` å½¢å¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä½œæˆè€…ã®åå‰ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:123 msgid "Use a multi-line list if there is more than one author." msgstr "作æˆè€…ãŒè¤‡æ•°ã«ãªã‚‹å ´åˆã¯ã€è¤‡æ•°è¡Œã®ãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:124 msgid "Don't use quotes as it should not be required by YAML." msgstr "YAML ã§ã¯å¿…è¦ãªã„ãŸã‚ã€å¼•用符ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "deprecated" msgstr "deprecated" #: ../../rst/dev_guide/developing_modules_documenting.rst:128 msgid "Marks modules that will be removed in future releases. See also :ref:`module_lifecycle`." msgstr "å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れるモジュールã«ãƒžãƒ¼ã‚¯ã‚’付ã‘ã—ã¾ã™ã€‚「:ref:`module_lifecycle`ã€ã‚‚ä½µã›ã¦å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "options" msgstr "options" #: ../../rst/dev_guide/developing_modules_documenting.rst:132 msgid "Options are often called `parameters` or `arguments`. Because the documentation field is called `options`, we will use that term." msgstr "オプションã¯ã€å¤šãã®å ´åˆã€`パラメーター` ã¾ãŸã¯ `引数` ã¨å‘¼ã°ã‚Œã¾ã™ã€‚ドキュメントフィールド㯠`オプション` を呼ã°ã‚Œã‚‹ãŸã‚ã€ã“ã“ã§ã¯ãã®ç”¨èªžã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:133 msgid "If the module has no options (for example, it's a ``_facts`` module), all you need is one line: ``options: {}``." msgstr "モジュールã«ã‚ªãƒ—ションãŒãªã„ (例: ``_facts`` モジュール) å ´åˆã€å¿…è¦ãªã®ã¯ 1 行 (``options: {}``) ã ã‘ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:134 msgid "If your module has options (in other words, accepts arguments), each option should be documented thoroughly. For each module option, include:" msgstr "モジュールã«ã‚ªãƒ—ションãŒã‚ã‚‹ (ã¤ã¾ã‚Šå¼•æ•°ã‚’å—ã‘入れる) å ´åˆã€å„オプションã¯è©³ç´°ã«æ–‡æ›¸åŒ–ã•れる必è¦ãŒã‚りã¾ã™ã€‚å„モジュールオプションã«ã¤ã„ã¦ã€ä»¥ä¸‹ã‚’記載ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "option-name" msgstr "option-name" #: ../../rst/dev_guide/developing_modules_documenting.rst:138 msgid "Declarative operation (not CRUD), to focus on the final state, for example `online:`, rather than `is_online:`." msgstr "(CRUD ã§ã¯ãªã) 宣言æ“作ã¯ã€ã€Œ`is_online:`ã€ã§ã¯ãªãã€ã€Œ`online:`ã€ãªã©ã®æœ€çµ‚状態ã«ç„¦ç‚¹ã‚’ã‚ã¦ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:139 msgid "The name of the option should be consistent with the rest of the module, as well as other modules in the same category." msgstr "オプションã®åå‰ã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ®‹ã‚Šã®éƒ¨åˆ†ã€ãŠã‚ˆã³åŒã˜ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ä¸€è²«æ€§ã‚’æŒãŸã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:140 msgid "When in doubt, look for other modules to find option names that are used for the same purpose, we like to offer consistency to our users." msgstr "䏿˜Žãªå ´åˆã¯ã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’探ã—ã¦ã€åŒã˜ç›®çš„ã§ä½¿ç”¨ã•れã¦ã„るオプションåを見ã¤ã‘ã¦ãã ã•ã„。ユーザーã«ä¸€è²«æ€§ã‚’æä¾›ã§ãるよã†ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:144 msgid "Detailed explanation of what this option does. It should be written in full sentences." msgstr "ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ©Ÿèƒ½ã®è©³ç´°ãªèª¬æ˜Žã€‚ã“れã¯ã€å®Œå…¨ãªæ–‡ç« ã§è¨˜è¿°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:145 msgid "The first entry is a description of the option itself; subsequent entries detail its use, dependencies, or format of possible values." msgstr "最åˆã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ã€ã‚ªãƒ—ションãã®ã‚‚ã®ã®èª¬æ˜Žã§ã™ã€‚後続ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ã€ãã®ä½¿ç”¨ã€ä¾å­˜é–¢ä¿‚ã€ã¾ãŸã¯ä½¿ç”¨ã§ãる値ã®å½¢å¼ã®è©³ç´°ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:146 msgid "Should not list the possible values (that's what ``choices:`` is for, though it should explain what the values do if they aren't obvious)." msgstr "å¯èƒ½ãªå€¤ã‚’列挙ã—ãªã„ã§ãã ã•ã„ (``choices:`` ã¯ãã®ãŸã‚ã«ã‚りã¾ã™ã€‚å€¤ãŒæ˜Žã‚‰ã‹ã§ãªã„å ´åˆã¯ã€ãã®å€¤ãŒä½•を示ã™ã®ã‹ã‚’説明ã—ã¦ãã ã•ã„)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:148 msgid "Mutually exclusive options must be documented as the final sentence on each of the options." msgstr "ç›¸äº’ã«æŽ’ä»–çš„ãªã‚ªãƒ—ションã¯ã€å„ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ€å¾Œã®æ–‡ã§æ–‡æ›¸åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:152 msgid "Only needed if ``true``." msgstr "``true`` ã®å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:153 msgid "If missing, we assume the option is not required." msgstr "見ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã€ã‚ªãƒ—ションãŒä¸è¦ã§ã‚ã‚‹ã¨ä»®å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "default" msgstr "default" #: ../../rst/dev_guide/developing_modules_documenting.rst:157 msgid "If ``required`` is false/missing, ``default`` may be specified (assumed 'null' if missing)." msgstr "``required`` ㌠false ã‚‚ã—ãã¯æŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€``default`` を指定ã§ãã¾ã™ (見ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã€Œnullã€ã¨è¦‹ãªã•れã¾ã™)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:158 msgid "Ensure that the default value in the docs matches the default value in the code." msgstr "ドキュメントã®ãƒ‡ãƒ•ォルト値ãŒã€ã‚³ãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ォルト値ã¨ä¸€è‡´ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:159 msgid "The default field must not be listed as part of the description, unless it requires additional information or conditions." msgstr "è¿½åŠ ã®æƒ…報やæ¡ä»¶ãŒå¿…è¦ãªå ´åˆã‚’除ãã€ãƒ‡ãƒ•ォルトã®ãƒ•ィールドã¯ã€èª¬æ˜Žã®ä¸€éƒ¨ã¨ã—ã¦è¨˜è¼‰ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:160 msgid "If the option is a boolean value, you can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Choose the one that reads better in the context of the option." msgstr "オプションãŒãƒ–ール値ã®å ´åˆã¯ã€Ansible ãŒèªè­˜ã™ã‚‹ä»»æ„ã®ãƒ–ール値 (true/falseã€yes/no ãªã©) を使用ã§ãã¾ã™ã€‚オプションã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§èª­ã¿å–りãŒé©åˆ‡ã§ã‚れã°ã“ã‚Œã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "choices" msgstr "choices" #: ../../rst/dev_guide/developing_modules_documenting.rst:165 msgid "List of option values." msgstr "オプション値ã®ãƒªã‚¹ãƒˆã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:166 msgid "Should be absent if empty." msgstr "空欄ã®å ´åˆã¯æŒ‡å®šãªã—ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "type" msgstr "type" #: ../../rst/dev_guide/developing_modules_documenting.rst:170 msgid "Specifies the data type that option accepts, must match the ``argspec``." msgstr "オプションã§ä½¿ç”¨ã§ãるデータ型を指定ã—ã¾ã™ã€‚``argspec`` ã¨ä¸€è‡´ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:171 msgid "If an argument is ``type='bool'``, this field should be set to ``type: bool`` and no ``choices`` should be specified." msgstr "引数㌠``type='bool'`` ã®å ´åˆã€ã“ã®ãƒ•ィールド㯠``type: bool`` ã«è¨­å®šã•れã¾ã™ã€‚``choices`` ã¯æŒ‡å®šã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:172 msgid "If an argument is ``type='list'``, ``elements`` should be specified." msgstr "引数㌠``type='list'`` ã®å ´åˆã¯ã€``elements`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "elements" msgstr "elements" #: ../../rst/dev_guide/developing_modules_documenting.rst:176 msgid "Specifies the data type for list elements in case ``type='list'``." msgstr "``type='list'`` ã®å ´åˆã«ã€ãƒªã‚¹ãƒˆè¦ç´ ã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "aliases" msgstr "aliases" #: ../../rst/dev_guide/developing_modules_documenting.rst:179 msgid "List of optional name aliases." msgstr "ä»»æ„ã®åå‰ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã®ãƒªã‚¹ãƒˆã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:180 msgid "Generally not needed." msgstr "一般的ã«ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_documenting.rst:184 msgid "Only needed if this option was extended after initial Ansible release, in other words, this is greater than the top level `version_added` field." msgstr "ã“ã®ã‚ªãƒ—ション㌠Ansible ã®åˆå›žãƒªãƒªãƒ¼ã‚¹å¾Œã«æ‹¡å¼µã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚ã¤ã¾ã‚Šã€ã“ã‚Œã¯æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã® `version_added` フィールドよりも大ãããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:185 msgid "This is a string, and not a float, for example, ``version_added: '2.3'``." msgstr "ã“ã‚Œã¯æµ®å‹•å°æ•°ç‚¹ã§ã¯ãªã文字列ã§ã™ (例: ``version_added: '2.3'``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:186 msgid "In collections, this must be the collection version the option was added to, not the Ansible version. For example, ``version_added: 1.0.0``." msgstr "コレクションã§ã¯ã€ã“れ㯠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ãªãã€ã‚ªãƒ—ションãŒè¿½åŠ ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ (例: ``version_added: 1.0.0``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "suboptions" msgstr "suboptions" #: ../../rst/dev_guide/developing_modules_documenting.rst:190 msgid "If this option takes a dict or list of dicts, you can define the structure here." msgstr "ã“ã®ã‚ªãƒ—ションãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒªã‚¹ãƒˆã‚’å–ã‚‹å ´åˆã¯ã€ã“ã“ã§æ§‹é€ ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:191 msgid "See :ref:`ansible_collections.azure.azcollection.azure_rm_securitygroup_module`, :ref:`ansible_collections.azure.azcollection.azure_rm_azurefirewall_module`, and :ref:`ansible_collections.openstack.cloud.baremetal_node_action_module` for examples." msgstr "例ã¯ã€ã€Œ:ref:`ansible_collections.azure.azcollection.azure_rm_securitygroup_module`ã€ã€ã€Œ:ref:`ansible_collections.azure.azcollection.azure_rm_azurefirewall_module`ã€ã€ãŠã‚ˆã³ã€Œ:ref:`ansible_collections.openstack.cloud.baremetal_node_action_module`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "requirements" msgstr "requirements" #: ../../rst/dev_guide/developing_modules_documenting.rst:195 msgid "List of requirements (if applicable)." msgstr "è¦ä»¶ã®ãƒªã‚¹ãƒˆ (該当ã™ã‚‹å ´åˆ)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:196 msgid "Include minimum versions." msgstr "最å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "seealso" msgstr "seealso" #: ../../rst/dev_guide/developing_modules_documenting.rst:200 msgid "A list of references to other modules, documentation or Internet resources" msgstr "ãã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã¾ãŸã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒªã‚½ãƒ¼ã‚¹ã¸ã®å‚ç…§ã®ä¸€è¦§ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:201 msgid "In Ansible 2.10 and later, references to modules must use the FQCN or ``ansible.builtin`` for modules in ``ansible-core``." msgstr "Ansible 2.10 以é™ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®å‚照㌠``ansible-core`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« FQCN ã¾ãŸã¯ ``ansible.builtin`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:202 msgid "A reference can be one of the following formats:" msgstr "å‚ç…§ã«ã¯ã€ä»¥ä¸‹ã®å½¢å¼ã®ã„ãšã‚Œã‹ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "notes" msgstr "notes" #: ../../rst/dev_guide/developing_modules_documenting.rst:227 msgid "Details of any important information that doesn't fit in one of the above sections." msgstr "上記ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã„ãšã‚Œã‹ã«è©²å½“ã—ãªã„é‡è¦ãªæƒ…å ±ã®è©³ç´°ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:228 msgid "For example, whether ``check_mode`` is or is not supported." msgstr "ãŸã¨ãˆã°ã€``check_mode`` ãŒã‚µãƒãƒ¼ãƒˆã•れるã‹ã©ã†ã‹ãªã©ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:232 msgid "Linking and other format macros within module documentation" msgstr "モジュールドキュメント内ã®ãƒªãƒ³ã‚¯ãŠã‚ˆã³ãã®ä»–ã®å½¢å¼ãƒžã‚¯ãƒ­" #: ../../rst/dev_guide/developing_modules_documenting.rst:234 msgid "You can link from your module documentation to other module docs, other resources on docs.ansible.com, and resources elsewhere on the internet with the help of some pre-defined macros. The correct formats for these macros are:" msgstr "モジュールドキュメントã‹ã‚‰ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€docs.ansible.com ã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã€ä¸€éƒ¨ã®äº‹å‰è¨­å®šãƒžã‚¯ãƒ­ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆä¸Šã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã«ãƒªãƒ³ã‚¯ã§ãã¾ã™ã€‚ã“れらã®ãƒžã‚¯ãƒ­ã®æ­£ã—ã„å½¢å¼ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:236 msgid "``L()`` for links with a heading. For example: ``See L(Ansible Automation Platform,https://www.ansible.com/products/automation-platform).`` As of Ansible 2.10, do not use ``L()`` for relative links between Ansible documentation and collection documentation." msgstr "``L()`` 見出ã—ã¸ã®ãƒªãƒ³ã‚¯ã€‚ãŸã¨ãˆã°ã€``See L(Ansible Automation Platform,https://www.ansible.com/products/automation-platform).`` ã¨ãªã‚Šã¾ã™ã€‚Ansible 2.10 以é™ã€Ansible ドキュメントã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ç›¸å¯¾ãƒªãƒ³ã‚¯ã«ã¯ ``L()`` を使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:237 msgid "``U()`` for URLs. For example: ``See U(https://www.ansible.com/products/automation-platform) for an overview.``" msgstr "URL ã®å ´åˆã¯ ``U()``。ãŸã¨ãˆã°ã€``See U(https://www.ansible.com/products/automation-platform) for an overview.`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:239 msgid "There are also some macros which do not create links but we use them to display certain types of content in a uniform way:" msgstr "リンクを作æˆã—ãªã„ã‚‚ã®ã®ã€ãã®ãƒžã‚¯ãƒ­ã‚’使用ã—ã¦ã€ç‰¹å®šã®ã‚¿ã‚¤ãƒ—ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を統一ã—ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:242 msgid "``I()`` for option names. For example: ``Required if I(state=present).`` This is italicized in the documentation." msgstr "オプションåã®å ´åˆã¯ ``I()``。ãŸã¨ãˆã° ``Required if I(state=present).`` ã§ã™ã€‚ã“れã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã‚¤ã‚¿ãƒªãƒƒã‚¯ä½“ã§ç¤ºã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:244 msgid "``C()`` for files, option values, and inline code. For example: ``If not set the environment variable C(ACME_PASSWORD) will be used.`` or ``Use C(var | foo.bar.my_filter) to transform C(var) into the required format.`` This displays with a mono-space font in the documentation." msgstr "ファイルã€ã‚ªãƒ—ション値ã€ãŠã‚ˆã³ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã‚³ãƒ¼ãƒ‰ã®å ´åˆã¯ ``C()`` (例 ``If not set the environment variable C(ACME_PASSWORD) will be used.`` ã¾ãŸã¯ ``Use C(var | foo.bar.my_filter) to transform C(var) into the required format.``)。ã“れã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ Monospace フォントã¨è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:245 msgid "``B()`` currently has no standardized usage. It is displayed in boldface in the documentation." msgstr "``B()`` ã¯ã€ç¾åœ¨ã€æ¨™æº–化ã•れãŸä½¿ç”¨ã¯ã‚りã¾ã›ã‚“。ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯å¤ªå­—ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:246 msgid "``HORIZONTALLINE`` is used sparingly as a separator in long descriptions. It becomes a horizontal rule (the ``
    `` html tag) in the documentation." msgstr "``HORIZONTALLINE`` ã¯ã€é•·ã„説明ã§ã¯ã€åŒºåˆ‡ã‚Šæ–‡å­—ã¨ã—ã¦æ…Žé‡ã«ä½¿ç”¨ã•れã¦ãŠã‚Šã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå†…ã®æ°´å¹³ãƒ«ãƒ¼ãƒ« (``
    `` html ã‚¿ã‚°) ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:250 msgid "For links between modules and documentation within a collection, you can use either of the options above. Use ``U()`` or ``L()`` with full URLs (not relative links)." msgstr "コレクション内ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆé–“ã®ãƒªãƒ³ã‚¯ã«ã¯ã€ä¸Šè¨˜ã®ã‚ªãƒ—ションã®ã„ãšã‚Œã‹ã‚’使用ã§ãã¾ã™ã€‚``U()`` ã¾ãŸã¯``L()`` をフル URL ã§ä½¿ç”¨ã—ã¦ãã ã•ã„(相対リンクã§ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:253 msgid "When a collection is not the right granularity, use ``C(..)``:" msgstr "コレクションãŒé©åˆ‡ãªç²’度ã§ã¯ãªã„å ´åˆã¯ã€``C(..)`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:255 msgid "``The C(win_*) modules (spread across several collections) allow you to manage various aspects of windows hosts.``" msgstr "``The C(win_*) modules (spread across several collections) allow you to manage various aspects of windows hosts.``" #: ../../rst/dev_guide/developing_modules_documenting.rst:259 msgid "Because it stands out better, use ``seealso`` for general references over the use of notes or adding links to the description." msgstr "``seealso`` ã®æ–¹ãŒç›®ç«‹ã¤ãŸã‚ã€ä¸€èˆ¬çš„ãªå‚ç…§ã«ã¯ãƒŽãƒ¼ãƒˆã®ä½¿ç”¨ã‚„説明ã¸ã®ãƒªãƒ³ã‚¯ã‚ˆã‚Šã‚‚ã€``seealso`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:264 msgid "Documentation fragments" msgstr "ドキュメントフラグメント" #: ../../rst/dev_guide/developing_modules_documenting.rst:266 msgid "If you are writing multiple related modules, they may share common documentation, such as authentication details, file mode settings, ``notes:`` or ``seealso:`` entries. Rather than duplicate that information in each module's ``DOCUMENTATION`` block, you can save it once as a doc_fragment plugin and use it in each module's documentation. In Ansible, shared documentation fragments are contained in a ``ModuleDocFragment`` class in `lib/ansible/plugins/doc_fragments/ `_ or the equivalent directory in a collection. To include a documentation fragment, add ``extends_documentation_fragment: FRAGMENT_NAME`` in your module documentation. Use the fully qualified collection name for the FRAGMENT_NAME (for example, ``kubernetes.core.k8s_auth_options``)." msgstr "複数ã®é–¢é€£ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’記述ã—ã¦ã„ã‚‹å ´åˆã¯ã€èªè¨¼ã®è©³ç´°ã‚„ファイルモードã®è¨­å®šã€``notes:`` ã‚„ ``seealso:`` ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãªã©ã€å…±é€šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’共有ã—ã¦ã„ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ãã®ã‚ˆã†ãªæƒ…報をå„モジュール㮠``DOCUMENTATION`` ブロックã«è¤‡è£½ã™ã‚‹ã®ã§ã¯ãªãã€doc_fragment プラグインã¨ã—ã¦ä¸€åº¦ä¿å­˜ã—ã€å„モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã§ã¯ã€å…±æœ‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã¯ã€`lib/ansible/plugins/doc_fragments/ `_ ã® ``ModuleDocFragment`` クラスã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åŒç­‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ドキュメントフラグメントをå«ã‚ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã« ``extends_documentation_fragment: FRAGMENT_NAME`` を追加ã—ã¾ã™ã€‚FRAGMENT_NAME ã«ã¯ã€å®Œå…¨ä¿®é£¾ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åを使用ã—ã¾ã™ (例: ``kubernetes.core.k8s_auth_options``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst:268 msgid "Modules should only use items from a doc fragment if the module will implement all of the interface documented there in a manner that behaves the same as the existing modules which import that fragment. The goal is that items imported from the doc fragment will behave identically when used in another module that imports the doc fragment." msgstr "モジュールãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’使用ã™ã‚‹ã®ã¯ã€ãã®ãƒ•ラグメントをインãƒãƒ¼ãƒˆã™ã‚‹æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¦ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–ã•れãŸã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをモジュールãŒå®Ÿè£…ã™ã‚‹å ´åˆã®ã¿ã§ã™ã€‚目標ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚¢ã‚¤ãƒ†ãƒ ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントをインãƒãƒ¼ãƒˆã™ã‚‹åˆ¥ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã•れãŸå ´åˆã¨åŒã˜ã‚ˆã†ã«å‹•作ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:270 msgid "By default, only the ``DOCUMENTATION`` property from a doc fragment is inserted into the module documentation. It is possible to define additional properties in the doc fragment in order to import only certain parts of a doc fragment or mix and match as appropriate. If a property is defined in both the doc fragment and the module, the module value overrides the doc fragment." msgstr "デフォルトã§ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメント㮠``DOCUMENTATION`` プロパティーãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«æŒ¿å…¥ã•れã¾ã™ã€‚ドキュメントフラグメントã®ç‰¹å®šã®éƒ¨åˆ†ã®ã¿ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã€ã¾ãŸã¯å¿…è¦ã«å¿œã˜ã¦çµ„ã¿åˆã‚ã›ã¦ä¸€è‡´ã•ã›ã‚‹ãŸã‚ã«ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã«è¿½åŠ ã®ãƒ—ロパティーを定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚プロパティーãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸¡æ–¹ã§å®šç¾©ã•れã¦ã„ã‚‹å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å€¤ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを上書ãã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:272 msgid "Here is an example doc fragment named ``example_fragment.py``:" msgstr "以下ã¯ã€``example_fragment.py`` ã¨ã„ã†åå‰ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:290 msgid "To insert the contents of ``OTHER`` in a module:" msgstr "``OTHER`` ã®å†…å®¹ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ¿å…¥ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:296 msgid "Or use both :" msgstr "ã¾ãŸã¯ã€ä»¥ä¸‹ã®ä¸¡æ–¹ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:309 msgid "Since Ansible 2.8, you can have user-supplied doc_fragments by using a ``doc_fragments`` directory adjacent to play or role, just like any other plugin." msgstr "Ansible 2.8 以é™ã€ãã®ä»–ã®ãƒ—ラグインã¨åŒæ§˜ã«ã€ãƒ—レイやロールã«éš£æŽ¥ã™ã‚‹ ``doc_fragments`` ディレクトリーを使用ã™ã‚‹ã“ã¨ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæä¾›ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを設定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:311 msgid "For example, all AWS modules should include:" msgstr "ãŸã¨ãˆã°ã€ã™ã¹ã¦ã® AWS モジュールã«ã¯ä»¥ä¸‹ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:319 msgid ":ref:`docfragments_collections` describes how to incorporate documentation fragments in a collection." msgstr "「:ref:`docfragments_collections`ã€ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ•ラグメントを組ã¿è¾¼ã‚€æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:324 msgid "EXAMPLES block" msgstr "EXAMPLES ブロック" #: ../../rst/dev_guide/developing_modules_documenting.rst:326 msgid "After the shebang, the UTF-8 coding, the copyright line, the license section, and the ``DOCUMENTATION`` block comes the ``EXAMPLES`` block. Here you show users how your module works with real-world examples in multi-line plain-text YAML format. The best examples are ready for the user to copy and paste into a playbook. Review and update your examples with every change to your module." msgstr "ã‚·ãƒãƒ³ã®å¾Œã€UTF-8 コーディングã€è‘—作権表示ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã€ãŠã‚ˆã³ ``DOCUMENTATION`` ブロックã®å¾Œã« ``EXAMPLES`` ブロックãŒç¶šãã¾ã™ã€‚ã“ã“ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå®Ÿéš›ã®ä¾‹ã§è¤‡æ•°è¡Œã®ãƒ—レーンテキスト YAML å½¢å¼ã§ã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’ユーザーã«ç¤ºã—ã¾ã™ã€‚最良ã®ä¾‹ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚³ãƒ”ーã—㦠Playbook ã«è²¼ã‚Šä»˜ã‘る準備ãŒã§ãã¦ã„ã¾ã™ã€‚モジュールã«å¤‰æ›´ã‚’加ãˆã‚‹ãŸã³ã«ã€ä¾‹ã‚’確èªã—ã¦æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:328 msgid "Per playbook best practices, each example should include a ``name:`` line::" msgstr "Playbook ã®ãƒ™ã‚¹ãƒˆãƒ—ラクティスã«åŸºã¥ãã€å„例ã«ã¯ ``name:`` 行ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:337 msgid "The ``name:`` line should be capitalized and not include a trailing dot." msgstr "``name:`` 行ã¯å¤§æ–‡å­—ã«ã—ã€æœ«å°¾ã®ãƒ‰ãƒƒãƒˆã¯å«ã‚ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_documenting.rst:339 msgid "Use a fully qualified collection name (FQCN) as a part of the module's name like in the example above. For modules in ``ansible-core``, use the ``ansible.builtin.`` identifier, for example ``ansible.builtin.debug``." msgstr "上記ã®ä¾‹ã®ã‚ˆã†ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã®ä¸€éƒ¨ã¨ã—ã¦å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) を使用ã—ã¾ã™ã€‚``ansible-core`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å ´åˆã¯ã€``ansible.builtin.`` è­˜åˆ¥å­ (ãŸã¨ãˆã° ``ansible.builtin.debug``) を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:341 msgid "If your examples use boolean options, use yes/no values. Since the documentation generates boolean values as yes/no, having the examples use these values as well makes the module documentation more consistent." msgstr "サンプルã§ãƒ–ール値オプションを使用ã™ã‚‹å ´åˆã¯ã€yes/no ã®å€¤ã‚’使用ã—ã¾ã™ã€‚ドキュメントã«ã‚ˆã‚Šãƒ–ール値㌠yes/no ã¨ã—ã¦ç”Ÿæˆã•れるãŸã‚ã€ã“ã®ã‚µãƒ³ãƒ—ルã§ã¯ã“れらã®å€¤ãŒä½¿ç”¨ã•れã¦ãŠã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ä¸€è²«æ€§ãŒä¿ãŸã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:343 msgid "If your module returns facts that are often needed, an example of how to use them can be helpful." msgstr "モジュールãŒå¿…è¦ãªãƒ•ァクトを返ã™ã¨ã€ãã®ä½¿ç”¨æ–¹æ³•ã®ä¾‹ãŒä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:348 msgid "RETURN block" msgstr "RETURN ブロック" #: ../../rst/dev_guide/developing_modules_documenting.rst:350 msgid "After the shebang, the UTF-8 coding, the copyright line, the license section, ``DOCUMENTATION`` and ``EXAMPLES`` blocks comes the ``RETURN`` block. This section documents the information the module returns for use by other modules." msgstr "ã‚·ãƒãƒ³ã€UTF-8コーディングã€è‘—作権表示ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã€``DOCUMENTATION`` ブロックãŠã‚ˆã³ ``EXAMPLES`` ブロックã®å¾Œã«ã€``RETURN`` ブロックãŒç¶šãã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«è¿”ã™æƒ…報を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:352 msgid "If your module doesn't return anything (apart from the standard returns), this section of your module should read: ``RETURN = r''' # '''`` Otherwise, for each value returned, provide the following fields. All fields are required unless specified otherwise." msgstr "モジュールãŒä½•ã‚‚è¿”ã•ãªã„å ´åˆã¯ (æ¨™æº–ã®æˆ»ã‚Šå€¤ã¨ã¯ç•°ãªã‚Š)ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ ``RETURN = r''' # '''`` を読ã¿å–ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€è¿”ã•れãŸå„値ã«ä»¥ä¸‹ã®ãƒ•ィールドを指定ã—ã¾ã™ã€‚ç‰¹ã«æŒ‡å®šãŒãªã„å ´åˆã¯ã™ã¹ã¦ã®ãƒ•ィールドãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "return name" msgstr "return name" #: ../../rst/dev_guide/developing_modules_documenting.rst:356 msgid "Name of the returned field." msgstr "è¿”ã•れるフィールドã®åå‰ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:359 msgid "Detailed description of what this value represents. Capitalized and with trailing dot." msgstr "ã“ã®å€¤ãŒè¡¨ã™å†…容ã®è©³ç´°ãªèª¬æ˜Žã€‚大文字ã§ã€æœ«å°¾ã®ãƒ‰ãƒƒãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "returned" msgstr "returned" #: ../../rst/dev_guide/developing_modules_documenting.rst:361 msgid "When this value is returned, such as ``always``, ``changed`` or ``success``. This is a string and can contain any human-readable content." msgstr "``always``ã€``changed``ã€``success`` ãªã©ã®ã“ã®å€¤ãŒè¿”ã•れるã¨ã€ã“ã‚Œã¯æ–‡å­—列ã¨ãªã‚Šã€äººé–“ãŒåˆ¤èª­ã§ãるコンテンツをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:363 msgid "Data type." msgstr "データ型。" #: ../../rst/dev_guide/developing_modules_documenting.rst:365 msgid "If ``type='list'``, specifies the data type of the list's elements." msgstr "``type='list'`` ã®å ´åˆã¯ã€ãƒªã‚¹ãƒˆã®è¦ç´ ã®ãƒ‡ãƒ¼ã‚¿ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "sample" msgstr "sample" #: ../../rst/dev_guide/developing_modules_documenting.rst:367 msgid "One or more examples." msgstr "1 ã¤ä»¥ä¸Šã®ä¾‹ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:369 msgid "Only needed if this return was extended after initial Ansible release, in other words, this is greater than the top level `version_added` field. This is a string, and not a float, for example, ``version_added: '2.3'``." msgstr "ã“れã¯ã€æœ€åˆã® Ansible リリースã®å¾Œã«ã“ã®è¿”ã•れãŸå ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚ã¤ã¾ã‚Šã€ã“ã‚Œã¯æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã® `version_added` フィールドよりも大ãããªã‚Šã¾ã™ã€‚ã“ã‚Œã¯æµ®å‹•å°æ•°ç‚¹ã§ã¯ãªãã€æ–‡å­—列ã§ã™ (例: ``version_added: '2.3'``)。" #: ../../rst/dev_guide/developing_modules_documenting.rst msgid "contains" msgstr "contains" #: ../../rst/dev_guide/developing_modules_documenting.rst:372 msgid "Optional. To describe nested return values, set ``type: dict``, or ``type: list``/``elements: dict``, or if you really have to, ``type: complex``, and repeat the elements above for each sub-field." msgstr "ä»»æ„ã§ã™ã€‚ãƒã‚¹ãƒˆã•ã‚ŒãŸæˆ»ã‚Šå€¤ã‚’記述ã™ã‚‹ã«ã¯ã€``type: dict`` ã¾ãŸã¯ ``type: list``/``elements: dict`` を設定ã™ã‚‹ã‹ã€æœ¬å½“ã«å¿…è¦ã§ã‚れ㰠``type: complex`` を設定ã—ã€å„サブフィールドã«å¯¾ã—ã¦ä¸Šè¨˜ã®è¦ç´ ã‚’繰り返ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:374 msgid "Here are two example ``RETURN`` sections, one with three simple fields and one with a complex nested field::" msgstr "以下ã®ä¾‹ã¯ã€``RETURN`` セクションを 3 ã¤ã®å˜ç´”ãªãƒ•ィールドã¨ã€è¤‡é›‘ãªãƒã‚¹ãƒˆã•れãŸãƒ•ィールドをæŒã¤ 2 ã¤ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:422 msgid "Python imports" msgstr "Python ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_modules_documenting.rst:424 msgid "After the shebang, the UTF-8 coding, the copyright line, the license, and the sections for ``DOCUMENTATION``, ``EXAMPLES``, and ``RETURN``, you can finally add the python imports. All modules must use Python imports in the form:" msgstr "ã‚·ãƒãƒ³ã®å¾Œã«ã¯ã€UTF-8 コード行ã€è‘—作権行ã€ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã€ãŠã‚ˆã³ ``DOCUMENTATION``ã€``EXAMPLES``ã€ãŠã‚ˆã³ ``RETURN`` ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒæœ€å¾Œã« python インãƒãƒ¼ãƒˆã‚’追加ã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã“ã®å½¢å¼ã® Python インãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:430 msgid "The use of \"wildcard\" imports such as ``from module_utils.basic import *`` is no longer allowed." msgstr "``from module_utils.basic import *`` ãªã©ã®ã€Œãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ä½¿ç”¨ã¯è¨±å¯ã•れãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_modules_documenting.rst:435 #: ../../rst/dev_guide/testing_documentation.rst:7 msgid "Testing module documentation" msgstr "モジュールドキュメンテーションã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_documenting.rst:437 msgid "To test Ansible documentation locally please :ref:`follow instruction`." msgstr "Ansible ドキュメントをローカルã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã«ã¯ã€ã€Œ:ref:`指示ã«å¾“ã†`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:6 msgid "Developing Ansible modules" msgstr "Ansible モジュールã®é–‹ç™º" #: ../../rst/dev_guide/developing_modules_general.rst:8 msgid "A module is a reusable, standalone script that Ansible runs on your behalf, either locally or remotely. Modules interact with your local machine, an API, or a remote system to perform specific tasks like changing a database password or spinning up a cloud instance. Each module can be used by the Ansible API, or by the :command:`ansible` or :command:`ansible-playbook` programs. A module provides a defined interface, accepts arguments, and returns information to Ansible by printing a JSON string to stdout before exiting." msgstr "モジュールã¯ã€Ansible ãŒãƒ­ãƒ¼ã‚«ãƒ«ã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã®ã„ãšã‚Œã‹ã§å®Ÿè¡Œã™ã‚‹å†åˆ©ç”¨å¯èƒ½ãªã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã‚¹ã‚¯ãƒªãƒ—トã§ã™ã€‚モジュールã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ã€APIã€ã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã¨å¯¾è©±ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ‘スワードã®å¤‰æ›´ã‚„クラウドインスタンスã®èµ·å‹•ãªã©ã®ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚å„モジュールã¯ã€Ansible API ã¾ãŸã¯ :command:`ansible` ã¾ãŸã¯ :command:`ansible-playbook` プログラムã§ä½¿ç”¨ã§ãã¾ã™ã€‚モジュールã¯å®šç¾©ã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã€å¼•æ•°ã‚’å—ã‘入れã€çµ‚了å‰ã« JSON 文字列を stdout ã«å‡ºåŠ›ã—㦠Ansible ã«æƒ…報を返ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:10 msgid "If you need functionality that is not available in any of the thousands of Ansible modules found in collections, you can easily write your own custom module. When you write a module for local use, you can choose any programming language and follow your own rules. Use this topic to learn how to create an Ansible module in Python. After you create a module, you must add it locally to the appropriate directory so that Ansible can find and execute it. For details about adding a module locally, see :ref:`developing_locally`." msgstr "コレクションã«ã‚ã‚‹æ•°åƒã® Ansible モジュールã§åˆ©ç”¨ã§ããªã„機能ãŒå¿…è¦ãªå ´åˆã¯ã€ç‹¬è‡ªã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ç°¡å˜ã«ä½œæˆã§ãã¾ã™ã€‚ローカルã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å ´åˆã¯ã€ä»»æ„ã®ãƒ—ãƒ­ã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã‚’é¸æŠžã—ã¦ã€ç‹¬è‡ªã®ãƒ«ãƒ¼ãƒ«ã«å¾“ã†ã‚ˆã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚本トピックを使用ã—ã¦ã€Python ã§ Ansible モジュールを作æˆã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚モジュールを作æˆã—ãŸã‚‰ã€Ansible ãŒæ¤œå‡ºãŠã‚ˆã³å®Ÿè¡Œã§ãるよã†ã«ã€ã“れをé©åˆ‡ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ­ãƒ¼ã‚«ãƒ«ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ローカルã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`developing_locally`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:18 msgid "Preparing an environment for developing Ansible modules" msgstr "Ansible モジュール開発用ã®ç’°å¢ƒã®æº–å‚™" #: ../../rst/dev_guide/developing_modules_general.rst:21 msgid "Installing prerequisites via apt (Ubuntu)" msgstr "apt (Ubuntu) を使用ã—ãŸå‰ææ¡ä»¶ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_modules_general.rst:23 #: ../../rst/dev_guide/developing_modules_general.rst:33 msgid "Due to dependencies (for example ansible -> paramiko -> pynacl -> libffi):" msgstr "ä¾å­˜é–¢ä¿‚ã®ãŸã‚ (例: ansible -> paramiko -> pynacl -> libffi)。" #: ../../rst/dev_guide/developing_modules_general.rst:31 msgid "Installing prerequisites via yum (CentOS)" msgstr "yum を使用ã—ãŸå‰ææ¡ä»¶ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« (CentOS)" #: ../../rst/dev_guide/developing_modules_general.rst:43 msgid "Creating a development environment (platform-independent steps)" msgstr "開発環境ã®ä½œæˆ (プラットフォームã«ä¾å­˜ã—ãªã„手順)" #: ../../rst/dev_guide/developing_modules_general.rst:45 msgid "Clone the Ansible repository: ``$ git clone https://github.com/ansible/ansible.git``" msgstr "Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¾ã™ (``$ git clone https://github.com/ansible/ansible.git``)。" #: ../../rst/dev_guide/developing_modules_general.rst:47 msgid "Change directory into the repository root dir: ``$ cd ansible``" msgstr "ディレクトリーをリãƒã‚¸ãƒˆãƒªãƒ¼ã® root ディレクトリーã«å¤‰æ›´ã—ã¾ã™ (``$ cd ansible``)。" #: ../../rst/dev_guide/developing_modules_general.rst:48 msgid "Create a virtual environment: ``$ python3 -m venv venv`` (or for Python 2 ``$ virtualenv venv``. Note, this requires you to install the virtualenv package: ``$ pip install virtualenv``)" msgstr "仮想環境を作æˆã—ã¾ã™ (``$ python3 -m venv venv``) (Python 2 ã®å ´åˆã¯ ``$ virtualenv venv``) ã§ã™ã€‚ã“れã«ã¯ã€virtualenv パッケージ ``$ pip install virtualenv`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:51 msgid "Activate the virtual environment: ``$ . venv/bin/activate``" msgstr "仮想環境をアクティベートã—ã¾ã™ (``$ . venv/bin/activate``)。" #: ../../rst/dev_guide/developing_modules_general.rst:52 msgid "Install development requirements: ``$ pip install -r requirements.txt``" msgstr "開発è¦ä»¶ã‚’インストールã—ã¾ã™ (``$ pip install -r requirements.txt``)。" #: ../../rst/dev_guide/developing_modules_general.rst:54 msgid "Run the environment setup script for each new development shell process: ``$ . hacking/env-setup``" msgstr "æ–°è¦é–‹ç™ºã‚·ã‚§ãƒ«ãƒ—ロセスã”ã¨ã«ç’°å¢ƒè¨­å®šã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã™ (``$ . hacking/env-setup``)。" #: ../../rst/dev_guide/developing_modules_general.rst:57 msgid "After the initial setup above, every time you are ready to start developing Ansible you should be able to just run the following from the root of the Ansible repo: ``$ . venv/bin/activate && . hacking/env-setup``" msgstr "上記ã®åˆæœŸè¨­å®šå¾Œã€Ansible ã®é–‹ç™ºæº–å‚™ãŒã§ãã‚‹ãŸã³ã«ã€Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ«ãƒ¼ãƒˆã‹ã‚‰ ``$ . venv/bin/activate && . hacking/env-setup`` を実行ã§ãã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:64 msgid "Creating an info or a facts module" msgstr "情報ã¾ãŸã¯ãƒ•ァクトモジュールã®ä½œæˆ" #: ../../rst/dev_guide/developing_modules_general.rst:66 msgid "Ansible gathers information about the target machines using facts modules, and gathers information on other objects or files using info modules. If you find yourself trying to add ``state: info`` or ``state: list`` to an existing module, that is often a sign that a new dedicated ``_facts`` or ``_info`` module is needed." msgstr "Ansible ã¯ã€ãƒ•ァクトモジュールを使用ã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã€info モジュールを使用ã—ã¦ä»–ã®ã‚ªãƒ–ジェクトやファイルã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã¾ã™ã€‚既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« ``state: info`` ã¾ãŸã¯ ``state: list`` を追加ã—よã†ã¨ã™ã‚‹éš›ã¯ã€å¤šãã®å ´åˆã€ã“ã‚ŒãŒæ–°è¦ã®å°‚用 ``_facts`` モジュールã¾ãŸã¯ ``_info`` モジュールãŒå¿…è¦ã«ãªã‚‹ã¨ã„ã†ç½²åã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:69 msgid "In Ansible 2.8 and onwards, we have two type of information modules, they are ``*_info`` and ``*_facts``." msgstr "Ansible 2.8 以é™ã§ã¯ã€2 ç¨®é¡žã®æƒ…報モジュール (``*_info`` ãŠã‚ˆã³ ``*_facts``) ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:71 msgid "If a module is named ``_facts``, it should be because its main purpose is returning ``ansible_facts``. Do not name modules that do not do this with ``_facts``. Only use ``ansible_facts`` for information that is specific to the host machine, for example network interfaces and their configuration, which operating system and which programs are installed." msgstr "モジュールã®åå‰ãŒ ``_facts`` ãªã®ã¯ã€``ansible_facts`` ã‚’è¿”ã™ã“ã¨ãŒä¸»ãªç›®çš„ã ã‹ã‚‰ã§ã™ã€‚ã“れã¯ã€``_facts`` ã§ã“れを行ã‚ãªã„モジュールã«åå‰ã‚’付ã‘ãªã„ã§ãã ã•ã„。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースやãã®è¨­å®šã‚„ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚„インストールã•れã¦ã„るプログラムãªã©ã€ãƒ›ã‚¹ãƒˆãƒžã‚·ãƒ³ã«å›ºæœ‰ã®æƒ…å ±ã«ã¯ ``ansible_facts`` ã®ã¿ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:74 msgid "Modules that query/return general information (and not ``ansible_facts``) should be named ``_info``. General information is non-host specific information, for example information on online/cloud services (you can access different accounts for the same online service from the same host), or information on VMs and containers accessible from the machine, or information on individual files or programs." msgstr "(``ansible_facts`` ã§ã¯ãªã) 一般情報をクエリーã¾ãŸã¯è¿”ã™ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã¯ã€``_info`` ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オンライン/クラウドサービスã«é–¢ã™ã‚‹æƒ…å ±ãªã©ã®ä¸€èˆ¬çš„ãªæƒ…å ±ã¯ã€ãƒ›ã‚¹ãƒˆä»¥å¤–ã®å›ºæœ‰ã®æƒ…å ± (åŒã˜ãƒ›ã‚¹ãƒˆã‹ã‚‰åŒã˜ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã®ç•°ãªã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹)ã€ãƒžã‚·ãƒ³ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªä»®æƒ³ãƒžã‚·ãƒ³ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«é–¢ã™ã‚‹æƒ…å ±ã€ã¾ãŸã¯å€‹ã€…ã®ãƒ•ァイルã¾ãŸã¯ãƒ—ログラムã«é–¢ã™ã‚‹æƒ…å ±ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:77 msgid "Info and facts modules, are just like any other Ansible Module, with a few minor requirements:" msgstr "info モジュールãŠã‚ˆã³ facts モジュールã«ã¯ã€ä»–ã® Ansible モジュールã¨åŒæ§˜ã«ã€ã•ã»ã©é‡è¦ã§ã¯ãªã„è¦ä»¶ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:79 msgid "They MUST be named ``_info`` or ``_facts``, where is singular." msgstr "åå‰ã¯ ``_info`` ã¾ãŸã¯ ``_facts`` ã§ã™ã€‚ ã¯å˜æ•°ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:80 msgid "Info ``*_info`` modules MUST return in the form of the :ref:`result dictionary` so other modules can access them." msgstr "info ã® ``*_info`` モジュールã¯ã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã« :ref:`çµæžœãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼` ã®å½¢å¼ã§è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:81 msgid "Fact ``*_facts`` modules MUST return in the ``ansible_facts`` field of the :ref:`result dictionary` so other modules can access them." msgstr "fact ã® ``*_facts`` モジュールã¯ã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãれらã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã« :ref:`çµæžœãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼` ã® ``ansible_facts`` フィールドã«è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:82 msgid "They MUST support :ref:`check_mode `." msgstr ":ref:`check_mode ` をサãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:83 msgid "They MUST NOT make any changes to the system." msgstr "システムã«å¤‰æ›´ã‚’加ãˆãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:84 msgid "They MUST document the :ref:`return fields` and :ref:`examples`." msgstr ":ref:`return fields` ãŠã‚ˆã³ :ref:`examples` を文書化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:86 msgid "To create an info module:" msgstr "info モジュールを作æˆã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:88 msgid "Navigate to the correct directory for your new module: ``$ cd lib/ansible/modules/``. If you are developing module using collection, ``$ cd plugins/modules/`` inside your collection development tree." msgstr "æ–°ã—ã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ­£ã—ã„ディレクトリーã«ç§»å‹•ã—ã¾ã™ (``$ cd lib/ansible/modules/``)。コレクションを使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³é–‹ç™ºãƒ„リー内㧠``$ cd plugins/modules/`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:89 msgid "Create your new module file: ``$ touch my_test_info.py``." msgstr "æ–°ã—ã„モジュールファイルを作æˆã—ã¾ã™ (``$ touch my_test_info.py``)。" #: ../../rst/dev_guide/developing_modules_general.rst:90 msgid "Paste the content below into your new info module file. It includes the :ref:`required Ansible format and documentation `, a simple :ref:`argument spec for declaring the module options `, and some example code." msgstr "以下ã®å†…容を新ã—ã„æƒ…報モジュールファイルã«è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚ã“れã«ã¯ã€:ref:`必須㮠Ansible å½¢å¼ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `ã€:ref:`モジュールオプションを宣言ã™ã‚‹å˜ç´”ãªå¼•数仕様 `ã€ãŠã‚ˆã³ã‚µãƒ³ãƒ—ルコードãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:91 msgid "Modify and extend the code to do what you want your new info module to do. See the :ref:`programming tips ` and :ref:`Python 3 compatibility ` pages for pointers on writing clean and concise module code." msgstr "æ–°ã—ã„æƒ…報モジュールãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’行ãˆã‚‹ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ã€æ‹¡å¼µã—ã¾ã™ã€‚余計ãªã‚‚ã®ãŒå…¥ã£ã¦ã„ãªã„モジュールコードやã€ç°¡æ½”ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ä½œæˆã«é–¢ã™ã‚‹ãƒ’ントã¯ã€ã€Œ:ref:`プログラミングã®ãƒ’ント `ã€ãƒšãƒ¼ã‚¸ãŠã‚ˆã³ã€Œ:ref:`Python 3 äº’æ›æ€§ `ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:96 msgid "Use the same process to create a facts module." msgstr "åŒã˜ãƒ—ロセスを使用ã—ã¦ãƒ•ァクトモジュールを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:102 msgid "Creating a module" msgstr "モジュールã®ä½œæˆ" #: ../../rst/dev_guide/developing_modules_general.rst:104 msgid "To create a module:" msgstr "モジュールを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:106 msgid "Navigate to the correct directory for your new module: ``$ cd lib/ansible/modules/``. If you are developing a module in a :ref:`collection `, ``$ cd plugins/modules/`` inside your collection development tree." msgstr "æ–°ã—ã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ­£ã—ã„ディレクトリーã«ç§»å‹•ã—ã¾ã™ (``$ cd lib/ansible/modules/``)。:ref:`コレクション ` ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³é–‹ç™ºãƒ„リー内㧠``$ cd plugins/modules/`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:107 msgid "Create your new module file: ``$ touch my_test.py``." msgstr "æ–°ã—ã„モジュールファイルを作æˆã—ã¾ã™ (``$ touch my_test.py``)。" #: ../../rst/dev_guide/developing_modules_general.rst:108 msgid "Paste the content below into your new module file. It includes the :ref:`required Ansible format and documentation `, a simple :ref:`argument spec for declaring the module options `, and some example code." msgstr "以下ã®å†…容を新ã—ã„モジュールファイルã«è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚ã“れã«ã¯ã€:ref:`必須㮠Ansible å½¢å¼ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `ã€:ref:`モジュールオプションを宣言ã™ã‚‹å˜ç´”ãªå¼•数仕様 `ã€ãŠã‚ˆã³ã„ãã¤ã‹ã®ã‚µãƒ³ãƒ—ルコードãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:109 msgid "Modify and extend the code to do what you want your new module to do. See the :ref:`programming tips ` and :ref:`Python 3 compatibility ` pages for pointers on writing clean and concise module code." msgstr "æ–°ã—ã„モジュールãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’行ãˆã‚‹ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ã€æ‹¡å¼µã—ã¾ã™ã€‚余計ãªã‚‚ã®ãŒå…¥ã£ã¦ã„ãªã„モジュールコードやã€ç°¡æ½”ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ä½œæˆã«é–¢ã™ã‚‹ãƒ’ントã¯ã€ã€Œ:ref:`プログラミングã®ãƒ’ント `ã€ãƒšãƒ¼ã‚¸ãŠã‚ˆã³ã€Œ:ref:`Python 3 äº’æ›æ€§ `ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:115 msgid "Verifying your module code" msgstr "モジュールコードã®ç¢ºèª" #: ../../rst/dev_guide/developing_modules_general.rst:117 msgid "After you modify the sample code above to do what you want, you can try out your module. Our :ref:`debugging tips ` will help if you run into bugs as you verify your module code." msgstr "上記ã®ã‚µãƒ³ãƒ—ルコードを修正ã—ãŸã‚‰ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’試ã™ã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`デãƒãƒƒã‚°ã®ãƒ’ント ` ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã‚’検証ã™ã‚‹éš›ã«ãƒã‚°ãŒç™ºç”Ÿã—ãŸå ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:122 msgid "Verifying your module code locally" msgstr "モジュールコードã®ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®ç¢ºèª" #: ../../rst/dev_guide/developing_modules_general.rst:124 msgid "If your module does not need to target a remote host, you can quickly and easily exercise your code locally like this:" msgstr "モジュールãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã‚’対象ã«ã™ã‚‹å¿…è¦ãŒãªã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰ã‚’ローカルã§ç°¡å˜ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:126 msgid "Create an arguments file, a basic JSON config file that passes parameters to your module so that you can run it. Name the arguments file ``/tmp/args.json`` and add the following content:" msgstr "引数ファイルを作æˆã—ã¾ã™ã€‚ã“れã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã§ãるよã†ã«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™åŸºæœ¬çš„㪠JSON æ§‹æˆãƒ•ァイルã§ã™ã€‚引数ファイル ``/tmp/args.json`` ã«åå‰ã‚’付ã‘ã€ä»¥ä¸‹ã®å†…容を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:137 msgid "If you are using a virtual environment (which is highly recommended for development) activate it: ``$ . venv/bin/activate``" msgstr "(開発ã«éžå¸¸ã«æŽ¨å¥¨ã•れã¦ã„ã‚‹) 仮想環境を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã—ã¾ã™ (``$ . venv/bin/activate``)。" #: ../../rst/dev_guide/developing_modules_general.rst:139 msgid "Set up the environment for development: ``$ . hacking/env-setup``" msgstr "開発用ã®ç’°å¢ƒã‚’設定ã—ã¾ã™ (``$ . hacking/env-setup``)。" #: ../../rst/dev_guide/developing_modules_general.rst:140 msgid "Run your test module locally and directly: ``$ python -m ansible.modules.my_test /tmp/args.json``" msgstr "テストモジュールをローカルã§ç›´æŽ¥å®Ÿè¡Œã—ã¾ã™ (``$ python -m ansible.modules.my_test /tmp/args.json``)。" #: ../../rst/dev_guide/developing_modules_general.rst:143 msgid "This should return output like this:" msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¿”ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:151 msgid "Verifying your module code in a playbook" msgstr "Playbook ã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ç¢ºèª" #: ../../rst/dev_guide/developing_modules_general.rst:153 msgid "The next step in verifying your new module is to consume it with an Ansible playbook." msgstr "æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’検証ã™ã‚‹æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€Ansible Playbook ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:155 msgid "Create a playbook in any directory: ``$ touch testmod.yml``" msgstr "ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« Playbook を作æˆã—ã¾ã™ (``$ touch testmod.yml``)。" #: ../../rst/dev_guide/developing_modules_general.rst:156 #: ../../rst/dev_guide/developing_modules_general_windows.rst:522 msgid "Add the following to the new playbook file::" msgstr "以下を新ã—ã„ Playbook ファイルã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:170 msgid "Run the playbook and analyze the output: ``$ ansible-playbook ./testmod.yml``" msgstr "Playbook を実行ã—ã€å‡ºåŠ›ã‚’åˆ†æžã—ã¾ã™ (``$ ansible-playbook ./testmod.yml``)。" #: ../../rst/dev_guide/developing_modules_general.rst:173 msgid "Testing your newly-created module" msgstr "æ–°ãŸã«ä½œæˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general.rst:175 msgid "The following two examples will get you started with testing your module code. Please review our :ref:`testing ` section for more detailed information, including instructions for :ref:`testing module documentation `, adding :ref:`integration tests `, and more." msgstr "以下㮠2 ã¤ã®ä¾‹ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ãƒ†ã‚¹ãƒˆã‚’é–‹å§‹ã—ã¾ã™ã€‚:ref:`モジュールã®ãƒ†ã‚¹ãƒˆã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ ` ã®æ‰‹é †ã€:ref:`çµ±åˆãƒ†ã‚¹ãƒˆ ` ã®è¿½åŠ ãªã©ã®è©³ç´°ãªæƒ…å ±ã¯ã€:ref:`テスト ` ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:179 #: ../../rst/dev_guide/testing_integration.rst:20 msgid "Every new module and plugin should have integration tests, even if the tests cannot be run on Ansible CI infrastructure. In this case, the tests should be marked with the ``unsupported`` alias in `aliases file `_." msgstr "テストを Ansible CI インフラストラクãƒãƒ£ãƒ¼ã§å®Ÿè¡Œã§ããªã„å ´åˆã§ã‚‚ã€æ–°ã—ã„モジュールã¨ãƒ—ラグインã«ã¯çµ±åˆãƒ†ã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚ã“ã®å ´åˆã€ãƒ†ã‚¹ãƒˆã¯ `aliases ファイル `_ ã® ``unsupported`` エイリアスã§ãƒžãƒ¼ã‚¯ä»˜ã‘ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:183 msgid "Performing sanity tests" msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/developing_modules_general.rst:185 msgid "You can run through Ansible's sanity checks in a container:" msgstr "Ansible ã®å¥å…¨æ€§ãƒã‚§ãƒƒã‚¯ã‚’コンテナーã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:187 msgid "``$ ansible-test sanity -v --docker --python 2.7 MODULE_NAME``" msgstr "``$ ansible-test sanity -v --docker --python 2.7 MODULE_NAME``" #: ../../rst/dev_guide/developing_modules_general.rst:190 msgid "Note that this example requires Docker to be installed and running. If you'd rather not use a container for this, you can choose to use ``--venv`` instead of ``--docker``." msgstr "ã“ã®ä¾‹ã§ã¯ã€Docker をインストールã—ã¦å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コンテナーを使用ã—ãªã„å ´åˆã¯ã€``--docker`` ã®ä»£ã‚り㫠``--venv`` を使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:195 msgid "You can add unit tests for your module in ``./test/units/modules``. You must first set up your testing environment. In this example, we're using Python 3.5." msgstr "モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ ``./test/units/modules`` ã§è¿½åŠ ã§ãã¾ã™ã€‚ã¾ãšãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€Python 3.5 を使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:197 msgid "Install the requirements (outside of your virtual environment): ``$ pip3 install -r ./test/lib/ansible_test/_data/requirements/units.txt``" msgstr "(仮想環境外ã«) è¦ä»¶ã‚’インストールã—ã¾ã™ (``$ pip3 install -r ./test/lib/ansible_test/_data/requirements/units.txt``)。" #: ../../rst/dev_guide/developing_modules_general.rst:198 msgid "Run ``. hacking/env-setup``" msgstr "``. hacking/env-setup`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:199 msgid "To run all tests do the following: ``$ ansible-test units --python 3.5``. If you are using a CI environment, these tests will run automatically." msgstr "ã™ã¹ã¦ã®ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€``$ ansible-test units --python 3.5`` を実行ã—ã¾ã™ã€‚CI 環境を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“れらã®ãƒ†ã‚¹ãƒˆãŒè‡ªå‹•çš„ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:201 msgid "Ansible uses pytest for unit testing." msgstr "Ansible ã¯ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã« pytest を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:203 msgid "To run pytest against a single test module, you can run the following command. Ensure that you are providing the correct path of the test module:" msgstr "å˜ä¸€ã®ãƒ†ã‚¹ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã—㦠pytest を実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚ãƒ†ã‚¹ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ­£ã—ã„パスをæä¾›ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:205 msgid "``$ pytest -r a --cov=. --cov-report=html --fulltrace --color yes test/units/modules/.../test/my_test.py``" msgstr "``$ pytest -r a --cov=. --cov-report=html --fulltrace --color yes test/units/modules/.../test/my_test.py``" #: ../../rst/dev_guide/developing_modules_general.rst:209 msgid "Contributing back to Ansible" msgstr "Ansible ã¸ã®è²¢çŒ®" #: ../../rst/dev_guide/developing_modules_general.rst:211 msgid "If you would like to contribute to ``ansible-core`` by adding a new feature or fixing a bug, `create a fork `_ of the ansible/ansible repository and develop against a new feature branch using the ``devel`` branch as a starting point. When you have a good working code change, you can submit a pull request to the Ansible repository by selecting your feature branch as a source and the Ansible devel branch as a target." msgstr "æ–°ã—ã„æ©Ÿèƒ½ã‚’追加ã—ãŸã‚Šãƒã‚°ã‚’修正ã—ãŸã‚Šã—ã¦ã€``ansible-core`` ã«è²¢çŒ®ã™ã‚‹å ´åˆã¯ã€ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã® `フォークã®ä½œæˆ `_ ã—ã€é–‹å§‹ç‚¹ã¨ã—㦠``devel`` ブランãƒã‚’使用ã—ã¦æ–°æ©Ÿèƒ½ãƒ–ランãƒã«å¯¾ã—ã¦é–‹ç™ºã—ã¾ã™ã€‚é©åˆ‡ãªä½œæ¥­ã‚³ãƒ¼ãƒ‰ã‚‚変更ãŒã‚ã‚‹å ´åˆã¯ã€æ©Ÿèƒ½ãƒ–ランãƒã‚’ソースã¨ã—ã¦ã€ãŠã‚ˆã³ Ansible devel ブランãƒã‚’ターゲットã¨ã—ã¦é¸æŠžã—ã€Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã«ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:213 msgid "If you want to contribute a module to an :ref:`Ansible collection `, review our :ref:`submission checklist `, :ref:`programming tips `, and :ref:`strategy for maintaining Python 2 and Python 3 compatibility `, as well as information about :ref:`testing ` before you open a pull request." msgstr "モジュールを :ref:`Ansible コレクション ` ã«æä¾›ã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`æå‡ºã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆ `ã€ã€ã€Œ:ref:`プログラムã®ãƒ’ント `ã€ã€ãªã‚‰ã³ã«ã€Œ:ref:`Python 2 ãŠã‚ˆã³ Python 3 ã®äº’æ›æ€§ã‚’ç¶­æŒã™ã‚‹ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ `ã€ã‚’確èªã—ã¦ãã ã•ã„ã€‚ãƒ—ãƒ«è¦æ±‚を作æˆã™ã‚‹å‰ã«ã€:ref:`テスト ` ã«é–¢ã™ã‚‹æƒ…報も併ã›ã¦å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:215 msgid "The :ref:`Community Guide ` covers how to open a pull request and what happens next." msgstr "『:ref:`コミュニティーガイド `ã€ã§ã¯ã€ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ãæ–¹æ³•ã¨ã€æ¬¡ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:219 msgid "Communication and development support" msgstr "通信ãŠã‚ˆã³é–‹ç™ºã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_modules_general.rst:221 msgid "Join the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) for discussions surrounding Ansible development." msgstr "``#ansible-devel`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `ã§IRCを使用)ã«å‚加ã—ã¦ã€Ansible ã®é–‹ç™ºã«é–¢ã™ã‚‹è­°è«–を行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:223 msgid "For questions and discussions pertaining to using the Ansible product, join the ``#ansible`` channel." msgstr "Ansible 製å“ã®ä½¿ç”¨ã«é–¢ã™ã‚‹è³ªå•ãŠã‚ˆã³è²¢çŒ®ã«ã¤ã„ã¦ã¯ã€``#ansible`` ãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general.rst:225 msgid "To find other topic-specific chat channels, look at :ref:`Community Guide, Communicating `." msgstr "ä»–ã®ãƒˆãƒ”ック固有ã®ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’探ã™ã«ã¯ã€:ref:`Community Guide, Communicating ` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general.rst:228 msgid "Credit" msgstr "è¬è¾ž" #: ../../rst/dev_guide/developing_modules_general.rst:230 msgid "Thank you to Thomas Stringer (`@trstringer `_) for contributing source material for this topic." msgstr "ã“ã®ãƒˆãƒ”ックã®å…ƒã¨ãªã‚‹è³‡æ–™ã‚’æä¾›ã—ã¦ã„ãŸã ã„㟠Thomas Stringer (`@trstringer `_) æ°ã«æ„Ÿè¬ã®æ„を示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:5 msgid "Developing Cisco ACI modules" msgstr "Cisco ACI モジュールã®é–‹ç™º" #: ../../rst/dev_guide/developing_modules_general_aci.rst:6 msgid "This is a brief walk-through of how to create new Cisco ACI modules for Ansible." msgstr "Ansible å‘ã‘ã«æ–°ã—ã„ Cisco ACI モジュールを作æˆã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹ç°¡å˜ãªã‚¦ã‚©ãƒ¼ã‚¯ã‚¹ãƒ«ãƒ¼ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:8 msgid "For more information about Cisco ACI, look at the :ref:`Cisco ACI user guide `." msgstr "Cisco ACI ã®è©³ç´°ã¯ã€ã€Œ:ref:`Cisco ACI ユーザーガイド `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_aci.rst:10 #: ../../rst/dev_guide/developing_modules_general_windows.rst:13 msgid "What's covered in this section:" msgstr "本項ã§å–り上ã’られã¦ã„る内容:" #: ../../rst/dev_guide/developing_modules_general_aci.rst:20 #: ../../rst/dev_guide/testing_units_modules.rst:14 msgid "Introduction" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/dev_guide/developing_modules_general_aci.rst:21 msgid "The `cisco.aci collection `_ already includes a large number of Cisco ACI modules, however the ACI object model is huge and covering all possible functionality would easily cover more than 1500 individual modules." msgstr "`cisco.aci collection `_ ã«ã¯ã™ã§ã«å¤šæ•°ã® Cisco ACI モジュールãŒå«ã¾ã‚Œã¦ã„ã¾ã™ãŒã€ACI オブジェクトモデルã¯å¤§ããã€ã™ã¹ã¦ã®æ©Ÿèƒ½ã«å¯¾å¿œã™ã‚‹ãŸã‚ã€1500 以上ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ç°¡å˜ã«å¯¾å¿œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:23 msgid "If you need specific functionality, you have 2 options:" msgstr "ç‰¹å®šã®æ©Ÿèƒ½ãŒå¿…è¦ãªå ´åˆã¯ã€2 ã¤ã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:25 msgid "Learn the ACI object model and use the low-level APIC REST API using the :ref:`aci_rest ` module" msgstr "ACI オブジェクトモデルを学習ã—ã€ã€Œ:ref:`aci_rest `ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ä½Žãƒ¬ãƒ™ãƒ«ã® APIC REST API を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:26 msgid "Write your own dedicated modules, which is actually quite easy" msgstr "独自ã®å°‚用モジュールを作æˆã™ã‚‹ã“ã¨ã¯ã€å®Ÿéš›ã«ã¯éžå¸¸ã«ç°¡å˜ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:30 msgid "`ACI Fundamentals: ACI Policy Model `_" msgstr "`ACI Fundamentals: ACI Policy Model `_" #: ../../rst/dev_guide/developing_modules_general_aci.rst:31 msgid "A good introduction to the ACI object model." msgstr "ACI オブジェクトモデルã®å„ªã‚ŒãŸæ¦‚è¦" #: ../../rst/dev_guide/developing_modules_general_aci.rst:32 msgid "`APIC Management Information Model reference `_" msgstr "`APIC Management Information Model reference `_" #: ../../rst/dev_guide/developing_modules_general_aci.rst:33 msgid "Complete reference of the APIC object model." msgstr "APIC オブジェクトモデルã®å®Œå…¨ãªãƒªãƒ•ァレンス" #: ../../rst/dev_guide/developing_modules_general_aci.rst:34 msgid "`APIC REST API Configuration Guide `_" msgstr "`APIC REST API Configuration Guide `_" #: ../../rst/dev_guide/developing_modules_general_aci.rst:35 msgid "Detailed guide on how the APIC REST API is designed and used, incl. many examples." msgstr "APIC REST API を設計ãŠã‚ˆã³ä½¿ç”¨ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã®è©³ç´°ã‚¬ã‚¤ãƒ‰ã€‚多数ã®ä¾‹ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:38 msgid "So let's look at how a typical ACI module is built up." msgstr "ãれã§ã¯ã€å…¸åž‹çš„㪠ACI モジュールãŒã©ã®ã‚ˆã†ã«æ§‹ç¯‰ã•れるã‹ã‚’見ã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:44 msgid "ACI module structure" msgstr "ACI モジュール構造" #: ../../rst/dev_guide/developing_modules_general_aci.rst:47 msgid "Importing objects from Python libraries" msgstr "Python ライブラリーã‹ã‚‰ã®ã‚ªãƒ–ジェクトã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:48 msgid "The following imports are standard across ACI modules:" msgstr "以下ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã€ACI ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å…¨ä½“ã§æ¨™æº–ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:57 msgid "Defining the argument spec" msgstr "引数仕様ã®å®šç¾©" #: ../../rst/dev_guide/developing_modules_general_aci.rst:58 msgid "The first line adds the standard connection parameters to the module. After that, the next section will update the ``argument_spec`` dictionary with module-specific parameters. The module-specific parameters should include:" msgstr "最åˆã®è¡Œã¯ã€æ¨™æº–ã®æŽ¥ç¶šãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«è¿½åŠ ã—ã¾ã™ã€‚ãã®å¾Œã€ä»¥ä¸‹ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å›ºæœ‰ã®ãƒ‘ラメーター㧠``argument_spec`` ディクショナリーを更新ã—ã¾ã™ã€‚モジュール固有ã®ãƒ‘ラメーターã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:60 msgid "the object_id (usually the name)" msgstr "object_id (通常ã¯åå‰)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:61 msgid "the configurable properties of the object" msgstr "オブジェクトã®è¨­å®šå¯èƒ½ãªãƒ—ロパティー" #: ../../rst/dev_guide/developing_modules_general_aci.rst:62 msgid "the parent object IDs (all parents up to the root)" msgstr "親オブジェクト ID (ルートã¾ã§ã®ã™ã¹ã¦ã®è¦ª)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:63 msgid "only child classes that are a 1-to-1 relationship (1-to-many/many-to-many require their own module to properly manage)" msgstr "1 対 1 ã®é–¢ä¿‚ã§ã‚ã‚‹å­ã‚¯ãƒ©ã‚¹ã®ã¿ (1 対多/多対多ã§ã¯ã€ç‹¬è‡ªã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é©åˆ‡ã«ç®¡ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:64 msgid "the state" msgstr "状態" #: ../../rst/dev_guide/developing_modules_general_aci.rst:66 msgid "``state: absent`` to ensure object does not exist" msgstr "``state: absent``: オブジェクトãŒå­˜åœ¨ã—ãªã„ã“ã¨ã‚’確èªã™ã‚‹" #: ../../rst/dev_guide/developing_modules_general_aci.rst:67 msgid "``state: present`` to ensure the object and configs exist; this is also the default" msgstr "``state: present``: オブジェクトã¨è¨­å®šãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ (デフォルト)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:68 msgid "``state: query`` to retrieve information about objects in the class" msgstr "``state: query``: クラスã®ã‚ªãƒ–ジェクトã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã™ã‚‹" #: ../../rst/dev_guide/developing_modules_general_aci.rst:86 msgid "Do not provide default values for configuration arguments. Default values could cause unintended changes to the object." msgstr "設定引数ã®ãƒ‡ãƒ•ォルト値を指定ã—ãªã„ã§ãã ã•ã„。デフォルト値ã«ã‚ˆã‚Šã€ã‚ªãƒ–ジェクトã¸ã®æ„図ã—ãªã„変更ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:89 msgid "Using the AnsibleModule object" msgstr "AnsibleModule オブジェクトã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_modules_general_aci.rst:90 msgid "The following section creates an AnsibleModule instance. The module should support check-mode, so we pass the ``argument_spec`` and ``supports_check_mode`` arguments. Since these modules support querying the APIC for all objects of the module's class, the object/parent IDs should only be required if ``state: absent`` or ``state: present``." msgstr "次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€AnsibleModule インスタンスを作æˆã—ã¾ã™ã€‚モジュールã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€``argument_spec`` 引数ãŠã‚ˆã³ ``supports_check_mode`` 引数を渡ã—ã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¯ãƒ©ã‚¹ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ APIC ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã€ã‚ªãƒ–ジェクト/親 ID ã¯ã€``state: absent`` ã¾ãŸã¯ ``state: present`` ã®å ´åˆã«é™ã‚Šå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:105 msgid "Mapping variable definition" msgstr "マッピング変数定義" #: ../../rst/dev_guide/developing_modules_general_aci.rst:106 msgid "Once the AnsibleModule object has been initiated, the necessary parameter values should be extracted from ``params`` and any data validation should be done. Usually the only params that need to be extracted are those related to the ACI object configuration and its child configuration. If you have integer objects that you would like to validate, then the validation should be done here, and the ``ACIModule.payload()`` method will handle the string conversion." msgstr "AnsibleModule オブジェクトãŒé–‹å§‹ã•れãŸã‚‰ã€å¿…è¦ãªãƒ‘ラメーターã®å€¤ã‚’ ``params`` ã‹ã‚‰æŠ½å‡ºã—ã€ãƒ‡ãƒ¼ã‚¿ã®æ¤œè¨¼ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚é€šå¸¸ã€æŠ½å‡ºã™ã‚‹å¿…è¦ãŒã‚る唯一ã®ãƒ‘ラメーター㌠ACI オブジェクトã®è¨­å®šãŠã‚ˆã³ãã®å­è¨­å®šã«é–¢é€£ã™ã‚‹ãƒ‘ラメーターã®ã¿ã¨ãªã‚Šã¾ã™ã€‚検証ã™ã‚‹æ•´æ•°ã‚ªãƒ–ジェクトãŒã‚ã‚‹å ´åˆã¯ã€æ¤œè¨¼ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚データ検証ã¯ã“ã“ã§è¡Œã†å¿…è¦ãŒã‚りã€``ACIModule.payload()`` メソッドã¯å¤‰æ›æ–‡å­—列を処ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:122 msgid "Using the ACIModule object" msgstr "ACIModule オブジェクトã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_modules_general_aci.rst:123 msgid "The ACIModule class handles most of the logic for the ACI modules. The ACIModule extends functionality to the AnsibleModule object, so the module instance must be passed into the class instantiation." msgstr "ACIModule クラスã¯ã€ACI モジュールã®ãƒ­ã‚¸ãƒƒã‚¯ã®å¤§éƒ¨åˆ†ã‚’処ç†ã—ã¾ã™ã€‚ACIModule ã¯æ©Ÿèƒ½ã‚’ AnsibleModule ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ‹¡å¼µã™ã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã«æ¸¡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:129 msgid "The ACIModule has six main methods that are used by the modules:" msgstr "ACIModule ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ä½¿ç”¨ã•れる 6 ã¤ã®ä¸»ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:131 msgid "construct_url" msgstr "construct_url" #: ../../rst/dev_guide/developing_modules_general_aci.rst:132 msgid "get_existing" msgstr "get_existing" #: ../../rst/dev_guide/developing_modules_general_aci.rst:133 msgid "payload" msgstr "payload" #: ../../rst/dev_guide/developing_modules_general_aci.rst:134 msgid "get_diff" msgstr "get_diff" #: ../../rst/dev_guide/developing_modules_general_aci.rst:135 msgid "post_config" msgstr "post_config" #: ../../rst/dev_guide/developing_modules_general_aci.rst:136 msgid "delete_config" msgstr "delete_config" #: ../../rst/dev_guide/developing_modules_general_aci.rst:138 msgid "The first two methods are used regardless of what value is passed to the ``state`` parameter." msgstr "最åˆã® 2 ã¤ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€``state`` ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ¸¡ã•れる値ã«é–¢ä¿‚ãªã使用ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:141 msgid "Constructing URLs" msgstr "URL ã®æ§‹ç¯‰" #: ../../rst/dev_guide/developing_modules_general_aci.rst:142 msgid "The ``construct_url()`` method is used to dynamically build the appropriate URL to interact with the object, and the appropriate filter string that should be appended to the URL to filter the results." msgstr "``construct_url()`` メソッドã¯ã€ã‚ªãƒ–ジェクトã¨å¯¾è©±ã™ã‚‹ãŸã‚ã«é©åˆ‡ãª URL ã¨ã€URL ã«è¿½åŠ ã—ã¦çµæžœã«ãƒ•ィルターを設定ã™ã‚‹é©åˆ‡ãªãƒ•ã‚£ãƒ«ã‚¿ãƒ¼æ–‡å­—åˆ—ã‚’å‹•çš„ã«æ§‹ç¯‰ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:144 msgid "When the ``state`` is not ``query``, the URL is the base URL to access the APIC plus the distinguished name to access the object. The filter string will restrict the returned data to just the configuration data." msgstr "``state`` ㌠``query`` ã§ãªã„å ´åˆã€URL 㯠APIC ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ™ãƒ¼ã‚¹ URL ã¨ã€ã‚ªãƒ–ジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®è­˜åˆ¥åã§ã™ã€‚フィルター文字列ã¯è¿”ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’設定データã«ã®ã¿åˆ¶é™ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:145 msgid "When ``state`` is ``query``, the URL and filter string used depends on what parameters are passed to the object. This method handles the complexity so that it is easier to add new modules and so that all modules are consistent in what type of data is returned." msgstr "``state`` ㌠``query`` ã•れる場åˆã€ä½¿ç”¨ã•れる URL ãŠã‚ˆã³ãƒ•ィルター文字列ã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ¸¡ã•れるパラメーターã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯è¤‡é›‘性を処ç†ã™ã‚‹ãŸã‚ã€æ–°ã—ã„モジュールã®è¿½åŠ ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚ã¾ãŸã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã©ã®ã‚¿ã‚¤ãƒ—ã®ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™ã‹ã«ä¸€è²«æ€§ã‚’æŒãŸã›ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:147 msgid "Our design goal is to take all ID parameters that have values, and return the most specific data possible. If you do not supply any ID parameters to the task, then all objects of the class will be returned. If your task does consist of ID parameters sed, then the data for the specific object is returned. If a partial set of ID parameters are passed, then the module will use the IDs that are passed to build the URL and filter strings appropriately." msgstr "ã“ã®è¨­è¨ˆã®ç›®çš„ã¯ã€å€¤ãŒã‚ã‚‹ã™ã¹ã¦ã® ID パラメーターをå–ã‚Šã€æœ€ã‚‚具体的ãªãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™ã“ã¨ã§ã™ã€‚ID ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ã‚¿ã‚¹ã‚¯ã«æŒ‡å®šã—ãªã„ã¨ã€ã‚¯ãƒ©ã‚¹ã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトãŒè¿”ã•れã¾ã™ã€‚タスク㌠ID パラメーター sed ã§æ§‹æˆã•れã¦ã„ã‚‹å ´åˆã¯ã€ç‰¹å®šã®ã‚ªãƒ–ジェクトã®ãƒ‡ãƒ¼ã‚¿ãŒè¿”ã•れã¾ã™ã€‚ID パラメーターã®ä¸€éƒ¨ãŒæ¸¡ã•れるã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ URL ãŠã‚ˆã³ãƒ•ィルター文字列をé©åˆ‡ã«ãƒ“ルドã™ã‚‹ãŸã‚ã«æ¸¡ã•れ㟠ID を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:149 msgid "The ``construct_url()`` method takes 2 required arguments:" msgstr "``construct_url()`` メソッドã¯ã€å¿…è¦ãªå¼•æ•°ã‚’ 2 ã¤å–りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:151 msgid "**self** - passed automatically with the class instance" msgstr "**self** - クラスインスタンスã§è‡ªå‹•çš„ã«æ¸¡ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:152 msgid "**root_class** - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys" msgstr "**root_class**: ``aci_class`` キーã€``aci_rn`` キーã€``target_filter`` キーã€ãŠã‚ˆã³ ``module_object`` ã‚­ãƒ¼ã§æ§‹æˆã•れるディクショナリー" #: ../../rst/dev_guide/developing_modules_general_aci.rst:154 msgid "**aci_class**: The name of the class used by the APIC, for example ``fvTenant``" msgstr "**aci_class**: APIC ãŒä½¿ç”¨ã™ã‚‹ã‚¯ãƒ©ã‚¹å (例: ``fvTenant``)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:156 msgid "**aci_rn**: The relative name of the object, for example ``tn-ACME``" msgstr "**aci_rn**: オブジェクトã®ç›¸å¯¾å (例: ``tn-ACME``)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:158 msgid "**target_filter**: A dictionary with key-value pairs that make up the query string for selecting a subset of entries, for example ``{'name': 'ACME'}``" msgstr "**target_filter**: エントリーã®ã‚µãƒ–ã‚»ãƒƒãƒˆã‚’é¸æŠžã™ã‚‹ã‚¯ã‚¨ãƒªãƒ¼æ–‡å­—列を構æˆã™ã‚‹ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’æŒã¤ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ (例: ``{'name': 'ACME'}``)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:160 msgid "**module_object**: The particular object for this class, for example ``ACME``" msgstr "**module_object**: ã“ã®ã‚¯ãƒ©ã‚¹ã®ç‰¹å®šã®ã‚ªãƒ–ジェクト (例: ``ACME``)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:162 #: ../../rst/dev_guide/developing_program_flow_modules.rst:597 #: ../../rst/dev_guide/developing_program_flow_modules.rst:636 #: ../../rst/dev_guide/developing_program_flow_modules.rst:650 #: ../../rst/dev_guide/developing_program_flow_modules.rst:750 #: ../../rst/dev_guide/developing_program_flow_modules.rst:767 #: ../../rst/dev_guide/developing_program_flow_modules.rst:781 #: ../../rst/dev_guide/developing_program_flow_modules.rst:808 #: ../../rst/dev_guide/developing_program_flow_modules.rst:825 #: ../../rst/dev_guide/testing_units_modules.rst:90 #: ../../rst/dev_guide/testing_units_modules.rst:109 msgid "Example:" msgstr "例: " #: ../../rst/dev_guide/developing_modules_general_aci.rst:175 msgid "Some modules, like ``aci_tenant``, are the root class and so they would not need to pass any additional arguments to the method." msgstr "``aci_tenant`` ãªã©ã®ä¸€éƒ¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ root クラスã§ã‚ã‚‹ãŸã‚ã€ãƒ¡ã‚½ãƒƒãƒ‰ã«è¿½åŠ ã®å¼•数を渡ã™å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_aci.rst:177 msgid "The ``construct_url()`` method takes 4 optional arguments, the first three imitate the root class as described above, but are for child objects:" msgstr "``construct_url()`` メソッドã¯ã€4 ã¤ã®ä»»æ„ã®å¼•æ•°ã‚’å–りã¾ã™ã€‚最åˆã® 3 ã¤ã®å¼•æ•°ãŒä¸Šè¨˜ã®ã‚ˆã†ã« root クラスを模倣ã—ã¾ã™ãŒã€ã“れã¯å­ã‚ªãƒ–ジェクト用ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:179 msgid "subclass_1 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys" msgstr "subclass_1 - ``aci_class`` キーã€``aci_rn`` キーã€``target_filter`` キーã€ãŠã‚ˆã³ ``module_object`` ã‚­ãƒ¼ã§æ§‹æˆã•れるディクショナリー" #: ../../rst/dev_guide/developing_modules_general_aci.rst:181 msgid "Example: Application Profile Class (AP)" msgstr "例: Application Profile Class (AP)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:183 msgid "subclass_2 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys" msgstr "subclass_2 - ``aci_class`` キーã€``aci_rn`` キーã€``target_filter`` キーã€ãŠã‚ˆã³ ``module_object`` ã‚­ãƒ¼ã§æ§‹æˆã•れるディクショナリー" #: ../../rst/dev_guide/developing_modules_general_aci.rst:185 msgid "Example: End Point Group (EPG)" msgstr "例: エンドãƒã‚¤ãƒ³ãƒˆã‚°ãƒ«ãƒ¼ãƒ— (EPG)" #: ../../rst/dev_guide/developing_modules_general_aci.rst:187 msgid "subclass_3 - A dictionary consisting of ``aci_class``, ``aci_rn``, ``target_filter``, and ``module_object`` keys" msgstr "subclass_3 - ``aci_class`` キーã€``aci_rn`` キーã€``target_filter`` キーã€ãŠã‚ˆã³ ``module_object`` ã‚­ãƒ¼ã§æ§‹æˆã•れるディクショナリー" #: ../../rst/dev_guide/developing_modules_general_aci.rst:189 msgid "Example: Binding a Contract to an EPG" msgstr "例: EPG ã¸ã®å¥‘ç´„ã®ãƒã‚¤ãƒ³ãƒ‰" #: ../../rst/dev_guide/developing_modules_general_aci.rst:191 msgid "child_classes - The list of APIC names for the child classes supported by the modules." msgstr "child_classes - モジュールãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹å­ã‚¯ãƒ©ã‚¹ã® APIC åã®ãƒªã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:193 msgid "This is a list, even if it is a list of one" msgstr "1 ã¤ã®ãƒªã‚¹ãƒˆã§ã‚ã£ã¦ã‚‚ã€ã“れã¯ãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:194 msgid "These are the unfriendly names used by the APIC" msgstr "ã“れらã¯ã€APIC ãŒä½¿ç”¨ã™ã‚‹åˆ†ã‹ã‚Šã«ãã„åå‰ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:195 msgid "These are used to limit the returned child_classes when possible" msgstr "å¯èƒ½ãªå ´åˆã¯ã€è¿”ã•れ㟠child_classes を制é™ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:196 msgid "Example: ``child_classes=['fvRsBDSubnetToProfile', 'fvRsNdPfxPol']``" msgstr "例: ``child_classes=['fvRsBDSubnetToProfile', 'fvRsNdPfxPol']``" #: ../../rst/dev_guide/developing_modules_general_aci.rst:198 msgid "Sometimes the APIC will require special characters ([, ], and -) or will use object metadata in the name (\"vlanns\" for VLAN pools); the module should handle adding special characters or joining of multiple parameters in order to keep expected inputs simple." msgstr "APIC ã¯ã€ç‰¹æ®Šæ–‡å­— ([, ]ã€ãŠã‚ˆã³ -) ã‚’è¦æ±‚ã—ãŸã‚Šã€åå‰ã«ã‚ªãƒ–ジェクトã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ (「VLANã€ãƒ—ールã®å ´åˆã¯ã€Œvlannsã€) を使用ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚モジュールã¯ã€äºˆæƒ³ã•れる入力ã®å˜ç´”ã•ã«ä¿ã¤ãŸã‚ã«ã€ç‰¹æ®Šæ–‡å­—ã®è¿½åŠ ã¾ãŸã¯è¤‡æ•°ã®ãƒ‘ラメーターã®çµåˆã‚’処ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:201 msgid "Getting the existing configuration" msgstr "既存設定ã®å–å¾—" #: ../../rst/dev_guide/developing_modules_general_aci.rst:202 msgid "Once the URL and filter string have been built, the module is ready to retrieve the existing configuration for the object:" msgstr "URL ãŠã‚ˆã³ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼æ–‡å­—åˆ—ãŒæ§‹ç¯‰ã•れるã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ—¢å­˜ã®è¨­å®šã‚’å–å¾—ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:204 msgid "``state: present`` retrieves the configuration to use as a comparison against what was entered in the task. All values that are different than the existing values will be updated." msgstr "``state: present`` ã¯ã€ã‚¿ã‚¹ã‚¯ã«å…¥åŠ›ã—ãŸå€¤ã¨æ¯”較ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è¨­å®šã‚’å–å¾—ã—ã¾ã™ã€‚既存ã®å€¤ã¨ã¯ç•°ãªã‚‹å€¤ã¯ã™ã¹ã¦æ›´æ–°ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:205 msgid "``state: absent`` uses the existing configuration to see if the item exists and needs to be deleted." msgstr "``state: absent`` ã¯ã€æ—¢å­˜ã®è¨­å®šã‚’使用ã—ã¦é …ç›®ãŒå­˜åœ¨ã—ã€å‰Šé™¤ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:206 msgid "``state: query`` uses this to perform the query for the task and report back the existing data." msgstr "``state: query`` ã¯ã€ã“れを使用ã—ã¦ã‚¿ã‚¹ã‚¯ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’実行ã—ã€æ—¢å­˜ã®ãƒ‡ãƒ¼ã‚¿ã‚’報告ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:214 msgid "When state is present" msgstr "state ㌠present ã®å ´åˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:215 msgid "When ``state: present``, the module needs to perform a diff against the existing configuration and the task entries. If any value needs to be updated, then the module will make a POST request with only the items that need to be updated. Some modules have children that are in a 1-to-1 relationship with another object; for these cases, the module can be used to manage the child objects." msgstr "``state: present`` ã®å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ—¢å­˜ã®è¨­å®šã¨ã‚¿ã‚¹ã‚¯ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«å¯¾ã—㦠diff を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚値を更新ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ›´æ–°ãŒå¿…è¦ãªã‚¢ã‚¤ãƒ†ãƒ ã®ã¿ãŒå«ã¾ã‚Œã‚‹ POST è¦æ±‚を行ã„ã¾ã™ã€‚モジュールã«ã‚ˆã£ã¦ã¯ã€åˆ¥ã®ã‚ªãƒ–ジェクト㨠1 対 1 ã®é–¢ä¿‚ã«ã‚ã‚‹å­ãŒã‚りã¾ã™ã€‚ã“れらã®å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å­ã‚ªãƒ–ジェクトを管ç†ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:218 msgid "Building the ACI payload" msgstr "ACI ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã®æ§‹ç¯‰" #: ../../rst/dev_guide/developing_modules_general_aci.rst:219 msgid "The ``aci.payload()`` method is used to build a dictionary of the proposed object configuration. All parameters that were not provided a value in the task will be removed from the dictionary (both for the object and its children). Any parameter that does have a value will be converted to a string and added to the final dictionary object that will be used for comparison against the existing configuration." msgstr "``aci.payload()`` メソッドã¯ã€ææ¡ˆã•れãŸã‚ªãƒ–ジェクト設定ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼æ§‹ç¯‰ã«ä½¿ç”¨ã•れã¾ã™ã€‚タスクã§å€¤ãŒæä¾›ã•れã¦ã„ãªã„パラメーターã¯ã™ã¹ã¦ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ (オブジェクトã¨ãã®å­ã®ä¸¡æ–¹) ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚値ã®ã‚ã‚‹ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã¯æ–‡å­—列ã«å¤‰æ›ã•ã‚Œã€æ—¢å­˜ã®è¨­å®šã¨ã®æ¯”較ã«ä½¿ç”¨ã•れる最終ディクショナリーオブジェクトã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:221 msgid "The ``aci.payload()`` method takes two required arguments and 1 optional argument, depending on if the module manages child objects." msgstr "``aci.payload()`` メソッドã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå­ã‚ªãƒ–ジェクトを管ç†ã™ã‚‹ã‹ã©ã†ã‹ã«å¿œã˜ã¦ã€2 ã¤ã®å¿…須引数ã¨ã€1 ã¤ã®ä»»æ„ã®å¼•æ•°ã‚’å–りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:223 msgid "``aci_class`` is the APIC name for the object's class, for example ``aci_class='fvBD'``" msgstr "``aci_class`` ã¯ã€ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ã® APIC åã§ã™ã€‚ãŸã¨ãˆã°ã€``aci_class='fvBD'`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:224 msgid "``class_config`` is the appropriate dictionary to be used as the payload for the POST request" msgstr "``class_config`` 㯠POST è¦æ±‚ã®ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹é©åˆ‡ãªãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:226 msgid "The keys should match the names used by the APIC." msgstr "キー㯠APIC ã§ä½¿ç”¨ã•れるåå‰ã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:227 msgid "The values should be the corresponding value in ``module.params``; these are the variables defined above" msgstr "``module.params`` ã®å¯¾å¿œã™ã‚‹å€¤ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã“れらã¯ä¸Šã§å®šç¾©ã•れる変数ã§ã™" #: ../../rst/dev_guide/developing_modules_general_aci.rst:229 msgid "``child_configs`` is optional, and is a list of child config dictionaries." msgstr "``child_configs`` ã¯ä»»æ„ã§ã‚りã€å­è¨­å®šã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ä¸€è¦§ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:231 msgid "The child configs include the full child object dictionary, not just the attributes configuration portion." msgstr "å­è¨­å®šã«ã¯ã€å±žæ€§è¨­å®šéƒ¨åˆ†ã ã‘ã§ãªãã€å®Œå…¨ãªå­ã‚ªãƒ–ジェクトディクショナリーãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:232 msgid "The configuration portion is built the same way as the object." msgstr "設定部分ã¯ã€ã‚ªãƒ–ジェクトã¨åŒã˜æ–¹æ³•ã§æ§‹ç¯‰ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:256 msgid "Performing the request" msgstr "è¦æ±‚ã®å®Ÿè¡Œ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:257 msgid "The ``get_diff()`` method is used to perform the diff, and takes only one required argument, ``aci_class``. Example: ``aci.get_diff(aci_class='fvBD')``" msgstr "``get_diff()`` メソッド㯠diff を実行ã—ã€å¿…è¦ãªå¼•æ•° ``aci_class`` ã‚’ 1 ã¤ã ã‘å–りã¾ã™ã€‚ãŸã¨ãˆã° ``aci.get_diff(aci_class='fvBD')`` ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:260 msgid "The ``post_config()`` method is used to make the POST request to the APIC if needed. This method doesn't take any arguments and handles check mode. Example: ``aci.post_config()``" msgstr "``post_config()`` メソッドã¯ã€å¿…è¦ã«å¿œã˜ã¦ APIC ã¸ã® POST è¦æ±‚を行ã†ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å¼•æ•°ã‚’å—ã‘付ã‘ãšã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’処ç†ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``aci.post_config()`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:265 msgid "Example code" msgstr "サンプルコード" #: ../../rst/dev_guide/developing_modules_general_aci.rst:295 msgid "When state is absent" msgstr "state ㌠absent ã®å ´åˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:296 msgid "If the task sets the state to absent, then the ``delete_config()`` method is all that is needed. This method does not take any arguments, and handles check mode." msgstr "タスク㌠state ã‚’ absent ã«è¨­å®šã™ã‚‹ã¨ã€``delete_config()`` メソッドã®ã¿ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å¼•æ•°ã‚’å–らãšã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’処ç†ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:305 msgid "Exiting the module" msgstr "モジュールã®çµ‚了" #: ../../rst/dev_guide/developing_modules_general_aci.rst:306 msgid "To have the module exit, call the ACIModule method ``exit_json()``. This method automatically takes care of returning the common return values for you." msgstr "モジュールを終了ã™ã‚‹ã«ã¯ã€ACIModule メソッド ``exit_json()`` を呼ã³å‡ºã—ã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ä¸€èˆ¬çš„ãªæˆ»ã‚Šå€¤ã‚’è¿”ã™ã“ã¨ã‚’自動的ã«è¡Œã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:319 msgid "Testing ACI library functions" msgstr "ACI ライブラリー関数ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:320 msgid "You can test your ``construct_url()`` and ``payload()`` arguments without accessing APIC hardware by using the following python script:" msgstr "以下㮠python スクリプトを使用ã—ã¦ã€APIC ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«ã‚¢ã‚¯ã‚»ã‚¹ã›ãšã« ``construct_url()`` 引数ãŠã‚ˆã³ ``payload()`` 引数をテストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:379 msgid "This will result in:" msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ãŒç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:393 msgid "Testing for sanity checks" msgstr "å¥å…¨æ€§ãƒã‚§ãƒƒã‚¯ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:394 msgid "You can run from your fork something like:" msgstr "次ã®ã‚ˆã†ãªãƒ•ォークã‹ã‚‰å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:402 #: ../../rst/dev_guide/testing.rst:33 msgid ":ref:`testing_sanity`" msgstr ":ref:`testing_sanity`" #: ../../rst/dev_guide/developing_modules_general_aci.rst:403 msgid "Information on how to build sanity tests." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’構築ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹æƒ…å ±" #: ../../rst/dev_guide/developing_modules_general_aci.rst:407 msgid "Testing ACI integration tests" msgstr "ACI çµ±åˆãƒ†ã‚¹ãƒˆã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_aci.rst:408 #: ../../rst/dev_guide/developing_modules_general_aci.rst:438 msgid "You can run this:" msgstr "以下を実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:414 msgid "You may need to add ``--python 2.7`` or ``--python 3.6`` in order to use the correct python version for performing tests." msgstr "テストã®å®Ÿè¡Œã«é©åˆ‡ãª python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã™ã‚‹ã«ã¯ã€``--python 2.7`` ã¾ãŸã¯ ``--python 3.6`` を追加ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:416 msgid "You may want to edit the used inventory at *test/integration/inventory.networking* and add something like:" msgstr "*test/integration/inventory.networking* ã§ä½¿ç”¨ã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’編集ã—ã€ä»¥ä¸‹ã®ã‚ˆã†ã«è¿½åŠ ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_aci.rst:432 #: ../../rst/dev_guide/testing.rst:37 msgid ":ref:`testing_integration`" msgstr ":ref:`testing_integration`" #: ../../rst/dev_guide/developing_modules_general_aci.rst:433 msgid "Information on how to build integration tests." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®æ§‹ç¯‰æ–¹æ³•ã«é–¢ã™ã‚‹æƒ…報。" #: ../../rst/dev_guide/developing_modules_general_aci.rst:437 msgid "Testing for test coverage" msgstr "テストカãƒãƒ¬ãƒ¼ã‚¸ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:5 msgid "Windows module development walkthrough" msgstr "Windows モジュール開発ウォークスルー" #: ../../rst/dev_guide/developing_modules_general_windows.rst:7 msgid "In this section, we will walk through developing, testing, and debugging an Ansible Windows module." msgstr "本セクションã§ã¯ã€Ansible Windows モジュールã®é–‹ç™ºã€ãƒ†ã‚¹ãƒˆã€ãŠã‚ˆã³ãƒ‡ãƒãƒƒã‚°ã®é–‹ç™ºæ‰‹é † (ウォークスルー) を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:10 msgid "Because Windows modules are written in Powershell and need to be run on a Windows host, this guide differs from the usual development walkthrough guide." msgstr "Windows モジュール㯠Powershell ã§æ›¸ã‹ã‚Œã¦ãŠã‚Šã€Windows ホスト上ã§å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ã‚¬ã‚¤ãƒ‰ã¯é€šå¸¸ã®é–‹ç™ºã‚¦ã‚©ãƒ¼ã‚¯ã‚¹ãƒ«ãƒ¼ã‚¬ã‚¤ãƒ‰ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:20 msgid "Windows environment setup" msgstr "Windows 環境ã®è¨­å®š" #: ../../rst/dev_guide/developing_modules_general_windows.rst:22 msgid "Unlike Python module development which can be run on the host that runs Ansible, Windows modules need to be written and tested for Windows hosts. While evaluation editions of Windows can be downloaded from Microsoft, these images are usually not ready to be used by Ansible without further modification. The easiest way to set up a Windows host so that it is ready to by used by Ansible is to set up a virtual machine using Vagrant. Vagrant can be used to download existing OS images called *boxes* that are then deployed to a hypervisor like VirtualBox. These boxes can either be created and stored offline or they can be downloaded from a central repository called Vagrant Cloud." msgstr "Ansible を実行ã™ã‚‹ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã§ãã‚‹ Python モジュール開発ã¨ã¯ç•°ãªã‚Šã€Windows ホスト用㫠Windows モジュールを作æˆãŠã‚ˆã³ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Windows ã®è©•価エディションを Microsoft ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ãŒã€é€šå¸¸ã¯ã“れらã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’追加ã®å¤‰æ›´ãªã—ã§ Ansible ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。Ansible ã§ä½¿ç”¨ã™ã‚‹æº–å‚™ãŒæ•´ã†ã‚ˆã†ã« Windows ホストを設定ã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€Vagrant を使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’設定ã™ã‚‹ã“ã¨ã«ã‚りã¾ã™ã€‚Vagrant を使用ã™ã‚‹ã¨ã€*ボックス* ã¨å‘¼ã°ã‚Œã‚‹æ—¢å­˜ã® OS イメージをダウンロードã—ã€VirtualBox ã®ã‚ˆã†ãªãƒã‚¤ãƒ‘ーãƒã‚¤ã‚¶ãƒ¼ã«ãƒ‡ãƒ—ロイã•れã¾ã™ã€‚ã“れらã®ãƒœãƒƒã‚¯ã‚¹ã¯ã€ã‚ªãƒ•ラインã§ä½œæˆãŠã‚ˆã³ä¿å­˜ã™ã‚‹ã‹ã€Vagrant Cloud ã¨å‘¼ã°ã‚Œã‚‹ä¸­å¤®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:33 #, python-format msgid "This guide will use the Vagrant boxes created by the `packer-windoze `_ repository which have also been uploaded to `Vagrant Cloud `_. To find out more info on how these images are created, please go to the GitHub repo and look at the ``README`` file." msgstr "本ガイドã§ã¯ã€`packer-windoze `_ リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ˆã‚Šä½œæˆã•れ㟠Vagrant ボックスを使用ã—ã¾ã™ã€‚ã“れã¯ã€`Vagrant Cloud `_ ã«ã‚¢ãƒƒãƒ—ロードã•れã¾ã—ãŸã€‚ã“れらã®ç”»åƒãŒã©ã®ã‚ˆã†ã«ä½œæˆã•れるã‹ã«ã¤ã„ã¦ã®è©³ç´°ã¯ã€GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã§ ``README`` ファイルを確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:38 msgid "Before you can get started, the following programs must be installed (please consult the Vagrant and VirtualBox documentation for installation instructions):" msgstr "作業を開始ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ãƒ—ログラムをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (インストール方法㯠Vagrant ãŠã‚ˆã³ VirtualBox ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:41 msgid "Vagrant" msgstr "Vagrant" #: ../../rst/dev_guide/developing_modules_general_windows.rst:42 msgid "VirtualBox" msgstr "VirtualBox" #: ../../rst/dev_guide/developing_modules_general_windows.rst:45 msgid "Create a Windows server in a VM" msgstr "仮想マシン㧠Windows サーãƒãƒ¼ã‚’作æˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:47 msgid "To create a single Windows Server 2016 instance, run the following:" msgstr "1 ã¤ã® Windows Server 2016 インスタンスを作æˆã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:54 msgid "This will download the Vagrant box from Vagrant Cloud and add it to the local boxes on your host and then start up that instance in VirtualBox. When starting for the first time, the Windows VM will run through the sysprep process and then create a HTTP and HTTPS WinRM listener automatically. Vagrant will finish its process once the listeners are online, after which the VM can be used by Ansible." msgstr "ã“れã«ã‚ˆã‚Šã€Vagrant Cloud ã‹ã‚‰ Vagrant ボックスをダウンロードã—ã€ãƒ›ã‚¹ãƒˆã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒœãƒƒã‚¯ã‚¹ã«è¿½åŠ ã—ã¦ã€VirtualBox ã§ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’èµ·å‹•ã—ã¾ã™ã€‚åˆã‚ã¦èµ·å‹•ã™ã‚‹ã¨ã€Windows 仮想マシン㌠sysprep プロセスを介ã—ã¦å®Ÿè¡Œã—ã€HTTP ãŠã‚ˆã³ HTTPS WinRM リスナーを自動的ã«ä½œæˆã—ã¾ã™ã€‚Vagrant ã¯ã€ãƒªã‚¹ãƒŠãƒ¼ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚‹ã¨ãƒ—ロセスを終了ã—ã¾ã™ã€‚ãã®å¾Œã€Ansible ã§ä»®æƒ³ãƒžã‚·ãƒ³ã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:61 msgid "Create an Ansible inventory" msgstr "Ansible インベントリーã®ä½œæˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:63 msgid "The following Ansible inventory file can be used to connect to the newly created Windows VM:" msgstr "以下㮠Ansible インベントリーファイルを使用ã—ã¦ã€æ–°ã—ã作æˆã—㟠Windows ä»®æƒ³ãƒžã‚·ãƒ³ã«æŽ¥ç¶šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:79 msgid "The port ``55986`` is automatically forwarded by Vagrant to the Windows host that was created, if this conflicts with an existing local port then Vagrant will automatically use another one at random and display show that in the output." msgstr "ãƒãƒ¼ãƒˆ ``55986`` ã¯ã€Vagrant ã«ã‚ˆã£ã¦ä½œæˆã•れ㟠Windows ホストã«è‡ªå‹•çš„ã«è»¢é€ã•れã¾ã™ã€‚ã“ã‚ŒãŒæ—¢å­˜ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆã¨ç«¶åˆã™ã‚‹å ´åˆã€Vagrant ã¯è‡ªå‹•çš„ã«åˆ¥ã®ãƒãƒ¼ãƒˆã‚’ランダムã«ä½¿ç”¨ã—ã€å‡ºåŠ›ã«ãれを表示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:84 msgid "The OS that is created is based on the image set. The following images can be used:" msgstr "作æˆã•れる OS ã¯ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚»ãƒƒãƒˆã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚次ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:87 msgid "`jborean93/WindowsServer2008-x86 `_" msgstr "`jborean93/WindowsServer2008-x86 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:88 msgid "`jborean93/WindowsServer2008-x64 `_" msgstr "`jborean93/WindowsServer2008-x64 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:89 msgid "`jborean93/WindowsServer2008R2 `_" msgstr "`jborean93/WindowsServer2008R2 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:90 msgid "`jborean93/WindowsServer2012 `_" msgstr "`jborean93/WindowsServer2012 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:91 msgid "`jborean93/WindowsServer2012R2 `_" msgstr "`jborean93/WindowsServer2012R2 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:92 msgid "`jborean93/WindowsServer2016 `_" msgstr "`jborean93/WindowsServer2016 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:93 msgid "`jborean93/WindowsServer2019 `_" msgstr "`jborean93/WindowsServer2019 `_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:95 msgid "When the host is online, it can accessible by RDP on ``127.0.0.1:3389`` but the port may differ depending if there was a conflict. To get rid of the host, run ``vagrant destroy --force`` and Vagrant will automatically remove the VM and any other files associated with that VM." msgstr "ホストãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã£ãŸã‚‰ã€``127.0.0.1:3389`` ã§ RDP ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ãŒã€ç«¶åˆãŒã‚ã£ãŸã‹ã©ã†ã‹ã«ã‚ˆã£ã¦ãƒãƒ¼ãƒˆãŒç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ホストをå–り除ãã«ã¯ã€``vagrant destroy --force`` を実行ã™ã‚‹ã¨ã€Vagrant ãŒã€ä»®æƒ³ãƒžã‚·ãƒ³ã¨ãã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢é€£ä»˜ã‘られãŸãã®ä»–ã®ãƒ•ァイルを自動的ã«å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:100 msgid "While this is useful when testing modules on a single Windows instance, these host won't work without modification with domain based modules. The Vagrantfile at `ansible-windows `_ can be used to create a test domain environment to be used in Ansible. This repo contains three files which are used by both Ansible and Vagrant to create multiple Windows hosts in a domain environment. These files are:" msgstr "ã“れã¯ã€å˜ä¸€ã® Windows インスタンスã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’テストã™ã‚‹éš›ã«å½¹ç«‹ã¡ã¾ã™ãŒã€ã“れらã®ãƒ›ã‚¹ãƒˆã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ãƒ™ãƒ¼ã‚¹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å¤‰æ›´ã›ãšã«å‹•作ã—ã¾ã›ã‚“。`ansible-windows `_ ã® Vagrant を使用ã—ã¦ã€Ansible ã§ä½¿ç”¨ã™ã‚‹ãƒ†ã‚¹ãƒˆãƒ‰ãƒ¡ã‚¤ãƒ³ç’°å¢ƒã‚’作æˆã§ãã¾ã™ã€‚ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ã€Ansible 㨠Vagrant ã§ä½¿ç”¨ã•れã¦ã„ã‚‹ 3 ã¤ã®ãƒ•ァイルãŒå«ã¾ã‚Œã€ãƒ‰ãƒ¡ã‚¤ãƒ³ç’°å¢ƒã§è¤‡æ•°ã® Windows ホストを作æˆã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:107 msgid "``Vagrantfile``: The Vagrant file that reads the inventory setup of ``inventory.yml`` and provisions the hosts that are required" msgstr "``Vagrantfile`` - ``inventory.yml`` ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šã‚’読ã¿è¾¼ã‚“ã§ã€å¿…è¦ãªãƒ›ã‚¹ãƒˆã‚’プロビジョニングã™ã‚‹ Vagrant ファイルã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:108 msgid "``inventory.yml``: Contains the hosts that are required and other connection information such as IP addresses and forwarded ports" msgstr "``inventory.yml`` - å¿…è¦ãªãƒ›ã‚¹ãƒˆã¨ã€IP アドレスや転é€ãƒãƒ¼ãƒˆãªã©ã®ä»–ã®æŽ¥ç¶šæƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:109 msgid "``main.yml``: Ansible playbook called by Vagrant to provision the domain controller and join the child hosts to the domain" msgstr "``main.yml`` - Vagrant ã«å‘¼ã³å‡ºã•れ㟠Ansible Playbook ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚’プロビジョニングã—ã€å­ãƒ›ã‚¹ãƒˆã‚’ドメインã«å‚加ã•ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:111 msgid "By default, these files will create the following environment:" msgstr "デフォルトã§ã¯ã€ã“れらã®ãƒ•ァイルã¯ä»¥ä¸‹ã®ç’°å¢ƒã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:113 msgid "A single domain controller running on Windows Server 2016" msgstr "Windows Server 2016 ã§å®Ÿè¡Œã—ã¦ã„るドメインコントローラー 1 ã¤" #: ../../rst/dev_guide/developing_modules_general_windows.rst:114 msgid "Five child hosts for each major Windows Server version joined to that domain" msgstr "ドメインã«å‚加ã—ã¦ã„ã‚‹å„ Windows Server ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å­ãƒ›ã‚¹ãƒˆ 5 å°" #: ../../rst/dev_guide/developing_modules_general_windows.rst:115 msgid "A domain with the DNS name ``domain.local``" msgstr "DNS å ``domain.local`` ã‚’æŒã¤ãƒ‰ãƒ¡ã‚¤ãƒ³" #: ../../rst/dev_guide/developing_modules_general_windows.rst:116 msgid "A local administrator account on each host with the username ``vagrant`` and password ``vagrant``" msgstr "å„ホストã®ãƒ­ãƒ¼ã‚«ãƒ«ç®¡ç†è€…アカウント (ユーザーå ``vagrant`` ãŠã‚ˆã³ãƒ‘スワード ``vagrant``)" #: ../../rst/dev_guide/developing_modules_general_windows.rst:117 msgid "A domain admin account ``vagrant-domain@domain.local`` with the password ``VagrantPass1``" msgstr "パスワード ``VagrantPass1`` ã‚’å«ã‚€ãƒ‰ãƒ¡ã‚¤ãƒ³ç®¡ç†è€…アカウント ``vagrant-domain@domain.local``" #: ../../rst/dev_guide/developing_modules_general_windows.rst:119 msgid "The domain name and accounts can be modified by changing the variables ``domain_*`` in the ``inventory.yml`` file if it is required. The inventory file can also be modified to provision more or less servers by changing the hosts that are defined under the ``domain_children`` key. The host variable ``ansible_host`` is the private IP that will be assigned to the VirtualBox host only network adapter while ``vagrant_box`` is the box that will be used to create the VM." msgstr "ドメインåãŠã‚ˆã³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’変更ã™ã‚‹ã«ã¯ã€å¿…è¦ãªå ´åˆã« ``inventory.yml`` ファイルã®å¤‰æ•° ``domain_*`` を変更ã™ã‚‹ã“ã¨ã§å¤‰æ›´ã§ãã¾ã™ã€‚インベントリーファイルã¯ã€``domain_children`` キーã§å®šç¾©ã•れるホストを変更ã—ã¦ã€ã‚ˆã‚Šå°‘ãªã„サーãƒãƒ¼ã‚’プロビジョニングã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ホスト変数 ``ansible_host`` ã¯ã€VirtualBox ホストã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ãƒ—ライベート IP ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ€ãƒ—ターã®ã¿ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ãŒã€``vagrant_box`` ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆã«ä½¿ç”¨ã™ã‚‹ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:128 msgid "Provisioning the environment" msgstr "環境ã®ãƒ—ロビジョニング" #: ../../rst/dev_guide/developing_modules_general_windows.rst:130 msgid "To provision the environment as is, run the following:" msgstr "環境をãã®ã¾ã¾ãƒ—ロビジョニングã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:138 msgid "Vagrant provisions each host sequentially so this can take some time to complete. If any errors occur during the Ansible phase of setting up the domain, run ``vagrant provision`` to rerun just that step." msgstr "Vagrant ã¯å„ホストを順番ã«ãƒ—ロビジョニングã™ã‚‹ãŸã‚ã€å®Œäº†ã™ã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ドメイン設定㮠Ansible フェーズ中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€``vagrant provision`` を実行ã—ã¦ãã®ã‚¹ãƒ†ãƒƒãƒ—ã ã‘ã‚’å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:142 msgid "Unlike setting up a single Windows instance with Vagrant, these hosts can also be accessed using the IP address directly as well as through the forwarded ports. It is easier to access it over the host only network adapter as the normal protocol ports are used, for example RDP is still over ``3389``. In cases where the host cannot be resolved using the host only network IP, the following protocols can be access over ``127.0.0.1`` using these forwarded ports:" msgstr "Vagrant ã§å˜ä¸€ã® Windows インスタンスをセットアップã™ã‚‹ã®ã¨ã¯ç•°ãªã‚Šã€ã“れらã®ãƒ›ã‚¹ãƒˆã¯ã€è»¢é€ã•れãŸãƒãƒ¼ãƒˆã‚’介ã—ã¦ã ã‘ã§ãªãã€IP アドレスを使用ã—ã¦ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ホストã®ã¿ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ€ãƒ—ターを使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹æ–¹ãŒã€é€šå¸¸ã®ãƒ—ロトコルã®ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•れるãŸã‚ç°¡å˜ã§ã™ã€‚ãŸã¨ãˆã°ã€RDP ã¯ã¾ã  ``3389`` ã§ã§ä½¿ç”¨ã•れã¾ã™ã€‚ホストã®ã¿ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ IP を使用ã—ã¦ãƒ›ã‚¹ãƒˆã‚’解決ã§ããªã„å ´åˆã€ä»¥ä¸‹ã®ãƒ—ロトコルã¯ã€ã“れらã®è»¢é€ã•れãŸãƒãƒ¼ãƒˆã‚’使用ã—㦠``127.0.0.1`` を介ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:149 msgid "``RDP``: 295xx" msgstr "``RDP``: 295xx" #: ../../rst/dev_guide/developing_modules_general_windows.rst:150 msgid "``SSH``: 296xx" msgstr "``SSH``: 296xx" #: ../../rst/dev_guide/developing_modules_general_windows.rst:151 msgid "``WinRM HTTP``: 297xx" msgstr "``WinRM HTTP``: 297xx" #: ../../rst/dev_guide/developing_modules_general_windows.rst:152 msgid "``WinRM HTTPS``: 298xx" msgstr "``WinRM HTTPS``: 298xx" #: ../../rst/dev_guide/developing_modules_general_windows.rst:153 msgid "``SMB``: 299xx" msgstr "``SMB``: 299xx" #: ../../rst/dev_guide/developing_modules_general_windows.rst:155 msgid "Replace ``xx`` with the entry number in the inventory file where the domain controller started with ``00`` and is incremented from there. For example, in the default ``inventory.yml`` file, WinRM over HTTPS for ``SERVER2012R2`` is forwarded over port ``29804`` as it's the fourth entry in ``domain_children``." msgstr "``xx`` ã‚’ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãŒ ``00`` ã‹ã‚‰é–‹å§‹ã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ç•ªå·ã«ç½®æ›ãˆã¾ã™ã€‚値ãŒã‚¤ãƒ³ã‚¯ãƒªãƒ¡ãƒ³ãƒˆã•れã¦ã„ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ‡ãƒ•ォルトã§ã¯ã€``domain_children`` ã® 4 番目ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ã‚ã‚‹ãŸã‚ã€``inventory.yml`` ファイル (WinRM over HTTPS for ``SERVER2012R2``) ãŒãƒãƒ¼ãƒˆ ``29804`` 経由ã§è»¢é€ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:160 msgid "While an SSH server is available on all Windows hosts but Server 2008 (non R2), it is not a support connection for Ansible managing Windows hosts and should not be used with Ansible." msgstr "SSH サーãƒãƒ¼ã¯ã™ã¹ã¦ã® Windows ホストã§åˆ©ç”¨ã§ãã¾ã™ãŒã€Server 2008 (R2 以外) ã¯ã€Ansible ãŒç®¡ç†ã™ã‚‹ Windows ホストã®ç®¡ç†æŽ¥ç¶šã§ã¯ãªãã€Ansible ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:165 msgid "Windows new module development" msgstr "Windows æ–°ã—ã„モジュール開発" #: ../../rst/dev_guide/developing_modules_general_windows.rst:167 msgid "When creating a new module there are a few things to keep in mind:" msgstr "æ–°ã—ã„モジュールを作æˆã™ã‚‹éš›ã«ã¯ã€ä»¥ä¸‹ã®ç‚¹ã«ç•™æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:169 msgid "Module code is in Powershell (.ps1) files while the documentation is contained in Python (.py) files of the same name" msgstr "モジュールã®ã‚³ãƒ¼ãƒ‰ã¯ Powershell (.ps1) ファイルã«ã‚りã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯åŒã˜åå‰ã® Python (.py) ファイルã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:170 msgid "Avoid using ``Write-Host/Debug/Verbose/Error`` in the module and add what needs to be returned to the ``$module.Result`` variable" msgstr "モジュールã§ã¯ ``Write-Host/Debug/Verbose/Error`` を使用ã›ãšã€``$module.Result`` 変数ã«è¿”ã™å¿…è¦ã®ã‚ã‚‹ã‚‚ã®ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:171 msgid "To fail a module, call ``$module.FailJson(\"failure message here\")``, an Exception or ErrorRecord can be set to the second argument for a more descriptive error message" msgstr "モジュールを失敗ã•ã›ã‚‹ã«ã¯ã€``$module.FailJson(\"failure message here\")`` を呼ã³å‡ºã—ã¦ã€Exception ã¾ãŸã¯ ErrorRecord ã‚’ 2 番目ã®å¼•æ•°ã«è¨­å®šã—ã¦ã€ã‚ˆã‚Šè©³ç´°ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:172 msgid "You can pass in the exception or ErrorRecord as a second argument to ``FailJson(\"failure\", $_)`` to get a more detailed output" msgstr "例外ã¾ãŸã¯ ErrorRecord ã‚’ 2 ã¤ç›®ã®å¼•æ•°ã¨ã—㦠``FailJson(\"failure\", $_)`` ã«æ¸¡ã™ã¨ã€ã‚ˆã‚Šè©³ç´°ãªå‡ºåŠ›ã‚’å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:173 msgid "Most new modules require check mode and integration tests before they are merged into the main Ansible codebase" msgstr "ã»ã¨ã‚“ã©ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ã€ä¸»è¦ãª Ansible コードベースã«ãƒžãƒ¼ã‚¸ã™ã‚‹å‰ã«ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¨çµ±åˆãƒ†ã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:174 msgid "Avoid using try/catch statements over a large code block, rather use them for individual calls so the error message can be more descriptive" msgstr "å¤§è¦æ¨¡ãªã‚³ãƒ¼ãƒ‰ãƒ–ロック㧠try/catch 文を使用ã—ãªã„よã†ã«ã—ã€å€‹åˆ¥ã®å‘¼ã³å‡ºã—ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒã‚ˆã‚Šåˆ†ã‹ã‚Šã‚„ã™ããªã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:175 msgid "Try and catch specific exceptions when using try/catch statements" msgstr "try/catch æ–‡ã®ä½¿ç”¨æ™‚ã«ç‰¹å®šã®ä¾‹å¤–を試ã—ã¦æ•㈠(キャッãƒã—) ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:176 msgid "Avoid using PSCustomObjects unless necessary" msgstr "å¿…è¦ãªå ´åˆã‚’除ã PSCustomObject ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:177 msgid "Look for common functions in ``./lib/ansible/module_utils/powershell/`` and use the code there instead of duplicating work. These can be imported by adding the line ``#Requires -Module *`` where * is the filename to import, and will be automatically included with the module code sent to the Windows target when run via Ansible" msgstr "é‡è¤‡ã™ã‚‹ä½œæ¥­ã‚’行ã‚ãªã„よã†ã«ã€``./lib/ansible/module_utils/powershell/`` ã«ã‚る共通ã®é–¢æ•°ã‚’探ã—ã¦ã€ãã“ã«ã‚るコードを使用ã—ã¦ãã ã•ã„。ã“れらã®é–¢æ•°ã¯ ``#Requires -Module *`` ã¨ã„ã†è¡Œã‚’追加ã™ã‚‹ã“ã¨ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚* ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ•ァイルåã§ã€Ansible を介ã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã«ã€è‡ªå‹•的㫠Windows ターゲットã«é€ä¿¡ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:178 msgid "As well as PowerShell module utils, C# module utils are stored in ``./lib/ansible/module_utils/csharp/`` and are automatically imported in a module execution if the line ``#AnsibleRequires -CSharpUtil *`` is present" msgstr "PowerShell モジュールユーティリティーã®ä»–ã«ã€C# モジュールユーティリティー㌠``./lib/ansible/module_utils/csharp/`` ã«æœ¬ã•れã€``#AnsibleRequires -CSharpUtil *`` 行ãŒå­˜åœ¨ã™ã‚‹å ´åˆã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã«è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:179 msgid "C# and PowerShell module utils achieve the same goal but C# allows a developer to implement low level tasks, such as calling the Win32 API, and can be faster in some cases" msgstr "C# 㨠PowerShell モジュールã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯åŒã˜ç›®æ¨™ã‚’锿ˆã—ã¾ã™ãŒã€C# を使用ã™ã‚‹ã¨ã€é–‹ç™ºè€…㯠Win32 API ã®å‘¼ã³å‡ºã—ãªã©ã®ä½Žãƒ¬ãƒ™ãƒ«ã®ã‚¿ã‚¹ã‚¯ã‚’実装ã§ãã€å ´åˆã«ã‚ˆã£ã¦ã¯ã‚ˆã‚Šé«˜é€Ÿã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:180 msgid "Ensure the code runs under Powershell v3 and higher on Windows Server 2008 and higher; if higher minimum Powershell or OS versions are required, ensure the documentation reflects this clearly" msgstr "ã“ã®ã‚³ãƒ¼ãƒ‰ãŒ Windows Server 2008 以é™ã® Powershell v3 以é™ã§å‹•作ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。最å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šæ–°ã—ã„ Powershell ã¾ãŸã¯ OS ãŒå¿…è¦ãªå ´åˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã“ã®å†…å®¹ãŒæ˜Žç¢ºã«å映ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:181 msgid "Ansible runs modules under strictmode version 2.0. Be sure to test with that enabled by putting ``Set-StrictMode -Version 2.0`` at the top of your dev script" msgstr "Ansible ã¯ã€strictmode ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚å¿…ãšã€é–‹ç™ºã‚¹ã‚¯ãƒªãƒ—トã®å†’é ­ã« ``Set-StrictMode -Version 2.0`` ã¨è¨˜è¿°ã—ã¦ã€ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã—ã¦ãƒ†ã‚¹ãƒˆã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:182 msgid "Favor native Powershell cmdlets over executable calls if possible" msgstr "å¯èƒ½ã§ã‚れã°ã€å®Ÿè¡Œå¯èƒ½ãªå‘¼ã³å‡ºã—よりもã€ãƒã‚¤ãƒ†ã‚£ãƒ–ã® Powershell コマンドレットを優先ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:183 msgid "Use the full cmdlet name instead of aliases, for example ``Remove-Item`` over ``rm``" msgstr "エイリアスã®ä»£ã‚りã«å®Œå…¨ãªã‚³ãƒžãƒ³ãƒ‰ãƒ¬ãƒƒãƒˆåを使用ã—ã¦ãã ã•ã„ (例: ``rm`` ã§ã¯ãªã ``Remove-Item`` を使用)。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:184 msgid "Use named parameters with cmdlets, for example ``Remove-Item -Path C:\\temp`` over ``Remove-Item C:\\temp``" msgstr "コマンドレットã§åå‰ä»˜ãパラメーターを使用ã—ã¾ã™ (例: ``Remove-Item C:\\temp`` ã§ã¯ãªã ``Remove-Item -Path C:\\temp`` を使用)。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:186 msgid "A very basic Powershell module `win_environment `_ incorporates best practices for Powershell modules. It demonstrates how to implement check-mode and diff-support, and also shows a warning to the user when a specific condition is met." msgstr "éžå¸¸ã«åŸºæœ¬çš„㪠Powershell モジュール `win_environment `_ ãŒã€Powershell モジュールã®ãƒ™ã‚¹ãƒˆãƒ—ラクティスã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れã¯ã€check-mode ãŠã‚ˆã³ diff-support を実装ã™ã‚‹æ–¹æ³•を示ã—ã€ç‰¹å®šã®æ¡ä»¶ãŒæº€ãŸã•れるã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:188 msgid "A slightly more advanced module is `win_uri `_ which additionally shows how to use different parameter types (bool, str, int, list, dict, path) and a selection of choices for parameters, how to fail a module and how to handle exceptions." msgstr "ã‚‚ã†å°‘ã—高度ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦ã¯ `win_uri `_ ãŒã‚りã¾ã™ãŒã€ã“ã“ã§ã€ã•ã¾ã–ã¾ãªãƒ‘ラメーター型 (boolã€strã€intã€listã€dictã€path) ã®ä½¿ç”¨æ–¹æ³•やパラメーターã®é¸æŠžæ–¹æ³•ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’失敗ã•ã›ã‚‹æ–¹æ³•ã€ä¾‹å¤–ã®å‡¦ç†æ–¹æ³•ãªã©ã‚’紹介ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:190 msgid "As part of the new ``AnsibleModule`` wrapper, the input parameters are defined and validated based on an argument spec. The following options can be set at the root level of the argument spec:" msgstr "æ–°ã—ã„ ``AnsibleModule`` ラッパーã®ä¸€éƒ¨ã¨ã—ã¦ã€å…¥åŠ›ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã¯å¼•æ•°ã®ä»•様ã«åŸºã¥ã„ã¦å®šç¾©ãŠã‚ˆã³æ¤œè¨¼ã•れã¾ã™ã€‚以下ã®ã‚ªãƒ—ションã¯ã€å¼•数仕様ã®ãƒ«ãƒ¼ãƒˆãƒ¬ãƒ™ãƒ«ã§è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:193 msgid "``mutually_exclusive``: A list of lists, where the inner list contains module options that cannot be set together" msgstr "``mutually_exclusive``: リストã®ãƒªã‚¹ãƒˆã§ã€å†…å´ã®ãƒªã‚¹ãƒˆã«ã¯ä¸€ç·’ã«è¨­å®šã§ããªã„モジュールオプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:194 msgid "``no_log``: Stops the module from emitting any logs to the Windows Event log" msgstr "``no_log``: モジュール㌠Windows イベントログã«ãƒ­ã‚°ã‚’出力ã—ãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:195 msgid "``options``: A dictionary where the key is the module option and the value is the spec for that option" msgstr "``options``: キーãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã§ã€å€¤ãŒãã®ã‚ªãƒ—ションã®ä»•様ã¨ãªã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:196 msgid "``required_by``: A dictionary where the option(s) specified by the value must be set if the option specified by the key is also set" msgstr "``required_by``: ã‚­ãƒ¼ã§æŒ‡å®šã•れãŸã‚ªãƒ—ションãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã«ã€å€¤ã§æŒ‡å®šã•れãŸã‚ªãƒ—ションも設定ã—ãªã‘れã°ãªã‚‰ãªã„ディクショナリーã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:200 msgid "``required_if``: A list of lists where the inner list contains 3 or 4 elements;" msgstr "``required_if``: 内部リスト㫠3 ã¤ã¾ãŸã¯ 4 ã¤ã®è¦ç´ ãŒå«ã¾ã‚Œã‚‹ãƒªã‚¹ãƒˆã®ä¸€è¦§" #: ../../rst/dev_guide/developing_modules_general_windows.rst:198 msgid "The first element is the module option to check the value against" msgstr "最åˆã®è¦ç´ ã¯ã€å€¤ã‚’確èªã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:199 msgid "The second element is the value of the option specified by the first element, if matched then the required if check is run" msgstr "2 ã¤ç›®ã®è¦ç´ ã¯ã€1 ã¤ç›®ã®è¦ç´ ã«ã‚ˆã£ã¦æŒ‡å®šã•れるオプションã®å€¤ã§ã™ã€‚一致ã™ã‚‹ã¨å¿…須㮠if ãƒã‚§ãƒƒã‚¯ãŒå®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:200 msgid "The third element is a list of required module options when the above is matched" msgstr "3 ã¤ç›®ã®è¦ç´ ã¯ã€ä¸Šè¨˜ãŒä¸€è‡´ã—ãŸå ´åˆã«å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã®ãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:201 msgid "An optional fourth element is a boolean that states whether all module options in the third elements are required (default: ``$false``) or only one (``$true``)" msgstr "4 番目ã®è¦ç´  (ä»»æ„) ã¯ã€3 番目ã®è¦ç´ ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションãŒã™ã¹ã¦å¿…è¦ãªã®ã‹ (デフォルト: ``$false``)ã€1 ã¤ã ã‘ãŒå¿…è¦ãªã®ã‹ (``$true``) を示ã™ãƒ–ール値ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:202 msgid "``required_one_of``: A list of lists, where the inner list contains module options where at least one must be set" msgstr "``required_one_of``: å°‘ãªãã¨ã‚‚ 1 ã¤ã¯è¨­å®šã—ãªã‘れã°ãªã‚‰ãªã„モジュールオプションãŒå«ã¾ã‚Œã¦ã„るリストãŒè¨˜è¼‰ã•れるリストã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:203 msgid "``required_together``: A list of lists, where the inner list contains module options that must be set together" msgstr "``required_together``: 一緒ã«è¨­å®šã—ãªã‘れã°ãªã‚‰ãªã„モジュールオプションãŒå«ã¾ã‚Œã¦ã„るリストãŒè¨˜è¼‰ã•れるリストã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:204 msgid "``supports_check_mode``: Whether the module supports check mode, by default this is ``$false``" msgstr "``supports_check_mode``: モジュールãŒãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã«å¯¾å¿œã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ (デフォルト㯠``$false``) を指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:206 msgid "The actual input options for a module are set within the ``options`` value as a dictionary. The keys of this dictionary are the module option names while the values are the spec of that module option. Each spec can have the following options set:" msgstr "モジュールã®å®Ÿéš›ã®å…¥åŠ›ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨ãªã‚‹ ``options`` 値ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ã‚­ãƒ¼ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションåã§ã‚りã€å€¤ã¯ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã®ä»•様ã§ã™ã€‚å„仕様ã«ã¯ã€æ¬¡ã®ã‚ªãƒ—ションを設定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:210 msgid "``aliases``: A list of aliases for the module option" msgstr "``aliases``: モジュールオプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ä¸€è¦§" #: ../../rst/dev_guide/developing_modules_general_windows.rst:211 msgid "``choices``: A list of valid values for the module option, if ``type=list`` then each list value is validated against the choices and not the list itself" msgstr "``choices``: ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ‰åйãªå€¤ã®ãƒªã‚¹ãƒˆã§ã™ã€‚``type=list`` ã®å ´åˆã¯ã€å„リストã®å€¤ãŒé¸æŠžã—ãŸã‚‚ã®ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã€ãƒªã‚¹ãƒˆè‡ªä½“ã¯æ¤œè¨¼ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:212 msgid "``default``: The default value for the module option if not set" msgstr "``default``: モジュールオプションã®ãƒ‡ãƒ•ォルト値 (設定ã•れã¦ã„ãªã„å ´åˆ) ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:213 msgid "``deprecated_aliases``: A list of hashtables that define aliases that are deprecated and the versions they will be removed in. Each entry must contain the keys ``name`` and ``collection_name`` with either ``version`` or ``date``" msgstr "``deprecated_aliases``: éžæŽ¨å¥¨ã¨ãªã‚‹ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ã€ãã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒå‰Šé™¤ã•れるãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’定義ã™ã‚‹ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®ä¸€è¦§ã€‚å„エントリーã«ã¯ã€``version`` ã¾ãŸã¯ ``date`` ãŒã‚ã‚‹ ``name`` キー㨠``collection_name`` ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:214 msgid "``elements``: When ``type=list``, this sets the type of each list value, the values are the same as ``type``" msgstr "``elements``: ``type=list`` ã®å ´åˆã¯ã€å„リスト値ã®ã‚¿ã‚¤ãƒ—ãŒè¨­å®šã•れã€å€¤ã¯ ``type`` ã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:215 msgid "``no_log``: Will sanitise the input value before being returned in the ``module_invocation`` return value" msgstr "``no_log``: ``module_invocation`` ã®æˆ»ã‚Šå€¤ã§è¿”ã•れるå‰ã«å…¥åŠ›å€¤ã‚’ã‚µãƒ‹ã‚¿ã‚¤ã‚ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:216 msgid "``removed_in_version``: States when a deprecated module option is to be removed, a warning is displayed to the end user if set" msgstr "``removed_in_version``: éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションãŒã„ã¤å‰Šé™¤ã•れるã‹ã‚’示ã—ã¾ã™ã€‚ã“れãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™" #: ../../rst/dev_guide/developing_modules_general_windows.rst:217 msgid "``removed_at_date``: States the date (YYYY-MM-DD) when a deprecated module option will be removed, a warning is displayed to the end user if set" msgstr "``removed_at_date``: éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションãŒå‰Šé™¤ã•れる日付 (YYYY-MM-DD) を示ã—ã¾ã™ã€‚ã“れãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™" #: ../../rst/dev_guide/developing_modules_general_windows.rst:218 msgid "``removed_from_collection``: States from which collection the deprecated module option will be removed; must be specified if one of ``removed_in_version`` and ``removed_at_date`` is specified" msgstr "``removed_from_collection``: éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションを削除ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®çŠ¶æ…‹ã€‚``removed_in_version`` ãŠã‚ˆã³ ``removed_at_date`` ã®ã„ãšã‚Œã‹ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã¯æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:219 msgid "``required``: Will fail when the module option is not set" msgstr "``required``: モジュールオプションãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:230 msgid "``type``: The type of the module option, if not set then it defaults to ``str``. The valid types are;" msgstr "``type``: モジュールオプションã®ã‚¿ã‚¤ãƒ—ã§ã™ã€‚設定ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ォルト㧠``str`` ã«è¨­å®šã•れã¾ã™ã€‚有効ãªã‚¿ã‚¤ãƒ—ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:221 msgid "``bool``: A boolean value" msgstr "``bool``: ブール値" #: ../../rst/dev_guide/developing_modules_general_windows.rst:222 msgid "``dict``: A dictionary value, if the input is a JSON or key=value string then it is converted to dictionary" msgstr "``dict``: ディクショナリーã®å€¤ã€‚入力㌠JSON ã¾ãŸã¯ key=value 文字列ã®å ´åˆã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:223 msgid "``float``: A float or `Single `_ value" msgstr "``float``: æµ®å‹•å°æ•°ç‚¹ã¾ãŸã¯ `Single `_ ã®å€¤" #: ../../rst/dev_guide/developing_modules_general_windows.rst:224 msgid "``int``: An Int32 value" msgstr "``int``: Int32 値" #: ../../rst/dev_guide/developing_modules_general_windows.rst:225 msgid "``json``: A string where the value is converted to a JSON string if the input is a dictionary" msgstr "``json``: 入力ãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚ã‚‹å ´åˆã«å€¤ãŒ JSON 文字列ã«å¤‰æ›ã•れる文字列" #: ../../rst/dev_guide/developing_modules_general_windows.rst:226 msgid "``list``: A list of values, ``elements=`` can convert the individual list value types if set. If ``elements=dict`` then ``options`` is defined, the values will be validated against the argument spec. When the input is a string then the string is split by ``,`` and any whitespace is trimmed" msgstr "``list``: 値ã®ä¸€è¦§ (``elements=``) ãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€å€‹ã€…ã®ãƒªã‚¹ãƒˆå€¤ã‚¿ã‚¤ãƒ—を変æ›ã§ãã¾ã™ã€‚``elements=dict`` ã®å ´åˆã¯ã€``options`` ãŒå®šç¾©ã•れã€å€¤ã¯å¼•æ•°ã®ä»•様ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚å…¥åŠ›ãŒæ–‡å­—列ã§ã‚ã‚‹å ´åˆã€æ–‡å­—列㯠``,`` ã§åˆ†å‰²ã•れã€ç©ºç™½æ–‡å­—ã¯ã™ã¹ã¦ãƒˆãƒªãƒŸãƒ³ã‚°ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:227 msgid "``path``: A string where values likes ``%TEMP%`` are expanded based on environment values. If the input value starts with ``\\\\?\\`` then no expansion is run" msgstr "``path``: ``%TEMP%`` ãªã©ã®å€¤ãŒç’°å¢ƒå€¤ã«åŸºã¥ã„ã¦å±•é–‹ã•れる文字列ã§ã™ã€‚入力値㌠``\\\\?\\`` ã§å§‹ã¾ã‚‹ã¨ã€å±•é–‹ã¯å®Ÿè¡Œã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:228 msgid "``raw``: No conversions occur on the value passed in by Ansible" msgstr "``raw``: Ansible ã«ã‚ˆã£ã¦æ¸¡ã•れる値ã§å¤‰æ›ãŒè¡Œã‚れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:229 msgid "``sid``: Will convert Windows security identifier values or Windows account names to a `SecurityIdentifier `_ value" msgstr "``sid``: Windows セキュリティー識別å­ã®å€¤ã¾ãŸã¯ Windows アカウントåã‚’ `SecurityIdentifier `_ 値ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:230 msgid "``str``: The value is converted to a string" msgstr "``str``: ã“ã®å€¤ã¯æ–‡å­—列ã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:232 msgid "When ``type=dict``, or ``type=list`` and ``elements=dict``, the following keys can also be set for that module option:" msgstr "``type=dict`` ã¾ãŸã¯ ``type=list`` ãŠã‚ˆã³ ``elements=dict`` ã®å ´åˆã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã«ä»¥ä¸‹ã®ã‚­ãƒ¼ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:234 msgid "``apply_defaults``: The value is based on the ``options`` spec defaults for that key if ``True`` and null if ``False``. Only valid when the module option is not defined by the user and ``type=dict``." msgstr "``apply_defaults``: ã“ã®å€¤ã¯ã€``True`` ã®å ´åˆã¯ãã®ã‚­ãƒ¼ã® ``options`` 仕様ã®ãƒ‡ãƒ•ォルトã«ãªã‚Šã€``False`` ã®å ´åˆã¯ null ã§ã™ã€‚モジュールオプションãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦å®šç¾©ã•れã¦ãŠã‚‰ãšã€``type=dict`` ã®å ´åˆã«é™ã‚Šæœ‰åйã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:235 msgid "``mutually_exclusive``: Same as the root level ``mutually_exclusive`` but validated against the values in the sub dict" msgstr "``mutually_exclusive``: ルートレベル㮠``mutually_exclusive`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ディクショナリーã®å€¤ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:236 msgid "``options``: Same as the root level ``options`` but contains the valid options for the sub option" msgstr "``options``: ルートレベル㮠``options`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ‰åйãªã‚ªãƒ—ションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:237 msgid "``required_if``: Same as the root level ``required_if`` but validated against the values in the sub dict" msgstr "``required_if``: ルートレベル㮠``required_if`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ディクショナリーã®å€¤ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:238 msgid "``required_by``: Same as the root level ``required_by`` but validated against the values in the sub dict" msgstr "``required_by``: ルートレベル㮠``required_by`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ディクショナリーã®å€¤ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:239 msgid "``required_together``: Same as the root level ``required_together`` but validated against the values in the sub dict" msgstr "``required_together``: ルートレベル㮠``required_together`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ディクショナリーã®å€¤ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:240 msgid "``required_one_of``: Same as the root level ``required_one_of`` but validated against the values in the sub dict" msgstr "``required_one_of``: ルートレベル㮠``required_one_of`` ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ–ディクショナリーã®å€¤ã«å¯¾ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:242 msgid "A module type can also be a delegate function that converts the value to whatever is required by the module option. For example the following snippet shows how to create a custom type that creates a ``UInt64`` value:" msgstr "モジュール型ã¯ã€å€¤ã‚’モジュールオプションã§å¿…è¦ã¨ã•れるもã®ã«å¤‰æ›ã™ã‚‹ãƒ‡ãƒªã‚²ãƒ¼ãƒˆé–¢æ•°ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚次ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã®ä¾‹ã¯ã€``UInt64`` 値を作æˆã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ åž‹ã‚’作æˆã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:252 msgid "When in doubt, look at some of the other core modules and see how things have been implemented there." msgstr "䏿˜Žãªå ´åˆã¯ã€ä»–ã®ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¦ã€ãã“ã«ã©ã®ã‚ˆã†ã«å®Ÿè£…ã•れã¦ã„ã‚‹ã‹ã‚’見ã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:255 msgid "Sometimes there are multiple ways that Windows offers to complete a task; this is the order to favor when writing modules:" msgstr "Windows ãŒã‚¿ã‚¹ã‚¯ã‚’完了ã•ã›ã‚‹ãŸã‚ã«ã€è¤‡æ•°ã®æ–¹æ³•ãŒæç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚モジュールを書ãã¨ãã«å¥½ã¾ã—ã„é †åºã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:258 msgid "Native Powershell cmdlets like ``Remove-Item -Path C:\\temp -Recurse``" msgstr "``Remove-Item -Path C:\\temp -Recurse`` ãªã©ã®ãƒã‚¤ãƒ†ã‚£ãƒ–ã® Powershell コマンドレッド" #: ../../rst/dev_guide/developing_modules_general_windows.rst:259 msgid ".NET classes like ``[System.IO.Path]::GetRandomFileName()``" msgstr "``[System.IO.Path]::GetRandomFileName()`` ãªã©ã® .NET クラス" #: ../../rst/dev_guide/developing_modules_general_windows.rst:260 msgid "WMI objects through the ``New-CimInstance`` cmdlet" msgstr "``New-CimInstance`` コマンドレッド経由㮠WMI オブジェクト" #: ../../rst/dev_guide/developing_modules_general_windows.rst:261 msgid "COM objects through ``New-Object -ComObject`` cmdlet" msgstr "``New-Object -ComObject`` コマンドレッド経由㮠COM オブジェクト" #: ../../rst/dev_guide/developing_modules_general_windows.rst:262 msgid "Calls to native executables like ``Secedit.exe``" msgstr "``Secedit.exe`` ãªã©ã€ãƒã‚¤ãƒ†ã‚£ãƒ–実行å¯èƒ½ãƒ•ァイルã¸ã®å‘¼ã³å‡ºã—" #: ../../rst/dev_guide/developing_modules_general_windows.rst:264 msgid "PowerShell modules support a small subset of the ``#Requires`` options built into PowerShell as well as some Ansible-specific requirements specified by ``#AnsibleRequires``. These statements can be placed at any point in the script, but are most commonly near the top. They are used to make it easier to state the requirements of the module without writing any of the checks. Each ``requires`` statement must be on its own line, but there can be multiple requires statements in one script." msgstr "PowerShell モジュールã¯ã€PowerShell ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ ``#Requires`` オプションã®å°ã•ãªã‚µãƒ–セットã¨ã€``#AnsibleRequires`` ã§æŒ‡å®šã•れã¦ã„ã‚‹ Ansible 固有ã®è¦ä»¶ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã“れらã®ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã¯ã€ã‚¹ã‚¯ãƒªãƒ—トã®ä»»æ„ã®ä½ç½®ã«é…ç½®ã§ãã¾ã™ãŒã€æœ€ã‚‚一般的ãªã®ã¯å…ˆé ­ä»˜è¿‘ã§ã™ã€‚ã“れらã®ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã¯ã€ãƒã‚§ãƒƒã‚¯é …目を記述ã™ã‚‹ã“ã¨ãªãã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è¦ä»¶ã‚’ç°¡å˜ã«è¨˜è¿°ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚``requires`` ステートメントã¯ãれãžã‚Œ 1 è¡Œã«æ›¸ã‹ãªã‘れã°ãªã‚Šã¾ã›ã‚“ãŒã€1 ã¤ã®ã‚¹ã‚¯ãƒªãƒ—トã«è¤‡æ•°ã® requires ステートメントを記述ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:272 msgid "These are the checks that can be used within Ansible modules:" msgstr "以下ã®ãƒã‚§ãƒƒã‚¯ã¯ã€Ansible モジュール内ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:274 msgid "``#Requires -Module Ansible.ModuleUtils.``: Added in Ansible 2.4, specifies a module_util to load in for the module execution." msgstr "``#Requires -Module Ansible.ModuleUtils.``: Ansible 2.4 ã§è¿½åŠ ã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã®ãŸã‚ã«èª­ã¿è¾¼ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:275 msgid "``#Requires -Version x.y``: Added in Ansible 2.5, specifies the version of PowerShell that is required by the module. The module will fail if this requirement is not met." msgstr "``#Requires -Version x.y``: Ansible 2.5 ã§è¿½åŠ ã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ã¨ã™ã‚‹ PowerShell ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã—ã¾ã™ã€‚ã“ã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ãªã„å ´åˆã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:276 msgid "``#AnsibleRequires -OSVersion x.y``: Added in Ansible 2.5, specifies the OS build version that is required by the module and will fail if this requirement is not met. The actual OS version is derived from ``[Environment]::OSVersion.Version``." msgstr "``#AnsibleRequires -OSVersion x.y``: Ansible 2.5 ã§è¿½åŠ ã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ã¨ã™ã‚‹ OS ビルドãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã—ã¾ã™ã€‚ã“ã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ãªã„å ´åˆã¯å¤±æ•—ã—ã¾ã™ã€‚実際㮠OS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ ``[Environment]::OSVersion.Version`` ã‹ã‚‰ç”±æ¥ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:277 msgid "``#AnsibleRequires -Become``: Added in Ansible 2.5, forces the exec runner to run the module with ``become``, which is primarily used to bypass WinRM restrictions. If ``ansible_become_user`` is not specified then the ``SYSTEM`` account is used instead." msgstr "``#AnsibleRequires -Become``: Ansible 2.5 ã§è¿½åŠ ã•れã€exec ランナー㌠``become`` ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’強制的ã«å®Ÿè¡Œã—ã¾ã™ã€‚ã“れã¯ä¸»ã« WinRM ã®åˆ¶é™ã‚’回é¿ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚``ansible_become_user`` ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ä»£ã‚り㫠``SYSTEM`` アカウントãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:278 msgid "``#AnsibleRequires -CSharpUtil Ansible.``: Added in Ansible 2.8, specifies a C# module_util to load in for the module execution." msgstr "``#AnsibleRequires -CSharpUtil Ansible.``: Ansible 2.8 ã§è¿½åŠ ã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã®ãŸã‚ã«èª­ã¿è¾¼ã‚€ C# モジュールユーティリティーを指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:280 msgid "C# module utils can reference other C# utils by adding the line ``using Ansible.;`` to the top of the script with all the other using statements." msgstr "C# モジュールユーティリティーã¯ã€ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã‚’使用ã—ã€ã‚¹ã‚¯ãƒªãƒ—トã®å†’é ­ã« ``using Ansible.;`` 行を追加ã™ã‚‹ã“ã¨ã§ã€ä»–ã® C# ユーティリティーをå‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:286 msgid "Windows module utilities" msgstr "Windows モジュールユーティリティー" #: ../../rst/dev_guide/developing_modules_general_windows.rst:288 msgid "Like Python modules, PowerShell modules also provide a number of module utilities that provide helper functions within PowerShell. These module_utils can be imported by adding the following line to a PowerShell module:" msgstr "Python モジュールã¨åŒæ§˜ã«ã€PowerShell モジュールã¯ã€PowerShell ã§ãƒ˜ãƒ«ãƒ‘ー関数をæä¾›ã™ã‚‹å¤šãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’æä¾›ã—ã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€ä»¥ä¸‹ã®è¡Œã‚’ PowerShell モジュールã«è¿½åŠ ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:296 msgid "This will import the module_util at ``./lib/ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1`` and enable calling all of its functions. As of Ansible 2.8, Windows module utils can also be written in C# and stored at ``lib/ansible/module_utils/csharp``. These module_utils can be imported by adding the following line to a PowerShell module:" msgstr "ã“れã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒ ``./lib/ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1`` ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã€ã™ã¹ã¦ã®é–¢æ•°ã®å‘¼ã³å‡ºã—ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚Ansible 2.8 ã¨åŒæ§˜ã«ã€Windows モジュールユーティリティー㯠C# ã§ã‚‚記述ã§ãã€``lib/ansible/module_utils/csharp`` ã«ä¿å­˜ã•れã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€PowerShell モジュールã«ä»¥ä¸‹ã®è¡Œã‚’追加ã™ã‚‹ã“ã¨ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:306 msgid "This will import the module_util at ``./lib/ansible/module_utils/csharp/Ansible.Basic.cs`` and automatically load the types in the executing process. C# module utils can reference each other and be loaded together by adding the following line to the using statements at the top of the util:" msgstr "ã“れã«ã‚ˆã‚Šã€``./lib/ansible/module_utils/csharp/Ansible.Basic.cs`` ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã€å®Ÿè¡Œä¸­ã®ãƒ—ロセスã§ã‚¿ã‚¤ãƒ—ãŒè‡ªå‹•çš„ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚C# モジュールユーティリティーã¯ç›¸äº’ã«å‚ç…§ã§ãã€æ¬¡ã®è¡Œã‚’ã€ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ä¸Šéƒ¨ã«ã‚ã‚‹ using ステートメントã«è¿½åŠ ã—ã¦èª­ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:315 msgid "There are special comments that can be set in a C# file for controlling the compilation parameters. The following comments can be added to the script;" msgstr "コンパイルパラメーターを制御ã™ã‚‹ãŸã‚ã« C# ファイルã«è¨­å®šã§ãる特別ãªã‚³ãƒ¡ãƒ³ãƒˆãŒã‚りã¾ã™ã€‚以下ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’スクリプトã«è¿½åŠ ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:318 msgid "``//AssemblyReference -Name [-CLR [Core|Framework]]``: The assembly DLL to reference during compilation, the optional ``-CLR`` flag can also be used to state whether to reference when running under .NET Core, Framework, or both (if omitted)" msgstr "``//AssemblyReference -Name [-CLR [Core|Framework]]``: コンパイル中ã«å‚ç…§ã™ã‚‹ã‚¢ã‚»ãƒ³ãƒ–リー DLL ã§ã™ã€‚ä»»æ„ã® ``-CLR`` フラグを使用ã—ã¦ã€.NET Coreã€Frameworkã€ã¾ãŸã¯ãã®ä¸¡æ–¹ (çœç•¥ã•れã¦ã„ã‚‹å ´åˆ) ã§å®Ÿè¡Œã™ã‚‹ã¨ãã«å‚ç…§ã™ã‚‹ã‹ã©ã†ã‹ã‚’表示ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:319 msgid "``//NoWarn -Name [-CLR [Core|Framework]]``: A compiler warning ID to ignore when compiling the code, the optional ``-CLR`` works the same as above. A list of warnings can be found at `Compiler errors `_" msgstr "``//NoWarn -Name [-CLR [Core|Framework]]``: コードをコンパイルã™ã‚‹ã¨ãã«ç„¡è¦–ã™ã‚‹ã‚³ãƒ³ãƒ‘イラ警告 ID ã§ã€ä»»æ„ã® ``-CLR`` ãŒä¸Šè¨˜ã¨åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚警告ã®ãƒªã‚¹ãƒˆã¯ã€`コンパイラーエラー `_ ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:321 msgid "As well as this, the following pre-processor symbols are defined;" msgstr "ã“ã®ä»–ã«ã€ä»¥ä¸‹ã®ãƒ—リプロセッサーシンボルも定義ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:323 msgid "``CORECLR``: This symbol is present when PowerShell is running through .NET Core" msgstr "``CORECLR``: ã“ã®ã‚·ãƒ³ãƒœãƒ«ã¯ã€PowerShell ㌠.NET Core を介ã—ã¦å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:324 msgid "``WINDOWS``: This symbol is present when PowerShell is running on Windows" msgstr "``WINDOWS``: ã“ã®ã‚·ãƒ³ãƒœãƒ«ã¯ã€PowerShell ㌠Windows ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:325 msgid "``UNIX``: This symbol is present when PowerShell is running on Unix" msgstr "``UNIX``: ã“ã®ã‚·ãƒ³ãƒœãƒ«ã¯ã€PowerShell ㌠Unix ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:327 msgid "A combination of these flags help to make a module util interoperable on both .NET Framework and .NET Core, here is an example of them in action:" msgstr "ã“れフラグã®çµ„ã¿åˆã‚ã›ã¯ã€.NET Framework 㨠.NET Core ã®ä¸¡æ–¹ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’相互é‹ç”¨å¯èƒ½ã«ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚以下ã«ã€å®Ÿéš›ã®å‹•作例を示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:348 msgid "The following is a list of module_utils that are packaged with Ansible and a general description of what they do:" msgstr "以下㫠Ansible ã¨ä¸€ç·’ã«ãƒ‘ッケージ化ã•れã¦ã„るモジュールユーティリティーã®ãƒªã‚¹ãƒˆã¨ã€ãã‚Œã‚‰ã®æ©Ÿèƒ½ã®ä¸€èˆ¬çš„ãªèª¬æ˜Žã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:351 msgid "ArgvParser: Utility used to convert a list of arguments to an escaped string compliant with the Windows argument parsing rules." msgstr "ArgvParser: 引数ã®ãƒªã‚¹ãƒˆã‚’ Windows ã®å¼•æ•°è§£æžãƒ«ãƒ¼ãƒ«ã«æº–æ‹ ã—ã¦ã„るエスケープã•ã‚ŒãŸæ–‡å­—列ã«å¤‰æ›ã™ã‚‹ã®ã«ä½¿ç”¨ã•れるユーティリティー。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:352 msgid "CamelConversion: Utility used to convert camelCase strings/lists/dicts to snake_case." msgstr "CamelConversion: camelCase strings/lists/dicts ã‚’ snake_case ã«å¤‰æ›ã™ã‚‹ã®ã«ä½¿ç”¨ã•れるユーティリティー。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:353 msgid "CommandUtil: Utility used to execute a Windows process and return the stdout/stderr and rc as separate objects." msgstr "CommandUtil: Windows プロセスを実行ã—ã€stdout/stderr 㨠rc ã‚’ç•°ãªã‚‹ã‚ªãƒ–ジェクトã¨ã—ã¦è¿”ã™ãŸã‚ã«ä½¿ç”¨ã•れるユーティリティー。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:354 msgid "FileUtil: Utility that expands on the ``Get-ChildItem`` and ``Test-Path`` to work with special files like ``C:\\pagefile.sys``." msgstr "FileUtil: ``C:\\pagefile.sys`` ã®ã‚ˆã†ãªç‰¹æ®Šãªãƒ•ァイルを扱ã†ãŸã‚ã« ``Get-ChildItem`` ãŠã‚ˆã³ ``Test-Path`` ã‚’æ‹¡å¼µã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:355 msgid "Legacy: General definitions and helper utilities for Ansible module." msgstr "Legacy: Ansible モジュールã®ä¸€èˆ¬çš„ãªå®šç¾©ãŠã‚ˆã³ãƒ˜ãƒ«ãƒ‘ーユーティリティー。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:356 msgid "LinkUtil: Utility to create, remove, and get information about symbolic links, junction points and hard inks." msgstr "LinkUtil: シンボリックリンクã€åˆ†å²ç‚¹ã€ãƒãƒ¼ãƒ‰ã‚¤ãƒ³ã‚¯ã«é–¢ã™ã‚‹æƒ…報を作æˆã€å‰Šé™¤ã€ãŠã‚ˆã³å–å¾—ã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:357 msgid "SID: Utilities used to convert a user or group to a Windows SID and vice versa." msgstr "SID: ユーザーやグループを Windows SID ã«å¤‰æ›ã—ãŸã‚Šã€Windows SID をユーザーやグループã«å¤‰æ›ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:359 msgid "For more details on any specific module utility and their requirements, please see the `Ansible module utilities source code `_." msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¨ãã®è¦ä»¶ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€`Ansible モジュールユーティリティーã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:362 msgid "PowerShell module utilities can be stored outside of the standard Ansible distribution for use with custom modules. Custom module_utils are placed in a folder called ``module_utils`` located in the root folder of the playbook or role directory." msgstr "PowerShell モジュールユーティリティーã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹æ¨™æº–ã® Ansible ディストリビューション外ã«ä¿å­˜ã§ãã¾ã™ã€‚カスタムã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ ``module_utils`` ã¨å‘¼ã°ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«é…ç½®ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:367 msgid "C# module utilities can also be stored outside of the standard Ansible distribution for use with custom modules. Like PowerShell utils, these are stored in a folder called ``module_utils`` and the filename must end in the extension ``.cs``, start with ``Ansible.`` and be named after the namespace defined in the util." msgstr "C# モジュールユーティリティーã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®æ¨™æº–ã® Ansible ディストリビューション外ã«ã‚‚ä¿å­˜ã§ãã¾ã™ã€‚PowerShellutils ã¨åŒæ§˜ã€``module_utils`` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«æ ¼ç´ã•れã€ãƒ•ァイルåã¯æ‹¡å¼µå­ ``.cs`` ã§çµ‚ã‚りã€``Ansible.`` ã§å§‹ã¾ã‚‹ã€ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã§å®šç¾©ã•れãŸåå‰ç©ºé–“ã®å¾Œã«åå‰ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:371 msgid "The below example is a role structure that contains two PowerShell custom module_utils called ``Ansible.ModuleUtils.ModuleUtil1``, ``Ansible.ModuleUtils.ModuleUtil2``, and a C# util containing the namespace ``Ansible.CustomUtil``::" msgstr "次ã®ä¾‹ã¯ã€å‘¼ã³å‡ºã•れ㟠2 ã¤ã® PowerShell ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ (``Ansible.ModuleUtils.ModuleUtil1``ã€``Ansible.ModuleUtils.ModuleUtil2``ã€ãŠã‚ˆã³åå‰ç©ºé–“ ``Ansible.CustomUtil`` ã‚’å«ã‚€ C# ユーティリティー) ã‚’å«ã‚€ãƒ­ãƒ¼ãƒ«æ§‹é€ ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:386 msgid "Each PowerShell module_util must contain at least one function that has been exported with ``Export-ModuleMember`` at the end of the file. For example" msgstr "PowerShell ã®å„モジュールユーティリティーã«ã¯ã€ãƒ•ァイルã®çµ‚ã‚り㫠``Export-ModuleMember`` ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れãŸé–¢æ•°ãŒå°‘ãªãã¨ã‚‚ 1 ã¤å«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:395 msgid "Exposing shared module options" msgstr "共有モジュールオプションã®å…¬é–‹" #: ../../rst/dev_guide/developing_modules_general_windows.rst:397 msgid "PowerShell module utils can easily expose common module options that a module can use when building its argument spec. This allows common features to be stored and maintained in one location and have those features used by multiple modules with minimal effort. Any new features or bugfixes added to one of these utils are then automatically used by the various modules that call that util." msgstr "PowerShell モジュールユーティリティーã¯ã€å¼•数仕様を構築ã™ã‚‹éš›ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã§ãる共通ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションを簡å˜ã«å…¬é–‹ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å…±é€šã®æ©Ÿèƒ½ã¯ 1 ã¤ã®å ´æ‰€ã«ä¿å­˜ãŠã‚ˆã³ç¶­æŒã§ãã€æœ€å°é™ã®ä½œæ¥­ã§è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ä½¿ç”¨ã•れる機能を利用ã§ãã¾ã™ã€‚ã“れらã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ã„ãšã‚Œã‹ã«è¿½åŠ ã•ã‚ŒãŸæ–°æ©Ÿèƒ½ã¾ãŸã¯ãƒã‚°ä¿®æ­£ã¯ã€ãã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ã„ãšã‚Œã‹ã‚’呼ã³å‡ºã™ã•ã¾ã–ã¾ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦è‡ªå‹•çš„ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:402 msgid "An example of this would be to have a module util that handles authentication and communication against an API This util can be used by multiple modules to expose a common set of module options like the API endpoint, username, password, timeout, cert validation, and so on without having to add those options to each module spec." msgstr "ã“ã®ä¾‹ã¨ã—ã¦ã¯ã€API ã«å¯¾ã™ã‚‹èªè¨¼ã¨é€šä¿¡ã‚’処ç†ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€API エンドãƒã‚¤ãƒ³ãƒˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã€ãƒ‘スワードã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€èªå®šæ¤œè¨¼ãªã©ã®å…±é€šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションセットを公開ã™ã‚‹ãŸã‚ã€å„モジュール仕様ã«ãれらã®ã‚ªãƒ—ションを追加ã—ãªãã¦ã‚‚ã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:406 msgid "The standard convention for a module util that has a shared argument spec would have" msgstr "共有引数仕様をæŒã¤ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®æ¨™æº–è¦å‰‡ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:409 msgid "A ``Get-Spec`` function that outputs the common spec for a module" msgstr "モジュールã®å…±é€šã®ä»•様を出力ã™ã‚‹ ``Get-Spec`` 関数" #: ../../rst/dev_guide/developing_modules_general_windows.rst:409 msgid "It is highly recommended to make this function name be unique to the module to avoid any conflicts with other utils that can be loaded" msgstr "読ã¿è¾¼ã¿ã§ãã‚‹ä»–ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¨ã®ç«¶åˆã‚’é¿ã‘ã‚‹ãŸã‚ã«ã€ã“ã®é–¢æ•°åをモジュールã«å›ºæœ‰ã®ã‚‚ã®ã«å¼·ã推奨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:410 msgid "The format of the output spec is a Hashtable in the same format as the ``$spec`` used for normal modules" msgstr "出力仕様ã®å½¢å¼ã¯ã€é€šå¸¸ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä½¿ç”¨ã•れる ``$spec`` ã¨åŒã˜å½¢å¼ã®ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:411 msgid "A function that takes in an ``AnsibleModule`` object called under the ``-Module`` parameter which it can use to get the shared options" msgstr "``-Module`` パラメーター下ã§å‘¼ã³å‡ºã•れ㟠``AnsibleModule`` オブジェクトをå–り入れãŸé–¢æ•°ã€‚ã“れを使用ã—ã¦å…±æœ‰ã‚ªãƒ—ションをå–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:413 msgid "Because these options can be shared across various module it is highly recommended to keep the module option names and aliases in the shared spec as specific as they can be. For example do not have a util option called ``password``, rather you should prefix it with a unique name like ``acme_password``." msgstr "ã“れらã®ã‚ªãƒ—ションã¯å„種モジュール間ã§å…±æœ‰ã§ãã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションåã¨ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’ã€å¯èƒ½ãªé™ã‚Šå…·ä½“çš„ãªä»•様ã«ç¶­æŒã™ã‚‹ã“ã¨ãŒé«˜ã推奨ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€``password`` ユーティリティーオプションãŒã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€``acme_password`` ãªã©ã®ä¸€æ„ã®åå‰ã§ãƒ—レフィックスを付ã‘ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:418 msgid "Failure to have a unique option name or alias can prevent the util being used by module that also use those names or aliases for its own options." msgstr "一æ„ã®ã‚ªãƒ—ションåã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒãªã„ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã§ããªããªã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãれらã®åå‰ã¾ãŸã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’独自ã®ã‚ªãƒ—ションã«ä½¿ç”¨ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:421 msgid "The following is an example module util called ``ServiceAuth.psm1`` in a collection that implements a common way for modules to authentication with a service." msgstr "以下ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ ``ServiceAuth.psm1`` モジュールユーティリティーã®ä¾‹ã«ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚µãƒ¼ãƒ“スを使用ã—ãŸèªè¨¼ã«å…±é€šã®æ–¹æ³•を実装ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:477 msgid "For a module to take advantage of this common argument spec it can be set out like" msgstr "モジュールãŒã“ã®å…±é€šã®å¼•数仕様を利用ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:504 msgid "Options defined in the module spec will always have precedence over a util spec. Any list values under the same key in a util spec will be appended to the module spec for that same key. Dictionary values will add any keys that are missing from the module spec and merge any values that are lists or dictionaries. This is similar to how the doc fragment plugins work when extending module documentation." msgstr "モジュール仕様ã«å®šç¾©ã•れã¦ã„るオプションã¯å¸¸ã«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ä»•様よりも優先ã•れã¾ã™ã€‚ユーティリティー仕様ã®åŒã˜ã‚­ãƒ¼ä¸‹ã®ãƒªã‚¹ãƒˆå€¤ã¯ã€åŒã˜ã‚­ãƒ¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»•様ã«è¿½åŠ ã•れã¾ã™ã€‚ディクショナリーã®å€¤ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»•様ã«ä¸è¶³ã—ã¦ã„ã‚‹éµã‚’追加ã—ã€ãƒªã‚¹ãƒˆã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚る値をマージã—ã¾ã™ã€‚ã“れã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ‹¡å¼µã™ã‚‹ã¨ãã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントプラグインãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã¨ä¼¼ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:509 msgid "To document these shared util options for a module, create a doc fragment plugin that documents the options implemented by the module util and extend the module docs for every module that implements the util to include that fragment in its docs." msgstr "モジュールã®ã“れらã®å…±æœ‰ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚ªãƒ—ションを文書化ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã«ã‚ˆã‚Šå®Ÿè£…ã•れãŸã‚ªãƒ—ションを文書化ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントプラグインを作æˆã—ã€ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’実装ã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ‹¡å¼µã—ã¦ã€ãã®ãƒ•ラグメントをドキュメントã«å«ã‚ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:515 msgid "Windows playbook module testing" msgstr "Windows Playbook モジュールã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:517 msgid "You can test a module with an Ansible playbook. For example:" msgstr "以下ã®ã‚ˆã†ã«ã€Ansible Playbook ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’テストã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:519 msgid "Create a playbook in any directory ``touch testmodule.yml``." msgstr "ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« Playbook を作æˆã—ã¾ã™ (``touch testmodule.yml``)。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:520 msgid "Create an inventory file in the same directory ``touch hosts``." msgstr "åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ ``touch hosts`` ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:521 msgid "Populate the inventory file with the variables required to connect to a Windows host(s)." msgstr "Windows ホストã¸ã®æŽ¥ç¶šã«å¿…è¦ãªå¤‰æ•°ã‚’指定ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:532 msgid "Run the playbook ``ansible-playbook -i hosts testmodule.yml``" msgstr "Playbook ``ansible-playbook -i hosts testmodule.yml`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:534 msgid "This can be useful for seeing how Ansible runs with the new module end to end. Other possible ways to test the module are shown below." msgstr "ã“れã¯ã€Ansible ãŒæ–°ã—ã„モジュールã§ã‚¨ãƒ³ãƒ‰ãƒ„ーエンドã§ã©ã®ã‚ˆã†ã«å®Ÿè¡Œã•れるã‹ã‚’確èªã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚モジュールをテストã™ã‚‹ä»–ã®å¯èƒ½ãªæ–¹æ³•を以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:540 msgid "Windows debugging" msgstr "Windows ã®ãƒ‡ãƒãƒƒã‚°" #: ../../rst/dev_guide/developing_modules_general_windows.rst:542 msgid "Debugging a module currently can only be done on a Windows host. This can be useful when developing a new module or implementing bug fixes. These are some steps that need to be followed to set this up:" msgstr "ç¾åœ¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‡ãƒãƒƒã‚°ã¯ Windows ホストã§ã®ã¿å®Ÿè¡Œã§ãã¾ã™ã€‚ã“れã¯ã€æ–°ã—ã„モジュールを開発ã—ãŸã‚Šã€ãƒã‚°ä¿®æ­£ã‚’実装ã—ãŸã‚Šã™ã‚‹ã¨ãã«å½¹ç«‹ã¡ã¾ã™ã€‚ã“れを設定ã™ã‚‹ã«ã¯ã€æ¬¡ã®æ‰‹é †ã«å¾“ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:546 msgid "Copy the module script to the Windows server" msgstr "モジュールスクリプトを Windows サーãƒãƒ¼ã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:547 msgid "Copy the folders ``./lib/ansible/module_utils/powershell`` and ``./lib/ansible/module_utils/csharp`` to the same directory as the script above" msgstr "``./lib/ansible/module_utils/powershell`` ディレクトリー㨠``./lib/ansible/module_utils/csharp`` ディレクトリーを上記ã®ã‚¹ã‚¯ãƒªãƒ—トã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:548 msgid "Add an extra ``#`` to the start of any ``#Requires -Module`` lines in the module code, this is only required for any lines starting with ``#Requires -Module``" msgstr "モジュールコードã«ã‚ã‚‹ã™ã¹ã¦ã® ``#Requires -Module`` 行ã®å…ˆé ­ã« ``#`` を追加ã—ã¦ãã ã•ã„。ã“れã¯ã€``#Requires -Module`` ã§å§‹ã¾ã‚‹è¡Œã«ã®ã¿å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:549 msgid "Add the following to the start of the module script that was copied to the server:" msgstr "以下をã€ã‚µãƒ¼ãƒãƒ¼ã«ã‚³ãƒ”ーã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¹ã‚¯ãƒªãƒ—トã®å…ˆé ­ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:581 msgid "You can add more args to ``$complex_args`` as required by the module or define the module options through a JSON file with the structure::" msgstr "モジュールã«å¿…è¦ãªå ´åˆã¯ ``$complex_args`` ã«ã•らã«å¼•数を追加ã—ãŸã‚Šã€ãã®æ§‹é€ ã‚’æŒã¤ JSON ファイルã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションを定義ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:593 msgid "There are multiple IDEs that can be used to debug a Powershell script, two of the most popular ones are" msgstr "Powershell スクリプトã®ãƒ‡ãƒãƒƒã‚°ã«ä½¿ç”¨ã§ãã‚‹ IDE ãŒè¤‡æ•°ã‚りã€ä»¥ä¸‹ã® 2 ã¤ãŒæœ€ã‚‚一般的ãªã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:596 msgid "`Powershell ISE`_" msgstr "`Powershell ISE`_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:597 msgid "`Visual Studio Code`_" msgstr "`Visual Studio Code`_" #: ../../rst/dev_guide/developing_modules_general_windows.rst:602 msgid "To be able to view the arguments as passed by Ansible to the module follow these steps." msgstr "Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã—ãŸå¼•数を表示ã™ã‚‹ã«ã¯ã€æ¬¡ã®æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:605 msgid "Prefix the Ansible command with :envvar:`ANSIBLE_KEEP_REMOTE_FILES=1` to specify that Ansible should keep the exec files on the server." msgstr "Ansible コマンドã®å‰ã« :envvar:`ANSIBLE_KEEP_REMOTE_FILES=1` を付ã‘ã¦ã€Ansible ㌠exec ファイルをサーãƒä¸Šã«ä¿æŒã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:606 msgid "Log onto the Windows server using the same user account that Ansible used to execute the module." msgstr "Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã«ä½¿ç”¨ã—ãŸã®ã¨åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã—㦠Windows サーãƒãƒ¼ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:607 msgid "Navigate to ``%TEMP%\\..``. It should contain a folder starting with ``ansible-tmp-``." msgstr "``%TEMP%\\..`` ã«ç§»å‹•ã—ã¾ã™ã€‚ã“れã«ã¯ã€``ansible-tmp-`` ã§å§‹ã¾ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:608 msgid "Inside this folder, open the PowerShell script for the module." msgstr "ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® PowerShell スクリプトを開ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:609 msgid "In this script is a raw JSON script under ``$json_raw`` which contains the module arguments under ``module_args``. These args can be assigned manually to the ``$complex_args`` variable that is defined on your debug script or put in the ``args.json`` file." msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€``$json_raw`` ã«ã‚る生㮠JSON スクリプトã§ã€``module_args`` ã®ä¸‹ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れらã®å¼•æ•°ã¯ã€ãƒ‡ãƒãƒƒã‚°ã‚¹ã‚¯ãƒªãƒ—トã§å®šç¾©ã•れる ``$complex_args`` å¤‰æ•°ã«æ‰‹å‹•ã§å‰²ã‚Šå½“ã¦ãŸã‚Šã€``args.json`` ファイルã«ç½®ã„ãŸã‚Šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:613 msgid "Windows unit testing" msgstr "Windows ユニットテスト" #: ../../rst/dev_guide/developing_modules_general_windows.rst:615 msgid "Currently there is no mechanism to run unit tests for Powershell modules under Ansible CI." msgstr "ç¾åœ¨ã€Ansible CI ã§ Powershell モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_general_windows.rst:619 msgid "Windows integration testing" msgstr "Windows çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:621 msgid "Integration tests for Ansible modules are typically written as Ansible roles. These test roles are located in ``./test/integration/targets``. You must first set up your testing environment, and configure a test inventory for Ansible to connect to." msgstr "Ansible モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆã¯é€šå¸¸ Ansible ロールã¨ã—ã¦è¨˜è¿°ã•れã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆãƒ­ãƒ¼ãƒ«ã¯ ``./test/integration/targets`` ã«ã‚りã¾ã™ã€‚ã¾ãšã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’設定ã—ã¦ã€Ansible ãŒæŽ¥ç¶šã§ãるよã†ã«ãƒ†ã‚¹ãƒˆã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:625 msgid "In this example we will set up a test inventory to connect to two hosts and run the integration tests for win_stat:" msgstr "ã“ã®ä¾‹ã§ã¯ã€2 ã¤ã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã€win_stat ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ãŸã‚ã®ãƒ†ã‚¹ãƒˆã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:628 msgid "Run the command ``source ./hacking/env-setup`` to prepare environment." msgstr "環境を準備ã™ã‚‹ã«ã¯ã€``source ./hacking/env-setup`` コマンドを実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:629 msgid "Create a copy of ``./test/integration/inventory.winrm.template`` and name it ``inventory.winrm``." msgstr "``./test/integration/inventory.winrm.template`` ã®ã‚³ãƒ”ーを作æˆã—ã€``inventory.winrm`` ã¨ã„ã†åå‰ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:630 msgid "Fill in entries under ``[windows]`` and set the required variables that are needed to connect to the host." msgstr "``[windows]`` ã®ä¸‹ã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’入力ã—ã€ãƒ›ã‚¹ãƒˆã¸ã®æŽ¥ç¶šã«å¿…è¦ãªå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:631 msgid ":ref:`Install the required Python modules ` to support WinRM and a configured authentication method." msgstr "WinRM ã¨ã€è¨­å®šã•れãŸèªè¨¼æ–¹æ³•をサãƒãƒ¼ãƒˆã™ã‚‹ã®ã« :ref:`å¿…è¦ãª Python モジュールをインストール ` ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:632 msgid "To execute the integration tests, run ``ansible-test windows-integration win_stat``; you can replace ``win_stat`` with the role you want to test." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€``ansible-test windows-integration win_stat`` を実行ã—ã¾ã™ã€‚``win_stat`` ã¯ã€ãƒ†ã‚¹ãƒˆã™ã‚‹ãƒ­ãƒ¼ãƒ«ã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:634 msgid "This will execute all the tests currently defined for that role. You can set the verbosity level using the ``-v`` argument just as you would with ansible-playbook." msgstr "ã“れã«ã‚ˆã‚Šã€ãã®ãƒ­ãƒ¼ãƒ«ã«å¯¾ã—ã¦ç¾åœ¨å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ†ã‚¹ãƒˆãŒå®Ÿè¡Œã•れã¾ã™ã€‚ansible-playbook ã®å ´åˆã¨åŒã˜ã‚ˆã†ã«ã€``-v`` 引数を使用ã—ã¦è©³ç´°ãƒ¬ãƒ™ãƒ«ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:638 msgid "When developing tests for a new module, it is recommended to test a scenario once in check mode and twice not in check mode. This ensures that check mode does not make any changes but reports a change, as well as that the second run is idempotent and does not report changes. For example:" msgstr "æ–°ã—ã„モジュールã®ãƒ†ã‚¹ãƒˆã‚’開発ã™ã‚‹ã¨ãã¯ã€ã‚·ãƒŠãƒªã‚ªã‚’ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ 1 回ã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ä»¥å¤–ã§ 2 回テストã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã¯å¤‰æ›´ã¯è¡Œã‚れãšã€å¤‰æ›´ãŒå ±å‘Šã•れã¾ã™ã€‚ã¾ãŸã€2 回目ã®å®Ÿè¡Œã¯å†ªç­‰ã§ã‚りã€å¤‰æ›´ã¯å ±å‘Šã•れã¾ã›ã‚“。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:691 msgid "Windows communication and development support" msgstr "Windows ã®é€šä¿¡ãŠã‚ˆã³é–‹ç™ºã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_modules_general_windows.rst:693 msgid "Join the ``#ansible-devel`` or ``#ansible-windows`` chat channels (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) for discussions about Ansible development for Windows." msgstr "``#ansible-devel`` ã¾ãŸã¯``#ansible-windows``ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `ã§IRCを使用)ã«å‚加ã—ã¦ã€Windowså‘ã‘ã®Ansible 開発ã«é–¢ã™ã‚‹è­°è«–を行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_general_windows.rst:695 msgid "For questions and discussions pertaining to using the Ansible product, use the ``#ansible`` channel." msgstr "Ansible 製å“ã®ä½¿ç”¨ã«é–¢ã™ã‚‹è³ªå•ãŠã‚ˆã³è²¢çŒ®ã«ã¤ã„ã¦ã¯ã€``#ansible`` ãƒãƒ£ãƒ³ãƒãƒ«ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:5 msgid "Creating a new collection" msgstr "æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½œæˆ" #: ../../rst/dev_guide/developing_modules_in_groups.rst:7 msgid "Starting with Ansible 2.10, related modules should be developed in a collection. The Ansible core team and community compiled these module development tips and tricks to help companies developing Ansible modules for their products and users developing Ansible modules for third-party products. See :ref:`developing_collections` for a more detailed description of the collections format and additional development guidelines." msgstr "Ansible 2.10 以é™ã€é–¢é€£ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コレクションã§é–‹ç™ºã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible コアãƒãƒ¼ãƒ ãŠã‚ˆã³ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¯ã€ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºã®ãƒ’ントã¨ã‚³ãƒ„ã‚’ã¾ã¨ã‚ã¦ã€è‡ªç¤¾è£½å“用㮠Ansible モジュールを開発ã—ã¦ã„ã‚‹ä¼æ¥­ã‚„ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティー製å“用㮠Ansible モジュールを開発ã—ã¦ã„るユーザーを支æ´ã—ã¾ã™ã€‚コレクションã®å½¢å¼ã¨è¿½åŠ ã®é–‹ç™ºã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã®è©³ç´°ã¯ã€ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:15 msgid "Before you start coding" msgstr "コーディングを開始ã™ã‚‹å‰ã«" #: ../../rst/dev_guide/developing_modules_in_groups.rst:17 msgid "This list of prerequisites is designed to help ensure that you develop high-quality modules that work well with ansible-core and provide a seamless user experience." msgstr "ã“ã®å‰ææ¡ä»¶ã®ãƒªã‚¹ãƒˆã¯ã€ansible-core ã§é©åˆ‡ã«æ©Ÿèƒ½ã—ã€ã‚·ãƒ¼ãƒ ãƒ¬ã‚¹ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã™ã‚‹é«˜å“質ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’確実ã«é–‹ç™ºã§ãるよã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:19 msgid "Read though all the pages linked off :ref:`developing_modules_general`; paying particular focus to the :ref:`developing_modules_checklist`." msgstr "「:ref:`developing_modules_general`ã€ã‹ã‚‰ãƒªãƒ³ã‚¯ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã‚’読ã¿ã¾ã™ã€‚特ã«ã€ã€Œ:ref:`developing_modules_checklist`ã€ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:20 msgid "We encourage PEP 8 compliance. See :ref:`testing_pep8` for more information." msgstr "PEP 8 ã‚³ãƒ³ãƒ—ãƒ©ã‚¤ã‚¢ãƒ³ã‚¹ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚詳細ã¯ã€Œ:ref:`testing_pep8`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:21 msgid "We encourage supporting :ref:`Python 2.6+ and Python 3.5+ `." msgstr ":ref:`Python 2.6 以é™ãŠã‚ˆã³ Python 3.5 ä»¥é™ ` をサãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:22 msgid "Look at Ansible Galaxy and review the naming conventions in your functional area (such as cloud, networking, databases)." msgstr "Ansible Galaxy を確èªã—ã€æ©Ÿèƒ½ã‚¨ãƒªã‚¢ (クラウドã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãªã©) ã§å‘½åè¦å‰‡ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:23 msgid "With great power comes great responsibility: Ansible collection maintainers have a duty to help keep content up to date and release collections they are responsible for regularly. As with all successful community projects, collection maintainers should keep a watchful eye for reported issues and contributions." msgstr "大ããªåŠ›ã«ã¯å¤§ããªè²¬ä»»ãŒä¼´ã„ã¾ã™ã€‚Ansible コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を最新ã®çŠ¶æ…‹ã«ä¿ã¡ã€å®šæœŸçš„ã«è²¬ä»»ã®ã‚るコレクションをリリースã™ã‚‹ã®ã‚’支æ´ã™ã‚‹ç¾©å‹™ãŒã‚りã¾ã™ã€‚æˆåŠŸã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ—ロジェクトã¨åŒæ§˜ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã€å ±å‘Šã•れãŸå•é¡Œã‚„è²¢çŒ®ã«æ³¨æ„を払ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:24 msgid "We strongly recommend unit and/or integration tests. Unit tests are especially valuable when external resources (such as cloud or network devices) are required. For more information see :ref:`developing_testing` and the `Testing Working Group `_." msgstr "ユニットテストや統åˆãƒ†ã‚¹ãƒˆãŒå¼·ã推奨ã•れã¾ã™ã€‚ユニットテストã¯ã€å¤–部リソース (クラウドやãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ãªã©) ãŒå¿…è¦ãªå ´åˆã«ç‰¹ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`developing_testing`ã€ãŠã‚ˆã³ã€Œ`ワーキンググループã®ãƒ†ã‚¹ãƒˆ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:28 msgid "Naming conventions" msgstr "命åè¦å‰‡" #: ../../rst/dev_guide/developing_modules_in_groups.rst:30 msgid "Fully Qualified Collection Names (FQCNs) for plugins and modules include three elements:" msgstr "プラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç”¨ã®å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ã«ã¯ 3 ã¤ã®è¦ç´ ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:32 msgid "the Galaxy namespace, which generally represents the company or group" msgstr "Galaxy åå‰ç©ºé–“。通常ã€ä¼šç¤¾ã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—を表ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:33 msgid "the collection name, which generally represents the product or OS" msgstr "コレクションå。通常ã¯è£½å“ã¾ãŸã¯ OS を表ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:37 msgid "the plugin or module name" msgstr "プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å" #: ../../rst/dev_guide/developing_modules_in_groups.rst:35 msgid "always in lower case" msgstr "常ã«å°æ–‡å­—" #: ../../rst/dev_guide/developing_modules_in_groups.rst:36 msgid "words separated with an underscore (``_``) character" msgstr "å˜èªžã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ (``_``) 文字ã§åŒºåˆ‡ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:37 msgid "singular, rather than plural, for example, ``command`` not ``commands``" msgstr "複数形ã§ã¯ãªãã€å˜æ•°å½¢ (例: ``commands`` ã§ã¯ãªã ``command``)" #: ../../rst/dev_guide/developing_modules_in_groups.rst:39 msgid "For example, ``community.mongodb.mongodb_linux`` or ``cisco.meraki.meraki_device``." msgstr "ãŸã¨ãˆã°ã€``community.mongodb.mongodb_linux`` ã¾ãŸã¯ ``cisco.meraki.meraki_device`` ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:41 msgid "It is convenient if the organization and repository names on GitHub (or elsewhere) match your namespace and collection names on Ansible Galaxy, but it is not required. The plugin names you select, however, are always the same in your code repository and in your collection artifact on Galaxy." msgstr "GitHub (ã¾ãŸã¯åˆ¥ã®å ´æ‰€) ã®çµ„ç¹”ã¨ãƒªãƒã‚¸ãƒˆãƒªãƒ¼å㌠Ansible Galaxy ã®åå‰ç©ºé–“ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¨ä¸€è‡´ã™ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™ãŒã€å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“。ãŸã ã—ã€é¸æŠžã—ãŸãƒ—ラグインåã¯ã€ã‚³ãƒ¼ãƒ‰ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã¨ Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã§å¸¸ã«åŒã˜ã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:44 msgid "Speak to us" msgstr "ãŠå•ã„åˆã‚ã›" #: ../../rst/dev_guide/developing_modules_in_groups.rst:46 msgid "Circulating your ideas before coding helps you adopt good practices and avoid common mistakes. After reading the \"Before you start coding\" section you should have a reasonable idea of the structure of your modules. Write a list of your proposed plugin and/or module names, with a short description of what each one does. Circulate that list on IRC or a mailing list so the Ansible community can review your ideas for consistency and familiarity. Names and functionality that are consistent, predictable, and familiar make your collection easier to use." msgstr "コーディングã®å‰ã«ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’出ã—åˆã†ã“ã¨ã§ã€è‰¯ã„習慣をå–り入れã€ã‚ˆãã‚ã‚‹é–“é•ã„ã‚’é¿ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「コーディングを始ã‚ã‚‹å‰ã«ã€ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’読んã å¾Œã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ§‹é€ ã«ã¤ã„ã¦å¦¥å½“ãªã‚¢ã‚¤ãƒ‡ã‚¢ãŒã‚ã‚‹ã¯ãšã§ã™ã€‚ææ¡ˆã™ã‚‹ãƒ—ラグインやモジュールã®åå‰ã®ãƒªã‚¹ãƒˆã‚’書ãã€ãれãžã‚ŒãŒä½•ã‚’ã™ã‚‹ã®ã‹ã‚’ç°¡å˜ã«èª¬æ˜Žã—ã¦ãã ã•ã„。ãã®ãƒªã‚¹ãƒˆã‚’ã€IRC やメーリングリストã§å…±æœ‰ã—ã¦ã€Ansible コミュニティーãŒä¸€è²«æ€§ã‚„親ã—ã¿ã‚„ã™ã•ã®è¦³ç‚¹ã‹ã‚‰ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’検討ã§ãるよã†ã«ã—ã¾ã™ã€‚一貫性ãŒã‚りã€äºˆæ¸¬å¯èƒ½ã§ã€è¦ªã—ã¿ã‚„ã™ã„åå‰ã‚„機能ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’より使ã„ã‚„ã™ãã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:51 msgid "Where to get support" msgstr "サãƒãƒ¼ãƒˆã‚’å—ã‘る場所" #: ../../rst/dev_guide/developing_modules_in_groups.rst:53 msgid "Ansible has a thriving and knowledgeable community of module developers that is a great resource for getting your questions answered." msgstr "Ansible ã«ã¯ã€æ´»ç™ºã§çŸ¥è­˜ãŒè±Šå¯Œãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºè€…ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒã‚りã€è³ªå•ã«ç­”ãˆã‚‹ãŸã‚ã®ç´ æ™´ã‚‰ã—ã„リソースã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:55 msgid "In the :ref:`ansible_community_guide` you can find how to:" msgstr ":ref:`ansible_community_guide` ã§ã€ä»¥ä¸‹ã®æ–¹æ³•を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:57 msgid "Subscribe to the Mailing Lists - We suggest \"Ansible Development List\" and \"Ansible Announce list\"" msgstr "メーリングリストをサブスクライブã™ã‚‹ã“ã¨ã€‚「Ansible Development Listã€ãŠã‚ˆã³ã€ŒAnsible Announce listã€ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:58 msgid "``#ansible-devel`` - We have found that communicating on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) works best for developers so we can have an interactive dialogue." msgstr "``#ansible-devel`` - ``#ansible-devel``ã®ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.im ã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `ã§IRCを使用)ã§ã®å¯¾è©±ãŒé–‹ç™ºè€…ã«æœ€é©ãªã‚‚ã®ã§ã‚ã‚‹ã“ã¨ãŒåˆ†ã‹ã£ã¦ã„ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªä¼šè©±ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:59 msgid "Working group and other chat channel meetings - Join the various weekly meetings `meeting schedule and agenda page `_" msgstr "ワーキンググループãŠã‚ˆã³ãã®ä»–ã®ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚° - ã•ã¾ã–ã¾ãªé€±é–“ミーティング(`meeting schedule and agenda page `_)ã«å‚加ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:62 msgid "Required files" msgstr "必須ファイル" #: ../../rst/dev_guide/developing_modules_in_groups.rst:64 msgid "Your collection should include the following files to be usable:" msgstr "コレクションã«ã¯ã€ä½¿ç”¨å¯èƒ½ãªä»¥ä¸‹ã®ãƒ•ァイルãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:66 msgid "an ``__init__.py`` file - An empty file to initialize namespace and allow Python to import the files. *Required*" msgstr "``__init__.py`` ファイル - åå‰ç©ºé–“ã‚’åˆæœŸåŒ–ã—ã€Python ãŒãƒ•ァイルをインãƒãƒ¼ãƒˆã§ãるよã†ã«ã™ã‚‹ç©ºã®ãƒ•ァイル。*å¿…é ˆ*" #: ../../rst/dev_guide/developing_modules_in_groups.rst:67 msgid "at least one plugin, for example, ``/plugins/modules/$your_first_module.py``. *Required*" msgstr "å°‘ãªãã¨ã‚‚ 1 ã¤ã®ãƒ—ラグイン (例: ``/plugins/modules/$your_first_module.py``)。*å¿…é ˆ*" #: ../../rst/dev_guide/developing_modules_in_groups.rst:68 msgid "if needed, one or more ``/plugins/doc_fragments/$topic.py`` files - Code documentation, such as details regarding common arguments. *Optional*" msgstr "å¿…è¦ãªå ´åˆã¯ã€1 ã¤ä»¥ä¸Šã® ``/plugins/doc_fragments/$topic.py`` ファイル - 一般的ãªå¼•æ•°ã®è©³ç´°ãªã©ã®ã‚³ãƒ¼ãƒ‰ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€‚*ä»»æ„*" #: ../../rst/dev_guide/developing_modules_in_groups.rst:69 msgid "if needed, one or more ``/plugins/module_utils/$topic.py`` files - Code shared between more than one module, such as common arguments. *Optional*" msgstr "å¿…è¦ãªå ´åˆã¯ã€1 ã¤ä»¥ä¸Šã® ``/plugins/module_utils/$topic.py`` ファイル - 一般的ãªå¼•æ•°ãªã©ã®ã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–“ã§å…±æœ‰ã•れるコード。*ä»»æ„*" #: ../../rst/dev_guide/developing_modules_in_groups.rst:71 msgid "When you have these files ready, review the :ref:`developing_modules_checklist` again. If you are creating a new collection, you are responsible for all procedures related to your repository, including setting rules for contributions, finding reviewers, and testing and maintaining the code in your collection." msgstr "ã“れらã®ãƒ•ã‚¡ã‚¤ãƒ«ã®æº–å‚™ãŒæ•´ã£ãŸã‚‰ã€:ref:`developing_modules_checklist` ã‚’å†åº¦ç¢ºèªã—ã¾ã™ã€‚æ–°ã—ã„コレクションを作æˆã™ã‚‹å ´åˆã¯ã€è²¢çŒ®ã®ãƒ«ãƒ¼ãƒ«è¨­å®šã€ãƒ¬ãƒ“ュー担当者ã®è¦‹ã¤ã‘æ–¹ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãŠã‘るコードã®ãƒ†ã‚¹ãƒˆãŠã‚ˆã³ä¿å®ˆãªã©ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®æ‰‹é †ã‚’担当ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_modules_in_groups.rst:73 msgid "If you need help or advice, consider joining the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). For more information, see :ref:`developing_in_groups_support` and :ref:`communication`." msgstr "ヘルプやアドãƒã‚¤ã‚¹ãŒå¿…è¦ãªå ´åˆã¯ã€``#ansible-devel`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚åŠ ã‚’ã”æ¤œè¨Žãã ã•ã„(ansible.imã§Matrixã®ä½¿ç”¨ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)。詳細ã«ã¤ã„ã¦ã¯ã€:ref:`developing_in_groups_support` ã¨:ref:`communication` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:76 msgid "New to git or GitHub" msgstr "git ã¾ãŸã¯ GitHub ã‚’ã¯ã˜ã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆ" #: ../../rst/dev_guide/developing_modules_in_groups.rst:78 msgid "We realize this may be your first use of Git or GitHub. The following guides may be of use:" msgstr "ã“ã“ã§ã¯ã€Git ã¾ãŸã¯ GitHub ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’対象ã¨ã—ã¦ã„ã¾ã™ã€‚次ã®ã‚¬ã‚¤ãƒ‰ãŒå‚考ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_modules_in_groups.rst:80 msgid "`How to create a fork of ansible/ansible `_" msgstr "`How to create a fork of ansible/ansible `_" #: ../../rst/dev_guide/developing_modules_in_groups.rst:81 msgid "`How to sync (update) your fork `_" msgstr "`How to sync (update) your fork `_" #: ../../rst/dev_guide/developing_modules_in_groups.rst:82 msgid "`How to create a Pull Request (PR) `_" msgstr "`How to create a Pull Request (PR) `_" #: ../../rst/dev_guide/developing_plugins.rst:6 msgid "Developing plugins" msgstr "プラグインã®é–‹ç™º" #: ../../rst/dev_guide/developing_plugins.rst:11 msgid "Plugins augment Ansible's core functionality with logic and features that are accessible to all modules. Ansible collections include a number of handy plugins, and you can easily write your own. All plugins must:" msgstr "プラグインã¯ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚¢ã‚¯ã‚»ã‚¹ã§ãるロジックãŠã‚ˆã³æ©Ÿèƒ½ã‚’使用ã—㦠Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã‚’æ‹¡å¼µã—ã¾ã™ã€‚Ansible コレクションã«ã¯å¤šãã®ä¾¿åˆ©ãªãƒ—ラグインãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ç‹¬è‡ªã®ãƒ—ラグインを簡å˜ã«ä½œæˆã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ—ラグインã§ã¯ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:13 msgid "be written in Python" msgstr "Python ã§æ›¸ã‹ã‚Œã¦ã„る。" #: ../../rst/dev_guide/developing_plugins.rst:14 msgid "raise errors" msgstr "エラーを発生ã•ã›ã‚‹ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:15 msgid "return strings in unicode" msgstr "Unicode ã§æ–‡å­—列を返ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:16 msgid "conform to Ansible's configuration and documentation standards" msgstr "Ansible ã®è¨­å®šãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ¨™æº–ä»•æ§˜ã«æº–æ‹ ã™ã‚‹ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:18 msgid "Once you've reviewed these general guidelines, you can skip to the particular type of plugin you want to develop." msgstr "ã“れらã®ä¸€èˆ¬çš„ãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’確èªã—ãŸã‚‰ã€é–‹ç™ºã™ã‚‹ç‰¹å®šã®ã‚¿ã‚¤ãƒ—ã®ãƒ—ラグインã«é€²ã‚“ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:21 msgid "Writing plugins in Python" msgstr "Python ã§ã®ãƒ—ラグインã®ä½œæˆ" #: ../../rst/dev_guide/developing_plugins.rst:23 msgid "You must write your plugin in Python so it can be loaded by the ``PluginLoader`` and returned as a Python object that any module can use. Since your plugin will execute on the controller, you must write it in a :ref:`compatible version of Python `." msgstr "``PluginLoader`` ã«ã‚ˆã‚Šèª­ã¿è¾¼ã¾ã‚Œã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã§ãã‚‹ Python オブジェクトã¨ã—ã¦è¿”ã™ã«ã¯ã€Python ã§ãƒ—ラグインを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラグインã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã€:ref:`äº’æ›æ€§ã®ã‚ã‚‹ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ ` ã§ä½œæˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:26 msgid "Raising errors" msgstr "エラーã®ç™ºç”Ÿ" #: ../../rst/dev_guide/developing_plugins.rst:28 msgid "You should return errors encountered during plugin execution by raising ``AnsibleError()`` or a similar class with a message describing the error. When wrapping other exceptions into error messages, you should always use the ``to_native`` Ansible function to ensure proper string compatibility across Python versions:" msgstr "プラグインã®å®Ÿè¡Œä¸­ã«ç™ºç”Ÿã—ãŸã‚¨ãƒ©ãƒ¼ã¯ã€``AnsibleError()`` ã¾ãŸã¯ã‚¨ãƒ©ãƒ¼ã‚’記述ã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ã‚ã‚‹åŒæ§˜ã®ã‚¯ãƒ©ã‚¹ã‚’発生ã•ã›ã¦è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ä»–ã®ä¾‹å¤–をエラーメッセージã«ãƒ©ãƒƒãƒ—ã™ã‚‹å ´åˆã¯ã€Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³é–“ã§é©åˆ‡ãªæ–‡å­—列ã®äº’æ›æ€§ã‚’確ä¿ã™ã‚‹ãŸã‚ã«ã€å¸¸ã« Ansible 関数㮠``to_native`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:39 msgid "Since Ansible evaluates variables only when they are needed, filter and test plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary." msgstr "Ansibleã¯å¿…è¦ãªã¨ãã«ã®ã¿å¤‰æ•°ã‚’評価ã™ã‚‹ã®ã§ã€æœªå®šç¾©ã®å¤‰æ•°ãŒå¿…è¦ãªã¨ãã«ã®ã¿è‡´å‘½çš„ãªå•題を起ã“ã™ã‚ˆã†ã«ã€ãƒ•ィルターやテストプラグインã¯ã€ä¾‹å¤–``jinja2.exceptions.UndefinedError`` ã¨``AnsibleUndefinedVariable`` ã‚’ä¼æ’­ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:41 msgid "Check the different `AnsibleError objects `_ and see which one applies best to your situation. Check the section on the specific plugin type you're developing for type-specific error handling details." msgstr "ã•ã¾ã–ã¾ãª`AnsibleError objects `_ ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã€ã©ã‚ŒãŒè‡ªåˆ†ã®çжæ³ã«æœ€ã‚‚é©ã—ã¦ã„ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。開発ã—ã¦ã„る特定ã®ãƒ—ライグインタイプã«å›ºæœ‰ã®ã‚¨ãƒ©ãƒ¼å‡¦ç†ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ãã®ã‚¿ã‚¤ãƒ—ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:45 msgid "String encoding" msgstr "文字列エンコーディング" #: ../../rst/dev_guide/developing_plugins.rst:47 msgid "You must convert any strings returned by your plugin into Python's unicode type. Converting to unicode ensures that these strings can run through Jinja2. To convert strings:" msgstr "プラグインã«ã‚ˆã£ã¦è¿”ã•れる文字列ã¯ã€Python ã® Unicode タイプã«å¤‰æ›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Unicode ã«å¤‰æ›ã™ã‚‹ã¨ã€ã“ã‚Œã‚‰ã®æ–‡å­—列㌠Jinja2 を介ã—ã¦å®Ÿè¡Œã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚文字列を変æ›ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:55 msgid "Plugin configuration & documentation standards" msgstr "プラグインã®è¨­å®šãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ¨™æº–仕様" #: ../../rst/dev_guide/developing_plugins.rst:57 msgid "To define configurable options for your plugin, describe them in the ``DOCUMENTATION`` section of the python file. Callback and connection plugins have declared configuration requirements this way since Ansible version 2.4; most plugin types now do the same. This approach ensures that the documentation of your plugin's options will always be correct and up-to-date. To add a configurable option to your plugin, define it in this format:" msgstr "プラグインã®è¨­å®šå¯èƒ½ãªã‚ªãƒ—ションを定義ã™ã‚‹ã«ã¯ã€python ファイル㮠``DOCUMENTATION`` セクションã«è¨˜è¿°ã—ã¾ã™ã€‚コールãƒãƒƒã‚¯ãŠã‚ˆã³ connection プラグインã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以é™ã€ã“ã®æ–¹æ³•ã§è¨­å®šè¦ä»¶ã‚’宣言ã—ã¾ã™ã€‚ç¾åœ¨ã€ã»ã¨ã‚“ã©ã®ãƒ—ラグインタイプãŒåŒã˜ã‚ˆã†ã«å‹•作ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®æ–¹æ³•ã«ã‚ˆã‚Šã€ãƒ—ラグインã®ã‚ªãƒ—ションã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå¸¸ã«æ­£ç¢ºã§æœ€æ–°ã®çŠ¶æ…‹ã«ãªã‚Šã¾ã™ã€‚設定å¯èƒ½ãªã‚ªãƒ—ションをプラグインã«è¿½åŠ ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®å½¢å¼ã§å®šç¾©ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:78 msgid "To access the configuration settings in your plugin, use ``self.get_option()``. For the plugin types (such as 'become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'netconf', 'shell', and 'vars') that support embedded documentation, the controller pre-populates the settings. If you need to populate settings explicitly, use a ``self.set_options()`` call." msgstr "ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ§‹æˆè¨­å®šã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``self.get_option()``を使用ã—ã¾ã™ã€‚組ã¿è¾¼ã¾ã‚ŒãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラグインタイプ(例:'become'ã€'cache'ã€'callback'ã€'cliconf'ã€'connection'ã€'httpapi'ã€'inventory'ã€'lookup'ã€'netconf'ã€'shell'ã€ãŠã‚ˆã³'vars')ã«ã¤ã„ã¦ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãŒè¨­å®šã‚’事å‰ã«è¨­å®šã—ã¾ã™ã€‚明示的ã«è¨­å®šã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``self.set_options()`` ã®å‘¼ã³å‡ºã—を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:80 msgid "Configuration sources follow the precedence rules for values in Ansible. When there are multiple values from the same category, the value defined last takes precedence. For example, in the above configuration block, if both ``name_of_ansible_var`` and ``name_of_second_var`` are defined, the value of the ``option_name`` option will be the value of ``name_of_second_var``. Refer to :ref:`general_precedence_rules` for further information." msgstr "設定ソースã¯ã€Ansibleã®å€¤ã®å„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ«ã«å¾“ã„ã¾ã™ã€‚åŒã˜ã‚«ãƒ†ã‚´ãƒªã‹ã‚‰ã®å€¤ãŒè¤‡æ•°ã‚ã‚‹å ´åˆã€æœ€å¾Œã«å®šç¾©ã•れãŸå€¤ãŒå„ªå…ˆã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šè¨˜ã®è¨­å®šãƒ–ロックã§ã¯ã€``name_of_ansible_var`` ã¨``name_of_second_var`` ã®ä¸¡æ–¹ãŒå®šç¾©ã•れã¦ã„ã‚‹å ´åˆã€``option_name`` オプションã®å€¤ã¯``name_of_second_var`` ã®å€¤ã«ãªã‚Šã¾ã™ã€‚詳細ã¯:ref:`general_precedence_rules` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:82 msgid "Plugins that support embedded documentation (see :ref:`ansible-doc` for the list) should include well-formed doc strings. If you inherit from a plugin, you must document the options it takes, either via a documentation fragment or as a copy. See :ref:`module_documenting` for more information on correct documentation. Thorough documentation is a good idea even if you're developing a plugin for local use." msgstr "埋ã‚è¾¼ã¿ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラグイン (:ref:`ansible-doc` リストã®å ´åˆã‚’å‚ç…§) ã¯ã€é©åˆ‡ã«æ§‹ç¯‰ã•れãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆæ–‡å­—列をå«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラグインã‹ã‚‰ç¶™æ‰¿ã™ã‚‹å ´åˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを介ã—ã¦ã€ã¾ãŸã¯ã‚³ãƒ”ーã¨ã—ã¦ã€å¿…è¦ãªã‚ªãƒ—ションを記述ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚æ­£ã—ã„ドキュメントã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`module_documenting`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ローカルã§ä½¿ç”¨ã™ã‚‹ãƒ—ラグインを開発ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€å®Œå…¨ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:85 msgid "Developing particular plugin types" msgstr "特定ã®ãƒ—ラグインタイプã®é–‹ç™º" #: ../../rst/dev_guide/developing_plugins.rst:90 #: ../../rst/dev_guide/developing_program_flow_modules.rst:24 msgid "Action plugins" msgstr "action プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:92 msgid "Action plugins let you integrate local processing and local data with module functionality." msgstr "action プラグインを使用ã™ã‚‹ã¨ã€ãƒ­ãƒ¼ã‚«ãƒ«å‡¦ç†ã¨ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‡ãƒ¼ã‚¿ã‚’モジュール機能ã«çµ±åˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:94 msgid "To create an action plugin, create a new class with the Base(ActionBase) class as the parent:" msgstr "action プラグインを作æˆã™ã‚‹ã«ã¯ã€Base(ActionBase) クラスを親ã¨ã—ã¦æ–°ã—ã„クラスを作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:103 msgid "From there, execute the module using the ``_execute_module`` method to call the original module. After successful execution of the module, you can modify the module return data." msgstr "ãã“ã‹ã‚‰ã€``_execute_module`` メソッドを使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¦ã€å…ƒã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã—ã¾ã™ã€‚モジュールã®å®Ÿè¡Œã«æˆåŠŸã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ãƒ‡ãƒ¼ã‚¿ã‚’変更ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:113 msgid "For example, if you wanted to check the time difference between your Ansible controller and your target machine(s), you could write an action plugin to check the local time and compare it to the return data from Ansible's ``setup`` module:" msgstr "ãŸã¨ãˆã°ã€Ansible コントローラーã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³é–“ã®æ™‚間差を確èªã™ã‚‹å ´åˆã¯ã€action プラグインを作æˆã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ã‚¿ã‚¤ãƒ ã‚’確èªã—ã€ãれを Ansible ã® ``setup`` モジュールã‹ã‚‰è¿”ã•ã‚Œã‚‹ãƒ‡ãƒ¼ã‚¿ã¨æ¯”較ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:150 msgid "This code checks the time on the controller, captures the date and time for the remote machine using the ``setup`` module, and calculates the difference between the captured time and the local time, returning the time delta in days, seconds and microseconds." msgstr "ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®æ™‚間を確èªã—ã€``setup`` モジュールを使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã®æ—¥æ™‚ã‚’å–å¾—ã—ã€å–å¾—ã—ãŸæ™‚é–“ã¨ãƒ­ãƒ¼ã‚«ãƒ«æ™‚é–“ã®å·®ç•°ã‚’算出ã—ã€ãã®æ™‚間差を日数ã€ç§’ã€ãŠã‚ˆã³ãƒžã‚¤ã‚¯ãƒ­ç§’ã§è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:153 msgid "For practical examples of action plugins, see the source code for the `action plugins included with Ansible Core `_" msgstr "action プラグインã®å®Ÿéš›ã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる action プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:159 msgid "Cache plugins" msgstr "Cache プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:161 msgid "Cache plugins store gathered facts and data retrieved by inventory plugins." msgstr "dache プラグインã¯ã€inventory プラグインã«ã‚ˆã£ã¦å–å¾—ã•れるファクトãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚’æ ¼ç´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:163 msgid "Import cache plugins using the cache_loader so you can use ``self.set_options()`` and ``self.get_option()``. If you import a cache plugin directly in the code base, you can only access options via ``ansible.constants``, and you break the cache plugin's ability to be used by an inventory plugin." msgstr "``self.set_options()`` ãŠã‚ˆã³ ``self.get_option()`` を使用ã§ãã‚‹ cache_loader を使用ã™ã‚‹ cache プラグインをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚コードベース㧠cache プラグインを直接インãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€``ansible.constants`` ã‹ã‚‰ã®ã¿ã‚ªãƒ—ションã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã€inventory プラグインã«ã‚ˆã£ã¦ä½¿ç”¨ã•れる cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ©Ÿèƒ½ãŒå£Šã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:171 msgid "There are two base classes for cache plugins, ``BaseCacheModule`` for database-backed caches, and ``BaseCacheFileModule`` for file-backed caches." msgstr "cache プラグインã«ã¯ã€2 ã¤ã®ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ (データベースベースã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—用ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®å ´åˆã¯ ``BaseCacheModule``ã€ãƒ•ァイルã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—用ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®å ´åˆã¯ ``BaseCacheFileModule``) ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:173 msgid "To create a cache plugin, start by creating a new ``CacheModule`` class with the appropriate base class. If you're creating a plugin using an ``__init__`` method you should initialize the base class with any provided args and kwargs to be compatible with inventory plugin cache options. The base class calls ``self.set_options(direct=kwargs)``. After the base class ``__init__`` method is called ``self.get_option()`` should be used to access cache options." msgstr "キャッシュプラグインを作æˆã™ã‚‹ã«ã¯ã€é©åˆ‡ãªãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ã§æ–°ã—ã„ ``CacheModule`` クラスを作æˆã—ã¦é–‹å§‹ã—ã¾ã™ã€‚``__init__`` メソッドを使用ã—ã¦ãƒ—ラグインを作æˆã™ã‚‹å ´åˆã¯ã€æŒ‡å®šã•れ㟠arg ãŠã‚ˆã³ kwarg ã§ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ã‚’åˆæœŸåŒ–ã—ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインキャッシュオプションã¨äº’æ›æ€§ãŒã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ベースクラス㯠``self.set_options(direct=kwargs)`` を呼ã³å‡ºã—ã¾ã™ã€‚ベースクラス ``__init__`` メソッドãŒå‘¼ã³å‡ºã•れるã¨ã€``self.get_option()`` を使用ã—ã¦ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚ªãƒ—ションã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:175 msgid "New cache plugins should take the options ``_uri``, ``_prefix``, and ``_timeout`` to be consistent with existing cache plugins." msgstr "æ–°ã—ã„ cache プラグインã¯ã€æ—¢å­˜ã® cache プラグインã¨ã®æ•´åˆæ€§ã‚’ä¿ã¤ãŸã‚ã«ã€``_uri`` オプションã€``_prefix`` オプションã€ãŠã‚ˆã³ ``_timeout`` オプションを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:188 msgid "If you use the ``BaseCacheModule``, you must implement the methods ``get``, ``contains``, ``keys``, ``set``, ``delete``, ``flush``, and ``copy``. The ``contains`` method should return a boolean that indicates if the key exists and has not expired. Unlike file-based caches, the ``get`` method does not raise a KeyError if the cache has expired." msgstr "``BaseCacheModule`` を使用ã™ã‚‹å ´åˆã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰ ``get``ã€``contains``ã€``keys``ã€``set``ã€``delete``ã€``flush``ã€ãŠã‚ˆã³ ``copy`` を実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``contains`` メソッドã¯ã€ã‚­ãƒ¼ãŒå­˜åœ¨ã—ã€æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„ãªã„ã“ã¨ã‚’示ã™ãƒ–ール値を返ã™ã¯ãšã§ã™ã€‚ファイルベースã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¨ã¯ç•°ãªã‚Šã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€``get`` メソッドã«ã‚ˆã£ã¦ KeyError ã¯ç™ºç”Ÿã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_plugins.rst:190 msgid "If you use the ``BaseFileCacheModule``, you must implement ``_load`` and ``_dump`` methods that will be called from the base class methods ``get`` and ``set``." msgstr "``BaseFileCacheModule`` を使用ã™ã‚‹å ´åˆã¯ã€ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ãƒ¡ã‚½ãƒƒãƒ‰ ``get`` ãŠã‚ˆã³ ``set`` ã‹ã‚‰å‘¼ã³å‡ºã•れる ``_load`` メソッドãŠã‚ˆã³ ``_dump`` メソッドを実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:192 msgid "If your cache plugin stores JSON, use ``AnsibleJSONEncoder`` in the ``_dump`` or ``set`` method and ``AnsibleJSONDecoder`` in the ``_load`` or ``get`` method." msgstr "キャッシュプラグイン㫠JSON ãŒä¿å­˜ã•れã¦ã„ã‚‹å ´åˆã¯ã€``_dump`` メソッドã¾ãŸã¯ ``set`` メソッド㮠``AnsibleJSONEncoder`` ã¨ã€``_load`` メソッドã¾ãŸã¯``get`` メソッド㮠``AnsibleJSONDecoder`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:194 msgid "For example cache plugins, see the source code for the `cache plugins included with Ansible Core `_." msgstr "cache プラグインã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる cache プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:199 msgid "Callback plugins" msgstr "callback プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:201 msgid "Callback plugins add new behaviors to Ansible when responding to events. By default, callback plugins control most of the output you see when running the command line programs." msgstr "callback プラグインã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆã«å¿œç­”ã™ã‚‹éš›ã«æ–°ã—ã„動作を Ansible ã«è¿½åŠ ã—ã¾ã™ã€‚デフォルトã§ã¯ã€callback プラグインã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ—ログラムã®å®Ÿè¡Œæ™‚ã«è¡¨ç¤ºã•れるã»ã¨ã‚“ã©ã®å‡ºåŠ›ã‚’åˆ¶å¾¡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:203 msgid "To create a callback plugin, create a new class with the Base(Callbacks) class as the parent:" msgstr "callback プラグインを作æˆã™ã‚‹ã«ã¯ã€Base(Callbacks) クラスを親ã¨ã—ã¦ä½¿ç”¨ã—ã¦æ–°è¦ã‚¯ãƒ©ã‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:212 msgid "From there, override the specific methods from the CallbackBase that you want to provide a callback for. For plugins intended for use with Ansible version 2.0 and later, you should only override methods that start with ``v2``. For a complete list of methods that you can override, please see ``__init__.py`` in the `lib/ansible/plugins/callback `_ directory." msgstr "ãã“ã‹ã‚‰ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’æä¾›ã™ã‚‹ CallbackBase ã‹ã‚‰ç‰¹å®šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’上書ãã—ã¾ã™ã€‚Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 以é™ã§ä½¿ç”¨ã™ã‚‹ãƒ—ラグインã§ã¯ã€``v2`` ã§å§‹ã¾ã‚‹æ–¹æ³•ã®ã¿ã‚’上書ãã—ã¦ãã ã•ã„。上書ãã§ãるメソッドã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€`lib/ansible/plugins/callback `_ ディレクトリー㮠``__init__.py`` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:217 msgid "The following is a modified example of how Ansible's timer plugin is implemented, but with an extra option so you can see how configuration works in Ansible version 2.4 and later:" msgstr "以下ã¯ã€Ansible ã® timer プラグインã®å®Ÿè£…方法ã®å¤‰æ›´ä¾‹ã§ã™ã€‚ãŸã ã—ã€è¿½åŠ ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã¨ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以é™ã§æ§‹æˆãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:286 msgid "Note that the ``CALLBACK_VERSION`` and ``CALLBACK_NAME`` definitions are required for properly functioning plugins for Ansible version 2.0 and later. ``CALLBACK_TYPE`` is mostly needed to distinguish 'stdout' plugins from the rest, since you can only load one plugin that writes to stdout." msgstr "``CALLBACK_VERSION`` ãŠã‚ˆã³ ``CALLBACK_NAME`` ã®å®šç¾©ã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 以é™ã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。``CALLBACK_TYPE`` ã¯ã€æ¨™æº–出力 (stdout) ã«æ›¸ã込むプラグインを 1 ã¤ã ã‘読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ã»ã¨ã‚“ã©ã®ã€Œstdoutã€ãƒ—ラグインをãã®ä»–ã®ã‚‚ã®ã¨åŒºåˆ¥ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:288 msgid "For example callback plugins, see the source code for the `callback plugins included with Ansible Core `_" msgstr "callback プラグインã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる callback プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:290 msgid "New in ansible-core 2.11, callback plugins are notified (via ``v2_playbook_on_task_start``) of :ref:`meta` tasks. By default, only explicit ``meta`` tasks that users list in their plays are sent to callbacks." msgstr "ansible-core 2.11 ã®æ–°æ©Ÿèƒ½ã¨ã—ã¦ã€:ref:`meta` タスクã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグイン㌠(``v2_playbook_on_task_start`` を介ã—ã¦) 通知ã•れã¾ã™ã€‚デフォルトã§ã¯ã€ãƒ—レイã«è¿½åŠ ã™ã‚‹æ˜Žç¤ºçš„㪠``meta`` タスクã®ã¿ãŒã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã«é€ä¿¡ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:292 msgid "There are also some tasks which are generated internally and implicitly at various points in execution. Callback plugins can opt-in to receiving these implicit tasks as well, by setting ``self.wants_implicit_tasks = True``. Any ``Task`` object received by a callback hook will have an ``.implicit`` attribute, which can be consulted to determine whether the ``Task`` originated from within Ansible, or explicitly by the user." msgstr "実行ã®ã•ã¾ã–ã¾ãªæ™‚点ã§ã€å†…部的ãŠã‚ˆã³æš—黙的ã«ç”Ÿæˆã•れるタスクもã„ãã¤ã‹ã‚りã¾ã™ã€‚callback プラグインã¯ã€``self.wants_implicit_tasks = True`` を設定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã“ã‚Œã‚‰ã®æš—黙的ãªã‚¿ã‚¹ã‚¯ã‚’å—ã‘å–ã‚‹ã“ã¨ã‚’オプトインã§ãã¾ã™ã€‚コールãƒãƒƒã‚¯ãƒ•ックã«ã‚ˆã£ã¦å—ä¿¡ã—㟠``Task`` オブジェクトã«ã¯ã€``.implicit`` 属性ãŒã‚りã¾ã™ã€‚ã“れをå‚ç…§ã—ã¦ã€``Task`` ㌠Ansible 内ã‹ã‚‰ã€ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦æ˜Žç¤ºçš„ã«ç™ºä¿¡ã•れãŸã‹ã©ã†ã‹ã‚’決ã‚ã‚‹ãŸã‚ã«å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:297 msgid "Connection plugins" msgstr "connection プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:299 msgid "Connection plugins allow Ansible to connect to the target hosts so it can execute tasks on them. Ansible ships with many connection plugins, but only one can be used per host at a time. The most commonly used connection plugins are the ``paramiko`` SSH, native ssh (just called ``ssh``), and ``local`` connection types. All of these can be used in playbooks and with ``/usr/bin/ansible`` to connect to remote machines." msgstr "connection プラグインã«ã‚ˆã‚Šã€Ansible ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã¦ãã®ãƒ›ã‚¹ãƒˆã«ã‚るタスクを実行ã§ãるよã†ã«ã—ã¾ã™ã€‚Ansible ã«ã¯å¤šãã® connection プラグインãŒåŒæ¢±ã•れã¦ã„ã¾ã™ãŒã€ä¸€åº¦ã«ä½¿ç”¨ã§ãã‚‹ã®ã¯ 1 ã¤ã®ã¿ã¨ãªã‚Šã¾ã™ã€‚最も一般的ã«ä½¿ç”¨ã•れる connection プラグインã¯ã€``paramiko`` SSHã€ãƒã‚¤ãƒ†ã‚£ãƒ– ssh (å˜ã« ``ssh`` ã¨å‘¼ã°ã‚Œã‚‹)ã€ãŠã‚ˆã³ ``local`` 接続タイプã§ã™ã€‚ã“れらã¯ã™ã¹ã¦ Playbook ã§ä½¿ç”¨ã•れã€``/usr/bin/ansible`` を使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:301 msgid "Ansible version 2.1 introduced the ``smart`` connection plugin. The ``smart`` connection type allows Ansible to automatically select either the ``paramiko`` or ``openssh`` connection plugin based on system capabilities, or the ``ssh`` connection plugin if OpenSSH supports ControlPersist." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.1 ã§ã¯ã€``smart`` connection プラグインãŒå°Žå…¥ã•れã¾ã™ã€‚``smart`` 接続タイプã«ã‚ˆã‚Šã€Ansible ã¯ã€ã‚·ã‚¹ãƒ†ãƒ æ©Ÿèƒ½ã«åŸºã¥ã„ã¦ã€``paramiko`` ã¾ãŸã¯ ``openssh`` connection プラグインã®ã„ãšã‚Œã‹ã‚’自動的ã«é¸æŠžã§ãã¾ã™ãŒã€OpenSSH ㌠ControlPersist ã«å¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ connetion プラグイン ``ssh`` ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:303 msgid "To create a new connection plugin (for example, to support SNMP, Message bus, or other transports), copy the format of one of the existing connection plugins and drop it into ``connection`` directory on your :ref:`local plugin path `." msgstr "æ–°ã—ã„ connetion プラグイン (SNMPã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒã‚¹ã€ã¾ãŸã¯ãã®ä»–ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã‚’サãƒãƒ¼ãƒˆã™ã‚‹å ´åˆãªã©) を作æˆã™ã‚‹ã«ã¯ã€æ—¢å­˜ã® connetion プラグインã®ã„ãšã‚Œã‹ã®å½¢å¼ã‚’コピーã—ã¦ã€:ref:`ローカルプラグインパス ` ã«ã‚ã‚‹ ``connection`` ディレクトリーã«ç½®ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:305 msgid "Connection plugins can support common options (such as the ``--timeout`` flag) by defining an entry in the documentation for the attribute name (in this case ``timeout``). If the common option has a non-null default, the plugin should define the same default since a different default would be ignored." msgstr "connection プラグインã¯ã€å±žæ€§å (ã“ã“ã§ã¯ ``timeout``) ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’定義ã™ã‚‹ã“ã¨ã§ã€ä¸€èˆ¬çš„ãªã‚ªãƒ—ション (``--timeout`` フラグãªã©) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚一般的ãªã‚ªãƒ—ションã«ã¯ null 以外ã®ãƒ‡ãƒ•ォルトãŒã‚ã‚‹å ´åˆã€åˆ¥ã®ãƒ‡ãƒ•ォルトã¯ç„¡è¦–ã•れるãŸã‚ã€ãƒ—ラグインã¯åŒã˜ãƒ‡ãƒ•ォルトを定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:307 msgid "For example connection plugins, see the source code for the `connection plugins included with Ansible Core `_." msgstr "é¸æŠžãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる接続プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:312 msgid "Filter plugins" msgstr "filter プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:314 msgid "Filter plugins manipulate data. They are a feature of Jinja2 and are also available in Jinja2 templates used by the ``template`` module. As with all plugins, they can be easily extended, but instead of having a file for each one you can have several per file. Most of the filter plugins shipped with Ansible reside in a ``core.py``." msgstr "filter プラグインã¯ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã—ã¾ã™ã€‚ã“れら㯠Jinja2 ã®æ©Ÿèƒ½ã§ã‚りã€``template`` モジュールãŒä½¿ç”¨ã™ã‚‹ Jinja2 テンプレートã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ—ラグインã¨åŒæ§˜ã«ã€ãƒ—ラグインã¯ç°¡å˜ã«æ‹¡å¼µã§ãã¾ã™ãŒã€ãƒ—ラグインã”ã¨ã«ãƒ•ァイルを作æˆã™ã‚‹ä»£ã‚りã«ã€ãƒ•ァイルã”ã¨ã«è¤‡æ•°ã®ãƒ—ラグインを作æˆã§ãã¾ã™ã€‚Ansible ã«åŒæ¢±ã•れã¦ã„るフィルタープラグインã®ã»ã¨ã‚“ã©ã¯ã€``core.py`` ã«ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:316 msgid "Filter plugins do not use the standard configuration and documentation system described above." msgstr "filter プラグインã¯ã€ä¸Šè¨˜ã®æ¨™æº–設定ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_plugins.rst:318 msgid "Since Ansible evaluates variables only when they are needed, filter plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary." msgstr "Ansibleã¯å¿…è¦ãªã¨ãã«ã®ã¿å¤‰æ•°ã‚’評価ã™ã‚‹ã®ã§ã€æœªå®šç¾©ã®å¤‰æ•°ãŒå¿…è¦ãªã¨ãã«ã®ã¿è‡´å‘½çš„ãªå•題を起ã“ã™ã‚ˆã†ã«ã€ãƒ•ィルタープラグインã¯ã€ä¾‹å¤–``jinja2.exceptions.UndefinedError`` ã¨``AnsibleUndefinedVariable`` ã‚’ä¼æ’­ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:329 msgid "For example filter plugins, see the source code for the `filter plugins included with Ansible Core `_." msgstr "filter プラグインã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる filter プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:336 msgid "Inventory plugins parse inventory sources and form an in-memory representation of the inventory. Inventory plugins were added in Ansible version 2.4." msgstr "inventory プラグインã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’è§£æžã—ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚¤ãƒ³ãƒ¡ãƒ¢ãƒªãƒ¼è¡¨ç¤ºã‚’å½¢æˆã—ã¾ã™ã€‚inventory プラグイン㯠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 ã§è¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_plugins.rst:338 msgid "You can see the details for inventory plugins in the :ref:`developing_inventory` page." msgstr "inventory プラグインã®è©³ç´°ã¯ã€:ref:`developing_inventory` ページをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:343 msgid "Lookup plugins" msgstr "lookup プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:345 msgid "Lookup plugins pull in data from external data stores. Lookup plugins can be used within playbooks both for looping --- playbook language constructs like ``with_fileglob`` and ``with_items`` are implemented via lookup plugins --- and to return values into a variable or parameter." msgstr "lookup プラグインã¯ã€å¤–部データストアã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’プルã—ã¾ã™ã€‚lookup プラグイン㯠Playbook 内ã§ãƒ«ãƒ¼ãƒ—ã™ã‚‹ãŸã‚ (``with_fileglob`` ã‚„ ``with_items`` ãªã©ã® Playbook è¨€èªžã®æ§‹é€ ã¯ lookup プラグインを介ã—ã¦å®Ÿè£…ã•れã¦ã„ã¾ã™)ã€ã¾ãŸå¤‰æ•°ã‚„パラメーターã«å€¤ã‚’è¿”ã™ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:347 msgid "Lookup plugins are very flexible, allowing you to retrieve and return any type of data. When writing lookup plugins, always return data of a consistent type that can be easily consumed in a playbook. Avoid parameters that change the returned data type. If there is a need to return a single value sometimes and a complex dictionary other times, write two different lookup plugins." msgstr "lookup プラグインã¯éžå¸¸ã«æŸ”軟性ãŒã‚ã‚‹ãŸã‚ã€ã‚らゆるタイプã®ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ã€è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚lookup プラグインを記述ã™ã‚‹éš›ã«ã¯ã€Playbook ã§ç°¡å˜ã«ä½¿ç”¨ã§ãる一貫性ã®ã‚るタイプã®ãƒ‡ãƒ¼ã‚¿ã‚’常ã«è¿”ã—ã¾ã™ã€‚è¿”ã•れãŸãƒ‡ãƒ¼ã‚¿åž‹ã‚’変更ã™ã‚‹ãƒ‘ラメーターã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。å˜ä¸€ã®å€¤ã‚’è¿”ã•ãªã‘れã°ãªã‚‰ãªã„ã¨ãã‚‚ã‚れã°ã€è¤‡é›‘ãªãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’è¿”ã•ãªã‘れã°ãªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ã“ã®å ´åˆã¯ã€lookup プラグインを 2 ã¤è¨˜è¿°ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:349 msgid "Ansible includes many :ref:`filters ` which can be used to manipulate the data returned by a lookup plugin. Sometimes it makes sense to do the filtering inside the lookup plugin, other times it is better to return results that can be filtered in the playbook. Keep in mind how the data will be referenced when determining the appropriate level of filtering to be done inside the lookup plugin." msgstr "Ansible ã«ã¯ã€lookup プラグインãŒè¿”ã™ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ :ref:`filters ` ãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚lookup プラグイン内ã§ãƒ•ィルタリングを行ã†ã“ã¨ãŒç†ã«ã‹ãªã£ã¦ã„ã‚‹å ´åˆã‚‚ã‚れã°ã€Playbook ã§ãƒ•ィルタリングã§ãã‚‹çµæžœã‚’è¿”ã™æ–¹ãŒã‚ˆã„å ´åˆã‚‚ã‚りã¾ã™ã€‚lookup プラグイン内ã§å®Ÿè¡Œã™ã‚‹é©åˆ‡ãªãƒ•ィルタリングレベルを決定ã™ã‚‹ã¨ãã¯ã€ãƒ‡ãƒ¼ã‚¿ãŒã©ã®ã‚ˆã†ã«å‚ç…§ã•れるã‹ã«ç•™æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:351 msgid "Here's a simple lookup plugin implementation --- this lookup returns the contents of a text file as a variable:" msgstr "以下ã¯ç°¡å˜ãª lookup プラグインã®å®Ÿè£…ã§ã™ã€‚ã“ã® lookup ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルã®å†…容を変数ã¨ã—ã¦è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:428 msgid "The following is an example of how this lookup is called:" msgstr "以下ã¯ã€ã“ã®ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒã©ã®ã‚ˆã†ã«å‘¼ã³å‡ºã•れるã‹ã®ä¾‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:443 msgid "For example lookup plugins, see the source code for the `lookup plugins included with Ansible Core `_." msgstr "lookup プラグインã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる lookup プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:445 msgid "For more usage examples of lookup plugins, see :ref:`Using Lookups`." msgstr "lookup プラグインã®ãã®ä»–ã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`検索ã®ä½¿ç”¨`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:450 msgid "Test plugins" msgstr "test プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:452 msgid "Test plugins verify data. They are a feature of Jinja2 and are also available in Jinja2 templates used by the ``template`` module. As with all plugins, they can be easily extended, but instead of having a file for each one you can have several per file. Most of the test plugins shipped with Ansible reside in a ``core.py``. These are specially useful in conjunction with some filter plugins like ``map`` and ``select``; they are also available for conditional directives like ``when:``." msgstr "テストプラグインã¯ãƒ‡ãƒ¼ã‚¿ã‚’検証ã—ã¾ã™ã€‚ã“れ㯠Jinja2 ã®æ©Ÿèƒ½ã§ã€``template`` モジュールãŒä½¿ç”¨ã™ã‚‹ Jinja2 テンプレートã§ã‚‚利用ã§ãã¾ã™ã€‚ä»–ã®ã™ã¹ã¦ã®ãƒ—ラグインã¨åŒæ§˜ã€ã“ã®ãƒ—ラグインã¯ç°¡å˜ã«æ‹¡å¼µã§ãã¾ã™ãŒã€ãƒ—ラグインã”ã¨ã«ãƒ•ァイルを作æˆã™ã‚‹ä»£ã‚りã«ã€ãƒ•ァイルã”ã¨ã«è¤‡æ•°ã®ãƒ—ラグインを作æˆã§ãã¾ã™ã€‚Ansible ã«åŒæ¢±ã•れã¦ã„るテストプラグインã®ã»ã¨ã‚“ã©ã¯ã€``core.py`` ã«æ ¼ç´ã•れã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ—ラグインã¯ã€``map`` ã‚„ ``select`` ãªã©ã® filter プラグインã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ã†ã¨ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚ã¾ãŸã€``when:`` ãªã©ã®æ¡ä»¶ä»˜ãディレクティブã«ã‚‚利用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:454 msgid "Test plugins do not use the standard configuration and documentation system described above." msgstr "test プラグインã¯ã€ä¸Šè¨˜ã®æ¨™æº–設定ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_plugins.rst:456 msgid "Since Ansible evaluates variables only when they are needed, test plugins should propagate the exceptions ``jinja2.exceptions.UndefinedError`` and ``AnsibleUndefinedVariable`` to ensure undefined variables are only fatal when necessary." msgstr "Ansibleã¯å¿…è¦ãªã¨ãã«ã®ã¿å¤‰æ•°ã‚’評価ã™ã‚‹ã®ã§ã€æœªå®šç¾©ã®å¤‰æ•°ãŒå¿…è¦ãªã¨ãã«ã®ã¿è‡´å‘½çš„ãªå•題を起ã“ã™ã‚ˆã†ã«ã€ãƒ†ã‚¹ãƒˆãƒ—ラグインã¯ã€ä¾‹å¤–``jinja2.exceptions.UndefinedError`` ã¨``AnsibleUndefinedVariable`` ã‚’ä¼æ’­ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:467 msgid "For example test plugins, see the source code for the `test plugins included with Ansible Core `_." msgstr "test プラグインã®ä¾‹ã¯ã€`Ansible Core ã«åŒæ¢±ã•れる test プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:472 msgid "Vars plugins" msgstr "vars プラグイン" #: ../../rst/dev_guide/developing_plugins.rst:474 msgid "Vars plugins inject additional variable data into Ansible runs that did not come from an inventory source, playbook, or command line. Playbook constructs like 'host_vars' and 'group_vars' work using vars plugins." msgstr "vars プラグインã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã€Playbookã€ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ Ansible ã®å®Ÿè¡Œã«ã€å¤‰æ•°ãƒ‡ãƒ¼ã‚¿ã‚’追加ã—ã¾ã™ã€‚「host_varsã€ã‚„「group_varsã€ã®ã‚ˆã†ãª Playbook ã®æ§‹æˆè¦ç´ ã¯ã€vars プラグインを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:476 msgid "Vars plugins were partially implemented in Ansible 2.0 and rewritten to be fully implemented starting with Ansible 2.4. Vars plugins are unsupported by collections." msgstr "vars プラグイン㯠Ansible 2.0 ã«éƒ¨åˆ†çš„ã«å®Ÿè£…ã•れã€Ansible 2.4 以é™ã§ã¯ã€å®Œå…¨å®Ÿè£…ã«ãªã‚‹ã‚ˆã†ã«æ›¸ãç›´ã•れã¾ã—ãŸã€‚vars プラグインã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:478 msgid "Older plugins used a ``run`` method as their main body/work:" msgstr "å¤ã„プラグインã§ã¯ã€``run`` メソッドを主è¦ãªæœ¬æ–‡/作業ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_plugins.rst:486 msgid "Ansible 2.0 did not pass passwords to older plugins, so vaults were unavailable. Most of the work now happens in the ``get_vars`` method which is called from the VariableManager when needed." msgstr "Ansible 2.0 ã¯å¤ã„プラグインã«ãƒ‘スワードを渡ã•ãªã‹ã£ãŸãŸã‚ã€vault ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã»ã¨ã‚“ã©ã®ä½œæ¥­ã¯ã€å¿…è¦ã«å¿œã˜ã¦ VariableManager ã‹ã‚‰å‘¼ã³å‡ºã•れる ``get_vars`` メソッドã§å®Ÿè¡Œã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_plugins.rst:494 msgid "The parameters are:" msgstr "パラメーターã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:496 msgid "loader: Ansible's DataLoader. The DataLoader can read files, auto-load JSON/YAML and decrypt vaulted data, and cache read files." msgstr "loader: Ansible ã® DataLoader。DataLoader ã¯ã€ãƒ•ァイルã®èª­ã¿å–りã€JSON/YAML ã®è‡ªå‹•読ã¿è¾¼ã¿ã€vault を使用ã—ãŸãƒ‡ãƒ¼ã‚¿ã®å¾©å·ã€ãŠã‚ˆã³èª­ã¿å–りファイルã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:497 msgid "path: this is 'directory data' for every inventory source and the current play's playbook directory, so they can search for data in reference to them. ``get_vars`` will be called at least once per available path." msgstr "path: ã“れã¯ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã¨ç¾åœ¨ã®ãƒ—レイ㮠Playbook ディレクトリーã®ã€Œãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‡ãƒ¼ã‚¿ã€ã§ã‚ã‚‹ãŸã‚ã€ãれをå‚ç…§ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’検索ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``get_vars`` ã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ‘スã”ã¨ã«æœ€ä½Ž 1 回呼ã³å‡ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:498 msgid "entities: these are host or group names that are pertinent to the variables needed. The plugin will get called once for hosts and again for groups." msgstr "entities: å¿…è¦ãªå¤‰æ•°ã«é–¢é€£ä»˜ã‘られるホストåã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—åã§ã™ã€‚プラグインã¯ãƒ›ã‚¹ãƒˆã«å¯¾ã—㦠1 回呼ã³å‡ºã•れã€ã‚°ãƒ«ãƒ¼ãƒ—ã«å¯¾ã—ã¦å†åº¦å‘¼ã³å‡ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:500 msgid "This ``get_vars`` method just needs to return a dictionary structure with the variables." msgstr "ã“ã® ``get_vars`` メソッドã¯å¤‰æ•°ã‚’å«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼æ§‹é€ ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:502 msgid "Since Ansible version 2.4, vars plugins only execute as needed when preparing to execute a task. This avoids the costly 'always execute' behavior that occurred during inventory construction in older versions of Ansible. Since Ansible version 2.10, vars plugin execution can be toggled by the user to run when preparing to execute a task or after importing an inventory source." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以é™ã€ã‚¿ã‚¹ã‚¯å®Ÿè¡Œã®æº–備時ã«å¿…è¦ã«å¿œã˜ã¦ vars プラグインã®ã¿ã‚’実行ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æ§‹ç¯‰ä¸­ã«ç™ºç”Ÿã—ãŸã€è²»ç”¨ã®ã‹ã‹ã‚‹ã€Œå¸¸ã«å®Ÿè¡Œã€å‹•作ãŒå›žé¿ã•れã¾ã™ã€‚Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã€vars プラグインã®å®Ÿè¡Œã¯ã€ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œæº–備時ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆå¾Œã«å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:504 msgid "You can create vars plugins that are not enabled by default using the class variable ``REQUIRES_ENABLED``. If your vars plugin resides in a collection, it cannot be enabled by default. You must use ``REQUIRES_ENABLED`` in all collections-based vars plugins. To require users to enable your plugin, set the class variable ``REQUIRES_ENABLED``:" msgstr "クラス変数 ``REQUIRES_ENABLED`` を使用ã—ã¦ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ãªã„ vars プラグインを作æˆã§ãã¾ã™ã€‚vars プラグインãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å­˜åœ¨ã™ã‚‹å ´åˆã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ã¯ã§ãã¾ã›ã‚“。ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ™ãƒ¼ã‚¹ã® vars プラグイン㧠``REQUIRES_ENABLED`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ユーザーãŒãƒ—ラグインを有効ã«ã™ã‚‹ã«ã¯ã€ã‚¯ãƒ©ã‚¹å¤‰æ•° ``REQUIRES_ENABLED`` を設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:511 msgid "Include the ``vars_plugin_staging`` documentation fragment to allow users to determine when vars plugins run." msgstr "``vars_plugin_staging`` ドキュメントフラグメントを追加ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ when vars プラグインã®å®Ÿè¡Œã‚’判別ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_plugins.rst:531 msgid "For example vars plugins, see the source code for the `vars plugins included with Ansible Core `_." msgstr "vars プラグインã®ä¾‹ã¯ã€`Ansible Core ã«å«ã¾ã‚Œã‚‹ vars プラグイン `_ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_plugins.rst:541 msgid "Learn about how to develop dynamic inventory sources" msgstr "動的インベントリーソースã®é–‹ç™ºæ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/dev_guide/developing_program_flow_modules.rst:6 msgid "Ansible module architecture" msgstr "Ansible モジュールã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼" #: ../../rst/dev_guide/developing_program_flow_modules.rst:8 msgid "If you are working on the ``ansible-core`` code, writing an Ansible module, or developing an action plugin, you may need to understand how Ansible's program flow executes. If you are just using Ansible Modules in playbooks, you can skip this section." msgstr "``ansible-core`` コードを使用ã—ã¦ã„ã‚‹å ´åˆã€Ansible モジュールã®ä½œæˆã€ã¾ãŸã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã®é–‹ç™ºã§ã¯ã€Ansible ã®ãƒ—ログラムフローãŒã©ã®ã‚ˆã†ã«å®Ÿè¡Œã•れるã‹ã‚’ç†è§£ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚Playbook ã§ Ansible モジュールを使用ã—ã¦ã„ã‚‹ã ã‘ã®å ´åˆã¯ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’スキップã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:16 msgid "Types of modules" msgstr "モジュールã®ç¨®é¡ž" #: ../../rst/dev_guide/developing_program_flow_modules.rst:18 msgid "Ansible supports several different types of modules in its code base. Some of these are for backwards compatibility and others are to enable flexibility." msgstr "Ansible ã¯ã€ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã§ã„ãã¤ã‹ã®ç•°ãªã‚‹ã‚¿ã‚¤ãƒ—ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚下ä½äº’æ›æ€§ã®ãŸã‚ã®ã‚‚ã®ã‚‚ã‚ã‚Šã€æŸ”軟性をå¯èƒ½ã«ã™ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:26 msgid "Action plugins look like modules to anyone writing a playbook. Usage documentation for most action plugins lives inside a module of the same name. Some action plugins do all the work, with the module providing only documentation. Some action plugins execute modules. The ``normal`` action plugin executes modules that don't have special action plugins. Action plugins always execute on the controller." msgstr "action プラグインã¯ã€Playbook を作æˆã™ã‚‹äººã«ã¨ã£ã¦ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚ã»ã¨ã‚“ã©ã® action プラグインã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€åŒã˜åå‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å†…ã«ã‚りã¾ã™ã€‚action プラグインã®ä¸­ã«ã¯ã€ã™ã¹ã¦ã®ä½œæ¥­ã‚’行ãªã†ã‚‚ã®ã‚‚ã‚りã¾ã™ãŒã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã¿ã‚’æä¾›ã—ã¾ã™ã€‚一部㮠action プラグインã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚action プラグイン ``normal`` ã¯ã€ç‰¹åˆ¥ãª action プラグインをæŒãŸãªã„モジュールを実行ã—ã¾ã™ã€‚action プラグインã¯å¸¸ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:28 msgid "Some action plugins do all their work on the controller. For example, the :ref:`debug ` action plugin (which prints text for the user to see) and the :ref:`assert ` action plugin (which tests whether values in a playbook satisfy certain criteria) execute entirely on the controller." msgstr "action プラグインã«ã‚ˆã£ã¦ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã™ã¹ã¦ã®ä½œæ¥­ãŒæ©Ÿèƒ½ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€action プラグイン :ref:`debug ` (ユーザーã«è¡¨ç¤ºã§ãるよã†ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’出力ã™ã‚‹) ãŠã‚ˆã³ action プラグイン :ref:`assert ` (Playbook ã®å€¤ãŒç‰¹å®šã®åŸºæº–を満ãŸã™ã‹ã©ã†ã‹ã®ãƒ†ã‚¹ãƒˆ) ãªã©ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ä¸Šã§å®Œå…¨ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:33 msgid "Most action plugins set up some values on the controller, then invoke an actual module on the managed node that does something with these values. For example, the :ref:`template ` action plugin takes values from the user to construct a file in a temporary location on the controller using variables from the playbook environment. It then transfers the temporary file to a temporary file on the remote system. After that, it invokes the :ref:`copy module ` which operates on the remote system to move the file into its final location, sets file permissions, and so on." msgstr "ã»ã¨ã‚“ã©ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã«ã„ãã¤ã‹ã®å€¤ã‚’設定ã—ãŸå¾Œã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§å®Ÿéš›ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã—ã¦ã€ã“れらã®å€¤ã‚’使用ã—ã¦ä½•ã‹ã‚’行ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€action プラグイン :ref:`template ` ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰å€¤ã‚’å—ã‘å–りã€Playbook 環境ã‹ã‚‰ã®å¤‰æ•°ã‚’使用ã—ã¦ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®ä¸€æ™‚çš„ãªå ´æ‰€ã«ãƒ•ァイルを作æˆã—ã¾ã™ã€‚ãã®å¾Œã€ãã®ä¸€æ™‚ファイルをã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ä¸€æ™‚ファイルã«è»¢é€ã—ã¾ã™ã€‚ãã®å¾Œã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ä¸Šã§å‹•作ã™ã‚‹ :ref:`copy モジュール ` ã‚’èµ·å‹•ã—ã¦ã€ãƒ•ァイルを最終的ãªå ´æ‰€ã«ç§»å‹•ã•ã›ã€ãƒ•ァイルã®ãƒ‘ーミッションを設定ã™ã‚‹ãªã©ã®ä½œæ¥­ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:44 msgid "New-style modules" msgstr "新スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_program_flow_modules.rst:46 msgid "All of the modules that ship with Ansible fall into this category. While you can write modules in any language, all official modules (shipped with Ansible) use either Python or PowerShell." msgstr "Ansible ã«åŒæ¢±ã•れるモジュールã¯ã™ã¹ã¦ã“ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã«åˆ†é¡žã•れã¾ã™ã€‚モジュールã¯ä»»æ„ã®è¨€èªžã§è¨˜è¿°ã§ãã¾ã™ãŒã€(Ansible ã«åŒæ¢±ã•れã¦ã„ã‚‹) æ­£å¼ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã™ã¹ã¦ Python ã¾ãŸã¯ PowerShell を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:48 msgid "New-style modules have the arguments to the module embedded inside of them in some manner. Old-style modules must copy a separate file over to the managed node, which is less efficient as it requires two over-the-wire connections instead of only one." msgstr "æ–°ã—ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ã€ãªã‚“らã‹ã®æ–¹æ³•ã§å®Ÿè£…ã•れã¦ã„るモジュールã«å¼•æ•°ãŒã‚りã¾ã™ã€‚å¤ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«å€‹åˆ¥ã®ãƒ•ァイルを管ç†ãƒŽãƒ¼ãƒ‰ã«ã‚³ãƒ”ーã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€1 ã¤ã®æŽ¥ç¶šã§ã¯ãªãã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®æŽ¥ç¶šãŒ 2 ã¤å¿…è¦ã§ã‚ã‚‹ãŸã‚ã€åŠ¹çŽ‡ãŒæ‚ªããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:56 msgid "Python" msgstr "Python" #: ../../rst/dev_guide/developing_program_flow_modules.rst:58 msgid "New-style Python modules use the :ref:`Ansiballz` framework for constructing modules. These modules use imports from :code:`ansible.module_utils` to pull in boilerplate module code, such as argument parsing, formatting of return values as :term:`JSON`, and various file operations." msgstr "æ–°ã—ã„スタイル㮠Python モジュールã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ§‹ç¯‰ã« :ref:`Ansiballz` フレームワークを使用ã—ã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€:code:`ansible.module_utils` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã—ã€å¼•æ•°ã®è§£æžã€:term:`JSON` ãªã©ã®ã•ã¾ã–ã¾ãªãƒ•ァイルæ“ä½œã®æˆ»ã‚Šå€¤ã®ãƒ•ォーマットãªã©ã€boilerplate モジュールコードã¨ã—ã¦å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:63 msgid "In Ansible, up to version 2.0.x, the official Python modules used the :ref:`module_replacer` framework. For module authors, :ref:`Ansiballz` is largely a superset of :ref:`module_replacer` functionality, so you usually do not need to understand the differences between them." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.x ã¾ã§ã® Ansible ã§ã¯ã€å…¬å¼ã® Python モジュール㌠:ref:`module_replacer`を使用ã—ã¦ã„ã¾ã—ãŸã€‚:ref:`Ansiballz` ã¯ã€:ref:`module_replacer` 機能ã®ä¸Šä½ã‚»ãƒƒãƒˆã§ã‚ã‚‹ãŸã‚ã€é€šå¸¸ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä½œæˆè€…ãŒã“れらã®é•ã„ã‚’ç†è§£ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:71 msgid "PowerShell" msgstr "PowerShell" #: ../../rst/dev_guide/developing_program_flow_modules.rst:73 msgid "New-style PowerShell modules use the :ref:`module_replacer` framework for constructing modules. These modules get a library of PowerShell code embedded in them before being sent to the managed node." msgstr "æ–°ã—ã„スタイル㮠PowerShell モジュールã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ§‹ç¯‰ã« :ref:`module_replacer` を使用ã—ã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«é€ä¿¡ã•れるå‰ã«ãれらã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ PowerShell コードã®ãƒ©ã‚¤ãƒ–ラリーをå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:80 msgid "JSONARGS modules" msgstr "JSONARGS モジュール" #: ../../rst/dev_guide/developing_program_flow_modules.rst:82 msgid "These modules are scripts that include the string ``<>`` in their body. This string is replaced with the JSON-formatted argument string. These modules typically set a variable to that value like this:" msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€æœ¬æ–‡ã«æ–‡å­—列 ``<>`` ãŒå«ã¾ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トã§ã™ã€‚ã“ã®æ–‡å­—列㯠JSON å½¢å¼ã®å¼•数文字列ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€é€šå¸¸ã€å¤‰æ•°ã‚’以下ã®ã‚ˆã†ãªå€¤ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:90 msgid "Which is expanded as:" msgstr "ã“れã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å±•é–‹ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:96 msgid "Ansible outputs a :term:`JSON` string with bare quotes. Double quotes are used to quote string values, double quotes inside of string values are backslash escaped, and single quotes may appear unescaped inside of a string value. To use JSONARGS, your scripting language must have a way to handle this type of string. The example uses Python's triple quoted strings to do this. Other scripting languages may have a similar quote character that won't be confused by any quotes in the JSON or it may allow you to define your own start-of-quote and end-of-quote characters. If the language doesn't give you any of these then you'll need to write a :ref:`non-native JSON module ` or :ref:`Old-style module ` instead." msgstr "Ansible ã¯ã€:term:`JSON` ã®æ–‡å­—列を引用符ãªã—ã§å‡ºåŠ›ã—ã¾ã™ã€‚文字列値ã®å¼•用ã«ã¯äºŒé‡å¼•用符ãŒä½¿ç”¨ã•ã‚Œã€æ–‡å­—列値ã®ä¸­ã®äºŒé‡å¼•用符ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•ã‚Œã€æ–‡å­—列値ã®ä¸­ã®ä¸€é‡å¼•用符ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れãšã«è¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚JSONARGS を使用ã™ã‚‹ã«ã¯ã€ã‚¹ã‚¯ãƒªãƒ—ト言語ãŒã“ã®ç¨®ã®æ–‡å­—列を処ç†ã™ã‚‹æ–¹æ³•ã‚’å‚™ãˆã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€Python ã®ä¸‰é‡å¼•用符文字列を使用ã—ã¦ã„ã¾ã™ã€‚ä»–ã®ã‚¹ã‚¯ãƒªãƒ—ト言語ã§ã¯ã€JSON 内ã®å¼•ç”¨ç¬¦ã¨æ··åŒã•れãªã„よã†ãªåŒæ§˜ã®å¼•用符文字ãŒç”¨æ„ã•れã¦ã„ãŸã‚Šã€ç‹¬è‡ªã®å¼•用開始文字や引用終了文字を定義ã§ããŸã‚Šã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ãŠä½¿ã„ã®è¨€èªžãŒã“れをæä¾›ã—ã¦ã„ãªã„å ´åˆã¯ã€ä»£ã‚り㫠:ref:`éžãƒã‚¤ãƒ†ã‚£ãƒ– JSON モジュール ` ã¾ãŸã¯ :ref:`å¤ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ` を記述ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:108 msgid "These modules typically parse the contents of ``json_arguments`` using a JSON library and then use them as native variables throughout the code." msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é€šå¸¸ã€JSON ライブラリーを使用ã—㦠``json_arguments`` ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’è§£æžã—ã€æ¬¡ã«ã‚³ãƒ¼ãƒ‰å…¨ä½“ã§ãƒã‚¤ãƒ†ã‚£ãƒ–変数ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:114 msgid "Non-native want JSON modules" msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–以外㮠JSON モジュール" #: ../../rst/dev_guide/developing_program_flow_modules.rst:116 msgid "If a module has the string ``WANT_JSON`` in it anywhere, Ansible treats it as a non-native module that accepts a filename as its only command line parameter. The filename is for a temporary file containing a :term:`JSON` string containing the module's parameters. The module needs to open the file, read and parse the parameters, operate on the data, and print its return data as a JSON encoded dictionary to stdout before exiting." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ–‡å­—列 ``WANT_JSON`` ãŒã‚ã‚‹ã¨ã€Ansible ã¯ã€ãƒ•ァイルåをコマンドラインパラメーターã¨ã—ã¦ã®ã¿è¨±å¯ã™ã‚‹éžãƒã‚¤ãƒ†ã‚£ãƒ–モジュールã¨ã—ã¦æ‰±ã„ã¾ã™ã€‚ファイルåã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‘ラメーターをå«ã‚€ :term:`JSON` 文字列をå«ã‚€ä¸€æ™‚çš„ãªãƒ•ァイルå‘ã‘ã§ã™ã€‚モジュールã¯ãƒ•ァイルを開ãã€ãƒ‘ラメーターを読ã¿å–りãŠã‚ˆã³è§£æžã—ã€ãƒ‡ãƒ¼ã‚¿ã§æ“作ã—ã€çµ‚了ã™ã‚‹å‰ã«ãã®æˆ»ã‚Šå€¤ã‚’ JSON エンコードディレクトリーã¨ã—㦠stdout ã«å‡ºåŠ›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:123 msgid "These types of modules are self-contained entities. As of Ansible 2.1, Ansible only modifies them to change a shebang line if present." msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¿ã‚¤ãƒ—ã¯è‡ªå·±å®Œçµåž‹ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§ã™ã€‚Ansible 2.1 以é™ã€Ansible ã§ã¯ã€å­˜åœ¨ã™ã‚‹å ´åˆã«ã®ã¿ã€ã‚·ãƒãƒ³è¡Œã‚’変更ã™ã‚‹ã‚ˆã†ã«ãれらを変更ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:126 msgid "Examples of Non-native modules written in ruby are in the `Ansible for Rubyists `_ repository." msgstr "Ruby ã§æ›¸ã‹ã‚ŒãŸéžãƒã‚¤ãƒ†ã‚£ãƒ–モジュールã®ä¾‹ã¯ã€`Ansible for Rubyists `_ リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:132 msgid "Binary modules" msgstr "ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_program_flow_modules.rst:134 msgid "From Ansible 2.2 onwards, modules may also be small binary programs. Ansible doesn't perform any magic to make these portable to different systems so they may be specific to the system on which they were compiled or require other binary runtime dependencies. Despite these drawbacks, you may have to compile a custom module against a specific binary library if that's the only way to get access to certain resources." msgstr "Ansible 2.2 以é™ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å°è¦æ¨¡ã®ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ—ログラムã§ã‚‚ã‚りã¾ã™ã€‚Ansible ã¯ã€ã“れらを異ãªã‚‹ã‚·ã‚¹ãƒ†ãƒ ã«ç§»æ¤ã§ãるよã†ã«ã™ã‚‹æ©Ÿèƒ½ãŒãªã„ãŸã‚ã€ã‚³ãƒ³ãƒ‘イルã•れãŸã‚·ã‚¹ãƒ†ãƒ ã«å›ºæœ‰ã®ã‚‚ã®ã§ã‚ã£ãŸã‚Šã€ä»–ã®ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã«ä¾å­˜ã—ãŸã‚‚ã®ãŒå¿…è¦ã§ã‚ã£ãŸã‚Šã—ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªæ¬ ç‚¹ã¯ã‚りã¾ã™ãŒã€ç‰¹å®šã®ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®å”¯ä¸€ã®æ–¹æ³•ã§ã‚れã°ã€ç‰¹å®šã®ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ©ã‚¤ãƒ–ラリーã«å¯¾ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚³ãƒ³ãƒ‘イルãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:141 msgid "Binary modules take their arguments and return data to Ansible in the same way as :ref:`want JSON modules `." msgstr "ãƒã‚¤ãƒŠãƒªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€å¼•æ•°ã‚’å–りã€:ref:`want JSON モジュール ` ã¨åŒã˜æ–¹æ³•ã§ãƒ‡ãƒ¼ã‚¿ã‚’ Ansible ã«è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:144 msgid "One example of a `binary module `_ written in go." msgstr "Go ã§è¨˜è¿°ã•れ㟠` ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« `_ ã®ä¸€ä¾‹" #: ../../rst/dev_guide/developing_program_flow_modules.rst:151 msgid "Old-style modules" msgstr "å¤ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/dev_guide/developing_program_flow_modules.rst:153 msgid "Old-style modules are similar to :ref:`want JSON modules `, except that the file that they take contains ``key=value`` pairs for their parameters instead of :term:`JSON`. Ansible decides that a module is old-style when it doesn't have any of the markers that would show that it is one of the other types." msgstr "å¤ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€:ref:`want JSON モジュール ` ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€ä½¿ç”¨ã™ã‚‹ãƒ•ァイル㌠:term:`JSON` ã§ã¯ãªã ``key=value`` ã®ãƒšã‚¢ã‚’パラメータã«å«ã‚“ã§ã„る点ãŒç•°ãªã‚Šã¾ã™ã€‚Ansible ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä»–ã®ã‚¿ã‚¤ãƒ—ã® 1 ã¤ã§ã‚ã‚‹ã“ã¨ã‚’示ã™ãƒžãƒ¼ã‚«ãƒ¼ãŒãªã„ã¨ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤ã„スタイルã§ã‚ã‚‹ã¨åˆ¤æ–­ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:162 msgid "How modules are executed" msgstr "モジュールã®å®Ÿè¡Œæ–¹æ³•" #: ../../rst/dev_guide/developing_program_flow_modules.rst:164 msgid "When a user uses :program:`ansible` or :program:`ansible-playbook`, they specify a task to execute. The task is usually the name of a module along with several parameters to be passed to the module. Ansible takes these values and processes them in various ways before they are finally executed on the remote machine." msgstr ":program:`ansible` ã¾ãŸã¯ :program:`ansible-playbook` を使用ã™ã‚‹å ´åˆã¯ã€å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’指定ã—ã¾ã™ã€‚タスクã¯é€šå¸¸ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™è¤‡æ•°ã®ãƒ‘ラメーターをæŒã¤ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã§ã™ã€‚Ansible ã¯ã“れらã®å€¤ã‚’å–å¾—ã—ã€ã•ã¾ã–ã¾ãªæ–¹æ³•ã§å‡¦ç†ã—ã¦ã‹ã‚‰ã€æœ€çµ‚çš„ã«ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã§å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:173 msgid "Executor/task_executor" msgstr "Executor/task_executor" #: ../../rst/dev_guide/developing_program_flow_modules.rst:175 msgid "The TaskExecutor receives the module name and parameters that were parsed from the :term:`playbook ` (or from the command line in the case of :command:`/usr/bin/ansible`). It uses the name to decide whether it's looking at a module or an :ref:`Action Plugin `. If it's a module, it loads the :ref:`Normal Action Plugin ` and passes the name, variables, and other information about the task and play to that Action Plugin for further processing." msgstr "TaskExecutor ã¯ã€:term:`Playbook ` (:command:`/usr/bin/ansible` ã®å ´åˆã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³) ã‹ã‚‰è§£æžã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã¨ãƒ‘ラメーターをå—ã‘å–りã¾ã™ã€‚ã“れã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¦ã€ã¾ãŸã¯ :ref:`action プラグイン ` を見ã¦ã„ã‚‹ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«åå‰ã‚’使用ã—ã¾ã™ã€‚モジュールã®å ´åˆã¯ã€:ref:`Normal action プラグイン ` を読ã¿è¾¼ã¿ã€ã‚¿ã‚¹ã‚¯ã¨ãƒ—レイã«é–¢ã™ã‚‹åå‰ã€å¤‰æ•°ã€ãŠã‚ˆã³ãã®ä»–ã®æƒ…報をãã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã«æ¸¡ã—ã¦ã€ã•らã«å‡¦ç†ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:186 msgid "The ``normal`` action plugin" msgstr "action プラグイン ``normal``" #: ../../rst/dev_guide/developing_program_flow_modules.rst:188 msgid "The ``normal`` action plugin executes the module on the remote host. It is the primary coordinator of much of the work to actually execute the module on the managed machine." msgstr "action プラグイン ``normal`` ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚管ç†ãƒžã‚·ãƒ³ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実際ã«å®Ÿè¡Œã™ã‚‹å¤šãã®ä½œæ¥­ã«å¯¾ã™ã‚‹ä¸»è¦ãªèª¿æ•´å½¹ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:192 msgid "It loads the appropriate connection plugin for the task, which then transfers or executes as needed to create a connection to that host." msgstr "タスクã«é©åˆ‡ãª connection プラグインを読ã¿è¾¼ã¿ã€ãã®ãƒ›ã‚¹ãƒˆã¸ã®æŽ¥ç¶šã‚’作æˆã™ã‚‹ãŸã‚ã«å¿…è¦ã«å¿œã˜ã¦è»¢é€ã‚„実行を行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:194 msgid "It adds any internal Ansible properties to the module's parameters (for instance, the ones that pass along ``no_log`` to the module)." msgstr "モジュールã®ãƒ‘ラメーターã«ã€Ansible ã®å†…部プロパティーを追加ã—ã¾ã™ (ãŸã¨ãˆã° ``no_log`` ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã‚‚ã®ãªã©)。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:196 msgid "It works with other plugins (connection, shell, become, other action plugins) to create any temporary files on the remote machine and cleans up afterwards." msgstr "ã“れã¯ã€ä»–ã®ãƒ—ラグイン (connectionã€shellã€becomeã€ãã®ä»–ã® action プラグイン) ã¨é€£æºã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«ä¸€æ™‚ファイルを作æˆã—ã€å¾Œã§å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:199 msgid "It pushes the module and module parameters to the remote host, although the :ref:`module_common ` code described in the next section decides which format those will take." msgstr "ã“れã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«ãƒ—ッシュã•れã¾ã™ãŒã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã™ã‚‹ :ref:`module_common ` コードãŒã€ã©ã®å½¢å¼ã‚’å–ã‚‹ã®ã‹æ±ºå®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:203 msgid "It handles any special cases regarding modules (for instance, async execution, or complications around Windows modules that must have the same names as Python modules, so that internal calling of modules from other Action Plugins work.)" msgstr "モジュールã«é–¢ã™ã‚‹ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹ã‚’処ç†ã—ã¾ã™ (ãŸã¨ãˆã°ã€éžåŒæœŸå®Ÿè¡Œã‚„ã€Python モジュールã¨åŒã˜åå‰ã‚’æŒãŸãªã‘れã°ãªã‚‰ãªã„ Windows モジュールã®è¤‡é›‘ã•ãªã©ã€‚ã“れã«ã‚ˆã‚Šã€ä»–ã® action プラグインã‹ã‚‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å†…部呼ã³å‡ºã—ãŒæ©Ÿèƒ½ã—ã¾ã™)。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:206 msgid "Much of this functionality comes from the `BaseAction` class, which lives in :file:`plugins/action/__init__.py`. It uses the ``Connection`` and ``Shell`` objects to do its work." msgstr "ã“ã®æ©Ÿèƒ½ã®å¤šãã¯ã€`BaseAction` クラス (:file:`plugins/action/__init__.py` ã«ã‚ã‚‹) ã‹ã‚‰å–å¾—ã•れã¾ã™ã€‚ã“れã¯ã€``Connection`` オブジェクトãŠã‚ˆã³ ``Shell`` オブジェクトを使用ã—ã¦ä½œæ¥­ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:211 msgid "When :term:`tasks ` are run with the ``async:`` parameter, Ansible uses the ``async`` Action Plugin instead of the ``normal`` Action Plugin to invoke it. That program flow is currently not documented. Read the source for information on how that works." msgstr ":term:`タスク ` ã‚’ ``async:`` パラメーターã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã€Ansible ã¯ã€action プラグイン ``normal`` ã®ä»£ã‚り㫠``async`` を使用ã—ã¦ãれを呼ã³å‡ºã—ã¾ã™ã€‚ãã®ãƒ—ログラムフローã¯ç¾åœ¨æ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã›ã‚“。ãれãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã«ã¤ã„ã¦ã¯ã€ã‚½ãƒ¼ã‚¹ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:219 msgid "Executor/module_common.py" msgstr "Executor/module_common.py" #: ../../rst/dev_guide/developing_program_flow_modules.rst:221 msgid "Code in :file:`executor/module_common.py` assembles the module to be shipped to the managed node. The module is first read in, then examined to determine its type:" msgstr ":file:`executor/module_common.py` ã®ã‚³ãƒ¼ãƒ‰ã¯ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«åŒæ¢±ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’アセンブルã—ã¾ã™ã€‚ã¾ãšã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæœ€åˆã«èª­ã¿è¾¼ã¾ã‚Œã€ãã®å¾Œã¯ãã®ã‚¿ã‚¤ãƒ—を判断ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:225 msgid ":ref:`PowerShell ` and :ref:`JSON-args modules ` are passed through :ref:`Module Replacer `." msgstr ":ref:`PowerShell ` ãŠã‚ˆã³ :ref:`JSON-args モジュール ` ã¯ã€:ref:`Module Replacer ` çµŒç”±ã§æ¸¡ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:226 msgid "New-style :ref:`Python modules ` are assembled by :ref:`Ansiballz`." msgstr "æ–°ã—ã„スタイル㮠:ref:`Python モジュール ` 㯠:ref:`Ansiballz` ã«ã‚ˆã‚Šã‚¢ã‚»ãƒ³ãƒ–ルã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:227 msgid ":ref:`Non-native-want-JSON `, :ref:`Binary modules `, and :ref:`Old-Style modules ` aren't touched by either of these and pass through unchanged." msgstr ":ref:`Non-native-want-JSON `ã€:ref:`ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« `ã€ãŠã‚ˆã³ :ref:`å¤ã„スタイルã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ` ã¯ã€ã“れらã®ã©ã¡ã‚‰ã«ã‚‚触れられãšã€å¤‰æ›´ã•れãšã«ãã®ã¾ã¾é€šéŽã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:229 msgid "After the assembling step, one final modification is made to all modules that have a shebang line. Ansible checks whether the interpreter in the shebang line has a specific path configured via an ``ansible_$X_interpreter`` inventory variable. If it does, Ansible substitutes that path for the interpreter path given in the module. After this, Ansible returns the complete module data and the module type to the :ref:`Normal Action ` which continues execution of the module." msgstr "アセンブル手順後ã€ã‚·ãƒãƒ³è¡Œã‚’æŒã¤ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æœ€çµ‚変更ãŒè¡Œã‚れã¾ã™ã€‚Ansible ã¯ã€ã‚·ãƒãƒ³è¡Œå†…ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リター㫠``ansible_$X_interpreter`` インベントリー変数を介ã—ã¦ç‰¹å®šã®ãƒ‘スãŒè¨­å®šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚パスãŒã‚ã‚‹å ´åˆã€Ansible ã¯ã€ãã®ãƒ‘スをã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ‡å®šã•れã¦ã„るインタープリターパスã«ç½®ãæ›ãˆã¾ã™ã€‚ãã®å¾Œã€Ansible ã¯å®Œå…¨ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¿ã‚¤ãƒ—ã‚’ :ref:`normal action ` ã«è¿”ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã‚’続行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:239 msgid "Assembler frameworks" msgstr "アセンブラーフレームワーク" #: ../../rst/dev_guide/developing_program_flow_modules.rst:241 msgid "Ansible supports two assembler frameworks: Ansiballz and the older Module Replacer." msgstr "Ansible ã¯ã€2 ã¤ã®ã‚¢ã‚»ãƒ³ãƒ–ラフレームワーク (Ansiballz ã¨å¤ã„ Module Replacer) をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:246 msgid "Module Replacer framework" msgstr "Module Replacer フレームワーク" #: ../../rst/dev_guide/developing_program_flow_modules.rst:248 msgid "The Module Replacer framework is the original framework implementing new-style modules, and is still used for PowerShell modules. It is essentially a preprocessor (like the C Preprocessor for those familiar with that programming language). It does straight substitutions of specific substring patterns in the module file. There are two types of substitutions:" msgstr "モジュール置æ›ãƒ•レームワークã¯ã€æ–°ã—ã„スタイルモジュールを実装ã—ã€å¼•ãç¶šã PowerShell モジュールå‘ã‘ã«ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚基本的ã«ã¯ã€(ãã®ãƒ—ログラミング言語ã«ç²¾é€šã—ã¦ã„ã‚‹ C プロセッサーãªã©) ã§ã™ã€‚モジュールファイル内ã®ç‰¹å®šã®å¾“属文字列パターンを直接置æ›ã—ã¾ã™ã€‚ç½®æ›ã«ã¯ 2 ã¤ã®ã‚¿ã‚¤ãƒ—ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:254 msgid "Replacements that only happen in the module file. These are public replacement strings that modules can utilize to get helpful boilerplate or access to arguments." msgstr "モジュールファイルã§ã®ã¿å®Ÿè¡Œã™ã‚‹ç½®æ›ã€‚モジュールã¯ã€ä¾¿åˆ©ãª boilerplate や引数ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ä½¿ç”¨ã§ãるパブリックã®ç½®æ›æ–‡å­—列ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:258 msgid ":code:`from ansible.module_utils.MOD_LIB_NAME import *` is replaced with the contents of the :file:`ansible/module_utils/MOD_LIB_NAME.py` These should only be used with :ref:`new-style Python modules `." msgstr ":code:`from ansible.module_utils.MOD_LIB_NAME import *` ã¯ã€:file:`ansible/module_utils/MOD_LIB_NAME.py` ã®å†…容ã«ç½®ãæ›ãˆã¾ã™ã€‚ã“れらã¯ã€:ref:`æ–°ã—ã„スタイル㮠Python モジュール ` ã¨ä½µç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:261 msgid ":code:`#<>` is equivalent to :code:`from ansible.module_utils.basic import *` and should also only apply to new-style Python modules." msgstr ":code:`#<>` ã¯ã€:code:`from ansible.module_utils.basic import *` ã¨åŒç­‰ã§ã€æ–°ã—ã„スタイル㮠Python モジュールã®ã¿ã«é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:264 msgid ":code:`# POWERSHELL_COMMON` substitutes the contents of :file:`ansible/module_utils/powershell.ps1`. It should only be used with :ref:`new-style Powershell modules `." msgstr ":code:`# POWERSHELL_COMMON` ã¯ã€:file:`ansible/module_utils/powershell.ps1` ã®å†…å®¹ã‚’ç½®ãæ›ãˆã¾ã™ã€‚ã“れã¯ã€:ref:`æ–°ã—ã„スタイル㮠Powershell モジュール ` ã¨ä½µç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:268 msgid "Replacements that are used by ``ansible.module_utils`` code. These are internal replacement patterns. They may be used internally, in the above public replacements, but shouldn't be used directly by modules." msgstr "``ansible.module_utils`` コードã«ã‚ˆã‚Šä½¿ç”¨ã•れる代替å“。ã“れらã¯å†…部交æ›ãƒ‘ターンã§ã™ã€‚ã“れらã¯ã€ä¸Šè¨˜ã®ãƒ‘ブリック置æ›ã§å†…部的ã«ä½¿ç”¨ã§ãã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ç›´æŽ¥ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:270 msgid ":code:`\"<>\"` is substituted with the Ansible version. In :ref:`new-style Python modules ` under the :ref:`Ansiballz` framework the proper way is to instead instantiate an `AnsibleModule` and then access the version from :attr:``AnsibleModule.ansible_version``." msgstr ":code:`\"<>\"` ã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚:ref:`Ansiballz` フレームワークã®ä¸‹ã® :ref:`æ–°ã—ã„スタイル㮠Python モジュール ` ã§é©åˆ‡ãªæ–¹æ³•ã¯ã€ä»£ã‚り㫠`AnsibleModule` をインスタンス化ã—ã€:attr:``AnsibleModule.ansible_version`` ã‹ã‚‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:275 msgid ":code:`\"<>\"` is substituted with a string which is the Python ``repr`` of the :term:`JSON` encoded module parameters. Using ``repr`` on the JSON string makes it safe to embed in a Python file. In new-style Python modules under the Ansiballz framework this is better accessed by instantiating an `AnsibleModule` and then using :attr:`AnsibleModule.params`." msgstr ":code:`\"<>\"` ã¯ã€:term:`JSON` ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーター㮠Python ``repr`` ã®æ–‡å­—列ã«ç½®ãæ›ãˆã¾ã™ã€‚JSON 文字列㧠``repr`` を使用ã™ã‚‹ã¨ã€Python ファイルã«å®‰å…¨ã«åŸ‹ã‚込むã“ã¨ãŒã§ãã¾ã™ã€‚Ansiballz ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã®æ–°ã—ã„スタイル Python モジュールã§ã¯ã€`AnsibleModule` をインスタンス化ã—ã¦ã‹ã‚‰ :attr:`AnsibleModule.params` を使用ã™ã‚‹ã“ã¨ã§ã€ã“れã¯ã‚ˆã‚Šé©åˆ‡ã«ã‚¢ã‚¯ã‚»ã‚¹ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:281 msgid ":code:`<>` substitutes a string which is a comma separated list of file systems which have a file system dependent security context in SELinux. In new-style Python modules, if you really need this you should instantiate an `AnsibleModule` and then use :attr:`AnsibleModule._selinux_special_fs`. The variable has also changed from a comma separated string of file system names to an actual python list of filesystem names." msgstr ":code:`<>` ã¯ã€SELinux ã«ãƒ•ァイルシステムã«ä¾å­˜ã™ã‚‹ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãŒã‚るファイルシステムã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ä¸€è¦§ã§ã‚ã‚‹æ–‡å­—åˆ—ã‚’ç½®ãæ›ãˆã¾ã™ã€‚æ–°ã—ã„スタイル㮠Python モジュール㧠`AnsibleModule` をインスタンス化ã—ã¦ã‹ã‚‰ã€:attr:`AnsibleModule._selinux_special_fs` を使用ã—ã¦ãã ã•ã„。ã¾ãŸã€ã“ã®å¤‰æ•°ã¯ã€ãƒ•ァイルシステムåã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã‹ã‚‰ã€ãƒ•ァイルシステムåã®å®Ÿéš›ã® python ã®ãƒªã‚¹ãƒˆã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:288 msgid ":code:`<>` substitutes the module parameters as a JSON string. Care must be taken to properly quote the string as JSON data may contain quotes. This pattern is not substituted in new-style Python modules as they can get the module parameters another way." msgstr ":code:`<>` ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターを JSON 文字列ã¨ã—ã¦ç½®ãæ›ãˆã¾ã™ã€‚JSON データã«ã¯å¼•用符ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æ–‡å­—列をé©åˆ‡ã«å¼•用符ã§å›²ã‚€ã‚ˆã†ã«æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ‘ターンã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラãƒãƒ¼ã‚¿ãƒ¼ã‚’åˆ¥ã®æ–¹æ³•ã§å–å¾—ã§ãã‚‹ãŸã‚ã€æ–°ã—ã„スタイル㮠Python モジュールã§ã¯ç½®ãæ›ãˆã‚‰ã‚Œã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:293 msgid "The string :code:`syslog.LOG_USER` is replaced wherever it occurs with the ``syslog_facility`` which was named in :file:`ansible.cfg` or any ``ansible_syslog_facility`` inventory variable that applies to this host. In new-style Python modules this has changed slightly. If you really need to access it, you should instantiate an `AnsibleModule` and then use :attr:`AnsibleModule._syslog_facility` to access it. It is no longer the actual syslog facility and is now the name of the syslog facility. See the :ref:`documentation on internal arguments ` for details." msgstr "文字列 :code:`syslog.LOG_USER` ã¯ã€:file:`ansible.cfg` ã¾ãŸã¯ã“ã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã•れる ``ansible_syslog_facility`` インベントリー変数ã§å›²ã¾ã‚Œã¦ã„ã‚‹ ``syslog_facility`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚æ–°ã—ã„スタイル㮠Python モジュールã§ã¯ã€ã“れã¯è‹¥å¹²å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚本当ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€`AnsibleModule` をインスタンス化ã—ã€ãã®å¾Œ :attr:`AnsibleModule._syslog_facility` を使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯å®Ÿéš›ã® syslog 機能ã§ã¯ãªãã€syslog 機能ã®åå‰ã«ãªã‚Šã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`内部引数ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:306 msgid "Ansiballz framework" msgstr "Ansiballz フレームワーク" #: ../../rst/dev_guide/developing_program_flow_modules.rst:308 msgid "The Ansiballz framework was adopted in Ansible 2.1 and is used for all new-style Python modules. Unlike the Module Replacer, Ansiballz uses real Python imports of things in :file:`ansible/module_utils` instead of merely preprocessing the module. It does this by constructing a zipfile -- which includes the module file, files in :file:`ansible/module_utils` that are imported by the module, and some boilerplate to pass in the module's parameters. The zipfile is then Base64 encoded and wrapped in a small Python script which decodes the Base64 encoding and places the zipfile into a temp directory on the managed node. It then extracts just the Ansible module script from the zip file and places that in the temporary directory as well. Then it sets the PYTHONPATH to find Python modules inside of the zip file and imports the Ansible module as the special name, ``__main__``. Importing it as ``__main__`` causes Python to think that it is executing a script rather than simply importing a module. This lets Ansible run both the wrapper script and the module code in a single copy of Python on the remote machine." msgstr "Ansiblez フレームワーク㯠Ansible 2.1 ã§æŽ¡ç”¨ã•れã€ã™ã¹ã¦ã®æ–°ã—ã„スタイル㮠Python モジュールã«ä½¿ç”¨ã•れã¾ã™ã€‚Module Replacer ã¨ã¯ç•°ãªã‚Šã€Ansiballz ã¯ã€å˜ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å‰å‡¦ç†ã™ã‚‹ã ã‘ã§ã¯ãªãã€:file:`ansible/module_utils` ã«å«ã¾ã‚Œã‚‹ã‚‚ã®ã‚’実際㫠Python ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€zipfile を構築ã—ã¾ã™ã€‚ã“れã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ :file:`ansible/module_utils` ã®ãƒ•ァイルã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‘ラメーターを渡㙠boilerplate ãŒå«ã¾ã‚Œã¾ã™ã€‚ãã®å¾Œã€zipfile 㯠Base64 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã€å°ã•㪠Python スクリプトã§ãƒ©ãƒƒãƒ—ã•れã¾ã™ã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—ト㯠Base64 エンコードをデコードã—ã€zipfile を管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã®ä¸€æ™‚ディレクトリーã«é…ç½®ã—ã¾ã™ã€‚ãã®å¾Œã€zip ファイルã‹ã‚‰ Ansible モジュールスクリプトã®ã¿ã‚’抽出ã—ã€ä¸€æ™‚ディレクトリーã«é…ç½®ã—ã¾ã™ã€‚ãã®å¾Œã€PYTHONPATH を設定ã—ã¦ã€zip ファイルã‹ã‚‰ Python モジュールを検索ã—ã€Ansible モジュールを特殊ãªåå‰ ``__main__`` ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚``__main__`` ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€Python ã¯å˜ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã®ã§ã¯ãªãã€ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¦ã„ã‚‹ã¨è¦‹ãªã™ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Ansible ã¯ã€ãƒ©ãƒƒãƒ‘ースクリプトã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ä¸¡æ–¹ã‚’ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã® Python ã®å˜ä¸€ã‚³ãƒ”ーã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:322 msgid "Ansible wraps the zipfile in the Python script for two reasons:" msgstr "Ansible ㌠Python スクリプト㧠zip ファイルをラップã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®ç†ç”±ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:324 msgid "for compatibility with Python 2.6 which has a less functional version of Python's ``-m`` command line switch." msgstr "Python ã® ``-m`` コマンドラインスイッãƒã®æ©Ÿèƒ½ãŒå°‘ãªã„ Python 2.6 ã¨ã®äº’æ›æ€§ã®ãŸã‚。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:327 msgid "so that pipelining will function properly. Pipelining needs to pipe the Python module into the Python interpreter on the remote node. Python understands scripts on stdin but does not understand zip files." msgstr "パイプ処ç†ãŒé©åˆ‡ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚Pipelining 㯠Python モジュールをリモートノード上㮠Python インタープリターã«ãƒ‘イプã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Python 㯠stdin ã®ã‚¹ã‚¯ãƒªãƒ—トをç†è§£ã—ã¾ã™ãŒã€zip ファイルをç†è§£ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:331 msgid "Prior to Ansible 2.7, the module was executed via a second Python interpreter instead of being executed inside of the same process. This change was made once Python-2.4 support was dropped to speed up module execution." msgstr "Ansible 2.7 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€åŒã˜ãƒ—ロセス内ã§å®Ÿè¡Œã•れるã®ã§ã¯ãªã 2 ã¤ç›®ã® Python インタープリター経由ã§å®Ÿè¡Œã•れã¾ã™ã€‚ã“ã®å¤‰æ›´ã¯ã€Python-2.4 サãƒãƒ¼ãƒˆãŒç ´æ£„ã•れã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã®ã‚¹ãƒ”ードを高ã‚ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:335 msgid "In Ansiballz, any imports of Python modules from the :py:mod:`ansible.module_utils` package trigger inclusion of that Python file into the zipfile. Instances of :code:`#<>` in the module are turned into :code:`from ansible.module_utils.basic import *` and :file:`ansible/module-utils/basic.py` is then included in the zipfile. Files that are included from :file:`module_utils` are themselves scanned for imports of other Python modules from :file:`module_utils` to be included in the zipfile as well." msgstr "Ansiballzã§ã¯ã€:py:mod:`ansible.module_utils` パッケージã‹ã‚‰ã® Python モジュールã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«ã‚ˆã‚Šã€ãã® Python ファイル㌠zip ファイルã«è¿½åŠ ã•れã¾ã™ã€‚モジュール内㮠:code:`#<>` ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ :code:`from ansible.module_utils.basic import *` ã«å¤‰æ›ã•れã€ãã®å¾Œ :file:`ansible/module-utils/basic.py` ㌠zip ファイルã«è¿½åŠ ã•れã¾ã™ã€‚:file:`module_utils` ã‹ã‚‰è¿½åŠ ã•れるファイルã¯ã€ãれ自体㌠:file:`module_utils` ã‹ã‚‰ã®ä»–ã® Python モジュールã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’スキャンã—ã€åŒã˜ã‚ˆã†ã« zip ファイルã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:345 msgid "At present, the Ansiballz Framework cannot determine whether an import should be included if it is a relative import. Always use an absolute import that has :py:mod:`ansible.module_utils` in it to allow Ansiballz to determine that the file should be included." msgstr "ç¾çжã€Aweraiballz Framework ã¯ã€ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®å ´åˆã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’判別ã§ãã¾ã›ã‚“。常ã«ã€ãã®ä¸­ã« :py:mod:`ansible.module_utils` ãŒã‚る絶対インãƒãƒ¼ãƒˆã‚’使用ã—ã¦ã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åŒæ¢±ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨åˆ¤æ–­ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:354 msgid "Passing args" msgstr "引数を渡ã™" #: ../../rst/dev_guide/developing_program_flow_modules.rst:356 msgid "Arguments are passed differently by the two frameworks:" msgstr "以下㮠2 ã¤ã®ãƒ•レームワークã§ã¯ã€å¼•æ•°ã®æ¸¡ã—æ–¹ãŒç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:358 msgid "In :ref:`module_replacer`, module arguments are turned into a JSON-ified string and substituted into the combined module file." msgstr ":ref:`module_replacer` ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¼•数㯠JSON 化ã•ã‚ŒãŸæ–‡å­—列ã«å¤‰æ›ã•れã€çµåˆã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:359 msgid "In :ref:`Ansiballz`, the JSON-ified string is part of the script which wraps the zipfile. Just before the wrapper script imports the Ansible module as ``__main__``, it monkey-patches the private, ``_ANSIBLE_ARGS`` variable in ``basic.py`` with the variable values. When a :class:`ansible.module_utils.basic.AnsibleModule` is instantiated, it parses this string and places the args into :attr:`AnsibleModule.params` where it can be accessed by the module's other code." msgstr ":ref:`Ansiballz` ã§ã¯ã€JSON 化ã•ã‚ŒãŸæ–‡å­—列ã¯ã€zip ファイルをラップã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トã®ä¸€éƒ¨ã§ã™ã€‚ラッパースクリプト㌠Ansible モジュールを ``__main__`` ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ç›´å‰ã«ã€``basic.py`` ã®ãƒ—ライベート変数 ``_ANSIBLE_ARGS`` を変数値ã§ãƒ¢ãƒ³ã‚­ãƒ¼ãƒ‘ッãƒã—ã¦ã„ã¾ã™ã€‚:class:`ansible.module_utils.basic.AnsibleModule` ãŒã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã•れるã¨ã€ã“ã®æ–‡å­—列を解æžã—ã€å¼•æ•°ã‚’ :attr:`AnsibleModule.params` ã«é…ç½®ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä»–ã®ã‚³ãƒ¼ãƒ‰ãŒã‚¢ã‚¯ã‚»ã‚¹ã§ãる場所ã«ç½®ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:362 msgid "If you are writing modules, remember that the way we pass arguments is an internal implementation detail: it has changed in the past and will change again as soon as changes to the common module_utils code allow Ansible modules to forgo using :class:`ansible.module_utils.basic.AnsibleModule`. Do not rely on the internal global ``_ANSIBLE_ARGS`` variable." msgstr "モジュールを作æˆã—ã¦ã„ã‚‹å ´åˆã¯ã€å¼•æ•°ã‚’æ¸¡ã™æ–¹æ³•ã¯å†…部実装ã®è©³ç´°ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã¯éŽåŽ»ã«å¤‰æ›´ã•れã¦ãŠã‚Šã€å…±é€šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹ã¨ã€Ansible モジュール㌠:class:`ansible.module_utils.basic.AnsibleModule` ã®ä½¿ç”¨ã‚’ã‚„ã‚ã‚‹ã¨ã™ãã«å†ã³å¤‰æ›´ã•れã¾ã™ã€‚内部グローãƒãƒ«å¤‰æ•° ``_ANSIBLE_ARGS`` ã«ä¾å­˜ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:365 msgid "Very dynamic custom modules which need to parse arguments before they instantiate an ``AnsibleModule`` may use ``_load_params`` to retrieve those parameters. Although ``_load_params`` may change in breaking ways if necessary to support changes in the code, it is likely to be more stable than either the way we pass parameters or the internal global variable." msgstr "``AnsibleModule`` をインスタンス化ã™ã‚‹å‰ã«å¼•æ•°ã‚’è§£æžã™ã‚‹å¿…è¦ã®ã‚ã‚‹éžå¸¸ã«å‹•çš„ãªã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``_load_params`` を使用ã—ã¦ã“れらã®ãƒ‘ラメーターをå–å¾—ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚コードã®å¤‰æ›´ã‚’サãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``_load_params`` ãŒç ´å£Šçš„ãªæ–¹æ³•ã§å¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€ãƒ‘ラメーターã¾ãŸã¯å†…部グローãƒãƒ«å¤‰æ•°ã‚’æ¸¡ã™æ–¹æ³•よりも安定ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:371 msgid "Prior to Ansible 2.7, the Ansible module was invoked in a second Python interpreter and the arguments were then passed to the script over the script's stdin." msgstr "Ansible 2.7 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€Ansible モジュール㯠2 番目㮠Python インタープリターã§å‘¼ã³å‡ºã•れã€å¼•æ•°ã¯ã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æ¨™æº–入力 (stdin) を介ã—ã¦ã‚¹ã‚¯ãƒªãƒ—ãƒˆã«æ¸¡ã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:378 msgid "Internal arguments" msgstr "内部引数" #: ../../rst/dev_guide/developing_program_flow_modules.rst:380 msgid "Both :ref:`module_replacer` and :ref:`Ansiballz` send additional arguments to the module beyond those which the user specified in the playbook. These additional arguments are internal parameters that help implement global Ansible features. Modules often do not need to know about these explicitly as the features are implemented in :py:mod:`ansible.module_utils.basic` but certain features need support from the module so it's good to know about them." msgstr ":ref:`module_replacer` ãŠã‚ˆã³ :ref:`Ansiballz` ã®ä¸¡æ–¹ã¯ã€Playbook ã§æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ä»¥å¤–ã«è¿½åŠ ã®å¼•数をモジュールã«é€ä¿¡ã—ã¾ã™ã€‚ã“れらã®è¿½åŠ ã®å¼•æ•°ã¯ã€Ansible ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«æ©Ÿèƒ½ã®å®Ÿè£…ã«å½¹ç«‹ã¤å†…部パラメーターã§ã™ã€‚ã“ã‚Œã‚‰ã®æ©Ÿèƒ½ã¯ã€:py:mod:`ansible.module_utils.basic` ã«å®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ˜Žç¤ºçš„ã«ç†è§£ã™ã‚‹å¿…è¦ãŒãªã„ã“ã¨ãŒã—ã°ã—ã°ã‚りã¾ã™ãŒã€æ©Ÿèƒ½ã«ã¤ã„ã¦ã‚る程度ç†è§£ã§ãるよã†ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ç‰¹å®šã®æ©Ÿèƒ½ã®ã‚µãƒãƒ¼ãƒˆãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:387 msgid "The internal arguments listed here are global. If you need to add a local internal argument to a custom module, create an action plugin for that specific module - see ``_original_basename`` in the `copy action plugin `_ for an example." msgstr "ã“ã“ã«è¨˜è¼‰ã•れã¦ã„る内部引数ã¯ã‚°ãƒ­ãƒ¼ãƒãƒ«ã§ã™ã€‚カスタムモジュールã«ãƒ­ãƒ¼ã‚«ãƒ«ã®å†…部引数を追加ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãã®ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« action プラグインを作æˆã—ã¦ãã ã•ã„。例ã¯ã€ã€Œ`copy action plugin `_ã€ã®ã€Œ``_original_basename``ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:390 msgid "_ansible_no_log" msgstr "_ansible_no_log" #: ../../rst/dev_guide/developing_program_flow_modules.rst:392 msgid "Boolean. Set to True whenever a parameter in a task or play specifies ``no_log``. Any module that calls :py:meth:`AnsibleModule.log` handles this automatically. If a module implements its own logging then it needs to check this value. To access in a module, instantiate an ``AnsibleModule`` and then check the value of :attr:`AnsibleModule.no_log`." msgstr "ブール値。タスクã¾ãŸã¯ãƒ—レイã®ãƒ‘ラメーターを ``no_log`` ã«æŒ‡å®šã—ãŸå ´åˆã¯å¸¸ã« True ã«è¨­å®šã—ã¾ã™ã€‚:py:meth:`AnsibleModule.log` を呼ã³å‡ºã™ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«ã“れを処ç†ã—ã¾ã™ã€‚モジュールãŒãã®ç‹¬è‡ªã®ãƒ­ã‚®ãƒ³ã‚°ã‚’実装ã—ãŸå ´åˆã¯ã€ã“ã®å€¤ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モジュールã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``AnsibleModule`` をインスタンス化ã—ã¦ã€:attr:`AnsibleModule.no_log` ã®å€¤ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:397 msgid "``no_log`` specified in a module's argument_spec is handled by a different mechanism." msgstr "モジュール㮠argument_spec ã§æŒ‡å®šã•れ㟠``no_log`` ã¯åˆ¥ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã§å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:400 msgid "_ansible_debug" msgstr "_ansible_debug" #: ../../rst/dev_guide/developing_program_flow_modules.rst:402 msgid "Boolean. Turns more verbose logging on or off and turns on logging of external commands that the module executes. If a module uses :py:meth:`AnsibleModule.debug` rather than :py:meth:`AnsibleModule.log` then the messages are only logged if ``_ansible_debug`` is set to ``True``. To set, add ``debug: True`` to :file:`ansible.cfg` or set the environment variable :envvar:`ANSIBLE_DEBUG`. To access in a module, instantiate an ``AnsibleModule`` and access :attr:`AnsibleModule._debug`." msgstr "ブール値。詳細ãªãƒ­ã‚®ãƒ³ã‚°ã‚’オンã¾ãŸã¯ã‚ªãƒ•ã«ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå®Ÿè¡Œã™ã‚‹å¤–部コマンドã®ãƒ­ã‚®ãƒ³ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚モジュール㌠:py:meth:`AnsibleModule.log` ã§ã¯ãªã :py:meth:`AnsibleModule.debug` を使用ã™ã‚‹å ´åˆã¯ã€``_ansible_debug`` ㌠``True`` ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒãƒ­ã‚°ã«è¨˜éŒ²ã•れã¾ã™ã€‚設定ã™ã‚‹ã«ã¯ã€``debug: True`` ã‚’ :file:`ansible.cfg` ã«è¿½åŠ ã™ã‚‹ã‹ã€ç’°å¢ƒå¤‰æ•° :envvar:`ANSIBLE_DEBUG` を設定ã—ã¾ã™ã€‚モジュールã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``AnsibleModule`` をインスタンス化ã—ã€:attr:`AnsibleModule._debug` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:411 msgid "_ansible_diff" msgstr "_ansible_diff" #: ../../rst/dev_guide/developing_program_flow_modules.rst:413 msgid "Boolean. If a module supports it, tells the module to show a unified diff of changes to be made to templated files. To set, pass the ``--diff`` command line option. To access in a module, instantiate an `AnsibleModule` and access :attr:`AnsibleModule._diff`." msgstr "ブール値。モジュールãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã—ã€ãƒ†ãƒ³ãƒ—レート化ã•れãŸãƒ•ァイルã«åŠ ãˆã‚‰ã‚ŒãŸå¤‰æ›´ã®å·®ç•°ã‚’çµ±åˆã™ã‚‹ã‚ˆã†ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ‡ç¤ºã—ã¾ã™ã€‚設定ã™ã‚‹ã«ã¯ã€``--diff`` コマンドラインオプションを渡ã—ã¾ã™ã€‚モジュールã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€`AnsibleModule` をインスタンス化ã—ã¦ã€:attr:`AnsibleModule._diff` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:419 msgid "_ansible_verbosity" msgstr "_ansible_verbosity" #: ../../rst/dev_guide/developing_program_flow_modules.rst:421 msgid "Unused. This value could be used for finer grained control over logging." msgstr "未使用。ã“ã®å€¤ã¯ã€ãƒ­ã‚°ã‚’より細ã‹ã制御ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:424 msgid "_ansible_selinux_special_fs" msgstr "_ansible_selinux_special_fs" #: ../../rst/dev_guide/developing_program_flow_modules.rst:426 msgid "List. Names of filesystems which should have a special SELinux context. They are used by the `AnsibleModule` methods which operate on files (changing attributes, moving, and copying). To set, add a comma separated string of filesystem names in :file:`ansible.cfg`::" msgstr "一覧。特別㪠SELinux コンテキストをæŒã¤å¿…è¦ãŒã‚るファイルシステムã®åå‰ã€‚åå‰ã¯ãƒ•ァイル (属性ã®å¤‰æ›´ã€ç§»å‹•ã€ã‚³ãƒ”ー) ã§æ“作ã™ã‚‹ `AnsibleModule` メソッドã«ã‚ˆã£ã¦ä½¿ç”¨ã•れã¾ã™ã€‚設定ã™ã‚‹ã«ã¯ã€:file:`ansible.cfg` ã«ã€ãƒ•ァイルåã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:434 msgid "Most modules can use the built-in ``AnsibleModule`` methods to manipulate files. To access in a module that needs to know about these special context filesystems, instantiate an ``AnsibleModule`` and examine the list in :attr:`AnsibleModule._selinux_special_fs`." msgstr "ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ•ァイルをæ“作ã™ã‚‹çµ„ã¿è¾¼ã¿ ``AnsibleModule`` メソッドを使用ã§ãã¾ã™ã€‚ã“れらã®ç‰¹åˆ¥ãªã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルシステムã«ã¤ã„ã¦çŸ¥ã‚‹å¿…è¦ãŒã‚るモジュールã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``AnsibleModule`` をインスタンス化ã—ã€:attr:`AnsibleModule._selinux_special_fs` ã§ãƒªã‚¹ãƒˆã‚’調ã¹ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:438 msgid "This replaces :attr:`ansible.module_utils.basic.SELINUX_SPECIAL_FS` from :ref:`module_replacer`. In module replacer it was a comma separated string of filesystem names. Under Ansiballz it's an actual list." msgstr "ã“れã«ã‚ˆã‚Šã€:ref:`module_replacer` ã® :attr:`ansible.module_utils.basic.SELINUX_SPECIAL_FS` ã‚’ç½®ãæ›ãˆã¾ã™ã€‚モジュール置æ›ã¯ã€ãƒ•ァイルåã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã§ã—ãŸã€‚Ansiballz ã¯ã€å®Ÿéš›ã®ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:445 msgid "_ansible_syslog_facility" msgstr "_ansible_syslog_facility" #: ../../rst/dev_guide/developing_program_flow_modules.rst:447 msgid "This parameter controls which syslog facility Ansible module logs to. To set, change the ``syslog_facility`` value in :file:`ansible.cfg`. Most modules should just use :meth:`AnsibleModule.log` which will then make use of this. If a module has to use this on its own, it should instantiate an `AnsibleModule` and then retrieve the name of the syslog facility from :attr:`AnsibleModule._syslog_facility`. The Ansiballz code is less hacky than the old :ref:`module_replacer` code:" msgstr "ã“ã®ãƒ‘ラメーターã¯ã€Ansible モジュールãŒã©ã® syslog 機能ã«ãƒ­ã‚°ã‚’記録ã™ã‚‹ã‹ã‚’制御ã—ã¾ã™ã€‚設定ã™ã‚‹ã«ã¯ã€:file:`ansible.cfg` ã® ``syslog_facility`` ã®å€¤ã‚’変更ã—ã¾ã™ã€‚多ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã“れを利用ã™ã‚‹ :meth:`AnsibleModule.log` ã®ã¿ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モジュールãŒç‹¬è‡ªã«ã“れを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€`AnsibleModule` をインスタンス化ã—ã¦ã€:attr:`AnsibleModule._syslog_facility` ã‹ã‚‰ syslog 機能ã®åå‰ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansiballz コードã¯å¤ã„ :ref:`module_replacer` コードよりもãƒãƒƒã‚­ãƒ³ã‚°ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:468 msgid "_ansible_version" msgstr "_ansible_version" #: ../../rst/dev_guide/developing_program_flow_modules.rst:470 msgid "This parameter passes the version of Ansible that runs the module. To access it, a module should instantiate an `AnsibleModule` and then retrieve it from :attr:`AnsibleModule.ansible_version`. This replaces :attr:`ansible.module_utils.basic.ANSIBLE_VERSION` from :ref:`module_replacer`." msgstr "ã“ã®ãƒ‘ラメーターã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’渡ã—ã¾ã™ã€‚ã“れã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ `AnsibleModule` をインスタンス化ã—ã€:attr:`AnsibleModule.ansible_version` ã‹ã‚‰å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€:ref:`module_replacer` ã® :attr:`ansible.module_utils.basic.ANSIBLE_VERSION` ã‚’ç½®ãæ›ãˆã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:482 msgid "Module return values & Unsafe strings" msgstr "モジュール戻り値ã¨å®‰å…¨ã§ãªã„文字列" #: ../../rst/dev_guide/developing_program_flow_modules.rst:484 msgid "At the end of a module's execution, it formats the data that it wants to return as a JSON string and prints the string to its stdout. The normal action plugin receives the JSON string, parses it into a Python dictionary, and returns it to the executor." msgstr "モジュールã®å®Ÿè¡Œã®æœ€å¾Œã«ã€è¿”ã—ãŸã„データを JSON 文字列ã¨ã—ã¦å½¢å¼åŒ–ã—ã€ãã®æ–‡å­—列を標準出力 (stdout) ã«å‡ºåŠ›ã—ã¾ã™ã€‚通常㮠action プラグイン㯠JSON 文字列をå—ã‘å–りã€Python ディクショナリーã«è§£æžã—ã¦ã‚¨ã‚¯ã‚¼ã‚­ãƒ¥ãƒ¼ã‚¿ãƒ¼ã«è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:486 msgid "If Ansible templated every string return value, it would be vulnerable to an attack from users with access to managed nodes. If an unscrupulous user disguised malicious code as Ansible return value strings, and if those strings were then templated on the controller, Ansible could execute arbitrary code. To prevent this scenario, Ansible marks all strings inside returned data as ``Unsafe``, emitting any Jinja2 templates in the strings verbatim, not expanded by Jinja2." msgstr "Ansible ãŒã™ã¹ã¦ã®æ–‡å­—åˆ—ã®æˆ»ã‚Šå€¤ã‚’テンプレート化ã™ã‚‹ã¨ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるユーザーã‹ã‚‰ã®æ”»æ’ƒã«å¯¾ã—ã¦è„†å¼±ã«ãªã‚Šã¾ã™ã€‚悪æ„ã®ã‚ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ‚ªæ„ã®ã‚るコードを Ansible ã®æˆ»ã‚Šå€¤ã®æ–‡å­—列ã¨ã—ã¦å½è£…ã—ã€ãã®ã‚ˆã†ãªæ–‡å­—列ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ä¸Šã§ãƒ†ãƒ³ãƒ—レート化ã•れるã¨ã€Ansible ãŒä»»æ„ã®ã‚³ãƒ¼ãƒ‰ã‚’実行ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ã‚·ãƒŠãƒªã‚ªã‚’防ããŸã‚ã«ã€Ansible ã¯æˆ»ã‚Šå€¤ã®ãƒ‡ãƒ¼ã‚¿å†…ã®ã™ã¹ã¦ã®æ–‡å­—列を ``Unsafe`` ã¨è¡¨ç¤ºã—ã€æ–‡å­—列内㮠Jinja2 テンプレートを Jinja2 ã§å±•é–‹ã›ãšã«ãã®ã¾ã¾ã‚¨ãƒŸãƒƒãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:488 msgid "Strings returned by invoking a module through ``ActionPlugin._execute_module()`` are automatically marked as ``Unsafe`` by the normal action plugin. If another action plugin retrieves information from a module through some other means, it must mark its return data as ``Unsafe`` on its own." msgstr "``ActionPlugin._execute_module()`` を介ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã—ã¦è¿”ã•ã‚ŒãŸæ–‡å­—列ã«ã¯ã€é€šå¸¸ã® action プラグインã«ã‚ˆã£ã¦è‡ªå‹•的㫠``Unsafe`` ã¨ã„ã†ãƒžãƒ¼ã‚¯ãŒä»˜ãã¾ã™ã€‚別㮠action プラグインãŒä»–ã®æ–¹æ³•ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰æƒ…報をå–å¾—ã—ãŸå ´åˆã¯ã€ãã® action プラグイン自身ãŒãã®æˆ»ã‚Šå€¤ã« ``Unsafe`` ã¨è¡¨ç¤ºã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:490 msgid "In case a poorly-coded action plugin fails to mark its results as \"Unsafe,\" Ansible audits the results again when they are returned to the executor, marking all strings as ``Unsafe``. The normal action plugin protects itself and any other code that it calls with the result data as a parameter. The check inside the executor protects the output of all other action plugins, ensuring that subsequent tasks run by Ansible will not template anything from those results either." msgstr "ä¸é©åˆ‡ã«ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã•れ㟠action プラグインãŒçµæžœã‚’「Unsafeã€ã¨è¡¨ç¤ºã—ãªã‹ã£ãŸå ´åˆã€Ansible ã¯ã‚¨ã‚°ã‚¼ã‚­ãƒ¥ãƒ¼ã‚¿ãƒ¼ã«è¿”ã•れる際ã«çµæžœã‚’å†åº¦ç›£æŸ»ã—ã€ã™ã¹ã¦ã®æ–‡å­—列を ``Unsafe`` ã¨è¡¨ç¤ºã—ã¾ã™ã€‚通常㮠action プラグインã¯ã€è‡ªèº«ã¨ã€çµæžœãƒ‡ãƒ¼ã‚¿ã‚’パラメーターã¨ã—ã¦å‘¼ã³å‡ºã™ãã®ä»–ã®ã‚³ãƒ¼ãƒ‰ã‚’ä¿è­·ã—ã¾ã™ã€‚エクゼキュータ内ã®ãƒã‚§ãƒƒã‚¯ã¯ã€ä»–ã®ã™ã¹ã¦ã® action プラグインã®å‡ºåŠ›ã‚’ä¿è­·ã—ã€Ansible ãŒå®Ÿè¡Œã™ã‚‹å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ãŒã“れらã®çµæžœã‹ã‚‰ä½•ã‹ã‚’テンプレート化ã™ã‚‹ã“ã¨ãŒãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:496 msgid "Special considerations" msgstr "特別ãªè€ƒæ…®äº‹é …" #: ../../rst/dev_guide/developing_program_flow_modules.rst:501 msgid "Pipelining" msgstr "パイプライン" #: ../../rst/dev_guide/developing_program_flow_modules.rst:503 msgid "Ansible can transfer a module to a remote machine in one of two ways:" msgstr "Ansible ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’リモートマシンã«è»¢é€ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:505 msgid "it can write out the module to a temporary file on the remote host and then use a second connection to the remote host to execute it with the interpreter that the module needs" msgstr "ã“れã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®ä¸€æ™‚ファイルã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’書ã込むã“ã¨ãŒã§ãã€æ¬¡ã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¸ã® 2 ç•ªç›®ã®æŽ¥ç¶šã‚’ä½¿ç”¨ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ã¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã§ã“れを実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:508 msgid "or it can use what's known as pipelining to execute the module by piping it into the remote interpreter's stdin." msgstr "ã¾ãŸã¯ã€ãƒ‘イプラインã¨å‘¼ã°ã‚Œã‚‹ã‚‚ã®ã‚’使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’リモートインタープリター㮠stdin ã«ãƒ‘イプã™ã‚‹ã“ã¨ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:511 msgid "Pipelining only works with modules written in Python at this time because Ansible only knows that Python supports this mode of operation. Supporting pipelining means that whatever format the module payload takes before being sent over the wire must be executable by Python via stdin." msgstr "パイプライン処ç†ã¯ã€ç¾æ™‚点ã§ã¯ Python ã§è¨˜è¿°ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚ã“れã¯ã€Python ãŒã“ã®æ“作モードをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã“ã¨ã®ã¿ã‚’ Ansible ãŒèªè­˜ã—ã¦ã„ã‚‹ãŸã‚ã§ã™ã€‚パイプライン化をサãƒãƒ¼ãƒˆã™ã‚‹ã¨ã„ã†ã“ã¨ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµŒç”±ã§é€ä¿¡ã•れるå‰ã«å–ã‚‹å½¢å¼ãŒä½•ã§ã‚れã€Python ㌠stdin を介ã—ã¦å®Ÿè¡Œå¯èƒ½ã§ãªã‘れã°ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:519 msgid "Why pass args over stdin?" msgstr "標準入力 (stdin) ã§å¼•数を渡ã™ç†ç”±" #: ../../rst/dev_guide/developing_program_flow_modules.rst:521 msgid "Passing arguments via stdin was chosen for the following reasons:" msgstr "以下ã®ç†ç”±ã«ã‚ˆã‚Šã€æ¨™æº–入力ã§å¼•数を渡ã™ã“ã¨ãŒé¸æŠžã•れã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:523 msgid "When combined with :ref:`ANSIBLE_PIPELINING`, this keeps the module's arguments from temporarily being saved onto disk on the remote machine. This makes it harder (but not impossible) for a malicious user on the remote machine to steal any sensitive information that may be present in the arguments." msgstr ":ref:`ANSIBLE_PIPELINING` ã¨çµ„ã¿åˆã‚ã›ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¼•数をリモートマシン上ã®ãƒ‡ã‚£ã‚¹ã‚¯ã«ä¸€æ™‚çš„ã«ä¿å­˜ã—ãŸã¾ã¾ã«ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ä¸Šã®æ‚ªæ„ã®ã‚るユーザーãŒå¼•æ•°ã«å­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ã®ã‚る機密情報を盗むã®ãŒå›°é›£ã«ãªã‚Šã¾ã™ (ä¸å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:527 msgid "Command line arguments would be insecure as most systems allow unprivileged users to read the full commandline of a process." msgstr "ã»ã¨ã‚“ã©ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€æ¨©é™ã®ãªã„ユーザーãŒãƒ—ロセスã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³å…¨ä½“を読むã“ã¨ã‚’許å¯ã•れã¦ã„ã‚‹ãŸã‚ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³å¼•æ•°ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_program_flow_modules.rst:529 msgid "Environment variables are usually more secure than the commandline but some systems limit the total size of the environment. This could lead to truncation of the parameters if we hit that limit." msgstr "環境変数ã¯é€šå¸¸ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ˆã‚Šå®‰å…¨ã§ã™ãŒã€ç’°å¢ƒã®åˆè¨ˆã‚µã‚¤ã‚ºã‚’制é™ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚‚ã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‘ラメーターãŒä¸Šé™ã«é”ã™ã‚‹ã¨ã€ãƒ‘ラメーターãŒåˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:537 msgid "AnsibleModule" msgstr "AnsibleModule" #: ../../rst/dev_guide/developing_program_flow_modules.rst:542 msgid "Argument spec" msgstr "引数ã®ä»•様" #: ../../rst/dev_guide/developing_program_flow_modules.rst:544 msgid "The ``argument_spec`` provided to ``AnsibleModule`` defines the supported arguments for a module, as well as their type, defaults and more." msgstr "``AnsibleModule`` ã«æä¾›ã•れる ``argument_spec`` ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚µãƒãƒ¼ãƒˆã•れる引数ã€ãã®åž‹ã€ãƒ‡ãƒ•ォルトãªã©ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:546 msgid "Example ``argument_spec``:" msgstr "``argument_spec`` ã®ä¾‹:" #: ../../rst/dev_guide/developing_program_flow_modules.rst:562 msgid "This section will discuss the behavioral attributes for arguments:" msgstr "本セクションã§ã¯ã€å¼•æ•°ã®å‹•作属性を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:566 msgid "``type`` allows you to define the type of the value accepted for the argument. The default value for ``type`` is ``str``. Possible values are:" msgstr "``type`` ã§ã¯ã€å¼•æ•°ã«å—ã‘入れられる値ã®åž‹ã‚’定義ã§ãã¾ã™ã€‚``type`` ã®ãƒ‡ãƒ•ォルト値㯠``str`` ã§ã™ã€‚å¯èƒ½ãªå€¤ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:568 msgid "str" msgstr "str" #: ../../rst/dev_guide/developing_program_flow_modules.rst:569 msgid "list" msgstr "list" #: ../../rst/dev_guide/developing_program_flow_modules.rst:570 msgid "dict" msgstr "dict" #: ../../rst/dev_guide/developing_program_flow_modules.rst:571 msgid "bool" msgstr "bool" #: ../../rst/dev_guide/developing_program_flow_modules.rst:572 msgid "int" msgstr "int" #: ../../rst/dev_guide/developing_program_flow_modules.rst:573 msgid "float" msgstr "float" #: ../../rst/dev_guide/developing_program_flow_modules.rst:574 msgid "path" msgstr "path" #: ../../rst/dev_guide/developing_program_flow_modules.rst:575 msgid "raw" msgstr "raw" #: ../../rst/dev_guide/developing_program_flow_modules.rst:576 msgid "jsonarg" msgstr "jsonarg" #: ../../rst/dev_guide/developing_program_flow_modules.rst:577 #: ../../rst/dev_guide/style_guide/index.rst:150 msgid "json" msgstr "json" #: ../../rst/dev_guide/developing_program_flow_modules.rst:578 msgid "bytes" msgstr "bytes" #: ../../rst/dev_guide/developing_program_flow_modules.rst:579 msgid "bits" msgstr "bits" #: ../../rst/dev_guide/developing_program_flow_modules.rst:581 msgid "The ``raw`` type, performs no type validation or type casting, and maintains the type of the passed value." msgstr "``raw`` åž‹ã§ã€åž‹ã®æ¤œè¨¼ã‚„型キャストを行ã‚ãšã€æ¸¡ã•れãŸå€¤ã®åž‹ã‚’ä¿æŒã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:585 msgid "``elements`` works in combination with ``type`` when ``type='list'``. ``elements`` can then be defined as ``elements='int'`` or any other type, indicating that each element of the specified list should be of that type." msgstr "``elements`` ã¯ã€``type='list'`` ã®æ™‚ã« ``type`` ã¨çµ„ã¿åˆã‚ã›ã¦å‹•作ã—ã¾ã™ã€‚``elements`` 㯠``elements='int'`` ãªã©ã®åž‹ã§å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã€æŒ‡å®šã•れãŸãƒªã‚¹ãƒˆã®å„è¦ç´ ãŒãã®åž‹ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:589 msgid "The ``default`` option allows sets a default value for the argument for the scenario when the argument is not provided to the module. When not specified, the default value is ``None``." msgstr "``default`` オプションã¯ã€å¼•æ•°ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æä¾›ã•れã¦ã„ãªã„å ´åˆã®ã‚·ãƒŠãƒªã‚ªã®å¼•æ•°ã®ãƒ‡ãƒ•ォルト値を設定ã—ã¾ã™ã€‚指定ã—ãªã„å ´åˆã€ãƒ‡ãƒ•ォルト値㯠``None`` ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "fallback" msgstr "fallback" #: ../../rst/dev_guide/developing_program_flow_modules.rst:593 msgid "``fallback`` accepts a ``tuple`` where the first argument is a callable (function) that will be used to perform the lookup, based on the second argument. The second argument is a list of values to be accepted by the callable." msgstr "``fallback`` ã¯ã€ç¬¬ 1 引数ã«ã€ç¬¬ 2 引数ã«åŸºã¥ã„ã¦æ¤œç´¢ã‚’実行ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ callable (関数) ã® ``tuple`` ã‚’å—ã‘入れã¾ã™ã€‚2 ã¤ç›®ã®å¼•æ•°ã¯ã€callable オブジェクトã«ã‚ˆã£ã¦å—ã‘入れられる値ã®ãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:595 msgid "The most common callable used is ``env_fallback`` which will allow an argument to optionally use an environment variable when the argument is not supplied." msgstr "最も一般的ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ callable 㯠``env_fallback`` ã§ã€ã“れã¯å¼•æ•°ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã«ä»»æ„ã§ç’°å¢ƒå¤‰æ•°ã‚’使用ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:605 msgid "``choices`` accepts a list of choices that the argument will accept. The types of ``choices`` should match the ``type``." msgstr "``choices`` ã¯ã€å¼•æ•°ãŒå—ã‘å…¥ã‚Œã‚‹é¸æŠžè‚¢ã®ãƒªã‚¹ãƒˆã‚’å—ã‘入れã¾ã™ã€‚``choices`` ã®åž‹ã¯ã€``type`` ã¨ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:609 msgid "``required`` accepts a boolean, either ``True`` or ``False`` that indicates that the argument is required. When not specified, ``required`` defaults to ``False``. This should not be used in combination with ``default``." msgstr "``required`` ブール値 (``True`` ã¾ãŸã¯ ``False`` ã®ã„ãšã‚Œã‹) ã‚‚å—ã‘入れã¾ã™ã€‚ã“れã¯ã€å¼•æ•°ãŒå¿…è¦ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚指定ã—ãªã„å ´åˆã€``required`` ã®ãƒ‡ãƒ•ォルト㯠``False`` ã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€``default`` ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "no_log" msgstr "no_log" #: ../../rst/dev_guide/developing_program_flow_modules.rst:613 msgid "``no_log`` accepts a boolean, either ``True`` or ``False``, that indicates explicitly whether or not the argument value should be masked in logs and output." msgstr "``no_log`` ã«ã¯ã€å¼•æ•°ã®å€¤ãŒãƒ­ã‚°ã‚„出力ã§ãƒžã‚¹ã‚¯ã•れるã¹ãã‹ã©ã†ã‹ã‚’明示的ã«ç¤ºã™ãƒ–ール値 (``True`` ã¾ãŸã¯ ``False``) を使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:616 msgid "In the absence of ``no_log``, if the parameter name appears to indicate that the argument value is a password or passphrase (such as \"admin_password\"), a warning will be shown and the value will be masked in logs but **not** output. To disable the warning and masking for parameters that do not contain sensitive information, set ``no_log`` to ``False``." msgstr "``no_log`` ãŒãªã„å ´åˆã¯ã€ãƒ‘ラメーターåãŒã€å¼•æ•°ã®å€¤ãŒãƒ‘スワードやパスフレーズã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„るよã†ã«è¦‹ãˆã‚‹å ´åˆ (「admin_passwordã€ãªã©)ã€è­¦å‘ŠãŒè¡¨ç¤ºã•れã€å€¤ã¯ãƒ­ã‚°ã§ãƒžã‚¹ã‚¯ã•れã¾ã™ãŒã€**出力ã•れã¾ã›ã‚“**。機密情報をå«ã¾ãªã„パラメーターã®è­¦å‘Šã¨ãƒžã‚¹ã‚­ãƒ³ã‚°ã‚’無効ã«ã™ã‚‹ã«ã¯ã€``no_log`` ã‚’ ``False`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:620 msgid "``aliases`` accepts a list of alternative argument names for the argument, such as the case where the argument is ``name`` but the module accepts ``aliases=['pkg']`` to allow ``pkg`` to be interchangeably with ``name``" msgstr "``aliases`` ã§ã¯ã€å¼•æ•°ã®ä»£æ›¿å¼•æ•°åã®ãƒªã‚¹ãƒˆãŒä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€å¼•数㯠``name`` ã§ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ ``aliases=['pkg']`` ã‚’å—ã‘付ã‘ã¦ã€``pkg`` ã‚’ ``name`` ã¨äº’æ›æ€§ã‚’æŒãŸã›ã‚‹ã‚ˆã†ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:624 msgid "``options`` implements the ability to create a sub-argument_spec, where the sub options of the top level argument are also validated using the attributes discussed in this section. The example at the top of this section demonstrates use of ``options``. ``type`` or ``elements`` should be ``dict`` is this case." msgstr "``options`` ã¯ã€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®å¼•æ•°ã®ã‚µãƒ–オプションもã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ãŸå±žæ€§ã‚’使用ã—ã¦æ¤œè¨¼ã•れる sub-argument_spec を作æˆã™ã‚‹æ©Ÿèƒ½ã‚’実装ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®å†’é ­ã«ã‚る例ã¯ã€``options`` ã®ä½¿ç”¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ã“ã“ã§ã¯ã€``type`` ã¾ãŸã¯ ``elements`` 㯠``dict`` ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "apply_defaults" msgstr "apply_defaults" #: ../../rst/dev_guide/developing_program_flow_modules.rst:628 msgid "``apply_defaults`` works alongside ``options`` and allows the ``default`` of the sub-options to be applied even when the top-level argument is not supplied." msgstr "``apply_defaults`` ã¯ã€``options`` ã¨ä¸¦ã‚“ã§å‹•作ã—ã€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®å¼•æ•°ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã§ã‚‚サブオプション㮠``デフォルト`` ã‚’é©ç”¨ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:630 msgid "In the example of the ``argument_spec`` at the top of this section, it would allow ``module.params['top_level']['second_level']`` to be defined, even if the user does not provide ``top_level`` when calling the module." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®å†’é ­ã«ã‚ã‚‹ ``argument_spec`` ã®ä¾‹ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ã¨ãã« ``top_level`` を指定ã—ãªã‹ã£ãŸå ´åˆã§ã‚‚ã€``module.params['top_level']['second_level']`` を定義ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "removed_in_version" msgstr "removed_in_version" #: ../../rst/dev_guide/developing_program_flow_modules.rst:634 msgid "``removed_in_version`` indicates which version of ansible-core or a collection a deprecated argument will be removed in. Mutually exclusive with ``removed_at_date``, and must be used with ``removed_from_collection``." msgstr "``removed_in_version`` ã¯ã€éžæŽ¨å¥¨ã®å¼•æ•°ãŒå‰Šé™¤ã•れる ansible-core ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’示ã—ã¾ã™ã€‚``removed_at_date`` ã§ç›¸äº’ã«æŽ’ä»–ã¨ãªã‚Šã€``removed_from_collection`` ã§ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "removed_at_date" msgstr "removed_at_date" #: ../../rst/dev_guide/developing_program_flow_modules.rst:648 msgid "``removed_at_date`` indicates that a deprecated argument will be removed in a minor ansible-core release or major collection release after this date. Mutually exclusive with ``removed_in_version``, and must be used with ``removed_from_collection``." msgstr "``removed_at_date`` ã¯ã€éžæŽ¨å¥¨ã®å¼•æ•°ãŒã€ã“ã®æ—¥ä»˜ä»¥é™ã®ãƒžã‚¤ãƒŠãƒ¼ãª ansible-core リリースã¾ãŸã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れるã“ã¨ã‚’示ã—ã¾ã™ã€‚``removed_in_version`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã‚りã€``removed_from_collection`` ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "removed_from_collection" msgstr "removed_from_collection" #: ../../rst/dev_guide/developing_program_flow_modules.rst:662 msgid "Specifies which collection (or ansible-core) deprecates this deprecated argument. Specify ``ansible.builtin`` for ansible-core, or the collection's name (format ``foo.bar``). Must be used with ``removed_in_version`` or ``removed_at_date``." msgstr "ã“ã®éžæŽ¨å¥¨ã®å¼•æ•°ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (ã¾ãŸã¯ ansible-core) を指定ã—ã¾ã™ã€‚ansible-core ã«ã¯ ``ansible.builtin``ã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åå‰ (``foo.bar`` ã®å½¢å¼) を指定ã—ã¾ã™ã€‚``removed_in_version`` ã¾ãŸã¯ ``removed_at_date`` ã¨å…±ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "deprecated_aliases" msgstr "deprecated_aliases" #: ../../rst/dev_guide/developing_program_flow_modules.rst:666 msgid "Deprecates aliases of this argument. Must contain a list or tuple of dictionaries having some the following keys:" msgstr "ã“ã®å¼•æ•°ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ã€‚以下ã®ã‚­ãƒ¼ã‚’æŒã¤ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒªã‚¹ãƒˆã¾ãŸã¯ã‚¿ãƒ—ルãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "name" msgstr "name" #: ../../rst/dev_guide/developing_program_flow_modules.rst:670 msgid "The name of the alias to deprecate. (Required.)" msgstr "éžæŽ¨å¥¨ã«ã™ã‚‹ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã®åå‰ (å¿…é ˆ)" #: ../../rst/dev_guide/developing_program_flow_modules.rst #: ../../rst/dev_guide/testing/sanity/update-bundled.rst msgid "version" msgstr "version" #: ../../rst/dev_guide/developing_program_flow_modules.rst:674 msgid "The version of ansible-core or the collection this alias will be removed in. Either ``version`` or ``date`` must be specified." msgstr "ansible-coreã€ã¾ãŸã¯ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯å‰Šé™¤ã•れるコレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚``version`` ã¾ãŸã¯ ``date`` ã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "date" msgstr "date" #: ../../rst/dev_guide/developing_program_flow_modules.rst:678 msgid "The a date after which a minor release of ansible-core or a major collection release will no longer contain this alias.. Either ``version`` or ``date`` must be specified." msgstr "ansible-core ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¾ãŸã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒªãƒ¼ã‚¹ã«ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒå«ã¾ã‚Œãªããªã£ãŸæ—¥ä»˜ã€‚``version`` ã¾ãŸã¯ ``date`` ã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "collection_name" msgstr "collection_name" #: ../../rst/dev_guide/developing_program_flow_modules.rst:682 msgid "Specifies which collection (or ansible-core) deprecates this deprecated alias. Specify ``ansible.builtin`` for ansible-core, or the collection's name (format ``foo.bar``). Must be used with ``version`` or ``date``." msgstr "ã“ã®éžæŽ¨å¥¨ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (ã¾ãŸã¯ ansible-core) を指定ã—ã¾ã™ã€‚ansible-core ã«ã¯ ``ansible.builtin``ã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åå‰ (``foo.bar`` ã®å½¢å¼) を指定ã—ã¾ã™ã€‚``version`` ã¾ãŸã¯ ``date`` ã¨å…±ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:684 msgid "Examples:" msgstr "例:" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "mutually_exclusive" msgstr "mutually_exclusive" #: ../../rst/dev_guide/developing_program_flow_modules.rst:708 msgid "If ``options`` is specified, ``mutually_exclusive`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`." msgstr "``options`` を指定ã™ã‚‹ã¨ã€``mutually_exclusive`` 㯠``options`` ã§èª¬æ˜Žã•れã¦ã„るサブオプションをå‚ç…§ã—ã€:ref:`argument_spec_dependencies` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "required_together" msgstr "required_together" #: ../../rst/dev_guide/developing_program_flow_modules.rst:712 msgid "If ``options`` is specified, ``required_together`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`." msgstr "``options`` を指定ã™ã‚‹ã¨ã€``required_together`` 㯠``options`` ã§èª¬æ˜Žã•れã¦ã„るサブオプションをå‚ç…§ã—ã€:ref:`argument_spec_dependencies` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "required_one_of" msgstr "required_one_of" #: ../../rst/dev_guide/developing_program_flow_modules.rst:716 msgid "If ``options`` is specified, ``required_one_of`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`." msgstr "``options`` を指定ã™ã‚‹ã¨ã€``required_one_of`` 㯠``options`` ã§èª¬æ˜Žã•れã¦ã„るサブオプションをå‚ç…§ã—ã€:ref:`argument_spec_dependencies` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "required_if" msgstr "required_if" #: ../../rst/dev_guide/developing_program_flow_modules.rst:720 msgid "If ``options`` is specified, ``required_if`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`." msgstr "``options`` を指定ã™ã‚‹ã¨ã€``required_if`` 㯠``options`` ã§èª¬æ˜Žã•れã¦ã„るサブオプションをå‚ç…§ã—ã€:ref:`argument_spec_dependencies` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst msgid "required_by" msgstr "required_by" #: ../../rst/dev_guide/developing_program_flow_modules.rst:724 msgid "If ``options`` is specified, ``required_by`` refers to the sub-options described in ``options`` and behaves as in :ref:`argument_spec_dependencies`." msgstr "``options`` を指定ã™ã‚‹ã¨ã€``required_by`` 㯠``options`` ã§èª¬æ˜Žã•れã¦ã„るサブオプションをå‚ç…§ã—ã€:ref:`argument_spec_dependencies` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:730 msgid "Dependencies between module options" msgstr "モジュールオプションã®ä¾å­˜é–¢ä¿‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:732 msgid "The following are optional arguments for ``AnsibleModule()``:" msgstr "以下ã¯ã€``AnsibleModule()`` ã®ä»»æ„ã®å¼•æ•°ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:748 msgid "Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names which are mutually exclusive. If more than one options of a list are specified together, Ansible will fail the module with an error." msgstr "文字列シーケンスã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ (リストã¾ãŸã¯ã‚¿ãƒ—ル) ã§ã™ã€‚文字列ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¯ç›¸äº’排他的ãªã‚ªãƒ—ションåã®ãƒªã‚¹ãƒˆã§ã™ã€‚リストã®è¤‡æ•°ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã¨ã€Ansible ã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:759 msgid "In this example, the options ``path`` and ``content`` must not specified at the same time. Also the options ``repository_url`` and ``repository_filename`` must not be specified at the same time. But specifying ``path`` and ``repository_url`` is accepted." msgstr "ã“ã®ä¾‹ã§ã¯ã€``path`` オプション㨠``content`` オプションã¯åŒæ™‚ã«æŒ‡å®šã—ãªã„ã§ãã ã•ã„。``repository_url`` オプション㨠``repository_filename`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’åŒæ™‚ã«æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ãŸã ã—ã€``path`` ãŠã‚ˆã³ ``repository_url`` を指定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:761 msgid "To ensure that precisely one of two (or more) options is specified, combine ``mutually_exclusive`` with ``required_one_of``." msgstr "正確㫠2 ã¤ã®ã‚ªãƒ—ション (ã¾ãŸã¯è¤‡æ•°ã®) オプションã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€``mutually_exclusive`` 㨠``required_one_of`` を組ã¿åˆã‚ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:765 msgid "Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names which are must be specified together. If at least one of these options are specified, the other ones from the same sequence must all be present." msgstr "文字列ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ (リストã¾ãŸã¯ã‚¿ãƒ—ル) ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚文字列ã®ã™ã¹ã¦ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¯ã€ä¸€ç·’ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚るオプションåã®ãƒªã‚¹ãƒˆã§ã™ã€‚ã“れらã®ã‚ªãƒ—ションãŒå°‘ãªãã¨ã‚‚ 1 ã¤æŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€åŒã˜ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ä»–ã®ã‚ªãƒ—ションãŒã™ã¹ã¦å­˜åœ¨ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:775 msgid "In this example, if one of the options ``file_path`` or ``file_hash`` is specified, Ansible will fail the module with an error if the other one is not specified." msgstr "ã“ã®ä¾‹ã§ã¯ã€``file_path`` ã¾ãŸã¯ ``file_hash`` ã®ã„ãšã‚Œã‹ã®ã‚ªãƒ—ションを指定ã—ã€ä»–ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæŒ‡å®šã—ã¦ã„ãªã„ã¨ã€Ansible ã¯ã‚¨ãƒ©ãƒ¼ã‚’出ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:779 msgid "Must be a sequence (list or tuple) of sequences of strings. Every sequence of strings is a list of option names from which at least one must be specified. If none one of these options are specified, Ansible will fail module execution." msgstr "文字列ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ (リストã¾ãŸã¯ã‚¿ãƒ—ル) ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚文字列ã®ã™ã¹ã¦ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¯ã€å°‘ãªãã¨ã‚‚ 1 ã¤ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚るオプションåã®ãƒªã‚¹ãƒˆã§ã™ã€‚ã“れらã®ã‚ªãƒ—ションãŒã„ãšã‚Œã‚‚指定ã•れã¦ã„ãªã„å ´åˆã€Ansible ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:789 msgid "In this example, at least one of ``path`` and ``content`` must be specified. If none are specified, execution will fail. Specifying both is explicitly allowed; to prevent this, combine ``required_one_of`` with ``mutually_exclusive``." msgstr "ã“ã®ä¾‹ã§ã¯ã€``path`` ãŠã‚ˆã³ ``content`` ã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚指定ã—ãªã„ã¨ã€å®Ÿè¡ŒãŒå¤±æ•—ã—ã¾ã™ã€‚両方ã®å€¤ã‚’指定ã™ã‚‹ã¨ã€æ˜Žç¤ºçš„ã«è¨±å¯ã•れã¾ã™ã€‚ã“れを回é¿ã™ã‚‹ã«ã¯ã€``required_one_of`` 㨠``mutually_exclusive`` を組ã¿åˆã‚ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:793 msgid "Must be a sequence of sequences. Every inner sequence describes one conditional dependency. Every sequence must have three or four values. The first two values are the option's name and the option's value which describes the condition. The further elements of the sequence are only needed if the option of that name has precisely this value." msgstr "一連ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ã¹ã¦ã®å†…部シーケンスã§ã¯ã€æ¡ä»¶ã®ä¾å­˜é–¢ä¿‚ã‚’ 1 ã¤èª¬æ˜Žã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã«ã¯ã€å€¤ãŒ 3 ã¤ã¾ãŸã¯ 4 ã¤å¿…è¦ã§ã™ã€‚最åˆã® 2 ã¤ã®å€¤ã¯ã€ã‚ªãƒ—ションåã¨ã€ãã®æ¡ä»¶ã‚’説明ã™ã‚‹ã‚ªãƒ—ションã®å€¤ã§ã™ã€‚シーケンスã®è¿½åŠ è¦ç´ ã¯ã€ãã®åå‰ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæ­£ç¢ºã«ã“ã®å€¤ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:795 msgid "If you want that all options in a list of option names are specified if the condition is met, use one of the following forms:" msgstr "æ¡ä»¶ãŒæº€ãŸã•れãŸå ´åˆã«ã‚ªãƒ—ションåã®ãƒªã‚¹ãƒˆå†…ã®ã‚ªãƒ—ションをã™ã¹ã¦æŒ‡å®šã™ã‚‹å ´åˆã¯ã€æ¬¡ã®ã„ãšã‚Œã‹ã®å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:802 msgid "If you want that at least one option of a list of option names is specified if the condition is met, use the following form:" msgstr "æ¡ä»¶ãŒæº€ãŸã•れãŸå ´åˆã«ã‚ªãƒ—ションåã®ä¸€è¦§ã®ã‚ªãƒ—ションを 1 ã¤ä»¥ä¸ŠæŒ‡å®šã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:817 msgid "In this example, if the user specifies ``state=present``, at least one of the options ``path`` and ``content`` must be supplied (or both). To make sure that precisely one can be specified, combine ``required_if`` with ``mutually_exclusive``." msgstr "ã“ã®ä¾‹ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ``state=present`` を指定ã—ã¦ã„ã‚‹å ´åˆã¯ã€``path`` 㨠``content`` ã®ã„ãšã‚Œã‹ (ã¾ãŸã¯ä¸¡æ–¹) ã®ã‚ªãƒ—ションを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚å¿…ãšæŒ‡å®šã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€``required_if`` 㨠``mutually_exclusive`` を組ã¿åˆã‚ã›ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:819 msgid "On the other hand, if ``force`` (a boolean parameter) is set to ``true``, ``yes`` etc., both ``force_reason`` and ``force_code`` must be specified." msgstr "一方ã€``force`` (ブール値パラメーター) ㌠``true``ã€``yes`` ãªã©ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€``force_reason`` 㨠``force_code`` ã®ä¸¡æ–¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:823 msgid "Must be a dictionary mapping option names to sequences of option names. If the option name in a dictionary key is specified, the option names it maps to must all also be specified. Note that instead of a sequence of option names, you can also specify one single option name." msgstr "オプションåã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¸ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãƒžãƒƒãƒ”ングオプションåã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ディクショナリーキーã§ã‚ªãƒ—ションåを指定ã™ã‚‹ã¨ã€ãã®ã‚ªãƒ—ションåã‚’ã™ã¹ã¦æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オプションåã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ä»£ã‚りã«ã€ã‚ªãƒ—ションã®åå‰ã‚’ 1 ã¤æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:834 msgid "In the example, if ``force`` is specified, ``force_reason`` must also be specified. Also, if ``path`` is specified, then three three options ``mode``, ``owner`` and ``group`` also must be specified." msgstr "ã“ã®ä¾‹ã§ã¯ã€``force`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€``force_reason`` も指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€``path`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€3 ã¤ã®ã‚ªãƒ—ション ``mode``ã€``owner``ã€ãŠã‚ˆã³ ``group`` も指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:837 msgid "Declaring check mode support" msgstr "ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã®ã‚µãƒãƒ¼ãƒˆã®å®£è¨€" #: ../../rst/dev_guide/developing_program_flow_modules.rst:839 msgid "To declare that a module supports check mode, supply ``supports_check_mode=True`` to the ``AnsibleModule()`` call:" msgstr "モジュールãŒç¢ºèªãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã‚’宣言ã™ã‚‹ã«ã¯ã€``AnsibleModule()`` 呼ã³å‡ºã—ã« ``supports_check_mode=True`` を指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:845 msgid "The module can determine whether it is called in check mode by checking the boolean value ``module.check_mode``. If it evaluates to ``True``, the module must take care not to do any modification." msgstr "モジュールã¯ã€ãƒ–ール値 ``module.check_mode`` を確èªã™ã‚‹ã“ã¨ã§ã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å‘¼ã³å‡ºã•れるã‹ã©ã†ã‹ã‚’判断ã§ãã¾ã™ã€‚``True`` ã«è©•価ã™ã‚‹å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å¤‰æ›´ã‚’行ã‚ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:847 msgid "If ``supports_check_mode=False`` is specified, which is the default value, the module will exit in check mode with ``skipped=True`` and message ``remote module () does not support check mode``." msgstr "``supports_check_mode=False`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆ (デフォルト値)ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ ``skipped=True`` ãŠã‚ˆã³ ``remote module () does not support check mode`` メッセージã§çµ‚了ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:850 msgid "Adding file options" msgstr "ファイルオプションã®è¿½åŠ " #: ../../rst/dev_guide/developing_program_flow_modules.rst:852 msgid "To declare that a module should add support for all common file options, supply ``add_file_common_args=True`` to the ``AnsibleModule()`` call:" msgstr "モジュールãŒã™ã¹ã¦ã®å…±é€šãƒ•ァイルオプションã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã™ã‚‹ã“ã¨ã‚’宣言ã™ã‚‹ã«ã¯ã€``add_file_common_args=True`` ã‚’ ``AnsibleModule()`` 呼ã³å‡ºã—ã«æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:858 msgid "You can find `a list of all file options here `_. It is recommended that you make your ``DOCUMENTATION`` extend the doc fragment ``ansible.builtin.files`` (see :ref:`module_docs_fragments`) in this case, to make sure that all these fields are correctly documented." msgstr "`ã“ã“ã§ã€ãƒ•ァイルオプションã®ä¸€è¦§ `_ を確èªã§ãã¾ã™ã€‚今回ã¯ã€``DOCUMENTATION`` ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメント ``ansible.builtin.files`` (:ref:`module_docs_fragments` ã‚’å‚ç…§) ã‚’æ‹¡å¼µã—ã€ã“れらã®ãƒ•ィールドãŒã™ã¹ã¦æ­£ã—ãæ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_program_flow_modules.rst:860 msgid "The helper functions ``module.load_file_common_arguments()`` and ``module.set_fs_attributes_if_different()`` can be used to handle these arguments for you:" msgstr "ヘルパー関数 ``module.load_file_common_arguments()`` ãŠã‚ˆã³ ``module.set_fs_attributes_if_different()`` を使用ã—ã¦ã€ä»¥ä¸‹ã®å¼•数を扱ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:5 msgid "Ansible and Python 3" msgstr "Ansible ãŠã‚ˆã³ Python 3" #: ../../rst/dev_guide/developing_python_3.rst:7 msgid "The ``ansible-core`` code runs on both Python 2 and Python 3 because we want Ansible to be able to manage a wide variety of machines. Contributors to ansible-core and to Ansible Collections should be aware of the tips in this document so that they can write code that will run on the same versions of Python as the rest of Ansible." msgstr "Ansible ãŒå„種マシンを管ç†ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã€``ansible-core`` コード㯠Python 2 㨠Python 3 ã®ä¸¡æ–¹ã§å®Ÿè¡Œã•れã¾ã™ã€‚ansible-core 㨠Ansible コレクションã«è²¢çŒ®ã™ã‚‹å ´åˆã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ’ントを確èªã—ã¦ã€Ansible ã®æ®‹ã‚Šã®éƒ¨åˆ†ã¨åŒã˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’記述ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:13 msgid "To ensure that your code runs on Python 3 as well as on Python 2, learn the tips and tricks and idioms described here. Most of these considerations apply to all three types of Ansible code:" msgstr "Python 2 ãŠã‚ˆã³ Python 3 ã§ã‚³ãƒ¼ãƒ‰ãŒå®Ÿè¡Œã•れるよã†ã«ã™ã‚‹ã«ã¯ã€ã“ã“ã§èª¬æ˜Žã™ã‚‹ãƒ’ントã¨ã‚³ãƒ„ã€ãŠã‚ˆã³ã‚¤ãƒ‡ã‚£ã‚ªãƒ ã‚’確èªã—ã¦ãã ã•ã„。ã“れらã®è€ƒæ…®äº‹é …ã®ã»ã¨ã‚“ã©ã¯ã€ä»¥ä¸‹ã® 3 種類㮠Ansible コードã®ã™ã¹ã¦ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:16 msgid "controller-side code - code that runs on the machine where you invoke :command:`/usr/bin/ansible`" msgstr "コントローラーå´ã®ã‚³ãƒ¼ãƒ‰ - :command:`/usr/bin/ansible` を呼ã³å‡ºã™ãƒžã‚·ãƒ³ã§å®Ÿè¡Œã•れるコード" #: ../../rst/dev_guide/developing_python_3.rst:17 msgid "modules - the code which Ansible transmits to and invokes on the managed machine." msgstr "モジュール - 管ç†ãƒžã‚·ãƒ³ã« Ansible ãŒé€ä¿¡ã—ãŸã‚Šèµ·å‹•ã—ãŸã‚Šã™ã‚‹ã‚³ãƒ¼ãƒ‰ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:18 msgid "shared ``module_utils`` code - the common code that's used by modules to perform tasks and sometimes used by controller-side code as well" msgstr "共有ã•れã¦ã„ã‚‹ ``module_utils`` コード - タスクを実行ã™ã‚‹ãŸã‚ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã™ã‚‹ä¸€èˆ¬çš„ãªã‚³ãƒ¼ãƒ‰ã§ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®ã‚³ãƒ¼ãƒ‰ã§ã‚‚使用ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:20 msgid "However, the three types of code do not use the same string strategy. If you're developing a module or some ``module_utils`` code, be sure to read the section on string strategy carefully." msgstr "ãŸã ã—ã€ã“ã® 3 種類ã®ã‚³ãƒ¼ãƒ‰ã§åŒã˜æ–‡å­—列ストラテジーãŒä½¿ç”¨ã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。モジュールã¾ãŸã¯ã„ãã¤ã‹ã® ``module_utils`` コードを開発ã—ã¦ã„ã‚‹å ´åˆã¯ã€æ–‡å­—列ストラテジーã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’注æ„ã—ã¦ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:23 msgid "Minimum version of Python 3.x and Python 2.x" msgstr "Python 3.x ãŠã‚ˆã³ Python 2.x ã®æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/dev_guide/developing_python_3.rst:25 msgid "On the controller we support Python 3.5 or greater and Python 2.7 or greater. Module-side, we support Python 3.5 or greater and Python 2.6 or greater." msgstr "コントローラーã§ã¯ã€Python 3.5 以é™ã€ãŠã‚ˆã³ Python 2.7 以é™ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚モジュールå´ã§ã¯ã€Python 3.5 以é™ã€Python 2.6 以é™ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:28 msgid "Python 3.5 was chosen as a minimum because it is the earliest Python 3 version adopted as the default Python by a Long Term Support (LTS) Linux distribution (in this case, Ubuntu-16.04). Previous LTS Linux distributions shipped with a Python 2 version which users can rely upon instead of the Python 3 version." msgstr "Python 3.5 ã¯ã€é•·æœŸã‚µãƒãƒ¼ãƒˆ (LTS: Long Term Support) ã® Linux ディストリビューション (ã“ã®å ´åˆã¯ Ubuntu-16.04) ã§ãƒ‡ãƒ•ォルト㮠Python ã¨ã—ã¦æŽ¡ç”¨ã•れã¦ã„る最もå¤ã„ Python 3 ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ãŸã‚ã€æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã—ã¦æŽ¡ç”¨ã•れã¾ã—ãŸã€‚以å‰ã® LTS Linux ディストリビューションã§ã¯ã€Python 3 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä»£ã‚りã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»£ã‚りã«ä½¿ç”¨ã§ãã‚‹ Python 2 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒåŒæ¢±ã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/developing_python_3.rst:33 msgid "For Python 2, the default is for modules to run on at least Python 2.6. This allows users with older distributions that are stuck on Python 2.6 to manage their machines. Modules are allowed to drop support for Python 2.6 when one of their dependent libraries requires a higher version of Python. This is not an invitation to add unnecessary dependent libraries in order to force your module to be usable only with a newer version of Python; instead it is an acknowledgment that some libraries (for instance, boto3 and docker-py) will only function with a newer version of Python." msgstr "Python 2 ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å°‘ãªãã¨ã‚‚ Python 2.6 ã§å‹•作ã™ã‚‹ã“ã¨ãŒãƒ‡ãƒ•ォルトã¨ãªã£ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Python 2.6 ã«å›ºåŸ·ã™ã‚‹å¤ã„ディストリビューションã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªåˆ†ã®ãƒžã‚·ãƒ³ã‚’管ç†ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚モジュールã¯ã€ä¾å­˜ã™ã‚‹ãƒ©ã‚¤ãƒ–ラリー㮠1 ã¤ãŒã‚ˆã‚Šé«˜ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆã¯ã€Python 2.6 ã®ã‚µãƒãƒ¼ãƒˆã‚’終了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€è‡ªä½œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã€ã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§ã—ã‹ä½¿ãˆãªã„よã†ã«ã™ã‚‹ãŸã‚ã«ã€ä¸è¦ãªä¾å­˜ãƒ©ã‚¤ãƒ–ラリーを追加ã™ã‚‹ã“ã¨ã‚’å‹§ã‚ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。代ã‚りã«ã€ã„ãã¤ã‹ã®ãƒ©ã‚¤ãƒ–ラリー (例ãˆã°ã€boto3 ã‚„ docker-py) ã¯ã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§ã—ã‹æ©Ÿèƒ½ã—ãªã„ã“ã¨ã‚’承èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:42 msgid "Python 2.4 Module-side Support:" msgstr "Python 2.4 モジュールã§ã®ã‚µãƒãƒ¼ãƒˆ:" #: ../../rst/dev_guide/developing_python_3.rst:44 msgid "Support for Python 2.4 and Python 2.5 was dropped in Ansible-2.4. RHEL-5 (and its rebuilds like CentOS-5) were supported until April of 2017. Ansible-2.3 was released in April of 2017 and was the last Ansible release to support Python 2.4 on the module-side." msgstr "Python 2.4 ãŠã‚ˆã³ Python 2.5 ã®ã‚µãƒãƒ¼ãƒˆã¯ Ansible-2.4 ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚RHEL-5 (ãŠã‚ˆã³ CentOS-5) 㯠2017 å¹´ 4 月ã¾ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã—ãŸã€‚Ansible-2.3 㯠2017 å¹´ 4 月ã«ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã—ãŸãŒã€ã“れãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚µã‚¤ãƒ‰ã® Python 2.4 をサãƒãƒ¼ãƒˆã™ã‚‹æœ€å¾Œã® Ansible リリースã§ã—ãŸã€‚" #: ../../rst/dev_guide/developing_python_3.rst:50 msgid "Developing Ansible code that supports Python 2 and Python 3" msgstr "Python 2 ãŠã‚ˆã³ Python 3 をサãƒãƒ¼ãƒˆã™ã‚‹ Ansible コードã®é–‹ç™º" #: ../../rst/dev_guide/developing_python_3.rst:52 msgid "The best place to start learning about writing code that supports both Python 2 and Python 3 is `Lennart Regebro's book: Porting to Python 3 `_. The book describes several strategies for porting to Python 3. The one we're using is `to support Python 2 and Python 3 from a single code base `_" msgstr "Python 2 㨠Python 3 ã®ä¸¡æ–¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®è¨˜è¿°ã«ã¤ã„ã¦å­¦ã³å§‹ã‚ã‚‹ã®ã«æœ€é©ãªã®ã¯ã€`Lennart Regebro ã®è‘—書: Porting to Python 3 `_ ã§ã™ã€‚本書ã§ã¯ã€Python 3 ã«ç§»æ¤ã™ã‚‹ãŸã‚ã®ã„ãã¤ã‹ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ãŒèª¬æ˜Žã•れã¦ã„ã¾ã™ã€‚Ansible ã§ä½¿ç”¨ã—ã¦ã„ã‚‹ã®ã¯ã€`å˜ä¸€ã®ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã‹ã‚‰ Python 2 ãŠã‚ˆã³ Python 3 をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ `_ ã§ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:59 msgid "Understanding strings in Python 2 and Python 3" msgstr "Python 2 ãŠã‚ˆã³ Python 3 ã®æ–‡å­—列をç†è§£" #: ../../rst/dev_guide/developing_python_3.rst:61 msgid "Python 2 and Python 3 handle strings differently, so when you write code that supports Python 3 you must decide what string model to use. Strings can be an array of bytes (like in C) or they can be an array of text. Text is what we think of as letters, digits, numbers, other printable symbols, and a small number of unprintable \"symbols\" (control codes)." msgstr "Python 2 㨠Python 3 ã§ã¯æ–‡å­—åˆ—ã®æ‰±ã„ãŒç•°ãªã‚‹ãŸã‚ã€Python 3 をサãƒãƒ¼ãƒˆã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹ã¨ãã¯ã€ã©ã®ã‚ˆã†ãªæ–‡å­—列モデルを使用ã™ã‚‹ã‹ã‚’決ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚文字列㯠(C 言語ã®ã‚ˆã†ã«) ãƒã‚¤ãƒˆã®é…列ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€ãƒ†ã‚­ã‚¹ãƒˆã®é…列ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã“ã§ã®ã€Œãƒ†ã‚­ã‚¹ãƒˆã€ã¨ã¯ã€æ–‡å­—ã€æ•°å­— (digit ã¾ãŸã¯ number)ã€ãã®ä»–ã®å°åˆ·å¯èƒ½ãªè¨˜å·ã€ãŠã‚ˆã³å°‘æ•°ã®å°åˆ·ä¸å¯èƒ½ãªã€Œè¨˜å·ã€(制御コード) ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:67 msgid "In Python 2, the two types for these (:class:`str ` for bytes and :func:`unicode ` for text) are often used interchangeably. When dealing only with ASCII characters, the strings can be combined, compared, and converted from one type to another automatically. When non-ASCII characters are introduced, Python 2 starts throwing exceptions due to not knowing what encoding the non-ASCII characters should be in." msgstr "Python 2 ã§ã¯ã€ã“れら㮠2 ã¤ã®ã‚¿ã‚¤ãƒ— (ãƒã‚¤ãƒˆå˜ä½ã®å ´åˆã¯ :class:`str `ã€ãƒ†ã‚­ã‚¹ãƒˆã®å ´åˆã¯ :func:`unicode `) ãŒã€ã—ã°ã—ã°åŒã˜æ„味ã§ä½¿ç”¨ã•れã¾ã™ã€‚ASCII 文字ã®ã¿ã‚’処ç†ã™ã‚‹å ´åˆã¯ã€æ–‡å­—列を組ã¿åˆã‚ã›ã¦æ¯”較ã—ã€ã‚るタイプã‹ã‚‰åˆ¥ã®ã‚¿ã‚¤ãƒ—ã«è‡ªå‹•çš„ã«å¤‰æ›ã§ãã¾ã™ã€‚éž ASCII 文字ãŒå°Žå…¥ã•れるã¨ã€Python 2 ã¯ã€éž ASCII 文字ãŒã©ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«å«ã¾ã‚Œã‚‹ã¹ãã‹ã‚ã‹ã‚‰ãªã„ãŸã‚ã«ä¾‹å¤–を出力ã—å§‹ã‚ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:74 msgid "Python 3 changes this behavior by making the separation between bytes (:class:`bytes `) and text (:class:`str `) more strict. Python 3 will throw an exception when trying to combine and compare the two types. The programmer has to explicitly convert from one type to the other to mix values from each." msgstr "Python 3 ã¯ã€ãƒã‚¤ãƒˆ (:class:`bytes `) ã¨ãƒ†ã‚­ã‚¹ãƒˆ (:class:`str `) を分離ã™ã‚‹ã“ã¨ã§ã“ã®å‹•作を変更ã—ã¾ã™ã€‚Python 3 㯠2 ã¤ã®ã‚¿ã‚¤ãƒ—ã®çµåˆã¨æ¯”較を試ã¿ã‚‹éš›ã«ä¾‹å¤–を出力ã•ã›ã¾ã™ã€‚プログラマーã¯ã€ã‚ã‚‹åž‹ã‹ã‚‰åˆ¥ã®åž‹ã«å¤‰æ›ã—ã€æ··åœ¨ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:79 msgid "In Python 3 it's immediately apparent to the programmer when code is mixing the byte and text types inappropriately, whereas in Python 2, code that mixes those types may work until a user causes an exception by entering non-ASCII input. Python 3 forces programmers to proactively define a strategy for working with strings in their program so that they don't mix text and byte strings unintentionally." msgstr "Python 3 ã§ã¯ã€ãƒ—ログラマーã¯ã€ã‚³ãƒ¼ãƒ‰ãŒãƒã‚¤ãƒˆåž‹ã¨ãƒ†ã‚­ã‚¹ãƒˆåž‹ã‚’ä¸é©åˆ‡ã«æ··åˆã—ã¦ã„ã‚‹ã“ã¨ãŒã™ãã«åˆ†ã‹ã‚Šã¾ã™ãŒã€Python 2 ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒéž ASCII 入力を入力ã—ã¦ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹ã¾ã§ã¯ã€ã“れらã®åž‹ã‚’æ··åˆã—ã¦ã„るコードãŒå‹•作ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。Python 3 ã§ã¯ã€ãƒ—ãƒ­ã‚°ãƒ©ãƒžãƒ¼ãŒæ„図ã›ãšã«ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã¨ãƒã‚¤ãƒˆæ–‡å­—列を混在ã•ã›ãªã„よã†ã«ã€ãƒ—ログラムã®ä¸­ã§æ–‡å­—列を扱ã†ãŸã‚ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’ç©æ¥µçš„ã«å®šç¾©ã™ã‚‹ã“ã¨ã‚’強制ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:85 msgid "Ansible uses different strategies for working with strings in controller-side code, in :ref: `modules `, and in :ref:`module_utils ` code." msgstr "Ansible ã¯ã€:ref:`modules ` コードãŠã‚ˆã³ :ref:`module_utils ` コードã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼å´ã®ã‚³ãƒ¼ãƒ‰ã§æ–‡å­—列をæ“作ã™ã‚‹ãŸã‚ã«ã•ã¾ã–ã¾ãªã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:91 msgid "Controller string strategy: the Unicode Sandwich" msgstr "コントローラー文字列ストラテジー: Unicode Sandwich" #: ../../rst/dev_guide/developing_python_3.rst:93 msgid "In controller-side code we use a strategy known as the Unicode Sandwich (named after Python 2's :func:`unicode ` text type). For Unicode Sandwich we know that at the border of our code and the outside world (for example, file and network IO, environment variables, and some library calls) we are going to receive bytes. We need to transform these bytes into text and use that throughout the internal portions of our code. When we have to send those strings back out to the outside world we first convert the text back into bytes. To visualize this, imagine a 'sandwich' consisting of a top and bottom layer of bytes, a layer of conversion between, and all text type in the center." msgstr "コントローラーå´ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€Unicode Sandwich ã¨å‘¼ã°ã‚Œã‚‹ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’使用ã—ã¾ã™ (åå‰ã¯ Python 2 ã® :func:`unicode ` テキストタイプã«ç”±æ¥ã—ã¾ã™)。Unicode Sandwich ã®å ´åˆã¯ã€ã‚³ãƒ¼ãƒ‰ã¨å¤–部ã®å¢ƒç•Œ (ファイルやãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® IOã€ç’°å¢ƒå¤‰æ•°ã€ãƒ©ã‚¤ãƒ–ラリーã®å‘¼ã³å‡ºã—ãªã©) ã§ãƒã‚¤ãƒˆã‚’å—ä¿¡ã™ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚ã“れらã®ãƒã‚¤ãƒˆã‚’テキストã«å¤‰æ›ã—ã€ã‚³ãƒ¼ãƒ‰ã®å†…部全体ã§ã“れを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ–‡å­—列を外部ã«è¿”ã™å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€æœ€åˆã«ãƒ†ã‚­ã‚¹ãƒˆã‚’ãƒã‚¤ãƒˆã«å¤‰æ›ã—ã¾ã™ã€‚ã“れã¯ã€ä¸Šä¸‹ã«ãƒã‚¤ãƒˆã®å±¤ã€ãã®é–“ã«å¤‰æ›ã®å±¤ã€ãã®ä¸­å¤®ã«ã‚ã‚‹ã™ã¹ã¦ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¿ã‚¤ãƒ—ã‹ã‚‰ãªã‚‹ã€Œã‚µãƒ³ãƒ‰ã‚¤ãƒƒãƒã€ã‚’想åƒã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:104 msgid "Unicode Sandwich common borders: places to convert bytes to text in controller code" msgstr "Unicode Sandwich ã®å…±é€šã®å¢ƒç•Œ: コントローラーコードã®ãƒ†ã‚­ã‚¹ãƒˆã«ãƒã‚¤ãƒˆã‚’変æ›ã™ã‚‹å ´æ‰€" #: ../../rst/dev_guide/developing_python_3.rst:106 msgid "This is a partial list of places where we have to convert to and from bytes when using the Unicode Sandwich string strategy. It's not exhaustive but it gives you an idea of where to watch for problems." msgstr "ã“れã¯ã€Unicode Sandwich 文字列ストラテジーã®ä½¿ç”¨æ™‚ã«ã€ãƒã‚¤ãƒˆã¸ã€ã¾ãŸã¯ãƒã‚¤ãƒˆã‹ã‚‰å¤‰æ›ã™ã‚‹å ´æ‰€ã®éƒ¨åˆ†çš„ãªãƒªã‚¹ãƒˆã§ã™ã€‚網羅的ã§ã¯ã‚りã¾ã›ã‚“ãŒã€å•題を監視ã™ã‚‹å ´æ‰€ãŒã‚ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:111 msgid "Reading and writing to files" msgstr "ファイルã®èª­ã¿å–りãŠã‚ˆã³æ›¸ãè¾¼ã¿" #: ../../rst/dev_guide/developing_python_3.rst:113 msgid "In Python 2, reading from files yields bytes. In Python 3, it can yield text. To make code that's portable to both we don't make use of Python 3's ability to yield text but instead do the conversion explicitly ourselves. For example:" msgstr "Python 2 ã§ã¯ã€ãƒ•ァイルã‹ã‚‰èª­ã¿å–ã‚‹ã¨ãƒã‚¤ãƒˆãŒç”Ÿæˆã•れã¾ã™ã€‚Python 3 ã§ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’生æˆã§ãã¾ã™ã€‚両方ã«ç§»æ¤å¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹ãŸã‚ã«ã€Python 3 ã®ãƒ†ã‚­ã‚¹ãƒˆç”Ÿæˆæ©Ÿèƒ½ã‚’利用ã›ãšã€ä»£ã‚りã«è‡ªèº«ã§æ˜Žç¤ºçš„ã«å¤‰æ›ã‚’行ã„ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:131 msgid "Much of Ansible assumes that all encoded text is UTF-8. At some point, if there is demand for other encodings we may change that, but for now it is safe to assume that bytes are UTF-8." msgstr "Ansible ã®å¤šãã¯ã€ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れãŸãƒ†ã‚­ã‚¹ãƒˆãŒã™ã¹ã¦ UTF-8 ã§ã‚ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚å°†æ¥å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ç¾æ™‚点ã§ã¯ã€ãƒã‚¤ãƒˆãŒ UTF-8 ã§ã‚ã‚‹ã¨è€ƒãˆã¦å•題ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_python_3.rst:135 msgid "Writing to files is the opposite process:" msgstr "ファイルã¸ã®æ›¸ãè¾¼ã¿ã¯ã€ãã®é€†ã®å‡¦ç†ã§ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:144 msgid "Note that we don't have to catch :exc:`UnicodeError` here because we're transforming to UTF-8 and all text strings in Python can be transformed back to UTF-8." msgstr "UTF-8 ã«å¤‰æ›ã—ã¦ã„ã¦ã€Python ã®ãƒ†ã‚¹ãƒˆæ–‡å­—列ãŒã™ã¹ã¦ UTF-8 ã«æˆ»ã•れるãŸã‚ã€ã“ã“ã§ :exc:`UnicodeError` ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:149 msgid "Filesystem interaction" msgstr "ファイルシステムã®ç›¸äº’作用" #: ../../rst/dev_guide/developing_python_3.rst:151 msgid "Dealing with filenames often involves dropping back to bytes because on UNIX-like systems filenames are bytes. On Python 2, if we pass a text string to these functions, the text string will be converted to a byte string inside of the function and a traceback will occur if non-ASCII characters are present. In Python 3, a traceback will only occur if the text string can't be decoded in the current locale, but it's still good to be explicit and have code which works on both versions:" msgstr "UNIX 系システムã§ã¯ãƒ•ァイルåã¯ãƒã‚¤ãƒˆã§ã‚ã‚‹ãŸã‚ã€ãƒ•ァイルåを扱ã†éš›ã«ã¯ã—ã°ã—ã°ãƒã‚¤ãƒˆã«æˆ»ã™ã“ã¨ã«ãªã‚Šã¾ã™ã€‚Python 2 ã§ã¯ã€ã“れらã®é–¢æ•°ã«ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列を渡ã™ã¨ã€ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã¯é–¢æ•°å†…ã§ãƒã‚¤ãƒˆæ–‡å­—列ã«å¤‰æ›ã•れã€éž ASCII 文字ãŒå­˜åœ¨ã™ã‚‹å ´åˆã«ã¯ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ã¾ã™ã€‚Python 3 ã§ã¯ã€ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ã¯ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ãŒç¾åœ¨ã®ãƒ­ã‚±ãƒ¼ãƒ«ã§ãƒ‡ã‚³ãƒ¼ãƒ‰ã§ããªã„å ´åˆã«ã®ã¿ç™ºç”Ÿã—ã¾ã™ãŒã€æ˜Žç¤ºçš„ã«ä¸¡æ–¹ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‹•作ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’用æ„ã—ã¦ãŠãã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:172 msgid "When you are only manipulating a filename as a string without talking to the filesystem (or a C library which talks to the filesystem) you can often get away without converting to bytes:" msgstr "ファイルシステム (ã¾ãŸã¯ãƒ•ァイルシステムã¨é€šä¿¡ã™ã‚‹ C ライブラリー) ã¨é€šä¿¡ã›ãšã«ãƒ•ァイルåを文字列ã¨ã—ã¦æ“作ã™ã‚‹ã ã‘ã®å ´åˆã¯ã€ãƒã‚¤ãƒˆã«å¤‰æ›ã™ã‚‹å¿…è¦ãŒãªã„ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:183 msgid "On the other hand, if the code needs to manipulate the filename and also talk to the filesystem, it can be more convenient to transform to bytes right away and manipulate in bytes." msgstr "一方ã€ã‚³ãƒ¼ãƒ‰ãŒãƒ•ァイルåã‚’æ“作ã—ã€ãƒ•ァイルシステムã¨ã‚„りã¨ã‚Šã™ã‚‹å ´åˆã¯ã€ã™ãã«ãƒã‚¤ãƒˆãƒã‚¤ãƒˆã«å¤‰æ›ã—ã¦é¡Œã¨å˜ä½ã§æ“作ã™ã‚‹æ–¹ãŒä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:187 msgid "Make sure all variables passed to a function are the same type. If you're working with something like :func:`python3:os.path.join` which takes multiple strings and uses them in combination, you need to make sure that all the types are the same (either all bytes or all text). Mixing bytes and text will cause tracebacks." msgstr "é–¢æ•°ã«æ¸¡ã•れるã™ã¹ã¦ã®å¤‰æ•°ãŒåŒã˜ã‚¿ã‚¤ãƒ—ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚:func:`python3:os.path.join` ã®ã‚ˆã†ã«ã€è¤‡æ•°ã®æ–‡å­—列をå–å¾—ã—ã€ã“れらã®å¤‰æ•°ã‚’組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ãŒåŒã˜ (ã™ã¹ã¦ã®ãƒã‚¤ãƒˆã¾ãŸã¯ã™ã¹ã¦ã®ãƒ†ã‚­ã‚¹ãƒˆã®ã„ãšã‚Œã‹) ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒã‚¤ãƒˆã¨ãƒ†ã‚­ã‚¹ãƒˆã‚’混在ã•ã›ã‚‹ã¨ã€ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:194 msgid "Interacting with other programs" msgstr "ä»–ã®ãƒ—ログラムã¨ã®ç›¸äº’作用" #: ../../rst/dev_guide/developing_python_3.rst:196 msgid "Interacting with other programs goes through the operating system and C libraries and operates on things that the UNIX kernel defines. These interfaces are all byte-oriented so the Python interface is byte oriented as well. On both Python 2 and Python 3, byte strings should be given to Python's subprocess library and byte strings should be expected back from it." msgstr "ä»–ã®ãƒ—ログラムã¨ã®å¯¾è©±ã¯ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã¨ C ライブラリーを経由ã—ã¦ã€UNIX カーãƒãƒ«ãŒå®šç¾©ã™ã‚‹ã‚‚ã®ã‚’æ“作ã—ã¾ã™ã€‚ã“れらã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã¯ã™ã¹ã¦ãƒã‚¤ãƒˆæŒ‡å‘ã§ã‚ã‚‹ãŸã‚ã€Python インターフェースもãƒã‚¤ãƒˆæŒ‡å‘ã§ã™ã€‚Python 2 㨠Python3 ã®ä¸¡æ–¹ã§ã€ãƒã‚¤ãƒˆæ–‡å­—列㯠Python ã®ã‚µãƒ–ãƒ—ãƒ­ã‚»ã‚¹ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãƒ¼ã«æ¸¡ã•れã€ãƒã‚¤ãƒˆæ–‡å­—列ã¯ãã“ã‹ã‚‰è¿”ã•れるã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:202 msgid "One of the main places in Ansible's controller code that we interact with other programs is the connection plugins' ``exec_command`` methods. These methods transform any text strings they receive in the command (and arguments to the command) to execute into bytes and return stdout and stderr as byte strings Higher level functions (like action plugins' ``_low_level_execute_command``) transform the output into text strings." msgstr "Ansible ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã§ä»–ã®ãƒ—ログラムã¨ã‚„りå–りã™ã‚‹ä¸»ãªå ´æ‰€ã® 1 ã¤ã¯ã€connection プラグイン㮠``exec_command`` メソッドã§ã™ã€‚ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã§å—ã‘å–ã£ãŸãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列 (ãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ã¸ã®å¼•æ•°) ã‚’ãƒã‚¤ãƒˆã«å¤‰æ›ã—ã€stdout 㨠stderr ã‚’ãƒã‚¤ãƒˆæ–‡å­—列ã¨ã—ã¦è¿”ã—ã¾ã™ã€‚(アクションプラグイン㮠``_low_level_execute_command`` ã®ã‚ˆã†ã«) 高レベルã®é–¢æ•°å‡ºåŠ›ã‚’ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—åˆ—ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:212 msgid "Module string strategy: Native String" msgstr "モジュール文字列ストラテジー: ãƒã‚¤ãƒ†ã‚£ãƒ–文字列" #: ../../rst/dev_guide/developing_python_3.rst:214 msgid "In modules we use a strategy known as Native Strings. This makes things easier on the community members who maintain so many of Ansible's modules, by not breaking backwards compatibility by mandating that all strings inside of modules are text and converting between text and bytes at the borders." msgstr "モジュールã§ã¯ã€ãƒã‚¤ãƒ†ã‚£ãƒ–文字列ã¨å‘¼ã°ã‚Œã‚‹ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’採用ã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Ansible ã®å¤šãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä¿å®ˆã—ã¦ã„るコミュニティーメンãƒãƒ¼ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®æ–‡å­—列ãŒãƒ†ã‚­ã‚¹ãƒˆã§ã‚ã‚‹ã“ã¨ã‚’義務付ã‘ãŸã‚Šã€å¢ƒç•Œã§ãƒ†ã‚­ã‚¹ãƒˆã¨ãƒã‚¤ãƒˆã®é–“を変æ›ã—ãŸã‚Šã™ã‚‹ã“ã¨ã§ã€å¾Œæ–¹äº’æ›æ€§ã‚’壊ã•ãªã„よã†ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:220 msgid "Native strings refer to the type that Python uses when you specify a bare string literal:" msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–文字列ã¯ã€è£¸ã®æ–‡å­—列リテラルを指定ã™ã‚‹ã¨ãã« Python ãŒä½¿ç”¨ã™ã‚‹ã‚¿ã‚¤ãƒ—ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:227 msgid "In Python 2, these are byte strings. In Python 3 these are text strings. Modules should be coded to expect bytes on Python 2 and text on Python 3." msgstr "Python 2 ã§ã¯ã€ã“れらã¯ãƒã‚¤ãƒˆæ–‡å­—列ã§ã™ã€‚Python 3 ã§ã¯ã€ã“れらã¯ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã§ã™ã€‚Python 2 ã§ã¯ãƒã‚¤ãƒˆã€ãŠã‚ˆã³ Python 3 ã§ã¯ãƒ†ã‚­ã‚¹ãƒˆã‚’期待ã™ã‚‹ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰åŒ–ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:233 msgid "Module_utils string strategy: hybrid" msgstr "Module_utils 文字列ストラテジー: ãƒã‚¤ãƒ–リッド" #: ../../rst/dev_guide/developing_python_3.rst:235 msgid "In ``module_utils`` code we use a hybrid string strategy. Although Ansible's ``module_utils`` code is largely like module code, some pieces of it are used by the controller as well. So it needs to be compatible with modules and with the controller's assumptions, particularly the string strategy. The module_utils code attempts to accept native strings as input to its functions and emit native strings as their output." msgstr "``module_utils`` コードã§ã¯ã€ãƒã‚¤ãƒ–ãƒªãƒƒãƒ‰ãªæ–‡å­—列ストラテジーを採用ã—ã¾ã™ã€‚Ansible ã® ``module_utils`` コードã¯ã€å¤§éƒ¨åˆ†ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ãŒã€ãã®ä¸€éƒ¨ã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã‚‚使用ã•れã¾ã™ã€‚ãã®ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„コントローラã®å‰ææ¡ä»¶ã¨ã®äº’æ›æ€§ã€ç‰¹ã«æ–‡å­—列ストラテジーã¨ã®äº’æ›æ€§ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚module_utils コードã¯ã€ãã®é–¢æ•°ã¸ã®å…¥åŠ›ã¨ã—ã¦ãƒã‚¤ãƒ†ã‚£ãƒ–文字列をå—ã‘入れã€ãã®å‡ºåŠ›ã¨ã—ã¦ãƒã‚¤ãƒ†ã‚£ãƒ–文字列を出力ã—よã†ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:242 msgid "In ``module_utils`` code:" msgstr "``module_utils`` コードã®å ´åˆ:" #: ../../rst/dev_guide/developing_python_3.rst:244 msgid "Functions **must** accept string parameters as either text strings or byte strings." msgstr "関数ã¯ã€æ–‡å­—列パラメーターをテキスト文字列ã¾ãŸã¯ãƒã‚¤ãƒˆæ–‡å­—列ã®ã„ãšã‚Œã‹ã§ä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ **å¿…è¦ãŒã‚りã¾ã™**。" #: ../../rst/dev_guide/developing_python_3.rst:245 msgid "Functions may return either the same type of string as they were given or the native string type for the Python version they are run on." msgstr "関数ã¯ã€æä¾›ã•ã‚ŒãŸæ–‡å­—列ã¨åŒã˜ã‚¿ã‚¤ãƒ—ã®æ–‡å­—列を返ã™ã‹ã€å®Ÿè¡Œã—ã¦ã„ã‚‹ Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆã‚ã›ãŸãƒã‚¤ãƒ†ã‚£ãƒ–ã®æ–‡å­—列型を返ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:246 msgid "Functions that return strings **must** document whether they return strings of the same type as they were given or native strings." msgstr "文字列を返ã™é–¢æ•°ã¯ã€æŒ‡å®šã®æ–‡å­—列ã¨åŒã˜åž‹ã®æ–‡å­—列を返ã™ã®ã‹ã€ãƒã‚¤ãƒ†ã‚£ãƒ–ã®æ–‡å­—列を返ã™ã®ã‹ã‚’文書化ã™ã‚‹ **å¿…è¦ãŒã‚りã¾ã™**。" #: ../../rst/dev_guide/developing_python_3.rst:248 msgid "Module-utils functions are therefore often very defensive in nature. They convert their string parameters into text (using ``ansible.module_utils.common.text.converters.to_text``) at the beginning of the function, do their work, and then convert the return values into the native string type (using ``ansible.module_utils.common.text.converters.to_native``) or back to the string type that their parameters received." msgstr "ã—ãŸãŒã£ã¦ã€module_utils 関数ã¯ã€æœ¬è³ªçš„ã«éžå¸¸ã«é˜²å¾¡çš„ã§ã‚ã‚‹ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚ã“ã®é–¢æ•°ã¯ã€é–¢æ•°ã®å…ˆé ­ã§ (``ansible.module_utils.common.text.converters.to_text`` を使用ã—ã¦) 文字列パラメーターをテキストã«å¤‰æ›ã—ã€ä½œæ¥­ã‚’行ã„ã€(``ansible.module_utils.common.text.converters.to_native`` を使用ã—ã¦) 戻り値をãƒã‚¤ãƒ†ã‚£ãƒ–ã®æ–‡å­—列型ã«å¤‰æ›ã—ã¾ã™ã€‚ã¾ãŸã¯ã€ãƒ‘ラメーターãŒå—ã‘å–ã£ãŸæ–‡å­—åˆ—åž‹ã«æˆ»ã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:255 msgid "Tips, tricks, and idioms for Python 2/Python 3 compatibility" msgstr "Python 2/Python 3 互æ›ã®ãŸã‚ã®ãƒ’ントã€ãƒˆãƒªãƒƒã‚¯ã€ãŠã‚ˆã³ã‚¤ãƒ‡ã‚£ã‚ªãƒ " #: ../../rst/dev_guide/developing_python_3.rst:258 msgid "Use forward-compatibility boilerplate" msgstr "剿–¹äº’æ›æ€§ã®ã‚ã‚‹ boilerplate ã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_python_3.rst:260 msgid "Use the following boilerplate code at the top of all python files to make certain constructs act the same way on Python 2 and Python 3:" msgstr "Python 2 㨠Python 3 ã§ç‰¹å®šã®æ§‹æˆè¦ç´ ãŒåŒã˜ã‚ˆã†ã«å‹•作ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ãŸã‚ã«ã€ã™ã¹ã¦ã® python ファイルã®å…ˆé ­ã«ä»¥ä¸‹ã® boilerplate コードを使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:269 msgid "``__metaclass__ = type`` makes all classes defined in the file into new-style classes without explicitly inheriting from :class:`object `." msgstr "``__metaclass__ = type`` ã¯ã€ãƒ•ァイルã§å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã‚’ :class:`object ` ã‹ã‚‰æ˜Žç¤ºçš„ã«ç¶™æ‰¿ã™ã‚‹ã“ã¨ãªãã€æ–°ã—ã„スタイルã®ã‚¯ãƒ©ã‚¹ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:272 msgid "The ``__future__`` imports do the following:" msgstr "``__future__`` ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:16 msgid "absolute_import" msgstr "absolute_import" #: ../../rst/dev_guide/developing_python_3.rst:274 msgid "Makes imports look in :data:`sys.path ` for the modules being imported, skipping the directory in which the module doing the importing lives. If the code wants to use the directory in which the module doing the importing, there's a new dot notation to do so." msgstr "インãƒãƒ¼ãƒˆã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れるモジュール㮠:data:`sys.path ` を検索ã—ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’行ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå­˜åœ¨ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’スキップã—ã¾ã™ã€‚インãƒãƒ¼ãƒˆã‚’行ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå­˜åœ¨ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’コードãŒä½¿ç”¨ã—ãŸã„å ´åˆã¯ã€æ–°ã—ã„ドット表記ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:31 msgid "division" msgstr "division" #: ../../rst/dev_guide/developing_python_3.rst:278 msgid "Makes division of integers always return a float. If you need to find the quotient use ``x // y`` instead of ``x / y``." msgstr "æ•´æ•°ã®é™¤ç®—ãŒå¸¸ã«æµ®å‹•å°æ•°ç‚¹ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚商を見ã¤ã‘ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``x / y`` ã®ä»£ã‚り㫠``x // y`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:43 msgid "print_function" msgstr "print_function" #: ../../rst/dev_guide/developing_python_3.rst:280 msgid "Changes :func:`print ` from a keyword into a function." msgstr "キーワードã‹ã‚‰é–¢æ•°ã¸ã® :func:`print ` ã®å¤‰æ›´" #: ../../rst/dev_guide/developing_python_3.rst:283 msgid "`PEP 0328: Absolute Imports `_" msgstr "`PEP 0328: Absolute Imports `_" #: ../../rst/dev_guide/developing_python_3.rst:284 msgid "`PEP 0238: Division `_" msgstr "`PEP 0238: Division `_" #: ../../rst/dev_guide/developing_python_3.rst:285 msgid "`PEP 3105: Print function `_" msgstr "`PEP 3105: Print function `_" #: ../../rst/dev_guide/developing_python_3.rst:288 msgid "Prefix byte strings with ``b_``" msgstr "ãƒã‚¤ãƒˆæ–‡å­—列ã®ãƒ—レフィックス: ``b_``" #: ../../rst/dev_guide/developing_python_3.rst:290 msgid "Since mixing text and bytes types leads to tracebacks we want to be clear about what variables hold text and what variables hold bytes. We do this by prefixing any variable holding bytes with ``b_``. For instance:" msgstr "テキスト型ã¨ãƒã‚¤ãƒˆåž‹ãŒæ··åœ¨ã™ã‚‹ã¨ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ãŒç™ºç”Ÿã™ã‚‹ãŸã‚ã€ã©ã®å¤‰æ•°ãŒãƒ†ã‚­ã‚¹ãƒˆã‚’ä¿æŒã—ã¦ã„ã¦ã€ã©ã®å¤‰æ•°ãŒãƒã‚¤ãƒˆã‚’ä¿æŒã—ã¦ã„ã‚‹ã‹ã‚’明確ã«ã—ã¾ã™ã€‚ã“れã¯ã€ãƒã‚¤ãƒˆã‚’ä¿æŒã™ã‚‹å¤‰æ•°ã«ã¯ã€``b_`` をプレフィックスã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:301 msgid "We do not prefix the text strings instead because we only operate on byte strings at the borders, so there are fewer variables that need bytes than text." msgstr "代ã‚りã«ã€ãƒœãƒ¼ãƒ€ãƒ¼ã®ãƒã‚¤ãƒˆæ–‡å­—列ã§ã®ã¿å‹•作ã™ã‚‹ãŸã‚テキスト文字列ã¯ãƒ—レフィックスã¨ã—ã¦ä»˜ã‘られã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã®å‰ã«ãƒã‚¤ãƒˆå€¤ãŒå¿…è¦ãªå¤‰æ•°ãŒå°‘ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:306 msgid "Import Ansible's bundled Python ``six`` library" msgstr "Ansible ã®ãƒãƒ³ãƒ‰ãƒ«ã•れ㟠Python ``six`` ライブラリーをインãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/developing_python_3.rst:308 msgid "The third-party Python `six `_ library exists to help projects create code that runs on both Python 2 and Python 3. Ansible includes a version of the library in module_utils so that other modules can use it without requiring that it is installed on the remote system. To make use of it, import it like this:" msgstr "サードパーティー㮠Python `six `_ ライブラリーã¯ã€ãƒ—ロジェクト㌠Python 2 ãŠã‚ˆã³ Python 3 ã®ä¸¡æ–¹ã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚Ansible ã«ã¯ã€module_utils ã«ãƒ©ã‚¤ãƒ–ラリーã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå«ã¾ã‚Œã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãªãã¦ã‚‚使用å¯èƒ½ã¨ãªã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“れを使用ã—ã¦ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:318 msgid "Ansible can also use a system copy of six" msgstr "Ansible ã¯ã€six ã®ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ”ーを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:320 msgid "Ansible will use a system copy of six if the system copy is a later version than the one Ansible bundles." msgstr "Ansible ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ”ーãŒã€Ansible ãŒãƒãƒ³ãƒ‰ãƒ«ã—ã¦ã„ã‚‹ã‚‚ã®ã‚ˆã‚Šã‚‚後ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚‚ã®ã§ã‚れã°ã€six ã®ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ”ーを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:324 msgid "Handle exceptions with ``as``" msgstr "``as`` ã§ä¾‹å¤–を処ç†ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:326 msgid "In order for code to function on Python 2.6+ and Python 3, use the new exception-catching syntax which uses the ``as`` keyword:" msgstr "Python 2.6 以é™ãŠã‚ˆã³ Python 3 ã§ã‚³ãƒ¼ãƒ‰ãŒæ©Ÿèƒ½ã™ã‚‹ã«ã¯ã€``as`` キーワードを使用ã™ã‚‹æ–°ã—ã„ä¾‹å¤–ã‚­ãƒ£ãƒƒãƒæ§‹æ–‡ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:336 msgid "Do **not** use the following syntax as it will fail on every version of Python 3:" msgstr "ä»¥ä¸‹ã®æ§‹æ–‡ã¯ã€Python 3 ã®ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å¤±æ•—ã™ã‚‹ãŸã‚ã€**使用ã—ãªã„ã§ãã ã•ã„**。" #: ../../rst/dev_guide/developing_python_3.rst:347 msgid "Update octal numbers" msgstr "8 é€²æ•°ã®æ›´æ–°" #: ../../rst/dev_guide/developing_python_3.rst:349 msgid "In Python 2.x, octal literals could be specified as ``0755``. In Python 3, octals must be specified as ``0o755``." msgstr "Python 2.x ã§ã¯ã€8 進数リテラル㯠``0755`` ã¨æŒ‡å®šã§ãã¾ã—ãŸã€‚Python 3 ã§ã¯ã€8 進数㯠``0o755`` ã¨æŒ‡å®šã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/developing_python_3.rst:353 msgid "String formatting for controller code" msgstr "ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã®æ–‡å­—列形å¼" #: ../../rst/dev_guide/developing_python_3.rst:356 msgid "Use ``str.format()`` for Python 2.6 compatibility" msgstr "Python 2.6 ã®äº’æ›æ€§ã®ãŸã‚ã« ``str.format()`` ã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_python_3.rst:358 msgid "Starting in Python 2.6, strings gained a method called ``format()`` to put strings together. However, one commonly used feature of ``format()`` wasn't added until Python 2.7, so you need to remember not to use it in Ansible code:" msgstr "Python 2.6 以é™ã€æ–‡å­—列ã«ã¯ã€æ–‡å­—列をã¾ã¨ã‚ã‚‹ ``format()`` ã¨ã„ã†åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ãŸã ã—ã€``format()`` ã«ä¸€èˆ¬çš„ã«ä½¿ç”¨ã•れる機能㮠1 ã¤ã¯ Python 2.7 ã¾ã§è¿½åŠ ã•れãªã‹ã£ãŸãŸã‚ã€Ansible コードã§ä½¿ç”¨ã—ãªã„よã†ã«æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:370 msgid "Both of the format strings above map positional arguments of the ``format()`` method into the string. However, the first version doesn't work in Python 2.6. Always remember to put numbers into the placeholders so the code is compatible with Python 2.6." msgstr "上記ã®ä¸¡æ–¹ã®å½¢å¼æ–‡å­—列ã§ã¯ã€``format()`` メソッドã®ä½ç½®å¼•数を文字列ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ãŒã€æœ€åˆã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ Python 2.6 ã§ã¯å‹•作ã—ã¾ã›ã‚“ã€‚å¸¸ã«æ•°å­—をプレースホルダーã«ç½®ãã€ã‚³ãƒ¼ãƒ‰ãŒ Python 2.6 ã¨äº’æ›æ€§ã‚’æŒã¤ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:376 msgid "Python documentation on format strings:" msgstr "フォーマット文字列ã«é–¢ã™ã‚‹Pythonã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼š" #: ../../rst/dev_guide/developing_python_3.rst:378 msgid "`format strings in 2.6 `_" msgstr "`format strings in 2.6 `_" #: ../../rst/dev_guide/developing_python_3.rst:379 msgid "`format strings in 3.x `_" msgstr "`format strings in 3.x `_" #: ../../rst/dev_guide/developing_python_3.rst:382 msgid "Use percent format with byte strings" msgstr "ãƒã‚¤ãƒˆæ–‡å­—列ã§ã®ãƒ‘ーセント書å¼ã®ä½¿ç”¨" #: ../../rst/dev_guide/developing_python_3.rst:384 msgid "In Python 3.x, byte strings do not have a ``format()`` method. However, it does have support for the older, percent-formatting." msgstr "Python 3.x ã§ã¯ã€ãƒã‚¤ãƒˆæ–‡å­—列㫠``format()`` メソッドãŒã‚りã¾ã›ã‚“ãŒã€ä»¥å‰ã®ãƒ‘ーセント形å¼ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_python_3.rst:391 msgid "Percent formatting added in Python 3.5" msgstr "Python 3.5 ã«è¿½åŠ ã•れãŸãƒ‘ーセント書å¼" #: ../../rst/dev_guide/developing_python_3.rst:393 msgid "Percent formatting of byte strings was added back into Python 3 in 3.5. This isn't a problem for us because Python 3.5 is our minimum version. However, if you happen to be testing Ansible code with Python 3.4 or earlier, you will find that the byte string formatting here won't work. Upgrade to Python 3.5 to test." msgstr "Python 3 ã§ã¯ã€Python 3.5 ã«ã€ãƒã‚¤ãƒˆæ–‡å­—列ã®ãƒ‘ーセント書å¼ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚Python 3.5 ã¯æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ãŸã‚ã€ã“れã¯å•題ã§ã¯ã‚りã¾ã›ã‚“。ãŸã ã—ã€Python 3.4 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ Ansible ã®ã‚³ãƒ¼ãƒ‰ã‚’テストã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã“ã§ã®ãƒã‚¤ãƒˆæ–‡å­—åˆ—ã®æ›¸å¼è¨­å®šãŒé©åˆ‡ã«å‡¦ç†ã•れãªã„ã“ã¨ãŒã‚りã¾ã™ã€‚ãã®å ´åˆã¯ã€Python 3.5 ã«ã‚¢ãƒƒãƒ—グレードã—ã¦ãƒ†ã‚¹ãƒˆã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_python_3.rst:400 msgid "Python documentation on `percent formatting `_" msgstr "`percent formatting `_ ã«é–¢ã™ã‚‹ Python ドキュメント" #: ../../rst/dev_guide/developing_python_3.rst:405 msgid "Testing modules on Python 3" msgstr "Python 3 ã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/developing_python_3.rst:407 msgid "Ansible modules are slightly harder to code to support Python 3 than normal code from other projects. A lot of mocking has to go into unit testing an Ansible module, so it's harder to test that your changes have fixed everything or to to make sure that later commits haven't regressed the Python 3 support. Review our :ref:`testing ` pages for more information." msgstr "Ansible モジュールã¯ã€ãã®ä»–ã®ãƒ—ロジェクトã®é€šå¸¸ã®ã‚³ãƒ¼ãƒ‰ã‚ˆã‚Šã‚‚ Python 3 をサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹ã®ãŒè‹¥å¹²é›£ã—ããªã‚Šã¾ã™ã€‚多ãã®ãƒ¢ãƒƒã‚¯ã¯ã€Ansible モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã«å…¥ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€å¤‰æ›´ã«ã‚ˆã£ã¦ã™ã¹ã¦ãŒä¿®æ­£ã•れãŸã“ã¨ã‚’テストã™ã‚‹ã‹ã€å¾Œã®ã‚³ãƒŸãƒƒãƒˆãŒ Python 3 をサãƒãƒ¼ãƒˆã—ãªã„よã†ã«ã™ã‚‹æ–¹ãŒå›°é›£ã«ãªã‚Šã¾ã™ã€‚詳細ã¯ã€:ref:`テスト ` ページをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/developing_rebasing.rst:5 msgid "Rebasing a pull request" msgstr "ãƒ—ãƒ«è¦æ±‚ã®ãƒªãƒ™ãƒ¼ã‚¹" #: ../../rst/dev_guide/developing_rebasing.rst:7 msgid "You may find that your pull request (PR) is out-of-date and needs to be rebased. This can happen for several reasons:" msgstr "ãƒ—ãƒ«è¦æ±‚ (PR) ãŒå¤ã„ãŸã‚ã€ãƒªãƒ™ãƒ¼ã‚¹ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“れã«ã¯ã„ãã¤ã‹ã®ç†ç”±ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:9 msgid "Files modified in your PR are in conflict with changes which have already been merged." msgstr "発行ã™ã‚‹ PR ã§å¤‰æ›´ã•れãŸãƒ•ァイルã¯ã€ã™ã§ã«ãƒžãƒ¼ã‚¸ã•れã¦ã„る変更ã¨ç«¶åˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:10 msgid "Your PR is old enough that significant changes to automated test infrastructure have occurred." msgstr "発行ã™ã‚‹ PR ã¯ã€è‡ªå‹•化ã•れãŸãƒ†ã‚¹ãƒˆã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã«å¤§å¹…ãªå¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã‚‹ã»ã©å¤ã„ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:12 msgid "Rebasing the branch used to create your PR will resolve both of these issues." msgstr "PR を作æˆã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ãƒ–ランãƒã‚’å†è¨­å®šã™ã‚‹ã¨ã€ã“ã®ä¸¡æ–¹ã®å•題ãŒè§£æ±ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:15 msgid "Configuring your remotes" msgstr "リモートã®è¨­å®š" #: ../../rst/dev_guide/developing_rebasing.rst:17 msgid "Before you can rebase your PR, you need to make sure you have the proper remotes configured. These instructions apply to any repository on GitHub, including collections repositories. On other platforms (bitbucket, gitlab), the same principles and commands apply but the syntax may be different. We use the ansible/ansible repository here as an example. In other repositories, the branch names may be different. Assuming you cloned your fork in the usual fashion, the ``origin`` remote will point to your fork::" msgstr "PR をリベースã™ã‚‹å‰ã«ã€é©åˆ‡ãªãƒªãƒ¢ãƒ¼ãƒˆãŒè¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®æ‰‹é †ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’å«ã‚€ GitHub ã®ã™ã¹ã¦ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«é©ç”¨ã•れã¾ã™ã€‚ä»–ã®ãƒ—ラットフォーム (bitbucket ã‚„ gitlab) ã§ã‚‚åŒæ§˜ã®åŽŸå‰‡ã¨ã‚³ãƒžãƒ³ãƒ‰ãŒé©ç”¨ã•れã¾ã™ãŒã€æ§‹æ–‡ãŒç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“ã“ã§ã¯ã€ansible/ansible ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’ä¾‹ã«æŒ™ã’ã¦ã„ã¾ã™ã€‚ä»–ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ã¯ã€ãƒ–ランãƒåãŒç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚é€šå¸¸ã®æ–¹æ³•ã§ãƒ•ォークをクローンã—ãŸã¨ä»®å®šã™ã‚‹ã¨ã€``origin`` ã®ãƒªãƒ¢ãƒ¼ãƒˆã¯æ“作ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ•ォークを指ã™ã“ã¨ã«ãªã‚Šã¾ã™::" #: ../../rst/dev_guide/developing_rebasing.rst:23 msgid "However, you also need to add a remote which points to the upstream repository::" msgstr "ãŸã ã—ã€ã‚¢ãƒƒãƒ—ストリームã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’å‚ç…§ã™ã‚‹ãƒªãƒ¢ãƒ¼ãƒˆã‚’追加ã™ã‚‹å¿…è¦ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:27 msgid "Which should leave you with the following remotes::" msgstr "次ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚’残ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:35 msgid "Checking the status of your branch should show your fork is up-to-date with the ``origin`` remote::" msgstr "ブランãƒã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹ã¨ã€``origin`` ã®ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ•ã‚©ãƒ¼ã‚¯ãŒæœ€æ–°ã®çŠ¶æ…‹ã§ã‚ã‚‹ã“ã¨ã‚’ç†è§£ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:43 msgid "Rebasing your branch" msgstr "ブランãƒã®ãƒªãƒ™ãƒ¼ã‚¹" #: ../../rst/dev_guide/developing_rebasing.rst:45 msgid "Once you have an ``upstream`` remote configured, you can rebase the branch for your PR::" msgstr "``upstream`` ã®ãƒªãƒ¢ãƒ¼ãƒˆã‚’設定ã—ãŸã‚‰ã€PR ã®ãƒ–ランãƒã‚’リベースã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:49 msgid "This will replay the changes in your branch on top of the changes made in the upstream ``devel`` branch. If there are merge conflicts, you will be prompted to resolve those before you can continue." msgstr "ã“れã«ã‚ˆã‚Šã€ã‚¢ãƒƒãƒ—ストリーム㮠``devel`` ブランãƒã§å¤‰æ›´ã—ãŸãƒ–ランãƒã«å¤‰æ›´ãŒå†ç”Ÿã•れã¾ã™ã€‚マージã®ç«¶åˆãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ç¶šè¡Œã™ã‚‹å‰ã«è§£æ±ºã™ã‚‹ã‚ˆã†ã«æ±‚ã‚られã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:52 msgid "After you rebase, the status of your branch changes::" msgstr "リベース後ã«ã€ãƒ–ランãƒã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒå¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:61 msgid "Don't worry, this is normal after a rebase. You should ignore the ``git status`` instructions to use ``git pull``. We'll cover what to do next in the following section." msgstr "リベースã®å¾Œã€ã“れã¯é€šå¸¸é€šã‚Šã¨ãªã‚Šã¾ã™ã€‚``git pull`` を使用ã™ã‚‹ ``git status`` 命令ã¯ç„¡è¦–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€æ¬¡ã«ä½•ã‚’ã™ã‚‹ã‹ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:64 msgid "Updating your pull request" msgstr "ãƒ—ãƒ«è¦æ±‚ã®æ›´æ–°" #: ../../rst/dev_guide/developing_rebasing.rst:66 msgid "Now that you've rebased your branch, you need to push your changes to GitHub to update your PR." msgstr "ブランãƒã‚’リベースã—ãŸã‚‰ã€å¤‰æ›´ã‚’ GitHub ã«ãƒ—ッシュã—ã¦ã€PR ã‚’æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:68 msgid "Since rebasing re-writes git history, you will need to use a force push::" msgstr "リベースã¯ã€git å±¥æ­´ã‚’å†æ›¸ãè¾¼ã¿ã™ã‚‹ãŸã‚ã€å¼·åˆ¶çš„ã«ãƒ—ッシュã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:72 msgid "Your PR on GitHub has now been updated. This will automatically trigger testing of your changes. You should check in on the status of your PR after tests have completed to see if further changes are required." msgstr "GitHub ã® PR ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€å¤‰æ›´ã®ãƒ†ã‚¹ãƒˆãŒè‡ªå‹•çš„ã«ç™ºç”Ÿã—ã¾ã™ã€‚テスト完了後㫠PR ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã—ã€ã•らãªã‚‹å¤‰æ›´ãŒå¿…è¦ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/developing_rebasing.rst:76 msgid "Getting help rebasing" msgstr "リベースã®ãƒ˜ãƒ«ãƒ—" #: ../../rst/dev_guide/developing_rebasing.rst:78 msgid "For help with rebasing your PR, or other development related questions, join us on the #ansible-devel chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "PR ã¾ãŸã¯ãã®ä»–ã®é–‹ç™ºé–¢é€£ã®è³ªå•ã‚’å†è¨­å®šã™ã‚‹éš›ã«ã¯ã€ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« #ansible-devel ã«å‚加ã—ã¾ã™ï¼ˆansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `ã§IRCを使用)。" #: ../../rst/dev_guide/developing_rebasing.rst:82 msgid ":ref:`community_development_process`" msgstr ":ref:`community_development_process`" #: ../../rst/dev_guide/developing_rebasing.rst:83 msgid "Information on roadmaps, opening PRs, Ansibullbot, and more" msgstr "ロードマップã€ã‚ªãƒ¼ãƒ—ン PRSã€Ansibullbot ãªã©ã«é–¢ã™ã‚‹æƒ…å ±" #: ../../rst/dev_guide/index.rst:5 msgid "Developer Guide" msgstr "開発者ガイド" #: ../../rst/dev_guide/index.rst:9 msgid "**Making Open Source More Inclusive**" msgstr "**多様性をå—ã‘入れるオープンソースã®å¼·åŒ–**" #: ../../rst/dev_guide/index.rst:11 msgid "Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_." msgstr "Red Hat ã§ã¯ã€ã‚³ãƒ¼ãƒ‰ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€Web プロパティーã«ãŠã‘ã‚‹é…æ…®ã«æ¬ ã‘る用語ã®ç½®ãæ›ãˆã«å–り組んã§ã„ã¾ã™ã€‚ã¾ãšã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ (master)ã€ã‚¹ãƒ¬ãƒ¼ãƒ– (slave)ã€ãƒ–ラックリスト (blacklist)ã€ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆ (whitelist) ã® 4 ã¤ã®ç”¨èªžã®ç½®ãæ›ãˆã‹ã‚‰å§‹ã‚ã¾ã™ã€‚å•題ã®ã‚る用語を見ã¤ã‘ãŸå ´åˆã¯ã€å•題を作æˆã™ã‚‹ã‹ã€ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ãã ã•ã„。詳細ã¯ã€`弊社 ã® CTOã€Chris Wright ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/index.rst:13 msgid "Welcome to the Ansible Developer Guide!" msgstr "Ansible 開発者ガイドã«ã‚ˆã†ã“ã!" #: ../../rst/dev_guide/index.rst:15 msgid "**Who should use this guide?**" msgstr "**本ガイドã®å¯¾è±¡è€…**" #: ../../rst/dev_guide/index.rst:17 msgid "If you want to extend Ansible by using a custom module or plugin locally, creating a module or plugin, adding functionality to an existing module, or expanding test coverage, this guide is for you. We've included detailed information for developers on how to test and document modules, as well as the prerequisites for getting your module or plugin accepted into the main Ansible repository." msgstr "カスタムモジュールã¾ãŸã¯ãƒ—ラグインã®ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®ä½¿ç”¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®ä½œæˆã€æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®æ©Ÿèƒ½ã®è¿½åŠ ã€ãƒ†ã‚¹ãƒˆç¯„å›²ã®æ‹¡å¼µã‚’行ã£ã¦ Ansible ã‚’æ‹¡å¼µã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚¬ã‚¤ãƒ‰ã‚’ã”利用ã«ãªã‚Œã¾ã™ã€‚モジュールã®ãƒ†ã‚¹ãƒˆãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–ã«é–¢ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã®é–‹ç™ºè€…å‘ã‘ã®è©³ç´°æƒ…å ±ã€ãŠã‚ˆã³ä¸»ãª Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã«å—ã‘入れられるモジュールã¾ãŸã¯ãƒ—ラグインをå–å¾—ã™ã‚‹ãŸã‚ã®å‰ææ¡ä»¶ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/index.rst:19 msgid "Find the task that best describes what you want to do:" msgstr "以下ã®ä¸­ã‹ã‚‰ã€ãŠå®¢æ§˜ã®ãƒ‹ãƒ¼ã‚ºã«æœ€ã‚‚é©ã—ãŸã‚¿ã‚¹ã‚¯ã‚’é¸ã‚“ã§ãã ã•ã„。" #: ../../rst/dev_guide/index.rst:21 msgid "I'm looking for a way to address a use case:" msgstr "ユースケースã«å¯¾å¿œã™ã‚‹æ–¹æ³•を探ã—ã¦ã„る。" #: ../../rst/dev_guide/index.rst:23 msgid "I want to :ref:`add a custom plugin or module locally `." msgstr ":ref:`カスタムプラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ローカルã«è¿½åŠ  ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:24 msgid "I want to figure out if :ref:`developing a module is the right approach ` for my use case." msgstr "é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ã€:ref:`モジュールã®é–‹ç™ºãŒé©åˆ‡ãªã‚¢ãƒ—ローãƒã§ã‚ã‚‹ ` ã‹ã©ã†ã‹ã‚’確èªã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:25 msgid "I want to :ref:`develop a collection `." msgstr ":ref:`コレクションを開発 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:26 msgid "I want to :ref:`contribute to an Ansible-maintained collection `." msgstr ":ref:`Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«è²¢çŒ® ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:27 msgid "I want to :ref:`contribute to a community-maintained collection `." msgstr ":ref:`コミュニティーãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«è²¢çŒ® ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:28 msgid "I want to :ref:`migrate a role to a collection `." msgstr ":ref:`ロールをコレクションã«ç§»è¡Œ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:30 msgid "I've read the info above, and I'm sure I want to develop a module:" msgstr "ä¸Šè¨˜ã®æƒ…報を読んã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã—ãŸã„。" #: ../../rst/dev_guide/index.rst:32 msgid "What do I need to know before I start coding?" msgstr "コーディングを始ã‚ã‚‹å‰ã«ä½•を知ã£ã¦ãŠãã¹ãã§ã—ょã†ã‹ã€‚" #: ../../rst/dev_guide/index.rst:33 msgid "I want to :ref:`set up my Python development environment `." msgstr ":ref:`Python 開発環境をセットアップ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:34 msgid "I want to :ref:`get started writing a module `." msgstr ":ref:`モジュールã®è¨˜è¿°ã‚’é–‹å§‹ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:40 msgid "I want to write a specific kind of module:" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:36 msgid "a :ref:`network module `" msgstr ":ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« `" #: ../../rst/dev_guide/index.rst:37 msgid "a :ref:`Windows module `." msgstr ":ref:`Windows モジュール `" #: ../../rst/dev_guide/index.rst:38 msgid "an :ref:`Amazon module `." msgstr ":ref:`Amazon モジュール `" #: ../../rst/dev_guide/index.rst:39 msgid "an :ref:`OpenStack module `." msgstr ":ref:`OpenStack モジュール `" #: ../../rst/dev_guide/index.rst:40 msgid "an :ref:`oVirt/RHV module `." msgstr ":ref:`oVirt/RHV モジュール `" #: ../../rst/dev_guide/index.rst:41 msgid "a :ref:`VMware module `." msgstr ":ref:`VMware モジュール `" #: ../../rst/dev_guide/index.rst:42 msgid "I want to :ref:`write a series of related modules ` that integrate Ansible with a new product (for example, a database, cloud provider, network platform, and so on)." msgstr "Ansible ã‚’æ–°è¦è£½å“ (例: データベースã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム) ã¨çµ±åˆã™ã‚‹ :ref:`一連ã®é–¢é€£ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’記述 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:44 msgid "I want to refine my code:" msgstr "コードを改良ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:46 msgid "I want to :ref:`debug my module code `." msgstr ":ref:`モジュールコードをデãƒãƒƒã‚° ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:47 msgid "I want to :ref:`add tests `." msgstr ":ref:`テストを追加 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:48 msgid "I want to :ref:`document my module `." msgstr ":ref:`モジュールをドキュメント化 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:49 msgid "I want to :ref:`document my set of modules for a network platform `." msgstr ":ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã‚’文書化 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:50 msgid "I want to follow :ref:`conventions and tips for clean, usable module code `." msgstr ":ref:`クリーンã§ä½¿ã„ã‚„ã™ã„モジュールコードã®ãŸã‚ã®è¦å‰‡ã¨ãƒ’ント ` ã‚’é©ç”¨ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:51 msgid "I want to :ref:`make sure my code runs on Python 2 and Python 3 `." msgstr ":ref:`作æˆã—ãŸã‚³ãƒ¼ãƒ‰ãŒ Python 2 ãŠã‚ˆã³ Python 3 ã§å®Ÿè¡Œã™ã‚‹ ` よã†ã«ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:53 msgid "I want to work on other development projects:" msgstr "ä»–ã®é–‹ç™ºãƒ—ロジェクトã§ä½œæ¥­ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:55 msgid "I want to :ref:`write a plugin `." msgstr ":ref:`プラグインを記述 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:56 msgid "I want to :ref:`connect Ansible to a new source of inventory `." msgstr ":ref:`Ansible ã‚’æ–°ã—ã„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«æŽ¥ç¶š ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:57 msgid "I want to :ref:`deprecate an outdated module `." msgstr ":ref:`å¤ã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ ` ã«ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:59 msgid "I want to contribute back to the Ansible project:" msgstr "Ansible プロジェクトã«è²¢çŒ®ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:61 msgid "I want to :ref:`understand how to contribute to Ansible `." msgstr ":ref:`Ansible ã¸ã®è²¢çŒ®æ–¹æ³•ã‚’ç†è§£ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:62 msgid "I want to :ref:`contribute my module or plugin `." msgstr ":ref:`モジュールã¾ãŸã¯ãƒ—ラグインã«è²¢çŒ® ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:63 msgid "I want to :ref:`understand the license agreement ` for contributions to Ansible." msgstr "Ansible ã«å‚加ã™ã‚‹ãŸã‚ã® :ref:`使用許諾契約をç†è§£ ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/dev_guide/index.rst:65 msgid "If you prefer to read the entire guide, here's a list of the pages in order." msgstr "本ガイドをã™ã¹ã¦èª­ã‚€å ´åˆã¯ã€ä»¥ä¸‹ã«ç¤ºã™é †ç•ªã§ãƒšãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:6 msgid "Migrating Roles to Roles in Collections on Galaxy" msgstr "ロールã®ã€Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ãƒ­ãƒ¼ãƒ«ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/migrating_roles.rst:8 msgid "You can migrate any existing standalone role into a collection and host the collection on Galaxy. With Ansible collections, you can distribute many roles in a single cohesive unit of re-usable automation. Inside a collection, you can share custom plugins across all roles in the collection instead of duplicating them in each role's :file:`library/`` directory." msgstr "既存ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã‚’コレクションã«ç§»è¡Œã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Galaxy 上ã§ãƒ›ã‚¹ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible コレクションを使用ã™ã‚‹ã¨ã€å†åˆ©ç”¨å¯èƒ½ãªè‡ªå‹•化㮠1 ã¤ã®ã¾ã¨ã¾ã£ãŸãƒ¦ãƒ‹ãƒƒãƒˆã§å¤šãã®ãƒ­ãƒ¼ãƒ«ã‚’é…布ã§ãã¾ã™ã€‚コレクションã®ä¸­ã§ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインをå„ロール㮠:file:`library/`` ディレクトリーã«è¤‡è£½ã™ã‚‹ã®ã§ã¯ãªãã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã§å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:10 msgid "You must migrate roles to collections if you want to distribute them as certified Ansible content." msgstr "ロールをèªå®šæ¸ˆã¿ã® Ansible コンテンツã¨ã—ã¦é…布ã™ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã‚’コレクションã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:14 msgid "If you want to import your collection to Galaxy, you need a `Galaxy namespace `_." msgstr "コレクションを Galaxy ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€`Galaxy åå‰ç©ºé–“ `_ ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:16 msgid "See :ref:`developing_collections` for details on collections." msgstr "コレクションã®è©³ç´°ã¯ã€ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:24 msgid "Comparing standalone roles to collection roles" msgstr "スタンドアロンロールã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã®æ¯”較" #: ../../rst/dev_guide/migrating_roles.rst:26 msgid ":ref:`Standalone roles ` have the following directory structure:" msgstr ":ref:`Standalone roles ` ã«ã€ä»¥ä¸‹ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:45 msgid "The highlighted directories above will change when you migrate to a collection-based role. The collection directory structure includes a :file:`roles/` directory:" msgstr "上記ã®å¼·èª¿è¡¨ç¤ºã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ™ãƒ¼ã‚¹ã®ãƒ­ãƒ¼ãƒ«ã¸ã®ç§»è¡Œæ™‚ã«å¤‰åŒ–ã—ã¾ã™ã€‚コレクションディレクトリー構造ã«ã¯ã€:file:`roles/` ディレクトリーãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:70 msgid "You will need to use the Fully Qualified Collection Name (FQCN) to use the roles and plugins when you migrate your role into a collection. The FQCN is the combination of the collection ``namespace``, collection ``name``, and the content item you are referring to." msgstr "ロールをコレクションã«ç§»è¡Œã™ã‚‹ã¨ãã«ãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインを使用ã™ã‚‹ãŸã‚ã«ã€å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``namespace``ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``name``ã€ãŠã‚ˆã³å‚ç…§ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„アイテムã®çµ„ã¿åˆã‚ã›ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:72 msgid "So for example, in the above collection, the FQCN to access ``role1`` would be:" msgstr "ãŸã¨ãˆã°ã€ä¸Šè¨˜ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€``role1`` ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ FQCN ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:79 msgid "A collection can contain one or more roles in the :file:`roles/` directory and these are almost identical to standalone roles, except you need to move plugins out of the individual roles, and use the :abbr:`FQCN (Fully Qualified Collection Name)` in some places, as detailed in the next section." msgstr "コレクションã«ã¯ã€:file:`roles/` ディレクトリー㫠1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒ­ãƒ¼ãƒ«ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã€ã“れらã®ãƒ­ãƒ¼ãƒ«ã¯ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã¨ã»ã¼åŒã˜ã§ã™ã€‚ãŸã ã—ã€å€‹åˆ¥ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ãƒ—ラグインを外ã«ç§»å‹•ã—ã€ä¸€éƒ¨ã§ã¯ :abbr:`FQCN (Fully Qualified Collection Name)` を使用ã—ã¾ã™ã€‚ã“れã¯ã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§è©³ç´°ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:83 msgid "In standalone roles, some of the plugin directories referenced their plugin types in the plural sense; this is not the case in collections." msgstr "スタンドアロンロールã§ã¯ã€ãƒ—ラグインディレクトリーã®ä¸€éƒ¨ãŒè¤‡æ•°ã®æ„味ã§ãƒ—ラグインタイプをå‚ç…§ã—ã¦ã„ã¾ã—ãŸã€‚コレクションã§ã¯ã“ã®ã‚ˆã†ã«ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/migrating_roles.rst:88 msgid "Migrating a role to a collection" msgstr "ロールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/migrating_roles.rst:90 msgid "To migrate from a standalone role that contains no plugins to a collection role:" msgstr "プラグインãŒå«ã¾ã‚Œãªã„スタンドアロンロールã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã«ç§»è¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:92 msgid "Create a local :file:`ansible_collections` directory and ``cd`` to this new directory." msgstr "ローカル㮠:file:`ansible_collections` ディレクトリーを作æˆã—ã€ã“ã®æ–°ã—ã„ディレクトリー㫠``cd`` を作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:94 #: ../../rst/dev_guide/migrating_roles.rst:122 msgid "Create a collection. If you want to import this collection to Ansible Galaxy, you need a `Galaxy namespace `_." msgstr "コレクションを作æˆã—ã¾ã™ã€‚ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Ansible Galaxy ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€`Galaxy åå‰ç©ºé–“ `_ ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:100 #: ../../rst/dev_guide/migrating_roles.rst:128 msgid "This creates the collection directory structure." msgstr "ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:102 #: ../../rst/dev_guide/migrating_roles.rst:130 msgid "Copy the standalone role directory into the :file:`roles/` subdirectory of the collection. Roles in collections cannot have hyphens in the role name. Rename any such roles to use underscores instead." msgstr "スタンドアロンã®ãƒ­ãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’コレクション㮠:file:`roles/` サブディレクトリーã«ã‚³ãƒ”ーã—ã¾ã™ã€‚コレクション内ã®ãƒ­ãƒ¼ãƒ«ã«ã¯ãƒ­ãƒ¼ãƒ«åã«ãƒã‚¤ãƒ•ンを設定ã§ãã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªãƒ­ãƒ¼ãƒ«ã¯åå‰ã‚’変更ã—ã€ä»£ã‚りã«ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã‚’使用ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:109 #: ../../rst/dev_guide/migrating_roles.rst:146 msgid "Update ``galaxy.yml`` to include any role dependencies." msgstr "``galaxy.yml`` ã‚’æ›´æ–°ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:111 #: ../../rst/dev_guide/migrating_roles.rst:148 msgid "Update the collection README.md file to add links to any role README.md files." msgstr "コレクション README.md ファイルを更新ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã® README.md ファイルã¸ã®ãƒªãƒ³ã‚¯ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:116 msgid "Migrating a role that contains plugins to a collection" msgstr "プラグインãŒå«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/migrating_roles.rst:118 msgid "To migrate from a standalone role that has plugins to a collection role:" msgstr "プラグインãŒå«ã¾ã‚Œãªã„スタンドアロンロールã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã«ç§»è¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:120 msgid "Create a local :file:`ansible_collections directory` and ``cd`` to this new directory." msgstr "ローカル㮠:file:`ansible_collections directory` ãŠã‚ˆã³ ``cd`` ã‚’ã“ã®æ–°ã—ã„ディレクトリーã«ä½œæˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:138 msgid "Move any modules to the :file:`plugins/modules/` directory." msgstr "モジュールを :file:`plugins/modules/` ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:144 msgid "Move any other plugins to the appropriate :file:`plugins/PLUGINTYPE/` directory. See :ref:`migrating_plugins_collection` for additional steps that may be required." msgstr "ãã®ä»–ã®ãƒ—ラグインをé©åˆ‡ãª :file:`plugins/PLUGINTYPE/` ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚å¿…è¦ã¨ãªã‚‹å¯èƒ½æ€§ã®ã‚る追加手順ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`migrating_plugins_collection`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:150 msgid "Change any references to the role to use the :abbr:`FQCN (Fully Qualified Collection Name)`." msgstr ":abbr:`FQCN (Fully Qualified Collection Name)` を使用ã™ã‚‹ã‚ˆã†ã«ã€ãƒ­ãƒ¼ãƒ«ã¸ã®å‚照を変更ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:163 msgid "You can alternately use the ``collections`` keyword to simplify this:" msgstr "åˆ¥ã®æ–¹æ³•ã§ã¯ã€``collections`` キーワードを使用ã—ã¦ã“れをå˜ç´”化ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:181 msgid "Migrating other role plugins to a collection" msgstr "ä»–ã®ãƒ­ãƒ¼ãƒ«ãƒ—ラグインã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/migrating_roles.rst:183 msgid "To migrate other role plugins to a collection:" msgstr "ãã®ä»–ã®ãƒ­ãƒ¼ãƒ«ãƒ—ラグインをコレクションã«ç§»è¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:186 msgid "Move each nonmodule plugins to the appropriate :file:`plugins/PLUGINTYPE/` directory. The :file:`mynamespace/mycollection/plugins/README.md` file explains the types of plugins that the collection can contain within optionally created subdirectories." msgstr "モジュール以外ã®å„プラグインをé©åˆ‡ãª :file:`plugins/PLUGINTYPE/` ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚:file:`mynamespace/mycollection/plugins/README.md` ファイルã¯ã€ä»»æ„ã§ä½œæˆã•れãŸã‚µãƒ–ディレクトリー内ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã‚ã‚‹ã“ã¨ãŒã§ãるプラグインã®ã‚¿ã‚¤ãƒ—を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:192 msgid "Update documentation to use the FQCN. Plugins that use ``doc_fragments`` need to use FQCN (for example, ``mydocfrag`` becomes ``mynamespace.mycollection.mydocfrag``)." msgstr "FQCN を使用ã™ã‚‹ã‚ˆã†ã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ›´æ–°ã—ã¾ã™ã€‚``doc_fragments`` を使用ã™ã‚‹ãƒ—ラグインã¯ã€FQCN を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (ãŸã¨ãˆã°ã€``mydocfrag`` 㯠``mynamespace.mycollection.mydocfrag`` ã«ãªã‚Šã¾ã™)。" #: ../../rst/dev_guide/migrating_roles.rst:194 msgid "Update relative imports work in collections to start with a period. For example, :file:`./filename` and :file:`../asdfu/filestuff` works but :file:`filename` in same directory must be updated to :file:`./filename`." msgstr "コレクション内ã®ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆä½œæ¥­ã‚’æ›´æ–°ã—ã€ãƒ”リオドã§é–‹å§‹ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€:file:`./filename` ãŠã‚ˆã³ :file:`../asdfu/filestuff` ã¯æœ‰åйã§ã™ãŒã€åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® :file:`filename` ã‚’ :file:`./filename` ã«æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:197 msgid "If you have a custom ``module_utils`` or import from ``__init__.py``, you must also:" msgstr "カスタム㮠``module_utils`` ãŒã‚ã‚‹ã€ã¾ãŸã¯ ``__init__.py`` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚‚å¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:199 msgid "Change the Python namespace for custom ``module_utils`` to use the :abbr:`FQCN (Fully Qualified Collection Name)` along with the ``ansible_collections`` convention. See :ref:`update_module_utils_role`." msgstr "カスタム ``module_utils`` ã® Python åå‰ç©ºé–“ãŒã€``ansible_collections`` è¦å‰‡ã¨å…±ã« :abbr:`FQCN (Fully Qualified Collection Name)` を使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚「:ref:`update_module_utils_role`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:201 msgid "Change how you import from ``__init__.py``. See :ref:`update_init_role`." msgstr "``__init__.py`` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•を変更ã—ã¾ã™ã€‚「:ref:`update_init_role`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:207 msgid "Updating ``module_utils``" msgstr "``module_utils`` ã®æ›´æ–°" #: ../../rst/dev_guide/migrating_roles.rst:209 msgid "If any of your custom modules use a custom module utility, once you migrate to a collection you cannot address the module utility in the top level ``ansible.module_utils`` Python namespace. Ansible does not merge content from collections into the Ansible internal Python namespace. Update any Python import statements that refer to custom module utilities when you migrate your custom content to collections. See :ref:`module_utils in collections ` for more details." msgstr "カスタムモジュールã®ã„ãšã‚Œã‹ãŒã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã™ã‚‹ã¨ã€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã® ``ansible.module_utils`` Python åå‰ç©ºé–“ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’扱ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。Ansible ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Ansible 内部㮠Python åå‰ç©ºé–“ã«ãƒžãƒ¼ã‚¸ã—ã¾ã›ã‚“。カスタムコンテンツをコレクションã«ç§»è¡Œã™ã‚‹éš›ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’å‚ç…§ã—ã¦ã„ã‚‹ Python ã® import 文を更新ã—ã¦ãã ã•ã„。詳細ã¯ã€ã€Œ:ref:`コレクション㮠module_utils `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/migrating_roles.rst:211 msgid "When coding with ``module_utils`` in a collection, the Python import statement needs to take into account the :abbr:`FQCN (Fully Qualified Collection Name)` along with the ``ansible_collections`` convention. The resulting Python import looks similar to the following example:" msgstr "コレクション㧠``module_utils`` を使用ã—ã¦ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹å ´åˆã€Python ã® import ステートメント㯠``ansible_collections`` è¦å‰‡ã¨ã¨ã‚‚ã« :abbr:`FQCN (Fully Qualified Collection Name)` を考慮ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚作æˆã•れる Python インãƒãƒ¼ãƒˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:219 msgid "You need to follow the same rules in changing paths and using namespaced names for subclassed plugins." msgstr "パスã®å¤‰æ›´ã¨åŒã˜ãƒ«ãƒ¼ãƒ«ã«å¾“ã„ã€ã‚µãƒ–クラスã®ãƒ—ラグインã«åå‰ç©ºé–“を使用ã—ãŸåå‰ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:221 msgid "The following example code snippets show a Python and a PowerShell module using both default Ansible ``module_utils`` and those provided by a collection. In this example the namespace is ``ansible_example`` and the collection is ``community``." msgstr "以下ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã®ä¾‹ã¯ã€ãƒ‡ãƒ•ォルト㮠Ansible ``module_utils`` ã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã‚’使用ã™ã‚‹ Python ãŠã‚ˆã³ PowerShell モジュールを示ã—ã¦ã„ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€åå‰ç©ºé–“㯠``ansible_example`` ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ ``community`` ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:223 msgid "In the Python example the ``module_utils`` is ``helper`` and the :abbr:`FQCN (Fully Qualified Collection Name)` is ``ansible_example.community.plugins.module_utils.helper``:" msgstr "Python ã®ä¾‹ã§ã¯ã€``module_utils`` ㌠``helper`` ã§ã€:abbr:`FQCN (Fully Qualified Collection Name)` 㯠``ansible_example.community.plugins.module_utils.helper`` ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:249 msgid "In the PowerShell example the ``module_utils`` is ``hyperv`` and the :abbr:`FQCN (Fully Qualified Collection Name)` is ``ansible_example.community.plugins.module_utils.hyperv``:" msgstr "PowerShell ã®ä¾‹ã§ã¯ã€``module_utils`` ㌠``hyperv`` ã§ã€:abbr:`FQCN (Fully Qualified Collection Name)` 㯠``ansible_example.community.plugins.module_utils.hyperv`` ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:271 msgid "Importing from __init__.py" msgstr "__init__.py ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/migrating_roles.rst:273 msgid "Because of the way that the CPython interpreter does imports, combined with the way the Ansible plugin loader works, if your custom embedded module or plugin requires importing something from an :file:`__init__.py` file, that also becomes part of your collection. You can either originate the content inside a standalone role or use the file name in the Python import statement. The following example is an :file:`__init__.py` file that is part of a callback plugin found inside a collection named ``ansible_example.community``." msgstr "CPython インタープリターãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’è¡Œã†æ–¹æ³•ã¨ã€Ansible プラグインローダーãŒå‹•作ã™ã‚‹æ–¹æ³•を組ã¿åˆã‚ã›ã‚‹ã“ã¨ã§ã€ã‚«ã‚¹ã‚¿ãƒ ã®çµ„ã¿è¾¼ã¿ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグイン㌠:file:`__init__.py` ファイルã‹ã‚‰ä½•ã‹ã‚’インãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãれもコレクションã®ä¸€éƒ¨ã«ãªã‚Šã¾ã™ã€‚コンテンツをスタンドアロンã®ãƒ­ãƒ¼ãƒ«ã®å†…部ã§ç”Ÿæˆã™ã‚‹ã‹ã€Python ã® import æ–‡ã§ãƒ•ァイルåを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚次ã®ä¾‹ã¯ã€``ansible_example.community`` ã¨ã„ã†åå‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸­ã«ã‚ã‚‹ callback プラグインã®ä¸€éƒ¨ã§ã‚ã‚‹ :file:`__init__.py` ファイルã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:281 msgid "Example: Migrating a standalone role with plugins to a collection" msgstr "例: プラグインをæŒã¤ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã‚’コレクションã«ç§»è¡Œ" #: ../../rst/dev_guide/migrating_roles.rst:283 msgid "In this example we have a standalone role called ``my-standalone-role.webapp`` to emulate a standalone role that contains dashes in the name (which is not valid in collections). This standalone role contains a custom module in the ``library/`` directory called ``manage_webserver``." msgstr "ã“ã®ä¾‹ã§ã¯ã€``my-standalone-role.webapp`` ã¨ã„ã†åå‰ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ãƒ«ãŒã‚りã€åå‰ã«ãƒ€ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã‚‹ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ã®ãƒ­ãƒ¼ãƒ«ã‚’エミュレートã—ã¾ã™ (ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æœ‰åйãªã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“)。ã“ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã«ã¯ã€``manage_webserver`` ã¨å‘¼ã°ã‚Œã‚‹ ``library/`` ディレクトリーã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:298 msgid "Create a new collection, for example, ``acme.webserver``:" msgstr "æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã—ã¾ã™ (``acme.webserver`` ãªã©)。" #: ../../rst/dev_guide/migrating_roles.rst:311 msgid "Create the ``webapp`` role inside the collection and copy all contents from the standalone role:" msgstr "コレクション内㫠``webapp`` ロールを作æˆã—ã€standalone ロールã‹ã‚‰ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をコピーã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:318 msgid "Move the ``manage_webserver`` module to its new home in ``acme/webserver/plugins/modules/``:" msgstr "``manage_webserver`` モジュールを ``acme/webserver/plugins/modules/`` å†…ã®æ–°ã—ã„ホームã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:326 msgid "This example changed the original source file ``manage_webserver.py`` to the destination file ``manage.py``. This is optional but the :abbr:`FQCN (Fully Qualified Collection Name)` provides the ``webserver`` context as ``acme.webserver.manage``." msgstr "ã“ã®ä¾‹ã§ã¯ã€å…ƒã®ã‚½ãƒ¼ã‚¹ãƒ•ァイル ``manage_webserver.py`` を宛先ファイル ``manage.py`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“れã¯ä»»æ„ã§ã™ãŒã€:abbr:`FQCN (Fully Qualified Collection Name)` ã¯ã€``acme.webserver.manage`` ã¨ã—㦠``webserver`` ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:328 msgid "Change ``manage_webserver`` to ``acme.webserver.manage`` in :file:`tasks/` files in the role ( for example, ``my-standalone-role.webapp/tasks/main.yml``) and any use of the original module name." msgstr "ロール内㮠:file:`tasks/` ファイル㧠``manage_webserver`` ã‚’ ``acme.webserver.manage`` ã«å¤‰æ›´ (``my-standalone-role.webapp/tasks/main.yml`` ãªã©) ã—ã€å…ƒã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:332 msgid "This name change is only required if you changed the original module name, but illustrates content referenced by :abbr:`FQCN (Fully Qualified Collection Name)` can offer context and in turn can make module and plugin names shorter. If you anticipate using these modules independent of the role, keep the original naming conventions. Users can add the :ref:`collections keyword ` in their playbooks. Typically roles are an abstraction layer and users won't use components of the role independently." msgstr "ã“ã®åå‰ã®å¤‰æ›´ã¯ã€å…ƒã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åを変更ã—ãŸå ´åˆã«ã®ã¿å¿…è¦ã§ã™ãŒã€:abbr:`FQCN (Fully Qualified Collection Name)` ã§å‚ç…§ã•れるコンテンツを例示ã™ã‚‹ã“ã¨ã§ã€ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’æä¾›ã—ã€ã²ã„ã¦ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインã®åå‰ã‚’短ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ロールã¨ã¯é–¢ä¿‚ãªã使用ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã‚‹å ´åˆã¯ã€å…ƒã®å‘½åè¦å‰‡ã‚’ç¶­æŒã—ã¦ãã ã•ã„。ユーザーã¯ã€Playbook ã« :ref:`コレクションã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ ` を追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚通常ã€ãƒ­ãƒ¼ãƒ«ã¯æŠ½è±¡ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã‚りã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒ­ãƒ¼ãƒ«ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’個別ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/migrating_roles.rst:336 msgid "Example: Supporting standalone roles and migrated collection roles in a downstream RPM" msgstr "例: ダウンストリーム RPM ã§ã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã¨ç§»è¡Œã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/migrating_roles.rst:338 msgid "A standalone role can co-exist with its collection role counterpart (for example, as part of a support lifecycle of a product). This should only be done for a transition period, but these two can exist in downstream in packages such as RPMs. For example, the RHEL system roles could coexist with an `example of a RHEL system roles collection `_ and provide existing backwards compatibility with the downstream RPM." msgstr "スタンドアロンã®ãƒ­ãƒ¼ãƒ«ã¯ã€å¯¾å¿œã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã¨å…±å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (例: 製å“ã®ã‚µãƒãƒ¼ãƒˆãƒ©ã‚¤ãƒ•サイクルã®ä¸€éƒ¨ã¨ã—ã¦)。ã“れã¯ç§»è¡ŒæœŸé–“ã®ã¿è¡Œã†ã¹ãã§ã™ãŒã€ã“れら 2 ã¤ã¯ RPM ãªã©ã®ãƒ‘ッケージã§ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«å­˜åœ¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€RHEL ã®ã‚·ã‚¹ãƒ†ãƒ ãƒ­ãƒ¼ãƒ«ã¯ `example of a RHEL system roles collection `_ ã¨å…±å­˜ã—ã€ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ  RPM ã¨ã®æ—¢å­˜ã®å¾Œæ–¹äº’æ›æ€§ã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:340 msgid "This section walks through an example creating this coexistence in a downstream RPM and requires Ansible 2.9.0 or later." msgstr "本セクションã§ã¯ã€ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ  RPM ã§ã“ã®å…±å­˜ã‚’作æˆã—ã€Ansible 2.9.0 以é™ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:342 msgid "To deliver a role as both a standalone role and a collection role:" msgstr "スタンドアロンロールã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ­ãƒ¼ãƒ«ã®ä¸¡æ–¹ã¨ã—ã¦ãƒ­ãƒ¼ãƒ«ã‚’æä¾›ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:344 msgid "Place the collection in :file:`/usr/share/ansible/collections/ansible_collections/`." msgstr "コレクションを :file:`/usr/share/ansible/collections/ansible_collections/` ã«ç½®ãã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:345 msgid "Copy the contents of the role inside the collection into a directory named after the standalone role and place the standalone role in :file:`/usr/share/ansible/roles/`." msgstr "コレクション内ã®ãƒ­ãƒ¼ãƒ«ã®å†…容をスタンドアロンロールã«ã¡ãªã‚“ã§å付ã‘られãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚³ãƒ”ーã—ã€ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã‚’ :file:`/usr/share/ansible/roles/` ã«ç½®ãã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:347 msgid "All previously bundled modules and plugins used in the standalone role are now referenced by :abbr:`FQCN (Fully Qualified Collection Name)` so even though they are no longer embedded, they can be found from the collection contents.This is an example of how the content inside the collection is a unique entity and does not have to be bound to a role or otherwise. You could alternately create two separate collections: one for the modules and plugins and another for the standalone role to migrate to. The role must use the modules and plugins as :abbr:`FQCN (Fully Qualified Collection Name)`." msgstr "スタンドアロンロールã§ä½¿ç”¨ã•れã¦ã„ãŸã€ä»¥å‰ã«ãƒãƒ³ãƒ‰ãƒ«ã•れã¦ã„ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインã¯ã€ã™ã¹ã¦ :abbr:`FQCN (Fully Qualified Collection Name)` ã§å‚ç…§ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ãã®ãŸã‚ã€ãれらã¯ã‚‚ã¯ã‚„埋ã‚è¾¼ã¾ã‚Œã¦ã„ãªã„ã«ã‚‚ã‹ã‹ã‚らãšã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‹ã‚‰è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå›ºæœ‰ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§ã‚りã€ãƒ­ãƒ¼ãƒ«ãªã©ã«ç¸›ã‚‰ã‚Œã‚‹å¿…è¦ãŒãªã„ã“ã¨ã‚’示ã™ä¾‹ã§ã™ã€‚åˆ¥ã®æ–¹æ³•ã¨ã—ã¦ã€2 ã¤ã®ç‹¬ç«‹ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚1 ã¤ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグイン用ã€ã‚‚ㆠ1 ã¤ã¯ç§»è¡Œå…ˆã®ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ç”¨ã§ã™ã€‚ロールã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインを :abbr:`FQCN (Fully Qualified Collection Name)` ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:349 msgid "The following is an example RPM spec file that accomplishes this using this example content:" msgstr "以下ã¯ã€ã“ã®ã‚µãƒ³ãƒ—ルã®å†…容を使用ã—ã¦ã“れを実ç¾ã™ã‚‹ RPM 仕様ファイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:414 msgid "Using ``ansible.legacy`` to access local custom modules from collections-based roles" msgstr "``ansible.legacy`` を使用ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ™ãƒ¼ã‚¹ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ãƒ­ãƒ¼ã‚«ãƒ«ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹" #: ../../rst/dev_guide/migrating_roles.rst:416 msgid "Some roles use :ref:`local custom modules ` that are not part of the role itself. When you move these roles into collections, they can no longer find those custom plugins. You can add the synthetic collection ``ansible.legacy`` to enable legacy behavior and find those custom plugins. Adding ``ansible.legacy`` configures your role to search the pre-collections default paths for modules and plugins." msgstr "一部ã®ãƒ­ãƒ¼ãƒ«ã¯ã€ãƒ­ãƒ¼ãƒ«è‡ªä½“ã®ä¸€éƒ¨ã§ã¯ãªã„ :ref:`ローカルã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ` を使用ã—ã¾ã™ã€‚ã“れらã®ãƒ­ãƒ¼ãƒ«ã‚’コレクションã«ç§»å‹•ã™ã‚‹ã¨ã€ãれらã®ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚çµ±åˆçš„ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``ansible.legacy`` を追加ã—ã¦ã€ãƒ¬ã‚¬ã‚·ãƒ¼å‹•作を有効ã«ã—ã€ã“れらã®ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``ansible.legacy`` を追加ã™ã‚‹ã“ã¨ã§ã€ãƒ­ãƒ¼ãƒ«ã‚’設定ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®ãƒ—レコレクションã®ãƒ‡ãƒ•ォルトパスを検索ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:418 msgid "To enable a role hosted in a collection to find legacy custom modules and other plugins hosted locally:" msgstr "コレクションã«ãƒ›ã‚¹ãƒˆã•れã¦ã„るロールãŒã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ãƒ›ã‚¹ãƒˆã•れã¦ã„る従æ¥ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ãã®ä»–ã®ãƒ—ラグインを検索ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:420 msgid "Edit the role's ``meta/main.yml`` and add the ``ansible.legacy`` collection to your collection-hosted role to enable the use of legacy custom modules and plugins for all tasks:" msgstr "ロール㮠``meta/main.yml`` を編集ã—ã€``ansible.legacy`` コレクションをコレクションホストã®ãƒ­ãƒ¼ãƒ«ã«è¿½åŠ ã—ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«ãƒ¬ã‚¬ã‚·ãƒ¼ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインを使用ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/migrating_roles.rst:427 msgid "Alternatively, you can update the tasks directly by changing ``local_module_name`` to ``ansible.legacy.local_module_name``." msgstr "ã¾ãŸã¯ã€``local_module_name`` ã‚’ ``ansible.legacy.local_module_name`` ã«å¤‰æ›´ã™ã‚‹ã¨ã‚¿ã‚¹ã‚¯ã‚’直接更新ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:5 msgid "The lifecycle of an Ansible module or plugin" msgstr "Ansible モジュールã¾ãŸã¯ãƒ—ラグインã®ãƒ©ã‚¤ãƒ•サイクル" #: ../../rst/dev_guide/module_lifecycle.rst:7 msgid "Modules and plugins in the main Ansible repository have a defined life cycle, from the first introduction to final removal. The module and plugin lifecycle is tied to the `Ansible release cycle `. A module or plugin may move through these four stages:" msgstr "メイン㮠Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã«ã¯ã€æœ€åˆã®å°Žå…¥ã‹ã‚‰æœ€å¾Œã®å‰Šé™¤ã¾ã§ãƒ©ã‚¤ãƒ•サイクルãŒå®šç¾©ã•れã¾ã™ã€‚モジュールãŠã‚ˆã³ãƒ—ラグインã®ãƒ©ã‚¤ãƒ•サイクルã¯ã€`Ansible リリースサイクル ` ã«ç´ã¥ã‘られã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã¯ã€æ¬¡ã® 4 ã¤ã®æ®µéšŽã‚’通éŽã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:10 msgid "When a module or plugin is first accepted into Ansible, we consider it in tech preview and will mark it as such in the documentation." msgstr "モジュールã¾ãŸã¯ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæœ€åˆã« Ansible ã«å—ã‘入れられるã¨ã€ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ãƒ—レビューã§ãれãŒè€ƒæ…®ã•れã€ãã®ã‚ˆã†ã«ãƒžãƒ¼ã‚¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:12 msgid "If a module or plugin matures, the 'preview' mark in the documentation is removed. Backward compatibility for these modules and plugins is maintained but not guaranteed, which means their parameters should be maintained with stable meanings." msgstr "モジュールã¾ãŸã¯ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæˆç†Ÿã™ã‚‹ã¨ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã€Œpreviewã€ãƒžãƒ¼ã‚¯ãŒå‰Šé™¤ã•れã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®å¾Œæ–¹äº’æ›æ€§ã¯ç¶­æŒã•れã¾ã™ãŒä¿è¨¼ã•れã¾ã›ã‚“。ã“れã¯ã€ã“れらã®ãƒ‘ラメーターãŒå®‰å®šã—ãŸæ„味ã§ç¶­æŒã•れるã¹ãã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:14 msgid "If a module's or plugin's target API changes radically, or if someone creates a better implementation of its functionality, we may mark it deprecated. Modules and plugins that are deprecated are still available but they are reaching the end of their life cycle. We retain deprecated modules and plugins for 4 release cycles with deprecation warnings to help users update playbooks and roles that use them." msgstr "モジュールã¾ãŸã¯ãƒ—ラグインã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ API ãŒå¤§å¹…ã«å¤‰æ›´ã•れãŸå ´åˆã€ã¾ãŸã¯èª°ã‹ãŒãã®æ©Ÿèƒ½ã«å¯¾ã—ã¦ã‚ˆã‚Šè‰¯ã„実装を作æˆã—ãŸå ´åˆã¯ã€éžæŽ¨å¥¨ã¨è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã¯å¼•ãç¶šã利用ã§ãã¾ã™ãŒã€ãƒ©ã‚¤ãƒ•サイクルã®çµ‚ã‚りã«è¿‘ã¥ã„ã¦ã„ã¾ã™ã€‚éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグイン㯠4 ã¤ã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã®é–“ä¿æŒã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãれを使用ã™ã‚‹ Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’æ›´æ–°ã§ãるよã†ã«éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:16 msgid "When a module or plugin has been deprecated for four release cycles, it is removed and replaced with a tombstone entry in the routing configuration. Modules and plugins that are removed are no longer shipped with Ansible. The tombstone entry helps users find alternative modules and plugins." msgstr "4 ã¤ã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°è¨­å®šã® tombstone エントリーã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚削除ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグイン㯠Ansible ã«åŒæ¢±ã•れãªããªã‚Šã¾ã™ã€‚tombstone エントリーã¯ã€åˆ¥ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:18 msgid "For modules and plugins in collections, the lifecycle is similar. Since ansible-base 2.10, it is no longer possible to mark modules as 'preview' or 'stable'." msgstr "コレクションã«ã‚るモジュールãŠã‚ˆã³ãƒ—ラグインã§ã¯ã€ãƒ©ã‚¤ãƒ•サイクルãŒé¡žä¼¼ã—ã¦ã„ã¾ã™ã€‚ansible-base 2.10 ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’「previewã€ã¾ãŸã¯ã€Œstableã€ã®ãƒžãƒ¼ã‚¯ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:23 msgid "Deprecating modules and plugins in the Ansible main repository" msgstr "Ansible メインリãƒã‚¸ãƒˆãƒªãƒ¼ã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®éžæŽ¨å¥¨åŒ–" #: ../../rst/dev_guide/module_lifecycle.rst:25 msgid "To deprecate a module in ansible-core, you must:" msgstr "ansible-core ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:27 msgid "Rename the file so it starts with an ``_``, for example, rename ``old_cloud.py`` to ``_old_cloud.py``. This keeps the module available and marks it as deprecated on the module index pages." msgstr "ファイルã®åå‰ã‚’ ``_`` ã§å§‹ã¾ã‚‹ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``old_cloud.py`` ã®åå‰ã‚’ ``_old_cloud.py`` ã«å¤‰æ›´ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒåˆ©ç”¨å¯èƒ½ã®ã¾ã¾ã¨ãªã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¸ã§éžæŽ¨å¥¨ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:28 msgid "Mention the deprecation in the relevant changelog (by creating a changelog fragment with a section ``deprecated_features``)." msgstr "(``deprecated_features`` セクションを使用ã—㦠changelog フラグメントを作æˆã™ã‚‹ã“ã¨ã§) 関連ã™ã‚‹å¤‰æ›´ãƒ­ã‚°ã§éžæŽ¨å¥¨ã¨ãªã£ãŸã“ã¨ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:29 msgid "Reference the deprecation in the relevant ``porting_guide_core_x.y.rst``." msgstr "関連ã™ã‚‹ ``porting_guide_core_x.y.rst`` ã§éžæŽ¨å¥¨åŒ–ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:30 msgid "Add ``deprecated:`` to the documentation with the following sub-values:" msgstr "次ã®ã‚µãƒ–値を使用ã—ã¦ã€``deprecated:`` をドキュメントã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst msgid "removed_in" msgstr "removed_in" #: ../../rst/dev_guide/module_lifecycle.rst:32 #: ../../rst/dev_guide/module_lifecycle.rst:63 msgid "A ``string``, such as ``\"2.10\"``; the version of Ansible where the module will be replaced with a docs-only module stub. Usually current release +4. Mutually exclusive with :removed_by_date:." msgstr "``\"2.10\"`` ãªã©ã® ``string`` (モジュールãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã¿ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¹ã‚¿ãƒ–ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³)。通常ã€ç¾åœ¨ã®ãƒªãƒªãƒ¼ã‚¹ +4 ã«ãªã‚Šã¾ã™ã€‚:removed_by_date: ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst msgid "remove_by_date" msgstr "remove_by_date" #: ../../rst/dev_guide/module_lifecycle.rst:33 #: ../../rst/dev_guide/module_lifecycle.rst:64 msgid "(Added in ansible-base 2.10). An ISO 8601 formatted date when the module will be removed. Usually 2 years from the date the module is deprecated. Mutually exclusive with :removed_in:." msgstr "(ansible-base 2.10 ã«è¿½åŠ ã•れã¾ã™)。モジュールã®å‰Šé™¤æ™‚ã« ISO 8601 å½¢å¼ã®æ—¥ä»˜ã€‚通常ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒéžæŽ¨å¥¨ã«ãªã£ã¦ã‹ã‚‰ 2 å¹´é–“ã¨ãªã‚Šã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€:removed_in: ã¨ç›¸äº’排他的ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst msgid "why" msgstr "ç†ç”±" #: ../../rst/dev_guide/module_lifecycle.rst:34 #: ../../rst/dev_guide/module_lifecycle.rst:65 msgid "Optional string that used to detail why this has been removed." msgstr "ã“れãŒå‰Šé™¤ã•れãŸç†ç”±ã®è©³ç´°ã«ä½¿ç”¨ã•れる任æ„ã®æ–‡å­—列ã§ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst msgid "alternative" msgstr "代替方法" #: ../../rst/dev_guide/module_lifecycle.rst:35 #: ../../rst/dev_guide/module_lifecycle.rst:66 msgid "Inform users they should do instead, for example, ``Use M(whatmoduletouseinstead) instead.``." msgstr "ユーザーãŒä»£ã‚りã«ã™ã¹ãã“ã¨ã‚’通知ã—ã¾ã™ (例: ``Use M(whatmoduletouseinstead) instead.``)。" #: ../../rst/dev_guide/module_lifecycle.rst:37 msgid "For an example of documenting deprecation, see this `PR that deprecates multiple modules `_. Some of the elements in the PR might now be out of date." msgstr "ドキュメントã®éžæŽ¨å¥¨ã®ä¾‹ã¯ã€ã€Œ`複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ PR `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。PR ã®ä¸€éƒ¨ã®è¦ç´ ãŒæœ€æ–°ã§ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:41 msgid "Deprecating modules and plugins in a collection" msgstr "コレクションã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®éžæŽ¨å¥¨åŒ–" #: ../../rst/dev_guide/module_lifecycle.rst:43 msgid "To deprecate a module in a collection, you must:" msgstr "コレクションã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:45 msgid "Add a ``deprecation`` entry to ``plugin_routing`` in ``meta/runtime.yml``. For example, to deprecate the module ``old_cloud``, add:" msgstr "``meta/runtime.yml`` ã® ``plugin_routing`` ã« ``deprecation`` エントリーを追加ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``old_cloud`` ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:56 msgid "For other plugin types, you have to replace ``modules:`` with ``:``, for example ``lookup:`` for lookup plugins." msgstr "ä»–ã®ãƒ—ラグインタイプã®å ´åˆã€``modules:`` ã‚’ ``:`` ã«ç½®ãæ›ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ (検索プラグインã®å ´åˆã¯ ``lookup:`` ãªã©)。" #: ../../rst/dev_guide/module_lifecycle.rst:58 msgid "Instead of ``removal_version``, you can also use ``removal_date`` with an ISO 8601 formatted date after which the module will be removed in a new major version of the collection." msgstr "``removal_version`` ã®ä»£ã‚りã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ–°ã—ã„メジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå‰Šé™¤ã•れるã¾ã§ã® ISO 8601 å½¢å¼ã®æ—¥ä»˜ã‚’入れ㟠``removal_date`` を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:60 msgid "Mention the deprecation in the relevant changelog. If the collection uses ``antsibull-changelog``, create a changelog fragment with a section ``deprecated_features``." msgstr "関連ã™ã‚‹å¤‰æ›´ãƒ­ã‚°ã§éžæŽ¨å¥¨ã«ãªã£ãŸã“ã¨ã‚’説明ã—ã¾ã™ (コレクション㌠``antsibull-changelog`` を使用ã™ã‚‹å ´åˆã¯ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ ``deprecated_features`` を指定ã—㦠changelog フラグメントを作æˆã—ã¾ã™)。" #: ../../rst/dev_guide/module_lifecycle.rst:61 msgid "Add ``deprecated:`` to the documentation of the module or plugin with the following sub-values:" msgstr "以下ã®ã‚µãƒ–値をå«ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã« ``deprecated:`` を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:69 msgid "Changing a module or plugin name in the Ansible main repository" msgstr "Ansible メインリãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインåã®å¤‰æ›´" #: ../../rst/dev_guide/module_lifecycle.rst:71 msgid "You can also rename a module and keep a deprecated alias to the old name by using a symlink that starts with _. This example allows the ``stat`` module to be called with ``fileinfo``, making the following examples equivalent::" msgstr "_ ã§å§‹ã¾ã‚‹ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã‚’変更ã—ã€éžæŽ¨å¥¨ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’å¤ã„åå‰ã«ä¿ã¤ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``stat`` モジュールを ``fileinfo`` ã§å‘¼ã³å‡ºã™ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€æ¬¡ã®ä¾‹ã¯åŒç­‰ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:81 msgid "Renaming a module or plugin in a collection, or redirecting a module or plugin to another collection" msgstr "コレクションã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®åå‰å¤‰æ›´ã€ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを別ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ" #: ../../rst/dev_guide/module_lifecycle.rst:83 msgid "To rename a module or plugin in a collection, or to redirect a module or plugin to another collection, you need to add a ``redirect`` entry to ``plugin_routing`` in ``meta/runtime.yml``. For example, to redirect the module ``old_cloud`` to ``foo.bar.new_cloud``, add:" msgstr "コレクションã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã®åå‰ã‚’変更ã™ã‚‹ã‹ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを別ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ã«ã¯ã€``redirect`` エントリーをã€``meta/runtime.yml`` ã® ``plugin_routing`` ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``old_cloud`` ã‚’ ``foo.bar.new_cloud`` ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:92 msgid "If you want to deprecate the old name, add a ``deprecation:`` entry (see above):" msgstr "å¤ã„åå‰ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹ã«ã¯ã€``deprecation:`` エントリーを追加ã—ã¾ã™ (上記をå‚ç…§)。" #: ../../rst/dev_guide/module_lifecycle.rst:104 msgid "You need to use the Fully Qualified Collection Name (FQCN) of the new module/plugin name, even if it is located in the same collection as the redirect. By using a FQCN from another collection, you redirect the module/plugin to that collection." msgstr "æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインåã®å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã¨åŒã˜ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹å ´åˆã§ã‚‚ã€åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ FQCN を使用ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«/プラグインをãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:106 msgid "If you need to support Ansible 2.9, please note that Ansible 2.9 does not know about ``meta/runtime.yml``. With Ansible 2.9 you can still rename plugins and modules inside one collection by using symbolic links. Note that ansible-base 2.10, ansible-core 2.11, and newer will prefer ``meta/runtime.yml`` entries over symbolic links." msgstr "Ansible 2.9 をサãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€Ansible 2.9 㯠``meta/runtime.yml`` ã‚’èªè­˜ã—ãªã„ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。Ansible 2.9 ã§ã¯ã€ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦ã€1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã®ãƒ—ラグインã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã‚’変更ã§ãã¾ã™ã€‚ansible-base 2.10ã€ansible-core 2.11 以é™ã¯ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚ˆã‚Šã‚‚ ``meta/runtime.yml`` エントリーを使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:110 msgid "Tombstoning a module or plugin in a collection" msgstr "コレクションã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを破棄" #: ../../rst/dev_guide/module_lifecycle.rst:112 msgid "To remove a deprecated module or plugin from a collection, you need to tombstone it:" msgstr "コレクションã‹ã‚‰éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを削除ã™ã‚‹ã«ã¯ã€ãれを破棄ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:114 msgid "Remove the module or plugin file with related files like tests, documentation references, and documentation." msgstr "テストã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå‚ç…§ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãªã©ã€é–¢é€£ãƒ•ァイルã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインファイルを削除ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:115 msgid "Add a tombstone entry in ``meta/runtime.yml``. For example, to tombstone the module ``old_cloud``, add:" msgstr "``meta/runtime.yml`` ã« tombstone エントリーを追加ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``old_cloud`` を廃棄ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/module_lifecycle.rst:126 msgid "Instead of ``removal_version``, you can also use ``removal_date`` with an ISO 8601 formatted date. The date should be the date of the next major release." msgstr "``removal_version`` ã®ä»£ã‚りã«ã€ISO 8601 å½¢å¼ã®æ—¥ä»˜ã‚’入れ㟠``removal_date`` を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®æ—¥ä»˜ã¯ã€æ¬¡ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®æ—¥ä»˜ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:3 msgid "Ansible architecture" msgstr "Ansible アーキテクãƒãƒ£ãƒ¼" #: ../../rst/dev_guide/overview_architecture.rst:5 msgid "Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs." msgstr "Ansible ã¯ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロビジョニングã€è¨­å®šç®¡ç†ã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントã€ã‚µãƒ¼ãƒ“ス内オーケストレーションã€ãŠã‚ˆã³ãã®ä»–ã® IT ã®ãƒ‹ãƒ¼ã‚ºã‚’自動化ã™ã‚‹éžå¸¸ã«ã‚·ãƒ³ãƒ—ル㪠IT 自動化エンジンã§ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:7 msgid "Being designed for multi-tier deployments since day one, Ansible models your IT infrastructure by describing how all of your systems inter-relate, rather than just managing one system at a time." msgstr "Ansible ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã•れãŸãã®æ—¥ã‹ã‚‰å¤šå±¤ãƒ‡ãƒ—ロイメント用ã«è¨­è¨ˆã•れã¦ãŠã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ã‚’ 1 ã¤ãšã¤ç®¡ç†ã™ã‚‹ä»£ã‚りã«ã€ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ãŒã©ã®ã‚ˆã†ã«ç›¸äº’ã«é–¢é€£ã—ã¦ã„ã‚‹ã‹ã‚’記述ã™ã‚‹ã“ã¨ã§ã€IT インフラストラクãƒãƒ£ãƒ¼ã‚’モデル化ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:9 msgid "It uses no agents and no additional custom security infrastructure, so it's easy to deploy - and most importantly, it uses a very simple language (YAML, in the form of Ansible Playbooks) that allow you to describe your automation jobs in a way that approaches plain English." msgstr "エージェントを使用ã›ãšã€ã‚«ã‚¹ã‚¿ãƒ ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’追加ã—ãªã„ãŸã‚ã€ç°¡å˜ã«ãƒ‡ãƒ—ロイメントã§ãã¾ã™ã€‚最もé‡è¦ãªã“ã¨ã¯ã€éžå¸¸ã«å˜ç´”ãªè¨€èªž (YAML ã‚’ Ansible Playbook ã®å½¢å¼ã§ä½¿ç”¨) を使用ã—ã¦ã„ã‚‹ãŸã‚ã€åˆ†ã‹ã‚Šã‚„ã™ã„英語ã«è¿‘ã¥ã‘る方法ã§è‡ªå‹•化ジョブを記述ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:11 msgid "In this section, we'll give you a really quick overview of how Ansible works so you can see how the pieces fit together." msgstr "本セクションã§ã¯ã€Ansible ã®å‹•ä½œã®æ¦‚è¦ã‚’ç°¡å˜ã«èª¬æ˜Žã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šå„ピースãŒã©ã®ã‚ˆã†ã«çµ„ã¿åˆã‚ã•れã¦ã„ã‚‹ã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:17 msgid "Modules" msgstr "モジュール" #: ../../rst/dev_guide/overview_architecture.rst:19 msgid "Ansible works by connecting to your nodes and pushing out scripts called \"Ansible modules\" to them. Most modules accept parameters that describe the desired state of the system. Ansible then executes these modules (over SSH by default), and removes them when finished. Your library of modules can reside on any machine, and there are no servers, daemons, or databases required." msgstr "Ansible ã¯ã€ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã€ã€ŒAnsible モジュールã€ã¨å‘¼ã°ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トをノードã«ãƒ—ッシュã™ã‚‹ã“ã¨ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®å¸Œæœ›ã®çŠ¶æ…‹ã‚’è¨˜è¿°ã™ã‚‹ãƒ‘ラメーターをå—ã‘入れã¾ã™ã€‚ãã®å¾Œã€Ansible ã¯ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ (デフォルトã§ã¯ SSH 上ã§) 実行ã—ã¦ã€çµ‚了ã™ã‚‹ã¨å‰Šé™¤ã•れã¾ã™ã€‚モジュールã®ãƒ©ã‚¤ãƒ–ラリーã¯ã©ã®ãƒžã‚·ãƒ³ã«ã‚‚é…ç½®ã§ãã€ã‚µãƒ¼ãƒãƒ¼ã€ãƒ‡ãƒ¼ãƒ¢ãƒ³ã€ã¾ãŸã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/overview_architecture.rst:22 msgid "You can :ref:`write your own modules `, though you should first consider :ref:`whether you should `. Typically you'll work with your favorite terminal program, a text editor, and probably a version control system to keep track of changes to your content. You may write specialized modules in any language that can return JSON (Ruby, Python, bash, and so on)." msgstr ":ref:`独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’記述 ` ãŒã§ãã¾ã™ãŒã€æœ€åˆã« :ref:`記述ã™ã¹ãã‹ã©ã†ã‹ ` を検討ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚通常ã€ä»»æ„ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ãƒ—ログラムã€ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã€ãŠã‚ˆã³ãŠãらããƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¦ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¸ã®å¤‰æ›´ã‚’追跡ã—ã¾ã™ã€‚JSON ã‚’è¿”ã™ã“ã¨ãŒã§ãã‚‹ä»»æ„ã®è¨€èªž (Rubyã€Pythonã€bash ãªã©) ã§ç‰¹æ®Šãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:25 msgid "Module utilities" msgstr "モジュールユーティリティー" #: ../../rst/dev_guide/overview_architecture.rst:27 msgid "When multiple modules use the same code, Ansible stores those functions as module utilities to minimize duplication and maintenance. For example, the code that parses URLs is ``lib/ansible/module_utils/url.py``. You can :ref:`write your own module utilities ` as well. Module utilities may only be written in Python or in PowerShell." msgstr "複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒåŒã˜ã‚³ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹å ´åˆã¯ã€Ansible ãŒã“ã®æ©Ÿèƒ½ã‚’モジュールユーティリティーã¨ã—ã¦ä¿å­˜ã—ã€é‡è¤‡ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’最å°é™ã«æŠ‘ãˆã¾ã™ã€‚ãŸã¨ãˆã°ã€URL ã‚’è§£æžã™ã‚‹ã‚³ãƒ¼ãƒ‰ã¯ ``lib/ansible/module_utils/url.py`` ã¨ãªã‚Šã¾ã™ã€‚:ref:`独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’記述 ` ã‚’ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚モジュールユーティリティーã¯ã€Python ã¾ãŸã¯ PowerShell ã§ã®ã¿è¨˜è¿°ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:30 msgid "Plugins" msgstr "プラグイン" #: ../../rst/dev_guide/overview_architecture.rst:32 msgid ":ref:`Plugins ` augment Ansible's core functionality. While modules execute on the target system in separate processes (usually that means on a remote system), plugins execute on the control node within the ``/usr/bin/ansible`` process. Plugins offer options and extensions for the core features of Ansible - transforming data, logging output, connecting to inventory, and more. Ansible ships with a number of handy plugins, and you can easily :ref:`write your own `. For example, you can write an :ref:`inventory plugin ` to connect to any datasource that returns JSON. Plugins must be written in Python." msgstr ":ref:`Plugins ` ã¯ã€Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã‚’æ‹¡å¼µã™ã‚‹ã‚‚ã®ã§ã™ã€‚モジュールãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã®åˆ¥ã®ãƒ—ロセス (通常ã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ä¸Š) ã§å®Ÿè¡Œã•れるã®ã«å¯¾ã—ã€ãƒ—ラグインã¯ã€``/usr/bin/ansible`` プロセス内ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã•れã¾ã™ã€‚プラグインã¯ã€ãƒ‡ãƒ¼ã‚¿ã®å¤‰æ›ã€å‡ºåŠ›ã®ãƒ­ã‚®ãƒ³ã‚°ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¸ã®æŽ¥ç¶šãªã©ã€Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã®ã‚ªãƒ—ションや拡張機能をæä¾›ã—ã¾ã™ã€‚Ansible ã«ã¯ä¾¿åˆ©ãªãƒ—ラグインãŒå¤šæ•°åŒæ¢±ã•れã¦ãŠã‚Šã€ç°¡å˜ã« :ref:`自作 ` ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€JSON ã‚’è¿”ã™ã‚ã‚‰ã‚†ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚½ãƒ¼ã‚¹ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã® :ref:`inventory プラグイン ` を記述ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚プラグイン㯠Python ã§è¨˜è¿°ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:35 msgid "Inventory" msgstr "インベントリー" #: ../../rst/dev_guide/overview_architecture.rst:37 msgid "By default, Ansible represents the machines it manages in a file (INI, YAML, and so on) that puts all of your managed machines in groups of your own choosing." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€è‡ªèº«ãŒé¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã«ã™ã¹ã¦ã®ç®¡ç†ãƒžã‚·ãƒ³ã‚’é…ç½®ã™ã‚‹ãƒ•ァイル (INIã€YAML ãªã©) ã§ç®¡ç†ã™ã‚‹ãƒžã‚·ãƒ³ã‚’表ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:39 msgid "To add new machines, there is no additional SSL signing server involved, so there's never any hassle deciding why a particular machine didn't get linked up due to obscure NTP or DNS issues." msgstr "æ–°ã—ã„マシンを追加ã™ã‚‹å ´åˆã€è¿½åŠ ã® SSL ç½²åサーãƒãƒ¼ã¯ãªã„ãŸã‚ã€ä¸æ˜Žçž­ãª NTP ã¾ãŸã¯ DNS ã®å•題ãŒåŽŸå› ã§ç‰¹å®šã®ãƒžã‚·ãƒ³ãŒãƒªãƒ³ã‚¯ã•れãªã‹ã£ãŸç†ç”±ã‚’判断ã™ã‚‹ã®ã«è‹¦åŠ´ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/overview_architecture.rst:41 msgid "If there's another source of truth in your infrastructure, Ansible can also connect to that. Ansible can draw inventory, group, and variable information from sources like EC2, Rackspace, OpenStack, and more." msgstr "インフラストラクãƒãƒ£ãƒ¼ã«ä¿¡é ¼ã§ãる別ã®ã‚½ãƒ¼ã‚¹ãŒã‚ã‚‹å ´åˆã¯ã€Ansible ã‚‚ã“ã‚Œã«æŽ¥ç¶šã§ãã¾ã™ã€‚Ansible ã¯ã€EC2ã€Rackspaceã€OpenStack ãªã©ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³å¤‰æ•°æƒ…報をå–り出ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:43 msgid "Here's what a plain text inventory file looks like::" msgstr "プレーンテキストã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:54 msgid "Once inventory hosts are listed, variables can be assigned to them in simple text files (in a subdirectory called 'group_vars/' or 'host_vars/' or directly in the inventory file." msgstr "インベントリーホストã®ä¸€è¦§ãŒä½œæˆã•れるã¨ã€å˜ç´”ãªãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイル形å¼ã§ (「group_vars/ã€ã¾ãŸã¯ã€Œhost_vars/ã€ã¨ã„ã†åå‰ã®ã‚µãƒ–ディレクトリー内ã€ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«ç›´æŽ¥) 割り当ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:56 msgid "Or, as already mentioned, use a dynamic inventory to pull your inventory from data sources like EC2, Rackspace, or OpenStack." msgstr "ã¾ãŸã¯ã€ä¸Šè¿°ã®ã‚ˆã†ã«ã€å‹•的インベントリーを使用ã—ã¦ã€EC2ã€Rackspaceã€OpenStack ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’プルã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:59 msgid "Playbooks" msgstr "Playbook" #: ../../rst/dev_guide/overview_architecture.rst:61 msgid "Playbooks can finely orchestrate multiple slices of your infrastructure topology, with very detailed control over how many machines to tackle at a time. This is where Ansible starts to get most interesting." msgstr "Playbook ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ãƒˆãƒãƒ­ã‚¸ãƒ¼ã®è¤‡æ•°ã®ã‚¹ãƒ©ã‚¤ã‚¹ã‚’ç´°ã‹ã調整 (オーケストレーション) ã™ã‚‹ã“ã¨ãŒã§ãã€åŒæ™‚ã«å–ã‚Šçµ„ã‚€ãƒžã‚·ãƒ³ã®æ•°ã‚’éžå¸¸ã«ç´°ã‹ã制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã“ã‹ã‚‰ãŒã€Ansible ã§æœ€ã‚‚魅力的ãªç‚¹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:63 msgid "Ansible's approach to orchestration is one of finely-tuned simplicity, as we believe your automation code should make perfect sense to you years down the road and there should be very little to remember about special syntax or features." msgstr "Ansible ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã¸ã®ã‚¢ãƒ—ローãƒã¯ã€ç´°ã‹ã調整ã•れãŸç°¡ç´ åŒ–ã® 1 ã¤ã§ã™ã€‚通常ã€è‡ªå‹•化コードã¯ä»Šå¾Œä½•å¹´ã«ã‚‚渡ã£ã¦å®Œå…¨ã«ç†è§£ã§ãã‚‹ã‚‚ã®ã§ã‚りã€ç‰¹åˆ¥ãªæ§‹æ–‡ã‚„機能ã«ã¤ã„ã¦è¦šãˆã¦ãŠãã¹ãã“ã¨ã¯ã»ã¨ã‚“ã©ãªã„ãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:65 msgid "Here's what a simple playbook looks like::" msgstr "以下ã¯å˜ç´”㪠Playbook ã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:82 msgid "The Ansible search path" msgstr "Ansible 検索パス" #: ../../rst/dev_guide/overview_architecture.rst:84 msgid "Modules, module utilities, plugins, playbooks, and roles can live in multiple locations. If you write your own code to extend Ansible's core features, you may have multiple files with similar or the same names in different locations on your Ansible control node. The search path determines which of these files Ansible will discover and use on any given playbook run." msgstr "モジュールã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ãƒ—ラグインã€Playbookã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã¯è¤‡æ•°ã®å ´æ‰€ã«ç½®ãã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã‚’æ‹¡å¼µã™ã‚‹ãŸã‚ã«ç‹¬è‡ªã®ã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹å ´åˆã¯ã€Ansible コントロールノードã®ç•°ãªã‚‹å ´æ‰€ã«åŒã˜åå‰ã¾ãŸã¯é¡žä¼¼ã™ã‚‹åå‰ã‚’æŒã¤ãƒ•ァイルãŒè¤‡æ•°å­˜åœ¨ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚検索パスã«ã‚ˆã‚Šã€Ansible ãŒç‰¹å®šã® Playbook ã®å®Ÿè¡Œã§æ¤œå‡ºã—ã¦ä½¿ç”¨ã™ã‚‹ã“れらã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ±ºã¾ã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:87 msgid "Ansible's search path grows incrementally over a run. As Ansible finds each playbook and role included in a given run, it appends any directories related to that playbook or role to the search path. Those directories remain in scope for the duration of the run, even after the playbook or role has finished executing. Ansible loads modules, module utilities, and plugins in this order:" msgstr "Ansible ã®æ¤œç´¢ãƒ‘スã¯ã€å®Ÿè¡Œä¸­ã«å¾ã€…ã«å¤§ãããªã‚Šã¾ã™ã€‚Ansible ã¯ã€ç‰¹å®šã®å®Ÿè¡Œã«å«ã¾ã‚Œã‚‹å„ Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’見ã¤ã‘ã‚‹ã¨ã€ãã® Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã«é–¢é€£ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’検索パスã«è¿½åŠ ã—ã¾ã™ã€‚ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®å®Ÿè¡ŒãŒçµ‚了ã—ãŸå¾Œã§ã‚‚ã€å®Ÿè¡Œä¸­ã¯ã‚¹ã‚³ãƒ¼ãƒ—内ã«ç•™ã¾ã‚Šã¾ã™ã€‚Ansible ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ãŠã‚ˆã³ãƒ—ラグインを次ã®é †åºã§èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:93 msgid "Directories adjacent to a playbook specified on the command line. If you run Ansible with ``ansible-playbook /path/to/play.yml``, Ansible appends these directories if they exist:" msgstr "ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã—㟠Playbook ã«éš£æŽ¥ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚``ansible-playbook /path/to/play.yml`` ã§ Ansible を実行ã—ã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ãŒãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:101 msgid "Directories adjacent to a playbook that is statically imported by a playbook specified on the command line. If ``play.yml`` includes ``- import_playbook: /path/to/subdir/play1.yml``, Ansible appends these directories if they exist:" msgstr "ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã•れ㟠Playbook ã«ã‚ˆã£ã¦é™çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れる Playbook ã«éš£æŽ¥ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚``play.yml`` ã« ``- import_playbook: /path/to/subdir/play1.yml`` ãŒå«ã¾ã‚Œã¦ã„ã¦ã€ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ãŒãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:111 msgid "Subdirectories of a role directory referenced by a playbook. If ``play.yml`` runs ``myrole``, Ansible appends these directories if they exist:" msgstr "Playbook ã«ã‚ˆã£ã¦å‚ç…§ã•れるロールディレクトリーã®ã‚µãƒ–ディレクトリー。``play.yml`` ㌠``myrole`` を実行ã—ã€æ¬¡ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ãŒãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:120 msgid "Directories specified as default paths in ``ansible.cfg`` or by the related environment variables, including the paths for the various plugin types. See :ref:`ansible_configuration_settings` for more information. Sample ``ansible.cfg`` fields:" msgstr "``ansible.cfg`` ã®ãƒ‡ãƒ•ォルトパスã¨ã—ã¦ã€ã¾ãŸã¯ã•ã¾ã–ã¾ãªãƒ—ラグインタイプã®ãƒ‘スãªã©ã€é–¢é€£ã™ã‚‹ç’°å¢ƒå¤‰æ•°ã«ã‚ˆã‚ŠæŒ‡å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚詳細ã¯ã€ã€Œ:ref:`ansible_configuration_settings`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。サンプル㮠``ansible.cfg`` フィールドã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:131 msgid "Sample environment variables:" msgstr "以下ã¯ã€ç’°å¢ƒå¤‰æ•°ã®ä¾‹ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:140 msgid "The standard directories that ship as part of the Ansible distribution." msgstr "Ansible ディストリビューションã«åŒæ¢±ã•れる標準ディレクトリー。" #: ../../rst/dev_guide/overview_architecture.rst:144 msgid "Modules, module utilities, and plugins in user-specified directories will override the standard versions. This includes some files with generic names. For example, if you have a file named ``basic.py`` in a user-specified directory, it will override the standard ``ansible.module_utils.basic``." msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚るモジュールã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ãŠã‚ˆã³ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¯æ¨™æº–ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上書ãã—ã¾ã™ã€‚ã“れã«ã¯ã€ä¸€èˆ¬çš„ãªåå‰ã®ãƒ•ァイルもå«ã¾ã‚Œã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼æŒ‡å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``basic.py`` ã¨ã„ã†åå‰ã®ãƒ•ァイルãŒã‚ã‚‹å ´åˆã¯ã€æ¨™æº–ã® ``ansible.module_utils.basic`` を上書ãã—ã¾ã™ã€‚" #: ../../rst/dev_guide/overview_architecture.rst:149 msgid "If you have more than one module, module utility, or plugin with the same name in different user-specified directories, the order of commands at the command line and the order of includes and roles in each play will affect which one is found and used on that particular play." msgstr "åŒã˜åå‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€ã¾ãŸã¯ãƒ—ラグインãŒè¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æŒ‡å®šãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹å ´åˆã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã®ã‚³ãƒžãƒ³ãƒ‰ã®é †åºã‚„ã€å„プレイã§ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã¨ãƒ­ãƒ¼ãƒ«ã®é †åºã¯ã€ãã®ç‰¹å®šã®ãƒ—レイã§ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã€ä½¿ç”¨ã•れるã‹ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:5 msgid "Guidelines for Ansible Amazon AWS module development" msgstr "Ansible Amazon AWS モジュール開発ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:7 msgid "The Ansible AWS collection (on `Galaxy `_, source code `repository `_) is maintained by the Ansible AWS Working Group. For further information see the `AWS working group community page `_. If you are planning to contribute AWS modules to Ansible then getting in touch with the working group is a good way to start, especially because a similar module may already be under development." msgstr "Ansible AWS コレクション (`Galaxy `_ ã§ã¯ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `レãƒã‚¸ãƒˆãƒªãƒ¼ `_) ã¯ã€Ansible AWS ã®ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ç¶­æŒã•れã¾ã™ã€‚詳細㯠`AWS ワーキンググループã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒšãƒ¼ã‚¸ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。AWS モジュールを Ansible ã«æä¾›ã™ã‚‹ã“ã¨ã‚’計画ã—ã¦ã„ã‚‹å ´åˆã¯ã€ç‰¹ã«åŒæ§˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã™ã§ã«é–‹ç™ºä¸­ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ—ã«é€£çµ¡ã™ã‚‹ã“ã¨ã‹ã‚‰å§‹ã‚ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:13 #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:39 #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:23 #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:37 #: ../../rst/dev_guide/testing_running_locally.rst:18 msgid "Requirements" msgstr "è¦ä»¶" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:16 msgid "Python Compatibility" msgstr "Python ã®äº’æ›æ€§" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:18 msgid "AWS content in Ansible 2.9 and 1.x collection releases supported Python 2.7 and newer." msgstr "Ansible 2.9 ãŠã‚ˆã³ 1.x コレクションリリース㮠AWS コンテンツã¯ã€Python 2.7 以é™ã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:20 msgid "Starting with the 2.0 releases of both collections, Python 2.7 support will be ended in accordance with AWS' `end of Python 2.7 support `_. Contributions to both collections that target the 2.0 or later collection releases can be written to support Python 3.6+ syntax." msgstr "両方ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ 2.0 リリース以é™ã€Python 2.7 サãƒãƒ¼ãƒˆã¯ AWS ã® `Python 2.7 サãƒãƒ¼ãƒˆã®çµ‚了 `_ ã«å¾“ã£ã¦çµ‚了ã—ã¾ã™ã€‚2.0 以é™ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒªãƒ¼ã‚¹ã‚’ターゲットã¨ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã¸ã®è²¢çŒ®ã«ã€Python 3.6 以é™ã®æ§‹æ–‡ã‚’記載ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:23 msgid "SDK Version Support" msgstr "SDK ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:25 msgid "Starting with the 2.0 releases of both collections, it is generally the policy to support the versions of botocore and boto3 that were released 12 months prior to the most recent major collection release, following semantic versioning (for example, 2.0.0, 3.0.0)." msgstr "両方ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® 2.0 リリース以é™ã¯ã€é€šå¸¸ã€æœ€æ–°ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒªãƒ¼ã‚¹ã® 12 ã‹æœˆå‰ã«ãƒªãƒªãƒ¼ã‚¹ã•れ㟠botocore 㨠boto3 ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒãƒªã‚·ãƒ¼ã¨ãªã‚Šã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚° (ãŸã¨ãˆã°ã€2.0.0ã€3.0.0 ) ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:27 msgid "Features and functionality that require newer versions of the SDK can be contributed provided they are noted in the module documentation:" msgstr "SDK ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å¿…è¦ã¨ã™ã‚‹æ©Ÿèƒ½ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¨˜è¼‰ã•れã¦ã„ã‚‹å ´åˆã«æä¾›ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:44 msgid "And handled using the ``botocore_at_least`` helper method:" msgstr "ã¾ãŸã€``botocore_at_least`` ヘルパーメソッドを使用ã—ã¦å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:54 msgid "Maintaining existing modules" msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:57 msgid "Fixing bugs" msgstr "ãƒã‚°ã®ä¿®æ­£" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:59 msgid "Bug fixes to code that relies on boto will still be accepted. When possible, the code should be ported to use boto3." msgstr "boto ã«ä¾å­˜ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã«å¯¾ã™ã‚‹ãƒã‚°ä¿®æ­£ã¯å¼•ãç¶šãæ‰¿èªã•れã¾ã™ã€‚å¯èƒ½ã§ã‚れã°ã€ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ã€boto3 を使用ã™ã‚‹ã‚ˆã†ã«ç§»æ¤ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:63 msgid "Adding new features" msgstr "æ–°ã—ã„æ©Ÿèƒ½ã®è¿½åŠ " #: ../../rst/dev_guide/platforms/aws_guidelines.rst:65 msgid "Try to keep backward compatibility with relatively recent versions of boto3. That means that if you want to implement some functionality that uses a new feature of boto3, it should only fail if that feature actually needs to be run, with a message stating the missing feature and minimum required version of boto3." msgstr "比較的最近ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® boto3 ã¨ã®ä¸‹ä½äº’æ›æ€§ã‚’ä¿ã¤ã‚ˆã†ã«ã—ã¦ãã ã•ã„。ã¤ã¾ã‚Šã€boto3 ã®æ–°æ©Ÿèƒ½ã‚’使用ã™ã‚‹ä¸€éƒ¨ã®æ©Ÿèƒ½ã‚’実装ã™ã‚‹å ´åˆã¯ã€ãã®æ©Ÿèƒ½ã‚’実際ã«å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã®ã¿å¤±æ•—ã—ã€æ¬ è½ã—ã¦ã„ã‚‹æ©Ÿèƒ½ã¨æœ€ä½Žé™å¿…è¦ãª boto3 ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’示ã™ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:70 msgid "Use feature testing (for example, ``hasattr('boto3.module', 'shiny_new_method')``) to check whether boto3 supports a feature rather than version checking. For example, from the ``ec2`` module:" msgstr "機能テスト (例: ``hasattr('boto3.module', 'shiny_new_method')``) を使用ã—ã¦ã€boto3 ãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚§ãƒƒã‚¯ã§ã¯ãªã機能をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``ec2`` モジュールã‹ã‚‰ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:82 msgid "Migrating to boto3" msgstr "boto3 ã¸ã®ç§»è¡Œ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:84 msgid "Prior to Ansible 2.0, modules were written in either boto3 or boto. We are still porting some modules to boto3. Modules that still require boto should be ported to use boto3 rather than using both libraries (boto and boto3). We would like to remove the boto dependency from all modules." msgstr "Ansible 2.0 よりå‰ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ boto3 ã¾ãŸã¯ boto ã®ã„ãšã‚Œã‹ã§è¨˜è¿°ã•れã¦ã„ã¾ã—ãŸã€‚ã¾ã ã€ã„ãã¤ã‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ boto3 ã«ç§»æ¤ã—ã¦ã„ã¾ã™ã€‚ãれã§ã‚‚ boto ãŒå¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ä¸¡æ–¹ã®ãƒ©ã‚¤ãƒ–ラリー (boto 㨠boto3) を使用ã™ã‚‹ã®ã§ã¯ãªãã€boto3 を使用ã™ã‚‹ã‚ˆã†ã«ç§»æ¤ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ boto ä¾å­˜é–¢ä¿‚を削除ã—ãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:88 msgid "Porting code to AnsibleAWSModule" msgstr "AnsibleAWSModule ã¸ã®ã‚³ãƒ¼ãƒ‰ã®ç§»æ¤" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:90 msgid "Some old AWS modules use the generic ``AnsibleModule`` as a base rather than the more efficient ``AnsibleAWSModule``. To port an old module to ``AnsibleAWSModule``, change:" msgstr "一部ã®å¤ã„ AWS モジュールã¯ã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ãª ``AnsibleAWSModule`` ã§ã¯ãªãã€æ±Žç”¨ã® ``AnsibleModule`` をベースã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚å¤ã„モジュールを ``AnsibleAWSModule`` ã«ç§»æ¤ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:98 msgid "to:" msgstr "以下ã®ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:106 msgid "Few other changes are required. AnsibleAWSModule does not inherit methods from AnsibleModule by default, but most useful methods are included. If you do find an issue, please raise a bug report." msgstr "ãã®ä»–ã®å¤‰æ›´ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚AnsibleAWSModule ã¯ãƒ‡ãƒ•ォルト㧠AnsibleModule ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’継承ã—ã¾ã›ã‚“ãŒã€æœ€ã‚‚便利ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚å•題を見ã¤ã‘ãŸå ´åˆã¯ã€ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’æå‡ºã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:110 msgid "When porting, keep in mind that AnsibleAWSModule also will add the default ec2 argument spec by default. In pre-port modules, you should see common arguments specified with:" msgstr "ãƒãƒ¼ãƒˆæ™‚ã«ã¯ã€AnsibleAWSModule ã¯ãƒ‡ãƒ•ォルトã§ãƒ‡ãƒ•ォルト㮠ec2 引数仕様も追加ã—ã¾ã™ã€‚ç§»æ¤å‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ä»¥ä¸‹ã§æŒ‡å®šã•れãŸä¸€èˆ¬çš„ãªå¼•æ•°ãŒè¡¨ç¤ºã•れるã¯ãšã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:125 msgid "These can be replaced with:" msgstr "ã“れã¯ã€æ¬¡ã®ã‚‚ã®ã¨ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:138 msgid "Creating new AWS modules" msgstr "æ–°è¦ AWS モジュールã®ä½œæˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:141 msgid "Use boto3 and AnsibleAWSModule" msgstr "boto3 ãŠã‚ˆã³ AnsibleAWSModule ã®ä½¿ç”¨" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:143 msgid "All new AWS modules must use boto3 and ``AnsibleAWSModule``." msgstr "ã™ã¹ã¦ã®æ–°è¦ AWS モジュール㯠boto3 ãŠã‚ˆã³ ``AnsibleAWSModule`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:145 msgid "``AnsibleAWSModule`` greatly simplifies exception handling and library management, reducing the amount of boilerplate code. If you cannot use ``AnsibleAWSModule`` as a base, you must document the reason and request an exception to this rule." msgstr "``AnsibleAWSModule`` ã¯ã€ä¾‹å¤–処ç†ã¨ãƒ©ã‚¤ãƒ–ラリー管ç†ã‚’大幅ã«ç°¡ç´ åŒ–ã—ã€boilerplate コードã®é‡ã‚’削減ã—ã¾ã™ã€‚``AnsibleAWSModule`` をベースã¨ã—ã¦ä½¿ãˆãªã„å ´åˆã¯ã€ç†ç”±ã‚’文書化ã—ã€ã“ã®ãƒ«ãƒ¼ãƒ«ã®ä¾‹å¤–ã‚’è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:150 msgid "Naming your module" msgstr "モジュールã®åå‰ä»˜ã‘" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:152 msgid "Base the name of the module on the part of AWS that you actually use. (A good rule of thumb is to take whatever module you use with boto as a starting point). Don't further abbreviate names - if something is a well known abbreviation of a major component of AWS (for example, VPC or ELB), that's fine, but don't create new ones independently." msgstr "実際ã«ä½¿ç”¨ã™ã‚‹ AWS ã®ä¸€éƒ¨ã§ã‚るモジュールåをベースã«ã—ã¾ã™ (経験則ã¨ã—ã¦ã€boto ã§ä½¿ç”¨ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開始点ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™)。åå‰ã‚’ã•らã«çœç•¥ã—ãªã„ã§ãã ã•ã„。AWS ã®ä¸»è¦ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ (VPC ã‚„ ELB ãªã©) ã®ã‚ˆã知られãŸçœç•¥å½¢ã§ã‚ã‚‹å ´åˆã¯å•題ã‚りã¾ã›ã‚“ãŒã€æ–°ã—ã„åå‰ã‚’個別ã«ä½œæˆã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:157 msgid "Unless the name of your service is quite unique, please consider using ``aws_`` as a prefix. For example ``aws_lambda``." msgstr "サービスã®åå‰ãŒéžå¸¸ã«ä¸€æ„ã§ãªã„é™ã‚Šã€``aws_`` をプレフィックスã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€``aws_lambda`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:160 msgid "Importing botocore and boto3" msgstr "botocore ãŠã‚ˆã³ boto3 ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:162 msgid "The ``ansible_collections.amazon.aws.plugins.module_utils.ec2`` module and ``ansible_collections.amazon.aws.plugins.module_utils.core`` modules both automatically import boto3 and botocore. If boto3 is missing from the system then the variable ``HAS_BOTO3`` will be set to false. Normally, this means that modules don't need to import boto3 directly. There is no need to check ``HAS_BOTO3`` when using AnsibleAWSModule as the module does that check:" msgstr "``ansible_collections.amazon.aws.plugins.module_utils.ec2`` モジュール㨠``ansible_collections.amazon.aws.plugins.module_utils.core`` モジュールã¯ã€boto3 㨠botocore を自動的ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ システム㫠boto3 ãŒãªã„å ´åˆã¯ã€å¤‰æ•° ``HAS_BOTO3`` ㌠false ã«è¨­å®šã•れã¾ã™ã€‚通常ã€ã“れã¯ã€boto3 を直接インãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。AnsibleAWSModule を使用ã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ ``HAS_BOTO3`` を確èªã™ã‚‹ãŸã‚ã€ãã®ç¢ºèªã‚’行ã†å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:177 msgid "or:" msgstr "ã¾ãŸã¯" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:194 msgid "Supporting Module Defaults" msgstr "モジュールã®ãƒ‡ãƒ•ォルトã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:196 msgid "The existing AWS modules support using :ref:`module_defaults ` for common authentication parameters. To do the same for your new module, add an entry for it in ``meta/runtime.yml``. These entries take the form of:" msgstr "既存㮠AWS モジュールã¯ã€å…±é€šã®èªè¨¼ãƒ‘ラメーター㫠:ref:`module_defaults ` を使用ã™ã‚‹ã“ã¨ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚æ–°ã—ã„モジュールã«åŒã˜ã“ã¨ã‚’行ã†ã«ã¯ã€``meta/runtime.yml`` ã§ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’追加ã—ã¾ã™ã€‚ã“れらã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ä»¥ä¸‹ã®å½¢å¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:206 msgid "Connecting to AWS" msgstr "AWS ã¸ã®æŽ¥ç¶š" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:208 msgid "AnsibleAWSModule provides the ``resource`` and ``client`` helper methods for obtaining boto3 connections. These handle some of the more esoteric connection options, such as security tokens and boto profiles." msgstr "AnsibleAWSModule ã¯ã€boto3 接続をå–å¾—ã™ã‚‹ãŸã‚ã®ãƒ˜ãƒ«ãƒ‘ーメソッド ``resource`` ãŠã‚ˆã³ ``client`` ã‚’æä¾›ã—ã¾ã™ã€‚ã“れらã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ã‚„ boto プロファイルãªã©ã€ã‚ˆã‚Šé›£è§£ãªæŽ¥ç¶šã‚ªãƒ—ションã®ã„ãã¤ã‹ã‚’処ç†ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:211 msgid "If using the basic AnsibleModule then you should use ``get_aws_connection_info`` and then ``boto3_conn`` to connect to AWS as these handle the same range of connection options." msgstr "接続オプションã¨åŒã˜ç¯„囲を処ç†ã™ã‚‹ãŸã‚ã€åŸºæœ¬çš„㪠AnsibleModule を使用ã™ã‚‹å ´åˆã¯ã€``get_aws_connection_info`` を使用ã—ã¦ã‹ã‚‰ ``boto3_conn`` を使用ã—㦠AWS ã«æŽ¥ç¶šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:214 msgid "These helpers also for missing profiles or a region not set when it needs to be, so you don't have to." msgstr "ã“れらã®ãƒ˜ãƒ«ãƒ‘ーã¯ã€æ¬ è½ã—ã¦ã„るプロファイルやã€å¿…è¦ãªã¨ãã«è¨­å®šã•れã¦ã„ãªã„領域ã«ã‚‚使用ã§ãã‚‹ãŸã‚ã€å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:216 msgid "An example of connecting to ec2 is shown below. Note that unlike boto there is no ``NoAuthHandlerFound`` exception handling like in boto. Instead, an ``AuthFailure`` exception will be thrown when you use the connection. To ensure that authorization, parameter validation and permissions errors are all caught, you should catch ``ClientError`` and ``BotoCoreError`` exceptions with every boto3 connection call. See exception handling:" msgstr "ec2 ã¸ã®æŽ¥ç¶šä¾‹ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚boto ã¨ã¯ç•°ãªã‚Šã€boto ã«ã¯ã€``NoAuthHandlerFound`` ã®ä¾‹å¤–処ç†ãŒãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。代ã‚りã«ã€æŽ¥ç¶šã®ä½¿ç”¨æ™‚ã« ``AuthFailure`` 例外ãŒå‡ºåŠ›ã•れã¾ã™ã€‚承èªã€ãƒ‘ラメーター検証ã€ãŠã‚ˆã³ãƒ‘ーミッションエラーãŒã™ã¹ã¦å–å¾—ã•れるよã†ã«ã™ã‚‹ã«ã¯ã€ã™ã¹ã¦ã® boto3 接続呼ã³å‡ºã—ã§ ``ClientError`` ãŠã‚ˆã³ ``BotoCoreError`` ã®ä¾‹å¤–ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚「例外処ç†ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:226 msgid "or for the higher level ec2 resource:" msgstr "ã¾ãŸã€ã‚ˆã‚Šé«˜ã„レベル㮠ec2 リソースã®å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:233 msgid "An example of the older style connection used for modules based on AnsibleModule rather than AnsibleAWSModule:" msgstr "AnsibleAWSModule ã§ã¯ãªã AnsibleModule ã«åŸºã¥ãモジュールã«ä½¿ç”¨ã•れる旧å¼ã®æŽ¥ç¶šä¾‹ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:247 msgid "Common Documentation Fragments for Connection Parameters" msgstr "接続パラメーターã«é–¢ã™ã‚‹æ–­ç‰‡åŒ–ã•ã‚ŒãŸæ±Žç”¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:249 msgid "There are two :ref:`common documentation fragments ` that should be included into almost all AWS modules:" msgstr "ã»ã¨ã‚“ã©ã™ã¹ã¦ã® AWS モジュールã«å«ã¾ã‚Œã‚‹ :ref:`断片化ã•ã‚ŒãŸæ±Žç”¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ ` 㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:252 msgid "``aws`` - contains the common boto connection parameters" msgstr "``aws`` - 共通㮠boto 接続パラメーターãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:253 msgid "``ec2`` - contains the common region parameter required for many AWS modules" msgstr "``ec2`` - 多数㮠AWS モジュールã«å¿…è¦ãªå…±é€šã® region パラメーターãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:255 msgid "These fragments should be used rather than re-documenting these properties to ensure consistency and that the more esoteric connection options are documented. For example:" msgstr "一貫性を確ä¿ã—ã€ã‚ˆã‚Šé›£è§£ãªæŽ¥ç¶šã‚ªãƒ—ションを文書化ã™ã‚‹ãŸã‚ã«ã€ã“れらã®ãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ãƒ¼ã‚’å†æ–‡æ›¸åŒ–ã™ã‚‹ã®ã§ã¯ãªãã€ã“れらã®ãƒ•ラグメントを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:270 msgid "Handling exceptions" msgstr "例外ã®å‡¦ç†" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:272 msgid "You should wrap any boto3 or botocore call in a try block. If an exception is thrown, then there are a number of possibilities for handling it." msgstr "try ブロック㧠boto3 ã¾ãŸã¯ botocore 呼ã³å‡ºã—をラップã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例外ãŒå‡ºåŠ›ã•れãŸå ´åˆã€ãれを処ç†ã™ã‚‹ãŸã‚ã®ã•ã¾ã–ã¾ãªå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:275 msgid "Catch the general ``ClientError`` or look for a specific error code with" msgstr "汎用的㪠``ClientError`` ã‚’å–å¾—ã™ã‚‹ã‹ã€æ¬¡ã®ã‚ˆã†ãªç‰¹å®šã®ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’探ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:276 msgid "``is_boto3_error_code``." msgstr "``is_boto3_error_code``" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:277 msgid "Use ``aws_module.fail_json_aws()`` to report the module failure in a standard way" msgstr "``aws_module.fail_json_aws()`` を使用ã—ã¦ã€æ¨™æº–çš„ãªæ–¹æ³•ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®éšœå®³ã‚’報告ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:278 msgid "Retry using AWSRetry" msgstr "AWSRetry を使用ã—ã¦å†è©¦è¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:279 msgid "Use ``fail_json()`` to report the failure without using ``ansible_collections.amazon.aws.plugins.module_utils.core``" msgstr "``fail_json()`` を使用ã—ã¦ã€``ansible_collections.amazon.aws.plugins.module_utils.core`` を使用ã›ãšã«éšœå®³ã‚’報告ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:280 msgid "Do something custom in the case where you know how to handle the exception" msgstr "例外ã®å‡¦ç†æ–¹æ³•ãŒåˆ†ã‹ã£ã¦ã„ã‚‹å ´åˆã¯ã€ãªã‚“らã‹ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºä½œæ¥­ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:282 msgid "For more information on botocore exception handling see the `botocore error documentation `_." msgstr "botocore 例外処ç†ã®è©³ç´°ã¯ã€`botocore エラードキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:285 msgid "Using is_boto3_error_code" msgstr "is_boto3_error_code ã®ä½¿ç”¨" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:287 msgid "To use ``ansible_collections.amazon.aws.plugins.module_utils.core.is_boto3_error_code`` to catch a single AWS error code, call it in place of ``ClientError`` in your except clauses. In this case, *only* the ``InvalidGroup.NotFound`` error code will be caught here, and any other error will be raised for handling elsewhere in the program." msgstr "``ansible_collections.amazon.aws.plugins.module_utils.core.is_boto3_error_code`` を使用ã—ã¦å˜ä¸€ã® AWS エラーコードをå–å¾—ã™ã‚‹ã«ã¯ã€except å¥ã§ ``ClientError`` ã®ä»£ã‚りã«å‘¼ã³å‡ºã—を行ã„ã¾ã™ã€‚ã“ã®å ´åˆã¯ã€``InvalidGroup.NotFound`` エラーコードをã“ã“ã«æ¤œå‡ºã—ã€ãã®ä»–ã®ã‚¨ãƒ©ãƒ¼ã§ãƒ—ログラム内ã®åˆ¥ã®å ´æ‰€ã‚’処ç†ã™ã‚‹éš›ã«ç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:301 msgid "Using fail_json_aws()" msgstr "fail_json_aws() ã®ä½¿ç”¨" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:303 msgid "In the AnsibleAWSModule there is a special method, ``module.fail_json_aws()`` for nice reporting of exceptions. Call this on your exception and it will report the error together with a traceback for use in Ansible verbose mode." msgstr "AnsibleAWSModule ã«ã¯ã€ä¾‹å¤–をレãƒãƒ¼ãƒˆã™ã‚‹ã®ã«å„ªã‚ŒãŸãƒ¡ã‚½ãƒƒãƒ‰ ``module.fail_json_aws()`` ãŒã‚りã¾ã™ã€‚例外上ã§ã“ã®å‘¼ã³å‡ºã—を行ã„ã€Ansible ã®å†—長モードã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ã¨å…±ã«ã‚¨ãƒ©ãƒ¼ã‚’報告ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:307 msgid "You should use the AnsibleAWSModule for all new modules, unless not possible. If adding significant amounts of exception handling to existing modules, we recommend migrating the module to use AnsibleAWSModule (there are very few changes required to do this)" msgstr "ä¸å¯èƒ½ã§ãªã„é™ã‚Šã€ã™ã¹ã¦ã®æ–°ã—ã„モジュール㫠AnsibleAWSModule を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¤§é‡ã®ä¾‹å¤–処ç†ã‚’追加ã™ã‚‹å ´åˆã¯ã€AnsibleAWSModule を使用ã™ã‚‹ã‚ˆã†ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’移行ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ (ã“れを行ã†ãŸã‚ã«å¿…è¦ãªå¤‰æ›´ã¯ã»ã¨ã‚“ã©ã‚りã¾ã›ã‚“)。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:328 msgid "Note that it should normally be acceptable to catch all normal exceptions here, however if you expect anything other than botocore exceptions you should test everything works as expected." msgstr "通常ã€ã“ã“ã§ã™ã¹ã¦ã®é€šå¸¸ã®ä¾‹å¤–ã‚’æ•ãˆã¦ã‚‚å•題ãŒãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãŸã ã—ã€botocore 以外ã®ä¾‹å¤–ãŒäºˆæƒ³ã•れる場åˆã¯ã€ã™ã¹ã¦ãŒæœŸå¾…ã©ãŠã‚Šã«æ©Ÿèƒ½ã™ã‚‹ã‹ã©ã†ã‹ã‚’テストã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:331 msgid "If you need to perform an action based on the error boto3 returned, use the error code and the ``is_boto3_error_code()`` helper." msgstr "è¿”ã•れ㟠boto3 エラーã«åŸºã¥ã„ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ãŠã‚ˆã³ ``is_boto3_error_code()`` ヘルパーを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:346 msgid "using fail_json() and avoiding ansible_collections.amazon.aws.plugins.module_utils.core" msgstr "using fail_json() and avoiding ansible_collections.amazon.aws.plugins.module_utils.core" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:348 msgid "Boto3 provides lots of useful information when an exception is thrown so pass this to the user along with the message." msgstr "Boto3 ã¯ã€ä¾‹å¤–ãŒç™ºç”Ÿã—ãŸã¨ãã«å¤šãã®æœ‰ç”¨ãªæƒ…報をæä¾›ã™ã‚‹ãŸã‚ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨å…±ã«ã“ã‚Œã‚’ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:371 msgid "Note: we use `str(e)` rather than `e.message` as the latter doesn't work with python3" msgstr "注記: `e.message` 㯠python3 ã§ã¯æ©Ÿèƒ½ã—ãªã„ãŸã‚ã€ä»£ã‚り㫠`str(e)` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:374 msgid "If you need to perform an action based on the error boto3 returned, use the error code." msgstr "è¿”ã•れ㟠boto3 エラーã«åŸºã¥ã„ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:394 msgid "API throttling (rate limiting) and pagination" msgstr "API スロットリング (レート制é™) ã¨ãƒšãƒ¼ã‚¸ãƒãƒ¼ã‚·ãƒ§ãƒ³" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:396 msgid "For methods that return a lot of results, boto3 often provides `paginators `_. If the method you're calling has ``NextToken`` or ``Marker`` parameters, you should probably check whether a paginator exists (the top of each boto3 service reference page has a link to Paginators, if the service has any). To use paginators, obtain a paginator object, call ``paginator.paginate`` with the appropriate arguments and then call ``build_full_result``." msgstr "大é‡ã®çµæžœã‚’è¿”ã™ãƒ¡ã‚½ãƒƒãƒ‰ã®å ´åˆã€boto3 ã¯ã—ã°ã—ã° `paginators `_ ã‚’æä¾›ã—ã¾ã™ã€‚呼ã³å‡ºã—ã¦ã„るメソッド㫠``NextToken`` パラメーターã¾ãŸã¯ ``Marker`` パラメーターãŒã‚ã‚‹å ´åˆã¯ã€Paginators ãŒå­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (å„ boto3 サービス㫠Paginators ãŒã‚ã‚‹å ´åˆã¯ã€å‚照ページ上部㫠Paginators ã¸ã®ãƒªãƒ³ã‚¯ãŒã‚りã¾ã™)。Paginators を使用ã™ã‚‹ã«ã¯ã€Paginators オブジェクトをå–å¾—ã—ã€é©åˆ‡ãªå¼•数を指定ã—㦠``paginator.paginate`` を呼ã³å‡ºã—ã¦ã‹ã‚‰ã€``build_full_result`` を呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:403 msgid "Any time that you are calling the AWS API a lot, you may experience API throttling, and there is an ``AWSRetry`` decorator that can be used to ensure backoff. Because exception handling could interfere with the retry working properly (as AWSRetry needs to catch throttling exceptions to work correctly), you'd need to provide a backoff function and then put exception handling around the backoff function." msgstr "AWS API を大é‡ã«å‘¼ã³å‡ºã—ã¦ã„ã‚‹ã®ã¯ã„ã¤ã§ã‚‚ã€API スロットリングãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã€ãƒãƒƒã‚¯ã‚ªãƒ•機能をæä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ ``AWSRetry`` デコレーターãŒã‚りã¾ã™ã€‚例外処ç†ã¯å†è©¦è¡ŒãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ã®ã‚’妨ã’ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ (AWSRetry ãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã‚¹ãƒ­ãƒƒãƒˆãƒªãƒ³ã‚°ä¾‹å¤–ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚)ã€ãƒãƒƒã‚¯ã‚ªãƒ•関数をæä¾›ã—ã¦ã‹ã‚‰ã€ãƒãƒƒã‚¯ã‚ªãƒ•関数ã®å‘¨ã‚Šã«ä¾‹å¤–処ç†ã‚’ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:409 msgid "You can use ``exponential_backoff`` or ``jittered_backoff`` strategies - see the cloud ``module_utils`` ()/lib/ansible/module_utils/cloud.py) and `AWS Architecture blog `_ for more details." msgstr "``exponential_backoff`` ストラテジーã¾ãŸã¯ ``jittered_backoff`` ストラテジーを使用ã§ãã¾ã™ã€‚詳細ã¯ã€ã‚¯ãƒ©ã‚¦ãƒ‰ ``module_utils`` ()/lib/ansible/module_utils/cloud.py) ãŠã‚ˆã³ `AWS アーキテクãƒãƒ£ãƒ¼ã®ãƒ–ログ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:413 msgid "The combination of these two approaches is then:" msgstr "ã“れら 2 ã¤ã®ã‚¢ãƒ—ローãƒã®çµ„ã¿åˆã‚ã›ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:430 msgid "Prior to Ansible 2.10 if the underlying ``describe_some_resources`` API call threw a ``ResourceNotFound`` exception, ``AWSRetry`` would take this as a cue to retry until it is not thrown (this is so that when creating a resource, we can just retry until it exists). This default was changed and it is now necessary to explicitly request this behaviour. This can be done by using the ``catch_extra_error_codes`` argument on the decorator." msgstr "Ansible 2.10 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€åŸºç›¤ã¨ãªã‚‹ ``describe_some_resources`` API コール㌠``ResourceNotFound`` 例外を出力ã—ãŸå ´åˆã€``AWSRetry`` ã¯ã€ã“れãŒå‡ºåŠ›ã•れãªããªã‚‹ã¾ã§å†è©¦è¡Œã™ã‚‹åˆå›³ã¨ã¿ãªã—ã¦ã„ã¾ã™ (ã“れã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹éš›ã«ã€ãƒªã‚½ãƒ¼ã‚¹ãŒå­˜åœ¨ã™ã‚‹ã¾ã§å†è©¦è¡Œã§ãるよã†ã«ã™ã‚‹ãŸã‚ã§ã™)。ã“ã®ãƒ‡ãƒ•ォルトãŒå¤‰æ›´ã«ãªã‚Šã€ç¾åœ¨ã§ã¯ã“ã®å‹•作を明示的ã«è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€ãƒ‡ã‚³ãƒ¬ãƒ¼ã‚¿ãƒ¼ã® ``catch_extra_error_codes`` 引数を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:451 msgid "To make use of AWSRetry easier, it can now be wrapped around a client returned by ``AnsibleAWSModule``. any call from a client. To add retries to a client, create a client:" msgstr "AWSRetry を使ã„ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€``AnsibleAWSModule`` (クライアントã‹ã‚‰ã®å‘¼ã³å‡ºã—) ã«ã‚ˆã£ã¦è¿”ã•れãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’ラップã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚クライアントã«å†è©¦è¡Œã‚’追加ã™ã‚‹ã«ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:459 msgid "Any calls from that client can be made to use the decorator passed at call-time using the `aws_retry` argument. By default, no retries are used." msgstr "ãã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ã®å‘¼ã³å‡ºã—ã¯ã™ã¹ã¦ã€`aws_retry` 引数を使用ã—ã¦å‘¼ã³å‡ºã—æ™‚ã«æ¸¡ã•れãŸãƒ‡ã‚³ãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’使用ã—ã¦è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚デフォルトã§ã¯ã€å†è©¦è¡Œã¯ä½¿ç”¨ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:474 msgid "The call will be retried the specified number of times, so the calling functions don't need to be wrapped in the backoff decorator." msgstr "呼ã³å‡ºã—ã¯æŒ‡å®šã•れãŸå›žæ•°ã ã‘å†è©¦è¡Œã•れるãŸã‚ã€å‘¼ã³å‡ºã—å…ƒã®é–¢æ•°ã‚’ãƒãƒƒã‚¯ã‚ªãƒ•デコレーターã§ãƒ©ãƒƒãƒ—ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:477 msgid "You can also use customization for ``retries``, ``delay`` and ``max_delay`` parameters used by ``AWSRetry.jittered_backoff`` API using module params. You can take a look at the `cloudformation ` module for example." msgstr "ã¾ãŸã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターを使用ã—ã¦ã€``AWSRetry.jittered_backoff`` API ãŒä½¿ç”¨ã™ã‚‹ ``retries`` パラメーターã€``delay`` パラメーターã€ãŠã‚ˆã³ ``max_delay`` パラメーターã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€`cloudformation ` モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:482 msgid "To make all Amazon modules uniform, prefix the module param with ``backoff_``, so ``retries`` becomes ``backoff_retries``" msgstr "ã™ã¹ã¦ã® Amazon モジュールをå‡ä¸€ã«ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターã®å‰ã« ``backoff_`` を付ã‘ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€``retries`` 㯠``backoff_retries`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:482 msgid "and likewise with ``backoff_delay`` and ``backoff_max_delay``." msgstr "``backoff_delay`` 㨠``backoff_max_delay`` ã‚‚åŒæ§˜ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:485 msgid "Returning Values" msgstr "戻り値" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:487 msgid "When you make a call using boto3, you will probably get back some useful information that you should return in the module. As well as information related to the call itself, you will also have some response metadata. It is OK to return this to the user as well as they may find it useful." msgstr "boto3 を使用ã—ã¦å‘¼ã³å‡ºã—を行ã†ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§è¿”ã™å¿…è¦ãŒã‚ã‚‹ä¾¿åˆ©ãªæƒ…報を入手ã§ãã¾ã™ã€‚ã¾ãŸã€å‘¼ã³å‡ºã—自体ã«é–¢é€£ã™ã‚‹æƒ…報や応答メタデータもã‚りã¾ã™ã€‚ã“れをユーザーã«è¿”ã™ã“ã¨ã¯å•題ã‚りã¾ã›ã‚“。ユーザーã«ãれãŒå½¹ã«ç«‹ã¤ã¨æ€ã†ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:491 msgid "Boto3 returns all values CamelCased. Ansible follows Python standards for variable names and uses snake_case. There is a helper function in module_utils/ec2.py called `camel_dict_to_snake_dict` that allows you to easily convert the boto3 response to snake_case." msgstr "boto3 ã¯ã€CamelCase 化ã—ãŸã™ã¹ã¦ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚Ansible ã¯å¤‰æ•°åã® Python 標準ã«å¾“ã„ã€snake_case を使用ã—ã¾ã™ã€‚`camel_dict_to_snake_dict` ã¨ã„ã†åå‰ã® module_utils/ec2.py ã«ãƒ˜ãƒ«ãƒ‘ー関数ãŒã‚りã€boto3 応答を簡å˜ã« snake_case ã«å¤‰æ›ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:495 msgid "You should use this helper function and avoid changing the names of values returned by Boto3. E.g. if boto3 returns a value called 'SecretAccessKey' do not change it to 'AccessKey'." msgstr "ã“ã®ãƒ˜ãƒ«ãƒ‘ー関数を使用ã—ã€Boto3 ãŒè¿”ã™å€¤ã®åå‰ã‚’変更ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€boto3 ãŒã€ŒSecretAccessKeyã€å€¤ã‚’è¿”ã™å ´åˆã¯ã€ã“れを「AccessKeyã€ã«å¤‰æ›´ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:507 msgid "Dealing with IAM JSON policy" msgstr "IAM JSON ãƒãƒªã‚·ãƒ¼ã®å‡¦ç†" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:509 msgid "If your module accepts IAM JSON policies then set the type to 'json' in the module spec. For example:" msgstr "モジュール㌠IAM JSON ãƒãƒªã‚·ãƒ¼ã‚’å—ã‘入れる場åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»•様ã§ã‚¿ã‚¤ãƒ—を「jsonã€ã«è¨­å®šã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:520 msgid "Note that AWS is unlikely to return the policy in the same order that is was submitted. Therefore, use the `compare_policies` helper function which handles this variance." msgstr "AWS ãŒã€é€ä¿¡ã•れãŸé †åºã§ãƒãƒªã‚·ãƒ¼ã‚’è¿”ã™ã“ã¨ã¯ã»ã¨ã‚“ã©ã‚りã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€ã“ã®å·®ç•°ã‚’処ç†ã™ã‚‹ `compare_policies` ヘルパー関数を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:523 msgid "`compare_policies` takes two dictionaries, recursively sorts and makes them hashable for comparison and returns True if they are different." msgstr "`compare_policies` ã¯ã€2 ã¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’å–å¾—ã—ã€å†å¸°çš„ã«ã‚½ãƒ¼ãƒˆã—ã€æ¯”較ã®ãŸã‚ã«ãƒãƒƒã‚·ãƒ¥ã‚’å¯èƒ½ã«ã—ã€ç•°ãªã‚‹å ´åˆã¯ True ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:547 msgid "Dealing with tags" msgstr "ã‚¿ã‚°ã®å‡¦ç†" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:549 msgid "AWS has a concept of resource tags. Usually the boto3 API has separate calls for tagging and untagging a resource. For example, the ec2 API has a create_tags and delete_tags call." msgstr "AWS ã«ã¯ãƒªã‚½ãƒ¼ã‚¹ã‚¿ã‚°ã®æ¦‚念ãŒã‚りã¾ã™ã€‚通常ã€boto3 API ã«ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã®ã‚¿ã‚°ä»˜ã‘ã¨ã‚¿ã‚°ä»˜ã‘解除ã®ãŸã‚ã®å‘¼ã³å‡ºã—ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ec2 API ã«ã¯ create_tags ãŠã‚ˆã³ delete_tags ã®å‘¼ã³å‡ºã—ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:552 msgid "It is common practice in Ansible AWS modules to have a `purge_tags` parameter that defaults to true." msgstr "ã“れã¯ã€ãƒ‡ãƒ•ォルト㌠true ã® `purge_tags` パラメーターãŒã‚ã‚‹ Ansible AWS モジュールã§ã¯ä¸€èˆ¬çš„ãªæ–¹æ³•ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:555 msgid "The `purge_tags` parameter means that existing tags will be deleted if they are not specified by the Ansible task." msgstr "`purge_tags` パラメーターã¯ã€æ—¢å­˜ã®ã‚¿ã‚°ãŒ Ansible ã‚¿ã‚¹ã‚¯ã§æŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«å‰Šé™¤ã•れるã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:558 msgid "There is a helper function `compare_aws_tags` to ease dealing with tags. It can compare two dicts and return the tags to set and the tags to delete. See the Helper function section below for more detail." msgstr "ã‚¿ã‚°ã®æ‰±ã„を容易ã«ã™ã‚‹ãŸã‚ヘルパー機能 `compare_aws_tags` ãŒã‚りã¾ã™ã€‚2 ã¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’比較ã—ã€è¨­å®šã™ã‚‹ã‚¿ã‚°ã¨å‰Šé™¤ã™ã‚‹ã‚¿ã‚°ã‚’è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®ãƒ˜ãƒ«ãƒ‘ー関数ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:563 msgid "Helper functions" msgstr "helper 関数" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:565 msgid "Along with the connection functions in Ansible ec2.py module_utils, there are some other useful functions detailed below." msgstr "Ansible ec2.py ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®æŽ¥ç¶šé–¢æ•°ã«åŠ ãˆã¦ã€ä»¥ä¸‹ã«èª¬æ˜Žã™ã‚‹ã„ãã¤ã‹ã®ä¾¿åˆ©ãªé–¢æ•°ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:569 msgid "camel_dict_to_snake_dict" msgstr "camel_dict_to_snake_dict" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:571 msgid "boto3 returns results in a dict. The keys of the dict are in CamelCase format. In keeping with Ansible format, this function will convert the keys to snake_case." msgstr "boto3 ã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®çµæžœã‚’è¿”ã—ã¾ã™ã€‚ディクショナリーã®ã‚­ãƒ¼ã¯ CamelCase å½¢å¼ã«ãªã‚Šã¾ã™ã€‚Ansible å½¢å¼ã‚’ç¶­æŒã™ã‚‹ã¨ã€ã“ã®æ©Ÿèƒ½ã¯ã‚­ãƒ¼ã‚’ snake_case ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:574 msgid "``camel_dict_to_snake_dict`` takes an optional parameter called ``ignore_list`` which is a list of keys not to convert (this is usually useful for the ``tags`` dict, whose child keys should remain with case preserved)" msgstr "``camel_dict_to_snake_dict`` ã¯ã€``ignore_list`` 呼ã°ã‚Œã‚‹ä»»æ„ã®ãƒ‘ラメーターをå–りã¾ã™ã€‚ã“れã¯ã€å¤‰æ›ã—ãªã„キーã®ä¸€è¦§ã§ã™ã€‚ã“れã¯é€šå¸¸ã€``tags`` ディクショナリーã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚ã“ã®å­ã‚­ãƒ¼ã¯å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ã¦ä¿æŒã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:578 msgid "Another optional parameter is ``reversible``. By default, ``HTTPEndpoint`` is converted to ``http_endpoint``, which would then be converted by ``snake_dict_to_camel_dict`` to ``HttpEndpoint``. Passing ``reversible=True`` converts HTTPEndpoint to ``h_t_t_p_endpoint`` which converts back to ``HTTPEndpoint``." msgstr "ãã®ä»–ã®ä»»æ„ã®ãƒ‘ラメーター㯠``reversible`` ã§ã™ã€‚デフォルトã§ã¯ã€``HTTPEndpoint`` 㯠``http_endpoint`` ã«å¤‰æ›ã•れã¾ã™ã€‚ã“れã¯ã€``snake_dict_to_camel_dict`` ã«ã‚ˆã£ã¦ ``HttpEndpoint`` ã«å¤‰æ›ã•れã¾ã™ã€‚``reversible=True`` を渡ã™ã¨ã€HTTPEndpoint ㌠``h_t_t_p_endpoint`` ã«å¤‰æ›ã•れã€``HTTPEndpoint`` ã«å¤‰æ›ã•れ直ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:583 msgid "snake_dict_to_camel_dict" msgstr "snake_dict_to_camel_dict" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:585 msgid "`snake_dict_to_camel_dict` converts snake cased keys to camel case. By default, because it was first introduced for ECS purposes, this converts to dromedaryCase. An optional parameter called `capitalize_first`, which defaults to `False`, can be used to convert to CamelCase." msgstr "`snake_dict_to_camel_dict` ã¯ã€ã‚¹ãƒãƒ¼ã‚¯ã‚±ãƒ¼ã‚¹ã®ã‚­ãƒ¼ã‚’キャメルケースã«å¤‰æ›ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ECS ã®ç›®çš„ã§æœ€åˆã«å°Žå…¥ã•れãŸãŸã‚ã€ã“れ㯠dromedaryCase ã«å¤‰æ›ã•れã¾ã™ã€‚`capitalize_first` ã¨å‘¼ã°ã‚Œã‚‹ä»»æ„ã®ãƒ‘ラメーターã¯ã€`False` ã«ãƒ‡ãƒ•ォルトã•れã€CamelCase ã¸ã®å¤‰æ›ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:590 msgid "ansible_dict_to_boto3_filter_list" msgstr "ansible_dict_to_boto3_filter_list" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:592 msgid "Converts a an Ansible list of filters to a boto3 friendly list of dicts. This is useful for any boto3 `_facts` modules." msgstr "フィルター㮠Ansible リストをã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã® boto3 フレンドリーリストã«å¤‰æ›ã—ã¾ã™ã€‚ã“れã¯ã€boto3 ã® `_facts` モジュールã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:596 msgid "boto_exception" msgstr "boto_exception" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:598 msgid "Pass an exception returned from boto or boto3, and this function will consistently get the message from the exception." msgstr "boto ã¾ãŸã¯ boto3 ã‹ã‚‰è¿”ã•れãŸä¾‹å¤–を渡ã—ã¾ã™ã€‚ã“ã®é–¢æ•°ã¯ã€ä¾‹å¤–ã‹ã‚‰ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’一貫ã—ã¦å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:600 msgid "Deprecated: use `AnsibleAWSModule`'s `fail_json_aws` instead." msgstr "éžæŽ¨å¥¨: 代ã‚り㫠`AnsibleAWSModule` ã® `fail_json_aws` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:604 msgid "boto3_tag_list_to_ansible_dict" msgstr "boto3_tag_list_to_ansible_dict" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:606 msgid "Converts a boto3 tag list to an Ansible dict. Boto3 returns tags as a list of dicts containing keys called 'Key' and 'Value' by default. This key names can be overridden when calling the function. For example, if you have already camel_cased your list of tags you may want to pass lowercase key names instead, in other words, 'key' and 'value'." msgstr "boto3 タグリストを Ansible ディクショナリーã«å¤‰æ›ã—ã¾ã™ã€‚Boto3 ã¯ã€ã€ŒKeyã€ãŠã‚ˆã³ã€ŒValueã€ã¨ã„ã†åå‰ã®ã‚­ãƒ¼ãŒãƒ‡ãƒ•ォルトã§å«ã¾ã‚Œã‚‹ ディクショナリーã®ãƒªã‚¹ãƒˆã¨ã—ã¦ã‚¿ã‚°ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚­ãƒ¼ã¯ã€é–¢æ•°ã‚’呼ã³å‡ºã™éš›ã«ä¸Šæ›¸ãã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¿ã‚°ã®ãƒªã‚¹ãƒˆã‚’ã™ã§ã«ã‚­ãƒ£ãƒ¡ãƒ«ã‚±ãƒ¼ã‚¹åŒ–ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»£ã‚りã«å°æ–‡å­—ã®ã‚­ãƒ¼åã€ã¤ã¾ã‚Šã€Œkeyã€ã¨ã€Œvalueã€ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:611 msgid "This function converts the list in to a single dict where the dict key is the tag key and the dict value is the tag value." msgstr "ã“ã®é–¢æ•°ã¯ã€ãƒªã‚¹ãƒˆã‚’å˜ä¸€ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«å¤‰æ›ã—ã¾ã™ã€‚dic キーã¯tag キーã§ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®å€¤ã¯ã‚¿ã‚°ã®å€¤ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:615 msgid "ansible_dict_to_boto3_tag_list" msgstr "ansible_dict_to_boto3_tag_list" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:617 msgid "Opposite of above. Converts an Ansible dict to a boto3 tag list of dicts. You can again override the key names used if 'Key' and 'Value' is not suitable." msgstr "上記ã®é€†ã§ã€Ansible ディクショナリーをディクショナリー㮠boto3 タグ一覧ã«å¤‰æ›ã—ã¾ã™ã€‚「Keyã€ã¨ã€ŒValueã€ãŒé©ã—ã¦ã„ãªã„å ´åˆã«ä½¿ç”¨ã•れるキーåã‚’å†åº¦ä¸Šæ›¸ãã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:621 msgid "get_ec2_security_group_ids_from_names" msgstr "get_ec2_security_group_ids_from_names" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:623 msgid "Pass this function a list of security group names or combination of security group names and IDs and this function will return a list of IDs. You should also pass the VPC ID if known because security group names are not necessarily unique across VPCs." msgstr "ã“ã®é–¢æ•°ã«ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—åã®ãƒªã‚¹ãƒˆã€ã¾ãŸã¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—å㨠ID ã®çµ„ã¿åˆã‚ã›ã‚’渡ã™ã¨ã€ã“ã®é–¢æ•°ã¯ ID ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚セキュリティーグループå㯠VPC é–“ã§å¿…ãšã—も一æ„ã§ã‚ã‚‹ã¨ã¯é™ã‚‰ãªã„ãŸã‚ã€æ—¢çŸ¥ã®å ´åˆã¯ VPCID も渡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:628 msgid "compare_policies" msgstr "compare_policies" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:630 msgid "Pass two dicts of policies to check if there are any meaningful differences and returns true if there are. This recursively sorts the dicts and makes them hashable before comparison." msgstr "ãƒãƒªã‚·ãƒ¼ã® 2 ã¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’渡ã—ã¦ã€æ„味ã®ã‚る差異ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã€ã‚ã‚‹å ´åˆã¯ true ã‚’è¿”ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒå†å¸°çš„ã«ã‚½ãƒ¼ãƒˆã•ã‚Œã€æ¯”較å‰ã«ãƒãƒƒã‚·ãƒ¥å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:633 msgid "This method should be used any time policies are being compared so that a change in order doesn't result in unnecessary changes." msgstr "ã“ã®æ–¹æ³•ã¯ã€é †åºã‚’変更ã—ã¦ã‚‚ä¸è¦ãªå¤‰æ›´ãŒç™ºç”Ÿã—ãªã„よã†ã«ã€ãƒãƒªã‚·ãƒ¼ã‚’比較ã™ã‚‹ã¨ãã«å¿…ãšä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:637 msgid "compare_aws_tags" msgstr "compare_aws_tags" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:639 msgid "Pass two dicts of tags and an optional purge parameter and this function will return a dict containing key pairs you need to modify and a list of tag key names that you need to remove. Purge is True by default. If purge is False then any existing tags will not be modified." msgstr "ã‚¿ã‚°ã® 2 ã¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨ä»»æ„ã® purge パラメーターを渡ã—ã¾ã™ã€‚ã“ã®é–¢æ•°ã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚ã“れã«ã¯ã€å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚るキーペアã¨ã€å‰Šé™¤ã™ã‚‹å¿…è¦ã®ã‚るタグキーåã®ä¸€è¦§ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚パージã¯ã€ãƒ‡ãƒ•ォルト㧠True ã§ã™ã€‚パージ㌠False ã®å ´åˆã¯ã€æ—¢å­˜ã®ã‚¿ã‚°ãŒå¤‰æ›´ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:643 msgid "This function is useful when using boto3 'add_tags' and 'remove_tags' functions. Be sure to use the other helper function `boto3_tag_list_to_ansible_dict` to get an appropriate tag dict before calling this function. Since the AWS APIs are not uniform (for example, EC2 is different from Lambda) this will work without modification for some (Lambda) and others may need modification before using these values (such as EC2, with requires the tags to unset to be in the form `[{'Key': key1}, {'Key': key2}]`)." msgstr "ã“ã®é–¢æ•°ã¯ã€boto3 ã®ã€Œadd_tagsã€é–¢æ•°ãŠã‚ˆã³ã€Œremove_tagsã€é–¢æ•°ã‚’使用ã™ã‚‹å ´åˆã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚ã“ã®é–¢æ•°ã‚’呼ã³å‡ºã™å‰ã«ã€å¿…ãšä»–ã®ãƒ˜ãƒ«ãƒ‘ー関数 `boto3_tag_list_to_ansible_dict` を使用ã—ã¦ã€é©åˆ‡ãªã‚¿ã‚°ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’å–å¾—ã—ã¦ãã ã•ã„。AWS ã® API ã¯çµ±ä¸€ã•れã¦ã„ãªã„ãŸã‚ (ãŸã¨ãˆã°ã€EC2 㨠Lambda ã¯ç•°ãªã‚Šã¾ã™)ã€ä¸€éƒ¨ (Lambda) ã§ã¯ä¿®æ­£ãªã—ã§å‹•作ã—ã¾ã™ãŒã€ã“れらã®å€¤ã‚’使用ã™ã‚‹å‰ã«ä¿®æ­£ãŒå¿…è¦ãªå ´åˆãŒã‚りã¾ã™ã‚‚ (EC2 ã§ã¯ã€è¨­å®šè§£é™¤ã™ã‚‹ã‚¿ã‚°ã‚’ `[{'Key': key1}, {'Key': key2}]` ã®å½¢å¼ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãªã©)。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:650 msgid "Integration Tests for AWS Modules" msgstr "AWS モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:652 msgid "All new AWS modules should include integration tests to ensure that any changes in AWS APIs that affect the module are detected. At a minimum this should cover the key API calls and check the documented return values are present in the module result." msgstr "ã™ã¹ã¦ã®æ–°è¦ AWS モジュールã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å½±éŸ¿ã™ã‚‹ AWS API ã®å¤‰æ›´ãŒæ¤œå‡ºã•れるよã†ã«ã€çµ±åˆãƒ†ã‚¹ãƒˆã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚最å°å€¤ã¯ã‚­ãƒ¼ API 呼ã³å‡ºã—ã«å¯¾å¿œã—ã€æ–‡æ›¸åŒ–ã•ã‚ŒãŸæˆ»ã‚Šå€¤ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®çµæžœã«å­˜åœ¨ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:656 msgid "For general information on running the integration tests see the :ref:`Integration Tests page of the Module Development Guide `, especially the section on configuration for cloud tests." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªæƒ…å ±ã¯ã€:ref:`モジュール開発ガイドã®çµ±åˆãƒ†ã‚¹ãƒˆãƒšãƒ¼ã‚¸ ` ページ (特ã«ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ†ã‚¹ãƒˆè¨­å®šã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:659 msgid "The integration tests for your module should be added in `test/integration/targets/MODULE_NAME`." msgstr "モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€`test/integration/targets/MODULE_NAME` ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:661 msgid "You must also have a aliases file in `test/integration/targets/MODULE_NAME/aliases`. This file serves two purposes. First indicates it's in an AWS test causing the test framework to make AWS credentials available during the test run. Second putting the test in a test group causing it to be run in the continuous integration build." msgstr "ã¾ãŸã€`test/integration/targets/MODULE_NAME/aliases` ã«ã¯ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãƒ•ァイルãŒå¿…è¦ã§ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ 2 ã¤ã®ç›®çš„ãŒã‚りã¾ã™ã€‚最åˆã«ã€ãれ㌠AWS テストã«ã‚りã€ãƒ†ã‚¹ãƒˆãƒ•レームワークãŒãƒ†ã‚¹ãƒˆå®Ÿè¡Œä¸­ã« AWS èªè¨¼æƒ…報を利用ã§ãるよã†ã«ã—ã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚次ã«ã€ãƒ†ã‚¹ãƒˆã‚’テストグループã«å…¥ã‚Œã¦ã€ç¶™ç¶šçš„çµ±åˆãƒ“ルドã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:666 msgid "Tests for new modules should be added to the same group as existing AWS tests. In general just copy an existing aliases file such as the `aws_s3 tests aliases file `_." msgstr "æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆã¯ã€æ—¢å­˜ã® AWS テストã¨åŒã˜ã‚°ãƒ«ãƒ¼ãƒ—ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一般ã«ã€`aws_s3 テストエイリアスファイル `_ ã®ã‚ˆã†ãªæ—¢å­˜ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãƒ•ァイルをコピーã™ã‚‹ã ã‘ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:670 msgid "AWS Credentials for Integration Tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã® AWS èªè¨¼æƒ…å ±" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:672 msgid "The testing framework handles running the test with appropriate AWS credentials, these are made available to your test in the following variables:" msgstr "テストフレームワークã¯ã€é©åˆ‡ãª AWS èªè¨¼æƒ…報を使用ã—ãŸãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã‚’処ç†ã—ã¾ã™ã€‚ã“ã®èªè¨¼æƒ…å ±ã¯ã€æ¬¡ã®å¤‰æ•°ã§ã€ãƒ†ã‚¹ãƒˆã«åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:675 msgid "`aws_region`" msgstr "`aws_region`" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:676 msgid "`aws_access_key`" msgstr "`aws_access_key`" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:677 msgid "`aws_secret_key`" msgstr "`aws_secret_key`" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:678 msgid "`security_token`" msgstr "`security_token`" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:680 msgid "So all invocations of AWS modules in the test should set these parameters. To avoid duplicating these for every call, it's preferable to use :ref:`module_defaults `. For example:" msgstr "ã—ãŸãŒã£ã¦ã€ãƒ†ã‚¹ãƒˆã§ AWS モジュールを呼ã³å‡ºã™å ´åˆã¯ã™ã¹ã¦ã€ã“れらã®ãƒ‘ラメーターを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚呼ã³å‡ºã—ã”ã¨ã«ã“れらãŒé‡è¤‡ã—ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€:ref:`module_defaults ` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:704 msgid "AWS Permissions for Integration Tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆç”¨ã® AWS パーミッション" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:706 msgid "As explained in the :ref:`Integration Test guide ` there are defined IAM policies in `mattclay/aws-terminator `_ that contain the necessary permissions to run the AWS integration test." msgstr ":ref:`çµ±åˆãƒ†ã‚¹ãƒˆã‚¬ã‚¤ãƒ‰ ` ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€AWS çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ãŸã‚ã«å¿…è¦ãªæ¨©é™ãŒå«ã¾ã‚Œã‚‹ `mattclay/aws-terminator `_ ã§å®šç¾©ã•れ㟠IAM ãƒãƒªã‚·ãƒ¼ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:710 msgid "If your module interacts with a new service or otherwise requires new permissions, tests will fail when you submit a pull request and the `Ansibullbot `_ will tag your PR as needing revision. We do not automatically grant additional permissions to the roles used by the continuous integration builds. You will need to raise a Pull Request against `mattclay/aws-terminator `_ to add them." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ–°ã—ã„サービスã¨ã‚„りå–りã™ã‚‹å ´åˆã€ã¾ãŸã¯åˆ¥ã®æ–¹æ³•ã§æ–°ã—ã„パーミッションãŒå¿…è¦ãªå ´åˆã¯ã€ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã™ã‚‹ã¨ã€ãƒ†ã‚¹ãƒˆã¯å¤±æ•—ã—ã¾ã™ã€‚`Ansibullbot `_ ã¯ã€PR ã«ä¿®æ­£ãŒå¿…è¦ãªã‚¿ã‚°ã‚’付ã‘ã¾ã™ã€‚継続的インテグレーションビルドã§ä½¿ç”¨ã•れるロールã«è¿½åŠ ã®ãƒ‘ーミッションを自動的ã«ä»˜ä¸Žã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ãれを追加ã™ã‚‹ã«ã¯ã€`mattclay/aws-terminator `_ ã«å¯¾ã—ã¦ãƒ—ãƒ«è¦æ±‚を発行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€ãれらを追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:715 msgid "If your PR has test failures, check carefully to be certain the failure is only due to the missing permissions. If you've ruled out other sources of failure, add a comment with the `ready_for_review` tag and explain that it's due to missing permissions." msgstr "PR ã«ãƒ†ã‚¹ãƒˆã®å¤±æ•—ãŒã‚ã‚‹å ´åˆã¯ã€å¤±æ•—ã®åŽŸå› ãŒãƒ‘ãƒ¼ãƒŸãƒƒã‚·ãƒ§ãƒ³ã®æ¬ è½ã®ã¿ã§ã‚ã‚‹ã“ã¨ã‚’ã—ã£ã‹ã‚Šã¨ç¢ºèªã—ã¦ãã ã•ã„。他ã®å¤±æ•—ã®åŽŸå› ã‚’é™¤å¤–ã—ãŸå ´åˆã¯ã€`ready_for_review` タグを使用ã—ã¦ã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã—ã¦ã€æ¨©é™ãŒãªã„ã“ã¨ãŒåŽŸå› ã§ã‚ã‚‹ã“ã¨ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:718 msgid "Your pull request cannot be merged until the tests are passing. If your pull request is failing due to missing permissions, you must collect the minimum IAM permissions required to run the tests." msgstr "テストã«åˆæ ¼ã™ã‚‹ã¾ã§ãƒ—ãƒ«è¦æ±‚ãŒãƒžãƒ¼ã‚¸ã§ãã¾ã›ã‚“。パーミッションãŒãªã„ãŸã‚ã«ãƒ—ãƒ«è¦æ±‚ãŒå¤±æ•—ã™ã‚‹ã¨ã€ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã«å¿…è¦ãªæœ€ä½Žé™ã® IAM パーミッションをåŽé›†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:722 msgid "There are two ways to figure out which IAM permissions you need for your PR to pass:" msgstr "PR ã«åˆæ ¼ã™ã‚‹ãŸã‚ã«å¿…è¦ãª IAM パーミッションを確èªã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:724 msgid "Start with the most permissive IAM policy, run the tests to collect information about which resources your tests actually use, then construct a policy based on that output. This approach only works on modules that use `AnsibleAWSModule`." msgstr "最も許容度ã®é«˜ã„ IAM ãƒãƒªã‚·ãƒ¼ã‹ã‚‰å§‹ã‚ã¦ã€ãƒ†ã‚¹ãƒˆã‚’実行ã—ã€ãƒ†ã‚¹ãƒˆãŒå®Ÿéš›ã«ä½¿ç”¨ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã€ãã®å‡ºåŠ›ã«åŸºã¥ã„ã¦ãƒãƒªã‚·ãƒ¼ã‚’構築ã—ã¾ã™ã€‚ã“ã®ã‚¢ãƒ—ローãƒã¯ã€`AnsibleAWSModule` を使用ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:725 msgid "Start with the least permissive IAM policy, run the tests to discover a failure, add permissions for the resource that addresses that failure, then repeat. If your module uses `AnsibleModule` instead of `AnsibleAWSModule`, you must use this approach." msgstr "最も許容度ã®ä½Žã„ IAM ãƒãƒªã‚·ãƒ¼ã‹ã‚‰é–‹å§‹ã—ã€ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¦éšœå®³ã‚’検出ã—ã€ãã®éšœå®³ã«å¯¾å‡¦ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ãƒ‘ーミッションを追加ã—ã¦ã‹ã‚‰ã€ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚モジュールãŒã€`AnsibleAWSModule` ã®ä»£ã‚り㫠`AnsibleModule` を使用ã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚¢ãƒ—ローãƒã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:727 msgid "To start with the most permissive IAM policy:" msgstr "最も許容度ã®é«˜ã„ IAM ãƒãƒªã‚·ãƒ¼ã‚’使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:729 msgid "`Create an IAM policy `_ that allows all actions (set ``Action`` and ``Resource`` to ``*```)." msgstr "ã™ã¹ã¦ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’許å¯ã™ã‚‹ `IAM ãƒãƒªã‚·ãƒ¼ã‚’ä½œæˆ `_ ã—ã¾ã™ (``Action`` ãŠã‚ˆã³ ``Resource`` ã‚’ ``*``' ã«è¨­å®š)。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:730 msgid "Run your tests locally with this policy. On AnsibleAWSModule-based modules, the ``debug_botocore_endpoint_logs`` option is automatically set to ``yes``, so you should see a list of AWS ACTIONS after the PLAY RECAP showing all the permissions used. If your tests use a boto/AnsibleModule module, you must start with the least permissive policy (see below)." msgstr "ã“ã®ãƒãƒªã‚·ãƒ¼ã‚’使用ã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚AnsibleAWSModule ベースã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€``debug_botocore_endpoint_logs`` オプションãŒè‡ªå‹•的㫠``yes`` ã«è¨­å®šã•れã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€PLAY RECAP ã®å¾Œã«ã€ä½¿ç”¨ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ‘ーミッションを示㙠AWS ACTIONS ã®ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚テスト㧠boto/AnsibleModule モジュールを使用ã™ã‚‹å ´åˆã¯ã€æœ€ã‚‚許容度ã®ä½Žã„ãƒãƒªã‚·ãƒ¼ã‹ã‚‰é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (以下をå‚ç…§)。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:731 msgid "Modify your policy to allow only the actions your tests use. Restrict account, region, and prefix where possible. Wait a few minutes for your policy to update." msgstr "テストã§ä½¿ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ã¿ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«ãƒãƒªã‚·ãƒ¼ã‚’変更ã—ã¾ã™ã€‚å¯èƒ½ãªå ´åˆã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã€åœ°åŸŸã€ãƒ—レフィックスを制é™ã—ã¦ãã ã•ã„。ãƒãƒªã‚·ãƒ¼ãŒæ›´æ–°ã•れるã¾ã§æ•°åˆ†å¾…ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:732 msgid "Run the tests again with a user or role that allows only the new policy." msgstr "æ–°è¦ãƒãƒªã‚·ãƒ¼ã®ã¿ã‚’許å¯ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ãƒ†ã‚¹ãƒˆã‚’å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:733 msgid "If the tests fail, troubleshoot (see tips below), modify the policy, run the tests again, and repeat the process until the tests pass with a restrictive policy." msgstr "テストã«å¤±æ•—ã—ã€ãƒˆãƒ©ãƒ–ルシューティング (以下ã®ãƒ’ントをå‚ç…§) を行ã„ã€ãƒãƒªã‚·ãƒ¼ã‚’変更ã—ã€ãƒ†ã‚¹ãƒˆã‚’å†å®Ÿè¡Œã—ã€åˆ¶é™çš„ãªãƒãƒªã‚·ãƒ¼ã§ãƒ†ã‚¹ãƒˆã«åˆæ ¼ã™ã‚‹ã¾ã§ãƒ—ロセスを繰り返ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:734 #: ../../rst/dev_guide/platforms/aws_guidelines.rst:751 msgid "Open a pull request proposing the minimum required policy to the `CI policies `_." msgstr "`CI ãƒãƒªã‚·ãƒ¼ `_ ã«å¯¾ã—ã¦æœ€ä½Žé™å¿…è¦ãªãƒãƒªã‚·ãƒ¼ã‚’ææ¡ˆã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:736 msgid "To start from the least permissive IAM policy:" msgstr "最も許容度ã®ä½Žã„ IAM ãƒãƒªã‚·ãƒ¼ã‹ã‚‰é–‹å§‹ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:738 msgid "Run the integration tests locally with no IAM permissions." msgstr "IAM パーミッションを使用ã›ãšã«ãƒ­ãƒ¼ã‚«ãƒ«ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:746 msgid "Examine the error when the tests reach a failure." msgstr "テストãŒå¤±æ•—ã—ãŸå ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:740 msgid "If the error message indicates the action used in the request, add the action to your policy." msgstr "エラーメッセージãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä½¿ç”¨ã•れるアクションを示ã™å ´åˆã¯ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒªã‚·ãƒ¼ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:742 msgid "If the error message does not indicate the action used in the request:" msgstr "エラーメッセージãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä½¿ç”¨ã•れるアクションを示ã—ã¦ã„ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:742 msgid "Usually the action is a CamelCase version of the method name - for example, for an ec2 client the method `describe_security_groups` correlates to the action `ec2:DescribeSecurityGroups`." msgstr "通常ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ãƒ¡ã‚½ãƒƒãƒ‰åã® CamelCase ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚ãŸã¨ãˆã°ã€ec2 クライアントã®å ´åˆã€`describe_security_groups` メソッドã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ `ec2:DescribeSecurityGroups` ã«ç›¸é–¢ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:743 msgid "Refer to the documentation to identify the action." msgstr "アクションを特定ã™ã‚‹ã«ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:744 msgid "If the error message indicates the resource ARN used in the request, limit the action to that resource." msgstr "エラーメッセージãŒè¦æ±‚ã§ä½¿ç”¨ã•れるリソース ARN を示ã™å ´åˆã¯ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãã®ãƒªã‚½ãƒ¼ã‚¹ã«åˆ¶é™ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:746 msgid "If the error message does not indicate the resource ARN used:" msgstr "エラーメッセージã«ã€ä½¿ç”¨ã•れãŸãƒªã‚½ãƒ¼ã‚¹ ARN ãŒç¤ºã•れãªã„å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:746 msgid "Determine if the action can be restricted to a resource by examining the documentation." msgstr "ドキュメントをå‚ç…§ã—ã¦ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’リソースã«åˆ¶é™ã§ãã‚‹ã‹ã©ã†ã‹ã‚’判断ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:747 msgid "If the action can be restricted, use the documentation to construct the ARN and add it to the policy." msgstr "アクションãŒåˆ¶é™ã•れã¦ã„ã‚‹å ´åˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’使用ã—㦠ARN を構築ã—ã€ãƒãƒªã‚·ãƒ¼ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:748 msgid "Add the action or resource that caused the failure to `an IAM policy `_. Wait a few minutes for your policy to update." msgstr "`IAM ãƒãƒªã‚·ãƒ¼ `_ ã®å¤±æ•—ã®åŽŸå› ã¨ãªã£ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ãƒªã‚½ãƒ¼ã‚¹ã‚’追加ã—ã¾ã™ã€‚ãƒãƒªã‚·ãƒ¼ãŒæ›´æ–°ã™ã‚‹ã¾ã§æ•°åˆ†å¾…ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:749 msgid "Run the tests again with this policy attached to your user or role." msgstr "ユーザーã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã«ã“ã®ãƒãƒªã‚·ãƒ¼ã‚’割り当ã¦ã€ãƒ†ã‚¹ãƒˆã‚’å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:750 msgid "If the tests still fail at the same place with the same error you will need to troubleshoot (see tips below). If the first test passes, repeat steps 2 and 3 for the next error. Repeat the process until the tests pass with a restrictive policy." msgstr "ãれã§ã‚‚åŒã˜å ´æ‰€ã€åŒã˜ã‚¨ãƒ©ãƒ¼ã§ãƒ†ã‚¹ãƒˆãŒå¤±æ•—ã™ã‚‹å ´åˆã¯ã€ãƒˆãƒ©ãƒ–ルシューティングを行ã†å¿…è¦ãŒã‚りã¾ã™ (以下ã®ãƒ’ントをå‚ç…§)。最åˆã®ãƒ†ã‚¹ãƒˆã«åˆæ ¼ã—ãŸå ´åˆã¯ã€æ¬¡ã®ã‚¨ãƒ©ãƒ¼ã«å¯¾ã—ã¦æ‰‹é † 2 㨠3 を繰り返ã—ã¾ã™ã€‚制é™ä»˜ããƒãƒªã‚·ãƒ¼ã§ãƒ†ã‚¹ãƒˆã«åˆæ ¼ã™ã‚‹ã¾ã§ã€ã“ã®ãƒ—ロセスを繰り返ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:754 msgid "Troubleshooting IAM policies" msgstr "IAM ãƒãƒªã‚·ãƒ¼ã®ãƒˆãƒ©ãƒ–ルシューティング" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:756 msgid "When you make changes to a policy, wait a few minutes for the policy to update before re-running the tests." msgstr "ãƒãƒªã‚·ãƒ¼ã«å¤‰æ›´ã‚’加ãˆãŸã‚‰ã€ãƒãƒªã‚·ãƒ¼ãŒæ›´æ–°ã•れるã¾ã§æ•°åˆ†å¾…ã£ã¦ã‹ã‚‰ãƒ†ã‚¹ãƒˆã‚’å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:757 msgid "Use the `policy simulator `_ to verify that each action (limited by resource when applicable) in your policy is allowed." msgstr "`ãƒãƒªã‚·ãƒ¼ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ `_ を使用ã—ã¦ã€ãƒãƒªã‚·ãƒ¼å†…ã® (該当ã™ã‚‹å ´åˆã¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚ˆã£ã¦åˆ¶é™ã•れã¦ã„ã‚‹) ãŒè¨±å¯ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:758 msgid "If you're restricting actions to certain resources, replace resources temporarily with `*`. If the tests pass with wildcard resources, there is a problem with the resource definition in your policy." msgstr "特定ã®ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’制é™ã™ã‚‹å ´åˆã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’一時的㫠`*` ã«ç½®ãæ›ãˆã¾ã™ã€‚ワイルドカードリソースã§ãƒ†ã‚¹ãƒˆã«åˆæ ¼ã—ãŸå ´åˆã¯ã€ãƒãƒªã‚·ãƒ¼ã®ãƒªã‚½ãƒ¼ã‚¹å®šç¾©ã«å•題ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:759 msgid "If the initial troubleshooting above doesn't provide any more insight, AWS may be using additional undisclosed resources and actions." msgstr "ä¸Šè¨˜ã®æœ€åˆã®ãƒˆãƒ©ãƒ–ルシューティングã§ã‚ˆã‚Šå¤šãã®æ´žå¯ŸãŒå¾—られãªã„å ´åˆã€AWS ã¯è¿½åŠ ã®éžå…¬é–‹ã®ãƒªã‚½ãƒ¼ã‚¹ãŠã‚ˆã³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:760 msgid "Examine the AWS FullAccess policy for the service for clues." msgstr "手ãŒã‹ã‚Šã«ã¤ã„ã¦ã¯ã€ã‚µãƒ¼ãƒ“ス㮠AWS FullAccess ãƒãƒªã‚·ãƒ¼ã‚’調ã¹ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:761 msgid "Re-read the AWS documentation, especially the list of `Actions, Resources and Condition Keys `_ for the various AWS services." msgstr "å„種㮠AWS サービスã®ã€Œ`Actions, Resources and Condition Keys `_ã€ã®ä¸€è¦§ãªã©ã€AWS ドキュメントをå†åº¦èª­ã¿ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:762 msgid "Look at the `cloudonaut `_ documentation as a troubleshooting cross-reference." msgstr "トラブルシューティングã®ç›¸äº’å‚ç…§ã¨ã—㦠`cloudonaut `_ ドキュメントをã”覧ãã ã•ã„。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:763 msgid "Use a search engine." msgstr "検索エンジンを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:764 msgid "Ask in the #ansible-aws chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "#ansible-awsãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã§è³ªå•ã—ã¦ãã ã•ã„(ansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)。" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:767 msgid "Unsupported Integration tests" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:769 msgid "There are a limited number of reasons why it may not be practical to run integration tests for a module within CI. Where these apply you should add the keyword `unsupported` to the aliases file in `test/integration/targets/MODULE_NAME/aliases`." msgstr "CI 内ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ãŒå®Ÿç”¨çš„ã§ãªã„ç†ç”±ã¯é™ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ã“れãŒå½“ã¦ã¯ã¾ã‚‹å ´åˆã¯ã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ `unsupported` ã‚’ `test/integration/targets/MODULE_NAME/aliases` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãƒ•ァイルã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:773 msgid "Some cases where tests should be marked as unsupported: 1) The tests take longer than 10 or 15 minutes to complete 2) The tests create expensive resources 3) The tests create inline policies 4) The tests require the existence of external resources 5) The tests manage Account level security policies such as the password policy or AWS Organizations." msgstr "1) テストãŒå®Œäº†ã™ã‚‹ã¾ã§ 10 分ã¾ãŸã¯ 15 分以上ã‹ã‹ã‚‹å ´åˆã€‚2) テストã«ã‚ˆã‚Šã€é«˜ä¾¡ãªãƒªã‚½ãƒ¼ã‚¹ãŒä½œæˆã•れる場åˆã€‚3) テストã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ãƒãƒªã‚·ãƒ¼ãŒä½œæˆã•れる場åˆã€‚4) テストã«å¤–部リソースã®å­˜åœ¨ãŒå¿…è¦ã«ãªã‚‹å ´åˆã€‚5) テストãŒã€ãƒ‘スワードãƒãƒªã‚·ãƒ¼ã‚„ AWS 組織ãªã©ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ¬ãƒ™ãƒ«ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒãƒªã‚·ãƒ¼ã‚’管ç†ã™ã‚‹å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆã‚’サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:780 msgid "Where one of these reasons apply you should open a pull request proposing the minimum required policy to the `unsupported test policies `_." msgstr "上記ã®ç†ç”±ã® 1 ã¤ã¯ã€`サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ãƒ†ã‚¹ãƒˆãƒãƒªã‚·ãƒ¼ `_ ã«å¯¾ã—ã¦æœ€ä½Žé™å¿…è¦ãªãƒãƒªã‚·ãƒ¼ã‚’ææ¡ˆã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/aws_guidelines.rst:783 msgid "Unsupported integration tests will not be automatically run by CI. However, the necessary policies should be available so that the tests can be manually run by someone performing a PR review or writing a patch." msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®çµ±åˆãƒ†ã‚¹ãƒˆã¯ CI ã«ã‚ˆã£ã¦è‡ªå‹•çš„ã«å®Ÿè¡Œã•れã¾ã›ã‚“ãŒã€å¿…è¦ãªãƒãƒªã‚·ãƒ¼ã‚’利用ã™ã‚‹ã¨ã€PR レビューã¾ãŸã¯ãƒ‘ッãƒã®ä½œæˆã‚’実行ã—ã¦ãƒ†ã‚¹ãƒˆã‚’手動ã§å®Ÿè¡Œã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/openstack_guidelines.rst:4 msgid "OpenStack Ansible Modules" msgstr "OpenStack Ansible モジュール" #: ../../rst/dev_guide/platforms/openstack_guidelines.rst:6 msgid "Please see the `OpenStack guidelines `_, for further information." msgstr "詳細ã¯ã€`OpenStack ガイドライン `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:4 msgid "oVirt Ansible Modules" msgstr "oVirt Ansible モジュール" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:6 msgid "The set of modules for interacting with oVirt/RHV are currently part of the community.general collection (on `Galaxy `_, source code `repository `_). This document serves as developer coding guidelines for creating oVirt/RHV modules." msgstr "oVirt/RHV ã¨ã®å¯¾è©±ã«ä½¿ç”¨ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã¯ã€ç¾åœ¨ community.general コレクション (`Galaxy `_ ã§ã¯ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `repository `_) ã«å«ã¾ã‚Œã¾ã™ã€‚ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€oVirt/RHV モジュールを作æˆã™ã‚‹ãŸã‚ã®é–‹ç™ºè€…コーディングã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:12 #: ../../rst/dev_guide/testing_validate-modules.rst:95 #: ../../rst/dev_guide/testing_validate-modules.rst:98 #: ../../rst/dev_guide/testing_validate-modules.rst:107 #: ../../rst/dev_guide/testing_validate-modules.rst:135 msgid "Naming" msgstr "命åè¦å‰‡" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:14 msgid "All modules should start with an ``ovirt_`` prefix." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``ovirt_`` プレフィックスã§é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:15 msgid "All modules should be named after the resource it manages in singular form." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç®¡ç†ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã«ã¡ãªã‚“ã§å˜æ•°å½¢ã§åå‰ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:17 msgid "All modules that gather information should have a ``_info`` suffix." msgstr "情報をåŽé›†ã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ã€``_info`` æ§‹æ–‡ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:21 msgid "Interface" msgstr "インターフェース" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:23 msgid "Every module should return the ID of the resource it manages." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç®¡ç†ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã® ID ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:24 msgid "Every module should return the dictionary of the resource it manages." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç®¡ç†ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:25 msgid "Never change the name of the parameter, as we guarantee backward compatibility. Use aliases instead." msgstr "å¾Œæ–¹äº’æ›æ€§ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã€ãƒ‘ラメーターã®åå‰ã¯å¤‰æ›´ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:27 msgid "If a parameter can't achieve idempotency for any reason, please document it." msgstr "パラメーターãŒãªã‚“らã‹ã®ç†ç”±ã§å†ªç­‰æ€§ã‚’実ç¾ã§ããªã„å ´åˆã¯ã€ãれを文書化ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:31 msgid "Interoperability" msgstr "相互é‹ç”¨æ€§" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:33 msgid "All modules should work against all minor versions of version 4 of the API. Version 3 of the API is not supported." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 4 ã®ã™ã¹ã¦ã®ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦å‹•作ã—ã¾ã™ã€‚API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3 ã¯ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:37 msgid "Libraries" msgstr "ライブラリー" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:39 msgid "All modules should use ``ovirt_full_argument_spec`` or ``ovirt_info_full_argument_spec`` to pick up the standard input (such as auth and ``fetch_nested``)." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ovirt_full_argument_spec`` ã¾ãŸã¯ ``ovirt_info_full_argument_spec`` を使用ã—ã¦ã€æ¨™æº–入力 (èªè¨¼ã€``fetch_nested`` ãªã©) ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:42 msgid "All modules should use ``extends_documentation_fragment``: ovirt to go along with ``ovirt_full_argument_spec``." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``ovirt_full_argument_spec`` ã«å¾“ã†ãŸã‚ã« ``extends_documentation_fragment``: ovirt を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:44 msgid "All info modules should use ``extends_documentation_fragment``: ``ovirt_info`` to go along with ``ovirt_info_full_argument_spec``." msgstr "ã™ã¹ã¦ã® info モジュールã¯ã€``ovirt_info_full_argument_spec`` ã«å¾“ã†ãŸã‚ã« ``extends_documentation_fragment``: ``ovirt_info`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:46 msgid "Functions that are common to all modules should be implemented in the ``module_utils/ovirt.py`` file, so they can be reused." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å…±é€šã™ã‚‹é–¢æ•°ã¯ã€``module_utils/ovirt.py`` ファイルã«å®Ÿè£…ã•れã¦ã„ã‚‹ãŸã‚ã€å†åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:48 msgid "Python SDK version 4 must be used." msgstr "Python SDK ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 4 を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:51 msgid "New module development" msgstr "æ–°ã—ã„モジュール開発" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:53 msgid "Please read :ref:`developing_modules`, first to know what common properties, functions and features every module must have." msgstr "「:ref:`developing_modules`ã€ã‚’ãŠèª­ã¿ãã ã•ã„。最åˆã«ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¿…è¦ãªå…±é€šã®ãƒ—ロパティーã€é–¢æ•°ã€ãŠã‚ˆã³æ©Ÿèƒ½ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:57 msgid "In order to achieve idempotency of oVirt entity attributes, a helper class was created. The first thing you need to do is to extend this class and override a few methods:" msgstr "oVirt エンティティー属性ã®å†ªç­‰æ€§ã‚’実ç¾ã™ã‚‹ã«ã¯ã€ãƒ˜ãƒ«ãƒ‘ークラスãŒä½œæˆã•れã¾ã—ãŸã€‚ã¾ãšã€ã“ã®ã‚¯ãƒ©ã‚¹ã‚’æ‹¡å¼µã—ã€ã„ãã¤ã‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’上書ãã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:99 msgid "The code above handle the check if the entity should be updated, so we don't update the entity if not needed and also it construct the needed entity of the SDK." msgstr "上記ã®ã‚³ãƒ¼ãƒ‰ã¯ã€ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã‚’æ›´æ–°ã™ã¹ãã‹ã©ã†ã‹ã®ãƒã‚§ãƒƒã‚¯ã‚’処ç†ã™ã‚‹ãŸã‚ã€å¿…è¦ã§ãªã„å ´åˆã¯ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã‚’æ›´æ–°ã›ãšã€SDK ã«å¿…è¦ãªã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã‚’構築ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:176 msgid "If your module must support action handling (for example, virtual machine start) you must ensure that you handle the states of the virtual machine correctly, and document the behavior of the module:" msgstr "モジュールãŒã‚¢ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç† (例: 仮想マシンã®é–‹å§‹) をサãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®çŠ¶æ…‹ã‚’æ­£ã—ã処ç†ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‹•作を文書化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:204 msgid "As you can see from the preceding example, the ``action`` method accepts the ``action_condition`` and ``wait_condition``, which are methods which accept the virtual machine object as a parameter, so you can check whether the virtual machine is in a proper state before the action. The rest of the parameters are for the ``start`` action. You may also handle pre- or post- action tasks by defining ``pre_action`` and ``post_action`` parameters." msgstr "å‰è¿°ã®ä¾‹ã§åˆ†ã‹ã‚‹ã‚ˆã†ã«ã€``action`` メソッド㯠``action_condition`` ãŠã‚ˆã³ ``wait_condition`` (仮想マシンオブジェクトをパラメーターã¨ã—ã¦è¨±å¯ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰) ã‚’å—ã‘入れã¾ã™ã€‚ãã®ãŸã‚ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å‰ã«é©åˆ‡ãªçŠ¶æ…‹ã«ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã§ãã¾ã™ã€‚残りã®ãƒ‘ラメーター㯠``start`` アクション用ã§ã™ã€‚``pre_action`` パラメーターãŠã‚ˆã³ ``post_action`` パラメーターを定義ã—ã¦ã€äº‹å‰ã¾ãŸã¯å¾Œç¶šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¿ã‚¹ã‚¯ã‚’処ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:213 msgid "Testing" msgstr "テスト" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:215 msgid "Integration testing is currently done in oVirt's CI system `on Jenkins `__ and `on GitHub `__." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€ç¾åœ¨ã€`Jenkins `__ 㨠`GitHub `__ ã® oVirt's CI システムã§è¡Œã‚れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/ovirt_dev_guide.rst:219 msgid "Please consider using these integration tests if you create a new module or add a new feature to an existing module." msgstr "æ–°ã—ã„モジュールを作æˆã™ã‚‹å ´åˆã€ã¾ãŸã¯æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ–°ã—ã„æ©Ÿèƒ½ã‚’追加ã™ã‚‹å ´åˆã¯ã€ã“れらã®çµ±åˆãƒ†ã‚¹ãƒˆã®ä½¿ç”¨ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:5 msgid "Guidelines for VMware module development" msgstr "VMware モジュール開発ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:7 msgid "The Ansible VMware collection (on `Galaxy `_, source code `repository `_) is maintained by the VMware Working Group. For more information see the `team community page `_." msgstr "詳細ã¯ã€Ansible VMware コレクション (`Galaxy `_ ã§ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `repository `_) 㯠VMware ワーキンググループã«ã‚ˆã‚Šç¶­æŒã•れã¾ã™ã€‚詳細㯠`ãƒãƒ¼ãƒ ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒšãƒ¼ã‚¸ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:13 msgid "Testing with govcsim" msgstr "govcsim を使用ã—ãŸãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:15 msgid "Most of the existing modules are covered by functional tests. The tests are located `here `_." msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã»ã¨ã‚“ã©ã¯ã€æ©Ÿèƒ½ãƒ†ã‚¹ãƒˆã§å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚テストã¯ã€`ã“ã“ `_ ã«ç½®ã‹ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:17 msgid "By default, the tests run against a vCenter API simulator called `govcsim `_. ``ansible-test`` will automatically pull a `govcsim container `_ and use it to set-up the test environment." msgstr "デフォルトã§ã¯ã€ãƒ†ã‚¹ãƒˆã¯ã€`govcsim `_ ã¨ã„ã†åå‰ã® vCenter API シミュレーターã«å¯¾ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚``ansible-test`` ã¯ã€`govcsim コンテナー `_ を自動的ã«ãƒ—ルã—ã€ã“れを使用ã—ã¦ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:19 msgid "You can trigger the test of a module manually with the ``ansible-test`` command. For example, to trigger ``vcenter_folder`` tests:" msgstr "``ansible-test`` コマンドを使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆã‚’手動ã§ãƒˆãƒªã‚¬ãƒ¼ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``vcenter_folder`` テストを開始ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:26 msgid "``govcsim`` is handy because it is much faster than a regular test environment. However, ``govcsim`` does not support all the ESXi or vCenter features." msgstr "``govcsim`` ã¯ã€é€šå¸¸ã®ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚ˆã‚Šã‚‚ã¯ã‚‹ã‹ã«é«˜é€Ÿã§ã™ãŒã€``govcsim`` 㯠ESXi 機能ã¾ãŸã¯ vCenter 機能をã™ã¹ã¦ã‚µãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:31 msgid "Do not confuse ``govcsim`` with ``vcsim``. ``vcsim`` is an older and outdated version of vCenter simulator, whereas ``govcsim`` is new and written in Go language." msgstr "``govcsim`` 㨠``vcsim`` ã‚’æ··åŒã—ãªã„ã§ãã ã•ã„。``vcsim`` ã¯ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® vCenterシミュレーターã§ã™ãŒã€``govcsim`` ã¯æ–°ã—ãã€Go è¨€èªžã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:34 msgid "Testing with your own infrastructure" msgstr "独自ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã§ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:36 msgid "You can also target a regular VMware environment. This paragraph explains step by step how you can run the test-suite yourself." msgstr "通常㮠VMware 環境を対象ã¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®æ®µè½ã§ã¯ã€ãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã‚’自分ã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦é †ã‚’追ã£ã¦èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:41 msgid "2 ESXi hosts (6.5 or 6.7)" msgstr "2 å°ã® ESXi ホスト (6.5 ã¾ãŸã¯ 6.7)" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:42 msgid "with 2 NIC, the second ones should be available for the test" msgstr "2 ã¤ã® NIC (テスト用㫠2 番目㮠NIC ãŒåˆ©ç”¨å¯èƒ½)" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:43 msgid "a VCSA host" msgstr "VCSA ホスト" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:44 msgid "a NFS server" msgstr "NFS サーãƒãƒ¼" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:47 msgid "Python dependencies:" msgstr "Python ã®ä¾å­˜é–¢ä¿‚:" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:46 msgid "`pyvmomi `_" msgstr "`pyvmomi `_" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:47 msgid "`requests `_" msgstr "`requests `_" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:49 msgid "If you want to deploy your test environment in a hypervisor, both `VMware or Libvirt `_ work well." msgstr "ãƒã‚¤ãƒ‘ーãƒã‚¤ã‚¶ãƒ¼ã«ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’デプロイã™ã‚‹å ´åˆã¯ã€`VMware ã¾ãŸã¯ Libvirt `_ ã®ä¸¡æ–¹ãŒæ­£å¸¸ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:52 msgid "NFS server configuration" msgstr "NFS サーãƒãƒ¼ã®è¨­å®š" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:54 msgid "Your NFS server must expose the following directory structure:" msgstr "NFS サーãƒãƒ¼ã§ã¯ã€ä»¥ä¸‹ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ã‚’公開ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:67 msgid "On a Linux system, you can expose the directory over NFS with the following export file:" msgstr "Linux システムã§ã¯ã€æ¬¡ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ•ァイルを使用ã—ã¦ã€NFS 経由ã§ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’公開ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:76 msgid "With this configuration all the new files will be owned by the user with the UID and GID 1000/1000. Adjust the configuration to match your user's UID/GID." msgstr "ã“ã®è¨­å®šã§ã¯ã€UID 1000 ãŠã‚ˆã³ GID 1000 ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€æ–°ã—ã„ファイルをã™ã¹ã¦æ‰€æœ‰ã—ã¾ã™ã€‚ユーザー㮠UID ãŠã‚ˆã³ GID ã«åˆã‚ã›ã¦è¨­å®šã‚’調整ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:79 msgid "The service can be enabled with:" msgstr "ã“ã®ã‚µãƒ¼ãƒ“スã¯ä»¥ä¸‹ã§æœ‰åйã«ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:87 msgid "Configure your installation" msgstr "インストールã®è¨­å®š" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:89 msgid "Prepare a configuration file that describes your set-up. The file should be called :file:`test/integration/cloud-config-vcenter.ini` and based on :file:`test/lib/ansible_test/config/cloud-config-vcenter.ini.template`. For instance, if you have deployed your lab with `vmware-on-libvirt `_:" msgstr "セットアップを説明ã™ã‚‹æ§‹æˆãƒ•ァイルを準備ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイル㯠:file:`test/integration/cloud-config-vcenter.ini` ã¨ã„ã†åå‰ã—ã€:file:`test/lib/ansible_test/config/cloud-config-vcenter.ini.template` をベースã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€`vmware-on-libvirt `_ ã§ãƒ©ãƒœã‚’デプロイã—ãŸå ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:109 msgid "Using an HTTP proxy" msgstr "HTTP プロキシーã®ä½¿ç”¨" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:110 msgid "Hosting test infrastructure behind an HTTP proxy is supported. You can specify the location of the proxy server with the two extra keys:" msgstr "HTTP プロキシーã®èƒŒå¾Œã«ã‚るホスティングテストインフラストラクãƒãƒ£ãƒ¼ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚次㮠2 ã¤ã®è¿½åŠ ã‚­ãƒ¼ã‚’ä½¿ç”¨ã—ã¦ã€ãƒ—ロキシーサーãƒãƒ¼ã®å ´æ‰€ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:117 msgid "In addition, you may need to adjust the variables of the following `var files `_ to match the configuration of your lab. If you use vmware-on-libvirt to prepare your lab, you do not have anything to change." msgstr "ã•らã«ã€ãƒ©ãƒœã®æ§‹æˆã«ä¸€è‡´ã•ã›ã‚‹ãŸã‚ã«ã€æ¬¡ã® `var ファイル `_ ã®å¤‰æ•°ã‚’調整ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚vmware-on-libvirt を使用ã—ã¦ãƒ©ãƒœã‚’準備ã™ã‚‹å ´åˆã¯ã€å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:120 msgid "Run the test-suite" msgstr "テストスイートã®å®Ÿè¡Œ" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:122 msgid "Once your configuration is ready, you can trigger a run with the following command:" msgstr "è¨­å®šã®æº–å‚™ãŒã§ããŸã‚‰ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã§å®Ÿè¡Œã‚’トリガーã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:129 msgid "``vmware_host_firewall_manager`` is the name of the module to test." msgstr "``vmware_host_firewall_manager`` ã¯ã€ãƒ†ã‚¹ãƒˆã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:131 msgid "``vmware_guest`` is much larger than any other test role and is rather slow. You can enable or disable some of its test playbooks in `main.yml `_." msgstr "``vmware_guest`` ã¯ã€ä»–ã®ãƒ†ã‚¹ãƒˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šã‚‚ã¯ã‚‹ã‹ã«å¤§ããã€é€Ÿåº¦ã‚‚ã‹ãªã‚Šé…ããªã‚Šã¾ã™ã€‚`main.yml `_ ã§ãƒ†ã‚¹ãƒˆ Playbook ã®ä¸€éƒ¨ã‚’有効ã¾ãŸã¯ç„¡åйã«ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:135 msgid "Unit-test" msgstr "ユニットテスト" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:137 msgid "The VMware modules have limited unit-test coverage. You can run the test suite with the following commands:" msgstr "VMware モジュールã§ã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®ç¯„囲ãŒé™å®šã•れã¦ã„ã¾ã™ã€‚以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:146 msgid "Code style and best practice" msgstr "コードスタイルãŠã‚ˆã³ãƒ™ã‚¹ãƒˆãƒ—ラクティス" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:149 msgid "datacenter argument with ESXi" msgstr "ESXi ã§ã® datacenter 引数" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:151 msgid "The ``datacenter`` parameter should not use ``ha-datacenter`` by default. This is because the user may not realize that Ansible silently targets the wrong data center." msgstr "``datacenter`` パラメーターã¯ãƒ‡ãƒ•ォルト㧠``ha-datacenter`` を使用ã—ãªã„ã§ãã ã•ã„。ã“れã¯ã€Ansible ãŒé–“é•ã£ãŸãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã‚’サイレントã«ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ã—ã¦ã„ã‚‹ã“ã¨ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ°—付ã‹ãªã„å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:155 msgid "esxi_hostname should not be mandatory" msgstr "esxi_hostname ã¯å¿…é ˆã§ã¯ãªã„" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:157 msgid "Depending upon the functionality provided by ESXi or vCenter, some modules can seamlessly work with both. In this case, ``esxi_hostname`` parameter should be optional." msgstr "ESXi ã¾ãŸã¯ vCenter ãŒæä¾›ã™ã‚‹æ©Ÿèƒ½ã«å¿œã˜ã¦ã€ä¸€éƒ¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä¸¡æ–¹ã§ã‚·ãƒ¼ãƒ ãƒ¬ã‚¹ã«å‹•作ã—ã¾ã™ã€‚ã“ã®å ´åˆã€``esxi_hostname`` パラメーターã¯ä»»æ„ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:173 msgid "Example should use the fully qualified collection name (FQCN)" msgstr "例ã§ã¯ã€å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) を使用" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:175 msgid "Use FQCN for examples within module documentation. For instance, you should use ``community.vmware.vmware_guest`` instead of just ``vmware_guest``." msgstr "モジュールドキュメントã®ä¾‹ã¨ã—ã¦ã¯ã€FQCN を使用ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€``vmware_guest`` ã§ã¯ãªã ``community.vmware.vmware_guest`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:178 msgid "This way, the examples do not depend on the ``collections`` directive of the playbook." msgstr "ã“ã®æ–¹æ³•ã§ã¯ã€Playbook ã® ``collections`` ディレクティブã«ä¾å­˜ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:182 msgid "Functional tests" msgstr "機能テスト" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:185 msgid "Writing new tests" msgstr "æ–°è¦ãƒ†ã‚¹ãƒˆã®ä½œæˆ" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:187 msgid "If you are writing a new collection of integration tests, there are a few VMware-specific things to note beyond the standard Ansible :ref:`integration testing` process." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®æ–°ã—ã„コレクションを作æˆã—ã¦ã„ã‚‹å ´åˆã¯ã€æ¨™æº–ã® Ansible ã® :ref:`çµ±åˆãƒ†ã‚¹ãƒˆ` ãƒ—ãƒ­ã‚»ã‚¹ä»¥å¤–ã«æ³¨æ„ã™ã¹ã VMware 固有ã®äº‹é …ãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:190 msgid "The test-suite uses a set of common, pre-defined vars located `in prepare_vmware_tests `_ role. The resources defined there are automatically created by importing that role at the start of your test:" msgstr "テストスイートã¯ã€`prepare_vmware_tests `_ ロールã«ã‚る一般的ãªäº‹å‰å®šç¾©æ¸ˆã¿ã®å¤‰æ•°ã®ã‚»ãƒƒãƒˆã‚’使用ã—ã¾ã™ã€‚ã“ã“ã«å®šç¾©ã•れãŸãƒªã‚½ãƒ¼ã‚¹ã¯ã€ãƒ†ã‚¹ãƒˆã®é–‹å§‹æ™‚ã«ãã®ãƒ­ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ã¦è‡ªå‹•çš„ã«ä½œæˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:200 msgid "This will give you a ready to use cluster, datacenter, datastores, folder, switch, dvswitch, ESXi hosts, and VMs." msgstr "ã“れã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã€ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã€ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€ã‚¹ã‚¤ãƒƒãƒã€dvSwitchã€ESXi ホストã€ãŠã‚ˆã³ä»®æƒ³ãƒžã‚·ãƒ³ã‚’使用ã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:203 msgid "No need to create too much resources" msgstr "リソースをéŽå‰°ã«ä½œæˆã™ã‚‹å¿…è¦ãªã—" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:205 msgid "Most of the time, it's not necessary to use ``with_items`` to create multiple resources. By avoiding it, you speed up the test execution and you simplify the clean up afterwards." msgstr "多ãã®å ´åˆã€``with_items`` を使用ã—ã¦è¤‡æ•°ã®ãƒªã‚½ãƒ¼ã‚¹ã®ä½œæˆã‚’行ã†å¿…è¦ã¯ã‚りã¾ã›ã‚“。ã“れを回é¿ã™ã‚‹ã“ã¨ã§ã€ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã‚’迅速化ã—ã¦ã€å¾Œã§ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã‚’å˜ç´”化ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:209 msgid "VM names should be predictable" msgstr "仮想マシンåã¯ã€åå‰ã§å†…容ãŒäºˆæ¸¬ã§ãã‚‹ã‚‚ã®ã«ã™ã‚‹" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:211 msgid "If you need to create a new VM during your test, you can use ``test_vm1``, ``test_vm2`` or ``test_vm3``. This way it will be automatically clean up for you." msgstr "ãƒ†ã‚¹ãƒˆä¸­ã«æ–°ã—ã„仮想マシンを作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``test_vm1``ã€``test_vm2``ã€ã¾ãŸã¯ ``test_vm3`` を使用ã§ãã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã€è‡ªå‹•çš„ã«ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:215 msgid "Avoid the common boiler plate code in your test playbook" msgstr "テスト Playbook ã§ä¸€èˆ¬çš„㪠boilerplate コードを回é¿ã™ã‚‹" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:217 msgid "From Ansible 2.10, the test suite uses `modules_defaults`. This module allow us to preinitialize the following default keys of the VMware modules:" msgstr "Ansible 2.10 以é™ã§ã¯ã€ãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã¯ `modules_defaults` を使用ã—ã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã‚Šã€ä»¥ä¸‹ã® VMware モジュールã®ãƒ‡ãƒ•ォルトキーを事å‰ã«åˆæœŸåŒ–ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:220 msgid "hostname" msgstr "hostname" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:221 msgid "username" msgstr "username" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:222 msgid "password" msgstr "password" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:223 msgid "validate_certs" msgstr "validate_certs" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:225 msgid "For example, the following block:" msgstr "ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ãƒ–ロックã®å ´åˆ:" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:239 msgid "should be simplified to just:" msgstr "以下をå˜ç´”化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:251 msgid "Typographic convention" msgstr "表記è¦å‰‡" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:254 msgid "Nomenclature" msgstr "命忳•" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:256 msgid "We try to enforce the following rules in our documentation:" msgstr "Ansible ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã€æ¬¡ã®ãƒ«ãƒ¼ãƒ«ã‚’é©ç”¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:258 msgid "VMware, not VMWare or vmware" msgstr "VMware (VMWare ã¾ãŸã¯ vmware ã§ã¯ã‚りã¾ã›ã‚“)" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:259 msgid "ESXi, not esxi or ESXI" msgstr "ESXi (esxi ã¾ãŸã¯ ESXI ã§ã¯ã‚りã¾ã›ã‚“)" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:260 msgid "vCenter, not vcenter or VCenter" msgstr "vCenter (vcenter ã¾ãŸã¯ VCenter ã§ã¯ã‚りã¾ã›ã‚“)" #: ../../rst/dev_guide/platforms/vmware_guidelines.rst:262 msgid "We also refer to vcsim's Go implementation with ``govcsim``. This to avoid any confusion with the outdated implementation." msgstr "ã¾ãŸã€``govcsim`` を使用ã—㟠vcsim ã® Go 実装もå‚ç…§ã—ã¾ã™ã€‚ã“れã¯ã€å¤ã„実装ã¨ã®æ··ä¹±ã‚’回é¿ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:5 msgid "Guidelines for VMware REST module development" msgstr "VMware REST モジュール開発ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:7 msgid "The Ansible VMware REST collection (on `Galaxy `_, source code `repository `_) is maintained by Red Hat and the community." msgstr "Ansible VMware REST コレクション (`Galaxy `_ ã§ã¯ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `リãƒã‚¸ãƒˆãƒªãƒ¼ `_) ã¯ã€Red Hat ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã«ã‚ˆã‚Šç¶­æŒã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:13 msgid "Contribution process" msgstr "貢献プロセス" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:15 msgid "The modules of the vmware_rest collection are autogenerated by another tool called `vmware_rest_code_generator `." msgstr "vmware_rest コレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€`vmware_rest_code_generator ` ã¨å‘¼ã°ã‚Œã‚‹åˆ¥ã®ãƒ„ールã«ã‚ˆã‚Šè‡ªå‹•生æˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:17 msgid "If you would like to contribute a change, we would appreciate if you:" msgstr "変更ã«è²¢çŒ®ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:19 msgid "submit a Github Pull Request (PR) against the vmware_rest_code_generator project" msgstr "vmware_rest_code_generator プロジェクトã«å¯¾ã—㦠Github Pull Request (PR) ã‚’é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:20 msgid "but also ensure the generated modules are compliant with our quality criteria." msgstr "ãŸã ã—ã€ç”Ÿæˆã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå“è³ªåŸºæº–ã«æº–æ‹ ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:25 msgid "You will need:" msgstr "以下ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:27 msgid "Python 3.6 or greater" msgstr "Python 3.6 以é™" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:28 msgid "the `tox ` command" msgstr "`tox ` コマンド" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:32 msgid "vmware_rest_code_generator" msgstr "vmware_rest_code_generator" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:34 msgid "Your contribution should follow the coding style of `Black `. To run the code formatter, just run:" msgstr "貢献ã¯ã€`Black ` ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚¹ã‚¿ã‚¤ãƒ«ã«æº–æ‹ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コードフォーマッターを実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:41 msgid "To regenerate the vmware_rest collection, you can use the following commands:" msgstr "vmware_rest コレクションをå†ç”Ÿæˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:47 msgid "If you also want to update the EXAMPLE section of the modules, run:" msgstr "モジュール㮠EXAMPLE セクションも更新ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:54 msgid "Testing with ansible-test" msgstr "ansible-test を使用ã—ãŸãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:56 msgid "All the modules are covered by a functional test. The tests are located in the :file:`tests/integration/targets/`." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€æ©Ÿèƒ½ãƒ†ã‚¹ãƒˆã§å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚テストã¯ã€:file:`tests/integration/targets/` ã«ç½®ã‹ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:58 msgid "To run the tests, you will need a vcenter instance and an ESXi." msgstr "テストを実行ã™ã‚‹ã«ã¯ã€vcenter インスタンス㨠ESXi ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:61 msgid "black code formatter" msgstr "ブラックコードフォーマッター" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:63 msgid "We follow the coding style of `Black `. You can run the code formatter with the following command." msgstr "`Black ` ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚¹ã‚¿ã‚¤ãƒ«ã«æº–æ‹ ã—ã¦ã„ã¾ã™ã€‚以下ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã‚³ãƒ¼ãƒ‰ãƒ•ォーマッターを実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:72 msgid "sanity tests" msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:74 msgid "Here we use Python 3.8, the minimal version is 3.6." msgstr "ã“ã“ã§ã¯ Python 3.8 を使用ã—ã¾ã™ã€‚最å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ 3.6 ã§ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:83 msgid "integration tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:85 msgid "These tests should be run against your test environment." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:87 msgid "..warning:: The test suite will delete all the existing DC from your test environment." msgstr "..警告:: テストスイートã¯ã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã‹ã‚‰æ—¢å­˜ã® DC ã‚’ã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:89 msgid "First, prepare a configuration file, we call it :file:`/tmp/inventory-vmware_rest` in this example:" msgstr "ã¾ãšè¨­å®šãƒ•ァイルを準備ã—ã€ã“ã®ä¾‹ã§ã¯ :file:`/tmp/inventory-vmware_rest` ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/platforms/vmware_rest_guidelines.rst:106 msgid "To run the tests, use the following command. You may want to adjust the Python version." msgstr "テストを実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—㦠Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’調整ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:4 msgid "Basic rules" msgstr "基本ルール" #: ../../rst/dev_guide/style_guide/basic_rules.rst:9 msgid "Use standard American English" msgstr "標準的ãªã‚¢ãƒ¡ãƒªã‚«è‹±èªžã‚’使用ã™ã‚‹" #: ../../rst/dev_guide/style_guide/basic_rules.rst:10 msgid "Ansible uses Standard American English. Watch for common words that are spelled differently in American English (color vs colour, organize vs organise, and so on)." msgstr "Ansible ã¯æ¨™æº–çš„ãªã‚¢ãƒ¡ãƒªã‚«è‹±èªžã‚’使用ã—ã¾ã™ã€‚アメリカ英語ã§ã¯ç¶´ã‚ŠãŒç•°ãªã‚‹ä¸€èˆ¬çš„ãªå˜èªžã«æ³¨æ„ã—ã¦ãã ã•ã„ (color 㨠colourã€organize 㨠organise ãªã©)。" #: ../../rst/dev_guide/style_guide/basic_rules.rst:13 msgid "Write for a global audience" msgstr "世界中ã®èª­è€…ã«å‘ã‘ã¦æ›¸ã" #: ../../rst/dev_guide/style_guide/basic_rules.rst:14 msgid "Everything you say should be understandable by people of different backgrounds and cultures. Avoid idioms and regionalism and maintain a neutral tone that cannot be misinterpreted. Avoid attempts at humor." msgstr "記載ã™ã‚‹å†…容ã¯ã€ç”Ÿã„ç«‹ã¡ã‚„文化ãŒé•ã£ã¦ã‚‚ç†è§£ã§ãã‚‹ã‚‚ã®ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。イディオムや地域主義ã¯ä½¿ç”¨ã›ãšã€èª¤ã£ã¦è§£é‡ˆã•れãªã„中立的ãªè¡¨ç¾ã‚’使用ã—ã¾ã™ã€‚ユーモアãªè¡¨ç¾ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/basic_rules.rst:17 msgid "Follow naming conventions" msgstr "命åè¦å‰‡ã«å¾“ã†" #: ../../rst/dev_guide/style_guide/basic_rules.rst:18 msgid "Always follow naming conventions and trademarks." msgstr "命åè¦å‰‡ã¨å•†æ¨™ã«ã¯å¸¸ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/basic_rules.rst:23 msgid "Use clear sentence structure" msgstr "æ˜Žç¢ºãªæ–‡æ§‹é€ ã‚’使用ã™ã‚‹" #: ../../rst/dev_guide/style_guide/basic_rules.rst:24 msgid "Clear sentence structure means:" msgstr "æ˜Žç¢ºãªæ–‡æ³•構造ã¨ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:26 msgid "Start with the important information first." msgstr "é‡è¦ãªæƒ…報を最åˆã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:27 msgid "Avoid padding/adding extra words that make the sentence harder to understand." msgstr "文章ã®ç†è§£ãŒé›£ã—ããªã‚‹ã‚ˆã†ãªå˜èªžã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/basic_rules.rst:28 msgid "Keep it short - Longer sentences are harder to understand." msgstr "文章ã¯çŸ­ãã—ã¾ã™ã€‚文章ãŒé•·ããªã‚Œã°ãªã‚‹ã»ã©ã€ç†è§£ãŒé›£ã—ããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:30 msgid "Some examples of improving sentences:" msgstr "ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«æ”¹å–„ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:33 #: ../../rst/dev_guide/style_guide/basic_rules.rst:39 msgid "Bad:" msgstr "å•題ãŒã‚る文章: " #: ../../rst/dev_guide/style_guide/basic_rules.rst:33 msgid "The unwise walking about upon the area near the cliff edge may result in a dangerous fall and therefore it is recommended that one remains a safe distance to maintain personal safety." msgstr "The unwise walking about upon the area near the cliff edge may result in a dangerous fall and therefore it is recommended that one remains a safe distance to maintain personal safety. (å´–ã®ç«¯è¿‘ãã‚’æ­©ã回るã¨ã€ä¸‹ã«è½ã¡ã‚‹å±é™ºãŒã‚りã¾ã™ã€‚安全を維æŒã™ã‚‹ãŸã‚ã«å®‰å…¨ãªè·é›¢ã‚’ä¿ã¤ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚)" #: ../../rst/dev_guide/style_guide/basic_rules.rst:36 #: ../../rst/dev_guide/style_guide/basic_rules.rst:42 msgid "Better:" msgstr "改善例: " #: ../../rst/dev_guide/style_guide/basic_rules.rst:36 msgid "Danger! Stay away from the cliff." msgstr "Danger! Stay away from the cliff. (å±é™ºã§ã™ã€‚å´–ã‹ã‚‰é›¢ã‚Œã¦ãã ã•ã„。)" #: ../../rst/dev_guide/style_guide/basic_rules.rst:39 msgid "Furthermore, large volumes of water are also required for the process of extraction." msgstr "Furthermore, large volumes of water are also required for the process of extraction. (ã¾ãŸã€æŠœæ­¯ã®ãƒ—ロセスã«ã¯ã€æ°´ãŒå¤§é‡ã«å¿…è¦ã«ãªã‚Šã¾ã™ã€‚)" #: ../../rst/dev_guide/style_guide/basic_rules.rst:42 msgid "Extraction also requires large volumes of water." msgstr "Extraction also requires large volumes of water. (抜歯ã«ã¯ã€å¤§é‡ã®æ°´ãŒå¿…è¦ã§ã™ã€‚)" #: ../../rst/dev_guide/style_guide/basic_rules.rst:45 msgid "Avoid verbosity" msgstr "冗長をé¿ã‘ã‚‹" #: ../../rst/dev_guide/style_guide/basic_rules.rst:46 msgid "Write short, succinct sentences. Avoid terms like:" msgstr "短ãç°¡æ½”ãªæ–‡ç« ã‚’書ãã¾ã™ã€‚以下ã®ã‚ˆã†ãªç”¨èªžã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/basic_rules.rst:48 msgid "\"...as has been said before,\"" msgstr "「...as has been said beforeã€" #: ../../rst/dev_guide/style_guide/basic_rules.rst:49 msgid "\"..each and every,\"" msgstr "「...each and everyã€" #: ../../rst/dev_guide/style_guide/basic_rules.rst:50 msgid "\"...point in time,\"" msgstr "「...point in timeã€" #: ../../rst/dev_guide/style_guide/basic_rules.rst:51 msgid "\"...in order to,\"" msgstr "「...in order toã€" #: ../../rst/dev_guide/style_guide/basic_rules.rst:54 msgid "Highlight menu items and commands" msgstr "メニュー項目ãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ã‚’強調表示ã™ã‚‹" #: ../../rst/dev_guide/style_guide/basic_rules.rst:55 msgid "When documenting menus or commands, it helps to **bold** what is important." msgstr "メニューã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ã‚’文書化ã™ã‚‹å ´åˆã¯ã€é‡è¦ãªå†…容を **太字** ã«ã™ã‚‹ã¨å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:57 msgid "For menu procedures, bold the menu names, button names, and so on to help the user find them on the GUI:" msgstr "メニュー手順ã§ã¯ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼åã€ãƒœã‚¿ãƒ³åãªã©ã‚’太字ã«ã—ã¦ã€GUI ã§ãã®æ–‡å­—を見ã¤ã‘られるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:59 msgid "On the **File** menu, click **Open**." msgstr "**ファイル** メニューã§ã€**é–‹ã** をクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:60 msgid "Type a name in the **User Name** field." msgstr "**ユーザーå** フィールドã«åå‰ã‚’入力ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:61 msgid "In the **Open** dialog box, click **Save**." msgstr "**é–‹ã** ダイアログボックスã§ã€**ä¿å­˜** をクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:62 msgid "On the toolbar, click the **Open File** icon." msgstr "ツールãƒãƒ¼ã§ã€**ファイルを開ã** アイコンをクリックã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/basic_rules.rst:64 msgid "For code or command snippets, use the RST `code-block directive `_::" msgstr "code ã¾ãŸã¯ command スニペットã®å ´åˆã¯ã€RST ã® `code-block ディレクティブ `_ を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:3 msgid "Grammar and Punctuation" msgstr "文法ãŠã‚ˆã³å¥èª­ç‚¹" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:6 msgid "Common Styles and Usage, and Common Mistakes" msgstr "一般的ãªã‚¹ã‚¿ã‚¤ãƒ«ãŠã‚ˆã³ä½¿ç”¨æ–¹æ³•ã€ãªã‚‰ã³ã«ä¸€èˆ¬çš„ãªé–“é•ã„" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:9 #: ../../rst/dev_guide/testing/sanity/ignores.rst:50 msgid "Ansible" msgstr "Ansible" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:10 msgid "Write \"Ansible.\" Not \"Ansible, Inc.\" or \"AnsibleWorks The only exceptions to this rule are when we're writing legal or financial statements." msgstr "「Ansible, Inc.ã€ã¾ãŸã¯ã€ŒAnsibleWorksã€ã¨ã›ãšã€ã€ŒAnsibleã€ã¨è¨˜è¿°ã—ã¦ãã ã•ã„。ã“ã®ãƒ«ãƒ¼ãƒ«ã®å”¯ä¸€ã®ä¾‹å¤–ã¯ã€æ³•的文書ã¾ãŸã¯è²¡å‹™è«¸è¡¨ã‚’作æˆã™ã‚‹å ´åˆã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:12 msgid "Never use the logotype by itself in body text. Always keep the same font you are using the rest of the sentence." msgstr "ロゴマークã¯ã€æœ¬æ–‡ã§ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãã®ä»–ã®æ–‡ç« ã§ä½¿ç”¨ã—ã¦ã„るフォントを常ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:14 msgid "A company is singular in the US. In other words, Ansible is an \"it,\" not a \"they.\"" msgstr "米国ã§ã¯ã€ä¼šç¤¾ã¯å˜æ•°å½¢ã§ä½¿ç”¨ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€Ansible ã¯ã€ã€Œtheyã€ã§ã¯ãªã「itã€ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:18 msgid "Capitalization" msgstr "大文字" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:19 msgid "If it's not a real product, service, or department at Ansible, don't capitalize it. Not even if it seems important. Capitalize only the first letter of the first word in headlines." msgstr "Ansible ã®å®Ÿéš›ã®è£½å“ã€ã‚µãƒ¼ãƒ“スã€ã¾ãŸã¯éƒ¨é–€ã§ã¯ãªã„å ´åˆã¯ã€å¤§æ–‡å­—ã«ã—ãªã„ã§ãã ã•ã„。見出ã—ã®æœ€åˆã®å˜èªžã®æœ€åˆã®æ–‡å­—ã ã‘を大文字ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:22 msgid "Colon" msgstr "コロン" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:23 msgid "A colon is generally used before a list or series: - The Triangle Area consists of three cities: Raleigh, Durham, and Chapel Hill." msgstr "通常ã€ã‚³ãƒ­ãƒ³ã¯ã€ãƒªã‚¹ãƒˆã¾ãŸã¯ä¸€é€£ã®è¦ç´ ã®å‰ã«ä½¿ç”¨ã•れã¾ã™ã€‚- The Triangle Area consists of three cities: Raleigh, Durham, and Chapel Hill." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:26 msgid "But not if the list is a complement or object of an element in the sentence: - Before going on vacation, be sure to (1) set the alarm, (2) cancel the newspaper, and (3) ask a neighbor to collect your mail." msgstr "ãŸã ã—ã€ãƒªã‚¹ãƒˆãŒã€æ–‡å†…ã®è¦ç´ ã®è£œèªžã¾ãŸã¯ç›®çš„語ã®å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚Before going on vacation, be sure to (1) set the alarm, (2) cancel the newspaper, and (3) ask a neighbor to collect your mail." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:29 msgid "Use a colon after \"as follows\" and \"the following\" if the related list comes immediately after: wedge The steps for changing directories are as follows:" msgstr "直後ã«é–¢é€£ã™ã‚‹ãƒªã‚¹ãƒˆã‚’追加ã™ã‚‹å ´åˆã¯ã€ã€Œas followsã€ãŠã‚ˆã³ã€Œthe followingã€(次ã®ã¨ãŠã‚Š) ã®å¾Œã«ã‚³ãƒ­ãƒ³ã‚’使用ã—ã¾ã™ã€‚The steps for changing directories are as follows:" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:32 msgid "Open a terminal." msgstr "Open a terminal." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:33 msgid "Type cd..." msgstr "Type cd..." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:35 msgid "Use a colon to introduce a bullet list (or dash, or icon/symbol of your choice):" msgstr "コロンを使用ã—ã¦ã€ç®‡æ¡æ›¸ãリスト (ダッシュã€ã‚¢ã‚¤ã‚³ãƒ³ã¾ãŸã¯è¨˜å·ã‚’使用) を追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:37 msgid "In the Properties dialog box, you'll find the following entries:" msgstr "In the Properties dialog box, you'll find the following entries:" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:39 msgid "Connection name" msgstr "Connection name" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:40 msgid "Count" msgstr "Count" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:41 msgid "Cost per item" msgstr "Cost per item" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:45 msgid "Commas" msgstr "コンマ" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:46 msgid "Use serial commas, the comma before the \"and\" in a series of three or more items:" msgstr "3 ã¤ä»¥ä¸Šã®é …ç›®ãŒç¶šãå ´åˆã¯ã€ã€Œandã€ã®å‰ã«ã‚³ãƒ³ãƒžã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:48 msgid "\"Item 1, item 2, and item 3.\"" msgstr "Item 1, item 2, and item 3." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:51 msgid "It's easier to read that way and helps avoid confusion. The primary exception to this you will see is in PR, where it is traditional not to use serial commas because it is often the style of journalists." msgstr "ã“れã«ã‚ˆã‚Šèª­ã¿ã‚„ã™ããªã‚Šã€æ··ä¹±ã‚’é¿ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«å¯¾ã™ã‚‹ä¸»ãªä¾‹å¤–㯠PR ã§ã™ã€‚PR ã§ã¯ã€å¤šãã®å ´åˆã‚¸ãƒ£ãƒ¼ãƒŠãƒªã‚¹ãƒˆå‘ã‘ã®ã‚¹ã‚¿ã‚¤ãƒ«ã«ã‚ˆã‚Šã€ã“ã®ã‚ˆã†ãªã‚³ãƒ³ãƒžã¯ä½¿ç”¨ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:53 msgid "Commas are always important, considering the vast difference in meanings of the following two statements." msgstr "次㮠2 ã¤ã®æ–‡ç« ã®æ„味ãŒå¤§ããç•°ãªã‚‹ã“ã¨ã‚’考ãˆã‚‹ã¨ã€ã‚³ãƒ³ãƒžã¯å¸¸ã«é‡è¦ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:55 msgid "Let's eat, Grandma" msgstr "Let's eat, Grandma" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:56 msgid "Let's eat Grandma." msgstr "Let's eat Grandma." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:58 msgid "Correct punctuation could save Grandma's life." msgstr "æ­£ã—ã„å¥èª­ç‚¹ã«ã‚ˆã‚Šã€ãŠã°ã‚ã•ã‚“ã®å‘½ã‚’æ•‘ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:60 msgid "If that does not convince you, maybe this will:" msgstr "ã‚‚ã—ãã¯ã€ä»¥ä¸‹ã®ä¾‹ã‚’ã”覧ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:66 msgid "Contractions" msgstr "縮約" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:67 msgid "Do not use contractions in Ansible documents." msgstr "Ansible ドキュメントã§ã¯ã€ç¸®ç´„ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:70 msgid "Em dashes" msgstr "エムダッシュ (ï¼)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:71 msgid "When possible, use em-dashes with no space on either side. When full em-dashes aren't available, use double-dashes with no spaces on either side--like this." msgstr "å¯èƒ½ãªå ´åˆã¯ã€ä¸¡å´ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’入れãšã«ã‚¨ãƒ ãƒ€ãƒƒã‚·ãƒ¥ (ï¼) を使用ã—ã¾ã™ã€‚エムダッシュ (ï¼) ãŒåˆ©ç”¨ã§ããªã„å ´åˆã¯ã€ä¸¡å´ã«ç©ºç™½ã‚’入れãšã«äºŒé‡ãƒ€ãƒƒã‚·ãƒ¥ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:73 msgid "A pair of em dashes can be used in place of commas to enhance readability. Note, however, that dashes are always more emphatic than commas." msgstr "読ã¿ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒ³ãƒžã®ä»£ã‚りã«ã‚¨ãƒ ãƒ€ãƒƒã‚·ãƒ¥ã‚’ペアã«ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã ã—ã€ãƒ€ãƒƒã‚·ãƒ¥ã¯ã‚³ãƒ³ãƒžã‚ˆã‚Šã‚‚常ã«å¼·èª¿ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:75 msgid "A pair of em dashes can replace a pair of parentheses. Dashes are considered less formal than parentheses; they are also more intrusive. If you want to draw attention to the parenthetical content, use dashes. If you want to include the parenthetical content more subtly, use parentheses." msgstr "エムダッシュã®ãƒšã‚¢ã¯ã€æ‹¬å¼§ã®ãƒšã‚¢ã®ä»£ã‚りã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãƒ€ãƒƒã‚·ãƒ¥ã¯æ‹¬å¼§ã‚ˆã‚Šã‚‚å½¢å¼çš„ã§ã¯ãªã„ã¨è¦‹ãªã•ã‚Œã€æŠ¼ã—ã¤ã‘ãŒã¾ã—ãæ„Ÿã˜ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚括弧内ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«æ³¨æ„を引ããŸã„å ´åˆã¯ã€ãƒ€ãƒƒã‚·ãƒ¥ã‚’使用ã—ã¾ã™ã€‚括弧内ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã‚ã¾ã‚Šæ³¨æ„を引ããŸããªã„å ´åˆã¯ã€æ‹¬å¼§ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:78 msgid "When dashes are used in place of parentheses, surrounding punctuation should be omitted. Compare the following examples." msgstr "括弧ã®ä»£ã‚りã«ãƒ€ãƒƒã‚·ãƒ¥ã‚’使用ã™ã‚‹å ´åˆã¯ã€å‰å¾Œã®å¥èª­ç‚¹ã‚’çœç•¥ã—ã¦ãã ã•ã„。次ã®ä¾‹ã‚’比較ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:87 msgid "When used in place of parentheses at the end of a sentence, only a single dash is used." msgstr "æ–‡æœ«ã«æ‹¬å¼§ã®ä»£ã‚りã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ãƒ€ãƒƒã‚·ãƒ¥ã‚’ 1 ã¤ã ã‘使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:97 msgid "Exclamation points (!)" msgstr "感嘆符 (!)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:98 msgid "Do not use them at the end of sentences. An exclamation point can be used when referring to a command, such as the bang (!) command." msgstr "文末ã«ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。感嘆符ã¯ã€bang (!) ãªã©ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å‚ç…§ã™ã‚‹å ´åˆã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:101 msgid "Gender References" msgstr "性別ã®å‚ç…§" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:102 msgid "Do not use gender-specific pronouns in documentation. It is far less awkward to read a sentence that uses \"they\" and \"their\" rather than \"he/she\" and \"his/hers.\"" msgstr "ドキュメンテーションã§ã¯ã€æ€§åˆ¥å›ºæœ‰ã®ä»£å詞ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。「he/sheã€ã‚„「his/hersã€ã§ã¯ãªã「theyã€ãŠã‚ˆã³ã€Œtheirã€ã‚’使用ã™ã‚‹æ–¹ãŒé©åˆ‡ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:104 msgid "It is fine to use \"you\" when giving instructions and \"the user,\" \"new users,\" and so on. in more general explanations." msgstr "指示を示ã™å ´åˆã¯ã€Œyouã€ã¨ä½¿ç”¨ã—ã€ã‚ˆã‚Šä¸€èˆ¬çš„ãªèª¬æ˜Žã§ã¯ã€Œthe userã€ã€ã€Œnew usersã€ãªã©ã‚’使用ã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:106 msgid "Never use \"one\" in place of \"you\" when writing technical documentation. Using \"one\" is far too formal." msgstr "テクニカルドキュメントを作æˆã™ã‚‹éš›ã¯ã€ã€Œyouã€ ã®æ„味ã§ã€Œoneã€ã‚’使用ã—ãªã„ã§ãã ã•ã„。「oneã€ã‚’使用ã™ã‚‹ã¨å …苦ã—ããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:108 msgid "Never use \"we\" when writing. \"We\" aren't doing anything on the user side. Ansible's products are doing the work as requested by the user." msgstr "書ãè¾¼ã¿æ™‚ã«ã€Œweã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。「weã€ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å´ã§ã¯ä½•も実行ã—ã¾ã›ã‚“。Ansible ã®è£½å“ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è¦æ±‚ã«å¿œã˜ã¦ä½œæ¥­ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:112 msgid "Hyphen" msgstr "ãƒã‚¤ãƒ•ン" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:113 msgid "The hyphen's primary function is the formation of certain compound terms. Do not use a hyphen unless it serves a purpose. If a compound adjective cannot be misread or, as with many psychological terms, its meaning is established, a hyphen is not necessary." msgstr "ã“ã®ãƒã‚¤ãƒ•ンã®ä¸»ãªæ©Ÿèƒ½ã¯ã€ç‰¹å®šã®è¤‡åˆç”¨èªžã®ç‰¹å¾´ã§ã™ã€‚ç›®çš„ãŒæº€ãŸã•れãªã„é™ã‚Šã€ãƒã‚¤ãƒ•ンã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。複åˆå½¢å®¹è©žãŒé–“é•ã£ã¦è§£é‡ˆã•れãªã„å ´åˆã€ã¾ãŸã¯å¤šãã®å¿ƒç†å­¦ç”¨èªžã¨åŒã˜æ§˜ã«ã€ãã®æ„味ãŒç¢ºç«‹ã•れã¦ã„ã‚‹å ´åˆã€ãƒã‚¤ãƒ•ンã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:115 msgid "Use hyphens to avoid ambiguity or confusion:" msgstr "ãƒã‚¤ãƒ•ンã¯ã€ã‚ã„ã¾ã„ã•や混乱を回é¿ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:135 msgid "In professionally printed material (particularly books, magazines, and newspapers), the hyphen is used to divide words between the end of one line and the beginning of the next. This allows for an evenly aligned right margin without highly variable (and distracting) word spacing." msgstr "é©åˆ‡ãªç·¨é›†ãŒå¿…è¦ãªå‡ºç‰ˆç‰© (ç‰¹ã«æœ¬ã€é›‘èªŒã€æ–°èž) ã§ã¯ã€å˜èªžãŒè¡Œã‚’ã¾ãŸãŒã‚‹å ´åˆã«ãƒã‚¤ãƒ•ンを使用ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å˜èªžã®é–“éš”ãŒå¤§ãã変ã‚ã‚‹ (ãã—ã¦æ°—ãŒæ•£ã‚‹) ã“ã¨ãªãã€å³ãƒžãƒ¼ã‚¸ãƒ³ã‚’å‡ç­‰ã«æƒãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:139 msgid "Lists" msgstr "リスト" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:140 msgid "Keep the structure of bulleted lists equivalent and consistent. If one bullet is a verb phrase, they should all be verb phrases. If one is a complete sentence, they should all be complete sentences, and so on." msgstr "ç®‡æ¡æ›¸ãã®æ§‹é€ ã‚’åŒç­‰ã‹ã¤ä¸€è²«æ€§ã®ã‚ã‚‹ã‚‚ã®ã«ä¿ã¡ã¾ã™ã€‚ãŸã¨ãˆã°ã€1 ã¤ã®ç®‡æ¡æ›¸ããŒå‹•詞å¥ã§ã‚ã‚‹å ´ã¯ã€ã™ã¹ã¦ã®ç®‡æ¡æ›¸ããŒå‹•詞å¥ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚1 ã¤ãŒå®Œå…¨ãªæ–‡ã§ã‚ã‚‹å ´åˆã€ã™ã¹ã¦ã®é …ç›®ãŒå®Œå…¨ãªæ–‡ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:142 msgid "Capitalize the first word of each bullet. Unless it is obvious that it is just a list of items, such as a list of items like: * computer * monitor * keyboard * mouse" msgstr "ç®‡æ¡æ›¸ãã§ã¯ã€ãれãžã‚Œæœ€åˆã®å˜èªžã‚’大文字ã«ã—ã¾ã™ã€‚次ã®ã‚ˆã†ãªé …ç›®ã®ãƒªã‚¹ãƒˆãªã©ã€å˜ã«é …ç›®ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ã“ã¨ãŒæ˜Žã‚‰ã‹ã§ã‚ã‚‹å ´åˆã¯é™¤ãã¾ã™ (* computer * monitor * keyboard * mouse)。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:148 msgid "When the bulleted list appears within the context of other copy, (unless it's a straight list like the previous example) add periods, even if the bullets are sentence fragments. Part of the reason behind this is that each bullet is said to complete the original sentence." msgstr "ç®‡æ¡æ›¸ããŒä»–ã®æ–‡ç« ã«å«ã¾ã‚Œã‚‹å ´åˆã¯ã€(上ã®ä¾‹ã®ã‚ˆã†ãªå˜ç´”ãªãƒªã‚¹ãƒˆã§ãªã„é™ã‚Š) ç®‡æ¡æ›¸ããŒå®Œå…¨ãªæ–‡ã«ãªã£ã¦ã„ãªãã¦ã‚‚ピリオドを追加ã—ã¾ã™ã€‚ã“れã¯ã€å„ç®‡æ¡æ›¸ããŒå…ƒã®æ–‡ã‚’完了ã™ã‚‹ã¨è¨€ã‚れã¦ã„ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:150 msgid "In some cases where the bullets are appearing independently, such as in a poster or a homepage promotion, they do not need periods." msgstr "ç®‡æ¡æ›¸ããŒãƒã‚¹ã‚¿ãƒ¼ã‚„ホームページã®ãƒ—ロモーションãªã©ã®ã‚ˆã†ã«ç‹¬ç«‹ã—ã¦ç¤ºã•れる場åˆã€ãƒ”リオドã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:152 msgid "When giving instructional steps, use numbered lists instead of bulleted lists." msgstr "手順を説明ã™ã‚‹ã¨ãã¯ã€ç®‡æ¡æ›¸ãã®ä»£ã‚りã«ç•ªå·ä»˜ãリストを使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:156 msgid "Months and States" msgstr "月ãŠã‚ˆã³å·ž" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:157 msgid "Abbreviate months and states according to AP. Months are only abbreviated if they are used in conjunction with a day. Example: \"The President visited in January 1999.\" or \"The President visited Jan. 12.\"" msgstr "AP ã«å¾“ã£ã¦ã€æœˆã¨å·žã®åå‰ã‚’çœç•¥ã—ã¾ã™ã€‚月ã¯ã€æ—¥ä»˜ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã•れる場åˆã«é™ã‚Šçœç•¥ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒThe President visited in January 1999.ã€ã¾ãŸã¯ã€ŒThe President visited Jan. 12.ã€ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:159 msgid "Months: Jan., Feb., March, April, May, June, July, Aug., Sept., Nov., Dec." msgstr "月: Jan.ã€Feb.ã€Marchã€Aprilã€Mayã€Juneã€Julyã€Aug.ã€Sept.ã€Nov.ã€Dec." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:161 msgid "States: Ala., Ariz., Ark., Calif., Colo., Conn., Del., Fla., Ga., Ill., Ind., Kan., Ky., La., Md., Mass., Mich., Minn., Miss., Mo., Mont., Neb., Nev., NH, NJ, NM, NY, NC, ND, Okla., Ore., Pa., RI, SC, SD, Tenn., Vt., Va., Wash., W.Va., Wis., Wyo." msgstr "å·ž: Ala.ã€Ariz.ã€Ark.ã€Calif.ã€Colo.ã€Conn.ã€Del.ã€Fla.ã€Ga.ã€Ill.ã€Ind.ã€Kan.ã€Ky.ã€La.ã€Md.ã€Mass.ã€Mich.ã€Minn.ã€Miss.ã€Mo.ã€Mont.ã€Neb.ã€Nev.ã€NHã€NJã€NMã€NYã€NCã€NDã€Okla.ã€Ore.ã€Pa.ã€RIã€SCã€SDã€Tenn.ã€Vt.ã€Va.ã€Wash.ã€W.Va.ã€Wis.ã€Wyo." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:164 msgid "Numbers" msgstr "æ•°å­—" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:165 msgid "Numbers between one and nine are written out. 10 and above are numerals. The exception to this is writing \"4 million\" or \"4 GB.\" It's also acceptable to use numerals in tables and charts." msgstr "1 ã‹ã‚‰ 9 ã¾ã§ã®æ•°å­—ãŒä½¿ç”¨ã•れã¾ã™ã€‚10 以上ã®å€¤ã¯æ•°å­—を使用ã—ã¾ã™ã€‚「4 millionã€ã¾ãŸã¯ã€Œ4 GBã€ãªã©ã¯ä¾‹å¤–ã¨ãªã‚Šã¾ã™ã€‚ã¾ãŸã€è¡¨ã‚„ãƒãƒ£ãƒ¼ãƒˆã§ã¯æ•°å€¤ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:168 msgid "Phone Numbers" msgstr "電話番å·" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:170 msgid "Phone number style: 1 (919) 555-0123 x002 and 1 888-GOTTEXT" msgstr "電話番å·ã®å½¢å¼: 1 (919) 555-0123 x002 ãŠã‚ˆã³ 1 888-GOTTEXT" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:174 msgid "Quotations (Using Quotation Marks and Writing Quotes)" msgstr "引用 (引用符ã®ä½¿ç”¨ã¨å¼•用ã®è¨˜è¿°)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:175 msgid "\"Place the punctuation inside the quotes,\" the editor said." msgstr "\"Place the punctuation inside the quotes,\" the editor said. (「å¥èª­ç‚¹ã‚’引用符ã®ä¸­ã«å…¥ã‚Œã¦ãã ã•ã„ã€ã¨ç·¨é›†è€…ã¯è¨€ã„ã¾ã—ãŸ)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:177 msgid "Except in rare instances, use only \"said\" or \"says\" because anything else just gets in the way of the quote itself, and also tends to editorialize." msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ã€Œsaidã€ã¾ãŸã¯ã€Œsaysã€ã ã‘を使用ã—ã¦ãã ã•ã„。ãれ以外ã¯ã€å¼•用ã®é‚ªé­”ã«ãªã‚Šã€ç·¨é›†ã•れる傾å‘ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:180 msgid "Place the name first right after the quote:" msgstr "引用ã®ç›´å¾Œã«åå‰ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:180 msgid "\"I like to write first-person because I like to become the character I'm writing,\" Wally Lamb said." msgstr "\"I like to write first-person because I like to become the character I'm writing,\" Wally Lamb said. (「ç§ã¯è‡ªåˆ†ãŒæ›¸ã„ã¦ã„るキャラクターã«ãªã‚ŠãŸã„ã®ã§ã€ä¸€äººç§°ã‚’書ãã®ãŒå¥½ãã§ã™ã€ã¨ Wally Lamb ã¯è¨€ã„ã¾ã—ãŸ)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:184 msgid "Not:" msgstr "以下ã®ã‚ˆã†ã«ã¯ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:183 msgid "\"I like to write first-person because I like to become the character I'm writing,\" said Wally Lamb." msgstr "\"I like to write first-person because I like to become the character I'm writing,\" said Wally Lamb." #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:187 msgid "Semicolon" msgstr "セミコロン" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:188 msgid "Use a semicolon to separate items in a series if the items contain commas:" msgstr "é …ç›®ã«ã‚³ãƒ³ãƒžãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’使用ã—ã¦é …目を区切りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:190 msgid "Everyday I have coffee, toast, and fruit for breakfast; a salad for lunch; and a peanut butter sandwich, cookies, ice cream, and chocolate cake for dinner." msgstr "Everyday I have coffee, toast, and fruit for breakfast; a salad for lunch; and a peanut butter sandwich, cookies, ice cream, and chocolate cake for dinner. (ç§ã¯æ¯Žæ—¥ã€æœé£Ÿã«ã‚³ãƒ¼ãƒ’ーã€ãƒˆãƒ¼ã‚¹ãƒˆã€ãŠã‚ˆã³ãƒ•ルーツを食ã¹ã¾ã™ã€‚ランãƒã¯ã‚µãƒ©ãƒ€ã‚’食ã¹ã€ãƒ‡ã‚£ãƒŠãƒ¼ã«ã¯ã€ãƒ”ーナッツãƒã‚¿ãƒ¼ã®ã‚µãƒ³ãƒ‰ã‚¤ãƒƒãƒã€ã‚¯ãƒƒã‚­ãƒ¼ã€ã‚¢ã‚¤ã‚¹ã‚¯ãƒªãƒ¼ãƒ ã€ãŠã‚ˆã³ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆã‚±ãƒ¼ã‚­ã‚’食ã¹ã¾ã™)" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:192 msgid "Use a semicolon before a conjunctive adverb (however, therefore, otherwise, namely, for example, and so on): - I think; therefore, I am." msgstr "接続詞副詞 (howeverã€thereforeã€otherwiseã€namelyã€for example ãªã©) ã®å‰ã«ã‚»ãƒŸã‚³ãƒ­ãƒ³ã‚’使用ã—ã¾ã™ã€‚「I think; therefore, I am.ã€ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:196 msgid "Spacing after sentences" msgstr "æ–‡ã®å¾Œã®ã‚¹ãƒšãƒ¼ã‚¹" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:197 msgid "Use only a single space after a sentence." msgstr "æ–‡ã®å¾Œã«ã¯ã€ã‚·ãƒ³ã‚°ãƒ«ã‚¹ãƒšãƒ¼ã‚¹ã®ã¿ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:200 msgid "Time" msgstr "時間" #: ../../rst/dev_guide/style_guide/grammar_punctuation.rst:201 msgid "Time of day is written as \"4 p.m.\"" msgstr "時刻ã¯ã€Œ4 p.mã€ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:5 msgid "Ansible style guide" msgstr "Ansible スタイルガイド" #: ../../rst/dev_guide/style_guide/index.rst:7 msgid "Welcome to the Ansible style guide! To create clear, concise, consistent, useful materials on docs.ansible.com, follow these guidelines:" msgstr "Ansible スタイルガイドã«ã‚ˆã†ã“ã! docs.ansible.com ã«ã€æ˜Žç¢ºãŠã‚ˆã³ç°¡æ½”ã§ã€ä¸€è²«æ€§ã®ã‚る有用ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹ãŸã‚ã«ã€ä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŒæŒ‡å®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:14 msgid "Linguistic guidelines" msgstr "言語ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/style_guide/index.rst:16 msgid "We want the Ansible documentation to be:" msgstr "Ansible ドキュメントã§ã¯ã€ä»¥ä¸‹ã‚’目標ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:18 msgid "clear" msgstr "明確ãª" #: ../../rst/dev_guide/style_guide/index.rst:19 msgid "direct" msgstr "直接的ãª" #: ../../rst/dev_guide/style_guide/index.rst:20 msgid "conversational" msgstr "会話的ãª" #: ../../rst/dev_guide/style_guide/index.rst:21 msgid "easy to translate" msgstr "解釈ãŒå®¹æ˜“ãª" #: ../../rst/dev_guide/style_guide/index.rst:23 msgid "We want reading the docs to feel like having an experienced, friendly colleague explain how Ansible works." msgstr "Ansible ãŒæä¾›ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€çµŒé¨“豊富ã§å‹å¥½çš„ãªåŒåƒšã« Ansible ã®ä»•組ã¿ã‚’説明ã—ã¦ã‚‚らã£ã¦ã„ã‚‹ã¨æ„Ÿã˜ã‚‰ã‚Œã‚‹ã‚ˆã†ãªã‚‚ã®ã«ã™ã‚‹ã“ã¨ã‚’目標ã«ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:27 msgid "Stylistic cheat-sheet" msgstr "æ–‡ä½“ã®æ—©è¦‹è¡¨" #: ../../rst/dev_guide/style_guide/index.rst:29 msgid "This cheat-sheet illustrates a few rules that help achieve the \"Ansible tone\":" msgstr "ä»¥ä¸‹ã®æ—©è¦‹è¡¨ã¯ã€ã€ŒAnsibleã®ãƒˆãƒ¼ãƒ³ã€ã‚’実ç¾ã™ã‚‹ã®ã«å½¹ç«‹ã¤ãƒ«ãƒ¼ãƒ«ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:32 msgid "Rule" msgstr "**ルール**" #: ../../rst/dev_guide/style_guide/index.rst:32 msgid "Good example" msgstr "é©åˆ‡ãªä¾‹" #: ../../rst/dev_guide/style_guide/index.rst:32 msgid "Bad example" msgstr "ä¸é©åˆ‡ãªä¾‹" #: ../../rst/dev_guide/style_guide/index.rst:34 msgid "Use active voice" msgstr "能動態を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:34 msgid "You can run a task by" msgstr "You can run a task by (以下を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã¾ã™)" #: ../../rst/dev_guide/style_guide/index.rst:34 msgid "A task can be run by" msgstr "A task can be run by (タスクã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã§ãã¾ã™)" #: ../../rst/dev_guide/style_guide/index.rst:36 msgid "Use the present tense" msgstr "ç¾åœ¨å½¢ã®ä½¿ç”¨" #: ../../rst/dev_guide/style_guide/index.rst:36 msgid "This command creates a" msgstr "This command creates a (ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Š...ãŒä½œæˆã•れã¾ã™ã€‚)" #: ../../rst/dev_guide/style_guide/index.rst:36 msgid "This command will create a" msgstr "This command will create a (ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Š...ãŒä½œæˆã•れã¾ã™)" #: ../../rst/dev_guide/style_guide/index.rst:38 msgid "Address the reader" msgstr "読者ã«è©±ã™ã‚ˆã†ã«æ›¸ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:38 msgid "As you expand your inventory" msgstr "As you expand your inventory (インベントリーを展開ã—ã¾ã™)" #: ../../rst/dev_guide/style_guide/index.rst:38 msgid "When the number of managed nodes grows" msgstr "When the number of managed nodes grows (管ç†ãƒŽãƒ¼ãƒ‰ã®æ•°ãŒå¢—ãˆã‚‹å ´åˆ)" #: ../../rst/dev_guide/style_guide/index.rst:40 msgid "Use standard English" msgstr "標準英語ã®ä½¿ç”¨" #: ../../rst/dev_guide/style_guide/index.rst:40 msgid "Return to this page" msgstr "Return to this page (ã“ã®ãƒšãƒ¼ã‚¸ã«æˆ»ã‚‹)" #: ../../rst/dev_guide/style_guide/index.rst:40 msgid "Hop back to this page" msgstr "Hop back to this page (ã“ã®ãƒšãƒ¼ã‚¸ã«æˆ»ã‚‹)" #: ../../rst/dev_guide/style_guide/index.rst:42 msgid "Use American English" msgstr "アメリカ英語ã®ä½¿ç”¨" #: ../../rst/dev_guide/style_guide/index.rst:42 msgid "The color of the output" msgstr "The color of the output (出力ã®è‰²)" #: ../../rst/dev_guide/style_guide/index.rst:42 msgid "The colour of the output" msgstr "The colour of the output (出力ã®è‰²)" #: ../../rst/dev_guide/style_guide/index.rst:46 msgid "Header case" msgstr "ãƒ˜ãƒƒãƒ€ãƒ¼ã®æ›¸å¼" #: ../../rst/dev_guide/style_guide/index.rst:48 msgid "Headers should be written in sentence case. For example, this section's title is ``Header case``, not ``Header Case`` or ``HEADER CASE``." msgstr "ãƒ˜ãƒƒãƒ€ãƒ¼ã¯æ–‡ã§ä½¿ç”¨ã•れる書å¼ã§è¨˜è¿°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¿ã‚¤ãƒˆãƒ«ã¯ã€``Header Case`` ã‚„ ``HEADER CASE`` ã§ã¯ãªãã€``Header case`` ã¨è¨˜è¿°ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:53 msgid "Avoid using Latin phrases" msgstr "ラテン語ã®ãƒ•レーズを使用ã—ãªã„" #: ../../rst/dev_guide/style_guide/index.rst:55 msgid "Latin words and phrases like ``e.g.`` or ``etc.`` are easily understood by English speakers. They may be harder to understand for others and are also tricky for automated translation." msgstr "``e.g.``ã€``etc.`` ã®ã‚ˆã†ãªãƒ©ãƒ†ãƒ³èªžã‚„フレーズã¯ã€è‹±èªžè©±è€…ã§ã‚れã°ç°¡å˜ã«ç†è§£ã§ãã¾ã™ã€‚ãŸã ã—ã€ãã®ä»–ã®äººã«ã¨ã£ã¦ã¯ç†è§£ãŒé›£ã—ã„å ´åˆã‚‚ã‚りã€è‡ªå‹•翻訳ã®éš›ã«ã‚‚注æ„ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:59 msgid "Use the following English terms in place of Latin terms or abbreviations:" msgstr "ã—ãŸãŒã£ã¦ã€ãƒ©ãƒ†ãƒ³èªžã®ç”¨èªžã¾ãŸã¯ç•¥èªžã®ä»£ã‚りã«ã€è‹±èªžã®ç”¨èªžã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:62 msgid "Latin" msgstr "ラテン語" #: ../../rst/dev_guide/style_guide/index.rst:62 msgid "English" msgstr "英語" #: ../../rst/dev_guide/style_guide/index.rst:64 msgid "i.e" msgstr "i.e (è¨€ã„æ›ãˆã‚‹ã¨)" #: ../../rst/dev_guide/style_guide/index.rst:64 msgid "in other words" msgstr "in other words (è¨€ã„æ›ãˆã‚‹ã¨)" #: ../../rst/dev_guide/style_guide/index.rst:66 #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:89 msgid "e.g." msgstr "e.g. (ãŸã¨ãˆã°)" #: ../../rst/dev_guide/style_guide/index.rst:66 msgid "for example" msgstr "for example (ãŸã¨ãˆã°)" #: ../../rst/dev_guide/style_guide/index.rst:68 msgid "etc" msgstr "etc (ãªã©)" #: ../../rst/dev_guide/style_guide/index.rst:68 msgid "and so on" msgstr "and so on (ãªã©)" #: ../../rst/dev_guide/style_guide/index.rst:70 msgid "via" msgstr "via (ã«ã‚ˆã‚Š)" #: ../../rst/dev_guide/style_guide/index.rst:70 msgid "by/ through" msgstr "by/ through (ã«ã‚ˆã‚Š)" #: ../../rst/dev_guide/style_guide/index.rst:72 msgid "vs./versus" msgstr "vs./versus (対)" #: ../../rst/dev_guide/style_guide/index.rst:72 msgid "rather than/against" msgstr "rather than/against (対)" #: ../../rst/dev_guide/style_guide/index.rst:77 msgid "reStructuredText guidelines" msgstr "reStructuredText ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³" #: ../../rst/dev_guide/style_guide/index.rst:79 msgid "The Ansible documentation is written in reStructuredText and processed by Sphinx. We follow these technical or mechanical guidelines on all rST pages:" msgstr "Ansible ドキュメント㯠reStructuredText ã§è¨˜è¿°ã•れã€Sphinx ã«ã‚ˆã£ã¦å‡¦ç†ã•れã¾ã™ã€‚ã™ã¹ã¦ã® rST ページã«å¯¾ã—ã¦ã€ä»¥ä¸‹ã®æŠ€è¡“çš„ã¾ãŸã¯æ©Ÿæ¢°çš„ãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ãŒæŒ‡å®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:83 msgid "Header notation" msgstr "ヘッダーã®è¡¨è¨˜æ³•" #: ../../rst/dev_guide/style_guide/index.rst:85 msgid "`Section headers in reStructuredText `_ can use a variety of notations. Sphinx will 'learn on the fly' when creating a hierarchy of headers. To make our documents easy to read and to edit, we follow a standard set of header notations. We use:" msgstr "`Section headers in reStructuredText `_ ã¯ã€ã•ã¾ã–ã¾ãªè¡¨è¨˜ã‚’使用ã§ãã¾ã™ã€‚Sphinx ã¯ã€ãƒ˜ãƒƒãƒ€ãƒ¼ã®éšŽå±¤ã‚’作æˆã™ã‚‹ã¨ãã«ã€Œã‚ªãƒ³ã‚¶ãƒ•ライã§å­¦ç¿’ã€ã—ã¾ã™ã€‚ドキュメントを読ã¿ã‚„ã™ãã€ç·¨é›†ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã«ã€æ¨™æº–ã®ãƒ˜ãƒƒãƒ€ãƒ¼è¡¨è¨˜æ³•ã«å¾“ã„ã¾ã™ã€‚以下を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:91 msgid "``###`` with overline, for parts:" msgstr "上線付ã (å„部分ã®å ´åˆ): ``###``" #: ../../rst/dev_guide/style_guide/index.rst:99 msgid "``***`` with overline, for chapters:" msgstr "上線付ã (ç« ã®å ´åˆ): ``***``" #: ../../rst/dev_guide/style_guide/index.rst:107 msgid "``===`` for sections:" msgstr "セクションã®å ´åˆ: ``===``" #: ../../rst/dev_guide/style_guide/index.rst:114 msgid "``---`` for subsections:" msgstr "サブセクションã®å ´åˆ: ``---``" #: ../../rst/dev_guide/style_guide/index.rst:121 msgid "``^^^`` for sub-subsections:" msgstr "サブサブセクションã®å ´åˆ: ``^^^``" #: ../../rst/dev_guide/style_guide/index.rst:128 msgid "``\"\"\"`` for paragraphs:" msgstr "パラグラフã®å ´åˆ: ``\"\"\"``" #: ../../rst/dev_guide/style_guide/index.rst:137 msgid "Syntax highlighting - Pygments" msgstr "æ§‹æ–‡ã®å¼·èª¿è¡¨ç¤º - Pygment" #: ../../rst/dev_guide/style_guide/index.rst:139 msgid "The Ansible documentation supports a range of `Pygments lexers `_ for `syntax highlighting `_ to make our code examples look good. Each code-block must be correctly indented and surrounded by blank lines." msgstr "Ansible ドキュメントã¯ã€ã‚³ãƒ¼ãƒ‰ä¾‹ã®è¦‹æ „ãˆã‚’良ãã™ã‚‹ãŸã‚ã€`æ§‹æ–‡ã®å¼·èª¿è¡¨ç¤º `_ ã® `Pygments lexers `_ ã®ç¯„囲をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚コードブロックã¯é©åˆ‡ã«ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã•れã€ç©ºã®è¡Œã§å›²ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:142 msgid "The Ansible documentation allows the following values:" msgstr "Ansible ドキュメントã§ã¯ã€ä»¥ä¸‹ã®å€¤ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:144 msgid "none (no highlighting)" msgstr "ãªã— (強調表示ãªã—)" #: ../../rst/dev_guide/style_guide/index.rst:145 msgid "ansible-output (a custom lexer for Ansible output)" msgstr "ansible-output (Ansible 出力用ã®ã‚«ã‚¹ã‚¿ãƒ  lexer)" #: ../../rst/dev_guide/style_guide/index.rst:146 msgid "bash" msgstr "bash" #: ../../rst/dev_guide/style_guide/index.rst:147 msgid "console" msgstr "console" #: ../../rst/dev_guide/style_guide/index.rst:148 msgid "csharp" msgstr "csharp" #: ../../rst/dev_guide/style_guide/index.rst:149 msgid "ini" msgstr "ini" #: ../../rst/dev_guide/style_guide/index.rst:151 msgid "powershell" msgstr "powershell" #: ../../rst/dev_guide/style_guide/index.rst:152 msgid "python" msgstr "python" #: ../../rst/dev_guide/style_guide/index.rst:153 msgid "rst" msgstr "rst" #: ../../rst/dev_guide/style_guide/index.rst:154 msgid "sh" msgstr "sh" #: ../../rst/dev_guide/style_guide/index.rst:155 msgid "shell" msgstr "shell" #: ../../rst/dev_guide/style_guide/index.rst:156 msgid "shell-session" msgstr "shell-session" #: ../../rst/dev_guide/style_guide/index.rst:157 msgid "text" msgstr "text" #: ../../rst/dev_guide/style_guide/index.rst:158 msgid "yaml" msgstr "yaml" #: ../../rst/dev_guide/style_guide/index.rst:159 msgid "yaml+jinja" msgstr "yaml+jinja" #: ../../rst/dev_guide/style_guide/index.rst:161 msgid "For example, you can highlight Python code using following syntax:" msgstr "ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®æ§‹æ–‡ã‚’使用ã—㦠Python コードを強調表示ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:171 msgid "Internal navigation" msgstr "内部ナビゲーション" #: ../../rst/dev_guide/style_guide/index.rst:173 msgid "`Anchors (also called labels) and links `_ work together to help users find related content. Local tables of contents also help users navigate quickly to the information they need. All internal links should use the ``:ref:`` syntax. Every page should have at least one anchor to support internal ``:ref:`` links. Long pages, or pages with multiple levels of headers, can also include a local TOC." msgstr "`アンカー (ラベルã¨ã‚‚呼ã°ã‚Œã¾ã™) ãŠã‚ˆã³ãƒªãƒ³ã‚¯ ` ã¯ã€é–¢é€£ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を見ã¤ã‘ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€ã‚るローカルテーブルも必è¦ãªæƒ…å ±ã«ç§»å‹•ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã™ã¹ã¦ã®å†…部リンク㧠``:ref:`` 構文を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€å„ページã«ã¯å†…部 ``:ref:`` リンクã«å¯¾å¿œã™ã‚‹ã‚¢ãƒ³ã‚«ãƒ¼ãŒ 1 ã¤ä»¥ä¸Šå¿…è¦ã«ãªã‚Šã¾ã™ã€‚é•·ã„ページã¾ãŸã¯è¤‡æ•°ã®ãƒ˜ãƒƒãƒ€ãƒ¼ãƒ¬ãƒ™ãƒ«ã‚’æŒã¤ãƒšãƒ¼ã‚¸ã«ã‚‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ã® TOC を使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:183 msgid "Adding anchors" msgstr "アンカーã®è¿½åŠ " #: ../../rst/dev_guide/style_guide/index.rst:185 msgid "Include at least one anchor on every page" msgstr "ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã«å°‘ãªãã¨ã‚‚ 1 ã¤ã®ã‚¢ãƒ³ã‚«ãƒ¼ã‚’å«ã‚る。" #: ../../rst/dev_guide/style_guide/index.rst:186 msgid "Place the main anchor above the main header" msgstr "メインヘッダーã®ä¸Šã«ãƒ¡ã‚¤ãƒ³ã‚¢ãƒ³ã‚«ãƒ¼ã‚’é…ç½®ã™ã‚‹ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:187 msgid "If the file has a unique title, use that for the main page anchor::" msgstr "ã“ã®ãƒ•ァイルã«ä¸€æ„ã®ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ¡ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã®ã‚¢ãƒ³ã‚«ãƒ¼ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:191 msgid "You may also add anchors elsewhere on the page" msgstr "ページã«ã‚¢ãƒ³ã‚«ãƒ¼ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:194 msgid "Adding internal links" msgstr "内部リンクã®è¿½åŠ " #: ../../rst/dev_guide/style_guide/index.rst:196 msgid "All internal links must use ``:ref:`` syntax. These links both point to the anchor defined above:" msgstr "ã™ã¹ã¦ã®å†…部リンクã«ã¯ ``:ref:`` 構文を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒªãƒ³ã‚¯ã¯å…±ã«ã€ä¸Šã§å®šç¾©ã—ãŸã‚¢ãƒ³ã‚«ãƒ¼ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:203 msgid "The second example adds custom text for the link." msgstr "2 ã¤ç›®ã®ä¾‹ã¯ã€ãƒªãƒ³ã‚¯ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:206 msgid "Adding links to modules and plugins" msgstr "モジュールãŠã‚ˆã³ãƒ—ラグインã¸ã®ãƒªãƒ³ã‚¯ã®è¿½åŠ " #: ../../rst/dev_guide/style_guide/index.rst:208 msgid "Ansible 2.10 and later require the extended Fully Qualified Collection Name (FQCN) as part of the links:" msgstr "Ansible 2.10 以é™ã¯ã€ãƒªãƒ³ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦ã€æ‹¡å¼µã•れãŸå®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:220 msgid "displays as :ref:`ansible.builtin.first_found lookup plugin `." msgstr ":ref:`ansible.builtin.first_found lookup plugin ` ã¨ã—ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:222 msgid "Modules require different suffixes from other plugins:" msgstr "モジュールã«ã¯ã€ä»–ã®ãƒ—ラグインã¨ã¯ç•°ãªã‚‹ã‚µãƒ•ィックスãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:224 msgid "Module links use this extended FQCN module name with ``_module`` for the anchor." msgstr "モジュールリンクã§ã¯ã€ã“ã®åºƒç¯„㪠FQCN モジュールåã«ã€ã‚¢ãƒ³ã‚«ãƒ¼ã« ``_module`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:225 msgid "Plugin links use this extended FQCN plugin name with the plugin type (``_connection`` for example)." msgstr "プラグインã®ãƒªãƒ³ã‚¯ã¯ã€ã“ã®åºƒç¯„㪠FQCN プラグインåをプラグインタイプ (``_connection`` ãªã©) ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:234 msgid "``ansible.builtin`` is the FQCN for modules included in ``ansible.base``. Documentation links are the only place you prepend ``ansible_collections`` to the FQCN. This is used by the documentation build scripts to correctly fetch documentation from collections on Ansible Galaxy." msgstr "``ansible.builtin`` ã¯ã€``ansible.base`` ã«å«ã¾ã‚Œã¦ã„るモジュール㮠FQCN ã§ã™ã€‚ドキュメントã®ãƒªãƒ³ã‚¯ã¯ã€``ansible_collections`` ã‚’ FQCN ã®å‰ã«ä»˜ã‘る唯一ã®å ´æ‰€ã§ã™ã€‚ã“れã¯ã€Ansible Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’é©åˆ‡ã«å–å¾—ã™ã‚‹ãŸã‚ã«ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ“ルドスクリプトã«ã‚ˆã‚Šä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:239 msgid "Adding local TOCs" msgstr "ページ内 (ローカル) 目次ã®è¿½åŠ " #: ../../rst/dev_guide/style_guide/index.rst:241 msgid "The page you're reading includes a `local TOC `_. If you include a local TOC:" msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ `ローカル TOC `_ ãŒå«ã¾ã‚Œã¾ã™ã€‚ローカル㮠TOC を追加ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:244 msgid "place it below, not above, the main heading and (optionally) introductory text" msgstr "目次ã®ä¸‹ã«ã€ä¸»è¦ãªè¦‹å‡ºã—㨠(ä»»æ„ã§) 紹介文を追加ã—ã¾ã™ã€‚目次ã®ä¸Šã«ã¯è¿½åŠ ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/index.rst:245 msgid "use the ``:local:`` directive so the page's main header is not included" msgstr "ãã®ãƒšãƒ¼ã‚¸ã®ä¸»è¦ãªãƒ˜ãƒƒãƒ€ãƒ¼ãŒå«ã¾ã‚Œãªã„よã†ã« ``:local:`` ディレクティブを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:246 msgid "do not include a title" msgstr "タイトルã¯é™¤å¤–ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:248 msgid "The syntax is:" msgstr "æ§‹æ–‡ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:256 msgid "More resources" msgstr "å‚考資料" #: ../../rst/dev_guide/style_guide/index.rst:258 msgid "These pages offer more help with grammatical, stylistic, and technical rules for documentation." msgstr "以下ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«é–¢ã™ã‚‹æ–‡æ³•ã€ã‚¹ã‚¿ã‚¤ãƒ«ã€ãŠã‚ˆã³æŠ€è¡“çš„ãªãƒ«ãƒ¼ãƒ«ã‚’紹介ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/index.rst:273 msgid ":ref:`community_documentation_contributions`" msgstr ":ref:`community_documentation_contributions`" #: ../../rst/dev_guide/style_guide/index.rst:274 msgid "How to contribute to the Ansible documentation" msgstr "Ansible ドキュメントã¸ã®è²¢çŒ®æ–¹æ³•" #: ../../rst/dev_guide/style_guide/index.rst:275 msgid ":ref:`testing_documentation_locally`" msgstr ":ref:`testing_documentation_locally`" #: ../../rst/dev_guide/style_guide/index.rst:276 msgid "How to build the Ansible documentation" msgstr "Ansible ドキュメントã®ãƒ“ルド方法" #: ../../rst/dev_guide/style_guide/index.rst:278 msgid "#ansible-docs IRC chat channel" msgstr "IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible-docs)" #: ../../rst/dev_guide/style_guide/resources.rst:2 msgid "Resources" msgstr "リソース" #: ../../rst/dev_guide/style_guide/resources.rst:3 msgid "Follow the style of the :ref:`Ansible Documentation`" msgstr ":ref:`Ansible ドキュメント` ã®ã‚¹ã‚¿ã‚¤ãƒ«ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/resources.rst:4 msgid "Ask for advice on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)" msgstr "``#ansible-devel`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã§ã‚¢ãƒ‰ãƒã‚¤ã‚¹ã‚’求ã‚ã¦ãã ã•ã„(ansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)。" #: ../../rst/dev_guide/style_guide/resources.rst:5 msgid "Review these online style guides:" msgstr "オンラインã§åˆ©ç”¨ã§ãるスタイルガイドをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/resources.rst:7 msgid "`AP Stylebook `_" msgstr "`AP Stylebook `_" #: ../../rst/dev_guide/style_guide/resources.rst:8 msgid "`Chicago Manual of Style `_" msgstr "`Chicago Manual of Style `_" #: ../../rst/dev_guide/style_guide/resources.rst:9 msgid "`Strunk and White's Elements of Style `_" msgstr "`Strunk and White's Elements of Style `_" #: ../../rst/dev_guide/style_guide/search_hints.rst:5 msgid "Writing documentation so search can find it" msgstr "検索用ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ä½œæˆ" #: ../../rst/dev_guide/style_guide/search_hints.rst:7 msgid "One of the keys to writing good documentation is to make it findable. Readers use a combination of internal site search and external search engines such as Google or duckduckgo." msgstr "優れãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹ãŸã‚ã®éµã® 1 ã¤ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’見ã¤ã‘ã‚„ã™ãã™ã‚‹ã“ã¨ã§ã™ã€‚読者ã¯ã€ã‚µã‚¤ãƒˆå†…検索やã€Googleã€duckduckgo ãªã©ã®å¤–部検索エンジンを組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:9 msgid "To ensure Ansible documentation is findable, you should:" msgstr "Ansible ドキュメントãŒè¦‹ã¤ã‹ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:11 msgid "Use headings that clearly reflect what you are documenting." msgstr "ドキュメントã®å†…容を明確ã«å映ã•ã›ã‚‹è¦‹å‡ºã—を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:12 msgid "Use numbered lists for procedures or high-level steps where possible." msgstr "å¯èƒ½ãªå ´åˆã¯ã€ç•ªå·ä»˜ãã®ä¸€è¦§ã¾ãŸã¯æ‰‹é †ã®æ¦‚è¦æ‰‹é †ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:13 msgid "Avoid linking to github blobs where possible." msgstr "å¯èƒ½ãªé™ã‚Šã€github ブログã«ã¯ãƒªãƒ³ã‚¯ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/search_hints.rst:17 msgid "Using clear headings in documentation" msgstr "ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§æ˜Žç¢ºãªè¦‹å‡ºã—ã®ä½¿ç”¨" #: ../../rst/dev_guide/style_guide/search_hints.rst:19 msgid "We all use simple English when we want to find something. For example, the title of this page could have been any one of the following:" msgstr "何ã‹ã‚’探ã™ã¨ãã¯ã€ç°¡å˜ãªè‹±èªžã‚’使ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚¿ã‚¤ãƒˆãƒ«ã¯æ¬¡ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:21 msgid "Search optimization" msgstr "Search optimization (æ¤œç´¢ã®æœ€é©åŒ–)" #: ../../rst/dev_guide/style_guide/search_hints.rst:22 msgid "Findable documentation" msgstr "Findable documentation (検索å¯èƒ½ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ)" #: ../../rst/dev_guide/style_guide/search_hints.rst:23 msgid "Writing for findability" msgstr "Writing for findability (見やã™ãã™ã‚‹ãŸã‚ã®è¨˜è¿°)" #: ../../rst/dev_guide/style_guide/search_hints.rst:25 msgid "What we are really trying to describe is - how do I write documentation so search engines can find my content? That simple phrase is what drove the title of this section. When you are creating your headings for documentation, spend some time to think about what you would type in a search box to find it, or more importantly, how someone less familiar with Ansible would try to find that information. Your heading should be the answer to that question." msgstr "ã“ã“ã§èª¬æ˜Žã—よã†ã¨ã—ã¦ã„ã‚‹ã®ã¯ã€ã€Œæ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ãŒã‚³ãƒ³ãƒ†ãƒ³ãƒ„を見ã¤ã‘られるよã†ã«ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ›¸ãæ–¹ã€ã§ã™ã€‚ãã®å˜ç´”ãªãƒ•レーズãŒã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¿ã‚¤ãƒˆãƒ«ã«ãªã‚Šã¾ã—ãŸã€‚ドキュメントã®è¦‹å‡ºã—を作æˆã™ã‚‹ã¨ãã¯ã€æ¤œç´¢ãƒœãƒƒã‚¯ã‚¹ã«ä½•を入力ã—ã¦æ¤œç´¢ã™ã‚‹ã®ã‹ã€ã•らã«é‡è¦ãªã“ã¨ã«ã€Ansible ã«ã‚ã¾ã‚Šè©³ã—ããªã„ユーザーãŒãã®æƒ…報をã©ã®ã‚ˆã†ã«è¦‹ã¤ã‘よã†ã¨ã™ã‚‹ã‹ã‚’考ãˆã‚‹æ™‚間を設ã‘ã¦ãã ã•ã„。見出ã—ã¯ã€ãã®è³ªå•ã«å¯¾ã™ã‚‹ç­”ãˆã§ã‚ã‚‹ã¹ãã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:27 msgid "One word of caution - you do want to limit the size of your headings. A full heading such as `How do I write documentation so search engines can find my content?` is too long. Search engines would truncate anything over 50 - 60 characters. Long headings would also wrap on smaller devices such as a smart phone." msgstr "注記 - 見出ã—ã®ã‚µã‚¤ã‚ºã‚’制é™ã™ã‚‹å ´åˆã¯ã€`How do I write documentation so search engines can find my content?` ãªã©ã®è¦‹å‡ºã—ã«ã™ã‚‹ã¨é•·ã™ãŽã¾ã™ã€‚検索エンジン㯠50 ~ 60 文字を超ãˆã‚‹ã‚‚ã®ã¯åˆ‡ã‚Šæ¨ã¦ã¾ã™ã€‚é•·ã„見出ã—ã‚‚ã€ã‚¹ãƒžãƒ¼ãƒˆãƒ•ォンãªã©ã®å°è¦æ¨¡ãªãƒ‡ãƒã‚¤ã‚¹ã§ã¯æŠ˜ã‚Šè¿”ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:30 msgid "Using numbered lists for `zero position` snippets" msgstr "`zero position` スニペットã®ç•ªå·ä»˜ãã®ãƒªã‚¹ãƒˆã®ä½¿ç”¨" #: ../../rst/dev_guide/style_guide/search_hints.rst:32 msgid "Google can optimize the search results by adding a `feature snippet `_ at the top of the search results. This snippet provides a small window into the documentation on that first search result that adds more detail than the rest of the search results, and can occasionally answer the reader's questions right there, or at least verify that the linked page is what the reader is looking for." msgstr "Google ã¯ã€æ¤œç´¢çµæžœã®ä¸Šéƒ¨ã« `機能スニペット `_ を追加ã—ã¦æ¤œç´¢çµæžœã‚’最é©åŒ–ã§ãã¾ã™ã€‚ã“ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ã€æœ€åˆã®æ¤œç´¢çµæžœã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«å°ã•ãªã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’æä¾›ã—ã€æ®‹ã‚Šã®æ¤œç´¢çµæžœã‚ˆã‚Šã‚‚詳細を追加ã—ã€æ™‚ã«ã¯èª­è€…ã®è³ªå•ã«ãã®å ´ã§ç­”ãˆãŸã‚Šã€å°‘ãªãã¨ã‚‚リンク先ã®ãƒšãƒ¼ã‚¸ãŒèª­è€…ã®æŽ¢ã—ã¦ã„ã‚‹ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:34 msgid "Google returns the feature snippet in the form of numbered steps. Where possible, you should add a numbered list near the top of your documentation page, where appropriate. The steps can be the exact procedure a reader would follow, or could be a high level introduction to the documentation topic, such as the numbered list at the top of this page." msgstr "Google ã¯ç•ªå·ä»˜ãã®æ‰‹é †ã®æ©Ÿèƒ½ã‚¹ãƒ‹ãƒšãƒƒãƒˆã‚’è¿”ã—ã¾ã™ã€‚å¯èƒ½ã§ã‚れã°ã€å¿…è¦ã«å¿œã˜ã¦ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒšãƒ¼ã‚¸ã®ä¸Šéƒ¨ä»˜è¿‘ã«ç•ªå·ä»˜ãリストを追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚手順ã¯ã€èª­è€…ãŒå¾“ã†æ­£ç¢ºãªæ‰‹é †ã«ã™ã‚‹ã“ã¨ã‚‚ã€ã“ã®ãƒšãƒ¼ã‚¸ã®ä¸Šéƒ¨ã«ã‚る番å·ä»˜ãリストãªã©ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒˆãƒ”ãƒƒã‚¯ã®æ¦‚è¦ã‚’説明ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:37 msgid "Problems with github blobs on search results" msgstr "æ¤œç´¢çµæžœã«é–¢ã™ã‚‹ github ブロブã®å•題" #: ../../rst/dev_guide/style_guide/search_hints.rst:39 msgid "Search engines do not typically return github blobs in search results, at least not in higher ranked positions. While it is possible and sometimes necessary to link to github blobs from documentation, the better approach would be to copy that information into an .rst page in Ansible documentation." msgstr "検索エンジンã¯é€šå¸¸ã€å°‘ãªãã¨ã‚‚上ä½ã®ä½ç½®ã§ã¯ã€æ¤œç´¢çµæžœã« github ブロブを返ã—ã¾ã›ã‚“。ドキュメントã‹ã‚‰ github ブロブã«ãƒªãƒ³ã‚¯ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã‚りã€å ´åˆã«ã‚ˆã£ã¦ã¯å¿…è¦ã§ã™ãŒã€ã‚ˆã‚Šè‰¯ã„アプローãƒã¯ã€ãã®æƒ…報を Ansible ドキュメント㮠.rst ページã«ã‚³ãƒ”ーã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/search_hints.rst:42 msgid "Other search hints" msgstr "ä»–ã®æ¤œç´¢ãƒ’ント" #: ../../rst/dev_guide/style_guide/search_hints.rst:44 msgid "While it may not be possible to adapt your documentation to all search optimizations, keep the following in mind as you write your documentation:" msgstr "ã™ã¹ã¦ã®æ¤œç´¢æœ€é©åŒ–ã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’調整ã™ã‚‹ã“ã¨ãŒã§ããªã„å ´åˆã‚‚ã‚りã¾ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ç‚¹ã«ç•™æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/search_hints.rst:46 msgid "**Search engines don't parse beyond the `#` in an html page.** So for example, all the subheadings on this page are appended to the main page URL. As such, when I search for 'Using number lists for zero position snippets', the search result would be a link to the top of this page, not a link directly to the subheading I searched for. Using :ref:`local TOCs ` helps alleviate this problem as the reader can scan for the header at top of the page and click to the section they are looking for. For critical documentation, consider creating a new page that can be a direct search result page." msgstr "**検索エンジンã¯ã€html ページ内㮠`#` 以é™ã¯è§£æžã—ã¾ã›ã‚“。** ãã®ãŸã‚ã€ãŸã¨ãˆã°ã€ã“ã®ãƒšãƒ¼ã‚¸ã®ã™ã¹ã¦ã®å°è¦‹å‡ºã—ã¯ã€ãƒ¡ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã® URL ã«ä»˜åŠ ã•れã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€ã€ŒUsing number lists for zero position snippetsã€ã¨æ¤œç´¢ã™ã‚‹ã¨ã€æ¤œç´¢çµæžœã¯ã“ã®ãƒšãƒ¼ã‚¸ã®å†’é ­ã¸ã®ãƒªãƒ³ã‚¯ã«ãªã‚Šã€æ¤œç´¢ã—ãŸå°è¦‹å‡ºã—ã¸ã®ç›´æŽ¥ã®ãƒªãƒ³ã‚¯ã«ã¯ãªã‚Šã¾ã›ã‚“。:ref:`ローカル TOC ` を使用ã™ã‚‹ã¨ã€èª­è€…ãŒãƒšãƒ¼ã‚¸ã«ä¸Šéƒ¨ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«ç›®ã‚’通ã—ã¦ã€æŽ¢ã—ã¦ã„るセクションをクリックã§ãã‚‹ãŸã‚ã€ã“ã®å•題を軽減ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚é‡è¦ãªæ–‡æ›¸ã«ã¤ã„ã¦ã¯ã€æ¤œç´¢çµæžœã®ãƒšãƒ¼ã‚¸ã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«æ–°ã—ã„ページを作æˆã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/search_hints.rst:48 msgid "**Make your first few sentences clearly describe your page topic.** Search engines return not just the URL, but a short description of the information at the URL. For Ansible documentation, we do not have description metadata embedded on each page. Instead, the search engines return the first couple of sentences (140 characters) on the page. That makes your first sentence or two very important to the reader who is searching for something in Ansible." msgstr "**最åˆã® 2ã€3 æ–‡ã§ãƒšãƒ¼ã‚¸ã®ãƒˆãƒ”ックを明確ã«èª¬æ˜Žã—ã¦ãã ã•ã„。** 検索エンジン㯠URL ã ã‘ã§ãªãã€ãã® URL ã«ã‚る情報ã®ç°¡å˜ãªèª¬æ˜Žã‚‚è¿”ã—ã¾ã™ã€‚Ansible ドキュメントã®å ´åˆã¯ã€å„ページã«èª¬æ˜Žãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãŒåŸ‹ã‚è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“。ãã®ä»£ã‚ã‚Šã€æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã¯ãƒšãƒ¼ã‚¸ã®æœ€åˆã® 2ã€3 æ–‡ (140 文字) ã‚’è¿”ã—ã¾ã™ã€‚ãã®ãŸã‚ã€Ansibleã§ä½•ã‹ã‚’検索ã—ã¦ã„る読者ã«ã¨ã£ã¦ã€æœ€åˆã® 1〜2 æ–‡ãŒéžå¸¸ã«é‡è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:2 msgid "Spelling - Word Usage - Common Words and Phrases to Use and Avoid" msgstr "スペルã€å˜èªžã®ä½¿ç”¨ã€ãŠã‚ˆã³ä½¿ç”¨ã¾ãŸã¯å›žé¿ã™ã‚‹ä¸€èˆ¬çš„ãªå˜èªžã¨ãƒ•レーズ" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:5 msgid "Acronyms" msgstr "略語" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:7 msgid "Always uppercase. An acronym is a word formed from the initial letters of a name, such as ROM for Read-only memory, SaaS for Software as a Service, or by combining initial letters or part of a series of words, such as LILO for LInux LOader." msgstr "常ã«å¤§æ–‡å­—ã§ã™ã€‚頭字語ã¨ã¯ã€ROM (Read-Only Memory) ã‚„ SaaS (Software as a Service) ã®ã‚ˆã†ã«åå‰ã®é ­æ–‡å­—ã‹ã‚‰å½¢æˆã•れãŸå˜èªžã‚„ã€LILO (LInux LOader) ã®ã‚ˆã†ã«ä¸€é€£ã®å˜èªžã®é ­æ–‡å­—や一部を組ã¿åˆã‚ã›ã¦å½¢æˆã•れãŸå˜èªžã®ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:11 msgid "Spell out the acronym before using it in alone text, such as \"The Embedded DevKit (EDK)...\"" msgstr "略語ã¯ã€å˜ç‹¬ã§ä½¿ç”¨ã™ã‚‹å‰ã«ã€ã€ŒThe Embedded devkit (EDK)...ã€ã®ã‚ˆã†ã«æ–‡å­—ã‚’ç•¥ã•ãšã«æ›¸ã„ã¦ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:14 msgid "Applications" msgstr "アプリケーション" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:15 msgid "When used as a proper name, use the capitalization of the product, such as GNUPro or Source-Navigator. When used as a command, use lowercase as appropriate, such as \"To start GCC, type ``gcc``.\"" msgstr "固有å詞ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€GNUPro ã¾ãŸã¯ Source-Navigator ã®ã‚ˆã†ã«è£½å“ã®å¤§æ–‡å­—を使用ã—ã¾ã™ã€‚コマンドã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã€ŒTo start GCC, type ``gcc``.ã€(GCC ã‚’èµ·å‹•ã™ã‚‹å ´åˆã¯ã€``gcc`` を入力ã—ã¾ã™) ã®ã‚ˆã†ã«ã€é©åˆ‡ãªå°æ–‡å­—を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:19 msgid "\"vi\" is always lowercase." msgstr "「viã€ã¯å¸¸ã«å°æ–‡å­—ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:22 msgid "As" msgstr "As" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:23 msgid "This is often used to mean \"because\", but has other connotations, for example, parallel or simultaneous actions. If you mean \"because\", say \"because\"." msgstr "原因を示ã™å ´åˆã«ã‚ˆã使用ã•れã¾ã™ãŒã€ä¸¦åˆ—ã¾ãŸã¯åŒæ™‚ã®æ“作ãªã©ã€ä»–ã®æ„味もã‚りã¾ã™ã€‚「原因ã€ã‚’æ„味ã™ã‚‹å ´åˆã¯ã€ã€Œbecauseã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:26 msgid "Asks for" msgstr "Asks for" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:27 msgid "Use \"requests\" instead." msgstr "代ã‚りã«ã€Œrequestsã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:30 msgid "Assure/Ensure/Insure" msgstr "Assure/Ensure/Insure" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:31 msgid "Assure implies a sort of mental comfort. As in \"I assured my husband that I would eventually bring home beer.\"" msgstr "「assureã€ã¯ã€ä¸€ç¨®ã®ç²¾ç¥žçš„ãªå®‰å¿ƒã•ã‚’æ„味ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒI assured my husband that I would eventually bring home beer. (ç§ã¯å¤«ã«æœ€çµ‚çš„ã«å®¶ã®ãƒ“ールをæŒã£ã¦ãã‚‹ã“ã¨ã‚’ç´„æŸã—ã¾ã—ãŸ)ã€ã®ã‚ˆã†ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:33 msgid "Ensure means \"to make sure.\"" msgstr "「ensureã€ã¯ã€ã€Œç¢ºå®Ÿã«ã€ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:35 msgid "Insure relates to monetary insurance." msgstr "「insureã€ã¯ã€é‡‘銭的ãªä¿é™ºã«é–¢ä¿‚ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:39 msgid "Back up" msgstr "Back up" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:40 msgid "This is a verb. You \"back up\" files; you do not \"backup\" files." msgstr "ã“れã¯å‹•詞ã§ã™ã€‚ファイルを「ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ã™ã‚‹ã¨ãã¯ã€ã€Œbackupã€ã§ã¯ãªãã€ã€Œback upã€ã¨è¨˜è¼‰ã—ã¾ã™ (You back up files)。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:43 msgid "Backup" msgstr "Backup" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:44 msgid "This is a noun. You create \"backup\" files; you do not create \"back up\" files." msgstr "ã“れã¯å詞ã§ã™ã€‚「ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ãƒ•ァイルを作æˆã™ã‚‹ã¨ãã¯ã€ã€Œback upã€ã§ã¯ãªãã€ã€Œbackupã€ã¨è¨˜è¼‰ã—ã¾ã™ (You create backup files)。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:47 msgid "Backward" msgstr "Backward" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:48 msgid "Correct. Avoid using backwards unless you are stating that something has \"backwards compatibility.\"" msgstr "é©åˆ‡ã§ã™ã€‚「backwards compatibilityã€(å¾Œæ–¹äº’æ›æ€§) 以外ã®èª¬æ˜Žã«ã€ã€Œbackwardã€ã¨ã„ã†å˜èªžã‚’使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:51 msgid "Backwards compatibility" msgstr "Backwards compatibility" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:52 msgid "Correct as is." msgstr "ãã®ã¾ã¾ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:55 msgid "By way of" msgstr "By way of" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:56 msgid "Use \"using\" instead." msgstr "代ã‚りã«ã€Œusingã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:59 msgid "Can/May" msgstr "Can/May" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:60 msgid "Use \"can\" to describe actions or conditions that are possible. Use \"may\" only to describe situations where permission is being given. If either \"can,\" \"could,\" or \"may\" apply, use \"can\" because it's less tentative." msgstr "「canã€ã¯ã€å¯èƒ½ãªæ“作やæ¡ä»¶ã‚’説明ã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚許å¯ãŒå¿…è¦ãªçжæ³ã‚’説明ã™ã‚‹ã«ã¯ã€ã€Œmayã€ã‚’使用ã—ã¾ã™ã€‚「canã€ã€ã€Œcouldã€ã€ã¾ãŸã¯ã€Œmayã€ã®ã„ãšã‚Œã‹ãŒå½“ã¦ã¯ã¾ã‚‹å ´åˆã¯ã€ã€Œcanã€ã‚’使用ã—ã¾ã™ (æš«å®šçš„ãªæ„味åˆã„ãŒå°‘ãªã„ãŸã‚)。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:63 msgid "CD or cd" msgstr "CD ã¾ãŸã¯ cd" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:64 msgid "When referring to a compact disk, use CD, such as \"Insert the CD into the CD-ROM drive.\" When referring to the change directory command, use cd." msgstr "コンパクトディスクをå‚ç…§ã™ã‚‹å ´åˆã¯ã€CD を使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒInsert the CD into the CD-ROM drive.ã€(CD ã‚’ CD-ROM ãƒ‰ãƒ©ã‚¤ãƒ–ã«æŒ¿å…¥ã—ã¾ã™ã€‚) ã¨ã—ã¾ã™ã€‚ディレクトリーを変更ã™ã‚‹ change directory コマンドを示ã™å ´åˆã¯ã€cd を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:67 msgid "CD-ROM" msgstr "CD-ROM" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:68 msgid "Correct. Do not use \"cdrom,\" \"CD-Rom,\" \"CDROM,\" \"cd-rom\" or any other variation. When referring to the drive, use CD-ROM drive, such as \"Insert the CD into the CD-ROM drive.\" The plural is \"CD-ROMs.\"" msgstr "「cdromã€ã€ã€ŒCD-Romã€ã€ã€ŒCDROMã€ã€ã€Œcd-romã€ãªã©ã®è¡¨è¨˜ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ドライブをå‚ç…§ã™ã‚‹å ´åˆã¯ã€ã€ŒInsert the CD into the CD-ROM drive (CD-ROM ドライブãªã©)ã€ã®ã‚ˆã†ã«ã€ŒCD-ROM driveã€ã‚’使用ã—ã¾ã™ã€‚複数形ã¯ã€ŒCD-ROMsã€ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:72 msgid "Command line" msgstr "Command line" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:73 msgid "Correct. Do not use \"command-line\" or \"commandline\" as a noun. If used as an adjective, \"command-line\" is appropriate, for example \"command-line arguments\"." msgstr "é©åˆ‡ã§ã™ã€‚「command-lineã€ã¾ãŸã¯ã€Œcommandlineã€ã‚’å詞ã¨ã—ã¦ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。形容詞ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã€Œcommand-line argumentsã€ã®ã‚ˆã†ã«ã€ã€Œcommand-lineã€ãŒé©åˆ‡ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:75 msgid "Use \"command line\" to describes where to place options for a command, but not where to type the command. Use \"shell prompt\" instead to describe where to type commands. The line on the display screen where a command is expected. Generally, the command line is the line that contains the most recently displayed command prompt." msgstr "「コマンドラインã€ã‚’使用ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ã®ã‚ªãƒ—ションを追加ã™ã‚‹å ´æ‰€ã‚’記述ã—ã¾ã™ãŒã€ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã™ã‚‹å ´æ‰€ã¯è¨˜è¿°ã—ã¾ã›ã‚“。コマンドを入力ã™ã‚‹å ´æ‰€ã‚’説明ã™ã‚‹å ´åˆã¯ã€ä»£ã‚りã«ã€Œshell promptã€ã‚’使用ã—ã¾ã™ã€‚ã‚³ãƒžãƒ³ãƒ‰ãŒæœŸå¾…ã•れる画é¢ä¸Šã®è¡Œã¨ãªã‚Šã¾ã™ã€‚通常ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã¯ã€æœ€å¾Œã«è¡¨ç¤ºã•れるコマンドプロンプトをå«ã‚€è¡Œã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:79 msgid "Daylight saving time (DST)" msgstr "Daylight saving time (DST)" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:81 msgid "Correct. Do not use daylight savings time. Daylight Saving Time (DST) is often misspelled \"Daylight Savings\", with an \"s\" at the end. Other common variations are \"Summer Time\"and \"Daylight-Saving Time\". (https://www.timeanddate.com/time/dst/daylight-savings-time.html)" msgstr "é©åˆ‡ã§ã™ã€‚「daylight savings timeã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。「Daylight Saving Time (DST)ã€ã¯ã€ã€ŒDaylight Savingsã€ã®ã‚ˆã†ã«ã€æœ€å¾Œã« s ãŒä»˜ã„ã¦ã„ã‚‹å ´åˆãŒã‚りã¾ã™ãŒã€ã“れã¯é–“é•ã„ã§ã™ã€‚ãã®ä»–ã®ä¸€èˆ¬çš„ãªè¡¨è¨˜æ³•ã«ã¯ã€ã€ŒSummer Timeã€ãŠã‚ˆã³ã€ŒDaylight-Saving Timeã€ãŒã‚りã¾ã™ (https://www.timeanddate.com/time/dst/daylight-savings-time.html))。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:85 msgid "Download" msgstr "Download" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:86 msgid "Correct. Do not use \"down load\" or \"down-load.\"" msgstr "é©åˆ‡ã§ã™ã€‚「down loadã€ã¾ãŸã¯ã€Œdown-loadã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:90 msgid "Spell it out: \"For example.\"" msgstr "çœç•¥ã›ãšã«ã€ŒFor exampleã€ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:93 msgid "Failover" msgstr "Failover" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:94 msgid "When used as a noun, a failover is a backup operation that automatically switches to a standby database, server or network if the primary system fails or is temporarily shut down for servicing. Failover is an important fault tolerance function of mission-critical systems that rely on constant accessibility. Failover automatically and transparently to the user redirects requests from the failed or down system to the backup system that mimics the operations of the primary system." msgstr "å詞ã¨ã—ã¦ä½¿ç”¨ã•れる場åˆã€ãƒ•ェイルオーãƒãƒ¼ã¨ã¯ã€ãƒ—ライマリーシステムã«éšœå®³ãŒç™ºç”Ÿã—ãŸã‚Šã€ã‚µãƒ¼ãƒ“スã®ãŸã‚ã«ä¸€æ™‚çš„ã«åœæ­¢ã—ãŸå ´åˆã«ã€è‡ªå‹•çš„ã«ã‚¹ã‚¿ãƒ³ãƒã‚¤ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ã‚µãƒ¼ãƒãƒ¼ã€ã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—æ“作ã®ã“ã¨ã§ã™ã€‚フェイルオーãƒãƒ¼ã¯ã€å¸¸ã«ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã‚ã‚‹ã“ã¨ãŒæ±‚ã‚られるミッションクリティカルãªã‚·ã‚¹ãƒ†ãƒ ã®é‡è¦ãªãƒ•ォールトトレランス機能ã¨ãªã‚Šã¾ã™ã€‚フェイルオーãƒãƒ¼ã¯ã€è‡ªå‹•çš„ã‹ã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€éŽçš„ã«ã€éšœå®³ã‚„åœæ­¢ã—ãŸã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ã€ãƒ—ãƒ©ã‚¤ãƒžãƒªãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã®æ“作を模倣ã—ãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—システムã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:97 msgid "Fail over" msgstr "Fail over" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:98 msgid "When used as a verb, fail over is two words since there can be different tenses such as failed over." msgstr "動詞ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€æ™‚制を変ãˆã‚‰ã‚Œã‚‹ã‚ˆã†ã« (failed over ãªã©)ã€2 ã¤ã®å˜èªžã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:101 msgid "Fewer" msgstr "Fewer" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:102 msgid "Fewer is used with plural nouns. Think things you could count. Time, money, distance, and weight are often listed as exceptions to the traditional \"can you count it\" rule, often thought of a singular amounts (the work will take less than 5 hours, for example)." msgstr "fewer ã¯ã€è¤‡æ•°å½¢ã®å詞ã§ä½¿ç”¨ã—ã¾ã™ã€‚æ•°ã‚’æ•°ãˆã‚‹ã“ã¨ãŒã§ãã‚‹ã‚‚ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚時間ã€ãŠé‡‘ã€è·é›¢ã€ãŠã‚ˆã³é‡é‡ã¯ã€å¾“æ¥ã®ã€Œæ•°ãˆã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã€ãƒ«ãƒ¼ãƒ«ã®ä¾‹å¤–ã¨ã—ã¦æŒ™ã’られるã“ã¨ãŒå¤šãã€é€šå¸¸ã¯ 1 ã¤ã®é‡ã¨è¦‹ãªã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œthe work will take less than 5 hoursã€(作業ã«ã‹ã‹ã‚‹æ™‚間㯠5 時間未満ã§ã™)。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:105 msgid "File name" msgstr "File name" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:106 msgid "Correct. Do not use \"filename.\"" msgstr "é©åˆ‡ã§ã™ã€‚「filenameã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:109 msgid "File system" msgstr "File system" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:110 msgid "Correct. Do not use \"filesystem.\" The system that an operating system or program uses to organize and keep track of files. For example, a hierarchical file system is one that uses directories to organize files into a tree structure. Although the operating system provides its own file management system, you can buy separate file management systems. These systems interact smoothly with the operating system but provide more features, such as improved backup procedures and stricter file protection." msgstr "é©åˆ‡ã§ã™ã€‚「filesystemã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。オペレーティングシステムã¾ãŸã¯ãƒ—ログラムãŒãƒ•ァイルを整ç†ã—ã€è¿½è·¡ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã§ã™ã€‚ãŸã¨ãˆã°ã€éšŽå±¤ãƒ•ァイルシステムã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’使用ã—ã¦ãƒ•ァイルをツリー構造ã«ç·¨æˆã™ã‚‹ã‚‚ã®ã§ã™ã€‚オペレーティングシステムã¯ç‹¬è‡ªã®ãƒ•ァイル管ç†ã‚·ã‚¹ãƒ†ãƒ ã‚’æä¾›ã—ã¦ã„ã¾ã™ãŒã€åˆ¥ã®ãƒ•ァイル管ç†ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã¨ã‚¹ãƒ ãƒ¼ã‚ºã«å¯¾è©±ã—ã¾ã™ãŒã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—æ‰‹é †ã®æ”¹å–„やファイルä¿è­·ã®å¼·åŒ–ãªã©ã€ã‚ˆã‚Šå¤šãã®æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:113 msgid "For instance" msgstr "For instance" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:114 msgid "For example,\" instead." msgstr "代ã‚りã«ã€ŒFor exampleã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:117 msgid "For further/additional/whatever information" msgstr "For further/additional/whatever information" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:118 msgid "Use \"For more information\"" msgstr "「For more informationã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:121 msgid "For this reason" msgstr "For this reason" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:122 msgid "Use \"therefore\"." msgstr "「thereforeã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:125 msgid "Forward" msgstr "Forward" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:126 msgid "Correct. Avoid using \"forwards.\"" msgstr "é©åˆ‡ã§ã™ã€‚「forwardsã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:129 msgid "Gigabyte (GB)" msgstr "Gigabyte (GB)" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:130 msgid "2 to the 30th power (1,073,741,824) bytes. One gigabyte is equal to 1,024 megabytes. Gigabyte is often abbreviated as G or GB." msgstr "2 ã® 30ä¹— (1,073,741,824) ãƒã‚¤ãƒˆã€‚1 ギガãƒã‚¤ãƒˆã¯ 1,024 メガãƒã‚¤ãƒˆã«ç›¸å½“ã—ã¾ã™ã€‚ギガãƒã‚¤ãƒˆã¯ã€G ã¾ãŸã¯ GB ã¨ç•¥ã•れるã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:133 msgid "Got" msgstr "Got" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:134 #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:208 msgid "Avoid. Use \"must\" instead." msgstr "使用ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。代ã‚り㫠\"must\" を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:137 msgid "High-availability" msgstr "High-availability" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:138 msgid "Correct. Do not use \"high availability.\"" msgstr "é©åˆ‡ã§ã™ã€‚「hight availabilityã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:141 msgid "Highly available" msgstr "Highly available" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:142 msgid "Correct. Do not use highly-available.\"" msgstr "é©åˆ‡ã§ã™ã€‚高å¯ç”¨æ€§ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:145 msgid "Hostname" msgstr "Hostname" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:146 msgid "Correct. Do not use host name." msgstr "é©åˆ‡ã§ã™ã€‚ホストåã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:149 msgid "i.e." msgstr "i.e." #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:150 msgid "Spell it out: \"That is.\"" msgstr "「That isã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:153 msgid "Installer" msgstr "Installer" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:154 msgid "Avoid. Use \"installation program\" instead." msgstr "使用ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€Œinstallation programã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:157 msgid "It's and its" msgstr "It's ãŠã‚ˆã³ its" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:158 msgid "\"It's\" is a contraction for \"it is;\" use \"it is\" instead of \"it's.\" Use \"its\" as a possessive pronoun (for example, \"the store is known for its low prices\")." msgstr "「It'sã€ã¯ã€Œit isã€ã®çŸ­ç¸®å½¢ã§ã™ã€‚「it'sã€ã§ã¯ãªã「it isã€ã‚’使用ã—ã¾ã™ã€‚所有代å詞ã¯ã€Œitsã€ã¨ä½¿ç”¨ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Œthe store is known for its low pricesã€(ã“ã®åº—ã¯ä½Žä¾¡æ ¼ã§çŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™) ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:161 msgid "Less" msgstr "Less" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:162 msgid "Less is used with singular nouns. For example \"View less details\" wouldn't be correct but \"View less detail\" works. Use fewer when you have plural nouns (things you can count)." msgstr "Less ã¯å˜æ•°å詞ã§ä½¿ç”¨ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒView less detailsã€ã¯é–“é•ã£ã¦ã„ã¾ã™ãŒã€ã€ŒView less detailã€ã¯é©åˆ‡ã§ã™ã€‚複数å詞 (æ•°ãˆã‚‰ã‚Œã‚‹ç‰©) ã«ã¯ã€ã€Œfewerã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:165 msgid "Linux" msgstr "Linux" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:166 msgid "Correct. Do not use \"LINUX\" or \"linux\" unless referring to a command, such as \"To start Linux, type linux.\" Linux is a registered trademark of Linus Torvalds." msgstr "é©åˆ‡ã§ã™ã€‚コマンドをå‚ç…§ã—ã¦ã„ã‚‹å ´åˆ (ãŸã¨ãˆã°ã€ŒTo start Linux, type linuxã€(Linux ã‚’èµ·å‹•ã™ã‚‹å ´åˆã¯ã€linux ã¨å…¥åŠ›ã—ã¾ã™)) を除ãã€ã€ŒLINUXã€ã¾ãŸã¯ã€Œlinuxã€ã‚’使用ã—ãªã„ã§ãã ã•ã„。Linux ã¯ã€Linus Torvalds ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:169 msgid "Login" msgstr "Login" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:170 msgid "A noun used to refer to the login prompt, such as \"At the login prompt, enter your username.\"" msgstr "ログインプロンプトを示ã™ãŸã‚ã«ä½¿ç”¨ã—ã¦ã„ã‚‹å詞ã§ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒAt the login prompt, enter your username.ã€(ログインプロンプトã§ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—ã¦ãã ã•ã„。) ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:173 msgid "Log in" msgstr "Log in" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:174 msgid "A verb used to refer to the act of logging in. Do not use \"login,\" \"loggin,\" \"logon,\" and other variants. For example, \"When starting your computer, you are requested to log in...\"" msgstr "ログインã®å‹•作をå‚ç…§ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる動詞ã§ã™ã€‚「loginã€ã€ã€Œlogginã€ã€ã€Œlogginã€ãªã©ã®å½¢ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒWhen starting your computer, you are requested to log in...ã€(コンピューターを起動ã™ã‚‹ã¨ã€ãƒ­ã‚°ã‚¤ãƒ³ã‚’è¦æ±‚ã•れã¾ã™...) ã¨è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:177 msgid "Log on" msgstr "Log on" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:178 msgid "To make a computer system or network recognize you so that you can begin a computer session. Most personal computers have no log-on procedure -- you just turn the machine on and begin working. For larger systems and networks, however, you usually need to enter a username and password before the computer system will allow you to execute programs." msgstr "コンピューターセッションを開始ã§ãるよã†ã«ã€ã‚³ãƒ³ãƒ”ューターシステムã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’èªè­˜ã•ã›ã‚‹ã“ã¨ã§ã™ã€‚ã»ã¨ã‚“ã©ã®ã‚³ãƒ³ãƒ”ューターã«ã¯ãƒ­ã‚°ã‚ªãƒ³æ‰‹é †ãŒã‚りã¾ã›ã‚“。マシンã®é›»æºã‚’入れれã°å‹•ããŸã‚ã§ã™ã€‚ãŸã ã—ã€å¤§è¦æ¨¡ã‚·ã‚¹ãƒ†ãƒ ã‚„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å ´åˆã«ã¯ã€é€šå¸¸ã€ã‚³ãƒ³ãƒ”ュータシステムã§ãƒ—ログラムを実行ã™ã‚‹å‰ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードを入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:181 msgid "Lots of" msgstr "Lots of" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:182 msgid "Use \"Several\" or something equivalent instead." msgstr "代ã‚りã«ã€Œseveralã€ãªã©ã®å˜èªžã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:185 msgid "Make sure" msgstr "Make sure" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:186 msgid "This means \"be careful to remember, attend to, or find out something.\" For example, \"...make sure that the rhedk group is listed in the output.\" Try to use verify or ensure instead." msgstr "ã“れã¯ã€ã€Œä½•ã‹ã‚’覚ãˆãŸã‚Šã€æ³¨æ„ã—ãŸã‚Šã€è¦‹ã¤ã‘ãŸã‚Šã™ã‚‹ã‚ˆã†ã«æ³¨æ„ã™ã‚‹ã€ã¨ã„ã†æ„味ã§ã™ã€‚ãŸã¨ãˆã°ã€ã€Œ...make sure that the rhedk group is listed in the output.ã€(rhedk グループãŒå‡ºåŠ›ã®ä¸€è¦§ã«å«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„) ã¨ãªã‚Šã¾ã™ã€‚代ã‚り㫠verify ã‚„ ensure を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:190 msgid "Manual/man page" msgstr "Manual/man page" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:191 msgid "Correct. Two words. Do not use \"manpage\"" msgstr "é©åˆ‡ã§ã™ã€‚2 ã¤ã®å˜èªžã«ãªã‚Šã¾ã™ã€‚「manpageã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:194 msgid "MB" msgstr "MB" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:195 msgid "When spelled MB, short for megabyte (1,000,000 or 1,048,576 bytes, depending on the context)." msgstr "MB ã¯ã€ãƒ¡ã‚¬ãƒã‚¤ãƒˆ (状æ³ã«å¿œã˜ã¦ 1,000,000 ãƒã‚¤ãƒˆã¾ãŸã¯ 1,048,576 ãƒã‚¤ãƒˆ) ã®ç•¥èªžã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:196 msgid "When spelled Mb, short for megabit." msgstr "Mb ã¯ã€ãƒ¡ã‚¬ãƒ“ットã®ç•¥èªžã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:199 msgid "MBps" msgstr "MBps" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:200 msgid "Short for megabytes per second, a measure of data transfer speed. Mass storage devices are generally measured in MBps." msgstr "1 ç§’ã‚ãŸã‚Šã®ãƒ¡ã‚¬ãƒã‚¤ãƒˆã®ç•¥èªžã§ã€ãƒ‡ãƒ¼ã‚¿è»¢é€é€Ÿåº¦ã®æ¸¬å®šå˜ä½ã§ã™ã€‚通常ã€å¤§å®¹é‡ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒã‚¤ã‚¹ã¯ã€MBps ã§è¡¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:203 msgid "MySQL" msgstr "MySQL" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:204 msgid "Common open source database server and client package. Do not use \"MYSQL\" or \"mySQL.\"" msgstr "一般的ãªã‚ªãƒ¼ãƒ—ンソースデータベースサーãƒãƒ¼ãŠã‚ˆã³ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ‘ッケージã§ã™ã€‚「MYSQLã€ã¾ãŸã¯ã€ŒmySQLã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:207 msgid "Need to" msgstr "Need to" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:211 msgid "Read-only" msgstr "Read-only" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:212 msgid "Correct. Use when referring to the access permissions of files or directories." msgstr "é©åˆ‡ã§ã™ã€‚ファイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ‘ーミッションをå‚ç…§ã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:215 msgid "Real time/real-time" msgstr "Real time/real-time" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:216 msgid "Depends. If used as a noun, it is the actual time during which something takes place. For example, \"The computer may partly analyze the data in real time (as it comes in) -- R. H. March.\" If used as an adjective, \"real-time\" is appropriate. For example, \"XEmacs is a self-documenting, customizable, extensible, real-time display editor.\"" msgstr "状æ³ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚å詞ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ãれã¯ä½•ã‹ãŒè¡Œã‚ã‚Œã‚‹å®Ÿéš›ã®æ™‚é–“ã«ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒThe computer may partly analyze the data in real time (as it comes in) -- R. H. Marchã€(コンピューターã¯ãƒ‡ãƒ¼ã‚¿ã‚’リアルタイムã§éƒ¨åˆ†çš„ã«åˆ†æžã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚(R. H.マーãƒ)) ã¨ãªã‚Šã¾ã™ã€‚形容詞ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã€Œreal-timeã€ãŒé©åˆ‡ã§ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒXEmacs is a self-documenting, customizable, extensible, real-time display editor.ã€(XEmacs ã¯ã€è‡ªå·±æ–‡æ›¸åŒ–を行ã†ã€ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºå¯èƒ½ã§ã€æ‹¡å¼µå¯èƒ½ãªã€ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ãƒ‡ã‚£ã‚¹ãƒ—レイエディターã§ã™) ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:219 msgid "Refer to" msgstr "Refer to" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:220 msgid "Use to indicate a reference (within a manual or website) or a cross-reference (to another manual or documentation source)." msgstr "å‚ç…§ (マニュアルã¾ãŸã¯ Web サイト内) ã¾ãŸã¯ç›¸äº’å‚ç…§ (別ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã¾ãŸã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚½ãƒ¼ã‚¹) を示ã™ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:223 msgid "See" msgstr "See" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:224 msgid "Don't use. Use \"Refer to\" instead." msgstr "使用ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€ŒRefer toã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:227 msgid "Since" msgstr "Since" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:228 msgid "This is often used to mean \"because\", but \"since\" has connotations of time, so be careful. If you mean \"because\", say \"because\"." msgstr "ã“ã®å˜èªžã¯ã€ŒåŽŸå› ã€ã‚’æ„味ã™ã‚‹ãŸã‚ã«ã‚ˆã使用ã•れã¾ã™ãŒã€ã€Œsinceã€ã«ã¯æ™‚é–“ã®æ„味åˆã„ãŒã‚ã‚‹ãŸã‚ã€æ³¨æ„ã—ã¦ãã ã•ã„。「原因ã€ã‚’æ„味ã™ã‚‹å ´åˆã¯ã€ã€Œbecauseã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:231 msgid "Tells" msgstr "Tells" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:232 msgid "Use \"Instructs\" instead." msgstr "代ã‚りã«ã€Œinstructsã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:235 msgid "That/which" msgstr "That/which" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:236 msgid "\"That\" introduces a restrictive clause-a clause that must be there for the sentence to make sense. A restrictive clause often defines the noun or phrase preceding it. \"Which\" introduces a non-restrictive, parenthetical clause-a clause that could be omitted without affecting the meaning of the sentence. For example: The car was travelling at a speed that would endanger lives. The car, which was traveling at a speed that would endanger lives, swerved onto the sidewalk. Use \"who\" or \"whom,\" rather than \"that\" or \"which,\" when referring to a person." msgstr "「Thatã€ã¯ã€åˆ¶é™çš„関係詞節を導入ã—ã¾ã™ã€‚ã“れã¯ã€æ–‡ãŒæ„味をãªã™ãŸã‚ã«å¿…è¦ãªç¯€ã§ã™ã€‚制é™çš„関係詞節ã¯ã€å¤šãã®å ´åˆã€ãã®å‰ã«ã‚ã‚‹å詞ã¾ãŸã¯å¥ã‚’定義ã—ã¾ã™ã€‚「Whichã€ã¯ã€éžåˆ¶é™ã®ã€æ‹¬å¼§ã§å›²ã¾ã‚ŒãŸç¯€ã‚’å°Žå…¥ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€æ–‡ã®æ„味ã«å½±éŸ¿ã‚’与ãˆãšã«çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãる節ã§ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒThe car was travelling at a speed that would endanger lives.ã€(人命をå±é™ºã«ã•らã™é€Ÿåº¦ã§è»ŠãŒèµ°è¡Œã—ã¦ã„ã¾ã—ãŸã€‚) ã¨ã€ã€ŒThe car, which was traveling at a speed that would endanger lives, swerved onto the sidewalk.ã€(人命をå±é™ºã«ã•らã™é€Ÿåº¦ã§èµ°è¡Œã—ã¦ã„ãŸè»ŠãŒæ­©é“ã«ã®ã‚Šä¸Šã’ã¾ã—ãŸ) ã§ã™ã€‚人を指ã™å ´åˆã¯ã€ã€Œthatã€ã¾ãŸã¯ã€Œwhichã€ã§ã¯ãªã「whoã€ã¾ãŸã¯ã€Œwhomã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:239 msgid "Then/than" msgstr "Then/than" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:240 msgid "\"Then\" refers to a time in the past or the next step in a sequence. \"Than\" is used for comparisons." msgstr "「thenã€ã¯ã€ã²ã¨ç¶šãã®ã‚‚ã®ã®ä¸­ã‹ã‚‰ã€ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®éŽåŽ»ã®ã‚¹ãƒ†ãƒƒãƒ—ã¾ãŸã¯æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã®æ™‚間を指ã—ã¾ã™ã€‚比較ã«ã¯ã€Œthanã€ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:245 msgid "Third-party" msgstr "Third-party" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:246 msgid "Correct. Do not use \"third party\"." msgstr "é©åˆ‡ã§ã™ã€‚「third partyã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:249 msgid "Troubleshoot" msgstr "Troubleshoot" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:250 msgid "Correct. Do not use \"trouble shoot\" or \"trouble-shoot.\" To isolate the source of a problem and fix it. In the case of computer systems, the term troubleshoot is usually used when the problem is suspected to be hardware -related. If the problem is known to be in software, the term debug is more commonly used." msgstr "é©åˆ‡ã§ã™ã€‚「trouble shootã€ã¾ãŸã¯ã€Œtrouble-shootã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。å•題ã®åŽŸå› ã‚’ç‰¹å®šã—ã¦ä¿®æ­£ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚コンピューターシステムã®å ´åˆã¯ã€é€šå¸¸ã€å•題ãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«é–¢é€£ã™ã‚‹ã‚‚ã®ã¨è€ƒãˆã‚‰ã‚Œã‚‹å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã€‚å•題ãŒã‚½ãƒ•トウェアã«ã‚ã‚‹ã“ã¨ãŒåˆ†ã‹ã£ã¦ã„ã‚‹å ´åˆã«ã€ã‚ˆã‚Šä¸€èˆ¬çš„ã«ä½¿ç”¨ã•れるã®ã¯ã€Œdebugã€ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:253 msgid "UK" msgstr "UK" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:254 #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:266 msgid "Correct as is, no periods." msgstr "ã“ã®ã¨ãŠã‚Šã«ä½¿ç”¨ã—ã¾ã™ã€‚ピリオドã¯ä»˜ã‘ã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:257 msgid "UNIX®" msgstr "UNIX®" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:258 msgid "Correct. Do not use \"Unix\" or \"unix.\" UNIX® is a registered trademark of The Open Group." msgstr "é©åˆ‡ã§ã™ã€‚「Unixã€ã¾ãŸã¯ã€Œunixã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。UNIX® ã¯ã€The Open Group ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:261 msgid "Unset" msgstr "Unset" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:262 msgid "Don't use. Use Clear." msgstr "使用ã—ãªã„ã§ãã ã•ã„。「Clearã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:265 msgid "US" msgstr "US" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:269 msgid "User" msgstr "User" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:270 msgid "When referring to the reader, use \"you\" instead of \"user.\" For example, \"The user must...\" is incorrect. Use \"You must...\" instead. If referring to more than one user, calling the collection \"users\" is acceptable, such as \"Other users may wish to access your database.\"" msgstr "èª­ã¿æ‰‹ã‚’示ã™å ´åˆã¯ã€ã€Œuserã€ã§ã¯ãªã「youã€ã‚’使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒThe user must...ã€ã¯æ­£ã—ãã‚りã¾ã›ã‚“。代ã‚りã«ã€ŒYou must...ã€ã‚’使用ã—ã¦ãã ã•ã„。複数ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’示ã™å ´åˆã¯ã€ã€Œusersã€ã‚’使用ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒOther users may to access your database.ã€(ãã®ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚’望むå¯èƒ½æ€§ãŒã‚りã¾ã™) ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:273 msgid "Username" msgstr "Username" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:274 msgid "Correct. Do not use \"user name.\"" msgstr "é©åˆ‡ã§ã™ã€‚「user nameã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:277 msgid "View" msgstr "View" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:278 msgid "When using as a reference (\"View the documentation available online.\"), do not use View. Use \"Refer to\" instead." msgstr "å‚ç…§ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã€ãŸã¨ãˆã°ã€ŒView the documentation available online.ã€(オンラインã§ä½¿ç”¨å¯èƒ½ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„) ã¨ã™ã‚‹å ´åˆã¯ã€ã€Œviewã€ã‚’使用ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€Œrefer toã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:281 msgid "Within" msgstr "Within" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:282 msgid "Don't use to refer to a file that exists in a directory. Use \"In\"." msgstr "ディレクトリーã«ã‚るファイルをå‚ç…§ã™ã‚‹å ´åˆã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。「Inã€ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:285 msgid "World Wide Web" msgstr "World Wide Web" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:286 msgid "Correct. Capitalize each word. Abbreviate as \"WWW\" or \"Web.\"" msgstr "é©åˆ‡ã§ã™ã€‚å„å˜èªžã‚’大文字ã«ã—ã¾ã™ã€‚çœç•¥å½¢ã¯ã€ŒWWWã€ã¾ãŸã¯ã€ŒWebã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:289 msgid "Webpage" msgstr "Webpage" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:290 msgid "Correct. Do not use \"web page\" or \"Web page.\"" msgstr "é©åˆ‡ã§ã™ã€‚「web pageã€ã¾ãŸã¯ã€ŒWeb pageã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:293 msgid "Web server" msgstr "Web server" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:294 msgid "Correct. Do not use \"webserver\". For example, \"The Apache HTTP Server is the default Web server...\"" msgstr "é©åˆ‡ã§ã™ã€‚「webserverã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒThe Apache HTTP Server is the default Web server...ã€(Apache HTTP サーãƒãƒ¼ã¯ãƒ‡ãƒ•ォルト㮠Web サーãƒãƒ¼...) ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:297 msgid "Website" msgstr "Website" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:298 msgid "Correct. Do not use \"web site\" or \"Web site.\" For example, \"The Ansible website contains ...\"" msgstr "é©åˆ‡ã§ã™ã€‚「web siteã€ã¾ãŸã¯ã€ŒWeb siteã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒThe Ansible website contains ...ã€(Ansible web サイトã«...å«ã¾ã‚Œã¾ã™) ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:301 msgid "Who/whom" msgstr "Who/whom" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:302 msgid "Use the pronoun \"who\" as a subject. Use the pronoun \"whom\" as a direct object, an indirect object, or the object of a preposition. For example: Who owns this? To whom does this belong?" msgstr "主語ã«ã¯ã€ä»£å詞「whoã€ã‚’使用ã—ã¾ã™ã€‚直接目的語ã€é–“接目的語ã€ã¾ãŸã¯å‰ç½®è©žã®ç›®çš„語ã«ã¯ã€ä»£å詞ã®ç›®çš„æ ¼ã€Œwhomã€ã‚’使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒWho owns this?ã€(ã“れã¯èª°ãŒæ‰€æœ‰ã—ã¦ã„ã¾ã™ã‹?) ã‚„ã€ã€ŒTo whom does this belong?ã€(ã“れã¯èª°ã®ã‚‚ã®ã§ã™ã‹?) ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:305 msgid "Will" msgstr "Will" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:306 msgid "Do not use future tense unless it is absolutely necessary. For instance, do not use the sentence, \"The next section will describe the process in more detail.\" Instead, use the sentence, \"The next section describes the process in more detail.\"" msgstr "絶対ã«å¿…è¦ãªå ´åˆã‚’除ã„ã¦ã€æœªæ¥æ™‚制ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒThe next section will describe the process in more detail.ã€(次ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ãƒ—ロセスを詳ã—ã説明ã—ã¾ã™) ã§ã¯ãªãã€ã€ŒThe next section describes the process in more detail.ã€ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:309 msgid "Wish" msgstr "Wish" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:310 msgid "Use \"need\" instead of \"desire\" and \"wish.\" Use \"want\" when the reader's actions are optional (that is, they may not \"need\" something but may still \"want\" something)." msgstr "「desireã€ãŠã‚ˆã³ã€Œwishã€ã®ä»£ã‚りã«ã€Œneedã€ã‚’使用ã—ã¾ã™ã€‚èª­è€…ã®æ“作ãŒä»»æ„ã®å ´åˆ (ã¤ã¾ã‚Šã€ä½•ã‹ã‚’「必è¦ã€ã¨ã¯ã—ãªã„ã‹ã‚‚ã—れãªã„ã‘ã©ã€ãれã§ã‚‚何ã‹ã‚’「望んã§ã„ã‚‹ã€å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆ) ã¯ã€Œwantã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:313 msgid "x86" msgstr "x86" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:314 msgid "Correct. Do not capitalize the \"x.\"" msgstr "é©åˆ‡ã§ã™ã€‚「xã€ã¯å¤§æ–‡å­—ã«ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:317 msgid "x86_64" msgstr "x86_64" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:318 msgid "Do not use. Do not use \"Hammer\". Always use \"AMD64 and Intel® EM64T\" when referring to this architecture." msgstr "「Hammerã€ã‚’使用ã—ãªã„ã§ãã ã•ã„。ã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã‚’å‚ç…§ã™ã‚‹å ´åˆã¯å¿…ãšã€ŒAMD64 and Intel® EM64Tã€ã¨ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:321 msgid "You" msgstr "You" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:322 msgid "Correct. Do not use \"I,\" \"he,\" or \"she.\"" msgstr "é©åˆ‡ã§ã™ã€‚「Iã€ã€ã€Œheã€ã€ã€Œsheã€ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:325 msgid "You may" msgstr "You may" #: ../../rst/dev_guide/style_guide/spelling_word_choice.rst:326 msgid "Try to avoid using this. For example, \"you may\" can be eliminated from this sentence \"You may double-click on the desktop...\"" msgstr "ã“ã®è¡¨ç¾ã¯ä½¿ç”¨ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€ã€ŒYou may double-click on the desktop...ã€(ã‚ãªãŸã¯ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—上ã§ãƒ€ãƒ–ルクリックã™ã‚‹ã“ã¨ãŒã§ãã¾ã™...) ã¨ã„ã†æ„å‘³ã®æ–‡ã‹ã‚‰ã¯ã€Œyou mayã€ã‚’çœãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:3 msgid "Trademark Usage" msgstr "商標ã®ä½¿ç”¨æ–¹æ³•" #: ../../rst/dev_guide/style_guide/trademarks.rst:4 msgid "Why is it important to use the TM, SM, and ® for our registered marks?" msgstr "登録商標㫠TMã€SMã€ãŠã‚ˆã³ ® を使用ã™ã‚‹ã“ã¨ãŒé‡è¦ãªç†ç”±" #: ../../rst/dev_guide/style_guide/trademarks.rst:6 msgid "Before a trademark is registered with the United States Patent and Trademark Office it is appropriate to use the TM or SM symbol depending whether the product is for goods or services. It is important to use the TM or SM as it is notification to the public that Ansible claims rights to the mark even though it has not yet been registered." msgstr "商標ãŒç±³å›½ç‰¹è¨±å•†æ¨™å±€ã«ç™»éŒ²ã•れるå‰ã«ã€TM ã¾ãŸã¯ SM ã®ã©ã¡ã‚‰ã®è¨˜å·ã‚’使用ã™ã‚‹ã®ãŒé©åˆ‡ã‹ã¯ã€è£½å“ãŒå•†å“用ã‹ã‚µãƒ¼ãƒ“ス用ã‹ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚Ansible ãŒãã®ãƒžãƒ¼ã‚¯ã«å¯¾ã™ã‚‹æ¨©åˆ©ã‚’主張ã—ã¦ã„ã‚‹ã“ã¨ã‚’å…¬ã«é€šçŸ¥ã™ã‚‹ãŸã‚ã«ã€å•†æ¨™ãŒç™»éŒ²ã•れるå‰ã‹ã‚‰ TM ã¾ãŸã¯ SM を使用ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:8 msgid "Once the trademark is registered, it is appropriate to use the symbol in place of the TM or SM. The symbol designation must be used in conjunction with the trademark if Ansible is to fully protect its rights. If we don't protect these marks, we run the risk of losing them in the way of Aspirin or Trampoline or Escalator." msgstr "商標ãŒç™»éŒ²ã•れãŸã‚‰ã€TM ã¾ãŸã¯ SM ã®ä»£ã‚りã«ã‚·ãƒ³ãƒœãƒ«ã‚’使用ã™ã‚‹ã“ã¨ãŒé©åˆ‡ã§ã™ã€‚Ansible ãŒãã®æ¨©åˆ©ã‚’完全ã«ä¿è­·ã™ã‚‹å ´åˆã¯ã€ã‚·ãƒ³ãƒœãƒ«ã¨å•†æ¨™ã‚’組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒžãƒ¼ã‚¯ã‚’ä¿è­·ã—ãªã„ã¨ã€ã‚¢ã‚¹ãƒ”リンã€ãƒˆãƒ©ãƒ³ãƒãƒªãƒ³ã€ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚¿ãƒ¼ãªã©ã®ã‚ˆã†ã«ã€æ¨©åˆ©ã‚’失ã†å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:11 msgid "General Rules:" msgstr "一般的ãªãƒ«ãƒ¼ãƒ«:" #: ../../rst/dev_guide/style_guide/trademarks.rst:13 msgid "Trademarks should be used on 1st references on a page or within a section." msgstr "商標ã¯ã€ãƒšãƒ¼ã‚¸å†…ã¾ãŸã¯ã‚»ã‚¯ã‚·ãƒ§ãƒ³å†…ã§æœ€åˆã«å‚ç…§ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:15 msgid "Use Red Hat® Ansible® Automation Platform or Ansible®, on first reference when referring to products." msgstr "製å“ã‚’ç¤ºã™æœ€åˆã®å‚ç…§ã§ã¯ã€Red Hat® Ansible® Automation Platform or Ansible® ã¾ãŸã¯ Ansible® を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:17 msgid "Use \"Ansible\" alone as the company name, as in \"Ansible announced quarterly results,\" which is not marked." msgstr "「Ansibleã€ã‚’会社åã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã€ŒAnsible announced quarterly resultsã€(Ansible å››åŠæœŸæ±ºç®—発表) ã®ã‚ˆã†ã«ã€ãƒžãƒ¼ã‚¯ã‚’付ã‘ãšã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:19 msgid "Also add the trademark disclaimer. * When using Ansible trademarks in the body of written text, you should use the following credit line in a prominent place, usually a footnote." msgstr "商標ã®å…責事項も追加ã—ã¾ã™ã€‚* æ–‡ç« ã®æœ¬æ–‡ã« Ansible 商標を使用ã™ã‚‹å ´åˆã¯ã€ç›®ç«‹ã¤å ´æ‰€ã€é€šå¸¸ã¯è„šæ³¨ã«æ¬¡ã®ã‚ˆã†ãªè¡Œã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:22 msgid "For Registered Trademarks: - [Name of Trademark] is a registered trademark of Red Hat, Inc. in the United States and other countries." msgstr "登録商標ã®å ´åˆ - [Name of Trademark] is a registered trademark of Red Hat, Inc. in the United States and other countries." #: ../../rst/dev_guide/style_guide/trademarks.rst:25 msgid "For Unregistered Trademarks (TMs/SMs): - [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries." msgstr "éžç™»éŒ²å•†æ¨™ã®å ´åˆ (TM/SM): - [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries." #: ../../rst/dev_guide/style_guide/trademarks.rst:28 msgid "For registered and unregistered trademarks: - [Name of Trademark] is a registered trademark and [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries." msgstr "登録商標ãŠã‚ˆã³æœªç™»éŒ²å•†æ¨™ã®å ´åˆ: [Name of Trademark] is a registered trademark and [Name of Trademark] is a trademark of Red Hat, Inc. in the United States and other countries." #: ../../rst/dev_guide/style_guide/trademarks.rst:32 msgid "Guidelines for the proper use of trademarks:" msgstr "商標をé©åˆ‡ãªä½¿ç”¨ã™ã‚‹ãŸã‚ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³:" #: ../../rst/dev_guide/style_guide/trademarks.rst:34 msgid "Always distinguish trademarks from surround text with at least initial capital letters or in all capital letters." msgstr "商標をã€å‘¨å›²ã®ãƒ†ã‚­ã‚¹ãƒˆã¨åŒºåˆ¥ã™ã‚‹ãŸã‚ã«ã€å°‘ãªãã¨ã‚‚頭文字を大文字ã«ã™ã‚‹ã‹ã€ã™ã¹ã¦ã®æ–‡å­—を大文字ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:36 msgid "Always use proper trademark form and spelling." msgstr "常ã«é©åˆ‡ãªå•†æ¨™ã®å½¢å¼ã¨ã‚¹ãƒšãƒ«ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:38 msgid "Never use a trademark as a noun. Always use a trademark as an adjective modifying the noun." msgstr "商標ã¯ã€å‹•詞ã¨ã—ã¦ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。商標ã¯ã€å¸¸ã«å詞を修飾ã™ã‚‹å½¢å®¹è©žã¨ã—ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:40 msgid "Correct: Red Hat® Ansible® Automation Platform system performance is incredible." msgstr "æ­£ã—ã„使用方法: 「Red Hat® Ansible® Automation Platform system performance is incredible. (Red Hat® Ansible® Automation Platform システムã®ãƒ‘フォーマンスã¯é©šç•°çš„ã§ã™)ã€" #: ../../rst/dev_guide/style_guide/trademarks.rst:43 msgid "Incorrect: Ansible's performance is incredible." msgstr "誤ã£ãŸä½¿ç”¨æ–¹æ³•: 「Ansible's performance is incredible. (Ansible ã®ãƒ‘フォーマンスã¯è„…å¨çš„ã§ã™)ã€" #: ../../rst/dev_guide/style_guide/trademarks.rst:46 msgid "Never use a trademark as a verb. Trademarks are products or services, never actions." msgstr "商標ã¯ã€å‹•詞ã¨ã—ã¦ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。商標ã¯è£½å“ã¾ãŸã¯ã‚µãƒ¼ãƒ“スã§ã‚りã€å‹•作ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/trademarks.rst:48 msgid "Correct: \"Orchestrate your entire network using Red Hat® Ansible® Automation Platform.\"" msgstr "æ­£ã—ã„使用方法: 「Orchestrate your entire network using Red Hat® Ansible® Automation Platform. (Red Hat® Ansible® Automation Platform を使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å…¨ä½“を調整ã—ã¾ã™)ã€" #: ../../rst/dev_guide/style_guide/trademarks.rst:51 msgid "Incorrect: \"Ansible your entire network.\"" msgstr "誤ã£ãŸä½¿ç”¨æ–¹æ³•: Ansible your entire network." #: ../../rst/dev_guide/style_guide/trademarks.rst:54 msgid "Never modify a trademark to a plural form. Instead, change the generic word from the singular to the plural." msgstr "商標を複数形ã«å¤‰æ›´ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€ä¸€èˆ¬çš„ãªå˜èªžã‚’å˜æ•°å½¢ã‹ã‚‰è¤‡æ•°å½¢ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:56 msgid "Correct: \"Corporate demand for Red Hat® Ansible® Automation Platform software is surging.\"" msgstr "æ­£ã—ã„使用方法: 「Corporate demand for Red Hat® Ansible® Automation Platform software is surging. (Red Hat® Ansible® Automation Platform ソフトウェアã«å¯¾ã™ã‚‹ä¼æ¥­ã®éœ€è¦ãŒæ€¥å¢—ã—ã¦ã„ã¾ã™)ã€" #: ../../rst/dev_guide/style_guide/trademarks.rst:59 msgid "Incorrect: \"Corporate demand for Ansible is surging.\"" msgstr "誤ã£ãŸä½¿ç”¨æ–¹æ³•: Corporate demand for Ansible is surging." #: ../../rst/dev_guide/style_guide/trademarks.rst:62 msgid "Never modify a trademark from its possessive form, or make a trademark possessive. Always use it in the form it has been registered." msgstr "商標を所有格ã‹ã‚‰å¤‰æ›´ã—ãŸã‚Šã€å•†æ¨™ã‚’所有格ã«ã—ãŸã‚Šã—ãªã„ã§ãã ã•ã„。必ãšç™»éŒ²ã—ãŸå½¢ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:64 msgid "Never translate a trademark into another language." msgstr "商標を別ã®è¨€èªžã«ç¿»è¨³ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:66 msgid "Never use trademarks to coin new words or names." msgstr "商標を使用ã—ã¦æ–°ã—ã„å˜èªžã‚„åå‰ã‚’作æˆã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:68 msgid "Never use trademarks to create a play on words." msgstr "商標を使用ã—ã¦è¨€è‘‰éŠã³ã‚’作æˆã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:70 msgid "Never alter a trademark in any way including through unapproved fonts or visual identifiers." msgstr "未承èªã®ãƒ•ォントや視覚的ãªè­˜åˆ¥å­ãªã©ã€ã„ã‹ãªã‚‹æ–¹æ³•ã§ã‚‚商標を変更ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:72 msgid "Never abbreviate or use any Ansible trademarks as an acronym." msgstr "Ansible ã®å•†æ¨™ã‚’çœç•¥ã—ãŸã‚Šã€é ­æ–‡å­—ã ã‘使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/trademarks.rst:75 msgid "The importance of Ansible trademarks" msgstr "Ansible 商標ã®é‡è¦æ€§" #: ../../rst/dev_guide/style_guide/trademarks.rst:77 msgid "The Ansible trademark and the \"A\" logo in a shaded circle are our most valuable assets. The value of these trademarks encompass the Ansible Brand. Effective trademark use is more than just a name, it defines the level of quality the customer will receive and it ties a product or service to a corporate image. A trademark may serve as the basis for many of our everyday decisions and choices. The Ansible Brand is about how we treat customers and each other. In order to continue to build a stronger more valuable Brand we must use it in a clear and consistent manner." msgstr "Ansible ã®å•†æ¨™ã¨ã€æ–œç·šã§å›²ã¾ã‚ŒãŸã€ŒAã€ã®ãƒ­ã‚´ã¯ã€å½“ç¤¾ã®æœ€ã‚‚価値ã®ã‚る資産ã§ã™ã€‚ã“れらã®å•†æ¨™ã®ä¾¡å€¤ã¯ã€Ansible ブランドを包括ã™ã‚‹ã‚‚ã®ã§ã™ã€‚効果的ãªå•†æ¨™ã®ä½¿ç”¨ã¯ã€å˜ãªã‚‹åå‰ã§ã¯ãªãã€ãŠå®¢æ§˜ãŒå—ã‘å–ã‚‹å“質レベルを定義ã—ã€è£½å“ã‚„ã‚µãƒ¼ãƒ“ã‚¹ã‚’ä¼æ¥­ã‚¤ãƒ¡ãƒ¼ã‚¸ã«çµã³ã¤ã‘ã‚‹ã‚‚ã®ã§ã™ã€‚商標ã¯ã€ç§ãŸã¡ã®æ—¥å¸¸çš„ãªæ„æ€æ±ºå®šã‚„é¸æŠžã®å¤šãã®åŸºç¤Žã¨ãªã‚‹ã‚‚ã®ã§ã™ã€‚Ansible ブランドã¯ã€ç§ãŸã¡ãŒãŠå®¢æ§˜ã¨äº’ã„ã«ã©ã®ã‚ˆã†ã«æŽ¥ã™ã‚‹ã‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚より強力ã§ä¾¡å€¤ã®ã‚るブランドを構築ã—ç¶šã‘ã‚‹ãŸã‚ã«ã¯ã€æ˜Žç¢ºã§ä¸€è²«ã—ãŸæ–¹æ³•ã§ä½¿ç”¨ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/style_guide/trademarks.rst:79 msgid "The mark consists of the letter \"A\" in a shaded circle. As of 5/11/15, this was a pending trademark (registration in process)." msgstr "ã“ã®ãƒžãƒ¼ã‚¯ã¯ã€å½±ä»˜ãã®å††ã§å›²ã¾ã‚ŒãŸæ–‡å­—「Aã€ã§æ§‹æˆã•れã¦ã„ã¾ã™ã€‚2015 å¹´ 5 月 11 æ—¥ã®æ™‚点ã§ã€ã“ã®å•†æ¨™ã¯ä¿‚属中 (登録手続ã中) ã§ã—ãŸã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:82 msgid "Common Ansible Trademarks" msgstr "一般的㪠Ansible ã®å•†æ¨™" #: ../../rst/dev_guide/style_guide/trademarks.rst:83 msgid "Ansible®" msgstr "Ansible®" #: ../../rst/dev_guide/style_guide/trademarks.rst:86 msgid "Other Common Trademarks and Resource Sites:" msgstr "ãã®ä»–ã®ä¸€èˆ¬çš„ãªå•†æ¨™ãŠã‚ˆã³ãƒªã‚½ãƒ¼ã‚¹ã®ã‚µã‚¤ãƒˆ:" #: ../../rst/dev_guide/style_guide/trademarks.rst:87 msgid "Linux is a registered trademark of Linus Torvalds." msgstr "Linux ã¯ã€Linus Torvalds ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:88 msgid "UNIX® is a registered trademark of The Open Group." msgstr "UNIX® ã¯ã€The Open Group ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/trademarks.rst:89 msgid "Microsoft, Windows, Vista, XP, and NT are registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/en-us.aspx" msgstr "Microsoft, Windows, Vista, XP, and NT are registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/en-us.aspx" #: ../../rst/dev_guide/style_guide/trademarks.rst:90 msgid "Apple, Mac, Mac OS, Macintosh, Pages and TrueType are either registered trademarks or trademarks of Apple Computer, Inc. in the United States and/or other countries. https://www.apple.com/legal/intellectual-property/trademark/appletmlist.html" msgstr "Apple, Mac, Mac OS, Macintosh, Pages and TrueType are either registered trademarks or trademarks of Apple Computer, Inc. in the United States and/or other countries. https://www.apple.com/legal/intellectual-property/trademark/appletmlist.html" #: ../../rst/dev_guide/style_guide/trademarks.rst:91 msgid "Adobe, Acrobat, GoLive, InDesign, Illustrator, PostScript , PhotoShop and the OpenType logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. https://www.adobe.com/legal/permissions/trademarks.html" msgstr "Adobe, Acrobat, GoLive, InDesign, Illustrator, PostScript , PhotoShop and the OpenType logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. https://www.adobe.com/legal/permissions/trademarks.html" #: ../../rst/dev_guide/style_guide/trademarks.rst:92 msgid "Macromedia and Macromedia Flash are trademarks of Macromedia, Inc. https://www.adobe.com/legal/permissions/trademarks.html" msgstr "Macromedia and Macromedia Flash are trademarks of Macromedia, Inc. https://www.adobe.com/legal/permissions/trademarks.html" #: ../../rst/dev_guide/style_guide/trademarks.rst:93 msgid "IBM is a registered trademark of International Business Machines Corporation. https://www.ibm.com/legal/us/en/copytrade.shtml" msgstr "IBM is a registered trademark of International Business Machines Corporation. https://www.ibm.com/legal/us/en/copytrade.shtml" #: ../../rst/dev_guide/style_guide/trademarks.rst:94 msgid "Celeron, Celeron Inside, Centrino, Centrino logo, Core Inside, Intel Core, Intel Inside, Intel Inside logo, Itanium, Itanium Inside, Pentium, Pentium Inside,VTune, Xeon, and Xeon Inside are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. https://www.intel.com/content/www/us/en/legal/trademarks.html" msgstr "Celeron, Celeron Inside, Centrino, Centrino logo, Core Inside, Intel Core, Intel Inside, Intel Inside logo, Itanium, Itanium Inside, Pentium, Pentium Inside,VTune, Xeon, and Xeon Inside are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. https://www.intel.com/content/www/us/en/legal/trademarks.html" #: ../../rst/dev_guide/style_guide/voice_style.rst:3 msgid "Voice Style" msgstr "æ…‹ã®ã‚¹ã‚¿ã‚¤ãƒ«" #: ../../rst/dev_guide/style_guide/voice_style.rst:4 msgid "The essence of the Ansible writing style is short sentences that flow naturally together. Mix up sentence structures. Vary sentence subjects. Address the reader directly. Ask a question. And when the reader adjusts to the pace of shorter sentences, write a longer one." msgstr "Ansible ライティングスタイルã®ç‰¹é•·ã¯ã€è‡ªç„¶ã«ä¸€ç·’ã«æµã‚Œã‚‹çŸ­ã„æ–‡ã§ã™ã€‚æ–‡æ³•æ§‹é€ ã¯æ··åœ¨ã•ã›ã¾ã™ã€‚æ–‡ã®ä¸»é¡Œã‚’変化ã•ã›ã¾ã™ã€‚読者ã«ç›´æŽ¥è©±ã—ã‹ã‘ã¾ã™ã€‚質å•ã—ã¾ã™ã€‚読者ãŒçŸ­ã„文章ã®ãƒšãƒ¼ã‚¹ã«é †å¿œã—ãŸã‚‰ã€é•·ã„文章を書ã„ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/voice_style.rst:6 msgid "Write how real people speak..." msgstr "実際ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè©±ã™ã‚ˆã†ã«è¨˜è¿°ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:7 msgid "...but try to avoid slang and colloquialisms that might not translate well into other languages." msgstr "ãŸã ã—ã€ä»–言語ã«é©åˆ‡ã«ç¿»è¨³ã§ããªã„å¯èƒ½æ€§ã®ã‚る俗語やå£èªžè¡¨ç¾ã¯é¿ã‘るよã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/voice_style.rst:8 msgid "Say big things with small words." msgstr "å°ã•ãªã“ã¨ã°ã§å¤§ããªã“ã¨ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:9 msgid "Be direct. Tell the reader exactly what you want them to do." msgstr "直接的ãªè¡¨ç¾ã‚’使用ã—ã¦ãã ã•ã„ã€‚èª­ã¿æ‰‹ãŒå®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚‹å†…å®¹ã‚’æ­£ç¢ºã«æŒ‡ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:10 msgid "Be honest." msgstr "誠実ã«è¡¨ç¾ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:11 msgid "Short sentences show confidence." msgstr "çŸ­ã„æ–‡ç« ã¯è‡ªä¿¡ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:12 msgid "Grammar rules are meant to be bent, but only if the reader knows you are doing this." msgstr "文法è¦å‰‡ã¯ã€ãれã¯èª­è€…ãŒä½•を説明ã—ã¦ã„ã‚‹ã‹ã‚’ç†è§£ã—ã¦ã„ã‚‹å ´åˆã«é™ã‚Šçµ„ã¿è¾¼ã¾ã‚Œã‚‹ã“ã¨ãŒæ„図ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:13 msgid "Choose words with fewer syllables for faster reading and better understanding." msgstr "読ã¿ã‚„ã™ãã€ç†è§£ã‚’æ·±ã‚ã‚‹ãŸã‚ã«ã€éŸ³ç¯€ãŒå°‘ãªã„å˜èªžã‚’é¸ã‚“ã§ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/voice_style.rst:14 msgid "Think of copy as one-on-one conversations rather than as a speech. It's more difficult to ignore someone who is speaking to you directly." msgstr "コピーã¯ã€è´è¡†ã«å¯¾ã™ã‚‹ã‚¹ãƒ”ーãƒã§ã¯ãªãã€1 対 1 ã®å¯¾è©±ã¨è€ƒãˆã¦ãã ã•ã„。直接話ã—ã‹ã‘ã¦ã„る人を無視ã™ã‚‹ã®ã¯ã‚ˆã‚Šå›°é›£ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:15 msgid "When possible, start task-oriented sentences (those that direct a user to do something) with action words. For example: Find software... Contact support... Install the media.... and so forth." msgstr "å¯èƒ½ãªå ´åˆã¯ã€ã‚¿ã‚¹ã‚¯æŒ‡å‘ã®æ–‡ç«  (ユーザーã«ã‚ˆã‚‹ä½œæ¥­ã‚’指示ã™ã‚‹é …ç›®) ã¯ã€å‹•作を示ã™ç”¨èªžã§é–‹å§‹ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒFind software...ã€ã€ã€ŒContact support...ã€ã€ã€ŒInstall the media...ã€ãªã©ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/voice_style.rst:18 msgid "Active Voice" msgstr "能動態" #: ../../rst/dev_guide/style_guide/voice_style.rst:19 msgid "Use the active voice (\"Start Linuxconf by typing...\") rather than passive (\"Linuxconf can be started by typing...\") whenever possible. Active voice makes for more lively, interesting reading. Also avoid future tense (or using the term \"will\") whenever possible For example, future tense (\"The screen will display...\") does not read as well as an active voice (\"The screen displays\"). Remember, the users you are writing for most often refer to the documentation while they are using the system, not after or in advance of using the system." msgstr "å¯èƒ½ãªé™ã‚Šã€å—å‹•æ…‹ (「Linuxconf can be started by typing...ã€) ã§ã¯ãªãã€èƒ½å‹•æ…‹ (「Start Linuxconf by typing...ã€) を使用ã—ã¦ãã ã•ã„ã€‚èƒ½å‹•æ…‹ã®æ–¹ãŒã‚ˆã‚Šç”Ÿã生ãã¨ã—ãŸã€æ³¨æ„を引ã付ã‘る文章ã«ãªã‚Šã¾ã™ã€‚ã¾ãŸã€æœªæ¥å½¢ (ã¾ãŸã¯ã€Œwillã€ã®ä½¿ç”¨) ã¯å¯èƒ½ãªé™ã‚Šä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€æœªæ¥å½¢ (「The screen will display...ã€) ã¨èƒ½å‹•æ…‹ (「The screen displaysã€) ã§ã¯ã€ãƒ‹ãƒ¥ã‚¢ãƒ³ã‚¹ãŒç•°ãªã‚Šã¾ã™ã€‚読者ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®ä½¿ç”¨å‰ã¾ãŸã¯ä½¿ç”¨å¾Œã§ã¯ãªãã€ã‚·ã‚¹ãƒ†ãƒ ã®ä½¿ç”¨ä¸­ã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã»ã¨ã‚“ã©ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/why_use.rst:4 msgid "Why Use a Style Guide?" msgstr "スタイルガイドを使用ã™ã‚‹ç†ç”±" #: ../../rst/dev_guide/style_guide/why_use.rst:6 msgid "Style guides are important because they ensure consistency in the content, look, and feel of a book or a website." msgstr "スタイルガイドã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¾ãŸã¯ Web サイトã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŠã‚ˆã³ãƒ«ãƒƒã‚¯ã‚¢ãƒ³ãƒ‰ãƒ•ィールã®ä¸€è²«æ€§ã‚’確ä¿ã™ã‚‹ãŸã‚ã«é‡è¦ã§ã™ã€‚" #: ../../rst/dev_guide/style_guide/why_use.rst:8 msgid "Remember, a style guide is only useful if it is used, updated, and enforced. Style Guides are useful for engineering-related documentation, sales and marketing materials, support docs, community contributions, and more." msgstr "スタイルガイドã¯ã€ä½¿ç”¨ã€æ›´æ–°ã€ãŠã‚ˆã³å®Ÿæ–½ã•れる場åˆã«ã®ã¿å½¹ç«‹ã¤ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。スタイルガイドã¯ã€ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãƒªãƒ³ã‚°é–¢é€£ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€å–¶æ¥­ãŠã‚ˆã³ãƒžãƒ¼ã‚±ãƒ†ã‚£ãƒ³ã‚°ç”¨è³‡æ–™ã€ã‚µãƒãƒ¼ãƒˆãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã¸ã®è²¢çŒ®ãªã©ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/style_guide/why_use.rst:10 msgid "As changes are made to the overall Ansible site design, be sure to update this style guide with those changes. Or, should other resources listed below have major revisions, consider including company information here for ease of reference." msgstr "Ansible サイトã®ãƒ‡ã‚¶ã‚¤ãƒ³å…¨ä½“ã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸå ´åˆã¯ã€ãã®å¤‰æ›´ã«åˆã‚ã›ã¦æœ¬ã‚¹ã‚¿ã‚¤ãƒ«ã‚¬ã‚¤ãƒ‰ã‚‚æ›´æ–°ã—ã¦ãã ã•ã„。ã¾ãŸã¯ã€ä»¥ä¸‹ã«è¨˜è¼‰ã•れã¦ã„ã‚‹ãã®ä»–ã®è³‡æ–™ã«å¤§å¹…ãªæ”¹è¨‚ãŒã‚ã‚‹å ´åˆã¯ã€å‚ç…§ã—ã‚„ã™ã„よã†ã«ã“ã“ã«ä¼šç¤¾æƒ…報をå«ã‚ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/style_guide/why_use.rst:12 msgid "This style guide incorporates current Ansible resources and information so that overall site and documentation consistency can be met." msgstr "ã“ã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚¬ã‚¤ãƒ‰ã«ã¯ã€ç¾åœ¨ã® Ansible ãƒªã‚½ãƒ¼ã‚¹ã¨æƒ…å ±ãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€ã‚µã‚¤ãƒˆã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå…¨ä½“ã®ä¸€è²«æ€§ã‚’ä¿ã¤ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:5 #: ../../rst/dev_guide/testing_running_locally.rst:7 msgid "Testing Ansible" msgstr "Ansible ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing.rst:12 msgid "Why test your Ansible contributions?" msgstr "Ansible ã¸ã®è²¢çŒ®ã‚’テストã™ã‚‹ç†ç”±" #: ../../rst/dev_guide/testing.rst:14 msgid "If you're a developer, one of the most valuable things you can do is to look at GitHub issues and help fix bugs, since bug-fixing is almost always prioritized over feature development. Even for non-developers, helping to test pull requests for bug fixes and features is still immensely valuable." msgstr "開発者ã«ã¨ã£ã¦ã€æœ€ã‚‚価値ã®ã‚ã‚‹ã“ã¨ã® 1 ã¤ãŒã€GitHub ã®å•題を確èªã—ã€ãƒã‚°ä¿®æ­£ã‚’手ä¼ã†ã“ã¨ã§ã™ã€‚ãƒã‚°ä¿®æ­£ã¯ã€ã»ã¨ã‚“ã©å¸¸ã«ã€æ©Ÿèƒ½é–‹ç™ºã‚ˆã‚Šã‚‚優先ã•れるãŸã‚ã§ã™ã€‚開発者ã§ã¯ãªãã¦ã‚‚ã€ãƒã‚°ã®ä¿®æ­£ã‚„機能ã®ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ã‚¹ãƒˆã‚’手ä¼ã†ã“ã¨ã¯éžå¸¸ã«ä¾¡å€¤ã®ã‚ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:16 msgid "Ansible users who understand how to write playbooks and roles should be able to test their work. GitHub pull requests will automatically run a variety of tests (for example, Azure Pipelines) that show bugs in action. However, contributors must also test their work outside of the automated GitHub checks and show evidence of these tests in the PR to ensure that their work will be more likely to be reviewed and merged." msgstr "Ansible ユーザーã¯ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã®ä½œæˆæ–¹æ³•ã‚’ç†è§£ã—ã¦ã„れã°ã€è‡ªèº«ãŒä½œæˆã—ãŸä½œæ¥­ã‚’テストã§ãã‚‹ã¯ãšã§ã™ã€‚GitHub ãƒ—ãƒ«è¦æ±‚ã¯ã€ãƒã‚°ã®å‹•作を示ã™ã•ã¾ã–ã¾ãªãƒ†ã‚¹ãƒˆ (Azure Pipeline ãªã©) を自動的ã«å®Ÿè¡Œã—ã¾ã™ã€‚ãŸã ã—ã€è²¢çŒ®è€…ã¯ã€è‡ªå‹•化ã•れ㟠GitHub ãƒã‚§ãƒƒã‚¯ä»¥å¤–ã§ã‚‚自身ã®ä½œæ¥­ã‚’テストã—ã€ãã®è¨¼æ‹ ã‚’ PR ã§ç¤ºã™ã¨ã€ãã®ä½œæ¥­ãŒãƒ¬ãƒ“ューã•れã¦ãƒžãƒ¼ã‚¸ã•れるå¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:18 msgid "Read on to learn how Ansible is tested, how to test your contributions locally, and how to extend testing capabilities." msgstr "Ansible ã®ãƒ†ã‚¹ãƒˆæ–¹æ³•ã€è²¢çŒ®ã‚’ローカルã§ãƒ†ã‚¹ãƒˆã™ã‚‹æ–¹æ³•ã€ãŠã‚ˆã³ãƒ†ã‚¹ãƒˆæ©Ÿèƒ½ã‚’æ‹¡å¼µã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:20 msgid "If you want to learn about testing collections, read :ref:`testing_collections`" msgstr "コレクションã®ãƒ†ã‚¹ãƒˆã‚’確èªã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`testing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst:25 msgid "Types of tests" msgstr "テストã®ç¨®é¡ž" #: ../../rst/dev_guide/testing.rst:27 msgid "At a high level we have the following classifications of tests:" msgstr "テストã¯ã€å¤§ãã分ã‘ã¦ä»¥ä¸‹ã®ã‚ˆã†ã«åˆ†é¡žã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst #: ../../rst/dev_guide/testing/sanity/compile.rst:2 msgid "compile" msgstr "コンパイル" #: ../../rst/dev_guide/testing.rst:30 msgid ":ref:`testing_compile`" msgstr ":ref:`testing_compile`" #: ../../rst/dev_guide/testing.rst:31 msgid "Test python code against a variety of Python versions." msgstr "ã•ã¾ã–ã¾ãª Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—㦠python コードをテストã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst msgid "sanity" msgstr "å¥å…¨æ€§" #: ../../rst/dev_guide/testing.rst:34 msgid "Sanity tests are made up of scripts and tools used to perform static code analysis." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ã€é™çš„コード分æžã®å®Ÿè¡Œã«ä½¿ç”¨ã•れるスクリプトãŠã‚ˆã³ãƒ„ãƒ¼ãƒ«ã§æ§‹æˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:35 msgid "The primary purpose of these tests is to enforce Ansible coding standards and requirements." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã®ä¸»ãªç›®çš„ã¯ã€Ansible コーディングã®ä»•様ãŠã‚ˆã³è¦ä»¶ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst msgid "integration" msgstr "çµ±åˆ" #: ../../rst/dev_guide/testing.rst:38 msgid "Functional tests of modules and Ansible core functionality." msgstr "モジュールãŠã‚ˆã³ Ansible ã‚³ã‚¢æ©Ÿèƒ½ã®æ©Ÿèƒ½ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing.rst msgid "units" msgstr "ユニット" #: ../../rst/dev_guide/testing.rst:40 #: ../../rst/dev_guide/testing_units_modules.rst:541 msgid ":ref:`testing_units`" msgstr ":ref:`testing_units`" #: ../../rst/dev_guide/testing.rst:41 msgid "Tests directly against individual parts of the code base." msgstr "コードベースã®å€‹ã€…ã®éƒ¨åˆ†ã«å¯¾ã—ã¦ç›´æŽ¥ãƒ†ã‚¹ãƒˆã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:44 msgid "If you're a developer, one of the most valuable things you can do is look at the GitHub issues list and help fix bugs. We almost always prioritize bug fixing over feature development." msgstr "開発者ã«ã¨ã£ã¦ã€æœ€ã‚‚価値ã®ã‚ã‚‹ã“ã¨ã® 1 ã¤ãŒã€GitHub ã®å•題を確èªã—ã€ãƒã‚°ä¿®æ­£ã‚’手ä¼ã†ã“ã¨ã§ã™ã€‚ãƒã‚°ä¿®æ­£ã¯ã€ã»ã¨ã‚“ã©å¸¸ã«ã€æ©Ÿèƒ½é–‹ç™ºã‚ˆã‚Šã‚‚優先ã•れるãŸã‚ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:48 msgid "Even for non developers, helping to test pull requests for bug fixes and features is still immensely valuable. Ansible users who understand writing playbooks and roles should be able to add integration tests and so GitHub pull requests with integration tests that show bugs in action will also be a great way to help." msgstr "開発者ã§ã¯ãªãã¦ã‚‚ã€ãƒã‚°ã®ä¿®æ­£ã‚„機能ã®ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ã‚¹ãƒˆã‚’手ä¼ã†ã“ã¨ã¯éžå¸¸ã«ä¾¡å€¤ã®ã‚ã‚‹ã“ã¨ã§ã™ã€‚Ansible ユーザー㌠Playbook やロールã®è¨˜è¿°æ–¹æ³•を熟知ã—ã¦ã„れã°çµ±åˆãƒ†ã‚¹ãƒˆã‚’追加ã§ãã‚‹ãŸã‚ã€ãƒã‚°ãŒå®Ÿéš›ã«å‹•ã‹ã—ã¦ã„る様å­ã‚’示ã™çµ±åˆãƒ†ã‚¹ãƒˆãŒä»˜ã„㟠GitHub ãƒ—ãƒ«è¦æ±‚ã‚‚ã€å¤§ããªåŠ©ã‘ã«ãªã‚‹ã§ã—ょã†ã€‚" #: ../../rst/dev_guide/testing.rst:55 msgid "Testing within GitHub & Azure Pipelines" msgstr "GitHub ãŠã‚ˆã³ Azure Pipeline ã§ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing.rst:59 msgid "Organization" msgstr "組織" #: ../../rst/dev_guide/testing.rst:61 msgid "When Pull Requests (PRs) are created they are tested using Azure Pipelines, a Continuous Integration (CI) tool. Results are shown at the end of every PR." msgstr "ãƒ—ãƒ«è¦æ±‚ (PR: Pull Requests) ãŒä½œæˆã•れるã¨ã€ç¶™ç¶šçš„çµ±åˆ (CI) ツールã§ã‚ã‚‹ Azure Pipeline を使用ã—ã¦ãƒ†ã‚¹ãƒˆãŒè¡Œã‚れã¾ã™ã€‚çµæžœã¯ã™ã¹ã¦ã® PR ã®æœ€å¾Œã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:63 msgid "When Azure Pipelines detects an error and it can be linked back to a file that has been modified in the PR then the relevant lines will be added as a GitHub comment. For example::" msgstr "Azure Pipeline ãŒã‚¨ãƒ©ãƒ¼ã‚’検出ã—ã€ãれ㌠PR ã§å¤‰æ›´ã•れãŸãƒ•ァイルã«ãƒªãƒ³ã‚¯ã•れるã¨ã€é–¢é€£ã™ã‚‹è¡ŒãŒ GitHub ã®ã‚³ãƒ¡ãƒ³ãƒˆã¨ã—ã¦è¿½åŠ ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:72 msgid "From the above example we can see that ``--test pep8`` and ``--test validate-modules`` have identified an issue. The commands given allow you to run the same tests locally to ensure you've fixed all issues without having to push your changes to GitHub and wait for Azure Pipelines, for example:" msgstr "上記ã®ä¾‹ã‹ã‚‰ã€``--test pep8`` ãŠã‚ˆã³ ``--test validate-modules`` ãŒå•題を特定ã—ãŸã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚指定ã•れãŸã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€åŒã˜ãƒ†ã‚¹ãƒˆã‚’ローカルã§å®Ÿè¡Œã—ã¦ã€å¤‰æ›´ã‚’ GitHub ã«ãƒ—ッシュã—㦠Azure Pipeline ã‚’å¾…ã¤ã“ã¨ãªãã€ã™ã¹ã¦ã®å•題を修正ã—ãŸã“ã¨ã‚’確èªã§ãã¾ã™ã€‚次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:74 msgid "If you haven't already got Ansible available, use the local checkout by running::" msgstr "Ansible ãŒã¾ã åˆ©ç”¨ã§ãるよã†ã«ãªã£ã¦ã„ãªã„å ´åˆã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’実行ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst:78 msgid "Then run the tests detailed in the GitHub comment::" msgstr "次ã«ã€GitHub コメントã§èª¬æ˜Žã™ã‚‹ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:83 msgid "If there isn't a GitHub comment stating what's failed you can inspect the results by clicking on the \"Details\" button under the \"checks have failed\" message at the end of the PR." msgstr "GitHub ã®ã‚³ãƒ¡ãƒ³ãƒˆã«ä½•ãŒå¤±æ•—ã—ãŸã‹ãŒæ›¸ã‹ã‚Œã¦ã„ãªã„å ´åˆã¯ã€PR ã®æœ«å°¾ã«ã‚る「checks have failedã€ã¨ã„ã†ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ä¸‹ã«ã‚る「Detailsã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦çµæžœã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:86 msgid "Rerunning a failing CI job" msgstr "失敗ã—㟠CI ジョブã®å†å®Ÿè¡Œ" #: ../../rst/dev_guide/testing.rst:88 msgid "Occasionally you may find your PR fails due to a reason unrelated to your change. This could happen for several reasons, including:" msgstr "時折ã€å¤‰æ›´ã¨ã¯é–¢ä¿‚ã®ãªã„ç†ç”±ã§ PR ãŒå¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªç†ç”±ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:90 msgid "a temporary issue accessing an external resource, such as a yum or git repo" msgstr "yum ã‚„ git リãƒã‚¸ãƒˆãƒªãƒ¼ãªã©ã®å¤–部リソースã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã«ä¸€æ™‚çš„ã«å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã€‚" #: ../../rst/dev_guide/testing.rst:91 msgid "a timeout creating a virtual machine to run the tests on" msgstr "テストを実行ã™ã‚‹ãŸã‚ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚" #: ../../rst/dev_guide/testing.rst:93 msgid "If either of these issues appear to be the case, you can rerun the Azure Pipelines test by:" msgstr "ã“れらã®å•題ã®ã„ãšã‚Œã‹ãŒã‚±ãƒ¼ã‚¹ã¨ã—ã¦è¡¨ç¤ºã•れる場åˆã¯ã€ä»¥ä¸‹ã‚’実行ã—㦠Azure Pipelines テストをå†å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:95 msgid "adding a comment with ``/rebuild`` (full rebuild) or ``/rebuild_failed`` (rebuild only failed CI nodes) to the PR" msgstr "``/rebuild`` (完全ãªå†æ§‹ç¯‰) ã¾ãŸã¯ ``/rebuild_failed`` (構築ã«å¤±æ•—ã—㟠CI ノードã®ã¿ã®å†æ§‹ç¯‰) ã§ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã™ã‚‹" #: ../../rst/dev_guide/testing.rst:96 msgid "closing and re-opening the PR (full rebuild)" msgstr "PR ã‚’é–‰ã˜ã¦å†åº¦é–‹ã (完全ãªå†æ§‹ç¯‰)" #: ../../rst/dev_guide/testing.rst:97 msgid "making another change to the PR and pushing to GitHub" msgstr "PR ã«ä½•らã‹ã®å¤‰æ›´ã‚’加ãˆã¦ GitHub ã«ãƒ—ッシュã™ã‚‹" #: ../../rst/dev_guide/testing.rst:99 msgid "If the issue persists, please contact us in the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "ãれã§ã‚‚å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€``#ansible-devel`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„(ansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)。" #: ../../rst/dev_guide/testing.rst:103 msgid "How to test a PR" msgstr "PR をテストã™ã‚‹æ–¹æ³•" #: ../../rst/dev_guide/testing.rst:105 msgid "Ideally, code should add tests that prove that the code works. That's not always possible and tests are not always comprehensive, especially when a user doesn't have access to a wide variety of platforms, or is using an API or web service. In these cases, live testing against real equipment can be more valuable than automation that runs against simulated interfaces. In any case, things should always be tested manually the first time as well." msgstr "ç†æƒ³çš„ã«ã¯ã€ã‚³ãƒ¼ãƒ‰ãŒæ©Ÿèƒ½ã™ã‚‹ã“ã¨ã‚’証明ã™ã‚‹ãƒ†ã‚¹ãƒˆã‚’追加ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚特ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã•ã¾ã–ã¾ãªãƒ—ラットフォームã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã€ã¾ãŸã¯ API ã‚„ Web サービスを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“れãŒå¿…ãšã—ã‚‚å¯èƒ½ã§ã¯ãªãã€ãƒ†ã‚¹ãƒˆã‚‚å¿…ãšã—も包括的ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå ´åˆã¯ã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«å¯¾ã—ã¦å®Ÿè¡Œã•れる自動化よりもã€å®Ÿéš›ã®æ©Ÿå™¨ã‚’使用ã—ãŸãƒ©ã‚¤ãƒ–ãƒ†ã‚¹ãƒˆã®æ–¹ãŒæœ‰ç›Šã¨ãªã‚Šã¾ã™ã€‚ã„ãšã‚Œã«ã›ã‚ˆã€æœ€åˆã®æ®µéšŽã§ã‚‚å¸¸ã«æ‰‹å‹•ã§ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:107 msgid "Thankfully, helping to test Ansible is pretty straightforward, assuming you are familiar with how Ansible works." msgstr "Ansible ã®å‹•作を熟知ã—ã¦ã„れã°ã€Ansible ã®ãƒ†ã‚¹ãƒˆã‚’手ä¼ã†ã“ã¨ã¯éžå¸¸ã«ç°¡å˜ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:110 msgid "Setup: Checking out a Pull Request" msgstr "設定: ãƒ—ãƒ«è¦æ±‚ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆ" #: ../../rst/dev_guide/testing.rst:112 msgid "You can do this by:" msgstr "ã“れã¯ã€ä»¥ä¸‹ã®æ–¹æ³•ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:114 msgid "checking out Ansible" msgstr "Ansible ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆ" #: ../../rst/dev_guide/testing.rst:115 msgid "fetching the proposed changes into a test branch" msgstr "ææ¡ˆã•れãŸå¤‰æ›´ã‚’テストブランãƒã«å–å¾—" #: ../../rst/dev_guide/testing.rst:116 msgid "testing" msgstr "テスト" #: ../../rst/dev_guide/testing.rst:117 msgid "commenting on that particular issue on GitHub" msgstr "GitHub ã«ç‰¹å®šã®å•題ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆ" #: ../../rst/dev_guide/testing.rst:119 msgid "Here's how:" msgstr "以下ã«ã€å®Ÿè¡Œã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:122 msgid "Testing source code from GitHub pull requests sent to us does have some inherent risk, as the source code sent may have mistakes or malicious code that could have a negative impact on your system. We recommend doing all testing on a virtual machine, whether a cloud instance, or locally. Some users like Vagrant or Docker for this, but they are optional. It is also useful to have virtual machines of different Linux or other flavors, since some features (for example, package managers such as apt or yum) are specific to those OS versions." msgstr "GitHub ã®ãƒ—ãƒ«è¦æ±‚ã‹ã‚‰é€ã‚‰ã‚Œã¦ããŸã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’テストã™ã‚‹ã“ã¨ã«ã¯ãƒªã‚¹ã‚¯ãŒä¼´ã„ã¾ã™ã€‚é€ã‚‰ã‚Œã¦ããŸã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«ã¯ã€é–“é•ã„や悪æ„ã®ã‚るコードãŒå«ã¾ã‚Œã¦ã„ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ã«å½±éŸ¿ã‚’åŠã¼ã™å¯èƒ½æ€§ãŒã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚ã™ã¹ã¦ã®ãƒ†ã‚¹ãƒˆã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ä¸Šã§è¡Œã†ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚クラウドインスタンスã§ã‚‚ローカルã§ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。ã“ã®ãŸã‚ã« Vagrant ã‚„ Docker を好むユーザーもã„ã¾ã™ãŒã€ã“れらã¯ä»»æ„ã§ã™ã€‚ã¾ãŸã€ã„ãã¤ã‹ã®æ©Ÿèƒ½ (ãŸã¨ãˆã°ã€apt ã‚„ yum ãªã©ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼) ã¯ã€ãれら㮠OS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å›ºæœ‰ã®ã‚‚ã®ã§ã‚ã‚‹ãŸã‚ã€ç•°ãªã‚‹ Linux ã‚„ãã®ä»–ã®ãƒ•レーãƒãƒ¼ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’用æ„ã—ã¦ãŠãã¨ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:129 msgid "Create a fresh area to work::" msgstr "ä½œæ¥­ç”¨ã«æ–°ã—ã„領域を作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:135 msgid "Next, find the pull request you'd like to test and make note of its number. It will look something like this::" msgstr "次ã«ã€ãƒ†ã‚¹ãƒˆã™ã‚‹ãƒ—ãƒ«è¦æ±‚を見ã¤ã‘ã¦ã€ãã®ç•ªå·ã‚’書ãç•™ã‚ã¾ã™ã€‚次ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:139 msgid "Only test ``ansible:devel``" msgstr "``ansible:devel`` ã®ã¿ã‚’テストã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:141 msgid "It is important that the PR request target be ``ansible:devel``, as we do not accept pull requests into any other branch. Dot releases are cherry-picked manually by Ansible staff." msgstr "ä»–ã®ãƒ–ランãƒã¸ã®ãƒ—ãƒ«è¦æ±‚ã¯ä½¿ç”¨ã§ããªã„ãŸã‚ã€PR è¦æ±‚ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ ``ansible:devel`` ã«ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚ドットリリースã¯ã€Ansible ã®ã‚¹ã‚¿ãƒƒãƒ•ãŒå…¥å¿µã«é¸æŠžã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:143 msgid "Use the pull request number when you fetch the proposed changes and create your branch for testing::" msgstr "ææ¡ˆã•れãŸå¤‰æ›´ã‚’å–å¾—ã—ã€ãƒ†ã‚¹ãƒˆç”¨ã«ãƒ–ランãƒã‚’作æˆã™ã‚‹ã¨ãã«ãƒ—ãƒ«è¦æ±‚番å·ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:148 msgid "The first command fetches the proposed changes from the pull request and creates a new branch named ``testing_PRXXXX``, where the XXXX is the actual number associated with the pull request (for example, 65381). The second command checks out the newly created branch." msgstr "1 ã¤ç›®ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ãƒ—ãƒ«è¦æ±‚ã‹ã‚‰ææ¡ˆã•れãŸå¤‰æ›´ã‚’å–å¾—ã—ã€``testing_PRXXXX`` ã¨ã„ã†åå‰ã®æ–°è¦ãƒ–ランãƒã‚’作æˆã—ã¾ã™ã€‚XXXX ã¯ãƒ—ãƒ«è¦æ±‚ã«é–¢é€£ã™ã‚‹å®Ÿéš›ã®ç•ªå· (例: 65381) ã§ã™ã€‚2 ã¤ç›®ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€æ–°ãŸã«ä½œæˆã•れãŸãƒ–ランãƒã‚’ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:151 msgid "If the GitHub user interface shows that the pull request will not merge cleanly, we do not recommend proceeding if you are not somewhat familiar with git and coding, as you will have to resolve a merge conflict. This is the responsibility of the original pull request contributor." msgstr "GitHub ユーザーインターフェースã§ã€ãƒ—ãƒ«è¦æ±‚ãŒæ­£å¸¸ã«ãƒžãƒ¼ã‚¸ã•れãªã„ã¨ç¤ºã•れãŸå ´åˆã¯ã€ãƒžãƒ¼ã‚¸ã®ç«¶åˆã‚’解決ã—ãªã‘れã°ãªã‚‰ãªã„ãŸã‚ã€git ãŠã‚ˆã³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«ã‚ã¾ã‚Šç²¾é€šã—ã¦ã„ãªã„å ´åˆã¯ã€ç¶šè¡Œã—ãªã„ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れã¯ã€å…ƒã®ãƒ—ãƒ«è¦æ±‚ã®æŠ•ç¨¿è€…ã®è²¬ä»»ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:154 msgid "Some users do not create feature branches, which can cause problems when they have multiple, unrelated commits in their version of ``devel``. If the source looks like ``someuser:devel``, make sure there is only one commit listed on the pull request." msgstr "一部ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ©Ÿèƒ½ãƒ–ランãƒã‚’作æˆã—ãªã„ãŸã‚ã€``devel`` ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é–¢é€£æ€§ã®ãªã„コミットãŒè¤‡æ•°ã‚ã‚‹å ´åˆã«ã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ソース㌠``someuser:devel`` ã®ã‚ˆã†ã«è¡¨ç¤ºã•れる場åˆã¯ã€ãƒ—ãƒ«è¦æ±‚ã«è¨˜è¼‰ã•れã¦ã„るコミット㌠1 ã¤ã ã‘ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst:156 msgid "The Ansible source includes a script that allows you to use Ansible directly from source without requiring a full installation that is frequently used by developers on Ansible." msgstr "Ansible ã®ã‚½ãƒ¼ã‚¹ã«ã¯ã€Ansible ã®é–‹ç™ºè€…ãŒé »ç¹ã«ä½¿ç”¨ã™ã‚‹ãƒ•ルインストールを必è¦ã¨ã›ãšã€ã‚½ãƒ¼ã‚¹ã‹ã‚‰ç›´æŽ¥ Ansible を使用ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:159 msgid "Simply source it (to use the Linux/Unix terminology) to begin using it immediately::" msgstr "ソースを作æˆã™ã‚‹ã ã‘ (Linux/Unix ã®ç”¨èªžã‚’使用ã™ã‚‹ãŸã‚ã«) ã§ã€ã™ãã«ä½¿ã„å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:163 msgid "This script modifies the ``PYTHONPATH`` environment variables (along with a few other things), which will be temporarily set as long as your shell session is open." msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€``PYTHONPATH`` 環境変数を変更ã—ã¾ã™ (ä»–ã«ã‚‚ã„ãã¤ã‹ã‚りã¾ã™)。ã“れã¯ã€ã‚·ã‚§ãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒé–‹ã„ã¦ã„ã‚‹é–“ã¯ä¸€æ™‚çš„ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:167 msgid "Testing the Pull Request" msgstr "ãƒ—ãƒ«è¦æ±‚ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing.rst:169 msgid "At this point, you should be ready to begin testing!" msgstr "ã“ã®æ™‚点ã§ãƒ†ã‚¹ãƒˆã‚’é–‹å§‹ã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing.rst:171 msgid "Some ideas of what to test are:" msgstr "何をテストã™ã‚‹ã‹ã®ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’ã„ãã¤ã‹æŒ™ã’ã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/dev_guide/testing.rst:173 msgid "Create a test Playbook with the examples in and check if they function correctly" msgstr "例題をå«ã‚€ãƒ†ã‚¹ãƒˆ Playbook を作æˆã—ã€ãã‚Œã‚‰ãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:174 msgid "Test to see if any Python backtraces returned (that's a bug)" msgstr "Python ã®ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ãŒè¿”ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’テストã—ã¾ã™ (ã“れã¯ãƒã‚°ã§ã™)。" #: ../../rst/dev_guide/testing.rst:175 msgid "Test on different operating systems, or against different library versions" msgstr "ç•°ãªã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã€ã¾ãŸã¯ç•°ãªã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ©ã‚¤ãƒ–ラリーã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst:178 msgid "Run sanity tests" msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing.rst:184 msgid "More information: :ref:`testing_sanity`" msgstr "詳細情報: :ref:`testing_sanity`" #: ../../rst/dev_guide/testing.rst:187 msgid "Run unit tests" msgstr "ユニットテストã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing.rst:193 msgid "More information: :ref:`testing_units`" msgstr "詳細情報: :ref:`testing_units`" #: ../../rst/dev_guide/testing.rst:196 msgid "Run integration tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing.rst:202 msgid "More information: :ref:`testing_integration`" msgstr "詳細情報: :ref:`testing_integration`" #: ../../rst/dev_guide/testing.rst:204 msgid "Any potential issues should be added as comments on the pull request (and it's acceptable to comment if the feature works as well), remembering to include the output of ``ansible --version``" msgstr "潜在的ãªå•題ãŒã‚れã°ã€ãƒ—ãƒ«è¦æ±‚ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (æ©Ÿèƒ½ãŒæ­£å¸¸ã«å‹•作ã™ã‚‹å ´åˆã‚‚コメントã—ã¦ã‚‚ã‹ã¾ã„ã¾ã›ã‚“)。忘れãšã« ``ansible --version`` ã®å‡ºåŠ›ã‚’è»¢è¼‰ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst:206 msgid "Example::" msgstr "例:" #: ../../rst/dev_guide/testing.rst:210 msgid "If the PR does not resolve the issue, or if you see any failures from the unit/integration tests, just include that output instead:" msgstr "PR ãŒå•題を解決ã—ãªã„å ´åˆã‚„ã€ãƒ¦ãƒ‹ãƒƒãƒˆ/çµ±åˆãƒ†ã‚¹ãƒˆã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ä»£ã‚りã«ãã®å‡ºåŠ›ã‚’è»¢è¼‰ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst msgid "This change causes errors for me." msgstr "ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing.rst msgid "When I ran this Ubuntu 16.04 it failed with the following:" msgstr "When I ran this Ubuntu 16.04 it failed with the following:" #: ../../rst/dev_guide/testing.rst msgid "\\```" msgstr "\\```" #: ../../rst/dev_guide/testing.rst msgid "some output" msgstr "some output" #: ../../rst/dev_guide/testing.rst msgid "StackTrace" msgstr "StackTrace" #: ../../rst/dev_guide/testing.rst msgid "some other output" msgstr "some other output" #: ../../rst/dev_guide/testing.rst:223 msgid "Code Coverage Online" msgstr "オンラインã®ã‚³ãƒ¼ãƒ‰ã‚«ãƒãƒ¬ãƒ¼ã‚¸" #: ../../rst/dev_guide/testing.rst:225 msgid "`The online code coverage reports `_ are a good way to identify areas for testing improvement in Ansible. By following red colors you can drill down through the reports to find files which have no tests at all. Adding both integration and unit tests which show clearly how code should work, verify important Ansible functions and increase testing coverage in areas where there is none is a valuable way to help improve Ansible." msgstr "`オンラインコードカãƒãƒ¬ãƒ¼ã‚¸ãƒ¬ãƒãƒ¼ãƒˆ `_ ã¯ã€Ansible ã§ãƒ†ã‚¹ãƒˆãŒå‘上ã™ã‚‹é ˜åŸŸã‚’特定ã™ã‚‹ã®ãŒé©åˆ‡ãªæ–¹æ³•ã§ã™ã€‚赤ã„色ã«å¾“ã†ã“ã¨ã§ã€ãƒ¬ãƒãƒ¼ãƒˆã‚’掘り下ã’ã¦ã€ãƒ†ã‚¹ãƒˆãŒã¾ã£ãŸããªã„ファイルを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コードãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’明確ã«ç¤ºã™çµ±åˆãƒ†ã‚¹ãƒˆã¨ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®ä¸¡æ–¹ã‚’追加ã—ã€é‡è¦ãª Ansible 関数を検証ã—ã€å­˜åœ¨ã—ãªã„領域ã§ãƒ†ã‚¹ãƒˆç¯„囲を拡大ã™ã‚‹ã“ã¨ã¯ã€Ansible ã®æ”¹å–„ã«å½¹ç«‹ã¤è²´é‡ãªæ–¹æ³•ã§ã™ã€‚" #: ../../rst/dev_guide/testing.rst:232 msgid "The code coverage reports only cover the ``devel`` branch of Ansible where new feature development takes place. Pull requests and new code will be missing from the codecov.io coverage reports so local reporting is needed. Most ``ansible-test`` commands allow you to collect code coverage, this is particularly useful to indicate where to extend testing. See :ref:`testing_running_locally` for more information." msgstr "コードカãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã¯ã€æ–°ã—ã„æ©Ÿèƒ½é–‹ç™ºãŒè¡Œã‚れる Ansible ã® ``devel`` ブランãƒã®ã¿ã‚’対象ã¨ã—ã¾ã™ã€‚ãƒ—ãƒ«è¦æ±‚ãŠã‚ˆã³æ–°è¦ã‚³ãƒ¼ãƒ‰ã¯ codecov.io ã®ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã«å«ã¾ã‚Œãªã„ãŸã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¬ãƒãƒ¼ãƒˆãŒå¿…è¦ã«ãªã‚‹ã‚ˆã†ã§ã™ã€‚ã»ã¨ã‚“ã©ã® ``ansible-test`` コマンドã§ã¯ã€ã‚³ãƒ¼ãƒ‰ã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’åŽé›†ã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ†ã‚¹ãƒˆã‚’æ‹¡å¼µã™ã‚‹å ´æ‰€ã‚’示ã™ã®ã«ç‰¹ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`testing_running_locally`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing.rst:240 msgid "Want to know more about testing?" msgstr "テストã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±" #: ../../rst/dev_guide/testing.rst:242 msgid "If you'd like to know more about the plans for improving testing Ansible then why not join the `Testing Working Group `_." msgstr "Ansible テストを改善ã™ã‚‹è©³ç´°ãªè¨ˆç”»ã‚’確èªã—ãŸã„å ´åˆã¯ã€`テストワーキンググループ `_ ã«ã”å‚加ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/action-plugin-docs.rst:2 msgid "action-plugin-docs" msgstr "action-plugin-docs" #: ../../rst/dev_guide/testing/sanity/action-plugin-docs.rst:4 msgid "Each action plugin should have a matching module of the same name to provide documentation." msgstr "å„アクションプラグインã«ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æä¾›ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒã˜åå‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ansible-doc.rst:2 msgid "ansible-doc" msgstr "ansible-doc" #: ../../rst/dev_guide/testing/sanity/ansible-doc.rst:4 msgid "Verifies that ``ansible-doc`` can parse module documentation on all supported Python versions." msgstr "``ansible-doc`` ãŒã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã™ã¹ã¦ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’è§£æžã§ãã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ansible-requirements.rst:2 msgid "ansible-requirements" msgstr "ansible-requirements" #: ../../rst/dev_guide/testing/sanity/ansible-requirements.rst:4 msgid "``test/lib/ansible_test/_data/requirements/sanity.import-plugins.txt`` must be an identical copy of ``requirements.txt`` found in the project's root." msgstr "``test/lib/ansible_test/_data/requirements/sanity.import-plugins.txt`` ã¯ã€ãƒ—ロジェクトã®ãƒ«ãƒ¼ãƒˆã«ã‚ã‚‹ ``requirements.txt`` ã¨åŒã˜ã‚³ãƒ”ーã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ansible-test-future-boilerplate.rst:2 msgid "ansible-test-future-boilerplate" msgstr "ansible-test-future-boilerplate" #: ../../rst/dev_guide/testing/sanity/ansible-test-future-boilerplate.rst:4 msgid "The ``_internal`` code for ``ansible-test`` requires the following ``__future__`` import:" msgstr "``ansible-test`` ã®``_internal`` コードã«ã¯ã€ä»¥ä¸‹ã®``__future__`` ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ansible-var-precedence-check.rst:4 msgid "ansible-var-precedence-check" msgstr "ansible-var-precedence-check" #: ../../rst/dev_guide/testing/sanity/ansible-var-precedence-check.rst:6 msgid "Check the order of precedence for Ansible variables against :ref:`ansible_variable_precedence`." msgstr "「:ref:`ansible_variable_precedence`ã€ã§ã€Ansible 変数ã®å„ªå…ˆé †ä½ã®é †åºã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/azure-requirements.rst:4 msgid "azure-requirements" msgstr "azure-requirements" #: ../../rst/dev_guide/testing/sanity/azure-requirements.rst:6 msgid "Update the Azure integration test requirements file when changes are made to the Azure packaging requirements file:" msgstr "Azure パッケージ化ã®è¦ä»¶ãƒ•ァイルã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸã‚‰ã€Azure çµ±åˆãƒ†ã‚¹ãƒˆè¦ä»¶ãƒ•ァイルを更新ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/bin-symlinks.rst:2 msgid "bin-symlinks" msgstr "bin-symlinks" #: ../../rst/dev_guide/testing/sanity/bin-symlinks.rst:4 msgid "The ``bin/`` directory in Ansible must contain only symbolic links to executable files. These files must reside in the ``lib/ansible/`` or ``test/lib/ansible_test/`` directories." msgstr "Ansible ã® ``bin/`` ディレクトリーã«ã¯ã€å®Ÿè¡Œãƒ•ァイルã¸ã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã®ã¿ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ•ァイルã¯ã€``lib/ansible/`` ディレクトリーã¾ãŸã¯ ``test/lib/ansible_test/`` ディレクトリーã«ç½®ã‹ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/bin-symlinks.rst:7 msgid "This is required to allow ``ansible-test`` to work with containers and remote hosts when running from an installed version of Ansible." msgstr "ã“れã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ¸ˆã¿ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã‹ã‚‰å®Ÿè¡Œã™ã‚‹éš›ã«ã€``ansible-test`` ãŒã‚³ãƒ³ãƒ†ãƒŠãƒ¼ãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã§å‹•作ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/bin-symlinks.rst:9 msgid "Symlinks for each entry point in ``bin/`` must also be present in ``test/lib/ansible_test/_util/target/injector/``. Each symlink should point to the ``python.py`` script in the same directory. This facilitates running with the correct Python interpreter and enabling code coverage." msgstr "``bin/`` ã®å„エントリーãƒã‚¤ãƒ³ãƒˆã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚‚ ``test/lib/ansible_test/_util/target/injector/`` ã«å­˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãれãžã‚Œã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã¯åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``python.py`` スクリプトを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ­£ã—ã„ Python インタープリターã§ã®å®Ÿè¡Œã¨ã‚³ãƒ¼ãƒ‰ã®ã‚«ãƒãƒ¬ãƒƒã‚¸ã®æœ‰åŠ¹åŒ–ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/boilerplate.rst:4 msgid "boilerplate" msgstr "boilerplate" #: ../../rst/dev_guide/testing/sanity/boilerplate.rst:6 msgid "Most Python files should include the following boilerplate:" msgstr "ã»ã¨ã‚“ã©ã® Python ファイルã«ã¯ä»¥ä¸‹ã® boilerplate ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/botmeta.rst:2 msgid "botmeta" msgstr "botmeta" #: ../../rst/dev_guide/testing/sanity/botmeta.rst:4 msgid "Verifies that ``./github/BOTMETA.yml`` is valid." msgstr "``./github/BOTMETA.yml`` ãŒæœ‰åйã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/changelog.rst:2 msgid "changelog" msgstr "changelog" #: ../../rst/dev_guide/testing/sanity/changelog.rst:4 msgid "Basic linting of changelog fragments with `antsibull-changelog lint `_." msgstr "`antsibull-changelog lint `_ を使用ã—㟠changelog フラグメントã®åŸºæœ¬çš„ãªæ–‡æ³•ãƒã‚§ãƒƒã‚¯ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/changelog.rst:6 msgid "One or more of the following sections are required:" msgstr "以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒ 1 ã¤ä»¥ä¸Šå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/changelog.rst:8 msgid "major_changes" msgstr "major_changes" #: ../../rst/dev_guide/testing/sanity/changelog.rst:9 msgid "minor_changes" msgstr "minor_changes" #: ../../rst/dev_guide/testing/sanity/changelog.rst:10 msgid "breaking_changes" msgstr "breaking_changes" #: ../../rst/dev_guide/testing/sanity/changelog.rst:11 msgid "deprecated_features" msgstr "deprecated_features" #: ../../rst/dev_guide/testing/sanity/changelog.rst:12 msgid "removed_features" msgstr "removed_features" #: ../../rst/dev_guide/testing/sanity/changelog.rst:13 msgid "security_fixes" msgstr "security_fixes" #: ../../rst/dev_guide/testing/sanity/changelog.rst:14 msgid "bugfixes" msgstr "bugfixes" #: ../../rst/dev_guide/testing/sanity/changelog.rst:15 msgid "known_issues" msgstr "known_issues" #: ../../rst/dev_guide/testing/sanity/changelog.rst:17 msgid "New modules and plugins must not be included in changelog fragments." msgstr "æ–°ã—ã„モジュールãŠã‚ˆã³ãƒ—ラグインã¯ã€changelog フラグメントã«å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/compile.rst:4 msgid "See :ref:`testing_compile` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`testing_compile`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/configure-remoting-ps1.rst:2 msgid "configure-remoting-ps1" msgstr "configure-remoting-ps1" #: ../../rst/dev_guide/testing/sanity/configure-remoting-ps1.rst:4 msgid "The file ``examples/scripts/ConfigureRemotingForAnsible.ps1`` is required and must be a regular file. It is used by external automated processes and cannot be moved, renamed or replaced with a symbolic link." msgstr "``examples/scripts/ConfigureRemotingForAnsible.ps1`` ファイルã¯å¿…é ˆã§ã‚りã€é€šå¸¸ã®ãƒ•ァイルã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯å¤–部ã®è‡ªå‹•化プロセスã«ã‚ˆã£ã¦ä½¿ç”¨ã•れã€ç§»å‹•ã—ãŸã‚Šã€åå‰ã‚’変更ã—ãŸã‚Šã€ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã«ç½®ãæ›ãˆãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/deprecated-config.rst:4 msgid "deprecated-config" msgstr "éžæŽ¨å¥¨ã®è¨­å®š" #: ../../rst/dev_guide/testing/sanity/deprecated-config.rst:6 msgid "``DOCUMENTATION`` config is scheduled for removal" msgstr "``DOCUMENTATION`` 設定ã¯å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/docs-build.rst:2 msgid "docs-build" msgstr "docs-build" #: ../../rst/dev_guide/testing/sanity/docs-build.rst:4 msgid "Verifies that ``make singlehtmldocs`` in ``docs/docsite/`` completes without errors." msgstr "``docs/docsite/`` ã® ``make singlehtmldocs`` ãŒå®Œäº†ã—ã€ã‚¨ãƒ©ãƒ¼ãŒãªã„ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/empty-init.rst:2 msgid "empty-init" msgstr "empty-init" #: ../../rst/dev_guide/testing/sanity/empty-init.rst:4 msgid "The ``__init__.py`` files under the following directories must be empty. For some of these (modules and tests), ``__init__.py`` files with code won't be used. For others (module_utils), we want the possibility of using Python namespaces which an empty ``__init__.py`` will allow for." msgstr "以下ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ ``__init__.py`` ファイルã¯ç©ºã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ä¸€éƒ¨ (モジュールãŠã‚ˆã³ãƒ†ã‚¹ãƒˆ) ã§ã¯ã€ã‚³ãƒ¼ãƒ‰ã‚’æŒã¤ ``__init__.py`` ファイルã¯ä½¿ç”¨ã•れã¾ã›ã‚“。ãã®ä»– (モジュールユーティリティー) ã®å ´åˆã¯ã€ç©ºã® ``__init__.py`` を許å¯ã™ã‚‹ Python åå‰ç©ºé–“を使用ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/empty-init.rst:8 msgid "``lib/ansible/modules/``" msgstr "``lib/ansible/modules/``" #: ../../rst/dev_guide/testing/sanity/empty-init.rst:9 msgid "``lib/ansible/module_utils/``" msgstr "``lib/ansible/module_utils/``" #: ../../rst/dev_guide/testing/sanity/empty-init.rst:10 msgid "``test/units/``" msgstr "``test/units/``" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:2 msgid "future-import-boilerplate" msgstr "future-import-boilerplate" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:4 msgid "Most Python files should include the following boilerplate at the top of the file, right after the comment header:" msgstr "ã»ã¨ã‚“ã©ã® Python ファイルã«ã¯ã€ãƒ•ァイルã®ä¸Šéƒ¨ã€ã‚³ãƒ¡ãƒ³ãƒˆãƒ˜ãƒƒãƒ€ãƒ¼ã®ç›´å¾Œã«æ¬¡ã® boilerplate ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:11 msgid "This uses Python 3 semantics for absolute vs relative imports, division, and print. By doing this, we can write code which is portable between Python 2 and Python 3 by following the Python 3 semantics." msgstr "ã“ã“ã§ã¯ã€çµ¶å¯¾çš„インãƒãƒ¼ãƒˆã¨ç›¸å¯¾çš„インãƒãƒ¼ãƒˆã€é™¤ç®—ã€ãŠã‚ˆã³å‡ºåŠ›ã« Python 3 セマンティクスを使用ã—ã¾ã™ã€‚Python 3 セマンティクスã«å¾“ã£ã¦ã€Python 2 㨠Python 3 ã®é–“ã§ç§»æ¤å¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:18 msgid "When Python 2 encounters an import of a name in a file like ``import copy`` it attempts to load ``copy.py`` from the same directory as the file is in. This can cause problems if there is a python file of that name in the directory and also a python module in ``sys.path`` with that same name. In that case, Python 2 would load the one in the same directory and there would be no way to load the one on ``sys.path``. Python 3 fixes this by making imports absolute by default. ``import copy`` will find ``copy.py`` from ``sys.path``. If you want to import ``copy.py`` from the same directory, the code needs to be changed to perform a relative import: ``from . import copy``." msgstr "Python 2 ã¯ã€``import copy`` ã®ã‚ˆã†ãªãƒ•ァイルåã®ã€Œimportã€ã«é­é‡ã™ã‚‹ã¨ã€ãã®ãƒ•ァイルãŒã‚るディレクトリーã‹ã‚‰ ``copy.py`` を読ã¿è¾¼ã‚‚ã†ã¨ã—ã¾ã™ã€‚ã“れã¯ã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãã®åå‰ã® python ファイルãŒã‚りã€``sys.path`` ã«ã‚‚åŒã˜åå‰ã® python モジュールãŒã‚ã‚‹å ´åˆã«å•題ãŒç™ºç”Ÿã—ã¾ã™ã€‚ã“ã®å ´åˆã€Python 2 ã¯åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ã‚‚ã®ã‚’読ã¿è¾¼ã¿ã€``sys.path`` ã«ã‚ã‚‹ã‚‚ã®ã‚’読ã¿è¾¼ã‚€æ–¹æ³•ãŒã‚りã¾ã›ã‚“。Python 3 ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’行ã†ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã§ã“ã®å•題を解決ã—ã¾ã—ãŸã€‚``import copy`` ã¯ã€``sys.path`` ã‹ã‚‰ ``copy.py`` を見ã¤ã‘ã¾ã™ã€‚åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ ``copy.py`` をインãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’行ã†ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (``from . import copy``)。" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:28 msgid "`Absolute and relative imports `_" msgstr "`絶対ãŠã‚ˆã³ç›¸å¯¾ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ `_" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:33 msgid "In Python 2, the division operator (``/``) returns integer values when used with integers. If there was a remainder, this part would be left off (aka, `floor division`). In Python 3, the division operator (``/``) always returns a floating point number. Code that needs to calculate the integer portion of the quotient needs to switch to using the floor division operator (`//`) instead." msgstr "Python 2 ã§ã¯ã€é™¤ç®—æ¼”ç®—å­ (``/``) ã¯ã€æ•´æ•°ã¨å…±ã«ä½¿ç”¨ã™ã‚‹ã¨æ•´æ•°å€¤ã‚’è¿”ã—ã¾ã™ã€‚残りã®éƒ¨åˆ†ãŒã‚ã‚‹å ´åˆã€ã“ã®éƒ¨åˆ†ã¯ã‚ªãƒ• (別å `切りæ¨ã¦é™¤ç®—`) ã®ã¾ã¾ã«ã—ã¾ã™ã€‚Python 3 ã§ã¯ã€é™¤ç®—æ¼”ç®—å­ (``/``) ã¯å¸¸ã«æµ®å‹•å°æ•°ç‚¹æ•°ã‚’è¿”ã—ã¾ã™ã€‚å¼•ç”¨ç¬¦ã§æ•´æ•°ã‚’計算ã™ã‚‹å¿…è¦ã®ã‚るコードã¯ã€ä»£ã‚りã«åˆ‡ã‚Šæ¨ã¦é™¤ç®—æ¼”ç®—å­ (`//`) ã®ä½¿ç”¨ã«åˆ‡ã‚Šæ›¿ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:40 msgid "`Changing the division operator `_" msgstr "`除算演算å­ã®å¤‰æ›´ `_" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:45 msgid "In Python 2, :func:`python:print` is a keyword. In Python 3, :func:`python3:print` is a function with different parameters. Using this ``__future__`` allows using the Python 3 print semantics everywhere." msgstr "Python 2 ã§ã¯ã€:func:`python:print` ã¯ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ã™ã€‚Python 3 ã§ã¯ã€ :func:`python3:print` ã¯ç•°ãªã‚‹ãƒ‘ラメーターをæŒã¤æ©Ÿèƒ½ã§ã™ã€‚ã“ã® ``__future__`` を使用ã™ã‚‹ã¨ã€ã‚らゆる場所㫠Python 3 出力セマンティクスを使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/future-import-boilerplate.rst:50 msgid "`Make print a function `_" msgstr "`Make print a function `_" #: ../../rst/dev_guide/testing/sanity/ignores.rst:2 msgid "ignores" msgstr "ignore" #: ../../rst/dev_guide/testing/sanity/ignores.rst:4 msgid "Sanity tests for individual files can be skipped, and specific errors can be ignored." msgstr "個々ã®ãƒ•ァイルã§å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’スキップã—ãŸã‚Šã€ç‰¹å®šã®ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ãŸã‚Šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:7 msgid "When to Ignore Errors" msgstr "エラーを無視ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°" #: ../../rst/dev_guide/testing/sanity/ignores.rst:9 msgid "Sanity tests are designed to improve code quality and identify common issues with content. When issues are identified during development, those issues should be corrected." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ã€ã‚³ãƒ¼ãƒ‰ã®å“質を改善ã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«é–¢ã™ã‚‹å…¸åž‹çš„ãªå•題を特定ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚開発中ã«å•題を特定ã™ã‚‹éš›ã«ã€å•題を修正ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:12 msgid "As development of Ansible continues, sanity tests are expanded to detect issues that previous releases could not. To allow time for existing content to be updated to pass newer tests, ignore entries can be added. New content should not use ignores for existing sanity tests." msgstr "Ansible ã®é–‹ç™ºãŒç¶šãã«ã¤ã‚Œã¦ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆãŒæ‹¡å¼µã•れã€ä»¥å‰ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯æ¤œå‡ºã§ããªã‹ã£ãŸå•é¡ŒãŒæ¤œå‡ºã•れã¾ã™ã€‚既存ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æ›´æ–°ã—ã¦æ–°ã—ã„テストã«åˆæ ¼ã™ã‚‹ãŸã‚ã®æ™‚間を確ä¿ã™ã‚‹ãŸã‚ã«ã€ignore エントリーを追加ã§ãã¾ã™ã€‚æ–°ã—ã„コンテンツã§ã¯ã€æ—¢å­˜ã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã§ ignore を使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/ignores.rst:16 msgid "When code is fixed to resolve sanity test errors, any relevant ignores must also be removed. If the ignores are not removed, this will be reported as an unnecessary ignore error. This is intended to prevent future regressions due to the same error recurring after being fixed." msgstr "コードãŒä¿®æ­£ã•れã¦å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚¨ãƒ©ãƒ¼ã‚’解決ã™ã‚‹å ´åˆã«ã¯ã€é–¢é€£ã™ã‚‹ ignore も削除ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ignore ãŒå‰Šé™¤ã•れãªã„ã¨ã€ä¸è¦ãª ignore エラーãŒå ±å‘Šã•れã¾ã™ã€‚ã“れã¯ã€ä¿®æ­£å¾Œã«åŒã˜ã‚¨ãƒ©ãƒ¼ãŒç¹°ã‚Šè¿”ã—発生ã™ã‚‹ãŸã‚ã€ä»Šå¾Œã®ãƒªã‚°ãƒ¬ãƒƒã‚·ãƒ§ãƒ³ã‚’防ãã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:21 msgid "When to Skip Tests" msgstr "テストをスキップã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°" #: ../../rst/dev_guide/testing/sanity/ignores.rst:23 msgid "Although rare, there are reasons for skipping a sanity test instead of ignoring the errors it reports." msgstr "é »ç¹ã«ã¯èµ·ã“りã¾ã›ã‚“ãŒã€å ±å‘Šã•れãŸã‚¨ãƒ©ãƒ¼ã‚’無視ã™ã‚‹ä»£ã‚りã«ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’行ã‚ãªã„ (スキップã™ã‚‹) å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:25 msgid "If a sanity test results in a traceback when processing content, that error cannot be ignored. If this occurs, open a new `bug report `_ for the issue so it can be fixed. If the traceback occurs due to an issue with the content, that issue should be fixed. If the content is correct, the test will need to be skipped until the bug in the sanity test is fixed." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã«ã‚ˆã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å‡¦ç†æ™‚ã«ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ãŒç™ºç”Ÿã™ã‚‹ã¨ã€ãã®ã‚¨ãƒ©ãƒ¼ã¯ç„¡è¦–ã§ãã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå ´åˆã«ã¯ã€æ–°ã—ã„ `ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆ `_ を作æˆã—ã€å•題を修正ã—ã¦ãã ã•ã„。コンテンツã«å•題ãŒã‚ã‚‹ãŸã‚ã«ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ãã®å•題を修正ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒæ­£ã—ã„å ´åˆã¯ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®ãƒã‚°ãŒä¿®æ­£ã•れるã¾ã§ã€ãƒ†ã‚¹ãƒˆã‚’スキップã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:30 msgid "Caution should be used when skipping sanity tests instead of ignoring them. Since the test is skipped entirely, resolution of the issue will not be automatically detected. This will prevent prevent regression detection from working once the issue has been resolved. For this reason it is a good idea to periodically review skipped entries manually to verify they are required." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’無視ã™ã‚‹ã®ã§ã¯ãªãスキップã™ã‚‹å ´åˆã¯æ³¨æ„ãŒå¿…è¦ã§ã™ã€‚テストã¯å®Œå…¨ã«ã‚¹ã‚­ãƒƒãƒ—ã•れるãŸã‚ã€å•題ã®è§£æ±ºãŒè‡ªå‹•çš„ã«æ¤œå‡ºã•れã¾ã›ã‚“。ã“れã«ã‚ˆã‚Šã€å•題ãŒè§£æ±ºã™ã‚‹ã¨å›žå¸°æ¤œå‡ºãŒæ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚ã“ã®ãŸã‚ã€ã‚¹ã‚­ãƒƒãƒ—ã—ãŸã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’å®šæœŸçš„ã«æ‰‹å‹•ã§ç¢ºèªã—ã¦ã€ãã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå¿…è¦ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:36 msgid "Ignore File Location" msgstr "ignore ファイルã®å ´æ‰€" #: ../../rst/dev_guide/testing/sanity/ignores.rst:38 msgid "The location of the ignore file depends on the type of content being tested." msgstr "ignore ファイルã®å ´æ‰€ã¯ã€ãƒ†ã‚¹ãƒˆã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç¨®é¡žã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:41 msgid "Ansible Collections" msgstr "Ansible コレクション" #: ../../rst/dev_guide/testing/sanity/ignores.rst:43 msgid "Since sanity tests change between Ansible releases, a separate ignore file is needed for each Ansible major release." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ Ansible リリース間ã§ç•°ãªã‚‹ãŸã‚ã€Ansible メジャーリリースã”ã¨ã«å€‹åˆ¥ã® ignore ファイルãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:45 msgid "The filename is ``tests/sanity/ignore-X.Y.txt`` where ``X.Y`` is the Ansible release being used to test the collection." msgstr "ファイルå㯠``tests/sanity/ignore-X.Y.txt`` ã§ã™ã€‚``X.Y`` ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’テストã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる Ansible リリースã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:47 msgid "Maintaining a separate file for each Ansible release allows a collection to pass tests for multiple versions of Ansible." msgstr "Ansible リリースã”ã¨ã«å€‹åˆ¥ã®ãƒ•ァイルを維æŒã™ã‚‹ã¨ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒ Ansible ã®è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ†ã‚¹ãƒˆã«åˆæ ¼ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:52 msgid "When testing Ansible, all ignores are placed in the ``test/sanity/ignore.txt`` file." msgstr "Ansible をテストã™ã‚‹éš›ã€ã™ã¹ã¦ã® ignore 㯠``test/sanity/ignore.txt`` ファイルã«ç½®ã‹ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:54 msgid "Only a single file is needed because ``ansible-test`` is developed and released as a part of Ansible itself." msgstr "``ansible-test`` ãŒä½œæˆã•れã€Ansible 自体ã®ä¸€éƒ¨ã¨ã—ã¦ãƒªãƒªãƒ¼ã‚¹ã•れるãŸã‚ã€å˜ä¸€ã®ãƒ•ァイルã®ã¿ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:57 msgid "Ignore File Format" msgstr "ignore ファイル形å¼" #: ../../rst/dev_guide/testing/sanity/ignores.rst:59 msgid "The ignore file contains one entry per line. Each line consists of two columns, separated by a single space. Comments may be added at the end of an entry, started with a hash (``#``) character, which can be proceeded by zero or more spaces. Blank and comment only lines are not allowed." msgstr "ignore ファイルã§ã¯ã€1 行㫠1 ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚å„行ã¯ã€1 ã¤ã®ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ 2 ã¤ã®åˆ—ã§æ§‹æˆã•れã¾ã™ã€‚コメントã¯ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®æœ«å°¾ã«è¿½åŠ ã§ãã¾ã™ã€‚先頭ã«ãƒãƒƒã‚·ãƒ¥ (``#``) 文字を付ã‘ã¦ã€ã‚¼ãƒ­ä»¥ä¸Šã®ç©ºç™½ã‚’追加ã§ãã¾ã™ã€‚空白ã¨ã‚³ãƒ¡ãƒ³ãƒˆã®ã¿ã®è¡Œã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/ignores.rst:64 msgid "The first column specifies the file path that the entry applies to. File paths must be relative to the root of the content being tested. This is either the Ansible source or an Ansible collection. File paths cannot contain a space or the hash (``#``) character." msgstr "最åˆã®åˆ—ã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒé©ç”¨ã•れるファイルパスを指定ã—ã¾ã™ã€‚ファイルパスã¯ã€ãƒ†ã‚¹ãƒˆã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ãƒ«ãƒ¼ãƒˆã«å¯¾ã—ã¦ç›¸å¯¾çš„ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れ㯠Ansible ソースã¾ãŸã¯ Ansible コレクションã®ã„ãšã‚Œã‹ã§ã™ã€‚ファイルパスã«ã‚¹ãƒšãƒ¼ã‚¹ã¾ãŸã¯ãƒãƒƒã‚·ãƒ¥ (``#``) 文字をå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/ignores.rst:69 msgid "The second column specifies the sanity test that the entry applies to. This will be the name of the sanity test. If the sanity test is specific to a version of Python, the name will include a dash (``-``) and the relevant Python version. If the named test uses error codes then the error code to ignore must be appended to the name of the test, separated by a colon (``:``)." msgstr "2 列目ã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒé©ç”¨ã•れるå¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’指定ã—ã¾ã™ã€‚ã“れãŒå¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®åå‰ã«ãªã‚Šã¾ã™ã€‚Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å›ºæœ‰ã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’使用ã™ã‚‹å ´åˆã¯ã€åå‰ã«ãƒ€ãƒƒã‚·ãƒ¥ (``-``) ã¨é–¢é€£ã™ã‚‹ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå«ã¾ã‚Œã¾ã™ã€‚åå‰ä»˜ãテストãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹å ´åˆã¯ã€ç„¡è¦–ã™ã‚‹ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’コロン (``:``) ã§åŒºåˆ‡ã£ã¦ãƒ†ã‚¹ãƒˆã®åå‰ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:74 msgid "Below are some example ignore entries for an Ansible collection::" msgstr "以下ã®ä¾‹ã¯ã€Ansible コレクション㮠ignore エントリーã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:80 msgid "It is also possible to skip a sanity test for a specific file. This is done by adding ``!skip`` after the sanity test name in the second column. When this is done, no error code is included, even if the sanity test uses error codes." msgstr "特定ファイルã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’スキップã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れã¯ã€2 番目ã®ã‚³ãƒ©ãƒ ã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆåã®å¾Œã« ``!skip`` を追加ã™ã‚‹ã“ã¨ã§è¡Œã„ã¾ã™ã€‚ã“れを行ã†ã¨ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã§ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã‚‚ã€ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ã¯å«ã¾ã‚Œã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/ignores.rst:84 msgid "Below are some example skip entries for an Ansible collection::" msgstr "以下ã¯ã€Ansible コレクションã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’スキップã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:90 msgid "Ignore File Errors" msgstr "ignore ファイルエラー" #: ../../rst/dev_guide/testing/sanity/ignores.rst:92 msgid "There are various errors that can be reported for the ignore file itself:" msgstr "ignore ファイル自体ã«ã¤ã„ã¦å ±å‘Šã§ãã‚‹ã•ã¾ã–ã¾ãªã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/ignores.rst:94 msgid "syntax errors parsing the ignore file" msgstr "ignore ファイルを解æžã™ã‚‹æ§‹æ–‡ã‚¨ãƒ©ãƒ¼" #: ../../rst/dev_guide/testing/sanity/ignores.rst:95 msgid "references a file path that does not exist" msgstr "存在ã—ãªã„ファイルパスをå‚ç…§" #: ../../rst/dev_guide/testing/sanity/ignores.rst:96 msgid "references to a sanity test that does not exist" msgstr "存在ã—ãªã„å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¸ã®å‚ç…§" #: ../../rst/dev_guide/testing/sanity/ignores.rst:97 msgid "ignoring an error that does not occur" msgstr "発生ã—ãªã„エラーを無視" #: ../../rst/dev_guide/testing/sanity/ignores.rst:98 msgid "ignoring a file which is skipped" msgstr "スキップã•れãŸãƒ•ァイルを無視" #: ../../rst/dev_guide/testing/sanity/ignores.rst:99 msgid "duplicate entries" msgstr "é‡è¤‡ã‚¨ãƒ³ãƒˆãƒªãƒ¼" #: ../../rst/dev_guide/testing/sanity/import.rst:2 msgid "import" msgstr "import" #: ../../rst/dev_guide/testing/sanity/import.rst:4 msgid "Ansible allows unchecked imports of some libraries from specific directories, listed at the bottom of this section. Import all other Python libraries in a try/except ImportError block to support sanity tests such as ``validate-modules`` and to allow Ansible to give better error messages to the user. To import a library in a try/except ImportError block:" msgstr "Ansible ã§ã¯ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸‹éƒ¨ã«è¨˜è¼‰ã•れã¦ã„る特定ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ã€ã„ãã¤ã‹ã®ãƒ©ã‚¤ãƒ–ラリーを確èªã›ãšã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``validate-modules`` ãªã©ã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚’サãƒãƒ¼ãƒˆã—ã€Ansible ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é©åˆ‡ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã€try/except ImportError ブロックã§ä»–ã®ã™ã¹ã¦ã® Python ライブラリーをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚try/except ImportError ブロックã§ãƒ©ã‚¤ãƒ–ラリをインãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€æ¬¡ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/import.rst:6 msgid "In modules:" msgstr "モジュールã®å ´åˆ:" #: ../../rst/dev_guide/testing/sanity/import.rst:33 msgid "In plugins:" msgstr "プラグインã®å ´åˆ:" #: ../../rst/dev_guide/testing/sanity/import.rst:58 msgid "Ansible allows the following unchecked imports from these specific directories:" msgstr "Ansible ã§ã¯ã€ã“れらã®ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰æ¬¡ã®æœªç¢ºèªã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’許å¯ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/import.rst:60 msgid "ansible-core:" msgstr "ansible-core:" #: ../../rst/dev_guide/testing/sanity/import.rst:62 msgid "For ``lib/ansible/modules/`` and ``lib/ansible/module_utils/``, unchecked imports are only allowed from the Python standard library;" msgstr "``lib/ansible/modules/`` ãŠã‚ˆã³ ``lib/ansible/module_utils/`` ã®å ´åˆã€æœªç¢ºèªã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ Python 標準ライブラリーã§ã®ã¿åˆ©ç”¨å¯èƒ½ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/import.rst:63 msgid "For ``lib/ansible/plugins/``, unchecked imports are only allowed from the Python standard library, from dependencies of ansible-core, and from ansible-core itself;" msgstr "``lib/ansible/plugins/`` ã§ã¯ã€æœªç¢ºèªã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã€Python 標準ライブラリーã€ansible-core ã®ä¾å­˜é–¢ä¿‚ã€ãŠã‚ˆã³ ansible-core 自体ã‹ã‚‰ã®ã¿è¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/import.rst:65 msgid "collections:" msgstr "コレクション:" #: ../../rst/dev_guide/testing/sanity/import.rst:67 msgid "For ``plugins/modules/`` and ``plugins/module_utils/``, unchecked imports are only allowed from the Python standard library;" msgstr "``plugins/modules/`` ãŠã‚ˆã³ ``plugins/module_utils/`` ã®å ´åˆã€æœªç¢ºèªã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ Python 標準ライブラリーã§ã®ã¿åˆ©ç”¨å¯èƒ½ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/import.rst:68 msgid "For other directories in ``plugins/`` (see `the community collection requirements `_ for a list), unchecked imports are only allowed from the Python standard library, from dependencies of ansible-core, and from ansible-core itself." msgstr "``plugins/`` ã®ãã®ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (一覧ã¯ã€Œ`コミュニティーコレクションè¦ä»¶ `_ã€ã‚’å‚ç…§) ã§ã¯ã€æœªç¢ºèªã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ Python 標準ライブラリーã€ansible-core ã®ä¾å­˜é–¢ä¿‚ã€ãŠã‚ˆã³ ansible-core 自体ã‹ã‚‰ã®ã¿è¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/index.rst:4 #: ../../rst/dev_guide/testing_sanity.rst:7 msgid "Sanity Tests" msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing/sanity/index.rst:6 msgid "The following sanity tests are available as ``--test`` options for ``ansible-test sanity``. This list is also available using ``ansible-test sanity --list-tests --allow-disabled``." msgstr "以下ã®å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ã€``ansible-test sanity`` ã® ``--test`` オプションã¨ã—ã¦åˆ©ç”¨ã§ãã¾ã™ã€‚ã“ã®ä¸€è¦§ã¯ã€``ansible-test sanity --list-tests --allow-disabled`` を使用ã—ã¦ã‚‚利用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/index.rst:9 msgid "For information on how to run these tests, see :ref:`sanity testing guide `." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œæ–¹æ³•ã¯ã€ã€Œ:ref:`å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã‚¬ã‚¤ãƒ‰ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:2 msgid "integration-aliases" msgstr "integration-aliases" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:4 msgid "Integration tests are executed by ``ansible-test`` and reside in directories under ``test/integration/targets/``. Each test MUST have an ``aliases`` file to control test execution." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¯ ``ansible-test`` ã«ã‚ˆã£ã¦å®Ÿè¡Œã—ã€``test/integration/targets/`` é…下ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ã‹ã‚Œã¾ã™ã€‚å„テストã«ã¯ã€ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã‚’制御ã™ã‚‹ ``aliases`` ファイルãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:7 msgid "Aliases are explained in the following sections. Each alias must be on a separate line in an ``aliases`` file." msgstr "エイリアスã¯ã€ä»¥ä¸‹ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ã¾ã™ã€‚å„エイリアスã¯ã€``aliases`` ファイルã®åˆ¥ã®è¡Œã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:10 msgid "Groups" msgstr "グループ" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:12 msgid "Tests must be configured to run in exactly one group. This is done by adding the appropriate group to the ``aliases`` file." msgstr "テスト㯠1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€é©åˆ‡ãªã‚°ãƒ«ãƒ¼ãƒ—ã‚’ ``aliases`` ファイルã«è¿½åŠ ã™ã‚‹ã“ã¨ã§è¡Œã‚れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:14 msgid "The following are examples of some of the available groups:" msgstr "利用å¯èƒ½ãªä¸€éƒ¨ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:16 msgid "``shippable/posix/group1``" msgstr "``shippable/posix/group1``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:17 msgid "``shippable/windows/group2``" msgstr "``shippable/windows/group2``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:18 msgid "``shippable/azure/group3``" msgstr "``shippable/azure/group3``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:19 msgid "``shippable/aws/group1``" msgstr "``shippable/aws/group1``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:20 msgid "``shippable/cloud/group1``" msgstr "``shippable/cloud/group1``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:22 msgid "Groups are used to balance tests across multiple CI jobs to minimize test run time. They also improve efficiency by keeping tests with similar requirements running together." msgstr "グループã¯ã€è¤‡æ•°ã® CI ジョブ間ã§ãƒ†ã‚¹ãƒˆã®ãƒãƒ©ãƒ³ã‚¹ã‚’å–りã€ãƒ†ã‚¹ãƒˆã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã‚’最å°é™ã«ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚åŒæ§˜ã®è¦ä»¶ãŒä¸€ç·’ã«å®Ÿè¡Œã•れるテストを維æŒã™ã‚‹ã“ã¨ã§ã€åŠ¹çŽ‡æ€§ã‚‚å‘上ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:25 msgid "When selecting a group for a new test, use the same group as existing tests similar to the one being added. If more than one group is available, select one randomly." msgstr "æ–°è¦ãƒ†ã‚¹ãƒˆç”¨ã«ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã™ã‚‹å ´åˆã¯ã€è¿½åŠ ã™ã‚‹æ—¢å­˜ã®ãƒ†ã‚¹ãƒˆã¨åŒæ§˜ã®ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¾ã™ã€‚複数ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒåˆ©ç”¨å¯èƒ½ãªå ´åˆã¯ã€ãƒ©ãƒ³ãƒ€ãƒ ã« 1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:29 msgid "Setup" msgstr "設定" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:31 msgid "Aliases can be used to execute setup targets before running tests:" msgstr "エイリアスã¯ã€ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹å‰ã«è¨­å®šã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’実行ã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:33 msgid "``setup/once/TARGET`` - Run the target ``TARGET`` before the first target that requires it." msgstr "``setup/once/TARGET`` - ãれãŒå¿…è¦ãªæœ€åˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®å‰ã«ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ ``TARGET`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:34 msgid "``setup/always/TARGET`` - Run the target ``TARGET`` before each target that requires it." msgstr "``setup/always/TARGET`` - å¿…è¦ãªå„ターゲットã®å‰ã«ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ ``TARGET`` を実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:39 msgid "Aliases can be used to express some test requirements:" msgstr "エイリアスを使用ã™ã‚‹ã¨ã€ä¸€éƒ¨ã®ãƒ†ã‚¹ãƒˆè¦ä»¶ã‚’表ç¾ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:41 msgid "``needs/privileged`` - Requires ``--docker-privileged`` when running tests with ``--docker``." msgstr "``needs/privileged`` - ``--docker`` ã§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹å ´åˆã¯ã€``--docker-privileged`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:42 msgid "``needs/root`` - Requires running tests as ``root`` or with ``--docker``." msgstr "``needs/root`` - ``root`` ã¾ãŸã¯ ``--docker`` ã§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:43 msgid "``needs/ssh`` - Requires SSH connections to localhost (or the test container with ``--docker``) without a password." msgstr "``needs/ssh`` - パスワードãªã—ã§ localhost (ã¾ãŸã¯ ``--docker`` を使用ã—ãŸãƒ†ã‚¹ãƒˆã‚³ãƒ³ãƒ†ãƒŠãƒ¼) ã¸ã® SSH 接続を必è¦ã¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:44 msgid "``needs/httptester`` - Requires use of the http-test-container to run tests." msgstr "``needs/httptester`` - テストを実行ã™ã‚‹ã«ã¯ã€http-test-container を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:47 msgid "Dependencies" msgstr "ä¾å­˜é–¢ä¿‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:49 msgid "Some test dependencies are automatically discovered:" msgstr "一部ã®ãƒ†ã‚¹ãƒˆä¾å­˜é–¢ä¿‚ã¯è‡ªå‹•çš„ã«æ¤œå‡ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:51 msgid "Ansible role dependencies defined in ``meta/main.yml`` files." msgstr "``meta/main.yml`` ファイルã§å®šç¾©ã•れる Ansible ロールã®ä¾å­˜é–¢ä¿‚。" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:52 msgid "Setup targets defined with ``setup/*`` aliases." msgstr "``setup/*`` エイリアスã§å®šç¾©ã•れãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—。" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:53 msgid "Symbolic links from one target to a file in another target." msgstr "ã‚るターゲットã‹ã‚‰åˆ¥ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ãƒ•ァイルã¸ã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:55 msgid "Aliases can be used to declare dependencies that are not handled automatically:" msgstr "エイリアスを使用ã™ã‚‹ã¨ã€è‡ªå‹•çš„ã«å‡¦ç†ã•れãªã„ä¾å­˜é–¢ä¿‚を宣言ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:57 msgid "``needs/target/TARGET`` - Requires use of the test target ``TARGET``." msgstr "``needs/target/TARGET`` - テストターゲット ``TARGET`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:58 msgid "``needs/file/PATH`` - Requires use of the file ``PATH`` relative to the git root." msgstr "``needs/file/PATH`` - git ルートã¨é–¢é€£ã™ã‚‹ãƒ•ァイル ``PATH`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:61 msgid "Skipping" msgstr "スキップ" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:63 msgid "Aliases can be used to skip platforms using one of the following:" msgstr "エイリアスを使用ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãƒ—ラットフォームをスキップã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:65 msgid "``skip/freebsd`` - Skip tests on FreeBSD." msgstr "``skip/freebsd`` - FreeBSD ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:66 msgid "``skip/osx`` - Skip tests on macOS." msgstr "``skip/osx`` - macOS ã§ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:67 msgid "``skip/rhel`` - Skip tests on RHEL." msgstr "``skip/rhel`` - RHEL ã§ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:68 msgid "``skip/docker`` - Skip tests when running in a Docker container." msgstr "``skip/docker`` - Docker コンテナーã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:70 msgid "Platform versions, as specified using the ``--remote`` option with ``/`` removed, can also be skipped:" msgstr "``--remote`` オプション㧠``/`` を削除ã—ã¦æŒ‡å®šã—ãŸãƒ—ラットフォームãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚‚スキップã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:72 msgid "``skip/freebsd11.1`` - Skip tests on FreeBSD 11.1." msgstr "``skip/freebsd11.1`` - FreeBSD 11.1 ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:73 msgid "``skip/rhel7.6`` - Skip tests on RHEL 7.6." msgstr "``skip/rhel7.6`` - RHEL 7.6 ã§ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:75 msgid "Windows versions, as specified using the ``--windows`` option can also be skipped:" msgstr "``--windows`` オプションを使用ã—ã¦æŒ‡å®šã™ã‚‹ Windows ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚‚スキップã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:77 msgid "``skip/windows/2008`` - Skip tests on Windows Server 2008." msgstr "``skip/windows/2008`` - Windows Server 2008 ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:78 msgid "``skip/windows/2012-R2`` - Skip tests on Windows Server 2012 R2." msgstr "``skip/windows/2012-R2`` - Windows Server 2012 R2 ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:80 msgid "Aliases can be used to skip Python major versions using one of the following:" msgstr "エイリアスを使用ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã‚’使用ã—㦠Python ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’スキップã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:82 msgid "``skip/python2`` - Skip tests on Python 2.x." msgstr "``skip/python2`` - Python 2.x ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:83 msgid "``skip/python3`` - Skip tests on Python 3.x." msgstr "``skip/python3`` - Python 3.x ã®ãƒ†ã‚¹ãƒˆã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:85 msgid "For more fine grained skipping, use conditionals in integration test playbooks, such as:" msgstr "より詳細ãªã‚¹ã‚­ãƒƒãƒ—を行ã†ã«ã¯ã€çµ±åˆãƒ†ã‚¹ãƒˆã® Playbook ã§æ¡ä»¶ã‚’使用ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:93 msgid "Miscellaneous" msgstr "ãã®ä»–" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:95 msgid "There are several other aliases available as well:" msgstr "ãã®ä»–ã«ã‚‚利用ã§ãるエイリアスãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:97 msgid "``destructive`` - Requires ``--allow-destructive`` to run without ``--docker`` or ``--remote``." msgstr "``destructive`` - ``--docker`` ã¾ãŸã¯ ``--remote`` ãªã—ã§ ``--allow-destructive`` を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:98 msgid "``hidden`` - Target is ignored. Usable as a dependency. Automatic for ``setup_`` and ``prepare_`` prefixed targets." msgstr "``hidden`` - ターゲットã¯ç„¡è¦–ã•れã¾ã™ã€‚ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚プレフィックス ``setup_`` ãŠã‚ˆã³ ``prepare_`` ãŒä»˜ã‘られãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«å¯¾ã™ã‚‹è‡ªå‹•化。" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:101 msgid "Unstable" msgstr "Unstable" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:103 msgid "Tests which fail sometimes should be marked with the ``unstable`` alias until the instability has been fixed. These tests will continue to run for pull requests which modify the test or the module under test." msgstr "時々失敗ã™ã‚‹ãƒ†ã‚¹ãƒˆã¯ã€ä¸å®‰å®šæ€§ãŒä¿®æ­£ã•れるã¾ã§ã€``unstable`` エイリアスã§ãƒžãƒ¼ã‚¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€ãƒ†ã‚¹ãƒˆã¾ãŸã¯ãƒ†ã‚¹ãƒˆå¯¾è±¡ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’変更ã™ã‚‹ãƒ—ãƒ«è¦æ±‚ã«å¯¾ã—ã¦å¼•ãç¶šã実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:106 msgid "This avoids unnecessary test failures for other pull requests, as well as tests on merge runs and nightly CI jobs." msgstr "ã“れã«ã‚ˆã‚Šã€ä»–ã®ãƒ—ãƒ«è¦æ±‚ã«å¯¾ã™ã‚‹ä¸è¦ãªãƒ†ã‚¹ãƒˆã®å¤±æ•—ã‚„ã€ãƒžãƒ¼ã‚¸ã®å®Ÿè¡ŒãŠã‚ˆã³æ¯Žå¤œã® CI ジョブã®ãƒ†ã‚¹ãƒˆã‚‚回é¿ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:108 msgid "There are two ways to run unstable tests manually:" msgstr "ä¸å®‰å®šãªãƒ†ã‚¹ãƒˆã‚’手動ã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:110 msgid "Use the ``--allow-unstable`` option for ``ansible-test``" msgstr "``ansible-test`` ã«ã¯ ``--allow-unstable`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:111 msgid "Prefix the test name with ``unstable/`` when passing it to ``ansible-test``." msgstr "ãれを ``ansible-test`` ã«æ¸¡ã™å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆåã®å‰ã«ãƒ—レフィックス ``unstable/`` を付ã‘ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:113 msgid "Tests will be marked as unstable by a member of the Ansible Core Team. GitHub issues_ will be created to track each unstable test." msgstr "テストã¯ã€Ansible Core Team ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã‚ˆã£ã¦ Unstable ã¨è¡¨ç¤ºã•れã¾ã™ã€‚GitHub å•題_ ãŒä½œæˆã•れã€ä¸å®‰å®šãªå„テストを追跡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:117 msgid "Disabled" msgstr "Disabled" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:119 msgid "Tests which always fail should be marked with the ``disabled`` alias until they can be fixed." msgstr "常ã«å¤±æ•—ã™ã‚‹ãƒ†ã‚¹ãƒˆã§ã¯ã€ä¿®æ­£ã•れるã¾ã§ã€``disabled`` ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ãƒžãƒ¼ã‚¯ã•れる必è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:121 msgid "Disabled tests are automatically skipped." msgstr "無効ã«ã•れãŸãƒ†ã‚¹ãƒˆã¯è‡ªå‹•çš„ã«ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:123 msgid "There are two ways to run disabled tests manually:" msgstr "無効ã«ã•れãŸãƒ†ã‚¹ãƒˆã‚’手動ã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:125 msgid "Use the ``--allow-disabled`` option for ``ansible-test``" msgstr "``ansible-test`` ã«ã¯ ``--allow-disabled`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:126 msgid "Prefix the test name with ``disabled/`` when passing it to ``ansible-test``." msgstr "ãれを ``ansible-test`` ã«æ¸¡ã™å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆåã®å‰ã«ãƒ—レフィックス ``disabled/`` を付ã‘ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:128 msgid "Tests will be marked as disabled by a member of the Ansible Core Team. GitHub issues_ will be created to track each disabled test." msgstr "テストã¯ã€Ansible Core Team ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã‚ˆã£ã¦ç„¡åйã¨ãƒžãƒ¼ã‚¯ã•れã¾ã™ã€‚GitHub å•題_ ãŒä½œæˆã•れã€ç„¡åйã«ã•れãŸå„テストを追跡ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:132 msgid "Unsupported" msgstr "Unsupported" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:134 msgid "Tests which cannot be run in CI should be marked with the ``unsupported`` alias. Most tests can be supported through the use of simulators and/or cloud plugins." msgstr "CI ã§å®Ÿè¡Œã§ããªã„テストã«ã¯ã€``unsupported`` エイリアスã®ãƒžãƒ¼ã‚¯ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ãƒ†ã‚¹ãƒˆã¯ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚„クラウドプラグインを使用ã™ã‚‹ã“ã¨ã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:137 msgid "However, if that is not possible then marking a test as unsupported will prevent it from running in CI." msgstr "ãŸã ã—ã€ãƒ†ã‚¹ãƒˆãŒä½¿ç”¨ã§ããªã„å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆã‚’ unsupported ã¨è¡¨ç¤ºã™ã‚‹ã¨ã€CI ã§ãƒ†ã‚¹ãƒˆã‚’実行ã§ããªããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:139 msgid "There are two ways to run unsupported tests manually:" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ãƒ†ã‚¹ãƒˆã‚’手動ã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:141 msgid "Use the ``--allow-unsupported`` option for ``ansible-test``" msgstr "``ansible-test`` ã«ã¯ ``--allow-unsupported`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:142 msgid "Prefix the test name with ``unsupported/`` when passing it to ``ansible-test``." msgstr "ãれを ``ansible-test`` ã«æ¸¡ã™å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆåã®å‰ã«ãƒ—レフィックス ``unsupported/`` を付ã‘ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:144 msgid "Tests will be marked as unsupported by the contributor of the test." msgstr "テストã¯ã€ãƒ†ã‚¹ãƒˆã®è²¢çŒ®è€…ã«ã‚ˆã£ã¦ unsupported ã¨ãƒžãƒ¼ã‚¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:147 msgid "Cloud" msgstr "クラウド" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:149 msgid "Tests for cloud services and other modules that require access to external APIs usually require special support for testing in CI." msgstr "通常ã€å¤–部 API ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¿…è¦ã¨ã™ã‚‹ã‚¯ãƒ©ã‚¦ãƒ‰ã‚µãƒ¼ãƒ“スãŠã‚ˆã³ãã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ†ã‚¹ãƒˆã«ã¯ã€CI ã§ã®ãƒ†ã‚¹ãƒˆã«ç‰¹åˆ¥ãªã‚µãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:151 msgid "These require an additional alias to indicate the required test plugin." msgstr "ã“れらã«ã¯ã€å¿…è¦ãªãƒ†ã‚¹ãƒˆãƒ—ラグインを指定ã™ã‚‹ãŸã‚ã«è¿½åŠ ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:153 msgid "Some of the available aliases are:" msgstr "利用å¯èƒ½ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã«ã¯ã€ä»¥ä¸‹ã®ã‚‚ã®ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:155 msgid "``cloud/aws``" msgstr "``cloud/aws``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:156 msgid "``cloud/azure``" msgstr "``cloud/azure``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:157 msgid "``cloud/cs``" msgstr "``cloud/cs``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:158 msgid "``cloud/digitalocean``" msgstr "``cloud/digitalocean``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:159 msgid "``cloud/foreman``" msgstr "``cloud/foreman``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:160 msgid "``cloud/openshift``" msgstr "``cloud/openshift``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:161 msgid "``cloud/tower``" msgstr "``cloud/tower``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:162 msgid "``cloud/vcenter``" msgstr "``cloud/vcenter``" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:165 msgid "Untested" msgstr "未テスト" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:167 msgid "Every module and plugin should have integration tests, even if the tests cannot be run in CI." msgstr "テストを CI ã§å®Ÿè¡Œã§ããªã„å ´åˆã§ã‚‚ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã«çµ±åˆãƒ†ã‚¹ãƒˆãŒå«ã¾ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:170 msgid "Issues" msgstr "å•題" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:172 msgid "Tests that are marked as unstable_ or disabled_ will have an issue created to track the status of the test. Each issue will be assigned to one of the following projects:" msgstr "unstable_ ã¾ãŸã¯ disabled_ ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れã¦ã„るテストã«ã¯ã€ãƒ†ã‚¹ãƒˆã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’追跡ã™ã‚‹å•題ãŒä½œæˆã•れã¾ã™ã€‚ãれãžã‚Œã®å•題ã¯ä»¥ä¸‹ã®ãƒ—ロジェクトã®ã„ãšã‚Œã‹ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:175 msgid "`AWS `_" msgstr "`AWS `_" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:176 msgid "`Azure `_" msgstr "`Azure `_" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:177 msgid "`Windows `_" msgstr "`Windows `_" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:178 msgid "`General `_" msgstr "`General `_" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:181 msgid "Questions" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚" #: ../../rst/dev_guide/testing/sanity/integration-aliases.rst:183 msgid "For questions about integration tests reach out to @mattclay or @gundalow on GitHub or the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã«é–¢ã™ã‚‹è³ªå•ã¯ã€GitHub ã§ @mattclay ã‚‚ã—ã㯠@gundalowã€ã¾ãŸã¯``#ansible-devel``ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/line-endings.rst:2 msgid "line-endings" msgstr "行末" #: ../../rst/dev_guide/testing/sanity/line-endings.rst:4 msgid "All files must use ``\\n`` for line endings instead of ``\\r\\n``." msgstr "ã™ã¹ã¦ã®ãƒ•ァイルã¯ã€``\\r\\n" "`` ã§ã¯ãªãã€è¡Œæœ«ã« ``\\n" "`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/metaclass-boilerplate.rst:2 msgid "metaclass-boilerplate" msgstr "metaclass-boilerplate" #: ../../rst/dev_guide/testing/sanity/metaclass-boilerplate.rst:4 msgid "Most Python files should include the following boilerplate at the top of the file, right after the comment header and ``from __future__ import``:" msgstr "ã»ã¨ã‚“ã©ã® Python ファイルã«ã¯ã€ãƒ•ァイルã®ä¸Šéƒ¨ã€ã‚³ãƒ¡ãƒ³ãƒˆãƒ˜ãƒƒãƒ€ãƒ¼ã®ãŠã‚ˆã³ ``from __future__ import`` ã®ç›´å¾Œã«æ¬¡ã® boilerplate ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/metaclass-boilerplate.rst:12 msgid "Python 2 has \"new-style classes\" and \"old-style classes\" whereas Python 3 only has new-style classes. Adding the ``__metaclass__ = type`` boilerplate makes every class defined in that file into a new-style class as well." msgstr "Python 2 ã«ã¯ã€Œæ–°ã‚¹ã‚¿ã‚¤ãƒ«ã®ã‚¯ãƒ©ã‚¹ã€ãŠã‚ˆã³ã€Œæ—§ã‚¹ã‚¿ã‚¤ãƒ«ã®ã‚¯ãƒ©ã‚¹ã€ãŒä½¿ç”¨ã•れã¾ã™ãŒã€Python 3 ã«ã¯æ–°ã‚¹ã‚¿ã‚¤ãƒ«ã®ã‚¯ãƒ©ã‚¹ã®ã¿ãŒä½¿ç”¨ã•れã¾ã™ã€‚ã¾ãŸã€``__metaclass__ = type`` boilerplate を追加ã™ã‚‹ã¨ã€ãã®ãƒ•ァイルã§å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ãŒæ–°ã—ã„スタイルã®ã‚¯ãƒ©ã‚¹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-assert.rst:2 msgid "no-assert" msgstr "assert ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-assert.rst:4 msgid "Do not use ``assert`` in production Ansible python code. When running Python with optimizations, Python will remove ``assert`` statements, potentially allowing for unexpected behavior throughout the Ansible code base." msgstr "実稼åƒç’°å¢ƒã® Ansible Python コード㧠``assert`` を使用ã—ãªã„ã§ãã ã•ã„。最é©åŒ–ã§ Python を実行ã™ã‚‹ã¨ã€Python 㯠``assert`` ステートメントを削除ã™ã‚‹ã¨ã€Ansible ã®ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹å…¨ä½“ã§äºˆæœŸã—ãªã„動作ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-assert.rst:8 msgid "Instead of using ``assert`` you should utilize simple ``if`` statements, that result in raising an exception. There is a new exception called ``AnsibleAssertionError`` that inherits from ``AnsibleError`` and ``AssertionError``. When possible, utilize a more specific exception than ``AnsibleAssertionError``." msgstr "``assert`` を使用ã™ã‚‹ä»£ã‚りã«ã€ç°¡å˜ãª ``if`` ステートメントを利用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®çµæžœã€ä¾‹å¤–ãŒç™ºç”Ÿã—ã¾ã™ã€‚``AnsibleError`` ãŠã‚ˆã³ ``AssertionError`` ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ ``AnsibleAssertionError`` ã¨å‘¼ã°ã‚Œã‚‹æ–°ã—ã„例外ãŒã‚りã¾ã™ã€‚å¯èƒ½ã§ã‚れã°ã€``AnsibleAssertionError`` より具体的ãªä¾‹å¤–を利用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/no-assert.rst:14 msgid "Modules will not have access to ``AnsibleAssertionError`` and should instead raise ``AssertionError``, a more specific exception, or just use ``module.fail_json`` at the failure point." msgstr "モジュール㯠``AnsibleAssertionError`` ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„ãŸã‚ã€ä»£ã‚り㫠``AssertionError`` を高ãã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã‚ã‚‹ã„ã¯ã€éšœå®³æ®µéšŽã§ ``module.fail_json`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-basestring.rst:2 msgid "no-basestring" msgstr "basestring ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-basestring.rst:4 msgid "Do not use ``isinstance(s, basestring)`` as basestring has been removed in Python3. You can import ``string_types``, ``binary_type``, or ``text_type`` from ``ansible.module_utils.six`` and then use ``isinstance(s, string_types)`` or ``isinstance(s, (binary_type, text_type))`` instead." msgstr "Python3 ã§ã¯ ``isinstance(s, basestring)`` をベース文字列ã‹ã‚‰å‰Šé™¤ã—ãªã„ã§ãã ã•ã„。``string_types``ã€``binary_type``ã€ã¾ãŸã¯ ``text_type`` ã‚’ ``ansible.module_utils.six`` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ã‹ã‚‰ã€ä»£ã‚り㫠``isinstance(s, string_types)`` ã¾ãŸã¯ ``isinstance(s, (binary_type, text_type))`` を使用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-basestring.rst:9 msgid "If this is part of code to convert a string to a particular type, ``ansible.module_utils.common.text.converters`` contains several functions that may be even better for you: ``to_text``, ``to_bytes``, and ``to_native``." msgstr "ã“ã‚ŒãŒæ–‡å­—列を特定ã®åž‹ã«å¤‰æ›ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã§ã‚ã‚‹å ´åˆã€``ansible.module_utils.common.text.converters`` ã«ã¯ã€ã‚ˆã‚Šè‰¯ã„関数ãŒã„ãã¤ã‹å«ã¾ã‚Œã¦ã„ã¾ã™ (``to_text``ã€``to_bytes``ã€ãŠã‚ˆã³ ``to_native``)。" #: ../../rst/dev_guide/testing/sanity/no-dict-iteritems.rst:2 msgid "no-dict-iteritems" msgstr "dict-iteritems ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-dict-iteritems.rst:4 msgid "The ``dict.iteritems`` method has been removed in Python 3. There are two recommended alternatives:" msgstr "ã“ã® ``dict.iteritems`` メソッドã¯ã€Python 3 ã§å‰Šé™¤ã•れã¾ã—ãŸã€‚推奨ã•れる代替手段㌠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-dict-iterkeys.rst:2 msgid "no-dict-iterkeys" msgstr "dict-iterkeys ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-dict-iterkeys.rst:4 msgid "The ``dict.iterkeys`` method has been removed in Python 3. Use the following instead:" msgstr "ã“ã® ``dict.iterkeys`` メソッドã¯ã€Python 3 ã§å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚りã«ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-dict-itervalues.rst:2 msgid "no-dict-itervalues" msgstr "dict-itervalues ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-dict-itervalues.rst:4 msgid "The ``dict.itervalues`` method has been removed in Python 3. There are two recommended alternatives:" msgstr "ã“ã® ``dict.itervalues`` メソッドã¯ã€Python 3 ã§å‰Šé™¤ã•れã¾ã—ãŸã€‚推奨ã•れる代替手段㌠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-get-exception.rst:2 msgid "no-get-exception" msgstr "get-exception ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-get-exception.rst:4 msgid "We created a function, ``ansible.module_utils.pycompat24.get_exception`` to help retrieve exceptions in a manner compatible with Python 2.4 through Python 3.6. We no longer support Python 2.4 and Python 2.5 so this is extraneous and we want to deprecate the function. Porting code should look something like this:" msgstr "Python 2.4 ~ Python 3.6 ã¨äº’æ›æ€§ãŒã‚る方法ã§ä¾‹å¤–ã‚’å–å¾—ã™ã‚‹ã®ã«å½¹ç«‹ã¤é–¢æ•° ``ansible.module_utils.pycompat24.get_exception`` を作æˆã—ã¾ã—ãŸã€‚Python 2.4 ãŠã‚ˆã³ Python 2.5 ã¯ã‚µãƒãƒ¼ãƒˆã•れãªããªã£ãŸãŸã‚ã€ã“れã¯å¤–部ã®ã‚‚ã®ã§ã‚りã€ã“ã®é–¢æ•°ã‚’廃止ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ç§»æ¤ã‚³ãƒ¼ãƒ‰ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:2 msgid "no-illegal-filenames" msgstr "䏿­£ãªãƒ•ァイルåã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:4 msgid "Files and directories should not contain illegal characters or names so that Ansible can be checked out on any Operating System." msgstr "ファイルã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã¯ã€Ansible ã‚’ã©ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã‚‚ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã§ãるよã†ã«ã€ä¸æ­£ãªæ–‡å­—ã‚„åå‰ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:8 msgid "Illegal Characters" msgstr "䏿­£ãªæ–‡å­—" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:10 msgid "The following characters are not allowed to be used in any part of the file or directory name;" msgstr "ä»¥ä¸‹ã®æ–‡å­—ã¯ã€ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®åå‰ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:13 msgid "``<``" msgstr "``<``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:14 msgid "``>``" msgstr "``>``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:15 msgid "``:``" msgstr "``:``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:16 msgid "``\"``" msgstr "``\"``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:17 msgid "``/``" msgstr "``/``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:18 msgid "``\\``" msgstr "``\\``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:19 msgid "``|``" msgstr "``|``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:20 msgid "``?``" msgstr "``?``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:21 msgid "``*``" msgstr "``*``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:22 msgid "Any characters whose integer representations are in the range from 0 through to 31 like ``\\n``" msgstr "整数表示㌠0 ã‹ã‚‰ 31 ã¾ã§ã®æ–‡å­— (例: ``\\n" "``)" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:24 msgid "The following characters are not allowed to be used as the last character of a file or directory;" msgstr "æ¬¡ã®æ–‡å­—ã¯ã€ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®æœ€å¾Œã®æ–‡å­—ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:27 msgid "``.``" msgstr "``.``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:28 msgid "``\" \"`` (just the space character)" msgstr "``\" \"`` (空白文字ã®ã¿)" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:31 msgid "Illegal Names" msgstr "䏿­£ãªåå‰" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:33 msgid "The following names are not allowed to be used as the name of a file or directory excluding the extension;" msgstr "以下ã®åå‰ã¯ã€æ‹¡å¼µå­ã‚’除ã„ã¦ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®åå‰ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:36 msgid "``CON``" msgstr "``CON``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:37 msgid "``PRN``" msgstr "``PRN``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:38 msgid "``AUX``" msgstr "``AUX``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:39 msgid "``NUL``" msgstr "``NUL``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:40 msgid "``COM1``" msgstr "``COM1``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:41 msgid "``COM2``" msgstr "``COM2``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:42 msgid "``COM3``" msgstr "``COM3``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:43 msgid "``COM4``" msgstr "``COM4``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:44 msgid "``COM5``" msgstr "``COM5``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:45 msgid "``COM6``" msgstr "``COM6``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:46 msgid "``COM7``" msgstr "``COM7``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:47 msgid "``COM8``" msgstr "``COM8``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:48 msgid "``COM9``" msgstr "``COM9``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:49 msgid "``LPT1``" msgstr "``LPT1``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:50 msgid "``LPT2``" msgstr "``LPT2``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:51 msgid "``LPT3``" msgstr "``LPT3``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:52 msgid "``LPT4``" msgstr "``LPT4``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:53 msgid "``LPT5``" msgstr "``LPT5``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:54 msgid "``LPT6``" msgstr "``LPT6``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:55 msgid "``LPT7``" msgstr "``LPT7``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:56 msgid "``LPT8``" msgstr "``LPT8``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:57 msgid "``LPT9``" msgstr "``LPT9``" #: ../../rst/dev_guide/testing/sanity/no-illegal-filenames.rst:59 msgid "For example, the file ``folder/COM1``, ``folder/COM1.txt`` are illegal but ``folder/COM1-file`` or ``folder/COM1-file.txt`` is allowed." msgstr "ãŸã¨ãˆã°ã€``folder/COM1`` ファイルã¾ãŸã¯ ``folder/COM1.txt`` ファイルã¯è¨±å¯ã•れã¾ã›ã‚“ãŒã€``folder/COM1-file`` ファイルã¾ãŸã¯ ``folder/COM1-file.txt`` ファイルã¯è¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-main-display.rst:2 msgid "no-main-display" msgstr "main-display ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-main-display.rst:4 msgid "As of Ansible 2.8, ``Display`` should no longer be imported from ``__main__``." msgstr "Ansible 2.8 以é™ã€``Display`` 㯠``__main__`` ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/no-main-display.rst:6 msgid "``Display`` is now a singleton and should be utilized like the following::" msgstr "``Display`` ã¯ã‚·ãƒ³ã‚°ãƒ«ãƒˆãƒ³ã§ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-main-display.rst:11 msgid "There is no longer a need to attempt ``from __main__ import display`` inside a ``try/except`` block." msgstr "``try/except`` ブロック内㧠``from __main__ import display`` を試行ã™ã‚‹å¿…è¦ãŒãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing/sanity/no-smart-quotes.rst:2 msgid "no-smart-quotes" msgstr "スマート引用符ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-smart-quotes.rst:4 msgid "Smart quotes (``â€â€œâ€˜â€™``) should not be used. Use plain ascii quotes (``\"'``) instead." msgstr "スマート引用符 (``â€â€œâ€˜â€™``) ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€æ¨™æº–ã® ascii 引用符 (``\"'``) を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-tests-as-filters.rst:4 msgid "no-tests-as-filters" msgstr "テストをフィルターã¨ã—ã¦ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-tests-as-filters.rst:6 msgid "Using Ansible provided Jinja2 tests as filters will be removed in Ansible 2.9." msgstr "Ansible ãŒæä¾›ã™ã‚‹ Jinja2 テストをフィルターã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã€Ansible 2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-tests-as-filters.rst:8 msgid "Prior to Ansible 2.5, Jinja2 tests included within Ansible were most often used as filters. The large difference in use is that filters are referenced as ``variable | filter_name`` while Jinja2 tests are referenced as ``variable is test_name``." msgstr "Ansible 2.5 以å‰ã¯ã€Ansible ã«å«ã¾ã‚Œã‚‹ Jinja2 テストã¯ã€ã»ã¨ã‚“ã©ãŒãƒ•ィルターã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸã€‚使用方法ã®å¤§ããªé•ã„ã¯ã€ãƒ•ィルター㯠``variable | filter_name`` ã¨ã—ã¦å‚ç…§ã•れるã®ã«å¯¾ã—ã€Jinja2 テスト㯠``variable is test_name`` ã¨ã—ã¦å‚ç…§ã•れるã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-tests-as-filters.rst:10 msgid "Jinja2 tests are used for comparisons, whereas filters are used for data manipulation, and have different applications in Jinja2. This change is to help differentiate the concepts for a better understanding of Jinja2, and where each can be appropriately used." msgstr "Jinja2 ãƒ†ã‚¹ãƒˆã¯æ¯”較ã®ãŸã‚ã«ä½¿ç”¨ã•れã€ãƒ•ィルターã¯ãƒ‡ãƒ¼ã‚¿æ“作ã®ãŸã‚ã«ä½¿ç”¨ã•れã€Jinja2 ã§ãれãžã‚Œç”¨é€”ãŒç•°ãªã‚Šã¾ã™ã€‚ã“ã®å¤‰æ›´ã¯ã€Jinja2 ã®ç†è§£ã‚’æ·±ã‚ã‚‹ãŸã‚ã«æ¦‚念を区別ã—ã€ãれãžã‚Œã‚’é©åˆ‡ã«ä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-tests-as-filters.rst:12 msgid "As of Ansible 2.5 using an Ansible provided Jinja2 test with filter syntax will display a deprecation error." msgstr "Ansible 2.5 以é™ã§ã¯ã€Ansible ãŒæä¾›ã™ã‚‹ Jinja2 テストをフィルター構文ã§ä½¿ç”¨ã™ã‚‹ã¨ã€éžæŽ¨å¥¨ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-underscore-variable.rst:4 msgid "no-underscore-variable" msgstr "no-underscore-variable" #: ../../rst/dev_guide/testing/sanity/no-underscore-variable.rst:6 msgid "In the future, Ansible may use the identifier ``_`` to internationalize its message strings. To be ready for that, we need to make sure that there are no conflicting identifiers defined in the code base." msgstr "今後ã€Ansible ã¯ã€è­˜åˆ¥å­ ``_`` を使用ã—ã¦ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æ–‡å­—列を国際化ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®ãŸã‚ã«ã¯ã€ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã§å®šç¾©ã•れã¦ã„る識別å­ãŒç«¶åˆã—ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-underscore-variable.rst:10 msgid "In common practice, ``_`` is frequently used as a dummy variable (a variable to receive a value from a function where the value is useless and never used). In Ansible, we're using the identifier ``dummy`` for this purpose instead." msgstr "ä¸€èˆ¬çš„ãªæ…£è¡Œã§ã¯ã€``_`` ã¯ã€ãƒ€ãƒŸãƒ¼å¤‰æ•° (値ãŒå½¹ã«ç«‹ãŸãšã€ä½¿ç”¨ã•れãªã„関数ã‹ã‚‰å€¤ã‚’å—ã‘å–る変数) ã¨ã—ã¦é »ç¹ã«ä½¿ç”¨ã•れã¾ã™ã€‚Ansibleã§ã¯ã€ä»£ã‚りã«ã“ã®ç›®çš„ã®ãŸã‚ã«è­˜åˆ¥å­ ``dummy`` を使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-underscore-variable.rst:14 msgid "Example of unfixed code:" msgstr "未修正コードã®ä¾‹:" #: ../../rst/dev_guide/testing/sanity/no-underscore-variable.rst:23 msgid "Example of fixed code:" msgstr "修正ã—ãŸã‚³ãƒ¼ãƒ‰ã®ä¾‹:" #: ../../rst/dev_guide/testing/sanity/no-unicode-literals.rst:2 msgid "no-unicode_literals" msgstr "no-unicode_literals" #: ../../rst/dev_guide/testing/sanity/no-unicode-literals.rst:4 msgid "The use of :code:`from __future__ import unicode_literals` has been deemed an anti-pattern. The problems with it are:" msgstr ":code:`from __future__ import unicode_literals` ã®ä½¿ç”¨ã¯ã‚¢ãƒ³ãƒãƒ‘ターンã¨è¦‹ãªã•れã¾ã™ã€‚ãã®å•é¡Œã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unicode-literals.rst:7 msgid "It makes it so one can't jump into the middle of a file and know whether a bare literal string is a byte string or text string. The programmer has to first check the top of the file to see if the import is there." msgstr "ã“れã«ã‚ˆã‚Šã€ãƒ•ァイルã®é€”中ã«ã‚¸ãƒ£ãƒ³ãƒ—ã—ã¦ã€è£¸ã®ãƒªãƒ†ãƒ©ãƒ«æ–‡å­—列ãŒãƒã‚¤ãƒˆæ–‡å­—列ãªã®ã‹ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ãªã®ã‹ã‚’知るã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚プログラマーã¯ã€æœ€åˆã«ãƒ•ァイルã®å…ˆé ­ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒå­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unicode-literals.rst:10 msgid "It removes the ability to define native strings (a string which should be a byte string on python2 and a text string on python3) via a string literal." msgstr "ã“れã«ã‚ˆã‚Šã€æ–‡å­—列リテラルを介ã—ã¦ãƒã‚¤ãƒ†ã‚£ãƒ–文字列 (python2 ã§ã¯ãƒã‚¤ãƒˆæ–‡å­—列ã€python3 ã§ã¯ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã§ã‚ã‚‹å¿…è¦ãŒã‚る文字列) を定義ã™ã‚‹æ©Ÿèƒ½ãŒå‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unicode-literals.rst:12 msgid "It makes for more context switching. A programmer could be reading one file which has `unicode_literals` and know that bare string literals are text strings but then switch to another file (perhaps tracing program execution into a third party library) and have to switch their understanding of what bare string literals are." msgstr "ãã®ãŸã‚ã€ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®åˆ‡ã‚Šæ›¿ãˆãŒå¤šããªã‚Šã¾ã™ã€‚プログラマーã¯ã€`unicode_literals` ã‚’å«ã‚€ã‚るファイルを読ã¿è¾¼ã‚“ã§ã„ã¦ã€è£¸ã®æ–‡å­—列リテラルãŒãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã§ã‚ã‚‹ã“ã¨ã‚’ç†è§£ï½“ã¦ã„ã¾ã™ãŒã€ãã®å¾Œã€åˆ¥ã®ãƒ•ァイル (ãŠãらãサードパーティーã®ãƒ©ã‚¤ãƒ–ラリーã¸ã®ãƒ—ログラム実行ã®è¿½è·¡) ã«æ›¿ãˆã¦ã€è£¸ã®æ–‡å­—列リテラルãŒä½•ã§ã‚ã‚‹ã‹ã®ç†è§£ã«åˆ‡ã‚Šæ›¿ãˆãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:2 msgid "no-unwanted-files" msgstr "ä¸è¦ãªãƒ•ァイルã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:4 msgid "Specific file types are allowed in certain directories:" msgstr "特定ã®ãƒ•ァイルタイプã¯ã€ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§è¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:6 msgid "``lib`` - All content must reside in the ``lib/ansible`` directory." msgstr "``lib`` - ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㯠``lib/ansible`` ディレクトリーã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:8 msgid "``lib/ansible`` - Only source code with one of the following extensions is allowed:" msgstr "``lib/ansible`` - ä»¥ä¸‹ã®æ‹¡å¼µæ©Ÿèƒ½ã®ã„ãšã‚Œã‹ã‚’æŒã¤ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:10 msgid "``*.cs`` - C#" msgstr "``*.cs`` - C#" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:11 msgid "``*.ps1`` - PowerShell" msgstr "``*.ps1`` - PowerShell" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:12 msgid "``*.psm1`` - PowerShell" msgstr "``*.psm1`` - PowerShell" #: ../../rst/dev_guide/testing/sanity/no-unwanted-files.rst:13 msgid "``*.py`` - Python" msgstr "``*.py`` - Python" #: ../../rst/dev_guide/testing/sanity/no-wildcard-import.rst:4 msgid "no-wildcard-import" msgstr "ワイルドカード㮠import ã¯ä½¿ç”¨ã—ãªã„" #: ../../rst/dev_guide/testing/sanity/no-wildcard-import.rst:6 msgid "Using :code:`import *` is a bad habit which pollutes your namespace, hinders debugging, and interferes with static analysis of code. For those reasons, we do want to limit the use of :code:`import *` in the ansible code. Change our code to import the specific names that you need instead." msgstr ":code:`import *` を使用ã™ã‚‹ã“ã¨ã¯ã€åå‰ç©ºé–“を汚染ã—ã€ãƒ‡ãƒãƒƒã‚°ã‚’妨ã’ã€ã‚³ãƒ¼ãƒ‰ã®é™çš„分æžã‚’妨ã’る悪ã„ç¿’æ…£ã§ã™ã€‚ã“れらã®ç†ç”±ã‹ã‚‰ã€Ansible コード㧠:code:`import *` ã®ä½¿ç”¨ã‚’制é™ã—ã¾ã™ã€‚代ã‚りã«ã€å¿…è¦ãªç‰¹å®šã®åå‰ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/no-wildcard-import.rst:11 msgid "Examples of unfixed code:" msgstr "未修正コードã®ä¾‹:" #: ../../rst/dev_guide/testing/sanity/no-wildcard-import.rst:22 msgid "Examples of fixed code:" msgstr "修正ã•れãŸã‚³ãƒ¼ãƒ‰ã®ä¾‹:" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:2 msgid "obsolete-files" msgstr "陳è…化ã—ãŸãƒ•ァイル" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:4 msgid "Directories in the Ansible source tree are sometimes made obsolete. Files should not exist in these directories. The new location (if any) is dependent on which directory has been made obsolete." msgstr "Ansible ソースツリー内ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯å»ƒæ­¢ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚ファイルã¯ã€ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å­˜åœ¨ã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“。新ã—ã„場所ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€ã©ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå»ƒæ­¢ã•れãŸã‹ã«ä¾å­˜ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:8 msgid "Below are some of the obsolete directories and their new locations:" msgstr "å¤ã„ディレクトリーã¨ãã®æ–°ã—ã„場所を以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:10 msgid "All of ``test/runner/`` is now under ``test/lib/ansible_test/`` instead. The organization of files in the new directory has changed." msgstr "ã™ã¹ã¦ã® ``test/runner/`` ã¯ã€ç¾åœ¨ã€ä»£ã‚り㫠``test/lib/ansible_test/`` ã«ã‚りã¾ã™ã€‚æ–°ã—ã„ディレクトリーã®ãƒ•ァイルã®ç·¨æˆãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:11 msgid "Most subdirectories of ``test/sanity/`` (with some exceptions) are now under ``test/lib/ansible_test/_util/controller/sanity/`` instead." msgstr "``test/sanity/``ã®ã‚µãƒ–ディレクトリーã®ã»ã¨ã‚“ã©ã¯ (例外ã‚り) ã€ä»£ã‚り㫠``test/lib/ansible_test/_util/controller/sanity/`` ã®ä¸‹ã«ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/obsolete-files.rst:13 msgid "This error occurs most frequently for open pull requests which add or modify files in directories which are now obsolete. Make sure the branch you are working from is current so that changes can be made in the correct location." msgstr "ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ã€ç¾åœ¨å¤ããªã£ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ•ァイルを追加ã¾ãŸã¯å¤‰æ›´ã™ã‚‹ã‚ªãƒ¼ãƒ—ンãªãƒ—ãƒ«è¦æ±‚ã«å¯¾ã—ã¦æœ€ã‚‚é »ç¹ã«ç™ºç”Ÿã—ã¾ã™ã€‚æ­£ã—ã„場所ã§å¤‰æ›´ã§ãるよã†ã«ã€ä½œæ¥­ã—ã¦ã„るブランãƒãŒç¾åœ¨ã®çŠ¶æ…‹ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/package-data.rst:2 msgid "package-data" msgstr "package-data" #: ../../rst/dev_guide/testing/sanity/package-data.rst:4 msgid "Verifies that the combination of ``MANIFEST.in`` and ``package_data`` from ``setup.py`` properly installs data files from within ``lib/ansible``" msgstr "``setup.py`` ã‹ã‚‰ ``MANIFEST.in`` 㨠``package_data`` を組ã¿åˆã‚ã›ã¦ã€``lib/ansible`` 内ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルãŒé©åˆ‡ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/pep8.rst:2 msgid "pep8" msgstr "pep8" #: ../../rst/dev_guide/testing/sanity/pep8.rst:4 msgid "Python static analysis for PEP 8 style guideline compliance." msgstr "PEP 8 スタイルã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚³ãƒ³ãƒ—ライアンスã«å¯¾ã™ã‚‹ Python é™çš„分æžã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/pep8.rst:6 msgid "See :ref:`testing_pep8` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`testing_pep8`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/pslint.rst:2 msgid "pslint" msgstr "pslint" #: ../../rst/dev_guide/testing/sanity/pslint.rst:4 msgid "PowerShell static analysis for common programming errors using `PSScriptAnalyzer `_." msgstr "`PSScriptAnalyzer `_ を使用ã—ãŸä¸€èˆ¬çš„ãªãƒ—ログラミングエラーã«é–¢ã™ã‚‹ PowerShell ã®é™çš„ãªåˆ†æžã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/pylint.rst:2 msgid "pylint" msgstr "pylint" #: ../../rst/dev_guide/testing/sanity/pylint-ansible-test.rst:6 #: ../../rst/dev_guide/testing/sanity/pylint.rst:4 msgid "Python static analysis for common programming errors." msgstr "一般的ãªãƒ—ログラミングエラーã«å¯¾ã™ã‚‹ Python ã®é™çš„分æžã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/pylint-ansible-test.rst:4 msgid "pylint-ansible-test" msgstr "pylint-ansible-test" #: ../../rst/dev_guide/testing/sanity/pylint-ansible-test.rst:8 msgid "A more strict set of rules applied to ``ansible-test``." msgstr "``ansible-test`` ã«é©ç”¨ã•れるより厳密ãªãƒ«ãƒ¼ãƒ«ã‚»ãƒƒãƒˆ" #: ../../rst/dev_guide/testing/sanity/release-names.rst:2 msgid "Release names" msgstr "リリースå" #: ../../rst/dev_guide/testing/sanity/release-names.rst:4 msgid "Verifies that the most recent release name has been added to ``./github/RELEASE_NAMES.yml``" msgstr "最新ã®ãƒªãƒªãƒ¼ã‚¹å㌠``./github/RELEASE_NAMES.yml`` ã«è¿½åŠ ã•れãŸã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/replace-urlopen.rst:2 msgid "replace-urlopen" msgstr "replace-urlopen" #: ../../rst/dev_guide/testing/sanity/replace-urlopen.rst:4 msgid "Use ``open_url`` from ``module_utils`` instead of ``urlopen``." msgstr "``urlopen`` ã®ä»£ã‚り㫠``module_utils`` ã‹ã‚‰ ``open_url`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/required-and-default-attributes.rst:2 msgid "required-and-default-attributes" msgstr "required-and-default-attributes" #: ../../rst/dev_guide/testing/sanity/required-and-default-attributes.rst:4 msgid "Use only one of ``default`` or ``required`` with ``FieldAttribute``." msgstr "``default`` ã¾ãŸã¯ ``required`` ã® 1 ã¤ã®ã¿ã‚’ ``FieldAttribute`` ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/rstcheck.rst:2 msgid "rstcheck" msgstr "rstcheck" #: ../../rst/dev_guide/testing/sanity/rstcheck.rst:4 msgid "Check reStructuredText files for syntax and formatting issues." msgstr "æ§‹æ–‡ãŠã‚ˆã³ãƒ•ォーマットã«é–¢ã™ã‚‹å•題ã¯ã€eStructuredTex ファイルを確èªã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/runtime-metadata.rst:2 msgid "runtime-metadata.yml" msgstr "runtime-metadata.yml" #: ../../rst/dev_guide/testing/sanity/runtime-metadata.rst:4 msgid "Validates the schema for:" msgstr "スキーマを検証ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/runtime-metadata.rst:6 msgid "ansible-core's ``lib/ansible/config/ansible_builtin_runtime.yml``" msgstr "ansible-core ã® ``lib/ansible/config/ansible_builtin_runtime.yml``" #: ../../rst/dev_guide/testing/sanity/runtime-metadata.rst:7 msgid "collection's ``meta/runtime.yml``" msgstr "コレクション㮠``meta/runtime.yml``" #: ../../rst/dev_guide/testing/sanity/sanity-docs.rst:2 msgid "sanity-docs" msgstr "sanity-docs" #: ../../rst/dev_guide/testing/sanity/sanity-docs.rst:4 msgid "Documentation for each ``ansible-test sanity`` test is required." msgstr "å„ ``ansible-test sanity`` テスト用ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/shebang.rst:2 msgid "shebang" msgstr "shebang" #: ../../rst/dev_guide/testing/sanity/shebang.rst:4 msgid "Most executable files should only use one of the following shebangs:" msgstr "実行ファイルã®ã»ã¨ã‚“ã©ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã® shebang ã®ã¿ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/shebang.rst:6 msgid "``#!/bin/sh``" msgstr "``#!/bin/sh``" #: ../../rst/dev_guide/testing/sanity/shebang.rst:7 msgid "``#!/bin/bash``" msgstr "``#!/bin/bash``" #: ../../rst/dev_guide/testing/sanity/shebang.rst:8 msgid "``#!/usr/bin/make``" msgstr "``#!/usr/bin/make``" #: ../../rst/dev_guide/testing/sanity/shebang.rst:9 msgid "``#!/usr/bin/env python``" msgstr "``#!/usr/bin/env python``" #: ../../rst/dev_guide/testing/sanity/shebang.rst:10 msgid "``#!/usr/bin/env bash``" msgstr "``#!/usr/bin/env bash``" #: ../../rst/dev_guide/testing/sanity/shebang.rst:12 msgid "NOTE: For ``#!/bin/bash``, any of the options ``eux`` may also be used, such as ``#!/bin/bash -eux``." msgstr "注記: ``#!/bin/bash`` ã®å ´åˆã¯ã€ã„ãšã‚Œã®ã‚ªãƒ—ション㮠``eux`` も使用ã§ãã¾ã™ (``#!/bin/bash -eux`` ãªã©)。" #: ../../rst/dev_guide/testing/sanity/shebang.rst:14 msgid "This does not apply to Ansible modules, which should not be executable and must always use ``#!/usr/bin/python``." msgstr "ã“れ㯠Ansible モジュールã«ã¯é©ç”¨ã•れã¾ã›ã‚“。ã“れã¯å®Ÿè¡Œå¯èƒ½ã§ã¯ãªãã€``#!/usr/bin/python`` を常ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/shebang.rst:16 msgid "Some exceptions are permitted. Ask if you have questions." msgstr "一部ã®ä¾‹å¤–ãŒè¨±å¯ã•れã¾ã™ã€‚ã”質å•ãŒã‚ã‚‹å ´åˆã¯ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/shellcheck.rst:2 msgid "shellcheck" msgstr "shellcheck" #: ../../rst/dev_guide/testing/sanity/shellcheck.rst:4 msgid "Static code analysis for shell scripts using the excellent `shellcheck `_ tool." msgstr "優れ㟠`shellcheck `_ ツールを使用ã—ã¦ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トã®é™çš„コード分æžã€‚" #: ../../rst/dev_guide/testing/sanity/symlinks.rst:2 msgid "symlinks" msgstr "symlinks" #: ../../rst/dev_guide/testing/sanity/symlinks.rst:4 msgid "Symbolic links are only permitted for files that exist to ensure proper tarball generation during a release." msgstr "シンボリックリンクã¯ã€ãƒªãƒªãƒ¼ã‚¹ä¸­ã«é©åˆ‡ãª tarball 生æˆã‚’ä¿è¨¼ã™ã‚‹ãƒ•ァイルã«ã®ã¿è¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/symlinks.rst:6 msgid "If other types of symlinks are needed for tests they must be created as part of the test." msgstr "テストã«ä»–ã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ãŒå¿…è¦ãªå ´åˆã¯ã€ãƒ†ã‚¹ãƒˆã®ä¸€éƒ¨ã¨ã—ã¦ä½œæˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/test-constraints.rst:2 msgid "test-constraints" msgstr "test-constraints" #: ../../rst/dev_guide/testing/sanity/test-constraints.rst:4 msgid "Constraints for test requirements should be in ``test/lib/ansible_test/_data/requirements/constraints.txt``." msgstr "テストè¦ä»¶ã®åˆ¶ç´„㯠``test/lib/ansible_test/_data/requirements/constraints.txt`` ã«ä¿å­˜ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:4 msgid "update-bundled" msgstr "update-bundled" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:6 msgid "Check whether any of our known bundled code needs to be updated for a new upstream release." msgstr "既知ã®ãƒãƒ³ãƒ‰ãƒ«ã•れãŸã‚³ãƒ¼ãƒ‰ãŒæ–°ã—ã„ã‚¢ãƒƒãƒ—ã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒªãƒªãƒ¼ã‚¹ç”¨ã«æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:8 msgid "This test can error in the following ways:" msgstr "ã“ã®ãƒ†ã‚¹ãƒˆã¯ä»¥ä¸‹ã®æ–¹æ³•ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:10 msgid "The bundled code is out of date with regard to the latest release on pypi. Update the code to the new version and update the version in _BUNDLED_METADATA to solve this." msgstr "ãƒãƒ³ãƒ‰ãƒ«ã•れãŸã‚³ãƒ¼ãƒ‰ã¯ pypi ã®æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ã«é–¢ã—ã¦å¤ããªã£ã¦ã„ã¾ã™ã€‚コードを新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã—ã€_BUNDLED_METADATA ã§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¦ã“れを解決ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:13 msgid "The code is lacking a _BUNDLED_METADATA variable. This typically happens when a bundled version is updated and we forget to add a _BUNDLED_METADATA variable to the updated file. Once that is added, this error should go away." msgstr "ã“ã®ã‚³ãƒ¼ãƒ‰ã«ã¯ _BUNDLED_METADATA 変数ãŒã‚りã¾ã›ã‚“。ã“れã¯é€šå¸¸ã€ãƒãƒ³ãƒ‰ãƒ«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæ›´æ–°ã•ã‚Œã€æ›´æ–°ã•れãŸãƒ•ァイル㫠_BUNDLED_METADATA 変数を追加ã—忘れãŸå ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚ãれãŒè¿½åŠ ã•れるã¨ã€ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ãªããªã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:17 msgid "A file has a _BUNDLED_METADATA variable but the file isn't specified in :file:`test/sanity/code-smell/update-bundled.py`. This typically happens when a new bundled library is added. Add the file to the `get_bundled_libs()` function in the `update-bundled.py` test script to solve this error." msgstr "ファイルã«ã¯ã€_BUNDLED_METADATA 変数ãŒã‚りã¾ã™ãŒã€ãã®ãƒ•ァイル㯠:file:`test/sanity/code-smell/update-bundled.py` ã§æŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。ã“れã¯é€šå¸¸ã€æ–°ã—ã„ãƒãƒ³ãƒ‰ãƒ«ãƒ©ã‚¤ãƒ–ラリーãŒè¿½åŠ ã•れãŸã¨ãã«ç™ºç”Ÿã—ã¾ã™ã€‚ã“ã®ã‚¨ãƒ©ãƒ¼ã‚’解決ã™ã‚‹ãŸã‚ã«ã€`update-bundled.py` テストスクリプト㮠`get_bundled_libs()` 関数ã«ãƒ•ァイルを追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:22 msgid "_BUNDLED_METADATA has the following fields:" msgstr "_BUNDLED_METADATA ã«ã¯ä»¥ä¸‹ã®ãƒ•ィールドãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst msgid "pypi_name" msgstr "pypi_name" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:24 msgid "Name of the bundled package on pypi" msgstr "pypi ã§ãƒãƒ³ãƒ‰ãƒ«ã•れãŸãƒ‘ッケージã®åå‰" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:26 msgid "Version of the package that we are including here" msgstr "ã“ã“ã«å«ã‚るパッケージã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst msgid "version_constraints" msgstr "version_constraints" #: ../../rst/dev_guide/testing/sanity/update-bundled.rst:28 msgid "Optional PEP440 specifier for the version range that we are bundling. Currently, the only valid use of this is to follow a version that is compatible with the Python stdlib when newer versions of the pypi package implement a new API." msgstr "ãƒãƒ³ãƒ‰ãƒ«ã™ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç¯„囲ã®ä»»æ„ã® PEP440 指定å­ã€‚ç¾åœ¨ã€ã“れã®å”¯ä¸€ã®æœ‰åйãªä½¿ç”¨æ³•ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® pypi ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãŒæ–°ã—ã„ API を実装ã™ã‚‹ã¨ãã«ã€Python stdlib ã¨äº’æ›æ€§ã®ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¾“ã†ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/use-argspec-type-path.rst:2 msgid "use-argspec-type-path" msgstr "use-argspec-type-path" #: ../../rst/dev_guide/testing/sanity/use-argspec-type-path.rst:4 msgid "The AnsibleModule argument_spec knows of several types beyond the standard python types. One of these is ``path``. When used, type ``path`` ensures that an argument is a string and expands any shell variables and tilde characters." msgstr "AnsibleModule ã® argument_spec ã¯ã€æ¨™æº–ã® python タイプ以外ã®è¤‡æ•°ã®ã‚¿ã‚¤ãƒ—ã‚’èªè­˜ã—ã¾ã™ã€‚ã“れらã®ã„ãšã‚Œã‹ãŒ ``path`` ã«ãªã‚Šã¾ã™ã€‚使用ã™ã‚‹ã¨ã€``path`` ã¨å…¥åŠ›ã—ã¦ã€å¼•æ•°ãŒæ–‡å­—列ã§ã€ã‚·ã‚§ãƒ«å¤‰æ•°ã¨ãƒãƒ«ãƒ€æ–‡å­—ã‚’æ‹¡å¼µã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/use-argspec-type-path.rst:8 msgid "This test looks for use of :func:`os.path.expanduser ` in modules. When found, it tells the user to replace it with ``type='path'`` in the module's argument_spec or list it as a false positive in the test." msgstr "ã“ã®ãƒ†ã‚¹ãƒˆã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ :func:`os.path.expanduser ` ã®ä½¿ç”¨ã‚’探ã—ã¾ã™ã€‚見ã¤ã‹ã£ãŸå ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® argument_spec ã§ ``type='path'`` ã«ç½®ãæ›ãˆã‚‹ã‹ã€ãƒ†ã‚¹ãƒˆã§èª¤æ¤œå‡ºã¨ã—ã¦ä¸€è¦§ã«æŒ™ã’られã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/use-compat-six.rst:2 msgid "use-compat-six" msgstr "use-compat-six" #: ../../rst/dev_guide/testing/sanity/use-compat-six.rst:4 msgid "Use ``six`` from ``module_utils`` instead of ``six``." msgstr "``six`` ã®ä»£ã‚り㫠``module_utils`` ã‹ã‚‰ ``six`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/validate-modules.rst:2 #: ../../rst/dev_guide/testing_validate-modules.rst:7 msgid "validate-modules" msgstr "validate-modules" #: ../../rst/dev_guide/testing/sanity/validate-modules.rst:4 msgid "Analyze modules for common issues in code and documentation." msgstr "コードãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ä¸€èˆ¬çš„ãªå•題ã«ã¤ã„ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’分æžã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing/sanity/validate-modules.rst:6 msgid "See :ref:`testing_validate-modules` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`testing_validate-modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing/sanity/yamllint.rst:2 msgid "yamllint" msgstr "yamllint" #: ../../rst/dev_guide/testing/sanity/yamllint.rst:4 msgid "Check YAML files for syntax and formatting issues." msgstr "YAML ファイルã«ãŠã‘ã‚‹æ§‹æ–‡ãŠã‚ˆã³ãƒ•ォーマットã®å•題を確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:7 msgid "Compile Tests" msgstr "コンパイルテスト" #: ../../rst/dev_guide/testing_compile.rst:12 #: ../../rst/dev_guide/testing_httptester.rst:10 msgid "Overview" msgstr "概è¦" #: ../../rst/dev_guide/testing_compile.rst:14 msgid "Compile tests check source files for valid syntax on all supported python versions:" msgstr "コンパイルテストã§ã¯ã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã™ã¹ã¦ã® python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®æ§‹æ–‡ãŒæœ‰åйã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:16 msgid "2.4 (Ansible 2.3 only)" msgstr "2.4 (Ansible 2.3 ã®ã¿)" #: ../../rst/dev_guide/testing_compile.rst:17 msgid "2.6" msgstr "2.6" #: ../../rst/dev_guide/testing_compile.rst:18 msgid "2.7" msgstr "2.7" #: ../../rst/dev_guide/testing_compile.rst:19 msgid "3.5" msgstr "3.5" #: ../../rst/dev_guide/testing_compile.rst:20 msgid "3.6" msgstr "3.6" #: ../../rst/dev_guide/testing_compile.rst:21 msgid "3.7" msgstr "3.7" #: ../../rst/dev_guide/testing_compile.rst:22 msgid "3.8" msgstr "3.8" #: ../../rst/dev_guide/testing_compile.rst:23 msgid "3.9" msgstr "3.9" #: ../../rst/dev_guide/testing_compile.rst:25 msgid "NOTE: In Ansible 2.4 and earlier the compile test was provided by a dedicated sub-command ``ansible-test compile`` instead of a sanity test using ``ansible-test sanity --test compile``." msgstr "注記: Ansible 2.4 以å‰ã§ã¯ã€``ansible-test sanity --test compile`` を使用ã™ã‚‹å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã®ä»£ã‚りã«ã€ã‚³ãƒ³ãƒ‘イルテストãŒå°‚用ã®ã‚µãƒ–コマンド ``ansible-test compile`` ã«ã‚ˆã£ã¦æä¾›ã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing_compile.rst:28 msgid "Running compile tests locally" msgstr "ローカルã§ã®ã‚³ãƒ³ãƒ‘イルテストã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_compile.rst:30 msgid "Compile tests can be run across the whole code base by doing:" msgstr "コンパイルテストを実行ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹å…¨ä½“ã§ãƒ†ã‚¹ãƒˆã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:38 #: ../../rst/dev_guide/testing_units.rst:38 msgid "Against a single file by doing:" msgstr "1 ã¤ã®ãƒ•ァイルã«å¯¾ã—ã¦ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:44 #: ../../rst/dev_guide/testing_units.rst:44 msgid "Or against a specific Python version by doing:" msgstr "ã¾ãŸã¯ã€ç‰¹å®šã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:50 msgid "For advanced usage see the help:" msgstr "高度ãªä½¿ç”¨æ–¹æ³•ã¯ã€ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_compile.rst:58 #: ../../rst/dev_guide/testing_units.rst:66 msgid "Installing dependencies" msgstr "ä¾å­˜é–¢ä¿‚ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/dev_guide/testing_compile.rst:60 msgid "``ansible-test`` has a number of dependencies , for ``compile`` tests we suggest running the tests with ``--local``, which is the default" msgstr "``ansible-test`` ã«ã¯ã„ãã¤ã‹ã®ä¾å­˜é–¢ä¿‚ãŒã‚りã¾ã™ã€‚``compile`` テストã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚ã‚‹ ``--local`` を使用ã—ã¦ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:62 msgid "The dependencies can be installed using the ``--requirements`` argument. For example:" msgstr "ä¾å­˜é–¢ä¿‚ã¯ã€``--requirements`` 引数を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_compile.rst:70 msgid "The full list of requirements can be found at `test/lib/ansible_test/_data/requirements `_. Requirements files are named after their respective commands. See also the `constraints `_ applicable to all commands." msgstr "è¦ä»¶ã®ä¸€è¦§ã¯ `test/lib/ansible_test/_data/requirements `_ ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚è¦ä»¶ãƒ•ァイルã«ã¯ã€å„コマンドã«ã¡ãªã‚“ã§åå‰ãŒä»˜ã‘られã¦ã„ã¾ã™ã€‚全コマンドã«é©ç”¨ã•れる `制約 `_ ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_compile.rst:74 msgid "Extending compile tests" msgstr "ã‚³ãƒ³ãƒ‘ã‚¤ãƒ«ãƒ†ã‚¹ãƒˆã®æ‹¡å¼µ" #: ../../rst/dev_guide/testing_compile.rst:76 msgid "If you believe changes are needed to the compile tests please add a comment on the `Testing Working Group Agenda `_ so it can be discussed." msgstr "コンパイルテストã«å¤‰æ›´ãŒå¿…è¦ãªå ´åˆã¯ã€`ワーキンググループã®ãƒ†ã‚¹ãƒˆã®è­°é¡Œ `_ ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã—ã¦ãã ã•ã„。ãã®å†…容ã«ã¤ã„ã¦è©±ã—åˆã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:9 msgid "Before you submit a module for inclusion in the main Ansible repo, you must test your module documentation for correct HTML rendering and to ensure that the argspec matches the documentation in your Python file. The community pages offer more information on :ref:`testing reStructuredText documentation `." msgstr "メイン㮠Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã«çµ„ã¿è¾¼ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é€ä¿¡ã™ã‚‹å‰ã«ã€æ­£ã—ã„ HTML レンダリングã¤ã„ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’テストã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€argspec ㌠Python ファイルã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コミュニティーページã§ã¯ã€ã€Œ:ref:`reStructuredText ドキュメントã®ãƒ†ã‚¹ãƒˆ `ã€ã®è©³ç´°ãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:11 msgid "To check the HTML output of your module documentation:" msgstr "モジュールドキュメント㮠HTML 出力を確èªã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:13 msgid "Ensure working :ref:`development environment `." msgstr ":ref:`開発環境 ` ãŒç¨¼åƒã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:14 #: ../../rst/dev_guide/testing_documentation.rst:28 msgid "Install required Python packages (drop '--user' in venv/virtualenv):" msgstr "å¿…è¦ãª Python パッケージをインストールã—ã¾ã™ (venv/virtualenv ã«ã€Œ--userã€ã‚’ドロップã—ã¾ã™)。" #: ../../rst/dev_guide/testing_documentation.rst:21 msgid "Ensure your module is in the correct directory: ``lib/ansible/modules/$CATEGORY/mymodule.py``." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ­£ã—ã„ディレクトリー (``lib/ansible/modules/$CATEGORY/mymodule.py``) ã«ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:22 msgid "Build HTML from your module documentation: ``MODULES=mymodule make webdocs``." msgstr "モジュールドキュメント ``MODULES=mymodule make webdocs`` ã‹ã‚‰ HTML を構築ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:23 msgid "To build the HTML documentation for multiple modules, use a comma-separated list of module names: ``MODULES=mymodule,mymodule2 make webdocs``." msgstr "複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® HTML ドキュメントを作æˆã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ (``MODULES=mymodule,mymodule2 make webdocs``)。" #: ../../rst/dev_guide/testing_documentation.rst:24 msgid "View the HTML page at ``file:///path/to/docs/docsite/_build/html/modules/mymodule_module.html``." msgstr "``file:///path/to/docs/docsite/_build/html/modules/mymodule_module.html`` ã§ HTML ページを表示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:26 msgid "To ensure that your module documentation matches your ``argument_spec``:" msgstr "モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒ ``argument_spec`` ã¨é©åˆã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_documentation.rst:34 msgid "run the ``validate-modules`` test::" msgstr "``validate-modules`` テストを実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_httptester.rst:5 msgid "httptester" msgstr "httptester" #: ../../rst/dev_guide/testing_httptester.rst:12 msgid "``httptester`` is a docker container used to host certain resources required by :ref:`testing_integration`. This is to avoid CI tests requiring external resources (such as git or package repos) which, if temporarily unavailable, would cause tests to fail." msgstr "``httptester`` ã¯ã€:ref:`testing_integration` ã§å¿…è¦ãªç‰¹å®šã®ãƒªã‚½ãƒ¼ã‚¹ã‚’ホストã™ã‚‹ã®ã«ä½¿ç”¨ã•れる docker コンテナーã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€(git やパッケージリãƒã‚¸ãƒˆãƒªãƒ¼ãªã©ã®) 外部リソースを必è¦ã¨ã™ã‚‹ CI テストãŒå›žé¿ã•れã€ä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªããªã‚‹ã¨ãƒ†ã‚¹ãƒˆãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_httptester.rst:14 msgid "HTTP Testing endpoint which provides the following capabilities:" msgstr "ä»¥ä¸‹ã®æ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹ HTTP テストエンドãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/testing_httptester.rst:16 msgid "httpbin" msgstr "httpbin" #: ../../rst/dev_guide/testing_httptester.rst:17 msgid "nginx" msgstr "nginx" #: ../../rst/dev_guide/testing_httptester.rst:18 msgid "SSL" msgstr "SSL" #: ../../rst/dev_guide/testing_httptester.rst:19 msgid "SNI" msgstr "SNI" #: ../../rst/dev_guide/testing_httptester.rst:20 msgid "Negotiate Authentication" msgstr "èªè¨¼ã®ãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆ" #: ../../rst/dev_guide/testing_httptester.rst:23 msgid "Source files can be found in the `http-test-container `_ repository." msgstr "ソースファイル㯠`http-test-container `_ リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_httptester.rst:26 msgid "Extending httptester" msgstr "httptester ã®æ‹¡å¼µ" #: ../../rst/dev_guide/testing_httptester.rst:28 msgid "If you have sometime to improve ``httptester`` please add a comment on the `Testing Working Group Agenda `_ to avoid duplicated effort." msgstr "``httptester`` を改善ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ãŒã‚ã‚‹å ´åˆã¯ã€é‡è¤‡ä½œæ¥­ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€`ワーキンググループã®ãƒ†ã‚¹ãƒˆã®è­°é¡Œ `_ ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:11 msgid "The Ansible integration Test system." msgstr "Ansible çµ±åˆãƒ†ã‚¹ãƒˆã‚·ã‚¹ãƒ†ãƒ ã€‚" #: ../../rst/dev_guide/testing_integration.rst:13 msgid "Tests for playbooks, by playbooks." msgstr "Playbook ã«ã‚ˆã‚‹ Playbook ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration.rst:15 msgid "Some tests may require credentials. Credentials may be specified with `credentials.yml`." msgstr "テストã«ã‚ˆã£ã¦ã¯èªè¨¼æƒ…å ±ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚èªè¨¼æƒ…報㯠`credentials.yml` ã§æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:17 msgid "Some tests may require root." msgstr "テストã«ã‚ˆã£ã¦ã¯ root ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:24 msgid "Quick Start" msgstr "クイックスタート" #: ../../rst/dev_guide/testing_integration.rst:26 msgid "It is highly recommended that you install and activate the ``argcomplete`` python package. It provides tab completion in ``bash`` for the ``ansible-test`` test runner." msgstr "python パッケージ ``argcomplete`` をインストールã—ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ†ã‚¹ãƒˆãƒ©ãƒ³ãƒŠãƒ¼ ``ansible-test`` ã« ``bash`` ã®ã‚¿ãƒ–è£œå®ŒãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:30 msgid "Configuration" msgstr "設定" #: ../../rst/dev_guide/testing_integration.rst:33 msgid "ansible-test command" msgstr "ansible-test コマンド" #: ../../rst/dev_guide/testing_integration.rst:35 msgid "The example below assumes ``bin/`` is in your ``$PATH``. An easy way to achieve that is to initialize your environment with the ``env-setup`` command::" msgstr "以下ã®ä¾‹ã§ã¯ã€``bin/`` ㌠``$PATH`` ã§ã‚ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€``env-setup`` コマンドã§ç’°å¢ƒã‚’åˆæœŸåŒ–ã™ã‚‹ç°¡å˜ãªæ–¹æ³•ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:41 msgid "You can also call ``ansible-test`` with the full path::" msgstr "完全パス㧠``ansible-test`` を呼ã³å‡ºã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:46 msgid "integration_config.yml" msgstr "integration_config.yml" #: ../../rst/dev_guide/testing_integration.rst:48 msgid "Making your own version of ``integration_config.yml`` can allow for setting some tunable parameters to help run the tests better in your environment. Some tests (for example, cloud tests) will only run when access credentials are provided. For more information about supported credentials, refer to the various ``cloud-config-*.template`` files in the ``test/integration/`` directory." msgstr "自身ã§ä½œæˆã—㟠``integration_config.yml`` ãŒã‚ã‚‹ã¨ã€ä¸€éƒ¨ã®èª¿æ•´å¯èƒ½ãªãƒ‘ラメーターを設定ã—ã¦ã€ç’°å¢ƒã«ã‚ˆã‚Šé©åˆ‡ã«ãƒ†ã‚¹ãƒˆã‚’実行ã§ãã¾ã™ã€‚一部ã®ãƒ†ã‚¹ãƒˆ (クラウドテストãªã©) ã¯ã€ã‚¢ã‚¯ã‚»ã‚¹èªè¨¼æƒ…å ±ãŒæä¾›ã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿å®Ÿè¡Œã•れã¾ã™ã€‚サãƒãƒ¼ãƒˆå¯¾è±¡ã®èªè¨¼æƒ…å ±ã®è©³ç´°ã¯ã€``test/integration/`` ディレクトリーã§ã•ã¾ã–ã¾ãª ``cloud-config-*.template`` ファイルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration.rst:57 msgid "Some tests assume things like hg, svn, and git are installed, and in path. Some tests (such as those for Amazon Web Services) need separate definitions, which will be covered later in this document." msgstr "一部ã®ãƒ†ã‚¹ãƒˆã§ã¯ã€hgã€svnã€git ãªã©ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€ãƒ‘スã«ã‚ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚一部ã®ãƒ†ã‚¹ãƒˆ (Amazon Web Services ã®ãƒ†ã‚¹ãƒˆãªã©) ã«ã¯å€‹åˆ¥ã®å®šç¾©ãŒå¿…è¦ã§ã™ã€‚ã“れã«ã¤ã„ã¦ã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®å¾ŒåŠã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:61 msgid "(Complete list pending)" msgstr "(完全ã¯ãƒªã‚¹ãƒˆã¯å¾Œæ—¥è¿½åŠ ã•れã¾ã™)" #: ../../rst/dev_guide/testing_integration.rst:64 msgid "Non-destructive Tests" msgstr "éžç ´å£Šãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration.rst:66 msgid "These tests will modify files in subdirectories, but will not do things that install or remove packages or things outside of those test subdirectories. They will also not reconfigure or bounce system services." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã‚µãƒ–ディレクトリー内ã®ãƒ•ァイルを修正ã—ã¾ã™ãŒã€ãƒ‘ッケージやテストã®ã‚µãƒ–ディレクトリー以外ã«ã‚ã‚‹ã‚‚ã®ã‚’インストールã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã‚ˆã†ãªã“ã¨ã¯ã—ã¾ã›ã‚“。ã¾ãŸã€ã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スã®å†è¨­å®šã‚„ãƒã‚¦ãƒ³ã‚¹ã‚‚行ã„ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_integration.rst:69 msgid "Running integration tests within Docker" msgstr "Docker 内ã§ã®çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_integration.rst:71 msgid "To protect your system from any potential changes caused by integration tests, and to ensure a sensible set of dependencies are available we recommend that you always run integration tests with the ``--docker`` option, for example ``--docker centos8``. See the `list of supported docker images `_ for options (the ``default`` image is used for sanity and unit tests, as well as for platform independent integration tests such as those for cloud modules)." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã«ã‚ˆã‚‹æ½œåœ¨çš„ãªå¤‰æ›´ã‹ã‚‰ã‚·ã‚¹ãƒ†ãƒ ã‚’守りã€é©åˆ‡ãªä¾å­˜é–¢ä¿‚セットãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€å¸¸ã« ``--docker`` オプションをã¤ã‘ã¦çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ (``--docker centos8`` ãªã©)。オプションã«ã¤ã„ã¦ã¯ã€ã€Œ`サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã® docker イメージã®ä¸€è¦§ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„ (``default``イメージã¯ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¨ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã€ãŠã‚ˆã³ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©ã®ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„çµ±åˆãƒ†ã‚¹ãƒˆã«ä½¿ç”¨ã•れã¾ã™)。" #: ../../rst/dev_guide/testing_integration.rst:73 msgid "Avoiding pulling new Docker images" msgstr "æ–°è¦ Docker イメージã®ãƒ—ルã®å›žé¿" #: ../../rst/dev_guide/testing_integration.rst:75 msgid "Use the ``--docker-no-pull`` option to avoid pulling the latest container image. This is required when using custom local images that are not available for download." msgstr "最新ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’プルã—ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€``--docker-no-pull`` オプションを使用ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã«åˆ©ç”¨ã§ããªã„カスタムã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’使用ã™ã‚‹å ´åˆã«å¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:77 msgid "Run as follows for all POSIX platform tests executed by our CI system in a fedora32 docker container::" msgstr "fedora32 docker コンテナー㧠CI システムã«ã‚ˆã£ã¦å®Ÿè¡Œã•れるã™ã¹ã¦ã® POSIX プラットフォームテストã«å¯¾ã—ã¦æ¬¡ã®ã‚ˆã†ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:81 msgid "You can target a specific tests as well, such as for individual modules::" msgstr "個々ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©ã€ç‰¹å®šã®ãƒ†ã‚¹ãƒˆã‚’対象ã¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:85 msgid "You can use the ``-v`` option to make the output more verbose::" msgstr "``-v`` オプションを使用ã™ã‚‹ã¨ã€å‡ºåŠ›ã‚’ã•らã«è©³ç´°ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:89 msgid "Use the following command to list all the available targets::" msgstr "利用å¯èƒ½ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:93 msgid "Bash users" msgstr "Bash ユーザー" #: ../../rst/dev_guide/testing_integration.rst:95 msgid "If you use ``bash`` with ``argcomplete``, obtain a full list by doing: ``ansible-test integration ``" msgstr "``bash`` ã‚’ ``argcomplete`` ã¨ã¨ã‚‚ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€``ansible-test integration `` を実行ã—ã¦å®Œå…¨ãªä¸€è¦§ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:98 msgid "Destructive Tests" msgstr "破壊テスト" #: ../../rst/dev_guide/testing_integration.rst:100 msgid "These tests are allowed to install and remove some trivial packages. You will likely want to devote these to a virtual environment, such as Docker. They won't reformat your filesystem::" msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã§ã¯ã€ã„ãã¤ã‹ã®ç°¡å˜ãªãƒ‘ッケージをインストールãŠã‚ˆã³å‰Šé™¤ã§ãã¾ã™ã€‚ã“れらを Docker ãªã©ã®ä»®æƒ³ç’°å¢ƒå°‚用ã«ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れらã¯ã€ãƒ•ァイルシステムをå†ãƒ•ォーマットã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_integration.rst:106 msgid "Windows Tests" msgstr "Windows テスト" #: ../../rst/dev_guide/testing_integration.rst:108 msgid "These tests exercise the ``winrm`` connection plugin and Windows modules. You'll need to define an inventory with a remote Windows 2008 or 2012 Server to use for testing, and enable PowerShell Remoting to continue." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€``winrm`` connection プラグイン㨠Windows モジュールã«å¾“ã„ã¾ã™ã€‚テストã«ä½¿ç”¨ã™ã‚‹ãƒªãƒ¢ãƒ¼ãƒˆ Windows 2008 Server ã¾ãŸã¯ 2012 Server ã‚’æŒã¤ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’定義ã—ã€PowerShell Remoting を継続ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:112 msgid "Running these tests may result in changes to your Windows host, so don't run them against a production/critical Windows environment." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã¨ã€Windows ホストãŒå¤‰æ›´ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€å®Ÿç¨¼åƒç’°å¢ƒã‚„é‡è¦ãª Windows 環境ã§ã¯å®Ÿè¡Œã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration.rst:115 msgid "Enable PowerShell Remoting (run on the Windows host via Remote Desktop)::" msgstr "PowerShell Remoting を有効ã«ã—ã¾ã™ (リモートデスクトップを介ã—㦠Windows ホストã§å®Ÿè¡Œã—ã¾ã™)。" #: ../../rst/dev_guide/testing_integration.rst:119 msgid "Define Windows inventory::" msgstr "Windows インベントリーを定義ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:124 msgid "Run the Windows tests executed by our CI system::" msgstr "CI システムã§å®Ÿè¡Œã™ã‚‹ Windows テストを実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:129 msgid "Tests in Docker containers" msgstr "Docker コンテナーã§ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration.rst:131 msgid "If you have a Linux system with Docker installed, running integration tests using the same Docker containers used by the Ansible continuous integration (CI) system is recommended." msgstr "Docker ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れ㟠Linux ã‚·ã‚¹ãƒ†ãƒ ã‚’ãŠæŒã¡ã®å ´åˆã¯ã€Ansible ã®ç¶™ç¶šçš„çµ±åˆ (CI) システムã§ä½¿ç”¨ã•れã¦ã„ã‚‹ã‚‚ã®ã¨åŒã˜ Docker コンテナーを使用ã—ã¦çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:134 msgid "Docker on non-Linux" msgstr "Linux 以外㮠Docker" #: ../../rst/dev_guide/testing_integration.rst:136 msgid "Using Docker Engine to run Docker on a non-Linux host (such as macOS) is not recommended. Some tests may fail, depending on the image used for testing. Using the ``--docker-privileged`` option when running ``integration`` (not ``network-integration`` or ``windows-integration``) may resolve the issue." msgstr "Docker Engine を使用ã—㦠(macOS ãªã©ã®) Linux 以外ã®ãƒ›ã‚¹ãƒˆã§ Docker を実行ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。テストã«ä½¿ç”¨ã•れるイメージã«ã‚ˆã£ã¦ã¯ã€ä¸€éƒ¨ã®ãƒ†ã‚¹ãƒˆãŒå¤±æ•—ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚(``network-integration`` ã¾ãŸã¯ ``windows-integration``ã§ã¯ãªã) ``integration`` ã®å®Ÿè¡Œæ™‚ã« ``--docker-privileged`` オプションを使用ã™ã‚‹ã¨å•題ãŒè§£æ±ºã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:141 msgid "Running Integration Tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_integration.rst:143 msgid "To run all CI integration test targets for POSIX platforms in a Ubuntu 18.04 container::" msgstr "Ubuntu 18.04 コンテナー内㮠POSIX プラットフォーム㫠CI çµ±åˆãƒ†ã‚¹ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆã™ã¹ã¦ã‚’実行ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:147 msgid "You can also run specific tests or select a different Linux distribution. For example, to run tests for the ``ping`` module on a Ubuntu 18.04 container::" msgstr "特定ã®ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ã‚‚ã€åˆ¥ã® Linux ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Ubuntu 18.04 コンテナー㧠``ping`` モジュールã®ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:153 msgid "Container Images" msgstr "コンテナーイメージ" #: ../../rst/dev_guide/testing_integration.rst:156 msgid "Python 2" msgstr "Python 2" #: ../../rst/dev_guide/testing_integration.rst:158 msgid "Most container images are for testing with Python 2:" msgstr "ã»ã¨ã‚“ã©ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚¤ãƒ¡ãƒ¼ã‚¸ã¯ã€Python 2 ã§ãƒ†ã‚¹ãƒˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:160 msgid "centos6" msgstr "centos6" #: ../../rst/dev_guide/testing_integration.rst:161 msgid "centos7" msgstr "centos7" #: ../../rst/dev_guide/testing_integration.rst:162 msgid "opensuse15py2" msgstr "opensuse15py2" #: ../../rst/dev_guide/testing_integration.rst:165 msgid "Python 3" msgstr "Python 3" #: ../../rst/dev_guide/testing_integration.rst:167 msgid "To test with Python 3 use the following images:" msgstr "Python 3 ã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:169 msgid "alpine3" msgstr "alpine3" #: ../../rst/dev_guide/testing_integration.rst:170 msgid "centos8" msgstr "centos8" #: ../../rst/dev_guide/testing_integration.rst:171 msgid "fedora32" msgstr "fedora32" #: ../../rst/dev_guide/testing_integration.rst:172 msgid "fedora33" msgstr "fedora33" #: ../../rst/dev_guide/testing_integration.rst:173 msgid "opensuse15" msgstr "opensuse15" #: ../../rst/dev_guide/testing_integration.rst:174 msgid "ubuntu1804" msgstr "ubuntu1804" #: ../../rst/dev_guide/testing_integration.rst:175 msgid "ubuntu2004" msgstr "ubuntu2004" #: ../../rst/dev_guide/testing_integration.rst:179 msgid "Legacy Cloud Tests" msgstr "レガシーã®ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration.rst:181 msgid "Some of the cloud tests run as normal integration tests, and others run as legacy tests; see the :ref:`testing_integration_legacy` page for more information." msgstr "一部ã®ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ†ã‚¹ãƒˆã¯é€šå¸¸ã®çµ±åˆãƒ†ã‚¹ãƒˆã¨ã—ã¦å®Ÿè¡Œã—ã€ãã®ä»–ã¯ãƒ¬ã‚¬ã‚·ãƒ¼ãƒ†ã‚¹ãƒˆã¨ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`testing_integration_legacy`ã€ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration.rst:186 msgid "Other configuration for Cloud Tests" msgstr "クラウドテストã®ãã®ä»–ã®è¨­å®š" #: ../../rst/dev_guide/testing_integration.rst:188 msgid "In order to run some tests, you must provide access credentials in a file named ``cloud-config-aws.yml`` or ``cloud-config-cs.ini`` in the test/integration directory. Corresponding .template files are available for for syntax help. The newer AWS tests now use the file test/integration/cloud-config-aws.yml" msgstr "test/integration ディレクトリーã«ã‚ã‚‹ ``cloud-config-aws.yml`` ã¾ãŸã¯ ``cloud-config-cs.ini`` ã¨ã„ã†åå‰ã®ãƒ•ァイルã«ã‚るアクセスèªè¨¼æƒ…報を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚構文ヘルプã§ã¯ã€å¯¾å¿œã™ã‚‹ .template ファイルを利用ã§ãã¾ã™ã€‚æ–°ã—ã„ AWS テストã§ã¯ã€test/integration/cloud-config-aws.yml ファイルãŒä½¿ç”¨ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing_integration.rst:194 #: ../../rst/dev_guide/testing_integration_legacy.rst:58 msgid "IAM policies for AWS" msgstr "AWS ã® IAM ãƒãƒªã‚·ãƒ¼" #: ../../rst/dev_guide/testing_integration.rst:196 msgid "Ansible needs fairly wide ranging powers to run the tests in an AWS account. This rights can be provided to a dedicated user. These need to be configured before running the test." msgstr "Ansible ã¯ã€AWS アカウントã§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ãŸã‚ã«éžå¸¸ã«å¹…åºƒã„æ¨©é™ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã®æ¨©é™ã¯å°‚用ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æä¾›ã§ãã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ¨©é™ã¯ã€ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹å‰ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:199 msgid "testing-policies" msgstr "testing-policies" #: ../../rst/dev_guide/testing_integration.rst:201 msgid "The GitHub repository `mattclay/aws-terminator `_ contains two sets of policies used for all existing AWS module integratoin tests. The `hacking/aws_config/setup_iam.yml` playbook can be used to setup two groups:" msgstr "GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ `mattclay/aws-terminator `_ ã«ã¯ã€æ—¢å­˜ã® AWS モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆã«ä½¿ç”¨ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã®ã‚»ãƒƒãƒˆãŒ 2 ã¤å«ã¾ã‚Œã¾ã™ã€‚Playbook `hacking/aws_config/setup_iam.yml` を使用ã™ã‚‹ã¨ã€2 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—を設定ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:205 msgid "`ansible-integration-ci` will have the policies applied necessary to run any integration tests not marked as `unsupported` and are designed to mirror those used by Ansible's CI." msgstr "`ansible-integration-ci` ã¯ã€çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã«å¿…è¦ã¨ãªã‚‹ãƒãƒªã‚·ãƒ¼ã‚’é©ç”¨ã™ã‚‹ã¨å…±ã«ã€`unsupported` ã¨è­˜åˆ¥ã•れãšã€Ansible ã® CI ã§ä½¿ç”¨ã•れるミラーリング用ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:208 msgid "`ansible-integration-unsupported` will have the additional policies applied necessary to run the integration tests marked as `unsupported` including tests for managing IAM roles, users and groups." msgstr "`ansible-integration-unsupported` ã¯ã€IAM ロールã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を管ç†ã™ã‚‹ãŸã‚ã®ãƒ†ã‚¹ãƒˆã‚’å«ã‚€ `unsupported` ã¨ãƒžãƒ¼ã‚¯ã•れãŸçµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã«å¿…è¦ãªè¿½åŠ ã®ãƒãƒªã‚·ãƒ¼ãŒé©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:212 msgid "Once the groups have been created, you'll need to create a user and make the user a member of these groups. The policies are designed to minimize the rights of that user. Please note that while this policy does limit the user to one region, this does not fully restrict the user (primarily due to the limitations of the Amazon ARN notation). The user will still have wide privileges for viewing account definitions, and will also able to manage some resources that are not related to testing (for example, AWS lambdas with different names). Tests should not be run in a primary production account in any case." msgstr "グループãŒä½œæˆã•れãŸã‚‰ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã—ã¦ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒªã‚·ãƒ¼ã¯ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©åˆ©ã‚’最å°é™ã«ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚ã“ã®ãƒãƒªã‚·ãƒ¼ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ 1 ã¤ã®åœ°åŸŸã«é™å®šã—ã¦ã„ã¾ã™ãŒã€ã“れã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’完全ã«ã¯åˆ¶é™ã—ã¦ã„ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ (主㫠Amazon ARN 表記ã®åˆ¶é™ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™)。ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆå®šç¾©ã‚’閲覧ã™ã‚‹ãŸã‚ã®åºƒã„権é™ã‚’æŒã£ã¦ãŠã‚Šã€ãƒ†ã‚¹ãƒˆã«é–¢ä¿‚ã®ãªã„ã„ãã¤ã‹ã®ãƒªã‚½ãƒ¼ã‚¹ (ãŸã¨ãˆã°ã€ç•°ãªã‚‹åå‰ã® AWS ラムダ) を管ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã©ã®ã‚ˆã†ãªå ´åˆã§ã‚‚ã€ãƒ†ã‚¹ãƒˆã‚’実稼åƒç’°å¢ƒç”¨ã®ãƒ—ライマリーアカウントã§å®Ÿè¡Œã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_integration.rst:220 #: ../../rst/dev_guide/testing_integration_legacy.rst:76 msgid "Other Definitions required" msgstr "ãã®ä»–ã«å¿…è¦ãªå®šç¾©" #: ../../rst/dev_guide/testing_integration.rst:222 #: ../../rst/dev_guide/testing_integration_legacy.rst:78 msgid "Apart from installing the policy and giving it to the user identity running the tests, a lambda role `ansible_integration_tests` has to be created which has lambda basic execution privileges." msgstr "ãƒãƒªã‚·ãƒ¼ã‚’インストールã—ã¦ã€ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¦ã„るユーザ ID ã«ãれを付与ã™ã‚‹ã“ã¨ã¨ã¯åˆ¥ã«ã€ãƒ©ãƒ ãƒ€ãƒ­ãƒ¼ãƒ« `ansible_integration_tests` を作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒ©ãƒ ãƒ€ã®åŸºæœ¬çš„ãªå®Ÿè¡Œæ¨©é™ã‚’æŒã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration.rst:228 msgid "Network Tests" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration.rst:230 msgid "For guidance on writing network test see :ref:`testing_resource_modules`." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ†ã‚¹ãƒˆã®æ›¸ãè¾¼ã¿ã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€ã€Œ:ref:`testing_resource_modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration.rst:234 msgid "Where to find out more" msgstr "ãã®ä»–ã®è©³ç´°æƒ…å ±" #: ../../rst/dev_guide/testing_integration.rst:236 msgid "If you'd like to know more about the plans for improving testing Ansible, join the `Testing Working Group `_." msgstr "Ansible テストを改善ã™ã‚‹è©³ç´°ãªè¨ˆç”»ã‚’確èªã—ãŸã„å ´åˆã¯ã€`テストã®ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ã‚°ãƒ«ãƒ¼ãƒ— `_ ã«ã”å‚加ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration_legacy.rst:7 msgid "Testing using the Legacy Integration system" msgstr "レガシー統åˆã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ãŸãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_integration_legacy.rst:11 msgid "This page details how to run the integration tests that haven't been ported to the new ``ansible-test`` framework." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€æ–°ã—ã„ ``ansible-test`` フレームワークã«ç§»æ¤ã•れã¦ã„ãªã„çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œæ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:13 msgid "The following areas are still tested using the legacy ``make tests`` command:" msgstr "以下ã®ã‚¨ãƒªã‚¢ã¯ã€ãƒ¬ã‚¬ã‚·ãƒ¼ã® ``make tests`` コマンドを使用ã—ã¦ãƒ†ã‚¹ãƒˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:15 msgid "amazon (some)" msgstr "amazon (一部)" #: ../../rst/dev_guide/testing_integration_legacy.rst:16 msgid "azure" msgstr "azure" #: ../../rst/dev_guide/testing_integration_legacy.rst:17 msgid "cloudflare" msgstr "cloudflare" #: ../../rst/dev_guide/testing_integration_legacy.rst:18 msgid "cloudscale" msgstr "cloudscale" #: ../../rst/dev_guide/testing_integration_legacy.rst:19 msgid "cloudstack" msgstr "cloudstack" #: ../../rst/dev_guide/testing_integration_legacy.rst:20 msgid "consul" msgstr "consul" #: ../../rst/dev_guide/testing_integration_legacy.rst:21 msgid "exoscale" msgstr "exoscale" #: ../../rst/dev_guide/testing_integration_legacy.rst:22 msgid "gce" msgstr "gce" #: ../../rst/dev_guide/testing_integration_legacy.rst:23 msgid "jenkins" msgstr "jenkins" #: ../../rst/dev_guide/testing_integration_legacy.rst:24 msgid "rackspace" msgstr "rackspace" #: ../../rst/dev_guide/testing_integration_legacy.rst:26 msgid "Over time the above list will be reduced as tests are ported to the ``ansible-test`` framework." msgstr "テスト㌠``ansible-test`` フレームワークã«ç§»æ¤ã•れるã¨ã€ä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã¯å¾ã€…ã«å°‘ãªããªã£ã¦ã„ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:30 msgid "Running Cloud Tests" msgstr "クラウドテストã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_integration_legacy.rst:32 msgid "Cloud tests exercise capabilities of cloud modules (for example, ec2_key). These are not 'tests run in the cloud' so much as tests that use the cloud modules and are organized by cloud provider." msgstr "クラウドテストã¯ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (ec2_key ãªã©) ã®æ©Ÿèƒ½ã‚’実行ã—ã¾ã™ã€‚ã“れらã¯ã€ã€Œã‚¯ãƒ©ã‚¦ãƒ‰ã§å®Ÿè¡Œã•れるテストã€ã§ã¯ãªãã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã£ã¦ç·¨æˆã•れãŸãƒ†ã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:36 msgid "Some AWS tests may use environment variables. It is recommended to either unset any AWS environment variables( such as ``AWS_DEFAULT_PROFILE``, ``AWS_SECRET_ACCESS_KEY``, and so on) or be sure that the environment variables match the credentials provided in ``credentials.yml`` to ensure the tests run with consistency to their full capability on the expected account. See `AWS CLI docs `_ for information on creating a profile." msgstr "AWS テストã«ã‚ˆã£ã¦ã¯ã€ç’°å¢ƒå¤‰æ•°ã‚’使用ã™ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚AWS 環境変数 (``AWS_DEFAULT_PROFILE``ã€``AWS_SECRET_ACCESS_KEY`` ãªã©) ã®è¨­å®šã‚’解除ã™ã‚‹ã‹ã€ç’°å¢ƒå¤‰æ•°ãŒ ``credentials.yml`` ã§æä¾›ã•れるèªè¨¼æƒ…å ±ã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ã€äºˆæƒ³ã•れるアカウントã®å®Œå…¨ãªæ©Ÿèƒ½ã«ä¸€è²«æ€§ã®ã‚るテストãŒå®Ÿè¡Œã•れるよã†ã«ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚プロファイルã®ä½œæˆã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€`AWS CLI ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_integration_legacy.rst:38 msgid "Subsets of tests may be run by ``#commenting`` out unnecessary roles in the appropriate playbook, such as ``test/integration/amazon.yml``." msgstr "テストã®ã‚µãƒ–セットã¯ã€é©åˆ‡ãª Playbook ã® ä¸è¦ãªãƒ­ãƒ¼ãƒ«ã‚’ ``#commenting`` ã§ã‚³ãƒ¡ãƒ³ãƒˆã‚¢ã‚¦ãƒˆã™ã‚‹ã“ã¨ã§å®Ÿè¡Œã§ãã¾ã™ (例: ``test/integration/amazon.yml``)。" #: ../../rst/dev_guide/testing_integration_legacy.rst:40 msgid "In order to run cloud tests, you must provide access credentials in a file named ``credentials.yml``. A sample credentials file named ``credentials.template`` is available for syntax help." msgstr "クラウドテストを実行ã™ã‚‹ã«ã¯ã€``credentials.yml`` ã¨ã„ã†åå‰ã®ãƒ•ァイルã§ã‚¢ã‚¯ã‚»ã‚¹èªè¨¼æƒ…報を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚構文ヘルプã«ã¯ã€``credentials.template`` ã¨åå‰ã®ä»˜ã„ãŸã‚µãƒ³ãƒ—ルèªè¨¼æƒ…報ファイルを利用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:44 msgid "Provide cloud credentials::" msgstr "クラウドèªè¨¼ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:51 msgid "Other configuration" msgstr "ãã®ä»–ã®è¨­å®š" #: ../../rst/dev_guide/testing_integration_legacy.rst:53 msgid "In order to run some tests, you must provide access credentials in a file named ``credentials.yml``. A sample credentials file named ``credentials.template`` is available for syntax help." msgstr "ã„ãã¤ã‹ã®ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€``credentials.yml`` ã¨ã„ã†åå‰ã®ãƒ•ァイルã§ã‚¢ã‚¯ã‚»ã‚¹èªè¨¼æƒ…報を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚構文ヘルプã«ã¯ã€``credentials.template`` ã¨åå‰ã®ä»˜ã„ãŸã‚µãƒ³ãƒ—ルèªè¨¼æƒ…報ファイルを利用ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:60 msgid "In order to run the tests in an AWS account ansible needs fairly wide ranging powers which can be provided to a dedicated user or temporary credentials using a specific policy configured in the AWS account." msgstr "AWS アカウントã§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€Ansible ã«ã€AWS アカウントã§è¨­å®šã•れãŸç‰¹å®šã®ãƒãƒªã‚·ãƒ¼ã‚’使用ã—ã¦ã€å°‚用ã®ãƒ¦ãƒ¼ã‚¶ã‚„一時的ãªèªè¨¼æƒ…å ±ã«æä¾›ã§ãã‚‹ã€ã‹ãªã‚Šåºƒç¯„å›²ã®æ¨©é™ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:65 msgid "testing-iam-policy.json.j2" msgstr "testing-iam-policy.json.j2" #: ../../rst/dev_guide/testing_integration_legacy.rst:67 msgid "The testing-iam-policy.json.j2 file contains a policy which can be given to the user running the tests to give close to minimum rights required to run the tests. Please note that this does not fully restrict the user; The user has wide privileges for viewing account definitions and is also able to manage some resources that are not related to testing (for example, AWS lambdas with different names) primarily due to the limitations of the Amazon ARN notation. At the very least the policy limits the user to one region, however tests should not be run in a primary production account in any case." msgstr "testing-iam-policy.json.j2 ファイルã«ã¯ã€ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä»˜ä¸Žã™ã‚‹ãƒãƒªã‚·ãƒ¼ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œã«å¿…è¦ãªæœ€ä½Žé™ã®æ¨©é™ã«è¿‘ã„ã‚‚ã®ã‚’付与ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãªãŠã€ã“れã¯å®Œå…¨ãªåˆ¶é™ã§ã¯ãªã„ãŸã‚注æ„ã—ã¦ãã ã•ã„。ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆå®šç¾©ã‚’閲覧ã™ã‚‹å¹…åºƒã„æ¨©é™ã‚’æŒã¡ã€ä¸»ã« Amazon ARN 表記ã®åˆ¶é™ã«ã‚ˆã‚Šã€ãƒ†ã‚¹ãƒˆã«é–¢ä¿‚ã®ãªã„一部ã®ãƒªã‚½ãƒ¼ã‚¹ (ãŸã¨ãˆã°ã€ç•°ãªã‚‹åå‰ã® AWS ラムダ) を管ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚å°‘ãªãã¨ã‚‚ã€ã“ã®ãƒãƒªã‚·ãƒ¼ã§ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ 1 ã¤ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«é™å®šã—ã¦ã„ã¾ã™ãŒã€ã„ã‹ãªã‚‹å ´åˆã§ã‚‚ã€ãƒ†ã‚¹ãƒˆã¯å®Ÿç¨¼åƒç’°å¢ƒã®ãƒ—ライマリーアカウントã§å®Ÿè¡Œã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_integration_legacy.rst:84 #: ../../rst/dev_guide/testing_units.rst:24 msgid "Running Tests" msgstr "テストã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_integration_legacy.rst:86 msgid "The tests are invoked via a ``Makefile``." msgstr "テスト㯠``Makefile`` 経由ã§å‘¼ã³å‡ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:88 msgid "If you haven't already got Ansible available use the local checkout by doing::" msgstr "Ansible ãŒã¾ã åˆ©ç”¨å¯èƒ½ã§ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã®æ–¹æ³•ã§ãƒ­ãƒ¼ã‚«ãƒ«ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:92 msgid "Run the tests by doing::" msgstr "以下を実行ã—ã¦ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_integration_legacy.rst:102 msgid "Possible cost of running cloud tests" msgstr "クラウドテストã«ã‹ã‹ã‚‹å¯èƒ½æ€§ã®ã‚るコスト" #: ../../rst/dev_guide/testing_integration_legacy.rst:104 msgid "Running cloud integration tests will create and destroy cloud resources. Running these tests may result in additional fees associated with your cloud account. Care is taken to ensure that created resources are removed. However, it is advisable to inspect your AWS console to ensure no unexpected resources are running." msgstr "クラウド統åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒªã‚½ãƒ¼ã‚¹ãŒä½œæˆãŠã‚ˆã³ç ´æ£„ã•れã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã¨ã€ã‚¯ãƒ©ã‚¦ãƒ‰ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«é–¢é€£ã™ã‚‹è¿½åŠ æ–™é‡‘ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚作æˆã•れãŸãƒªã‚½ãƒ¼ã‚¹ãŒç¢ºå®Ÿã«å‰Šé™¤ã•れるよã†ã«æ³¨æ„ãŒæ‰•ã‚れã¾ã™ã€‚ãŸã ã—ã€AWS コンソールを調ã¹ã¦ã€äºˆæœŸã—ãªã„リソースãŒå®Ÿè¡Œã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_pep8.rst:7 msgid "PEP 8" msgstr "PEP 8" #: ../../rst/dev_guide/testing_pep8.rst:11 msgid "`PEP 8`_ style guidelines are enforced by `pycodestyle`_ on all python files in the repository by default." msgstr "`PEP 8`_ スタイルã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¯ã€ãƒ‡ãƒ•ォルトã§ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ã™ã¹ã¦ã® python ファイル㧠`pycodestyle`_ ã«ã‚ˆã£ã¦å¼·åˆ¶ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_pep8.rst:14 msgid "Running Locally" msgstr "ローカルã§ã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_pep8.rst:16 msgid "The `PEP 8`_ check can be run locally with::" msgstr "`PEP 8`_ ãƒã‚§ãƒƒã‚¯ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:9 msgid "This document describes how to:" msgstr "本書ã§ã¯ã€ä»¥ä¸‹ã‚’è¡Œã†æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:11 msgid "Run tests locally using ``ansible-test``" msgstr "``ansible-test`` を使用ã—ã¦ãƒ†ã‚¹ãƒˆã‚’ローカルã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:12 msgid "Extend" msgstr "æ‹¡å¼µ" #: ../../rst/dev_guide/testing_running_locally.rst:20 msgid "There are no special requirements for running ``ansible-test`` on Python 2.7 or later. The ``argparse`` package is required for Python 2.6. The requirements for each ``ansible-test`` command are covered later." msgstr "Python 2.7 以é™ã«ã¯ã€``ansible-test`` を実行ã™ã‚‹ãŸã‚ã®ç‰¹åˆ¥ãªè¦ä»¶ãŒã‚りã¾ã›ã‚“。Python 2.6 ã«ã¯ ``argparse`` パッケージãŒå¿…è¦ã§ã™ã€‚å„ ``ansible-test`` コマンドã®è¦ä»¶ã¯ã€å¾Œã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:26 msgid "Test Environments" msgstr "テスト環境" #: ../../rst/dev_guide/testing_running_locally.rst:28 msgid "Most ``ansible-test`` commands support running in one or more isolated test environments to simplify testing." msgstr "ã»ã¨ã‚“ã©ã® ``ansible-test`` コマンドã¯ã€ãƒ†ã‚¹ãƒˆã‚’ç°¡å˜ã«ã™ã‚‹ãŸã‚ã«ã€1 ã¤ä»¥ä¸Šã®åˆ†é›¢ãƒ†ã‚¹ãƒˆç’°å¢ƒã§ã®å®Ÿè¡Œã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:32 msgid "Remote" msgstr "リモート" #: ../../rst/dev_guide/testing_running_locally.rst:34 msgid "The ``--remote`` option runs tests in a cloud hosted environment. An API key is required to use this feature." msgstr "``--remote`` オプションã¯ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ›ã‚¹ãƒˆç’°å¢ƒã§ãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ API キーãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:37 msgid "Recommended for integration tests." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¸æŽ¨å¥¨äº‹é …" #: ../../rst/dev_guide/testing_running_locally.rst:39 msgid "See the `list of supported platforms and versions `_ for additional details." msgstr "詳細ã¯ã€ã€Œ`サãƒãƒ¼ãƒˆå¯¾è±¡ã®ãƒ—ラットフォームãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸€è¦§ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_running_locally.rst:42 msgid "Environment Variables" msgstr "環境変数" #: ../../rst/dev_guide/testing_running_locally.rst:44 msgid "When using environment variables to manipulate tests there some limitations to keep in mind. Environment variables are:" msgstr "環境変数を使用ã—ã¦ãƒ†ã‚¹ãƒˆã‚’æ“作ã™ã‚‹éš›ã«ã¯ã€ä»¥ä¸‹ã®åˆ¶é™äº‹é …ã«ç•™æ„ã—ã¦ãã ã•ã„。環境変数ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:46 msgid "Not propagated from the host to the test environment when using the ``--docker`` or ``--remote`` options." msgstr "``--docker`` オプションã¾ãŸã¯ ``--remote`` オプションを使用ã™ã‚‹å ´åˆã¯ã€ãƒ›ã‚¹ãƒˆã‹ã‚‰ãƒ†ã‚¹ãƒˆç’°å¢ƒã«ä¼æ’­ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_running_locally.rst:47 msgid "Not exposed to the test environment unless enabled in ``test/lib/ansible_test/_internal/util.py`` in the ``common_environment`` function." msgstr "``common_environment`` 関数㮠``test/lib/ansible_test/_internal/util.py`` ã§æœ‰åйã«ã•れã¦ã„ãªã„é™ã‚Šã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã«ã¯å…¬é–‹ã•れã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_running_locally.rst:49 msgid "Example: ``ANSIBLE_KEEP_REMOTE_FILES=1`` can be set when running ``ansible-test integration --venv``. However, using the ``--docker`` option would require running ``ansible-test shell`` to gain access to the Docker environment. Once at the shell prompt, the environment variable could be set and the tests executed. This is useful for debugging tests inside a container by following the :ref:`Debugging AnsibleModule-based modules ` instructions." msgstr "例: ``ansible-test integration --venv`` ã®å®Ÿè¡Œæ™‚ã« ``ANSIBLE_KEEP_REMOTE_FILES=1`` を設定ã§ãã¾ã™ãŒã€``--docker`` オプションを使用ã™ã‚‹ã¨ã€``ansible-test shell`` を実行ã—ã€Docker 環境ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚シェルプロンプトã§ã¯ã€ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¦ãƒ†ã‚¹ãƒˆã‚’行ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€:ref:`Debugging AnsibleModule-based modules ` ã®æŒ‡ç¤ºã«å¾“ã£ã¦ã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼å†…ã§ãƒ†ã‚¹ãƒˆã‚’デãƒãƒƒã‚°ã™ã‚‹ä¸Šã§å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:55 msgid "Interactive Shell" msgstr "インタラクティブシェル" #: ../../rst/dev_guide/testing_running_locally.rst:57 msgid "Use the ``ansible-test shell`` command to get an interactive shell in the same environment used to run tests. Examples:" msgstr "``ansible-test shell`` コマンドを使用ã—ã¦ã€ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹åŒã˜ç’°å¢ƒã§ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–シェルをå–å¾—ã—ã¾ã™ã€‚以下ã¯ä¾‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:59 msgid "``ansible-test shell --docker`` - Open a shell in the default docker container." msgstr "``ansible-test shell --docker`` - デフォルト㮠docker コンテナーã§ã‚·ã‚§ãƒ«ã‚’é–‹ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:60 msgid "``ansible-test shell --venv --python 3.6`` - Open a shell in a Python 3.6 virtual environment." msgstr "``ansible-test shell --venv --python 3.6`` - Python 3.6 仮想環境ã§ã‚·ã‚§ãƒ«ã‚’é–‹ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:64 msgid "Code Coverage" msgstr "コードã®å¯¾è±¡ç¯„囲" #: ../../rst/dev_guide/testing_running_locally.rst:66 msgid "Code coverage reports make it easy to identify untested code for which more tests should be written. Online reports are available but only cover the ``devel`` branch (see :ref:`developing_testing`). For new code local reports are needed." msgstr "コードã®å¯¾è±¡ç¯„囲レãƒãƒ¼ãƒˆã¯ã€ã‚ˆã‚Šå¤šãã®ãƒ†ã‚¹ãƒˆãŒè¨˜è¿°ã•れるã¹ã未テストã®ã‚³ãƒ¼ãƒ‰ã‚’ç°¡å˜ã«è­˜åˆ¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚オンラインレãƒãƒ¼ãƒˆãŒåˆ©ç”¨ã§ãã¾ã™ãŒã€``devel`` ブランãƒã®ã¿ã‚’扱ã„ã¾ã™ (:ref:`developing_testing` ã‚’å‚ç…§)。新è¦ã‚³ãƒ¼ãƒ‰ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¬ãƒãƒ¼ãƒˆãŒå¿…è¦ãªå ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:70 msgid "Add the ``--coverage`` option to any test command to collect code coverage data. If you aren't using the ``--venv`` or ``--docker`` options which create an isolated python environment then you may have to use the ``--requirements`` option to ensure that the correct version of the coverage module is installed::" msgstr "コードカãƒãƒ¬ãƒƒã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã™ã‚‹ãƒ†ã‚¹ãƒˆã‚³ãƒžãƒ³ãƒ‰ã« ``--coverage`` オプションを追加ã—ã¾ã™ã€‚分離ã—㟠python 環境を作æˆã™ã‚‹ ``--venv`` オプションã¾ãŸã¯ ``--docker`` オプションを使用ã—ã¦ã„ãªã„å ´åˆã¯ã€``--requirements`` オプションを使用ã—ã¦ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ­£ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:81 #: ../../rst/dev_guide/testing_units.rst:191 msgid "Reports can be generated in several different formats:" msgstr "Report ã¯ã€è¤‡æ•°ã®å½¢å¼ã§ç”Ÿæˆã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:83 #: ../../rst/dev_guide/testing_units.rst:193 msgid "``ansible-test coverage report`` - Console report." msgstr "``ansible-test coverage report`` - コンソールレãƒãƒ¼ãƒˆã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:84 #: ../../rst/dev_guide/testing_units.rst:194 msgid "``ansible-test coverage html`` - HTML report." msgstr "``ansible-test coverage html`` - HTML レãƒãƒ¼ãƒˆã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:85 #: ../../rst/dev_guide/testing_units.rst:195 msgid "``ansible-test coverage xml`` - XML report." msgstr "``ansible-test coverage xml`` - XML レãƒãƒ¼ãƒˆã€‚" #: ../../rst/dev_guide/testing_running_locally.rst:87 msgid "To clear data between test runs, use the ``ansible-test coverage erase`` command. For a full list of features see the online help::" msgstr "テスト実行間ã®ãƒ‡ãƒ¼ã‚¿ã‚’消去ã™ã‚‹ã«ã¯ã€``ansible-test coverage erase`` コマンドを使用ã—ã¾ã™ã€‚機能ã®å…¨ä¸€è¦§ã«ã¤ã„ã¦ã¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_sanity.rst:11 msgid "Sanity tests are made up of scripts and tools used to perform static code analysis. The primary purpose of these tests is to enforce Ansible coding standards and requirements." msgstr "å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ã€é™çš„コード分æžã®å®Ÿè¡Œã«ä½¿ç”¨ã•れるスクリプトãŠã‚ˆã³ãƒ„ãƒ¼ãƒ«ã§æ§‹æˆã•れã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆã®ä¸»ãªç›®çš„ã¯ã€Ansible コーディングã®ä»•様ãŠã‚ˆã³è¦ä»¶ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing_sanity.rst:14 msgid "Tests are run with ``ansible-test sanity``. All available tests are run unless the ``--test`` option is used." msgstr "テストã¯ã€``ansible-test sanity`` ã§å®Ÿè¡Œã—ã¾ã™ã€‚``--test`` オプションを使用ã—ãªã„é™ã‚Šã€åˆ©ç”¨å¯èƒ½ãªãƒ†ã‚¹ãƒˆã¯ã™ã¹ã¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_sanity.rst:19 msgid "How to run" msgstr "実行方法" #: ../../rst/dev_guide/testing_sanity.rst:22 msgid "To run sanity tests using docker, always use the default docker image by passing the ``--docker`` or ``--docker default`` argument." msgstr "docker を使用ã—ã¦å¥å¸¸æ€§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€å¸¸ã« ``--docker`` 引数ã¾ãŸã¯ ``--docker default`` 引数を渡ã™ã“ã¨ã§ãƒ‡ãƒ•ォルト㮠docker イメージを常ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_sanity.rst:26 msgid "When using docker and the ``--base-branch`` argument, also use the ``--keep-git`` argument to avoid git related errors." msgstr "docker ãŠã‚ˆã³ ``--base-branch`` 引数を使用ã™ã‚‹å ´åˆã¯ã€git 関連ã®ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ãŸã‚ã« ``--keep-git`` 引数も使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_sanity.rst:49 #: ../../rst/dev_guide/testing_units.rst:17 msgid "Available Tests" msgstr "利用å¯èƒ½ãªãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_sanity.rst:51 msgid "Tests can be listed with ``ansible-test sanity --list-tests``." msgstr "テスト㯠``ansible-test sanity --list-tests`` ã§ä¸€è¦§è¡¨ç¤ºã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_sanity.rst:53 msgid "See the full list of :ref:`sanity tests `, which details the various tests and details how to fix identified issues." msgstr "å„種テストや特定ã•れãŸå•題を解決ã™ã‚‹æ–¹æ³•ã®è©³ç´°ã¯ã€ã€Œ:ref:`å¥å…¨æ€§ãƒ†ã‚¹ãƒˆ `ã€ã®ä¸€è¦§ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:7 msgid "Unit Tests" msgstr "ユニットテスト" #: ../../rst/dev_guide/testing_units.rst:9 msgid "Unit tests are small isolated tests that target a specific library or module. Unit tests in Ansible are currently the only way of driving tests from python within Ansible's continuous integration process. This means that in some circumstances the tests may be a bit wider than just units." msgstr "ユニットテストã¯ã€ç‰¹å®šã®ãƒ©ã‚¤ãƒ–ラリーã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’対象ã¨ã™ã‚‹å°è¦æ¨¡ã®åˆ†é›¢ãƒ†ã‚¹ãƒˆã§ã™ã€‚ç¾åœ¨ã€Ansible ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€Ansible ã®ç¶™ç¶šçš„çµ±åˆãƒ—ロセスã®ä¸­ã§ã€python ã‹ã‚‰ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã§ã™ã€‚ã¤ã¾ã‚Šã€çжæ³ã«ã‚ˆã£ã¦ã¯ã€ãƒ†ã‚¹ãƒˆã«ã¯ãƒ¦ãƒ‹ãƒƒãƒˆä»¥å¤–ã®ã‚‚ã®ã‚‚å«ã¾ã‚Œã‚‹å ´åˆãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:19 msgid "Unit tests can be found in `test/units `_. Notice that the directory structure of the tests matches that of ``lib/ansible/``." msgstr "ユニットテスト㯠`test/units `_ ã«ã‚りã¾ã™ã€‚テストã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒ ``lib/ansible/`` ã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:27 msgid "To run unit tests using docker, always use the default docker image by passing the ``--docker`` or ``--docker default`` argument." msgstr "docker を使用ã—ã¦ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€``--docker`` 引数ã¾ãŸã¯ ``--docker default`` 引数を渡ã™ã“ã¨ã§å¸¸ã«ãƒ‡ãƒ•ォルト㮠docker イメージを使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:30 msgid "The Ansible unit tests can be run across the whole code base by doing:" msgstr "Ansible ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ä»¥ä¸‹ã®æ“作を実行ã—ã¦ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹å…¨ä½“ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:50 msgid "If you are running unit tests against things other than modules, such as module utilities, specify the whole file path:" msgstr "モジュールユーティリティーãªã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä»¥å¤–ã®ã‚‚ã®ã«å¯¾ã—ã¦ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ•ァイルパス全体を指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:56 msgid "For advanced usage see the online help::" msgstr "高度ãªä½¿ç”¨æ–¹æ³•ã¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:60 msgid "You can also run tests in Ansible's continuous integration system by opening a pull request. This will automatically determine which tests to run based on the changes made in your pull request." msgstr "ãƒ—ãƒ«è¦æ±‚ã‚’é–‹ã„ã¦ã€Ansible ã®ç¶™ç¶šçš„çµ±åˆã‚·ã‚¹ãƒ†ãƒ ã§ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—ãƒ«è¦æ±‚ã§å®Ÿè¡Œã•れãŸå¤‰æ›´ã«åŸºã¥ã„ã¦ã€å®Ÿè¡Œã•れるテストãŒè‡ªå‹•çš„ã«æ±ºå®šã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:68 msgid "If you are running ``ansible-test`` with the ``--docker`` or ``--venv`` option you do not need to install dependencies manually." msgstr "``--docker`` オプションã¾ãŸã¯ ``--venv`` オプションを指定ã—㦠``ansible-test`` を実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä¾å­˜é–¢ä¿‚を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_units.rst:70 msgid "Otherwise you can install dependencies using the ``--requirements`` option, which will install all the required dependencies needed for unit tests. For example:" msgstr "ãれ以外ã®å ´åˆã¯ã€``--requirements`` オプションを使用ã—ã¦ä¾å­˜é–¢ä¿‚をインストールã—ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã«å¿…è¦ãªä¾å­˜é–¢ä¿‚ã‚’ã™ã¹ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:78 msgid "The list of unit test requirements can be found at `test/units/requirements.txt `_." msgstr "ユニットテストã®è¦ä»¶ä¸€è¦§ã¯ã€`test/units/requirements.txt `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:81 msgid "This does not include the list of unit test requirements for ``ansible-test`` itself, which can be found at `test/lib/ansible_test/_data/requirements/units.txt `_." msgstr "ã“れã«ã¯ã€``ansible-test`` ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆè¦ä»¶ã®ãƒªã‚¹ãƒˆã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。ãれã¯ã€`test/lib/ansible_test/_data/requirements/units.txt `_ ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:85 msgid "See also the `constraints `_ applicable to all test commands." msgstr "ã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã«é©ç”¨å¯èƒ½ãªã€Œ`制約 `_ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:91 msgid "Extending unit tests" msgstr "ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®æ‹¡å¼µ" #: ../../rst/dev_guide/testing_units.rst:94 msgid "What a unit test isn't" msgstr "ユニットテスト以外ã®ã‚‚ã®" #: ../../rst/dev_guide/testing_units.rst:96 msgid "If you start writing a test that requires external services then you may be writing an integration test, rather than a unit test." msgstr "外部サービスを必è¦ã¨ã™ã‚‹ãƒ†ã‚¹ãƒˆã‚’書ãå§‹ã‚ã‚‹ã¨ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã§ã¯ãªãçµ±åˆãƒ†ã‚¹ãƒˆã‚’書ãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:101 msgid "Structuring Unit Tests" msgstr "ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®æ§‹é€ " #: ../../rst/dev_guide/testing_units.rst:103 msgid "Ansible drives unit tests through `pytest `_. This means that tests can either be written a simple functions which are included in any file name like ``test_.py`` or as classes." msgstr "Ansible ã¯ã€`pytest `_ ã§ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’行ã„ã¾ã™ã€‚ã“れã¯ã€ãƒ†ã‚¹ãƒˆã¯ã€``test_.py`` ã®ãƒ•ァイルåã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã¨ã—ã¦å«ã¾ã‚Œã‚‹å˜ç´”ãªé–¢æ•°ã‚’記述ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:107 msgid "Here is an example of a function::" msgstr "以下ã¯ã€é–¢æ•°ã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:117 msgid "Here is an example of a class::" msgstr "以下ã¯ã‚¯ãƒ©ã‚¹ã®ä¾‹ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:137 msgid "Both methods work fine in most circumstances; the function-based interface is simpler and quicker and so that's probably where you should start when you are just trying to add a few basic tests for a module. The class-based test allows more tidy set up and tear down of pre-requisites, so if you have many test cases for your module you may want to refactor to use that." msgstr "ã©ã¡ã‚‰ã®æ–¹æ³•ã‚‚ã€ã»ã¨ã‚“ã©ã®çжæ³ã§æ­£å¸¸ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚関数ベースã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®æ–¹ãŒã‚·ãƒ³ãƒ—ルã§é€Ÿã„ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªãƒ†ã‚¹ãƒˆã‚’追加ã—よã†ã¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã“ã‹ã‚‰å§‹ã‚ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚クラスベースã®ãƒ†ã‚¹ãƒˆã§ã¯ã€å‰ææ¡ä»¶ã®è¨­å®šã‚„分解をより整然ã¨è¡Œã†ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¤šãã®ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ãŒã‚ã‚‹å ´åˆã¯ã€ãれを使用ã™ã‚‹ã‚ˆã†ã«ãƒªãƒ•ァクタリングã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:143 msgid "Assertions using the simple ``assert`` function inside the tests will give full information on the cause of the failure with a trace-back of functions called during the assertion. This means that plain asserts are recommended over other external assertion libraries." msgstr "テスト内ã®ç°¡å˜ãª ``assert`` 関数を使用ã™ã‚‹ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã«ã‚ˆã‚Šã€ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ä¸­ã«å‘¼ã³å‡ºã•れる関数ã®ãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ã§éšœå®³ã«é–¢ã™ã‚‹å®Œå…¨ãªæƒ…å ±ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“れã¯ã€ä»–ã®å¤–部アサーションライブラリーよりもã€ãƒ—ãƒ¬ãƒ¼ãƒ³ã‚¢ã‚µãƒ¼ãƒˆãŒæŽ¨å¥¨ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:148 msgid "A number of the unit test suites include functions that are shared between several modules, especially in the networking arena. In these cases a file is created in the same directory, which is then included directly." msgstr "多ãã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã«ã¯ã€ç‰¹ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®åˆ†é‡Žã§ã¯ã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å…±æœ‰ã•れる関数ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®å ´åˆã¯ã€åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ•ァイルãŒä½œæˆã•れã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ç›´æŽ¥å«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:154 msgid "Module test case common code" msgstr "モジュールテストケースã®å…±é€šã‚³ãƒ¼ãƒ‰" #: ../../rst/dev_guide/testing_units.rst:156 msgid "Keep common code as specific as possible within the `test/units/` directory structure. Don't import common unit test code from directories outside the current or parent directories." msgstr "`test/units/` ディレクトリー構造内ã§å¯èƒ½ãªé™ã‚Šå…·ä½“çš„ã«å…±é€šã‚³ãƒ¼ãƒ‰ã‚’ç¶­æŒã—ã¾ã™ã€‚ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¾ãŸã¯è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ä»¥å¤–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰å…±é€šã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚³ãƒ¼ãƒ‰ã‚’インãƒãƒ¼ãƒˆã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:159 msgid "Don't import other unit tests from a unit test. Any common code should be in dedicated files that aren't themselves tests." msgstr "ユニットテストã‹ã‚‰ä»–ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’インãƒãƒ¼ãƒˆã—ãªã„ã§ãã ã•ã„。共通ã®ã‚³ãƒ¼ãƒ‰ã¯ã€ãƒ†ã‚¹ãƒˆè‡ªä½“ã§ã¯ãªã„専用ã®ãƒ•ァイルã«å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:164 msgid "Fixtures files" msgstr "Fixtures ファイル" #: ../../rst/dev_guide/testing_units.rst:166 msgid "To mock out fetching results from devices, or provide other complex data structures that come from external libraries, you can use ``fixtures`` to read in pre-generated data." msgstr "デãƒã‚¤ã‚¹ã‹ã‚‰ã®çµæžœã®å–得を模倣ã—ãŸã‚Šã€å¤–部ライブラリーã‹ã‚‰å–å¾—ã—ãŸä»–ã®è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’æä¾›ã™ã‚‹ãŸã‚ã«ã€``fixtures`` を使用ã—ã¦äº‹å‰ã«ç”Ÿæˆã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:169 msgid "You can check how `fixtures `_ are used in `cpuinfo fact tests `_" msgstr "`cpuinfo ファクトテスト `_ ã§ã€`fixtures `_ ãŒä½¿ç”¨ã•れる方法を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:172 msgid "If you are simulating APIs you may find that Python placebo is useful. See :ref:`testing_units_modules` for more information." msgstr "API ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã—ã¦ã„ã‚‹ã®ã§ã‚れã°ã€Python ã®ãƒ—ラシーボãŒå½¹ã«ç«‹ã¤ã‹ã‚‚ã—れã¾ã›ã‚“。詳細ã¯ã€ã€Œ:ref:`testing_units_modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:177 msgid "Code Coverage For New or Updated Unit Tests" msgstr "æ–°è¦ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¾ãŸã¯æ›´æ–°ã•れãŸãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆç”¨ã®ã‚³ãƒ¼ãƒ‰å¯¾å¿œ" #: ../../rst/dev_guide/testing_units.rst:178 msgid "New code will be missing from the codecov.io coverage reports (see :ref:`developing_testing`), so local reporting is needed. Most ``ansible-test`` commands allow you to collect code coverage; this is particularly useful when to indicate where to extend testing." msgstr "codecov.io ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã‹ã‚‰æ–°ã—ã„ã‚³ãƒ¼ãƒ‰ãŒæ¬ è½ã— (:ref:`developing_testing`ã‚’å‚ç…§)ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¬ãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã€‚ã»ã¨ã‚“ã©ã® ``ansible-test`` コマンドを使用ã™ã‚‹ã¨ã€ã‚³ãƒ¼ãƒ‰ã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’åŽé›†ã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ†ã‚¹ãƒˆã‚’æ‹¡å¼µã™ã‚‹å ´æ‰€ã‚’示ã™ã¨ãã«ç‰¹ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:182 msgid "To collect coverage data add the ``--coverage`` argument to your ``ansible-test`` command line:" msgstr "ã‚«ãƒãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã™ã‚‹ã«ã¯ã€``--coverage`` 引数を ``ansible-test`` コマンドラインã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:189 msgid "Results will be written to ``test/results/reports/coverage/index.html``" msgstr "çµæžœã¯ ``test/results/reports/coverage/index.html`` ã«æ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units.rst:197 msgid "To clear data between test runs, use the ``ansible-test coverage erase`` command. See :ref:`testing_running_locally` for more information about generating coverage reports." msgstr "テスト実行間ã®ãƒ‡ãƒ¼ã‚¿ã‚’消去ã™ã‚‹ã«ã¯ã€``ansible-test coverage erase`` コマンドを使用ã—ã¾ã™ã€‚ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã®ç”Ÿæˆã®è©³ç´°ã¯ã€ã€Œ:ref:`testing_running_locally`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units.rst:204 msgid ":ref:`testing_units_modules`" msgstr ":ref:`testing_units_modules`" #: ../../rst/dev_guide/testing_units.rst:205 msgid "Special considerations for unit testing modules" msgstr "ユニットテストモジュールã«é–¢ã™ã‚‹ç‰¹åˆ¥ãªè€ƒæ…®äº‹é …" #: ../../rst/dev_guide/testing_units.rst:206 #: ../../rst/dev_guide/testing_units_modules.rst:543 msgid ":ref:`testing_running_locally`" msgstr ":ref:`testing_running_locally`" #: ../../rst/dev_guide/testing_units.rst:207 #: ../../rst/dev_guide/testing_units_modules.rst:544 msgid "Running tests locally including gathering and reporting coverage data" msgstr "ã‚«ãƒãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã®åŽé›†ã¨ãƒ¬ãƒãƒ¼ãƒˆã‚’å«ã‚€ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_units.rst:208 #: ../../rst/dev_guide/testing_units_modules.rst:547 msgid "`Python 3 documentation - 26.4. unittest — Unit testing framework `_" msgstr "`Python 3 documentation - 26.4. unittest — Unit testing framework `_" #: ../../rst/dev_guide/testing_units.rst:209 #: ../../rst/dev_guide/testing_units_modules.rst:548 msgid "The documentation of the unittest framework in python 3" msgstr "Python 3 ã«ãŠã‘るユニットテストフレームワークã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/dev_guide/testing_units.rst:210 #: ../../rst/dev_guide/testing_units_modules.rst:549 msgid "`Python 2 documentation - 25.3. unittest — Unit testing framework `_" msgstr "`Python 2 documentation - 25.3. unittest — Unit testing framework `_" #: ../../rst/dev_guide/testing_units.rst:211 #: ../../rst/dev_guide/testing_units_modules.rst:550 msgid "The documentation of the earliest supported unittest framework - from Python 2.6" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹åˆæœŸã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãƒ•レームワークã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ (Python 2.6)" #: ../../rst/dev_guide/testing_units.rst:212 #: ../../rst/dev_guide/testing_units_modules.rst:551 msgid "`pytest: helps you write better programs `_" msgstr "`pytest: helps you write better programs `_" #: ../../rst/dev_guide/testing_units.rst:213 #: ../../rst/dev_guide/testing_units_modules.rst:552 msgid "The documentation of pytest - the framework actually used to run Ansible unit tests" msgstr "pytest ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ - Ansible ユニットテストã®å®Ÿè¡Œã«å®Ÿéš›ã«ä½¿ç”¨ã•れã¦ã„るフレームワーク" #: ../../rst/dev_guide/testing_units_modules.rst:7 msgid "Unit Testing Ansible Modules" msgstr "Ansible モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_units_modules.rst:16 msgid "This document explains why, how and when you should use unit tests for Ansible modules. The document doesn't apply to other parts of Ansible for which the recommendations are normally closer to the Python standard. There is basic documentation for Ansible unit tests in the developer guide :ref:`testing_units`. This document should be readable for a new Ansible module author. If you find it incomplete or confusing, please open a bug or ask for help on the #ansible-devel chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã€Ansible モジュールã«ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’使用ã™ã‚‹ç†ç”±ã€æ–¹æ³•ã€ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’説明ã—ã¾ã™ã€‚ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€é€šå¸¸ Python ã®æ¨™æº–ã«è¿‘ã„æŽ¨å¥¨äº‹é …ã‚’æŒã¤ Ansible ã®ä»–ã®éƒ¨åˆ†ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。Ansible ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã«é–¢ã™ã‚‹åŸºæœ¬çš„ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€é–‹ç™ºè€…ガイドã®ã€Œ:ref:`testing_units`ã€ã«ã‚りã¾ã™ã€‚ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€æ–°ã—ã„ Ansible モジュールã®ä½œæˆè€…ã«ã¨ã£ã¦èª­ã¿ã‚„ã™ã„ã‚‚ã®ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ä¸å®Œå…¨ã ã£ãŸã‚Šã€åˆ†ã‹ã‚Šã«ãã‹ã£ãŸã‚Šã—ãŸå ´åˆã¯ã€ãƒã‚°ã‚’報告ã—ãŸã‚Šã€#ansible-develãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« ã§åŠ©ã‘を求ã‚ãŸã‚Šã—ã¦ãã ã•ã„(ansible.imã§Matrixを使用ã€ã¾ãŸã¯`irc.libera.chat `_ã§IRCを使用)。" #: ../../rst/dev_guide/testing_units_modules.rst:24 msgid "What Are Unit Tests?" msgstr "ユニットテストã¨ã¯" #: ../../rst/dev_guide/testing_units_modules.rst:26 msgid "Ansible includes a set of unit tests in the :file:`test/units` directory. These tests primarily cover the internals but can also cover Ansible modules. The structure of the unit tests matches the structure of the code base, so the tests that reside in the :file:`test/units/modules/` directory are organized by module groups." msgstr "Ansible ã«ã¯ã€:file:`test/units` ディレクトリーã«ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®ã‚»ãƒƒãƒˆãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€ä¸»ã«å†…部ã«å¯¾å¿œã—ã¦ã„ã¾ã™ãŒã€Ansible モジュールã«ã‚‚対応ã—ã¾ã™ã€‚ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®æ§‹é€ ã¯ã‚³ãƒ¼ãƒ‰ãƒ™ãƒ¼ã‚¹ã®ãƒ™ãƒ¼ã‚¹ã®æ§‹é€ ã«ä¸€è‡´ã—ã€:file:`test/units/modules/` ディレクトリーã«å«ã¾ã‚Œã‚‹ãƒ†ã‚¹ãƒˆã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã”ã¨ã«ç·¨æˆã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:31 msgid "Integration tests can be used for most modules, but there are situations where cases cannot be verified using integration tests. This means that Ansible unit test cases may extend beyond testing only minimal units and in some cases will include some level of functional testing." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã¯ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ãŒã€çµ±åˆãƒ†ã‚¹ãƒˆã§ã¯ã‚±ãƒ¼ã‚¹ã‚’検証ã§ããªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ã¤ã¾ã‚Šã€Ansible ユニットテストケースã¯ã€æœ€å°é™ã®ãƒ¦ãƒ‹ãƒƒãƒˆã®ã¿ã®ãƒ†ã‚¹ãƒˆã«ã¨ã©ã¾ã‚‰ãšã€å ´åˆã«ã‚ˆã£ã¦ã¯ã€ã‚ã‚‹ç¨‹åº¦ã®æ©Ÿèƒ½ãƒ†ã‚¹ãƒˆãŒå«ã¾ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:38 msgid "Why Use Unit Tests?" msgstr "ユニットテストを使用ã™ã‚‹ç†ç”±" #: ../../rst/dev_guide/testing_units_modules.rst:40 msgid "Ansible unit tests have advantages and disadvantages. It is important to understand these. Advantages include:" msgstr "Ansible ユニットテストã«ã¯é•·æ‰€ã¨çŸ­æ‰€ãŒã‚りã€ãã®ç‚¹ã‚’ç†è§£ã™ã‚‹ã“ã¨ã¯é‡è¦ã§ã™ã€‚ä»¥ä¸‹ãŒæŒ™ã’られã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:43 msgid "Most unit tests are much faster than most Ansible integration tests. The complete suite of unit tests can be run regularly by a developer on their local system." msgstr "ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ã»ã¨ã‚“ã©ã® Ansible çµ±åˆãƒ†ã‚¹ãƒˆã‚ˆã‚Šã‚‚ã¯ã‚‹ã‹ã«é«˜é€Ÿã§ã™ã€‚ユニットテストã®å®Œå…¨ãªã‚¹ã‚¤ãƒ¼ãƒˆã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã§é–‹ç™ºè€…ãŒå®šæœŸçš„ã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:45 msgid "Unit tests can be run by developers who don't have access to the system which the module is designed to work on, allowing a level of verification that changes to core functions haven't broken module expectations." msgstr "ユニットテストã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå‹•作ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„るシステムã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„開発者ãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã€ã‚³ã‚¢æ©Ÿèƒ½ã¸ã®å¤‰æ›´ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æœŸå¾…ã©ãŠã‚Šã§ã‚ã‚‹ã“ã¨ã‚’ã‚る程度検証ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:48 msgid "Unit tests can easily substitute system functions allowing testing of software that would be impractical. For example, the ``sleep()`` function can be replaced and we check that a ten minute sleep was called without actually waiting ten minutes." msgstr "ユニットテストã¯ã€ã‚·ã‚¹ãƒ†ãƒ é–¢æ•°ã‚’ç°¡å˜ã«ç½®æ›ã§ãã€å®Ÿç¾ã™ã‚‹ã‚½ãƒ•トウェアã®ãƒ†ã‚¹ãƒˆã‚’ç°¡å˜ã«æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``sleep()`` é–¢æ•°ã‚’ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã€å®Ÿéš›ã« 10 分待ãŸãšã« 10 分ã®ã‚¹ãƒªãƒ¼ãƒ—ãŒå‘¼ã³å‡ºã•れãŸã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:51 msgid "Unit tests are run on different Python versions. This allows us to ensure that the code behaves in the same way on different Python versions." msgstr "ユニットテストã¯ã€Python ã®å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å®Ÿè¡Œã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ãŒç•°ãªã‚‹ Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚‚åŒã˜ã‚ˆã†ã«å‹•作ã™ã‚‹ã“ã¨ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:54 msgid "There are also some potential disadvantages of unit tests. Unit tests don't normally directly test actual useful valuable features of software, instead just internal implementation" msgstr "ユニットテストã«ã¯ã€ã„ãã¤ã‹ã®æ½œåœ¨çš„ãªæ¬ ç‚¹ã‚‚ã‚りã¾ã™ã€‚通常ã€å®Ÿéš›ã«ä¾¿åˆ©ã§ä¾¡å€¤ã®ã‚る機能を直接テストã›ãšã€ä»£ã‚りã«å†…部実装をテストã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:58 msgid "Unit tests that test the internal, non-visible features of software may make refactoring difficult if those internal features have to change (see also naming in How below)" msgstr "ソフトウェア内部ã«ã‚ã‚‹ã€ç›®ã«è¦‹ãˆãªã„機能をテストã™ã‚‹ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ãれらã®å†…部機能を変更ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ãƒªãƒ•ァクタリングを困難ã«ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ (以下ã®ã€Œæ–¹æ³•ã€ã®å‘½åã‚‚å‚ç…§)。" #: ../../rst/dev_guide/testing_units_modules.rst:61 msgid "Even if the internal feature is working correctly it is possible that there will be a problem between the internal code tested and the actual result delivered to the user" msgstr "å†…éƒ¨æ©Ÿèƒ½ãŒæ­£ã—ãæ©Ÿèƒ½ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ãƒ†ã‚¹ãƒˆã•れãŸå†…部コードã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é…ä¿¡ã•れる実際ã®çµæžœã¨ã®é–“ã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:64 msgid "Normally the Ansible integration tests (which are written in Ansible YAML) provide better testing for most module functionality. If those tests already test a feature and perform well there may be little point in providing a unit test covering the same area as well." msgstr "通常ã€(Ansible YAML ã§è¨˜è¿°ã•れる) Ansible çµ±åˆãƒ†ã‚¹ãƒˆã¯ã€ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ©Ÿèƒ½ã«å¯¾ã—ã¦ã‚ˆã‚Šè‰¯ã„テストをæä¾›ã—ã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆãŒã™ã§ã«æ©Ÿèƒ½ã‚’テストã—ã¦ã„ã¦ã€ã†ã¾ã機能ã—ã¦ã„ã‚‹å ´åˆã¯ã€åŒã˜é ˜åŸŸã‚’ã‚«ãƒãƒ¼ã™ã‚‹ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’æä¾›ã™ã‚‹æ„味ã¯ã»ã¨ã‚“ã©ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_units_modules.rst:69 msgid "When To Use Unit Tests" msgstr "ユニットテストを使用ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°" #: ../../rst/dev_guide/testing_units_modules.rst:71 msgid "There are a number of situations where unit tests are a better choice than integration tests. For example, testing things which are impossible, slow or very difficult to test with integration tests, such as:" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆã‚ˆã‚Šã‚‚ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®æ–¹ãŒé©ã—ã¦ã„る状æ³ã¯æ•°å¤šãã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€æ¬¡ã®ã‚ˆã†ãªçµ±åˆãƒ†ã‚¹ãƒˆã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã“ã¨ãŒä¸å¯èƒ½ã§ã€é…ã„ã€ã¾ãŸã¯éžå¸¸ã«é›£ã—ã„ã‚‚ã®ã‚’テストã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:75 msgid "Forcing rare / strange / random situations that can't be forced, such as specific network failures and exceptions" msgstr "特定ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯éšœå®³ã‚„例外ã®ã‚ˆã†ãªã€å¼·åˆ¶ã™ã‚‹ã“ã¨ãŒã§ããªã„稀ãªã€å¥‡å¦™ãªã€ãŠã‚ˆã³ãƒ©ãƒ³ãƒ€ãƒ ãªçжæ³ã‚’強制。" #: ../../rst/dev_guide/testing_units_modules.rst:77 msgid "Extensive testing of slow configuration APIs" msgstr "é…ã„設定 API ã®åºƒç¯„ãªãƒ†ã‚¹ãƒˆ" #: ../../rst/dev_guide/testing_units_modules.rst:78 msgid "Situations where the integration tests cannot be run as part of the main Ansible continuous integration running in Azure Pipelines." msgstr "Azure Pipeline ã§å®Ÿè¡Œã•れã¦ã„るメイン㮠Ansible 継続的統åˆã®ä¸€éƒ¨ã¨ã—ã¦ã€çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã§ããªã„状æ³ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:84 msgid "Providing quick feedback" msgstr "迅速ãªãƒ•ィードãƒãƒƒã‚¯ã®æä¾›" #: ../../rst/dev_guide/testing_units_modules.rst:87 msgid "A single step of the rds_instance test cases can take up to 20 minutes (the time to create an RDS instance in Amazon). The entire test run can last for well over an hour. All 16 of the unit tests complete execution in less than 2 seconds." msgstr "rds_instance ã®ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã® 1 ã¤ã®ã‚¹ãƒ†ãƒƒãƒ—ã«ã¯ã€æœ€å¤§ 20 分 (Amazonã§ RDS インスタンスを作æˆã™ã‚‹æ™‚é–“) ã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚テストã®å®Ÿè¡Œã¯ã€å…¨ä½“ã§ 1 時間以上ã‹ã‹ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚16 個ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ã™ã¹ã¦ 2 秒以内ã«å®Ÿè¡Œã‚’完了ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:92 msgid "The time saving provided by being able to run the code in a unit test makes it worth creating a unit test when bug fixing a module, even if those tests do not often identify problems later. As a basic goal, every module should have at least one unit test which will give quick feedback in easy cases without having to wait for the integration tests to complete." msgstr "ユニットテストã§ã‚³ãƒ¼ãƒ‰ã‚’実行ã§ãã‚‹ã“ã¨ã«ã‚ˆã£ã¦æä¾›ã•れる時間ã®ç¯€ç´„ã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒã‚°ä¿®æ­£æ™‚ã«ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’作æˆã™ã‚‹ä¾¡å€¤ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ†ã‚¹ãƒˆã§å¾Œã§å•題ãŒç‰¹å®šã•れるã“ã¨ã¯ã‚ã¾ã‚Šã‚りã¾ã›ã‚“。基本的ãªç›®æ¨™ã¨ã—ã¦ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯å°‘ãªãã¨ã‚‚ 1 ã¤ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŒå¿…è¦ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€çµ±åˆãƒ†ã‚¹ãƒˆãŒå®Œäº†ã™ã‚‹ã®ã‚’å¾…ãŸãšã«ã€ç°¡å˜ãªã‚±ãƒ¼ã‚¹ã§è¿…速ãªãƒ•ィードãƒãƒƒã‚¯ãŒå¾—られã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:99 msgid "Ensuring correct use of external interfaces" msgstr "外部インターフェースを正ã—ã使用ã™ã‚‹ã“ã¨" #: ../../rst/dev_guide/testing_units_modules.rst:101 msgid "Unit tests can check the way in which external services are run to ensure that they match specifications or are as efficient as possible *even when the final output will not be changed*." msgstr "ユニットテストã¯ã€*最終的ãªå‡ºåŠ›ãŒå¤‰æ›´ã•れãªã„å ´åˆã§ã‚‚*ã€å¤–部サービスã®å®Ÿè¡Œæ–¹æ³•ãŒä»•様ã«åˆè‡´ã—ã¦ã„ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯å¯èƒ½ãªé™ã‚ŠåŠ¹çŽ‡çš„ã§ã‚ã‚‹ã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:105 msgid "Package managers are often far more efficient when installing multiple packages at once rather than each package separately. The final result is the same: the packages are all installed, so the efficiency is difficult to verify through integration tests. By providing a mock package manager and verifying that it is called once, we can build a valuable test for module efficiency." msgstr "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã€å„パッケージを個別ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚ˆã‚Šã‚‚ã€è¤‡æ•°ã®ãƒ‘ッケージを一度ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹æ–¹ãŒã¯ã‚‹ã‹ã«åŠ¹çŽ‡çš„ã§ã‚ã‚‹ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚æœ€çµ‚çµæžœã¯åŒã˜ã§ã™ã€‚ã™ã¹ã¦ã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れるãŸã‚ã€çµ±åˆãƒ†ã‚¹ãƒˆã§åŠ¹çŽ‡ã‚’æ¤œè¨¼ã™ã‚‹ã“ã¨ã¯å›°é›£ã§ã™ã€‚模擬パッケージマãƒãƒ¼ã‚¸ãƒ£ã‚’æä¾›ã—ã€ãれãŒä¸€åº¦ã«å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚’検証ã™ã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åŠ¹çŽ‡ã«ã¤ã„ã¦è²´é‡ãªãƒ†ã‚¹ãƒˆã‚’構築ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:111 msgid "Another related use is in the situation where an API has versions which behave differently. A programmer working on a new version may change the module to work with the new API version and unintentionally break the old version. A test case which checks that the call happens properly for the old version can help avoid the problem. In this situation it is very important to include version numbering in the test case name (see `Naming unit tests`_ below)." msgstr "別ã®é–¢é€£ã™ã‚‹ä½¿ç”¨æ³•ã¯ã€API ã®å‹•作ãŒç•°ãªã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚る状æ³ã§ã™ã€‚æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ä½œæ¥­ã—ã¦ã„るプログラマーã¯ã€æ–°ã—ã„ API ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’変更ã—ã€æ„図ã›ãšã«å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’壊ã—ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‘¼ã³å‡ºã—ãŒé©åˆ‡ã«è¡Œã‚れるã“ã¨ã‚’確èªã™ã‚‹ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã¯ã€å•題を回é¿ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã“ã®çжæ³ã§ã¯ã€ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹åã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’å«ã‚ã‚‹ã“ã¨ãŒéžå¸¸ã«é‡è¦ã§ã™ (以下 `Naming unit tests`_ ã‚’å‚ç…§)。" #: ../../rst/dev_guide/testing_units_modules.rst:119 msgid "Providing specific design tests" msgstr "特定ã®è¨­è¨ˆãƒ†ã‚¹ãƒˆã®æä¾›" #: ../../rst/dev_guide/testing_units_modules.rst:121 msgid "By building a requirement for a particular part of the code and then coding to that requirement, unit tests _can_ sometimes improve the code and help future developers understand that code." msgstr "コードã®ç‰¹å®šã®éƒ¨åˆ†ã«å¯¾ã™ã‚‹è¦ä»¶ã‚’構築ã—ã€ãã®è¦ä»¶ã«åˆã‚ã›ã¦ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹ã“ã¨ã§ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€æ™‚ã«ã¯ã‚³ãƒ¼ãƒ‰ã‚’改善ã—ã€å°†æ¥ã®é–‹ç™ºè€…ãŒãã®ã‚³ãƒ¼ãƒ‰ã‚’ç†è§£ã™ã‚‹åŠ©ã‘ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:125 msgid "Unit tests that test internal implementation details of code, on the other hand, almost always do more harm than good. Testing that your packages to install are stored in a list would slow down and confuse a future developer who might need to change that list into a dictionary for efficiency. This problem can be reduced somewhat with clear test naming so that the future developer immediately knows to delete the test case, but it is often better to simply leave out the test case altogether and test for a real valuable feature of the code, such as installing all of the packages supplied as arguments to the module." msgstr "一方ã€ã‚³ãƒ¼ãƒ‰ã®å†…部実装ã®è©³ç´°ã‚’テストã™ã‚‹ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆã€ç›Šã‚ˆã‚Šã‚‚害をもãŸã‚‰ã—ã¾ã™ã€‚インストールã™ã‚‹ãƒ‘ッケージãŒãƒªã‚¹ãƒˆã«æ ¼ç´ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’テストã™ã‚‹ã¨ã€é…ããªã‚Šã€åŠ¹çŽ‡åŒ–ã®ãŸã‚ã«ãƒªã‚¹ãƒˆã‚’ディクショナリーã«å¤‰æ›´ã—ãªã„ã¨ã„ã‘ãªã„å°†æ¥ã®é–‹ç™ºè€…ã‚’æ··ä¹±ã•ã›ã¾ã™ã€‚ã“ã®å•題ã¯ã€å°†æ¥ã®é–‹ç™ºè€…ãŒã™ãã«ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’削除ã™ã‚‹ã“ã¨ãŒã‚ã‹ã‚‹ã‚ˆã†ã«ã€æ˜Žç¢ºãªãƒ†ã‚¹ãƒˆåã‚’ã¤ã‘ã‚‹ã“ã¨ã§å¤šå°‘軽減ã§ãã¾ã™ãŒã€å˜ã«ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’完全ã«é™¤å¤–ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¼•æ•°ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸã™ã¹ã¦ã®ãƒ‘ッケージをインストールã™ã‚‹ãªã©ã€ã‚³ãƒ¼ãƒ‰ã®æœ¬å½“ã®ä¾¡å€¤ã‚る機能をテストã™ã‚‹æ–¹ãŒè‰¯ã„å ´åˆãŒå¤šã„ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:135 msgid "How to unit test Ansible modules" msgstr "Ansible モジュールをユニットテストã™ã‚‹æ–¹æ³•" #: ../../rst/dev_guide/testing_units_modules.rst:137 msgid "There are a number of techniques for unit testing modules. Beware that most modules without unit tests are structured in a way that makes testing quite difficult and can lead to very complicated tests which need more work than the code. Effectively using unit tests may lead you to restructure your code. This is often a good thing and leads to better code overall. Good restructuring can make your code clearer and easier to understand." msgstr "ユニットテストモジュールã«ã¯ã„ãã¤ã‹ã®æ‰‹æ³•ãŒã‚りã¾ã™ã€‚ユニットテストã®ãªã„ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ãƒ†ã‚¹ãƒˆãŒéžå¸¸ã«å›°é›£ã«ãªã‚Šã€ã‚³ãƒ¼ãƒ‰ã‚ˆã‚Šã‚‚多ãã®ä½œæ¥­ãŒå¿…è¦ãªã€éžå¸¸ã«è¤‡é›‘ãªãƒ†ã‚¹ãƒˆã«ã¤ãªãŒã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ユニットテストを効果的ã«ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ã‚³ãƒ¼ãƒ‰ã‚’冿§‹ç¯‰ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯å¤šãã®å ´åˆè‰¯ã„ã“ã¨ã§ã‚りã€å…¨ä½“çš„ã«å„ªã‚ŒãŸã‚³ãƒ¼ãƒ‰ã«ã¤ãªãŒã‚Šã¾ã™ã€‚é©åˆ‡ãªå†æ§‹ç¯‰ã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ãŒã‚ˆã‚Šæ˜Žç¢ºã«ãªã‚Šã€ç†è§£ã—ã‚„ã™ããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:145 msgid "Naming unit tests" msgstr "ユニットテストã®å‘½å" #: ../../rst/dev_guide/testing_units_modules.rst:147 msgid "Unit tests should have logical names. If a developer working on the module being tested breaks the test case, it should be easy to figure what the unit test covers from the name. If a unit test is designed to verify compatibility with a specific software or API version then include the version in the name of the unit test." msgstr "ユニットテストã¯è«–ç†åを付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚テスト対象ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½œæ¥­ã—ã¦ã„る開発者ãŒãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’壊ã—ã¦ã—ã¾ã£ãŸå ´åˆã«ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãŒä½•を対象ã¨ã—ã¦ã„ã‚‹ã®ã‹ãŒåå‰ã‹ã‚‰ç°¡å˜ã«åˆ†ã‹ã‚‹ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ユニットテストãŒç‰¹å®šã®ã‚½ãƒ•トウェアや API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã®äº’æ›æ€§ã‚’検証ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã‚‹å ´åˆã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®åå‰ã«ãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’追加ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units_modules.rst:152 msgid "As an example, ``test_v2_state_present_should_call_create_server_with_name()`` would be a good name, ``test_create_server()`` would not be." msgstr "ãŸã¨ãˆã°ã€``test_v2_state_present_should_call_create_server_with_name()`` ãŒé©åˆ‡ãªåå‰ã§ã€``test_create_server()`` ã¯é©åˆ‡ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_units_modules.rst:157 msgid "Use of Mocks" msgstr "モックã®ä½¿ç”¨" #: ../../rst/dev_guide/testing_units_modules.rst:159 msgid "Mock objects (from https://docs.python.org/3/library/unittest.mock.html) can be very useful in building unit tests for special / difficult cases, but they can also lead to complex and confusing coding situations. One good use for mocks would be in simulating an API. As for 'six', the 'mock' python package is bundled with Ansible (use ``import units.compat.mock``)." msgstr "(https://docs.python.org/3/library/unittest.mock.html_ ã‹ã‚‰ã®) モックオブジェクトã¯ã€ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹ã‚„困難ãªã‚±ãƒ¼ã‚¹ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’構築ã™ã‚‹ã®ã«éžå¸¸ã«ä¾¿åˆ©ã§ã™ãŒã€è¤‡é›‘ã§ç†è§£ã—ã¥ã‚‰ã„コーディングã«ãªã£ã¦ã—ã¾ã†ã“ã¨ã‚‚ã‚りã¾ã™ã€‚モックã®ä½¿ç”¨æ–¹æ³•ã¨ã—ã¦é©åˆ‡ãªã‚‚ã®ã® 1 ã¤ã«ã€API ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆãŒã‚りã¾ã™ã€‚Python パッケージã®ã€Œsixã€ã€ã€Œmockã€ã¯ã€Ansible ã«ãƒãƒ³ãƒ‰ãƒ«ã•れã¦ã„ã¾ã™ (``import units.compat.mock`` を使用)。" #: ../../rst/dev_guide/testing_units_modules.rst:166 msgid "Ensuring failure cases are visible with mock objects" msgstr "モックオブジェクトã§éšœå®³ã‚±ãƒ¼ã‚¹ã‚’確実ã«å¯è¦–化" #: ../../rst/dev_guide/testing_units_modules.rst:168 msgid "Functions like :meth:`module.fail_json` are normally expected to terminate execution. When you run with a mock module object this doesn't happen since the mock always returns another mock from a function call. You can set up the mock to raise an exception as shown above, or you can assert that these functions have not been called in each test. For example::" msgstr ":meth:`module.fail_json` ãªã©ã®é–¢æ•°ã¯ã€é€šå¸¸ã€å®Ÿè¡Œã‚’終了ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚モックモジュールオブジェクトを使用ã—ã¦å®Ÿè¡Œã™ã‚‹ã¨ã€ãƒ¢ãƒƒã‚¯ã¯å¸¸ã«é–¢æ•°å‘¼ã³å‡ºã—ã‹ã‚‰åˆ¥ã®ãƒ¢ãƒƒã‚¯ã‚’è¿”ã™ãŸã‚ã€ã“ã®ã‚ˆã†ãªã“ã¨ã¯èµ·ã“りã¾ã›ã‚“。上記ã®ã‚ˆã†ã«ä¾‹å¤–を発生ã•ã›ã‚‹ã‚ˆã†ã«ãƒ¢ãƒƒã‚¯ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€å„テストã§ã“れらã®é–¢æ•°ãŒå‘¼ã³å‡ºã•れã¦ã„ãªã„ã“ã¨ã‚’アサートã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:177 msgid "This applies not only to calling the main module but almost any other function in a module which gets the module object." msgstr "ã“れã¯ã€ãƒ¡ã‚¤ãƒ³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™å ´åˆã ã‘ã§ãªãã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ–ジェクトをå–å¾—ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å†…ã®ä»–ã®ã»ã¨ã‚“ã©ã®é–¢æ•°ã‚’呼ã³å‡ºã™å ´åˆã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:182 msgid "Mocking of the actual module" msgstr "実際ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¢ãƒƒã‚¯åŒ–" #: ../../rst/dev_guide/testing_units_modules.rst:184 msgid "The setup of an actual module is quite complex (see `Passing Arguments`_ below) and often isn't needed for most functions which use a module. Instead you can use a mock object as the module and create any module attributes needed by the function you are testing. If you do this, beware that the module exit functions need special handling as mentioned above, either by throwing an exception or ensuring that they haven't been called. For example::" msgstr "実際ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è¨­å®šã¯éžå¸¸ã«è¤‡é›‘ã§ (以下㮠`Passing Arguments`_ ã‚’å‚ç…§)ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã«ã¯å¿…è¦ã‚りã¾ã›ã‚“。モックオブジェクトをモジュールã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ä»£ã‚りã«ã€ãƒ†ã‚¹ãƒˆã™ã‚‹é–¢æ•°ã§å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å±žæ€§ã‚’作æˆã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®çµ‚了関数ã¯ã€ä¸Šè¿°ã®ã‚ˆã†ã«ã€ä¾‹å¤–を発生ã•ã›ã‚‹ã‹ã€å‘¼ã³å‡ºã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã™ã‚‹ãªã©ã€ç‰¹åˆ¥ãªå‡¦ç†ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:203 msgid "API definition with unit test cases" msgstr "ユニットテストケースã§ã® API 定義" #: ../../rst/dev_guide/testing_units_modules.rst:205 msgid "API interaction is usually best tested with the function tests defined in Ansible's integration testing section, which run against the actual API. There are several cases where the unit tests are likely to work better." msgstr "API ã®å¯¾è©±ã¯é€šå¸¸ã€å®Ÿéš›ã® API ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹ Ansible ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§å®šç¾©ã•れãŸé–¢æ•°ãƒ†ã‚¹ãƒˆã§ãƒ†ã‚¹ãƒˆã‚’行ã†ã®ãŒæœ€é©ã§ã™ã€‚ユニットテストãŒé©åˆ‡ã«æ©Ÿèƒ½ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:210 msgid "Defining a module against an API specification" msgstr "API ã®ä»•様ã«å¯¾ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’定義" #: ../../rst/dev_guide/testing_units_modules.rst:212 msgid "This case is especially important for modules interacting with web services, which provide an API that Ansible uses but which are beyond the control of the user." msgstr "ã“ã®ã‚±ãƒ¼ã‚¹ã¯ã€Ansible ãŒä½¿ç”¨ã™ã‚‹ API ã‚’æä¾›ã—ã¦ã„ã‚‹ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åˆ¶å¾¡ãŒåŠã°ãªã„ Web サービスã¨å¯¾è©±ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¨ã£ã¦ç‰¹ã«é‡è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:215 msgid "By writing a custom emulation of the calls that return data from the API, we can ensure that only the features which are clearly defined in the specification of the API are present in the message. This means that we can check that we use the correct parameters and nothing else." msgstr "API ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™å‘¼ã³å‡ºã—ã®ã‚«ã‚¹ã‚¿ãƒ ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’書ãã“ã¨ã§ã€API ã®ä»•æ§˜ã§æ˜Žç¢ºã«å®šç¾©ã•れã¦ã„る機能ã®ã¿ãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«å«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€æ­£ã—ã„パラメーターを使用ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã€ãれ以外ã¯ä½•も使用ã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:221 msgid "*Example: in rds_instance unit tests a simple instance state is defined*::" msgstr "*例: rds_instance ユニットテストã§ã¯ã€å˜ç´”ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®çŠ¶æ…‹ãŒå®šç¾©ã•れã¦ã„ã¾ã™*::" #: ../../rst/dev_guide/testing_units_modules.rst:229 msgid "This is then used to create a list of states::" msgstr "次ã«ã€ã“れを使用ã—ã¦çŠ¶æ…‹ã®ãƒªã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:244 msgid "These states are then used as returns from a mock object to ensure that the ``await`` function waits through all of the states that would mean the RDS instance has not yet completed configuration::" msgstr "ã“れらã®çŠ¶æ…‹ã¯ã€ãƒ¢ãƒƒã‚¯ã‚ªãƒ–ジェクトã‹ã‚‰ã®æˆ»ã‚Šå€¤ã¨ã—ã¦ä½¿ç”¨ã•れã€``await`` 関数ã¯ã€RDS インスタンスãŒã¾ã è¨­å®šã‚’完了ã—ãªã„ã“ã¨ã‚’æ„味ã™ã‚‹ã™ã¹ã¦ã®çŠ¶æ…‹ã‚’å¾…æ©Ÿã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:252 msgid "By doing this we check that the ``await`` function will keep waiting through potentially unusual that it would be impossible to reliably trigger through the integration tests but which happen unpredictably in reality." msgstr "ã“れを実行ã™ã‚‹ã“ã¨ã§ã€çµ±åˆãƒ†ã‚¹ãƒˆã§ã¯ç¢ºå®Ÿã«èª˜ç™ºã•ã›ã‚‹ã“ã¨ãŒã§ããªã„ã«ã‚‚ã‹ã‹ã‚らãšã€ç¾å®Ÿã«ã¯äºˆæ¸¬ã§ããªã„よã†ãªã€æ½œåœ¨çš„ã«ç•°å¸¸ãªã“ã¨ãŒèµ·ã“ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã« ``await`` 関数ãŒå¾…機ã—ç¶šã‘ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:257 msgid "Defining a module to work against multiple API versions" msgstr "複数㮠API ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã—ã¦å‹•作ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®šç¾©" #: ../../rst/dev_guide/testing_units_modules.rst:259 msgid "This case is especially important for modules interacting with many different versions of software; for example, package installation modules that might be expected to work with many different operating system versions." msgstr "ã“ã®ã‚±ãƒ¼ã‚¹ã¯ã€å¤šãã®ç•°ãªã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚½ãƒ•トウェアã¨å¯¾è©±ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¨ã£ã¦ç‰¹ã«é‡è¦ã§ã™ã€‚ãŸã¨ãˆã°ã€ã•ã¾ã–ã¾ãªã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨å‹•作ã™ã‚‹ã“ã¨ãŒæƒ³å®šã•れるパッケージインストールモジュールãªã©ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:263 msgid "By using previously stored data from various versions of an API we can ensure that the code is tested against the actual data which will be sent from that version of the system even when the version is very obscure and unlikely to be available during testing." msgstr "ã•ã¾ã–ã¾ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® API ã‹ã‚‰ã€ä»¥å‰ã«ä¿å­˜ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒéžå¸¸ã«æ›–昧ã§ãƒ†ã‚¹ãƒˆä¸­ã«åˆ©ç”¨ã§ããã†ã«ãªã„å ´åˆã§ã‚‚ã€ãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰é€ä¿¡ã•れる実際ã®ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦ã‚³ãƒ¼ãƒ‰ãŒãƒ†ã‚¹ãƒˆã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:268 msgid "Ansible special cases for unit testing" msgstr "Ansible ユニットテストã®ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹" #: ../../rst/dev_guide/testing_units_modules.rst:270 msgid "There are a number of special cases for unit testing the environment of an Ansible module. The most common are documented below, and suggestions for others can be found by looking at the source code of the existing unit tests or asking on the Ansible chat channel or mailing lists. For more information on joining chat channels and subscribing to mailing lists, see :ref:`communication`." msgstr "Ansible モジュールã®ç’°å¢ƒã«å¯¾ã—ã¦ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’行ã†ãŸã‚ã®ç‰¹åˆ¥ãªã‚±ãƒ¼ã‚¹ãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚最も一般的ãªã‚‚ã®ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚ä»–ã®äººã¸ã®ææ¡ˆã¯ã€æ—¢å­˜ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’確èªã™ã‚‹ã‹ã€Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¾ãŸã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§è³ªå•ã™ã‚‹ã“ã¨ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加ãŠã‚ˆã³ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®ã‚µãƒ–スクライブã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`communication`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units_modules.rst:276 msgid "Module argument processing" msgstr "モジュール引数処ç†" #: ../../rst/dev_guide/testing_units_modules.rst:278 msgid "There are two problems with running the main function of a module:" msgstr "モジュールã®ä¸»ãªé–¢æ•°ã®å®Ÿè¡Œã«ã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®å•題ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:280 msgid "Since the module is supposed to accept arguments on ``STDIN`` it is a bit difficult to set up the arguments correctly so that the module will get them as parameters." msgstr "モジュール㯠``STDIN`` ã§å¼•æ•°ã‚’å—ã‘入れる必è¦ãŒã‚ã‚‹ãŸã‚ã€å¼•æ•°ã‚’æ­£ã—ã設定ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒ‘ラメーターã¨ã—ã¦å—ã‘å–るよã†ã«ã™ã‚‹ã®ã¯å°‘ã—難ã—ããªã‚Šã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:282 msgid "All modules should finish by calling either the :meth:`module.fail_json` or :meth:`module.exit_json`, but these won't work correctly in a testing environment." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€:meth:`module.fail_json` ã¾ãŸã¯ :meth:`module.exit_json` を呼ã³å‡ºã—ã¦çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã§ã¯æ­£å¸¸ã«å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_units_modules.rst:286 msgid "Passing Arguments" msgstr "å¼•æ•°ã®æ¸¡ã—æ–¹" #: ../../rst/dev_guide/testing_units_modules.rst:291 msgid "To pass arguments to a module correctly, use the ``set_module_args`` method which accepts a dictionary as its parameter. Module creation and argument processing is handled through the :class:`AnsibleModule` object in the basic section of the utilities. Normally this accepts input on ``STDIN``, which is not convenient for unit testing. When the special variable is set it will be treated as if the input came on ``STDIN`` to the module. Simply call that function before setting up your module::" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ­£ã—ã引数を渡ã™ã«ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’パラメーターã¨ã—ã¦å—ã‘付ã‘ã‚‹ ``set_module_args`` メソッドを使用ã—ã¾ã™ã€‚モジュールã®ä½œæˆã¨å¼•æ•°ã®å‡¦ç†ã¯ã€ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®åŸºæœ¬ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹ :class:`AnsibleModule` オブジェクトã«ã‚ˆã£ã¦å‡¦ç†ã•れã¾ã™ã€‚通常㯠``STDIN`` ã§å…¥åŠ›ã‚’å—ã‘付ã‘ã¾ã™ãŒã€ã“れã¯ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã«ã¯ä¸ä¾¿ã§ã™ã€‚特殊変数ãŒè¨­å®šã•れるã¨ã€ã‚ãŸã‹ã‚‚入力㌠``STDIN`` ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¥ãŸã‹ã®ã‚ˆã†ã«æ‰±ã‚れã¾ã™ã€‚モジュールをセットアップã™ã‚‹å‰ã«ã“ã®é–¢æ•°ã‚’呼ã³å‡ºã™ã ã‘ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:309 msgid "Handling exit correctly" msgstr "終了をé©åˆ‡ã«å‡¦ç†" #: ../../rst/dev_guide/testing_units_modules.rst:314 msgid "The :meth:`module.exit_json` function won't work properly in a testing environment since it writes error information to ``STDOUT`` upon exit, where it is difficult to examine. This can be mitigated by replacing it (and :meth:`module.fail_json`) with a function that raises an exception::" msgstr ":meth:`module.exit_json` 関数ã¯ã€çµ‚了時ã«ã‚¨ãƒ©ãƒ¼æƒ…報を ``STDOUT`` ã«æ›¸ã込むãŸã‚ã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã§é©åˆ‡ã«å‹•作ã—ã¾ã›ã‚“。ã“ã‚Œã¯æ¤œè¨¼ãŒå›°é›£ã§ã™ã€‚ã“れã¯ã€ã“ã®é–¢æ•° (ãŠã‚ˆã³ :meth:`module.fail_json`) ã‚’ã€ä¾‹å¤–を発生ã•ã›ã‚‹é–¢æ•°ã«ç½®ãæ›ãˆã‚‹ã“ã¨ã§è»½æ¸›ã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:324 msgid "Now you can ensure that the first function called is the one you expected simply by testing for the correct exception::" msgstr "ã“れã§ã€æ­£ã—ã„例外をテストã™ã‚‹ã ã‘ã§ã€æœ€åˆã«å‘¼ã³å‡ºã•れãŸé–¢æ•°ãŒæœŸå¾…ã—ãŸã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:337 msgid "The same technique can be used to replace :meth:`module.fail_json` (which is used for failure returns from modules) and for the ``aws_module.fail_json_aws()`` (used in modules for Amazon Web Services)." msgstr "åŒã˜ãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’使用ã—ã¦ã€:meth:`module.fail_json` (モジュールã‹ã‚‰è¿”る障害ã«ä½¿ç”¨) ãŠã‚ˆã³ ``aws_module.fail_json_aws()`` (Amazon Web Services ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä½¿ç”¨) ã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:342 msgid "Running the main function" msgstr "主ãªé–¢æ•°ã®å®Ÿè¡Œ" #: ../../rst/dev_guide/testing_units_modules.rst:344 msgid "If you do want to run the actual main function of a module you must import the module, set the arguments as above, set up the appropriate exit exception and then run the module::" msgstr "モジュールã«ãŠã‘る主ãªå®Ÿé–¢æ•°ã‚’実行ã™ã‚‹å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ã€ä¸Šè¨˜ã®ã‚ˆã†ã«å¼•数を設定ã—ã€é©åˆ‡ãªçµ‚了例外を設定ã—ã¦ã‹ã‚‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:362 msgid "Handling calls to external executables" msgstr "外部実行ファイルã¸ã®å‘¼ã³å‡ºã—ã®å‡¦ç†" #: ../../rst/dev_guide/testing_units_modules.rst:364 msgid "Module must use :meth:`AnsibleModule.run_command` in order to execute an external command. This method needs to be mocked:" msgstr "モジュールã¯ã€å¤–部コマンドを実行ã™ã‚‹ã®ã« :meth:`AnsibleModule.run_command` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’モックã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:367 msgid "Here is a simple mock of :meth:`AnsibleModule.run_command` (taken from :file:`test/units/modules/packaging/os/test_rhn_register.py`)::" msgstr "以下ã¯ã€:meth:`AnsibleModule.run_command` (:file:`test/units/modules/packaging/os/test_rhn_register.py` ã‹ã‚‰å–å¾—) ã®ç°¡å˜ãªãƒ¢ãƒƒã‚¯ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:381 msgid "A Complete Example" msgstr "完全ãªä¾‹" #: ../../rst/dev_guide/testing_units_modules.rst:383 msgid "The following example is a complete skeleton that reuses the mocks explained above and adds a new mock for :meth:`Ansible.get_bin_path`::" msgstr "次ã®ä¾‹ã¯ã€ä¸Šè¨˜ã§èª¬æ˜Žã—ãŸãƒ¢ãƒƒã‚¯ã‚’å†åˆ©ç”¨ã—ã€:meth:`Ansible.get_bin_path` ã®æ–°ã—ã„モックを追加ã™ã‚‹å®Œå…¨ãªã‚¹ã‚±ãƒ«ãƒˆãƒ³ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:469 msgid "Restructuring modules to enable testing module set up and other processes" msgstr "モジュールã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã‚„ãã®ä»–ã®ãƒ—ロセスã®ãƒ†ã‚¹ãƒˆã‚’å¯èƒ½ã«ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å†æ§‹ç¯‰" #: ../../rst/dev_guide/testing_units_modules.rst:471 msgid "Often modules have a ``main()`` function which sets up the module and then performs other actions. This can make it difficult to check argument processing. This can be made easier by moving module configuration and initialization into a separate function. For example::" msgstr "多ãã®å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’セットアップã—ã€ä»–ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ ``main()`` 関数ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¼•数処ç†ã‚’確èªã™ã‚‹ã®ãŒå›°é›£ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚モジュールã®è¨­å®šã¨åˆæœŸåŒ–を別ã®é–¢æ•°ã«ç§»ã™ã“ã¨ã§ç°¡å˜ã«ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:501 msgid "This now makes it possible to run tests against the module initiation function::" msgstr "ã“れã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹å§‹é–¢æ•°ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã‚’実行ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:513 msgid "See also ``test/units/module_utils/aws/test_rds.py``" msgstr "「``test/units/module_utils/aws/test_rds.py``ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units_modules.rst:515 msgid "Note that the ``argument_spec`` dictionary is visible in a module variable. This has advantages, both in allowing explicit testing of the arguments and in allowing the easy creation of module objects for testing." msgstr "``argument_spec`` ディクショナリーã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¤‰æ•°ã«è¡¨ç¤ºã•れã¾ã™ã€‚ã“れã«ã¯ã€å¼•æ•°ã®æ˜Žç¤ºçš„ãªãƒ†ã‚¹ãƒˆã‚’許å¯ã—ã€ãƒ†ã‚¹ãƒˆç”¨ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ–ジェクトã®ä½œæˆã‚’ç°¡å˜ã«è¡Œãˆã‚‹ã‚ˆã†ã«ã™ã‚‹åˆ©ç‚¹ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:519 msgid "The same restructuring technique can be valuable for testing other functionality, such as the part of the module which queries the object that the module configures." msgstr "ã“ã®å†æ§‹ç¯‰ã®æ‰‹æ³•ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¨­å®šã—ãŸã‚ªãƒ–ジェクトをå•ã„åˆã‚ã›ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®éƒ¨åˆ†ãªã©ã€ãã®ä»–ã®æ©Ÿèƒ½ã‚’テストã™ã‚‹å ´åˆã«ã‚‚å½¹ã«ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:522 msgid "Traps for maintaining Python 2 compatibility" msgstr "Python 2 ã®äº’æ›æ€§ã‚’ç¶­æŒã™ã‚‹ãŸã‚ã®ãƒˆãƒ©ãƒƒãƒ—" #: ../../rst/dev_guide/testing_units_modules.rst:524 msgid "If you use the ``mock`` library from the Python 2.6 standard library, a number of the assert functions are missing but will return as if successful. This means that test cases should take great care *not* use functions marked as _new_ in the Python 3 documentation, since the tests will likely always succeed even if the code is broken when run on older versions of Python." msgstr "Python 2.6 標準ライブラリー㮠``mock`` ライブラリーを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€å¤šãã® assert é–¢æ•°ãŒæ¬ è½ã—ã¦ã„ã¾ã™ãŒã€æˆåŠŸã—ãŸã‹ã®ã‚ˆã†ã«è¿”ã•れã¾ã™ã€‚ã“れã¯ã€ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ãŒã€Python 3 ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ _new_ ã¨ãªã£ã¦ã„る関数を使用ã—ãªã„よã†ã€ç´°å¿ƒã®æ³¨æ„を払ã†ã¹ãã§ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãªãœãªã‚‰ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§å®Ÿè¡Œã•れãŸã‚³ãƒ¼ãƒ‰ãŒå£Šã‚Œã¦ã„ã¦ã‚‚ã€ãƒ†ã‚¹ãƒˆã¯å¸¸ã«æˆåŠŸã™ã‚‹ã‹ã‚‰ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:529 msgid "A helpful development approach to this should be to ensure that all of the tests have been run under Python 2.6 and that each assertion in the test cases has been checked to work by breaking the code in Ansible to trigger that failure." msgstr "ã“れã«å½¹ç«‹ã¤é–‹ç™ºã‚¢ãƒ—ローãƒã¯ã€ã™ã¹ã¦ã®ãƒ†ã‚¹ãƒˆãŒ Python 2.6 ã§å®Ÿè¡Œã•れã¦ã„ã‚‹ã“ã¨ã¨ã€ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹å†…ã®å„アサーション㌠Ansible ã§ã‚³ãƒ¼ãƒ‰ã‚’壊ã—ã¦ãã®å¤±æ•—を誘発ã™ã‚‹ã“ã¨ã§å‹•作ã™ã‚‹ã“ã¨ãŒç¢ºèªã•れã¦ã„ã‚‹ã¨ã„ã†ç‚¹ã‚’確èªã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:533 msgid "Maintain Python 2.6 compatibility" msgstr "Python 2.6 äº’æ›æ€§ã®ç¶­æŒ" #: ../../rst/dev_guide/testing_units_modules.rst:535 msgid "Please remember that modules need to maintain compatibility with Python 2.6 so the unittests for modules should also be compatible with Python 2.6." msgstr "モジュール㯠Python 2.6 ã¨ã®äº’æ›æ€§ã‚’ç¶­æŒã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚‚ã€Python 2.6 ã¨ã®äº’æ›æ€§ã‚’ç¶­æŒã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_units_modules.rst:542 msgid "Ansible unit tests documentation" msgstr "Ansible ユニットテストドキュメント" #: ../../rst/dev_guide/testing_units_modules.rst:546 msgid "Get started developing a module" msgstr "モジュール開発を始ã‚ã‚‹" #: ../../rst/dev_guide/testing_units_modules.rst:555 msgid "`Testing Your Code (from The Hitchhiker's Guide to Python!) `_" msgstr "`Testing Your Code (from The Hitchhiker's Guide to Python!) `_" #: ../../rst/dev_guide/testing_units_modules.rst:556 msgid "General advice on testing Python code" msgstr "Python コードã®ãƒ†ã‚¹ãƒˆã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªã‚¢ãƒ‰ãƒã‚¤ã‚¹" #: ../../rst/dev_guide/testing_units_modules.rst:558 msgid "`Uncle Bob's many videos on YouTube `_" msgstr "`Uncle Bob's many videos on YouTube `_" #: ../../rst/dev_guide/testing_units_modules.rst:558 msgid "Unit testing is a part of the of various philosophies of software development, including Extreme Programming (XP), Clean Coding. Uncle Bob talks through how to benefit from this" msgstr "ユニットテストã¯ã€Extreme Programming (XP)ã€ã‚¯ãƒªãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’å«ã‚€ã‚½ãƒ•トウェア開発ã®ã•ã¾ã–ã¾ãªå“²å­¦ã®ä¸€éƒ¨ã§ã™ã€‚Uncle Bob ã¯ã€ã©ã®ã‚ˆã†ã«ã—ã¦ã“ã®æ©æµã‚’å—ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_units_modules.rst:560 msgid "`\"Why Most Unit Testing is Waste\" `_" msgstr "`\"Why Most Unit Testing is Waste\" `_" #: ../../rst/dev_guide/testing_units_modules.rst:561 msgid "An article warning against the costs of unit testing" msgstr "ユニットテストã®å¤§åŠãŒç„¡é§„ã§ã‚ã‚‹ç†ç”±" #: ../../rst/dev_guide/testing_units_modules.rst:562 msgid "`'A Response to \"Why Most Unit Testing is Waste\"' `_" msgstr "`'A Response to \"Why Most Unit Testing is Waste\"' `_" #: ../../rst/dev_guide/testing_units_modules.rst:563 msgid "An response pointing to how to maintain the value of unit tests" msgstr "ユニットテストã®ä¾¡å€¤ã‚’ç¶­æŒã™ã‚‹æ–¹æ³•を指摘ã—ãŸå›žç­”" #: ../../rst/dev_guide/testing_validate-modules.rst:11 msgid "Python program to help test or validate Ansible modules." msgstr "Ansible モジュールã®ãƒ†ã‚¹ãƒˆã¾ãŸã¯æ¤œè¨¼ã«å½¹ç«‹ã¤ Python プログラム。" #: ../../rst/dev_guide/testing_validate-modules.rst:13 msgid "``validate-modules`` is one of the ``ansible-test`` Sanity Tests, see :ref:`testing_sanity` for more information." msgstr "``validate-modules`` ã¯ã€å¥å…¨æ€§ãƒ†ã‚¹ãƒˆ ``ansible-test`` ã®ã„ãšã‚Œã‹ã§ã™ã€‚詳細ã¯ã€ã€Œ:ref:`testing_sanity`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:15 msgid "Originally developed by Matt Martz (@sivel)" msgstr "本プログラムã¯ã€å…ƒã€… Matt Martz (@sivel) æ°ã«ã‚ˆã‚Šé–‹ç™ºã•れã¾ã—ãŸã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:19 msgid "Usage" msgstr "使用法" #: ../../rst/dev_guide/testing_validate-modules.rst:28 msgid "Help" msgstr "ヘルプ" #: ../../rst/dev_guide/testing_validate-modules.rst:53 msgid "Extending validate-modules" msgstr "validate-modules ã®æ‹¡å¼µ" #: ../../rst/dev_guide/testing_validate-modules.rst:55 msgid "The ``validate-modules`` tool has a `schema.py `_ that is used to validate the YAML blocks, such as ``DOCUMENTATION`` and ``RETURNS``." msgstr "``validate-modules`` ツールã«ã¯ã€``DOCUMENTATION``ã€``RETURNS`` ãªã©ã® YAML ãƒ–ãƒ­ãƒƒã‚¯ã®æ¤œè¨¼ã«ä½¿ç”¨ã•れる `schema.py `_ ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:59 msgid "Codes" msgstr "コード" #: ../../rst/dev_guide/testing_validate-modules.rst:62 msgid "**Error Code**" msgstr "**エラーコード**" #: ../../rst/dev_guide/testing_validate-modules.rst:62 msgid "**Type**" msgstr "**タイプ**" #: ../../rst/dev_guide/testing_validate-modules.rst:62 msgid "**Level**" msgstr "**レベル**" #: ../../rst/dev_guide/testing_validate-modules.rst:62 msgid "**Sample Message**" msgstr "**開始メッセージ**" #: ../../rst/dev_guide/testing_validate-modules.rst:64 msgid "ansible-deprecated-module" msgstr "ansible-deprecated-module" #: ../../rst/dev_guide/testing_validate-modules.rst:64 #: ../../rst/dev_guide/testing_validate-modules.rst:65 #: ../../rst/dev_guide/testing_validate-modules.rst:66 #: ../../rst/dev_guide/testing_validate-modules.rst:68 #: ../../rst/dev_guide/testing_validate-modules.rst:69 #: ../../rst/dev_guide/testing_validate-modules.rst:70 #: ../../rst/dev_guide/testing_validate-modules.rst:71 #: ../../rst/dev_guide/testing_validate-modules.rst:72 #: ../../rst/dev_guide/testing_validate-modules.rst:73 #: ../../rst/dev_guide/testing_validate-modules.rst:74 #: ../../rst/dev_guide/testing_validate-modules.rst:75 #: ../../rst/dev_guide/testing_validate-modules.rst:76 #: ../../rst/dev_guide/testing_validate-modules.rst:77 #: ../../rst/dev_guide/testing_validate-modules.rst:78 #: ../../rst/dev_guide/testing_validate-modules.rst:79 #: ../../rst/dev_guide/testing_validate-modules.rst:80 #: ../../rst/dev_guide/testing_validate-modules.rst:81 #: ../../rst/dev_guide/testing_validate-modules.rst:84 #: ../../rst/dev_guide/testing_validate-modules.rst:87 #: ../../rst/dev_guide/testing_validate-modules.rst:88 #: ../../rst/dev_guide/testing_validate-modules.rst:89 #: ../../rst/dev_guide/testing_validate-modules.rst:90 #: ../../rst/dev_guide/testing_validate-modules.rst:91 #: ../../rst/dev_guide/testing_validate-modules.rst:92 #: ../../rst/dev_guide/testing_validate-modules.rst:93 #: ../../rst/dev_guide/testing_validate-modules.rst:94 #: ../../rst/dev_guide/testing_validate-modules.rst:96 #: ../../rst/dev_guide/testing_validate-modules.rst:97 #: ../../rst/dev_guide/testing_validate-modules.rst:99 #: ../../rst/dev_guide/testing_validate-modules.rst:100 #: ../../rst/dev_guide/testing_validate-modules.rst:101 #: ../../rst/dev_guide/testing_validate-modules.rst:102 #: ../../rst/dev_guide/testing_validate-modules.rst:103 #: ../../rst/dev_guide/testing_validate-modules.rst:109 #: ../../rst/dev_guide/testing_validate-modules.rst:110 #: ../../rst/dev_guide/testing_validate-modules.rst:111 #: ../../rst/dev_guide/testing_validate-modules.rst:112 #: ../../rst/dev_guide/testing_validate-modules.rst:113 #: ../../rst/dev_guide/testing_validate-modules.rst:117 #: ../../rst/dev_guide/testing_validate-modules.rst:119 #: ../../rst/dev_guide/testing_validate-modules.rst:120 #: ../../rst/dev_guide/testing_validate-modules.rst:121 #: ../../rst/dev_guide/testing_validate-modules.rst:122 #: ../../rst/dev_guide/testing_validate-modules.rst:123 #: ../../rst/dev_guide/testing_validate-modules.rst:124 #: ../../rst/dev_guide/testing_validate-modules.rst:125 #: ../../rst/dev_guide/testing_validate-modules.rst:128 #: ../../rst/dev_guide/testing_validate-modules.rst:132 #: ../../rst/dev_guide/testing_validate-modules.rst:133 #: ../../rst/dev_guide/testing_validate-modules.rst:134 #: ../../rst/dev_guide/testing_validate-modules.rst:137 #: ../../rst/dev_guide/testing_validate-modules.rst:139 #: ../../rst/dev_guide/testing_validate-modules.rst:145 #: ../../rst/dev_guide/testing_validate-modules.rst:146 #: ../../rst/dev_guide/testing_validate-modules.rst:147 #: ../../rst/dev_guide/testing_validate-modules.rst:148 #: ../../rst/dev_guide/testing_validate-modules.rst:149 #: ../../rst/dev_guide/testing_validate-modules.rst:150 #: ../../rst/dev_guide/testing_validate-modules.rst:151 #: ../../rst/dev_guide/testing_validate-modules.rst:152 #: ../../rst/dev_guide/testing_validate-modules.rst:153 #: ../../rst/dev_guide/testing_validate-modules.rst:154 #: ../../rst/dev_guide/testing_validate-modules.rst:155 #: ../../rst/dev_guide/testing_validate-modules.rst:156 #: ../../rst/dev_guide/testing_validate-modules.rst:157 #: ../../rst/dev_guide/testing_validate-modules.rst:158 #: ../../rst/dev_guide/testing_validate-modules.rst:159 #: ../../rst/dev_guide/testing_validate-modules.rst:160 #: ../../rst/dev_guide/testing_validate-modules.rst:161 #: ../../rst/dev_guide/testing_validate-modules.rst:162 #: ../../rst/dev_guide/testing_validate-modules.rst:163 #: ../../rst/dev_guide/testing_validate-modules.rst:164 msgid "Documentation" msgstr "ドキュメント" #: ../../rst/dev_guide/testing_validate-modules.rst:64 #: ../../rst/dev_guide/testing_validate-modules.rst:65 #: ../../rst/dev_guide/testing_validate-modules.rst:66 #: ../../rst/dev_guide/testing_validate-modules.rst:67 #: ../../rst/dev_guide/testing_validate-modules.rst:68 #: ../../rst/dev_guide/testing_validate-modules.rst:69 #: ../../rst/dev_guide/testing_validate-modules.rst:70 #: ../../rst/dev_guide/testing_validate-modules.rst:71 #: ../../rst/dev_guide/testing_validate-modules.rst:72 #: ../../rst/dev_guide/testing_validate-modules.rst:73 #: ../../rst/dev_guide/testing_validate-modules.rst:74 #: ../../rst/dev_guide/testing_validate-modules.rst:75 #: ../../rst/dev_guide/testing_validate-modules.rst:76 #: ../../rst/dev_guide/testing_validate-modules.rst:77 #: ../../rst/dev_guide/testing_validate-modules.rst:78 #: ../../rst/dev_guide/testing_validate-modules.rst:79 #: ../../rst/dev_guide/testing_validate-modules.rst:80 #: ../../rst/dev_guide/testing_validate-modules.rst:81 #: ../../rst/dev_guide/testing_validate-modules.rst:82 #: ../../rst/dev_guide/testing_validate-modules.rst:83 #: ../../rst/dev_guide/testing_validate-modules.rst:84 #: ../../rst/dev_guide/testing_validate-modules.rst:86 #: ../../rst/dev_guide/testing_validate-modules.rst:87 #: ../../rst/dev_guide/testing_validate-modules.rst:88 #: ../../rst/dev_guide/testing_validate-modules.rst:89 #: ../../rst/dev_guide/testing_validate-modules.rst:90 #: ../../rst/dev_guide/testing_validate-modules.rst:91 #: ../../rst/dev_guide/testing_validate-modules.rst:92 #: ../../rst/dev_guide/testing_validate-modules.rst:93 #: ../../rst/dev_guide/testing_validate-modules.rst:94 #: ../../rst/dev_guide/testing_validate-modules.rst:95 #: ../../rst/dev_guide/testing_validate-modules.rst:96 #: ../../rst/dev_guide/testing_validate-modules.rst:97 #: ../../rst/dev_guide/testing_validate-modules.rst:98 #: ../../rst/dev_guide/testing_validate-modules.rst:99 #: ../../rst/dev_guide/testing_validate-modules.rst:101 #: ../../rst/dev_guide/testing_validate-modules.rst:102 #: ../../rst/dev_guide/testing_validate-modules.rst:103 #: ../../rst/dev_guide/testing_validate-modules.rst:105 #: ../../rst/dev_guide/testing_validate-modules.rst:106 #: ../../rst/dev_guide/testing_validate-modules.rst:107 #: ../../rst/dev_guide/testing_validate-modules.rst:108 #: ../../rst/dev_guide/testing_validate-modules.rst:109 #: ../../rst/dev_guide/testing_validate-modules.rst:111 #: ../../rst/dev_guide/testing_validate-modules.rst:112 #: ../../rst/dev_guide/testing_validate-modules.rst:113 #: ../../rst/dev_guide/testing_validate-modules.rst:114 #: ../../rst/dev_guide/testing_validate-modules.rst:115 #: ../../rst/dev_guide/testing_validate-modules.rst:116 #: ../../rst/dev_guide/testing_validate-modules.rst:117 #: ../../rst/dev_guide/testing_validate-modules.rst:118 #: ../../rst/dev_guide/testing_validate-modules.rst:119 #: ../../rst/dev_guide/testing_validate-modules.rst:120 #: ../../rst/dev_guide/testing_validate-modules.rst:121 #: ../../rst/dev_guide/testing_validate-modules.rst:122 #: ../../rst/dev_guide/testing_validate-modules.rst:123 #: ../../rst/dev_guide/testing_validate-modules.rst:124 #: ../../rst/dev_guide/testing_validate-modules.rst:125 #: ../../rst/dev_guide/testing_validate-modules.rst:126 #: ../../rst/dev_guide/testing_validate-modules.rst:127 #: ../../rst/dev_guide/testing_validate-modules.rst:128 #: ../../rst/dev_guide/testing_validate-modules.rst:129 #: ../../rst/dev_guide/testing_validate-modules.rst:130 #: ../../rst/dev_guide/testing_validate-modules.rst:131 #: ../../rst/dev_guide/testing_validate-modules.rst:132 #: ../../rst/dev_guide/testing_validate-modules.rst:133 #: ../../rst/dev_guide/testing_validate-modules.rst:134 #: ../../rst/dev_guide/testing_validate-modules.rst:135 #: ../../rst/dev_guide/testing_validate-modules.rst:137 #: ../../rst/dev_guide/testing_validate-modules.rst:138 #: ../../rst/dev_guide/testing_validate-modules.rst:140 #: ../../rst/dev_guide/testing_validate-modules.rst:141 #: ../../rst/dev_guide/testing_validate-modules.rst:142 #: ../../rst/dev_guide/testing_validate-modules.rst:143 #: ../../rst/dev_guide/testing_validate-modules.rst:144 #: ../../rst/dev_guide/testing_validate-modules.rst:145 #: ../../rst/dev_guide/testing_validate-modules.rst:146 #: ../../rst/dev_guide/testing_validate-modules.rst:147 #: ../../rst/dev_guide/testing_validate-modules.rst:148 #: ../../rst/dev_guide/testing_validate-modules.rst:149 #: ../../rst/dev_guide/testing_validate-modules.rst:150 #: ../../rst/dev_guide/testing_validate-modules.rst:151 #: ../../rst/dev_guide/testing_validate-modules.rst:152 #: ../../rst/dev_guide/testing_validate-modules.rst:153 #: ../../rst/dev_guide/testing_validate-modules.rst:154 #: ../../rst/dev_guide/testing_validate-modules.rst:155 #: ../../rst/dev_guide/testing_validate-modules.rst:156 #: ../../rst/dev_guide/testing_validate-modules.rst:157 #: ../../rst/dev_guide/testing_validate-modules.rst:158 #: ../../rst/dev_guide/testing_validate-modules.rst:159 #: ../../rst/dev_guide/testing_validate-modules.rst:160 #: ../../rst/dev_guide/testing_validate-modules.rst:161 #: ../../rst/dev_guide/testing_validate-modules.rst:162 #: ../../rst/dev_guide/testing_validate-modules.rst:163 #: ../../rst/dev_guide/testing_validate-modules.rst:164 msgid "Error" msgstr "エラー" #: ../../rst/dev_guide/testing_validate-modules.rst:64 msgid "A module is deprecated and supposed to be removed in the current or an earlier Ansible version" msgstr "モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ç¾è¡Œã¾ãŸã¯ãれ以å‰ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:65 msgid "collection-deprecated-module" msgstr "collection-deprecated-module" #: ../../rst/dev_guide/testing_validate-modules.rst:65 msgid "A module is deprecated and supposed to be removed in the current or an earlier collection version" msgstr "モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ç¾è¡Œã¾ãŸã¯ãれ以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:66 msgid "ansible-deprecated-version" msgstr "ansible-deprecated-version" #: ../../rst/dev_guide/testing_validate-modules.rst:66 msgid "A feature is deprecated and supposed to be removed in the current or an earlier Ansible version" msgstr "機能ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ç¾è¡Œã¾ãŸã¯ãれ以å‰ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:67 msgid "ansible-module-not-initialized" msgstr "ansible-module-not-initialized" #: ../../rst/dev_guide/testing_validate-modules.rst:67 #: ../../rst/dev_guide/testing_validate-modules.rst:106 #: ../../rst/dev_guide/testing_validate-modules.rst:108 #: ../../rst/dev_guide/testing_validate-modules.rst:131 #: ../../rst/dev_guide/testing_validate-modules.rst:138 msgid "Syntax" msgstr "æ§‹æ–‡" #: ../../rst/dev_guide/testing_validate-modules.rst:67 msgid "Execution of the module did not result in initialization of AnsibleModule" msgstr "モジュールを実行ã—ã¦ã‚‚ã€AnsibleModule ã¯åˆæœŸåŒ–ã•れãªã‹ã£ãŸã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:68 msgid "collection-deprecated-version" msgstr "collection-deprecated-version" #: ../../rst/dev_guide/testing_validate-modules.rst:68 msgid "A feature is deprecated and supposed to be removed in the current or an earlier collection version" msgstr "機能ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ç¾è¡Œã¾ãŸã¯ãれ以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:69 msgid "deprecated-date" msgstr "deprecated-date" #: ../../rst/dev_guide/testing_validate-modules.rst:69 msgid "A date before today appears as ``removed_at_date`` or in ``deprecated_aliases``" msgstr "今日よりå‰ã®æ—¥ä»˜ã¯ã€``removed_at_date`` よã†ã«è¡¨ç¤ºã•れるã‹ã€``deprecated_aliases`` ã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:70 msgid "deprecation-mismatch" msgstr "deprecation-mismatch" #: ../../rst/dev_guide/testing_validate-modules.rst:70 msgid "Module marked as deprecated or removed in at least one of the filename, its metadata, or in DOCUMENTATION (setting DOCUMENTATION.deprecated for deprecation or removing all Documentation for removed) but not in all three places." msgstr "ファイルåã€ãã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã€ã¾ãŸã¯ DOCUMENTATION ã®å°‘ãªãã¨ã‚‚ 1 㤠(全箇所ã§ã¯ãªã„) ã§éžæŽ¨å¥¨ã¾ãŸã¯å‰Šé™¤æ¸ˆã¿ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (éžæŽ¨å¥¨ã®å ´åˆã¯ DOCUMENTATION.deprecated を設定ã—ã€å‰Šé™¤ã®å ´åˆã¯ã™ã¹ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’削除ã™ã‚‹) ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:71 msgid "doc-choices-do-not-match-spec" msgstr "doc-choices-do-not-match-spec" #: ../../rst/dev_guide/testing_validate-modules.rst:71 msgid "Value for \"choices\" from the argument_spec does not match the documentation" msgstr "argument_spec ã®ã€Œchoicesã€ã®å€¤ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¸€è‡´ã—ãªã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:72 msgid "doc-choices-incompatible-type" msgstr "doc-choices-incompatible-type" #: ../../rst/dev_guide/testing_validate-modules.rst:72 msgid "Choices value from the documentation is not compatible with type defined in the argument_spec" msgstr "ドキュメンテーションã®é¸æŠžå€¤ã¯ã€argument_spec ã§å®šç¾©ã•れãŸã‚¿ã‚¤ãƒ—ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:73 msgid "doc-default-does-not-match-spec" msgstr "doc-default-does-not-match-spec" #: ../../rst/dev_guide/testing_validate-modules.rst:73 msgid "Value for \"default\" from the argument_spec does not match the documentation" msgstr "argument_spec ã®ã€Œdefaultã€ã®å€¤ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¸€è‡´ã—ãªã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:74 msgid "doc-default-incompatible-type" msgstr "doc-default-incompatible-type" #: ../../rst/dev_guide/testing_validate-modules.rst:74 msgid "Default value from the documentation is not compatible with type defined in the argument_spec" msgstr "ドキュメンテーションã®ãƒ‡ãƒ•ォルト値ã¯ã€argument_spec ã§å®šç¾©ã•れãŸã‚¿ã‚¤ãƒ—ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:75 msgid "doc-elements-invalid" msgstr "doc-elements-invalid" #: ../../rst/dev_guide/testing_validate-modules.rst:75 msgid "Documentation specifies elements for argument, when \"type\" is not ``list``." msgstr "ドキュメントã§ã¯ã€ã€Œtypeã€ãŒ ``list`` ã§ã¯ãªã„å ´åˆã«ã€å¼•æ•°ã®è¦ç´ ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:76 msgid "doc-elements-mismatch" msgstr "doc-elements-mismatch" #: ../../rst/dev_guide/testing_validate-modules.rst:76 msgid "Argument_spec defines elements different than documentation does" msgstr "argument_spec ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ã¯ç•°ãªã‚‹ã‚¿ã‚¤ãƒ—を定義ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:77 msgid "doc-missing-type" msgstr "doc-missing-type" #: ../../rst/dev_guide/testing_validate-modules.rst:77 msgid "Documentation doesn't specify a type but argument in ``argument_spec`` use default type (``str``)" msgstr "ドキュメントã§ã¯ã‚¿ã‚¤ãƒ—ã‚’ã—ã¦ã„ã¾ã›ã‚“ãŒã€``argument_spec`` ã®å¼•æ•°ãŒãƒ‡ãƒ•ォルト型 (``str``) を使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:78 msgid "doc-required-mismatch" msgstr "doc-required-mismatch" #: ../../rst/dev_guide/testing_validate-modules.rst:78 msgid "argument in argument_spec is required but documentation says it is not, or vice versa" msgstr "arguments_spec ã®å¼•æ•°ã¯å¿…é ˆã§ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯å¿…é ˆã§ã¯ãªã„ (ã¾ãŸã¯ arguments_spec ã®å¼•æ•°ã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯å¿…é ˆ) ã¨è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:79 msgid "doc-type-does-not-match-spec" msgstr "doc-type-does-not-match-spec" #: ../../rst/dev_guide/testing_validate-modules.rst:79 msgid "Argument_spec defines type different than documentation does" msgstr "argument_spec ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ã¯ç•°ãªã‚‹ã‚¿ã‚¤ãƒ—を定義ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:80 msgid "documentation-error" msgstr "documentation-error" #: ../../rst/dev_guide/testing_validate-modules.rst:80 msgid "Unknown ``DOCUMENTATION`` error" msgstr "䏿˜Žãª ``DOCUMENTATION`` エラー" #: ../../rst/dev_guide/testing_validate-modules.rst:81 msgid "documentation-syntax-error" msgstr "documentation-syntax-error" #: ../../rst/dev_guide/testing_validate-modules.rst:81 msgid "Invalid ``DOCUMENTATION`` schema" msgstr "無効㪠``DOCUMENTATION`` スキーマ" #: ../../rst/dev_guide/testing_validate-modules.rst:82 msgid "illegal-future-imports" msgstr "illegal-future-imports" #: ../../rst/dev_guide/testing_validate-modules.rst:82 #: ../../rst/dev_guide/testing_validate-modules.rst:83 #: ../../rst/dev_guide/testing_validate-modules.rst:86 #: ../../rst/dev_guide/testing_validate-modules.rst:104 #: ../../rst/dev_guide/testing_validate-modules.rst:105 #: ../../rst/dev_guide/testing_validate-modules.rst:114 #: ../../rst/dev_guide/testing_validate-modules.rst:115 #: ../../rst/dev_guide/testing_validate-modules.rst:116 #: ../../rst/dev_guide/testing_validate-modules.rst:136 #: ../../rst/dev_guide/testing_validate-modules.rst:140 #: ../../rst/dev_guide/testing_validate-modules.rst:141 #: ../../rst/dev_guide/testing_validate-modules.rst:142 #: ../../rst/dev_guide/testing_validate-modules.rst:143 #: ../../rst/dev_guide/testing_validate-modules.rst:144 msgid "Imports" msgstr "インãƒãƒ¼ãƒˆ" #: ../../rst/dev_guide/testing_validate-modules.rst:82 msgid "Only the following ``from __future__`` imports are allowed: ``absolute_import``, ``division``, and ``print_function``." msgstr "``absolute_import``ã€``division``ã€ãŠã‚ˆã³ ``print_function`` ã® ``from __future__`` インãƒãƒ¼ãƒˆã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:83 msgid "import-before-documentation" msgstr "import-before-documentation" #: ../../rst/dev_guide/testing_validate-modules.rst:83 msgid "Import found before documentation variables. All imports must appear below ``DOCUMENTATION``/``EXAMPLES``/``RETURN``" msgstr "ドキュメント変数ã®å‰ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ã€``DOCUMENTATION``/``EXAMPLES``/``RETURN`` ã®ä¸‹ã«è¡¨ç¤ºã•れる必è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:84 msgid "import-error" msgstr "import-error" #: ../../rst/dev_guide/testing_validate-modules.rst:84 msgid "``Exception`` attempting to import module for ``argument_spec`` introspection" msgstr "``Exception`` ãŒã€``argument_spec`` イントロスペクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’試行中" #: ../../rst/dev_guide/testing_validate-modules.rst:85 msgid "import-placement" msgstr "import-placement" #: ../../rst/dev_guide/testing_validate-modules.rst:85 msgid "Locations" msgstr "場所" #: ../../rst/dev_guide/testing_validate-modules.rst:85 #: ../../rst/dev_guide/testing_validate-modules.rst:100 #: ../../rst/dev_guide/testing_validate-modules.rst:104 #: ../../rst/dev_guide/testing_validate-modules.rst:110 #: ../../rst/dev_guide/testing_validate-modules.rst:136 #: ../../rst/dev_guide/testing_validate-modules.rst:139 msgid "Warning" msgstr "警告" #: ../../rst/dev_guide/testing_validate-modules.rst:85 #: ../../rst/dev_guide/testing_validate-modules.rst:86 msgid "Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN``" msgstr "インãƒãƒ¼ãƒˆã¯ã€``DOCUMENTATION``/``EXAMPLES``/``RETURN`` ã®ã™ã後ã«é…ç½®ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:86 msgid "imports-improper-location" msgstr "imports-improper-location" #: ../../rst/dev_guide/testing_validate-modules.rst:87 msgid "incompatible-choices" msgstr "incompatible-choices" #: ../../rst/dev_guide/testing_validate-modules.rst:87 msgid "Choices value from the argument_spec is not compatible with type defined in the argument_spec" msgstr "argument_spec ã®é¸æŠžå€¤ã¯ã€argument_spec ã§å®šç¾©ã•れãŸã‚¿ã‚¤ãƒ—ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:88 msgid "incompatible-default-type" msgstr "incompatible-default-type" #: ../../rst/dev_guide/testing_validate-modules.rst:88 msgid "Default value from the argument_spec is not compatible with type defined in the argument_spec" msgstr "argument_spec ã®ãƒ‡ãƒ•ォルト値ã¯ã€argument_spec ã§å®šç¾©ã•れãŸã‚¿ã‚¤ãƒ—ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:89 msgid "invalid-argument-name" msgstr "invalid-argument-name" #: ../../rst/dev_guide/testing_validate-modules.rst:89 msgid "Argument in argument_spec must not be one of 'message', 'syslog_facility' as it is used internally by Ansible Core Engine" msgstr "argument_spec ã®å¼•æ•°ã¯ã€Ansible Core Engine ã«ã‚ˆã£ã¦å†…部ã§ä½¿ç”¨ã•れるãŸã‚ã€ã€Œmessageã€ã€ã€Œsyslog_facilityã€ã®ã„ãšã‚Œã‹ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:90 msgid "invalid-argument-spec" msgstr "invalid-argument-spec" #: ../../rst/dev_guide/testing_validate-modules.rst:90 msgid "Argument in argument_spec must be a dictionary/hash when used" msgstr "argument_spec ã®å¼•数を使用ã™ã‚‹å ´åˆã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¾ãŸã¯ãƒãƒƒã‚·ãƒ¥ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:91 msgid "invalid-argument-spec-options" msgstr "invalid-argument-spec-options" #: ../../rst/dev_guide/testing_validate-modules.rst:91 msgid "Suboptions in argument_spec are invalid" msgstr "argument_spec ã®ã‚µãƒ–オプションã¯ç„¡åйã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:92 msgid "invalid-documentation" msgstr "invalid-documentation" #: ../../rst/dev_guide/testing_validate-modules.rst:92 msgid "``DOCUMENTATION`` is not valid YAML" msgstr "``DOCUMENTATION`` ã¯ã€æœ‰åŠ¹ãª YAML ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:93 msgid "invalid-documentation-options" msgstr "invalid-documentation-options" #: ../../rst/dev_guide/testing_validate-modules.rst:93 msgid "``DOCUMENTATION.options`` must be a dictionary/hash when used" msgstr "``DOCUMENTATION.options`` を使用ã™ã‚‹å ´åˆã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/ãƒãƒƒã‚·ãƒ¥ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:94 msgid "invalid-examples" msgstr "invalid-examples" #: ../../rst/dev_guide/testing_validate-modules.rst:94 msgid "``EXAMPLES`` is not valid YAML" msgstr "``EXAMPLES`` ã¯ã€æœ‰åŠ¹ãª YAML ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:95 msgid "invalid-extension" msgstr "invalid-extension" #: ../../rst/dev_guide/testing_validate-modules.rst:95 msgid "Official Ansible modules must have a ``.py`` extension for python modules or a ``.ps1`` for powershell modules" msgstr "å…¬å¼ã® Ansible モジュールã§ã¯ã€python ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ‹¡å¼µå­ã¯ ``.py`` ã§ã€powershell ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ‹¡å¼µå­ã¯ ``.ps1`` ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:96 msgid "invalid-module-schema" msgstr "invalid-module-schema" #: ../../rst/dev_guide/testing_validate-modules.rst:96 msgid "``AnsibleModule`` schema validation error" msgstr "``AnsibleModule`` スキーマ検証エラー" #: ../../rst/dev_guide/testing_validate-modules.rst:97 msgid "invalid-removal-version" msgstr "invalid-removal-version" #: ../../rst/dev_guide/testing_validate-modules.rst:97 msgid "The version at which a feature is supposed to be removed cannot be parsed (for collections, it must be a semantic version, see https://semver.org/)" msgstr "機能ãŒå‰Šé™¤ã•れるã“ã¨ã«ãªã£ã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯è§£æžã§ãã¾ã›ã‚“ (コレクションã®å ´åˆã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚https://semver.org/ ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/dev_guide/testing_validate-modules.rst:98 msgid "invalid-requires-extension" msgstr "invalid-requires-extension" #: ../../rst/dev_guide/testing_validate-modules.rst:98 msgid "Module ``#AnsibleRequires -CSharpUtil`` should not end in .cs, Module ``#Requires`` should not end in .psm1" msgstr "モジュール ``#AnsibleRequires -CSharpUtil`` ã®æœ«å°¾ã‚’ .cs ã«ã—ãªã„ã§ãã ã•ã„。モジュール ``#Requires`` ã®æœ«å°¾ã‚’ .psm1 ã«ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:99 msgid "missing-doc-fragment" msgstr "missing-doc-fragment" #: ../../rst/dev_guide/testing_validate-modules.rst:99 msgid "``DOCUMENTATION`` fragment missing" msgstr "``DOCUMENTATION`` フラグメントãŒã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:100 msgid "missing-existing-doc-fragment" msgstr "missing-existing-doc-fragment" #: ../../rst/dev_guide/testing_validate-modules.rst:100 msgid "Pre-existing ``DOCUMENTATION`` fragment missing" msgstr "既存㮠``DOCUMENTATION`` フラグメントãŒã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:101 msgid "missing-documentation" msgstr "missing-documentation" #: ../../rst/dev_guide/testing_validate-modules.rst:101 msgid "No ``DOCUMENTATION`` provided" msgstr "``DOCUMENTATION`` ãŒæä¾›ã•れã¦ã„ã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:102 msgid "missing-examples" msgstr "missing-examples" #: ../../rst/dev_guide/testing_validate-modules.rst:102 msgid "No ``EXAMPLES`` provided" msgstr "``EXAMPLES`` ãŒæä¾›ã•れã¦ã„ã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:103 msgid "missing-gplv3-license" msgstr "missing-gplv3-license" #: ../../rst/dev_guide/testing_validate-modules.rst:103 msgid "GPLv3 license header not found" msgstr "GPLv3 ライセンスヘッダーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: ../../rst/dev_guide/testing_validate-modules.rst:104 msgid "missing-module-utils-basic-import" msgstr "missing-module-utils-basic-import" #: ../../rst/dev_guide/testing_validate-modules.rst:104 msgid "Did not find ``ansible.module_utils.basic`` import" msgstr "``ansible.module_utils.basic`` インãƒãƒ¼ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: ../../rst/dev_guide/testing_validate-modules.rst:105 msgid "missing-module-utils-import-csharp-requirements" msgstr "missing-module-utils-import-csharp-requirements" #: ../../rst/dev_guide/testing_validate-modules.rst:105 msgid "No ``Ansible.ModuleUtils`` or C# Ansible util requirements/imports found" msgstr "``Ansible.ModuleUtils`` ã¾ãŸã¯ C# Ansible ユーティリティー㮠è¦ä»¶/インãƒãƒ¼ãƒˆãŒã‚りã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:106 msgid "missing-powershell-interpreter" msgstr "missing-powershell-interpreter" #: ../../rst/dev_guide/testing_validate-modules.rst:106 msgid "Interpreter line is not ``#!powershell``" msgstr "インタープリター行㯠``#!powershell`` ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:107 msgid "missing-python-doc" msgstr "missing-python-doc" #: ../../rst/dev_guide/testing_validate-modules.rst:107 msgid "Missing python documentation file" msgstr "python ドキュメントファイルãŒã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:108 msgid "missing-python-interpreter" msgstr "missing-python-interpreter" #: ../../rst/dev_guide/testing_validate-modules.rst:108 msgid "Interpreter line is not ``#!/usr/bin/python``" msgstr "インタープリター行㯠``#!/usr/bin/python`` ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:109 msgid "missing-return" msgstr "missing-return" #: ../../rst/dev_guide/testing_validate-modules.rst:109 msgid "No ``RETURN`` documentation provided" msgstr "``RETURN`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯æä¾›ã•れã¦ã„ã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:110 msgid "missing-return-legacy" msgstr "missing-return-legacy" #: ../../rst/dev_guide/testing_validate-modules.rst:110 msgid "No ``RETURN`` documentation provided for legacy module" msgstr "レガシーモジュールã«ã¯ ``RETURN`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:111 msgid "missing-suboption-docs" msgstr "missing-suboption-docs" #: ../../rst/dev_guide/testing_validate-modules.rst:111 msgid "Argument in argument_spec has sub-options but documentation does not define sub-options" msgstr "argument_spec ã®å¼•æ•°ã«ã¯ã‚µãƒ–オプションョンãŒã‚りã¾ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã‚µãƒ–オプションãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:112 msgid "module-incorrect-version-added" msgstr "module-incorrect-version-added" #: ../../rst/dev_guide/testing_validate-modules.rst:112 msgid "Module level ``version_added`` is incorrect" msgstr "モジュールレベル ``version_added`` ã¯æ­£ã—ãã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:113 msgid "module-invalid-version-added" msgstr "module-invalid-version-added" #: ../../rst/dev_guide/testing_validate-modules.rst:113 msgid "Module level ``version_added`` is not a valid version number" msgstr "モジュールレベル㮠``version_added`` ã¯ã€æœ‰åйãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:114 msgid "module-utils-specific-import" msgstr "module-utils-specific-import" #: ../../rst/dev_guide/testing_validate-modules.rst:114 msgid "``module_utils`` imports should import specific components, not ``*``" msgstr "``module_utils`` ã¯ã€``*`` ã§ã¯ãªãã€ç‰¹å®šã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’インãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:115 msgid "multiple-utils-per-requires" msgstr "multiple-utils-per-requires" #: ../../rst/dev_guide/testing_validate-modules.rst:115 msgid "``Ansible.ModuleUtils`` requirements do not support multiple modules per statement" msgstr "``Ansible.ModuleUtils`` è¦ä»¶ã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã”ã¨ã«è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:116 msgid "multiple-csharp-utils-per-requires" msgstr "multiple-csharp-utils-per-requires" #: ../../rst/dev_guide/testing_validate-modules.rst:116 msgid "Ansible C# util requirements do not support multiple utils per statement" msgstr "C# ユーティリティーè¦ä»¶ã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã”ã¨ã«è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:117 msgid "no-default-for-required-parameter" msgstr "no-default-for-required-parameter" #: ../../rst/dev_guide/testing_validate-modules.rst:117 msgid "Option is marked as required but specifies a default. Arguments with a default should not be marked as required" msgstr "オプションã¯å¿…é ˆã¨è­˜åˆ¥ã•れã¾ã™ãŒã€ãƒ‡ãƒ•ォルトã®å¼•数を指定ã—ã¾ã™ã€‚デフォルトã®å¼•æ•°ã¯å¿…é ˆã¨è­˜åˆ¥ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:118 msgid "no-log-needed" msgstr "no-log-needed" #: ../../rst/dev_guide/testing_validate-modules.rst:118 #: ../../rst/dev_guide/testing_validate-modules.rst:126 #: ../../rst/dev_guide/testing_validate-modules.rst:127 #: ../../rst/dev_guide/testing_validate-modules.rst:129 #: ../../rst/dev_guide/testing_validate-modules.rst:130 msgid "Parameters" msgstr "パラメーター" #: ../../rst/dev_guide/testing_validate-modules.rst:118 msgid "Option name suggests that the option contains a secret value, while ``no_log`` is not specified for this option in the argument spec. If this is a false positive, explicitly set ``no_log=False``" msgstr "オプションåã¯ã€ã‚ªãƒ—ションã«ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆå€¤ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’示唆ã—ã¦ã„ã¾ã™ãŒã€å¼•数仕様ã§ã¯ã“ã®ã‚ªãƒ—ションã«å¯¾ã—㦠``no_log`` ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。ã“ã®ã‚ªãƒ—ションãŒèª¤æ¤œå‡ºã®å ´åˆã¯æ˜Žç¤ºçš„ã« ``no_log=False`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:119 msgid "nonexistent-parameter-documented" msgstr "nonexistent-parameter-documented" #: ../../rst/dev_guide/testing_validate-modules.rst:119 msgid "Argument is listed in DOCUMENTATION.options, but not accepted by the module" msgstr "引数㯠DOCUMENTATION.options ã«ä¸€è¦§è¡¨ç¤ºã•れã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯å—ã‘入れられã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:120 msgid "option-incorrect-version-added" msgstr "option-incorrect-version-added" #: ../../rst/dev_guide/testing_validate-modules.rst:120 msgid "``version_added`` for new option is incorrect" msgstr "æ–°ã—ã„オプション㮠``version_added`` ã¯æ­£ã—ãã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:121 msgid "option-invalid-version-added" msgstr "option-invalid-version-added" #: ../../rst/dev_guide/testing_validate-modules.rst:121 msgid "``version_added`` for option is not a valid version number" msgstr "``version_added`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åйãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:122 msgid "parameter-invalid" msgstr "parameter-invalid" #: ../../rst/dev_guide/testing_validate-modules.rst:122 msgid "Argument in argument_spec is not a valid python identifier" msgstr "argument_spec ã®å¼•æ•°ã¯æœ‰åŠ¹ãª python 識別å­ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:123 msgid "parameter-invalid-elements" msgstr "parameter-invalid-elements" #: ../../rst/dev_guide/testing_validate-modules.rst:123 msgid "Value for \"elements\" is valid only when value of \"type\" is ``list``" msgstr "「elementsã€ã®å€¤ã¯ã€ã€Œtypeã€ã®å€¤ãŒ ``list`` ã§ã‚ã‚‹å ´åˆã«é™ã‚Šæœ‰åйã§ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:124 msgid "implied-parameter-type-mismatch" msgstr "implied-parameter-type-mismatch" #: ../../rst/dev_guide/testing_validate-modules.rst:124 msgid "Argument_spec implies ``type=\"str\"`` but documentation defines it as different data type" msgstr "argument_spec ã«ã¯ ``type=\"str\"`` ã®æ„ãŒå«ã¾ã‚Œã¾ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã€åˆ¥ã®ãƒ‡ãƒ¼ã‚¿åž‹ã¨ã—ã¦æŒ‡å®šã•れã¦ã„ã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:125 msgid "parameter-type-not-in-doc" msgstr "parameter-type-not-in-doc" #: ../../rst/dev_guide/testing_validate-modules.rst:125 msgid "Type value is defined in ``argument_spec`` but documentation doesn't specify a type" msgstr "タイプ値㯠``argument_spec`` ã§å®šç¾©ã•れã¦ã„ã¾ã™ãŒã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã‚¿ã‚¤ãƒ—を指定ã—ã¦ã„ã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:126 msgid "parameter-alias-repeated" msgstr "parameter-alias-repeated" #: ../../rst/dev_guide/testing_validate-modules.rst:126 msgid "argument in argument_spec has at least one alias specified multiple times in aliases" msgstr "argument_spec ã®å¼•æ•°ã«ã¯ã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã«è¤‡æ•°å›žæŒ‡å®šã•れãŸã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒ 1 ã¤ä»¥ä¸Šå«ã¾ã‚Œã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:127 msgid "parameter-alias-self" msgstr "parameter-alias-self" #: ../../rst/dev_guide/testing_validate-modules.rst:127 msgid "argument in argument_spec is specified as its own alias" msgstr "argument_spec ã®å¼•æ•°ã¯ã€ç‹¬è‡ªã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ã—ã¦æŒ‡å®šã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:128 msgid "parameter-documented-multiple-times" msgstr "parameter-documented-multiple-times" #: ../../rst/dev_guide/testing_validate-modules.rst:128 msgid "argument in argument_spec with aliases is documented multiple times" msgstr "エイリアスをæŒã¤ argument_spec ã®å¼•æ•°ãŒè¤‡æ•°å›žæ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:129 msgid "parameter-list-no-elements" msgstr "parameter-list-no-elements" #: ../../rst/dev_guide/testing_validate-modules.rst:129 msgid "argument in argument_spec \"type\" is specified as ``list`` without defining \"elements\"" msgstr "argument_spec「typeã€ã®å¼•æ•°ã¯ã€ã€Œè¦ç´ ã€ã‚’定義ã›ãšã« ``list`` ã®ã‚ˆã†ã«æŒ‡å®šã•れã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:130 msgid "parameter-state-invalid-choice" msgstr "parameter-state-invalid-choice" #: ../../rst/dev_guide/testing_validate-modules.rst:130 msgid "Argument ``state`` includes ``get``, ``list`` or ``info`` as a choice. Functionality should be in an ``_info`` or (if further conditions apply) ``_facts`` module." msgstr "引数 ``state`` ã«ã¯ã€``get``ã€``list``ã€ã¾ãŸã¯ ``info`` ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚機能性㯠``_info`` ã¾ãŸã¯ (è¿½åŠ ã®æ¡ä»¶ãŒé©ç”¨ã•れる場åˆã¯) ``_facts`` モジュールã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:131 msgid "python-syntax-error" msgstr "python-syntax-error" #: ../../rst/dev_guide/testing_validate-modules.rst:131 msgid "Python ``SyntaxError`` while parsing module" msgstr "モジュールã®è§£æžä¸­ã® Python ``SyntaxError``" #: ../../rst/dev_guide/testing_validate-modules.rst:132 msgid "removal-version-must-be-major" msgstr "removal-version-must-be-major" #: ../../rst/dev_guide/testing_validate-modules.rst:132 msgid "According to the semantic versioning specification (https://semver.org/), the only versions in which features are allowed to be removed are major versions (x.0.0)" msgstr "セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ä»•様 (https://semver.org/)) ã«ã‚ˆã‚‹ã¨ã€æ©Ÿèƒ½ã®å‰Šé™¤ãŒè¨±å¯ã•れã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (x.0.0) ã®ã¿ã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:133 msgid "return-syntax-error" msgstr "return-syntax-error" #: ../../rst/dev_guide/testing_validate-modules.rst:133 msgid "``RETURN`` is not valid YAML, ``RETURN`` fragments missing or invalid" msgstr "``RETURN`` ã¯ã€æœ‰åŠ¹ãª YAML ã§ã¯ã‚りã¾ã›ã‚“。``RETURN`` フラグメントãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹ã€ç„¡åйã§ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:134 msgid "return-invalid-version-added" msgstr "return-invalid-version-added" #: ../../rst/dev_guide/testing_validate-modules.rst:134 msgid "``version_added`` for return value is not a valid version number" msgstr "戻り値㮠``version_added`` ã¯ã€æœ‰åйãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:135 msgid "subdirectory-missing-init" msgstr "subdirectory-missing-init" #: ../../rst/dev_guide/testing_validate-modules.rst:135 msgid "Ansible module subdirectories must contain an ``__init__.py``" msgstr "Ansible モジュールã®ã‚µãƒ–ディレクトリーã«ã¯ ``__init__.py`` ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:136 msgid "try-except-missing-has" msgstr "try-except-missing-has" #: ../../rst/dev_guide/testing_validate-modules.rst:136 msgid "Try/Except ``HAS_`` expression missing" msgstr "try/Except ``HAS_`` å¼ãŒãªã„" #: ../../rst/dev_guide/testing_validate-modules.rst:137 msgid "undocumented-parameter" msgstr "undocumented-parameter" #: ../../rst/dev_guide/testing_validate-modules.rst:137 msgid "Argument is listed in the argument_spec, but not documented in the module" msgstr "引数㌠argument_spec ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ãŒã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯æ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:138 msgid "unidiomatic-typecheck" msgstr "unidiomatic-typecheck" #: ../../rst/dev_guide/testing_validate-modules.rst:138 msgid "Type comparison using ``type()`` found. Use ``isinstance()`` instead" msgstr "``type()`` を使用ã—ãŸã‚¿ã‚¤ãƒ—比較。代ã‚り㫠``isinstance()`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/dev_guide/testing_validate-modules.rst:139 msgid "unknown-doc-fragment" msgstr "unknown-doc-fragment" #: ../../rst/dev_guide/testing_validate-modules.rst:139 msgid "Unknown pre-existing ``DOCUMENTATION`` error" msgstr "䏿˜Žãªæ—¢å­˜ã® ``DOCUMENTATION`` エラー" #: ../../rst/dev_guide/testing_validate-modules.rst:140 msgid "use-boto3" msgstr "use-boto3" #: ../../rst/dev_guide/testing_validate-modules.rst:140 msgid "``boto`` import found, new modules should use ``boto3``" msgstr "``boto`` インãƒãƒ¼ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚代ã‚り㫠``boto3`` を使用ã—ã¦ãã ã•ã„" #: ../../rst/dev_guide/testing_validate-modules.rst:141 msgid "use-fail-json-not-sys-exit" msgstr "use-fail-json-not-sys-exit" #: ../../rst/dev_guide/testing_validate-modules.rst:141 msgid "``sys.exit()`` call found. Should be ``exit_json``/``fail_json``" msgstr "``sys.exit()`` 呼ã³å‡ºã—ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚``exit_json``/``fail_json`` ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/dev_guide/testing_validate-modules.rst:142 msgid "use-module-utils-urls" msgstr "use-module-utils-urls" #: ../../rst/dev_guide/testing_validate-modules.rst:142 msgid "``requests`` import found, should use ``ansible.module_utils.urls`` instead" msgstr "``requests`` インãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚代ã‚り㫠``ansible.module_utils.urls`` を使用ã—ã¦ãã ã•ã„" #: ../../rst/dev_guide/testing_validate-modules.rst:143 msgid "use-run-command-not-os-call" msgstr "use-run-command-not-os-call" #: ../../rst/dev_guide/testing_validate-modules.rst:143 msgid "``os.call`` used instead of ``module.run_command``" msgstr "``module.run_command`` ã®ä»£ã‚りã«ã€``os.call`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:144 msgid "use-run-command-not-popen" msgstr "use-run-command-not-popen" #: ../../rst/dev_guide/testing_validate-modules.rst:144 msgid "``subprocess.Popen`` used instead of ``module.run_command``" msgstr "``module.run_command`` ã®ä»£ã‚りã«ã€``subprocess.Popen`` を使用ã—ã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:145 msgid "use-short-gplv3-license" msgstr "use-short-gplv3-license" #: ../../rst/dev_guide/testing_validate-modules.rst:145 msgid "GPLv3 license header should be the :ref:`short form ` for new modules" msgstr "GPLv3 ライセンスヘッダーã¯ã€æ–°ã—ã„モジュール㮠:ref:`短縮形 ` ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:146 msgid "mutually_exclusive-type" msgstr "mutually_exclusive-type" #: ../../rst/dev_guide/testing_validate-modules.rst:146 msgid "mutually_exclusive entry contains non-string value" msgstr "mutually_exclusive エントリーã«ã¯æ–‡å­—列以外ã®å€¤ãŒå«ã¾ã‚Œã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:147 msgid "mutually_exclusive-collision" msgstr "mutually_exclusive-collision" #: ../../rst/dev_guide/testing_validate-modules.rst:147 msgid "mutually_exclusive entry has repeated terms" msgstr "mutually_exclusive エントリーãŒç¹°ã‚Šè¿”ã—使用ã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:148 msgid "mutually_exclusive-unknown" msgstr "mutually_exclusive-unknown" #: ../../rst/dev_guide/testing_validate-modules.rst:148 msgid "mutually_exclusive entry contains option which does not appear in argument_spec (potentially an alias of an option?)" msgstr "mutually_exclusive エントリーã«ã¯ã€argument_spec ã«è¡¨ç¤ºã•れãªã„オプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:149 msgid "required_one_of-type" msgstr "required_one_of-type" #: ../../rst/dev_guide/testing_validate-modules.rst:149 msgid "required_one_of entry contains non-string value" msgstr "required_one_of エントリーã«ã¯æ–‡å­—列以外ã®å€¤ãŒå«ã¾ã‚Œã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:150 msgid "required_one_of-collision" msgstr "required_one_of-collision" #: ../../rst/dev_guide/testing_validate-modules.rst:150 msgid "required_one_of entry has repeated terms" msgstr "required_one_of エントリーãŒç¹°ã‚Šè¿”ã—使用ã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:151 msgid "required_one_of-unknown" msgstr "required_one_of-unknown" #: ../../rst/dev_guide/testing_validate-modules.rst:151 msgid "required_one_of entry contains option which does not appear in argument_spec (potentially an alias of an option?)" msgstr "required_one_of エントリーã«ã¯ã€argument_spec ã«è¡¨ç¤ºã•れãªã„オプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:152 msgid "required_together-type" msgstr "required_together-type" #: ../../rst/dev_guide/testing_validate-modules.rst:152 msgid "required_together entry contains non-string value" msgstr "required_together エントリーã«ã¯æ–‡å­—列以外ã®å€¤ãŒå«ã¾ã‚Œã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:153 msgid "required_together-collision" msgstr "required_together-collision" #: ../../rst/dev_guide/testing_validate-modules.rst:153 msgid "required_together entry has repeated terms" msgstr "required_together エントリーãŒç¹°ã‚Šè¿”ã—使用ã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:154 msgid "required_together-unknown" msgstr "required_together-unknown" #: ../../rst/dev_guide/testing_validate-modules.rst:154 msgid "required_together entry contains option which does not appear in argument_spec (potentially an alias of an option?)" msgstr "required_together エントリーã«ã¯ã€argument_spec ã«è¡¨ç¤ºã•れãªã„オプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:155 msgid "required_if-is_one_of-type" msgstr "required_if-is_one_of-type" #: ../../rst/dev_guide/testing_validate-modules.rst:155 msgid "required_if entry has a fourth value which is not a bool" msgstr "required_if エントリーã«ã¯ bool ã§ã¯ãªã„ 4 ã¤ç›®ã®å€¤ãŒã‚ã‚‹" #: ../../rst/dev_guide/testing_validate-modules.rst:156 msgid "required_if-requirements-type" msgstr "required_if-requirements-type" #: ../../rst/dev_guide/testing_validate-modules.rst:156 msgid "required_if entry has a third value (requirements) which is not a list or tuple" msgstr "required_if エントリーã«ã¯ã€ãƒªã‚¹ãƒˆã¾ãŸã¯ã‚¿ãƒ—ルã§ã¯ãªã„ 3 ã¤ã®å€¤ (å¿…é ˆ) ãŒã‚りã¾ã™ã€‚" #: ../../rst/dev_guide/testing_validate-modules.rst:157 msgid "required_if-requirements-collision" msgstr "required_if-requirements-collision" #: ../../rst/dev_guide/testing_validate-modules.rst:157 msgid "required_if entry has repeated terms in requirements" msgstr "required_if エントリーãŒç¹°ã‚Šè¿”ã—使用ã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:158 msgid "required_if-requirements-unknown" msgstr "required_if-requirements-unknown" #: ../../rst/dev_guide/testing_validate-modules.rst:158 msgid "required_if entry's requirements contains option which does not appear in argument_spec (potentially an alias of an option?)" msgstr "required_if エントリーã®è¦ä»¶ã«ã¯ã€argument_spec ã«è¡¨ç¤ºã•れãªã„オプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:159 msgid "required_if-unknown-key" msgstr "required_if-unknown-key" #: ../../rst/dev_guide/testing_validate-modules.rst:159 msgid "required_if entry's key does not appear in argument_spec (potentially an alias of an option?)" msgstr "required_if エントリーã®ã‚­ãƒ¼ãŒ argument_spec ã«è¡¨ç¤ºã•れã¾ã›ã‚“ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:160 msgid "required_if-key-in-requirements" msgstr "required_if-key-in-requirements" #: ../../rst/dev_guide/testing_validate-modules.rst:160 msgid "required_if entry contains its key in requirements list/tuple" msgstr "required_if エントリーã«ã¯è¦ä»¶ãƒªã‚¹ãƒˆ/タプルã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:161 msgid "required_if-value-type" msgstr "required_if-value-type" #: ../../rst/dev_guide/testing_validate-modules.rst:161 msgid "required_if entry's value is not of the type specified for its key" msgstr "required_if エントリーã®å€¤ã¯ã€ã‚­ãƒ¼ã«æŒ‡å®šã•れãŸã‚¿ã‚¤ãƒ—ã§ã¯ã‚りã¾ã›ã‚“" #: ../../rst/dev_guide/testing_validate-modules.rst:162 msgid "required_by-collision" msgstr "required_by-collision" #: ../../rst/dev_guide/testing_validate-modules.rst:162 msgid "required_by entry has repeated terms" msgstr "required_by エントリーãŒç¹°ã‚Šè¿”ã—使用ã•れã¾ã™" #: ../../rst/dev_guide/testing_validate-modules.rst:163 msgid "required_by-unknown" msgstr "required_by-unknown" #: ../../rst/dev_guide/testing_validate-modules.rst:163 msgid "required_by entry contains option which does not appear in argument_spec (potentially an alias of an option?)" msgstr "required_by エントリーã«ã¯ã€argument_spec ã«è¡¨ç¤ºã•れãªã„オプションãŒå«ã¾ã‚Œã¾ã™ (オプションã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã‹?)" #: ../../rst/dev_guide/testing_validate-modules.rst:164 msgid "version-added-must-be-major-or-minor" msgstr "version-added-must-be-major-or-minor" #: ../../rst/dev_guide/testing_validate-modules.rst:164 msgid "According to the semantic versioning specification (https://semver.org/), the only versions in which features are allowed to be added are major and minor versions (x.y.0)" msgstr "セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ä»•様 (https://semver.org/)) ã«ã‚ˆã‚‹ã¨ã€æ©Ÿèƒ½ã®è¿½åŠ ãŒè¨±å¯ã•れã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŠã‚ˆã³ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (x.y.0) ã®ã¿ã§ã™" #~ msgid "All Python imports in ``lib/ansible/modules/`` and ``lib/ansible/module_utils/`` which are not from the Python standard library must be imported in a try/except ImportError block." #~ msgstr "" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid "Collections are a distribution format for Ansible content. You can use collections to package and distribute playbooks, roles, modules, and plugins. You can publish and use collections through `Ansible Galaxy `_." #~ msgstr "コレクションã¯ã€Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚コレクションを使用ã—ã¦ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインをパッケージ化ãŠã‚ˆã³é…布ã§ãã¾ã™ã€‚`Ansible Galaxy `_ を介ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ãŠã‚ˆã³ä½¿ç”¨ã§ãã¾ã™ã€‚" #~ msgid "For details on how to *use* collections see :ref:`collections`." #~ msgstr "*use* コレクションã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "For the current development status of Collections and FAQ see `Ansible Collections Overview and FAQ `_." #~ msgstr "コレクションãŠã‚ˆã³ FAQ ã®ç¾åœ¨ã®é–‹ç™ºã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã€Œ`Ansible Collections Overview and FAQ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Put general documentation for the collection here. Keep the specific documentation for plugins and modules embedded as Python docstrings. Use the ``docs`` folder to describe how to use the roles and plugins the collection provides, role requirements, and so on. Use markdown and do not add subfolders." #~ msgstr "ã“ã“ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’追加ã—ã¾ã™ã€‚Python ドキュメント文字列ã¨ã—ã¦åŸ‹ã‚è¾¼ã¾ã‚ŒãŸãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢ã™ã‚‹ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ä¿æŒã—ã¾ã™ã€‚``docs`` フォルダーを使用ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒæä¾›ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã€ãƒ­ãƒ¼ãƒ«è¦ä»¶ãªã©ã‚’説明ã—ã¾ã™ã€‚マークダウンを使用ã—ã€ã‚µãƒ–フォルダーを追加ã—ãªã„ã§ãã ã•ã„。" #~ msgid "TBD." #~ msgstr "ç¾åœ¨æº–備中ã§ã™ã€‚" #~ msgid "Create a collection skeleton with the ``collection init`` command. See :ref:`creating_collections_skeleton` above." #~ msgstr "``collection init`` コマンドã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã‚’作æˆã—ã¾ã™ã€‚上記ã®ã€Œ:ref:`creating_collections_skeleton`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Certain files and folders are excluded when building the collection artifact. See :ref:`ignoring_files_and_folders_collections` to exclude other files you would not want to distribute." #~ msgstr "コレクションアーティファクトã®ãƒ“ルド時ã«ã€ç‰¹å®šã®ãƒ•ァイルãŠã‚ˆã³ãƒ•ォルダーã¯é™¤å¤–ã•れã¾ã™ã€‚é…布ã—ãŸããªã„ä»–ã®ãƒ•ァイルを除外ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`ignoring_files_and_folders_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "If you used the now-deprecated ``Mazer`` tool for any of your collections, delete any and all files it added to your :file:`releases/` directory before you build your collection with ``ansible-galaxy``." #~ msgstr "今回ã®éžæŽ¨å¥¨ã¨ãªã£ãŸ ``Mazer`` ツールをコレクションã«ä½¿ç”¨ã—ãŸå ´åˆã¯ã€``ansible-galaxy`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ビルドã™ã‚‹å‰ã«ã€:file:`releases/` ディレクトリーã«è¿½åŠ ã—ãŸã™ã¹ã¦ã®ãƒ•ァイルを削除ã—ã¾ã™ã€‚" #~ msgid "This tarball is mainly intended to upload to Galaxy as a distribution method, but you can use it directly to install the collection on target systems." #~ msgstr "ã“ã® tarball ã¯ã€é…布方法ã¨ã—ã¦ä¸»ã« Galaxy ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ãŒã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ãŸã‚ã«ç›´æŽ¥ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #~ msgid "You can try your collection locally by installing it from the tarball. The following will enable an adjacent playbook to access the collection:" #~ msgstr "コレクションを tarball ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ローカルã§è©¦ã™ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã§ã¯ã€éš£æŽ¥ç”¨ã® Playbook ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "You should use one of the values configured in :ref:`COLLECTIONS_PATHS` for your path. This is also where Ansible itself will expect to find collections when attempting to use them. If you don't specify a path value, ``ansible-galaxy collection install`` installs the collection in the first path defined in :ref:`COLLECTIONS_PATHS`, which by default is ``~/.ansible/collections``." #~ msgstr "パスã®ãŸã‚ã«ã€:ref:`COLLECTIONS_PATHS` ã§æ§‹æˆã•れãŸå€¤ã® 1 ã¤ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€Ansible 自体ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã—よã†ã¨ã—ãŸã¨ãã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã‚‹ã“ã¨ã‚’期待ã™ã‚‹å ´æ‰€ã§ã‚‚ã‚りã¾ã™ã€‚パス値を指定ã—ãªã„å ´åˆã¯ã€:ref:`COLLECTIONS_PATHS` ã§å®šç¾©ã•ã‚ŒãŸæœ€åˆã®ãƒ‘スã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚ã“れã¯ã€ãƒ‡ãƒ•ォルトã¯ã€``~/.ansible/collections`` ã¨ãªã‚Šã¾ã™ã€‚" #~ msgid "If you want to use a collection directly out of a checked out git repository, see :ref:`hacking_collections`." #~ msgstr "確èªã•れ㟠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ç›´æŽ¥ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`hacking_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Next, try using the local collection inside a playbook. For examples and more details see :ref:`Using collections `" #~ msgstr "次ã«ã€Playbook 内ã§ãƒ­ãƒ¼ã‚«ãƒ«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½¿ç”¨ã‚’試行ã—ã¾ã™ã€‚例ãŠã‚ˆã³è©³ç´°ã¯ã€ã€Œ:ref:`コレクションã®ä½¿ç”¨ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "You can also test a version of your collection in development by installing it from a git repository." #~ msgstr "ã¾ãŸã€Git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€é–‹ç™ºã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’テストã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #~ msgid "You can install a collection in a git repository by providing the URI to the repository instead of a collection name or path to a ``tar.gz`` file. The collection must contain a ``galaxy.yml`` or ``MANIFEST.json`` file, which will be used to generate the would-be collection artifact data from the directory. The URI should be prefixed with ``git+`` (or with ``git@`` to use a private repository with ssh authentication) and optionally supports a comma-separated `git commit-ish `_ version (for example, a commit or tag)." #~ msgstr "コレクションåã¾ãŸã¯ ``tar.gz`` ファイルã¸ã®ãƒ‘スã§ã¯ãªãã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã« URI ã‚’æä¾›ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚コレクションã«ã¯ã€``galaxy.yml`` ファイルã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå¿…è¦ã§ã™ã€‚ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ã® will-be コレクションアーティファクトデータを生æˆã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚URI ã®æŽ¥é ­è¾žã«ã¯ ``git+`` (ã¾ãŸã¯ ssh èªè¨¼ã§ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã™ã‚‹ ``git@``)を付ã‘ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã® `git commit-ish `_ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (コミットã¾ãŸã¯ã‚¿ã‚°ãªã©) をサãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "Embedding credentials into a git URI is not secure. Make sure to use safe auth options for security reasons. For example, use `SSH `_, `netrc `_ or `http.extraHeader `_/`url..pushInsteadOf `_ in Git config to prevent your creds from being exposed in logs." #~ msgstr "èªè¨¼æƒ…報を git URI ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。セキュリティー上ã®ç†ç”±ã‹ã‚‰ã€å®‰å…¨ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€Git 設定㮠`SSH `_ã€`netrc `_ã€ã¾ãŸã¯ `http.extraHeader `_/`url..pushInsteadOf `_ ã§ã€ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #~ msgid "In a ``requirements.yml`` file, you can also use the ``type`` and ``version`` keys in addition to using the ``git+repo,version`` syntax for the collection name." #~ msgstr "``requirements.yml`` ファイルã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã® ``git+repo,version`` 構文を使用ã™ã‚‹ä»–ã«ã€``type`` キーãŠã‚ˆã³ ``version`` キーを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #~ msgid "Git repositories can be used for collection dependencies as well. This can be helpful for local development and testing but built/published artifacts should only have dependencies on other artifacts." #~ msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¾å­˜é–¢ä¿‚ã«ã‚‚使用ã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«é–‹ç™ºãŠã‚ˆã³ãƒ†ã‚¹ãƒˆã«å½¹ç«‹ã¡ã¾ã™ãŒã€ãƒ“ルド/公開ã•れãŸã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã«ã¯ä»–ã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã¸ã®ä¾å­˜é–¢ä¿‚ã®ã¿ãŒå¿…è¦ã§ã™ã€‚" #~ msgid "Default repository search locations" #~ msgstr "デフォルトã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ¤œç´¢ã®å ´æ‰€" #~ msgid "There are two paths searched in a repository for collections by default." #~ msgstr "デフォルトã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ 2 ã¤ã®ãƒ‘ã‚¹ãŒæ¤œç´¢ã•れã¾ã™ã€‚" #~ msgid "The second is a ``galaxy.yml`` or ``MANIFEST.json`` file in each directory in the repository path (one level deep). In this scenario, each directory with a metadata file is installed as a collection." #~ msgstr "2 ã¤ç›®ã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス (1 ãƒ¬ãƒ™ãƒ«ã®æ·±ã•) ã®å„ディレクトリー㮠``galaxy.yml`` ファイルã¾ãŸã¯ ``MANIFEST.json`` ファイルã§ã™ã€‚ã“ã“ã§ã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルãŒå«ã¾ã‚Œã‚‹å„ディレクトリーãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™)。" #~ msgid "Specifying the location to search for collections" #~ msgstr "コレクションを検索ã™ã‚‹å ´æ‰€ã®æŒ‡å®š" #~ msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate which path ansible-galaxy should inspect for metadata file(s). The path should be a directory to a collection or multiple collections (rather than the path to a ``galaxy.yml`` file or ``MANIFEST.json`` file)." #~ msgstr "ç•°ãªã‚‹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ§‹é€ ãŒã‚ã‚‹å ´åˆã‚„ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒ–セットã®ã¿ã‚’インストールã™ã‚‹å ´åˆã¯ã€URI ã®æœ€å¾Œã«ãƒ•ラグメントを追加ã—㦠(ä»»æ„ã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰ï¼‰ã€ansible-galaxy ãŒãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルを調ã¹ã‚‹ãƒ‘スを示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスã¯ã€(``MANIFEST.json`` ファイルã¾ãŸã¯ ``galaxy.yml`` ファイルã¸ã®ãƒ‘スã§ã¯ãªã) コレクションã¾ãŸã¯è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "You can publish collections to Galaxy using the ``ansible-galaxy collection publish`` command or the Galaxy UI itself. You need a namespace on Galaxy to upload your collection. See `Galaxy namespaces `_ on the Galaxy docsite for details." #~ msgstr "``ansible-galaxy collection publish`` コマンドã¾ãŸã¯ Galaxy UI 自体を使用ã—ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Galaxy ã«å…¬é–‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクションをアップロードã™ã‚‹ã«ã¯ã€Galaxy ã«åå‰ç©ºé–“ãŒå¿…è¦ã§ã™ã€‚詳細ã¯ã€Galaxy ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã®ã€Œ`Galaxy åå‰ç©ºé–“ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Once you upload a version of a collection, you cannot delete or modify that version. Ensure that everything looks okay before you upload it." #~ msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップロードã—ãŸã‚‰ã€ãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã¾ãŸã¯å¤‰æ›´ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。アップロードã™ã‚‹å‰ã«ã€ã™ã¹ã¦ã®æƒ…å ±ãŒé©åˆ‡ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #~ msgid "To upload your collection to Galaxy, you must first obtain an API token (``--token`` in the ``ansible-galaxy`` CLI command or ``token`` in the :file:`ansible.cfg` file under the ``galaxy_server`` section). The API token is a secret token used to protect your content." #~ msgstr "コレクションを Galaxy ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã«ã¯ã€ã¾ãš API トークンをå–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (``ansible-galaxy`` CLI コマンド㮠``--token``ã€ã¾ãŸã¯ ``galaxy_server`` セクションã®ä¸‹ã® :file:`ansible.cfg` ファイル㮠``token``) ã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ä¿è­·ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるシークレットトークン。" #~ msgid "Storing or using your API token" #~ msgstr "API トークンã®ä¿å­˜ã¾ãŸã¯ä½¿ç”¨" #~ msgid "Once you have retrieved your API token, you can store or use the token for collections in two ways:" #~ msgstr "API トークンをå–å¾—ã—ãŸã‚‰ã€2 ã¤ã®æ–¹æ³•ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ä¿å­˜ã¾ãŸã¯ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "Pass the token to the ``ansible-galaxy`` command using the ``--token``." #~ msgstr "``--token`` を使用ã—ã¦ã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ ``ansible-galaxy`` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #~ msgid "Specify the token within a Galaxy server list in your :file:`ansible.cfg` file." #~ msgstr ":file:`ansible.cfg` ファイル㮠Galaxy サーãƒãƒ¼ãƒªã‚¹ãƒˆå†…ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’指定ã—ã¾ã™ã€‚" #~ msgid "Using the ``token`` argument" #~ msgstr "``token`` 引数ã®ä½¿ç”¨" #~ msgid "You can use the ``--token`` argument with the ``ansible-galaxy`` command (in conjunction with the ``--server`` argument or :ref:`GALAXY_SERVER` setting in your :file:`ansible.cfg` file). You cannot use ``apt-key`` with any servers defined in your :ref:`Galaxy server list `." #~ msgstr "``--token`` 引数ã¯ã€``ansible-galaxy`` コマンド (:file:`ansible.cfg` ファイル㮠``--server`` 引数ã¾ãŸã¯ :ref:`GALAXY_SERVER` 設定ã¨ã¨ã‚‚ã«) ã§ä½¿ç”¨ã§ãã¾ã™ã€‚:ref:`Galaxy サーãƒãƒ¼ä¸€è¦§ ` ã§å®šç¾©ã•れã¦ã„るサーãƒãƒ¼ã§ã¯ã€``apt-key`` を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #~ msgid "Specify the token within a Galaxy server list" #~ msgstr "Galaxy サーãƒãƒ¼ä¸€è¦§å†…ã§ãƒˆãƒ¼ã‚¯ãƒ³ã®æŒ‡å®š" #~ msgid "With this option, you configure one or more servers for Galaxy in your :file:`ansible.cfg` file under the ``galaxy_server_list`` section. For each server, you also configure the token." #~ msgstr "ã“ã®ã‚ªãƒ—ションを使用ã—ã¦ã€``galaxy_server_list`` セクションã®ä¸‹ã«ã‚ã‚‹ :file:`ansible.cfg` ã§ Galaxy 用㫠1 ã¤ä»¥ä¸Šã®ã‚µãƒ¼ãƒãƒ¼ã‚’æ§‹æˆã—ã¾ã™ã€‚サーãƒãƒ¼ã”ã¨ã«ã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚‚æ§‹æˆã—ã¾ã™ã€‚" #~ msgid "See :ref:`galaxy_server_config` for complete details." #~ msgstr "詳細ã¯ã€ã€Œ:ref:`galaxy_server_config`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "By default, ``ansible-galaxy`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`). If you are only publishing your collection to Ansible Galaxy, you do not need any further configuration. If you are using Red Hat Automation Hub or any other Galaxy server, see :ref:`Configuring the ansible-galaxy client `." #~ msgstr "デフォルトã§ã¯ã€``ansible-galaxy`` 㯠https://galaxy.ansible.com ã‚’ Galaxy サーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ (:ref:`galaxy_server` ã®ä¸‹ã® :file:`ansible.cfg` ファイルã«è¨˜è¼‰ã•れるよã†ã«)。`galaxy_server` コレクションã®ã¿ã‚’ Ansible Galaxy ã«å…¬é–‹ã—ã¦ã„ã‚‹å ´åˆã¯ã€è¿½åŠ è¨­å®šã¯å¿…è¦ã‚りã¾ã›ã‚“。Red Hat Automation Hub ã¾ãŸã¯ãã®ä»–ã® Galaxy サーãƒãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ:ref:`ansible-galaxy クライアントã®è¨­å®š `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "When uploading collections it doesn't matter which namespace you select. The collection will be uploaded to the namespace specified in the collection metadata in the ``galaxy.yml`` file. If you're not an owner of the namespace, the upload request will fail." #~ msgstr "コレクションをアップロードã™ã‚‹éš›ã«ã€é¸æŠžã—ãŸåå‰ç©ºé–“ã¯é‡è¦ã§ã¯ã‚りã¾ã›ã‚“。コレクション㯠``galaxy.yml`` ファイルã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã«æŒ‡å®šã•れãŸåå‰ç©ºé–“ã«ã‚¢ãƒƒãƒ—ロードã•れã¾ã™ã€‚åå‰ç©ºé–“ã®æ‰€æœ‰è€…ãŒãªã„å ´åˆã€ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰è¦æ±‚ã¯å¤±æ•—ã—ã¾ã™ã€‚" #~ msgid "Once Galaxy uploads and accepts a collection, you will be redirected to the **My Imports** page, which displays output from the import process, including any errors or warnings about the metadata and content contained in the collection." #~ msgstr "Galaxy ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’アップロードã—ã¦å—ã‘入れるã¨ã€**My Imports** ページã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å«ã¾ã‚Œã‚‹ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚„コンテンツã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ã‚„警告ãªã©ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆå‡¦ç†ã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #~ msgid "Collection versions" #~ msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #~ msgid "Once you upload a version of a collection, you cannot delete or modify that version. Ensure that everything looks okay before uploading. The only way to change a collection is to release a new version. The latest version of a collection (by highest version number) will be the version displayed everywhere in Galaxy; however, users will still be able to download older versions." #~ msgstr "コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップロードã—ãŸã‚‰ã€ãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã¾ãŸã¯å¤‰æ›´ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。アップロードã™ã‚‹å‰ã«ã€ã™ã¹ã¦ãŒæ­£å¸¸ã«è¦‹ãˆã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。コレクションを変更ã™ã‚‹å”¯ä¸€ã®æ–¹æ³•ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’リリースã™ã‚‹ã“ã¨ã§ã™ã€‚(最大ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã«ã‚ˆã‚‹) ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€Galaxy ã®ã‚らゆる場所ã«è¡¨ç¤ºã•れるãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãªã‚Šã¾ã™ã€‚ãŸã ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å¼•ãç¶šãå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã§ãã¾ã™ã€‚" #~ msgid "BOTMETA.yml" #~ msgstr "BOTMETA.yml" #~ msgid "We assume that you have included ``~/dev/ansible/collections/`` in :ref:`COLLECTIONS_PATHS`, and if that path mentions multiple directories, that you made sure that no other directory earlier in the search path contains a copy of ``community.general``. Create the directory ``~/dev/ansible/collections/ansible_collections/community``, and in it clone `the community.general Git repository `_ or a fork of it into the folder ``general``::" #~ msgstr ":ref:`COLLECTIONS_PATHS` ã« ``~/dev/ansible/collections/`` ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãã®ãƒ‘スã§è¤‡æ•°ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«è¨€åŠã•れã¦ã„ã‚‹å ´åˆã¯ã€æ¤œç´¢ãƒ‘スã®ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``community.general`` ã®ã‚³ãƒ”ーãŒå«ã¾ã‚Œãªã„よã†ã«ã—ã¾ã™ã€‚``~/dev/ansible/collections/ansible_collections/community`` ディレクトリーを作æˆã—ã¦ã€ãã®ä¸­ã« `the community.general Git repository `_ ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹ã‹ã€ãƒ•ォルダー ``general`` ã«ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ•ォークを作æˆã—ã¾ã™ã€‚" #~ msgid "For collections hosted in the ``ansible_collections`` GitHub org, create a branch and commit your changes on the branch. When you are done (remember to add tests, see :ref:`testing_collections`), push your changes to your fork of the collection and create a Pull Request. For other collections, especially for collections not hosted on GitHub, check the ``README.md`` of the collection for information on contributing to it." #~ msgstr "``ansible_collections`` GitHub ã®å›£ä½“ã§ãƒ›ã‚¹ãƒˆã•れるコレクションã®å ´åˆã¯ã€ãƒ–ランãƒã‚’作æˆã—ã€ãƒ–ランãƒã§å¤‰æ›´ã‚’コミットã—ã¾ã™ã€‚ã“れãŒå®Œäº†ã—ãŸã‚‰ã€(テストを追加ã™ã‚‹æ–¹æ³•ã¯ã€:ref:`testing_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。コレクションã®ãƒ•ォークã«å¤‰æ›´ã‚’プッシュã—ã€ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¾ã™ã€‚ä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (特㫠GitHub ãŒãƒ›ã‚¹ãƒˆã•れã¦ã„ãªã„コレクション) ã«ã¤ã„ã¦ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``README.md`` ã§ã“れã«è²¢çŒ®ã™ã‚‹æƒ…報を確èªã—ã¦ãã ã•ã„。" #~ msgid "We recommend that you use the `antsibull-changelog `_ tool to generate Ansible-compatible changelogs for your collection. The Ansible changelog uses the output of this tool to collate all the collections included in an Ansible release into one combined changelog for the release." #~ msgstr "`antsibull-changelog `_ ツールを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã« Ansible 互æ›ã® changelog を生æˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansibleã® changelog ã¯ã€ã“ã®ãƒ„ールã®å‡ºåŠ›ã‚’åˆ©ç”¨ã—ã¦ã€Ansible ã®ãƒªãƒªãƒ¼ã‚¹ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã€ãã®ãƒªãƒªãƒ¼ã‚¹ã® 1 ã¤ã®çµ±åˆã•れãŸãƒã‚§ãƒ³ã‚¸ãƒ­ã‚°ã«ç…§åˆã—ã¾ã™ã€‚" #~ msgid "Porting Guide entries" #~ msgstr "ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚¨ãƒ³ãƒˆãƒªãƒ¼" #~ msgid "The following changelog fragment categories are consumed by the Ansible changelog generator into the Ansible Porting Guide:" #~ msgstr "以下㮠changelog フラグメントカテゴリーã¯ã€Ansible changelog ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ãŒ Ansible ç§»æ¤ã‚¬ã‚¤ãƒ‰ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #~ msgid "Understand the collections metadata structure." #~ msgstr "コレクションã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’ç†è§£ã—ã¾ã™ã€‚" #~ msgid "When called with the argument ``--host `` (where is a host from above), the script must print either an empty JSON hash/dictionary, or a hash/dictionary of variables to make them available to templates and playbooks. For example::" #~ msgstr "引数 ``--host `` ( ã¯ä¸Šè¿°ã®ãƒ›ã‚¹ãƒˆ) ã§å‘¼ã³å‡ºã•れるã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã¯ç©ºã® JSON ãƒãƒƒã‚·ãƒ¥/ディクショナリーã‹ã€ãƒ†ãƒ³ãƒ—レートや Playbook ã§åˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®å¤‰æ•°ã®ãƒãƒƒã‚·ãƒ¥/ディクショナリーを出力ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "`Ansible Tower `_" #~ msgstr "`Ansible Tower `_" #~ msgid "The easiest, quickest, and the most popular way to extend Ansible is to use a local module or a plugin. You can create them or copy existing ones for local use. You can store a local module or plugin on your Ansible control node and share it with your team or organization. You can also share a local plugin or module by including it in a collection or embedding it in a role, then publishing the collection or role on Ansible Galaxy. If you are using roles on Ansible Galaxy, then you are already using local modules and plugins without realizing it." #~ msgstr "Ansible ã‚’æ‹¡å¼µã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ローカルã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã“れらを作æˆã™ã‚‹ã‹ã€æ—¢å­˜ã®ã‚‚ã®ã‚’コピーã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible コントロールノードã«ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインをä¿å­˜ã—ã€ãƒãƒ¼ãƒ ã¾ãŸã¯çµ„ç¹”ã¨å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コレクションã«å«ã‚ã‚‹ã‹ã€ãƒ­ãƒ¼ãƒ«ã«åŸ‹ã‚込むã“ã¨ã§ã€Ansible Galaxy ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’公開ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚Ansible Galaxy ã§ãƒ­ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€èªè­˜ã›ãšã«ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインをã™ã§ã«ä½¿ç”¨ã—ã¦ã„ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "If you are using an existing module or plugin but Ansible can't find it, this page is all you need. However, if you want to create a plugin or a module, go to :ref:`developing_plugins` and :ref:`developing_modules_general` topics and then return to this page to know how to add it locally." #~ msgstr "既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを使用ã—ã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€Ansible ã§è¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€ã“ã®ãƒšãƒ¼ã‚¸ã®ã¿ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å ´åˆã¯ã€:ref:`developing_plugins` ãŠã‚ˆã³ :ref:`developing_modules_general` トピックã«ç§»å‹•ã—ã¦ã‹ã‚‰ã€ã“ã®ãƒšãƒ¼ã‚¸ã«æˆ»ã‚Šã€ãƒ­ãƒ¼ã‚«ãƒ«ã§è¿½åŠ ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #~ msgid "To save a local module or plugin such that Ansible can find and use it, add the module or plugin in the appropriate directory (the directories are specified in later parts of this topic)." #~ msgstr "Ansible ãŒæ¤œå‡ºã—ã¦ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインをä¿å­˜ã™ã‚‹ã«ã¯ã€é©åˆ‡ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを追加ã—ã¾ã™ (ディレクトリーã¯ã€æœ¬ãƒˆãƒ”ックã®å¾ŒåŠã§æŒ‡å®šã•れã¦ã„ã¾ã™)。" #~ msgid "Adding a module locally" #~ msgstr "モジュールをローカルã§è¿½åŠ " #~ msgid "Ansible automatically loads all executable files found in certain directories as modules." #~ msgstr "Ansible ã¯ã€ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚る実行å¯èƒ½ãƒ•ァイルをã™ã¹ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦è‡ªå‹•çš„ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #~ msgid "For local modules, use the name of the file as the module name: for example, if the module file is ``~/.ansible/plugins/modules/local_users.py``, use ``local_users`` as the module name." #~ msgstr "ローカルモジュールã®å ´åˆã¯ã€ãƒ•ァイルåをモジュールåã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイル㌠``~/.ansible/plugins/modules/local_users.py`` ã®å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã¨ã—㦠``local_users`` を使用ã—ã¾ã™ã€‚" #~ msgid "To load your local modules automatically and make them available to all playbooks and roles, add them in any of these locations:" #~ msgstr "ローカルモジュールを自動的ã«èª­ã¿è¾¼ã¿ã€ã™ã¹ã¦ã® Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€ãれらを以下ã®ã„ãšã‚Œã‹ã®å ´æ‰€ã«è¿½åŠ ã—ã¾ã™ã€‚" #~ msgid "any directory added to the ``ANSIBLE_LIBRARY`` environment variable (``$ANSIBLE_LIBRARY`` takes a colon-separated list like ``$PATH``)" #~ msgstr "``ANSIBLE_LIBRARY`` 環境変数ã«è¿½åŠ ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (``$ANSIBLE_LIBRARY`` 㯠``$PATH``ã®ã‚ˆã†ã«ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã£ãŸä¸€è¦§)" #~ msgid "``~/.ansible/plugins/modules/``" #~ msgstr "``~/.ansible/plugins/modules/``" #~ msgid "``/usr/share/ansible/plugins/modules/``" #~ msgstr "``/usr/share/ansible/plugins/modules/``" #~ msgid "or" #~ msgstr "ã¾ãŸã¯" #~ msgid "You can limit the availability of your local module. If you want to use a local module only with selected playbooks or only with a single role, load it in one of the following locations:" #~ msgstr "ローカルモジュールã®å¯ç”¨æ€§ã‚’制é™ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚é¸æŠžã—㟠Playbook ã§ã®ã¿ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å ´åˆã€ã¾ãŸã¯å˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã§ã®ã¿ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®å ´æ‰€ã«ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚" #~ msgid "Adding a plugin locally" #~ msgstr "プラグインをローカルã§è¿½åŠ " #~ msgid "Ansible loads plugins automatically too, and loads each type of plugin separately from a directory named for the type of plugin. Here's the full list of plugin directory names:" #~ msgstr "Ansible ã¯ãƒ—ラグインも自動的ã«ãƒ­ãƒ¼ãƒ‰ã—ã€ãƒ—ラグインã®ã‚¿ã‚¤ãƒ—ã«å¯¾ã—ã¦åå‰ãŒä»˜ã‘られãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¨ã¯åˆ¥ã«ã€å„タイプã®ãƒ—ラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚プラグインディレクトリーåã®å…¨ä¸€è¦§ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #~ msgid "cache_plugins" #~ msgstr "cache_plugins" #~ msgid "callback_plugins" #~ msgstr "callback_plugins" #~ msgid "connection_plugins" #~ msgstr "connection_plugins" #~ msgid "filter_plugins*" #~ msgstr "filter_plugins*" #~ msgid "inventory_plugins" #~ msgstr "inventory_plugins" #~ msgid "lookup_plugins" #~ msgstr "lookup_plugins" #~ msgid "shell_plugins" #~ msgstr "shell_plugins" #~ msgid "strategy_plugins" #~ msgstr "strategy_plugins" #~ msgid "test_plugins*" #~ msgstr "test_plugins*" #~ msgid "vars_plugins" #~ msgstr "vars_plugins" #~ msgid "After you add the plugins and verify that they are available for use, you can see the documentation for all the plugins except for the ones marked with an asterisk (*) above." #~ msgstr "プラグインを追加ã—ã¦ã€ãれらãŒä½¿ç”¨ã§ãã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã¨ã€ä¸Šè¨˜ã®ã‚¢ã‚¹ã‚¿ãƒªã‚¹ã‚¯ (*) ã®ãƒžãƒ¼ã‚¯ãŒä»˜ã„ãŸã‚‚ã®ã‚’除ãã€ã™ã¹ã¦ã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’表示ã§ãã¾ã™ã€‚" #~ msgid "To load your local plugins automatically, add them in any of these locations:" #~ msgstr "ローカルプラグインを自動的ã«èª­ã¿è¾¼ã‚€ã«ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®å ´æ‰€ã«è¿½åŠ ã—ã¾ã™ã€‚" #~ msgid "any directory added to the relevant ``ANSIBLE_plugin_type_PLUGINS`` environment variable (these variables, such as ``$ANSIBLE_INVENTORY_PLUGINS`` and ``$ANSIBLE_VARS_PLUGINS`` take colon-separated lists like ``$PATH``)" #~ msgstr "関連ã™ã‚‹ ``ANSIBLE_plugin_type_PLUGINS`` 環境変数ã«è¿½åŠ ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (``$ANSIBLE_INVENTORY_PLUGINS``ã€``$ANSIBLE_VARS_PLUGINS`` ãªã©) ã¯ã€``$PATH`` ã®ã‚ˆã†ã«ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã£ãŸä¸€è¦§ã‚’å–りã¾ã™ã€‚" #~ msgid "the directory named for the correct ``plugin_type`` within ``~/.ansible/plugins/`` - for example, ``~/.ansible/plugins/callback``" #~ msgstr "``~/.ansible/plugins/`` å†…ã®æ­£ã—ã„ ``plugin_type`` ã¨ã„ã†åå‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (例: ``~/.ansible/plugins/callback``)" #~ msgid "the directory named for the correct ``plugin_type`` within ``/usr/share/ansible/plugins/`` - for example, ``/usr/share/ansible/plugins/action``" #~ msgstr "``/usr/share/ansible/plugins/`` å†…ã®æ­£ã—ã„ ``plugin_type`` ã¨ã„ã†åå‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (例: ``/usr/share/ansible/plugins/action``)" #~ msgid "type ``ansible-doc -t my_custom_lookup_plugin``. For example, ``ansible-doc -t lookup my_custom_lookup_plugin``. You should see the documentation for that plugin. This works for all plugin types except the ones marked with ``*`` in the list above - see :ref:`ansible-doc` for more details." #~ msgstr "``ansible-doc -t my_custom_lookup_plugin`` を入力ã—ã¾ã™ (例: ``ansible-doc -t lookup my_custom_lookup_plugin``)。ãã®ãƒ—ラグインã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’確èªã—ã¦ãã ã•ã„。ã“れã¯ä¸Šè¨˜ã®ãƒªã‚¹ãƒˆã§ ``*`` ã®ãƒžãƒ¼ã‚¯ãŒä»˜ã„ãŸã‚‚ã®ä»¥å¤–ã®ã™ã¹ã¦ã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚¿ã‚¤ãƒ—ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`ansible-doc`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "You can limit the availability of your local plugin. If you want to use a local plugin only with selected playbooks or only with a single role, load it in one of the following locations:" #~ msgstr "ローカルプラグインã®å¯ç”¨æ€§ã‚’制é™ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚é¸æŠžã—㟠Playbook ã§ã®ã¿ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインを使用ã™ã‚‹å ´åˆã€ã¾ãŸã¯å˜ä¸€ã®ãƒ­ãƒ¼ãƒ«ã§ã®ã¿ãƒ­ãƒ¼ã‚«ãƒ«ãƒ—ラグインを使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®å ´æ‰€ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #~ msgid "In a selected playbook or playbooks: Store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``callback_plugins`` or ``inventory_plugins``) in the directory that contains the playbooks." #~ msgstr "é¸æŠžã—㟠Playbook: ãã®Playbook ã‚’å«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã€æ­£ã—ã„ ``plugin_type`` (例: ``callback_plugins`` ã¾ãŸã¯ ``inventory_plugins``) ã®ã‚µãƒ–ディレクトリーã«ãƒ—ラグインをä¿å­˜ã—ã¾ã™ã€‚" #~ msgid "In a single role: Store the plugin in a subdirectory for the correct ``plugin_type`` (for example, ``cache_plugins`` or ``strategy_plugins``) within that role. When shipped as part of a role, the plugin is available as soon as the role is executed." #~ msgstr "å˜ä¸€ã®ãƒ­ãƒ¼ãƒ«: ãã®ãƒ­ãƒ¼ãƒ«å†…ã§ã€æ­£ã—ã„ ``plugin_type`` (例: ``cache_plugins`` ã¾ãŸã¯ ``strategy_plugins``) ã®ã‚µãƒ–ディレクトリーã«ãƒ—ラグインをä¿å­˜ã—ã¾ã™ã€‚ロールã®ä¸€éƒ¨ã¨ã—ã¦æä¾›ã•れるã¨ã€ãƒ­ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れるã¨ã™ãã«ãƒ—ラグインãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "Please make sure your module meets these requirements before you submit your PR/proposal. If you have questions, reach out via `Ansible's IRC chat channel `_ or the `Ansible development mailing list `_." #~ msgstr "PR/ææ¡ˆã‚’é€ä¿¡ã™ã‚‹å‰ã«ã€ãŠä½¿ã„ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã“れらã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã”質å•ãŒã‚ã‚‹å ´åˆã¯ã€`Ansible ã® IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« `_ ã¾ãŸã¯ `Ansible 開発メーリングリスト `_ ã¾ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #~ msgid "``L()`` for links with a heading. For example: ``See L(Ansible Tower,https://www.ansible.com/products/tower).`` As of Ansible 2.10, do not use ``L()`` for relative links between Ansible documentation and collection documentation." #~ msgstr "``L()`` 見出ã—ã¸ã®ãƒªãƒ³ã‚¯ã€‚ãŸã¨ãˆã°ã€``See L(Ansible Tower,https://www.ansible.com/products/tower).`` ã¨ãªã‚Šã¾ã™ã€‚Ansible 2.10 以é™ã€Ansible ドキュメントã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ç›¸å¯¾ãƒªãƒ³ã‚¯ã«ã¯ ``L()`` を使用ã—ãªã„ã§ãã ã•ã„。" #~ msgid "``R()`` for cross-references with a heading (added in Ansible 2.10). For example: ``See R(Cisco IOS Platform Guide,ios_platform_options)``. Use the RST anchor for the cross-reference. See :ref:`adding_anchors_rst` for details." #~ msgstr "(Ansible 2.10 ã«å«ã¾ã‚Œã‚‹) 見出ã—ã¨ç›¸äº’å‚照用 ``R()`` (例: ``See R(Cisco IOS Platform Guide,ios_platform_options)``)。クロスå‚ç…§ã« RST アンカーを使用ã—ã¾ã™ã€‚詳細ã¯ã€:ref:`adding_anchors_rst` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "``M()`` for module names. For example: ``See also M(ansible.builtin.yum) or M(community.general.apt_rpm)``." #~ msgstr "``M()`` モジュールå。ãŸã¨ãˆã° ``See also M(ansible.builtin.yum) or M(community.general.apt_rpm)`` ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "For links between modules and documentation within a collection, you can use any of the options above. For links outside of your collection, use ``R()`` if available. Otherwise, use ``U()`` or ``L()`` with full URLs (not relative links). For modules, use ``M()`` with the FQCN or ``ansible.builtin`` as shown in the example. If you are creating your own documentation site, you will need to use the `intersphinx extension `_ to convert ``R()`` and ``M()`` to the correct links." #~ msgstr "コレクション内ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆé–“ã®ãƒªãƒ³ã‚¯ã«ã¤ã„ã¦ã¯ã€ä¸Šè¨˜ã®ã‚ªãƒ—ションã®ã„ãšã‚Œã‹ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクション外ã®ãƒªãƒ³ã‚¯ã«ã¤ã„ã¦ã¯ã€åˆ©ç”¨å¯èƒ½ãªå ´åˆã¯ ``R()`` を使用ã—ã¾ã™ã€‚利用ã§ããªã„å ´åˆã¯ã€(相対リンクã§ã¯ãªã) 完全㪠URL ã§ ``U()`` ã¾ãŸã¯ ``L()`` を使用ã—ã¾ã™ã€‚モジュールã®å ´åˆã¯ã€ä¾‹ã®ã‚ˆã†ã«ã€FQCN ã¾ãŸã¯ ``ansible.builtin`` ã§ ``M()`` を使用ã—ã¾ã™ã€‚独自ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µã‚¤ãƒˆã‚’作æˆã™ã‚‹å ´åˆã¯ã€`intersphinx extension `_ を使用ã—㦠``R()`` ãŠã‚ˆã³ ``M()`` ã‚’æ­£ã—ã„リンクã«å¤‰æ›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "``Refer to the R(community.kubernetes collection, plugins_in_community.kubernetes) for information on managing kubernetes clusters.``" #~ msgstr "``Refer to the R(community.kubernetes collection, plugins_in_community.kubernetes) for information on managing kubernetes clusters.``" #~ msgid "Join the IRC channel ``#ansible-devel`` on freenode for discussions surrounding Ansible development." #~ msgstr "Ansible 開発ã«å–り組むãŸã‚ã€freenode ã® IRC ãƒãƒ£ãƒ³ãƒãƒ« ``#ansible-devel`` ã«å‚加ã—ã¾ã™ã€‚" #~ msgid "Join the IRC channel ``#ansible-devel`` or ``#ansible-windows`` on freenode for discussions about Ansible development for Windows." #~ msgstr "freenode ã® IRC ãƒãƒ£ãƒãƒ« ``#ansible-devel`` ã¾ãŸã¯ ``#ansible-windows`` ã«å‚加ã—ã€Windows 用 ã® Ansible 開発ã«é–¢ã™ã‚‹è­°è«–を行ã†ã“ã¨ã€‚" #~ msgid "``#ansible-devel`` - We have found that IRC ``#ansible-devel`` on FreeNode's IRC network works best for developers so we can have an interactive dialogue." #~ msgstr "``#ansible-devel`` - FreeNode ã® IRC ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ``#ansible-devel`` ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªå¯¾è©±ã‚’行ã†ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºè€…ã«æœ€é©ãªã‚‚ã®ã§ã‚ã‚‹ã“ã¨ãŒåˆ†ã‹ã£ã¦ã„ã¾ã™ã€‚" #~ msgid "If you need help or advice, consider join the ``#ansible-devel`` IRC channel (see how in the \"Where to get support\")." #~ msgstr "ã•らã«ãƒ˜ãƒ«ãƒ—ã¾ãŸã¯ã‚¢ãƒ‰ãƒã‚¤ã‚¹ãŒå¿…è¦ãªå ´åˆã¯ã€IRC ãƒãƒ£ãƒ³ãƒãƒ« ``#ansible-devel`` ã«å‚加ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„ (「サãƒãƒ¼ãƒˆã‚’得る方法ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #~ msgid "``removed_in_version`` indicates which version of ansible-base or a collection a deprecated argument will be removed in. Mutually exclusive with ``removed_at_date``, and must be used with ``removed_from_collection``." #~ msgstr "``removed_in_version`` ã¯ã€éžæŽ¨å¥¨ã®å¼•æ•°ãŒå‰Šé™¤ã•れる ansible-base ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’示ã—ã¾ã™ã€‚``removed_at_date`` ã§ç›¸äº’排他ã•れã€``removed_from_collection`` ã§ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "``removed_at_date`` indicates that a deprecated argument will be removed in a minor ansible-base release or major collection release after this date. Mutually exclusive with ``removed_in_version``, and must be used with ``removed_from_collection``." #~ msgstr "``removed_at_date`` ã¯ã€éžæŽ¨å¥¨ã®å¼•æ•°ãŒã€ã“ã®æ—¥ä»˜ä»¥é™ã®ãƒžã‚¤ãƒŠãƒ¼ãª ansible-base リリースã¾ãŸã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れるã“ã¨ã‚’示ã—ã¾ã™ã€‚``removed_in_version`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã‚りã€``removed_from_collection`` ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "If a module matures, we will remove the 'preview' mark in the documentation. We support (though we cannot guarantee) backwards compatibility for these modules, which means their parameters should be maintained with stable meanings." #~ msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæˆç†Ÿã™ã‚‹ã¨ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã€Œãƒ—レビューã€ãƒžãƒ¼ã‚¯ãŒå‰Šé™¤ã•れã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã™ã‚‹å¾Œæ–¹äº’æ›æ€§ã¯ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ (ãŒä¿è¨¼ã¯ã—ã¾ã›ã‚“)。ã¤ã¾ã‚Šã€ãƒ‘ラメーターã¯å®‰å®šã—ãŸæ–¹æ³•ã§ç¶­æŒã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "When a module has been deprecated for four release cycles, we remove the code and mark the stub file removed. Modules that are removed are no longer shipped with Ansible. The stub file helps users find alternative modules." #~ msgstr "4 ã¤ã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒéžæŽ¨å¥¨ã«ãªã£ãŸã‚‰ã€ã‚³ãƒ¼ãƒ‰ã‚’削除ã—ã€stab ファイル㫠removed ã¨è¡¨ç¤ºã—ã¾ã™ã€‚削除ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€Ansible ã«åŒæ¢±ã•れãªããªã‚Šã¾ã™ã€‚stab ファイルã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä»£æ›¿ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’見ã¤ã‘ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #~ msgid "Deprecating modules" #~ msgstr "モジュールã®éžæŽ¨å¥¨åŒ–" #~ msgid "Mention the deprecation in the relevant ``CHANGELOG``." #~ msgstr "関連ã™ã‚‹ ``CHANGELOG`` ã®éžæŽ¨å¥¨ã«è¨€åŠã—ã¦ãã ã•ã„。" #~ msgid "note: with the advent of collections and ``routing.yml`` we might soon require another entry in this file to mark the deprecation." #~ msgstr "注記: コレクションãŠã‚ˆã³ ``routing.yml`` ã§ã¯ã€éžæŽ¨å¥¨ã¨ãªã£ãŸãƒžãƒ¼ã‚¯ã«ã“ã®ãƒ•ァイル内ã®åˆ¥ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒã™ãã«å¿…è¦ã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚" #~ msgid "Changing a module name" #~ msgstr "モジュールåã®å¤‰æ›´" #~ msgid "If the underlying ``describe_some_resources`` API call throws a ``ResourceNotFound`` exception, ``AWSRetry`` takes this as a cue to retry until it's not thrown (this is so that when creating a resource, we can just retry until it exists)." #~ msgstr "基礎ã¨ãªã‚‹ ``describe_some_resources`` API 呼ã³å‡ºã—ã§ ``ResourceNotFound`` 例外を出力ã™ã‚‹ã¨ã€``AWSRetry`` ã¯ã“れãŒå‡ºåŠ›ã•れãªããªã‚‹ã¾ã§å†è©¦è¡Œã™ã‚‹åˆå›³ã¨ã—ã¦ã“れをå—ã‘å–りã¾ã™ (ã“れã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹ã¨ãã«ã€ãƒªã‚½ãƒ¼ã‚¹ãŒå­˜åœ¨ã™ã‚‹ã¾ã§å†è©¦è¡Œã§ãるよã†ã«ã™ã‚‹ãŸã‚ã§ã™)。" #~ msgid "To handle authorization failures or parameter validation errors in ``describe_some_resource_with_backoff``, where we just want to return ``None`` if the resource doesn't exist and not retry, we need:" #~ msgstr "リソースãŒå­˜åœ¨ã—ãªã„å ´åˆã€ãŠã‚ˆã³ãƒªã‚½ãƒ¼ã‚¹ãŒå†è©¦è¡Œã•れã¦ã„ãªã„å ´åˆã®ã¿ ``None`` を返㙠``describe_some_resource_with_backoff`` ã§æ‰¿èªã®å¤±æ•—ã¾ãŸã¯ãƒ‘ラメーター検証エラーを処ç†ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "Ask in the Ansible IRC channel #ansible-aws (on freenode IRC)." #~ msgstr "Freenode IRC ã® Ansible IRC ãƒãƒ£ãƒ³ãƒãƒ« #ansible-aws ã«å•ã„åˆã‚ã›ã¾ã™ã€‚" #~ msgid "Ask for advice on IRC, on the ``#ansible-devel`` Freenode channel" #~ msgstr "Freenode ãƒãƒ£ãƒ³ãƒãƒ« ``#ansible-devel`` ã® IRC ã§è³ªå•ã—ã¦ãã ã•ã„。" #~ msgid "Ansible Tower®" #~ msgstr "Ansible Tower®" #~ msgid "If the issue persists, please contact us in ``#ansible-devel`` on Freenode IRC." #~ msgstr "å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€Freenode IRC ã® ``#ansible-devel`` ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #~ msgid "For questions about integration tests reach out to @mattclay or @gundalow on GitHub or ``#ansible-devel`` on IRC." #~ msgstr "インテグレーションテストã«é–¢ã™ã‚‹è³ªå•ã¯ã€GitHub ã§ @mattclay ã¾ãŸã¯ @gundalowã€ã¾ãŸã¯ IRC ã§ ``#ansible-devel`` ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #~ msgid "fedora28" #~ msgstr "fedora28" #~ msgid "ubuntu1404" #~ msgstr "ubuntu1404" #~ msgid "ubuntu1604" #~ msgstr "ubuntu1604" #~ msgid "last-line-main-call" #~ msgstr "last-line-main-call" #~ msgid "Call to ``main()`` not the last line (or ``removed_module()`` in the case of deprecated & docs only modules)" #~ msgstr "最終行以外㮠``main()`` ã®å‘¼å‡ºã— (ã¾ãŸã¯ã€éžæŽ¨å¥¨ãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã¿ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ ``removed_module()``)。" #~ msgid "missing-if-name-main" #~ msgstr "missing-if-name-main" #~ msgid "Next to last line is not ``if __name__ == \"__main__\":``" #~ msgstr "最後ã®è¡Œã®éš£ã«ãªã‚‹ã‚‚ã®ã¯ã€``if __name__ == \"__main__\":`` ã§ã¯ãªã„" #~ msgid "missing-main-call" #~ msgstr "missing-main-call" #~ msgid "Did not find a call to ``main()`` (or ``removed_module()`` in the case of deprecated & docs only modules)" #~ msgstr "``main()`` ã¸ã®å‘¼å‡ºã—ãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸ (éžæŽ¨å¥¨ã¾ãŸã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã¿ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å ´åˆã¯ ``removed_module()``)。" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.476556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/galaxy.po0000644000000000000000000026663300000000000024736 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2019 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/galaxy/dev_guide.rst:5 msgid "Galaxy Developer Guide" msgstr "Galaxy 開発者ガイド" #: ../../rst/galaxy/dev_guide.rst:7 msgid "You can host collections and roles on Galaxy to share with the Ansible community. Galaxy content is formatted in pre-packaged units of work such as :ref:`roles `, and new in Galaxy 3.2, :ref:`collections `. You can create roles for provisioning infrastructure, deploying applications, and all of the tasks you do everyday. Taking this a step further, you can create collections which provide a comprehensive package of automation that may include multiple playbooks, roles, modules, and plugins." msgstr "Galaxy ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒ­ãƒ¼ãƒ«ã‚’ホストã—ã¦ã€Ansible コミュニティーã¨å…±æœ‰ã§ãã¾ã™ã€‚Galaxy コンテンツã¯ã€äº‹å‰ã«ãƒ‘ッケージ化ã•れãŸä½œæ¥­å˜ä½ (:ref:`ロール`ã€Galaxy 3.2 ã®æ–°æ©Ÿèƒ½ã€:ref:`コレクション ` ãªã©) ã§ãƒ•ォーマットã•れã¾ã™ã€‚インフラストラクãƒãƒ£ãƒ¼ã®ãƒ—ロビジョニングã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントã€ãŠã‚ˆã³æ—¥å¸¸çš„ã«è¡Œã†ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã®ãƒ­ãƒ¼ãƒ«ã‚’作æˆã§ãã¾ã™ã€‚ã“れをã•らã«ä¸€æ­©é€²ã‚ã¦ã€è¤‡æ•°ã® Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインをå«ã‚€å¯èƒ½æ€§ã®ã‚る自動化ã®åŒ…括的ãªãƒ‘ッケージをæä¾›ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:17 msgid "Creating collections for Galaxy" msgstr "Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½œæˆ" #: ../../rst/galaxy/dev_guide.rst:19 msgid "Collections are a distribution format for Ansible content. You can use collections to package and distribute playbooks, roles, modules, and plugins. You can publish and use collections through `Ansible Galaxy `_." msgstr "コレクションã¯ã€Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚コレクションを使用ã—ã¦ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインをパッケージ化ãŠã‚ˆã³é…布ã§ãã¾ã™ã€‚`Ansible Galaxy `_ を介ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ãŠã‚ˆã³ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:22 msgid "See :ref:`developing_collections` for details on how to create collections." msgstr "コレクションã®ä½œæˆæ–¹æ³•ã¯ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/dev_guide.rst:28 msgid "Creating roles for Galaxy" msgstr "Galaxy ã®ãƒ­ãƒ¼ãƒ«ã®ä½œæˆ" #: ../../rst/galaxy/dev_guide.rst:30 msgid "Use the ``init`` command to initialize the base structure of a new role, saving time on creating the various directories and main.yml files a role requires" msgstr "``init`` コマンドを使用ã—ã¦æ–°è¦ãƒ­ãƒ¼ãƒ«ã®åŸºæœ¬æ§‹é€ ã‚’åˆæœŸåŒ–ã—ã€ãƒ­ãƒ¼ãƒ«ã«å¿…è¦ãªã•ã¾ã–ã¾ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŠã‚ˆã³ main.yml ファイルを作æˆã™ã‚‹éš›ã®æ™‚間を短縮ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:36 msgid "The above will create the following directory structure in the current working directory:" msgstr "上記ã«ã‚ˆã‚Šã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ä»¥ä¸‹ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:57 msgid "If you want to create a repository for the role, the repository root should be `role_name`." msgstr "ロールã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’作æˆã™ã‚‹å ´åˆã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ«ãƒ¼ãƒˆã¯ `role_name` ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:60 msgid "Force" msgstr "Force" #: ../../rst/galaxy/dev_guide.rst:62 msgid "If a directory matching the name of the role already exists in the current working directory, the init command will result in an error. To ignore the error use the ``--force`` option. Force will create the above subdirectories and files, replacing anything that matches." msgstr "ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã™ã§ã«ãƒ­ãƒ¼ãƒ«åã«ä¸€è‡´ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€init コマンドã«ã‚ˆã‚Šã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚エラーを無視ã™ã‚‹ã«ã¯ã€``--force`` オプションを使用ã—ã¾ã™ã€‚強制的ã«ã€ä¸Šè¨˜ã®ã‚µãƒ–ディレクトリーã¨ãƒ•ァイルを作æˆã—ã€ä¸€è‡´ã™ã‚‹ã‚‚ã®ã‚’ã™ã¹ã¦ç½®ãæ›ãˆã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:66 msgid "Container enabled" msgstr "有効ãªã‚³ãƒ³ãƒ†ãƒŠãƒ¼" #: ../../rst/galaxy/dev_guide.rst:68 msgid "If you are creating a Container Enabled role, pass ``--type container`` to ``ansible-galaxy init``. This will create the same directory structure as above, but populate it with default files appropriate for a Container Enabled role. For instance, the README.md has a slightly different structure, the *.travis.yml* file tests the role using `Ansible Container `_, and the meta directory includes a *container.yml* file." msgstr "Container Enabled ロールを作æˆã™ã‚‹å ´åˆã¯ã€``--type container`` ã‚’ ``ansible-galaxy init`` ã«æ¸¡ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ä¸Šè¨˜ã®ã‚‚ã®ã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒä½œæˆã•れã¾ã™ãŒã€ã“れを Container Enabled ロールã«é©ã—ãŸãƒ‡ãƒ•ォルトファイルã§è¿½åŠ ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€README.md ã«ã¯è‹¥å¹²ç•°ãªã‚‹æ§‹é€ ãŒã‚りã€*.travis.yml* ファイルã§ã¯ã€`Ansible Container `_ を使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã‚’テストã—ã¾ã™ã€‚ã¾ãŸã€ãƒ¡ã‚¿ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã¯ *container.yml* ファイルãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:73 msgid "Using a custom role skeleton" msgstr "カスタムロールã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ã®ä½¿ç”¨" #: ../../rst/galaxy/dev_guide.rst:75 msgid "A custom role skeleton directory can be supplied as follows:" msgstr "カスタムロールã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:81 msgid "When a skeleton is provided, init will:" msgstr "スケルトンを指定ã™ã‚‹ã¨ init ã¯ä»¥ä¸‹ã®ã“ã¨ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:83 msgid "copy all files and directories from the skeleton to the new role" msgstr "ã™ã¹ã¦ã®ãƒ•ァイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’スケルトンã‹ã‚‰æ–°ã—ã„ロールã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:84 msgid "any .j2 files found outside of a templates folder will be rendered as templates. The only useful variable at the moment is role_name" msgstr "テンプレートディレクトリーã®å¤–部ã§è¦‹ã¤ã‹ã£ãŸã™ã¹ã¦ã® .j2 ファイルã¯ãƒ†ãƒ³ãƒ—レートã¨ã—ã¦ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れã¾ã™ã€‚ç¾åœ¨ä¾¿åˆ©ãªå¤‰æ•°ã¯ role_name ã§ã™" #: ../../rst/galaxy/dev_guide.rst:85 msgid "The .git folder and any .git_keep files will not be copied" msgstr ".git ディレクトリーãŠã‚ˆã³ .git_keep ファイルã¯ã‚³ãƒ”ーã•れã¾ã›ã‚“。" #: ../../rst/galaxy/dev_guide.rst:87 msgid "Alternatively, the role_skeleton and ignoring of files can be configured via ansible.cfg" msgstr "ã¾ãŸã¯ã€role_skeleton ã¨ãƒ•ァイルã®ç„¡è¦–ã¯ã€ansible.cfgã§è¨­å®šã§ãã¾ã™" #: ../../rst/galaxy/dev_guide.rst:96 msgid "Authenticate with Galaxy" msgstr "Galaxy ã§ã®èªè¨¼" #: ../../rst/galaxy/dev_guide.rst:98 msgid "Using the ``import``, ``delete`` and ``setup`` commands to manage your roles on the Galaxy website requires authentication, and the ``login`` command can be used to do just that. Before you can use the ``login`` command, you must create an account on the Galaxy website." msgstr "Galaxy Web サイトã§ãƒ­ãƒ¼ãƒ«ã‚’管ç†ã™ã‚‹ ``import`` コマンドã€``delete`` コマンドã€ãŠã‚ˆã³ ``setup`` コマンドを使用ã™ã‚‹ã«ã¯èªè¨¼ãŒå¿…è¦ã§ã€``login`` コマンドを使用ã—ã¦ã“れを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚``login`` コマンドを使用ã™ã‚‹å‰ã«ã€Galaxy ã® Web サイトã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:101 msgid "The ``login`` command requires using your GitHub credentials. You can use your username and password, or you can create a `personal access token `_. If you choose to create a token, grant minimal access to the token, as it is used just to verify identify." msgstr "``login`` コマンドã«ã¯ã€GitHub èªè¨¼æƒ…報を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ユーザーåã¨ãƒ‘スワードを使用ã™ã‚‹ã‹ã€`personal access token `_ を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚トークンã®ä½œæˆã‚’é¸æŠžã—ãŸå ´åˆã¯ã€è­˜åˆ¥ã‚’確èªã™ã‚‹ãŸã‚ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:103 msgid "The following shows authenticating with the Galaxy website using a GitHub username and password:" msgstr "以下ã¯ã€GitHub ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードを使用ã—㟠Galaxy Web サイトã§ã®èªè¨¼ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:119 msgid "When you choose to use your username and password, your password is not sent to Galaxy. It is used to authenticates with GitHub and create a personal access token. It then sends the token to Galaxy, which in turn verifies that your identity and returns a Galaxy access token. After authentication completes the GitHub token is destroyed." msgstr "ユーザーåã¨ãƒ‘スワードã®ä½¿ç”¨ã‚’é¸æŠžã™ã‚‹ã¨ã€ãƒ‘スワード㯠Galaxy ã«é€ä¿¡ã•れã¾ã›ã‚“。ã“れ㯠GitHub ã§èªè¨¼ã•れã€å€‹äººã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’作æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚次ã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ Galaxy ã«é€ä¿¡ã—ã€ãã® ID を検証ã—ã€Galaxy アクセストークンを返ã—ã¾ã™ã€‚èªè¨¼ãŒå®Œäº†ã™ã‚‹ã¨ã€GitHub トークンãŒç ´æ£„ã•れã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:123 msgid "If you do not want to use your GitHub password, or if you have two-factor authentication enabled with GitHub, use the ``--github-token`` option to pass a personal access token that you create." msgstr "GitHub パスワードを使用ã—ãªã„å ´åˆã‚„ã€GitHub ã§ 2 段階èªè¨¼ã‚’有効ã«ã—ã¦ã„ã‚‹å ´åˆã¯ã€``--github-token`` オプションを使用ã—ã¦ã€ä½œæˆã™ã‚‹å€‹äººç”¨ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’渡ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:127 msgid "Import a role" msgstr "ロールã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/galaxy/dev_guide.rst:129 msgid "The ``import`` command requires that you first authenticate using the ``login`` command. Once authenticated you can import any GitHub repository that you own or have been granted access." msgstr "``import`` コマンドã§ã¯ã€æœ€åˆã« ``login`` コマンドを使用ã—ã¦èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚èªè¨¼ã•れるã¨ã€æ‰€æœ‰ã¾ãŸã¯ã‚¢ã‚¯ã‚»ã‚¹ãŒä»˜ä¸Žã•れ㟠GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’ã™ã¹ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:131 msgid "Use the following to import to role:" msgstr "以下を使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:137 msgid "By default the command will wait for Galaxy to complete the import process, displaying the results as the import progresses:" msgstr "デフォルトã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã¯ Galaxy ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセスを完了ã™ã‚‹ã¾ã§å¾…機ã—ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒé€²è¡Œã™ã‚‹ã«ã¤ã‚Œã¦çµæžœã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:155 msgid "Branch" msgstr "ブランãƒ" #: ../../rst/galaxy/dev_guide.rst:157 msgid "Use the ``--branch`` option to import a specific branch. If not specified, the default branch for the repo will be used." msgstr "特定ã®ãƒ–ランãƒã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€``--branch`` オプションを使用ã—ã¾ã™ã€‚指定ã—ãªã„å ´åˆã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ‡ãƒ•ォルトブランãƒãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:160 msgid "Role name" msgstr "ロールå" #: ../../rst/galaxy/dev_guide.rst:162 msgid "By default the name given to the role will be derived from the GitHub repository name. However, you can use the ``--role-name`` option to override this and set the name." msgstr "デフォルトã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã«æŒ‡å®šã•れãŸåå‰ã¯ GitHub リãƒã‚¸ãƒˆãƒªãƒ¼åã‹ã‚‰æ´¾ç”Ÿã—ã¾ã™ãŒã€``--role-name`` オプションを使用ã—ã¦ã“れを上書ãã—ã¦åå‰ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:165 msgid "No wait" msgstr "待機ãªã—" #: ../../rst/galaxy/dev_guide.rst:167 msgid "If the ``--no-wait`` option is present, the command will not wait for results. Results of the most recent import for any of your roles is available on the Galaxy web site by visiting *My Imports*." msgstr "``--no-wait`` オプションãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€çµæžœã‚’å¾…ã¡ã¾ã›ã‚“。ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã«å¯¾ã™ã‚‹æœ€æ–°ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®çµæžœã¯ã€*My Imports* ã«ç§»å‹•ã—㦠Galaxy Web サイトã§åˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:170 msgid "Delete a role" msgstr "ロールã®å‰Šé™¤" #: ../../rst/galaxy/dev_guide.rst:172 msgid "The ``delete`` command requires that you first authenticate using the ``login`` command. Once authenticated you can remove a role from the Galaxy web site. You are only allowed to remove roles where you have access to the repository in GitHub." msgstr "``delete`` コマンドã§ã¯ã€æœ€åˆã« ``login`` コマンドを使用ã—ã¦èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚èªè¨¼ã•れるã¨ã€Galaxy Web サイトã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’削除ã§ãã¾ã™ã€‚GitHub ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるロールã®ã¿ã‚’削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:174 msgid "Use the following to delete a role:" msgstr "ロールを削除ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:180 msgid "This only removes the role from Galaxy. It does not remove or alter the actual GitHub repository." msgstr "ã“れã«ã‚ˆã‚Šã€Galaxy ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã®ã¿ãŒå‰Šé™¤ã•れã¾ã™ã€‚実際㮠GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’削除ã—ãŸã‚Šã€å¤‰æ›´ã—ãŸã‚Šã—ã¾ã›ã‚“。" #: ../../rst/galaxy/dev_guide.rst:184 msgid "Travis integrations" msgstr "Travis çµ±åˆ" #: ../../rst/galaxy/dev_guide.rst:186 msgid "You can create an integration or connection between a role in Galaxy and `Travis `_. Once the connection is established, a build in Travis will automatically trigger an import in Galaxy, updating the search index with the latest information about the role." msgstr "Galaxy 㨠`Travis `_ ã®ãƒ­ãƒ¼ãƒ«é–“ã®çµ±åˆã¾ãŸã¯ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã§ãã¾ã™ã€‚コãƒã‚¯ã‚·ãƒ§ãƒ³ãŒç¢ºç«‹ã•れるã¨ã€Travis ã®ãƒ“ルドãŒè‡ªå‹•的㫠Galaxy ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’発生ã•ã›ã€ãƒ­ãƒ¼ãƒ«ã«é–¢ã™ã‚‹æœ€æ–°æƒ…å ±ã§æ¤œç´¢ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:189 msgid "You create the integration using the ``setup`` command, but before an integration can be created, you must first authenticate using the ``login`` command; you will also need an account in Travis, and your Travis token. Once you're ready, use the following command to create the integration:" msgstr "``setup`` コマンドを使用ã—ã¦çµ±åˆã‚’作æˆã—ã¾ã™ãŒã€çµ±åˆã‚’作æˆã™ã‚‹å‰ã«ã€æœ€åˆã« ``login`` コマンドを使用ã—ã¦èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Travis ãŠã‚ˆã³ Travis トークンã«ã‚‚アカウントãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚æº–å‚™ãŒæ•´ã£ãŸã‚‰ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦çµ±åˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:196 msgid "The setup command requires your Travis token, however the token is not stored in Galaxy. It is used along with the GitHub username and repo to create a hash as described in `the Travis documentation `_. The hash is stored in Galaxy and used to verify notifications received from Travis." msgstr "setup コマンドã«ã¯ Travis トークンãŒå¿…è¦ã§ã™ãŒã€ãƒˆãƒ¼ã‚¯ãƒ³ã¯ Galaxy ã«ä¿å­˜ã•れã¦ã„ã¾ã›ã‚“。ã“れã¯ã€`the Travis documentation `_ ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€GitHub ユーザーåãŠã‚ˆã³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã¨ã¨ã‚‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚ãƒãƒƒã‚·ãƒ¥ã¯ Galaxy ã«æ ¼ç´ã•れã€Travis ã‹ã‚‰å—ä¿¡ã—ãŸé€šçŸ¥ã®æ¤œè¨¼ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:199 msgid "The setup command enables Galaxy to respond to notifications. To configure Travis to run a build on your repository and send a notification, follow the `Travis getting started guide `_." msgstr "setup コマンドを使用ã™ã‚‹ã¨ã€Galaxy ãŒé€šçŸ¥ã«å¿œç­”ã—ã¾ã™ã€‚Travis ãŒãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ãƒ“ルドを実行ã—ã€é€šçŸ¥ã‚’é€ä¿¡ã™ã‚‹ã‚ˆã†ã«è¨­å®šã™ã‚‹ã«ã¯ã€`Travis getting started guide `_ ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:202 msgid "To instruct Travis to notify Galaxy when a build completes, add the following to your .travis.yml file:" msgstr "ビルドã®å®Œäº†æ™‚ã« Galaxy ã«é€šçŸ¥ã™ã‚‹ã‚ˆã†ã« Travis ã«æŒ‡ç¤ºã™ã‚‹ã«ã¯ã€.travis.yml ファイルã«ä»¥ä¸‹ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:211 msgid "List Travis integrations" msgstr "Travis çµ±åˆã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/galaxy/dev_guide.rst:213 msgid "Use the ``--list`` option to display your Travis integrations:" msgstr "``--list`` オプションを使用ã—ã¦ã€Travis çµ±åˆã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:227 msgid "Remove Travis integrations" msgstr "Travis çµ±åˆã®å‰Šé™¤" #: ../../rst/galaxy/dev_guide.rst:229 msgid "Use the ``--remove`` option to disable and remove a Travis integration:" msgstr "``--remove`` オプションを使用ã—ã¦ã€Travis çµ±åˆã‚’無効化ãŠã‚ˆã³å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:235 msgid "Provide the ID of the integration to be disabled. You can find the ID by using the ``--list`` option." msgstr "無効ã«ã™ã‚‹çµ±åˆã® ID を指定ã—ã¾ã™ã€‚``--list`` オプションを使用ã—㦠ID を検索ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/dev_guide.rst:239 ../../rst/galaxy/user_guide.rst:486 msgid ":ref:`collections`" msgstr ":ref:`collections`" #: ../../rst/galaxy/dev_guide.rst:240 ../../rst/galaxy/user_guide.rst:487 msgid "Shareable collections of modules, playbooks and roles" msgstr "モジュールã€Playbookã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®å…±æœ‰å¯èƒ½ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/galaxy/dev_guide.rst:241 ../../rst/galaxy/user_guide.rst:488 msgid ":ref:`playbooks_reuse_roles`" msgstr ":ref:`playbooks_reuse_roles`" #: ../../rst/galaxy/dev_guide.rst:242 msgid "All about ansible roles" msgstr "Ansible ロールã«é–¢ã™ã‚‹ã™ã¹ã¦" #: ../../rst/galaxy/dev_guide.rst:243 msgid "`Mailing List `_" msgstr "`Mailing List `_" #: ../../rst/galaxy/dev_guide.rst:244 msgid "Questions? Help? Ideas? Stop by the list on Google Groups" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã‹ã€‚ã”ææ¡ˆã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google グループã®ä¸€è¦§ã‚’ã”覧ãã ã•ã„。" #: ../../rst/galaxy/dev_guide.rst:245 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/galaxy/dev_guide.rst:246 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/galaxy/user_guide.rst:6 msgid "Galaxy User Guide" msgstr "Galaxy ユーザーガイド" #: ../../rst/galaxy/user_guide.rst:8 msgid ":dfn:`Ansible Galaxy` refers to the `Galaxy `_ website, a free site for finding, downloading, and sharing community developed roles." msgstr ":dfn:`Ansible Galaxy` 㯠`Galaxy `_ ã® Web サイトをå‚ç…§ã—ã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒé–‹ç™ºã—ãŸãƒ­ãƒ¼ãƒ«ã‚’検索ã—ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã€å…±æœ‰ã™ã‚‹ãŸã‚ã®ç„¡æ–™ã‚µã‚¤ãƒˆã§ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:10 msgid "Use Galaxy to jump-start your automation project with great content from the Ansible community. Galaxy provides pre-packaged units of work such as :ref:`roles `, and new in Galaxy 3.2, :ref:`collections ` You can find roles for provisioning infrastructure, deploying applications, and all of the tasks you do everyday. The collection format provides a comprehensive package of automation that may include multiple playbooks, roles, modules, and plugins." msgstr "Galaxy を使用ã—ã¦ã€Ansible コミュニティーã®å„ªã‚ŒãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã§è‡ªå‹•化プロジェクトを活性化ã•ã›ã¾ã™ã€‚Galaxy ã¯ã€äº‹å‰ã«ãƒ‘ッケージ化ã•れãŸä½œæ¥­å˜ä½ (:ref:`ロール `ã€Galaxy 3.2 ã®æ–°æ©Ÿèƒ½ã€:ref:`コレクション ` ãªã©) ã§ãƒ•ォーマットã•れã¾ã™ã€‚インフラストラクãƒãƒ£ãƒ¼ã®ãƒ—ロビジョニングã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントã€ãŠã‚ˆã³æ—¥å¸¸çš„ã«è¡Œã†ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã®ãƒ­ãƒ¼ãƒ«ã‚’検索ã§ãã¾ã™ã€‚コレクション形å¼ã¯ã€è¤‡æ•°ã® Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインをå«ã‚€å¯èƒ½æ€§ã®ã‚る自動化ã®åŒ…括的ãªãƒ‘ッケージをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:19 msgid "Finding collections on Galaxy" msgstr "Galaxy ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¤œç´¢" #: ../../rst/galaxy/user_guide.rst:21 msgid "To find collections on Galaxy:" msgstr "Galaxy ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’検索ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:23 msgid "Click the :guilabel:`Search` icon in the left-hand navigation." msgstr "å·¦å´ã®ãƒŠãƒ“ゲーションã«ã‚ã‚‹ :guilabel:`Search` アイコンをクリックã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:24 msgid "Set the filter to *collection*." msgstr "フィルターを *collection* ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:25 msgid "Set other filters and press :guilabel:`enter`." msgstr "ä»–ã®ãƒ•ィルターを設定ã—ã€:guilabel:`enter` を押ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:27 msgid "Galaxy presents a list of collections that match your search criteria." msgstr "Galaxy ã¯ã€æ¤œç´¢æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒªã‚¹ãƒˆã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:33 msgid "Installing collections" msgstr "コレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:37 msgid "Installing a collection from Galaxy" msgstr "Galaxy ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections.txt:3 msgid "By default, ``ansible-galaxy collection install`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`). You do not need any further configuration." msgstr "デフォルトã§ã¯ã€``ansible-galaxy collection install`` 㯠https://galaxy.ansible.com ã‚’ Galaxy サーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ (:ref:`galaxy_server` ã® :file:`ansible.cfg` ファイルã«è¨˜è¼‰)。追加設定ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/shared_snippets/installing_collections.txt:7 msgid "See :ref:`Configuring the ansible-galaxy client ` if you are using any other Galaxy server, such as Red Hat Automation Hub." msgstr "Red Hat Automation Hub ãªã©ã®ä»–ã® Galaxy サーãƒãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ:ref:`ansible-galaxy クライアントã®è¨­å®š `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/installing_collections.txt:9 msgid "To install a collection hosted in Galaxy:" msgstr "Galaxy ã§ãƒ›ã‚¹ãƒˆã•れるコレクションをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:15 msgid "To upgrade a collection to the latest available version from the Galaxy server you can use the ``--upgrade`` option:" msgstr "コレクションを Galaxy サーãƒãƒ¼ã‹ã‚‰åˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã«ã¯ã€``--upgrade`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:21 msgid "You can also directly use the tarball from your build:" msgstr "ビルドã‹ã‚‰ tarball を直接使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:27 msgid "You can build and install a collection from a local source directory. The ``ansible-galaxy`` utility builds the collection using the ``MANIFEST.json`` or ``galaxy.yml`` metadata in the directory." msgstr "ローカルソースディレクトリーã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚``ansible-galaxy`` ユーティリティーã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``MANIFEST.json`` ã¾ãŸã¯ ``galaxy.yml`` メタデータを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:34 msgid "You can also install multiple collections in a namespace directory." msgstr "åå‰ç©ºé–“ディレクトリーã«è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:51 msgid "The install command automatically appends the path ``ansible_collections`` to the one specified with the ``-p`` option unless the parent directory is already in a folder called ``ansible_collections``." msgstr "install コマンドã¯ã€è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒ ``ansible_collections`` ディレクトリーã«å«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã‚’除ãã€``-p`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã—ãŸã‚‚ã®ã«ã€ãƒ‘ス ``ansible_collections`` を自動的ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:55 msgid "When using the ``-p`` option to specify the install path, use one of the values configured in :ref:`COLLECTIONS_PATHS`, as this is where Ansible itself will expect to find collections. If you don't specify a path, ``ansible-galaxy collection install`` installs the collection to the first path defined in :ref:`COLLECTIONS_PATHS`, which by default is ``~/.ansible/collections``" msgstr "``-p`` オプションを使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‘スを指定ã™ã‚‹å ´åˆã¯ã€Ansible 自体ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒäºˆæƒ³ã•れる場所ã§ã‚ã‚‹ãŸã‚ã€:ref:`COLLECTIONS_PATHS` ã«è¨­å®šã•れãŸå€¤ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¾ã™ã€‚パスを指定ã—ãªã„ã¨ã€``ansible-galaxy collection install`` ã¯ã€:ref:`COLLECTIONS_PATHS` ã§å®šç¾©ã•れã¦ã„る最åˆã®ãƒ‘スã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚ã“れã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ ``~/.ansible/collections`` ã§ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:59 msgid "You can also keep a collection adjacent to the current playbook, under a ``collections/ansible_collections/`` directory structure." msgstr "ã¾ãŸã€``collections/ansible_collections/`` ディレクトリー構造ã®ä¸‹ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ç¾åœ¨ã® Playbook ã®æ¨ªã«ç¶­æŒã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:71 msgid "See :ref:`collection_structure` for details on the collection directory structure." msgstr "コレクションディレクトリー構造ã®è©³ç´°ã¯ã€ã€Œ:ref:`collection_structure`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/user_guide.rst:44 msgid "Downloading a collection from Automation Hub" msgstr "Automation Hub ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../../rst/galaxy/user_guide.rst:46 msgid "You can download collections from Automation Hub at the command line. Automation Hub content is available to subscribers only, so you must download an API token and configure your local environment to provide it before you can you download collections. To download a collection from Automation Hub with the ``ansible-galaxy`` command:" msgstr "コマンドライン㧠Automation Hub ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã§ãã¾ã™ã€‚Automation Hub コンテンツã¯ã€ã‚µãƒ–スクライãƒãƒ¼ã®ã¿ã§åˆ©ç”¨ã§ãã‚‹ãŸã‚ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã™ã‚‹å‰ã« API トークンをダウンロードã—ã€ãƒ­ãƒ¼ã‚«ãƒ«ç’°å¢ƒã‚’設定ã—ã¦æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``ansible-galaxy`` コマンドを使用ã—㦠Automation Hub ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:48 msgid "Get your Automation Hub API token. Go to https://cloud.redhat.com/ansible/automation-hub/token/ and click :guilabel:`Get API token` from the version dropdown to copy your API token." msgstr "Automation Hub API トークンをå–å¾—ã—ã¾ã™ã€‚https://cloud.redhat.com/ansible/automation-hub/token/ ã«ç§»å‹•ã—ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒ‰ãƒ­ãƒƒãƒ—ダウン㮠:guilabel:`Get API token` をクリックã—㦠API トークンをコピーã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:49 msgid "Configure Red Hat Automation Hub server in the ``server_list`` option under the ``[galaxy]`` section in your :file:`ansible.cfg` file." msgstr ":file:`ansible.cfg` ファイル㮠``[galaxy]`` セクションã§ã€``server_list`` オプション㧠Red Hat Automation Hub サーãƒãƒ¼ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:61 msgid "Download the collection hosted in Automation Hub." msgstr "Automation Hub ã§ãƒ›ã‚¹ãƒˆã•れるコレクションをダウンロードã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:68 msgid "`Getting started with Automation Hub `_" msgstr "`Getting started with Automation Hub `_" #: ../../rst/galaxy/user_guide.rst:69 msgid "An introduction to Automation Hub" msgstr "Automation Hub ã®æ¦‚è¦" #: ../../rst/galaxy/user_guide.rst:72 msgid "Installing an older version of a collection" msgstr "å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_older_collection.txt:2 msgid "You can only have one version of a collection installed at a time. By default ``ansible-galaxy`` installs the latest available version. If you want to install a specific version, you can add a version range identifier. For example, to install the 1.0.0-beta.1 version of the collection:" msgstr "一度ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ 1 ã¤ã ã‘ã§ã™ã€‚デフォルトã§ã¯ã€``ansible-galaxy`` ã«ã‚ˆã‚Šåˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç¯„囲識別å­ã‚’追加ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® 1.0.0-beta.1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:8 msgid "You can specify multiple range identifiers separated by ``,``. Use single quotes so the shell passes the entire command, including ``>``, ``!``, and other operators, along. For example, to install the most recent version that is greater than or equal to 1.0.0 and less than 2.0.0:" msgstr "``,`` ã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ç¯„囲識別å­ã‚’指定ã§ãã¾ã™ã€‚シェルãŒã€``>``ã€``!``ã€ãŠã‚ˆã³ãã®ä»–ã®æ¼”ç®—å­ã‚’å«ã‚€ã‚³ãƒžãƒ³ãƒ‰å…¨ä½“を渡ã™ã‚ˆã†ã«ã€ä¸€é‡å¼•用符を使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€1.0.0 以上 2.0.0 æœªæº€ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:14 msgid "Ansible will always install the most recent version that meets the range identifiers you specify. You can use the following range identifiers:" msgstr "Ansible ã¯ã€æŒ‡å®šã™ã‚‹ç¯„囲識別å­ã‚’満ãŸã™æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’常ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚以下ã®ç¯„囲識別å­ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:16 msgid "``*``: The most recent version. This is the default." msgstr "``*``: 最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚ã“れãŒãƒ‡ãƒ•ォルトã§ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:17 msgid "``!=``: Not equal to the version specified." msgstr "``!=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨åŒç­‰ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/shared_snippets/installing_older_collection.txt:18 msgid "``==``: Exactly the version specified." msgstr "``==``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ãã®ã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:19 msgid "``>=``: Greater than or equal to the version specified." msgstr "``>=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸Šã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:20 msgid "``>``: Greater than the version specified." msgstr "``>``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚大ãããªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:21 msgid "``<=``: Less than or equal to the version specified." msgstr "``<=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:22 msgid "``<``: Less than the version specified." msgstr "``<``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚å°ã•ããªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:25 msgid "By default ``ansible-galaxy`` ignores pre-release versions. To install a pre-release version, you must use the ``==`` range identifier to require it explicitly." msgstr "デフォルトã§ã¯ã€``ansible-galaxy`` ã¯ãƒªãƒªãƒ¼ã‚¹å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’無視ã—ã¾ã™ã€‚リリースå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€``==`` 範囲識別å­ã‚’使用ã—ã¦æ˜Žç¤ºçš„ã«è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:77 msgid "Install multiple collections with a requirements file" msgstr "è¦ä»¶ãƒ•ァイルを使用ã—ãŸè¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_multiple_collections.txt:2 msgid "You can set up a ``requirements.yml`` file to install multiple collections in one command. This file is a YAML file in the format:" msgstr "``requirements.yml`` ファイルを設定ã—ã¦ã€1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ä»¥ä¸‹ã®å½¢å¼ã® YAML ファイルã§ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:16 msgid "You can specify four keys for each collection entry:" msgstr "å„コレクションエントリー㫠4 ã¤ã®ã‚­ãƒ¼ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:18 msgid "``name``" msgstr "``name``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:19 msgid "``version``" msgstr "``version``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:20 msgid "``source``" msgstr "``source``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:21 msgid "``type``" msgstr "``type``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:23 msgid "The ``version`` key uses the same range identifier format documented in :ref:`collections_older_version`." msgstr "``version`` キーã¯ã€:ref:`collections_older_version` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹ã‚‚ã®ã¨åŒã˜ç¯„囲識別å­å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:25 msgid "The ``type`` key can be set to ``galaxy``, ``url``, ``file``, and ``git``. If ``type`` is omitted, the ``name`` key is used to implicitly determine the source of the collection." msgstr "``type`` キー㯠``galaxy``ã€``url``ã€``file``ã€ãŠã‚ˆã³ ``git`` ã«è¨­å®šã§ãã¾ã™ã€‚``type`` ã‚’çœç•¥ã™ã‚‹ã¨ã€``name`` キーを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚½ãƒ¼ã‚¹ã‚’æš—é»™çš„ã«æ±ºå®šã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:27 msgid "When you install a collection with ``type: git``, the ``version`` key can refer to a branch or to a `git commit-ish `_ object (commit or tag). For example:" msgstr "``type: git`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã€``version`` キーã¯ãƒ–ランãƒã¾ãŸã¯ `git commit-ish `_ オブジェクト(コミットã¾ãŸã¯ã‚¿ã‚°ï¼‰ã‚’å‚ç…§ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:36 msgid "You can also add roles to a ``requirements.yml`` file, under the ``roles`` key. The values follow the same format as a requirements file used in older Ansible releases." msgstr "``roles``キーã®ä¸‹ã«ã‚ã‚‹``requirements.yml``ファイルã«ãƒ­ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å€¤ã¯ã€å¤ã„ Ansible リリースã§ä½¿ç”¨ã•れるè¦ä»¶ãƒ•ァイルã¨åŒã˜å½¢å¼ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:52 msgid "To install both roles and collections at the same time with one command, run the following:" msgstr "1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã€ãƒ­ãƒ¼ãƒ«ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’åŒæ™‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:58 msgid "Running ``ansible-galaxy collection install -r`` or ``ansible-galaxy role install -r`` will only install collections, or roles respectively." msgstr "``ansible-galaxy collection install -r`` ã¾ãŸã¯ ``ansible-galaxy role install -r`` を実行ã™ã‚‹ã¨ã€ãれãžã‚Œã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:61 msgid "Installing both roles and collections from the same requirements file will not work when specifying a custom collection or role install path. In this scenario the collections will be skipped and the command will process each like ``ansible-galaxy role install`` would." msgstr "カスタムコレクションã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‘スを指定ã™ã‚‹å ´åˆã€åŒã˜è¦ä»¶ãƒ•ァイルã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã‚’インストールã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。今回ã®ä¾‹ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯çœç•¥ã•れã€ã‚³ãƒžãƒ³ãƒ‰ã¯ ``ansible-galaxy role install`` ã®ã‚ˆã†ã«å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:82 msgid "Downloading a collection for offline use" msgstr "オフラインã§ä½¿ç”¨ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../../rst/shared_snippets/download_tarball_collections.txt:3 msgid "To download the collection tarball from Galaxy for offline use:" msgstr "オフラインã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ tarball ã‚’ Galaxy ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:5 msgid "Navigate to the collection page." msgstr "コレクションページã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:6 msgid "Click on :guilabel:`Download tarball`." msgstr ":guilabel:`Download tarball` をクリックã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:8 msgid "You may also need to manually download any dependent collections." msgstr "ã¾ãŸã€ä¾å­˜ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’手動ã§ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:87 msgid "Installing a collection from a git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:1 msgid "You can install a collection from a git repository instead of from Galaxy or Automation Hub. As a developer, installing from a git repository lets you review your collection before you create the tarball and publish the collection. As a user, installing from a git repository lets you use collections or versions that are not in Galaxy or Automation Hub yet." msgstr "コレクションã¯ã€Galaxy ã¾ãŸã¯ Automation Hub ã®ä»£ã‚り㫠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚開発者ã¯ã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€tarball を作æˆã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’確èªã§ãã¾ã™ã€‚ユーザーã¨ã—㦠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€Galaxy ã¾ãŸã¯ Automation Hub ã«ãªã„コレクションã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:3 msgid "The repository must contain a ``galaxy.yml`` or ``MANIFEST.json`` file. This file provides metadata such as the version number and namespace of the collection." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã€namespace ãªã©ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:6 msgid "Installing a collection from a git repository at the command line" msgstr "コマンドガイド㧠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:8 msgid "To install a collection from a git repository at the command line, use the URI of the repository instead of a collection name or path to a ``tar.gz`` file. Prefix the URI with ``git+`` (or with ``git@`` to use a private repository with ssh authentication). You can specify a branch, commit, or tag using the comma-separated `git commit-ish `_ syntax." msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¾ãŸã¯ ``tar.gz`` ファイルã¸ã®ãƒ‘スã§ã¯ãªãã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã® URI を使用ã—ã¾ã™ã€‚``git+`` を使用ã—㦠URI をプレフィックスã—ã¾ã™ï¼ˆã¾ãŸã¯ ``git@`` を使用ã—ã¦ã€ssh èªè¨¼ã§ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ï¼‰ã€‚コンマ区切り㮠`git commit-ish `_ 構文を使用ã—ã¦ã€ãƒ–ランãƒã€ã‚³ãƒŸãƒƒãƒˆã€ã¾ãŸã¯ã‚¿ã‚°ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:10 msgid "For example:" msgstr "例:" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:25 msgid "Embedding credentials into a git URI is not secure. Use safe authentication options to prevent your credentials from being exposed in logs or elsewhere." msgstr "èªè¨¼æƒ…報を git URI ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。安全ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ã€èªè¨¼æƒ…å ±ãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:27 msgid "Use `SSH `_ authentication" msgstr "`SSH `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:28 msgid "Use `netrc `_ authentication" msgstr "`netrc `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:29 msgid "Use `http.extraHeader `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`http.extraHeader `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:30 msgid "Use `url..pushInsteadOf `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`url..pushInsteadOf `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:33 msgid "Specifying the collection location within the git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼å†…ã§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å ´æ‰€ã®æŒ‡å®š" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:35 msgid "When you install a collection from a git repository, Ansible uses the collection ``galaxy.yml`` or ``MANIFEST.json`` metadata file to build the collection. By default, Ansible searches two paths for collection ``galaxy.yml`` or ``MANIFEST.json`` metadata files:" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイルを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイル㮠2 ã¤ã®ãƒ‘スを検索ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:37 msgid "The top level of the repository." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベル。" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:38 msgid "Each directory in the repository path (one level deep)." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内ã®å„ディレクトリー(1 ãƒ¬ãƒ™ãƒ«ã®æ·±ã•)" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:40 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in the top level of the repository, Ansible uses the collection metadata in that file to install an individual collection." msgstr "``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベルã«ã‚ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイル内ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:51 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in one or more directories in the repository path (one level deep), Ansible installs each directory with a metadata file as a collection. For example, Ansible installs both collection1 and collection2 from this repository structure by default:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内㮠1 ã¤ä»¥ä¸Šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ã¯ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルをæŒã¤å„ディレクトリーをコレクションã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible ã¯ã€ãƒ‡ãƒ•ォルトã§ã€ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ§‹é€ ã‹ã‚‰ collection1 㨠collection2 ã®ä¸¡æ–¹ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:69 msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate the location of the metadata file or files. The path should be a directory, not the metadata file itself. For example, to install only collection2 from the example repository with two collections:" msgstr "リãƒã‚¸ãƒˆãƒªæ§‹é€ ãŒç•°ãªã‚‹å ´åˆã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒ–セットã®ã¿ã‚’インストールã™ã‚‹å ´åˆã¯ã€URI ã®æœ«å°¾ï¼ˆã‚ªãƒ—ションã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰ï¼‰ã«ãƒ•ラグメントを追加ã—ã¦ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã®å ´æ‰€ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイル自体ã§ã¯ãªãã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€2ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æŒã¤ã‚µãƒ³ãƒ—ルリãƒã‚¸ãƒˆãƒªã‹ã‚‰collection2ã®ã¿ã‚’インストールã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:75 msgid "In some repositories, the main directory corresponds to the namespace:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ˆã£ã¦ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯åå‰ç©ºé–“ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:97 msgid "You can install all collections in this repository, or install one collection from a specific commit:" msgstr "ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã‹ã€ç‰¹å®šã®ã‚³ãƒŸãƒƒãƒˆã‹ã‚‰ 1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:92 msgid "Listing installed collections" msgstr "インストール済ã¿ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/galaxy/user_guide.rst:94 msgid "To list installed collections, run ``ansible-galaxy collection list``. See :ref:`collections_listing` for more details." msgstr "インストール済ã¿ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’一覧表示ã™ã‚‹ã«ã¯ã€``ansible-galaxy collection list`` を実行ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`collections_listing`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/user_guide.rst:98 msgid "Configuring the ``ansible-galaxy`` client" msgstr "``ansible-galaxy`` クライアントã®è¨­å®š" #: ../../rst/shared_snippets/galaxy_server_list.txt:3 msgid "By default, ``ansible-galaxy`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`)." msgstr "デフォルトã§ã¯ã€``ansible-galaxy`` 㯠https://galaxy.ansible.com ã‚’ Galaxy サーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ (:ref:`galaxy_server` ã® :file:`ansible.cfg` ファイルã«è¨˜è¼‰)。" #: ../../rst/shared_snippets/galaxy_server_list.txt:5 msgid "You can use either option below to configure ``ansible-galaxy collection`` to use other servers (such as Red Hat Automation Hub or a custom Galaxy server):" msgstr "以下ã®ã‚ªãƒ—ションを使用ã—ã¦ã€ä»–ã®ã‚µãƒ¼ãƒãƒ¼ (Red Hat Automation Hubã€ã‚«ã‚¹ã‚¿ãƒ ã® Galaxy サーãƒãƒ¼ãªã©) を使用ã™ã‚‹ã‚ˆã†ã« ``ansible-galaxy collection`` を設定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:7 msgid "Set the server list in the :ref:`galaxy_server_list` configuration option in :ref:`ansible_configuration_settings_locations`." msgstr ":ref:`ansible_configuration_settings_locations` ã® :ref:`galaxy_server_list` 設定オプションã«ã‚µãƒ¼ãƒãƒ¼ãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:8 msgid "Use the ``--server`` command line argument to limit to an individual server." msgstr "``--server`` コマンドライン引数を使用ã—ã¦ã€å€‹ã€…ã®ã‚µãƒ¼ãƒãƒ¼ã«åˆ¶é™ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:10 msgid "To configure a Galaxy server list in ``ansible.cfg``:" msgstr "``ansible.cfg`` ã§ Galaxy サーãƒãƒ¼ä¸€è¦§ã‚’設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:13 msgid "Add the ``server_list`` option under the ``[galaxy]`` section to one or more server names." msgstr "``server_list`` セクション㮠``[galaxy]`` オプションを 1 ã¤ä»¥ä¸Šã®ã‚µãƒ¼ãƒãƒ¼åã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:14 msgid "Create a new section for each server name." msgstr "å„サーãƒãƒ¼åã«æ–°ã—ã„セクションを作æˆã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:15 msgid "Set the ``url`` option for each server name." msgstr "å„サーãƒãƒ¼åã« ``url`` オプションを設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:16 msgid "Optionally, set the API token for each server name. Go to https://galaxy.ansible.com/me/preferences and click :guilabel:`Show API key`." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€å„サーãƒãƒ¼åã® API トークンを設定ã—ã¾ã™ã€‚https://galaxy.ansible.com/me/preferences ã«ç§»å‹•ã—ã€guilabel:`Show API key` をクリックã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:19 msgid "The ``url`` option for each server name must end with a forward slash ``/``. If you do not set the API token in your Galaxy server list, use the ``--api-key`` argument to pass in the token to the ``ansible-galaxy collection publish`` command." msgstr "å„サーãƒãƒ¼åã® ``url`` オプションã¯ã€ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ ``/`` ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Galaxy サーãƒãƒ¼ä¸€è¦§ã® API トークンを設定ã—ãªã„å ´åˆã¯ã€``--api-key`` 引数を使用ã—ã¦ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ ``ansible-galaxy collection publish`` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:21 msgid "For Automation Hub, you additionally need to:" msgstr "Automation Hub ã®å ´åˆã«ã¯ã€ã•らã«ä»¥ä¸‹ã®æ“作ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:23 msgid "Set the ``auth_url`` option for each server name." msgstr "å„サーãƒãƒ¼åã« ``auth_url`` オプションを設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:24 msgid "Set the API token for each server name. Go to https://cloud.redhat.com/ansible/automation-hub/token/ and click ::guilabel:`Get API token` from the version dropdown to copy your API token." msgstr "å„サーãƒãƒ¼åã® API トークンを設定ã—ã¾ã™ã€‚https://cloud.redhat.com/ansible/automation-hub/token/ ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒ‰ãƒ­ãƒƒãƒ—ダウンリストã‹ã‚‰ ::guilabel:`Get API token` をクリックã—㦠API トークンをコピーã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:26 msgid "The following example shows how to configure multiple servers:" msgstr "以下ã®ä¾‹ã¯ã€è¤‡æ•°ã®ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:58 msgid "You can use the ``--server`` command line argument to select an explicit Galaxy server in the ``server_list`` and the value of this argument should match the name of the server. To use a server not in the server list, set the value to the URL to access that server (all servers in the server list will be ignored). Also you cannot use the ``--api-key`` argument for any of the predefined servers. You can only use the ``api_key`` argument if you did not define a server list or if you specify a URL in the ``--server`` argument." msgstr "``--server`` コマンドライン引数を使用ã—㦠``server_list`` ã§æ˜Žç¤ºçš„㪠Galaxy サーãƒãƒ¼ã‚’é¸æŠžã—ã€ã“ã®å¼•æ•°ã®å€¤ã¯ã‚µãƒ¼ãƒãƒ¼åã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚サーãƒãƒ¼ä¸€è¦§ã«ãªã„サーãƒãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãã®ã‚µãƒ¼ãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ URL ã«å€¤ã‚’設定ã—ã¾ã™ (サーãƒãƒ¼ãƒªã‚¹ãƒˆå†…ã®ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã¯ç„¡è¦–ã•れã¾ã™)。ã¾ãŸã€äº‹å‰å®šç¾©ã•れãŸã‚µãƒ¼ãƒãƒ¼ã®ã„ãšã‚Œã‹ã« ``--api-key`` 引数を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã®ä¸€è¦§ã‚’定義ã—ã¦ã„ãªã„å ´åˆã€ã¾ãŸã¯ ``--server`` ã« URL を指定ã—ãŸå ´åˆé™ã‚Šã€``api_key`` 引数を使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:62 msgid "**Galaxy server list configuration options**" msgstr "**Galaxy サーãƒãƒ¼ä¸€è¦§è¨­å®šã‚ªãƒ—ション**" #: ../../rst/shared_snippets/galaxy_server_list.txt:64 msgid "The :ref:`galaxy_server_list` option is a list of server identifiers in a prioritized order. When searching for a collection, the install process will search in that order, for example, ``automation_hub`` first, then ``my_org_hub``, ``release_galaxy``, and finally ``test_galaxy`` until the collection is found. The actual Galaxy instance is then defined under the section ``[galaxy_server.{{ id }}]`` where ``{{ id }}`` is the server identifier defined in the list. This section can then define the following keys:" msgstr ":ref:`galaxy_server_list` オプションã¯ã€å„ªå…ˆé †ä½ãŒä»˜ã‘られãŸã‚µãƒ¼ãƒãƒ¼è­˜åˆ¥å­ã®ä¸€è¦§ã§ã™ã€‚コレクションを検索ã™ã‚‹å ´åˆã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ—ãƒ­ã‚»ã‚¹ã¯æ¬¡ã®é †åºã§æ¤œç´¢ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``automation_hub`` を検索ã—ã¦ã‹ã‚‰ã€``my_org_hub``ã€``release_galaxy``ã€æœ€å¾Œã« ``test_galaxy`` ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚‹ã¾ã§è¡Œã„ã¾ã™ã€‚次ã«ã€å®Ÿéš›ã® Galaxy インスタンス㌠``[galaxy_server.{{ id }}]`` セクションã§å®šç¾©ã•れã¾ã™ã€‚``{{ id }}`` ã¯ã€ä¸€è¦§ã§å®šç¾©ã•れã¦ã„るサーãƒãƒ¼è­˜åˆ¥å­ã§ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€æ¬¡ã®ã‚­ãƒ¼ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:70 msgid "``url``: The URL of the Galaxy instance to connect to. Required." msgstr "``url``: 接続ã™ã‚‹ Galaxy インスタンス㮠URL。必須。" #: ../../rst/shared_snippets/galaxy_server_list.txt:71 msgid "``token``: An API token key to use for authentication against the Galaxy instance. Mutually exclusive with ``username``." msgstr "``token``: Galaxy インスタンスã«å¯¾ã™ã‚‹èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ API トークンキー。``username`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:72 msgid "``username``: The username to use for basic authentication against the Galaxy instance. Mutually exclusive with ``token``." msgstr "``username``: Galaxy インスタンスã«å¯¾ã™ã‚‹ Basic èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å。``token`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:73 msgid "``password``: The password to use, in conjunction with ``username``, for basic authentication." msgstr "``password``: Basic èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワード。``username`` ã¨ä½µç”¨ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:74 msgid "``auth_url``: The URL of a Keycloak server 'token_endpoint' if using SSO authentication (for example, Automation Hub). Mutually exclusive with ``username``. Requires ``token``." msgstr "``auth_url``: SSO èªè¨¼ (例: Automation Hub) を使用ã™ã‚‹å ´åˆã¯ Keycloak サーãƒãƒ¼ã€Œtoken_endpointã€ã® URL ã§ã™ã€‚``username`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚``token`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:75 msgid "``validate_certs``: Whether or not to verify TLS certificates for the Galaxy server. This defaults to True unless the ``--ignore-certs`` option is provided or ``GALAXY_IGNORE_CERTS`` is configured to True." msgstr "``validate_certs``: Galaxy サーãƒãƒ¼ã® TLS 証明書を検証ã™ã‚‹ã‹ã©ã†ã‹ã€‚ã“れã¯ã€``--ignore-certs`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæä¾›ã•れるã‹ã€``GALAXY_IGNORE_CERTS`` ㌠True ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã‚’除ãã€ãƒ‡ãƒ•ォルト㧠True ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:76 msgid "``client_id``: The Keycloak token's client_id to use for authentication. Requires ``auth_url`` and ``token``. The default ``client_id`` is cloud-services to work with Red Hat SSO." msgstr "``client_id``: èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ Keycloak トークン㮠client_id。``auth_url`` ãŠã‚ˆã³ ``token`` ãŒå¿…è¦ã§ã™ã€‚デフォルト㮠``client_id`` ã¯ã€Red Hat SSO ã¨é€£æºã™ã‚‹ã‚¯ãƒ©ã‚¦ãƒ‰ã‚µãƒ¼ãƒ“スã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:78 msgid "As well as defining these server options in the ``ansible.cfg`` file, you can also define them as environment variables. The environment variable is in the form ``ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}`` where ``{{ id }}`` is the upper case form of the server identifier and ``{{ key }}`` is the key to define. For example I can define ``token`` for ``release_galaxy`` by setting ``ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token``." msgstr "ã“れらã®ã‚µãƒ¼ãƒãƒ¼ã‚ªãƒ—ションを ``ansible.cfg`` ファイルã§å®šç¾©ã™ã‚‹ã ã‘ã§ãªãã€ãれらを環境変数ã¨ã—ã¦å®šç¾©ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚環境変数㯠``ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}`` ã®å½¢å¼ã§ã™ã€‚``{{ id }}`` ã¯ã‚µãƒ¼ãƒãƒ¼è­˜åˆ¥å­ã®å¤§æ–‡å­—å½¢å¼ã§ã‚りã€``{{ key }}`` ã¯å®šç¾©ã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚ãŸã¨ãˆã°ã€``ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token`` を設定ã™ã‚‹ã“ã¨ã§ã€``release_galaxy`` ã« ``token`` を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:83 msgid "For operations that use only one Galaxy server (for example, the ``publish``, ``info``, or ``install`` commands). the ``ansible-galaxy collection`` command uses the first entry in the ``server_list``, unless you pass in an explicit server with the ``--server`` argument." msgstr "Galaxy サーãƒãƒ¼ 1 ã¤ã ã‘を使用ã™ã‚‹æ“作 (例: ``publish`` コマンドã€``info`` コマンドã€ã¾ãŸã¯ ``install`` コマンド) ã®å ´åˆã€``ansible-galaxy collection`` コマンドã¯ã€``--server`` 引数を使用ã—ã¦æ˜Žç¤ºçš„ãªã‚µãƒ¼ãƒãƒ¼ã«æ¸¡ã—ãªã„é™ã‚Šã€``server_list`` ã®æœ€åˆã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:87 msgid "Once a collection is found, any of its requirements are only searched within the same Galaxy instance as the parent collection. The install process will not search for a collection requirement in a different Galaxy instance." msgstr "コレクションãŒè¦‹ã¤ã‹ã‚‹ã¨ã€ãã®è¦ä»¶ã¯è¦ªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨åŒã˜ Galaxy インスタンス内ã§ã®ã¿æ¤œç´¢ã•れã¾ã™ã€‚インストールプロセスã§ã¯ã€åˆ¥ã® Galaxy インスタンスã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³è¦ä»¶ã‚’検索ã—ã¾ã›ã‚“。" #: ../../rst/galaxy/user_guide.rst:105 msgid "Finding roles on Galaxy" msgstr "Galaxy ã§ã®ãƒ­ãƒ¼ãƒ«ã®æ¤œç´¢" #: ../../rst/galaxy/user_guide.rst:107 msgid "Search the Galaxy database by tags, platforms, author and multiple keywords. For example:" msgstr "Galaxy データベースã¯ã€ã‚¿ã‚°ã€ãƒ—ラットフォームã€ä½œæˆè€…ã€ãŠã‚ˆã³è¤‡æ•°ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§æ¤œç´¢ã—ã¾ã™ã€‚以下ã¯ä¾‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:113 msgid "The search command will return a list of the first 1000 results matching your search:" msgstr "search コマンドã¯ã€æ¤œç´¢ã«ä¸€è‡´ã™ã‚‹æœ€åˆã® 1000 個ã®çµæžœã‚’一覧ã§è¿”ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:126 msgid "Get more information about a role" msgstr "ロールã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã®å–å¾—" #: ../../rst/galaxy/user_guide.rst:128 msgid "Use the ``info`` command to view more detail about a specific role:" msgstr "``info`` コマンドを使用ã—ã¦ã€ç‰¹å®šã®ãƒ­ãƒ¼ãƒ«ã«é–¢ã™ã‚‹è©³ç´°ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:134 msgid "This returns everything found in Galaxy for the role:" msgstr "ã“れã¯ã€ãƒ­ãƒ¼ãƒ«ã® Galaxy ã«ã‚ã‚‹ã™ã¹ã¦ã®ã‚‚ã®ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:171 msgid "Installing roles from Galaxy" msgstr "Galaxy ã‹ã‚‰ã®ãƒ­ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:173 msgid "The ``ansible-galaxy`` command comes bundled with Ansible, and you can use it to install roles from Galaxy or directly from a git based SCM. You can also use it to create a new role, remove roles, or perform tasks on the Galaxy website." msgstr "``ansible-galaxy`` コマンド㯠Ansible ã¨ãƒãƒ³ãƒ‰ãƒ«ã•れã€Galaxy ã‹ã‚‰ã€ã¾ãŸã¯ git ベース㮠SCM ã‹ã‚‰ç›´æŽ¥ãƒ­ãƒ¼ãƒ«ã‚’インストールã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ã¾ãŸã€æ–°ã—ã„ロールã®ä½œæˆã€ãƒ­ãƒ¼ãƒ«ã®å‰Šé™¤ã€ã¾ãŸã¯ Galaxy ã® Web サイトã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:176 msgid "The command line tool by default communicates with the Galaxy website API using the server address *https://galaxy.ansible.com*. If you run your own internal Galaxy server and want to use it instead of the default one, pass the ``--server`` option following the address of this galaxy server. You can set permanently this option by setting the Galaxy server value in your ``ansible.cfg`` file to use it . For information on setting the value in *ansible.cfg* see :ref:`galaxy_server`." msgstr "コマンドラインツールã¯ã€ãƒ‡ãƒ•ォルトã§ã‚µãƒ¼ãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ *https://galaxy.ansible.com* を使用ã—㦠Galaxy Web サイト API ã¨é€šä¿¡ã—ã¾ã™ã€‚独自ã®å†…部 Galaxy サーãƒãƒ¼ã‚’実行ã—ã¦ã„ã¦ã€ãƒ‡ãƒ•ォルトã®ã‚µãƒ¼ãƒãƒ¼ã®ä»£ã‚りã«ãれを使用ã—ãŸã„å ´åˆã¯ã€ã“ã® galaxy サーãƒãƒ¼ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¾Œã« ``--server`` オプションを渡ã—ã¾ã™ã€‚``ansible.cfg`` ファイル㫠Galaxy サーãƒãƒ¼ã®å€¤ã‚’設定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã“ã®ã‚ªãƒ—ションを永続的ã«è¨­å®šã§ãã¾ã™ã€‚*ansible.cfg* ã§ã®å€¤ã®è¨­å®šã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`galaxy_server`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/user_guide.rst:182 msgid "Installing roles" msgstr "ロールã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:184 msgid "Use the ``ansible-galaxy`` command to download roles from the `Galaxy website `_" msgstr "``ansible-galaxy`` コマンドを使用ã—ã¦ã€`Galaxy website `_ ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’ダウンロードã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:191 msgid "Setting where to install roles" msgstr "ロールをインストールã™ã‚‹å ´æ‰€ã®è¨­å®š" #: ../../rst/galaxy/user_guide.rst:193 msgid "By default, Ansible downloads roles to the first writable directory in the default list of paths ``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``. This installs roles in the home directory of the user running ``ansible-galaxy``." msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ‘スã®ãƒ‡ãƒ•ォルトリスト ``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles`` ã«ã‚る最åˆã«æ›¸ãè¾¼ã¿å¯èƒ½ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ­ãƒ¼ãƒ«ã‚’ダウンロードã—ã¾ã™ã€‚ã“れã¯ã€``ansible-galaxy`` を実行ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ­ãƒ¼ãƒ«ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:195 msgid "You can override this with one of the following options:" msgstr "ã“れã¯ã€ä»¥ä¸‹ã®ã‚ªãƒ—ションã®ã„ãšã‚Œã‹ã§ä¸Šæ›¸ãã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:197 msgid "Set the environment variable :envvar:`ANSIBLE_ROLES_PATH` in your session." msgstr "セッションã§ç’°å¢ƒå¤‰æ•° :envvar:`ANSIBLE_ROLES_PATH` を設定ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:198 msgid "Use the ``--roles-path`` option for the ``ansible-galaxy`` command." msgstr "``--roles-path`` コマンド㫠``ansible-galaxy`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:199 msgid "Define ``roles_path`` in an ``ansible.cfg`` file." msgstr "``ansible.cfg`` ファイル㧠``roles_path`` を定義ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:201 msgid "The following provides an example of using ``--roles-path`` to install the role into the current working directory:" msgstr "以下ã¯ã€``--roles-path`` を使用ã—ã¦ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ­ãƒ¼ãƒ«ã‚’インストールã™ã‚‹ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:209 msgid ":ref:`intro_configuration`" msgstr ":ref:`intro_configuration`" #: ../../rst/galaxy/user_guide.rst:210 msgid "All about configuration files" msgstr "設定ファイルã«é–¢ã™ã‚‹ã™ã¹ã¦" #: ../../rst/galaxy/user_guide.rst:213 msgid "Installing a specific version of a role" msgstr "ロールã®ç‰¹å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:215 msgid "When the Galaxy server imports a role, it imports any git tags matching the `Semantic Version `_ format as versions. In turn, you can download a specific version of a role by specifying one of the imported tags." msgstr "Galaxy サーãƒãƒ¼ãŒãƒ­ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€`Semantic Version `_ å½¢å¼ã«ä¸€è‡´ã™ã‚‹ git ã‚¿ã‚°ãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¾ã™ã€‚次ã«ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚¿ã‚°ã®ã„ãšã‚Œã‹ã‚’指定ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã®ç‰¹å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:218 msgid "To see the available versions for a role:" msgstr "ロールã§åˆ©ç”¨å¯èƒ½ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:220 msgid "Locate the role on the Galaxy search page." msgstr "Galaxy 検索ページã§ãƒ­ãƒ¼ãƒ«ã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:221 msgid "Click on the name to view more details, including the available versions." msgstr "利用å¯èƒ½ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã€åå‰ã‚’クリックã—ã¦è©³ç´°æƒ…報を表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:223 msgid "You can also navigate directly to the role using the //. For example, to view the role geerlingguy.apache, go to ``_." msgstr "// を使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã«ç›´æŽ¥ç§»å‹•ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€geerlingguy.apache ロールを表示ã™ã‚‹ã«ã¯ã€``_ ã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:225 msgid "To install a specific version of a role from Galaxy, append a comma and the value of a GitHub release tag. For example:" msgstr "Galaxy ã‹ã‚‰ç‰¹å®šã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ­ãƒ¼ãƒ«ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒžã¨ GitHub リリースタグã®å€¤ã‚’追加ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:231 msgid "It is also possible to point directly to the git repository and specify a branch name or commit hash as the version. For example, the following will install a specific commit:" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’直接å‚ç…§ã—ã¦ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã—ã¦ãƒ–ランãƒåã¾ãŸã¯ã‚³ãƒŸãƒƒãƒˆãƒãƒƒã‚·ãƒ¥ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã¯ç‰¹å®šã®ã‚³ãƒŸãƒƒãƒˆã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:239 msgid "Installing multiple roles from a file" msgstr "ファイルã‹ã‚‰ã®è¤‡æ•°ãƒ­ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:241 msgid "You can install multiple roles by including the roles in a :file:`requirements.yml` file. The format of the file is YAML, and the file extension must be either *.yml* or *.yaml*." msgstr ":file:`requirements.yml` ファイルã«ãƒ­ãƒ¼ãƒ«ã‚’追加ã—ã¦ã€è¤‡æ•°ã®ãƒ­ãƒ¼ãƒ«ã‚’インストールã§ãã¾ã™ã€‚ファイルã®ãƒ•ォーマット㯠YAML ã§ã€ãƒ•ァイル拡張å­ã¯ *.yml* ã¾ãŸã¯ *.yaml* ã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/galaxy/user_guide.rst:244 msgid "Use the following command to install roles included in :file:`requirements.yml:`" msgstr "以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦ã€:file:`requirements.yml:` ã«å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:250 msgid "Again, the extension is important. If the *.yml* extension is left off, the ``ansible-galaxy`` CLI assumes the file is in an older, now deprecated, \"basic\" format." msgstr "æ‹¡å¼µå­ã¯é‡è¦ã§ã™ã€‚*.yml* æ‹¡å¼µå­ãŒã‚ªãƒ•ã®ã¾ã¾ã®å ´åˆã€``ansible-galaxy`` CLI ã¯ã€ãƒ•ァイルãŒå¤ã„ã‚‚ã®ã¨è¦‹ãªã—ã€ã€Œbasicã€ãƒ•ォーマットãŒéžæŽ¨å¥¨ã§ã‚ã‚‹ã¨æƒ³å®šã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:253 msgid "Each role in the file will have one or more of the following attributes:" msgstr "ã“ã®ãƒ•ァイルã®å„ロールã«ã¯ã€ä»¥ä¸‹ã®å±žæ€§ãŒ 1 ã¤ä»¥ä¸Šã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:256 msgid "src" msgstr "src" #: ../../rst/galaxy/user_guide.rst:256 msgid "The source of the role. Use the format *namespace.role_name*, if downloading from Galaxy; otherwise, provide a URL pointing to a repository within a git based SCM. See the examples below. This is a required attribute." msgstr "ロールã®ã‚½ãƒ¼ã‚¹ã€‚Galaxy ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å ´åˆã¯ã€*namespace.role_name* ã®å½¢å¼ã‚’使用ã—ã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€git ベース㮠SCM 内ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’å‚ç…§ã™ã‚‹ URL ã‚’æä¾›ã—ã¾ã™ã€‚以下をå‚ç…§ã—ã¦ãã ã•ã„。ã“れã¯å¿…須属性ã§ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:258 msgid "scm" msgstr "scm" #: ../../rst/galaxy/user_guide.rst:259 msgid "Specify the SCM. As of this writing only *git* or *hg* are allowed. See the examples below. Defaults to *git*." msgstr "SCM を指定ã—ã¾ã™ã€‚本書ã®ä½œæˆæ™‚点ã§ã¯ã€*git* ã¾ãŸã¯ *hg* ã¸ã®æ›¸ãè¾¼ã¿ã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚以下ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。デフォルト㯠*git* ã§ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:260 msgid "version:" msgstr "version:" #: ../../rst/galaxy/user_guide.rst:261 msgid "The version of the role to download. Provide a release tag value, commit hash, or branch name. Defaults to the branch set as a default in the repository, otherwise defaults to the *master*." msgstr "ダウンロードã™ã‚‹ãƒ­ãƒ¼ãƒ«ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚リリースタグã®å€¤ã€ã‚³ãƒŸãƒƒãƒˆãƒãƒƒã‚·ãƒ¥ã€ã¾ãŸã¯ãƒ–ランãƒåを指定ã—ã¾ã™ã€‚デフォルトã§ã¯ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒ‡ãƒ•ォルトã¨ã—ã¦è¨­å®šã•れãŸãƒ–ランãƒã«è¨­å®šã•れã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€ãƒ‡ãƒ•ォルト㧠*master* ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:264 msgid "name:" msgstr "name:" #: ../../rst/galaxy/user_guide.rst:263 msgid "Download the role to a specific name. Defaults to the Galaxy name when downloading from Galaxy, otherwise it defaults to the name of the repository." msgstr "ロールを特定ã®åå‰ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚デフォルトã§ã¯ Galaxy ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã¨ãã« Galaxy åã«è¨­å®šã•れã¾ã™ã€‚指定ã—ãªã„å ´åˆã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®åå‰ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:266 msgid "Use the following example as a guide for specifying roles in *requirements.yml*:" msgstr "以下ã®ä¾‹ã‚’ã€*requirements.yml* ã§ãƒ­ãƒ¼ãƒ«ã‚’指定ã™ã‚‹ãŸã‚ã®ã‚¬ã‚¤ãƒ‰ã¨ã—ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/user_guide.rst:315 msgid "Embedding credentials into a SCM URL is not secure. Make sure to use safe auth options for security reasons. For example, use `SSH `_, `netrc `_ or `http.extraHeader `_/`url..pushInsteadOf `_ in Git config to prevent your creds from being exposed in logs." msgstr "èªè¨¼æƒ…報を SCM URL ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。セキュリティー上ã®ç†ç”±ã‹ã‚‰ã€å®‰å…¨ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€Git 設定㮠`SSH `_ã€`netrc `_ã€ã¾ãŸã¯ `http.extraHeader `_/`url..pushInsteadOf `_ ã§ã€ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:318 msgid "Installing roles and collections from the same requirements.yml file" msgstr "åŒã˜ requirements.yml ファイルã‹ã‚‰ã®ãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:320 msgid "You can install roles and collections from the same requirements files" msgstr "åŒã˜è¦ä»¶ãƒ•ァイルã‹ã‚‰ãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:337 msgid "Installing multiple roles from multiple files" msgstr "複数ã®ãƒ•ァイルã‹ã‚‰ã®è¤‡æ•°ãƒ­ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/galaxy/user_guide.rst:339 msgid "For large projects, the ``include`` directive in a :file:`requirements.yml` file provides the ability to split a large file into multiple smaller files." msgstr "å¤§è¦æ¨¡ãªãƒ—ロジェクトã®å ´åˆã€:file:`requirements.yml` ファイル㮠``include`` ディレクティブã«ã‚ˆã‚Šã€å¤§ããªãƒ•ァイルを複数ã®å°ã•ãªãƒ•ァイルã«åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:341 msgid "For example, a project may have a :file:`requirements.yml` file, and a :file:`webserver.yml` file." msgstr "ãŸã¨ãˆã°ã€ãƒ—ロジェクトã«ã¯ :file:`requirements.yml` ファイル㨠:file:`webserver.yml` ファイルãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:343 msgid "Below are the contents of the :file:`webserver.yml` file:" msgstr ":file:`webserver.yml` ファイルã®å†…容を以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:354 msgid "The following shows the contents of the :file:`requirements.yml` file that now includes the :file:`webserver.yml` file:" msgstr ":file:`requirements.yml` ファイルãŒå«ã¾ã‚Œã‚‹ :file:`webserver.yml` ファイルã®å†…容を以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:362 msgid "To install all the roles from both files, pass the root file, in this case :file:`requirements.yml` on the command line, as follows:" msgstr "両方ã®ãƒ•ァイルã‹ã‚‰ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‚’インストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« root ファイルを渡ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ :file:`requirements.yml` を指定ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:372 msgid "Dependencies" msgstr "ä¾å­˜é–¢ä¿‚" #: ../../rst/galaxy/user_guide.rst:374 msgid "Roles can also be dependent on other roles, and when you install a role that has dependencies, those dependencies will automatically be installed to the ``roles_path``." msgstr "ã¾ãŸã€ãƒ­ãƒ¼ãƒ«ã¯ä»–ã®ãƒ­ãƒ¼ãƒ«ã«ä¾å­˜ã—ã€ä¾å­˜é–¢ä¿‚ã®ã‚るロールをインストールã™ã‚‹ã¨ã€ãれらã®ä¾å­˜é–¢ä¿‚ãŒè‡ªå‹•的㫠``roles_path`` ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:376 msgid "There are two ways to define the dependencies of a role:" msgstr "ロールã®ä¾å­˜é–¢ä¿‚を定義ã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:378 msgid "using ``meta/requirements.yml``" msgstr "``meta/requirements.yml`` ã®ä½¿ç”¨" #: ../../rst/galaxy/user_guide.rst:379 msgid "using ``meta/main.yml``" msgstr "``meta/main.yml`` ã®ä½¿ç”¨" #: ../../rst/galaxy/user_guide.rst:382 msgid "Using ``meta/requirements.yml``" msgstr "``meta/requirements.yml`` ã®ä½¿ç”¨" #: ../../rst/galaxy/user_guide.rst:386 msgid "You can create the file ``meta/requirements.yml`` and define dependencies in the same format used for :file:`requirements.yml` described in the `Installing multiple roles from a file`_ section." msgstr "``meta/requirements.yml`` ファイルを作æˆã—ã€ã€Œ`ファイルã‹ã‚‰è¤‡æ•°ã®ãƒ­ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«`_ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã•れã¦ã„ã‚‹ :file:`requirements.yml` ã«ä½¿ç”¨ã•れるã®ã¨åŒã˜å½¢å¼ã§ä¾å­˜é–¢ä¿‚を定義ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:388 msgid "From there, you can import or include the specified roles in your tasks." msgstr "ãã“ã‹ã‚‰ã€æŒ‡å®šã®ãƒ­ãƒ¼ãƒ«ã‚’タスクã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸã‚Šã€è¿½åŠ ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:391 msgid "Using ``meta/main.yml``" msgstr "``meta/main.yml`` ã®ä½¿ç”¨" #: ../../rst/galaxy/user_guide.rst:393 msgid "Alternatively, you can specify role dependencies in the ``meta/main.yml`` file by providing a list of roles under the ``dependencies`` section. If the source of a role is Galaxy, you can simply specify the role in the format ``namespace.role_name``. You can also use the more complex format in :file:`requirements.yml`, allowing you to provide ``src``, ``scm``, ``version``, and ``name``." msgstr "ã¾ãŸã¯ã€``dependencies`` セクションã®ä¸‹ã«ãƒ­ãƒ¼ãƒ«ã®ä¸€è¦§ã‚’指定ã—ã¦ã€``meta/main.yml`` ファイルã«ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を指定ã§ãã¾ã™ã€‚ロールã®ã‚½ãƒ¼ã‚¹ãŒ Galaxy ã®å ´åˆã«ã¯ã€``namespace.role_name`` å½¢å¼ã§ãƒ­ãƒ¼ãƒ«ã‚’指定ã™ã‚‹ã ã‘ã§ã™ã€‚ã•らã«è¤‡é›‘ãªå½¢å¼ã‚’ :file:`requirements.yml` ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚``src``ã€``scm``ã€``version``ã€ãŠã‚ˆã³ ``name`` を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:396 msgid "Dependencies installed that way, depending on other factors described below, will also be executed **before** this role is executed during play execution. To better understand how dependencies are handled during play execution, see :ref:`playbooks_reuse_roles`." msgstr "ãã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸä¾å­˜é–¢ä¿‚ã¯ã€ä»¥ä¸‹ã§èª¬æ˜Žã™ã‚‹ä»–ã®è¦å› ã«å¿œã˜ã¦ã€ãƒ—レイã®å®Ÿè¡Œä¸­ã«ã“ã®ãƒ­ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れる **å‰** ã«ã‚‚実行ã•れã¾ã™ã€‚å†ç”Ÿã®å®Ÿè¡Œä¸­ã«ä¾å­˜é–¢ä¿‚ãŒã©ã®ã‚ˆã†ã«å‡¦ç†ã•れるã‹ã‚’よりよãç†è§£ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`playbooks_reuse_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/galaxy/user_guide.rst:399 msgid "The following shows an example ``meta/main.yml`` file with dependent roles:" msgstr "ä¾å­˜ã™ã‚‹ãƒ­ãƒ¼ãƒ«ãŒæŒ‡å®šã•れ㟠``meta/main.yml`` ファイルã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:432 msgid "Tags are inherited *down* the dependency chain. In order for tags to be applied to a role and all its dependencies, the tag should be applied to the role, not to all the tasks within a role." msgstr "ã‚¿ã‚°ã¯ã€ä¾å­˜é–¢ä¿‚ãƒã‚§ãƒ¼ãƒ³ *下* ã«ç¶™æ‰¿ã•れã¾ã™ã€‚タグをロールã«é©ç”¨ã—ã¦ã™ã¹ã¦ã®ä¾å­˜é–¢ä¿‚ã«é©ç”¨ã™ã‚‹ã«ã¯ã€ã‚¿ã‚°ã‚’ロール内ã®å…¨ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã™ã‚‹ã®ã§ã¯ãªãã€ãƒ­ãƒ¼ãƒ«ã«é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:434 msgid "Roles listed as dependencies are subject to conditionals and tag filtering, and may not execute fully depending on what tags and conditionals are applied." msgstr "ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ä¸€è¦§è¡¨ç¤ºã•れã¦ã„るロールã¯ã€æ¡ä»¶ã¨ã‚¿ã‚°ãƒ•ィルタリングã®å¯¾è±¡ã§ã‚りã€é©ç”¨ã•ã‚Œã‚‹ã‚¿ã‚°ã¨æ¡ä»¶ã«ã‚ˆã£ã¦ã¯å®Œå…¨ã«å®Ÿè¡Œã•れãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:437 msgid "If the source of a role is Galaxy, specify the role in the format *namespace.role_name*:" msgstr "ロールã®ã‚½ãƒ¼ã‚¹ãŒ Galaxy ã®å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã‚’ *namespace.role_name* å½¢å¼ã§æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:446 msgid "Alternately, you can specify the role dependencies in the complex form used in :file:`requirements.yml` as follows:" msgstr "ã¾ãŸã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« :file:`requirements.yml` ã§ä½¿ç”¨ã•れる複雑ãªå½¢å¼ã§ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:458 msgid "Galaxy expects all role dependencies to exist in Galaxy, and therefore dependencies to be specified in the ``namespace.role_name`` format. If you import a role with a dependency where the ``src`` value is a URL, the import process will fail." msgstr "Galaxy ã§ã¯ã€ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚㌠Galaxy ã«å­˜åœ¨ã™ã‚‹ã“ã¨ãŒæƒ³å®šã•れるãŸã‚ã€``namespace.role_name`` å½¢å¼ã§ä¾å­˜é–¢ä¿‚を指定ã—ã¾ã™ã€‚``src`` ã®å€¤ãŒ URL ã§ã‚ã‚‹ä¾å­˜é–¢ä¿‚ã§ãƒ­ãƒ¼ãƒ«ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ—ロセスã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:462 msgid "List installed roles" msgstr "インストール済ã¿ãƒ­ãƒ¼ãƒ«ã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/galaxy/user_guide.rst:464 msgid "Use ``list`` to show the name and version of each role installed in the *roles_path*." msgstr "``list`` を使用ã—ã¦ã€*roles_path* ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å„ロールã®åå‰ãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:476 msgid "Remove an installed role" msgstr "インストールã•れãŸãƒ­ãƒ¼ãƒ«ã®å‰Šé™¤" #: ../../rst/galaxy/user_guide.rst:478 msgid "Use ``remove`` to delete a role from *roles_path*:" msgstr "``remove`` を使用ã—ã¦ã€*roles_path* ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/galaxy/user_guide.rst:489 msgid "Reusable tasks, handlers, and other files in a known directory structure" msgstr "既知ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ã®å†åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚¹ã‚¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€ãŠã‚ˆã³ãã®ä»–ã®ãƒ•ァイル" #~ msgid "You can install a collection in a git repository by providing the URI to the repository instead of a collection name or path to a ``tar.gz`` file. The collection must contain a ``galaxy.yml`` file, which will be used to generate the would-be collection artifact data from the directory. The URI should be prefixed with ``git+`` (or with ``git@`` to use a private repository with ssh authentication) and optionally supports a comma-separated `git commit-ish `_ version (for example, a commit or tag)." #~ msgstr "" #~ msgid "The first is the ``galaxy.yml`` file in the top level of the repository path. If the ``galaxy.yml`` file exists it's used as the collection metadata and the individual collection will be installed." #~ msgstr "" #~ msgid "The second is a ``galaxy.yml`` file in each directory in the repository path (one level deep). In this scenario, each directory with a ``galaxy.yml`` is installed as a collection." #~ msgstr "" #~ msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate which path ansible-galaxy should inspect for ``galaxy.yml`` file(s). The path should be a directory to a collection or multiple collections (rather than the path to a ``galaxy.yml`` file)." #~ msgstr "" #~ msgid "You can install roles and collections from the same requirements files, with some caveats." #~ msgstr "" #~ msgid "While both roles and collections can be specified in one requirements file, they need to be installed separately. The ``ansible-galaxy role install -r requirements.yml`` will only install roles and ``ansible-galaxy collection install -r requirements.yml -p ./`` will only install collections." #~ msgstr "" #~ msgid "`.. versionadded:: 2.10`" #~ msgstr "" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid "The supported keys for collection requirement entries are ``name``, ``version``, ``source``, and ``type``." #~ msgstr "コレクションè¦ä»¶ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ã‚µãƒãƒ¼ãƒˆã•れるキー㯠``name``ã€``version``ã€``source``ã€ãŠã‚ˆã³ ``type`` ã§ã™ã€‚" #~ msgid "The ``version`` key can take in the same range identifier format documented above. If you're installing a collection from a git repository instead of a built collection artifact, the ``version`` key refers to a `git commit-ish `_." #~ msgstr "``version`` キーã¯ã€ä¸Šè¨˜ã®ç¯„囲識別å­ã®å½¢å¼ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ビルドコレクションアーティファクトã§ã¯ãªã git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã¯ã€``version`` キー㯠`git commit-ish `_ ã‚’å‚ç…§ã—ã¾ã™ã€‚" #~ msgid "You can install a collection in a git repository by providing the URI to the repository instead of a collection name or path to a ``tar.gz`` file. The collection must contain a ``galaxy.yml`` or ``MANIFEST.json`` file, which will be used to generate the would-be collection artifact data from the directory. The URI should be prefixed with ``git+`` (or with ``git@`` to use a private repository with ssh authentication) and optionally supports a comma-separated `git commit-ish `_ version (for example, a commit or tag)." #~ msgstr "コレクションåã¾ãŸã¯ ``tar.gz`` ファイルã¸ã®ãƒ‘スã§ã¯ãªãã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã« URI ã‚’æä¾›ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚コレクションã«ã¯ã€``galaxy.yml`` ファイルã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå¿…è¦ã§ã™ã€‚ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ã® will-be コレクションアーティファクトデータを生æˆã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚URI ã®æŽ¥é ­è¾žã«ã¯ ``git+`` (ã¾ãŸã¯ ssh èªè¨¼ã§ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã™ã‚‹ ``git@``)を付ã‘ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã® `git commit-ish `_ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (コミットã¾ãŸã¯ã‚¿ã‚°ãªã©) をサãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "Embedding credentials into a git URI is not secure. Make sure to use safe auth options for security reasons. For example, use `SSH `_, `netrc `_ or `http.extraHeader `_/`url..pushInsteadOf `_ in Git config to prevent your creds from being exposed in logs." #~ msgstr "èªè¨¼æƒ…報を git URI ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。セキュリティー上ã®ç†ç”±ã‹ã‚‰ã€å®‰å…¨ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€Git 設定㮠`SSH `_ã€`netrc `_ã€ã¾ãŸã¯ `http.extraHeader `_/`url..pushInsteadOf `_ ã§ã€ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #~ msgid "In a ``requirements.yml`` file, you can also use the ``type`` and ``version`` keys in addition to using the ``git+repo,version`` syntax for the collection name." #~ msgstr "``requirements.yml`` ファイルã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã® ``git+repo,version`` 構文を使用ã™ã‚‹ä»–ã«ã€``type`` キーãŠã‚ˆã³ ``version`` キーを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #~ msgid "Git repositories can be used for collection dependencies as well. This can be helpful for local development and testing but built/published artifacts should only have dependencies on other artifacts." #~ msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¾å­˜é–¢ä¿‚ã«ã‚‚使用ã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«é–‹ç™ºãŠã‚ˆã³ãƒ†ã‚¹ãƒˆã«å½¹ç«‹ã¡ã¾ã™ãŒã€ãƒ“ルド/公開ã•れãŸã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã«ã¯ä»–ã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã¸ã®ä¾å­˜é–¢ä¿‚ã®ã¿ãŒå¿…è¦ã§ã™ã€‚" #~ msgid "Default repository search locations" #~ msgstr "デフォルトã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ¤œç´¢ã®å ´æ‰€" #~ msgid "There are two paths searched in a repository for collections by default." #~ msgstr "デフォルトã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ç”¨ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ 2 ã¤ã®ãƒ‘ã‚¹ãŒæ¤œç´¢ã•れã¾ã™ã€‚" #~ msgid "The second is a ``galaxy.yml`` or ``MANIFEST.json`` file in each directory in the repository path (one level deep). In this scenario, each directory with a metadata file is installed as a collection." #~ msgstr "2 ã¤ç›®ã¯ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス (1 ãƒ¬ãƒ™ãƒ«ã®æ·±ã•) ã®å„ディレクトリー㮠``galaxy.yml`` ファイルã¾ãŸã¯ ``MANIFEST.json`` ファイルã§ã™ã€‚ã“ã“ã§ã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルãŒå«ã¾ã‚Œã‚‹å„ディレクトリーãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™)。" #~ msgid "Specifying the location to search for collections" #~ msgstr "コレクションを検索ã™ã‚‹å ´æ‰€ã®æŒ‡å®š" #~ msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate which path ansible-galaxy should inspect for metadata file(s). The path should be a directory to a collection or multiple collections (rather than the path to a ``galaxy.yml`` file or ``MANIFEST.json`` file)." #~ msgstr "ç•°ãªã‚‹ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ§‹é€ ãŒã‚ã‚‹å ´åˆã‚„ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒ–セットã®ã¿ã‚’インストールã™ã‚‹å ´åˆã¯ã€URI ã®æœ€å¾Œã«ãƒ•ラグメントを追加ã—㦠(ä»»æ„ã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰ï¼‰ã€ansible-galaxy ãŒãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルを調ã¹ã‚‹ãƒ‘スを示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスã¯ã€(``MANIFEST.json`` ファイルã¾ãŸã¯ ``galaxy.yml`` ファイルã¸ã®ãƒ‘スã§ã¯ãªã) コレクションã¾ãŸã¯è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.476556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/index.po0000644000000000000000000002674600000000000024557 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/2.10_index.rst:23 ../../rst/ansible_index.rst:25 #: ../../rst/core_index.rst:36 msgid "Installation, Upgrade & Configuration" msgstr "インストールã€ã‚¢ãƒƒãƒ—グレードã€ãŠã‚ˆã³è¨­å®š" #: ../../rst/core_index.rst:43 msgid "Using Ansible Core" msgstr "Ansible Core ã®ä½¿ç”¨" #: ../../rst/core_index.rst:49 msgid "Contributing to Ansible Core" msgstr "Ansible Core ã¸ã®è²¢çŒ®" #: ../../rst/2.10_index.rst:42 ../../rst/ansible_index.rst:44 #: ../../rst/core_index.rst:55 msgid "Extending Ansible" msgstr "Ansible ã®æ‹¡å¼µ" #: ../../rst/2.10_index.rst:73 ../../rst/ansible_index.rst:75 #: ../../rst/core_index.rst:62 msgid "Reference & Appendices" msgstr "å‚ç…§ãŠã‚ˆã³ä»˜éŒ²" #: ../../rst/2.10_index.rst:102 ../../rst/ansible_index.rst:100 #: ../../rst/core_index.rst:86 msgid "Roadmaps" msgstr "ロードマップ" #: ../../rst/core_index.rst:8 msgid "Ansible Core Documentation" msgstr "Ansible Core ドキュメント" #: ../../rst/core_index.rst:11 msgid "About ansible-core" msgstr "ansible-core ã®æ¦‚è¦" #: ../../rst/2.10_index.rst:9 ../../rst/ansible_index.rst:11 #: ../../rst/core_index.rst:13 msgid "Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates." msgstr "Ansible 㯠IT 自動化ツールã§ã™ã€‚ã“ã®ãƒ„ールを使用ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã®æ§‹æˆã€ã‚½ãƒ•トウェアã®å±•é–‹ã€ã‚ˆã‚Šé«˜åº¦ãª IT タスク (継続的ãªãƒ‡ãƒ—ロイメントã€ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ãªã—ã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°æ›´æ–°ãªã©) ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/core_index.rst:15 msgid "Ansible core, or ``ansible-core`` is the main building block and architecture for Ansible, and includes:" msgstr "Ansible コアã¾ãŸã¯ ``ansible-core`` 㯠Ansible ã®ä¸»è¦ãªãƒ“ルディングブロックãŠã‚ˆã³ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã§ã‚りã€ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/core_index.rst:17 msgid "CLI tools such as ``ansible-playbook``, ``ansible-doc``. and others for driving and interacting with automation." msgstr "自動化ã§å‹•作や対話を行ㆠ``ansible-playbook``ã€``ansible-doc`` ãªã©ã® CLI ツール" #: ../../rst/core_index.rst:18 msgid "The Ansible language that uses YAML to create a set of rules for developing Ansible Playbooks and includes functions such as conditionals, blocks, includes, loops, and other Ansible imperatives." msgstr "YAML を使用ã—㦠Ansible Playbook を開発ã™ã‚‹ãŸã‚ã®ä¸€é€£ã®ãƒ«ãƒ¼ãƒ«ã‚’作æˆã—ã€conditionalã€blockã€includeã€includeã€ãã®ä»–ã® Ansible 命令ãªã©ã®é–¢æ•°ã‚’追加ã™ã‚‹ Ansible 言語" #: ../../rst/core_index.rst:19 msgid "An architectural framework that allows extensions through Ansible collections." msgstr "Ansible ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æ‹¡å¼µæ©Ÿèƒ½ã‚’å¯èƒ½ã«ã™ã‚‹ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ãƒ•レームワーク" #: ../../rst/2.10_index.rst:11 ../../rst/ansible_index.rst:13 #: ../../rst/core_index.rst:21 msgid "Ansible's main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with other transports and pull modes as alternatives), and a language that is designed around auditability by humans--even those not familiar with the program." msgstr "Ansible ã®ä¸»ãªç›®æ¨™ã¯ã€ç°¡å˜ã§ä½¿ã„ã‚„ã™ã„ã“ã¨ã§ã™ã€‚ã¾ãŸã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãŠã‚ˆã³ä¿¡é ¼æ€§ã«é‡ç‚¹ã‚’ç½®ã„ã¦ãŠã‚Šã€æœ€å°é™ã®å¯å‹•部å“ã€ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆç”¨ã® OpenSSH ã®ä½¿ç”¨ (代替ã¨ã—ã¦ä»–ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã¨ãƒ—ルモードを使用)ã€ãŠã‚ˆã³ãƒ—ログラムã«ç²¾é€šã—ã¦ã„ãªã„人ã§ã‚‚監査をå¯èƒ½ã«ã™ã‚‹è¨€èªžã‚‚å‚™ãˆã¦ã„ã¾ã™ã€‚" #: ../../rst/2.10_index.rst:13 ../../rst/ansible_index.rst:15 #: ../../rst/core_index.rst:23 msgid "We believe simplicity is relevant to all sizes of environments, so we design for busy users of all types: developers, sysadmins, release engineers, IT managers, and everyone in between. Ansible is appropriate for managing all environments, from small setups with a handful of instances to enterprise environments with many thousands of instances." msgstr "簡素化ã¯ã‚ã‚‰ã‚†ã‚‹è¦æ¨¡ã®ç’°å¢ƒã«é–¢é€£ã—ã¦ãŠã‚Šã€é–‹ç™ºè€…ã€ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†è€…ã€ãƒªãƒªãƒ¼ã‚¹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã€IT マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãªã©ã€ã‚らゆるタイプã®ãƒ“ジーユーザーå‘ã‘ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚Ansible ã¯ã€ã‚ãšã‹ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã—ã‹ãªã„å°è¦æ¨¡ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã‹ã‚‰ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæ•°åƒã«ã‚‚ãªã‚‹ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズ環境ã¾ã§ã€ã™ã¹ã¦ã®ç’°å¢ƒã‚’管ç†ã™ã‚‹ã®ã«é©ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/2.10_index.rst:15 ../../rst/ansible_index.rst:17 #: ../../rst/core_index.rst:25 msgid "You can learn more at `AnsibleFest `_, the annual event for all Ansible contributors, users, and customers hosted by Red Hat. AnsibleFest is the place to connect with others, learn new skills, and find a new friend to automate with." msgstr "詳細ã¯ã€`AnsibleFest `_ (Red Hat ãŒé–‹å‚¬ã™ã‚‹ã€Ansible ã®ã™ã¹ã¦ã®è²¢çŒ®è€…ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ãŠã‚ˆã³é¡§å®¢ã®ãŸã‚ã®æ¯Žå¹´æ’例ã®ã‚¤ãƒ™ãƒ³ãƒˆ) ã§å­¦ã¶ã“ã¨ãŒã§ãã¾ã™ã€‚AnsibleFest ã¯ã€ä»–ã®äººã¨ã¤ãªãŒã‚Šã€æ–°ã—ã„スキルを学ã³ã€è‡ªå‹•化ã«èˆˆå‘³ã®ã‚る人é”ã¨çŸ¥ã‚Šåˆã†ãŸã‚ã®ã‚¤ãƒ™ãƒ³ãƒˆã§ã™ã€‚" #: ../../rst/2.10_index.rst:17 ../../rst/ansible_index.rst:19 #: ../../rst/core_index.rst:27 msgid "Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled. Because OpenSSH is one of the most peer-reviewed open source components, security exposure is greatly reduced. Ansible is decentralized--it relies on your existing OS credentials to control access to remote machines. If needed, Ansible can easily connect with Kerberos, LDAP, and other centralized authentication management systems." msgstr "Ansible ã¯ã€ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’使用ã›ãšã«ãƒžã‚·ãƒ³ã‚’管ç†ã—ã¾ã™ã€‚リモートデーモンをアップグレードã™ã‚‹æ–¹æ³•ã‚„ã€ãƒ‡ãƒ¼ãƒ¢ãƒ³ãŒã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ãŸã‚ã«ã‚·ã‚¹ãƒ†ãƒ ã‚’管ç†ã§ããªã„ã¨ã„ã†å•題ã¯ã‚りã¾ã›ã‚“。OpenSSH ã¯ã€ç›¸äº’è©•ä¾¡ãŒæœ€ã‚‚行ã‚れるオープンソースコンãƒãƒ¼ãƒãƒ³ãƒˆã® 1 ã¤ã§ã‚ã‚‹ãŸã‚ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®å±é™ºæ€§ã¯å¤§å¹…ã«è»½æ¸›ã•れã¾ã™ã€‚Ansible ã¯åˆ†æ•£åŒ–ã•れã¦ãŠã‚Šã€æ—¢å­˜ã® OS èªè¨¼æƒ…報を使用ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御ã—ã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€Ansible ã¯ã€Kerberosã€LDAPã€ãŠã‚ˆã³ãã®ä»–ã®é›†ä¸­èªè¨¼ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã«ç°¡å˜ã«æŽ¥ç¶šã§ãã¾ã™ã€‚" #: ../../rst/core_index.rst:29 msgid "This documentation covers the version of ``ansible-core`` noted in the upper left corner of this page. We maintain multiple versions of ``ansible-core`` and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you're using. For recent features, we note the version of Ansible where the feature was added." msgstr "本ドキュメントã¯ã€æœ¬ãƒšãƒ¼ã‚¸ã®å·¦ä¸Šã«ç¤ºã•れã¦ã„ã‚‹ ``ansible-core`` ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚Red Hat ã¯ã€è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``ansible-core`` ã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æä¾›ã—ã¦ã„ã‚‹ãŸã‚ã€å‚ç…§ã—ã¦ã„るドキュメントãŒã€ãŠä½¿ã„ã® Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ã€‚æœ€æ–°ã®æ©Ÿèƒ½ã«ã¤ã„ã¦ã¯ã€ãã®æ©Ÿèƒ½ãŒè¿½åŠ ã•れ㟠Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/core_index.rst:32 msgid "``ansible-core`` releases a new major release approximately twice a year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. Contributors develop and change modules and plugins, hosted in collections since version 2.10, much more quickly." msgstr "``ansible-core`` ã¯ã€å¹´ã«ç´„ 2 å›žã€æ–°ã—ã„メジャーリリースをリリースã—ã¾ã™ã€‚コアアプリケーションã¯ã€è¨€èªžã®è¨­è¨ˆãŠã‚ˆã³è¨­å®šã®å˜ç´”性ãŒé‡è¦–ã•れã€ãã®é€²åŒ–ã¯è‹¥å¹²ä¿å®ˆçš„ã¨ãªã‚Šã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æä¾›ã•れるモジュールã¨ãƒ—ラグインã¯ã€è²¢çŒ®è€…ã«ã‚ˆã‚Šã¯ã‚‹ã‹ã«è¿…速ã«é–‹ç™ºãŠã‚ˆã³å¤‰æ›´ã•れã¾ã™ã€‚" #: ../../rst/2.10_index.rst:30 ../../rst/ansible_index.rst:32 msgid "Using Ansible" msgstr "Ansible ã®ä½¿ç”¨" #: ../../rst/2.10_index.rst:36 ../../rst/ansible_index.rst:38 msgid "Contributing to Ansible" msgstr "Ansible ã¸ã®è²¢çŒ®" #: ../../rst/2.10_index.rst:48 ../../rst/ansible_index.rst:50 msgid "Common Ansible Scenarios" msgstr "Ansible ã®ä¸€èˆ¬çš„ãªã‚·ãƒŠãƒªã‚ª" #: ../../rst/2.10_index.rst:57 ../../rst/ansible_index.rst:59 msgid "Network Automation" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è‡ªå‹•化" #: ../../rst/2.10_index.rst:65 ../../rst/ansible_index.rst:67 msgid "Ansible Galaxy" msgstr "Ansible Galaxy" #: ../../rst/2.10_index.rst:4 ../../rst/ansible_index.rst:6 msgid "Ansible Documentation" msgstr "Ansible ドキュメント" #: ../../rst/2.10_index.rst:7 ../../rst/ansible_index.rst:9 msgid "About Ansible" msgstr "Ansible ã®æ¦‚è¦" #: ../../rst/2.10_index.rst:19 ../../rst/ansible_index.rst:21 msgid "This documentation covers the version of Ansible noted in the upper left corner of this page. We maintain multiple versions of Ansible and of the documentation, so please be sure you are using the version of the documentation that covers the version of Ansible you're using. For recent features, we note the version of Ansible where the feature was added." msgstr "本ドキュメントã¯ã€æœ¬ãƒšãƒ¼ã‚¸ã®å·¦ä¸Šã«ç¤ºã•れã¦ã„ã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚Red Hat ã¯ã€è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æä¾›ã—ã¦ã„ã‚‹ãŸã‚ã€å‚ç…§ã—ã¦ã„るドキュメントãŒã€ãŠä½¿ã„ã® Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ã€‚æœ€æ–°ã®æ©Ÿèƒ½ã«ã¤ã„ã¦ã¯ã€ãã®æ©Ÿèƒ½ãŒè¿½åŠ ã•れ㟠Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/2.10_index.rst:21 ../../rst/ansible_index.rst:23 msgid "Ansible releases a new major release approximately twice a year. The core application evolves somewhat conservatively, valuing simplicity in language design and setup. Contributors develop and change modules and plugins, hosted in collections since version 2.10, much more quickly." msgstr "Ansible ã¯ã€å¹´ã«ç´„ 2 å›žã€æ–°ã—ã„メジャーリリースをリリースã—ã¾ã™ã€‚コアアプリケーションã¯ã€è¨€èªžã®è¨­è¨ˆãŠã‚ˆã³è¨­å®šã®å˜ç´”性ãŒé‡è¦–ã•れã€ãã®é€²åŒ–ã¯è‹¥å¹²ä¿å®ˆçš„ã¨ãªã‚Šã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æä¾›ã•れるモジュールã¨ãƒ—ラグインã¯ã€è²¢çŒ®è€…ã«ã‚ˆã‚Šã¯ã‚‹ã‹ã«è¿…速ã«é–‹ç™ºãŠã‚ˆã³å¤‰æ›´ã•れã¾ã™ã€‚" #: ../../rst/2.10_index.rst:98 msgid "Release Notes" msgstr "リリースノート" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.477556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/installation_guide.po0000644000000000000000000022536600000000000027325 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/installation_guide/index.rst:3 msgid "Installation Guide" msgstr "インストールガイド" #: ../../rst/installation_guide/index.rst:5 msgid "Welcome to the Ansible Installation Guide!" msgstr "本ガイド㯠Ansible インストールガイドã§ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:5 msgid "Configuring Ansible" msgstr "Ansible ã®è¨­å®š" #: ../../rst/installation_guide/intro_configuration.rst:8 msgid "Topics" msgstr "トピック" #: ../../rst/installation_guide/intro_configuration.rst:10 msgid "This topic describes how to control Ansible settings." msgstr "ã“ã“ã§ã¯ã€Ansible ã®è¨­å®šã‚’制御ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:16 msgid "Configuration file" msgstr "設定ファイル" #: ../../rst/installation_guide/intro_configuration.rst:18 msgid "Certain settings in Ansible are adjustable via a configuration file (ansible.cfg). The stock configuration should be sufficient for most users, but there may be reasons you would want to change them. Paths where configuration file is searched are listed in :ref:`reference documentation`." msgstr "Ansible ã®ä¸€éƒ¨ã®è¨­å®šã¯ã€è¨­å®šãƒ•ァイル (ansible.cfg) ã§èª¿æ•´ã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã«ã¯ stock 設定ã§å分ã§ã™ãŒã€å¤‰æ›´ã—ãŸæ–¹ãŒé©ã—ã¦ã„ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã®æ¤œç´¢å…ˆã®ãƒ‘スã¯ã€Œ:ref:`å‚照ドキュメント`ã€ã«ä¸€è¦§è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:25 msgid "Getting the latest configuration" msgstr "最新設定ã®å–å¾—" #: ../../rst/installation_guide/intro_configuration.rst:27 msgid "If installing Ansible from a package manager, the latest ``ansible.cfg`` file should be present in ``/etc/ansible``, possibly as a ``.rpmnew`` file (or other) as appropriate in the case of updates." msgstr "パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‹ã‚‰ Ansible をインストールã—ãŸå ´åˆã¯ã€æœ€æ–°ã® ``ansible.cfg`` ファイル㌠``/etc/ansible`` ã«å­˜åœ¨ã—ã¦ã„ã‚‹ã¯ãšã§ã™ã€‚æ›´æ–°ã§ã¯ã€``.rpmnew`` ファイル (ã¾ãŸã¯ãã®ä»–ã®ãƒ•ァイル) ãŒé©åˆ‡ãªå ´åˆã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:30 msgid "If you installed Ansible from pip or from source, you may want to create this file in order to override default settings in Ansible." msgstr "Ansible ã‚’ pip ã¾ãŸã¯ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸå ´åˆã¯ã€ã“ã®ãƒ•ァイルを作æˆã—㦠Ansible ã®ãƒ‡ãƒ•ォルト設定をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:33 msgid "An `example file is available on GitHub `_." msgstr "サンプルファイル㯠`GitHub `_ ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:35 msgid "For more details and a full listing of available configurations go to :ref:`configuration_settings`. Starting with Ansible version 2.4, you can use the :ref:`ansible-config` command line utility to list your available options and inspect the current values." msgstr "詳細ã¨åˆ©ç”¨å¯èƒ½ãªè¨­å®šã®å®Œå…¨ä¸€è¦§ã¯ã€Œ:ref:`configuration_settings`ã€ã«ã‚りã¾ã™ã€‚Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以é™ã§ã¯ã€:ref:`ansible-config` コマンドラインユーティリティーを使用ã—ã¦åˆ©ç”¨å¯èƒ½ãªã‚ªãƒ—ションã®ä¸€è¦§ã‚’表示ã—ã€ç¾åœ¨ã®å€¤ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:37 msgid "For in-depth details, see :ref:`ansible_configuration_settings`." msgstr "詳細ã¯ã€ã€Œ:ref:`ansible_configuration_settings`ã€å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_configuration.rst:42 msgid "Environmental configuration" msgstr "環境設定" #: ../../rst/installation_guide/intro_configuration.rst:44 msgid "Ansible also allows configuration of settings using environment variables. If these environment variables are set, they will override any setting loaded from the configuration file." msgstr "Ansible ã§ã¯ã€ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ãŸè¨­å®šã‚‚å¯èƒ½ã§ã™ã€‚ã“れらã®ç’°å¢ƒå¤‰æ•°ãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€è¨­å®šãƒ•ァイルã‹ã‚‰èª­ã¿è¾¼ã¾ã‚ŒãŸè¨­å®šã¯ã™ã¹ã¦ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:47 msgid "You can get a full listing of available environment variables from :ref:`ansible_configuration_settings`." msgstr "「:ref:`ansible_configuration_settings`ã€ã¯ã€åˆ©ç”¨å¯èƒ½ãªç’°å¢ƒå¤‰æ•°ã®è©³ç´°ãªä¸€è¦§ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:53 msgid "Command line options" msgstr "コマンドラインオプション" #: ../../rst/installation_guide/intro_configuration.rst:55 msgid "Not all configuration options are present in the command line, just the ones deemed most useful or common. Settings in the command line will override those passed through the configuration file and the environment." msgstr "ã™ã¹ã¦ã®è¨­å®šã‚ªãƒ—ションãŒã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«è¡¨ç¤ºã•れるã‚ã‘ã§ã¯ãªãã€æœ€ã‚‚有用オプションã¨ä¸€èˆ¬çš„ãªã‚ªãƒ—ションã®ã¿ãŒè¡¨ç¤ºã•れã¾ã™ã€‚コマンドラインã®è¨­å®šã¯ã€è¨­å®šãƒ•ァイルã¨ç’°å¢ƒã‚’介ã—ã¦æ¸¡ã•れãŸè¨­å®šã‚’上書ãã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_configuration.rst:58 msgid "The full list of options available is in :ref:`ansible-playbook` and :ref:`ansible`." msgstr "利用å¯èƒ½ãªã‚ªãƒ—ションã®è©³ç´°ãªä¸€è¦§ã¯ã€Œ:ref:`ansible-playbook`ã€ãŠã‚ˆã³ã€Œ:ref:`ansible`ã€ã«ã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:6 msgid "Installing Ansible" msgstr "Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:8 msgid "Ansible is an agentless automation tool that you install on a control node. From the control node, Ansible manages machines and other devices remotely (by default, over the SSH protocol)." msgstr "Ansible ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れるエージェントレス自動化ツールã§ã™ã€‚コントロールノードã‹ã‚‰ã€Ansible ã¯ãƒžã‚·ãƒ³ãŠã‚ˆã³ãã®ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’リモートã§ç®¡ç†ã—ã¾ã™ (デフォルトã§ã¯ SSH プロトコルを使用)。" #: ../../rst/installation_guide/intro_installation.rst:10 msgid "To install Ansible for use at the command line, simply install the Ansible package on one machine (which could easily be a laptop). You do not need to install a database or run any daemons. Ansible can manage an entire fleet of remote machines from that one control node." msgstr "コマンドライン㧠Ansible をインストールã™ã‚‹ã«ã¯ã€Ansible パッケージを 1 å°ã®ãƒžã‚·ãƒ³ (ラップトップも使用å¯èƒ½) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã ã‘ã§ã™ã€‚データベースをインストールã—ãŸã‚Šã€ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚’実行ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ansible ã¯ã€1 ã¤ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³å…¨ä½“を管ç†ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:16 msgid "Prerequisites" msgstr "è¦ä»¶" #: ../../rst/installation_guide/intro_installation.rst:18 msgid "Before you install Ansible, review the requirements for a control node. Before you use Ansible, review the requirements for managed nodes (those end devices you want to automate). Control nodes and managed nodes have different minimum requirements." msgstr "Ansible をインストールã™ã‚‹å‰ã«ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã®è¦ä»¶ã‚’確èªã—ã¦ãã ã•ã„。Ansible を使用ã™ã‚‹å‰ã«ã€ç®¡ç†ã™ã‚‹ãƒŽãƒ¼ãƒ‰ (自動化ã™ã‚‹ã‚¨ãƒ³ãƒ‰ãƒ‡ãƒã‚¤ã‚¹) ã®è¦ä»¶ã‚’確èªã—ã¦ãã ã•ã„。コントロールノードãŠã‚ˆã³ç®¡ç†ãƒŽãƒ¼ãƒ‰ã®æœ€å°è¦ä»¶ã«ã¯ã€ç•°ãªã‚‹è¦ä»¶ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:23 msgid "Control node requirements" msgstr "コントロールノードã®è¦ä»¶" #: ../../rst/installation_guide/intro_installation.rst:25 msgid "For your control node (the machine that runs Ansible), you can use any machine with Python 3.8 or newer installed. This includes Red Hat, Debian, CentOS, macOS, any of the BSDs, and so on. Windows is not supported for the control node, read more about this in `Matt Davis's blog post `_." msgstr "コントロールノード(Ansible を実行ã™ã‚‹ãƒžã‚·ãƒ³ï¼‰ã§ã¯ã€Python 3.8 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るマシンを使用ã§ãã¾ã™ã€‚ã“れã«ã¯ã€Red Hatã€Debianã€CentOSã€macOSã€ä»»æ„ã® BSD ãŒå«ã¾ã‚Œã¾ã™ã€‚Windows ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。Windows ã«ã¤ã„ã¦ã¯ã€`Matt Davis ã®ãƒ–ログ記事 `_ ã§è©³ç´°ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:31 msgid "Please note that some plugins that run on the control node have additional requirements. These requirements should be listed in the plugin documentation." msgstr "コントロールノードã§å®Ÿè¡Œã™ã‚‹ä¸€éƒ¨ã®ãƒ—ラグインã«ã¯è¿½åŠ ã®è¦ä»¶ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れらã®è¦ä»¶ã¯ã€ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:33 msgid "When choosing a control node, remember that any management system benefits from being run near the machines being managed. If you are using Ansible to manage machines in a cloud, consider using a machine inside that cloud as your control node. In most cases Ansible will perform better from a machine on the cloud than from a machine on the open Internet." msgstr "ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹éš›ã«ã¯ã€ç®¡ç†å¯¾è±¡ã®ãƒžã‚·ãƒ³ã®è¿‘ãã§å®Ÿè¡Œã™ã‚‹ã“ã¨ã§ã©ã®ã‚ˆã†ãªç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã«ã‚‚利点ãŒã‚ã‚‹ã“ã¨ã‚’念頭ã«ç½®ã„ã¦ãã ã•ã„。Ansible を使用ã—ã¦ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã®ãƒžã‚·ãƒ³ã‚’管ç†ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã®ãƒžã‚·ãƒ³ã‚’コントロールノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。ã»ã¨ã‚“ã©ã®å ´åˆã€Ansible ã¯ã‚ªãƒ¼ãƒ—ンインターãƒãƒƒãƒˆä¸Šã®ãƒžã‚·ãƒ³ã‚ˆã‚Šã‚‚ã€ã‚¯ãƒ©ã‚¦ãƒ‰ä¸Šã®ãƒžã‚·ãƒ³ã®æ–¹ãŒãƒ‘フォーマンスãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:37 msgid "Ansible 2.11 will make Python 3.8 a soft dependency for the control node, but will function with the aforementioned requirements. Ansible 2.12 will require Python 3.8 or newer to function on the control node. Starting with Ansible 2.11, the project will only be packaged for Python 3.8 and newer." msgstr "Ansible 2.11 ã§ã¯ã€Python 3.8 ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã®ã‚½ãƒ•トä¾å­˜é–¢ä¿‚ã¨ãªã‚Šã¾ã™ãŒã€å‰è¿°ã®è¦ä»¶ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚Ansible 2.12 ã§ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã« Python3.8 以é™ãŒå¿…è¦ã§ã™ã€‚Ansible 2.11 以é™ã€ãƒ—ロジェクト㯠Python 3.8 以é™ã§ã®ã¿ãƒ‘ッケージ化ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:43 msgid "Managed node requirements" msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã®è¦ä»¶" #: ../../rst/installation_guide/intro_installation.rst:45 msgid "Although you do not need a daemon on your managed nodes, you do need a way for Ansible to communicate with them. For most managed nodes, Ansible makes a connection over SSH and transfers modules using SFTP. If SSH works but SFTP is not available on some of your managed nodes, you can switch to SCP in :ref:`ansible.cfg `. For any machine or device that can run Python, you also need Python 2 (version 2.6 or later) or Python 3 (version 3.5 or later)." msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã§ãƒ‡ãƒ¼ãƒ¢ãƒ³ã¯å¿…è¦ã‚りã¾ã›ã‚“ãŒã€Ansible ãŒãれらã¨é€šä¿¡ã™ã‚‹æ–¹æ³•ãŒå¿…è¦ã§ã™ã€‚ã»ã¨ã‚“ã©ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ã®å ´åˆã€Ansible 㯠SSH çµŒç”±ã§æŽ¥ç¶šã‚’ä½œæˆã—ã€SFTP を使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’転é€ã—ã¾ã™ã€‚SSH ãŒæ©Ÿèƒ½ã—ã¦ã„ã¦ã‚‚ã€ä¸€éƒ¨ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ SFTP ãŒåˆ©ç”¨ã§ããªã„å ´åˆã¯ã€:ref:`ansible.cfg ` ã® SCP ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Python を実行ã§ãるマシンã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ã®å ´åˆã¯ã€Python 2 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™) ã¾ãŸã¯ Python 3 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3.5 以é™) ã‚‚å¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:49 msgid "Please note that some modules have additional requirements that need to be satisfied on the 'target' machine (the managed node). These requirements should be listed in the module documentation." msgstr "モジュールã«ã‚ˆã£ã¦ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã§æº€ãŸã•ãªã‘れã°ãªã‚‰ãªã„追加ã®è¦ä»¶ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ (管ç†ãƒŽãƒ¼ãƒ‰)。ã“れらã®è¦ä»¶ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:53 msgid "If you have SELinux enabled on remote nodes, you will also want to install libselinux-python on them before using any copy/file/template related functions in Ansible. You can use the :ref:`yum module` or :ref:`dnf module` in Ansible to install this package on remote systems that do not have it." msgstr "リモートノード㧠SELinux を有効ã«ã—ã¦ã„ã‚‹å ´åˆã¯ã€Ansible ã§ã‚³ãƒ”ー/ファイル/ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆé–¢é€£ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹å‰ã«ã€libselinux-python をインストールã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚リモートシステムã«ã“ã®ãƒ‘ッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã¯ã€Ansible ã§ :ref:`yum モジュール` ã¾ãŸã¯ :ref:`dnf モジュール` を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:55 msgid "By default, before the first Python module in a playbook runs on a host, Ansible attempts to discover a suitable Python interpreter on that host. You can override the discovery behavior by setting the :ref:`ansible_python_interpreter` inventory variable to a specific interpreter, and in other ways. See :ref:`interpreter_discovery` for details." msgstr "デフォルトã§ã¯ã€Playbook ã®æœ€åˆã® Python モジュールãŒãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるå‰ã«ã€Ansible ã¯ãã®ãƒ›ã‚¹ãƒˆã§é©åˆ‡ãª Python インタープリターを検出ã—よã†ã¨ã—ã¾ã™ã€‚検出動作ã¯ã€:ref:`ansible_python_interpreter` インベントリー変数を特定ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã«è¨­å®šã§ãã€ãã®ä»–ã®æ–¹æ³•ã§ç„¡åйã«ã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`interpreter_discovery`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:57 msgid "Ansible's :ref:`raw module`, and the :ref:`script module`, do not depend on a client side install of Python to run. Technically, you can use Ansible to install a compatible version of Python using the :ref:`raw module`, which then allows you to use everything else. For example, if you need to bootstrap Python 2 onto a RHEL-based system, you can install it as follows:" msgstr "Ansible ã® :ref:`raw モジュール` ãŠã‚ˆã³ :ref:`script モジュール` ã¯ã€å®Ÿè¡Œã™ã‚‹ Python ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ä¾å­˜ã—ã¾ã›ã‚“。技術的ã«ã¯ã€Ansible を使用ã—㦠:ref:`raw モジュール` を使用ã—ã¦äº’æ›æ€§ã®ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python をインストールã§ãã¾ã™ã€‚ã“れ以外ã®ã‚‚ã®ã‚’ã™ã¹ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Python 2 ã‚’ RHEL ベースã®ã‚·ã‚¹ãƒ†ãƒ ã«ãƒ–ートストラップã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:66 msgid "Selecting an Ansible artifact and version to install" msgstr "インストールã™ã‚‹ Ansible アーティファクトãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®é¸æŠž" #: ../../rst/installation_guide/intro_installation.rst:68 msgid "Starting with version 2.10, Ansible distributes two artifacts: a community package called ``ansible`` and a minimalist language and runtime called ``ansible-core`` (called `ansible-base` in version 2.10). Choose the Ansible artifact and version that matches your particular needs." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã€Ansible 㯠``ansible`` ã¨ã„ã†åå‰ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ‘ッケージã¨ã€æœ€å°è¨€èªžãŠã‚ˆã³ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã§ã‚ã‚‹ ``ansible-core`` (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ã® `ansible-base`) ã® 2 ã¤ã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトをé…布ã—ã¾ã™ã€‚特定ã®ãƒ‹ãƒ¼ã‚ºã«ä¸€è‡´ã™ã‚‹ Ansible アーティファクトãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:71 msgid "Installing the Ansible community package" msgstr "Ansible コミュニティーパッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:73 msgid "The ``ansible`` package includes the Ansible language and runtime plus a range of community curated Collections. It recreates and expands on the functionality that was included in Ansible 2.9." msgstr "``ansible`` パッケージã«ã¯ã€Ansible 言語ãŠã‚ˆã³ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã¨ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€Ansible 2.9 ã«å«ã¾ã‚Œã‚‹æ©Ÿèƒ½ã«å¯¾ã—ã¦å†ä½œæˆãŠã‚ˆã³æ‹¡å¼µã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:75 msgid "You can choose any of the following ways to install the Ansible community package:" msgstr "Ansible コミュニティーパッケージをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:77 msgid "Install the latest release with your OS package manager (for Red Hat Enterprise Linux (TM), CentOS, Fedora, Debian, or Ubuntu)." msgstr "OS パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ (Red Hat Enterprise Linux (TM)ã€CentOSã€Fedoraã€Debianã€ã¾ãŸã¯ Ubuntu ã®å ´åˆ) を使用ã—ã¦æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:78 msgid "Install with ``pip`` (the Python package manager)." msgstr "``pip`` (Python パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼) ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:81 msgid "Installing `ansible-core`" msgstr "`ansible-core` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:83 msgid "Ansible also distributes a minimalist object called ``ansible-core`` (or ``ansible-base`` in version 2.10). It contains the Ansible language, runtime, and a short list of core modules and other plugins. You can build functionality on top of ``ansible-core`` by installing collections from Galaxy, Automation Hub, or any other source." msgstr "Ansible ã¯ã€``ansible-core`` (ã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ã® ``ansible-base``) ã¨å‘¼ã°ã‚Œã‚‹æœ€å°é™ã®ã‚ªãƒ–ジェクトをé…布ã—ã¦ã„ã¾ã™ã€‚ã“れã«ã¯ã€Ansible 言語ã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã€ãŠã‚ˆã³ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãã®ä»–ã®ãƒ—ラグイン一覧ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€Galaxyã€Automation Hubã€ã¾ãŸã¯ãã®ä»–ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ã§ã€``ansible-core`` ã«æ©Ÿèƒ½ã‚’構築ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:85 msgid "You can choose any of the following ways to install ``ansible-core``:" msgstr "次ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã‚’é¸æŠžã—ã¦ã€``ansible-core`` をインストールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:87 msgid "Install ``ansible-core`` (version 2.11 and greater) or ``ansible-base`` (version 2.10) with ``pip``." msgstr "``pip`` を使用ã—ã¦ã€``ansible-core`` (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.11 以上) ã¾ãŸã¯ ``ansible-base`` (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10) をインストールã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:88 msgid "Install ``ansible-core`` from source from the ansible/ansible GitHub repository to access the development (``devel``) version to develop or test the latest features." msgstr "ansible/ansible GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ ``ansible-core`` をインストールã—ã¦é–‹ç™º (``devel``) ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€æœ€æ–°ã®æ©Ÿèƒ½ã‚’開発ã¾ãŸã¯ãƒ†ã‚¹ãƒˆã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:92 msgid "You should only run ``ansible-core`` from ``devel`` if you are modifying ``ansible-core``, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point." msgstr "``devel`` ã‹ã‚‰ ``ansible-core`` を実行ã™ã‚‹ã®ã¯ã€``ansible-core`` を変更ã™ã‚‹å ´åˆã‚„ã€é–‹ç™ºæ™‚ã«æ©Ÿèƒ½ã‚’試ã™å ´åˆã«ã—ã¦ãã ã•ã„。ã“ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ€¥é€Ÿã«å¤‰åŒ–ã™ã‚‹ãŸã‚ã€ã„ã¤ã§ã‚‚ä¸å®‰å®šã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:94 msgid "Ansible generally creates new releases twice a year. See :ref:`release_and_maintenance` for information on release timing and maintenance of older releases." msgstr "Ansible ã¯é€šå¸¸ã€æ–°ã—ã„リリースを 1 å¹´ã« 2 回作æˆã—ã¾ã™ã€‚リリース時期ã€ãŠã‚ˆã³å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¿å®ˆã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€ã€Œ:ref:`release_and_maintenance`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:99 msgid "Installing and upgrading Ansible with ``pip``" msgstr "``pip`` を使用ã—㟠Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŠã‚ˆã³ã‚¢ãƒƒãƒ—グレード" #: ../../rst/installation_guide/intro_installation.rst:101 msgid "Ansible can be installed on many systems with ``pip``, the Python package manager." msgstr "Ansible ã¯ã€Python パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ ``pip`` を使用ã—ã¦ã€å¤šæ•°ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:104 msgid "Prerequisites: Installing ``pip``" msgstr "剿æ¡ä»¶: ``pip`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:106 msgid "If ``pip`` is not already available on your system, run the following commands to install it::" msgstr "ã”使用ã®ã‚·ã‚¹ãƒ†ãƒ ã§ ``pip`` を利用ã§ããªã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:111 msgid "You may need to perform some additional configuration before you are able to run Ansible. See the Python documentation on `installing to the user site`_ for more information." msgstr "Ansible を実行ã™ã‚‹å‰ã«è¿½åŠ ã®è¨­å®šãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚詳細ã¯ã€Python ドキュメント「`ユーザーサイトã¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«`_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:116 msgid "Installing Ansible with ``pip``" msgstr "``pip`` を使用ã—㟠Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:120 #: ../../rst/installation_guide/intro_installation.rst:152 #: ../../rst/installation_guide/intro_installation.rst:391 #: ../../rst/installation_guide/intro_installation.rst:490 msgid "If you have Ansible 2.9 or older installed or Ansible 3, see :ref:`pip_upgrade`." msgstr "Ansible 2.9 以å‰ã‚‚ã—ã㯠Ansible 3 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ:ref:`pip_upgrade`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:122 msgid "Once ``pip`` is installed, you can install Ansible::" msgstr "``pip`` をインストールã—ãŸã‚‰ã€Ansible をインストールã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:126 msgid "In order to use the ``paramiko`` connection plugin or modules that require ``paramiko``, install the required module [1]_::" msgstr "``paramiko`` ã‚’å¿…è¦ã¨ã™ã‚‹ ``paramiko`` connection プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã«ã¯ã€å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« [1]_ をインストールã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:130 msgid "If you wish to install Ansible globally, run the following commands::" msgstr "Ansible をグローãƒãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:137 msgid "Running ``pip`` with ``sudo`` will make global changes to the system. Since ``pip`` does not coordinate with system package managers, it could make changes to your system that leaves it in an inconsistent or non-functioning state. This is particularly true for macOS. Installing with ``--user`` is recommended unless you understand fully the implications of modifying global files on the system." msgstr "``sudo`` ã§ ``pip`` を実行ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã«ã‚°ãƒ­ãƒ¼ãƒãƒ«ã®å¤‰æ›´ãŒè¡Œã‚れã¾ã™ã€‚``pip`` ã¯ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¨é€£æºã—ãªã„ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã€ã‚·ã‚¹ãƒ†ãƒ ãŒä¸€è²«æ€§ã®ãªã„状態ã¾ãŸã¯æ©Ÿèƒ½ã—ãªã„状態ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ç‰¹ã« MacOS ã«å½“ã¦ã¯ã¾ã‚Šã¾ã™ã€‚システム上ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ•ァイルを変更ã—ãŸå ´åˆã®å½±éŸ¿ã‚’完全ã«ç†è§£ã—ã¦ã„ãªã„é™ã‚Šã€``--user`` ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:141 msgid "Older versions of ``pip`` default to http://pypi.python.org/simple, which no longer works. Please make sure you have the latest version of ``pip`` before installing Ansible. If you have an older version of ``pip`` installed, you can upgrade by following `pip's upgrade instructions `_ ." msgstr "å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``pip`` ã¯ã€http://pypi.python.org/simple ãŒãƒ‡ãƒ•ォルトã¨ãªã‚Šã¾ã™ã€‚ã“ã‚Œã¯æœ‰åйã§ã¯ãªããªã‚Šã¾ã—ãŸã€‚Ansible をインストールã™ã‚‹å‰ã«ã€``pip`` ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãŠæŒã¡ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``pip`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã¯ã€`pip ã®ã‚¢ãƒƒãƒ—グレード手順 `_ ã§ã‚¢ãƒƒãƒ—グレードã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:148 msgid "Installing Ansible in a virtual environment with ``pip``" msgstr "``pip`` を使用ã—ã¦ä»®æƒ³ç’°å¢ƒã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:154 msgid "Ansible can also be installed inside a new or existing ``virtualenv``::" msgstr "Ansible ã¯ã€æ–°è¦ã¾ãŸã¯æ—¢å­˜ã® ``virtualenv`` 内ã«ã‚‚インストールã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:163 msgid "Upgrading Ansible with ``pip``" msgstr "``pip`` を使用ã—㟠Ansible ã®ã‚¢ãƒƒãƒ—グレード" #: ../../rst/installation_guide/intro_installation.rst:166 msgid "Upgrading from 2.9 or earlier to 2.10" msgstr "2.9 以å‰ã‹ã‚‰ 2.10 ã¸ã®ã‚¢ãƒƒãƒ—グレード" #: ../../rst/installation_guide/intro_installation.rst:168 msgid "Starting in version 2.10, Ansible is made of two packages. When you upgrade from version 2.9 and older to version 2.10 or later, you need to uninstall the old Ansible version (2.9 or earlier) before upgrading. If you do not uninstall the older version of Ansible, you will see the following message, and no change will be performed:" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã€Ansible 㯠2 ã¤ã®ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã§æ§‹æˆã•れã¦ã„ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 以å‰ã‹ã‚‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã¨ãã«ã€ã‚¢ãƒƒãƒ—グレードå‰ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (2.9 以å‰) をアンインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible をアンインストールã—ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã€å¤‰æ›´ã¯è¡Œã‚れã¾ã›ã‚“。" #: ../../rst/installation_guide/intro_installation.rst:183 msgid "As explained by the message, to upgrade you must first remove the version of Ansible installed and then install it to the latest version." msgstr "メッセージã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã«ã¯ã€æœ€åˆã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—㟠Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã—ã¦ã‹ã‚‰ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:192 msgid "Upgrading from Ansible 3 or ansible-core 2.10" msgstr "Ansible 3 ã¾ãŸã¯ ansible-core 2.10 ã‹ã‚‰ã®ã‚¢ãƒƒãƒ—グレード" #: ../../rst/installation_guide/intro_installation.rst:194 msgid "``ansible-base`` only exists for version 2.10 and in Ansible 3. In 2.11 and later, the package is called ``ansible-core``. Before installing ``ansible-core`` or Ansible 4, you must uninstall ``ansible-base`` if you have installed Ansible 3 or ``ansible-base`` 2.10." msgstr "``ansible-base`` ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ãŠã‚ˆã³ Ansible 3 ã«ã®ã¿åŒæ¢±ã•れã¾ã™ã€‚ã“ã®ãƒ‘ッケージã¯ã€2.11 以é™ã¯ ``ansible-core`` ã¨å‘¼ã°ã‚Œã¾ã™ã€‚``ansible-core`` ã¾ãŸã¯ Ansible 4 をインストールã™ã‚‹å‰ã« Ansible 3 ã¾ãŸã¯ ``ansible-base`` 2.10 をインストールã—ã¦ã„ã‚‹å ´åˆã¯ã€``ansible-base`` をアンインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:197 msgid "To upgrade to ``ansible-core``:" msgstr "``ansible-core`` ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:204 msgid "To upgrade to Ansible 4:" msgstr "Ansible 4 ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:216 msgid "Installing Ansible on specific operating systems" msgstr "特定ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:218 msgid "Follow these instructions to install the Ansible community package on a variety of operating systems." msgstr "ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã£ã¦ã€ã•ã¾ã–ã¾ãªã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã« Ansible コミュニティーパッケージをインストールã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:221 msgid "Installing Ansible on RHEL, CentOS, or Fedora" msgstr "RHELã€CentOSã€ã¾ãŸã¯ Fedora ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:223 #: ../../rst/installation_guide/intro_installation.rst:608 msgid "On Fedora:" msgstr "Fedora ã®å ´åˆ:" #: ../../rst/installation_guide/intro_installation.rst:229 msgid "On RHEL:" msgstr "RHEL ã®å ´åˆ:" #: ../../rst/installation_guide/intro_installation.rst:235 msgid "On CentOS:" msgstr "CentOS ã®å ´åˆ:" #: ../../rst/installation_guide/intro_installation.rst:242 msgid "RPMs for RHEL 7 and RHEL 8 are available from the `Ansible Engine repository `_." msgstr "RHEL 7 ãŠã‚ˆã³ RHEL 8 ã® RPM ã¯ã€`Ansible Engine リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:244 msgid "To enable the Ansible Engine repository for RHEL 8, run the following command:" msgstr "RHEL 8 用㮠Ansible Engine リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’有効ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:250 msgid "To enable the Ansible Engine repository for RHEL 7, run the following command:" msgstr "RHEL 7 用㮠Ansible Engine リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’有効ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:256 msgid "RPMs for currently supported versions of RHEL and CentOS are also available from `EPEL `_." msgstr "ç¾åœ¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® RHEL ãŠã‚ˆã³ CentOS ã®å ´åˆã¯ã€`EPEL `_ ã‹ã‚‰ã‚‚利用ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:260 msgid "Since Ansible 2.10 for RHEL is not available at this time, continue to use Ansible 2.9." msgstr "ç¾åœ¨ã€RHEL ã§ã¯ Ansible 2.10 ãŒåˆ©ç”¨ã§ããªã„ãŸã‚ã€å¼•ãç¶šã Ansible 2.9 を使用ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:262 msgid "Ansible can manage older operating systems that contain Python 2.6 or higher." msgstr "Ansible ã¯ã€Python 2.6 以é™ãŒå«ã¾ã‚Œã‚‹å¤ã„オペレーティングシステムを管ç†ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:267 msgid "Installing Ansible on Ubuntu" msgstr "Ubuntu ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:269 msgid "Ubuntu builds are available `in a PPA here `_." msgstr "Ubuntu ビルド㯠`PPA `_ ã§åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:271 msgid "To configure the PPA on your machine and install Ansible run these commands:" msgstr "自分ã®ãƒžã‚·ãƒ³ã« PPA を設定ã—㦠Ansible をインストールã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:280 msgid "On older Ubuntu distributions, \"software-properties-common\" is called \"python-software-properties\". You may want to use ``apt-get`` instead of ``apt`` in older versions. Also, be aware that only newer distributions (in other words, 18.04, 18.10, and so on) have a ``-u`` or ``--update`` flag, so adjust your script accordingly." msgstr "以å‰ã® Ubuntu ディストリビューションã§ã¯ã€ã€Œsoftware-properties-commonã€ã¯ã€Œpython-software-propertiesã€ã¨å‘¼ã°ã‚Œã‚‹ãŸã‚ã€éŽåŽ»ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ ``apt`` ã§ã¯ãªã ``apt-get`` を使用ã™ã‚‹ã»ã†ãŒé©ã—ã¦ã„ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã¾ãŸã€``-u`` フラグã¾ãŸã¯ ``--update`` ãƒ•ãƒ©ã‚°ãŒæŒ‡å®šã§ãã‚‹ã®ã¯ã€æ–°ã—ã„ディストリビューション (18.04ã€18.10 ãªã©) ã«é™å®šã•れるã“ã¨ã«æ³¨æ„ã—ã€ã‚¹ã‚¯ãƒªãƒ—トを調整ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:282 msgid "Debian/Ubuntu packages can also be built from the source checkout, run:" msgstr "Debian/Ubuntu パッケージã¯ã€ã‚½ãƒ¼ã‚¹ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‹ã‚‰æ§‹ç¯‰ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下を実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:289 msgid "Installing Ansible on Debian" msgstr "Ansible ã® Debian ã¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:291 msgid "Debian users may use the same source as the Ubuntu PPA (using the following table)." msgstr "Debian ユーザー㯠Ubuntu PPA ã¨åŒã˜ã‚½ãƒ¼ã‚¹ã‚’使用ã§ãã¾ã™ï¼ˆä»¥ä¸‹ã®è¡¨ã‚’使用)。" #: ../../rst/installation_guide/intro_installation.rst:296 msgid "Debian" msgstr "Debian" #: ../../rst/installation_guide/intro_installation.rst:298 msgid "Ubuntu" msgstr "Ubuntu" #: ../../rst/installation_guide/intro_installation.rst:299 msgid "Debian 11 (Bullseye)" msgstr "Debian 11 (Bullseye)" #: ../../rst/installation_guide/intro_installation.rst:300 #: ../../rst/installation_guide/intro_installation.rst:303 #: ../../rst/installation_guide/intro_installation.rst:306 #: ../../rst/installation_guide/intro_installation.rst:309 msgid "->" msgstr "->" #: ../../rst/installation_guide/intro_installation.rst:301 msgid "Ubuntu 20.04 (Focal)" msgstr "Ubuntu 20.04 (Focal)" #: ../../rst/installation_guide/intro_installation.rst:302 msgid "Debian 10 (Buster)" msgstr "Debian 10 (Buster)" #: ../../rst/installation_guide/intro_installation.rst:304 msgid "Ubuntu 18.04 (Bionic)" msgstr "Ubuntu 18.04 (Bionic)" #: ../../rst/installation_guide/intro_installation.rst:305 msgid "Debian 9 (Stretch)" msgstr "Debian 9 (Stretch)" #: ../../rst/installation_guide/intro_installation.rst:307 msgid "Ubuntu 16.04 (Xenial)" msgstr "Ubuntu 16.04 (Xenial)" #: ../../rst/installation_guide/intro_installation.rst:308 msgid "Debian 8 (Jessie)" msgstr "Debian 8 (Jessie)" #: ../../rst/installation_guide/intro_installation.rst:310 msgid "Ubuntu 14.04 (Trusty)" msgstr "Ubuntu 14.04 (Trusty)" #: ../../rst/installation_guide/intro_installation.rst:314 msgid "As of Ansible 4.0.0, new releases will only be generated for Ubuntu 18.04 (Bionic) or later releases." msgstr "Ansible 4.0.0 ã®æ™‚点ã§ã€æ–°ã—ã„リリース㯠Ubuntu 18.04 (Bionic) 以é™ã®ãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã—ã¦ã®ã¿ç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:316 msgid "Add the following line to ``/etc/apt/sources.list`` or ``/etc/apt/sources.list.d/ansible.list``:" msgstr "以下ã®è¡Œã‚’ ``/etc/apt/sources.list`` ã¾ãŸã¯ ``/etc/apt/sources.list.d/ansible.list`` ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:322 msgid "Example for Debian 11 (Bullseye)" msgstr "Debian 11 ã®ä¾‹ (Bullseye)" #: ../../rst/installation_guide/intro_installation.rst:328 msgid "Then run these commands:" msgstr "次ã«ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:337 msgid "Installing Ansible on Gentoo with portage" msgstr "portage を使用ã—㟠Gentoo ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:343 msgid "To install the newest version, you may need to unmask the Ansible package prior to emerging:" msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å‰ã« Ansible パッケージã®ãƒžã‚¹ã‚¯è§£é™¤ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:350 msgid "Installing Ansible on FreeBSD" msgstr "FreeBSD ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:352 msgid "Though Ansible works with both Python 2 and 3 versions, FreeBSD has different packages for each Python version. So to install you can use:" msgstr "Ansible 㯠Python 2 ãŠã‚ˆã³ 3 ã®ä¸¡ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‹•作ã—ã¾ã™ãŒã€FreeBSD パッケージã¯å„ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ç•°ãªã‚Šã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:359 msgid "or:" msgstr "ã¾ãŸã¯" #: ../../rst/installation_guide/intro_installation.rst:366 msgid "You may also wish to install from ports, run:" msgstr "ãƒãƒ¼ãƒˆã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下を実行ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:372 msgid "You can also choose a specific version, for example ``ansible25``." msgstr "特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (例: ``ansible25``) ã‚’é¸æŠžã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:374 msgid "Older versions of FreeBSD worked with something like this (substitute for your choice of package manager):" msgstr "以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® FreeBSD ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚‚ã®ã§å‹•作ã—ã¾ã™ (パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ä»£ã‚りã§ã™)。" #: ../../rst/installation_guide/intro_installation.rst:383 msgid "Installing Ansible on macOS" msgstr "MacOS ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:385 msgid "The preferred way to install Ansible on a Mac is with ``pip``." msgstr "Mac ã« Ansible をインストールã™ã‚‹ã«ã¯ ``pip`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:387 msgid "The instructions can be found in :ref:`from_pip`. If you are running macOS version 10.12 or older, then you should upgrade to the latest ``pip`` to connect to the Python Package Index securely. It should be noted that pip must be run as a module on macOS, and the linked ``pip`` instructions will show you how to do that." msgstr "手順ã¯ã€Œ:ref:`from_pip`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。MacOS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 10.12 以å‰ã‚’実行ã—ã¦ã„ã‚‹å ´åˆã«ã€Python Package Index ã«å®‰å…¨ã«æŽ¥ç¶šã™ã‚‹ã«ã¯æœ€æ–°ã® ``pip`` ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚pip ã¯ã€MacOS ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã€ãƒªãƒ³ã‚¯ã•れã¦ã„ã‚‹ ``pip`` ã®æ‰‹é †ã«ãã®å®Ÿè¡Œæ–¹æ³•ãŒç¤ºã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:396 msgid "macOS by default is configured for a small number of file handles, so if you want to use 15 or more forks you'll need to raise the ulimit with ``sudo launchctl limit maxfiles unlimited``. This command can also fix any \"Too many open files\" errors." msgstr "MacOS ã¯ãƒ‡ãƒ•ォルトã§ã€å°‘æ•°ã®ãƒ•ァイルãƒãƒ³ãƒ‰ãƒ«å‘ã‘ã«è¨­å®šã•れã¦ã„ã‚‹ãŸã‚ã€15 個以上ã®ãƒ•ォークを使用ã™ã‚‹å ´åˆã¯ã€``sudo launchctl limit maxfiles unlimited`` を使用ã—㦠ulimit を増やã™å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ã€ŒToo many open filesã€ã‚¨ãƒ©ãƒ¼ã‚’修正ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:398 msgid "If you are installing on macOS Mavericks (10.9), you may encounter some noise from your compiler. A workaround is to do the following::" msgstr "MacOS Mavericks (10.9) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å ´åˆã¯ã€ã‚³ãƒ³ãƒ‘イラーã‹ã‚‰ä½•らã‹ã®å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚回é¿ç­–ã¨ã—ã¦ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:406 msgid "Installing Ansible on Solaris" msgstr "Solaris ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:408 msgid "Ansible is available for Solaris as `SysV package from OpenCSW `_." msgstr "Solaris ã§ã¯ã€`SysV package from OpenCSW `_ ã¨ã—㦠Ansible を利用ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:418 msgid "Installing Ansible on Arch Linux" msgstr "Arch Linux ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:420 msgid "Ansible is available in the Community repository::" msgstr "Ansible ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:424 msgid "The AUR has a PKGBUILD for pulling directly from GitHub called `ansible-git `_." msgstr "AUR ã«ã¯ã€(`ansible-git `_ ã¨å‘¼ã°ã‚Œã¦ã„ã‚‹) GitHub ã‹ã‚‰ç›´æŽ¥ãƒ—ルã™ã‚‹ãŸã‚ã® PKGBUILD ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:426 msgid "Also see the `Ansible `_ page on the ArchWiki." msgstr "ArchWiki ã®ã€Œ`Ansible `_ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:431 msgid "Installing Ansible on Slackware Linux" msgstr "Slackware Linux ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:433 msgid "Ansible build script is available in the `SlackBuilds.org `_ repository. Can be built and installed using `sbopkg `_." msgstr "Ansible ビルドスクリプト㯠`SlackBuilds.org `_ リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰åˆ©ç”¨ã§ãã¾ã™ã€‚`sbopkg `_ を使用ã—ã¦ãƒ“ルドãŠã‚ˆã³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:436 msgid "Create queue with Ansible and all dependencies::" msgstr "Ansible ãŠã‚ˆã³ã™ã¹ã¦ã®ä¾å­˜é–¢ä¿‚ã‚’å«ã‚€ã‚­ãƒ¥ãƒ¼ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:440 msgid "Build and install packages from a created queuefile (answer Q for question if sbopkg should use queue or package)::" msgstr "作æˆã—㟠queuefile ã‹ã‚‰ãƒ‘ッケージを構築ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ (sbopkg ãŒã‚­ãƒ¥ãƒ¼ã¾ãŸã¯ãƒ‘ッケージを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã®å•題ã¸ã®å›žç­” Q)。" #: ../../rst/installation_guide/intro_installation.rst:447 msgid "Installing Ansible on Clear Linux" msgstr "Clear Linux ã¸ã® Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:449 msgid "Ansible and its dependencies are available as part of the sysadmin host management bundle::" msgstr "Ansible ãŠã‚ˆã³ãã®ä¾å­˜é–¢ä¿‚ã¯ã€sysadmin ホスト管ç†ãƒãƒ³ãƒ‰ãƒ«ã®ä¸€éƒ¨ã¨ã—ã¦åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:453 msgid "Update of the software will be managed by the swupd tool::" msgstr "ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æ›´æ–°ã¯ã€swupd ツールã«ã‚ˆã‚Šç®¡ç†ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:461 msgid "Installing and running the ``devel`` branch from source" msgstr "ソースã‹ã‚‰ ``devel`` ブランãƒã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŠã‚ˆã³å®Ÿè¡Œ" #: ../../rst/installation_guide/intro_installation.rst:463 msgid "In Ansible 2.10 and later, the `ansible/ansible repository `_ contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core``." msgstr "Ansible 2.10 以é™ã§ã¯ã€`ansible/ansible repository `_ ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã‚’管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚³ãƒ”ーã™ã‚‹ãªã©ã€åŸºæœ¬çš„ãªæ©Ÿèƒ½ã‚„関数ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ ``ansible-core`` ã¨ã—ã¦ã‚‚知られã¦ã„ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:465 msgid "New features are added to ``ansible-core`` on a branch called ``devel``. If you are testing new features, fixing bugs, or otherwise working with the development team on changes to the core code, you can install and run ``devel``." msgstr "新機能㌠``devel`` ブランãƒã® ``ansible-core`` ã«è¿½åŠ ã•れã¾ã—ãŸã€‚新機能ã®ãƒ†ã‚¹ãƒˆã€ãƒã‚°ã®ä¿®æ­£ã€ã¾ãŸã¯ã‚³ã‚¢ã‚³ãƒ¼ãƒ‰ã¸ã®å¤‰æ›´ã«å¯¾ã—ã¦é–‹ç™ºãƒãƒ¼ãƒ ã§ã®ä½œæ¥­ã‚’行ã†å ´åˆã¯ã€``devel`` をインストールã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:469 msgid "You should only install and run the ``devel`` branch if you are modifying ``ansible-core`` or trying out features under development. This is a rapidly changing source of code and can become unstable at any point." msgstr "開発時㫠``ansible-core`` を変更ã—ã€æ©Ÿèƒ½ã‚’試ã™å ´åˆã¯ã€``devel`` ブランãƒã®ã¿ã‚’インストールã—ã€å®Ÿè¡Œã—ã¦ãã ã•ã„。ã“ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ€¥é€Ÿã«å¤‰åŒ–ã™ã‚‹ãŸã‚ã€ã„ã¤ã§ã‚‚ä¸å®‰å®šã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:473 msgid "If you want to use Ansible AWX as the control node, do not install or run the ``devel`` branch of Ansible. Use an OS package manager (like ``apt`` or ``yum``) or ``pip`` to install a stable version." msgstr "Ansible AWX をコントロールノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Ansible ã® ``devel`` ブランãƒã‚’インストールã¾ãŸã¯å®Ÿè¡Œã—ãªã„ã§ãã ã•ã„。OS パッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ (``apt``ã€``yum`` ãªã©) ã¾ãŸã¯ ``pip`` を使用ã—ã¦å®‰å®šã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:475 msgid "If you are running Ansible from source, you may also wish to follow the `Ansible GitHub project `_. We track issues, document bugs, and share feature ideas in this and other related repositories." msgstr "ソースã‹ã‚‰ Ansible を実行ã™ã‚‹å ´åˆã¯ã€`Ansible GitHub プロジェクト `_ ã«å¾“ã£ã¦ã€å•題を追跡ã—ã€ãƒã‚°ã‚’文書化ã—ã€ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã¾ãŸã¯ãã®ä»–ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«é–¢ã™ã‚‹æ©Ÿèƒ½ã®ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’共有ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:477 msgid "For more information on getting involved in the Ansible project, see the :ref:`ansible_community_guide`. For more information on creating Ansible modules and Collections, see the :ref:`developer_guide`." msgstr "Ansible プロジェクトã¸ã®è²¢çŒ®ã®è©³ç´°ã¯ã€ã€Œ:ref:`ansible_community_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible モジュールãŠã‚ˆã³ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½œæˆæ–¹æ³•ã¯ã€ã€Œ:ref:`developer_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:480 msgid "Installing ``devel`` from GitHub with ``pip``" msgstr "``pip`` を使用ã—㟠GitHub ã‹ã‚‰ã® ``devel`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:482 msgid "You can install the ``devel`` branch of ``ansible-core`` directly from GitHub with ``pip``:" msgstr "``pip`` を使用ã—ã¦ã€``ansible-core`` ã® ``devel`` ブランãƒã‚’直接 GitHub ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:494 msgid "You can replace ``devel`` in the URL mentioned above, with any other branch or tag on GitHub to install older versions of Ansible (prior to ``ansible-base`` 2.10.), tagged alpha or beta versions, and release candidates. This installs all of Ansible." msgstr "上記㮠URL ã® ``devel`` ã‚’ã€ä»–ã®ãƒ–ランãƒã¾ãŸã¯ GitHub ã®ã‚¿ã‚°ã«ç½®ãæ›ãˆã¦ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible (``ansible-base`` 2.10 以å‰)ã€ã‚¿ã‚°ä»˜ã‘ã•れ㟠alpha ã¾ãŸã¯ beta ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ãŠã‚ˆã³ãƒªãƒªãƒ¼ã‚¹å€™è£œã‚’インストールã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã™ã¹ã¦ã® Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:500 msgid "See :ref:`from_source` for instructions on how to run ``ansible-core`` directly from source." msgstr "ソースã‹ã‚‰ç›´æŽ¥ ``ansible-core`` を実行ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`from_source`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:504 msgid "Installing ``devel`` from GitHub by cloning" msgstr "クローン作æˆã«ã‚ˆã‚‹ GitHub ã‹ã‚‰ã® ``devel`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:506 msgid "You can install the ``devel`` branch of ``ansible-core`` by cloning the GitHub repository:" msgstr "GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¦ã€``ansible-core`` ã® ``devel`` ブランãƒã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:513 msgid "The default branch is ``devel``." msgstr "デフォルトã®ãƒ–ランãƒã¯ ``devel`` ã§ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:518 msgid "Running the ``devel`` branch from a clone" msgstr "クローンã‹ã‚‰ã® ``devel`` ブランãƒã®å®Ÿè¡Œ" #: ../../rst/installation_guide/intro_installation.rst:520 msgid "``ansible-core`` is easy to run from source. You do not need ``root`` permissions to use it and there is no software to actually install. No daemons or database setup are required." msgstr "``ansible-core`` ソースã‹ã‚‰ã®å®Ÿè¡Œã¯ç°¡å˜ã§ã™ã€‚``root`` パーミッションã¯å¿…è¦ã‚りã¾ã›ã‚“。実際ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚½ãƒ•トウェアã¯ã‚りã¾ã›ã‚“。デーモンやデータベース設定ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/installation_guide/intro_installation.rst:522 msgid "Once you have installed the ``ansible-core`` repository by cloning, setup the Ansible environment:" msgstr "クローン作æˆã«ã‚ˆã‚Š ``ansible-core`` リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’インストールã—ãŸã‚‰ã€Ansible 環境を設定ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:524 msgid "Using Bash:" msgstr "Bash ã®ä½¿ç”¨:" #: ../../rst/installation_guide/intro_installation.rst:530 msgid "Using Fish::" msgstr "Fish ã®ä½¿ç”¨::" #: ../../rst/installation_guide/intro_installation.rst:534 msgid "If you want to suppress spurious warnings/errors, use::" msgstr "誤ã£ãŸè­¦å‘Šã‚„エラーãŒè¡¨ç¤ºã•れãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:538 msgid "If you do not have ``pip`` installed in your version of Python, install it::" msgstr "ãŠä½¿ã„ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã« ``pip`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:543 msgid "Ansible also uses the following Python modules that need to be installed [1]_:" msgstr "Ansible ã¯ã€ä»¥ä¸‹ã® Python モジュールも使用ã—ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚‚インストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ [1]_。" #: ../../rst/installation_guide/intro_installation.rst:549 msgid "To update the ``devel`` branch of ``ansible-core`` on your local machine, use pull-with-rebase so any local changes are replayed." msgstr "ローカルマシン㧠``ansible-core`` ã® ``devel`` ブランãƒã‚’æ›´æ–°ã™ã‚‹ã«ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã®å¤‰æ›´ãŒå†ç”Ÿã•れるよã†ã« pull-with-rebase を使用ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:560 msgid "After you run the the env-setup script, you will be running from the source code. The default inventory file will be ``/etc/ansible/hosts``. You can optionally specify an inventory file (see :ref:`inventory`) other than ``/etc/ansible/hosts``:" msgstr "env-setup スクリプトã®å®Ÿè¡Œå¾Œã«ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‹ã‚‰å®Ÿè¡Œã•れã¾ã™ã€‚デフォルトã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㯠``/etc/ansible/hosts`` ã«ãªã‚Šã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€``/etc/ansible/hosts`` 以外ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを指定ã§ãã¾ã™ (:ref:`inventory` ã‚’å‚ç…§)。" #: ../../rst/installation_guide/intro_installation.rst:567 msgid "You can read more about the inventory file at :ref:`inventory`." msgstr "インベントリーファイルã®è©³ç´°ã¯ã€:ref:`inventory`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:570 msgid "Confirming your installation" msgstr "インストールã®ç¢ºèª" #: ../../rst/installation_guide/intro_installation.rst:572 msgid "Whatever method of installing Ansible you chose, you can test that it is installed correctly with a ping command:" msgstr "é¸æŠžã—㟠Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã«é–¢ä¿‚ãªãã€ping コマンドを使用ã—ã¦æ­£ã—ãインストールã•れã¦ã„ã‚‹ã“ã¨ã‚’テストã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:578 msgid "You can also use \"sudo make install\"." msgstr "「sudo make installã€ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:583 msgid "Finding tarballs of tagged releases" msgstr "タグ付ã‘ã•れãŸãƒªãƒªãƒ¼ã‚¹ã® tarball ã®å ´æ‰€" #: ../../rst/installation_guide/intro_installation.rst:585 msgid "If you are packaging Ansible or wanting to build a local package yourself, and you want to avoid a git checkout, you can use a tarball of a tagged release. You can download the latest stable release from PyPI's `ansible package page `_. If you need a specific older version, beta version, or release candidate, you can use the pattern ``pypi.python.org/packages/source/a/ansible/ansible-{{VERSION}}.tar.gz``. VERSION must be the full version number, for example 3.1.0 or 4.0.0b2. You can make VERSION a variable in your package managing system that you update in one place whenever you package a new version." msgstr "nsible をパッケージ化ã™ã‚‹å ´åˆã‚„ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã‚’è‡ªåˆ†ã§æ§‹ç¯‰ã—ã€git ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’回é¿ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã‚¿ã‚°ä»˜ã‘ã•れãŸãƒªãƒªãƒ¼ã‚¹ã® tarball を使用ã§ãã¾ã™ã€‚PyPI ã® `ansible package page `_ ã‹ã‚‰æœ€æ–°ã®å®‰å®šã—ãŸãƒªãƒªãƒ¼ã‚¹ã‚’ダウンロードã§ãã¾ã™ã€‚å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€beta ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ã¾ãŸã¯ãƒªãƒªãƒ¼ã‚¹å€™è£œãŒå¿…è¦ãªå ´åˆã¯ã€``pypi.python.org/packages/source/a/ansible/ansible-{{VERSION}}.tar.gz`` パターンを使用ã§ãã¾ã™ã€‚VERSION ã¯å®Œå…¨ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå· (3.1.0ã€4.0.0b2 ãªã©) ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚VERSION ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’パッケージ化ã™ã‚‹ãŸã³ã« 1 ã‚«æ‰€ã§æ›´æ–°ã™ã‚‹ãƒ‘ッケージ管ç†ã‚·ã‚¹ãƒ†ãƒ ã®å¤‰æ•°ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:589 msgid "If you are creating your own Ansible package, you must also download or package ``ansible-core`` (or ``ansible-base`` for packages based on 2.10.x) from PyPI as part of your Ansible package. You must specify a particular version. Visit the PyPI project pages to download files for `ansible-core `_ or `ansible-base `_." msgstr "独自㮠Ansible パッケージを作æˆã™ã‚‹å ´åˆã¯ã€Ansible パッケージã®ä¸€éƒ¨ã¨ã—㦠PyPI ã‹ã‚‰ ``ansible-core`` (ã¾ãŸã¯ ``ansible-base`` 2.10.x ã«åŸºã¥ãパッケージã®å ´åˆ) をダウンロードã¾ãŸã¯ãƒ‘ッケージ化ã™ã‚‹å¿…è¦ã‚‚ã‚りã¾ã™ã€‚特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚PyPI プロジェクトページã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€`ansible-core `_ ã¾ãŸã¯ `ansible-base `_ ã®ãƒ•ァイルをダウンロードã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:591 msgid "These releases are also tagged in the `git repository `_ with the release version." msgstr "ã“れらã®ãƒªãƒªãƒ¼ã‚¹ã¯ã€`git リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã§ã‚‚リリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚¿ã‚°ä»˜ã‘ã•れã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:597 msgid "Adding Ansible command shell completion" msgstr "Ansible コマンドシェル補完ã®è¿½åŠ " #: ../../rst/installation_guide/intro_installation.rst:599 msgid "As of Ansible 2.9, you can add shell completion of the Ansible command line utilities by installing an optional dependency called ``argcomplete``. ``argcomplete`` supports bash, and has limited support for zsh and tcsh." msgstr "Ansible 2.9 ã®æ™‚点ã§ã€``argcomplete`` ã¨å‘¼ã°ã‚Œã‚‹ä»»æ„ã®ä¾å­˜é–¢ä¿‚をインストールã—ã¦ã€Ansible コマンドラインユーティリティーã®ã‚·ã‚§ãƒ«è£œå®Œã‚’追加ã§ãã¾ã™ã€‚``argcomplete`` 㯠bash をサãƒãƒ¼ãƒˆã—ã€åˆ¶é™ä»˜ãã§ zsh ãŠã‚ˆã³ tcsh ã®ã‚µãƒãƒ¼ãƒˆã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:601 msgid "You can install ``python-argcomplete`` from EPEL on Red Hat Enterprise based distributions, and or from the standard OS repositories for many other distributions." msgstr "``python-argcomplete`` ã¯ã€Red Hat Enterprise ベースã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§ã¯ EPEL ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã€ãã®ä»–ã®å¤šãã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§ã¯æ¨™æº– OS リãƒã‚¸ãƒˆãƒªãƒ¼ã§å…¥æ‰‹ã§ãã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:603 msgid "For more information about installation and configuration, see the `argcomplete documentation `_." msgstr "インストールã¨è¨­å®šã®è©³ç´°ã¯ã€`argcomplete ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:606 msgid "Installing ``argcomplete`` on RHEL, CentOS, or Fedora" msgstr "RHELã€CentOSã€ã¾ãŸã¯ Fedora ã¸ã® ``argcomplete`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:614 msgid "On RHEL and CentOS:" msgstr "RHEL ãŠã‚ˆã³ CentOS ã®å ´åˆ:" #: ../../rst/installation_guide/intro_installation.rst:623 msgid "Installing ``argcomplete`` with ``apt``" msgstr "``apt`` を使用ã—㟠``argcomplete`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:631 msgid "Installing ``argcomplete`` with ``pip``" msgstr "``pip`` を使用ã—㟠``argcomplete`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/installation_guide/intro_installation.rst:638 msgid "Configuring ``argcomplete``" msgstr "``argcomplete`` ã®è¨­å®š" #: ../../rst/installation_guide/intro_installation.rst:640 msgid "There are 2 ways to configure ``argcomplete`` to allow shell completion of the Ansible command line utilities: globally or per command." msgstr "Ansible コマンドラインユーティリティーã®ã‚·ã‚§ãƒ«è£œå®Œã‚’å¯èƒ½ã«ã™ã‚‹ ``argcomplete`` ã®è¨­å®šæ–¹æ³•ã¯ã€2 通りã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:643 msgid "Global configuration" msgstr "グローãƒãƒ«è¨­å®š" #: ../../rst/installation_guide/intro_installation.rst:645 msgid "Global completion requires bash 4.2." msgstr "グローãƒãƒ«è£œå®Œã«ã¯ bash 4.2 ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:651 msgid "This will write a bash completion file to a global location. Use ``--dest`` to change the location." msgstr "ã“れã«ã‚ˆã‚Šã€bash 補完ファイルãŒã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«æ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ロケーションを変更ã™ã‚‹ã«ã¯ ``--dest`` を使用ã—ã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:654 msgid "Per command configuration" msgstr "コマンドã”ã¨ã®è¨­å®š" #: ../../rst/installation_guide/intro_installation.rst:656 msgid "If you do not have bash 4.2, you must register each script independently." msgstr "bash 4.2 ãŒãªã„å ´åˆã¯ã€å„スクリプトを個別ã«ç™»éŒ²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:670 msgid "You should place the above commands into your shells profile file such as ``~/.profile`` or ``~/.bash_profile``." msgstr "上記ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’ã€``~/.profile``ã€``~/.bash_profile`` ãªã©ã®ã‚·ã‚§ãƒ«ãƒ—ロファイルファイルã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/installation_guide/intro_installation.rst:673 msgid "Using ``argcomplete`` with zsh or tcsh" msgstr "zsh ã¾ãŸã¯ tcsh ã§ ``argcomplete`` を使用" #: ../../rst/installation_guide/intro_installation.rst:675 msgid "See the `argcomplete documentation `_." msgstr "`argcomplete ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:680 msgid ":ref:`intro_adhoc`" msgstr ":ref:`intro_adhoc`" #: ../../rst/installation_guide/intro_installation.rst:681 msgid "Examples of basic commands" msgstr "基本コマンドã®ä¾‹" #: ../../rst/installation_guide/intro_installation.rst:682 msgid ":ref:`working_with_playbooks`" msgstr ":ref:`working_with_playbooks`" #: ../../rst/installation_guide/intro_installation.rst:683 msgid "Learning ansible's configuration management language" msgstr "Ansible ã®è¨­å®šç®¡ç†è¨€èªžã®æ¦‚è¦" #: ../../rst/installation_guide/intro_installation.rst:684 msgid ":ref:`installation_faqs`" msgstr ":ref:`installation_faqs`" #: ../../rst/installation_guide/intro_installation.rst:685 msgid "Ansible Installation related to FAQs" msgstr "FAQ ã«é–¢é€£ã™ã‚‹ Ansible インストール" #: ../../rst/installation_guide/intro_installation.rst:686 msgid "`Mailing List `_" msgstr "`メーリングリスト `_" #: ../../rst/installation_guide/intro_installation.rst:687 msgid "Questions? Help? Ideas? Stop by the list on Google Groups" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã‹ã€‚ã”ææ¡ˆã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google グループã®ä¸€è¦§ã‚’ã”覧ãã ã•ã„。" #: ../../rst/installation_guide/intro_installation.rst:688 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/installation_guide/intro_installation.rst:689 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/installation_guide/intro_installation.rst:691 msgid "``paramiko`` was included in Ansible's ``requirements.txt`` prior to 2.8." msgstr "``paramiko`` ã¯ã€2.8 以å‰ã® Ansible ã® ``requirements.txt`` ã«åŒæ¢±ã•れã¦ã„ã¾ã™ã€‚" #~ msgid "This page describes how to install Ansible on different platforms. Ansible is an agentless automation tool that by default manages machines over the SSH protocol. Once installed, Ansible does not add a database, and there will be no daemons to start or keep running. You only need to install it on one machine (which could easily be a laptop) and it can manage an entire fleet of remote machines from that central point. When Ansible manages remote machines, it does not leave software installed or running on them, so there's no real question about how to upgrade Ansible when moving to a new version." #~ msgstr "ã“ã“ã§ã¯ã€ã•ã¾ã–ã¾ãªãƒ—ラットフォーム㫠Ansible をインストールã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚Ansible ã¯ã€ãƒ‡ãƒ•ォルト㧠SSH プロトコルを介ã—ã¦ãƒžã‚·ãƒ³ã‚’管ç†ã™ã‚‹ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆãƒ¬ã‚¹è‡ªå‹•化ツールã§ã™ã€‚インストールã—ã¦ã‚‚ã€Ansible ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’追加ã›ãšã€èµ·å‹•ã¾ãŸã¯ç¨¼åƒã—ç¶šã‘るデーモンもã‚りã¾ã›ã‚“。Ansible ã‚’ 1 å°ã®ãƒžã‚·ãƒ³ (ラップトップã§ã‚‚å¯) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã ã‘ã§ã€ãã®ãƒžã‚·ãƒ³ã‹ã‚‰ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³å…¨ä½“を一元管ç†ã§ãã¾ã™ã€‚Ansible ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã‚’管ç†ã™ã‚‹å ´åˆã¯ã€ã‚½ãƒ•トウェアをマシンã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã¾ã¾ã€ã‚ã‚‹ã„ã¯å®Ÿè¡Œã—ãŸã¾ã¾ã«ã™ã‚‹ã“ã¨ãŒãªã„ãŸã‚ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ç§»è¡Œã™ã‚‹éš›ã« Ansible ã®ã‚¢ãƒƒãƒ—グレードãŒå•題ã«ãªã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #~ msgid "You install Ansible on a control node, which then uses SSH (by default) to communicate with your managed nodes (those end devices you want to automate)." #~ msgstr "Ansible をコントロールノードã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€SSH (デフォルト) を使用ã—ã¦ç®¡ç†ãƒŽãƒ¼ãƒ‰ (自動化ã™ã‚‹ã‚¨ãƒ³ãƒ‰ãƒ‡ãƒã‚¤ã‚¹) ã¨é€šä¿¡ã—ã¾ã™ã€‚" #~ msgid "Currently Ansible can be run from any machine with Python 2 (version 2.7) or Python 3 (versions 3.5 and higher) installed. Ansible 2.11 will make Python 3.8 a soft dependency for the control node, but will function with the aforementioned requirements. Ansible 2.12 will require Python 3.8 or newer to function on the control node. Starting with Ansible 2.11, the project will only be packaged for Python 3.8 and newer. This includes Red Hat, Debian, CentOS, macOS, any of the BSDs, and so on. Windows is not supported for the control node, read more about this in `Matt Davis's blog post `_." #~ msgstr "ç¾åœ¨ã€Ansible ã¯ã€Python 2 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.7) ã¾ãŸã¯ Python 3 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3.5 以é™) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„れã°ã©ã®ãƒžã‚·ãƒ³ã‹ã‚‰ã§ã‚‚実行ã§ãã¾ã™ã€‚Ansible 2.11 ã¯ã€Python 3.8 をコントロールノードã®ã‚½ãƒ•トä¾å­˜é–¢ä¿‚ã«ã—ã¾ã™ãŒã€å‰è¿°ã®è¦ä»¶ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚Ansible 2.12 ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§æ©Ÿèƒ½ã™ã‚‹ã«ã¯ã€Python 3.8 以é™ãŒå¿…è¦ã§ã™ã€‚Ansible 2.11 以é™ã§ã¯ã€ã“ã®ãƒ—ロジェクト㯠Python 3.8 以é™ã«å¯¾ã—ã¦ã®ã¿ãƒ‘ッケージ化ã•れã¾ã™ã€‚ã“れã«ã¯ã€Red Hatã€Debianã€CentOSã€MacOS ã‚’ã¯ã˜ã‚ã€å„種 BSD ãªã©ãŒå«ã¾ã‚Œã¾ã™ã€‚コントロールノードã§ã¯ã€Windows ã®ã‚µãƒãƒ¼ãƒˆã¯ã‚りã¾ã›ã‚“。詳細ã¯ã€`Matt Davis's blog post `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "When choosing a control node, bear in mind that any management system benefits from being run near the machines being managed. If you are running Ansible in a cloud, consider running it from a machine inside that cloud. In most cases this will work better than on the open Internet." #~ msgstr "ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹ã¨ãã¯ã€ç®¡ç†å¯¾è±¡ã®ãƒžã‚·ãƒ³ã®è¿‘ãã§å®Ÿè¡Œã™ã‚‹ã“ã¨ã«åˆ©ç‚¹ãŒã‚ã‚‹ã“ã¨ã‚’念頭ã«ç½®ã„ã¦ãã ã•ã„。Ansible をクラウドã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã®ãƒžã‚·ãƒ³ã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ã‚ªãƒ¼ãƒ—ンãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆä¸Šã§å®Ÿè¡Œã™ã‚‹ã‚ˆã‚Šã‚‚ã€åŒã˜ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã»ã†ãŒé©åˆ‡ã§ã™ã€‚" #~ msgid "On the managed nodes, you need a way to communicate, which is normally SSH. By default this uses SFTP. If that's not available, you can switch to SCP in :ref:`ansible.cfg `. You also need Python 2 (version 2.6 or later) or Python 3 (version 3.5 or later)." #~ msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã§ã¯é€šä¿¡æ‰‹æ®µãŒå¿…è¦ã§ã™ã€‚通常㯠SSH ãŒä½¿ç”¨ã•れã¾ã™ã€‚デフォルトã§ã¯ SFTP ãŒä½¿ç”¨ã•れã¾ã™ã€‚SFTP を使用ã§ããªã„å ´åˆã¯ã€:ref:`ansible.cfg ` ã§ SCP ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Python 2 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™) ã¾ãŸã¯ Python 3 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3.5 以é™) ã‚‚ å¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "Which Ansible version to install is based on your particular needs. You can choose any of the following ways to install Ansible:" #~ msgstr "インストールã™ã‚‹ Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ç‰¹å®šã®ãƒ‹ãƒ¼ã‚ºã«åŸºã¥ã„ã¦æ±ºå®šã—ã¾ã™ã€‚Ansible をインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã‚’é¸æŠžã§ãã¾ã™ã€‚" #~ msgid "Ansible creates new releases two to three times a year. Due to this short release cycle, minor bugs will generally be fixed in the next release rather than maintaining backports on the stable branch. Major bugs will still have maintenance releases when needed, though these are infrequent." #~ msgstr "Ansible ã®ãƒªãƒªãƒ¼ã‚¹ã¯ã€å¹´ã« 2 ~ 3 回作æˆã•れã¾ã™ã€‚リリースサイクルãŒã“ã®ã‚ˆã†ã«çŸ­ã„ãŸã‚ã€ãƒžã‚¤ãƒŠãƒ¼ãªãƒã‚°ã¯é€šå¸¸ã€å®‰å®šã—ãŸãƒ–ランãƒã§ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã‚’ç¶­æŒã™ã‚‹ã®ã§ã¯ãªãã€æ¬¡ã®ãƒªãƒªãƒ¼ã‚¹ã§ä¿®æ­£ã•れã¾ã™ã€‚メジャーãƒã‚°ã«ã¤ã„ã¦ã¯ã€å¿…è¦ãªã¨ãã«ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãƒªãƒªãƒ¼ã‚¹ãŒè¡Œã‚れã¾ã™ãŒã€ã“ã®ã‚ˆã†ãªã“ã¨ã¯ã‚ã¾ã‚Šé »ç¹ã«ã¯èµ·ã“りã¾ã›ã‚“。" #~ msgid "You may also wish to run from source to get the development branch, which is covered below." #~ msgstr "ソースã‹ã‚‰å®Ÿè¡Œã—ã¦é–‹ç™ºãƒ–ランãƒã‚’å–å¾—ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã“ã®ç‚¹ã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã§èª¬æ˜Žã—ã¾ã™ã€‚" #~ msgid "This method has been verified with the Trusty sources in Debian Jessie and Stretch but may not be supported in earlier versions. You may want to use ``apt-get`` instead of ``apt`` in older versions." #~ msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€Debian Jessie ãŠã‚ˆã³ Stretch ã® Trusty ã‚½ãƒ¼ã‚¹ã§æ¤œè¨¼ã•れã¦ã„ã¾ã™ãŒã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れãªã„å ´åˆãŒã‚りã¾ã™ã€‚以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``apt`` ã®ä»£ã‚り㫠``apt-get`` を使用ã§ãã¾ã™ã€‚" #~ msgid "If you have Ansible 2.9 or older installed, you need to use ``pip uninstall ansible`` first to remove older versions of Ansible before re-installing it." #~ msgstr "Ansible 2.9 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€å…ˆã« ``pip uninstall ansible`` を使用ã—ã¦å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible を削除ã—ã¦ã‹ã‚‰å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "Then install Ansible [1]_::" #~ msgstr "次㫠Ansible [1]_ をインストールã—ã¾ã™::" #~ msgid "Upgrading Ansible from version 2.9 and older to version 2.10 or later" #~ msgstr "Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 以å‰ã‹ã‚‰ 2.10 以é™ã¸ã®ã‚¢ãƒƒãƒ—グレード" #~ msgid "Installing the development version of ``ansible-base``" #~ msgstr "開発ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``ansible-base`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #~ msgid "Virtual Environments" #~ msgstr "仮想環境" #~ msgid "Running ``ansible-base`` from source (devel)" #~ msgstr "ソース (devel) ã‹ã‚‰ ``ansible-base`` ã®å®Ÿè¡Œ" #~ msgid "To install from source, clone the ``ansible-base`` git repository:" #~ msgstr "ソースã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€git リãƒã‚¸ãƒˆãƒªãƒ¼ ``ansible-base`` ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¾ã™ã€‚" #~ msgid "Now let's test things with a ping command:" #~ msgstr "ã§ã¯ã€ping コマンドを使ã£ã¦ãƒ†ã‚¹ãƒˆã—ã¦ã„ãã¾ã—ょã†ã€‚" #~ msgid "Packaging Ansible or wanting to build a local package yourself, but don't want to do a git checkout? Tarballs of releases are available from ``pypi`` as https://pypi.python.org/packages/source/a/ansible/ansible-{{VERSION}}.tar.gz. You can make VERSION a variable in your package managing system that you update in one place whenever you package a new version. Alternately, you can download https://pypi.python.org/project/ansible to get the latest stable release." #~ msgstr "git ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã›ãšã«ã€Ansible をパッケージ化ã—ãŸã‚Šã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘ッケージをã”è‡ªèº«ã§æ§‹ç¯‰ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚リリース㮠tarball ã¯ã€``pypi`` ã§ https://pypi.python.org/packages/source/a/ansible/ansible-{{VERSION}}.tar.gz ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã€‚VERSION ã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’パッケージ化ã™ã‚‹ãŸã³ã« 1 ã‚«æ‰€ã§æ›´æ–°ã™ã‚‹ãƒ‘ッケージ管ç†ã‚·ã‚¹ãƒ†ãƒ ã®å¤‰æ•°ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€æœ€æ–°ã®å®‰å®šç‰ˆãƒªãƒªãƒ¼ã‚¹ã‚’入手ã™ã‚‹ã«ã¯ã€https://pypi.python.org/project/ansible をダウンロードã—ã¾ã™ã€‚" #~ msgid "If you are creating your own Ansible package, you must also download or package ``ansible-base`` as part of your Ansible package. You can download it as https://pypi.python.org/packages/source/a/ansible-base/ansible-base-{{VERSION}}.tar.gz." #~ msgstr "独自㮠Ansible パッケージを作æˆã™ã‚‹å ´åˆã¯ã€Ansible パッケージã®ä¸€éƒ¨ã¨ã—㦠``ansible-base`` をダウンロードã¾ãŸã¯ãƒ‘ッケージ化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€https://pypi.python.org/packages/source/a/ansible-base/ansible-base-{{VERSION}}.tar.gz ã¨ã—ã¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "Globally" #~ msgstr "グローãƒãƒ«" #~ msgid "Per command" #~ msgstr "コマンドå˜ä½" #~ msgid "``ansible-base`` on GitHub" #~ msgstr "GitHub ã® ``ansible-base``" #~ msgid "You may also wish to follow the `GitHub project `_ if you have a GitHub account. This is also where we keep the issue tracker for sharing bugs and feature ideas." #~ msgstr "GitHub アカウントãŒã‚ã‚‹å ´åˆã¯ã€`GitHub project `_ をフォローã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れã¯ã€ãƒã‚°ã‚„機能ã«é–¢ã™ã‚‹ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã‚’共有ã™ã‚‹ãŸã‚ã®å•題追跡システムを維æŒã™ã‚‹å ´æ‰€ã§ã‚‚ã‚りã¾ã™ã€‚" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid "If you have issues with the \"pycrypto\" package install on macOS, then you may need to try ``CC=clang sudo -E pip install pycrypto``." #~ msgstr "MacOS ã¸ã®ã€Œpycryptoã€ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å•題ãŒã‚ã‚‹å ´åˆã¯ã€``CC=clang sudo -E pip install pycrypto`` ã®è©¦è¡ŒãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.477556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/inventory.po0000644000000000000000000001245000000000000025470 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-23 10:50+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: Babel 2.9.0\n" #: ../../rst/inventory/implicit_localhost.rst:6 msgid "Implicit 'localhost'" msgstr "暗黙的ãªã€Œlocalhostã€" #: ../../rst/inventory/implicit_localhost.rst:8 msgid "When you try to reference a ``localhost`` and you don't have it defined in inventory, Ansible will create an implicit one for you.::" msgstr "``localhost`` ã‚’å‚ç…§ã—よã†ã¨ã—ãŸã«ã‚‚ã‹ã‹ã‚らãšã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ãã® localhost ãŒå®šç¾©ã•れã¦ã„ãªã„å ´åˆã¯ã€Ansible ã«ã‚ˆã‚Šæš—黙的 localhost ãŒä½œæˆã•れã¾ã™::" #: ../../rst/inventory/implicit_localhost.rst:16 msgid "In a case like this (or ``local_action``) when Ansible needs to contact a 'localhost' but you did not supply one, we create one for you. This host is defined with specific connection variables equivalent to this in an inventory::" msgstr "上記ã®ã‚ˆã†ãªå ´åˆ (ã¾ãŸã¯ ``local_action``) ã§ã€Ansible ãŒã€Œlocalhostã€ã«å•ã„åˆã‚ã›ã‚’ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€localhost を作æˆã—ã¦ã„ãªã„å ´åˆã«ã¯ã€Ansible ã§ localhost ãŒä½œæˆã•れã¾ã™ã€‚ã“ã®ãƒ›ã‚¹ãƒˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ã‚‚ã®ã¨åŒç­‰ã®ç‰¹å®šã®æŽ¥ç¶šå¤‰æ•°ã§å®šç¾©ã•れã¾ã™::" #: ../../rst/inventory/implicit_localhost.rst:26 msgid "This ensures that the proper connection and Python are used to execute your tasks locally. You can override the built-in implicit version by creating a ``localhost`` host entry in your inventory. At that point, all implicit behaviors are ignored; the ``localhost`` in inventory is treated just like any other host. Group and host vars will apply, including connection vars, which includes the ``ansible_python_interpreter`` setting. This will also affect ``delegate_to: localhost`` and ``local_action``, the latter being an alias to the former." msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€é©åˆ‡ãªæŽ¥ç¶šã¨ Python ãŒãƒ­ãƒ¼ã‚«ãƒ«ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã®ã«ä½¿ç”¨ã•れるよã†ã«ã¾ã™ã€‚インベントリー㫠``localhost`` ホストエントリーを作æˆã™ã‚‹ã¨ã€çµ„ã¿è¾¼ã¿ã®æš—黙的ホストã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上書ãã§ãã¾ã™ã€‚ã“ã®æ™‚点ã§ã€æš—黙的ãªå‹•作ã¯ã™ã¹ã¦ç„¡è¦–ã•れã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã® ``localhost`` ã¯ä»–ã®ãƒ›ã‚¹ãƒˆã¨åŒã˜ã‚ˆã†ã«å‡¦ç†ã•れã¾ã™ã€‚グループãŠã‚ˆã³ãƒ›ã‚¹ãƒˆã®å¤‰æ•° (接続変数をå«ã‚€) ãŒé©ç”¨ã•れã¾ã™ã€‚ã“れã«ã¯ã€``ansible_python_interpreter`` 設定ãŒå«ã¾ã‚Œã¾ã™ã€‚グループãŠã‚ˆã³ãƒ›ã‚¹ãƒˆå¤‰æ•°ã®è¨­å®šã¯ã€``delegate_to: localhost`` ãŠã‚ˆã³ ``local_action`` ã«ã‚‚é©ç”¨ã•れã€``local_action`` 㯠``delegate_to: localhost`` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/inventory/implicit_localhost.rst:30 msgid "This host is not targetable via any group, however it will use vars from ``host_vars`` and from the 'all' group." msgstr "ã“ã®ãƒ›ã‚¹ãƒˆã‚’ターゲットã«ã§ãるグループã¯ã‚りã¾ã›ã‚“ãŒã€``host_vars`` ã¨ã€Œallã€ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/inventory/implicit_localhost.rst:31 msgid "Implicit localhost does not appear in the ``hostvars`` magic variable unless demanded, such as by ``\"{{ hostvars['localhost'] }}\"``." msgstr "``\"{{ hostvars['localhost'] }}\"`` ãªã©ã®è¦æ±‚ãŒãªã„é™ã‚Šã€æš—黙的㪠localhost 㯠``hostvars`` マジック変数ã«ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" #: ../../rst/inventory/implicit_localhost.rst:32 msgid "The ``inventory_file`` and ``inventory_dir`` magic variables are not available for the implicit localhost as they are dependent on **each inventory host**." msgstr "マジック変数 ``inventory_file`` ãŠã‚ˆã³ ``inventory_dir`` ã¯ã€**å„インベントリーホスト** ã«ä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚ã€æš—黙的㪠localhost ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/inventory/implicit_localhost.rst:33 msgid "This implicit host also gets triggered by using ``127.0.0.1`` or ``::1`` as they are the IPv4 and IPv6 representations of 'localhost'." msgstr "ã“ã®æš—黙的ホストã¯ã€ã€Œlocalhostã€ã® IPv4 ãŠã‚ˆã³ IPv6 ã®è¡¨ç¾ã§ã‚ã‚‹ãŸã‚ã€``127.0.0.1`` ã¾ãŸã¯ ``::1`` を使用ã—ã¦ã‚‚発生ã—ã¾ã›ã‚“。" #: ../../rst/inventory/implicit_localhost.rst:34 msgid "Even though there are many ways to create it, there will only ever be ONE implicit localhost, using the name first used to create it." msgstr "ãれを作æˆã™ã‚‹æ–¹æ³•ã¯å¤šæ•°ã‚りã¾ã™ãŒã€æš—黙的㪠localhost 㯠1 ã¤ã ã‘存在ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚最åˆã«ä½œæˆã—ãŸã¨ãã«ä½¿ç”¨ã—ãŸåå‰ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/inventory/implicit_localhost.rst:35 msgid "Having ``connection: local`` does NOT trigger an implicit localhost, you are just changing the connection for the ``inventory_hostname``." msgstr "``connection: local`` ãŒã‚ã£ã¦ã‚‚暗黙的㪠localhost ãŒä½œæˆã•れãªã„å ´åˆã¯ã€``inventory_hostname`` ã®æŽ¥ç¶šã‚’å¤‰æ›´ã—ã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.480556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/network.po0000644000000000000000000157461000000000000025140 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2019 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/network/dev_guide/developing_plugins_network.rst:7 msgid "Developing network plugins" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラグインã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_plugins_network.rst:9 msgid "You can extend the existing network modules with custom plugins in your collection." msgstr "コレクションã®ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインを使用ã—ã¦ã€æ—¢å­˜ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æ‹¡å¼µã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:15 msgid "Network connection plugins" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® connection プラグイン" #: ../../rst/network/dev_guide/developing_plugins_network.rst:16 msgid "Each network connection plugin has a set of its own plugins which provide a specification of the connection for a particular set of devices. The specific plugin used is selected at runtime based on the value of the ``ansible_network_os`` variable assigned to the host. This variable should be set to the same value as the name of the plugin to be loaded. Thus, ``ansible_network_os=nxos`` will try to load a plugin in a file named ``nxos.py``, so it is important to name the plugin in a way that will be sensible to users." msgstr "å„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® connection プラグインã«ã¯ã€ç‹¬è‡ªã®ãƒ—ラグインセットãŒã‚りã¾ã™ã€‚ã“れã¯ã€ç‰¹å®šã®ãƒ‡ãƒã‚¤ã‚¹ã‚»ãƒƒãƒˆã®æŽ¥ç¶šã®ä»•様をæä¾›ã—ã¾ã™ã€‚使用ã•れる特定ã®ãƒ—ラグインã¯ã€ãƒ›ã‚¹ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ ``ansible_network_os`` 変数ã®å€¤ã«åŸºã¥ã„ã¦ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã«é¸æŠžã•れã¾ã™ã€‚ã“ã®å¤‰æ•°ã¯ã€èª­ã¿è¾¼ã‚€ãƒ—ラグインã®åå‰ã¨åŒã˜å€¤ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ãŸã‚ã€``ansible_network_os=nxos`` ã¯ã€``nxos.py`` ã¨ã„ã†åå‰ã®ãƒ•ァイルã«ãƒ—ラグインを読ã¿è¾¼ã‚‚ã†ã¨ã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒé©åˆ‡ãªæ–¹æ³•ã§ãƒ—ラグインã«åå‰ã‚’付ã‘ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:23 msgid "Public methods of these plugins may be called from a module or module_utils with the connection proxy object just as other connection methods can. The following is a very simple example of using such a call in a module_utils file so it may be shared with other modules." msgstr "ã“れらã®ãƒ—ラグインã®ãƒ‘ブリックメソッドã¯ã€ä»–ã®æŽ¥ç¶šæ–¹æ³•ã¨åŒæ§˜ã«ã€æŽ¥ç¶šã®ãƒ—ロキシーオブジェクトを使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ module_utils ã‹ã‚‰æŽ¥ç¶šã§å‘¼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã¯ã€ãã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨å…±æœ‰ã§ãるよã†ã«ã€module_utils ファイルã§ã“ã®ã‚ˆã†ãªå‘¼ã³å‡ºã—を使用ã™ã‚‹éžå¸¸ã«ç°¡å˜ãªä¾‹ã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:45 msgid "Developing httpapi plugins" msgstr "httpapi プラグインã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_plugins_network.rst:47 msgid ":ref:`httpapi plugins ` serve as adapters for various HTTP(S) APIs for use with the ``httpapi`` connection plugin. They should implement a minimal set of convenience methods tailored to the API you are attempting to use." msgstr ":ref:`httpapi プラグイン ` ã¯ã€``httpapi`` connection プラグインã§ä½¿ç”¨ã™ã‚‹ã•ã¾ã–ã¾ãª HTTP(S) API ã®ã‚¢ãƒ€ãƒ—ターã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚ã“ã®ãƒ—ラグインã¯ã€ä½¿ç”¨ã—よã†ã¨ã—ã¦ã„ã‚‹ API ã«é©ã—ãŸæœ€å°é™ã®ä¾¿åˆ©ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:49 msgid "Specifically, there are a few methods that the ``httpapi`` connection plugin expects to exist." msgstr "具体的ã«ã¯ã€``httpapi`` connection プラグインãŒå­˜åœ¨ã™ã‚‹ã“ã¨ãŒå¿…è¦ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:52 msgid "Making requests" msgstr "è¦æ±‚ã®ä½œæˆ" #: ../../rst/network/dev_guide/developing_plugins_network.rst:54 msgid "The ``httpapi`` connection plugin has a ``send()`` method, but an httpapi plugin needs a ``send_request(self, data, **message_kwargs)`` method as a higher-level wrapper to ``send()``. This method should prepare requests by adding fixed values like common headers or URL root paths. This method may do more complex work such as turning data into formatted payloads, or determining which path or method to request. It may then also unpack responses to be more easily consumed by the caller." msgstr "``httpapi`` connection プラグインã«ã¯ ``send()`` メソッドãŒã‚りã¾ã™ãŒã€httpapi プラグインã«ã¯ã€``send()`` ã¸ã®é«˜ãƒ¬ãƒ™ãƒ«ãƒ©ãƒƒãƒ‘ーã¨ã—㦠``send_request(self, data, **message_kwargs)`` メソッドãŒå¿…è¦ã§ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å…±é€šãƒ˜ãƒƒãƒ€ãƒ¼ã‚„ URL ルートパスãªã©ã®å›ºå®šå€¤ã‚’追加ã™ã‚‹ã“ã¨ã§è¦æ±‚を準備ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ãƒ•ォーマットã•れãŸãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã¸ã®ãƒ‡ãƒ¼ã‚¿ã®åˆ‡ã‚Šæ›¿ãˆã‚„ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆç”¨ã®ãƒ‘スやメソッドã®ç‰¹å®šãªã©ã€ã‚ˆã‚Šè¤‡é›‘ãªä½œæ¥­ã‚’行ã†ã“ã¨ãŒã‚りã¾ã™ã€‚ãã®å¾Œã€å‘¼ã³å‡ºã—å…ƒã«ã‚ˆã£ã¦ç°¡å˜ã«æ¶ˆè²»ã•れる応答ãŒå±•é–‹ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™" #: ../../rst/network/dev_guide/developing_plugins_network.rst:74 msgid "Authenticating" msgstr "èªè¨¼" #: ../../rst/network/dev_guide/developing_plugins_network.rst:76 msgid "By default, all requests will authenticate with HTTP Basic authentication. If a request can return some kind of token to stand in place of HTTP Basic, the ``update_auth(self, response, response_text)`` method should be implemented to inspect responses for such tokens. If the token is meant to be included with the headers of each request, it is sufficient to return a dictionary which will be merged with the computed headers for each request. The default implementation of this method does exactly this for cookies. If the token is used in another way, say in a query string, you should instead save that token to an instance variable, where the ``send_request()`` method (above) can add it to each request" msgstr "デフォルトã§ã¯ã€ã™ã¹ã¦ã®è¦æ±‚㯠HTTP Basic èªè¨¼ã§èªè¨¼ã•れã¾ã™ã€‚è¦æ±‚㌠HTTP Basic ã®ä»£ã‚りã«ã‚る種ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’è¿”ã™å ´åˆã¯ã€``update_auth(self, response, response_text)`` メソッドを実装ã—ã¦ã€ã“ã®ã‚ˆã†ãªãƒˆãƒ¼ã‚¯ãƒ³ã®å¿œç­”を検査ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚トークンãŒå„è¦æ±‚ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã‚‹å ´åˆã¯ã€å„è¦æ±‚ã«å¯¾ã—ã¦è¨ˆç®—ã•れãŸãƒ˜ãƒƒãƒ€ãƒ¼ã¨ãƒžãƒ¼ã‚¸ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’è¿”ã™ã ã‘ã§å分ã§ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ãƒ‡ãƒ•ォルト実装㯠Cookie ã«å¯¾ã—ã¦è¡Œã‚れる方法ã§è¡Œã‚れã¾ã™ã€‚トークンãŒåˆ¥ã®æ–¹æ³• (クエリー文字列ãªã©) ã§ä½¿ç”¨ã•れる場åˆã¯ã€ãã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’インスタンス変数ã«ä¿å­˜ã—ã¦ã€``send_request()`` メソッド (上記) ã«ã‚ˆã‚Šå„è¦æ±‚ã«è¿½åŠ ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:87 msgid "If instead an explicit login endpoint needs to be requested to receive an authentication token, the ``login(self, username, password)`` method can be implemented to call that endpoint. If implemented, this method will be called once before requesting any other resources of the server. By default, it will also be attempted once when a HTTP 401 is returned from a request." msgstr "代ã‚ã‚Šã«æ˜Žç¤ºçš„ãªãƒ­ã‚°ã‚¤ãƒ³ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’è¦æ±‚ã—ã¦èªè¨¼ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å—ã‘å–ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``login(self, username, password)`` メソッドを実装ã—ã¦ã€ãã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’è¦æ±‚ã™ã‚‹å‰ã«ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒä¸€åº¦å‘¼ã³å‡ºã•れã¾ã™ã€‚デフォルトã§ã¯ã€è¦æ±‚ã‹ã‚‰ HTTP 401 ãŒè¿”ã•れるã¨ã“れãŒä¸€åº¦è©¦è¡Œã•れã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:105 msgid "Similarly, ``logout(self)`` can be implemented to call an endpoint to invalidate and/or release the current token, if such an endpoint exists. This will be automatically called when the connection is closed (and, by extension, when reset)." msgstr "åŒæ§˜ã«ã€``logout(self)`` を実装ã—ã¦ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’呼ã³å‡ºã—ã€ãã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ç¾åœ¨ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’無効化ã¾ãŸã¯è§£æ”¾ã§ãã¾ã™ã€‚ã“れã¯ã€æŽ¥ç¶šã‚’é–‰ã˜ã‚‹ã¨è‡ªå‹•çš„ã«å‘¼ã³å‡ºã•れã¾ã™ (ã¾ãŸã€ãƒªã‚»ãƒƒãƒˆæ™‚ã«ã¯æ‹¡å¼µã«ã‚ˆã‚Šå‘¼ã³å‡ºã•れã¾ã™)。" #: ../../rst/network/dev_guide/developing_plugins_network.rst:117 msgid "Error handling" msgstr "エラー処ç†" #: ../../rst/network/dev_guide/developing_plugins_network.rst:119 msgid "The ``handle_httperror(self, exception)`` method can deal with status codes returned by the server. The return value indicates how the plugin will continue with the request:" msgstr "``handle_httperror(self, exception)`` メソッドã¯ã€ã‚µãƒ¼ãƒãƒ¼ã«ã‚ˆã£ã¦è¿”ã•れるステータスコードを処ç†ã§ãã¾ã™ã€‚戻り値ã¯ã€ãƒ—ラグインãŒã©ã®ã‚ˆã†ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ç¶šã‘ã‚‹ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:121 msgid "A value of ``true`` means that the request can be retried. This my be used to indicate a transient error, or one that has been resolved. For example, the default implementation will try to call ``login()`` when presented with a 401, and return ``true`` if successful." msgstr "``true`` ã®å€¤ã¯ã€è¦æ±‚ã‚’å†è©¦è¡Œã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“れã¯ã€ä¸€æ™‚çš„ãªã‚¨ãƒ©ãƒ¼ã‚„解決ã•れãŸã‚¨ãƒ©ãƒ¼ã‚’示ã™ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ‡ãƒ•ォルトã®å®Ÿè£…ã§ã¯ã€401 ãŒç¤ºã•れる㨠``login()`` ã®å‘¼ã³å‡ºã—ãŒè©¦è¡Œã•ã‚Œã€æˆåŠŸã—ãŸå ´åˆã¯ ``true`` ãŒè¿”ã•れã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:123 msgid "A value of ``false`` means that the plugin is unable to recover from this response. The status code will be raised as an exception to the calling module." msgstr "``false`` ã®å€¤ã¯ã€ãƒ—ラグインãŒã“ã®å¿œç­”ã‹ã‚‰å¾©å…ƒã§ããªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ステータスコードã¯ã€å‘¼ã³å‡ºã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä¾‹å¤–ã¨ã—ã¦ã‚ã’られã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:125 msgid "Any other value will be taken as a nonfatal response from the request. This may be useful if the server returns error messages in the body of the response. Returning the original exception is usually sufficient in this case, as HTTPError objects have the same interface as a successful response." msgstr "ãã®ä»–ã®å€¤ã¯ã€è¦æ±‚ã‹ã‚‰ã®è‡´å‘½çš„ã§ãªã„応答ã¨ã—ã¦å–られã¾ã™ã€‚ã“れã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒå¿œç­”ã®ãƒœãƒ‡ã‚£ãƒ¼ã§ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿”ã™å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚HTTPError ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯æ­£å¸¸ãªå¿œç­”ã¨åŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæŒã¤ãŸã‚ã€é€šå¸¸ã¯å…ƒã®ä¾‹å¤–ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:127 msgid "For example httpapi plugins, see the `source code for the httpapi plugins `_ included with Ansible Core." msgstr "httpapi プラグインã®ä¾‹ã¯ã€Ansible Core ã«å«ã¾ã‚Œã‚‹ `httpapi プラグインã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_plugins_network.rst:132 msgid "Developing NETCONF plugins" msgstr "NETCONF プラグインã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_plugins_network.rst:134 msgid "The :ref:`netconf ` connection plugin provides a connection to remote devices over the ``SSH NETCONF`` subsystem. Network devices typically use this connection plugin to send and receive ``RPC`` calls over ``NETCONF``." msgstr ":ref:`netconf ` connection プラグインã¯ã€``SSH NETCONF`` サブシステム経由ã§ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã¸ã®æŽ¥ç¶šã‚’æä¾›ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¯é€šå¸¸ã€ã“ã® connection プラグインを使用ã—ã¦ã€``NETCONF`` ã§ ``RPC`` 呼ã³å‡ºã—ã‚’é€å—ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:136 msgid "The ``netconf`` connection plugin uses the ``ncclient`` Python library under the hood to initiate a NETCONF session with a NETCONF-enabled remote network device. ``ncclient`` also executes NETCONF RPC requests and receives responses. You must install the ``ncclient`` on the local Ansible controller." msgstr "``netconf`` connection プラグインã¯ã€Python ライブラリー ``ncclient`` を使用ã—ã¦ã€NETCONF ãŒæœ‰åйãªãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ NETCONF セッションを開始ã—ã¾ã™ã€‚ã¾ãŸã€``ncclient`` 㯠NETCONF RPC è¦æ±‚を実行ã—ã€å¿œç­”ã‚’å—ã‘å–りã¾ã™ã€‚ローカル㮠Ansible コントローラー㫠``ncclient`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:138 msgid "To use the ``netconf`` connection plugin for network devices that support standard NETCONF (:RFC:`6241`) operations such as ``get``, ``get-config``, ``edit-config``, set ``ansible_network_os=default``. You can use :ref:`netconf_get `, :ref:`netconf_config ` and :ref:`netconf_rpc ` modules to talk to a NETCONF enabled remote host." msgstr "``get``ã€``get-config``ã€``edit-config`` ãªã©ã®æ¨™æº– NETCONF (:RFC:`6241`) æ“作ã«å¯¾å¿œã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® ``netconf`` connection プラグインを使用ã™ã‚‹ã«ã¯ã€``ansible_network_os=default`` を設定ã—ã¾ã™ã€‚:ref:`netconf_get ` モジュールã€:ref:`netconf_config ` モジュールã€ãŠã‚ˆã³ :ref:`netconf_rpc ` モジュールを使用ã—ã¦ã€NETCONF ãŒæœ‰åйãªãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¨é€šä¿¡ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:141 msgid "As a contributor and user, you should be able to use all the methods under the ``NetconfBase`` class if your device supports standard NETCONF. You can contribute a new plugin if the device you are working with has a vendor specific NETCONF RPC. To support a vendor specific NETCONF RPC, add the implementation in the network OS specific NETCONF plugin." msgstr "デãƒã‚¤ã‚¹ãŒæ¨™æº–ã® NETCONF ã«å¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ã€è²¢çŒ®è€…ãŠã‚ˆã³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ã€``NetconfBase`` クラスã®ã™ã¹ã¦ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚作業ã—ã¦ã„るデãƒã‚¤ã‚¹ã«ãƒ™ãƒ³ãƒ€ãƒ¼å›ºæœ‰ã® NETCONF RPC ãŒã‚ã‚‹å ´åˆã¯ã€æ–°ã—ã„プラグインをæä¾›ã§ãã¾ã™ã€‚ベンダー固有㮠NETCONF RPC ã«å¯¾å¿œã™ã‚‹ã«ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS 固有㮠NETCONF プラグインã«å®Ÿè£…を追加ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:144 msgid "For Junos for example:" msgstr "ãŸã¨ãˆã°ã€Junios ã®å ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:146 msgid "See the vendor-specific Junos RPC methods implemented in ``plugins/netconf/junos.py``." msgstr "``plugins/netconf/junos.py`` ã«å®Ÿè£…ã•れるベンダー固有㮠Junos RPC メソッドをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_plugins_network.rst:147 msgid "Set the value of ``ansible_network_os`` to the name of the netconf plugin file, that is ``junos`` in this case." msgstr "``ansible_network_os`` ã®å€¤ã‚’ netconf プラグインファイルã®åå‰ (ã“ã“ã§ã¯ ``junos``) ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:152 msgid "Developing network_cli plugins" msgstr "network_cli プラグインã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_plugins_network.rst:154 msgid "The :ref:`network_cli ` connection type uses ``paramiko_ssh`` under the hood which creates a pseudo terminal to send commands and receive responses. ``network_cli`` loads two platform specific plugins based on the value of ``ansible_network_os``:" msgstr "接続タイプ :ref:`network_cli ` ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ä¿¡ã—ã¦å¿œç­”ã‚’å—ã‘å–ã‚‹ãŸã‚ã®ç–‘似端末を作æˆã™ã‚‹ãƒ•ード (hood) ã®ä¸‹ã§ã€``paramiko_ssh`` を使用ã—ã¾ã™ã€‚``network_cli`` ã¯ã€``ansible_network_os`` ã®å€¤ã«åŸºã¥ã„㦠2 ã¤ã®ãƒ—ラットフォーム固有ã®ãƒ—ラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:157 msgid "Terminal plugin (for example ``plugins/terminal/ios.py``) - Controls the parameters related to terminal, such as setting terminal length and width, page disabling and privilege escalation. Also defines regex to identify the command prompt and error prompts." msgstr "端末ã®ãƒ—ラグイン (例: ``plugins/terminal/ios.py``) - 端末ã®é•·ã•ã‚„å¹…ã®è¨­å®šã€ãƒšãƒ¼ã‚¸ã®ç„¡åŠ¹åŒ–ã€æ¨©é™ã®æ˜‡æ ¼ãªã©ã€ç«¯æœ«ã«é–¢é€£ã™ã‚‹ãƒ‘ラメーターを制御ã—ã¾ã™ã€‚ã¾ãŸã€æ­£è¦è¡¨ç¾ã‚’定義ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ—ロンプトãŠã‚ˆã³ã‚¨ãƒ©ãƒ¼ãƒ—ロンプトを特定ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:159 msgid ":ref:`cliconf_plugins` (for example, :ref:`ios cliconf `) - Provides an abstraction layer for low level send and receive operations. For example, the ``edit_config()`` method ensures that the prompt is in ``config`` mode before executing configuration commands." msgstr ":ref:`cliconf_plugins` (例: :ref:`ios cliconf `) - 低レベルã®é€å—ä¿¡æ“ä½œã®æŠ½è±¡åŒ–ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’æä¾›ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``edit_config()`` メソッドã¯ã€è¨­å®šã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹å‰ã«ãƒ—ロンプト㌠``config`` モードã«ãªã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:161 msgid "To contribute a new network operating system to work with the ``network_cli`` connection, implement the ``cliconf`` and ``terminal`` plugins for that network OS." msgstr "æ–°ã—ã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒ ``network_cli`` 接続ã¨é€£æºã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€ãã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS ã® ``cliconf`` プラグインãŠã‚ˆã³ ``terminal`` プラグインを実装ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:163 msgid "The plugins can reside in:" msgstr "ã“ã®ãƒ—ラグインã¯ä»¥ä¸‹ã®å ´æ‰€ã«ç½®ãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:165 msgid "Adjacent to playbook in folders" msgstr "ディレクトリー内㧠Playbook ã«éš£æŽ¥" #: ../../rst/network/dev_guide/developing_plugins_network.rst:172 msgid "Roles" msgstr "ロール" #: ../../rst/network/dev_guide/developing_plugins_network.rst:179 #: ../../rst/shared_snippets/basic_concepts.txt:17 msgid "Collections" msgstr "コレクション" #: ../../rst/network/dev_guide/developing_plugins_network.rst:186 msgid "The user can also set the :ref:`DEFAULT_CLICONF_PLUGIN_PATH` to configure the ``cliconf`` plugin path." msgstr "``cliconf`` プラグインパスを設定ã™ã‚‹ãŸã‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ :ref:`DEFAULT_CLICONF_PLUGIN_PATH` を設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:188 msgid "After adding the ``cliconf`` and ``terminal`` plugins in the expected locations, users can:" msgstr "予想ã•れる場所㫠``cliconf`` プラグインãŠã‚ˆã³ ``terminal`` プラグインを追加ã—ãŸã‚‰ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä»¥ä¸‹ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:190 msgid "Use the :ref:`cli_command ` to run an arbitrary command on the network device." msgstr ":ref:`cli_command ` を使用ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§ä»»æ„ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:191 msgid "Use the :ref:`cli_config ` to implement configuration changes on the remote hosts without platform-specific modules." msgstr ":ref:`cli_config ` を使用ã—ã¦ã€ãƒ—ラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ãªã„リモートホストã«è¨­å®šå¤‰æ›´ã‚’実装ã™ã‚‹ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:197 msgid "Developing cli_parser plugins in a collection" msgstr "コレクションã§ã® cli_parser プラグインã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_plugins_network.rst:199 msgid "You can use ``cli_parse`` as an entry point for a cli_parser plugin in your own collection." msgstr "``cli_parse`` ã¯ã€ç‹¬è‡ªã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ cli_parser プラグインã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:202 msgid "The following sample shows the start of a custom cli_parser plugin:" msgstr "以下ã®ä¾‹ã¯ã€ã‚«ã‚¹ã‚¿ãƒ  cli_parser プラグインã®é–‹å§‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:245 msgid "The following task uses this custom cli_parser plugin:" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ã“ã®ã‚«ã‚¹ã‚¿ãƒ  cli_parser プラグインを使用ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_plugins_network.rst:255 msgid "To develop a custom plugin: - Each cli_parser plugin requires a ``CliParser`` class. - Each cli_parser plugin requires a ``parse`` function. - Always return a dictionary with ``errors`` or ``parsed``. - Place the custom cli_parser in plugins/cli_parsers directory of the collection. - See the `current cli_parsers `_ for examples to follow." msgstr "カスタムプラグインを開発ã™ã‚‹ã«ã¯: - å„ cli_parser プラグインã«ã¯ ``CliParser`` クラスãŒå¿…è¦ã§ã™ã€‚- å„ cli_parser プラグインã«ã¯ ``parse`` 関数ãŒå¿…è¦ã§ã™ã€‚- 常㫠``errors`` ã¾ãŸã¯ ``parsed`` ã§ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚コレクション㮠plugins/cli_parsers ディレクトリーã«ã‚«ã‚¹ã‚¿ãƒ ã® cli_parser ã‚’ç½®ãã¾ã™ã€‚例㯠`ç¾åœ¨ã® cli_parsers ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_plugins_network.rst:265 msgid ":ref:`cli_parsing`" msgstr ":ref:`cli_parsing`" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:6 msgid "Developing network resource modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:13 msgid "Understanding network and security resource modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¦‚è¦" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:15 msgid "Network and security devices separate configuration into sections (such as interfaces, VLANs, and so on) that apply to a network or security service. Ansible resource modules take advantage of this to allow users to configure subsections or resources within the device configuration. Resource modules provide a consistent experience across different network and security devices. For example, a network resource module may only update the configuration for a specific portion of the network interfaces, VLANs, ACLs, and so on for a network device. The resource module:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ãã®è¨­å®šã‚’ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ“スã¾ãŸã¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚µãƒ¼ãƒ“スã«é©ç”¨ã•れるセクション (インターフェースã€VLAN ãªã©) ã«åˆ†å‰²ã—ã¾ã™ã€‚Ansible リソースモジュールã¯ã“れを利用ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ‡ãƒã‚¤ã‚¹è¨­å®šã§ã‚µãƒ–セクションやリソースを設定ã§ãるよã†ã«ã—ã¾ã™ã€‚リソースモジュールã¯ã€ç•°ãªã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ‡ãƒã‚¤ã‚¹å…¨ä½“ã§ä¸€è²«ã—ãŸã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã€VLANã€ACL ãªã©ã®ç‰¹å®šã®éƒ¨åˆ†ã«å¯¾ã—ã¦è¨­å®šã‚’æ›´æ–°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚リソースモジュールã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:17 msgid "Fetches a piece of the configuration (fact gathering), for example, the interfaces configuration." msgstr "インターフェース設定ãªã©ã€è¨­å®šã®ä¸€éƒ¨ (ファクトåŽé›†) ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:18 msgid "Converts the returned configuration into key-value pairs." msgstr "è¿”ã•れãŸè¨­å®šã‚’キーã¨å€¤ã®ãƒšã‚¢ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:19 msgid "Places those key-value pairs into an internal independent structured data format." msgstr "ã“れらã®ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’内部ã«ä¾å­˜ã—ãªã„構造化データ形å¼ã«ç½®ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:21 msgid "Now that the configuration data is normalized, the user can update and modify the data and then use the resource module to send the configuration data back to the device. This results in a full round-trip configuration update without the need for manual parsing, data manipulation, and data model management." msgstr "è¨­å®šãƒ‡ãƒ¼ã‚¿ãŒæ­£è¦åŒ–ã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¦å¤‰æ›´ã—ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦è¨­å®šãƒ‡ãƒ¼ã‚¿ã‚’デãƒã‚¤ã‚¹ã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ‰‹å‹•ã®è§£æžã€ãƒ‡ãƒ¼ã‚¿æ“作ã€ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ãƒ¢ãƒ‡ãƒ«ç®¡ç†ã‚’å¿…è¦ã¨ã›ãšã«ã€å®Œå…¨ãªãƒ©ã‚¦ãƒ³ãƒ‰ãƒˆãƒªãƒƒãƒ—è¨­å®šã®æ›´æ–°ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:23 msgid "The resource module has two top-level keys - ``config`` and ``state``:" msgstr "リソースモジュールã«ã¯ã€``config`` 㨠``state`` ã® 2 ã¤ã®ãƒˆãƒƒãƒ—レベルキーãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:25 msgid "``config`` defines the resource configuration data model as key-value pairs. The type of the ``config`` option can be ``dict`` or ``list of dict`` based on the resource managed. That is, if the device has a single global configuration, it should be a ``dict`` (for example, a global LLDP configuration). If the device has multiple instances of configuration, it should be of type ``list`` with each element in the list of type ``dict`` (for example, interfaces configuration)." msgstr "``config`` ã¯ã€ãƒªã‚½ãƒ¼ã‚¹è¨­å®šã®ãƒ‡ãƒ¼ã‚¿ãƒ¢ãƒ‡ãƒ«ã‚’キーã¨å€¤ã®ãƒšã‚¢ã¨ã—ã¦å®šç¾©ã—ã¾ã™ã€‚``config`` オプションã®ã‚¿ã‚¤ãƒ—ã¯ã€ç®¡ç†ã•れるリソースã«åŸºã¥ã„㦠``dict`` ã¾ãŸã¯ ``list of dict`` ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ãƒ‡ãƒã‚¤ã‚¹ã«ã‚°ãƒ­ãƒ¼ãƒãƒ«è¨­å®šãŒ 1 ã¤ã‚ã‚‹å ´åˆã«ã¯ã€``dict`` ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ (例: グローãƒãƒ« LLDP 設定)。デãƒã‚¤ã‚¹ã«è¤‡æ•°ã®è¨­å®šã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã‚ã‚‹å ´åˆã¯ã€ã‚¿ã‚¤ãƒ—㌠``list`` ã¨ãªã‚Šã€ãƒªã‚¹ãƒˆã®å„è¦ç´ ã¯ã‚¿ã‚¤ãƒ—㌠``dict`` ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: インターフェース設定)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:28 msgid "``state`` defines the action the resource module takes on the end device." msgstr "``state`` リソースモジュールãŒã‚¨ãƒ³ãƒ‰ãƒ‡ãƒã‚¤ã‚¹ã§ä½¿ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:30 msgid "The ``state`` for a new resource module should support the following values (as applicable for the devices that support them):" msgstr "æ–°ã—ã„リソースモジュール㮠``state`` ã¯ã€ä»¥ä¸‹ã®å€¤ã‚’サãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (サãƒãƒ¼ãƒˆã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã«è©²å½“ã™ã‚‹å ´åˆ)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:33 #: ../../rst/network/user_guide/network_resource_modules.rst:19 msgid "merged" msgstr "merged" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:33 #: ../../rst/network/user_guide/network_resource_modules.rst:19 msgid "Ansible merges the on-device configuration with the provided configuration in the task." msgstr "Ansible ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®è¨­å®šã‚’ã‚¿ã‚¹ã‚¯ã«æŒ‡å®šã—ãŸè¨­å®šã¨çµ±åˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:36 #: ../../rst/network/user_guide/network_resource_modules.rst:22 msgid "replaced" msgstr "replaced" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:36 #: ../../rst/network/user_guide/network_resource_modules.rst:22 msgid "Ansible replaces the on-device configuration subsection with the provided configuration subsection in the task." msgstr "Ansible ãŒã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®è¨­å®šã®ã‚µãƒ–セクションをã€ã‚¿ã‚¹ã‚¯ã«æŒ‡å®šã—ãŸè¨­å®šã®ã‚µãƒ–セクションã«ç½®ãæ›ãˆã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:39 #: ../../rst/network/user_guide/network_resource_modules.rst:25 msgid "overridden" msgstr "overridden" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:39 #: ../../rst/network/user_guide/network_resource_modules.rst:25 msgid "Ansible overrides the on-device configuration for the resource with the provided configuration in the task. Use caution with this state as you could remove your access to the device (for example, by overriding the management interface configuration)." msgstr "Ansible ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã®ãƒ‡ãƒã‚¤ã‚¹ã®è¨­å®šã‚’ã€ã‚¿ã‚¹ã‚¯ã§æä¾›ã•れãŸè¨­å®šã‚’使用ã—ã¦ä¸Šæ›¸ãã—ã¾ã™ã€‚ã“ã®çŠ¶æ…‹ã§ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒå‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æ³¨æ„ãŒå¿…è¦ã§ã™ (ãŸã¨ãˆã°ã€ç®¡ç†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã®è¨­å®šã‚’上書ãã™ã‚‹ãªã©)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:42 #: ../../rst/network/user_guide/network_resource_modules.rst:28 msgid "deleted" msgstr "deleted" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:42 #: ../../rst/network/user_guide/network_resource_modules.rst:28 msgid "Ansible deletes the on-device configuration subsection and restores any default settings." msgstr "Ansible ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®è¨­å®šã‚µãƒ–セクションを削除ã—ã¦ã€ãƒ‡ãƒ•ォルト設定を復元ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:45 #: ../../rst/network/user_guide/network_resource_modules.rst:31 msgid "gathered" msgstr "gathered" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:45 #: ../../rst/network/user_guide/network_resource_modules.rst:31 msgid "Ansible displays the resource details gathered from the network device and accessed with the ``gathered`` key in the result." msgstr "Ansible ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰åŽé›†ã—ãŸãƒªã‚½ãƒ¼ã‚¹ã®è©³ç´°ã‚’表示ã—ã€çµæžœã® ``gathered`` キーを使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:48 #: ../../rst/network/user_guide/network_resource_modules.rst:34 msgid "rendered" msgstr "rendered" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:48 #: ../../rst/network/user_guide/network_resource_modules.rst:34 msgid "Ansible renders the provided configuration in the task in the device-native format (for example, Cisco IOS CLI). Ansible returns this rendered configuration in the ``rendered`` key in the result. Note this state does not communicate with the network device and can be used offline." msgstr "Ansible ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ãƒã‚¤ãƒ†ã‚£ãƒ–ã®å½¢å¼ã§ã‚¿ã‚¹ã‚¯å†…ã®æä¾›ã•れãŸè¨­å®šã‚’レンダリングã—ã¾ã™ (例: Cisco IOS CLI)。Ansible ã¯ã€çµæžœå†…ã® ``rendered`` キーã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れãŸè¨­å®šã‚’è¿”ã—ã¾ã™ã€‚ã“ã®çŠ¶æ…‹ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨é€šä¿¡ã›ãšã€ã‚ªãƒ•ラインã§ä½¿ç”¨ã§ãã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:52 #: ../../rst/network/user_guide/network_resource_modules.rst:37 msgid "parsed" msgstr "parsed" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:51 msgid "Ansible parses the configuration from the ``running_configuration`` option into Ansible structured data in the ``parsed`` key in the result. Note this does not gather the configuration from the network device so this state can be used offline." msgstr "Ansible ã¯ã€``running_configuration`` オプションã‹ã‚‰ã€ãã®çµæžœå†…ã® ``parsed`` キー㮠Ansible 構造化データã«è¨­å®šã‚’è§£æžã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰è¨­å®šãŒåŽé›†ã•れãªã„ãŸã‚ã€ã“ã®çŠ¶æ…‹ã‚’ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ä½¿ç”¨ã§ãã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:54 msgid "Modules in Ansible-maintained collections must support these state values. If you develop a module with only \"present\" and \"absent\" for state, you may submit it to a community collection." msgstr "Ansible ãŒç®¡ç†ã—ã¦ã„るコレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã“れらã®çŠ¶æ…‹å€¤ã‚’ã‚µãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚状態ãŒã€Œpresentã€ãŠã‚ˆã³ã€Œabsentã€ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã—ãŸå ´åˆã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æå‡ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:58 msgid "The states ``rendered``, ``gathered``, and ``parsed`` do not perform any change on the device." msgstr "状態 ``rendered``ã€``gathered``ã€ãŠã‚ˆã³ ``parsed`` ã¯ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§å¤‰æ›´ã‚’行ã„ã¾ã›ã‚“。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:62 msgid "`Deep Dive on VLANs Resource Modules for Network Automation `_" msgstr "`Deep Dive on VLANs Resource Modules for Network Automation `_" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:63 msgid "Walkthrough of how state values are implemented for VLANs." msgstr "VLAN ã¸ã®çŠ¶æ…‹å€¤ã®å®Ÿè£…方法ã®ã‚¦ã‚©ãƒ¼ãƒ«ã‚¹ãƒ«ãƒ¼" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:67 msgid "Developing network and security resource modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹ç™º" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:69 msgid "The Ansible Engineering team ensures the module design and code pattern within Ansible-maintained collections is uniform across resources and across platforms to give a vendor-independent feel and deliver good quality code. We recommend you use the `resource module builder `_ to develop a resource module." msgstr "Ansible Engineering ãƒãƒ¼ãƒ ã¯ã€Ansible ãŒç®¡ç†ã—ã¦ã„るコレクション内ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«è¨­è¨ˆãŠã‚ˆã³ã‚³ãƒ¼ãƒ‰ãƒ‘ターンãŒãƒªã‚½ãƒ¼ã‚¹ã‚„プラットフォーム全体ã§çµ±ä¸€ã•れã€ãƒ™ãƒ³ãƒ€ãƒ¼ã«ä¾å­˜ã›ãšã€é©åˆ‡ãªå“質コードをæä¾›ã—ã¾ã™ã€‚`resource module builder `_ を使用ã—ã¦ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:72 msgid "The highlevel process for developing a resource module is:" msgstr "リソースモジュール開発ã®ä¸»ãªãƒ—ãƒ­ã‚»ã‚¹ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:74 msgid "Create and share a resource model design in the `resource module models repository `_ as a PR for review." msgstr "レビュー用ã«ãƒ—ãƒ«è¦æ±‚ã¨ã—ã¦ã€`リソースモジュールモデルリãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã§ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ãƒ‡ãƒ«ã®è¨­è¨ˆã‚’作æˆã—ã€å…±æœ‰ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:75 msgid "Download the latest version of the `resource module builder `_." msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® `リソースモジュールビルダー `_ をダウンロードã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:76 msgid "Run the ``resource module builder`` to create a collection scaffold from your approved resource model." msgstr "``リソースモジュールビルダー`` を実行ã—ã¦ã€æ‰¿èªã•れãŸãƒªã‚½ãƒ¼ã‚¹ãƒ¢ãƒ‡ãƒ«ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚­ãƒ£ãƒ•ォールディングを作æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:77 msgid "Write the code to implement your resource module." msgstr "コードを作æˆã—ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実装ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:78 msgid "Develop integration and unit tests to verify your resource module." msgstr "çµ±åˆãƒ†ã‚¹ãƒˆãŠã‚ˆã³ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’開発ã—ã¦ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:79 msgid "Create a PR to the appropriate collection that you want to add your new resource module to. See :ref:`contributing_maintained_collections` for details on determining the correct collection for your module." msgstr "æ–°ã—ã„リソースモジュールを追加ã™ã‚‹é©åˆ‡ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¾ã™ã€‚ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ­£ã—ã„コレクションを判断ã™ã‚‹æ–¹æ³•ã¯ã€Œ:ref:`contributing_maintained_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:83 msgid "Understanding the model and resource module builder" msgstr "モデルãŠã‚ˆã³ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーã®ç†è§£" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:85 msgid "The resource module builder is an Ansible Playbook that helps developers scaffold and maintain an Ansible resource module. It uses a model as the single source of truth for the module. This model is a ``yaml`` file that is used for the module DOCUMENTATION section and the argument spec." msgstr "リソースモジュールビルダーã¯ã€é–‹ç™ºè€…㌠Ansible リソースモジュールをスキャフォールディングã—ã€ç¶­æŒã§ãるよã†ã«ã™ã‚‹ Ansible Playbook ã§ã™ã€‚ã“ã®ãƒ¢ãƒ‡ãƒ«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¿¡é ¼ã§ãる唯一ã®ã‚½ãƒ¼ã‚¹ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ã“ã®ãƒ¢ãƒ‡ãƒ«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® DOCUMENTATION セクションãŠã‚ˆã³å¼•数仕様ã«ä½¿ç”¨ã•れる ``yaml`` ファイルã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:87 msgid "The resource module builder has the following capabilities:" msgstr "リソースモジュールビルダーã«ã¯ä»¥ä¸‹ã®æ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:89 msgid "Uses a defined model to scaffold a resource module directory layout and initial class files." msgstr "定義ã•れãŸãƒ¢ãƒ‡ãƒ«ã‚’使用ã—ã¦ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¨åˆæœŸã‚¯ãƒ©ã‚¹ãƒ•ァイルをスキャフォールディングã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:90 msgid "Scaffolds either an Ansible role or a collection." msgstr "Ansible ロールã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã„ãšã‚Œã‹ã‚’スキャフォールディングã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:91 msgid "Subsequent uses of the resource module builder will only replace the module arspec and file containing the module docstring." msgstr "ãã®å¾Œã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーを使用ã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® arspec ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® docstring ã‚’å«ã‚€ãƒ•ァイルã®ã¿ãŒç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:92 msgid "Allows you to store complex examples along side the model in the same directory." msgstr "複雑ãªã‚µãƒ³ãƒ—ルモデルã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ä¿å­˜ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:93 msgid "Maintains the model as the source of truth for the module and use resource module builder to update the source files as needed." msgstr "モジュールã®ä¿¡é ¼ã§ãるソースã¨ã—ã¦ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’ç¶­æŒã—ã€å¿…è¦ã«å¿œã˜ã¦ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーを使用ã—ã¦ã‚½ãƒ¼ã‚¹ãƒ•ァイルを更新ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:94 msgid "Generates working sample modules for both ``_`` and ``_facts``." msgstr "``_`` ãŠã‚ˆã³ ``_facts`` ã®ä¸¡æ–¹ã«ä½œæ¥­ã‚µãƒ³ãƒ—ルモジュールを生æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:97 msgid "Accessing the resource module builder" msgstr "リソースモジュールビルダーã¸ã®ã‚¢ã‚¯ã‚»ã‚¹" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:99 msgid "To access the resource module builder:" msgstr "リソースモジュールビルダーã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:101 msgid "clone the github repository:" msgstr "github リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:107 msgid "Install the requirements:" msgstr "è¦ä»¶ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:114 msgid "Creating a model" msgstr "モデルã®ä½œæˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:116 msgid "You must create a model for your new resource. The model is the single source of truth for both the argspec and docstring, keeping them in sync. Once your model is approved, you can use the resource module builder to generate three items based on the model:" msgstr "æ–°ã—ã„リソースã®ãƒ¢ãƒ‡ãƒ«ã‚’作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モデルã¯ã€argspec 㨠docstring ã®ä¸¡æ–¹ã«å¯¾ã™ã‚‹ä¿¡é ¼ã§ãる唯一ã®ã‚½ãƒ¼ã‚¹ã¨ãªã‚Šã¾ã™ã€‚ãƒ¢ãƒ‡ãƒ«ãŒæ‰¿èªã•れるã¨ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーを使用ã—ã¦ã€ã“ã®ãƒ¢ãƒ‡ãƒ«ã«åŸºã¥ã„㦠3 ã¤ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’生æˆã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:118 msgid "The scaffold for a new module" msgstr "æ–°ã—ã„モジュールã®ã‚¹ã‚­ãƒ£ãƒ•ォールディング" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:119 msgid "The argspec for the new module" msgstr "æ–°ã—ã„モジュール㮠argspec" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:120 msgid "The docstring for the new module" msgstr "æ–°ã—ã„モジュール㮠docstring" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:122 msgid "For any subsequent changes to the functionality, update the model first and use the resource module builder to update the module argspec and docstring." msgstr "ãã®å¾Œã€æ©Ÿèƒ½ã«å¯¾ã™ã‚‹å¤‰æ›´ã‚’行ã†å ´åˆã¯ã€æœ€åˆã«ãƒ¢ãƒ‡ãƒ«ã‚’æ›´æ–°ã—ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーを使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® argspec ãŠã‚ˆã³ docstring ã‚’æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:124 msgid "For example, the resource model builder includes the ``myos_interfaces.yml`` sample in the :file:`models` directory, as seen below:" msgstr "ãŸã¨ãˆã°ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ãƒ‡ãƒ«ãƒ“ルダーã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« :file:`models` ディレクトリー㫠``myos_interfaces.yml`` サンプルãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:196 msgid "Notice that you should include examples for each of the states that the resource supports. The resource module builder also includes these in the sample model." msgstr "リソースãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹å„状態ã®ä¾‹ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。リソースモジュールビルダーã«ã¯ã€ã‚µãƒ³ãƒ—ルモデルã«ã‚‚ã“れらãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:198 msgid "Share this model as a PR for review at `resource module models repository `_. You can also see more model examples at that location." msgstr "ã“ã®ãƒ¢ãƒ‡ãƒ«ã¯ã€`リソースモジュールモデルã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã§ç¢ºèªã™ã‚‹ãŸã‚ã® PR ã¨ã—ã¦å…±æœ‰ã—ã¾ã™ã€‚ã“ã®å ´æ‰€ã§ã•らã«ãƒ¢ãƒ‡ãƒ«ã®ã‚µãƒ³ãƒ—ルを表示ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:202 msgid "Creating a collection scaffold from a resource model" msgstr "リソースモデルã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚­ãƒ£ãƒ•ォールディングã®ä½œæˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:204 msgid "To use the resource module builder to create a collection scaffold from your approved resource model:" msgstr "リソースモジュールビルダーを使用ã—ã¦ã€èªè¨¼ã•れãŸãƒªã‚½ãƒ¼ã‚¹ãƒ¢ãƒ‡ãƒ«ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚­ãƒ£ãƒ•ォールディングを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:215 msgid "Where the parameters are as follows:" msgstr "パラメーターã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:217 msgid "``rm_dest``: The directory where the resource module builder places the files and directories for the resource module and facts modules." msgstr "``rm_dest``: リソースモジュールビルダーãŒã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ•ァクトモジュールã®ãƒ•ァイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ç½®ãディレクトリー。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:218 msgid "``structure``: The directory layout type (role or collection)" msgstr "``structure``: ディレクトリーレイアウトã®ç¨®é¡ž (ロールã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:220 msgid "``role``: Generate a role directory layout." msgstr "``role``: ロールディレクトリーレイアウトを生æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:221 msgid "``collection``: Generate a collection directory layout." msgstr "``collection``: コレクションディレクトリーã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’生æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:223 msgid "``collection_org``: The organization of the collection, required when `structure=collection`." msgstr "``collection_org``: `structure=collection` ã®å ´åˆã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®çµ„ç¹”ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:224 msgid "``collection_name``: The name of the collection, required when `structure=collection`." msgstr "``collection_name``: `structure=collection` ã®å ´åˆã«å¿…è¦ã¨ãªã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åå‰ã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:225 msgid "``model``: The path to the model file." msgstr "``model``: モデルファイルã¸ã®ãƒ‘ス。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:227 msgid "To use the resource module builder to create a role scaffold:" msgstr "リソースモジュールビルダーを使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã®ã‚¹ã‚­ãƒ£ãƒ•ォールディングを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:237 msgid "Examples" msgstr "例" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:240 msgid "Collection directory layout" msgstr "コレクションディレクトリーã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:242 msgid "This example shows the directory layout for the following:" msgstr "ã“ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:244 #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:306 msgid "``network_os``: myos" msgstr "``network_os``: myos" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:245 #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:307 msgid "``resource``: interfaces" msgstr "``resource``: interfaces" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:302 msgid "Role directory layout" msgstr "ロールディレクトリーã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:304 msgid "This example displays the role directory layout for the following:" msgstr "ã“ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã®ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’表示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:358 msgid "Using the collection" msgstr "コレクションã®ä½¿ç”¨" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:360 msgid "This example shows how to use the generated collection in a playbook:" msgstr "以下ã®ä¾‹ã¯ã€ç”Ÿæˆã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Playbook ã§ä½¿ç”¨ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:378 msgid "Using the role" msgstr "ロールã®ä½¿ç”¨" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:380 msgid "This example shows how to use the generated role in a playbook:" msgstr "以下ã®ä¾‹ã¯ã€ç”Ÿæˆã•れãŸãƒ­ãƒ¼ãƒ«ã‚’ Playbook ã§ä½¿ç”¨ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:402 msgid "Resource module structure and workflow" msgstr "リソースモジュール構造ãŠã‚ˆã³ãƒ¯ãƒ¼ã‚¯ãƒ•ロー" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:404 msgid "The resource module structure includes the following components:" msgstr "リソースモジュール構造ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:413 msgid "Module" msgstr "モジュール" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:407 msgid "``library/_.py``." msgstr "``library/_.py``。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:408 msgid "Imports the ``module_utils`` resource package and calls ``execute_module`` API:" msgstr "``module_utils`` リソースパッケージをインãƒãƒ¼ãƒˆã—ã€``execute_module`` API を呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:417 msgid "Module argspec" msgstr "モジュール㮠argspec" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:416 msgid "``module_utils//argspec//``." msgstr "``module_utils//argspec//``。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:417 msgid "Argspec for the resource." msgstr "リソース㮠argspec" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:423 msgid "Facts" msgstr "ファクト" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:420 msgid "``module_utils//facts//``." msgstr "``module_utils//facts//``。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:421 msgid "Populate facts for the resource." msgstr "リソースã®ãƒ•ァクトを入力ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:422 msgid "Entry in ``module_utils//facts/facts.py`` for ``get_facts`` API to keep ``_facts`` module and facts gathered for the resource module in sync for every subset." msgstr "ã™ã¹ã¦ã®ã‚µãƒ–セットã«å¯¾ã—ã¦åŒæœŸã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç”¨ã«åŽé›†ã•れ㟠``_facts`` モジュールãŠã‚ˆã³ãƒ•ã‚¡ã‚¯ãƒˆã‚’ä¿æŒã™ã‚‹ ``get_facts`` API ã® ``module_utils//facts/facts.py`` エントリー。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:423 msgid "Entry of Resource subset in FACTS_RESOURCE_SUBSETS list in ``module_utils//facts/facts.py`` to make facts collection work." msgstr "``module_utils//facts/facts.py`` ã® FACTS_RESOURCE_SUBSETS 一覧ã§ãƒªã‚½ãƒ¼ã‚¹ã‚µãƒ–セットã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã€‚ファクトコレクションを機能ã•ã›ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:430 msgid "Module package in module_utils" msgstr "module_utils ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ッケージ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:426 msgid "``module_utils////``." msgstr "``module_utils////``。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:427 msgid "Implement ``execute_module`` API that loads the configuration to device and generates the result with ``changed``, ``commands``, ``before`` and ``after`` keys." msgstr "設定を読ã¿è¾¼ã‚€ ``execute_module`` API を実装ã—ã€``changed`` キーã€``commands`` キーã€``before`` キーã€ãŠã‚ˆã³ ``after`` キーã§çµæžœã‚’生æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:428 msgid "Call ``get_facts`` API that returns the ```` configuration facts or return the difference if the device has onbox diff support." msgstr "```` 設定ã®ãƒ•ァクトを返㙠``get_facts`` API を呼ã³å‡ºã™ã‹ã€ãƒ‡ãƒã‚¤ã‚¹ã« onbox diff サãƒãƒ¼ãƒˆãŒã‚ã‚‹å ´åˆã¯ãã®ç›¸é•点を返ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:429 msgid "Compare facts gathered and given key-values if diff is not supported." msgstr "diff ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„å ´åˆã¯ã€åŽé›†ã•れるファクトã¨ã€æŒ‡å®šã•れるキー/値を比較ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:430 msgid "Generate final configuration." msgstr "最後ã®è¨­å®šã‚’生æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:434 msgid "Utils" msgstr "ユーティリティー" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:433 msgid "``module_utils//utils``." msgstr "``module_utils//utils``。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:434 msgid "Utilities for the ```` platform." msgstr "```` プラットフォームã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:439 msgid "Running ``ansible-test sanity`` and ``tox`` on resource modules" msgstr "リソースモジュールã§ã® ``ansible-test sanity`` ãŠã‚ˆã³ ``tox`` ã®å®Ÿè¡Œ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:441 msgid "You should run ``ansible-test sanity`` and ``tox -elinters`` from the collection root directory before pushing your PR to an Ansible-maintained collection. The CI runs both and will fail if these tests fail. See :ref:`developing_testing` for details on ``ansible-test sanity``." msgstr "ãƒ—ãƒ«è¦æ±‚ã‚’ Ansible ã§ç®¡ç†ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãƒ—ッシュã™ã‚‹å‰ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ ``ansible-test sanity`` ãŠã‚ˆã³ ``tox -elinters`` を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚CI ã¯ãã®ä¸¡æ–¹ã‚’実行ã—ã€ã“ã®ãƒ†ã‚¹ãƒˆã«å¤±æ•—ã™ã‚‹ã¨å¤±æ•—ã—ã¾ã™ã€‚``ansible-test sanity`` ã®è©³ç´°ã¯ã€ã€Œ:ref:`developing_testing`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:443 msgid "To install the necessary packages:" msgstr "å¿…è¦ãªãƒ‘ッケージをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:445 msgid "Ensure you have a valid Ansible development environment configured. See :ref:`environment_setup` for details." msgstr "有効㪠Ansible 開発環境ãŒè¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。詳細㯠:ref:`environment_setup` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:446 msgid "Run ``pip install -r requirements.txt`` from the collection root directory." msgstr "コレクション㮠root ディレクトリーã‹ã‚‰ ``pip install -r requirements.txt`` を実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:449 msgid "Running ``tox -elinters``:" msgstr "``tox -elinters`` ã®å®Ÿè¡Œ:" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:451 msgid "Reads :file:`tox.ini` from the collection root directory and installs required dependencies (such as ``black`` and ``flake8``)." msgstr "コレクションルートディレクトリーã‹ã‚‰ :file:`tox.ini` を読ã¿è¾¼ã¿ã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ (例: ``black``ã€``flake8``) をインストールã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:452 msgid "Runs these with preconfigured options (such as line-length and ignores.)" msgstr "事å‰è¨­å®šã•れãŸã‚ªãƒ—ション (line-length ã‚„ ignore ãªã©) を指定ã—ã¦ã€ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:453 msgid "Runs ``black`` in check mode to show which files will be formatted without actually formatting them." msgstr "``black`` ã‚’ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã—ã€å®Ÿéš›ã«ãƒ•ォーマットã•れるã“ã¨ãªãã©ã®ãƒ•ァイルをフォーマットã™ã‚‹ã‹ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:456 msgid "Testing resource modules" msgstr "リソースモジュールã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:458 msgid "The tests rely on a role generated by the resource module builder. After changes to the resource module builder, the role should be regenerated and the tests modified and run as needed. To generate the role after changes:" msgstr "テストã¯ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ“ルダーãŒç”Ÿæˆã—ãŸãƒ­ãƒ¼ãƒ«ã«ä¾å­˜ã—ã¾ã™ã€‚リソースモジュールビルダーã¸ã®å¤‰æ›´å¾Œã«ã€ãƒ­ãƒ¼ãƒ«ã‚’å†ç”Ÿæˆã—ã€å¿…è¦ã«å¿œã˜ã¦ãƒ†ã‚¹ãƒˆãŒå¤‰æ›´ã•れã€å®Ÿè¡Œã•れる必è¦ãŒã‚りã¾ã™ã€‚変更後ã«ãƒ­ãƒ¼ãƒ«ã‚’生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:472 msgid "Resource module integration tests" msgstr "リソースモジュール統åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:474 msgid "High-level integration test requirements for new resource modules are as follows:" msgstr "æ–°ã—ã„リソースモジュールã®ãƒã‚¤ãƒ¬ãƒ™ãƒ«çµ±åˆãƒ†ã‚¹ãƒˆè¦ä»¶ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:476 msgid "Write a test case for every state." msgstr "ã™ã¹ã¦ã®çŠ¶æ…‹ã«ã¤ã„ã¦ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:477 msgid "Write additional test cases to test the behavior of the module when an empty ``config.yaml`` is given." msgstr "空㮠``config.yaml`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‹•作をテストã™ã‚‹ãŸã‚ã«ã€è¿½åŠ ã®ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:478 msgid "Add a round trip test case. This involves a ``merge`` operation, followed by ``gather_facts``, a ``merge`` update with additional configuration, and then reverting back to the base configuration using the previously gathered facts with the ``state`` set to ``overridden``." msgstr "ラウンドトリップテストケースを追加ã—ã¾ã™ã€‚ã“れã«ã¯ ``merge`` ã®æ“作ãŒå«ã¾ã‚Œã€ç¶šã„㦠``gather_facts`` ã€``merge`` ãŒè¿½åŠ ã®æ§‹æˆã§æ›´æ–°ã•れã€ãã®å¾Œã€``state`` ㌠``overridden`` ã«è¨­å®šã•れãŸçŠ¶æ…‹ã§ã€ä»¥å‰ã«åŽé›†ã—ãŸãƒ•ァクトを使用ã—ã¦åŸºæœ¬æ§‹æˆã«æˆ»ã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:479 msgid "Wherever applicable, assertions should check after and before ``dicts`` against a hard coded Source of Truth." msgstr "該当ã™ã‚‹å ´åˆã€ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れãŸä¿¡é ¼ã§ãる唯一ã®ã‚½ãƒ¼ã‚¹ã«å¯¾ã—㦠``dicts`` ã®å‰å¾Œã§ç¢ºèªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:483 msgid "We use Zuul as the CI to run the integration test." msgstr "Zuul ã‚’ CI ã¨ã—ã¦ä½¿ç”¨ã—ã€çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:485 msgid "To view the report, click :guilabel:`Details` on the CI comment in the PR" msgstr "レãƒãƒ¼ãƒˆã‚’表示ã™ã‚‹ã«ã¯ã€ãƒ—ãƒ«è¦æ±‚ã® CI コメントã«ã‚ã‚‹ :guilabel:`Details` をクリックã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:486 msgid "To view a failure report, click :guilabel:`ansible/check` and select the failed test." msgstr "障害レãƒãƒ¼ãƒˆã‚’表示ã™ã‚‹ã«ã¯ã€:guilabel:`ansible/check` をクリックã—ã€å¤±æ•—ã—ãŸãƒ†ã‚¹ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:487 msgid "To view logs while the test is running, check for your PR number in the `Zuul status board `_." msgstr "テストã®å®Ÿè¡Œä¸­ã«ãƒ­ã‚°ã‚’表示ã™ã‚‹ã«ã¯ã€`Zuul status board `_ ã§ ãƒ—ãƒ«è¦æ±‚番å·ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:488 msgid "To fix static test failure locally, run the :command:`tox -e black` **inside the root folder of collection**." msgstr "é™çš„テストã®å¤±æ•—をローカルã§ä¿®æ­£ã™ã‚‹ã«ã¯ã€:command:`tox -e black` ã‚’ã€**コレクションã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…** ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:490 msgid "To view The Ansible run logs and debug test failures:" msgstr "Ansible ã®å®Ÿè¡Œãƒ­ã‚°ãŠã‚ˆã³ãƒ‡ãƒãƒƒã‚°ãƒ†ã‚¹ãƒˆã®å¤±æ•—を表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:492 msgid "Click the failed job to get the summary, and click :guilabel:`Logs` for the log." msgstr "失敗ã—ãŸã‚¸ãƒ§ãƒ–をクリックã—ã¦ã‚µãƒžãƒªãƒ¼ã‚’å–å¾—ã—ã€ãƒ­ã‚°ã® :guilabel:`Logs` をクリックã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:493 msgid "Click :guilabel:`console` and scroll down to find the failed test." msgstr ":guilabel:`console` をクリックã—ã€ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒ€ã‚¦ãƒ³ã—ã¦å¤±æ•—ã—ãŸãƒ†ã‚¹ãƒˆã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:494 msgid "Click :guilabel:`>` next to the failed test for complete details." msgstr "詳細ã¯ã€å¤±æ•—ã—ãŸãƒ†ã‚¹ãƒˆã®æ¨ªã«ã‚ã‚‹ :guilabel:`>` をクリックã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:498 msgid "Integration test structure" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆæ§‹é€ " #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:500 msgid "Each test case should generally follow this pattern:" msgstr "通常ã€å„テストケースã¯ã€ä»¥ä¸‹ã®ãƒ‘ターンã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:502 msgid "setup —> test —> assert —> test again (for idempotency) —> assert —> tear down (if needed) -> done. This keeps test playbooks from becoming monolithic and difficult to troubleshoot." msgstr "設定 —> テスト —> アサート —> å†ãƒ†ã‚¹ãƒˆ (冪等性) —> アサート —> 分解 (å¿…è¦ãªå ´åˆ) -> 完了。ã“れã«ã‚ˆã‚Šã€ãƒ†ã‚¹ãƒˆ Playbook ãŒãƒ¢ãƒŽãƒªã‚·ãƒƒã‚¯ã«ãªã‚Šã€ãƒˆãƒ©ãƒ–ルシューティングãŒå›°é›£ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:503 msgid "Include a name for each task that is not an assertion. You can add names to assertions as well, but it is easier to identify the broken task within a failed test if you add a name for each task." msgstr "アサーションã§ã¯ãªã„å„タスクã®åå‰ã‚’å«ã‚ã¾ã™ã€‚åå‰ã‚’アサーションã«è¿½åŠ ã§ãã¾ã™ãŒã€å„タスクã®åå‰ã‚’追加ã™ã‚‹ã¨ã€å¤±æ•—ã—ãŸãƒ†ã‚¹ãƒˆå†…ã§ã¯ã€ç ´æã—ãŸã‚¿ã‚¹ã‚¯ã‚’特定ã™ã‚‹ã®ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:504 msgid "Files containing test cases must end in ``.yaml``" msgstr "テストケースをå«ã‚€ãƒ•ァイル㯠``.yaml`` ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:507 msgid "Implementation" msgstr "実装" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:509 msgid "For platforms that support ``connection: local`` *and* ``connection: network_cli`` use the following guidance:" msgstr "``connection: local`` *ãŠã‚ˆã³* ``connection: network_cli`` をサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラットフォームã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:511 msgid "Name the :file:`targets/` directories after the module name." msgstr "モジュールåã®å¾Œã« :file:`targets/` ディレクトリーã«åå‰ã‚’付ã‘ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:512 msgid "The :file:`main.yaml` file should just reference the transport." msgstr ":file:`main.yaml` ファイルã¯ã€ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã‚’å‚ç…§ã™ã‚‹ã ã‘ã§ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:514 msgid "The following example walks through the integration tests for the ``vyos.vyos.vyos_l3_interfaces`` module in the `vyos.vyos `_ collection:" msgstr "以下ã®ä¾‹ã§ã¯ã€`vyos.vyos `_ コレクション㮠``vyos.vyos.vyos_l3_interfaces`` モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’行ã„ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:516 msgid "``test/integration/targets/vyos_l3_interfaces/tasks/main.yaml``" msgstr "``test/integration/targets/vyos_l3_interfaces/tasks/main.yaml``" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:525 msgid "``test/integration/targets/vyos_l3_interfaces/tasks/cli.yaml``" msgstr "``test/integration/targets/vyos_l3_interfaces/tasks/cli.yaml``" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:559 msgid "``test/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml``" msgstr "``test/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml``" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:627 msgid "Detecting test resources at runtime" msgstr "ランタイム時ã®ãƒ†ã‚¹ãƒˆãƒªã‚½ãƒ¼ã‚¹ã®æ¤œå‡º" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:629 msgid "Your tests should detect resources (such as interfaces) at runtime rather than hard-coding them into the test. This allows the test to run on a variety of systems." msgstr "テストã¯ã€(インターフェースãªã©ã®) リソースをテストã«ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹ã®ã§ã¯ãªãã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã«ãƒªã‚½ãƒ¼ã‚¹ã‚’検出ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ†ã‚¹ãƒˆã¯ã•ã¾ã–ã¾ãªã‚·ã‚¹ãƒ†ãƒ ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:631 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:203 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:262 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:298 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:327 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:358 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:405 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:611 msgid "For example:" msgstr "例:" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:655 msgid "See the complete test example of this at https://github.com/ansible-collections/cisco.nxos/blob/master/tests/integration/targets/prepare_nxos_tests/tasks/main.yml." msgstr "https://github.com/ansible-collections/cisco.nxos/blob/master/tests/integration/targets/prepare_nxos_tests/tasks/main.yml. ã§ã€ã“ã®ãƒ†ã‚¹ãƒˆã®å®Œå…¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:659 msgid "Running network integration tests" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµ±åˆãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:661 msgid "Ansible uses Zuul to run an integration test suite on every PR, including new tests introduced by that PR. To find and fix problems in network modules, run the network integration test locally before you submit a PR." msgstr "Ansible 㯠Zuul を使用ã—ã¦ã€ã™ã¹ã¦ã®ãƒ—ãƒ«è¦æ±‚ã§ã€ãƒ—ãƒ«è¦æ±‚ã«ã‚ˆã£ã¦å°Žå…¥ã•ã‚ŒãŸæ–°è¦ãƒ†ã‚¹ãƒˆã‚’å«ã‚€çµ±åˆãƒ†ã‚¹ãƒˆã‚¹ã‚¤ãƒ¼ãƒˆã‚’実行ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å•題を特定ã—ã¦ä¿®æ­£ã™ã‚‹ã«ã¯ã€ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã™ã‚‹å‰ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµ±åˆãƒ†ã‚¹ãƒˆã‚’ローカルã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:664 msgid "First, create an inventory file that points to your test machines. The inventory group should match the platform name (for example, ``eos``, ``ios``):" msgstr "ã¾ãšã€ãƒ†ã‚¹ãƒˆãƒžã‚·ãƒ³ã‚’å‚ç…§ã™ã‚‹ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを作æˆã—ã¾ã™ã€‚インベントリーグループã¯ã€ãƒ—ラットフォームåã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``eos``ã€``ios``)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:673 msgid "To run these network integration tests, use ``ansible-test network-integration --inventory
    ``:" msgstr "ã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€``ansible-test network-integration --inventory
    `` を使用ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:682 msgid "To run all network tests for a particular platform:" msgstr "特定ã®ãƒ—ラットフォームã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ†ã‚¹ãƒˆã‚’ã™ã¹ã¦å®Ÿè¡Œã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:688 msgid "This example will run against all ``vyos`` modules. Note that ``vyos_.*`` is a regex match, not a bash wildcard - include the `.` if you modify this example." msgstr "ã“ã®ä¾‹ã¯ã€ã™ã¹ã¦ã® ``vyos`` モジュールã«å¯¾ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚``vyos_.*`` ã¯ã€bash ワイルドカードã§ã¯ãªãã€æ­£è¦è¡¨ç¾ä¸€è‡´ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“ã®ä¾‹ã‚’修正ã™ã‚‹å ´åˆã¯ `.` ã‚’å«ã‚€ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:690 msgid "To run integration tests for a specific module:" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã—ã¦çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:696 msgid "To run a single test case on a specific module:" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’ 1 ã¤å®Ÿè¡Œã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:703 msgid "To run integration tests for a specific transport:" msgstr "特定ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã§çµ±åˆãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:713 msgid "See `test/integration/targets/nxos_bgp/tasks/main.yaml `_ for how this is implemented in the tests." msgstr "テストã«å®Ÿè£…ã•れる方法ã¯ã€ã€Œ`test/integration/targets/nxos_bgp/tasks/main.yaml `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:715 msgid "For more options:" msgstr "ãã®ä»–ã®ã‚ªãƒ—ション:" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:721 msgid "If you need additional help or feedback, reach out in the ``#ansible-network`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)." msgstr "追加ã®ã‚µãƒãƒ¼ãƒˆã‚„フィードãƒãƒƒã‚¯ãŒå¿…è¦ãªå ´åˆã¯ã€``#ansible-network`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‹ã‚‰å•ã„åˆã‚ã›ã—ã¦ãã ã•ã„(ansible.im ã®è¡¨ã¾ãŸã¯ `irc.libera.chat `_ ã® IRC を使用)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:724 msgid "Unit test requirements" msgstr "ユニットテストã®è¦ä»¶" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:726 msgid "High-level unit test requirements that new resource modules should follow:" msgstr "æ–°ã—ã„リソースモジュールãŒå¾“ã†é«˜ãƒ¬ãƒ™ãƒ«ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆè¦ä»¶ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:728 msgid "Write test cases for all the states with all possible combinations of config values." msgstr "設定値ã®çµ„ã¿åˆã‚ã›å¯èƒ½ãªã™ã¹ã¦ã®çŠ¶æ…‹ã«ã¤ã„ã¦ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:729 msgid "Write test cases to test the error conditions ( negative scenarios)." msgstr "テストケースを作æˆã—ã€ã‚¨ãƒ©ãƒ¼æ¡ä»¶ (è² ã®ã‚·ãƒŠãƒªã‚ª) をテストã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:730 msgid "Check the value of ``changed`` and ``commands`` keys in every test case." msgstr "ã™ã¹ã¦ã®ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã§ ``changed`` キーãŠã‚ˆã³ ``commands`` キーã®å€¤ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:732 msgid "We run all unit test cases on our Zuul test suite, on the latest python version supported by our CI setup." msgstr "CI 設定ã§ã‚µãƒãƒ¼ãƒˆã•れる最新㮠python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€Zuul テストスイートã§ã™ã¹ã¦ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:734 msgid "Use the :ref:`same procedure ` as the integration tests to view Zuul unit tests reports and logs." msgstr ":ref:`åŒã˜æ‰‹é † ` ã‚’çµ±åˆãƒ†ã‚¹ãƒˆã¨ã—ã¦ä½¿ç”¨ã—ã€Zuul ユニットテストã®ãƒ¬ãƒãƒ¼ãƒˆãŠã‚ˆã³ãƒ­ã‚°ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:736 msgid "See :ref:`unit module testing ` for general unit test details." msgstr "一般的ãªãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã®è©³ç´°ã¯ã€ã€Œ:ref:`ユニットモジュールã®ãƒ†ã‚¹ãƒˆ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:742 msgid "Example: Unit testing Ansible network resource modules" msgstr "例: Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:745 msgid "This section walks through an example of how to develop unit tests for Ansible resource modules." msgstr "本セクションã§ã¯ã€Ansible リソースモジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’開発ã™ã‚‹æ–¹æ³•ã®ä¾‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:748 msgid "See :ref:`testing_units` and :ref:`testing_units_modules` for general documentation on Ansible unit tests for modules. Please read those pages first to understand unit tests and why and when you should use them." msgstr "モジュールå‘ã‘ã® Ansible ユニットテストã®ä¸€èˆ¬çš„ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ã€Œ:ref:`testing_units`ã€ãŠã‚ˆã³ã€Œ:ref:`testing_units_modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ユニットテストã€ãŠã‚ˆã³ä½¿ç”¨ã™ã‚‹ç†ç”±ãŠã‚ˆã³ãã®æ–¹æ³•ã‚’ç†è§£ã™ã‚‹ã«ã¯ã€ã¾ãšã“れらã®ãƒšãƒ¼ã‚¸ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:753 msgid "Using mock objects to unit test Ansible network resource modules" msgstr "モック (模擬) オブジェクトを使用ã—㟠Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:756 msgid "`Mock objects `_ can be very useful in building unit tests for special or difficult cases, but they can also lead to complex and confusing coding situations. One good use for mocks would be to simulate an API. The ``mock`` Python package is bundled with Ansible (use ``import units.compat.mock``)." msgstr "`モックオブジェクト `_ ã¯ã€ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹ã‚„難ã—ã„ケースã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚’構築ã™ã‚‹ã®ã«éžå¸¸ã«ä¾¿åˆ©ã§ã™ãŒã€è¤‡é›‘ã§ç†è§£ã—ã¥ã‚‰ã„コーディングã«ãªã£ã¦ã—ã¾ã†ã“ã¨ã‚‚ã‚りã¾ã™ã€‚モックã®ä½¿ç”¨æ–¹æ³•ã¨ã—ã¦é©åˆ‡ãªã‚‚ã®ã® 1 ã¤ã«ã€API ã®ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆãŒã‚りã¾ã™ã€‚``mock`` Python パッケージã¯ã€Ansible ã«ãƒãƒ³ãƒ‰ãƒ«ã•れã¦ã„ã¾ã™ (``import units.compat.mock`` を使用)。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:762 msgid "You can mock the device connection and output from the device as follows:" msgstr "以下ã®ã‚ˆã†ã«ã€ãƒ‡ãƒã‚¤ã‚¹ã®æŽ¥ç¶šã¨ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®å‡ºåŠ›ã‚’æ¨¡å€£ã§ãã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:796 msgid "The facts file of the module now includes a new method, ``get_device_data``. Call ``get_device_data`` here to emulate the device output." msgstr "モジュールã®ãƒ•ã‚¡ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã«æ–°ã—ã„メソッド ``get_device_data`` ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ã“ã“ã§ ``get_device_data`` を呼ã³å‡ºã—ã¦ã€ãƒ‡ãƒã‚¤ã‚¹ã®å‡ºåŠ›ã‚’ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:800 msgid "Mocking device data" msgstr "デãƒã‚¤ã‚¹ãƒ‡ãƒ¼ã‚¿ã®æ¨¡å€£" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:802 msgid "To mock fetching results from devices or provide other complex data structures that come from external libraries, you can use ``fixtures`` to read in pre-generated data. The text files for this pre-generated data live in ``test/units/modules/network/PLATFORM/fixtures/``. See for example the `eos_l2_interfaces.cfg file `_." msgstr "デãƒã‚¤ã‚¹ã‹ã‚‰ã®çµæžœã®å–å¾—ã‚„ã€å¤–部ライブラリーã‹ã‚‰ã®è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®æä¾›ã‚’模倣ã™ã‚‹ãŸã‚ã«ã€``fixtures`` を使用ã—ã¦äº‹å‰ã«ç”Ÿæˆã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®äº‹å‰ã«ç”Ÿæˆã•れãŸãƒ‡ãƒ¼ã‚¿ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルã¯ã€``test/units/modules/network/PLATFORM/fixtures/`` ã«ã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€`eos_l2_interfaces.cfg file `_ ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:805 msgid "Load data using the ``load_fixture`` method and set this data as the return value of the ``get_device_data`` method in the facts file:" msgstr "``load_fixture`` メソッドを使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã¿ã€ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’ファクトファイル㮠``get_device_data`` ãƒ¡ã‚½ãƒƒãƒ‰ã®æˆ»ã‚Šå€¤ã¨ã—ã¦è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:815 msgid "See the unit test file `test_eos_l2_interfaces `_ for a practical example." msgstr "実用的ãªä¾‹ã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆãƒ•ァイル `test_eos_l2_interfaces `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:821 msgid ":ref:`testing_units`" msgstr ":ref:`testing_units`" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:822 msgid "Deep dive into developing unit tests for Ansible modules" msgstr "Ansible モジュールã®ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆé–‹ç™ºã‚’æ·±ãæŽ˜ã‚Šä¸‹ã’ã¦èª¿æŸ»" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:823 msgid ":ref:`testing_running_locally`" msgstr ":ref:`testing_running_locally`" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:824 msgid "Running tests locally including gathering and reporting coverage data" msgstr "ã‚«ãƒãƒ¬ãƒ¼ã‚¸ãƒ‡ãƒ¼ã‚¿ã®åŽé›†ã¨ãƒ¬ãƒãƒ¼ãƒˆã‚’å«ã‚€ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®ãƒ†ã‚¹ãƒˆã®å®Ÿè¡Œ" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:825 msgid ":ref:`developing_modules_general`" msgstr ":ref:`developing_modules_general`" #: ../../rst/network/dev_guide/developing_resource_modules_network.rst:826 msgid "Get started developing a module" msgstr "モジュール開発を始ã‚ã‚‹" #: ../../rst/network/dev_guide/documenting_modules_network.rst:6 msgid "Documenting new network platforms" msgstr "æ–°ã—ã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–" #: ../../rst/network/dev_guide/documenting_modules_network.rst:11 msgid "When you create network modules for a new platform, or modify the connections provided by an existing network platform(such as ``network_cli`` and ``httpapi``), you also need to update the :ref:`settings_by_platform` table and add or modify the Platform Options file for your platform." msgstr "æ–°ã—ã„プラットフォーム用ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å ´åˆã‚„ã€æ—¢å­˜ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム (``network_cli``ã€``httpapi`` ãªã©) ãŒæä¾›ã™ã‚‹æŽ¥ç¶šã‚’変更ã™ã‚‹å ´åˆã¯ã€:ref:`settings_by_platform` テーブルを更新ã—ã¦ã€ãƒ—ラットフォーム㮠Platform Options ファイルを追加ã¾ãŸã¯å¤‰æ›´ã™ã‚‹ã“ã¨ã‚‚å¿…è¦ã§ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:13 msgid "You should already have documented each module as described in :ref:`developing_modules_documenting`." msgstr "å„モジュールã¯ã€ã€Œ:ref:`developing_modules_documenting`ã€ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ã™ã§ã«æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:16 msgid "Modifying the platform options table" msgstr "プラットフォームオプションテーブルã®å¤‰æ›´" #: ../../rst/network/dev_guide/documenting_modules_network.rst:18 msgid "The :ref:`settings_by_platform` table is a convenient summary of the connections options provided by each network platform that has modules in Ansible. Add a row for your platform to this table, in alphabetical order. For example:" msgstr ":ref:`settings_by_platform` テーブルã¯ã€Ansible ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚‹å„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ ãŒæä¾›ã™ã‚‹æŽ¥ç¶šã‚ªãƒ—ションã®ä¾¿åˆ©ãªæ¦‚è¦ã§ã™ã€‚ãŠä½¿ã„ã®ãƒ—ラットフォームã®è¡Œã‚’アルファベット順ã«è¿½åŠ ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:25 msgid "Ensure that the table stays formatted correctly. That is:" msgstr "テーブルã®å½¢å¼ãŒæ­£ã—ã表示ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:27 msgid "Each row is inserted in alphabetical order." msgstr "å„行ã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆé †ã«æŒ¿å…¥ã•れã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:28 msgid "The cell division ``|`` markers line up with the ``+`` markers." msgstr "セル分割マーカー ``|`` 㨠``+`` マーカーã®ä½ç½®ã¯åŒã˜ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:29 msgid "The check marks appear only for the connection types provided by the network modules." msgstr "ã“ã®ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæä¾›ã™ã‚‹æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã«é™ã‚Šè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:34 msgid "Adding a platform-specific options section" msgstr "プラットフォーム固有ã®ã‚ªãƒ—ションセクションã®è¿½åŠ " #: ../../rst/network/dev_guide/documenting_modules_network.rst:36 msgid "The platform- specific sections are individual ``.rst`` files that provide more detailed information for the users of your network platform modules. Name your new file ``platform_.rst`` (for example, ``platform_myos.rst``). The platform name should match the module prefix. See `platform_eos.rst `_ and :ref:`eos_platform_options` for an example of the details you should provide in your platform-specific options section." msgstr "プラットフォーム固有ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームモジュールã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°æƒ…報をæä¾›ã™ã‚‹å€‹åˆ¥ã® ``.rst`` ファイルã§ã™ã€‚æ–°ã—ã„ファイル ``platform_.rst`` ã«åå‰ã‚’付ã‘ã¾ã™ (例: ``platform_myos.rst``)。プラットフォームåã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æŽ¥é ­è¾žã¨ä¸€è‡´ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プラットフォーム固有ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«æŒ‡å®šã™ã‚‹å¿…è¦ã®ã‚る詳細例ã¯ã€ã€Œ`platform_eos.rst `_ã€ãŠã‚ˆã³ã€Œ:ref:`eos_platform_options`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/documenting_modules_network.rst:38 msgid "Your platform-specific section should include the following:" msgstr "プラットフォーム固有ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€ä»¥ä¸‹ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:40 msgid "**Connections available table** - a deeper dive into each connection type, including details on credentials, indirect access, connections settings, and enable mode." msgstr "**接続å¯èƒ½ãªãƒ†ãƒ¼ãƒ–ル** - èªè¨¼æƒ…å ±ã€é–“æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã€æŽ¥ç¶šè¨­å®šã€æœ‰åŠ¹åŒ–ãƒ¢ãƒ¼ãƒ‰ã®è©³ç´°ãªã©ã€å„接続タイプã®è©³ç´°ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:41 msgid "**How to use each connection type** - with working examples of each connection type." msgstr "**å„æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®ä½¿ç”¨æ–¹æ³•** - å„æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®ä½œæ¥­ä¾‹ã‚’å«ã‚€ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:43 msgid "If your network platform supports SSH connections, also include the following at the bottom of your ``.rst`` file:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム㌠SSH 接続ã«å¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ã€``.rst`` ファイルã®ä¸‹éƒ¨ã«ä»¥ä¸‹ã‚‚追加ã—ã¾ã™ã€‚" #: ../../rst/network/dev_guide/documenting_modules_network.rst:50 msgid "Adding your new file to the table of contents" msgstr "æ–°è¦ãƒ•ァイルã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を表ã¸è¿½åŠ " #: ../../rst/network/dev_guide/documenting_modules_network.rst:52 msgid "As a final step, add your new file in alphabetical order in the ``platform_index.rst`` file. You should then build the documentation to verify your additions. See :ref:`community_documentation_contributions` for more details." msgstr "最終ステップã¨ã—ã¦ã€``platform_index.rst`` ãƒ•ã‚¡ã‚¤ãƒ«ã®æ–°ã—ã„ファイルをアルファベット順ã«è¿½åŠ ã—ã¾ã™ã€‚次ã«ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ビルドã—ã¦ã€è¿½åŠ ã—ãŸå†…容を確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€Œ:ref:`community_documentation_contributions`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/index.rst:5 msgid "Network Developer Guide" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–‹ç™ºè€…ガイド" #: ../../rst/network/dev_guide/index.rst:7 msgid "Welcome to the Developer Guide for Ansible Network Automation!" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’自動化ã™ã‚‹é–‹ç™ºè€…å‘ã‘ガイドã¸ã‚ˆã†ã“ã" #: ../../rst/network/dev_guide/index.rst:9 #: ../../rst/network/getting_started/index.rst:15 #: ../../rst/network/user_guide/index.rst:9 msgid "**Who should use this guide?**" msgstr "**本ガイドã®å¯¾è±¡è€…**" #: ../../rst/network/dev_guide/index.rst:11 msgid "If you want to extend Ansible for Network Automation by creating a module or plugin, this guide is for you. This guide is specific to networking. You should already be familiar with how to create, test, and document modules and plugins, as well as the prerequisites for getting your module or plugin accepted into the main Ansible repository. See the :ref:`developer_guide` for details. Before you proceed, please read:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã®ãŸã‚ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインを作æˆã—㦠Ansible ã‚’æ‹¡å¼µã™ã‚‹å ´åˆã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ç‰¹åŒ–ã—ã¦ã„ã¾ã™ã€‚モジュールやプラグインã®ä½œæˆã€ãƒ†ã‚¹ãƒˆã€æ–‡æ›¸åŒ–ã®æ–¹æ³•ã‚„ã€ä½œæˆã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„プラグインを Ansible ã®ãƒ¡ã‚¤ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«å—ã‘入れã¦ã‚‚らã†ãŸã‚ã®å‰ææ¡ä»¶ã«ã¤ã„ã¦ã¯ã€ã™ã§ã«ã”存知ã®ã“ã¨ã¨æ€ã„ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`developer_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。先ã«é€²ã‚€å‰ã«ã€ä»¥ä¸‹ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/network/dev_guide/index.rst:13 msgid "How to :ref:`add a custom plugin or module locally `." msgstr ":ref:`カスタムプラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ローカルã«è¿½åŠ ã™ã‚‹ ` 方法" #: ../../rst/network/dev_guide/index.rst:14 msgid "How to figure out if :ref:`developing a module is the right approach ` for my use case." msgstr "個別ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ :ref:`モジュールを開発ã™ã‚‹ã“ã¨ãŒæ­£ã—ã„アプローム` ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹æ–¹æ³•。" #: ../../rst/network/dev_guide/index.rst:15 msgid "How to :ref:`set up my Python development environment `." msgstr ":ref:`Python 開発環境を設定ã™ã‚‹ ` 方法" #: ../../rst/network/dev_guide/index.rst:16 msgid "How to :ref:`get started writing a module `." msgstr ":ref:`モジュール作æˆã‚’é–‹å§‹ã™ã‚‹ ` 方法" #: ../../rst/network/dev_guide/index.rst:19 msgid "Find the network developer task that best describes what you want to do:" msgstr "ãŠå®¢æ§˜ãŒå¿…è¦ãªã“ã¨ã‚’最もé©åˆ‡ã«èª¬æ˜Žã—ã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–‹ç™ºè€…ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/network/dev_guide/index.rst:21 msgid "I want to :ref:`develop a network resource module `." msgstr ":ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’開発 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/network/dev_guide/index.rst:22 msgid "I want to :ref:`develop a network connection plugin `." msgstr ":ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãƒ—ラグインを開発 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/network/dev_guide/index.rst:23 msgid "I want to :ref:`document my set of modules for a network platform `." msgstr ":ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã‚’文書化 ` ã—ãŸã„ã§ã™ã€‚" #: ../../rst/network/dev_guide/index.rst:25 msgid "If you prefer to read the entire guide, here's a list of the pages in order." msgstr "本ガイドをã™ã¹ã¦èª­ã‚€å ´åˆã¯ã€ä»¥ä¸‹ã«ç¤ºã™é †ç•ªã§ãƒšãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/basic_concepts.rst:3 msgid "Basic Concepts" msgstr "åŸºæœ¬çš„ãªæ¦‚念" #: ../../rst/network/getting_started/basic_concepts.rst:5 msgid "These concepts are common to all uses of Ansible, including network automation. You need to understand them to use Ansible for network automation. This basic introduction provides the background you need to follow the examples in this guide." msgstr "ã“ã®æ¦‚念ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化をå«ã‚€ Ansible ã®ã™ã¹ã¦ã®ç”¨é€”ã«å…±é€šã—ã¦ã„ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã®ãŸã‚ã«Ansibleを使用ã™ã‚‹ã«ã¯ã€ã“れらをç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®åŸºæœ¬çš„ãªç´¹ä»‹ã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã®ä¾‹ã‚’ç†è§£ã™ã‚‹ã®ã«å¿…è¦ãªèƒŒæ™¯ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:2 msgid "Control node" msgstr "コントロールノード" #: ../../rst/shared_snippets/basic_concepts.txt:4 msgid "Any machine with Ansible installed. You can run Ansible commands and playbooks by invoking the ``ansible`` or ``ansible-playbook`` command from any control node. You can use any computer that has a Python installation as a control node - laptops, shared desktops, and servers can all run Ansible. However, you cannot use a Windows machine as a control node. You can have multiple control nodes." msgstr "Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るマシン。任æ„ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ ``ansible`` コマンドã¾ãŸã¯ ``ansible-playbook`` コマンドを呼ã³å‡ºã™ã“ã¨ã§ã€Ansible コマンドãŠã‚ˆã³ Playbook を実行ã§ãã¾ã™ã€‚Python ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るコンピューターã§ã‚れã°ã€ãƒ©ãƒƒãƒ—トップã€å…±æœ‰ãƒ‡ã‚£ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚µãƒ¼ãƒãƒ¼ãªã©ã€ã©ã®ã‚³ãƒ³ãƒ”ューターã§ã‚‚ Ansible を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€Windows マシンをコントロールノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。複数ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:7 msgid "Managed nodes" msgstr "管ç†ãƒŽãƒ¼ãƒ‰" #: ../../rst/shared_snippets/basic_concepts.txt:9 msgid "The network devices (and/or servers) you manage with Ansible. Managed nodes are also sometimes called \"hosts\". Ansible is not installed on managed nodes." msgstr "Ansible ã§ç®¡ç†ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ (ã¾ãŸã¯ã‚µãƒ¼ãƒãƒ¼)。管ç†ãƒŽãƒ¼ãƒ‰ã¯ã€Œãƒ›ã‚¹ãƒˆã€ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚Ansible ã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“。" #: ../../rst/shared_snippets/basic_concepts.txt:12 msgid "Inventory" msgstr "インベントリー" #: ../../rst/shared_snippets/basic_concepts.txt:14 msgid "A list of managed nodes. An inventory file is also sometimes called a \"hostfile\". Your inventory can specify information like IP address for each managed node. An inventory can also organize managed nodes, creating and nesting groups for easier scaling. To learn more about inventory, see :ref:`the Working with Inventory` section." msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã®ä¸€è¦§ã€‚インベントリーファイルã¯ã€Œãƒ›ã‚¹ãƒˆãƒ•ァイルã€ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚インベントリーã¯ã€å„管ç†ãƒŽãƒ¼ãƒ‰ã«å¯¾ã—㦠IP アドレスãªã©ã®æƒ…報を指定ã§ãã¾ã™ã€‚インベントリーã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã‚’æ•´ç†ã§ãã€ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ãŒå®¹æ˜“ã«ãªã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ä½œæˆã‚„ãƒã‚¹ãƒˆåŒ–ãŒå¯èƒ½ã§ã™ã€‚インベントリーã®è©³ç´°ã¯ã€Œ:ref:`インベントリーã§ã®ä½œæ¥­ `ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:19 msgid "Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. You can install and use collections through `Ansible Galaxy `_. To learn more about collections, see :ref:`collections`." msgstr "コレクションã¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインをå«ã‚€ Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚`Ansible Galaxy `_ ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクションã®è©³ç´°ã¯ã€ã€Œ:ref:`collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:22 msgid "Modules" msgstr "モジュール" #: ../../rst/shared_snippets/basic_concepts.txt:24 msgid "The units of code Ansible executes. Each module has a particular use, from administering users on a specific type of database to managing VLAN interfaces on a specific type of network device. You can invoke a single module with a task, or invoke several different modules in a playbook. Starting in Ansible 2.10, modules are grouped in collections. For an idea of how many collections Ansible includes, take a look at the :ref:`list_of_collections`." msgstr "Ansible ãŒå®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®å˜ä½ã€‚å„モジュールã¯ã€ç‰¹å®šã‚¿ã‚¤ãƒ—ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’管ç†ã—ãŸã‚Šã€ç‰¹å®šã‚¿ã‚¤ãƒ—ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® VLAN インターフェースを管ç†ã™ã‚‹ãªã©ã€ç‰¹å®šã®ç”¨é€”ã«ä½¿ç”¨ã•れã¾ã™ã€‚タスク㧠1 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èµ·å‹•ã—ãŸã‚Šã€Playbook ã§è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èµ·å‹•ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible 2.10 以é™ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã¾ã¨ã‚られã¦ã„ã¾ã™ã€‚Ansible ã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ•°ã¯ã€ã€Œ:ref:`list_of_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:27 msgid "Tasks" msgstr "タスク" #: ../../rst/shared_snippets/basic_concepts.txt:29 msgid "The units of action in Ansible. You can execute a single task once with an ad hoc command." msgstr "Ansible ã§ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å˜ä½ã€‚アドホックコマンドを使用ã™ã‚‹ã¨ã€å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:32 msgid "Playbooks" msgstr "Playbook" #: ../../rst/shared_snippets/basic_concepts.txt:34 msgid "Ordered lists of tasks, saved so you can run those tasks in that order repeatedly. Playbooks can include variables as well as tasks. Playbooks are written in YAML and are easy to read, write, share and understand. To learn more about playbooks, see :ref:`about_playbooks`." msgstr "順番ã«ä¸¦ã¹ã‚‰ã‚ŒãŸã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã¯ä¿å­˜ã•れã¦ã„ã‚‹ãŸã‚ã€ãã®é †ç•ªã§ã‚¿ã‚¹ã‚¯ã‚’繰り返ã—実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã ã‘ã§ãªãã€å¤‰æ•°ã‚‚å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook 㯠YAML ã§è¨˜è¿°ã•れã¦ã„ã‚‹ãŸã‚ã€èª­ã¿ã‚„ã™ãã€æ›¸ãã‚„ã™ãã€å…±æœ‰ã—ã‚„ã™ãã€ç†è§£ã—ã‚„ã™ã„特徴ãŒã‚りã¾ã™ã€‚Playbook ã®è©³ç´°ã¯ã€ã€Œ:ref:`about_playbooks`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/first_inventory.rst:3 msgid "Build Your Inventory" msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ§‹ç¯‰" #: ../../rst/network/getting_started/first_inventory.rst:5 msgid "Running a playbook without an inventory requires several command-line flags. Also, running a playbook against a single device is not a huge efficiency gain over making the same change manually. The next step to harnessing the full power of Ansible is to use an inventory file to organize your managed nodes into groups with information like the ``ansible_network_os`` and the SSH user. A fully-featured inventory file can serve as the source of truth for your network. Using an inventory file, a single playbook can maintain hundreds of network devices with a single command. This page shows you how to build an inventory file, step by step." msgstr "インベントリーを使用ã›ãšã« Playbook を実行ã™ã‚‹ã«ã¯ã€ã„ãã¤ã‹ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ•ラグãŒå¿…è¦ã§ã™ã€‚ã¾ãŸã€å˜ä¸€ã®ãƒ‡ãƒã‚¤ã‚¹ã«å¯¾ã—㦠Playbook を実行ã—ã¦ã‚‚ã€åŒã˜å¤‰æ›´ã‚’手動ã§è¡Œã†ã®ã«æ¯”ã¹ã¦åŠ¹çŽ‡ãŒå¤§ããå‘上ã™ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。Ansible を最大é™ã«æ´»ç”¨ã™ã‚‹ãŸã‚ã®æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを使用ã—ã¦ã€ç®¡ç†å¯¾è±¡ã®ãƒŽãƒ¼ãƒ‰ã‚’ ``ansible_network_os`` ã‚„ SSH ユーザーãªã©ã®æƒ…報をæŒã¤ã‚°ãƒ«ãƒ¼ãƒ—ã«æ•´ç†ã™ã‚‹ã“ã¨ã§ã™ã€‚å®Œå…¨ãªæ©Ÿèƒ½ã‚’å‚™ãˆãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å”¯ä¸€ã®ä¿¡é ¼ã§ãるソースã¨ãªã‚Šã¾ã™ã€‚インベントリーファイルを使用ã™ã‚‹ã¨ã€1 ã¤ã® Playbook ã§æ•°ç™¾ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’ 1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§ç®¡ç†ã§ãã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを作æˆã™ã‚‹æ–¹æ³•を順を追ã£ã¦èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:11 msgid "Basic inventory" msgstr "基本的ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼" #: ../../rst/network/getting_started/first_inventory.rst:13 msgid "First, group your inventory logically. Best practice is to group servers and network devices by their What (application, stack or microservice), Where (datacenter or region), and When (development stage):" msgstr "ã¾ãšã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’è«–ç†çš„ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã—ã¾ã™ã€‚ベストプラクティスã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’ã€ç¨®é¡ž (アプリケーションã€ã‚¹ã‚¿ãƒƒã‚¯ã€ã¾ãŸã¯ãƒžã‚¤ã‚¯ãƒ­ã‚µãƒ¼ãƒ“ス)ã€å ´æ‰€ (データセンタã¾ãŸã¯åœ°åŸŸ)ã€ãŠã‚ˆã³æ™‚期 (開発段階) ã§ã‚°ãƒ«ãƒ¼ãƒ—化ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:15 msgid "**What**: db, web, leaf, spine" msgstr "**種類**: dbã€webã€leafã€spine" #: ../../rst/network/getting_started/first_inventory.rst:16 msgid "**Where**: east, west, floor_19, building_A" msgstr "**場所**: eastã€westã€floor_19ã€building_A" #: ../../rst/network/getting_started/first_inventory.rst:17 msgid "**When**: dev, test, staging, prod" msgstr "**時期**: devã€testã€stagingã€prod" #: ../../rst/network/getting_started/first_inventory.rst:19 msgid "Avoid spaces, hyphens, and preceding numbers (use ``floor_19``, not ``19th_floor``) in your group names. Group names are case sensitive." msgstr "グループåã«ã‚¹ãƒšãƒ¼ã‚¹ã¾ãŸã¯ãƒã‚¤ãƒ•ンを使用ã—ãªã„ã§ãã ã•ã„。ã¾ãŸã‚°ãƒ«ãƒ¼ãƒ—åã¯æ•°å€¤ã§å§‹ã‚ãªã„ã§ãã ã•ã„ (``19th_floor``ã§ã¯ãªã ``floor_19`` を使用)。グループåã¯å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:21 msgid "This tiny example data center illustrates a basic group structure. You can group groups using the syntax ``[metagroupname:children]`` and listing groups as members of the metagroup. Here, the group ``network`` includes all leafs and all spines; the group ``datacenter`` includes all network devices plus all webservers." msgstr "ã“ã®å°ã•ãªãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã®ä¾‹ã§ã¯ã€åŸºæœ¬çš„ãªã‚°ãƒ«ãƒ¼ãƒ—構造を説明ã—ã¾ã™ã€‚グループをグループ化ã™ã‚‹ã«ã¯ã€``[metagroupname:children]`` ã¨ã„ã†æ§‹æ–‡ã‚’使ã„ã€ã‚°ãƒ«ãƒ¼ãƒ—をメタグループã®ãƒ¡ãƒ³ãƒãƒ¼ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€``network`` ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ã™ã¹ã¦ã® leaf (リーフ) ã¨ã™ã¹ã¦ã® spine (スパイン) ãŒå«ã¾ã‚Œã€``datacenter`` ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€ã™ã¹ã¦ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨ã™ã¹ã¦ã® Web サーãƒãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:60 msgid "You can also create this same inventory in INI format." msgstr "åŒã˜ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’ INI å½¢å¼ã§ä½œæˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:86 msgid "Add variables to the inventory" msgstr "インベントリーã¸ã®å¤‰æ•°ã®è¿½åŠ " #: ../../rst/network/getting_started/first_inventory.rst:88 msgid "Next, you can set values for many of the variables you needed in your first Ansible command in the inventory, so you can skip them in the ``ansible-playbook`` command. In this example, the inventory includes each network device's IP, OS, and SSH user. If your network devices are only accessible by IP, you must add the IP to the inventory file. If you access your network devices using hostnames, the IP is not necessary." msgstr "次ã«ã€æœ€åˆã® Ansible コマンドã§å¿…è¦ã§ã‚ã£ãŸå¤šãã®å¤‰æ•°ã®å€¤ã‚’インベントリーã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€``ansible-playbook`` コマンドã§ã‚¹ã‚­ãƒƒãƒ—ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® IPã€OSã€SSH ユーザーãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã« IP ã§ã—ã‹ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㫠IP を追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ホストåを使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆã¯ã€IP ãŒå¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/network/getting_started/first_inventory.rst:137 msgid "Group variables within inventory" msgstr "インベントリー内ã®ã‚°ãƒ«ãƒ¼ãƒ—変数" #: ../../rst/network/getting_started/first_inventory.rst:139 msgid "When devices in a group share the same variable values, such as OS or SSH user, you can reduce duplication and simplify maintenance by consolidating these into group variables:" msgstr "グループ内ã®ãƒ‡ãƒã‚¤ã‚¹ãŒã€OS ã‚„ SSH ユーザーãªã©ã€åŒã˜å¤‰æ•°å€¤ã‚’共有ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®å€¤ã‚’グループ変数ã«çµ±åˆã™ã‚‹ã“ã¨ã§ã€é‡è¤‡ã‚’減らã—ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’簡素化ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:185 msgid "Variable syntax" msgstr "å¤‰æ•°ã®æ§‹æ–‡" #: ../../rst/network/getting_started/first_inventory.rst:187 msgid "The syntax for variable values is different in inventory, in playbooks, and in the ``group_vars`` files, which are covered below. Even though playbook and ``group_vars`` files are both written in YAML, you use variables differently in each." msgstr "変数ã®å€¤ã®æ§‹æ–‡ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€Playbookã€ãŠã‚ˆã³ ``group_vars`` ファイルã§ç•°ãªã‚Šã¾ã™ãŒã€ä»¥ä¸‹ã§èª¬æ˜Žã—ã¾ã™ã€‚Playbook 㨠``group_vars`` ファイルã¯ã©ã¡ã‚‰ã‚‚ YAML ã§è¨˜è¿°ã•れã¦ã„ã¾ã™ãŒã€å¤‰æ•°ã¯ YAML ã§ãれãžã‚Œç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:189 msgid "In an ini-style inventory file you **must** use the syntax ``key=value`` for variable values: ``ansible_network_os=vyos.vyos.vyos``." msgstr "ini å½¢å¼ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã§ã€å¤‰æ•°å€¤ ``ansible_network_os=vyos.vyos.vyos`` ã«æ§‹æ–‡ ``key=value`` を使用ã™ã‚‹ **å¿…è¦ãŒã‚りã¾ã™**。" #: ../../rst/network/getting_started/first_inventory.rst:190 msgid "In any file with the ``.yml`` or ``.yaml`` extension, including playbooks and ``group_vars`` files, you **must** use YAML syntax: ``key: value``." msgstr "Playbook ãŠã‚ˆã³ ``group_vars`` ファイルをå«ã‚€ ``.yml`` æ‹¡å¼µå­ã¾ãŸã¯ ``.yaml`` æ‹¡å¼µå­ã‚’æŒã¤ãƒ•ァイルã§ã¯ã€YAML æ§‹æ–‡ ``key: value`` を使用ã™ã‚‹**å¿…è¦ãŒã‚りã¾ã™**。" #: ../../rst/network/getting_started/first_inventory.rst:192 msgid "In ``group_vars`` files, use the full ``key`` name: ``ansible_network_os: vyos.vyos.vyos``." msgstr "``group_vars`` ファイルã§ã€å®Œå…¨ãª ``key`` å (``ansible_network_os: vyos.vyos.vyos``) を使用ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:193 msgid "In playbooks, use the short-form ``key`` name, which drops the ``ansible`` prefix: ``network_os: vyos.vyos.vyos``." msgstr "Playbook ã§ã¯ã€``ansible`` ã®æŽ¥é ­è¾žã‚’å–り除ã„ãŸçŸ­ã„å½¢å¼ã®``key`` ã®åå‰ã‚’使用ã—ã¾ã™ (``network_os: vyos.vyos.vyos``)。" #: ../../rst/network/getting_started/first_inventory.rst:197 msgid "Group inventory by platform" msgstr "プラットフォームã«ã‚ˆã‚‹ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—化" #: ../../rst/network/getting_started/first_inventory.rst:199 msgid "As your inventory grows, you may want to group devices by platform. This allows you to specify platform-specific variables easily for all devices on that platform:" msgstr "インベントリーãŒå¤§ãããªã‚‹ã«ã¤ã‚Œã€ãƒ—ラットフォームã§ãƒ‡ãƒã‚¤ã‚¹ã‚’グループ化ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãã®ãƒ—ラットフォームã®ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã«å¯¾ã—ã¦ãƒ—ラットフォーム固有ã®å¤‰æ•°ã‚’ç°¡å˜ã«æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:242 msgid "With this setup, you can run ``first_playbook.yml`` with only two flags:" msgstr "ã“ã®è¨­å®šã§ã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®ãƒ•ラグを指定ã—㦠``first_playbook.yml`` を実行ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:248 msgid "With the ``-k`` flag, you provide the SSH password(s) at the prompt. Alternatively, you can store SSH and other secrets and passwords securely in your group_vars files with ``ansible-vault``. See :ref:`network_vault` for details." msgstr "``-k`` フラグを使用ã—ã¦ã€ãƒ—ロンプト㧠SSH パスワードを指定ã—ã¾ã™ã€‚ã“れã§ã€``ansible-vault`` ã§ SSH ã¨ã€ãã®ä»–ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŠã‚ˆã³ãƒ‘スワードを group_vars ファイルã«å®‰å…¨ã«ä¿å­˜ã§ãã¾ã™ã€‚詳細ã¯ã€Œ:ref:`network_vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/first_inventory.rst:251 msgid "Verifying the inventory" msgstr "インベントリーã®ç¢ºèª" #: ../../rst/network/getting_started/first_inventory.rst:253 msgid "You can use the :ref:`ansible-inventory` CLI command to display the inventory as Ansible sees it." msgstr "CLI コマンド :ref:`ansible-inventory` を使用ã™ã‚‹ã¨ã€Ansible ãŒç¢ºèªã§ãるよã†ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’表示ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:336 msgid "Protecting sensitive variables with ``ansible-vault``" msgstr "``ansible-vault`` ã«ã‚ˆã‚‹æ©Ÿå¯†å¤‰æ•°ã®ä¿è­·" #: ../../rst/network/getting_started/first_inventory.rst:338 msgid "The ``ansible-vault`` command provides encryption for files and/or individual variables like passwords. This tutorial will show you how to encrypt a single SSH password. You can use the commands below to encrypt other sensitive information, such as database passwords, privilege-escalation passwords and more." msgstr "``ansible-vault`` コマンドã¯ã€ãƒ•ァイルやã€ãƒ‘スワードãªã©ã®å€‹ã€…ã®å¤‰æ•°ã®æš—å·åŒ–を行ã„ã¾ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã¯ã€1 ã¤ã® SSH パスワードを暗å·åŒ–ã™ã‚‹æ–¹æ³•を紹介ã—ã¾ã™ã€‚以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚„æ¨©é™æ˜‡æ ¼ã®ãŸã‚ã®ãƒ‘スワードãªã©ã€ãã®ä»–ã®æ©Ÿå¯†æƒ…報を暗å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:340 msgid "First you must create a password for ansible-vault itself. It is used as the encryption key, and with this you can encrypt dozens of different passwords across your Ansible project. You can access all those secrets (encrypted values) with a single password (the ansible-vault password) when you run your playbooks. Here's a simple example." msgstr "ã¾ãšã€ansible-vault 自体ã®ãƒ‘スワードを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã‚Œã¯æš—å·åŒ–キーã¨ã—ã¦ä½¿ç”¨ã•れã€Ansible プロジェクト全体ã§ä½•åã‚‚ã®ç•°ãªã‚‹ãƒ‘スワードを暗å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook を実行ã™ã‚‹ã¨ãã«ã€1 ã¤ã®ãƒ‘スワード (ansible-vault パスワード) ã§ã“ã®å…¨ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ (æš—å·åŒ–ã•れãŸå€¤) ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚以下ã«ç°¡å˜ãªä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:342 msgid "Create a file and write your password for ansible-vault to it:" msgstr "ファイルを作æˆã—ã¦ã€ansible-vault ã®ãƒ‘スワードを書ãè¾¼ã¿ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:348 msgid "Create the encrypted ssh password for your VyOS network devices, pulling your ansible-vault password from the file you just created:" msgstr "VyOS ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ç”¨ã«æš—å·åŒ–ã•れ㟠ssh パスワードを作æˆã—ã€ä½œæˆã—ãŸãƒ•ァイルã‹ã‚‰ ansible-vault パスワードをプルã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:354 msgid "If you prefer to type your ansible-vault password rather than store it in a file, you can request a prompt:" msgstr "ファイルã«ä¿å­˜ã›ãšã« ansible-vault パスワードを入力ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ—ãƒ­ãƒ³ãƒ—ãƒˆã‚’è¦æ±‚ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:360 msgid "and type in the vault password for ``my_user``." msgstr "ã¾ãŸã€``my_user`` ã« vault パスワードã«å…¥åŠ›ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:362 msgid "The :option:`--vault-id ` flag allows different vault passwords for different users or different levels of access. The output includes the user name ``my_user`` from your ``ansible-vault`` command and uses the YAML syntax ``key: value``:" msgstr "option:`--vault-id ` フラグを使用ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¾ãŸã¯ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ã”ã¨ã«ç•°ãªã‚‹ Vault パスワードを使用ã§ãã¾ã™ã€‚出力ã«ã¯ã€``ansible-vault`` コマンドã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å ``my_user`` ãŒå«ã¾ã‚Œã€YAML æ§‹æ–‡ ``key: value`` ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:375 msgid "This is an example using an extract from a YAML inventory, as the INI format does not support inline vaults:" msgstr "INI å½¢å¼ã¯ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã® vault ã«å¯¾å¿œã—ã¦ã„ãªã„ãŸã‚ã€ä»¥ä¸‹ã¯ YAML インベントリーã‹ã‚‰æŠ½å‡ºã‚’使用ã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:396 msgid "To use an inline vaulted variables with an INI inventory you need to store it in a 'vars' file in YAML format, it can reside in host_vars/ or group_vars/ to be automatically picked up or referenced from a play via ``vars_files`` or ``include_vars``." msgstr "インライン㮠Vault 変数を INI インベントリーã§ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ã“れを YAML å½¢å¼ã§ã€Œvarsã€ãƒ•ァイルã«ä¿å­˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れ㯠host_vars/ ã¾ãŸã¯ group_vars/ ã«ç½®ã‹ã‚Œã€``vars_files`` ã¾ãŸã¯ ``include_vars`` ã§ Play ã‹ã‚‰è‡ªå‹•çš„ã«å–å¾—ã¾ãŸã¯å‚ç…§ã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:399 msgid "To run a playbook with this setup, drop the ``-k`` flag and add a flag for your ``vault-id``:" msgstr "ã“ã®è¨­å®šã§ Playbook を実行ã™ã‚‹ã«ã¯ã€``-k`` フラグを削除ã—ã€``vault-id`` ã®ãƒ•ラグを追加ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:405 msgid "Or with a prompt instead of the vault password file:" msgstr "ã¾ãŸã¯ã€vault パスワードファイルã®ä»£ã‚りã«ãƒ—ロンプトを使用ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:411 msgid "To see the original value, you can use the debug module. Please note if your YAML file defines the `ansible_connection` variable (as we used in our example), it will take effect when you execute the command below. To prevent this, please make a copy of the file without the ansible_connection variable." msgstr "å…ƒã®å€¤ã‚’確èªã™ã‚‹ã«ã¯ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã§ãã¾ã™ã€‚(ã“ã®ä¾‹ã§ä½¿ç”¨ã—ãŸã‚ˆã†ã«) YAML ファイル㧠`ansible_connection` 変数ãŒå®šç¾©ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã«æ³¨æ„ã—ã¦ãã ã•ã„。以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨æœ‰åйã«ãªã‚Šã¾ã™ã€‚ã“れを防ãã«ã¯ã€ansible_connection 変数を使用ã›ãšã«ãƒ•ァイルã®ã‚³ãƒ”ーを作æˆã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/first_inventory.rst:427 msgid "Vault content can only be decrypted with the password that was used to encrypt it. If you want to stop using one password and move to a new one, you can update and re-encrypt existing vault content with ``ansible-vault rekey myfile``, then provide the old password and the new password. Copies of vault content still encrypted with the old password can still be decrypted with old password." msgstr "Vault ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€æš—å·åŒ–ã«ä½¿ç”¨ã•れãŸãƒ‘スワードã§ã®ã¿å¾©å·ã§ãã¾ã™ã€‚1 ã¤ã®ãƒ‘スワードã®ä½¿ç”¨ã‚’åœæ­¢ã—ã¦æ–°ã—ã„パスワードã«ç§»å‹•ã™ã‚‹å ´åˆã¯ã€``ansible-vault rekey myfile`` を使用ã—ã¦ã€æ—¢å­˜ã® Valut コンテンツを更新ã—ã¦å†æš—å·åŒ–ã§ãã€æ¬¡ã«å¤ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¨æ–°ã—ã„パスワードを入力ã—ã¾ã™ã€‚å¤ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã•れãŸã¾ã¾ã® Vault コンテンツã®ã‚³ãƒ”ーã¯ã€å¤ã„パスワードã§å¾©å·ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_inventory.rst:429 msgid "For more details on building inventory files, see :ref:`the introduction to inventory`; for more details on ansible-vault, see :ref:`the full Ansible Vault documentation`." msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®æ§‹ç¯‰ã®è©³ç´°ã¯ã€ã€Œ:ref:`ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ¦‚è¦`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ansible-vault ã®è©³ç´°ã¯ã€:ref:`Ansible Vault ã®å®Œå…¨ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/first_inventory.rst:431 msgid "Now that you understand the basics of commands, playbooks, and inventory, it's time to explore some more complex Ansible Network examples." msgstr "コマンドã€Playbookã€ãŠã‚ˆã³ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®åŸºæœ¬ã‚’ç†è§£ã—ãŸã‚‰ã€ã‚ˆã‚Šè¤‡é›‘㪠Ansible Network ã®ä¾‹ã‚’ã„ãã¤ã‹èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:6 msgid "Run Your First Command and Playbook" msgstr "最åˆã®ã‚³ãƒžãƒ³ãƒ‰ãŠã‚ˆã³ Playbook ã®å®Ÿè¡Œ" #: ../../rst/network/getting_started/first_playbook.rst:8 msgid "Put the concepts you learned to work with this quick tutorial. Install Ansible, execute a network configuration command manually, execute the same command with Ansible, then create a playbook so you can execute the command any time on multiple network devices." msgstr "ã“ã®ã‚¯ã‚¤ãƒƒã‚¯ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã¯ã€ã“れã¾ã§å­¦ã‚“ã æ¦‚念を実際ã«ä½¿ã£ã¦ã¿ã¾ã—ょã†ã€‚Ansible をインストールã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚³ãƒžãƒ³ãƒ‰ã‚’手動ã§å®Ÿè¡Œã—ã€Ansible ã§åŒã˜ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‹ã‚‰ Playbook を作æˆã™ã‚‹ãŸã‚ã€è¤‡æ•°ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã„ã¤ã§ã‚‚コマンドを実行ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:14 #: ../../rst/network/user_guide/network_best_practices_2.5.rst:13 msgid "Prerequisites" msgstr "è¦ä»¶" #: ../../rst/network/getting_started/first_playbook.rst:16 msgid "Before you work through this tutorial you need:" msgstr "ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’実行ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:18 msgid "Ansible 2.10 (or higher) installed" msgstr "Ansible 2.10 (以é™) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹" #: ../../rst/network/getting_started/first_playbook.rst:19 msgid "One or more network devices that are compatible with Ansible" msgstr "Ansible ã¨äº’æ›æ€§ã®ã‚ã‚‹ 1 ã¤ä»¥ä¸Šãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹" #: ../../rst/network/getting_started/first_playbook.rst:20 msgid "Basic Linux command line knowledge" msgstr "基本的㪠Linux コマンドラインã®çŸ¥è­˜" #: ../../rst/network/getting_started/first_playbook.rst:21 msgid "Basic knowledge of network switch & router configuration" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¤ãƒƒãƒãŠã‚ˆã³ãƒ«ãƒ¼ã‚¿ãƒ¼è¨­å®šã«é–¢ã™ã‚‹åŸºæœ¬çŸ¥è­˜" #: ../../rst/network/getting_started/first_playbook.rst:24 msgid "Install Ansible" msgstr "Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/network/getting_started/first_playbook.rst:26 msgid "Install Ansible using your preferred method. See :ref:`installation_guide`. Then return to this tutorial." msgstr "好ã¿ã®æ–¹æ³•ã§ Ansible をインストールã—ã¾ã™ã€‚「:ref:`installation_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ãã®å¾Œã€ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã«æˆ»ã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:28 msgid "Confirm the version of Ansible (must be >= 2.10):" msgstr "Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’確èªã—ã¾ã™ (2.10 以下ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™)。" #: ../../rst/network/getting_started/first_playbook.rst:36 msgid "Establish a manual connection to a managed node" msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã¸ã®æ‰‹å‹•接続ã®ç¢ºç«‹" #: ../../rst/network/getting_started/first_playbook.rst:38 msgid "To confirm your credentials, connect to a network device manually and retrieve its configuration. Replace the sample user and device name with your real credentials. For example, for a VyOS router:" msgstr "èªè¨¼æƒ…報を確èªã™ã‚‹ã«ã¯ã€æ‰‹å‹•ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã€ãã®è¨­å®šã‚’å–å¾—ã—ã¾ã™ã€‚サンプルユーザーåã¨ãƒ‡ãƒã‚¤ã‚¹åを実際ã®èªè¨¼æƒ…å ±ã«ç½®ãæ›ãˆã¾ã™ã€‚ãŸã¨ãˆã°ã€VyOS ルーターã®å ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:46 msgid "This manual connection also establishes the authenticity of the network device, adding its RSA key fingerprint to your list of known hosts. (If you have connected to the device before, you have already established its authenticity.)" msgstr "ã“ã®æ‰‹å‹•接続ã«ã‚ˆã‚Šã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ä¿¡é ¼æ€§ã‚‚確立ã•ã‚Œã€æ—¢çŸ¥ã®ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ã« RSA éµãƒ•ィンガープリントãŒè¿½åŠ ã•れã¾ã™ (以å‰ã«ãƒ‡ãƒã‚¤ã‚¹ã‚’接続ã—ãŸã“ã¨ãŒã‚ã‚‹å ´åˆã¯ã€ãã®ä¿¡é ¼æ€§ãŒã™ã§ã«ç¢ºç«‹ã•れã¦ã„ã¾ã™)。" #: ../../rst/network/getting_started/first_playbook.rst:50 msgid "Run your first network Ansible command" msgstr "最åˆã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ Ansible コマンドã®å®Ÿè¡Œ" #: ../../rst/network/getting_started/first_playbook.rst:52 msgid "Instead of manually connecting and running a command on the network device, you can retrieve its configuration with a single, stripped-down Ansible command:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’æ‰‹å‹•ã§æŽ¥ç¶šã—ã¦å®Ÿè¡Œã™ã‚‹ä»£ã‚りã«ã€1 ã¤ã®å‰Šé™¤æ¸ˆã¿ Ansible コマンドã§è¨­å®šã‚’å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:65 msgid "The flags in this command set seven values:" msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã®ãƒ•ラグã¯ã€7 ã¤ã®å€¤ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:59 msgid "the host group(s) to which the command should apply (in this case, all)" msgstr "コマンドをé©ç”¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ— (ã“ã®å ´åˆã¯ all)" #: ../../rst/network/getting_started/first_playbook.rst:60 msgid "the inventory (-i, the device or devices to target - without the trailing comma -i points to an inventory file)" msgstr "インベントリー (-iã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«è¨­å®šã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ (最後ã®ã‚³ãƒ³ãƒžãŒãªã„ -i ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®æŒ‡å®šãŒã‚りã¾ã›ã‚“))" #: ../../rst/network/getting_started/first_playbook.rst:61 msgid "the connection method (-c, the method for connecting and executing ansible)" msgstr "接続方法 (-cã€ansible ã®æŽ¥ç¶šæ–¹æ³•ãŠã‚ˆã³å®Ÿè¡Œæ–¹æ³•)" #: ../../rst/network/getting_started/first_playbook.rst:62 msgid "the user (-u, the username for the SSH connection)" msgstr "ユーザー (-uã€SSH 接続ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å)" #: ../../rst/network/getting_started/first_playbook.rst:63 msgid "the SSH connection method (-k, please prompt for the password)" msgstr "SSH æŽ¥ç¶šã®æ–¹æ³• (-kã€ãƒ‘スワードã®ãƒ—ロンプト有り)" #: ../../rst/network/getting_started/first_playbook.rst:64 msgid "the module (-m, the Ansible module to run, using the fully qualified collection name (FQCN))" msgstr "モジュール (-mã€å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) を使用ã—ãŸã€å®Ÿè¡Œã™ã‚‹ Ansible モジュール)" #: ../../rst/network/getting_started/first_playbook.rst:65 msgid "an extra variable ( -e, in this case, setting the network OS value)" msgstr "追加変数 (-eã€ã“ã®å ´åˆã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS 値ã®è¨­å®š)" #: ../../rst/network/getting_started/first_playbook.rst:67 msgid "NOTE: If you use ``ssh-agent`` with ssh keys, Ansible loads them automatically. You can omit ``-k`` flag." msgstr "注記: ssh éµã§ ``ssh-agent`` を使用ã™ã‚‹ã¨ã€Ansible ã«ã‚ˆã‚Šè‡ªå‹•çš„ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚``-k`` フラグã¯çœç•¥ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:71 msgid "If you are running Ansible in a virtual environment, you will also need to add the variable ``ansible_python_interpreter=/path/to/venv/bin/python``" msgstr "仮想環境㧠Ansible を実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€å¤‰æ•° ``ansible_python_interpreter=/path/to/venv/bin/python`` を追加ã™ã‚‹å¿…è¦ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:75 msgid "Create and run your first network Ansible Playbook" msgstr "最åˆã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® Ansible Playbook ã®ä½œæˆãŠã‚ˆã³å®Ÿè¡Œ" #: ../../rst/network/getting_started/first_playbook.rst:77 msgid "If you want to run this command every day, you can save it in a playbook and run it with ``ansible-playbook`` instead of ``ansible``. The playbook can store a lot of the parameters you provided with flags at the command line, leaving less to type at the command line. You need two files for this - a playbook and an inventory file." msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’毎日実行ã™ã‚‹å ´åˆã¯ã€Playbook ã«ä¿å­˜ã—ã€``ansible`` ã®ä»£ã‚り㫠``ansible-playbook`` を使用ã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚Playbook ã«ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ラグを使用ã—ã¦æŒ‡å®šã—ãŸå¤šãã®ãƒ‘ラメーターをä¿å­˜ã§ãã‚‹ãŸã‚ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§å…¥åŠ›ã™ã‚‹ãƒ‘ラメータãŒå°‘ãªããªã‚Šã¾ã™ã€‚ã“れを行ã†ãŸã‚ã«ã¯ã€Playbook ãŠã‚ˆã³ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㮠2 ã¤ã®ãƒ•ァイルãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:79 msgid "Download :download:`first_playbook.yml `, which looks like this:" msgstr ":download:`first_playbook.yml ` をダウンロードã—ã¾ã™ã€‚ã“れã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:84 msgid "The playbook sets three of the seven values from the command line above: the group (``hosts: all``), the connection method (``connection: ansible.netcommon.network_cli``) and the module (in each task). With those values set in the playbook, you can omit them on the command line. The playbook also adds a second task to show the config output. When a module runs in a playbook, the output is held in memory for use by future tasks instead of written to the console. The debug task here lets you see the results in your shell." msgstr "Playbook ã§ã¯ã€ä¸Šè¨˜ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã® 7 ã¤ã®å€¤ã®ã†ã¡ã® 3 ã¤ã€ã¤ã¾ã‚Šã‚°ãƒ«ãƒ¼ãƒ— (``hosts: all``)ã€æŽ¥ç¶šæ–¹æ³• (``connection: ansible.netcommon.network_cli``)ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (å„タスク内) ãŒè¨­å®šã•れã¾ã™ã€‚ã“れらã®å€¤ã‚’ Playbook ã§è¨­å®šã™ã‚‹ã¨ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§çœç•¥ã§ãã¾ã™ã€‚ã“ã® Playbook ã«ã¯ã€è¨­å®šå‡ºåŠ›ã‚’è¡¨ç¤ºã™ã‚‹ 2 番目ã®ã‚¿ã‚¹ã‚¯ã‚‚追加ã•れã¦ã„ã¾ã™ã€‚モジュール㌠Playbook ã§å®Ÿè¡Œã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ã®ã§ã¯ãªãã€å°†æ¥ã®ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã«ä¿æŒã•れã¾ã™ã€‚ã“ã“ã§ãƒ‡ãƒãƒƒã‚°ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã¨ã€ã‚·ã‚§ãƒ«ã§çµæžœã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:86 msgid "Run the playbook with the command:" msgstr "以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—㦠Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:92 msgid "The playbook contains one play with two tasks, and should generate output like this:" msgstr "Playbook ã«ã¯ã€2 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’æŒã¤ãƒ—レイ㌠1 ã¤å«ã¾ã‚Œã¦ãŠã‚Šã€æ¬¡ã®ã‚ˆã†ãªå‡ºåŠ›ãŒç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:111 msgid "Now that you can retrieve the device config, try updating it with Ansible. Download :download:`first_playbook_ext.yml `, which is an extended version of the first playbook:" msgstr "デãƒã‚¤ã‚¹è¨­å®šã‚’å–å¾—ã§ããŸã®ã§ã€Ansible ã§æ›´æ–°ã—ã¦ã¿ã¾ã—ょã†ã€‚最åˆã® Playbook ã®æ‹¡å¼µãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ :download:`first_playbook_ext.yml ` をダウンロードã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:116 msgid "The extended first playbook has four tasks in a single play. Run it with the same command you used above. The output shows you the change Ansible made to the config:" msgstr "æ‹¡å¼µã•ã‚ŒãŸæœ€åˆã® Playbook ã«ã¯ã€1 ã¤ã®ãƒ—レイ㫠4 ã¤ã®ã‚¿ã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚上記ã®ã‚³ãƒžãƒ³ãƒ‰ã¨åŒã˜ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦å®Ÿè¡Œã™ã‚‹ã¨ã€å‡ºåŠ›ã«ã¯ã€Ansible ãŒè¨­å®šã«åŠ ãˆãŸå¤‰æ›´ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:158 msgid "Gathering facts from network devices" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®ãƒ•ァクトã®åŽé›†" #: ../../rst/network/getting_started/first_playbook.rst:160 msgid "The ``gather_facts`` keyword now supports gathering network device facts in standardized key/value pairs. You can feed these network facts into further tasks to manage the network device." msgstr "``gather_facts`` キーワードã¯ã€æ¨™æº–化ã•れãŸéµã¨å€¤ã®ãƒšã‚¢ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ•ァクトã®åŽé›†ã«å¯¾å¿œã—ã¾ã™ã€‚ã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァクトをã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’管ç†ã™ã‚‹è¿½åŠ ã®ã‚¿ã‚¹ã‚¯ã«æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:162 msgid "You can also use the new ``gather_network_resources`` parameter with the network ``*_facts`` modules (such as :ref:`arista.eos.eos_facts `) to return just a subset of the device configuration, as shown below." msgstr "ã¾ãŸã€æ–°ã—ã„ ``gather_network_resources`` パラメーターをã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® ``*_facts`` モジュール (:ref:`arista.eos.eos_facts ` ãªã©) ã¨ã¨ã‚‚ã«ä½¿ç”¨ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãƒ‡ãƒã‚¤ã‚¹è¨­å®šã®ã‚µãƒ–セットã®ã¿ã‚’è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:173 msgid "The playbook returns the following interface facts:" msgstr "Playbook ã¯ä»¥ä¸‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ãƒ•ァクトを返ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/first_playbook.rst:210 msgid "Note that this returns a subset of what is returned by just setting ``gather_subset: interfaces``." msgstr "ã“れã¯ã€``gather_subset: interfaces`` ã®è¨­å®šã§è¿”ã•れる内容ã®ã‚µãƒ–セットを返ã™ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/first_playbook.rst:212 msgid "You can store these facts and use them directly in another task, such as with the :ref:`eos_interfaces ` resource module." msgstr "ã“れらã®ãƒ•ァクトをä¿å­˜ã—ã€:ref:`eos_interfaces ` リソースモジュールãªã©ã®åˆ¥ã®ã‚¿ã‚¹ã‚¯ã§ç›´æŽ¥ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:23 msgid "Getting Started Guide" msgstr "入門ガイド" #: ../../rst/network/getting_started/index.rst:5 msgid "Network Getting Started" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¬ã‚¤ãƒ‰" #: ../../rst/network/getting_started/index.rst:7 msgid "Ansible collections support a wide range of vendors, device types, and actions, so you can manage your entire network with a single automation tool. With Ansible, you can:" msgstr "Ansible コレクションã¯åºƒç¯„ãªãƒ™ãƒ³ãƒ€ãƒ¼ã€ãƒ‡ãƒã‚¤ã‚¹ã‚¿ã‚¤ãƒ—ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«å¯¾å¿œã—ã¦ã„ã‚‹ãŸã‚ã€1 ã¤ã®è‡ªå‹•化ツールã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å…¨ä½“を管ç†ã§ãã¾ã™ã€‚Ansible ã§ã¯ã€ä»¥ä¸‹ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:9 msgid "Automate repetitive tasks to speed routine network changes and free up your time for more strategic work" msgstr "å復タスクを自動化ã—ã¦ã€ãƒ«ãƒ¼ãƒãƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å¤‰æ›´ã‚’迅速化ã—ã€ãã®æ™‚間をより戦略的ãªä½œæ¥­ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:10 msgid "Leverage the same simple, powerful, and agentless automation tool for network tasks that operations and development use" msgstr "æ“作ã¨é–‹ç™ºã§ä½¿ç”¨ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¹ã‚¯ã®ä¸¡æ–¹ã«ã€åŒä¸€ã®ç°¡å˜ã§å¼·åŠ›ãªã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆãƒ¬ã‚¹ã®è‡ªå‹•化ツールを使用ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:11 msgid "Separate the data model (in a playbook or role) from the execution layer (via Ansible modules) to manage heterogeneous network devices" msgstr "異機種環境ã«ã‚ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’管ç†ã™ã‚‹ãŸã‚ã€(Ansible モジュールã«ã‚ˆã‚Š) 実行レイヤーã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ¢ãƒ‡ãƒ« (Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«) を分離ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:12 msgid "Benefit from community and vendor-generated sample playbooks and roles to help accelerate network automation projects" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化プロジェクトを加速化ã™ã‚‹ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŠã‚ˆã³ãƒ™ãƒ³ãƒ€ãƒ¼ãŒç”Ÿæˆã—ãŸã‚µãƒ³ãƒ—ル㮠Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’活用ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:13 msgid "Communicate securely with network hardware over SSH or HTTPS" msgstr "SSH ã¾ãŸã¯ HTTPS を介ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¨ã‚»ã‚­ãƒ¥ã‚¢ã«é€šä¿¡ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/index.rst:17 msgid "This guide is intended for network engineers using Ansible for the first time. If you understand networks but have never used Ansible, work through the guide from start to finish." msgstr "ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€Ansible ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã‚’対象ã¨ã—ã¦ã„ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ç†è§£ã—ã¦ã„ã¦ã€Ansible を使用ã—ãŸã“ã¨ãŒãªã„å ´åˆã¯ã€ã‚¬ã‚¤ãƒ‰ã‚’最åˆã‹ã‚‰æœ€å¾Œã¾ã§å®Ÿè·µã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/index.rst:19 msgid "This guide is also useful for experienced Ansible users automating network tasks for the first time. You can use Ansible commands, playbooks and modules to configure hubs, switches, routers, bridges and other network devices. But network modules are different from Linux/Unix and Windows modules, and you must understand some network-specific concepts to succeed. If you understand Ansible but have never automated a network task, start with the second section." msgstr "ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¹ã‚¯ã‚’åˆã‚ã¦è‡ªå‹•化ã™ã‚‹çµŒé¨“豊富㪠Ansible ユーザーã«ã‚‚役立ã¡ã¾ã™ã€‚Ansible コマンドã€Playbookã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã€ãƒãƒ–ã€ã‚¹ã‚¤ãƒƒãƒã€ãƒ«ãƒ¼ã‚¿ãƒ¼ã€ãƒ–リッジã€ãã®ä»–ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’æ§‹æˆã§ãã¾ã™ã€‚ãŸã ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Linux/Unix ãŠã‚ˆã³ Windows ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã¯ç•°ãªã‚Šã€æˆåŠŸã™ã‚‹ã«ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å›ºæœ‰ã®æ¦‚念をç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible ã‚’ç†è§£ã—ã¦ã„ã¦ã‚‚ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¹ã‚¯ã‚’自動化ã—ãŸã“ã¨ãŒãªã„å ´åˆã¯ã€2 番目ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å§‹ã‚ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/index.rst:21 msgid "This guide introduces basic Ansible concepts and guides you through your first Ansible commands, playbooks and inventory entries." msgstr "本ガイドã§ã¯ã€åŸºæœ¬çš„㪠Ansible ã®æ¦‚念を紹介ã—ã€Ansible コマンドã€Playbookã€ãŠã‚ˆã³ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/intermediate_concepts.rst:3 msgid "Beyond the basics" msgstr "中級編" #: ../../rst/network/getting_started/intermediate_concepts.rst:5 msgid "This page introduces some concepts that help you manage your Ansible workflow with directory structure and source control. Like the Basic Concepts at the beginning of this guide, these intermediate concepts are common to all uses of Ansible." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ã¨ã‚½ãƒ¼ã‚¹ç®¡ç†ã‚’使用ã—㟠Ansible ワークフローã®ç®¡ç†ã«å½¹ç«‹ã¤æ¦‚念を紹介ã—ã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã®æœ€åˆã®åŸºæœ¬æ¦‚念ã¨åŒæ§˜ã«ã€ã“れらã®ä¸­é–“概念㯠Ansible ã®ã™ã¹ã¦ã®ä½¿ç”¨ã«å…±é€šã§ã™ã€‚" #: ../../rst/network/getting_started/intermediate_concepts.rst:12 msgid "A typical Ansible filetree" msgstr "一般的㪠Ansible ファイルツリー" #: ../../rst/network/getting_started/intermediate_concepts.rst:14 msgid "Ansible expects to find certain files in certain places. As you expand your inventory and create and run more network playbooks, keep your files organized in your working Ansible project directory like this:" msgstr "Ansible ã§ã¯ã€ç‰¹å®šã®å ´æ‰€ã«ã‚る特定ã®ãƒ•ァイルを見ã¤ã‘ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚インベントリーを拡張ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® Playbook を作æˆã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€ãƒ•ァイルを以下ã®ã‚ˆã†ã«ä½œæ¥­ç”¨ã® Ansible ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«æ•´ç†ã—ãŸçŠ¶æ…‹ã«ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/intermediate_concepts.rst:33 msgid "The ``backup`` directory and the files in it get created when you run modules like ``vyos_config`` with the ``backup: yes`` parameter." msgstr "``backup`` ディレクトリーã¨ã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ•ァイルã¯ã€``backup: yes`` パラメーターを使用ã—㟠``vyos_config`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹éš›ã«ä½œæˆã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/intermediate_concepts.rst:37 msgid "Tracking changes to inventory and playbooks: source control with git" msgstr "インベントリーãŠã‚ˆã³ Playbook ã¸ã®å¤‰æ›´ã®è¿½è·¡: git ã§ã®ã‚½ãƒ¼ã‚¹åˆ¶å¾¡" #: ../../rst/network/getting_started/intermediate_concepts.rst:39 msgid "As you expand your inventory, roles and playbooks, you should place your Ansible projects under source control. We recommend ``git`` for source control. ``git`` provides an audit trail, letting you track changes, roll back mistakes, view history and share the workload of managing, maintaining and expanding your Ansible ecosystem. There are plenty of tutorials and guides to using ``git`` available." msgstr "インベントリーã€ãƒ­ãƒ¼ãƒ«ã€ãŠã‚ˆã³ Playbook ã‚’æ‹¡å¼µã™ã‚‹ã¨ãã¯ã€Ansible プロジェクトをソース管ç†ä¸‹ã«ç½®ãå¿…è¦ãŒã‚りã¾ã™ã€‚ソース管ç†ã«ã¯ ``git`` ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚``git`` ã«ã¯ç›£æŸ»è¨¼è·¡ãŒç”¨æ„ã•れã¦ãŠã‚Šã€å¤‰æ›´ã®è¿½è·¡ã€å¤±æ•—ã®ãƒ­ãƒ¼ãƒ«ãƒãƒƒã‚¯ã€å±¥æ­´ã®è¡¨ç¤ºã€Ansible エコシステムã®ç®¡ç†ã€ç¶­æŒã€æ‹¡å¼µã®ãƒ¯ãƒ¼ã‚¯ãƒ­ãƒ¼ãƒ‰ã®å…±æœ‰ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚``git`` を使用ã™ã‚‹ãŸã‚ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¨ã‚¬ã‚¤ãƒ‰ãŒå¤šæ•°ç”¨æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_connection_options.rst:5 msgid "Working with network connection options" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã‚ªãƒ—ションã®ä½¿ç”¨" #: ../../rst/network/getting_started/network_connection_options.rst:7 msgid "Network modules can support multiple connection protocols, such as ``ansible.netcommon.network_cli``, ``ansible.netcommon.netconf``, and ``ansible.netcommon.httpapi``. These connections include some common options you can set to control how the connection to your network device behaves." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``ansible.netcommon.network_cli``ã€``ansible.netcommon.netconf``ã€``ansible.netcommon.httpapi`` ãªã©ã®è¤‡æ•°ã®æŽ¥ç¶šãƒ—ロトコルをサãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ã“ã‚Œã‚‰ã®æŽ¥ç¶šã«ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¸ã®æŽ¥ç¶šã®å‹•作を制御ã™ã‚‹ãŸã‚ã«è¨­å®šã§ãる一般的ãªã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/network/getting_started/network_connection_options.rst:9 msgid "Common options are:" msgstr "一般的ãªã‚ªãƒ—ションã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/network/getting_started/network_connection_options.rst:11 msgid "``become`` and ``become_method`` as described in :ref:`privilege_escalation`." msgstr "「:ref:`privilege_escalation`ã€ã«è¨˜è¼‰ã•れる通り㫠``become`` ãŠã‚ˆã³ ``become_method``" #: ../../rst/network/getting_started/network_connection_options.rst:12 msgid "``network_os`` - set to match your network platform you are communicating with. See the :ref:`platform-specific ` pages." msgstr "``network_os`` - 通信ã—ã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã¨ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¾ã™ã€‚「:ref:`platform-specific `ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_connection_options.rst:13 msgid "``remote_user`` as described in :ref:`connection_set_user`." msgstr "「:ref:`connection_set_user`ã€ã«è¨˜è¼‰ã•れる通り㫠``remote_user``" #: ../../rst/network/getting_started/network_connection_options.rst:14 msgid "Timeout options - ``persistent_command_timeout``, ``persistent_connect_timeout``, and ``timeout``." msgstr "タイムアウトオプション: ``persistent_command_timeout``ã€``persistent_connect_timeout``ã€ãŠã‚ˆã³ ``timeout``" #: ../../rst/network/getting_started/network_connection_options.rst:19 msgid "Setting timeout options" msgstr "タイムアウトオプションã®è¨­å®š" #: ../../rst/network/getting_started/network_connection_options.rst:21 msgid "When communicating with a remote device, you have control over how long Ansible maintains the connection to that device, as well as how long Ansible waits for a command to complete on that device. Each of these options can be set as variables in your playbook files, environment variables, or settings in your :ref:`ansible.cfg file `." msgstr "リモートデãƒã‚¤ã‚¹ã¨é€šä¿¡ã™ã‚‹å ´åˆã¯ã€Ansible ãŒãã®ãƒ‡ãƒã‚¤ã‚¹ã¸ã®æŽ¥ç¶šã‚’ç¶­æŒã™ã‚‹æ™‚é–“ã€ãŠã‚ˆã³ãã®ãƒ‡ãƒã‚¤ã‚¹ã§ã‚³ãƒžãƒ³ãƒ‰ãŒå®Œäº†ã™ã‚‹ã¾ã§ Ansible ãŒå¾…機ã™ã‚‹æ™‚間を制御ã§ãã¾ã™ã€‚å„オプションã¯ã€Playbook ファイルã®å¤‰æ•°ã€ç’°å¢ƒå¤‰æ•°ã€ã¾ãŸã¯ :ref:`ansible.cfg ファイル ` ã®è¨­å®šã¨ã—ã¦è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/network_connection_options.rst:23 msgid "For example, the three options for controlling the connection timeout are as follows." msgstr "ãŸã¨ãˆã°ã€æŽ¥ç¶šã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’制御ã™ã‚‹ 3 ã¤ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/network/getting_started/network_connection_options.rst:25 msgid "Using vars (per task):" msgstr "vars (タスクã”ã¨) ã®ä½¿ç”¨:" #: ../../rst/network/getting_started/network_connection_options.rst:35 msgid "Using the environment variable:" msgstr "環境変数ã®ä½¿ç”¨:" #: ../../rst/network/getting_started/network_connection_options.rst:41 msgid "Using the global configuration (in :file:`ansible.cfg`)" msgstr "グローãƒãƒ«è¨­å®šã®ä½¿ç”¨ (:file:`ansible.cfg`) ã®ä½¿ç”¨" #: ../../rst/network/getting_started/network_connection_options.rst:48 msgid "See :ref:`ansible_variable_precedence` for details on the relative precedence of each of these variables. See the individual connection type to understand each option." msgstr "ã“れらã®å„変数ã®ç›¸å¯¾å„ªå…ˆåº¦ã¯ã€ã€Œ:ref:`ansible_variable_precedence`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。å„オプションã«ã¤ã„ã¦ã¯ã€å€‹åˆ¥ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:3 msgid "How Network Automation is Different" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã®ç›¸é•点" #: ../../rst/network/getting_started/network_differences.rst:5 msgid "Network automation uses the basic Ansible concepts, but there are important differences in how the network modules work. This introduction prepares you to understand the exercises in this guide." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã¯ã€åŸºæœ¬çš„㪠Ansible ã®æ¦‚念を利用ã—ã¾ã™ãŒã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å‹•作ã«ã¯é‡è¦ãªç›¸é•点ãŒã‚りã¾ã™ã€‚æœ¬ã‚¬ã‚¤ãƒ‰ã®æ¼”ç¿’ã‚’å§‹ã‚ã‚‹å‰ã«ã€ã“ã®ã‚¤ãƒ³ãƒˆãƒ­ãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:11 msgid "Execution on the control node" msgstr "コントロールノードã§ã®å®Ÿè¡Œ" #: ../../rst/network/getting_started/network_differences.rst:13 msgid "Unlike most Ansible modules, network modules do not run on the managed nodes. From a user's point of view, network modules work like any other modules. They work with ad hoc commands, playbooks, and roles. Behind the scenes, however, network modules use a different methodology than the other (Linux/Unix and Windows) modules use. Ansible is written and executed in Python. Because the majority of network devices can not run Python, the Ansible network modules are executed on the Ansible control node, where ``ansible`` or ``ansible-playbook`` runs." msgstr "ã»ã¨ã‚“ã©ã® Ansible モジュールã¨ã¯ç•°ãªã‚Šã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã•れã¾ã›ã‚“。ユーザーã‹ã‚‰è¦‹ã‚‹ã¨ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒæ§˜ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚アドホックコマンドã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’使用ã—ã¾ã™ã€‚ã—ã‹ã—ã€ãã®è£ã§ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä»– (Linux/Unix ãŠã‚ˆã³ Windows) ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã¯ç•°ãªã‚‹æ–¹æ³•を使用ã—ã¾ã™ã€‚Ansible 㯠Python ã§è¨˜è¿°ã•れã€å®Ÿè¡Œã•れã¾ã™ã€‚大部分ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¯ Python を実行ã§ããªã„ãŸã‚ã€Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible コントロールノードã§å®Ÿè¡Œã•れã¾ã™ (``ansible`` ã¾ãŸã¯ ``ansible-playbook`` ãŒå®Ÿè¡Œã•れる場所ã§ã™)。" #: ../../rst/network/getting_started/network_differences.rst:15 msgid "Network modules also use the control node as a destination for backup files, for those modules that offer a ``backup`` option. With Linux/Unix modules, where a configuration file already exists on the managed node(s), the backup file gets written by default in the same directory as the new, changed file. Network modules do not update configuration files on the managed nodes, because network configuration is not written in files. Network modules write backup files on the control node, usually in the `backup` directory under the playbook root directory." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚‚ã€``backup`` オプションをæä¾›ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã®å®›å…ˆã¨ã—ã¦ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’使用ã—ã¾ã™ã€‚Linux/Unix モジュールã§ã¯ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«è¨­å®šãƒ•ァイルãŒã™ã§ã«å­˜åœ¨ã™ã‚‹å ´åˆã«ã€ãƒ‡ãƒ•ォルトã§ã¯ã€æ–°ã—ã„変更ã—ãŸãƒ•ァイルã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã¯ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¾ã‚Œãªã„ãŸã‚ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ä¸Šã®æ§‹æˆãƒ•ァイルを更新ã—ã¾ã›ã‚“。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€é€šå¸¸ã¯ Playbook ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ä¸‹ã® `backup` ディレクトリーã«ã‚るコントロールノードã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを書ãè¾¼ã¿ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_differences.rst:18 msgid "Multiple communication protocols" msgstr "複数ã®é€šä¿¡ãƒ—ロトコル" #: ../../rst/network/getting_started/network_differences.rst:20 msgid "Because network modules execute on the control node instead of on the managed nodes, they can support multiple communication protocols. The communication protocol (XML over SSH, CLI over SSH, API over HTTPS) selected for each network module depends on the platform and the purpose of the module. Some network modules support only one protocol; some offer a choice. The most common protocol is CLI over SSH. You set the communication protocol with the ``ansible_connection`` variable:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ã¯ãªãコントロールノードã§å®Ÿè¡Œã•れるãŸã‚ã€è¤‡æ•°ã®é€šä¿¡ãƒ—ロトコルをサãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚å„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é¸æŠžã•れる通信プロトコル (SSH ã§ã® XMLã€SSH ã§ã® CLIã€HTTPS ã§ã® API) ã¯ã€ãƒ—ラットフォームã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ç›®çš„ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚プロトコルを 1 ã¤ã—ã‹ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚‚ã‚りã¾ã™ã€‚複数ã®ãƒ—ロトコルをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ロトコルもã‚りã¾ã™ã€‚最も一般的ãªãƒ—ロトコル㯠CLI over SSH ã§ã™ã€‚``ansible_connection`` 変数を使用ã—ã¦é€šä¿¡ãƒ—ロトコルを設定ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "Value of ansible_connection" msgstr "ansible_connection ã®å€¤" #: ../../rst/network/getting_started/network_differences.rst:1 #: ../../rst/network/user_guide/platform_ce.rst:23 #: ../../rst/network/user_guide/platform_cnos.rst:21 #: ../../rst/network/user_guide/platform_dellos10.rst:21 #: ../../rst/network/user_guide/platform_dellos6.rst:21 #: ../../rst/network/user_guide/platform_dellos9.rst:21 #: ../../rst/network/user_guide/platform_enos.rst:21 #: ../../rst/network/user_guide/platform_eos.rst:21 #: ../../rst/network/user_guide/platform_eric_eccli.rst:21 #: ../../rst/network/user_guide/platform_exos.rst:22 #: ../../rst/network/user_guide/platform_frr.rst:21 #: ../../rst/network/user_guide/platform_icx.rst:21 #: ../../rst/network/user_guide/platform_ios.rst:21 #: ../../rst/network/user_guide/platform_iosxr.rst:25 #: ../../rst/network/user_guide/platform_ironware.rst:21 #: ../../rst/network/user_guide/platform_junos.rst:24 #: ../../rst/network/user_guide/platform_meraki.rst:21 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:23 #: ../../rst/network/user_guide/platform_netvisor.rst:22 #: ../../rst/network/user_guide/platform_nos.rst:22 #: ../../rst/network/user_guide/platform_nxos.rst:21 #: ../../rst/network/user_guide/platform_routeros.rst:22 #: ../../rst/network/user_guide/platform_slxos.rst:22 #: ../../rst/network/user_guide/platform_voss.rst:22 #: ../../rst/network/user_guide/platform_vyos.rst:21 #: ../../rst/network/user_guide/platform_weos4.rst:22 msgid "Protocol" msgstr "プロトコル" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "Requires" msgstr "å¿…é ˆ" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "Persistent?" msgstr "永続的?" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "ansible.netcommon.network_cli" msgstr "ansible.netcommon.network_cli" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "CLI over SSH" msgstr "SSH ã§ã® CLI" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "network_os setting" msgstr "network_os ã®è¨­å®š" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "yes" msgstr "ã¯ã„" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "ansible.netcommon.netconf" msgstr "ansible.netcommon.netconf" #: ../../rst/network/getting_started/network_differences.rst:1 #: ../../rst/network/user_guide/platform_ce.rst:23 #: ../../rst/network/user_guide/platform_iosxr.rst:25 #: ../../rst/network/user_guide/platform_junos.rst:24 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:23 msgid "XML over SSH" msgstr "SSH ã§ã® XML" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "ansible.netcommon.httpapi" msgstr "ansible.netcommon.httpapi" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "API over HTTP/HTTPS" msgstr "HTTP/HTTPS ã§ã® API" #: ../../rst/network/getting_started/network_differences.rst:1 #: ../../rst/network/user_guide/platform_index.rst:61 msgid "local" msgstr "ローカル" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "depends on provider" msgstr "プロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã£ã¦ç•°ãªã‚‹" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "provider setting" msgstr "プロãƒã‚¤ãƒ€ãƒ¼è¨­å®š" #: ../../rst/network/getting_started/network_differences.rst:1 msgid "no" msgstr "ã„ã„ãˆ" #: ../../rst/network/getting_started/network_differences.rst:32 msgid "``ansible.netcommon.httpapi`` deprecates ``eos_eapi`` and ``nxos_nxapi``. See :ref:`httpapi_plugins` for details and an example." msgstr "``ansible.netcommon.httpapi`` ã¯ã€``eos_eapi`` ãŠã‚ˆã³ ``nxos_nxapi`` ã‚’éžæŽ¨å¥¨ã¨ã—ã¾ã™ã€‚詳細ã¨ä¾‹ã¯ã€Œ:ref:`httpapi_plugins`ã€å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:34 msgid "The ``ansible_connection: local`` has been deprecated. Please use one of the persistent connection types listed above instead. With persistent connections, you can define the hosts and credentials only once, rather than in every task. You also need to set the ``network_os`` variable for the specific network platform you are communicating with. For more details on using each connection type on various platforms, see the :ref:`platform-specific ` pages." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚りã«ã€ä¸Šè¨˜ã®æ°¸ç¶šçš„æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãã ã•ã„。永続的接続ã§ã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ã§ã¯ãªãã€ãƒ›ã‚¹ãƒˆã¨èªè¨¼æƒ…報を 1 回ã ã‘定義ã§ãã¾ã™ã€‚ã¾ãŸã€é€šä¿¡ã™ã‚‹ç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム㮠``network_os`` 変数も設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã•ã¾ã–ã¾ãªãƒ—ラットフォームã§ã®å„接続タイプã®ä½¿ç”¨ã®è©³ç´°ã¯ã€ã€Œ:ref:`platform-specific `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:38 msgid "Collections organized by network platform" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ åˆ¥ã«æ•´ç†ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/network/getting_started/network_differences.rst:40 msgid "A network platform is a set of network devices with a common operating system that can be managed by an Ansible collection, for example:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã¯ã€Ansible コレクションã§ç®¡ç†ã§ãる共通ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’å‚™ãˆãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚»ãƒƒãƒˆã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_differences.rst:42 msgid "Arista: `arista.eos `_" msgstr "Arista: `arista.eos `_" #: ../../rst/network/getting_started/network_differences.rst:43 msgid "Cisco: `cisco.ios `_, `cisco.iosxr `_, `cisco.nxos `_" msgstr "Cisco: `cisco.ios `_ã€`cisco.iosxr `_ã€`cisco.nxos `_" #: ../../rst/network/getting_started/network_differences.rst:44 msgid "Juniper: `junipernetworks.junos `_" msgstr "Juniper: `junipernetworks.junos `_" #: ../../rst/network/getting_started/network_differences.rst:45 msgid "VyOS `vyos.vyos `_" msgstr "VyOS `vyos.vyos `_" #: ../../rst/network/getting_started/network_differences.rst:47 msgid "All modules within a network platform share certain requirements. Some network platforms have specific differences - see the :ref:`platform-specific ` documentation for details." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム内ã®ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ç‰¹å®šã®è¦ä»¶ã‚’共有ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã«ã‚ˆã£ã¦ã¯ã€ç‰¹å®šã®ç›¸é•点ãŒã‚りã¾ã™ã€‚詳細ã¯ã€:ref:`platform-specific ` ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:52 msgid "Privilege Escalation: ``enable`` mode, ``become``, and ``authorize``" msgstr "特権エスカレーション: ``enable`` モードã€``become``ã€ãŠã‚ˆã³ ``authorize``" #: ../../rst/network/getting_started/network_differences.rst:54 msgid "Several network platforms support privilege escalation, where certain tasks must be done by a privileged user. On network devices this is called the ``enable`` mode (the equivalent of ``sudo`` in \\*nix administration). Ansible network modules offer privilege escalation for those network devices that support it. For details of which platforms support ``enable`` mode, with examples of how to use it, see the :ref:`platform-specific ` documentation." msgstr "一部ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã§ã¯ç‰¹æ¨©ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ãŠã‚Šã€ç‰¹æ¨©ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã¯ã€ã“れを ``enable`` モードã¨å‘¼ã³ã¾ã™ (\\*nix 管ç†ã«ãŠã‘ã‚‹ ``sudo`` ã¨åŒç­‰)。Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãれをサãƒãƒ¼ãƒˆã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«ç‰¹æ¨©ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æä¾›ã—ã¾ã™ã€‚``enable`` モードをサãƒãƒ¼ãƒˆãƒ—ラットフォームã¨ãã®ä½¿ç”¨ä¾‹ã«ã¤ã„ã¦ã¯ã€:ref:`platform-specific ` ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_differences.rst:57 msgid "Using ``become`` for privilege escalation" msgstr "æ¨©é™æ˜‡æ ¼ã« ``become`` を使用" #: ../../rst/network/getting_started/network_differences.rst:59 msgid "Use the top-level Ansible parameter ``become: yes`` with ``become_method: enable`` to run a task, play, or playbook with escalated privileges on any network platform that supports privilege escalation. You must use either ``connection: network_cli`` or ``connection: httpapi`` with ``become: yes`` with ``become_method: enable``. If you are using ``network_cli`` to connect Ansible to your network devices, a ``group_vars`` file would look like:" msgstr "特権昇格をサãƒãƒ¼ãƒˆã™ã‚‹ä»»æ„ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã§ã€æ˜‡æ ¼ã•れãŸç‰¹æ¨©ã‚’使用ã—ã¦ã‚¿ã‚¹ã‚¯ã€ãƒ—レイã€ã¾ãŸã¯ Playbook を実行ã™ã‚‹ã«ã¯ã€``become_method: enable`` ã® Ansible 最上ä½ãƒ‘ラメーター ``become: yes`` を使用ã—ã¾ã™ã€‚``connection: network_cli`` ã¾ãŸã¯ ``connection: httpapi`` ã‚’ã€``become: yes`` 㨠``become_method: enable`` ã¨ã¨ã‚‚ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``network_cli`` を使用ã—㦠Ansible ã‚’ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã¦ã„ã‚‹å ´åˆã€``group_vars`` ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_differences.rst:68 msgid "For more information, see :ref:`Become and Networks`" msgstr "詳細情報ã¯ã€ã€Œ:ref:`Become ãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_resources.rst:6 msgid "Resources and next steps" msgstr "ãƒªã‚½ãƒ¼ã‚¹ã¨æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—" #: ../../rst/network/getting_started/network_resources.rst:12 msgid "Documents" msgstr "ドキュメント" #: ../../rst/network/getting_started/network_resources.rst:14 msgid "Read more about Ansible for Network Automation:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã§ã® Ansible ã®è©³ç´°ã¯ã€æ¬¡ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_resources.rst:16 msgid "Network Automation on the `Ansible website `_" msgstr "`Ansible Web サイト `_ 上ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化" #: ../../rst/network/getting_started/network_resources.rst:17 msgid "Ansible Network `Blog posts `_" msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® `ブログ投稿 `_" #: ../../rst/network/getting_started/network_resources.rst:20 msgid "Events (on video and in person)" msgstr "イベント (ビデオãŠã‚ˆã³å€‹äºº)" #: ../../rst/network/getting_started/network_resources.rst:22 msgid "All sessions at Ansible events are recorded and include many Network-related topics (use Filter by Category to view only Network topics). You can also join us for future events in your area. See:" msgstr "Ansible イベントã«ãŠã‘るセッションã¯ã™ã¹ã¦éŒ²ç”»ã•れã¦ãŠã‚Šã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®ãƒˆãƒ”ックãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ (「Filter by Categoryã€ã‚’使用ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒ”ックã®ã¿ã‚’表示ã—ã¾ã™)。ã¾ãŸã€ãŠä½ã¾ã„ã®åœ°åŸŸã§ä»Šå¾Œé–‹å‚¬ã•れるイベントã«ã‚‚ã”å‚加ã„ãŸã ã‘ã¾ã™ã€‚以下をå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_resources.rst:24 msgid "`Recorded AnsibleFests `_" msgstr "`AnsibleFests (録画) `_" #: ../../rst/network/getting_started/network_resources.rst:25 msgid "`Recorded AnsibleAutomates `_" msgstr "`AnsibleAutomates (録画) `_" #: ../../rst/network/getting_started/network_resources.rst:26 msgid "`Upcoming Ansible Events `_ page." msgstr "`今後㮠Ansible イベント `_ ページ。" #: ../../rst/network/getting_started/network_resources.rst:29 msgid "GitHub repos" msgstr "GitHub リãƒã‚¸ãƒˆãƒªãƒ¼" #: ../../rst/network/getting_started/network_resources.rst:31 msgid "Ansible hosts module code, examples, demonstrations, and other content on GitHub. Anyone with a GitHub account is able to create Pull Requests (PRs) or issues on these repos:" msgstr "Ansible ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚³ãƒ¼ãƒ‰ã€ã‚µãƒ³ãƒ—ルã€ãƒ‡ãƒ¢ãƒ³ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã€ãã®ä»–ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ GitHub ã§å…¬é–‹ã—ã¦ã„ã¾ã™ã€‚GitHub ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’ãŠæŒã¡ã®æ–¹ã¯ã€ã“れらã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ãƒ—ãƒ«è¦æ±‚ (PR) ã‚„å•題を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/network_resources.rst:33 msgid "`Network-Automation `_ is an open community for all things network automation. Have an idea, some playbooks, or roles to share? Email ansible-network@redhat.com and we will add you as a contributor to the repository." msgstr "`Network-Automation `_ ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã«é–¢ã™ã‚‹ã‚らゆるã“ã¨ã‚’扱ã†ã‚ªãƒ¼ãƒ—ンコミュニティーã§ã™ã€‚アイディアã€Playbookã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’共有ã—ã¾ã›ã‚“ã‹ã€‚ansible-network@redhat.com ã«ãƒ¡ãƒ¼ãƒ«ã§ãŠå•ã„åˆã‚ã›ã„ãŸã ã‘れã°ã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«è²¢çŒ®è€…ã¨ã—ã¦è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/network_resources.rst:35 msgid "`Ansible collections `_ is the main repository for Ansible-maintained and community collections, including collections for network devices." msgstr "`Ansible コレクション `_ ã¯ã€Ansible ãŒç®¡ç†ã—ã¦ã„るコレクションãŠã‚ˆã³ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸»ãªãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ã™ã€‚ã“れã«ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/getting_started/network_resources.rst:40 msgid "Chat channels" msgstr "ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒãƒ«" #: ../../rst/network/getting_started/network_resources.rst:42 msgid "Got questions? Chat with us on:" msgstr "質å•ãŒã‚りã¾ã™ã‹ï¼Ÿä»¥ä¸‹ã‹ã‚‰ãƒãƒ£ãƒƒãƒˆã‚’ã”利用ãã ã•ã„:" #: ../../rst/network/getting_started/network_resources.rst:44 msgid "the ``#ansible-network`` channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)" msgstr "``#ansible-network`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ï¼ˆansible.im ã®è¡¨ã‚’使用ã™ã‚‹ã‹ã€`irc.libera.chat `_ ã§ IRC を使用)" #: ../../rst/network/getting_started/network_resources.rst:46 msgid "`Ansible Network Slack `_ - Network & Security Automation Slack community. Check out the #devel channel for discussions on module and plugin development." msgstr "`Ansible Network Slack `_ - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼è‡ªå‹•化㮠Slack コミュニティー。モジュールãŠã‚ˆã³ãƒ—ラグインã®é–‹ç™ºã«é–¢ã™ã‚‹å†…容ã¯ã€#devel ãƒãƒ£ãƒ³ãƒãƒ«ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_roles.rst:6 msgid "Use Ansible network roles" msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ­ãƒ¼ãƒ«ã®ä½¿ç”¨" #: ../../rst/network/getting_started/network_roles.rst:8 msgid "Roles are sets of Ansible defaults, files, tasks, templates, variables, and other Ansible components that work together. As you saw on :ref:`first_network_playbook`, moving from a command to a playbook makes it easy to run multiple tasks and repeat the same tasks in the same order. Moving from a playbook to a role makes it even easier to reuse and share your ordered tasks. You can look at :ref:`Ansible Galaxy `, which lets you share your roles and use others' roles, either directly or as inspiration." msgstr "ロールã¯ã€Ansible ã®ãƒ‡ãƒ•ォルトã€ãƒ•ァイルã€ã‚¿ã‚¹ã‚¯ã€ãƒ†ãƒ³ãƒ—レートã€å¤‰æ•°ã€ãŠã‚ˆã³ãã®ä»–ã® Ansible コンãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚»ãƒƒãƒˆã§ã€é€£æºã—ã¦å‹•作ã—ã¾ã™ã€‚:ref:`first_network_playbook` ã§ã“れã¾ã§è¦‹ã¦ããŸã‚ˆã†ã«ã€ã‚³ãƒžãƒ³ãƒ‰ã‹ã‚‰ Playbook ã«ç§»å‹•ã™ã‚‹ã¨ã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’ç°¡å˜ã«å®Ÿè¡Œã—ã€åŒã˜ã‚¿ã‚¹ã‚¯ã‚’åŒã˜é †åºã§ç¹°ã‚Šè¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã«ç§»å‹•ã™ã‚‹ã¨ã€æ³¨æ–‡ã—ãŸã‚¿ã‚¹ã‚¯ã®å†åˆ©ç”¨ã¨å…±æœ‰ãŒã•らã«ç°¡å˜ã«ãªã‚Šã¾ã™ã€‚:ref:`Ansible Galaxy ` ã§ã¯ã€è‡ªåˆ†ã®ãƒ­ãƒ¼ãƒ«ã‚’共有ã—ãŸã‚Šã€ä»–ã®äººã®ãƒ­ãƒ¼ãƒ«ã‚’直接ã¾ãŸã¯ã‚¤ãƒ³ã‚¹ãƒ”レーションã¨ã—ã¦ä½¿ç”¨ã—ãŸã‚Šã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:14 msgid "Understanding roles" msgstr "ロールã«ã¤ã„ã¦" #: ../../rst/network/getting_started/network_roles.rst:16 msgid "So what exactly is a role, and why should you care? Ansible roles are basically playbooks broken up into a known file structure. Moving to roles from a playbook makes sharing, reading, and updating your Ansible workflow easier. Users can write their own roles. So for example, you don't have to write your own DNS playbook. Instead, you specify a DNS server and a role to configure it for you." msgstr "ã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã¨ã¯æ­£ç¢ºã«ã¯ä½•ãªã®ã‹ã€ãã—ã¦ãªãœãれãŒå¿…è¦ãªã®ã§ã—ょã†ã‹ã€‚Ansible ロールã¯åŸºæœ¬çš„ã«ã€æ—¢çŸ¥ã®ãƒ•ァイル構造ã«åˆ†å‰²ã•れ㟠Playbook ã§ã™ã€‚Playbook ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã«ç§»å‹•ã™ã‚‹ã“ã¨ã§ã€Ansible ワークフローã®å…±æœ‰ã€èª­ã¿å–りã€ãŠã‚ˆã³æ›´æ–°ãŒç°¡å˜ã«ãªã‚Šã¾ã™ã€‚ユーザーã¯ç‹¬è‡ªã®ãƒ­ãƒ¼ãƒ«ã‚’作æˆã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ç‹¬è‡ªã® DNS Playbook を作æˆã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。代ã‚りã«ã€DNS サーãƒãƒ¼ã¨ã€DNS サーãƒãƒ¼ã‚’æ§‹æˆã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:18 msgid "To simplify your workflow even further, the Ansible Network team has written a series of roles for common network use cases. Using these roles means you don't have to reinvent the wheel. Instead of writing and maintaining your own ``create_vlan`` playbooks or roles, you can concentrate on designing, codifying and maintaining the parser templates that describe your network topologies and inventory, and let Ansible's network roles do the work. See the `network-related roles `_ on Ansible Galaxy." msgstr "ワークフローをã•らã«å˜ç´”化ã™ã‚‹ãŸã‚ã«ã€Ansible Network ãƒãƒ¼ãƒ ã¯ä¸€èˆ¬çš„ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã®ãŸã‚ã®ä¸€é€£ã®ãƒ­ãƒ¼ãƒ«ã‚’作æˆã—ã¾ã—ãŸã€‚ã“れらã®ãƒ­ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨ã€è»Šè¼ªã‚’å†ç™ºæ˜Žã™ã‚‹å¿…è¦ãŒãªããªã‚Šã¾ã™ã€‚独自㮠``create_vlan`` Playbook やロールを作æˆã—ã¦ç®¡ç†ã™ã‚‹ä»£ã‚りã«ã€Ansible ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ­ãƒ¼ãƒ«ã«ãã®ä½œæ¥­ã‚’ä»»ã›ã‚‹ã“ã¨ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒãƒ­ã‚¸ãƒ¼ã‚„インベントリーを記述ã™ã‚‹ãƒ‘ーサーテンプレートã®è¨­è¨ˆã€ã‚³ãƒ¼ãƒ‰åŒ–ã€ãŠã‚ˆã³ç®¡ç†ã«é›†ä¸­ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible Galaxyã®ã€Œ`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®ãƒ­ãƒ¼ãƒ« `_ã€ã‚’見ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_roles.rst:21 msgid "A sample DNS playbook" msgstr "DNS Playbook ã®ã‚µãƒ³ãƒ—ル" #: ../../rst/network/getting_started/network_roles.rst:23 msgid "To demonstrate the concept of what a role is, the example ``playbook.yml`` below is a single YAML file containing a two-task playbook. This Ansible Playbook configures the hostname on a Cisco IOS XE device, then it configures the DNS (domain name system) servers." msgstr "ãƒ­ãƒ¼ãƒ«ã®æ¦‚念を説明ã™ã‚‹ãŸã‚ã«ã€ä¸‹è¨˜ã®ä¾‹ ``playbook.yml`` 㯠2 ã¤ã®ã‚¿ã‚¹ã‚¯ã® Playbook ã‚’å«ã‚€ 1 ã¤ã® YAML ファイルã§ã™ã€‚ã“ã® Ansible Playbook ã¯ã€Cisco IOS XE デãƒã‚¤ã‚¹ã§ãƒ›ã‚¹ãƒˆåを設定ã—ã¦ã‹ã‚‰ã€DNS (ドメインãƒãƒ¼ãƒ ã‚·ã‚¹ãƒ†ãƒ ) サーãƒãƒ¼ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:44 msgid "If you run this playbook using the ``ansible-playbook`` command, you'll see the output below. This example used ``-l`` option to limit the playbook to only executing on the **rtr1** node." msgstr "``ansible-playbook`` コマンドを使用ã—ã¦ã“ã® Playbook を実行ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``-l`` オプションを使用ã—㦠Playbook ã‚’ **rtr1** ノード上ã§ã®ã¿å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«åˆ¶é™ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:62 msgid "This playbook configured the hostname and DNS servers. You can verify that configuration on the Cisco IOS XE **rtr1** router:" msgstr "ã“ã® Playbook ã¯ãƒ›ã‚¹ãƒˆåãŠã‚ˆã³ DNS サーãƒãƒ¼ã‚’設定ã—ã€Cisco IOS XE **rtr1** ルーターã®è¨­å®šã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:71 msgid "Convert the playbook into a role" msgstr "Playbook ã®ãƒ­ãƒ¼ãƒ«ã¸ã®å¤‰æ›" #: ../../rst/network/getting_started/network_roles.rst:73 msgid "The next step is to convert this playbook into a reusable role. You can create the directory structure manually, or you can use ``ansible-galaxy init`` to create the standard framework for a role." msgstr "æ¬¡ã®æ‰‹é †ã§ã¯ã€ã“ã® Playbook ã‚’å†åˆ©ç”¨å¯èƒ½ãªãƒ­ãƒ¼ãƒ«ã«å¤‰æ›ã—ã¾ã™ã€‚ディレクトリー構造を手動ã§ä½œæˆã™ã‚‹ã‹ã€``ansible-galaxy init`` を使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã®æ¨™æº–フレームワークを作æˆã§ãã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:98 msgid "This first demonstration uses only the **tasks** and **vars** directories. The directory structure would look as follows:" msgstr "ã“ã®æœ€åˆã®ãƒ‡ãƒ¢ãƒ³ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã¯ **tasks** ディレクトリーãŠã‚ˆã³ **vars** ディレクトリーã®ã¿ã‚’使用ã—ã¾ã™ã€‚ディレクトリー構造ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:109 msgid "Next, move the content of the ``vars`` and ``tasks`` sections from the original Ansible Playbook into the role. First, move the two tasks into the ``tasks/main.yml`` file:" msgstr "次ã«ã€å…ƒã® Ansible Playbook ã‹ã‚‰ ``vars`` セクションãŠã‚ˆã³ ``tasks`` セクションã®å†…容をロールã«ç§»å‹•ã—ã¾ã™ã€‚ã¾ãšã€2 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’ ``tasks/main.yml`` ファイルã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:123 msgid "Next, move the variables into the ``vars/main.yml`` file:" msgstr "次ã«ã€å¤‰æ•°ã‚’ ``vars/main.yml`` ファイルã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:131 msgid "Finally, modify the original Ansible Playbook to remove the ``tasks`` and ``vars`` sections and add the keyword ``roles`` with the name of the role, in this case ``system-demo``. You'll have this playbook:" msgstr "最後ã«ã€å…ƒã® Ansible Playbook を変更ã—㦠``tasks`` セクションãŠã‚ˆã³ ``vars`` セクションを削除ã—ã€ãƒ­ãƒ¼ãƒ«ã®åå‰ (ã“ã“ã§ã¯ ``system-demo``) ã§ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ ``roles`` を追加ã—ã¾ã™ã€‚ã“れã§ã€Playbook ãŒå®Œæˆã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:144 msgid "To summarize, this demonstration now has a total of three directories and three YAML files. There is the ``system-demo`` folder, which represents the role. This ``system-demo`` contains two folders, ``tasks`` and ``vars``. There is a ``main.yml`` is each respective folder. The ``vars/main.yml`` contains the variables from ``playbook.yml``. The ``tasks/main.yml`` contains the tasks from ``playbook.yml``. The ``playbook.yml`` file has been modified to call the role rather than specifying vars and tasks directly. Here is a tree of the current working directory:" msgstr "è¦ç´„ã™ã‚‹ã¨ã€ã“ã®ãƒ‡ãƒ¢ã«ã¯åˆè¨ˆ 3 ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¨ 3 ã¤ã® YAML ファイルãŒã‚りã¾ã™ã€‚ロールを表㙠``system-demo`` ディレクトリーãŒã‚りã¾ã™ã€‚ã“ã® ``system-demo`` ã«ã¯ã€``tasks`` ãŠã‚ˆã³ ``vars`` ã® 2 ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚å„ディレクトリー㫠``main.yml`` ãŒã‚りã¾ã™ã€‚``vars/main.yml`` ã«ã¯ã€``playbook.yml`` ã®å¤‰æ•°ãŒå«ã¾ã‚Œã¾ã™ã€‚``tasks/main.yml`` ã«ã¯ã€``playbook.yml`` ã®ã‚¿ã‚¹ã‚¯ãŒå«ã¾ã‚Œã¾ã™ã€‚``playbook.yml`` ファイルã¯ã€å¤‰æ•°ã¨ã‚¿ã‚¹ã‚¯ã‚’直接指定ã™ã‚‹ã®ã§ã¯ãªãã€ãƒ­ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ã‚ˆã†ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ„リーを次ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:157 msgid "Running the playbook results in identical behavior with slightly different output:" msgstr "Playbook を実行ã™ã‚‹ã¨ã€åŒã˜å‹•作ã§ã€å‡ºåŠ›ãŒè‹¥å¹²ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:174 msgid "As seen above each task is now prepended with the role name, in this case ``system-demo``. When running a playbook that contains several roles, this will help pinpoint where a task is being called from. This playbook returned ``ok`` instead of ``changed`` because it has identical behavior for the single file playbook we started from." msgstr "上記ã®ã‚ˆã†ã«ã€å„タスクã®å…ˆé ­ã«ãƒ­ãƒ¼ãƒ«åãŒä»˜åŠ ã•れã¾ã™ (``system-demo`` ã®å ´åˆ)。複数ã®ãƒ­ãƒ¼ãƒ«ã‚’å«ã‚€ Playbook を実行ã™ã‚‹å ´åˆã€ã‚¿ã‚¹ã‚¯ã®å‘¼ã³å‡ºã—元を特定ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã“ã®Playbook ã¯ã€``changed`` ã§ã¯ãªã ``ok`` ã‚’è¿”ã—ã¾ã™ãŒã€ã“れã¯ã€é–‹å§‹ã—ãŸå˜ä¸€ãƒ•ァイル㮠Playbook ã¨åŒã˜å‹•作をã™ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:176 msgid "As before, the playbook will generate the following configuration on a Cisco IOS-XE router:" msgstr "å‰è¿°ã®ã‚ˆã†ã«ã€Playbook 㯠Cisco IOS-XE ルーターã§ä»¥ä¸‹ã®è¨­å®šã‚’生æˆã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:185 msgid "This is why Ansible roles can be simply thought of as deconstructed playbooks. They are simple, effective and reusable. Now another user can simply include the ``system-demo`` role instead of having to create a custom \"hard coded\" playbook." msgstr "ã“ã®ãŸã‚ã€Ansible ロールã¯ã€ç°¡å˜ã«è¨€ãˆã°ã€åˆ†è§£ã•れ㟠Playbook ã¨è€ƒãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ロールã¯ã€ã‚·ãƒ³ãƒ—ルã§ã€åŠ¹æžœçš„ã§ã€å†åˆ©ç”¨å¯èƒ½ã§ã™ã€‚ã“れã§ã€åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚«ã‚¹ã‚¿ãƒ ã®ã€Œãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã•れãŸã€Playbook を作æˆã™ã‚‹ä»£ã‚りã«ã€``system-demo`` ロールをå«ã‚ã‚‹ã ã‘ã§å分ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:188 msgid "Variable precedence" msgstr "変数ã®å„ªå…ˆé †ä½" #: ../../rst/network/getting_started/network_roles.rst:190 msgid "What if you want to change the DNS servers? You aren't expected to change the ``vars/main.yml`` within the role structure. Ansible has many places where you can specify variables for a given play. See :ref:`playbooks_variables` for details on variables and precedence. There are actually 21 places to put variables. While this list can seem overwhelming at first glance, the vast majority of use cases only involve knowing the spot for variables of least precedence and how to pass variables with most precedence. See :ref:`ansible_variable_precedence` for more guidance on where you should put variables." msgstr "DNS サーãƒãƒ¼ã‚’変更ã™ã‚‹å ´åˆã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ã€‚ロール構造内㮠``vars/main.yml`` を変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ansible ã«ã¯ã€ç‰¹å®šã®ãƒ—レイã®å¤‰æ•°ã‚’指定ã§ãる場所ãŒå¤šæ•°ã‚りã¾ã™ã€‚変数ã¨å„ªå…ˆé †ä½ã®è©³ç´°ã¯ã€ã€Œ:ref:`playbooks_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。変数を置ã場所ã¯å®Ÿéš›ã«ã¯ 21 箇所ã‚りã¾ã™ã€‚ã“れã¯ä¸€è¦‹åœ§å€’ã•れるよã†ãªæ•°ã§ã™ãŒã€å¤§åŠã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ã€å„ªå…ˆé †ä½ãŒæœ€ã‚‚低ã„変数ã®å ´æ‰€ã¨ã€æœ€ã‚‚優先順ä½ã®é«˜ã„å¤‰æ•°ã‚’æ¸¡ã™æ–¹æ³•を知るã ã‘ã§ã™ã¿ã¾ã™ã€‚変数をã©ã“ã«ç½®ãã¹ãã‹ã¯ã€ã€Œ:ref:`ansible_variable_precedence`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_roles.rst:193 msgid "Lowest precedence" msgstr "最も低ã„優先順ä½" #: ../../rst/network/getting_started/network_roles.rst:195 msgid "The lowest precedence is the ``defaults`` directory within a role. This means all the other 20 locations you could potentially specify the variable will all take higher precedence than ``defaults``, no matter what. To immediately give the vars from the ``system-demo`` role the least precedence, rename the ``vars`` directory to ``defaults``." msgstr "最も低ã„優先順ä½ã¯ã€ãƒ­ãƒ¼ãƒ«å†…ã® ``defaults`` ディレクトリーã§ã™ã€‚ã¤ã¾ã‚Šã€å¤‰æ•°ã‚’指定ã§ãã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ä»–ã® 20 箇所ã¯ã™ã¹ã¦ã€``defaults`` より優先ã•れã¾ã™ã€‚``system-demo`` ロールã®å¤‰æ•°ã®å„ªå…ˆé †ä½ã‚’ç›´ã¡ã«æœ€ã‚‚低ãã™ã‚‹ã«ã¯ã€``vars`` ディレクトリーã®åå‰ã‚’ ``defaults`` ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:207 msgid "Add a new ``vars`` section to the playbook to override the default behavior (where the variable ``dns`` is set to 8.8.8.8 and 8.8.4.4). For this demonstration, set ``dns`` to 1.1.1.1, so ``playbook.yml`` becomes:" msgstr "デフォルトã®å‹•作を上書ãã™ã‚‹ãŸã‚ã«ã€Playbook ã«æ–°ã—ã„ ``vars`` セクションを追加ã—ã¾ã™ (ã“ã“ã§ã¯ã€``dns`` 変数㌠8.8.8.8 ãŠã‚ˆã³ 8.8.4.4 ã«è¨­å®šã•れã¦ã„ã¾ã™)。ã“ã®ãƒ‡ãƒ¢ã§ã¯ã€``dns`` ã‚’ 1.1.1.1 ã«è¨­å®šã™ã‚‹ãŸã‚ã€``playbook.yml`` ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:221 msgid "Run this updated playbook on **rtr2**:" msgstr "æ›´æ–°ã—㟠Playbook ã‚’ **rtr2** ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:227 msgid "The configuration on the **rtr2** Cisco router will look as follows:" msgstr "**rtr2** Cisco ルーターã®è¨­å®šã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:234 msgid "The variable configured in the playbook now has precedence over the ``defaults`` directory. In fact, any other spot you configure variables would win over the values in the ``defaults`` directory." msgstr "Playbook ã«è¨­å®šã—ãŸå¤‰æ•°ã¯ã€``defaults`` ディレクトリーよりも優先ã•れã¾ã™ã€‚実際ã«ã¯ã€å¤‰æ•°ã«è¨­å®šã—ãŸãã®ä»–ã®ã‚¹ãƒãƒƒãƒˆã¯ã€``defaults`` ディレクトリーã®å€¤ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:237 msgid "Highest precedence" msgstr "最も高ã„優先順ä½" #: ../../rst/network/getting_started/network_roles.rst:239 msgid "Specifying variables in the ``defaults`` directory within a role will always take the lowest precedence, while specifying ``vars`` as extra vars with the ``-e`` or ``--extra-vars=`` will always take the highest precedence, no matter what. Re-running the playbook with the ``-e`` option overrides both the ``defaults`` directory (8.8.4.4 and 8.8.8.8) as well as the newly created ``vars`` within the playbook that contains the 1.1.1.1 dns server." msgstr "ロール内㮠``defaults`` ディレクトリーã«å¤‰æ•°ã‚’指定ã™ã‚‹ã¨ã€å¸¸ã«å„ªå…ˆé †ä½ãŒæœ€ã‚‚低ããªã‚Šã¾ã™ãŒã€``-e`` ã¾ãŸã¯ ``--extra-vars=`` を使用ã—ã¦è¿½åŠ å¤‰æ•°ã¨ã—㦠``vars`` を指定ã™ã‚‹ã¨ã€å„ªå…ˆé †ä½ãŒæœ€ã‚‚高ããªã‚Šã¾ã™ã€‚``-e`` オプションを指定ã—㦠Playbook ã‚’å†å®Ÿè¡Œã™ã‚‹ã¨ã€``defaults`` ディレクトリー (8.8.4.4 ãŠã‚ˆã³ 8.8.8.8) ã ã‘ã§ãªãã€1.1.1.1 dns サーãƒãƒ¼ã‚’å«ã‚€ Playbook å†…ã«æ–°ã—ã作æˆã•れ㟠``vars`` も上書ãã•れã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:245 msgid "The result on the Cisco IOS XE router will only contain the highest precedence setting of 192.168.1.1:" msgstr "Cisco IOS XE ルーターã®çµæžœã«ã¯ã€å„ªå…ˆé †ä½ã®æœ€ã‚‚高ㄠ192.168.1.1 設定ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:252 msgid "How is this useful? Why should you care? Extra vars are commonly used by network operators to override defaults. A powerful example of this is with the Job Template Survey feature on AWX or the :ref:`ansible_platform`. It is possible through the web UI to prompt a network operator to fill out parameters with a Web form. This can be really simple for non-technical playbook writers to execute a playbook using their Web browser." msgstr "ã“れã¯ã©ã®ã‚ˆã†ã«å½¹ç«‹ã¤ã®ã§ã—ょã†ã‹ã€‚ãªãœæ°—ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã®ã§ã—ょã†ã‹ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã¯é€šå¸¸ã€è¿½åŠ ã®å¤‰æ•°ã‚’使用ã—ã¦ãƒ‡ãƒ•ォルトを上書ãã—ã¾ã™ã€‚ã“れã«é–¢ã™ã‚‹é©åˆ‡ãªä¾‹ã¯ã€AWX ã® Job Template Suvey 機能ã¾ãŸã¯ :ref:`ansible_platform` ã§ã™ã€‚Web UI を使用ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã« Web フォームã§ãƒ‘ラメーターã®å…¥åŠ›ã‚’æ±‚ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€æŠ€è¡“ã«è©³ã—ããªã„ Playbook 作æˆè€…㌠Web ブラウザーを使用ã—㦠Playbook を実行ã™ã‚‹å ´åˆã«éžå¸¸ã«ç°¡å˜ã§ã™ã€‚" #: ../../rst/network/getting_started/network_roles.rst:256 msgid "Update an installed role" msgstr "インストールã•れãŸãƒ­ãƒ¼ãƒ«ã®æ›´æ–°" #: ../../rst/network/getting_started/network_roles.rst:258 msgid "The Ansible Galaxy page for a role lists all available versions. To update a locally installed role to a new or different version, use the ``ansible-galaxy install`` command with the version and ``--force`` option. You may also need to manually update any dependent roles to support this version. See the role **Read Me** tab in Galaxy for dependent role minimum version requirements." msgstr "ロール㮠Ansible Galaxy ページã«ã¯ã€ä½¿ç”¨å¯èƒ½ãªã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¸€è¦§è¡¨ç¤ºã•れã¾ã™ã€‚ローカルã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸãƒ­ãƒ¼ãƒ«ã‚’æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¾ãŸã¯åˆ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã™ã‚‹ã«ã¯ã€``ansible-galaxy install`` コマンドã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŠã‚ˆã³ ``--force`` オプションを指定ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ã¾ãŸã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€ä¾å­˜ãƒ­ãƒ¼ãƒ«ã‚’æ‰‹å‹•ã§æ›´æ–°ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ä¾å­˜ãƒ­ãƒ¼ãƒ«ã®æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶ã«ã¤ã„ã¦ã¯ã€Galaxy ã®ãƒ­ãƒ¼ãƒ«ã®ã€ŒRead Meã€ã‚¿ãƒ–ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/getting_started/network_roles.rst:266 msgid "`Ansible Galaxy documentation `_" msgstr "`Ansible Galaxy ドキュメント `_" #: ../../rst/network/getting_started/network_roles.rst:267 msgid "Ansible Galaxy user guide" msgstr "Ansible Galaxy ユーザーガイド" #: ../../rst/network/index.rst:7 msgid "Ansible for Network Automation" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è‡ªå‹•化ã«ãŠã‘ã‚‹ Ansible" #: ../../rst/network/index.rst:9 msgid "Ansible Network modules extend the benefits of simple, powerful, agentless automation to network administrators and teams. Ansible Network modules can configure your network stack, test and validate existing network state, and discover and correct network configuration drift." msgstr "Ansible Network モジュールã¯ã€ã‚·ãƒ³ãƒ—ルã§å¼·åŠ›ãªã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆãƒ¬ã‚¹è‡ªå‹•化ã®åˆ©ç‚¹ã‚’ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç®¡ç†è€…ã¨ãƒãƒ¼ãƒ ã«æ‹¡å¼µã—ã¾ã™ã€‚Ansible Network モジュールã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã‚’æ§‹æˆã—ã€æ—¢å­˜ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çŠ¶æ…‹ã‚’ãƒ†ã‚¹ãƒˆãŠã‚ˆã³æ¤œè¨¼ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ§‹æˆã®ãƒ‰ãƒªãƒ•トを検出ã—ã¦ä¿®æ­£ã§ãã¾ã™ã€‚" #: ../../rst/network/index.rst:11 msgid "If you're new to Ansible, or new to using Ansible for network management, start with :ref:`network_getting_started`. If you are already familiar with network automation with Ansible, see :ref:`network_advanced`." msgstr "Ansible ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã‚„ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç®¡ç†ã« Ansible ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€:ref:`network_getting_started` ã‹ã‚‰é–‹å§‹ã—ã¾ã™ã€‚Ansible ã¨ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã«ç²¾é€šã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ:ref:`network_advanced`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/index.rst:13 msgid "For documentation on using a particular network module, consult the :ref:`list of all network modules`. Network modules for various hardware are supported by different teams including the hardware vendors themselves, volunteers from the Ansible community, and the Ansible Network Team." msgstr "特定ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½¿ç”¨ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸€è¦§`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã•ã¾ã–ã¾ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ™ãƒ³ãƒ€ãƒ¼è‡ªä½“ã€Ansible コミュニティーã®ãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã€Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒ ãªã©ã€ã•ã¾ã–ã¾ãªãƒãƒ¼ãƒ ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:5 msgid "Parsing semi-structured text with Ansible" msgstr "Ansible を使用ã—ãŸåŠæ§‹é€ åŒ–テキストã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:7 msgid "The :ref:`cli_parse ` module parses semi-structured data such as network configurations into structured data to allow programmatic use of the data from that device. You can pull information from a network device and update a CMDB in one playbook. Use cases include automated troubleshooting, creating dynamic documentation, updating IPAM (IP address management) tools and so on." msgstr ":ref:`cli_parse ` モジュールã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ§‹æˆãªã©ã®åŠæ§‹é€ åŒ–データを構造化データã«è§£æžã—ã¦ã€ãã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ã‚’プログラムã§ä½¿ç”¨ã§ãるよã†ã«ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰æƒ…報をå–å¾—ã—ã€1 ã¤ã® Playbook ã§ CMDB ã‚’æ›´æ–°ã§ãã¾ã™ã€‚ユースケースã«ã¯ã€è‡ªå‹•トラブルシューティングã€å‹•的ドキュメントã®ä½œæˆã€IPAM (IPアドレス管ç†) ãƒ„ãƒ¼ãƒ«ã®æ›´æ–°ãªã©ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:15 msgid "Understanding the CLI parser" msgstr "CLI パーサーã«ã¤ã„ã¦" #: ../../rst/network/user_guide/cli_parsing.rst:17 msgid "The `ansible.utils `_ collection version 1.0.0 or later includes the :ref:`cli_parse ` module that can run CLI commands and parse the semi-structured text output. You can use the ``cli_parse`` module on a device, host, or platform that only supports a command-line interface and the commands issued return semi-structured text. The ``cli_parse`` module can either run a CLI command on a device and return a parsed result or can simply parse any text document. The ``cli_parse`` module includes cli_parser plugins to interface with a variety of parsing engines." msgstr "`ansible.utils `_ コレクションãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.0.0 以é™ã«ã¯ã€CLI コマンドを実行ã—ã€åŠæ§‹é€ åŒ–テキスト出力を解æžã§ãã‚‹ :ref:`cli_parse ` モジュールãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚コマンドラインインタフェースã®ã¿ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã€ãƒ›ã‚¹ãƒˆã€ã¾ãŸã¯ãƒ—ラットフォーム㧠``cli_parse`` モジュールを使用ã§ãã€å®Ÿè¡Œã—ãŸã‚³ãƒžãƒ³ãƒ‰ã¯åŠæ§‹é€ åŒ–テキストを返ã—ã¾ã™ã€‚``cli_parse`` モジュールã¯ã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§ CLI コマンドを実行ã—ã¦è§£æžçµæžœã‚’è¿”ã™ã“ã¨ã‚‚ã€å˜ç´”ã«ãƒ†ã‚­ã‚¹ãƒˆãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’è§£æžã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚``cli_parse`` モジュールã«ã¯ã€ã•ã¾ã–ã¾ãªè§£æžã‚¨ãƒ³ã‚¸ãƒ³ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ•ェースã¨ãªã‚‹ cli_parser プラグインãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:20 msgid "Why parse the text?" msgstr "テキストを解æžã™ã‚‹ç†ç”±" #: ../../rst/network/user_guide/cli_parsing.rst:22 msgid "Parsing semi-structured data such as network configurations into structured data allows programmatic use of the data from that device. Use cases include automated troubleshooting, creating dynamic documentation, updating IPAM (IP address management) tools and so on. You may prefer to do this with Ansible natively to take advantage of native Ansible constructs such as:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ§‹æˆãªã©ã®åŠæ§‹é€ åŒ–データを構造化データã«è§£æžã™ã‚‹ã¨ã€ãã®ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ‡ãƒ¼ã‚¿ã‚’プログラムã§ä½¿ç”¨ã§ãã¾ã™ã€‚ユースケースã«ã¯ã€è‡ªå‹•トラブルシューティングã€å‹•的ドキュメントã®ä½œæˆã€IPAM (IPアドレス管ç†) ãƒ„ãƒ¼ãƒ«ã®æ›´æ–°ãªã©ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªä½œæ¥­ã¯ã€Ansible ã§ãƒã‚¤ãƒ†ã‚£ãƒ–ã«è¡Œã†æ–¹ãŒã€ä»¥ä¸‹ã®ã‚ˆã†ãª Ansible ã®ãƒã‚¤ãƒ†ã‚£ãƒ–ãªæ§‹æˆã‚’活用ã§ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/network/user_guide/cli_parsing.rst:24 msgid "The ``when`` clause to conditionally run other tasks or roles" msgstr "ä»–ã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’æ¡ä»¶çš„ã«å®Ÿè¡Œã™ã‚‹ ``when`` å¥" #: ../../rst/network/user_guide/cli_parsing.rst:25 msgid "The ``assert`` module to check configuration and operational state compliance" msgstr "設定ã¨é‹ç”¨çŠ¶æ…‹ã‚³ãƒ³ãƒ—ãƒ©ã‚¤ã‚¢ãƒ³ã‚¹ã‚’ç¢ºèªã™ã‚‹ãŸã‚ã® ``assert`` モジュール" #: ../../rst/network/user_guide/cli_parsing.rst:26 msgid "The ``template`` module to generate reports about configuration and operational state information" msgstr "設定ãŠã‚ˆã³é‹ç”¨ã®çŠ¶æ…‹æƒ…å ±ã«é–¢ã™ã‚‹ãƒ¬ãƒãƒ¼ãƒˆã‚’生æˆã™ã‚‹ ``template`` モジュール" #: ../../rst/network/user_guide/cli_parsing.rst:27 msgid "Templates and ``command`` or ``config`` modules to generate host, device, or platform commands or configuration" msgstr "ホストã€ãƒ‡ãƒã‚¤ã‚¹ã€ã¾ãŸã¯ãƒ—ラットフォームコマンドã¾ãŸã¯è¨­å®šã‚’生æˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートãŠã‚ˆã³ ``command`` モジュールã¾ãŸã¯ ``config`` モジュール" #: ../../rst/network/user_guide/cli_parsing.rst:28 msgid "The current platform ``facts`` modules to supplement native facts information" msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–ファクト情報を補足ã™ã‚‹ç¾åœ¨ã®ãƒ—ラットフォーム㮠``facts`` モジュール" #: ../../rst/network/user_guide/cli_parsing.rst:30 msgid "By parsing semi-structured text into Ansible native data structures, you can take full advantage of Ansible's network modules and plugins." msgstr "åŠæ§‹é€ åŒ–テキストを Ansible ã®ãƒã‚¤ãƒ†ã‚£ãƒ–データ構造ã«è§£æžã™ã‚‹ã“ã¨ã§ã€Ansible ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’å®Œå…¨ã«æ´»ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:34 msgid "When not to parse the text" msgstr "テキストを解æžã—ãªã„å ´åˆ" #: ../../rst/network/user_guide/cli_parsing.rst:36 msgid "You should not parse semi-structured text when:" msgstr "以下ã®å ´åˆã¯ã€åŠæ§‹é€ åŒ–ã•れãŸãƒ†ã‚­ã‚¹ãƒˆã‚’è§£æžã—ãªã„ã§ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:38 msgid "The device, host, or platform has a RESTAPI and returns JSON." msgstr "デãƒã‚¤ã‚¹ã€ãƒ›ã‚¹ãƒˆã€ã¾ãŸã¯ãƒ—ラットフォームã«ã¯ RESTAPI ãŒã‚りã€JSON ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:39 msgid "Existing Ansible facts modules already return the desired data." msgstr "既存㮠Ansible ファクトモジュールã¯ã€ã™ã§ã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:40 msgid "Ansible network resource modules exist for configuration management of the device and resource." msgstr "デãƒã‚¤ã‚¹ãŠã‚ˆã³ãƒªã‚½ãƒ¼ã‚¹ã®è¨­å®šç®¡ç†ã«ã¯ã€Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:43 msgid "Parsing the CLI" msgstr "CLI ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:45 msgid "The ``cli_parse`` module includes the following cli_parsing plugins:" msgstr "``cli_parse`` モジュールã«ã¯ã€ä»¥ä¸‹ã® cli_parsing プラグインãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:47 msgid "``native``" msgstr "``native``" #: ../../rst/network/user_guide/cli_parsing.rst:48 msgid "The native parsing engine built into Ansible and requires no addition python libraries" msgstr "Ansible ã«çµ„ã¿è¾¼ã¾ã‚ŒãŸãƒã‚¤ãƒ†ã‚£ãƒ–ã®è§£æžã‚¨ãƒ³ã‚¸ãƒ³ã§ã€Python ライブラリーを追加ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/network/user_guide/cli_parsing.rst:49 msgid "``xml``" msgstr "``xml``" #: ../../rst/network/user_guide/cli_parsing.rst:50 msgid "Convert XML to an Ansible native data structure" msgstr "XML ã® Ansible ãƒã‚¤ãƒ†ã‚£ãƒ–データ構造ã¸ã®å¤‰æ›" #: ../../rst/network/user_guide/cli_parsing.rst:51 msgid "``textfsm``" msgstr "``textfsm``" #: ../../rst/network/user_guide/cli_parsing.rst:52 msgid "A python module which implements a template based state machine for parsing semi-formatted text" msgstr "åŠãƒ•ォーマット化テキストを解æžã™ã‚‹ãŸã‚ã«ãƒ†ãƒ³ãƒ—レートベースã®çŠ¶æ…‹ãƒžã‚·ãƒ³ã‚’å®Ÿè£…ã™ã‚‹ Python モジュール" #: ../../rst/network/user_guide/cli_parsing.rst:53 msgid "``ntc_templates``" msgstr "``ntc_templates``" #: ../../rst/network/user_guide/cli_parsing.rst:54 msgid "Predefined ``textfsm`` templates packages supporting a variety of platforms and commands" msgstr "ã•ã¾ã–ã¾ãªãƒ—ラットフォームãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ã‚’サãƒãƒ¼ãƒˆã™ã‚‹äº‹å‰å®šç¾©ã•れ㟠``textfsm`` テンプレートパッケージ" #: ../../rst/network/user_guide/cli_parsing.rst:55 msgid "``ttp``" msgstr "``ttp``" #: ../../rst/network/user_guide/cli_parsing.rst:56 msgid "A library for semi-structured text parsing using templates, with added capabilities to simplify the process" msgstr "処ç†ã‚’簡略化ã™ã‚‹æ©Ÿèƒ½ãŒè¿½åŠ ã•れã¦ã„ã‚‹ã€ãƒ†ãƒ³ãƒ—レートを利用ã—ãŸåŠæ§‹é€ åŒ–テキストã®è§£æžç”¨ãƒ©ã‚¤ãƒ–ラリー" #: ../../rst/network/user_guide/cli_parsing.rst:57 msgid "``pyats``" msgstr "``pyats``" #: ../../rst/network/user_guide/cli_parsing.rst:58 msgid "Uses the parsers included with the Cisco Test Automation & Validation Solution" msgstr "Cisco Test Automation & Validation Solution ã«å«ã¾ã‚Œã‚‹ãƒ‘ーサーを使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:59 msgid "``jc``" msgstr "``jc``" #: ../../rst/network/user_guide/cli_parsing.rst:60 msgid "A python module that converts the output of dozens of popular Linux/UNIX/macOS/Windows commands and file types to python dictionaries or lists of dictionaries. Note: this filter plugin can be found in the ``community.general`` collection." msgstr "多数ã®ä¸€èˆ¬çš„㪠Linux/UNIX/macOS/Windows コマンドã¨ãƒ•ァイルタイプã®å‡ºåŠ›ã‚’ python ディクショナリーã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ä¸€è¦§ã«å¤‰æ›ã™ã‚‹ Python モジュール。ã“ã®ãƒ•ィルタープラグイン㯠``community.general`` コレクションã«ã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:62 msgid "``json``" msgstr "``json``" #: ../../rst/network/user_guide/cli_parsing.rst:62 msgid "Converts JSON output at the CLI to an Ansible native data structure" msgstr "CLI ã§ã® JSON 出力を Ansible ãƒã‚¤ãƒ†ã‚£ãƒ–データ構造ã«å¤‰æ›" #: ../../rst/network/user_guide/cli_parsing.rst:64 #: ../../rst/network/user_guide/cli_parsing.rst:614 msgid "Although Ansible contains a number of plugins that can convert XML to Ansible native data structures, the ``cli_parse`` module runs the command on devices that return XML and returns the converted data in a single task." msgstr "Ansible ã«ã¯ã€XML ã‚’ Ansible ã®ãƒã‚¤ãƒ†ã‚£ãƒ–データ構造ã«å¤‰æ›ã§ãる多数ã®ãƒ—ラグインãŒå«ã¾ã‚Œã¦ã„ã¾ã™ãŒã€``cli_parse`` モジュール㯠XML ã‚’è¿”ã™ãƒ‡ãƒã‚¤ã‚¹ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã€å¤‰æ›ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’ 1 ã¤ã®ã‚¿ã‚¹ã‚¯ã§è¿”ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:66 msgid "Because ``cli_parse`` uses a plugin based architecture, it can use additional parsing engines from any Ansible collection." msgstr "``cli_parse`` ã¯ãƒ—ラグインベースã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã‚’使用ã™ã‚‹ãŸã‚ã€ä»»æ„ã® Ansible コレクションã‹ã‚‰è¿½åŠ ã®è§£æžã‚¨ãƒ³ã‚¸ãƒ³ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:70 msgid "The ``ansible.netcommon.native`` and ``ansible.utils.json`` parsing engines are fully supported with a Red Hat Ansible Automation Platform subscription. Red Hat Ansible Automation Platform subscription support is limited to the use of the ``ntc_templates``, pyATS, ``textfsm``, ``xmltodict``, public APIs as documented." msgstr "è§£æžã‚¨ãƒ³ã‚¸ãƒ³ ``ansible.netcommon.native`` ãŠã‚ˆã³ ``ansible.utils.json`` ã¯ã€Red Hat Ansible Automation Platform サブスクリプションã§å®Œå…¨ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚Red Hat Ansible Automation Platform サブスクリプションã®ã‚µãƒãƒ¼ãƒˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¨˜è¼‰ã•れã¦ã„るよã†ã«ã€``ntc_templates``ã€pyATSã€``textfsm``ã€``xmltodict``ã€ãƒ‘ブリック APIã®ä½¿ç”¨ã«é™å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:73 msgid "Parsing with the native parsing engine" msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–è§£æžã‚¨ãƒ³ã‚¸ãƒ³ã‚’使用ã—ãŸè§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:75 msgid "The native parsing engine is included with the ``cli_parse`` module. It uses data captured using regular expressions to populate the parsed data structure. The native parsing engine requires a YAML template file to parse the command output." msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–è§£æžã‚¨ãƒ³ã‚¸ãƒ³ã¯ ``cli_parse`` モジュールã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚æ­£è¦è¡¨ç¾ã‚’使用ã—ã¦å–å¾—ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦ã€è§£æžã•れãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’生æˆã—ã¾ã™ã€‚ãƒã‚¤ãƒ†ã‚£ãƒ–è§£æžã‚¨ãƒ³ã‚¸ãƒ³ã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰å‡ºåŠ›ã‚’è§£æžã™ã‚‹ãŸã‚ã« YAML テンプレートファイルãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:78 msgid "Networking example" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ä¾‹" #: ../../rst/network/user_guide/cli_parsing.rst:80 msgid "This example uses the output of a network device command and applies a native template to produce an output in Ansible structured data format." msgstr "ã“ã®ä¾‹ã§ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚³ãƒžãƒ³ãƒ‰ã®å‡ºåŠ›ã‚’ä½¿ç”¨ã—ã€ãƒã‚¤ãƒ†ã‚£ãƒ–テンプレートをé©ç”¨ã—㦠Ansible 構造ã®ãƒ‡ãƒ¼ã‚¿å½¢å¼ã§å‡ºåŠ›ã‚’ç”Ÿæˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:82 msgid "The ``show interface`` command output from the network device looks as follows:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã® ``show interface`` コマンドã®å‡ºåŠ›ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:106 msgid "Create the native template to match this output and store it as ``templates/nxos_show_interface.yaml``:" msgstr "ã“ã®å‡ºåŠ›ã«ä¸€è‡´ã™ã‚‹ãƒã‚¤ãƒ†ã‚£ãƒ–テンプレートを作æˆã—ã€ã“れを ``templates/nxos_show_interface.yaml`` ã¨ã—ã¦ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:136 msgid "This native parser template is structured as a list of parsers, each containing the following key-value pairs:" msgstr "ã“ã®ãƒã‚¤ãƒ†ã‚£ãƒ–パーサーテンプレートã¯ãƒ‘ーサーã®ãƒªã‚¹ãƒˆã¨ã—ã¦æ§‹æˆã•れã€ãれãžã‚Œã«ä»¥ä¸‹ã®ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:138 msgid "``example`` - An example line of the text line to be parsed" msgstr "``example`` - è§£æžå¯¾è±¡ã¨ãªã‚‹ãƒ†ã‚­ã‚¹ãƒˆè¡Œã®ä¸€ä¾‹" #: ../../rst/network/user_guide/cli_parsing.rst:139 msgid "``getval`` - A regular expression using named capture groups to store the extracted data" msgstr "``getval`` - 展開ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«åå‰ä»˜ãキャプãƒãƒ£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ãŸæ­£è¦è¡¨ç¾" #: ../../rst/network/user_guide/cli_parsing.rst:140 msgid "``result`` - A data tree, populated as a template, from the parsed data" msgstr "``result`` - è§£æžã•れãŸãƒ‡ãƒ¼ã‚¿ã‹ã‚‰ãƒ†ãƒ³ãƒ—レートã¨ã—ã¦ç”Ÿæˆã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ„リー" #: ../../rst/network/user_guide/cli_parsing.rst:141 msgid "``shared`` - (optional) The shared key makes the parsed values available to the rest of the parser entries until matched again." msgstr "``shared`` - (ä»»æ„) 共有キーã¯ã€å†ä¸€è‡´ã™ã‚‹ã¾ã§ã€æ®‹ã‚Šã®ãƒ‘ーサーエントリーã«è§£æžã•れãŸå€¤ã‚’利用ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:143 msgid "The following example task uses ``cli_parse`` with the native parser and the example template above to parse the ``show interface`` command from a Cisco NXOS device:" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ä¾‹ã§ã¯ã€ãƒã‚¤ãƒ†ã‚£ãƒ–パーサー㧠``cli_parse`` ã¨ä¸Šè¨˜ã®ãƒ†ãƒ³ãƒ—レートã®ã‚µãƒ³ãƒ—ルを使用ã—ã¦ã€Cisco NXOS デãƒã‚¤ã‚¹ã‹ã‚‰ã® ``show interface`` コマンドを解æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:154 #: ../../rst/network/user_guide/cli_parsing.rst:302 #: ../../rst/network/user_guide/cli_parsing.rst:328 #: ../../rst/network/user_guide/cli_parsing.rst:388 #: ../../rst/network/user_guide/cli_parsing.rst:497 msgid "Taking a deeper dive into this task:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:156 msgid "The ``command`` option provides the command you want to run on the device or host. Alternately, you can provide text from a previous command with the ``text`` option instead." msgstr "``command`` オプションã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã¾ãŸã¯ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã‚’æä¾›ã—ã¾ã™ã€‚代ã‚りã«ã€``text`` オプションを指定ã—ã¦ã€å‰ã®ã‚³ãƒžãƒ³ãƒ‰ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:157 msgid "The ``parser`` option provides information specific to the parser engine." msgstr "``parser`` オプションã¯ã€ãƒ‘ーサーエンジンã«å›ºæœ‰ã®æƒ…報をæä¾›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:158 msgid "The ``name`` suboption provides the fully qualified collection name (FQCN) of the parsing engine (``ansible.netcommon.native``)." msgstr "``name`` サブオプションã¯ã€è§£æžã‚¨ãƒ³ã‚¸ãƒ³ (``ansible.netcommon.native``) ã®å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:159 msgid "The ``cli_parse`` module, by default, looks for the template in the templates directory as ``{{ short_os }}_{{ command }}.yaml``." msgstr "デフォルトã§ã¯ã€``cli_parse`` モジュールã¯ã€templates ディレクトリー㧠``{{ short_os }}_{{ command }}.yaml`` ã¨æŒ‡å®šã—ã¦ãƒ†ãƒ³ãƒ—レートを検索ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:161 msgid "The ``short_os`` in the template filename is derived from either the host ``ansible_network_os`` or ``ansible_distribution``." msgstr "テンプレートファイルåã® ``short_os`` ã¯ã€ãƒ›ã‚¹ãƒˆã® ``ansible_network_os`` ã¾ãŸã¯ ``ansible_distribution`` ã‹ã‚‰æ´¾ç”Ÿã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:162 msgid "Spaces in the network or host command are replace with ``_`` in the ``command`` portion of the template filename. In this example, the ``show interfaces`` network CLI command becomes ``show_interfaces`` in the filename." msgstr "network ã¾ãŸã¯ host コマンドã®ã‚¹ãƒšãƒ¼ã‚¹ã¯ã€ãƒ†ãƒ³ãƒ—レートファイルåã® ``command`` 部分ã«ã‚ã‚‹ ``_`` ã«ç½®ãæ›ãˆã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``show interfaces`` network CLI コマンドã¯ãƒ•ァイルåã® ``show_interfaces`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:166 msgid "``ansible.netcommon.native`` parsing engine is fully supported with a Red Hat Ansible Automation Platform subscription." msgstr "``ansible.netcommon.native`` エンジンã®è§£æžã¯ã€Red Hat Ansible Automation Platform サブスクリプションã§å®Œå…¨ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:168 msgid "Lastly in this task, the ``set_fact`` option sets the following ``interfaces`` fact for the device based on the now-structured data returned from ``cli_parse``:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã®æœ€å¾Œã§ã€``set_fact`` オプションã¯ã€``interfaces`` ã‹ã‚‰è¿”ã•れãŸç¾åœ¨æ§‹é€ åŒ–ã•れã¦ã„るデータã«åŸºã¥ã„ã¦ã€ãƒ‡ãƒã‚¤ã‚¹ã«ä»¥ä¸‹ã® ``cli_parse`` ファクトを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:186 msgid "Linux example" msgstr "Linux ã®ä¾‹" #: ../../rst/network/user_guide/cli_parsing.rst:188 msgid "You can also use the native parser to run commands and parse output from Linux hosts." msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–パーサーを使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã€Linux ホストã‹ã‚‰ã®å‡ºåŠ›ã‚’è§£æžã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:190 msgid "The output of a sample Linux command (``ip addr show``) looks as follows:" msgstr "Linux コマンドã®å‡ºåЛ例 (``ip addr show``) ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:205 msgid "Create the native template to match this output and store it as ``templates/fedora_ip_addr_show.yaml``:" msgstr "ã“ã®å‡ºåŠ›ã«ä¸€è‡´ã™ã‚‹ãƒã‚¤ãƒ†ã‚£ãƒ–テンプレートを作æˆã—ã€ã“れを ``templates/fedora_ip_addr_show.yaml`` ã¨ã—ã¦ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:243 msgid "The ``shared`` key in the parser template allows the interface name to be used in subsequent parser entries. The use of examples and free-spacing mode with the regular expressions makes the template easier to read." msgstr "パーサーテンプレート㮠``shared`` キーを使用ã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースåを後続ã®ãƒ‘ーサーエントリーã§ä½¿ç”¨ã§ãã¾ã™ã€‚æ­£è¦è¡¨ç¾ã§ä¾‹ã¨ãƒ•リースペースモードを使用ã™ã‚‹ã¨ã€ãƒ†ãƒ³ãƒ—レートãŒèª­ã¿ã‚„ã™ããªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:245 msgid "The following example task uses ``cli_parse`` with the native parser and the example template above to parse the Linux output:" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ä¾‹ã§ã¯ã€ãƒã‚¤ãƒ†ã‚£ãƒ–パーサーã®ã‚ã‚‹ ``cli_parse`` ã¨ã€ä¸Šè¨˜ã®ã‚µãƒ³ãƒ—ルテンプレートを使用ã—㦠Linux ã®å‡ºåŠ›ã‚’è§£æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:256 msgid "This task assumes you previously gathered facts to determine the ``ansible_distribution`` needed to locate the template. Alternately, you could provide the path in the ``parser/template_path`` option." msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ä»¥å‰ã«ãƒ•ァクトをåŽé›†ã—ã¦ãƒ†ãƒ³ãƒ—レートを見ã¤ã‘ã‚‹ã®ã«å¿…è¦ãª ``ansible_distribution`` を決定ã™ã‚‹ã“ã¨ã‚’仮定ã—ã¦ã„ã¾ã™ã€‚ã‚ã‚‹ã„ã¯ã€``parser/template_path`` オプションã§ãƒ‘スを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:259 msgid "Lastly in this task, the ``set_fact`` option sets the following ``interfaces`` fact for the host, based on the now-structured data returned from ``cli_parse``:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã®æœ€å¾Œã§ã€``set_fact`` オプションã¯ã€``interfaces`` ã‹ã‚‰è¿”ã•れãŸç¾åœ¨æ§‹é€ åŒ–ã•れã¦ã„るデータã«åŸºã¥ã„ã¦ã€ãƒ›ã‚¹ãƒˆã«ä»¥ä¸‹ã® ``cli_parse`` ファクトを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:287 msgid "Parsing JSON" msgstr "JSON ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:289 msgid "Although Ansible will natively convert serialized JSON to Ansible native data when recognized, you can also use the ``cli_parse`` module for this conversion." msgstr "Ansible ã¯ã€èªè­˜æ™‚ã«ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºã•れ㟠JSON ã‚’ Ansible ãƒã‚¤ãƒ†ã‚£ãƒ–データã«å¤‰æ›ã—ã¾ã™ãŒã€ã“ã®å¤‰æ›ã« ``cli_parse`` モジュールを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:291 #: ../../rst/network/user_guide/cli_parsing.rst:317 #: ../../rst/network/user_guide/cli_parsing.rst:376 msgid "Example task:" msgstr "タスクã®ä¾‹:" #: ../../rst/network/user_guide/cli_parsing.rst:304 msgid "The ``show interface | json`` command is issued on the device." msgstr "``show interface | json`` コマンドã¯ãƒ‡ãƒã‚¤ã‚¹ã§ç™ºè¡Œã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:305 msgid "The output is set as the ``interfaces`` fact for the device." msgstr "ã“ã®å‡ºåŠ›ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã® ``interfaces`` ファクトã¨ã—ã¦è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:306 msgid "JSON support is provided primarily for playbook consistency." msgstr "JSON ã®ã‚µãƒãƒ¼ãƒˆã¯ã€ä¸»ã« Playbook ã®ä¸€è²«æ€§ã®ãŸã‚ã«æä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:310 msgid "The use of ``ansible.netcommon.json`` is fully supported with a Red Hat Ansible Automation Platform subscription" msgstr "``ansible.netcommon.json`` ã®ä½¿ç”¨ã¯ã€Red Hat Ansible Automation Platform サブスクリプションã§å®Œå…¨ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:313 msgid "Parsing with ntc_templates" msgstr "ntc_templates ã§ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:315 msgid "The ``ntc_templates`` python library includes pre-defined ``textfsm`` templates for parsing a variety of network device commands output." msgstr "``ntc_templates`` python ライブラリーã«ã¯ã€ã•ã¾ã–ã¾ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚³ãƒžãƒ³ãƒ‰ã®å‡ºåŠ›ã‚’è§£æžã™ã‚‹äº‹å‰å®šç¾©æ¸ˆã¿ã® ``textfsm`` テンプレートãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:330 msgid "The ``ansible_network_os`` of the device is converted to the ntc_template format ``cisco_nxos``. Alternately, you can provide the ``os`` with the ``parser/os`` option instead." msgstr "デãƒã‚¤ã‚¹ã® ``ansible_network_os`` 㯠ntc_template å½¢å¼ ``cisco_nxos`` ã«å¤‰æ›ã•れã¾ã™ãŒã€ä»£ã‚り㫠``parser/os`` オプション㧠``os`` を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:331 msgid "The ``cisco_nxos_show_interface.textfsm`` template, included with the ``ntc_templates`` package, parses the output." msgstr "``cisco_nxos_show_interface.textfsm`` パッケージã«å«ã¾ã‚Œã‚‹ ``ntc_templates`` テンプレートã¯ã€å‡ºåŠ›ã‚’è§£æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:332 msgid "See `the ntc_templates README `_ for additional information about the ``ntc_templates`` python library." msgstr "``ntc_templates`` python ライブラリーã«é–¢ã™ã‚‹è¿½åŠ æƒ…å ±ã¯ã€`ntc_templates ã®ã€ŒREADME〠`_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:336 msgid "Red Hat Ansible Automation Platform subscription support is limited to the use of the ``ntc_templates`` public APIs as documented." msgstr "Red Hat Ansible Automation Platform ã®ã‚µãƒ–スクリプションã®ã‚µãƒãƒ¼ãƒˆã¯ã€æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹ ``ntc_templates`` パブリック API ã®ä½¿ç”¨ã«é™å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:339 msgid "This task and and the predefined template sets the following fact as the ``interfaces`` fact for the host:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³äº‹å‰å®šç¾©ã•れãŸãƒ†ãƒ³ãƒ—レートã¯ã€ä»¥ä¸‹ã®ãƒ•ァクトをホスト㮠``interfaces`` ファクトã¨ã—ã¦è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:372 msgid "Parsing with pyATS" msgstr "pyATS ã§ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:374 msgid "``pyATS`` is part of the Cisco Test Automation & Validation Solution. It includes many predefined parsers for a number of network platforms and commands. You can use the predefined parsers that are part of the ``pyATS`` package with the ``cli_parse`` module." msgstr "``pyATS`` ã¯ã€Cisco Test Automation & Validation Solution ã®ä¸€éƒ¨ã§ã™ã€‚ã“れã«ã¯ã€å¤šæ•°ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ç”¨ã®å®šç¾©æ¸ˆã¿ãƒ‘ーサーãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``cli_parse`` モジュールã§ã¯ã€``pyATS`` パッケージã«åŒæ¢±ã•れる定義済ã¿ãƒ‘ーサーを使用ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:390 msgid "The ``cli_parse`` modules converts the ``ansible_network_os`` automatically (in this example, ``ansible_network_os`` set to ``cisco.nxos.nxos``, converts to ``nxos`` for pyATS. Alternately, you can set the OS with the ``parser/os`` option instead." msgstr "``cli_parse`` モジュールã¯ã€è‡ªå‹•的㫠``ansible_network_os`` を変æ›ã—ã¾ã™ (ã“ã®ä¾‹ã§ã¯ã€``ansible_network_os`` 㯠``cisco.nxos.nxos`` ã«è¨­å®šã•れã¦ã„ã¾ã™ãŒã€pyATS ã®å ´åˆã¯ ``nxos`` ã«å¤‰æ›ã•れã¾ã™ã€‚代ã‚りã«ã€``parser/os`` オプションを使用ã—㦠OS を設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™)。" #: ../../rst/network/user_guide/cli_parsing.rst:391 #, python-format msgid "Using a combination of the command and OS, the pyATS selects the following parser: https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers/show%2520interface." msgstr "コマンド㨠OS ã®çµ„ã¿åˆã‚ã›ã‚’使用ã—ã¦ã€pyATS ãŒãƒ‘ーサー (https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers/show%2520interface) ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:392 msgid "The ``cli_parse`` module sets ``cisco.ios.ios`` to ``iosxe`` for pyATS. You can override this with the ``parser/os`` option." msgstr "``cli_parse`` モジュールã¯ã€pyATS ã«å¯¾ã—㦠``cisco.ios.ios`` ã‚’ ``iosxe`` ã«è¨­å®šã—ã¾ã™ã€‚``parser/os`` オプションã§ã“れを上書ãã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:393 msgid "``cli_parse`` only uses the predefined parsers in pyATS. See the `pyATS documentation `_ and the full list of `pyATS included parsers `_." msgstr "``cli_parse`` 㯠pyATS ã®å®šç¾©æ¸ˆã¿ãƒ‘ーサーã®ã¿ã‚’使用ã—ã¾ã™ã€‚`pyATS ドキュメント `_ ã¨ã€`pyATS ãŒå«ã¾ã‚Œã‚‹ãƒ‘ーサー `_ ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:397 msgid "Red Hat Ansible Automation Platform subscription support is limited to the use of the pyATS public APIs as documented." msgstr "Red Hat Ansible Automation Platform ã®ã‚µãƒ–スクリプションサãƒãƒ¼ãƒˆã¯ã€æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹ pyATS パブリック API ã®ä½¿ç”¨ã«é™å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:400 #: ../../rst/network/user_guide/cli_parsing.rst:508 msgid "This task sets the following fact as the ``interfaces`` fact for the host:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ›ã‚¹ãƒˆã® ``interfaces`` ファクトã¨ã—ã¦ä»¥ä¸‹ã®ãƒ•ァクトを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:438 msgid "Parsing with textfsm" msgstr "textfsm ã§è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:440 msgid "``textfsm`` is a Python module which implements a template-based state machine for parsing semi-formatted text." msgstr "``textfsm`` ã¯ã€åŠãƒ•ォーマットã®ãƒ†ã‚­ã‚¹ãƒˆã‚’è§£æžã™ã‚‹ãŸã‚ã«ãƒ†ãƒ³ãƒ—レートベースã®çŠ¶æ…‹ãƒžã‚·ãƒ³ã‚’å®Ÿè£…ã™ã‚‹ Python モジュールã§ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:442 msgid "The following sample``textfsm`` template is stored as ``templates/nxos_show_interface.textfsm``" msgstr "以下ã®ã‚µãƒ³ãƒ—ル ``textfsm`` テンプレートã¯ã€``templates/nxos_show_interface.textfsm`` ã®å½¢å¼ã§ä¿å­˜ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:486 msgid "The following task uses the example template for ``textfsm`` with the ``cli_parse`` module." msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€``textfsm`` モジュール㧠``cli_parse`` ã®ã‚µãƒ³ãƒ—ルテンプレートを使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:499 msgid "The ``ansible_network_os`` for the device (``cisco.nxos.nxos``) is converted to ``nxos``. Alternately you can provide the OS in the ``parser/os`` option instead." msgstr "デãƒã‚¤ã‚¹ã® ``ansible_network_os`` (``cisco.nxos.nxos``) 㯠``nxos`` ã«å¤‰æ›ã•れã¾ã™ã€‚代ã‚り㫠``parser/os`` オプション㫠OS を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:500 msgid "The textfsm template name defaulted to ``templates/nxos_show_interface.textfsm`` using a combination of the OS and command run. Alternately you can override the generated template path with the ``parser/template_path`` option." msgstr "textfsm ã®ãƒ†ãƒ³ãƒ—レートåã¯ã€OS ã¨ã‚³ãƒžãƒ³ãƒ‰ãƒ©ãƒ³ã®çµ„ã¿åˆã‚ã›ã«ã‚ˆã‚Šã€ãƒ‡ãƒ•ォルトã§``templates/nxos_show_interface.textfsm`` ã¨ãªã£ã¦ã„ã¾ã™ã€‚ã¾ãŸã€``parser/template_path`` オプションã§ã€ç”Ÿæˆã•れãŸãƒ†ãƒ³ãƒ—レートã®ãƒ‘スを上書ãã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:501 msgid "See the `textfsm README `_ for details." msgstr "詳細ã¯ã€`textfsm README `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:502 msgid "``textfsm`` was previously made available as a filter plugin. Ansible users should transition to the ``cli_parse`` module." msgstr "``textfsm`` ã¯ã€ä»¥å‰ã¯ãƒ•ィルタープラグインã¨ã—ã¦åˆ©ç”¨ã§ãã¾ã—ãŸã€‚Ansible ユーザーã¯ã€``cli_parse`` モジュールã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:506 msgid "Red Hat Ansible Automation Platform subscription support is limited to the use of the ``textfsm`` public APIs as documented." msgstr "Red Hat Ansible Automation Platform ã®ã‚µãƒ–スクリプションã®ã‚µãƒãƒ¼ãƒˆã¯ã€æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹ ``textfsm`` パブリック API ã®ä½¿ç”¨ã«é™å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:539 msgid "Parsing with TTP" msgstr "TTP ã§ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:541 msgid "TTP is a Python library for semi-structured text parsing using templates. TTP uses a jinja-like syntax to limit the need for regular expressions. Users familiar with jinja templating may find the TTP template syntax familiar." msgstr "TTP ã¯ã€ãƒ†ãƒ³ãƒ—レートを使用ã—ãŸåŠæ§‹é€ åŒ–テキスト解æžç”¨ã® Python ライブラリーã§ã™ã€‚TTP ã¯ã€æ­£è¦è¡¨ç¾ã®å¿…è¦æ€§ã‚’制é™ã™ã‚‹ãŸã‚ã«ã€jinja ã«ä¼¼ãŸæ§‹æ–‡ã‚’使用ã—ã¾ã™ã€‚jinja ã®ãƒ†ãƒ³ãƒ—レート化ã«ç²¾é€šã—ã¦ã„るユーザーã¯ã€TTP ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ§‹æ–‡ã«è¦ªã—ã¿ã‚’感ã˜ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/network/user_guide/cli_parsing.rst:543 msgid "The following is an example TTP template stored as ``templates/nxos_show_interface.ttp``:" msgstr "以下ã¯ã€``templates/nxos_show_interface.ttp`` ã¨ã—ã¦ä¿å­˜ã•れ㟠TTP テンプレートã®ä¾‹ã§ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:550 msgid "The following task uses this template to parse the ``show interface`` command output:" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ã“ã®ãƒ†ãƒ³ãƒ—レートを使用ã—㦠``show interface`` コマンドã®å‡ºåŠ›ã‚’è§£æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:561 msgid "Taking a deeper dive in this task:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:563 msgid "The default template path ``templates/nxos_show_interface.ttp`` was generated using the ``ansible_network_os`` for the host and ``command`` provided." msgstr "デフォルトã®ãƒ†ãƒ³ãƒ—レートパス ``templates/nxos_show_interface.ttp`` ã¯ã€ãƒ›ã‚¹ãƒˆã® ``ansible_network_os`` ã¨ã€æŒ‡å®šã—㟠``command`` を使用ã—ã¦ç”Ÿæˆã•れã¾ã—ãŸã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:564 msgid "TTP supports several additional variables that will be passed to the parser. These include:" msgstr "TTP ã¯ã€ãƒ‘ãƒ¼ã‚µãƒ¼ã«æ¸¡ã•れる追加変数をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:566 msgid "``parser/vars/ttp_init`` - Additional parameter passed when the parser is initialized." msgstr "``parser/vars/ttp_init`` - パーサーã®åˆæœŸåŒ–æ™‚ã«æ¸¡ã•れる追加ã®ãƒ‘ラメーター。" #: ../../rst/network/user_guide/cli_parsing.rst:567 msgid "``parser/vars/ttp_results`` - Additional parameters used to influence the parser output." msgstr "``parser/vars/ttp_results`` - パーサーã®å‡ºåŠ›ã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる追加ã®ãƒ‘ラメーター。" #: ../../rst/network/user_guide/cli_parsing.rst:568 msgid "``parser/vars/ttp_vars`` - Additional variables made available in the template." msgstr "``parser/vars/ttp_vars`` - テンプレートã§åˆ©ç”¨å¯èƒ½ãªè¿½åŠ ã®å¤‰æ•°" #: ../../rst/network/user_guide/cli_parsing.rst:570 msgid "See the `TTP documentation `_ for details." msgstr "詳細ã¯ã€`TTP documentation `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:573 msgid "The task sets the follow fact as the ``interfaces`` fact for the host:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ›ã‚¹ãƒˆã® ``interfaces`` ファクトã¨ã—㦠follow ファクトを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:589 msgid "Parsing with JC" msgstr "JC ã§ã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:591 msgid "JC is a python library that converts the output of dozens of common Linux/UNIX/macOS/Windows command-line tools and file types to python dictionaries or lists of dictionaries for easier parsing. JC is available as a filter plugin in the ``community.general`` collection." msgstr "JC ã¯ã€å¤šæ•°ã®ä¸€èˆ¬çš„㪠Linux/UNIX/macOS/Windows コマンドラインツールãŠã‚ˆã³ãƒ•ァイルタイプã®å‡ºåŠ›ã‚’ python ディクショナリーã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ä¸€è¦§ã«å¤‰æ›ã™ã‚‹ python ライブラリーã§ã™ã€‚JC ã¯ã€``community.general`` コレクションã®ãƒ•ィルタープラグインã¨ã—ã¦åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:593 msgid "The following is an example using JC to parse the output of the ``dig`` command:" msgstr "以下ã¯ã€JC を使用ã—㦠``dig`` コマンドã®å‡ºåŠ›ã‚’è§£æžã—ãŸä¾‹ã§ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:607 msgid "The JC project and documentation can be found `here `_." msgstr "JC プロジェクトãŠã‚ˆã³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ `here `_ ã«ã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:608 msgid "See this `blog entry `_ for more information." msgstr "詳細ã¯ã€`ブログ記事 ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/cli_parsing.rst:612 msgid "Converting XML" msgstr "XML ã®å¤‰æ›" #: ../../rst/network/user_guide/cli_parsing.rst:616 msgid "This example task runs the ``show interface`` command and parses the output as XML:" msgstr "ã“ã®ã‚µãƒ³ãƒ—ルタスクã§ã¯ã€``show interface`` コマンドを実行ã—ã€å‡ºåŠ›ã‚’ XML ã¨ã—ã¦è§£æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:629 msgid "Red Hat Ansible Automation Platform subscription support is limited to the use of the ``xmltodict`` public APIs as documented." msgstr "Red Hat Ansible Automation Platform ã®ã‚µãƒ–スクリプションã®ã‚µãƒãƒ¼ãƒˆã¯ã€æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹ ``xmltodict`` パブリック API ã®ä½¿ç”¨ã«é™å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:631 msgid "This task sets the ``interfaces`` fact for the host based on this returned output:" msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€è¿”ã•れãŸå‡ºåŠ›ã«åŸºã¥ã„ã¦ãƒ›ã‚¹ãƒˆã® ``interfaces`` ファクトを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:654 msgid "Advanced use cases" msgstr "高度ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹" #: ../../rst/network/user_guide/cli_parsing.rst:656 msgid "The ``cli_parse`` module supports several features to support more complex uses cases." msgstr "``cli_parse`` モジュールã¯ã€ã‚ˆã‚Šè¤‡é›‘ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹è¤‡æ•°ã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:659 msgid "Provide a full template path" msgstr "完全ãªãƒ†ãƒ³ãƒ—レートパスをæä¾›" #: ../../rst/network/user_guide/cli_parsing.rst:661 msgid "Use the ``template_path`` option to override the default template path in the task:" msgstr "``template_path`` オプションを使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã®ãƒ‡ãƒ•ォルトã®ãƒ†ãƒ³ãƒ—レートパスを上書ãã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:674 msgid "Provide command to parser different than the command run" msgstr "コマンド実行以外ã®ãƒ‘ーサーを行ã†ã‚³ãƒžãƒ³ãƒ‰ã‚’指定" #: ../../rst/network/user_guide/cli_parsing.rst:676 msgid "Use the ``command`` suboption for the ``parser`` to configure the command the parser expects if it is different from the command ``cli_parse`` runs:" msgstr "``parser`` ã® ``command`` サブオプションを使用ã—ã¦ã€``cli_parse`` コマンドã®å®Ÿè¡Œã¨ã¯ç•°ãªã‚‹å ´åˆã«ãƒ‘ãƒ¼ã‚µãƒ¼ãŒæƒ³å®šã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:688 msgid "Provide a custom OS value" msgstr "カスタム OS 値を指定" #: ../../rst/network/user_guide/cli_parsing.rst:690 msgid "Use the ``os`` suboption to the parser to directly set the OS instead of using ``ansible_network_os`` or ``ansible_distribution`` to generate the template path or with the specified parser engine:" msgstr "テンプレートパスを生æˆã™ã‚‹ ``ansible_network_os`` ã‚„ ``ansible_distribution``ã€ã¾ãŸã¯æŒ‡å®šã—ãŸãƒ‘ーサーエンジンを使用ã™ã‚‹ä»£ã‚りã«ã€OS を直接設定ã™ã‚‹ãƒ‘ーサー㫠``os`` サブオプションを使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:710 msgid "Parse existing text" msgstr "既存テキストã®è§£æž" #: ../../rst/network/user_guide/cli_parsing.rst:712 msgid "Use the ``text`` option instead of ``command`` to parse text collected earlier in the playbook." msgstr "``command`` ã®ä»£ã‚り㫠``text`` オプションを使用ã—ã¦ã€Playbook ã§ä»¥å‰ã«åŽé›†ã—ãŸãƒ†ã‚­ã‚¹ãƒˆã‚’è§£æžã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/cli_parsing.rst:744 msgid ":ref:`develop_cli_parse_plugins`" msgstr ":ref:`develop_cli_parse_plugins`" #: ../../rst/network/user_guide/faq.rst:5 msgid "Ansible Network FAQ" msgstr "Ansible Network FAQ" #: ../../rst/network/user_guide/faq.rst:7 msgid "Topics" msgstr "トピック" #: ../../rst/network/user_guide/faq.rst:12 msgid "How can I improve performance for network playbooks?" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® Playbook ã®ãƒ‘フォーマンスを改善ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹" #: ../../rst/network/user_guide/faq.rst:17 msgid "Consider ``strategy: free`` if you are running on multiple hosts" msgstr "複数ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã¯ ``strategy: free`` ã«ã¤ã„ã¦æ¤œè¨Žã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/faq.rst:19 msgid "The ``strategy`` plugin tells Ansible how to order multiple tasks on multiple hosts. :ref:`Strategy` is set at the playbook level." msgstr "``strategy`` プラグインã¯ã€Ansible ã«å¯¾ã—ã¦è¤‡æ•°ã®ãƒ›ã‚¹ãƒˆã§è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’é †åºä»˜ã‘る方法を示ã—ã¾ã™ã€‚:ref:`Strategy` 㯠Playbook レベルã§è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:21 msgid "The default strategy is ``linear``. With strategy set to ``linear``, Ansible waits until the current task has run on all hosts before starting the next task on any host. Ansible may have forks free, but will not use them until all hosts have completed the current task. If each task in your playbook must succeed on all hosts before you run the next task, use the ``linear`` strategy." msgstr "デフォルトã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã¯ ``linear`` ã§ã™ã€‚ストラテジーを ``linear`` ã«è¨­å®šã™ã‚‹ã¨ã€Ansible ã¯ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ãŒã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるã¾ã§å¾…機ã—ã¦ã‹ã‚‰ã€ä»»æ„ã®ãƒ›ã‚¹ãƒˆã§æ¬¡ã®ã‚¿ã‚¹ã‚¯ã‚’é–‹å§‹ã—ã¾ã™ã€‚Ansible ã¯ãƒ•ォークを解放ã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€å…¨ã¦ã®ãƒ›ã‚¹ãƒˆãŒç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ã‚’完了ã™ã‚‹ã¾ã§ãƒ•ォークを使用ã—ã¾ã›ã‚“。次ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å‰ã«ã€Playbook ã®å„タスクãŒã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§æˆåŠŸã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``linear`` ストラテジーを使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:23 msgid "Using the ``free`` strategy, Ansible uses available forks to execute tasks on each host as quickly as possible. Even if an earlier task is still running on one host, Ansible executes later tasks on other hosts. The ``free`` strategy uses available forks more efficiently. If your playbook stalls on each task, waiting for one slow host, consider using ``strategy: free`` to boost overall performance." msgstr "ã“ã® ``free`` ストラテジーを使用ã™ã‚‹ã¨ã€Ansible ã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ•ォークを使用ã—ã¦å„ホストã®ã‚¿ã‚¹ã‚¯ã‚’ã§ãã‚‹ã ã‘速ã実行ã—ã¾ã™ã€‚ã‚るホストã§å‰ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡ŒãŒå®Œäº†ã—ã¦ã„ãªã„å ´åˆã§ã‚‚ã€Ansible ã¯ä»–ã®ãƒ›ã‚¹ãƒˆã§å¾Œã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚ã“ã® ``free`` ストラテジーã§ã¯ã€ä½¿ç”¨å¯èƒ½ãªãƒ•ォークをより効率的ã«ä½¿ç”¨ã—ã¾ã™ã€‚å„タスク㧠Playbook ãŒåœæ»žã—ã€1 ã¤ã®ãƒ›ã‚¹ãƒˆã®å‡¦ç†é€Ÿåº¦ãŒé…ã„å ´åˆã¯ã€``strategy: free`` を使用ã—ã¦å…¨ä½“çš„ãªãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/faq.rst:28 msgid "Execute ``show running`` only if you absolutely must" msgstr "絶対的ã«å¿…è¦ã¨ã•れる場åˆã«ã®ã¿ ``show running`` を実行" #: ../../rst/network/user_guide/faq.rst:30 msgid "The ``show running`` command is the most resource-intensive command to execute on a network device, because of the way queries are handled by the network OS. Using the command in your Ansible playbook will slow performance significantly, especially on large devices; repeating it will multiply the performance hit. If you have a playbook that checks the running config, then executes changes, then checks the running config again, you should expect that playbook to be very slow." msgstr "ã“ã® ``show running`` コマンドã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS ã«ã‚ˆã‚‹ã‚¯ã‚¨ãƒªãƒ¼ã®å‡¦ç†æ–¹æ³•ã®ãŸã‚ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§å®Ÿè¡Œã™ã‚‹æœ€ã‚‚リソースを消費ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã§ã™ã€‚Ansible Playbook ã§ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ç‰¹ã«å¤§è¦æ¨¡ãªãƒ‡ãƒã‚¤ã‚¹ã§ã¯ãƒ‘フォーマンスãŒå¤§å¹…ã«ä½Žä¸‹ã—ã¾ã™ã€‚繰り返ã—実行ã™ã‚‹ã¨ã€ãƒ‘フォーマンスã¸ã®å½±éŸ¿ãŒå¤§ãããªã‚Šã¾ã™ã€‚実行設定を確èªã—ã¦ã‹ã‚‰å¤‰æ›´ã‚’実行ã—ã€å†ã³å®Ÿè¡Œè¨­å®šã‚’確èªã™ã‚‹ Playbook ãŒã‚ã‚‹å ´åˆã¯ã€Playbook ãŒéžå¸¸ã«é…ããªã‚‹ã“ã¨ãŒäºˆæƒ³ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:35 msgid "Use ``ProxyCommand`` only if you absolutely must" msgstr "絶対的ã«å¿…è¦ã¨ã•れる場åˆã®ã¿ ``ProxyCommand`` を使用" #: ../../rst/network/user_guide/faq.rst:37 msgid "Network modules support the use of a :ref:`proxy or jump host` with the ``ProxyCommand`` parameter. However, when you use a jump host, Ansible must open a new SSH connection for every task, even if you are using a persistent connection type (``network_cli`` or ``netconf``). To maximize the performance benefits of the persistent connection types introduced in version 2.5, avoid using jump hosts whenever possible." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``ProxyCommand`` パラメーター㧠:ref:`プロキシーã¾ãŸã¯ã‚¸ãƒ£ãƒ³ãƒ—ホスト` ã®ä½¿ç”¨ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã‚¸ãƒ£ãƒ³ãƒ—ホストを使用ã™ã‚‹å ´åˆã¯ã€æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ— (``network_cli`` ã¾ãŸã¯ ``netconf``) を使用ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ã‚¿ã‚¹ã‚¯ã”ã¨ã«æ–°ã—ã„ SSH 接続を開ãå¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã§å°Žå…¥ã•ã‚ŒãŸæ°¸ç¶šæŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®ãƒ‘フォーマンス上ã®åˆ©ç‚¹ã‚’最大é™ã«æ´»ç”¨ã™ã‚‹ã«ã¯ã€å¯èƒ½ãªé™ã‚Šã‚¸ãƒ£ãƒ³ãƒ—ホストを使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/network/user_guide/faq.rst:42 msgid "Set ``--forks`` to match your needs" msgstr "å¿…è¦ã«å¿œã˜ã¦ ``--forks`` を設定" #: ../../rst/network/user_guide/faq.rst:44 msgid "Every time Ansible runs a task, it forks its own process. The ``--forks`` parameter defines the number of concurrent tasks - if you retain the default setting, which is ``--forks=5``, and you are running a playbook on 10 hosts, five of those hosts will have to wait until a fork is available. Of course, the more forks you allow, the more memory and processing power Ansible will use. Since most network tasks are run on the control host, this means your laptop can quickly become cpu- or memory-bound." msgstr "Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã³ã«ã€ç‹¬è‡ªã®ãƒ—ロセスをフォークã—ã¾ã™ã€‚``--forks`` パラメーターã¯ã€åŒæ™‚å®Ÿè¡Œã‚¿ã‚¹ã‚¯ã®æ•°ã‚’定義ã—ã¾ã™ã€‚デフォルト設定 (``--forks=5``) ã®ã¾ã¾ã§ã€10 å°ã®ãƒ›ã‚¹ãƒˆã§ Playbook を実行ã—ã¦ã„ã‚‹ã¨ã€ãã®ã†ã¡ 5 å°ã®ãƒ›ã‚¹ãƒˆã¯ã€ãƒ•ォークãŒä½¿ç”¨å¯èƒ½ã«ãªã‚‹ã¾ã§å¾…機ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€ãƒ•ã‚©ãƒ¼ã‚¯ã®æ•°ãŒå¢—ãˆã‚Œã°å¢—ãˆã‚‹ã»ã©ã€Ansible ã¯ã‚ˆã‚Šå¤šãã®ãƒ¡ãƒ¢ãƒªãƒ¼ã¨å‡¦ç†èƒ½åŠ›ã‚’ä½¿ã†ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¹ã‚¯ã®å¤§åŠã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるãŸã‚ã€ãƒ©ãƒƒãƒ—トップã§ã¯ã€CPU ã¾ãŸã¯ãƒ¡ãƒ¢ãƒªãƒ¼ãŒã™ãã«æž¯æ¸‡ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:49 msgid "Why is my output sometimes replaced with ``********``?" msgstr "出力㌠``********`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã“ã¨ãŒã‚ã‚‹ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/network/user_guide/faq.rst:51 msgid "Ansible replaces any string marked ``no_log``, including passwords, with ``********`` in Ansible output. This is done by design, to protect your sensitive data. Most users are happy to have their passwords redacted. However, Ansible replaces every string that matches your password with ``********``. If you use a common word for your password, this can be a problem. For example, if you choose ``Admin`` as your password, Ansible will replace every instance of the word ``Admin`` with ``********`` in your output. This may make your output harder to read. To avoid this problem, select a secure password that will not occur elsewhere in your Ansible output." msgstr "Ansible ã¯ã€Ansible 出力ã§ã€ãƒ‘スワードをå«ã‚€ ``no_log`` ã¨å°ã•ã‚ŒãŸæ–‡å­—列を ``********`` ã«ç½®ãæ›ãˆã¾ã™ã€‚ã“れã¯ã€æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿è­·ã™ã‚‹ãŸã‚ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€è‡ªèº«ã®ãƒ‘スワードãŒä¼å­—ã«ãªã‚‹ã“ã¨ã‚’希望ã—ã¾ã™ã€‚ãŸã ã—ã€Ansible ã¯ãƒ‘スワードã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®æ–‡å­—列を ``********`` ã«ç½®ãæ›ãˆã¾ã™ã€‚パスワードã«ä¸€èˆ¬çš„ãªå˜èªžã‚’使用ã™ã‚‹ã¨ã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``Admin`` をパスワードã¨ã—ãŸå ´åˆã€``Admin`` ã¯å‡ºåЛ内ã«ã‚ã‚‹ãã®å˜èªžã®ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ ``********`` ã«ç½®ãæ›ãˆã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å‡ºåŠ›ãŒèª­ã¿ã«ãããªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®å•題を回é¿ã™ã‚‹ã«ã¯ã€ä»–ã® Ansible 出力場所ã§ã¯ä½¿ç”¨ã•れãªã„安全ãªãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/faq.rst:56 msgid "Why do the ``*_config`` modules always return ``changed=true`` with abbreviated commands?" msgstr "çœç•¥ã•れãŸã‚³ãƒžãƒ³ãƒ‰ã§ ``*_config`` モジュールãŒå¸¸ã« ``changed=true`` ã‚’è¿”ã™ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/network/user_guide/faq.rst:58 msgid "When you issue commands directly on a network device, you can use abbreviated commands. For example, ``int g1/0/11`` and ``interface GigabitEthernet1/0/11`` do the same thing; ``shut`` and ``shutdown`` do the same thing. Ansible Network ``*_command`` modules work with abbreviations, because they run commands through the network OS." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ç›´æŽ¥ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹å ´åˆã¯ã€çœç•¥ã•れãŸã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``int g1/0/11`` 㨠``interface GigabitEthernet1/0/11`` ã¯ã€åŒã˜å‹•作ã«ãªã‚Šã¾ã™ã€‚``shut`` 㨠``shutdown`` ã‚‚åŒã˜å‹•作ã«ãªã‚Šã¾ã™ã€‚Ansible Network ã® ``*_command`` モジュールã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS を介ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ãŸã‚ã€çœç•¥å½¢ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:60 msgid "When committing configuration, however, the network OS converts abbreviations into long-form commands. Whether you use ``shut`` or ``shutdown`` on ``GigabitEthernet1/0/11``, the result in the configuration is the same: ``shutdown``." msgstr "ãŸã ã—ã€è¨­å®šã‚’コミットã™ã‚‹ã¨ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS ã¯çœç•¥å½¢ã‚’é•·ã„å½¢å¼ã®ã‚³ãƒžãƒ³ãƒ‰ã«å¤‰æ›ã—ã¾ã™ã€‚``GigabitEthernet1/0/11`` ã§ ``shut`` ã¾ãŸã¯ ``shutdown`` を使用ã—ãŸå ´åˆã®è¨­å®šã¯åŒã˜ã§ã€``shutdown`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:62 msgid "Ansible Network ``*_config`` modules compare the text of the commands you specify in ``lines`` to the text in the configuration. If you use ``shut`` in the ``lines`` section of your task, and the configuration reads ``shutdown``, the module returns ``changed=true`` even though the configuration is already correct. Your task will update the configuration every time it runs." msgstr "Ansible Network ã® ``*_config`` モジュールã¯ã€``lines`` ã§æŒ‡å®šã—ãŸã‚³ãƒžãƒ³ãƒ‰ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’設定ã®ãƒ†ã‚­ã‚¹ãƒˆã¨æ¯”較ã—ã¾ã™ã€‚タスク㮠``lines`` セクション㧠``shut`` を使用ã—ã€è¨­å®šãŒ ``shutdown`` を読ã¿è¾¼ã‚€å ´åˆã¯ã€è¨­å®šãŒæ­£ã—ã„ã«ã‚‚ã‹ã‹ã‚らãšã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ ``changed=true`` ã‚’è¿”ã—ã¾ã™ã€‚タスクを実行ã™ã‚‹ãŸã³ã«è¨­å®šãŒæ›´æ–°ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/faq.rst:64 msgid "To avoid this problem, use long-form commands with the ``*_config`` modules:" msgstr "ã“ã®å•題を回é¿ã™ã‚‹ã«ã¯ã€``*_config`` モジュールã§é•·ã„å½¢å¼ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/index.rst:15 msgid "Advanced Topics" msgstr "高度ãªãƒˆãƒ”ック" #: ../../rst/network/user_guide/index.rst:5 msgid "Network Advanced Topics" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®é«˜åº¦ãªãƒˆãƒ”ック" #: ../../rst/network/user_guide/index.rst:7 msgid "Once you have mastered the basics of network automation with Ansible, as presented in :ref:`network_getting_started`, use this guide understand platform-specific details, optimization, and troubleshooting tips for Ansible for network automation." msgstr ":ref:`network_getting_started` ã«è¨˜è¼‰ã•れã¦ã„るよã†ã«ã€Ansible を使用ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã®åŸºæœ¬ã‚’ç¿’å¾—ã—ãŸã‚‰ã€æœ¬ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã«é–¢ã™ã‚‹ Ansible ã®ãƒ—ラットフォーム固有ã®è©³ç´°ã€æœ€é©åŒ–ã€ãŠã‚ˆã³ãƒˆãƒ©ãƒ–ルシューティングã®ãƒ’ントをç†è§£ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/index.rst:11 msgid "This guide is intended for network engineers using Ansible for automation. It covers advanced topics. If you understand networks and Ansible, this guide is for you. You may read through the entire guide if you choose, or use the links below to find the specific information you need." msgstr "ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€è‡ªå‹•化㫠Ansible を使用ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã‚’対象ã¨ã—ãŸé«˜åº¦ãªãƒˆãƒ”ックを説明ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ Ansible ã‚’ç†è§£ã—ã¦ã„るユーザーを対象ã¨ã—ã¦ã„ã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã‚¬ã‚¤ãƒ‰å…¨ä½“を読むã‹ã€æ¬¡ã®ãƒªãƒ³ã‚¯ã‚’使用ã—ã¦å¿…è¦ãªç‰¹å®šæƒ…å ±ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/index.rst:13 msgid "If you're new to Ansible, or new to using Ansible for network automation, start with the :ref:`network_getting_started`." msgstr "Ansible ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã‚„ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç®¡ç†ã« Ansible ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€æœ€åˆã«ã€Œ:ref:`network_getting_started`ã€ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:5 msgid "Ansible Network Examples" msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ä¾‹" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:7 msgid "This document describes some examples of using Ansible to manage your network infrastructure." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’管ç†ã™ã‚‹ä¾‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:15 msgid "This example requires the following:" msgstr "ã“ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:17 msgid "**Ansible 2.10** (or higher) installed. See :ref:`intro_installation_guide` for more information." msgstr "**Ansible 2.10** (ã¾ãŸã¯ãれ以上) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„る。詳細ã¯ã€Œ:ref:`intro_installation_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:18 msgid "One or more network devices that are compatible with Ansible." msgstr "Ansible ã¨äº’æ›æ€§ãŒã‚ã‚‹ 1 ã¤ä»¥ä¸Šãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:19 msgid "Basic understanding of YAML :ref:`yaml_syntax`." msgstr "YAML :ref:`yaml_syntax` ã®åŸºæœ¬çŸ¥è­˜" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:20 msgid "Basic understanding of Jinja2 templates. See :ref:`playbooks_templating` for more information." msgstr "Jinja2 テンプレートã®åŸºæœ¬çš„ãªç†è§£ã€‚詳細ã¯ã€Œ:ref:`playbooks_templating`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:21 msgid "Basic Linux command line use." msgstr "基本的㪠Linux コマンドラインã®ä½¿ç”¨ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:22 msgid "Basic knowledge of network switch & router configurations." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¤ãƒƒãƒãŠã‚ˆã³ãƒ«ãƒ¼ã‚¿ãƒ¼è¨­å®šã«é–¢ã™ã‚‹åŸºæœ¬çŸ¥è­˜ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:26 msgid "Groups and variables in an inventory file" msgstr "インベントリーファイルã®ã‚°ãƒ«ãƒ¼ãƒ—ãŠã‚ˆã³å¤‰æ•°" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:28 msgid "An ``inventory`` file is a YAML or INI-like configuration file that defines the mapping of hosts into groups." msgstr "``inventory`` ファイルã¯ã€ãƒ›ã‚¹ãƒˆã‹ã‚‰ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®ãƒžãƒƒãƒ”ングを定義ã™ã‚‹ YAML ã¾ãŸã¯ INI ã®ã‚ˆã†ãªè¨­å®šãƒ•ァイルã§ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:30 msgid "In our example, the inventory file defines the groups ``eos``, ``ios``, ``vyos`` and a \"group of groups\" called ``switches``. Further details about subgroups and inventory files can be found in the :ref:`Ansible inventory Group documentation `." msgstr "ã“ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㯠``eos``ã€``ios``ã€ãŠã‚ˆã³ ``vyos`` ã¨ã€``switches`` ã¨å‘¼ã°ã‚Œã‚‹ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚°ãƒ«ãƒ¼ãƒ—ã€ã‚’定義ã—ã¾ã™ã€‚サブグループã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®è©³ç´°ã¯ã€Œ:ref:`Ansible inventory Group documentation `ã€ã«ã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:32 msgid "Because Ansible is a flexible tool, there are a number of ways to specify connection information and credentials. We recommend using the ``[my_group:vars]`` capability in your inventory file." msgstr "Ansible ã¯æŸ”軟ãªãƒ„ールã§ã‚ã‚‹ãŸã‚ã€æŽ¥ç¶šæƒ…å ±ãŠã‚ˆã³èªè¨¼æƒ…報を指定ã™ã‚‹æ–¹æ³•ã¯è¤‡æ•°ã‚りã¾ã™ã€‚インベントリーファイル㧠``[my_group:vars]`` 機能を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:81 msgid "If you use ssh-agent, you do not need the ``ansible_password`` lines. If you use ssh keys, but not ssh-agent, and you have multiple keys, specify the key to use for each connection in the ``[group:vars]`` section with ``ansible_ssh_private_key_file=/path/to/correct/key``. For more information on ``ansible_ssh_`` options see :ref:`behavioral_parameters`." msgstr "ssh-agent を使用ã™ã‚‹å ´åˆã€``ansible_password`` 行ã¯å¿…è¦ã‚りã¾ã›ã‚“。ssh-agent ã§ãªã ssh キーを使用ã—ã€éµãŒè¤‡æ•°ã‚ã‚‹å ´åˆã¯ã€``ansible_ssh_private_key_file=/path/to/correct/key`` ã® ``[group:vars]`` セクションã§ã€å„接続ã«ä½¿ç”¨ã™ã‚‹ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã€‚``ansible_ssh_`` オプションã®è©³ç´°ã¯ã€ã€Œ:ref:`behavioral_parameters`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:85 msgid "Never store passwords in plain text." msgstr "プレーンテキストã«ãƒ‘スワードをä¿å­˜ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:88 msgid "Ansible vault for password encryption" msgstr "パスワード暗å·åŒ–用㮠Ansible Vault" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:90 msgid "The \"Vault\" feature of Ansible allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plain text in your playbooks or roles. These vault files can then be distributed or placed in source control. See :ref:`playbooks_vault` for more information." msgstr "Ansible ã®ã€ŒVaultã€æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã¨ã€ãƒ‘スワードやキーãªã©ã®æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ã€Playbook やロールã®ãƒ—レーンテキストã¨ã—ã¦ã§ã¯ãªãã€æš—å·åŒ–ã•れãŸãƒ•ァイルã«ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã® Vault ファイルã¯ã€ã‚½ãƒ¼ã‚¹åˆ¶å¾¡ã«é…布ã¾ãŸã¯é…ç½®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`playbooks_vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:92 msgid "Here's what it would look like if you specified your SSH passwords (encrypted with Ansible Vault) among your variables:" msgstr "変数内㫠SSH パスワード (Ansible Vault ã§æš—å·åŒ–) を指定ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:108 msgid "Common inventory variables" msgstr "共通ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:110 msgid "The following variables are common for all platforms in the inventory, though they can be overwritten for a particular inventory group or host." msgstr "以下ã®å¤‰æ•°ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒ—ラットフォームã«å…±é€šã§ã™ãŒã€ç‰¹å®šã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ãƒ›ã‚¹ãƒˆã«ã¤ã„ã¦ä¸Šæ›¸ãã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_connection" msgstr "ansible_connection" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:114 msgid "Ansible uses the ansible-connection setting to determine how to connect to a remote device. When working with Ansible Networking, set this to an appropriate network connection option, such as``ansible.netcommon.network_cli``, so Ansible treats the remote node as a network device with a limited execution environment. Without this setting, Ansible would attempt to use ssh to connect to the remote and execute the Python script on the network device, which would fail because Python generally isn't available on network devices." msgstr "Ansible 㯠ansible-connection 設定を使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã¸ã®æŽ¥ç¶šæ–¹æ³•を決定ã—ã¾ã™ã€‚Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’使用ã™ã‚‹å ´åˆã¯ã€é©åˆ‡ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã‚ªãƒ—ション (``ansible.netcommon.network_cli`` ãªã©) ã«è¨­å®šã—ã¦ã€Ansible ãŒå®Ÿè¡Œç’°å¢ƒãŒåˆ¶é™ã•れãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã‚’扱ã†ã‚ˆã†ã«ã—ã¾ã™ã€‚ã“ã®è¨­å®šãŒãªã„ã¨ã€Ansible 㯠ssh を使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã«æŽ¥ç¶šã—ã€Python スクリプトをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§å®Ÿè¡Œã—よã†ã¨ã—ã¾ã™ãŒã€Python ã¯ä¸€èˆ¬çš„ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ä½¿ç”¨ã§ããªã„ãŸã‚失敗ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_network_os" msgstr "ansible_network_os" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:116 msgid "Informs Ansible which Network platform this hosts corresponds to. This is required when using the ``ansible.netcommon.*`` connection options." msgstr "ã“ã®ãƒ›ã‚¹ãƒˆã«å¯¾å¿œã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームを Ansible ã«é€šçŸ¥ã—ã¾ã™ã€‚ã“れã¯ã€``ansible.netcommon.*`` 接続オプションを使用ã™ã‚‹å ´åˆã«å¿…è¦ã§ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_user" msgstr "ansible_user" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:117 msgid "The user to connect to the remote device (switch) as. Without this the user that is running ``ansible-playbook`` would be used. Specifies which user on the network device the connection" msgstr "リモートデãƒã‚¤ã‚¹ (スイッãƒ) ã«æŽ¥ç¶šã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚ã“れãŒãªã„ã¨ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ``ansible-playbook`` を実行ã—ã¦ã„るユーザーã«ä½¿ç”¨ã•れã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŽ¥ç¶šã™ã‚‹ã‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_password" msgstr "ansible_password" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:120 msgid "The corresponding password for ``ansible_user`` to log in as. If not specified SSH key will be used." msgstr "``ansible_user`` ã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã‚ã®ãƒ‘スワードã§ã™ã€‚指定ã—ãªã„å ´åˆã¯ã€SSH キーãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_become" msgstr "ansible_become" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:122 msgid "If enable mode (privilege mode) should be used, see the next section." msgstr "Enable モード (特権モード) を使用ã™ã‚‹å ´åˆã¯ã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst msgid "ansible_become_method" msgstr "ansible_become_method" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:124 msgid "Which type of `become` should be used, for ``network_cli`` the only valid choice is ``enable``." msgstr "ã©ã®ã‚¿ã‚¤ãƒ— `become` を使用ã™ã¹ãã‹ã€‚``network_cli`` ã§ã¯ã€æœ‰åйãªé¸æŠžã¯ ``enable`` ã®ã¿ã§ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:127 msgid "Privilege escalation" msgstr "æ¨©é™æ˜‡æ ¼" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:129 msgid "Certain network platforms, such as Arista EOS and Cisco IOS, have the concept of different privilege modes. Certain network modules, such as those that modify system state including users, will only work in high privilege states. Ansible supports ``become`` when using ``connection: ansible.netcommon.network_cli``. This allows privileges to be raised for the specific tasks that need them. Adding ``become: yes`` and ``become_method: enable`` informs Ansible to go into privilege mode before executing the task, as shown here:" msgstr "Arista EOS ã‚„ Cisco IOS ãªã©ã®ç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã«ã¯ã€ç•°ãªã‚‹ç‰¹æ¨©ãƒ¢ãƒ¼ãƒ‰ã®æ¦‚念ãŒã‚りã¾ã™ã€‚ユーザーをå«ã‚€ã‚·ã‚¹ãƒ†ãƒ çŠ¶æ…‹ã‚’å¤‰æ›´ã™ã‚‹ã‚ˆã†ãªç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€é«˜ç‰¹æ¨©çŠ¶æ…‹ã§ã®ã¿å‹•作ã—ã¾ã™ã€‚Ansible ã¯ã€``connection: ansible.netcommon.network_cli`` ã®ä½¿ç”¨æ™‚ã«ã€``become`` をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ¨©é™ã‚’å¿…è¦ã¨ã™ã‚‹ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦æ¨©é™ã‚’設定ã§ãã¾ã™ã€‚次ã«ç¤ºã™ã‚ˆã†ã«ã€``become: yes`` ãŠã‚ˆã³ ``become_method: enable`` を追加ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å‰ã«ç‰¹æ¨©ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚‹ã‚ˆã†ã« Ansible ã«é€šçŸ¥ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:139 msgid "For more information, see the :ref:`using become with network modules` guide." msgstr "詳細ã¯ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ become ã®ä½¿ç”¨`ã€ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:143 msgid "Jump hosts" msgstr "ジャンプホスト" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:145 msgid "If the Ansible Controller does not have a direct route to the remote device and you need to use a Jump Host, please see the :ref:`Ansible Network Proxy Command ` guide for details on how to achieve this." msgstr "Ansible Controller ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã¸ã®ç›´æŽ¥ãƒ«ãƒ¼ãƒˆãŒãªãã€ã‚¸ãƒ£ãƒ³ãƒ—ホストを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã“れを実ç¾ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã€ã€Œ:ref:`Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ロキシーコマンド `ã€ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:148 msgid "Example 1: collecting facts and creating backup files with a playbook" msgstr "例 1: Playbook ã§ãƒ•ァクトをåŽé›†ã—ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã®ä½œæˆ" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:150 msgid "Ansible facts modules gather system information 'facts' that are available to the rest of your playbook." msgstr "Ansible ファクトモジュールã¯ã€ä»–ã® Playbook ã§åˆ©ç”¨å¯èƒ½ãªã‚·ã‚¹ãƒ†ãƒ æƒ…å ±ã®ã€Œãƒ•ァクトã€ã‚’åŽé›†ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:152 msgid "Ansible Networking ships with a number of network-specific facts modules. In this example, we use the ``_facts`` modules :ref:`arista.eos.eos_facts `, :ref:`cisco.ios.ios_facts ` and :ref:`vyos.vyos.vyos_facts ` to connect to the remote networking device. As the credentials are not explicitly passed with module arguments, Ansible uses the username and password from the inventory file." msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å›ºæœ‰ã®ãƒ•ァクトモジュールãŒã„ãã¤ã‹ä»˜å±žã—ã¦ã„ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``_facts`` モジュール (:ref:`arista.eos.eos_facts `ã€:ref:`cisco.ios.ios_facts `ã€ãŠã‚ˆã³ :ref:`vyos.vyos.vyos_facts `) を使用ã—ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã¾ã™ã€‚èªè¨¼æƒ…å ±ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã¨ã¨ã‚‚ã«æ˜Žç¤ºçš„ã«æ¸¡ã•れãªã„ãŸã‚ã€Ansible ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã‹ã‚‰ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードを使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:154 msgid "Ansible's \"Network Fact modules\" gather information from the system and store the results in facts prefixed with ``ansible_net_``. The data collected by these modules is documented in the `Return Values` section of the module docs, in this case :ref:`arista.eos.eos_facts ` and :ref:`vyos.vyos.vyos_facts `. We can use the facts, such as ``ansible_net_version`` late on in the \"Display some facts\" task." msgstr "Ansibleã®ã€Œãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァクトモジュールã€ã¯ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰æƒ…報をåŽé›†ã—ã€``ansible_net_`` ã®æŽ¥é ­è¾žãŒä»˜ã„ãŸãƒ•ァクトã«çµæžœã‚’æ ¼ç´ã—ã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦åŽé›†ã•れるデータã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã® `Return Values` セクション (ã“ã®å ´åˆã¯ :ref:`arista.eos.eos_facts ` ãŠã‚ˆã³ :ref:`vyos.vyos.vyos_facts `) ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚``ansible_net_version`` ãªã©ã®ãƒ•ァクトã¯ã€ã€ŒDisplay some facts (一部ã®ãƒ•ァクトを表示ã™ã‚‹)ã€ã‚¿ã‚¹ã‚¯ã®å¾ŒåŠã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:156 msgid "To ensure we call the correct mode (``*_facts``) the task is conditionally run based on the group defined in the inventory file, for more information on the use of conditionals in Ansible Playbooks see :ref:`the_when_statement`." msgstr "æ­£ã—ã„モード (``*_facts``) を呼ã³å‡ºã™ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«å®šç¾©ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ãŒæ¡ä»¶ä»˜ãã§å®Ÿè¡Œã•れã¾ã™ã€‚Ansible Playbook ã§ã®æ¡ä»¶ä»˜ã使用ã®è©³ç´°ã¯ã€ã€Œ:ref:`the_when_statement`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:158 msgid "In this example, we will create an inventory file containing some network switches, then run a playbook to connect to the network devices and return some information about them." msgstr "ã“ã®ä¾‹ã§ã¯ã€ä¸€éƒ¨ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¤ãƒƒãƒã‚’å«ã‚€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを作æˆã—ã¦ã‹ã‚‰ã€Playbook を実行ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã€ãã®æƒ…報を返ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:161 msgid "Step 1: Creating the inventory" msgstr "ステップ 1: インベントリーã®ä½œæˆ" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:163 msgid "First, create a file called ``inventory``, containing:" msgstr "ã¾ãšã€ä»¥ä¸‹ã‚’å«ã‚€ ``inventory`` ã¨ã„ã†åå‰ã®ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:183 msgid "Step 2: Creating the playbook" msgstr "ステップ 2: Playbook ã®ä½œæˆ" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:185 msgid "Next, create a playbook file called ``facts-demo.yml`` containing the following:" msgstr "次ã«ã€ä»¥ä¸‹ã‚’å«ã‚€ ``facts-demo.yml`` ã¨ã„ã†åå‰ã® Playbook ファイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:285 msgid "Step 3: Running the playbook" msgstr "ステップ 3: Playbook ã®å®Ÿè¡Œ" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:287 msgid "To run the playbook, run the following from a console prompt:" msgstr "Playbook を実行ã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ—ロンプトã‹ã‚‰ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:293 msgid "This should return output similar to the following:" msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¿”ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:303 msgid "Step 4: Examining the playbook results" msgstr "手順 4: Playbook ã®çµæžœã®æ¤œè¨¼" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:305 msgid "Next, look at the contents of the file we created containing the switch facts:" msgstr "次ã«ã€ã‚¹ã‚¤ãƒƒãƒãƒ•ァクトをå«ã‚€ä½œæˆã—ãŸãƒ•ァイルã®å†…容を確èªã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:311 msgid "You can also look at the backup files:" msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを確èªã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:318 msgid "If `ansible-playbook` fails, please follow the debug steps in :ref:`network_debug_troubleshooting`." msgstr "`ansible-playbook` ãŒå¤±æ•—ã™ã‚‹å ´åˆã¯ã€:ref:`network_debug_troubleshooting` ã®ãƒ‡ãƒãƒƒã‚°æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:324 msgid "Example 2: simplifying playbooks with platform-independent modules" msgstr "例 2: プラットフォームã«ä¾å­˜ã—ãªã„モジュールを使用ã—㟠Playbook ã®å˜ç´”化" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:326 msgid "(This example originally appeared in the `Deep Dive on cli_command for Network Automation `_ blog post by Sean Cavanaugh -`@IPvSean `_)." msgstr "(ã“ã®ä¾‹ã¯ã€å…ƒã€…ã€Sean Cavanaugh (`@IPvSean `_) æ°ãŒæŠ•稿ã—ãŸãƒ–ログ「`Deep Dive on cli_command for Network Automation `_ã€ã§ç´¹ä»‹ã•れã¾ã—ãŸã€‚)" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:328 msgid "If you have two or more network platforms in your environment, you can use the platform-independent modules to simplify your playbooks. You can use platform-independent modules such as ``ansible.netcommon.cli_command`` or ``ansible.netcommon.cli_config`` in place of the platform-specific modules such as ``arista.eos.eos_config``, ``cisco.ios.ios_config``, and ``junipernetworks.junos.junos_config``. This reduces the number of tasks and conditionals you need in your playbooks." msgstr "環境内ã«è¤‡æ•°ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームãŒã‚ã‚‹å ´åˆã¯ã€ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„モジュールを使用ã—ã¦ã€Playbook を簡素化ã§ãã¾ã™ã€‚``arista.eos.eos_config``ã€``cisco.ios.ios_config``ã€``junipernetworks.junos.junos_config`` ãªã©ã®ãƒ—ラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä»£ã‚りã«ã€``ansible.netcommon.cli_command``ã€``ansible.netcommon.cli_config`` ãªã©ã®ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„モジュールを使用ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Playbook ã«å¿…è¦ãªã‚¿ã‚¹ã‚¯ãŠã‚ˆã³æ¡ä»¶ã®æ•°ãŒæ¸›ã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:331 msgid "Platform-independent modules require the :ref:`ansible.netcommon.network_cli ` connection plugin." msgstr "プラットフォームã«ä¾å­˜ã—ãªã„モジュールã«ã¯ã€:ref:`ansible.netcommon.network_cli ` connection プラグインãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:335 msgid "Sample playbook with platform-specific modules" msgstr "プラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å«ã‚€ Playbook ã®ã‚µãƒ³ãƒ—ル" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:337 msgid "This example assumes three platforms, Arista EOS, Cisco NXOS, and Juniper JunOS. Without the platform-independent modules, a sample playbook might contain the following three tasks with platform-specific commands:" msgstr "ã“ã®ä¾‹ã§ã¯ã€Arista EOSã€Cisco NXOSã€Juniper JunOS ã® 3 ã¤ã®ãƒ—ラットフォームを想定ã—ã¦ã„ã¾ã™ã€‚プラットフォームã«ä¾å­˜ã—ãªã„モジュールを使用ã—ãªã„ã¨ã€ã‚µãƒ³ãƒ—ル Playbook ã«ã¯ãƒ—ラットフォーム固有ã®ã‚³ãƒžãƒ³ãƒ‰ã¨å…±ã«ã€ä»¥ä¸‹ã® 3 ã¤ã®ã‚¿ã‚¹ã‚¯ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:358 msgid "Simplified playbook with ``cli_command`` platform-independent module" msgstr "``cli_command`` プラットフォームã«ä¾å­˜ã—ãªã„モジュールを使用ã—㟠Playbook ã®ç°¡ç´ åŒ–" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:360 msgid "You can replace these platform-specific modules with the platform-independent ``ansible.netcommon.cli_command`` module as follows:" msgstr "ã“れらã®ãƒ—ラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„ ``ansible.netcommon.cli_command`` モジュールã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:407 msgid "If you use groups and group_vars by platform type, this playbook can be further simplified to :" msgstr "プラットフォームタイプ別ã«ã‚°ãƒ«ãƒ¼ãƒ—ãŠã‚ˆã³ group_vars を使用ã™ã‚‹å ´åˆã¯ã€ã“ã® Playbook ã‚’ã•らã«ç°¡å˜ã«ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:423 msgid "You can see a full example of this using group_vars and also a configuration backup example at `Platform-independent examples `_." msgstr "group_vars ã®å®Œå…¨ä¾‹ã¨è¨­å®šãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ä¾‹ã¯ã€`Platform-independent examples `_ ã§ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:426 msgid "Using multiple prompts with the ``ansible.netcommon.cli_command``" msgstr "``ansible.netcommon.cli_command`` ã‚’å«ã‚€è¤‡æ•°ã®ãƒ—ロンプトã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:428 msgid "The ``ansible.netcommon.cli_command`` also supports multiple prompts." msgstr "``ansible.netcommon.cli_command`` ã¯ã€è¤‡æ•°ã®ãƒ—ロンプトもサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:449 msgid "See the :ref:`ansible.netcommon.cli_command ` for full documentation on this command." msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ã€Œ:ref:`ansible.netcommon.cli_command `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:453 msgid "Implementation Notes" msgstr "実装ã«é–¢ã™ã‚‹æ³¨æ„点" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:457 msgid "Demo variables" msgstr "デモ変数" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:459 msgid "Although these tasks are not needed to write data to disk, they are used in this example to demonstrate some methods of accessing facts about the given devices or a named host." msgstr "ã“れらã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ‡ã‚£ã‚¹ã‚¯ã«ãƒ‡ãƒ¼ã‚¿ã‚’書ã込む必è¦ã¯ã‚りã¾ã›ã‚“ãŒã€ã“ã®ä¾‹ã§ã¯ã€ç‰¹å®šã®ãƒ‡ãƒã‚¤ã‚¹ã¾ãŸã¯åå‰ä»˜ãホストã®ãƒ•ァクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹æ–¹æ³•を実証ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:461 msgid "Ansible ``hostvars`` allows you to access variables from a named host. Without this we would return the details for the current host, rather than the named host." msgstr "Ansible ``hostvars`` を使用ã™ã‚‹ã¨ã€åå‰ä»˜ãホストã‹ã‚‰å¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れを使用ã—ãªã„ã¨ã€åå‰ä»˜ãホストã§ã¯ãªãã€ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆã®è©³ç´°ãŒè¿”ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:463 msgid "For more information, see :ref:`magic_variables_and_hostvars`." msgstr "詳細情報ã¯ã€ã€Œ:ref:`magic_variables_and_hostvars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:466 msgid "Get running configuration" msgstr "実行中ã®è¨­å®šã®å–å¾—" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:468 msgid "The :ref:`arista.eos.eos_config ` and :ref:`vyos.vyos.vyos_config ` modules have a ``backup:`` option that when set will cause the module to create a full backup of the current ``running-config`` from the remote device before any changes are made. The backup file is written to the ``backup`` folder in the playbook root directory. If the directory does not exist, it is created." msgstr ":ref:`arista.eos.eos_config ` モジュールãŠã‚ˆã³ :ref:`vyos.vyos.vyos_config ` モジュールã«ã¯ã€è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€å¤‰æ›´ãŒè¡Œã‚れるå‰ã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ç¾åœ¨ã® ``running-config`` ã®ãƒ•ルãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を作æˆã™ã‚‹ ``backup:`` オプションãŒã‚りã¾ã™ã€‚ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã¯ã€Playbook ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``backup`` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«æ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ä½œæˆã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:470 msgid "To demonstrate how we can move the backup file to a different location, we register the result and move the file to the path stored in ``backup_path``." msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを別ã®å ´æ‰€ã«ç§»å‹•ã™ã‚‹æ–¹æ³•を実証ã™ã‚‹ãŸã‚ã«ã€çµæžœã‚’登録ã—ã€ãƒ•ァイルを ``backup_path`` ã«ä¿å­˜ã•れã¦ã„るパスã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:472 msgid "Note that when using variables from tasks in this way we use double quotes (``\"``) and double curly-brackets (``{{...}}`` to tell Ansible that this is a variable." msgstr "ã“ã®æ–¹æ³•ã§ã‚¿ã‚¹ã‚¯ã®å¤‰æ•°ã‚’使用ã™ã‚‹å ´åˆã¯ã€Ansible ã«ã“れãŒå¤‰æ•°ã§ã‚ã‚‹ã“ã¨ã‚’ä¼ãˆã‚‹ãŸã‚ã«ã€äºŒé‡å¼•用符 (``\"``) ã¨äºŒé‡ä¸­æ‹¬å¼§ (``{{...}}``) を使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:475 msgid "Troubleshooting" msgstr "トラブルシューティング" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:477 msgid "If you receive an connection error please double check the inventory and playbook for typos or missing lines. If the issue still occurs follow the debug steps in :ref:`network_debug_troubleshooting`." msgstr "接続エラーをå—ã‘å–ã£ãŸå ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ Playbook ã§èª¤å­—ã¾ãŸã¯æ¬ è½ã—ã¦ã„る行ãŒãªã„ã‹å†ç¢ºèªã—ã¦ãã ã•ã„。å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€:ref:`network_debug_troubleshooting` ã®ãƒ‡ãƒãƒƒã‚°æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:481 msgid ":ref:`network_guide`" msgstr ":ref:`network_guide`" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:482 msgid ":ref:`intro_inventory`" msgstr ":ref:`intro_inventory`" #: ../../rst/network/user_guide/network_best_practices_2.5.rst:483 msgid ":ref:`Keeping vaulted variables visible `" msgstr ":ref:`Keeping vaulted variables visible `" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:5 msgid "Network Debug and Troubleshooting Guide" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒãƒƒã‚°ãŠã‚ˆã³ãƒˆãƒ©ãƒ–ルシューティングガイド" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:7 msgid "This section discusses how to debug and troubleshoot network modules in Ansible." msgstr "本セクションã§ã¯ã€Ansible ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’デãƒãƒƒã‚°ã—ã€ãƒˆãƒ©ãƒ–ãƒ«ã‚·ãƒ¥ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’è¡Œã†æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:14 msgid "How to troubleshoot" msgstr "ãƒˆãƒ©ãƒ–ãƒ«ã‚·ãƒ¥ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®æ–¹æ³•" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:16 msgid "Ansible network automation errors generally fall into one of the following categories:" msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化エラーã¯é€šå¸¸ã€ä»¥ä¸‹ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®ã„ãšã‚Œã‹ã«åˆ†é¡žã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst msgid "Authentication issues" msgstr "èªè¨¼ã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:19 msgid "Not correctly specifying credentials" msgstr "èªè¨¼æƒ…報を正ã—ãæŒ‡å®šã§ããªã„" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:20 msgid "Remote device (network switch/router) not falling back to other other authentication methods" msgstr "リモートデãƒã‚¤ã‚¹ (ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¤ãƒƒãƒ/ルーター) ãŒä»–ã®èªè¨¼æ–¹æ³•ã«ãƒ•ォールãƒãƒƒã‚¯ã—ãªã„" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:21 msgid "SSH key issues" msgstr "SSH キーã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:439 msgid "Timeout issues" msgstr "タイムアウトã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:23 msgid "Can occur when trying to pull a large amount of data" msgstr "大é‡ã®ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—よã†ã¨ã™ã‚‹ã¨ç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚ã‚‹" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:24 msgid "May actually be masking a authentication issue" msgstr "èªè¨¼ã®å•題を実際ã«ãƒžã‚¹ã‚¯ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:600 msgid "Playbook issues" msgstr "Playbook ã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:26 msgid "Use of ``delegate_to``, instead of ``ProxyCommand``. See :ref:`network proxy guide ` for more information." msgstr "``ProxyCommand`` ã®ä»£ã‚り㫠``delegate_to`` を使用ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ロキシーガイド `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:28 msgid "``unable to open shell``" msgstr "``unable to open shell``" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:30 msgid "The ``unable to open shell`` message means that the ``ansible-connection`` daemon has not been able to successfully talk to the remote network device. This generally means that there is an authentication issue. See the \"Authentication and connection issues\" section in this document for more information." msgstr "``unable to open shell`` メッセージã¯ã€``ansible-connection`` デーモンãŒãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨æ­£å¸¸ã«é€šä¿¡ã§ããªã‹ã£ãŸã“ã¨ã‚’示ã—ã¾ã™ã€‚ã“れã¯é€šå¸¸ã€èªè¨¼ã®å•題ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã€Œèªè¨¼ã¨æŽ¥ç¶šã®å•題ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:37 msgid "Enabling Networking logging and how to read the logfile" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ­ã‚®ãƒ³ã‚°ã®æœ‰åŠ¹åŒ–ã¨ãƒ­ã‚°ãƒ•ァイルã®èª­ã¿å–り方法" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:39 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:96 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:156 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:199 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:256 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:294 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:321 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:426 msgid "**Platforms:** Any" msgstr "**プラットフォーム:** ä»»æ„" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:41 msgid "Ansible includes logging to help diagnose and troubleshoot issues regarding Ansible Networking modules." msgstr "Ansible ã«ã¯ã€Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢ã™ã‚‹å•題ã®è¨ºæ–­ã¨ãƒˆãƒ©ãƒ–ルシューティングã«å½¹ç«‹ã¤ãƒ­ã‚®ãƒ³ã‚°ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:43 msgid "Because logging is very verbose, it is disabled by default. It can be enabled with the :envvar:`ANSIBLE_LOG_PATH` and :envvar:`ANSIBLE_DEBUG` options on the ansible-controller, that is the machine running ``ansible-playbook``." msgstr "ロギングã¯éžå¸¸ã«è©³ç´°ãªãŸã‚ã€ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ã“れã¯ã€ansible-controller ã® :envvar:`ANSIBLE_LOG_PATH` オプションãŠã‚ˆã³ :envvar:`ANSIBLE_DEBUG` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æœ‰åйã«ã§ãã¾ã™ã€‚ã“れã¯ã€``ansible-playbook`` を実行ã—ã¦ã„るマシンã§ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:45 msgid "Before running ``ansible-playbook``, run the following commands to enable logging::" msgstr "``ansible-playbook`` を実行ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ãƒ­ã‚®ãƒ³ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:55 msgid "After Ansible has finished running you can inspect the log file which has been created on the ansible-controller:" msgstr "Ansible ã®å®Ÿè¡ŒãŒå®Œäº†ã—ãŸã‚‰ã€ansible-controller ã§ä½œæˆã•れãŸãƒ­ã‚°ãƒ•ァイルを確èªã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:73 msgid "From the log notice:" msgstr "ã“ã®ãƒ­ã‚°é€šçŸ¥ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:75 msgid "``p=28990`` Is the PID (Process ID) of the ``ansible-connection`` process" msgstr "``p=28990`` ``ansible-connection`` プロセス㮠PID (プロセス ID) ã§ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:76 msgid "``u=fred`` Is the user `running` ansible, not the remote-user you are attempting to connect as" msgstr "``u=fred`` ansible ã‚’ `実行` ã—ã¦ã„るユーザーã§ã™ (接続ã—よã†ã¨ã—ã¦ã„るリモートユーザーã§ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:77 msgid "``creating new control socket for host veos01:22 as user admin`` host:port as user" msgstr "``ホスト veos01:22 ã®æ–°ã—ã„コントロールソケットをユーザー管ç†è€…`` ユーザーã¨ã—㦠host:port" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:78 msgid "``control socket path is`` location on disk where the persistent connection socket is created" msgstr "``control socket path is`` 永続接続ソケットãŒä½œæˆã•れるディスクã®å ´æ‰€" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:79 msgid "``using connection plugin network_cli`` Informs you that persistent connection is being used" msgstr "``using connection plugin network_cli`` 永続接続ãŒä½¿ç”¨ã•れã¦ã„ã‚‹ã“ã¨ãŒé€šçŸ¥ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:80 msgid "``connection established to veos01 in 0:00:22.580626`` Time taken to obtain a shell on the remote device" msgstr "``connection established to veos01 in 0:00:22.580626`` リモートデãƒã‚¤ã‚¹ã§ã‚·ã‚§ãƒ«ã®å–å¾—ã«ã‹ã‹ã£ãŸæ™‚é–“" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:83 msgid "Port None ``creating new control socket for host veos01:None``" msgstr "ãƒãƒ¼ãƒˆãªã— ``ホスト veos01:22 ã®æ–°ã—ã„コントロールソケットをユーザー管ç†è€…``" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:85 msgid "If the log reports the port as ``None`` this means that the default port is being used. A future Ansible release will improve this message so that the port is always logged." msgstr "ログã§ãƒãƒ¼ãƒˆãŒ ``None`` ã¨ã—ã¦å ±å‘Šã•れる場åˆã¯ã€ãƒ‡ãƒ•ォルトã®ãƒãƒ¼ãƒˆãŒä½¿ç”¨ã•れã¦ã„ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚今後㮠Ansible リリースã§ã¯ã€ãƒãƒ¼ãƒˆãŒå¸¸ã«ãƒ­ã‚°ã«è¨˜éŒ²ã•れるよã†ã«ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæ”¹å–„ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:88 msgid "Because the log files are verbose, you can use grep to look for specific information. For example, once you have identified the ``pid`` from the ``creating new control socket for host`` line you can search for other connection log entries::" msgstr "ログファイルã¯å†—é•·ã§ã‚ã‚‹ãŸã‚ã€grepを使用ã—ã¦ç‰¹å®šã®æƒ…報を検索ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``creating new control socket for host`` 行ã‹ã‚‰ ``pid`` を特定ã—ãŸã‚‰ã€ä»–ã®æŽ¥ç¶šãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æ¤œç´¢ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:94 msgid "Enabling Networking device interaction logging" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®å¯¾è©±ãƒ­ã‚®ãƒ³ã‚°ã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:98 msgid "Ansible includes logging of device interaction in the log file to help diagnose and troubleshoot issues regarding Ansible Networking modules. The messages are logged in the file pointed to by the ``log_path`` configuration option in the Ansible configuration file or by setting the :envvar:`ANSIBLE_LOG_PATH`." msgstr "Ansible ã«ã¯ã€Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢ã™ã‚‹å•題ã®è¨ºæ–­ãŠã‚ˆã³ãƒˆãƒ©ãƒ–ルシューティングã«å½¹ç«‹ã¤ã€ãƒ­ã‚°ãƒ•ァイル内ã®ãƒ‡ãƒã‚¤ã‚¹ã®å¯¾è©±ã®ãƒ­ã‚°ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€Ansible 設定ファイル㮠``log_path`` è¨­å®šã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れã¦ã„るファイルã«è¨˜éŒ²ã•れるã‹ã€:envvar:`ANSIBLE_LOG_PATH` を設定ã™ã‚‹ã¨è¨˜éŒ²ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:103 msgid "The device interaction messages consist of command executed on the target device and the returned response. Since this log data can contain sensitive information including passwords in plain text it is disabled by default. Additionally, in order to prevent accidental leakage of data, a warning will be shown on every task with this setting enabled, specifying which host has it enabled and where the data is being logged." msgstr "デãƒã‚¤ã‚¹ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‡ãƒã‚¤ã‚¹ä¸Šã§å®Ÿè¡Œã•れãŸã‚³ãƒžãƒ³ãƒ‰ã¨è¿”ã•れãŸå¿œç­”ã§æ§‹æˆã•れã¾ã™ã€‚ã“ã®ãƒ­ã‚°ãƒ‡ãƒ¼ã‚¿ã«ã¯ã€ãƒ‘スワードãªã©ã®æ©Ÿå¯†æƒ…å ±ãŒãƒ—レーンテキストã®å½¢å¼ã§å«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ã¾ãŸã€èª¤ã£ã¦ãƒ‡ãƒ¼ã‚¿ãŒæ¼æ´©ã—ãªã„よã†ã«ã€ã“ã®è¨­å®šãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«è­¦å‘ŠãŒè¡¨ç¤ºã•ã‚Œã€æœ‰åйã«ãªã£ã¦ã„るホストã¨ãƒ‡ãƒ¼ã‚¿ãŒè¨˜éŒ²ã•ã‚Œã‚‹å ´æ‰€ãŒæŒ‡å®šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:108 msgid "Be sure to fully understand the security implications of enabling this option. The device interaction logging can be enabled either globally by setting in configuration file or by setting environment or enabled on per task basis by passing a special variable to the task." msgstr "ã“ã®ã‚ªãƒ—ションを有効ã«ã—ãŸå ´åˆã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã¸ã®å½±éŸ¿ã‚’完全ã«ç†è§£ã—ã¦ãã ã•ã„。デãƒã‚¤ã‚¹å¯¾è©±ãƒ­ã‚®ãƒ³ã‚°ã¯ã€è¨­å®šãƒ•ァイルã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¨­å®šã™ã‚‹ã‹ã€ç’°å¢ƒã‚’設定ã—ã¦æœ‰åйã«ã™ã‚‹ã‹ã€ã¾ãŸã¯ç‰¹æ®Šãªå¤‰æ•°ã‚’ã‚¿ã‚¹ã‚¯ã«æ¸¡ã™ã“ã¨ã§ã‚¿ã‚¹ã‚¯ã”ã¨ã«æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:110 msgid "Before running ``ansible-playbook`` run the following commands to enable logging:" msgstr "``ansible-playbook`` を実行ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ãƒ­ã‚®ãƒ³ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:118 msgid "Enable device interaction logging for a given task" msgstr "特定ã®ã‚¿ã‚¹ã‚¯ã®ãƒ‡ãƒã‚¤ã‚¹å¯¾è©±ãƒ­ã‚°ã‚’有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:130 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:756 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:823 msgid "To make this a global setting, add the following to your ``ansible.cfg`` file:" msgstr "ã“ã®è¨­å®šã‚’グローãƒãƒ«ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®è¨­å®šã‚’ ``ansible.cfg`` ファイルã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:137 msgid "or enable the environment variable `ANSIBLE_PERSISTENT_LOG_MESSAGES`:" msgstr "ã¾ãŸã¯ã€ç’°å¢ƒå¤‰æ•° `ANSIBLE_PERSISTENT_LOG_MESSAGES` を有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:144 msgid "If the task is failing on connection initialization itself, you should enable this option globally. If an individual task is failing intermittently this option can be enabled for that task itself to find the root cause." msgstr "ã‚¿ã‚¹ã‚¯è‡ªä½“ãŒæŽ¥ç¶šã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションをグローãƒãƒ«ã«æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚個々ã®ã‚¿ã‚¹ã‚¯ãŒæ–­ç¶šçš„ã«å¤±æ•—ã™ã‚‹å ´åˆã¯ã€ãã®ã‚¿ã‚¹ã‚¯è‡ªä½“ã«å¯¾ã—ã¦ã“ã®ã‚ªãƒ—ションを有効ã«ã—ã¦ã€æ ¹æœ¬åŽŸå› ã‚’è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:147 msgid "After Ansible has finished running you can inspect the log file which has been created on the ansible-controller" msgstr "Ansible ã®å®Ÿè¡ŒãŒå®Œäº†ã—ãŸã‚‰ã€ansible-controller ã§ä½œæˆã•れãŸãƒ­ã‚°ãƒ•ァイルを確èªã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:149 msgid "Be sure to fully understand the security implications of enabling this option as it can log sensitive information in log file thus creating security vulnerability." msgstr "ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã«æ©Ÿå¯†æƒ…å ±ãŒè¨˜éŒ²ã•れã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¸Šã®è„†å¼±æ€§ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®å½±éŸ¿ã‚’å分ã«ç†è§£ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:154 msgid "Isolating an error" msgstr "エラーã®åˆ†é›¢" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:158 msgid "As with any effort to troubleshoot it's important to simplify the test case as much as possible." msgstr "トラブルシューティングã«ãŠã‘ã‚‹ã‚らゆる作業ã¨åŒæ§˜ã«ã€ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’ã§ãã‚‹ã ã‘簡略化ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:160 msgid "For Ansible this can be done by ensuring you are only running against one remote device:" msgstr "Ansible ã®å ´åˆã¯ã€1 ã¤ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã«å¯¾ã—ã¦ã®ã¿å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã§ã“れを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:162 msgid "Using ``ansible-playbook --limit switch1.example.net...``" msgstr "``ansible-playbook --limit switch1.example.net...`` ã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:163 msgid "Using an ad hoc ``ansible`` command" msgstr "``ansible`` アドホックコマンドã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:165 msgid "`ad hoc` refers to running Ansible to perform some quick command using ``/usr/bin/ansible``, rather than the orchestration language, which is ``/usr/bin/ansible-playbook``. In this case we can ensure connectivity by attempting to execute a single command on the remote device::" msgstr "`ad hoc` ã¯ã€ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³è¨€èªž ``/usr/bin/ansible-playbook`` ã§ã¯ãªãã€``/usr/bin/ansible`` を使用ã—ã¦ç°¡å˜ãªã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ãŸã‚ã« Ansible を実行ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚ã“ã®å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã§ 1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã§ã€æŽ¥ç¶šã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:169 msgid "In the above example, we:" msgstr "上記ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:171 msgid "connect to ``switch1.example.net`` specified in the inventory file ``inventory``" msgstr "インベントリーファイル ``inventory`` ã«æŒ‡å®šã•れ㟠``switch1.example.net`` ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:172 msgid "use the module ``arista.eos.eos_command``" msgstr "``arista.eos.eos_command`` モジュールã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:173 msgid "run the command ``?``" msgstr "``?`` コマンドã®å®Ÿè¡Œ" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:174 msgid "connect using the username ``admin``" msgstr "ユーザーå ``admin`` を使用ã—ã¦æŽ¥ç¶š" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:175 msgid "inform the ``ansible`` command to prompt for the SSH password by specifying ``-k``" msgstr "``-k`` を指定ã—㦠SSH ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹ã‚ˆã†ã«ã€``ansible`` コマンドã«é€šçŸ¥" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:177 msgid "If you have SSH keys configured correctly, you don't need to specify the ``-k`` parameter." msgstr "SSH ã‚­ãƒ¼ãŒæ­£ã—ã設定ã•れã¦ã„ã‚‹å ´åˆã¯ã€``-k`` パラメーターを指定ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:179 msgid "If the connection still fails you can combine it with the enable_network_logging parameter. For example:" msgstr "ãれã§ã‚‚接続ãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€ã“れを enable_network_logging パラメーターã¨çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:190 msgid "Then review the log file and find the relevant error message in the rest of this document." msgstr "次ã«ã€ãƒ­ã‚°ãƒ•ァイルを確èªã—ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ®‹ã‚Šã®éƒ¨åˆ†ã§ã€é–¢é€£ã™ã‚‹ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:197 msgid "Troubleshooting socket path issues" msgstr "ソケットパスã®å•題ã®ãƒˆãƒ©ãƒ–ルシューティング" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:201 msgid "The ``Socket path does not exist or cannot be found`` and ``Unable to connect to socket`` messages indicate that the socket used to communicate with the remote network device is unavailable or does not exist." msgstr "``Socket path does not exist or cannot be found`` メッセージãŠã‚ˆã³ ``Unable to connect to socket``メッセージã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨ã®é€šä¿¡ã«ä½¿ç”¨ã•れるソケットãŒåˆ©ç”¨ã§ããªã„ã‹ã€å­˜åœ¨ã—ãªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:216 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:241 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:378 msgid "or" msgstr "ã¾ãŸã¯" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:229 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:283 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:309 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:335 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:369 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:419 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:450 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:476 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:502 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:513 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:539 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:623 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:795 msgid "Suggestions to resolve:" msgstr "解決ã™ã‚‹ãŸã‚ã®ãƒ’ント:" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:231 msgid "Verify that you have write access to the socket path described in the error message." msgstr "エラーメッセージã«è¨˜è¼‰ã•れã¦ã„るソケットパスã¸ã®æ›¸ãè¾¼ã¿æ¨©é™ãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:233 msgid "Follow the steps detailed in :ref:`enable network logging `." msgstr "「:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ­ã‚®ãƒ³ã‚°ã®æœ‰åŠ¹åŒ– `ã€è¨˜è¼‰ã•れる手順ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:235 msgid "If the identified error message from the log file is:" msgstr "ログファイルã‹ã‚‰ç‰¹å®šã•れãŸã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒä»¥ä¸‹ã®å ´åˆã¯ã€" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:247 msgid "Follow the steps detailed in :ref:`timeout issues `" msgstr "「:ref:`タイムアウトã®å•題 `ã€ã«è¨˜è¼‰ã®æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:253 msgid "Category \"Unable to open shell\"" msgstr "Category \"Unable to open shell\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:258 msgid "The ``unable to open shell`` message means that the ``ansible-connection`` daemon has not been able to successfully talk to the remote network device. This generally means that there is an authentication issue. It is a \"catch all\" message, meaning you need to enable :ref:`logging ` to find the underlying issues." msgstr "``unable to open shell`` メッセージã¯ã€``ansible-connection`` デーモンãŒãƒªãƒ¢ãƒ¼ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¨æ­£å¸¸ã«é€šä¿¡ã§ããªã‹ã£ãŸã“ã¨ã‚’示ã—ã¾ã™ã€‚ã“れã¯é€šå¸¸ã€èªè¨¼ã®å•題ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“れã¯ã€Œcatch all (å…¨ã¦å–å¾—ã™ã‚‹)ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ã€‚ã¤ã¾ã‚Šã€:ref:`logging ` を有効ã«ã—ã¦ã€æ ¹æœ¬çš„ãªå•題を検出ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:270 msgid "or:" msgstr "ã¾ãŸã¯" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:285 msgid "Follow the steps detailed in enable_network_logging_." msgstr "enable_network_logging_ ã«è¨˜è¼‰ã®æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:287 msgid "Once you've identified the error message from the log file, the specific solution can be found in the rest of this document." msgstr "ログファイルã‹ã‚‰ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒç‰¹å®šã§ããŸã‚‰ã€ç‰¹å®šã®è§£æ±ºæ–¹æ³•ã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã®ãã®ä»–ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:292 msgid "Error: \"[Errno -2] Name or service not known\"" msgstr "Error: \"[Errno -2] Name or service not known\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:296 msgid "Indicates that the remote host you are trying to connect to can not be reached" msgstr "接続ã—よã†ã¨ã—ã¦ã„るリモートホストã«åˆ°é”ã§ããªã„ã“ã¨ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:311 msgid "If you are using the ``provider:`` options ensure that its suboption ``host:`` is set correctly." msgstr "``provider:`` オプションを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚µãƒ–オプション ``host:`` ãŒæ­£ã—ã設定ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:312 msgid "If you are not using ``provider:`` nor top-level arguments ensure your inventory file is correct." msgstr "``provider:`` ã¾ãŸã¯ãƒˆãƒƒãƒ—レベルã®å¼•数を使用ã—ãªã„å ´åˆã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£ã—ã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:319 msgid "Error: \"Authentication failed\"" msgstr "Error: \"Authentication failed\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:323 msgid "Occurs if the credentials (username, passwords, or ssh keys) passed to ``ansible-connection`` (via ``ansible`` or ``ansible-playbook``) can not be used to connect to the remote device." msgstr "(``ansible`` ã¾ãŸã¯ ``ansible-playbook`` を使用ã—ã¦) ``ansible-connection`` ã«æ¸¡ã•れるèªè¨¼æƒ…å ± (ユーザーåã€ãƒ‘スワードã€ã¾ãŸã¯ ssh キー) を使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã§ããªã„å ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:337 msgid "If you are specifying credentials via ``password:`` (either directly or via ``provider:``) or the environment variable `ANSIBLE_NET_PASSWORD` it is possible that ``paramiko`` (the Python SSH library that Ansible uses) is using ssh keys, and therefore the credentials you are specifying are being ignored. To find out if this is the case, disable \"look for keys\". This can be done like this:" msgstr "(直接ã¾ãŸã¯ ``provider:`` を使用ã—ã¦) ``password:`` ã§èªè¨¼æƒ…報を指定ã™ã‚‹å ´åˆã‚„ã€ç’°å¢ƒå¤‰æ•° `ANSIBLE_NET_PASSWORD` を指定ã™ã‚‹å ´åˆã¯ã€``paramiko`` (Ansible ãŒä½¿ç”¨ã™ã‚‹ Python SSH ライブラリー) ㌠ssh キーを使用ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æŒ‡å®šã™ã‚‹èªè¨¼æƒ…å ±ãŒç„¡åйã«ãªã‚Šã¾ã™ã€‚ã“れを確èªã™ã‚‹ã«ã¯ã€ã€Œlook for keysã€ã‚’無効ã«ã—ã¾ã™ã€‚ã“ã‚Œã¯æ¬¡ã®ã‚ˆã†ã«è¡Œã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:343 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:458 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:485 #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:550 msgid "To make this a permanent change, add the following to your ``ansible.cfg`` file:" msgstr "ã“れを永続的ã«è¡Œã†ã«ã¯ã€ä»¥ä¸‹ã‚’ ``ansible.cfg`` ファイルã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:352 msgid "Error: \"connecting to host returned an error\" or \"Bad address\"" msgstr "Error: \"connecting to host returned an error\" or \"Bad address\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:354 msgid "This may occur if the SSH fingerprint hasn't been added to Paramiko's (the Python SSH library) know hosts file." msgstr "ã“れã¯ã€SSH フィンガープリント㌠Paramiko ã®æ—¢çŸ¥ã®ãƒ›ã‚¹ãƒˆãƒ•ァイル (Python SSH ライブラリー) ã«è¿½åŠ ã•れã¦ã„ãªã„å ´åˆã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:356 msgid "When using persistent connections with Paramiko, the connection runs in a background process. If the host doesn't already have a valid SSH key, by default Ansible will prompt to add the host key. This will cause connections running in background processes to fail." msgstr "Paramiko ã§æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚’ä½¿ç”¨ã™ã‚‹å ´åˆã€æŽ¥ç¶šã¯ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ—ロセスã§å®Ÿè¡Œã—ã¾ã™ã€‚ãƒ›ã‚¹ãƒˆãŒæœ‰åŠ¹ãª SSH キーをæŒã£ã¦ã„ãªã„å ´åˆã€Ansible ã¯ãƒ‡ãƒ•ォルトã§ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ã‚’追加ã™ã‚‹ã‚ˆã†ãƒ—ロンプトを出ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ—ロセスã§å®Ÿè¡Œä¸­ã®æŽ¥ç¶šãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:371 msgid "Use ``ssh-keyscan`` to pre-populate the known_hosts. You need to ensure the keys are correct." msgstr "``ssh-keyscan`` を使用ã—㦠known_hosts を事å‰ã«è¨­å®šã—ã¾ã™ã€‚ã‚­ãƒ¼ãŒæ­£ã—ã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:380 msgid "You can tell Ansible to automatically accept the keys" msgstr "éµã‚’自動的ã«å—ã‘入れるよã†ã« Ansible ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:382 msgid "Environment variable method::" msgstr "環境変数メソッド::" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:387 msgid "``ansible.cfg`` method:" msgstr "``ansible.cfg`` メソッド:" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:389 msgid "ansible.cfg" msgstr "ansible.cfg" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:403 msgid "Error: \"No authentication methods available\"" msgstr "Error: \"No authentication methods available\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:421 msgid "No password or SSH key supplied" msgstr "パスワードã¾ãŸã¯ SSH ã‚­ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ãªã„" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:424 msgid "Clearing Out Persistent Connections" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚’è§£é™¤" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:428 msgid "In Ansible 2.3, persistent connection sockets are stored in ``~/.ansible/pc`` for all network devices. When an Ansible playbook runs, the persistent socket connection is displayed when verbose output is specified." msgstr "Ansible 2.3 ã§ã¯ã€ã™ã¹ã¦ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚½ã‚±ãƒƒãƒˆãŒ ``~/.ansible/pc`` ã«ä¿å­˜ã•れã¾ã™ã€‚Ansible Playbook ãŒå®Ÿè¡Œã™ã‚‹ã¨ã€è©³ç´°ãªå‡ºåŠ›ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«æ°¸ç¶šçš„ãªã‚½ã‚±ãƒƒãƒˆæŽ¥ç¶šãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:430 msgid "`` socket_path: /home/fred/.ansible/pc/f64ddfa760``" msgstr "`` socket_path: /home/fred/.ansible/pc/f64ddfa760``" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:432 msgid "To clear out a persistent connection before it times out (the default timeout is 30 seconds of inactivity), simple delete the socket file." msgstr "タイムアウトã™ã‚‹å‰ã«æ°¸ç¶šçš„ãªæŽ¥ç¶š (デフォルトã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒ 30 ç§’ã®éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–タイムアウト) を削除ã™ã‚‹ã«ã¯ã€ã‚½ã‚±ãƒƒãƒˆãƒ•ァイルを簡å˜ãªå‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:442 msgid "Persistent connection idle timeout" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:444 msgid "By default, ``ANSIBLE_PERSISTENT_CONNECT_TIMEOUT`` is set to 30 (seconds). You may see the following error if this value is too low:" msgstr "デフォルトã§ã¯ã€``ANSIBLE_PERSISTENT_CONNECT_TIMEOUT`` 㯠30 (ç§’) ã«è¨­å®šã•れã¾ã™ã€‚ã“ã®å€¤ãŒä½Žã™ãŽã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:452 msgid "Increase value of persistent connection idle timeout:" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å€¤ã‚’大ããã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:466 msgid "Command timeout" msgstr "コマンドタイムアウト" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:468 msgid "By default, ``ANSIBLE_PERSISTENT_COMMAND_TIMEOUT`` is set to 30 (seconds). Prior versions of Ansible had this value set to 10 seconds by default. You may see the following error if this value is too low:" msgstr "デフォルトã§ã¯ã€``ANSIBLE_PERSISTENT_COMMAND_TIMEOUT`` 㯠30 (ç§’) ã«è¨­å®šã•れã¾ã™ã€‚Ansible ã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã“ã®å€¤ã‚’ 10 ç§’ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ã“ã®å€¤ãŒä½Žã™ãŽã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:478 msgid "Option 1 (Global command timeout setting): Increase value of command timeout in configuration file or by setting environment variable." msgstr "オプション 1 (グローãƒãƒ«ã‚³ãƒžãƒ³ãƒ‰ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆè¨­å®š): 設定ファイルã€ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å€¤ã‚’増やã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:492 msgid "Option 2 (Per task command timeout setting): Increase command timeout per task basis. All network modules support a timeout value that can be set on a per task basis. The timeout value controls the amount of time in seconds before the task will fail if the command has not returned." msgstr "オプション 2 (タスクã”ã¨ã®ã‚³ãƒžãƒ³ãƒ‰ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆè¨­å®š): タスクã”ã¨ã«ã‚³ãƒžãƒ³ãƒ‰ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’増やã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚¿ã‚¹ã‚¯ã”ã¨ã«è¨­å®šã§ãるタイムアウト値をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚タイムアウト値ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãŒè¿”ã•れãªã‹ã£ãŸå ´åˆã«ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã¾ã§ã®æ™‚é–“ã‚’ç§’å˜ä½ã§åˆ¶å¾¡ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:498 msgid "For local connection type:" msgstr "ローカル接続タイプã®å ´åˆ:" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:523 msgid "Some operations take longer than the default 30 seconds to complete. One good example is saving the current running config on IOS devices to startup config. In this case, changing the timeout value from the default 30 seconds to 60 seconds will prevent the task from failing before the command completes successfully." msgstr "ä¸€éƒ¨ã®æ“作ã¯ã€å®Œäº†ã¾ã§ã«ãƒ‡ãƒ•ォルト㮠30 秒より長ãã‹ã‹ã‚Šã¾ã™ã€‚ãŸã¨ãˆã°ã€IOS デãƒã‚¤ã‚¹ä¸Šã®ç¾åœ¨ã®å®Ÿè¡Œè¨­å®šã‚’スタートアップ設定ã«ä¿å­˜ã—ã¾ã™ã€‚ã“ã®å ´åˆã¯ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã‚’デフォルト㮠30 ç§’ã‹ã‚‰ 60 ç§’ã«å¤‰æ›´ã™ã‚‹ã¨ã€ã‚³ãƒžãƒ³ãƒ‰ãŒæ­£å¸¸ã«å®Œäº†ã™ã‚‹å‰ã«ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:530 msgid "Persistent connection retry timeout" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã®å†è©¦è¡Œã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:532 msgid "By default, ``ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT`` is set to 15 (seconds). You may see the following error if this value is too low:" msgstr "デフォルトã§ã¯ã€``ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT`` 㯠15 (ç§’) ã«è¨­å®šã•れã¾ã™ã€‚ã“ã®å€¤ãŒä½Žã™ãŽã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:541 msgid "Increase the value of the persistent connection idle timeout. Note: This value should be greater than the SSH timeout value (the timeout value under the defaults section in the configuration file) and less than the value of the persistent connection idle timeout (connect_timeout)." msgstr "æŒç¶šçš„æŽ¥ç¶šã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å€¤ã‚’増やã—ã¾ã™ã€‚注æ„: ã“ã®å€¤ã¯ã€SSH タイムアウト値 (設定ファイルã®ãƒ‡ãƒ•ォルトセクションã®ä¸‹ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤) より大ããã€æ°¸ç¶šçš„æŽ¥ç¶šã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ (connect_timeout) よりå°ã•ãã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:559 msgid "Timeout issue due to platform specific login menu with ``network_cli`` connection type" msgstr "``network_cli`` 接続タイプをæŒã¤ãƒ—ラットフォーム固有ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«ã‚ˆã‚‹ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:561 msgid "In Ansible 2.9 and later, the network_cli connection plugin configuration options are added to handle the platform specific login menu. These options can be set as group/host or tasks variables." msgstr "Ansible 2.9 以é™ã§ã¯ã€ãƒ—ラットフォーム固有ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’処ç†ã™ã‚‹ãŸã‚ã« network_cli connection プラグイン設定オプションãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ã“れらã®ã‚ªãƒ—ションã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—/ホストã¾ãŸã¯ã‚¿ã‚¹ã‚¯å¤‰æ•°ã¨ã—ã¦è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:565 msgid "Example: Handle single login menu prompts with host variables" msgstr "例: ホスト変数を使用ã—㟠1 ã¤ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ—ロンプトを処ç†ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:576 msgid "Example: Handle remote host multiple login menu prompts with host variables" msgstr "例: ホスト変数を使用ã—ãŸãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®è¤‡æ•°ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ—ロンプトを処ç†ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:590 msgid "To handle multiple login menu prompts:" msgstr "複数ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ—ロンプトを処ç†ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:592 msgid "The values of ``ansible_terminal_initial_prompt`` and ``ansible_terminal_initial_answer`` should be a list." msgstr "``ansible_terminal_initial_prompt`` ãŠã‚ˆã³ ``ansible_terminal_initial_answer`` ã®å€¤ã¯ä¸€è¦§å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:593 msgid "The prompt sequence should match the answer sequence." msgstr "プロンプトシーケンスã¯ã€å¿œç­”シーケンスã«ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:594 msgid "The value of ``ansible_terminal_initial_prompt_checkall`` should be set to ``True``." msgstr "``ansible_terminal_initial_prompt_checkall`` ã®å€¤ã¯ ``True`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:596 msgid "If all the prompts in sequence are not received from remote host at the time connection initialization it will result in a timeout." msgstr "接続ã®åˆæœŸåŒ–時ã«ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã‹ã‚‰ã‚·ãƒ¼ã‚±ãƒ³ã‚¹å†…ã®ã™ã¹ã¦ã®ãƒ—ロンプトをå—ã‘å–らãªã„ã¨ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒç”Ÿã˜ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:602 msgid "This section details issues are caused by issues with the Playbook itself." msgstr "本セクションã§ã¯ã€Playbook 自体ã®å•題ãŒåŽŸå› ã§ç™ºç”Ÿã™ã‚‹å•題を詳ã—ã説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:605 msgid "Error: \"Unable to enter configuration mode\"" msgstr "Error: \"Unable to enter configuration mode\"" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:607 msgid "**Platforms:** Arista EOS and Cisco IOS" msgstr "**プラットフォーム:** Arista EOS ãŠã‚ˆã³ Cisco IOS" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:609 msgid "This occurs when you attempt to run a task that requires privileged mode in a user mode shell." msgstr "ã“れã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã‚·ã‚§ãƒ«ã§ç‰¹æ¨©ãƒ¢ãƒ¼ãƒ‰ã‚’å¿…è¦ã¨ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’実行ã—よã†ã¨ã™ã‚‹ã¨ç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:625 msgid "Use ``connection: ansible.netcommon.network_cli`` and ``become: yes``" msgstr "``connection: ansible.netcommon.network_cli`` ãŠã‚ˆã³ ``become: yes`` ã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:629 msgid "Proxy Issues" msgstr "プロキシーã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:634 msgid "delegate_to vs ProxyCommand" msgstr "delegate_to 対 ProxyCommand" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:636 msgid "In order to use a bastion or intermediate jump host to connect to network devices over ``cli`` transport, network modules support the use of ``ProxyCommand``." msgstr "bastion ã¾ãŸã¯ä¸­é–“ジャンプホストを使用ã—㦠``cli`` トランスãƒãƒ¼ãƒˆã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ProxyCommand`` ã®ä½¿ç”¨ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:639 msgid "To use ``ProxyCommand``, configure the proxy settings in the Ansible inventory file to specify the proxy host." msgstr "``ProxyCommand`` を使用ã™ã‚‹ã«ã¯ã€Ansible インベントリーファイルã§ãƒ—ロキシー設定を設定ã—ã¦ã€ãƒ—ロキシーホストを指定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:652 msgid "With the configuration above, simply build and run the playbook as normal with no additional changes necessary. The network module will now connect to the network device by first connecting to the host specified in ``ansible_ssh_common_args``, which is ``bastion01`` in the above example." msgstr "上記ã®è¨­å®šã§ã¯ã€è¿½åŠ ã®å¤‰æ›´ã‚’å¿…è¦ã¨ã›ãšã«ã€é€šå¸¸ã©ãŠã‚Š Playbook をビルドã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€æœ€åˆã« ``ansible_ssh_common_args`` ã§æŒ‡å®šã—ãŸãƒ›ã‚¹ãƒˆ (上記ã®ä¾‹ã¯ ``bastion01``) ã«æŽ¥ç¶šã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:657 msgid "You can also set the proxy target for all hosts by using environment variables." msgstr "環境変数を使用ã—ã¦ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®ãƒ—ロキシーターゲットを設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:664 msgid "Using bastion/jump host with netconf connection" msgstr "netconf 接続ã§ã® bastion/ジャンプホストã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:667 msgid "Enabling jump host setting" msgstr "ã‚¸ãƒ£ãƒ³ãƒ—ãƒ›ã‚¹ãƒˆè¨­å®šã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:673 msgid "Bastion/jump host with netconf connection can be enabled by:" msgstr "netconf 接続をæŒã¤ bastion/ジャンプホストã¯ã€ä»¥ä¸‹ã§æœ‰åйã«ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:671 msgid "Setting Ansible variable ``ansible_netconf_ssh_config`` either to ``True`` or custom ssh config file path" msgstr "Ansible 変数 ``ansible_netconf_ssh_config`` ã‚’ ``True`` ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ ã® ssh 設定ファイルパスã«è¨­å®š" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:672 msgid "Setting environment variable ``ANSIBLE_NETCONF_SSH_CONFIG`` to ``True`` or custom ssh config file path" msgstr "環境変数 ``ANSIBLE_NETCONF_SSH_CONFIG`` ã‚’ ``True`` ã¾ãŸã¯ã‚«ã‚¹ã‚¿ãƒ ã® ssh 設定ファイルパスã«è¨­å®š" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:673 msgid "Setting ``ssh_config = 1`` or ``ssh_config = `` under ``netconf_connection`` section" msgstr "``ssh_config = 1`` セクションã®ä¸‹ã« ``ssh_config = `` ã¾ãŸã¯ ``netconf_connection`` ã®è¨­å®š" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:675 msgid "If the configuration variable is set to 1 the proxycommand and other ssh variables are read from default ssh config file (~/.ssh/config)." msgstr "設定変数㌠1 ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã€proxycommand ãŠã‚ˆã³ãã®ä»–ã® ssh 変数ã¯ãƒ‡ãƒ•ォルト㮠ssh 設定ファイル (~/.ssh/config) ã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:678 msgid "If the configuration variable is set to file path the proxycommand and other ssh variables are read from the given custom ssh file path" msgstr "設定変数ãŒãƒ•ァイルパスã«è¨­å®šã•れã¦ã„ã‚‹ã¨ã€proxycommand ãŠã‚ˆã³ãã®ä»–ã® ssh å¤‰æ•°ã¯æŒ‡å®šã®ã‚«ã‚¹ã‚¿ãƒ  ssh ファイルパスã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:682 msgid "Example ssh config file (~/.ssh/config)" msgstr "ssh 設定ファイルã®ä¾‹ (~/.ssh/config)" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:709 msgid "Example Ansible inventory file" msgstr "Ansible インベントリーファイルã®ä¾‹" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:723 msgid "Using ``ProxyCommand`` with passwords via variables" msgstr "変数を介ã—ãŸãƒ‘スワードã§ã® ``ProxyCommand`` ã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:725 msgid "By design, SSH doesn't support providing passwords via environment variables. This is done to prevent secrets from leaking out, for example in ``ps`` output." msgstr "設計上ã€SSH ã¯ç’°å¢ƒå¤‰æ•°çµŒç”±ã§ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã®æä¾›ã‚’ã‚µãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。ã“れã¯ã€``ps`` ã®å‡ºåŠ›ãªã©ã€ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒãƒªãƒ¼ã‚¯ã—ãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:728 msgid "We recommend using SSH Keys, and if needed an ssh-agent, rather than passwords, where ever possible." msgstr "SSH éµã‚’使用ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€å¯èƒ½ãªå ´åˆã¯ã€ãƒ‘スワードã§ã¯ãªã ssh-agent を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:731 msgid "Miscellaneous Issues" msgstr "ãã®ä»–ã®å•題" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:735 msgid "Intermittent failure while using ``ansible.netcommon.network_cli`` connection type" msgstr "``ansible.netcommon.network_cli`` 接続タイプã®ä½¿ç”¨ä¸­ã«æ–­ç¶šçš„ãªå¤±æ•—" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:737 msgid "If the command prompt received in response is not matched correctly within the ``ansible.netcommon.network_cli`` connection plugin the task might fail intermittently with truncated response or with the error message ``operation requires privilege escalation``. Starting in 2.7.1 a new buffer read timer is added to ensure prompts are matched properly and a complete response is send in output. The timer default value is 0.2 seconds and can be adjusted on a per task basis or can be set globally in seconds." msgstr "応答ã§å—ã‘å–ã£ãŸã‚³ãƒžãƒ³ãƒ‰ãƒ—ロンプト㌠``ansible.netcommon.network_cli`` connection ãƒ—ãƒ©ã‚°ã‚¤ãƒ³å†…ã§æ­£ã—ã一致ã—ãªã„ã¨ã€ã‚¿ã‚¹ã‚¯ãŒæ–­ç¶šçš„ã«å¤±æ•—ã—ã€å¿œç­”ãŒåˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã‚‹ã‹ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ ``operation requires privilege escalation`` ãŒè¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚2.7.1 以é™ã€ãƒ—ãƒ­ãƒ³ãƒ—ãƒˆãŒæ­£ã—ã一致ã—ã€å®Œå…¨ãªå¿œç­”ãŒå‡ºåŠ›ã«é€ä¿¡ã•れるよã†ã«ã€æ–°ã—ã„ãƒãƒƒãƒ•ァ読ã¿å–りタイマーãŒè¿½åŠ ã•れã¾ã—ãŸã€‚タイマーã®ãƒ‡ãƒ•ォルト値㯠0.2 ç§’ã§ã€ã‚¿ã‚¹ã‚¯ã”ã¨ã«èª¿æ•´ã™ã‚‹ã“ã¨ã‚‚ã€ç§’å˜ä½ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:744 msgid "Example Per task timer setting" msgstr "タスクタイマーã”ã¨ã®è¨­å®šä¾‹" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:763 msgid "This timer delay per command executed on remote host can be disabled by setting the value to zero." msgstr "リモートホストã§å®Ÿè¡Œã•れるコマンド別ã®ã“ã®ã‚¿ã‚¤ãƒžãƒ¼é…å»¶ã¯ã€å€¤ã‚’ゼロã«è¨­å®šã™ã‚‹ã¨ç„¡åйã«ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:767 msgid "Task failure due to mismatched error regex within command response using ``ansible.netcommon.network_cli`` connection type" msgstr "``ansible.netcommon.network_cli`` 接続タイプを使用ã—ãŸã‚³ãƒžãƒ³ãƒ‰å¿œç­”内ã®ã‚¨ãƒ©ãƒ¼æ­£è¦è¡¨ç¾ã®ä¸ä¸€è‡´ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã®å¤±æ•—" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:769 msgid "In Ansible 2.9 and later, the ``ansible.netcommon.network_cli`` connection plugin configuration options are added to handle the stdout and stderr regex to identify if the command execution response consist of a normal response or an error response. These options can be set group/host variables or as tasks variables." msgstr "Ansible 2.9 以é™ã§ã¯ã€``ansible.netcommon.network_cli`` connection プラグイン設定オプションãŒè¿½åŠ ã•ã‚Œã€æ¨™æº–å‡ºåŠ›ã¨æ¨™æº–ã‚¨ãƒ©ãƒ¼ã®æ­£è¦è¡¨ç¾ã‚’処ç†ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œå¿œç­”ãŒé€šå¸¸ã®å¿œç­”ã‹ã‚¨ãƒ©ãƒ¼å¿œç­”ã‹ã‚’識別ã—ã¾ã™ã€‚ã“れらã®ã‚ªãƒ—ションã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—/ホスト変数ã¾ãŸã¯ã‚¿ã‚¹ã‚¯å¤‰æ•°ã¨ã—ã¦è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:774 msgid "Example: For mismatched error response" msgstr "例: ä¸ä¸€è‡´ã®ã‚¨ãƒ©ãƒ¼å¿œç­”ã®å ´åˆ" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:784 msgid "Playbook run output:" msgstr "Playbook 実行ã®å‡ºåŠ›:" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:797 msgid "Modify the error regex for individual task." msgstr "個々ã®ã‚¿ã‚¹ã‚¯ã®ã‚¨ãƒ©ãƒ¼æ­£è¦è¡¨ç¾ã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:810 msgid "The terminal plugin regex options ``ansible_terminal_stderr_re`` and ``ansible_terminal_stdout_re`` have ``pattern`` and ``flags`` as keys. The value of the ``flags`` key should be a value that is accepted by the ``re.compile`` python method." msgstr "ç«¯æœ«ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ­£è¦è¡¨ç¾ã‚ªãƒ—ション ``ansible_terminal_stderr_re`` ãŠã‚ˆã³ ``ansible_terminal_stdout_re`` ã¯ã€``pattern`` 㨠``flags`` をキーã¨ã—ã¾ã™ã€‚``flags`` キーã®å€¤ã¯ã€``re.compile`` python メソッドã§è¨±å¯ã•れる値ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:816 msgid "Intermittent failure while using ``ansible.netcommon.network_cli`` connection type due to slower network or remote target host" msgstr "低速ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«ã‚ˆã‚‹ ``ansible.netcommon.network_cli`` 接続タイプã®ä½¿ç”¨æ™‚ã®æ–­ç¶šçš„ãªå¤±æ•—" #: ../../rst/network/user_guide/network_debug_troubleshooting.rst:818 msgid "In Ansible 2.9 and later, the ``ansible.netcommon.network_cli`` connection plugin configuration option is added to control the number of attempts to connect to a remote host. The default number of attempts is three. After every retry attempt the delay between retries is increased by power of 2 in seconds until either the maximum attempts are exhausted or either the ``persistent_command_timeout`` or ``persistent_connect_timeout`` timers are triggered." msgstr "Ansible 2.9 以é™ã§ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¸ã®æŽ¥ç¶šã®è©¦è¡Œå›žæ•°ã‚’制御ã™ã‚‹ãŸã‚ã«ã€``ansible.netcommon.network_cli`` connection プラグイン設定オプションãŒè¿½åŠ ã•れã¾ã—ãŸã€‚デフォルトã®è©¦è¡Œå›žæ•°ã¯ 3 回ã§ã™ã€‚å†è©¦è¡Œã®ãŸã³ã«ã€æœ€å¤§è©¦è¡Œå›žæ•°ãŒãªããªã‚‹ã‹ã€``persistent_command_timeout`` ã¾ãŸã¯ ``persistent_connect_timeout`` タイマーã®ã„ãšã‚Œã‹ãŒç™ºç”Ÿã™ã‚‹ã¾ã§ã€å†è©¦è¡Œé–“ã®é…延㯠2 ã®ç´¯ä¹— (ç§’) ãšã¤å¢—加ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:5 msgid "Network Resource Modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/network/user_guide/network_resource_modules.rst:7 msgid "Ansible network resource modules simplify and standardize how you manage different network devices. Network devices separate configuration into sections (such as interfaces and VLANs) that apply to a network service. Ansible network resource modules take advantage of this to allow you to configure subsections or *resources* within the network device configuration. Network resource modules provide a consistent experience across different network devices." msgstr "Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã•ã¾ã–ã¾ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ç®¡ç†æ–¹æ³•を簡素化ã—ã€æ¨™æº–化ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ“スã«é©ç”¨ã•れるセクション (インターフェースや VLAN ãªã©) ã«è¨­å®šã‚’分割ã—ã¾ã™ã€‚Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã“れを利用ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹è¨­å®šå†…ã§ã‚µãƒ–セクションや *リソース* を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ç•°ãªã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹é–“ã§ä¸€è²«ã—ãŸã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:14 msgid "Network resource module states" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®çŠ¶æ…‹" #: ../../rst/network/user_guide/network_resource_modules.rst:16 msgid "You use the network resource modules by assigning a state to what you want the module to do. The resource modules support the following states:" msgstr "モジュールã®å‹•作ã«çŠ¶æ…‹ã‚’å‰²ã‚Šå½“ã¦ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¾ã™ã€‚リソースモジュールã¯ä»¥ä¸‹ã®çŠ¶æ…‹ã‚’ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:37 msgid "Ansible parses the configuration from the ``running_config`` option into Ansible structured data in the ``parsed`` key in the result. Note this does not gather the configuration from the network device so this state can be used offline." msgstr "Ansible ã¯ã€``running_config`` オプションã‹ã‚‰ã€ãã®çµæžœå†…ã® ``parsed`` キー㮠Ansible 構造化データã«è¨­å®šã‚’è§£æžã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰è¨­å®šãŒåŽé›†ã•れãªã„ãŸã‚ã€ã“ã®çŠ¶æ…‹ã‚’ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ä½¿ç”¨ã§ãã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/network_resource_modules.rst:40 msgid "Using network resource modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_resource_modules.rst:42 msgid "This example configures the L3 interface resource on a Cisco IOS device, based on different state settings." msgstr "ã“ã®ä¾‹ã§ã¯ã€ç•°ãªã‚‹çŠ¶æ…‹è¨­å®šã«åŸºã¥ã„ã¦ã€Cisco IOS デãƒã‚¤ã‚¹ã§ L3 インターフェースリソースを設定ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:51 msgid "The following table shows an example of how an initial resource configuration changes with this task for different states." msgstr "以下ã®è¡¨ã¯ã€ã“ã®ã‚¿ã‚¹ã‚¯ã§åˆæœŸãƒªã‚½ãƒ¼ã‚¹ã®è¨­å®šãŒç•°ãªã‚‹çŠ¶æ…‹ã§å¤‰åŒ–ã™ã‚‹ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:54 msgid "Resource starting configuration" msgstr "リソース起動ã®è¨­å®š" #: ../../rst/network/user_guide/network_resource_modules.rst:54 msgid "task-provided configuration (YAML)" msgstr "タスクæä¾›è¨­å®š (YAML)" #: ../../rst/network/user_guide/network_resource_modules.rst:54 msgid "Final resource configuration on device" msgstr "デãƒã‚¤ã‚¹ã®æœ€çµ‚çš„ãªãƒªã‚½ãƒ¼ã‚¹è¨­å®š" #: ../../rst/network/user_guide/network_resource_modules.rst:61 msgid "*merged*" msgstr "*マージ*" #: ../../rst/network/user_guide/network_resource_modules.rst:69 msgid "*replaced*" msgstr "*ç½®ãæ›ãˆæ¸ˆ*" #: ../../rst/network/user_guide/network_resource_modules.rst:73 msgid "*overridden*" msgstr "*ä¸Šæ›¸ãæ¸ˆ*" #: ../../rst/network/user_guide/network_resource_modules.rst:73 msgid "Incorrect use case. This would remove all interfaces from the device" msgstr "誤ã£ãŸãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒå‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:75 msgid "(including the mgmt interface) except" msgstr "(mgmt インターフェースをå«ã‚€) 以下を除ã" #: ../../rst/network/user_guide/network_resource_modules.rst:76 msgid "the configured loopback100" msgstr "設定ã•れã¦ã„ã‚‹ loopback100" #: ../../rst/network/user_guide/network_resource_modules.rst:81 msgid "*deleted*" msgstr "*削除済*" #: ../../rst/network/user_guide/network_resource_modules.rst:85 msgid "Network resource modules return the following details:" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ä»¥ä¸‹ã®è©³ç´°ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:87 msgid "The *before* state - the existing resource configuration before the task was executed." msgstr "*before* 状態 - タスクã®å®Ÿè¡Œå‰ã®æ—¢å­˜ãƒªã‚½ãƒ¼ã‚¹è¨­å®šã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:88 msgid "The *after* state - the new resource configuration that exists on the network device after the task was executed." msgstr "*after* 状態 - タスク実行後ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«å­˜åœ¨ã™ã‚‹æ–°ã—ã„リソース設定。" #: ../../rst/network/user_guide/network_resource_modules.rst:89 msgid "Commands - any commands configured on the device." msgstr "コマンド - ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã«è¨­å®šã•れるã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:122 msgid "Example: Verifying the network device configuration has not changed" msgstr "例: ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹è¨­å®šãŒå¤‰æ›´ã•れã¦ã„ãªã„ã“ã¨ã‚’確èª" #: ../../rst/network/user_guide/network_resource_modules.rst:124 msgid "The following playbook uses the :ref:`arista.eos.eos_l3_interfaces ` module to gather a subset of the network device configuration (Layer 3 interfaces only) and verifies the information is accurate and has not changed. This playbook passes the results of :ref:`arista.eos.eos_facts ` directly to the ``arista.eos.eos_l3_interfaces`` module." msgstr "以下㮠Playbook ã¯ã€:ref:`arista.eos.eos_l3_interfaces ` モジュールを使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹è¨­å®šã®ã‚µãƒ–セット (レイヤー 3 インターフェースã®ã¿) ã‚’åŽé›†ã—ã€æƒ…å ±ãŒæ­£ç¢ºã§ã‚りã€å¤‰æ›´ã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ã“ã® Playbook ã¯ã€:ref:`arista.eos.eos_facts ` ã®çµæžœã‚’直接 ``arista.eos.eos_l3_interfaces`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:148 msgid "Example: Acquiring and updating VLANs on a network device" msgstr "例: ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® VLAN ã®èª¿æ•´ãŠã‚ˆã³æ›´æ–°" #: ../../rst/network/user_guide/network_resource_modules.rst:150 msgid "This example shows how you can use resource modules to:" msgstr "以下ã®ä¾‹ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ä»¥ä¸‹ã‚’è¡Œã†æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:152 msgid "Retrieve the current configuration on a network device." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ç¾åœ¨ã®è¨­å®šã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:153 msgid "Save that configuration locally." msgstr "ãã®è¨­å®šã‚’ローカルã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:154 msgid "Update that configuration and apply it to the network device." msgstr "ãã®è¨­å®šã‚’æ›´æ–°ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«é©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:156 msgid "This example uses the ``cisco.ios.ios_vlans`` resource module to retrieve and update the VLANs on an IOS device." msgstr "ã“ã®ä¾‹ã§ã¯ã€``cisco.ios.ios_vlans`` リソースモジュールを使用ã—ã¦ã€IOS デãƒã‚¤ã‚¹ã® VLAN ã‚’å–å¾—ãŠã‚ˆã³æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:158 msgid "Retrieve the current IOS VLAN configuration:" msgstr "ç¾åœ¨ã® IOS VLAN 設定をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:170 msgid "Store the VLAN configuration locally:" msgstr "VLAN 設定をローカルã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:179 msgid "Modify the stored file to update the VLAN configuration locally." msgstr "ä¿å­˜ã—ãŸãƒ•ァイルを変更ã—ã¦ã€VLAN è¨­å®šã‚’ãƒ­ãƒ¼ã‚«ãƒ«ã«æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:181 msgid "Merge the updated VLAN configuration with the existing configuration on the device:" msgstr "æ›´æ–°ã•れ㟠VLAN 設定をã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã®æ—¢å­˜ã®è¨­å®šã¨ãƒžãƒ¼ã‚¸ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_resource_modules.rst:193 msgid "`Network Features in Ansible 2.9 `_" msgstr "`Network Features in Ansible 2.9 `_" #: ../../rst/network/user_guide/network_resource_modules.rst:194 msgid "A introductory blog post on network resource modules." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«é–¢ã™ã‚‹å…¥é–€ãƒ–ãƒ­ã‚°ã®æŠ•ç¨¿" #: ../../rst/network/user_guide/network_resource_modules.rst:195 msgid "`Deep Dive into Network Resource Modules `_" msgstr "`Deep Dive into Network Resource Modules `_" #: ../../rst/network/user_guide/network_resource_modules.rst:196 msgid "A deeper dive presentation into network resource modules." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è©³ç´°ãªèª¬æ˜Ž" #: ../../rst/network/user_guide/network_working_with_command_output.rst:5 msgid "Working with command output and prompts in network modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚³ãƒžãƒ³ãƒ‰å‡ºåŠ›ãŠã‚ˆã³ãƒ—ロンプトã®ä½¿ç”¨" #: ../../rst/network/user_guide/network_working_with_command_output.rst:11 msgid "Conditionals in networking modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¡ä»¶" #: ../../rst/network/user_guide/network_working_with_command_output.rst:13 msgid "Ansible allows you to use conditionals to control the flow of your playbooks. Ansible networking command modules use the following unique conditional statements." msgstr "Ansible ã§ã¯ã€æ¡ä»¶ã‚’使用ã—㦠Playbook ã®ãƒ•ローを制御ã§ãã¾ã™ã€‚Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ä»¥ä¸‹ã®å›ºæœ‰ã®æ¡ä»¶åˆ†å²æ–‡ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:15 msgid "``eq`` - Equal" msgstr "``eq`` - ç­‰ã—ã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:16 msgid "``neq`` - Not equal" msgstr "``neq`` - ç­‰ã—ããªã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:17 msgid "``gt`` - Greater than" msgstr "``gt`` - より大ãã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:18 msgid "``ge`` - Greater than or equal" msgstr "``ge`` - より大ãã„ã‹ç­‰ã—ã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:19 msgid "``lt`` - Less than" msgstr "``lt`` - よりå°ã•ã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:20 msgid "``le`` - Less than or equal" msgstr "``le`` - よりå°ã•ã„ã‹ç­‰ã—ã„" #: ../../rst/network/user_guide/network_working_with_command_output.rst:21 msgid "``contains`` - Object contains specified item" msgstr "``contains`` - ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æŒ‡å®šã•れãŸé …ç›®ãŒå«ã¾ã‚Œã‚‹" #: ../../rst/network/user_guide/network_working_with_command_output.rst:24 msgid "Conditional statements evaluate the results from the commands that are executed remotely on the device. Once the task executes the command set, the ``wait_for`` argument can be used to evaluate the results before returning control to the Ansible playbook." msgstr "æ¡ä»¶æ–‡ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§ãƒªãƒ¢ãƒ¼ãƒˆã«å®Ÿè¡Œã•れるコマンドã®çµæžœã‚’評価ã—ã¾ã™ã€‚タスクãŒã‚³ãƒžãƒ³ãƒ‰ã‚»ãƒƒãƒˆã‚’実行ã™ã‚‹ã¨ã€Ansible Playbook ã«åˆ¶å¾¡ã‚’戻ã™å‰ã«ã€``wait_for`` 引数を使用ã—ã¦çµæžœã‚’評価ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:29 msgid "For example::" msgstr "例::" #: ../../rst/network/user_guide/network_working_with_command_output.rst:39 msgid "In the above example task, the command :code:`show interface Ethernet4 | json` is executed on the remote device and the results are evaluated. If the path :code:`(result[0].interfaces.Ethernet4.interfaceStatus)` is not equal to \"connected\", then the command is retried. This process continues until either the condition is satisfied or the number of retries has expired (by default, this is 10 retries at 1 second intervals)." msgstr "上記ã®ã‚¿ã‚¹ã‚¯ä¾‹ã§ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã§ command :code:`show interface Ethernet4 | json` ãŒå®Ÿè¡Œã•れã€çµæžœãŒè©•価ã•れã¾ã™ã€‚path :code:`(result[0].interfaces.Ethernet4.interfaceStatus)`ãŒã€Œconnectedã€ã«ãªã£ã¦ã„ãªã‘れã°ã€ã‚³ãƒžãƒ³ãƒ‰ã¯å†è©¦è¡Œã•れã¾ã™ã€‚ã“ã®å‡¦ç†ã¯ã€æ¡ä»¶ãŒæº€ãŸã•れるã‹ã€å†è©¦è¡Œå›žæ•°ãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ (デフォルトã§ã¯ã€1 秒間隔㧠10 回ã®å†è©¦è¡Œ) ã¾ã§ç¶™ç¶šã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:47 msgid "The commands module can also evaluate more than one set of command results in an interface. For instance::" msgstr "ã¾ãŸã€commands モジュールã¯ã€1 ã¤ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã§è¤‡æ•°ã®ã‚³ãƒžãƒ³ãƒ‰çµæžœã‚’評価ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:60 msgid "In the above example, two commands are executed on the remote device, and the results are evaluated. By specifying the result index value (0 or 1), the correct result output is checked against the conditional." msgstr "上記ã®ä¾‹ã§ã¯ã€2 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã§å®Ÿè¡Œã•れã€çµæžœãŒè©•価ã•れã¾ã™ã€‚çµæžœã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹å€¤ (0 ã¾ãŸã¯ 1) を指定ã™ã‚‹ã“ã¨ã§ã€æ¡ä»¶ã«å¯¾ã—ã¦æ­£ã—ã„çµæžœå‡ºåŠ›ãŒç¢ºèªã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:65 msgid "The ``wait_for`` argument must always start with result and then the command index in ``[]``, where ``0`` is the first command in the commands list, ``1`` is the second command, ``2`` is the third and so on." msgstr "``wait_for`` 引数ã¯ã€å¿…ãšçµæžœã§ã€æ¬¡ã« ``[]`` ã®ã‚³ãƒžãƒ³ãƒ‰ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒå¿…è¦ã§ã™ã€‚``0`` ã¯ã‚³ãƒžãƒ³ãƒ‰ãƒªã‚¹ãƒˆã®æœ€åˆã®ã‚³ãƒžãƒ³ãƒ‰ã€``1`` 㯠2 番目ã®ã‚³ãƒžãƒ³ãƒ‰ã€``2`` 㯠3 番目ã®ã‚³ãƒžãƒ³ãƒ‰ãªã©ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:71 msgid "Handling prompts in network modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ—ロンプトã®å‡¦ç†" #: ../../rst/network/user_guide/network_working_with_command_output.rst:73 msgid "Network devices may require that you answer a prompt before performing a change on the device. Individual network modules such as :ref:`cisco.ios.ios_command ` and :ref:`cisco.nxos.nxos_command ` can handle this with a ``prompt`` parameter." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã®å¤‰æ›´ã‚’実行ã™ã‚‹å‰ã«ãƒ—ロンプトã®å›žç­”ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚:ref:`cisco.ios.ios_command ` ãŠã‚ˆã³ :ref:`cisco.nxos.nxos_command ` ãªã©ã®å€‹åˆ¥ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``prompt`` パラメーターã§ã“れを処ç†ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:77 msgid "``prompt`` is a Python regex. If you add special characters such as ``?`` in the ``prompt`` value, the prompt won't match and you will get a timeout. To avoid this, ensure that the ``prompt`` value is a Python regex that matches the actual device prompt. Any special characters must be handled correctly in the ``prompt`` regex." msgstr "``prompt`` 㯠Python ã®æ­£è¦è¡¨ç¾ã§ã™ã€‚``prompt`` 値㫠``?`` ãªã©ã®ç‰¹æ®Šæ–‡å­—を追加ã™ã‚‹ã¨ã€ãƒ—ロンプトãŒä¸€è‡´ã›ãšã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒç™ºç”Ÿã—ã¾ã™ã€‚ã“れを回é¿ã™ã‚‹ã«ã¯ã€``prompt`` 値ãŒå®Ÿéš›ã®ãƒ‡ãƒã‚¤ã‚¹ãƒ—ロンプトã¨ä¸€è‡´ã™ã‚‹ Python æ­£è¦è¡¨ç¾ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚特殊文字ã¯ã€``prompt`` æ­£è¦è¡¨ç¾ã§æ­£ã—ã処ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:79 msgid "You can also use the :ref:`ansible.netcommon.cli_command ` to handle multiple prompts." msgstr ":ref:`ansible.netcommon.cli_command ` を使用ã—ã¦ã€è¤‡æ•°ã®ãƒ—ロンプトを処ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:97 msgid "You must list the prompt and the answers in the same order (that is, prompt[0] is answered by answer[0])." msgstr "プロンプトã¨å›žç­”ã‚’åŒã˜é †åºã§ä¸€è¦§è¡¨ç¤ºã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (ã¤ã¾ã‚Šã€prompt[0] ã«ã¯ answer[0] ã§å¿œç­”ã—ã¾ã™)。" #: ../../rst/network/user_guide/network_working_with_command_output.rst:99 msgid "In the above example, ``check_all: True`` ensures that the task gives the matching answer to each prompt. Without that setting, a task with multiple prompts would give the first answer to every prompt." msgstr "上記ã®ä¾‹ã§ã¯ã€``check_all: True`` ã«ã‚ˆã‚Šã€ã‚¿ã‚¹ã‚¯ãŒå„プロンプトã«ä¸€è‡´ã™ã‚‹å¿œç­”ã‚’è¿”ã™ã‚ˆã†ã«ã—ã¾ã™ã€‚ã“ã®è¨­å®šãŒãªã„ã¨ã€è¤‡æ•°ã®ãƒ—ロンプトãŒã‚るタスクã§ã¯ã€ã™ã¹ã¦ã®ãƒ—ロンプトã«å¯¾ã—ã¦æœ€åˆã®å¿œç­”ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:101 msgid "In the following example, the second answer would be ignored and ``y`` would be the answer given to both prompts. That is, this task only works because both answers are identical. Also notice again that ``prompt`` must be a Python regex, which is why the ``?`` is escaped in the first prompt." msgstr "次ã®ä¾‹ã§ã¯ã€2 番目ã®å›žç­”ã¯ç„¡è¦–ã•れã€ä¸¡æ–¹ã®ãƒ—ロンプト㫠``y`` ãŒå…¥åŠ›ã•れã¾ã™ã€‚ã¤ã¾ã‚Šã€ã“ã®ã‚¿ã‚¹ã‚¯ãŒæ©Ÿèƒ½ã™ã‚‹ã®ã¯ã€ä¸¡æ–¹ã®ç­”ãˆãŒåŒã˜ã ã‹ã‚‰ã§ã™ã€‚ã¾ãŸã€``prompt`` 㯠Python ã®æ­£è¦è¡¨ç¾ã§ãªã‘れã°ãªã‚‰ãªã„ã“ã¨ã«ã‚‚注æ„ã—ã¦ãã ã•ã„。ã“ã®ãŸã‚ã€``?`` ã¯æœ€åˆã®ãƒ—ロンプトã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:119 msgid "`Rebooting network devices with Ansible `_" msgstr "`Rebooting network devices with Ansible `_" #: ../../rst/network/user_guide/network_working_with_command_output.rst:119 msgid "Examples using ``wait_for``, ``wait_for_connection``, and ``prompt`` for network devices." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ç”¨ã« ``wait_for``ã€``wait_for_connection``ã€ãŠã‚ˆã³ ``prompt`` を使用ã™ã‚‹ä¾‹ã€‚" #: ../../rst/network/user_guide/network_working_with_command_output.rst:121 msgid "`Deep dive on cli_command `_" msgstr "`Deep dive on cli_command `_" #: ../../rst/network/user_guide/network_working_with_command_output.rst:122 msgid "Detailed overview of how to use the ``cli_command``." msgstr "``cli_command`` ã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ãªæ¦‚è¦" #: ../../rst/network/user_guide/platform_ce.rst:5 msgid "CloudEngine OS Platform Options" msgstr "CloudEngine OS プラットフォームオプション" #: ../../rst/network/user_guide/platform_ce.rst:7 msgid "CloudEngine CE OS is part of the `community.network `_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "CloudEngine CE OS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã§ã®å„接続ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã—ã€ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã•れるã‹ã‚’詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:13 #: ../../rst/network/user_guide/platform_cnos.rst:13 #: ../../rst/network/user_guide/platform_dellos10.rst:13 #: ../../rst/network/user_guide/platform_dellos6.rst:13 #: ../../rst/network/user_guide/platform_dellos9.rst:13 #: ../../rst/network/user_guide/platform_enos.rst:13 #: ../../rst/network/user_guide/platform_eos.rst:13 #: ../../rst/network/user_guide/platform_eric_eccli.rst:13 #: ../../rst/network/user_guide/platform_exos.rst:13 #: ../../rst/network/user_guide/platform_frr.rst:13 #: ../../rst/network/user_guide/platform_icx.rst:13 #: ../../rst/network/user_guide/platform_ios.rst:13 #: ../../rst/network/user_guide/platform_iosxr.rst:13 #: ../../rst/network/user_guide/platform_ironware.rst:13 #: ../../rst/network/user_guide/platform_junos.rst:13 #: ../../rst/network/user_guide/platform_meraki.rst:13 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:13 #: ../../rst/network/user_guide/platform_netvisor.rst:14 #: ../../rst/network/user_guide/platform_nos.rst:14 #: ../../rst/network/user_guide/platform_nxos.rst:13 #: ../../rst/network/user_guide/platform_routeros.rst:14 #: ../../rst/network/user_guide/platform_slxos.rst:14 #: ../../rst/network/user_guide/platform_voss.rst:14 #: ../../rst/network/user_guide/platform_vyos.rst:13 #: ../../rst/network/user_guide/platform_weos4.rst:14 msgid "Connections available" msgstr "利用å¯èƒ½ãªæŽ¥ç¶š" #: ../../rst/network/user_guide/platform_ce.rst:19 #: ../../rst/network/user_guide/platform_cnos.rst:19 #: ../../rst/network/user_guide/platform_dellos10.rst:19 #: ../../rst/network/user_guide/platform_dellos6.rst:19 #: ../../rst/network/user_guide/platform_dellos9.rst:19 #: ../../rst/network/user_guide/platform_enos.rst:19 #: ../../rst/network/user_guide/platform_eos.rst:19 #: ../../rst/network/user_guide/platform_eric_eccli.rst:19 #: ../../rst/network/user_guide/platform_exos.rst:20 #: ../../rst/network/user_guide/platform_frr.rst:19 #: ../../rst/network/user_guide/platform_icx.rst:19 #: ../../rst/network/user_guide/platform_ios.rst:19 #: ../../rst/network/user_guide/platform_iosxr.rst:19 #: ../../rst/network/user_guide/platform_ironware.rst:19 #: ../../rst/network/user_guide/platform_junos.rst:19 #: ../../rst/network/user_guide/platform_netvisor.rst:20 #: ../../rst/network/user_guide/platform_nos.rst:20 #: ../../rst/network/user_guide/platform_nxos.rst:19 #: ../../rst/network/user_guide/platform_routeros.rst:20 #: ../../rst/network/user_guide/platform_slxos.rst:20 #: ../../rst/network/user_guide/platform_voss.rst:20 #: ../../rst/network/user_guide/platform_vyos.rst:19 #: ../../rst/network/user_guide/platform_weos4.rst:20 msgid "CLI" msgstr "CLI" #: ../../rst/network/user_guide/platform_ce.rst:19 #: ../../rst/network/user_guide/platform_iosxr.rst:19 #: ../../rst/network/user_guide/platform_junos.rst:19 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:18 msgid "NETCONF" msgstr "NETCONF" #: ../../rst/network/user_guide/platform_ce.rst:23 #: ../../rst/network/user_guide/platform_cnos.rst:21 #: ../../rst/network/user_guide/platform_dellos10.rst:21 #: ../../rst/network/user_guide/platform_dellos6.rst:21 #: ../../rst/network/user_guide/platform_dellos9.rst:21 #: ../../rst/network/user_guide/platform_enos.rst:21 #: ../../rst/network/user_guide/platform_eos.rst:21 #: ../../rst/network/user_guide/platform_eric_eccli.rst:21 #: ../../rst/network/user_guide/platform_exos.rst:22 #: ../../rst/network/user_guide/platform_frr.rst:21 #: ../../rst/network/user_guide/platform_icx.rst:21 #: ../../rst/network/user_guide/platform_ios.rst:21 #: ../../rst/network/user_guide/platform_iosxr.rst:25 #: ../../rst/network/user_guide/platform_ironware.rst:21 #: ../../rst/network/user_guide/platform_junos.rst:24 #: ../../rst/network/user_guide/platform_netvisor.rst:22 #: ../../rst/network/user_guide/platform_nos.rst:22 #: ../../rst/network/user_guide/platform_nxos.rst:21 #: ../../rst/network/user_guide/platform_routeros.rst:22 #: ../../rst/network/user_guide/platform_slxos.rst:22 #: ../../rst/network/user_guide/platform_voss.rst:22 #: ../../rst/network/user_guide/platform_vyos.rst:21 #: ../../rst/network/user_guide/platform_weos4.rst:22 msgid "SSH" msgstr "SSH" #: ../../rst/network/user_guide/platform_ce.rst:25 #: ../../rst/network/user_guide/platform_cnos.rst:23 #: ../../rst/network/user_guide/platform_dellos10.rst:23 #: ../../rst/network/user_guide/platform_dellos6.rst:23 #: ../../rst/network/user_guide/platform_dellos9.rst:23 #: ../../rst/network/user_guide/platform_enos.rst:23 #: ../../rst/network/user_guide/platform_eos.rst:23 #: ../../rst/network/user_guide/platform_eric_eccli.rst:23 #: ../../rst/network/user_guide/platform_exos.rst:24 #: ../../rst/network/user_guide/platform_frr.rst:23 #: ../../rst/network/user_guide/platform_icx.rst:23 #: ../../rst/network/user_guide/platform_ios.rst:23 #: ../../rst/network/user_guide/platform_iosxr.rst:27 #: ../../rst/network/user_guide/platform_ironware.rst:23 #: ../../rst/network/user_guide/platform_junos.rst:26 #: ../../rst/network/user_guide/platform_meraki.rst:23 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:25 #: ../../rst/network/user_guide/platform_netvisor.rst:24 #: ../../rst/network/user_guide/platform_nos.rst:24 #: ../../rst/network/user_guide/platform_nxos.rst:23 #: ../../rst/network/user_guide/platform_routeros.rst:24 #: ../../rst/network/user_guide/platform_slxos.rst:24 #: ../../rst/network/user_guide/platform_voss.rst:24 #: ../../rst/network/user_guide/platform_vyos.rst:23 #: ../../rst/network/user_guide/platform_weos4.rst:24 msgid "Credentials" msgstr "èªè¨¼æƒ…å ±" #: ../../rst/network/user_guide/platform_ce.rst:25 #: ../../rst/network/user_guide/platform_cnos.rst:23 #: ../../rst/network/user_guide/platform_dellos10.rst:23 #: ../../rst/network/user_guide/platform_dellos6.rst:23 #: ../../rst/network/user_guide/platform_dellos9.rst:23 #: ../../rst/network/user_guide/platform_enos.rst:23 #: ../../rst/network/user_guide/platform_eos.rst:23 #: ../../rst/network/user_guide/platform_eric_eccli.rst:23 #: ../../rst/network/user_guide/platform_exos.rst:24 #: ../../rst/network/user_guide/platform_frr.rst:23 #: ../../rst/network/user_guide/platform_icx.rst:23 #: ../../rst/network/user_guide/platform_ios.rst:23 #: ../../rst/network/user_guide/platform_iosxr.rst:27 #: ../../rst/network/user_guide/platform_ironware.rst:23 #: ../../rst/network/user_guide/platform_junos.rst:26 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:25 #: ../../rst/network/user_guide/platform_netvisor.rst:24 #: ../../rst/network/user_guide/platform_nos.rst:24 #: ../../rst/network/user_guide/platform_nxos.rst:23 #: ../../rst/network/user_guide/platform_routeros.rst:24 #: ../../rst/network/user_guide/platform_slxos.rst:24 #: ../../rst/network/user_guide/platform_voss.rst:24 #: ../../rst/network/user_guide/platform_vyos.rst:23 #: ../../rst/network/user_guide/platform_weos4.rst:24 msgid "uses SSH keys / SSH-agent if present" msgstr "SSH キー/SSH-agent ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ä½¿ç”¨ã—ã¾ã™" #: ../../rst/network/user_guide/platform_ce.rst:27 #: ../../rst/network/user_guide/platform_cnos.rst:25 #: ../../rst/network/user_guide/platform_dellos10.rst:25 #: ../../rst/network/user_guide/platform_dellos6.rst:25 #: ../../rst/network/user_guide/platform_dellos9.rst:25 #: ../../rst/network/user_guide/platform_enos.rst:25 #: ../../rst/network/user_guide/platform_eos.rst:25 #: ../../rst/network/user_guide/platform_eric_eccli.rst:25 #: ../../rst/network/user_guide/platform_exos.rst:26 #: ../../rst/network/user_guide/platform_frr.rst:25 #: ../../rst/network/user_guide/platform_icx.rst:25 #: ../../rst/network/user_guide/platform_ios.rst:25 #: ../../rst/network/user_guide/platform_iosxr.rst:29 #: ../../rst/network/user_guide/platform_ironware.rst:25 #: ../../rst/network/user_guide/platform_junos.rst:28 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:27 #: ../../rst/network/user_guide/platform_netvisor.rst:26 #: ../../rst/network/user_guide/platform_nos.rst:26 #: ../../rst/network/user_guide/platform_nxos.rst:25 #: ../../rst/network/user_guide/platform_routeros.rst:26 #: ../../rst/network/user_guide/platform_slxos.rst:26 #: ../../rst/network/user_guide/platform_voss.rst:26 #: ../../rst/network/user_guide/platform_vyos.rst:25 #: ../../rst/network/user_guide/platform_weos4.rst:26 msgid "accepts ``-u myuser -k`` if using password" msgstr "パスワードを使用ã™ã‚‹å ´åˆã« ``-u myuser -k`` ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:29 #: ../../rst/network/user_guide/platform_cnos.rst:27 #: ../../rst/network/user_guide/platform_dellos10.rst:27 #: ../../rst/network/user_guide/platform_dellos6.rst:27 #: ../../rst/network/user_guide/platform_dellos9.rst:27 #: ../../rst/network/user_guide/platform_enos.rst:27 #: ../../rst/network/user_guide/platform_eos.rst:27 #: ../../rst/network/user_guide/platform_eric_eccli.rst:27 #: ../../rst/network/user_guide/platform_exos.rst:28 #: ../../rst/network/user_guide/platform_frr.rst:27 #: ../../rst/network/user_guide/platform_icx.rst:27 #: ../../rst/network/user_guide/platform_ios.rst:27 #: ../../rst/network/user_guide/platform_iosxr.rst:31 #: ../../rst/network/user_guide/platform_ironware.rst:27 #: ../../rst/network/user_guide/platform_junos.rst:30 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:29 #: ../../rst/network/user_guide/platform_netvisor.rst:28 #: ../../rst/network/user_guide/platform_nos.rst:28 #: ../../rst/network/user_guide/platform_nxos.rst:27 #: ../../rst/network/user_guide/platform_routeros.rst:28 #: ../../rst/network/user_guide/platform_slxos.rst:28 #: ../../rst/network/user_guide/platform_voss.rst:28 #: ../../rst/network/user_guide/platform_vyos.rst:27 #: ../../rst/network/user_guide/platform_weos4.rst:28 msgid "Indirect Access" msgstr "間接アクセス" #: ../../rst/network/user_guide/platform_ce.rst:29 #: ../../rst/network/user_guide/platform_cnos.rst:27 #: ../../rst/network/user_guide/platform_dellos10.rst:27 #: ../../rst/network/user_guide/platform_dellos6.rst:27 #: ../../rst/network/user_guide/platform_dellos9.rst:27 #: ../../rst/network/user_guide/platform_enos.rst:27 #: ../../rst/network/user_guide/platform_eos.rst:27 #: ../../rst/network/user_guide/platform_eric_eccli.rst:27 #: ../../rst/network/user_guide/platform_exos.rst:28 #: ../../rst/network/user_guide/platform_frr.rst:27 #: ../../rst/network/user_guide/platform_icx.rst:27 #: ../../rst/network/user_guide/platform_ios.rst:27 #: ../../rst/network/user_guide/platform_iosxr.rst:31 #: ../../rst/network/user_guide/platform_ironware.rst:27 #: ../../rst/network/user_guide/platform_junos.rst:30 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:29 #: ../../rst/network/user_guide/platform_netvisor.rst:28 #: ../../rst/network/user_guide/platform_nos.rst:28 #: ../../rst/network/user_guide/platform_nxos.rst:27 #: ../../rst/network/user_guide/platform_routeros.rst:28 #: ../../rst/network/user_guide/platform_slxos.rst:28 #: ../../rst/network/user_guide/platform_voss.rst:28 #: ../../rst/network/user_guide/platform_vyos.rst:27 #: ../../rst/network/user_guide/platform_weos4.rst:28 msgid "via a bastion (jump host)" msgstr "bastion (jump ホスト) を使用" #: ../../rst/network/user_guide/platform_ce.rst:31 #: ../../rst/network/user_guide/platform_cnos.rst:29 #: ../../rst/network/user_guide/platform_dellos10.rst:29 #: ../../rst/network/user_guide/platform_dellos6.rst:29 #: ../../rst/network/user_guide/platform_dellos9.rst:29 #: ../../rst/network/user_guide/platform_enos.rst:29 #: ../../rst/network/user_guide/platform_eos.rst:29 #: ../../rst/network/user_guide/platform_eric_eccli.rst:29 #: ../../rst/network/user_guide/platform_exos.rst:30 #: ../../rst/network/user_guide/platform_frr.rst:29 #: ../../rst/network/user_guide/platform_icx.rst:29 #: ../../rst/network/user_guide/platform_ios.rst:29 #: ../../rst/network/user_guide/platform_iosxr.rst:33 #: ../../rst/network/user_guide/platform_ironware.rst:29 #: ../../rst/network/user_guide/platform_junos.rst:32 #: ../../rst/network/user_guide/platform_meraki.rst:25 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:31 #: ../../rst/network/user_guide/platform_netvisor.rst:30 #: ../../rst/network/user_guide/platform_nos.rst:30 #: ../../rst/network/user_guide/platform_nxos.rst:29 #: ../../rst/network/user_guide/platform_routeros.rst:30 #: ../../rst/network/user_guide/platform_slxos.rst:30 #: ../../rst/network/user_guide/platform_voss.rst:30 #: ../../rst/network/user_guide/platform_vyos.rst:29 #: ../../rst/network/user_guide/platform_weos4.rst:30 msgid "Connection Settings" msgstr "接続設定" #: ../../rst/network/user_guide/platform_ce.rst:32 #: ../../rst/network/user_guide/platform_exos.rst:31 #: ../../rst/network/user_guide/platform_iosxr.rst:34 #: ../../rst/network/user_guide/platform_nxos.rst:30 msgid "``ansible_connection:``" msgstr "``ansible_connection:``" #: ../../rst/network/user_guide/platform_ce.rst:32 #: ../../rst/network/user_guide/platform_exos.rst:31 #: ../../rst/network/user_guide/platform_iosxr.rst:34 #: ../../rst/network/user_guide/platform_nxos.rst:30 msgid "``ansible.netcommon.network_cli``" msgstr "``ansible.netcommon.network_cli``" #: ../../rst/network/user_guide/platform_ce.rst:32 #: ../../rst/network/user_guide/platform_iosxr.rst:34 msgid "``ansible.netcommon.netconf``" msgstr "``ansible.netcommon.netconf``" #: ../../rst/network/user_guide/platform_ce.rst:34 #: ../../rst/network/user_guide/platform_cnos.rst:31 #: ../../rst/network/user_guide/platform_dellos10.rst:31 #: ../../rst/network/user_guide/platform_dellos6.rst:31 #: ../../rst/network/user_guide/platform_dellos9.rst:31 #: ../../rst/network/user_guide/platform_enos.rst:31 #: ../../rst/network/user_guide/platform_eos.rst:33 #: ../../rst/network/user_guide/platform_eric_eccli.rst:31 #: ../../rst/network/user_guide/platform_exos.rst:33 #: ../../rst/network/user_guide/platform_frr.rst:31 #: ../../rst/network/user_guide/platform_icx.rst:31 #: ../../rst/network/user_guide/platform_ios.rst:31 #: ../../rst/network/user_guide/platform_iosxr.rst:36 #: ../../rst/network/user_guide/platform_ironware.rst:31 #: ../../rst/network/user_guide/platform_junos.rst:35 #: ../../rst/network/user_guide/platform_netvisor.rst:32 #: ../../rst/network/user_guide/platform_nos.rst:32 #: ../../rst/network/user_guide/platform_nxos.rst:32 #: ../../rst/network/user_guide/platform_routeros.rst:32 #: ../../rst/network/user_guide/platform_slxos.rst:32 #: ../../rst/network/user_guide/platform_voss.rst:32 #: ../../rst/network/user_guide/platform_vyos.rst:31 #: ../../rst/network/user_guide/platform_weos4.rst:32 msgid "|enable_mode|" msgstr "|enable_mode|" #: ../../rst/network/user_guide/platform_ce.rst:34 msgid "not supported by ce OS" msgstr "ce OS ã§ã¯ã‚µãƒãƒ¼ãƒˆãªã—" #: ../../rst/network/user_guide/platform_ce.rst:36 #: ../../rst/network/user_guide/platform_cnos.rst:35 #: ../../rst/network/user_guide/platform_dellos10.rst:35 #: ../../rst/network/user_guide/platform_dellos6.rst:35 #: ../../rst/network/user_guide/platform_dellos9.rst:35 #: ../../rst/network/user_guide/platform_enos.rst:35 #: ../../rst/network/user_guide/platform_eos.rst:39 #: ../../rst/network/user_guide/platform_eric_eccli.rst:33 #: ../../rst/network/user_guide/platform_exos.rst:35 #: ../../rst/network/user_guide/platform_frr.rst:33 #: ../../rst/network/user_guide/platform_icx.rst:34 #: ../../rst/network/user_guide/platform_ios.rst:34 #: ../../rst/network/user_guide/platform_iosxr.rst:38 #: ../../rst/network/user_guide/platform_ironware.rst:35 #: ../../rst/network/user_guide/platform_junos.rst:37 #: ../../rst/network/user_guide/platform_meraki.rst:27 #: ../../rst/network/user_guide/platform_netvisor.rst:34 #: ../../rst/network/user_guide/platform_nos.rst:34 #: ../../rst/network/user_guide/platform_nxos.rst:36 #: ../../rst/network/user_guide/platform_routeros.rst:34 #: ../../rst/network/user_guide/platform_slxos.rst:34 #: ../../rst/network/user_guide/platform_voss.rst:35 #: ../../rst/network/user_guide/platform_vyos.rst:33 #: ../../rst/network/user_guide/platform_weos4.rst:34 msgid "Returned Data Format" msgstr "è¿”ã•れるデータ形å¼" #: ../../rst/network/user_guide/platform_ce.rst:36 #: ../../rst/network/user_guide/platform_iosxr.rst:38 #: ../../rst/network/user_guide/platform_vyos.rst:33 msgid "Refer to individual module documentation" msgstr "å„モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_ce.rst:41 msgid "The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.netconf`` or ``ansible_connection=ansible.netcommon.network_cli`` instead." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``ansible_connection: ansible.netcommon.netconf`` ã¾ãŸã¯ ``ansible_connection=ansible.netcommon.network_cli`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_ce.rst:44 #: ../../rst/network/user_guide/platform_cnos.rst:43 #: ../../rst/network/user_guide/platform_dellos10.rst:44 #: ../../rst/network/user_guide/platform_dellos6.rst:43 #: ../../rst/network/user_guide/platform_dellos9.rst:43 #: ../../rst/network/user_guide/platform_enos.rst:45 #: ../../rst/network/user_guide/platform_eos.rst:48 #: ../../rst/network/user_guide/platform_eric_eccli.rst:41 #: ../../rst/network/user_guide/platform_exos.rst:43 #: ../../rst/network/user_guide/platform_frr.rst:40 #: ../../rst/network/user_guide/platform_icx.rst:41 #: ../../rst/network/user_guide/platform_ios.rst:43 #: ../../rst/network/user_guide/platform_iosxr.rst:47 #: ../../rst/network/user_guide/platform_ironware.rst:44 #: ../../rst/network/user_guide/platform_junos.rst:48 #: ../../rst/network/user_guide/platform_netvisor.rst:42 #: ../../rst/network/user_guide/platform_nos.rst:42 #: ../../rst/network/user_guide/platform_nxos.rst:45 #: ../../rst/network/user_guide/platform_routeros.rst:43 #: ../../rst/network/user_guide/platform_slxos.rst:43 #: ../../rst/network/user_guide/platform_voss.rst:44 #: ../../rst/network/user_guide/platform_vyos.rst:42 #: ../../rst/network/user_guide/platform_weos4.rst:42 msgid "Using CLI in Ansible" msgstr "Ansible ã§ã® CLI ã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_ce.rst:47 msgid "Example CLI inventory ``[ce:vars]``" msgstr "CLI インベントリーã®ä¾‹ ``[ce:vars]``" #: ../../rst/network/user_guide/platform_ce.rst:59 #: ../../rst/network/user_guide/platform_cnos.rst:60 #: ../../rst/network/user_guide/platform_dellos10.rst:61 #: ../../rst/network/user_guide/platform_dellos6.rst:60 #: ../../rst/network/user_guide/platform_dellos9.rst:60 #: ../../rst/network/user_guide/platform_enos.rst:62 #: ../../rst/network/user_guide/platform_eos.rst:65 #: ../../rst/network/user_guide/platform_eric_eccli.rst:55 #: ../../rst/network/user_guide/platform_exos.rst:57 #: ../../rst/network/user_guide/platform_frr.rst:54 #: ../../rst/network/user_guide/platform_icx.rst:58 #: ../../rst/network/user_guide/platform_ios.rst:60 #: ../../rst/network/user_guide/platform_iosxr.rst:62 #: ../../rst/network/user_guide/platform_ironware.rst:61 #: ../../rst/network/user_guide/platform_junos.rst:63 #: ../../rst/network/user_guide/platform_netvisor.rst:56 #: ../../rst/network/user_guide/platform_nos.rst:56 #: ../../rst/network/user_guide/platform_nxos.rst:62 #: ../../rst/network/user_guide/platform_routeros.rst:60 #: ../../rst/network/user_guide/platform_slxos.rst:57 #: ../../rst/network/user_guide/platform_voss.rst:60 #: ../../rst/network/user_guide/platform_vyos.rst:56 #: ../../rst/network/user_guide/platform_weos4.rst:56 msgid "If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration." msgstr "SSH キー (ssh-agent ã‚’å«ã‚€) を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``ansible_password`` 設定を削除ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:60 #: ../../rst/network/user_guide/platform_cnos.rst:61 #: ../../rst/network/user_guide/platform_dellos10.rst:62 #: ../../rst/network/user_guide/platform_dellos6.rst:61 #: ../../rst/network/user_guide/platform_dellos9.rst:61 #: ../../rst/network/user_guide/platform_enos.rst:63 #: ../../rst/network/user_guide/platform_eos.rst:66 #: ../../rst/network/user_guide/platform_eric_eccli.rst:56 #: ../../rst/network/user_guide/platform_exos.rst:58 #: ../../rst/network/user_guide/platform_frr.rst:55 #: ../../rst/network/user_guide/platform_icx.rst:59 #: ../../rst/network/user_guide/platform_ios.rst:61 #: ../../rst/network/user_guide/platform_iosxr.rst:63 #: ../../rst/network/user_guide/platform_ironware.rst:62 #: ../../rst/network/user_guide/platform_junos.rst:64 #: ../../rst/network/user_guide/platform_netvisor.rst:57 #: ../../rst/network/user_guide/platform_nos.rst:57 #: ../../rst/network/user_guide/platform_nxos.rst:63 #: ../../rst/network/user_guide/platform_routeros.rst:61 #: ../../rst/network/user_guide/platform_slxos.rst:58 #: ../../rst/network/user_guide/platform_voss.rst:61 #: ../../rst/network/user_guide/platform_vyos.rst:57 #: ../../rst/network/user_guide/platform_weos4.rst:57 msgid "If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration." msgstr "(bastion/ジャンプホストを経由ã›ãš) ホストã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„ã‚‹å ´åˆã¯ã€``ansible_ssh_common_args`` 設定を削除ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:61 #: ../../rst/network/user_guide/platform_cnos.rst:62 #: ../../rst/network/user_guide/platform_dellos10.rst:63 #: ../../rst/network/user_guide/platform_dellos6.rst:62 #: ../../rst/network/user_guide/platform_dellos9.rst:62 #: ../../rst/network/user_guide/platform_enos.rst:64 #: ../../rst/network/user_guide/platform_eos.rst:67 #: ../../rst/network/user_guide/platform_eric_eccli.rst:57 #: ../../rst/network/user_guide/platform_exos.rst:59 #: ../../rst/network/user_guide/platform_frr.rst:56 #: ../../rst/network/user_guide/platform_icx.rst:60 #: ../../rst/network/user_guide/platform_ios.rst:62 #: ../../rst/network/user_guide/platform_iosxr.rst:64 #: ../../rst/network/user_guide/platform_ironware.rst:63 #: ../../rst/network/user_guide/platform_junos.rst:65 #: ../../rst/network/user_guide/platform_netvisor.rst:58 #: ../../rst/network/user_guide/platform_nos.rst:58 #: ../../rst/network/user_guide/platform_nxos.rst:64 #: ../../rst/network/user_guide/platform_routeros.rst:62 #: ../../rst/network/user_guide/platform_slxos.rst:59 #: ../../rst/network/user_guide/platform_voss.rst:62 #: ../../rst/network/user_guide/platform_vyos.rst:58 #: ../../rst/network/user_guide/platform_weos4.rst:58 msgid "If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables." msgstr "bastion/ジャンプホストを介ã—ã¦ãƒ›ã‚¹ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆã¯ã€``ProxyCommand`` ディレクティブ㫠SSH パスワードをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã€‚ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒæ¼æ´©ã™ã‚‹ã®ã‚’防ããŸã‚ã« (例: ``ps`` 出力)ã€SSH ã¯ç’°å¢ƒå¤‰æ•°ã«ã‚ˆã‚‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã®æä¾›ã‚’ã‚µãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。" #: ../../rst/network/user_guide/platform_ce.rst:64 #: ../../rst/network/user_guide/platform_cnos.rst:65 #: ../../rst/network/user_guide/platform_dellos10.rst:66 #: ../../rst/network/user_guide/platform_dellos6.rst:65 #: ../../rst/network/user_guide/platform_dellos9.rst:65 #: ../../rst/network/user_guide/platform_enos.rst:67 #: ../../rst/network/user_guide/platform_eos.rst:70 #: ../../rst/network/user_guide/platform_eric_eccli.rst:60 #: ../../rst/network/user_guide/platform_exos.rst:62 #: ../../rst/network/user_guide/platform_frr.rst:59 #: ../../rst/network/user_guide/platform_icx.rst:63 #: ../../rst/network/user_guide/platform_ios.rst:65 #: ../../rst/network/user_guide/platform_iosxr.rst:67 #: ../../rst/network/user_guide/platform_ironware.rst:66 #: ../../rst/network/user_guide/platform_junos.rst:68 #: ../../rst/network/user_guide/platform_netvisor.rst:61 #: ../../rst/network/user_guide/platform_nos.rst:61 #: ../../rst/network/user_guide/platform_nxos.rst:67 #: ../../rst/network/user_guide/platform_routeros.rst:66 #: ../../rst/network/user_guide/platform_slxos.rst:62 #: ../../rst/network/user_guide/platform_voss.rst:65 #: ../../rst/network/user_guide/platform_vyos.rst:61 #: ../../rst/network/user_guide/platform_weos4.rst:61 msgid "Example CLI task" msgstr "CLI タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_ce.rst:75 #: ../../rst/network/user_guide/platform_iosxr.rst:78 #: ../../rst/network/user_guide/platform_junos.rst:79 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:38 msgid "Using NETCONF in Ansible" msgstr "Ansible ã§ã® NETCONF ã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_ce.rst:78 #: ../../rst/network/user_guide/platform_iosxr.rst:81 #: ../../rst/network/user_guide/platform_junos.rst:82 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:41 msgid "Enabling NETCONF" msgstr "NETCONF ã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/platform_ce.rst:80 #: ../../rst/network/user_guide/platform_iosxr.rst:83 #: ../../rst/network/user_guide/platform_junos.rst:84 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:43 msgid "Before you can use NETCONF to connect to a switch, you must:" msgstr "NETCONF を使用ã—ã¦ã‚¹ã‚¤ãƒƒãƒã«æŽ¥ç¶šã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:82 #: ../../rst/network/user_guide/platform_iosxr.rst:85 #: ../../rst/network/user_guide/platform_junos.rst:86 msgid "install the ``ncclient`` python package on your control node(s) with ``pip install ncclient``" msgstr "``pip install ncclient`` を使用ã—ã¦ã€``ncclient`` python パッケージをコントロールノードã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:83 msgid "enable NETCONF on the CloudEngine OS device(s)" msgstr "CloudEngine OS デãƒã‚¤ã‚¹ã§ã® NETCONF ã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/platform_ce.rst:85 msgid "To enable NETCONF on a new switch using Ansible, use the ``community.network.ce_config`` module with the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this:" msgstr "Ansibleを使用ã™ã‚‹æ–°ã—ã„スイッãƒã§ NETCONF を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ ``community.network.ce_config`` 使用ã—ã¾ã™ã€‚上記㮠CLI ã®ä¾‹ã®ã‚ˆã†ã«ãƒ—ラットフォームレベルã®å¤‰æ•°ã‚’設定ã—ã€æ¬¡ã®ã‚ˆã†ãª Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:96 #: ../../rst/network/user_guide/platform_iosxr.rst:97 #: ../../rst/network/user_guide/platform_junos.rst:98 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:58 msgid "Once NETCONF is enabled, change your variables to use the NETCONF connection." msgstr "NETCONF を有効ã«ã—ãŸã‚‰ã€å¤‰æ•°ã‚’変更ã—㦠NETCONF 接続を使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:99 msgid "Example NETCONF inventory ``[ce:vars]``" msgstr "NETCONF インベントリーã®ä¾‹ ``[ce:vars]``" #: ../../rst/network/user_guide/platform_ce.rst:112 #: ../../rst/network/user_guide/platform_iosxr.rst:113 #: ../../rst/network/user_guide/platform_junos.rst:114 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:73 msgid "Example NETCONF task" msgstr "NETCONF タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_ce.rst:124 msgid "Notes" msgstr "備考" #: ../../rst/network/user_guide/platform_ce.rst:127 msgid "Modules that work with ``ansible.netcommon.network_cli``" msgstr "``ansible.netcommon.network_cli`` ã¨é€£æºã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/network/user_guide/platform_ce.rst:157 msgid "Modules that work with ``ansible.netcommon.netconf``" msgstr "``ansible.netcommon.netconf`` ã¨é€£æºã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/network/user_guide/shared_snippets/SSH_warning.txt:2 msgid "Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with :ref:`Ansible Vault `." msgstr "パスワードをプレーンテキストã§ä¿å­˜ã—ãªã„ã§ãã ã•ã„。SSH キーを使用ã—㦠SSH 接続をèªè¨¼ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansible 㯠SSH キーを管ç†ã™ã‚‹ãŸã‚ã® ssh-agent をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚SSH 接続ã®èªè¨¼ã«ãƒ‘スワードを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€:ref:`Ansible Vault ` ã§æš—å·åŒ–ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ce.rst:213 #: ../../rst/network/user_guide/platform_cnos.rst:78 #: ../../rst/network/user_guide/platform_dellos10.rst:80 #: ../../rst/network/user_guide/platform_dellos6.rst:79 #: ../../rst/network/user_guide/platform_dellos9.rst:79 #: ../../rst/network/user_guide/platform_enos.rst:80 #: ../../rst/network/user_guide/platform_eos.rst:140 #: ../../rst/network/user_guide/platform_eric_eccli.rst:73 #: ../../rst/network/user_guide/platform_exos.rst:108 #: ../../rst/network/user_guide/platform_frr.rst:73 #: ../../rst/network/user_guide/platform_icx.rst:77 #: ../../rst/network/user_guide/platform_ios.rst:79 #: ../../rst/network/user_guide/platform_iosxr.rst:130 #: ../../rst/network/user_guide/platform_ironware.rst:80 #: ../../rst/network/user_guide/platform_junos.rst:129 #: ../../rst/network/user_guide/platform_meraki.rst:44 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:133 #: ../../rst/network/user_guide/platform_netvisor.rst:78 #: ../../rst/network/user_guide/platform_nos.rst:76 #: ../../rst/network/user_guide/platform_nxos.rst:166 #: ../../rst/network/user_guide/platform_routeros.rst:80 #: ../../rst/network/user_guide/platform_slxos.rst:77 #: ../../rst/network/user_guide/platform_voss.rst:78 #: ../../rst/network/user_guide/platform_vyos.rst:74 #: ../../rst/network/user_guide/platform_weos4.rst:88 msgid ":ref:`timeout_options`" msgstr ":ref:`timeout_options`" #: ../../rst/network/user_guide/platform_cnos.rst:5 msgid "CNOS Platform Options" msgstr "CNOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_cnos.rst:7 msgid "CNOS is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on CNOS in Ansible." msgstr "CNOS ã¯ã€`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® CNOS ã§ Enable Mode を有効ã«ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_cnos.rst:29 #: ../../rst/network/user_guide/platform_dellos10.rst:29 #: ../../rst/network/user_guide/platform_dellos6.rst:29 #: ../../rst/network/user_guide/platform_dellos9.rst:29 #: ../../rst/network/user_guide/platform_enos.rst:29 #: ../../rst/network/user_guide/platform_eric_eccli.rst:29 #: ../../rst/network/user_guide/platform_frr.rst:29 #: ../../rst/network/user_guide/platform_icx.rst:29 #: ../../rst/network/user_guide/platform_ios.rst:29 #: ../../rst/network/user_guide/platform_ironware.rst:29 #: ../../rst/network/user_guide/platform_netvisor.rst:30 #: ../../rst/network/user_guide/platform_slxos.rst:30 #: ../../rst/network/user_guide/platform_voss.rst:30 #: ../../rst/network/user_guide/platform_vyos.rst:29 msgid "``ansible_connection: ansible.netcommon.network_cli``" msgstr "``ansible_connection: ansible.netcommon.network_cli``" #: ../../rst/network/user_guide/platform_cnos.rst:31 #: ../../rst/network/user_guide/platform_dellos10.rst:31 #: ../../rst/network/user_guide/platform_dellos6.rst:31 #: ../../rst/network/user_guide/platform_dellos9.rst:31 #: ../../rst/network/user_guide/platform_enos.rst:31 #: ../../rst/network/user_guide/platform_icx.rst:31 #: ../../rst/network/user_guide/platform_ios.rst:31 #: ../../rst/network/user_guide/platform_ironware.rst:31 #: ../../rst/network/user_guide/platform_nxos.rst:32 msgid "supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:``" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡: ``ansible_become: yes`` ã‚’ã€``ansible_become_method: enable`` ãŠã‚ˆã³ ``ansible_become_password:`` ã¨ä½µç”¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_cnos.rst:35 #: ../../rst/network/user_guide/platform_dellos10.rst:35 #: ../../rst/network/user_guide/platform_dellos6.rst:35 #: ../../rst/network/user_guide/platform_dellos9.rst:35 #: ../../rst/network/user_guide/platform_enos.rst:35 #: ../../rst/network/user_guide/platform_eos.rst:39 #: ../../rst/network/user_guide/platform_eric_eccli.rst:33 #: ../../rst/network/user_guide/platform_exos.rst:35 #: ../../rst/network/user_guide/platform_frr.rst:33 #: ../../rst/network/user_guide/platform_icx.rst:34 #: ../../rst/network/user_guide/platform_ios.rst:34 #: ../../rst/network/user_guide/platform_ironware.rst:35 #: ../../rst/network/user_guide/platform_junos.rst:37 #: ../../rst/network/user_guide/platform_netvisor.rst:34 #: ../../rst/network/user_guide/platform_nos.rst:34 #: ../../rst/network/user_guide/platform_nxos.rst:36 #: ../../rst/network/user_guide/platform_routeros.rst:34 #: ../../rst/network/user_guide/platform_slxos.rst:34 #: ../../rst/network/user_guide/platform_voss.rst:35 #: ../../rst/network/user_guide/platform_weos4.rst:34 msgid "``stdout[0].``" msgstr "``stdout[0].``" #: ../../rst/network/user_guide/platform_cnos.rst:40 #: ../../rst/network/user_guide/platform_dellos10.rst:40 #: ../../rst/network/user_guide/platform_dellos6.rst:40 #: ../../rst/network/user_guide/platform_dellos9.rst:40 #: ../../rst/network/user_guide/platform_enos.rst:42 #: ../../rst/network/user_guide/platform_ios.rst:40 #: ../../rst/network/user_guide/platform_ironware.rst:41 #: ../../rst/network/user_guide/platform_vyos.rst:39 msgid "The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``ansible_connection: ansible.netcommon.network_cli`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_cnos.rst:46 msgid "Example CLI ``group_vars/cnos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/cnos.yml``" #: ../../rst/network/user_guide/platform_dellos10.rst:5 msgid "Dell OS10 Platform Options" msgstr "Dell OS10 プラットフォームオプション" #: ../../rst/network/user_guide/platform_dellos10.rst:7 msgid "The `dellemc.os10 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS10 in Ansible." msgstr "`dellemc.os10 `_ コレクション㯠Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® OS10 ã§ Enable Mode を使用ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_dellos10.rst:47 msgid "Example CLI ``group_vars/dellos10.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/dellos10.yml``" #: ../../rst/network/user_guide/platform_dellos6.rst:5 msgid "Dell OS6 Platform Options" msgstr "Dell OS6 プラットフォームオプション" #: ../../rst/network/user_guide/platform_dellos6.rst:7 msgid "The `dellemc.os6 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS6 in Ansible." msgstr "`dellemc.os6 `_ コレクション㯠Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® OS6 ã§ Enable Mode ã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_dellos6.rst:46 msgid "Example CLI ``group_vars/dellos6.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/dellos6.yml``" #: ../../rst/network/user_guide/platform_dellos9.rst:5 msgid "Dell OS9 Platform Options" msgstr "Dell OS9 プラットフォームオプション" #: ../../rst/network/user_guide/platform_dellos9.rst:7 msgid "The `dellemc.os9 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS9 in Ansible." msgstr "`dellemc.os9 `_ コレクション㯠Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® OS9 ã§ Enable Mode ã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_dellos9.rst:46 msgid "Example CLI ``group_vars/dellos9.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/dellos9.yml``" #: ../../rst/network/user_guide/platform_enos.rst:5 msgid "ENOS Platform Options" msgstr "ENOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_enos.rst:7 msgid "ENOS is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ENOS in Ansible." msgstr "ENOS ã¯ã€`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® ENOS ã§ Enable Mode を有効ã«ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_enos.rst:48 msgid "Example CLI ``group_vars/enos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/enos.yml``" #: ../../rst/network/user_guide/platform_eos.rst:5 msgid "EOS Platform Options" msgstr "EOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_eos.rst:7 msgid "The `Arista EOS `_ collection supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "`Arista EOS `_ コレクションã¯è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€å„接続ãŒã©ã®ã‚ˆã†ã« Ansible ã§ã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã¨ã€ãã®ä½¿ç”¨æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:19 msgid "eAPI" msgstr "eAPI" #: ../../rst/network/user_guide/platform_eos.rst:21 #: ../../rst/network/user_guide/platform_exos.rst:22 #: ../../rst/network/user_guide/platform_meraki.rst:21 #: ../../rst/network/user_guide/platform_nxos.rst:21 msgid "HTTP(S)" msgstr "HTTP(S)" #: ../../rst/network/user_guide/platform_eos.rst:23 #: ../../rst/network/user_guide/platform_exos.rst:24 #: ../../rst/network/user_guide/platform_nxos.rst:23 msgid "uses HTTPS certificates if present" msgstr "HTTPS 証明書ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:27 #: ../../rst/network/user_guide/platform_exos.rst:28 #: ../../rst/network/user_guide/platform_nxos.rst:27 msgid "via a web proxy" msgstr "Web プロキシー経由" #: ../../rst/network/user_guide/platform_eos.rst:29 msgid "``ansible_connection:`` ``ansible.netcommon.network_cli``" msgstr "``ansible_connection:`` ``ansible.netcommon.network_cli``" #: ../../rst/network/user_guide/platform_eos.rst:29 msgid "``ansible_connection:`` ``ansible.netcommon.httpapi``" msgstr "``ansible_connection:`` ``ansible.netcommon.httpapi``" #: ../../rst/network/user_guide/platform_eos.rst:33 msgid "supported: |br|" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡: |br|" #: ../../rst/network/user_guide/platform_eos.rst:35 msgid "use ``ansible_become: yes`` with ``ansible_become_method: enable``" msgstr "``ansible_become: yes`` ã‚’ ``ansible_become_method: enable`` ã¨ä½µç”¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:35 msgid "``httpapi`` uses ``ansible_become: yes`` with ``ansible_become_method: enable``" msgstr "``httpapi`` ã¯ã€``ansible_become: yes`` ã‚’ ``ansible_become_method: enable`` ã¨ä½µç”¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:39 #: ../../rst/network/user_guide/platform_exos.rst:35 #: ../../rst/network/user_guide/platform_nxos.rst:36 msgid "``stdout[0].messages[0].``" msgstr "``stdout[0].messages[0].``" #: ../../rst/network/user_guide/platform_eos.rst:45 #: ../../rst/network/user_guide/platform_nxos.rst:42 msgid "The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi`` instead." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``ansible_connection: ansible.netcommon.network_cli`` ã¾ãŸã¯ ``ansible_connection: ansible.netcommon.httpapi`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_eos.rst:51 msgid "Example CLI ``group_vars/eos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/eos.yml``" #: ../../rst/network/user_guide/platform_eos.rst:83 msgid "Using eAPI in Ansible" msgstr "Ansible ã§ã® eAPI ã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_eos.rst:86 msgid "Enabling eAPI" msgstr "EAPI ã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/platform_eos.rst:88 msgid "Before you can use eAPI to connect to a switch, you must enable eAPI. To enable eAPI on a new switch with Ansible, use the ``arista.eos.eos_eapi`` module through the CLI connection. Set up ``group_vars/eos.yml`` just like in the CLI example above, then run a playbook task like this:" msgstr "eAPI を使用ã—ã¦ã‚¹ã‚¤ãƒƒãƒã«æŽ¥ç¶šã™ã‚‹å‰ã«ã€eAPI を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible を使用ã™ã‚‹æ–°ã—ã„スイッãƒã§ eAPI を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続を介ã—㦠``arista.eos.eos_eapi`` モジュールを使用ã—ã¾ã™ã€‚上記㮠CLI ã®ä¾‹ã®ã‚ˆã†ã« ``group_vars/eos.yml`` を設定ã—ã€æ¬¡ã®ã‚ˆã†ã« Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:100 msgid "You can find more options for enabling HTTP/HTTPS connections in the :ref:`arista.eos.eos_eapi ` module documentation." msgstr "HTTP/HTTPS 接続を有効ã«ã™ã‚‹ã‚ªãƒ—ションã®è©³ç´°ã¯ã€:ref:`arista.eos.eos_eapi ` モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_eos.rst:102 msgid "Once eAPI is enabled, change your ``group_vars/eos.yml`` to use the eAPI connection." msgstr "eAPI を有効ã«ã—ãŸã‚‰ã€``group_vars/eos.yml`` を変更ã—㦠eAPI 接続を使用ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:105 msgid "Example eAPI ``group_vars/eos.yml``" msgstr "eAPI ã®ä¾‹ ``group_vars/eos.yml``" #: ../../rst/network/user_guide/platform_eos.rst:118 #: ../../rst/network/user_guide/platform_exos.rst:88 #: ../../rst/network/user_guide/platform_nxos.rst:111 msgid "If you are accessing your host directly (not through a web proxy) you can remove the ``proxy_env`` configuration." msgstr "(Web プロキシーを経由ã›ãš) ホストã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã„ã‚‹å ´åˆã¯ã€``proxy_env`` 設定を削除ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:119 #: ../../rst/network/user_guide/platform_exos.rst:89 #: ../../rst/network/user_guide/platform_nxos.rst:112 msgid "If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``." msgstr "``https`` を使用ã—㦠Web プロキシー経由ã§ãƒ›ã‚¹ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆã¯ã€``http_proxy`` ã‚’ ``https_proxy`` ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eos.rst:123 msgid "Example eAPI task" msgstr "eAPI タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_eos.rst:134 msgid "In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module in the task." msgstr "ã“ã®ä¾‹ã§ã¯ã€``group_vars`` ã§å®šç¾©ã•れ㟠``proxy_env`` 変数ãŒã€ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã•れるモジュール㮠``environment`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ¸¡ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eric_eccli.rst:5 msgid "ERIC_ECCLI Platform Options" msgstr "ERIC_ECCLI プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_eric_eccli.rst:7 msgid "Extreme ERIC_ECCLI is part of the `community.network `_ collection and only supports CLI connections today. This page offers details on how to use ``ansible.netcommon.network_cli`` on ERIC_ECCLI in Ansible." msgstr "Extreme ERIC_ECCLI 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® ERIC_ECCLI ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eric_eccli.rst:31 msgid "not supported by ERIC_ECCLI" msgstr "ERIC_ECCLI ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。" #: ../../rst/network/user_guide/platform_eric_eccli.rst:38 msgid "ERIC_ECCLI does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "ERIC_ECCLI ã¯ã€``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_eric_eccli.rst:44 msgid "Example CLI ``group_vars/eric_eccli.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/eric_eccli.yml``" #: ../../rst/network/user_guide/platform_exos.rst:5 msgid "EXOS Platform Options" msgstr "EXOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_exos.rst:7 msgid "Extreme EXOS is part of the `community.network `_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "Extreme EXOS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã§ã®å„接続ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã—ã€ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã•れるã‹ã‚’詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_exos.rst:20 msgid "EXOS-API" msgstr "EXOS-API" #: ../../rst/network/user_guide/platform_exos.rst:31 #: ../../rst/network/user_guide/platform_nxos.rst:30 msgid "``ansible.netcommon.httpapi``" msgstr "``ansible.netcommon.httpapi``" #: ../../rst/network/user_guide/platform_exos.rst:33 msgid "not supported by EXOS" msgstr "EXOS ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_exos.rst:40 msgid "EXOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi``." msgstr "EXOS ã¯ã€``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` ã¾ãŸã¯ ``ansible_connection: ansible.netcommon.httpapi`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_exos.rst:46 msgid "Example CLI ``group_vars/exos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/exos.yml``" #: ../../rst/network/user_guide/platform_exos.rst:74 msgid "Using EXOS-API in Ansible" msgstr "Ansible ã§ã® EXOS-API ã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_exos.rst:77 msgid "Example EXOS-API ``group_vars/exos.yml``" msgstr "EXOS-API ã®ä¾‹ ``group_vars/exos.yml``" #: ../../rst/network/user_guide/platform_exos.rst:93 msgid "Example EXOS-API task" msgstr "EXOS-API タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_exos.rst:102 #: ../../rst/network/user_guide/platform_nxos.rst:127 msgid "In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module used in the task." msgstr "ã“ã®ä¾‹ã§ã¯ã€``proxy_env`` ã§å®šç¾©ã•れ㟠``group_vars`` 変数ã¯ã€ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã•れるモジュール㮠``environment`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ¸¡ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_frr.rst:5 msgid "FRR Platform Options" msgstr "FRR プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_frr.rst:7 msgid "The `FRR `_ collection supports the ``ansible.netcommon.network_cli`` connection. This section provides details on how to use this connection for Free Range Routing (FRR)." msgstr "`FRR `_ コレクションã¯ã€``ansible.netcommon.network_cli`` 接続をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚本セクションã§ã¯ã€ã“ã®æŽ¥ç¶šã‚’ Free Range Routing (FRR) ã«ä½¿ç”¨ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_frr.rst:31 #: ../../rst/network/user_guide/platform_iosxr.rst:36 #: ../../rst/network/user_guide/platform_vyos.rst:31 msgid "not supported" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–" #: ../../rst/network/user_guide/platform_frr.rst:43 msgid "Example CLI ``group_vars/frr.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/frr.yml``" #: ../../rst/network/user_guide/platform_frr.rst:53 msgid "The ``ansible_user`` should be a part of the ``frrvty`` group and should have the default shell set to ``/bin/vtysh``." msgstr "``ansible_user`` 㯠``frrvty`` グループã«å«ã¾ã‚Œã‚‹ã¯ãšã§ã™ã€‚デフォルトã®ã‚·ã‚§ãƒ«ã¯ ``/bin/vtysh`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_icx.rst:5 msgid "ICX Platform Options" msgstr "ICX プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_icx.rst:7 msgid "ICX is part of the `community.network `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ICX in Ansible." msgstr "ICX ã¯ã€`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® ICX ã§ Enable Mode を有効ã«ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_icx.rst:44 msgid "Example CLI ``group_vars/icx.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/icx.yml``" #: ../../rst/network/user_guide/platform_index.rst:5 #: ../../rst/network/user_guide/platform_index.rst:9 msgid "Platform Options" msgstr "プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_index.rst:7 msgid "Some Ansible Network platforms support multiple connection types, privilege escalation (``enable`` mode), or other options. The pages in this section offer standardized guides to understanding available options on each network platform. We welcome contributions from community-maintained platforms to this section." msgstr "一部㮠Ansible Network プラットフォームã¯ã€è¤‡æ•°ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã€æ¨©é™ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ (``enable`` モード) ã€ã¾ãŸã¯ãã®ä»–ã®ã‚ªãƒ—ションをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚本セクションã®ãƒšãƒ¼ã‚¸ã§ã¯ã€å„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã§åˆ©ç”¨å¯èƒ½ãªã‚ªãƒ—ションをç†è§£ã™ã‚‹æ¨™æº–ガイドãŒç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚コミュニティーãŒç®¡ç†ã™ã‚‹ãƒ—ラットフォームã‹ã‚‰ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®è²¢çŒ®ã‚’歓迎ã„ãŸã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_index.rst:42 msgid "Settings by Platform" msgstr "プラットフォーム別ã®è¨­å®š" #: ../../rst/network/user_guide/platform_index.rst:59 msgid "``ansible_connection:`` settings available" msgstr "``ansible_connection:`` 設定ãŒåˆ©ç”¨å¯èƒ½" #: ../../rst/network/user_guide/platform_index.rst:61 msgid "Network OS" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ OS" #: ../../rst/network/user_guide/platform_index.rst:61 msgid "``ansible_network_os:``" msgstr "``ansible_network_os:``" #: ../../rst/network/user_guide/platform_index.rst:61 msgid "network_cli" msgstr "network_cli" #: ../../rst/network/user_guide/platform_index.rst:61 msgid "netconf" msgstr "netconf" #: ../../rst/network/user_guide/platform_index.rst:61 msgid "httpapi" msgstr "httpapi" #: ../../rst/network/user_guide/platform_index.rst:63 msgid "`Arista EOS`_ `[†]`_" msgstr "`Arista EOS`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:63 msgid "``arista.eos.eos``" msgstr "``arista.eos.eos``" #: ../../rst/network/user_guide/platform_index.rst:63 #: ../../rst/network/user_guide/platform_index.rst:64 #: ../../rst/network/user_guide/platform_index.rst:65 #: ../../rst/network/user_guide/platform_index.rst:66 #: ../../rst/network/user_guide/platform_index.rst:67 #: ../../rst/network/user_guide/platform_index.rst:68 #: ../../rst/network/user_guide/platform_index.rst:69 #: ../../rst/network/user_guide/platform_index.rst:70 #: ../../rst/network/user_guide/platform_index.rst:71 #: ../../rst/network/user_guide/platform_index.rst:72 #: ../../rst/network/user_guide/platform_index.rst:73 #: ../../rst/network/user_guide/platform_index.rst:74 #: ../../rst/network/user_guide/platform_index.rst:75 #: ../../rst/network/user_guide/platform_index.rst:76 #: ../../rst/network/user_guide/platform_index.rst:77 #: ../../rst/network/user_guide/platform_index.rst:78 #: ../../rst/network/user_guide/platform_index.rst:79 #: ../../rst/network/user_guide/platform_index.rst:80 #: ../../rst/network/user_guide/platform_index.rst:81 #: ../../rst/network/user_guide/platform_index.rst:82 #: ../../rst/network/user_guide/platform_index.rst:83 #: ../../rst/network/user_guide/platform_index.rst:84 #: ../../rst/network/user_guide/platform_index.rst:85 #: ../../rst/network/user_guide/platform_index.rst:86 #: ../../rst/network/user_guide/platform_index.rst:87 #: ../../rst/network/user_guide/platform_index.rst:88 #: ../../rst/network/user_guide/platform_index.rst:89 #: ../../rst/network/user_guide/platform_index.rst:90 #: ../../rst/network/user_guide/platform_index.rst:91 msgid "✓" msgstr "✓" #: ../../rst/network/user_guide/platform_index.rst:64 msgid "`Ciena SAOS6`_" msgstr "`Ciena SAOS6`_" #: ../../rst/network/user_guide/platform_index.rst:64 msgid "``ciena.saos6.saos6``" msgstr "``ciena.saos6.saos6``" #: ../../rst/network/user_guide/platform_index.rst:65 msgid "`Cisco ASA`_ `[†]`_" msgstr "`Cisco ASA`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:65 msgid "``cisco.asa.asa``" msgstr "``cisco.asa.asa``" #: ../../rst/network/user_guide/platform_index.rst:66 msgid "`Cisco IOS`_ `[†]`_" msgstr "`Cisco IOS`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:66 msgid "``cisco.ios.ios``" msgstr "``cisco.ios.ios``" #: ../../rst/network/user_guide/platform_index.rst:67 msgid "`Cisco IOS XR`_ `[†]`_" msgstr "`Cisco IOS XR`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:67 msgid "``cisco.iosxr.iosxr``" msgstr "``cisco.iosxr.iosxr``" #: ../../rst/network/user_guide/platform_index.rst:68 msgid "`Cisco NX-OS`_ `[†]`_" msgstr "`Cisco NX-OS`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:68 msgid "``cisco.nxos.nxos``" msgstr "``cisco.nxos.nxos``" #: ../../rst/network/user_guide/platform_index.rst:69 msgid "`Cloudengine OS`_" msgstr "`Cloudengine OS`_" #: ../../rst/network/user_guide/platform_index.rst:69 msgid "``community.network.ce``" msgstr "``community.network.ce``" #: ../../rst/network/user_guide/platform_index.rst:70 msgid "`Dell OS6`_" msgstr "`Dell OS6`_" #: ../../rst/network/user_guide/platform_index.rst:70 msgid "``dellemc.os6.os6``" msgstr "``dellemc.os6.os6``" #: ../../rst/network/user_guide/platform_index.rst:71 msgid "`Dell OS9`_" msgstr "`Dell OS9`_" #: ../../rst/network/user_guide/platform_index.rst:71 msgid "``dellemc.os9.os9``" msgstr "``dellemc.os9.os9``" #: ../../rst/network/user_guide/platform_index.rst:72 msgid "`Dell OS10`_" msgstr "`Dell OS10`_" #: ../../rst/network/user_guide/platform_index.rst:72 msgid "``dellemc.os10.os10``" msgstr "``dellemc.os10.os10``" #: ../../rst/network/user_guide/platform_index.rst:73 msgid "`Ericsson ECCLI`_" msgstr "`Ericsson ECCLI`_" #: ../../rst/network/user_guide/platform_index.rst:73 msgid "``community.network.eric_eccli``" msgstr "``community.network.eric_eccli``" #: ../../rst/network/user_guide/platform_index.rst:74 msgid "`Extreme EXOS`_" msgstr "`Extreme EXOS`_" #: ../../rst/network/user_guide/platform_index.rst:74 msgid "``community.network.exos``" msgstr "``community.network.exos``" #: ../../rst/network/user_guide/platform_index.rst:75 msgid "`Extreme IronWare`_" msgstr "`Extreme IronWare`_" #: ../../rst/network/user_guide/platform_index.rst:75 msgid "``community.network.ironware``" msgstr "``community.network.ironware``" #: ../../rst/network/user_guide/platform_index.rst:76 msgid "`Extreme NOS`_" msgstr "`Extreme NOS`_" #: ../../rst/network/user_guide/platform_index.rst:76 msgid "``community.network.nos``" msgstr "``community.network.nos``" #: ../../rst/network/user_guide/platform_index.rst:77 msgid "`Extreme SLX-OS`_" msgstr "`Extreme SLX-OS`_" #: ../../rst/network/user_guide/platform_index.rst:77 msgid "``community.network.slxos``" msgstr "``community.network.slxos``" #: ../../rst/network/user_guide/platform_index.rst:78 msgid "`Extreme VOSS`_" msgstr "`Extreme VOSS`_" #: ../../rst/network/user_guide/platform_index.rst:78 msgid "``community.network.voss``" msgstr "``community.network.voss``" #: ../../rst/network/user_guide/platform_index.rst:79 msgid "`F5 BIG-IP`_" msgstr "`F5 BIG-IP`_" #: ../../rst/network/user_guide/platform_index.rst:80 msgid "`F5 BIG-IQ`_" msgstr "`F5 BIG-IQ`_" #: ../../rst/network/user_guide/platform_index.rst:81 msgid "`Junos OS`_ `[†]`_" msgstr "`Junos OS`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:81 msgid "``junipernetworks.junos.junos``" msgstr "``junipernetworks.junos.junos``" #: ../../rst/network/user_guide/platform_index.rst:82 msgid "`Lenovo CNOS`_" msgstr "`Lenovo CNOS`_" #: ../../rst/network/user_guide/platform_index.rst:82 msgid "``community.network.cnos``" msgstr "``community.network.cnos``" #: ../../rst/network/user_guide/platform_index.rst:83 msgid "`Lenovo ENOS`_" msgstr "`Lenovo ENOS`_" #: ../../rst/network/user_guide/platform_index.rst:83 msgid "``community.network.enos``" msgstr "``community.network.enos``" #: ../../rst/network/user_guide/platform_index.rst:84 msgid "`Meraki`_" msgstr "`Meraki`_" #: ../../rst/network/user_guide/platform_index.rst:85 msgid "`MikroTik RouterOS`_" msgstr "`MikroTik RouterOS`_" #: ../../rst/network/user_guide/platform_index.rst:85 msgid "``community.network.routeros``" msgstr "``community.network.routeros``" #: ../../rst/network/user_guide/platform_index.rst:86 msgid "`Nokia SR OS`_" msgstr "`Nokia SR OS`_" #: ../../rst/network/user_guide/platform_index.rst:87 msgid "`Pluribus Netvisor`_" msgstr "`Pluribus Netvisor`_" #: ../../rst/network/user_guide/platform_index.rst:87 msgid "``community.network.netvisor``" msgstr "``community.network.netvisor``" #: ../../rst/network/user_guide/platform_index.rst:88 msgid "`Ruckus ICX`_" msgstr "`Ruckus ICX`_" #: ../../rst/network/user_guide/platform_index.rst:88 msgid "``community.network.icx``" msgstr "``community.network.icx``" #: ../../rst/network/user_guide/platform_index.rst:89 msgid "`VyOS`_ `[†]`_" msgstr "`VyOS`_ `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:89 msgid "``vyos.vyos.vyos``" msgstr "``vyos.vyos.vyos``" #: ../../rst/network/user_guide/platform_index.rst:90 msgid "`Westermo WeOS 4`_" msgstr "`Westermo WeOS 4`_" #: ../../rst/network/user_guide/platform_index.rst:90 msgid "``community.network.weos4``" msgstr "``community.network.weos4``" #: ../../rst/network/user_guide/platform_index.rst:91 msgid "OS that supports Netconf `[†]`_" msgstr "Netconf ã«å¯¾å¿œã™ã‚‹ OS `[†]`_" #: ../../rst/network/user_guide/platform_index.rst:91 msgid "````" msgstr "````" #: ../../rst/network/user_guide/platform_index.rst:124 msgid "**[†]** Maintained by Ansible Network Team" msgstr "**[†]** Ansible Network Team ãŒç®¡ç†" #: ../../rst/network/user_guide/platform_ios.rst:5 msgid "IOS Platform Options" msgstr "IOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_ios.rst:7 msgid "The `Cisco IOS `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IOS in Ansible." msgstr "`Cisco IOS `_ コレクション㯠Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® IOS ã§ Enable Mode を有効ã«ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ios.rst:46 msgid "Example CLI ``group_vars/ios.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/ios.yml``" #: ../../rst/network/user_guide/platform_iosxr.rst:5 msgid "IOS-XR Platform Options" msgstr "IOS-XR プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_iosxr.rst:7 msgid "The `Cisco IOS-XR collection `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "`Cisco IOS-XR collection `_ ã¯è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã§å„接続ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã€ãŠã‚ˆã³ãã®ä½¿ç”¨æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_iosxr.rst:21 msgid "only for modules ``iosxr_banner``, ``iosxr_interface``, ``iosxr_logging``, ``iosxr_system``, ``iosxr_user``" msgstr "モジュール㮠``iosxr_banner``ã€``iosxr_interface``ã€``iosxr_logging``ã€``iosxr_system``ã€``iosxr_user`` ã®ã¿" #: ../../rst/network/user_guide/platform_iosxr.rst:44 #: ../../rst/network/user_guide/platform_junos.rst:45 msgid "The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.netconf`` instead." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``ansible_connection: ansible.netcommon.network_cli`` ã¾ãŸã¯ ``ansible_connection: ansible.netcommon.netconf`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_iosxr.rst:50 msgid "Example CLI inventory ``[iosxr:vars]``" msgstr "CLI インベントリーã®ä¾‹ ``[iosxr:vars]``" #: ../../rst/network/user_guide/platform_iosxr.rst:86 msgid "enable NETCONF on the Cisco IOS-XR device(s)" msgstr "Cisco IOS-XR デãƒã‚¤ã‚¹ã§ NETCONF を有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_iosxr.rst:88 msgid "To enable NETCONF on a new switch via Ansible, use the ``cisco.iosxr.iosxr_netconf`` module through the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this:" msgstr "Ansible を介ã—ã¦æ–°ã—ã„スイッãƒã§ NETCONF を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続を介ã—㦠``cisco.iosxr.iosxr_netconf`` モジュールを使用ã—ã¾ã™ã€‚上記㮠CLI ã®ä¾‹ã®ã‚ˆã†ã«ãƒ—ラットフォームレベルã®å¤‰æ•°ã‚’設定ã—ã€æ¬¡ã®ã‚ˆã†ã« Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_iosxr.rst:100 msgid "Example NETCONF inventory ``[iosxr:vars]``" msgstr "NETCONF インベントリーã®ä¾‹ ``[iosxr:vars]``" #: ../../rst/network/user_guide/platform_ironware.rst:5 msgid "IronWare Platform Options" msgstr "IronWare プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_ironware.rst:7 msgid "IronWare is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IronWare in Ansible." msgstr "IronWare ã¯ã€`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€Enable Mode (Privilege Escalation) をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® IronWare ã§ Enable Mode を有効ã«ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_ironware.rst:47 msgid "Example CLI ``group_vars/mlx.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/mlx.yml``" #: ../../rst/network/user_guide/platform_junos.rst:5 msgid "Junos OS Platform Options" msgstr "Junos OS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_junos.rst:7 msgid "The `Juniper Junos OS `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "`Juniper Junos OS `_ ã¯è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã§å„接続ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã€ãŠã‚ˆã³ãã®ä½¿ç”¨æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_junos.rst:21 msgid "``junos_netconf`` & ``junos_command`` modules only" msgstr "``junos_netconf`` モジュールãŠã‚ˆã³ ``junos_command`` モジュールã®ã¿" #: ../../rst/network/user_guide/platform_junos.rst:21 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:20 msgid "all modules except ``junos_netconf``, which enables NETCONF" msgstr "NETCONF を有効ã«ã™ã‚‹ ``junos_netconf`` 以外ã®ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/network/user_guide/platform_junos.rst:32 msgid "``ansible_connection: ``ansible.netcommon.network_cli``" msgstr "``ansible_connection: ``ansible.netcommon.network_cli``" #: ../../rst/network/user_guide/platform_junos.rst:32 msgid "``ansible_connection: ``ansible.netcommon.netconf``" msgstr "``ansible_connection: ``ansible.netcommon.netconf``" #: ../../rst/network/user_guide/platform_junos.rst:35 msgid "not supported by Junos OS" msgstr "Junos OS ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_junos.rst:37 msgid "json: ``result[0]['software-information'][0]['host-name'][0]['data'] foo lo0``" msgstr "json: ``result[0]['software-information'][0]['host-name'][0]['data'] foo lo0``" #: ../../rst/network/user_guide/platform_junos.rst:38 msgid "text: ``result[1].interface-information[0].physical-interface[0].name[0].data foo lo0``" msgstr "テキスト: ``result[1].interface-information[0].physical-interface[0].name[0].data foo lo0``" #: ../../rst/network/user_guide/platform_junos.rst:39 msgid "xml: ``result[1].rpc-reply.interface-information[0].physical-interface[0].name[0].data foo lo0``" msgstr "xml: ``result[1].rpc-reply.interface-information[0].physical-interface[0].name[0].data foo lo0``" #: ../../rst/network/user_guide/platform_junos.rst:51 msgid "Example CLI inventory ``[junos:vars]``" msgstr "CLI インベントリーã®ä¾‹ ``[junos:vars]``" #: ../../rst/network/user_guide/platform_junos.rst:87 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:46 msgid "enable NETCONF on the Junos OS device(s)" msgstr "Junos OS デãƒã‚¤ã‚¹ã® netconf を有効ã«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_junos.rst:89 msgid "To enable NETCONF on a new switch via Ansible, use the ``junipernetworks.junos.junos_netconf`` module through the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this:" msgstr "Ansible を介ã—ã¦æ–°ã—ã„スイッãƒã§ NETCONF を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続を介ã—㦠``junipernetworks.junos.junos_netconf`` モジュールを使用ã—ã¾ã™ã€‚上記㮠CLI ã®ä¾‹ã®ã‚ˆã†ã«ãƒ—ラットフォームレベルã®å¤‰æ•°ã‚’設定ã—ã€æ¬¡ã®ã‚ˆã†ã« Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_junos.rst:101 #: ../../rst/network/user_guide/platform_netconf_enabled.rst:61 msgid "Example NETCONF inventory ``[junos:vars]``" msgstr "NETCONF インベントリーã®ä¾‹ ``[junos:vars]``" #: ../../rst/network/user_guide/platform_meraki.rst:5 msgid "Meraki Platform Options" msgstr "Meraki プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_meraki.rst:7 msgid "The `cisco.meraki `_ collection only supports the ``local`` connection type at this time." msgstr "`cisco.meraki `_ コレクションã¯ã€ç¾æ™‚点ã§ã¯ ``local`` 接続タイプã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_meraki.rst:19 msgid "Dashboard API" msgstr "ダッシュボード API" #: ../../rst/network/user_guide/platform_meraki.rst:23 msgid "uses API key from Dashboard" msgstr "Dashboard ã‹ã‚‰ã® API キーã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_meraki.rst:25 msgid "``ansible_connection: localhost``" msgstr "``ansible_connection: localhost``" #: ../../rst/network/user_guide/platform_meraki.rst:27 msgid "``data.``" msgstr "``data.``" #: ../../rst/network/user_guide/platform_meraki.rst:32 msgid "Example Meraki task" msgstr "Meraki タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:5 msgid "Netconf enabled Platform Options" msgstr "Netconf ãŒæœ‰åйãªãƒ—ラットフォームオプション" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:7 msgid "This page offers details on how the netconf connection works in Ansible and how to use it." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã«ã¯ã€netconf 接続㌠Ansible ã§ã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã€ãŠã‚ˆã³ãã®è©³ç´°ãªä½¿ç”¨æ–¹æ³•ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:31 msgid "``ansible_connection: ansible.netcommon.netconf``" msgstr "``ansible_connection: ansible.netcommon.netconf``" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:35 msgid "The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.netconf`` instead." msgstr "``ansible_connection: local`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``ansible_connection: ansible.netcommon.netconf`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:45 msgid "install the ``ncclient`` Python package on your control node(s) with ``pip install ncclient``" msgstr "``pip install ncclient`` を使用ã—ã¦ã€``ncclient`` Python パッケージをコントロールノードã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:48 msgid "To enable NETCONF on a new switch via Ansible, use the platform specific module via the CLI connection or set it manually. For example set up your platform-level variables just like in the CLI example above, then run a playbook task like this:" msgstr "Ansible çµŒç”±ã§æ–°ã—ã„スイッãƒã® NETCONF を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続経由ã§ãƒ—ラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã‹ã€æ‰‹å‹•ã§è¨­å®šã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šè¨˜ã® CLI ã®ä¾‹ã®ã‚ˆã†ã«ãƒ—ラットフォームレベルã®å¤‰æ•°ã‚’設定ã—ã€æ¬¡ã®ã‚ˆã†ãª Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:83 msgid "Example NETCONF task with configurable variables" msgstr "設定å¯èƒ½ãªå¤‰æ•°ã‚’å«ã‚€ NETCONF タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:94 msgid "Note: For netconf connection plugin configurable variables see :ref:`ansible.netcommon.netconf `." msgstr "注æ„: netconf connection プラグインã®è¨­å®šå¯èƒ½ãªå¤‰æ•°ã¯ã€ã€Œ:ref:`ansible.netcommon.netconf `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:97 msgid "Bastion/Jumphost configuration" msgstr "Bastion/Jumphost ã®è¨­å®š" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:98 msgid "To use a jump host to connect to a NETCONF enabled device you must set the ``ANSIBLE_NETCONF_SSH_CONFIG`` environment variable." msgstr "ジャンプホストを使用ã—㦠NETCONF 対応ã®ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã™ã‚‹ã«ã¯ã€``ANSIBLE_NETCONF_SSH_CONFIG`` 環境変数を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:102 msgid "``ANSIBLE_NETCONF_SSH_CONFIG`` can be set to either:" msgstr "``ANSIBLE_NETCONF_SSH_CONFIG`` ã‚’ã€æ¬¡ã®ã„ãšã‚Œã‹ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:101 msgid "1 or TRUE (to trigger the use of the default SSH config file ~/.ssh/config)" msgstr "1 ã¾ãŸã¯ TRUE (デフォルト㮠SSH 設定ファイル ~/.ssh/config ã®ä½¿ç”¨ã‚’é–‹å§‹ã™ã‚‹ãŸã‚)。" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:102 msgid "The absolute path to a custom SSH config file." msgstr "カスタム㮠SSH 設定ファイルã¸ã®çµ¶å¯¾ãƒ‘ス。" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:104 msgid "The SSH config file should look something like:" msgstr "SSH 設定ファイルã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:112 msgid "Authentication for the jump host must use key based authentication." msgstr "ジャンプホストã®èªè¨¼ã¯ã€éµãƒ™ãƒ¼ã‚¹ã®èªè¨¼ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:114 msgid "You can either specify the private key used in the SSH config file:" msgstr "SSH 設定ファイルã§ä½¿ç”¨ã™ã‚‹ç§˜å¯†éµã®ã„ãšã‚Œã‹ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:120 msgid "Or you can use an ssh-agent." msgstr "ã¾ãŸã¯ã€ssh-agent を使用ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:123 msgid "ansible_network_os auto-detection" msgstr "ansible_network_os 自動検出" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:125 msgid "If ``ansible_network_os`` is not specified for a host, then Ansible will attempt to automatically detect what ``network_os`` plugin to use." msgstr "ホスト㫠``ansible_network_os`` ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€Ansible ã¯ã€ä½¿ç”¨ã™ã‚‹ ``network_os`` ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã—よã†ã¨ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netconf_enabled.rst:127 msgid "``ansible_network_os`` auto-detection can also be triggered by using ``auto`` as the ``ansible_network_os``. (Note: Previously ``default`` was used instead of ``auto``)." msgstr "``ansible_network_os`` 自動検出ã¯ã€``auto`` ã‚’ ``ansible_network_os`` ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ç™ºç”Ÿã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ (注æ„: 以å‰ã¯ ``default`` ã®ä»£ã‚り㫠``auto``ãŒä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸ)。" #: ../../rst/network/user_guide/platform_netvisor.rst:5 msgid "Pluribus NETVISOR Platform Options" msgstr "Pluribus NETVISOR プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_netvisor.rst:7 msgid "Pluribus NETVISOR Ansible is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on NETVISOR in Ansible." msgstr "Pluribus NETVISOR Ansible 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã« ``httpapi`` モジュールãŒè¿½åŠ ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® NETVISOR ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netvisor.rst:32 msgid "not supported by NETVISOR" msgstr "NETVISOR ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_netvisor.rst:39 msgid "Pluribus NETVISOR does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "Pluribus NETVISOR 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_netvisor.rst:45 msgid "Example CLI ``group_vars/netvisor.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/netvisor.yml``" #: ../../rst/network/user_guide/platform_nos.rst:5 msgid "NOS Platform Options" msgstr "NOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_nos.rst:7 msgid "Extreme NOS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on NOS in Ansible." msgstr "Extreme NOS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã« ``httpapi`` モジュールãŒè¿½åŠ ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® NOS ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nos.rst:30 #: ../../rst/network/user_guide/platform_weos4.rst:30 msgid "``ansible_connection: community.netcommon.network_cli``" msgstr "``ansible_connection: community.netcommon.network_cli``" #: ../../rst/network/user_guide/platform_nos.rst:32 msgid "not supported by NOS" msgstr "NOS ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_nos.rst:39 msgid "NOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "NOS 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nos.rst:45 msgid "Example CLI ``group_vars/nos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/nos.yml``" #: ../../rst/network/user_guide/platform_nxos.rst:5 msgid "NXOS Platform Options" msgstr "NXOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_nxos.rst:7 msgid "The `Cisco NXOS `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it." msgstr "`Cisco NXOS `_ ã¯è¤‡æ•°ã®æŽ¥ç¶šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã§å„接続ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã€ãŠã‚ˆã³ãã®ä½¿ç”¨æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:19 msgid "NX-API" msgstr "NX-API" #: ../../rst/network/user_guide/platform_nxos.rst:32 msgid "not supported by NX-API" msgstr "NX-API ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_nxos.rst:48 msgid "Example CLI ``group_vars/nxos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/nxos.yml``" #: ../../rst/network/user_guide/platform_nxos.rst:80 msgid "Using NX-API in Ansible" msgstr "Ansible ã§ã® NX-API ã®ä½¿ç”¨" #: ../../rst/network/user_guide/platform_nxos.rst:83 msgid "Enabling NX-API" msgstr "NX-API ã®æœ‰åŠ¹åŒ–" #: ../../rst/network/user_guide/platform_nxos.rst:85 msgid "Before you can use NX-API to connect to a switch, you must enable NX-API. To enable NX-API on a new switch via Ansible, use the ``nxos_nxapi`` module via the CLI connection. Set up group_vars/nxos.yml just like in the CLI example above, then run a playbook task like this:" msgstr "NX-API を使用ã—ã¦ã‚¹ã‚¤ãƒƒãƒã«æŽ¥ç¶šã™ã‚‹å‰ã«ã€NX-API を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible を介ã—ã¦æ–°ã—ã„スイッãƒã§ NX-API を有効ã«ã™ã‚‹ã«ã¯ã€CLI 接続を介ã—㦠``nxos_nxapi`` モジュールを使用ã—ã¾ã™ã€‚å‰è¿°ã® CLI ã®ä¾‹ã¨åŒæ§˜ã« group_vars/nxos.yml を設定ã—ã€æ¬¡ã®ã‚ˆã†ã« Playbook タスクを実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:95 msgid "To find out more about the options for enabling HTTP/HTTPS and local http see the :ref:`nxos_nxapi ` module documentation." msgstr "HTTP/HTTPS ãŠã‚ˆã³ãƒ­ãƒ¼ã‚«ãƒ« http を有効ã«ã™ã‚‹ã‚ªãƒ—ションã®è©³ç´°ã¯ã€:ref:`nxos_nxapi ` モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_nxos.rst:97 msgid "Once NX-API is enabled, change your ``group_vars/nxos.yml`` to use the NX-API connection." msgstr "NX-API を有効ã«ã—ãŸã‚‰ã€NX-API 接続を使用ã™ã‚‹ã‚ˆã†ã« ``group_vars/nxos.yml`` を変更ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:100 msgid "Example NX-API ``group_vars/nxos.yml``" msgstr "NX-API ã®ä¾‹ ``group_vars/nxos.yml``" #: ../../rst/network/user_guide/platform_nxos.rst:116 msgid "Example NX-API task" msgstr "NX-API タスクã®ä¾‹" #: ../../rst/network/user_guide/platform_nxos.rst:132 msgid "Cisco Nexus platform support matrix" msgstr "Cisco Nexus プラットフォームã®ã‚µãƒãƒ¼ãƒˆãƒžãƒˆãƒªãƒƒã‚¯ã‚¹" #: ../../rst/network/user_guide/platform_nxos.rst:134 msgid "The following platforms and software versions have been certified by Cisco to work with this version of Ansible." msgstr "以下ã®ãƒ—ラットフォームãŠã‚ˆã³ã‚½ãƒ•トウェアã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€Cisco ãŒæœ¬ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§æ©Ÿèƒ½ã™ã‚‹ã“ã¨ãŒèªå®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:136 msgid "Platform / Software Minimum Requirements" msgstr "プラットフォーム/ソフトウェア最å°è¦ä»¶" #: ../../rst/network/user_guide/platform_nxos.rst:140 msgid "Supported Platforms" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡ã®ãƒ—ラットフォーム" #: ../../rst/network/user_guide/platform_nxos.rst:140 msgid "Minimum NX-OS Version" msgstr "æœ€å° NX-OS ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/network/user_guide/platform_nxos.rst:142 msgid "Cisco Nexus N3k" msgstr "Cisco Nexus N3k" #: ../../rst/network/user_guide/platform_nxos.rst:142 #: ../../rst/network/user_guide/platform_nxos.rst:143 msgid "7.0(3)I2(5) and later" msgstr "7.0(3)I2(5) 以é™" #: ../../rst/network/user_guide/platform_nxos.rst:143 msgid "Cisco Nexus N9k" msgstr "Cisco Nexus N9k" #: ../../rst/network/user_guide/platform_nxos.rst:144 msgid "Cisco Nexus N5k" msgstr "Cisco Nexus N5k" #: ../../rst/network/user_guide/platform_nxos.rst:144 #: ../../rst/network/user_guide/platform_nxos.rst:145 msgid "7.3(0)N1(1) and later" msgstr "7.3(0)N1(1) 以é™" #: ../../rst/network/user_guide/platform_nxos.rst:145 msgid "Cisco Nexus N6k" msgstr "Cisco Nexus N6k" #: ../../rst/network/user_guide/platform_nxos.rst:146 msgid "Cisco Nexus N7k" msgstr "Cisco Nexus N7k" #: ../../rst/network/user_guide/platform_nxos.rst:146 msgid "7.3(0)D1(1) and later" msgstr "7.3(0)D1(1) 以é™" #: ../../rst/network/user_guide/platform_nxos.rst:147 msgid "Cisco Nexus MDS" msgstr "Cisco Nexus MDS" #: ../../rst/network/user_guide/platform_nxos.rst:147 msgid "8.4(1) and later (Please see individual module documentation for compatibility)" msgstr "8.4(1)以é™ï¼ˆäº’æ›æ€§ã«ã¤ã„ã¦ã¯ã€å€‹åˆ¥ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’確èªã—ã¦ãã ã•ã„)" #: ../../rst/network/user_guide/platform_nxos.rst:150 msgid "Platform Models" msgstr "プラットフォームモデル" #: ../../rst/network/user_guide/platform_nxos.rst:154 msgid "Platform" msgstr "プラットフォーム" #: ../../rst/network/user_guide/platform_nxos.rst:154 msgid "Description" msgstr "説明" #: ../../rst/network/user_guide/platform_nxos.rst:156 msgid "N3k" msgstr "N3k" #: ../../rst/network/user_guide/platform_nxos.rst:156 msgid "Support includes N30xx, N31xx and N35xx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€N30xx モデルã€N31xx モデルã€ãŠã‚ˆã³ N35xx モデルãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:157 msgid "N5k" msgstr "N5k" #: ../../rst/network/user_guide/platform_nxos.rst:157 msgid "Support includes all N5xxx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€N5xxx ã®å…¨ãƒ¢ãƒ‡ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:158 msgid "N6k" msgstr "N6k" #: ../../rst/network/user_guide/platform_nxos.rst:158 msgid "Support includes all N6xxx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€N6xxx ã®å…¨ãƒ¢ãƒ‡ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:159 msgid "N7k" msgstr "N7k" #: ../../rst/network/user_guide/platform_nxos.rst:159 msgid "Support includes all N7xxx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€N7xxx ã®å…¨ãƒ¢ãƒ‡ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:160 msgid "N9k" msgstr "N9k" #: ../../rst/network/user_guide/platform_nxos.rst:160 msgid "Support includes all N9xxx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€N9xxx ã®å…¨ãƒ¢ãƒ‡ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_nxos.rst:161 msgid "MDS" msgstr "MDS" #: ../../rst/network/user_guide/platform_nxos.rst:161 msgid "Support includes all MDS 9xxx models" msgstr "サãƒãƒ¼ãƒˆã«ã¯ã€MDS 9xxx モデルãŒã™ã¹ã¦å«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_routeros.rst:5 msgid "RouterOS Platform Options" msgstr "RouterOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_routeros.rst:7 msgid "RouterOS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on RouterOS in Ansible." msgstr "RouterOS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã« ``httpapi`` モジュールãŒè¿½åŠ ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® RouterOS ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_routeros.rst:30 msgid "``ansible_connection: ansible.network.network_cli``" msgstr "``ansible_connection: ansible.network.network_cli``" #: ../../rst/network/user_guide/platform_routeros.rst:32 msgid "not supported by RouterOS" msgstr "RouterOS ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_routeros.rst:40 msgid "RouterOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "RouterOS 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_routeros.rst:46 msgid "Example CLI ``group_vars/routeros.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/routeros.yml``" #: ../../rst/network/user_guide/platform_routeros.rst:63 msgid "If you are getting timeout errors you may want to add ``+cet1024w`` suffix to your username which will disable console colors, enable \"dumb\" mode, tell RouterOS not to try detecting terminal capabilities and set terminal width to 1024 columns. See article `Console login process `_ in MikroTik wiki for more information." msgstr "タイムアウトエラーãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã« ``+cet1024w`` 接頭辞を追加ã™ã‚‹ã“ã¨ã§ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®è‰²ã‚’無効ã«ã—ã€ã€Œdumbã€ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã—ã€ç«¯æœ«æ©Ÿèƒ½ã‚’検出ã—ãªã„よã†ã« RouterOS ã«æŒ‡ç¤ºã—ã€ç«¯æœ«ã®å¹…ã‚’ 1024 カラムã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€MikroTik Wikiã®è¨˜äº‹ã€Œ`Console login process `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_slxos.rst:5 msgid "SLX-OS Platform Options" msgstr "SLX-OS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_slxos.rst:7 msgid "Extreme SLX-OS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on SLX-OS in Ansible." msgstr "Extreme SLX-OS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã« ``httpapi`` モジュールãŒè¿½åŠ ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® SLX-OS ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_slxos.rst:32 msgid "not supported by SLX-OS" msgstr "SLX-OS ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“" #: ../../rst/network/user_guide/platform_slxos.rst:40 msgid "SLX-OS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "SLX-OS 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_slxos.rst:46 msgid "Example CLI ``group_vars/slxos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/slxos.yml``" #: ../../rst/network/user_guide/platform_voss.rst:5 msgid "VOSS Platform Options" msgstr "VOSS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_voss.rst:7 msgid "Extreme VOSS is part of the `community.network `_ collection and only supports CLI connections today. This page offers details on how to use ``ansible.netcommon.network_cli`` on VOSS in Ansible." msgstr "Extreme VOSS 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€ç¾åœ¨ã¯ CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® VOSS ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_voss.rst:32 msgid "supported: use ``ansible_become: yes`` with ``ansible_become_method: enable``" msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡: ``ansible_become: yes`` ã‚’ ``ansible_become_method: enable`` ã¨ä½µç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/platform_voss.rst:41 msgid "VOSS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "VOSS 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_voss.rst:47 msgid "Example CLI ``group_vars/voss.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/voss.yml``" #: ../../rst/network/user_guide/platform_vyos.rst:5 msgid "VyOS Platform Options" msgstr "VyOS プラットフォームã®ã‚ªãƒ—ション" #: ../../rst/network/user_guide/platform_vyos.rst:7 msgid "The `VyOS `_ collection supports the ``ansible.netcommon.network_cli`` connection type. This page offers details on connection options to manage VyOS using Ansible." msgstr "`VyOS `_ コレクションã¯ã€``ansible.netcommon.network_cli`` 接続タイプをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible を使用ã—㦠VyOS を管ç†ã™ã‚‹æŽ¥ç¶šã‚ªãƒ—ションã®è©³ç´°ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_vyos.rst:45 msgid "Example CLI ``group_vars/vyos.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/vyos.yml``" #: ../../rst/network/user_guide/platform_weos4.rst:5 msgid "WeOS 4 Platform Options" msgstr "WeOS 4 プラットフォームオプション" #: ../../rst/network/user_guide/platform_weos4.rst:7 msgid "Westermo WeOS 4 is part of the `community.network `_ collection and only supports CLI connections. This page offers details on how to use ``ansible.netcommon.network_cli`` on WeOS 4 in Ansible." msgstr "Westermo WeOS 4 㯠`community.network `_ コレクションã®ä¸€éƒ¨ã§ã€CLI 接続ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ã® WeOS 4 ã§ ``ansible.netcommon.network_cli`` を使用ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_weos4.rst:32 msgid "not supported by WeOS 4" msgstr "WeOS 4 ã§ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–" #: ../../rst/network/user_guide/platform_weos4.rst:39 msgid "WeOS 4 does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``." msgstr "WeOS 4 㯠``ansible_connection: local`` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。``ansible_connection: ansible.netcommon.network_cli`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/platform_weos4.rst:45 msgid "Example CLI ``group_vars/weos4.yml``" msgstr "CLI ã®ä¾‹ ``group_vars/weos4.yml``" #: ../../rst/network/user_guide/platform_weos4.rst:72 msgid "Example Configuration task" msgstr "設定タスクã®ä¾‹" #: ../../rst/network/user_guide/validate.rst:5 msgid "Validate data against set criteria with Ansible" msgstr "Ansible を使用ã—ãŸã‚»ãƒƒãƒˆåŸºæº–ã«å¯¾ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã®æ¤œè¨¼" #: ../../rst/network/user_guide/validate.rst:7 msgid "The :ref:`validate ` module validates data against your predefined criteria using a validation engine. You can pull this data from a device or file, validate it against your defined criteria, and use the results to identify configuration or operational state drift and optionally take remedial action." msgstr ":ref:`validate ` モジュールã¯ã€æ¤œè¨¼ã‚¨ãƒ³ã‚¸ãƒ³ã‚’使用ã—ã¦ã€äº‹å‰å®šç¾©ã®åŸºæº–ã«å¯¾ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’検証ã—ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’デãƒã‚¤ã‚¹ã¾ãŸã¯ãƒ•ァイルã‹ã‚‰ãƒ—ルã—ã€å®šç¾©ã—ãŸåŸºæº–ã«å¯¾ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’検証ã—ã¦ã€ãã®çµæžœã‚’使用ã—ã¦è¨­å®šã¾ãŸã¯å‹•作状態ã®ãƒ‰ãƒªãƒ•トを特定ã—ã€å¿…è¦ã«å¿œã˜ã¦ä¿®æ­£æŽªç½®ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:14 msgid "Understanding the validate plugin" msgstr "validate プラグインã«ã¤ã„ã¦" #: ../../rst/network/user_guide/validate.rst:16 msgid "The `ansible.utils `_ collection includes the :ref:`validate ` module." msgstr "`ansible.utils `_ コレクションã«ã¯ :ref:`validate ` モジュールãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:18 msgid "To validate data:" msgstr "データを検証ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:20 msgid "Pull in structured data or convert your data to structured format with the :ref:`cli_parse ` module." msgstr "構造化ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’プルã™ã‚‹ã‹ã€:ref:`cli_parse ` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§æ§‹é€ åŒ–ã•れãŸå½¢å¼ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:21 msgid "Define the criteria to test that data against." msgstr "ãã®ãƒ‡ãƒ¼ã‚¿ã‚’テストã™ã‚‹åŸºæº–を定義ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:22 msgid "Select a validation engine and test the data to see if it is valid based on the selected criteria and validation engine." msgstr "æ¤œè¨¼ã‚¨ãƒ³ã‚¸ãƒ³ã‚’é¸æŠžã—ã€é¸æŠžã—ãŸåŸºæº–ã¨æ¤œè¨¼ã‚¨ãƒ³ã‚¸ãƒ³ã‚’ã‚‚ã¨ã«ãã®ãƒ‡ãƒ¼ã‚¿ãŒæœ‰åйã‹ã©ã†ã‹ã‚’テストã—ã¦ç¢ºèªã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:24 msgid "The structure of the data and the criteria depends on the validation engine you select. The examples here use the ``jsonschema`` validation engine provided in the `ansible.utils `_ collection.Red Hat Ansible Automation Platform subscription supports limited use if jsonschema public APIs as documented." msgstr "ãƒ‡ãƒ¼ã‚¿ã®æ§‹é€ ã¨åŸºæº–ã¯ã€é¸æŠžã—ãŸæ¤œè¨¼ã‚¨ãƒ³ã‚¸ãƒ³ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ `ansible.utils `_ ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æä¾›ã•れる ``jsonschema`` 検証エンジンを使用ã—ã¾ã™ã€‚Red Hat Ansible Automation Platform サブスクリプションã¯ã€è¨˜è¼‰ã®ã¨ãŠã‚Š jsonschema ã®ãƒ‘ブリック API ãŒã‚µãƒãƒ¼ãƒˆã•れる場åˆã«ä½¿ç”¨ã‚’é™å®šã—ã¦ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:27 msgid "Structuring the data" msgstr "ãƒ‡ãƒ¼ã‚¿ã®æ§‹é€ " #: ../../rst/network/user_guide/validate.rst:29 msgid "You can pull previously structured data from a file, or use the :ref:`cli_parse ` module to structure your data." msgstr "以å‰ã«æ§‹é€ åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’ファイルã‹ã‚‰ãƒ—ルã™ã‚‹ã‹ã€:ref:`cli_parse ` モジュールを使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’構築ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:31 msgid "The following example fetches the operational state of some network (Cisco NXOS) interfaces and translates that state to structured data using the ``ansible.netcommon.pyats`` parser." msgstr "以下ã®ä¾‹ã§ã¯ã€ä¸€éƒ¨ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯(Cisco NXOS)インターフェースã®é‹ç”¨çŠ¶æ…‹ã‚’å–å¾—ã—ã€``ansible.netcommon.pyats`` パーサーを使用ã—ã¦ãã®çŠ¶æ…‹ã‚’æ§‹é€ åŒ–ãƒ‡ãƒ¼ã‚¿ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:57 msgid "This results in the following structured data." msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®æ§‹é€ åŒ–データãŒç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:83 msgid "See :ref:`cli_parsing` for details on how to parse semi-structured data into structured data." msgstr "åŠæ§‹é€ åŒ–データを構造化データã«è§£æžã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`cli_parsing`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/network/user_guide/validate.rst:86 msgid "Defining the criteria to validate against" msgstr "検証対象ã®åŸºæº–ã®å®šç¾©" #: ../../rst/network/user_guide/validate.rst:88 msgid "This example uses the `jsonschema `_ validation engine to parse the JSON structured data we created in the prior section. the criteria defines the state we want the data to conform to. In this instance, we can validate against a desired admin state of ``up`` for all the interfaces." msgstr "ã“ã®ä¾‹ã§ã¯ã€`jsonschema `_ 検証エンジンを使用ã—ã¦ã€å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ä½œæˆã—㟠JSON 構造化データを解æžã—ã¾ã™ã€‚基準ã§ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’é©åˆã•ã›ã‚‹çŠ¶æ…‹ã‚’å®šç¾©ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«å¯¾ã—㦠``up`` ã®å¿…è¦ãªç®¡ç†çŠ¶æ…‹ã‚’ã‚‚ã¨ã«æ¤œè¨¼ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:90 msgid "The criteria for ``jsonschema`` in this example is as follows:" msgstr "ã“ã®ä¾‹ã® ``jsonschema`` ã®åŸºæº–ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:111 msgid "Validating the data" msgstr "ãƒ‡ãƒ¼ã‚¿ã®æ¤œè¨¼" #: ../../rst/network/user_guide/validate.rst:113 msgid "Now that we have the structured data and the criteria, we can validate this data with the :ref:`validate ` module." msgstr "ã“ã‚Œã§æ§‹é€ åŒ–データã¨åŸºæº–ã®æº–å‚™ãŒã§ããŸã®ã§ã€ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’ :ref:`validate ` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§æ¤œè¨¼ã§ãã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:115 msgid "The following tasks check if the current state of the interfaces match the desired state defined in the criteria file." msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ç¾åœ¨ã®çŠ¶æ…‹ãŒã€åŸºæº–ファイルã§å®šç¾©ã•れã¦ã„ã‚‹å¿…è¦ãªçŠ¶æ…‹ã¨ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:135 msgid "In these tasks, we have:" msgstr "今回ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã—ãŸã€‚" #: ../../rst/network/user_guide/validate.rst:137 msgid "Set ``data`` to the structured JSON data from the :ref:`cli_parse ` module." msgstr "``data`` ã‚’ :ref:`cli_parse ` モジュールã‹ã‚‰æ§‹é€ åŒ– JSON データã«è¨­å®šã™ã‚‹ã€‚" #: ../../rst/network/user_guide/validate.rst:138 msgid "Set ``criteria`` to the JSON criteria file we defined." msgstr "``criteria`` を定義ã—㟠JSON æ¡ä»¶ãƒ•ァイルã«è¨­å®šã™ã‚‹ã€‚" #: ../../rst/network/user_guide/validate.rst:139 msgid "Set the validate engine to ``jsonschema``." msgstr "検証エンジンを ``jsonschema`` ã«è¨­å®šã™ã‚‹ã€‚" #: ../../rst/network/user_guide/validate.rst:143 msgid "The value of the criteria option can be a list and should be in a format that is defined by the validation engine used. You need to install the `jsonschema `_ on the control node for this example." msgstr "基準オプションã®å€¤ã«ã¯ä¸€è¦§ã‚’指定ã§ãã‚‹ã®ã§ã€ã“ã®å€¤ã¯ã€ä½¿ç”¨ã™ã‚‹æ¤œè¨¼ã‚¨ãƒ³ã‚¸ãƒ³ã§å®šç¾©ã•れる形å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚今回ã®ä¾‹ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã€`jsonschema `_ をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:145 msgid "The tasks output a list of errors indicating interfaces that do not have admin value in ``up`` state." msgstr "タスクã§ã¯ã€ç®¡ç†å€¤ãŒ ``up`` ã®çŠ¶æ…‹ã«ãªã„インターフェースを示ã™ã‚¨ãƒ©ãƒ¼ã®ä¸€è¦§ãŒå‡ºåŠ›ã•れã¾ã™ã€‚" #: ../../rst/network/user_guide/validate.rst:164 msgid "This shows Ethernet2/1 and Ethernet2/10 are not in the desired state based on the defined criteria. You can create a report or take further action to remediate this to bring the interfaces to the desired state based on the defined criteria." msgstr "ã“れã«ã‚ˆã‚Šã€Ethernet2/1 ãŠã‚ˆã³ Ethernet2/10 ã¯ã€å®šç¾©ã•れãŸåŸºæº–ã§ã¯å¸Œæœ›ã®çŠ¶æ…‹ã«ã¯åˆ°é”ã—ã¦ã„ãªã„ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚レãƒãƒ¼ãƒˆã‚’作æˆã™ã‚‹ã‹ã€å®šç¾©ã•れãŸåŸºæº–ã«åŸºã¥ã„ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを目的ã«çŠ¶æ…‹ã«ã™ã‚‹ãŸã‚ã®æ”¹å–„措置をå–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "The units of action in Ansible. You can execute a single task once with an ad-hoc command." #~ msgstr "" #~ msgid "Unlike most Ansible modules, network modules do not run on the managed nodes. From a user's point of view, network modules work like any other modules. They work with ad-hoc commands, playbooks, and roles. Behind the scenes, however, network modules use a different methodology than the other (Linux/Unix and Windows) modules use. Ansible is written and executed in Python. Because the majority of network devices can not run Python, the Ansible network modules are executed on the Ansible control node, where ``ansible`` or ``ansible-playbook`` runs." #~ msgstr "" #~ msgid "Although Ansible contains a number of plugins that can convert XML to Ansible native data structures, the``cli_parse`` module runs the command on devices that return XML and returns the converted data in a single task." #~ msgstr "" #~ msgid "The following is an example TTP template stored as ``templates/nxos_show_interfaces.ttp``:" #~ msgstr "" #~ msgid "Using an ad-hoc ``ansible`` command" #~ msgstr "" #~ msgid "`ad-hoc` refers to running Ansible to perform some quick command using ``/usr/bin/ansible``, rather than the orchestration language, which is ``/usr/bin/ansible-playbook``. In this case we can ensure connectivity by attempting to execute a single command on the remote device::" #~ msgstr "" #~ msgid "IRC and Slack" #~ msgstr "IRC ãŠã‚ˆã³ Slack" #~ msgid "Join us on:" #~ msgstr "以下ã«å‚加ã—ã¦ãã ã•ã„。" #~ msgid "Freenode IRC - ``#ansible-network`` Freenode channel" #~ msgstr "Freenode IRC - ``#ansible-network`` Freenode ãƒãƒ£ãƒ³ãƒãƒ«" #~ msgid "Slack - ``_" #~ msgstr "Slack - ``_" #~ msgid "If you have two or more network platforms in your environment, you can use the network agnostic modules to simplify your playbooks. You can use network agnostic modules such as ``ansible.netcommon.cli_command`` or ``ansible.netcommon.cli_config`` in place of the platform-specific modules such as ``arista.eos.eos_config``, ``cisco.ios.ios_config``, and ``junipernetworks.junos.junos_config``. This reduces the number of tasks and conditionals you need in your playbooks." #~ msgstr "環境内ã«è¤‡æ•°ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームãŒã‚ã‚‹å ´åˆã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ä¾å­˜ã—ãªã„モジュールを使用ã—ã¦ã€Playbook を簡素化ã§ãã¾ã™ã€‚``arista.eos.eos_config``ã€``cisco.ios.ios_config``ã€``junipernetworks.junos.junos_config`` ãªã©ã®ãƒ—ラットフォーム固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä»£ã‚りã«ã€``ansible.netcommon.cli_command``ã€``ansible.netcommon.cli_config`` ãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ä¾å­˜ã—ãªã„モジュールを使用ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Playbook ã«å¿…è¦ãªã‚¿ã‚¹ã‚¯ãŠã‚ˆã³æ¡ä»¶ã®æ•°ãŒæ¸›ã‚Šã¾ã™ã€‚" #~ msgid "8.4(1) and later" #~ msgstr "8.4(1) 以é™" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.480556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/plugins.po0000644000000000000000000031665100000000000025126 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/plugins/action.rst:4 ../../rst/plugins/cache.rst:123 #: ../../rst/plugins/callback.rst:81 msgid "Action plugins" msgstr "action プラグイン" #: ../../rst/plugins/action.rst:10 msgid "Action plugins act in conjunction with :ref:`modules ` to execute the actions required by playbook tasks. They usually execute automatically in the background doing prerequisite work before modules execute." msgstr "action プラグインã¯ã€:ref:`modules ` ã¨é€£æºã—ã¦ã€Playbook タスクã«å¿…è¦ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚ã“れらã¯é€šå¸¸ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå®Ÿè¡Œã•れるå‰ã«ã€å‰ææ¡ä»¶ã®ä½œæ¥­ã‚’行ã†ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§è‡ªå‹•çš„ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/plugins/action.rst:12 msgid "The 'normal' action plugin is used for modules that do not already have an action plugin. If necessary, you can :ref:`create custom action plugins `." msgstr "action ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæŒ‡å®šã•れã¦ã„ãªã„モジュールã«ã¯ã€ã€Œä¸€èˆ¬çš„ãªã€action プラグインãŒä½¿ç”¨ã•れã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦:ref:`create custom action plugins ` ã§ãã¾ã™ã€‚" #: ../../rst/plugins/action.rst:17 msgid "Enabling action plugins" msgstr "action ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/action.rst:19 msgid "You can enable a custom action plugin by either dropping it into the ``action_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the action plugin directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠action プラグインを有効ã«ã™ã‚‹ã«ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインをã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``action_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã«è¨­å®šã—㟠action プラグインã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«é…ç½®ã—ã¾ã™ã€‚" #: ../../rst/plugins/action.rst:24 msgid "Using action plugins" msgstr "action プラグインã®ä½¿ç”¨" #: ../../rst/plugins/action.rst:26 msgid "Action plugin are executed by default when an associated module is used; no action is required." msgstr "action プラグインã¯ã€é–¢é€£ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å ´åˆã«ã¯ãƒ‡ãƒ•ォルトã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã€ç‰¹ã«ä½œæ¥­ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/plugins/action.rst:29 ../../rst/plugins/cache.rst:115 #: ../../rst/plugins/callback.rst:73 ../../rst/plugins/connection.rst:55 #: ../../rst/plugins/inventory.rst:137 ../../rst/plugins/lookup.rst:137 #: ../../rst/plugins/strategy.rst:55 ../../rst/plugins/vars.rst:53 msgid "Plugin list" msgstr "プラグイン一覧" #: ../../rst/plugins/action.rst:31 msgid "You cannot list action plugins directly, they show up as their counterpart modules:" msgstr "直接 action プラグインã®ä¸€è¦§ã‚’表示ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ãŒã€å¯¾å¿œã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/plugins/action.rst:33 msgid "Use ``ansible-doc -l`` to see the list of available modules. Use ``ansible-doc `` to see specific documentation and examples, this should note if the module has a corresponding action plugin." msgstr "``ansible-doc -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚特定ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŠã‚ˆã³ä¾‹ã‚’å‚ç…§ã™ã‚‹ã«ã¯ ``ansible-doc `` を使用ã—ã¦ãã ã•ã„。モジュールã«å¯¾å¿œã® action プラグインãŒã‚ã‚‹å ´åˆã«ã¯ã€ã“ã®ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/action.rst:38 ../../rst/plugins/callback.rst:82 #: ../../rst/plugins/vars.rst:60 msgid ":ref:`cache_plugins`" msgstr ":ref:`cache_plugins`" #: ../../rst/plugins/action.rst:39 ../../rst/plugins/cache.rst:4 #: ../../rst/plugins/callback.rst:83 ../../rst/plugins/vars.rst:61 msgid "Cache plugins" msgstr "Cache プラグイン" #: ../../rst/plugins/action.rst:40 ../../rst/plugins/become.rst:56 #: ../../rst/plugins/cache.rst:124 ../../rst/plugins/connection.rst:65 #: ../../rst/plugins/filter.rst:32 ../../rst/plugins/inventory.rst:146 #: ../../rst/plugins/lookup.rst:148 ../../rst/plugins/shell.rst:42 #: ../../rst/plugins/strategy.rst:67 msgid ":ref:`callback_plugins`" msgstr ":ref:`callback_plugins`" #: ../../rst/plugins/action.rst:41 ../../rst/plugins/become.rst:57 #: ../../rst/plugins/cache.rst:125 ../../rst/plugins/callback.rst:4 #: ../../rst/plugins/connection.rst:66 ../../rst/plugins/filter.rst:33 #: ../../rst/plugins/inventory.rst:147 ../../rst/plugins/shell.rst:43 #: ../../rst/plugins/strategy.rst:68 msgid "Callback plugins" msgstr "callback プラグイン" #: ../../rst/plugins/action.rst:42 ../../rst/plugins/cache.rst:126 #: ../../rst/plugins/callback.rst:84 ../../rst/plugins/inventory.rst:148 #: ../../rst/plugins/terminal.rst:44 msgid ":ref:`connection_plugins`" msgstr ":ref:`connection_plugins`" #: ../../rst/plugins/action.rst:43 ../../rst/plugins/cache.rst:127 #: ../../rst/plugins/callback.rst:85 ../../rst/plugins/connection.rst:4 #: ../../rst/plugins/inventory.rst:149 ../../rst/plugins/terminal.rst:45 msgid "Connection plugins" msgstr "connection プラグイン" #: ../../rst/plugins/action.rst:44 ../../rst/plugins/become.rst:54 #: ../../rst/plugins/cache.rst:128 ../../rst/plugins/callback.rst:86 #: ../../rst/plugins/filter.rst:30 ../../rst/plugins/lookup.rst:146 #: ../../rst/plugins/shell.rst:40 ../../rst/plugins/strategy.rst:65 msgid ":ref:`inventory_plugins`" msgstr ":ref:`inventory_plugins`" #: ../../rst/plugins/action.rst:45 ../../rst/plugins/become.rst:55 #: ../../rst/plugins/cache.rst:129 ../../rst/plugins/callback.rst:87 #: ../../rst/plugins/filter.rst:31 ../../rst/plugins/inventory.rst:4 #: ../../rst/plugins/shell.rst:41 ../../rst/plugins/strategy.rst:66 msgid "Inventory plugins" msgstr "inventory プラグイン" #: ../../rst/plugins/action.rst:46 ../../rst/plugins/cache.rst:130 #: ../../rst/plugins/callback.rst:88 msgid ":ref:`shell_plugins`" msgstr ":ref:`shell_plugins`" #: ../../rst/plugins/action.rst:47 ../../rst/plugins/cache.rst:131 #: ../../rst/plugins/callback.rst:89 ../../rst/plugins/shell.rst:4 msgid "Shell plugins" msgstr "shell プラグイン" #: ../../rst/plugins/action.rst:48 ../../rst/plugins/cache.rst:132 #: ../../rst/plugins/callback.rst:90 msgid ":ref:`strategy_plugins`" msgstr ":ref:`strategy_plugins`" #: ../../rst/plugins/action.rst:49 ../../rst/plugins/cache.rst:133 #: ../../rst/plugins/callback.rst:91 ../../rst/plugins/strategy.rst:4 msgid "Strategy plugins" msgstr "strategy プラグイン" #: ../../rst/plugins/action.rst:50 ../../rst/plugins/cache.rst:134 #: ../../rst/plugins/callback.rst:92 ../../rst/plugins/connection.rst:73 #: ../../rst/plugins/inventory.rst:156 msgid ":ref:`vars_plugins`" msgstr ":ref:`vars_plugins`" #: ../../rst/plugins/action.rst:51 ../../rst/plugins/cache.rst:135 #: ../../rst/plugins/callback.rst:93 ../../rst/plugins/connection.rst:74 #: ../../rst/plugins/inventory.rst:157 ../../rst/plugins/vars.rst:4 msgid "Vars plugins" msgstr "vars プラグイン" #: ../../rst/plugins/action.rst:52 ../../rst/plugins/become.rst:64 #: ../../rst/plugins/cliconf.rst:44 ../../rst/plugins/connection.rst:75 #: ../../rst/plugins/docs_fragment.rst:32 ../../rst/plugins/filter.rst:38 #: ../../rst/plugins/httpapi.rst:69 ../../rst/plugins/inventory.rst:158 #: ../../rst/plugins/lookup.rst:154 ../../rst/plugins/module.rst:40 #: ../../rst/plugins/module_util.rst:32 ../../rst/plugins/netconf.rst:44 #: ../../rst/plugins/plugins.rst:45 ../../rst/plugins/shell.rst:50 #: ../../rst/plugins/strategy.rst:75 ../../rst/plugins/terminal.rst:46 #: ../../rst/plugins/test.rst:43 ../../rst/plugins/vars.rst:64 msgid "`User Mailing List `_" msgstr "`ユーザーメーリングリスト `_" #: ../../rst/plugins/action.rst:53 ../../rst/plugins/become.rst:65 #: ../../rst/plugins/cache.rst:137 ../../rst/plugins/callback.rst:95 #: ../../rst/plugins/cliconf.rst:45 ../../rst/plugins/connection.rst:76 #: ../../rst/plugins/docs_fragment.rst:33 ../../rst/plugins/filter.rst:39 #: ../../rst/plugins/httpapi.rst:70 ../../rst/plugins/inventory.rst:159 #: ../../rst/plugins/lookup.rst:155 ../../rst/plugins/module.rst:41 #: ../../rst/plugins/module_util.rst:33 ../../rst/plugins/netconf.rst:45 #: ../../rst/plugins/plugins.rst:46 ../../rst/plugins/shell.rst:51 #: ../../rst/plugins/strategy.rst:76 ../../rst/plugins/terminal.rst:47 #: ../../rst/plugins/test.rst:44 ../../rst/plugins/vars.rst:65 msgid "Have a question? Stop by the google group!" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google Group ã‚’ã”覧ãã ã•ã„。" #: ../../rst/plugins/action.rst:54 ../../rst/plugins/become.rst:66 #: ../../rst/plugins/cache.rst:138 ../../rst/plugins/callback.rst:96 #: ../../rst/plugins/connection.rst:77 ../../rst/plugins/docs_fragment.rst:34 #: ../../rst/plugins/filter.rst:40 ../../rst/plugins/inventory.rst:160 #: ../../rst/plugins/lookup.rst:156 ../../rst/plugins/plugins.rst:47 #: ../../rst/plugins/shell.rst:52 ../../rst/plugins/strategy.rst:77 #: ../../rst/plugins/test.rst:45 ../../rst/plugins/vars.rst:66 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/plugins/action.rst:55 ../../rst/plugins/become.rst:67 #: ../../rst/plugins/cache.rst:139 ../../rst/plugins/callback.rst:97 #: ../../rst/plugins/connection.rst:78 ../../rst/plugins/docs_fragment.rst:35 #: ../../rst/plugins/filter.rst:41 ../../rst/plugins/inventory.rst:161 #: ../../rst/plugins/lookup.rst:157 ../../rst/plugins/plugins.rst:48 #: ../../rst/plugins/shell.rst:53 ../../rst/plugins/strategy.rst:78 #: ../../rst/plugins/test.rst:46 ../../rst/plugins/vars.rst:67 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/plugins/become.rst:4 msgid "Become plugins" msgstr "become プラグイン" #: ../../rst/plugins/become.rst:12 msgid "Become plugins work to ensure that Ansible can use certain privilege escalation systems when running the basic commands to work with the target machine as well as the modules required to execute the tasks specified in the play." msgstr "bocome プラグインã¯ã€åŸºæœ¬çš„ãªã‚³ãƒžãƒ³ãƒ‰ã®å®Ÿè¡Œæ™‚ã«ã€Ansible ãŒç‰¹å®šã®ç‰¹æ¨©æ˜‡æ ¼ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¦ã€ãƒ—ãƒ¬ã‚¤ã§æŒ‡å®šã•れãŸã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã®ã«å¿…è¦ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ターゲットマシンã¨é€£æºã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/plugins/become.rst:16 msgid "These utilities (``sudo``, ``su``, ``doas``, and so on) generally let you 'become' another user to execute a command with the permissions of that user." msgstr "通常ã€``sudo``ã€``su``ã€``doas`` ãªã©ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã™ã‚‹ã¨ã€åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã£ã¦ (become)ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘ーミッションã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/plugins/become.rst:23 msgid "Enabling Become Plugins" msgstr "become ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/become.rst:25 msgid "The become plugins shipped with Ansible are already enabled. Custom plugins can be added by placing them into a ``become_plugins`` directory adjacent to your play, inside a role, or by placing them in one of the become plugin directory sources configured in :ref:`ansible.cfg `." msgstr "Ansible ã«åŒæ¢±ã•れã¦ã„ã‚‹ become プラグインã¯ã™ã§ã«æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚カスタムã®ãƒ—ラグインを追加ã™ã‚‹ã«ã¯ã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``become_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—㟠become プラグインã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«é…ç½®ã—ã¾ã™ã€‚" #: ../../rst/plugins/become.rst:33 msgid "Using Become Plugins" msgstr "become プラグインã®ä½¿ç”¨" #: ../../rst/plugins/become.rst:35 msgid "In addition to the default configuration settings in :ref:`ansible_configuration_settings` or the ``--become-method`` command line option, you can use the ``become_method`` keyword in a play or, if you need to be 'host specific', the connection variable ``ansible_become_method`` to select the plugin to use." msgstr ":ref:`ansible_configuration_settings` ã‚„ ``--become-method`` コマンドラインオプションã§ã®ãƒ‡ãƒ•ォルト設定ã«åŠ ãˆã€ãƒ—レイ㧠``become_method`` キーワードを使用ã§ãã¾ã™ã€‚「ホスト固有ã€ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€æŽ¥ç¶šå¤‰æ•° ``ansible_become_method`` ã§ã€ä½¿ç”¨ã™ã‚‹ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/plugins/become.rst:39 ../../rst/plugins/shell.rst:33 msgid "You can further control the settings for each plugin via other configuration options detailed in the plugin themselves (linked below)." msgstr "プラグイン自体 (以下ã«ãƒªãƒ³ã‚¯) ã«è©³è¿°ã•れã¦ã„ã‚‹ãã®ä»–ã®è¨­å®šã‚ªãƒ—ションを使用ã—ã¦ã€å„プラグインã®è¨­å®šã‚’ã•らã«åˆ¶å¾¡ã§ãã¾ã™ã€‚" #: ../../rst/plugins/become.rst:45 msgid "Plugin List" msgstr "プラグイン一覧" #: ../../rst/plugins/become.rst:47 msgid "You can use ``ansible-doc -t become -l`` to see the list of available plugins. Use ``ansible-doc -t become `` to see specific documentation and examples." msgstr "``ansible-doc -t become -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t become `` を使用ã—ã¦ã€ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/become.rst:52 ../../rst/plugins/filter.rst:28 #: ../../rst/plugins/inventory.rst:144 ../../rst/plugins/lookup.rst:144 #: ../../rst/plugins/module.rst:34 ../../rst/plugins/shell.rst:38 #: ../../rst/plugins/strategy.rst:63 ../../rst/plugins/test.rst:31 msgid ":ref:`about_playbooks`" msgstr ":ref:`about_playbooks`" #: ../../rst/plugins/become.rst:53 ../../rst/plugins/connection.rst:64 #: ../../rst/plugins/filter.rst:29 ../../rst/plugins/inventory.rst:145 #: ../../rst/plugins/lookup.rst:145 ../../rst/plugins/module.rst:35 #: ../../rst/plugins/shell.rst:39 ../../rst/plugins/strategy.rst:64 #: ../../rst/plugins/test.rst:32 msgid "An introduction to playbooks" msgstr "Playbook ã®æ¦‚è¦" #: ../../rst/plugins/become.rst:58 ../../rst/plugins/connection.rst:67 #: ../../rst/plugins/inventory.rst:150 ../../rst/plugins/lookup.rst:150 #: ../../rst/plugins/shell.rst:44 ../../rst/plugins/strategy.rst:69 #: ../../rst/plugins/test.rst:37 msgid ":ref:`filter_plugins`" msgstr ":ref:`filter_plugins`" #: ../../rst/plugins/become.rst:59 ../../rst/plugins/connection.rst:68 #: ../../rst/plugins/filter.rst:4 ../../rst/plugins/inventory.rst:151 #: ../../rst/plugins/shell.rst:45 ../../rst/plugins/strategy.rst:70 #: ../../rst/plugins/test.rst:38 msgid "Filter plugins" msgstr "filter プラグイン" #: ../../rst/plugins/become.rst:60 ../../rst/plugins/connection.rst:69 #: ../../rst/plugins/filter.rst:34 ../../rst/plugins/inventory.rst:152 #: ../../rst/plugins/lookup.rst:152 ../../rst/plugins/shell.rst:46 #: ../../rst/plugins/strategy.rst:71 msgid ":ref:`test_plugins`" msgstr ":ref:`test_plugins`" #: ../../rst/plugins/become.rst:61 ../../rst/plugins/connection.rst:70 #: ../../rst/plugins/filter.rst:35 ../../rst/plugins/inventory.rst:153 #: ../../rst/plugins/shell.rst:47 ../../rst/plugins/strategy.rst:72 #: ../../rst/plugins/test.rst:4 msgid "Test plugins" msgstr "test プラグイン" #: ../../rst/plugins/become.rst:62 ../../rst/plugins/connection.rst:71 #: ../../rst/plugins/filter.rst:36 ../../rst/plugins/inventory.rst:154 #: ../../rst/plugins/shell.rst:48 ../../rst/plugins/strategy.rst:73 #: ../../rst/plugins/test.rst:41 ../../rst/plugins/vars.rst:62 msgid ":ref:`lookup_plugins`" msgstr ":ref:`lookup_plugins`" #: ../../rst/plugins/become.rst:63 ../../rst/plugins/connection.rst:72 #: ../../rst/plugins/filter.rst:37 ../../rst/plugins/inventory.rst:155 #: ../../rst/plugins/lookup.rst:4 ../../rst/plugins/shell.rst:49 #: ../../rst/plugins/strategy.rst:74 ../../rst/plugins/test.rst:42 #: ../../rst/plugins/vars.rst:63 msgid "Lookup plugins" msgstr "lookup プラグイン" #: ../../rst/plugins/cache.rst:10 msgid "Cache plugins allow Ansible to store gathered facts or inventory source data without the performance hit of retrieving them from source." msgstr "cache プラグインを使用ã™ã‚‹ã¨ã€Ansible ã¯ã€ã‚½ãƒ¼ã‚¹ã‹ã‚‰å–å¾—ã™ã‚‹ãƒ‘フォーマンスã«å½±éŸ¿ã‚’与ãˆãšã«ã€åŽé›†ã—ãŸãƒ•ァクトã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:12 msgid "The default cache plugin is the :ref:`memory ` plugin, which only caches the data for the current execution of Ansible. Other plugins with persistent storage are available to allow caching the data across runs. Some of these cache plugins write to files, others write to databases." msgstr "デフォルトã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグイン㯠:ref:`memory ` プラグインã§ã™ã€‚Ansible ã®ç¾åœ¨ã®å®Ÿè¡Œã®ãƒ‡ãƒ¼ã‚¿ã®ã¿ã‚’キャッシュã—ã¾ã™ã€‚永続ストレージを備ãˆãŸä»–ã®ãƒ—ラグインを使用ã—ã¦ã€å®Ÿè¡Œé–“ã§ãƒ‡ãƒ¼ã‚¿ã‚’キャッシュã§ãã¾ã™ã€‚ã“れらã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインã®ä¸­ã«ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã込むもã®ã‚‚ã‚れã°ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æ›¸ã込むもã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:14 msgid "You can use different cache plugins for inventory and facts. If you enable inventory caching without setting an inventory-specific cache plugin, Ansible uses the fact cache plugin for both facts and inventory. If necessary, you can :ref:`create custom cache plugins `." msgstr "インベントリーã¨ãƒ•ァクトã«ã•ã¾ã–ã¾ãª cache プラグインを使用ã§ãã¾ã™ã€‚インベントリー固有㮠cache プラグインを設定ã›ãšã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å›ºæœ‰ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã—ãŸå ´åˆã€Ansible ã¯ã€ãƒ•ァクトã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ä¸¡æ–¹ã« cache プラグインを使用ã—ã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦:ref:`create custom cache plugins `ã§ãã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:19 msgid "Enabling fact cache plugins" msgstr "ファクト㮠cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/cache.rst:21 msgid "Fact caching is always enabled. However, only one fact cache plugin can be active at a time. You can select the cache plugin to use for fact caching in the Ansible configuration, either with an environment variable:" msgstr "ファクトキャッシングã¯å¸¸ã«æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ä¸€åº¦ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã§ãるファクト㮠cache プラグイン㯠1 ã¤ã ã‘ã§ã™ã€‚環境変数を使用ã—ã¦ã€Ansible 設定ã§ãƒ•ァクトキャッシュã«ä½¿ç”¨ã™ã‚‹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:27 ../../rst/plugins/cache.rst:54 msgid "or in the ``ansible.cfg`` file:" msgstr "ã¾ãŸã¯ ``ansible.cfg`` ファイルã§ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:34 msgid "If the cache plugin is in a collection use the fully qualified name:" msgstr "cache プラグインをコレクションã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€å®Œå…¨ä¿®é£¾åを使用ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/cache.rst:41 msgid "To enable a custom cache plugin, save it in a ``cache_plugins`` directory adjacent to your play, inside a role, or in one of the directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠cache プラグインを有効ã«ã™ã‚‹ã«ã¯ã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``cache_plugins`` ディレクトリーã«ä¿å­˜ã™ã‚‹ã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:43 msgid "You also need to configure other settings specific to each plugin. Consult the individual plugin documentation or the Ansible :ref:`configuration ` for more details." msgstr "ã¾ãŸã€å„プラグインã«å›ºæœ‰ã®ä»–ã®è¨­å®šã‚’æ§‹æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚個々ã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¾ãŸã¯ Ansible ã®ã€Œ:ref:`設定 `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/cache.rst:46 msgid "Enabling inventory cache plugins" msgstr "インベントリー㮠cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/cache.rst:48 msgid "Inventory caching is disabled by default. To cache inventory data, you must enable inventory caching and then select the specific cache plugin you want to use. Not all inventory plugins support caching, so check the documentation for the inventory plugin(s) you want to use. You can enable inventory caching with an environment variable:" msgstr "インベントリーキャッシュã¯ãƒ‡ãƒ•ォルトã§ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚インベントリーデータをキャッシュã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã—ã¦ã‹ã‚‰ã€ä½¿ç”¨ã™ã‚‹ç‰¹å®šã® cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ã¹ã¦ã® intentory プラグインãŒã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ãªã„ãŸã‚ã€ä½¿ç”¨ã™ã‚‹ inventory プラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’確èªã—ã¦ãã ã•ã„。環境変数を使用ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã§ãã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:61 ../../rst/plugins/cache.rst:82 msgid "or if the inventory plugin accepts a YAML configuration source, in the configuration file:" msgstr "ã¾ãŸã¯ã€inventory プラグイン㌠YAML 設定ソースã«å¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ã€è¨­å®šãƒ•ァイルã§ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:69 msgid "Only one inventory cache plugin can be active at a time. You can set it with an environment variable:" msgstr "一度ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã§ãるインベントリー㮠cache プラグイン㯠1 ã¤ã ã‘ã§ã™ã€‚環境変数を使用ã—ã¦è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:75 msgid "or in the ansible.cfg file:" msgstr "ã¾ãŸã¯ã€ansible.cfg ファイルã§ä»¥ä¸‹ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:90 msgid "To cache inventory with a custom plugin in your plugin path, follow the :ref:`developer guide on cache plugins`." msgstr "プラグインパスã«ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインを使用ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’キャッシュã™ã‚‹ã«ã¯ã€ã€Œ:ref:`cache プラグインã®é–‹ç™ºè€…ガイド`ã€ã®æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/plugins/cache.rst:92 msgid "To cache inventory with a cache plugin in a collection, use the FQCN:" msgstr "コレクション内㮠cache プラグインを使用ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’キャッシュã™ã‚‹ã«ã¯ã€FQCN を使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:99 msgid "If you enable caching for inventory plugins without selecting an inventory-specific cache plugin, Ansible falls back to caching inventory with the fact cache plugin you configured. Consult the individual inventory plugin documentation or the Ansible :ref:`configuration ` for more details." msgstr "インベントリー固有㮠cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã›ãšã« inventory プラグインã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’有効ã«ã—ãŸå ´åˆã€Ansible ã¯ã€è¨­å®šæ¸ˆã¿ã®ãƒ•ァクト㮠cache プラグインã§ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒè¡Œã‚れるよã†ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚詳細ã¯ã€inventory プラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã¾ãŸã¯ Ansible ã®ã€Œ:ref:`設定 `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/cache.rst:107 msgid "Using cache plugins" msgstr "cache プラグインã®ä½¿ç”¨" #: ../../rst/plugins/cache.rst:109 msgid "Cache plugins are used automatically once they are enabled." msgstr "cache プラグインã¯ã€æœ‰åйã«ãªã‚‹ã¨è‡ªå‹•çš„ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/plugins/cache.rst:117 msgid "You can use ``ansible-doc -t cache -l`` to see the list of available plugins. Use ``ansible-doc -t cache `` to see specific documentation and examples." msgstr "``ansible-doc -t cache -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t cache `` を使用ã—ã¦ã€ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/cache.rst:122 ../../rst/plugins/callback.rst:80 msgid ":ref:`action_plugins`" msgstr ":ref:`action_plugins`" #: ../../rst/plugins/cache.rst:136 ../../rst/plugins/callback.rst:94 msgid "`User Mailing List `_" msgstr "`User Mailing List `_" #: ../../rst/plugins/callback.rst:10 msgid "Callback plugins enable adding new behaviors to Ansible when responding to events. By default, callback plugins control most of the output you see when running the command line programs, but can also be used to add additional output, integrate with other tools and marshal the events to a storage backend. If necessary, you can :ref:`create custom callback plugins `." msgstr "callback プラグインを使用ã™ã‚‹ã¨ã€ã‚¤ãƒ™ãƒ³ãƒˆã«å¿œç­”ã™ã‚‹ã¨ãã« Ansible ã«æ–°ã—ã„動作を追加ã§ãã¾ã™ã€‚デフォルトã§ã¯ã€callback プラグインã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ—ログラムを実行時ã«è¡¨ç¤ºã•れる出力ã®å¤§åŠã‚’制御ã—ã¾ã™ãŒã€ä»–ã®å‡ºåŠ›ã‚’è¿½åŠ ã—ã€ä»–ã®ãƒ„ールã¨çµ±åˆã—ã€ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã«ã‚¤ãƒ™ãƒ³ãƒˆã‚’マーシャリングã™ã‚‹ã“ã¨ã«ã‚‚使用ã§ãã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦:ref:`create custom callback plugins `ã§ãã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:15 msgid "Example callback plugins" msgstr "callback プラグインã®ä¾‹" #: ../../rst/plugins/callback.rst:17 msgid "The :ref:`log_plays ` callback is an example of how to record playbook events to a log file, and the :ref:`mail ` callback sends email on playbook failures." msgstr ":ref:`log_plays ` ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€Playbook ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’ログファイルã«è¨˜éŒ²ã™ã‚‹ä¸€ä¾‹ã§ã€:ref:`mail ` コールãƒãƒƒã‚¯ã¯ Playbook ã®å¤±æ•—時ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:19 msgid "The :ref:`say ` callback responds with computer synthesized speech in relation to playbook events." msgstr "ã¾ãŸã€:ref:`say ` コールãƒãƒƒã‚¯ã¯ã€Playbook ã®ã‚¤ãƒ™ãƒ³ãƒˆã«é–¢é€£ã—ã¦ã€ã‚³ãƒ³ãƒ”ューターã§åˆæˆã•れãŸéŸ³å£°ã§å¿œç­”ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:24 msgid "Enabling callback plugins" msgstr "callback ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/callback.rst:26 msgid "You can activate a custom callback by either dropping it into a ``callback_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the callback directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠callback を有効ã«ã™ã‚‹ã«ã¯ã€ãã® callback ã‚’ã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``callback_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—㟠callback ディレクトリーソース㮠1 ã¤ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:28 msgid "Plugins are loaded in alphanumeric order. For example, a plugin implemented in a file named `1_first.py` would run before a plugin file named `2_second.py`." msgstr "プラグインã¯è‹±æ•°å­—é †ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚ãŸã¨ãˆã°ã€`1_first.py` ã¨ã„ã†åå‰ã§å®Ÿè£…ã•れã¦ã„るプラグインã¯ã€`2_second.py` ã¨ã„ã†åå‰ã®ãƒ—ラグインファイルより先ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:30 msgid "Most callbacks shipped with Ansible are disabled by default and need to be enabled in your :ref:`ansible.cfg ` file in order to function. For example:" msgstr "Ansible ã«åŒæ¢±ã•れるã»ã¨ã‚“ã©ã® callback プラグインã¯ãƒ‡ãƒ•ォルトã§ç„¡åйã«ãªã£ã¦ãŠã‚Šã€ã“ã®ãƒ—ラグインを機能ã•ã›ã‚‹ã«ã¯ã€:ref:`ansible.cfg ` ãƒ•ã‚¡ã‚¤ãƒ«ã§æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:37 msgid "Setting a callback plugin for ``ansible-playbook``" msgstr "``ansible-playbook`` ã® callback プラグインã®è¨­å®š" #: ../../rst/plugins/callback.rst:39 msgid "You can only have one plugin be the main manager of your console output. If you want to replace the default, you should define CALLBACK_TYPE = stdout in the subclass and then configure the stdout plugin in :ref:`ansible.cfg `. For example:" msgstr "コンソール出力ã®ãƒ¡ã‚¤ãƒ³ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã¯ã€1 ã¤ã®ãƒ—ラグインã®ã¿ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’ç½®ãæ›ãˆã‚‹å ´åˆã¯ã€ã‚µãƒ–クラス㫠CALLBACK_TYPE = stdout を定義ã—ã¦ã€:ref:`ansible.cfg ` ã« stdout プラグインを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:45 msgid "or for my custom callback:" msgstr "ã¾ãŸã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®å ´åˆã¯ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:51 msgid "This only affects :ref:`ansible-playbook` by default." msgstr "ã“れã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ã€:ref:`ansible-playbook` ã«ã®ã¿å½±éŸ¿ã‚’åŠã¼ã—ã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:54 msgid "Setting a callback plugin for ad hoc commands" msgstr "アドホックコマンドã¸ã® callback プラグインã®è¨­å®š" #: ../../rst/plugins/callback.rst:56 msgid "The :ref:`ansible` ad hoc command specifically uses a different callback plugin for stdout, so there is an extra setting in :ref:`ansible_configuration_settings` you need to add to use the stdout callback defined above:" msgstr ":ref:`ansible` アドホックコマンドã¯ã€ç‰¹ã« stdout ã«ã¯åˆ¥ã® callback プラグインを使用ã™ã‚‹ãŸã‚ã€ä¸Šè¨˜ã«å®šç¾©ã—㟠stdout callback を使用ã™ã‚‹ã«ã¯ã€è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ :ref:`ansible_configuration_settings` ã«ã•らã«è¨­å®šã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:63 msgid "You can also set this as an environment variable:" msgstr "ã“れを環境変数ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/plugins/callback.rst:75 msgid "You can use ``ansible-doc -t callback -l`` to see the list of available plugins. Use ``ansible-doc -t callback `` to see specific documents and examples." msgstr "``ansible-doc -t callback -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t callback `` を使用ã—ã¦ã€ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/cliconf.rst:4 msgid "Cliconf plugins" msgstr "cliconf プラグイン" #: ../../rst/plugins/cliconf.rst:10 msgid "Cliconf plugins are abstractions over the CLI interface to network devices. They provide a standard interface for Ansible to execute tasks on those network devices." msgstr "cliconf プラグインã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¸ã® CLI インターフェースを介ã—ãŸæŠ½è±¡åŒ–ã§ã™ã€‚ã“れらã¯ã€Ansible ãŒã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã®æ¨™æº–インターフェースをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:12 msgid "These plugins generally correspond one-to-one to network device platforms. Ansible loads the appropriate cliconf plugin automatically based on the ``ansible_network_os`` variable." msgstr "通常ã€ã“れらã®ãƒ—ラグインã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ—ラットフォーム㫠1 対 1 ã§å¯¾å¿œã—ã¾ã™ã€‚Ansible 㯠``ansible_network_os`` 変数ã«åŸºã¥ã„ã¦é©åˆ‡ãª cliconf プラグインを自動的ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:17 msgid "Adding cliconf plugins" msgstr "cliconf プラグインã®è¿½åŠ " #: ../../rst/plugins/cliconf.rst:19 msgid "You can extend Ansible to support other network devices by dropping a custom plugin into the ``cliconf_plugins`` directory." msgstr "``cliconf_plugins`` ディレクトリーã«ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインを置ã„ã¦ã€Ansible ãŒä»–ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«æ‹¡å¼µã§ãã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:24 msgid "Using cliconf plugins" msgstr "cliconf プラグインã®ä½¿ç”¨" #: ../../rst/plugins/cliconf.rst:26 msgid "The cliconf plugin to use is determined automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality." msgstr "使用ã™ã‚‹ cliconf プラグイン㯠``ansible_network_os`` 変数ã‹ã‚‰è‡ªå‹•çš„ã«æ±ºå®šã•れã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã‚’上書ãã™ã‚‹ç†ç”±ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/plugins/cliconf.rst:28 msgid "Most cliconf plugins can operate without configuration. A few have additional options that can be set to affect how tasks are translated into CLI commands." msgstr "ã»ã¨ã‚“ã©ã® cliconf プラグインã¯è¨­å®šãªã—ã§å‹•作ã—ã¾ã™ã€‚タスク㌠CLI コマンドã«ã©ã®ã‚ˆã†ã«å¤‰æ›ã•れるã‹ã«å½±éŸ¿ã™ã‚‹è¿½åŠ ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:30 ../../rst/plugins/httpapi.rst:32 #: ../../rst/plugins/netconf.rst:30 ../../rst/plugins/terminal.rst:30 msgid "Plugins are self-documenting. Each plugin should document its configuration options." msgstr "プラグインã¯è‡ªå·±æ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã™ã€‚プラグインã”ã¨ã«ã€è¨­å®šã‚ªãƒ—ションã«ã¤ã„ã¦æ–‡æ›¸åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:35 msgid "Viewing cliconf plugins" msgstr "cliconf プラグインã®è¡¨ç¤º" #: ../../rst/plugins/cliconf.rst:37 msgid "These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several cliconf plugins. To list all available cliconf plugins on your control node, type ``ansible-doc -t cliconf -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t cliconf``." msgstr "ã“れらã®ãƒ—ラグイン㯠`Ansible Galaxy `_ ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚``pip`` を使用ã—㦠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€è¤‡æ•°ã® cliconf プラグインã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚コントロールノードã§åˆ©ç”¨å¯èƒ½ãª cliconf プラグインã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€``ansible-doc -t cliconf -l`` ã¨å…¥åŠ›ã—ã¾ã™ã€‚プラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’確èªã™ã‚‹ã«ã¯ã€``ansible-doc -t cliconf`` を使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/cliconf.rst:42 ../../rst/plugins/httpapi.rst:65 #: ../../rst/plugins/netconf.rst:42 ../../rst/plugins/terminal.rst:42 msgid ":ref:`Ansible for Network Automation`" msgstr ":ref:`Ansible for Network Automation`" #: ../../rst/plugins/cliconf.rst:43 ../../rst/plugins/httpapi.rst:66 #: ../../rst/plugins/netconf.rst:43 ../../rst/plugins/terminal.rst:43 msgid "An overview of using Ansible to automate networking devices." msgstr "Ansible を使用ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®è‡ªå‹•åŒ–ã®æ¦‚è¦" #: ../../rst/plugins/cliconf.rst:46 ../../rst/plugins/httpapi.rst:71 #: ../../rst/plugins/module.rst:42 ../../rst/plugins/module_util.rst:34 #: ../../rst/plugins/netconf.rst:46 ../../rst/plugins/terminal.rst:48 msgid "`irc.libera.chat `_" msgstr "`irc.libera.chat `_" #: ../../rst/plugins/cliconf.rst:47 ../../rst/plugins/httpapi.rst:72 #: ../../rst/plugins/netconf.rst:47 ../../rst/plugins/terminal.rst:49 msgid "#ansible-network IRC chat channel" msgstr "IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible-network)" #: ../../rst/plugins/connection.rst:10 msgid "Connection plugins allow Ansible to connect to the target hosts so it can execute tasks on them. Ansible ships with many connection plugins, but only one can be used per host at a time." msgstr "connection プラグインã«ã‚ˆã‚Šã€Ansible ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã¦ãã®ãƒ›ã‚¹ãƒˆã«ã‚るタスクを実行ã§ãるよã†ã«ã—ã¾ã™ã€‚Ansible ã«ã¯å¤šãã® connection プラグインãŒåŒæ¢±ã•れã¦ã„ã¾ã™ãŒã€ä¸€åº¦ã«ä½¿ç”¨ã§ãã‚‹ã®ã¯ 1 ã¤ã®ã¿ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:12 msgid "By default, Ansible ships with several connection plugins. The most commonly used are the :ref:`paramiko SSH`, native ssh (just called :ref:`ssh`), and :ref:`local` connection types. All of these can be used in playbooks and with :command:`/usr/bin/ansible` to decide how you want to talk to remote machines. If necessary, you can :ref:`create custom connection plugins `." msgstr "デフォルトã§ã¯ã€Ansible ã«ã¯è¤‡æ•°ã® connection プラグインãŒåŒæ¢±ã•れã¦ã„ã¾ã™ã€‚最も一般的ã«ä½¿ç”¨ã•れるもã®ã¯ã€:ref:`paramiko SSH` ãƒã‚¤ãƒ†ã‚£ãƒ– ssh (ãŸã  :ref:`ssh` ã¨å‘¼ã°ã‚Œã¾ã™)ã€ãŠã‚ˆã³ :ref:`local` 接続タイプã§ã™ã€‚ã“れらã¯ã™ã¹ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¨ã®é€šä¿¡æ–¹æ³•を決定ã™ã‚‹ãŸã‚ã« Playbook 㨠:command:`/usr/bin/ansible` ã§ä½¿ç”¨ã§ãã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦:ref:`create custom connection plugins ` ãŒã§ãã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:14 msgid "The basics of these connection types are covered in the :ref:`getting started` section." msgstr "ã“ã®ã‚ˆã†ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®åŸºæœ¬æƒ…å ±ã¯ã€:ref:`getting started` ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:19 msgid "``ssh`` plugins" msgstr "``ssh`` プラグイン" #: ../../rst/plugins/connection.rst:21 msgid "Because ssh is the default protocol used in system administration and the protocol most used in Ansible, ssh options are included in the command line tools. See :ref:`ansible-playbook` for more details." msgstr "ssh ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†ã§ä½¿ç”¨ã•れるデフォルトã®ãƒ—ロトコルã§ã‚りã€Ansible ã§æœ€ã‚‚使用ã•れるプロトコルã§ã‚‚ã‚ã‚‹ãŸã‚ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ„ール㫠ssh オプションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`ansible-playbook`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/connection.rst:26 msgid "Adding connection plugins" msgstr "connection プラグインã®è¿½åŠ " #: ../../rst/plugins/connection.rst:28 msgid "You can extend Ansible to support other transports (such as SNMP or message bus) by dropping a custom plugin into the ``connection_plugins`` directory." msgstr "カスタムã®ãƒ—ラグインを ``connection_plugins`` ディレクトリーã«ç½®ã„ã¦ã€ä»–ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆ (SNMP やメッセージãƒã‚¹ãªã©) をサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã« Ansible ã‚’æ‹¡å¼µã§ãã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:34 msgid "Using connection plugins" msgstr "connection プラグインã®ä½¿ç”¨" #: ../../rst/plugins/connection.rst:36 msgid "You can set the connection plugin globally via :ref:`configuration`, at the command line (``-c``, ``--connection``), as a :ref:`keyword ` in your play, or by setting a :ref:`variable`, most often in your inventory. For example, for Windows machines you might want to set the :ref:`winrm ` plugin as an inventory variable." msgstr "connection プラグインã¯ã€:ref:`設定`ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ (``-c``ã€``--connection``)を経由ã™ã‚‹ã‹ã€ãƒ—レイ㮠:ref:`キーワード ` ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã‹ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ :ref:`変数` を設定ã™ã‚‹ã“㨠(ã‚‚ã£ã¨ã‚‚多ã„例) ã§è¨­å®šã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Windows マシンã§ã¯ :ref:`winrm ` プラグインをインベントリー変数ã¨ã—ã¦è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:39 msgid "Most connection plugins can operate with minimal configuration. By default they use the :ref:`inventory hostname` and defaults to find the target host." msgstr "ã»ã¨ã‚“ã©ã® connection ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¯æœ€å°è¨­å®šã§å‹•作ã—ã¾ã™ã€‚デフォルトã§ã¯ :ref:`インベントリーã®ãƒ›ã‚¹ãƒˆå` を使用ã—ã€ãƒ‡ãƒ•ォルトã§ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã‚’検索ã—ã¾ã™ã€‚" #: ../../rst/plugins/connection.rst:41 msgid "Plugins are self-documenting. Each plugin should document its configuration options. The following are connection variables common to most connection plugins:" msgstr "プラグインã¯è‡ªå·±æ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã™ã€‚å„プラグインã¯ã€ãã®è¨­å®šã‚ªãƒ—ションを文書化ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã¯ã€ã»ã¨ã‚“ã©ã® connection プラグインã«å…±é€šã™ã‚‹æŽ¥ç¶šå¤‰æ•°ã§ã™ã€‚" #: ../../rst/plugins/connection.rst:43 msgid ":ref:`ansible_host`" msgstr ":ref:`ansible_host`" #: ../../rst/plugins/connection.rst:44 msgid "The name of the host to connect to, if different from the :ref:`inventory ` hostname." msgstr "接続ã™ã‚‹ãƒ›ã‚¹ãƒˆã®åå‰ (:ref:`インベントリー ` ã®ãƒ›ã‚¹ãƒˆåã¨ç•°ãªã‚‹å ´åˆ)。" #: ../../rst/plugins/connection.rst:45 msgid ":ref:`ansible_port`" msgstr ":ref:`ansible_port`" #: ../../rst/plugins/connection.rst:46 msgid "The ssh port number, for :ref:`ssh ` and :ref:`paramiko_ssh ` it defaults to 22." msgstr ":ref:`ssh ` ãŠã‚ˆã³ :ref:`paramiko_ssh ` ã®å ´åˆã¯ ssh ãƒãƒ¼ãƒˆç•ªå·ã€‚デフォルト㯠22 ã§ã™ã€‚" #: ../../rst/plugins/connection.rst:48 msgid ":ref:`ansible_user`" msgstr ":ref:`ansible_user`" #: ../../rst/plugins/connection.rst:48 msgid "The default user name to use for log in. Most plugins default to the 'current user running Ansible'." msgstr "ログインã«ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルトã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å。ã»ã¨ã‚“ã©ã®ãƒ—ラグインã¯ãƒ‡ãƒ•ォルト㧠Ansible を実行ã—ã¦ã„ã‚‹ç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚" #: ../../rst/plugins/connection.rst:50 msgid "Each plugin might also have a specific version of a variable that overrides the general version. For example, ``ansible_ssh_host`` for the :ref:`ssh ` plugin." msgstr "プラグインã”ã¨ã«ã€ä¸€èˆ¬çš„ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上書ãã™ã‚‹ç‰¹å®šã®å¤‰æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå­˜åœ¨ã™ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€:ref:`ssh ` プラグインã®å ´åˆã¯ ``ansible_ssh_host`` ã§ã™ã€‚" #: ../../rst/plugins/connection.rst:57 msgid "You can use ``ansible-doc -t connection -l`` to see the list of available plugins. Use ``ansible-doc -t connection `` to see detailed documentation and examples." msgstr "``ansible-doc -t connection -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t connection `` を使用ã—ã¦ã€è©³ç´°ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/connection.rst:63 msgid ":ref:`Working with Playbooks`" msgstr ":ref:`Working with Playbooks`" #: ../../rst/plugins/docs_fragment.rst:4 msgid "Docs fragments" msgstr "ドキュメントフラグメント" #: ../../rst/plugins/docs_fragment.rst:10 msgid "Docs fragments allow you to document common parameters of multiple plugins or modules in a single place." msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを使用ã™ã‚‹ã¨ã€è¤‡æ•°ã®ãƒ—ラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å…±é€šã®ãƒ‘ラメーターを 1 ã‚«æ‰€ã§æ–‡æ›¸åŒ–ã§ãã¾ã™ã€‚" #: ../../rst/plugins/docs_fragment.rst:15 msgid "Enabling docs fragments" msgstr "ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/docs_fragment.rst:17 msgid "You can add a custom docs fragment by dropping it into a ``doc_fragments`` directory adjacent to your collection or role, just like any other plugin." msgstr "ä»–ã®ãƒ—ラグインã¨åŒæ§˜ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚„ロールã«éš£æŽ¥ã™ã‚‹ ``doc_fragments`` ディレクトリーã«ç½®ãã“ã¨ã§ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを追加ã§ãã¾ã™ã€‚" #: ../../rst/plugins/docs_fragment.rst:22 msgid "Using docs fragments" msgstr "ドキュメントフラグメントã®ä½¿ç”¨" #: ../../rst/plugins/docs_fragment.rst:24 msgid "Only collection developers and maintainers use docs fragments. For more information on using docs fragments, see :ref:`module_docs_fragments` or :ref:`docfragments_collections`." msgstr "コレクション開発者ãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ç®¡ç†è€…ã®ã¿ãŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ラグメントを使用ã—ã¾ã™ã€‚ドキュメントフラグメントã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`module_docs_fragments`ã€ã¾ãŸã¯ã€Œ:ref:`docfragments_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/docs_fragment.rst:28 ../../rst/plugins/module.rst:36 #: ../../rst/plugins/module_util.rst:28 msgid ":ref:`developing_modules_general`" msgstr ":ref:`developing_modules_general`" #: ../../rst/plugins/docs_fragment.rst:29 ../../rst/plugins/module.rst:37 #: ../../rst/plugins/module_util.rst:29 msgid "An introduction to creating Ansible modules" msgstr "Ansible モジュール作æˆã®æ¦‚è¦" #: ../../rst/plugins/docs_fragment.rst:30 ../../rst/plugins/module.rst:38 #: ../../rst/plugins/module_util.rst:30 msgid ":ref:`developing_collections`" msgstr ":ref:`developing_collections`" #: ../../rst/plugins/docs_fragment.rst:31 ../../rst/plugins/module.rst:39 #: ../../rst/plugins/module_util.rst:31 msgid "An guide to creating Ansible collections" msgstr "Ansible コレクションã®ä½œæˆã‚¬ã‚¤ãƒ‰" #: ../../rst/plugins/filter.rst:10 msgid "Filter plugins manipulate data. With the right filter you can extract a particular value, transform data types and formats, perform mathematical calculations, split and concatenate strings, insert dates and times, and do much more. Ansible uses the :ref:`standard filters ` shipped with Jinja2 and adds some specialized filter plugins. You can :ref:`create custom Ansible filters as plugins `." msgstr "Filter プラグインã¯ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã—ã¾ã™ã€‚é©åˆ‡ãªãƒ•ィルターを使用ã™ã‚‹ã¨ã€ç‰¹å®šã®å€¤ã®æŠ½å‡ºã€ãƒ‡ãƒ¼ã‚¿åž‹ã¨å½¢å¼ã®å¤‰æ›ã€æ•°å­¦çš„ãªè¨ˆç®—ã®å®Ÿè¡Œã€é€£çµæ–‡å­—åˆ—ã‚„é€£çµæ–‡å­—列ã®å®Ÿè¡Œã€æ—¥ä»˜ã¨æ™‚é–“ã®æŒ¿å…¥ãªã©ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible 㯠Jinja2 ã«åŒæ¢±ã•れã¦ã„ã‚‹ :ref:`standard filters ` を使用ã—ã¦ã€ç‰¹åˆ¥ãª filter プラグインを追加ã—ã¾ã™ã€‚:ref:`create custom Ansible filters as plugins ` ãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/plugins/filter.rst:15 msgid "Enabling filter plugins" msgstr "filter ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/filter.rst:17 msgid "You can add a custom filter plugin by dropping it into a ``filter_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the filter plugin directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠filter プラグインを追加ã™ã‚‹ã«ã¯ã€ãã®ãƒ—ラグインをã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``filter_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/filter.rst:22 msgid "Using filter plugins" msgstr "filter プラグインã®ä½¿ç”¨" #: ../../rst/plugins/filter.rst:24 msgid "For information on using filter plugins, see :ref:`playbooks_filters`." msgstr "filter プラグインã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`playbooks_filters`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/httpapi.rst:4 msgid "Httpapi plugins" msgstr "httpapi プラグイン" #: ../../rst/plugins/httpapi.rst:10 msgid "Httpapi plugins tell Ansible how to interact with a remote device's HTTP-based API and execute tasks on the device." msgstr "httpapi プラグインã¯ã€Ansible ã«å¯¾ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã® HTTP ベース㮠API ã¨å¯¾è©±ã—ã¦ã€ãã®ãƒ‡ãƒã‚¤ã‚¹ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹æ–¹æ³•を指示ã—ã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:13 msgid "Each plugin represents a particular dialect of API. Some are platform-specific (Arista eAPI, Cisco NXAPI), while others might be usable on a variety of platforms (RESTCONF). Ansible loads the appropriate httpapi plugin automatically based on the ``ansible_network_os`` variable." msgstr "å„プラグインã¯ã€ç‰¹å®šã® API 方言を表ã—ã¾ã™ã€‚プラットフォーム固有ã®ã‚‚ã® (Arista eAPIã€Cisco NXAPI) ãŒã‚りã€ã•ã¾ã–ã¾ãªãƒ—ラットフォーム (RESTCONF) を使用ã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚Ansible 㯠``ansible_network_os`` 変数ã«åŸºã¥ã„ã¦é©åˆ‡ãª httpapi プラグインを自動的ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:19 msgid "Adding httpapi plugins" msgstr "httpapi プラグインã®è¿½åŠ " #: ../../rst/plugins/httpapi.rst:21 msgid "You can extend Ansible to support other APIs by dropping a custom plugin into the ``httpapi_plugins`` directory. See :ref:`developing_plugins_httpapi` for details." msgstr "``httpapi_plugins`` ディレクトリーã«ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインを置ã„ã¦ã€Ansible ãŒä»–ã® API をサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«æ‹¡å¼µã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`developing_plugins_httpapi`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/httpapi.rst:26 msgid "Using httpapi plugins" msgstr "httpapi プラグインã®ä½¿ç”¨" #: ../../rst/plugins/httpapi.rst:28 msgid "The httpapi plugin to use is determined automatically from the ``ansible_network_os`` variable." msgstr "使用ã™ã‚‹ httpapi プラグインã¯ã€``ansible_network_os`` 変数ã‹ã‚‰è‡ªå‹•çš„ã«åˆ¤æ–­ã•れã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:30 msgid "Most httpapi plugins can operate without configuration. Additional options may be defined by each plugin." msgstr "ã»ã¨ã‚“ã©ã® httpapi プラグインã¯è¨­å®šãªã—ã§å‹•作ã—ã¾ã™ã€‚追加オプションã¯å„プラグインã§å®šç¾©ã§ãã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:35 msgid "The following sample playbook shows the httpapi plugin for an Arista network device, assuming an inventory variable set as ``ansible_network_os=eos`` for the httpapi plugin to trigger off:" msgstr "以下㮠Playbook サンプルã§ã¯ã€Arista ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® httpapi プラグインã«ã¤ã„ã¦ç¤ºã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’ ``ansible_network_os=eos`` ã«è¨­å®šã—㦠httpapi プラグインãŒã‚ªãƒ•ã«ãªã‚‹ã‚ˆã†ã«ãƒˆãƒªã‚¬ãƒ¼ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:54 msgid "See the full working example `on GitHub `_." msgstr "`GitHub `_ ã«ã‚る完全ãªä½œæ¥­ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/httpapi.rst:59 msgid "Viewing httpapi plugins" msgstr "httpapi プラグインã®è¡¨ç¤º" #: ../../rst/plugins/httpapi.rst:61 msgid "These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several httpapi plugins. To list all available httpapi plugins on your control node, type ``ansible-doc -t httpapi -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t httpapi``." msgstr "ã“れらã®ãƒ—ラグイン㯠`Ansible Galaxy `_ ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚``pip`` を使用ã—㦠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€è¤‡æ•°ã® httpapi プラグインã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚コントロールノードã§åˆ©ç”¨å¯èƒ½ãª httpapi プラグインã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€``ansible-doc -t httpapi -l`` ã¨å…¥åŠ›ã—ã¾ã™ã€‚プラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’確èªã™ã‚‹ã«ã¯ã€``ansible-doc -t httpapi`` を使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/httpapi.rst:67 msgid ":ref:`Developing network modules`" msgstr ":ref:`Developing network modules`" #: ../../rst/plugins/httpapi.rst:68 msgid "How to develop network modules." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹ç™ºæ–¹æ³•" #: ../../rst/plugins/inventory.rst:10 msgid "Inventory plugins allow users to point at data sources to compile the inventory of hosts that Ansible uses to target tasks, either using the ``-i /path/to/file`` and/or ``-i 'host1, host2'`` command line parameters or from other configuration sources. If necessary, you can :ref:`create custom inventory plugins `." msgstr "inventory プラグインã§ã¯ã€``-i /path/to/file`` ã‚„ ``-i 'host1, host2'`` コマンドラインパラメーターを使用ã—ãŸã‚Šã€ä»–ã®è¨­å®šã‚½ãƒ¼ã‚¹ã‚’使用ã—ãŸã‚Šã—ã¦ã€Ansible ãŒã‚¿ã‚¹ã‚¯ã®å¯¾è±¡ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’コンパイルã™ã‚‹ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿ã‚½ãƒ¼ã‚¹ã‚’指定ã§ãã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦:ref:`create custom inventory plugins `ã§ãã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:15 msgid "Enabling inventory plugins" msgstr "inventory ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/inventory.rst:17 msgid "Most inventory plugins shipped with Ansible are enabled by default or can be used by with the ``auto`` plugin." msgstr "Ansible ã«åŒæ¢±ã•れるã»ã¨ã‚“ã©ã® inventory プラグインã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã‚‹ã‹ã€``auto`` プラグインã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:19 msgid "In some circumstances, for example, if the inventory plugin does not use a YAML configuration file, you may need to enable the specific plugin. You can do this by setting ``enable_plugins`` in your :ref:`ansible.cfg ` file in the ``[inventory]`` section. Modifying this will override the default list of enabled plugins. Here is the default list of enabled plugins that ships with Ansible:" msgstr "ãŸã¨ãˆã°ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグイン㌠YAML 設定ファイルを使用ã—ãªã„å ´åˆã¯ã€ç‰¹å®šã®ãƒ—ラグインを有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€``[inventory]`` セクション㮠:ref:`ansible.cfg ` ファイル㧠``enable_plugins`` を設定ã—ã¾ã™ã€‚ã“れを変更ã™ã‚‹ã¨ã€æœ‰åŠ¹åŒ–ã•れãŸãƒ—ラグインã®ãƒ‡ãƒ•ォルト一覧ãŒä¸Šæ›¸ãã•れã¾ã™ã€‚以下ã¯ã€Ansible ã«åŒæ¢±ã•れる有効ãªãƒ—ラグインã®ãƒ‡ãƒ•ォルト一覧ã§ã™ã€‚" #: ../../rst/plugins/inventory.rst:26 msgid "If the plugin is in a collection, use the fully qualified name:" msgstr "プラグインをコレクションã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€å®Œå…¨ä¿®é£¾åを使用ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/inventory.rst:37 msgid "Using inventory plugins" msgstr "inventory プラグインã®ä½¿ç”¨" #: ../../rst/plugins/inventory.rst:39 msgid "To use an inventory plugin, you must provide an inventory source. Most of the time this is a file containing host information or a YAML configuration file with options for the plugin. You can use the ``-i`` flag to provide inventory sources or configure a default inventory path." msgstr "inventory プラグインを使用ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ã»ã¨ã‚“ã©ã¯ã€ãƒ—ラグインã®ã‚ªãƒ—ションをæŒã¤ãƒ›ã‚¹ãƒˆæƒ…å ±ã¾ãŸã¯ YAML 設定ファイルをå«ã‚€ãƒ•ァイルã§ã™ã€‚``-i`` フラグを使用ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’æä¾›ã™ã‚‹ã‹ã€ãƒ‡ãƒ•ォルトã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‘スを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:45 msgid "To start using an inventory plugin with a YAML configuration source, create a file with the accepted filename schema documented for the plugin in question, then add ``plugin: plugin_name``. Use the fully qualified name if the plugin is in a collection." msgstr "YAML 設定ソース㧠inventory プラグインã®ä½¿ç”¨ã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€è©²å½“ã™ã‚‹ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã§æ–‡æ›¸åŒ–ã•れã¦ã„ã‚‹å—ã‘入れå¯èƒ½ãªãƒ•ァイルåã®ã‚¹ã‚­ãƒ¼ãƒžã§ãƒ•ァイルを作æˆã—ã€ãã®ãƒ•ァイル㫠``plugin: plugin_name`` を追加ã—ã¾ã™ã€‚プラグインãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹å ´åˆã¯ã€å®Œå…¨ä¿®é£¾åを使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:52 msgid "Each plugin should document any naming restrictions. In addition, the YAML config file must end with the extension ``yml`` or ``yaml`` to be enabled by default with the ``auto`` plugin (otherwise, see the section above on enabling plugins)." msgstr "å„プラグインã¯å‘½å制é™ã«ã¤ã„ã¦è¨˜è¼‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€YAML 設定ファイルã¯ã€``auto`` プラグインã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ã™ã‚‹æ‹¡å¼µå­ ``yml`` ã¾ãŸã¯ ``yaml`` ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (åŒæ§˜ã«ã€ãƒ—ラグインを有効ã«ã™ã‚‹éš›ã®ä¸Šè¨˜ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/plugins/inventory.rst:54 msgid "After providing any required options, you can view the populated inventory with ``ansible-inventory -i demo.aws_ec2.yml --graph``:" msgstr "å¿…è¦ãªã‚ªãƒ—ションを指定ã—ãŸã‚‰ã€``ansible-inventory -i demo.aws_ec2.yml --graph`` ã§è¨­å®šã•れ追加ã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’表示ã§ãã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:64 msgid "If you are using an inventory plugin in a playbook-adjacent collection and want to test your setup with ``ansible-inventory``, use the ``--playbook-dir`` flag." msgstr "Playbook ã«éš£æŽ¥ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ inventory プラグインを使用ã—ã¦ã€``ansible-inventory`` ã§è¨­å®šã‚’テストã™ã‚‹ã«ã¯ã€``--playbook-dir`` フラグを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:66 msgid "Your inventory source might be a directory of inventory configuration files. The constructed inventory plugin only operates on those hosts already in inventory, so you may want the constructed inventory configuration parsed at a particular point (such as last). Ansible parses the directory recursively, alphabetically. You cannot configure the parsing approach, so name your files to make it work predictably. Inventory plugins that extend constructed features directly can work around that restriction by adding constructed options in addition to the inventory plugin options. Otherwise, you can use ``-i`` with multiple sources to impose a specific order, for example ``-i demo.aws_ec2.yml -i clouds.yml -i constructed.yml``." msgstr "インベントリーソースã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šãƒ•ァイルã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã‚ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚構築ã—㟠inventory プラグインã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã™ã§ã«å­˜åœ¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã§ã®ã¿å‹•作ã™ã‚‹ãŸã‚ã€ç‰¹å®šã®ã‚¿ã‚¤ãƒŸãƒ³ã‚° (「最後ã€ãªã©) ã§æ§‹ç¯‰ã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šã‚’è§£æžã—ã¦ãã ã•ã„。Ansible ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’å†å¸°çš„ã«ã‚¢ãƒ«ãƒ•ァベットã§è§£æžã—ã¾ã™ã€‚è§£æžã‚¢ãƒ—ローãƒã¯è¨­å®šã§ããªã„ãŸã‚ã€æƒ³å®šé€šã‚Šã«æ©Ÿèƒ½ã™ã‚‹ã‚ˆã†ã«ã€ãƒ•ァイルã®åå‰ã‚’指定ã—ã¾ã™ã€‚構築ã—ãŸæ©Ÿèƒ½ã‚’直接拡張ã—㟠inventory プラグインã¯ã€inventory プラグインã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ§‹ç¯‰ã—ãŸã‚ªãƒ—ションを追加ã—ã€åˆ¶ç´„を回é¿ã—ã¦æ©Ÿèƒ½ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€è¤‡æ•°ã‚½ãƒ¼ã‚¹ã« ``-i`` を使用ã—ã¦ç‰¹å®šã®é †ç•ªã‚’指定ã—ã¾ã™ (例: ``-i demo.aws_ec2.yml -i clouds.yml -i constructed.yml``)。" #: ../../rst/plugins/inventory.rst:68 msgid "You can create dynamic groups using host variables with the constructed ``keyed_groups`` option. The option ``groups`` can also be used to create groups and ``compose`` creates and modifies host variables. Here is an aws_ec2 example utilizing constructed features:" msgstr "構築ã—㟠``keyed_groups`` オプションã¨ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’使用ã—ã¦ã€å‹•çš„ãªã‚°ãƒ«ãƒ¼ãƒ—を作æˆã§ãã¾ã™ã€‚``groups`` オプションを使用ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã—ã€``compose`` ã§ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’作æˆã—ã¦å¤‰æ›´ã§ãã¾ã™ã€‚以下ã¯ã€æ§‹ç¯‰ã—ãŸæ©Ÿèƒ½ã‚’使用ã™ã‚‹ aws_ec2 ã®ã‚µãƒ³ãƒ—ルã§ã™ã€‚" #: ../../rst/plugins/inventory.rst:89 msgid "Now the output of ``ansible-inventory -i demo.aws_ec2.yml --graph``:" msgstr "ã“れã§ã€``ansible-inventory -i demo.aws_ec2.yml --graph`` ã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:107 msgid "If a host does not have the variables in the configuration above (in other words, ``tags.Name``, ``tags``, ``private_ip_address``), the host will not be added to groups other than those that the inventory plugin creates and the ``ansible_host`` host variable will not be modified." msgstr "上記ã®è¨­å®šã§ãƒ›ã‚¹ãƒˆã«å¤‰æ•°ãŒãªã„å ´åˆã«ã¯ (ã¤ã¾ã‚Š ``tags.Name``ã€``tags``ã€``private_ip_address``)ã€ãƒ›ã‚¹ãƒˆã¯ inventory プラグインãŒä½œæˆã—ãŸã‚°ãƒ«ãƒ¼ãƒ—以外ã«ã¯è¿½åŠ ã•れãšã€ã¾ãŸ ``ansible_host`` ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚‚変更ã•れã¾ã›ã‚“。" #: ../../rst/plugins/inventory.rst:109 msgid "Inventory plugins that support caching can use the general settings for the fact cache defined in the ``ansible.cfg`` file's ``[defaults]`` section or define inventory-specific settings in the ``[inventory]`` section. Individual plugins can define plugin-specific cache settings in their config file:" msgstr "キャッシュをサãƒãƒ¼ãƒˆã™ã‚‹ inventory プラグインã¯ã€``ansible.cfg`` ファイル㮠``[defaults]`` セクションã«å®šç¾©ã•れãŸãƒ•ァクトキャッシュã®ä¸€èˆ¬è¨­å®šã‚’使用ã™ã‚‹ã‹ã€``[inventory]`` セクションã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å›ºæœ‰ã®è¨­å®šã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚個々ã®ãƒ—ラグインã¯ã€è¨­å®šãƒ•ァイルã§ãƒ—ラグイン固有ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¨­å®šã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/plugins/inventory.rst:121 msgid "Here is an example of setting inventory caching with some fact caching defaults for the cache plugin used and the timeout in an ``ansible.cfg`` file:" msgstr "以下ã¯ã€``ansible.cfg`` ファイルã«ã€ä½¿ç”¨ã™ã‚‹ chache プラグインã«ãƒ‡ãƒ•ォルト設定ã•れã¦ã„るファクトキャッシュã®ä¸€éƒ¨ã‚’使用ã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¨ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/plugins/inventory.rst:139 msgid "You can use ``ansible-doc -t inventory -l`` to see the list of available plugins. Use ``ansible-doc -t inventory `` to see plugin-specific documentation and examples." msgstr "``ansible-doc -t inventory -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t inventory `` を使用ã—ã¦ã€ãƒ—ラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/lookup.rst:10 msgid "Lookup plugins are an Ansible-specific extension to the Jinja2 templating language. You can use lookup plugins to access data from outside sources (files, databases, key/value stores, APIs, and other services) within your playbooks. Like all :ref:`templating `, lookups execute and are evaluated on the Ansible control machine. Ansible makes the data returned by a lookup plugin available using the standard templating system. You can use lookup plugins to load variables or templates with information from external sources. You can :ref:`create custom lookup plugins `." msgstr "lookup プラグインã¯ã€Jinja2 テンプレート言語ã¸ã® Ansible å›ºæœ‰ã®æ‹¡å¼µã§ã™ã€‚lookup プラグインを使用ã—ã¦ã€Playbook 内ã®å¤–部ソース (ファイルã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ã‚­ãƒ¼/値ã®ã‚¹ãƒˆã‚¢ã€APIã€ãã®ä»–ã®ã‚µãƒ¼ãƒ“ス) ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚:ref:`templating ` ã¯ã™ã¹ã¦ã€Ansible 制御マシン㧠lookup を実行ã—ã€è©•価ã•れã¾ã™ã€‚Ansible ã¯ã€æ¨™æº–ã®ä¸€æ™‚システムã§åˆ©ç”¨å¯èƒ½ãª lookup プラグインã«ã‚ˆã‚Šè¿”ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’æä¾›ã—ã¾ã™ã€‚lookup プラグインを使用ã™ã‚‹ã¨ã€å¤‰æ•°ã‚„テンプレートã«å¤–部ソースã‹ã‚‰ã®æƒ…報を読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`create custom lookup plugins ` ã§ãã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:13 msgid "Lookups are executed with a working directory relative to the role or play, as opposed to local tasks, which are executed relative the executed script." msgstr "ルックアップã¯ã€ãƒ­ãƒ¼ãƒ«ã‚„プレイã«ç›¸å¯¾ã™ã‚‹ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§å®Ÿè¡Œã•れã¾ã™ã€‚一方ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¿ã‚¹ã‚¯ã¯ã€å®Ÿè¡Œã•れãŸã‚¹ã‚¯ãƒªãƒ—トã«ç›¸å¯¾ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:15 msgid "Pass ``wantlist=True`` to lookups to use in Jinja2 template \"for\" loops." msgstr "``wantlist=True`` ã‚’ lookup ã«æ¸¡ã—ã¦ã€Jinja2 テンプレート「forã€ãƒ«ãƒ¼ãƒ—ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:16 msgid "By default, lookup return values are marked as unsafe for security reasons. If you trust the outside source your lookup accesses, pass ``allow_unsafe=True`` to allow Jinja2 templates to evaluate lookup values." msgstr "デフォルトã§ã¯ã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®æˆ»ã‚Šå€¤ã¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®ç†ç”±ã§å®‰å…¨ã§ãªã„ã¨è­˜åˆ¥ã•れã¾ã™ã€‚ルックアップãŒã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¤–部ソースを信頼ã™ã‚‹å ´åˆã¯ã€``allow_unsafe=True`` を渡ã—㦠Jinja2 テンプレートãŒãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—値を評価ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:19 msgid "Some lookups pass arguments to a shell. When using variables from a remote/untrusted source, use the `|quote` filter to ensure safe usage." msgstr "ルックアップã®ä¸­ã«ã¯ã€ã‚·ã‚§ãƒ«ã«å¼•数を渡ã™ã‚‚ã®ãŒã‚りã¾ã™ã€‚リモート/ä¿¡é ¼ã•れã¦ã„ãªã„ソースã‹ã‚‰å¤‰æ•°ã‚’使用ã™ã‚‹å ´åˆã«ã¯ã€`|quote` フィルターを使用ã—ã¦ã€å®‰å…¨ã«ä½¿ç”¨ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:25 msgid "Enabling lookup plugins" msgstr "lookup ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/lookup.rst:27 msgid "Ansible enables all lookup plugins it can find. You can activate a custom lookup by either dropping it into a ``lookup_plugins`` directory adjacent to your play, inside the ``plugins/lookup/`` directory of a collection you have installed, inside a standalone role, or in one of the lookup directory sources configured in :ref:`ansible.cfg `." msgstr "Ansibleã¯ã€æ¤œå‡ºã—ãŸã™ã¹ã¦ã® lookup プラグインを有効ã«ã—ã¾ã™ã€‚カスタム lookup を有効ã«ã™ã‚‹ã«ã¯ã€ãƒ—レイã«éš£æŽ¥ã™ã‚‹ ``lookup_plugins`` ディレクトリーã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``plugins/lookup/`` ディレクトリーã€ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ãƒ­ãƒ¼ãƒ«ã€ã¾ãŸã¯ :ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ディレクトリソースã®ã„ãšã‚Œã‹ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:33 msgid "Using lookup plugins" msgstr "lookup プラグインã®ä½¿ç”¨" #: ../../rst/plugins/lookup.rst:35 msgid "You can use lookup plugins anywhere you can use templating in Ansible: in a play, in variables file, or in a Jinja2 template for the :ref:`template ` module. For more information on using lookup plugins, see :ref:`playbooks_lookups`." msgstr "lookup プラグインã¯ã€Ansible ã§ãƒ†ãƒ³ãƒ—レートを使用ã§ãる場所ã§ä½¿ç”¨ã§ãã¾ã™ã€‚ã“れã¯ãƒ—レイã€å¤‰æ•°ãƒ•ァイルã€ã¾ãŸã¯ :ref:`template ` モジュール㮠Jinja2 テンプレートã§ä½¿ç”¨ã§ãã¾ã™ã€‚lookup プラグインã®ä½¿ç”¨ã®è©³ç´°ã¯ã€:ref:`playbooks_lookups` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/lookup.rst:42 msgid "Lookups are an integral part of loops. Wherever you see ``with_``, the part after the underscore is the name of a lookup. For this reason, most lookups output lists and take lists as input; for example, ``with_items`` uses the :ref:`items ` lookup::" msgstr "lookups ã¯ãƒ«ãƒ¼ãƒ—ã«ã¯æ¬ ã‹ã›ãªã„è¦ç´ ã§ã™ã€‚``with_`` ã¨è¡¨ç¤ºã•れる場åˆã¯ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã®å¾Œã®éƒ¨åˆ†ãŒãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®åå‰ã«ãªã‚Šã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¯ãƒªã‚¹ãƒˆã‚’出力ã—ã€å…¥åŠ›ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚’å—ã‘å–りã¾ã™ã€‚ãŸã¨ãˆã°ã€``with_items`` 㯠:ref:`items ` lookup を使用ã—ã¾ã™::" #: ../../rst/plugins/lookup.rst:49 msgid "You can combine lookups with :ref:`filters `, :ref:`tests ` and even each other to do some complex data generation and manipulation. For example::" msgstr "lookup 㨠:ref:`filters `ã€:ref:`tests `ã€ã¾ãŸã¯ãれãžã‚Œã‚’組ã¿åˆã‚ã›ã¦è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿ç”Ÿæˆã‚„データæ“作ãŒå¯èƒ½ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:61 msgid "You can control how errors behave in all lookup plugins by setting ``errors`` to ``ignore``, ``warn``, or ``strict``. The default setting is ``strict``, which causes the task to fail if the lookup returns an error. For example:" msgstr "``errors`` ã‚’ ``ignore``ã€``warn``ã€ã¾ãŸã¯ ``strict`` ã«è¨­å®šã—ã¦ã€ã™ã¹ã¦ã® lookup プラグインã§ã‚¨ãƒ©ãƒ¼ã®å‹•作を制御ã§ãã¾ã™ã€‚デフォルト設定㯠``strict`` ã§ã€lookup ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã™ã¨ã‚¿ã‚¹ã‚¯ã¯å¤±æ•—ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:63 msgid "To ignore lookup errors::" msgstr "ルックアップエラーを無視ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:77 msgid "To get a warning instead of a failure::" msgstr "失敗ã•ã›ã‚‹ã®ã§ã¯ãªã警告を出ã™ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:93 msgid "To get a fatal error (the default)::" msgstr "致命的ãªã‚¨ãƒ©ãƒ¼ã‚’å–å¾—ã™ã‚‹ (デフォルト) ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™::" #: ../../rst/plugins/lookup.rst:108 msgid "Forcing lookups to return lists: ``query`` and ``wantlist=True``" msgstr "ルックアップãŒå¼·åˆ¶çš„ã«ãƒªã‚¹ãƒˆã‚’è¿”ã™ã‚ˆã†ã«ã™ã‚‹ï¼š ``query`` ãŠã‚ˆã³ ``wantlist=True``" #: ../../rst/plugins/lookup.rst:112 msgid "In Ansible 2.5, a new Jinja2 function called ``query`` was added for invoking lookup plugins. The difference between ``lookup`` and ``query`` is largely that ``query`` will always return a list. The default behavior of ``lookup`` is to return a string of comma separated values. ``lookup`` can be explicitly configured to return a list using ``wantlist=True``." msgstr "Ansible 2.5 ã§ã¯ã€lookup プラグインを呼ã³å‡ºã™ãŸã‚ã« ``query`` ã¨å‘¼ã°ã‚Œã‚‹æ–°ã—ã„ Jinja2 関数ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚``lookup`` 㨠``query`` ã®ç›¸é•点ã¯ã€``query`` ãŒå¸¸ã«ãƒªã‚¹ãƒˆã‚’è¿”ã™ã“ã¨ã§ã™ã€‚``lookup`` ã®ãƒ‡ãƒ•ォルト動作ã¯ã€ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®å€¤ã®æ–‡å­—列を返ã™ã“ã¨ã§ã™ã€‚``lookup`` ã¯ã€``wantlist=True`` を使用ã—ã¦ãƒªã‚¹ãƒˆã‚’è¿”ã™ã‚ˆã†ã«æ˜Žç¤ºçš„ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:115 msgid "This feature provides an easier and more consistent interface for interacting with the new ``loop`` keyword, while maintaining backwards compatibility with other uses of ``lookup``." msgstr "ã“ã®æ©Ÿèƒ½ã«ã‚ˆã‚Šã€æ–°ã—ã„ ``loop`` キーワードをæ“作ã™ã‚‹ãŸã‚ã®ã€ã‚ˆã‚Šç°¡å˜ã§ä¸€è²«æ€§ã®ã‚ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒæä¾›ã•れã€åŒæ™‚ã« ``lookup`` ã®ä»–ã®ä½¿ã„æ–¹ã¨ã®å¾Œæ–¹äº’æ›æ€§ã‚‚ç¶­æŒã•れã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:117 msgid "The following examples are equivalent:" msgstr "以下ã®ä¾‹ã¯ã©ã¡ã‚‰ã‚‚åŒç­‰ã®æ“作ãŒã§ãã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:125 msgid "As demonstrated above, the behavior of ``wantlist=True`` is implicit when using ``query``." msgstr "上記ã®ä¾‹ã®ã‚ˆã†ã«ã€``query`` を使用ã™ã‚‹å ´åˆã€``wantlist=True`` ã®å‹•ä½œã¯æš—黙的ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/plugins/lookup.rst:127 msgid "Additionally, ``q`` was introduced as a shortform of ``query``:" msgstr "ã¾ãŸã€``query`` ã®çŸ­ç¸®å½¢ã¨ãªã‚‹ ``q`` ãŒå°Žå…¥ã•れã¾ã—ãŸã€‚" #: ../../rst/plugins/lookup.rst:139 msgid "You can use ``ansible-doc -t lookup -l`` to see the list of available plugins. Use ``ansible-doc -t lookup `` to see specific documents and examples." msgstr "``ansible-doc -t lookup -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t lookup `` を使用ã—ã¦ã€ç‰¹å®šã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/lookup.rst:147 msgid "Ansible inventory plugins" msgstr "Ansible inventory プラグインã®ä½¿ç”¨" #: ../../rst/plugins/lookup.rst:149 msgid "Ansible callback plugins" msgstr "Ansible callback プラグイン" #: ../../rst/plugins/lookup.rst:151 msgid "Jinja2 filter plugins" msgstr "Jinja2 filter プラグイン" #: ../../rst/plugins/lookup.rst:153 msgid "Jinja2 test plugins" msgstr "Jinja2 test プラグイン" #: ../../rst/plugins/module.rst:4 msgid "Modules" msgstr "モジュール" #: ../../rst/plugins/module.rst:10 msgid "Modules are the main building blocks of Ansible playbooks. Although we do not generally speak of \"module plugins\", a module is a type of plugin. For a developer-focused description of the differences between modules and other plugins, see :ref:`modules_vs_plugins`." msgstr "モジュール㯠Ansible Playbook ã®ä¸»ãªãƒ“ルディングブロックã§ã™ã€‚一般的ã«ã¯ã€Œmodule プラグインã€ã¯ã‚ã¾ã‚Šè¨€åŠã•れã¾ã›ã‚“ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒ—ラグインã®ä¸€ç¨®ã§ã™ã€‚モジュールã¨ä»–ã®ãƒ—ラグインã®ç›¸é•点ã«é–¢ã™ã‚‹é–‹ç™ºè€…å‘ã‘ã®èª¬æ˜Žã¯ã€Œ:ref:`modules_vs_plugins`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/module.rst:15 msgid "Enabling modules" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/module.rst:17 msgid "You can enable a custom module by dropping it into one of these locations:" msgstr "カスタムモジュールã¯ã€ä»¥ä¸‹ã®å ´æ‰€ã®ã„ãšã‚Œã‹ã«é…ç½®ã—ã¾ã™ã€‚" #: ../../rst/plugins/module.rst:19 msgid "any directory added to the ``ANSIBLE_LIBRARY`` environment variable (``$ANSIBLE_LIBRARY`` takes a colon-separated list like ``$PATH``)" msgstr "``ANSIBLE_LIBRARY`` 環境変数ã«è¿½åŠ ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (``$ANSIBLE_LIBRARY`` 㯠``$PATH`` ã®ã‚ˆã†ã«ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã£ãŸä¸€è¦§)" #: ../../rst/plugins/module.rst:20 msgid "``~/.ansible/plugins/modules/``" msgstr "``~/.ansible/plugins/modules/``" #: ../../rst/plugins/module.rst:21 msgid "``/usr/share/ansible/plugins/modules/``" msgstr "``/usr/share/ansible/plugins/modules/``" #: ../../rst/plugins/module.rst:23 msgid "For more information on using local custom modules, see :ref:`local_modules`." msgstr "ローカルカスタムモジュールã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`local_modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/module.rst:28 msgid "Using modules" msgstr "モジュールã®ä½¿ç”¨" #: ../../rst/plugins/module.rst:30 msgid "For information on using modules in ad hoc tasks, see :ref:`intro_adhoc`. For information on using modules in playbooks, see :ref:`playbooks_intro`." msgstr "アドホックタスクã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`intro_adhoc`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Playbook ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`playbooks_intro`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/module.rst:43 ../../rst/plugins/module_util.rst:35 msgid "#ansible-devel IRC chat channel" msgstr "IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible-devel)" #: ../../rst/plugins/module_util.rst:4 msgid "Module utilities" msgstr "モジュールユーティリティー" #: ../../rst/plugins/module_util.rst:10 msgid "Module utilities contain shared code used by multiple plugins. You can write :ref:`custom module utilities `." msgstr "モジュールユーティリティーã«ã¯ã€è¤‡æ•°ã®ãƒ—ラグインãŒä½¿ç”¨ã™ã‚‹å…±æœ‰ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚:ref:`custom module utilities ` を記述ã§ãã¾ã™ã€‚" #: ../../rst/plugins/module_util.rst:15 msgid "Enabling module utilities" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/module_util.rst:17 msgid "You can add a custom module utility by dropping it into a ``module_utils`` directory adjacent to your collection or role, just like any other plugin." msgstr "ä»–ã®ãƒ—ラグインã¨åŒæ§˜ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚„ロールã«éš£æŽ¥ã™ã‚‹ ``module_utils`` ディレクトリーã«ç½®ãã“ã¨ã§ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ラグメントを追加ã§ãã¾ã™ã€‚" #: ../../rst/plugins/module_util.rst:22 msgid "Using module utilities" msgstr "モジュールユーティリティーã®ä½¿ç”¨" #: ../../rst/plugins/module_util.rst:24 msgid "For information on using module utilities, see :ref:`developing_module_utilities`." msgstr "モジュールユーティリティーã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`developing_module_utilities`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/netconf.rst:4 msgid "Netconf plugins" msgstr "netconf プラグイン" #: ../../rst/plugins/netconf.rst:10 msgid "Netconf plugins are abstractions over the Netconf interface to network devices. They provide a standard interface for Ansible to execute tasks on those network devices." msgstr "netconf プラグインã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¸ã® Netconf インターフェイスを介ã—ãŸæŠ½è±¡åŒ–ã§ã™ã€‚ã“れらã¯ã€Ansible ãŒã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã®æ¨™æº–インターフェースをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/plugins/netconf.rst:12 msgid "These plugins generally correspond one-to-one to network device platforms. Ansible loads the appropriate netconf plugin automatically based on the ``ansible_network_os`` variable. If the platform supports standard Netconf implementation as defined in the Netconf RFC specification, Ansible loads the ``default`` netconf plugin. If the platform supports propriety Netconf RPCs, Ansible loads the platform-specific netconf plugin." msgstr "ã“れらã®ãƒ—ラグインã¯é€šå¸¸ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ãƒ—ラットフォーム㫠1 対 1 ã«å¯¾å¿œã—ã¾ã™ã€‚Ansible 㯠``ansible_network_os`` 変数ã«åŸºã¥ã„ã¦é©åˆ‡ãª netconf プラグインを自動的ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚プラットフォーム㌠Netconf ã® RFC 仕様ã§å®šç¾©ã•れã¦ã„る標準㮠Netconf 実装をサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã€Ansible 㯠``default`` netconf プラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚プラットフォームãŒãƒ—ロプライエタリー㪠Netconf RPC をサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã€Ansible ã¯ãƒ—ラットフォーム固有㮠netconf プラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/plugins/netconf.rst:17 msgid "Adding netconf plugins" msgstr "netconf プラグインã®è¿½åŠ " #: ../../rst/plugins/netconf.rst:19 msgid "You can extend Ansible to support other network devices by dropping a custom plugin into the ``netconf_plugins`` directory." msgstr "``netconf_plugins`` ディレクトリーã«ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインを置ã„ã¦ã€Ansible ãŒä»–ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«æ‹¡å¼µã§ãã¾ã™ã€‚" #: ../../rst/plugins/netconf.rst:24 msgid "Using netconf plugins" msgstr "netconf プラグインã®ä½¿ç”¨" #: ../../rst/plugins/netconf.rst:26 msgid "The netconf plugin to use is determined automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality." msgstr "使用ã™ã‚‹ netconf プラグイン㯠``ansible_network_os`` 変数ã‹ã‚‰è‡ªå‹•çš„ã«æ±ºå®šã•れã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã‚’上書ãã™ã‚‹ç†ç”±ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/plugins/netconf.rst:28 msgid "Most netconf plugins can operate without configuration. A few have additional options that can be set to affect how tasks are translated into netconf commands. A ncclient device specific handler name can be set in the netconf plugin or else the value of ``default`` is used as per ncclient device handler." msgstr "ã»ã¨ã‚“ã©ã® netconf プラグインã¯è¨­å®šã›ãšã«å‹•作ã—ã¾ã™ã€‚タスクãŒã©ã®ã‚ˆã†ã« netconf コマンドã«å¤‰æ›ã•れるã‹ã«å½±éŸ¿ã‚’与ãˆã‚‹ã‚ˆã†ã«è¨­å®šã§ãる追加オプションãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚ncclient デãƒã‚¤ã‚¹å›ºæœ‰ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼å㯠netconf プラグインã§è¨­å®šã™ã‚‹ã‹ã€ncclient デãƒã‚¤ã‚¹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã”ã¨ã« ``default`` ã®å€¤ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/plugins/netconf.rst:35 msgid "Listing netconf plugins" msgstr "netconf プラグインã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/plugins/netconf.rst:37 msgid "These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several netconf plugins. To list all available netconf plugins on your control node, type ``ansible-doc -t netconf -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t netconf``." msgstr "ã“れらã®ãƒ—ラグイン㯠`Ansible Galaxy `_ ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚``pip`` を使用ã—㦠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€è¤‡æ•°ã® netconf プラグインã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚コントロールノードã§åˆ©ç”¨å¯èƒ½ãª netconf プラグインã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€``ansible-doc -t netconf -l`` ã¨å…¥åŠ›ã—ã¾ã™ã€‚プラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’確èªã™ã‚‹ã«ã¯ã€``ansible-doc -t netconf`` を使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/plugins.rst:6 msgid "Working with plugins" msgstr "プラグインã®ä½¿ç”¨" #: ../../rst/plugins/plugins.rst:8 msgid "Plugins are pieces of code that augment Ansible's core functionality. Ansible uses a plugin architecture to enable a rich, flexible and expandable feature set." msgstr "プラグインã¯ã€Ansible ã®ã‚³ã‚¢æ©Ÿèƒ½ã‚’æ‹¡å¼µã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã§ã™ã€‚Ansible ã¯ãƒ—ラグインアーキテクãƒãƒ£ãƒ¼ã‚’使用ã—ã¦ã€è±Šå¯Œã§æŸ”è»Ÿãªæ‹¡å¼µæ€§ã®ã‚る機能セットを実ç¾ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/plugins/plugins.rst:10 msgid "Ansible ships with a number of handy plugins, and you can easily write your own." msgstr "Ansible ã«ã¯ã€ä¾¿åˆ©ãªãƒ—ラグインãŒå¤šæ•°åŒæ¢±ã•れã¦ã„ã¾ã™ã€‚ã¾ãŸã€ç°¡å˜ã«ç‹¬è‡ªã®ãƒ—ラグインを作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/plugins/plugins.rst:12 msgid "This section covers the various types of plugins that are included with Ansible:" msgstr "本セクションã§ã¯ã€Ansible ã«å«ã¾ã‚Œã‚‹ã•ã¾ã–ã¾ãªãƒ—ラグインを説明ã—ã¾ã™ã€‚" #: ../../rst/plugins/plugins.rst:39 msgid ":ref:`plugin_filtering_config`" msgstr ":ref:`plugin_filtering_config`" #: ../../rst/plugins/plugins.rst:40 msgid "Controlling access to modules" msgstr "モジュールã¸ã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡" #: ../../rst/plugins/plugins.rst:41 msgid ":ref:`ansible_configuration_settings`" msgstr ":ref:`ansible_configuration_settings`" #: ../../rst/plugins/plugins.rst:42 msgid "Ansible configuration documentation and settings" msgstr "Ansible 設定ドキュメントãŠã‚ˆã³è¨­å®š" #: ../../rst/plugins/plugins.rst:43 msgid ":ref:`command_line_tools`" msgstr ":ref:`command_line_tools`" #: ../../rst/plugins/plugins.rst:44 msgid "Ansible tools, description and options" msgstr "Ansible ツールã€èª¬æ˜Žã€ãŠã‚ˆã³ã‚ªãƒ—ション" #: ../../rst/plugins/shell.rst:10 msgid "Shell plugins work to ensure that the basic commands Ansible runs are properly formatted to work with the target machine and allow the user to configure certain behaviors related to how Ansible executes tasks." msgstr "shell プラグインã¯ã€Ansible ãŒå®Ÿè¡Œã™ã‚‹åŸºæœ¬çš„ãªã‚³ãƒžãƒ³ãƒ‰ãŒæ­£ã—ãフォーマットã•れã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã¨é€£æºã—ã€Ansible ã®ã‚¿ã‚¹ã‚¯å®Ÿè¡Œæ–¹æ³•ã«é–¢é€£ã™ã‚‹ç‰¹å®šã®å‹•作を設定ã§ãるよã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/plugins/shell.rst:16 msgid "Enabling shell plugins" msgstr "shell ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/shell.rst:18 msgid "You can add a custom shell plugin by dropping it into a ``shell_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the shell plugin directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠shell プラグインを追加ã™ã‚‹ã«ã¯ã€ãã®ãƒ—ラグインをã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``shell_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/shell.rst:21 msgid "You should not alter which plugin is used unless you have a setup in which the default ``/bin/sh`` is not a POSIX compatible shell or is not available for execution." msgstr "デフォルト㮠``/bin/sh`` ㌠POSIX ã«æº–æ‹ ã—ã¦ã„ãªã„シェルã§ã€å®Ÿè¡Œã«åˆ©ç”¨ã§ããªã„å ´åˆä»¥å¤–ã¯ã€ä½¿ç”¨ã™ã‚‹ãƒ—ラグインを変更ã™ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/plugins/shell.rst:27 msgid "Using shell plugins" msgstr "shell プラグインã®ä½¿ç”¨" #: ../../rst/plugins/shell.rst:29 msgid "In addition to the default configuration settings in :ref:`ansible_configuration_settings`, you can use the connection variable :ref:`ansible_shell_type ` to select the plugin to use. In this case, you will also want to update the :ref:`ansible_shell_executable ` to match." msgstr ":ref:`ansible_configuration_settings` ã®ãƒ‡ãƒ•ォルト設定ã«åŠ ãˆã¦ã€æŽ¥ç¶šãƒ—ロファイル :ref:`ansible_shell_type ` を使用ã—ã¦ã€ä½¿ç”¨ã™ã‚‹ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚ã“ã®å ´åˆã¯ã€ä¸€è‡´ã™ã‚‹ã‚ˆã†ã« :ref:`ansible_shell_executable ` ã‚‚æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/plugins/strategy.rst:10 msgid "Strategy plugins control the flow of play execution by handling task and host scheduling. For more information on using strategy plugins and other ways to control execution order, see :ref:`playbooks_strategies`." msgstr "strategy プラグインã¯ã€ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ãƒ›ã‚¹ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ã‚’処ç†ã—ã€ãƒ—レイ実行ã®ãƒ•ローを制御ã—ã¾ã™ã€‚strategy プラグインã®ä½¿ç”¨æ–¹æ³•ã‚„ã€å®Ÿè¡Œã®é †ç•ªã‚’制御ã™ã‚‹ä»–ã®æ–¹æ³•ã¯ã€ã€Œ:ref:`playbooks_strategies`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/strategy.rst:15 msgid "Enabling strategy plugins" msgstr "strategy ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/strategy.rst:17 msgid "All strategy plugins shipped with Ansible are enabled by default. You can enable a custom strategy plugin by putting it in one of the lookup directory sources configured in :ref:`ansible.cfg `." msgstr "Ansible ã«åŒæ¢±ã•れã¦ã„ã‚‹ã™ã¹ã¦ã® strategy プラグインã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚カスタム㮠strategy プラグインを有効ã«ã™ã‚‹ã«ã¯ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ディレクトリーソース㮠1 ã¤ã«ãれを置ãã¾ã™ã€‚" #: ../../rst/plugins/strategy.rst:23 msgid "Using strategy plugins" msgstr "strategy プラグインã®ä½¿ç”¨" #: ../../rst/plugins/strategy.rst:25 msgid "Only one strategy plugin can be used in a play, but you can use different ones for each play in a playbook or ansible run. By default Ansible uses the :ref:`linear ` plugin. You can change this default in Ansible :ref:`configuration ` using an environment variable:" msgstr "プレイã§ä½¿ç”¨ã§ãã‚‹ strategy プラグイン㯠1 ã¤ã ã‘ã§ã™ãŒã€Playbook ã¾ãŸã¯ ansible ã®å®Ÿè¡Œã§ãƒ—レイã”ã¨ã«ç•°ãªã‚‹ãƒ—ラグインを使用ã§ãã¾ã™ã€‚デフォルトã§ã¯ Ansible 㯠:ref:`linear ` プラグインを使用ã—ã¾ã™ã€‚環境変数を使用ã—ã¦ã€Ansible :ref:`configuration ` ã§ã“ã®ãƒ‡ãƒ•ォルトを変更ã§ãã¾ã™ã€‚" #: ../../rst/plugins/strategy.rst:31 msgid "or in the `ansible.cfg` file:" msgstr "ã¾ãŸã¯ `ansible.cfg` ファイルã§ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/plugins/strategy.rst:38 msgid "You can also specify the strategy plugin in the play via the :ref:`strategy keyword ` in a play::" msgstr "プレイ㮠:ref:`strategy キーワード ` を使用ã—ã¦ã€ãƒ—レイ㮠strategy プラグインを指定ã§ãã¾ã™ã€‚" #: ../../rst/plugins/strategy.rst:57 msgid "You can use ``ansible-doc -t strategy -l`` to see the list of available plugins. Use ``ansible-doc -t strategy `` to see plugin-specific specific documentation and examples." msgstr "``ansible-doc -t strategy -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒ—ラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t strategy `` を使用ã—ã¦ã€ãƒ—ラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/terminal.rst:4 msgid "Terminal plugins" msgstr "terminal プラグイン" #: ../../rst/plugins/terminal.rst:10 msgid "Terminal plugins contain information on how to prepare a particular network device's SSH shell is properly initialized to be used with Ansible. This typically includes disabling automatic paging, detecting errors in output, and enabling privileged mode if supported and required on the device." msgstr "terminal プラグインã«ã¯ã€ç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® SSH シェルを準備ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚通常ã€è‡ªå‹•ページングã®ç„¡åŠ¹åŒ–ã€è‡ªå‹•ページングã®ç„¡åŠ¹åŒ–ã€å‡ºåŠ›ã§ã‚¨ãƒ©ãƒ¼ã®æ¤œå‡ºã€ãŠã‚ˆã³ãƒ‡ãƒã‚¤ã‚¹ã§ã‚µãƒãƒ¼ãƒˆãŠã‚ˆã³å¿…è¦ãªå ´åˆã®ç‰¹æ¨©ãƒ¢ãƒ¼ãƒ‰ã®æœ‰åŠ¹åŒ–ãªã©ã§ã™ã€‚" #: ../../rst/plugins/terminal.rst:12 msgid "These plugins correspond one-to-one to network device platforms. Ansible loads the appropriate terminal plugin automatically based on the ``ansible_network_os`` variable." msgstr "ã“れらã®ãƒ—ラグインã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ—ラットフォーム㫠1 対 1 ã§å¯¾å¿œã—ã¾ã™ã€‚Ansible 㯠``ansible_network_os`` 変数ã«åŸºã¥ã„ã¦é©åˆ‡ãª terminal プラグインを自動的ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/plugins/terminal.rst:17 msgid "Adding terminal plugins" msgstr "terminal プラグインã®è¿½åŠ " #: ../../rst/plugins/terminal.rst:19 msgid "You can extend Ansible to support other network devices by dropping a custom plugin into the ``terminal_plugins`` directory." msgstr "``terminal_plugins`` ディレクトリーã«ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインを置ã„ã¦ã€Ansible ãŒä»–ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«æ‹¡å¼µã§ãã¾ã™ã€‚" #: ../../rst/plugins/terminal.rst:24 msgid "Using terminal plugins" msgstr "terminal プラグイン" #: ../../rst/plugins/terminal.rst:26 msgid "Ansible determines which terminal plugin to use automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality." msgstr "Ansible ã¯ã€``ansible_network_os`` 変数をもã¨ã«ã€ä½¿ç”¨ã™ã‚‹ terminal ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’è‡ªå‹•çš„ã«æ±ºå®šã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã‚’上書ãã™ã‚‹ç†ç”±ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/plugins/terminal.rst:28 msgid "Terminal plugins operate without configuration. All options to control the terminal are exposed in the ``network_cli`` connection plugin." msgstr "terminal プラグインã¯ã€è¨­å®šãªã—ã§å‹•作ã—ã¾ã™ã€‚端末を制御ã™ã‚‹ã‚ªãƒ—ションã¯ã™ã¹ã¦ã€``network_cli`` connection プラグインã«å…¬é–‹ã•れã¾ã™ã€‚" #: ../../rst/plugins/terminal.rst:35 msgid "Viewing terminal plugins" msgstr "terminal プラグインã®è¡¨ç¤º" #: ../../rst/plugins/terminal.rst:37 msgid "These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several terminal plugins. To list all available terminal plugins on your control node, type ``ansible-doc -t terminal -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t terminal``." msgstr "ã“れらã®ãƒ—ラグイン㯠`Ansible Galaxy `_ ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚``pip`` を使用ã—㦠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€è¤‡æ•°ã® terminal プラグインã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚コントロールノードã§åˆ©ç”¨å¯èƒ½ãª terminal プラグインã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€``ansible-doc -t terminal -l`` ã¨å…¥åŠ›ã—ã¾ã™ã€‚プラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’確èªã™ã‚‹ã«ã¯ã€``ansible-doc -t terminal`` を使用ã—ã¾ã™ã€‚" #: ../../rst/plugins/test.rst:10 msgid "Test plugins evaluate template expressions and return True or False. With test plugins you can create :ref:`conditionals ` to implement the logic of your tasks, blocks, plays, playbooks, and roles. Ansible uses the `standard tests `_ shipped as part of Jinja, and adds some specialized test plugins. You can :ref:`create custom Ansible test plugins `." msgstr "test プラグイン㯠template å¼ã‚’評価ã—ã€True ã¾ãŸã¯ False ã‚’è¿”ã—ã¾ã™ã€‚test プラグインを使用ã™ã‚‹ã¨ã€:ref:`conditionals ` を作æˆã—ã¦ã€ã‚¿ã‚¹ã‚¯ã€ãƒ–ロックã€ãƒ—レイã€Playbookã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’実装ã§ãã¾ã™ã€‚Ansible 㯠Jinja ã®ä¸€éƒ¨ã¨ã—ã¦åŒæ¢±ã•れる `standard tests `_ を使用ã—ã€ç‰¹æ®Šãª tesst プラグインを追加ã—ã¾ã™ã€‚:ref:`create custom Ansible test plugins ` ãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/plugins/test.rst:17 msgid "Enabling test plugins" msgstr "test ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/test.rst:19 msgid "You can add a custom test plugin by dropping it into a ``test_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the test plugin directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠test プラグインを追加ã™ã‚‹ã«ã¯ã€ãã®ãƒ—ラグインをã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``test_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/test.rst:25 msgid "Using test plugins" msgstr "test プラグインã®ä½¿ç”¨" #: ../../rst/plugins/test.rst:27 msgid "The User Guide offers detailed documentation on :ref:`using test plugins `." msgstr "ユーザーガイドã§ã¯ã€:ref:`using test plugins ` ã«ã¤ã„ã¦è©³ã—ã記載ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/plugins/test.rst:33 msgid ":ref:`playbooks_tests`" msgstr ":ref:`playbooks_tests`" #: ../../rst/plugins/test.rst:34 msgid "Using tests" msgstr "テストã®ä½¿ç”¨" #: ../../rst/plugins/test.rst:35 msgid ":ref:`playbooks_conditionals`" msgstr ":ref:`playbooks_conditionals`" #: ../../rst/plugins/test.rst:36 msgid "Using conditional statements" msgstr "æ¡ä»¶åˆ†å²æ–‡ã®ä½¿ç”¨" #: ../../rst/plugins/test.rst:39 msgid ":ref:`playbooks_filters`" msgstr ":ref:`playbooks_filters`" #: ../../rst/plugins/test.rst:40 msgid "Using filters" msgstr "フィルターã®ä½¿ç”¨" #: ../../rst/plugins/vars.rst:10 msgid "Vars plugins inject additional variable data into Ansible runs that did not come from an inventory source, playbook, or command line. Playbook constructs like 'host_vars' and 'group_vars' work using vars plugins. For more details about variables in Ansible, see :ref:`playbooks_variables`." msgstr "vars プラグインã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã€Playbookã€ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ Ansible ã®å®Ÿè¡Œã«ã€å¤‰æ•°ãƒ‡ãƒ¼ã‚¿ã‚’追加ã—ã¾ã™ã€‚「host_varsã€ã‚„「group_varsã€ã®ã‚ˆã†ãª Playbook ã®æ§‹æˆè¦ç´ ã¯ã€vars プラグインを使用ã—ã¾ã™ã€‚Ansible ã§ã®å¤‰æ•°ã®è©³ç´°ã¯ã€:ref:`playbooks_variables` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/plugins/vars.rst:12 msgid "Vars plugins were partially implemented in Ansible 2.0 and rewritten to be fully implemented starting with Ansible 2.4." msgstr "vars プラグイン㯠Ansible 2.0 ã«éƒ¨åˆ†çš„ã«å®Ÿè£…ã•れã€Ansible 2.4 以é™ã§ã¯ã€å®Œå…¨å®Ÿè£…ã«ãªã‚‹ã‚ˆã†ã«æ›¸ãç›´ã•れã¾ã—ãŸã€‚" #: ../../rst/plugins/vars.rst:14 msgid "The :ref:`host_group_vars ` plugin shipped with Ansible enables reading variables from :ref:`host_variables` and :ref:`group_variables`." msgstr "Ansible ã«åŒæ¢±ã•れる :ref:`host_group_vars ` プラグインã¯ã€:ref:`host_variables` ãŠã‚ˆã³ :ref:`group_variables` ã‹ã‚‰å¤‰æ•°ã®èª­ã¿å–りをå¯èƒ½ã«ã—ã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:19 msgid "Enabling vars plugins" msgstr "vars ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æœ‰åŠ¹åŒ–" #: ../../rst/plugins/vars.rst:21 msgid "You can activate a custom vars plugin by either dropping it into a ``vars_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the directory sources configured in :ref:`ansible.cfg `." msgstr "カスタム㮠vars プラグインを有効ã«ã™ã‚‹ã«ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ—ラグインをã€ãƒ­ãƒ¼ãƒ«å†…ã®ãƒ—レイã®éš£ã‚Šã«ã‚ã‚‹ ``vars_plugins`` ディレクトリーã«ç½®ãã‹ã€:ref:`ansible.cfg ` ã§è¨­å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã® 1 ã¤ã«ç½®ãã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:23 msgid "Most vars plugins are disabled by default. To enable a vars plugin, set ``vars_plugins_enabled`` in the ``defaults`` section of :ref:`ansible.cfg ` or set the ``ANSIBLE_VARS_ENABLED`` environment variable to the list of vars plugins you want to execute. By default, the :ref:`host_group_vars ` plugin shipped with Ansible is enabled." msgstr "ã»ã¨ã‚“ã©ã® vars プラグインã¯ãƒ‡ãƒ•ォルトã§ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚vars プラグインを有効ã«ã™ã‚‹ã«ã¯ã€:ref:`ansible.cfg ` ã® ``defaults`` セクション㧠``vars_plugins_enabled`` を設定ã™ã‚‹ã‹ã€å®Ÿè¡Œã™ã‚‹ vars プラグインã®ä¸€è¦§ã« ``ANSIBLE_VARS_ENABLED`` 環境変数を設定ã—ã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã«åŒæ¢±ã•れる :ref:`host_group_vars ` ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:25 msgid "Starting in Ansible 2.10, you can use vars plugins in collections. All vars plugins in collections must be explicitly enabled and must use the fully qualified collection name in the format ``namespace.collection_name.vars_plugin_name``." msgstr "Ansible 2.10 以é™ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ vars プラグインを使用ã§ãã¾ã™ã€‚コレクションã®ã™ã¹ã¦ã® vars ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¯æ˜Žç¤ºçš„ã«æœ‰åйã§ã€``namespace.collection_name.vars_plugin_name`` å½¢å¼ã§å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:35 msgid "Using vars plugins" msgstr "vars プラグインã®ä½¿ç”¨" #: ../../rst/plugins/vars.rst:37 msgid "By default, vars plugins are used on demand automatically after they are enabled." msgstr "デフォルトã§ã¯ã€vars プラグインã¯ã€æœ‰åйã«ãªã£ãŸå¾Œã«è‡ªå‹•çš„ã«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã§ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:39 msgid "Starting in Ansible 2.10, vars plugins can be made to run at specific times. `ansible-inventory` does not use these settings, and always loads vars plugins." msgstr "Ansible 2.10 以é™ã€vars プラグインã¯ç‰¹å®šã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§å®Ÿè¡Œã§ãã¾ã™ã€‚`ansible-inventory` ã¯ã“れらã®è¨­å®šã‚’使用ã›ãšã€å¸¸ã« vars プラグインを読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:41 msgid "The global setting ``RUN_VARS_PLUGINS`` can be set in ``ansible.cfg`` using ``run_vars_plugins`` in the ``defaults`` section or by the ``ANSIBLE_RUN_VARS_PLUGINS`` environment variable. The default option, ``demand``, runs any enabled vars plugins relative to inventory sources whenever variables are demanded by tasks. You can use the option ``start`` to run any enabled vars plugins relative to inventory sources after importing that inventory source instead." msgstr "グローãƒãƒ«è¨­å®š ``RUN_VARS_PLUGINS`` ã¯ã€``defaults`` セクション㮠``run_vars_plugins`` を使用ã—ã¦ã€ã¾ãŸã¯ ``ANSIBLE_RUN_VARS_PLUGINS`` 環境変数ã«ã‚ˆã‚Šã€``ansible.cfg``ã«è¨­å®šã§ãã¾ã™ã€‚デフォルトã®ã‚ªãƒ—ションã§ã‚ã‚‹ ``demand`` ã¯ã€ã‚¿ã‚¹ã‚¯ã§å¤‰æ•°ãŒå¿…è¦ã¨ãªã£ãŸå ´åˆã«ã¯å¿…ãšã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«å¯¾ã—ã¦æœ‰åŠ¹ãª vars プラグインを実行ã—ã¾ã™ã€‚代ã‚りã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã—ãŸå¾Œã«ã€``start`` オプションを使用ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã¨ç›¸å¯¾çš„ãªä½ç½®ã«ã‚ã‚‹ã€æœ‰åŠ¹åŒ–ã•れ㟠Vars プラグインを実行ã§ãã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:43 msgid "You can also control vars plugin execution on a per-plugin basis for vars plugins that support the ``stage`` option. To run the :ref:`host_group_vars ` plugin after importing inventory you can add the following to :ref:`ansible.cfg `:" msgstr "ã¾ãŸã€``stage`` オプションをサãƒãƒ¼ãƒˆã™ã‚‹ vars プラグインã®å ´åˆã¯ã€ãƒ—ラグインã”ã¨ã« vars プラグインã®å®Ÿè¡Œã‚’制御ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚インベントリーã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆå¾Œã« :ref:`host_group_vars ` プラグインを実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’ :ref:`ansible.cfg ` ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/plugins/vars.rst:55 msgid "You can use ``ansible-doc -t vars -l`` to see the list of available vars plugins. Use ``ansible-doc -t vars `` to see plugin-specific documentation and examples." msgstr "``ansible-doc -t vars -l`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãª var プラグインã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚``ansible-doc -t vars `` を使用ã—ã¦ã€ãƒ—ラグイン固有ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Ansible Cache plugins" #~ msgstr "Ansible cache プラグイン" #~ msgid "Ansible connection plugins" #~ msgstr "Ansible connection プラグイン" #~ msgid "Ansible Shell plugins" #~ msgstr "Ansible shell プラグイン" #~ msgid "Ansible Strategy plugins" #~ msgstr "Ansible strategy プラグイン" #~ msgid "Ansible Vars plugins" #~ msgstr "Ansible vars プラグイン" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid ":ref:`playbooks_lookups`" #~ msgstr ":ref:`playbooks_lookups`" #~ msgid "Jinja2 lookup plugins" #~ msgstr "Jinja2 lookup プラグイン" #~ msgid "Ansible Action plugins" #~ msgstr "Ansible action プラグイン" #~ msgid "`webchat.freenode.net `_" #~ msgstr "`webchat.freenode.net `_" #~ msgid "Ansible cache plugins" #~ msgstr "Ansible cache プラグイン" #~ msgid ":ref:`Filters`" #~ msgstr ":ref:`Filters`" #~ msgid ":ref:`Tests`" #~ msgstr ":ref:`Tests`" #~ msgid ":ref:`Lookups`" #~ msgstr ":ref:`Lookups`" #~ msgid "Ansible vars plugins" #~ msgstr "Ansible vars プラグイン" #~ msgid "Strategy plugins control the flow of play execution by handling task and host scheduling." #~ msgstr "strategy プラグインã¯ã€ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ãƒ›ã‚¹ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ã‚’処ç†ã—ã€ãƒ—レイ実行ã®ãƒ•ローを制御ã—ã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.4855561 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/porting_guides.po0000644000000000000000000321257600000000000026473 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/porting_guides/core_porting_guides.rst:5 msgid "Ansible Core Porting Guides" msgstr "Ansible Core ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/core_porting_guides.rst:7 msgid "This section lists porting guides that can help you in updating playbooks, plugins and other parts of your Ansible infrastructure from one version of ``ansible-core`` to the next." msgstr "本セクションã§ã¯ã€``ansible-core`` ã®ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰æ¬¡ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã€Ansible インフラストラクãƒãƒ£ãƒ¼ã® Playbookã€ãƒ—ラグインãªã©ã‚’æ›´æ–°ã™ã‚‹ã®ã«å½¹ã«ç«‹ã¤ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/core_porting_guides.rst:9 msgid "Please note that this is not a complete list. If you believe any extra information would be useful in these pages, you can edit by clicking `Edit on GitHub` on the top right, or raising an issue." msgstr "ã“れã¯å®Œå…¨ãªä¸€è¦§ã§ã¯ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。以下ã®ãƒšãƒ¼ã‚¸ã«å½¹ã«ç«‹ã¤è¿½åŠ æƒ…å ±ã‚’ãŠæŒã¡ã®å ´åˆã¯ã€å³ä¸Šã®ã€Œ`Edit on GitHub`ã€ã‚’クリックã™ã‚‹ã‹ã€å•題を報告ã™ã‚‹ã“ã¨ã§ç·¨é›†ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:6 msgid "Ansible 2.0 Porting Guide" msgstr "Ansible 2.0 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.0.rst:8 msgid "This section discusses the behavioral changes between Ansible 1.x and Ansible 2.0." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 1.x ã‹ã‚‰ Ansible 2.0 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:10 #: ../../rst/porting_guides/porting_guide_2.10.rst:16 #: ../../rst/porting_guides/porting_guide_2.3.rst:10 #: ../../rst/porting_guides/porting_guide_2.4.rst:10 #: ../../rst/porting_guides/porting_guide_2.5.rst:9 #: ../../rst/porting_guides/porting_guide_2.6.rst:9 #: ../../rst/porting_guides/porting_guide_2.7.rst:9 #: ../../rst/porting_guides/porting_guide_2.8.rst:9 #: ../../rst/porting_guides/porting_guide_2.9.rst:10 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:10 msgid "It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible." msgstr "本ガイドã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ã€Playbookã€ãƒ—ラグインã€ãã®ä»–ã® Ansible インフラストラクãƒãƒ£ãƒ¼ã‚’æ›´æ–°ã™ã‚‹éš›ã«ã”利用ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:13 msgid "We suggest you read this page along with `Ansible Changelog for 2.0 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.0 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.0.rst:15 #: ../../rst/porting_guides/porting_guide_2.3.rst:15 #: ../../rst/porting_guides/porting_guide_2.4.rst:15 #: ../../rst/porting_guides/porting_guide_2.5.rst:13 #: ../../rst/porting_guides/porting_guide_2.6.rst:13 #: ../../rst/porting_guides/porting_guide_2.7.rst:13 #: ../../rst/porting_guides/porting_guide_2.8.rst:13 #: ../../rst/porting_guides/porting_guide_2.9.rst:14 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:14 msgid "This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `." msgstr "ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ç§»æ¤ã«é–¢ã™ã‚‹å†…容ã®ä¸€éƒ¨ã§ã™ã€‚ç§»æ¤ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€Œ:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ `ã€ã«ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:17 #: ../../rst/porting_guides/porting_guide_2.3.rst:17 #: ../../rst/porting_guides/porting_guide_2.4.rst:17 #: ../../rst/porting_guides/porting_guide_2.5.rst:15 #: ../../rst/porting_guides/porting_guide_2.6.rst:15 #: ../../rst/porting_guides/porting_guide_2.7.rst:15 #: ../../rst/porting_guides/porting_guide_2.9.rst:17 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:17 msgid "Topics" msgstr "トピック" #: ../../rst/porting_guides/porting_guide_2.0.rst:20 #: ../../rst/porting_guides/porting_guide_2.10.rst:33 #: ../../rst/porting_guides/porting_guide_2.3.rst:20 #: ../../rst/porting_guides/porting_guide_2.5.rst:18 #: ../../rst/porting_guides/porting_guide_2.6.rst:18 #: ../../rst/porting_guides/porting_guide_2.7.rst:54 #: ../../rst/porting_guides/porting_guide_2.8.rst:19 #: ../../rst/porting_guides/porting_guide_2.9.rst:20 #: ../../rst/porting_guides/porting_guide_4.rst:18 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:26 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:21 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:20 msgid "Playbook" msgstr "Playbook" #: ../../rst/porting_guides/porting_guide_2.0.rst:22 msgid "This section discusses any changes you may need to make to your playbooks." msgstr "本セクションã§ã¯ã€Playbook ã«åŠ ãˆã‚‹å¿…è¦ã®ã‚る変更を説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:36 msgid "To make an escaped string that will work on all versions you have two options::" msgstr "ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§æ©Ÿèƒ½ã™ã‚‹ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•ã‚ŒãŸæ–‡å­—列を作æˆã™ã‚‹ã«ã¯ã€2 ã¤ã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:40 msgid "uses key=value escaping which has not changed. The other option is to check for the ansible version::" msgstr "key=value エスケープを使用ã—ã¾ã™ãŒã€ã“れã¯ã€å¤‰æ›´ã•れã¦ã„ã¾ã›ã‚“。もㆠ1 ã¤ã®æ–¹æ³•ã¯ã€ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’確èªã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:44 msgid "trailing newline When a string with a trailing newline was specified in the playbook via yaml dict format, the trailing newline was stripped. When specified in key=value format, the trailing newlines were kept. In v2, both methods of specifying the string will keep the trailing newlines. If you relied on the trailing newline being stripped, you can change your playbook using the following as an example::" msgstr "æœ«å°¾ã«æ”¹è¡Œ: æœ«å°¾ã«æ”¹è¡ŒãŒã‚る文字列㌠yaml dict å½¢å¼ã§ Playbook ã«æŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã€æœ«å°¾ã®æ”¹è¡Œã¯å‰Šé™¤ã•れã¾ã™ã€‚key=value å½¢å¼ã§æŒ‡å®šã™ã‚‹ã¨ã€æœ«å°¾ã«æ”¹è¡ŒãŒä¿æŒã•れã¾ã™ã€‚v2 ã§ã¯ã€ã“ã®æ–‡å­—列を指定ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã¨ã‚‚ã«æ”¹è¡Œã‚’ä¿æŒã—ã¾ã™ã€‚æœ«å°¾ã®æ”¹è¡ŒãŒè‡ªå‹•çš„ã«å‰Šé™¤ã•れるã®ã«ä¾å­˜ã—ã¦ã„ãŸå ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« Playbook を変更ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:71 msgid "Behavior of templating DOS-type text files changes with Ansible v2." msgstr "DOS タイプã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルをテンプレート化ã™ã‚‹å‹•作㯠Ansible v2 ã§å¤‰ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:73 msgid "A bug in Ansible v1 causes DOS-type text files (using a carriage return and newline) to be templated to Unix-type text files (using only a newline). In Ansible v2 this long-standing bug was finally fixed and DOS-type text files are preserved correctly. This may be confusing when you expect your playbook to not show any differences when migrating to Ansible v2, while in fact you will see every DOS-type file being completely replaced (with what appears to be the exact same content)." msgstr "Ansible v1 ã®ãƒã‚°ã«ã‚ˆã‚Šã€DOS タイプã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイル (ã‚­ãƒ£ãƒªãƒƒã‚¸ãƒªã‚¿ãƒ¼ãƒ³ã¨æ”¹è¡Œã‚’使用) ãŒã€Unix タイプã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイル (改行ã®ã¿ã‚’使用) ã«ãƒ†ãƒ³ãƒ—レート化ã—ã¦ã„ã¾ã—ãŸã€‚Ansible v2 ã§ã¯ã€ã“ã®é•·å¹´ã®ãƒã‚°ãŒã‚ˆã†ã‚„ã修正ã•れã€DOS å½¢å¼ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£ã—ãä¿å­˜ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¯ã€Ansible v2 ã¸ã®ç§»è¡Œæ™‚ã« Playbook ã«å¤‰æ›´ãŒãªã„ã“ã¨ã‚’期待ã—ã¦ã„ã‚‹å ´åˆã«ã¯æ··ä¹±ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€å®Ÿéš›ã«ã¯ã€ã™ã¹ã¦ã® DOS 型ファイルãŒå®Œå…¨ã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™ (ãŸã ã—ã€å®Œå…¨ã«åŒä¸€ã®å†…容ã§ã‚るよã†ã«è¡¨ç¤ºã•れる場åˆãŒã‚りã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.0.rst:75 msgid "When specifying complex args as a variable, the variable must use the full jinja2 variable syntax (```{{var_name}}```) - bare variable names there are no longer accepted. In fact, even specifying args with variables has been deprecated, and will not be allowed in future versions::" msgstr "複雑ãªå¼•数を変数ã¨ã—ã¦æŒ‡å®šã™ã‚‹å ´åˆã€å¤‰æ•°ã¯å®Œå…¨ãª jinja2 変数構文 (```{{var_name}}```) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ベア変数åã¯ä½¿ç”¨ã§ããªããªã‚Šã¾ã—ãŸã€‚実際ã€å¤‰æ•°ã§å¼•数を指定ã™ã‚‹ã“ã¨ãŒéžæŽ¨å¥¨ã¨ãªã£ã¦ãŠã‚Šã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ä½¿ç”¨ã§ããªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:93 msgid "porting task includes" msgstr "ç§»æ¤ã‚¿ã‚¹ã‚¯ã«å«ã¾ã‚Œã‚‹ã‚‚ã®" #: ../../rst/porting_guides/porting_guide_2.0.rst:94 msgid "More dynamic. Corner-case formats that were not supposed to work now do not, as expected." msgstr "より動的ã«ã€‚動作ã™ã‚‹ã¨æƒ³å®šã—ã¦ã„ãªã‹ã£ãŸã‚³ãƒ¼ãƒŠãƒ¼ã‚±ãƒ¼ã‚¹ (ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„厄介ãªã‚±ãƒ¼ã‚¹) ã®å½¢å¼ãŒã€æœŸå¾…通りã«å‹•作ã—ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:95 msgid "variables defined in the yaml dict format https://github.com/ansible/ansible/issues/13324" msgstr "yaml ã® dict å½¢å¼ã§å®šç¾©ã•れる変数 (https://github.com/ansible/ansible/issues/13324)" #: ../../rst/porting_guides/porting_guide_2.0.rst:96 msgid "templating (variables in playbooks and template lookups) has improved with regard to keeping the original instead of turning everything into a string. If you need the old behavior, quote the value to pass it around as a string." msgstr "テンプレート化 (Playbook ãŠã‚ˆã³ãƒ†ãƒ³ãƒ—レート検索ã®å¤‰æ•°) ã¯ã€ã™ã¹ã¦ã‚’文字列ã«ã™ã‚‹ã®ã§ã¯ãªãã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã‚’ç¶­æŒã™ã‚‹ã¨ã„ã†ç‚¹ã§æ”¹å–„ã•れã¾ã—ãŸã€‚以å‰ã®å‹•作ãŒå¿…è¦ãªå ´åˆã¯ã€å€¤ã‚’引用符ã§å›²ã¿ã€æ–‡å­—列ã¨ã—ã¦æ¸¡ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.0.rst:98 msgid "Empty variables and variables set to null in yaml are no longer converted to empty strings. They will retain the value of `None`. You can override the `null_representation` setting to an empty string in your config file by setting the :envvar:`ANSIBLE_NULL_REPRESENTATION` environment variable." msgstr "空ã®å¤‰æ•°ã¨ã€yaml ã§ null ã«è¨­å®šã•れãŸå¤‰æ•°ã¯ã€ç©ºã®æ–‡å­—列ã«å¤‰æ›ã•れãªããªã‚Šã€`None` ã®å€¤ã‚’ç¶­æŒã—ã¾ã™ã€‚環境変数 :envvar:`ANSIBLE_NULL_REPRESENTATION` を設定ã™ã‚‹ã“ã¨ã§ã€è¨­å®šãƒ•ァイル㧠`null_representation` ãŒç©ºæ–‡å­—列ã«è¨­å®šã•れるã®ã‚’上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:100 msgid "Extras callbacks must be enabled in ansible.cfg. Copying is no longer necessary but you must enable them in ansible.cfg." msgstr "ansible.cfg ã§è¿½åŠ ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コピーã¯ä¸è¦ã«ãªã‚Šã¾ã™ãŒã€ansible.cfg ã§æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:101 msgid "dnf module has been rewritten. Some minor changes in behavior may be observed." msgstr "dnf ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ›¸ãç›´ã•れã¾ã—ãŸã€‚ã„ãã¤ã‹ã®ç´°ã‹ã„動作ã®å¤‰æ›´ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:102 msgid "win_updates has been rewritten and works as expected now." msgstr "win_updates ã¯æ›¸ãç›´ã•ã‚Œã€æœŸå¾…通りã«å‹•作ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:103 msgid "from 2.0.1 onwards, the implicit setup task from gather_facts now correctly inherits everything from play, but this might cause issues for those setting `environment` at the play level and depending on `ansible_env` existing. Previously this was ignored but now might issue an 'Undefined' error." msgstr "2.0.1 以é™ã€gather_facts ã®æš—黙的ãªè¨­å®šã‚¿ã‚¹ã‚¯ã¯ã€ãƒ—レイã‹ã‚‰ã™ã¹ã¦æ­£ã—ã継承ã•れるよã†ã«ãªã‚Šã¾ã—ãŸãŒã€ã“れã«ã‚ˆã‚Šã€ãƒ—レイレベル㧠`environment` を設定ã—ã€`ansible_env` ã®å­˜åœ¨ã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã—ãŸãŒã€ä»¥å‰ã¯ã“ã®å•題ã¯ç„¡è¦–ã•れã¦ã„ã¾ã—ãŸã€‚ã“れã‹ã‚‰ã¯ã€ŒUndefinedã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:107 #: ../../rst/porting_guides/porting_guide_2.10.rst:51 #: ../../rst/porting_guides/porting_guide_2.4.rst:52 #: ../../rst/porting_guides/porting_guide_2.5.rst:101 #: ../../rst/porting_guides/porting_guide_2.6.rst:23 #: ../../rst/porting_guides/porting_guide_2.7.rst:104 #: ../../rst/porting_guides/porting_guide_2.8.rst:325 #: ../../rst/porting_guides/porting_guide_2.9.rst:43 #: ../../rst/porting_guides/porting_guide_4.rst:30 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:44 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:33 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:52 msgid "Deprecated" msgstr "éžæŽ¨å¥¨" #: ../../rst/porting_guides/porting_guide_2.0.rst:109 msgid "While all items listed here will show a deprecation warning message, they still work as they did in 1.9.x. Please note that they will be removed in 2.2 (Ansible always waits two major releases to remove a deprecated feature)." msgstr "ã“ã“ã«æŽ²è¼‰ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®é …ç›®ã«ã¯ã€éžæŽ¨å¥¨ã®è­¦å‘Šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ãŒã€1.9.x ã§ã®å‹•作ã¨åŒã˜å‹•作ã«ãªã‚Šã¾ã™ã€‚ãŸã ã—ã€2.2 ã§å‰Šé™¤ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ (Ansible ã¯å¸¸ã« 2 ã¤ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’å¾…ã£ã¦ã‹ã‚‰éžæŽ¨å¥¨ã®æ©Ÿèƒ½ã‚’削除ã—ã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.0.rst:111 msgid "Bare variables in ``with_`` loops should instead use the ``\"{{ var }}\"`` syntax, which helps eliminate ambiguity." msgstr "``with_`` ループ内ã®ãƒ™ã‚¢å¤‰æ•°ã¯ã€ä»£ã‚り㫠``\"{{ var }}\"`` 構文を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ›–昧ã•ãŒãªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:112 msgid "The ansible-galaxy text format requirements file. Users should use the YAML format for requirements instead." msgstr "ansible-galaxy テキスト形å¼ã®è¦ä»¶ãƒ•ァイル。ユーザーã¯ã€ä»£ã‚りã«è¦ä»¶ã« YAML å½¢å¼ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:113 msgid "Undefined variables within a ``with_`` loop's list currently do not interrupt the loop, but they do issue a warning; in the future, they will issue an error." msgstr "``with_`` ループã®ãƒªã‚¹ãƒˆã«å«ã¾ã‚Œã‚‹æœªå®šç¾©ã®å¤‰æ•°ã¯ã€ç¾åœ¨ã®ã¨ã“ã‚ループを中断ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“ãŒã€è­¦å‘Šã‚’出力ã—ã¾ã™ã€‚今後ã¯ã‚¨ãƒ©ãƒ¼ã‚’出力ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:114 msgid "Using dictionary variables to set all task parameters is unsafe and will be removed in a future version. For example::" msgstr "ディクショナリー変数を使用ã—ã¦ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãƒ‘ラメーターを設定ã™ã‚‹ã“ã¨ã¯å®‰å…¨ã§ã¯ãªã„ãŸã‚ã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯å‰Šé™¤ã•れる予定ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:131 msgid "Host patterns should use a comma (,) or colon (:) instead of a semicolon (;) to separate hosts/groups in the pattern." msgstr "ホストパターンã§ã€ãƒ‘ターン内ã®ãƒ›ã‚¹ãƒˆ/グループを分離ã™ã‚‹å ´åˆã¯ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ (;) ã®ä»£ã‚りã«ã‚³ãƒ³ãƒž (,) ã¾ãŸã¯ã‚³ãƒ­ãƒ³ (:) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:132 msgid "Ranges specified in host patterns should use the [x:y] syntax, instead of [x-y]." msgstr "ãƒ›ã‚¹ãƒˆãƒ‘ã‚¿ãƒ¼ãƒ³ã§æŒ‡å®šã—ãŸç¯„囲ã¯ã€[x-y] æ§‹æ–‡ã§ã¯ãªã [x:y] 構文を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:133 msgid "Playbooks using privilege escalation should always use \"become*\" options rather than the old su*/sudo* options." msgstr "æ¨©é™æ˜‡æ ¼ã‚’使用ã—㟠Playbook ã¯ã€å¤ã„ su*/sudo* オプションã§ã¯ãªã「become*ã€ã‚ªãƒ—ションを常ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:134 msgid "The \"short form\" for vars_prompt is no longer supported. For example::" msgstr "vars_prompt ã®ã€ŒçŸ­ç¸®å½¢ã€ã¯ã‚µãƒãƒ¼ãƒˆã•れãªããªã‚Šã¾ã—ãŸã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:140 msgid "Specifying variables at the top level of a task include statement is no longer supported. For example::" msgstr "タスクã®include æ–‡ã®æœ€ä¸Šä½ã§å¤‰æ•°ã‚’指定ã™ã‚‹ã“ã¨ã¯ã‚µãƒãƒ¼ãƒˆã•れãªããªã‚Šã¾ã—ãŸã€‚ãŸã¨ãˆã°æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:145 msgid "Should now be::" msgstr "以下ã®ã‚ˆã†ã«ãªã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:151 msgid "Setting any_errors_fatal on a task is no longer supported. This should be set at the play level only." msgstr "タスク㧠any_errors_fatal ã®è¨­å®šãŒã‚µãƒãƒ¼ãƒˆã•れãªããªã‚Šã¾ã—ãŸã€‚ã“れã¯ãƒ—レイレベルã§ã®ã¿è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:152 msgid "Bare variables in the `environment` dictionary (for plays/tasks/etc.) are no longer supported. Variables specified there should use the full variable syntax: '{{foo}}'." msgstr "`environment` ディクショナリー (プレイã€ã‚¿ã‚¹ã‚¯ãªã©) ã®ãƒ™ã‚¢ãƒ¡ã‚¿ãƒ«å¤‰æ•°ãŒã‚µãƒãƒ¼ãƒˆã•れãªããªã‚Šã¾ã—ãŸã€‚指定ã•れる変数ã¯ã€å®Œå…¨ãªå¤‰æ•°æ§‹æ–‡ (「{{foo}}ã€) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:153 msgid "Tags (or any directive) should no longer be specified with other parameters in a task include. Instead, they should be specified as an option on the task. For example::" msgstr "ã‚¿ã‚° (ã¾ãŸã¯ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–) ã¯ã€ã‚¿ã‚¹ã‚¯ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã®ä¸­ã§ä»–ã®ãƒ‘ラメーターã¨ä¸€ç·’ã«æŒ‡å®šã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€ã‚¿ã‚¹ã‚¯ã®ã‚ªãƒ—ションã¨ã—ã¦æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:158 msgid "Should be::" msgstr "以下ã®ã‚ˆã†ã«ãªã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:163 msgid "The first_available_file option on tasks has been deprecated. Users should use the with_first_found option or lookup ('first_found', …) plugin." msgstr "タスク㮠first_available_file オプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚ユーザーã¯ã€with_first_found オプションã¾ãŸã¯ lookup ('first_found', …) プラグインを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:167 #: ../../rst/porting_guides/porting_guide_2.3.rst:100 #: ../../rst/porting_guides/porting_guide_2.4.rst:72 msgid "Other caveats" msgstr "ãã®ä»–ã®æ³¨æ„事項" #: ../../rst/porting_guides/porting_guide_2.0.rst:169 msgid "Here are some corner cases encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored." msgstr "ã“ã“ã§ã¯ã€æ›´æ–°æ™‚ã«é­é‡ã™ã‚‹ã„ãã¤ã‹ã®ã‚³ãƒ¼ãƒŠãƒ¼ã‚±ãƒ¼ã‚¹ (ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„厄介ãªã‚±ãƒ¼ã‚¹) を紹介ã—ã¾ã™ã€‚ã“れらã¯ä¸»ã«ã€ãƒ‘ãƒ¼ã‚µãƒ¼ã®æ¤œè¨¼ãŒã‚ˆã‚Šå޳ã—ããªã£ãŸã“ã¨ã¨ã€ä»¥å‰ã¯ç„¡è¦–ã•れã¦ã„ãŸã‚¨ãƒ©ãƒ¼ãŒæ•æ‰ã•れãŸã“ã¨ãŒåŽŸå› ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:171 msgid "Bad variable composition::" msgstr "誤ã£ãŸå¤‰æ•°ã®æ§‹æˆ:" #: ../../rst/porting_guides/porting_guide_2.0.rst:175 msgid "This worked 'by accident' as the errors were retemplated and ended up resolving the variable, it was never intended as valid syntax and now properly returns an error, use the following instead.::" msgstr "ã“れã¯ã€ã‚¨ãƒ©ãƒ¼ãŒå†ãƒ†ãƒ³ãƒ—レート化ã•れã€å¤‰æ•°ã‚’解決ã™ã‚‹ã“ã¨ã«ãªã£ãŸãŸã‚ã€ã€Œå¶ç„¶ã€æ©Ÿèƒ½ã—ã¾ã—ãŸãŒã€æœ‰åŠ¹ãªæ§‹æ–‡ã¨ã—ã¦æ„図ã•れãŸã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸãŒã€ç¾åœ¨ã¯é©åˆ‡ã«ã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ã¦ã„ã¾ã™ã€‚代ã‚りã«ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:179 msgid "Misspelled directives::" msgstr "スペルãŒé–“é•ã£ã¦ã„るディレクティブ:" #: ../../rst/porting_guides/porting_guide_2.0.rst:184 msgid "The task always ran without using privilege escalation (for that you need `become`) but was also silently ignored so the play 'ran' even though it should not, now this is a parsing error." msgstr "タスクã¯å¸¸ã«ã€æ¨©é™ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’使用ã›ãšã« (`become` ãŒå¿…è¦ãªãŸã‚) 実行ã•れã¾ã™ãŒã€é€šçŸ¥ãªã無視ã•れるãŸã‚ã«ã€ãƒ—レイãŒå®Ÿè¡Œã•ã›ã‚‹ã¹ãã§ãªã„ã«ã‚‚é–¢ã‚らãšã€Œå®Ÿè¡Œã€ã•れã¦ã„ã¾ã—ãŸãŒã€ã“れã¯è§£æžã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:187 msgid "Duplicate directives::" msgstr "é‡è¤‡ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–:" #: ../../rst/porting_guides/porting_guide_2.0.rst:193 msgid "The first `when` was ignored and only the 2nd one was used as the play ran w/o warning it was ignoring one of the directives, now this produces a parsing error." msgstr "最åˆã® `when` ã¯ç„¡è¦–ã•れã€2 ã¤ç›®ã®ã‚‚ã®ã ã‘ãŒä½¿ç”¨ã•れã¾ã—ãŸã€‚プレーã¯è­¦å‘Šãªã—ã«å®Ÿè¡Œã•れã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã® 1 ã¤ã‚’無視ã—ã¦ã„ã¾ã—ãŸãŒã€è§£æžã‚¨ãƒ©ãƒ¼ãŒç”Ÿæˆã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:195 msgid "Conflating variables and directives::" msgstr "変数ãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã®åˆ¶é™::" #: ../../rst/porting_guides/porting_guide_2.0.rst:202 msgid "The `port` variable is reserved as a play/task directive for overriding the connection port, in previous versions this got conflated with a variable named `port` and was usable later in the play, this created issues if a host tried to reconnect or was using a non caching connection. Now it will be correctly identified as a directive and the `port` variable will appear as undefined, this now forces the use of non conflicting names and removes ambiguity when adding settings and variables to a role invocation." msgstr "`port` 変数ã¯ã€æŽ¥ç¶šãƒãƒ¼ãƒˆã‚’上書ãã™ã‚‹ãŸã‚ã® play/task ディレクティブã¨ã—ã¦äºˆç´„ã•れã¦ã„ã¾ã™ã€‚以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€`port` ã¨ã„ã†åå‰ã®å¤‰æ•°ã¨èžåˆã—ã€å¾Œã§ãƒ—レイã§ä½¿ç”¨ã§ãã¾ã™ãŒã€ãã®ãƒ›ã‚¹ãƒˆãŒå†æŽ¥ç¶šã‚’ã—よã†ã¨ã—ãŸã‚Šã€éžã‚­ãƒ£ãƒƒã‚·ãƒ¥æŽ¥ç¶šã‚’使用ã—ã¦ã„ãŸå ´åˆã«ã“ã®å•題ãŒç™ºç”Ÿã—ã¾ã™ã€‚今回ã®ãƒªãƒªãƒ¼ã‚¹ã‚ˆã‚Šã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¨ã—ã¦æ­£ã—ã識別ã•れã€`port` å¤‰æ•°ã¯æœªå®šç¾©ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ç«¶åˆã™ã‚‹åå‰ã‚’使用ã—ãªã„よã†ã«ã—ã€ãƒ­ãƒ¼ãƒ«ã®å‘¼ã³å‡ºã—ã«è¨­å®šãŠã‚ˆã³å¤‰æ•°ã‚’追加ã™ã‚‹éš›ã«æ›–昧ã•ãŒãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:206 msgid "Bare operations on `with_`::" msgstr "`with_` ã§ã®ãƒ™ã‚¢æ“作:" #: ../../rst/porting_guides/porting_guide_2.0.rst:210 msgid "An issue with the 'bare variable' features, which was supposed only template a single variable without the need of braces ({{ )}}, would in some versions of Ansible template full expressions. Now you need to use proper templating and braces for all expressions everywhere except conditionals (`when`)::" msgstr "「ベア変数ã€é–¢æ•°ã®å•題ã¯ã€ä¸­æ‹¬å¼§ ({{ )}} ã‚’å¿…è¦ã¨ã—ãªã„å˜ä¸€ã®å¤‰æ•°ã®ã¿ã‚’テンプレート化ã™ã‚‹ã“ã¨ã«ãªã£ã¦ã„ã¾ã—ãŸãŒã€Ansible ã®ä¸€éƒ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯å®Œå…¨ãªå¼ã‚’テンプレート化ã—ã¦ã„ã¾ã—ãŸã€‚ç¾åœ¨ã§ã¯ã€æ¡ä»¶å¼ (`when`) を除ãã™ã¹ã¦ã®å ´æ‰€ã®ã™ã¹ã¦ã®å¼ã«å¯¾ã—ã¦ã€é©åˆ‡ãªãƒ†ãƒ³ãƒ—レート化ã¨ä¸­æ‹¬å¼§ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:215 msgid "The bare feature itself is deprecated as an undefined variable is indistinguishable from a string which makes it difficult to display a proper error." msgstr "未定義ã®å¤‰æ•°ã¯æ–‡å­—列ã¨åŒºåˆ¥ãŒã¤ã‹ãšã€é©åˆ‡ãªã‚¨ãƒ©ãƒ¼ã‚’表示ã™ã‚‹ã“ã¨ãŒé›£ã—ã„ãŸã‚ã€ãƒ™ã‚¢é–¢æ•°è‡ªä½“ãŒéžæŽ¨å¥¨ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:218 msgid "Porting plugins" msgstr "Porting プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:220 msgid "In ansible-1.9.x, you would generally copy an existing plugin to create a new one. Simply implementing the methods and attributes that the caller of the plugin expected made it a plugin of that type. In ansible-2.0, most plugins are implemented by subclassing a base class for each plugin type. This way the custom plugin does not need to contain methods which are not customized." msgstr "ansible-1.9.xã§ã¯ã€é€šå¸¸ã€æ—¢å­˜ã®ãƒ—ラグインをコピーã—ã¦æ–°ã—ã„プラグインを作æˆã—ã¾ã™ã€‚プラグインã®å‘¼ã³å‡ºã—å…ƒãŒæœŸå¾…ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ãŠã‚ˆã³å±žæ€§ã‚’実装ã™ã‚‹ã ã‘ã§ã€ãã®ã‚¿ã‚¤ãƒ—ã®ãƒ—ラグインã«ãªã‚Šã¾ã—ãŸã€‚ansible-2.0ã§ã¯ã€ã»ã¨ã‚“ã©ã®ãƒ—ラグインãŒã€å„プラグインタイプã®ãƒ™ãƒ¼ã‚¹ã‚¯ãƒ©ã‚¹ã‚’サブクラス化ã™ã‚‹ã“ã¨ã§å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚ã“ã†ã™ã‚‹ã“ã¨ã§ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ—ラグインã¯ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã•れã¦ã„ãªã„メソッドをå«ã‚€å¿…è¦ãŒãªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:224 #: ../../rst/porting_guides/porting_guide_2.0.rst:305 msgid "Lookup plugins" msgstr "lookup プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:226 msgid "lookup plugins ; import version" msgstr "lookup プラグイン; ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/porting_guides/porting_guide_2.0.rst:230 #: ../../rst/porting_guides/porting_guide_2.0.rst:277 #: ../../rst/porting_guides/porting_guide_2.0.rst:373 #: ../../rst/porting_guides/porting_guide_2.0.rst:388 msgid "Connection plugins" msgstr "Connection プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:232 #: ../../rst/porting_guides/porting_guide_2.0.rst:279 #: ../../rst/porting_guides/porting_guide_2.0.rst:375 #: ../../rst/porting_guides/porting_guide_2.0.rst:390 msgid "connection plugins" msgstr "conneciton プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:235 #: ../../rst/porting_guides/porting_guide_2.0.rst:378 msgid "Action plugins" msgstr "Action プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:238 #: ../../rst/porting_guides/porting_guide_2.0.rst:380 msgid "action plugins" msgstr "action プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:241 #: ../../rst/porting_guides/porting_guide_2.0.rst:383 #: ../../rst/porting_guides/porting_guide_2.4.rst:132 msgid "Callback plugins" msgstr "Callback プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:243 msgid "Although Ansible 2.0 provides a new callback API the old one continues to work for most callback plugins. However, if your callback plugin makes use of :attr:`self.playbook`, :attr:`self.play`, or :attr:`self.task` then you will have to store the values for these yourself as ansible no longer automatically populates the callback with them. Here's a short snippet that shows you how:" msgstr "Ansible 2.0 ã§ã¯æ–°ã—ã„コールãƒãƒƒã‚¯ API ãŒæä¾›ã•れã¦ã„ã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグインã§ã¯å¤ã„ API も引ãç¶šã使用ã§ãã¾ã™ã€‚ãŸã ã—ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグイン㌠:attr:`self.playbook`ã€:attr:`self.play`ã€ã¾ãŸã¯ :attr:`self.task` を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ansible ãŒã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã«è‡ªå‹•çš„ã«å€¤ã‚’入力ã—ãªããªã£ãŸãŸã‚ã€ã“れらã®å€¤ã‚’自分ã§ä¿å­˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã“ã§ã¯ã€ãã®æ–¹æ³•を示ã™çŸ­ã„スニペットをã”紹介ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:283 msgid "Hybrid plugins" msgstr "ãƒã‚¤ãƒ–リッドプラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:285 msgid "In specific cases you may want a plugin that supports both ansible-1.9.x *and* ansible-2.0. Much like porting plugins from v1 to v2, you need to understand how plugins work in each version and support both requirements." msgstr "特定ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€ansible-1.9.x *ãŠã‚ˆã³* ansible-2.0 ã®ä¸¡æ–¹ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラグインãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚v1 ã‹ã‚‰ v2 ã¸ã®ãƒ—ラグインã®ç§»æ¤ã¨åŒæ§˜ã«ã€å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ãƒ—ラグインãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã—ã€ä¸¡æ–¹ã®è¦ä»¶ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‹ã‚’ç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:287 msgid "Since the ansible-2.0 plugin system is more advanced, it is easier to adapt your plugin to provide similar pieces (subclasses, methods) for ansible-1.9.x as ansible-2.0 expects. This way your code will look a lot cleaner." msgstr "ansible-2.0 プラグインシステムã¯ã‚ˆã‚Šé«˜åº¦ãªãŸã‚ã€ansible-2.0 ãŒæƒ³å®šã™ã‚‹ã¨ãŠã‚Šã«ã€ansible-1.9.x ã®åŒæ§˜ã®éƒ¨åˆ† (サブクラスã€ãƒ¡ã‚½ãƒƒãƒ‰) ã‚’æä¾›ã™ã‚‹ãŸã‚ã«ãƒ—ラグインを調整ã™ã‚‹ã“ã¨ãŒã‚ˆã‚Šå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:289 msgid "You may find the following tips useful:" msgstr "以下ã®ãƒ’ントをå‚考ã«ã—ã¦ã¿ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.0.rst:291 msgid "Check whether the ansible-2.0 class(es) are available and if they are missing (ansible-1.9.x) mimic them with the needed methods (for example, ``__init__``)" msgstr "ansible-2.0 ã®ã‚¯ãƒ©ã‚¹ãŒåˆ©ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’確èªã—ã€ã‚¯ãƒ©ã‚¹ãŒä¸è¶³ã—ã¦ã„ã‚‹å ´åˆ (ansible-1.9.x) ã¯ã€å¿…è¦ãªãƒ¡ã‚½ãƒƒãƒ‰ (``__init__`` ãªã©) ã§ãれらを模倣ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:293 msgid "When ansible-2.0 python modules are imported, and they fail (ansible-1.9.x), catch the ``ImportError`` exception and perform the equivalent imports for ansible-1.9.x. With possible translations (for example, importing specific methods)." msgstr "ansible-2.0 python モジュールをインãƒãƒ¼ãƒˆã—ã¦å¤±æ•—ã™ã‚‹ã¨ (ansible-1.9.x)ã€``ImportError`` ä¾‹å¤–ã‚’æ•æ‰ã—ã¦ã€ansible-1.9.x ã®åŒç­‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’実行ã—ã¾ã™ã€‚翻訳 (ãŸã¨ãˆã°ã€ç‰¹å®šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨) ãŒè¡Œã‚れるã“ã¨ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:295 msgid "Use the existence of these methods as a qualifier to what version of Ansible you are running. So rather than using version checks, you can do capability checks instead. (See examples below)" msgstr "ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã®å­˜åœ¨ã‚’ã€å®Ÿè¡Œä¸­ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¸ã®ä¿®é£¾å­ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ãã®ãŸã‚ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚§ãƒƒã‚¯ã‚’使用ã™ã‚‹ã®ã§ã¯ãªãã€ä»£ã‚ã‚Šã«æ©Ÿèƒ½ãƒã‚§ãƒƒã‚¯ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ (以下ã®ä¾‹ã‚’å‚ç…§)。" #: ../../rst/porting_guides/porting_guide_2.0.rst:297 msgid "Document for each if-then-else case for which specific version each block is needed. This will help others to understand how they have to adapt their plugins, but it will also help you to remove the older ansible-1.9.x support when it is deprecated." msgstr "å„ブロックãŒã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å¿…è¦ã¨ã•れã¦ã„ã‚‹ã‹ã€if-then-else ã®ã‚±ãƒ¼ã‚¹ã”ã¨ã«æ–‡æ›¸åŒ–ã—ã¾ã™ã€‚ã“れã¯ã€ä»–ã®äººãŒè‡ªåˆ†ã®ãƒ—ラグインをã©ã®ã‚ˆã†ã«é©å¿œã•ã›ãªã‘れã°ãªã‚‰ãªã„ã‹ã‚’ç†è§£ã™ã‚‹ã®ã«å½¹ç«‹ã¤ã ã‘ã§ãªãã€ä»¥å‰ã® ansible-1.9.x ã®ã‚µãƒãƒ¼ãƒˆãŒéžæŽ¨å¥¨ã«ãªã£ãŸã¨ãã«å‰Šé™¤ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:299 msgid "When doing plugin development, it is very useful to have the ``warning()`` method during development, but it is also important to emit warnings for deadends (cases that you expect should never be triggered) or corner cases (for example, cases where you expect misconfigurations)." msgstr "プラグインã®é–‹ç™ºã‚’行ã†å ´åˆã¯ã€é–‹ç™ºä¸­ã« ``warning()`` メソッドãŒã‚ã‚‹ã¨éžå¸¸ã«ä¾¿åˆ©ã§ã™ãŒã€ãƒ‡ãƒƒãƒ‰ã‚¨ãƒ³ãƒ‰ (絶対ã«ç™ºç”Ÿã—ã¦ã¯ã„ã‘ãªã„ã¨äºˆæƒ³ã•れるケース)やコーナーケース (ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„厄介ãªã‚±ãƒ¼ã‚¹ã€ãŸã¨ãˆã°è¨­å®šãŒé–“é•ã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚るケース) ã«å¯¾ã—ã¦è­¦å‘Šã‚’発ã™ã‚‹ã“ã¨ã‚‚é‡è¦ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:301 msgid "It helps to look at other plugins in ansible-1.9.x and ansible-2.0 to understand how the API works and what modules, classes and methods are available." msgstr "API ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã€ã©ã®ã‚ˆã†ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ã‚¯ãƒ©ã‚¹ã€ãƒ¡ã‚½ãƒƒãƒ‰ãŒåˆ©ç”¨ã§ãã‚‹ã‹ã‚’ç†è§£ã™ã‚‹ã«ã¯ã€ansible-1.9.x ã‚„ ansible-2.0 ã®ä»–ã®ãƒ—ラグインを確èªã™ã‚‹ã®ãŒæœ‰åйã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:307 msgid "As a simple example we are going to make a hybrid ``fileglob`` lookup plugin." msgstr "ç°¡å˜ãªä¾‹ã¨ã—ã¦ã€ãƒã‚¤ãƒ–リッド㮠``fileglob`` lookup プラグインを作æˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:368 msgid "In the above example we did not use the ``warning()`` method as we had no direct use for it in the final version. However we left this code in so people can use this part during development/porting/use." msgstr "上記ã®ä¾‹ã§ã¯ã€æœ€çµ‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ç›´æŽ¥ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒãªã‹ã£ãŸãŸã‚ã€``warning()`` メソッドを使用ã—ã¦ã„ã¾ã›ã‚“。ã—ã‹ã—ã€é–‹ç™ºã€ç§»æ¤ã€ãŠã‚ˆã³ä½¿ç”¨ã®éš›ã«ã“ã®éƒ¨åˆ†ã‚’利用ã§ãるよã†ã«ã€ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’残ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.0.rst:385 msgid "callback plugins" msgstr "callback プラグイン" #: ../../rst/porting_guides/porting_guide_2.0.rst:394 #: ../../rst/porting_guides/porting_guide_2.10.rst:97 #: ../../rst/porting_guides/porting_guide_2.3.rst:160 #: ../../rst/porting_guides/porting_guide_2.5.rst:281 #: ../../rst/porting_guides/porting_guide_2.6.rst:102 #: ../../rst/porting_guides/porting_guide_2.7.rst:241 #: ../../rst/porting_guides/porting_guide_2.8.rst:549 #: ../../rst/porting_guides/porting_guide_2.9.rst:722 #: ../../rst/porting_guides/porting_guide_4.rst:131 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:90 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:134 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:109 msgid "Porting custom scripts" msgstr "カスタムスクリプトã®ç§»æ¤" #: ../../rst/porting_guides/porting_guide_2.0.rst:396 msgid "Custom scripts that used the ``ansible.runner.Runner`` API in 1.x have to be ported in 2.x. Please refer to: :ref:`developing_api`" msgstr "1.x ã§ ``ansible.runner.Runner`` API を使用ã—ãŸã‚«ã‚¹ã‚¿ãƒ ã‚¹ã‚¯ãƒªãƒ—トã¯ã€2.x ã«ç§»æ¤ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚「:ref:`developing_api`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:8 msgid "Ansible 2.10 Porting Guide" msgstr "Ansible 2.10 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:12 msgid "In Ansible 2.10, many plugins and modules have migrated to Collections on `Ansible Galaxy `_. Your playbooks should continue to work without any changes. We recommend you start using the fully-qualified collection name (FQCN) in your playbooks as the explicit and authoritative indicator of which collection to use as some collections may contain duplicate module names. You can search the `index of all modules `_ to find the collection a module has been relocated to." msgstr "Ansible 2.10 ã§ã¯ã€å¤šãã®ãƒ—ラグインやモジュールãŒã€`Ansible Galaxy `_ ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚ãŠä½¿ã„ã® Playbook ã¯ä½•ã®å¤‰æ›´ã‚‚ãªã継続ã—ã¦ãŠä½¿ã„ã„ãŸã ã‘ã¾ã™ã€‚一部ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åãŒé‡è¤‡ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã©ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã™ã‚‹ã‹ã®æ˜Žç¤ºçš„ã‹ã¤æ¨©å¨çš„ãªæŒ‡æ¨™ã¨ã—ã¦ã€Playbook ã§ã€å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å(FQCN)を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚`ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `_ を検索ã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå†é…ç½®ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:14 msgid "This section discusses the behavioral changes between Ansible 2.9 and Ansible 2.10." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.9 ã‹ã‚‰ Ansible 2.10 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:18 msgid "We suggest you read this page along with the `Ansible Changelog for 2.10 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible 2.10 ã®ãƒã‚§ãƒ³ã‚¸ãƒ­ã‚° `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:20 msgid "Since 2.10, Ansible consists of two parts:" msgstr "2.10 以é™ã€Ansible ã¯ä»¥ä¸‹ã® 2 ã¤ã®éƒ¨åˆ†ã‹ã‚‰æ§‹æˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:22 msgid "ansible-base, which includes the command line tools with a small selection of plugins and modules, and" msgstr "ansible-base: プラグインやモジュールãŒå°‘ãªã„コマンドラインツールãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:23 msgid "a `set of collections `_." msgstr "`コレクションã®ã‚»ãƒƒãƒˆ `" #: ../../rst/porting_guides/porting_guide_2.10.rst:25 msgid "The :ref:`porting_2.10_guide_base` is included in this porting guide. The complete list of porting guides can be found at :ref:`porting guides `." msgstr ":ref:`porting_2.10_guide_base` ã¯ã€ã“ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰ã«å«ã¾ã‚Œã¾ã™ã€‚ç§»æ¤ã‚¬ã‚¤ãƒ‰ã®ä¸€è¦§ã¯ã€Œ:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:35 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:28 msgid "Fixed a bug on boolean keywords that made random strings return 'False', now they should return an error if they are not a proper boolean Example: ``diff: yes-`` was returning ``False``." msgstr "ãƒ©ãƒ³ãƒ€ãƒ ãªæ–‡å­—列ãŒã€ŒFalseã€ã‚’è¿”ã™ãƒ–ール値ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®ãƒã‚°ã‚’修正ã—ã¾ã—ãŸã€‚é©åˆ‡ãªãƒ–ール値ã§ã¯ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’è¿”ã™ã¯ãšã§ã™ (例: ``diff: yes-`` ㌠``False`` ã‚’è¿”ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:37 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:30 msgid "A new fact, ``ansible_processor_nproc`` reflects the number of vcpus available to processes (falls back to the number of vcpus available to the scheduler)." msgstr "æ–°ã—ã„ファクト ``ansible_processor_nproc`` ã¯ã€ãƒ—ロセスã§åˆ©ç”¨å¯èƒ½ãª vcpu ã®æ•°ã‚’åæ˜ ã—ã¦ã„ã¾ã™ (スケジューラーã§åˆ©ç”¨å¯èƒ½ãª vcpu ã®æ•°ã«æˆ»ã•れã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:43 #: ../../rst/porting_guides/porting_guide_2.7.rst:18 #: ../../rst/porting_guides/porting_guide_2.8.rst:305 #: ../../rst/porting_guides/porting_guide_2.9.rst:37 #: ../../rst/porting_guides/porting_guide_4.rst:24 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:36 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:27 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:46 msgid "Command Line" msgstr "コマンドライン" #: ../../rst/porting_guides/porting_guide_2.10.rst:45 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:38 msgid "The ``ansible-galaxy login`` command has been removed, as the underlying API it used for GitHub auth is being shut down. Publishing roles or collections to Galaxy via ``ansible-galaxy`` now requires that a Galaxy API token be passed to the CLI via a token file (default location ``~/.ansible/galaxy_token``) or (insecurely) via the ``--token`` argument to ``ansible-galaxy``." msgstr "GitHub èªè¨¼ã«ä½¿ç”¨ã•れる基礎ã¨ãªã‚‹ API ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã•れるãŸã‚ã€``ansible-galaxy login`` コマンドãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚``ansible-galaxy`` 経由㧠Galaxy ã«ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å ´åˆã¯ã€Galaxy API トークンをトークンファイル (デフォルトã®å ´æ‰€ ``~/.ansible/galaxy_token``) ã¾ãŸã¯ ``--token`` 引数ã‹ã‚‰ ``ansible-galaxy`` ã« (セキュリティーを確ä¿ã›ãšã«ã‚»ã‚­ãƒ¥ã‚¢ã«) 渡ã™ã“ã¨ãŒå¿…è¦ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:53 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:46 msgid "Windows Server 2008 and 2008 R2 will no longer be supported or tested in the next Ansible release, see :ref:`windows_faq_server2008`." msgstr "Windows Server 2008 ãŠã‚ˆã³ 2008 R2 ã¯ã€æ¬¡å›žã® Ansible リリースã§ã¯ã‚µãƒãƒ¼ãƒˆã•れãšã€ãƒ†ã‚¹ãƒˆã•れãªããªã‚Šã¾ã™ã€‚「:ref:`windows_faq_server2008`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:57 #: ../../rst/porting_guides/porting_guide_2.3.rst:108 #: ../../rst/porting_guides/porting_guide_2.4.rst:77 #: ../../rst/porting_guides/porting_guide_2.5.rst:156 #: ../../rst/porting_guides/porting_guide_2.6.rst:28 #: ../../rst/porting_guides/porting_guide_2.7.rst:154 #: ../../rst/porting_guides/porting_guide_2.8.rst:364 #: ../../rst/porting_guides/porting_guide_2.9.rst:72 #: ../../rst/porting_guides/porting_guide_4.rst:95 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:50 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:98 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:72 msgid "Modules" msgstr "モジュール" #: ../../rst/porting_guides/porting_guide_2.10.rst:61 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:54 msgid "Links on this page may not point to the most recent versions of modules. We will update them when we can." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®ãƒªãƒ³ã‚¯ã¯ã€æœ€æ–°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å‚ç…§ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚å¯èƒ½ãªé™ã‚Šæ›´æ–°ã—ã¦ã„ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:63 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:56 msgid "Version 2.10.0 of ansible-base changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the mode change has been reverted in 2.10.1, and mode will now default to ``0o666 & ~umask`` as in previous versions of Ansible." msgstr "ansible-base ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10.0 ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã§ ``mode`` パラメーターを指定ã—ãªã‹ã£ãŸå ´åˆã«ã€ãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã®ãƒ‡ãƒ•ォルトモードを ``0o600 & ~umask`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“れã¯ã€å†ç·¨æˆã—㟠CVE レãƒãƒ¼ãƒˆã«å¯¾ã™ã‚‹å¯¾å¿œã§ã—ãŸã€‚ãã®çµæžœã€2.10.1 ã§ã¯ãƒ¢ãƒ¼ãƒ‰ã®å¤‰æ›´ãŒå…ƒã«æˆ»ã•れã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨åŒæ§˜ã«ã€ãƒ¢ãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ォルト㌠``0o666 & ~umask`` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:64 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:57 msgid "If you changed any tasks to specify less restrictive permissions while using 2.10.0, those changes will be unnecessary (but will do no harm) in 2.10.1." msgstr "2.10.0 を使用ã™ã‚‹éš›ã«ã€ã‚ˆã‚Šåˆ¶é™ã®å°‘ãªã„パーミッションを指定ã™ã‚‹ã‚ˆã†ã«ã‚¿ã‚¹ã‚¯ã‚’変更ã—ãŸå ´åˆã€2.10.1 ã§ã¯ãã®å¤‰æ›´ã¯ä¸è¦ã«ãªã‚Šã¾ã™ (ãŸã ã—ã€å®³ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:65 #: ../../rst/porting_guides/porting_guide_2.8.rst:376 #: ../../rst/porting_guides/porting_guide_2.9.rst:79 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:58 msgid "To avoid the issue raised in CVE-2020-1736, specify a ``mode`` parameter in all file-based tasks that accept it." msgstr "CVE-2020-1736 ã§ç™ºç”Ÿã™ã‚‹å•題を回é¿ã™ã‚‹ã«ã¯ã€ãれをå—ã‘入れるファイルベースã®ã‚¿ã‚¹ã‚¯ã§ ``mode`` パラメーターを指定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:67 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:60 msgid "``dnf`` and ``yum`` - As of version 2.10.1, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task." msgstr "``dnf`` ãŠã‚ˆã³ ``yum`` - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10.1 よりã€``dnf`` モジュール (ãŠã‚ˆã³ ``dnf`` を使用ã™ã‚‹å ´åˆã¯ ``yum`` アクション) ãŒãƒ‘ッケージ㮠GPG ç½²åã‚’æ­£ã—ãæ¤œè¨¼ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(CVE-2020-14365)。``Failed to validate GPG signature for [package name]`` ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れãŸå ´åˆã¯ã€ä½¿ç”¨ã—ã¦ã„ã‚‹ DNF リãƒã‚¸ãƒˆãƒªãƒ¼ã‚„パッケージ㮠GPG ã‚­ãƒ¼ãŒæ­£ã—ãインãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã“れを行ㆠ1 ã¤ã®æ–¹æ³•ã¨ã—ã¦ã€``rpm_key`` モジュールã®ä½¿ç”¨ãŒã‚りã¾ã™ã€‚推奨ã¯ã—ã¾ã›ã‚“ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯ GPG ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã€``dnf`` タスクã¾ãŸã¯ ``yum`` タスク㫠``disable_gpg_check: yes`` を明示的ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:71 #: ../../rst/porting_guides/porting_guide_2.3.rst:141 #: ../../rst/porting_guides/porting_guide_2.4.rst:99 #: ../../rst/porting_guides/porting_guide_2.5.rst:207 #: ../../rst/porting_guides/porting_guide_2.6.rst:49 #: ../../rst/porting_guides/porting_guide_2.7.rst:193 #: ../../rst/porting_guides/porting_guide_2.8.rst:414 #: ../../rst/porting_guides/porting_guide_2.9.rst:699 #: ../../rst/porting_guides/porting_guide_4.rst:116 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:64 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:119 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:96 msgid "Noteworthy module changes" msgstr "モジュール変更ã«é–¢ã™ã‚‹æ³¨ç›®ç‚¹" #: ../../rst/porting_guides/porting_guide_2.10.rst:73 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:66 msgid "Ansible modules created with ``add_file_common_args=True`` added a number of undocumented arguments which were mostly there to ease implementing certain action plugins. The undocumented arguments ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode`` are now no longer added. Modules relying on these options to be added need to specify them by themselves." msgstr "``add_file_common_args=True`` ã§ä½œæˆã•れ㟠Ansible モジュールã«ã‚ˆã‚Šã€ç‰¹å®šã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã®å®Ÿè£…を容易ã«ã™ã‚‹ãŸã‚ã«ã€æ–‡æ›¸åŒ–ã•れã¦ã„ãªã„引数ãŒè¤‡æ•°è¿½åŠ ã•れã¦ã„ã¾ã™ã€‚ドキュメント化ã•れã¦ã„ãªã„引数 ``src``ã€``follow``ã€``force``ã€``content``ã€``backup``ã€``remote_src``ã€``regexp``ã€``delimiter``ã€ãŠã‚ˆã³ ``directory_mode`` ãŒè¿½åŠ ã•れãªããªã‚Šã¾ã—ãŸã€‚オプションを追加ã™ã‚‹ãŸã‚ã€ã“れらã®ã‚ªãƒ—ションãŒè¿½åŠ ã•れるã“ã¨ã«ä¾å­˜ã—ã¦ã„るモジュールã¯ã€è‡ªåˆ†ã§ãれらを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:74 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:67 msgid "Ansible no longer looks for Python modules in the current working directory (typically the ``remote_user``'s home directory) when an Ansible module is run. This is to fix becoming an unprivileged user on OpenBSD and to mitigate any attack vector if the current working directory is writable by a malicious user. Install any Python modules needed to run the Ansible modules on the managed node in a system-wide location or in another directory which is in the ``remote_user``'s ``$PYTHONPATH`` and readable by the ``become_user``." msgstr "Ansible ã¯ã€Ansible モジュールã®å®Ÿè¡Œæ™‚ã«ã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (通常㯠``remote_user`` ã®ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼) ã«ã‚ã‚‹ Python モジュールを検索ã—ãªããªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€OpenBSD ã§æ¨©é™ã®ãªã„ユーザーã«ãªã‚Š (become)ã€æ‚ªæ„ã®ã‚るユーザーãŒç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’書ãè¾¼ã¿å¯èƒ½ãªå ´åˆã«æ”»æ’ƒãƒ™ã‚¯ãƒˆãƒ«ã‚’軽減ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible モジュールをã€ã‚·ã‚¹ãƒ†ãƒ å…¨ä½“ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ ``remote_user`` ã® ``$PYTHONPATH`` ã«ã‚りã€``become_user`` ãŒèª­ã¿å–りå¯èƒ½ãªåˆ¥ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã€Ansible モジュールを実行ã™ã‚‹ã®ã«å¿…è¦ãª Python モジュールをインストールã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:78 #: ../../rst/porting_guides/porting_guide_2.3.rst:155 #: ../../rst/porting_guides/porting_guide_2.4.rst:107 #: ../../rst/porting_guides/porting_guide_2.5.rst:237 #: ../../rst/porting_guides/porting_guide_2.6.rst:83 #: ../../rst/porting_guides/porting_guide_2.7.rst:231 #: ../../rst/porting_guides/porting_guide_2.8.rst:511 #: ../../rst/porting_guides/porting_guide_2.9.rst:713 #: ../../rst/porting_guides/porting_guide_4.rst:124 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:71 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:127 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:102 msgid "Plugins" msgstr "プラグイン" #: ../../rst/porting_guides/porting_guide_2.10.rst:81 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:74 msgid "Lookup plugin names case-sensitivity" msgstr "å¤§æ–‡å­—å°æ–‡å­—を区別ã—ã¦ãƒ—ラグインåã®æ¤œç´¢" #: ../../rst/porting_guides/porting_guide_2.10.rst:83 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:76 msgid "Prior to Ansible ``2.10`` lookup plugin names passed in as an argument to the ``lookup()`` function were treated as case-insensitive as opposed to lookups invoked via ``with_``. ``2.10`` brings consistency to ``lookup()`` and ``with_`` to be both case-sensitive." msgstr "Ansible ``2.10`` ã® lookup プラグインå㌠``lookup()`` 関数ã«å¼•æ•°ã¨ã—ã¦æ¸¡ã•れるå‰ã«ã€``with_`` を介ã—ã¦å‘¼ã³å‡ºã•れるルックアップã¨ã¯ç•°ãªã‚Šã€å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ãªã„ã‚‚ã®ã¨ã—ã¦å‡¦ç†ã•れã¾ã™ã€‚``2.10`` ã§ã¯ã€``lookup()`` 㨠``with_`` ã®ä¸¡æ–¹ã§å¤§æ–‡å­—å°æ–‡å­—を区別ã™ã‚‹ã‚ˆã†ã«æ•´åˆæ€§ãŒå–られã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:86 #: ../../rst/porting_guides/porting_guide_2.6.rst:94 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:79 msgid "Noteworthy plugin changes" msgstr "注目ã™ã¹ãプラグインã®å¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_2.10.rst:88 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:81 msgid "Cache plugins in collections can be used to cache data from inventory plugins. Previously, cache plugins in collections could only be used for fact caching." msgstr "コレクション㮠cache プラグインを使用ã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’キャッシュã§ãã¾ã™ã€‚以å‰ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® cache プラグインã¯ãƒ•ァクトキャッシュã«ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:89 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:82 msgid "Some undocumented arguments from ``FILE_COMMON_ARGUMENTS`` have been removed; plugins using these, in particular action plugins, need to be adjusted. The undocumented arguments which were removed are ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode``." msgstr "``FILE_COMMON_ARGUMENTS`` ã‹ã‚‰ã€æ–‡æ›¸åŒ–ã•れã¦ã„ãªã„引数ãŒã„ãã¤ã‹å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れらã®ç‰¹å®šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインを使用ã™ã‚‹ãƒ—ラグインã¯ã€èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚削除ã•れãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãªã—ã®å¼•æ•°ã¯ã€``src``ã€``follow``ã€``force``ã€``content``ã€``backup``ã€``remote_src``ã€``regexp``ã€``delimiter``ã€ãŠã‚ˆã³ ``directory_mode`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:92 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:85 msgid "Action plugins which execute modules should use fully-qualified module names" msgstr "モジュールを実行ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¯å®Œå…¨ä¿®é£¾ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã®ä½¿ç”¨ãŒå¿…è¦" #: ../../rst/porting_guides/porting_guide_2.10.rst:94 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:87 msgid "Action plugins that call modules should pass explicit, fully-qualified module names to ``_execute_module()`` whenever possible (eg, ``ansible.builtin.file`` rather than ``file``). This ensures that the task's collection search order is not consulted to resolve the module. Otherwise, a module from a collection earlier in the search path could be used when not intended." msgstr "モジュールを呼ã³å‡ºã™ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¯ã€å¯èƒ½ãªé™ã‚Šæ˜Žç¤ºçš„ãªå®Œå…¨ä¿®é£¾ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã‚’ ``_execute_module()`` ã«æ¸¡ã™å¿…è¦ãŒã‚りã¾ã™ (例: ``file``ã§ã¯ãªã ``ansible.builtin.file``)。ã“れã«ã‚ˆã‚Šã€ã‚¿ã‚¹ã‚¯ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³æ¤œç´¢é †åºãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’解決ã™ã‚‹ã‚ˆã†ã«å‚ç…§ã•れãªããªã‚Šã¾ã™ã€‚ãã†ã—ãªã„ã¨ã€æ„図ã—ã¦ã„ãªã„ã¨ãã«æ¤œç´¢ãƒ‘スã®å‰ã®æ–¹ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã•れã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:99 #: ../../rst/porting_guides/porting_guide_2.9.rst:45 #: ../../rst/porting_guides/porting_guide_2.9.rst:724 #: ../../rst/porting_guides/porting_guide_4.rst:106 #: ../../rst/porting_guides/porting_guide_4.rst:112 #: ../../rst/porting_guides/porting_guide_4.rst:133 #: ../../rst/porting_guides/porting_guide_base_2.10.rst:92 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:109 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:115 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:136 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:86 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:92 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:98 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:111 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:117 msgid "No notable changes" msgstr "主ãªå¤‰æ›´ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:102 msgid "Porting Guide for v2.10.7" msgstr "v2.10.7 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:105 #: ../../rst/porting_guides/porting_guide_2.10.rst:191 #: ../../rst/porting_guides/porting_guide_2.10.rst:264 #: ../../rst/porting_guides/porting_guide_2.10.rst:376 #: ../../rst/porting_guides/porting_guide_2.10.rst:469 #: ../../rst/porting_guides/porting_guide_3.rst:103 #: ../../rst/porting_guides/porting_guide_3.rst:205 #: ../../rst/porting_guides/porting_guide_4.rst:36 #: ../../rst/porting_guides/porting_guide_4.rst:426 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:39 msgid "Breaking Changes" msgstr "äº’æ›æ€§ã‚’失ã‚ã›ã‚‹å¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_2.10.rst:108 #: ../../rst/porting_guides/porting_guide_2.10.rst:150 #: ../../rst/porting_guides/porting_guide_2.10.rst:202 #: ../../rst/porting_guides/porting_guide_2.10.rst:275 #: ../../rst/porting_guides/porting_guide_2.10.rst:360 #: ../../rst/porting_guides/porting_guide_2.10.rst:518 #: ../../rst/porting_guides/porting_guide_2.10.rst:651 #: ../../rst/porting_guides/porting_guide_2.10.rst:809 #: ../../rst/porting_guides/porting_guide_2.10.rst:924 #: ../../rst/porting_guides/porting_guide_3.rst:174 #: ../../rst/porting_guides/porting_guide_3.rst:225 #: ../../rst/porting_guides/porting_guide_3.rst:329 #: ../../rst/porting_guides/porting_guide_3.rst:467 #: ../../rst/porting_guides/porting_guide_3.rst:608 #: ../../rst/porting_guides/porting_guide_4.rst:299 #: ../../rst/porting_guides/porting_guide_4.rst:376 #: ../../rst/porting_guides/porting_guide_4.rst:448 #: ../../rst/porting_guides/porting_guide_4.rst:597 #: ../../rst/porting_guides/porting_guide_4.rst:748 msgid "community.general" msgstr "community.general" #: ../../rst/porting_guides/porting_guide_2.10.rst:110 #: ../../rst/porting_guides/porting_guide_3.rst:269 #: ../../rst/porting_guides/porting_guide_4.rst:459 msgid "utm_proxy_auth_profile - the ``frontend_cookie_secret`` return value now contains a placeholder string instead of the module's ``frontend_cookie_secret`` parameter (https://github.com/ansible-collections/community.general/pull/1736)." msgstr "utm_proxy_auth_profile - ``frontend_cookie_secret`` ã®æˆ»ã‚Šå€¤ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® ``frontend_cookie_secret`` パラメーターã§ã¯ãªããƒ—ãƒ¬ãƒ¼ã‚¹ãƒ›ãƒ«ãƒ€ãƒ¼ã®æ–‡å­—列ãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1736)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:113 #: ../../rst/porting_guides/porting_guide_2.10.rst:147 #: ../../rst/porting_guides/porting_guide_2.10.rst:199 #: ../../rst/porting_guides/porting_guide_2.10.rst:272 #: ../../rst/porting_guides/porting_guide_2.10.rst:384 #: ../../rst/porting_guides/porting_guide_2.10.rst:425 #: ../../rst/porting_guides/porting_guide_2.10.rst:613 #: ../../rst/porting_guides/porting_guide_3.rst:34 #: ../../rst/porting_guides/porting_guide_3.rst:68 #: ../../rst/porting_guides/porting_guide_3.rst:131 #: ../../rst/porting_guides/porting_guide_3.rst:321 #: ../../rst/porting_guides/porting_guide_4.rst:139 #: ../../rst/porting_guides/porting_guide_4.rst:164 #: ../../rst/porting_guides/porting_guide_4.rst:238 #: ../../rst/porting_guides/porting_guide_4.rst:266 #: ../../rst/porting_guides/porting_guide_4.rst:322 #: ../../rst/porting_guides/porting_guide_4.rst:479 msgid "Major Changes" msgstr "主ãªå¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_2.10.rst:115 msgid "Restricting the version of the community.okd collection to 1.0.0. The previously included version, 1.0.1, had a dependency on kubernetes.core and thus required the installation of an additional collection that was not included in Ansible 2.10. Version 1.0.0 is essentially identical to 1.0.1, except that it uses community.kubernetes, wihch is included in Ansible 2.10." msgstr "community.okd コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ 1.0.0 ã«åˆ¶é™ã—ã¾ã—ãŸã€‚ã“れã¾ã§å«ã¾ã‚Œã¦ã„ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.0.1 ã¯ã€kubernetes.core ã«ä¾å­˜ã—ã¦ã„ãŸãŸã‚ã€Ansible 2.10 ã«å«ã¾ã‚Œã¦ã„ãªã„追加ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.0.0 ã¯ã€Ansible 2.10 ã«å«ã¾ã‚Œã¦ã„ã‚‹ community.kubernetes を使用ã—ã¦ã„る以外ã¯ã€1.0.1 ã¨åŸºæœ¬çš„ã«åŒã˜ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:118 #: ../../rst/porting_guides/porting_guide_2.10.rst:392 #: ../../rst/porting_guides/porting_guide_2.10.rst:739 #: ../../rst/porting_guides/porting_guide_3.rst:415 #: ../../rst/porting_guides/porting_guide_4.rst:172 msgid "ovirt.ovirt" msgstr "ovirt.ovirt" #: ../../rst/porting_guides/porting_guide_2.10.rst:120 #: ../../rst/porting_guides/porting_guide_3.rst:424 msgid "ovirt_system_option_info - Add new module (https://github.com/oVirt/ovirt-ansible-collection/pull/206)." msgstr "ovirt_system_option_info - æ–°ã—ã„モジュールを追加ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/206)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:123 #: ../../rst/porting_guides/porting_guide_3.rst:430 #: ../../rst/porting_guides/porting_guide_4.rst:469 #: ../../rst/porting_guides/porting_guide_4.rst:569 msgid "servicenow.servicenow" msgstr "servicenow.servicenow" #: ../../rst/porting_guides/porting_guide_2.10.rst:125 #: ../../rst/porting_guides/porting_guide_3.rst:432 msgid "add new tests (find with no result, search many)" msgstr "æ–°è¦ãƒ†ã‚¹ãƒˆã®è¿½åŠ  (çµæžœãŒãªã„検索ã€å¤šæ•°ã®æ¤œç´¢)" #: ../../rst/porting_guides/porting_guide_2.10.rst:126 #: ../../rst/porting_guides/porting_guide_3.rst:433 msgid "add related tests" msgstr "関連テストã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_2.10.rst:127 #: ../../rst/porting_guides/porting_guide_3.rst:434 msgid "add support for ServiceNOW table api display_value exclude_reference_link and suppress_pagination_header" msgstr "ServiceNOW テーブル api display_value exclude_reference_link ãŠã‚ˆã³ suppress_pagination_header ã®ã‚µãƒãƒ¼ãƒˆã‚’追加" #: ../../rst/porting_guides/porting_guide_2.10.rst:128 #: ../../rst/porting_guides/porting_guide_3.rst:435 msgid "use new API for pysnow >=0.6.0" msgstr "0.6.0 以é™ã® pysnow ã§æ–°ã—ã„ API ã®ä½¿ç”¨" #: ../../rst/porting_guides/porting_guide_2.10.rst:131 #: ../../rst/porting_guides/porting_guide_2.10.rst:238 #: ../../rst/porting_guides/porting_guide_2.10.rst:357 #: ../../rst/porting_guides/porting_guide_2.10.rst:414 #: ../../rst/porting_guides/porting_guide_2.10.rst:434 #: ../../rst/porting_guides/porting_guide_2.10.rst:851 #: ../../rst/porting_guides/porting_guide_3.rst:52 #: ../../rst/porting_guides/porting_guide_3.rst:76 #: ../../rst/porting_guides/porting_guide_3.rst:111 #: ../../rst/porting_guides/porting_guide_3.rst:155 #: ../../rst/porting_guides/porting_guide_3.rst:587 #: ../../rst/porting_guides/porting_guide_4.rst:153 #: ../../rst/porting_guides/porting_guide_4.rst:177 #: ../../rst/porting_guides/porting_guide_4.rst:207 #: ../../rst/porting_guides/porting_guide_4.rst:246 #: ../../rst/porting_guides/porting_guide_4.rst:287 #: ../../rst/porting_guides/porting_guide_4.rst:363 #: ../../rst/porting_guides/porting_guide_4.rst:709 msgid "Deprecated Features" msgstr "éžæŽ¨å¥¨ã®æ©Ÿèƒ½" #: ../../rst/porting_guides/porting_guide_2.10.rst:134 #: ../../rst/porting_guides/porting_guide_2.10.rst:417 #: ../../rst/porting_guides/porting_guide_2.10.rst:437 #: ../../rst/porting_guides/porting_guide_3.rst:590 #: ../../rst/porting_guides/porting_guide_4.rst:215 #: ../../rst/porting_guides/porting_guide_4.rst:527 #: ../../rst/porting_guides/porting_guide_4.rst:724 msgid "cisco.nxos" msgstr "cisco.nxos" #: ../../rst/porting_guides/porting_guide_2.10.rst:136 #: ../../rst/porting_guides/porting_guide_3.rst:592 msgid "Deprecated `nxos_bgp` and `nxos_bgp_neighbor` modules in favor of `nxos_bgp_global` resource module." msgstr "`nxos_bgp` モジュールãŠã‚ˆã³ `nxos_bgp_neighbor` モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€`nxos_bgp_global` リソースモジュールãŒä½¿ç”¨ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:139 #: ../../rst/porting_guides/porting_guide_2.10.rst:537 #: ../../rst/porting_guides/porting_guide_2.10.rst:827 #: ../../rst/porting_guides/porting_guide_2.10.rst:944 #: ../../rst/porting_guides/porting_guide_3.rst:79 #: ../../rst/porting_guides/porting_guide_3.rst:634 #: ../../rst/porting_guides/porting_guide_4.rst:269 #: ../../rst/porting_guides/porting_guide_4.rst:767 msgid "community.vmware" msgstr "community.vmware" #: ../../rst/porting_guides/porting_guide_2.10.rst:141 #: ../../rst/porting_guides/porting_guide_3.rst:636 msgid "vmware_host_firewall_manager - the creation of new rule with no ``allowed_ip`` entry in the ``allowed_hosts`` dictionary won't be allowed after 2.0.0 release." msgstr "vmware_host_firewall_manager - ``allowed_hosts`` ディクショナリー㫠``allowed_ip`` エントリーãŒãªã„æ–°è¦ãƒ«ãƒ¼ãƒ«ã®ä½œæˆã¯ã€2.0.0 リリース後ã¯è¨±å¯ã•れãªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:144 msgid "Porting Guide for v2.10.6" msgstr "v2.10.6 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:152 msgid "For community.general 2.0.0, the kubevirt modules will be moved to the `community.kubevirt `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€kubevirt モジュール㯠`community.kubevirt `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:155 msgid "If you use Ansible 2.9 and explicitly use kubevirt modules from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.kubevirt.`` instead of ``community.general.``, for example replace ``community.general.kubevirt_vm`` in a task by ``community.kubevirt.kubevirt_vm``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ã® kubevirt モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€``community.general.`` ã§ã¯ãªã ``community.kubevirt.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã« Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’調整ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.kubevirt.kubevirt_vm`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.general.kubevirt_vm`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:158 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the kubevirt modules, you have to make sure to install the ``community.kubevirt`` collection as well. If you are using FQCNs, for example ``community.general.kubevirt_vm`` instead of ``kubevirt_vm``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€kubevirt モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.kubevirt`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãŸã¨ãˆã° ``kubevirt_vm`` ã®ä»£ã‚り㫠``community.general.kubevirt_vm`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:162 #: ../../rst/porting_guides/porting_guide_2.10.rst:304 #: ../../rst/porting_guides/porting_guide_2.10.rst:368 #: ../../rst/porting_guides/porting_guide_2.10.rst:532 #: ../../rst/porting_guides/porting_guide_2.10.rst:822 #: ../../rst/porting_guides/porting_guide_3.rst:282 #: ../../rst/porting_guides/porting_guide_3.rst:551 #: ../../rst/porting_guides/porting_guide_3.rst:629 #: ../../rst/porting_guides/porting_guide_4.rst:687 msgid "community.network" msgstr "community.network" #: ../../rst/porting_guides/porting_guide_2.10.rst:164 msgid "For community.network 2.0.0, the Cisco NSO modules will be moved to the `cisco.nso `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.network 2.0.0 ã§ã¯ã€Cisco NSO モジュール㯠`cisco.nso `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã—ãªãã¦ã‚‚よã„よã†ã«ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæŒ¿å…¥ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:167 msgid "If you use Ansible 2.9 and explicitly use Cisco NSO modules from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``cisco.nso.`` instead of ``community.network.``, for example replace ``community.network.nso_config`` in a task by ``cisco.nso.nso_config``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ Cisco NSO モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.network.`` ã§ã¯ãªã ``cisco.nso.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``cisco.nso.nso_config`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.network.nso_config`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:170 msgid "If you use ansible-base and installed ``community.network`` manually and rely on the Cisco NSO modules, you have to make sure to install the ``cisco.nso`` collection as well. If you are using FQCNs, for example ``community.network.nso_config`` instead of ``nso_config``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.network`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€Cisco NSO モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``cisco.nso`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ãŸã¨ãˆã° ``nso_config`` ã®ä»£ã‚り㫠``community.network.nso_config`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:172 msgid "For community.network 2.0.0, the FortiOS modules will be moved to the `community.fortios `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.network 2.0.0 ã§ã¯ã€FortiOS モジュール㯠`community.fortios `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã—ãªãã¦ã‚‚よã„よã†ã«ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæŒ¿å…¥ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:175 msgid "If you use Ansible 2.9 and explicitly use FortiOS modules from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.fortios.`` instead of ``community.network.``, for example replace ``community.network.fmgr_device`` in a task by ``community.fortios.fmgr_device``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ FortiOS モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.network.`` ã§ã¯ãªã ``community.fortios.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.fortios.fmgr_device`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.network.fmgr_device`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:178 msgid "If you use ansible-base and installed ``community.network`` manually and rely on the FortiOS modules, you have to make sure to install the ``community.fortios`` collection as well. If you are using FQCNs, for example ``community.network.fmgr_device`` instead of ``fmgr_device``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.network`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€FortiOS モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.fortios`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ãŸã¨ãˆã° ``fmgr_device`` ã®ä»£ã‚り㫠``community.network.fmgr_device`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:182 #: ../../rst/porting_guides/porting_guide_2.10.rst:387 #: ../../rst/porting_guides/porting_guide_2.10.rst:409 #: ../../rst/porting_guides/porting_guide_2.10.rst:728 #: ../../rst/porting_guides/porting_guide_2.10.rst:841 #: ../../rst/porting_guides/porting_guide_2.10.rst:958 #: ../../rst/porting_guides/porting_guide_3.rst:84 #: ../../rst/porting_guides/porting_guide_3.rst:148 #: ../../rst/porting_guides/porting_guide_3.rst:373 #: ../../rst/porting_guides/porting_guide_3.rst:582 #: ../../rst/porting_guides/porting_guide_4.rst:693 #: ../../rst/porting_guides/porting_guide_4.rst:772 msgid "f5networks.f5_modules" msgstr "f5networks.f5_modules" #: ../../rst/porting_guides/porting_guide_2.10.rst:184 #: ../../rst/porting_guides/porting_guide_3.rst:376 msgid "Added async_timeout parameter to bigip_ucs_fetch module to allow customization of module wait for async interface" msgstr "bigip_ucs_fetch モジュール㫠async_timeout パラメーターを追加ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ async インターフェースを待機ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:185 #: ../../rst/porting_guides/porting_guide_3.rst:377 msgid "Changed bigip_ucs_fetch module to use asynchronous interface when generating UCS files" msgstr "UCS ファイルã®ç”Ÿæˆæ™‚ã«éžåŒæœŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使用ã™ã‚‹ã‚ˆã†ã« bigip_ucs_fetch モジュールã®å¤‰æ›´" #: ../../rst/porting_guides/porting_guide_2.10.rst:188 msgid "Porting Guide for v2.10.5" msgstr "v2.10.5 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:194 #: ../../rst/porting_guides/porting_guide_2.10.rst:251 #: ../../rst/porting_guides/porting_guide_3.rst:272 #: ../../rst/porting_guides/porting_guide_3.rst:619 #: ../../rst/porting_guides/porting_guide_4.rst:249 #: ../../rst/porting_guides/porting_guide_4.rst:305 msgid "community.hashi_vault" msgstr "community.hashi_vault" #: ../../rst/porting_guides/porting_guide_2.10.rst:196 #: ../../rst/porting_guides/porting_guide_3.rst:274 msgid "hashi_vault - the ``VAULT_ADDR`` environment variable is now checked last for the ``url`` parameter. For details on which use cases are impacted, see (https://github.com/ansible-collections/community.hashi_vault/issues/8)." msgstr "hashi_vault - ``VAULT_ADDR`` 環境変数ãŒã€æœ€å¾Œã« ``url`` パラメーターã«ã¤ã„ã¦ãƒã‚§ãƒƒã‚¯ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚影響をå—ã‘るユースケースã®è©³ç´°ã¯ã€https://github.com/ansible-collections/community.hashi_vault/issues/8 ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:204 msgid "For community.general 2.0.0, the Google modules will be moved to the `community.google `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€Google モジュール㯠`community.google `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:207 msgid "If you use Ansible 2.9 and explicitly use Google modules from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.google.`` instead of ``community.general.``, for example replace ``community.general.gcpubsub`` in a task by ``community.google.gcpubsub``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ Google モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.general.`` ã§ã¯ãªã ``community.google.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.google.gcpubsub`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.general.gcpubsub`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:210 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the Google modules, you have to make sure to install the ``community.google`` collection as well. If you are using FQCNs, for example ``community.general.gcpubsub`` instead of ``gcpubsub``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€Google モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.google`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ãŸã¨ãˆã° ``gcpubsub`` ã®ä»£ã‚り㫠``community.general.gcpubsub`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:212 msgid "For community.general 2.0.0, the OC connection plugin will be moved to the `community.okd `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€OC 接続プラグイン㯠`community.okd `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:215 msgid "If you use Ansible 2.9 and explicitly use OC connection plugin from this collection, you will need to adjust your playbooks and roles to use FQCNs ``community.okd.oc`` instead of ``community.general.oc``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ OC 接続プラグインを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.general.oc`` ã§ã¯ãªã FQCN ã® ``community.okd.oc`` を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:217 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the OC connection plugin, you have to make sure to install the ``community.okd`` collection as well. If you are using FQCNs, in other words ``community.general.oc`` instead of ``oc``, it will continue working, but we still recommend to adjust this FQCN as well." msgstr "ansible-base を使用ã—ã€æ‰‹å‹•ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—㟠``community.general`` を使用ã—ã€OC 接続プラグインã«ä¾å­˜ã™ã‚‹å ´åˆã¯ã€``community.okd`` コレクションもインストールã—ã¦ãã ã•ã„。FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ã¤ã¾ã‚Šã€``oc`` ã®ä»£ã‚り㫠``community.general.oc`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:219 msgid "For community.general 2.0.0, the hashi_vault lookup plugin will be moved to the `community.hashi_vault `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€hashi_vault lookup プラグイン㯠`community.hashi_vault `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:222 msgid "If you use Ansible 2.9 and explicitly use hashi_vault lookup plugin from this collection, you will need to adjust your playbooks and roles to use FQCNs ``community.hashi_vault.hashi_vault`` instead of ``community.general.hashi_vault``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® hashi_vault lookup プラグインを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€``community.general.hashi_vault`` ã§ã¯ãªã FQCN ``community.hashi_vault.hashi_vault`` を使用ã™ã‚‹ã‚ˆã†ã« Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’調整ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:224 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the hashi_vault lookup plugin, you have to make sure to install the ``community.hashi_vault`` collection as well. If you are using FQCNs, in other words ``community.general.hashi_vault`` instead of ``hashi_vault``, it will continue working, but we still recommend to adjust this FQCN as well." msgstr "ansible-base を使用ã—ã€æ‰‹å‹•ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—㟠``community.general`` を手動ã§ã—ã€hashi_vault lookup プラグインã«ä¾å­˜ã™ã‚‹å ´åˆã¯ã€``community.hashi_vault`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ã¤ã¾ã‚Šã€``hashi_vault`` ã§ã¯ãªã ``community.general.hashi_vault`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:228 #: ../../rst/porting_guides/porting_guide_2.10.rst:559 #: ../../rst/porting_guides/porting_guide_3.rst:405 #: ../../rst/porting_guides/porting_guide_4.rst:350 msgid "netbox.netbox" msgstr "netbox.netbox" #: ../../rst/porting_guides/porting_guide_2.10.rst:230 #: ../../rst/porting_guides/porting_guide_3.rst:407 msgid "nb_inventory - Add ``dns_name`` option that adds ``dns_name`` to the host when ``True`` and device has a primary IP address. (#394)" msgstr "nb_inventory - ``True`` ãŠã‚ˆã³ãƒ‡ãƒã‚¤ã‚¹ã«ãƒ—ライマリー IP アドレスãŒã‚ã‚‹å ´åˆã« ``dns_name`` をホストã«è¿½åŠ ã™ã‚‹ ``dns_name`` オプションを追加ã—ã¾ã™ã€‚(#394)" #: ../../rst/porting_guides/porting_guide_2.10.rst:231 #: ../../rst/porting_guides/porting_guide_3.rst:408 msgid "nb_inventory - Add ``status`` as a ``group_by`` option. (398)" msgstr "nb_inventory - ``group_by`` オプションã¨ã—㦠``status`` を追加ã—ã¾ã™ã€‚(398)" #: ../../rst/porting_guides/porting_guide_2.10.rst:232 #: ../../rst/porting_guides/porting_guide_3.rst:409 msgid "nb_inventory - Move around ``extracted_primary_ip`` to allow for ``config_context`` or ``custom_field`` to overwite. (#377)" msgstr "nb_inventory - ``config_context`` ã¾ãŸã¯ ``custom_field`` ã®ä¸Šæ›¸ãを許å¯ã™ã‚‹ ``extracted_primary_ip`` を移動ã—ã¾ã™ã€‚(#377)" #: ../../rst/porting_guides/porting_guide_2.10.rst:233 #: ../../rst/porting_guides/porting_guide_3.rst:410 msgid "nb_inventory - Services are now a list of integers due to NetBox 2.10 changes. (#396)" msgstr "nb_inventory - サービスã¯ã€NetBox 2.10 ã®å¤‰æ›´ã«ã‚ˆã‚Šæ•´æ•°ã®ä¸€è¦§ã«ãªã‚Šã¾ã—ãŸã€‚(#396)" #: ../../rst/porting_guides/porting_guide_2.10.rst:234 #: ../../rst/porting_guides/porting_guide_3.rst:411 msgid "nb_lookup - Allow ID to be passed in and use ``.get`` instead of ``.filter``. (#376)" msgstr "nb_lookup - ID を渡ã™ã“ã¨ãŒã§ãã€``.filter`` ã®ä»£ã‚り㫠``.get`` を使用ã§ãã¾ã™ã€‚(#376)" #: ../../rst/porting_guides/porting_guide_2.10.rst:235 #: ../../rst/porting_guides/porting_guide_3.rst:412 msgid "nb_lookup - Allow ``api_endpoint`` and ``token`` to be found via env. (#391)" msgstr "nb_lookup - ``api_endpoint`` ãŠã‚ˆã³ ``token`` ã‚’ env çµŒç”±ã§æ¤œç´¢ã™ã‚‹ã“ã¨ã‚’許å¯ã—ã¾ã™ã€‚(#391)" #: ../../rst/porting_guides/porting_guide_2.10.rst:241 #: ../../rst/porting_guides/porting_guide_2.10.rst:892 #: ../../rst/porting_guides/porting_guide_3.rst:55 #: ../../rst/porting_guides/porting_guide_3.rst:163 #: ../../rst/porting_guides/porting_guide_3.rst:598 #: ../../rst/porting_guides/porting_guide_4.rst:735 msgid "community.aws" msgstr "community.aws" #: ../../rst/porting_guides/porting_guide_2.10.rst:243 #: ../../rst/porting_guides/porting_guide_3.rst:600 msgid "ec2_vpc_igw_info - After 2022-06-22 the ``convert_tags`` parameter default value will change from ``False`` to ``True`` to match the collection standard behavior (https://github.com/ansible-collections/community.aws/pull/318)." msgstr "ec2_vpc_igw_info - 2022-06-22 以é™ã€``convert_tags`` パラメーターã®ãƒ‡ãƒ•ォルト値㌠``False`` ã‹ã‚‰ ``True`` ã«å¤‰æ›´ã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¨™æº–動作ã¨ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ (https://github.com/ansible-collections/community.aws/pull/318)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:246 #: ../../rst/porting_guides/porting_guide_2.10.rst:331 #: ../../rst/porting_guides/porting_guide_3.rst:60 #: ../../rst/porting_guides/porting_guide_3.rst:106 #: ../../rst/porting_guides/porting_guide_3.rst:441 #: ../../rst/porting_guides/porting_guide_3.rst:603 #: ../../rst/porting_guides/porting_guide_4.rst:220 #: ../../rst/porting_guides/porting_guide_4.rst:371 #: ../../rst/porting_guides/porting_guide_4.rst:443 msgid "community.docker" msgstr "community.docker" #: ../../rst/porting_guides/porting_guide_2.10.rst:248 #: ../../rst/porting_guides/porting_guide_3.rst:605 msgid "docker_container - currently ``published_ports`` can contain port mappings next to the special value ``all``, in which case the port mappings are ignored. This behavior is deprecated for community.docker 2.0.0, at which point it will either be forbidden, or this behavior will be properly implemented similar to how the Docker CLI tool handles this (https://github.com/ansible-collections/community.docker/issues/8, https://github.com/ansible-collections/community.docker/pull/60)." msgstr "docker_container - ç¾åœ¨ã€``published_ports`` ã«ã¯ã€ç‰¹åˆ¥ãªå€¤ ``all`` ã®æ¨ªã«ãƒãƒ¼ãƒˆãƒžãƒƒãƒ”ングをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®å‹•作ã¯ã€community.docker 2.0.0 ã§ã¯éžæŽ¨å¥¨ã§ã™ã€‚ãã®æ™‚点ã§ã€ç¦æ­¢ã•れるã‹ã€Docker CLI ツールãŒã©ã®ã‚ˆã†ã«ã“れを処ç†ã™ã‚‹ã‹ã¨åŒã˜ã‚ˆã†ã«ã€ã“ã®å‹•作ãŒé©åˆ‡ã«å®Ÿè£…ã•れã¾ã™ (https://github.com/ansible-collections/community.docker/issues/8ã€https://github.com/ansible-collections/community.docker/pull/60)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:253 #: ../../rst/porting_guides/porting_guide_3.rst:621 msgid "hashi_vault - ``VAULT_ADDR`` environment variable for option ``url`` will have its precedence lowered in 1.0.0; use ``ANSIBLE_HASHI_VAULT_ADDR`` to intentionally override a config value (https://github.com/ansible-collections/community.hashi_vault/issues/8)." msgstr "hashi_vault - オプション ``url`` ã® ``VAULT_ADDR`` 環境変数ã®å„ªå…ˆåº¦ã¯ 1.0.0 ã§ä½Žããªã‚Šã¾ã™ã€‚設定値をæ„図的ã«ä¸Šæ›¸ãã™ã‚‹ã«ã¯ ``ANSIBLE_HASHI_VAULT_ADDR`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/8)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:254 #: ../../rst/porting_guides/porting_guide_3.rst:622 msgid "hashi_vault - ``VAULT_AUTH_METHOD`` environment variable for option ``auth_method`` will be removed in 2.0.0, use ``ANSIBLE_HASHI_VAULT_AUTH_METHOD`` instead (https://github.com/ansible-collections/community.hashi_vault/issues/17)." msgstr "hashi_vault - オプション ``auth_method`` ã® ``VAULT_AUTH_METHOD`` 環境変数㯠2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``ANSIBLE_HASHI_VAULT_AUTH_METHOD`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/17)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:255 #: ../../rst/porting_guides/porting_guide_3.rst:623 msgid "hashi_vault - ``VAULT_ROLE_ID`` environment variable for option ``role_id`` will be removed in 2.0.0, use ``ANSIBLE_HASHI_VAULT_ROLE_ID`` instead (https://github.com/ansible-collections/community.hashi_vault/issues/20)." msgstr "hashi_vault - オプション ``role_id`` ã® ``VAULT_ROLE_ID`` 環境変数㯠2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``ANSIBLE_HASHI_VAULT_ROLE_ID`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/20)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:256 #: ../../rst/porting_guides/porting_guide_3.rst:624 msgid "hashi_vault - ``VAULT_SECRET_ID`` environment variable for option ``secret_id`` will be removed in 2.0.0, use ``ANSIBLE_HASHI_VAULT_SECRET_ID`` instead (https://github.com/ansible-collections/community.hashi_vault/issues/20)." msgstr "hashi_vault - オプション ``secret_id`` ã® ``VAULT_SECRET_ID`` 環境変数㯠2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``ANSIBLE_HASHI_VAULT_SECRET_ID`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/20)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:257 #: ../../rst/porting_guides/porting_guide_3.rst:625 msgid "hashi_vault - ``VAULT_TOKEN_FILE`` environment variable for option ``token_file`` will be removed in 2.0.0, use ``ANSIBLE_HASHI_VAULT_TOKEN_FILE`` instead (https://github.com/ansible-collections/community.hashi_vault/issues/15)." msgstr "hashi_vault - オプション ``token_file`` ã® ``VAULT_TOKEN_FILE`` 環境変数㯠2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``ANSIBLE_HASHI_VAULT_TOKEN_FILE`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/15)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:258 #: ../../rst/porting_guides/porting_guide_3.rst:626 msgid "hashi_vault - ``VAULT_TOKEN_PATH`` environment variable for option ``token_path`` will be removed in 2.0.0, use ``ANSIBLE_HASHI_VAULT_TOKEN_PATH`` instead (https://github.com/ansible-collections/community.hashi_vault/issues/15)." msgstr "hashi_vault - オプション ``token_path`` ã® ``VAULT_TOKEN_PATH`` 環境変数㯠2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``ANSIBLE_HASHI_VAULT_TOKEN_PATH`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.hashi_vault/issues/15)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:261 msgid "Porting Guide for v2.10.4" msgstr "v2.10.4 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:267 #: ../../rst/porting_guides/porting_guide_3.rst:277 msgid "community.hrobot" msgstr "community.hrobot" #: ../../rst/porting_guides/porting_guide_2.10.rst:269 #: ../../rst/porting_guides/porting_guide_3.rst:279 msgid "firewall - now requires the `ipaddress `_ library (https://github.com/ansible-collections/community.hrobot/pull/2)." msgstr "firewall - `ipaddress `_ ライブラリーãŒå¿…è¦ã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.hrobot/pull/2)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:277 msgid "For community.general 2.0.0, the Hetzner Robot modules will be moved to the `community.hrobot `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€Heatzner Robot モジュール㌠`community.hrobot `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã—ãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:280 msgid "If you use Ansible 2.9 and explicitly use Hetzner Robot modules from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.hrobot.`` instead of ``community.general.hetzner_``, for example replace ``community.general.hetzner_firewall_info`` in a task by ``community.hrobot.firewall_info``." msgstr "Ansible 2.9 を使用ã—ã¦ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ Hetzner Robot モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€``community.general.hetzner_`` ã§ã¯ãªã ``community.hrobot.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã« Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’調整ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.hrobot.firewall_info`` ã§ã€ã‚¿ã‚¹ã‚¯å†…ã® ``community.general.hetzner_firewall_info`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:283 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the Hetzner Robot modules, you have to make sure to install the ``community.hrobot`` collection as well. If you are using FQCNs, i.e. ``community.general.hetzner_failover_ip`` instead of ``hetzner_failover_ip``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€Hetzner Robot モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.hrobot`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ãŸã¨ãˆã° ``hetzner_failover_ip`` ã®ä»£ã‚り㫠``community.general.hetzner_failover_ip`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:285 msgid "For community.general 2.0.0, the ``docker`` modules and plugins will be moved to the `community.docker `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€``docker`` モジュールãŠã‚ˆã³ãƒ—ラグイン㯠`community.docker `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:288 msgid "If you use Ansible 2.9 and explicitly use ``docker`` content from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.docker.`` instead of ``community.general.``, for example replace ``community.general.docker_container`` in a task by ``community.docker.docker_container``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ ``docker`` コンテンツを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.general.`` ã§ã¯ãªã ``community.docker.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.docker.docker_container`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.general.docker_container`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:291 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the ``docker`` content, you have to make sure to install the ``community.docker`` collection as well. If you are using FQCNs, i.e. ``community.general.docker_container`` instead of ``docker_container``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€``docker`` コンテンツã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.docker`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ã¤ã¾ã‚Š ``docker_container`` ã®ä»£ã‚り㫠``community.general.docker_container`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:293 msgid "For community.general 2.0.0, the ``postgresql`` modules and plugins will be moved to the `community.postgresql `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 2.0.0 ã®å ´åˆã€``postgresql`` モジュールãŠã‚ˆã³ãƒ—ラグイン㯠`community.postgresql `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:296 msgid "If you use Ansible 2.9 and explicitly use ``postgresql`` content from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.postgresql.`` instead of ``community.general.``, for example replace ``community.general.postgresql_info`` in a task by ``community.postgresql.postgresql_info``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ ``postgresql`` コンテンツを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.general.`` ã§ã¯ãªã ``community.postgresql.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.postgresql.postgresql_info`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.general.postgresql_info`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:299 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the ``postgresql`` content, you have to make sure to install the ``community.postgresql`` collection as well. If you are using FQCNs, i.e. ``community.general.postgresql_info`` instead of ``postgresql_info``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€``postgresql`` コンテンツã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.postgresql`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ã¤ã¾ã‚Š ``postgresql_info`` ã®ä»£ã‚り㫠``community.general.postgresql_info`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:301 #: ../../rst/porting_guides/porting_guide_3.rst:340 msgid "The community.general collection no longer depends on the ansible.posix collection (https://github.com/ansible-collections/community.general/pull/1157)." msgstr "community.general コレクション㯠ansible.posix コレクションã«ä¾å­˜ã—ãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1157)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:306 msgid "For community.network 2.0.0, the ``routeros`` modules and plugins will be moved to the `community.routeros `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.network 2.0.0 ã®å ´åˆã€``routeros`` モジュールãŠã‚ˆã³ãƒ—ラグイン㯠`community.routeros `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:309 msgid "If you use Ansible 2.9 and explicitly use ``routeros`` content from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``community.routeros.`` instead of ``community.network.routeros_``, for example replace ``community.network.routeros_api`` in a task by ``community.routeros.api``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ ``routeros`` コンテンツを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.network.routeros_`` ã§ã¯ãªã ``community.routeros.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``community.routeros.api`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.network.routeros_api`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:312 msgid "If you use ansible-base and installed ``community.network`` manually and rely on the ``routeros`` content, you have to make sure to install the ``community.routeros`` collection as well. If you are using FQCNs, i.e. ``community.network.routeros_command`` instead of ``routeros_command``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.network`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€``routeros`` コンテンツã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.routeros`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ã¤ã¾ã‚Š ``routeros_command`` ã®ä»£ã‚り㫠``community.network.routeros_command`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:314 msgid "In community.network 2.0.0, the ``fortimanager`` httpapi plugin will be removed and replaced by a redirect to the corresponding plugin in the fortios.fortimanager collection. For Ansible 2.10 and ansible-base 2.10 users, this means that it will continue to work assuming that collection is installed. For Ansible 2.9 users, this means that they have to adjust the FQCN from ``community.network.fortimanager`` to ``fortios.fortimanager.fortimanager`` (https://github.com/ansible-collections/community.network/pull/151)." msgstr "community.network 2.0.0 ã§ã¯ã€``fortimanager`` httpapi プラグインãŒå‰Šé™¤ã•れã€fortios.fortimanager コレクションã«ã‚る対応ã™ã‚‹ãƒ—ラグインã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚Ansible 2.10 ãŠã‚ˆã³ ansible-base 2.10 ユーザーã®å ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã¨ä»®å®šã—ã¦å‹•作ã¯ç¶™ç¶šã—ã¾ã™ã€‚Ansible 2.9 ユーザーã¯ã€FQCN ã‚’ ``community.network.fortimanager`` ã‹ã‚‰ ``fortios.fortimanager.fortimanager`` ã¸èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚(https://github.com/ansible-collections/community.network/pull/151)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:317 #: ../../rst/porting_guides/porting_guide_3.rst:349 msgid "community.okd" msgstr "community.okd" #: ../../rst/porting_guides/porting_guide_2.10.rst:319 #: ../../rst/porting_guides/porting_guide_3.rst:351 msgid "Add custom k8s module, integrate better Molecule tests (https://github.com/ansible-collections/community.okd/pull/7)." msgstr "カスタム k8s モジュールを追加ã—ã€å„ªã‚ŒãŸ Molecule テストを統åˆã—ã¾ã™ (https://github.com/ansible-collections/community.okd/pull/7)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:320 #: ../../rst/porting_guides/porting_guide_3.rst:352 msgid "Add downstream build scripts to build redhat.openshift (https://github.com/ansible-collections/community.okd/pull/20)." msgstr "redhat.openshift を構築ã™ã‚‹ãŸã‚ã®ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒ“ルドスクリプトを追加ã—ã¾ã™ (https://github.com/ansible-collections/community.okd/pull/20)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:321 #: ../../rst/porting_guides/porting_guide_3.rst:353 msgid "Add openshift connection plugin, update inventory plugin to use it (https://github.com/ansible-collections/community.okd/pull/18)." msgstr "openshift 接続プラグインを追加ã—ã€ä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを更新ã—ã¾ã™ (https://github.com/ansible-collections/community.okd/pull/18)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:322 #: ../../rst/porting_guides/porting_guide_3.rst:354 msgid "Add openshift_process module for template rendering and optional application of rendered resources (https://github.com/ansible-collections/community.okd/pull/44)." msgstr "テンプレートをレンダリングã—ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れãŸãƒªã‚½ãƒ¼ã‚¹ã®ä»»æ„ã®ã‚¢ãƒ—リケーション用㫠openshift_process モジュールを追加ã—ã¾ã™ (https://github.com/ansible-collections/community.okd/pull/44)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:323 #: ../../rst/porting_guides/porting_guide_3.rst:355 msgid "Add openshift_route module for creating routes from services (https://github.com/ansible-collections/community.okd/pull/40)." msgstr "サービスã‹ã‚‰ãƒ«ãƒ¼ãƒˆã‚’作æˆã™ã‚‹ openshift_route モジュールを追加ã—ã¾ã™ (https://github.com/ansible-collections/community.okd/pull/40)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:324 #: ../../rst/porting_guides/porting_guide_3.rst:356 msgid "Initial content migration from community.kubernetes (https://github.com/ansible-collections/community.okd/pull/3)." msgstr "community.kubernetes ã‹ã‚‰ã®æœ€åˆã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ç§»è¡Œ (https://github.com/ansible-collections/community.okd/pull/3)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:325 #: ../../rst/porting_guides/porting_guide_3.rst:357 msgid "openshift_auth - new module (migrated from k8s_auth in community.kubernetes) (https://github.com/ansible-collections/community.okd/pull/33)." msgstr "openshift_auth - æ–°ã—ã„モジュール (community.kubernetes ã® k8s_auth ã‹ã‚‰ã®ç§»è¡Œ) (https://github.com/ansible-collections/community.okd/pull/33)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:328 #: ../../rst/porting_guides/porting_guide_2.10.rst:406 #: ../../rst/porting_guides/porting_guide_2.10.rst:786 #: ../../rst/porting_guides/porting_guide_3.rst:145 #: ../../rst/porting_guides/porting_guide_3.rst:438 #: ../../rst/porting_guides/porting_guide_4.rst:355 #: ../../rst/porting_guides/porting_guide_4.rst:583 msgid "Removed Features" msgstr "削除ã•ã‚ŒãŸæ©Ÿèƒ½" #: ../../rst/porting_guides/porting_guide_2.10.rst:333 #: ../../rst/porting_guides/porting_guide_3.rst:443 msgid "docker_container - no longer returns ``ansible_facts`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_container - ``ansible_facts`` ãŒè¿”ã•れãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:334 #: ../../rst/porting_guides/porting_guide_3.rst:444 msgid "docker_container - the default of ``networks_cli_compatible`` changed to ``true`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_container - ``networks_cli_compatible`` ã®ãƒ‡ãƒ•ォルト㌠``true`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:335 #: ../../rst/porting_guides/porting_guide_3.rst:445 msgid "docker_container - the unused option ``trust_image_content`` has been removed (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_container - 未使用ã®ã‚ªãƒ—ション ``trust_image_content`` ãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:336 #: ../../rst/porting_guides/porting_guide_3.rst:446 msgid "docker_image - ``state=build`` has been removed. Use ``present`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``state=build`` ã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``present`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:337 #: ../../rst/porting_guides/porting_guide_3.rst:447 msgid "docker_image - the ``container_limits``, ``dockerfile``, ``http_timeout``, ``nocache``, ``rm``, ``path``, ``buildargs``, ``pull`` have been removed. Use the corresponding suboptions of ``build`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``container_limits``ã€``dockerfile``ã€``http_timeout``ã€``nocache``ã€``rm``ã€``path``ã€``buildargs``ã€``pull`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ 代ã‚り㫠``build`` ã®è©²å½“ã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:338 #: ../../rst/porting_guides/porting_guide_3.rst:448 msgid "docker_image - the ``force`` option has been removed. Use the more specific ``force_*`` options instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``force`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚りã«ã€ã‚ˆã‚Šå…·ä½“的㪠``force_*`` オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:339 #: ../../rst/porting_guides/porting_guide_3.rst:449 msgid "docker_image - the ``source`` option is now mandatory (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``source`` オプションãŒå¿…é ˆã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:340 #: ../../rst/porting_guides/porting_guide_3.rst:450 msgid "docker_image - the ``use_tls`` option has been removed. Use ``tls`` and ``validate_certs`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``use_tls`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``tls`` ãŠã‚ˆã³ ``validate_certs`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:341 #: ../../rst/porting_guides/porting_guide_3.rst:451 msgid "docker_image - the default of the ``build.pull`` option changed to ``false`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ``build.pull`` オプションã®ãƒ‡ãƒ•ォルト㌠``false`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:342 #: ../../rst/porting_guides/porting_guide_3.rst:452 msgid "docker_image_facts - this alias is on longer availabe, use ``docker_image_info`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_image - ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯åˆ©ç”¨ã§ããªããªã‚Šã¾ã™ã€‚代ã‚り㫠``docker_image_info`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:343 #: ../../rst/porting_guides/porting_guide_3.rst:453 msgid "docker_network - no longer returns ``ansible_facts`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_network - ``ansible_facts`` ãŒè¿”ã•れãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:344 #: ../../rst/porting_guides/porting_guide_3.rst:454 msgid "docker_network - the ``ipam_options`` option has been removed. Use ``ipam_config`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_network - ``ipam_options`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``ipam_config`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:345 #: ../../rst/porting_guides/porting_guide_3.rst:455 msgid "docker_service - no longer returns ``ansible_facts`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_service - ``ansible_facts`` ãŒè¿”ã•れãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:346 #: ../../rst/porting_guides/porting_guide_3.rst:456 msgid "docker_swarm - ``state=inspect`` has been removed. Use ``docker_swarm_info`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm - ``state=inspect`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``docker_swarm_info`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:347 #: ../../rst/porting_guides/porting_guide_3.rst:457 msgid "docker_swarm_service - the ``constraints`` option has been removed. Use ``placement.constraints`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``constraints`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``placement.constraints`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:348 #: ../../rst/porting_guides/porting_guide_3.rst:458 msgid "docker_swarm_service - the ``limit_cpu`` and ``limit_memory`` options has been removed. Use the corresponding suboptions in ``limits`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``limit_cpu`` オプションãŠã‚ˆã³ ``limit_memory`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``limits`` ã§å¯¾å¿œã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:349 #: ../../rst/porting_guides/porting_guide_3.rst:459 msgid "docker_swarm_service - the ``log_driver`` and ``log_driver_options`` options has been removed. Use the corresponding suboptions in ``logging`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``log_driver`` オプションãŠã‚ˆã³ ``log_driver_options`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``logging`` ã§å¯¾å¿œã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:350 #: ../../rst/porting_guides/porting_guide_3.rst:460 msgid "docker_swarm_service - the ``reserve_cpu`` and ``reserve_memory`` options has been removed. Use the corresponding suboptions in ``reservations`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``reserve_cpu`` オプションãŠã‚ˆã³ ``reserve_memory`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``reservations`` ã§å¯¾å¿œã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:351 #: ../../rst/porting_guides/porting_guide_3.rst:461 msgid "docker_swarm_service - the ``restart_policy``, ``restart_policy_attempts``, ``restart_policy_delay`` and ``restart_policy_window`` options has been removed. Use the corresponding suboptions in ``restart_config`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``restart_policy`` オプションã€``restart_policy_attempts`` オプションã€``restart_policy_delay`` オプションã€ãŠã‚ˆã³ ``restart_policy_window`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``restart_config`` ã§å¯¾å¿œã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:352 #: ../../rst/porting_guides/porting_guide_3.rst:462 msgid "docker_swarm_service - the ``update_delay``, ``update_parallelism``, ``update_failure_action``, ``update_monitor``, ``update_max_failure_ratio`` and ``update_order`` options has been removed. Use the corresponding suboptions in ``update_config`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_swarm_service - ``update_delay`` オプションã€``update_parallelism`` オプションã€``update_failure_action`` オプションã€``update_monitor``ã€``update_max_failure_ratio`` オプションã€ãŠã‚ˆã³ ``update_order`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``update_config`` ã§å¯¾å¿œã™ã‚‹ã‚µãƒ–オプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:353 #: ../../rst/porting_guides/porting_guide_3.rst:463 msgid "docker_volume - no longer returns ``ansible_facts`` (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_volume - ``ansible_facts`` ãŒè¿”ã•れãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:354 #: ../../rst/porting_guides/porting_guide_3.rst:464 msgid "docker_volume - the ``force`` option has been removed. Use ``recreate`` instead (https://github.com/ansible-collections/community.docker/pull/1)." msgstr "docker_volume - ``force`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``recreate`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.docker/pull/1)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:362 #: ../../rst/porting_guides/porting_guide_3.rst:612 msgid "django_manage - the parameter ``liveserver`` relates to a no longer maintained third-party module for django. It is now deprecated, and will be remove in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/1154)." msgstr "django_manage - パラメーター ``liveserver`` ã¯ã€django ã®ç¶­æŒã•れã¦ã„るサードパーティーモジュールã«é–¢é€£ã—ãªããªã‚Šã¾ã—ãŸã€‚ç¾åœ¨ã¯éžæŽ¨å¥¨ã«ãªã‚Šã€community.general 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/1154)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:363 #: ../../rst/porting_guides/porting_guide_3.rst:613 msgid "proxmox - the default of the new ``proxmox_default_behavior`` option will change from ``compatibility`` to ``no_defaults`` in community.general 4.0.0. Set the option to an explicit value to avoid a deprecation warning (https://github.com/ansible-collections/community.general/pull/850)." msgstr "proxmox - æ–°ã—ã„ ``proxmox_default_behavior`` オプションã®ãƒ‡ãƒ•ォルト㌠community.general 4.0.0 ã§ ``compatibility`` ã‹ã‚‰ ``no_defaults`` ã«å¤‰æ›´ã—ã¾ã™ã€‚éžæŽ¨å¥¨ã®è­¦å‘Šã‚’防ããŸã‚ã«ã€ã‚ªãƒ—ションを明示的ãªå€¤ã«è¨­å®šã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/850))。" #: ../../rst/porting_guides/porting_guide_2.10.rst:364 #: ../../rst/porting_guides/porting_guide_3.rst:614 msgid "proxmox_kvm - the default of the new ``proxmox_default_behavior`` option will change from ``compatibility`` to ``no_defaults`` in community.general 4.0.0. Set the option to an explicit value to avoid a deprecation warning (https://github.com/ansible-collections/community.general/pull/850)." msgstr "proxmox_kvm - æ–°ã—ã„ ``proxmox_default_behavior`` オプションã®ãƒ‡ãƒ•ォルト㌠community.general 4.0.0 ã§ ``compatibility`` ã‹ã‚‰ ``no_defaults`` ã«å¤‰æ›´ã•れã¾ã™ã€‚éžæŽ¨å¥¨ã®è­¦å‘Šã‚’防ããŸã‚ã«ã€ã‚ªãƒ—ションを明示的ãªå€¤ã«è¨­å®šã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/850)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:365 #: ../../rst/porting_guides/porting_guide_3.rst:615 msgid "syspatch - deprecate the redundant ``apply`` argument (https://github.com/ansible-collections/community.general/pull/360)." msgstr "syspatch - 冗長㪠``apply`` å¼•æ•°ã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/360)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:370 #: ../../rst/porting_guides/porting_guide_3.rst:631 msgid "Deprecate connection=local support for network platforms using persistent framework (https://github.com/ansible-collections/community.network/pull/120)." msgstr "永続的ãªãƒ•レームワークを使用ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム㮠connection=local サãƒãƒ¼ãƒˆã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.network/pull/120)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:373 msgid "Porting Guide for v2.10.2" msgstr "v2.10.2 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:379 #: ../../rst/porting_guides/porting_guide_2.10.rst:616 #: ../../rst/porting_guides/porting_guide_2.10.rst:789 #: ../../rst/porting_guides/porting_guide_2.10.rst:856 #: ../../rst/porting_guides/porting_guide_3.rst:37 #: ../../rst/porting_guides/porting_guide_3.rst:208 msgid "Ansible-base" msgstr "Ansible-base" #: ../../rst/porting_guides/porting_guide_2.10.rst:381 #: ../../rst/porting_guides/porting_guide_3.rst:210 #: ../../rst/porting_guides/porting_guide_4.rst:435 msgid "ansible-galaxy login command has been removed (see https://github.com/ansible/ansible/issues/71560)" msgstr "ansible-galaxy login コマンドãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible/ansible/issues/71560) ã‚’å‚ç…§)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:389 #: ../../rst/porting_guides/porting_guide_3.rst:375 msgid "Add phone home Teem integration into all modules, functionality can be disabled by setting up F5_TEEM environment variable or no_f5_teem provider parameter" msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« phone home Teem çµ±åˆã‚’追加ã—ã¾ã™ã€‚F5_TEEM 環境変数ã¾ãŸã¯ no_f5_teem プロãƒã‚¤ãƒ€ãƒ¼ãƒ‘ラメーターを設定ã—ã¦æ©Ÿèƒ½ã‚’無効ã«ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:394 #: ../../rst/porting_guides/porting_guide_3.rst:417 msgid "cluster_upgrade - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/94)." msgstr "cluster_upgrade - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/94)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:395 #: ../../rst/porting_guides/porting_guide_3.rst:418 msgid "disaster_recovery - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/134)." msgstr "disaster_recovery - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/134)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:396 #: ../../rst/porting_guides/porting_guide_3.rst:419 msgid "engine_setup - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/69)." msgstr "engine_setup - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/69)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:397 #: ../../rst/porting_guides/porting_guide_3.rst:420 msgid "hosted_engine_setup - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/106)." msgstr "hosted_engine_setup - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/106)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:398 #: ../../rst/porting_guides/porting_guide_3.rst:421 msgid "image_template - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/95)." msgstr "image_template - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/95)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:399 #: ../../rst/porting_guides/porting_guide_3.rst:422 msgid "infra - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/92)." msgstr "infra - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/92)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:400 #: ../../rst/porting_guides/porting_guide_3.rst:423 msgid "manageiq - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/97)." msgstr "manageiq - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/97)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:401 #: ../../rst/porting_guides/porting_guide_3.rst:425 msgid "repositories - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/96)." msgstr "repositories - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/96)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:402 #: ../../rst/porting_guides/porting_guide_3.rst:426 msgid "shutdown_env - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/112)." msgstr "shutdown_env - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/112)" #: ../../rst/porting_guides/porting_guide_2.10.rst:403 #: ../../rst/porting_guides/porting_guide_3.rst:427 msgid "vm_infra - Migrate role (https://github.com/oVirt/ovirt-ansible-collection/pull/93)." msgstr "vm_infra - ロールを移行ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/93)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:411 #: ../../rst/porting_guides/porting_guide_3.rst:584 msgid "Removed arp_state parameter from the bigip_virtual_address module" msgstr "bigip_virtual_address モジュールã‹ã‚‰ arp_state パラメーターを削除ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:419 #: ../../rst/porting_guides/porting_guide_3.rst:593 msgid "Deprecated `nxos_interface_ospf` in favor of `nxos_ospf_interfaces` Resource Module." msgstr "`nxos_interface_ospf` ã‚’éžæŽ¨å¥¨ã«ã—ã€`nxos_ospf_interfaces` Resource Module ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:422 msgid "Porting Guide for v2.10.1" msgstr "v2.10.1 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:428 #: ../../rst/porting_guides/porting_guide_2.10.rst:664 #: ../../rst/porting_guides/porting_guide_3.rst:343 msgid "community.kubernetes" msgstr "community.kubernetes" #: ../../rst/porting_guides/porting_guide_2.10.rst:430 #: ../../rst/porting_guides/porting_guide_3.rst:345 msgid "k8s - Add support for template parameter (https://github.com/ansible-collections/community.kubernetes/pull/230)." msgstr "k8s - テンプレートパラメーターã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã™ (https://github.com/ansible-collections/community.kubernetes/pull/230)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:431 #: ../../rst/porting_guides/porting_guide_3.rst:346 msgid "k8s_* - Add support for vaulted kubeconfig and src (https://github.com/ansible-collections/community.kubernetes/pull/193)." msgstr "k8s_* - Vault 済㿠kubeconfig ãŠã‚ˆã³ src ã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã™ (https://github.com/ansible-collections/community.kubernetes/pull/193)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:439 #: ../../rst/porting_guides/porting_guide_3.rst:594 msgid "Deprecated `nxos_smu` in favor of `nxos_rpm` module." msgstr "`nxos_smu` ã‚’éžæŽ¨å¥¨ã«ã—ã€`nxos_rpm` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:440 #: ../../rst/porting_guides/porting_guide_3.rst:595 msgid "The `nxos_ospf_vrf` module is deprecated by `nxos_ospfv2` and `nxos_ospfv3` Resource Modules." msgstr "`nxos_ospf_vrf` モジュールã¯ã€`nxos_ospfv2` ãŠã‚ˆã³ `nxos_ospfv3` Resource Module ã«ã‚ˆã£ã¦éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:443 msgid "Porting Guide for v2.10.0" msgstr "v2.10.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.10.rst:446 #: ../../rst/porting_guides/porting_guide_3.rst:23 #: ../../rst/porting_guides/porting_guide_3.rst:92 #: ../../rst/porting_guides/porting_guide_3.rst:122 #: ../../rst/porting_guides/porting_guide_3.rst:195 #: ../../rst/porting_guides/porting_guide_4.rst:199 #: ../../rst/porting_guides/porting_guide_4.rst:257 #: ../../rst/porting_guides/porting_guide_4.rst:313 #: ../../rst/porting_guides/porting_guide_4.rst:405 msgid "Known Issues" msgstr "既知ã®å•題" #: ../../rst/porting_guides/porting_guide_2.10.rst:448 msgid "Due to a limitation in pip, you cannot ``pip install --upgrade`` from ansible-2.9 or earlier to ansible-2.10 or higher. Instead, you must explicitly use ``pip uninstall ansible`` before pip installing the new version. If you attempt to upgrade Ansible with pip without first uninstalling, the installer warns you to uninstall first." msgstr "pip ã®åˆ¶é™ã«ã‚ˆã‚Šã€ansible-2.9 以å‰ã‹ã‚‰ ansible-2.10 以é™ã«ã¯ ``pip install --upgrade`` を行ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。代ã‚りã«ã€pip ã§æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹å‰ã« ``pip uninstall ansible`` を明示的ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚最åˆã«ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã›ãšã« pip ã§ Ansible をアップグレードã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ãŒæœ€åˆã«ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’警告ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:449 #, python-format msgid "The individual collections that make up the ansible-2.10.0 package can be viewed independently. However, they are not currently listed by ansible-galaxy. To view these collections with ansible-galaxy, explicitly specify where ansible has installed the collections -- ``COLLECTION_INSTALL=$(python -c 'import ansible, os.path ; print(\"%s/../ansible_collections\" % os.path.dirname(ansible.__file__))') ansible-galaxy collection list -p \"$COLLECTION_INSTALL\"``." msgstr "ansible-2.10.0 パッケージを構æˆã™ã‚‹å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯å€‹åˆ¥ã«è¡¨ç¤ºã§ãã¾ã™ãŒã€ç¾åœ¨ ansible-galaxy ã«ã‚ˆã‚Šä¸€è¦§è¡¨ç¤ºã•れã¦ã„ã¾ã›ã‚“。ansible-galaxy ã§ã“れらã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’表示ã™ã‚‹ã«ã¯ã€ansible ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´æ‰€ã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã—ã¾ã™ã€‚``COLLECTION_INSTALL=$(python -c 'import ansible, os.path ; print(\"%s/../ansible_collections\" % os.path.dirname(ansible.__file__))') ansible-galaxy collection list -p \"$COLLECTION_INSTALL\"``" #: ../../rst/porting_guides/porting_guide_2.10.rst:450 msgid "These fortios modules are not automatically redirected from their 2.9.x names to the new 2.10.x names within collections. You must modify your playbooks to use fully qualified collection names for them. You can use the documentation (https://docs.ansible.com/ansible/2.10/collections/fortinet/fortios/) for the ``fortinet.fortios`` collection to determine what the fully qualified collection names are." msgstr "ã“れら㮠fortios モジュールã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å†…ã§ 2.9.x ã®åå‰ã‹ã‚‰æ–°ã—ã„ 2.10.x ã®åå‰ã«è‡ªå‹•çš„ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•れã¾ã›ã‚“。ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åを使用ã™ã‚‹ã‚ˆã†ã« Playbook を変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚完全修飾コレクションåã«ã¤ã„ã¦ã¯ã€``fortinet.fortios`` コレクションã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ (https://docs.ansible.com/ansible/2.10/collections/fortinet/fortios/)) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:452 msgid "fortios_address" msgstr "fortios_address" #: ../../rst/porting_guides/porting_guide_2.10.rst:453 msgid "fortios_config" msgstr "fortios_config" #: ../../rst/porting_guides/porting_guide_2.10.rst:454 msgid "fortios_firewall_DoS_policy" msgstr "fortios_firewall_DoS_policy" #: ../../rst/porting_guides/porting_guide_2.10.rst:455 msgid "fortios_firewall_DoS_policy6" msgstr "fortios_firewall_DoS_policy6" #: ../../rst/porting_guides/porting_guide_2.10.rst:456 msgid "fortios_ipv4_policy" msgstr "fortios_ipv4_policy" #: ../../rst/porting_guides/porting_guide_2.10.rst:457 msgid "fortios_switch_controller_802_1X_settings" msgstr "fortios_switch_controller_802_1X_settings" #: ../../rst/porting_guides/porting_guide_2.10.rst:458 msgid "fortios_switch_controller_security_policy_802_1X" msgstr "fortios_switch_controller_security_policy_802_1X" #: ../../rst/porting_guides/porting_guide_2.10.rst:459 msgid "fortios_system_firmware_upgrade" msgstr "fortios_system_firmware_upgrade" #: ../../rst/porting_guides/porting_guide_2.10.rst:460 msgid "fortios_system_nd_proxy" msgstr "fortios_system_nd_proxy" #: ../../rst/porting_guides/porting_guide_2.10.rst:461 msgid "fortios_webfilter" msgstr "fortios_webfilter" #: ../../rst/porting_guides/porting_guide_2.10.rst:464 #: ../../rst/porting_guides/porting_guide_2.10.rst:658 #: ../../rst/porting_guides/porting_guide_3.rst:134 #: ../../rst/porting_guides/porting_guide_4.rst:156 #: ../../rst/porting_guides/porting_guide_4.rst:533 msgid "community.grafana" msgstr "community.grafana" #: ../../rst/porting_guides/porting_guide_2.10.rst:466 msgid "grafana_datasource doesn't set password correctly (#113)" msgstr "grafana_datasource ã§ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ­£ã—ã設定ã•れãªã„ (#113)" #: ../../rst/porting_guides/porting_guide_2.10.rst:471 msgid "cisco.nxos.nxos_igmp_interface - no longer supports the deprecated ``oif_prefix`` and ``oif_source`` options. These have been superceeded by ``oif_ps``." msgstr "cisco.nxos.nxos_igmp_interface - éžæŽ¨å¥¨ã® ``oif_prefix`` オプションãŠã‚ˆã³ ``oif_source`` オプションをサãƒãƒ¼ãƒˆã—ãªããªã‚Šã¾ã—ãŸã€‚ã“れら㯠``oif_ps`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:472 msgid "community.grafana.grafana_dashboard - the parameter ``message`` is renamed to ``commit_message`` since ``message`` is used by Ansible Core engine internally." msgstr "community.grafana.grafana_dashboard - ``message`` ã¯å†…部的㫠Ansible Core Engine ã§ä½¿ç”¨ã•れるãŸã‚ã€ãƒ‘ラメーター ``message`` ã®åå‰ãŒ ``commit_message`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:473 msgid "purestorage.flashblade.purefb_fs - no longer supports the deprecated ``nfs`` option. This has been superceeded by ``nfsv3``." msgstr "purestorage.flashblade.purefb_fs - éžæŽ¨å¥¨ã® ``nfs`` オプションã«å¯¾å¿œã—ãªããªã‚Šã¾ã—ãŸã€‚ã“れ㯠``nfsv3`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:476 #: ../../rst/porting_guides/porting_guide_2.10.rst:627 #: ../../rst/porting_guides/porting_guide_2.10.rst:863 msgid "amazon.aws" msgstr "amazon.aws" #: ../../rst/porting_guides/porting_guide_2.10.rst:478 msgid "aws_s3 - can now delete versioned buckets even when they are not empty - set mode to delete to delete a versioned bucket and everything in it." msgstr "aws_s3 - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã•れãŸãƒã‚±ãƒƒãƒˆãŒç©ºã§ãªãã¦ã‚‚削除ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚モードを delete ã«è¨­å®šã™ã‚‹ã¨ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã•れãŸãƒã‚±ãƒƒãƒˆã¨ãã®ä¸­ã®ã‚‚ã®ãŒã™ã¹ã¦å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:481 #: ../../rst/porting_guides/porting_guide_2.10.rst:799 #: ../../rst/porting_guides/porting_guide_2.10.rst:882 #: ../../rst/porting_guides/porting_guide_4.rst:292 #: ../../rst/porting_guides/porting_guide_4.rst:358 #: ../../rst/porting_guides/porting_guide_4.rst:366 msgid "ansible.windows" msgstr "ansible.windows" #: ../../rst/porting_guides/porting_guide_2.10.rst:483 msgid "setup - Make sure ``ansible_date_time.epoch`` is seconds since EPOCH in UTC to mirror the POSIX facts. The ``ansible_date_time.epoch_local`` contains seconds since EPOCH in the local timezone for backwards compatibility" msgstr "setup - POSIX ãƒ•ã‚¡ã‚¯ãƒˆã‚’åæ˜ ã•ã›ã‚‹ãŸã‚ã«ã€``ansible_date_time.epoch`` ㌠UTC ã® EPOCH 以é™ã®ç§’æ•°ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚後方互æ›ã®ãŸã‚ã«ã€``ansible_date_time.epoch_local`` ã«ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã® EPOCH 以é™ã®ç§’æ•°ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:484 msgid "setup - Will now add the IPv6 scope on link local addresses for ``ansible_ip_addresses``" msgstr "setup - ``ansible_ip_addresses`` ã®ãƒªãƒ³ã‚¯ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã« IPv6 スコープを追加ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:485 msgid "setup - ``ansible_processor`` will now return the index before the other values to match the POSIX fact behaviour" msgstr "setup - ``ansible_processor`` ãŒã€POSIX ファクトã®å‹•作ã«ä¸€è‡´ã™ã‚‹ãŸã‚ã«ä»–ã®å€¤ã®å‰ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:486 msgid "win_find - No longer filters by size on directories, this feature had a lot of bugs, slowed down the module, and not a supported scenario with the ``find`` module." msgstr "win_find - ディレクトリーã«ãŠã„ã¦ã‚µã‚¤ã‚ºã§ãƒ•ィルターãŒè¨­å®šã•れるよã†ã«ãªã‚Šã€ã“ã®æ©Ÿèƒ½ã¯ãƒã‚°ãŒå¤šããªã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é€Ÿåº¦ãŒä½Žä¸‹ã—ã€``find`` モジュールã§ã®å¯¾å¿œã‚·ãƒŠãƒªã‚ªã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:489 msgid "win_find - module has been refactored to better match the behaviour of the ``find`` module. Here is what has changed:" msgstr "win_find - モジュールã¯ã€``find`` モジュールã®å‹•作ã«åˆã‚ã›ã¦ãƒªãƒ•ァクタリングã•れã¾ã—ãŸã€‚ã“れãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸ:" #: ../../rst/porting_guides/porting_guide_2.10.rst:488 msgid "When the directory specified by ``paths`` does not exist or is a file, it will no longer fail and will just warn the user" msgstr "``paths`` ã§æŒ‡å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå­˜åœ¨ã—ãªã„ã‹ã€ãƒ•ァイルã§ã‚ã‚‹ã¨ã€å¤±æ•—ã—ãªããªã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:489 msgid "Junction points are no longer reported as ``islnk``, use ``isjunction`` to properly report these files. This behaviour matches the win_stat module" msgstr "ジャンクションãƒã‚¤ãƒ³ãƒˆã¯ ``islnk`` ã¨ã—ã¦å ±å‘Šã•れãªããªã‚Šã¾ã—ãŸã€‚ã“れらã®ãƒ•ァイルを正ã—ã報告ã™ã‚‹ã«ã¯ ``isjunction`` を使用ã—ã¦ãã ã•ã„。ã“ã®å‹•作㯠win_stat モジュールã¨ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:490 msgid "Directories no longer return a ``size``, this matches the ``stat`` and ``find`` behaviour and has been removed due to the difficulties in correctly reporting the size of a directory" msgstr "ディレクトリー㌠``size`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚ã“れ㯠``stat`` ãŠã‚ˆã³ ``find`` ã®å‹•作ã¨ä¸€è‡´ã—ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ã‚µã‚¤ã‚ºã‚’æ­£ã—ã報告ã™ã‚‹ã“ã¨ãŒå›°é›£ã§ã‚ã‚‹ãŸã‚ã€å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:491 msgid "win_user - Change idempotency checks for ``description`` to be case sensitive" msgstr "win_user - 大文字ã¨å°æ–‡å­—を区別ã™ã‚‹ãŸã‚ã« ``description`` ã®å†ªç­‰æ€§ãƒã‚§ãƒƒã‚¯ã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:492 msgid "win_user - Change idempotency checks for ``fullname`` to be case sensitive" msgstr "win_user - 大文字ã¨å°æ–‡å­—を区別ã™ã‚‹ãŸã‚ã« ``fullname`` ã®å†ªç­‰æ€§ãƒã‚§ãƒƒã‚¯ã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:495 #: ../../rst/porting_guides/porting_guide_2.10.rst:642 msgid "cisco.meraki" msgstr "cisco.meraki" #: ../../rst/porting_guides/porting_guide_2.10.rst:497 msgid "meraki_device - Changed tags from string to list" msgstr "meraki_device - 文字列ã‹ã‚‰ãƒªã‚¹ãƒˆã«ã‚¿ã‚°ã‚’変更ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:498 msgid "meraki_device - Removed serial_lldp_cdp parameter" msgstr "meraki_device - serial_lldp_cdp パラメーターを削除ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:499 msgid "meraki_device - Removed serial_uplink parameter" msgstr "meraki_device - serial_uplink パラメーターを削除ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:500 msgid "meraki_intrusion_prevention - Rename whitedlisted_rules to allowed_rules" msgstr "meraki_intrusion_prevention - whitedlisted_rules ã®åå‰ã‚’ allowed_rules ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:501 msgid "meraki_mx_l3_firewall - Rule responses are now in a `rules` list" msgstr "meraki_mx_l3_firewall - ルール応答㌠`rules` リストã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:502 msgid "meraki_mx_l7_firewall - Rename blacklisted_countries to blocked_countries" msgstr "meraki_mx_l7_firewall - blocked_countries ã®åå‰ã‚’ blacklisted_countries ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:503 msgid "meraki_mx_l7_firewall - Rename whitelisted_countries to allowed_countries" msgstr "meraki_mx_l7_firewall - whitelisted_countries ã®åå‰ã‚’ allowed_countries ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:504 msgid "meraki_network - Local and remote status page settings cannot be set during network creation" msgstr "meraki_network - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ä½œæˆæ™‚ã«ãƒ­ãƒ¼ã‚«ãƒ«ãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒšãƒ¼ã‚¸è¨­å®šã‚’設定ã§ãã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:505 msgid "meraki_network - `disableRemoteStatusPage` response is now `remote_status_page_enabled`" msgstr "meraki_network - `disableRemoteStatusPage` ã®å¿œç­”㌠`remote_status_page_enabled` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:506 msgid "meraki_network - `disable_my_meraki_com` response is now `local_status_page_enabled`" msgstr "meraki_network - `disable_my_meraki_com` ã®å¿œç­”㌠`local_status_page_enabled` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:507 msgid "meraki_network - `disable_my_meraki` has been deprecated" msgstr "meraki_network - `disable_my_meraki` ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:508 msgid "meraki_network - `enable_my_meraki` is now called `local_status_page_enabled`" msgstr "meraki_network - `enable_my_meraki` ㌠`local_status_page_enabled` ã¨å‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:509 msgid "meraki_network - `enable_remote_status_page` is now called `remote_status_page_enabled`" msgstr "meraki_network - `enable_remote_status_page` ㌠`remote_status_page_enabled` ã¨å‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:510 msgid "meraki_network - `enabled` response for VLAN status is now `vlans_enabled`" msgstr "meraki_network - VLAN ステータスã«å¯¾ã™ã‚‹ `enabled` 応答㌠`vlans_enabled` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:511 msgid "meraki_network - `tags` and `type` now return a list" msgstr "meraki_network - `tags` ãŠã‚ˆã³ `type` ãŒä¸€è¦§ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:512 msgid "meraki_snmp - peer_ips is now a list" msgstr "meraki_snmp - peer_ips ãŒãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:513 msgid "meraki_switchport - `access_policy_number` is now an int and not a string" msgstr "meraki_switchport - `access_policy_number` ã¯æ–‡å­—列型ã§ã¯ãªã int åž‹ã«ãªã‚Šã¾ã—ãŸ" #: ../../rst/porting_guides/porting_guide_2.10.rst:514 msgid "meraki_switchport - `tags` is now a list and not a string" msgstr "meraki_switchport - `tags` ãŒæ–‡å­—列型ã§ã¯ãªãリスト型ã«ãªã‚Šã¾ã—ãŸ" #: ../../rst/porting_guides/porting_guide_2.10.rst:515 msgid "meraki_webhook - Querying test status now uses state of query." msgstr "meraki_webhook - テストステータスã®ã‚¯ã‚¨ãƒªãƒ¼ã¯ã‚¯ã‚¨ãƒªãƒ¼çŠ¶æ…‹ã‚’ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:520 msgid "The environment variable for the auth context for the oc.py connection plugin has been corrected (K8S_CONTEXT). It was using an initial lowercase k by mistake. (https://github.com/ansible-collections/community.general/pull/377)." msgstr "oc.py 接続プラグインã®èªè¨¼ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®ç’°å¢ƒå¤‰æ•° (K8S_CONTEXT) ãŒä¿®æ­£ã•れã¾ã—ãŸã€‚ã“れã¯ã€æœ€åˆã®å°æ–‡å­—ã® k ã‚’é–“é•ã£ã¦ä½¿ç”¨ã—ã¦ã„ã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/377)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:521 msgid "bigpanda - the parameter ``message`` was renamed to ``deployment_message`` since ``message`` is used by Ansible Core engine internally." msgstr "bigpanda - ``message`` 㯠Ansible Core Engine ã§å†…部的ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒ‘ラメーター ``message`` 㯠``deployment_message`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:522 msgid "cisco_spark - the module option ``message`` was renamed to ``msg``, as ``message`` is used internally in Ansible Core engine (https://github.com/ansible/ansible/issues/39295)" msgstr "cisco_spark - Ansible Core エンジン㧠``message`` ãŒå†…部ã§ä½¿ç”¨ã•れるãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ション ``message`` ã®åå‰ãŒ ``msg`` ã«å¤‰æ›´ã•れã¾ã—㟠(https://github.com/ansible/ansible/issues/39295)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:523 msgid "datadog - the parameter ``message`` was renamed to ``notification_message`` since ``message`` is used by Ansible Core engine internally." msgstr "datadog - ``message`` 㯠Ansible Core Engine ã§å†…部的ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ãŸã‚ã€ãƒ‘ラメーターã®åå‰ ``message`` 㯠``notification_message`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:524 msgid "docker_container - no longer passes information on non-anonymous volumes or binds as ``Volumes`` to the Docker daemon. This increases compatibility with the ``docker`` CLI program. Note that if you specify ``volumes: strict`` in ``comparisons``, this could cause existing containers created with docker_container from Ansible 2.9 or earlier to restart." msgstr "docker_container - 匿åã§ãªã„ãƒœãƒªãƒ¥ãƒ¼ãƒ ã®æƒ…報や ``Volumes`` ã¨ã—ã¦ã®ãƒã‚¤ãƒ³ãƒ‰ã‚’ Docker ãƒ‡ãƒ¼ãƒ¢ãƒ³ã«æ¸¡ã•ãªããªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€``docker`` CLI プログラムã¨ã®äº’æ›æ€§ãŒé«˜ã¾ã‚Šã¾ã—ãŸã€‚ãªãŠã€``comparisons`` ã«``volumes: strict`` を指定ã™ã‚‹ã¨ã€Ansible 2.9 以å‰ã® docker_container ã§ä½œæˆã•ã‚ŒãŸæ—¢å­˜ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ãŒå†èµ·å‹•ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:525 msgid "docker_container - support for port ranges was adjusted to be more compatible to the ``docker`` command line utility: a one-port container range combined with a multiple-port host range will no longer result in only the first host port be used, but the whole range being passed to Docker so that a free port in that range will be used." msgstr "docker_container - ãƒãƒ¼ãƒˆç¯„囲ã®ã‚µãƒãƒ¼ãƒˆã¯ã€``docker`` コマンドラインユーティリティーã¨ã®äº’æ›æ€§ã‚’高ã‚ã‚‹ãŸã‚ã«èª¿æ•´ã•れã¾ã—ãŸã€‚1 ãƒãƒ¼ãƒˆã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ç¯„囲ã¨è¤‡æ•°ãƒãƒ¼ãƒˆã®ãƒ›ã‚¹ãƒˆç¯„囲を組ã¿åˆã‚ã›ãŸå ´åˆã¯ã€æœ€åˆã®ãƒ›ã‚¹ãƒˆãƒãƒ¼ãƒˆã®ã¿ãŒä½¿ç”¨ã•れるã“ã¨ã¯ãªããªã‚Šã€ç¯„囲全体㌠Docker ã«æ¸¡ã•れã€ãã®ç¯„囲内ã®ç©ºããƒãƒ¼ãƒˆãŒä½¿ç”¨ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:526 msgid "hashi_vault lookup - now returns the latest version when using the KV v2 secrets engine. Previously, it returned all versions of the secret which required additional steps to extract and filter the desired version." msgstr "hashi_vault lookup - KV v2 シークレットエンジンを使用ã™ã‚‹éš›ã«ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¾ã§ã¯ã€ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãŒè¿”ã•れã¦ã„ãŸãŸã‚ã€ç›®çš„ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’抽出ã—ã¦ãƒ•ィルタリングã™ã‚‹ãŸã‚ã®è¿½åŠ æ‰‹é †ãŒå¿…è¦ã§ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:527 #: ../../rst/porting_guides/porting_guide_3.rst:264 msgid "log_plays callback - add missing information to the logs generated by the callback plugin. This changes the log message format (https://github.com/ansible-collections/community.general/pull/442)." msgstr "log_plays callback - callback プラグインã§ç”Ÿæˆã•れãŸãƒ­ã‚°ã«ä¸è¶³ã—ã¦ã„る情報を追加ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å½¢å¼ãŒå¤‰æ›´ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/442)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:528 #: ../../rst/porting_guides/porting_guide_3.rst:266 msgid "pkgng - passing ``name: *`` with ``state: absent`` will no longer remove every installed package from the system. It is now a noop. (https://github.com/ansible-collections/community.general/pull/569)." msgstr "pkgng - ``name: *`` ã« ``state: absent`` を渡ã™ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ¸ˆã¿ãƒ‘ッケージãŒã™ã¹ã¦ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰å‰Šé™¤ã•れãªããªã‚Šã€noop ã«ãªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/569)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:529 #: ../../rst/porting_guides/porting_guide_3.rst:267 msgid "pkgng - passing ``name: *`` with ``state: latest`` or ``state: present`` will no longer install every package from the configured package repositories. Instead, ``name: *, state: latest`` will upgrade all already-installed packages, and ``name: *, state: present`` is a noop. (https://github.com/ansible-collections/community.general/pull/569)." msgstr "pkgng - ``name: *`` ã« ``state: latest`` ã¾ãŸã¯``state: present`` を渡ã™ã¨ã€è¨­å®šã•れãŸãƒ‘ッケージリãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã™ã¹ã¦ã®ãƒ‘ッケージをインストールã—ãªããªã‚Šã¾ã™ã€‚代ã‚りã«ã€``name: *, state: latest`` ã¯æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るパッケージをã™ã¹ã¦ã‚¢ãƒƒãƒ—グレードã—ã€``name: *, state: present`` 㯠noop ã§ã™ (https://github.com/ansible-collections/community.general/pull/569)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:534 msgid "routeros_facts - allow multiple addresses and neighbors per interface. This makes ``ansible_net_neighbors`` a list instead of a dict (https://github.com/ansible-collections/community.network/pull/6)." msgstr "routeros_facts - インターフェースã”ã¨ã«è¤‡æ•°ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨è¿‘接アドレスを許å¯ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€``ansible_net_neighbors`` ㌠dict ã§ã¯ãªã list ã«ãªã‚Šã¾ã™ (https://github.com/ansible-collections/community.network/pull/6)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:539 msgid "vmware_datastore_maintenancemode - now returns ``datastore_status`` instead of Ansible internal key ``results``." msgstr "vmware_datastore_maintenancemode - Ansible 内部キー ``results`` ã®ä»£ã‚り㫠``datastore_status`` ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:540 msgid "vmware_guest_custom_attributes - does not require VM name which was a required parameter for releases prior to Ansible 2.10." msgstr "vmware_guest_custom_attributes - Ansible 2.10 よりå‰ã®ãƒªãƒªãƒ¼ã‚¹ã§å¿…é ˆã ã£ãŸãƒ‘ラメーターã§ã‚る仮想マシンåã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:541 msgid "vmware_guest_find - the ``datacenter`` option has been removed." msgstr "vmware_guest_find - ``datacenter`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:542 msgid "vmware_host_kernel_manager - now returns ``host_kernel_status`` instead of Ansible internal key ``results``." msgstr "vmware_host_kernel_manager - Ansible 内部キー ``results`` ã®ä»£ã‚り㫠``host_kernel_status`` ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:543 msgid "vmware_host_ntp - now returns ``host_ntp_status`` instead of Ansible internal key ``results``." msgstr "vmware_host_ntp - Ansible 内部キー ``results`` ã®ä»£ã‚り㫠``host_ntp_status`` ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:544 msgid "vmware_host_service_manager - now returns ``host_service_status`` instead of Ansible internal key ``results``." msgstr "vmware_host_service_manager - Ansible 内部キー ``results`` ã®ä»£ã‚り㫠``host_service_status`` ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:545 msgid "vmware_tag - now returns ``tag_status`` instead of Ansible internal key ``results``." msgstr "vmware_tag - Ansible 内部キー ``results`` ã®ä»£ã‚り㫠``tag_status`` ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:546 msgid "vmware_vmkernel - the options ``ip_address`` and ``subnet_mask`` have been removed; use the suboptions ``ip_address`` and ``subnet_mask`` of the ``network`` option instead." msgstr "vmware_vmkernel - ``ip_address`` オプションãŠã‚ˆã³ ``subnet_mask`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``network`` オプションã®ã‚µãƒ–オプション ``ip_address`` ãŠã‚ˆã³ ``subnet_mask`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:549 #: ../../rst/porting_guides/porting_guide_2.10.rst:835 msgid "community.windows" msgstr "community.windows" #: ../../rst/porting_guides/porting_guide_2.10.rst:551 msgid "win_pester - no longer runs all ``*.ps1`` file in the directory specified due to it executing potentially unknown scripts. It will follow the default behaviour of only running tests for files that are like ``*.tests.ps1`` which is built into Pester itself." msgstr "win_pester - 未知ã®ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æŒ‡å®šã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã® ``*.ps1`` ファイルを実行ã—ãªããªã‚Šã¾ã—ãŸã€‚Pester 自体ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ ``*.tests.ps1`` ã®ã‚ˆã†ãªãƒ•ァイルã«å¯¾ã—ã¦ã®ã¿ãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã¨ã„ã†ãƒ‡ãƒ•ォルトã®å‹•作ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:554 #: ../../rst/porting_guides/porting_guide_2.10.rst:953 msgid "community.zabbix" msgstr "community.zabbix" #: ../../rst/porting_guides/porting_guide_2.10.rst:556 msgid "zabbix_javagateway - options ``javagateway_pidfile``, ``javagateway_listenip``, ``javagateway_listenport`` and ``javagateway_startpollers`` renamed to ``zabbix_javagateway_xyz`` (see `UPGRADE.md `_)." msgstr "zabbix_javagateway - ``javagateway_pidfile`` オプションã€``javagateway_listenip`` オプションã€``javagateway_listenport``ã€ãŠã‚ˆã³ ``javagateway_startpollers`` オプションã®åå‰ãŒ ``zabbix_javagateway_xyz`` ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ (`UPGRADE.md `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:561 msgid "Change ``ip-addresses`` key in netbox inventory plugin to ``ip_addresses`` (https://github.com/netbox-community/ansible_modules/issues/139)" msgstr "netbox インベントリープラグイン㮠``ip-addresses`` キーを ``ip_addresses`` ã«å¤‰æ›´ã—ã¾ã™ (https://github.com/netbox-community/ansible_modules/issues/139)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:562 msgid "Changed ``group`` to ``tenant_group`` in ``netbox_tenant.py`` (https://github.com/netbox-community/ansible_modules/issues/9)" msgstr "``netbox_tenant.py`` ã® ``group`` ã‚’ ``tenant_group`` ã¸å¤‰æ›´ã—ã¾ã—㟠(https://github.com/netbox-community/ansible_modules/issues/9)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:563 msgid "Changed ``role`` to ``prefix_role`` in ``netbox_prefix.py`` (https://github.com/netbox-community/ansible_modules/issues/9)" msgstr "``netbox_prefix.py`` ã® ``role`` ã‚’ ``prefix_role`` ã¸å¤‰æ›´ã—ã¾ã—㟠(https://github.com/netbox-community/ansible_modules/issues/9)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:564 msgid "Module failures when required fields arent provided (https://github.com/netbox-community/ansible_modules/issues/24)" msgstr "å¿…é ˆãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒæä¾›ã•れã¦ã„ãªã„å ´åˆã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¤±æ•— (https://github.com/netbox-community/ansible_modules/issues/24)" #: ../../rst/porting_guides/porting_guide_2.10.rst:565 msgid "Renamed ``netbox_interface`` to ``netbox_device_interface`` (https://github.com/netbox-community/ansible_modules/issues/9)" msgstr "``netbox_interface`` ã®åå‰ãŒ ``netbox_device_interface`` ã«å¤‰æ›´ (https://github.com/netbox-community/ansible_modules/issues/9)" #: ../../rst/porting_guides/porting_guide_2.10.rst:566 msgid "This version has a few breaking changes due to new namespace and collection name. I felt it necessary to change the name of the lookup plugin and inventory plugin just not to have a non descriptive namespace call to use them. Below is an example: ``netbox.netbox.netbox`` would be used for both inventory plugin and lookup plugin, but in different contexts so no collision will arise, but confusion will. I renamed the lookup plugin to ``nb_lookup`` so it will be used with the FQCN ``netbox.netbox.nb_lookup``. The inventory plugin will now be called within an inventory file by ``netbox.netbox.nb_inventory``" msgstr "ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€æ–°ã—ã„åå‰ç©ºé–“ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã®ãŸã‚ã«ã„ãã¤ã‹ã®é‡å¤§ãªå¤‰æ›´ãŒã‚りã¾ã™ã€‚lookup プラグイン㨠inventory プラグインã®åå‰ã‚’変更ã—ã¦ã€ãれを使用ã™ã‚‹ãŸã‚ã®éžè¨˜è¿°çš„ãªåå‰ç©ºé–“呼ã³å‡ºã—を行ã‚ãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨æ„Ÿã˜ã¾ã—ãŸã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚inventory プラグイン㨠lookup プラグインã®ä¸¡æ–¹ã« ``netbox.netbox.netbox`` ãŒä½¿ç”¨ã•れã¾ã™ãŒã€ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãŒç•°ãªã‚‹ãŸã‚ã€è¡çªã¯ç™ºç”Ÿã—ã¾ã›ã‚“ãŒã€æ··ä¹±ãŒç™ºç”Ÿã—ã¾ã™ã€‚lookup プラグインã®åå‰ã‚’ ``nb_lookup`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ãã®ãŸã‚ã€FQCN ``netbox.netbox.nb_lookup`` ã§ä½¿ç”¨ã•れã¾ã™ã€‚インベントリープラグインã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル内㧠``netbox.netbox.nb_inventory`` ã«ã‚ˆã‚Šå‘¼ã³å‡ºã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:570 msgid "To pass in integers via Ansible Jinja filters for a key in ``data`` that requires querying an endpoint is now done by making it a dictionary with an ``id`` key. The previous behavior was to just pass in an integer and it was converted when normalizing the data, but some people may have names that are all integers and those were being converted erroneously so we made the decision to change the method to convert to an integer for the NetBox API." msgstr "エンドãƒã‚¤ãƒ³ãƒˆã¸ã®å•ã„åˆã‚ã›ãŒå¿…è¦ãª ``data`` ã®ã‚­ãƒ¼ã«å¯¾ã—ã¦ã€Ansible Jinja ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã§æ•´æ•°ã‚’渡ã™ãŸã‚ã«ã¯ã€``id`` キーをæŒã¤ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«ã™ã‚‹ã“ã¨ã§è¡Œã†ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¾ã§ã®å‹•作ã§ã¯ã€æ•´æ•°ã‚’渡ã™ã ã‘ã§ãƒ‡ãƒ¼ã‚¿ã®æ­£è¦åŒ–時ã«å¤‰æ›ã•れã¦ã„ã¾ã—ãŸãŒã€äººã«ã‚ˆã£ã¦ã¯åå‰ãŒã™ã¹ã¦æ•´æ•°ã§ã‚ã‚‹å ´åˆãŒã‚りã€ãれらãŒèª¤ã£ã¦å¤‰æ›ã•れã¦ã„ãŸãŸã‚ã€NetBox API ã§ã¯æ•´æ•°ã«å¤‰æ›ã™ã‚‹æ–¹æ³•ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:593 msgid "``pynetbox`` changed to using ``requests.Session()`` to manage the HTTP session which broke passing in ``ssl_verify`` when building the NetBox API client. This PR makes ``pynetbox 5.0.4+`` the new required version of `pynetbox` for the Ansible modules and lookup plugin. (https://github.com/netbox-community/ansible_modules/pull/269)" msgstr "``pynetbox`` ã¯ã€NetBox API クライアントを構築ã™ã‚‹éš›ã« ``ssl_verify`` を渡ã™ã“ã¨ãŒã§ããªããªã£ãŸãŸã‚ã€HTTP セッションã®ç®¡ç†ã« ``requests.Session()`` を使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“ã® PR ã«ã‚ˆã‚Šã€``pynetbox 5.0.4+`` ã¯ã€Ansible モジュール㨠lookup プラグインã«å¿…è¦ãª `pynetbox` ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ãªã‚Šã¾ã—㟠(https://github.com/netbox-community/ansible_modules/pull/269)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:599 #: ../../rst/porting_guides/porting_guide_4.rst:474 msgid "theforeman.foreman" msgstr "theforeman.foreman" #: ../../rst/porting_guides/porting_guide_2.10.rst:601 msgid "All modules were renamed to drop the ``foreman_`` and ``katello_`` prefixes. Additionally to the prefix removal, the following modules were further ranamed:" msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ãŒ ``foreman_`` 接頭辞ãŠã‚ˆã³ ``katello_`` 接頭辞を削除ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚接頭辞ã®å‰Šé™¤ä»¥å¤–ã«ã€ä»¥ä¸‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ãŒã•らã«ç„¡è¦–ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:604 msgid "katello_upload to content_upload" msgstr "katello_upload ã‹ã‚‰ content_upload ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:605 msgid "katello_sync to repository_sync" msgstr "katello_sync ã‹ã‚‰ repository_sync ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:606 msgid "katello_manifest to subscription_manifest" msgstr "katello_manifest ã‹ã‚‰ subscription_manifest ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:607 msgid "foreman_search_facts to resource_info" msgstr "foreman_search_facts ã‹ã‚‰ resource_info ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:608 msgid "foreman_ptable to partition_table" msgstr "foreman_ptable ã‹ã‚‰ partition_table ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:609 msgid "foreman_model to hardware_model" msgstr "foreman_model ã‹ã‚‰ hardware_model ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:610 msgid "foreman_environment to puppet_environment" msgstr "foreman_environment ã‹ã‚‰ puppet_environment ã¸" #: ../../rst/porting_guides/porting_guide_2.10.rst:618 msgid "Both ansible-doc and ansible-console's help command will error for modules and plugins whose return documentation cannot be parsed as YAML. All modules and plugins passing ``ansible-test sanity --test yamllint`` will not be affected by this." msgstr "ansible-doc 㨠ansible-console ã® help コマンドã®ä¸¡æ–¹ãŒã€ãƒªã‚¿ãƒ¼ãƒ³ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒ YAML ã¨ã—ã¦è§£æžã§ããªã„モジュールã¨ãƒ—ラグインã«å¯¾ã—ã¦ã‚¨ãƒ©ãƒ¼ã‚’出ã—ã¾ã™ã€‚``ansible-test sanity --test yamllint`` を通éŽã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインã¯ã€ã“ã®å½±éŸ¿ã‚’å—ã‘ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:619 msgid "Collections may declare a list of supported/tested Ansible versions for the collection. A warning is issued if a collection does not support the Ansible version that loads it (can also be configured as silent or a fatal error). Collections that do not declare supported Ansible versions do not issue a warning/error." msgstr "コレクションã¯ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ã‚µãƒãƒ¼ãƒˆ/テストã•れã¦ã„ã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªã‚¹ãƒˆã‚’宣言ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクションãŒã€ãれを読ã¿è¾¼ã‚€ Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å ´åˆã¯ã€è­¦å‘ŠãŒç™ºè¡Œã•れã¾ã™ (サイレントã¾ãŸã¯è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™)。サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’宣言ã—ã¦ã„ãªã„コレクションã¯ã€è­¦å‘Š/エラーを発行ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:620 msgid "Plugin routing allows collections to declare deprecation, redirection targets, and removals for all plugin types." msgstr "プラグインルーティングã«ã‚ˆã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã™ã¹ã¦ã®ãƒ—ラグインタイプã®éžæŽ¨å¥¨ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆã€ãŠã‚ˆã³å‰Šé™¤ã‚’宣言ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:621 msgid "Plugins that import module_utils and other ansible namespaces that have moved to collections should continue to work unmodified." msgstr "コレクションã«ç§»å‹•ã—㟠module_utils ãŠã‚ˆã³ãã®ä»–ã® Ansible åå‰ç©ºé–“をインãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラグインã¯ã€å¤‰æ›´ã›ãšã«å‹•作ã—ç¶šã‘ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:622 msgid "Routing data built into Ansible 2.10 ensures that 2.9 content should work unmodified on 2.10. Formerly included modules and plugins that were moved to collections are still accessible by their original unqualified names, so long as their destination collections are installed." msgstr "Ansible 2.10 ã«çµ„ã¿è¾¼ã¾ã‚ŒãŸãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ‡ãƒ¼ã‚¿ã«ã‚ˆã‚Šã€2.9 ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㌠2.10 ã§å¤‰æ›´ãªã動作ã™ã‚‹ã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚コレクションã«ç§»å‹•ã—ãŸä»¥å‰ã«åŒæ¢±ã•れã¦ã„るモジュールやプラグインã¯ã€ç§»å‹•å…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹é™ã‚Šã€å…ƒã®æœªä¿®é£¾åã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:623 msgid "When deprecations are done in code, they to specify a ``collection_name`` so that deprecation warnings can mention which collection - or ansible-base - is deprecating a feature. This affects all ``Display.deprecated()`` or ``AnsibleModule.deprecate()`` or ``Ansible.Basic.Deprecate()`` calls, and ``removed_in_version``/``removed_at_date`` or ``deprecated_aliases`` in module argument specs." msgstr "コードã§éžæŽ¨å¥¨ã¨ãªã£ãŸå ´åˆã¯ã€éžæŽ¨å¥¨ã®è­¦å‘Šã§ã©ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (ã¾ãŸã¯ ansible-base) ãŒæ©Ÿèƒ½ã‚’éžæŽ¨å¥¨ã¨ã—ã¦ã„ã‚‹ã‹ã‚’言åŠã§ãるよã†ã«ã€``collection_name`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã® ``Display.deprecated()``ã€``AnsibleModule.deprecate()``ã€ã¾ãŸã¯``Ansible.Basic.Deprecate()`` ã®å‘¼ã³å‡ºã—ã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•数仕様㮠``removed_in_version``/``removed_at_date`` ã¾ãŸã¯ ``deprecated_aliases`` ã«å½±éŸ¿ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:624 msgid "ansible-test now uses a different ``default`` test container for Ansible Collections" msgstr "ansible-test ãŒã€Ansible Collections ã«ç•°ãªã‚‹ ``default`` テストコンテナーを使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:629 msgid "ec2 module_utils - The ``AWSRetry`` decorator no longer catches ``NotFound`` exceptions by default. ``NotFound`` exceptions need to be explicitly added using ``catch_extra_error_codes``. Some AWS modules may see an increase in transient failures due to AWS''s eventual consistency model." msgstr "ec2 module_utils - ``AWSRetry`` デコレーターã¯ã€ãƒ‡ãƒ•ォルト㧠``NotFound`` ã®ä¾‹å¤–をキャッãƒã—ãªããªã‚Šã¾ã—ãŸã€‚``NotFound`` ã®ä¾‹å¤–ã¯ã€``catch_extra_error_codes`` を使用ã—ã¦æ˜Žç¤ºçš„ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚一部㮠AWS モジュールã§ã¯ã€AWS ã®æœ€çµ‚çš„ãªä¸€è²«æ€§ãƒ¢ãƒ‡ãƒ«ã«ã‚ˆã‚Šã€ä¸€æ™‚çš„ãªéšœå®³ãŒå¢—加ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:632 #: ../../rst/porting_guides/porting_guide_2.10.rst:794 #: ../../rst/porting_guides/porting_guide_4.rst:180 #: ../../rst/porting_guides/porting_guide_4.rst:438 #: ../../rst/porting_guides/porting_guide_4.rst:498 #: ../../rst/porting_guides/porting_guide_4.rst:719 msgid "ansible.netcommon" msgstr "ansible.netcommon" #: ../../rst/porting_guides/porting_guide_2.10.rst:634 msgid "Add libssh connection plugin and refactor network_cli (https://github.com/ansible-collections/ansible.netcommon/pull/30)" msgstr "libssh 接続プラグインを追加ã—ã€refactor network_cli をリファクタリングã—ã¾ã™ (https://github.com/ansible-collections/ansible.netcommon/pull/30)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:637 msgid "ansible.posix" msgstr "ansible.posix" #: ../../rst/porting_guides/porting_guide_2.10.rst:639 msgid "Bootstrap Collection (https://github.com/ansible-collections/ansible.posix/pull/1)." msgstr "ブートストラップコレクション (https://github.com/ansible-collections/ansible.posix/pull/1)" #: ../../rst/porting_guides/porting_guide_2.10.rst:644 msgid "Rewrite requests method for version 1.0 API and improved readability" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.0 ã® API ã«åˆã‚ã›ã¦ requests ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æ›¸ãæ›ãˆã€èª­ã¿ã‚„ã™ã•ã‚’å‘上ã•ã›ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:645 msgid "meraki_mr_rf_profile - Configure wireless RF profiles." msgstr "meraki_mr_rf_profile - ワイヤレス RF プロファイルを設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:646 msgid "meraki_mr_settings - Configure network settings for wireless." msgstr "meraki_mr_settings - ワイヤレスã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚’æ§‹æˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:647 msgid "meraki_ms_l3_interface - New module" msgstr "meraki_ms_l3_interface - æ–°ã—ã„モジュール" #: ../../rst/porting_guides/porting_guide_2.10.rst:648 msgid "meraki_ms_ospf - Configure OSPF." msgstr "meraki_ms_ospf - OSPF を設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:653 msgid "docker_container - the ``network_mode`` option will be set by default to the name of the first network in ``networks`` if at least one network is given and ``networks_cli_compatible`` is ``true`` (will be default from community.general 2.0.0 on). Set to an explicit value to avoid deprecation warnings if you specify networks and set ``networks_cli_compatible`` to ``true``. The current default (not specifying it) is equivalent to the value ``default``." msgstr "docker_container -``network_mode`` オプションã¯ã€å°‘ãªãã¨ã‚‚ 1 ã¤ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒæŒ‡å®šã•れã€``networks_cli_compatible`` ãŒ``true`` ã§ã‚ã‚‹å ´åˆã¯ã€``networks`` ã®æœ€åˆã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®åå‰ãŒãƒ‡ãƒ•ォルトã§è¨­å®šã•れã¾ã™ (community.general 2.0.0 以é™ã¯ãƒ‡ãƒ•ォルトã«ãªã‚Šã¾ã™)。ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã—㦠``networks_cli_compatible`` ã‚’ ``true`` ã«è¨­å®šã—ãŸå ´åˆã®éžæŽ¨å¥¨è­¦å‘Šã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€æ˜Žç¤ºçš„ãªå€¤ã«è¨­å®šã—ã¾ã™ã€‚ç¾åœ¨ã®ãƒ‡ãƒ•ォルト (指定ãªã—) ã¯ã€``default`` ã®å€¤ã¨åŒç­‰ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:654 msgid "docker_container - the module has a new option, ``container_default_behavior``, whose default value will change from ``compatibility`` to ``no_defaults``. Set to an explicit value to avoid deprecation warnings." msgstr "docker_container - モジュールã«ã¯æ–°ã—ã„オプション ``container_default_behavior`` ãŒã‚りã€ãã®ãƒ‡ãƒ•ォルト値㯠``compatibility`` ã‹ã‚‰ ``no_defaults`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚éžæŽ¨å¥¨ã®è­¦å‘Šã‚’回é¿ã™ã‚‹ãŸã‚ã«æ˜Žç¤ºçš„ãªå€¤ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:655 msgid "gitlab_user - no longer requires ``name``, ``email`` and ``password`` arguments when ``state=absent``." msgstr "gitlab_user - ``state=absent`` ã®å ´åˆã« ``name`` 引数ã€``email`` 引数ã€ãŠã‚ˆã³ ``password`` 引数ãŒå¿…è¦ãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:660 msgid "Add changelog management for ansible 2.10 (#112)" msgstr "Ansible 2.10 ã® changelog 管ç†ã‚’追加 (#112)" #: ../../rst/porting_guides/porting_guide_2.10.rst:661 msgid "grafana_datasource ; adding additional_json_data param" msgstr "grafana_datasource - additional_json_data パラメーターã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_2.10.rst:666 msgid "Add changelog and fragments and document changelog process (https://github.com/ansible-collections/community.kubernetes/pull/131)." msgstr "変更ログãŠã‚ˆã³ãƒ•ラグメントを追加ã—ã€å¤‰æ›´ãƒ­ã‚°ãƒ—ロセスを文書化ã—ã¾ã™ (https://github.com/ansible-collections/community.kubernetes/pull/131)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:667 msgid "helm - New module for managing Helm charts (https://github.com/ansible-collections/community.kubernetes/pull/61)." msgstr "helm - Helm ãƒãƒ£ãƒ¼ãƒˆç®¡ç†ç”¨ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/community.kubernetes/pull/61)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:668 msgid "helm_info - New module for retrieving Helm chart information (https://github.com/ansible-collections/community.kubernetes/pull/61)." msgstr "helm_info - Helm ãƒãƒ£ãƒ¼ãƒˆæƒ…報をå–å¾—ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/community.kubernetes/pull/61)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:669 msgid "helm_plugin - new module to manage Helm plugins (https://github.com/ansible-collections/community.kubernetes/pull/154)." msgstr "helm_plugin - Helm プラグインを管ç†ã™ã‚‹æ–°ã—ã„モジュール (https://github.com/ansible-collections/community.kubernetes/pull/154)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:670 msgid "helm_plugin_info - new modules to gather information about Helm plugins (https://github.com/ansible-collections/community.kubernetes/pull/154)." msgstr "helm_plugin_info - Helm プラグインã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹æ–°ã—ã„モジュール (https://github.com/ansible-collections/community.kubernetes/pull/154)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:671 msgid "helm_repository - New module for managing Helm repositories (https://github.com/ansible-collections/community.kubernetes/pull/61)." msgstr "helm_repository - Helm リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’管ç†ã™ã‚‹ãŸã‚ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/community.kubernetes/pull/61)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:672 #: ../../rst/porting_guides/porting_guide_3.rst:389 msgid "k8s - Inventory source migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:673 #: ../../rst/porting_guides/porting_guide_3.rst:390 msgid "k8s - Lookup plugin migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ—ラグイン。" #: ../../rst/porting_guides/porting_guide_2.10.rst:674 #: ../../rst/porting_guides/porting_guide_3.rst:391 msgid "k8s - Module migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:675 #: ../../rst/porting_guides/porting_guide_3.rst:393 msgid "k8s_auth - Module migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s_auth - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:676 #: ../../rst/porting_guides/porting_guide_3.rst:394 msgid "k8s_config_resource_name - Filter plugin migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s_config_resource_name - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ—ラグインã«ãƒ•ィルターを設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:677 msgid "k8s_exec - New module for executing commands on pods via Kubernetes API (https://github.com/ansible-collections/community.kubernetes/pull/14)." msgstr "k8s_exec - Kubernetes API を使用ã—㦠Pod ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/community.kubernetes/pull/14)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:678 msgid "k8s_exec - Return rc for the command executed (https://github.com/ansible-collections/community.kubernetes/pull/158)." msgstr "k8s_exec - 実行ã—ãŸã‚³ãƒžãƒ³ãƒ‰ã® rc ã‚’è¿”ã—ã¾ã™ (https://github.com/ansible-collections/community.kubernetes/pull/158)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:679 #: ../../rst/porting_guides/porting_guide_3.rst:397 msgid "k8s_info - Module migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s_info - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:680 msgid "k8s_log - New module for retrieving pod logs (https://github.com/ansible-collections/community.kubernetes/pull/16)." msgstr "k8s_log - Pod ログをå–å¾—ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/community.kubernetes/pull/16)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:681 #: ../../rst/porting_guides/porting_guide_3.rst:399 msgid "k8s_scale - Module migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s_scale - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:682 #: ../../rst/porting_guides/porting_guide_3.rst:400 msgid "k8s_service - Module migrated from Ansible 2.9 to Kubernetes collection." msgstr "k8s_service - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:683 #: ../../rst/porting_guides/porting_guide_3.rst:401 msgid "kubectl - Connection plugin migrated from Ansible 2.9 to Kubernetes collection." msgstr "kubectl - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸæŽ¥ç¶šãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:684 #: ../../rst/porting_guides/porting_guide_3.rst:402 msgid "openshift - Inventory source migrated from Ansible 2.9 to Kubernetes collection." msgstr "openshift - Ansible 2.9 ã‹ã‚‰ Kubernetes コレクションã«ç§»è¡Œã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:687 msgid "community.libvirt" msgstr "community.libvirt" #: ../../rst/porting_guides/porting_guide_2.10.rst:689 msgid "added generic libvirt inventory plugin" msgstr "汎用 libvirt インベントリープラグインã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_2.10.rst:690 msgid "removed libvirt_lxc inventory script" msgstr "libvirt_lxc インベントリースクリプトを削除" #: ../../rst/porting_guides/porting_guide_2.10.rst:693 #: ../../rst/porting_guides/porting_guide_3.rst:309 #: ../../rst/porting_guides/porting_guide_3.rst:367 msgid "dellemc.os10" msgstr "dellemc.os10" #: ../../rst/porting_guides/porting_guide_2.10.rst:695 msgid "New role os10_aaa - Facilitates the configuration of Authentication Authorization and Accounting (AAA), TACACS and RADIUS server." msgstr "æ–°ã—ã„ロール os10_aaa - èªè¨¼æ‰¿èªãŠã‚ˆã³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ (AAA)ã€TACACS サーãƒãƒ¼ãŠã‚ˆã³ RADIUS サーãƒãƒ¼ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:696 msgid "New role os10_acl - Facilitates the configuration of Access Control lists." msgstr "æ–°ã—ã„ロール os10_acl - アクセス制御リストã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:697 msgid "New role os10_bfd - Facilitates the configuration of BFD global attributes." msgstr "æ–°ã—ã„ロール os10_bfd - BFD グローãƒãƒ«å±žæ€§ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:698 msgid "New role os10_bgp - Facilitates the configuration of border gateway protocol (BGP) attributes." msgstr "æ–°ã—ã„ロール os10_bgp - 境界線ゲートウェイプロトコル (BGP) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:699 msgid "New role os10_copy_config - This role pushes the backup running configuration into a OS10 device." msgstr "æ–°ã—ã„ロール os10_copy_config - ã“ã®ãƒ­ãƒ¼ãƒ«ã¯ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®å®Ÿè¡Œè¨­å®šã‚’ OS10 デãƒã‚¤ã‚¹ã«ãƒ—ッシュã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:700 msgid "New role os10_dns - Facilitates the configuration of domain name service (DNS)." msgstr "æ–°ã—ã„ロール os10_dns - ドメインãƒãƒ¼ãƒ ã‚µãƒ¼ãƒ“ス (DNS) ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:701 msgid "New role os10_ecmp - Facilitates the configuration of equal cost multi-path (ECMP) for IPv4." msgstr "æ–°ã—ã„ロール os10_ecmp - IPv4 用ã®åŒç­‰ã®ã‚³ã‚¹ãƒˆãƒžãƒ«ãƒãƒ‘ス (ECMP) ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:702 msgid "New role os10_fabric_summary Facilitates to get show system information of all the OS10 switches in the fabric." msgstr "æ–°ã—ã„ロール os10_fabric_summary - ファブリック内ã®ã™ã¹ã¦ã® OS10 スイッãƒã®ã‚·ã‚¹ãƒ†ãƒ æƒ…報を表示ã™ã‚‹ã®ã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:703 msgid "New role os10_flow_monitor Facilitates the configuration of ACL flow-based monitoring attributes." msgstr "æ–°ã—ã„ロール os10_flow_monitor - ACL フローベースã®ç›£è¦–属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:704 msgid "New role os10_image_upgrade Facilitates installation of OS10 software images." msgstr "æ–°ã—ã„ロール os10_image_upgrade - OS10 ソフトウェアイメージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:705 msgid "New role os10_interface Facilitates the configuration of interface attributes." msgstr "æ–°ã—ã„ロール os10_interface - インターフェース属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:706 msgid "New role os10_lag Facilitates the configuration of link aggregation group (LAG) attributes." msgstr "æ–°ã—ã„ロール os10_lag - リンクアグリゲーショングループ (LAG) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:707 msgid "New role os10_lldp Facilitates the configuration of link layer discovery protocol (LLDP) attributes at global and interface level." msgstr "æ–°ã—ã„ロール os10_lldp - グローãƒãƒ«ãŠã‚ˆã³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースレベルã§ã®ãƒªãƒ³ã‚¯ãƒ¬ã‚¤ãƒ¤ãƒ¼æ¤œå‡ºãƒ—ロトコル (LLDP) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:708 msgid "New role os10_logging Facilitates the configuration of global logging attributes and logging servers." msgstr "æ–°ã—ã„ロール os10_logging - グローãƒãƒ«ãƒ­ã‚®ãƒ³ã‚°å±žæ€§ãŠã‚ˆã³ãƒ­ã‚®ãƒ³ã‚°ã‚µãƒ¼ãƒãƒ¼ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:709 msgid "New role os10_network_validation Facilitates validation of wiring connection, BGP neighbors, MTU between neighbors and VLT pair." msgstr "æ–°ã—ã„ロール os10_network_validation - é…線接続ã€BGP 近接ã€è¿‘接間 MTUã€VLT ãƒšã‚¢ã®æ¤œè¨¼ã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:710 msgid "New role os10_ntp Facilitates the configuration of network time protocol (NTP) attributes." msgstr "æ–°ã—ã„ロール os10_ntp - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¤ãƒ ãƒ—ロトコル (NTP) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:711 msgid "New role os10_prefix_list Facilitates the configuration of IP prefix-list." msgstr "æ–°ã—ã„ロール os10_prefix_list - IP プレフィックスリストã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:712 msgid "New role os10_qos Facilitates the configuration of quality of service attributes including policy-map and class-map." msgstr "æ–°ã—ã„ロール os10_qos - policy-map ãŠã‚ˆã³ class-map ã‚’å«ã‚€ QoS (Quality of Service) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:713 msgid "New role os10_raguard Facilitates the configuration of IPv6 RA Guard attributes." msgstr "æ–°ã—ã„ロール os10_raguard - IPv6 RA Guard 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:714 msgid "New role os10_route_map Facilitates the configuration of route-map attributes." msgstr "æ–°ã—ã„ロール os10_route_map - route-map 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:715 msgid "New role os10_snmp Facilitates the configuration of global SNMP attributes." msgstr "æ–°ã—ã„ロール os10_snmp - グローãƒãƒ« SNMP 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:716 msgid "New role os10_system Facilitates the configuration of hostname and hashing algorithm." msgstr "æ–°ã—ã„ロール os10_system - ホストåã¨ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:717 msgid "New role os10_template The role takes the raw string input from the CLI of OS10 device, and returns a structured text in the form of a Python dictionary." msgstr "æ–°ã—ã„ロール os10_template - ã“ã®ãƒ­ãƒ¼ãƒ«ã¯ã€OS10 デãƒã‚¤ã‚¹ã® CLI ã‹ã‚‰ raw 文字列入力をå–å¾—ã—ã€Python ディクショナリーã®å½¢å¼ã§æ§‹é€ åŒ–ã•れãŸãƒ†ã‚­ã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:718 msgid "New role os10_uplink Facilitates the configuration of uplink attributes like uplink-state group." msgstr "æ–°ã—ã„ロール os10_uplink - uplink-state グループã®ã‚ˆã†ãªã‚¢ãƒƒãƒ—リンク属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:719 msgid "New role os10_users Facilitates the configuration of global system user attributes." msgstr "æ–°ã—ã„ロール os10_users - グローãƒãƒ«ã‚·ã‚¹ãƒ†ãƒ ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:720 msgid "New role os10_vlan Facilitates the configuration of virtual LAN (VLAN) attributes." msgstr "æ–°ã—ã„ロール os10_vlan - 仮想 LAN (VLAN) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:721 msgid "New role os10_vlt Facilitates the configuration of virtual link trunking (VLT)." msgstr "æ–°ã—ã„ロール os10_vlt - 仮想リンクトランク (VLT) ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:722 msgid "New role os10_vrf Facilitates the configuration of virtual routing and forwarding (VRF)." msgstr "æ–°ã—ã„ロール os10_vrf - VRF (Virtual Routing and Forwarding) ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:723 msgid "New role os10_vrrp Facilitates the configuration of virtual router redundancy protocol (VRRP) attributes." msgstr "æ–°ã—ã„ロール os10_vrrp - 仮想ルーター冗長性プロトコル (VRRP) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:724 msgid "New role os10_vxlan Facilitates the configuration of virtual extensible LAN (VXLAN) attributes." msgstr "æ–°ã—ã„ロール os10_vxlan - 仮想拡張å¯èƒ½ LAN (VXLAN) 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:725 msgid "New role os10_xstp Facilitates the configuration of xSTP attributes." msgstr "æ–°ã—ã„ロール os10_xstp - xSTP 属性ã®è¨­å®šã‚’容易ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:730 msgid "Broke apart bigip_device_auth_radius to implement radius server configuration in bigip_device_auth_server module. Refer to module documentation for usage details" msgstr "bigip_device_auth_radius を分割ã—ã€radius サーãƒã®è¨­å®šã‚’ bigip_device_auth_server モジュールã«å®Ÿè£…ã—ã¾ã—ãŸã€‚使用方法ã®è©³ç´°ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:731 msgid "Remove redundant parameters in f5_provider to fix disparity between documentation and module parameters" msgstr "f5_provider ã§å†—é•·ãªãƒ‘ラメーターを削除ã—ã¦ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターã®ä¸ä¸€è‡´ã‚’修正ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:734 #: ../../rst/porting_guides/porting_guide_4.rst:148 msgid "gluster.gluster" msgstr "gluster.gluster" #: ../../rst/porting_guides/porting_guide_2.10.rst:736 msgid "geo_rep - Added the independent module of geo rep with other gluster modules (https://github.com/gluster/gluster-ansible-collection/pull/2)." msgstr "geo_rep - ä»–ã® gluster モジュールã¨ã€geo rep ã®ç‹¬ç«‹ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¿½åŠ ã•れã¾ã—㟠(https://github.com/gluster/gluster-ansible-collection/pull/2)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:741 msgid "ovirt_disk - Add backup (https://github.com/oVirt/ovirt-ansible-collection/pull/57)." msgstr "ovirt_disk - ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—追加ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/57)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:742 msgid "ovirt_disk - Support direct upload/download (https://github.com/oVirt/ovirt-ansible-collection/pull/35)." msgstr "ovirt_disk - 直接アップロード/ダウンロードをサãƒãƒ¼ãƒˆã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/35)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:743 msgid "ovirt_host - Add ssh_port (https://github.com/oVirt/ovirt-ansible-collection/pull/60)." msgstr "ovirt_host - ssh_port を追加ã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/60)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:744 msgid "ovirt_vm_os_info - Creation of module (https://github.com/oVirt/ovirt-ansible-collection/pull/26)." msgstr "ovirt_vm_os_info - モジュールを作æˆã—ã¾ã™ (https://github.com/oVirt/ovirt-ansible-collection/pull/26)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:747 msgid "purestorage.flasharray" msgstr "purestorage.flasharray" #: ../../rst/porting_guides/porting_guide_2.10.rst:749 msgid "purefa_console - manage Console Lock setting for the FlashArray" msgstr "purefa_console - FlashArray ã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ­ãƒƒã‚¯è¨­å®šã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:750 msgid "purefa_endpoint - manage VMware protocol-endpoints on the FlashArray" msgstr "purefa_endpoint - FlashArray ã§ VMware プロトコルエンドãƒã‚¤ãƒ³ãƒˆã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:751 msgid "purefa_eula - sign, or resign, FlashArray EULA" msgstr "purefa_eula - sign ã¾ãŸã¯ resignã€FlashArray EULA" #: ../../rst/porting_guides/porting_guide_2.10.rst:752 msgid "purefa_inventory - get hardware inventory information from a FlashArray" msgstr "purefa_inventory - FlashArray ã‹ã‚‰ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:753 msgid "purefa_network - manage the physical and virtual network settings on the FlashArray" msgstr "purefa_network - FlashArray ã§ç‰©ç†ãŠã‚ˆã³ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è¨­å®šã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:754 msgid "purefa_pgsched - manage protection group snapshot and replication schedules on the FlashArray" msgstr "purefa_pgsched - FlashArray ã§ä¿è­·ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚¹ãƒŠãƒƒãƒ—ショットãŠã‚ˆã³ãƒ¬ãƒ—リケーションスケジュールを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:755 msgid "purefa_pod - manage ActiveCluster pods in FlashArrays" msgstr "purefa_pod - FlashArray ã§ ActiveCluster Pod を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:756 msgid "purefa_pod_replica - manage ActiveDR pod replica links in FlashArrays" msgstr "purefa_pod_replica - FlashArray ã§ ActiveDR Pod レプリカリンクを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:757 msgid "purefa_proxy - manage the phonehome HTTPS proxy setting for the FlashArray" msgstr "purefa_proxy - FlashArray ã® phonehome HTTPS プロキシー設定を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:758 msgid "purefa_smis - manage SMI-S settings on the FlashArray" msgstr "purefa_smis - FlashArray ã§ SMI-S 設定を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:759 msgid "purefa_subnet - manage network subnets on the FlashArray" msgstr "purefa_subnet - FlashArray ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ–ãƒãƒƒãƒˆã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:760 msgid "purefa_timeout - manage the GUI idle timeout on the FlashArray" msgstr "purefa_timeout - FlashArray ã§ GUI ã®ã‚¢ã‚¤ãƒ‰ãƒ«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:761 msgid "purefa_vlan - manage VLAN interfaces on the FlashArray" msgstr "purefa_vlan - FlashArray ã§ VLAN インターフェースを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:762 msgid "purefa_vnc - manage VNC for installed applications on the FlashArray" msgstr "purefa_vnc - FlashArray ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚¢ãƒ—リケーション㮠VNC を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:763 msgid "purefa_volume_tags - manage volume tags on the FlashArray" msgstr "purefa_volume_tags - FlashArray ã§ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¿ã‚°ã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:766 msgid "purestorage.flashblade" msgstr "purestorage.flashblade" #: ../../rst/porting_guides/porting_guide_2.10.rst:768 msgid "purefb_alert - manage alert email settings on a FlashBlade" msgstr "purefb_alert - FlashBlade ã§ã‚¢ãƒ©ãƒ¼ãƒˆã®ãƒ¡ãƒ¼ãƒ«è¨­å®šã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:769 msgid "purefb_bladename - manage FlashBlade name" msgstr "purefb_bladename - FlashBlade åを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:770 msgid "purefb_bucket_replica - manage bucket replica links on a FlashBlade" msgstr "purefb_bucket_replica - FlashBlade ã§ãƒã‚±ãƒƒãƒˆãƒ¬ãƒ—リカリンクを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:771 msgid "purefb_connect - manage connections between FlashBlades" msgstr "purefb_connect - FlashBlades é–“ã®æŽ¥ç¶šã‚’ç®¡ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:772 msgid "purefb_dns - manage DNS settings on a FlashBlade" msgstr "purefb_dns - FlashBlade ã§ DNS 設定を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:773 msgid "purefb_fs_replica - manage filesystem replica links on a FlashBlade" msgstr "purefb_fs_replica - FlashBlade ã§ãƒ•ァイルシステムレプリカリンクを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:774 msgid "purefb_inventory - get information about the hardware inventory of a FlashBlade" msgstr "purefb_inventory - FlashBlade ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:775 msgid "purefb_ntp - manage the NTP settings for a FlashBlade" msgstr "purefb_ntp - FlashBlade ã® NTP 設定を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:776 msgid "purefb_phonehome - manage the phone home settings for a FlashBlade" msgstr "purefb_phonehome - FlashBlade ã®é›»è©±ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼è¨­å®šã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:777 msgid "purefb_policy - manage the filesystem snapshot policies for a FlashBlade" msgstr "purefb_policy - FlashBlade ã®ãƒ•ァイルシステムスナップショットãƒãƒªã‚·ãƒ¼ã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:778 msgid "purefb_proxy - manage the phone home HTTP proxy settings for a FlashBlade" msgstr "purefb_proxy - FlashBlade ã®é›»è©±ãƒ›ãƒ¼ãƒ  HTTP プロキシー設定を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:779 msgid "purefb_remote_cred - manage the Object Store Remote Credentials on a FlashBlade" msgstr "purefb_remote_cred - FlashBlade ã§ã‚ªãƒ–ジェクトストアã®ãƒªãƒ¢ãƒ¼ãƒˆèªè¨¼æƒ…報を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:780 msgid "purefb_snmp_agent - modify the FlashBlade SNMP Agent" msgstr "purefb_snmp_agent - FlashBlade SNMP エージェントを変更ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:781 msgid "purefb_snmp_mgr - manage SNMP Managers on a FlashBlade" msgstr "purefb_snmp_mgr - FlashBlade ã§ SNMP Manager を管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:782 msgid "purefb_target - manage remote S3-capable targets for a FlashBlade" msgstr "purefb_target - FlashBlade ã®ãƒªãƒ¢ãƒ¼ãƒˆ S3 対応ターゲットを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:783 msgid "purefb_user - manage local ``pureuser`` account password on a FlashBlade" msgstr "purefb_user - FlashBlade ã§ãƒ­ãƒ¼ã‚«ãƒ«ã® ``pureuser`` アカウントã®ãƒ‘スワードを管ç†ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:791 msgid "core - remove support for ``check_invalid_arguments`` in ``AnsibleModule``, ``AzureModule`` and ``UTMModule``." msgstr "core - ``AnsibleModule``ã€``AzureModule``ã€ãŠã‚ˆã³ ``UTMModule`` ã® ``check_invalid_arguments`` ã®ã‚µãƒãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:796 msgid "module_utils.network.common.utils.ComplexDict has been removed" msgstr "module_utils.network.common.utils.ComplexDict ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:801 msgid "win_stat - removed the deprecated ``get_md55`` option and ``md5`` return value." msgstr "win_stat - éžæŽ¨å¥¨ã® ``get_md55`` オプション㨠``md5`` ã®æˆ»ã‚Šå€¤ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:804 #: ../../rst/porting_guides/porting_guide_2.10.rst:919 #: ../../rst/porting_guides/porting_guide_3.rst:114 #: ../../rst/porting_guides/porting_guide_3.rst:169 #: ../../rst/porting_guides/porting_guide_4.rst:742 msgid "community.crypto" msgstr "community.crypto" #: ../../rst/porting_guides/porting_guide_2.10.rst:806 msgid "The ``letsencrypt`` module has been removed. Use ``acme_certificate`` instead." msgstr "``letsencrypt`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``acme_certificate`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:811 #: ../../rst/porting_guides/porting_guide_3.rst:538 msgid "conjur_variable lookup - has been moved to the ``cyberark.conjur`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/570)." msgstr "conjur_variable ルックアップ - ``cyberark.conjur`` コレクションã«ç§»å‹•ã—ã¾ã—ãŸã€‚リダイレクトã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/570)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:812 msgid "core - remove support for ``check_invalid_arguments`` in ``UTMModule``." msgstr "core - ``UTMModule`` ã® ``check_invalid_arguments`` ã®ã‚µãƒãƒ¼ãƒˆã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:813 #: ../../rst/porting_guides/porting_guide_3.rst:539 msgid "digital_ocean_* - all DigitalOcean modules have been moved to the ``community.digitalocean`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/622)." msgstr "digital_ocean_* - ã™ã¹ã¦ã® DigitalOcean モジュール㌠``community.digitalocean`` コレクションã«ç§»å‹•ã—ã¾ã—ãŸã€‚リダイレクトã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/622)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:814 #: ../../rst/porting_guides/porting_guide_3.rst:540 msgid "infini_* - all infinidat modules have been moved to the ``infinidat.infinibox`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/607)." msgstr "infini_* - ã™ã¹ã¦ã® infinidat モジュール㌠``infinidat.infinibox`` コレクションã«ç§»å‹•ã•れã¾ã—ãŸã€‚リダイレクトã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/607)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:815 #: ../../rst/porting_guides/porting_guide_3.rst:542 msgid "logicmonitor - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541)." msgstr "logicmonitor - ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹å¯¾è±¡å¤–ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã™ã‚‹ API ㌠2017 å¹´ã«å‰Šé™¤ã•れãŸãŸã‚ã€1.0.0 ã§å‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.general/issues/539ã€https://github.com/ansible-collections/community.general/pull/541)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:816 #: ../../rst/porting_guides/porting_guide_3.rst:543 msgid "logicmonitor_facts - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541)." msgstr "logicmonitor_facts - ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹å¯¾è±¡å¤–ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã™ã‚‹ API ㌠2017 å¹´ã«å‰Šé™¤ã•れãŸãŸã‚ã€1.0.0 ã§å‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.general/issues/539ã€https://github.com/ansible-collections/community.general/pull/541)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:817 #: ../../rst/porting_guides/porting_guide_3.rst:545 msgid "mysql_* - all MySQL modules have been moved to the ``community.mysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/633)." msgstr "mysql_* - ã™ã¹ã¦ã® MySQL モジュール㌠``community.mysql`` コレクションã«ç§»å‹•ã—ã¾ã—ãŸã€‚リダイレクトã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/633)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:818 msgid "pacman - Removed deprecated ``recurse`` option, use ``extra_args=--recursive`` instead" msgstr "pacman - éžæŽ¨å¥¨ã® ``recurse`` オプションを削除ã—ã¾ã—ãŸã€‚代ã‚り㫠``extra_args=--recursive`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:819 #: ../../rst/porting_guides/porting_guide_3.rst:546 msgid "proxysql_* - all ProxySQL modules have been moved to the ``community.proxysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/624)." msgstr "proxysql_* - ã™ã¹ã¦ã® ProxySQL モジュール㌠``community.proxysql`` コレクションã«ç§»å‹•ã•れã¾ã—ãŸã€‚リダイレクトã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/624)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:824 #: ../../rst/porting_guides/porting_guide_3.rst:579 msgid "onyx - all onyx modules and plugins have been moved to the mellanox.onyx collection. Redirects have been added that will be removed in community.network 2.0.0 (https://github.com/ansible-collections/community.network/pull/83)." msgstr "onyx - ã™ã¹ã¦ã® onyx モジュールã¨ãƒ—ラグインã¯ã€mellanox.onyx コレクションã«ç§»å‹•ã—ã¾ã—ãŸã€‚community.network 2.0.0 ã§å‰Šé™¤ã•れる予定ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒè¿½åŠ ã•れã¾ã—㟠(https://github.com/ansible-collections/community.network/pull/83)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:829 msgid "vmware_guest_find - Removed deprecated ``datacenter`` option" msgstr "vmware_guest_find - éžæŽ¨å¥¨ã® ``datacenter`` オプションを削除ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:830 msgid "vmware_portgroup - removed 'inbound_policy', and 'rolling_order' deprecated options." msgstr "vmware_portgroup - 「inbound_policyã€ãŠã‚ˆã³ã€Œrolling_orderã€ã®éžæŽ¨å¥¨ã‚ªãƒ—ションを削除ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:831 msgid "vmware_vmkernel - Removed deprecated ``ip_address`` option; use sub-option ip_address in the network option instead" msgstr "vms_vmkernel - éžæŽ¨å¥¨ã® ``ip_address`` オプション。代ã‚り㫠network オプションã«ã‚µãƒ–オプション ip_address を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:832 msgid "vmware_vmkernel - Removed deprecated ``subnet_mask`` option; use sub-option subnet_mask in the network option instead" msgstr "vmware_vmkernel - éžæŽ¨å¥¨ã® ``subnet_mask`` オプションを削除ã—ã¾ã—ãŸã€‚代ã‚り㫠network オプションã«ã‚µãƒ–オプション subnet_mask を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:837 msgid "win_disk_image - removed the deprecated return value ``mount_path`` in favor of ``mount_paths``." msgstr "win_disk_image - éžæŽ¨å¥¨ã®æˆ»ã‚Šå€¤ ``mount_path`` ãŒå‰Šé™¤ã•れã€``mount_paths`` ãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:838 msgid "win_psexec - removed the deprecated ``extra_opts`` option." msgstr "win_psexec - éžæŽ¨å¥¨ã® ``extra_opts`` オプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:843 msgid "Remove _bigip_iapplx_package alias" msgstr "_bigip_iapplx_package エイリアスã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:844 msgid "Remove _bigip_security_address_list alias" msgstr "_bigip_security_address_list エイリアスã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:845 msgid "Remove _bigip_security_port_list alias" msgstr "_bigip_security_port_list エイリアスã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:846 msgid "Remove _bigip_traffic_group alias" msgstr "_bigip_traffic_group エイリアスã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:847 msgid "Remove bigip_appsvcs_extension module" msgstr "bigip_appsvcs_extension モジュールã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:848 msgid "Remove bigip_asm_policy module" msgstr "bigip_asm_policy モジュールã®å‰Šé™¤" #: ../../rst/porting_guides/porting_guide_2.10.rst:853 msgid "The vyos.vyos.vyos_static_route module has been deprecated and will be removed in a later release; use vyos.vyos.vyos_static_routes instead." msgstr "vyos.vyos.vyos_static_route モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚代ã‚りã«ã€vyos.vyos.vyos_static_routes を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:858 msgid "Using the DefaultCallback without the correspodning doc_fragment or copying the documentation." msgstr "対応ã™ã‚‹ doc_fragment を使用ã›ãšã« DefaultCallback を使用ã€ã¾ãŸã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚³ãƒ”ー" #: ../../rst/porting_guides/porting_guide_2.10.rst:859 msgid "hash_behaviour - Deprecate ``hash_behaviour`` for future removal." msgstr "hash_behaviour - 今後削除ã•れる ``hash_behaviour`` ã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:860 msgid "script inventory plugin - The 'cache' option is deprecated and will be removed in 2.12. Its use has been removed from the plugin since it has never had any effect." msgstr "スクリプトインベントリープラグイン - 「cacheã€ã‚ªãƒ—ションã¯éžæŽ¨å¥¨ã«ãªã‚Šã€2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚何も効果ãŒãªã„ãŸã‚ã€ãã®ä½¿ç”¨ã¯ãƒ—ラグインã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:865 msgid "All AWS Modules - ``aws_access_key``, ``aws_secret_key`` and ``security_token`` will be made mutually exclusive with ``profile`` after 2022-06-01." msgstr "ã™ã¹ã¦ã® AWS モジュール - ``aws_access_key``ã€``aws_secret_key``ã€ãŠã‚ˆã³ ``security_token`` 㯠2022-06-01 以é™ã« ``profile`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:866 #: ../../rst/porting_guides/porting_guide_2.10.rst:894 msgid "cloudformation - The ``template_format`` option had no effect since Ansible 2.3 and will be removed after 2022-06-01" msgstr "cloudformation - ``template_format`` オプション㯠Ansible 2.3 以é™ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“ãŒã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:867 msgid "cloudformation - the ``template_format`` option has been deprecated and will be removed in a later release. It has been ignored by the module since Ansible 2.3." msgstr "cloudformation - ``template_format`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚ã“れ㯠Ansible 2.3 以é™ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:868 msgid "data_pipeline - The ``version`` option had no effect and will be removed in after 2022-06-01" msgstr "data_pipeline - ``version`` オプションã¯å½±éŸ¿ã‚’å—ã‘ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:869 msgid "ec2 - in a later release, the ``group`` and ``group_id`` options will become mutually exclusive. Currently ``group_id`` is ignored if you pass both." msgstr "ec2 - 今後ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€``group`` オプション㨠``group_id`` オプションãŒç›¸äº’ã«æŽ’ä»–çš„ã«ãªã‚Šã¾ã™ã€‚ç¾æ™‚点ã§ã¯ã€ä¸¡æ–¹ã‚’渡ã™ã¨ ``group_id`` ã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:870 msgid "ec2_ami - The ``no_device`` alias ``NoDevice`` has been deprecated and will be removed after 2022-06-01" msgstr "ec2_ami - ``no_device`` エイリアス ``NoDevice`` ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:871 msgid "ec2_ami - The ``virtual_name`` alias ``VirtualName`` has been deprecated and will be removed after 2022-06-01" msgstr "ec2_ami - ``virtual_name`` エイリアス ``VirtualName`` ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:872 #: ../../rst/porting_guides/porting_guide_2.10.rst:897 msgid "ec2_eip - The ``wait_timeout`` option had no effect and will be removed after 2022-06-01" msgstr "ec2_eip - ``wait_timeout`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:873 #: ../../rst/porting_guides/porting_guide_2.10.rst:899 msgid "ec2_key - The ``wait_timeout`` option had no effect and will be removed after 2022-06-01" msgstr "ec2_key - ``wait_timeout`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:874 #: ../../rst/porting_guides/porting_guide_2.10.rst:900 msgid "ec2_key - The ``wait`` option had no effect and will be removed after 2022-06-01" msgstr "ec2_key - ``wait`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:875 msgid "ec2_key - the ``wait_timeout`` option has been deprecated and will be removed in a later release. It has had no effect since Ansible 2.5." msgstr "ec2_key - ``wait_timeout`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚Ansible 2.5 以é™ã«ã¯å¤‰æ›´ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:876 msgid "ec2_key - the ``wait`` option has been deprecated and will be removed in a later release. It has had no effect since Ansible 2.5." msgstr "ec2_key - ``wait`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚Ansible 2.5 以é™ã«ã¯å¤‰æ›´ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:877 #: ../../rst/porting_guides/porting_guide_2.10.rst:901 msgid "ec2_lc - The ``associate_public_ip_address`` option had no effect and will be removed after 2022-06-01" msgstr "ec2_lc - ``associate_public_ip_address`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:878 msgid "ec2_tag - deprecate the ``list`` option in favor of ec2_tag_info" msgstr "ec2_tag - ``list`` オプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã€ec2_tag_info ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:879 msgid "ec2_tag - support for ``list`` as a state has been deprecated and will be removed in a later release. The ``ec2_tag_info`` can be used to fetch the tags on an EC2 resource." msgstr "ec2_tag - 状態ã¨ã—ã¦ã® ``list`` ã®ã‚µãƒãƒ¼ãƒˆã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚``ec2_tag_info`` を使用ã™ã‚‹ã¨ã€EC2 リソースã§ã‚¿ã‚°ã‚’å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:884 msgid "win_domain_computer - Deprecated the undocumented ``log_path`` option. This option will be removed in a major release after ``2022-07-01``." msgstr "win_domain_ computers - ドキュメント化ã•れã¦ã„ãªã„ ``log_path`` オプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®ã‚ªãƒ—ション㯠``2022-07-01`` 後ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:885 msgid "win_domain_controller - the ``log_path`` option has been deprecated and will be removed in a later release. This was undocumented and only related to debugging information for module development." msgstr "win_domain_controller - ``log_path`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚ã“ã‚Œã¯æ–‡æ›¸åŒ–ã•れã¦ãŠã‚‰ãšã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–‹ç™ºã®ãƒ‡ãƒãƒƒã‚°æƒ…å ±ã«ã®ã¿é–¢é€£ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:886 msgid "win_package - the ``ensure`` alias for the ``state`` option has been deprecated and will be removed in a later release. Please use ``state`` instead of ``ensure``." msgstr "win_package - ``state`` オプション㮠``ensure`` エイリアスã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚``ensure`` ã®ä»£ã‚り㫠``state`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:887 msgid "win_package - the ``productid`` alias for the ``product_id`` option has been deprecated and will be removed in a later release. Please use ``product_id`` instead of ``productid``." msgstr "win_package - ``product_id`` オプション㮠``productid`` エイリアスã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚``productid`` ã®ä»£ã‚り㫠``product_id`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:888 msgid "win_package - the ``username`` and ``password`` options has been deprecated and will be removed in a later release. The same functionality can be done by using ``become: yes`` and ``become_flags: logon_type=new_credentials logon_flags=netcredentials_only`` on the task." msgstr "win_package - ``username`` オプションãŠã‚ˆã³ ``password`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚åŒæ§˜ã«ã€ã‚¿ã‚¹ã‚¯ã® ``become: yes`` ãŠã‚ˆã³ ``become_flags: logon_type=new_credentials logon_flags=netcredentials_only`` を使用ã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:889 msgid "win_regedit - Deprecated using forward slashes as a path separator, use backslashes to avoid ambiguity between a forward slash in the key name or a forward slash as a path separator. This feature will be removed in a major release after ``2021-07-01``." msgstr "win_regedit - スラッシュをパス区切り文字ã¨ã—ã¦ä½¿ç”¨ã—ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’使用ã—ã¦ã€ã‚­ãƒ¼åã®ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã¨ãƒ‘ス区切りã®ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®æ›–昧ã•を回é¿ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ã€``2021-07-01`` ã®å¾Œã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:895 msgid "data_pipeline - The ``version`` option had no effect and will be removed after 2022-06-01" msgstr "data_pipeline - ``version`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:896 msgid "data_pipeline - the ``version`` option has been deprecated and will be removed in a later release. It has always been ignored by the module." msgstr "data_pipeline - ``version`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚常ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:898 msgid "ec2_eip - the ``wait_timeout`` option has been deprecated and will be removed in a later release. It has had no effect since Ansible 2.3." msgstr "ec2_eip - ``wait_timeout`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚Ansible 2.3 以é™ã¯å¤‰æ›´ã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:902 msgid "ec2_lc - the ``associate_public_ip_address`` option has been deprecated and will be removed after a later release. It has always been ignored by the module." msgstr "ec2_lc - ``associate_public_ip_address`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚常ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:903 msgid "elb_network_lb - The current default value of the ``state`` option has been deprecated and will change from absent to present after 2022-06-01" msgstr "elb_network_lb - ``state`` オプションã®ç¾åœ¨ã®ãƒ‡ãƒ•ォルト値ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-06-01 以é™ã« absent ã‹ã‚‰ present ã«å¤‰æ›´ã™ã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:904 msgid "elb_network_lb - in a later release, the default behaviour for the ``state`` option will change from ``absent`` to ``present``. To maintain the existing behavior explicitly set state to ``absent``." msgstr "elb_network_lb - 今後ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€``state`` オプションã®ãƒ‡ãƒ•ォルト動作㌠``absent`` ã‹ã‚‰ ``present`` ã«å¤‰æ›´ãªã‚Šã¾ã™ã€‚既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€çŠ¶æ…‹ã‚’æ˜Žç¤ºçš„ã« ``absent`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:905 msgid "iam_managed_policy - The ``fail_on_delete`` option had no effect and will be removed after 2022-06-01" msgstr "iam_managed_policy - ``fail_on_delete`` オプションã¯å½±éŸ¿ã‚’å—ã‘ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:906 msgid "iam_managed_policy - the ``fail_on_delete`` option has been deprecated and will be removed after a later release. It has always been ignored by the module." msgstr "iam_managed_policy - ``fail_on_delete`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚常ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:907 msgid "iam_policy - The ``policy_document`` will be removed after 2022-06-01. To maintain the existing behavior use the ``policy_json`` option and read the file with the ``lookup`` plugin." msgstr "iam_policy - ``policy_document`` 㯠2022-06-01 以é™å‰Šé™¤ã•れã¾ã™ã€‚既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€``policy_json`` オプションを使用ã—㦠``lookup`` プラグインã§ãƒ•ァイルを読ã¿å–りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:908 msgid "iam_policy - The default value of ``skip_duplicates`` will change after 2022-06-01 from ``true`` to ``false``." msgstr "iam_policy -``skip_duplicates`` ã®ãƒ‡ãƒ•ォルト値ã¯ã€2022-06-01 以é™ã€``true`` ã‹ã‚‰``false`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:909 msgid "iam_policy - in a later release, the default value for the ``skip_duplicates`` option will change from ``true`` to ``false``. To maintain the existing behavior explicitly set it to ``true``." msgstr "iam_policy - 今後ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€``skip_duplicates`` オプションã®ãƒ‡ãƒ•ォルト値㌠``true`` ã‹ã‚‰``false`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€æ˜Žç¤ºçš„ã« ``true`` ã«è¨­å®šã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:910 msgid "iam_policy - the ``policy_document`` option has been deprecated and will be removed after a later release. To maintain the existing behavior use the ``policy_json`` option and read the file with the ``lookup`` plugin." msgstr "iam_policy - ``policy_document`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€å¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€``policy_json`` オプションを使用ã—ã€``lookup`` プラグインã§ãƒ•ァイルを読ã¿è¾¼ã‚“ã§ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:911 msgid "iam_role - The default value of the purge_policies has been deprecated and will change from true to false after 2022-06-01" msgstr "iam_role - purge_policies ã®ãƒ‡ãƒ•ォルト値ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-06-01 以é™ã¯ true ã‹ã‚‰ false ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:912 msgid "iam_role - in a later release, the ``purge_policies`` option (also know as ``purge_policy``) default value will change from ``true`` to ``false``" msgstr "iam_role - 今後ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€``purge_policies`` オプション (``purge_policy`` ã¨ã‚‚呼ã°ã‚Œã‚‹) ã®ãƒ‡ãƒ•ォルト値㌠``true`` ã‹ã‚‰ ``false`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:913 msgid "s3_lifecycle - The ``requester_pays`` option had no effect and will be removed after 2022-06-01" msgstr "s3_lifecycle - ``requester_pays`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:914 msgid "s3_lifecycle - the ``requester_pays`` option has been deprecated and will be removed after a later release. It has always been ignored by the module." msgstr "s3_lifecycle - ``requester_pays`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚モジュールã§ã¯å¸¸ã«ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:915 msgid "s3_sync - The ``retries`` option had no effect and will be removed after 2022-06-01" msgstr "s3_sync - ``retries`` オプションã¯å½±éŸ¿ã‚’å—ã‘ã¦ãŠã‚‰ãšã€2022-06-01 以é™ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:916 msgid "s3_sync - the ``retries`` option has been deprecated and will be removed after 2022-06-01. It has always been ignored by the module." msgstr "s3_sync - ``retries`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-06-01 以é™ã¯å‰Šé™¤ã•れã¾ã™ã€‚モジュールã§ã¯å¸¸ã«ç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:921 msgid "openssl_csr - all values for the ``version`` option except ``1`` are deprecated. The value 1 denotes the current only standardized CSR version." msgstr "openssl_csr - ``version`` オプション㮠``1`` 以外ã®å€¤ã¯éžæŽ¨å¥¨ã§ã™ã€‚値 1 ã¯ã€ç¾åœ¨å”¯ä¸€æ¨™æº–化ã•れã¦ã„ã‚‹ CSR ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:926 #: ../../rst/porting_guides/porting_guide_3.rst:611 msgid "The ldap_attr module has been deprecated and will be removed in a later release; use ldap_attrs instead." msgstr "ldap_attr モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠ldap_attrs を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:927 msgid "airbrake_deployment - Add deprecation notice for ``token`` parameter and v2 api deploys. This feature will be removed in community.general 3.0.0." msgstr "airbrake_deployment - ``token`` パラメーター㨠v2 api ã®ãƒ‡ãƒ—ロイã«é–¢ã™ã‚‹éžæŽ¨å¥¨ã®å‘ŠçŸ¥ã‚’追加ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ community.general 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:928 msgid "clc_aa_policy - The ``wait`` option had no effect and will be removed in community.general 3.0.0." msgstr "clc_aa_policy - ``wait`` オプションã¯å½±éŸ¿ã‚’å—ã‘ãšã€community.general 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:929 msgid "clc_aa_policy - the ``wait`` parameter will be removed. It has always been ignored by the module." msgstr "clc_aa_policy - ``wait`` パラメーターã¯å‰Šé™¤ã•れã¾ã™ã€‚常ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã‚Šç„¡è¦–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:930 msgid "docker_container - the ``trust_image_content`` option is now deprecated and will be removed in community.general 3.0.0. It has never been used by the module." msgstr "docker_container - ``trust_image_content`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€community.general 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚モジュールã§ä½¿ç”¨ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.10.rst:931 msgid "docker_container - the ``trust_image_content`` option will be removed. It has always been ignored by the module." msgstr "docker_container - ``trust_image_content`` オプションã¯å‰Šé™¤ã•れã¾ã™ã€‚ã“れã¾ã§ã‚‚モジュールã¯ã“ã®ã‚ªãƒ—ションを無視ã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:932 msgid "docker_container - the default of ``container_default_behavior`` will change from ``compatibility`` to ``no_defaults`` in community.general 3.0.0. Set the option to an explicit value to avoid a deprecation warning." msgstr "docker_container - ``container_default_behavior`` ã®ãƒ‡ãƒ•ォルト値㌠community.general 3.0.0 ã§ ``compatibility`` ã‹ã‚‰ ``no_defaults`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚éžæŽ¨å¥¨ã®è­¦å‘Šã‚’防ããŸã‚ã«ã€ã‚ªãƒ—ションを明示的ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:933 msgid "docker_container - the default value for ``network_mode`` will change in community.general 3.0.0, provided at least one network is specified and ``networks_cli_compatible`` is ``true``. See porting guide, module documentation or deprecation warning for more details." msgstr "docker_container - community.general 3.0.0 ã§ã¯ã€å°‘ãªãã¨ã‚‚ 1 ã¤ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒæŒ‡å®šã•れã€``networks_cli_compatible`` ㌠``true`` ã§ã‚ã‚‹å ´åˆã¯ã€``network_mode`` ã®ãƒ‡ãƒ•ォルト値ãŒå¤‰æ›´ã—ã¾ã™ã€‚詳細ã¯ç§»æ¤ã‚¬ã‚¤ãƒ‰ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã¾ãŸã¯éžæŽ¨å¥¨ã®è­¦å‘Šã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:934 msgid "docker_stack - Return values ``out`` and ``err`` have been deprecated and will be removed in community.general 3.0.0. Use ``stdout`` and ``stderr`` instead." msgstr "docker_stack - 戻り値㮠``out`` ã¨``err`` ã¯éžæŽ¨å¥¨ã§ã‚りã€community.general 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``stdout`` ã¨``stderr`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:935 msgid "docker_stack - the return values ``err`` and ``out`` have been deprecated. Use ``stdout`` and ``stderr`` from now on instead." msgstr "docker_stack - ``err`` ã¨``out`` ã®æˆ»ã‚Šå€¤ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã—ãŸã€‚今後㯠``stdout`` 㨠``stderr`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:936 msgid "helm - Put ``helm`` module to deprecated. New implementation is available in community.kubernetes collection." msgstr "helm - ``helm`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’éžæŽ¨å¥¨ã«ã—ã¾ã—ãŸã€‚æ–°ã—ã„実装㯠community.kubernetes コレクションã§å…¬é–‹ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:937 msgid "redfish_config - Deprecate ``bios_attribute_name`` and ``bios_attribute_value`` in favor of new `bios_attributes`` option." msgstr "redfish_config - ``bios_attribute_name`` 㨠``bios_attribute_value`` ã‚’éžæŽ¨å¥¨ã¨ã—ã€æ–°ã—ã„ `bios_attributes`` オプションを採用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:938 msgid "redfish_config - the ``bios_attribute_name`` and ``bios_attribute_value`` options will be removed. To maintain the existing behavior use the ``bios_attributes`` option instead." msgstr "redfish_config - ``bios_attribute_name`` オプションãŠã‚ˆã³ ``bios_attribute_value`` オプションを削除ã—ã¾ã™ã€‚既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€ä»£ã‚り㫠``bios_attributes`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:939 msgid "redfish_config and redfish_command - the behavior to select the first System, Manager, or Chassis resource to modify when multiple are present will be removed. Use the new ``resource_id`` option to specify target resource to modify." msgstr "redfish_config ãŠã‚ˆã³ redfish_command - 複数ã®ãƒªã‚½ãƒ¼ã‚¹ãŒå­˜åœ¨ã™ã‚‹å ´åˆã«ä¿®æ­£ã™ã‚‹æœ€åˆã® System リソースã€Manager リソースã€ã¾ãŸã¯ Chassis ãƒªã‚½ãƒ¼ã‚¹ã‚’é¸æŠžã™ã‚‹å‹•作ãŒå‰Šé™¤ã•れã¾ã™ã€‚æ–°ã—ã„ ``resource_id`` オプションを使用ã—ã¦ã€å¤‰æ›´ã™ã‚‹å¯¾è±¡ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:940 msgid "redfish_config, redfish_command - Behavior to modify the first System, Mananger, or Chassis resource when multiple are present is deprecated. Use the new ``resource_id`` option to specify target resource to modify." msgstr "redfish_configã€redfish_command - 複数ã®ãƒªã‚½ãƒ¼ã‚¹ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€æœ€åˆã® Systemã€Manangerã€ã¾ãŸã¯ Chassis リソースを修正ã™ã‚‹å‹•作ã¯éžæŽ¨å¥¨ã§ã™ã€‚æ–°ã—ã„ ``resource_id`` オプションを使用ã—ã¦ã€å¤‰æ›´ã™ã‚‹å¯¾è±¡ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’指定ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:941 #: ../../rst/porting_guides/porting_guide_3.rst:616 msgid "xbps - the ``force`` option never had any effect. It is now deprecated, and will be removed in 3.0.0 (https://github.com/ansible-collections/community.general/pull/568)." msgstr "xbps - ``force`` オプションã«ã¯ä½•も効果ãŒã‚りã¾ã›ã‚“。ç¾åœ¨éžæŽ¨å¥¨ã«ãªã‚Šã€3.0.0 ã§å‰Šé™¤ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/568)。" #: ../../rst/porting_guides/porting_guide_2.10.rst:946 msgid "The vmware_dns_config module has been deprecated and will be removed in a later release; use vmware_host_dns instead." msgstr "vmware_dns_config モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚代ã‚り㫠vmware_host_dns を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:947 msgid "vca - vca_fw, vca_nat, vca_app are deprecated since these modules rely on deprecated part of Pyvcloud library." msgstr "vca - vca_fw モジュールã€vca_nat モジュールã€vca_app モジュールã¯ã€Pyvcloud ライブラリーã®éžæŽ¨å¥¨ã®éƒ¨åˆ†ã«ä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:948 msgid "vmware_dns_config - Deprecate in favor of new module vmware_host_dns." msgstr "vmc_dns_config - éžæŽ¨å¥¨ã«ãªã‚Šã€æ–°ã—ã„モジュール vmware_host_dns ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:949 msgid "vmware_guest - deprecate specifying CDROM configuration as a dict, instead use a list." msgstr "vmware_guest - CDROM 設定を dict ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã‚’éžæŽ¨å¥¨ã¨ã—ã€ä»£ã‚りã«ãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.10.rst:950 msgid "vmware_tag_info - in a later release, the module will not return ``tag_facts`` since it does not return multiple tags with the same name and different category id. To maintain the existing behavior use ``tag_info`` which is a list of tag metadata." msgstr "vmware_tag_info - 今後ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€åŒã˜åå‰ã§ç•°ãªã‚‹ã‚«ãƒ†ã‚´ãƒªãƒ¼ ID ã‚’æŒã¤è¤‡æ•°ã®ã‚¿ã‚°ã‚’è¿”ã•ãªã„ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``tag_facts`` ã‚’è¿”ã—ã¾ã›ã‚“。既存ã®å‹•作を維æŒã™ã‚‹ã«ã¯ã€ã‚¿ã‚°ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ ``tag_info`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:955 msgid "zabbix_proxy (module) - deprecates ``interface`` sub-options ``type`` and ``main`` when proxy type is set to passive via ``status=passive``. Make sure these suboptions are removed from your playbook as they were never supported by Zabbix in the first place." msgstr "zabbix_proxy (モジュール) - ``status=passive`` ã§ãƒ—ロキシー㌠passive ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€``interface`` ã®ã‚µãƒ–オプション ``type`` 㨠``main`` ã‚’éžæŽ¨å¥¨ã¨ã—ã¾ã™ã€‚ã“れらã®ã‚µãƒ–オプションã¯ãã‚‚ãã‚‚ Zabbix ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ãŸã‚ã€å¿…ãš Playbook ã‹ã‚‰å‰Šé™¤ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.10.rst:960 msgid "Deprecated bigip_appsvcs_extension module" msgstr "éžæŽ¨å¥¨ã® bigip_appsvcs_extension モジュール" #: ../../rst/porting_guides/porting_guide_2.10.rst:961 msgid "Deprecated bigip_device_facts module name" msgstr "éžæŽ¨å¥¨ã® bigip_device_facts モジュールå" #: ../../rst/porting_guides/porting_guide_2.10.rst:962 msgid "Deprecated bigiq_device_facts module name" msgstr "éžæŽ¨å¥¨ã® bigiq_device_facts モジュールå" #: ../../rst/porting_guides/porting_guide_2.3.rst:6 msgid "Ansible 2.3 Porting Guide" msgstr "Ansible 2.3 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.3.rst:8 msgid "This section discusses the behavioral changes between Ansible 2.2 and Ansible 2.3." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.2 ã‹ã‚‰ Ansible 2.3 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:13 msgid "We suggest you read this page along with `Ansible Changelog for 2.3 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.3 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.3.rst:23 msgid "Restructured async to work with action plugins" msgstr "アクションプラグインã¨é€£æºã™ã‚‹ã‚ˆã†ã« async ã‚’å†æ§‹ç¯‰ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:25 msgid "In Ansible 2.2 (and possibly earlier) the `async:` keyword could not be used in conjunction with the action plugins such as `service`. This limitation has been removed in Ansible 2.3" msgstr "Ansible 2.2 (ãŠã‚ˆã³ãれ以å‰) ã§ã¯ã€`async:` キーワードを `service` ãªã©ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¨ä½µç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®åˆ¶é™ã¯ Ansible 2.3 ã§å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:27 #: ../../rst/porting_guides/porting_guide_2.3.rst:53 #: ../../rst/porting_guides/porting_guide_2.3.rst:69 #: ../../rst/porting_guides/porting_guide_2.3.rst:208 msgid "**NEW** In Ansible 2.3:" msgstr "Ansible 2.3 ã«ãŠã‘ã‚‹ **新機能**:" #: ../../rst/porting_guides/porting_guide_2.3.rst:40 msgid "OpenBSD version facts" msgstr "OpenBSD ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒ•ァクト" #: ../../rst/porting_guides/porting_guide_2.3.rst:42 msgid "The `ansible_distribution_release` and `ansible_distribution_version` facts on OpenBSD hosts were reversed in Ansible 2.2 and earlier. This has been changed so that version has the numeric portion and release has the name of the release." msgstr "OpenBSD ホスト㮠`ansible_distribution_release` ã¨`ansible_distribution_version` ã®ãƒ•ァクトã¯ã€Ansible 2.2 以å‰ã§ã¯é€†ã«ãªã£ã¦ã„ã¾ã—ãŸã€‚ã“れã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ•°å­—ã®éƒ¨åˆ†ãŒã‚りã€ãƒªãƒªãƒ¼ã‚¹ã«ã¯ãƒªãƒªãƒ¼ã‚¹ã®åå‰ãŒã‚るよã†ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:44 msgid "**OLD** In Ansible 2.2 (and earlier)" msgstr "Ansible 2.2 以å‰ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½**:" #: ../../rst/porting_guides/porting_guide_2.3.rst:64 msgid "Names Blocks" msgstr "Names ブロック" #: ../../rst/porting_guides/porting_guide_2.3.rst:66 msgid "Blocks can now have names, this allows you to avoid the ugly `# this block is for...` comments." msgstr "ブロックã«åå‰ã‚’付ã‘られるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€å†—長㪠`# this block is for...` ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’回é¿ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:91 #: ../../rst/porting_guides/porting_guide_2.4.rst:62 msgid "Use of multiple tags" msgstr "複数ã®ã‚¿ã‚°ã®ä½¿ç”¨" #: ../../rst/porting_guides/porting_guide_2.3.rst:93 msgid "Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last specified tag overriding all the other specified tags. This behaviour is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behaviour." msgstr "ç¾åœ¨ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--tags`` (ã¾ãŸã¯ ``--skip-tags``) を複数回指定ã™ã‚‹ã¨ã€æœ€å¾Œã«æŒ‡å®šã—ãŸã‚¿ã‚°ãŒä»–ã®ã™ã¹ã¦ã®æŒ‡å®šã—ãŸã‚¿ã‚°ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚ã“ã®å‹•ä½œã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。将æ¥çš„ã«ã¯ã€--tags を複数回指定ã—ãŸå ´åˆã€ã‚¿ã‚°ã¯çµ±åˆã•れã¾ã™ã€‚今後ã¯ã€1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--tags`` を複数回使用ã™ã‚‹ã¨ã€éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚``ansible.cfg`` ファイル㧠``merge_multiple_cli_tags`` オプションを True ã«è¨­å®šã™ã‚‹ã¨ã€æ–°ã—ã„å‹•ä½œãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:95 msgid "In 2.4, the default will be to merge the tags. You can enable the old overwriting behavior via the config option. In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behaviour." msgstr "2.4 ã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¿ã‚°ã®ãƒžãƒ¼ã‚¸ãŒè¡Œã‚れã¾ã™ã€‚å¤ã„上書ãã®å‹•作ã¯ã€è¨­å®šã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚2.5 ã§ã¯ã€è¤‡æ•°ã® ``--tags`` オプションãŒãƒžãƒ¼ã‚¸ã•れã¾ã™ãŒã€ä»¥å‰ã®å‹•ä½œã«æˆ»ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.3.rst:102 msgid "Here are some rare cases that might be encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored." msgstr "ã“ã“ã§ã¯ã€æ›´æ–°æ™‚ã«é­é‡ã™ã‚‹ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„ケースを紹介ã—ã¾ã™ã€‚ã“れらã¯ä¸»ã«ã€ãƒ‘ãƒ¼ã‚µãƒ¼ã®æ¤œè¨¼ãŒã‚ˆã‚Šå޳ã—ããªã£ãŸã“ã¨ã¨ã€ä»¥å‰ã¯ç„¡è¦–ã•れã¦ã„ãŸã‚¨ãƒ©ãƒ¼ãŒæ•æ‰ã•れãŸã“ã¨ãŒåŽŸå› ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:105 msgid "Made ``any_errors_fatal`` inheritable from play to task and all other objects in between." msgstr "``any_errors_fatal`` をプレイã‹ã‚‰ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ä»–ã®ã‚ªãƒ–ジェクトã¸ç¶™æ‰¿ã§ãるよã†ã«ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:110 #: ../../rst/porting_guides/porting_guide_2.3.rst:115 #: ../../rst/porting_guides/porting_guide_2.3.rst:157 #: ../../rst/porting_guides/porting_guide_2.3.rst:162 #: ../../rst/porting_guides/porting_guide_2.4.rst:74 msgid "No major changes in this version." msgstr "ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯å¤§ããªå¤‰æ›´ãŒã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.3.rst:113 #: ../../rst/porting_guides/porting_guide_2.4.rst:84 #: ../../rst/porting_guides/porting_guide_2.5.rst:168 #: ../../rst/porting_guides/porting_guide_2.6.rst:34 #: ../../rst/porting_guides/porting_guide_2.7.rst:168 #: ../../rst/porting_guides/porting_guide_2.8.rst:382 #: ../../rst/porting_guides/porting_guide_2.9.rst:122 #: ../../rst/porting_guides/porting_guide_4.rst:102 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:105 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:82 msgid "Modules removed" msgstr "削除ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/porting_guides/porting_guide_2.3.rst:118 #: ../../rst/porting_guides/porting_guide_2.4.rst:91 #: ../../rst/porting_guides/porting_guide_2.5.rst:194 #: ../../rst/porting_guides/porting_guide_2.6.rst:40 #: ../../rst/porting_guides/porting_guide_2.6.rst:86 #: ../../rst/porting_guides/porting_guide_2.7.rst:174 #: ../../rst/porting_guides/porting_guide_2.8.rst:393 #: ../../rst/porting_guides/porting_guide_2.9.rst:139 #: ../../rst/porting_guides/porting_guide_4.rst:110 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:113 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:90 msgid "Deprecation notices" msgstr "éžæŽ¨å¥¨ã®ãŠçŸ¥ã‚‰ã›" #: ../../rst/porting_guides/porting_guide_2.3.rst:120 msgid "The following modules will be removed in Ansible 2.5. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.5 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.3.rst:122 msgid "ec2_vpc" msgstr "ec2_vpc" #: ../../rst/porting_guides/porting_guide_2.3.rst:123 msgid "cl_bond" msgstr "cl_bond" #: ../../rst/porting_guides/porting_guide_2.3.rst:124 msgid "cl_bridge" msgstr "cl_bridge" #: ../../rst/porting_guides/porting_guide_2.3.rst:125 msgid "cl_img_install" msgstr "cl_img_install" #: ../../rst/porting_guides/porting_guide_2.3.rst:126 msgid "cl_interface" msgstr "cl_interface" #: ../../rst/porting_guides/porting_guide_2.3.rst:127 msgid "cl_interface_policy" msgstr "cl_interface_policy" #: ../../rst/porting_guides/porting_guide_2.3.rst:128 msgid "cl_license" msgstr "cl_license" #: ../../rst/porting_guides/porting_guide_2.3.rst:129 msgid "cl_ports" msgstr "cl_ports" #: ../../rst/porting_guides/porting_guide_2.3.rst:130 msgid "nxos_mtu use :ref:`nxos_system ` instead" msgstr "nxos_mtu ã¯ã€ä»£ã‚り㫠:ref:`nxos_system ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:134 msgid "These modules may no longer have documentation in the current release. Please see the `Ansible 2.3 module documentation `_ if you need to know how they worked for porting your playbooks." msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ç¾åœ¨ã®ãƒªãƒªãƒ¼ã‚¹ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Playbook ã®ç§»æ¤æ–¹æ³•を把æ¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€`Ansible 2.3 モジュールドキュメント `_ を確èªã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.3.rst:144 msgid "AWS lambda" msgstr "AWS ラムダ" #: ../../rst/porting_guides/porting_guide_2.3.rst:145 msgid "Previously ignored changes that only affected one parameter. Existing deployments may have outstanding changes that this bug fix will apply." msgstr "以å‰ã¯ã€1 ã¤ã®ãƒ‘ラメーターã«ã®ã¿å½±éŸ¿ã™ã‚‹å¤‰æ›´ã‚’無視ã—ã¦ã„ã¾ã—ãŸã€‚既存ã®ãƒ‡ãƒ—ロイメントã§ã¯ã€ã“ã®ãƒã‚°ä¿®æ­£ãŒé©ç”¨ã•れる未処ç†ã®å¤‰æ›´ãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:149 msgid "Mount" msgstr "マウント" #: ../../rst/porting_guides/porting_guide_2.3.rst:151 msgid "Mount: Some fixes so bind mounts are not mounted each time the playbook runs." msgstr "マウント: Playbook ã®å®Ÿè¡Œæ™‚ã«ãƒã‚¤ãƒ³ãƒ‰ãƒžã‚¦ãƒ³ãƒˆãŒãƒžã‚¦ãƒ³ãƒˆã•れãªã„よã†ã«ã™ã‚‹ä¿®æ­£ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:165 #: ../../rst/porting_guides/porting_guide_2.4.rst:199 #: ../../rst/porting_guides/porting_guide_2.6.rst:107 #: ../../rst/porting_guides/porting_guide_2.7.rst:246 #: ../../rst/porting_guides/porting_guide_2.8.rst:575 #: ../../rst/porting_guides/porting_guide_2.9.rst:728 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:115 msgid "Networking" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°" #: ../../rst/porting_guides/porting_guide_2.3.rst:167 msgid "There have been a number of changes to number of changes to how Networking Modules operate." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é‹ç”¨æ–¹æ³•ã«ã€ã„ãã¤ã‹ã®å¤‰æ›´ãŒã‚りã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:169 #: ../../rst/porting_guides/porting_guide_2.4.rst:203 msgid "Playbooks should still use ``connection: local``." msgstr "Playbook ã¯å¼•ãç¶šã ``connection: local`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:171 msgid "The following changes apply to:" msgstr "以下ã®å¤‰æ›´ãŒé©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:173 msgid "dellos6" msgstr "dellos6" #: ../../rst/porting_guides/porting_guide_2.3.rst:174 msgid "dellos9" msgstr "dellos9" #: ../../rst/porting_guides/porting_guide_2.3.rst:175 msgid "dellos10" msgstr "dellos10" #: ../../rst/porting_guides/porting_guide_2.3.rst:176 msgid "eos" msgstr "eos" #: ../../rst/porting_guides/porting_guide_2.3.rst:177 msgid "ios" msgstr "ios" #: ../../rst/porting_guides/porting_guide_2.3.rst:178 msgid "iosxr" msgstr "iosxr" #: ../../rst/porting_guides/porting_guide_2.3.rst:179 msgid "junos" msgstr "junos" #: ../../rst/porting_guides/porting_guide_2.3.rst:180 msgid "sros" msgstr "sros" #: ../../rst/porting_guides/porting_guide_2.3.rst:181 msgid "vyos" msgstr "vyos" #: ../../rst/porting_guides/porting_guide_2.3.rst:184 msgid "Deprecation of top-level connection arguments" msgstr "ãƒˆãƒƒãƒ—ãƒ¬ãƒ™ãƒ«ã®æŽ¥ç¶šå¼•æ•°ã‚’éžæŽ¨å¥¨ã«ã™ã‚‹" #: ../../rst/porting_guides/porting_guide_2.3.rst:186 msgid "**OLD** In Ansible 2.2:" msgstr "Ansible 2.2 ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½**:" #: ../../rst/porting_guides/porting_guide_2.3.rst:199 msgid "Will result in:" msgstr "çµæžœã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:223 msgid "delegate_to vs ProxyCommand" msgstr "delegate_to 対 ProxyCommand" #: ../../rst/porting_guides/porting_guide_2.3.rst:225 msgid "The new connection framework for Network Modules in Ansible 2.3 that uses ``cli`` transport no longer supports the use of the ``delegate_to`` directive. In order to use a bastion or intermediate jump host to connect to network devices over ``cli`` transport, network modules now support the use of ``ProxyCommand``." msgstr "``cli`` トランスãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹ Ansible 2.3 ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ–°ã—ã„æŽ¥ç¶šãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã¯ã€``delegate_to`` ディレクティブã®ä½¿ç”¨ã‚’サãƒãƒ¼ãƒˆã—ãªããªã‚Šã¾ã—ãŸã€‚bastion ã¾ãŸã¯ä¸­é–“ジャンプホストを使用ã—㦠``cli`` トランスãƒãƒ¼ãƒˆã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ProxyCommand`` ã®ä½¿ç”¨ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:230 msgid "To use ``ProxyCommand`` configure the proxy settings in the Ansible inventory file to specify the proxy host via ``ansible_ssh_common_args``." msgstr "``ProxyCommand`` を使用ã™ã‚‹ã«ã¯ã€Ansible インベントリーファイルã§ãƒ—ロキシー設定を構æˆã—ã¦ã€``ansible_ssh_common_args`` を使用ã—ã¦ãƒ—ロキシーホストを指定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.3.rst:233 msgid "For details on how to do this see the :ref:`network proxy guide `." msgstr "ã“ã‚Œã‚’è¡Œã†æ–¹æ³•ã¯ã€ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ロキシーガイド `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:6 msgid "Ansible 2.4 Porting Guide" msgstr "Ansible 2.4 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.4.rst:8 msgid "This section discusses the behavioral changes between Ansible 2.3 and Ansible 2.4." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.3 ã‹ã‚‰ Ansible 2.4 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:13 msgid "We suggest you read this page along with `Ansible Changelog for 2.4 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.4 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:20 msgid "Python version" msgstr "Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/porting_guides/porting_guide_2.4.rst:22 msgid "Ansible will not support Python 2.4 or 2.5 on the target hosts anymore. Going forward, Python 2.6+ will be required on targets, as already is the case on the controller." msgstr "Ansible ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã§ Python 2.4 ã¾ãŸã¯ 2.5 ã«å¯¾å¿œã—ãªããªã‚Šã¾ã—ãŸã€‚今後ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¨åŒæ§˜ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã‚‚ Python 2.6 以é™ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:26 #: ../../rst/porting_guides/porting_guide_2.5.rst:242 #: ../../rst/porting_guides/porting_guide_2.9.rst:23 msgid "Inventory" msgstr "インベントリー" #: ../../rst/porting_guides/porting_guide_2.4.rst:28 msgid "Inventory has been refactored to be implemented via plugins and now allows for multiple sources. This change is mostly transparent to users." msgstr "インベントリーã¯ãƒ—ラグインã§å®Ÿè£…ã§ãるよã†ã«ãƒªãƒ•ァクタリングã•れã€è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®å¤‰æ›´ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã»ã¨ã‚“ã©ã‚ã‹ã‚Šã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:30 msgid "One exception is the ``inventory_dir``, which is now a host variable; previously it could only have one value so it was set globally. This means you can no longer use it early in plays to determine ``hosts:`` or similar keywords. This also changes the behaviour of ``add_hosts`` and the implicit localhost; because they no longer automatically inherit the global value, they default to ``None``. See the module documentation for more information." msgstr "1 ã¤ã®ä¾‹å¤–㯠``inventory_dir`` ã§ã€ã“れã¯ãƒ›ã‚¹ãƒˆå¤‰æ•°ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã¯ 1 ã¤ã®å€¤ã—ã‹æŒã¦ãªã‹ã£ãŸãŸã‚ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¨­å®šã•れã¦ã„ã¾ã—ãŸã€‚ã“れã¯ã€``hosts:`` ã‚„åŒæ§˜ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’決定ã™ã‚‹ãŸã‚ã«ãƒ—ãƒ¬ã‚¤ã®æ—©ã„段階ã§ãれを使用ã§ããªããªã£ãŸã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€``add_hosts`` ãŠã‚ˆã³æš—é»™ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã®å‹•作も変更ã•れã¾ã™ã€‚グローãƒãƒ«å€¤ã‚’自動的ã«ç¶™æ‰¿ã—ãªããªã£ãŸãŸã‚ã€ãƒ‡ãƒ•ォルト㧠``None`` ã¨ãªã‚Šã¾ã™ã€‚詳細ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:35 msgid "The ``inventory_file`` remains mostly unchanged, as it was always host specific." msgstr "``inventory_file`` ã¯å¸¸ã«ç‰¹å®šã®ãƒ›ã‚¹ãƒˆå›ºæœ‰ã®çŠ¶æ…‹ã§ã‚ã£ãŸãŸã‚ã€ã»ã¨ã‚“ã©å¤‰æ›´ã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:37 msgid "Since there is no longer a single inventory, the 'implicit localhost' doesn't get either of these variables defined." msgstr "インベントリー㌠1 ã¤ãªããªã‚‹ãŸã‚ã€ã€Œæš—黙的㪠localhostã€ã¯ã€ã“れらã®å¤‰æ•°ã®ã„ãšã‚Œã‹ãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:39 msgid "A bug was fixed with the inventory path/directory, which was defaulting to the current working directory. This caused ``group_vars`` and ``host_vars`` to be picked up from the current working directory instead of just adjacent to the playbook or inventory directory when a host list (comma separated host names) was provided as inventory." msgstr "インベントリーã®ãƒ‘ス/ディレクトリーã®ãƒ‡ãƒ•ォルトãŒç¾åœ¨ã®ãƒ¯ãƒ¼ã‚­ãƒ³ã‚°ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãªã£ã¦ã„ãŸãƒã‚°ãŒä¿®æ­£ã•れã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ã—ã¦ãƒ›ã‚¹ãƒˆãƒªã‚¹ãƒˆ (カンマã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒ›ã‚¹ãƒˆå) ãŒæä¾›ã•れãŸå ´åˆã«ã€``group_vars`` ã¨``host_vars`` ㌠Playbook やインベントリーã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«éš£æŽ¥ã™ã‚‹ã®ã§ã¯ãªãã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰é¸æŠžã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:42 msgid "Initial playbook relative group_vars and host_vars" msgstr "åˆæœŸ Playbook ã®ç›¸å¯¾çš„㪠group_vars ãŠã‚ˆã³ host_vars" #: ../../rst/porting_guides/porting_guide_2.4.rst:44 msgid "In Ansible versions prior to 2.4, the inventory system would maintain the context of the initial playbook that was executed. This allowed successively included playbooks from other directories to inherit group_vars and host_vars placed relative to the top level playbook file." msgstr "Ansible 2.4 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚·ã‚¹ãƒ†ãƒ ãŒã€æœ€åˆã«å®Ÿè¡Œã—㟠Playbook ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’ç¶­æŒã—ã¦ã„ã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰é€£ç¶šã—ã¦ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れ㟠Playbook ã¯ã€æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã® Playbook ファイルã«ç›¸å¯¾çš„ã«é…ç½®ã•れ㟠group_vars ã‚„ host_vars を継承ã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:46 msgid "Due to some behavioral inconsistencies, this functionality will not be included in the new inventory system starting with Ansible version 2.4." msgstr "一部ã®å‹•作上ã®ä¸æ•´åˆã«ã‚ˆã‚Šã€ã“ã®æ©Ÿèƒ½ã¯ Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以é™ã®æ–°è¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã«å«ã¾ã‚Œã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:49 msgid "Similar functionality can still be achieved by using vars_files, include_vars, or group_vars and host_vars placed relative to the inventory file." msgstr "åŒæ§˜ã®æ©Ÿèƒ½ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«ç›¸å¯¾çš„ã«é…ç½®ã•れ㟠vars_filesã€include_varsã€ã¾ãŸã¯ group_vars 㨠host_vars を使用ã—ã¦ã‚‚実ç¾ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:55 msgid "Specifying Inventory sources" msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®æŒ‡å®š" #: ../../rst/porting_guides/porting_guide_2.4.rst:57 msgid "Use of ``--inventory-file`` on the command line is now deprecated. Use ``--inventory`` or ``-i``. The associated ini configuration key, ``hostfile``, and environment variable, ``ANSIBLE_HOSTS``, are also deprecated. Replace them with the configuration key ``inventory`` and environment variable :envvar:`ANSIBLE_INVENTORY`." msgstr "コマンドラインã§ã® ``--inventory-file`` ã®ä½¿ç”¨ã¯æŽ¨å¥¨ã•れã¦ã„ã¾ã›ã‚“。``--inventory`` ã¾ãŸã¯``-i`` を使用ã—ã¦ãã ã•ã„。ã¾ãŸã€é–¢é€£ã™ã‚‹ ini 設定キー ``hostfile`` や環境変数 ``ANSIBLE_HOSTS`` ã‚‚éžæŽ¨å¥¨ã¨ãªã£ã¦ã„ã¾ã™ã€‚ã“れらã¯ã€è¨­å®šã‚­ãƒ¼ ``inventory`` ã¨ç’°å¢ƒå¤‰æ•° :envvar:`ANSIBLE_INVENTORY` ã§ç½®ãæ›ãˆã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:64 msgid "Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last one overriding all the previous ones. This behavior is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behavior." msgstr "ç¾åœ¨ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--tags`` (ã¾ãŸã¯ ``--skip-tags``) を複数回指定ã™ã‚‹ã¨ã€æœ€å¾Œã«æŒ‡å®šã—ãŸã‚¿ã‚°ãŒãã®å‰ã«æŒ‡å®šã—ãŸã™ã¹ã¦ã®ã‚¿ã‚°ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚ã“ã®å‹•ä½œã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。将æ¥çš„ã«ã¯ã€--tags を複数回指定ã—ãŸå ´åˆã€ã‚¿ã‚°ã¯çµ±åˆã•れã¾ã™ã€‚今後ã¯ã€1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--tags`` を複数回使用ã™ã‚‹ã¨ã€éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚``ansible.cfg`` ファイル㧠``merge_multiple_cli_tags`` オプションを True ã«è¨­å®šã™ã‚‹ã¨ã€æ–°ã—ã„å‹•ä½œãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:66 msgid "In 2.4, the default has change to merge the tags. You can enable the old overwriting behavior via the config option." msgstr "2.4 ã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¿ã‚°ã®ãƒžãƒ¼ã‚¸ãŒè¡Œã‚れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã®ä¸Šæ›¸ãã®å‹•作ã¯ã€è¨­å®šã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:68 msgid "In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behavior." msgstr "2.5 ã§ã¯ã€è¤‡æ•°ã® ``--tags`` オプションãŒãƒžãƒ¼ã‚¸ã•れã€å¤ã„å‹•ä½œã«æˆ»ã‚‹æ–¹æ³•ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:79 #: ../../rst/porting_guides/porting_guide_2.7.rst:156 #: ../../rst/porting_guides/porting_guide_2.8.rst:366 msgid "Major changes in popular modules are detailed here" msgstr "一般的ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸»ãªå¤‰æ›´ç‚¹ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:81 msgid "The :ref:`win_shell ` and :ref:`win_command ` modules now properly preserve quoted arguments in the command-line. Tasks that attempted to work around the issue by adding extra quotes/escaping may need to be reworked to remove the superfluous escaping. See `Issue 23019 `_ for additional detail." msgstr ":ref:`win_shell ` モジュールãŠã‚ˆã³ :ref:`win_command ` モジュールã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«é©åˆ‡ã«å¼•用符ã§å›²ã¾ã‚ŒãŸå¼•æ•°ã‚’ä¿æŒã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚余分ãªå¼•用符やエスケープを追加ã—ã¦ã“ã®å•題を回é¿ã—よã†ã¨ã—ãŸã‚¿ã‚¹ã‚¯ã¯ã€ä¸å¿…è¦ãªã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã‚’å–り除ããŸã‚ã«å†ä½œæ¥­ãŒå¿…è¦ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。詳細㯠`Issue 23019 `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:86 #: ../../rst/porting_guides/porting_guide_2.5.rst:170 #: ../../rst/porting_guides/porting_guide_2.6.rst:36 #: ../../rst/porting_guides/porting_guide_2.7.rst:170 #: ../../rst/porting_guides/porting_guide_2.8.rst:384 #: ../../rst/porting_guides/porting_guide_2.9.rst:124 #: ../../rst/porting_guides/porting_guide_4.rst:104 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:107 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:84 msgid "The following modules no longer exist:" msgstr "次ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚‚ã†å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.4.rst:88 msgid "None" msgstr "ãªã—" #: ../../rst/porting_guides/porting_guide_2.4.rst:93 msgid "The following modules will be removed in Ansible 2.8. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.8 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:95 msgid "azure, use :ref:`azure_rm_virtualmachine `, which uses the new Resource Manager SDK." msgstr "azure - æ–°ã—ã„ Resource Manager SDK を使用ã™ã‚‹ :ref:`azure_rm_virtualmachine ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:96 msgid "win_msi, use :ref:`win_package ` instead" msgstr "win_msi - 代ã‚り㫠:ref:`win_package ` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:101 msgid "The :ref:`win_get_url ` module has the dictionary ``win_get_url`` in its results deprecated, its content is now also available directly in the resulting output, like other modules. This dictionary will be removed in Ansible 2.8." msgstr ":ref:`win_get_url ` モジュールã§ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ ``win_get_url`` ãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒæ§˜ã«ã€ç”Ÿæˆã•れãŸå‡ºåŠ›ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒç›´æŽ¥åˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¯ Ansible 2.8 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:102 msgid "The :ref:`win_unzip ` module no longer includes the dictionary ``win_unzip`` in its results; the contents are now included directly in the resulting output, like other modules." msgstr ":ref:`win_unzip ` モジュールã®çµæžœã«ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ ``win_unzip`` ãŒå«ã¾ã‚Œãªããªã‚Šã¾ã—ãŸã€‚コンテンツã¯ã€ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚ˆã†ã«ã€å‡ºåŠ›ã«ç›´æŽ¥è¿½åŠ ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:103 msgid "The :ref:`win_package ` module return values ``exit_code`` and ``restart_required`` have been deprecated in favor of ``rc`` and ``reboot_required`` respectively. The deprecated return values will be removed in Ansible 2.6." msgstr ":ref:`win_package ` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ ``exit_code`` 㨠``restart_required`` ãŒéžæŽ¨å¥¨ã«ãªã‚Šã€``rc`` ãŠã‚ˆã³ ``reboot_required`` ãŒãれãžã‚ŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚éžæŽ¨å¥¨ã®æˆ»ã‚Šå€¤ã¯ Ansible 2.6 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:109 msgid "A new way to configure and document plugins has been introduced. This does not require changes to existing setups but developers should start adapting to the new infrastructure now. More details will be available in the developer documentation for each plugin type." msgstr "プラグインを設定ã—ã¦æ–‡æ›¸åŒ–ã™ã‚‹æ–¹æ³•ãŒæ–°ãŸã«å°Žå…¥ã•れã¾ã—ãŸã€‚ã“れã«ã¯ã€æ—¢å­˜ã®è¨­å®šã¸ã®å¤‰æ›´ã¯å¿…è¦ã‚りã¾ã›ã‚“ãŒã€é–‹ç™ºè€…ã¯æ–°ã—ã„インフラストラクãƒãƒ£ãƒ¼ã¸ã®é©åˆã‚’é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€å„プラグインタイプã®é–‹ç™ºè€…ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:112 msgid "Vars plugin changes" msgstr "vars プラグインã®å¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_2.4.rst:114 msgid "There have been many changes to the implementation of vars plugins, but both users and developers should not need to change anything to keep current setups working. Developers should consider changing their plugins take advantage of new features." msgstr "vars プラグインã®å®Ÿè£…ã«ã¯å¤šãã®å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã¦ã„ã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚開発者もã€ç¾åœ¨ã®è¨­å®šã‚’ç¶­æŒã™ã‚‹ãŸã‚ã«ä½•も変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。開発者ã¯ã€æ–°æ©Ÿèƒ½ã‚’利用ã—ãŸãƒ—ラグインã®å¤‰æ›´ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:116 msgid "The most notable difference to users is that vars plugins now get invoked on demand instead of at inventory build time. This should make them more efficient for large inventories, especially when using a subset of the hosts." msgstr "ユーザーã«ã¨ã£ã¦æœ€ã‚‚é‡è¦ãªç›¸é•点ã¯ã€vars プラグインãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æ§‹ç¯‰æ™‚ã§ã¯ãªãã€å¿…è¦ã«å¿œã˜ã¦èµ·å‹•ã•れるよã†ã«ãªã£ãŸã“ã¨ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¤§è¦æ¨¡ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€ç‰¹ã«ãƒ›ã‚¹ãƒˆã®ã‚µãƒ–セットを使用ã™ã‚‹å ´åˆã«ã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:120 msgid "This also creates a difference with group/host_vars when using them adjacent to playbooks. Before, the 'first' playbook loaded determined the variables; now the 'current' playbook does. We are looking to fix this soon, since 'all playbooks' in the path should be considered for variable loading." msgstr "ã¾ãŸã€group/host_vars ã‚’ Playbook ã«éš£æŽ¥ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã«ã‚‚é•ã„ãŒç”Ÿã˜ã¾ã™ã€‚以å‰ã¯ã€ã€Œæœ€åˆã«ã€èª­ã¿è¾¼ã¾ã‚ŒãŸ Playbook ãŒå¤‰æ•°ã‚’決定ã—ã¦ã„ã¾ã—ãŸãŒã€ç¾åœ¨ã¯ã€Œç¾åœ¨ã®ã€Playbook ãŒæ±ºå®šã—ã¦ã„ã¾ã™ã€‚変数ã®èª­ã¿è¾¼ã¿ã«ã¯ã€ãƒ‘スã«å«ã¾ã‚Œã‚‹ã€Œã™ã¹ã¦ã® Playbookã€ã‚’考慮ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€è¿‘々ã“ã®å•題を修正ã—ãŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:121 msgid "In 2.4.1 we added a toggle to allow you to control this behaviour, 'top' will be the pre 2.4, 'bottom' will use the current playbook hosting the task and 'all' will use them all from top to bottom." msgstr "2.4.1 ã§ã¯ã€ã“ã®å‹•作を制御ã™ã‚‹ãŸã‚ã®ãƒˆã‚°ãƒ«ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚「topã€ã¯ 2.4 以å‰ã«ãªã‚Šã€ã€Œbottomã€ã¯ã‚¿ã‚¹ã‚¯ã‚’ホストã™ã‚‹ç¾åœ¨ã® Playbook を使用ã—ã€ã€Œallã€ã¯ä¸Šã‹ã‚‰é †ã«ã“れらを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:125 msgid "Inventory plugins" msgstr "inventory プラグイン" #: ../../rst/porting_guides/porting_guide_2.4.rst:127 msgid "Developers should start migrating from hardcoded inventory with dynamic inventory scripts to the new Inventory Plugins. The scripts will still work via the ``script`` inventory plugin but Ansible development efforts will now concentrate on writing plugins rather than enhancing existing scripts." msgstr "開発者ã¯ã€å‹•的インベントリーリスクリプトã«ã‚ˆã‚‹ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰ã€æ–°ã—ã„インベントリースクリプトã¸ã®ç§»è¡Œã‚’é–‹å§‹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚スクリプトã¯ã€``script`` インベントリープラグインを介ã—ã¦å¼•ãç¶šã動作ã—ã¾ã™ãŒã€Ansible ã®é–‹ç™ºåŠªåŠ›ã¯ã€æ—¢å­˜ã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æ”¹è‰¯ã§ã¯ãªãã€ãƒ—ラグインã®ä½œæˆã«é›†ä¸­ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:129 msgid "Both users and developers should look into the new plugins because they are intended to alleviate the need for many of the hacks and workarounds found in the dynamic inventory scripts." msgstr "ユーザーãŠã‚ˆã³é–‹ç™ºè€…ã¯ã€å‹•的インベントリースクリプトã«ã‚る多ãã®ãƒãƒƒã‚­ãƒ³ã‚°ã‚„回é¿ç­–を低減ã™ã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨é–‹ç™ºè€…ã¯æ–°ã—ã„プラグインを調ã¹ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:134 msgid "Users:" msgstr "ユーザー:" #: ../../rst/porting_guides/porting_guide_2.4.rst:136 msgid "Callbacks are now using the new configuration system. Users should not need to change anything as the old system still works, but you might see a deprecation notice if any callbacks used are not inheriting from the built in classes. Developers need to update them as stated below." msgstr "コールãƒãƒƒã‚¯ã¯æ–°ã—ã„設定システムを使用ã—ã¦ã„ã¾ã™ã€‚å¤ã„システムã¯ã¾ã æ©Ÿèƒ½ã—ã¦ã„ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä½•も変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€ä½¿ç”¨ã•れã¦ã„るコールãƒãƒƒã‚¯ãŒçµ„ã¿è¾¼ã¿ã‚¯ãƒ©ã‚¹ã‚’継承ã—ã¦ã„ãªã„å ´åˆã¯ã€éžæŽ¨å¥¨ã®é€šçŸ¥ãŒè¡¨ç¤ºã•れるã‹ã‚‚ã—れã¾ã›ã‚“。開発者ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:139 msgid "Developers:" msgstr "開発者:" #: ../../rst/porting_guides/porting_guide_2.4.rst:141 msgid "If your callback does not inherit from ``CallbackBase`` (directly or indirectly via another callback), it will still work, but issue a deprecation notice. To avoid this and ensure it works in the future change it to inherit from ``CallbackBase`` so it has the new options handling methods and properties. You can also implement the new options handling methods and properties but that won't automatically inherit changes added in the future. You can look at ``CallbackBase`` itself and/or ``AnsiblePlugin`` for details." msgstr "コールãƒãƒƒã‚¯ãŒ ``CallbackBase`` を継承ã—ã¦ã„ãªã„å ´åˆ (直接ã¾ãŸã¯ä»–ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’経由ã—ã¦é–“接的ã«)ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯å‹•作ã—ã¾ã™ãŒã€éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“れを回é¿ã—ã€å°†æ¥ã‚‚確実ã«å‹•作ã•ã›ã‚‹ã«ã¯ã€``CallbackBase`` を継承ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã—ã€æ–°ã—ã„オプション処ç†ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨ãƒ—ロパティーをæŒã¤ã‚ˆã†ã«ã—ã¾ã™ã€‚æ–°ã—ã„オプション処ç†ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚„プロパティーを実装ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€å°†æ¥è¿½åŠ ã•れる変更を自動的ã«ç¶™æ‰¿ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。詳細ã¯ã€``CallbackBase`` 自体や``AnsiblePlugin`` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:144 msgid "Any callbacks inheriting from other callbacks might need to also be updated to contain the same documented options as the parent or the options won't be available. This is noted in the developer guide." msgstr "ä»–ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‹ã‚‰ç¶™æ‰¿ã•れるコールãƒãƒƒã‚¯ã‚‚æ›´æ–°ã—ã¦ã€è¦ªã¨åŒã˜è¨˜è¿°ã•れãŸã‚ªãƒ—ションをå«ã‚€ã‹ã€ã¾ãŸã¯ã‚ªãƒ—ションを利用ã§ããªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€é–‹ç™ºè€…ガイドã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:148 msgid "Template lookup plugin: Escaping Strings" msgstr "テンプレートルックアッププラグイン: 文字列ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—" #: ../../rst/porting_guides/porting_guide_2.4.rst:150 msgid "Prior to Ansible 2.4, backslashes in strings passed to the template lookup plugin would be escaped automatically. In 2.4, users are responsible for escaping backslashes themselves. This change brings the template lookup plugin inline with the template module so that the same backslash escaping rules apply to both." msgstr "Ansible 2.4 よりå‰ã¯ã€ãƒ†ãƒ³ãƒ—レート㮠lookup ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã«æ¸¡ã•れる文字列ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã¯è‡ªå‹•çš„ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¦ã„ã¾ã—ãŸã€‚2.4 ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è‡ªåˆ†ã§ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープã™ã‚‹è²¬ä»»ãŒã‚りã¾ã™ã€‚ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ãƒ†ãƒ³ãƒ—レート㮠lookup プラグインãŒãƒ†ãƒ³ãƒ—レートモジュールã¨ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚Šã€åŒã˜ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ルールãŒä¸¡æ–¹ã«é©ç”¨ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:155 msgid "If you have a template lookup like this::" msgstr "以下ã®ã‚ˆã†ãªãƒ†ãƒ³ãƒ—レート検索ãŒã‚ã‚‹å ´åˆ:" #: ../../rst/porting_guides/porting_guide_2.4.rst:160 msgid "**OLD** In Ansible 2.3 (and earlier) :file:`template.j2` would look like this:" msgstr "Ansible 2.3 以å‰ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½** :file:`template.j2` ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:166 msgid "**NEW** In Ansible 2.4 it should be changed to look like this:" msgstr "**新機能** Ansible 2.4 ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:173 msgid "Tests" msgstr "テスト" #: ../../rst/porting_guides/porting_guide_2.4.rst:176 msgid "Tests succeeded/failed" msgstr "ãƒ†ã‚¹ãƒˆã®æˆåŠŸ/失敗" #: ../../rst/porting_guides/porting_guide_2.4.rst:178 msgid "Prior to Ansible version 2.4, a task return code of ``rc`` would override a return code of ``failed``. In version 2.4, both ``rc`` and ``failed`` are used to calculate the state of the task. Because of this, test plugins ``succeeded``/``failed``` have also been changed. This means that overriding a task failure with ``failed_when: no`` will result in ``succeeded``/``failed`` returning ``True``/``False``. For example::" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以å‰ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã®ãƒªã‚¿ãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‰ãŒ ``rc`` ã®å ´åˆã¯ã€ãƒªã‚¿ãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‰ãŒ ``failed`` ã®å ´åˆã‚ˆã‚Šã‚‚優先ã•れã¦ã„ã¾ã—ãŸã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã®çŠ¶æ…‹ã‚’è¨ˆç®—ã™ã‚‹ã®ã« ``rc`` ã¨``failed`` ã®ä¸¡æ–¹ãŒä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ãŸã‚ã€ãƒ†ã‚¹ãƒˆç”¨ãƒ—ラグイン ``succeeded``/``failed``` も変更ã—ã¾ã—ãŸã€‚ã“れã¯ã€``failed_when: no`` ã§ã‚¿ã‚¹ã‚¯ã®å¤±æ•—を上書ãã™ã‚‹ã¨ ``succeeded``/``failed`` ㌠``True``/``False`` ã¨ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã°æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:196 msgid "As we can see from the example above, in Ansible 2.3 ``succeeded``/``failed`` only checked the value of ``rc``." msgstr "上記ã®ä¾‹ã§åˆ†ã‹ã‚‹ã‚ˆã†ã«ã€Ansible 2.3 ``succeeded``/``failed`` ã§ã¯ ``rc`` ã®å€¤ã®ã¿ã‚’確èªã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:201 msgid "There have been a number of changes to how Networking Modules operate." msgstr "Networking モジュールã®å‹•作ã«è¤‡æ•°ã®å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:206 msgid "Persistent Connection" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶š" #: ../../rst/porting_guides/porting_guide_2.4.rst:208 msgid "The configuration variables ``connection_retries`` and ``connect_interval`` which were added in Ansible 2.3 are now deprecated. For Ansible 2.4 and later use ``connection_retry_timeout``." msgstr "Ansible 2.3 ã§è¿½åŠ ã•れãŸè¨­å®šå¤‰æ•° ``connection_retries`` ãŠã‚ˆã³ ``connect_interval`` ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚Ansible 2.4 以é™ã§ã¯ã€``connection_retry_timeout`` ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:210 msgid "To control timeouts use ``command_timeout`` rather than the previous top level ``timeout`` variable under ``[default]``" msgstr "タイムアウトを制御ã™ã‚‹ã«ã¯ã€``[default]`` ã®ä¸‹ã®ä»¥å‰ã®æœ€ä¸Šä½ã§ã‚ã‚‹ ``timeout`` ã§ã¯ãªãã€``command_timeout`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:212 msgid "See :ref:`Ansible Network debug guide ` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`Ansible Network debug guide `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.4.rst:216 msgid "Configuration" msgstr "設定" #: ../../rst/porting_guides/porting_guide_2.4.rst:219 msgid "The configuration system has had some major changes. Users should be unaffected except for the following:" msgstr "設定システムã«å¤§ããªå¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã¾ã—ãŸã€‚以下ã®ç‚¹ã‚’除ãã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å½±éŸ¿ã‚’å—ã‘ãªã„ã¯ãšã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:221 msgid "All relative paths defined are relative to the `ansible.cfg` file itself. Previously they varied by setting. The new behavior should be more predictable." msgstr "定義ã•れã¦ã„る相対パスã¯ã™ã¹ã¦ã€`ansible.cfg` ファイル自体ã«ç›¸å¯¾çš„ã§ã™ã€‚以å‰ã¯è¨­å®šã«ã‚ˆã‚Šå¤‰åŒ–ã—ã¦ã„ã¾ã—ãŸã€‚æ–°ã—ã„動作ã¯ã‚ˆã‚Šäºˆæ¸¬ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:222 msgid "A new macro ``{{CWD}}`` is available for paths, which will make paths relative to the 'current working directory', this is unsafe but some users really want to rely on this behaviour." msgstr "æ–°ã—ã„マクロ ``{{CWD}}`` ãŒãƒ‘スã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã“ã®ãƒ‘スã§ã¯ã€ã€Œç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€ã«ç›¸å¯¾çš„ãªãƒ‘スãŒä½œæˆã•れã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ã“れを使用ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:225 msgid "Developers that were working directly with the previous API should revisit their usage as some methods (for example, ``get_config``) were kept for backwards compatibility but will warn users that the function has been deprecated." msgstr "以å‰ã® API を直接使用ã—ã¦ã„ãŸé–‹ç™ºè€…ã¯ã€ä½¿ç”¨æ–¹æ³•を見直ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ã„ãã¤ã‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ (ãŸã¨ãˆã° ``get_config``) ã¯å¾Œæ–¹äº’æ›æ€§ã®ãŸã‚ã«æ®‹ã•れã¦ã„ã¾ã™ãŒã€ãã®é–¢æ•°ãŒéžæŽ¨å¥¨ã§ã‚ã‚‹ã“ã¨ãŒè­¦å‘Šã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.4.rst:227 msgid "The new configuration has been designed to minimize the need for code changes in core for new plugins. The plugins just need to document their settings and the configuration system will use the documentation to provide what they need. This is still a work in progress; currently only 'callback' and 'connection' plugins support this. More details will be added to the specific plugin developer guides." msgstr "æ–°ã—ã„設定ã¯ã€æ–°ã—ã„プラグインã®ãŸã‚ã«ã‚³ã‚¢ã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹å¿…è¦æ€§ã‚’最å°é™ã«æŠ‘ãˆã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚プラグインã¯è¨­å®šã‚’文書化ã™ã‚‹ã ã‘ã§ã‚ˆãã€è¨­å®šã‚·ã‚¹ãƒ†ãƒ ã¯ãã®æ–‡æ›¸ã‚’使用ã—ã¦å¿…è¦ãªã‚‚ã®ã‚’æä¾›ã—ã¾ã™ã€‚ã“れã¯ã¾ã ä½œæ¥­ä¸­ã§ã€ç¾åœ¨ã¯ã€Œcallbackã€ãƒ—ラグインã¨ã€Œconnectionã€ãƒ—ラグインã®ã¿ãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚詳細ã¯ã€å„プラグインã®é–‹ç™ºè€…ガイドã«è¿½åŠ ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:5 msgid "Ansible 2.5 Porting Guide" msgstr "Ansible 2.5 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.5.rst:7 msgid "This section discusses the behavioral changes between Ansible 2.4 and Ansible 2.5." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.4 ã‹ã‚‰ Ansible 2.5 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:11 msgid "We suggest you read this page along with `Ansible Changelog for 2.5 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.5 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:21 msgid "Dynamic includes and attribute inheritance" msgstr "ダイナミックインクルードã¨å±žæ€§ã®ç¶™æ‰¿" #: ../../rst/porting_guides/porting_guide_2.5.rst:23 msgid "In Ansible version 2.4, the concept of dynamic includes (``include_tasks``), as opposed to static imports (``import_tasks``), was introduced to clearly define the differences in how ``include`` works between dynamic and static includes." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 ã§ã¯ã€é™çš„インãƒãƒ¼ãƒˆ (``import_tasks``) ã¨ã¯å¯¾ç…§çš„ã«ã€å‹•的インクルード (``include_tasks``) ã¨ã„ã†æ¦‚念ãŒå°Žå…¥ã•れã€å‹•的インクルードã¨é™çš„インクルード㮠``include`` ã®å‹•作ã®é•ã„ãŒæ˜Žç¢ºã«å®šç¾©ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:25 msgid "All attributes applied to a dynamic ``include_*`` would only apply to the include itself, while attributes applied to a static ``import_*`` would be inherited by the tasks within." msgstr "動的㪠``include_*`` ã«é©ç”¨ã•れるã™ã¹ã¦ã®å±žæ€§ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã«ã®ã¿é©ç”¨ã•れã¾ã™ã€‚é™çš„㪠``import_*`` ã«é©ç”¨ã•れる属性ã¯ã€ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦ç¶™æ‰¿ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:28 msgid "This separation was only partially implemented in Ansible version 2.4. As of Ansible version 2.5, this work is complete and the separation now behaves as designed; attributes applied to an ``include_*`` task will not be inherited by the tasks within." msgstr "ã“ã®åˆ†é›¢ã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 ã§ã¯éƒ¨åˆ†çš„ã«ã—ã‹å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã§ã¯ã€ã“ã®ä½œæ¥­ãŒå®Œäº†ã—ã€è¨­è¨ˆé€šã‚Šã«å‹•作ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚``include_*`` タスクã«é©ç”¨ã•れãŸå±žæ€§ã¯ã€ãã®ä¸­ã®ã‚¿ã‚¹ã‚¯ã«ã¯ç¶™æ‰¿ã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.5.rst:30 msgid "To achieve an outcome similar to how Ansible worked prior to version 2.5, playbooks should use an explicit application of the attribute on the needed tasks, or use blocks to apply the attribute to many tasks. Another option is to use a static ``import_*`` when possible instead of a dynamic task." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 以å‰ã® Ansible ã¨åŒæ§˜ã®çµæžœã‚’å¾—ã‚‹ãŸã‚ã«ã¯ã€Playbook ã§ã¯ã€å¿…è¦ãªã‚¿ã‚¹ã‚¯ã«å±žæ€§ã‚’明示的ã«é©ç”¨ã™ã‚‹ã‹ã€ãƒ–ロックを使用ã—ã¦å¤šãã®ã‚¿ã‚¹ã‚¯ã«å±žæ€§ã‚’é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€å‹•çš„ãªã‚¿ã‚¹ã‚¯ã§ã¯ãªãã€å¯èƒ½ãªé™ã‚Šé™çš„㪠``import_*`` を使用ã™ã‚‹ã¨ã„ã†æ–¹æ³•ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:32 msgid "**OLD** In Ansible 2.4:" msgstr "Ansible 2.4 ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½**:" #: ../../rst/porting_guides/porting_guide_2.5.rst:40 #: ../../rst/porting_guides/porting_guide_2.5.rst:62 msgid "Included file:" msgstr "åŒæ¢±ã•れるファイル:" #: ../../rst/porting_guides/porting_guide_2.5.rst:52 msgid "**NEW** In Ansible 2.5:" msgstr "Ansible 2.5 ã«ãŠã‘ã‚‹ **新機能**:" #: ../../rst/porting_guides/porting_guide_2.5.rst:54 msgid "Including task:" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã‚’å«ã¿ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:76 msgid "The relevant change in those examples is, that in Ansible 2.5, the included file defines the tag ``distro_include`` again. The tag is not inherited automatically." msgstr "ã“れらã®ä¾‹ã«é–¢é€£ã™ã‚‹å¤‰æ›´ç‚¹ã¯ã€Ansible 2.5 ã§ã¯ã€åŒæ¢±ã•れるファイル㧠``distro_include`` ã¨ã„ã†ã‚¿ã‚°ãŒå†ã³å®šç¾©ã•れã¦ã„ã‚‹ã“ã¨ã§ã™ã€‚ã“ã®ã‚¿ã‚°ã¯è‡ªå‹•çš„ã«ã¯ç¶™æ‰¿ã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.5.rst:79 msgid "Fixed handling of keywords and inline variables" msgstr "キーワードãŠã‚ˆã³ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³å¤‰æ•°ã®å‡¦ç†ã‚’修正ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:81 msgid "We made several fixes to how we handle keywords and 'inline variables', to avoid conflating the two. Unfortunately these changes mean you must specify whether `name` is a keyword or a variable when calling roles. If you have playbooks that look like this::" msgstr "キーワードã¨ã€Œã‚¤ãƒ³ãƒ©ã‚¤ãƒ³å¤‰æ•°ã€ã®æ‰±ã„方をã„ãã¤ã‹ä¿®æ­£ã—ã€ä¸¡è€…ã®æ··åŒã‚’é¿ã‘るよã†ã«ã—ã¾ã—ãŸã€‚残念ãªãŒã‚‰ã€ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™éš›ã« `name` ãŒã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ãªã®ã‹å¤‰æ•°ãªã®ã‹ã‚’指定ã—ãªã‘れã°ãªã‚‰ãªããªã‚Šã¾ã—ãŸã€‚以下ã®ã‚ˆã†ãª Playbook ã‚’ãŠæŒã¡ã®æ–¹ã¯ã€ã”注æ„ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:86 msgid "You will run into errors because Ansible reads name in this context as a keyword. Beginning in 2.5, if you want to use a variable name that is also a keyword, you must explicitly declare it as a variable for the role::" msgstr "ã“ã®æ–‡è„ˆã§ã¯ã€Ansible ã¯åå‰ã‚’キーワードã¨ã—ã¦èª­ã¿å–ã‚‹ãŸã‚ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚2.5 以é™ã§ã¯ã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ã‚‚ã‚る変数åを使用ã—ãŸã„å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®å¤‰æ•°ã¨ã—ã¦æ˜Žç¤ºçš„ã«å®£è¨€ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:92 msgid "For a full list of keywords see :ref:`playbook_keywords`." msgstr "キーワードã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€ã€Œ:ref:`playbook_keywords`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:95 msgid "Migrating from with_X to loop" msgstr "with_X ã‹ã‚‰ loop ã¸ã®ç§»è¡Œ" #: ../../rst/user_guide/shared_snippets/with2loop.txt:1 msgid "In most cases, loops work best with the ``loop`` keyword instead of ``with_X`` style loops. The ``loop`` syntax is usually best expressed using filters instead of more complex use of ``query`` or ``lookup``." msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ«ãƒ¼ãƒ—ã¯ã€``with_X`` スタイルã®ãƒ«ãƒ¼ãƒ—ã§ã¯ãªãã€``loop`` ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§æœ€é©ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚``loop`` æ§‹æ–‡ã¯é€šå¸¸ã€``query`` ã‚„ ``lookup`` ã®è¤‡é›‘ãªä½¿ç”¨ã§ã¯ãªãã€ãƒ•ィルターを使用ã—ã¦è¡¨ç¾ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:3 msgid "These examples show how to convert many common ``with_`` style loops to ``loop`` and filters." msgstr "以下ã®ä¾‹ã§ã¯ã€ä¸€èˆ¬çš„㪠``with_`` スタイルã®ãƒ«ãƒ¼ãƒ—ã‚’ ``loop`` ãŠã‚ˆã³ãƒ•ィルターã«å¤‰æ›ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:6 msgid "with_list" msgstr "with_list" #: ../../rst/user_guide/shared_snippets/with2loop.txt:8 msgid "``with_list`` is directly replaced by ``loop``." msgstr "``with_list`` ã¯ã€ç›´æŽ¥ ``loop`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:27 msgid "with_items" msgstr "with_items" #: ../../rst/user_guide/shared_snippets/with2loop.txt:29 msgid "``with_items`` is replaced by ``loop`` and the ``flatten`` filter." msgstr "``with_items`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``flatten`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:44 msgid "with_indexed_items" msgstr "with_indexed_items" #: ../../rst/user_guide/shared_snippets/with2loop.txt:46 msgid "``with_indexed_items`` is replaced by ``loop``, the ``flatten`` filter and ``loop_control.index_var``." msgstr "``with_indexed_items`` ã¯ã€``loop``ã€``flatten`` フィルターã€ãŠã‚ˆã³ ``loop_control.index_var`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:63 msgid "with_flattened" msgstr "with_flattened" #: ../../rst/user_guide/shared_snippets/with2loop.txt:65 msgid "``with_flattened`` is replaced by ``loop`` and the ``flatten`` filter." msgstr "``with_flattened`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``flatten`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:80 msgid "with_together" msgstr "with_together" #: ../../rst/user_guide/shared_snippets/with2loop.txt:82 msgid "``with_together`` is replaced by ``loop`` and the ``zip`` filter." msgstr "``with_together`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``zip`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:98 msgid "Another example with complex data" msgstr "複雑ãªãƒ‡ãƒ¼ã‚¿ãŒã‚る別ã®ä¾‹" #: ../../rst/user_guide/shared_snippets/with2loop.txt:113 msgid "with_dict" msgstr "with_dict" #: ../../rst/user_guide/shared_snippets/with2loop.txt:115 msgid "``with_dict`` can be substituted by ``loop`` and either the ``dictsort`` or ``dict2items`` filters." msgstr "``with_dict`` ã¯ã€``loop`` フィルターã¨ã€``dictsort`` フィルターã¾ãŸã¯ ``dict2items`` フィルターã®ã„ãšã‚Œã‹ã®ãƒ•ィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:135 msgid "with_sequence" msgstr "with_sequence" #: ../../rst/user_guide/shared_snippets/with2loop.txt:137 msgid "``with_sequence`` is replaced by ``loop`` and the ``range`` function, and potentially the ``format`` filter." msgstr "``with_sequence`` ã¯ã€``loop`` 関数㨠``range`` ã®é–¢æ•°ã€ãã—ã¦æ½œåœ¨çš„ã«ã¯ ``format`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:153 msgid "with_subelements" msgstr "with_subelements" #: ../../rst/user_guide/shared_snippets/with2loop.txt:155 msgid "``with_subelements`` is replaced by ``loop`` and the ``subelements`` filter." msgstr "``with_subelements`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``subelements`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:172 msgid "with_nested/with_cartesian" msgstr "with_nested/with_cartesian" #: ../../rst/user_guide/shared_snippets/with2loop.txt:174 msgid "``with_nested`` and ``with_cartesian`` are replaced by loop and the ``product`` filter." msgstr "``with_nested`` ã¨``with_cartesian`` ã¯ã€ãƒ«ãƒ¼ãƒ—㨠``product`` ã®ãƒ•ィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:191 msgid "with_random_choice" msgstr "with_random_choice" #: ../../rst/user_guide/shared_snippets/with2loop.txt:193 msgid "``with_random_choice`` is replaced by just use of the ``random`` filter, without need of ``loop``." msgstr "``with_random_choice`` ã¯ã€``random`` フィルターを使用ã™ã‚‹ã ã‘ã§ã€``loop`` ã‚’å¿…è¦ã¨ã›ãšã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:104 msgid "Jinja tests used as filters" msgstr "フィルターã¨ã—ã¦ä½¿ç”¨ã•れる Jinja テスト" #: ../../rst/porting_guides/porting_guide_2.5.rst:106 msgid "Using Ansible-provided jinja tests as filters will be removed in Ansible 2.9." msgstr "Ansible ãŒæä¾›ã™ã‚‹ jinja テストをフィルターã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã€Ansible 2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:108 msgid "Prior to Ansible 2.5, jinja tests included within Ansible were most often used as filters. The large difference in use is that filters are referenced as ``variable | filter_name`` while jinja tests are referenced as ``variable is test_name``." msgstr "Ansible 2.5 以å‰ã¯ã€Ansible ã«å«ã¾ã‚Œã‚‹ jinja テストã¯ã€ã»ã¨ã‚“ã©ãŒãƒ•ィルターã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸã€‚使用方法ã®å¤§ããªé•ã„ã¯ã€ãƒ•ィルター㯠``variable | filter_name`` ã¨ã—ã¦å‚ç…§ã•れるã®ã«å¯¾ã—ã€jinja テスト㯠``variable is test_name`` ã¨ã—ã¦å‚ç…§ã•れるã“ã¨ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:110 msgid "Jinja tests are used for comparisons, while filters are used for data manipulation and have different applications in jinja. This change is to help differentiate the concepts for a better understanding of jinja, and where each can be appropriately used." msgstr "jinja ãƒ†ã‚¹ãƒˆã¯æ¯”較ã®ãŸã‚ã«ä½¿ç”¨ã•れã€ãƒ•ィルターã¯ãƒ‡ãƒ¼ã‚¿æ“作ã®ãŸã‚ã«ä½¿ç”¨ã•れã€ãれãžã‚Œç”¨é€”ãŒç•°ãªã‚Šã¾ã™ã€‚ã“ã®å¤‰æ›´ã¯ã€jinja ã®ç†è§£ã‚’æ·±ã‚ã‚‹ãŸã‚ã«æ¦‚念を区別ã—ã€ãれãžã‚ŒãŒé©åˆ‡ã«ä½¿ç”¨ã•れる場所を示ã™ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:112 msgid "As of Ansible 2.5, using an Ansible provided jinja test with filter syntax, will display a deprecation error." msgstr "Ansible 2.5 以é™ã§ã¯ã€Ansible ãŒæä¾›ã™ã‚‹ jinja テストをフィルター構文ã§ä½¿ç”¨ã™ã‚‹ã¨ã€éžæŽ¨å¥¨ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:114 msgid "**OLD** In Ansible 2.4 (and earlier) the use of an Ansible included jinja test would likely look like this:" msgstr "Ansible 2.4 (以å‰) ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½** Ansible ã«å«ã¾ã‚Œã‚‹ jinja テストを使用ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:122 msgid "**NEW** In Ansible 2.5 it should be changed to look like this:" msgstr "**新機能** Ansible 2.5 ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:130 msgid "In addition to the deprecation warnings, many new tests have been introduced that are aliases of the old tests. These new tests make more sense grammatically with the jinja test syntax, such as the new ``successful`` test which aliases ``success``." msgstr "éžæŽ¨å¥¨ã®è­¦å‘Šã«åŠ ãˆã¦ã€å¤ã„テストã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã‚る多ãã®æ–°ã—ã„テストãŒå°Žå…¥ã•れã¾ã—ãŸã€‚ã“ã‚Œã‚‰ã®æ–°ã—ã„テストã¯ã€``success`` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’設定ã—ãŸæ–°ã—ã„ ``successful`` テストã®ã‚ˆã†ã«ã€jinja ã®ãƒ†ã‚¹ãƒˆæ§‹æ–‡ã§ã¯æ–‡æ³•çš„ã«æ„味をãªã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:136 msgid "See :ref:`playbooks_tests` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`playbooks_tests`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:138 msgid "Additionally, a script was created to assist in the conversion for tests using filter syntax to proper jinja test syntax. This script has been used to convert all of the Ansible integration tests to the correct format. There are a few limitations documented, and all changes made by this script should be evaluated for correctness before executing the modified playbooks. The script can be found at `https://github.com/ansible/ansible/blob/devel/hacking/fix_test_syntax.py `_." msgstr "ã•らã«ã€ãƒ•ィルター構文を使ã£ãŸãƒ†ã‚¹ãƒˆã‚’é©åˆ‡ãª jinja テスト構文ã«å¤‰æ›ã™ã‚‹ãŸã‚ã®ã‚¹ã‚¯ãƒªãƒ—トも作æˆã—ã¾ã—ãŸã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—トを使用ã—ã¦ã€Ansible ã®ã™ã¹ã¦ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’æ­£ã—ã„å½¢å¼ã«å¤‰æ›ã—ã¾ã—ãŸã€‚ã„ãã¤ã‹ã®åˆ¶é™äº‹é …ãŒè¨˜è¼‰ã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã«ã‚ˆã‚‹å¤‰æ›´ã¯ã€ä¿®æ­£ã—㟠Playbook を実行ã™ã‚‹å‰ã«æ­£ã—ã„ã‹ã©ã†ã‹è©•価ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—ト㯠`https://github.com/ansible/ansible/blob/devel/hacking/fix_test_syntax.py `_ ã«ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:141 msgid "Ansible fact namespacing" msgstr "Ansible ã®ãƒ•ァクトåå‰ç©ºé–“設定" #: ../../rst/porting_guides/porting_guide_2.5.rst:143 msgid "Ansible facts, which have historically been written to names like ``ansible_*`` in the main facts namespace, have been placed in their own new namespace, ``ansible_facts.*`` For example, the fact ``ansible_distribution`` is now best queried through the variable structure ``ansible_facts.distribution``." msgstr "Ansible ã®ãƒ•ァクトã¯ã€ã“れã¾ã§ä¸»ãªãƒ•ァクトã®åå‰ç©ºé–“ã§ ``ansible_*`` ã®ã‚ˆã†ãªåå‰ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã—ãŸãŒã€ç‹¬è‡ªã®æ–°ã—ã„åå‰ç©ºé–“ ``ansible_facts.*`` ã«é…ç½®ã•れã¾ã—ãŸã€‚ãŸã¨ãˆã°ã€ãƒ•ァクト ``ansible_distribution`` ã¯ã€å¤‰æ•°æ§‹é€  ``ansible_facts.distribution`` を通ã˜ã¦æœ€ã‚‚よã照会ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:148 msgid "A new configuration variable, ``inject_facts_as_vars``, has been added to ansible.cfg. Its default setting, 'True', keeps the 2.4 behavior of facts variables being set in the old ``ansible_*`` locations (while also writing them to the new namespace). This variable is expected to be set to 'False' in a future release. When ``inject_facts_as_vars`` is set to False, you must refer to ansible_facts through the new ``ansible_facts.*`` namespace." msgstr "ansible.cfg ã«ã€æ–°ã—ã„設定変数 ``inject_facts_as_vars`` ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚デフォルトã®è¨­å®šã¯ã€ŒTrueã€ã§ã€2.4 ã®å‹•作ã§ã‚るファクト変数ãŒå¤ã„ ``ansible_*`` ã®å ´æ‰€ã«è¨­å®šã•れãŸã¾ã¾ã«ãªã‚Šã¾ã™ (æ–°ã—ã„åå‰ç©ºé–“ã«ã‚‚書ãè¾¼ã¾ã‚Œã¾ã™)。ã“ã®å¤‰æ•°ã¯ã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€ŒFalseã€ã«è¨­å®šã•れる予定ã§ã™ã€‚``inject_facts_as_vars`` ㌠False ã«è¨­å®šã•れるã¨ã€æ–°ã—ã„ ``ansible_facts.*`` åå‰ç©ºé–“を通ã—㦠ansible_facts ã‚’å‚ç…§ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:158 msgid "Major changes in popular modules are detailed here." msgstr "一般的ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸»ãªå¤‰æ›´ç‚¹ã¯ã€ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:161 msgid "github_release" msgstr "github_release" #: ../../rst/porting_guides/porting_guide_2.5.rst:163 msgid "In Ansible versions 2.4 and older, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module reported state as ``skipped``. In Ansible version 2.5 and later, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module now reports state as ``changed``." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 以å‰ã§ã¯ã€``create_release`` 状態を使用ã—㦠GitHub リリースを作æˆã™ã‚‹ã¨ã€``github_release`` モジュールã®çŠ¶æ…‹ãŒ ``skipped`` ã¨å ±å‘Šã—ã¾ã™ã€‚Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 以é™ã§ã¯ã€``create_release`` 状態を使用ã—㦠GitHub リリースを作æˆã—ãŸå¾Œã«ã€``github_release`` モジュールã®çŠ¶æ…‹ãŒ ``changed`` ã¨ã—ã¦å ±å‘Šã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:172 msgid "nxos_mtu use :ref:`nxos_system `'s ``system_mtu`` option or :ref:`nxos_interface ` instead" msgstr "nxos_mtu ã¯ã€ä»£ã‚り㫠:ref:`nxos_system `ã® ``system_mtu`` オプションã¾ãŸã¯ :ref:`nxos_interface ` を使用ã—ã¾ã™" #: ../../rst/porting_guides/porting_guide_2.5.rst:173 msgid "cl_interface_policy use :ref:`nclu ` instead" msgstr "cl_interface_policy ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:174 msgid "cl_bridge use :ref:`nclu ` instead" msgstr "cl_bridge ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:175 msgid "cl_img_install use :ref:`nclu ` instead" msgstr "cl_img_install ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:176 msgid "cl_ports use :ref:`nclu ` instead" msgstr "cl_ports ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:177 msgid "cl_license use :ref:`nclu ` instead" msgstr "cl_license ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:178 msgid "cl_interface use :ref:`nclu ` instead" msgstr "cl_interface ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:179 msgid "cl_bond use :ref:`nclu ` instead" msgstr "cl_bond ã¯ã€ä»£ã‚り㫠:ref:`nclu ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:180 msgid "ec2_vpc use :ref:`ec2_vpc_net ` along with supporting modules :ref:`ec2_vpc_igw `, :ref:`ec2_vpc_route_table `, :ref:`ec2_vpc_subnet `, :ref:`ec2_vpc_dhcp_option `, :ref:`ec2_vpc_nat_gateway `, :ref:`ec2_vpc_nacl ` instead." msgstr "ec2_vpc ã¯ã€:ref:`ec2_vpc_net ` ã¨ã‚µãƒãƒ¼ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« :ref:`ec2_vpc_igw `ã€:ref:`ec2_vpc_route_table `ã€:ref:`ec2_vpc_subnet `ã€:ref:`ec2_vpc_dhcp_option `ã€:ref:`ec2_vpc_nat_gateway `ã€:ref:`ec2_vpc_nacl ` を代ã‚りã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:181 msgid "ec2_ami_search use :ref:`ec2_ami_facts ` instead" msgstr "ec2_ami_search ã¯ã€ä»£ã‚り㫠:ref:`ec2_ami_facts ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:182 msgid "docker use :ref:`docker_container ` and :ref:`docker_image ` instead" msgstr "docker ã¯ã€ä»£ã‚り㫠:ref:`docker_container ` ãŠã‚ˆã³ :ref:`docker_image ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:186 msgid "These modules may no longer have documentation in the current release. Please see the `Ansible 2.4 module documentation `_ if you need to know how they worked for porting your playbooks." msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ç¾åœ¨ã®ãƒªãƒªãƒ¼ã‚¹ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Playbook ã®ç§»æ¤æ–¹æ³•を把æ¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€`Ansible 2.4 モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `_ を確èªã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:196 msgid "The following modules will be removed in Ansible 2.9. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:198 msgid "Apstra's ``aos_*`` modules are deprecated as they do not work with AOS 2.1 or higher. See new modules at `https://github.com/apstra `_." msgstr "AOS 2.1 以é™ã§ã¯å‹•作ã—ãªã„ãŸã‚ã€Apstra ã® ``aos_*`` モジュールã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚`https://github.com/apstra `_ ã§æ–°ã—ã„モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:199 msgid "nxos_ip_interface use :ref:`nxos_l3_interface ` instead." msgstr "nxos_ip_interface ã¯ã€ä»£ã‚り㫠:ref:`nxos_l3_interface ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:200 msgid "nxos_portchannel use :ref:`nxos_linkagg ` instead." msgstr "nxos_portchannel ã¯ã€ä»£ã‚り㫠:ref:`nxos_linkagg ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:201 msgid "nxos_switchport use :ref:`nxos_l2_interface ` instead." msgstr "nxos_switchport ã¯ã€ä»£ã‚り㫠:ref:`nxos_l2_interface ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:202 msgid "panos_security_policy use :ref:`panos_security_rule ` instead." msgstr "panos_security_policy ã¯ã€ä»£ã‚り㫠:ref:`panos_security_rule ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:203 msgid "panos_nat_policy use :ref:`panos_nat_rule ` instead." msgstr "panos_nat_policy ã¯ã€ä»£ã‚り㫠:ref:`panos_nat_rule ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:204 msgid "vsphere_guest use :ref:`vmware_guest ` instead." msgstr "vsphere_guest ã¯ã€ä»£ã‚り㫠:ref:`vmware_guest ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:209 msgid "The :ref:`stat ` and :ref:`win_stat ` modules have changed the default of the option ``get_md5`` from ``true`` to ``false``." msgstr ":ref:`stat ` モジュールãŠã‚ˆã³ :ref:`win_stat ` モジュールã¯ã€ã‚ªãƒ—ション``get_md5`` ã®ãƒ‡ãƒ•ォルトを ``true`` ã‹ã‚‰``false`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:211 msgid "This option will be removed starting with Ansible version 2.9. The options ``get_checksum: True`` and ``checksum_algorithm: md5`` can still be used if an MD5 checksum is desired." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 以é™ã§å‰Šé™¤ã•れã¾ã™ã€‚MD5 ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒå¿…è¦ãªå ´åˆã¯ã€``get_checksum: True`` 㨠``checksum_algorithm: md5`` ã®ã‚ªãƒ—ションを引ãç¶šã使用ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:215 msgid "``osx_say`` module was renamed into :ref:`say `." msgstr "``osx_say`` モジュールã®åå‰ãŒ :ref:`say ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:216 msgid "Several modules which could deal with symlinks had the default value of their ``follow`` option changed as part of a feature to `standardize the behavior of follow `_:" msgstr "シンボリックリンクを処ç†ã™ã‚‹ã“ã¨ãŒã§ãる複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€``follow`` オプションã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ãŒæ©Ÿèƒ½ã®ä¸€éƒ¨ã¨ã—㦠`standardize the behavior of follow `_ ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:220 msgid "The :ref:`file module ` changed from ``follow=False`` to ``follow=True`` because its purpose is to modify the attributes of a file and most systems do not allow attributes to be applied to symlinks, only to real files." msgstr ":ref:`file モジュール ` ㌠``follow=False`` ã‹ã‚‰ ``follow=True`` ã«å¤‰æ›´ã«ãªã£ãŸã®ã¯ã€ãã®ç›®çš„ãŒãƒ•ァイルã®å±žæ€§ã‚’変更ã™ã‚‹ã“ã¨ã§ã‚りã€ã»ã¨ã‚“ã©ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯å±žæ€§ã‚’シンボリックリンクã«é©ç”¨ã™ã‚‹ã“ã¨ã¯ã§ããšã€å®Ÿéš›ã®ãƒ•ァイルã«ã®ã¿é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã‚‰ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:223 msgid "The :ref:`replace module ` had its ``follow`` parameter removed because it inherently modifies the content of an existing file so it makes no sense to operate on the link itself." msgstr ":ref:`replace module ` ã¯ã€æ—¢å­˜ãƒ•ァイルã®å†…容を本質的ã«å¤‰æ›´ã™ã‚‹ãŸã‚ã€``follow`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ã—ãŸãŒã£ã¦ã€ãƒªãƒ³ã‚¯è‡ªä½“ã§æ“作ã™ã‚‹ã“ã¨ã¯é©åˆ‡ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.5.rst:226 msgid "The :ref:`blockinfile module ` had its ``follow`` parameter removed because it inherently modifies the content of an existing file so it makes no sense to operate on the link itself." msgstr ":ref:`blockinfile module ` ã¯ã€æ—¢å­˜ãƒ•ァイルã®å†…容を本質的ã«å¤‰æ›´ã™ã‚‹ãŸã‚ã€``follow`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ã—ãŸãŒã£ã¦ã€ãƒªãƒ³ã‚¯è‡ªä½“ã§æ“作ã™ã‚‹ã“ã¨ã¯é©åˆ‡ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.5.rst:229 msgid "In Ansible-2.5.3, the :ref:`template module ` became more strict about its ``src`` file being proper utf-8. Previously, non-utf8 contents in a template module src file would result in a mangled output file (the non-utf8 characters would be replaced with a unicode replacement character). Now, on Python2, the module will error out with the message, \"Template source files must be utf-8 encoded\". On Python3, the module will first attempt to pass the non-utf8 characters through verbatim and fail if that does not succeed." msgstr "Ansible-2.5.3 ã§ã¯ã€:ref:`template module ` ãŒã€ãã® ``src`` ファイルãŒé©åˆ‡ãª utf-8 ã§ã‚ã‚‹ã“ã¨ã«ã¤ã„ã¦ã€ã‚ˆã‚Šå޳坆ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¾ã§ã¯ã€ãƒ†ãƒ³ãƒ—レートモジュール㮠src ファイル㫠utf8 ã§ãªã„コンテンツãŒã‚ã‚‹ã¨ã€å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ–‡å­—化ã‘ã—ã¦ã„ã¾ã—㟠(utf8 ã§ãªã„文字㯠unicode ã®ç½®æ›æ–‡å­—ã§ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™)。ç¾åœ¨ã€Python2 ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ŒTemplate source files must be utf-8 encodedã€ã¨ã„ã†ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Python3 ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã¾ãšéž utf8 文字をãã®ã¾ã¾é€šéŽã•ã›ã‚ˆã†ã¨ã—ã€ãã‚ŒãŒæˆåŠŸã—ãªã„å ´åˆã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:239 msgid "As a developer, you can now use 'doc fragments' for common configuration options on plugin types that support the new plugin configuration system." msgstr "開発者ã¯ã€æ–°ã—ã„プラグイン設定システムをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラグインタイプã®å…±é€šè¨­å®šã‚ªãƒ—ションã«ã€Œdoc フラグメントã€ã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:244 msgid "Inventory plugins have been fine tuned, and we have started to add some common features:" msgstr "インベントリープラグインã¯å¾®èª¿æ•´ã•れã€å…±é€šã®æ©Ÿèƒ½ã‚’追加ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:246 msgid "The ability to use a cache plugin to avoid costly API/DB queries is disabled by default. If using inventory scripts, some may already support a cache, but it is outside of Ansible's knowledge and control. Moving to the internal cache will allow you to use Ansible's existing cache refresh/invalidation mechanisms." msgstr "cache プラグインを使用ã—ã¦ã€ã‚³ã‚¹ãƒˆã®ã‹ã‹ã‚‹ API/DB クエリーを回é¿ã™ã‚‹ãŸã‚ã«ã™ã‚‹æ©Ÿèƒ½ã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚インベントリースクリプトを使用ã—ã¦ã„ã‚‹å ´åˆã€ä¸€éƒ¨ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã™ã§ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ãれ㯠Ansible ã®çŸ¥è­˜ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã®ç¯„囲外ã¨ãªã‚Šã¾ã™ã€‚内部キャッシュã«ç§»è¡Œã™ã‚‹ã“ã¨ã§ã€Ansible ã®æ—¢å­˜ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒªãƒ•レッシュ/無効化メカニズムを使用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:250 msgid "A new 'auto' plugin, enabled by default, that can automatically detect the correct plugin to use IF that plugin is using our 'common YAML configuration format'. The previous host_list, script, yaml and ini plugins still work as they did, the auto plugin is now the last one we attempt to use. If you had customized the enabled plugins you should revise the setting to include the new auto plugin." msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã‚‹æ–°ã—ã„「autoã€ãƒ—ラグイン。プラグインãŒã€Œå…±é€šã® YAML 設定形å¼ã€ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã«ä½¿ç”¨ã™ã‚‹æ­£ã—ã„ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã§ãã¾ã™ã€‚以å‰ã® host_listã€scriptã€yamlã€ãŠã‚ˆã³ ini プラグインã¯å¼•ãç¶šãæ©Ÿèƒ½ã—ã¾ã™ãŒã€è‡ªå‹•ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæœ€å¾Œã«ä½¿ç”¨ã‚’試ã¿ã¾ã™ã€‚有効ãªãƒ—ラグインをカスタマイズã—ãŸå ´åˆã¯ã€æ–°ã—ã„自動プラグインをå«ã‚るよã†ã«è¨­å®šã‚’変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:255 msgid "Shell" msgstr "シェル" #: ../../rst/porting_guides/porting_guide_2.5.rst:257 msgid "Shell plugins have been migrated to the new plugin configuration framework. It is now possible to customize more settings, and settings which were previously 'global' can now also be overridden using host specific variables." msgstr "シェルプラグインãŒã€æ–°ã—ã„プラグイン設定フレームワークã«ç§»è¡Œã—ã¾ã—ãŸã€‚より多ãã®è¨­å®šã‚’カスタマイズã§ãるよã†ã«ãªã‚Šã€ã“れã¾ã§ã€Œã‚°ãƒ­ãƒ¼ãƒãƒ«ã€ã ã£ãŸè¨­å®šã‚’ã€ãƒ›ã‚¹ãƒˆå›ºæœ‰ã®å¤‰æ•°ã‚’使用ã—ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:259 msgid "For example, ``system_temps`` is a new setting that allows you to control what Ansible will consider a 'system temporary dir'. This is used when escalating privileges for a non-administrative user. Previously this was hardcoded to '/tmp', which some systems cannot use for privilege escalation. This setting now defaults to ``[ '/var/tmp', '/tmp']``." msgstr "ãŸã¨ãˆã°ã€``system_temps`` ã¯ã€Ansible ãŒã€Œã‚·ã‚¹ãƒ†ãƒ ä¸€æ™‚ディレクトリーã€ã¨ã¿ãªã™ã‚‚ã®ã‚’制御ã™ã‚‹ã“ã¨ãŒã§ãã‚‹æ–°ã—ã„設定ã§ã™ã€‚ã“れã¯ã€ç®¡ç†è€…ã§ã¯ãªã„ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©é™ã‚’昇格ã•ã›ã‚‹éš›ã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¾ã§ã¯ã€Œ/tmpã€ã«ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã¾ã—ãŸãŒã€ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦ã¯ç‰¹æ¨©ã®æ˜‡æ ¼ã«ä½¿ç”¨ã§ããªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルト㯠``[ '/var/tmp', '/tmp']`` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:261 msgid "Another new setting is ``admin_users`` which allows you to specify a list of users to be considered 'administrators'. Previously this was hardcoded to ``root``. It now it defaults to ``[root, toor, admin]``. This information is used when choosing between your ``remote_temp`` and ``system_temps`` directory." msgstr "ã‚‚ã†ä¸€ã¤ã®æ–°ã—ã„設定㯠``admin_users`` ã§ã€ã€Œç®¡ç†è€…ã€ã¨ã¿ãªã•れるユーザーã®ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¾ã§ã¯ã€``root`` ã«ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã¾ã—ãŸã€‚ç¾åœ¨ã¯ãƒ‡ãƒ•ォルト㧠``[root, toor, admin]`` ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“ã®æƒ…å ±ã¯ã€``remote_temp`` 㨠``system_temps`` ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’é¸æŠžã™ã‚‹éš›ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:263 msgid "For a full list, check the shell plugin you are using, the default shell plugin is ``sh``." msgstr "全一覧ã«ã¤ã„ã¦ã¯ã€ä½¿ç”¨ã—ã¦ã„るシェルプラグインを確èªã—ã¦ãã ã•ã„。デフォルトã®ã‚·ã‚§ãƒ«ãƒ—ラグイン㯠``sh`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:265 msgid "Those that had to work around the global configuration limitations can now migrate to a per host/group settings, but also note that the new defaults might conflict with existing usage if the assumptions don't correlate to your environment." msgstr "グローãƒãƒ«è¨­å®šã®åˆ¶é™ã‚’回é¿ã™ã‚‹å¿…è¦ãŒã‚ã£ãŸå ´åˆã¯ã€ãƒ›ã‚¹ãƒˆ/グループã”ã¨ã®è¨­å®šã«ç§»è¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€æ–°ã—ã„デフォルト設定ãŒãŠå®¢æ§˜ã®ç’°å¢ƒã¨é–¢é€£ã—ã¦ã„ãªã„å ´åˆã¯ã€æ—¢å­˜ã®ä½¿ç”¨æ–¹æ³•ã¨ç«¶åˆã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:269 msgid "Filter" msgstr "フィルター" #: ../../rst/porting_guides/porting_guide_2.5.rst:271 msgid "The lookup plugin API now throws an error if a non-iterable value is returned from a plugin. Previously, numbers or other non-iterable types returned by a plugin were accepted without error or warning. This change was made because plugins should always return a list. Please note that plugins that return strings and other non-list iterable values will not throw an error, but may cause unpredictable behavior. If you have a custom lookup plugin that does not return a list, you should modify it to wrap the return values in a list." msgstr "プラグインã‹ã‚‰å復ä¸å¯èƒ½å€¤ãŒè¿”ã•れãŸå ´åˆã¯ã€lookup プラグイン API ãŒã‚¨ãƒ©ãƒ¼ã‚’発生ã•ã›ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã¯ã€ãƒ—ラグインã«ã‚ˆã£ã¦è¿”ã•れる数値ã¾ãŸã¯ãã®ä»–ã®å復ä¸å¯èƒ½ãªåž‹ã¯ã€ã‚¨ãƒ©ãƒ¼ã‚„警告ãªã—ã«å—ã‘入れられã¦ã„ã¾ã—ãŸã€‚プラグインã¯å¸¸ã«ãƒªã‚¹ãƒˆã‚’è¿”ã™å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ã“ã®å¤‰æ›´ãŒè¡Œã‚れã¾ã—ãŸã€‚文字列やãã®ä»–ã®ãƒªã‚¹ãƒˆã•れã¦ã„ãªã„å復å¯èƒ½ãªå€¤ã‚’è¿”ã™ãƒ—ラグインã¯ã‚¨ãƒ©ãƒ¼ã‚’発生ã•ã›ã¾ã›ã‚“ãŒã€äºˆæœŸã—ãªã„動作を引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。リストを返ã•ãªã„カスタム lookup プラグインãŒã‚ã‚‹å ´åˆã¯ã€æˆ»ã‚Šå€¤ã‚’リストã§ãƒ©ãƒƒãƒ—ã™ã‚‹ã‚ˆã†ã«ãƒ—ラグインを変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:275 msgid "Lookup" msgstr "Lookup" #: ../../rst/porting_guides/porting_guide_2.5.rst:277 msgid "A new option was added to lookup plugins globally named ``error`` which allows you to control how errors produced by the lookup are handled, before this option they were always fatal. Valid values for this option are ``warn``, ``ignore`` and ``strict``. See the :ref:`lookup ` page for more details." msgstr "æ–°ã—ã„オプションã¯ã€``error`` ã¨ã„ã†åå‰ã®ãƒ—ラグインをグローãƒãƒ«ã§æ¤œç´¢ã™ã‚‹ãŸã‚ã«è¿½åŠ ã•れã¾ã—ãŸã€‚ã“ã®ãƒ—ラグインã§ã¯ã€ã“ã®ã‚ªãƒ—ションãŒå¸¸ã«è‡´å‘½çš„ã«ãªã‚‹å‰ã«ã€æ¤œç´¢ã«ã‚ˆã£ã¦ç”Ÿæˆã•れるエラーã®å‡¦ç†æ–¹æ³•を制御ã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ‰åйãªå€¤ã¯ ``warn``ã€``ignore``ã€ãŠã‚ˆã³ ``strict`` ã§ã™ã€‚詳細ã¯ã€Œ:ref:`lookup `ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:283 #: ../../rst/porting_guides/porting_guide_2.6.rst:104 #: ../../rst/porting_guides/porting_guide_2.6.rst:109 #: ../../rst/porting_guides/porting_guide_2.7.rst:243 #: ../../rst/porting_guides/porting_guide_2.7.rst:248 msgid "No notable changes." msgstr "主ãªå¤‰æ›´ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.5.rst:286 msgid "Network" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" #: ../../rst/porting_guides/porting_guide_2.5.rst:289 msgid "Expanding documentation" msgstr "ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ‹¡å¼µ" #: ../../rst/porting_guides/porting_guide_2.5.rst:291 msgid "We're expanding the network documentation. There's new content and a :ref:`new Ansible Network landing page`. We will continue to build the network-related documentation moving forward." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’æ‹¡å……ã—ã¦ã„ã¾ã™ã€‚æ–°ã—ã„コンテンツ㨠:ref:`new Ansible Network landing page` ãŒã‚りã¾ã™ã€‚今後もãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’充実ã•ã›ã¦ã„ã予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:294 msgid "Top-level connection arguments will be removed in 2.9" msgstr "最上ä½ãƒ¬ãƒ™ãƒ«ã®æŽ¥ç¶šå¼•数㌠2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:296 msgid "Top-level connection arguments like ``username``, ``host``, and ``password`` are deprecated and will be removed in version 2.9." msgstr "``username``ã€``host``ã€``password`` ãªã©ã®æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®æŽ¥ç¶šå¼•æ•°ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:298 #: ../../rst/porting_guides/porting_guide_2.9.rst:745 msgid "**OLD** In Ansible < 2.4" msgstr "Ansible 2.4 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½**" #: ../../rst/porting_guides/porting_guide_2.5.rst:311 msgid "The deprecation warnings reflect this schedule. The task above, run in Ansible 2.5, will result in:" msgstr "éžæŽ¨å¥¨ã®è­¦å‘Šã«ã¯ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå映ã•れã¾ã™ã€‚上記ã®ã‚¿ã‚¹ã‚¯ã‚’ Ansible 2.5 ã§å®Ÿè¡Œã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªçµæžœã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:322 msgid "We recommend using the new connection types ``network_cli`` and ``netconf`` (see below), using standard Ansible connection properties, and setting those properties in inventory by group. As you update your playbooks and inventory files, you can easily make the change to ``become`` for privilege escalation (on platforms that support it). For more information, see the :ref:`using become with network modules` guide and the :ref:`platform documentation`." msgstr "æ–°ã—ã„æŽ¥ç¶šã‚¿ã‚¤ãƒ— ``network_cli`` ãŠã‚ˆã³ ``netconf`` (下記å‚ç…§) を使用ã—ã€Ansible ã®æ¨™æº–çš„ãªæŽ¥ç¶šãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ãƒ¼ã‚’ä½¿ç”¨ã—ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ãれらã®ãƒ—ロパティをグループã”ã¨ã«è¨­å®šã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Playbook やインベントリーファイルを更新ã™ã‚‹éš›ã«ã€ç‰¹æ¨©æ˜‡æ ¼ã®ãŸã‚ã« ``become`` ã¸ã®å¤‰æ›´ã‚’ç°¡å˜ã«è¡Œã†ã“ã¨ãŒã§ãã¾ã™ (サãƒãƒ¼ãƒˆã—ã¦ã„るプラットフォームã®å ´åˆ)。詳細ã¯ã€ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—㟠become ã®ä½¿ç”¨`ã€ã‚¬ã‚¤ãƒ‰ãŠã‚ˆã³ã€Œ:ref:`プラットフォームドキュメント`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:325 msgid "Adding persistent connection types ``network_cli`` and ``netconf``" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ— ``network_cli`` ãŠã‚ˆã³ ``netconf`` ã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_2.5.rst:327 msgid "Ansible 2.5 introduces two top-level persistent connection types, ``network_cli`` and ``netconf``. With ``connection: local``, each task passed the connection parameters, which had to be stored in your playbooks. With ``network_cli`` and ``netconf`` the playbook passes the connection parameters once, so you can pass them at the command line if you prefer. We recommend you use ``network_cli`` and ``netconf`` whenever possible. Note that eAPI and NX-API still require ``local`` connections with ``provider`` dictionaries. See the :ref:`platform documentation` for more information. Unless you need a ``local`` connection, update your playbooks to use ``network_cli`` or ``netconf`` and to specify your connection variables with standard Ansible connection variables:" msgstr "Ansible 2.5 ã§ã¯ã€``network_cli`` ã¨``netconf`` ã¨ã„ㆠ2 ã¤ã®æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ãŒå°Žå…¥ã•れã¾ã—ãŸã€‚``connection: local`` ã§ã¯ã€å„ã‚¿ã‚¹ã‚¯ãŒæŽ¥ç¶šãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’æ¸¡ã—ã¦ã„ãŸãŸã‚ã€Playbook ã«ä¿å­˜ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã—ãŸã€‚``network_cli`` ãŠã‚ˆã³ ``netconf`` ã§ã¯ã€Playbook ãŒæŽ¥ç¶šãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã‚’ä¸€åº¦ã ã‘渡ã™ãŸã‚ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ‘ラメーターを渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚å¯èƒ½ãªé™ã‚Š ``network_cli`` 㨠``netconf`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ãªãŠã€eAPI 㨠NX-API ã§ã¯ã€``provider`` ディレクトリーを使用ã—㟠``local`` ã®æŽ¥ç¶šãŒã¾ã å¿…è¦ã§ã™ã€‚詳細ã¯ã€Œ:ref:`プラットフォームドキュメント`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。``local`` ã®æŽ¥ç¶šãŒå¿…è¦ãªå ´åˆã‚’除ãã€``network_cli`` ã¾ãŸã¯ ``netconf`` を使用ã—ã€Ansible ã®æ¨™æº–çš„ãªæŽ¥ç¶šå¤‰æ•°ã‚’æŒ‡å®šã™ã‚‹ã‚ˆã†ã« Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.5.rst:330 #: ../../rst/porting_guides/porting_guide_2.5.rst:379 msgid "**OLD** In Ansible 2.4" msgstr "Ansible 2.4 ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½**" #: ../../rst/porting_guides/porting_guide_2.5.rst:349 #: ../../rst/porting_guides/porting_guide_2.5.rst:385 msgid "**NEW** In Ansible 2.5" msgstr "Ansible 2.5 ã«ãŠã‘ã‚‹ **新機能**" #: ../../rst/porting_guides/porting_guide_2.5.rst:365 msgid "Using a provider dictionary with either ``network_cli`` or ``netconf`` will result in a warning." msgstr "``network_cli`` ã¾ãŸã¯ ``netconf`` ã®ã„ãšã‚Œã‹ã§ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’使用ã™ã‚‹ã¨ã€è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:369 msgid "Developers: Shared Module Utilities Moved" msgstr "Developers: 共有モジュールã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒç§»å‹•ã—ã¾ã—ãŸ" #: ../../rst/porting_guides/porting_guide_2.5.rst:371 msgid "Beginning with Ansible 2.5, shared module utilities for network modules moved to ``ansible.module_utils.network``." msgstr "Ansible 2.5 以é™ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å…±æœ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒ ``ansible.module_utils.network`` ã«ç§»å‹•ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:373 msgid "Platform-independent utilities are found in ``ansible.module_utils.network.common``" msgstr "プラットフォームã«ä¾å­˜ã—ãªã„ユーティリティーã¯ã€``ansible.module_utils.network.common`` ã«ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:375 msgid "Platform-specific utilities are found in ``ansible.module_utils.network.{{ platform }}``" msgstr "プラットフォーム固有ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã¯ã€``ansible.module_utils.network.{{ platform }}`` ã«ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:377 msgid "If your module uses shared module utilities, you must update all references. For example, change:" msgstr "モジュールã§å…±æœ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®å‚ç…§ã‚’æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.5.rst:392 msgid "See the module utilities developer guide see :ref:`developing_module_utilities` for more information." msgstr "詳細ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®é–‹ç™ºè€…ガイドã®ã€Œ:ref:`developing_module_utilities`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:5 msgid "Ansible 2.6 Porting Guide" msgstr "Ansible 2.6 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.6.rst:7 msgid "This section discusses the behavioral changes between Ansible 2.5 and Ansible 2.6." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.5 ã‹ã‚‰ Ansible 2.6 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:11 msgid "We suggest you read this page along with `Ansible Changelog for 2.6 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.6 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:20 msgid "The deprecated task option ``always_run`` has been removed, please use ``check_mode: no`` instead." msgstr "éžæŽ¨å¥¨ã®ã‚¿ã‚¹ã‚¯ã‚ªãƒ—ション ``always_run`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``check_mode: no`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:25 msgid "In the :ref:`nxos_igmp_interface module`, ``oif_prefix`` and ``oif_source`` properties are deprecated. Use ``ois_ps`` parameter with a dictionary of prefix and source to values instead." msgstr ":ref:`nxos_igmp_interface モジュール ` ã§ã€``oif_prefix`` プロパティーãŠã‚ˆã³ ``oif_source`` プロパティーã§ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚りã«ã€æŽ¥é ­è¾žã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨ã‚½ãƒ¼ã‚¹ã‹ã‚‰å€¤ã¸ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’付ã‘㦠``ois_ps`` パラメーターを使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:30 msgid "Major changes in popular modules are detailed here:" msgstr "一般的ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸»ãªå¤‰æ›´ç‚¹ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:42 #: ../../rst/porting_guides/porting_guide_2.6.rst:88 msgid "The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.10 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:44 msgid "``k8s_raw`` use :ref:`k8s ` instead." msgstr "``k8s_raw`` ã¯ã€ä»£ã‚り㫠:ref:`k8s ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:45 msgid "``openshift_raw`` use :ref:`k8s ` instead." msgstr "``openshift_raw`` ã¯ã€ä»£ã‚り㫠:ref:`k8s ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:46 msgid "``openshift_scale`` use :ref:`k8s_scale ` instead." msgstr "``openshift_scale`` ã¯ã€ä»£ã‚り㫠:ref:`k8s_scale ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:51 msgid "The ``upgrade`` module option for ``win_chocolatey`` has been removed; use ``state: latest`` instead." msgstr "``win_chocolatey`` ã® ``upgrade`` モジュールオプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``state: latest`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:52 msgid "The ``reboot`` module option for ``win_feature`` has been removed; use the ``win_reboot`` action plugin instead." msgstr "``win_feature`` ã® ``reboot`` モジュールオプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``win_reboot`` アクションプラグインを使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:53 msgid "The ``win_iis_webapppool`` module no longer accepts a string for the ``attributes`` module option; use the free form dictionary value instead." msgstr "``win_iis_webapppool`` モジュール㯠``attributes`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ–‡å­—列をå—ã‘入れãªããªã‚Šã¾ã—ãŸã€‚代ã‚りã«è‡ªç”±å½¢å¼ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å€¤ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.6.rst:54 msgid "The ``name`` module option for ``win_package`` has been removed; this is not used anywhere and should just be removed from your playbooks." msgstr "``win_package`` ã® ``name`` モジュールオプションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れã¯ã„ãšã‚Œã‚‚使用ã•れãšã€Playbook ã‹ã‚‰å‰Šé™¤ã•れるã ã‘ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:55 msgid "The ``win_regedit`` module no longer automatically corrects the hive path ``HCCC`` to ``HKCC``; use ``HKCC`` because this is the correct hive path." msgstr "``win_regedit`` モジュールã¯ã€ãƒã‚¤ãƒ–パス ``HCCC`` ã‹ã‚‰``HKCC`` を自動的ã«ä¿®æ­£ã—ãªããªã‚Šã¾ã—ãŸã€‚æ­£ã—ã„ãƒã‚¤ãƒ–パスã¯``HKCC`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:56 msgid "The :ref:`file_module` now emits a deprecation warning when ``src`` is specified with a state other than ``hard`` or ``link`` as it is only supposed to be useful with those. This could have an effect on people who were depending on a buggy interaction between src and other state's to place files into a subdirectory. For instance::" msgstr ":ref:`file_module` ã¯ã€``src`` ㌠``hard`` ã¾ãŸã¯ ``link`` 以外ã®çŠ¶æ…‹ã§æŒ‡å®šã•れãŸå ´åˆã€éžæŽ¨å¥¨ã®è­¦å‘Šã‚’表示ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¯ã€ã“れらã®çŠ¶æ…‹ã§ã®ã¿æœ‰ç”¨ã§ã‚ã‚‹ã¨è€ƒãˆã‚‰ã‚Œã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€src ã¨ä»–ã®çŠ¶æ…‹ã¨ã®é–“ã®ãƒã‚°ã®ã‚る相互作用を利用ã—ã¦ãƒ•ァイルをサブディレクトリーã«ç½®ã„ã¦ã„ãŸå ´åˆã¯å½±éŸ¿ãŒå‡ºã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:63 msgid "Would create a directory named ``/tmp/lib``. Instead of the above, simply spell out the entire destination path like this::" msgstr "``/tmp/lib`` ã¨ã„ã†åå‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒä½œæˆã•れã¾ã™ã€‚上記ã®ä»£ã‚りã«ã€å˜ç´”ã«ç›®çš„地ã®ãƒ‘ス全体を次ã®ã‚ˆã†ã«ç¶´ã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:68 msgid "The ``k8s_raw`` and ``openshift_raw`` modules have been aliased to the new ``k8s`` module." msgstr "``k8s_raw`` モジュールãŠã‚ˆã³ ``openshift_raw`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ–°ã—ã„ ``k8s`` モジュールã«ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒè¨­å®šã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:69 msgid "The ``k8s`` module supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources." msgstr "``k8s`` モジュールã¯ã€Custom Resource Definitions や集約ã•れ㟠API サーãƒãƒ¼ã‹ã‚‰ã®ã‚‚ã®ã‚’å«ã‚€ã™ã¹ã¦ã® Kubernetes リソースをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れã«ã¯ã€ã™ã¹ã¦ã® OpenShift リソースもå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:70 msgid "The ``k8s`` module will not accept resources where subkeys have been snake_cased. This was a workaround that was suggested with the ``k8s_raw`` and ``openshift_raw`` modules." msgstr "``k8s`` モジュールã¯ã€ã‚µãƒ–キーを使用ã—㦠snake_cased ã¨ãªã£ãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å—ã‘入れã¾ã›ã‚“。ã“れã¯ã€``k8s_raw`` モジュールãŠã‚ˆã³ ``openshift_raw`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ææ¡ˆã•れãŸå›žé¿ç­–ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:71 msgid "The ``k8s`` module may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource." msgstr "``k8s`` モジュールã¯ã€``api_version`` ㌠Kubernetes Python クライアントã®çŸ­ç¸®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆã‚ã›ã¦å¤‰æ›´ã•れãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å—ã‘入れãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã‹ã‚‰ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã«å¯¾ã—ã¦é©åˆ‡ãªå®Œå…¨ãª Kubernetes ``api_version`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:72 msgid "The ``k8s`` module can now process multi-document YAML files if they are passed with the ``src`` parameter. It will process each document as a separate resource. Resources provided inline with the ``resource_definition`` parameter must still be a single document." msgstr "``k8s`` モジュールã¯ã€è¤‡æ•°ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã® YAML ファイル㌠``src`` ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã§æ¸¡ã•れãŸå ´åˆã«ã€ãれを処ç†ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚å„ドキュメントã¯å€‹åˆ¥ã®ãƒªã‚½ãƒ¼ã‚¹ã¨ã—ã¦å‡¦ç†ã•れã¾ã™ã€‚``resource_definition`` パラメーターを使用ã—ã¦ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã§æä¾›ã•れるリソースã¯ã€1 ã¤ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.6.rst:73 msgid "The ``k8s`` module will not automatically change ``Project`` creation requests into ``ProjectRequest`` creation requests as the ``openshift_raw`` module did. You must now specify the ``ProjectRequest`` kind explicitly." msgstr "``openshift_raw`` モジュールãŒè¡Œã£ãŸãŸã‚ã€``k8s`` モジュール㯠``Project`` 作æˆè¦æ±‚を自動的㫠``ProjectRequest`` 作æˆè¦æ±‚ã«å¤‰æ›´ã—ã¾ã›ã‚“。``ProjectRequest`` ã®ç¨®é¡žã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:74 msgid "The ``k8s`` module will not automatically remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block." msgstr "``k8s`` モジュールã¯ã€Ansible ã®æˆ»ã‚Šå€¤ (ã²ã„ã¦ã¯ãƒ­ã‚°) ã‹ã‚‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’自動的ã«å‰Šé™¤ã—ã¾ã›ã‚“。タスク内ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆå€¤ãŒãƒ­ã‚°ã«æ®‹ã‚‰ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ãƒ–ロック㫠``no_log`` パラメーターを指定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:75 msgid "The ``k8s_scale`` module now supports scalable OpenShift objects, such as ``DeploymentConfig``." msgstr "``k8s_scale`` モジュールã¯ã€``DeploymentConfig`` ãªã©ã®ã‚¹ã‚±ãƒ¼ãƒ©ãƒ–ル㪠OpenShift オブジェクトをサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:76 msgid "The ``lineinfile`` module was changed to show a warning when using an empty string as a regexp. Since an empty regexp matches every line in a file, it will replace the last line in a file rather than inserting. If this is the desired behavior, use ``'^'`` which will match every line and will not trigger the warning." msgstr "``lineinfile`` モジュールã¯ã€ç©ºã®æ–‡å­—列を正è¦è¡¨ç¾ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹éš›ã«è­¦å‘Šã‚’表示ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚ç©ºã®æ­£è¦è¡¨ç¾ã¯ãƒ•ァイルã®ã™ã¹ã¦ã®è¡Œã«ä¸€è‡´ã™ã‚‹ãŸã‚ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ€å¾Œã®è¡Œã‚’挿入ã™ã‚‹ã®ã§ã¯ãªãã€ç½®ãæ›ãˆã¦ã—ã¾ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªå‹•作をã•ã›ãŸã„å ´åˆã¯ã€``'^'`` を使用ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®è¡Œã«ä¸€è‡´ã—ã€è­¦å‘Šã¯ç™ºç”Ÿã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.6.rst:80 msgid "Openstack modules are no longer using ``shade`` library. Instead ``openstacksdk`` is used. Since ``openstacksdk`` should be already present as a dependency to ``shade`` no additional actions are required." msgstr "Openstack モジュール㧠``shade`` ライブラリーãŒä½¿ç”¨ã•れãªããªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``openstacksdk`` ãŒä½¿ç”¨ã•れã¾ã™ã€‚``openstacksdk`` 㯠``shade`` ã®ä¾å­˜é–¢ä¿‚ã¨ã—ã¦æ—¢ã«å­˜åœ¨ã—ã¦ã„ã‚‹ãŸã‚ã€è¿½åŠ ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.6.rst:90 msgid "``openshift`` use ``k8s`` instead." msgstr "``openshift`` ã¯ã€ä»£ã‚り㫠``k8s`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:96 msgid "The ``k8s`` lookup plugin now supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources." msgstr "``k8s`` lookup モジュールã¯ã€Custom Resource Definitions や集約ã•れ㟠API サーãƒãƒ¼ã‹ã‚‰ã®ã‚‚ã®ã‚’å«ã‚€ã™ã¹ã¦ã® Kubernetes リソースをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れã«ã¯ã€ã™ã¹ã¦ã® OpenShift リソースもå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:97 msgid "The ``k8s`` lookup plugin may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource." msgstr "``k8s`` lookup モジュールã¯ã€``api_version`` ㌠Kubernetes Python クライアントã®çŸ­ç¸®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆã‚ã›ã¦å¤‰æ›´ã•れãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å—ã‘入れãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã‹ã‚‰ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã«å¯¾ã—ã¦é©åˆ‡ãªå®Œå…¨ãª Kubernetes ``api_version`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:98 msgid "The ``k8s`` lookup plugin will no longer remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block." msgstr "``k8s`` lookup プラグインã¯ã€Ansible ã®æˆ»ã‚Šå€¤ (ã²ã„ã¦ã¯ãƒ­ã‚°) ã‹ã‚‰ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’自動的ã«å‰Šé™¤ã—ã¾ã›ã‚“。タスク内ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆå€¤ãŒãƒ­ã‚°ã«æ®‹ã‚‰ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ãƒ–ロック㫠``no_log`` パラメーターを指定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.6.rst:112 msgid "Dynamic inventory scripts" msgstr "動的インベントリースクリプト" #: ../../rst/porting_guides/porting_guide_2.6.rst:114 msgid "``contrib/inventory/openstack.py`` has been renamed to ``contrib/inventory/openstack_inventory.py``. If you have used ``openstack.py`` as a name for your OpenStack dynamic inventory file, change it to ``openstack_inventory.py``. Otherwise the file name will conflict with imports from ``openstacksdk``." msgstr "``contrib/inventory/openstack.py`` ã®åå‰ãŒ ``contrib/inventory/openstack_inventory.py`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚OpenStack ã®å‹•的インベントリーファイルã®åå‰ã¨ã—㦠``openstack.py`` を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``openstack_inventory.py`` ã«å¤‰æ›´ã—ã¦ãã ã•ã„。ãã†ã—ãªã„ã¨ã€ãƒ•ァイルå㌠``openstacksdk`` ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¨ç«¶åˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:5 msgid "Ansible 2.7 Porting Guide" msgstr "Ansible 2.7 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.7.rst:7 msgid "This section discusses the behavioral changes between Ansible 2.6 and Ansible 2.7." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.6 ã‹ã‚‰ Ansible 2.7 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:11 msgid "We suggest you read this page along with `Ansible Changelog for 2.7 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.7 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.7.rst:20 msgid "If you specify ``--tags`` or ``--skip-tags`` multiple times on the command line, Ansible will merge the specified tags together. In previous versions of Ansible, you could set ``merge_multiple_cli_tags`` to ``False`` if you wanted to keep only the last-specified ``--tags``. This config option existed for backwards compatibility. The overwriting behavior was deprecated in 2.3 and the default behavior was changed in 2.4. Ansible-2.7 removes the config option; multiple ``--tags`` are now always merged." msgstr "コマンドライン㧠``--tags`` ã‚„ ``--skip-tags`` を複数回指定ã—ãŸå ´åˆã€Ansible ã¯æŒ‡å®šã•れãŸã‚¿ã‚°ã‚’ã¾ã¨ã‚ã¦ãƒžãƒ¼ã‚¸ã—ã¾ã™ã€‚Ansible ã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€æœ€å¾Œã«æŒ‡å®šã—㟠``--tags`` ã ã‘を残ã—ãŸã„å ´åˆã¯ã€``merge_multiple_cli_tags`` ã‚’ ``False`` ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚ã“ã®è¨­å®šã‚ªãƒ—ションã¯å¾Œæ–¹äº’æ›æ€§ã®ãŸã‚ã«å­˜åœ¨ã—ã¦ã„ã¾ã—ãŸã€‚上書ãã®å‹•作㯠2.3 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã€2.4 ã§ã¯ãƒ‡ãƒ•ォルトã®å‹•作ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚Ansible-2.7 ã§ã¯ã€ã“ã®è¨­å®šã‚ªãƒ—ションãŒå‰Šé™¤ã•れã€è¤‡æ•°ã® ``--tags`` ãŒå¸¸ã«ãƒžãƒ¼ã‚¸ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:27 msgid "If you have a shell script that depends on setting ``merge_multiple_cli_tags`` to ``False``, please upgrade your script so it only adds the ``--tags`` you actually want before upgrading to Ansible-2.7." msgstr "``merge_multiple_cli_tags`` ã‹ã‚‰ ``False`` ã¸ã®è¨­å®šã«ä¾å­˜ã™ã‚‹ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トãŒã‚ã‚‹å ´åˆã¯ã€ã‚¹ã‚¯ãƒªãƒ—トをアップグレードã—㦠Ansible-2.7 ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹å‰ã«å®Ÿéš›ã«å¿…è¦ãª ``--tags`` ã®ã¿ã‚’追加ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.7.rst:32 msgid "Python Compatibility" msgstr "Python ã®äº’æ›æ€§" #: ../../rst/porting_guides/porting_guide_2.7.rst:34 msgid "Ansible has dropped compatibility with Python-2.6 on the controller (The host where :command:`/usr/bin/ansible` or :command:`/usr/bin/ansible-playbook` is run). Modules shipped with Ansible can still be used to manage hosts which only have Python-2.6. You just need to have a host with Python-2.7 or Python-3.5 or greater to manage those hosts from." msgstr "Ansible ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ (:command:`/usr/bin/ansible` ã¾ãŸã¯ :command:`/usr/bin/ansible-playbook` ãŒå®Ÿè¡Œã•れるホスト) ã§ã® Python-2.6 ã¨ã®äº’æ›æ€§ã‚’失ã„ã¾ã—ãŸã€‚Ansible ã«åŒæ¢±ã•れã¦ã„るモジュールã¯ã€Python-2.6 ã—ã‹æ­è¼‰ã—ã¦ã„ãªã„ホストã®ç®¡ç†ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã ã—ã€Python-2.7 以上ã¾ãŸã¯ Python-3.5 以上ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ç®¡ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:39 msgid "One thing that this does affect is the ability to use :command:`/usr/bin/ansible-pull` to manage a host which has Python-2.6. ``ansible-pull`` runs on the host being managed but it is a controller script, not a module so it will need an updated Python. Actively developed Linux distros which ship with Python-2.6 have some means to install newer Python versions (For instance, you can install Python-2.7 via an SCL on RHEL-6) but you may need to also install Python bindings for many common modules to work (For RHEL-6, for instance, selinux bindings and yum would have to be installed for the updated Python install)." msgstr "ã“れãŒå½±éŸ¿ã™ã‚‹ã“ã¨ã® 1 ã¤ã¯ã€:command:`/usr/bin/ansible-pull` を使用ã—ã¦ã€Python-2.6 ã‚’æ­è¼‰ã—ãŸãƒ›ã‚¹ãƒˆã‚’管ç†ã™ã‚‹æ©Ÿèƒ½ã§ã™ã€‚``ansible-pull`` ã¯ç®¡ç†å¯¾è±¡ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ãŒã€ã“れã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã§ã‚りã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ãªã„ãŸã‚ã€æ›´æ–°ã•れ㟠Python ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚Python-2.6 ã«åŒæ¢±ã•れã¦ã„るアクティブã«é–‹ç™ºã•れ㟠Linux ディストリビューションã«ã¯ã€æ–°ã—ã„ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹æ‰‹æ®µãŒã‚りã¾ã™ (ãŸã¨ãˆã°ã€RHEL-6 ã® SCL を介ã—㦠Python-2.7 をインストールã™ã‚‹ã“ã¨ãŒå¯èƒ½) ãŒã€å¤šãã®ä¸€èˆ¬çš„ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® Python ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚‚インストールã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ (ãŸã¨ãˆã°ã€RHEL-6 ã®å ´åˆã€æ›´æ–°ã•れ㟠Python インストールã«ã¯ selinux ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã¨ yum をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.7.rst:47 msgid "The decision to drop Python-2.6 support on the controller was made because many dependent libraries are becoming unavailable there. In particular, python-cryptography is no longer available for Python-2.6 and the last release of pycrypto (the alternative to python-cryptography) has known security bugs which will never be fixed." msgstr "コントローラ㮠Python-2.6 サãƒãƒ¼ãƒˆã‚’終了ã™ã‚‹æ±ºå®šã‚’下ã—ãŸã®ã¯ã€å¤šãã®ä¾å­˜ãƒ©ã‚¤ãƒ–ラリーãŒåˆ©ç”¨ã§ããªããªã£ã¦ããŸãŸã‚ã§ã™ã€‚特ã«ã€python-cryptography 㯠Python-2.6 ã§ã¯åˆ©ç”¨ã§ããªããªã‚Šã€pycrypto (python-cryptography ã®ä»£æ›¿å“) ã®æœ€å¾Œã®ãƒªãƒªãƒ¼ã‚¹ã«ã¯ã€ä»Šå¾Œã‚‚修正ã•れãªã„既知ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒã‚°ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:57 msgid "Role Precedence Fix during Role Loading" msgstr "ロール読ã¿è¾¼ã¿æ™‚ã®ãƒ­ãƒ¼ãƒ«ã®å„ªå…ˆé †ä½ã®ä¿®æ­£" #: ../../rst/porting_guides/porting_guide_2.7.rst:59 msgid "Ansible 2.7 makes a small change to variable precedence when loading roles, resolving a bug, ensuring that role loading matches :ref:`variable precedence expectations `." msgstr "Ansible 2.7 ã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã®èª­ã¿è¾¼ã¿æ™‚ã«å¤‰æ•°ã®å„ªå…ˆé †ä½ãŒè‹¥å¹²å¤‰æ›´ã•れã€ãƒã‚°ã‚’解決ã—ã€ãƒ­ãƒ¼ãƒ«ã®èª­ã¿è¾¼ã¿ãŒ :ref:`variable precedence expectations ` ã¨ä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:61 msgid "Before Ansible 2.7, when loading a role, the variables defined in the role's ``vars/main.yml`` and ``defaults/main.yml`` were not available when parsing the role's ``tasks/main.yml`` file. This prevented the role from utilizing these variables when being parsed. The problem manifested when ``import_tasks`` or ``import_role`` was used with a variable defined in the role's vars or defaults." msgstr "Ansible 2.7 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã‚’読ã¿è¾¼ã‚€éš›ã«ã€ãƒ­ãƒ¼ãƒ«ã® ``vars/main.yml`` ãŠã‚ˆã³``defaults/main.yml`` ã§å®šç¾©ã•れãŸå¤‰æ•°ãŒã€ãƒ­ãƒ¼ãƒ«ã® ``tasks/main.yml`` ファイルを解æžã™ã‚‹ã¨ãã«åˆ©ç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãŸã‚ã€ãƒ­ãƒ¼ãƒ«ã®è§£æžæ™‚ã«ã“れらã®å¤‰æ•°ã‚’利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®å•題ã¯ã€``import_tasks`` ã¾ãŸã¯ ``import_role`` ãŒã€ãƒ­ãƒ¼ãƒ«ã® vars ã¾ãŸã¯ defaults ã§å®šç¾©ã•れãŸå¤‰æ•°ã¨ä¸€ç·’ã«ä½¿ç”¨ã•れãŸã¨ãã«æ˜Žã‚‰ã‹ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:63 msgid "In Ansible 2.7, role ``vars`` and ``defaults`` are now parsed before ``tasks/main.yml``. This can cause a change in behavior if the same variable is defined at the play level and the role level with different values, and used in ``import_tasks`` or ``import_role`` to define the role or file to import." msgstr "Ansible 2.7 ã§ã¯ã€ãƒ­ãƒ¼ãƒ« ``vars`` ãŠã‚ˆã³ ``defaults`` ㌠``tasks/main.yml`` ã®å‰ã«è§£æžã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—レイレベルã¨ãƒ­ãƒ¼ãƒ«ãƒ¬ãƒ™ãƒ«ã§åŒã˜å¤‰æ•°ãŒç•°ãªã‚‹å€¤ã§å®šç¾©ã•れã¦ãŠã‚Šã€``import_tasks`` ã‚„``import_role`` ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚„ファイルを定義ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã¯ã€å‹•作ãŒå¤‰åŒ–ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:66 msgid "include_role and import_role variable exposure" msgstr "include_role ãŠã‚ˆã³ import_role ã®å¤‰æ•°ã®å…¬é–‹" #: ../../rst/porting_guides/porting_guide_2.7.rst:68 msgid "In Ansible 2.7 a new module argument named ``public`` was added to the ``include_role`` module that dictates whether or not the role's ``defaults`` and ``vars`` will be exposed outside of the role, allowing those variables to be used by later tasks. This value defaults to ``public: False``, matching current behavior." msgstr "Ansible 2.7 ã§ã¯ã€``public`` ã¨ã„ã†åå‰ã®æ–°ã—ã„モジュール引数㌠``include_role`` モジュールã«è¿½åŠ ã•れã€ãƒ­ãƒ¼ãƒ«ã® ``defaults`` ãŠã‚ˆã³ ``vars`` ãŒãƒ­ãƒ¼ãƒ«å¤–部ã«å…¬é–‹ã•れã€å¾Œã®ã‚¿ã‚¹ã‚¯ã§ã“れらã®å¤‰æ•°ã‚’使用ã§ãるよã†ã«ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ ``public: False`` ã«ãƒ‡ãƒ•ォルト設定ã•れã¦ãŠã‚Šã€ç¾åœ¨ã®å‹•作ã¨ä¸€è‡´ã•ã›ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:70 msgid "``import_role`` does not support the ``public`` argument, and will unconditionally expose the role's ``defaults`` and ``vars`` to the rest of the playbook. This functionality brings ``import_role`` into closer alignment with roles listed within the ``roles`` header in a play." msgstr "``import_role`` ã§ã¯ ``public`` 引数ã¯ã‚µãƒãƒ¼ãƒˆã•れãšã€ãƒ­ãƒ¼ãƒ«ã® ``defaults`` 㨠``vars`` ã¯ç„¡æ¡ä»¶ã§ Playbook ã®æ®‹ã‚Šã®å€¤ã«å…¬é–‹ã•れã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã§ã¯ã€``import_role`` ãŒãƒ—レイ㮠``roles`` ヘッダー内ã«ä¸€è¦§è¡¨ç¤ºã•れるロールã«ç¶¿å¯†ãªèª¿æ•´ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:72 msgid "There is an important difference in the way that ``include_role`` (dynamic) will expose the role's variables, as opposed to ``import_role`` (static). ``import_role`` is a pre-processor, and the ``defaults`` and ``vars`` are evaluated at playbook parsing, making the variables available to tasks and roles listed at any point in the play. ``include_role`` is a conditional task, and the ``defaults`` and ``vars`` are evaluated at execution time, making the variables available to tasks and roles listed *after* the ``include_role`` task." msgstr "``include_role`` (å‹•çš„) ãŒãƒ­ãƒ¼ãƒ«ã®å¤‰æ•°ã‚’公開ã™ã‚‹æ–¹æ³•ã¯ã€``import_role`` (é™çš„) ã¨ã¯é‡è¦ãªé•ã„ãŒã‚りã¾ã™ã€‚``import_role`` ã¯ãƒ—リプロセッサーã§ã‚りã€``defaults`` ã¨``vars`` 㯠Playbook ã®è§£æžæ™‚ã«è©•価ã•れã€ãƒ—レイã®ã©ã®æ™‚点ã§ã‚‚リストã•れã¦ã„るタスクã¨ãƒ­ãƒ¼ãƒ«ãŒå¤‰æ•°ã‚’利用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚``include_role`` ã¯æ¡ä»¶ä»˜ãタスクã§ã‚りã€``defaults`` 㨠``vars`` ã¯å®Ÿè¡Œæ™‚ã«è©•価ã•れã€``include_role`` タスク㮠*後* ã«ãƒªã‚¹ãƒˆã•れã¦ã„るタスクã¨ãƒ­ãƒ¼ãƒ«ãŒå¤‰æ•°ã‚’利用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:75 msgid "include_tasks/import_tasks inline variables" msgstr "include_tasks/import_tasks インライン変数" #: ../../rst/porting_guides/porting_guide_2.7.rst:77 msgid "As of Ansible 2.7, `include_tasks` and `import_tasks` can no longer accept inline variables. Instead of using inline variables, tasks should supply variables under the ``vars`` keyword." msgstr "Ansible 2.7 ã§ã¯ã€`include_tasks` ãŠã‚ˆã³ `import_tasks` ã¯ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³å¤‰æ•°ã‚’å—ã‘付ã‘ãªããªã‚Šã¾ã—ãŸã€‚インライン変数を使用ã™ã‚‹ä»£ã‚りã«ã€ã‚¿ã‚¹ã‚¯ã¯ ``vars`` キーワードã§å¤‰æ•°ã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:79 msgid "**OLD** In Ansible 2.6 (and earlier) the following was valid syntax for specifying variables:" msgstr "Ansible 2.6 以å‰ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½** 以下ã¯ã€å¤‰æ•°ã‚’指定ã™ã‚‹ã®ã«æœ‰åŠ¹ãªæ§‹æ–‡ã§ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:85 msgid "**NEW** In Ansible 2.7 the task should be changed to use the ``vars`` keyword:" msgstr "**新機能** Ansible 2.7 ã§ã¯ã€``vars`` キーワードを使用ã™ã‚‹ã‚ˆã†ã«ã‚¿ã‚¹ã‚¯ã‚’変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:94 msgid "vars_prompt with unknown algorithms" msgstr "アルゴリズムãŒä¸æ˜Žãª vars_prompt" #: ../../rst/porting_guides/porting_guide_2.7.rst:96 msgid "vars_prompt now throws an error if the hash algorithm specified in encrypt is not supported by the controller. This increases the safety of vars_prompt as it previously returned None if the algorithm was unknown. Some modules, notably the user module, treated a password of None as a request not to set a password. If your playbook starts erroring because of this, change the hashing algorithm being used with this filter." msgstr "æš—å·åŒ–ã§æŒ‡å®šã•れãŸãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„å ´åˆã¯ã€vars_prompt ãŒã‚¨ãƒ©ãƒ¼ã‚’出力ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ä»¥å‰ã¯ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒä¸æ˜Žãªå ´åˆã« None ãŒè¿”ã•れãŸãŸã‚ã€vars_prompt ã®å®‰å…¨æ€§ãŒå‘上ã—ã¾ã™ã€‚一部ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ç‰¹ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€None ã®ãƒ‘スワードをパスワードを設定ã—ãªã„è¦æ±‚ã¨ã—ã¦æ‰±ã„ã¾ã—ãŸã€‚ã“れãŒåŽŸå› ã§ Playbook ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—å§‹ã‚ãŸå ´åˆã¯ã€ã“ã®ãƒ•ィルターã§ä½¿ç”¨ã•れã¦ã„ã‚‹ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’変更ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.7.rst:107 msgid "Expedited Deprecation: Use of ``__file__`` in ``AnsibleModule``" msgstr "Expedited Deprecation: ``AnsibleModule`` ã§ã® ``__file__`` ã®ä½¿ç”¨" #: ../../rst/porting_guides/porting_guide_2.7.rst:109 msgid "The use of the ``__file__`` variable is deprecated in Ansible 2.7 and **will be eliminated in Ansible 2.8**. This is much quicker than our usual 4-release deprecation cycle." msgstr "``__file__`` 変数ã®ä½¿ç”¨ã¯ã€Ansible 2.7 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã€**Ansible 2.8 ã§å»ƒæ­¢ã•れる予定ã§ã™**。ã“れã¯ã€é€šå¸¸ã® 4 リリースã®éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«ã‚ˆã‚Šã‚‚ã¯ã‚‹ã‹ã«æ—©ã„ã‚‚ã®ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:111 msgid "We are deprecating the use of the ``__file__`` variable to refer to the file containing the currently-running code. This common Python technique for finding a filesystem path does not always work (even in vanilla Python). Sometimes a Python module can be imported from a virtual location (like inside of a zip file). When this happens, the ``__file__`` variable will reference a virtual location pointing to inside of the zip file. This can cause problems if, for instance, the code was trying to use ``__file__`` to find the directory containing the python module to write some temporary information." msgstr "ç¾åœ¨å®Ÿè¡Œä¸­ã®ã‚³ãƒ¼ãƒ‰ã‚’å«ã‚€ãƒ•ァイルをå‚ç…§ã™ã‚‹ ``__file__`` 変数ã®ä½¿ç”¨ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã™ã€‚ファイルシステムパスを見ã¤ã‘ã‚‹ãŸã‚ã®ã“ã®ä¸€èˆ¬çš„㪠Python ã®æ‰‹æ³•ã¯ã€(vanilla Python ã§ã‚‚) å¸¸ã«æ©Ÿèƒ½ã™ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“。Python モジュールを仮想ã®å ´æ‰€ (zip ファイル内ãªã©) ã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“れãŒç™ºç”Ÿã™ã‚‹ã¨ã€``__file__`` 変数ã¯ã€zip ファイルã®å†…部を指ã™ä»®æƒ³ã®å ´æ‰€ã‚’å‚ç…§ã—ã¾ã™ã€‚ã“れã¯ã€ãŸã¨ãˆã°ã€ã‚³ãƒ¼ãƒ‰ãŒ ``__file__`` を使用ã—ã¦ã€ä¸€æ™‚çš„ãªæƒ…報を書ã込むãŸã‚ã® Python モジュールをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’検索ã™ã‚‹å ´åˆã«ã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:113 msgid "Before the introduction of AnsiBallZ in Ansible 2.1, using ``__file__`` worked in ``AnsibleModule`` sometimes, but any module that used it would fail when pipelining was turned on (because the module would be piped into the python interpreter's standard input, so ``__file__`` wouldn't contain a file path). AnsiBallZ unintentionally made using ``__file__`` work, by always creating a temporary file for ``AnsibleModule`` to reside in." msgstr "Ansible 2.1 ã§ AnsiBallZ ãŒå°Žå…¥ã•れるå‰ã¯ã€``__file__`` を使用ã™ã‚‹ã¨ ``AnsibleModule`` ã§å‹•作ã™ã‚‹ã“ã¨ãŒã‚りã¾ã—ãŸãŒã€ãƒ‘ã‚¤ãƒ—ãƒ©ã‚¤ãƒ³ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã¨ã€ã“れを使用ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å¤±æ•—ã—ã¦ã„ã¾ã—㟠(モジュール㯠python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¨™æº–入力ã«ãƒ‘イプã•れるãŸã‚ã€``__file__`` ã«ã¯ãƒ•ァイルパスãŒå«ã¾ã‚Œãªã„ãŸã‚ã§ã™)。AnsiBallZ ã¯ã€``AnsibleModule`` ãŒå¸¸é§ã™ã‚‹ãŸã‚ã®ä¸€æ™‚ファイルを常ã«ä½œæˆã™ã‚‹ã“ã¨ã§ã€``__file__`` ã‚’æ„図ã›ãšã«åˆ©ç”¨ã§ãるよã†ã«ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:115 msgid "Ansible 2.8 will no longer create a temporary file for ``AnsibleModule``; instead it will read the file out of a zip file. This change should speed up module execution, but it does mean that starting with Ansible 2.8, referencing ``__file__`` will always fail in ``AnsibleModule``." msgstr "Ansible 2.8 ã¯ã€``AnsibleModule`` 用ã®ä¸€æ™‚ファイルを作æˆã—ã¾ã›ã‚“。ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€zip ファイルã‹ã‚‰ãƒ•ァイルを読ã¿å–ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡ŒãŒè¿…速化ã•れã¾ã™ãŒã€Ansible 2.8 以é™ã§ ``__file__`` å‚ç…§ãŒå¸¸ã« ``AnsibleModule`` ã§å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:117 msgid "If you are the author of a third-party module which uses ``__file__`` with ``AnsibleModule``, please update your module(s) now, while the use of ``__file__`` is deprecated but still available. The most common use of ``__file__`` is to find a directory to write a temporary file. In Ansible 2.5 and above, you can use the ``tmpdir`` attribute on an ``AnsibleModule`` instance instead, as shown in this code from the :ref:`apt module `:" msgstr "``__file__`` 㨠``AnsibleModule`` を併用ã—ã¦ã„るサードパーティーモジュールを作æˆã—ãŸå ´åˆã¯ã€``__file__`` ãŒåˆ©ç”¨å¯èƒ½ãªçŠ¶æ…‹ã§ã¯ã‚ã£ã¦ã‚‚ãã®ä½¿ç”¨ãŒéžæŽ¨å¥¨ã¨ãªã£ã¦ã„ã‚‹é–“ã«ã€ã”自身ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。``__file__`` ã®æœ€ã‚‚一般的ãªä½¿ã„æ–¹ã¯ã€ä¸€æ™‚ファイルを書ã込むディレクトリーを探ã™ã“ã¨ã§ã™ã€‚Ansible 2.5 以é™ã§ã¯ã€:ref:`apt モジュール ` ã®ã‚³ãƒ¼ãƒ‰ã«ã‚るよã†ã«ã€``AnsibleModule`` インスタンス㫠``tmpdir`` 属性を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:127 msgid "Using a loop on a package module via squash_actions" msgstr "squash_actions ã«ã‚ˆã‚‹ãƒ‘ッケージモジュールã§ã®ãƒ«ãƒ¼ãƒ—ã®ä½¿ç”¨" #: ../../rst/porting_guides/porting_guide_2.7.rst:129 msgid "The use of ``squash_actions`` to invoke a package module, such as \"yum\", to only invoke the module once is deprecated, and will be removed in Ansible 2.11." msgstr "``squash_actions`` を使用ã—ã¦ã€Œyumã€ãªã©ã®ãƒ‘ッケージモジュールを呼ã³å‡ºã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒéžæŽ¨å¥¨ã«ã—ã¦ã‹ã‚‰ã®ã¿èµ·å‹•ã—ã€Ansible 2.11 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:131 msgid "Instead of relying on implicit squashing, tasks should instead supply the list directly to the ``name``, ``pkg`` or ``package`` parameter of the module. This functionality has been supported in most modules since Ansible 2.3." msgstr "æš—é»™çš„ãªæ¨©é™ä»˜ã‘ã«ä¾å­˜ã›ãšã«ã€ã‚¿ã‚¹ã‚¯ã¯ä»£ã‚りã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® ``name`` パラメーターã€``pkg`` パラメーターã€ã¾ãŸã¯ ``package`` パラメーターã«ç›´æŽ¥ãƒªã‚¹ãƒˆã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ Ansible 2.3 以é™ã®ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:133 msgid "**OLD** In Ansible 2.6 (and earlier) the following task would invoke the \"yum\" module only 1 time to install multiple packages" msgstr "Ansible 2.6 以å‰ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½** 以下ã®ã‚¿ã‚¹ã‚¯ãŒã€Œyumã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’一度ã ã‘呼ã³å‡ºã—ã¦è¤‡æ•°ã®ãƒ‘ッケージをインストールã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:143 msgid "**NEW** In Ansible 2.7 it should be changed to look like this:" msgstr "**新機能** Ansible 2.7 ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:158 msgid "The :ref:`DEFAULT_SYSLOG_FACILITY` configuration option tells Ansible modules to use a specific `syslog facility `_ when logging information on all managed machines. Due to a bug with older Ansible versions, this setting did not affect machines using journald with the systemd Python bindings installed. On those machines, Ansible log messages were sent to ``/var/log/messages``, even if you set :ref:`DEFAULT_SYSLOG_FACILITY`. Ansible 2.7 fixes this bug, routing all Ansible log messages according to the value set for :ref:`DEFAULT_SYSLOG_FACILITY`. If you have :ref:`DEFAULT_SYSLOG_FACILITY` configured, the location of remote logs on systems which use journald may change." msgstr ":ref:`DEFAULT_SYSLOG_FACILITY` 設定オプションã¯ã€ã™ã¹ã¦ã®ç®¡ç†ãƒžã‚·ãƒ³ã®æƒ…報をログã«è¨˜éŒ²ã™ã‚‹éš›ã«ã€ç‰¹å®šã® `syslog ファシリティー `_ を使用ã™ã‚‹ã‚ˆã†ã« Ansible ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ‡ç¤ºã—ã¾ã™ã€‚å¤ã„ Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒã‚°ã«ã‚ˆã‚Šã€ã“ã®è¨­å®šã¯ systemd Python ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れ㟠journald を使用ã™ã‚‹ãƒžã‚·ãƒ³ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“ã§ã—ãŸã€‚ã“れらã®ãƒžã‚·ãƒ³ã§ã¯ã€:ref:`DEFAULT_SYSLOG_FACILITY` を設定ã—ã¦ã‚‚ã€Ansible ã®ãƒ­ã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ ``/var/log/messages`` ã«é€ä¿¡ã•れã¦ã„ã¾ã—ãŸã€‚Ansible 2.7 ã§ã¯ã“ã®ãƒã‚°ãŒä¿®æ­£ã•れã€ã™ã¹ã¦ã® Ansible ログメッセージ㌠:ref:`DEFAULT_SYSLOG_FACILITY` ã«è¨­å®šã•れãŸå€¤ã«å¾“ã£ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚:ref:`DEFAULT_SYSLOG_FACILITY` を設定ã—ã¦ã„ã‚‹å ´åˆã¯ã€journald を使用ã—ã¦ã„るシステムã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ­ã‚°ã®å ´æ‰€ãŒå¤‰ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:176 msgid "The following modules will be removed in Ansible 2.11. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.11 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.7.rst:178 msgid "``na_cdot_aggregate`` use :ref:`na_ontap_aggregate ` instead." msgstr "``na_cdot_aggregate`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_aggregate ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:179 msgid "``na_cdot_license`` use :ref:`na_ontap_license ` instead." msgstr "``na_cdot_license`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_license ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:180 msgid "``na_cdot_lun`` use :ref:`na_ontap_lun ` instead." msgstr "``na_cdot_lun`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_lun ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:181 msgid "``na_cdot_qtree`` use :ref:`na_ontap_qtree ` instead." msgstr "``na_cdot_qtree`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_qtree ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:182 msgid "``na_cdot_svm`` use :ref:`na_ontap_svm ` instead." msgstr "``na_cdot_svm`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_svm ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:183 msgid "``na_cdot_user`` use :ref:`na_ontap_user ` instead." msgstr "``na_cdot_user`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_user ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:184 msgid "``na_cdot_user_role`` use :ref:`na_ontap_user_role ` instead." msgstr "``na_cdot_user_role`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_user_role ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:185 msgid "``na_cdot_volume`` use :ref:`na_ontap_volume ` instead." msgstr "``na_cdot_volume`` ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_volume ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:186 msgid "``sf_account_manager`` use :ref:`na_elementsw_account` instead." msgstr "``sf_account_manager`` ã¯ã€ä»£ã‚り㫠:ref:`na_elementsw_account` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:187 msgid "``sf_check_connections`` use :ref:`na_elementsw_check_connections` instead." msgstr "``sf_check_connections`` ã¯ã€ä»£ã‚り㫠:ref:`na_elementsw_check_connections` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:188 msgid "``sf_snapshot_schedule_manager`` use :ref:`na_elementsw_snapshot_schedule` instead." msgstr "``sf_snapshot_schedule_manager`` ã¯ã€ä»£ã‚り㫠:ref:`na_elementsw_snapshot_schedule` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:189 msgid "``sf_volume_access_group_manager`` use :ref:`na_elementsw_access_group` instead." msgstr "``sf_volume_access_group_manager`` ã¯ã€ä»£ã‚り㫠:ref:`na_elementsw_access_group` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:190 msgid "``sf_volume_manager`` use :ref:`na_elementsw_volume` instead." msgstr "``sf_volume_manager`` ã¯ã€ä»£ã‚り㫠:ref:`na_elementsw_volume` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:195 msgid "Check mode is now supported in the ``command`` and ``shell`` modules. However, only when ``creates`` or ``removes`` is specified. If either of these are specified, the module will check for existence of the file and report the correct changed status, if they are not included the module will skip like it had done previously." msgstr "``command`` モジュールãŠã‚ˆã³ ``shell`` モジュールã§ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ãŸã ã—ã€``creates`` ã¾ãŸã¯ ``removes`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«é™ã‚Šã¾ã™ã€‚ã“れらã®ã„ãšã‚Œã‹ãŒæŒ‡å®šã•れãŸå ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒ•ァイルã®å­˜åœ¨ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€æ­£ã—ã変更ã•れãŸçŠ¶æ…‹ã‚’å ±å‘Šã—ã¾ã™ãŒã€ã“れらãŒå«ã¾ã‚Œã¦ã„ãªã„å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä»¥å‰ã®ã‚ˆã†ã«ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:199 msgid "The ``win_chocolatey`` module originally required the ``proxy_username`` and ``proxy_password`` to escape any double quotes in the value. This is no longer required and the escaping may cause further issues." msgstr "``win_chocolatey`` モジュールã§ã¯ã€ã‚‚ã¨ã‚‚㨠``proxy_username`` 㨠``proxy_password`` ã§å€¤ã®ä¸­ã®äºŒé‡å¼•用符をエスケープã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚ã“れã¯å¿…é ˆã§ã¯ãªããªã‚Šã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã“ã¨ã§ã•らã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:203 msgid "The ``win_uri`` module has removed the deprecated option ``use_basic_parsing``, since Ansible 2.5 this option did nothing" msgstr "``win_uri`` モジュールã¯ã€éžæŽ¨å¥¨ã®ã‚ªãƒ—ション ``use_basic_parsing`` ㌠Ansible 2.5 以陿©Ÿèƒ½ã—ã¦ã„ãªã‹ã£ãŸã‚ã€å‰Šé™¤ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:206 msgid "The ``win_scheduled_task`` module has removed the following deprecated options:" msgstr "``win_scheduled_task`` モジュールã§ã¯ã€ä»¥ä¸‹ã®éžæŽ¨å¥¨ã‚ªãƒ—ションãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:208 msgid "``executable``, use ``path`` in an actions entry instead" msgstr "``executable``。代ã‚りã«ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ ``path`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:209 msgid "``argument``, use ``arguments`` in an actions entry instead" msgstr "``argument``。代ã‚りã«ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ ``arguments`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:210 msgid "``store_password``, set ``logon_type: password`` instead" msgstr "``store_password``。代ã‚り㫠``logon_type: password`` を設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:211 msgid "``days_of_week``, use ``monthlydow`` in a triggers entry instead" msgstr "``days_of_week``。代ã‚りã«ã€ãƒˆãƒªã‚¬ãƒ¼ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ ``monthlydow`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:212 msgid "``frequency``, use ``type``, in a triggers entry instead" msgstr "``frequency``。代ã‚りã«ã€ãƒˆãƒªã‚¬ãƒ¼ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ ``type`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:213 msgid "``time``, use ``start_boundary`` in a triggers entry instead" msgstr "``time``。代ã‚りã«ã€ãƒˆãƒªã‚¬ãƒ¼ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã§ ``start_boundary`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:215 msgid "The ``interface_name`` module option for ``na_ontap_net_vlan`` has been removed and should be removed from your playbooks" msgstr "``na_ontap_net_vlan`` ã® ``interface_name`` モジュールオプションãŒå‰Šé™¤ã•れã€Playbook ã‹ã‚‰å‰Šé™¤ã•れる必è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:217 msgid "The ``win_disk_image`` module has deprecated the return value ``mount_path``, use ``mount_paths[0]`` instead. This will be removed in Ansible 2.11." msgstr "``win_disk_image`` モジュールã¯ã€æˆ»ã‚Šå€¤ ``mount_path`` ã‚’éžæŽ¨å¥¨ã¨ã—ã€ä»£ã‚り㫠``mount_paths[0]`` を使用ã—ã¾ã™ã€‚ã“ã®æˆ»ã‚Šå€¤ã¯ Ansible 2.11ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:220 msgid "``include_role`` and ``include_tasks`` can now be used directly from ``ansible`` (adhoc) and ``ansible-console``::" msgstr "``include_role`` ãŠã‚ˆã³ ``include_tasks`` ã¯ã€``ansible`` (adhoc) ã¨``ansible-console`` ã‹ã‚‰ç›´æŽ¥ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:224 msgid "The ``pip`` module has added a dependency on ``setuptools`` to support version requirements, this requirement is for the Python interpreter that executes the module and not the Python interpreter that the module is managing." msgstr "``pip`` モジュールã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã« ``setuptools`` ã¸ã®ä¾å­˜ã‚’追加ã—ã¾ã—ãŸã€‚ã“ã®è¦ä»¶ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ Python インタープリターã«å¯¾ã™ã‚‹ã‚‚ã®ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒç®¡ç†ã™ã‚‹ Python インタープリターã«å¯¾ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.7.rst:227 msgid "Prior to Ansible 2.7.10, the ``replace`` module did the opposite of what was intended when using the ``before`` and ``after`` options together. This now works properly but may require changes to tasks." msgstr "Ansible 2.7.10 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``replace`` モジュールã¯ã€``before`` オプション㨠``after`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’åŒæ™‚ã«ä½¿ç”¨ã™ã‚‹éš›ã«æ„図ã•れãŸå†…容ã¨å対ã«å®Ÿè¡Œã—ã¦ã„ã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚¿ã‚¹ã‚¯ã¸ã®å¤‰æ›´ãŒå¿…è¦ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.7.rst:233 msgid "The hash_password filter now throws an error if the hash algorithm specified is not supported by the controller. This increases the safety of the filter as it previously returned None if the algorithm was unknown. Some modules, notably the user module, treated a password of None as a request not to set a password. If your playbook starts erroring because of this, change the hashing algorithm being used with this filter." msgstr "指定ã•れãŸãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„å ´åˆã¯ã€hash_password フィルターãŒã‚¨ãƒ©ãƒ¼ã‚’出力ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒä¸æ˜Žãªå ´åˆã€ä»¥å‰ã¯ None ãŒè¿”ã•れãŸãŸã‚ã€ãƒ•ィルターã®å®‰å…¨æ€§ãŒå‘上ã—ã¾ã™ã€‚一部ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ç‰¹ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€None ã®ãƒ‘スワードをパスワードを設定ã—ãªã„è¦æ±‚ã¨ã—ã¦æ‰±ã„ã¾ã—ãŸã€‚ã“れãŒåŽŸå› ã§ Playbook ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—å§‹ã‚ãŸå ´åˆã¯ã€ã“ã®ãƒ•ィルターã§ä½¿ç”¨ã•れã¦ã„ã‚‹ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’変更ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:5 msgid "Ansible 2.8 Porting Guide" msgstr "Ansible 2.8 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.8.rst:7 msgid "This section discusses the behavioral changes between Ansible 2.7 and Ansible 2.8." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.7 ã‹ã‚‰ Ansible 2.8 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:11 msgid "We suggest you read this page along with `Ansible Changelog for 2.8 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.8 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:22 msgid "Distribution Facts" msgstr "分散ファクト" #: ../../rst/porting_guides/porting_guide_2.8.rst:24 msgid "The information returned for the ``ansible_distribution_*`` group of facts may have changed slightly. Ansible 2.8 uses a new backend library for information about distributions: `nir0s/distro `_. This library runs on Python-3.8 and fixes many bugs, including correcting release and version names." msgstr "ファクト㮠``ansible_distribution_*`` グループã§è¿”ã•れる情報ã¯ã€è‹¥å¹²å¤‰æ›´ã•れã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Ansible 2.8 ã§ã¯ã€ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã«é–¢ã™ã‚‹æƒ…報を得るãŸã‚ã«ã€æ–°ã—ã„ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ©ã‚¤ãƒ–ラリー (`nir0s/distro `_) を使用ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ©ã‚¤ãƒ–ラリー㯠Python-3.8 上ã§å‹•作ã—ã€ãƒªãƒªãƒ¼ã‚¹åã‚„ãƒãƒ¼ã‚¸ãƒ§ãƒ³åã®ä¿®æ­£ãªã©ã€å¤šãã®ãƒã‚°ãŒä¿®æ­£ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:27 msgid "The two facts used in playbooks most often, ``ansible_distribution`` and ``ansible_distribution_major_version``, should not change. If you discover a change in these facts, please file a bug so we can address the difference. However, other facts like ``ansible_distribution_release`` and ``ansible_distribution_version`` may change as erroneous information gets corrected." msgstr "Playbook ã§æœ€ã‚‚よã使ã‚れる 2 ã¤ã®ãƒ•ァクト (``ansible_distribution`` ã¨``ansible_distribution_major_version``) ã¯å¤‰æ›´ã—ãªã„ã§ãã ã•ã„。ã“れらã®ãƒ•ァクトãŒå¤‰æ›´ã•れã¦ã„ã‚‹ã®ã‚’発見ã—ãŸå ´åˆã¯ã€ãƒã‚°ã‚’æå‡ºã—ã¦ãã ã•ã„。ãŸã ã—ã€``ansible_distribution_release`` ã‚„``ansible_distribution_version`` ã®ã‚ˆã†ãªä»–ã®ãƒ•ァクトã¯ã€èª¤ã£ãŸæƒ…å ±ãŒä¿®æ­£ã•れãŸå ´åˆã«å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:32 msgid "Imports as handlers" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨ã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/porting_guides/porting_guide_2.8.rst:34 msgid "Beginning in version 2.8, a task cannot notify ``import_tasks`` or a static ``include`` that is specified in ``handlers``." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 以é™ã€ã‚¿ã‚¹ã‚¯ã¯ ``handlers`` ã§æŒ‡å®šã•れる ``import_tasks`` ã¾ãŸã¯é™çš„ ``include`` ã«é€šçŸ¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.8.rst:36 msgid "The goal of a static import is to act as a pre-processor, where the import is replaced by the tasks defined within the imported file. When using an import, a task can notify any of the named tasks within the imported file, but not the name of the import itself." msgstr "é™çš„インãƒãƒ¼ãƒˆã®ç›®çš„ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆãƒ•ァイル内ã§å®šç¾©ã•れãŸã‚¿ã‚¹ã‚¯ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã€äº‹å‰ãƒ—ロセッサーã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ã“ã¨ã§ã™ã€‚インãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹å ´åˆã€ã‚¿ã‚¹ã‚¯ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ•ァイル内ã§åå‰ä»˜ãã®ã‚¿ã‚¹ã‚¯ã®ã„ãšã‚Œã‹ã«é€šçŸ¥ã•れã¾ã™ãŒã€ã“れã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆè‡ªä½“ã®åå‰ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.8.rst:39 msgid "To achieve the results of notifying a single name but running multiple handlers, utilize ``include_tasks``, or ``listen`` :ref:`handlers`." msgstr "å˜ä¸€ã®åå‰ã«é€šçŸ¥ã™ã‚‹ãŒã€è¤‡æ•°ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実行ã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€``include_tasks``ã€ã¾ãŸã¯ ``listen`` :ref:`handlers` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:42 msgid "Jinja Undefined values" msgstr "Jinja ã®æœªå®šç¾©ã®å€¤" #: ../../rst/porting_guides/porting_guide_2.8.rst:44 msgid "Beginning in version 2.8, attempting to access an attribute of an Undefined value in Jinja will return another Undefined value, rather than throwing an error immediately. This means that you can now simply use a default with a value in a nested data structure when you don't know if the intermediate values are defined." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 ã‹ã‚‰ã€Jinja ã§ Undefined ã®å€¤ã®å±žæ€§ã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨ã€ã™ãã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã®ã§ã¯ãªãã€åˆ¥ã® Undefined ã®å€¤ãŒè¿”ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ä¸­é–“値ãŒå®šç¾©ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã«ã€ãƒã‚¹ãƒˆã•れãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®ä¸­ã®å€¤ã§ãƒ‡ãƒ•ォルト簡å˜ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:47 msgid "In Ansible 2.8::" msgstr "Ansible 2.8 ã®å ´åˆ::" #: ../../rst/porting_guides/porting_guide_2.8.rst:51 msgid "In Ansible 2.7 and older::" msgstr "Ansible 2.7 以å‰::" #: ../../rst/porting_guides/porting_guide_2.8.rst:55 msgid "or::" msgstr "ã¾ãŸã¯::" #: ../../rst/porting_guides/porting_guide_2.8.rst:60 msgid "Module option conversion to string" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ–‡å­—列ã¸ã®å¤‰æ›" #: ../../rst/porting_guides/porting_guide_2.8.rst:62 msgid "Beginning in version 2.8, Ansible will warn if a module expects a string, but a non-string value is passed and automatically converted to a string. This highlights potential problems where, for example, a ``yes`` or ``true`` (parsed as truish boolean value) would be converted to the string ``'True'``, or where a version number ``1.10`` (parsed as float value) would be converted to ``'1.1'``. Such conversions can result in unexpected behavior depending on context." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 以é™ã€Ansible ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ–‡å­—列を期待ã—ã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€æ–‡å­—列ã§ã¯ãªã„å€¤ãŒæ¸¡ã•れã€è‡ªå‹•çš„ã«æ–‡å­—列ã«å¤‰æ›ã•れãŸå ´åˆã«è­¦å‘Šã‚’発ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãŸã¨ãˆã°ã€``yes`` ã‚„ ``true`` (truish ã®ãƒ–ール値ã¨ã—ã¦è§£æž) ãŒæ–‡å­—列 ``'True'`` ã«å¤‰æ›ã•れãŸã‚Šã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå· ``1.10`` (float 値ã¨ã—ã¦è§£æž) ㌠``'1.1'`` ã«å¤‰æ›ã•れãŸã‚Šã™ã‚‹æ½œåœ¨çš„ãªå•é¡ŒãŒæµ®ã彫りã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ˆã†ãªå¤‰æ›ã¯ã€ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«ã‚ˆã£ã¦ã¯äºˆæœŸã›ã¬å‹•作ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:64 msgid "This behavior can be changed to be an error or to be ignored by setting the ``ANSIBLE_STRING_CONVERSION_ACTION`` environment variable, or by setting the ``string_conversion_action`` configuration in the ``defaults`` section of ``ansible.cfg``." msgstr "ã“ã®å‹•作ã¯ã€``ANSIBLE_STRING_CONVERSION_ACTION`` 環境変数を設定ã—ãŸã‚Šã€``ansible.cfg`` ã®``defaults`` セクションã§``string_conversion_action`` ã®è¨­å®šã‚’行ã†ã“ã¨ã§ã€ã‚¨ãƒ©ãƒ¼ã«ã—ãŸã‚Šã€ç„¡è¦–ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:67 msgid "Command line facts" msgstr "コマンドラインファクト" #: ../../rst/porting_guides/porting_guide_2.8.rst:69 msgid "``cmdline`` facts returned in system will be deprecated in favor of ``proc_cmdline``. This change handles special case where Kernel command line parameter contains multiple values with the same key." msgstr "システムã§è¿”ã•れる ``cmdline`` ファクトã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€``proc_cmdline`` ãŒæŽ¡ç”¨ã•れã¾ã™ã€‚ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ã‚«ãƒ¼ãƒãƒ«ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ‘ラメーターã«åŒã˜ã‚­ãƒ¼ã‚’æŒã¤è¤‡æ•°ã®å€¤ãŒå«ã¾ã‚Œã¦ã„る特殊ãªã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:72 msgid "Bare variables in conditionals" msgstr "æ¡ä»¶ã®ãƒ™ã‚¢ãƒ¡ã‚¿ãƒ«å¤‰æ•°" #: ../../rst/porting_guides/porting_guide_2.8.rst:74 msgid "In Ansible 2.7 and earlier, top-level variables sometimes treated boolean strings as if they were boolean values. This led to inconsistent behavior in conditional tests built on top-level variables defined as strings. Ansible 2.8 began changing this behavior. For example, if you set two conditions like this:" msgstr "Ansible 2.7 ãŠã‚ˆã³ãれ以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®å¤‰æ•°ãŒã€ãƒ–ãƒ¼ãƒ«å€¤ã®æ–‡å­—列をブール値ã®ã‚ˆã†ã«æ‰±ã†ã“ã¨ãŒã‚りã¾ã—ãŸã€‚ã“ã®ãŸã‚ã€æ–‡å­—列ã¨ã—ã¦å®šç¾©ã•ã‚ŒãŸæœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®å¤‰æ•°ã«åŸºã¥ã„ã¦æ§‹ç¯‰ã•ã‚ŒãŸæ¡ä»¶ä»˜ãテストã§ã€ä¸€è²«æ€§ã®ãªã„動作ãŒç™ºç”Ÿã—ã¦ã„ã¾ã—ãŸã€‚Ansible 2.8 ã§ã¯ã€ã“ã®å‹•作ãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã« 2 ã¤ã®æ¡ä»¶ã‚’設定ã—ãŸå ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:85 msgid "based on a variable you define **as a string** (with quotation marks around it):" msgstr "**文字列** ã¨ã—ã¦å®šç¾©ã™ã‚‹å¤‰æ•°ã«åŸºã¥ãã¾ã™ (引用符ã§å›²ã¿ã¾ã™)。" #: ../../rst/porting_guides/porting_guide_2.8.rst:87 msgid "In Ansible 2.7 and earlier, the two conditions above evaluated as ``True`` and ``False`` respectively if ``teardown: 'true'``" msgstr "Ansible 2.7 以å‰ã§ã¯ã€``teardown: 'true'`` ã¨è¨­å®šã™ã‚‹ã¨ã€ä¸Šè¨˜ã® 2 ã¤ã®æ¡ä»¶ã¯ãれãžã‚Œ ``True`` 㨠``False`` ã¨è©•価ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:88 msgid "In Ansible 2.7 and earlier, both conditions evaluated as ``False`` if ``teardown: 'false'``" msgstr "Ansible 2.7 以å‰ã§ã¯ã€``teardown: 'false'`` ã®å ´åˆã«ã€ä¸¡æ–¹ã®æ¡ä»¶ãŒ ``False`` ã¨è©•価ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:89 msgid "In Ansible 2.8 and later, you have the option of disabling conditional bare variables, so ``when: teardown`` always evaluates as ``True`` and ``when: not teardown`` always evaluates as ``False`` when ``teardown`` is a non-empty string (including ``'true'`` or ``'false'``)" msgstr "Ansible 2.8 以é™ã§ã¯ã€æ¡ä»¶ä»˜ãベア変数を無効ã«ã™ã‚‹ã‚ªãƒ—ションãŒã‚ã‚‹ãŸã‚ã€``when: teardown`` ã¯å¸¸ã« ``True`` ã¨ã—ã¦è©•価ã•れã€``when: not teardown`` 㯠``teardown`` ãŒç©ºã§ã¯ãªã„文字列 (``'true'`` ã¾ãŸã¯ ``'false'`` ã‚’å«ã‚€) ã®å ´åˆã¯å¸¸ã« ``False`` ã¨ã—ã¦è©•価ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:91 msgid "Ultimately, ``when: 'string'`` will always evaluate as ``True`` and ``when: not 'string'`` will always evaluate as ``False``, as long as ``'string'`` is not empty, even if the value of ``'string'`` itself looks like a boolean. For users with playbooks that depend on the old behavior, we added a config setting that preserves it. You can use the ``ANSIBLE_CONDITIONAL_BARE_VARS`` environment variable or ``conditional_bare_variables`` in the ``defaults`` section of ``ansible.cfg`` to select the behavior you want on your control node. The default setting is ``true``, which preserves the old behavior. Set the config value or environment variable to ``false`` to start using the new option." msgstr "最終的ã«ã€``when: 'string'`` ã¯å¸¸ã« ``True`` ã¨ã—ã¦è©•価ã•れã€``when: not 'string'`` 㯠``'string'`` ãŒç©ºã§ãªã„é™ã‚Šã€``'string'`` 自身ã®å€¤ãŒãƒ–ール値ã®ã‚ˆã†ã«è¦‹ãˆãŸã¨ã—ã¦ã‚‚ã€``False`` ã¨ã—ã¦å¸¸ã«è©•価ã•れã¾ã™ã€‚以å‰ã®å‹•作ã«ä¾å­˜ã—ã¦ã„ã‚‹ Playbook を使用ã—ã¦ã„ã‚‹å ´åˆã«å‘ã‘ã¦ã€ä»¥å‰ã®å‹•作を維æŒã™ã‚‹ãŸã‚ã®è¨­å®šã‚’追加ã—ã¾ã—ãŸã€‚環境変数 ``ANSIBLE_CONDITIONAL_BARE_VARS`` ã¾ãŸã¯ ``ansible.cfg`` ã® ``defaults`` セクションã«ã‚ã‚‹ ``conditional_bare_variables`` を使用ã—ã¦ã€åˆ¶å¾¡ãƒŽãƒ¼ãƒ‰ã«å¿…è¦ãªå‹•ä½œã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚デフォルトã®è¨­å®šã¯ ``true`` ã§ã€ä»¥å‰ã®å‹•ä½œã‚’ä¿æŒã—ã¾ã™ã€‚æ–°ã—ã„オプションã®ä½¿ç”¨ã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€è¨­å®šå€¤ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’ ``false`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:95 msgid "In 2.10 the default setting for ``conditional_bare_variables`` will change to ``false``. In 2.12 the old behavior will be deprecated." msgstr "2.10 ã§ã¯ã€``conditional_bare_variables`` ã®ãƒ‡ãƒ•ォルト設定㌠``false`` ã«å¤‰æ›´ã•れã¾ã™ã€‚2.12 ã§ã¯ã€ä»¥å‰ã®å‹•作ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:98 msgid "Updating your playbooks" msgstr "Playbook ã®æ›´æ–°" #: ../../rst/porting_guides/porting_guide_2.8.rst:100 msgid "To prepare your playbooks for the new behavior, you must update your conditional statements so they accept only boolean values. For variables, you can use the ``bool`` filter to evaluate the string ``'false'`` as ``False``:" msgstr "Playbook ã‚’æ–°ã—ã„動作ã«å¯¾å¿œã•ã›ã‚‹ã«ã¯ã€æ¡ä»¶æ–‡ã‚’æ›´æ–°ã—ã¦ã€ãƒ–ール値ã®ã¿ã‚’å—ã‘付ã‘るよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚変数ã«ã¤ã„ã¦ã¯ ``bool`` フィルターを使用ã—ã¦ã€æ–‡å­—列 ``'false'`` ã‚’ ``False`` ã¨ã—ã¦è©•価ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:114 msgid "Alternatively, you can re-define your variables as boolean values (without quotation marks) instead of strings:" msgstr "å¤‰æ•°ã‚’ã€æ–‡å­—列ã§ã¯ãªãブール値ã¨ã—ã¦å†å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (引用符ã¯ä½¿ç”¨ã—ã¾ã›ã‚“)。" #: ../../rst/porting_guides/porting_guide_2.8.rst:128 msgid "For dictionaries and lists, use the ``length`` filter to evaluate the presence of a dictionary or list as ``True``:" msgstr "ディクショナリーãŠã‚ˆã³ãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€``length`` フィルターを使用ã—ã¦ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¾ãŸã¯ãƒªã‚¹ãƒˆã®å­˜åœ¨ã‚’ ``True`` ã¨ã—ã¦è©•価ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:138 msgid "Do not use the ``bool`` filter with lists or dictionaries. If you use ``bool`` with a list or dict, Ansible will always evaluate it as ``False``." msgstr "``bool`` フィルターをリストã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨å…±ã«ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。``bool`` をリストã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨å…±ã«ä½¿ç”¨ã™ã‚‹å ´åˆã€Ansible ã¯å¸¸ã« ``False`` ã¨ã—ã¦è©•価ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:141 msgid "Double-interpolation" msgstr "二é‡ã®è§£é‡ˆ" #: ../../rst/porting_guides/porting_guide_2.8.rst:143 msgid "The ``conditional_bare_variables`` setting also affects variables set based on other variables. The old behavior unexpectedly double-interpolated those variables. For example:" msgstr "``conditional_bare_variables`` ã®è¨­å®šã¯ã€ä»–ã®å¤‰æ•°ã«åŸºã¥ã„ã¦è¨­å®šã•れãŸå¤‰æ•°ã«ã‚‚影響ã—ã¾ã™ã€‚以å‰ã®å‹•作ã§ã¯ã€ãれらã®å¤‰æ•°ãŒäºˆæœŸã›ãšäºŒé‡ã«è£œé–“ã•れã¦ã„ã¾ã—ãŸã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:155 msgid "In Ansible 2.7 and earlier, ``when: double_interpolated`` evaluated to the value of ``bare_variable``, in this case, ``False``. If the variable ``bare_variable`` is undefined, the conditional fails." msgstr "Ansible 2.7 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``when: double_interpolated`` ã¯``bare_variable`` ã®å€¤ã«è©•価ã•れã€ã“ã®å ´åˆã¯ ``False`` ã¨ãªã‚Šã¾ã™ã€‚変数 ``bare_variable`` ãŒæœªå®šç¾©ã®å ´åˆã€ã“ã®æ¡ä»¶å¼ã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:156 msgid "In Ansible 2.8 and later, with bare variables disabled, Ansible evaluates ``double_interpolated`` as the string ``'bare_variable'``, which is ``True``." msgstr "Ansible 2.8 以é™ã§ã¯ã€ãƒ™ã‚¢å¤‰æ•°ãŒç„¡åйãªçŠ¶æ…‹ã§ã€Ansible 㯠``double_interpolated`` を文字列 ``'bare_variable'`` ã¨ã—ã¦è©•価ã—ã¾ã™ã€‚ã“れ㯠``True`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:158 msgid "To double-interpolate variable values, use curly braces:" msgstr "変数ã®å€¤ã‚’二é‡å¼•用符ã§å›²ã‚€ã«ã¯ã€ä¸­æ‹¬å¼§ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:167 msgid "Nested variables" msgstr "ãƒã‚¹ãƒˆã•れãŸå¤‰æ•°" #: ../../rst/porting_guides/porting_guide_2.8.rst:169 msgid "The ``conditional_bare_variables`` setting does not affect nested variables. Any string value assigned to a subkey is already respected and not treated as a boolean. If ``complex_variable['subkey']`` is a non-empty string, then ``when: complex_variable['subkey']`` is always ``True`` and ``when: not complex_variable['subkey']`` is always ``False``. If you want a string subkey like ``complex_variable['subkey']`` to be evaluated as a boolean, you must use the ``bool`` filter." msgstr "``conditional_bare_variables`` 設定ã¯ãƒã‚¹ãƒˆã•れãŸå¤‰æ•°ã«ã¯å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“。サブキーã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹æ–‡å­—列値ã¯ã™ã§ã«è€ƒæ…®ã•れã€ãƒ–ール値ã¨ã—ã¦å‡¦ç†ã•れã¾ã›ã‚“。``complex_variable['subkey']`` ãŒç©ºã§ã¯ãªã„文字列ã§ã‚ã‚‹å ´åˆã€``when: complex_variable['subkey']`` ã¯å¸¸ã« ``True`` ã¨ãªã‚Šã€``when: not complex_variable['subkey']`` ã¯å¸¸ã« ``False`` ã«ãªã‚Šã¾ã™ã€‚``complex_variable['subkey']`` ãªã©ã®æ–‡å­—列サブキーをブール値ã¨ã—ã¦è©•価ã™ã‚‹ã«ã¯ã€``bool`` フィルターを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:172 msgid "Gathering Facts" msgstr "ファクトã®åŽé›†" #: ../../rst/porting_guides/porting_guide_2.8.rst:174 msgid "In Ansible 2.8 the implicit \"Gathering Facts\" task in a play was changed to obey play tags. Previous to 2.8, the \"Gathering Facts\" task would ignore play tags and tags supplied from the command line and always run in a task." msgstr "Ansible 2.8 ã§ã¯ã€ãƒ—レイã®ä¸­ã§æš—黙的ã«å®Ÿè¡Œã•れる「Gathering Factsã€ã‚¿ã‚¹ã‚¯ãŒã€ãƒ—レイタグã«å¾“ã†ã‚ˆã†ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚2.8 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ã€ŒGathering Factsã€ã‚¿ã‚¹ã‚¯ã¯ play タグやコマンドラインã‹ã‚‰æä¾›ã•れãŸã‚¿ã‚°ã‚’無視ã—ã€å¸¸ã«ã‚¿ã‚¹ã‚¯ã®ä¸­ã§å®Ÿè¡Œã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:178 msgid "The behavior change affects the following example play." msgstr "動作ã®å¤‰æ›´ã¯ã€æ¬¡ã®ãƒ—レイ例ã«å½±éŸ¿ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:193 msgid "In Ansible 2.8, if you supply ``--tags nginx``, the implicit \"Gathering Facts\" task will be skipped, as the task now inherits the tag of ``webserver`` instead of ``always``." msgstr "Ansible 2.8 ã§ã¯ã€``--tags nginx`` を指定ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ãŒ ``always`` ã§ã¯ãªã ``webserver`` ã®ã‚¿ã‚°ã‚’継承ã™ã‚‹ãŸã‚ã€æš—黙的ãªã€ŒGathering Factsã€ã‚¿ã‚¹ã‚¯ãŒçœç•¥ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:197 msgid "If no play level tags are set, the \"Gathering Facts\" task will be given a tag of ``always`` and will effectively match prior behavior." msgstr "プレイレベルã®ã‚¿ã‚°ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã€ã€ŒGathering Factsã€ã‚¿ã‚¹ã‚¯ã«ã¯ ``always`` ã¨ã„ã†ã‚¿ã‚°ãŒä¸Žãˆã‚‰ã‚Œã€ãれã¾ã§ã®è¡Œå‹•ã¨åŠ¹æžœçš„ã«ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:201 msgid "You can achieve similar results to the pre-2.8 behavior, by using an explicit ``gather_facts`` task in your ``tasks`` list." msgstr "``tasks`` ã§ä¸€è¦§ã§æ˜Žç¤ºçš„㪠``gather_facts`` タスクを使用ã™ã‚‹ã¨ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 よりå‰ã®å‹•作ã¨åŒæ§˜ã®çµæžœãŒå¾—られã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:224 #: ../../rst/porting_guides/porting_guide_core_2.12.rst:36 msgid "Python Interpreter Discovery" msgstr "Python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¤œå‡º" #: ../../rst/porting_guides/porting_guide_2.8.rst:226 msgid "In Ansible 2.7 and earlier, Ansible defaulted to :command:`/usr/bin/python` as the setting for ``ansible_python_interpreter``. If you ran Ansible against a system that installed Python with a different name or a different path, your playbooks would fail with ``/usr/bin/python: bad interpreter: No such file or directory`` unless you either set ``ansible_python_interpreter`` to the correct value for that system or added a Python interpreter and any necessary dependencies at :command:`usr/bin/python`." msgstr "Ansible 2.7 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``ansible_python_interpreter`` ã®è¨­å®šã¨ã—㦠:command:`/usr/bin/python` ㌠Ansible ã®ãƒ‡ãƒ•ォルトã§ã—ãŸã€‚ç•°ãªã‚‹åå‰ã‚„パス㧠Python をインストールã—ãŸã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã—㦠Ansible を実行ã—ãŸå ´åˆã¯ã€``ansible_python_interpreter`` ã‚’ãã®ã‚·ã‚¹ãƒ†ãƒ ã®æ­£ã—ã„値ã«è¨­å®šã™ã‚‹ã‹ã€Python インタープリターã¨å¿…è¦ãªä¾å­˜é–¢ä¿‚ã‚’ :command:`usr/bin/python` ã«è¿½åŠ ã—ãªã„é™ã‚Šã€Playbook 㯠``/usr/bin/python: bad interpreter: No such file or directory`` ã§å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:234 msgid "Starting in Ansible 2.8, Ansible searches for the correct path and executable name for Python on each target system, first in a lookup table of default Python interpreters for common distros, then in an ordered fallback list of possible Python interpreter names/paths." msgstr "Ansible 2.8 以é™ã€Ansible ã¯å„ターゲットシステム上㮠Python ã®æ­£ã—ã„パスã¨å®Ÿè¡Œãƒ•ァイルåã‚’ã€æœ€åˆã¯ä¸€èˆ¬çš„ãªãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ãƒ‡ãƒ•ォルト Python インタープリター㮠lookup テーブルã‹ã‚‰ã€æ¬¡ã«å¯èƒ½ãª Python インタープリターå/パスã®é †åºä»˜ãフォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‹ã‚‰æ¤œç´¢ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:239 msgid "It's risky to rely on a Python interpreter set from the fallback list, because the interpreter may change on future runs. If an interpreter from higher in the fallback list gets installed (for example, as a side-effect of installing other packages), your original interpreter and its dependencies will no longer be used. For this reason, Ansible warns you when it uses a Python interpreter discovered from the fallback list. If you see this warning, the best solution is to explicitly set ``ansible_python_interpreter`` to the path of the correct interpreter for those target systems." msgstr "フォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‹ã‚‰è¨­å®šã•れ㟠Python インタープリターã«ä¾å­˜ã™ã‚‹ã®ã¯ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚ãªãœãªã‚‰ã€å°†æ¥ã®å®Ÿè¡Œæ™‚ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターãŒå¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚フォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã®ä¸Šä½ã«ã‚るインタープリタãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れる㨠(ãŸã¨ãˆã°ã€ä»–ã®ãƒ‘ッケージをインストールã™ã‚‹éš›ã®å‰¯ä½œç”¨ã¨ã—ã¦)ã€å…ƒã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã¨ãã®ä¾å­˜é–¢ä¿‚ã¯ä½¿ç”¨ã§ããªããªã‚Šã¾ã™ã€‚ã“ã®ã‚ˆã†ãªç†ç”±ã‹ã‚‰ã€Ansible ã¯ãƒ•ォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‹ã‚‰æ¤œå‡ºã•れ㟠Python インタープリターを使用ã™ã‚‹éš›ã«è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚ã“ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れãŸå ´åˆã€æœ€è‰¯ã®è§£æ±ºç­–ã¯ã€æ˜Žç¤ºçš„ã« ``ansible_python_interpreter`` ã«ãれらã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã®æ­£ã—ã„インタープリターã®ãƒ‘スを設定ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:248 msgid "You can still set ``ansible_python_interpreter`` to a specific path at any variable level (as a host variable, in vars files, in playbooks, and so on). If you prefer to use the Python interpreter discovery behavior, use one of the four new values for ``ansible_python_interpreter`` introduced in Ansible 2.8:" msgstr "ã“れã¾ã§é€šã‚Šã€ã©ã®å¤‰æ•°ãƒ¬ãƒ™ãƒ« (ホスト変数ã€vars ファイルã€Playbook ãªã©) ã§ã‚‚ã€``ansible_python_interpreter`` を特定ã®ãƒ‘スã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¤œå‡ºå‹•作を使用ã™ã‚‹å ´åˆã¯ã€Ansible 2.8 ã§å°Žå…¥ã•れ㟠``ansible_python_interpreter`` ã®æ–°ã—ã„ 4 ã¤ã®å€¤ã®ã†ã¡ã® 1 ã¤ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:255 msgid "New value" msgstr "æ–°ã—ã„値" #: ../../rst/porting_guides/porting_guide_2.8.rst:255 msgid "Behavior" msgstr "動作" #: ../../rst/porting_guides/porting_guide_2.8.rst:257 msgid "auto |br| (future default)" msgstr "自動 |br| (å°†æ¥ã®ãƒ‡ãƒ•ォルト)" #: ../../rst/porting_guides/porting_guide_2.8.rst:257 msgid "If a Python interpreter is discovered, Ansible uses the discovered Python, even if :command:`/usr/bin/python` is also present. Warns when using the fallback list." msgstr "Python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ãŒæ¤œå‡ºã•れã€:command:`/usr/bin/python` ãŒãªã„å ´åˆã«ã€Ansible ã¯æ¤œå‡ºã•れ㟠Python を使用ã—ã¾ã™ã€‚フォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‚’使用ã™ã‚‹éš›ã«è­¦å‘Šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:262 msgid "**auto_legacy** |br| (Ansible 2.8 default)" msgstr "**auto_legacy** |br| (Ansible 2.8 デフォルト)" #: ../../rst/porting_guides/porting_guide_2.8.rst:262 msgid "If a Python interpreter is discovered, and :command:`/usr/bin/python` is absent, Ansible uses the discovered Python. Warns when using the fallback list." msgstr "Python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ãŒæ¤œå‡ºã•れã€:command:`/usr/bin/python` ãŒãªã„å ´åˆã«ã€Ansible ã¯æ¤œå‡ºã•れ㟠Python を使用ã—ã¾ã™ã€‚フォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‚’使用ã™ã‚‹éš›ã«è­¦å‘Šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:267 msgid "If a Python interpreter is discovered, and :command:`/usr/bin/python` is present, Ansible uses :command:`/usr/bin/python` and prints a deprecation warning about future default behavior. Warns when using the fallback list." msgstr "Python インタープリターãŒç™ºè¦‹ã•れã€:command:`/usr/bin/python` ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible 㯠:command:`/usr/bin/python` を使用ã—ã€å°†æ¥ã®ãƒ‡ãƒ•ォルトã®å‹•作ã«ã¤ã„ã¦éžæŽ¨å¥¨ã®è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚フォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã‚’使用ã™ã‚‹éš›ã«è­¦å‘Šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:274 msgid "auto_legacy_silent" msgstr "auto_legacy_silent" #: ../../rst/porting_guides/porting_guide_2.8.rst:274 msgid "Behaves like ``auto_legacy`` but suppresses the deprecation and fallback-list warnings." msgstr "``auto_legacy`` ã®ã‚ˆã†ãªå‹•作ã¯ã—ã¾ã™ãŒã€éžæŽ¨å¥¨ã¨ãƒ•ォールãƒãƒƒã‚¯ãƒªã‚¹ãƒˆã«é–¢ã™ã‚‹è­¦å‘Šã¯æŠ‘制ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:277 msgid "auto_silent" msgstr "auto_silent" #: ../../rst/porting_guides/porting_guide_2.8.rst:277 msgid "Behaves like ``auto`` but suppresses the fallback-list warning." msgstr "``auto`` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ãŒã€fallback-list ã®è­¦å‘Šã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.8.rst:282 msgid "In Ansible 2.12, Ansible will switch the default from :literal:`auto_legacy` to :literal:`auto`. The difference in behaviour is that :literal:`auto_legacy` uses :command:`/usr/bin/python` if present and falls back to the discovered Python when it is not present. :literal:`auto` will always use the discovered Python, regardless of whether :command:`/usr/bin/python` exists. The :literal:`auto_legacy` setting provides compatibility with previous versions of Ansible that always defaulted to :command:`/usr/bin/python`." msgstr "Ansible 2.12 ã§ã¯ã€Ansible ã¯ãƒ‡ãƒ•ォルトを :literal:`auto_legacy` ã‹ã‚‰ :literal:`auto` ã«å¤‰æ›´ã—ã¾ã™ã€‚挙動ã®é•ã„ã¯ã€:literal:`auto_legacy` 㯠:command:`/usr/bin/python` ãŒå­˜åœ¨ã™ã‚Œã°ãれを使用ã—ã€å­˜åœ¨ã—ãªã‘ã‚Œã°æ¤œå‡ºã•れ㟠Python ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚:literal:`auto` 㯠:command:`/usr/bin/python` ãŒå­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã«é–¢ã‚らãšã€å¸¸ã«æ¤œå‡ºã•れ㟠Python を使用ã—ã¾ã™ã€‚:literal:`auto_legacy` ã®è¨­å®šã¯ã€å¸¸ã« :command:`/usr/bin/python` をデフォルトã¨ã—ã¦ã„ãŸä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨ã®äº’æ›æ€§ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:289 msgid "If you installed Python and dependencies (``boto``, and so on) to :command:`/usr/bin/python` as a workaround on distros with a different default Python interpreter (for example, Ubuntu 16.04+, RHEL8, Fedora 23+), you have two options:" msgstr "ç•°ãªã‚‹ãƒ‡ãƒ•ォルト㮠Python インタープリターをæŒã¤ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション (例: Ubuntu 16.04 以é™ã€RHEL 8ã€Fedora 23 以é™) ã§ã®å›žé¿ç­–ã¨ã—ã¦ã€Python ã¨ä¾å­˜ãƒ•ァイル (``boto`` ãªã©) ã‚’ :command:`/usr/bin/python` ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸå ´åˆã®ã‚ªãƒ—ション㌠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:294 msgid "Move existing dependencies over to the default Python for each platform/distribution/version." msgstr "å„プラットフォーム/ディストリビューション/ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€æ—¢å­˜ã®ä¾å­˜é–¢ä¿‚をデフォルト㮠Python ã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:295 msgid "Use ``auto_legacy``. This setting lets Ansible find and use the workaround Python on hosts that have it, while also finding the correct default Python on newer hosts. But remember, the default will change in 4 releases." msgstr "``auto_legacy`` を使用ã—ã¾ã™ã€‚ã“ã®è¨­å®šã«ã‚ˆã‚Šã€Ansible 㯠Python ãŒã‚るホストã§ã¯å›žé¿ç­–ã® Python を見ã¤ã‘ã¦ä½¿ç”¨ã—ã€æ–°ã—ã„ホストã§ã¯æ­£ã—ã„デフォルト㮠Python を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ãƒ‡ãƒ•ォルト㯠4 ã¤ã®ãƒªãƒªãƒ¼ã‚¹ã§å¤‰æ›´ã•れるã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:299 msgid "Retry File Creation default" msgstr "ファイル作æˆã®å†è©¦è¡Œãƒ‡ãƒ•ォルト" #: ../../rst/porting_guides/porting_guide_2.8.rst:301 msgid "In Ansible 2.8, ``retry_files_enabled`` now defaults to ``False`` instead of ``True``. The behavior can be modified to previous version by editing the default ``ansible.cfg`` file and setting the value to ``True``." msgstr "Ansible 2.8 ã§ã¯ã€``retry_files_enabled`` 㯠``True`` ã§ã¯ãªã ``False`` ã«ãƒ‡ãƒ•ォルト設定ã•れã¦ã„ã¾ã™ã€‚動作ã¯ã€ãƒ‡ãƒ•ォルト㮠``ansible.cfg`` ファイルを編集ã—ã€å€¤ã‚’ ``True`` ã«è¨­å®šã™ã‚‹ã¨å¤‰æ›´ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:308 msgid "Become Prompting" msgstr "Become プロンプト" #: ../../rst/porting_guides/porting_guide_2.8.rst:310 msgid "Beginning in version 2.8, by default Ansible will use the word ``BECOME`` to prompt you for a password for elevated privileges (``sudo`` privileges on Unix systems or ``enable`` mode on network devices):" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 以é™ã€Ansible ã®ãƒ‡ãƒ•ォルトã§ã¯ã€æ˜‡æ ¼æ¨©é™ (Unix システムã§ã¯ ``sudo`` 権é™ã€ã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã§ã¯ ``enable`` モード) ã®ãƒ‘スワードã®å…¥åŠ›ã‚’ä¿ƒã™éš›ã«ã€``BECOME`` ã¨ã„ã†å˜èªžã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:312 msgid "By default in Ansible 2.8::" msgstr "Ansible 2.8 ã®ãƒ‡ãƒ•ォルト::" #: ../../rst/porting_guides/porting_guide_2.8.rst:317 msgid "If you want the prompt to display the specific ``become_method`` you're using, instead of the general value ``BECOME``, set :ref:`AGNOSTIC_BECOME_PROMPT` to ``False`` in your Ansible configuration." msgstr "使用ã—ã¦ã„る特定㮠``become_method`` をプロンプトã§è¡¨ç¤ºã™ã‚‹å ´åˆã¯ã€Ansible 設定ã§ä¸€èˆ¬çš„ãªå€¤ã® ``BECOME`` ã§ã¯ãªãã€:ref:`AGNOSTIC_BECOME_PROMPT` ã‚’ ``False`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:319 msgid "By default in Ansible 2.7, or with ``AGNOSTIC_BECOME_PROMPT=False`` in Ansible 2.8::" msgstr "デフォルトã§ã¯ Ansible 2.7ã€ã¾ãŸã¯ Ansible 2.8 ã® ``AGNOSTIC_BECOME_PROMPT=False`` ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:327 msgid "Setting the async directory using ``ANSIBLE_ASYNC_DIR`` as an task/play environment key is deprecated and will be removed in Ansible 2.12. You can achieve the same result by setting ``ansible_async_dir`` as a variable like::" msgstr "``ANSIBLE_ASYNC_DIR`` ã‚’ task/play 環境キーã¨ã—ã¦ä½¿ç”¨ã—ã¦éžåŒæœŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’設定ã™ã‚‹ã“ã¨ã¯éžæŽ¨å¥¨ã§ã‚りã€Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚``ansible_async_dir`` を次ã®ã‚ˆã†ã«å¤‰æ•°ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ã§ã€åŒã˜çµæžœã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:336 msgid "Plugin writers who need a ``FactCache`` object should be aware of two deprecations:" msgstr "``FactCache`` オブジェクトを必è¦ã¨ã™ã‚‹ãƒ—ラグイン作æˆè€…ã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®éžæŽ¨å¥¨ã‚’èªè­˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:338 msgid "The ``FactCache`` class has moved from ``ansible.plugins.cache.FactCache`` to ``ansible.vars.fact_cache.FactCache``. This is because the ``FactCache`` is not part of the cache plugin API and cache plugin authors should not be subclassing it. ``FactCache`` is still available from its old location but will issue a deprecation warning when used from there. The old location will be removed in Ansible 2.12." msgstr "``FactCache`` クラス㯠``ansible.plugins.cache.FactCache`` ã‹ã‚‰``ansible.vars.fact_cache.FactCache`` ã¸ç§»å‹•ã—ã¾ã—ãŸã€‚ã“れã¯ã€``FactCache`` ㌠cache プラグイン API ã®ä¸€éƒ¨ã§ã¯ãªã„ãŸã‚ã€cache プラグインã®ä½œæˆè€…ã¯ã“れをサブクラス化ã™ã¹ãã§ã¯ãªã„ã¨ã„ã†ç†ç”±ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™ã€‚``FactCache`` ã¯ä»¥å‰ã®å ´æ‰€ã§ã‚‚利用ã§ãã¾ã™ãŒã€ãã“ã‹ã‚‰ä½¿ç”¨ã™ã‚‹ã¨éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®å¤ã„場所㯠Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:344 msgid "The ``FactCache.update()`` method has been converted to follow the dict API. It now takes a dictionary as its sole argument and updates itself with the dictionary's items. The previous API where ``update()`` took a key and a value will now issue a deprecation warning and will be removed in 2.12. If you need the old behavior switch to ``FactCache.first_order_merge()`` instead." msgstr "``FactCache.update()`` メソッドã¯ã€dict API ã«å¾“ã†ã‚ˆã†ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚ディレクトリーを唯一ã®å¼•æ•°ã¨ã—ã¦å—ã‘å–りã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®é …ç›®ã§è‡ªèº«ã‚’æ›´æ–°ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚``update()`` ãŒã‚­ãƒ¼ã¨å€¤ã‚’å—ã‘å–ã£ã¦ã„ãŸä»¥å‰ã® API ã¯ã€ç¾åœ¨ã¯éžæŽ¨å¥¨ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã•れã€2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚以å‰ã®å‹•作ãŒå¿…è¦ãªå ´åˆã¯ã€ä»£ã‚り㫠``FactCache.first_order_merge()`` ã«åˆ‡ã‚Šæ›¿ãˆã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:350 msgid "Supporting file-backed caching via self.cache is deprecated and will be removed in Ansible 2.12. If you maintain an inventory plugin, update it to use ``self._cache`` as a dictionary. For implementation details, see the :ref:`developer guide on inventory plugins`." msgstr "self.cache ã«ã‚ˆã‚‹ãƒ•ァイルãƒãƒƒã‚¯ã‚­ãƒ£ãƒƒã‚·ãƒ³ã‚°ã®ã‚µãƒãƒ¼ãƒˆã¯éžæŽ¨å¥¨ã§ã€Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚インベントリープラグインを管ç†ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨ã—㦠``self._cache`` を使用ã™ã‚‹ã‚ˆã†ã«æ›´æ–°ã—ã¦ãã ã•ã„。実装ã®è©³ç´°ã¯ã€ã€Œ:ref:`inventory プラグインã®é–‹ç™ºè€…ガイド`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:354 msgid "Importing cache plugins directly is deprecated and will be removed in Ansible 2.12. Use the plugin_loader so direct options, environment variables, and other means of configuration can be reconciled using the config system rather than constants." msgstr "cache プラグインを直接インãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã¯éžæŽ¨å¥¨ã§ã‚りã€Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚plugin_loader を使用ã™ã‚‹ã“ã¨ã§ã€ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚ªãƒ—ションã€ç’°å¢ƒå¤‰æ•°ã€ãã®ä»–ã®è¨­å®šæ‰‹æ®µã‚’ã€å®šæ•°ã§ã¯ãªã設定システムを使ã£ã¦èª¿æ•´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:368 msgid "The exec wrapper that runs PowerShell modules has been changed to set ``$ErrorActionPreference = \"Stop\"`` globally. This may mean that custom modules can fail if they implicitly relied on this behavior. To get the old behavior back, add ``$ErrorActionPreference = \"Continue\"`` to the top of the module. This change was made to restore the old behavior of the EAP that was accidentally removed in a previous release and ensure that modules are more resilient to errors that may occur in execution." msgstr "PowerShell モジュールを実行ã™ã‚‹ exec ラッパーã¯ã€``$ErrorActionPreference = \"Stop\"`` をグローãƒãƒ«ã«è¨­å®šã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã“ã®å‹•ä½œã«æš—黙的ã«ä¾å­˜ã—ã¦ã„ãŸå ´åˆã¯ã€å¤±æ•—ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚以å‰ã®å‹•作をå–り戻ã™ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å…ˆé ­ã« ``$ErrorActionPreference = \"Continue\"`` を追加ã—ã¦ãã ã•ã„。ã“ã®å¤‰æ›´ã¯ã€ä»¥å‰ã®ãƒªãƒªãƒ¼ã‚¹ã§èª¤ã£ã¦å‰Šé™¤ã•れ㟠EAP ã®å¤ã„動作を復元ã—ã€å®Ÿè¡Œæ™‚ã«ç™ºç”Ÿã™ã‚‹ã‚¨ãƒ©ãƒ¼ã«å¯¾ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ˆã‚Šè€æ€§ã‚’æŒã¤ã‚ˆã†ã«ã™ã‚‹ãŸã‚ã«è¡Œã‚れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:374 msgid "Version 2.8.14 of Ansible changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the ``mode`` change has been reverted in 2.8.15, and ``mode`` will now default to ``0o666 & ~umask`` as in previous versions of Ansible." msgstr "Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8.14 ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã§ ``mode`` パラメーターを指定ã—ãªã‹ã£ãŸå ´åˆã«ã€ãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã®ãƒ‡ãƒ•ォルトモードを ``0o600 & ~umask`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“れã¯ã€å†ç·¨æˆã—㟠CVE レãƒãƒ¼ãƒˆã«å¯¾ã™ã‚‹å¯¾å¿œã§ã—ãŸã€‚ãã®çµæžœã€2.8.15 ã§ã¯ ``mode`` ã®å¤‰æ›´ãŒå…ƒã«æˆ»ã•れã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨åŒæ§˜ã«ã€``mode`` ã®ãƒ‡ãƒ•ォルト㌠``0o666 & ~umask`` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:375 msgid "If you changed any tasks to specify less restrictive permissions while using 2.8.14, those changes will be unnecessary (but will do no harm) in 2.8.15." msgstr "2.8.14 を使用ã™ã‚‹éš›ã«ã€ã‚ˆã‚Šåˆ¶é™ã®å°‘ãªã„パーミッションを指定ã™ã‚‹ã‚ˆã†ã«ã‚¿ã‚¹ã‚¯ã‚’変更ã—ãŸå ´åˆã€2.8.15 ã§ã¯ãã®å¤‰æ›´ã¯ä¸è¦ã«ãªã‚Šã¾ã™ (ãŸã ã—ã€å®³ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/porting_guides/porting_guide_2.8.rst:378 msgid "``dnf`` and ``yum`` - As of version 2.8.15, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task." msgstr "``dnf`` ãŠã‚ˆã³ ``yum`` - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8.15 よりã€``dnf`` モジュール (ãŠã‚ˆã³ ``dnf`` を使用ã™ã‚‹å ´åˆã¯ ``yum`` アクション) ãŒãƒ‘ッケージ㮠GPG ç½²åã‚’æ­£ã—ãæ¤œè¨¼ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(CVE-2020-14365)。``Failed to validate GPG signature for [package name]`` ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れãŸå ´åˆã¯ã€ä½¿ç”¨ã—ã¦ã„ã‚‹ DNF リãƒã‚¸ãƒˆãƒªãƒ¼ã‚„パッケージ㮠GPG ã‚­ãƒ¼ãŒæ­£ã—ãインãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã“れを行ㆠ1 ã¤ã®æ–¹æ³•ã¨ã—ã¦ã€``rpm_key`` モジュールã®ä½¿ç”¨ãŒã‚りã¾ã™ã€‚推奨ã¯ã—ã¾ã›ã‚“ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯ GPG ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã€``dnf`` タスクã¾ãŸã¯ ``yum`` タスク㫠``disable_gpg_check: yes`` を明示的ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:386 msgid "ec2_remote_facts" msgstr "ec2_remote_facts" #: ../../rst/porting_guides/porting_guide_2.8.rst:387 msgid "azure" msgstr "azure" #: ../../rst/porting_guides/porting_guide_2.8.rst:388 msgid "cs_nic" msgstr "cs_nic" #: ../../rst/porting_guides/porting_guide_2.8.rst:389 msgid "netscaler" msgstr "netscaler" #: ../../rst/porting_guides/porting_guide_2.8.rst:390 msgid "win_msi" msgstr "win_msi" #: ../../rst/porting_guides/porting_guide_2.8.rst:395 msgid "The following modules will be removed in Ansible 2.12. Please update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:397 msgid "``foreman`` use `foreman-ansible-modules `_ instead." msgstr "``foreman`` ã¯ã€ä»£ã‚り㫠`foreman-ansible-modules `_ を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:398 msgid "``katello`` use `foreman-ansible-modules `_ instead." msgstr "``katello`` ã¯ã€ä»£ã‚り㫠`foreman-ansible-modules `_ を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:399 msgid "``github_hooks`` use :ref:`github_webhook ` and :ref:`github_webhook_facts ` instead." msgstr "``github_hooks`` ã¯ã€ä»£ã‚り㫠:ref:`github_webhook ` ãŠã‚ˆã³ :ref:`github_webhook_facts ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:400 msgid "``digital_ocean`` use :ref:`digital_ocean_droplet ` instead." msgstr "``digital_ocean`` ã¯ã€ä»£ã‚り㫠:ref:`digital_ocean_droplet ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:401 msgid "``gce`` use :ref:`gcp_compute_instance ` instead." msgstr "``gce`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_instance ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:402 msgid "``gcspanner`` use :ref:`gcp_spanner_instance ` and :ref:`gcp_spanner_database ` instead." msgstr "``gcspanner`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_spanner_instance ` ãŠã‚ˆã³ :ref:`gcp_spanner_database ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:403 msgid "``gcdns_record`` use :ref:`gcp_dns_resource_record_set ` instead." msgstr "``gcdns_record`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_dns_resource_record_set ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:404 msgid "``gcdns_zone`` use :ref:`gcp_dns_managed_zone ` instead." msgstr "``gcdns_zone`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_dns_managed_zone ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:405 msgid "``gcp_forwarding_rule`` use :ref:`gcp_compute_global_forwarding_rule ` or :ref:`gcp_compute_forwarding_rule ` instead." msgstr "``gcp_forwarding_rule`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_global_forwarding_rule ` ã¾ãŸã¯:ref:`gcp_compute_forwarding_rule ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:406 msgid "``gcp_healthcheck`` use :ref:`gcp_compute_health_check `, :ref:`gcp_compute_http_health_check `, or :ref:`gcp_compute_https_health_check ` instead." msgstr "``gcp_healthcheck`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_health_check `ã€:ref:`gcp_compute_http_health_check `ã€ã¾ãŸã¯ :ref:`gcp_compute_https_health_check ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:407 msgid "``gcp_backend_service`` use :ref:`gcp_compute_backend_service ` instead." msgstr "``gcp_backend_service`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_backend_service ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:408 msgid "``gcp_target_proxy`` use :ref:`gcp_compute_target_http_proxy ` instead." msgstr "``gcp_target_proxy`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_target_http_proxy ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:409 msgid "``gcp_url_map`` use :ref:`gcp_compute_url_map ` instead." msgstr "``gcp_url_map`` ã¯ã€ä»£ã‚り㫠:ref:`gcp_compute_url_map ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:410 msgid "``panos`` use the `Palo Alto Networks Ansible Galaxy role `_ instead." msgstr "``panos`` ã¯ã€ä»£ã‚り㫠`Palo Alto Networks Ansible Galaxy role `_ を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:416 msgid "The ``foreman`` and ``katello`` modules have been deprecated in favor of a set of modules that are broken out per entity with better idempotency in mind." msgstr "``foreman`` 㨠``katello`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯éžæŽ¨å¥¨ã«ãªã‚Šã€ã‚ˆã‚Šè‰¯ã„冪等性を考慮ã—ã¦ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã”ã¨ã«åˆ†å‰²ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚»ãƒƒãƒˆãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:417 msgid "The ``foreman`` and ``katello`` modules replacement is officially part of the Foreman Community and supported there." msgstr "``foreman`` モジュールãŠã‚ˆã³ ``katello`` モジュールã®ç½®ãæ›ãˆã¯ã€Foreman Community ã®ä¸€éƒ¨ã§ã‚りã€ãã“ã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:418 msgid "The ``tower_credential`` module originally required the ``ssh_key_data`` to be the path to a ssh_key_file. In order to work like AWX/Tower/RHAAP, ``ssh_key_data`` now contains the content of the file. The previous behavior can be achieved with ``lookup('file', '/path/to/file')``." msgstr "``tower_credential`` モジュールã§ã¯ã€ã‚‚ã¨ã‚‚㨠``ssh_key_data`` ã« ssh_key_file ã®ãƒ‘スを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚AWX/Tower/RHAAP ã®ã‚ˆã†ã«å‹•作ã•ã›ã‚‹ãŸã‚ã«ã€``ssh_key_data`` ã«ãƒ•ァイルã®å†…容をå«ã‚るよã†ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã®å‹•作㯠``lookup('file', '/path/to/file')`` ã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:421 msgid "The ``win_scheduled_task`` module deprecated support for specifying a trigger repetition as a list and this format will be removed in Ansible 2.12. Instead specify the repetition as a dictionary value." msgstr "``win_scheduled_task`` モジュールã¯ã€ãƒˆãƒªã‚¬ãƒ¼ã®ç¹°ã‚Šè¿”ã—をリストã¨ã—ã¦æŒ‡å®šã™ã‚‹ã‚µãƒãƒ¼ãƒˆã‚’éžæŽ¨å¥¨ã¨ã—ã¦ãŠã‚Šã€ã“ã®ãƒ•ォーマット㯠Ansible 2.12㧠削除ã•れる予定ã§ã™ã€‚代ã‚りã«ã€ç¹°ã‚Šè¿”ã—をディクショナリーã®å€¤ã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:424 msgid "The ``win_feature`` module has removed the deprecated ``restart_needed`` return value, use the standardized ``reboot_required`` value instead." msgstr "``win_feature`` モジュールã«ã‚ˆã£ã¦éžæŽ¨å¥¨ã® ``restart_needed`` ã®æˆ»ã‚Šå€¤ãŒå‰Šé™¤ã•れã€ä»£ã‚ã‚Šã«æ¨™æº–化ã•れ㟠``reboot_required`` 値を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:427 msgid "The ``win_package`` module has removed the deprecated ``restart_required`` and ``exit_code`` return value, use the standardized ``reboot_required`` and ``rc`` value instead." msgstr "``win_package`` モジュールã«ã‚ˆã£ã¦éžæŽ¨å¥¨ã® ``restart_required`` ãŠã‚ˆã³ ``exit_code`` ã®æˆ»ã‚Šå€¤ãŒå‰Šé™¤ã•れã€ä»£ã‚ã‚Šã«æ¨™æº–化ã•れ㟠``reboot_required`` ãŠã‚ˆã³ ``rc`` ã®å€¤ãŒä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:430 msgid "The ``win_get_url`` module has removed the deprecated ``win_get_url`` return dictionary, contained values are returned directly." msgstr "``win_get_url`` モジュールã¯ã€éžæŽ¨å¥¨ã® ``win_get_url`` 戻りディクショナリーを削除ã—ã€å«ã¾ã‚Œã‚‹å€¤ãŒç›´æŽ¥è¿”ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:433 msgid "The ``win_get_url`` module has removed the deprecated ``skip_certificate_validation`` option, use the standardized ``validate_certs`` option instead." msgstr "``win_get_url`` モジュールã«ã‚ˆã£ã¦éžæŽ¨å¥¨ã® ``skip_certificate_validation`` オプションãŒå‰Šé™¤ã•れã€ä»£ã‚ã‚Šã«æ¨™æº–化ã•れ㟠``validate_certs`` オプションを使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:436 msgid "The ``vmware_local_role_facts`` module now returns a list of dicts instead of a dict of dicts for role information." msgstr "``vmware_local_role_facts`` モジュールã¯ã€ãƒ­ãƒ¼ãƒ«æƒ…å ±ã«å¯¾ã—ã¦ã€dict ã®ä¸­ã® dict ã§ã¯ãªãã€dict ã®ãƒªã‚¹ãƒˆã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:438 msgid "If ``docker_network`` or ``docker_volume`` were called with ``diff: yes``, ``check_mode: yes`` or ``debug: yes``, a return value called ``diff`` was returned of type ``list``. To enable proper diff output, this was changed to type ``dict``; the original ``list`` is returned as ``diff.differences``." msgstr "``docker_network`` ã¾ãŸã¯ ``docker_volume`` ㌠``diff: yes``ã€``check_mode: yes``ã€ã¾ãŸã¯``debug: yes`` ã§å‘¼ã³å‡ºã•れãŸå ´åˆã¯ã€``diff`` ã¨å‘¼ã°ã‚Œã‚‹ ``list`` ã‚¿ã‚¤ãƒ—ã®æˆ»ã‚Šå€¤ãŒè¿”ã•れã¦ã„ã¾ã—ãŸã€‚é©åˆ‡ãª diff 出力をå¯èƒ½ã«ã™ã‚‹ãŸã‚ã«ã€ã“れを ``dict`` タイプã«å¤‰æ›´ã—ã€å…ƒã® ``list`` ã¯``diff.differences`` ã¨ã—ã¦è¿”ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:442 msgid "The ``na_ontap_cluster_peer`` module has replaced ``source_intercluster_lif`` and ``dest_intercluster_lif`` string options with ``source_intercluster_lifs`` and ``dest_intercluster_lifs`` list options" msgstr "``na_ontap_cluster_peer`` モジュールã§ã¯ã€æ–‡å­—列オプション㮠``source_intercluster_lif`` ãŠã‚ˆã³ ``dest_intercluster_lif`` ãŒã€ãƒªã‚¹ãƒˆã‚ªãƒ—ション㮠``source_intercluster_lifs`` ãŠã‚ˆã³ ``dest_intercluster_lifs`` ã«ç½®ãæ›ã‚りã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:445 msgid "The ``modprobe`` module now detects kernel builtins. Previously, attempting to remove (with ``state: absent``) a builtin kernel module succeeded without any error message because ``modprobe`` did not detect the module as ``present``. Now, ``modprobe`` will fail if a kernel module is builtin and ``state: absent`` (with an error message from the modprobe binary like ``modprobe: ERROR: Module nfs is builtin.``), and it will succeed without reporting changed if ``state: present``. Any playbooks that are using ``changed_when: no`` to mask this quirk can safely remove that workaround. To get the previous behavior when applying ``state: absent`` to a builtin kernel module, use ``failed_when: false`` or ``ignore_errors: true`` in your playbook." msgstr "``modprobe`` モジュールãŒã‚«ãƒ¼ãƒãƒ«ãƒ“ルドインを検出ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¾ã§ã¯ã€``modprobe`` ãŒãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ ``present`` ã¨ã—ã¦æ¤œå‡ºã—ã¦ã„ãªã‹ã£ãŸãŸã‚ã€çµ„ã¿è¾¼ã¿ã‚«ãƒ¼ãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ (``state: absent`` ã§) 削除ã—よã†ã¨ã™ã‚‹ã¨ã€æˆåŠŸã—ã¦ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚‚表示ã•れã¾ã›ã‚“ã§ã—ãŸã€‚ç¾åœ¨ã§ã¯ã€``modprobe`` ã¯ã‚«ãƒ¼ãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ ``state: absent`` ã®å ´åˆã¯å¤±æ•—ã— (modprobe ãƒã‚¤ãƒŠãƒªãƒ¼ã‹ã‚‰ ``modprobe: ERROR: Module nfs is builtin.`` ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™)ã€``state: present`` ã®å ´åˆã¯å¤‰æ›´ã‚’報告ã›ãšã«æˆåŠŸã—ã¾ã™ã€‚ã“ã®ç‰¹ç•°ãªå‹•作を隠ã™ãŸã‚ã« ``changed_when: no`` を使用ã—ã¦ã„ã‚‹ Playbook ã¯ã€ãã®å›žé¿ç­–を削除ã—ã¦ã‚‚å•題ã¯ã‚りã¾ã›ã‚“。組ã¿è¾¼ã¿ã‚«ãƒ¼ãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« ``state: absent`` ã‚’é©ç”¨ã—ã¦ä»¥å‰ã®å‹•作を得るã«ã¯ã€Playbook ã§ ``failed_when: false`` ã¾ãŸã¯ ``ignore_errors: true`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:453 msgid "The ``digital_ocean`` module has been deprecated in favor of modules that do not require external dependencies. This allows for more flexibility and better module support." msgstr "``digital_ocean`` モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€å¤–部ä¾å­˜ã‚’å¿…è¦ã¨ã—ãªã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚ˆã‚ŠæŸ”軟ã§å„ªã‚ŒãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚µãƒãƒ¼ãƒˆãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:456 msgid "The ``docker_container`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``container``. The returned fact will be removed in Ansible 2.12." msgstr "``docker_container`` モジュールã¯ã€è¿”ã•れるファクト ``docker_container`` ã‚’éžæŽ¨å¥¨ã¨ã—ã¦ã„ã¾ã™ã€‚è¿”ã•れる変数 ``container`` ã¨åŒã˜å€¤ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚è¿”ã•れるファクト㯠Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:458 msgid "The ``docker_network`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``network``. The returned fact will be removed in Ansible 2.12." msgstr "``docker_network`` モジュールã¯ã€è¿”ã•れるファクト ``docker_container`` ã‚’éžæŽ¨å¥¨ã¨ã—ã¦ã„ã¾ã™ã€‚è¿”ã•れる変数 ``network`` ã¨åŒã˜å€¤ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚è¿”ã•れるファクト㯠Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:460 msgid "The ``docker_volume`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``volume``. The returned fact will be removed in Ansible 2.12." msgstr "``docker_volume`` モジュールã¯ã€è¿”ã•れるファクト ``docker_container`` ã‚’éžæŽ¨å¥¨ã¨ã—ã¦ã„ã¾ã™ã€‚è¿”ã•れる変数 ``volume`` ã¨åŒã˜å€¤ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚è¿”ã•れるファクト㯠Ansible 2.12 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:463 msgid "The ``docker_service`` module was renamed to :ref:`docker_compose `." msgstr "``docker_service`` モジュールã®åå‰ãŒ :ref:`docker_compose ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:464 msgid "The renamed ``docker_compose`` module used to return one fact per service, named same as the service. A dictionary of these facts is returned as the regular return value ``services``. The returned facts will be removed in Ansible 2.12." msgstr "サービスã¨åŒã˜åå‰ã«å¤‰æ›´ã—㟠``docker_compose`` モジュールã¯ã€ã‚µãƒ¼ãƒ“スã”ã¨ã« 1 ã¤ã®ãƒ•ァクトを返ã™ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“れらã®ãƒ•ァクトã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¯ã€é€šå¸¸ã®æˆ»ã‚Šå€¤ ``services`` ã¨ã—ã¦è¿”ã•れã¾ã™ã€‚è¿”ã•れるファクト㯠Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:471 msgid "The ``docker_swarm_service`` module no longer sets a defaults for the following options:" msgstr "``docker_swarm_service`` モジュールã§ã¯ã€ä»¥ä¸‹ã®ã‚ªãƒ—ションã«ãƒ‡ãƒ•ォルトを設定ã—ãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:469 msgid "``user``. Before, the default was ``root``." msgstr "``user``。以å‰ã®ãƒ‡ãƒ•ォルト㯠``root`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:470 msgid "``update_delay``. Before, the default was ``10``." msgstr "``update_delay``。以å‰ã®ãƒ‡ãƒ•ォルト㯠``10`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:471 msgid "``update_parallelism``. Before, the default was ``1``." msgstr "``update_parallelism``。以å‰ã®ãƒ‡ãƒ•ォルト㯠``1`` ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:473 msgid "``vmware_vm_facts`` used to return dict of dict with virtual machine's facts. Ansible 2.8 and onwards will return list of dict with virtual machine's facts. Please see module ``vmware_vm_facts`` documentation for example." msgstr "``vmware_vm_facts`` ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ•ァクトをå«ã‚€ dict ã® dict ã‚’è¿”ã™ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚Ansible 2.8 以é™ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ•ァクトをå«ã‚€ dict ã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚例ã¨ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``vmware_vm_facts`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:476 msgid "``vmware_guest_snapshot`` module used to return ``results``. Since Ansible 2.8 and onwards ``results`` is a reserved keyword, it is replaced by ``snapshot_results``. Please see module ``vmware_guest_snapshots`` documentation for example." msgstr "``results`` ã‚’è¿”ã™ã®ã«ä½¿ç”¨ã•れる ``vmware_guest_snapshot`` モジュール。Ansible 2.8 以é™ã€``results`` ã¯äºˆç´„キーワードã§ã‚ã‚‹ãŸã‚ã€``snapshot_results`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``vmware_guest_snapshots`` ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:479 msgid "The ``panos`` modules have been deprecated in favor of using the Palo Alto Networks `Ansible Galaxy role `_. Contributions to the role can be made `here `_." msgstr "``panos`` モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€Palo Alto Networks ã® `Ansible Galaxy ロール `_ ãŒä½¿ç”¨ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ロールã¸ã®è²¢çŒ®ã¯ `ã“ã¡ã‚‰ `_ ã‹ã‚‰è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:483 msgid "The ``ipa_user`` module originally always sent ``password`` to FreeIPA regardless of whether the password changed. Now the module only sends ``password`` if ``update_password`` is set to ``always``, which is the default." msgstr "``ipa_user`` モジュールã¯ã€ãƒ‘スワードãŒå¤‰æ›´ã•れãŸã‹ã©ã†ã‹ã«é–¢ã‚らãšã€å¸¸ã« ``password`` ã‚’ FreeIPA ã«é€ä¿¡ã—ã¾ã™ã€‚ç¾åœ¨ã¯ã€``update_password`` ãŒãƒ‡ãƒ•ォルトã§ã‚ã‚‹ ``always`` ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã®ã¿ ``password`` ã‚’é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:485 msgid "The ``win_psexec`` has deprecated the undocumented ``extra_opts`` module option. This will be removed in Ansible 2.10." msgstr "``win_psexec`` ã§ã¯ã€æ–‡æ›¸åŒ–ã•れã¦ã„ãªã„ ``extra_opts`` モジュールオプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚ã“れ㯠Ansible 2.10 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:487 msgid "The ``win_nssm`` module has deprecated the following options in favor of using the ``win_service`` module to configure the service after installing it with ``win_nssm``: * ``dependencies``, use ``dependencies`` of ``win_service`` instead * ``start_mode``, use ``start_mode`` of ``win_service`` instead * ``user``, use ``username`` of ``win_service`` instead * ``password``, use ``password`` of ``win_service`` instead These options will be removed in Ansible 2.12." msgstr "``win_nssm`` モジュールã§ã¯ã€ä»¥ä¸‹ã®ã‚ªãƒ—ションãŒéžæŽ¨å¥¨ã«ãªã‚Šã€``win_nssm`` を使用ã—ãŸã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã®ã‚µãƒ¼ãƒ“ス設定㫠``win_service`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚* ``dependencies`` ã®ä»£ã‚り㫠``win_service`` ã® ``dependencies`` を使用ã—ã¾ã™ã€‚ * ``start_mode`` ã®ä»£ã‚り㫠``win_service`` ã® ``start_mode`` を使用ã—ã¾ã™ã€‚ * ``user`` ã®ä»£ã‚り㫠``win_service`` ã® ``username`` を使用ã—ã¾ã™ã€‚ * ``password`` ã®ä»£ã‚り㫠``win_service`` ã® ``password`` を使用ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:494 msgid "The ``win_nssm`` module has also deprecated the ``start``, ``stop``, and ``restart`` values of the ``status`` option. You should use the ``win_service`` module to control the running state of the service. This will be removed in Ansible 2.12." msgstr "``win_nssm`` モジュールã§ã¯ã€``status`` オプション㮠``start``ã€``stop``ã€ãŠã‚ˆã³ ``restart`` ã®å€¤ã‚‚éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚``win_service`` モジュールを使用ã—ã¦ã€ã‚µãƒ¼ãƒ“スã®å®Ÿè¡ŒçŠ¶æ…‹ã‚’åˆ¶å¾¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:497 msgid "The ``status`` module option for ``win_nssm`` has changed its default value to ``present``. Before, the default was ``start``. Consequently, the service is no longer started by default after creation with ``win_nssm``, and you should use the ``win_service`` module to start it if needed." msgstr "``win_nssm`` ã® ``status`` モジュールオプションã®ãƒ‡ãƒ•ォルト値㌠``present`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚以å‰ã®ãƒ‡ãƒ•ォルト㯠``start`` ã§ã—ãŸã€‚ãã®çµæžœã€``win_nssm`` ã§ä½œæˆã—ãŸã‚µãƒ¼ãƒ“スã¯ãƒ‡ãƒ•ォルトã§ã¯é–‹å§‹ã•れãªããªã‚Šã€å¿…è¦ã«å¿œã˜ã¦ ``win_service`` モジュールを使用ã—ã¦ã‚µãƒ¼ãƒ“スを開始ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:501 msgid "The ``app_parameters`` module option for ``win_nssm`` has been deprecated; use ``argument`` instead. This will be removed in Ansible 2.12." msgstr "``win_nssm`` ã® ``app_parameters`` モジュールオプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã™ã€‚代ã‚り㫠``argument`` を使用ã—ã¦ãã ã•ã„。ã“ã®ã‚ªãƒ—ションã¯ã€Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:503 msgid "The ``app_parameters_free_form`` module option for ``win_nssm`` has been aliased to the new ``arguments`` option." msgstr "``win_nssm`` 用㮠``app_parameters_free_form`` モジュールオプションã¯ã€æ–°ã—ã„ ``arguments`` オプションã«å¯¾ã—ã¦ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒè¨­å®šã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:505 msgid "The ``win_dsc`` module will now validate the input options for a DSC resource. In previous versions invalid options would be ignored but are now not." msgstr "``win_dsc`` モジュールã¯ã€DSC リソースã®å…¥åŠ›ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’æ¤œè¨¼ã—ã¾ã—ãŸã€‚以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ç„¡åйãªã‚ªãƒ—ションã¯ç„¡è¦–ã•れã¾ã™ãŒã€ä»Šå›žã¯ç„¡è¦–ã•れã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.8.rst:508 msgid "The ``openssl_pkcs12`` module will now regenerate the pkcs12 file if there are differences between the file on disk and the parameters passed to the module." msgstr "ディスク上ã®ãƒ•ァイルã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ãƒ‘ラメーターã«é•ã„ãŒã‚ã‚‹å ´åˆã¯ã€``openssl_pkcs12`` モジュール㌠pkcs12 ファイルをå†ç”Ÿæˆã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:513 msgid "Ansible no longer defaults to the ``paramiko`` connection plugin when using macOS as the control node. Ansible will now use the ``ssh`` connection plugin by default on a macOS control node. Since ``ssh`` supports connection persistence between tasks and playbook runs, it performs better than ``paramiko``. If you are using password authentication, you will need to install ``sshpass`` when using the ``ssh`` connection plugin. Or you can explicitly set the connection type to ``paramiko`` to maintain the pre-2.8 behavior on macOS." msgstr "Ansible ã¯ã€macOS を制御ノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€``paramiko`` connection プラグインをデフォルトã§ä½¿ç”¨ã—ãªããªã‚Šã¾ã—ãŸã€‚Ansible ã¯ã€macOS ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§ã¯ãƒ‡ãƒ•ォルト㧠``ssh`` connection プラグインを使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚``ssh`` ã¯ã€ã‚¿ã‚¹ã‚¯ã¨ Playbook ã®å®Ÿè¡Œé–“ã®æŽ¥ç¶šæŒç¶šæ€§ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ãŸã‚ã€``paramiko`` よりもパフォーマンスãŒé«˜ããªã‚Šã¾ã™ã€‚パスワードèªè¨¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``ssh`` connection プラグインを使用ã™ã‚‹éš›ã« ``sshpass`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€æŽ¥ç¶šã‚¿ã‚¤ãƒ—を明示的㫠``paramiko`` ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€macOS ã§ã® 2.8 以å‰ã®å‹•作を維æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:515 msgid "Connection plugins have been standardized to allow use of ``ansible__user`` and ``ansible__password`` variables. Variables such as ``ansible__pass`` and ``ansible__username`` are treated with lower priority than the standardized names and may be deprecated in the future. In general, the ``ansible_user`` and ``ansible_password`` vars should be used unless there is a reason to use the connection-specific variables." msgstr "connection プラグインã¯ã€``ansible__user`` 変数ãŠã‚ˆã³ ``ansible__password`` 変数を使用ã§ãるよã†ã«æ¨™æº–化ã•れã¾ã—ãŸã€‚``ansible__pass`` ã‚„ ``ansible__username`` ã®ã‚ˆã†ãªå¤‰æ•°ã¯ã€æ¨™æº–化ã•れãŸåå‰ã‚ˆã‚Šã‚‚優先度ãŒä½Žã扱ã‚れã€å°†æ¥çš„ã«ã¯éžæŽ¨å¥¨ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚一般的ã«ã¯ã€æŽ¥ç¶šå°‚用ã®å¤‰æ•°ã‚’使用ã™ã‚‹ç†ç”±ãŒãªã„é™ã‚Šã€``ansible_user`` 㨠``ansible_password`` ã®å¤‰æ•°ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:522 msgid "The ``powershell`` shell plugin now uses ``async_dir`` to define the async path for the results file and the default has changed to ``%USERPROFILE%\\.ansible_async``. To control this path now, either set the ``ansible_async_dir`` variable or the ``async_dir`` value in the ``powershell`` section of the config ini." msgstr "``powershell`` シェルプラグインã§ã¯ã€çµæžœãƒ•ァイルã®éžåŒæœŸãƒ‘スã®å®šç¾©ã« ``async_dir`` を使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã€ãƒ‡ãƒ•ォルト㯠``%USERPROFILE%\\.ansible_async`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®ãƒ‘スを制御ã™ã‚‹ã«ã¯ã€``ansible_async_dir`` 変数を設定ã™ã‚‹ã‹ã€config ini ã® ``powershell`` セクション㧠``async_dir`` ã®å€¤ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:526 msgid "Order of enabled inventory plugins (:ref:`INVENTORY_ENABLED`) has been updated, :ref:`auto ` is now before :ref:`yaml ` and :ref:`ini `." msgstr "有効ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグイン (:ref:`INVENTORY_ENABLED`) ã®é †åºãŒæ›´æ–°ã•れã¾ã—ãŸã€‚:ref:`auto ` 㯠:ref:`yaml ` ãŠã‚ˆã³ :ref:`ini ` ã®å‰ã«è¿½åŠ ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:528 msgid "The private ``_options`` attribute has been removed from the ``CallbackBase`` class of callback plugins. If you have a third-party callback plugin which needs to access the command line arguments, use code like the following instead of trying to use ``self._options``:" msgstr "``_options`` ã®ãƒ—ライベート属性ã¯ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグイン㮠``CallbackBase`` クラスã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚コマンドライン引数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ã®ã‚るサードパーティー製 callback ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’ãŠæŒã¡ã®å ´åˆã¯ã€``self._options`` を使用ã™ã‚‹ä»£ã‚りã«ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:538 msgid "``context.CLIARGS`` is a read-only dictionary so normal dictionary retrieval methods like ``CLIARGS.get('tags')`` and ``CLIARGS['tags']`` work as expected but you won't be able to modify the cli arguments at all." msgstr "``context.CLIARGS`` ã¯èª­ã¿å–り専用ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚ã‚‹ãŸã‚ã€``CLIARGS.get('tags')`` ã‚„``CLIARGS['tags']`` ã®ã‚ˆã†ãªé€šå¸¸ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®æ¤œç´¢æ–¹æ³•ã¯æœŸå¾…通りã«å‹•作ã—ã¾ã™ãŒã€cli 引数を変更ã™ã‚‹ã“ã¨ã¯ä¸€åˆ‡ã§ãã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_2.8.rst:542 msgid "Play recap now counts ``ignored`` and ``rescued`` tasks as well as ``ok``, ``changed``, ``unreachable``, ``failed`` and ``skipped`` tasks, thanks to two additional stat counters in the ``default`` callback plugin. Tasks that fail and have ``ignore_errors: yes`` set are listed as ``ignored``. Tasks that fail and then execute a rescue section are listed as ``rescued``. Note that ``rescued`` tasks are no longer counted as ``failed`` as in Ansible 2.7 (and earlier)." msgstr "プレイã®è¦ç´„ã§ã¯ã€``default`` callback プラグイン㮠2 ã¤ã®è¿½åŠ ã‚¹ã‚¿ãƒƒãƒˆã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ã®ãŠã‹ã’ã§ã€ã‚¿ã‚¹ã‚¯ã¯ ``ignored`` ã¨``rescued`` ã ã‘ã§ãªãã€``ok``ã€``changed``ã€``unreachable``ã€``failed``ã€``skipped`` もカウントã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚失敗ã—ã¦``ignore_errors: yes`` ãŒè¨­å®šã•れãŸã‚¿ã‚¹ã‚¯ã¯ ``ignored`` ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã•れã¾ã™ã€‚失敗ã—ã¦ãƒ¬ã‚¹ã‚­ãƒ¥ãƒ¼ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ãŸã‚¿ã‚¹ã‚¯ã¯ã€``rescued`` ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã•れã¾ã™ã€‚ãªãŠã€Ansible 2.7 (ãŠã‚ˆã³ãれ以å‰) ã§ã¯ã€``rescued`` タスク㯠``failed`` ã¨ã—ã¦ã‚«ã‚¦ãƒ³ãƒˆã•れãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:544 msgid "``osx_say`` callback plugin was renamed into :ref:`say `." msgstr "``osx_say`` callback プラグインã®åå‰ãŒ :ref:`say ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:546 msgid "Inventory plugins now support caching via cache plugins. To start using a cache plugin with your inventory see the section on caching in the :ref:`inventory guide`. To port a custom cache plugin to be compatible with inventory see :ref:`developer guide on cache plugins`." msgstr "inventory プラグイン㌠cache プラグインã«ã‚ˆã‚‹ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¨­å®šã«å¯¾å¿œã—ã¾ã—ãŸã€‚インベントリー㧠cache プラグインã®ä½¿ç”¨ã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`インベントリーガイド`ã€ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¨­å®šã«é–¢ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。カスタム cache プラグインをインベントリーã¨äº’æ›æ€§ãŒã‚るよã†ã«ç§»æ¤ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`cache プラグインã®é–‹ç™ºè€…ガイド`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.8.rst:552 msgid "Display class" msgstr "クラスã®è¡¨ç¤º" #: ../../rst/porting_guides/porting_guide_2.8.rst:554 msgid "As of Ansible 2.8, the ``Display`` class is now a \"singleton\". Instead of using ``__main__.display`` each file should import and instantiate ``ansible.utils.display.Display`` on its own." msgstr "Ansible 2.8ã§ã¯ã€``Display`` クラスãŒã€Œã‚·ãƒ³ã‚°ãƒ«ãƒˆãƒ³ã€ã«ãªã‚Šã¾ã—ãŸã€‚å„ファイルã¯ã€``__main__.display`` を使用ã™ã‚‹ä»£ã‚り㫠``ansible.utils.display.Display`` をインãƒãƒ¼ãƒˆã—ã¦ç‹¬è‡ªã«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:557 msgid "**OLD** In Ansible 2.7 (and earlier) the following was used to access the ``display`` object:" msgstr "Ansible 2.7 以å‰ã«ãŠã‘ã‚‹ **以å‰ã®æ©Ÿèƒ½** ``display`` オブジェクトã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ã¯ä»¥ä¸‹ãŒä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:567 msgid "**NEW** In Ansible 2.8 the following should be used:" msgstr "**新機能** Ansible 2.8 ã§ã¯ã€ä»¥ä¸‹ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:577 msgid "The ``eos_config``, ``ios_config``, and ``nxos_config`` modules have removed the deprecated ``save`` and ``force`` parameters, use the ``save_when`` parameter to replicate their functionality." msgstr "``eos_config`` モジュールã€``ios_config`` モジュールã€ãŠã‚ˆã³ ``nxos_config`` モジュールã¯éžæŽ¨å¥¨ã® ``save`` パラメーターãŠã‚ˆã³ ``force`` パラメーターを削除ã—ã€``save_when`` パラメーターを使用ã—ã¦æ©Ÿèƒ½ã‚’複製ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.8.rst:581 msgid "The ``nxos_vrf_af`` module has removed the ``safi`` parameter. This parameter was deprecated in Ansible 2.4 and has had no impact on the module since then." msgstr "``nxos_vrf_af`` モジュール㯠``safi`` パラメーターを削除ã—ã¾ã—ãŸã€‚ã“ã®ãƒ‘ラメーター㯠Ansible 2.4 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã€ãれ以é™ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å½±éŸ¿ã‚’åŠã¼ã—ã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:6 msgid "Ansible 2.9 Porting Guide" msgstr "Ansible 2.9 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_2.9.rst:8 msgid "This section discusses the behavioral changes between Ansible 2.8 and Ansible 2.9." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.8 㨠Ansible 2.9 ã§ã®å‹•作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:12 msgid "We suggest you read this page along with `Ansible Changelog for 2.9 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible Changelog for 2.9 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:25 msgid "``hash_behaviour`` now affects inventory sources. If you have it set to ``merge``, the data you get from inventory might change and you will have to update playbooks accordingly. If you're using the default setting (``overwrite``), you will see no changes. Inventory was ignoring this setting." msgstr "``hash_behaviour`` インベントリーソースã«å½±éŸ¿ã—ã¾ã™ã€‚ã“れを ``merge`` ã«è¨­å®šã—ãŸå ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ãŒå¤‰æ›´ã•れã€Playbook ãŒé©åˆ‡ã«æ›´æ–°ã•れる必è¦ãŒã‚りã¾ã™ã€‚デフォルト設定 (``overwrite``) を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€å¤‰æ›´ã•れã¾ã›ã‚“。インベントリーã¯ã€ã“ã®è¨­å®šã‚’無視ã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:28 msgid "Loops" msgstr "ループ" #: ../../rst/porting_guides/porting_guide_2.9.rst:30 msgid "Ansible 2.9 handles \"unsafe\" data more robustly, ensuring that data marked \"unsafe\" is not templated. In previous versions, Ansible recursively marked all data returned by the direct use of ``lookup()`` as \"unsafe\", but only marked structured data returned by indirect lookups using ``with_X`` style loops as \"unsafe\" if the returned elements were strings. Ansible 2.9 treats these two approaches consistently." msgstr "Ansible 2.9 ã§ã¯ã€ã€Œunsafeã€ã¨ãƒžãƒ¼ã‚¯ã•れãŸãƒ‡ãƒ¼ã‚¿ãŒãƒ†ãƒ³ãƒ—レート化ã•れãªã„よã†ã«ã€ã€Œunsafeã€ãƒ‡ãƒ¼ã‚¿ã‚’より強固ã«å‡¦ç†ã—ã¾ã™ã€‚以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€Ansible ã¯``lookup()`` を直接使用ã—ã¦è¿”ã•れãŸã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’å†å¸°çš„ã«ã€Œunsafeã€ã¨è¡¨ç¤ºã—ã¦ã„ã¾ã—ãŸãŒã€``with_X`` スタイルã®ãƒ«ãƒ¼ãƒ—を使用ã—ã¦é–“接的ã«ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã—ã¦è¿”ã•ã‚ŒãŸæ§‹é€ åŒ–データã¯ã€è¿”ã•れるè¦ç´ ãŒæ–‡å­—列ã®å ´åˆã«ã®ã¿ã€Œunsafeã€ã¨è¡¨ç¤ºã—ã¦ã„ã¾ã—ãŸã€‚Ansible 2.9 ã§ã¯ã€ã“ã® 2 ã¤ã®ã‚¢ãƒ—ローãƒã‚’一貫ã—ã¦æ‰±ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:32 msgid "As a result, if you use ``with_dict`` to return keys with templatable values, your templates may no longer work as expected in Ansible 2.9." msgstr "ãã®çµæžœã€``with_dict`` を使用ã—ã¦ã€ãƒ†ãƒ³ãƒ—レート化ã§ãる値ã¨ã‚­ãƒ¼ãŒè¿”ã•れるã¨ã€ãƒ†ãƒ³ãƒ—レート㯠Ansible 2.9 ã§ã¯æƒ³å®šã©ãŠã‚Šã«å‹•作ã—ãªããªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:34 msgid "To allow the old behavior, switch from using ``with_X`` to using ``loop`` with a filter as described at :ref:`migrating_to_loop`." msgstr "以å‰ã®å‹•作を許å¯ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`migrating_to_loop`ã€ã§èª¬æ˜Žã•れã¦ã„るフィルターã§ä½¿ç”¨ã™ã‚‹ ``with_X`` ã‚’ ``loop`` ã«åˆ‡ã‚Šæ›¿ãˆã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:39 msgid "The location of the Galaxy token file has changed from ``~/.ansible_galaxy`` to ``~/.ansible/galaxy_token``. You can configure both path and file name with the :ref:`galaxy_token_path` config." msgstr "Galaxy トークンファイルã®å ´æ‰€ãŒ ``~/.ansible_galaxy`` ã‹ã‚‰ ``~/.ansible/galaxy_token`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚:ref:`galaxy_token_path` 設定ã§ã€ãƒ‘スã¨ãƒ•ァイルåã®ä¸¡æ–¹ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:49 msgid "Collection loader changes" msgstr "コレクションローダーã®å¤‰æ›´" #: ../../rst/porting_guides/porting_guide_2.9.rst:51 msgid "The way to import a PowerShell or C# module util from a collection has changed in the Ansible 2.9 release. In Ansible 2.8 a util was imported with the following syntax:" msgstr "Ansible 2.9 リリースã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ PowerShell ã¾ãŸã¯ C# モジュールユーティリティーをインãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚Ansible 2.8 ã§ã¯ã€ä»¥ä¸‹ã®æ§‹æ–‡ã§ ユーティリティーãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:59 msgid "In Ansible 2.9 this was changed to:" msgstr "Ansible 2.9 ã§ã¯ã€ä¸Šè¨˜ã¯æ¬¡ã®ã‚ˆã†ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:66 msgid "The change in the collection import name also requires any C# util namespaces to be updated with the newer name format. This is more verbose but is designed to make sure we avoid plugin name conflicts across separate plugin types and to standardise how imports work in PowerShell with how Python modules work." msgstr "ã¾ãŸã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆåã®å¤‰æ›´ã«ä¼´ã„ã€C# ユーティリティーã®åå‰ç©ºé–“ã‚‚æ–°ã—ã„åå‰å½¢å¼ã«æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚æ–°ã—ã„å½¢å¼ã¯ã‚ˆã‚Šå†—é•·ã«ãªã£ã¦ã„ã¾ã™ãŒã€ä»–ã®ãƒ—ラグインタイプã¨ã®é–“ã§ãƒ—ラグインåãŒç«¶åˆã—ãªã„よã†ã«ã™ã‚‹ãŸã‚ã€ã¾ãŸ PowerShell ã§ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®å‹•作㨠Python モジュールã®å‹•作を標準化ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:74 msgid "The ``win_get_url`` and ``win_uri`` module now sends requests with a default ``User-Agent`` of ``ansible-httpget``. This can be changed by using the ``http_agent`` key." msgstr "``win_get_url`` モジュールãŠã‚ˆã³ ``win_uri`` モジュールã¯ã€``ansible-httpget`` ã®ãƒ‡ãƒ•ォルト㮠``User-Agent`` ã§è¦æ±‚ã‚’é€ä¿¡ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れ㯠``http_agent`` キーを使用ã—ã¦å¤‰æ›´ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:75 msgid "The ``apt`` module now honors ``update_cache=false`` while installing its own dependency and skips the cache update. Explicitly setting ``update_cache=true`` or omitting the param ``update_cache`` will result in a cache update while installing its own dependency." msgstr "``apt`` モジュールã¯ã€è‡ªèº«ã®ä¾å­˜é–¢ä¿‚をインストールã™ã‚‹éš›ã« ``update_cache=false`` ã‚’å°Šé‡ã—ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æ›´æ–°ã‚’スキップã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚``update_cache=true`` を明示的ã«è¨­å®šã™ã‚‹ã‹ã€ãƒ‘ラメーター㮠``update_cache`` ã‚’çœç•¥ã™ã‚‹ã¨ã€è‡ªèº«ã®ä¾å­˜é–¢ä¿‚をインストールã—ã¦ã„ã‚‹é–“ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æ›´æ–°ãŒè¡Œã‚れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:77 msgid "Version 2.9.12 of Ansible changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the mode change has been reverted in 2.9.13, and mode will now default to ``0o666 & ~umask`` as in previous versions of Ansible." msgstr "Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9.12 ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã§ ``mode`` パラメーターを指定ã—ãªã‹ã£ãŸå ´åˆã«ã€ãƒ•ァイルベースã®ã‚¿ã‚¹ã‚¯ã®ãƒ‡ãƒ•ォルトモードを ``0o600 & ~umask`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚ã“れã¯ã€å†ç·¨æˆã—㟠CVE レãƒãƒ¼ãƒˆã«å¯¾ã™ã‚‹å¯¾å¿œã§ã—ãŸã€‚ãã®çµæžœã€2.9.13 ã§ã¯ãƒ¢ãƒ¼ãƒ‰ã®å¤‰æ›´ãŒå…ƒã«æˆ»ã•れã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨åŒæ§˜ã«ã€ãƒ¢ãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ォルト㌠``0o666 & ~umask`` ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:78 msgid "If you changed any tasks to specify less restrictive permissions while using 2.9.12, those changes will be unnecessary (but will do no harm) in 2.9.13." msgstr "2.9.12 を使用ã™ã‚‹éš›ã«ã€ã‚ˆã‚Šåˆ¶é™ã®å°‘ãªã„パーミッションを指定ã™ã‚‹ã‚ˆã†ã«ã‚¿ã‚¹ã‚¯ã‚’変更ã—ãŸå ´åˆã€2.9.13 ã§ã¯ãã®å¤‰æ›´ã¯ä¸è¦ã«ãªã‚Šã¾ã™ (ãŸã ã—ã€å®³ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/porting_guides/porting_guide_2.9.rst:81 msgid "``dnf`` and ``yum`` - As of version 2.9.13, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task." msgstr "``dnf`` ãŠã‚ˆã³ ``yum`` - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9.13 よりã€``dnf`` モジュール (ãŠã‚ˆã³ ``dnf`` を使用ã™ã‚‹å ´åˆã¯ ``yum`` アクション) ãŒãƒ‘ッケージ㮠GPG ç½²åã‚’æ­£ã—ãæ¤œè¨¼ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(CVE-2020-14365)。``Failed to validate GPG signature for [package name]`` ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れãŸå ´åˆã¯ã€ä½¿ç”¨ã—ã¦ã„ã‚‹ DNF リãƒã‚¸ãƒˆãƒªãƒ¼ã‚„パッケージ㮠GPG ã‚­ãƒ¼ãŒæ­£ã—ãインãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã“れを行ㆠ1 ã¤ã®æ–¹æ³•ã¨ã—ã¦ã€``rpm_key`` モジュールã®ä½¿ç”¨ãŒã‚りã¾ã™ã€‚推奨ã¯ã—ã¾ã›ã‚“ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯ GPG ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã€``dnf`` タスクã¾ãŸã¯ ``yum`` タスク㫠``disable_gpg_check: yes`` を明示的ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:85 msgid "Renaming from ``_facts`` to ``_info``" msgstr "``_facts`` ã‹ã‚‰ ``_info`` ã¸åå‰ã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:87 msgid "Ansible 2.9 renamed a lot of modules from ``_facts`` to ``_info``, because the modules do not return :ref:`Ansible facts `. Ansible facts relate to a specific host. For example, the configuration of a network interface, the operating system on a unix server, and the list of packages installed on a Windows box are all Ansible facts. The renamed modules return values that are not unique to the host. For example, account information or region data for a cloud provider. Renaming these modules should provide more clarity about the types of return values each set of modules offers." msgstr "Ansible 2.9 ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ :ref:`Ansible facts ` ã‚’è¿”ã•ãªã„ãŸã‚ã€å¤šãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ãŒ ``_facts`` ã‹ã‚‰``_info`` ã«å¤‰æ›´ãªã‚Šã¾ã—ãŸã€‚Ansible ã®ãƒ•ァクトã¯ã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã«é–¢é€£ã™ã‚‹ã‚‚ã®ã§ã™ã€‚ãŸã¨ãˆã°ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®è¨­å®šã€Unix サーãƒãƒ¼ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€Windows ボックスã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸãƒ‘ッケージã®ãƒªã‚¹ãƒˆã¯ã€ã™ã¹ã¦ Ansible ã®ãƒ•ァクトã§ã™ã€‚åå‰ãŒå¤‰æ›´ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ›ã‚¹ãƒˆã«å›ºæœ‰ã§ã¯ãªã„値を返ã—ã¾ã™ã€‚クラウドプロãƒã‚¤ãƒ€ãƒ¼ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆæƒ…報やリージョンデータãªã©ã§ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åå‰ã‚’変更ã™ã‚‹ã“ã¨ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å„ã‚»ãƒƒãƒˆãŒæä¾›ã™ã‚‹æˆ»ã‚Šå€¤ã®ç¨®é¡žãŒã‚ˆã‚Šæ˜Žç¢ºã«ãªã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:90 msgid "Writing modules" msgstr "モジュールã®è¨˜è¿°" #: ../../rst/porting_guides/porting_guide_2.9.rst:92 msgid "Module and module_utils files can now use relative imports to include other module_utils files. This is useful for shortening long import lines, especially in collections." msgstr "モジュールãŠã‚ˆã³ module_utils ファイルã¯ã€ä»–ã® module_utils ファイルをå«ã‚ã‚‹ãŸã‚ã«ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¯ã€ç‰¹ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ãŠã„ã¦ã€é•·ã„インãƒãƒ¼ãƒˆè¡Œã‚’短ãã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:95 msgid "Example of using a relative import in collections:" msgstr "コレクションã§ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹ä¾‹:" #: ../../rst/porting_guides/porting_guide_2.9.rst:105 msgid "Modules and module_utils shipped with Ansible can use relative imports as well but the savings are smaller:" msgstr "Ansible ã«åŒæ¢±ã•れã¦ã„るモジュール㨠module_utils ã§ã¯ã€ç›¸å¯¾ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚‚使用ã§ãã¾ã™ãŒã€çŸ­ç¸®ã•れるé‡ã¯å°‘ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:116 msgid "Each single dot (``.``) represents one level of the tree (equivalent to ``../`` in filesystem relative links)." msgstr "å˜ä¸€ãƒ‰ãƒƒãƒˆ (``.``) ã¯ãれãžã‚Œãƒ„リー㮠1 レベル (ファイルシステムã®ç›¸å¯¾ãƒªãƒ³ã‚¯ã® ``../`` ã«ç›¸å½“) を表ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:118 msgid "`The Python Relative Import Docs `_ go into more detail of how to write relative imports." msgstr "`Python Relative Import ドキュメント `_ ã§ã¯ã€ç›¸å¯¾çš„ãªã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’ã©ã®ã‚ˆã†ã«æ›¸ãã‹ã€ã‚ˆã‚Šè©³ç´°ã«èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:126 msgid "Apstra's ``aos_*`` modules. See the new modules at `https://github.com/apstra `_." msgstr "Apstra ã® ``aos_*`` モジュール。新ã—ã„モジュール㯠`https://github.com/apstra `_ ã«ã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:127 msgid "ec2_ami_find use :ref:`ec2_ami_facts ` instead." msgstr "ec2_ami_find ã¯ã€ä»£ã‚り㫠:ref:`ec2_ami_facts ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:128 msgid "kubernetes use :ref:`k8s ` instead." msgstr "kubernetes ã¯ã€ä»£ã‚り㫠:ref:`k8s ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:129 msgid "nxos_ip_interface use :ref:`nxos_l3_interface ` instead." msgstr "nxos_ip_interface ã¯ã€ä»£ã‚り㫠:ref:`nxos_l3_interface ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:130 msgid "nxos_portchannel use :ref:`nxos_linkagg ` instead." msgstr "nxos_portchannel ã¯ã€ä»£ã‚り㫠:ref:`nxos_linkagg ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:131 msgid "nxos_switchport use :ref:`nxos_l2_interface ` instead." msgstr "nxos_switchport ã¯ã€ä»£ã‚り㫠:ref:`nxos_l2_interface ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:132 msgid "oc use :ref:`k8s ` instead." msgstr "oc ã¯ã€ä»£ã‚り㫠:ref:`k8s ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:133 msgid "panos_nat_policy use :ref:`panos_nat_rule ` instead." msgstr "panos_nat_policy ã¯ã€ä»£ã‚り㫠:ref:`panos_nat_rule ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:134 msgid "panos_security_policy use :ref:`panos_security_rule ` instead." msgstr "panos_security_policy ã¯ã€ä»£ã‚り㫠:ref:`panos_security_rule ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:135 msgid "vsphere_guest use :ref:`vmware_guest ` instead." msgstr "vsphere_guest ã¯ã€ä»£ã‚り㫠:ref:`vmware_guest ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:141 msgid "The following modules will be removed in Ansible 2.13. Please update update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Ansible 2.13 ã§å‰Šé™¤ã•れã¾ã™ã€‚Playbook ã‚’é©å®œæ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:143 msgid "cs_instance_facts use :ref:`cs_instance_info ` instead." msgstr "cs_instance_facts ã¯ã€ä»£ã‚り㫠:ref:`cs_instance_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:145 msgid "cs_zone_facts use :ref:`cs_zone_info ` instead." msgstr "cs_zone_facts ã¯ã€ä»£ã‚り㫠:ref:`cs_zone_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:147 msgid "digital_ocean_sshkey_facts use :ref:`digital_ocean_sshkey_info ` instead." msgstr "digital_ocean_sshkey_facts ã¯ã€ä»£ã‚り㫠:ref:`digital_ocean_sshkey_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:149 msgid "eos_interface use :ref:`eos_interfaces ` instead." msgstr "edos_interface ã¯ã€ä»£ã‚り㫠:ref:`eos_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:151 msgid "eos_l2_interface use :ref:`eos_l2_interfaces ` instead." msgstr "eos_l2_interface ã¯ã€ä»£ã‚り㫠:ref:`eos_l2_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:153 msgid "eos_l3_interface use :ref:`eos_l3_interfaces ` instead." msgstr "eos_l3_interface ã¯ã€ä»£ã‚り㫠:ref:`eos_l3_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:155 msgid "eos_linkagg use :ref:`eos_lag_interfaces ` instead." msgstr "ems_linkagg ã¯ã€ä»£ã‚り㫠:ref:`eos_lag_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:157 msgid "eos_lldp_interface use :ref:`eos_lldp_interfaces ` instead." msgstr "eds_lldp_interface ã¯ã€ä»£ã‚り㫠:ref:`eos_lldp_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:159 msgid "eos_vlan use :ref:`eos_vlans ` instead." msgstr "eos_vlan ã¯ã€ä»£ã‚り㫠:ref:`eos_vlans ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:161 msgid "ios_interface use :ref:`ios_interfaces ` instead." msgstr "ios_interface ã¯ã€ä»£ã‚り㫠:ref:`ios_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:163 msgid "ios_l2_interface use :ref:`ios_l2_interfaces ` instead." msgstr "ios_l2_interface ã¯ã€ä»£ã‚り㫠:ref:`ios_l2_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:165 msgid "ios_l3_interface use :ref:`ios_l3_interfaces ` instead." msgstr "ios_l3_interface ã¯ã€ä»£ã‚り㫠:ref:`ios_l3_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:167 msgid "ios_vlan use :ref:`ios_vlans ` instead." msgstr "ios_vlan ã¯ã€ä»£ã‚り㫠:ref:`ios_vlans ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:169 msgid "iosxr_interface use :ref:`iosxr_interfaces ` instead." msgstr "iosxr_interface ã¯ã€ä»£ã‚り㫠:ref:`iosxr_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:171 msgid "junos_interface use :ref:`junos_interfaces ` instead." msgstr "junos_interface ã¯ã€ä»£ã‚り㫠:ref:`junos_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:173 msgid "junos_l2_interface use :ref:`junos_l2_interfaces ` instead." msgstr "junos_l2_interface ã¯ã€ä»£ã‚り㫠:ref:`junos_l2_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:175 msgid "junos_l3_interface use :ref:`junos_l3_interfaces ` instead." msgstr "junos_l3_interface ã¯ã€ä»£ã‚り㫠:ref:`junos_l3_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:177 msgid "junos_linkagg use :ref:`junos_lag_interfaces ` instead." msgstr "junos_linkagg ã¯ã€ä»£ã‚り㫠:ref:`junos_lag_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:179 msgid "junos_lldp use :ref:`junos_lldp_global ` instead." msgstr "junos_lldp ã¯ã€ä»£ã‚り㫠:ref:`junos_lldp_global ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:181 msgid "junos_lldp_interface use :ref:`junos_lldp_interfaces ` instead." msgstr "junos_lldp_interface ã¯ã€ä»£ã‚り㫠:ref:`junos_lldp_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:183 msgid "junos_vlan use :ref:`junos_vlans ` instead." msgstr "junos_vlan ã¯ã€ä»£ã‚り㫠:ref:`junos_vlans ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:185 msgid "lambda_facts use :ref:`lambda_info ` instead." msgstr "lambda_facts ã¯ã€ä»£ã‚り㫠:ref:`lambda_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:187 msgid "na_ontap_gather_facts use :ref:`na_ontap_info ` instead." msgstr "na_ontap_gather_facts ã¯ã€ä»£ã‚り㫠:ref:`na_ontap_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:189 msgid "net_banner use the platform-specific [netos]_banner modules instead." msgstr "net_banner ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_banner モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:191 msgid "net_interface use the new platform-specific [netos]_interfaces modules instead." msgstr "net_interface ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_interfaces モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:193 msgid "net_l2_interface use the new platform-specific [netos]_l2_interfaces modules instead." msgstr "net_l2_interface ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_l2_interfaces モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:195 msgid "net_l3_interface use the new platform-specific [netos]_l3_interfaces modules instead." msgstr "net_l3_interface ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_l3_interfaces モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:197 msgid "net_linkagg use the new platform-specific [netos]_lag modules instead." msgstr "net_linkagg ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_lag モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:199 msgid "net_lldp use the new platform-specific [netos]_lldp_global modules instead." msgstr "net_lldp ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_lldp_global モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:201 msgid "net_lldp_interface use the new platform-specific [netos]_lldp_interfaces modules instead." msgstr "net_lldp_interface ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_lldp_interfaces モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:203 msgid "net_logging use the platform-specific [netos]_logging modules instead." msgstr "net_logging ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_logging モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:205 msgid "net_static_route use the platform-specific [netos]_static_route modules instead." msgstr "net_static_route ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_static_route モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:207 msgid "net_system use the platform-specific [netos]_system modules instead." msgstr "net_system ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_system モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:209 msgid "net_user use the platform-specific [netos]_user modules instead." msgstr "net_user ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_user モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:211 msgid "net_vlan use the new platform-specific [netos]_vlans modules instead." msgstr "net_vlan ã¯ã€ä»£ã‚りã«ãƒ—ãƒ©ãƒƒãƒˆãƒ•ã‚©ãƒ¼ãƒ å›ºæœ‰ã®æ–°ã—ã„ [netos]_vlans モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:213 msgid "net_vrf use the platform-specific [netos]_vrf modules instead." msgstr "net_vrf ã¯ã€ä»£ã‚りã«ãƒ—ラットフォーム固有㮠[netos]_vrf モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:215 msgid "nginx_status_facts use :ref:`nginx_status_info ` instead." msgstr "nginx_status_facts ã¯ã€ä»£ã‚り㫠:ref:`nginx_status_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:217 msgid "nxos_interface use :ref:`nxos_interfaces ` instead." msgstr "nxos_interface ã¯ã€ä»£ã‚り㫠:ref:`nxos_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:219 msgid "nxos_l2_interface use :ref:`nxos_l2_interfaces ` instead." msgstr "nxos_l2_interface ã¯ã€ä»£ã‚り㫠:ref:`nxos_l2_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:221 msgid "nxos_l3_interface use :ref:`nxos_l3_interfaces ` instead." msgstr "nxos_l3_interface ã¯ã€ä»£ã‚り㫠:ref:`nxos_l3_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:223 msgid "nxos_linkagg use :ref:`nxos_lag_interfaces ` instead." msgstr "nxos_linkagg ã¯ã€ä»£ã‚り㫠:ref:`nxos_lag_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:225 msgid "nxos_vlan use :ref:`nxos_vlans ` instead." msgstr "nxos_vlan ã¯ã€ä»£ã‚り㫠:ref:`nxos_vlans ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:227 msgid "online_server_facts use :ref:`online_server_info ` instead." msgstr "online_server_facts ã¯ã€ä»£ã‚り㫠:ref:`online_server_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:229 msgid "online_user_facts use :ref:`online_user_info ` instead." msgstr "online_user_facts ã¯ã€ä»£ã‚り㫠:ref:`online_user_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:231 msgid "purefa_facts use :ref:`purefa_info ` instead." msgstr "purefa_facts ã¯ã€ä»£ã‚り㫠:ref:`purefa_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:233 msgid "purefb_facts use :ref:`purefb_info ` instead." msgstr "purefb_facts ã¯ã€ä»£ã‚り㫠:ref:`purefb_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:235 msgid "scaleway_image_facts use :ref:`scaleway_image_info ` instead." msgstr "scaleway_image_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_image_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:237 msgid "scaleway_ip_facts use :ref:`scaleway_ip_info ` instead." msgstr "scaleway_ip_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_ip_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:239 msgid "scaleway_organization_facts use :ref:`scaleway_organization_info ` instead." msgstr "scaleway_organization_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_organization_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:241 msgid "scaleway_security_group_facts use :ref:`scaleway_security_group_info ` instead." msgstr "scaleway_security_group_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_security_group_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:243 msgid "scaleway_server_facts use :ref:`scaleway_server_info ` instead." msgstr "scaleway_server_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_server_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:245 msgid "scaleway_snapshot_facts use :ref:`scaleway_snapshot_info ` instead." msgstr "scaleway_snapshot_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_snapshot_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:247 msgid "scaleway_volume_facts use :ref:`scaleway_volume_info ` instead." msgstr "scaleway_volume_facts ã¯ã€ä»£ã‚り㫠:ref:`scaleway_volume_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:249 msgid "vcenter_extension_facts use :ref:`vcenter_extension_info ` instead." msgstr "vcenter_extension_facts ã¯ã€ä»£ã‚り㫠:ref:`vcenter_extension_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:251 msgid "vmware_about_facts use :ref:`vmware_about_info ` instead." msgstr "vmware_about_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_about_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:253 msgid "vmware_category_facts use :ref:`vmware_category_info ` instead." msgstr "vmware_category_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_category_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:255 msgid "vmware_drs_group_facts use :ref:`vmware_drs_group_info ` instead." msgstr "vmware_drs_group_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_drs_group_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:257 msgid "vmware_drs_rule_facts use :ref:`vmware_drs_rule_info ` instead." msgstr "vmware_drs_rule_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_drs_rule_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:259 msgid "vmware_dvs_portgroup_facts use :ref:`vmware_dvs_portgroup_info ` instead." msgstr "vmware_dvs_portgroup_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_dvs_portgroup_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:261 msgid "vmware_guest_boot_facts use :ref:`vmware_guest_boot_info ` instead." msgstr "vmware_guest_boot_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_guest_boot_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:263 msgid "vmware_guest_customization_facts use :ref:`vmware_guest_customization_info ` instead." msgstr "vmware_guest_customization_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_guest_customization_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:265 msgid "vmware_guest_disk_facts use :ref:`vmware_guest_disk_info ` instead." msgstr "vmware_guest_disk_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_guest_disk_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:267 msgid "vmware_host_capability_facts use :ref:`vmware_host_capability_info ` instead." msgstr "vmware_host_capability_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_capability_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:269 msgid "vmware_host_config_facts use :ref:`vmware_host_config_info ` instead." msgstr "vmware_host_config_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_config_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:271 msgid "vmware_host_dns_facts use :ref:`vmware_host_dns_info ` instead." msgstr "vmware_host_dns_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_dns_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:273 msgid "vmware_host_feature_facts use :ref:`vmware_host_feature_info ` instead." msgstr "vmware_host_feature_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_feature_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:275 msgid "vmware_host_firewall_facts use :ref:`vmware_host_firewall_info ` instead." msgstr "vmware_host_firewall_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_firewall_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:277 msgid "vmware_host_ntp_facts use :ref:`vmware_host_ntp_info ` instead." msgstr "vmware_host_ntp_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_ntp_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:279 msgid "vmware_host_package_facts use :ref:`vmware_host_package_info ` instead." msgstr "vmware_host_package_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_package_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:281 msgid "vmware_host_service_facts use :ref:`vmware_host_service_info ` instead." msgstr "vmware_host_service_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_service_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:283 msgid "vmware_host_ssl_facts use :ref:`vmware_host_ssl_info ` instead." msgstr "vmware_host_ssl_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_ssl_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:285 msgid "vmware_host_vmhba_facts use :ref:`vmware_host_vmhba_info ` instead." msgstr "vmware_host_vmhba_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_vmhba_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:287 msgid "vmware_host_vmnic_facts use :ref:`vmware_host_vmnic_info ` instead." msgstr "vmware_host_vmnic_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_host_vmnic_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:289 msgid "vmware_local_role_facts use :ref:`vmware_local_role_info ` instead." msgstr "vmware_local_role_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_local_role_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:291 msgid "vmware_local_user_facts use :ref:`vmware_local_user_info ` instead." msgstr "vmware_local_user_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_local_user_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:293 msgid "vmware_portgroup_facts use :ref:`vmware_portgroup_info ` instead." msgstr "vmware_portgroup_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_portgroup_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:295 msgid "vmware_resource_pool_facts use :ref:`vmware_resource_pool_info ` instead." msgstr "vmware_resource_pool_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_resource_pool_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:297 msgid "vmware_target_canonical_facts use :ref:`vmware_target_canonical_info ` instead." msgstr "vmware_target_canonical_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_target_canonical_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:299 msgid "vmware_vmkernel_facts use :ref:`vmware_vmkernel_info ` instead." msgstr "vmware_vmkernel_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_vmkernel_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:301 msgid "vmware_vswitch_facts use :ref:`vmware_vswitch_info ` instead." msgstr "vmware_vswitch_facts ã¯ã€ä»£ã‚り㫠:ref:`vmware_vswitch_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:303 msgid "vultr_account_facts use :ref:`vultr_account_info ` instead." msgstr "vultr_account_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_account_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:305 msgid "vultr_block_storage_facts use :ref:`vultr_block_storage_info ` instead." msgstr "vultr_block_storage_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_block_storage_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:307 msgid "vultr_dns_domain_facts use :ref:`vultr_dns_domain_info ` instead." msgstr "vultr_dns_domain_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_dns_domain_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:309 msgid "vultr_firewall_group_facts use :ref:`vultr_firewall_group_info ` instead." msgstr "vultr_firewall_group_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_firewall_group_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:311 msgid "vultr_network_facts use :ref:`vultr_network_info ` instead." msgstr "vultr_network_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_network_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:313 msgid "vultr_os_facts use :ref:`vultr_os_info ` instead." msgstr "vultr_os_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_os_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:315 msgid "vultr_plan_facts use :ref:`vultr_plan_info ` instead." msgstr "vultr_plan_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_plan_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:317 msgid "vultr_region_facts use :ref:`vultr_region_info ` instead." msgstr "vultr_region_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_region_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:319 msgid "vultr_server_facts use :ref:`vultr_server_info ` instead." msgstr "vultr_server_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_server_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:321 msgid "vultr_ssh_key_facts use :ref:`vultr_ssh_key_info ` instead." msgstr "vultr_ssh_key_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_ssh_key_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:323 msgid "vultr_startup_script_facts use :ref:`vultr_startup_script_info ` instead." msgstr "vultr_startup_script_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_startup_script_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:325 msgid "vultr_user_facts use :ref:`vultr_user_info ` instead." msgstr "vultr_user_facts ã¯ã€ä»£ã‚り㫠:ref:`vultr_user_info ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:327 msgid "vyos_interface use :ref:`vyos_interfaces ` instead." msgstr "vyos_interface ã¯ã€ä»£ã‚り㫠:ref:`vyos_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:329 msgid "vyos_l3_interface use :ref:`vyos_l3_interfaces ` instead." msgstr "vyos_l3_interface ã¯ã€ä»£ã‚り㫠:ref:`vyos_l3_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:331 msgid "vyos_linkagg use :ref:`vyos_lag_interfaces ` instead." msgstr "vyos_linkagg ã¯ã€ä»£ã‚り㫠:ref:`vyos_lag_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:333 msgid "vyos_lldp use :ref:`vyos_lldp_global ` instead." msgstr "vyos_lldp ã¯ã€ä»£ã‚り㫠:ref:`vyos_lldp_global ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:335 msgid "vyos_lldp_interface use :ref:`vyos_lldp_interfaces ` instead." msgstr "vyos_lldp_interface ã¯ã€ä»£ã‚り㫠:ref:`vyos_lldp_interfaces ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:338 msgid "The following functionality will be removed in Ansible 2.12. Please update update your playbooks accordingly." msgstr "ä»¥ä¸‹ã®æ©Ÿèƒ½ã¯ Ansible 2.12 ã§å‰Šé™¤ã•れã¾ã™ã€‚ãれã«ä¼´ã„ã€Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:340 msgid "``vmware_cluster`` DRS, HA and VSAN configuration; use :ref:`vmware_cluster_drs `, :ref:`vmware_cluster_ha ` and :ref:`vmware_cluster_vsan ` instead." msgstr "``vmware_cluster`` ã® DRSã€HAã€ãŠã‚ˆã³ VSAN ã®è¨­å®šã€‚代ã‚り㫠:ref:`vmware_cluster_drs `ã€:ref:`vmware_cluster_ha `ã€ãŠã‚ˆã³ :ref:`vmware_cluster_vsan ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:343 msgid "The following functionality will be removed in Ansible 2.13. Please update update your playbooks accordingly." msgstr "ä»¥ä¸‹ã®æ©Ÿèƒ½ã¯ Ansible 2.13 ã§ã¯å‰Šé™¤ã•れã¾ã™ã€‚ãれã«ä¼´ã„ã€Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:345 msgid "``openssl_certificate`` deprecates the ``assertonly`` provider. Please see the :ref:`openssl_certificate ` documentation examples on how to replace the provider with the :ref:`openssl_certificate_info `, :ref:`openssl_csr_info `, :ref:`openssl_privatekey_info ` and :ref:`assert ` modules." msgstr "``openssl_certificate`` ã¯ã€``assertonly`` プロãƒã‚¤ãƒ€ãƒ¼ã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ã€‚プロãƒã‚¤ãƒ€ãƒ¼ã‚’ :ref:`openssl_certificate_info ` モジュールã€:ref:`openssl_csr_info ` モジュールã€:ref:`openssl_privatekey_info ` モジュールã€ãŠã‚ˆã³ :ref:`assert ` モジュールã«ç½®ãæ›ãˆã‚‹æ–¹æ³•ã¯ã€:ref:`openssl_certificate ` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:352 msgid "For the following modules, the PyOpenSSL-based backend ``pyopenssl`` has been deprecated and will be removed in Ansible 2.13:" msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¤ã„ã¦ã¯ã€PyOpenSSL ベースã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ ``pyopenssl`` ãŒã™ã§ã«éžæŽ¨å¥¨ã«ãªã£ã¦ãŠã‚Šã€Ansible 2.13 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:355 msgid ":ref:`get_certificate `" msgstr ":ref:`get_certificate `" #: ../../rst/porting_guides/porting_guide_2.9.rst:356 msgid ":ref:`openssl_certificate `" msgstr ":ref:`openssl_certificate `" #: ../../rst/porting_guides/porting_guide_2.9.rst:357 msgid ":ref:`openssl_certificate_info `" msgstr ":ref:`openssl_certificate_info `" #: ../../rst/porting_guides/porting_guide_2.9.rst:358 msgid ":ref:`openssl_csr `" msgstr ":ref:`openssl_csr `" #: ../../rst/porting_guides/porting_guide_2.9.rst:359 msgid ":ref:`openssl_csr_info `" msgstr ":ref:`openssl_csr_info `" #: ../../rst/porting_guides/porting_guide_2.9.rst:360 msgid ":ref:`openssl_privatekey `" msgstr ":ref:`openssl_privatekey `" #: ../../rst/porting_guides/porting_guide_2.9.rst:361 msgid ":ref:`openssl_privatekey_info `" msgstr ":ref:`openssl_privatekey_info `" #: ../../rst/porting_guides/porting_guide_2.9.rst:362 msgid ":ref:`openssl_publickey `" msgstr ":ref:`openssl_publickey `" #: ../../rst/porting_guides/porting_guide_2.9.rst:366 msgid "Renamed modules" msgstr "åå‰ãŒå¤‰æ›´ã«ãªã£ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/porting_guides/porting_guide_2.9.rst:368 msgid "The following modules have been renamed. The old name is deprecated and will be removed in Ansible 2.13. Please update update your playbooks accordingly." msgstr "以下ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®åç§°ãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚å¤ã„åå‰ã¯éžæŽ¨å¥¨ã§ã€Ansible 2.13 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚ãれã«å¿œã˜ã¦ Playbook ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:371 msgid "The ``ali_instance_facts`` module was renamed to :ref:`ali_instance_info `." msgstr "``ali_instance_facts`` モジュールã®åå‰ãŒ :ref:`ali_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:372 msgid "The ``aws_acm_facts`` module was renamed to :ref:`aws_acm_info `." msgstr "``aws_acm_facts`` モジュールã®åå‰ãŒ :ref:`aws_acm_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:373 msgid "The ``aws_az_facts`` module was renamed to :ref:`aws_az_info `." msgstr "``aws_az_facts`` モジュールã®åå‰ãŒ :ref:`aws_az_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:374 msgid "The ``aws_caller_facts`` module was renamed to :ref:`aws_caller_info `." msgstr "``aws_caller_facts`` モジュールã®åå‰ãŒ :ref:`aws_caller_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:375 msgid "The ``aws_kms_facts`` module was renamed to :ref:`aws_kms_info `." msgstr "``aws_kms_facts`` モジュールã®åå‰ãŒ :ref:`aws_kms_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:376 msgid "The ``aws_region_facts`` module was renamed to :ref:`aws_region_info `." msgstr "``aws_region_facts`` モジュールã®åå‰ãŒ :ref:`aws_region_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:377 msgid "The ``aws_s3_bucket_facts`` module was renamed to :ref:`aws_s3_bucket_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``aws_s3_bucket_facts`` モジュールã®åå‰ãŒ :ref:`aws_s3_bucket_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:380 msgid "The ``aws_sgw_facts`` module was renamed to :ref:`aws_sgw_info `." msgstr "``aws_sgw_facts`` モジュールã®åå‰ãŒ :ref:`aws_sgw_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:381 msgid "The ``aws_waf_facts`` module was renamed to :ref:`aws_waf_info `." msgstr "``aws_waf_facts`` モジュールã®åå‰ãŒ :ref:`aws_waf_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:382 msgid "The ``azure_rm_aks_facts`` module was renamed to :ref:`azure_rm_aks_info `." msgstr "``azure_rm_aks_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_aks_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:383 msgid "The ``azure_rm_aksversion_facts`` module was renamed to :ref:`azure_rm_aksversion_info `." msgstr "``azure_rm_aksversion_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_aksversion_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:384 msgid "The ``azure_rm_applicationsecuritygroup_facts`` module was renamed to :ref:`azure_rm_applicationsecuritygroup_info `." msgstr "``azure_rm_applicationsecuritygroup_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_applicationsecuritygroup_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:385 msgid "The ``azure_rm_appserviceplan_facts`` module was renamed to :ref:`azure_rm_appserviceplan_info `." msgstr "``azure_rm_appserviceplan_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_appserviceplan_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:386 msgid "The ``azure_rm_automationaccount_facts`` module was renamed to :ref:`azure_rm_automationaccount_info `." msgstr "``azure_rm_automationaccount_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_automationaccount_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:387 msgid "The ``azure_rm_autoscale_facts`` module was renamed to :ref:`azure_rm_autoscale_info `." msgstr "``azure_rm_autoscale_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_autoscale_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:388 msgid "The ``azure_rm_availabilityset_facts`` module was renamed to :ref:`azure_rm_availabilityset_info `." msgstr "``azure_rm_availabilityset_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_availabilityset_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:389 msgid "The ``azure_rm_cdnendpoint_facts`` module was renamed to :ref:`azure_rm_cdnendpoint_info `." msgstr "``azure_rm_cdnendpoint_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_cdnendpoint_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:390 msgid "The ``azure_rm_cdnprofile_facts`` module was renamed to :ref:`azure_rm_cdnprofile_info `." msgstr "``azure_rm_cdnprofile_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_cdnprofile_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:391 msgid "The ``azure_rm_containerinstance_facts`` module was renamed to :ref:`azure_rm_containerinstance_info `." msgstr "``azure_rm_containerinstance_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_containerinstance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:392 msgid "The ``azure_rm_containerregistry_facts`` module was renamed to :ref:`azure_rm_containerregistry_info `." msgstr "``azure_rm_containerregistry_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_containerregistry_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:393 msgid "The ``azure_rm_cosmosdbaccount_facts`` module was renamed to :ref:`azure_rm_cosmosdbaccount_info `." msgstr "``azure_rm_cosmosdbaccount_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_cosmosdbaccount_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:394 msgid "The ``azure_rm_deployment_facts`` module was renamed to :ref:`azure_rm_deployment_info `." msgstr "``azure_rm_deployment_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_deployment_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:395 msgid "The ``azure_rm_resourcegroup_facts`` module was renamed to :ref:`azure_rm_resourcegroup_info `." msgstr "``azure_rm_resourcegroup_facts`` モジュールã®åå‰ãŒ :ref:`azure_rm_resourcegroup_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:396 msgid "The ``bigip_device_facts`` module was renamed to :ref:`bigip_device_info `." msgstr "``bigip_device_facts`` モジュールã®åå‰ãŒ :ref:`bigip_device_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:397 msgid "The ``bigiq_device_facts`` module was renamed to :ref:`bigiq_device_info `." msgstr "``bigiq_device_facts`` モジュールã®åå‰ãŒ :ref:`bigiq_device_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:398 msgid "The ``cloudformation_facts`` module was renamed to :ref:`cloudformation_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``cloudformation_facts`` モジュールã®åå‰ãŒ :ref:`cloudformation_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:401 msgid "The ``cloudfront_facts`` module was renamed to :ref:`cloudfront_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``cloudfront_facts`` モジュールã®åå‰ãŒ :ref:`cloudfront_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:404 msgid "The ``cloudwatchlogs_log_group_facts`` module was renamed to :ref:`cloudwatchlogs_log_group_info `." msgstr "``cloudwatchlogs_log_group_facts`` モジュールã®åå‰ãŒ :ref:`cloudwatchlogs_log_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:405 msgid "The ``digital_ocean_account_facts`` module was renamed to :ref:`digital_ocean_account_info `." msgstr "``digital_ocean_account_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_account_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:406 msgid "The ``digital_ocean_certificate_facts`` module was renamed to :ref:`digital_ocean_certificate_info `." msgstr "``digital_ocean_certificate_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_certificate_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:407 msgid "The ``digital_ocean_domain_facts`` module was renamed to :ref:`digital_ocean_domain_info `." msgstr "``digital_ocean_domain_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_domain_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:408 msgid "The ``digital_ocean_firewall_facts`` module was renamed to :ref:`digital_ocean_firewall_info `." msgstr "``digital_ocean_firewall_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_firewall_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:409 msgid "The ``digital_ocean_floating_ip_facts`` module was renamed to :ref:`digital_ocean_floating_ip_info `." msgstr "``digital_ocean_floating_ip_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_floating_ip_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:410 msgid "The ``digital_ocean_image_facts`` module was renamed to :ref:`digital_ocean_image_info `." msgstr "``digital_ocean_image_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_image_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:411 msgid "The ``digital_ocean_load_balancer_facts`` module was renamed to :ref:`digital_ocean_load_balancer_info `." msgstr "``digital_ocean_load_balancer_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_load_balancer_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:412 msgid "The ``digital_ocean_region_facts`` module was renamed to :ref:`digital_ocean_region_info `." msgstr "``digital_ocean_region_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_region_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:413 msgid "The ``digital_ocean_size_facts`` module was renamed to :ref:`digital_ocean_size_info `." msgstr "``digital_ocean_size_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_size_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:414 msgid "The ``digital_ocean_snapshot_facts`` module was renamed to :ref:`digital_ocean_snapshot_info `." msgstr "``digital_ocean_snapshot_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_snapshot_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:415 msgid "The ``digital_ocean_tag_facts`` module was renamed to :ref:`digital_ocean_tag_info `." msgstr "``digital_ocean_tag_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_tag_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:416 msgid "The ``digital_ocean_volume_facts`` module was renamed to :ref:`digital_ocean_volume_info `." msgstr "``digital_ocean_volume_facts`` モジュールã®åå‰ãŒ :ref:`digital_ocean_volume_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:417 msgid "The ``ec2_ami_facts`` module was renamed to :ref:`ec2_ami_info `." msgstr "``ec2_ami_facts`` モジュールã®åå‰ãŒ :ref:`ec2_ami_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:418 msgid "The ``ec2_asg_facts`` module was renamed to :ref:`ec2_asg_info `." msgstr "``ec2_asg_facts`` モジュールã®åå‰ãŒ :ref:`ec2_asg_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:419 msgid "The ``ec2_customer_gateway_facts`` module was renamed to :ref:`ec2_customer_gateway_info `." msgstr "``ec2_customer_gateway_facts`` モジュールã®åå‰ãŒ :ref:`ec2_customer_gateway_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:420 msgid "The ``ec2_eip_facts`` module was renamed to :ref:`ec2_eip_info `." msgstr "``ec2_eip_facts`` モジュールã®åå‰ãŒ :ref:`ec2_eip_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:421 msgid "The ``ec2_elb_facts`` module was renamed to :ref:`ec2_elb_info `." msgstr "``ec2_elb_facts`` モジュールã®åå‰ãŒ :ref:`ec2_elb_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:422 msgid "The ``ec2_eni_facts`` module was renamed to :ref:`ec2_eni_info `." msgstr "``ec2_eni_facts`` モジュールã®åå‰ãŒ :ref:`ec2_eni_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:423 msgid "The ``ec2_group_facts`` module was renamed to :ref:`ec2_group_info `." msgstr "``ec2_group_facts`` モジュールã®åå‰ãŒ :ref:`ec2_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:424 msgid "The ``ec2_instance_facts`` module was renamed to :ref:`ec2_instance_info `." msgstr "``ec2_instance_facts`` モジュールã®åå‰ãŒ :ref:`ec2_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:425 msgid "The ``ec2_lc_facts`` module was renamed to :ref:`ec2_lc_info `." msgstr "``ec2_lc_facts`` モジュールã®åå‰ãŒ :ref:`ec2_lc_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:426 msgid "The ``ec2_placement_group_facts`` module was renamed to :ref:`ec2_placement_group_info `." msgstr "``ec2_placement_group_facts`` モジュールã®åå‰ãŒ :ref:`ec2_placement_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:427 msgid "The ``ec2_snapshot_facts`` module was renamed to :ref:`ec2_snapshot_info `." msgstr "``ec2_snapshot_facts`` モジュールã®åå‰ãŒ :ref:`ec2_snapshot_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:428 msgid "The ``ec2_vol_facts`` module was renamed to :ref:`ec2_vol_info `." msgstr "``ec2_vol_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vol_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:429 msgid "The ``ec2_vpc_dhcp_option_facts`` module was renamed to :ref:`ec2_vpc_dhcp_option_info `." msgstr "``ec2_vpc_dhcp_option_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_dhcp_option_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:430 msgid "The ``ec2_vpc_endpoint_facts`` module was renamed to :ref:`ec2_vpc_endpoint_info `." msgstr "``ec2_vpc_endpoint_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_endpoint_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:431 msgid "The ``ec2_vpc_igw_facts`` module was renamed to :ref:`ec2_vpc_igw_info `." msgstr "``ec2_vpc_igw_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_igw_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:432 msgid "The ``ec2_vpc_nacl_facts`` module was renamed to :ref:`ec2_vpc_nacl_info `." msgstr "``ec2_vpc_nacl_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_nacl_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:433 msgid "The ``ec2_vpc_nat_gateway_facts`` module was renamed to :ref:`ec2_vpc_nat_gateway_info `." msgstr "``ec2_vpc_nat_gateway_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_nat_gateway_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:434 msgid "The ``ec2_vpc_net_facts`` module was renamed to :ref:`ec2_vpc_net_info `." msgstr "``ec2_vpc_net_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_net_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:435 msgid "The ``ec2_vpc_peering_facts`` module was renamed to :ref:`ec2_vpc_peering_info `." msgstr "``ec2_vpc_peering_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_peering_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:436 msgid "The ``ec2_vpc_route_table_facts`` module was renamed to :ref:`ec2_vpc_route_table_info `." msgstr "``ec2_vpc_route_table_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_route_table_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:437 msgid "The ``ec2_vpc_subnet_facts`` module was renamed to :ref:`ec2_vpc_subnet_info `." msgstr "``ec2_vpc_subnet_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_subnet_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:438 msgid "The ``ec2_vpc_vgw_facts`` module was renamed to :ref:`ec2_vpc_vgw_info `." msgstr "``ec2_vpc_vgw_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_vgw_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:439 msgid "The ``ec2_vpc_vpn_facts`` module was renamed to :ref:`ec2_vpc_vpn_info `." msgstr "``ec2_vpc_vpn_facts`` モジュールã®åå‰ãŒ :ref:`ec2_vpc_vpn_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:440 msgid "The ``ecs_service_facts`` module was renamed to :ref:`ecs_service_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ecs_service_facts`` モジュールã®åå‰ãŒ :ref:`ecs_service_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:443 msgid "The ``ecs_taskdefinition_facts`` module was renamed to :ref:`ecs_taskdefinition_info `." msgstr "``ecs_taskdefinition_facts`` モジュールã®åå‰ãŒ :ref:`ecs_taskdefinition_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:444 msgid "The ``efs_facts`` module was renamed to :ref:`efs_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``efs_facts`` モジュールã®åå‰ãŒ :ref:`efs_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:447 msgid "The ``elasticache_facts`` module was renamed to :ref:`elasticache_info `." msgstr "``elasticache_facts`` モジュールã®åå‰ãŒ :ref:`elasticache_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:448 msgid "The ``elb_application_lb_facts`` module was renamed to :ref:`elb_application_lb_info `." msgstr "``elb_application_lb_facts`` モジュールã®åå‰ãŒ :ref:`elb_application_lb_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:449 msgid "The ``elb_classic_lb_facts`` module was renamed to :ref:`elb_classic_lb_info `." msgstr "``elb_classic_lb_facts`` モジュールã®åå‰ãŒ :ref:`elb_classic_lb_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:450 msgid "The ``elb_target_facts`` module was renamed to :ref:`elb_target_info `." msgstr "``elb_target_facts`` モジュールã®åå‰ãŒ :ref:`elb_target_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:451 msgid "The ``elb_target_group_facts`` module was renamed to :ref:`elb_target_group_info `." msgstr "``elb_target_group_facts`` モジュールã®åå‰ãŒ :ref:`elb_target_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:452 msgid "The ``gcp_bigquery_dataset_facts`` module was renamed to :ref:`gcp_bigquery_dataset_info `." msgstr "``gcp_bigquery_dataset_facts`` モジュールã®åå‰ãŒ :ref:`gcp_bigquery_dataset_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:453 msgid "The ``gcp_bigquery_table_facts`` module was renamed to :ref:`gcp_bigquery_table_info `." msgstr "``gcp_bigquery_table_facts`` モジュールã®åå‰ãŒ :ref:`gcp_bigquery_table_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:454 msgid "The ``gcp_cloudbuild_trigger_facts`` module was renamed to :ref:`gcp_cloudbuild_trigger_info `." msgstr "``gcp_cloudbuild_trigger_facts`` モジュールã®åå‰ãŒ :ref:`gcp_cloudbuild_trigger_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:455 msgid "The ``gcp_compute_address_facts`` module was renamed to :ref:`gcp_compute_address_info `." msgstr "``gcp_compute_address_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_address_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:456 msgid "The ``gcp_compute_backend_bucket_facts`` module was renamed to :ref:`gcp_compute_backend_bucket_info `." msgstr "``gcp_compute_backend_bucket_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_backend_bucket_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:457 msgid "The ``gcp_compute_backend_service_facts`` module was renamed to :ref:`gcp_compute_backend_service_info `." msgstr "``gcp_compute_backend_service_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_backend_service_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:458 msgid "The ``gcp_compute_disk_facts`` module was renamed to :ref:`gcp_compute_disk_info `." msgstr "``gcp_compute_disk_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_disk_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:459 msgid "The ``gcp_compute_firewall_facts`` module was renamed to :ref:`gcp_compute_firewall_info `." msgstr "``gcp_compute_firewall_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_firewall_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:460 msgid "The ``gcp_compute_forwarding_rule_facts`` module was renamed to :ref:`gcp_compute_forwarding_rule_info `." msgstr "``gcp_compute_forwarding_rule_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_forwarding_rule_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:461 msgid "The ``gcp_compute_global_address_facts`` module was renamed to :ref:`gcp_compute_global_address_info `." msgstr "``gcp_compute_global_address_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_global_address_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:462 msgid "The ``gcp_compute_global_forwarding_rule_facts`` module was renamed to :ref:`gcp_compute_global_forwarding_rule_info `." msgstr "``gcp_compute_global_forwarding_rule_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_global_forwarding_rule_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:463 msgid "The ``gcp_compute_health_check_facts`` module was renamed to :ref:`gcp_compute_health_check_info `." msgstr "``gcp_compute_health_check_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_health_check_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:464 msgid "The ``gcp_compute_http_health_check_facts`` module was renamed to :ref:`gcp_compute_http_health_check_info `." msgstr "``gcp_compute_http_health_check_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_http_health_check_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:465 msgid "The ``gcp_compute_https_health_check_facts`` module was renamed to :ref:`gcp_compute_https_health_check_info `." msgstr "``gcp_compute_https_health_check_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_https_health_check_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:466 msgid "The ``gcp_compute_image_facts`` module was renamed to :ref:`gcp_compute_image_info `." msgstr "``gcp_compute_image_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_image_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:467 msgid "The ``gcp_compute_instance_facts`` module was renamed to :ref:`gcp_compute_instance_info `." msgstr "``gcp_compute_instance_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:468 msgid "The ``gcp_compute_instance_group_facts`` module was renamed to :ref:`gcp_compute_instance_group_info `." msgstr "``gcp_compute_instance_group_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_instance_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:469 msgid "The ``gcp_compute_instance_group_manager_facts`` module was renamed to :ref:`gcp_compute_instance_group_manager_info `." msgstr "``gcp_compute_instance_group_manager_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_instance_group_manager_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:470 msgid "The ``gcp_compute_instance_template_facts`` module was renamed to :ref:`gcp_compute_instance_template_info `." msgstr "``gcp_compute_instance_template_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_instance_template_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:471 msgid "The ``gcp_compute_interconnect_attachment_facts`` module was renamed to :ref:`gcp_compute_interconnect_attachment_info `." msgstr "``gcp_compute_interconnect_attachment_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_interconnect_attachment_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:472 msgid "The ``gcp_compute_network_facts`` module was renamed to :ref:`gcp_compute_network_info `." msgstr "``gcp_compute_network_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_network_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:473 msgid "The ``gcp_compute_region_disk_facts`` module was renamed to :ref:`gcp_compute_region_disk_info `." msgstr "``gcp_compute_region_disk_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_region_disk_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:474 msgid "The ``gcp_compute_route_facts`` module was renamed to :ref:`gcp_compute_route_info `." msgstr "``gcp_compute_route_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_route_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:475 msgid "The ``gcp_compute_router_facts`` module was renamed to :ref:`gcp_compute_router_info `." msgstr "``gcp_compute_router_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_router_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:476 msgid "The ``gcp_compute_ssl_certificate_facts`` module was renamed to :ref:`gcp_compute_ssl_certificate_info `." msgstr "``gcp_compute_ssl_certificate_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_ssl_certificate_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:477 msgid "The ``gcp_compute_ssl_policy_facts`` module was renamed to :ref:`gcp_compute_ssl_policy_info `." msgstr "``gcp_compute_ssl_policy_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_ssl_policy_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:478 msgid "The ``gcp_compute_subnetwork_facts`` module was renamed to :ref:`gcp_compute_subnetwork_info `." msgstr "``gcp_compute_subnetwork_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_subnetwork_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:479 msgid "The ``gcp_compute_target_http_proxy_facts`` module was renamed to :ref:`gcp_compute_target_http_proxy_info `." msgstr "``gcp_compute_target_http_proxy_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_http_proxy_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:480 msgid "The ``gcp_compute_target_https_proxy_facts`` module was renamed to :ref:`gcp_compute_target_https_proxy_info `." msgstr "``gcp_compute_target_https_proxy_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_https_proxy_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:481 msgid "The ``gcp_compute_target_pool_facts`` module was renamed to :ref:`gcp_compute_target_pool_info `." msgstr "``gcp_compute_target_pool_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_pool_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:482 msgid "The ``gcp_compute_target_ssl_proxy_facts`` module was renamed to :ref:`gcp_compute_target_ssl_proxy_info `." msgstr "``gcp_compute_target_ssl_proxy_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_ssl_proxy_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:483 msgid "The ``gcp_compute_target_tcp_proxy_facts`` module was renamed to :ref:`gcp_compute_target_tcp_proxy_info `." msgstr "``gcp_compute_target_tcp_proxy_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_tcp_proxy_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:484 msgid "The ``gcp_compute_target_vpn_gateway_facts`` module was renamed to :ref:`gcp_compute_target_vpn_gateway_info `." msgstr "``gcp_compute_target_vpn_gateway_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_target_vpn_gateway_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:485 msgid "The ``gcp_compute_url_map_facts`` module was renamed to :ref:`gcp_compute_url_map_info `." msgstr "``gcp_compute_url_map_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_url_map_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:486 msgid "The ``gcp_compute_vpn_tunnel_facts`` module was renamed to :ref:`gcp_compute_vpn_tunnel_info `." msgstr "``gcp_compute_vpn_tunnel_facts`` モジュールã®åå‰ãŒ :ref:`gcp_compute_vpn_tunnel_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:487 msgid "The ``gcp_container_cluster_facts`` module was renamed to :ref:`gcp_container_cluster_info `." msgstr "``gcp_container_cluster_facts`` モジュールã®åå‰ãŒ :ref:`gcp_container_cluster_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:488 msgid "The ``gcp_container_node_pool_facts`` module was renamed to :ref:`gcp_container_node_pool_info `." msgstr "``gcp_container_node_pool_facts`` モジュールã®åå‰ãŒ :ref:`gcp_container_node_pool_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:489 msgid "The ``gcp_dns_managed_zone_facts`` module was renamed to :ref:`gcp_dns_managed_zone_info `." msgstr "``gcp_dns_managed_zone_facts`` モジュールã®åå‰ãŒ :ref:`gcp_dns_managed_zone_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:490 msgid "The ``gcp_dns_resource_record_set_facts`` module was renamed to :ref:`gcp_dns_resource_record_set_info `." msgstr "``gcp_dns_resource_record_set_facts`` モジュールã®åå‰ãŒ :ref:`gcp_dns_resource_record_set_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:491 msgid "The ``gcp_iam_role_facts`` module was renamed to :ref:`gcp_iam_role_info `." msgstr "``gcp_iam_role_facts`` モジュールã®åå‰ãŒ :ref:`gcp_iam_role_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:492 msgid "The ``gcp_iam_service_account_facts`` module was renamed to :ref:`gcp_iam_service_account_info `." msgstr "``gcp_iam_service_account_facts`` モジュールã®åå‰ãŒ :ref:`gcp_iam_service_account_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:493 msgid "The ``gcp_pubsub_subscription_facts`` module was renamed to :ref:`gcp_pubsub_subscription_info `." msgstr "``gcp_pubsub_subscription_facts`` モジュールã®åå‰ãŒ :ref:`gcp_pubsub_subscription_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:494 msgid "The ``gcp_pubsub_topic_facts`` module was renamed to :ref:`gcp_pubsub_topic_info `." msgstr "``gcp_pubsub_topic_facts`` モジュールã®åå‰ãŒ :ref:`gcp_pubsub_topic_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:495 msgid "The ``gcp_redis_instance_facts`` module was renamed to :ref:`gcp_redis_instance_info `." msgstr "``gcp_redis_instance_facts`` モジュールã®åå‰ãŒ :ref:`gcp_redis_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:496 msgid "The ``gcp_resourcemanager_project_facts`` module was renamed to :ref:`gcp_resourcemanager_project_info `." msgstr "``gcp_resourcemanager_project_facts`` モジュールã®åå‰ãŒ :ref:`gcp_resourcemanager_project_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:497 msgid "The ``gcp_sourcerepo_repository_facts`` module was renamed to :ref:`gcp_sourcerepo_repository_info `." msgstr "``gcp_sourcerepo_repository_facts`` モジュールã®åå‰ãŒ :ref:`gcp_sourcerepo_repository_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:498 msgid "The ``gcp_spanner_database_facts`` module was renamed to :ref:`gcp_spanner_database_info `." msgstr "``gcp_spanner_database_facts`` モジュールã®åå‰ãŒ :ref:`gcp_spanner_database_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:499 msgid "The ``gcp_spanner_instance_facts`` module was renamed to :ref:`gcp_spanner_instance_info `." msgstr "``gcp_spanner_instance_facts`` モジュールã®åå‰ãŒ :ref:`gcp_spanner_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:500 msgid "The ``gcp_sql_database_facts`` module was renamed to :ref:`gcp_sql_database_info `." msgstr "``gcp_sql_database_facts`` モジュールã®åå‰ãŒ :ref:`gcp_sql_database_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:501 msgid "The ``gcp_sql_instance_facts`` module was renamed to :ref:`gcp_sql_instance_info `." msgstr "``gcp_sql_instance_facts`` モジュールã®åå‰ãŒ :ref:`gcp_sql_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:502 msgid "The ``gcp_sql_user_facts`` module was renamed to :ref:`gcp_sql_user_info `." msgstr "``gcp_sql_user_facts`` モジュールã®åå‰ãŒ :ref:`gcp_sql_user_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:503 msgid "The ``gcp_tpu_node_facts`` module was renamed to :ref:`gcp_tpu_node_info `." msgstr "``gcp_tpu_node_facts`` モジュールã®åå‰ãŒ :ref:`gcp_tpu_node_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:504 msgid "The ``gcpubsub_facts`` module was renamed to :ref:`gcpubsub_info `." msgstr "``gcpubsub_facts`` モジュールã®åå‰ãŒ :ref:`gcpubsub_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:505 msgid "The ``github_webhook_facts`` module was renamed to :ref:`github_webhook_info `." msgstr "``github_webhook_facts`` モジュールã®åå‰ãŒ :ref:`github_webhook_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:506 msgid "The ``gluster_heal_facts`` module was renamed to :ref:`gluster_heal_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``gluster_heal_facts`` モジュールã®åå‰ãŒ :ref:`gluster_heal_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:509 msgid "The ``hcloud_datacenter_facts`` module was renamed to :ref:`hcloud_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_datacenter_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_datacenter_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:512 msgid "The ``hcloud_floating_ip_facts`` module was renamed to :ref:`hcloud_floating_ip_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_floating_ip_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_floating_ip_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:515 msgid "The ``hcloud_image_facts`` module was renamed to :ref:`hcloud_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_image_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_image_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:518 msgid "The ``hcloud_location_facts`` module was renamed to :ref:`hcloud_location_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_location_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_location_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:521 msgid "The ``hcloud_server_facts`` module was renamed to :ref:`hcloud_server_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_server_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_server_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:524 msgid "The ``hcloud_server_type_facts`` module was renamed to :ref:`hcloud_server_type_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_server_type_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_server_type_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:527 msgid "The ``hcloud_ssh_key_facts`` module was renamed to :ref:`hcloud_ssh_key_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_ssh_key_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_ssh_key_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:530 msgid "The ``hcloud_volume_facts`` module was renamed to :ref:`hcloud_volume_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hcloud_volume_facts`` モジュールã®åå‰ãŒ :ref:`hcloud_volume_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:533 msgid "The ``hpilo_facts`` module was renamed to :ref:`hpilo_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``hpilo_facts`` モジュールã®åå‰ãŒ :ref:`hpilo_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:536 msgid "The ``iam_mfa_device_facts`` module was renamed to :ref:`iam_mfa_device_info `." msgstr "``iam_mfa_device_facts`` モジュールã®åå‰ãŒ :ref:`iam_mfa_device_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:537 msgid "The ``iam_role_facts`` module was renamed to :ref:`iam_role_info `." msgstr "``iam_role_facts`` モジュールã®åå‰ãŒ :ref:`iam_role_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:538 msgid "The ``iam_server_certificate_facts`` module was renamed to :ref:`iam_server_certificate_info `." msgstr "``iam_server_certificate_facts`` モジュールã®åå‰ãŒ :ref:`iam_server_certificate_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:539 msgid "The ``idrac_redfish_facts`` module was renamed to :ref:`idrac_redfish_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``idrac_redfish_facts`` モジュールã®åå‰ãŒ :ref:`idrac_redfish_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:542 msgid "The ``intersight_facts`` module was renamed to :ref:`intersight_info `." msgstr "``intersight_facts`` モジュールã®åå‰ãŒ :ref:`intersight_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:543 msgid "The ``jenkins_job_facts`` module was renamed to :ref:`jenkins_job_info `." msgstr "``jenkins_job_facts`` モジュールã®åå‰ãŒ :ref:`jenkins_job_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:544 msgid "The ``k8s_facts`` module was renamed to :ref:`k8s_info `." msgstr "``k8s_facts`` モジュールã®åå‰ãŒ :ref:`k8s_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:545 msgid "The ``memset_memstore_facts`` module was renamed to :ref:`memset_memstore_info `." msgstr "``memset_memstore_facts`` モジュールã®åå‰ãŒ :ref:`memset_memstore_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:546 msgid "The ``memset_server_facts`` module was renamed to :ref:`memset_server_info `." msgstr "``memset_server_facts`` モジュールã®åå‰ãŒ :ref:`memset_server_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:547 msgid "The ``one_image_facts`` module was renamed to :ref:`one_image_info `." msgstr "``one_image_facts`` モジュールã®åå‰ãŒ :ref:`one_image_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:548 msgid "The ``onepassword_facts`` module was renamed to :ref:`onepassword_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``onepassword_facts`` モジュールã®åå‰ãŒ :ref:`onepassword_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:551 msgid "The ``oneview_datacenter_facts`` module was renamed to :ref:`oneview_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_datacenter_facts`` モジュールã®åå‰ãŒ :ref:`oneview_datacenter_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:554 msgid "The ``oneview_enclosure_facts`` module was renamed to :ref:`oneview_enclosure_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_enclosure_facts`` モジュールã®åå‰ãŒ :ref:`oneview_enclosure_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:557 msgid "The ``oneview_ethernet_network_facts`` module was renamed to :ref:`oneview_ethernet_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_ethernet_network_facts`` モジュールã®åå‰ãŒ :ref:`oneview_ethernet_network_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:560 msgid "The ``oneview_fc_network_facts`` module was renamed to :ref:`oneview_fc_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_fc_network_facts`` モジュールã®åå‰ãŒ :ref:`oneview_fc_network_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:563 msgid "The ``oneview_fcoe_network_facts`` module was renamed to :ref:`oneview_fcoe_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_fcoe_network_facts`` モジュールã®åå‰ãŒ :ref:`oneview_fcoe_network_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:566 msgid "The ``oneview_logical_interconnect_group_facts`` module was renamed to :ref:`oneview_logical_interconnect_group_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_logical_interconnect_group_facts`` モジュールã®åå‰ãŒ :ref:`oneview_logical_interconnect_group_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:569 msgid "The ``oneview_network_set_facts`` module was renamed to :ref:`oneview_network_set_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_network_set_facts`` モジュールã®åå‰ãŒ :ref:`oneview_network_set_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:572 msgid "The ``oneview_san_manager_facts`` module was renamed to :ref:`oneview_san_manager_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``oneview_san_manager_facts`` モジュールã®åå‰ãŒ :ref:`oneview_san_manager_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:575 msgid "The ``os_flavor_facts`` module was renamed to :ref:`os_flavor_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_flavor_facts`` モジュールã®åå‰ãŒ :ref:`os_flavor_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:578 msgid "The ``os_image_facts`` module was renamed to :ref:`os_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_image_facts`` モジュールã®åå‰ãŒ :ref:`os_image_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:581 msgid "The ``os_keystone_domain_facts`` module was renamed to :ref:`os_keystone_domain_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_keystone_domain_facts`` モジュールã®åå‰ãŒ :ref:`os_keystone_domain_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:584 msgid "The ``os_networks_facts`` module was renamed to :ref:`os_networks_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_networks_facts`` モジュールã®åå‰ãŒ :ref:`os_networks_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:587 msgid "The ``os_port_facts`` module was renamed to :ref:`os_port_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_port_facts`` モジュールã®åå‰ãŒ :ref:`os_port_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:590 msgid "The ``os_project_facts`` module was renamed to :ref:`os_project_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_project_facts`` モジュールã®åå‰ãŒ :ref:`os_project_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:593 msgid "The ``os_server_facts`` module was renamed to :ref:`os_server_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_server_facts`` モジュールã®åå‰ãŒ :ref:`os_server_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:596 msgid "The ``os_subnets_facts`` module was renamed to :ref:`os_subnets_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_subnets_facts`` モジュールã®åå‰ãŒ :ref:`os_subnets_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:599 msgid "The ``os_user_facts`` module was renamed to :ref:`os_user_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``os_user_facts`` モジュールã®åå‰ãŒ :ref:`os_user_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:602 msgid "The ``ovirt_affinity_label_facts`` module was renamed to :ref:`ovirt_affinity_label_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_affinity_label_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_affinity_label_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:605 msgid "The ``ovirt_api_facts`` module was renamed to :ref:`ovirt_api_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_api_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_api_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:608 msgid "The ``ovirt_cluster_facts`` module was renamed to :ref:`ovirt_cluster_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_cluster_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_cluster_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:611 msgid "The ``ovirt_datacenter_facts`` module was renamed to :ref:`ovirt_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_datacenter_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_datacenter_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:614 msgid "The ``ovirt_disk_facts`` module was renamed to :ref:`ovirt_disk_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_disk_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_disk_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:617 msgid "The ``ovirt_event_facts`` module was renamed to :ref:`ovirt_event_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_event_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_event_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:620 msgid "The ``ovirt_external_provider_facts`` module was renamed to :ref:`ovirt_external_provider_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_external_provider_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_external_provider_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:623 msgid "The ``ovirt_group_facts`` module was renamed to :ref:`ovirt_group_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_group_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_group_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:626 msgid "The ``ovirt_host_facts`` module was renamed to :ref:`ovirt_host_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_host_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_host_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:629 msgid "The ``ovirt_host_storage_facts`` module was renamed to :ref:`ovirt_host_storage_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_host_storage_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_host_storage_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:632 msgid "The ``ovirt_network_facts`` module was renamed to :ref:`ovirt_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_network_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_network_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:635 msgid "The ``ovirt_nic_facts`` module was renamed to :ref:`ovirt_nic_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_nic_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_nic_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:638 msgid "The ``ovirt_permission_facts`` module was renamed to :ref:`ovirt_permission_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_permission_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_permission_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:641 msgid "The ``ovirt_quota_facts`` module was renamed to :ref:`ovirt_quota_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_quota_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_quota_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:644 msgid "The ``ovirt_scheduling_policy_facts`` module was renamed to :ref:`ovirt_scheduling_policy_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_scheduling_policy_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_scheduling_policy_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:647 msgid "The ``ovirt_snapshot_facts`` module was renamed to :ref:`ovirt_snapshot_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_snapshot_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_snapshot_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:650 msgid "The ``ovirt_storage_domain_facts`` module was renamed to :ref:`ovirt_storage_domain_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_storage_domain_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_storage_domain_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:653 msgid "The ``ovirt_storage_template_facts`` module was renamed to :ref:`ovirt_storage_template_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_storage_template_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_storage_template_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:656 msgid "The ``ovirt_storage_vm_facts`` module was renamed to :ref:`ovirt_storage_vm_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_storage_vm_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_storage_vm_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:659 msgid "The ``ovirt_tag_facts`` module was renamed to :ref:`ovirt_tag_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_tag_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_tag_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:662 msgid "The ``ovirt_template_facts`` module was renamed to :ref:`ovirt_template_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_template_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_template_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:665 msgid "The ``ovirt_user_facts`` module was renamed to :ref:`ovirt_user_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_user_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_user_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:668 msgid "The ``ovirt_vm_facts`` module was renamed to :ref:`ovirt_vm_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_vm_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_vm_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:671 msgid "The ``ovirt_vmpool_facts`` module was renamed to :ref:`ovirt_vmpool_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``ovirt_vmpool_facts`` モジュールã®åå‰ãŒ :ref:`ovirt_vmpool_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:674 msgid "The ``python_requirements_facts`` module was renamed to :ref:`python_requirements_info `." msgstr "``python_requirements_facts`` モジュールã®åå‰ãŒ :ref:`python_requirements_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:675 msgid "The ``rds_instance_facts`` module was renamed to :ref:`rds_instance_info `." msgstr "``rds_instance_facts`` モジュールã®åå‰ãŒ :ref:`rds_instance_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:676 msgid "The ``rds_snapshot_facts`` module was renamed to :ref:`rds_snapshot_info `." msgstr "``rds_snapshot_facts`` モジュールã®åå‰ãŒ :ref:`rds_snapshot_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:677 msgid "The ``redfish_facts`` module was renamed to :ref:`redfish_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``redfish_facts`` モジュールã®åå‰ãŒ :ref:`redfish_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:680 msgid "The ``redshift_facts`` module was renamed to :ref:`redshift_info `." msgstr "``redshift_facts`` モジュールã®åå‰ãŒ :ref:`redshift_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:681 msgid "The ``route53_facts`` module was renamed to :ref:`route53_info `." msgstr "``route53_facts`` モジュールã®åå‰ãŒ :ref:`route53_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:682 msgid "The ``smartos_image_facts`` module was renamed to :ref:`smartos_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``smartos_image_facts`` モジュールã®åå‰ãŒ :ref:`smartos_image_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:685 msgid "The ``vertica_facts`` module was renamed to :ref:`vertica_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `." msgstr "``vertica_facts`` モジュールã®åå‰ãŒ :ref:`vertica_info ` ã«ãªã‚Šã¾ã—ãŸã€‚æ–°ã—ã„åå‰ã§å‘¼ã³å‡ºã™ã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``ansible_facts`` ã‚’è¿”ã•ãªããªã‚Šã¾ã—ãŸã€‚戻り値ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€:ref:`変数ã®ç™»éŒ² ` を行ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:688 msgid "The ``vmware_cluster_facts`` module was renamed to :ref:`vmware_cluster_info `." msgstr "``vmware_cluster_facts`` モジュールã®åå‰ãŒ :ref:`vmware_cluster_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:689 msgid "The ``vmware_datastore_facts`` module was renamed to :ref:`vmware_datastore_info `." msgstr "``vmware_datastore_facts`` モジュールã®åå‰ãŒ :ref:`vmware_datastore_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:690 msgid "The ``vmware_guest_facts`` module was renamed to :ref:`vmware_guest_info `." msgstr "``vmware_guest_facts`` モジュールã®åå‰ãŒ :ref:`vmware_guest_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:691 msgid "The ``vmware_guest_snapshot_facts`` module was renamed to :ref:`vmware_guest_snapshot_info `." msgstr "``vmware_guest_snapshot_facts`` モジュールã®åå‰ãŒ :ref:`vmware_guest_snapshot_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:692 msgid "The ``vmware_tag_facts`` module was renamed to :ref:`vmware_tag_info `." msgstr "``vmware_tag_facts`` モジュールã®åå‰ãŒ :ref:`vmware_tag_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:693 msgid "The ``vmware_vm_facts`` module was renamed to :ref:`vmware_vm_info `." msgstr "``vmware_vm_facts`` モジュールã®åå‰ãŒ :ref:`vmware_vm_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:694 msgid "The ``xenserver_guest_facts`` module was renamed to :ref:`xenserver_guest_info `." msgstr "``xenserver_guest_facts`` モジュールã®åå‰ãŒ :ref:`xenserver_guest_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:695 msgid "The ``zabbix_group_facts`` module was renamed to :ref:`zabbix_group_info `." msgstr "``zabbix_group_facts`` モジュールã®åå‰ãŒ :ref:`zabbix_group_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:696 msgid "The ``zabbix_host_facts`` module was renamed to :ref:`zabbix_host_info `." msgstr "``zabbix_host_facts`` モジュールã®åå‰ãŒ :ref:`zabbix_host_info ` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:701 msgid ":ref:`vmware_cluster ` was refactored for easier maintenance/bugfixes. Use the three new, specialized modules to configure clusters. Configure DRS with :ref:`vmware_cluster_drs `, HA with :ref:`vmware_cluster_ha ` and vSAN with :ref:`vmware_cluster_vsan `." msgstr ":ref:`vmware_cluster ` ãŒãƒªãƒ•ァクタリングã•れã€ç¶­æŒã‚„ãƒã‚°ä¿®æ­£ãŒå®¹æ˜“ã«ãªã‚Šã¾ã—ãŸã€‚ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®æ§‹æˆã«ã¯ã€3 ã¤ã®æ–°ã—ã„専用モジュールを使用ã—ã¾ã™ã€‚:ref:`vmware_cluster_drs ` ã§ DRS を設定ã—ã€:ref:`vmware_cluster_ha ` ã§ HA を設定ã—ã€:ref:`vmware_cluster_vsan ` ã§ vSAN を設定ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:702 msgid ":ref:`vmware_dvswitch ` accepts ``folder`` parameter to place dvswitch in user defined folder. This option makes ``datacenter`` as an optional parameter." msgstr ":ref:`vmware_dvswitch ` ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« dvswitch ã‚’é…ç½®ã™ã‚‹ ``folder`` パラメーターをå—ã‘入れã¾ã™ã€‚ã“ã®ã‚ªãƒ—ション㯠``datacenter`` ã‚’ä»»æ„ã®ãƒ‘ラメーターã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:703 msgid ":ref:`vmware_datastore_cluster ` accepts ``folder`` parameter to place datastore cluster in user defined folder. This option makes ``datacenter`` as an optional parameter." msgstr ":ref:`vmware_datastore_cluster ` ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’é…ç½®ã™ã‚‹ ``folder`` パラメーターをå—ã‘入れã¾ã™ã€‚ã“ã®ã‚ªãƒ—ション㯠``datacenter`` ã‚’ä»»æ„ã®ãƒ‘ラメーターã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:704 msgid ":ref:`mysql_db ` returns new ``db_list`` parameter in addition to ``db`` parameter. This ``db_list`` parameter refers to list of database names. ``db`` parameter will be deprecated in version 2.13." msgstr ":ref:`mysql_db ` ã¯ã€``db`` パラメーターã«åŠ ãˆã¦ã€æ–°ã—ã„``db_list`` パラメーターを返ã—ã¾ã™ã€‚ã“ã® ``db_list`` パラメーターã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹åã®ãƒªã‚¹ãƒˆã‚’å‚ç…§ã—ã¾ã™ã€‚``db`` パラメーターã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.13 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:705 msgid ":ref:`snow_record ` and :ref:`snow_record_find ` now takes environment variables for ``instance``, ``username`` and ``password`` parameters. This change marks these parameters as optional." msgstr ":ref:`snow_record ` ã¨:ref:`snow_record_find ` ã¯ã€``instance``ã€``username``ã€``password`` ã®ãƒ‘ラメータã«ç’°å¢ƒå¤‰æ•°ã‚’使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ã“れらã®ãƒ‘ラメータã¯ä»»æ„ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:706 msgid "The deprecated ``force`` option in ``win_firewall_rule`` has been removed." msgstr "``win_firewall_rule`` ã®éžæŽ¨å¥¨ã® ``force`` オプションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:707 msgid ":ref:`openssl_certificate `'s ``ownca`` provider creates authority key identifiers if not explicitly disabled with ``ownca_create_authority_key_identifier: no``. This is only the case for the ``cryptography`` backend, which is selected by default if the ``cryptography`` library is available." msgstr ":ref:`openssl_certificate ` ã® ``ownca`` プロãƒã‚¤ãƒ€ãƒ¼ã¯ã€``ownca_create_authority_key_identifier: no`` ã§æ˜Žç¤ºçš„ã«ç„¡åйã«ã—ã¦ã„ãªã‘れã°ã€æ¨©é™ã‚­ãƒ¼ã®è­˜åˆ¥å­ã‚’作æˆã—ã¾ã™ã€‚ã“れã¯ã€``cryptography`` ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®å ´åˆã®ã¿ã§ã€``cryptography`` ライブラリーãŒåˆ©ç”¨å¯èƒ½ãªå ´åˆã¯ãƒ‡ãƒ•ォルトã§é¸æŠžã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:708 msgid ":ref:`openssl_certificate `'s ``ownca`` and ``selfsigned`` providers create subject key identifiers if not explicitly disabled with ``ownca_create_subject_key_identifier: never_create`` resp. ``selfsigned_create_subject_key_identifier: never_create``. If a subject key identifier is provided by the CSR, it is taken; if not, it is created from the public key. This is only the case for the ``cryptography`` backend, which is selected by default if the ``cryptography`` library is available." msgstr ":ref:`openssl_certificate ` ã®``ownca`` プロãƒã‚¤ãƒ€ãƒ¼ãŠã‚ˆã³ ``selfsigned`` プロãƒã‚¤ãƒ€ãƒ¼ã¯ã€``ownca_create_subject_key_identifier: never_create`` ãŠã‚ˆã³ ``selfsigned_create_subject_key_identifier: never_create`` ã§ãれãžã‚Œæ˜Žç¤ºçš„ã«ç„¡åŠ¹åŒ–ã•れã¦ã„ãªã‘れã°ã€ã‚µãƒ–ジェクトéµã®è­˜åˆ¥å­ã‚’作æˆã—ã¾ã™ã€‚CSR ã«ã‚ˆã£ã¦ã‚µãƒ–ジェクトéµè­˜åˆ¥å­ãŒæä¾›ã•れã¦ã„ã‚‹å ´åˆã¯ãれãŒä½¿ç”¨ã•ã‚Œã€æä¾›ã•れã¦ã„ãªã„å ´åˆã¯å…¬é–‹éµã‹ã‚‰ä½œæˆã•れã¾ã™ã€‚ã“れ㯠``cryptography`` ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®å ´åˆã®ã¿ã§ã€``cryptography`` ライブラリーãŒåˆ©ç”¨å¯èƒ½ãªå ´åˆã¯ãƒ‡ãƒ•ォルトã§é¸æŠžã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:709 msgid ":ref:`openssh_keypair ` now applies the same file permissions and ownership to both public and private keys (both get the same ``mode``, ``owner``, ``group``, and so on). If you need to change permissions / ownership on one key, use the :ref:`file ` to modify it after it is created." msgstr ":ref:`openssh_keypair ` ã¯ã€å…¬é–‹éµã¨ç§˜å¯†éµã®ä¸¡æ–¹ã«åŒã˜ãƒ•ァイルã®ãƒ‘ãƒ¼ãƒŸãƒƒã‚·ãƒ§ãƒ³ã¨æ‰€æœ‰æ¨©ã‚’é©ç”¨ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(両方ã«åŒã˜ ``mode``ã€``owner``ã€``group`` ãªã©ãŒé©ç”¨ã•れã¾ã™)。ã‚ã‚‹éµã®ãƒ‘ーミッション/所有権を変更ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ä½œæˆå¾Œã« :ref:`file ` を使用ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:716 msgid "Removed Lookup Plugins" msgstr "削除ã•れãŸãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—プラグイン" #: ../../rst/porting_guides/porting_guide_2.9.rst:718 msgid "``redis_kv`` use :ref:`redis ` instead." msgstr "``redis_kv`` ã¯ã€ä»£ã‚り㫠:ref:`redis ` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:731 msgid "Network resource modules" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/porting_guides/porting_guide_2.9.rst:733 msgid "Ansible 2.9 introduced the first batch of network resource modules. Sections of a network device's configuration can be thought of as a resource provided by that device. Network resource modules are intentionally scoped to configure a single resource and you can combine them as building blocks to configure complex network services. The older modules are deprecated in Ansible 2.9 and will be removed in Ansible 2.13. You should scan the list of deprecated modules above and replace them with the new network resource modules in your playbooks. See `Ansible Network Features in 2.9 `_ for details." msgstr "Ansible 2.9 ã§ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æœ€åˆã®ãƒãƒƒãƒãŒå°Žå…¥ã•れã¾ã—ãŸã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®è¨­å®šã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãã®ãƒ‡ãƒã‚¤ã‚¹ãŒæä¾›ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã¨è€ƒãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€æ„図的㫠1 ã¤ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’設定ã™ã‚‹ã‚ˆã†ã«ã‚¹ã‚³ãƒ¼ãƒ—ã•れã¦ãŠã‚Šã€è¤‡é›‘ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ“スを設定ã™ã‚‹ãŸã‚ã®ãƒ“ルディングブロックã¨ã—ã¦çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¤ã„モジュールã¯ã€Ansible 2.9 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã€Ansible 2.13 ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚上記ã®éžæŽ¨å¥¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒªã‚¹ãƒˆã‚’スキャンã—ã€Playbook ã®ä¸­ã§æ–°ã—ã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ç½®ãæ›ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€Œ`2.9 ã® Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ©Ÿèƒ½ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:736 msgid "Improved ``gather_facts`` support for network devices" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® ``gather_facts`` サãƒãƒ¼ãƒˆãŒæ”¹å–„ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:738 msgid "In Ansible 2.9, the ``gather_facts`` keyword now supports gathering network device facts in standardized key/value pairs. You can feed these network facts into further tasks to manage the network device. You can also use the new ``gather_network_resources`` parameter with the network ``*_facts`` modules (such as :ref:`eos_facts `) to return just a subset of the device configuration. See :ref:`network_gather_facts` for an example." msgstr "Ansible 2.9 ã§ã¯ã€``gather_facts`` キーワードãŒã€æ¨™æº–化ã•れãŸã‚­ãƒ¼/値ã®ãƒšã‚¢ã§ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ•ァクトã®åŽé›†ã«å¯¾å¿œã—ã¾ã—ãŸã€‚ã“れらã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァクトをã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’管ç†ã™ã‚‹ãŸã‚ã®ã•らãªã‚‹ã‚¿ã‚¹ã‚¯ã«æŠ•å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€æ–°ã—ã„ ``gather_network_resources`` パラメーターをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ``*_facts`` モジュール (:ref:`eos_facts ` ãªã©) ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€ãƒ‡ãƒã‚¤ã‚¹æ§‹æˆã®ã‚µãƒ–セットã®ã¿ã‚’è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®ä¾‹ã¨ã—ã¦ã€ã€Œ:ref:`network_gather_facts`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_2.9.rst:741 msgid "Top-level connection arguments removed in 2.9" msgstr "2.9 ã§å‰Šé™¤ã•ã‚ŒãŸæœ€ä¸Šä½ã®æŽ¥ç¶šå¼•æ•°" #: ../../rst/porting_guides/porting_guide_2.9.rst:743 msgid "Top-level connection arguments like ``username``, ``host``, and ``password`` are removed in version 2.9." msgstr "``username``ã€``host``ã€``password`` ãªã©ã®æœ€ä¸Šä½ãƒ¬ãƒ™ãƒ«ã®æŽ¥ç¶šå¼•æ•°ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_2.9.rst:759 msgid "Change your playbooks to the connection types ``network_cli`` and ``netconf`` using standard Ansible connection properties, and setting those properties in inventory by group. As you update your playbooks and inventory files, you can easily make the change to ``become`` for privilege escalation (on platforms that support it). For more information, see the :ref:`using become with network modules` guide and the :ref:`platform documentation`." msgstr "Playbook ã‚’ã€Ansible ã®æ¨™æº–çš„ãªæŽ¥ç¶šãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ãƒ¼ã‚’ä½¿ç”¨ã—ã¦æŽ¥ç¶šã‚¿ã‚¤ãƒ— ``network_cli`` ãŠã‚ˆã³``netconf`` ã«å¤‰æ›´ã—ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ã“れらã®ãƒ—ロパティーをグループã”ã¨ã«è¨­å®šã—ã¾ã™ã€‚Playbook ã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを更新ã™ã‚‹éš›ã«ã€ç‰¹æ¨©æ˜‡æ ¼ã®ãŸã‚ã« ``become`` ã¸ã®å¤‰æ›´ã‚’ç°¡å˜ã«è¡Œã†ã“ã¨ãŒã§ãã¾ã™ (サãƒãƒ¼ãƒˆã—ã¦ã„るプラットフォームã®å ´åˆ)。詳細ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ become ã®ä½¿ç”¨`ã€ã‚¬ã‚¤ãƒ‰ãŠã‚ˆã³ :ref:`プラットフォームã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:8 msgid "Ansible 3 Porting Guide" msgstr "Ansible 3 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:15 msgid "Ansible 3 is based on Ansible-Base 2.10, which is the same major release as Ansible 2.10. Therefore, there is no section on ansible-base in this porting guide. If you are upgrading from Ansible 2.9, please first consult the Ansible 2.10 porting guide before continuing with the Ansible 3 porting guide." msgstr "Ansible 3 ã¯ã€Ansible 2.10 ã¨åŒã˜ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§ã‚ã‚‹ Ansible-Base 2.10 をベースã«ã—ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€ã“ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰ã«ã¯ã€ansible-base ã«é–¢ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã‚りã¾ã›ã‚“。Ansible 2.9 ã‹ã‚‰ã‚¢ãƒƒãƒ—グレードã™ã‚‹å ´åˆã¯ã€ã¾ãš Ansible 2.10 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ã‹ã‚‰ã€Ansible 3 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰ã«é€²ã‚“ã§ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:17 msgid "We suggest you read this page along with the `Ansible 3 Changelog `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible 3 Changelog `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:20 msgid "Porting Guide for v3.4.0" msgstr "v3.4.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:26 #: ../../rst/porting_guides/porting_guide_3.rst:95 #: ../../rst/porting_guides/porting_guide_3.rst:125 #: ../../rst/porting_guides/porting_guide_3.rst:198 #: ../../rst/porting_guides/porting_guide_3.rst:360 #: ../../rst/porting_guides/porting_guide_3.rst:639 #: ../../rst/porting_guides/porting_guide_4.rst:202 #: ../../rst/porting_guides/porting_guide_4.rst:260 #: ../../rst/porting_guides/porting_guide_4.rst:274 #: ../../rst/porting_guides/porting_guide_4.rst:316 #: ../../rst/porting_guides/porting_guide_4.rst:335 #: ../../rst/porting_guides/porting_guide_4.rst:413 msgid "dellemc.openmanage" msgstr "dellemc.openmanage" #: ../../rst/porting_guides/porting_guide_3.rst:28 #: ../../rst/porting_guides/porting_guide_3.rst:97 #: ../../rst/porting_guides/porting_guide_4.rst:204 #: ../../rst/porting_guides/porting_guide_4.rst:262 #: ../../rst/porting_guides/porting_guide_4.rst:318 #: ../../rst/porting_guides/porting_guide_4.rst:415 msgid "idrac_user - Issue(192043) Module may error out with the message ``unable to perform the import or export operation because there are pending attribute changes or a configuration job is in progress``. Wait for the job to complete and run the task again." msgstr "idrac_user - Issue(192043)モジュール㯠``unable to perform the import or export operation because there are pending attribute changes or a configuration job is in progress`` メッセージã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ジョブãŒå®Œäº†ã™ã‚‹ã¾ã§å¾…機ã—ã€ã‚¿ã‚¹ã‚¯ã‚’å†åº¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:29 #: ../../rst/porting_guides/porting_guide_3.rst:98 #: ../../rst/porting_guides/porting_guide_4.rst:416 msgid "ome_configuration_compliance_info - Issue(195592) Module may error out with the message ``unable to process the request because an error occurred``. If the issue persists, report it to the system administrator." msgstr "ome_configuration_compliance_info - Issue(195592) モジュール㯠``unable to process the request because an error occurred`` メッセージã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†è€…ã«å ±å‘Šã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:30 #: ../../rst/porting_guides/porting_guide_3.rst:99 #: ../../rst/porting_guides/porting_guide_3.rst:127 #: ../../rst/porting_guides/porting_guide_4.rst:417 msgid "ome_smart_fabric - Issue(185322) Only three design types are supported by OpenManage Enterprise Modular but the module successfully creates a fabric when the design type is not supported." msgstr "ome_smart_fabric - Issue(185322)㯠OpenManage Enterprise Modular ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ 3 ã¤ã®è¨­è¨ˆã‚¿ã‚¤ãƒ—ã®ã¿ã§ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯è¨­è¨ˆã‚¿ã‚¤ãƒ—ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ã¨ã€ãƒ•ã‚¡ãƒ–ãƒªãƒƒã‚¯ãŒæ­£å¸¸ã«ä½œæˆã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:31 #: ../../rst/porting_guides/porting_guide_3.rst:100 #: ../../rst/porting_guides/porting_guide_3.rst:128 #: ../../rst/porting_guides/porting_guide_4.rst:263 #: ../../rst/porting_guides/porting_guide_4.rst:319 #: ../../rst/porting_guides/porting_guide_4.rst:418 msgid "ome_smart_fabric_uplink - Issue(186024) ome_smart_fabric_uplink module does not allow the creation of multiple uplinks of the same name even though this is supported by OpenManage Enterprise Modular. If an uplink is created using the same name as an existing uplink, the existing uplink is modified." msgstr "ome_smart_fabric_uplink - Issue(186024)ome_smart_fabric_uplink モジュールã§ã¯ã€OpenManage Enterprise Modular ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¦ã‚‚ã€åŒã˜åå‰ã®è¤‡æ•°ã®ã‚¢ãƒƒãƒ—リンクã®ä½œæˆã¯ã§ãã¾ã›ã‚“ã€‚ã‚¢ãƒƒãƒ—ãƒªãƒ³ã‚¯ãŒæ—¢å­˜ã®ã‚¢ãƒƒãƒ—リンクã¨åŒã˜åå‰ã‚’使用ã—ã¦ä½œæˆã•れるã¨ã€æ—¢å­˜ã®ã‚¢ãƒƒãƒ—ãŒå¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:39 #: ../../rst/porting_guides/porting_guide_4.rst:495 msgid "ansible-test - Tests run with the ``centos6`` and ``default`` test containers now use a PyPI proxy container to access PyPI when Python 2.6 is used. This allows tests running under Python 2.6 to continue functioning even though PyPI is discontinuing support for non-SNI capable clients." msgstr "ansible-test - ``centos6`` ãŠã‚ˆã³ ``default`` テストコンテナーã§å®Ÿè¡Œã•れるテストã§ã¯ã€Python 2.6 ã®ä½¿ç”¨æ™‚ã« PyPI プロキシーコンテナーを使用ã—㦠PyPI ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€Python 2.6 ã§å®Ÿè¡Œã•れるテストã¯ã€PyPI 以外ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚µãƒãƒ¼ãƒˆãŒã‚ã‚‹å ´åˆã§ã‚‚引ãç¶šãæ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:42 #: ../../rst/porting_guides/porting_guide_4.rst:330 msgid "community.postgresql" msgstr "community.postgresql" #: ../../rst/porting_guides/porting_guide_3.rst:44 #: ../../rst/porting_guides/porting_guide_4.rst:332 msgid "postgresql_query - the default value of the ``as_single_query`` option will be changed to ``yes`` in community.postgresql 2.0.0 (https://github.com/ansible-collections/community.postgresql/issues/85)." msgstr "postgresql_query - ``as_single_query`` オプションã®ãƒ‡ãƒ•ォルト値㌠community.postgresql 2.0.0 ã§ ``yes`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ (https://github.com/ansible-collections/community.postgresql/issues/85)。" #: ../../rst/porting_guides/porting_guide_3.rst:47 #: ../../rst/porting_guides/porting_guide_4.rst:564 msgid "netapp.ontap" msgstr "netapp.ontap" #: ../../rst/porting_guides/porting_guide_3.rst:49 #: ../../rst/porting_guides/porting_guide_4.rst:566 msgid "na_ontap_autosupport - Added REST support to the module." msgstr "na_ontap_autosupport - モジュール㫠REST サãƒãƒ¼ãƒˆã‚’追加。" #: ../../rst/porting_guides/porting_guide_3.rst:57 #: ../../rst/porting_guides/porting_guide_4.rst:739 msgid "ec2_vpc_endpoint_info - the ``query`` option has been deprecated and will be removed after 2022-12-01 (https://github.com/ansible-collections/community.aws/pull/346). The ec2_vpc_endpoint_info now defaults to listing information about endpoints. The ability to search for information about available services has been moved to the dedicated module ``ec2_vpc_endpoint_service_info``." msgstr "ec2_vpc_endpoint_info - ``query`` オプションã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€2022-12-01 以é™ã«å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.aws/pull/346)。ec2_vpc_endpoint_info ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«é–¢ã™ã‚‹æƒ…報を一覧表示ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚利用å¯èƒ½ãªã‚µãƒ¼ãƒ“スã«é–¢ã™ã‚‹æƒ…å ±ã®æ¤œç´¢æ©Ÿèƒ½ãŒã€å°‚用ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``ec2_vpc_endpoint_service_info`` ã«ç§»å‹•ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:62 #: ../../rst/porting_guides/porting_guide_4.rst:373 msgid "docker_* modules and plugins, except ``docker_swarm`` connection plugin and ``docker_compose`` and ``docker_stack*` modules - the current default ``localhost`` for ``tls_hostname`` is deprecated. In community.docker 2.0.0 it will be computed from ``docker_host`` instead (https://github.com/ansible-collections/community.docker/pull/134)." msgstr "docker_* モジュールãŠã‚ˆã³ãƒ—ラグイン(``docker_swarm`` 接続プラグインã€``docker_compose`` モジュールã€ãŠã‚ˆã³ '`docker_stack*` モジュールを除ã)ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚``tls_hostname`` ã®ç¾åœ¨ã®ãƒ‡ãƒ•ォルト ``localhost`` ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚community.docker 2.0.0 ã§ã¯ã€ä»£ã‚り㫠``docker_host`` ã‹ã‚‰è¨ˆç®—ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.docker/pull/134)。" #: ../../rst/porting_guides/porting_guide_3.rst:65 msgid "Porting Guide for v3.3.0" msgstr "v3.3.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:71 #: ../../rst/porting_guides/porting_guide_3.rst:139 #: ../../rst/porting_guides/porting_guide_4.rst:538 msgid "community.mysql" msgstr "community.mysql" #: ../../rst/porting_guides/porting_guide_3.rst:73 #: ../../rst/porting_guides/porting_guide_4.rst:547 msgid "mysql_user - the ``REQUIRESSL`` is an alias for the ``ssl`` key in the ``tls_requires`` option in ``community.mysql`` 2.0.0 and support will be dropped altogether in ``community.mysql`` 3.0.0 (https://github.com/ansible-collections/community.mysql/issues/121)." msgstr "``REQUIRESSL`` ã¯ã€``community.mysql`` 2.0.0 ã® ``tls_requires`` オプションã«ã‚ã‚‹ ``ssl`` キーã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚サãƒãƒ¼ãƒˆã¯ ``community.mysql`` 3.0.0 ã§ã™ã¹ã¦å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/issues/121)。" #: ../../rst/porting_guides/porting_guide_3.rst:81 #: ../../rst/porting_guides/porting_guide_4.rst:769 msgid "vmware_vmkernel_ip_config - deprecate in favor of vmware_vmkernel (https://github.com/ansible-collections/community.vmware/pull/667)." msgstr "vmware_vmkernel_ip_config - vmware_vmkernel ãŒæŽ¡ç”¨ã•ã‚Œã‚‹ï¼ˆéžæŽ¨å¥¨ï¼‰ï¼ˆhttps://github.com/ansible-collections/community.kubernetes/pull/16)" #: ../../rst/porting_guides/porting_guide_3.rst:86 #: ../../rst/porting_guides/porting_guide_4.rst:774 msgid "Support for Python versions earlier than 3.5 is being deprecated" msgstr "3.5 よりもå‰ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚µãƒãƒ¼ãƒˆãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:89 msgid "Porting Guide for v3.2.0" msgstr "v3.2.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:108 #: ../../rst/porting_guides/porting_guide_4.rst:445 msgid "docker_swarm - if ``join_token`` is specified, a returned join token with the same value will be replaced by ``VALUE_SPECIFIED_IN_NO_LOG_PARAMETER``. Make sure that you do not blindly use the join tokens from the return value of this module when the module is invoked with ``join_token`` specified! This breaking change appears in a minor release since it is necessary to fix a security issue (https://github.com/ansible-collections/community.docker/pull/103)." msgstr "docker_swarm - ``join_token`` ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã€è¿”ã•れるçµåˆãƒˆãƒ¼ã‚¯ãƒ³ãŒ ``VALUE_SPECIFIED_IN_NO_LOG_PARAMETER`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ ``join_token`` ã§å‘¼ã³å‡ºã•れるã¨ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ã‹ã‚‰çµåˆãƒˆãƒ¼ã‚¯ãƒ³ã‚’使用ã—ãªã„よã†ã«ã—ã¾ã™ã€‚ã“ã®é‡å¤§ãªå¤‰æ›´ã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®å•題を修正ã™ã‚‹ãŸã‚ã«å¿…è¦ãªãŸã‚ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.docker/pull/103)。" #: ../../rst/porting_guides/porting_guide_3.rst:116 #: ../../rst/porting_guides/porting_guide_4.rst:744 msgid "acme module_utils - the ``acme`` module_utils (``ansible_collections.community.crypto.plugins.module_utils.acme``) is deprecated and will be removed in community.crypto 2.0.0. Use the new Python modules in the ``acme`` package instead (``ansible_collections.community.crypto.plugins.module_utils.acme.xxx``) (https://github.com/ansible-collections/community.crypto/pull/184)." msgstr "acme module_utils - ``acme`` module_utils(``ansible_collections.community.crypto.plugins.module_utils.acme``)ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€community.crypto 2.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠``acme`` ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã§æ–°ã—ã„ Python モジュールを使用ã—ã¦ãã ã•ã„(``ansible_collections.community.crypto.plugins.module_utils.acme.xxx``)(https://github.com/ansible-collections/community.crypto/pull/184)。" #: ../../rst/porting_guides/porting_guide_3.rst:119 msgid "Porting Guide for v3.1.0" msgstr "v3.1.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:136 #: ../../rst/porting_guides/porting_guide_4.rst:535 msgid "introduce \"skip_version_check\" parameter in grafana_teams and grafana_folder modules (#147)" msgstr "grafana_teams モジュールãŠã‚ˆã³ grafana_folder モジュールã«ã€Œskip_version_checkã€ãƒ‘ラメーターãŒè¿½åŠ ã•れã¾ã—ãŸ(#147)" #: ../../rst/porting_guides/porting_guide_3.rst:141 #: ../../rst/porting_guides/porting_guide_4.rst:542 msgid "mysql_replication - the mode options values ``getslave``, ``startslave``, ``stopslave``, ``resetslave``, ``resetslaveall` and the master_use_gtid option ``slave_pos`` are deprecated (see the alternative values) and will be removed in ``community.mysql`` 3.0.0 (https://github.com/ansible-collections/community.mysql/pull/97)." msgstr "mysql_replication - モードオプションã®å€¤ ``getslave``ã€``startslave``ã€``stopslave``ã€``resetslave``ã€`resetslaveall`ã€ãŠã‚ˆã³ master_use_gtid オプション ``slave_pos`` ã¯éžæŽ¨å¥¨ã¨ãªã‚Šï¼ˆåˆ¥ã®å€¤ã‚’å‚照)ã€``community.mysql`` 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆåˆ¥ã®å€¤ã‚’å‚照)(https://github.com/ansible-collections/community.mysql/pull/97))。" #: ../../rst/porting_guides/porting_guide_3.rst:142 #: ../../rst/porting_guides/porting_guide_4.rst:544 msgid "mysql_replication - the word ``SLAVE`` in messages returned by the module will be changed to ``REPLICA`` in ``community.mysql`` 2.0.0 (https://github.com/ansible-collections/community.mysql/issues/98)." msgstr "mysql_replication - モジュールã«ã‚ˆã£ã¦è¿”ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã® ``SLAVE`` ã¨ã„ã†å˜èªžã¯ ``community.mysql`` 2.0.0 ã§ã¯ ``REPLICA`` ã«å¤‰æ›´ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/issues/98)。" #: ../../rst/porting_guides/porting_guide_3.rst:150 #: ../../rst/porting_guides/porting_guide_4.rst:695 msgid "Removed TMOS v11 support for bigip_gtm_pool and bigip_gtm_wide_ip modules" msgstr "bigip_gtm_pool ãŠã‚ˆã³ bigip_gtm_wide_ip モジュール㮠TMOS v11 サãƒãƒ¼ãƒˆã‚’削除" #: ../../rst/porting_guides/porting_guide_3.rst:151 #: ../../rst/porting_guides/porting_guide_4.rst:696 msgid "Removed quorum and monitor_type parameters in bigip_node module. See porting guides section at https://clouddocs.f5.com/products/orchestration/ansible/devel/usage/porting-guides.html" msgstr "bigip_node モジュール㧠quorum ãŠã‚ˆã³ monitor_type パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ç§»æ¤ã‚¬ã‚¤ãƒ‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ï¼ˆhttps://clouddocs.f5.com/products/orchestration/ansible/devel/usage/porting-guides.html)をå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:152 #: ../../rst/porting_guides/porting_guide_4.rst:697 msgid "Removed syslog_settings and pool_settings parameters in bigip_log_destination moduke. See porting guides section at https://clouddocs.f5.com/products/orchestration/ansible/devel/usage/porting-guides.html" msgstr "bigip_log_destination モジュール㧠syslog_settings パラメーターãŠã‚ˆã³ pool_settings パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ç§»æ¤ã‚¬ã‚¤ãƒ‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ï¼ˆhttps://clouddocs.f5.com/products/orchestration/ansible/devel/usage/porting-guides.html)をå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:158 #: ../../rst/porting_guides/porting_guide_3.rst:220 #: ../../rst/porting_guides/porting_guide_4.rst:325 #: ../../rst/porting_guides/porting_guide_4.rst:730 msgid "cloudscale_ch.cloud" msgstr "cloudscale_ch.cloud" #: ../../rst/porting_guides/porting_guide_3.rst:160 #: ../../rst/porting_guides/porting_guide_4.rst:732 msgid "The aliases ``server_uuids`` and ``server_uuid`` of the servers parameter in the volume module will be removed in version 3.0.0." msgstr "ボリュームモジュール㮠server パラメーターã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ ``server_uuids`` ãŠã‚ˆã³ ``server_uuid`` ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:165 #: ../../rst/porting_guides/porting_guide_4.rst:737 msgid "ec2_eip - formally deprecate the ``instance_id`` alias for ``device_id`` (https://github.com/ansible-collections/community.aws/pull/349)." msgstr "ec2_eip - ``device_id`` ã® ``instance_id`` エイリアスを正å¼ã«éžæŽ¨å¥¨åŒ–(https://github.com/ansible-collections/community.aws/pull/349)。" #: ../../rst/porting_guides/porting_guide_3.rst:166 #: ../../rst/porting_guides/porting_guide_4.rst:738 msgid "ec2_vpc_endpoint - deprecate the policy_file option and recommend using policy with a lookup (https://github.com/ansible-collections/community.aws/pull/366)." msgstr "ec2_vpc_endpoint - policy_file ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’éžæŽ¨å¥¨ã«ã—ã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§ã®ãƒãƒªã‚·ãƒ¼ã®ä½¿ç”¨ã‚’推奨ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.aws/pull/366)" #: ../../rst/porting_guides/porting_guide_3.rst:171 #: ../../rst/porting_guides/porting_guide_4.rst:745 msgid "acme_account_info - when ``retrieve_orders=url_list``, ``orders`` will no longer be returned in community.crypto 2.0.0. Use ``order_uris`` instead (https://github.com/ansible-collections/community.crypto/pull/178)." msgstr "acme_account_info - ``retrieve_orders=url_list`` ã®å ´åˆã€``orders`` 㯠community.crypto 2.0.0 ã§è¿”ã•れãªããªã‚Šã¾ã™ã€‚代ã‚り㫠``order_uris`` を使用ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.crypto/pull/178)" #: ../../rst/porting_guides/porting_guide_3.rst:176 #: ../../rst/porting_guides/porting_guide_4.rst:750 msgid "apt_rpm - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "apt_rpm - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:177 #: ../../rst/porting_guides/porting_guide_4.rst:751 msgid "composer - deprecated invalid parameter aliases ``working-dir``, ``global-command``, ``prefer-source``, ``prefer-dist``, ``no-dev``, ``no-scripts``, ``no-plugins``, ``optimize-autoloader``, ``classmap-authoritative``, ``apcu-autoloader``, ``ignore-platform-reqs``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "composer - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``working-dir``ã€``global-command``ã€``prefer-source``ã€``prefer-dist``ã€``no-dev``ã€``no-scripts``ã€``no-plugins``ã€``optimize-autoloader``ã€``classmap-authoritative``ã€``apcu-autoloader``ã€``ignore-platform-reqs`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927。" #: ../../rst/porting_guides/porting_guide_3.rst:178 #: ../../rst/porting_guides/porting_guide_4.rst:753 msgid "github_deploy_key - deprecated invalid parameter alias ``2fa_token``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "github_deploy_key - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``2fa_token`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)" #: ../../rst/porting_guides/porting_guide_3.rst:179 #: ../../rst/porting_guides/porting_guide_4.rst:754 msgid "grove - the option ``message`` will be removed in community.general 4.0.0. Use the new option ``message_content`` instead (https://github.com/ansible-collections/community.general/pull/1929)." msgstr "grove - オプション ``message`` 㯠community.general 4.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚代ã‚りã«ã€æ–°ã—ã„オプション ``message_content`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1929)。" #: ../../rst/porting_guides/porting_guide_3.rst:180 #: ../../rst/porting_guides/porting_guide_4.rst:755 msgid "homebrew - deprecated invalid parameter alias ``update-brew``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "homebrew - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-brew`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)" #: ../../rst/porting_guides/porting_guide_3.rst:181 #: ../../rst/porting_guides/porting_guide_4.rst:756 msgid "homebrew_cask - deprecated invalid parameter alias ``update-brew``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "homebrew_cask - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-brew`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:182 #: ../../rst/porting_guides/porting_guide_4.rst:757 msgid "opkg - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "opkg - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:183 #: ../../rst/porting_guides/porting_guide_4.rst:758 msgid "pacman - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "pacman - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:184 #: ../../rst/porting_guides/porting_guide_4.rst:759 msgid "puppet - deprecated undocumented parameter ``show_diff``, will be removed in 7.0.0. (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "puppet - ドキュメント化ã•れã¦ã„ãªã„éžæŽ¨å¥¨ã®ãƒ‘ラメーター ``show_diff`` ㌠7.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:185 #: ../../rst/porting_guides/porting_guide_4.rst:760 msgid "runit - unused parameter ``dist`` marked for deprecation (https://github.com/ansible-collections/community.general/pull/1830)." msgstr "runit - 未使用ã®ãƒ‘ラメーター ``dist`` ã¯éžæŽ¨å¥¨ã¨ç¤ºã•れã¦ã„ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1830)。" #: ../../rst/porting_guides/porting_guide_3.rst:186 #: ../../rst/porting_guides/porting_guide_4.rst:761 msgid "slackpkg - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "slackpkg - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:187 #: ../../rst/porting_guides/porting_guide_4.rst:762 msgid "urmpi - deprecated invalid parameter aliases ``update-cache`` and ``no-recommends``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "urmpi - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ãŠã‚ˆã³ ``no-recommends`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:188 #: ../../rst/porting_guides/porting_guide_4.rst:763 msgid "xbps - deprecated invalid parameter alias ``update-cache``, will be removed in 5.0.0 (https://github.com/ansible-collections/community.general/pull/1927)." msgstr "xbps - éžæŽ¨å¥¨ã®ç„¡åйãªãƒ‘ラメーターエイリアス ``update-cache`` ㌠5.0.0 ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1927)。" #: ../../rst/porting_guides/porting_guide_3.rst:189 #: ../../rst/porting_guides/porting_guide_4.rst:764 msgid "xfconf - returning output as facts is deprecated, this will be removed in community.general 4.0.0. Please register the task output in a variable and use it instead. You can already switch to the new behavior now by using the new ``disable_facts`` option (https://github.com/ansible-collections/community.general/pull/1747)." msgstr "xfconf - 出力をファクトã¨ã—ã¦è¿”ã™ã®ã¯éžæŽ¨å¥¨ã§ã™ã€‚ã“れ㯠community.general 4.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚タスクã®å‡ºåŠ›ã‚’å¤‰æ•°ã«ç™»éŒ²ã—ã¦ä»£ã‚りã«ä½¿ç”¨ã—ã¦ãã ã•ã„。新ã—ã„``disable_facts`` オプション使用ã™ã‚‹ã¨æ–°ã—ã„æŒ™å‹•ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1747。" #: ../../rst/porting_guides/porting_guide_3.rst:192 msgid "Porting Guide for v3.0.0" msgstr "v3.0.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_3.rst:200 msgid "Issue 1(186024): ome_smart_fabric_uplink module does not allow the creation of multiple uplinks of the same name even though this is supported by OpenManage Enterprise Modular. If an uplink is created using the same name as an existing uplink, the existing uplink is modified." msgstr "Issue 1(186024): ome_smart_fabric_uplink モジュールã§ã¯ã€OpenManage Enterprise Modular ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¦ã‚‚ã€åŒã˜åå‰ã®è¤‡æ•°ã®ã‚¢ãƒƒãƒ—リンクã®ä½œæˆã¯ã§ãã¾ã›ã‚“ã€‚ã‚¢ãƒƒãƒ—ãƒªãƒ³ã‚¯ãŒæ—¢å­˜ã®ã‚¢ãƒƒãƒ—リンクã¨åŒã˜åå‰ã‚’使用ã—ã¦ä½œæˆã•れるã¨ã€æ—¢å­˜ã®ã‚¢ãƒƒãƒ—ãŒå¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:201 msgid "Issue 2(187956): If an invalid job_id is provided, idrac_lifecycle_controller_job_status_info returns an error message. This error message does not contain information about the exact issue with the invalid job_id." msgstr "Issue 2(187956): 無効ãªjob_idãŒæä¾›ã•れãŸå ´åˆã€idrac_lifecycle_controller_job_status_infoã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯ã€ç„¡åйãªjob_idã«é–¢ã™ã‚‹æ­£ç¢ºãªå•題ã«ã¤ã„ã¦ã®æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:202 msgid "Issue 3(188267): While updating the iDRAC firmware, the idrac_firmware module completes execution before the firmware update job is completed. An incorrect message is displayed in the task output as 'DRAC WSMAN endpoint returned HTTP code '400' Reason 'Bad Request''. This issue may occur if the target iDRAC firmware version is less than 3.30.30.30" msgstr "Issue 3(188267): iDRACãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ›´æ–°ä¸­ã«ã€idrac_firmwareモジュールã¯ã€ãƒ•ァームウェア更新ジョブãŒå®Œäº†ã™ã‚‹å‰ã«å®Ÿè¡Œã‚’完了ã—ã¾ã™ã€‚タスク出力ã«èª¤ã£ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸'DRAC WSMAN endpoint returned HTTP code '400' Reason 'Bad Request''ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®å•題ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆiDRACファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ3.30.30.30未満ã®å ´åˆã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™" #: ../../rst/porting_guides/porting_guide_3.rst:213 msgid "ansible.utils" msgstr "ansible.utils" #: ../../rst/porting_guides/porting_guide_3.rst:215 msgid "If added custom sub plugins in your collection move from old location `plugins/` to the new location `plugins/sub_plugins/` and update the imports as required" msgstr "コレクションã«ã‚«ã‚¹ã‚¿ãƒ ã‚µãƒ–プラグインを追加ã—ãŸå ´åˆã€ä»¥å‰ã®å ´æ‰€ `plugins/` ã‹ã‚‰æ–°ã—ã„場所 `plugins/sub_plugins/` ã«ç§»å‹•ã—ã€å¿…è¦ã«å¿œã˜ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:216 msgid "Move sub plugins cli_parsers, fact_diff and validate to `plugins/sub_plugins` folder" msgstr "サブプラグイン cli_parsersã€fact_diffã€ãŠã‚ˆã³ validate ã‚’ `plugins/sub_plugins` ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:217 msgid "The `cli_parsers` sub plugins folder name is changed to `cli_parse` to have consistent naming convention, that is all the cli_parse subplugins will now be in `plugins/sub_plugins/cli_parse` folder" msgstr "`cli_parsers` サブプラグインã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼åãŒã€ä¸€è²«æ€§ã®ã‚る命åè¦å‰‡ã‚’æŒã¤ã‚ˆã†ã« `cli_parse` ã«å¤‰æ›´ã«ãªã‚Šã€cli_parse サブプラグインã¯ã™ã¹ã¦ `plugins/sub_plugins/cli_parse` ディレクトリーã«ç½®ã‹ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:222 msgid "floating_ip - ``name`` is required for assigning a new floating IP." msgstr "floating_ip - æ–°ã—ã„ Floating IP アドレスã®å‰²ã‚Šå½“ã¦ã«ã¯ ``name`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:227 msgid "If you use Ansible 2.9 and the Google cloud plugins or modules from this collection, community.general 2.0.0 results in errors when trying to use the Google cloud content by FQCN, like ``community.general.gce_img``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.google.gce_img`` for the previous example) and to make sure that you have ``community.google`` installed." msgstr "Ansible 2.9 ã¨ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® Google Cloud プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.gce_img`` ã®ã‚ˆã†ã« FQCN ã§ Google Cloud コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``community.google.gce_img``) を使用ã™ã‚‹ãŸã‚ã« Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã—ã€``community.google`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:230 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install the ``community.google`` or ``google.cloud`` collections if you are using any of the Google cloud plugins or modules. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (such as community.google) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ãŸå ´åˆã€Google cloud プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.google`` コレクションã¾ãŸã¯ ``google.cloud`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.google ãªã©) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:232 msgid "If you use Ansible 2.9 and the Kubevirt plugins or modules from this collection, community.general 2.0.0 results in errors when trying to use the Kubevirt content by FQCN, like ``community.general.kubevirt_vm``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.kubevirt.kubevirt_vm`` for the previous example) and to make sure that you have ``community.kubevirt`` installed." msgstr "Ansible 2.9 ã¨ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® Kubevirt プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.kubevirt_vm`` ã®ã‚ˆã†ãª FQCN ã«ã‚ˆã‚‹ Kubevirt コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN を使用ã™ã‚‹ãŸã‚ã« Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (å‰è¿°ã®ä¾‹ã§ã¯ ``community.kubevirt.kubevirt_vm``)。ã¾ãŸã€``community.kubevirt`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:235 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install the ``community.kubevirt`` collection if you are using any of the Kubevirt plugins or modules. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (such as community.google) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€Kubevirt プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.kubevirt`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.google ãªã©) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:237 msgid "If you use Ansible 2.9 and the ``docker`` plugins or modules from this collections, community.general 2.0.0 results in errors when trying to use the docker content by FQCN, like ``community.general.docker_container``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.docker.docker_container`` for the previous example) and to make sure that you have ``community.docker`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``docker`` プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.docker_container`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ docker コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``community.docker.docker_container``) を使用ã—ã€``community.docker`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:240 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install ``community.docker`` if you are using any of the ``docker`` plugins or modules. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (community.docker) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ãŸå ´åˆã€``docker`` プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.docker`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.docker) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:242 msgid "If you use Ansible 2.9 and the ``hashi_vault`` lookup plugin from this collections, community.general 2.0.0 results in errors when trying to use the Hashi Vault content by FQCN, like ``community.general.hashi_vault``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your inventories, variable files, playbooks and roles manually to use the new FQCN (``community.hashi_vault.hashi_vault``) and to make sure that you have ``community.hashi_vault`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``hashi_vault`` lookup プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.hashi_vault`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ Hashi Vault コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (``community.hashi_vault.hashi_vault``) を使用ã—ã€``community.hashi_vault`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€å¤‰æ•°ãƒ•ァイルã€Playbookã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:245 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install ``community.hashi_vault`` if you are using the ``hashi_vault`` plugin. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (community.hashi_vault) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``hashi_vault`` プラグインを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.hashi_vault`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.hashi_vault) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:247 msgid "If you use Ansible 2.9 and the ``hetzner`` modules from this collections, community.general 2.0.0 results in errors when trying to use the hetzner content by FQCN, like ``community.general.hetzner_firewall``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.hrobot.firewall`` for the previous example) and to make sure that you have ``community.hrobot`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``hetzner`` プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.hetzner_firewall`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ hetzner コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``community.hrobot.firewall``) を使用ã—ã€``community.hrobot`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:250 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install ``community.hrobot`` if you are using any of the ``hetzner`` modules. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (community.hrobot) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ãŸå ´åˆã€``hetzner`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.hrobot`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.hrobot) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:252 msgid "If you use Ansible 2.9 and the ``oc`` connection plugin from this collections, community.general 2.0.0 results in errors when trying to use the oc content by FQCN, like ``community.general.oc``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your inventories, variable files, playbooks and roles manually to use the new FQCN (``community.okd.oc``) and to make sure that you have ``community.okd`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``oc`` connection プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.oc`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ oc コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (``community.okd.oc``) を使用ã—ã€``community.okd`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€å¤‰æ•°ãƒ•ァイルã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:255 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install ``community.okd`` if you are using the ``oc`` plugin. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (community.okd) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``oc`` プラグインを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.okd`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.okd) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:257 msgid "If you use Ansible 2.9 and the ``postgresql`` modules from this collections, community.general 2.0.0 results in errors when trying to use the postgresql content by FQCN, like ``community.general.postgresql_info``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.postgresql.postgresql_info`` for the previous example) and to make sure that you have ``community.postgresql`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``postgresql`` プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 2.0.0 ã§ã¯ã€``community.general.postgresql_info`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ postgresql コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``community.postgresql.postgresql_info``) を使用ã—ã€``community.postgresql`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:260 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install ``community.postgresql`` if you are using any of the ``postgresql`` modules. While ansible-base 2.10 or newer can use the redirects that community.general 2.0.0 adds, the collection they point to (community.postgresql) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``postgresql`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.postgresql`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.postgresql) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:262 #: ../../rst/porting_guides/porting_guide_3.rst:493 msgid "The Google cloud inventory script ``gce.py`` has been migrated to the ``community.google`` collection. Install the ``community.google`` collection in order to continue using it." msgstr "Google クラウドインベントリースクリプト ``gce.py`` ã‚’ ``community.google`` コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚使用を継続ã™ã‚‹ã«ã¯ã€``community.google`` コレクションをインストールã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:263 msgid "archive - remove path folder itself when ``remove`` parameter is true (https://github.com/ansible-collections/community.general/issues/1041)." msgstr "archive - ``remove`` パラメーター㌠true ã®å ´åˆã«ãƒ‘スフォルダー自体を削除ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/issues/1041)。" #: ../../rst/porting_guides/porting_guide_3.rst:265 msgid "passwordstore lookup plugin - now parsing a password store entry as YAML if possible, skipping the first line (which by convention only contains the password and nothing else). If it cannot be parsed as YAML, the old ``key: value`` parser will be used to process the entry. Can break backwards compatibility if YAML formatted code was parsed in a non-YAML interpreted way, e.g. ``foo: [bar, baz]`` will become a list with two elements in the new version, but a string ``'[bar, baz]'`` in the old (https://github.com/ansible-collections/community.general/issues/1673)." msgstr "passwordstore lookup プラグイン - パスワードストアã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’å¯èƒ½ãªé™ã‚Š YAML ã¨ã—ã¦è§£æžã™ã‚‹ã‚ˆã†ã«ãªã‚Šã€æœ€åˆã®è¡Œ (慣例ã§ã¯ãƒ‘スワードã®ã¿ã‚’å«ã¿ã€ä»–ã«ã¯ä½•ã‚‚ãªã„) をスキップã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚YAML ã¨ã—ã¦è§£æžã§ããªã„å ´åˆã¯ã€å¤ã„ ``key: value`` パーサーãŒã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®å‡¦ç†ã«ä½¿ç”¨ã•れã¾ã™ã€‚YAML å½¢å¼ã®ã‚³ãƒ¼ãƒ‰ãŒ YAML ã§ã¯ãªã„解釈方法ã§è§£æžã•れãŸå ´åˆã¯ã€ä¸‹ä½äº’æ›æ€§ã‚’失ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``foo: [bar, baz]`` ã¯æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ 2 ã¤ã®è¦ç´ ã‚’æŒã¤ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ãŒã€æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ–‡å­—列 ``'[bar, baz]'`` ã«ãªã‚Šã¾ã™ (https://github.com/ansible-collections/community.general/issues/1673)。" #: ../../rst/porting_guides/porting_guide_3.rst:268 msgid "proxmox_kvm - recognize ``force=yes`` in conjunction with ``state=absent`` to forcibly remove a running VM (https://github.com/ansible-collections/community.general/pull/849)." msgstr "proxmox_kvm - ``force=yes`` ã‚’ ``state=absent`` ã¨ä½µç”¨ã—ã¦ã€å®Ÿè¡Œä¸­ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’強制的ã«å‰Šé™¤ã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/849)。" #: ../../rst/porting_guides/porting_guide_3.rst:284 msgid "If you use Ansible 2.9 and the FortiOS modules from this collection, community.network 2.0.0 results in errors when trying to use the FortiOS content by FQCN, like ``community.network.fmgr_device``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.fortios.fmgr_device`` for the previous example) and to make sure that you have ``community.fortios`` installed." msgstr "ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® Ansible 2.9 㨠FortiOS モジュールを使用ã™ã‚‹å ´åˆã¯ã€community.network 2.0.0 を使用ã™ã‚‹ã¨ã€FQCN ã§ ``community.network.fmgr_device`` ã®ã‚ˆã†ãª FortiOS コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN を使用ã—ã€``community.fortios`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã®ã‚’確èªã™ã‚‹ã«ã¯ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (å‰ã®ä¾‹ã® ``community.fortios.fmgr_device``)。" #: ../../rst/porting_guides/porting_guide_3.rst:287 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.network manually, you need to make sure to also install ``community.fortios`` if you are using any of the FortiOS modules. While ansible-base 2.10 or newer can use the redirects that community.network 2.0.0 adds, the collection they point to (community.fortios) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.network をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ãŸå ´åˆã€FortiOS モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.fortios`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.network 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.fortios) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:289 msgid "If you use Ansible 2.9 and the ``cp_publish`` module from this collection, community.network 2.0.0 results in errors when trying to use the module by FQCN, i.e. ``community.network.cp_publish``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``check_point.mgmt.cp_mgmt_publish``) and to make sure that you have ``check_point.mgmt`` installed. If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.network manually, you need to make sure to also install ``check_point.mgmt`` if you are using the ``cp_publish`` module. While ansible-base 2.10 or newer can use the redirects that community.network 2.0.0 adds, the collection they point to (check_point.mgmt) must be installed for them to work." msgstr "Ansible 2.9 ã¨ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``cp_publish`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.network 2.0.0 ã§ã¯ã€FQCN ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ (``community.network.cp_publish``)。Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (``check_point.mgmt.cp_mgmt_publish``) を使用ã—ã€``check_point.mgmt`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€community.network を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``cp_publish`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``check_point.mgmt`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ community.network 2.0.0 ãŒè¿½åŠ ã™ã‚‹ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (check_point.mgmt) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:291 msgid "If you use Ansible 2.9 and the ``fortimanager`` httpapi plugin from this collection, community.network 2.0.0 results in errors when trying to use it by FQCN (``community.network.fortimanager``). Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCN ``fortinet.fortimanager.fortimanager`` and to make sure that you have ``fortinet.fortimanager`` installed." msgstr "Ansible 2.9 ã¨ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``fortimanager`` httpapi プラグインを使用ã—ã¦ã„ã‚‹å ´åˆã€community.network 2.0.0 ã§ã¯ã€FQCN (``community.network.fortimanager``) ã§ä½¿ç”¨ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN ``fortinet.fortimanager.fortimanager`` を使用ã—ã€``fortinet.fortimanager`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:294 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.network manually, you need to make sure to also install ``fortinet.fortimanager`` if you are using the ``fortimanager`` httpapi plugin. While ansible-base 2.10 or newer can use the redirect that community.network 2.0.0 adds, the collection they point to (fortinet.fortimanager) must be installed for it to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.network をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``fortimanager`` httpapi プラグインを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``fortinet.fortimanager`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.network 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (fortinet.fortimanager) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:296 msgid "If you use Ansible 2.9 and the ``nso`` modules from this collection, community.network 2.0.0 results in errors when trying to use the nso content by FQCN, like ``community.network.nso_config``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``cisco.nso.nso_config`` for the previous example) and to make sure that you have ``cisco.nso`` installed." msgstr "Ansible 2.9 ã¨ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``nso`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.network 2.0.0 ã§ã¯ã€``community.network.nso_config`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ nso コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯``cisco.nso.nso_config``) を使用ã—ã€``cisco.nso`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:299 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.network manually, you need to make sure to also install ``cisco.nso`` if you are using any of the ``nso`` modules. While ansible-base 2.10 or newer can use the redirects that community.network 2.0.0 adds, the collection they point to (cisco.nso) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.network をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``nso`` モジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``cisco.nso`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.network 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (cisco.nso) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:301 msgid "If you use Ansible 2.9 and the ``routeros`` plugins or modules from this collections, community.network 2.0.0 results in errors when trying to use the routeros content by FQCN, like ``community.network.routeros_command``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``community.routeros.command`` for the previous example) and to make sure that you have ``community.routeros`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® ``routeros`` プラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.network 2.0.0 ã§ã¯ã€``community.network.routeros_command`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ routeros コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``community.routeros.command``) を使用ã—ã€``community.routeros`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:304 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 3.0.0, but installed (and/or upgraded) community.network manually, you need to make sure to also install ``community.routeros`` if you are using any of the ``routeros`` plugins or modules. While ansible-base 2.10 or newer can use the redirects that community.network 2.0.0 adds, the collection they point to (community.routeros) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 3.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.network をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€``routeros`` プラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.routeros`` もインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.network 2.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (community.routeros) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_3.rst:306 msgid "cnos_static_route - move ipaddress import from ansible.netcommon to builtin or package before ipaddress is removed from ansible.netcommon. You need to make sure to have the ipaddress package installed if you are using this module on Python 2.7 (https://github.com/ansible-collections/community.network/pull/129)." msgstr "cnos_static_route - ansible.netcommon ã‹ã‚‰ ipaddress ãŒå‰Šé™¤ã•れるå‰ã«ã€ansible.netcommon ã‹ã‚‰ ipaddress ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’ビルドインã¾ãŸã¯ãƒ‘ッケージã«ç§»å‹•ã—ã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ Python 2.7 ã§ä½¿ã†å ´åˆã¯ã€ipaddress パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (https://github.com/ansible-collections/community.network/pull/129)。" #: ../../rst/porting_guides/porting_guide_3.rst:311 msgid "os10_bgp - Changed \"subnet\" key as list format instead of dictionary format under \"listen\" key to support multiple neighbor prefix for listen command" msgstr "os10_bgp - listen コマンドã®è¤‡æ•°ã® neighbor 接頭辞をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€ã€Œlistenã€ã‚­ãƒ¼ã®ã€Œsubnetã€ã‚­ãƒ¼ã‚’ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å½¢å¼ã‹ã‚‰ãƒªã‚¹ãƒˆå½¢å¼ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:312 msgid "os10_bgp - Changed \"vrf\" key as list format instead of dictionary format to supprot multiple VRF in router BGP and changed the \"vrf\" key name to \"vrfs\"" msgstr "os10_bgp - ルーター BGP ã§è¤‡æ•°ã® VRF をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€ã€Œvrfã€ã‚­ãƒ¼ã‚’ディクショナリー形å¼ã§ã¯ãªãリスト形å¼ã«å¤‰æ›´ã—ã€ã€Œvrfã€ã‚­ãƒ¼ã®åå‰ã‚’「vrfsã€ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:315 msgid "ngine_io.cloudstack" msgstr "ngine_io.cloudstack" #: ../../rst/porting_guides/porting_guide_3.rst:317 msgid "Authentication option using INI files e.g. ``cloudstack.ini`` has been removed. The only supported option to authenticate is by using the module params with fallback to the ENV variables." msgstr "INI ファイル (例: ``cloudstack.ini``) を使用ã—ãŸèªè¨¼ã‚ªãƒ—ションã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚ç¾åœ¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹èªè¨¼æ–¹æ³•ã¯ã€ENV 変数ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターを使用ã™ã‚‹æ–¹æ³•ã®ã¿ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:318 msgid "default zone deprecation - The `zone` param default value, across multiple modules, has been deprecated due to unreliable API (https://github.com/ngine-io/ansible-collection-cloudstack/pull/62)." msgstr "デフォルトゾーンãŒéžæŽ¨å¥¨ã«ãªã‚‹ - API ã®ä¿¡é ¼æ€§ãŒä½Žã„ãŸã‚ã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«é–“ã§ `zone` パラメーターã®ãƒ‡ãƒ•ォルト値ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—㟠(https://github.com/ngine-io/ansible-collection-cloudstack/pull/62)。" #: ../../rst/porting_guides/porting_guide_3.rst:324 msgid "cisco.aci" msgstr "cisco.aci" #: ../../rst/porting_guides/porting_guide_3.rst:326 msgid "Change certificate_name to name in aci_aaa_user_certificate module for query operation" msgstr "クエリーæ“作㮠certificate_name ã®åå‰ã‚’ aci_aaa_user_certificate モジュールã®åå‰ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:331 msgid "For community.general 3.0.0, the ``ome_device_info``, ``idrac_firmware`` and ``idrac_server_config_profile`` modules will be moved to the `dellemc.openmanage `_ collection. A redirection will be inserted so that users using ansible-base 2.10 or newer do not have to change anything." msgstr "community.general 3.0.0 ã®å ´åˆã€``ome_device_info`` モジュールã€``idrac_firmware`` モジュールã€ãŠã‚ˆã³ ``idrac_server_config_profile`` モジュール㯠`dellemc.openmanage `_ コレクションã«ç§»å‹•ã—ã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„るユーザーãŒä½•も変更ã™ã‚‹å¿…è¦ãŒãªã„よã†ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’挿入ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:334 msgid "If you use Ansible 2.9 and explicitly use the DellEMC modules mentioned above from this collection, you will need to adjust your playbooks and roles to use FQCNs starting with ``dellemc.openmanage.`` instead of ``community.general.``, for example replace ``community.general.ome_device_info`` in a task by ``dellemc.openmanage.ome_device_info``." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ä¸Šè¨˜ã® DellEMC モジュールを明示的ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’ ``community.general.`` ã§ã¯ãªã ``dellemc.openmanage.`` ã§å§‹ã¾ã‚‹ FQCN を使用ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (例: ``dellemc.openmanage.ome_device_info`` ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã§ ``community.general.ome_device_info`` ã‚’ç½®ãæ›ãˆã¾ã™)。" #: ../../rst/porting_guides/porting_guide_3.rst:337 msgid "If you use ansible-base and installed ``community.general`` manually and rely on the DellEMC modules mentioned above, you have to make sure to install the ``dellemc.openmanage`` collection as well. If you are using FQCNs, for example ``community.general.ome_device_info`` instead of ``ome_device_info``, it will continue working, but we still recommend to adjust the FQCNs as well." msgstr "ansible-base を使用ã—㦠``community.general`` を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€ä¸Šè¨˜ã® DellEMC モジュールã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€``dellemc.openmanage`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã€ãŸã¨ãˆã° ``ome_device_info`` ã®ä»£ã‚り㫠``community.general.ome_device_info`` を使用ã—ã¦ã„ã‚‹å ´åˆã€å‹•作ã¯ç¶™ç¶šã•れã¾ã™ãŒã€ã“ã® FQCN も調整ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:339 msgid "The community.general collection no longer depends on the ansible.netcommon collection (https://github.com/ansible-collections/community.general/pull/1561)." msgstr "community.general コレクションã¯ã€ansible.netcommon コレクションã«ä¾å­˜ã—ãªããªã‚Šã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1561)。" #: ../../rst/porting_guides/porting_guide_3.rst:362 msgid "Removed the existing deprecated modules." msgstr "既存ã®éžæŽ¨å¥¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除。" #: ../../rst/porting_guides/porting_guide_3.rst:363 msgid "Standardization of ten iDRAC ansible modules based on ansible guidelines." msgstr "Ansible ガイドラインã«åŸºã¥ã 10 個㮠iDRAC Ansible ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¨™æº–化。" #: ../../rst/porting_guides/porting_guide_3.rst:364 msgid "Support for OpenManage Enterprise Modular." msgstr "OpenManage Enterprise Modular ã®ã‚µãƒãƒ¼ãƒˆã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:369 msgid "os10_bgp - Enhanced router bgp keyword support for non-default vrf which are supported for default vrf and additional keyword to support both default and non-default vrf" msgstr "os10_bgp - デフォルト vrf ã«å¯¾å¿œã—ã¦ã„ã‚‹éžãƒ‡ãƒ•ォルト vrf 用ã®ãƒ«ãƒ¼ã‚¿ãƒ¼ bgp キーワードã®ã‚µãƒãƒ¼ãƒˆã‚’強化ã—ã€ãƒ‡ãƒ•ォルトãŠã‚ˆã³éžãƒ‡ãƒ•ォルト㮠vrf ã®ä¸¡æ–¹ã«å¯¾å¿œã™ã‚‹ãŸã‚ã®è¿½åŠ ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’è¿½åŠ ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:370 msgid "os10_snmp role - Added support for snmp V3 features in community, group, host, engineID" msgstr "os10_snmp role - コミュニティーã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãƒ›ã‚¹ãƒˆã€engineID ã«ãŠã‘ã‚‹ snmp V3 機能ã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:380 msgid "kubernetes.core" msgstr "kubernetes.core" #: ../../rst/porting_guides/porting_guide_3.rst:382 msgid "Add changelog and fragments and document changelog process (https://github.com/ansible-collections/kubernetes.core/pull/131)." msgstr "変更ログãŠã‚ˆã³ãƒ•ラグメントを追加ã—ã€å¤‰æ›´ãƒ­ã‚°ãƒ—ロセスを文書化ã—ã¾ã™ (https://github.com/ansible-collections/kubernetes.core/pull/131)。" #: ../../rst/porting_guides/porting_guide_3.rst:383 msgid "helm - New module for managing Helm charts (https://github.com/ansible-collections/kubernetes.core/pull/61)." msgstr "helm - Helm ãƒãƒ£ãƒ¼ãƒˆç®¡ç†ç”¨ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/kubernetes.core/pull/61)。" #: ../../rst/porting_guides/porting_guide_3.rst:384 msgid "helm_info - New module for retrieving Helm chart information (https://github.com/ansible-collections/kubernetes.core/pull/61)." msgstr "helm_info - Helm ãƒãƒ£ãƒ¼ãƒˆæƒ…報をå–å¾—ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/kubernetes.core/pull/61)。" #: ../../rst/porting_guides/porting_guide_3.rst:385 msgid "helm_plugin - new module to manage Helm plugins (https://github.com/ansible-collections/kubernetes.core/pull/154)." msgstr "helm_plugin - Helm プラグインを管ç†ã™ã‚‹æ–°ã—ã„モジュール (https://github.com/ansible-collections/kubernetes.core/pull/154)。" #: ../../rst/porting_guides/porting_guide_3.rst:386 msgid "helm_plugin_info - new modules to gather information about Helm plugins (https://github.com/ansible-collections/kubernetes.core/pull/154)." msgstr "helm_plugin_info - Helm プラグインã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹æ–°ã—ã„モジュール (https://github.com/ansible-collections/kubernetes.core/pull/154)。" #: ../../rst/porting_guides/porting_guide_3.rst:387 msgid "helm_repository - New module for managing Helm repositories (https://github.com/ansible-collections/kubernetes.core/pull/61)." msgstr "helm_repository - Helm リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’管ç†ã™ã‚‹ãŸã‚ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/kubernetes.core/pull/61)。" #: ../../rst/porting_guides/porting_guide_3.rst:388 msgid "k8s - Add support for template parameter (https://github.com/ansible-collections/kubernetes.core/pull/230)." msgstr "k8s - テンプレートパラメーターã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã™ (https://github.com/ansible-collections/kubernetes.core/pull/230)。" #: ../../rst/porting_guides/porting_guide_3.rst:392 msgid "k8s_* - Add support for vaulted kubeconfig and src (https://github.com/ansible-collections/kubernetes.core/pull/193)." msgstr "k8s_* - Vault 済㿠kubeconfig ãŠã‚ˆã³ src ã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã™ (https://github.com/ansible-collections/kubernetes.core/pull/193)。" #: ../../rst/porting_guides/porting_guide_3.rst:395 msgid "k8s_exec - New module for executing commands on pods via Kubernetes API (https://github.com/ansible-collections/kubernetes.core/pull/14)." msgstr "k8s_exec - Kubernetes API を使用ã—㦠Pod ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/kubernetes.core/pull/14)。" #: ../../rst/porting_guides/porting_guide_3.rst:396 msgid "k8s_exec - Return rc for the command executed (https://github.com/ansible-collections/kubernetes.core/pull/158)." msgstr "k8s_exec - 実行ã—ãŸã‚³ãƒžãƒ³ãƒ‰ã® rc ã‚’è¿”ã—ã¾ã™ (https://github.com/ansible-collections/kubernetes.core/pull/158)。" #: ../../rst/porting_guides/porting_guide_3.rst:398 msgid "k8s_log - New module for retrieving pod logs (https://github.com/ansible-collections/kubernetes.core/pull/16)." msgstr "k8s_log - Pod ログをå–å¾—ã™ã‚‹æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (https://github.com/ansible-collections/kubernetes.core/pull/16)。" #: ../../rst/porting_guides/porting_guide_3.rst:469 msgid "All Google cloud modules and plugins have now been migrated away from this collection. They can be found in either the `community.google `_ or `google.cloud `_ collections. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "Google クラウドモジュールãŠã‚ˆã³ãƒ—ラグインã¯ã™ã¹ã¦ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰ç§»è¡Œã•れã¾ã—ãŸã€‚ã“れら㯠`community.google `_ コレクションã¾ãŸã¯ `google.cloud `_ コレクションã«ã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:473 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.gce_img`` → ``community.google.gce_img``) and make sure to install the community.google or google.cloud collections as appropriate." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN を調整 (``community.general.gce_img`` →``community.google.gce_img``) ã—ã€å¿…è¦ã«å¿œã˜ã¦ community.google コレクションã¾ãŸã¯ google.cloud collections コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:474 msgid "All Kubevirt modules and plugins have now been migrated from community.general to the `community.kubevirt `_ Ansible collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® Kubevirt モジュールãŠã‚ˆã³ãƒ—ラグインã¯ã€community.general ã‹ã‚‰ `community.kubevirt `_ Ansibleコレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:477 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.kubevirt_vm`` → ``community.kubevirt.kubevirt_vm``) and make sure to install the community.kubevirt collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.kubevirt_vm`` →``community.kubevirt.kubevirt_vm``) を調整ã—ã€community.kubevirt コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:478 msgid "All ``docker`` modules and plugins have been removed from this collection. They have been migrated to the `community.docker `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® ``docker`` モジュールã¨ãƒ—ラグインãŒã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`community.docker `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:482 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.docker_container`` → ``community.docker.docker_container``) and make sure to install the community.docker collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.docker_container`` →``community.docker.docker_container``) を調整ã—ã€community.docker コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:483 msgid "All ``hetzner`` modules have been removed from this collection. They have been migrated to the `community.hrobot `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® ``hetzner`` モジュールãŒã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`community.hrobot `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:487 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.hetzner_firewall`` → ``community.hrobot.firewall``) and make sure to install the community.hrobot collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.hetzner_firewall`` →``community.hrobot.firewall``) を調整ã—ã€community.hrobot コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:488 msgid "All ``postgresql`` modules have been removed from this collection. They have been migrated to the `community.postgresql `_ collection." msgstr "ã™ã¹ã¦ã® ``postgresql`` モジュールã¯ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`community.postgresql `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:491 msgid "If you use ansible-base 2.10 or newer, redirections have been provided. If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.postgresql_info`` → ``community.postgresql.postgresql_info``) and make sure to install the community.postgresql collection." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.postgresql_info`` →``community.postgresql.postgresql_info``) を調整ã—ã€å¿…è¦ã«å¿œã˜ã¦ community.postgresql コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:494 msgid "The ``hashi_vault`` lookup plugin has been removed from this collection. It has been migrated to the `community.hashi_vault `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "``hashi_vault`` lookup プラグインã¯ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れ㯠`community.hashi_vault `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:498 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.hashi_vault`` → ``community.hashi_vault.hashi_vault``) and make sure to install the community.hashi_vault collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.hashi_vault`` →``community.hashi_vault.hashi_vault``) を調整ã—ã€community.hashi_vault コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:499 msgid "The ``oc`` connection plugin has been removed from this collection. It has been migrated to the `community.okd `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "``oc`` connection プラグインã¯ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れ㯠`community.okd `_ コレクションã«ç§»è¡Œã•れã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:503 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.oc`` → ``community.okd.oc``) and make sure to install the community.okd collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.oc`` →``community.okd.oc``) を調整ã—ã€community.okd コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:504 msgid "The deprecated ``actionable`` callback plugin has been removed. Use the ``ansible.builtin.default`` callback plugin with ``display_skipped_hosts = no`` and ``display_ok_hosts = no`` options instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``actionable`` コールãƒãƒƒã‚¯ãƒ—ラグインãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚りã«ã€``ansible.builtin.default`` コールãƒãƒƒã‚¯ãƒ—ラグインを ``display_skipped_hosts = no`` オプションãŠã‚ˆã³ ``display_ok_hosts = no`` オプションã¨ä¸€ç·’ã«ä½¿ç”¨ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:505 msgid "The deprecated ``foreman`` module has been removed. Use the modules from the theforeman.foreman collection instead (https://github.com/ansible-collections/community.general/pull/1347) (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``foreman`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠theforeman.foreman コレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347) (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:506 msgid "The deprecated ``full_skip`` callback plugin has been removed. Use the ``ansible.builtin.default`` callback plugin with ``display_skipped_hosts = no`` option instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``full_skip`` コールãƒãƒƒã‚¯ãƒ—ラグインãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚りã«ã€``ansible.builtin.default`` コールãƒãƒƒã‚¯ãƒ—ラグインを ``display_skipped_hosts = no`` オプションã¨ä¸€ç·’ã«ä½¿ç”¨ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:507 msgid "The deprecated ``gcdns_record`` module has been removed. Use ``google.cloud.gcp_dns_resource_record_set`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcdns_record`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_dns_resource_record_set`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:508 msgid "The deprecated ``gcdns_zone`` module has been removed. Use ``google.cloud.gcp_dns_managed_zone`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcdns_zone`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_dns_managed_zone`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:509 msgid "The deprecated ``gce`` module has been removed. Use ``google.cloud.gcp_compute_instance`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gce`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_instance`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:510 msgid "The deprecated ``gcp_backend_service`` module has been removed. Use ``google.cloud.gcp_compute_backend_service`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcp_backend_service`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_backend_service`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:511 msgid "The deprecated ``gcp_forwarding_rule`` module has been removed. Use ``google.cloud.gcp_compute_forwarding_rule`` or ``google.cloud.gcp_compute_global_forwarding_rule`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcp_forwarding_rule`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_forwarding_rule`` ã¾ãŸã¯ ``google.cloud.gcp_compute_global_forwarding_rule`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:512 msgid "The deprecated ``gcp_healthcheck`` module has been removed. Use ``google.cloud.gcp_compute_health_check``, ``google.cloud.gcp_compute_http_health_check`` or ``google.cloud.gcp_compute_https_health_check`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcp_healthcheck`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_health_check``ã€``google.cloud.gcp_compute_http_health_check``ã€ã¾ãŸã¯ ``google.cloud.gcp_compute_https_health_check`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:513 msgid "The deprecated ``gcp_target_proxy`` module has been removed. Use ``google.cloud.gcp_compute_target_http_proxy`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcp_target_proxy`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_target_http_proxy`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:514 msgid "The deprecated ``gcp_url_map`` module has been removed. Use ``google.cloud.gcp_compute_url_map`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcp_url_map`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_compute_url_map`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:515 msgid "The deprecated ``gcspanner`` module has been removed. Use ``google.cloud.gcp_spanner_database`` and/or ``google.cloud.gcp_spanner_instance`` instead (https://github.com/ansible-collections/community.general/pull/1370)." msgstr "éžæŽ¨å¥¨ã® ``gcspanner`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``google.cloud.gcp_spanner_database`` ã‚„ ``google.cloud.gcp_spanner_instance`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1370)。" #: ../../rst/porting_guides/porting_guide_3.rst:516 msgid "The deprecated ``github_hooks`` module has been removed. Use ``community.general.github_webhook`` and ``community.general.github_webhook_info`` instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``github_hooks`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``community.general.github_webhook`` ãŠã‚ˆã³ ``community.general.github_webhook_info`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:517 msgid "The deprecated ``katello`` module has been removed. Use the modules from the theforeman.foreman collection instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``katello`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠theforeman.foreman コレクションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:518 msgid "The deprecated ``na_cdot_aggregate`` module has been removed. Use netapp.ontap.na_ontap_aggregate instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_aggregate`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_aggregate を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:519 msgid "The deprecated ``na_cdot_license`` module has been removed. Use netapp.ontap.na_ontap_license instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_license`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_license を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:520 msgid "The deprecated ``na_cdot_lun`` module has been removed. Use netapp.ontap.na_ontap_lun instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_lun`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_lun を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:521 msgid "The deprecated ``na_cdot_qtree`` module has been removed. Use netapp.ontap.na_ontap_qtree instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_qtree`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_qtree を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:522 msgid "The deprecated ``na_cdot_svm`` module has been removed. Use netapp.ontap.na_ontap_svm instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_svm`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_svm を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:523 msgid "The deprecated ``na_cdot_user_role`` module has been removed. Use netapp.ontap.na_ontap_user_role instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_user_role`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_user_role を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:524 msgid "The deprecated ``na_cdot_user`` module has been removed. Use netapp.ontap.na_ontap_user instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_user`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_user を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:525 msgid "The deprecated ``na_cdot_volume`` module has been removed. Use netapp.ontap.na_ontap_volume instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``na_cdot_volume`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_volume を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:526 msgid "The deprecated ``sf_account_manager`` module has been removed. Use netapp.elementsw.na_elementsw_account instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``sf_account_manager`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.elementsw.na_elementsw_account を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:527 msgid "The deprecated ``sf_check_connections`` module has been removed. Use netapp.elementsw.na_elementsw_check_connections instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``sf_check_connections`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.elementsw.na_elementsw_check_connections を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:528 msgid "The deprecated ``sf_snapshot_schedule_manager`` module has been removed. Use netapp.elementsw.na_elementsw_snapshot_schedule instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``sf_snapshot_schedule_manager`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.elementsw.na_elementsw_snapshot_schedule を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:529 msgid "The deprecated ``sf_volume_access_group_manager`` module has been removed. Use netapp.elementsw.na_elementsw_access_group instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``sf_volume_access_group_manager`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.elementsw.na_elementsw_access_group を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:530 msgid "The deprecated ``sf_volume_manager`` module has been removed. Use netapp.elementsw.na_elementsw_volume instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``sf_volume_manager`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.elementsw.na_elementsw_volume を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:531 msgid "The deprecated ``stderr`` callback plugin has been removed. Use the ``ansible.builtin.default`` callback plugin with ``display_failed_stderr = yes`` option instead (https://github.com/ansible-collections/community.general/pull/1347)." msgstr "éžæŽ¨å¥¨ã® ``stderr`` コールãƒãƒƒã‚¯ãƒ—ラグインãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚りã«ã€``ansible.builtin.default`` コールãƒãƒƒã‚¯ãƒ—ラグインを ``display_failed_stderr = yes`` オプションã¨ä¸€ç·’ã«ä½¿ç”¨ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1347)。" #: ../../rst/porting_guides/porting_guide_3.rst:532 msgid "The redirect of the ``conjur_variable`` lookup plugin to ``cyberark.conjur.conjur_variable`` collection was removed (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``conjur_variable`` ルックアッププラグイン㮠``cyberark.conjur.conjur_variable`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:533 msgid "The redirect of the ``firewalld`` module and the ``firewalld`` module_utils to the ``ansible.posix`` collection was removed (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``firewalld`` モジュールãŠã‚ˆã³ ``firewalld`` module_utils ã® ``ansible.posix`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:534 msgid "The redirect to the ``community.digitalocean`` collection was removed for: the ``digital_ocean`` doc fragment, the ``digital_ocean`` module_utils, and the following modules: ``digital_ocean``, ``digital_ocean_account_facts``, ``digital_ocean_account_info``, ``digital_ocean_block_storage``, ``digital_ocean_certificate``, ``digital_ocean_certificate_facts``, ``digital_ocean_certificate_info``, ``digital_ocean_domain``, ``digital_ocean_domain_facts``, ``digital_ocean_domain_info``, ``digital_ocean_droplet``, ``digital_ocean_firewall_facts``, ``digital_ocean_firewall_info``, ``digital_ocean_floating_ip``, ``digital_ocean_floating_ip_facts``, ``digital_ocean_floating_ip_info``, ``digital_ocean_image_facts``, ``digital_ocean_image_info``, ``digital_ocean_load_balancer_facts``, ``digital_ocean_load_balancer_info``, ``digital_ocean_region_facts``, ``digital_ocean_region_info``, ``digital_ocean_size_facts``, ``digital_ocean_size_info``, ``digital_ocean_snapshot_facts``, ``digital_ocean_snapshot_info``, ``digital_ocean_sshkey``, ``digital_ocean_sshkey_facts``, ``digital_ocean_sshkey_info``, ``digital_ocean_tag``, ``digital_ocean_tag_facts``, ``digital_ocean_tag_info``, ``digital_ocean_volume_facts``, ``digital_ocean_volume_info`` (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``community.digitalocean`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れãŸã®ã¯ã€``digital_ocean`` ドキュメントã®ãƒ•ラグメントã€``digital_ocean`` module_utilsã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``digital_ocean``ã€``digital_ocean_account_facts``ã€``digital_ocean_account_info``ã€``digital_ocean_block_storage``ã€``digital_ocean_certificate``ã€``digital_ocean_certificate_facts``ã€``digital_ocean_certificate_info``ã€``digital_ocean_domain``ã€``digital_ocean_domain_facts``ã€``digital_ocean_domain_info``ã€``digital_ocean_droplet``ã€``digital_ocean_firewall_facts``ã€``digital_ocean_firewall_info``ã€``digital_ocean_floating_ip``ã€``digital_ocean_floating_ip_facts``ã€``digital_ocean_floating_ip_info``ã€``digital_ocean_image_facts``ã€``digital_ocean_image_info``ã€``digital_ocean_load_balancer_facts``ã€``digital_ocean_load_balancer_info``ã€``digital_ocean_region_facts``ã€``digital_ocean_region_info``ã€``digital_ocean_size_facts``ã€``digital_ocean_size_info``ã€``digital_ocean_snapshot_facts``ã€``digital_ocean_snapshot_info``ã€``digital_ocean_sshkey``ã€``digital_ocean_sshkey_facts``ã€``digital_ocean_sshkey_info``ã€``digital_ocean_tag``ã€``digital_ocean_tag_facts``ã€``digital_ocean_tag_info``ã€``digital_ocean_volume_facts``ã€``digital_ocean_volume_info`` ã§ã™ (https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:535 msgid "The redirect to the ``community.mysql`` collection was removed for: the ``mysql`` doc fragment, the ``mysql`` module_utils, and the following modules: ``mysql_db``, ``mysql_info``, ``mysql_query``, ``mysql_replication``, ``mysql_user``, ``mysql_variables`` (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``community.mysql`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れãŸã®ã¯ã€``mysql`` ドキュメントã®ãƒ•ラグメントã€``mysql`` module_utilsã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``mysql_db``ã€``mysql_info``ã€``mysql_query``ã€``mysql_replication``ã€``mysql_user``ã€``mysql_variables`` ã§ã™ (https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:536 msgid "The redirect to the ``community.proxysql`` collection was removed for: the ``proxysql`` doc fragment, and the following modules: ``proxysql_backend_servers``, ``proxysql_global_variables``, ``proxysql_manage_config``, ``proxysql_mysql_users``, ``proxysql_query_rules``, ``proxysql_replication_hostgroups``, ``proxysql_scheduler`` (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``proxysql`` doc フラグメントã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``proxysql_backend_servers``ã€``proxysql_global_variables``ã€``proxysql_manage_config``ã€``proxysql_mysql_users``ã€``proxysql_query_rules``ã€``proxysql_replication_hostgroups``ã€ãŠã‚ˆã³ ``proxysql_scheduler`` ã§ã€``community.proxysql`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:537 msgid "The redirect to the ``infinidat.infinibox`` collection was removed for: the ``infinibox`` doc fragment, the ``infinibox`` module_utils, and the following modules: ``infini_export``, ``infini_export_client``, ``infini_fs``, ``infini_host``, ``infini_pool``, ``infini_vol`` (https://github.com/ansible-collections/community.general/pull/1346)." msgstr "``infinidat.infinibox`` コレクションã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒå‰Šé™¤ã•れãŸã®ã¯ã€``infinibox`` ドキュメントã®ãƒ•ラグメントã€``infinibox`` module_utilsã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``infini_export``ã€``infini_export_client``ã€``infini_fs``ã€``infini_host``ã€``infini_pool``ã€``infini_vol`` ã§ã™ (https://github.com/ansible-collections/community.general/pull/1346)。" #: ../../rst/porting_guides/porting_guide_3.rst:541 msgid "iptables_state - the ``ANSIBLE_ASYNC_DIR`` environment is no longer supported, use the ``async_dir`` shell option instead (https://github.com/ansible-collections/community.general/pull/1371)." msgstr "iptables_state - ``ANSIBLE_ASYNC_DIR`` 環境ã¯ã‚µãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã«ãªã£ãŸãŸã‚ã€ä»£ã‚り㫠``async_dir`` シェルオプションを使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1371)。" #: ../../rst/porting_guides/porting_guide_3.rst:544 msgid "memcached cache plugin - do not import ``CacheModule``s directly. Use ``ansible.plugins.loader.cache_loader`` instead (https://github.com/ansible-collections/community.general/pull/1371)." msgstr "memcached cache プラグイン - ``CacheModule`` を直接インãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。代ã‚り㫠``ansible.plugins.loader.cache_loader`` を使用ã—ã¾ã™ (https://github.com/ansible-collections/community.general/pull/1371)。" #: ../../rst/porting_guides/porting_guide_3.rst:547 msgid "redis cache plugin - do not import ``CacheModule``s directly. Use ``ansible.plugins.loader.cache_loader`` instead (https://github.com/ansible-collections/community.general/pull/1371)." msgstr "redis cache プラグイン - ``CacheModule`` を直接インãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。代ã‚り㫠``ansible.plugins.loader.cache_loader`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1371)。" #: ../../rst/porting_guides/porting_guide_3.rst:548 msgid "xml - when ``content=attribute``, the ``attribute`` option is ignored (https://github.com/ansible-collections/community.general/pull/1371)." msgstr "XML - ``content=attribute`` ã®å ´åˆã€``attribute`` オプションãŒç„¡è¦–ã•れã¾ã™ (https://github.com/ansible-collections/community.general/pull/1371)。" #: ../../rst/porting_guides/porting_guide_3.rst:553 msgid "All FortiOS modules and plugins have been removed from this collection. They have been migrated to the `community.fortios `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® FortiOS モジュールã¨ãƒ—ラグインãŒã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`community.fortios `_ コレクションã«ç§»è¡Œã•れã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:557 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.network.fmgr_device`` → ``community.fortios.fmgr_device``) and make sure to install the `community.fortios` collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.network.fmgr_device`` →``community.fortios.fmgr_device``) を調整ã—ã€`community.fortios` コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:558 msgid "All ``nso`` modules have been removed from this collection. They have been migrated to the `cisco.nso `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® ``nso`` モジュールãŒã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`cisco.nso `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:562 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.network.nso_config`` → ``cisco.nso.nso_config``) and make sure to install the `cisco.nso` collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.network.nso_config`` →``cisco.nso.nso_config``) を調整ã—ã€`cisco.nso` コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:563 msgid "All ``routeros`` modules and plugins have been removed from this collection. They have been migrated to the `community.routeros `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "ã™ã¹ã¦ã® ``routeros`` モジュールã¨ãƒ—ラグインãŒã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れら㯠`community.routeros `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:567 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.network.routeros_command`` → ``community.routeros.command``) and make sure to install the community.routeros collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN を調整 (``community.network.routeros_command`` →``community.routeros.command``) ã—ã€community.routeros コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:568 msgid "The ``cp_publish`` module has been removed from this collection. It was a duplicate of ``check_point.mgmt.cp_mgmt_publish`` in the `check_point.mgmt `_ collection. If you use ansible-base 2.10 or newer, redirections have been provided. If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.network.cp_publish`` → ``check_point.mgmt.cp_mgmt_publish``) and make sure to install the check_point.mgmt collection." msgstr "``cp_publish`` モジュールã¯ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れ㯠`check_point.mgmt `_ コレクション㮠``check_point.mgmt.cp_mgmt_publish`` ã¨é‡è¤‡ã—ã¦ã„ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.network.cp_publish`` →``check_point.mgmt.cp_mgmt_publish``) を調整ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã€check_point.mgmt コレクションをインストールã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:570 msgid "The ``fortimanager`` httpapi plugin has been removed from this collection. It was a duplicate of the one in the `fortinet.fortimanager `_ collection. If you use ansible-base 2.10 or newer, a redirection has been provided." msgstr "``fortimanager`` httpapi プラグインã¯ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れ㯠`fortinet.fortimanager `_ コレクションã«ã‚ã‚‹ã‚‚ã®ã¨é‡è¤‡ã—ã¦ã„ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’ãŠä½¿ã„ã®æ–¹ã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:574 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.network.fortimanager`` → ``fortinet.fortimanager.fortimanager``) and make sure to install the `fortinet.fortimanager` collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.network.fortimanager`` →``fortinet.fortimanager.fortimanager``) を調整ã—ã€`fortinet.fortimanager` コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:575 msgid "The dependency on the ``check_point.mgmt`` collection has been removed. If you depend on that installing ``community.network`` also installs ``check_point.mgmt``, you have to make sure to install ``check_point.mgmt`` explicitly." msgstr "``check_point.mgmt`` コレクションã®ä¾å­˜é–¢ä¿‚ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚``community.network`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã‚ˆã£ã¦ ``check_point.mgmt`` もインストールã•れã¦ã„ã‚‹å ´åˆã¯ã€å¿…ãš ``check_point.mgmt`` を明示的ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:576 msgid "The deprecated Pluribus Networks modules ``pn_cluster``, ``pn_ospf``, ``pn_ospfarea``, ``pn_show``, ``pn_trunk``, ``pn_vlag``, ``pn_vlan``, ``pn_vrouter``, ``pn_vrouterbgp``, ``pn_vrouterif``, ``pn_vrouterlbif`` have been removed (https://github.com/ansible-collections/community.network/pull/176)." msgstr "éžæŽ¨å¥¨ã® Pluribus Networks モジュール ``pn_cluster``ã€``pn_ospf``ã€``pn_ospfarea``ã€``pn_show``ã€``pn_trunk``ã€``pn_vlag`` ``pn_vlan``ã€``pn_vrouter``ã€``pn_vrouterbgp``ã€``pn_vrouterif``ã€ãŠã‚ˆã³ ``pn_vrouterlbif`` ãŒå‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.network/pull/176)。" #: ../../rst/porting_guides/porting_guide_3.rst:577 msgid "The deprecated modules ``panos_admin``, ``panos_admpwd``, ``panos_cert_gen_ssh``, ``panos_check``, ``panos_commit``, ``panos_dag``, ``panos_dag_tags``, ``panos_import``, ``panos_interface``, ``panos_lic``, ``panos_loadcfg``, ``panos_match_rule``, ``panos_mgtconfig``, ``panos_nat_rule``, ``panos_object``, ``panos_op``, ``panos_pg``, ``panos_query_rules``, ``panos_restart``, ``panos_sag``, ``panos_security_rule``, ``panos_set`` have been removed. Use modules from the `paloaltonetworks.panos collection `_ instead (https://github.com/ansible-collections/community.network/pull/176)." msgstr "éžæŽ¨å¥¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``panos_admin``ã€``panos_admpwd``ã€``panos_cert_gen_ssh``ã€``panos_check``ã€``panos_commit``ã€``panos_dag``ã€``panos_dag_tags`` ``panos_import``ã€``panos_interface``ã€``panos_lic``ã€``panos_loadcfg``ã€``panos_match_rule``ã€``panos_mgtconfig``ã€``panos_nat_rule``ã€``panos_object``ã€``panos_op``ã€``panos_pg``ã€``panos_query_rules``ã€``panos_restart``ã€``panos_sag``ã€``panos_security_rule``ã€ãŠã‚ˆã³ ``panos_set`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠`paloaltonetworks.panos collection `_ ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¾ã™ (https://github.com/ansible-collections/community.network/pull/176)。" #: ../../rst/porting_guides/porting_guide_3.rst:578 msgid "The redirect to the ``mellanox.onyx`` collection was removed for: the ``onyx`` cliconf plugin, terminal plugin, module_utils, action plugin, doc fragment, and the following modules: ``onyx_aaa``, ``onyx_bfd``, ``onyx_bgp``, ``onyx_buffer_pool``, ``onyx_command``, ``onyx_config``, ``onyx_facts``, ``onyx_igmp``, ``onyx_igmp_interface``, ``onyx_igmp_vlan``, ``onyx_interface``, ``onyx_l2_interface``, ``onyx_l3_interface``, ``onyx_linkagg``, ``onyx_lldp``, ``onyx_lldp_interface``, ``onyx_magp``, ``onyx_mlag_ipl``, ``onyx_mlag_vip``, ``onyx_ntp``, ``onyx_ntp_servers_peers``, ``onyx_ospf``, ``onyx_pfc_interface``, ``onyx_protocol``, ``onyx_ptp_global``, ``onyx_ptp_interface``, ``onyx_qos``, ``onyx_snmp``, ``onyx_snmp_hosts``, ``onyx_snmp_users``, ``onyx_syslog_files``, ``onyx_syslog_remote``, ``onyx_traffic_class``, ``onyx_username``, ``onyx_vlan``, ``onyx_vxlan``, ``onyx_wjh`` (https://github.com/ansible-collections/community.network/pull/175)." msgstr "``mellanox.onyx`` コレクションã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã¯ã€``onyx`` cliconf プラグインã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ãƒ—ラグインã€module_utilsã€action プラグインã€doc フラグメントã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``onyx_aaa``ã€``onyx_bfd``ã€``onyx_bgp``ã€``onyx_buffer_pool``ã€``onyx_command``ã€``onyx_config``ã€``onyx_facts``ã€``onyx_igmp``ã€``onyx_igmp_interface``ã€``onyx_igmp_vlan``ã€``onyx_interface``ã€``onyx_l2_interface``ã€``onyx_l3_interface``ã€``onyx_linkagg``ã€``onyx_lldp``ã€``onyx_lldp_interface``ã€``onyx_magp``ã€``onyx_mlag_ipl``ã€``onyx_mlag_vip``ã€``onyx_ntp``ã€``onyx_ntp_servers_peers``ã€``onyx_ospf``ã€``onyx_pfc_interface``ã€``onyx_protocol``ã€``onyx_ptp_global``ã€``onyx_ptp_interface``ã€``onyx_qos``ã€``onyx_snmp``ã€``onyx_snmp_hosts``ã€``onyx_snmp_users``ã€``onyx_syslog_files``ã€``onyx_syslog_remote``ã€``onyx_traffic_class``ã€``onyx_username``ã€``onyx_vlan``ã€``onyx_vxlan``ã€ãŠã‚ˆã³ ``onyx_wjh`` ã«å¯¾ã—ã¦å‰Šé™¤ã•れã¾ã—㟠(https://github.com/ansible-collections/community.network/pull/175)。" #: ../../rst/porting_guides/porting_guide_3.rst:610 msgid "The ``gluster_heal_info``, ``gluster_peer`` and ``gluster_volume`` modules have migrated to the `gluster.gluster `_ collection. Ansible-base 2.10.1 adjusted the routing target to point to the modules in that collection, so we will remove these modules in community.general 3.0.0. If you use Ansible 2.9, or use FQCNs ``community.general.gluster_*`` in your playbooks and/or roles, please update them to use the modules from ``gluster.gluster`` instead." msgstr "``gluster_heal_info`` モジュールã€``gluster_peer`` モジュールã€ãŠã‚ˆã³ ``gluster_volume`` モジュール㯠`gluster.gluster `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚Ansible-base 2.10.1 ã§ã¯ã€ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å‚ç…§ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã•れãŸãŸã‚ã€community.general 3.0.0 ã§ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除ã™ã‚‹äºˆå®šã§ã™ã€‚Ansible 2.9 を使用ã—ã¦ã„ã‚‹å ´åˆã‚„ã€Playbook やロール㧠FQCN ã® ``community.general.gluster_*`` を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»£ã‚りã«ã“れらをアップデートã—㦠``gluster.gluster`` ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_3.rst:641 msgid "The ``dellemc_get_firmware_inventory`` module is deprecated and replaced with ``idrac_firmware_info``." msgstr "``dellemc_get_firmware_inventory`` モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€``idrac_firmware_info`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:642 msgid "The ``dellemc_get_system_inventory`` module is deprecated and replaced with ``idrac_system_info``." msgstr "``dellemc_get_system_inventory`` モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€``idrac_system_info`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:643 msgid "The dellemc_change_power_state module is deprecated and replaced with the redfish_powerstate module." msgstr "dellemc_change_power_state モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€redfish_powerstate モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:644 msgid "The dellemc_configure_bios module is deprecated and replaced with the idrac_bios module." msgstr "dellemc_configure_bios モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_bios モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:645 msgid "The dellemc_configure_idrac_network module is deprecated and replaced with the idrac_network module." msgstr "dellemc_configure_idrac_network モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_network モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:646 msgid "The dellemc_configure_idrac_timezone module is deprecated and replaced with the idrac_timezone_ntp module." msgstr "dellemc_configure_idrac_timezone モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_timezone_ntp モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:647 msgid "The dellemc_configure_idrac_users module is deprecated and replaced with the idrac_user module." msgstr "dellemc_configure_idrac_users モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_user モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:648 msgid "The dellemc_delete_lc_job and dellemc_delete_lc_job_queue modules are deprecated and replaced with the idrac_lifecycle_controller_jobs module." msgstr "dellemc_delete_lc_job モジュールãŠã‚ˆã³ dellemc_delete_lc_job_queue モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_lifecycle_controller_jobs モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:649 msgid "The dellemc_export_lc_logs module is deprecated and replaced with the idrac_lifecycle_controller_logs module." msgstr "dellemc_export_lc_logs モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_lifecycle_controller_logs モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:650 msgid "The dellemc_get_lc_job_status module is deprecated and replaced with the idrac_lifecycle_controller_job_status_info module." msgstr "dellemc_get_lc_job_status モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_lifecycle_controller_job_status_info モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:651 msgid "The dellemc_get_lcstatus module is deprecated and replaced with the idrac_lifecycle_controller_status_info module." msgstr "dellemc_get_lcstatus モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_lifecycle_controller_status_info モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:652 msgid "The dellemc_idrac_reset module is deprecated and replaced with the idrac_reset module." msgstr "dellemc_idrac_reset モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_reset モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_3.rst:653 msgid "The dellemc_setup_idrac_syslog module is deprecated and replaced with the idrac_syslog module." msgstr "dellemc_setup_idrac_syslog モジュールã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€idrac_syslog モジュールã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:8 msgid "Ansible 4 Porting Guide" msgstr "Ansible 4 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:15 msgid "We suggest you read this page along with the `Ansible 4 Changelog `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible 4 Changelog `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:20 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:23 msgid "The ``jinja2_native`` setting now does not affect the template module which implicitly returns strings. For the template lookup there is a new argument ``jinja2_native`` (off by default) to control that functionality. The rest of the Jinja2 expressions still operate based on the ``jinja2_native`` setting." msgstr "``jinja2_native`` 設定ã¯ã€æš—é»™çš„ã«æ–‡å­—列を返ã™ãƒ†ãƒ³ãƒ—レートモジュールã«ã¯å½±éŸ¿ã‚’åŠã¼ã—ã¾ã›ã‚“ã€‚ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ¤œç´¢ã§ã¯ã€ãã®æ©Ÿèƒ½ã‚’制御ã™ã‚‹æ–°ã—ã„引数 ``jinja2_native`` (デフォルトã§ã¯ off) ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚残り㮠Jinja2 å¼ã¯ã€``jinja2_native`` 設定ã«åŸºã¥ã„ã¦å‹•作ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:26 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:29 msgid "The ``ansible-galaxy login`` command has been removed, as the underlying API it used for GitHub auth has been shut down. Publishing roles or collections to Galaxy with ``ansible-galaxy`` now requires that a Galaxy API token be passed to the CLI using a token file (default location ``~/.ansible/galaxy_token``) or (insecurely) with the ``--token`` argument to ``ansible-galaxy``." msgstr "GitHub èªè¨¼ã«ä½¿ç”¨ã•れる基礎ã¨ãªã‚‹ API ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã•れるãŸã‚ã€``ansible-galaxy login`` コマンドãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚``ansible-galaxy`` 経由㧠Galaxy ã«ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å ´åˆã¯ã€Galaxy API トークンをトークンファイル (デフォルトã®å ´æ‰€ ``~/.ansible/galaxy_token``) ã¾ãŸã¯ ``--token`` 引数ã‹ã‚‰ ``ansible-galaxy`` ã« (セキュリティーを確ä¿ã›ãšã«) 渡ã™ã“ã¨ãŒå¿…è¦ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:32 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:35 msgid "The constant ``ansible.module_utils.basic._CHECK_ARGUMENT_TYPES_DISPATCHER`` is deprecated. Use :const:`ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS` instead." msgstr "定数 ``ansible.module_utils.basic._CHECK_ARGUMENT_TYPES_DISPATCHER`` ã¯å»ƒæ­¢ã•れã¾ã—ãŸã€‚代ã‚り㫠:const:`ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:39 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:42 msgid "Changes to ``AnsibleModule``" msgstr "``AnsibleModule`` ã®å¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_4.rst:41 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:44 msgid "With the move to :class:`ArgumentSpecValidator ` for performing argument spec validation, the following private methods in :class:`AnsibleModule ` have been removed:" msgstr "å¼•æ•°ä»•æ§˜ã®æ¤œè¨¼ã‚’実行ã™ã‚‹ãŸã‚ã« :class:`ArgumentSpecValidator ` ã«ç§»è¡Œã—ãŸã“ã¨ã§ã€:class:`AnsibleModule ` ã«ã‚る以下ã®ãƒ—ライベートメソッドãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:43 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:46 msgid "``_check_argument_types()``" msgstr "``_check_argument_types()``" #: ../../rst/porting_guides/porting_guide_4.rst:44 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:47 msgid "``_check_argument_values()``" msgstr "``_check_argument_values()``" #: ../../rst/porting_guides/porting_guide_4.rst:45 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:48 msgid "``_check_arguments()``" msgstr "``_check_arguments()``" #: ../../rst/porting_guides/porting_guide_4.rst:46 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:49 msgid "``_check_mutually_exclusive()`` --> :func:`ansible.module_utils.common.validation.check_mutually_exclusive`" msgstr "``_check_mutually_exclusive()`` --> :func:`ansible.module_utils.common.validation.check_mutually_exclusive`" #: ../../rst/porting_guides/porting_guide_4.rst:47 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:50 msgid "``_check_required_arguments()`` --> :func:`ansible.module_utils.common.validation.check_required_arguments`" msgstr "``_check_required_arguments()`` --> :func:`ansible.module_utils.common.validation.check_required_arguments`" #: ../../rst/porting_guides/porting_guide_4.rst:48 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:51 msgid "``_check_required_by()`` --> :func:`ansible.module_utils.common.validation.check_required_by`" msgstr "``_check_required_by()`` --> :func:`ansible.module_utils.common.validation.check_required_by`" #: ../../rst/porting_guides/porting_guide_4.rst:49 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:52 msgid "``_check_required_if()`` --> :func:`ansible.module_utils.common.validation.check_required_if`" msgstr "``_check_required_if()`` --> :func:`ansible.module_utils.common.validation.check_required_if`" #: ../../rst/porting_guides/porting_guide_4.rst:50 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:53 msgid "``_check_required_one_of()`` --> :func:`ansible.module_utils.common.validation.check_required_one_of`" msgstr "``_check_required_one_of()`` --> :func:`ansible.module_utils.common.validation.check_required_one_of`" #: ../../rst/porting_guides/porting_guide_4.rst:51 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:54 msgid "``_check_required_together()`` --> :func:`ansible.module_utils.common.validation.check_required_together`" msgstr "``_check_required_together()`` --> :func:`ansible.module_utils.common.validation.check_required_together`" #: ../../rst/porting_guides/porting_guide_4.rst:52 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:55 msgid "``_check_type_bits()`` --> :func:`ansible.module_utils.common.validation.check_type_bits`" msgstr "``_check_type_bits()`` --> :func:`ansible.module_utils.common.validation.check_type_bits`" #: ../../rst/porting_guides/porting_guide_4.rst:53 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:56 msgid "``_check_type_bool()`` --> :func:`ansible.module_utils.common.validation.check_type_bool`" msgstr "``_check_type_bool()`` --> :func:`ansible.module_utils.common.validation.check_type_bool`" #: ../../rst/porting_guides/porting_guide_4.rst:54 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:57 msgid "``_check_type_bytes()`` --> :func:`ansible.module_utils.common.validation.check_type_bytes`" msgstr "``_check_type_bytes()`` --> :func:`ansible.module_utils.common.validation.check_type_bytes`" #: ../../rst/porting_guides/porting_guide_4.rst:55 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:58 msgid "``_check_type_dict()`` --> :func:`ansible.module_utils.common.validation.check_type_dict`" msgstr "``_check_type_dict()`` --> :func:`ansible.module_utils.common.validation.check_type_dict`" #: ../../rst/porting_guides/porting_guide_4.rst:56 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:59 msgid "``_check_type_float()`` --> :func:`ansible.module_utils.common.validation.check_type_float`" msgstr "``_check_type_float()`` --> :func:`ansible.module_utils.common.validation.check_type_float`" #: ../../rst/porting_guides/porting_guide_4.rst:57 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:60 msgid "``_check_type_int()`` --> :func:`ansible.module_utils.common.validation.check_type_int`" msgstr "``_check_type_int()`` --> :func:`ansible.module_utils.common.validation.check_type_int`" #: ../../rst/porting_guides/porting_guide_4.rst:58 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:61 msgid "``_check_type_jsonarg()`` --> :func:`ansible.module_utils.common.validation.check_type_jsonarg`" msgstr "``_check_type_jsonarg()`` --> :func:`ansible.module_utils.common.validation.check_type_jsonarg`" #: ../../rst/porting_guides/porting_guide_4.rst:59 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:62 msgid "``_check_type_list()`` --> :func:`ansible.module_utils.common.validation.check_type_list`" msgstr "``_check_type_list()`` --> :func:`ansible.module_utils.common.validation.check_type_list`" #: ../../rst/porting_guides/porting_guide_4.rst:60 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:63 msgid "``_check_type_path()`` --> :func:`ansible.module_utils.common.validation.check_type_path`" msgstr "``_check_type_path()`` --> :func:`ansible.module_utils.common.validation.check_type_path`" #: ../../rst/porting_guides/porting_guide_4.rst:61 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:64 msgid "``_check_type_raw()`` --> :func:`ansible.module_utils.common.validation.check_type_raw`" msgstr "``_check_type_raw()`` --> :func:`ansible.module_utils.common.validation.check_type_raw`" #: ../../rst/porting_guides/porting_guide_4.rst:62 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:65 msgid "``_check_type_str()`` --> :func:`ansible.module_utils.common.validation.check_type_str`" msgstr "``_check_type_str()`` --> :func:`ansible.module_utils.common.validation.check_type_str`" #: ../../rst/porting_guides/porting_guide_4.rst:63 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:66 msgid "``_count_terms()`` --> :func:`ansible.module_utils.common.validation.count_terms`" msgstr "``_count_terms()`` --> :func:`ansible.module_utils.common.validation.count_terms`" #: ../../rst/porting_guides/porting_guide_4.rst:64 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:67 msgid "``_get_wanted_type()``" msgstr "``_get_wanted_type()``" #: ../../rst/porting_guides/porting_guide_4.rst:65 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:68 msgid "``_handle_aliases()``" msgstr "``_handle_aliases()``" #: ../../rst/porting_guides/porting_guide_4.rst:66 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:69 msgid "``_handle_no_log_values()``" msgstr "``_handle_no_log_values()``" #: ../../rst/porting_guides/porting_guide_4.rst:67 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:70 msgid "``_handle_options()``" msgstr "``_handle_options()``" #: ../../rst/porting_guides/porting_guide_4.rst:68 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:71 msgid "``_set_defaults()``" msgstr "``_set_defaults()``" #: ../../rst/porting_guides/porting_guide_4.rst:69 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:72 msgid "``_set_fallbacks()``" msgstr "``_set_fallbacks()``" #: ../../rst/porting_guides/porting_guide_4.rst:71 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:74 msgid "Modules or plugins using these private methods should use the public functions in :mod:`ansible.module_utils.common.validation` or :meth:`ArgumentSpecValidator.validate() ` if no public function was listed above." msgstr "ã“れらã®ãƒ—ライベートメソッドを使用ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインã¯ã€:mod:`ansible.module_utils.common.validation` ã®å…¬é–‹é–¢æ•° (公開関数ãŒä¸Šè¨˜ã®ä¸€è¦§ã«è¨˜è¼‰ã•れã¦ã„ãªã„å ´åˆã¯ :meth:`ArgumentSpecValidator.validate() `) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:75 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:78 msgid "Changes to :mod:`ansible.module_utils.common.parameters`" msgstr ":mod:`ansible.module_utils.common.parameters` ã®å¤‰æ›´ç‚¹" #: ../../rst/porting_guides/porting_guide_4.rst:77 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:80 msgid "The following functions in :mod:`ansible.module_utils.common.parameters` are now private and should not be used directly. Use :meth:`ArgumentSpecValidator.validate() ` instead." msgstr ":mod:`ansible.module_utils.common.parameters` ã®ä»¥ä¸‹ã®æ©Ÿèƒ½ã¯ãƒ—ライベートã§ã‚ã‚‹ãŸã‚ã€ç›´æŽ¥ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。代ã‚り㫠:meth:`ArgumentSpecValidator.validate() ` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:79 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:82 msgid "``list_no_log_values``" msgstr "``list_no_log_values``" #: ../../rst/porting_guides/porting_guide_4.rst:80 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:83 msgid "``list_deprecations``" msgstr "``list_deprecations``" #: ../../rst/porting_guides/porting_guide_4.rst:81 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:84 msgid "``handle_aliases``" msgstr "``handle_aliases``" #: ../../rst/porting_guides/porting_guide_4.rst:85 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:88 msgid "Other" msgstr "ãã®ä»–" #: ../../rst/porting_guides/porting_guide_4.rst:87 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:90 msgid "**Upgrading**: If upgrading from ``ansible < 2.10`` or from ``ansible-base`` and using pip, you must ``pip uninstall ansible`` or ``pip uninstall ansible-base`` before installing ``ansible-core`` to avoid conflicts." msgstr "**アップグレード**: ``ansible < 2.10`` ã¾ãŸã¯ ``ansible-base`` ã‹ã‚‰ã‚¢ãƒƒãƒ—グレードã—㦠pip を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``ansible-core`` をインストールã™ã‚‹å‰ã«ã€``pip uninstall ansible`` ã¾ãŸã¯ ``pip uninstall ansible-base`` を指定ã—ã¦ç«¶åˆã‚’回é¿ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:88 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:91 msgid "Python 3.8 on the controller node is a soft requirement for this release. ``ansible-core`` 2.11 still works with the same versions of Python that ``ansible-base`` 2.10 worked with, however 2.11 emits a warning when running on a controller node with a Python version less than 3.8. This warning can be disabled by setting ``ANSIBLE_CONTROLLER_PYTHON_WARNING=False`` in your environment. ``ansible-core`` 2.12 will require Python 3.8 or greater." msgstr "コントローラーノード㮠Python 3.8 ã¯ã€æœ¬ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã‚½ãƒ•トè¦ä»¶ã§ã™ã€‚``ansible-core`` 2.11 ã¯ã€``ansible-base`` 2.10 ãŒå‹•作ã—ãŸã®ã¨åŒã˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§å¼•ãç¶šãæ©Ÿèƒ½ã—ã¾ã™ãŒã€2.11 ã§ã¯ã€Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ 3.8 未満ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã¨è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ãŠä½¿ã„ã®ç’°å¢ƒã« ``ANSIBLE_CONTROLLER_PYTHON_WARNING=False`` を設定ã—ã¦ç„¡åйã«ã§ãã¾ã™ã€‚``ansible-core`` 2.12 ã®å ´åˆã¯ Python 3.8 以é™ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:89 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:92 msgid "The configuration system now validates the ``choices`` field, so any settings that violate it and were ignored in 2.10 cause an error in 2.11. For example, ``ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0`` now causes an error (valid choices are ``ignore``, ``warn`` or ``error``)." msgstr "設定システム㯠``choices`` フィールドを検証ã—ã€ã“れをé•åã—ã€2.10 ã§ç„¡è¦–ã•れã¦ã„ãŸã™ã¹ã¦ã®è¨­å®šãŒ 2.11 ã§ã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ãŸã¨ãˆã°ã€``ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0`` ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—㟠(有効ãªé¸æŠžè‚¢ã¯ ``ignore``ã€``warn``ã€``error``ã§ã™)。" #: ../../rst/porting_guides/porting_guide_4.rst:90 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:93 msgid "The ``ansible-galaxy`` command now uses ``resolvelib`` for resolving dependencies. In most cases this should not make a user-facing difference beyond being more performant, but we note it here for posterity and completeness." msgstr "``ansible-galaxy`` コマンドã§ã¯ã€ä¾å­˜é–¢ä¿‚ã®è§£æ±ºã« ``resolvelib`` ãŒä½¿ç”¨ã•れã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ‘フォーマンスãŒå‘上ã™ã‚‹ã ã‘ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¨ã£ã¦ã¯ä½•ã®å¤‰åŒ–ã‚‚ã‚りã¾ã›ã‚“ãŒã€è¨˜éŒ²ã®ãŸã‚ã«ã“ã“ã«è¨˜ã—ã¦ãŠãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:91 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:94 msgid "If you import Python ``module_utils`` into any modules you maintain, you may now mark the import as optional during the module payload build by wrapping the ``import`` statement in a ``try`` or ``if`` block. This allows modules to use ``module_utils`` that may not be present in all versions of Ansible or a collection, and to perform arbitrary recovery or fallback actions during module runtime." msgstr "Python ``module_utils`` ã‚’ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€``try`` ブロックã¾ãŸã¯ ``if`` ブロック㮠``import`` ステートメントをラップã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã®æ§‹ç¯‰æ™‚ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’オプションã¨ãƒžãƒ¼ã‚¯ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å­˜åœ¨ã—ãªã„ ``module_utils`` を使用ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã®ä»»æ„ã®ãƒªã‚«ãƒãƒªãƒ¼ã¾ãŸã¯ãƒ•ォールãƒãƒƒã‚¯ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:97 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:100 msgid "The ``apt_key`` module has explicitly defined ``file`` as mutually exclusive with ``data``, ``keyserver`` and ``url``. They cannot be used together anymore." msgstr "``apt_key`` モジュールã¯ã€``data``ã€``keyserver``ã€ãŠã‚ˆã³ ``url`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ãªã‚‚ã®ã¨ã—ã¦ã€``file`` を明示的ã«å®šç¾©ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:98 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:101 msgid "The ``meta`` module now supports tags for user-defined tasks. Set the task's tags to 'always' to maintain the previous behavior. Internal ``meta`` tasks continue to always run." msgstr "``meta`` モジュールã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã®å‹•作を維æŒã™ã‚‹ãŸã‚ã«ã€ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã‚’「alwaysã€ã«è¨­å®šã—ã¾ã™ã€‚内部㮠``meta`` タスクã¯å¸¸ã«å®Ÿè¡Œã‚’継続ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:118 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:121 msgid "facts - On NetBSD, ``ansible_virtualization_type`` now tries to report a more accurate result than ``xen`` when virtualized and not running on Xen." msgstr "ファクト - NetBSD ã«ãŠã„ã¦ã€Xen 上ã§ä»®æƒ³åŒ–ã•れã¦ã„ã¦å®Ÿè¡Œã—ã¦ã„ãªã„å ´åˆã€``ansible_virtualization_type`` ã¯ã€``xen`` よりも正確ãªçµæžœã‚’報告ã—よã†ã¨ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:119 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:122 msgid "facts - Virtualization facts now include ``virtualization_tech_guest`` and ``virtualization_tech_host`` keys. These are lists of virtualization technologies that a guest is a part of, or that a host provides, respectively. As an example, if you set up a host to provide both KVM and VirtualBox, both values are included in ``virtualization_tech_host``. Similarly, a podman container running on a VM powered by KVM has a ``virtualization_tech_guest`` of ``[\"kvm\", \"podman\", \"container\"]``." msgstr "ファクト: 仮想化ファクト㫠``virtualization_tech_guest`` キーãŠã‚ˆã³ ``virtualization_tech_host`` キーãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚以下ã¯ã€ã‚²ã‚¹ãƒˆãŒã€ã¾ãŸã¯ãƒ›ã‚¹ãƒˆãŒæä¾›ã™ã‚‹ä»®æƒ³åŒ–テクノロジーã®ä¸€è¦§ã§ã™ã€‚ãŸã¨ãˆã°ã€KVM 㨠VirtualBox ã®ä¸¡æ–¹ã‚’æä¾›ã™ã‚‹ãƒ›ã‚¹ãƒˆã‚’設定ã™ã‚‹å ´åˆã¯ã€ä¸¡æ–¹ã®å€¤ãŒ ``virtualization_tech_host`` ã«çµ„ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚åŒæ§˜ã«ã€KVM ãŒå¯¾å¿œã™ã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã§å®Ÿè¡Œã—ã¦ã„ã‚‹ podman コンテナーã«ã¯ã€ ``[\"kvm\", \"podman\", \"container\"]`` ã® ``virtualization_tech_guest`` ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:120 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:123 msgid "The parameter ``filter`` type is changed from ``string`` to ``list`` in the :ref:`setup ` module in order to use more than one filter. Previous behavior (using a ``string``) still remains and works as a single filter." msgstr "複数ã®ãƒ•ィルターを使用ã™ã‚‹ãŸã‚ã«ã€ãƒ‘ラメーター ``filter`` タイプ㯠:ref:`setup ` モジュール㮠``string`` ã‹ã‚‰ ``list`` ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚以å‰ã®å‹•作㯠(``string`` を使用) ã¯ãã®ã¾ã¾ã§ã€å˜ä¸€ã®ãƒ•ィルターã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:126 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:129 msgid "inventory plugins - ``CachePluginAdjudicator.flush()`` now calls the underlying cache plugin's ``flush()`` instead of only deleting keys that it knows about. Inventory plugins should use ``delete()`` to remove any specific keys. As a user, this means that when an inventory plugin calls its ``clear_cache()`` method, facts could also be flushed from the cache. To work around this, users can configure inventory plugins to use a cache backend that is independent of the facts cache." msgstr "インベントリープラグイン - ``CachePluginAdjudicator.flush()`` ã¯ã€èªè­˜ã—ã¦ã„ã‚‹éµã‚’削除ã™ã‚‹ã®ã§ã¯ãªãã€åŸºç¤Žã¨ãªã‚‹ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグイン㮠``flush()`` を呼ã³å‡ºã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚インベントリープラグインã¯ã€``delete()`` を使用ã—ã¦ç‰¹å®šã‚­ãƒ¼ã‚’削除ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ユーザーã¨ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグイン㌠``clear_cache()`` メソッドを呼ã³å‡ºã™ã¨ã€ãƒ•ァクトをキャッシュã‹ã‚‰ãƒ•ラッシュã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れを回é¿ã™ã‚‹ã«ã¯ã€ãƒ•ァクトキャッシュã‹ã‚‰ç‹¬ç«‹ã—ãŸã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã‚ˆã†ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを設定ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:127 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:130 msgid "callback plugins - ``meta`` task execution is now sent to ``v2_playbook_on_task_start`` like any other task. By default, only explicit meta tasks are sent there. Callback plugins can opt-in to receiving internal, implicitly created tasks to act on those as well, as noted in the plugin development documentation." msgstr "callback プラグイン - ``meta`` タスクã®å®Ÿè¡Œã¯ã€ä»–ã®ã‚¿ã‚¹ã‚¯ã¨åŒæ§˜ã« ``v2_playbook_on_task_start`` ã«é€ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚デフォルトã§ã¯ã€æ˜Žç¤ºçš„ãªãƒ¡ã‚¿ã‚¿ã‚¹ã‚¯ã®ã¿ãŒé€ä¿¡ã•れã¾ã™ã€‚コールãƒãƒƒã‚¯ãƒ—ラグインã¯ã€ãƒ—ラグイン開発ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã‚るよã†ã«ã€å†…éƒ¨ã§æš—黙的ã«ä½œæˆã•れãŸã‚¿ã‚¹ã‚¯ã‚’å—ã‘å–ã£ã¦ã€ãれらã«ã‚‚対処ã™ã‚‹ã“ã¨ã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:128 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:131 msgid "The ``choices`` are now validated, so plugins that were using incorrect or incomplete choices issue an error in 2.11 if the value provided does not match. This has a simple fix: update the entries in ``choices`` to match reality." msgstr "``choices`` ãŒæ¤œè¨¼ã•れるよã†ã«ãªã£ãŸãŸã‚ã€èª¤ã£ãŸé¸æŠžã€ã¾ãŸã¯ä¸å®Œå…¨ãªé¸æŠžã‚’使用ã—ã¦ã„ãŸãƒ—ラグインãŒã€2.11 ã§ã¯æä¾›ã•れãŸå€¤ãŒä¸€è‡´ã—ãªã„å ´åˆã«ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¯ç°¡å˜ã«ä¿®æ­£ã§ãã¾ã™ã€‚実際ã®è¨­å®šã«åˆã‚ã›ã¦ ``choices`` ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:136 msgid "Porting Guide for v4.6.0" msgstr "v4.6.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:142 msgid "containers.podman" msgstr "containers.podman" #: ../../rst/porting_guides/porting_guide_4.rst:144 msgid "Add systemd generation for pods" msgstr "Pod ã® systemd 生æˆã‚’追加" #: ../../rst/porting_guides/porting_guide_4.rst:145 msgid "Generate systemd service files for containers" msgstr "コンテナー㮠systemd サービスファイルã®ç”Ÿæˆ" #: ../../rst/porting_guides/porting_guide_4.rst:150 msgid "enable client.ssl,server.ssl before starting the gluster volume (https://github.com/gluster/gluster-ansible-collection/pull/19)" msgstr "gluster ボリュームを起動ã™ã‚‹å‰ã« client.ssl,server.ssl を有効ã«ã—ã¾ã™ï¼ˆhttps://github.com/gluster/gluster-ansible-collection/pull/19)。" #: ../../rst/porting_guides/porting_guide_4.rst:158 msgid "grafana_dashboard lookup - Providing a mangled version of the API key is no longer preferred." msgstr "grafana_dashboard lookup - API キー㮠mangled ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æä¾›ã¯æŽ¨å¥¨ã•れãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:161 msgid "Porting Guide for v4.5.0" msgstr "v4.5.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:167 msgid "hetzner.hcloud" msgstr "hetzner.hcloud" #: ../../rst/porting_guides/porting_guide_4.rst:169 msgid "Introduction of placement groups" msgstr "é…ç½®ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¦‚è¦" #: ../../rst/porting_guides/porting_guide_4.rst:174 msgid "remove_stale_lun - Add role for removing stale LUN (https://bugzilla.redhat.com/1966873)." msgstr "remove_stale_lun - å¤ã„ LUN を削除ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚’追加ã—ã¾ã™ï¼ˆhttps://bugzilla.redhat.com/1966873)。" #: ../../rst/porting_guides/porting_guide_4.rst:182 msgid "network_cli - The paramiko_ssh setting ``look_for_keys`` was set automatically based on the values of the ``password`` and ``private_key_file`` options passed to network_cli. This option can now be set explicitly, and the automatic setting of ``look_for_keys`` will be removed after 2024-01-01 (https://github.com/ansible-collections/ansible.netcommon/pull/271)." msgstr "network_cli - paramiko_ssh 設定 ``look_for_keys`` ã¯ã€network_cli ã«æ¸¡ã•れる ``password`` オプションãŠã‚ˆã³ ``private_key_file`` オプションã®å€¤ã«åŸºã¥ã„ã¦è‡ªå‹•çš„ã«è¨­å®šã•れã¾ã™ã€‚ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ˜Žç¤ºçš„ã«è¨­å®šã§ãã€``look_for_keys`` ã®è‡ªå‹•設定㯠2024-01-01 以é™å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/ansible.netcommon/pull/271)。" #: ../../rst/porting_guides/porting_guide_4.rst:185 #: ../../rst/porting_guides/porting_guide_4.rst:514 msgid "cisco.ios" msgstr "cisco.ios" #: ../../rst/porting_guides/porting_guide_4.rst:187 msgid "Deprecated ios_bgp in favor of ios_bgp_global and ios_bgp_address_family." msgstr "ios_bgp_global ãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€ios_bgp 㯠ios_bgp_global ãŠã‚ˆã³ ios_bgp_address_family ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:188 msgid "Remove testing with provider for ansible-test integration jobs. This helps prepare us to move to network-ee integration tests." msgstr "ansible-test çµ±åˆã‚¸ãƒ§ãƒ–ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ãƒ†ã‚¹ãƒˆã‚’削除ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€network-eeçµ±åˆãƒ†ã‚¹ãƒˆã«ç§»è¡Œã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:191 #: ../../rst/porting_guides/porting_guide_4.rst:225 #: ../../rst/porting_guides/porting_guide_4.rst:558 msgid "junipernetworks.junos" msgstr "junipernetworks.junos" #: ../../rst/porting_guides/porting_guide_4.rst:193 msgid "Deprecated router_id from ospfv3 resource module." msgstr "ospfv3 リソースモジュール㮠router_id ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:196 msgid "Porting Guide for v4.4.0" msgstr "v4.4.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:210 #: ../../rst/porting_guides/porting_guide_4.rst:520 msgid "cisco.iosxr" msgstr "cisco.iosxr" #: ../../rst/porting_guides/porting_guide_4.rst:212 msgid "The iosxr_logging module has been deprecated in favor of the new iosxr_logging_global resource module and will be removed in a release after '2023-08-01'." msgstr "iosxr_logging モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€'2023-08-01' ã®å¾Œã«ãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚æ–°ã—ã„ iosxr_logging_global ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:217 msgid "The nxos_logging module has been deprecated in favor of the new nxos_logging_global resource module and will be removed in a release after '2023-08-01'." msgstr "nxos_logging モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€'2023-08-01' ã®å¾Œã«ãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚æ–°ã—ã„ nxos_logging_global ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:222 msgid "docker_container - the new ``command_handling``'s default value, ``compatibility``, is deprecated and will change to ``correct`` in community.docker 3.0.0. A deprecation warning is emitted by the module in cases where the behavior will change. Please note that ansible-core will output a deprecation warning only once, so if it is shown for an earlier task, there could be more tasks with this warning where it is not shown (https://github.com/ansible-collections/community.docker/pull/186)." msgstr "docker_container - æ–°ã—ã„ ``command_handling``ã®ãƒ‡ãƒ•ォルト値 ``compatibility`` ã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€community.docker 3.0.0 ã§ ``correct`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã™ã€‚éžæŽ¨å¥¨ã®è­¦å‘Šã¯ã€å‹•作ãŒå¤‰ã‚ã‚‹å ´åˆã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦å‡ºåŠ›ã•れã¾ã™ã€‚ansible-core ã¯éžæŽ¨å¥¨ã®è­¦å‘Šã‚’一度ã ã‘出力ã™ã‚‹ãŸã‚ã€ä»¥å‰ã®ã‚¿ã‚¹ã‚¯ã§ã¯è¡¨ç¤ºã•れãªã„å ´åˆã€è¡¨ç¤ºã•れã¦ã„ãªã„場所ã§ã“ã®è­¦å‘Šã§ã‚ˆã‚Šè¡¨ç¤ºã•れるタスクãŒå¢—ãˆã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.docker/pull/186)。" #: ../../rst/porting_guides/porting_guide_4.rst:227 msgid "The junos_logging module has been deprecated in favor of the new junos_logging_global resource module and will be removed in a release after '2023-08-01'." msgstr "junos_logging モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€'2023-08-01' ã®å¾Œã«ãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚æ–°ã—ã„ junos_logging_global ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:230 #: ../../rst/porting_guides/porting_guide_4.rst:576 msgid "vyos.vyos" msgstr "vyos.vyos" #: ../../rst/porting_guides/porting_guide_4.rst:232 msgid "The vyos_logging module has been deprecated in favor of the new vyos_logging_global resource module and will be removed in a release after \"2023-08-01\"." msgstr "vyos_logging モジュールãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€'2023-08-01' ã®å¾Œã«ãƒªãƒªãƒ¼ã‚¹ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚æ–°ã—ã„ vyos_logging_global ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:235 msgid "Porting Guide for v4.3.0" msgstr "v4.3.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:241 msgid "netapp.cloudmanager" msgstr "netapp.cloudmanager" #: ../../rst/porting_guides/porting_guide_4.rst:243 msgid "Adding stage environment to all modules in cloudmanager" msgstr "cloudmanager ã®ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®ã‚¹ãƒ†ãƒ¼ã‚¸ç’°å¢ƒã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_4.rst:251 msgid "hashi_vault collection - support for Python 3.5 will be dropped in version ``2.0.0`` of ``community.hashi_vault`` (https://github.com/ansible-collections/community.hashi_vault/issues/81)." msgstr "hashi_vault コレクション - Python3.5ã®ã‚µãƒãƒ¼ãƒˆãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³``2.0.0``ã®``community.hashi_vault``ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.hashi_vault/issues/81)。" #: ../../rst/porting_guides/porting_guide_4.rst:254 msgid "Porting Guide for v4.2.0" msgstr "v4.2.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:271 msgid "vmware_object_custom_attributes_info - added a new module to gather custom attributes of an object (https://github.com/ansible-collections/community.vmware/pull/851)." msgstr "vmware_object_custom_attributes_info - オブジェクトã®ã‚«ã‚¹ã‚¿ãƒ å±žæ€§ã‚’åŽé›†ã™ã‚‹æ–°ã—ã„モジュールãŒè¿½åŠ ã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.vmware/pull/851)。" #: ../../rst/porting_guides/porting_guide_4.rst:276 msgid "idrac_server_config_profile - Added support for exporting and importing Server Configuration Profile through HTTP/HTTPS share." msgstr "idrac_server_config_profile - HTTP/HTTPS 共有ã§ã®ã‚µãƒ¼ãƒãƒ¼è¨­å®šãƒ—ロファイルã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŠã‚ˆã³ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ã‚µãƒãƒ¼ãƒˆãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:277 msgid "ome_device_group - Added support for adding devices to a group using the IP addresses of the devices and group ID." msgstr "ome_device_group - デãƒã‚¤ã‚¹ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ— ID ã® IP アドレスを使用ã—ã¦ã€ãƒ‡ãƒã‚¤ã‚¹ã‚’グループã«è¿½åŠ ã™ã‚‹ãŸã‚ã®ã‚µãƒãƒ¼ãƒˆãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:280 #: ../../rst/porting_guides/porting_guide_4.rst:341 #: ../../rst/porting_guides/porting_guide_4.rst:421 #: ../../rst/porting_guides/porting_guide_4.rst:462 #: ../../rst/porting_guides/porting_guide_4.rst:550 #: ../../rst/porting_guides/porting_guide_4.rst:700 msgid "fortinet.fortios" msgstr "fortinet.fortios" #: ../../rst/porting_guides/porting_guide_4.rst:282 msgid "New module fortios_monitor_fact." msgstr "æ–°ã—ã„モジュール fortios_monitor_fact。" #: ../../rst/porting_guides/porting_guide_4.rst:283 msgid "Support Fortios 7.0." msgstr "Fortios 7.0 をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:284 msgid "Support Log APIs." msgstr "ログ API をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:289 msgid "The community.kubernetes collection is being renamed to kubernetes.core. In Ansible 5, community.kubernetes will be replaced by an empty collection which has deprecated redirects for all the current content to kubernetes.core. If you are using FQCNs starting with ``community.kubernetes.``, please update them to ``kubernetes.core.`` now. Note that kubernetes.core has been included in Ansible since Ansible 3.0.0 (https://github.com/ansible-community/community-topics/issues/22)." msgstr "community.kubernetes コレクション㯠kubernetes.core ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚Ansible 5 ã§ã¯ã€community.kubernetes ã¯ã€ç¾åœ¨ã®ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ kubernetes.core ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ç©ºã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚FQCN を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``community.kubernetes.`` ã§å§‹ã¾ã‚‹ FQCN ã‚’ ``kubernetes.core.`` ã«æ›´æ–°ã—ã¦ãã ã•ã„。Ansible 3.0.0 以é™ã€kubernetes.core 㯠Ansible ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„(https://github.com/ansible-community/community-topics/issues/22)。" #: ../../rst/porting_guides/porting_guide_4.rst:294 msgid "win_updates - Deprecated the ``filtered_reason`` return value for each filtered up in favour of ``filtered_reasons``. This has been done to show all the reasons why an update was filtered and not just the first reason." msgstr "win_updates - フィルター処ç†ã•れãŸãれãžã‚Œã®``filtered_reason``戻り値ãŒéžæŽ¨å¥¨ã«ãªã‚Šã€``filtered_reasons``ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚ã“れã¯ã€æœ€åˆã®ç†ç”±ã ã‘ã§ãªãã€æ›´æ–°ãŒãƒ•ィルタリングã•れãŸã™ã¹ã¦ã®ç†ç”±ã‚’示ã™ãŸã‚ã«è¡Œã‚れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:295 msgid "win_updates - Deprecated the ``use_scheduled_task`` option as it is no longer used." msgstr "win_updates - 使用ã•れãªããªã£ãŸ ``use_scheduled_task`` オプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:296 msgid "win_updates - Deprecated the ``whitelist`` and ``blacklist`` options in favour of ``accept_list`` and ``reject_list`` respectively to conform to the new standards used in Ansible for these types of options." msgstr "win_updates - ``whitelist`` オプションãŠã‚ˆã³ ``blacklist`` オプションãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚オプションã®ç¨®é¡žã«ã¤ã„㦠Ansible ã§ä½¿ç”¨ã•れる新ã—ã„æ¨™æº–ã«æº–æ‹ ã™ã‚‹ãŸã‚ã«ãれãžã‚Œ ``accept_list`` 㨠``reject_list`` ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:301 msgid "ali_instance_info - marked removal version of deprecated parameters ``availability_zone`` and ``instance_names`` (https://github.com/ansible-collections/community.general/issues/2429)." msgstr "ali_instance_info - éžæŽ¨å¥¨ã®ãƒ‘ラメーター``availability_zone``ã¨``instance_names``ã®å‰Šé™¤ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç¤ºã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/issues/2429)。" #: ../../rst/porting_guides/porting_guide_4.rst:302 msgid "serverless - deprecating parameter ``functions`` because it was not used in the code (https://github.com/ansible-collections/community.general/pull/2845)." msgstr "serverless - コードã§ä½¿ç”¨ã•れã¦ã„ãªã„ãŸã‚パラメーター ``functions`` ã‚’éžæŽ¨å¥¨åŒ–ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2845)。" #: ../../rst/porting_guides/porting_guide_4.rst:307 msgid "hashi_vault collection - support for Python 2 will be dropped in version ``2.0.0`` of ``community.hashi_vault`` (https://github.com/ansible-collections/community.hashi_vault/issues/81)." msgstr "hashi_vault コレクション - Python 2 ã®ã‚µãƒãƒ¼ãƒˆãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³``2.0.0``ã®``community.hashi_vault``ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.hashi_vault/issues/81).)。" #: ../../rst/porting_guides/porting_guide_4.rst:310 msgid "Porting Guide for v4.1.0" msgstr "v4.1.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:327 msgid "Add custom_image module" msgstr "custom_image モジュールã®è¿½åŠ " #: ../../rst/porting_guides/porting_guide_4.rst:337 msgid "ome_firmware_baseline - Module supports check mode, and allows the modification and deletion of firmware baselines." msgstr "ome_firmware_baseline - モジュールã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã€ãƒ•ァームウェアベースラインã®å¤‰æ›´ã‚„削除をå¯èƒ½ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:338 msgid "ome_firmware_catalog - Module supports check mode, and allows the modification and deletion of firmware catalogs." msgstr "ome_firmware_catalog - モジュールã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã€ãƒ•ァームウェアカタログã®å¤‰æ›´ã‚„削除をå¯èƒ½ã«ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:343 msgid "Improve ``fortios_configuration_fact`` to use multiple selectors concurrently." msgstr "複数ã®ã‚»ãƒ¬ã‚¯ã‚¿ãƒ¼ã‚’åŒæ™‚ã«ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã« ``fortios_configuration_fact`` を改善ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:344 msgid "Support ``check_mode`` in all cofigurationAPI-based modules." msgstr "ã™ã¹ã¦ã® cofigurationAPI ベースã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® ``check_mode`` をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:345 msgid "Support filtering for fact gathering modules ``fortios_configuration_fact`` and ``fortios_monitor_fact``." msgstr "ファクトåŽé›†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« ``fortios_configuration_fact`` ãŠã‚ˆã³ ``fortios_monitor_fact`` ã®ãƒ•ィルタリングをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:346 msgid "Support moving policy in ``firewall_central_snat_map``." msgstr "``firewall_central_snat_map`` ã§ã®ç§»è¡Œãƒãƒªã‚·ãƒ¼ã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/porting_guides/porting_guide_4.rst:347 msgid "Unify schemas for monitor API." msgstr "モニター API ã®ã‚¹ã‚­ãƒ¼ãƒžã®çµ±ä¸€" #: ../../rst/porting_guides/porting_guide_4.rst:352 msgid "packages is now a required Python package and gets installed via Ansible 2.10+." msgstr "パッケージãŒå¿…è¦ãª Python パッケージã«ãªã‚Šã€Ansible 2.10 以é™ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:360 msgid "win_reboot - Removed ``shutdown_timeout`` and ``shutdown_timeout_sec`` which has not done anything since Ansible 2.5." msgstr "win_reboot - ``shutdown_timeout`` ãŠã‚ˆã³ ``shutdown_timeout_sec`` を削除ã—ã¾ã—ãŸãŒã€Ansible 2.5 以é™ã¯å®Ÿè¡Œã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_4.rst:368 msgid "win_reboot - Unreachable hosts can be ignored with ``ignore_errors: True``, this ability will be removed in a future version. Use ``ignore_unreachable: True`` to ignore unreachable hosts instead. - https://github.com/ansible-collections/ansible.windows/issues/62" msgstr "win_reboot - ``ignore_errors: True`` ã§åˆ°é”ã§ããªã„ホストを無視ã§ãã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ä»Šå¾Œã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚代ã‚り㫠``ignore_unreachable: True`` を使用ã—ã¦ã€åˆ°é”ä¸èƒ½ãªãƒ›ã‚¹ãƒˆã‚’無視ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/ansible.windows/issues/62)。" #: ../../rst/porting_guides/porting_guide_4.rst:378 msgid "All inventory and vault scripts will be removed from community.general in version 4.0.0. If you are referencing them, please update your references to the new `contrib-scripts GitHub repository `_ so your workflow will not break once community.general 4.0.0 is released (https://github.com/ansible-collections/community.general/pull/2697)." msgstr "インベントリーãŠã‚ˆã³ vault スクリプトã¯ã™ã¹ã¦ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 4.0.0 ã® community.general ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚ãれらをå‚ç…§ã™ã‚‹å ´åˆã¯ã€æ–°ã—ã„ `contrib-scripts GitHub repository `_ ã¸ã®å‚ç…§ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。ã“れã«ã‚ˆã‚Šã€community.general 4.0.0 ãŒãƒªãƒªãƒ¼ã‚¹ã•れã¦ã‚‚ワークフローãŒç ´æã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“(https://github.com/ansible-collections/community.general/pull/2697)" #: ../../rst/porting_guides/porting_guide_4.rst:379 msgid "The nios, nios_next_ip, nios_next_network lookup plugins, the nios documentation fragment, and the nios_host_record, nios_ptr_record, nios_mx_record, nios_fixed_address, nios_zone, nios_member, nios_a_record, nios_aaaa_record, nios_network, nios_dns_view, nios_txt_record, nios_naptr_record, nios_srv_record, nios_cname_record, nios_nsgroup, and nios_network_view module have been deprecated and will be removed from community.general 5.0.0. Please install the `infoblox.nios_modules `_ collection instead and use its plugins and modules (https://github.com/ansible-collections/community.general/pull/2458)." msgstr "niosã€nios_next_ipã€nios_next_networkルックアッププラグインã€niosドキュメントフラグメントã€ãŠã‚ˆã³nios_host_recordã€nios_ptr_recordã€nios_mx_recordã€nios_fixed_addressã€nios_zoneã€nios_memberã€nios_a_recordã€nios_aaaa_recordã€nios_networkã€nios_dns_viewã€nios_txt_recordã€nios_naptr_recordã€nios_srv_recordã€nios_cname_recordã€nios_nsgroupã€ãŠã‚ˆã³ nios_network_view モジュールã¯éžæŽ¨å¥¨ã«ãªã‚Šã€community.general 5.0.0ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚代ã‚り㫠`infoblox.nios_modules `_ をインストールã—ã€ãã®ãƒ—ラグインã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/2458)。" #: ../../rst/porting_guides/porting_guide_4.rst:380 msgid "The vendored copy of ``ipaddress`` will be removed in community.general 4.0.0. Please switch to ``ipaddress`` from the Python 3 standard library, or `from pypi `_, if your code relies on the vendored version of ``ipaddress`` (https://github.com/ansible-collections/community.general/pull/2459)." msgstr "``ipaddress`` ã®ãƒ™ãƒ³ãƒ€ãƒ¼ã‚³ãƒ”ーã¯ã€community.general 4.0.0 ã§å‰Šé™¤ã•れã¾ã™ã€‚Python 3 標準ライブラリーã‹ã‚‰ ``ipaddress`` ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã‹ã€ã‚³ãƒ¼ãƒ‰ãŒãƒ™ãƒ³ãƒ€ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``ipaddress`` ã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ `from pypi `_ ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/2459。" #: ../../rst/porting_guides/porting_guide_4.rst:381 msgid "linode - parameter ``backupsenabled`` is deprecated and will be removed in community.general 5.0.0 (https://github.com/ansible-collections/community.general/pull/2410)." msgstr "linode - パラメーター``backupsenabled``ã¯éžæŽ¨å¥¨ã«ãªã‚Šã€community.general 5.0.0ã§å‰Šé™¤ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2410)。" #: ../../rst/porting_guides/porting_guide_4.rst:382 msgid "lxd inventory plugin - the plugin will require ``ipaddress`` installed when used with Python 2 from community.general 4.0.0 on. ``ipaddress`` is part of the Python 3 standard library, but can be installed for Python 2 from pypi (https://github.com/ansible-collections/community.general/pull/2459)." msgstr "lxd inventory プラグイン - プラグイン㯠community.general 4.0.0 ã® Python 2 ã§ä½¿ç”¨ã™ã‚‹éš›ã« ``ipaddress`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``ipaddress`` 㯠Python 3 標準ライブラリーã®ä¸€éƒ¨ã§ã™ãŒã€pypi ã‹ã‚‰ Python 2 用ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2459)。" #: ../../rst/porting_guides/porting_guide_4.rst:383 msgid "scaleway_security_group_rule - the module will require ``ipaddress`` installed when used with Python 2 from community.general 4.0.0 on. ``ipaddress`` is part of the Python 3 standard library, but can be installed for Python 2 from pypi (https://github.com/ansible-collections/community.general/pull/2459)." msgstr "scaleway_security_group_rule - モジュールã¯ã€community.general 4.0.0 ã® Python 2 ã§ä½¿ç”¨ã™ã‚‹éš›ã« ``ipaddress`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``ipaddress`` 㯠Python 3 標準ライブラリーã®ä¸€éƒ¨ã§ã™ãŒã€pypi ã‹ã‚‰ Python 2 用ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2459)。" #: ../../rst/porting_guides/porting_guide_4.rst:386 msgid "inspur.sm" msgstr "inspur.sm" #: ../../rst/porting_guides/porting_guide_4.rst:388 msgid "add_ad_group - This feature will be removed in inspur.sm.add_ad_group 3.0.0. replaced with inspur.sm.ad_group." msgstr "add_ad_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.add_ad_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ad_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:389 msgid "add_ldap_group - This feature will be removed in inspur.sm.add_ldap_group 3.0.0. replaced with inspur.sm.ldap_group." msgstr "add_ldap_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.add_ldap_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ldap_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:390 msgid "add_user - This feature will be removed in inspur.sm.add_user 3.0.0. replaced with inspur.sm.user." msgstr "add_user - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.add_user 3.0.0. ã§å‰Šé™¤ã•れã€inspur.sm.user ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:391 msgid "add_user_group - This feature will be removed in inspur.sm.add_user_group 3.0.0. replaced with inspur.sm.user_group." msgstr "add_user_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.add_user_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.user_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:392 msgid "del_ad_group - This feature will be removed in inspur.sm.del_ad_group 3.0.0. replaced with inspur.sm.ad_group." msgstr "del_ad_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.del_ad_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ad_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:393 msgid "del_ldap_group - This feature will be removed in inspur.sm.del_ldap_group 3.0.0. replaced with inspur.sm.ldap_group." msgstr "del_ldap_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.del_ldap_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ldap_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:394 msgid "del_user - This feature will be removed in inspur.sm.del_user 3.0.0. replaced with inspur.sm.user." msgstr "del_user - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.del_user 3.0.0. ã§å‰Šé™¤ã•れã€inspur.sm.user ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:395 msgid "del_user_group - This feature will be removed in inspur.sm.del_user_group 3.0.0. replaced with inspur.sm.user_group." msgstr "del_user_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.del_user_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.user_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:396 msgid "edit_ad_group - This feature will be removed in inspur.sm.edit_ad_group 3.0.0. replaced with inspur.sm.ad_group." msgstr "edit_ad_group - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.edit_ad_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ad_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:397 msgid "edit_ldap_group - This feature will be removed in inspur.sm.edit_ldap_group 3.0.0. replaced with inspur.sm.ldap_group." msgstr "edit_ldap_group - ã“ã®æ©Ÿèƒ½ã¯ã€inspur.sm.edit_ldap_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.ldap_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:398 msgid "edit_user - This feature will be removed in inspur.sm.edit_user 3.0.0. replaced with inspur.sm.user." msgstr "edit_user - ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.edit_user 3.0.0. ã§å‰Šé™¤ã•れã€inspur.sm.user ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:399 msgid "edit_user_group - This feature will be removed in inspur.sm.edit_user_group 3.0.0. replaced with inspur.sm.user_group." msgstr "edit_user_group: ã“ã®æ©Ÿèƒ½ã¯ inspur.sm.edit_user_group 3.0.0 ã§å‰Šé™¤ã•れã€inspur.sm.user_group ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:402 msgid "Porting Guide for v4.0.0" msgstr "v4.0.0 ã®ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_4.rst:408 #: ../../rst/porting_guides/porting_guide_4.rst:429 #: ../../rst/porting_guides/porting_guide_4.rst:482 #: ../../rst/porting_guides/porting_guide_4.rst:586 #: ../../rst/porting_guides/porting_guide_4.rst:712 msgid "Ansible-core" msgstr "Ansible-core" #: ../../rst/porting_guides/porting_guide_4.rst:410 msgid "ansible-test - The ``pylint`` sanity test no longer correctly detects \"bad\" variable names for non-constants. See https://github.com/PyCQA/pylint/issues/3701 for additional details." msgstr "ansible-test - ``pylint`` å¥å…¨æ€§ãƒ†ã‚¹ãƒˆã¯ã€éžåˆ¶ç´„ã®ãŸã‚\"bad\" 変数åã‚’æ­£ã—ãæ¤œå‡ºã—ãªããªã‚Šã¾ã—ãŸã€‚詳細ã¯ã€https://github.com/PyCQA/pylint/issues/3701 ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:423 msgid "Modules for monitor API are not versioned yet." msgstr "モニター API 用ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã¾ã ãƒãƒ¼ã‚¸ãƒ§ãƒ³åŒ–ã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_4.rst:431 msgid "Made SCM collections be reinstalled regardless of ``--force`` being present." msgstr "作æˆã•れ㟠SCM コレクションã¯ã€``--force`` ãŒå­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã«é–¢ã‚らãšå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:432 msgid "NetBSD virtualization facts (specifically ``ansible_virtualization_type``) now returns a more accurate value by checking the value of the ``machdep.hypervisor`` ``sysctl`` key. This change is breaking because in some cases previously, we would erroneously report ``xen`` even when the target is not running on Xen. This prevents that behavior in most cases. (https://github.com/ansible/ansible/issues/69352)" msgstr "NetBSD 仮想化ファクト(具体的ã«ã¯ ``ansible_virtualization_type``)ã¯ã€``machdep.hypervisor`` ``sysctl`` キーã®å€¤ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã€ã‚ˆã‚Šæ­£ç¢ºãªå€¤ã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚以å‰ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒ Xen ã§å®Ÿè¡Œã—ã¦ã„ãªã„å ´åˆã§ã‚‚ ``xen``を誤ã£ã¦å ±å‘Šã—ã¦ã„ãŸãŸã‚ã€ã“ã®å¤‰æ›´ã¯é‡è¦ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã»ã¨ã‚“ã©ã®å ´åˆã€ãã®å‹•作ãŒé˜»æ­¢ã•れã¾ã™ï¼ˆhttps://github.com/ansible/ansible/issues/69352)。" #: ../../rst/porting_guides/porting_guide_4.rst:433 msgid "Replaced the in-tree dependency resolver with an external implementation that pip >= 20.3 uses now by default — ``resolvelib``. (https://github.com/ansible/ansible/issues/71784)" msgstr "ツリー内ã®ä¾å­˜é–¢ä¿‚リゾルãƒãƒ¼ãŒã€pip> = 20.3ãŒãƒ‡ãƒ•ォルトã§ä½¿ç”¨ã™ã‚‹å¤–部実装``resolvelib``ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸï¼ˆhttps://github.com/ansible/ansible/issues/71784。" #: ../../rst/porting_guides/porting_guide_4.rst:434 msgid "The ``meta`` module now supports tags for user-defined tasks. Internal ``meta`` tasks continue to always run. (https://github.com/ansible/ansible/issues/64558)" msgstr "``meta`` モジュールã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚内部 ``meta`` タスクã¯å¸¸ã«å®Ÿè¡Œã•れã¾ã™ï¼ˆhttps://github.com/ansible/ansible/issues/64558)。" #: ../../rst/porting_guides/porting_guide_4.rst:440 msgid "Removed vendored ipaddress package from collection. If you use ansible_collections.ansible.netcommon.plugins.module_utils.compat.ipaddress in your collection, you will need to change this to import ipaddress instead. If your content using ipaddress supports Python 2.7, you will additionally need to make sure that the user has the ipaddress package installed. Please refer to https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_best_practices.html#importing-and-using-shared-code to see how to safely import external packages that may be missing from the user's system A backport of ipaddress for Python 2.7 is available at https://pypi.org/project/ipaddress/" msgstr "コレクションã‹ã‚‰ãƒ™ãƒ³ãƒ€ãƒ¼åŒ–ã•れ㟠ipaddress パッケージãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚コレクションã®ansible_collections.ansible.netcommon.plugins.module_utils.compat.ipaddress を使用ã™ã‚‹å ´åˆã¯ã€ä»£ã‚り㫠ipaddress をインãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã“れを変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ipaddress を使用ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㌠Python 2.7 ã«å¯¾å¿œã—ã¦ã„ã‚‹å ´åˆã¯ã€ã•らã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ipaddress パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ユーザーã®ã‚·ã‚¹ãƒ†ãƒ  A ã«æ¬ è½ã—ã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚る外部パッケージを安全ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_best_practices.html#importing-and-using-shared-codeã‚’å‚ç…§ã—ã¦ãã ã•ã„。Python 2.7用ã®ipaddressã®ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã¯ã€https://pypi.org/project/ipaddress/ã§åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:450 msgid "If you use Ansible 2.9 and these plugins or modules from this collection, community.general 3.0.0 results in errors when trying to use the DellEMC content by FQCN, like ``community.general.idrac_firmware``. Since Ansible 2.9 is not able to use redirections, you will have to adjust your playbooks and roles manually to use the new FQCNs (``dellemc.openmanage.idrac_firmware`` for the previous example) and to make sure that you have ``dellemc.openmanage`` installed." msgstr "Ansible 2.9 ã¨ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ—ラグインやモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã€community.general 3.0.0 ã§ã¯ã€``community.general.idrac_firmware`` ã®ã‚ˆã†ã« FQCN ã«ã‚ˆã‚‹ DellEMC コンテンツを使用ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚Ansible 2.9 ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ããªã„ãŸã‚ã€æ–°ã—ã„ FQCN (å‰ã®ä¾‹ã§ã¯ ``dellemc.openmanage.idrac_firmware``) を使用ã—ã€``dellemc.openmanage`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã‚’手動ã§èª¿æ•´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:453 msgid "If you use ansible-base 2.10 or newer and did not install Ansible 4.0.0, but installed (and/or upgraded) community.general manually, you need to make sure to also install the ``dellemc.openmanage`` collection if you are using any of these plugins or modules. While ansible-base 2.10 or newer can use the redirects that community.general 3.0.0 adds, the collection they point to (such as dellemc.openmanage) must be installed for them to work." msgstr "ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã¦ã€Ansible 4.0.0 をインストールã›ãšã€æ‰‹å‹•ã§ community.general をインストール (ã¾ãŸã¯ã‚¢ãƒƒãƒ—グレード) ã—ã€ã“ã®ãƒ—ラグインã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``dellemc.openmanage`` コレクションもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ansible-base 2.10 以é™ã§ã¯ã€community.general 3.0.0 ãŒè¿½åŠ ã—ãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå…ˆã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (dellemc.openmanage ãªã©) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã¨å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_4.rst:455 msgid "gitlab_deploy_key - if for an already existing key title a different public key was given as parameter nothing happened, now this changed so that the public key is updated to the new value (https://github.com/ansible-collections/community.general/pull/1661)." msgstr "gitlab_deploy_key - 既存ã®éµã‚¿ã‚¤ãƒˆãƒ«ã«å¯¾ã—ã¦ã€ãƒ‘ラメーターã¨ã—ã¦åˆ¥ã®å…¬é–‹éµãŒä½•ã‚‚èµ·ã“らãªã‹ã£ãŸå ´åˆã€ã“れãŒå¤‰æ›´ã•れã€å…¬é–‹éµãŒæ–°ã—ã„å€¤ã«æ›´æ–°ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1661)。" #: ../../rst/porting_guides/porting_guide_4.rst:456 msgid "java_keystore - instead of failing, now overwrites keystore if the alias (name) is changed. This was originally the intended behavior, but did not work due to a logic error. Make sure that your playbooks and roles do not depend on the old behavior of failing instead of overwriting (https://github.com/ansible-collections/community.general/issues/1671)." msgstr "java_keystore - 失敗ã™ã‚‹ä»£ã‚りã«ã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ï¼ˆåå‰ï¼‰ãŒå¤‰æ›´ã—ãŸå ´åˆã«ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã‚’上書ãã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã¯å…ƒã€…æ„図ã•れãŸå‹•作ã§ã—ãŸãŒã€è«–ç†ã‚¨ãƒ©ãƒ¼ã®ãŸã‚ã«æ©Ÿèƒ½ã—ã¾ã›ã‚“ã§ã—ãŸã€‚Playbook ã¨ãƒ­ãƒ¼ãƒ«ãŒã€ä¸Šæ›¸ãã™ã‚‹ä»£ã‚りã«å¤±æ•—ã™ã‚‹ã¨ã„ã†å¤ã„動作ã«ä¾å­˜ã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/issues/1671)。" #: ../../rst/porting_guides/porting_guide_4.rst:457 msgid "java_keystore - instead of failing, now overwrites keystore if the passphrase is changed. Make sure that your playbooks and roles do not depend on the old behavior of failing instead of overwriting (https://github.com/ansible-collections/community.general/issues/1671)." msgstr "java_keystore - 失敗ã™ã‚‹ä»£ã‚りã«ã€ãƒ‘スフレーズãŒå¤‰æ›´ã—ãŸå ´åˆã«ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã‚’上書ãã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚Playbook ã¨ãƒ­ãƒ¼ãƒ«ãŒã€ä¸Šæ›¸ãã™ã‚‹ä»£ã‚りã«å¤±æ•—ã™ã‚‹ã¨ã„ã†å¤ã„動作ã«ä¾å­˜ã—ã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/issues/1671)。" #: ../../rst/porting_guides/porting_guide_4.rst:458 msgid "one_image - use pyone instead of python-oca (https://github.com/ansible-collections/community.general/pull/2032)." msgstr "one_image - python-oca ã®ä»£ã‚り㫠pyone を使用ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2032)。" #: ../../rst/porting_guides/porting_guide_4.rst:464 msgid "Generic FortiOS Module - FOS module to issue generic request with Ansible." msgstr "汎用 FortiOS モジュール - Ansible ã§æ±Žç”¨è¦æ±‚を発行ã™ã‚‹ãŸã‚ã® FOS モジュール。" #: ../../rst/porting_guides/porting_guide_4.rst:465 msgid "Support for FOS Monitor API - several modules are new for monitor API." msgstr "FOS Monitor API ã®ã‚µãƒãƒ¼ãƒˆ - 複数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒ¢ãƒ‹ã‚¿ãƒ¼ API ç”¨ã«æ–°ãŸã«è¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:466 msgid "Unified Collection - The fortios collection itself will be adapting any FOS platforms." msgstr "çµ±åˆã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ - fortios コレクション自体ãŒã€FOS プラットフォームã«é©å¿œã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:471 msgid "auth field now required for anything other than Basic authentication" msgstr "Basic èªè¨¼ä»¥å¤–ã®ã™ã¹ã¦ã®ãƒ•ィールドã«èªè¨¼ãƒ•ィールドãŒå¿…è¦ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:476 msgid "All role variables are now prefixed with ``foreman_`` to avoid clashes with similarly named variables from roles outside this collection." msgstr "ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å¤–ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã®åŒæ§˜ã®åå‰ã®å¤‰æ•°ã¨ã®è¡çªã‚’回é¿ã™ã‚‹ãŸã‚ã€ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«å¤‰æ•°ã«ã¯ ``foreman_`` ã®ãƒ—レフィックスãŒä»˜ã‘られã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:484 msgid "A collection can be reinstalled with new version requirements without using the ``--force`` flag. The collection's dependencies will also be updated if necessary with the new requirements. Use ``--upgrade`` to force transitive dependency updates." msgstr "コレクションã¯ã€``--force`` フラグを使用ã›ãšã«ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®è¦ä»¶ã§å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚ã¾ãŸã€æ–°ã—ã„è¦ä»¶ã§å¿…è¦ãªå ´åˆã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¾å­˜é–¢ä¿‚ã‚‚æ›´æ–°ã•れã¾ã™ã€‚``--upgrade`` を使用ã—ã¦ã€æŽ¨ç§»çš„ãªä¾å­˜é–¢ä¿‚ã®æ›´æ–°ã‚’強制ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:485 msgid "AnsibleModule - use ``ArgumentSpecValidator`` class for validating argument spec and remove private methods related to argument spec validation. Any modules using private methods should now use the ``ArgumentSpecValidator`` class or the appropriate validation function." msgstr "AnsibleModule - 引数仕様を検証ã™ã‚‹ãŸã‚ã« ``ArgumentSpecValidator`` クラスを使用ã—ã€å¼•æ•°ä»•æ§˜ã®æ¤œè¨¼ã«é–¢é€£ã™ã‚‹ãƒ—ライベートメソッドを削除ã—ã¾ã™ã€‚プライベートメソッドを使用ã™ã‚‹ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€``ArgumentSpecValidator`` クラスã¾ãŸã¯é©åˆ‡ãªæ¤œè¨¼æ©Ÿèƒ½ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:486 msgid "Declared ``resolvelib >= 0.5.3, < 0.6.0`` a direct dependency of ansible-core. Refs: - https://github.com/sarugaku/resolvelib - https://pypi.org/p/resolvelib - https://pradyunsg.me/blog/2020/03/27/pip-resolver-testing" msgstr "ansible-core ã®ç›´æŽ¥ã®ä¾å­˜é–¢ä¿‚``resolvelib >= 0.5.3, < 0.6.0`` ãŒå®£è¨€ã•れã¾ã™ã€‚https://github.com/sarugaku/resolvelibã€https://pypi.org/p/resolvelibã€https://pradyunsg.me/blog/2020/03/27/pip-resolver-testing ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:491 msgid "It became possible to install Ansible Collections from local folders and namespaces folder similar to SCM structure with multiple collections." msgstr "複数ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æŒã¤ SCM 構造ã¨åŒæ§˜ã«ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ォルダーãŠã‚ˆã³ namespace フォルダーã‹ã‚‰ Ansible Collections をインストールã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:492 msgid "It became possible to upgrade Ansible collections from Galaxy servers using the ``--upgrade`` option with ``ansible-galaxy collection install``." msgstr "``ansible-galaxy collection install`` ã§ ``--upgrade`` オプションを使用ã—ã¦ã€Galaxy サーãƒãƒ¼ã‹ã‚‰ Ansible コレクションをアップグレードã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:493 msgid "Support for role argument specification validation at role execution time. When a role contains an argument spec, an implicit validation task is inserted at the start of role execution." msgstr "ロール実行時ã«ãƒ­ãƒ¼ãƒ«å¼•æ•°ã®ä»•様検証ã®ã‚µãƒãƒ¼ãƒˆã€‚ロールã«å¼•æ•°ã®ä»•様ãŒå«ã¾ã‚Œã‚‹å ´åˆã¯ã€æš—é»™çš„ãªæ¤œè¨¼ã‚¿ã‚¹ã‚¯ãŒãƒ­ãƒ¼ãƒ«å®Ÿè¡Œã®é–‹å§‹æ™‚ã«æŒ¿å…¥ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:494 msgid "add ``ArgumentSpecValidator`` class for validating parameters against an argument spec outside of ``AnsibleModule`` (https://github.com/ansible/ansible/pull/73335)" msgstr "``AnsibleModule`` (https://github.com/ansible/ansible/pull/73335) ã«å«ã¾ã‚Œãªã„引数仕様ã«å¯¾ã—ã¦ãƒ‘ラメーターを検証ã™ã‚‹ ``ArgumentSpecValidator`` クラスを追加ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:500 msgid "Remove deprecated connection arguments from netconf_config" msgstr "netconf_config ã‹ã‚‰éžæŽ¨å¥¨ã®æŽ¥ç¶šå¼•数を削除" #: ../../rst/porting_guides/porting_guide_4.rst:503 msgid "arista.eos" msgstr "arista.eos" #: ../../rst/porting_guides/porting_guide_4.rst:505 msgid "Requires ansible.netcommon v2.0.0+ to support `ansible_network_single_user_mode` and `ansible_network_import_modules` - Please refer to ansible.netcommon `changelog `_ for more details." msgstr "`ansible_network_single_user_mode` ãŠã‚ˆã³ `ansible_network_import_modules` をサãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ansible.netcommon v2.0.0 以é™ãŒå¿…è¦ã§ã™ã€‚詳細ã¯ã€ansible.netcommon ã® `changelog `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:508 msgid "cisco.asa" msgstr "cisco.asa" #: ../../rst/porting_guides/porting_guide_4.rst:510 msgid "Please refer to ansible.netcommon `changelog ` for more details." msgstr "詳細ã¯ã€ansible.netcommon ã® `changelog ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:511 #: ../../rst/porting_guides/porting_guide_4.rst:517 #: ../../rst/porting_guides/porting_guide_4.rst:523 #: ../../rst/porting_guides/porting_guide_4.rst:530 #: ../../rst/porting_guides/porting_guide_4.rst:561 msgid "Requires ansible.netcommon v2.0.0+ to support `ansible_network_single_user_mode` and `ansible_network_import_modules`." msgstr "`ansible_network_single_user_mode` ãŠã‚ˆã³ `ansible_network_import_modules` をサãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ansible.netcommon v2.0.0 以é™ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:516 #: ../../rst/porting_guides/porting_guide_4.rst:522 #: ../../rst/porting_guides/porting_guide_4.rst:529 #: ../../rst/porting_guides/porting_guide_4.rst:560 #: ../../rst/porting_guides/porting_guide_4.rst:578 msgid "Please refer to ansible.netcommon `changelog `_ for more details." msgstr "詳細ã¯ã€ansible.netcommon `changelog `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:524 #: ../../rst/porting_guides/porting_guide_4.rst:580 msgid "ipaddress is no longer in ansible.netcommon. For Python versions without ipaddress (< 3.0), the ipaddress package is now required." msgstr "ipaddress 㯠ansible.netcommon ã§ã¯ãªããªã‚Šã¾ã—ãŸã€‚ipaddress (< 3.0) ã®ãªã„ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ipaddress パッケージãŒå¿…è¦ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:540 msgid "mysql_replication - add deprecation warning that the ``Is_Slave`` and ``Is_Master`` return values will be replaced with ``Is_Primary`` and ``Is_Replica`` in ``community.mysql`` 3.0.0 (https://github.com/ansible-collections/community.mysql/pull/147)." msgstr "mysql_replication - ``Is_Slave`` ãŠã‚ˆã³ ``Is_Master`` ã®æˆ»ã‚Šå€¤ãŒ ``community.mysql`` 3.0.0 ã® ``Is_Primary`` ãŠã‚ˆã³ ``Is_Replica`` ã«ç½®ãæ›ãˆã‚‰ã‚ŒãŸã“ã¨ã‚’示ã™éžæŽ¨å¥¨ã®è­¦å‘Šã‚’追加ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/pull/147)。" #: ../../rst/porting_guides/porting_guide_4.rst:541 msgid "mysql_replication - the choices of the ``state`` option containing ``master`` will be finally replaced with the alternative ``primary`` choices in ``community.mysql`` 3.0.0, add deprecation warnings (https://github.com/ansible-collections/community.mysql/pull/150)." msgstr "mysql_replication - ``master`` ãŒå«ã¾ã‚Œã‚‹ ``state`` オプションã®é¸æŠžãŒã€æœ€çµ‚的㫠``community.mysql`` 3.0.0 ã®ä»£æ›¿ ``primary`` ã®é¸æŠžè‚¢ã«ç½®ãæ›ãˆã‚‰ã‚Œã€éžæŽ¨å¥¨ã®è­¦å‘Šã‚’追加ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/pull/150)。" #: ../../rst/porting_guides/porting_guide_4.rst:543 msgid "mysql_replication - the return value ``Is_Slave`` and ``Is_Master`` will be replaced with ``Is_Replica`` and ``Is_Primary`` in ``community.mysql`` 3.0.0 (https://github.com/ansible-collections/community.mysql/issues/145)." msgstr "mysql_replication - 戻り値 ``Is_Slave`` ãŠã‚ˆã³ ``Is_Master`` ã¯ã€``community.mysql`` 3.0.0 ã§ ``Is_Replica`` ãŠã‚ˆã³ ``Is_Primary`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/issues/145)。" #: ../../rst/porting_guides/porting_guide_4.rst:545 msgid "mysql_replication - the word ``master`` in messages returned by the module will be replaced with ``primary`` in ``community.mysql`` 3.0.0 (https://github.com/ansible-collections/community.mysql/issues/145)." msgstr "mysql_replication - モジュールã«ã‚ˆã£ã¦è¿”ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å˜èªž ``master`` ã¯ã€``community.mysql`` 3.0.0 ã§ ``primary`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/issues/145)。" #: ../../rst/porting_guides/porting_guide_4.rst:546 msgid "mysql_replication - the word ``slave`` in messages returned by the module replaced with ``replica`` (https://github.com/ansible-collections/community.mysql/issues/98)." msgstr "mysql_replication - ``replica`` ã«ç½®ãæ›ãˆã‚‰ã‚ŒãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦è¿”ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å˜èªž ``slave`` ã§ã™ï¼ˆhttps://github.com/ansible-collections/community.mysql/issues/98)。" #: ../../rst/porting_guides/porting_guide_4.rst:552 msgid "New module fortios_configuration_fact" msgstr "æ–°ã—ã„モジュール fortios_configuration_fact" #: ../../rst/porting_guides/porting_guide_4.rst:553 msgid "New module fortios_json_generic" msgstr "æ–°ã—ã„モジュール fortios_json_generic" #: ../../rst/porting_guides/porting_guide_4.rst:554 msgid "New module fortios_monitor" msgstr "æ–°ã—ã„モジュール fortios_monitor" #: ../../rst/porting_guides/porting_guide_4.rst:555 msgid "New module fortios_monitor_fact" msgstr "æ–°ã—ã„モジュール fortios_monitor_fact" #: ../../rst/porting_guides/porting_guide_4.rst:571 msgid "refactored client to inherit from AnsibleModule" msgstr "AnsibleModule ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ãƒªãƒ•ァクタークライアント" #: ../../rst/porting_guides/porting_guide_4.rst:572 msgid "supports OpenID Connect authentication protocol" msgstr "OpenID Connect ã«ã‚ˆã‚‹èªè¨¼ãƒ—ロトコルã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/porting_guides/porting_guide_4.rst:573 msgid "supports bearer tokens for authentication" msgstr "èªè¨¼ç”¨ã®ãƒ™ã‚¢ãƒ©ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/porting_guides/porting_guide_4.rst:579 msgid "Requires ansible.netcommon v2.0.0+ to support `ansible_network_single_user_mode` and `ansible_network_import_modules`" msgstr "`ansible_network_single_user_mode` をサãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ansible.netcommon v2.0.0 以é™ãŠã‚ˆã³ `ansible_network_import_modules` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:588 msgid "Removed `SharedPluginLoaderObj` class from ansible.plugins.strategy. It was deprecated in favor of using the standard plugin loader." msgstr "標準ã®ãƒ—ラグインローダーã®ä½¿ç”¨ãŒæŽ¡ç”¨ã•れãŸãŸã‚ã€ansible.plugins.strategy ã‹ã‚‰ `SharedPluginLoaderObj` クラスãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:589 msgid "Removed `_get_item()` alias from callback plugin base class which had been deprecated in favor of `_get_item_label()`." msgstr "éžæŽ¨å¥¨ã«ãªã£ã¦ã„㟠`_get_item()` エイリアスをコールãƒãƒƒã‚¯ãƒ—ラグインベースクラスã‹ã‚‰å‰Šé™¤ã•れã€`_get_item_label()` ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:590 msgid "The \"user\" parameter was previously deprecated and is now removed in favor of \"scope\"" msgstr "「userã€ãƒ‘ラメーターã¯éžæŽ¨å¥¨ã¨ãªã£ã¦ãŠã‚Šã€å‰Šé™¤ã•れã¾ã—ãŸã€‚「scopeã€ãŒæŽ¡ç”¨ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:591 msgid "The deprecated ``ansible.constants.BECOME_METHODS`` has been removed." msgstr "éžæŽ¨å¥¨ã® ``ansible.constants.BECOME_METHODS`` ã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:592 msgid "The deprecated ``ansible.constants.get_config()`` has been removed." msgstr "éžæŽ¨å¥¨ã® ``ansible.constants.get_config()`` ã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:593 msgid "The deprecated ``ansible.constants.mk_boolean()`` has been removed." msgstr "éžæŽ¨å¥¨ã® ``ansible.constants.mk_boolean()`` ã¯å‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:594 msgid "`with_*` loops are no longer optimized for modules whose `name` parameters can take lists (mostly package managers). Use `name` instead of looping over individual names with `with_items` and friends." msgstr "`with_*` ループã¯ã€`name` パラメーターãŒãƒªã‚¹ãƒˆï¼ˆã»ã¨ã‚“ã©ã®å ´åˆã¯ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼‰ã‚’å–ã‚‹ã“ã¨ãŒã§ãるモジュールå‘ã‘ã«æœ€é©åŒ–ã•れãªããªã‚Šã¾ã—ãŸã€‚`with_items` ãŠã‚ˆã³ãƒ•レンズを使用ã—ã¦å€‹åˆ¥åã«ãƒ«ãƒ¼ãƒ—ã™ã‚‹ä»£ã‚りã«ã€`name` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:599 msgid "The ``ome_device_info``, ``idrac_firmware`` and ``idrac_server_config_profile`` modules have now been migrated from community.general to the `dellemc.openmanage `_ Ansible collection. If you use ansible-base 2.10 or newer, redirections have been provided." msgstr "``ome_device_info``ã€``idrac_firmware``ã€ãŠã‚ˆã³ ``idrac_server_config_profile`` モジュールã¯ã€community.general ã‹ã‚‰ `dellemc.openmanage `_ Ansibleコレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚ansible-base 2.10 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:602 msgid "If you use Ansible 2.9 and installed this collection, you need to adjust the FQCNs (``community.general.idrac_firmware`` → ``dellemc.openmanage.idrac_firmware``) and make sure to install the dellemc.openmanage collection." msgstr "Ansible 2.9 を使用ã—ã€ã“ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ãŸå ´åˆã¯ã€FQCN (``community.general.idrac_firmware`` →``dellemc.openmanage.idrac_firmware``) を調整ã—ã€dellemc.openmanage コレクションをインストールã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_4.rst:603 msgid "The deprecated ali_instance_facts module has been removed. Use ali_instance_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ali_instance_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ali_instance_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:604 msgid "The deprecated gluster_heal_info module has been removed. Use gluster.gluster.gluster_heal_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® gluster_heal_info モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠gluster.gluster.gluster_heal_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:605 msgid "The deprecated gluster_peer module has been removed. Use gluster.gluster.gluster_peer instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® gluster_peer モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠gluster.gluster.gluster_peer を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:606 msgid "The deprecated gluster_volume module has been removed. Use gluster.gluster.gluster_volume instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® gluster_volume モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠gluster.gluster.gluster_volume を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)" #: ../../rst/porting_guides/porting_guide_4.rst:607 msgid "The deprecated helm module has been removed. Use community.kubernetes.helm instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® helm モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠community.kubernetes.helm を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:608 msgid "The deprecated hpilo_facts module has been removed. Use hpilo_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® hpilo_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠hpilo_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:609 msgid "The deprecated idrac_redfish_facts module has been removed. Use idrac_redfish_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® idrac_redfish_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠idrac_redfish_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:610 msgid "The deprecated jenkins_job_facts module has been removed. Use jenkins_job_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® jenkins_job_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠jenkins_job_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:611 msgid "The deprecated ldap_attr module has been removed. Use ldap_attrs instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ldap_attr モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ldap_attrs を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:612 msgid "The deprecated memset_memstore_facts module has been removed. Use memset_memstore_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® memset_memstore_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠memset_memstore_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:613 msgid "The deprecated memset_server_facts module has been removed. Use memset_server_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® memset_server_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠memset_server_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:614 msgid "The deprecated na_ontap_gather_facts module has been removed. Use netapp.ontap.na_ontap_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® na_ontap_gather_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠netapp.ontap.na_ontap_volume を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:615 msgid "The deprecated nginx_status_facts module has been removed. Use nginx_status_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® nginx_status_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠nginx_status_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:616 msgid "The deprecated one_image_facts module has been removed. Use one_image_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® one_image_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠one_image_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:617 msgid "The deprecated onepassword_facts module has been removed. Use onepassword_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® onepassword_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠onepassword_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:618 msgid "The deprecated oneview_datacenter_facts module has been removed. Use oneview_datacenter_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_datacenter_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_datacenter_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:619 msgid "The deprecated oneview_enclosure_facts module has been removed. Use oneview_enclosure_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_enclosure_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_enclosure_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:620 msgid "The deprecated oneview_ethernet_network_facts module has been removed. Use oneview_ethernet_network_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_ethernet_network_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_ethernet_network_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:621 msgid "The deprecated oneview_fc_network_facts module has been removed. Use oneview_fc_network_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_fc_network_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_fc_network_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:622 msgid "The deprecated oneview_fcoe_network_facts module has been removed. Use oneview_fcoe_network_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_fcoe_network_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_fcoe_network_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:623 msgid "The deprecated oneview_logical_interconnect_group_facts module has been removed. Use oneview_logical_interconnect_group_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_logical_interconnect_group_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_logical_interconnect_group_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:624 msgid "The deprecated oneview_network_set_facts module has been removed. Use oneview_network_set_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_network_set_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_network_set_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924).)。" #: ../../rst/porting_guides/porting_guide_4.rst:625 msgid "The deprecated oneview_san_manager_facts module has been removed. Use oneview_san_manager_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® oneview_san_manager_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠oneview_san_manager_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:626 msgid "The deprecated online_server_facts module has been removed. Use online_server_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® online_server_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠online_server_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:627 msgid "The deprecated online_user_facts module has been removed. Use online_user_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® online_user_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠online_user_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:628 msgid "The deprecated ovirt module has been removed. Use ovirt.ovirt.ovirt_vm instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_vm を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:629 msgid "The deprecated ovirt_affinity_label_facts module has been removed. Use ovirt.ovirt.ovirt_affinity_label_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_affinity_label_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_affinity_label_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:630 msgid "The deprecated ovirt_api_facts module has been removed. Use ovirt.ovirt.ovirt_api_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_api_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_api_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:631 msgid "The deprecated ovirt_cluster_facts module has been removed. Use ovirt.ovirt.ovirt_cluster_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_cluster_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_cluster_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:632 msgid "The deprecated ovirt_datacenter_facts module has been removed. Use ovirt.ovirt.ovirt_datacenter_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_datacenter_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_datacenter_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:633 msgid "The deprecated ovirt_disk_facts module has been removed. Use ovirt.ovirt.ovirt_disk_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_disk_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_disk_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:634 msgid "The deprecated ovirt_event_facts module has been removed. Use ovirt.ovirt.ovirt_event_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_event_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_event_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:635 msgid "The deprecated ovirt_external_provider_facts module has been removed. Use ovirt.ovirt.ovirt_external_provider_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_external_provider_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_external_provider_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:636 msgid "The deprecated ovirt_group_facts module has been removed. Use ovirt.ovirt.ovirt_group_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_group_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_group_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:637 msgid "The deprecated ovirt_host_facts module has been removed. Use ovirt.ovirt.ovirt_host_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_host_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_host_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:638 msgid "The deprecated ovirt_host_storage_facts module has been removed. Use ovirt.ovirt.ovirt_host_storage_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_host_storage_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_host_storage_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:639 msgid "The deprecated ovirt_network_facts module has been removed. Use ovirt.ovirt.ovirt_network_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_network_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_network_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:640 msgid "The deprecated ovirt_nic_facts module has been removed. Use ovirt.ovirt.ovirt_nic_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_nic_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_nic_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:641 msgid "The deprecated ovirt_permission_facts module has been removed. Use ovirt.ovirt.ovirt_permission_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_permission_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_permission_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:642 msgid "The deprecated ovirt_quota_facts module has been removed. Use ovirt.ovirt.ovirt_quota_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_quota_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_quota_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:643 msgid "The deprecated ovirt_scheduling_policy_facts module has been removed. Use ovirt.ovirt.ovirt_scheduling_policy_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_scheduling_policy_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_scheduling_policy_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:644 msgid "The deprecated ovirt_snapshot_facts module has been removed. Use ovirt.ovirt.ovirt_snapshot_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_snapshot_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_snapshot_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:645 msgid "The deprecated ovirt_storage_domain_facts module has been removed. Use ovirt.ovirt.ovirt_storage_domain_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_storage_domain_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_storage_domain_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:646 msgid "The deprecated ovirt_storage_template_facts module has been removed. Use ovirt.ovirt.ovirt_storage_template_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_storage_template_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_storage_template_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:647 msgid "The deprecated ovirt_storage_vm_facts module has been removed. Use ovirt.ovirt.ovirt_storage_vm_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_storage_vm_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_storage_vm_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:648 msgid "The deprecated ovirt_tag_facts module has been removed. Use ovirt.ovirt.ovirt_tag_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_tag_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_tag_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:649 msgid "The deprecated ovirt_template_facts module has been removed. Use ovirt.ovirt.ovirt_template_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_template_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_template_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:650 msgid "The deprecated ovirt_user_facts module has been removed. Use ovirt.ovirt.ovirt_user_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_user_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_user_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:651 msgid "The deprecated ovirt_vm_facts module has been removed. Use ovirt.ovirt.ovirt_vm_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_vm_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_vm_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:652 msgid "The deprecated ovirt_vmpool_facts module has been removed. Use ovirt.ovirt.ovirt_vmpool_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® ovirt_vmpool_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠ovirt.ovirt.ovirt_vmpool_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:653 msgid "The deprecated purefa_facts module has been removed. Use purestorage.flasharray.purefa_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® purefa_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠purestorage.flasharray.purefa_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:654 msgid "The deprecated purefb_facts module has been removed. Use purestorage.flasharray.purefb_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® purefb_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠purestorage.flasharray.purefb_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:655 msgid "The deprecated python_requirements_facts module has been removed. Use python_requirements_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® python_requirements_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠python_requirements_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:656 msgid "The deprecated redfish_facts module has been removed. Use redfish_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® redfish_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠redfish_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:657 msgid "The deprecated scaleway_image_facts module has been removed. Use scaleway_image_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_image_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_image_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:658 msgid "The deprecated scaleway_ip_facts module has been removed. Use scaleway_ip_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_ip_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_ip_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:659 msgid "The deprecated scaleway_organization_facts module has been removed. Use scaleway_organization_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_organization_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_organization_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:660 msgid "The deprecated scaleway_security_group_facts module has been removed. Use scaleway_security_group_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_security_group_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_security_group_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:661 msgid "The deprecated scaleway_server_facts module has been removed. Use scaleway_server_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_server_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_server_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:662 msgid "The deprecated scaleway_snapshot_facts module has been removed. Use scaleway_snapshot_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_snapshot_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_snapshot_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:663 msgid "The deprecated scaleway_volume_facts module has been removed. Use scaleway_volume_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® scaleway_volume_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠scaleway_volume_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:664 msgid "The deprecated smartos_image_facts module has been removed. Use smartos_image_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® smartos_image_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠smartos_image_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:665 msgid "The deprecated vertica_facts module has been removed. Use vertica_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® vertica_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠vertica_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:666 msgid "The deprecated xenserver_guest_facts module has been removed. Use xenserver_guest_info instead (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "éžæŽ¨å¥¨ã® xenserver_guest_facts モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠xenserver_guest_info を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:667 msgid "The ovirt_facts docs fragment has been removed (https://github.com/ansible-collections/community.general/pull/1924)." msgstr "ovirt_facts ドキュメントã®ãƒ•ラグメントãŒå‰Šé™¤ã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/pull/1924)。" #: ../../rst/porting_guides/porting_guide_4.rst:668 msgid "airbrake_deployment - removed deprecated ``token`` parameter. Use ``project_id`` and ``project_key`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "airbrake_deployment - éžæŽ¨å¥¨ã® ``token`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``project_id`` ãŠã‚ˆã³ ``project_key`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:669 msgid "bigpanda - the alias ``message`` has been removed. Use ``deployment_message`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "bigpanda - エイリアス ``message`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``deployment_message`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:670 msgid "cisco_spark, cisco_webex - the alias ``message`` has been removed. Use ``msg`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "cisco_spark, cisco_webex - エイリアス ``message`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``msg`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:671 msgid "clc_aa_policy - the ``wait`` parameter has been removed. It did not have any effect (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "clc_aa_policy - ``wait`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚影響ã¯ã‚りã¾ã›ã‚“(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:672 msgid "datadog_monitor - the alias ``message`` has been removed. Use ``notification_message`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "datadog_monitor - エイリアス ``message`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``notification_message`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:673 msgid "django_manage - the parameter ``liveserver`` has been removed (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "django_manage - パラメーター ``liveserver`` ãŒå‰Šé™¤ã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:674 msgid "idrac_redfish_config - the parameters ``manager_attribute_name`` and ``manager_attribute_value`` have been removed. Use ``manager_attributes`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "idrac_redfish_config - ``manager_attribute_name`` パラメーターãŠã‚ˆã³ ``manager_attribute_value`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``manager_attributes`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:675 msgid "iso_extract - the alias ``thirsty`` has been removed. Use ``force`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "iso_extract - エイリアス ``thirsty`` ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``force`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:676 msgid "ldap_entry - the ``params`` parameter is now completely removed. Using it already triggered an error since community.general 0.1.2 (https://github.com/ansible-collections/community.general/pull/2257)." msgstr "ldap_entry - ``params`` パラメーターã¯å®Œå…¨ã«å‰Šé™¤ã•れã¾ã—ãŸã€‚community.general 0.1.2 以é™ã€ã“れを使用ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ãŒãƒˆãƒªã‚¬ãƒ¼ã•れã¦ã„ã¾ã™ã€‚https://github.com/ansible-collections/community.general/pull/2257)" #: ../../rst/porting_guides/porting_guide_4.rst:677 msgid "pulp_repo - the ``feed_client_cert`` parameter no longer defaults to the value of the ``client_cert`` parameter (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "pulp_repo - ``feed_client_cert`` パラメーターã«ã‚ˆã‚Šã€``client_cert`` パラメーターã®å€¤ã«ãƒ‡ãƒ•ォルト設定ã•れãªããªã‚Šã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:678 msgid "pulp_repo - the ``feed_client_key`` parameter no longer defaults to the value of the ``client_key`` parameter (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "pulp_repo - ``feed_client_key`` パラメーターã«ã‚ˆã‚Šã€``client_key`` パラメーターã®å€¤ã«ãƒ‡ãƒ•ォルト設定ã•れãªããªã‚Šã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:679 msgid "pulp_repo - the alias ``ca_cert`` has been removed. Use ``feed_ca_cert`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "pulp_repo - ``ca_cert`` モジュールãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``feed_ca_cert`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:680 msgid "rax - unused parameter ``service`` removed (https://github.com/ansible-collections/community.general/pull/2020)." msgstr "rax - 未使用ã®ãƒ‘ラメーター ``service`` ãŒå‰Šé™¤ã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.general/pull/2020)。" #: ../../rst/porting_guides/porting_guide_4.rst:681 msgid "redfish modules - issuing a data modification command without specifying the ID of the target System, Chassis or Manager resource when there is more than one is no longer allowed. Use the ``resource_id`` option to specify the target ID (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "redfish モジュール - 複数ã®ãƒªã‚½ãƒ¼ã‚¹ãŒè¨±å¯ã•れãªããªã£ãŸã¨ãã«ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã€ã‚·ãƒ£ãƒ¼ã‚·ã€ã¾ãŸã¯ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ãƒªã‚½ãƒ¼ã‚¹ã® ID を指定ã›ãšã«ãƒ‡ãƒ¼ã‚¿å¤‰æ›´ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã¯ã§ããªããªã‚Šã¾ã—ãŸã€‚``resource_id`` オプションを使用ã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆIDを指定ã—ã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:682 msgid "redfish_config - the parameters ``bios_attribute_name`` and ``bios_attribute_value`` have been removed. Use ``bios_attributes`` instead (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "redfish_config - ``bios_attribute_name`` パラメーターãŠã‚ˆã³ ``bios_attribute_value`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``bios_attributes`` を使用ã—ã¦ãã ã•ã„(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:683 msgid "syspatch - the ``apply`` parameter has been removed. This is the default mode, so simply removing it will not change the behavior (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "syspatch - ``apply`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚ã“れã¯ãƒ‡ãƒ•ォルトモードã§ã‚ã‚‹ãŸã‚ã€å‰Šé™¤ã—ã¦ã‚‚動作ã¯å¤‰æ›´ã•れã¾ã›ã‚“(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:684 msgid "xbps - the ``force`` parameter has been removed. It did not have any effect (https://github.com/ansible-collections/community.general/pull/1926)." msgstr "xbps - ``force`` パラメーターãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚影響ã¯ã‚りã¾ã›ã‚“(https://github.com/ansible-collections/community.general/pull/1926)。" #: ../../rst/porting_guides/porting_guide_4.rst:689 msgid "The deprecated ``community.network.ce_sflow`` parameters: ``rate_limit``, ``rate_limit_slot``, and ``forward_enp_slot`` have been removed (https://github.com/ansible-collections/community.network/pull/255)." msgstr "éžæŽ¨å¥¨ã® ``community.network.ce_sflow`` パラメーター(``rate_limit``ã€``rate_limit_slot``ã€ãŠã‚ˆã³ ``forward_enp_slot`` )ãŒå‰Šé™¤ã•れã¾ã—ãŸï¼ˆhttps://github.com/ansible-collections/community.network/pull/255)。" #: ../../rst/porting_guides/porting_guide_4.rst:690 msgid "The deprecated ``community.network.sros`` netconf plugin has been removed. Use ``nokia.sros.md`` instead (https://github.com/ansible-collections/community.network/pull/255)." msgstr "éžæŽ¨å¥¨ã® ``community.network.sros`` netconf プラグインãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚代ã‚り㫠``nokia.sros.md`` を使用ã—ã¦ãã ã•ã„ (https://github.com/ansible-collections/community.network/pull/255)。" #: ../../rst/porting_guides/porting_guide_4.rst:702 msgid "Removed module fortios_facts" msgstr "fortios_facts モジュールを削除" #: ../../rst/porting_guides/porting_guide_4.rst:703 msgid "Removed module fortios_registration_forticare" msgstr "fortios_registration_forticare モジュールを削除" #: ../../rst/porting_guides/porting_guide_4.rst:704 msgid "Removed module fortios_registration_vdom" msgstr "fortios_registration_vdom モジュールを削除" #: ../../rst/porting_guides/porting_guide_4.rst:705 msgid "Removed module fortios_system_config_backup_restore" msgstr "fortios_system_config_backup_restore モジュールを削除" #: ../../rst/porting_guides/porting_guide_4.rst:706 msgid "Removed module fortios_system_vmlicense" msgstr "fortios_system_vmlicense モジュールを削除" #: ../../rst/porting_guides/porting_guide_4.rst:714 msgid "Starting in 2.14, shell and command modules will no longer have the option to warn and suggest modules in lieu of commands. The ``warn`` parameter to these modules is now deprecated and defaults to ``False``. Similarly, the ``COMMAND_WARNINGS`` configuration option is also deprecated and defaults to ``False``. These will be removed and their presence will become an error in 2.14." msgstr "2.14 以é™ã€ã‚·ã‚§ãƒ«ãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã®ä»£ã‚りã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è­¦å‘ŠãŠã‚ˆã³ææ¡ˆã®ã‚ªãƒ—ションãŒãªããªã‚Šã¾ã—ãŸã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã® ``warn`` パラメーターã¯éžæŽ¨å¥¨ã¨ãªã‚Šã€ãƒ‡ãƒ•ォルト㧠``False`` ã«ãªã‚Šã¾ã—ãŸã€‚åŒæ§˜ã«ã€``COMMAND_WARNINGS`` è¨­å®šã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚‚éžæŽ¨å¥¨ã§ã€ãƒ‡ãƒ•ォルト㯠``False`` ã«è¨­å®šã•れã¾ã™ã€‚ã“れらã¯å‰Šé™¤ã•れã€2.14 ã§ã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:715 msgid "apt_key - the parameter ``key`` does not have any effect, has been deprecated and will be removed in ansible-core version 2.14 (https://github.com/ansible/ansible/pull/70319)." msgstr "apt_key - パラメーター ``key`` ã«ã¯å½±éŸ¿ãŒãªãã€éžæŽ¨å¥¨ã«ãªã‚Šã€ansible-core ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.14 ã§å‰Šé™¤ã•れる予定ã§ã™ï¼ˆhttps://github.com/ansible/ansible/pull/70319)。" #: ../../rst/porting_guides/porting_guide_4.rst:716 msgid "psrp - Set the minimum version of ``pypsrp`` to ``0.4.0``." msgstr "psrp - ``pypsrp`` ã®æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ ``0.4.0`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:721 msgid "Deprecate cli_parse module and textfsm, ttp, xml, json parser plugins as they are moved to ansible.utils collection (https://github.com/ansible-collections/ansible.netcommon/pull/182 https://github.com/ansible-collections/ansible.utils/pull/28)" msgstr "cli_parse モジュール㨠textfsmã€ttpã€xmlã€json パーサープラグイン㌠ansible.utils コレクションã«ç§»å‹•ã—ãŸãŸã‚ã€éžæŽ¨å¥¨ã«ãªã‚Šã¾ã™ï¼ˆhttps://github.com/ansible-collections/ansible.netcommon/pull/182 https://github.com/ansible-collections/ansible.utils/pull/28)。" #: ../../rst/porting_guides/porting_guide_4.rst:726 msgid "Deprecated nxos_bgp_af in favour of nxos_bgp_address_family resource module." msgstr "nxos_bgp_af ãŒéžæŽ¨å¥¨ã«ãªã‚Šã€nxos_bgp_address_familyãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:727 msgid "Deprecated nxos_bgp_neighbor_af in favour of nxos_bgp_neighbor_address_family resource module." msgstr "nxos_bgp_neighbor_af ã‚’éžæŽ¨å¥¨ã«ã—ã€nxos_bgp_neighbor_address_family ãƒªã‚½ãƒ¼ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæŽ¡ç”¨ã•れã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_4.rst:752 msgid "cpanm - parameter ``system_lib`` deprecated in favor of using ``become`` (https://github.com/ansible-collections/community.general/pull/2218)." msgstr "cpanm - パラメーター ``system_lib`` ãŒéžæŽ¨å¥¨ã«ãªã‚Šã€https://github.com/ansible-collections/community.general/pull/360) ã®ä½¿ç”¨ãŒæŽ¡ç”¨ã•れã¾ã™ï¼ˆhttps://github.com/ansible-collections/community.general/pull/2218)。" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:6 msgid "Ansible-base 2.10 Porting Guide" msgstr "Ansible-base 2.10 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:10 msgid "In preparation for the release of 2.10, many plugins and modules have migrated to Collections on `Ansible Galaxy `_. For the current development status of Collections and FAQ see `Ansible Collections Community Guide `_. We expect the 2.10 Porting Guide to change frequently up to the 2.10 release. Follow the conversations about collections on our various :ref:`communication` channels for the latest information on the status of the ``devel`` branch." msgstr "2.10 ã®ãƒªãƒªãƒ¼ã‚¹æº–å‚™ã®ãŸã‚ã«ã€å¤šãã®ãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ `Ansible Galaxy `_ ã® Collection ã«ç§»è¡Œã—ã¦ã„ã¾ã™ã€‚Collection ãŠã‚ˆã³ FAQ ã®ç¾åœ¨ã®é–‹ç™ºã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã€Œ`Ansible Collections コミュニティーガイド `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。2.10 ã®ã€Œç§»æ¤ã‚¬ã‚¤ãƒ‰ã€ã¯ã€2.10 ã®ãƒªãƒªãƒ¼ã‚¹ã«åˆã‚ã›ã¦é »ç¹ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚``devel`` ブランãƒã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã«é–¢ã™ã‚‹æœ€æ–°æƒ…å ±ã¯ã€ã•ã¾ã–ã¾ãª :ref:`communication` ãƒãƒ£ãƒ³ãƒãƒ«ã«ã‚るコレクションã«é–¢ã™ã‚‹è­°è«–を確èªã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:12 msgid "This section discusses the behavioral changes between Ansible 2.9 and Ansible-base 2.10." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible 2.9 㨠Ansible-base 2.10 ã§ã®å‹•作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:14 msgid "It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible-base." msgstr "本ガイドã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible-base ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ã€Playbookã€ãƒ—ラグインã€ãã®ä»–ã® Ansible インフラストラクãƒãƒ£ãƒ¼ã‚’æ›´æ–°ã™ã‚‹éš›ã«ã”利用ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:16 msgid "We suggest you read this page along with the `Ansible-base Changelog for 2.10 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`Ansible-base Changelog for 2.10 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:18 msgid "Ansible-base is mainly of interest for developers and users who only want to use a small, controlled subset of the available collections. Regular users should install ansible." msgstr "Ansible-base ã¯ã€ä¸»ã«ã€åˆ©ç”¨å¯èƒ½ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã†ã¡ã€åˆ¶å¾¡ã•れãŸå°ã•ãªã‚µãƒ–セットã®ã¿ã‚’使用ã—ãŸã„開発者やユーザーã®èˆˆå‘³ã‚’引ã製å“ã§ã™ã€‚一般ユーザー㯠Ansible をインストールã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:20 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:16 msgid "The complete list of porting guides can be found at :ref:`porting guides `." msgstr "ç§»æ¤ã‚¬ã‚¤ãƒ‰ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€ã€Œ:ref:`ç§»æ¤ã‚¬ã‚¤ãƒ‰ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_base_2.10.rst:23 #: ../../rst/porting_guides/porting_guide_core_2.11.rst:18 msgid "Contents" msgstr "内容" #: ../../rst/porting_guides/porting_guide_core_2.11.rst:6 msgid "Ansible-core 2.11 Porting Guide" msgstr "Ansible-core 2.11 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_core_2.11.rst:8 msgid "This section discusses the behavioral changes between ``ansible-base`` 2.10 and ``ansible-core`` 2.11." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€``ansible-base`` 2.10 ã‹ã‚‰ ``ansible-core`` 2.11 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.11.rst:10 msgid "It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they work with this version of ``ansible-core``." msgstr "本ガイドã¯ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ``ansible-core`` ã§å‹•作ã™ã‚‹ã‚ˆã†ã«ã€Playbookã€ãƒ—ラグインã€ãã®ä»–ã® Ansible インフラストラクãƒãƒ£ãƒ¼ã‚’æ›´æ–°ã™ã‚‹éš›ã«ã”利用ã«ãªã‚Œã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.11.rst:12 msgid "We suggest you read this page along with the `ansible-core Changelog for 2.11 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`ansible-core Changelog for 2.11 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_core_2.11.rst:14 msgid "``ansible-core`` is mainly of interest for developers and users who only want to use a small, controlled subset of the available collections. Regular users should install Ansible." msgstr "``ansible-core`` ã¯ã€ä¸»ã«ã€åˆ©ç”¨å¯èƒ½ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã†ã¡ã€åˆ¶å¾¡ã•れãŸå°ã•ãªã‚µãƒ–セットã®ã¿ã‚’使用ã—ãŸã„開発者やユーザーã®èˆˆå‘³ã‚’引ã製å“ã§ã™ã€‚一般ユーザー㯠Ansible をインストールã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:6 msgid "Ansible-core 2.12 Porting Guide" msgstr "Ansible-core 2.12 ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:8 msgid "This section discusses the behavioral changes between ``ansible-core`` 2.11 and ``ansible-core`` 2.12." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€``ansible-core`` 2.11 ã‹ã‚‰ ``ansible-core`` 2.12 ã«ãŠã‘る動作ã®å¤‰æ›´ç‚¹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:12 msgid "We suggest you read this page along with `ansible-core Changelog for 2.12 `_ to understand what updates you may need to make." msgstr "å¿…è¦ãªæ›´æ–°ã«ã¤ã„ã¦ç†è§£ã™ã‚‹ã«ã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ä½µã›ã¦ã€Œ`ansible-core Changelog for 2.12 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:22 msgid "When calling tasks and setting ``async``, setting ``ANSIBLE_ASYNC_DIR`` under ``environment:`` is no longer valid. Instead, use the shell configuration variable ``async_dir``, for example by setting ``ansible_async_dir``:" msgstr "タスクを呼ã³å‡ºã—㦠``async`` を設定ã™ã‚‹å ´åˆã¯ã€``environment:`` ã§ ``ANSIBLE_ASYNC_DIR`` ã®è¨­å®šã¯æœ‰åйã§ã¯ãªããªã‚Šã¾ã—ãŸã€‚代ã‚りã«ã€``ansible_async_dir`` を設定ã—ã¦ã‚·ã‚§ãƒ«è¨­å®šå¤‰æ•° ``async_dir`` を使用ã—ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:38 msgid "The default value of ``INTERPRETER_PYTHON_FALLBACK`` changed to ``auto``. The list of Python interpreters in ``INTERPRETER_PYTHON_FALLBACK`` changed to prefer Python 3 over Python 2. The combination of these two changes means the new default behavior is to quietly prefer Python 3 over Python 2 on remote hosts. Previously a deprecation warning was issued in situations where interpreter discovery would have used Python 3 but the interpreter was set to ``/usr/bin/python``." msgstr "``INTERPRETER_PYTHON_FALLBACK`` ã®ãƒ‡ãƒ•ォルト値㯠``auto`` ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸãŒã€``INTERPRETER_PYTHON_FALLBACK`` ã® Python インタープリターã®ãƒªã‚¹ãƒˆãŒã€Python 2 よりも Python 3 を優先ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚ã“れらã®å¤‰æ›´ã®çµ„ã¿åˆã‚ã›ã«ã‚ˆã‚Šã€æ–°ã—ã„デフォルト動作ã§ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã® Python 2 よりも Python 3 ãŒæš—黙的ã«å„ªå…ˆã•れã¾ã™ã€‚ã“れã¾ã§ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リター検出㧠Python 3 ãŒä½¿ç”¨ã•れã¦ã„ã‚‹ã¨ã„ã†éžæŽ¨å¥¨ã®è­¦å‘Šã¯ã€Python 3 を使用ã—ã¾ã™ãŒã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¤œå‡ºãŒ ``/usr/bin/python`` ã«è¨­å®šã•れã¦ã„る状態ã§ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:40 msgid "``INTERPRETER_PYTHON_FALLBACK`` can be changed from the default list of interpreters by setting the ``ansible_interpreter_python_fallback`` variable." msgstr "``INTERPRETER_PYTHON_FALLBACK`` ã¯ã€``ansible_interpreter_python_fallback`` 変数を設定ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã®ãƒ‡ãƒ•ォルトリストã‹ã‚‰å¤‰æ›´ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:42 msgid "See :ref:`interpreter discovery documentation ` for more details." msgstr "詳細ã¯ã€:ref:`interpreter discovery documentation ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:48 msgid "Python 3.8 on the controller node is a hard requirement for this release. The command line scripts will not function with a lower Python version." msgstr "コントローラーノード㮠Python 3.8 ã¯ã€æœ¬ãƒªãƒªãƒ¼ã‚¹ã§ã¯ãƒãƒ¼ãƒ‰è¦ä»¶ã§ã™ã€‚コマンドラインスクリプトã¯ã€ã‚ˆã‚Šä½Žã„ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:49 msgid "``ansible-vault`` no longer supports ``PyCrypto`` and requires ``cryptography``." msgstr "``ansible-vault`` 㯠``PyCrypto`` ã«å¯¾å¿œã—ãªããªã‚Šã€``cryptography`` ãŒå¿…è¦ãªããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:54 msgid "Python 2.6 on the target node is deprecated in this release. ``ansible-core`` 2.13 will remove support for Python 2.6." msgstr "ターゲットノード上㮠Python 2.6 ã¯æœ¬ãƒªãƒªãƒ¼ã‚¹ã§éžæŽ¨å¥¨ã¨ãªã‚Šã¾ã—ãŸã€‚``ansible-core`` 2.13 ã§ã¯ã€Python 2.6 ã®ã‚µãƒãƒ¼ãƒˆãŒå‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:55 msgid "Bare variables in conditionals: ``when`` conditionals no longer automatically parse string booleans such as ``\"true\"`` and ``\"false\"`` into actual booleans. Any variable containing a non-empty string is considered true. This was previously configurable with the ``CONDITIONAL_BARE_VARS`` configuration option (and the ``ANSIBLE_CONDITIONAL_BARE_VARS`` environment variable). This setting no longer has any effect. Users can work around the issue by using the ``|bool`` filter:" msgstr "æ¡ä»¶ã®ãƒ™ã‚¢ãƒ¡ã‚¿ãƒ«å¤‰æ•°: ``when`` æ¡ä»¶ã¯ã€``\"true\"`` ã‚„ ``\"false\"`` ãªã©ã®æ–‡å­—列ブール値を実際ã®ãƒ–ール値ã«è‡ªå‹•çš„ã«è§£æžã—ãªããªã‚Šã¾ã—ãŸã€‚空ã§ãªã„文字列をå«ã‚€å¤‰æ•°ã¯ true ã¨è¦‹ãªã•れã¾ã™ã€‚ã“れã¯ä»¥å‰ã¯ ``CONDITIONAL_BARE_VARS`` 設定オプション(ãŠã‚ˆã³ ``ANSIBLE_CONDITIONAL_BARE_VARS`` 環境変数)ã§è¨­å®šå¯èƒ½ã§ã—ãŸã€‚ã“ã®è¨­å®šã¯å½±éŸ¿ã¯ã‚りã¾ã›ã‚“。``|bool`` フィルターを使用ã™ã‚‹ã“ã¨ã§å•題を回é¿ã§ãã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:69 msgid "The ``_remote_checksum()`` method in ``ActionBase`` is deprecated. Any action plugin using this method should use ``_execute_remote_stat()`` instead." msgstr "``ActionBase`` ã® ``_remote_checksum()`` メソッドã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¯ã€ä»£ã‚り㫠``_execute_remote_stat()`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:74 msgid "``cron`` now requires ``name`` to be specified in all cases." msgstr "``cron`` ã¯ã€ã™ã¹ã¦ã®ã‚±ãƒ¼ã‚¹ã§ ``name`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:75 msgid "``cron`` no longer allows a ``reboot`` parameter. Use ``special_time: reboot`` instead." msgstr "``cron`` ã¯ã€``reboot`` パラメーターãŒè¨±å¯ã•れãªããªã‚Šã¾ã—ãŸã€‚代ã‚り㫠``special_time: reboot`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:76 msgid "``hostname`` - On FreeBSD, the ``before`` result will no longer be ``\"temporarystub\"`` if permanent hostname file does not exist. It will instead be ``\"\"`` (empty string) for consistency with other systems." msgstr "``hostname`` - FreeBSD ã§ã¯ã€æ°¸ç¶šçš„ãªãƒ›ã‚¹ãƒˆåファイルãŒå­˜åœ¨ã—ãªã„å ´åˆã€``before`` ã®çµæžœã¯ ``\"temporarystub\"`` ã«ãªã‚‰ãªããªã‚Šã¾ã—ãŸã€‚ã“れã¯ã€ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã¨ã®æ•´åˆæ€§ã‚’ä¿ã¤ãŸã‚ã« ``\"\"`` ï¼ˆç©ºã®æ–‡å­—列)ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:77 msgid "``hostname`` - On OpenRC and Solaris based systems, the ``before`` result will no longer be ``\"UNKNOWN\"`` if the permanent hostname file does not exist. It will instead be ``\"\"`` (empty string) for consistency with other systems." msgstr "``hostname`` - OpenRC ãŠã‚ˆã³ Solaris ベースã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€æ°¸ç¶šçš„ãªãƒ›ã‚¹ãƒˆåファイルãŒå­˜åœ¨ã—ãªã„å ´åˆã€``before`` ã®çµæžœã¯ ``\"UNKNOWN\"`` ã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã¨ã®æ•´åˆæ€§ã‚’ä¿ã¤ãŸã‚ã« ``\"\"``ï¼ˆç©ºã®æ–‡å­—列)ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:78 msgid "``pip`` now uses the ``pip`` Python module installed for the Ansible module's Python interpreter, if available, unless ``executable`` or ``virtualenv`` were specified." msgstr "``pip`` ã¯ã€``executable`` ã¾ãŸã¯ ``virtualenv`` ãŒæŒ‡å®šã•れã¦ã„ãªã„é™ã‚Šã€Ansible モジュール㮠Python インタープリターã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れ㟠``pip`` Python モジュールを使用ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:104 msgid "``unique`` filter with Jinja2 < 2.10 is case-sensitive and now raise coherently an error if ``case_sensitive=False`` instead of when ``case_sensitive=True``." msgstr "2.10 よりå‰ã® Jinja2 を使用ã™ã‚‹ ``unique`` フィルターã¯ã€å¤§æ–‡å­—ã¨å°æ–‡å­—ãŒåŒºåˆ¥ã•れã€``case_sensitive=True`` ã§ã¯ãªã ``case_sensitive=False`` ã®å ´åˆã«ä¸€è²«ã—ã¦ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã„ã¾ã—ãŸã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:105 msgid "Set theory filters (``intersect``, ``difference``, ``symmetric_difference`` and ``union``) are now case-sensitive. Explicitly use ``case_sensitive=False`` to keep previous behavior. Note: with Jinja2 < 2.10, the filters were already case-sensitive by default." msgstr "ç†è«–フィルター(``intersect``ã€``difference``ã€``symmetric_difference``ã€ãŠã‚ˆã³ ``union``)ã®è¨­å®šã¯ã€å¤§æ–‡å­—ã¨å°æ–‡å­—ãŒåŒºåˆ¥ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚明示的㪠``case_sensitive=False`` を使用ã—ã¦ä»¥å‰ã®å‹•作を維æŒã—ã¾ã™ã€‚2.10 よりå‰ã® Jinja2 ã§ã€ãƒ•ィルターã¯ã™ã§ã«å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guide_core_2.12.rst:106 msgid "``password_hash``` now uses ``passlib`` defaults when an option is unspecified, e.g. ``bcrypt_sha256`` now default to the \"2b\" format and if the \"2a\" format is required it must be specified." msgstr "``password_hash``` now uses ``passlib`` defaults when an option is unspecified, e.g. ``bcrypt_sha256`` ã¯ãƒ‡ãƒ•ォルトã§ã€Œ2bã€ãƒ•ォーマットã«ãªã‚Šã€ã€Œ2aã€ãƒ•ォーマットãŒå¿…è¦ãªå ´åˆã¯æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/porting_guides/porting_guides.rst:5 msgid "Ansible Porting Guides" msgstr "Ansible ç§»æ¤ã‚¬ã‚¤ãƒ‰" #: ../../rst/porting_guides/porting_guides.rst:7 msgid "This section lists porting guides that can help you in updating playbooks, plugins and other parts of your Ansible infrastructure from one version of Ansible to the next." msgstr "本セクションã§ã¯ã€Ansible ã®ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰æ¬¡ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã€Ansible インフラストラクãƒãƒ£ãƒ¼ã® Playbookã€ãƒ—ラグインãªã©ã‚’æ›´æ–°ã™ã‚‹ã®ã«å½¹ã«ç«‹ã¤ç§»æ¤ã‚¬ã‚¤ãƒ‰ã‚’紹介ã—ã¾ã™ã€‚" #~ msgid "We suggest you read this page along with the `ansible-core Changelog for 2.11 `_ to understand what updates you may need to make." #~ msgstr "" #~ msgid "The configuration system now validates the ``choices`` field, so any settings that currently violate it and are currently ignored will now cause an error. For example, `ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0` will now cause an error (valid chioces are 'ignore', 'warn' or 'error'." #~ msgstr "" #~ msgid "Due to a scheduling conflict, the latest version of Ansible 2.10 (2.10.7) has a few collections which are newer than Ansible 3.0.0. Ansible 3.1.0 will contain updated versions of those collections." #~ msgstr "スケジュールã®éƒ½åˆä¸Šã€Ansible 2.10 ã®æœ€æ–°ç‰ˆ (2.10.7) ã«ã¯ã€Ansible 3.0.0 よりも新ã—ã„コレクションãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚Ansible 3.1.0 ã«ã¯ã€ã“れらã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¢ãƒƒãƒ—デート版ãŒå«ã¾ã‚Œã¾ã™ã€‚" #~ msgid "Python 3.8 on the controller node is a soft requirement for this release. ``ansible-core`` 2.11 will continue to work with the same versions of Python that ``ansible-base`` 2.10 worked with, however it will emit a warning when running on a controller node with a Python version less than 3.8. This warning can be disabled by setting ``ANSIBLE_CONTROLLER_PYTHON_WARNING=False`` in your environment. ``ansible-core`` 2.12 will require Python 3.8 or greater." #~ msgstr "コントローラーノード㮠Python 3.8 ã¯ã€æœ¬ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã‚½ãƒ•トè¦ä»¶ã§ã™ã€‚``ansible-core`` 2.11 ã¯ã€``ansible-base`` 2.10 ãŒå‹•作ã—ãŸã®ã¨åŒã˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python ã§å¼•ãç¶šãæ©Ÿèƒ½ã—ã¾ã™ãŒã€Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ 3.8 未満ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã¨è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ãŠä½¿ã„ã®ç’°å¢ƒã« ``ANSIBLE_CONTROLLER_PYTHON_WARNING=False`` を設定ã—ã¦ç„¡åйã«ã§ãã¾ã™ã€‚``ansible-core`` 2.12 ã®å ´åˆã¯ Python 3.8 以é™ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "The configuration system now validates the ``choices`` field, so any settings that currently violate it and are currently ignored will now cause an error. For example, `ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0` will now cause an error (valid choices are 'ignore', 'warn' or 'error')." #~ msgstr "設定システム㯠``choices`` フィールドを検証ã™ã‚‹ãŸã‚ã€ç¾åœ¨ãれã«é•åã—ã¦ã„る設定ãŒã‚ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ãŒç”Ÿã˜ã¾ã™ã€‚ãŸã¨ãˆã°ã€`ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0` ã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ (有効ãªé¸æŠžè‚¢ã¯ã€Œignoreã€ã€ã€Œwarnã€ã€ã¾ãŸã¯ã€Œerrorã€ã§ã™)。" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.489556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/reference_appendices.po0000644000000000000000000267467300000000000027613 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/reference_appendices/YAMLSyntax.rst:5 msgid "YAML Syntax" msgstr "YAML æ§‹æ–‡" #: ../../rst/reference_appendices/YAMLSyntax.rst:7 msgid "This page provides a basic overview of correct YAML syntax, which is how Ansible playbooks (our configuration management language) are expressed." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible Playbook (Ansible ã§ã®è¨­å®šç®¡ç†è¨€èªž) ã®è¡¨ç¾æ–¹æ³•ã§ã‚ã‚‹ã€æ­£ã—ã„ YAML æ§‹æ–‡ã«ã¤ã„ã¦æ¦‚説ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:10 msgid "We use YAML because it is easier for humans to read and write than other common data formats like XML or JSON. Further, there are libraries available in most programming languages for working with YAML." msgstr "Ansible ã§ã¯ã€XML ã‚„ JSON ãªã©ã®ã‚ˆã†ãªä¸€èˆ¬çš„ãªãã®ä»–ã®ãƒ‡ãƒ¼ã‚¿å½¢å¼ã«æ¯”ã¹ã¦äººé–“ã«ã‚ˆã‚‹è§£èª­ãŠã‚ˆã³è¨˜è¿°ãŒç°¡å˜ã§ã‚ã‚‹ãŸã‚ã€YAML を使用ã—ã¦ã„ã¾ã™ã€‚ã•らã«ã€ãƒ—ログラミング言語ã®å¤šãã«ã¯ã€YAML ã«å¯¾å¿œã™ã‚‹ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãƒ¼ãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:14 msgid "You may also wish to read :ref:`working_with_playbooks` at the same time to see how this is used in practice." msgstr ":ref:`working_with_playbooks` ã‚‚åˆã‚ã›ã¦å‚ç…§ã—ã€å®Ÿéš›ã«ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/YAMLSyntax.rst:19 msgid "YAML Basics" msgstr "YAML ã®åŸºç¤Ž" #: ../../rst/reference_appendices/YAMLSyntax.rst:21 msgid "For Ansible, nearly every YAML file starts with a list. Each item in the list is a list of key/value pairs, commonly called a \"hash\" or a \"dictionary\". So, we need to know how to write lists and dictionaries in YAML." msgstr "Ansible ã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€YAML ファイルã®ã»ã¼ã™ã¹ã¦ãŒãƒªã‚¹ãƒˆã§é–‹å§‹ã—ã¾ã™ã€‚リストã®å„é …ç›®ã¯ã€ä¸€èˆ¬çš„ã«ã€Œãƒãƒƒã‚·ãƒ¥ã€ã¾ãŸã¯ã€Œãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã€ã¨å‘¼ã°ã‚Œã‚‹ã‚­ãƒ¼/値ã®ãƒšã‚¢ã®ãƒªã‚¹ãƒˆã¨ãªã£ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€YAML ã§ãƒªã‚¹ãƒˆã¨ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’記述ã™ã‚‹æ–¹æ³•ã‚’ç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:26 msgid "There's another small quirk to YAML. All YAML files (regardless of their association with Ansible or not) can optionally begin with ``---`` and end with ``...``. This is part of the YAML format and indicates the start and end of a document." msgstr "YAML ã«ã¯ã€ä»–ã«ã‚‚ã‚ãšã‹ãªç‰¹å¾´ãŒã‚りã¾ã™ã€‚YAML ファイルã¯ã™ã¹ã¦ (Ansible ã¨ã®é–¢ä¿‚ã®æœ‰ç„¡ã«é–¢ä¿‚ãªã)ã€å¿…è¦ã«å¿œã˜ã¦ ``---`` ã§é–‹å§‹ã—㦠``...`` ã§çµ‚ã‚らã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€YAML å½¢å¼ã®ä¸€éƒ¨ã§ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æœ€åˆã¨æœ€å¾Œã‚’示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:29 msgid "All members of a list are lines beginning at the same indentation level starting with a ``\"- \"`` (a dash and a space)::" msgstr "リストã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã™ã¹ã¦åŒã˜ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆãƒ¬ãƒ™ãƒ«ã§ã€``\"- \"`` (ダッシュã¨ã‚¹ãƒšãƒ¼ã‚¹) ã§é–‹å§‹ã™ã‚‹è¡Œã«ãªã‚Šã¾ã™::" #: ../../rst/reference_appendices/YAMLSyntax.rst:39 msgid "A dictionary is represented in a simple ``key: value`` form (the colon must be followed by a space)::" msgstr "ディクショナリーã¯ã€ã‚·ãƒ³ãƒ—ル㪠``key: value`` ã®å½¢å¼ã§è¡¨ç¾ã—ã¾ã™ (コロンã®å¾Œã«ã¯ã‚¹ãƒšãƒ¼ã‚¹ã‚’挿入ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™)。" #: ../../rst/reference_appendices/YAMLSyntax.rst:47 msgid "More complicated data structures are possible, such as lists of dictionaries, dictionaries whose values are lists or a mix of both::" msgstr "リストãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚„ãã®å€¤ã®å ´åˆã‚„ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¨å€¤ãŒæ··åˆã—ã¦ã„ã‚‹å ´åˆãªã©ã€ã‚ˆã‚Šè¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:65 msgid "Dictionaries and lists can also be represented in an abbreviated form if you really want to::" msgstr "ディクショナリーã¨ãƒªã‚¹ãƒˆã¯ã€å¿…è¦ã§ã‚れã°ã€ç•¥èªžå½¢å¼ã§è¡¨ç¾ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:71 msgid "These are called \"Flow collections\"." msgstr "以下ã¯ã€Œãƒ•ローコレクションã€ã¨å‘¼ã°ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:75 msgid "Ansible doesn't really use these too much, but you can also specify a boolean value (true/false) in several forms::" msgstr "Ansible ã§ã¯ä»¥ä¸‹ã®å½¢å¼ã¯ã‚ã¾ã‚Šä½¿ç”¨ã•れã¾ã›ã‚“ãŒã€ãƒ–ール型値 (True/False) を複数ã®å½¢å¼ã§æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:83 msgid "Use lowercase 'true' or 'false' for boolean values in dictionaries if you want to be compatible with default yamllint options." msgstr "デフォルト㮠yamllint オプションã¨äº’æ›æ€§ã‚’æŒãŸã›ã‚‹å ´åˆã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒ–ール値ã«å°æ–‡å­—ã®ã€Œtrueã€ã¾ãŸã¯ã€Œfalseã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:85 msgid "Values can span multiple lines using ``|`` or ``>``. Spanning multiple lines using a \"Literal Block Scalar\" ``|`` will include the newlines and any trailing spaces. Using a \"Folded Block Scalar\" ``>`` will fold newlines to spaces; it's used to make what would otherwise be a very long line easier to read and edit. In either case the indentation will be ignored. Examples are::" msgstr "値ã¯ã€``|`` ã¾ãŸã¯ ``>`` を使用ã™ã‚‹ã“ã¨ã§è¤‡æ•°ã®è¡Œã«ã¾ãŸãŒã£ã¦æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「リテラル形å¼ã®ãƒ–ロックスカラー〠``|`` を使用ã—ã¦è¤‡æ•°è¡Œã«ã¾ãŸãŒã‚‹å ´åˆã¯ã€æ”¹è¡Œã¨æœ«å°¾ã®ã‚¹ãƒšãƒ¼ã‚¹ãŒå«ã¾ã‚Œã¾ã™ã€‚「折り畳ã¿å½¢å¼ã®ãƒ–ロックスカラー〠``>`` を使用ã™ã‚‹ã¨ã€æŠ˜ã‚Šè¿”ã—ã«ä½¿ç”¨ã•れる改行ã¯ã™ã¹ã¦ã‚¹ãƒšãƒ¼ã‚¹ã«å¤‰æ›ã•れã¾ã™ã€‚ã“れã¯ã€éžå¸¸ã«é•·ã„行を読ã¿ã‚„ã™ãã€ç·¨é›†ã—ã‚„ã™ãã™ã‚‹ãŸã‚ã«ä½¿ã‚れã¾ã™ã€‚ã„ãšã‚Œã®å ´åˆã‚‚ã€ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã¯ç„¡è¦–ã•れã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:100 msgid "While in the above ``>`` example all newlines are folded into spaces, there are two ways to enforce a newline to be kept::" msgstr "上記㮠``>`` ã®ä¾‹ã§ã¯ã€æ”¹è¡Œã¯ã™ã¹ã¦ã‚¹ãƒšãƒ¼ã‚¹ã«å¤‰æ›ã•れã¾ã™ãŒã€å¼·åˆ¶çš„ã«æ”¹è¡Œã‚’è¡Œã†æ–¹æ³•㌠2 種類ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:112 msgid "Let's combine what we learned so far in an arbitrary YAML example. This really has nothing to do with Ansible, but will give you a feel for the format::" msgstr "ã“れã¾ã§ã«èª¬æ˜Žã—ãŸå†…容をã€ä»»æ„ã® YAML ã®ä¾‹ã«ã¾ã¨ã‚ã¦ã¿ã¾ã—ょã†ã€‚以下ã¯ã€Ansible ã¨ã¯é–¢ä¿‚ã‚りã¾ã›ã‚“ãŒã€ã©ã®ã‚ˆã†ãªå½¢å¼ã«ãªã‚‹ã‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:135 msgid "That's all you really need to know about YAML to start writing `Ansible` playbooks." msgstr "`Ansible` Playbook ã®è¨˜è¿°ã‚’é–‹å§‹ã™ã‚‹ã«ã‚ãŸã‚Šã€ä»¥ä¸ŠãŒ YAML ã«ã¤ã„ã¦ç†è§£ã—ã¦ãŠãå¿…è¦ã®ã‚る内容ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:138 msgid "Gotchas" msgstr "Gotchas" #: ../../rst/reference_appendices/YAMLSyntax.rst:140 msgid "While you can put just about anything into an unquoted scalar, there are some exceptions. A colon followed by a space (or newline) ``\": \"`` is an indicator for a mapping. A space followed by the pound sign ``\" #\"`` starts a comment." msgstr "引用符ã§å›²ã¾ã‚Œã¦ã„ãªã„スカラーã«ã¯ä½•ã§ã‚‚挿入ã§ãã¾ã™ãŒã€ä¸€éƒ¨ä¾‹å¤–ãŒã‚りã¾ã™ã€‚コロンã®å¾Œã«ã‚¹ãƒšãƒ¼ã‚¹ (ã¾ãŸã¯æ”¹è¡Œ) ã‚’ç¶šã‘ã¦è¨˜è¿° (``\": \"``) ã—ãŸå ´åˆã¯ã€ãƒžãƒƒãƒ”ングを示ã™ã‚¤ãƒ³ã‚¸ã‚±ãƒ¼ã‚¿ãƒ¼ã«ãªã‚Šã¾ã™ã€‚スペースã«ç¶šã‘ã¦ãƒãƒ³ãƒ‰è¨˜å·ã‚’記述 (``\" #\"``) ã—ãŸå ´åˆã¯ã€ã‚³ãƒ¡ãƒ³ãƒˆã®é–‹å§‹ã‚’表ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:144 msgid "Because of this, the following is going to result in a YAML syntax error::" msgstr "ã“ã®ãŸã‚ã€ä»¥ä¸‹ã®ã‚ˆã†ãªå ´åˆã«ã¯ã€YAML æ§‹æ–‡ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:150 msgid "...but this will work::" msgstr "...ãŸã ã—ã€ä»¥ä¸‹ã¯æœ‰åйã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:154 msgid "You will want to quote hash values using colons followed by a space or the end of the line::" msgstr "コロンを使用ã—ã¦ãƒãƒƒã‚·ãƒ¥è¨˜å·ã‚’引用ã—ã€ãã®å¾Œã‚ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’指定ã™ã‚‹ã‹ã€è¡Œæœ«ã«ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/YAMLSyntax.rst:160 msgid "...and then the colon will be preserved." msgstr "...ãã—ã¦ã‚³ãƒ­ãƒ³ãŒä¿å­˜ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:162 msgid "Alternatively, you can use double quotes::" msgstr "ã¾ãŸã¯ã€äºŒé‡å¼•用符を使用ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/YAMLSyntax.rst:168 msgid "The difference between single quotes and double quotes is that in double quotes you can use escapes::" msgstr "二é‡å¼•用符ã§ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—を使用ã§ãる点ãŒã€ä¸€é‡å¼•用符ã¨äºŒé‡å¼•用符ã¨ã®ç›¸é•点ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:173 msgid "The list of allowed escapes can be found in the YAML Specification under \"Escape Sequences\" (YAML 1.1) or \"Escape Characters\" (YAML 1.2)." msgstr "使用å¯èƒ½ãªã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã®ä¸€è¦§ã¯ã€YAML 仕様ã®ã€ŒEscape Sequencesã€(YAML 1.1) ã¾ãŸã¯ã€ŒEscape Charactersã€(YAML 1.2) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/YAMLSyntax.rst:175 msgid "The following is invalid YAML:" msgstr "以下ã¯ç„¡åŠ¹ãª YAML ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:182 msgid "Further, Ansible uses \"{{ var }}\" for variables. If a value after a colon starts with a \"{\", YAML will think it is a dictionary, so you must quote it, like so::" msgstr "ã•らã«ã€Ansible ã¯å¤‰æ•°ã« \"{{ var }}\" を使用ã—ã¾ã™ã€‚コロンã®å¾Œã« \"{\" ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ãã®å€¤ãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚る㨠YAML ãŒèªè­˜ã™ã‚‹ãŸã‚ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¼•用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™::" #: ../../rst/reference_appendices/YAMLSyntax.rst:187 msgid "If your value starts with a quote the entire value must be quoted, not just part of it. Here are some additional examples of how to properly quote things::" msgstr "値を引用符ã§ã™ã‚‹å ´åˆã¯ã€å€¤ã®ä¸€éƒ¨ã ã‘ã§ãªãã€å€¤å…¨ä½“を引用符ã§å›²ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚値を引用ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦æ­£ã—ã„例を以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:193 msgid "Not valid::" msgstr "ä»¥ä¸‹ã¯æœ‰åйã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/YAMLSyntax.rst:197 msgid "In addition to ``'`` and ``\"`` there are a number of characters that are special (or reserved) and cannot be used as the first character of an unquoted scalar: ``[] {} > | * & ! % # ` @ ,``." msgstr "``'`` ãŠã‚ˆã³ ``\"`` 以外ã«ã€å¼•用符ã§å›²ã¾ã‚Œã¦ã„ãªã„ã‚¹ã‚«ãƒ©ãƒ¼ã®æœ€åˆã®æ–‡å­—ã¨ã—ã¦ä½¿ç”¨ã§ããªã„特殊文字 (予約文字) ãŒã„ãã¤ã‹ã‚りã¾ã™ (``[] {} > | * & ! % # ` @ ,`` ãªã©)。" #: ../../rst/reference_appendices/YAMLSyntax.rst:200 msgid "You should also be aware of ``? : -``. In YAML, they are allowed at the beginning of a string if a non-space character follows, but YAML processor implementations differ, so it's better to use quotes." msgstr "ã¾ãŸã€``? : -`` ã«ã¯å¸¸ã«æ³¨æ„ã—ã¦ãã ã•ã„。YAML ã§ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ä»¥å¤–ã®æ–‡å­—ãŒç¶šãå ´åˆã¯ã€æ–‡å­—列ã®å…ˆé ­ã§è¨±å¯ã•れã¾ã™ãŒã€YAML プロセッサーã®å®Ÿè£…ã¯ç•°ãªã‚‹ãŸã‚ã€å¼•用符を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:203 msgid "In Flow Collections, the rules are a bit more strict::" msgstr "フローコレクションã§ã¯ã€ãƒ«ãƒ¼ãƒ«ã¯ã‚‚ã†å°‘ã—厳密ã§ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:209 msgid "Boolean conversion is helpful, but this can be a problem when you want a literal `yes` or other boolean values as a string. In these cases just use quotes::" msgstr "ブール値ã®å¤‰æ›ã¯ä¾¿åˆ©ã§ã™ãŒã€ãƒªãƒ†ãƒ©ãƒ«ã® `yes` ã‚„ã€æ–‡å­—列ã¨ã—ã¦ä»–ã®ãƒ–ール値を指定ã™ã‚‹å ´åˆãªã©å•題ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®å ´åˆã¯ã€å¼•用符ã ã‘を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:216 msgid "YAML converts certain strings into floating-point values, such as the string `1.0`. If you need to specify a version number (in a requirements.yml file, for example), you will need to quote the value if it looks like a floating-point value::" msgstr "YAML ã¯ã€ç‰¹å®šã®æ–‡å­—列を文字列 `1.0` ãªã©ã®æµ®å‹•å°æ•°ç‚¹å€¤ã«å¤‰æ›ã—ã¾ã™ã€‚(ãŸã¨ãˆã° requirements.yml ファイルã§) ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã€ãã‚ŒãŒæµ®å‹•å°æ•°ç‚¹ã®å€¤ã®ã‚ˆã†ã«è¦‹ãˆã‚‹å ´åˆã¯ã€ãã®å€¤ã‚’引用符ã§å›²ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:226 #: ../../rst/reference_appendices/faq.rst:813 #: ../../rst/reference_appendices/glossary.rst:529 #: ../../rst/reference_appendices/test_strategies.rst:267 msgid ":ref:`working_with_playbooks`" msgstr ":ref:`working_with_playbooks`" #: ../../rst/reference_appendices/YAMLSyntax.rst:227 msgid "Learn what playbooks can do and how to write/run them." msgstr "Playbook ã§ã§ãã‚‹ã“ã¨ã¨ã€Playbook を記述ãŠã‚ˆã³å®Ÿè¡Œã™ã‚‹æ–¹æ³•ã‚’å­¦ã³ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:228 msgid "`YAMLLint `_" msgstr "`YAMLLint `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:229 msgid "YAML Lint (online) helps you debug YAML syntax if you are having problems" msgstr "YAML ヒント (オンライン) ã¯ã€å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã« YAML æ§‹æ–‡ã®ãƒ‡ãƒãƒƒã‚°ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/reference_appendices/YAMLSyntax.rst:230 msgid "`GitHub examples directory `_" msgstr "`GitHub examples ディレクトリー `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:231 msgid "Complete playbook files from the github project source" msgstr "Github プロジェクトソースã®å®Œå…¨ãª Playbook ファイル" #: ../../rst/reference_appendices/YAMLSyntax.rst:232 msgid "`Wikipedia YAML syntax reference `_" msgstr "`Wikipedia YAML 構文リファレンス `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:233 msgid "A good guide to YAML syntax" msgstr "YAML æ§‹æ–‡ã®é©åˆ‡ãªã‚¬ã‚¤ãƒ‰" #: ../../rst/reference_appendices/YAMLSyntax.rst:234 msgid "`Mailing List `_" msgstr "`メーリングリスト `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:235 msgid "Questions? Help? Ideas? Stop by the list on Google Groups" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã‹ã€‚ã”ææ¡ˆã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google グループã®ä¸€è¦§ã‚’ã”覧ãã ã•ã„。" #: ../../rst/reference_appendices/YAMLSyntax.rst:236 #: ../../rst/reference_appendices/common_return_values.rst:250 #: ../../rst/reference_appendices/glossary.rst:535 #: ../../rst/reference_appendices/release_and_maintenance.rst:237 #: ../../rst/reference_appendices/test_strategies.rst:273 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/reference_appendices/YAMLSyntax.rst:237 msgid "How to join Ansible chat channels (join #yaml for yaml-specific questions)" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã™ã‚‹æ–¹æ³• (yaml 固有ã®è³ªå•㯠#yaml ã«å‚加ã—ã¦ãã ã•ã„)" #: ../../rst/reference_appendices/YAMLSyntax.rst:239 msgid "`YAML 1.1 Specification `_" msgstr "`YAML 1.1 Specification `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:239 msgid "The Specification for YAML 1.1, which PyYAML and libyaml are currently implementing" msgstr "PyYAML ãŠã‚ˆã³ libyaml ãŒç¾åœ¨å®Ÿè£…ã•れã¦ã„ã‚‹ YAML 1.1 ã®ä»•様" #: ../../rst/reference_appendices/YAMLSyntax.rst:241 msgid "`YAML 1.2 Specification `_" msgstr "`YAML 1.2 仕様 `_" #: ../../rst/reference_appendices/YAMLSyntax.rst:242 msgid "For completeness, YAML 1.2 is the successor of 1.1" msgstr "完全を期ã™ãŸã‚ã€YAML 1.2 㯠1.1 ã®å¾Œç¶™ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/automationhub.rst:4 msgid "Ansible Automation Hub" msgstr "Ansible Automation Hub" #: ../../rst/reference_appendices/automationhub.rst:6 msgid "`Ansible Automation Hub `_ is the official location to discover and download supported :ref:`collections `, included as part of an Ansible Automation Platform subscription. These content collections contain modules, plugins, roles, and playbooks in a downloadable package." msgstr "`Ansible Automation Hub `_ ã¯ã€Ansible Platform サブスクリプションã«åŒæ¢±ã•れるã€ã‚µãƒãƒ¼ãƒˆå¯¾è±¡ã® :ref:`コレクション ` を検出ã—ã¦ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å…¬å¼ã®å ´æ‰€ã§ã™ã€‚ã“ã®ã‚ˆã†ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„コレクションã§ã¯ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å¯èƒ½ãªãƒ‘ッケージã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインã€ãƒ­ãƒ¼ãƒ«ã€Playbook ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/automationhub.rst:8 msgid "Ansible Automation Hub gives you direct access to trusted content collections from Red Hat and Certified Partners. You can find content by topic or Ansible Partner organizations." msgstr "Ansible Automation Hub を使用ã™ã‚‹ã¨ã€Red Hat ãŠã‚ˆã³èªå®šãƒ‘ートナーã‹ã‚‰ã€ä¿¡é ¼ã§ãるコンテンツコレクションã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚コンテンツã¯ã€ãƒˆãƒ”ック別ã¾ãŸã¯ Ansible ãƒ‘ãƒ¼ãƒˆãƒŠãƒ¼çµ„ç¹”åˆ¥ã«æ¤œç´¢ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/automationhub.rst:10 msgid "Ansible Automation Hub is the downstream Red Hat supported product version of Ansible Galaxy. Find out more about Ansible Automation Hub features and how to access it at `Ansible Automation Hub `_. Ansible Automation Hub is part of the Red Hat Ansible Automation Platform subscription, and comes bundled with support from Red Hat, Inc." msgstr "Ansible Automation Hub ã¯ã€Red Hat ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ Ansible Galaxy ã®è£½å“ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (ダウンストリーム) ã§ã™ã€‚Ansible Automation Hub ã®æ©Ÿèƒ½ã¨ãã®ã‚¢ã‚¯ã‚»ã‚¹æ–¹æ³•ã®è©³ç´°ã¯ã€ã€Œ`Ansible Automation Hub `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible Automation Hub ã¯ã€Red Hat Ansible Automation Platform サブスクリプションã§åˆ©ç”¨ã§ãã€Red Hat, Inc ã®ã‚µãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:4 msgid "Return Values" msgstr "戻り値" #: ../../rst/reference_appendices/common_return_values.rst:6 msgid "Topics" msgstr "トピック" #: ../../rst/reference_appendices/common_return_values.rst:8 msgid "Ansible modules normally return a data structure that can be registered into a variable, or seen directly when output by the `ansible` program. Each module can optionally document its own unique return values (visible through ansible-doc and on the :ref:`main docsite`)." msgstr "Ansible ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é€šå¸¸ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã¯ã€å¤‰æ•°ã«ç™»éŒ²ã—ãŸã‚Šã€`ansible` プログラムã§å‡ºåŠ›ã•れãŸã¨ãã«ç›´æŽ¥ç¢ºèªã—ãŸã‚Šã§ãã¾ã™ã€‚å„モジュールã¯ä»»æ„ã§ã€ç‹¬è‡ªã®æˆ»ã‚Šå€¤ã‚’ドキュメント化ã§ãã¾ã™ (ansible-doc ã‚„ :ref:`メインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µã‚¤ãƒˆ` ã§ç¢ºèªã§ãã¾ã™)。" #: ../../rst/reference_appendices/common_return_values.rst:11 msgid "This document covers return values common to all modules." msgstr "本ガイドã§ã¯ã€å…¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å…±é€šã™ã‚‹æˆ»ã‚Šå€¤ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:13 msgid "Some of these keys might be set by Ansible itself once it processes the module's return information." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤æƒ…å ±ã®å‡¦ç†ãŒçµ‚ã‚ã‚‹ã¨ã€Ansible ã«ã‚ˆã‚Šã“ã®ã‚­ãƒ¼ã®ä¸€éƒ¨ãŒè¨­å®šã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:17 msgid "Common" msgstr "共通" #: ../../rst/reference_appendices/common_return_values.rst:20 msgid "backup_file" msgstr "backup_file" #: ../../rst/reference_appendices/common_return_values.rst:21 msgid "For those modules that implement `backup=no|yes` when manipulating files, a path to the backup file created." msgstr "ファイルをæ“作ã™ã‚‹ã¨ãã« `backup=no|yes` を実装ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å‘ã‘。作æˆã—ãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã¸ã®ãƒ‘ス。" #: ../../rst/reference_appendices/common_return_values.rst:29 #: ../../rst/reference_appendices/config.rst:504 msgid "changed" msgstr "changed" #: ../../rst/reference_appendices/common_return_values.rst:30 msgid "A boolean indicating if the task had to make changes to the target or delegated host." msgstr "タスクãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¾ãŸã¯å§”ä»»ã•れãŸãƒ›ã‚¹ãƒˆã«å¤‰æ›´ã‚’加ãˆã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。" #: ../../rst/reference_appendices/common_return_values.rst:37 #: ../../rst/reference_appendices/playbooks_keywords.rst:62 #: ../../rst/reference_appendices/playbooks_keywords.rst:200 #: ../../rst/reference_appendices/playbooks_keywords.rst:296 #: ../../rst/reference_appendices/playbooks_keywords.rst:407 msgid "diff" msgstr "diff" #: ../../rst/reference_appendices/common_return_values.rst:38 msgid "Information on differences between the previous and current state. Often a dictionary with entries ``before`` and ``after``, which will then be formatted by the callback plugin to a diff view." msgstr "ç›´å‰ã¨ç¾åœ¨ã®çŠ¶æ…‹ã®ç›¸é•点ã«é–¢ã™ã‚‹æƒ…報。通常ã€``before`` 㨠``after`` ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’指ã—ã€callback プラグインã«ã‚ˆã£ã¦ã€ã“ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒç›¸é•点ã®ãƒ“ュー書å¼ã«æ•´ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:55 msgid "failed" msgstr "failed" #: ../../rst/reference_appendices/common_return_values.rst:56 msgid "A boolean that indicates if the task was failed or not." msgstr "タスクãŒå¤±æ•—ã—ãŸã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。" #: ../../rst/reference_appendices/common_return_values.rst:63 msgid "invocation" msgstr "invocation" #: ../../rst/reference_appendices/common_return_values.rst:64 msgid "Information on how the module was invoked." msgstr "モジュールãŒã©ã®ã‚ˆã†ã«å‘¼ã³å‡ºã•れãŸã‹ã‚’ç¤ºã™æƒ…報。" #: ../../rst/reference_appendices/common_return_values.rst:96 msgid "msg" msgstr "msg" #: ../../rst/reference_appendices/common_return_values.rst:97 msgid "A string with a generic message relayed to the user." msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æ¸¡ã•れる一般的ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å«ã‚€æ–‡å­—列。" #: ../../rst/reference_appendices/common_return_values.rst:104 msgid "rc" msgstr "rc" #: ../../rst/reference_appendices/common_return_values.rst:105 msgid "Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on), this field contains 'return code' of these utilities." msgstr "コマンドラインユーティリティーを実行ã—ãŸã‚Šã€(rawã€shellã€command ãªã©) 直接コマンドを実行ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„るモジュール。ã“ã®ãƒ•ィールドã«ã¯ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ã€Œæˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã€ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:112 msgid "results" msgstr "results" #: ../../rst/reference_appendices/common_return_values.rst:113 msgid "If this key exists, it indicates that a loop was present for the task and that it contains a list of the normal module 'result' per item." msgstr "ã“ã®ã‚­ãƒ¼ãŒå­˜åœ¨ã™ã‚‹å ´åˆã«ã¯ã€ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ãƒ«ãƒ¼ãƒ—ãŒå­˜åœ¨ã—ã€ã‚¢ã‚¤ãƒ†ãƒ ã”ã¨ã«é€šå¸¸ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã€Œçµæžœã€ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:175 msgid "skipped" msgstr "skipped" #: ../../rst/reference_appendices/common_return_values.rst:176 msgid "A boolean that indicates if the task was skipped or not" msgstr "タスクãŒã‚¹ã‚­ãƒƒãƒ—ã•れãŸã‹ã©ã†ã‹ã‚’示ã™ãƒ–ール値。" #: ../../rst/reference_appendices/common_return_values.rst:183 msgid "stderr" msgstr "stderr" #: ../../rst/reference_appendices/common_return_values.rst:184 msgid "Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on), this field contains the error output of these utilities." msgstr "コマンドラインユーティリティーを実行ã—ãŸã‚Šã€(rawã€shellã€command ãªã©ã®) コマンドを直接実行ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã•れã¦ã„るモジュール。ã“ã®ãƒ•ィールドã«ã¯ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®ã‚¨ãƒ©ãƒ¼å‡ºåŠ›ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:191 msgid "stderr_lines" msgstr "stderr_lines" #: ../../rst/reference_appendices/common_return_values.rst:192 msgid "When `stderr` is returned we also always provide this field which is a list of strings, one item per line from the original." msgstr "`stderr` ãŒè¿”ã•れるã¨ã€æ–‡å­—列ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ã“ã®ãƒ•ィールドも常ã«è¡¨ç¤ºã•れã¾ã™ (å…ƒã®å‡ºåŠ›ã® 1 行㫠1 é …ç›®)。" #: ../../rst/reference_appendices/common_return_values.rst:201 msgid "stdout" msgstr "stdout" #: ../../rst/reference_appendices/common_return_values.rst:202 msgid "Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on). This field contains the normal output of these utilities." msgstr "コマンドラインユーティリティーを実行ã—ãŸã‚Šã€(rawã€shellã€command ãªã©ã®) コマンドを直接実行ã™ã‚‹ã‚ˆã†ã«èª¿æ•´ã•れã¦ã„るモジュール。ã“ã®ãƒ•ィールドã«ã¯ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®é€šå¸¸å‡ºåŠ›ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:209 msgid "stdout_lines" msgstr "stdout_lines" #: ../../rst/reference_appendices/common_return_values.rst:210 msgid "When `stdout` is returned, Ansible always provides a list of strings, each containing one item per line from the original output." msgstr "`stdout` ãŒè¿”ã•れるã¨ã€Ansible ã¯å¸¸ã«æ–‡å­—列ã®ãƒªã‚¹ãƒˆ (å…ƒã®å‡ºåŠ›ã® 1 行ã«é …目を 1 ã¤å«ã‚ã‚‹) を渡ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:222 msgid "Internal use" msgstr "Ansible 内ã§ã®ä½¿ç”¨" #: ../../rst/reference_appendices/common_return_values.rst:224 msgid "These keys can be added by modules but will be removed from registered variables; they are 'consumed' by Ansible itself." msgstr "以下ã®ã‚­ãƒ¼ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§è¿½åŠ ã§ãã¾ã™ãŒã€ç™»éŒ²å¤‰æ•°ã‹ã‚‰ã¯å‰Šé™¤ã•れã¾ã™ã€‚ã“れらã®ã‚­ãƒ¼ã¯ã€Ansible 自体ãŒã€Œä½¿ç”¨ã€ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:227 #: ../../rst/reference_appendices/special_variables.rst:139 msgid "ansible_facts" msgstr "ansible_facts" #: ../../rst/reference_appendices/common_return_values.rst:228 msgid "This key should contain a dictionary which will be appended to the facts assigned to the host. These will be directly accessible and don't require using a registered variable." msgstr "ã“ã®ã‚­ãƒ¼ã«ã¯ã€ãƒ›ã‚¹ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ•ァクトã«è¿½åŠ ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¯ãšã§ã™ã€‚ã“ã®ã‚­ãƒ¼ã¯ã€ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãã€ç™»éŒ²å¤‰æ•°ã‚’使用ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/common_return_values.rst:231 msgid "exception" msgstr "exception" #: ../../rst/reference_appendices/common_return_values.rst:232 msgid "This key can contain traceback information caused by an exception in a module. It will only be displayed on high verbosity (-vvv)." msgstr "ã“ã®ã‚­ãƒ¼ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¾‹å¤–ã§ç™ºç”Ÿã—ãŸãƒˆãƒ¬ãƒ¼ã‚¹ãƒãƒƒã‚¯ã®æƒ…å ±ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€è©³ç´°ãƒ¬ãƒ™ãƒ«ãŒé«˜ã„ (-vvv) å ´åˆã«é™ã‚Šè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:235 msgid "warnings" msgstr "warnings" #: ../../rst/reference_appendices/common_return_values.rst:236 msgid "This key contains a list of strings that will be presented to the user." msgstr "ã“ã®ã‚­ãƒ¼ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れる文字列ã®ä¸€è¦§ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:239 msgid "deprecations" msgstr "deprecations" #: ../../rst/reference_appendices/common_return_values.rst:240 msgid "This key contains a list of dictionaries that will be presented to the user. Keys of the dictionaries are `msg` and `version`, values are string, value for the `version` key can be an empty string." msgstr "ã“ã®ã‚­ãƒ¼ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¡¨ç¤ºã•れるディクショナリー一覧ãŒå«ã¾ã‚Œã¾ã™ã€‚ディクショナリーã®ã‚­ãƒ¼ã¯ `msg` 㨠`version` ã§ã€å€¤ã¯æ–‡å­—列ã§ã™ã€‚`version` キーã®å€¤ã¯ç©ºç™½ã®æ–‡å­—列ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/common_return_values.rst:244 #: ../../rst/reference_appendices/test_strategies.rst:265 msgid ":ref:`list_of_collections`" msgstr ":ref:`list_of_collections`" #: ../../rst/reference_appendices/common_return_values.rst:245 #: ../../rst/reference_appendices/test_strategies.rst:266 msgid "Browse existing collections, modules, and plugins" msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインã®é–²è¦§" #: ../../rst/reference_appendices/common_return_values.rst:246 msgid "`GitHub modules directory `_" msgstr "`GitHub モジュールディレクトリー `_" #: ../../rst/reference_appendices/common_return_values.rst:247 msgid "Browse source of core and extras modules" msgstr "コアモジュールãŠã‚ˆã³è¿½åŠ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚½ãƒ¼ã‚¹ã®å‚ç…§" #: ../../rst/reference_appendices/common_return_values.rst:248 msgid "`Mailing List `_" msgstr "`メーリングリスト `_" #: ../../rst/reference_appendices/common_return_values.rst:249 msgid "Development mailing list" msgstr "開発メーリングリスト" #: ../../rst/reference_appendices/common_return_values.rst:251 #: ../../rst/reference_appendices/glossary.rst:536 #: ../../rst/reference_appendices/release_and_maintenance.rst:238 #: ../../rst/reference_appendices/test_strategies.rst:274 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/reference_appendices/config.rst:5 msgid "Ansible Configuration Settings" msgstr "Ansible æ§‹æˆè¨­å®š" #: ../../rst/reference_appendices/config.rst:7 msgid "Ansible supports several sources for configuring its behavior, including an ini file named ``ansible.cfg``, environment variables, command-line options, playbook keywords, and variables. See :ref:`general_precedence_rules` for details on the relative precedence of each source." msgstr "Ansible ã¯ã€``ansible.cfg`` ã¨ã„ã†åå‰ã® ini ファイルã€ç’°å¢ƒå¤‰æ•°ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€Playbook ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã€å¤‰æ•°ãªã©ã€å‹•作を設定ã™ã‚‹ãŸã‚ã®è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚å„ソースã®ç›¸å¯¾å„ªå…ˆé †ä½ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€Œ:ref:`general_precedence_rules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:9 msgid "The ``ansible-config`` utility allows users to see all the configuration settings available, their defaults, how to set them and where their current value comes from. See :ref:`ansible-config` for more information." msgstr "``ansible-config`` ユーティリティーを使用ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯åˆ©ç”¨å¯èƒ½ãªã™ã¹ã¦ã®æ§‹æˆè¨­å®šã€ãƒ‡ãƒ•ォルト値ã€è¨­å®šæ–¹æ³•ã€ãŠã‚ˆã³ç¾åœ¨ã®å€¤ã‚’å—ã‘å–る場所を確èªã§ãã¾ã™ã€‚詳細ã¯ã€Œ:ref:`ansible-config`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:15 msgid "The configuration file" msgstr "設定ファイル" #: ../../rst/reference_appendices/config.rst:17 msgid "Changes can be made and used in a configuration file which will be searched for in the following order:" msgstr "変更を行ã„ã€æ¬¡ã®é †åºã§æ¤œç´¢ã•れる構æˆãƒ•ァイルã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:19 #: ../../rst/reference_appendices/general_precedence.rst:34 msgid "``ANSIBLE_CONFIG`` (environment variable if set)" msgstr "``ANSIBLE_CONFIG`` (設定ã•れã¦ã„ã‚‹å ´åˆã¯ç’°å¢ƒå¤‰æ•°ãƒ¡ã‚½ãƒƒãƒ‰)" #: ../../rst/reference_appendices/config.rst:20 #: ../../rst/reference_appendices/general_precedence.rst:35 msgid "``ansible.cfg`` (in the current directory)" msgstr "``ansible.cfg`` (ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼)" #: ../../rst/reference_appendices/config.rst:21 #: ../../rst/reference_appendices/general_precedence.rst:36 msgid "``~/.ansible.cfg`` (in the home directory)" msgstr "``~/.ansible.cfg`` (ホームディレクトリー)" #: ../../rst/reference_appendices/config.rst:22 #: ../../rst/reference_appendices/general_precedence.rst:37 msgid "``/etc/ansible/ansible.cfg``" msgstr "``/etc/ansible/ansible.cfg``" #: ../../rst/reference_appendices/config.rst:24 msgid "Ansible will process the above list and use the first file found, all others are ignored." msgstr "Ansible ã¯ä¸Šè¨˜ã®ä¸€è¦§ã‚’処ç†ã—ã€è¦‹ã¤ã‹ã£ãŸæœ€åˆã®ãƒ•ァイルを使用ã—ã¾ã™ãŒã€ãã®ä»–ã¯ã™ã¹ã¦ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:28 msgid "The configuration file is one variant of an INI format. Both the hash sign (``#``) and semicolon (``;``) are allowed as comment markers when the comment starts the line. However, if the comment is inline with regular values, only the semicolon is allowed to introduce the comment. For instance::" msgstr "設定ファイルã¯ã€INI å½¢å¼ã® 1 ã¤ã®ãƒãƒªã‚¢ãƒ³ãƒˆã§ã™ã€‚コメントãŒè¡Œã‚’é–‹å§‹ã™ã‚‹å ´åˆã¯ã€ãƒãƒƒã‚·ãƒ¥è¨˜å· (``#``) ã¨ã‚»ãƒŸã‚³ãƒ­ãƒ³ (``;``) ã®ä¸¡æ–¹ãŒã‚³ãƒ¡ãƒ³ãƒˆãƒžãƒ¼ã‚«ãƒ¼ã¨ã—ã¦è¨±å¯ã•れã¾ã™ã€‚ãŸã ã—ã€ã‚³ãƒ¡ãƒ³ãƒˆãŒé€šå¸¸ã®å€¤ã§ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã§ã‚ã‚‹å ´åˆã¯ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ã ã‘ãŒã‚³ãƒ¡ãƒ³ãƒˆã‚’追加ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:42 msgid "Avoiding security risks with ``ansible.cfg`` in the current directory" msgstr "ç¾è¡Œãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ ``ansible.cfg`` を使用ã—ãŸã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ã‚’回é¿" #: ../../rst/reference_appendices/config.rst:45 msgid "If Ansible were to load ``ansible.cfg`` from a world-writable current working directory, it would create a serious security risk. Another user could place their own config file there, designed to make Ansible run malicious code both locally and remotely, possibly with elevated privileges. For this reason, Ansible will not automatically load a config file from the current working directory if the directory is world-writable." msgstr "Ansible ãŒã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ã§æ›¸ãè¾¼ã¿å¯èƒ½ãªç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ ``ansible.cfg`` を読ã¿è¾¼ã‚“ã å ´åˆã¯ã€æ·±åˆ»ãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ãŒç™ºç”Ÿã—ã¾ã™ã€‚別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€å ´åˆã«ã‚ˆã‚Šæ˜‡æ ¼ã—ãŸæ¨©é™ã§ Ansible ãŒãƒ­ãƒ¼ã‚«ãƒ«ã¨ãƒªãƒ¢ãƒ¼ãƒˆã®ä¸¡æ–¹ã§æ‚ªæ„ã®ã‚るコードを実行ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れãŸç‹¬è‡ªã®æ§‹æˆãƒ•ァイルをãã“ã«é…ç½®ã§ãã¾ã™ã€‚ãã®ãŸã‚ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒèª°ã§ã‚‚書ãè¾¼ã¿å¯èƒ½ãªçŠ¶æ…‹ã§ã‚ã‚‹å ´åˆã€Ansible ã¯ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰è¨­å®šãƒ•ァイルを自動的ã«èª­ã¿è¾¼ã¿ã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:52 msgid "If you depend on using Ansible with a config file in the current working directory, the best way to avoid this problem is to restrict access to your Ansible directories to particular user(s) and/or group(s). If your Ansible directories live on a filesystem which has to emulate Unix permissions, like Vagrant or Windows Subsystem for Linux (WSL), you may, at first, not know how you can fix this as ``chmod``, ``chown``, and ``chgrp`` might not work there. In most of those cases, the correct fix is to modify the mount options of the filesystem so the files and directories are readable and writable by the users and groups running Ansible but closed to others. For more details on the correct settings, see:" msgstr "ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®è¨­å®šãƒ•ァイル㧠Ansible を使用ã™ã‚‹å ´åˆã€ã“ã®å•題を回é¿ã™ã‚‹æœ€å–„ã®æ–¹æ³•ã¯ã€Ansible ディレクトリーã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’特定ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚„グループã«åˆ¶é™ã™ã‚‹ã“ã¨ã§ã™ã€‚Ansible ディレクトリーãŒã€Vagrant ã‚„ Windows Subsystem for Linux (WSL) ãªã©ã® Unix パーミッションをエミュレートã™ã‚‹å¿…è¦ãŒã‚るファイルシステムã«å­˜åœ¨ã™ã‚‹å ´åˆã€ãã“ã§ã¯ ``chmod``ã€``chown``ã€ãŠã‚ˆã³ ``chgrp`` ãŒæ©Ÿèƒ½ã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æœ€åˆã¯ã©ã®ã‚ˆã†ã«ä¿®æ­£ã™ã‚‹ã‹åˆ†ã‹ã‚‰ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€é©åˆ‡ãªä¿®æ­£ãŒã€ãƒ•ァイルシステムã®ãƒžã‚¦ãƒ³ãƒˆã‚ªãƒ—ションを修正ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ•ァイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€Ansible を実行ã—ã¦ã„るユーザーãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ãŒèª­ã¿å–りãŠã‚ˆã³æ›¸ãè¾¼ã¿ã‚’ã§ãるよã†ã«ãªã‚Šã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¨±å¯ã—ãªã„よã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚æ­£ã—ã„設定ã®è©³ç´°ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:63 msgid "for Vagrant, the `Vagrant documentation `_ covers synced folder permissions." msgstr "Vagrant ã®å ´åˆã€`Vagrant ドキュメント `_ ã¯åŒæœŸã•れãŸãƒ•ォルダーã®ãƒ‘ーミッションã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:64 msgid "for WSL, the `WSL docs `_ and this `Microsoft blog post `_ cover mount options." msgstr "WSL ã®å ´åˆã€`WSL ドキュメント `_ ãŠã‚ˆã³ `Microsoft ã®ãƒ–ログ投稿 `_ ã¯ãƒžã‚¦ãƒ³ãƒˆã‚ªãƒ—ションã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:67 msgid "If you absolutely depend on storing your Ansible config in a world-writable current working directory, you can explicitly specify the config file via the :envvar:`ANSIBLE_CONFIG` environment variable. Please take appropriate steps to mitigate the security concerns above before doing so." msgstr "誰ã§ã‚‚書ãè¾¼ã¿å¯èƒ½ãªç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« Ansible 設定をä¿å­˜ã™ã‚‹ã“ã¨ã‚’完全ã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€:envvar:`ANSIBLE_CONFIG` 環境変数を介ã—ã¦è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã§ãã¾ã™ã€‚セキュリティーã«é–¢ã™ã‚‹æ‡¸å¿µã‚’軽減ã™ã‚‹ãŸã‚ã®é©åˆ‡ãªæ‰‹é †ã‚’実行ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:74 msgid "Relative paths for configuration" msgstr "設定ã®ç›¸å¯¾ãƒ‘ス" #: ../../rst/reference_appendices/config.rst:76 msgid "You can specify a relative path for many configuration options. In most of those cases the path used will be relative to the ``ansible.cfg`` file used for the current execution. If you need a path relative to your current working directory (CWD) you can use the ``{{CWD}}`` macro to specify it. We do not recommend this approach, as using your CWD as the root of relative paths can be a security risk. For example: ``cd /tmp; secureinfo=./newrootpassword ansible-playbook ~/safestuff/change_root_pwd.yml``." msgstr "多ãã®è¨­å®šã‚ªãƒ—ションã«ç›¸å¯¾ãƒ‘スを指定ã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã€ä½¿ç”¨ã•れるパスã¯ã€ç¾åœ¨ã®å®Ÿè¡Œã«ä½¿ç”¨ã•れる ``ansible.cfg`` ファイルã®ç›¸å¯¾ãƒ‘スã«ãªã‚Šã¾ã™ã€‚ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (CWD) ã¸ã®ç›¸å¯¾ãƒ‘スãŒå¿…è¦ãªå ´åˆã¯ã€``{{CWD}}`` マクロを使用ã—ã¦æŒ‡å®šã§ãã¾ã™ã€‚相対パスã®ãƒ«ãƒ¼ãƒˆã¨ã—㦠CWD を使用ã™ã‚‹ã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®æ–¹æ³•ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。ãŸã¨ãˆã°ã€``cd /tmp; secureinfo=./newrootpassword ansible-playbook ~/safestuff/change_root_pwd.yml`` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:86 msgid "Common Options" msgstr "共通オプション" #: ../../rst/reference_appendices/config.rst:88 msgid "This is a copy of the options available from our release, your local install might have extra options due to additional plugins, you can use the command line utility mentioned above (`ansible-config`) to browse through those." msgstr "ã“れã¯ã€ãƒªãƒªãƒ¼ã‚¹ã§åˆ©ç”¨å¯èƒ½ãªã‚ªãƒ—ションã®ã‚³ãƒ”ーã§ã€è¿½åŠ ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«è¿½åŠ ã®ã‚ªãƒ—ションãŒå­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚上記ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ (`ansible-config`) を使用ã—ã¦ã€ã“れらを閲覧ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:96 msgid "ACTION_WARNINGS" msgstr "ACTION_WARNINGS" #: ../../rst/reference_appendices/config.rst msgid "Description" msgstr "説明" #: ../../rst/reference_appendices/config.rst:98 msgid "By default Ansible will issue a warning when received from a task action (module or action plugin) These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ (モジュールã¾ãŸã¯ action プラグイン) ã‹ã‚‰å—ã‘å–ã‚‹ã¨ã€è­¦å‘Šã‚’ False ã«èª¿æ•´ã™ã‚‹ã“ã¨ã§è­¦å‘Šã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst msgid "Type" msgstr "タイプ" #: ../../rst/reference_appendices/config.rst:99 #: ../../rst/reference_appendices/config.rst:114 #: ../../rst/reference_appendices/config.rst:129 #: ../../rst/reference_appendices/config.rst:208 #: ../../rst/reference_appendices/config.rst:222 #: ../../rst/reference_appendices/config.rst:238 #: ../../rst/reference_appendices/config.rst:252 #: ../../rst/reference_appendices/config.rst:268 #: ../../rst/reference_appendices/config.rst:283 #: ../../rst/reference_appendices/config.rst:467 #: ../../rst/reference_appendices/config.rst:944 #: ../../rst/reference_appendices/config.rst:1024 #: ../../rst/reference_appendices/config.rst:1037 #: ../../rst/reference_appendices/config.rst:1051 #: ../../rst/reference_appendices/config.rst:1065 #: ../../rst/reference_appendices/config.rst:1079 #: ../../rst/reference_appendices/config.rst:1201 #: ../../rst/reference_appendices/config.rst:1256 #: ../../rst/reference_appendices/config.rst:1417 #: ../../rst/reference_appendices/config.rst:1432 #: ../../rst/reference_appendices/config.rst:1446 #: ../../rst/reference_appendices/config.rst:1465 #: ../../rst/reference_appendices/config.rst:1624 #: ../../rst/reference_appendices/config.rst:1638 #: ../../rst/reference_appendices/config.rst:1697 #: ../../rst/reference_appendices/config.rst:1807 #: ../../rst/reference_appendices/config.rst:1889 #: ../../rst/reference_appendices/config.rst:1998 #: ../../rst/reference_appendices/config.rst:2012 #: ../../rst/reference_appendices/config.rst:2054 #: ../../rst/reference_appendices/config.rst:2069 #: ../../rst/reference_appendices/config.rst:2132 #: ../../rst/reference_appendices/config.rst:2147 #: ../../rst/reference_appendices/config.rst:2207 #: ../../rst/reference_appendices/config.rst:2290 #: ../../rst/reference_appendices/config.rst:2322 #: ../../rst/reference_appendices/config.rst:2372 #: ../../rst/reference_appendices/config.rst:2388 #: ../../rst/reference_appendices/config.rst:2542 #: ../../rst/reference_appendices/config.rst:2556 #: ../../rst/reference_appendices/config.rst:2629 #: ../../rst/reference_appendices/config.rst:2643 #: ../../rst/reference_appendices/config.rst:2656 #: ../../rst/reference_appendices/config.rst:2881 #: ../../rst/reference_appendices/config.rst:2925 #: ../../rst/reference_appendices/config.rst:2975 msgid "boolean" msgstr "boolean" #: ../../rst/reference_appendices/config.rst msgid "Default" msgstr "デフォルト" #: ../../rst/reference_appendices/config.rst:100 #: ../../rst/reference_appendices/config.rst:115 #: ../../rst/reference_appendices/config.rst:468 #: ../../rst/reference_appendices/config.rst:1890 #: ../../rst/reference_appendices/config.rst:1999 #: ../../rst/reference_appendices/config.rst:2013 #: ../../rst/reference_appendices/config.rst:2070 #: ../../rst/reference_appendices/config.rst:2148 #: ../../rst/reference_appendices/config.rst:2291 #: ../../rst/reference_appendices/config.rst:2323 #: ../../rst/reference_appendices/config.rst:2373 #: ../../rst/reference_appendices/config.rst:2543 #: ../../rst/reference_appendices/config.rst:2557 #: ../../rst/reference_appendices/config.rst:2657 #: ../../rst/reference_appendices/config.rst:2882 #: ../../rst/reference_appendices/config.rst:2926 #: ../../rst/reference_appendices/config.rst:2990 msgid "``True``" msgstr "``True``" #: ../../rst/reference_appendices/config.rst msgid "Version Added" msgstr "追加ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/reference_appendices/config.rst:101 #: ../../rst/reference_appendices/config.rst:116 #: ../../rst/reference_appendices/config.rst:2134 #: ../../rst/reference_appendices/config.rst:2324 #: ../../rst/reference_appendices/config.rst:2897 #: ../../rst/reference_appendices/config.rst:2912 msgid "2.5" msgstr "2.5" #: ../../rst/reference_appendices/config.rst msgid "Ini" msgstr "Ini" #: ../../rst/reference_appendices/config.rst msgid "Section" msgstr "セクション" #: ../../rst/reference_appendices/config.rst:103 #: ../../rst/reference_appendices/config.rst:159 #: ../../rst/reference_appendices/config.rst:164 #: ../../rst/reference_appendices/config.rst:184 #: ../../rst/reference_appendices/config.rst:197 #: ../../rst/reference_appendices/config.rst:211 #: ../../rst/reference_appendices/config.rst:225 #: ../../rst/reference_appendices/config.rst:241 #: ../../rst/reference_appendices/config.rst:257 #: ../../rst/reference_appendices/config.rst:272 #: ../../rst/reference_appendices/config.rst:301 #: ../../rst/reference_appendices/config.rst:316 #: ../../rst/reference_appendices/config.rst:329 #: ../../rst/reference_appendices/config.rst:342 #: ../../rst/reference_appendices/config.rst:355 #: ../../rst/reference_appendices/config.rst:369 #: ../../rst/reference_appendices/config.rst:383 #: ../../rst/reference_appendices/config.rst:388 #: ../../rst/reference_appendices/config.rst:408 #: ../../rst/reference_appendices/config.rst:413 #: ../../rst/reference_appendices/config.rst:436 #: ../../rst/reference_appendices/config.rst:451 #: ../../rst/reference_appendices/config.rst:453 #: ../../rst/reference_appendices/config.rst:470 #: ../../rst/reference_appendices/config.rst:948 #: ../../rst/reference_appendices/config.rst:974 #: ../../rst/reference_appendices/config.rst:1013 #: ../../rst/reference_appendices/config.rst:1028 #: ../../rst/reference_appendices/config.rst:1040 #: ../../rst/reference_appendices/config.rst:1054 #: ../../rst/reference_appendices/config.rst:1148 #: ../../rst/reference_appendices/config.rst:1162 #: ../../rst/reference_appendices/config.rst:1176 #: ../../rst/reference_appendices/config.rst:1190 #: ../../rst/reference_appendices/config.rst:1204 #: ../../rst/reference_appendices/config.rst:1217 #: ../../rst/reference_appendices/config.rst:1231 #: ../../rst/reference_appendices/config.rst:1245 #: ../../rst/reference_appendices/config.rst:1260 #: ../../rst/reference_appendices/config.rst:1274 #: ../../rst/reference_appendices/config.rst:1289 #: ../../rst/reference_appendices/config.rst:1303 #: ../../rst/reference_appendices/config.rst:1321 #: ../../rst/reference_appendices/config.rst:1338 #: ../../rst/reference_appendices/config.rst:1352 #: ../../rst/reference_appendices/config.rst:1366 #: ../../rst/reference_appendices/config.rst:1381 #: ../../rst/reference_appendices/config.rst:1393 #: ../../rst/reference_appendices/config.rst:1406 #: ../../rst/reference_appendices/config.rst:1421 #: ../../rst/reference_appendices/config.rst:1435 #: ../../rst/reference_appendices/config.rst:1469 #: ../../rst/reference_appendices/config.rst:1483 #: ../../rst/reference_appendices/config.rst:1497 #: ../../rst/reference_appendices/config.rst:1511 #: ../../rst/reference_appendices/config.rst:1525 #: ../../rst/reference_appendices/config.rst:1538 #: ../../rst/reference_appendices/config.rst:1549 #: ../../rst/reference_appendices/config.rst:1562 #: ../../rst/reference_appendices/config.rst:1573 #: ../../rst/reference_appendices/config.rst:1585 #: ../../rst/reference_appendices/config.rst:1599 #: ../../rst/reference_appendices/config.rst:1613 #: ../../rst/reference_appendices/config.rst:1627 #: ../../rst/reference_appendices/config.rst:1641 #: ../../rst/reference_appendices/config.rst:1658 #: ../../rst/reference_appendices/config.rst:1672 #: ../../rst/reference_appendices/config.rst:1686 #: ../../rst/reference_appendices/config.rst:1700 #: ../../rst/reference_appendices/config.rst:1714 #: ../../rst/reference_appendices/config.rst:1726 #: ../../rst/reference_appendices/config.rst:1740 #: ../../rst/reference_appendices/config.rst:1768 #: ../../rst/reference_appendices/config.rst:1782 #: ../../rst/reference_appendices/config.rst:1796 #: ../../rst/reference_appendices/config.rst:1810 #: ../../rst/reference_appendices/config.rst:1823 #: ../../rst/reference_appendices/config.rst:1837 #: ../../rst/reference_appendices/config.rst:1851 #: ../../rst/reference_appendices/config.rst:1865 #: ../../rst/reference_appendices/config.rst:1878 #: ../../rst/reference_appendices/config.rst:1893 #: ../../rst/reference_appendices/config.rst:1907 #: ../../rst/reference_appendices/config.rst:1919 #: ../../rst/reference_appendices/config.rst:1932 #: ../../rst/reference_appendices/config.rst:1945 #: ../../rst/reference_appendices/config.rst:1959 #: ../../rst/reference_appendices/config.rst:1973 #: ../../rst/reference_appendices/config.rst:1987 #: ../../rst/reference_appendices/config.rst:2001 #: ../../rst/reference_appendices/config.rst:2015 #: ../../rst/reference_appendices/config.rst:2058 #: ../../rst/reference_appendices/config.rst:2072 #: ../../rst/reference_appendices/config.rst:2090 #: ../../rst/reference_appendices/config.rst:2104 #: ../../rst/reference_appendices/config.rst:2121 #: ../../rst/reference_appendices/config.rst:2136 #: ../../rst/reference_appendices/config.rst:2150 #: ../../rst/reference_appendices/config.rst:2164 #: ../../rst/reference_appendices/config.rst:2293 #: ../../rst/reference_appendices/config.rst:2326 #: ../../rst/reference_appendices/config.rst:2340 #: ../../rst/reference_appendices/config.rst:2376 #: ../../rst/reference_appendices/config.rst:2498 #: ../../rst/reference_appendices/config.rst:2514 #: ../../rst/reference_appendices/config.rst:2545 #: ../../rst/reference_appendices/config.rst:2560 #: ../../rst/reference_appendices/config.rst:2574 #: ../../rst/reference_appendices/config.rst:2588 #: ../../rst/reference_appendices/config.rst:2614 #: ../../rst/reference_appendices/config.rst:2633 #: ../../rst/reference_appendices/config.rst:2729 #: ../../rst/reference_appendices/config.rst:2747 #: ../../rst/reference_appendices/config.rst:2767 #: ../../rst/reference_appendices/config.rst:2779 #: ../../rst/reference_appendices/config.rst:2795 #: ../../rst/reference_appendices/config.rst:2809 #: ../../rst/reference_appendices/config.rst:2827 #: ../../rst/reference_appendices/config.rst:2841 #: ../../rst/reference_appendices/config.rst:2856 #: ../../rst/reference_appendices/config.rst:2884 #: ../../rst/reference_appendices/config.rst:2929 #: ../../rst/reference_appendices/config.rst:2944 #: ../../rst/reference_appendices/config.rst:2964 #: ../../rst/reference_appendices/config.rst:2978 #: ../../rst/reference_appendices/config.rst:2993 #: ../../rst/reference_appendices/config.rst:3008 #: ../../rst/reference_appendices/config.rst:3023 #: ../../rst/reference_appendices/config.rst:3038 #: ../../rst/reference_appendices/config.rst:3053 #: ../../rst/reference_appendices/config.rst:3093 msgid "[defaults]" msgstr "[defaults]" #: ../../rst/reference_appendices/config.rst msgid "Key" msgstr "キー" #: ../../rst/reference_appendices/config.rst:104 msgid "action_warnings" msgstr "action_warnings" #: ../../rst/reference_appendices/config.rst msgid "Environment" msgstr "環境" #: ../../rst/reference_appendices/config.rst msgid "Variable" msgstr "変数" #: ../../rst/reference_appendices/config.rst:106 msgid ":envvar:`ANSIBLE_ACTION_WARNINGS`" msgstr ":envvar:`ANSIBLE_ACTION_WARNINGS`" #: ../../rst/reference_appendices/config.rst:111 msgid "AGNOSTIC_BECOME_PROMPT" msgstr "AGNOSTIC_BECOME_PROMPT" #: ../../rst/reference_appendices/config.rst:113 #: ../../rst/reference_appendices/config.rst:3218 msgid "Display an agnostic become prompt instead of displaying a prompt containing the command line supplied become method" msgstr "become メソッドをæä¾›ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’å«ã‚€ãƒ—ロンプトを表示ã™ã‚‹ä»£ã‚りã«ã€ä¾å­˜ã—ãªã„ become プロンプトを表示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:118 #: ../../rst/reference_appendices/config.rst:286 #: ../../rst/reference_appendices/config.rst:1068 #: ../../rst/reference_appendices/config.rst:1082 #: ../../rst/reference_appendices/config.rst:1095 #: ../../rst/reference_appendices/config.rst:1108 #: ../../rst/reference_appendices/config.rst:1121 #: ../../rst/reference_appendices/config.rst:1134 msgid "[privilege_escalation]" msgstr "[privilege_escalation]" #: ../../rst/reference_appendices/config.rst:119 msgid "agnostic_become_prompt" msgstr "agnostic_become_prompt" #: ../../rst/reference_appendices/config.rst:121 msgid ":envvar:`ANSIBLE_AGNOSTIC_BECOME_PROMPT`" msgstr ":envvar:`ANSIBLE_AGNOSTIC_BECOME_PROMPT`" #: ../../rst/reference_appendices/config.rst:126 msgid "ALLOW_WORLD_READABLE_TMPFILES" msgstr "ALLOW_WORLD_READABLE_TMPFILES" #: ../../rst/reference_appendices/config.rst:128 msgid "This setting has been moved to the individual shell plugins as a plugin option :ref:`shell_plugins`. The existing configuration settings are still accepted with the shell plugin adding additional options, like variables. This message will be removed in 2.14." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`shell_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚·ã‚§ãƒ«ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚既存ã®è¨­å®šã¯ã€å¤‰æ•°ãªã©ã®ã‚ªãƒ—ションを追加ã™ã‚‹ã‚·ã‚§ãƒ«ãƒ—ラグインã§ä½¿ç”¨ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.14 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:130 #: ../../rst/reference_appendices/config.rst:209 #: ../../rst/reference_appendices/config.rst:223 #: ../../rst/reference_appendices/config.rst:239 #: ../../rst/reference_appendices/config.rst:253 #: ../../rst/reference_appendices/config.rst:269 #: ../../rst/reference_appendices/config.rst:284 #: ../../rst/reference_appendices/config.rst:945 #: ../../rst/reference_appendices/config.rst:1025 #: ../../rst/reference_appendices/config.rst:1038 #: ../../rst/reference_appendices/config.rst:1052 #: ../../rst/reference_appendices/config.rst:1066 #: ../../rst/reference_appendices/config.rst:1080 #: ../../rst/reference_appendices/config.rst:1202 #: ../../rst/reference_appendices/config.rst:1257 #: ../../rst/reference_appendices/config.rst:1418 #: ../../rst/reference_appendices/config.rst:1433 #: ../../rst/reference_appendices/config.rst:1447 #: ../../rst/reference_appendices/config.rst:1466 #: ../../rst/reference_appendices/config.rst:1625 #: ../../rst/reference_appendices/config.rst:1639 #: ../../rst/reference_appendices/config.rst:1698 #: ../../rst/reference_appendices/config.rst:1808 #: ../../rst/reference_appendices/config.rst:1930 #: ../../rst/reference_appendices/config.rst:2027 #: ../../rst/reference_appendices/config.rst:2055 #: ../../rst/reference_appendices/config.rst:2133 #: ../../rst/reference_appendices/config.rst:2208 #: ../../rst/reference_appendices/config.rst:2389 #: ../../rst/reference_appendices/config.rst:2404 #: ../../rst/reference_appendices/config.rst:2482 #: ../../rst/reference_appendices/config.rst:2529 #: ../../rst/reference_appendices/config.rst:2630 #: ../../rst/reference_appendices/config.rst:2644 #: ../../rst/reference_appendices/config.rst:2793 #: ../../rst/reference_appendices/config.rst:2839 #: ../../rst/reference_appendices/config.rst:2976 #: ../../rst/reference_appendices/config.rst:3035 msgid "``False``" msgstr "``False``" #: ../../rst/reference_appendices/config.rst msgid "Deprecated in" msgstr "éžæŽ¨å¥¨ã«ãªã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/reference_appendices/config.rst:131 #: ../../rst/reference_appendices/config.rst:952 msgid "2.14" msgstr "2.14" #: ../../rst/reference_appendices/config.rst msgid "Deprecated detail" msgstr "éžæŽ¨å¥¨ã®è©³ç´°" #: ../../rst/reference_appendices/config.rst:132 msgid "moved to shell plugins" msgstr "シェルプラグインã«ç§»å‹•" #: ../../rst/reference_appendices/config.rst msgid "Deprecated alternatives" msgstr "éžæŽ¨å¥¨ã®ä»£æ›¿æ‰‹æ®µ" #: ../../rst/reference_appendices/config.rst:133 msgid "world_readable_tmp" msgstr "world_readable_tmp" #: ../../rst/reference_appendices/config.rst:138 msgid "ANSIBLE_CONNECTION_PATH" msgstr "ANSIBLE_CONNECTION_PATH" #: ../../rst/reference_appendices/config.rst:140 msgid "Specify where to look for the ansible-connection script. This location will be checked before searching $PATH. If null, ansible will start with the same directory as the ansible script." msgstr "ansible-connection スクリプトを探ã™å ´æ‰€ã‚’指定ã—ã¾ã™ã€‚ã“ã®å ´æ‰€ã¯ã€$PATH ã®æ¤œç´¢å‰ã«ç¢ºèªã•れã¾ã™ã€‚null ã«è¨­å®šã™ã‚‹ã¨ã€Ansible 㯠ansible スクリプトã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:141 #: ../../rst/reference_appendices/config.rst:297 #: ../../rst/reference_appendices/config.rst:970 #: ../../rst/reference_appendices/config.rst:1508 #: ../../rst/reference_appendices/config.rst:1683 #: ../../rst/reference_appendices/config.rst:1970 #: ../../rst/reference_appendices/config.rst:2177 #: ../../rst/reference_appendices/config.rst:2221 #: ../../rst/reference_appendices/config.rst:2275 #: ../../rst/reference_appendices/config.rst:2712 #: ../../rst/reference_appendices/config.rst:2726 #: ../../rst/reference_appendices/config.rst:2758 #: ../../rst/reference_appendices/config.rst:2806 msgid "path" msgstr "path" #: ../../rst/reference_appendices/config.rst:142 #: ../../rst/reference_appendices/config.rst:182 #: ../../rst/reference_appendices/config.rst:298 #: ../../rst/reference_appendices/config.rst:340 #: ../../rst/reference_appendices/config.rst:971 #: ../../rst/reference_appendices/config.rst:1093 #: ../../rst/reference_appendices/config.rst:1106 #: ../../rst/reference_appendices/config.rst:1229 #: ../../rst/reference_appendices/config.rst:1509 #: ../../rst/reference_appendices/config.rst:1547 #: ../../rst/reference_appendices/config.rst:1656 #: ../../rst/reference_appendices/config.rst:1684 #: ../../rst/reference_appendices/config.rst:1712 #: ../../rst/reference_appendices/config.rst:1971 #: ../../rst/reference_appendices/config.rst:2193 #: ../../rst/reference_appendices/config.rst:2599 #: ../../rst/reference_appendices/config.rst:2759 #: ../../rst/reference_appendices/config.rst:2807 msgid "``None``" msgstr "``None``" #: ../../rst/reference_appendices/config.rst:143 #: ../../rst/reference_appendices/config.rst:314 #: ../../rst/reference_appendices/config.rst:2102 #: ../../rst/reference_appendices/config.rst:2309 #: ../../rst/reference_appendices/config.rst:2338 #: ../../rst/reference_appendices/config.rst:2353 #: ../../rst/reference_appendices/config.rst:2362 #: ../../rst/reference_appendices/config.rst:2631 #: ../../rst/reference_appendices/config.rst:2777 #: ../../rst/reference_appendices/config.rst:2854 #: ../../rst/reference_appendices/config.rst:2962 #: ../../rst/reference_appendices/config.rst:3036 msgid "2.8" msgstr "2.8" #: ../../rst/reference_appendices/config.rst:145 #: ../../rst/reference_appendices/config.rst:2673 #: ../../rst/reference_appendices/config.rst:2687 #: ../../rst/reference_appendices/config.rst:2701 #: ../../rst/reference_appendices/config.rst:2715 msgid "[persistent_connection]" msgstr "[persistent_connection]" #: ../../rst/reference_appendices/config.rst:146 msgid "ansible_connection_path" msgstr "ansible_connection_path" #: ../../rst/reference_appendices/config.rst:148 msgid ":envvar:`ANSIBLE_CONNECTION_PATH`" msgstr ":envvar:`ANSIBLE_CONNECTION_PATH`" #: ../../rst/reference_appendices/config.rst:153 #: ../../rst/reference_appendices/config.rst:173 #: ../../rst/reference_appendices/config.rst:3133 msgid "ANSIBLE_COW_ACCEPTLIST" msgstr "ANSIBLE_COW_ACCEPTLIST" #: ../../rst/reference_appendices/config.rst:155 #: ../../rst/reference_appendices/config.rst:3127 #: ../../rst/reference_appendices/config.rst:3137 msgid "White list of cowsay templates that are 'safe' to use, set to empty list if you want to enable all installed templates." msgstr "「安全ã€ã«ä½¿ç”¨ã§ãã‚‹ cowsay テンプレートã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã€‚インストールã•れãŸã™ã¹ã¦ã®ãƒ†ãƒ³ãƒ—レートを有効ã«ã™ã‚‹å ´åˆã¯ç©ºã®ãƒªã‚¹ãƒˆã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:156 #: ../../rst/reference_appendices/config.rst:380 #: ../../rst/reference_appendices/config.rst:405 #: ../../rst/reference_appendices/config.rst:1285 #: ../../rst/reference_appendices/config.rst:1494 #: ../../rst/reference_appendices/config.rst:1751 #: ../../rst/reference_appendices/config.rst:1956 #: ../../rst/reference_appendices/config.rst:2161 #: ../../rst/reference_appendices/config.rst:2234 #: ../../rst/reference_appendices/config.rst:2261 #: ../../rst/reference_appendices/config.rst:2360 #: ../../rst/reference_appendices/config.rst:2467 #: ../../rst/reference_appendices/config.rst:2495 #: ../../rst/reference_appendices/config.rst:2511 #: ../../rst/reference_appendices/config.rst:2585 #: ../../rst/reference_appendices/config.rst:2611 #: ../../rst/reference_appendices/config.rst:2867 #: ../../rst/reference_appendices/config.rst:2895 #: ../../rst/reference_appendices/config.rst:2910 #: ../../rst/reference_appendices/config.rst:3004 #: ../../rst/reference_appendices/config.rst:3019 #: ../../rst/reference_appendices/config.rst:3090 msgid "list" msgstr "list" #: ../../rst/reference_appendices/config.rst:157 msgid "``['bud-frogs', 'bunny', 'cheese', 'daemon', 'default', 'dragon', 'elephant-in-snake', 'elephant', 'eyes', 'hellokitty', 'kitty', 'luke-koala', 'meow', 'milk', 'moofasa', 'moose', 'ren', 'sheep', 'small', 'stegosaurus', 'stimpy', 'supermilker', 'three-eyes', 'turkey', 'turtle', 'tux', 'udder', 'vader-koala', 'vader', 'www']``" msgstr "``['bud-frogs', 'bunny', 'cheese', 'daemon', 'default', 'dragon', 'elephant-in-snake', 'elephant', 'eyes', 'hellokitty', 'kitty', 'luke-koala', 'meow', 'milk', 'moofasa', 'moose', 'ren', 'sheep', 'small', 'stegosaurus', 'stimpy', 'supermilker', 'three-eyes', 'turkey', 'turtle', 'tux', 'udder', 'vader-koala', 'vader', 'www']``" #: ../../rst/reference_appendices/config.rst:160 msgid "cow_whitelist" msgstr "cow_whitelist" #: ../../rst/reference_appendices/config.rst:161 #: ../../rst/reference_appendices/config.rst:171 #: ../../rst/reference_appendices/config.rst:385 #: ../../rst/reference_appendices/config.rst:395 #: ../../rst/reference_appendices/config.rst:410 #: ../../rst/reference_appendices/config.rst:418 #: ../../rst/reference_appendices/config.rst:3131 #: ../../rst/reference_appendices/config.rst:3553 #: ../../rst/reference_appendices/config.rst:3580 msgid "2.15" msgstr "2.15" #: ../../rst/reference_appendices/config.rst:162 #: ../../rst/reference_appendices/config.rst:172 #: ../../rst/reference_appendices/config.rst:386 #: ../../rst/reference_appendices/config.rst:396 #: ../../rst/reference_appendices/config.rst:411 #: ../../rst/reference_appendices/config.rst:419 #: ../../rst/reference_appendices/config.rst:3132 #: ../../rst/reference_appendices/config.rst:3554 #: ../../rst/reference_appendices/config.rst:3581 msgid "normalizing names to new standard" msgstr "åå‰ã‚’æ–°ã—ã„æ¨™æº–ã«æ­£è¦åŒ–" #: ../../rst/reference_appendices/config.rst:163 #: ../../rst/reference_appendices/config.rst:165 msgid "cowsay_enabled_stencils" msgstr "cowsay_enabled_stencils" #: ../../rst/reference_appendices/config.rst:166 #: ../../rst/reference_appendices/config.rst:169 #: ../../rst/reference_appendices/config.rst:230 #: ../../rst/reference_appendices/config.rst:390 #: ../../rst/reference_appendices/config.rst:393 #: ../../rst/reference_appendices/config.rst:415 #: ../../rst/reference_appendices/config.rst:422 #: ../../rst/reference_appendices/config.rst:2179 #: ../../rst/reference_appendices/config.rst:3141 #: ../../rst/reference_appendices/config.rst:3165 #: ../../rst/reference_appendices/config.rst:3563 #: ../../rst/reference_appendices/config.rst:3590 msgid "2.11" msgstr "2.11" #: ../../rst/reference_appendices/config.rst:168 msgid ":envvar:`ANSIBLE_COW_ACCEPTLIST`" msgstr ":envvar:`ANSIBLE_COW_ACCEPTLIST`" #: ../../rst/reference_appendices/config.rst:170 msgid ":envvar:`ANSIBLE_COW_WHITELIST`" msgstr ":envvar:`ANSIBLE_COW_WHITELIST`" #: ../../rst/reference_appendices/config.rst:178 msgid "ANSIBLE_COW_PATH" msgstr "ANSIBLE_COW_PATH" #: ../../rst/reference_appendices/config.rst:180 #: ../../rst/reference_appendices/config.rst:3178 msgid "Specify a custom cowsay path or swap in your cowsay implementation of choice" msgstr "é¸æŠžã™ã‚‹ Cowsay 実装ã§ã‚«ã‚¹ã‚¿ãƒ ã® Cowsay パスã¾ãŸã¯ swap を指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:181 #: ../../rst/reference_appendices/config.rst:1228 #: ../../rst/reference_appendices/config.rst:1332 #: ../../rst/reference_appendices/config.rst:2113 #: ../../rst/reference_appendices/config.rst:2852 #: ../../rst/reference_appendices/config.rst:2955 msgid "string" msgstr "string" #: ../../rst/reference_appendices/config.rst:185 msgid "cowpath" msgstr "cowpath" #: ../../rst/reference_appendices/config.rst:187 msgid ":envvar:`ANSIBLE_COW_PATH`" msgstr ":envvar:`ANSIBLE_COW_PATH`" #: ../../rst/reference_appendices/config.rst:192 msgid "ANSIBLE_COW_SELECTION" msgstr "ANSIBLE_COW_SELECTION" #: ../../rst/reference_appendices/config.rst:194 #: ../../rst/reference_appendices/config.rst:3119 msgid "This allows you to chose a specific cowsay stencil for the banners or use 'random' to cycle through them." msgstr "ã“れã«ã‚ˆã‚Šã€ãƒãƒŠãƒ¼ã®ç‰¹å®šã® cowsay ã‚¹ãƒ†ãƒ³ã‚·ãƒ«ã‚’é¸æŠžã™ã‚‹ã‹ã€ã€Œrandomã€ã‚’使用ã—ã¦ãƒãƒŠãƒ¼ã‚’循環ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:195 #: ../../rst/reference_appendices/config.rst:1766 #: ../../rst/reference_appendices/config.rst:1943 msgid "``default``" msgstr "``default``" #: ../../rst/reference_appendices/config.rst:198 msgid "cow_selection" msgstr "cow_selection" #: ../../rst/reference_appendices/config.rst:200 msgid ":envvar:`ANSIBLE_COW_SELECTION`" msgstr ":envvar:`ANSIBLE_COW_SELECTION`" #: ../../rst/reference_appendices/config.rst:205 msgid "ANSIBLE_FORCE_COLOR" msgstr "ANSIBLE_FORCE_COLOR" #: ../../rst/reference_appendices/config.rst:207 #: ../../rst/reference_appendices/config.rst:3146 msgid "This option forces color mode even when running without a TTY or the \"nocolor\" setting is True." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€TTY を使用ã›ãšã«å®Ÿè¡Œã—ã€ã¾ãŸã¯ã€Œnocolorã€è¨­å®šãŒ True ã§ã‚ã£ã¦ã‚‚色モードを強制的ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:212 msgid "force_color" msgstr "force_color" #: ../../rst/reference_appendices/config.rst:214 msgid ":envvar:`ANSIBLE_FORCE_COLOR`" msgstr ":envvar:`ANSIBLE_FORCE_COLOR`" #: ../../rst/reference_appendices/config.rst:219 msgid "ANSIBLE_NOCOLOR" msgstr "ANSIBLE_NOCOLOR" #: ../../rst/reference_appendices/config.rst:221 #: ../../rst/reference_appendices/config.rst:3154 #: ../../rst/reference_appendices/config.rst:3161 msgid "This setting allows suppressing colorizing output, which is used to give a better indication of failure and status information." msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€è‰²ä»˜ã‘出力を抑制ã§ãã¾ã™ã€‚ã“れã¯ã€éšœå®³ãŠã‚ˆã³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã®æƒ…報をよりé©åˆ‡ã«ç¤ºã™ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:226 msgid "nocolor" msgstr "nocolor" #: ../../rst/reference_appendices/config.rst:228 msgid ":envvar:`ANSIBLE_NOCOLOR`" msgstr ":envvar:`ANSIBLE_NOCOLOR`" #: ../../rst/reference_appendices/config.rst:229 msgid ":envvar:`NO_COLOR`" msgstr ":envvar:`NO_COLOR`" #: ../../rst/reference_appendices/config.rst:235 msgid "ANSIBLE_NOCOWS" msgstr "ANSIBLE_NOCOWS" #: ../../rst/reference_appendices/config.rst:237 #: ../../rst/reference_appendices/config.rst:3170 msgid "If you have cowsay installed but want to avoid the 'cows' (why????), use this." msgstr "cowsay ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€ã€Œcowsã€ã‚’回é¿ã™ã‚‹ã«ã¯ã€ã“れを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:242 msgid "nocows" msgstr "nocows" #: ../../rst/reference_appendices/config.rst:244 msgid ":envvar:`ANSIBLE_NOCOWS`" msgstr ":envvar:`ANSIBLE_NOCOWS`" #: ../../rst/reference_appendices/config.rst:249 msgid "ANSIBLE_PIPELINING" msgstr "ANSIBLE_PIPELINING" #: ../../rst/reference_appendices/config.rst:251 msgid "Pipelining, if supported by the connection plugin, reduces the number of network operations required to execute a module on the remote server, by executing many Ansible modules without actual file transfer. This can result in a very significant performance improvement when enabled. However this conflicts with privilege escalation (become). For example, when using 'sudo:' operations you must first disable 'requiretty' in /etc/sudoers on all managed hosts, which is why it is disabled by default. This option is disabled if ``ANSIBLE_KEEP_REMOTE_FILES`` is enabled. This is a global option, each connection plugin can override either by having more specific options or not supporting pipelining at all." msgstr "パイプライン (connection プラグインã§ã‚µãƒãƒ¼ãƒˆã•れる場åˆ) ã¯ã€å®Ÿéš›ã®ãƒ•ァイル転é€ã‚’行ã‚ãšã«å¤šæ•°ã® Ansible モジュールを実行ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒãƒ¼ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãŸã‚ã«å¿…è¦ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ“ä½œã®æ•°ã‚’減らã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æœ‰åйã«ã™ã‚‹ã¨ãƒ‘フォーマンスãŒå¤§å¹…ã«æ”¹å–„ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã ã—ã€ã“れã¯ç‰¹æ¨©æ˜‡æ ¼ (become) ã¨ç«¶åˆã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œsudo:ã€æ“作を使用ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ç®¡ç†å¯¾è±¡ãƒ›ã‚¹ãƒˆã® /etc/sudoers ã§ã€Œrequirettyã€ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れãŒã€ãƒ‡ãƒ•ォルトã§ç„¡åйã«ãªã£ã¦ã„ã‚‹ç†ç”±ã§ã™ã€‚``ANSIBLE_KEEP_REMOTE_FILES`` ãŒæœ‰åйãªå ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚ªãƒ—ションã§ã‚りã€å„ connection プラグインã¯ã€ã‚ˆã‚Šå…·ä½“çš„ãªã‚ªãƒ—ションを指定ã™ã‚‹ã‹ã€ãƒ‘イプライン処ç†ã‚’サãƒãƒ¼ãƒˆã—ãªã„ã‹ã®ã„ãšã‚Œã‹ã«ã‚ˆã‚Šã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:255 msgid "[connection]" msgstr "[connection]" #: ../../rst/reference_appendices/config.rst:256 #: ../../rst/reference_appendices/config.rst:258 msgid "pipelining" msgstr "pipelining" #: ../../rst/reference_appendices/config.rst:260 msgid ":envvar:`ANSIBLE_PIPELINING`" msgstr ":envvar:`ANSIBLE_PIPELINING`" #: ../../rst/reference_appendices/config.rst:265 msgid "ANY_ERRORS_FATAL" msgstr "ANY_ERRORS_FATAL" #: ../../rst/reference_appendices/config.rst:267 #: ../../rst/reference_appendices/config.rst:3194 msgid "Sets the default value for the any_errors_fatal keyword, if True, Task failures will be considered fatal errors." msgstr "any_errors_fatal キーワードã®ãƒ‡ãƒ•ォルト値を設定ã—ã¾ã™ã€‚True ã®å ´åˆã€ã‚¿ã‚¹ã‚¯ã®å¤±æ•—ã¯è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã¨ã¿ãªã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:270 #: ../../rst/reference_appendices/config.rst:3021 msgid "2.4" msgstr "2.4" #: ../../rst/reference_appendices/config.rst:273 #: ../../rst/reference_appendices/playbooks_keywords.rst:27 #: ../../rst/reference_appendices/playbooks_keywords.rst:159 #: ../../rst/reference_appendices/playbooks_keywords.rst:252 #: ../../rst/reference_appendices/playbooks_keywords.rst:354 msgid "any_errors_fatal" msgstr "any_errors_fatal" #: ../../rst/reference_appendices/config.rst:275 msgid ":envvar:`ANSIBLE_ANY_ERRORS_FATAL`" msgstr ":envvar:`ANSIBLE_ANY_ERRORS_FATAL`" #: ../../rst/reference_appendices/config.rst:280 msgid "BECOME_ALLOW_SAME_USER" msgstr "BECOME_ALLOW_SAME_USER" #: ../../rst/reference_appendices/config.rst:282 msgid "This setting controls if become is skipped when remote user and become user are the same. I.E root sudo to root. If executable, it will be run and the resulting stdout will be used as the password." msgstr "ã“ã®è¨­å®šã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ become ユーザーãŒåŒã˜ã§ã‚ã‚‹å ´åˆã«ã€become をスキップã™ã‚‹ã‹ã©ã†ã‹ (root sudo ã‹ã‚‰ root) を制御ã—ã¾ã™ã€‚実行å¯èƒ½ãªå ´åˆã«ã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:287 msgid "become_allow_same_user" msgstr "become_allow_same_user" #: ../../rst/reference_appendices/config.rst:289 msgid ":envvar:`ANSIBLE_BECOME_ALLOW_SAME_USER`" msgstr ":envvar:`ANSIBLE_BECOME_ALLOW_SAME_USER`" #: ../../rst/reference_appendices/config.rst:294 msgid "BECOME_PASSWORD_FILE" msgstr "BECOME_PASSWORD_FILE" #: ../../rst/reference_appendices/config.rst:296 msgid "The password file to use for the become plugin. --become-password-file. If executable, it will be run and the resulting stdout will be used as the password." msgstr "become プラグインã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワードファイル。--become-password-file。実行å¯èƒ½ã®å ´åˆã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:299 #: ../../rst/reference_appendices/config.rst:972 #: ../../rst/reference_appendices/config.rst:1455 #: ../../rst/reference_appendices/config.rst:2077 #: ../../rst/reference_appendices/config.rst:2619 #: ../../rst/reference_appendices/config.rst:2764 #: ../../rst/reference_appendices/config.rst:2991 #: ../../rst/reference_appendices/config.rst:3744 #: ../../rst/reference_appendices/config.rst:4110 #: ../../rst/reference_appendices/config.rst:4365 msgid "2.12" msgstr "2.12" #: ../../rst/reference_appendices/config.rst:302 msgid "become_password_file" msgstr "become_password_file" #: ../../rst/reference_appendices/config.rst:304 msgid ":envvar:`ANSIBLE_BECOME_PASSWORD_FILE`" msgstr ":envvar:`ANSIBLE_BECOME_PASSWORD_FILE`" #: ../../rst/reference_appendices/config.rst:309 msgid "BECOME_PLUGIN_PATH" msgstr "BECOME_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:311 #: ../../rst/reference_appendices/config.rst:3525 msgid "Colon separated paths in which Ansible will search for Become Plugins." msgstr "Ansible ㌠Become プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:312 #: ../../rst/reference_appendices/config.rst:448 #: ../../rst/reference_appendices/config.rst:1010 #: ../../rst/reference_appendices/config.rst:1145 #: ../../rst/reference_appendices/config.rst:1159 #: ../../rst/reference_appendices/config.rst:1173 #: ../../rst/reference_appendices/config.rst:1187 #: ../../rst/reference_appendices/config.rst:1242 #: ../../rst/reference_appendices/config.rst:1363 #: ../../rst/reference_appendices/config.rst:1390 #: ../../rst/reference_appendices/config.rst:1522 #: ../../rst/reference_appendices/config.rst:1582 #: ../../rst/reference_appendices/config.rst:1596 #: ../../rst/reference_appendices/config.rst:1610 #: ../../rst/reference_appendices/config.rst:1737 #: ../../rst/reference_appendices/config.rst:1793 #: ../../rst/reference_appendices/config.rst:1834 #: ../../rst/reference_appendices/config.rst:1848 #: ../../rst/reference_appendices/config.rst:1904 #: ../../rst/reference_appendices/config.rst:2087 msgid "pathspec" msgstr "pathspec" #: ../../rst/reference_appendices/config.rst:313 msgid "``~/.ansible/plugins/become:/usr/share/ansible/plugins/become``" msgstr "``~/.ansible/plugins/become:/usr/share/ansible/plugins/become``" #: ../../rst/reference_appendices/config.rst:317 msgid "become_plugins" msgstr "become_plugins" #: ../../rst/reference_appendices/config.rst:319 msgid ":envvar:`ANSIBLE_BECOME_PLUGINS`" msgstr ":envvar:`ANSIBLE_BECOME_PLUGINS`" #: ../../rst/reference_appendices/config.rst:324 msgid "CACHE_PLUGIN" msgstr "CACHE_PLUGIN" #: ../../rst/reference_appendices/config.rst:326 #: ../../rst/reference_appendices/config.rst:3226 msgid "Chooses which cache plugin to use, the default 'memory' is ephemeral." msgstr "使用ã™ã‚‹ cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã—ã¾ã™ã€‚デフォルトã®ã€Œãƒ¡ãƒ¢ãƒªãƒ¼ã€ã¯ä¸€æ™‚çš„ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:327 msgid "``memory``" msgstr "``memory``" #: ../../rst/reference_appendices/config.rst:330 msgid "fact_caching" msgstr "fact_caching" #: ../../rst/reference_appendices/config.rst:332 msgid ":envvar:`ANSIBLE_CACHE_PLUGIN`" msgstr ":envvar:`ANSIBLE_CACHE_PLUGIN`" #: ../../rst/reference_appendices/config.rst:337 msgid "CACHE_PLUGIN_CONNECTION" msgstr "CACHE_PLUGIN_CONNECTION" #: ../../rst/reference_appendices/config.rst:339 #: ../../rst/reference_appendices/config.rst:3234 msgid "Defines connection or path information for the cache plugin" msgstr "cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æŽ¥ç¶šã¾ãŸã¯ãƒ‘ã‚¹ã®æƒ…報を定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:343 msgid "fact_caching_connection" msgstr "fact_caching_connection" #: ../../rst/reference_appendices/config.rst:345 msgid ":envvar:`ANSIBLE_CACHE_PLUGIN_CONNECTION`" msgstr ":envvar:`ANSIBLE_CACHE_PLUGIN_CONNECTION`" #: ../../rst/reference_appendices/config.rst:350 msgid "CACHE_PLUGIN_PREFIX" msgstr "CACHE_PLUGIN_PREFIX" #: ../../rst/reference_appendices/config.rst:352 #: ../../rst/reference_appendices/config.rst:3242 msgid "Prefix to use for cache plugin files/tables" msgstr "cache プラグインファイル/テーブルã«ä½¿ç”¨ã™ã‚‹æŽ¥é ­è¾žã€‚" #: ../../rst/reference_appendices/config.rst:353 msgid "``ansible_facts``" msgstr "``ansible_facts``" #: ../../rst/reference_appendices/config.rst:356 msgid "fact_caching_prefix" msgstr "fact_caching_prefix" #: ../../rst/reference_appendices/config.rst:358 msgid ":envvar:`ANSIBLE_CACHE_PLUGIN_PREFIX`" msgstr ":envvar:`ANSIBLE_CACHE_PLUGIN_PREFIX`" #: ../../rst/reference_appendices/config.rst:363 msgid "CACHE_PLUGIN_TIMEOUT" msgstr "CACHE_PLUGIN_TIMEOUT" #: ../../rst/reference_appendices/config.rst:365 #: ../../rst/reference_appendices/config.rst:3250 msgid "Expiration timeout for the cache plugin data" msgstr "cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æœ‰åŠ¹æœŸé™ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚" #: ../../rst/reference_appendices/config.rst:366 #: ../../rst/reference_appendices/config.rst:1271 #: ../../rst/reference_appendices/config.rst:1300 #: ../../rst/reference_appendices/config.rst:1669 #: ../../rst/reference_appendices/config.rst:1711 #: ../../rst/reference_appendices/config.rst:1862 #: ../../rst/reference_appendices/config.rst:1984 #: ../../rst/reference_appendices/config.rst:2040 #: ../../rst/reference_appendices/config.rst:2684 #: ../../rst/reference_appendices/config.rst:2698 #: ../../rst/reference_appendices/config.rst:2940 #: ../../rst/reference_appendices/config.rst:3049 #: ../../rst/reference_appendices/config.rst:3066 msgid "integer" msgstr "integer" #: ../../rst/reference_appendices/config.rst:367 msgid "``86400``" msgstr "``86400``" #: ../../rst/reference_appendices/config.rst:370 msgid "fact_caching_timeout" msgstr "fact_caching_timeout" #: ../../rst/reference_appendices/config.rst:372 msgid ":envvar:`ANSIBLE_CACHE_PLUGIN_TIMEOUT`" msgstr ":envvar:`ANSIBLE_CACHE_PLUGIN_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:377 msgid "CALLABLE_ACCEPT_LIST" msgstr "CALLABLE_ACCEPT_LIST" #: ../../rst/reference_appendices/config.rst:379 #: ../../rst/reference_appendices/config.rst:3549 #: ../../rst/reference_appendices/config.rst:3559 msgid "Whitelist of callable methods to be made available to template evaluation" msgstr "テンプレート評価ã§åˆ©ç”¨ã§ãる呼ã³å‡ºã—å¯èƒ½ãªãƒ¡ã‚½ãƒƒãƒ‰ã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã€‚" #: ../../rst/reference_appendices/config.rst:381 #: ../../rst/reference_appendices/config.rst:406 #: ../../rst/reference_appendices/config.rst:1404 #: ../../rst/reference_appendices/config.rst:1495 #: ../../rst/reference_appendices/config.rst:1957 #: ../../rst/reference_appendices/config.rst:2512 #: ../../rst/reference_appendices/config.rst:2896 #: ../../rst/reference_appendices/config.rst:2911 msgid "``[]``" msgstr "``[]``" #: ../../rst/reference_appendices/config.rst:384 msgid "callable_whitelist" msgstr "callable_whitelist" #: ../../rst/reference_appendices/config.rst:387 #: ../../rst/reference_appendices/config.rst:389 msgid "callable_enabled" msgstr "callable_enabled" #: ../../rst/reference_appendices/config.rst:392 msgid ":envvar:`ANSIBLE_CALLABLE_ENABLED`" msgstr ":envvar:`ANSIBLE_CALLABLE_ENABLED`" #: ../../rst/reference_appendices/config.rst:394 msgid ":envvar:`ANSIBLE_CALLABLE_WHITELIST`" msgstr ":envvar:`ANSIBLE_CALLABLE_WHITELIST`" #: ../../rst/reference_appendices/config.rst:397 #: ../../rst/reference_appendices/config.rst:3555 msgid "ANSIBLE_CALLABLE_ENABLED" msgstr "ANSIBLE_CALLABLE_ENABLED" #: ../../rst/reference_appendices/config.rst:402 msgid "CALLBACKS_ENABLED" msgstr "CALLBACKS_ENABLED" #: ../../rst/reference_appendices/config.rst:404 #: ../../rst/reference_appendices/config.rst:3576 #: ../../rst/reference_appendices/config.rst:3586 msgid "List of enabled callbacks, not all callbacks need enabling, but many of those shipped with Ansible do as we don't want them activated by default." msgstr "有効ãªã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ãƒªã‚¹ãƒˆã§ã™ã€‚ã™ã¹ã¦ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’有効ã«ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€Ansible ã«åŒæ¢±ã•れるコールãƒãƒƒã‚¯ã®å¤šãã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化ã•れãŸããªã„ãŸã‚ã€ãã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:409 msgid "callback_whitelist" msgstr "callback_whitelist" #: ../../rst/reference_appendices/config.rst:412 #: ../../rst/reference_appendices/config.rst:414 msgid "callbacks_enabled" msgstr "callbacks_enabled" #: ../../rst/reference_appendices/config.rst:417 msgid ":envvar:`ANSIBLE_CALLBACK_WHITELIST`" msgstr ":envvar:`ANSIBLE_CALLBACK_WHITELIST`" #: ../../rst/reference_appendices/config.rst:420 #: ../../rst/reference_appendices/config.rst:3582 msgid "ANSIBLE_CALLBACKS_ENABLED" msgstr "ANSIBLE_CALLBACKS_ENABLED" #: ../../rst/reference_appendices/config.rst:421 msgid ":envvar:`ANSIBLE_CALLBACKS_ENABLED`" msgstr ":envvar:`ANSIBLE_CALLBACKS_ENABLED`" #: ../../rst/reference_appendices/config.rst:427 msgid "COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH" msgstr "COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH" #: ../../rst/reference_appendices/config.rst:429 #: ../../rst/reference_appendices/config.rst:3284 msgid "When a collection is loaded that does not support the running Ansible version (via the collection metadata key `requires_ansible`), the default behavior is to issue a warning and continue anyway. Setting this value to `ignore` skips the warning entirely, while setting it to `fatal` will immediately halt Ansible execution." msgstr "(コレクションメタデータキー `requires_ansible` を介ã—ã¦) 実行中㮠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ãªã„コレクションãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹ã¨ã€ãƒ‡ãƒ•ォルトã®å‹•作ã§ã¯ã€è­¦å‘Šã‚’表示ã—ã¦ã¨ã«ã‹ã続行ã—ã¾ã™ã€‚ã“ã®å€¤ã‚’ `ignore` ã«è¨­å®šã™ã‚‹ã¨è­¦å‘Šã‚’完全ã«é£›ã°ã—ã¾ã™ã€‚`fatal` ã«è¨­å®šã™ã‚‹ã¨ã€Ansible ã®å®Ÿè¡Œã‚’ã™ãã«åœæ­¢ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:430 #: ../../rst/reference_appendices/config.rst:2304 msgid "``warning``" msgstr "``warning``" #: ../../rst/reference_appendices/config.rst msgid "Choices" msgstr "é¸æŠžè‚¢" #: ../../rst/reference_appendices/config.rst #: ../../rst/reference_appendices/config.rst:736 msgid "error" msgstr "error" #: ../../rst/reference_appendices/config.rst msgid "warning" msgstr "warning" #: ../../rst/reference_appendices/config.rst msgid "ignore" msgstr "ignore" #: ../../rst/reference_appendices/config.rst:437 msgid "collections_on_ansible_version_mismatch" msgstr "collections_on_ansible_version_mismatch" #: ../../rst/reference_appendices/config.rst:439 msgid ":envvar:`ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH`" msgstr ":envvar:`ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH`" #: ../../rst/reference_appendices/config.rst:444 msgid "COLLECTIONS_PATHS" msgstr "COLLECTIONS_PATHS" #: ../../rst/reference_appendices/config.rst:446 #: ../../rst/reference_appendices/config.rst:3266 #: ../../rst/reference_appendices/config.rst:3274 msgid "Colon separated paths in which Ansible will search for collections content. Collections must be in nested *subdirectories*, not directly in these directories. For example, if ``COLLECTIONS_PATHS`` includes ``~/.ansible/collections``, and you want to add ``my.collection`` to that directory, it must be saved as ``~/.ansible/collections/ansible_collections/my/collection``." msgstr "Ansible ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。コレクションã¯ã€ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç›´æŽ¥ã§ã¯ãªãã€å…¥ã‚Œå­ã® *サブディレクトリー* ã«ç½®ã‹ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``COLLECTIONS_PATHS`` ã«ã¯ ``~/.ansible/collections`` ãŒå«ã¾ã‚Œã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``my.collection`` を追加ã™ã‚‹å ´åˆã¯ã€``~/.ansible/collections/ansible_collections/my/collection`` ã¨ã—ã¦ä¿å­˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:449 msgid "``~/.ansible/collections:/usr/share/ansible/collections``" msgstr "``~/.ansible/collections:/usr/share/ansible/collections``" #: ../../rst/reference_appendices/config.rst:452 msgid "collections_paths" msgstr "collections_paths" #: ../../rst/reference_appendices/config.rst:454 msgid "collections_path" msgstr "collections_path" #: ../../rst/reference_appendices/config.rst:455 #: ../../rst/reference_appendices/config.rst:458 #: ../../rst/reference_appendices/config.rst:2194 #: ../../rst/reference_appendices/config.rst:2825 #: ../../rst/reference_appendices/config.rst:2942 #: ../../rst/reference_appendices/config.rst:3006 #: ../../rst/reference_appendices/config.rst:3051 #: ../../rst/reference_appendices/config.rst:3068 #: ../../rst/reference_appendices/config.rst:3080 #: ../../rst/reference_appendices/config.rst:3279 msgid "2.10" msgstr "2.10" #: ../../rst/reference_appendices/config.rst:457 msgid ":envvar:`ANSIBLE_COLLECTIONS_PATH`" msgstr ":envvar:`ANSIBLE_COLLECTIONS_PATH`" #: ../../rst/reference_appendices/config.rst:459 msgid ":envvar:`ANSIBLE_COLLECTIONS_PATHS`" msgstr ":envvar:`ANSIBLE_COLLECTIONS_PATHS`" #: ../../rst/reference_appendices/config.rst:464 msgid "COLLECTIONS_SCAN_SYS_PATH" msgstr "COLLECTIONS_SCAN_SYS_PATH" #: ../../rst/reference_appendices/config.rst:466 #: ../../rst/reference_appendices/config.rst:3258 msgid "A boolean to enable or disable scanning the sys.path for installed collections" msgstr "インストールã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® sys.path ã®ã‚¹ã‚­ãƒ£ãƒ³ã‚’有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹ãƒ–ール値。" #: ../../rst/reference_appendices/config.rst:471 msgid "collections_scan_sys_path" msgstr "collections_scan_sys_path" #: ../../rst/reference_appendices/config.rst:473 msgid ":envvar:`ANSIBLE_COLLECTIONS_SCAN_SYS_PATH`" msgstr ":envvar:`ANSIBLE_COLLECTIONS_SCAN_SYS_PATH`" #: ../../rst/reference_appendices/config.rst:478 msgid "COLOR_CHANGED" msgstr "COLOR_CHANGED" #: ../../rst/reference_appendices/config.rst:480 #: ../../rst/reference_appendices/config.rst:3292 msgid "Defines the color to use on 'Changed' task status" msgstr "「Changedã€ã‚¿ã‚¹ã‚¯ã®çŠ¶æ…‹ã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:481 msgid "``yellow``" msgstr "``yellow``" #: ../../rst/reference_appendices/config.rst msgid "black" msgstr "black" #: ../../rst/reference_appendices/config.rst msgid "bright gray" msgstr "bright gray" #: ../../rst/reference_appendices/config.rst msgid "blue" msgstr "blue" #: ../../rst/reference_appendices/config.rst msgid "white" msgstr "white" #: ../../rst/reference_appendices/config.rst msgid "green" msgstr "green" #: ../../rst/reference_appendices/config.rst msgid "bright blue" msgstr "bright blue" #: ../../rst/reference_appendices/config.rst msgid "cyan" msgstr "cyan" #: ../../rst/reference_appendices/config.rst msgid "bright green" msgstr "bright green" #: ../../rst/reference_appendices/config.rst msgid "red" msgstr "red" #: ../../rst/reference_appendices/config.rst msgid "bright cyan" msgstr "bright cyan" #: ../../rst/reference_appendices/config.rst msgid "purple" msgstr "purple" #: ../../rst/reference_appendices/config.rst msgid "bright red" msgstr "bright red" #: ../../rst/reference_appendices/config.rst msgid "yellow" msgstr "yellow" #: ../../rst/reference_appendices/config.rst msgid "bright purple" msgstr "bright purple" #: ../../rst/reference_appendices/config.rst msgid "dark gray" msgstr "dark gray" #: ../../rst/reference_appendices/config.rst msgid "bright yellow" msgstr "bright yellow" #: ../../rst/reference_appendices/config.rst msgid "magenta" msgstr "magenta" #: ../../rst/reference_appendices/config.rst msgid "bright magenta" msgstr "bright magenta" #: ../../rst/reference_appendices/config.rst msgid "normal" msgstr "normal" #: ../../rst/reference_appendices/config.rst:503 #: ../../rst/reference_appendices/config.rst:537 #: ../../rst/reference_appendices/config.rst:570 #: ../../rst/reference_appendices/config.rst:603 #: ../../rst/reference_appendices/config.rst:636 #: ../../rst/reference_appendices/config.rst:669 #: ../../rst/reference_appendices/config.rst:702 #: ../../rst/reference_appendices/config.rst:735 #: ../../rst/reference_appendices/config.rst:768 #: ../../rst/reference_appendices/config.rst:801 #: ../../rst/reference_appendices/config.rst:834 #: ../../rst/reference_appendices/config.rst:867 #: ../../rst/reference_appendices/config.rst:900 #: ../../rst/reference_appendices/config.rst:933 msgid "[colors]" msgstr "[colors]" #: ../../rst/reference_appendices/config.rst:506 msgid ":envvar:`ANSIBLE_COLOR_CHANGED`" msgstr ":envvar:`ANSIBLE_COLOR_CHANGED`" #: ../../rst/reference_appendices/config.rst:511 msgid "COLOR_CONSOLE_PROMPT" msgstr "COLOR_CONSOLE_PROMPT" #: ../../rst/reference_appendices/config.rst:513 #: ../../rst/reference_appendices/config.rst:3300 msgid "Defines the default color to use for ansible-console" msgstr "ansible-console ã«ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルトã®è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:514 #: ../../rst/reference_appendices/config.rst:746 msgid "``white``" msgstr "``white``" #: ../../rst/reference_appendices/config.rst:535 #: ../../rst/reference_appendices/config.rst:1419 #: ../../rst/reference_appendices/config.rst:2374 #: ../../rst/reference_appendices/config.rst:2390 #: ../../rst/reference_appendices/config.rst:2927 msgid "2.7" msgstr "2.7" #: ../../rst/reference_appendices/config.rst:538 msgid "console_prompt" msgstr "console_prompt" #: ../../rst/reference_appendices/config.rst:540 msgid ":envvar:`ANSIBLE_COLOR_CONSOLE_PROMPT`" msgstr ":envvar:`ANSIBLE_COLOR_CONSOLE_PROMPT`" #: ../../rst/reference_appendices/config.rst:545 msgid "COLOR_DEBUG" msgstr "COLOR_DEBUG" #: ../../rst/reference_appendices/config.rst:547 #: ../../rst/reference_appendices/config.rst:3308 msgid "Defines the color to use when emitting debug messages" msgstr "デãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’生æˆã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:548 msgid "``dark gray``" msgstr "``dark gray``" #: ../../rst/reference_appendices/config.rst:571 #: ../../rst/reference_appendices/config.rst:1205 msgid "debug" msgstr "debug" #: ../../rst/reference_appendices/config.rst:573 msgid ":envvar:`ANSIBLE_COLOR_DEBUG`" msgstr ":envvar:`ANSIBLE_COLOR_DEBUG`" #: ../../rst/reference_appendices/config.rst:578 msgid "COLOR_DEPRECATE" msgstr "COLOR_DEPRECATE" #: ../../rst/reference_appendices/config.rst:580 #: ../../rst/reference_appendices/config.rst:3316 msgid "Defines the color to use when emitting deprecation messages" msgstr "éžæŽ¨å¥¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ç”Ÿæˆã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:581 msgid "``purple``" msgstr "``purple``" #: ../../rst/reference_appendices/config.rst:604 msgid "deprecate" msgstr "deprecate" #: ../../rst/reference_appendices/config.rst:606 msgid ":envvar:`ANSIBLE_COLOR_DEPRECATE`" msgstr ":envvar:`ANSIBLE_COLOR_DEPRECATE`" #: ../../rst/reference_appendices/config.rst:611 msgid "COLOR_DIFF_ADD" msgstr "COLOR_DIFF_ADD" #: ../../rst/reference_appendices/config.rst:613 #: ../../rst/reference_appendices/config.rst:3324 msgid "Defines the color to use when showing added lines in diffs" msgstr "diffs ã§è¿½åŠ ã—ãŸè¡Œã‚’表示ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:614 #: ../../rst/reference_appendices/config.rst:779 msgid "``green``" msgstr "``green``" #: ../../rst/reference_appendices/config.rst:637 msgid "diff_add" msgstr "diff_add" #: ../../rst/reference_appendices/config.rst:639 msgid ":envvar:`ANSIBLE_COLOR_DIFF_ADD`" msgstr ":envvar:`ANSIBLE_COLOR_DIFF_ADD`" #: ../../rst/reference_appendices/config.rst:644 msgid "COLOR_DIFF_LINES" msgstr "COLOR_DIFF_LINES" #: ../../rst/reference_appendices/config.rst:646 #: ../../rst/reference_appendices/config.rst:3332 msgid "Defines the color to use when showing diffs" msgstr "差異を表示ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:647 #: ../../rst/reference_appendices/config.rst:812 msgid "``cyan``" msgstr "``cyan``" #: ../../rst/reference_appendices/config.rst:670 msgid "diff_lines" msgstr "diff_lines" #: ../../rst/reference_appendices/config.rst:672 msgid ":envvar:`ANSIBLE_COLOR_DIFF_LINES`" msgstr ":envvar:`ANSIBLE_COLOR_DIFF_LINES`" #: ../../rst/reference_appendices/config.rst:677 msgid "COLOR_DIFF_REMOVE" msgstr "COLOR_DIFF_REMOVE" #: ../../rst/reference_appendices/config.rst:679 #: ../../rst/reference_appendices/config.rst:3340 msgid "Defines the color to use when showing removed lines in diffs" msgstr "diffs ã§å‰Šé™¤ã—ãŸè¡Œã‚’表示ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:680 #: ../../rst/reference_appendices/config.rst:713 msgid "``red``" msgstr "``red``" #: ../../rst/reference_appendices/config.rst:703 msgid "diff_remove" msgstr "diff_remove" #: ../../rst/reference_appendices/config.rst:705 msgid ":envvar:`ANSIBLE_COLOR_DIFF_REMOVE`" msgstr ":envvar:`ANSIBLE_COLOR_DIFF_REMOVE`" #: ../../rst/reference_appendices/config.rst:710 msgid "COLOR_ERROR" msgstr "COLOR_ERROR" #: ../../rst/reference_appendices/config.rst:712 #: ../../rst/reference_appendices/config.rst:3348 msgid "Defines the color to use when emitting error messages" msgstr "エラーメッセージを生æˆã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:738 msgid ":envvar:`ANSIBLE_COLOR_ERROR`" msgstr ":envvar:`ANSIBLE_COLOR_ERROR`" #: ../../rst/reference_appendices/config.rst:743 msgid "COLOR_HIGHLIGHT" msgstr "COLOR_HIGHLIGHT" #: ../../rst/reference_appendices/config.rst:745 #: ../../rst/reference_appendices/config.rst:3356 msgid "Defines the color to use for highlighting" msgstr "強調表示ã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:769 msgid "highlight" msgstr "highlight" #: ../../rst/reference_appendices/config.rst:771 msgid ":envvar:`ANSIBLE_COLOR_HIGHLIGHT`" msgstr ":envvar:`ANSIBLE_COLOR_HIGHLIGHT`" #: ../../rst/reference_appendices/config.rst:776 msgid "COLOR_OK" msgstr "COLOR_OK" #: ../../rst/reference_appendices/config.rst:778 #: ../../rst/reference_appendices/config.rst:3364 msgid "Defines the color to use when showing 'OK' task status" msgstr "タスク状態「OKã€ã‚’表示ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:802 msgid "ok" msgstr "ok" #: ../../rst/reference_appendices/config.rst:804 msgid ":envvar:`ANSIBLE_COLOR_OK`" msgstr ":envvar:`ANSIBLE_COLOR_OK`" #: ../../rst/reference_appendices/config.rst:809 msgid "COLOR_SKIP" msgstr "COLOR_SKIP" #: ../../rst/reference_appendices/config.rst:811 #: ../../rst/reference_appendices/config.rst:3372 msgid "Defines the color to use when showing 'Skipped' task status" msgstr "タスク状態「Skippedã€ã‚’表示ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:835 #: ../../rst/reference_appendices/config.rst:2915 msgid "skip" msgstr "skip" #: ../../rst/reference_appendices/config.rst:837 msgid ":envvar:`ANSIBLE_COLOR_SKIP`" msgstr ":envvar:`ANSIBLE_COLOR_SKIP`" #: ../../rst/reference_appendices/config.rst:842 msgid "COLOR_UNREACHABLE" msgstr "COLOR_UNREACHABLE" #: ../../rst/reference_appendices/config.rst:844 #: ../../rst/reference_appendices/config.rst:3380 msgid "Defines the color to use on 'Unreachable' status" msgstr "タスク状態「到é”ä¸èƒ½ã€çŠ¶æ…‹ã§ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:845 msgid "``bright red``" msgstr "``bright red``" #: ../../rst/reference_appendices/config.rst:868 msgid "unreachable" msgstr "unreachable" #: ../../rst/reference_appendices/config.rst:870 msgid ":envvar:`ANSIBLE_COLOR_UNREACHABLE`" msgstr ":envvar:`ANSIBLE_COLOR_UNREACHABLE`" #: ../../rst/reference_appendices/config.rst:875 msgid "COLOR_VERBOSE" msgstr "COLOR_VERBOSE" #: ../../rst/reference_appendices/config.rst:877 #: ../../rst/reference_appendices/config.rst:3388 msgid "Defines the color to use when emitting verbose messages. i.e those that show with '-v's." msgstr "詳細メッセージを生æˆã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ (ã¤ã¾ã‚Šã€'-v's ã§ç¤ºã•れるもã®ã¨ãªã‚Šã¾ã™)。" #: ../../rst/reference_appendices/config.rst:878 msgid "``blue``" msgstr "``blue``" #: ../../rst/reference_appendices/config.rst:901 msgid "verbose" msgstr "verbose" #: ../../rst/reference_appendices/config.rst:903 msgid ":envvar:`ANSIBLE_COLOR_VERBOSE`" msgstr ":envvar:`ANSIBLE_COLOR_VERBOSE`" #: ../../rst/reference_appendices/config.rst:908 msgid "COLOR_WARN" msgstr "COLOR_WARN" #: ../../rst/reference_appendices/config.rst:910 #: ../../rst/reference_appendices/config.rst:3396 msgid "Defines the color to use when emitting warning messages" msgstr "警告メッセージを生æˆã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è‰²ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:911 msgid "``bright purple``" msgstr "``bright purple``" #: ../../rst/reference_appendices/config.rst #: ../../rst/reference_appendices/config.rst:934 msgid "warn" msgstr "warn" #: ../../rst/reference_appendices/config.rst:936 msgid ":envvar:`ANSIBLE_COLOR_WARN`" msgstr ":envvar:`ANSIBLE_COLOR_WARN`" #: ../../rst/reference_appendices/config.rst:941 msgid "COMMAND_WARNINGS" msgstr "COMMAND_WARNINGS" #: ../../rst/reference_appendices/config.rst:943 msgid "Ansible can issue a warning when the shell or command module is used and the command appears to be similar to an existing Ansible module. These warnings can be silenced by adjusting this setting to False. You can also control this at the task level with the module option ``warn``. As of version 2.11, this is disabled by default." msgstr "Ansible ã¯ã€ã‚·ã‚§ãƒ«ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã•れã€ã‚³ãƒžãƒ³ãƒ‰ãŒæ—¢å­˜ã® Ansible モジュールã¨é¡žä¼¼ã—ã¦ã„るよã†ã«è¦‹ãˆã¾ã™ã€‚ã“れらã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€ã“れらã®è­¦å‘Šã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚ªãƒ—ション ``warn`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§åˆ¶å¾¡ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.11 ã®æ™‚点ã§ã€ã“れã¯ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:946 #: ../../rst/reference_appendices/config.rst:1467 msgid "1.8" msgstr "1.8" #: ../../rst/reference_appendices/config.rst:949 msgid "command_warnings" msgstr "command_warnings" #: ../../rst/reference_appendices/config.rst:951 msgid ":envvar:`ANSIBLE_COMMAND_WARNINGS`" msgstr ":envvar:`ANSIBLE_COMMAND_WARNINGS`" #: ../../rst/reference_appendices/config.rst:953 msgid "the command warnings feature is being removed" msgstr "コマンド警告機能ãŒå‰Šé™¤ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:958 msgid "CONNECTION_FACTS_MODULES" msgstr "CONNECTION_FACTS_MODULES" #: ../../rst/reference_appendices/config.rst:960 msgid "Which modules to run during a play's fact gathering stage based on connection" msgstr "接続ã«åŸºã¥ã„ã¦ãƒ—レイã®ãƒ•ァクトåŽé›†ã‚¹ãƒ†ãƒ¼ã‚¸æ™‚ã«å®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/reference_appendices/config.rst:961 msgid "dict" msgstr "dict" #: ../../rst/reference_appendices/config.rst:962 msgid "``{'asa': 'ansible.legacy.asa_facts', 'cisco.asa.asa': 'cisco.asa.asa_facts', 'eos': 'ansible.legacy.eos_facts', 'arista.eos.eos': 'arista.eos.eos_facts', 'frr': 'ansible.legacy.frr_facts', 'frr.frr.frr': 'frr.frr.frr_facts', 'ios': 'ansible.legacy.ios_facts', 'cisco.ios.ios': 'cisco.ios.ios_facts', 'iosxr': 'ansible.legacy.iosxr_facts', 'cisco.iosxr.iosxr': 'cisco.iosxr.iosxr_facts', 'junos': 'ansible.legacy.junos_facts', 'junipernetworks.junos.junos': 'junipernetworks.junos.junos_facts', 'nxos': 'ansible.legacy.nxos_facts', 'cisco.nxos.nxos': 'cisco.nxos.nxos_facts', 'vyos': 'ansible.legacy.vyos_facts', 'vyos.vyos.vyos': 'vyos.vyos.vyos_facts', 'exos': 'ansible.legacy.exos_facts', 'extreme.exos.exos': 'extreme.exos.exos_facts', 'slxos': 'ansible.legacy.slxos_facts', 'extreme.slxos.slxos': 'extreme.slxos.slxos_facts', 'voss': 'ansible.legacy.voss_facts', 'extreme.voss.voss': 'extreme.voss.voss_facts', 'ironware': 'ansible.legacy.ironware_facts', 'community.network.ironware': 'community.network.ironware_facts'}``" msgstr "``{'asa': 'ansible.legacy.asa_facts', 'cisco.asa.asa': 'cisco.asa.asa_facts', 'eos': 'ansible.legacy.eos_facts', 'arista.eos.eos': 'arista.eos.eos_facts', 'frr': 'ansible.legacy.frr_facts', 'frr.frr.frr': 'frr.frr.frr_facts', 'ios': 'ansible.legacy.ios_facts', 'cisco.ios.ios': 'cisco.ios.ios_facts', 'iosxr': 'ansible.legacy.iosxr_facts', 'cisco.iosxr.iosxr': 'cisco.iosxr.iosxr_facts', 'junos': 'ansible.legacy.junos_facts', 'junipernetworks.junos.junos': 'junipernetworks.junos.junos_facts', 'nxos': 'ansible.legacy.nxos_facts', 'cisco.nxos.nxos': 'cisco.nxos.nxos_facts', 'vyos': 'ansible.legacy.vyos_facts', 'vyos.vyos.vyos': 'vyos.vyos.vyos_facts', 'exos': 'ansible.legacy.exos_facts', 'extreme.exos.exos': 'extreme.exos.exos_facts', 'slxos': 'ansible.legacy.slxos_facts', 'extreme.slxos.slxos': 'extreme.slxos.slxos_facts', 'voss': 'ansible.legacy.voss_facts', 'extreme.voss.voss': 'extreme.voss.voss_facts', 'ironware': 'ansible.legacy.ironware_facts', 'community.network.ironware': 'community.network.ironware_facts'}``" #: ../../rst/reference_appendices/config.rst:967 msgid "CONNECTION_PASSWORD_FILE" msgstr "CONNECTION_PASSWORD_FILE" #: ../../rst/reference_appendices/config.rst:969 #: ../../rst/reference_appendices/config.rst:3404 msgid "The password file to use for the connection plugin. --connection-password-file." msgstr "connection プラグインã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワードファイル。--connection-password-file。" #: ../../rst/reference_appendices/config.rst:975 msgid "connection_password_file" msgstr "connection_password_file" #: ../../rst/reference_appendices/config.rst:977 msgid ":envvar:`ANSIBLE_CONNECTION_PASSWORD_FILE`" msgstr ":envvar:`ANSIBLE_CONNECTION_PASSWORD_FILE`" #: ../../rst/reference_appendices/config.rst:982 msgid "COVERAGE_REMOTE_OUTPUT" msgstr "COVERAGE_REMOTE_OUTPUT" #: ../../rst/reference_appendices/config.rst:984 msgid "Sets the output directory on the remote host to generate coverage reports to. Currently only used for remote coverage on PowerShell modules. This is for internal use only." msgstr "リモートホストã®å‡ºåŠ›ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’è¨­å®šã—ã¦ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã‚’生æˆã—ã¾ã™ã€‚ç¾åœ¨ PowerShell モジュールã®ãƒªãƒ¢ãƒ¼ãƒˆã‚«ãƒãƒ¬ãƒƒã‚¸ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:985 #: ../../rst/reference_appendices/config.rst:998 #: ../../rst/reference_appendices/config.rst:2820 msgid "str" msgstr "str" #: ../../rst/reference_appendices/config.rst:986 #: ../../rst/reference_appendices/config.rst:1000 #: ../../rst/reference_appendices/config.rst:2119 #: ../../rst/reference_appendices/config.rst:2262 #: ../../rst/reference_appendices/config.rst:2277 #: ../../rst/reference_appendices/config.rst:2727 #: ../../rst/reference_appendices/config.rst:3909 msgid "2.9" msgstr "2.9" #: ../../rst/reference_appendices/config.rst:988 msgid ":envvar:`_ANSIBLE_COVERAGE_REMOTE_OUTPUT`" msgstr ":envvar:`_ANSIBLE_COVERAGE_REMOTE_OUTPUT`" #: ../../rst/reference_appendices/config.rst #: ../../rst/reference_appendices/general_precedence.rst:23 #: ../../rst/reference_appendices/general_precedence.rst:92 msgid "Variables" msgstr "変数" #: ../../rst/reference_appendices/config.rst #: ../../rst/reference_appendices/playbooks_keywords.rst:101 #: ../../rst/reference_appendices/playbooks_keywords.rst:215 #: ../../rst/reference_appendices/playbooks_keywords.rst:311 #: ../../rst/reference_appendices/playbooks_keywords.rst:434 msgid "name" msgstr "name" #: ../../rst/reference_appendices/config.rst:990 msgid "`_ansible_coverage_remote_output`" msgstr "`_ansible_coverage_remote_output`" #: ../../rst/reference_appendices/config.rst:995 msgid "COVERAGE_REMOTE_PATHS" msgstr "COVERAGE_REMOTE_PATHS" #: ../../rst/reference_appendices/config.rst:997 msgid "A list of paths for files on the Ansible controller to run coverage for when executing on the remote host. Only files that match the path glob will have its coverage collected. Multiple path globs can be specified and are separated by ``:``. Currently only used for remote coverage on PowerShell modules. This is for internal use only." msgstr "リモートホストã§å®Ÿè¡Œã™ã‚‹ã¨ãã«ã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’実行ã™ã‚‹ Ansible コントローラー上ã®ãƒ•ァイルã®ãƒ‘スã®ãƒªã‚¹ãƒˆã€‚パスグロブã«ä¸€è‡´ã™ã‚‹ãƒ•ァイルã®ã¿ãŒã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’åŽé›†ã—ã¾ã™ã€‚パスグロブã¯ã€``:`` ã§åŒºåˆ‡ã‚‹ã“ã¨ã§è¤‡æ•°æŒ‡å®šã§ãã¾ã™ã€‚ç¾åœ¨ PowerShell モジュールã®ãƒªãƒ¢ãƒ¼ãƒˆã‚«ãƒãƒ¬ãƒƒã‚¸ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:999 msgid "``*``" msgstr "``*``" #: ../../rst/reference_appendices/config.rst:1002 msgid ":envvar:`_ANSIBLE_COVERAGE_REMOTE_PATH_FILTER`" msgstr ":envvar:`_ANSIBLE_COVERAGE_REMOTE_PATH_FILTER`" #: ../../rst/reference_appendices/config.rst:1007 msgid "DEFAULT_ACTION_PLUGIN_PATH" msgstr "DEFAULT_ACTION_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1009 #: ../../rst/reference_appendices/config.rst:3460 msgid "Colon separated paths in which Ansible will search for Action Plugins." msgstr "Ansible ㌠Action プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1011 msgid "``~/.ansible/plugins/action:/usr/share/ansible/plugins/action``" msgstr "``~/.ansible/plugins/action:/usr/share/ansible/plugins/action``" #: ../../rst/reference_appendices/config.rst:1014 msgid "action_plugins" msgstr "action_plugins" #: ../../rst/reference_appendices/config.rst:1016 msgid ":envvar:`ANSIBLE_ACTION_PLUGINS`" msgstr ":envvar:`ANSIBLE_ACTION_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1021 msgid "DEFAULT_ALLOW_UNSAFE_LOOKUPS" msgstr "DEFAULT_ALLOW_UNSAFE_LOOKUPS" #: ../../rst/reference_appendices/config.rst:1023 msgid "When enabled, this option allows lookup plugins (whether used in variables as ``{{lookup('foo')}}`` or as a loop as with_foo) to return data that is not marked 'unsafe'. By default, such data is marked as unsafe to prevent the templating engine from evaluating any jinja2 templating language, as this could represent a security risk. This option is provided to allow for backward compatibility, however users should first consider adding allow_unsafe=True to any lookups which may be expected to contain data which may be run through the templating engine late" msgstr "ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€(変数㧠``{{lookup('foo')}}`` ã¨ã—ã¦ã€ã¾ãŸã¯ with_foo ã®ã‚ˆã†ãªãƒ«ãƒ¼ãƒ—ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã‚‹ã‹ã«é–¢ä¿‚ãªã) lookup プラグインãŒã€Œå®‰å…¨ã§ãªã„ã€ã¨è¡¨ç¤ºã•れã¦ã„ãªã„データを返ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ã“ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ã¯ã€ãƒ†ãƒ³ãƒ—レートエンジン㌠jinja2 テンプレート言語を評価ã§ããªã„よã†ã«ã™ã‚‹ãŸã‚ã«ã€å®‰å…¨ã§ã¯ãªã„ã¨è¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚ã“れã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ã‚’示ã—ã¦ã„ã‚‹å ´åˆãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€ä¸‹ä½äº’æ›æ€§ã‚’確ä¿ã™ã‚‹ãŸã‚ã«æä¾›ã•れã¦ã„ã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã¾ãšã€å¾Œã§ãƒ†ãƒ³ãƒ—レートエンジンを介ã—ã¦å®Ÿè¡Œã™ã‚‹å¯èƒ½æ€§ã®ã‚るデータãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¨äºˆæƒ³ã•れるルックアップ㫠allow_unsafe=True を追加ã™ã‚‹ã“ã¨ã‚’検討ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1026 msgid "2.2.3" msgstr "2.2.3" #: ../../rst/reference_appendices/config.rst:1029 msgid "allow_unsafe_lookups" msgstr "allow_unsafe_lookups" #: ../../rst/reference_appendices/config.rst:1034 msgid "DEFAULT_ASK_PASS" msgstr "DEFAULT_ASK_PASS" #: ../../rst/reference_appendices/config.rst:1036 #: ../../rst/reference_appendices/config.rst:3469 msgid "This controls whether an Ansible playbook should prompt for a login password. If using SSH keys for authentication, you probably do not needed to change this setting." msgstr "ã“れã¯ã€Ansible Playbook ãŒãƒ­ã‚°ã‚¤ãƒ³ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚èªè¨¼ã« SSH éµã‚’使用ã™ã‚‹å ´åˆã¯ã€ã“ã®è¨­å®šã‚’変更ã™ã‚‹å¿…è¦ãŒãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1041 msgid "ask_pass" msgstr "ask_pass" #: ../../rst/reference_appendices/config.rst:1043 msgid ":envvar:`ANSIBLE_ASK_PASS`" msgstr ":envvar:`ANSIBLE_ASK_PASS`" #: ../../rst/reference_appendices/config.rst:1048 msgid "DEFAULT_ASK_VAULT_PASS" msgstr "DEFAULT_ASK_VAULT_PASS" #: ../../rst/reference_appendices/config.rst:1050 #: ../../rst/reference_appendices/config.rst:3477 msgid "This controls whether an Ansible playbook should prompt for a vault password." msgstr "ã“れã¯ã€Ansible Playbook ㌠Vault ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1055 msgid "ask_vault_pass" msgstr "ask_vault_pass" #: ../../rst/reference_appendices/config.rst:1057 msgid ":envvar:`ANSIBLE_ASK_VAULT_PASS`" msgstr ":envvar:`ANSIBLE_ASK_VAULT_PASS`" #: ../../rst/reference_appendices/config.rst:1062 msgid "DEFAULT_BECOME" msgstr "DEFAULT_BECOME" #: ../../rst/reference_appendices/config.rst:1064 #: ../../rst/reference_appendices/config.rst:3485 msgid "Toggles the use of privilege escalation, allowing you to 'become' another user after login." msgstr "æ¨©é™æ˜‡æ ¼ã®ä½¿ç”¨ã‚’切り替ãˆã¦ã€ãƒ­ã‚°ã‚¤ãƒ³å¾Œã«åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ (「becomeã€) ã“ã¨ãŒã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1069 #: ../../rst/reference_appendices/playbooks_keywords.rst:30 #: ../../rst/reference_appendices/playbooks_keywords.rst:162 #: ../../rst/reference_appendices/playbooks_keywords.rst:255 #: ../../rst/reference_appendices/playbooks_keywords.rst:363 msgid "become" msgstr "become" #: ../../rst/reference_appendices/config.rst:1071 msgid ":envvar:`ANSIBLE_BECOME`" msgstr ":envvar:`ANSIBLE_BECOME`" #: ../../rst/reference_appendices/config.rst:1076 msgid "DEFAULT_BECOME_ASK_PASS" msgstr "DEFAULT_BECOME_ASK_PASS" #: ../../rst/reference_appendices/config.rst:1078 #: ../../rst/reference_appendices/config.rst:3493 msgid "Toggle to prompt for privilege escalation password." msgstr "切り替ãˆã¦ã€æ¨©é™æ˜‡æ ¼ãƒ‘スワードã®å…¥åŠ›ã‚’æ±‚ã‚ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1083 msgid "become_ask_pass" msgstr "become_ask_pass" #: ../../rst/reference_appendices/config.rst:1085 msgid ":envvar:`ANSIBLE_BECOME_ASK_PASS`" msgstr ":envvar:`ANSIBLE_BECOME_ASK_PASS`" #: ../../rst/reference_appendices/config.rst:1090 msgid "DEFAULT_BECOME_EXE" msgstr "DEFAULT_BECOME_EXE" #: ../../rst/reference_appendices/config.rst:1092 #: ../../rst/reference_appendices/config.rst:3509 msgid "executable to use for privilege escalation, otherwise Ansible will depend on PATH" msgstr "特権昇格ã«ä½¿ç”¨ã™ã‚‹å®Ÿè¡Œãƒ•ァイル。ãれ以外ã®å ´åˆã€Ansible 㯠PATH ã«ä¾å­˜ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1096 #: ../../rst/reference_appendices/playbooks_keywords.rst:33 #: ../../rst/reference_appendices/playbooks_keywords.rst:165 #: ../../rst/reference_appendices/playbooks_keywords.rst:258 #: ../../rst/reference_appendices/playbooks_keywords.rst:366 msgid "become_exe" msgstr "become_exe" #: ../../rst/reference_appendices/config.rst:1098 msgid ":envvar:`ANSIBLE_BECOME_EXE`" msgstr ":envvar:`ANSIBLE_BECOME_EXE`" #: ../../rst/reference_appendices/config.rst:1103 msgid "DEFAULT_BECOME_FLAGS" msgstr "DEFAULT_BECOME_FLAGS" #: ../../rst/reference_appendices/config.rst:1105 #: ../../rst/reference_appendices/config.rst:3517 msgid "Flags to pass to the privilege escalation executable." msgstr "æ¨©é™æ˜‡æ ¼å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã«æ¸¡ã™ãƒ•ラグ。" #: ../../rst/reference_appendices/config.rst:1109 #: ../../rst/reference_appendices/playbooks_keywords.rst:36 #: ../../rst/reference_appendices/playbooks_keywords.rst:168 #: ../../rst/reference_appendices/playbooks_keywords.rst:261 #: ../../rst/reference_appendices/playbooks_keywords.rst:369 msgid "become_flags" msgstr "become_flags" #: ../../rst/reference_appendices/config.rst:1111 msgid ":envvar:`ANSIBLE_BECOME_FLAGS`" msgstr ":envvar:`ANSIBLE_BECOME_FLAGS`" #: ../../rst/reference_appendices/config.rst:1116 msgid "DEFAULT_BECOME_METHOD" msgstr "DEFAULT_BECOME_METHOD" #: ../../rst/reference_appendices/config.rst:1118 #: ../../rst/reference_appendices/config.rst:3501 msgid "Privilege escalation method to use when `become` is enabled." msgstr "`become` ãŒæœ‰åйãªå ´åˆã«ä½¿ç”¨ã™ã‚‹æ¨©é™æ˜‡æ ¼æ–¹æ³•ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1119 msgid "``sudo``" msgstr "``sudo``" #: ../../rst/reference_appendices/config.rst:1122 #: ../../rst/reference_appendices/playbooks_keywords.rst:39 #: ../../rst/reference_appendices/playbooks_keywords.rst:171 #: ../../rst/reference_appendices/playbooks_keywords.rst:264 #: ../../rst/reference_appendices/playbooks_keywords.rst:372 msgid "become_method" msgstr "become_method" #: ../../rst/reference_appendices/config.rst:1124 msgid ":envvar:`ANSIBLE_BECOME_METHOD`" msgstr ":envvar:`ANSIBLE_BECOME_METHOD`" #: ../../rst/reference_appendices/config.rst:1129 msgid "DEFAULT_BECOME_USER" msgstr "DEFAULT_BECOME_USER" #: ../../rst/reference_appendices/config.rst:1131 #: ../../rst/reference_appendices/config.rst:3533 msgid "The user your login/remote user 'becomes' when using privilege escalation, most systems will use 'root' when no user is specified." msgstr "æ¨©é™æ˜‡æ ¼ã‚’使用ã™ã‚‹éš›ã«ãƒ­ã‚°ã‚¤ãƒ³/リモートユーザーãŒã€Œãªã‚‹(becomes)ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€‚ユーザーを指定ã—ãªã„ã¨ã€ã»ã¨ã‚“ã©ã®ã‚·ã‚¹ãƒ†ãƒ ã¯ã€Œrootã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1132 msgid "``root``" msgstr "``root``" #: ../../rst/reference_appendices/config.rst:1135 #: ../../rst/reference_appendices/playbooks_keywords.rst:42 #: ../../rst/reference_appendices/playbooks_keywords.rst:174 #: ../../rst/reference_appendices/playbooks_keywords.rst:267 #: ../../rst/reference_appendices/playbooks_keywords.rst:375 msgid "become_user" msgstr "become_user" #: ../../rst/reference_appendices/config.rst:1137 msgid ":envvar:`ANSIBLE_BECOME_USER`" msgstr ":envvar:`ANSIBLE_BECOME_USER`" #: ../../rst/reference_appendices/config.rst:1142 msgid "DEFAULT_CACHE_PLUGIN_PATH" msgstr "DEFAULT_CACHE_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1144 #: ../../rst/reference_appendices/config.rst:3541 msgid "Colon separated paths in which Ansible will search for Cache Plugins." msgstr "Ansible ㌠Cache プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1146 msgid "``~/.ansible/plugins/cache:/usr/share/ansible/plugins/cache``" msgstr "``~/.ansible/plugins/cache:/usr/share/ansible/plugins/cache``" #: ../../rst/reference_appendices/config.rst:1149 msgid "cache_plugins" msgstr "cache_plugins" #: ../../rst/reference_appendices/config.rst:1151 msgid ":envvar:`ANSIBLE_CACHE_PLUGINS`" msgstr ":envvar:`ANSIBLE_CACHE_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1156 msgid "DEFAULT_CALLBACK_PLUGIN_PATH" msgstr "DEFAULT_CALLBACK_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1158 #: ../../rst/reference_appendices/config.rst:3568 msgid "Colon separated paths in which Ansible will search for Callback Plugins." msgstr "Ansible ㌠Callback プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1160 msgid "``~/.ansible/plugins/callback:/usr/share/ansible/plugins/callback``" msgstr "``~/.ansible/plugins/callback:/usr/share/ansible/plugins/callback``" #: ../../rst/reference_appendices/config.rst:1163 msgid "callback_plugins" msgstr "callback_plugins" #: ../../rst/reference_appendices/config.rst:1165 msgid ":envvar:`ANSIBLE_CALLBACK_PLUGINS`" msgstr ":envvar:`ANSIBLE_CALLBACK_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1170 msgid "DEFAULT_CLICONF_PLUGIN_PATH" msgstr "DEFAULT_CLICONF_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1172 #: ../../rst/reference_appendices/config.rst:3595 msgid "Colon separated paths in which Ansible will search for Cliconf Plugins." msgstr "Ansible ㌠Cliconf プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1174 msgid "``~/.ansible/plugins/cliconf:/usr/share/ansible/plugins/cliconf``" msgstr "``~/.ansible/plugins/cliconf:/usr/share/ansible/plugins/cliconf``" #: ../../rst/reference_appendices/config.rst:1177 msgid "cliconf_plugins" msgstr "cliconf_plugins" #: ../../rst/reference_appendices/config.rst:1179 msgid ":envvar:`ANSIBLE_CLICONF_PLUGINS`" msgstr ":envvar:`ANSIBLE_CLICONF_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1184 msgid "DEFAULT_CONNECTION_PLUGIN_PATH" msgstr "DEFAULT_CONNECTION_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1186 #: ../../rst/reference_appendices/config.rst:3603 msgid "Colon separated paths in which Ansible will search for Connection Plugins." msgstr "Ansible ㌠connection プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1188 msgid "``~/.ansible/plugins/connection:/usr/share/ansible/plugins/connection``" msgstr "``~/.ansible/plugins/connection:/usr/share/ansible/plugins/connection``" #: ../../rst/reference_appendices/config.rst:1191 msgid "connection_plugins" msgstr "connection_plugins" #: ../../rst/reference_appendices/config.rst:1193 msgid ":envvar:`ANSIBLE_CONNECTION_PLUGINS`" msgstr ":envvar:`ANSIBLE_CONNECTION_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1198 msgid "DEFAULT_DEBUG" msgstr "DEFAULT_DEBUG" #: ../../rst/reference_appendices/config.rst:1200 #: ../../rst/reference_appendices/config.rst:3611 msgid "Toggles debug output in Ansible. This is *very* verbose and can hinder multiprocessing. Debug output can also include secret information despite no_log settings being enabled, which means debug mode should not be used in production." msgstr "Ansible ã§ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã‚’åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚ã“れ㯠*éžå¸¸ã«* 詳細ã§ã‚りã€ãƒžãƒ«ãƒãƒ—ロセッシングを妨ã’ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚no_log è¨­å®šãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã«ç§˜å¯†æƒ…報をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã¯ã€å®Ÿç¨¼åƒç’°å¢ƒã§ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:1207 msgid ":envvar:`ANSIBLE_DEBUG`" msgstr ":envvar:`ANSIBLE_DEBUG`" #: ../../rst/reference_appendices/config.rst:1212 msgid "DEFAULT_EXECUTABLE" msgstr "DEFAULT_EXECUTABLE" #: ../../rst/reference_appendices/config.rst:1214 #: ../../rst/reference_appendices/config.rst:3619 msgid "This indicates the command to use to spawn a shell under for Ansible's execution needs on a target. Users may need to change this in rare instances when shell usage is constrained, but in most cases it may be left as is." msgstr "ã“れã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã® Ansible ã®å®Ÿè¡Œãƒ‹ãƒ¼ã‚ºã«åˆã‚ã›ã¦ã‚·ã‚§ãƒ«ã‚’生æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã‚’示ã—ã¾ã™ã€‚シェルã®ä½¿ç”¨ãŒåˆ¶é™ã•れã¦ã„ã‚‹å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã¾ã‚Œã«ã“れを変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ãã®ã¾ã¾ã«ã—ã¦ãŠãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1215 msgid "``/bin/sh``" msgstr "``/bin/sh``" #: ../../rst/reference_appendices/config.rst:1218 msgid "executable" msgstr "executable" #: ../../rst/reference_appendices/config.rst:1220 msgid ":envvar:`ANSIBLE_EXECUTABLE`" msgstr ":envvar:`ANSIBLE_EXECUTABLE`" #: ../../rst/reference_appendices/config.rst:1225 msgid "DEFAULT_FACT_PATH" msgstr "DEFAULT_FACT_PATH" #: ../../rst/reference_appendices/config.rst:1227 msgid "This option allows you to globally configure a custom path for 'local_facts' for the implied M(ansible.builtin.setup) task when using fact gathering. If not set, it will fallback to the default from the M(ansible.builtin.setup) module: ``/etc/ansible/facts.d``. This does **not** affect user defined tasks that use the M(ansible.builtin.setup) module." msgstr "ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã¨ã€ãƒ•ァクトåŽé›†ã‚’使用ã™ã‚‹ã¨ãã«ã€æš—黙㮠M(ansible.builtin.setup) タスクã®ã€Œlocal_factsã€ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ‘スをグローãƒãƒ«ã«è¨­å®šã§ãã¾ã™ã€‚設定ã•れã¦ã„ãªã„å ´åˆã¯ã€M(ansible.builtin.setup) モジュールã‹ã‚‰ãƒ‡ãƒ•ォルトã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ (``/etc/ansible/facts.d``)。ã“れã¯ã€M(ansible.builtin.setup) モジュールを使用ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ã‚¿ã‚¹ã‚¯ã«ã¯ **影響ã—ã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:1232 #: ../../rst/reference_appendices/playbooks_keywords.rst:68 msgid "fact_path" msgstr "fact_path" #: ../../rst/reference_appendices/config.rst:1234 msgid ":envvar:`ANSIBLE_FACT_PATH`" msgstr ":envvar:`ANSIBLE_FACT_PATH`" #: ../../rst/reference_appendices/config.rst:1239 msgid "DEFAULT_FILTER_PLUGIN_PATH" msgstr "DEFAULT_FILTER_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1241 #: ../../rst/reference_appendices/config.rst:3635 msgid "Colon separated paths in which Ansible will search for Jinja2 Filter Plugins." msgstr "Ansible ㌠Jinja2 フィルタープラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1243 msgid "``~/.ansible/plugins/filter:/usr/share/ansible/plugins/filter``" msgstr "``~/.ansible/plugins/filter:/usr/share/ansible/plugins/filter``" #: ../../rst/reference_appendices/config.rst:1246 msgid "filter_plugins" msgstr "filter_plugins" #: ../../rst/reference_appendices/config.rst:1248 msgid ":envvar:`ANSIBLE_FILTER_PLUGINS`" msgstr ":envvar:`ANSIBLE_FILTER_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1253 msgid "DEFAULT_FORCE_HANDLERS" msgstr "DEFAULT_FORCE_HANDLERS" #: ../../rst/reference_appendices/config.rst:1255 msgid "This option controls if notified handlers run on a host even if a failure occurs on that host. When false, the handlers will not run if a failure has occurred on a host. This can also be set per play or on the command line. See Handlers and Failure for more details." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ›ã‚¹ãƒˆã§éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã§ã‚‚ã€é€šçŸ¥ã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚false ã«ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã§éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯å®Ÿè¡Œã•れã¾ã›ã‚“。ã“れã¯ã€ãƒ—レイã”ã¨ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŠã‚ˆã³å¤±æ•—ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:1258 msgid "1.9.1" msgstr "1.9.1" #: ../../rst/reference_appendices/config.rst:1261 #: ../../rst/reference_appendices/playbooks_keywords.rst:71 msgid "force_handlers" msgstr "force_handlers" #: ../../rst/reference_appendices/config.rst:1263 msgid ":envvar:`ANSIBLE_FORCE_HANDLERS`" msgstr ":envvar:`ANSIBLE_FORCE_HANDLERS`" #: ../../rst/reference_appendices/config.rst:1268 msgid "DEFAULT_FORKS" msgstr "DEFAULT_FORKS" #: ../../rst/reference_appendices/config.rst:1270 #: ../../rst/reference_appendices/config.rst:3651 msgid "Maximum number of forks Ansible will use to execute tasks on target hosts." msgstr "ターゲットホストã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã®ã« Ansible ãŒä½¿ç”¨ã™ã‚‹ãƒ•ã‚©ãƒ¼ã‚¯ã®æœ€å¤§æ•°ã€‚" #: ../../rst/reference_appendices/config.rst:1272 #: ../../rst/reference_appendices/config.rst:3050 msgid "``5``" msgstr "``5``" #: ../../rst/reference_appendices/config.rst:1275 msgid "forks" msgstr "forks" #: ../../rst/reference_appendices/config.rst:1277 msgid ":envvar:`ANSIBLE_FORKS`" msgstr ":envvar:`ANSIBLE_FORKS`" #: ../../rst/reference_appendices/config.rst:1282 msgid "DEFAULT_GATHER_SUBSET" msgstr "DEFAULT_GATHER_SUBSET" #: ../../rst/reference_appendices/config.rst:1284 msgid "Set the `gather_subset` option for the M(ansible.builtin.setup) task in the implicit fact gathering. See the module documentation for specifics. It does **not** apply to user defined M(ansible.builtin.setup) tasks." msgstr "暗黙的ãªãƒ•ァクトåŽé›†ã® M(ansible.builtin.setup) タスク㫠`gather_subset` オプションを設定ã—ã¾ã™ã€‚詳細ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。ユーザー定義㮠M(ansible.builtin.setup) タスクã«ã¯ **é©ç”¨ã•れã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:1286 msgid "``['all']``" msgstr "``['all']``" #: ../../rst/reference_appendices/config.rst:1287 #: ../../rst/reference_appendices/config.rst:1448 #: ../../rst/reference_appendices/config.rst:2056 msgid "2.1" msgstr "2.1" #: ../../rst/reference_appendices/config.rst:1290 #: ../../rst/reference_appendices/playbooks_keywords.rst:77 msgid "gather_subset" msgstr "gather_subset" #: ../../rst/reference_appendices/config.rst:1292 msgid ":envvar:`ANSIBLE_GATHER_SUBSET`" msgstr ":envvar:`ANSIBLE_GATHER_SUBSET`" #: ../../rst/reference_appendices/config.rst:1297 msgid "DEFAULT_GATHER_TIMEOUT" msgstr "DEFAULT_GATHER_TIMEOUT" #: ../../rst/reference_appendices/config.rst:1299 msgid "Set the timeout in seconds for the implicit fact gathering. It does **not** apply to user defined M(ansible.builtin.setup) tasks." msgstr "暗黙的ãªãƒ•ァクトåŽé›†ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚ユーザー定義㮠M(ansible.builtin.setup) タスクã«ã¯ **é©ç”¨ã•れã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:1301 #: ../../rst/reference_appendices/config.rst:1863 msgid "``10``" msgstr "``10``" #: ../../rst/reference_appendices/config.rst:1304 #: ../../rst/reference_appendices/playbooks_keywords.rst:80 msgid "gather_timeout" msgstr "gather_timeout" #: ../../rst/reference_appendices/config.rst:1306 msgid ":envvar:`ANSIBLE_GATHER_TIMEOUT`" msgstr ":envvar:`ANSIBLE_GATHER_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:1311 msgid "DEFAULT_GATHERING" msgstr "DEFAULT_GATHERING" #: ../../rst/reference_appendices/config.rst:1313 msgid "This setting controls the default policy of fact gathering (facts discovered about remote systems). When 'implicit' (the default), the cache plugin will be ignored and facts will be gathered per play unless 'gather_facts: False' is set. When 'explicit' the inverse is true, facts will not be gathered unless directly requested in the play. The 'smart' value means each new host that has no facts discovered will be scanned, but if the same host is addressed in multiple plays it will not be contacted again in the playbook run. This option can be useful for those wishing to save fact gathering time. Both 'smart' and 'explicit' will use the cache plugin." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ•ァクトåŽé›† (リモートシステムã«é–¢ã—ã¦æ¤œå‡ºã•れãŸãƒ•ァクト) ã®ãƒ‡ãƒ•ォルトãƒãƒªã‚·ãƒ¼ã‚’制御ã—ã¾ã™ã€‚「implicitã€(デフォルト) ã®å ´åˆã€cache プラグインã¯ç„¡è¦–ã•れã€ã€Œgather_facts: Falseã€ãŒè¨­å®šã•れã¦ã„ãªã„é™ã‚Šã€ãƒ—レイã”ã¨ã«ãƒ•ァクトãŒåŽé›†ã•れã¾ã™ã€‚「explicitã€ã®å ´åˆã¯ãã®é€†ã§ã€ãƒ—レイ中ã«ç›´æŽ¥è¦æ±‚ã•れãªã„é™ã‚Šã€ãƒ•ァクトã¯åŽé›†ã•れã¾ã›ã‚“。「smartã€ã®å€¤ã¯ã€æ¤œå‡ºã•れãŸãƒ•ァクトをæŒãŸãªã„儿–°è¦ãƒ›ã‚¹ãƒˆãŒã‚¹ã‚­ãƒ£ãƒ³ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ãŒã€åŒã˜ãƒ›ã‚¹ãƒˆãŒè¤‡æ•°ã®ãƒ—ãƒ¬ã‚¤ã§æ‰±ã‚れãŸå ´åˆã¯ã€Playbook ã®å®Ÿè¡Œä¸­ã«å†ã³æŽ¥è§¦ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ•ァクトåŽé›†ã®æ™‚間を短縮ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚「smartã€ã¨ã€Œexplicitã€ã®ä¸¡æ–¹ã¨ã‚‚ã€cache プラグインを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1314 msgid "``implicit``" msgstr "``implicit``" #: ../../rst/reference_appendices/config.rst msgid "smart" msgstr "smart" #: ../../rst/reference_appendices/config.rst msgid "explicit" msgstr "explicit" #: ../../rst/reference_appendices/config.rst msgid "implicit" msgstr "implicit" #: ../../rst/reference_appendices/config.rst:1319 msgid "1.6" msgstr "1.6" #: ../../rst/reference_appendices/config.rst:1322 msgid "gathering" msgstr "gathering" #: ../../rst/reference_appendices/config.rst:1324 msgid ":envvar:`ANSIBLE_GATHERING`" msgstr ":envvar:`ANSIBLE_GATHERING`" #: ../../rst/reference_appendices/config.rst:1329 msgid "DEFAULT_HASH_BEHAVIOUR" msgstr "DEFAULT_HASH_BEHAVIOUR" #: ../../rst/reference_appendices/config.rst:1331 msgid "This setting controls how duplicate definitions of dictionary variables (aka hash, map, associative array) are handled in Ansible. This does not affect variables whose values are scalars (integers, strings) or arrays. **WARNING**, changing this setting is not recommended as this is fragile and makes your content (plays, roles, collections) non portable, leading to continual confusion and misuse. Don't change this setting unless you think you have an absolute need for it. We recommend avoiding reusing variable names and relying on the ``combine`` filter and ``vars`` and ``varnames`` lookups to create merged versions of the individual variables. In our experience this is rarely really needed and a sign that too much complexity has been introduced into the data structures and plays. For some uses you can also look into custom vars_plugins to merge on input, even substituting the default ``host_group_vars`` that is in charge of parsing the ``host_vars/`` and ``group_vars/`` directories. Most users of this setting are only interested in inventory scope, but the setting itself affects all sources and makes debugging even harder. All playbooks and roles in the official examples repos assume the default for this setting. Changing the setting to ``merge`` applies across variable sources, but many sources will internally still overwrite the variables. For example ``include_vars`` will dedupe variables internally before updating Ansible, with 'last defined' overwriting previous definitions in same file. The Ansible project recommends you **avoid ``merge`` for new projects.** It is the intention of the Ansible developers to eventually deprecate and remove this setting, but it is being kept as some users do heavily rely on it. New projects should **avoid 'merge'**." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å¤‰æ•° (別åãƒãƒƒã‚·ãƒ¥ã€ãƒžãƒƒãƒ—ã€é€£æƒ³é…列) ã®é‡è¤‡ã—ãŸå®šç¾©ã‚’ Ansible ã§ã©ã®ã‚ˆã†ã«æ‰±ã†ã‹ã‚’制御ã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€å€¤ãŒã‚¹ã‚«ãƒ©ãƒ¼ (æ•´æ•°ã€æ–‡å­—列) ã‚„é…列ã§ã‚る変数ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。**警告** ã“れã¯è„†å¼±ã§ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ (プレイã€ãƒ­ãƒ¼ãƒ«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³) ãŒç§»æ¤ã§ããªããªã‚Šã€ç¶™ç¶šçš„ãªæ··ä¹±ã¨èª¤ç”¨ã‚’æ‹›ãæã‚ŒãŒã‚ã‚‹ãŸã‚ã€ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。絶対ã«å¿…è¦ã§ã‚ã‚‹ã¨æ€ã‚れる場åˆã‚’除ãã€ã“ã®è¨­å®šã‚’変更ã—ãªã„ã§ãã ã•ã„。変数åã®å†åˆ©ç”¨ã¯å›žé¿ã—ã€``combine`` フィルター㨠``vars`` ルックアップãŠã‚ˆã³ ``varnames`` ルックアップを利用ã—ã¦ã€å€‹ã€…ã®å¤‰æ•°ã®ãƒžãƒ¼ã‚¸ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚経験上ã€ã“ã®ã‚ˆã†ãªã“ã¨ãŒæœ¬å½“ã«å¿…è¦ã¨ã•れるã“ã¨ã¯ã»ã¨ã‚“ã©ãªãã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚„プレイãŒè¤‡é›‘ã«ãªã‚Šã™ãŽã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚用途ã«ã‚ˆã£ã¦ã¯ã€å…¥åŠ›æ™‚ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ  vars_plugins を検討ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€``host_vars/`` ディレクトリーãŠã‚ˆã³ ``group_vars/`` ディレクトリーã®è§£æžã‚’担当ã™ã‚‹ãƒ‡ãƒ•ォルト㮠``host_group_vars`` ã‚’ç½®ãæ›ãˆã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã®ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚³ãƒ¼ãƒ—ã«ã—ã‹èˆˆå‘³ãŒã‚りã¾ã›ã‚“ãŒã€ã“ã®è¨­å®šè‡ªä½“ãŒã™ã¹ã¦ã®ã‚½ãƒ¼ã‚¹ã«å½±éŸ¿ã—ã€ãƒ‡ãƒãƒƒã‚°ã‚’ã•らã«å›°é›£ã«ã—ã¾ã™ã€‚å…¬å¼ã®ã‚µãƒ³ãƒ—ルリãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã¯ã™ã¹ã¦ã€ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルトを想定ã—ã¦ã„ã¾ã™ã€‚``merge`` ã«è¨­å®šã‚’変更ã™ã‚‹ã¨ã€å¤‰æ•°ã‚½ãƒ¼ã‚¹å…¨ä½“ã«é©ç”¨ã•れã¾ã™ãŒã€å¤šãã®ã‚½ãƒ¼ã‚¹ã§ã¯å†…部的ã«å¤‰æ•°ãŒä¸Šæ›¸ãã•れãŸã¾ã¾ã«ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã°ã€``include_vars`` ã¯ã€Ansible ã‚’æ›´æ–°ã™ã‚‹å‰ã«å†…部ã§å¤‰æ•°ã®é‡è¤‡ã‚’排除ã—ã€ã€Œæœ€çµ‚定義ã€ãŒåŒã˜ãƒ•ァイルã®ä»¥å‰ã®å®šç¾©ã‚’上書ãã—ã¾ã™ã€‚Ansible プロジェクトã§ã¯ã€**æ–°è¦ãƒ—ロジェクトã§ã¯** ``merge`` **を回é¿ã™ã‚‹** ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansible 開発者ã¯ã€æœ€çµ‚çš„ã«ã“ã®è¨­å®šã‚’éžæŽ¨å¥¨ã«ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ã‚’æ„図ã—ã¦ã„ã¾ã™ãŒã€ä¸€éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®è¨­å®šã«å¤§ããä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚ã€ã“ã®è¨­å®šã‚’残ã—ã¦ã„ã¾ã™ã€‚æ–°ã—ã„プロジェクトã§ã¯ã€**「mergeã€ã‚’回é¿** ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:1333 msgid "``replace``" msgstr "``replace``" #: ../../rst/reference_appendices/config.rst msgid "replace" msgstr "replace" #: ../../rst/reference_appendices/config.rst:1335 msgid "Any variable that is defined more than once is overwritten using the order from variable precedence rules (highest wins)." msgstr "複数ã®å¤‰æ•°ãŒå®šç¾©ã•れã¦ã„る変数ã¯ã€å¤‰æ•°ã®å„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ« (最も高ã„ã‚‚ã®ãŒå„ªå…ˆã•れã¾ã™) ã®é †åºã‚’使用ã—ã¦ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst msgid "merge" msgstr "merge" #: ../../rst/reference_appendices/config.rst:1336 msgid "Any dictionary variable will be recursively merged with new definitions across the different variable definition sources." msgstr "ディクショナリー変数ã¯ã€ç•°ãªã‚‹å¤‰æ•°å®šç¾©ã‚½ãƒ¼ã‚¹å…¨ä½“ã§æ–°ã—ã„定義ã¨å†å¸°çš„ã«ãƒžãƒ¼ã‚¸ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1339 msgid "hash_behaviour" msgstr "hash_behaviour" #: ../../rst/reference_appendices/config.rst:1341 msgid ":envvar:`ANSIBLE_HASH_BEHAVIOUR`" msgstr ":envvar:`ANSIBLE_HASH_BEHAVIOUR`" #: ../../rst/reference_appendices/config.rst:1346 msgid "DEFAULT_HOST_LIST" msgstr "DEFAULT_HOST_LIST" #: ../../rst/reference_appendices/config.rst:1348 #: ../../rst/reference_appendices/config.rst:3691 msgid "Comma separated list of Ansible inventory sources" msgstr "Ansible インベントリーソースã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šä¸€è¦§ã€‚" #: ../../rst/reference_appendices/config.rst:1349 msgid "pathlist" msgstr "pathlist" #: ../../rst/reference_appendices/config.rst:1350 msgid "``/etc/ansible/hosts``" msgstr "``/etc/ansible/hosts``" #: ../../rst/reference_appendices/config.rst:1353 msgid "inventory" msgstr "inventory" #: ../../rst/reference_appendices/config.rst:1355 msgid ":envvar:`ANSIBLE_INVENTORY`" msgstr ":envvar:`ANSIBLE_INVENTORY`" #: ../../rst/reference_appendices/config.rst:1360 msgid "DEFAULT_HTTPAPI_PLUGIN_PATH" msgstr "DEFAULT_HTTPAPI_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1362 #: ../../rst/reference_appendices/config.rst:3699 msgid "Colon separated paths in which Ansible will search for HttpApi Plugins." msgstr "Ansible ㌠HttpApi プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1364 msgid "``~/.ansible/plugins/httpapi:/usr/share/ansible/plugins/httpapi``" msgstr "``~/.ansible/plugins/httpapi:/usr/share/ansible/plugins/httpapi``" #: ../../rst/reference_appendices/config.rst:1367 msgid "httpapi_plugins" msgstr "httpapi_plugins" #: ../../rst/reference_appendices/config.rst:1369 msgid ":envvar:`ANSIBLE_HTTPAPI_PLUGINS`" msgstr ":envvar:`ANSIBLE_HTTPAPI_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1374 msgid "DEFAULT_INTERNAL_POLL_INTERVAL" msgstr "DEFAULT_INTERNAL_POLL_INTERVAL" #: ../../rst/reference_appendices/config.rst:1376 msgid "This sets the interval (in seconds) of Ansible internal processes polling each other. Lower values improve performance with large playbooks at the expense of extra CPU load. Higher values are more suitable for Ansible usage in automation scenarios, when UI responsiveness is not required but CPU usage might be a concern. The default corresponds to the value hardcoded in Ansible <= 2.1" msgstr "ã“れã«ã‚ˆã‚Šã€Ansible ã®å†…部プロセスãŒç›¸äº’ã«ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹é–“éš” (ç§’å˜ä½) ãŒè¨­å®šã•れã¾ã™ã€‚値を低ãã™ã‚‹ã¨ã€CPU ã®è² è·ãŒå¢—ãˆã‚‹ä»£ã‚りã«ã€å¤§ã㪠Playbook ã®ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ãŒæ”¹å–„ã—ã¾ã™ã€‚UI ã®å¿œç­”性ã¯å¿…è¦ã‚りã¾ã›ã‚“ãŒã€CPU 使用率ãŒå•題ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã¯ã€è‡ªå‹•化シナリオã§ã® Ansible ã®ä½¿ç”¨ã«ã¯é«˜ã„値ãŒé©ã—ã¦ã„ã¾ã™ã€‚デフォルトã¯ã€2.1 以下㮠Ansible ã§ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れãŸå€¤ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1377 #: ../../rst/reference_appendices/config.rst:3078 msgid "float" msgstr "float" #: ../../rst/reference_appendices/config.rst:1378 msgid "``0.001``" msgstr "``0.001``" #: ../../rst/reference_appendices/config.rst:1379 msgid "2.2" msgstr "2.2" #: ../../rst/reference_appendices/config.rst:1382 msgid "internal_poll_interval" msgstr "internal_poll_interval" #: ../../rst/reference_appendices/config.rst:1387 msgid "DEFAULT_INVENTORY_PLUGIN_PATH" msgstr "DEFAULT_INVENTORY_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1389 #: ../../rst/reference_appendices/config.rst:3708 msgid "Colon separated paths in which Ansible will search for Inventory Plugins." msgstr "Ansible ㌠inventory プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1391 msgid "``~/.ansible/plugins/inventory:/usr/share/ansible/plugins/inventory``" msgstr "``~/.ansible/plugins/inventory:/usr/share/ansible/plugins/inventory``" #: ../../rst/reference_appendices/config.rst:1394 msgid "inventory_plugins" msgstr "inventory_plugins" #: ../../rst/reference_appendices/config.rst:1396 msgid ":envvar:`ANSIBLE_INVENTORY_PLUGINS`" msgstr ":envvar:`ANSIBLE_INVENTORY_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1401 msgid "DEFAULT_JINJA2_EXTENSIONS" msgstr "DEFAULT_JINJA2_EXTENSIONS" #: ../../rst/reference_appendices/config.rst:1403 msgid "This is a developer-specific feature that allows enabling additional Jinja2 extensions. See the Jinja2 documentation for details. If you do not know what these do, you probably don't need to change this setting :)" msgstr "ã“れã¯ã€è¿½åŠ ã® Jinja2 拡張機能を有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹é–‹ç™ºè€…å›ºæœ‰ã®æ©Ÿèƒ½ã§ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€Jinja2 ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。ã“ã®æ‹¡å¼µæ©Ÿèƒ½ãŒä½•ã‚’ã™ã‚‹ã®ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€ãŠãらãã“ã®è¨­å®šã‚’変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:1407 msgid "jinja2_extensions" msgstr "jinja2_extensions" #: ../../rst/reference_appendices/config.rst:1409 msgid ":envvar:`ANSIBLE_JINJA2_EXTENSIONS`" msgstr ":envvar:`ANSIBLE_JINJA2_EXTENSIONS`" #: ../../rst/reference_appendices/config.rst:1414 msgid "DEFAULT_JINJA2_NATIVE" msgstr "DEFAULT_JINJA2_NATIVE" #: ../../rst/reference_appendices/config.rst:1416 #: ../../rst/reference_appendices/config.rst:3724 msgid "This option preserves variable types during template operations. This requires Jinja2 >= 2.10." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ†ãƒ³ãƒ—レートæ“作中ã€å¤‰æ•°ã‚¿ã‚¤ãƒ—ã‚’ä¿æŒã—ã¾ã™ã€‚ã“れã«ã¯ Jinja2 >= 2.10 ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1422 msgid "jinja2_native" msgstr "jinja2_native" #: ../../rst/reference_appendices/config.rst:1424 msgid ":envvar:`ANSIBLE_JINJA2_NATIVE`" msgstr ":envvar:`ANSIBLE_JINJA2_NATIVE`" #: ../../rst/reference_appendices/config.rst:1429 msgid "DEFAULT_KEEP_REMOTE_FILES" msgstr "DEFAULT_KEEP_REMOTE_FILES" #: ../../rst/reference_appendices/config.rst:1431 msgid "Enables/disables the cleaning up of the temporary files Ansible used to execute the tasks on the remote. If this option is enabled it will disable ``ANSIBLE_PIPELINING``." msgstr "リモートã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã« Ansible ãŒä½¿ç”¨ã™ã‚‹ä¸€æ™‚ファイルã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—を有効ã¾ãŸã¯ç„¡åйã«ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€``ANSIBLE_PIPELINING`` を無効ã«ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1436 msgid "keep_remote_files" msgstr "keep_remote_files" #: ../../rst/reference_appendices/config.rst:1438 msgid ":envvar:`ANSIBLE_KEEP_REMOTE_FILES`" msgstr ":envvar:`ANSIBLE_KEEP_REMOTE_FILES`" #: ../../rst/reference_appendices/config.rst:1443 msgid "DEFAULT_LIBVIRT_LXC_NOSECLABEL" msgstr "DEFAULT_LIBVIRT_LXC_NOSECLABEL" #: ../../rst/reference_appendices/config.rst:1445 #: ../../rst/reference_appendices/config.rst:3740 #: ../../rst/reference_appendices/config.rst:3750 msgid "This setting causes libvirt to connect to lxc containers by passing --noseclabel to virsh. This is necessary when running on systems which do not have SELinux." msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€--noseclabel ã‚’ virsh ã«æ¸¡ã—ã¦ã€libvirt ㌠lxc ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«æŽ¥ç¶šã—ã¾ã™ã€‚ã“れã¯ã€SELinux ãŒãªã„システムã§å®Ÿè¡Œã™ã‚‹éš›ã«å¿…è¦ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1450 #: ../../rst/reference_appendices/config.rst:1754 msgid "[selinux]" msgstr "[selinux]" #: ../../rst/reference_appendices/config.rst:1451 msgid "libvirt_lxc_noseclabel" msgstr "libvirt_lxc_noseclabel" #: ../../rst/reference_appendices/config.rst:1453 msgid ":envvar:`ANSIBLE_LIBVIRT_LXC_NOSECLABEL`" msgstr ":envvar:`ANSIBLE_LIBVIRT_LXC_NOSECLABEL`" #: ../../rst/reference_appendices/config.rst:1454 msgid ":envvar:`LIBVIRT_LXC_NOSECLABEL`" msgstr ":envvar:`LIBVIRT_LXC_NOSECLABEL`" #: ../../rst/reference_appendices/config.rst:1456 #: ../../rst/reference_appendices/config.rst:2078 #: ../../rst/reference_appendices/config.rst:2620 #: ../../rst/reference_appendices/config.rst:3745 #: ../../rst/reference_appendices/config.rst:4111 #: ../../rst/reference_appendices/config.rst:4366 msgid "environment variables without ``ANSIBLE_`` prefix are deprecated" msgstr "``ANSIBLE_`` 接頭辞ã®ãªã„環境変数ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/config.rst:1457 #: ../../rst/reference_appendices/config.rst:3746 msgid "the ``ANSIBLE_LIBVIRT_LXC_NOSECLABEL`` environment variable" msgstr "``ANSIBLE_LIBVIRT_LXC_NOSECLABEL`` 環境変数" #: ../../rst/reference_appendices/config.rst:1462 msgid "DEFAULT_LOAD_CALLBACK_PLUGINS" msgstr "DEFAULT_LOAD_CALLBACK_PLUGINS" #: ../../rst/reference_appendices/config.rst:1464 #: ../../rst/reference_appendices/config.rst:3758 msgid "Controls whether callback plugins are loaded when running /usr/bin/ansible. This may be used to log activity from the command line, send notifications, and so on. Callback plugins are always loaded for ``ansible-playbook``." msgstr "/usr/bin/ansible ã®å®Ÿè¡Œæ™‚ã« callback プラグインを読ã¿è¾¼ã¾ã‚Œã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティã®ãƒ­ã‚°è¨˜éŒ²ã€é€šçŸ¥ã®é€ä¿¡ãªã©ã«ä½¿ç”¨ã§ãã¾ã™ã€‚``ansible-playbook`` ã« callback プラグインãŒå¸¸ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1470 msgid "bin_ansible_callbacks" msgstr "bin_ansible_callbacks" #: ../../rst/reference_appendices/config.rst:1472 msgid ":envvar:`ANSIBLE_LOAD_CALLBACK_PLUGINS`" msgstr ":envvar:`ANSIBLE_LOAD_CALLBACK_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1477 msgid "DEFAULT_LOCAL_TMP" msgstr "DEFAULT_LOCAL_TMP" #: ../../rst/reference_appendices/config.rst:1479 #: ../../rst/reference_appendices/config.rst:3766 msgid "Temporary directory for Ansible to use on the controller." msgstr "Ansible ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®ä¸€æ™‚ディレクトリー。" #: ../../rst/reference_appendices/config.rst:1480 msgid "tmppath" msgstr "tmppath" #: ../../rst/reference_appendices/config.rst:1481 msgid "``~/.ansible/tmp``" msgstr "``~/.ansible/tmp``" #: ../../rst/reference_appendices/config.rst:1484 msgid "local_tmp" msgstr "local_tmp" #: ../../rst/reference_appendices/config.rst:1486 msgid ":envvar:`ANSIBLE_LOCAL_TEMP`" msgstr ":envvar:`ANSIBLE_LOCAL_TEMP`" #: ../../rst/reference_appendices/config.rst:1491 msgid "DEFAULT_LOG_FILTER" msgstr "DEFAULT_LOG_FILTER" #: ../../rst/reference_appendices/config.rst:1493 #: ../../rst/reference_appendices/config.rst:3782 msgid "List of logger names to filter out of the log file" msgstr "ログファイルã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ­ã‚¬ãƒ¼åã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/config.rst:1498 msgid "log_filter" msgstr "log_filter" #: ../../rst/reference_appendices/config.rst:1500 msgid ":envvar:`ANSIBLE_LOG_FILTER`" msgstr ":envvar:`ANSIBLE_LOG_FILTER`" #: ../../rst/reference_appendices/config.rst:1505 msgid "DEFAULT_LOG_PATH" msgstr "DEFAULT_LOG_PATH" #: ../../rst/reference_appendices/config.rst:1507 #: ../../rst/reference_appendices/config.rst:3774 msgid "File to which Ansible will log on the controller. When empty logging is disabled." msgstr "Ansible ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãƒ•ァイル。空ã®ãƒ­ã‚®ãƒ³ã‚°ãŒç„¡åйã«ãªã£ã¦ã„ã‚‹å ´åˆã€‚" #: ../../rst/reference_appendices/config.rst:1512 msgid "log_path" msgstr "log_path" #: ../../rst/reference_appendices/config.rst:1514 msgid ":envvar:`ANSIBLE_LOG_PATH`" msgstr ":envvar:`ANSIBLE_LOG_PATH`" #: ../../rst/reference_appendices/config.rst:1519 msgid "DEFAULT_LOOKUP_PLUGIN_PATH" msgstr "DEFAULT_LOOKUP_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1521 #: ../../rst/reference_appendices/config.rst:3790 msgid "Colon separated paths in which Ansible will search for Lookup Plugins." msgstr "Ansible ㌠Lookup プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1523 msgid "``~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup``" msgstr "``~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup``" #: ../../rst/reference_appendices/config.rst:1526 msgid "lookup_plugins" msgstr "lookup_plugins" #: ../../rst/reference_appendices/config.rst:1528 msgid ":envvar:`ANSIBLE_LOOKUP_PLUGINS`" msgstr ":envvar:`ANSIBLE_LOOKUP_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1533 msgid "DEFAULT_MANAGED_STR" msgstr "DEFAULT_MANAGED_STR" #: ../../rst/reference_appendices/config.rst:1535 msgid "Sets the macro for the 'ansible_managed' variable available for M(ansible.builtin.template) and M(ansible.windows.win_template) modules. This is only relevant for those two modules." msgstr "M(ansible.builtin.template) モジュールãŠã‚ˆã³ M(ansible.windows.win_template) モジュールã§ä½¿ç”¨å¯èƒ½ãªã€Œansible_managedã€å¤‰æ•°ã«ãƒžã‚¯ãƒ­ã‚’設定ã—ã¾ã™ã€‚ã“れã¯ã€ã“れら 2 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã®ã¿é–¢ä¿‚ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1536 msgid "``Ansible managed``" msgstr "``Ansible managed``" #: ../../rst/reference_appendices/config.rst:1539 msgid "ansible_managed" msgstr "ansible_managed" #: ../../rst/reference_appendices/config.rst:1544 msgid "DEFAULT_MODULE_ARGS" msgstr "DEFAULT_MODULE_ARGS" #: ../../rst/reference_appendices/config.rst:1546 #: ../../rst/reference_appendices/config.rst:3799 msgid "This sets the default arguments to pass to the ``ansible`` adhoc binary if no ``-a`` is specified." msgstr "ã“れã«ã‚ˆã‚Šã€``ansible`` ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«ã€``-a`` アドホックãƒã‚¤ãƒŠãƒªãƒ¼ã«æ¸¡ã™ãƒ‡ãƒ•ォルトã®å¼•æ•°ãŒè¨­å®šã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1550 msgid "module_args" msgstr "module_args" #: ../../rst/reference_appendices/config.rst:1552 msgid ":envvar:`ANSIBLE_MODULE_ARGS`" msgstr ":envvar:`ANSIBLE_MODULE_ARGS`" #: ../../rst/reference_appendices/config.rst:1557 msgid "DEFAULT_MODULE_COMPRESSION" msgstr "DEFAULT_MODULE_COMPRESSION" #: ../../rst/reference_appendices/config.rst:1559 msgid "Compression scheme to use when transferring Python modules to the target." msgstr "Python モジュールをターゲットã«è»¢é€ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹åœ§ç¸®ã‚¹ã‚­ãƒ¼ãƒ ã€‚" #: ../../rst/reference_appendices/config.rst:1560 msgid "``ZIP_DEFLATED``" msgstr "``ZIP_DEFLATED``" #: ../../rst/reference_appendices/config.rst:1563 msgid "module_compression" msgstr "module_compression" #: ../../rst/reference_appendices/config.rst:1568 msgid "DEFAULT_MODULE_NAME" msgstr "DEFAULT_MODULE_NAME" #: ../../rst/reference_appendices/config.rst:1570 msgid "Module to use with the ``ansible`` AdHoc command, if none is specified via ``-m``." msgstr "``-m`` ã§ä½•も指定ã•れã¦ã„ãªã„å ´åˆã¯ã€``ansible`` AdHoc コマンドã§ä½¿ç”¨ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€‚" #: ../../rst/reference_appendices/config.rst:1571 msgid "``command``" msgstr "``command``" #: ../../rst/reference_appendices/config.rst:1574 msgid "module_name" msgstr "module_name" #: ../../rst/reference_appendices/config.rst:1579 msgid "DEFAULT_MODULE_PATH" msgstr "DEFAULT_MODULE_PATH" #: ../../rst/reference_appendices/config.rst:1581 #: ../../rst/reference_appendices/config.rst:3809 msgid "Colon separated paths in which Ansible will search for Modules." msgstr "Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1583 msgid "``~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules``" msgstr "``~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules``" #: ../../rst/reference_appendices/config.rst:1586 msgid "library" msgstr "library" #: ../../rst/reference_appendices/config.rst:1588 msgid ":envvar:`ANSIBLE_LIBRARY`" msgstr ":envvar:`ANSIBLE_LIBRARY`" #: ../../rst/reference_appendices/config.rst:1593 msgid "DEFAULT_MODULE_UTILS_PATH" msgstr "DEFAULT_MODULE_UTILS_PATH" #: ../../rst/reference_appendices/config.rst:1595 #: ../../rst/reference_appendices/config.rst:3817 msgid "Colon separated paths in which Ansible will search for Module utils files, which are shared by modules." msgstr "モジュールãŒå…±æœ‰ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãƒ•ァイルを Ansible ãŒæ¤œç´¢ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1597 msgid "``~/.ansible/plugins/module_utils:/usr/share/ansible/plugins/module_utils``" msgstr "``~/.ansible/plugins/module_utils:/usr/share/ansible/plugins/module_utils``" #: ../../rst/reference_appendices/config.rst:1600 msgid "module_utils" msgstr "モジュールユーティリティー" #: ../../rst/reference_appendices/config.rst:1602 msgid ":envvar:`ANSIBLE_MODULE_UTILS`" msgstr ":envvar:`ANSIBLE_MODULE_UTILS`" #: ../../rst/reference_appendices/config.rst:1607 msgid "DEFAULT_NETCONF_PLUGIN_PATH" msgstr "DEFAULT_NETCONF_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1609 #: ../../rst/reference_appendices/config.rst:3825 msgid "Colon separated paths in which Ansible will search for Netconf Plugins." msgstr "Ansible ㌠Netconf プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1611 msgid "``~/.ansible/plugins/netconf:/usr/share/ansible/plugins/netconf``" msgstr "``~/.ansible/plugins/netconf:/usr/share/ansible/plugins/netconf``" #: ../../rst/reference_appendices/config.rst:1614 msgid "netconf_plugins" msgstr "netconf_plugins" #: ../../rst/reference_appendices/config.rst:1616 msgid ":envvar:`ANSIBLE_NETCONF_PLUGINS`" msgstr ":envvar:`ANSIBLE_NETCONF_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1621 msgid "DEFAULT_NO_LOG" msgstr "DEFAULT_NO_LOG" #: ../../rst/reference_appendices/config.rst:1623 #: ../../rst/reference_appendices/config.rst:3833 msgid "Toggle Ansible's display and logging of task details, mainly used to avoid security disclosures." msgstr "主ã«ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®å…¬é–‹ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€Ansible ã®è¡¨ç¤ºãŠã‚ˆã³ã‚¿ã‚¹ã‚¯è©³ç´°ã®ãƒ­ã‚®ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1628 #: ../../rst/reference_appendices/playbooks_keywords.rst:104 #: ../../rst/reference_appendices/playbooks_keywords.rst:218 #: ../../rst/reference_appendices/playbooks_keywords.rst:314 #: ../../rst/reference_appendices/playbooks_keywords.rst:437 msgid "no_log" msgstr "no_log" #: ../../rst/reference_appendices/config.rst:1630 msgid ":envvar:`ANSIBLE_NO_LOG`" msgstr ":envvar:`ANSIBLE_NO_LOG`" #: ../../rst/reference_appendices/config.rst:1635 msgid "DEFAULT_NO_TARGET_SYSLOG" msgstr "DEFAULT_NO_TARGET_SYSLOG" #: ../../rst/reference_appendices/config.rst:1637 #: ../../rst/reference_appendices/config.rst:3841 msgid "Toggle Ansible logging to syslog on the target when it executes tasks. On Windows hosts this will disable a newer style PowerShell modules from writting to the event log." msgstr "タスクã®å®Ÿè¡Œæ™‚ã«ã€Ansible ログをターゲット㮠syslog ã¸åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚Windows ホストã§ã¯ã€ã“れã«ã‚ˆã‚Šã€æ–°ã—ã„スタイル㮠PowerShell モジュールãŒã‚¤ãƒ™ãƒ³ãƒˆãƒ­ã‚°ã«æ›¸ã込むã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1642 msgid "no_target_syslog" msgstr "no_target_syslog" #: ../../rst/reference_appendices/config.rst:1644 msgid ":envvar:`ANSIBLE_NO_TARGET_SYSLOG`" msgstr ":envvar:`ANSIBLE_NO_TARGET_SYSLOG`" #: ../../rst/reference_appendices/config.rst:1646 msgid "`ansible_no_target_syslog` :Version Added: 2.10" msgstr "`ansible_no_target_syslog` :Version Added: 2.10" #: ../../rst/reference_appendices/config.rst:1652 msgid "DEFAULT_NULL_REPRESENTATION" msgstr "DEFAULT_NULL_REPRESENTATION" #: ../../rst/reference_appendices/config.rst:1654 #: ../../rst/reference_appendices/config.rst:3849 msgid "What templating should return as a 'null' value. When not set it will let Jinja2 decide." msgstr "テンプレートãŒã€Œnullã€å€¤ã¨ã—ã¦è¿”ã™ã‚‚ã®ã€‚設定ã—ãªã„ã¨ã€Jinja2 ãŒæ±ºå®šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1655 msgid "none" msgstr "none" #: ../../rst/reference_appendices/config.rst:1659 msgid "null_representation" msgstr "null_representation" #: ../../rst/reference_appendices/config.rst:1661 msgid ":envvar:`ANSIBLE_NULL_REPRESENTATION`" msgstr ":envvar:`ANSIBLE_NULL_REPRESENTATION`" #: ../../rst/reference_appendices/config.rst:1666 msgid "DEFAULT_POLL_INTERVAL" msgstr "DEFAULT_POLL_INTERVAL" #: ../../rst/reference_appendices/config.rst:1668 #: ../../rst/reference_appendices/config.rst:3857 msgid "For asynchronous tasks in Ansible (covered in Asynchronous Actions and Polling), this is how often to check back on the status of those tasks when an explicit poll interval is not supplied. The default is a reasonably moderate 15 seconds which is a tradeoff between checking in frequently and providing a quick turnaround when something may have completed." msgstr "Ansible ã®éžåŒæœŸã‚¿ã‚¹ã‚¯ (「éžåŒæœŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒªãƒ³ã‚°ã€ã§èª¬æ˜Ž) ã§ã¯ã€ã“れã¯ã€æ˜Žç¤ºçš„ãªãƒãƒ¼ãƒªãƒ³ã‚°é–“éš”ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«ã€ã“れらã®ã‚¿ã‚¹ã‚¯ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹é »åº¦ã§ã™ã€‚デフォルトã¯é©åº¦ã«ä¸­ç¨‹åº¦ã® 15 ç§’ã§ã™ã€‚ã“れã¯ã€é »ç¹ã«ç¢ºèªã™ã‚‹ã“ã¨ã¨ã€ä½•ã‹ãŒå®Œäº†ã—ãŸã¨ãã«è¿…速ã«å¯¾å¿œã™ã‚‹ã“ã¨ã¨ã®ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•ã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1670 #: ../../rst/reference_appendices/config.rst:2685 msgid "``15``" msgstr "``15``" #: ../../rst/reference_appendices/config.rst:1673 msgid "poll_interval" msgstr "poll_interval" #: ../../rst/reference_appendices/config.rst:1675 msgid ":envvar:`ANSIBLE_POLL_INTERVAL`" msgstr ":envvar:`ANSIBLE_POLL_INTERVAL`" #: ../../rst/reference_appendices/config.rst:1680 msgid "DEFAULT_PRIVATE_KEY_FILE" msgstr "DEFAULT_PRIVATE_KEY_FILE" #: ../../rst/reference_appendices/config.rst:1682 #: ../../rst/reference_appendices/config.rst:3865 msgid "Option for connections using a certificate or key file to authenticate, rather than an agent or passwords, you can set the default value here to avoid re-specifying --private-key with every invocation." msgstr "エージェントやパスワードã§ã¯ãªãã€è¨¼æ˜Žæ›¸ã¾ãŸã¯ã‚­ãƒ¼ãƒ•ァイルを使用ã—ã¦èªè¨¼ã™ã‚‹æŽ¥ç¶šã®ã‚ªãƒ—ションã§ã™ã€‚ã“ã“ã§ãƒ‡ãƒ•ォルト値を設定ã—ã¦ã€å‘¼ã³å‡ºã—ã”ã¨ã« --private-key ãŒå†æŒ‡å®šã•れãªã„よã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1687 msgid "private_key_file" msgstr "private_key_file" #: ../../rst/reference_appendices/config.rst:1689 msgid ":envvar:`ANSIBLE_PRIVATE_KEY_FILE`" msgstr ":envvar:`ANSIBLE_PRIVATE_KEY_FILE`" #: ../../rst/reference_appendices/config.rst:1694 msgid "DEFAULT_PRIVATE_ROLE_VARS" msgstr "DEFAULT_PRIVATE_ROLE_VARS" #: ../../rst/reference_appendices/config.rst:1696 msgid "Makes role variables inaccessible from other roles. This was introduced as a way to reset role variables to default values if a role is used more than once in a playbook." msgstr "ロール変数ãŒä»–ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„よã†ã«ã—ã¾ã™ã€‚ã“れã¯ã€Playbook ã§ãƒ­ãƒ¼ãƒ«ãŒè¤‡æ•°å›žä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã«ã€ãƒ­ãƒ¼ãƒ«å¤‰æ•°ã‚’デフォルト値ã«ãƒªã‚»ãƒƒãƒˆã™ã‚‹æ–¹æ³•ã¨ã—ã¦å°Žå…¥ã•れã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/config.rst:1701 msgid "private_role_vars" msgstr "private_role_vars" #: ../../rst/reference_appendices/config.rst:1703 msgid ":envvar:`ANSIBLE_PRIVATE_ROLE_VARS`" msgstr ":envvar:`ANSIBLE_PRIVATE_ROLE_VARS`" #: ../../rst/reference_appendices/config.rst:1708 msgid "DEFAULT_REMOTE_PORT" msgstr "DEFAULT_REMOTE_PORT" #: ../../rst/reference_appendices/config.rst:1710 #: ../../rst/reference_appendices/config.rst:3881 msgid "Port to use in remote connections, when blank it will use the connection plugin default." msgstr "リモート接続ã§ä½¿ç”¨ã™ã‚‹ãƒãƒ¼ãƒˆã€‚空ã®å ´åˆã¯ã€connection プラグインã®ãƒ‡ãƒ•ォルトを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1715 msgid "remote_port" msgstr "remote_port" #: ../../rst/reference_appendices/config.rst:1717 msgid ":envvar:`ANSIBLE_REMOTE_PORT`" msgstr ":envvar:`ANSIBLE_REMOTE_PORT`" #: ../../rst/reference_appendices/config.rst:1722 msgid "DEFAULT_REMOTE_USER" msgstr "DEFAULT_REMOTE_USER" #: ../../rst/reference_appendices/config.rst:1724 msgid "Sets the login user for the target machines When blank it uses the connection plugin's default, normally the user currently executing Ansible." msgstr "ターゲットマシンã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’設定ã—ã¾ã™ã€‚空ã®å ´åˆã¯ã€connection プラグインã®ãƒ‡ãƒ•ォルト (通常ã¯ç¾åœ¨ Ansible を実行ã—ã¦ã„るユーザー) を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1727 #: ../../rst/reference_appendices/playbooks_keywords.rst:119 #: ../../rst/reference_appendices/playbooks_keywords.rst:224 #: ../../rst/reference_appendices/playbooks_keywords.rst:323 #: ../../rst/reference_appendices/playbooks_keywords.rst:452 msgid "remote_user" msgstr "remote_user" #: ../../rst/reference_appendices/config.rst:1729 msgid ":envvar:`ANSIBLE_REMOTE_USER`" msgstr ":envvar:`ANSIBLE_REMOTE_USER`" #: ../../rst/reference_appendices/config.rst:1734 msgid "DEFAULT_ROLES_PATH" msgstr "DEFAULT_ROLES_PATH" #: ../../rst/reference_appendices/config.rst:1736 #: ../../rst/reference_appendices/config.rst:3897 msgid "Colon separated paths in which Ansible will search for Roles." msgstr "Ansible ãŒãƒ­ãƒ¼ãƒ«ã‚’検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1738 msgid "``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``" msgstr "``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``" #: ../../rst/reference_appendices/config.rst:1741 msgid "roles_path" msgstr "roles_path" #: ../../rst/reference_appendices/config.rst:1743 msgid ":envvar:`ANSIBLE_ROLES_PATH`" msgstr ":envvar:`ANSIBLE_ROLES_PATH`" #: ../../rst/reference_appendices/config.rst:1748 msgid "DEFAULT_SELINUX_SPECIAL_FS" msgstr "DEFAULT_SELINUX_SPECIAL_FS" #: ../../rst/reference_appendices/config.rst:1750 msgid "Some filesystems do not support safe operations and/or return inconsistent errors, this setting makes Ansible 'tolerate' those in the list w/o causing fatal errors. Data corruption may occur and writes are not always verified when a filesystem is in the list." msgstr "一部ã®ãƒ•ァイルシステムã¯å®‰å…¨ãªæ“作をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ã‹ã€ä¸€è²«æ€§ã®ãªã„エラーを返ã—ã¾ã™ã€‚ã“ã®è¨­å®šã«ã‚ˆã‚Šã€Ansible ã¯ãƒªã‚¹ãƒˆå†…ã®ã‚¨ãƒ©ãƒ¼ã‚’「許容ã€ã—ã€è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã‚’引ãèµ·ã“ã—ã¾ã›ã‚“。ファイルシステムãŒãƒªã‚¹ãƒˆã«å«ã¾ã‚Œã¦ã„ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãŒç ´æã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã€æ›¸ãè¾¼ã¿ãŒå¸¸ã«æ¤œè¨¼ã•れるã¨ã¯é™ã‚Šã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:1752 msgid "``fuse, nfs, vboxsf, ramfs, 9p, vfat``" msgstr "``fuse, nfs, vboxsf, ramfs, 9p, vfat``" #: ../../rst/reference_appendices/config.rst:1755 msgid "special_context_filesystems" msgstr "special_context_filesystems" #: ../../rst/reference_appendices/config.rst:1757 msgid ":envvar:`ANSIBLE_SELINUX_SPECIAL_FS` :Version Added: 2.9" msgstr ":envvar:`ANSIBLE_SELINUX_SPECIAL_FS` :Version Added: 2.9" #: ../../rst/reference_appendices/config.rst:1763 msgid "DEFAULT_STDOUT_CALLBACK" msgstr "DEFAULT_STDOUT_CALLBACK" #: ../../rst/reference_appendices/config.rst:1765 msgid "Set the main callback used to display Ansible output, you can only have one at a time. You can have many other callbacks, but just one can be in charge of stdout." msgstr "Ansible 出力ã®è¡¨ç¤ºã«ä½¿ç”¨ã•れるメインã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’設定ã—ã¾ã™ã€‚一度㫠1 ã¤ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。他ã«ã‚‚多ãã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’設定ã§ãã¾ã™ãŒã€stdout ã«ä½¿ç”¨ã§ãã‚‹ã®ã¯ 1 ã¤ã ã‘ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1769 msgid "stdout_callback" msgstr "stdout_callback" #: ../../rst/reference_appendices/config.rst:1771 msgid ":envvar:`ANSIBLE_STDOUT_CALLBACK`" msgstr ":envvar:`ANSIBLE_STDOUT_CALLBACK`" #: ../../rst/reference_appendices/config.rst:1776 msgid "DEFAULT_STRATEGY" msgstr "DEFAULT_STRATEGY" #: ../../rst/reference_appendices/config.rst:1778 #: ../../rst/reference_appendices/config.rst:3938 msgid "Set the default strategy used for plays." msgstr "プレイã«ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルトã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1779 msgid "``linear``" msgstr "``linear``" #: ../../rst/reference_appendices/config.rst:1780 msgid "2.3" msgstr "2.3" #: ../../rst/reference_appendices/config.rst:1783 #: ../../rst/reference_appendices/playbooks_keywords.rst:131 msgid "strategy" msgstr "strategy" #: ../../rst/reference_appendices/config.rst:1785 msgid ":envvar:`ANSIBLE_STRATEGY`" msgstr ":envvar:`ANSIBLE_STRATEGY`" #: ../../rst/reference_appendices/config.rst:1790 msgid "DEFAULT_STRATEGY_PLUGIN_PATH" msgstr "DEFAULT_STRATEGY_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1792 #: ../../rst/reference_appendices/config.rst:3946 msgid "Colon separated paths in which Ansible will search for Strategy Plugins." msgstr "Ansible ㌠Strategy プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1794 msgid "``~/.ansible/plugins/strategy:/usr/share/ansible/plugins/strategy``" msgstr "``~/.ansible/plugins/strategy:/usr/share/ansible/plugins/strategy``" #: ../../rst/reference_appendices/config.rst:1797 msgid "strategy_plugins" msgstr "strategy_plugins" #: ../../rst/reference_appendices/config.rst:1799 msgid ":envvar:`ANSIBLE_STRATEGY_PLUGINS`" msgstr ":envvar:`ANSIBLE_STRATEGY_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1804 msgid "DEFAULT_SU" msgstr "DEFAULT_SU" #: ../../rst/reference_appendices/config.rst:1806 #: ../../rst/reference_appendices/config.rst:3954 msgid "Toggle the use of \"su\" for tasks." msgstr "タスクã«ã€Œsuã€ã®ä½¿ç”¨ã‚’切り替ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1811 msgid "su" msgstr "su" #: ../../rst/reference_appendices/config.rst:1813 msgid ":envvar:`ANSIBLE_SU`" msgstr ":envvar:`ANSIBLE_SU`" #: ../../rst/reference_appendices/config.rst:1818 msgid "DEFAULT_SYSLOG_FACILITY" msgstr "DEFAULT_SYSLOG_FACILITY" #: ../../rst/reference_appendices/config.rst:1820 #: ../../rst/reference_appendices/config.rst:3962 msgid "Syslog facility to use when Ansible logs to the remote target" msgstr "Ansible ãŒãƒªãƒ¢ãƒ¼ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ãƒ­ã‚°ã‚’記録ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ syslog ファシリティー。" #: ../../rst/reference_appendices/config.rst:1821 msgid "``LOG_USER``" msgstr "``LOG_USER``" #: ../../rst/reference_appendices/config.rst:1824 msgid "syslog_facility" msgstr "syslog_facility" #: ../../rst/reference_appendices/config.rst:1826 msgid ":envvar:`ANSIBLE_SYSLOG_FACILITY`" msgstr ":envvar:`ANSIBLE_SYSLOG_FACILITY`" #: ../../rst/reference_appendices/config.rst:1831 msgid "DEFAULT_TERMINAL_PLUGIN_PATH" msgstr "DEFAULT_TERMINAL_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1833 #: ../../rst/reference_appendices/config.rst:3970 msgid "Colon separated paths in which Ansible will search for Terminal Plugins." msgstr "Ansible ㌠Terminal プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1835 msgid "``~/.ansible/plugins/terminal:/usr/share/ansible/plugins/terminal``" msgstr "``~/.ansible/plugins/terminal:/usr/share/ansible/plugins/terminal``" #: ../../rst/reference_appendices/config.rst:1838 msgid "terminal_plugins" msgstr "terminal_plugins" #: ../../rst/reference_appendices/config.rst:1840 msgid ":envvar:`ANSIBLE_TERMINAL_PLUGINS`" msgstr ":envvar:`ANSIBLE_TERMINAL_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1845 msgid "DEFAULT_TEST_PLUGIN_PATH" msgstr "DEFAULT_TEST_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1847 #: ../../rst/reference_appendices/config.rst:3978 msgid "Colon separated paths in which Ansible will search for Jinja2 Test Plugins." msgstr "Ansible ㌠Jinja2 テストプラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1849 msgid "``~/.ansible/plugins/test:/usr/share/ansible/plugins/test``" msgstr "``~/.ansible/plugins/test:/usr/share/ansible/plugins/test``" #: ../../rst/reference_appendices/config.rst:1852 msgid "test_plugins" msgstr "test_plugins" #: ../../rst/reference_appendices/config.rst:1854 msgid ":envvar:`ANSIBLE_TEST_PLUGINS`" msgstr ":envvar:`ANSIBLE_TEST_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1859 msgid "DEFAULT_TIMEOUT" msgstr "DEFAULT_TIMEOUT" #: ../../rst/reference_appendices/config.rst:1861 #: ../../rst/reference_appendices/config.rst:3986 msgid "This is the default timeout for connection plugins to use." msgstr "ã“れã¯ã€connection プラグインãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルトã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1866 #: ../../rst/reference_appendices/playbooks_keywords.rst:143 #: ../../rst/reference_appendices/playbooks_keywords.rst:236 #: ../../rst/reference_appendices/playbooks_keywords.rst:338 #: ../../rst/reference_appendices/playbooks_keywords.rst:467 msgid "timeout" msgstr "timeout" #: ../../rst/reference_appendices/config.rst:1868 msgid ":envvar:`ANSIBLE_TIMEOUT`" msgstr ":envvar:`ANSIBLE_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:1873 msgid "DEFAULT_TRANSPORT" msgstr "DEFAULT_TRANSPORT" #: ../../rst/reference_appendices/config.rst:1875 #: ../../rst/reference_appendices/config.rst:3994 msgid "Default connection plugin to use, the 'smart' option will toggle between 'ssh' and 'paramiko' depending on controller OS and ssh versions" msgstr "使用ã™ã‚‹ãƒ‡ãƒ•ォルト㮠connection プラグイン。「smartã€ã‚ªãƒ—ションã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ OS 㨠ssh ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¿œã˜ã¦ã€ã€Œsshã€ã¨ã€Œparamikoã€ã®é–“ã§åˆ‡ã‚Šæ›¿ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1876 msgid "``smart``" msgstr "``smart``" #: ../../rst/reference_appendices/config.rst:1879 msgid "transport" msgstr "transport" #: ../../rst/reference_appendices/config.rst:1881 msgid ":envvar:`ANSIBLE_TRANSPORT`" msgstr ":envvar:`ANSIBLE_TRANSPORT`" #: ../../rst/reference_appendices/config.rst:1886 msgid "DEFAULT_UNDEFINED_VAR_BEHAVIOR" msgstr "DEFAULT_UNDEFINED_VAR_BEHAVIOR" #: ../../rst/reference_appendices/config.rst:1888 msgid "When True, this causes ansible templating to fail steps that reference variable names that are likely typoed. Otherwise, any '{{ template_expression }}' that contains undefined variables will be rendered in a template or ansible action line exactly as written." msgstr "True ã«ã™ã‚‹ã¨ã€ã‚¿ã‚¤ãƒ—ミスã®å¯èƒ½æ€§ãŒé«˜ã„変数åã‚’å‚ç…§ã™ã‚‹ã‚¹ãƒ†ãƒƒãƒ—ãŒå¤±æ•—ã™ã‚‹ãƒ†ãƒ³ãƒ—レートãŒä½œæˆã•れã¾ã™ã€‚True ã«è¨­å®šã—ãªã„ã¨ã€æœªå®šç¾©ã®å¤‰æ•°ã‚’å«ã‚€ '{{ template_expression }}' ã¯ã€è¨˜è¿°ã•れãŸã¨ãŠã‚Šã«ãƒ†ãƒ³ãƒ—レートã¾ãŸã¯ ansible ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³è¡Œã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1891 msgid "1.3" msgstr "1.3" #: ../../rst/reference_appendices/config.rst:1894 msgid "error_on_undefined_vars" msgstr "error_on_undefined_vars" #: ../../rst/reference_appendices/config.rst:1896 msgid ":envvar:`ANSIBLE_ERROR_ON_UNDEFINED_VARS`" msgstr ":envvar:`ANSIBLE_ERROR_ON_UNDEFINED_VARS`" #: ../../rst/reference_appendices/config.rst:1901 msgid "DEFAULT_VARS_PLUGIN_PATH" msgstr "DEFAULT_VARS_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:1903 #: ../../rst/reference_appendices/config.rst:4010 msgid "Colon separated paths in which Ansible will search for Vars Plugins." msgstr "Ansible ㌠Vars プラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:1905 msgid "``~/.ansible/plugins/vars:/usr/share/ansible/plugins/vars``" msgstr "``~/.ansible/plugins/vars:/usr/share/ansible/plugins/vars``" #: ../../rst/reference_appendices/config.rst:1908 msgid "vars_plugins" msgstr "vars_plugins" #: ../../rst/reference_appendices/config.rst:1910 msgid ":envvar:`ANSIBLE_VARS_PLUGINS`" msgstr ":envvar:`ANSIBLE_VARS_PLUGINS`" #: ../../rst/reference_appendices/config.rst:1915 msgid "DEFAULT_VAULT_ENCRYPT_IDENTITY" msgstr "DEFAULT_VAULT_ENCRYPT_IDENTITY" #: ../../rst/reference_appendices/config.rst:1917 #: ../../rst/reference_appendices/config.rst:4034 msgid "The vault_id to use for encrypting by default. If multiple vault_ids are provided, this specifies which to use for encryption. The --encrypt-vault-id cli option overrides the configured value." msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æš—å·åŒ–ã«ä½¿ç”¨ã™ã‚‹ vault_id ã§ã™ã€‚複数㮠vault_ids ãŒæä¾›ã•れるã¨ã€æš—å·åŒ–ã«ä½¿ç”¨ã™ã‚‹ã‚‚ã®ã‚’指定ã—ã¾ã™ã€‚--encrypt-vault-id cli オプションã¯ã€è¨­å®šã—ãŸå€¤ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1920 msgid "vault_encrypt_identity" msgstr "vault_encrypt_identity" #: ../../rst/reference_appendices/config.rst:1922 msgid ":envvar:`ANSIBLE_VAULT_ENCRYPT_IDENTITY`" msgstr ":envvar:`ANSIBLE_VAULT_ENCRYPT_IDENTITY`" #: ../../rst/reference_appendices/config.rst:1927 msgid "DEFAULT_VAULT_ID_MATCH" msgstr "DEFAULT_VAULT_ID_MATCH" #: ../../rst/reference_appendices/config.rst:1929 #: ../../rst/reference_appendices/config.rst:4018 msgid "If true, decrypting vaults with a vault id will only try the password from the matching vault-id" msgstr "true ã®å ´åˆã€Vault id ã§ Vault を復å·ã™ã‚‹ã¨ã€ä¸€è‡´ã™ã‚‹ Vault id ã‹ã‚‰ã®ã¿ãƒ‘スワードを試ã¿ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1933 msgid "vault_id_match" msgstr "vault_id_match" #: ../../rst/reference_appendices/config.rst:1935 msgid ":envvar:`ANSIBLE_VAULT_ID_MATCH`" msgstr ":envvar:`ANSIBLE_VAULT_ID_MATCH`" #: ../../rst/reference_appendices/config.rst:1940 msgid "DEFAULT_VAULT_IDENTITY" msgstr "DEFAULT_VAULT_IDENTITY" #: ../../rst/reference_appendices/config.rst:1942 #: ../../rst/reference_appendices/config.rst:4026 msgid "The label to use for the default vault id label in cases where a vault id label is not provided" msgstr "Vault id ãƒ©ãƒ™ãƒ«ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«ãƒ‡ãƒ•ォルト㮠Vault id ラベルã«ä½¿ç”¨ã™ã‚‹ãƒ©ãƒ™ãƒ«ã€‚" #: ../../rst/reference_appendices/config.rst:1946 msgid "vault_identity" msgstr "vault_identity" #: ../../rst/reference_appendices/config.rst:1948 msgid ":envvar:`ANSIBLE_VAULT_IDENTITY`" msgstr ":envvar:`ANSIBLE_VAULT_IDENTITY`" #: ../../rst/reference_appendices/config.rst:1953 msgid "DEFAULT_VAULT_IDENTITY_LIST" msgstr "DEFAULT_VAULT_IDENTITY_LIST" #: ../../rst/reference_appendices/config.rst:1955 #: ../../rst/reference_appendices/config.rst:4042 msgid "A list of vault-ids to use by default. Equivalent to multiple --vault-id args. Vault-ids are tried in order." msgstr "デフォルトã§ä½¿ç”¨ã™ã‚‹ vault-id ã®ä¸€è¦§ã€‚複数㮠--vault-id 引数ã¨åŒç­‰ã§ã™ã€‚vault-ids ã¯é †ç•ªã«è©¦è¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1960 msgid "vault_identity_list" msgstr "vault_identity_list" #: ../../rst/reference_appendices/config.rst:1962 msgid ":envvar:`ANSIBLE_VAULT_IDENTITY_LIST`" msgstr ":envvar:`ANSIBLE_VAULT_IDENTITY_LIST`" #: ../../rst/reference_appendices/config.rst:1967 msgid "DEFAULT_VAULT_PASSWORD_FILE" msgstr "DEFAULT_VAULT_PASSWORD_FILE" #: ../../rst/reference_appendices/config.rst:1969 msgid "The vault password file to use. Equivalent to --vault-password-file or --vault-id If executable, it will be run and the resulting stdout will be used as the password." msgstr "使用ã™ã‚‹ Vault パスワードファイル。--vault-password-file ã¾ãŸã¯ --vault-id ã¨åŒç­‰ã§ã™ã€‚実行å¯èƒ½ãªå ´åˆã«ã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1974 msgid "vault_password_file" msgstr "vault_password_file" #: ../../rst/reference_appendices/config.rst:1976 msgid ":envvar:`ANSIBLE_VAULT_PASSWORD_FILE`" msgstr ":envvar:`ANSIBLE_VAULT_PASSWORD_FILE`" #: ../../rst/reference_appendices/config.rst:1981 msgid "DEFAULT_VERBOSITY" msgstr "DEFAULT_VERBOSITY" #: ../../rst/reference_appendices/config.rst:1983 #: ../../rst/reference_appendices/config.rst:4058 msgid "Sets the default verbosity, equivalent to the number of ``-v`` passed in the command line." msgstr "ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¸¡ã•れ㟠``-v`` ã®æ•°ã¨åŒç­‰ã®ã€ãƒ‡ãƒ•ォルトã®è©³ç´°ãƒ¬ãƒ™ãƒ«ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:1985 #: ../../rst/reference_appendices/config.rst:2776 #: ../../rst/reference_appendices/config.rst:2941 #: ../../rst/reference_appendices/config.rst:3067 msgid "``0``" msgstr "``0``" #: ../../rst/reference_appendices/config.rst:1988 msgid "verbosity" msgstr "verbosity" #: ../../rst/reference_appendices/config.rst:1990 msgid ":envvar:`ANSIBLE_VERBOSITY`" msgstr ":envvar:`ANSIBLE_VERBOSITY`" #: ../../rst/reference_appendices/config.rst:1995 msgid "DEPRECATION_WARNINGS" msgstr "DEPRECATION_WARNINGS" #: ../../rst/reference_appendices/config.rst:1997 #: ../../rst/reference_appendices/config.rst:4066 msgid "Toggle to control the showing of deprecation warnings" msgstr "éžæŽ¨å¥¨ã®è­¦å‘Šã®è¡¨ç¤ºã‚’制御ã™ã‚‹ãŸã‚ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2002 msgid "deprecation_warnings" msgstr "deprecation_warnings" #: ../../rst/reference_appendices/config.rst:2004 msgid ":envvar:`ANSIBLE_DEPRECATION_WARNINGS`" msgstr ":envvar:`ANSIBLE_DEPRECATION_WARNINGS`" #: ../../rst/reference_appendices/config.rst:2009 msgid "DEVEL_WARNING" msgstr "DEVEL_WARNING" #: ../../rst/reference_appendices/config.rst:2011 #: ../../rst/reference_appendices/config.rst:4074 msgid "Toggle to control showing warnings related to running devel" msgstr "devel ã®å®Ÿè¡Œã«é–¢é€£ã™ã‚‹è­¦å‘Šã‚’表示ã™ã‚‹ã‚ˆã†ã«åˆ¶å¾¡ã‚’切り替ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2016 msgid "devel_warning" msgstr "devel_warning" #: ../../rst/reference_appendices/config.rst:2018 msgid ":envvar:`ANSIBLE_DEVEL_WARNING`" msgstr ":envvar:`ANSIBLE_DEVEL_WARNING`" #: ../../rst/reference_appendices/config.rst:2023 msgid "DIFF_ALWAYS" msgstr "DIFF_ALWAYS" #: ../../rst/reference_appendices/config.rst:2025 #: ../../rst/reference_appendices/config.rst:4082 msgid "Configuration toggle to tell modules to show differences when in 'changed' status, equivalent to ``--diff``." msgstr "æ§‹æˆã®åˆ‡ã‚Šæ›¿ãˆã«ã‚ˆã‚Šã€ã€Œchangedã€çŠ¶æ…‹ã®ã¨ãã«ç›¸é•点を表示ã™ã‚‹ã‚ˆã†ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ‡ç¤ºã—ã¾ã™ (``--diff`` 相当)。" #: ../../rst/reference_appendices/config.rst:2026 #: ../../rst/reference_appendices/config.rst:2192 #: ../../rst/reference_appendices/config.rst:2403 #: ../../rst/reference_appendices/config.rst:2481 #: ../../rst/reference_appendices/config.rst:2528 #: ../../rst/reference_appendices/config.rst:2792 #: ../../rst/reference_appendices/config.rst:2838 #: ../../rst/reference_appendices/config.rst:2989 #: ../../rst/reference_appendices/config.rst:3034 msgid "bool" msgstr "bool" #: ../../rst/reference_appendices/config.rst:2029 #: ../../rst/reference_appendices/config.rst:2043 msgid "[diff]" msgstr "[diff]" #: ../../rst/reference_appendices/config.rst #: ../../rst/reference_appendices/config.rst:2030 #: ../../rst/reference_appendices/playbooks_keywords.rst:249 msgid "always" msgstr "always" #: ../../rst/reference_appendices/config.rst:2032 msgid ":envvar:`ANSIBLE_DIFF_ALWAYS`" msgstr ":envvar:`ANSIBLE_DIFF_ALWAYS`" #: ../../rst/reference_appendices/config.rst:2037 msgid "DIFF_CONTEXT" msgstr "DIFF_CONTEXT" #: ../../rst/reference_appendices/config.rst:2039 #: ../../rst/reference_appendices/config.rst:4090 msgid "How many lines of context to show when displaying the differences between files." msgstr "ファイル間ã®å·®ç•°ã‚’表示ã™ã‚‹éš›ã«è¡¨ç¤ºã™ã‚‹ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®è¡Œæ•°ã€‚" #: ../../rst/reference_appendices/config.rst:2041 msgid "``3``" msgstr "``3``" #: ../../rst/reference_appendices/config.rst:2044 msgid "context" msgstr "context" #: ../../rst/reference_appendices/config.rst:2046 msgid ":envvar:`ANSIBLE_DIFF_CONTEXT`" msgstr ":envvar:`ANSIBLE_DIFF_CONTEXT`" #: ../../rst/reference_appendices/config.rst:2051 msgid "DISPLAY_ARGS_TO_STDOUT" msgstr "DISPLAY_ARGS_TO_STDOUT" #: ../../rst/reference_appendices/config.rst:2053 msgid "Normally ``ansible-playbook`` will print a header for each task that is run. These headers will contain the name: field from the task if you specified one. If you didn't then ``ansible-playbook`` uses the task's action to help you tell which task is presently running. Sometimes you run many of the same action and so you want more information about the task to differentiate it from others of the same action. If you set this variable to True in the config then ``ansible-playbook`` will also include the task's arguments in the header. This setting defaults to False because there is a chance that you have sensitive values in your parameters and you do not want those to be printed. If you set this to True you should be sure that you have secured your environment's stdout (no one can shoulder surf your screen and you aren't saving stdout to an insecure file) or made sure that all of your playbooks explicitly added the ``no_log: True`` parameter to tasks which have sensitive values See How do I keep secret data in my playbook? for more information." msgstr "通常ã€``ansible-playbook`` ã¯ã€å®Ÿè¡Œã•れãŸå„タスクã®ãƒ˜ãƒƒãƒ€ãƒ¼ãŒå‡ºåŠ›ã•れã¾ã™ã€‚ã“れらã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«ã¯ã‚¿ã‚¹ã‚¯ã® name: ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒæŒ‡å®šã•れã¦ã„れã°ãれãŒå«ã¾ã‚Œã¾ã™ã€‚指定ã—ã¦ã„ãªã„å ´åˆã¯ã€``ansible-playbook`` ãŒã‚¿ã‚¹ã‚¯ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã—ã¦ã€ã©ã®ã‚¿ã‚¹ã‚¯ãŒç¾åœ¨å®Ÿè¡Œã•れã¦ã„ã‚‹ã‹ã‚’知るã“ã¨ãŒã§ãã¾ã™ã€‚åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å¤šãを実行ã™ã‚‹å ´åˆã¯ã€åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã¨åŒºåˆ¥ã™ã‚‹ãŸã‚ã«ã€ã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚設定ã§ã“ã®å¤‰æ•°ã‚’ True ã«è¨­å®šã™ã‚‹ã¨ã€``ansible-playbook`` ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã®å¼•数もヘッダーã«å«ã¾ã‚Œã¾ã™ã€‚ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ©Ÿå¯†æ€§ã®é«˜ã„値ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã€ãれらを出力ã—ãªã„ãŸã‚ã€ã“ã®è¨­å®šã®æ—¢å®šå€¤ã¯ False ã§ã™ã€‚ã“れを True ã«è¨­å®šã—ãŸå ´åˆã¯ã€ç’°å¢ƒã®æ¨™æº–出力 (誰もã‚ãªãŸã®ç”»é¢ã‚’è‚©è¶Šã—ã«ç›—ã¿è¦‹ã‚‹ã“ã¨ãŒã§ããšã€ã‚ãªãŸã¯æ¨™æº–出力を安全ã§ãªã„ファイルã«ä¿å­˜ã—ã¦ã„ã¾ã›ã‚“) を確実ã«ä¿è­·ã™ã‚‹ã‹ã€ã™ã¹ã¦ã® Playbook ã§æ©Ÿå¯†æ€§ã®é«˜ã„値をæŒã¤ã‚¿ã‚¹ã‚¯ã« ``no_log: True`` パラメーターを明示的ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€ã€ŒPlaybook ã«æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:2059 msgid "display_args_to_stdout" msgstr "display_args_to_stdout" #: ../../rst/reference_appendices/config.rst:2061 msgid ":envvar:`ANSIBLE_DISPLAY_ARGS_TO_STDOUT`" msgstr ":envvar:`ANSIBLE_DISPLAY_ARGS_TO_STDOUT`" #: ../../rst/reference_appendices/config.rst:2066 msgid "DISPLAY_SKIPPED_HOSTS" msgstr "DISPLAY_SKIPPED_HOSTS" #: ../../rst/reference_appendices/config.rst:2068 #: ../../rst/reference_appendices/config.rst:4106 #: ../../rst/reference_appendices/config.rst:4116 msgid "Toggle to control displaying skipped task/host entries in a task in the default callback" msgstr "デフォルトã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ã‚¿ã‚¹ã‚¯ã«ã‚¹ã‚­ãƒƒãƒ—ã•れãŸã‚¿ã‚¹ã‚¯/ホストエントリーã®è¡¨ç¤ºã‚’制御ã™ã‚‹ã‚ˆã†ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2073 msgid "display_skipped_hosts" msgstr "display_skipped_hosts" #: ../../rst/reference_appendices/config.rst:2075 msgid ":envvar:`ANSIBLE_DISPLAY_SKIPPED_HOSTS`" msgstr ":envvar:`ANSIBLE_DISPLAY_SKIPPED_HOSTS`" #: ../../rst/reference_appendices/config.rst:2076 msgid ":envvar:`DISPLAY_SKIPPED_HOSTS`" msgstr ":envvar:`DISPLAY_SKIPPED_HOSTS`" #: ../../rst/reference_appendices/config.rst:2079 #: ../../rst/reference_appendices/config.rst:4112 msgid "the ``ANSIBLE_DISPLAY_SKIPPED_HOSTS`` environment variable" msgstr "``ANSIBLE_DISPLAY_SKIPPED_HOSTS`` 環境変数" #: ../../rst/reference_appendices/config.rst:2084 msgid "DOC_FRAGMENT_PLUGIN_PATH" msgstr "DOC_FRAGMENT_PLUGIN_PATH" #: ../../rst/reference_appendices/config.rst:2086 #: ../../rst/reference_appendices/config.rst:3452 msgid "Colon separated paths in which Ansible will search for Documentation Fragments Plugins." msgstr "Ansible ㌠ドキュメントフラグメントプラグインを検索ã™ã‚‹ã‚³ãƒ­ãƒ³åŒºåˆ‡ã‚Šãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:2088 msgid "``~/.ansible/plugins/doc_fragments:/usr/share/ansible/plugins/doc_fragments``" msgstr "``~/.ansible/plugins/doc_fragments:/usr/share/ansible/plugins/doc_fragments``" #: ../../rst/reference_appendices/config.rst:2091 msgid "doc_fragment_plugins" msgstr "doc_fragment_plugins" #: ../../rst/reference_appendices/config.rst:2093 msgid ":envvar:`ANSIBLE_DOC_FRAGMENT_PLUGINS`" msgstr ":envvar:`ANSIBLE_DOC_FRAGMENT_PLUGINS`" #: ../../rst/reference_appendices/config.rst:2098 msgid "DOCSITE_ROOT_URL" msgstr "DOCSITE_ROOT_URL" #: ../../rst/reference_appendices/config.rst:2100 msgid "Root docsite URL used to generate docs URLs in warning/error text; must be an absolute URL with valid scheme and trailing slash." msgstr "警告/エラーテキストã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ URL を生æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れるルートドキュメントサイト URL。有効ãªã‚¹ã‚­ãƒ¼ãƒ ãŠã‚ˆã³æœ«å°¾ã®ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã‚‹çµ¶å¯¾ URL ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:2101 msgid "``https://docs.ansible.com/ansible-core/``" msgstr "``https://docs.ansible.com/ansible-core/``" #: ../../rst/reference_appendices/config.rst:2105 msgid "docsite_root_url" msgstr "docsite_root_url" #: ../../rst/reference_appendices/config.rst:2110 msgid "DUPLICATE_YAML_DICT_KEY" msgstr "DUPLICATE_YAML_DICT_KEY" #: ../../rst/reference_appendices/config.rst:2112 msgid "By default Ansible will issue a warning when a duplicate dict key is encountered in YAML. These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€YAML ã§é‡è¤‡ã—㟠dict キーãŒç™ºç”Ÿã—ãŸå ´åˆã«è­¦å‘Šã‚’発行ã—ã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ã“ã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã¨éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2114 #: ../../rst/reference_appendices/config.rst:2853 msgid "``warn``" msgstr "``warn``" #: ../../rst/reference_appendices/config.rst:2122 msgid "duplicate_dict_key" msgstr "duplicate_dict_key" #: ../../rst/reference_appendices/config.rst:2124 msgid ":envvar:`ANSIBLE_DUPLICATE_YAML_DICT_KEY`" msgstr ":envvar:`ANSIBLE_DUPLICATE_YAML_DICT_KEY`" #: ../../rst/reference_appendices/config.rst:2129 msgid "ENABLE_TASK_DEBUGGER" msgstr "ENABLE_TASK_DEBUGGER" #: ../../rst/reference_appendices/config.rst:2131 msgid "Whether or not to enable the task debugger, this previously was done as a strategy plugin. Now all strategy plugins can inherit this behavior. The debugger defaults to activating when a task is failed on unreachable. Use the debugger keyword for more flexibility." msgstr "タスクデãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹ã‹ã©ã†ã‹ã«ã‹ã‹ã‚らãšã€ã“れã¯ä»¥å‰ã¯ strategy プラグインã¨ã—ã¦å®Ÿè¡Œã•れã¦ã„ã¾ã—ãŸã€‚ã“れã§ã€ã™ã¹ã¦ã® strategy プラグインãŒã“ã®å‹•作を継承ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚デãƒãƒƒã‚¬ãƒ¼ã¯ã€ã‚¿ã‚¹ã‚¯ãŒåˆ°é”ä¸èƒ½ã§å¤±æ•—ã—ãŸã¨ãã«ãƒ‡ãƒ•ォルトã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚柔軟性を高ã‚ã‚‹ã«ã¯ã€debugger キーワードを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2137 msgid "enable_task_debugger" msgstr "enable_task_debugger" #: ../../rst/reference_appendices/config.rst:2139 msgid ":envvar:`ANSIBLE_ENABLE_TASK_DEBUGGER`" msgstr ":envvar:`ANSIBLE_ENABLE_TASK_DEBUGGER`" #: ../../rst/reference_appendices/config.rst:2144 msgid "ERROR_ON_MISSING_HANDLER" msgstr "ERROR_ON_MISSING_HANDLER" #: ../../rst/reference_appendices/config.rst:2146 #: ../../rst/reference_appendices/config.rst:4133 msgid "Toggle to allow missing handlers to become a warning instead of an error when notifying." msgstr "通知時ã«ã€ã‚¨ãƒ©ãƒ¼ã§ã¯ãªãã€ä¸è¶³ã—ã¦ã„ã‚‹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒè­¦å‘Šã«ãªã‚‹ã‚ˆã†ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2151 msgid "error_on_missing_handler" msgstr "error_on_missing_handler" #: ../../rst/reference_appendices/config.rst:2153 msgid ":envvar:`ANSIBLE_ERROR_ON_MISSING_HANDLER`" msgstr ":envvar:`ANSIBLE_ERROR_ON_MISSING_HANDLER`" #: ../../rst/reference_appendices/config.rst:2158 msgid "FACTS_MODULES" msgstr "FACTS_MODULES" #: ../../rst/reference_appendices/config.rst:2160 #: ../../rst/reference_appendices/config.rst:4142 msgid "Which modules to run during a play's fact gathering stage, using the default of 'smart' will try to figure it out based on connection type." msgstr "プレイã®ãƒ•ァクトåŽé›†æ®µéšŽã§å®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ‡ãƒ•ォルトã®ã€Œsmartã€ã‚’使用ã™ã‚‹ã¨æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã«åŸºã¥ã„ã¦ç¢ºèªã‚’試ã¿ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2162 msgid "``['smart']``" msgstr "``['smart']``" #: ../../rst/reference_appendices/config.rst:2165 msgid "facts_modules" msgstr "facts_modules" #: ../../rst/reference_appendices/config.rst:2167 msgid ":envvar:`ANSIBLE_FACTS_MODULES`" msgstr ":envvar:`ANSIBLE_FACTS_MODULES`" #: ../../rst/reference_appendices/config.rst:2169 msgid "`ansible_facts_modules`" msgstr "`ansible_facts_modules`" #: ../../rst/reference_appendices/config.rst:2174 msgid "GALAXY_CACHE_DIR" msgstr "GALAXY_CACHE_DIR" #: ../../rst/reference_appendices/config.rst:2176 msgid "The directory that stores cached responses from a Galaxy server. This is only used by the ``ansible-galaxy collection install`` and ``download`` commands. Cache files inside this dir will be ignored if they are world writable." msgstr "Galaxy サーãƒãƒ¼ã‹ã‚‰ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れãŸå¿œç­”ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚ã“れ㯠``ansible-galaxy collection install`` コマンドãŠã‚ˆã³ ``download`` コマンドã«ã‚ˆã£ã¦ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ•ァイルã¯ã€èª°ã§ã‚‚書ãè¾¼ã¿å¯èƒ½ã§ã‚れã°ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2178 msgid "``~/.ansible/galaxy_cache``" msgstr "``~/.ansible/galaxy_cache``" #: ../../rst/reference_appendices/config.rst:2181 #: ../../rst/reference_appendices/config.rst:2196 #: ../../rst/reference_appendices/config.rst:2210 #: ../../rst/reference_appendices/config.rst:2223 #: ../../rst/reference_appendices/config.rst:2237 #: ../../rst/reference_appendices/config.rst:2250 #: ../../rst/reference_appendices/config.rst:2264 #: ../../rst/reference_appendices/config.rst:2279 msgid "[galaxy]" msgstr "[galaxy]" #: ../../rst/reference_appendices/config.rst:2182 msgid "cache_dir" msgstr "cache_dir" #: ../../rst/reference_appendices/config.rst:2184 msgid ":envvar:`ANSIBLE_GALAXY_CACHE_DIR`" msgstr ":envvar:`ANSIBLE_GALAXY_CACHE_DIR`" #: ../../rst/reference_appendices/config.rst:2189 msgid "GALAXY_DISPLAY_PROGRESS" msgstr "GALAXY_DISPLAY_PROGRESS" #: ../../rst/reference_appendices/config.rst:2191 msgid "Some steps in ``ansible-galaxy`` display a progress wheel which can cause issues on certain displays or when outputing the stdout to a file. This config option controls whether the display wheel is shown or not. The default is to show the display wheel if stdout has a tty." msgstr "``ansible-galaxy`` ã®ä¸€éƒ¨ã®æ‰‹é †ã§ã¯ã€ç‰¹å®šã®è¡¨ç¤ºã§ã€ã¾ãŸã¯æ¨™æº–出力 (stdout) をファイルã«å‡ºåŠ›ã™ã‚‹ã¨ãã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚る進行状æ³ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’表示ã—ã¾ã™ã€‚ã“ã®è¨­å®šã‚ªãƒ—ションã¯ã€è¡¨ç¤ºãƒ›ã‚¤ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚デフォルトã§ã¯ã€stdout ã« tty ãŒã‚ã‚‹ã¨ã€è¡¨ç¤ºãƒ›ã‚¤ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2197 msgid "display_progress" msgstr "display_progress" #: ../../rst/reference_appendices/config.rst:2199 msgid ":envvar:`ANSIBLE_GALAXY_DISPLAY_PROGRESS`" msgstr ":envvar:`ANSIBLE_GALAXY_DISPLAY_PROGRESS`" #: ../../rst/reference_appendices/config.rst:2204 msgid "GALAXY_IGNORE_CERTS" msgstr "GALAXY_IGNORE_CERTS" #: ../../rst/reference_appendices/config.rst:2206 #: ../../rst/reference_appendices/config.rst:4150 msgid "If set to yes, ansible-galaxy will not validate TLS certificates. This can be useful for testing against a server with a self-signed certificate." msgstr "yes ã«è¨­å®šã™ã‚‹ã¨ã€ansible-galaxy ㌠TLS 証明書を検証ã—ã¾ã›ã‚“。ã“れã¯ã€è‡ªå·±ç½²å証明書を使用ã™ã‚‹ã‚µãƒ¼ãƒãƒ¼ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã‚’行ã†å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2211 msgid "ignore_certs" msgstr "ignore_certs" #: ../../rst/reference_appendices/config.rst:2213 msgid ":envvar:`ANSIBLE_GALAXY_IGNORE`" msgstr ":envvar:`ANSIBLE_GALAXY_IGNORE`" #: ../../rst/reference_appendices/config.rst:2218 msgid "GALAXY_ROLE_SKELETON" msgstr "GALAXY_ROLE_SKELETON" #: ../../rst/reference_appendices/config.rst:2220 #: ../../rst/reference_appendices/config.rst:4158 msgid "Role or collection skeleton directory to use as a template for the ``init`` action in ``ansible-galaxy``, same as ``--role-skeleton``." msgstr "``ansible-galaxy`` ã® ``init`` アクションã®ãƒ†ãƒ³ãƒ—レートã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¹ã‚±ãƒ«ãƒˆãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã€‚``--role-skeleton`` ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2224 msgid "role_skeleton" msgstr "role_skeleton" #: ../../rst/reference_appendices/config.rst:2226 msgid ":envvar:`ANSIBLE_GALAXY_ROLE_SKELETON`" msgstr ":envvar:`ANSIBLE_GALAXY_ROLE_SKELETON`" #: ../../rst/reference_appendices/config.rst:2231 msgid "GALAXY_ROLE_SKELETON_IGNORE" msgstr "GALAXY_ROLE_SKELETON_IGNORE" #: ../../rst/reference_appendices/config.rst:2233 #: ../../rst/reference_appendices/config.rst:4166 msgid "patterns of files to ignore inside a Galaxy role or collection skeleton directory" msgstr "Galaxy ロールã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚¹ã‚±ãƒ«ãƒˆãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã§ç„¡è¦–ã™ã‚‹ãƒ•ァイルã®ãƒ‘ターン。" #: ../../rst/reference_appendices/config.rst:2235 msgid "``['^.git$', '^.*/.git_keep$']``" msgstr "``['^.git$', '^.*/.git_keep$']``" #: ../../rst/reference_appendices/config.rst:2238 msgid "role_skeleton_ignore" msgstr "role_skeleton_ignore" #: ../../rst/reference_appendices/config.rst:2240 msgid ":envvar:`ANSIBLE_GALAXY_ROLE_SKELETON_IGNORE`" msgstr ":envvar:`ANSIBLE_GALAXY_ROLE_SKELETON_IGNORE`" #: ../../rst/reference_appendices/config.rst:2245 msgid "GALAXY_SERVER" msgstr "GALAXY_SERVER" #: ../../rst/reference_appendices/config.rst:2247 #: ../../rst/reference_appendices/config.rst:4174 msgid "URL to prepend when roles don't specify the full URI, assume they are referencing this server as the source." msgstr "ロールãŒå®Œå…¨ãª URI を指定ã—ã¦ã„ãªã„å ´åˆã«å…ˆé ­ã«è¿½åŠ ã™ã‚‹ URL。ã“ã®ã‚µãƒ¼ãƒãƒ¼ãŒã‚½ãƒ¼ã‚¹ã¨ã—ã¦å‚ç…§ã•れã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2248 msgid "``https://galaxy.ansible.com``" msgstr "``https://galaxy.ansible.com``" #: ../../rst/reference_appendices/config.rst:2251 msgid "server" msgstr "server" #: ../../rst/reference_appendices/config.rst:2253 msgid ":envvar:`ANSIBLE_GALAXY_SERVER`" msgstr ":envvar:`ANSIBLE_GALAXY_SERVER`" #: ../../rst/reference_appendices/config.rst:2258 msgid "GALAXY_SERVER_LIST" msgstr "GALAXY_SERVER_LIST" #: ../../rst/reference_appendices/config.rst:2260 msgid "A list of Galaxy servers to use when installing a collection. The value corresponds to the config ini header ``[galaxy_server.{{item}}]`` which defines the server details. See :ref:`galaxy_server_config` for more details on how to define a Galaxy server. The order of servers in this list is used to as the order in which a collection is resolved. Setting this config option will ignore the :ref:`galaxy_server` config option." msgstr "コレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ä½¿ç”¨ã™ã‚‹ Galaxy サーãƒãƒ¼ã®ä¸€è¦§ã€‚値ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®è©³ç´°ã‚’定義ã™ã‚‹ config ini ヘッダー ``[galaxy_server.{{item}}]`` ã«å¯¾å¿œã—ã¾ã™ã€‚Galaxy サーãƒãƒ¼ã®å®šç¾©æ–¹æ³•ã®è©³ç´°ã¯ã€ã€Œ:ref:`galaxy_server_config`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®ä¸€è¦§ã®ã‚µãƒ¼ãƒãƒ¼ã®é †åºã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è§£æ±ºé †åºã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®è¨­å®šã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€:ref:`galaxy_server` ã®è¨­å®šã‚ªãƒ—ションã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2265 msgid "server_list" msgstr "server_list" #: ../../rst/reference_appendices/config.rst:2267 msgid ":envvar:`ANSIBLE_GALAXY_SERVER_LIST`" msgstr ":envvar:`ANSIBLE_GALAXY_SERVER_LIST`" #: ../../rst/reference_appendices/config.rst:2272 msgid "GALAXY_TOKEN_PATH" msgstr "GALAXY_TOKEN_PATH" #: ../../rst/reference_appendices/config.rst:2274 #: ../../rst/reference_appendices/config.rst:4190 msgid "Local path to galaxy access token file" msgstr "galaxy アクセストークンファイルã¸ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:2276 msgid "``~/.ansible/galaxy_token``" msgstr "``~/.ansible/galaxy_token``" #: ../../rst/reference_appendices/config.rst:2280 msgid "token_path" msgstr "token_path" #: ../../rst/reference_appendices/config.rst:2282 msgid ":envvar:`ANSIBLE_GALAXY_TOKEN_PATH`" msgstr ":envvar:`ANSIBLE_GALAXY_TOKEN_PATH`" #: ../../rst/reference_appendices/config.rst:2287 msgid "HOST_KEY_CHECKING" msgstr "HOST_KEY_CHECKING" #: ../../rst/reference_appendices/config.rst:2289 #: ../../rst/reference_appendices/config.rst:4214 msgid "Set this to \"False\" if you want to avoid host key checking by the underlying tools Ansible uses to connect to the host" msgstr "Ansible ãŒãƒ›ã‚¹ãƒˆã¸ã®æŽ¥ç¶šã«ä½¿ç”¨ã™ã‚‹åŸºç›¤ã®ãƒ„ールã§ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ã®ç¢ºèªã‚’行ã‚ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ã“ã®ãƒ‘ラメーターを「Falseã€ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2294 msgid "host_key_checking" msgstr "host_key_checking" #: ../../rst/reference_appendices/config.rst:2296 msgid ":envvar:`ANSIBLE_HOST_KEY_CHECKING`" msgstr ":envvar:`ANSIBLE_HOST_KEY_CHECKING`" #: ../../rst/reference_appendices/config.rst:2301 msgid "HOST_PATTERN_MISMATCH" msgstr "HOST_PATTERN_MISMATCH" #: ../../rst/reference_appendices/config.rst:2303 #: ../../rst/reference_appendices/config.rst:4222 msgid "This setting changes the behaviour of mismatched host patterns, it allows you to force a fatal error, a warning or just ignore it" msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€ä¸€è‡´ã—ãªã„ホストパターンã®å‹•作ãŒå¤‰æ›´ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã‚„警告を強制ã—ãŸã‚Šã€ç„¡è¦–ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2311 #: ../../rst/reference_appendices/config.rst:2392 #: ../../rst/reference_appendices/config.rst:2406 #: ../../rst/reference_appendices/config.rst:2418 #: ../../rst/reference_appendices/config.rst:2430 #: ../../rst/reference_appendices/config.rst:2443 #: ../../rst/reference_appendices/config.rst:2456 #: ../../rst/reference_appendices/config.rst:2470 #: ../../rst/reference_appendices/config.rst:2484 #: ../../rst/reference_appendices/config.rst:2500 #: ../../rst/reference_appendices/config.rst:2516 #: ../../rst/reference_appendices/config.rst:2531 msgid "[inventory]" msgstr "[inventory]" #: ../../rst/reference_appendices/config.rst:2312 msgid "host_pattern_mismatch" msgstr "host_pattern_mismatch" #: ../../rst/reference_appendices/config.rst:2314 msgid ":envvar:`ANSIBLE_HOST_PATTERN_MISMATCH`" msgstr ":envvar:`ANSIBLE_HOST_PATTERN_MISMATCH`" #: ../../rst/reference_appendices/config.rst:2319 msgid "INJECT_FACTS_AS_VARS" msgstr "INJECT_FACTS_AS_VARS" #: ../../rst/reference_appendices/config.rst:2321 msgid "Facts are available inside the `ansible_facts` variable, this setting also pushes them as their own vars in the main namespace. Unlike inside the `ansible_facts` dictionary, these will have an `ansible_` prefix." msgstr "ファクト㯠`ansible_facts` 変数内ã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ä¸»ãªåå‰ç©ºé–“ã§ç‹¬è‡ªã®å¤‰æ•°ã¨ã—ã¦ãƒ—ッシュã•れã¾ã™ã€‚`ansible_facts` ディクショナリー内ã¨ã¯ç•°ãªã‚Šã€ã“れ㯠`ansible_` ã®æŽ¥é ­è¾žãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2327 msgid "inject_facts_as_vars" msgstr "inject_facts_as_vars" #: ../../rst/reference_appendices/config.rst:2329 msgid ":envvar:`ANSIBLE_INJECT_FACT_VARS`" msgstr ":envvar:`ANSIBLE_INJECT_FACT_VARS`" #: ../../rst/reference_appendices/config.rst:2334 msgid "INTERPRETER_PYTHON" msgstr "INTERPRETER_PYTHON" #: ../../rst/reference_appendices/config.rst:2336 #: ../../rst/reference_appendices/config.rst:4230 msgid "Path to the Python interpreter to be used for module execution on remote targets, or an automatic discovery mode. Supported discovery modes are ``auto`` (the default), ``auto_silent``, ``auto_legacy``, and ``auto_legacy_silent``. All discovery modes employ a lookup table to use the included system Python (on distributions known to include one), falling back to a fixed ordered list of well-known Python interpreter locations if a platform-specific default is not available. The fallback behavior will issue a warning that the interpreter should be set explicitly (since interpreters installed later may change which one is used). This warning behavior can be disabled by setting ``auto_silent`` or ``auto_legacy_silent``. The value of ``auto_legacy`` provides all the same behavior, but for backwards-compatibility with older Ansible releases that always defaulted to ``/usr/bin/python``, will use that interpreter if present." msgstr "リモートターゲットã¾ãŸã¯è‡ªå‹•検出モードã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã«ä½¿ç”¨ã•れる Python インタープリターã¸ã®ãƒ‘ス。サãƒãƒ¼ãƒˆã•れã¦ã„る検出モードã¯ã€``auto`` (デフォルト)ã€``auto_silent``ã€``auto_legacy``ã€ãŠã‚ˆã³ ``auto_legacy_silent`` ã§ã™ã€‚ã™ã¹ã¦ã®æ¤œå‡ºãƒ¢ãƒ¼ãƒ‰ã¯ã€å«ã¾ã‚Œã¦ã„るシステム㮠Python (å«ã‚€ã“ã¨ãŒãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§) を使用ã™ã‚‹ãŸã‚ã«ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—テーブルを使用ã—ã€ãƒ—ラットフォーム固有ã®ãƒ‡ãƒ•ォルトãŒä½¿ç”¨ã§ããªã„å ´åˆã¯ã€ã‚ˆã知られ㟠Python インタープリターã®ä½ç½®ã®å›ºå®šã•れãŸé †åºãƒªã‚¹ãƒˆã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚フォールãƒãƒƒã‚¯å‹•作ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを明示的ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨ã„ã†è­¦å‘ŠãŒå‡ºåŠ›ã•れã¾ã™ (後ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターãŒã€ä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを変更ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‹ã‚‰ã§ã™)。ã“ã®è­¦å‘Šå‹•作を無効ã«ã™ã‚‹ã«ã¯ã€``auto_silent`` ã¾ãŸã¯ ``auto_legacy_silent`` を設定ã—ã¾ã™ã€‚ ``auto_legacy`` ã®å€¤ã¯ã™ã¹ã¦åŒã˜å‹•作を指定ã—ã¾ã™ãŒã€ä»¥å‰ã® Ansible リリースã¨ã®ä¸‹ä½äº’æ›æ€§ã‚’確ä¿ã™ã‚‹ãŸã‚ã«å¸¸ã«ãƒ‡ãƒ•ォルト㧠``/usr/bin/python`` ã«è¨­å®šã•れã¦ã„ãŸå ´åˆã«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターãŒã‚れã°ã€ãれを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2337 msgid "``auto``" msgstr "``auto``" #: ../../rst/reference_appendices/config.rst:2341 msgid "interpreter_python" msgstr "interpreter_python" #: ../../rst/reference_appendices/config.rst:2343 msgid ":envvar:`ANSIBLE_PYTHON_INTERPRETER`" msgstr ":envvar:`ANSIBLE_PYTHON_INTERPRETER`" #: ../../rst/reference_appendices/config.rst:2345 msgid "`ansible_python_interpreter`" msgstr "`ansible_python_interpreter`" #: ../../rst/reference_appendices/config.rst:2350 msgid "INTERPRETER_PYTHON_DISTRO_MAP" msgstr "INTERPRETER_PYTHON_DISTRO_MAP" #: ../../rst/reference_appendices/config.rst:2352 msgid "``{'centos': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'debian': {'8': '/usr/bin/python', '10': '/usr/bin/python3'}, 'fedora': {'23': '/usr/bin/python3'}, 'oracle': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'redhat': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'rhel': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'ubuntu': {'14': '/usr/bin/python', '16': '/usr/bin/python3'}}``" msgstr "``{'centos': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'debian': {'8': '/usr/bin/python', '10': '/usr/bin/python3'}, 'fedora': {'23': '/usr/bin/python3'}, 'oracle': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'redhat': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'rhel': {'6': '/usr/bin/python', '8': '/usr/libexec/platform-python', '9': '/usr/bin/python3'}, 'ubuntu': {'14': '/usr/bin/python', '16': '/usr/bin/python3'}}``" #: ../../rst/reference_appendices/config.rst:2358 msgid "INTERPRETER_PYTHON_FALLBACK" msgstr "INTERPRETER_PYTHON_FALLBACK" #: ../../rst/reference_appendices/config.rst:2361 msgid "``['python3.10', 'python3.9', 'python3.8', 'python3.7', 'python3.6', 'python3.5', '/usr/bin/python3', '/usr/libexec/platform-python', 'python2.7', 'python2.6', '/usr/bin/python', 'python']``" msgstr "``['python3.10', 'python3.9', 'python3.8', 'python3.7', 'python3.6', 'python3.5', '/usr/bin/python3', '/usr/libexec/platform-python', 'python2.7', 'python2.6', '/usr/bin/python', 'python']``" #: ../../rst/reference_appendices/config.rst:2364 msgid "`ansible_interpreter_python_fallback`" msgstr "`ansible_interpreter_python_fallback`" #: ../../rst/reference_appendices/config.rst:2369 msgid "INVALID_TASK_ATTRIBUTE_FAILED" msgstr "INVALID_TASK_ATTRIBUTE_FAILED" #: ../../rst/reference_appendices/config.rst:2371 #: ../../rst/reference_appendices/config.rst:4248 msgid "If 'false', invalid attributes for a task will result in warnings instead of errors" msgstr "「falseã€ã®å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯ã®ç„¡åйãªå±žæ€§ã«ã‚ˆã‚Šã€ã‚¨ãƒ©ãƒ¼ã§ã¯ãªã警告ãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2377 msgid "invalid_task_attribute_failed" msgstr "invalid_task_attribute_failed" #: ../../rst/reference_appendices/config.rst:2379 msgid ":envvar:`ANSIBLE_INVALID_TASK_ATTRIBUTE_FAILED`" msgstr ":envvar:`ANSIBLE_INVALID_TASK_ATTRIBUTE_FAILED`" #: ../../rst/reference_appendices/config.rst:2384 msgid "INVENTORY_ANY_UNPARSED_IS_FAILED" msgstr "INVENTORY_ANY_UNPARSED_IS_FAILED" #: ../../rst/reference_appendices/config.rst:2386 #: ../../rst/reference_appendices/config.rst:4256 msgid "If 'true', it is a fatal error when any given inventory source cannot be successfully parsed by any available inventory plugin; otherwise, this situation only attracts a warning." msgstr "「trueã€ã®å ´åˆã¯ã€æŒ‡å®šã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’利用å¯èƒ½ãª inventory ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã§æ­£å¸¸ã«è§£æžã§ããªã„å ´åˆã«è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚ãã†ã§ãªã„ã¨ã€ã“ã®çжæ³ã¯è­¦å‘Šã‚’æ‹›ãã ã‘ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2393 msgid "any_unparsed_is_failed" msgstr "any_unparsed_is_failed" #: ../../rst/reference_appendices/config.rst:2395 msgid ":envvar:`ANSIBLE_INVENTORY_ANY_UNPARSED_IS_FAILED`" msgstr ":envvar:`ANSIBLE_INVENTORY_ANY_UNPARSED_IS_FAILED`" #: ../../rst/reference_appendices/config.rst:2400 msgid "INVENTORY_CACHE_ENABLED" msgstr "INVENTORY_CACHE_ENABLED" #: ../../rst/reference_appendices/config.rst:2402 msgid "Toggle to turn on inventory caching. This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory configuration. This message will be removed in 2.16." msgstr "切り替ãˆã¦ã‚¤ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’オンã«ã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリー設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2407 msgid "cache" msgstr "cache" #: ../../rst/reference_appendices/config.rst:2409 msgid ":envvar:`ANSIBLE_INVENTORY_CACHE`" msgstr ":envvar:`ANSIBLE_INVENTORY_CACHE`" #: ../../rst/reference_appendices/config.rst:2414 msgid "INVENTORY_CACHE_PLUGIN" msgstr "INVENTORY_CACHE_PLUGIN" #: ../../rst/reference_appendices/config.rst:2416 msgid "The plugin for caching inventory. This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. This message will be removed in 2.16." msgstr "キャッシュインベントリーã®ãƒ—ラグイン。ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2419 msgid "cache_plugin" msgstr "cache_plugin" #: ../../rst/reference_appendices/config.rst:2421 msgid ":envvar:`ANSIBLE_INVENTORY_CACHE_PLUGIN`" msgstr ":envvar:`ANSIBLE_INVENTORY_CACHE_PLUGIN`" #: ../../rst/reference_appendices/config.rst:2426 msgid "INVENTORY_CACHE_PLUGIN_CONNECTION" msgstr "INVENTORY_CACHE_PLUGIN_CONNECTION" #: ../../rst/reference_appendices/config.rst:2428 msgid "The inventory cache connection. This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. This message will be removed in 2.16." msgstr "インベントリーキャッシュコãƒã‚¯ã‚·ãƒ§ãƒ³ã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2431 msgid "cache_connection" msgstr "cache_connection" #: ../../rst/reference_appendices/config.rst:2433 msgid ":envvar:`ANSIBLE_INVENTORY_CACHE_CONNECTION`" msgstr ":envvar:`ANSIBLE_INVENTORY_CACHE_CONNECTION`" #: ../../rst/reference_appendices/config.rst:2438 msgid "INVENTORY_CACHE_PLUGIN_PREFIX" msgstr "INVENTORY_CACHE_PLUGIN_PREFIX" #: ../../rst/reference_appendices/config.rst:2440 msgid "The table prefix for the cache plugin. This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. This message will be removed in 2.16." msgstr "キャッシュプラグインã®è¡¨ã®æŽ¥é ­è¾žã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2441 msgid "``ansible_inventory_``" msgstr "``ansible_inventory_``" #: ../../rst/reference_appendices/config.rst:2444 msgid "cache_prefix" msgstr "cache_prefix" #: ../../rst/reference_appendices/config.rst:2446 msgid ":envvar:`ANSIBLE_INVENTORY_CACHE_PLUGIN_PREFIX`" msgstr ":envvar:`ANSIBLE_INVENTORY_CACHE_PLUGIN_PREFIX`" #: ../../rst/reference_appendices/config.rst:2451 msgid "INVENTORY_CACHE_TIMEOUT" msgstr "INVENTORY_CACHE_TIMEOUT" #: ../../rst/reference_appendices/config.rst:2453 msgid "Expiration timeout for the inventory cache plugin data. This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. This message will be removed in 2.16." msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æœ‰åŠ¹æœŸé™ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2454 msgid "``3600``" msgstr "``3600``" #: ../../rst/reference_appendices/config.rst:2457 msgid "cache_timeout" msgstr "cache_timeout" #: ../../rst/reference_appendices/config.rst:2459 msgid ":envvar:`ANSIBLE_INVENTORY_CACHE_TIMEOUT`" msgstr ":envvar:`ANSIBLE_INVENTORY_CACHE_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:2464 msgid "INVENTORY_ENABLED" msgstr "INVENTORY_ENABLED" #: ../../rst/reference_appendices/config.rst:2466 #: ../../rst/reference_appendices/config.rst:4305 msgid "List of enabled inventory plugins, it also determines the order in which they are used." msgstr "有効㪠inventory プラグインã®ãƒªã‚¹ãƒˆã€‚ã¾ãŸã€ä½¿ç”¨ã™ã‚‹é †åºã‚‚決定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2468 msgid "``['host_list', 'script', 'auto', 'yaml', 'ini', 'toml']``" msgstr "``['host_list', 'script', 'auto', 'yaml', 'ini', 'toml']``" #: ../../rst/reference_appendices/config.rst:2471 msgid "enable_plugins" msgstr "enable_plugins" #: ../../rst/reference_appendices/config.rst:2473 msgid ":envvar:`ANSIBLE_INVENTORY_ENABLED`" msgstr ":envvar:`ANSIBLE_INVENTORY_ENABLED`" #: ../../rst/reference_appendices/config.rst:2478 msgid "INVENTORY_EXPORT" msgstr "INVENTORY_EXPORT" #: ../../rst/reference_appendices/config.rst:2480 #: ../../rst/reference_appendices/config.rst:4313 msgid "Controls if ansible-inventory will accurately reflect Ansible's view into inventory or its optimized for exporting." msgstr "ansible-inventory ㌠Ansible ã®ãƒ“ãƒ¥ãƒ¼ã‚’ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«æ­£ç¢ºã«å映ã•ã›ã‚‹ã‹ã€ã¾ãŸã¯ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«æœ€é©åŒ–ã™ã‚‹ã‹ã‚’制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2485 msgid "export" msgstr "export" #: ../../rst/reference_appendices/config.rst:2487 msgid ":envvar:`ANSIBLE_INVENTORY_EXPORT`" msgstr ":envvar:`ANSIBLE_INVENTORY_EXPORT`" #: ../../rst/reference_appendices/config.rst:2492 msgid "INVENTORY_IGNORE_EXTS" msgstr "INVENTORY_IGNORE_EXTS" #: ../../rst/reference_appendices/config.rst:2494 #: ../../rst/reference_appendices/config.rst:4321 msgid "List of extensions to ignore when using a directory as an inventory source" msgstr "ディレクトリーをインベントリーソースã¨ã—ã¦ä½¿ç”¨ã™ã‚‹éš›ã«ç„¡è¦–ã™ã‚‹æ‹¡å¼µæ©Ÿèƒ½ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/config.rst:2496 msgid "``{{(REJECT_EXTS + ('.orig', '.ini', '.cfg', '.retry'))}}``" msgstr "``{{(REJECT_EXTS + ('.orig', '.ini', '.cfg', '.retry'))}}``" #: ../../rst/reference_appendices/config.rst:2499 msgid "inventory_ignore_extensions" msgstr "inventory_ignore_extensions" #: ../../rst/reference_appendices/config.rst:2501 msgid "ignore_extensions" msgstr "ignore_extensions" #: ../../rst/reference_appendices/config.rst:2503 msgid ":envvar:`ANSIBLE_INVENTORY_IGNORE`" msgstr ":envvar:`ANSIBLE_INVENTORY_IGNORE`" #: ../../rst/reference_appendices/config.rst:2508 msgid "INVENTORY_IGNORE_PATTERNS" msgstr "INVENTORY_IGNORE_PATTERNS" #: ../../rst/reference_appendices/config.rst:2510 #: ../../rst/reference_appendices/config.rst:4329 msgid "List of patterns to ignore when using a directory as an inventory source" msgstr "ディレクトリーをインベントリーソースã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã«ç„¡è¦–ã™ã‚‹ãƒ‘ターンã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/config.rst:2515 msgid "inventory_ignore_patterns" msgstr "inventory_ignore_patterns" #: ../../rst/reference_appendices/config.rst:2517 msgid "ignore_patterns" msgstr "ignore_patterns" #: ../../rst/reference_appendices/config.rst:2519 msgid ":envvar:`ANSIBLE_INVENTORY_IGNORE_REGEX`" msgstr ":envvar:`ANSIBLE_INVENTORY_IGNORE_REGEX`" #: ../../rst/reference_appendices/config.rst:2524 msgid "INVENTORY_UNPARSED_IS_FAILED" msgstr "INVENTORY_UNPARSED_IS_FAILED" #: ../../rst/reference_appendices/config.rst:2526 #: ../../rst/reference_appendices/config.rst:4337 msgid "If 'true' it is a fatal error if every single potential inventory source fails to parse, otherwise this situation will only attract a warning." msgstr "「trueã€ã«ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®æ½œåœ¨çš„ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ãŒè§£æžã«å¤±æ•—ã—ãŸå ´åˆã«è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã¨ãªã‚Šã¾ã™ã€‚ãã†ã—ãªã„ã¨ã€ã“ã®çжæ³ã¯è­¦å‘Šã‚’æ‹›ãã ã‘ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2532 msgid "unparsed_is_failed" msgstr "unparsed_is_failed" #: ../../rst/reference_appendices/config.rst:2534 msgid ":envvar:`ANSIBLE_INVENTORY_UNPARSED_FAILED`" msgstr ":envvar:`ANSIBLE_INVENTORY_UNPARSED_FAILED`" #: ../../rst/reference_appendices/config.rst:2539 msgid "JINJA2_NATIVE_WARNING" msgstr "JINJA2_NATIVE_WARNING" #: ../../rst/reference_appendices/config.rst:2541 #: ../../rst/reference_appendices/config.rst:4354 msgid "Toggle to control showing warnings related to running a Jinja version older than required for jinja2_native" msgstr "jinja2_native ã«å¿…è¦ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚å¤ã„ Jinja ã®å®Ÿè¡Œã«é–¢é€£ã™ã‚‹è­¦å‘Šã®è¡¨ç¤ºã‚’制御ã™ã‚‹ã‚ˆã†ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2546 msgid "jinja2_native_warning" msgstr "jinja2_native_warning" #: ../../rst/reference_appendices/config.rst:2548 msgid ":envvar:`ANSIBLE_JINJA2_NATIVE_WARNING`" msgstr ":envvar:`ANSIBLE_JINJA2_NATIVE_WARNING`" #: ../../rst/reference_appendices/config.rst:2553 msgid "LOCALHOST_WARNING" msgstr "LOCALHOST_WARNING" #: ../../rst/reference_appendices/config.rst:2555 msgid "By default Ansible will issue a warning when there are no hosts in the inventory. These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ãƒ›ã‚¹ãƒˆãŒãªã„å ´åˆã«è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ã“ã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã¨éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2558 msgid "2.6" msgstr "2.6" #: ../../rst/reference_appendices/config.rst:2561 msgid "localhost_warning" msgstr "localhost_warning" #: ../../rst/reference_appendices/config.rst:2563 msgid ":envvar:`ANSIBLE_LOCALHOST_WARNING`" msgstr ":envvar:`ANSIBLE_LOCALHOST_WARNING`" #: ../../rst/reference_appendices/config.rst:2568 msgid "MAX_FILE_SIZE_FOR_DIFF" msgstr "MAX_FILE_SIZE_FOR_DIFF" #: ../../rst/reference_appendices/config.rst:2570 #: ../../rst/reference_appendices/config.rst:4346 msgid "Maximum size of files to be considered for diff display" msgstr "diff 表示ã«è€ƒæ…®ã•ã‚Œã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ€å¤§ã‚µã‚¤ã‚ºã€‚" #: ../../rst/reference_appendices/config.rst:2571 #: ../../rst/reference_appendices/config.rst:2670 msgid "int" msgstr "int" #: ../../rst/reference_appendices/config.rst:2572 msgid "``104448``" msgstr "``104448``" #: ../../rst/reference_appendices/config.rst:2575 msgid "max_diff_size" msgstr "max_diff_size" #: ../../rst/reference_appendices/config.rst:2577 msgid ":envvar:`ANSIBLE_MAX_DIFF_SIZE`" msgstr ":envvar:`ANSIBLE_MAX_DIFF_SIZE`" #: ../../rst/reference_appendices/config.rst:2582 msgid "MODULE_IGNORE_EXTS" msgstr "MODULE_IGNORE_EXTS" #: ../../rst/reference_appendices/config.rst:2584 msgid "List of extensions to ignore when looking for modules to load This is for rejecting script and binary module fallback extensions" msgstr "読ã¿è¾¼ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’探ã™ã¨ãã«ç„¡è¦–ã™ã‚‹æ‹¡å¼µæ©Ÿèƒ½ã®ãƒªã‚¹ãƒˆã€‚ã“れã¯ã€ã‚¹ã‚¯ãƒªãƒ—トãŠã‚ˆã³ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ•ォールãƒãƒƒã‚¯æ‹¡å¼µæ©Ÿèƒ½ã‚’æ‹’å¦ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2586 msgid "``{{(REJECT_EXTS + ('.yaml', '.yml', '.ini'))}}``" msgstr "``{{(REJECT_EXTS + ('.yaml', '.yml', '.ini'))}}``" #: ../../rst/reference_appendices/config.rst:2589 msgid "module_ignore_exts" msgstr "module_ignore_exts" #: ../../rst/reference_appendices/config.rst:2591 msgid ":envvar:`ANSIBLE_MODULE_IGNORE_EXTS`" msgstr ":envvar:`ANSIBLE_MODULE_IGNORE_EXTS`" #: ../../rst/reference_appendices/config.rst:2596 msgid "NETCONF_SSH_CONFIG" msgstr "NETCONF_SSH_CONFIG" #: ../../rst/reference_appendices/config.rst:2598 #: ../../rst/reference_appendices/config.rst:4601 msgid "This variable is used to enable bastion/jump host with netconf connection. If set to True the bastion/jump host ssh settings should be present in ~/.ssh/config file, alternatively it can be set to custom ssh configuration file path to read the bastion/jump host settings." msgstr "ã“ã®å¤‰æ•°ã¯ã€netconf 接続㧠bastion/ジャンプホストを有効ã«ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚True ã«è¨­å®šã™ã‚‹ã¨ã€bastion/ジャンプホスト㮠ssh 設定㌠~/.ssh/config ファイルã«å­˜åœ¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã® ssh 設定ファイルパスã«è¨­å®šã—ã¦ã€bastion/ジャンプホストã®è¨­å®šã‚’読ã¿å–ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2601 msgid "[netconf_connection]" msgstr "[netconf_connection]" #: ../../rst/reference_appendices/config.rst:2602 msgid "ssh_config" msgstr "ssh_config" #: ../../rst/reference_appendices/config.rst:2604 msgid ":envvar:`ANSIBLE_NETCONF_SSH_CONFIG`" msgstr ":envvar:`ANSIBLE_NETCONF_SSH_CONFIG`" #: ../../rst/reference_appendices/config.rst:2609 msgid "NETWORK_GROUP_MODULES" msgstr "NETWORK_GROUP_MODULES" #: ../../rst/reference_appendices/config.rst:2612 msgid "``['eos', 'nxos', 'ios', 'iosxr', 'junos', 'enos', 'ce', 'vyos', 'sros', 'dellos9', 'dellos10', 'dellos6', 'asa', 'aruba', 'aireos', 'bigip', 'ironware', 'onyx', 'netconf', 'exos', 'voss', 'slxos']``" msgstr "``['eos', 'nxos', 'ios', 'iosxr', 'junos', 'enos', 'ce', 'vyos', 'sros', 'dellos9', 'dellos10', 'dellos6', 'asa', 'aruba', 'aireos', 'bigip', 'ironware', 'onyx', 'netconf', 'exos', 'voss', 'slxos']``" #: ../../rst/reference_appendices/config.rst:2615 msgid "network_group_modules" msgstr "network_group_modules" #: ../../rst/reference_appendices/config.rst:2617 msgid ":envvar:`ANSIBLE_NETWORK_GROUP_MODULES`" msgstr ":envvar:`ANSIBLE_NETWORK_GROUP_MODULES`" #: ../../rst/reference_appendices/config.rst:2618 msgid ":envvar:`NETWORK_GROUP_MODULES`" msgstr ":envvar:`NETWORK_GROUP_MODULES`" #: ../../rst/reference_appendices/config.rst:2621 #: ../../rst/reference_appendices/config.rst:4367 msgid "the ``ANSIBLE_NETWORK_GROUP_MODULES`` environment variable" msgstr "``ANSIBLE_NETWORK_GROUP_MODULES`` 環境変数" #: ../../rst/reference_appendices/config.rst:2626 msgid "OLD_PLUGIN_CACHE_CLEARING" msgstr "OLD_PLUGIN_CACHE_CLEARING" #: ../../rst/reference_appendices/config.rst:2628 #: ../../rst/reference_appendices/config.rst:4394 msgid "Previously Ansible would only clear some of the plugin loading caches when loading new roles, this led to some behaviours in which a plugin loaded in prevoius plays would be unexpectedly 'sticky'. This setting allows to return to that behaviour." msgstr "以å‰ã® Ansible ã¯ã€æ–°ã—ã„ロールを読ã¿è¾¼ã‚€ã¨ãã«ãƒ—ラグインã®èª­ã¿è¾¼ã¿ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®ä¸€éƒ¨ã®ã¿ã‚’削除ã—ã¦ã„ã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ä»¥å‰ã®ãƒ—レイã§èª­ã¿è¾¼ã¾ã‚ŒãŸãƒ—ラグインãŒäºˆæœŸã›ãšã€Œã‚¹ãƒ†ã‚£ãƒƒã‚­ãƒ¼ã€ã«ãªã‚‹å‹•作ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã“ã®è¨­å®šã«ã‚ˆã‚Šã€ãã®å‹•ä½œã«æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2634 msgid "old_plugin_cache_clear" msgstr "old_plugin_cache_clear" #: ../../rst/reference_appendices/config.rst:2636 msgid ":envvar:`ANSIBLE_OLD_PLUGIN_CACHE_CLEAR`" msgstr ":envvar:`ANSIBLE_OLD_PLUGIN_CACHE_CLEAR`" #: ../../rst/reference_appendices/config.rst:2641 msgid "PARAMIKO_HOST_KEY_AUTO_ADD" msgstr "PARAMIKO_HOST_KEY_AUTO_ADD" #: ../../rst/reference_appendices/config.rst:2646 #: ../../rst/reference_appendices/config.rst:2659 msgid "[paramiko_connection]" msgstr "[paramiko_connection]" #: ../../rst/reference_appendices/config.rst:2647 msgid "host_key_auto_add" msgstr "host_key_auto_add" #: ../../rst/reference_appendices/config.rst:2649 msgid ":envvar:`ANSIBLE_PARAMIKO_HOST_KEY_AUTO_ADD`" msgstr ":envvar:`ANSIBLE_PARAMIKO_HOST_KEY_AUTO_ADD`" #: ../../rst/reference_appendices/config.rst:2654 msgid "PARAMIKO_LOOK_FOR_KEYS" msgstr "PARAMIKO_LOOK_FOR_KEYS" #: ../../rst/reference_appendices/config.rst:2660 msgid "look_for_keys" msgstr "look_for_keys" #: ../../rst/reference_appendices/config.rst:2662 msgid ":envvar:`ANSIBLE_PARAMIKO_LOOK_FOR_KEYS`" msgstr ":envvar:`ANSIBLE_PARAMIKO_LOOK_FOR_KEYS`" #: ../../rst/reference_appendices/config.rst:2667 msgid "PERSISTENT_COMMAND_TIMEOUT" msgstr "PERSISTENT_COMMAND_TIMEOUT" #: ../../rst/reference_appendices/config.rst:2669 #: ../../rst/reference_appendices/config.rst:4440 msgid "This controls the amount of time to wait for response from remote device before timing out persistent connection." msgstr "ã“れã¯ã€æ°¸ç¶šçš„ãªæŽ¥ç¶šã‚’ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã™ã‚‹å‰ã«ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®å¿œç­”ã‚’å¾…ã¤æ™‚間を制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2671 #: ../../rst/reference_appendices/config.rst:2699 msgid "``30``" msgstr "``30``" #: ../../rst/reference_appendices/config.rst:2674 msgid "command_timeout" msgstr "command_timeout" #: ../../rst/reference_appendices/config.rst:2676 msgid ":envvar:`ANSIBLE_PERSISTENT_COMMAND_TIMEOUT`" msgstr ":envvar:`ANSIBLE_PERSISTENT_COMMAND_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:2681 msgid "PERSISTENT_CONNECT_RETRY_TIMEOUT" msgstr "PERSISTENT_CONNECT_RETRY_TIMEOUT" #: ../../rst/reference_appendices/config.rst:2683 #: ../../rst/reference_appendices/config.rst:4432 msgid "This controls the retry timeout for persistent connection to connect to the local domain socket." msgstr "ã“れã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚½ã‚±ãƒƒãƒˆã«æŽ¥ç¶šã™ã‚‹æ°¸ç¶šæŽ¥ç¶šã®å†è©¦è¡Œã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2688 msgid "connect_retry_timeout" msgstr "connect_retry_timeout" #: ../../rst/reference_appendices/config.rst:2690 msgid ":envvar:`ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT`" msgstr ":envvar:`ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:2695 msgid "PERSISTENT_CONNECT_TIMEOUT" msgstr "PERSISTENT_CONNECT_TIMEOUT" #: ../../rst/reference_appendices/config.rst:2697 #: ../../rst/reference_appendices/config.rst:4424 msgid "This controls how long the persistent connection will remain idle before it is destroyed." msgstr "ã“れã¯ã€ã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã«ãªã‚Šã€æ°¸ç¶šæŽ¥ç¶šãŒç ´æ£„ã•れるã¾ã§ã®æœŸé–“を制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2702 msgid "connect_timeout" msgstr "connect_timeout" #: ../../rst/reference_appendices/config.rst:2704 msgid ":envvar:`ANSIBLE_PERSISTENT_CONNECT_TIMEOUT`" msgstr ":envvar:`ANSIBLE_PERSISTENT_CONNECT_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:2709 msgid "PERSISTENT_CONTROL_PATH_DIR" msgstr "PERSISTENT_CONTROL_PATH_DIR" #: ../../rst/reference_appendices/config.rst:2711 #: ../../rst/reference_appendices/config.rst:4416 msgid "Path to socket to be used by the connection persistence system." msgstr "接続永続システムã«ã‚ˆã£ã¦ä½¿ç”¨ã•れるソケットã¸ã®ãƒ‘ス。" #: ../../rst/reference_appendices/config.rst:2713 msgid "``~/.ansible/pc``" msgstr "``~/.ansible/pc``" #: ../../rst/reference_appendices/config.rst:2716 msgid "control_path_dir" msgstr "control_path_dir" #: ../../rst/reference_appendices/config.rst:2718 msgid ":envvar:`ANSIBLE_PERSISTENT_CONTROL_PATH_DIR`" msgstr ":envvar:`ANSIBLE_PERSISTENT_CONTROL_PATH_DIR`" #: ../../rst/reference_appendices/config.rst:2723 msgid "PLAYBOOK_DIR" msgstr "PLAYBOOK_DIR" #: ../../rst/reference_appendices/config.rst:2725 #: ../../rst/reference_appendices/config.rst:4448 msgid "A number of non-playbook CLIs have a ``--playbook-dir`` argument; this sets the default value for it." msgstr "Playbook 以外㮠CLI ã®å¤šãã« ``--playbook-dir`` 引数ãŒã‚りã€ã“れã«ã‚ˆã‚Šãƒ‡ãƒ•ォルト値ãŒè¨­å®šã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2730 #: ../../rst/reference_appendices/special_variables.rst:122 msgid "playbook_dir" msgstr "playbook_dir" #: ../../rst/reference_appendices/config.rst:2732 msgid ":envvar:`ANSIBLE_PLAYBOOK_DIR`" msgstr ":envvar:`ANSIBLE_PLAYBOOK_DIR`" #: ../../rst/reference_appendices/config.rst:2737 msgid "PLAYBOOK_VARS_ROOT" msgstr "PLAYBOOK_VARS_ROOT" #: ../../rst/reference_appendices/config.rst:2739 msgid "This sets which playbook dirs will be used as a root to process vars plugins, which includes finding host_vars/group_vars The ``top`` option follows the traditional behaviour of using the top playbook in the chain to find the root directory. The ``bottom`` option follows the 2.4.0 behaviour of using the current playbook to find the root directory. The ``all`` option examines from the first parent to the current playbook." msgstr "ã“れã«ã‚ˆã‚Šã€vars プラグインを処ç†ã™ã‚‹ãŸã‚ã®ãƒ«ãƒ¼ãƒˆã¨ã—ã¦ä½¿ç”¨ã•れる Playbook ディレクトリーãŒè¨­å®šã•れã¾ã™ã€‚ã“れã«ã¯ã€host_vars/group_vars ã®æ¤œç´¢ãŒå«ã¾ã‚Œã¾ã™ã€‚``top`` オプションã¯ã€ãƒã‚§ãƒ¼ãƒ³ã®æœ€ä¸Šä½ã® Playbook を使用ã—ã¦ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’見ã¤ã‘ã‚‹ã¨ã„ã†å¾“æ¥ã®å‹•作ã«å¾“ã„ã¾ã™ã€‚``bottom`` オプションã¯ã€ç¾åœ¨ã® Playbook を使用ã—ã¦ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’検索ã™ã‚‹ 2.4.0 ã®å‹•作ã«å¾“ã„ã¾ã™ã€‚``all`` オプションã¯ã€æœ€åˆã®è¦ªã‹ã‚‰ç¾åœ¨ã® Playbook ã¾ã§ã‚’調ã¹ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2740 msgid "``top``" msgstr "``top``" #: ../../rst/reference_appendices/config.rst msgid "top" msgstr "top" #: ../../rst/reference_appendices/config.rst msgid "bottom" msgstr "bottom" #: ../../rst/reference_appendices/config.rst msgid "all" msgstr "all" #: ../../rst/reference_appendices/config.rst:2745 msgid "2.4.1" msgstr "2.4.1" #: ../../rst/reference_appendices/config.rst:2748 msgid "playbook_vars_root" msgstr "playbook_vars_root" #: ../../rst/reference_appendices/config.rst:2750 msgid ":envvar:`ANSIBLE_PLAYBOOK_VARS_ROOT`" msgstr ":envvar:`ANSIBLE_PLAYBOOK_VARS_ROOT`" #: ../../rst/reference_appendices/config.rst:2755 msgid "PLUGIN_FILTERS_CFG" msgstr "PLUGIN_FILTERS_CFG" #: ../../rst/reference_appendices/config.rst:2757 msgid "A path to configuration for filtering which plugins installed on the system are allowed to be used. See :ref:`plugin_filtering_config` for details of the filter file's format. The default is /etc/ansible/plugin_filters.yml" msgstr "システムã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るプラグインã®ã†ã¡ã€ã©ã®ãƒ—ラグインã®ä½¿ç”¨ã‚’許å¯ã™ã‚‹ã‹ã‚’フィルタリングã™ã‚‹ãŸã‚ã®è¨­å®šã®ãƒ‘スã§ã™ã€‚フィルターファイルã®å½¢å¼ã®è©³ç´°ã¯ã€ã€Œ:ref:`plugin_filtering_config`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。デフォルト㯠/etc/ansible/plugin_filters.yml ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2760 msgid "2.5.0" msgstr "2.5.0" #: ../../rst/reference_appendices/config.rst:2762 msgid "[default]" msgstr "[default]" #: ../../rst/reference_appendices/config.rst:2763 #: ../../rst/reference_appendices/config.rst:2768 msgid "plugin_filters_cfg" msgstr "plugin_filters_cfg" #: ../../rst/reference_appendices/config.rst:2765 msgid "specifying \"plugin_filters_cfg\" under the \"default\" section is deprecated" msgstr "「defaultã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã€Œplugin_filters_cfgã€ã‚’指定ã™ã‚‹ã“ã¨ãŒéžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/config.rst:2766 msgid "the \"defaults\" section instead" msgstr "代ã‚りã«ã€Œdefaultã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2773 msgid "PYTHON_MODULE_RLIMIT_NOFILE" msgstr "PYTHON_MODULE_RLIMIT_NOFILE" #: ../../rst/reference_appendices/config.rst:2775 #: ../../rst/reference_appendices/config.rst:4465 msgid "Attempts to set RLIMIT_NOFILE soft limit to the specified value when executing Python modules (can speed up subprocess usage on Python 2.x. See https://bugs.python.org/issue11284). The value will be limited by the existing hard limit. Default value of 0 does not attempt to adjust existing system-defined limits." msgstr "Python モジュールã®å®Ÿè¡Œæ™‚ã« RLIMIT_NOFILE ソフト制é™ã‚’指定ã•れãŸå€¤ã«è¨­å®šã—よã†ã¨ã—ã¾ã™ (Python2.x ã§ã®ã‚µãƒ–プロセスã®ä½¿ç”¨ã‚’高速化ã§ãã¾ã™ã€‚https://bugs.python.org/issue11284 ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。ã“ã®å€¤ã¯ã€æ—¢å­˜ã®ãƒãƒ¼ãƒ‰åˆ¶é™ã«ã‚ˆã£ã¦åˆ¶é™ã•れã¾ã™ã€‚デフォルト値㮠0 ã¯ã€æ—¢å­˜ã®ã‚·ã‚¹ãƒ†ãƒ å®šç¾©ã®åˆ¶é™ã‚’調整ã—よã†ã¨ã¯ã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:2780 msgid "python_module_rlimit_nofile" msgstr "python_module_rlimit_nofile" #: ../../rst/reference_appendices/config.rst:2782 msgid ":envvar:`ANSIBLE_PYTHON_MODULE_RLIMIT_NOFILE`" msgstr ":envvar:`ANSIBLE_PYTHON_MODULE_RLIMIT_NOFILE`" #: ../../rst/reference_appendices/config.rst:2784 msgid "`ansible_python_module_rlimit_nofile`" msgstr "`ansible_python_module_rlimit_nofile`" #: ../../rst/reference_appendices/config.rst:2789 msgid "RETRY_FILES_ENABLED" msgstr "RETRY_FILES_ENABLED" #: ../../rst/reference_appendices/config.rst:2791 #: ../../rst/reference_appendices/config.rst:4473 msgid "This controls whether a failed Ansible playbook should create a .retry file." msgstr "ã“れã«ã‚ˆã‚Šã€å¤±æ•—ã—㟠Ansible Playbook ㌠.retry ファイルを作æˆã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2796 msgid "retry_files_enabled" msgstr "retry_files_enabled" #: ../../rst/reference_appendices/config.rst:2798 msgid ":envvar:`ANSIBLE_RETRY_FILES_ENABLED`" msgstr ":envvar:`ANSIBLE_RETRY_FILES_ENABLED`" #: ../../rst/reference_appendices/config.rst:2803 msgid "RETRY_FILES_SAVE_PATH" msgstr "RETRY_FILES_SAVE_PATH" #: ../../rst/reference_appendices/config.rst:2805 msgid "This sets the path in which Ansible will save .retry files when a playbook fails and retry files are enabled. This file will be overwritten after each run with the list of failed hosts from all plays." msgstr "ã“れã«ã‚ˆã‚Šã€Playbook ãŒå¤±æ•—ã—ã€å†è©¦è¡Œãƒ•ã‚¡ã‚¤ãƒ«ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã«ã€Ansible ㌠.retry ファイルをä¿å­˜ã™ã‚‹ãƒ‘スãŒè¨­å®šã•れã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€å®Ÿè¡Œã™ã‚‹ãŸã³ã«ã€ã™ã¹ã¦ã®ãƒ—レイã§å¤±æ•—ã—ãŸãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã§ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2810 msgid "retry_files_save_path" msgstr "retry_files_save_path" #: ../../rst/reference_appendices/config.rst:2812 msgid ":envvar:`ANSIBLE_RETRY_FILES_SAVE_PATH`" msgstr ":envvar:`ANSIBLE_RETRY_FILES_SAVE_PATH`" #: ../../rst/reference_appendices/config.rst:2817 msgid "RUN_VARS_PLUGINS" msgstr "RUN_VARS_PLUGINS" #: ../../rst/reference_appendices/config.rst:2819 msgid "This setting can be used to optimize vars_plugin usage depending on user's inventory size and play selection. Setting to C(demand) will run vars_plugins relative to inventory sources anytime vars are 'demanded' by tasks. Setting to C(start) will run vars_plugins relative to inventory sources after importing that inventory source." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚µã‚¤ã‚ºã¨ãƒ—レイã®é¸æŠžã«å¿œã˜ã¦ vars_plugin ã®ä½¿ç”¨ã‚’最é©åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚C(demand) ã«è¨­å®šã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦å¤‰æ•°ãŒã€Œè¦æ±‚ã€ã•れるãŸã³ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«é–¢é€£ã—㦠vars_plugins ãŒå®Ÿè¡Œã•れã¾ã™ã€‚C(start) ã«è¨­å®šã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã—ãŸå¾Œã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«é–¢é€£ã—㦠vars_plugins ãŒå®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2821 msgid "``demand``" msgstr "``demand``" #: ../../rst/reference_appendices/config.rst msgid "demand" msgstr "demand" #: ../../rst/reference_appendices/config.rst msgid "start" msgstr "start" #: ../../rst/reference_appendices/config.rst:2828 msgid "run_vars_plugins" msgstr "run_vars_plugins" #: ../../rst/reference_appendices/config.rst:2830 msgid ":envvar:`ANSIBLE_RUN_VARS_PLUGINS`" msgstr ":envvar:`ANSIBLE_RUN_VARS_PLUGINS`" #: ../../rst/reference_appendices/config.rst:2835 msgid "SHOW_CUSTOM_STATS" msgstr "SHOW_CUSTOM_STATS" #: ../../rst/reference_appendices/config.rst:2837 #: ../../rst/reference_appendices/config.rst:4497 msgid "This adds the custom stats set via the set_stats plugin to the default output" msgstr "ã“れã«ã‚ˆã‚Šã€set_stats プラグインを介ã—ã¦ã‚«ã‚¹ã‚¿ãƒ çµ±è¨ˆã‚»ãƒƒãƒˆãŒãƒ‡ãƒ•ォルトã®å‡ºåŠ›ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2842 msgid "show_custom_stats" msgstr "show_custom_stats" #: ../../rst/reference_appendices/config.rst:2844 msgid ":envvar:`ANSIBLE_SHOW_CUSTOM_STATS`" msgstr ":envvar:`ANSIBLE_SHOW_CUSTOM_STATS`" #: ../../rst/reference_appendices/config.rst:2849 msgid "STRING_CONVERSION_ACTION" msgstr "STRING_CONVERSION_ACTION" #: ../../rst/reference_appendices/config.rst:2851 msgid "Action to take when a module parameter value is converted to a string (this does not affect variables). For string parameters, values such as '1.00', \"['a', 'b',]\", and 'yes', 'y', etc. will be converted by the YAML parser unless fully quoted. Valid options are 'error', 'warn', and 'ignore'. Since 2.8, this option defaults to 'warn' but will change to 'error' in 2.12." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼å€¤ãŒæ–‡å­—列ã«å¤‰æ›ã•れるã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ (ã“れã¯å¤‰æ•°ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“)。文字列パラメーターã®å ´åˆã€ã€Œ1.00ã€ã€ã€Œ['a', 'b',]ã€ã€ã€Œyesã€ã€ã€Œyã€ãªã©ã®å€¤ã¯ã€å®Œå…¨ã«å¼•用ã•れã¦ã„ãªã„é™ã‚Šã€YAML パーサーã«ã‚ˆã‚Šå¤‰æ›ã•れã¾ã™ã€‚有効ãªã‚ªãƒ—ションã¯ã€ã€Œerrorã€ã€ã€Œwarnã€ã€ãŠã‚ˆã³ã€Œignoreã€ã§ã™ã€‚2.8 以é™ã€ã“ã®ã‚ªãƒ—ションã®ãƒ‡ãƒ•ォルトã¯ã€Œwarnã€ã§ã™ãŒã€2.12ã§ã¯ã€Œerrorã€ã«å¤‰æ›´ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2857 msgid "string_conversion_action" msgstr "string_conversion_action" #: ../../rst/reference_appendices/config.rst:2859 msgid ":envvar:`ANSIBLE_STRING_CONVERSION_ACTION`" msgstr ":envvar:`ANSIBLE_STRING_CONVERSION_ACTION`" #: ../../rst/reference_appendices/config.rst:2864 msgid "STRING_TYPE_FILTERS" msgstr "STRING_TYPE_FILTERS" #: ../../rst/reference_appendices/config.rst:2866 msgid "This list of filters avoids 'type conversion' when templating variables Useful when you want to avoid conversion into lists or dictionaries for JSON strings, for example." msgstr "ã“ã®ãƒ•ィルターã®ãƒªã‚¹ãƒˆã¯ã€å¤‰æ•°ã‚’テンプレート化ã™ã‚‹ã¨ãã«ã€Œåž‹å¤‰æ›ã€ã‚’回é¿ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€JSON 文字列ã®ãƒªã‚¹ãƒˆã‚„ディレクトリーã¸ã®å¤‰æ›ã‚’回é¿ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2868 msgid "``['string', 'to_json', 'to_nice_json', 'to_yaml', 'to_nice_yaml', 'ppretty', 'json']``" msgstr "``['string', 'to_json', 'to_nice_json', 'to_yaml', 'to_nice_yaml', 'ppretty', 'json']``" #: ../../rst/reference_appendices/config.rst:2870 msgid "[jinja2]" msgstr "[jinja2]" #: ../../rst/reference_appendices/config.rst:2871 msgid "dont_type_filters" msgstr "dont_type_filters" #: ../../rst/reference_appendices/config.rst:2873 msgid ":envvar:`ANSIBLE_STRING_TYPE_FILTERS`" msgstr ":envvar:`ANSIBLE_STRING_TYPE_FILTERS`" #: ../../rst/reference_appendices/config.rst:2878 msgid "SYSTEM_WARNINGS" msgstr "SYSTEM_WARNINGS" #: ../../rst/reference_appendices/config.rst:2880 msgid "Allows disabling of warnings related to potential issues on the system running ansible itself (not on the managed hosts) These may include warnings about 3rd party packages or other conditions that should be resolved if possible." msgstr "Ansible 自体を実行ã—ã¦ã„ã‚‹ (管ç†å¯¾è±¡ãƒ›ã‚¹ãƒˆã§ã¯ãªã„) ã‚·ã‚¹ãƒ†ãƒ ã®æ½œåœ¨çš„ãªå•題ã«é–¢é€£ã™ã‚‹è­¦å‘Šã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã¯ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティーã®ãƒ‘ッケージã«é–¢ã™ã‚‹è­¦å‘Šã‚„ã€å¯èƒ½ã§ã‚れã°è§£æ±ºã™ã‚‹å¿…è¦ã®ã‚ã‚‹ãã®ä»–ã®æ¡ä»¶ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2885 msgid "system_warnings" msgstr "system_warnings" #: ../../rst/reference_appendices/config.rst:2887 msgid ":envvar:`ANSIBLE_SYSTEM_WARNINGS`" msgstr ":envvar:`ANSIBLE_SYSTEM_WARNINGS`" #: ../../rst/reference_appendices/config.rst:2892 msgid "TAGS_RUN" msgstr "TAGS_RUN" #: ../../rst/reference_appendices/config.rst:2894 #: ../../rst/reference_appendices/config.rst:4521 msgid "default list of tags to run in your plays, Skip Tags has precedence." msgstr "プレイã§å®Ÿè¡Œã™ã‚‹ã‚¿ã‚°ã®ãƒ‡ãƒ•ォルト一覧。Skip Tags ãŒå„ªå…ˆã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2899 #: ../../rst/reference_appendices/config.rst:2914 msgid "[tags]" msgstr "[tags]" #: ../../rst/reference_appendices/config.rst:2900 msgid "run" msgstr "run" #: ../../rst/reference_appendices/config.rst:2902 msgid ":envvar:`ANSIBLE_RUN_TAGS`" msgstr ":envvar:`ANSIBLE_RUN_TAGS`" #: ../../rst/reference_appendices/config.rst:2907 msgid "TAGS_SKIP" msgstr "TAGS_SKIP" #: ../../rst/reference_appendices/config.rst:2909 #: ../../rst/reference_appendices/config.rst:4529 msgid "default list of tags to skip in your plays, has precedence over Run Tags" msgstr "プレイã§ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã‚¿ã‚°ã®ãƒ‡ãƒ•ォルト一覧㯠Run Tags よりも優先ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2917 msgid ":envvar:`ANSIBLE_SKIP_TAGS`" msgstr ":envvar:`ANSIBLE_SKIP_TAGS`" #: ../../rst/reference_appendices/config.rst:2922 msgid "TASK_DEBUGGER_IGNORE_ERRORS" msgstr "TASK_DEBUGGER_IGNORE_ERRORS" #: ../../rst/reference_appendices/config.rst:2924 msgid "This option defines whether the task debugger will be invoked on a failed task when ignore_errors=True is specified. True specifies that the debugger will honor ignore_errors, False will not honor ignore_errors." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€ignore_errors=True ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«ã€å¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯ã§ã‚¿ã‚¹ã‚¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒå‘¼ã³å‡ºã•れるã‹ã©ã†ã‹ã‚’定義ã—ã¾ã™ã€‚True ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒ ignore_errors を許å¯ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã€False ã«è¨­å®šã™ã‚‹ã¨ ignore_errors ãŒç„¡åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2930 msgid "task_debugger_ignore_errors" msgstr "task_debugger_ignore_errors" #: ../../rst/reference_appendices/config.rst:2932 msgid ":envvar:`ANSIBLE_TASK_DEBUGGER_IGNORE_ERRORS`" msgstr ":envvar:`ANSIBLE_TASK_DEBUGGER_IGNORE_ERRORS`" #: ../../rst/reference_appendices/config.rst:2937 msgid "TASK_TIMEOUT" msgstr "TASK_TIMEOUT" #: ../../rst/reference_appendices/config.rst:2939 msgid "Set the maximum time (in seconds) that a task can run for. If set to 0 (the default) there is no timeout." msgstr "タスクを実行ã§ãる最大時間 (ç§’å˜ä½) を設定ã—ã¾ã™ã€‚0 (デフォルト) ã«è¨­å®šã™ã‚‹ã¨ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:2945 msgid "task_timeout" msgstr "task_timeout" #: ../../rst/reference_appendices/config.rst:2947 msgid ":envvar:`ANSIBLE_TASK_TIMEOUT`" msgstr ":envvar:`ANSIBLE_TASK_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:2952 msgid "TRANSFORM_INVALID_GROUP_CHARS" msgstr "TRANSFORM_INVALID_GROUP_CHARS" #: ../../rst/reference_appendices/config.rst:2954 msgid "Make ansible transform invalid characters in group names supplied by inventory sources. If 'never' it will allow for the group name but warn about the issue. When 'ignore', it does the same as 'never', without issuing a warning. When 'always' it will replace any invalid characters with '_' (underscore) and warn the user When 'silently', it does the same as 'always', without issuing a warning." msgstr "インベントリーソースã‹ã‚‰æä¾›ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—åã®ç„¡åŠ¹ãªæ–‡å­—ã‚’ Ansible ãŒå¤‰æ›ã—ã¾ã™ã€‚「neverã€ã®å ´åˆã€ã‚°ãƒ«ãƒ¼ãƒ—åã¯è¨±å¯ã•れã¾ã™ãŒã€å•題ã«ã¤ã„ã¦è­¦å‘Šã•れã¾ã™ã€‚「ignoreã€ã®å ´åˆã¯ã€è­¦å‘Šã‚’出力ã›ãšã«ã€Œneverã€ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚「alwaysã€ã®å ´åˆã¯ã€ç„¡åŠ¹ãªæ–‡å­—を「_ã€(アンダースコア) ã«ç½®ãæ›ãˆã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘Šã—ã¾ã™ã€‚「silentlyã€ã®å ´åˆã¯ã€è­¦å‘Šã‚’発行ã›ãšã«ã€Œalwaysã€ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2956 msgid "``never``" msgstr "``never``" #: ../../rst/reference_appendices/config.rst msgid "never" msgstr "never" #: ../../rst/reference_appendices/config.rst msgid "silently" msgstr "silently" #: ../../rst/reference_appendices/config.rst:2965 msgid "force_valid_group_names" msgstr "force_valid_group_names" #: ../../rst/reference_appendices/config.rst:2967 msgid ":envvar:`ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS`" msgstr ":envvar:`ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS`" #: ../../rst/reference_appendices/config.rst:2972 msgid "USE_PERSISTENT_CONNECTIONS" msgstr "USE_PERSISTENT_CONNECTIONS" #: ../../rst/reference_appendices/config.rst:2974 #: ../../rst/reference_appendices/config.rst:4561 msgid "Toggles the use of persistence for connections." msgstr "接続ã«å¯¾ã—ã¦æ°¸ç¶šæ€§ã®ä½¿ç”¨ã‚’切り替ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2979 msgid "use_persistent_connections" msgstr "use_persistent_connections" #: ../../rst/reference_appendices/config.rst:2981 msgid ":envvar:`ANSIBLE_USE_PERSISTENT_CONNECTIONS`" msgstr ":envvar:`ANSIBLE_USE_PERSISTENT_CONNECTIONS`" #: ../../rst/reference_appendices/config.rst:2986 msgid "VALIDATE_ACTION_GROUP_METADATA" msgstr "VALIDATE_ACTION_GROUP_METADATA" #: ../../rst/reference_appendices/config.rst:2988 #: ../../rst/reference_appendices/config.rst:4617 msgid "A toggle to disable validating a collection's 'metadata' entry for a module_defaults action group. Metadata containing unexpected fields or value types will produce a warning when this is True." msgstr "module_defaults アクショングループã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œmetadataã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®æ¤œè¨¼ã‚’無効ã«ã™ã‚‹åˆ‡ã‚Šæ›¿ãˆã§ã™ã€‚予期ã—ãªã„フィールドã¾ãŸã¯å€¤ã‚¿ã‚¤ãƒ—ã‚’å«ã‚€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚‹ã¨ã€True ã®å ´åˆã«è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:2994 msgid "validate_action_group_metadata" msgstr "validate_action_group_metadata" #: ../../rst/reference_appendices/config.rst:2996 msgid ":envvar:`ANSIBLE_VALIDATE_ACTION_GROUP_METADATA`" msgstr ":envvar:`ANSIBLE_VALIDATE_ACTION_GROUP_METADATA`" #: ../../rst/reference_appendices/config.rst:3001 msgid "VARIABLE_PLUGINS_ENABLED" msgstr "VARIABLE_PLUGINS_ENABLED" #: ../../rst/reference_appendices/config.rst:3003 #: ../../rst/reference_appendices/config.rst:4569 msgid "Whitelist for variable plugins that require it." msgstr "å¿…è¦ã«ãªã‚‹ vars プラグインã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3005 msgid "``['host_group_vars']``" msgstr "``['host_group_vars']``" #: ../../rst/reference_appendices/config.rst:3009 msgid "vars_plugins_enabled" msgstr "vars_plugins_enabled" #: ../../rst/reference_appendices/config.rst:3011 msgid ":envvar:`ANSIBLE_VARS_ENABLED`" msgstr ":envvar:`ANSIBLE_VARS_ENABLED`" #: ../../rst/reference_appendices/config.rst:3016 msgid "VARIABLE_PRECEDENCE" msgstr "VARIABLE_PRECEDENCE" #: ../../rst/reference_appendices/config.rst:3018 #: ../../rst/reference_appendices/config.rst:4577 msgid "Allows to change the group variable precedence merge order." msgstr "グループ変数ã®å„ªå…ˆé †ä½ã®ãƒžãƒ¼ã‚¸é †åºã‚’変更ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3020 msgid "``['all_inventory', 'groups_inventory', 'all_plugins_inventory', 'all_plugins_play', 'groups_plugins_inventory', 'groups_plugins_play']``" msgstr "``['all_inventory', 'groups_inventory', 'all_plugins_inventory', 'all_plugins_play', 'groups_plugins_inventory', 'groups_plugins_play']``" #: ../../rst/reference_appendices/config.rst:3024 msgid "precedence" msgstr "precedence" #: ../../rst/reference_appendices/config.rst:3026 msgid ":envvar:`ANSIBLE_PRECEDENCE`" msgstr ":envvar:`ANSIBLE_PRECEDENCE`" #: ../../rst/reference_appendices/config.rst:3031 msgid "VERBOSE_TO_STDERR" msgstr "VERBOSE_TO_STDERR" #: ../../rst/reference_appendices/config.rst:3033 #: ../../rst/reference_appendices/config.rst:4625 msgid "Force 'verbose' option to use stderr instead of stdout" msgstr "stdout ã®ä»£ã‚りã«ã€Œverboseã€ã‚ªãƒ—ションを強制的ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3039 msgid "verbose_to_stderr" msgstr "verbose_to_stderr" #: ../../rst/reference_appendices/config.rst:3041 msgid ":envvar:`ANSIBLE_VERBOSE_TO_STDERR`" msgstr ":envvar:`ANSIBLE_VERBOSE_TO_STDERR`" #: ../../rst/reference_appendices/config.rst:3046 msgid "WIN_ASYNC_STARTUP_TIMEOUT" msgstr "WIN_ASYNC_STARTUP_TIMEOUT" #: ../../rst/reference_appendices/config.rst:3048 msgid "For asynchronous tasks in Ansible (covered in Asynchronous Actions and Polling), this is how long, in seconds, to wait for the task spawned by Ansible to connect back to the named pipe used on Windows systems. The default is 5 seconds. This can be too low on slower systems, or systems under heavy load. This is not the total time an async command can run for, but is a separate timeout to wait for an async command to start. The task will only start to be timed against its async_timeout once it has connected to the pipe, so the overall maximum duration the task can take will be extended by the amount specified here." msgstr "Ansible ã®éžåŒæœŸã‚¿ã‚¹ã‚¯ (「éžåŒæœŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ãƒãƒ¼ãƒªãƒ³ã‚°ã€ã§èª¬æ˜Ž) ã®å ´åˆã€ã“れã¯ã€Ansible ãŒç”Ÿæˆã™ã‚‹ã‚¿ã‚¹ã‚¯ãŒ Windows システムã§ä½¿ç”¨ã•れるåå‰ä»˜ããƒ‘ã‚¤ãƒ—ã«æŽ¥ç¶šã™ã‚‹ã®ã‚’待機ã™ã‚‹æ™‚é–“ (ç§’å˜ä½) ã§ã™ã€‚デフォルト㯠5 ç§’ã§ã™ã€‚ã“れã¯ã€ä½Žé€Ÿã®ã‚·ã‚¹ãƒ†ãƒ ã‚„高負è·ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ä½Žã™ãŽã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€éžåŒæœŸã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã‚‹åˆè¨ˆæ™‚é–“ã§ã¯ã‚りã¾ã›ã‚“ãŒã€éžåŒæœŸã‚³ãƒžãƒ³ãƒ‰ã®é–‹å§‹ã‚’待機ã™ã‚‹åˆ¥ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã§ã™ã€‚タスクã¯ã€ãƒ‘ã‚¤ãƒ—ã«æŽ¥ç¶šã•れãŸå¾Œã«ã®ã¿ async_timeout ã«å¯¾ã—ã¦ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒé–‹å§‹ã™ã‚‹ãŸã‚ã€ã‚¿ã‚¹ã‚¯ã®å…¨ä½“çš„ãªæœ€å¤§æœŸé–“ã¯ã€ã“ã“ã§æŒ‡å®šã•れãŸåˆ†ã ã‘å»¶é•·ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3054 msgid "win_async_startup_timeout" msgstr "win_async_startup_timeout" #: ../../rst/reference_appendices/config.rst:3056 msgid ":envvar:`ANSIBLE_WIN_ASYNC_STARTUP_TIMEOUT`" msgstr ":envvar:`ANSIBLE_WIN_ASYNC_STARTUP_TIMEOUT`" #: ../../rst/reference_appendices/config.rst:3058 msgid "`ansible_win_async_startup_timeout`" msgstr "`ansible_win_async_startup_timeout`" #: ../../rst/reference_appendices/config.rst:3063 msgid "WORKER_SHUTDOWN_POLL_COUNT" msgstr "WORKER_SHUTDOWN_POLL_COUNT" #: ../../rst/reference_appendices/config.rst:3065 msgid "The maximum number of times to check Task Queue Manager worker processes to verify they have exited cleanly. After this limit is reached any worker processes still running will be terminated. This is for internal use only." msgstr "Task Queue Manager ワーカープロセスをãƒã‚§ãƒƒã‚¯ã—ã¦ã€ãã‚Œã‚‰ãŒæ­£å¸¸ã«çµ‚了ã—ãŸã“ã¨ã‚’確èªã™ã‚‹æœ€å¤§å›žæ•°ã€‚ã“ã®åˆ¶é™ã«é”ã™ã‚‹ã¨ã€ã¾ã å®Ÿè¡Œä¸­ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ—ロセスã¯ã™ã¹ã¦çµ‚了ã—ã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3070 msgid ":envvar:`ANSIBLE_WORKER_SHUTDOWN_POLL_COUNT`" msgstr ":envvar:`ANSIBLE_WORKER_SHUTDOWN_POLL_COUNT`" #: ../../rst/reference_appendices/config.rst:3075 msgid "WORKER_SHUTDOWN_POLL_DELAY" msgstr "WORKER_SHUTDOWN_POLL_DELAY" #: ../../rst/reference_appendices/config.rst:3077 msgid "The number of seconds to sleep between polling loops when checking Task Queue Manager worker processes to verify they have exited cleanly. This is for internal use only." msgstr "Task Queue Manager ワーカープロセスをãƒã‚§ãƒƒã‚¯ã—ã¦ã€ãã‚Œã‚‰ãŒæ­£å¸¸ã«çµ‚了ã—ãŸã“ã¨ã‚’確èªã™ã‚‹ã¨ãã«ã€ãƒãƒ¼ãƒªãƒ³ã‚°ãƒ«ãƒ¼ãƒ—é–“ã§ã‚¹ãƒªãƒ¼ãƒ—ã™ã‚‹ç§’数。ã“れã¯å†…部使用ã®ã¿ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3079 msgid "``0.1``" msgstr "``0.1``" #: ../../rst/reference_appendices/config.rst:3082 msgid ":envvar:`ANSIBLE_WORKER_SHUTDOWN_POLL_DELAY`" msgstr ":envvar:`ANSIBLE_WORKER_SHUTDOWN_POLL_DELAY`" #: ../../rst/reference_appendices/config.rst:3087 msgid "YAML_FILENAME_EXTENSIONS" msgstr "YAML_FILENAME_EXTENSIONS" #: ../../rst/reference_appendices/config.rst:3089 msgid "Check all of these extensions when looking for 'variable' files which should be YAML or JSON or vaulted versions of these. This affects vars_files, include_vars, inventory and vars plugins among others." msgstr "YAML ã¾ãŸã¯ JSONã€ã‚ã‚‹ã„ã¯ã“れら㮠Vault ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹å¿…è¦ãŒã‚る「変数ã€ãƒ•ァイルを探ã™ã¨ãã¯ã€ã“れらã™ã¹ã¦ã®æ‹¡å¼µå­ã‚’確èªã—ã¦ãã ã•ã„。ã“れã¯ã€vars_filesã€include_varsã€inventoryã€vars プラグインãªã©ã«å½±éŸ¿ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3091 msgid "``['.yml', '.yaml', '.json']``" msgstr "``['.yml', '.yaml', '.json']``" #: ../../rst/reference_appendices/config.rst:3094 msgid "yaml_valid_extensions" msgstr "yaml_valid_extensions" #: ../../rst/reference_appendices/config.rst:3096 msgid ":envvar:`ANSIBLE_YAML_FILENAME_EXT`" msgstr ":envvar:`ANSIBLE_YAML_FILENAME_EXT`" #: ../../rst/reference_appendices/config.rst:3100 msgid "Environment Variables" msgstr "環境変数" #: ../../rst/reference_appendices/config.rst:3105 msgid "Override the default ansible config file" msgstr "デフォルト㮠ansible config ファイルを上書ãã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3111 msgid "Specify where to look for the ansible-connection script. This location will be checked before searching $PATH.If null, ansible will start with the same directory as the ansible script." msgstr "ansible-connection スクリプトを探ã™å ´æ‰€ã‚’指定ã—ã¾ã™ã€‚ã“ã®å ´æ‰€ã¯ã€$PATH ã®æ¤œç´¢å‰ã«ãƒã‚§ãƒƒã‚¯ã•れã¾ã™ã€‚null ã«è¨­å®šã™ã‚‹ã¨ã€Ansible 㯠ansible スクリプトã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3113 msgid "See also :ref:`ANSIBLE_CONNECTION_PATH `" msgstr "「:ref:`ANSIBLE_CONNECTION_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3121 msgid "See also :ref:`ANSIBLE_COW_SELECTION `" msgstr "「:ref:`ANSIBLE_COW_SELECTION `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3129 #: ../../rst/reference_appendices/config.rst:3139 msgid "See also :ref:`ANSIBLE_COW_ACCEPTLIST `" msgstr "「:ref:`ANSIBLE_COW_ACCEPTLIST `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3148 msgid "See also :ref:`ANSIBLE_FORCE_COLOR `" msgstr "「:ref:`ANSIBLE_FORCE_COLOR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3156 #: ../../rst/reference_appendices/config.rst:3163 msgid "See also :ref:`ANSIBLE_NOCOLOR `" msgstr "「:ref:`ANSIBLE_NOCOLOR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3172 msgid "See also :ref:`ANSIBLE_NOCOWS `" msgstr "「:ref:`ANSIBLE_NOCOWS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3180 msgid "See also :ref:`ANSIBLE_COW_PATH `" msgstr "「:ref:`ANSIBLE_COW_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3186 msgid "Pipelining, if supported by the connection plugin, reduces the number of network operations required to execute a module on the remote server, by executing many Ansible modules without actual file transfer.This can result in a very significant performance improvement when enabled.However this conflicts with privilege escalation (become). For example, when using 'sudo:' operations you must first disable 'requiretty' in /etc/sudoers on all managed hosts, which is why it is disabled by default.This option is disabled if ``ANSIBLE_KEEP_REMOTE_FILES`` is enabled.This is a global option, each connection plugin can override either by having more specific options or not supporting pipelining at all." msgstr "パイプライン (connection プラグインã§ã‚µãƒãƒ¼ãƒˆã•れる場åˆ) ã¯ã€å®Ÿéš›ã®ãƒ•ァイル転é€ã‚’ã›ãšã«å¤šæ•°ã® Ansible モジュールを実行ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚µãƒ¼ãƒãƒ¼ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãŸã‚ã«å¿…è¦ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ“ä½œã®æ•°ã‚’減らã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æœ‰åйã«ã™ã‚‹ã¨ãƒ‘フォーマンスãŒå¤§å¹…ã«å‘上ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã ã—ã€ã“れã¯ç‰¹æ¨©æ˜‡æ ¼ (become) ã¨ç«¶åˆã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œsudo:ã€æ“作を使用ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ç®¡ç†å¯¾è±¡ãƒ›ã‚¹ãƒˆã® /etc/sudoers ã§ã€Œrequirettyã€ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れãŒã€ãƒ‡ãƒ•ォルトã§ç„¡åйã«ãªã£ã¦ã„ã‚‹ç†ç”±ã§ã™ã€‚``ANSIBLE_KEEP_REMOTE_FILES`` ãŒæœ‰åйãªå ´åˆã€ã“ã®ã‚ªãƒ—ションã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚ªãƒ—ションã§ã‚りã€å„ connection プラグインã¯ã€ã‚ˆã‚Šå…·ä½“çš„ãªã‚ªãƒ—ションを指定ã™ã‚‹ã‹ã€ãƒ‘イプをサãƒãƒ¼ãƒˆã—ãªã„ã‹ã®ã„ãšã‚Œã‹ã«ã‚ˆã‚Šã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3188 msgid "See also :ref:`ANSIBLE_PIPELINING `" msgstr "「:ref:`ANSIBLE_PIPELINING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3196 msgid "See also :ref:`ANY_ERRORS_FATAL `" msgstr "「:ref:`ANY_ERRORS_FATAL `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3202 msgid "This setting controls if become is skipped when remote user and become user are the same. I.E root sudo to root.If executable, it will be run and the resulting stdout will be used as the password." msgstr "ã“ã®è¨­å®šã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ become ユーザーãŒåŒã˜ã§ã‚ã‚‹å ´åˆã«ã€become をスキップã™ã‚‹ã‹ã©ã†ã‹ (root sudo ã‹ã‚‰ root) を制御ã—ã¾ã™ã€‚実行å¯èƒ½ãªå ´åˆã«ã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3204 msgid "See also :ref:`BECOME_ALLOW_SAME_USER `" msgstr "「:ref:`BECOME_ALLOW_SAME_USER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3210 msgid "The password file to use for the become plugin. --become-password-file.If executable, it will be run and the resulting stdout will be used as the password." msgstr "become プラグインã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワードファイル。--become-password-file。実行å¯èƒ½ã®å ´åˆã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3212 msgid "See also :ref:`BECOME_PASSWORD_FILE `" msgstr ":ref:`BECOME_PASSWORD_FILE ` ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3220 msgid "See also :ref:`AGNOSTIC_BECOME_PROMPT `" msgstr "「:ref:`AGNOSTIC_BECOME_PROMPT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3228 msgid "See also :ref:`CACHE_PLUGIN `" msgstr "「:ref:`CACHE_PLUGIN `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3236 msgid "See also :ref:`CACHE_PLUGIN_CONNECTION `" msgstr "「:ref:`CACHE_PLUGIN_CONNECTION `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3244 msgid "See also :ref:`CACHE_PLUGIN_PREFIX `" msgstr "「:ref:`CACHE_PLUGIN_PREFIX `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3252 msgid "See also :ref:`CACHE_PLUGIN_TIMEOUT `" msgstr "「:ref:`CACHE_PLUGIN_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3260 msgid "See also :ref:`COLLECTIONS_SCAN_SYS_PATH `" msgstr "「:ref:`COLLECTIONS_SCAN_SYS_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3269 #: ../../rst/reference_appendices/config.rst:3277 msgid "See also :ref:`COLLECTIONS_PATHS `" msgstr "「:ref:`COLLECTIONS_PATHS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3286 msgid "See also :ref:`COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH `" msgstr "「:ref:`COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3294 msgid "See also :ref:`COLOR_CHANGED `" msgstr "「:ref:`COLOR_CHANGED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3302 msgid "See also :ref:`COLOR_CONSOLE_PROMPT `" msgstr "「:ref:`COLOR_CONSOLE_PROMPT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3310 msgid "See also :ref:`COLOR_DEBUG `" msgstr "「:ref:`COLOR_DEBUG `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3318 msgid "See also :ref:`COLOR_DEPRECATE `" msgstr "「:ref:`COLOR_DEPRECATE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3326 msgid "See also :ref:`COLOR_DIFF_ADD `" msgstr "「:ref:`COLOR_DIFF_ADD `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3334 msgid "See also :ref:`COLOR_DIFF_LINES `" msgstr "「:ref:`COLOR_DIFF_LINES `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3342 msgid "See also :ref:`COLOR_DIFF_REMOVE `" msgstr "「:ref:`COLOR_DIFF_REMOVE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3350 msgid "See also :ref:`COLOR_ERROR `" msgstr "「:ref:`COLOR_ERROR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3358 msgid "See also :ref:`COLOR_HIGHLIGHT `" msgstr "「:ref:`COLOR_HIGHLIGHT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3366 msgid "See also :ref:`COLOR_OK `" msgstr "「:ref:`COLOR_OK `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3374 msgid "See also :ref:`COLOR_SKIP `" msgstr "「:ref:`COLOR_SKIP `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3382 msgid "See also :ref:`COLOR_UNREACHABLE `" msgstr "「:ref:`COLOR_UNREACHABLE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3390 msgid "See also :ref:`COLOR_VERBOSE `" msgstr "「:ref:`COLOR_VERBOSE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3398 msgid "See also :ref:`COLOR_WARN `" msgstr "「:ref:`COLOR_WARN `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3406 msgid "See also :ref:`CONNECTION_PASSWORD_FILE `" msgstr ":ref:`CONNECTION_PASSWORD_FILE ` ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3412 msgid "Sets the output directory on the remote host to generate coverage reports to.Currently only used for remote coverage on PowerShell modules.This is for internal use only." msgstr "リモートホストã®å‡ºåŠ›ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’è¨­å®šã—ã¦ã‚«ãƒãƒ¬ãƒƒã‚¸ãƒ¬ãƒãƒ¼ãƒˆã‚’生æˆã—ã¾ã™ã€‚ç¾åœ¨ PowerShell モジュールã®ãƒªãƒ¢ãƒ¼ãƒˆã‚«ãƒãƒ¬ãƒƒã‚¸ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3414 msgid "See also :ref:`COVERAGE_REMOTE_OUTPUT `" msgstr "「:ref:`COVERAGE_REMOTE_OUTPUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3420 msgid "A list of paths for files on the Ansible controller to run coverage for when executing on the remote host.Only files that match the path glob will have its coverage collected.Multiple path globs can be specified and are separated by ``:``.Currently only used for remote coverage on PowerShell modules.This is for internal use only." msgstr "リモートホストã§å®Ÿè¡Œã™ã‚‹ã¨ãã«ã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’実行ã™ã‚‹ Ansible コントローラー上ã®ãƒ•ァイルã®ãƒ‘スã®ãƒªã‚¹ãƒˆã€‚パスグロブã«ä¸€è‡´ã™ã‚‹ãƒ•ァイルã®ã¿ãŒã‚«ãƒãƒ¬ãƒƒã‚¸ã‚’åŽé›†ã—ã¾ã™ã€‚パスグロブã¯ã€``:`` ã§åŒºåˆ‡ã‚‹ã“ã¨ã§è¤‡æ•°æŒ‡å®šã§ãã¾ã™ã€‚ç¾åœ¨ PowerShell モジュールã®ãƒªãƒ¢ãƒ¼ãƒˆã‚«ãƒãƒ¬ãƒƒã‚¸ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3422 msgid "See also :ref:`COVERAGE_REMOTE_PATHS `" msgstr "「:ref:`COVERAGE_REMOTE_PATHS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3428 msgid "By default Ansible will issue a warning when received from a task action (module or action plugin)These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ (モジュールã¾ãŸã¯ action プラグイン) ã‹ã‚‰å—ã‘å–ã‚‹ã¨ã€è­¦å‘Šã‚’ False ã«èª¿æ•´ã™ã‚‹ã“ã¨ã§è­¦å‘Šã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3430 msgid "See also :ref:`ACTION_WARNINGS `" msgstr "「:ref:`ACTION_WARNINGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3436 msgid "Ansible can issue a warning when the shell or command module is used and the command appears to be similar to an existing Ansible module.These warnings can be silenced by adjusting this setting to False. You can also control this at the task level with the module option ``warn``.As of version 2.11, this is disabled by default." msgstr "Ansible ã¯ã€ã‚·ã‚§ãƒ«ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ç”¨ã•れã€ã‚³ãƒžãƒ³ãƒ‰ãŒæ—¢å­˜ã® Ansible モジュールã¨é¡žä¼¼ã—ã¦ã„るよã†ã«è¦‹ãˆã¾ã™ã€‚ã“れらã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€ã“れらã®è­¦å‘Šã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚ªãƒ—ション ``warn`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§åˆ¶å¾¡ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.11 ã®æ™‚点ã§ã€ã“れã¯ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3438 msgid "See also :ref:`COMMAND_WARNINGS `" msgstr "「:ref:`COMMAND_WARNINGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3444 msgid "By default Ansible will issue a warning when there are no hosts in the inventory.These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ãƒ›ã‚¹ãƒˆãŒãªã„å ´åˆã«è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ã“ã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã¨éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3446 msgid "See also :ref:`LOCALHOST_WARNING `" msgstr "「:ref:`LOCALHOST_WARNING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3454 msgid "See also :ref:`DOC_FRAGMENT_PLUGIN_PATH `" msgstr "「:ref:`DOC_FRAGMENT_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3462 msgid "See also :ref:`DEFAULT_ACTION_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_ACTION_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3471 msgid "See also :ref:`DEFAULT_ASK_PASS `" msgstr "「:ref:`DEFAULT_ASK_PASS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3479 msgid "See also :ref:`DEFAULT_ASK_VAULT_PASS `" msgstr "「:ref:`DEFAULT_ASK_VAULT_PASS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3487 msgid "See also :ref:`DEFAULT_BECOME `" msgstr "「:ref:`DEFAULT_BECOME `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3495 msgid "See also :ref:`DEFAULT_BECOME_ASK_PASS `" msgstr "「:ref:`DEFAULT_BECOME_ASK_PASS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3503 msgid "See also :ref:`DEFAULT_BECOME_METHOD `" msgstr "「:ref:`DEFAULT_BECOME_METHOD `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3511 msgid "See also :ref:`DEFAULT_BECOME_EXE `" msgstr "「:ref:`DEFAULT_BECOME_EXE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3519 msgid "See also :ref:`DEFAULT_BECOME_FLAGS `" msgstr "「:ref:`DEFAULT_BECOME_FLAGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3527 msgid "See also :ref:`BECOME_PLUGIN_PATH `" msgstr "「:ref:`BECOME_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3535 msgid "See also :ref:`DEFAULT_BECOME_USER `" msgstr "「:ref:`DEFAULT_BECOME_USER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3543 msgid "See also :ref:`DEFAULT_CACHE_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_CACHE_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3551 #: ../../rst/reference_appendices/config.rst:3561 msgid "See also :ref:`CALLABLE_ACCEPT_LIST `" msgstr "「:ref:`CALLABLE_ACCEPT_LIST `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3570 msgid "See also :ref:`DEFAULT_CALLBACK_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_CALLBACK_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3578 #: ../../rst/reference_appendices/config.rst:3588 msgid "See also :ref:`CALLBACKS_ENABLED `" msgstr "「:ref:`CALLBACKS_ENABLED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3597 msgid "See also :ref:`DEFAULT_CLICONF_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_CLICONF_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3605 msgid "See also :ref:`DEFAULT_CONNECTION_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_CONNECTION_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3613 msgid "See also :ref:`DEFAULT_DEBUG `" msgstr "「:ref:`DEFAULT_DEBUG `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3621 msgid "See also :ref:`DEFAULT_EXECUTABLE `" msgstr "「:ref:`DEFAULT_EXECUTABLE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3627 msgid "This option allows you to globally configure a custom path for 'local_facts' for the implied M(ansible.builtin.setup) task when using fact gathering.If not set, it will fallback to the default from the M(ansible.builtin.setup) module: ``/etc/ansible/facts.d``.This does **not** affect user defined tasks that use the M(ansible.builtin.setup) module." msgstr "ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã¨ã€ãƒ•ァクトåŽé›†ã‚’使用ã™ã‚‹ã¨ãã«ã€æš—黙㮠M(ansible.builtin.setup) タスクã®ã€Œlocal_factsã€ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ‘スをグローãƒãƒ«ã«è¨­å®šã§ãã¾ã™ã€‚設定ã•れã¦ã„ãªã„å ´åˆã¯ã€M(ansible.builtin.setup) モジュールã‹ã‚‰ãƒ‡ãƒ•ォルトã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ (``/etc/ansible/facts.d``)。ã“れã¯ã€M(ansible.builtin.setup) モジュールを使用ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ã‚¿ã‚¹ã‚¯ã«ã¯ **影響ã—ã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:3629 msgid "See also :ref:`DEFAULT_FACT_PATH `" msgstr "「:ref:`DEFAULT_FACT_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3637 msgid "See also :ref:`DEFAULT_FILTER_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_FILTER_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3643 msgid "This option controls if notified handlers run on a host even if a failure occurs on that host.When false, the handlers will not run if a failure has occurred on a host.This can also be set per play or on the command line. See Handlers and Failure for more details." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ›ã‚¹ãƒˆã§éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã§ã‚‚ã€é€šçŸ¥ã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚false ã«ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã§éšœå®³ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯å®Ÿè¡Œã•れã¾ã›ã‚“。ã“れã¯ã€ãƒ—レイã”ã¨ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã€Œãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŠã‚ˆã³å¤±æ•—ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3645 msgid "See also :ref:`DEFAULT_FORCE_HANDLERS `" msgstr "「:ref:`DEFAULT_FORCE_HANDLERS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3653 msgid "See also :ref:`DEFAULT_FORKS `" msgstr "「:ref:`DEFAULT_FORKS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3659 msgid "This setting controls the default policy of fact gathering (facts discovered about remote systems).When 'implicit' (the default), the cache plugin will be ignored and facts will be gathered per play unless 'gather_facts: False' is set.When 'explicit' the inverse is true, facts will not be gathered unless directly requested in the play.The 'smart' value means each new host that has no facts discovered will be scanned, but if the same host is addressed in multiple plays it will not be contacted again in the playbook run.This option can be useful for those wishing to save fact gathering time. Both 'smart' and 'explicit' will use the cache plugin." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ•ァクトåŽé›† (リモートシステムã«é–¢ã—ã¦æ¤œå‡ºã•れãŸãƒ•ァクト) ã®ãƒ‡ãƒ•ォルトãƒãƒªã‚·ãƒ¼ã‚’制御ã—ã¾ã™ã€‚「implicitã€(デフォルト) ã®å ´åˆã€cache プラグインã¯ç„¡è¦–ã•れã€ã€Œgather_facts: Falseã€ãŒè¨­å®šã•れã¦ã„ãªã„é™ã‚Šã€ãƒ—レイã”ã¨ã«ãƒ•ァクトãŒåŽé›†ã•れã¾ã™ã€‚「explicitã€ã®å ´åˆã¯ãã®é€†ã§ã€ãƒ—レイ中ã«ç›´æŽ¥è¦æ±‚ã•れãªã„é™ã‚Šã€ãƒ•ァクトã¯åŽé›†ã•れã¾ã›ã‚“。「smartã€ã®å€¤ã¯ã€æ¤œå‡ºã•れãŸãƒ•ァクトをæŒãŸãªã„儿–°è¦ãƒ›ã‚¹ãƒˆãŒã‚¹ã‚­ãƒ£ãƒ³ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ãŒã€åŒã˜ãƒ›ã‚¹ãƒˆãŒè¤‡æ•°ã®ãƒ—ãƒ¬ã‚¤ã§æ‰±ã‚れãŸå ´åˆã¯ã€Playbook ã®å®Ÿè¡Œä¸­ã«å†ã³æŽ¥è§¦ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ•ァクトåŽé›†ã®æ™‚間を短縮ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚「smartã€ã¨ã€Œexplicitã€ã®ä¸¡æ–¹ã¨ã‚‚ã€cache プラグインを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3661 msgid "See also :ref:`DEFAULT_GATHERING `" msgstr "「:ref:`DEFAULT_GATHERING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3667 msgid "Set the `gather_subset` option for the M(ansible.builtin.setup) task in the implicit fact gathering. See the module documentation for specifics.It does **not** apply to user defined M(ansible.builtin.setup) tasks." msgstr "暗黙的ãªãƒ•ァクトåŽé›†ã® M(ansible.builtin.setup) タスク㫠`gather_subset` オプションを設定ã—ã¾ã™ã€‚詳細ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。ユーザー定義㮠M(ansible.builtin.setup) タスクã«ã¯ **é©ç”¨ã•れã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:3669 msgid "See also :ref:`DEFAULT_GATHER_SUBSET `" msgstr "「:ref:`DEFAULT_GATHER_SUBSET `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3675 msgid "Set the timeout in seconds for the implicit fact gathering.It does **not** apply to user defined M(ansible.builtin.setup) tasks." msgstr "暗黙的ãªãƒ•ァクトåŽé›†ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’ç§’å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚ユーザー定義㮠M(ansible.builtin.setup) タスクã«ã¯ **é©ç”¨ã•れã¾ã›ã‚“**。" #: ../../rst/reference_appendices/config.rst:3677 msgid "See also :ref:`DEFAULT_GATHER_TIMEOUT `" msgstr "「:ref:`DEFAULT_GATHER_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3683 msgid "This setting controls how duplicate definitions of dictionary variables (aka hash, map, associative array) are handled in Ansible.This does not affect variables whose values are scalars (integers, strings) or arrays.**WARNING**, changing this setting is not recommended as this is fragile and makes your content (plays, roles, collections) non portable, leading to continual confusion and misuse. Don't change this setting unless you think you have an absolute need for it.We recommend avoiding reusing variable names and relying on the ``combine`` filter and ``vars`` and ``varnames`` lookups to create merged versions of the individual variables. In our experience this is rarely really needed and a sign that too much complexity has been introduced into the data structures and plays.For some uses you can also look into custom vars_plugins to merge on input, even substituting the default ``host_group_vars`` that is in charge of parsing the ``host_vars/`` and ``group_vars/`` directories. Most users of this setting are only interested in inventory scope, but the setting itself affects all sources and makes debugging even harder.All playbooks and roles in the official examples repos assume the default for this setting.Changing the setting to ``merge`` applies across variable sources, but many sources will internally still overwrite the variables. For example ``include_vars`` will dedupe variables internally before updating Ansible, with 'last defined' overwriting previous definitions in same file.The Ansible project recommends you **avoid ``merge`` for new projects.**It is the intention of the Ansible developers to eventually deprecate and remove this setting, but it is being kept as some users do heavily rely on it. New projects should **avoid 'merge'**." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å¤‰æ•° (別åãƒãƒƒã‚·ãƒ¥ã€ãƒžãƒƒãƒ—ã€é€£æƒ³é…列) ã®é‡è¤‡ã—ãŸå®šç¾©ã‚’ Ansible ã§ã©ã®ã‚ˆã†ã«æ‰±ã†ã‹ã‚’制御ã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€å€¤ãŒã‚¹ã‚«ãƒ©ãƒ¼ (æ•´æ•°ã€æ–‡å­—列) ã‚„é…列ã§ã‚る変数ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。**警告** ã“れã¯è„†å¼±ã§ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ (プレイã€ãƒ­ãƒ¼ãƒ«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³) ãŒç§»æ¤ã§ããªããªã‚Šã€ç¶™ç¶šçš„ãªæ··ä¹±ã¨èª¤ç”¨ã‚’æ‹›ãæã‚ŒãŒã‚ã‚‹ãŸã‚ã€ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。絶対ã«å¿…è¦ã§ã‚ã‚‹ã¨æ€ã‚れる場åˆã‚’除ãã€ã“ã®è¨­å®šã‚’変更ã—ãªã„ã§ãã ã•ã„。変数åã®å†åˆ©ç”¨ã¯é¿ã‘ã€``combine`` フィルター㨠``vars`` ルックアップãŠã‚ˆã³ ``varnames`` ルックアップを利用ã—ã¦ã€å€‹ã€…ã®å¤‰æ•°ã®ãƒžãƒ¼ã‚¸ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚経験上ã€ã“ã®ã‚ˆã†ãªã“ã¨ãŒæœ¬å½“ã«å¿…è¦ã¨ã•れるã“ã¨ã¯ã»ã¨ã‚“ã©ãªãã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚„プレイãŒè¤‡é›‘ã«ãªã‚Šã™ãŽã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚用途ã«ã‚ˆã£ã¦ã¯ã€å…¥åŠ›æ™‚ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã‚«ã‚¹ã‚¿ãƒ  vars_plugins を検討ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€``host_vars/`` ディレクトリーãŠã‚ˆã³ ``group_vars/`` ディレクトリーã®è§£æžã‚’担当ã™ã‚‹ãƒ‡ãƒ•ォルト㮠``host_group_vars`` ã‚’ç½®ãæ›ãˆã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã‚’使用ã™ã‚‹ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚³ãƒ¼ãƒ—ã«ã—ã‹èˆˆå‘³ãŒã‚りã¾ã›ã‚“ãŒã€ã“ã®è¨­å®šè‡ªä½“ãŒã™ã¹ã¦ã®ã‚½ãƒ¼ã‚¹ã«å½±éŸ¿ã—ã€ãƒ‡ãƒãƒƒã‚°ã‚’ã•らã«å›°é›£ã«ã—ã¾ã™ã€‚å…¬å¼ã®ã‚µãƒ³ãƒ—ルリãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã¯ã™ã¹ã¦ã€ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルトを想定ã—ã¦ã„ã¾ã™ã€‚``merge`` ã«è¨­å®šã‚’変更ã™ã‚‹ã¨ã€å¤‰æ•°ã‚½ãƒ¼ã‚¹å…¨ä½“ã«é©ç”¨ã•れã¾ã™ãŒã€å¤šãã®ã‚½ãƒ¼ã‚¹ã§ã¯å†…部的ã«å¤‰æ•°ãŒä¸Šæ›¸ãã•れãŸã¾ã¾ã«ãªã‚Šã¾ã™ã€‚ãŸã¨ãˆã°ã€``include_vars`` ã¯ã€Ansible ã‚’æ›´æ–°ã™ã‚‹å‰ã«å†…部ã§å¤‰æ•°ã®é‡è¤‡ã‚’排除ã—ã€ã€Œæœ€çµ‚定義ã€ãŒåŒã˜ãƒ•ァイルã®ä»¥å‰ã®å®šç¾©ã‚’上書ãã—ã¾ã™ã€‚Ansible プロジェクトã§ã¯ã€**æ–°è¦ãƒ—ロジェクトã§ã¯** ``merge`` **を回é¿ã™ã‚‹** ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansible 開発者ã¯ã€æœ€çµ‚çš„ã«ã“ã®è¨­å®šã‚’éžæŽ¨å¥¨ã«ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ã‚’æ„図ã—ã¦ã„ã¾ã™ãŒã€ä¸€éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®è¨­å®šã«å¤§ããä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚ã€ã“ã®è¨­å®šã‚’残ã—ã¦ã„ã¾ã™ã€‚æ–°ã—ã„プロジェクトã§ã¯ã€**「mergeã€ã‚’回é¿** ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3685 msgid "See also :ref:`DEFAULT_HASH_BEHAVIOUR `" msgstr "「:ref:`DEFAULT_HASH_BEHAVIOUR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3693 msgid "See also :ref:`DEFAULT_HOST_LIST `" msgstr "「:ref:`DEFAULT_HOST_LIST `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3701 msgid "See also :ref:`DEFAULT_HTTPAPI_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_HTTPAPI_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3710 msgid "See also :ref:`DEFAULT_INVENTORY_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_INVENTORY_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3716 msgid "This is a developer-specific feature that allows enabling additional Jinja2 extensions.See the Jinja2 documentation for details. If you do not know what these do, you probably don't need to change this setting :)" msgstr "ã“れã¯ã€è¿½åŠ ã® Jinja2 拡張機能を有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹é–‹ç™ºè€…å›ºæœ‰ã®æ©Ÿèƒ½ã§ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€Jinja2 ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。ã“ã®æ‹¡å¼µæ©Ÿèƒ½ãŒä½•ã‚’ã™ã‚‹ã®ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€ãŠãらãã“ã®è¨­å®šã‚’変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:3718 msgid "See also :ref:`DEFAULT_JINJA2_EXTENSIONS `" msgstr "「:ref:`DEFAULT_JINJA2_EXTENSIONS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3726 msgid "See also :ref:`DEFAULT_JINJA2_NATIVE `" msgstr "「:ref:`DEFAULT_JINJA2_NATIVE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3732 msgid "Enables/disables the cleaning up of the temporary files Ansible used to execute the tasks on the remote.If this option is enabled it will disable ``ANSIBLE_PIPELINING``." msgstr "リモートã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã« Ansible ãŒä½¿ç”¨ã™ã‚‹ä¸€æ™‚ファイルã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—を有効ã¾ãŸã¯ç„¡åйã«ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€``ANSIBLE_PIPELINING`` を無効ã«ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3734 msgid "See also :ref:`DEFAULT_KEEP_REMOTE_FILES `" msgstr "「:ref:`DEFAULT_KEEP_REMOTE_FILES `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3742 #: ../../rst/reference_appendices/config.rst:3752 msgid "See also :ref:`DEFAULT_LIBVIRT_LXC_NOSECLABEL `" msgstr "「:ref:`DEFAULT_LIBVIRT_LXC_NOSECLABEL `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3760 msgid "See also :ref:`DEFAULT_LOAD_CALLBACK_PLUGINS `" msgstr "「:ref:`DEFAULT_LOAD_CALLBACK_PLUGINS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3768 msgid "See also :ref:`DEFAULT_LOCAL_TMP `" msgstr "「:ref:`DEFAULT_LOCAL_TMP `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3776 msgid "See also :ref:`DEFAULT_LOG_PATH `" msgstr "「:ref:`DEFAULT_LOG_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3784 msgid "See also :ref:`DEFAULT_LOG_FILTER `" msgstr "「:ref:`DEFAULT_LOG_FILTER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3792 msgid "See also :ref:`DEFAULT_LOOKUP_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_LOOKUP_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3801 msgid "See also :ref:`DEFAULT_MODULE_ARGS `" msgstr "「:ref:`DEFAULT_MODULE_ARGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3811 msgid "See also :ref:`DEFAULT_MODULE_PATH `" msgstr "「:ref:`DEFAULT_MODULE_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3819 msgid "See also :ref:`DEFAULT_MODULE_UTILS_PATH `" msgstr "「:ref:`DEFAULT_MODULE_UTILS_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3827 msgid "See also :ref:`DEFAULT_NETCONF_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_NETCONF_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3835 msgid "See also :ref:`DEFAULT_NO_LOG `" msgstr "「:ref:`DEFAULT_NO_LOG `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3843 msgid "See also :ref:`DEFAULT_NO_TARGET_SYSLOG `" msgstr "「:ref:`DEFAULT_NO_TARGET_SYSLOG `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3851 msgid "See also :ref:`DEFAULT_NULL_REPRESENTATION `" msgstr "「:ref:`DEFAULT_NULL_REPRESENTATION `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3859 msgid "See also :ref:`DEFAULT_POLL_INTERVAL `" msgstr "「:ref:`DEFAULT_POLL_INTERVAL `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3867 msgid "See also :ref:`DEFAULT_PRIVATE_KEY_FILE `" msgstr "「:ref:`DEFAULT_PRIVATE_KEY_FILE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3873 msgid "Makes role variables inaccessible from other roles.This was introduced as a way to reset role variables to default values if a role is used more than once in a playbook." msgstr "ロール変数ãŒä»–ã®ãƒ­ãƒ¼ãƒ«ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„よã†ã«ã—ã¾ã™ã€‚ã“れã¯ã€Playbook ã§ãƒ­ãƒ¼ãƒ«ãŒè¤‡æ•°å›žä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã«ã€ãƒ­ãƒ¼ãƒ«å¤‰æ•°ã‚’デフォルト値ã«ãƒªã‚»ãƒƒãƒˆã™ã‚‹æ–¹æ³•ã¨ã—ã¦å°Žå…¥ã•れã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/config.rst:3875 msgid "See also :ref:`DEFAULT_PRIVATE_ROLE_VARS `" msgstr "「:ref:`DEFAULT_PRIVATE_ROLE_VARS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3883 msgid "See also :ref:`DEFAULT_REMOTE_PORT `" msgstr "「:ref:`DEFAULT_REMOTE_PORT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3889 msgid "Sets the login user for the target machinesWhen blank it uses the connection plugin's default, normally the user currently executing Ansible." msgstr "ターゲットマシンã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’設定ã—ã¾ã™ã€‚空ã®å ´åˆã¯ã€connection プラグインã®ãƒ‡ãƒ•ォルト (通常ã¯ç¾åœ¨ Ansible を実行ã—ã¦ã„るユーザー) を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3891 msgid "See also :ref:`DEFAULT_REMOTE_USER `" msgstr "「:ref:`DEFAULT_REMOTE_USER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3899 msgid "See also :ref:`DEFAULT_ROLES_PATH `" msgstr "「:ref:`DEFAULT_ROLES_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3905 msgid "Some filesystems do not support safe operations and/or return inconsistent errors, this setting makes Ansible 'tolerate' those in the list w/o causing fatal errors.Data corruption may occur and writes are not always verified when a filesystem is in the list." msgstr "一部ã®ãƒ•ァイルシステムã¯å®‰å…¨ãªæ“作をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ã‹ã€ä¸€è²«æ€§ã®ãªã„エラーを返ã—ã¾ã™ã€‚ã“ã®è¨­å®šã«ã‚ˆã‚Šã€Ansible ã¯ãƒªã‚¹ãƒˆå†…ã®ã‚¨ãƒ©ãƒ¼ã‚’「許容ã€ã—ã€è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã‚’引ãèµ·ã“ã—ã¾ã›ã‚“。ファイルシステムãŒãƒªã‚¹ãƒˆã«å«ã¾ã‚Œã¦ã„ã‚‹ã¨ã€ãƒ‡ãƒ¼ã‚¿ãŒç ´æã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã€æ›¸ãè¾¼ã¿ãŒå¸¸ã«æ¤œè¨¼ã•れるã¨ã¯é™ã‚Šã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:3907 msgid "See also :ref:`DEFAULT_SELINUX_SPECIAL_FS `" msgstr "「:ref:`DEFAULT_SELINUX_SPECIAL_FS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3914 msgid "Set the main callback used to display Ansible output, you can only have one at a time.You can have many other callbacks, but just one can be in charge of stdout." msgstr "Ansible 出力ã®è¡¨ç¤ºã«ä½¿ç”¨ã•れるメインコールãƒãƒƒã‚¯ã‚’設定ã—ã¾ã™ã€‚一度㫠1 ã¤ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。他ã«ã‚‚多ãã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’設定ã§ãã¾ã™ãŒã€æ¨™æº–出力 (stdout) ã«ä½¿ç”¨ã§ãã‚‹ã®ã¯ 1 ã¤ã ã‘ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3916 msgid "See also :ref:`DEFAULT_STDOUT_CALLBACK `" msgstr "「:ref:`DEFAULT_STDOUT_CALLBACK `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3922 msgid "Whether or not to enable the task debugger, this previously was done as a strategy plugin.Now all strategy plugins can inherit this behavior. The debugger defaults to activating whena task is failed on unreachable. Use the debugger keyword for more flexibility." msgstr "タスクデãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹ã‹ã©ã†ã‹ã«ã‹ã‹ã‚らãšã€ã“れã¯ä»¥å‰ã¯ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ãƒ—ラグインã¨ã—ã¦å®Ÿè¡Œã•れã¦ã„ã¾ã—ãŸã€‚ã“れã§ã€ã™ã¹ã¦ã® strategy プラグインãŒã“ã®å‹•作を継承ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚デãƒãƒƒã‚¬ãƒ¼ã¯ã€ã‚¿ã‚¹ã‚¯ãŒåˆ°é”ä¸èƒ½ã§å¤±æ•—ã—ãŸã¨ãã«ãƒ‡ãƒ•ォルトã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚柔軟性を高ã‚ã‚‹ã«ã¯ã€debugger キーワードを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3924 msgid "See also :ref:`ENABLE_TASK_DEBUGGER `" msgstr "「:ref:`ENABLE_TASK_DEBUGGER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3930 msgid "This option defines whether the task debugger will be invoked on a failed task when ignore_errors=True is specified.True specifies that the debugger will honor ignore_errors, False will not honor ignore_errors." msgstr "ã“ã®ã‚ªãƒ—ションã¯ã€ignore_errors=True ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«ã€å¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯ã§ã‚¿ã‚¹ã‚¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒå‘¼ã³å‡ºã•れるã‹ã©ã†ã‹ã‚’定義ã—ã¾ã™ã€‚True ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒ ignore_errors を許å¯ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã€False ã«è¨­å®šã™ã‚‹ã¨ ignore_errors ãŒç„¡åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:3932 msgid "See also :ref:`TASK_DEBUGGER_IGNORE_ERRORS `" msgstr "「:ref:`TASK_DEBUGGER_IGNORE_ERRORS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3940 msgid "See also :ref:`DEFAULT_STRATEGY `" msgstr "「:ref:`DEFAULT_STRATEGY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3948 msgid "See also :ref:`DEFAULT_STRATEGY_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_STRATEGY_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3956 msgid "See also :ref:`DEFAULT_SU `" msgstr "「:ref:`DEFAULT_SU `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3964 msgid "See also :ref:`DEFAULT_SYSLOG_FACILITY `" msgstr "「:ref:`DEFAULT_SYSLOG_FACILITY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3972 msgid "See also :ref:`DEFAULT_TERMINAL_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_TERMINAL_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3980 msgid "See also :ref:`DEFAULT_TEST_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_TEST_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3988 msgid "See also :ref:`DEFAULT_TIMEOUT `" msgstr "「:ref:`DEFAULT_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:3996 msgid "See also :ref:`DEFAULT_TRANSPORT `" msgstr "「:ref:`DEFAULT_TRANSPORT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4002 msgid "When True, this causes ansible templating to fail steps that reference variable names that are likely typoed.Otherwise, any '{{ template_expression }}' that contains undefined variables will be rendered in a template or ansible action line exactly as written." msgstr "True ã«ã™ã‚‹ã¨ã€ã“れã«ã‚ˆã‚Šã€ã‚¿ã‚¤ãƒ—ミスã®å¯èƒ½æ€§ãŒé«˜ã„変数åã‚’å‚ç…§ã™ã‚‹ã‚¹ãƒ†ãƒƒãƒ—ãŒå¤±æ•—ã™ã‚‹ãƒ†ãƒ³ãƒ—レートãŒä½œæˆã•れã¾ã™ã€‚ãれ以外ã®å ´åˆã¯ã€æœªå®šç¾©ã®å¤‰æ•°ã‚’å«ã‚€ '{{ template_expression }}' ã¯ã€è¨˜è¿°ã•れãŸã¨ãŠã‚Šã«ãƒ†ãƒ³ãƒ—レートã¾ãŸã¯ Ansible ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³è¡Œã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4004 msgid "See also :ref:`DEFAULT_UNDEFINED_VAR_BEHAVIOR `" msgstr "「:ref:`DEFAULT_UNDEFINED_VAR_BEHAVIOR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4012 msgid "See also :ref:`DEFAULT_VARS_PLUGIN_PATH `" msgstr "「:ref:`DEFAULT_VARS_PLUGIN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4020 msgid "See also :ref:`DEFAULT_VAULT_ID_MATCH `" msgstr "「:ref:`DEFAULT_VAULT_ID_MATCH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4028 msgid "See also :ref:`DEFAULT_VAULT_IDENTITY `" msgstr "「:ref:`DEFAULT_VAULT_IDENTITY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4036 msgid "See also :ref:`DEFAULT_VAULT_ENCRYPT_IDENTITY `" msgstr "「:ref:`DEFAULT_VAULT_ENCRYPT_IDENTITY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4044 msgid "See also :ref:`DEFAULT_VAULT_IDENTITY_LIST `" msgstr "「:ref:`DEFAULT_VAULT_IDENTITY_LIST `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4050 msgid "The vault password file to use. Equivalent to --vault-password-file or --vault-idIf executable, it will be run and the resulting stdout will be used as the password." msgstr "使用ã™ã‚‹ Vault パスワードファイル。--vault-password-file ã¾ãŸã¯ --vault-id ã¨åŒç­‰ã§ã™ã€‚実行å¯èƒ½ãªå ´åˆã«ã¯ã€å®Ÿè¡Œã•れã¦ã€ç”Ÿæˆã•れる標準出力ãŒãƒ‘スワードã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4052 msgid "See also :ref:`DEFAULT_VAULT_PASSWORD_FILE `" msgstr "「:ref:`DEFAULT_VAULT_PASSWORD_FILE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4060 msgid "See also :ref:`DEFAULT_VERBOSITY `" msgstr "「:ref:`DEFAULT_VERBOSITY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4068 msgid "See also :ref:`DEPRECATION_WARNINGS `" msgstr "「:ref:`DEPRECATION_WARNINGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4076 msgid "See also :ref:`DEVEL_WARNING `" msgstr "「:ref:`DEVEL_WARNING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4084 msgid "See also :ref:`DIFF_ALWAYS `" msgstr "「:ref:`DIFF_ALWAYS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4092 msgid "See also :ref:`DIFF_CONTEXT `" msgstr "「:ref:`DIFF_CONTEXT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4098 msgid "Normally ``ansible-playbook`` will print a header for each task that is run. These headers will contain the name: field from the task if you specified one. If you didn't then ``ansible-playbook`` uses the task's action to help you tell which task is presently running. Sometimes you run many of the same action and so you want more information about the task to differentiate it from others of the same action. If you set this variable to True in the config then ``ansible-playbook`` will also include the task's arguments in the header.This setting defaults to False because there is a chance that you have sensitive values in your parameters and you do not want those to be printed.If you set this to True you should be sure that you have secured your environment's stdout (no one can shoulder surf your screen and you aren't saving stdout to an insecure file) or made sure that all of your playbooks explicitly added the ``no_log: True`` parameter to tasks which have sensitive values See How do I keep secret data in my playbook? for more information." msgstr "通常ã€``ansible-playbook`` ã¯ã€å®Ÿè¡Œã•れãŸå„タスクã®ãƒ˜ãƒƒãƒ€ãƒ¼ãŒå‡ºåŠ›ã•れã¾ã™ã€‚ã“れらã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«ã¯ã‚¿ã‚¹ã‚¯ã® name: ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒæŒ‡å®šã•れã¦ã„れã°ãれãŒå«ã¾ã‚Œã¾ã™ã€‚指定ã—ã¦ã„ãªã„å ´åˆã¯ã€``ansible-playbook`` ãŒã‚¿ã‚¹ã‚¯ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’使用ã—ã¦ã€ã©ã®ã‚¿ã‚¹ã‚¯ãŒç¾åœ¨å®Ÿè¡Œã•れã¦ã„ã‚‹ã‹ã‚’知るã“ã¨ãŒã§ãã¾ã™ã€‚多ãã®åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹å ´åˆã¯ã€åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã¨åŒºåˆ¥ã™ã‚‹ãŸã‚ã«ã€ã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚設定ã§ã“ã®å¤‰æ•°ã‚’ True ã«è¨­å®šã™ã‚‹ã¨ã€``ansible-playbook`` ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã®å¼•数もヘッダーã«å«ã¾ã‚Œã¾ã™ã€‚ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ©Ÿå¯†æ€§ã®é«˜ã„値ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã€ãれらを出力ã—ãªã„ãŸã‚ã€ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルト㯠False ã§ã™ã€‚ã“れを True ã«è¨­å®šã—ãŸå ´åˆã¯ã€ç’°å¢ƒã®æ¨™æº–出力 (誰もã‚ãªãŸã®ç”»é¢ã‚’è‚©è¶Šã—ã«ç›—ã¿è¦‹ã‚‹ã“ã¨ãŒã§ããšã€ã‚ãªãŸã¯æ¨™æº–出力を安全ã§ãªã„ファイルã«ä¿å­˜ã—ã¦ã„ã¾ã›ã‚“) を確実ã«ä¿è­·ã™ã‚‹ã‹ã€ã™ã¹ã¦ã® Playbook ã§æ©Ÿå¯†æ€§ã®é«˜ã„値をæŒã¤ã‚¿ã‚¹ã‚¯ã« ``no_log: True`` パラメーターを明示的ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€ã€ŒPlaybook ã«æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4100 msgid "See also :ref:`DISPLAY_ARGS_TO_STDOUT `" msgstr "「:ref:`DISPLAY_ARGS_TO_STDOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4108 #: ../../rst/reference_appendices/config.rst:4118 msgid "See also :ref:`DISPLAY_SKIPPED_HOSTS `" msgstr "「:ref:`DISPLAY_SKIPPED_HOSTS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4125 msgid "By default Ansible will issue a warning when a duplicate dict key is encountered in YAML.These warnings can be silenced by adjusting this setting to False." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€YAML ã§é‡è¤‡ã—㟠dict キーãŒç™ºç”Ÿã—ãŸå ´åˆã«è­¦å‘Šã‚’発行ã—ã¾ã™ã€‚ã“ã®è­¦å‘Šã¯ã€ã“ã®è¨­å®šã‚’ False ã«è¨­å®šã™ã‚‹ã¨éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4127 msgid "See also :ref:`DUPLICATE_YAML_DICT_KEY `" msgstr "「:ref:`DUPLICATE_YAML_DICT_KEY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4135 msgid "See also :ref:`ERROR_ON_MISSING_HANDLER `" msgstr "「:ref:`ERROR_ON_MISSING_HANDLER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4144 msgid "See also :ref:`FACTS_MODULES `" msgstr "「:ref:`FACTS_MODULES `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4152 msgid "See also :ref:`GALAXY_IGNORE_CERTS `" msgstr "「:ref:`GALAXY_IGNORE_CERTS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4160 msgid "See also :ref:`GALAXY_ROLE_SKELETON `" msgstr "「:ref:`GALAXY_ROLE_SKELETON `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4168 msgid "See also :ref:`GALAXY_ROLE_SKELETON_IGNORE `" msgstr "「:ref:`GALAXY_ROLE_SKELETON_IGNORE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4176 msgid "See also :ref:`GALAXY_SERVER `" msgstr "「:ref:`GALAXY_SERVER `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4182 msgid "A list of Galaxy servers to use when installing a collection.The value corresponds to the config ini header ``[galaxy_server.{{item}}]`` which defines the server details.See :ref:`galaxy_server_config` for more details on how to define a Galaxy server.The order of servers in this list is used to as the order in which a collection is resolved.Setting this config option will ignore the :ref:`galaxy_server` config option." msgstr "コレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ä½¿ç”¨ã™ã‚‹ Galaxy サーãƒãƒ¼ã®ä¸€è¦§ã€‚値ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®è©³ç´°ã‚’定義ã™ã‚‹ config ini ヘッダー ``[galaxy_server.{{item}}]`` ã«å¯¾å¿œã—ã¾ã™ã€‚Galaxy サーãƒãƒ¼ã®å®šç¾©æ–¹æ³•ã®è©³ç´°ã¯ã€ã€Œ:ref:`galaxy_server_config`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®ä¸€è¦§ã®ã‚µãƒ¼ãƒãƒ¼ã®é †åºã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®è§£æ±ºé †åºã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®è¨­å®šã‚ªãƒ—ションを設定ã™ã‚‹ã¨ã€:ref:`galaxy_server` ã®è¨­å®šã‚ªãƒ—ションã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4184 msgid "See also :ref:`GALAXY_SERVER_LIST `" msgstr "「:ref:`GALAXY_SERVER_LIST `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4192 msgid "See also :ref:`GALAXY_TOKEN_PATH `" msgstr "「:ref:`GALAXY_TOKEN_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4198 msgid "Some steps in ``ansible-galaxy`` display a progress wheel which can cause issues on certain displays or when outputing the stdout to a file.This config option controls whether the display wheel is shown or not.The default is to show the display wheel if stdout has a tty." msgstr "``ansible-galaxy`` ã®ä¸€éƒ¨ã®æ‰‹é †ã§ã¯ã€ç‰¹å®šã®è¡¨ç¤ºã§ã€ã¾ãŸã¯æ¨™æº–出力 (stdout) をファイルã«å‡ºåŠ›ã™ã‚‹ã¨ãã«å•題を引ãèµ·ã“ã™å¯èƒ½æ€§ã®ã‚る進行状æ³ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’表示ã—ã¾ã™ã€‚ã“ã®è¨­å®šã‚ªãƒ—ションã¯ã€è¡¨ç¤ºãƒ›ã‚¤ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚デフォルトã§ã¯ã€stdout ã« tty ãŒã‚ã‚‹ã¨ã€è¡¨ç¤ºãƒ›ã‚¤ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4200 msgid "See also :ref:`GALAXY_DISPLAY_PROGRESS `" msgstr "「:ref:`GALAXY_DISPLAY_PROGRESS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4206 msgid "The directory that stores cached responses from a Galaxy server.This is only used by the ``ansible-galaxy collection install`` and ``download`` commands.Cache files inside this dir will be ignored if they are world writable." msgstr "Galaxy サーãƒãƒ¼ã‹ã‚‰ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れãŸå¿œç­”ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚ã“れ㯠``ansible-galaxy collection install`` コマンドãŠã‚ˆã³ ``download`` コマンドã«ã‚ˆã£ã¦ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ•ァイルã¯ã€èª°ã§ã‚‚書ãè¾¼ã¿å¯èƒ½ã§ã‚れã°ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4208 msgid "See also :ref:`GALAXY_CACHE_DIR `" msgstr "「:ref:`GALAXY_CACHE_DIR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4216 msgid "See also :ref:`HOST_KEY_CHECKING `" msgstr "「:ref:`HOST_KEY_CHECKING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4224 msgid "See also :ref:`HOST_PATTERN_MISMATCH `" msgstr "「:ref:`HOST_PATTERN_MISMATCH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4232 msgid "See also :ref:`INTERPRETER_PYTHON `" msgstr "「:ref:`INTERPRETER_PYTHON `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4240 msgid "Make ansible transform invalid characters in group names supplied by inventory sources.If 'never' it will allow for the group name but warn about the issue.When 'ignore', it does the same as 'never', without issuing a warning.When 'always' it will replace any invalid characters with '_' (underscore) and warn the userWhen 'silently', it does the same as 'always', without issuing a warning." msgstr "インベントリーソースã‹ã‚‰æä¾›ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—åã®ç„¡åŠ¹ãªæ–‡å­—ã‚’ Ansible ãŒå¤‰æ›ã—ã¾ã™ã€‚「neverã€ã®å ´åˆã€ã‚°ãƒ«ãƒ¼ãƒ—åã¯è¨±å¯ã•れã¾ã™ãŒã€å•題ã«ã¤ã„ã¦è­¦å‘Šã•れã¾ã™ã€‚「ignoreã€ã®å ´åˆã¯ã€è­¦å‘Šã‚’出力ã›ãšã«ã€Œneverã€ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚「alwaysã€ã®å ´åˆã¯ã€ç„¡åŠ¹ãªæ–‡å­—を「_ã€(アンダースコア) ã«ç½®ãæ›ãˆã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è­¦å‘Šã—ã¾ã™ã€‚「silentlyã€ã®å ´åˆã¯ã€è­¦å‘Šã‚’出力ã—ã¾ã›ã‚“ãŒã€Œalwaysã€ã¨åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4242 msgid "See also :ref:`TRANSFORM_INVALID_GROUP_CHARS `" msgstr "「:ref:`TRANSFORM_INVALID_GROUP_CHARS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4250 msgid "See also :ref:`INVALID_TASK_ATTRIBUTE_FAILED `" msgstr "「:ref:`INVALID_TASK_ATTRIBUTE_FAILED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4259 msgid "See also :ref:`INVENTORY_ANY_UNPARSED_IS_FAILED `" msgstr "「:ref:`INVENTORY_ANY_UNPARSED_IS_FAILED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4265 msgid "Toggle to turn on inventory caching.This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`.The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory configuration.This message will be removed in 2.16." msgstr "切り替ãˆã¦ã‚¤ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’オンã«ã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリー設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4267 msgid "See also :ref:`INVENTORY_CACHE_ENABLED `" msgstr "「:ref:`INVENTORY_CACHE_ENABLED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4273 msgid "The plugin for caching inventory.This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`.The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration.This message will be removed in 2.16." msgstr "キャッシュインベントリーã®ãƒ—ラグイン。ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4275 msgid "See also :ref:`INVENTORY_CACHE_PLUGIN `" msgstr "「:ref:`INVENTORY_CACHE_PLUGIN `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4281 msgid "The inventory cache connection.This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`.The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration.This message will be removed in 2.16." msgstr "インベントリーキャッシュコãƒã‚¯ã‚·ãƒ§ãƒ³ã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4283 msgid "See also :ref:`INVENTORY_CACHE_PLUGIN_CONNECTION `" msgstr "「:ref:`INVENTORY_CACHE_PLUGIN_CONNECTION `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4289 msgid "The table prefix for the cache plugin.This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`.The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration.This message will be removed in 2.16." msgstr "キャッシュプラグインã®è¡¨ã®æŽ¥é ­è¾žã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4291 msgid "See also :ref:`INVENTORY_CACHE_PLUGIN_PREFIX `" msgstr "「:ref:`INVENTORY_CACHE_PLUGIN_PREFIX `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4297 msgid "Expiration timeout for the inventory cache plugin data.This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`.The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration.This message will be removed in 2.16." msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æœ‰åŠ¹æœŸé™ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚ã“ã®è¨­å®šã¯ã€ãƒ—ラグインオプション :ref:`inventory_plugins` ã¨ã—ã¦å€‹ã€…ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ç§»å‹•ã—ã¾ã—ãŸã€‚インベントリーãŠã‚ˆã³ãƒ•ァクトキャッシュ設定ã‹ã‚‰åˆ¥ã®ã‚ªãƒ—ションを追加ã™ã‚‹ inventory プラグインã§ã€æ—¢å­˜ã®è¨­å®šã‚‚使用ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ 2.16 ã§å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4299 msgid "See also :ref:`INVENTORY_CACHE_TIMEOUT `" msgstr "「:ref:`INVENTORY_CACHE_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4307 msgid "See also :ref:`INVENTORY_ENABLED `" msgstr "「:ref:`INVENTORY_ENABLED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4315 msgid "See also :ref:`INVENTORY_EXPORT `" msgstr "「:ref:`INVENTORY_EXPORT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4323 msgid "See also :ref:`INVENTORY_IGNORE_EXTS `" msgstr "「:ref:`INVENTORY_IGNORE_EXTS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4331 msgid "See also :ref:`INVENTORY_IGNORE_PATTERNS `" msgstr "「:ref:`INVENTORY_IGNORE_PATTERNS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4340 msgid "See also :ref:`INVENTORY_UNPARSED_IS_FAILED `" msgstr "「:ref:`INVENTORY_UNPARSED_IS_FAILED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4348 msgid "See also :ref:`MAX_FILE_SIZE_FOR_DIFF `" msgstr "「:ref:`MAX_FILE_SIZE_FOR_DIFF `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4356 msgid "See also :ref:`JINJA2_NATIVE_WARNING `" msgstr ":ref:`JINJA2_NATIVE_WARNING ` ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4363 #: ../../rst/reference_appendices/config.rst:4372 msgid "See also :ref:`NETWORK_GROUP_MODULES `" msgstr "「:ref:`NETWORK_GROUP_MODULES `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4378 msgid "Facts are available inside the `ansible_facts` variable, this setting also pushes them as their own vars in the main namespace.Unlike inside the `ansible_facts` dictionary, these will have an `ansible_` prefix." msgstr "ファクト㯠`ansible_facts` 変数内ã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ä¸»ãªåå‰ç©ºé–“ã§ç‹¬è‡ªã®å¤‰æ•°ã¨ã—ã¦ãƒ—ッシュã•れã¾ã™ã€‚`ansible_facts` ディクショナリー内ã¨ã¯ç•°ãªã‚Šã€ã“れã«ã¯ `ansible_` ã®æŽ¥é ­è¾žãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4380 msgid "See also :ref:`INJECT_FACTS_AS_VARS `" msgstr "「:ref:`INJECT_FACTS_AS_VARS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4386 msgid "List of extensions to ignore when looking for modules to loadThis is for rejecting script and binary module fallback extensions" msgstr "読ã¿è¾¼ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’探ã™ã¨ãã«ç„¡è¦–ã™ã‚‹æ‹¡å¼µæ©Ÿèƒ½ã®ãƒªã‚¹ãƒˆã€‚ã“れã¯ã€ã‚¹ã‚¯ãƒªãƒ—トãŠã‚ˆã³ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ•ォールãƒãƒƒã‚¯æ‹¡å¼µæ©Ÿèƒ½ã‚’æ‹’å¦ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4388 msgid "See also :ref:`MODULE_IGNORE_EXTS `" msgstr "「:ref:`MODULE_IGNORE_EXTS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4396 msgid "See also :ref:`OLD_PLUGIN_CACHE_CLEARING `" msgstr "「:ref:`OLD_PLUGIN_CACHE_CLEARING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4403 msgid "See also :ref:`PARAMIKO_HOST_KEY_AUTO_ADD `" msgstr "「:ref:`PARAMIKO_HOST_KEY_AUTO_ADD `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4410 msgid "See also :ref:`PARAMIKO_LOOK_FOR_KEYS `" msgstr "「:ref:`PARAMIKO_LOOK_FOR_KEYS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4418 msgid "See also :ref:`PERSISTENT_CONTROL_PATH_DIR `" msgstr "「:ref:`PERSISTENT_CONTROL_PATH_DIR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4426 msgid "See also :ref:`PERSISTENT_CONNECT_TIMEOUT `" msgstr "「:ref:`PERSISTENT_CONNECT_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4434 msgid "See also :ref:`PERSISTENT_CONNECT_RETRY_TIMEOUT `" msgstr "「:ref:`PERSISTENT_CONNECT_RETRY_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4442 msgid "See also :ref:`PERSISTENT_COMMAND_TIMEOUT `" msgstr "「:ref:`PERSISTENT_COMMAND_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4450 msgid "See also :ref:`PLAYBOOK_DIR `" msgstr "「:ref:`PLAYBOOK_DIR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4456 msgid "This sets which playbook dirs will be used as a root to process vars plugins, which includes finding host_vars/group_varsThe ``top`` option follows the traditional behaviour of using the top playbook in the chain to find the root directory.The ``bottom`` option follows the 2.4.0 behaviour of using the current playbook to find the root directory.The ``all`` option examines from the first parent to the current playbook." msgstr "ã“れã«ã‚ˆã‚Šã€vars プラグインを処ç†ã™ã‚‹ãŸã‚ã®ãƒ«ãƒ¼ãƒˆã¨ã—ã¦ä½¿ç”¨ã•れる Playbook ディレクトリーãŒè¨­å®šã•れã¾ã™ã€‚ã“れã«ã¯ã€host_vars/group_vars ã®æ¤œç´¢ãŒå«ã¾ã‚Œã¾ã™ã€‚``top`` オプションã¯ã€ãƒã‚§ãƒ¼ãƒ³ã®æœ€ä¸Šä½ã® Playbook を使用ã—ã¦ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’見ã¤ã‘ã‚‹ã¨ã„ã†å¾“æ¥ã®å‹•作ã«å¾“ã„ã¾ã™ã€‚``bottom`` オプションã¯ã€ç¾åœ¨ã® Playbook を使用ã—ã¦ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’検索ã™ã‚‹ 2.4.0 ã®å‹•作ã«å¾“ã„ã¾ã™ã€‚``all`` オプションã¯ã€æœ€åˆã®è¦ªã‹ã‚‰ç¾åœ¨ã® Playbook ã¾ã§ã‚’調ã¹ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4458 msgid "See also :ref:`PLAYBOOK_VARS_ROOT `" msgstr "「:ref:`PLAYBOOK_VARS_ROOT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4467 msgid "See also :ref:`PYTHON_MODULE_RLIMIT_NOFILE `" msgstr "「:ref:`PYTHON_MODULE_RLIMIT_NOFILE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4475 msgid "See also :ref:`RETRY_FILES_ENABLED `" msgstr "「:ref:`RETRY_FILES_ENABLED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4481 msgid "This sets the path in which Ansible will save .retry files when a playbook fails and retry files are enabled.This file will be overwritten after each run with the list of failed hosts from all plays." msgstr "ã“れã«ã‚ˆã‚Šã€Playbook ãŒå¤±æ•—ã—ã€å†è©¦è¡Œãƒ•ã‚¡ã‚¤ãƒ«ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã«ã€Ansible ㌠.retry ファイルをä¿å­˜ã™ã‚‹ãƒ‘スãŒè¨­å®šã•れã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€å®Ÿè¡Œã™ã‚‹ãŸã³ã«ã€ã™ã¹ã¦ã®ãƒ—レイã§å¤±æ•—ã—ãŸãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã§ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4483 msgid "See also :ref:`RETRY_FILES_SAVE_PATH `" msgstr "「:ref:`RETRY_FILES_SAVE_PATH `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4489 msgid "This setting can be used to optimize vars_plugin usage depending on user's inventory size and play selection.Setting to C(demand) will run vars_plugins relative to inventory sources anytime vars are 'demanded' by tasks.Setting to C(start) will run vars_plugins relative to inventory sources after importing that inventory source." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚µã‚¤ã‚ºã¨ãƒ—レイã®é¸æŠžã«å¿œã˜ã¦ vars_plugin ã®ä½¿ç”¨ã‚’最é©åŒ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚C(demand) ã«è¨­å®šã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦å¤‰æ•°ãŒã€Œè¦æ±‚ã€ã•れるãŸã³ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«é–¢é€£ã—㦠vars_plugins ãŒå®Ÿè¡Œã•れã¾ã™ã€‚C(start) ã«è¨­å®šã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã—ãŸå¾Œã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«é–¢é€£ã—㦠vars_plugins ãŒå®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4491 msgid "See also :ref:`RUN_VARS_PLUGINS `" msgstr "「:ref:`RUN_VARS_PLUGINS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4499 msgid "See also :ref:`SHOW_CUSTOM_STATS `" msgstr "「:ref:`SHOW_CUSTOM_STATS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4505 msgid "This list of filters avoids 'type conversion' when templating variablesUseful when you want to avoid conversion into lists or dictionaries for JSON strings, for example." msgstr "ã“ã®ãƒ•ィルターã®ãƒªã‚¹ãƒˆã¯ã€å¤‰æ•°ã‚’テンプレート化ã™ã‚‹ã¨ãã«ã€Œåž‹å¤‰æ›ã€ã‚’回é¿ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€JSON 文字列ã®ãƒªã‚¹ãƒˆã‚„ディレクトリーã¸ã®å¤‰æ›ã‚’回é¿ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4507 msgid "See also :ref:`STRING_TYPE_FILTERS `" msgstr "「:ref:`STRING_TYPE_FILTERS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4513 msgid "Allows disabling of warnings related to potential issues on the system running ansible itself (not on the managed hosts)These may include warnings about 3rd party packages or other conditions that should be resolved if possible." msgstr "Ansible 自体を実行ã—ã¦ã„ã‚‹ (管ç†å¯¾è±¡ãƒ›ã‚¹ãƒˆã§ã¯ãªã„) ã‚·ã‚¹ãƒ†ãƒ ã®æ½œåœ¨çš„ãªå•題ã«é–¢é€£ã™ã‚‹è­¦å‘Šã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã¯ã€ã‚µãƒ¼ãƒ‰ãƒ‘ーティーã®ãƒ‘ッケージã«é–¢ã™ã‚‹è­¦å‘Šã‚„ã€å¯èƒ½ã§ã‚れã°è§£æ±ºã™ã‚‹å¿…è¦ã®ã‚ã‚‹ãã®ä»–ã®æ¡ä»¶ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4515 msgid "See also :ref:`SYSTEM_WARNINGS `" msgstr "「:ref:`SYSTEM_WARNINGS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4523 msgid "See also :ref:`TAGS_RUN `" msgstr "「:ref:`TAGS_RUN `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4531 msgid "See also :ref:`TAGS_SKIP `" msgstr "「:ref:`TAGS_SKIP `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4537 msgid "Set the maximum time (in seconds) that a task can run for.If set to 0 (the default) there is no timeout." msgstr "タスクを実行ã™ã‚‹æœ€å¤§æ™‚é–“ (ç§’å˜ä½) を設定ã—ã¾ã™ã€‚0 (デフォルト) ã«è¨­å®šã™ã‚‹ã¨ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/config.rst:4539 msgid "See also :ref:`TASK_TIMEOUT `" msgstr "「:ref:`TASK_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4545 msgid "The maximum number of times to check Task Queue Manager worker processes to verify they have exited cleanly.After this limit is reached any worker processes still running will be terminated.This is for internal use only." msgstr "Task Queue Manager ワーカープロセスをãƒã‚§ãƒƒã‚¯ã—ã¦ã€ãã‚Œã‚‰ãŒæ­£å¸¸ã«çµ‚了ã—ãŸã“ã¨ã‚’確èªã™ã‚‹æœ€å¤§å›žæ•°ã€‚ã“ã®åˆ¶é™ã«é”ã™ã‚‹ã¨ã€ã¾ã å®Ÿè¡Œä¸­ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ—ロセスã¯ã™ã¹ã¦çµ‚了ã—ã¾ã™ã€‚ã“れã¯å†…部使用ã®ã¿ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4547 msgid "See also :ref:`WORKER_SHUTDOWN_POLL_COUNT `" msgstr "「:ref:`WORKER_SHUTDOWN_POLL_COUNT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4553 msgid "The number of seconds to sleep between polling loops when checking Task Queue Manager worker processes to verify they have exited cleanly.This is for internal use only." msgstr "Task Queue Manager ワーカープロセスをãƒã‚§ãƒƒã‚¯ã—ã¦ã€ãã‚Œã‚‰ãŒæ­£å¸¸ã«çµ‚了ã—ãŸã“ã¨ã‚’確èªã™ã‚‹ã¨ãã«ã€ãƒãƒ¼ãƒªãƒ³ã‚°ãƒ«ãƒ¼ãƒ—é–“ã§ã‚¹ãƒªãƒ¼ãƒ—ã™ã‚‹ç§’数。ã“れã¯å†…部使用ã®ã¿ã§ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4555 msgid "See also :ref:`WORKER_SHUTDOWN_POLL_DELAY `" msgstr "「:ref:`WORKER_SHUTDOWN_POLL_DELAY `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4563 msgid "See also :ref:`USE_PERSISTENT_CONNECTIONS `" msgstr "「:ref:`USE_PERSISTENT_CONNECTIONS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4571 msgid "See also :ref:`VARIABLE_PLUGINS_ENABLED `" msgstr "「:ref:`VARIABLE_PLUGINS_ENABLED `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4579 msgid "See also :ref:`VARIABLE_PRECEDENCE `" msgstr "「:ref:`VARIABLE_PRECEDENCE `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4585 msgid "For asynchronous tasks in Ansible (covered in Asynchronous Actions and Polling), this is how long, in seconds, to wait for the task spawned by Ansible to connect back to the named pipe used on Windows systems. The default is 5 seconds. This can be too low on slower systems, or systems under heavy load.This is not the total time an async command can run for, but is a separate timeout to wait for an async command to start. The task will only start to be timed against its async_timeout once it has connected to the pipe, so the overall maximum duration the task can take will be extended by the amount specified here." msgstr "Ansible ã®éžåŒæœŸã‚¿ã‚¹ã‚¯ (「éžåŒæœŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ãƒãƒ¼ãƒªãƒ³ã‚°ã€ã§èª¬æ˜Ž) ã®å ´åˆã€ã“れã¯ã€Ansible ãŒç”Ÿæˆã™ã‚‹ã‚¿ã‚¹ã‚¯ãŒ Windows システムã§ä½¿ç”¨ã•れるåå‰ä»˜ããƒ‘ã‚¤ãƒ—ã«æŽ¥ç¶šã™ã‚‹ã®ã‚’待機ã™ã‚‹æ™‚é–“ (ç§’å˜ä½) ã§ã™ã€‚デフォルト㯠5 ç§’ã§ã™ã€‚ã“れã¯ã€ä½Žé€Ÿã®ã‚·ã‚¹ãƒ†ãƒ ã‚„高負è·ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ä½Žã™ãŽã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€éžåŒæœŸã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã‚‹åˆè¨ˆæ™‚é–“ã§ã¯ã‚りã¾ã›ã‚“ãŒã€éžåŒæœŸã‚³ãƒžãƒ³ãƒ‰ã®é–‹å§‹ã‚’待機ã™ã‚‹åˆ¥ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã§ã™ã€‚タスクã¯ã€ãƒ‘ã‚¤ãƒ—ã«æŽ¥ç¶šã•れãŸå¾Œã«ã®ã¿ async_timeout ã«å¯¾ã—ã¦ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒé–‹å§‹ã™ã‚‹ãŸã‚ã€ã‚¿ã‚¹ã‚¯ã®å…¨ä½“çš„ãªæœ€å¤§æœŸé–“ã¯ã€ã“ã“ã§æŒ‡å®šã•れãŸåˆ†ã ã‘å»¶é•·ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4587 msgid "See also :ref:`WIN_ASYNC_STARTUP_TIMEOUT `" msgstr "「:ref:`WIN_ASYNC_STARTUP_TIMEOUT `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4593 msgid "Check all of these extensions when looking for 'variable' files which should be YAML or JSON or vaulted versions of these.This affects vars_files, include_vars, inventory and vars plugins among others." msgstr "YAML ã¾ãŸã¯ JSONã€ã‚ã‚‹ã„ã¯ã“れら㮠Vault ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹å¿…è¦ãŒã‚る「変数ã€ãƒ•ァイルを探ã™ã¨ãã¯ã€ã“れらã™ã¹ã¦ã®æ‹¡å¼µå­ã‚’確èªã—ã¦ãã ã•ã„。ã“れã¯ã€vars_filesã€include_varsã€inventoryã€vars プラグインãªã©ã«å½±éŸ¿ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4595 msgid "See also :ref:`YAML_FILENAME_EXTENSIONS `" msgstr "「:ref:`YAML_FILENAME_EXTENSIONS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4603 msgid "See also :ref:`NETCONF_SSH_CONFIG `" msgstr "「:ref:`NETCONF_SSH_CONFIG `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4609 msgid "Action to take when a module parameter value is converted to a string (this does not affect variables). For string parameters, values such as '1.00', \"['a', 'b',]\", and 'yes', 'y', etc. will be converted by the YAML parser unless fully quoted.Valid options are 'error', 'warn', and 'ignore'.Since 2.8, this option defaults to 'warn' but will change to 'error' in 2.12." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼å€¤ãŒæ–‡å­—列ã«å¤‰æ›ã•れるã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ (ã“れã¯å¤‰æ•°ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“)。文字列パラメーターã®å ´åˆã€ã€Œ1.00ã€ã€ã€Œ['a', 'b',]ã€ã€ã€Œyesã€ã€ã€Œyã€ãªã©ã®å€¤ã¯ã€å®Œå…¨ã«å¼•用ã•れã¦ã„ãªã„é™ã‚Šã€YAML パーサーã«ã‚ˆã‚Šå¤‰æ›ã•れã¾ã™ã€‚有効ãªã‚ªãƒ—ションã¯ã€ã€Œerrorã€ã€ã€Œwarnã€ã€ãŠã‚ˆã³ã€Œignoreã€ã§ã™ã€‚2.8 以é™ã€ã“ã®ã‚ªãƒ—ションã®ãƒ‡ãƒ•ォルトã¯ã€Œwarnã€ã§ã™ãŒã€2.12ã§ã¯ã€Œerrorã€ã«å¤‰æ›´ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/config.rst:4611 msgid "See also :ref:`STRING_CONVERSION_ACTION `" msgstr "「:ref:`STRING_CONVERSION_ACTION `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4619 msgid "See also :ref:`VALIDATE_ACTION_GROUP_METADATA `" msgstr ":ref:`VALIDATE_ACTION_GROUP_METADATA ` ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/config.rst:4627 msgid "See also :ref:`VERBOSE_TO_STDERR `" msgstr "「:ref:`VERBOSE_TO_STDERR `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:4 msgid "Frequently Asked Questions" msgstr "よãã‚ã‚‹è³ªå• (FAQ)" #: ../../rst/reference_appendices/faq.rst:6 msgid "Here are some commonly asked questions and their answers." msgstr "以下ã«ã€ã‚ˆãã‚る質å•ã¨ãã®å›žç­”を紹介ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:11 msgid "Where did all the modules go?" msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã©ã“ã«ç§»ã•れã¾ã—ãŸã‹" #: ../../rst/reference_appendices/faq.rst:13 msgid "In July, 2019, we announced that collections would be the `future of Ansible content delivery `_. A collection is a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. In Ansible 2.9 we added support for collections. In Ansible 2.10 we `extracted most modules from the main ansible/ansible repository `_ and placed them in :ref:`collections `. Collections may be maintained by the Ansible team, by the Ansible community, or by Ansible partners. The `ansible/ansible repository `_ now contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core`` (it was briefly called ``ansible-base`` for version 2.10)." msgstr "2019 å¹´ 7 月ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒ `今後㮠Ansible コンテンツé…布 `_ ã«ãªã‚‹ã“ã¨ãŒç™ºè¡¨ã•れã¾ã—ãŸã€‚コレクションã¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインをå«ã‚€ Ansible コンテンツã®é…布形å¼ã§ã™ã€‚Ansible 2.9 ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒãƒ¼ãƒˆã‚’追加ã—ã¾ã—ãŸã€‚Ansible 2.10 ã§ã¯ã€`ansible/ansible ã®ãƒ¡ã‚¤ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã»ã¨ã‚“ã©ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å–り出ã—㦠`_ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ :ref:`コレクション ` ã«ç½®ãã¾ã—ãŸã€‚コレクションã¯ã€Ansible ãƒãƒ¼ãƒ ã€Ansible コミュニティーã€ã¾ãŸã¯ Ansible パートナーã«ã‚ˆã£ã¦ç¶­æŒã•れã¾ã™ã€‚`ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚³ãƒ¼ãƒ‰ã‚’管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚³ãƒ”ーã™ã‚‹ãªã©ã€åŸºæœ¬çš„ãªæ©Ÿèƒ½ãŠã‚ˆã³é–¢æ•°ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ ``ansible-core`` ã¨ã‚‚呼ã°ã‚Œã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ã®å ´åˆã¯ ``ansible-base`` ã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™)。" #: ../../rst/reference_appendices/faq.rst:15 msgid "To learn more about using collections, see :ref:`collections`." msgstr "コレクションã®ä½¿ç”¨ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:16 msgid "To learn more about developing collections, see :ref:`developing_collections`." msgstr "コレクション開発ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:17 msgid "To learn more about contributing to existing collections, see the individual collection repository for guidelines, or see :ref:`contributing_maintained_collections` to contribute to one of the Ansible-maintained collections." msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®è²¢çŒ®ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã§ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’å‚ç…§ã™ã‚‹ã‹ã€Ansible ãŒç®¡ç†ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã„ãšã‚Œã‹ã«è²¢çŒ®ã™ã‚‹æ–¹æ³•を「:ref:`contributing_maintained_collections`ã€ã§å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:22 msgid "Where did this specific module go?" msgstr "ã“ã®ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã©ã“ã«ç§»ã•れã¾ã—ãŸã‹" #: ../../rst/reference_appendices/faq.rst:24 msgid "IF you are searching for a specific module, you can check the `runtime.yml `_ file, which lists the first destination for each module that we extracted from the main ansible/ansible repository. Some modules have moved again since then. You can also search on `Ansible Galaxy `_ or ask on one of our :ref:`chat channels `." msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’検索ã™ã‚‹å ´åˆã¯ã€`runtime.yml `_ ファイルをãƒã‚§ãƒƒã‚¯ã§ãã¾ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ã€ãƒ¡ã‚¤ãƒ³ã® ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰æŠ½å‡ºã—ãŸå„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æœ€åˆã®å®›å…ˆãŒãƒªã‚¹ãƒˆã•れã¦ã„ã¾ã™ã€‚ãã®å¾Œã€ã„ãã¤ã‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå†ã³ç§»å‹•ã—ã¾ã—ãŸã€‚`Ansible Galaxy `_ ã§æ¤œç´¢ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€ã„ãšã‚Œã‹ã® :ref:`chat channels ` ã§å°‹ã­ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:29 msgid "How can I set the PATH or any other environment variable for a task or entire play?" msgstr "タスクやプレイ全体㫠PATH ã¾ãŸã¯ãã®ä»–ã®ç’°å¢ƒå¤‰æ•°ã‚’ã©ã®ã‚ˆã†ã«è¨­å®šã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:31 msgid "Setting environment variables can be done with the `environment` keyword. It can be used at the task or other levels in the play." msgstr "環境変数ã®è¨­å®šã¯ã€`environment` キーワードã§å®Ÿè¡Œã§ãã¾ã™ã€‚ã“れã¯ã€ãƒ—レイ内ã®ã‚¿ã‚¹ã‚¯ã‚„ä»–ã®ãƒ¬ãƒ™ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:47 msgid "starting in 2.0.1 the setup task from ``gather_facts`` also inherits the environment directive from the play, you might need to use the ``|default`` filter to avoid errors if setting this at play level." msgstr "2.0.1 以é™ã§ã€``gather_facts`` ã®è¨­å®šã‚¿ã‚¹ã‚¯ã¯ã€ãƒ—レイã‹ã‚‰ã®ç’°å¢ƒãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–も継承ã—ã¾ã™ã€‚ã“れãŒãƒ—レイレベルã§è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€``|default`` フィルターを使用ã—ãŸã‚¨ãƒ©ãƒ¼ã®å›žé¿ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:52 msgid "How do I handle different machines needing different user accounts or ports to log in with?" msgstr "ç•°ãªã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¾ãŸã¯ãƒãƒ¼ãƒˆã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ã®ã‚ã‚‹å„種マシンをã©ã®ã‚ˆã†ã«å‡¦ç†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:54 msgid "Setting inventory variables in the inventory file is the easiest way." msgstr "インベントリーファイルã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’設定ã™ã‚‹æ–¹æ³•ãŒæœ€ã‚‚ç°¡å˜ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:56 msgid "For instance, suppose these hosts have different usernames and ports:" msgstr "ãŸã¨ãˆã°ã€ä»¥ä¸‹ã§ã¯ã€ãƒ›ã‚¹ãƒˆã«ç•°ãªã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒãƒ¼ãƒˆãŒæŒ‡å®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:64 msgid "You can also dictate the connection type to be used, if you want:" msgstr "ä»»æ„ã§ã€ä½¿ç”¨ã™ã‚‹æŽ¥ç¶šã‚¿ã‚¤ãƒ—を指定ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:73 msgid "You may also wish to keep these in group variables instead, or file them in a group_vars/ file. See the rest of the documentation for more information about how to organize variables." msgstr "上記ã®å€¤ã‚’ã€ä»£ã‚りã«ã‚°ãƒ«ãƒ¼ãƒ—変数や group_vars/ ファイルã«ä¿æŒã§ãã¾ã™ã€‚変数を整ç†ã™ã‚‹æ–¹æ³•ã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã®ä»–ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:79 msgid "How do I get ansible to reuse connections, enable Kerberized SSH, or have Ansible pay attention to my local SSH config file?" msgstr "Ansible を使用ã—ã¦æŽ¥ç¶šã‚’å†åˆ©ç”¨ã—ãŸã‚Šã€Kerberos を設定ã—㟠SSH を有効ã«ã—ãŸã‚Šã€Ansible ãŒãƒ­ãƒ¼ã‚«ãƒ«ã® SSH 設定を使用ã™ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:81 msgid "Switch your default connection type in the configuration file to ``ssh``, or use ``-c ssh`` to use Native OpenSSH for connections instead of the python paramiko library. In Ansible 1.2.1 and later, ``ssh`` will be used by default if OpenSSH is new enough to support ControlPersist as an option." msgstr "設定ファイルã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’ ``ssh`` ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã‹ã€Python Paramiko ライブラリーã®ä»£ã‚りã«ã€``-c ssh`` ã§ã€æŽ¥ç¶šã«ãƒã‚¤ãƒ†ã‚£ãƒ–ã® OpenSSH を使用ã—ã¦ãã ã•ã„。Ansible 1.2.1 以é™ã§ã¯ã€OpenSSH ãŒæ–°ã—ãã€ã‚ªãƒ—ションã¨ã—㦠ControlPersist をサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã«ã¯ãƒ‡ãƒ•ォルト㧠``ssh`` を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:85 msgid "Paramiko is great for starting out, but the OpenSSH type offers many advanced options. You will want to run Ansible from a machine new enough to support ControlPersist, if you are using this connection type. You can still manage older clients. If you are using RHEL 6, CentOS 6, SLES 10 or SLES 11 the version of OpenSSH is still a bit old, so consider managing from a Fedora or openSUSE client even though you are managing older nodes, or just use paramiko." msgstr "Paramiko ã¯ä½¿ç”¨ã‚’é–‹å§‹ã™ã‚‹ã¨ãã«ã¯ä¾¿åˆ©ã§ã™ãŒã€OpenSSH ã®ã‚¿ã‚¤ãƒ—ã§ã¯å¤šæ•°ã®è©³ç´°ã‚ªãƒ—ションを利用ã§ãã¾ã™ã€‚OpenSSH ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’ä½¿ç”¨ã™ã‚‹å ´åˆã«ã¯ã€ControlPersist をサãƒãƒ¼ãƒˆã§ãã‚‹æ–°ã—ã„マシンã‹ã‚‰ Ansible を実行ã—ã¦ãã ã•ã„。å¤ã„クライアントã¯å¼•ãç¶šã管ç†ã§ãã¾ã™ã€‚RHEL 6ã€CentOS 6ã€SLES 10ã€ã¾ãŸã¯ SLES 11 を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€OpenSSH ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè‹¥å¹²å¤ã„ãŸã‚ã€ä»¥å‰ã®ãƒŽãƒ¼ãƒ‰ã‚’管ç†ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€Fedora ã¾ãŸã¯ openSUSE クライアントã‹ã‚‰ã®ç®¡ç†ã‚’検討ã™ã‚‹ã‹ã€paramiko を使用ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:90 msgid "We keep paramiko as the default as if you are first installing Ansible on these enterprise operating systems, it offers a better experience for new users." msgstr "Paramiko ã¯ã€ã“れらã®ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズオペレーティングシステム㫠Ansible を最åˆã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã„ã‚‹å ´åˆã¨åŒã˜ã‚ˆã†ã«ãƒ‡ãƒ•ォルトã®ã¾ã¾ã¨ãªã£ã¦ãŠã‚Šã€æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦ä½¿ç”¨ã—ã‚„ã™ããªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:95 msgid "How do I configure a jump host to access servers that I have no direct access to?" msgstr "直接アクセス権ã®ãªã„サーãƒãƒ¼ã«ã‚¸ãƒ£ãƒ³ãƒ—ホストを使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«è¨­å®šã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:97 msgid "You can set a ``ProxyCommand`` in the ``ansible_ssh_common_args`` inventory variable. Any arguments specified in this variable are added to the sftp/scp/ssh command line when connecting to the relevant host(s). Consider the following inventory group:" msgstr "``ansible_ssh_common_args`` インベントリー変数㫠``ProxyCommand`` を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚該当ã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ãŸã¨ãã«ã€ã“ã®å¤‰æ•°ã«æŒ‡å®šã—ãŸå¼•æ•°ã¯ã€sftp/scp/ssh コマンドラインã«è¿½åŠ ã•れã¾ã™ã€‚次ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¤ã„ã¦è€ƒãˆã¦ã¿ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:108 msgid "You can create `group_vars/gatewayed.yml` with the following contents::" msgstr "以下ã®å†…容㧠`group_vars/gatewayed.yml` を作æˆã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:112 msgid "Ansible will append these arguments to the command line when trying to connect to any hosts in the group ``gatewayed``. (These arguments are used in addition to any ``ssh_args`` from ``ansible.cfg``, so you do not need to repeat global ``ControlPersist`` settings in ``ansible_ssh_common_args``.)" msgstr "Ansible ã¯ã€``gatewayed`` グループã®ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—よã†ã¨ã™ã‚‹ã¨ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã« 3 ã¤ã®å¼•数を追加ã—ã¾ã™ã€‚(``ansible.cfg`` ã‹ã‚‰ã® ``ssh_args`` ã«åŠ ãˆã¦ã€ä¸Šè¨˜ã®å¼•æ•°ãŒä½¿ç”¨ã•れるãŸã‚ã€``ansible_ssh_common_args`` ã®ã‚°ãƒ­ãƒ¼ãƒãƒ« ``ControlPersist`` 設定を繰り返ã™å¿…è¦ã¯ã‚りã¾ã›ã‚“)。" #: ../../rst/reference_appendices/faq.rst:117 msgid "Note that ``ssh -W`` is available only with OpenSSH 5.4 or later. With older versions, it's necessary to execute ``nc %h:%p`` or some equivalent command on the bastion host." msgstr "``ssh -W`` ã¯ã€OpenSSH 5.4 以é™ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€bastion ホスト㧠``nc %h:%p`` を実行ã™ã‚‹ã‹ã€åŒç­‰ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:121 msgid "With earlier versions of Ansible, it was necessary to configure a suitable ``ProxyCommand`` for one or more hosts in ``~/.ssh/config``, or globally by setting ``ssh_args`` in ``ansible.cfg``." msgstr "Ansible ã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``~/.ssh/config`` ã®ãƒ›ã‚¹ãƒˆ 1 å°ã¾ãŸã¯è¤‡æ•°å°ã«é©åˆ‡ãª ``ProxyCommand`` を設定ã™ã‚‹ã‹ã€``ansible.cfg`` ã« ``ssh_args`` をグローãƒãƒ«ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/faq.rst:128 msgid "How do I get Ansible to notice a dead target in a timely manner?" msgstr "Ansible ãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„るターゲットをé©å®œæ¤œå‡ºã§ãるよã†ã«ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:130 msgid "You can add ``-o ServerAliveInterval=NumberOfSeconds`` in ``ssh_args`` from ``ansible.cfg``. Without this option, SSH and therefore Ansible will wait until the TCP connection times out. Another solution is to add ``ServerAliveInterval`` into your global SSH configuration. A good value for ``ServerAliveInterval`` is up to you to decide; keep in mind that ``ServerAliveCountMax=3`` is the SSH default so any value you set will be tripled before terminating the SSH session." msgstr "``ansible.cfg`` ã‹ã‚‰ã€``ssh_args`` ã« ``-o ServerAliveInterval=NumberOfSeconds`` を追加ã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションãŒãªã„ã¨ã€SSH 㨠Ansible 㯠TCP 接続ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã«ãªã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚別ã®è§£æ±ºæ–¹æ³•ã¯ã€``ServerAliveInterval`` をグローãƒãƒ«ã® SSH 設定ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§ã™ã€‚``ServerAliveInterval`` ã«é©ã—ãŸå€¤ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ±ºå®šã—ã¾ã™ã€‚ãŸã ã—ã€SSH ã®ãƒ‡ãƒ•ォルト㯠``ServerAliveCountMax=3`` ã§ã‚ã‚‹ãŸã‚ã€SSH セッションã®çµ‚了å‰ã«è¨­å®šã—ãŸå€¤ãŒ 3 å€ã«ãªã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:138 msgid "How do I speed up run of ansible for servers from cloud providers (EC2, openstack,.. )?" msgstr "クラウドプロãƒã‚¤ãƒ€ãƒ¼ (EC2ã€openstack ãªã©) ã‹ã‚‰ã®ã‚µãƒ¼ãƒãƒ¼ã§ Ansible ã®å®Ÿè¡Œã‚’高速化ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:140 msgid "Don't try to manage a fleet of machines of a cloud provider from your laptop. Rather connect to a management node inside this cloud provider first and run Ansible from there." msgstr "ラップトップã‹ã‚‰ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®ãƒžã‚·ãƒ³ã®ãƒ•リートを管ç†ã—よã†ã¨ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€æœ€åˆã«ã“ã®ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼å†…ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã€ãã“ã‹ã‚‰ Ansible を実行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:146 msgid "How do I handle not having a Python interpreter at /usr/bin/python on a remote machine?" msgstr "リモートマシン㮠/usr/bin/python ã« Python インタープリターをé…ç½®ã›ãšã«å¯¾å¿œã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:148 msgid "While you can write Ansible modules in any language, most Ansible modules are written in Python, including the ones central to letting Ansible work." msgstr "Ansible モジュールã¯ã©ã®è¨€èªžã§ã‚‚記述ã§ãã¾ã™ãŒã€Ansible ã®æ©Ÿèƒ½ã‚’å¸ã‚‹ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©ã€Ansible モジュールã®å¤šã㯠Python ã§è¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:151 msgid "By default, Ansible assumes it can find a :command:`/usr/bin/python` on your remote system that is either Python2, version 2.6 or higher or Python3, 3.5 or higher." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€Python2 ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™ã¾ãŸã¯ Python3 ã® 3.5 以é™ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã® :command:`/usr/bin/python` を検出ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:154 msgid "Setting the inventory variable ``ansible_python_interpreter`` on any host will tell Ansible to auto-replace the Python interpreter with that value instead. Thus, you can point to any Python you want on the system if :command:`/usr/bin/python` on your system does not point to a compatible Python interpreter." msgstr "ホストã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•° ``ansible_python_interpreter`` を設定ã™ã‚‹ã¨ã€Ansible ã«å¯¾ã—ã¦ã€ä»£ã‚り㫠Python インタープリターをã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã®å€¤ã«è‡ªå‹•ã§ç½®ãæ›ãˆã‚‹ã‚ˆã†ã«æŒ‡ç¤ºã‚’出ã—ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã€ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã® :command:`/usr/bin/python` ãŒäº’æ›æ€§ã®ã‚ã‚‹ Python インタープリターを指定ã—ã¦ã„ãªã„å ´åˆã¯ã€ä½¿ç”¨ã™ã‚‹ Python を指定ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:159 msgid "Some platforms may only have Python 3 installed by default. If it is not installed as :command:`/usr/bin/python`, you will need to configure the path to the interpreter via ``ansible_python_interpreter``. Although most core modules will work with Python 3, there may be some special purpose ones which do not or you may encounter a bug in an edge case. As a temporary workaround you can install Python 2 on the managed host and configure Ansible to use that Python via ``ansible_python_interpreter``. If there's no mention in the module's documentation that the module requires Python 2, you can also report a bug on our `bug tracker `_ so that the incompatibility can be fixed in a future release." msgstr "プラットフォームã«ã‚ˆã£ã¦ã¯ã€ãƒ‡ãƒ•ォルト㧠Python3 ã®ã¿ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚:command:`/usr/bin/python` ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã¯ã€``ansible_python_interpreter`` を介ã—ã¦ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã¸ã®ãƒ‘スを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚コアモジュールã®å¤šã㌠Python 3 ã¨é€£æºã—ã¾ã™ãŒã€ã„ãã¤ã‹ã®ç‰¹æ®Šç”¨é€”ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å‹•作ã—ãªã„ã‹ã‚‚ã—れãªã„ã—ã€ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹ã§ãƒã‚°ãŒç™ºç”Ÿã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。一時的ãªå›žé¿ç­–ã¨ã—ã¦ã€ç®¡ç†å¯¾è±¡ãƒ›ã‚¹ãƒˆã« Python 2をインストールã—ã€``ansible_python_interpreter`` ã‹ã‚‰ãã® Python を使用ã™ã‚‹ã‚ˆã†ã« Ansible ã‚’æ§‹æˆã§ãã¾ã™ã€‚モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã« Python 2 ãŒå¿…è¦ã‚ã‚‹ã¨ã®è¨˜è¼‰ãŒãªã„å ´åˆã¯ã€ä»Šå¾Œã“ã®ãƒªãƒªãƒ¼ã‚¹ã§éžäº’æ›æ€§ã®å•題ãŒè§£æ±ºã•れるよã†ã«ã€`ãƒã‚°ãƒˆãƒ©ãƒƒã‚«ãƒ¼ `_ ã§ã€ãƒã‚°ã‚’報告ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:168 msgid "Do not replace the shebang lines of your python modules. Ansible will do this for you automatically at deploy time." msgstr "Python モジュールã®ã‚·ãƒãƒ³è¡Œã¯ç½®ãæ›ãˆãªã„ã§ãã ã•ã„。デプロイ時㫠Ansible ãŒè‡ªå‹•ã§ã“れを行ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:170 msgid "Also, this works for ANY interpreter, for example ruby: ``ansible_ruby_interpreter``, perl: ``ansible_perl_interpreter``, and so on, so you can use this for custom modules written in any scripting language and control the interpreter location." msgstr "ã¾ãŸã€ã“れã¯ã€ruby ãªã©ã®ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リター (ruby: ``ansible_ruby_interpreter``ã€perl: ``ansible_perl_interpreter`` ãªã©) ã§æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã€ä»»æ„ã®ã‚¹ã‚¯ãƒªãƒ—ト言語ã§è¨˜è¿°ã—ãŸã‚«ã‚¹ã‚¿ãƒ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã“れを使用ã—ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã®å ´æ‰€ã‚’管ç†ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:173 msgid "Keep in mind that if you put ``env`` in your module shebang line (``#!/usr/bin/env ``), this facility will be ignored so you will be at the mercy of the remote `$PATH`." msgstr "モジュールã®ã‚·ãƒãƒ³ã®è¡Œ (``#!/usr/bin/env ``) ã« ``env`` を挿入ã™ã‚‹ã¨ã€ã“ã®æ©Ÿèƒ½ã¯ç„¡è¦–ã•れã€ãƒªãƒ¢ãƒ¼ãƒˆã® `$PATH` ã®è¨­å®šãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:179 msgid "How do I handle the package dependencies required by Ansible package dependencies during Ansible installation ?" msgstr "Ansible インストール中㫠Ansible パッケージã«å¿…è¦ãªä¾å­˜é–¢ä¿‚ã«ã©ã®ã‚ˆã†ã«å¯¾å¿œã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:181 msgid "While installing Ansible, sometimes you may encounter errors such as `No package 'libffi' found` or `fatal error: Python.h: No such file or directory` These errors are generally caused by the missing packages, which are dependencies of the packages required by Ansible. For example, `libffi` package is dependency of `pynacl` and `paramiko` (Ansible -> paramiko -> pynacl -> libffi)." msgstr "Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ä¸­ã«ã€`No package 'libffi' found` ã¾ãŸã¯ `fatal error: Python.h: No such file or directory` ãªã©ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ã¯é€šå¸¸ã€Ansible ã§å¿…è¦ãªãƒ‘ッケージã®ä¾å­˜é–¢ä¿‚パッケージãŒä¸è¶³ã—ã¦ã„ã‚‹å ´åˆã«ç™ºç”Ÿã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€`libffi` パッケージ㯠`pynacl` ãŠã‚ˆã³ `paramiko` ã®ä¾å­˜é–¢ä¿‚ã§ã™ (Ansible -> paramiko -> pynacl -> libffi)。" #: ../../rst/reference_appendices/faq.rst:185 msgid "In order to solve these kinds of dependency issues, you might need to install required packages using the OS native package managers, such as `yum`, `dnf`, or `apt`, or as mentioned in the package installation guide." msgstr "ã“ã®ã‚ˆã†ãªä¾å­˜é–¢ä¿‚ã®å•題を解決ã™ã‚‹ã«ã¯ã€OS ãƒã‚¤ãƒ†ã‚£ãƒ–ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ (`yum`ã€`dnf`ã€`apt`ã€ã¾ãŸã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚¬ã‚¤ãƒ‰ã«è¨˜è¼‰ã®ã‚‚ã®) を使用ã—ã¦å¿…è¦ãªãƒ‘ッケージをインストールã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:188 msgid "Refer to the documentation of the respective package for such dependencies and their installation methods." msgstr "ã“ã®ã‚ˆã†ãªä¾å­˜é–¢ä¿‚ã¨ãã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€å„パッケージã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:191 msgid "Common Platform Issues" msgstr "一般的ãªãƒ—ラットフォームã®å•題" #: ../../rst/reference_appendices/faq.rst:194 msgid "What customer platforms does Red Hat support?" msgstr "Red Hat ã§ã¯ã€ã©ã®ã‚ˆã†ãªé¡§å®¢ã®ãƒ—ラットフォームをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:196 msgid "A number of them! For a definitive list please see this `Knowledge Base article `_." msgstr "ãã®æ•°ã¯å¤šæ•°ã§ã™ã€‚具体的ãªä¸€è¦§ã¯ã€`ナレッジベースã®è¨˜äº‹ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:199 msgid "Running in a virtualenv" msgstr "virtualenv ã§ã®å®Ÿè¡Œ" #: ../../rst/reference_appendices/faq.rst:201 msgid "You can install Ansible into a virtualenv on the controller quite simply:" msgstr "コントローラー㮠virtualenv ã« Ansible ã‚’ç°¡å˜ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:209 msgid "If you want to run under Python 3 instead of Python 2 you may want to change that slightly:" msgstr "Python 2 ã§ã¯ãªã Python 3 ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:217 msgid "If you need to use any libraries which are not available via pip (for instance, SELinux Python bindings on systems such as Red Hat Enterprise Linux or Fedora that have SELinux enabled), then you need to install them into the virtualenv. There are two methods:" msgstr "pip ã§å…¥æ‰‹ã§ããªã„ライブラリーを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ (例: SELinux ãŒæœ‰åŠ¹ãª Red Hat Enterprise Linux ã¾ãŸã¯ Fedora ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ã‚‹ SELinux Python ã®ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°)ã€virtualenv ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚2 ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:221 msgid "When you create the virtualenv, specify ``--system-site-packages`` to make use of any libraries installed in the system's Python:" msgstr "virtualenv ã®ä½œæˆæ™‚ã«ã€``--system-site-packages`` を指定ã—ã¦ã€ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã® Python ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るライブラリーを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:228 msgid "Copy those files in manually from the system. For instance, for SELinux bindings you might do:" msgstr "システムã‹ã‚‰æ‰‹å‹•ã§ã“れらã®ãƒ•ァイルをコピーã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€SELinux ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã§ã¯ã€ä»¥ä¸‹ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:238 msgid "Running on BSD" msgstr "BSD ã§ã®å®Ÿè¡Œ" #: ../../rst/reference_appendices/faq.rst:240 msgid ":ref:`working_with_bsd`" msgstr ":ref:`working_with_bsd`" #: ../../rst/reference_appendices/faq.rst:244 msgid "Running on Solaris" msgstr "Solaris ã§ã®å®Ÿè¡Œ" #: ../../rst/reference_appendices/faq.rst:246 msgid "By default, Solaris 10 and earlier run a non-POSIX shell which does not correctly expand the default tmp directory Ansible uses ( :file:`~/.ansible/tmp`). If you see module failures on Solaris machines, this is likely the problem. There are several workarounds:" msgstr "デフォルトã§ã¯ Solaris 10 以å‰ã§ã¯ POSIX 以外ã®ã‚·ã‚§ãƒ«ã‚’実行ã—ã¾ã™ãŒã€Ansible ãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルト㮠tmp ディレクトリー (:file:`~/.ansible/tmp`) ã‚’æ­£ã—ã展開ã—ã¾ã›ã‚“。Solaris マシンã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å•題ãŒç™ºç”Ÿã™ã‚‹å ´åˆã«ã¯ã€ä¸Šè¨˜ãŒå•題ã®å¯èƒ½æ€§ãŒé«˜ã„ã§ã™ã€‚回é¿ç­–ã¯ã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:250 msgid "You can set ``remote_tmp`` to a path that will expand correctly with the shell you are using (see the plugin documentation for :ref:`C shell`, :ref:`fish shell`, and :ref:`Powershell`). For example, in the ansible config file you can set::" msgstr "使用ã™ã‚‹ã‚·ã‚§ãƒ« (:ref:`C shell`ã€:ref:`fish shell`ã€ãŠã‚ˆã³ :ref:`Powershell` ã®ãƒ—ラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§) ã§æ­£ã—ã展開ã•れるパス㫠``remote_tmp`` を設定ã—ã¾ã™ã€‚設定ã™ã‚‹ ansible 設定ファイルã§ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:256 msgid "In Ansible 2.5 and later, you can also set it per-host in inventory like this::" msgstr "Ansible 2.5 以é™ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ãƒ›ã‚¹ãƒˆã”ã¨ã«è¨­å®šã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:260 msgid "You can set :ref:`ansible_shell_executable` to the path to a POSIX compatible shell. For instance, many Solaris hosts have a POSIX shell located at :file:`/usr/xpg4/bin/sh` so you can set this in inventory like so::" msgstr ":ref:`ansible_shell_executable` ã‚’ã€POSIX ã®äº’æ›æ€§ã®ã‚るパスã«è¨­å®šã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€å¤šæ•°ã® Solaris ホストã§ã¯ POSIX シェルãŒã€:file:`/usr/xpg4/bin/sh` ã«é…ç½®ã•れã¦ã„ã‚‹ãŸã‚ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã“ã®å€¤ã‚’以下ã®ã‚ˆã†ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:266 msgid "(bash, ksh, and zsh should also be POSIX compatible if you have any of those installed)." msgstr "(bashã€kshã€ã¾ãŸã¯ zsh ã®ã„ãšã‚Œã‹ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã«ã¯ã€ã“れも POSIX ã®äº’æ›æ€§ãŒå¿…è¦ã§ã™)。" #: ../../rst/reference_appendices/faq.rst:269 msgid "Running on z/OS" msgstr "z/OS ã§ã®å®Ÿè¡Œ" #: ../../rst/reference_appendices/faq.rst:271 msgid "There are a few common errors that one might run into when trying to execute Ansible on z/OS as a target." msgstr "z/OS ã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã—㦠Ansible を実行ã—よã†ã¨ã™ã‚‹ã¨ã€è¤‡æ•°ã®å…±é€šã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:273 msgid "Version 2.7.6 of python for z/OS will not work with Ansible because it represents strings internally as EBCDIC." msgstr "z/OS å‘ã‘ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.7.6 ã¯ã€å†…éƒ¨ã§æ–‡å­—列を EBCDIC ã¨ã—ã¦è¡¨ç¾ã™ã‚‹ãŸã‚ã€Ansible ã§ã¯æ©Ÿèƒ½ã—ãªã„。" #: ../../rst/reference_appendices/faq.rst:275 msgid "To get around this limitation, download and install a later version of `python for z/OS `_ (2.7.13 or 3.6.1) that represents strings internally as ASCII. Version 2.7.13 is verified to work." msgstr "ã“ã®åˆ¶é™ã‚’回é¿ã™ã‚‹ã«ã¯ã€æ–‡å­—列を ASCII ã§è¡¨ç¾ã™ã‚‹ `python for z/OS `_ (2.7.13 ã¾ãŸã¯ 3.6.1) をダウンロードã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.7.13 ã§ã¯æ©Ÿèƒ½ã™ã‚‹ã“ã¨ãŒç¢ºèªã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:277 msgid "When ``pipelining = False`` in `/etc/ansible/ansible.cfg` then Ansible modules are transferred in binary mode via sftp however execution of python fails with" msgstr "`/etc/ansible/ansible.cfg` ã§ ``pipelining = False`` ã¨æŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã€ä»¥ä¸‹ã«ã‚ˆã‚Šã€Ansible モジュール㯠Python ã®å®Ÿè¡Œã‚¨ãƒ©ãƒ¼ãŒä½•ã§ã‚ã£ã¦ã‚‚ã€sftp 経由ã§ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ¢ãƒ¼ãƒ‰ã§è»¢é€ã•れる。" #: ../../rst/reference_appendices/faq.rst:280 msgid "SyntaxError: Non-UTF-8 code starting with \\'\\\\x83\\' in file /a/user1/.ansible/tmp/ansible-tmp-1548232945.35-274513842609025/AnsiballZ_stat.py on line 1, but no encoding declared; see https://python.org/dev/peps/pep-0263/ for details" msgstr "SyntaxError: Non-UTF-8 code starting with \\'\\\\x83\\' in file /a/user1/.ansible/tmp/ansible-tmp-1548232945.35-274513842609025/AnsiballZ_stat.py on line 1, but no encoding declared; see https://python.org/dev/peps/pep-0263/ for details" #: ../../rst/reference_appendices/faq.rst:282 msgid "To fix it set ``pipelining = True`` in `/etc/ansible/ansible.cfg`." msgstr "ã“れを修正ã™ã‚‹ã«ã¯ã€`/etc/ansible/ansible.cfg` ã« ``pipelining = True`` を設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:284 msgid "Python interpret cannot be found in default location ``/usr/bin/python`` on target host." msgstr "Python インタープリターãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã®ãƒ‡ãƒ•ォルトã®å ´æ‰€ ``/usr/bin/python`` ã§æ¤œå‡ºã§ããªã„。" #: ../../rst/reference_appendices/faq.rst:287 msgid "/usr/bin/python: EDC5129I No such file or directory" msgstr "/usr/bin/python: EDC5129I No such file or directory" #: ../../rst/reference_appendices/faq.rst:289 msgid "To fix this set the path to the python installation in your inventory like so::" msgstr "ã“れを解決ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ãƒ‘スを Python インストールã«è¨­å®šã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:293 msgid "Start of python fails with ``The module libpython2.7.so was not found.``" msgstr "python ã®èµ·å‹•ã«å¤±æ•—ã—ã€``The module libpython2.7.so was not found.`` ãŒè¡¨ç¤ºã•れる。" #: ../../rst/reference_appendices/faq.rst:296 msgid "EE3501S The module libpython2.7.so was not found." msgstr "EE3501S The module libpython2.7.so was not found." #: ../../rst/reference_appendices/faq.rst:298 msgid "On z/OS, you must execute python from gnu bash. If gnu bash is installed at ``/usr/lpp/bash``, you can fix this in your inventory by specifying an ``ansible_shell_executable``::" msgstr "z/OS ã§ã¯ã€gnu bash ã‹ã‚‰ python を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚gnu bash ㌠``/usr/lpp/bash`` ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ ``ansible_shell_executable`` を指定ã—ã¦ä¿®æ­£ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:304 msgid "Running under fakeroot" msgstr "fakeroot 下ã§å®Ÿè¡Œ" #: ../../rst/reference_appendices/faq.rst:306 msgid "Some issues arise as ``fakeroot`` does not create a full nor POSIX compliant system by default. It is known that it will not correctly expand the default tmp directory Ansible uses (:file:`~/.ansible/tmp`). If you see module failures, this is likely the problem. The simple workaround is to set ``remote_tmp`` to a path that will expand correctly (see documentation of the shell plugin you are using for specifics)." msgstr "``fakeroot`` ã¯ã€ãƒ‡ãƒ•ォルトã§ã¯å®Œå…¨ãªã‚·ã‚¹ãƒ†ãƒ ã‚‚ POSIX 準拠ã®ã‚·ã‚¹ãƒ†ãƒ ã‚‚作æˆã—ãªã„ãŸã‚ã€ã„ãã¤ã‹ã®å•題ãŒç™ºç”Ÿã—ã¾ã™ã€‚Ansible ãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ォルト㮠tmp ディレクトリー (:file:`~/.ansible/tmp`) ã‚’æ­£ã—ã展開ã—ãªã„ã“ã¨ãŒã‚ã‹ã£ã¦ã„ã¾ã™ã€‚モジュール障害ãŒç™ºç”Ÿã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“れãŒå•題ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ç°¡å˜ãªå›žé¿ç­–ã¯ã€æ­£ã—ã展開ã•れるパス㫠``remote_tmp`` を設定ã™ã‚‹ã“ã¨ã§ã™ (詳細ã«ã¤ã„ã¦ã¯ã€ä½¿ç”¨ã—ã¦ã„ã‚‹ shell プラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/reference_appendices/faq.rst:311 msgid "For example, in the ansible config file (or via environment variable) you can set::" msgstr "設定ã™ã‚‹ ansible 設定ファイル㧠(ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’介ã—ã¦)ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:320 msgid "What is the best way to make content reusable/redistributable?" msgstr "コンテンツをå†åˆ©ç”¨/å†é…ä¿¡ã§ãるよã†ã«ã™ã‚‹æœ€é©ãªæ–¹æ³•ã«ã¯ã©ã‚“ãªã‚‚ã®ãŒã‚りã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:322 msgid "If you have not done so already, read all about \"Roles\" in the playbooks documentation. This helps you make playbook content self-contained, and works well with things like git submodules for sharing content with others." msgstr "Playbook ドキュメントã®ã€Œãƒ­ãƒ¼ãƒ«ã€ã®æƒ…報をã¾ã ç¢ºèªã—ã¦ã„ãªã„å ´åˆã¯ã€ä¸€èª­ã—ã¦ãã ã•ã„。Playbook ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を自己完çµåž‹ã«ã—ã€git submodules ãªã©ã¨é€£æºã•ã›ã¦ã€ä»–ã¨ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„共有ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:325 msgid "If some of these plugin types look strange to you, see the API documentation for more details about ways Ansible can be extended." msgstr "ã“ã®ã‚ˆã†ãªãƒ—ラグインタイプã®è©³ç´°ã¯ã€Ansible ã®æ‹¡å¼µæ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ã‚’ API ドキュメントã§ç¢ºèªã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:330 msgid "Where does the configuration file live and what can I configure in it?" msgstr "設定ファイルã®é…置場所ã¯ã©ã“ã§ã™ã‹ã€‚ã¾ãŸã¯ã€ã©ã®ã‚ˆã†ã«è¨­å®šã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:333 msgid "See :ref:`intro_configuration`." msgstr "「:ref:`intro_configuration`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:338 msgid "How do I disable cowsay?" msgstr "cowsay ã¯ã©ã®ã‚ˆã†ã«ç„¡åŠ¹åŒ–ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:340 msgid "If cowsay is installed, Ansible takes it upon itself to make your day happier when running playbooks. If you decide that you would like to work in a professional cow-free environment, you can either uninstall cowsay, set ``nocows=1`` in ``ansible.cfg``, or set the :envvar:`ANSIBLE_NOCOWS` environment variable:" msgstr "cowsay ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã¯ã€Playbook を実行ã™ã‚‹ã¨ã€Ansible ãŒã™ã¹ã¦ã‚’引ãå—ã‘ã¦å‡¦ç†ã—ã¾ã™ã€‚プロフェッショナル㪠cowsay ã®ãªã„環境ã§ä½œæ¥­ã™ã‚‹å ´åˆã¯ã€cowsay をアンインストールã™ã‚‹ã‹ã€``ansible.cfg`` ã« ``nocows=1`` を設定ã™ã‚‹ã‹ã€:envvar:`ANSIBLE_NOCOWS` ã®ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:351 msgid "How do I see a list of all of the ansible\\_ variables?" msgstr "ansible\\_ 変数一覧を確èªã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:353 msgid "Ansible by default gathers \"facts\" about the machines under management, and these facts can be accessed in playbooks and in templates. To see a list of all of the facts that are available about a machine, you can run the ``setup`` module as an ad hoc action:" msgstr "Ansible ã¯ãƒ‡ãƒ•ォルトã§ã€ç®¡ç†å¯¾è±¡ã®ãƒžã‚·ãƒ³ã®ã€Œãƒ•ァクトã€ã‚’åŽé›†ã—ã€ã“ã®ãƒ•ァクトã«ã¯ Playbook ã¾ãŸã¯ãƒ†ãƒ³ãƒ—レートã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ã‚るマシンã§åˆ©ç”¨å¯èƒ½ãªãƒ•ァクトã®ä¸€è¦§ã‚’表示ã™ã‚‹ã«ã¯ã€``setup`` モジュールを ad-hoc アクションã¨ã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:361 msgid "This will print out a dictionary of all of the facts that are available for that particular host. You might want to pipe the output to a pager.This does NOT include inventory variables or internal 'magic' variables. See the next question if you need more than just 'facts'." msgstr "ã“れã«ã‚ˆã‚Šã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã§åˆ©ç”¨å¯èƒ½ãªå…¨ãƒ•ァクトã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒå‡ºåŠ›ã•れã¾ã™ã€‚ページャーã®å‡ºåŠ›ã‚’ãƒ‘ã‚¤ãƒ—ã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚„内部ã®ã€Œmagicã€å¤‰æ•°ã¯å«ã¾ã‚Œã¾ã›ã‚“。「ファクトã€ä»¥å¤–ã®æƒ…å ±ãŒå¿…è¦ãªå ´åˆã¯ã€æ¬¡ã®è³ªå•を確èªã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:369 msgid "How do I see all the inventory variables defined for my host?" msgstr "ホストã«å®šç¾©ã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’ã™ã¹ã¦ç¢ºèªã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:371 msgid "By running the following command, you can see inventory variables for a host:" msgstr "以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:381 msgid "How do I see all the variables specific to my host?" msgstr "ホスト固有ã®å…¨å¤‰æ•°ã‚’確èªã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:383 msgid "To see all host specific variables, which might include facts and other sources:" msgstr "ホスト固有ã®å¤‰æ•°ã‚’ã™ã¹ã¦ç¢ºèªã™ã‚‹ã«ã¯ä»¥ä¸‹ã‚’実行ã—ã¾ã™ (ファクトや他ã®ã‚½ãƒ¼ã‚¹ãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™)。" #: ../../rst/reference_appendices/faq.rst:389 msgid "Unless you are using a fact cache, you normally need to use a play that gathers facts first, for facts included in the task above." msgstr "ファクトキャッシュを使用ã—ã¦ã„ãªã„é™ã‚Šã€ä¸Šè¨˜ã®ã‚¿ã‚¹ã‚¯ã«å«ã¾ã‚Œã‚‹ãƒ•ァクトã«ã¤ã„ã¦ã¯ã€é€šå¸¸ã€å…ˆã«ãƒ•ァクトをåŽé›†ã™ã‚‹ãƒ—レイを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:395 msgid "How do I loop over a list of hosts in a group, inside of a template?" msgstr "テンプレート内ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å«ã¾ã‚Œã‚‹ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ã‚’ループã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:397 msgid "A pretty common pattern is to iterate over a list of hosts inside of a host group, perhaps to populate a template configuration file with a list of servers. To do this, you can just access the \"$groups\" dictionary in your template, like this:" msgstr "éžå¸¸ã«ä¸€èˆ¬çš„ãªãƒ‘ターンã§ã¯ã€ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—内ã§ãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã‚’å復処ç†ã™ã‚‹ã“ã¨ã§ã™ã€‚ãŠãらãã€ãƒ†ãƒ³ãƒ—レート設定ファイルã«ã‚µãƒ¼ãƒãƒ¼ã®ä¸€è¦§ã‚’入力ã—ã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€ãƒ†ãƒ³ãƒ—レートã§ã€Œ$ groupsã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã ã‘ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:406 msgid "If you need to access facts about these hosts, for instance, the IP address of each hostname, you need to make sure that the facts have been populated. For example, make sure you have a play that talks to db_servers::" msgstr "ã“ã®ã‚ˆã†ãªãƒ›ã‚¹ãƒˆã«é–¢ã™ã‚‹ãƒ•ァクト (å„ホストåã® IP アドレスãªã©) ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã¯ã€ãƒ•ァクトãŒç”Ÿæˆã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€db_servers ã¨å¯¾è©±ã™ã‚‹ãƒ—レイãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™::" #: ../../rst/reference_appendices/faq.rst:413 msgid "Then you can use the facts inside your template, like this:" msgstr "次ã«ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã€ãƒ†ãƒ³ãƒ—レート内ã®ãƒ•ァクトを使用ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:424 msgid "How do I access a variable name programmatically?" msgstr "プログラムã§å¤‰æ•°åã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:426 msgid "An example may come up where we need to get the ipv4 address of an arbitrary interface, where the interface to be used may be supplied via a role parameter or other input. Variable names can be built by adding strings together using \"~\", like so:" msgstr "ãŸã¨ãˆã°ã€ä»»æ„ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース㮠ipv4 アドレスをå–å¾—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ãã“ã§ã¯ã€ä½¿ç”¨ã•れるインターフェースãŒãƒ­ãƒ¼ãƒ«ãƒ‘ラメーターã¾ãŸã¯ä»–ã®å…¥åŠ›ã‚’ä»‹ã—ã¦æä¾›ã•れる場åˆãŒã‚りã¾ã™ã€‚変数åã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€Œ~ã€ã‚’使用ã—ã¦æ–‡å­—列を一緒ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§ä½œæˆã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:433 msgid "The trick about going through hostvars is necessary because it's a dictionary of the entire namespace of variables. ``inventory_hostname`` is a magic variable that indicates the current host you are looping over in the host loop." msgstr "ãれã¯ã€å¤‰æ•°ã®åå‰ç©ºé–“全体ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚ã‚‹ãŸã‚ã€hostvars 全体をãƒã‚§ãƒƒã‚¯ã™ã‚‹ã«ã¯ã‚³ãƒ„ãŒå¿…è¦ã§ã™ã€‚``inventory_hostname`` ã¯ãƒžã‚¸ãƒƒã‚¯å¤‰æ•°ã§ã€ãƒ›ã‚¹ãƒˆãƒ«ãƒ¼ãƒ—ã§ãƒ«ãƒ¼ãƒ—を行ã†ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:436 msgid "In the example above, if your interface names have dashes, you must replace them with underscores:" msgstr "上記ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースåã«ãƒ€ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã«ç½®ãæ›ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:442 msgid "Also see dynamic_variables_." msgstr "「dynamic_variables_ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:448 msgid "How do I access a group variable?" msgstr "グループ変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:450 msgid "Technically, you don't, Ansible does not really use groups directly. Groups are labels for host selection and a way to bulk assign variables, they are not a first class entity, Ansible only cares about Hosts and Tasks." msgstr "技術的ã«ã¯ã€Ansible ã¯å®Ÿéš›ã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—を直接使用ã—ã¾ã›ã‚“。グループã¯ãƒ›ã‚¹ãƒˆé¸æŠžã®ãƒ©ãƒ™ãƒ«ã§ã‚りã€å¤‰æ•°ã‚’一括ã§å‰²ã‚Šå½“ã¦ã‚‹æ‰‹æ®µã‚’æä¾›ã—ã¾ã™ã€‚グループã¯ç¬¬ä¸€ç´šã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§ã¯ãªãã€Ansible ã¯ãƒ›ã‚¹ãƒˆã¨ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’考慮ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:453 msgid "That said, you could just access the variable by selecting a host that is part of that group, see first_host_in_a_group_ below for an example." msgstr "ãŸã ã—ã€å¯¾è±¡ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å«ã¾ã‚Œã‚‹ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã™ã‚‹ã¨ã€å¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚例ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®ã€Œfirst_host_in_a_group_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:459 msgid "How do I access a variable of the first host in a group?" msgstr "ã‚°ãƒ«ãƒ¼ãƒ—å†…ã®æœ€åˆã®ãƒ›ã‚¹ãƒˆã®å¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:461 msgid "What happens if we want the ip address of the first webserver in the webservers group? Well, we can do that too. Note that if we are using dynamic inventory, which host is the 'first' may not be consistent, so you wouldn't want to do this unless your inventory is static and predictable. (If you are using AWX or the :ref:`Red Hat Ansible Automation Platform `, it will use database order, so this isn't a problem even if you are using cloud based inventory scripts)." msgstr "webservers ã‚°ãƒ«ãƒ¼ãƒ—ã®æœ€åˆã® webserver ã® IP アドレスãŒå¿…è¦ãªå ´åˆã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚ãれも行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚動的インベントリーを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã©ã®ãƒ›ã‚¹ãƒˆãŒã€Œæœ€åˆã€ã§ã‚ã‚‹ã‹ãŒä¸€è²«ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŒé™çš„ã§äºˆæ¸¬å¯èƒ½ã§ãªã„é™ã‚Šã€å®Ÿè¡Œã—ãªã„よã†ã«ã—ã¦ãã ã•ã„ (AWX ã¾ãŸã¯ :ref:`Red Hat Ansible Automation Platform ` を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®é †åºã‚’使用ã™ã‚‹ãŸã‚ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ™ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを使用ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ã“れã¯å•題ã«ãªã‚Šã¾ã›ã‚“)。" #: ../../rst/reference_appendices/faq.rst:466 msgid "Anyway, here's the trick:" msgstr "ä»¥ä¸‹ã«æ–¹æ³•を示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:472 msgid "Notice how we're pulling out the hostname of the first machine of the webservers group. If you are doing this in a template, you could use the Jinja2 '#set' directive to simplify this, or in a playbook, you could also use set_fact::" msgstr "webserver ã‚°ãƒ«ãƒ¼ãƒ—ã®æœ€åˆã®ãƒžã‚·ãƒ³ã®ãƒ›ã‚¹ãƒˆåã‚’å–å¾—ã—ã¦ã„ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。テンプレートã§ã“れを実行ã™ã‚‹å ´åˆã¯ã€Jinja2 '#set' ディレクティブを使用ã—ã¦ç°¡ç´ åŒ–ã™ã‚‹ã‹ã€Playbook ã®å ´åˆã¯ set_fact を使用ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:479 msgid "Notice how we interchanged the bracket syntax for dots -- that can be done anywhere." msgstr "ドットã®ä»£ã‚ã‚Šã«æ‹¬å¼§ã®æ§‹æ–‡ã‚’使用ã—ã¦ã„ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã¯ã©ã“ã§ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:484 msgid "How do I copy files recursively onto a target host?" msgstr "ターゲットホストã«ãƒ•ァイルをå†å¸°çš„ã«ã‚³ãƒ”ーã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:486 msgid "The ``copy`` module has a recursive parameter. However, take a look at the ``synchronize`` module if you want to do something more efficient for a large number of files. The ``synchronize`` module wraps rsync. See the module index for info on both of these modules." msgstr "``copy`` モジュールã«ã¯å†å¸°çš„ãªãƒ‘ラメーターãŒã‚りã¾ã™ãŒã€å¤šæ•°ã®ãƒ•ァイルã«ã‚ˆã‚ŠåŠ¹çŽ‡çš„ãªå ´åˆã¯ã€``synchronize`` モジュールをå‚ç…§ã—ã¦ãã ã•ã„。``synchronize`` モジュール㯠rsync をラップã—ã¾ã™ã€‚ã“れらã®ä¸¡æ–¹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æƒ…å ±ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:492 msgid "How do I access shell environment variables?" msgstr "shell 環境変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:495 msgid "**On controller machine :** Access existing variables from controller use the ``env`` lookup plugin. For example, to access the value of the HOME environment variable on the management machine::" msgstr "**コントローラーマシンã®å ´åˆ:** コントローラーã‹ã‚‰æ—¢å­˜ã®å¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``env`` lookup プラグインを使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ç®¡ç†ãƒžã‚·ãƒ³ã§ HOME 環境変数ã®å€¤ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:504 msgid "**On target machines :** Environment variables are available via facts in the ``ansible_env`` variable:" msgstr "**ターゲットマシン:** 環境変数ã®å ´åˆã«ã¯ã€``ansible_env`` 変数ã®ãƒ•ァクトを使用ã—ã¦å…¥æ‰‹ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:510 msgid "If you need to set environment variables for TASK execution, see :ref:`playbooks_environment` in the :ref:`Advanced Playbooks ` section. There are several ways to set environment variables on your target machines. You can use the :ref:`template `, :ref:`replace `, or :ref:`lineinfile ` modules to introduce environment variables into files. The exact files to edit vary depending on your OS and distribution and local configuration." msgstr "タスクを実行ã™ã‚‹ãŸã‚ã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€:ref:`詳細㪠Playbook ` セクションã®ã€Œ:ref:`playbooks_environment`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ターゲットマシンã§ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹ã«ã¯ã€ã„ãã¤ã‹ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚:ref:`template ` モジュールã€:ref:`replace ` モジュールã€ã¾ãŸã¯ :ref:`lineinfile ` モジュールを使用ã—ã¦ã€ç’°å¢ƒå¤‰æ•°ã‚’ファイルã«å–り込むã“ã¨ãŒã§ãã¾ã™ã€‚編集ã™ã‚‹ãƒ•ァイルã¯ã€OSã€ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã€ãŠã‚ˆã³ãƒ­ãƒ¼ã‚«ãƒ«è¨­å®šã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:520 msgid "How do I generate encrypted passwords for the user module?" msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æš—å·åŒ–パスワードを生æˆã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:522 msgid "Ansible ad hoc command is the easiest option:" msgstr "Ansible ad-hoc コマンドを使用ã™ã‚‹ã®ãŒæœ€ã‚‚ç°¡å˜ãªã‚ªãƒ—ションã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:528 msgid "The ``mkpasswd`` utility that is available on most Linux systems is also a great option:" msgstr "ã»ã¨ã‚“ã©ã® Linux システムã§åˆ©ç”¨ã§ãã‚‹ ``mkpasswd`` ユーティリティーも優れãŸã‚ªãƒ—ションã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:535 msgid "If this utility is not installed on your system (for example, you are using macOS) then you can still easily generate these passwords using Python. First, ensure that the `Passlib `_ password hashing library is installed:" msgstr "ãŠä½¿ã„ã®ã‚·ã‚¹ãƒ†ãƒ ã«ã“ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆ (例: MacOS を使用ã—ã¦ã„ã‚‹å ´åˆãªã©) ã«ã¯ã€Python を使用ã—ã¦ã“ã®ã‚ˆã†ãªãƒ‘スワードを簡å˜ã«ç”Ÿæˆã§ãã¾ã™ã€‚ã¾ãšã€`Passlib `_ パスワードãƒãƒƒã‚·ãƒ¥ãƒ©ã‚¤ãƒ–ラリーãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:543 msgid "Once the library is ready, SHA512 password values can then be generated as follows:" msgstr "ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãƒ¼ã®æº–å‚™ãŒã§ããŸã‚‰ã€ä»¥ä¸‹ã®ã‚ˆã†ã« SHA512 パスワードã®å€¤ã‚’生æˆã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:549 msgid "Use the integrated :ref:`hash_filters` to generate a hashed version of a password. You shouldn't put plaintext passwords in your playbook or host_vars; instead, use :ref:`playbooks_vault` to encrypt sensitive data." msgstr "çµ±åˆã•れ㟠:ref:`hash_filters` を使用ã—ã¦ã€ãƒãƒƒã‚·ãƒ¥åŒ–ã•れãŸãƒ‘スワードを生æˆã—ã¾ã™ã€‚Playbook ã‚„ host_vars ã«ãƒ—レーンテキストã®ãƒ‘スワードã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€:ref:`playbooks_vault` を使用ã—ã¦ã€æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’æš—å·åŒ–ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:552 msgid "In OpenBSD, a similar option is available in the base system called ``encrypt (1)``" msgstr "OpenBSDã§ã¯ã€``encrypt (1)`` ã¨å‘¼ã°ã‚Œã‚‹ãƒ™ãƒ¼ã‚¹ã‚·ã‚¹ãƒ†ãƒ ã§åŒæ§˜ã®ã‚ªãƒ—ションãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:557 msgid "Ansible allows dot notation and array notation for variables. Which notation should I use?" msgstr "Ansible ã§ã¯ã€å¤‰æ•°ã®ãƒ‰ãƒƒãƒˆè¡¨è¨˜ã¨ã‚¢ãƒ¬ã‚¤è¡¨è¨˜ãŒå¯èƒ½ã§ã™ã€‚ã©ã®è¡¨è¨˜ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:559 msgid "The dot notation comes from Jinja and works fine for variables without special characters. If your variable contains dots (.), colons (:), or dashes (-), if a key begins and ends with two underscores, or if a key uses any of the known public attributes, it is safer to use the array notation. See :ref:`playbooks_variables` for a list of the known public attributes." msgstr "ドット表記㯠Jinja ã‹ã‚‰ã®ã‚‚ã®ã§ã€ç‰¹æ®Šæ–‡å­—ãªã—ã«å¤‰æ•°ã¨åˆã‚ã›ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚変数ã«ãƒ‰ãƒƒãƒˆ (.)ã€ã‚³ãƒ­ãƒ³ (:)ã€ã¾ãŸã¯ãƒã‚¤ãƒ•ン (-) ãŒå«ã¾ã‚Œã¦ã„ã¦ã€ã‚­ãƒ¼ãŒ 2 ã¤ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã§é–‹å§‹ãŠã‚ˆã³çµ‚了ã™ã‚‹å ´åˆã€ã¾ãŸã¯ã‚­ãƒ¼ãŒæ—¢çŸ¥ã®ãƒ‘ブリック属性ã®ã„ãšã‚Œã‹ã‚’使用ã™ã‚‹å ´åˆã¯ã€é…列表記を使用ã™ã‚‹æ–¹ãŒå®‰å…¨ã§ã™ã€‚既知ã®ãƒ‘ブリック属性ã®ä¸€è¦§ã¯ã€ã€Œ:ref:`playbooks_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:572 msgid "Also array notation allows for dynamic variable composition, see dynamic_variables_." msgstr "ã¾ãŸã€ã‚¢ãƒ¬ã‚¤è¡¨è¨˜ã¯ã€å‹•çš„ãªå¤‰æ•°ã®æ§‹æˆãŒå¯èƒ½ã§ã™ã€‚詳細ã¯ã€ã€Œdynamic_variables_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:574 msgid "Another problem with 'dot notation' is that some keys can cause problems because they collide with attributes and methods of python dictionaries." msgstr "「ドット表記ã€ã®ä»–ã®å•題ã¨ã—ã¦ã€ãƒ‰ãƒƒãƒˆè¡¨è¨˜ã®ã‚­ãƒ¼ã«ã‚ˆã£ã¦ã¯ã€Python ディクショナリーã®å±žæ€§ã¨ãƒ¡ã‚½ãƒƒãƒ‰ã¨ç«¶åˆã™ã‚‹ãŸã‚ã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:585 msgid "When is it unsafe to bulk-set task arguments from a variable?" msgstr "変数ã‹ã‚‰ã‚¿ã‚¹ã‚¯å¼•æ•°ã®ä¸€æ‹¬è¨­å®šã‚’ã™ã‚‹ã¨å®‰å…¨ã§ãªã„ã®ã¯ã©ã®ã‚ˆã†ãªå ´åˆã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:588 msgid "You can set all of a task's arguments from a dictionary-typed variable. This technique can be useful in some dynamic execution scenarios. However, it introduces a security risk. We do not recommend it, so Ansible issues a warning when you do something like this::" msgstr "ディクショナリー型ã®å¤‰æ•°ã‹ã‚‰ã‚¿ã‚¹ã‚¯ã®å¼•æ•°ã‚’ã™ã¹ã¦è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®æ‰‹æ³•ã¯ã€å‹•çš„ãªå®Ÿè¡Œã‚·ãƒŠãƒªã‚ªã§ä¾¿åˆ©ãªå ´åˆãŒã‚りã¾ã™ã€‚ãŸã ã—ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚ã“ã‚Œã¯æŽ¨å¥¨ã•れãªã„ãŸã‚ã€ã“ã®ã‚ˆã†ãªæ“作を行ã†ã¨ã€Ansible ã§ã¯è­¦å‘Šã‚’発行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:602 msgid "This particular example is safe. However, constructing tasks like this is risky because the parameters and values passed to ``usermod_args`` could be overwritten by malicious values in the ``host facts`` on a compromised target machine. To mitigate this risk:" msgstr "ã“ã®ç‰¹å®šã®ä¾‹ã¯ã€å®‰å…¨ã§ã™ã€‚ãŸã ã—ã€``usermod_args`` ã«æ¸¡ã•れるパラメーターや値ãŒã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¾µå®³ã‚’å—ã‘ãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã® ``host facts`` ã«å«ã¾ã‚Œã‚‹æ‚ªæ„ã®ã‚る値ã§ç½®ãæ›ãˆã‚‰ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ã®æ§‹ç¯‰ã«ã¯ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚ã“ã®ãƒªã‚¹ã‚¯ã‚’軽減ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:607 msgid "set bulk variables at a level of precedence greater than ``host facts`` in the order of precedence found in :ref:`ansible_variable_precedence` (the example above is safe because play vars take precedence over facts)" msgstr ":ref:`ansible_variable_precedence` ã«ã‚る優先順ä½ã§ã€``host facts`` より優先順ä½ã®é«˜ã„レベルã§ä¸€æ‹¬å¤‰æ•°ã‚’設定ã—ã¾ã™ (プレイ変数ã¯ãƒ•ァクトより優先度ãŒé«˜ã„ãŸã‚ã€ä¸Šè¨˜ã®ä¾‹ã¯å®‰å…¨ã§ã™)。" #: ../../rst/reference_appendices/faq.rst:610 msgid "disable the :ref:`inject_facts_as_vars` configuration setting to prevent fact values from colliding with variables (this will also disable the original warning)" msgstr "ファクトã®å€¤ãŒå¤‰æ•°ã¨ç«¶åˆã—ãªã„よã†ã« :ref:`inject_facts_as_vars` 設定オプションを無効ã«ã—ã¾ã™ (å…ƒã®è­¦å‘Šã‚‚無効ã«ãªã‚Šã¾ã™)。" #: ../../rst/reference_appendices/faq.rst:617 msgid "Can I get training on Ansible?" msgstr "Ansible ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã¯ã‚りã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:619 msgid "Yes! See our `services page `_ for information on our services and training offerings. Email `info@ansible.com `_ for further details." msgstr "サービスãŠã‚ˆã³ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚µãƒ¼ãƒ“スã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€ã€Œ`サービスページ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。詳細ã¯ã€`info@ansible.com `_ ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:622 msgid "We also offer free web-based training classes on a regular basis. See our `webinar page `_ for more info on upcoming webinars." msgstr "ã¾ãŸã€å®šæœŸçš„ã«ã€Web ベースã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚‚ç„¡æ–™ã§æä¾›ã—ã¦ã„ã¾ã™ã€‚今後予定ã•れã¦ã„るウェビナーã®è©³ç´°ã¯ã€`ウェビナーページ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:629 msgid "Is there a web interface / REST API / GUI?" msgstr "Web インターフェースã€REST APIã€GUI ã¯ã‚りã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:631 msgid "Yes! The open-source web interface is Ansible AWX. The supported Red Hat product that makes Ansible even more powerful and easy to use is :ref:`Red Hat Ansible Automation Platform `." msgstr "ã¯ã„。オープンソース Web インターフェース㯠Ansible AWX ã§ã™ã€‚Ansible ãŒã‚ˆã‚Šå¼·åŠ›ã§ã€ä½¿ã„ã‚„ã™ã„ã€Red Hat ã®ã‚µãƒãƒ¼ãƒˆå¯¾è±¡è£½å“ã¯ã€ :ref:`Red Hat Ansible Automation Platform ` ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:637 msgid "How do I keep secret data in my playbook?" msgstr "Playbook ã«æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:639 msgid "If you would like to keep secret data in your Ansible content and still share it publicly or keep things in source control, see :ref:`playbooks_vault`." msgstr "Ansible ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã—ã¦ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を公開ã™ã‚‹ã‹ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã«ä¿æŒã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`playbooks_vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:641 msgid "If you have a task that you don't want to show the results or command given to it when using -v (verbose) mode, the following task or playbook attribute can be useful::" msgstr "-v (詳細) モードã®ä½¿ç”¨æ™‚ã«ã€çµæžœã‚„指定ã—ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’表示ã—ãŸããªã„タスクãŒã‚ã‚‹å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ã‚„ Playbook 属性ãŒä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:647 msgid "This can be used to keep verbose output but hide sensitive information from others who would otherwise like to be able to see the output." msgstr "ã“れã¯ã€è©³ç´°ãªå‡ºåŠ›ã‚’ç¶­æŒã—ã¤ã¤ã€å‡ºåŠ›ã‚’è¦‹ãŸã„ã¨æ€ã£ã¦ã„る人ã‹ã‚‰æ©Ÿå¯†æƒ…報を隠ã™ãŸã‚ã«ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:649 msgid "The ``no_log`` attribute can also apply to an entire play::" msgstr "``no_log`` 属性ã¯ã€ãƒ—レイ全体ã«ã‚‚é©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:654 msgid "Though this will make the play somewhat difficult to debug. It's recommended that this be applied to single tasks only, once a playbook is completed. Note that the use of the ``no_log`` attribute does not prevent data from being shown when debugging Ansible itself via the :envvar:`ANSIBLE_DEBUG` environment variable." msgstr "ãŸã ã—ã€ã“れを使用ã™ã‚‹ã¨ã€ãƒ—レイã®ãƒ‡ãƒãƒƒã‚°ãŒå›°é›£ã«ãªã‚Šã¾ã™ã€‚Playbook ãŒå®Œäº†ã™ã‚‹ã¨ã€ã“ã®å±žæ€§ã¯å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã«ã®ã¿é©ç”¨ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚``no_log`` 属性を使用ã—ã¦ã‚‚ã€:envvar:`ANSIBLE_DEBUG` 環境変数㧠Ansible 自体をデãƒãƒƒã‚°ã™ã‚‹ã¨ãã«ã€ãƒ‡ãƒ¼ã‚¿ãŒè¡¨ç¤ºã•れã¦ã—ã¾ã†ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:665 msgid "When should I use {{ }}? Also, how to interpolate variables or dynamic variable names" msgstr "{{ }} ã¯ã„ã¤ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã‹ã€‚ã¾ãŸã€å¤‰æ•°ã¾ãŸã¯å‹•çš„ãªå¤‰æ•°åを補間ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:667 msgid "A steadfast rule is 'always use ``{{ }}`` except when ``when:``'. Conditionals are always run through Jinja2 as to resolve the expression, so ``when:``, ``failed_when:`` and ``changed_when:`` are always templated and you should avoid adding ``{{ }}``." msgstr "ä¸å‹•ã®ãƒ«ãƒ¼ãƒ«ã¯ã€Œ``when:`` ã®å ´åˆã‚’除ã„ã¦å¸¸ã« ``{{ }}`` を使用ã™ã‚‹ã€ã§ã™ã€‚ã“ã®æ¡ä»¶ã¯ã€å¼ã®è§£æ±ºã¨ã—㦠Jinja2 を介ã—ã¦å®Ÿè¡Œã™ã‚‹ãŸã‚ã€``when:``ã€``failed_when:``ã€ãŠã‚ˆã³ ``changed_when:`` ã¯å¸¸ã«ãƒ†ãƒ³ãƒ—レート化ã•れã€``{{ }}`` ã®è¿½åŠ ã¯å›žé¿ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:671 msgid "In most other cases you should always use the brackets, even if previously you could use variables without specifying (like ``loop`` or ``with_`` clauses), as this made it hard to distinguish between an undefined variable and a string." msgstr "ãれ以外ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€ä»¥å‰ã¯ ``loop`` å¥ã¾ãŸã¯ ``with_`` å¥ãªã©ã‚’指定ã—ãªãã¦ã‚‚変数を使用ã§ãã¦ã„ãŸå ´åˆã§ã‚‚ã€å¸¸ã«æ‹¬å¼§ã‚’使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。ç†ç”±ã¯ã€æœªå®šç¾©ã®å¤‰æ•°ã¨æ–‡å­—列を区別ã—ã«ãã„ãŸã‚ã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:674 msgid "Another rule is 'moustaches don't stack'. We often see this:" msgstr "ä»–ã«ã¯ã€Œæ³¢æ‹¬å¼§ã¯ä¸¦ã¹ã¦ä½¿ç”¨ã§ããªã„ã€ã¨ã„ã†ãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã™ãŒã€ã“れã¯é »ç¹ã«è¦‹å—ã‘られã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:680 msgid "The above DOES NOT WORK as you expect, if you need to use a dynamic variable use the following as appropriate:" msgstr "上記ã®ä¾‹ã¯æƒ³å®šé€šã‚Šã€æ©Ÿèƒ½ã—ã¾ã›ã‚“。動的変数を使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã¯ã€é𿙂ã€ä»¥ä¸‹ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:686 msgid "For 'non host vars' you can use the :ref:`vars lookup` plugin:" msgstr "「non host varsã€ã®å ´åˆã«ã¯ã€:ref:`vars lookup` プラグインを使用ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:696 msgid "Why don't you ship ansible in wheel format (or other packaging format) ?" msgstr "wheel å½¢å¼ (ã¾ãŸã¯ãã®ä»–ã®ãƒ‘ッケージ形å¼) ã§ ansible ãŒåŒæ¢±ã•れãªã„ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:698 msgid "In most cases it has to do with maintainability. There are many ways to ship software and we do not have the resources to release Ansible on every platform. In some cases there are technical issues. For example, our dependencies are not present on Python Wheels." msgstr "多ãã®å ´åˆã«ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒã§ãã‚‹ã‹ã©ã†ã‹ã«é–¢ä¿‚ã—ã¾ã™ã€‚ソフトウェアをæä¾›ã™ã‚‹æ–¹æ³•ã¯å¤šæ•°ã‚りã€å…¨ãƒ—ラットフォーム㧠Ansible をリリースã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ãŒã‚りã¾ã›ã‚“。場åˆã«ã‚ˆã£ã¦ã¯ã€æŠ€è¡“çš„ãªå•題ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€Python Wheel ã«ã¯ä¾å­˜é–¢ä¿‚ãŒã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/faq.rst:705 msgid "How do I get the original ansible_host when I delegate a task?" msgstr "タスクを委譲ã—ãŸå ´åˆã«å…ƒã® ansible_host ã‚’ã©ã®ã‚ˆã†ã«å–å¾—ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:707 msgid "As the documentation states, connection variables are taken from the ``delegate_to`` host so ``ansible_host`` is overwritten, but you can still access the original via ``hostvars``::" msgstr "ドキュメントã«è¨˜è¼‰ã•れã¦ã„るよã†ã«ã€æŽ¥ç¶šå¤‰æ•°ã¯ ``delegate_to`` ホストã‹ã‚‰å–å¾—ã•れるãŸã‚ã€``ansible_host`` ã¯ä¸Šæ›¸ãã•れã¾ã™ãŒã€``hostvars`` を使用ã—ã¦å…ƒã® ansible_host ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:712 msgid "This works for all overridden connection variables, like ``ansible_user``, ``ansible_port``, and so on." msgstr "ã“れã¯ã€``ansible_user``ã€``ansible_port`` ãªã©ã®ã‚ˆã†ã«ã€ã™ã¹ã¦ã®ä¸Šæ›¸ãã•ã‚ŒãŸæŽ¥ç¶šå¤‰æ•°ã«æœ‰åйã§ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:718 msgid "How do I fix 'protocol error: filename does not match request' when fetching a file?" msgstr "ファイルã®å–得時ã®ã€Œprotocol error: filename does not match requestã€ã®ã‚¨ãƒ©ãƒ¼ã¯ã©ã®ã‚ˆã†ã«ä¿®æ­£ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:720 msgid "Since release ``7.9p1`` of OpenSSH there is a `bug `_ in the SCP client that can trigger this error on the Ansible controller when using SCP as the file transfer mechanism::" msgstr "OpenSSH ã®ãƒªãƒªãƒ¼ã‚¹ ``7.9p1`` ã§ã¯ã€SCP クライアント㫠`bug `_ ãŒã‚りã€ãƒ•ァイル転é€ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã¨ã—㦠SCP を使用ã™ã‚‹å ´åˆã«ã€Ansible コントローラーã§ä»¥ä¸‹ã®ã‚¨ãƒ©ãƒ¼ãŒå‡ºåŠ›ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:725 msgid "In these releases, SCP tries to validate that the path of the file to fetch matches the requested path. The validation fails if the remote filename requires quotes to escape spaces or non-ascii characters in its path. To avoid this error:" msgstr "æ–°ã—ã„リリースã§ã¯ã€SCP ã¯ã€å–å¾—ã™ã‚‹ãƒ•ァイルã®ãƒ‘スãŒè¦æ±‚ã—ãŸãƒ‘スã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’検証ã—よã†ã¨ã—ã¾ã™ã€‚リモートã®ãƒ•ァイルåãŒã€ãƒ‘スã§ã‚¹ãƒšãƒ¼ã‚¹ã‚„ ASCII æ–‡å­—ä»¥å¤–ã®æ–‡å­—を引用符ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã¯ã€æ¤œè¨¼ã«å¤±æ•—ã—ã¾ã™ã€‚ã“ã®ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:733 msgid "Use SFTP instead of SCP by setting ``scp_if_ssh`` to ``smart`` (which tries SFTP first) or to ``False``. You can do this in one of four ways:" msgstr "``scp_if_ssh`` ã‚’ ``smart`` (先㫠SFTP を試ã™)ã€ã¾ãŸã¯ ``False`` ã«è¨­å®šã—ã¦ã€SCP ã®ä»£ã‚り㫠SFTP を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:730 msgid "Rely on the default setting, which is ``smart`` - this works if ``scp_if_ssh`` is not explicitly set anywhere" msgstr "``smart`` ã®ãƒ‡ãƒ•ォルトã®è¨­å®šã«ä¾å­˜ã—ã¾ã™ã€‚``scp_if_ssh`` ãŒæ˜Žç¤ºçš„ã«ã©ã“ã«ã‚‚設定ã•れã¦ã„ãªã„å ´åˆã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:731 msgid "Set a :ref:`host variable ` or :ref:`group variable ` in inventory: ``ansible_scp_if_ssh: False``" msgstr "インベントリー㫠:ref:`ホスト変数 ` ã¾ãŸã¯ :ref:`グループ変数 ` を設定ã—ã¾ã™ (``ansible_scp_if_ssh: False``)。" #: ../../rst/reference_appendices/faq.rst:732 msgid "Set an environment variable on your control node: ``export ANSIBLE_SCP_IF_SSH=False``" msgstr "コントロールノードã§ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ (``export ANSIBLE_SCP_IF_SSH=False``)。" #: ../../rst/reference_appendices/faq.rst:733 msgid "Pass an environment variable when you run Ansible: ``ANSIBLE_SCP_IF_SSH=smart ansible-playbook``" msgstr "Ansible を実行ã™ã‚‹ã¨ãã«ç’°å¢ƒå¤‰æ•°ã‚’渡ã—ã¾ã™ (``ANSIBLE_SCP_IF_SSH=smart ansible-playbook``)。" #: ../../rst/reference_appendices/faq.rst:734 msgid "Modify your ``ansible.cfg`` file: add ``scp_if_ssh=False`` to the ``[ssh_connection]`` section" msgstr "``ansible.cfg`` ファイルã®å¤‰æ›´: ``scp_if_ssh=False`` ã‚’ ``[ssh_connection]`` セクションã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:738 msgid "If you must use SCP, set the ``-T`` arg to tell the SCP client to ignore path validation. You can do this in one of three ways:" msgstr "SCP を使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``-T`` 引数を設定ã—ã¦ã€SCP クライアントã«ãƒ‘ã‚¹ã®æ¤œè¨¼ã‚’無視ã™ã‚‹ã‚ˆã†ã«æŒ‡ç¤ºã—ã¾ã™ã€‚以下㮠3 ã¤ã®æ–¹æ³•ã®ã„ãšã‚Œã‹ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:736 msgid "Set a :ref:`host variable ` or :ref:`group variable `: ``ansible_scp_extra_args=-T``," msgstr ":ref:`ホスト変数 ` ã¾ãŸã¯ :ref:`グループ変数 ` を設定ã—ã¾ã™ (``ansible_scp_extra_args=-T``)。" #: ../../rst/reference_appendices/faq.rst:737 msgid "Export or pass an environment variable: ``ANSIBLE_SCP_EXTRA_ARGS=-T``" msgstr "環境変数をエクスãƒãƒ¼ãƒˆã™ã‚‹ã‹ã€æ¸¡ã—ã¾ã™ (``ANSIBLE_SCP_EXTRA_ARGS=-T``)。" #: ../../rst/reference_appendices/faq.rst:738 msgid "Modify your ``ansible.cfg`` file: add ``scp_extra_args=-T`` to the ``[ssh_connection]`` section" msgstr "``ansible.cfg`` ファイルã®å¤‰æ›´: ``scp_extra_args=-T`` ã‚’ ``[ssh_connection]`` セクションã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:740 msgid "If you see an ``invalid argument`` error when using ``-T``, then your SCP client is not performing filename validation and will not trigger this error." msgstr "``-T`` ã®ä½¿ç”¨æ™‚ã« ``invalid argument`` エラーãŒè¡¨ç¤ºã•れる場åˆã¯ã€SCP クライアントãŒãƒ•ァイルåを検証ã—ã¦ãŠã‚‰ãšã€ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ç™ºç”Ÿã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/faq.rst:745 msgid "Does Ansible support multiple factor authentication 2FA/MFA/biometrics/finterprint/usbkey/OTP/..." msgstr "Ansible ã§ã¯ã€è¤‡æ•°ã®ãƒ•ァクターèªè¨¼ 2FA/MFA/biometrics/finterprint/usbkey/OTP/... ãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã‹" #: ../../rst/reference_appendices/faq.rst:747 msgid "No, Ansible is designed to execute multiple tasks against multiple targets, minimizing user interaction. As with most automation tools, it is not compatible with interactive security systems designed to handle human interaction. Most of these systems require a secondary prompt per target, which prevents scaling to thousands of targets. They also tend to have very short expiration periods so it requires frequent reauthorization, also an issue with many hosts and/or a long set of tasks." msgstr "ã„ã„ãˆã€Ansible ã¯è¤‡æ•°ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«å¯¾ã—ã¦è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ãŠã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ“作を最å°é™ã«æŠ‘ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã®è‡ªå‹•化ツールã¨åŒæ§˜ã«ã€äººé–“ã®ç›¸äº’作用を処ç†ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れãŸã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã¨ã®äº’æ›æ€§ã¯ã‚りã¾ã›ã‚“。ã“れらã®ã‚·ã‚¹ãƒ†ãƒ ã®ã»ã¨ã‚“ã©ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã”ã¨ã«ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼ãƒ—ロンプトを必è¦ã¨ã™ã‚‹ãŸã‚ã€æ•°åƒã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«æ‹¡å¼µã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ã¾ãŸã€ã“れらã®ã‚·ã‚¹ãƒ†ãƒ ã¯æœ‰åŠ¹æœŸé™ãŒéžå¸¸ã«çŸ­ã„ãŸã‚ã€å†èªè¨¼ãŒé »ç¹ã«å¿…è¦ã¨ãªã‚Šã¾ã™ãŒã€ã“れも多ãã®ãƒ›ã‚¹ãƒˆã‚„é•·ã„タスクセットã§ã¯å•題ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:753 msgid "In such environments we recommend securing around Ansible's execution but still allowing it to use an 'automation user' that does not require such measures. With AWX or the :ref:`Red Hat Ansible Automation Platform `, administrators can set up RBAC access to inventory, along with managing credentials and job execution." msgstr "ã“ã®ã‚ˆã†ãªç’°å¢ƒã§ã¯ã€Ansible ã®å®Ÿè¡Œã‚’ä¿è­·ã—ãªãŒã‚‰ã€ãã®ã‚ˆã†ãªæ‰‹æ®µã‚’å¿…è¦ã¨ã—ãªã„「自動化ユーザーã€ã®ä½¿ç”¨ã‚’許å¯ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚AWX ã¾ãŸã¯ :ref:`Red Hat Ansible Automation Platform ` を使用ã™ã‚‹ã¨ã€ç®¡ç†è€…ãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¸ã® RBAC アクセスを設定ã—ã€èªè¨¼æƒ…å ±ã¨ã‚¸ãƒ§ãƒ–ã®å®Ÿè¡Œã‚’管ç†ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:760 msgid "The 'validate' option is not enough for my needs, what do I do?" msgstr "弊社ã®è¦ä»¶ã«ã¯ã€ã€Œvalidateã€ã‚ªãƒ—ションã¯å分ã§ã¯ã‚りã¾ã›ã‚“。ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã—ょã†ã‹ï¼Ÿ" #: ../../rst/reference_appendices/faq.rst:762 msgid "Many Ansible modules that create or update files have a ``validate`` option that allows you to abort the update if the validation command fails. This uses the temporary file Ansible creates before doing the final update. In many cases this does not work since the validation tools for the specific application require either specific names, multiple files or some other factor that is not present in this simple feature." msgstr "ファイル作æˆã¾ãŸã¯æ›´æ–°ã® Ansible モジュールã®å¤šãã«ã¯ ``validate`` オプションãŒã‚ã‚Šã€æ¤œè¨¼ã‚³ãƒžãƒ³ãƒ‰ãŒå¤±æ•—ã—ãŸå ´åˆã«æ›´æ–°ã‚’中止ã§ãã¾ã™ã€‚ã“れã¯ã€æœ€çµ‚更新を行ã†å‰ã« Ansible ãŒä½œæˆã™ã‚‹ä¸€æ™‚ファイルを使用ã—ã¾ã™ã€‚多ãã®å ´åˆã€ç‰¹å®šã®ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ¤œè¨¼ãƒ„ールã«ã¯ç‰¹å®šã®åå‰ã€è¤‡æ•°ã®ãƒ•ァイル以外ã«ã€ã“ã®å˜ç´”ãªæ©Ÿèƒ½ã«å«ã¾ã‚Œã¦ã„ãªã„ä»–ã®è¦ç´ ãŒå¿…è¦ã«ãªã‚‹ãŸã‚ã€ã“ã‚Œã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/faq.rst:766 msgid "For these cases you have to handle the validation and restoration yourself. The following is a simple example of how to do this with block/rescue and backups, which most file based modules also support:" msgstr "ã“ã®ã‚ˆã†ãªå ´åˆã¯ã€æ¤œè¨¼ã¨å¾©å…ƒã‚’自分ã§å‡¦ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã¯ã€ãƒ–ロック/レスキューãŠã‚ˆã³ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã§ã“ã®ä½œæ¥­ã‚’行ã†ç°¡å˜ãªä¾‹ã§ã€ã»ã¨ã‚“ã©ã®ãƒ•ァイルベースã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:799 msgid "How do I submit a change to the documentation?" msgstr "ドキュメントã¸ã®å¤‰æ›´ã‚’æå‡ºã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹" #: ../../rst/reference_appendices/faq.rst:801 msgid "Documentation for Ansible is kept in the main project git repository, and complete instructions for contributing can be found in the docs README `viewable on GitHub `_. Thanks!" msgstr "Ansible ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ä¸»è¦ãƒ—ロジェクト㮠git リãƒã‚¸ãƒˆãƒªãƒ¼ã«ä¿å­˜ã•れã¦ãŠã‚Šã€è²¢çŒ®ã«é–¢ã™ã‚‹èª¬æ˜ŽãŒ `GitHub ã§ç¢ºèªã§ãã‚‹ `_ README ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/faq.rst:807 msgid "I don't see my question here" msgstr "ã“ã“ã«è¨˜è¼‰ã•れã¦ã„る以外ã«è³ªå•ãŒã‚りã¾ã™" #: ../../rst/reference_appendices/faq.rst:809 msgid "If you have not found an answer to your questions, you can ask on one of our mailing lists or chat channels. For instructions on subscribing to a list or joining a chat channel, see :ref:`communication`." msgstr "ã”䏿˜Žãªç‚¹ãŒã”ã–ã„ã¾ã—ãŸã‚‰ã€ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¾ãŸã¯ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã®ã„ãšã‚Œã‹ã‚’å°‹ã­ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚リストã®ã‚µãƒ–スクライブ方法やã€ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法ã¯ã€:ref:`communication`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/faq.rst:814 #: ../../rst/reference_appendices/glossary.rst:530 #: ../../rst/reference_appendices/test_strategies.rst:268 msgid "An introduction to playbooks" msgstr "Playbook ã®æ¦‚è¦" #: ../../rst/reference_appendices/faq.rst:815 #: ../../rst/reference_appendices/glossary.rst:531 msgid ":ref:`playbooks_best_practices`" msgstr ":ref:`playbooks_best_practices`" #: ../../rst/reference_appendices/faq.rst:816 #: ../../rst/reference_appendices/glossary.rst:532 msgid "Tips and tricks for playbooks" msgstr "Playbook ã®ãƒ’ントã¨è£æŠ€" #: ../../rst/reference_appendices/faq.rst:817 #: ../../rst/reference_appendices/test_strategies.rst:271 msgid "`User Mailing List `_" msgstr "`メーリングリストã®ä½¿ç”¨ `_" #: ../../rst/reference_appendices/faq.rst:818 #: ../../rst/reference_appendices/glossary.rst:534 #: ../../rst/reference_appendices/test_strategies.rst:272 msgid "Have a question? Stop by the google group!" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google Group ã‚’ã”覧ãã ã•ã„。" #: ../../rst/reference_appendices/general_precedence.rst:4 msgid "Controlling how Ansible behaves: precedence rules" msgstr "Ansible ã®å‹•作ã®åˆ¶å¾¡: 優先順ä½ã®ãƒ«ãƒ¼ãƒ«" #: ../../rst/reference_appendices/general_precedence.rst:6 msgid "To give you maximum flexibility in managing your environments, Ansible offers many ways to control how Ansible behaves: how it connects to managed nodes, how it works once it has connected. If you use Ansible to manage a large number of servers, network devices, and cloud resources, you may define Ansible behavior in several different places and pass that information to Ansible in several different ways. This flexibility is convenient, but it can backfire if you do not understand the precedence rules." msgstr "Ansible ã«ã¯ã€ç’°å¢ƒã®ç®¡ç†ã«æœ€å¤§é™ã®æŸ”軟性をもãŸã›ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ã€ç®¡ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã¸ã®æŽ¥ç¶šæ–¹æ³•ã‚„ã€æŽ¥ç¶šå¾Œã®å‹•作ãªã©ã€Ansible ã®å‹•作を制御ã™ã‚‹æ‰‹æ®µãŒå¤šæ•°ã‚りã¾ã™ã€‚Ansible を使用ã—ã¦å¤šæ•°ã®ã‚µãƒ¼ãƒãƒ¼ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒªã‚½ãƒ¼ã‚¹ã‚’管ç†ã™ã‚‹å ´åˆã«ã€Ansible ã®å‹•作をã•ã¾ã–ã¾ãªå ´æ‰€ã§å®šç¾©ã—ã¦ã€ã•ã¾ã–ã¾ãªæ–¹æ³•ã§ Ansible ã«ãã®æƒ…報を渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚柔軟性ãŒã‚ã‚‹ã¨ä¾¿åˆ©ã§ã™ãŒã€å„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ«ã‚’ç†è§£ã—ã¦ã„ãªã„å ´åˆã¯ã€é€†åŠ¹æžœã¨ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:10 msgid "These precedence rules apply to any setting that can be defined in multiple ways (by configuration settings, command-line options, playbook keywords, variables)." msgstr "ã“ã®ã‚ˆã†ãªå„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ«ã¯ã€è¤‡æ•°ã®æ–¹æ³•ã§å®šç¾©ã§ãるオプション (設定オプションã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€Playbook キーワードã€å¤‰æ•°) ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:16 msgid "Precedence categories" msgstr "優先順ä½ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼" #: ../../rst/reference_appendices/general_precedence.rst:18 msgid "Ansible offers four sources for controlling its behavior. In order of precedence from lowest (most easily overridden) to highest (overrides all others), the categories are:" msgstr "Ansible ã§ã¯ã€å‹•作ã®åˆ¶å¾¡ã«ä½¿ç”¨ã™ã‚‹ã‚½ãƒ¼ã‚¹ãŒ 4 ã¤ã‚りã¾ã™ã€‚カテゴリーã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ (優先順ä½ã®ä½Žã„ã‚‚ã®ã€ã¤ã¾ã‚Šæœ€ã‚‚ç°¡å˜ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れるもã®ã‹ã‚‰ã€é«˜ã„ã‚‚ã®ã€ã¤ã¾ã‚Šä»–ã®ã™ã¹ã¦ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚‚ã®ã«ä¸¦ã¹ã¦ã„ã¾ã™)。" #: ../../rst/reference_appendices/general_precedence.rst:20 #: ../../rst/reference_appendices/general_precedence.rst:30 msgid "Configuration settings" msgstr "設定オプション" #: ../../rst/reference_appendices/general_precedence.rst:21 #: ../../rst/reference_appendices/general_precedence.rst:42 msgid "Command-line options" msgstr "コマンドラインオプション" #: ../../rst/reference_appendices/general_precedence.rst:22 #: ../../rst/reference_appendices/general_precedence.rst:61 msgid "Playbook keywords" msgstr "Playbook キーワード" #: ../../rst/reference_appendices/general_precedence.rst:25 msgid "Each category overrides any information from all lower-precedence categories. For example, a playbook keyword will override any configuration setting." msgstr "å„カテゴリーã¯ã€ãã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚ˆã‚Šã‚‚優先順ä½ã®ä½Žã„カテゴリーã‹ã‚‰ã®æƒ…報をã™ã¹ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Playbook キーワードã¯ã€è¨­å®šã‚ªãƒ—ションをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:27 msgid "Within each precedence category, specific rules apply. However, generally speaking, 'last defined' wins and overrides any previous definitions." msgstr "å„優先順ä½ã‚«ãƒ†ã‚´ãƒªãƒ¼ã§ã€å›ºæœ‰ã®ãƒ«ãƒ¼ãƒ«ãŒé©ç”¨ã•れã¾ã™ã€‚ãŸã ã—ã€ä¸€èˆ¬çš„ã«ã€Œæœ€å¾Œã«å®šç¾© (last defined)ã€ã—ãŸå†…容ã®å„ªå…ˆåº¦ãŒé«˜ãã€ä»¥å‰ã®å®šç¾©ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:32 msgid ":ref:`Configuration settings` include both values from the ``ansible.cfg`` file and environment variables. Within this category, values set in configuration files have lower precedence. Ansible uses the first ``ansible.cfg`` file it finds, ignoring all others. Ansible searches for ``ansible.cfg`` in these locations in order:" msgstr ":ref:`æ§‹æˆè¨­å®š` ã«ã¯ã€``ansible.cfg`` ファイルã¨ç’°å¢ƒå¤‰æ•°ã‹ã‚‰ã®ä¸¡æ–¹ã®å€¤ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã§ã¯ã€è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«æŒ‡å®šã—ãŸå€¤ã®ã»ã†ãŒå„ªå…ˆé †ä½ãŒä½Žããªã‚Šã¾ã™ã€‚Ansible ã§ã¯æœ€åˆã«è¦‹ã¤ã‹ã£ãŸ ``ansible.cfg`` を使用ã—ã€ä»–ã¯ã™ã¹ã¦ç„¡è¦–ã—ã¾ã™ã€‚Ansible ã¯ã€ã“れらã®å ´æ‰€ã§é †ç•ªã« ``ansible.cfg`` ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:39 msgid "Environment variables have a higher precedence than entries in ``ansible.cfg``. If you have environment variables set on your control node, they override the settings in whichever ``ansible.cfg`` file Ansible loads. The value of any given environment variable follows normal shell precedence: the last value defined overwrites previous values." msgstr "環境変数ã¯ã€``ansible.cfg`` ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚コントロールノードã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€Ansible ãŒèª­ã¿è¾¼ã‚€ ``ansible.cfg`` ファイルã®è¨­å®šã‚ˆã‚Šã‚‚ã€ç’°å¢ƒå¤‰æ•°ãŒå„ªå…ˆã•れã¾ã™ã€‚指定ã•れãŸç’°å¢ƒå¤‰æ•°ã®å€¤ã¯ã€shell ã®é€šå¸¸ã®å„ªå…ˆé †ä½ (最後ã«å®šç¾©ã—ãŸå€¤ãŒã€ãれ以å‰ã®å€¤ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰) ã«æº–æ‹ ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:44 msgid "Any command-line option will override any configuration setting." msgstr "コマンドラインオプションã¯ã€è¨­å®šã‚ªãƒ—ションをã™ã¹ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:46 msgid "When you type something directly at the command line, you may feel that your hand-crafted values should override all others, but Ansible does not work that way. Command-line options have low precedence - they override configuration only. They do not override playbook keywords, variables from inventory or variables from playbooks." msgstr "コマンドラインã«ç›´æŽ¥å…¥åŠ›ã™ã‚‹ã¨ã€æ‰‹å‹•ã§å…¥åŠ›ã—ãŸå€¤ãŒã€ãれ以外ã®è¨­å®šã‚’ã™ã¹ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚ˆã†ã«æ„Ÿã˜ã¾ã™ãŒã€Ansible ã®ä»•様ã¯ç•°ãªã‚Šã¾ã™ã€‚コマンドラインオプションã®å„ªå…ˆé †ä½ã¯ä½Žã„ãŸã‚ã€ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã‚‹ã®ã¯ã€è¨­å®šã®ã¿ã§ã™ã€‚Playbook ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚„ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰ã®å¤‰æ•°ã€ã¾ãŸã¯ Playbook ã‹ã‚‰å¤‰æ•°ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/general_precedence.rst:48 msgid "You can override all other settings from all other sources in all other precedence categories at the command line by :ref:`general_precedence_extra_vars`, but that is not a command-line option, it is a way of passing a :ref:`variable`." msgstr ":ref:`general_precedence_extra_vars` ã«ã‚ˆã‚Šã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã€ä»–ã®å„ªå…ˆé †ä½ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®ä»–ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®ä»–ã®è¨­å®šã‚’ã™ã¹ã¦ä¸Šæ›¸ãã§ãã¾ã™ã€‚ãŸã ã—ã€ã“れã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã§ã¯ãªãã€:ref:`variable` ã‚’æ¸¡ã™æ‰‹æ®µã¨ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:50 msgid "At the command line, if you pass multiple values for a parameter that accepts only a single value, the last defined value wins. For example, this :ref:`ad hoc task` will connect as ``carol``, not as ``mike``::" msgstr "コマンドラインã§ã€å˜å€¤ã®ã¿ã‚’å—ã‘入れるパラメーターã«å¤šå€¤ã‚’渡ã™ã¨ã€æœ€å¾Œã«å®šç¾©ã•れãŸå€¤ãŒå„ªå…ˆã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã® :ref:`アドホックタスク` ã¯ã€``mike`` ã§ã¯ãªãã€``carol`` ã¨ã—ã¦æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:54 msgid "Some parameters allow multiple values. In this case, Ansible will append all values from the hosts listed in inventory files inventory1 and inventory2::" msgstr "パラメーターã«ã‚ˆã£ã¦ã¯ã€å¤šå€¤ã‚’使用ã§ãã¾ã™ã€‚以下ã®å ´åˆã«ã¯ã€Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル「inventory1ã€ãŠã‚ˆã³ã€Œinventory2ã€ã«è¨˜è¼‰ã•れã¦ã„るホストã‹ã‚‰ã®å€¤ã‚’ã™ã¹ã¦è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:58 msgid "The help for each :ref:`command-line tool` lists available options for that tool." msgstr "å„ :ref:`コマンドラインツール` ã®ãƒ˜ãƒ«ãƒ—ã¯ã€å¯¾è±¡ã®ãƒ„ールã§åˆ©ç”¨å¯èƒ½ãªã‚ªãƒ—ションを表示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:63 msgid "Any :ref:`playbook keyword` will override any command-line option and any configuration setting." msgstr ":ref:`Playbook キーワード` ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã¨ã€æ§‹æˆè¨­å®šã‚’ã™ã¹ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:65 msgid "Within playbook keywords, precedence flows with the playbook itself; the more specific wins against the more general:" msgstr "Playbook キーワード内ã®å„ªå…ˆé †ä½ã¯ã€Playbook ã®å†…容ã«ã‚ˆã‚Šå·¦å³ã•れã¾ã™ (一般的ãªè¨­å®šã‚ˆã‚Šå…·ä½“çš„ãªè¨­å®šãŒå„ªå…ˆã•れã¾ã™)。" #: ../../rst/reference_appendices/general_precedence.rst:67 msgid "play (most general)" msgstr "プレイ (最も一般的)" #: ../../rst/reference_appendices/general_precedence.rst:68 msgid "blocks/includes/imports/roles (optional and can contain tasks and each other)" msgstr "blocks/includes/imports/roles (ä»»æ„ã§ã€ã‚¿ã‚¹ã‚¯ã‚’å«ã‚ã‚‹ã“ã¨ã‚‚ã€ç›¸äº’ã«å«ã‚ã‚‹ã“ã¨ã‚‚å¯èƒ½)" #: ../../rst/reference_appendices/general_precedence.rst:69 msgid "tasks (most specific)" msgstr "タスク (最も具体的)" #: ../../rst/reference_appendices/general_precedence.rst:71 msgid "A simple example::" msgstr "ç°¡å˜ãªä¾‹::" #: ../../rst/reference_appendices/general_precedence.rst:83 msgid "In this example, the ``connection`` keyword is set to ``ssh`` at the play level. The first task inherits that value, and connects using ``ssh``. The second task inherits that value, overrides it, and connects using ``paramiko``. The same logic applies to blocks and roles as well. All tasks, blocks, and roles within a play inherit play-level keywords; any task, block, or role can override any keyword by defining a different value for that keyword within the task, block, or role." msgstr "ã“ã®ä¾‹ã§ã¯ã€``connection`` キーワードã¯ãƒ—レイレベル㧠``ssh`` ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚最åˆã®ã‚¿ã‚¹ã‚¯ã¯ãã®å€¤ã‚’継承ã—ã€``ssh`` を使用ã—ã¦æŽ¥ç¶šã—ã¾ã™ã€‚2 番目ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãã®å€¤ã‚’継承ã—ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã€``paramiko`` を使用ã—ã¦æŽ¥ç¶šã—ã¾ã™ã€‚ブロックやロールã§ã‚‚åŒã˜ãƒ­ã‚¸ãƒƒã‚¯ãŒé©ç”¨ã•れã¾ã™ã€‚プレイ内ã®ã‚¿ã‚¹ã‚¯ã€ãƒ–ロックã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã¯ã™ã¹ã¦ã€ãƒ—レイレベルã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’継承ã—ã¾ã™ã€‚キーワードよりタスクã€ãƒ–ロックã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’優先ã•ã›ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã€ãƒ–ロックã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã®å¯¾è±¡ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«ç•°ãªã‚‹å€¤ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:86 msgid "Remember that these are KEYWORDS, not variables. Both playbooks and variable files are defined in YAML but they have different significance. Playbooks are the command or 'state description' structure for Ansible, variables are data we use to help make playbooks more dynamic." msgstr "上記ã¯ã€å¤‰æ•°ã§ã¯ãªãã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ã‚ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。Playbook や変数ファイルã¯ã„ãšã‚Œã‚‚ YAML ã§å®šç¾©ã—ã¾ã™ãŒã€ãれãžã‚Œé‡è¦æ€§ãŒç•°ãªã‚Šã¾ã™ã€‚Playbook ã¯ã‚³ãƒžãƒ³ãƒ‰ã¾ãŸã¯ Ansible ã®ã€ŒçŠ¶æ…‹è¨˜è¿°ã€æ§‹é€ ã§ã€å¤‰æ•°ã¯ Playbook をより動的ã«ä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿ã§ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:94 msgid "Any variable will override any playbook keyword, any command-line option, and any configuration setting." msgstr "変数ã¯ã€Playbook ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã€æ§‹æˆè¨­å®šã‚’ã™ã¹ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:96 msgid "Variables that have equivalent playbook keywords, command-line options, and configuration settings are known as :ref:`connection_variables`. Originally designed for connection parameters, this category has expanded to include other core variables like the temporary directory and the python interpreter." msgstr "åŒç­‰ã® Playbook キーワードã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€ãŠã‚ˆã³æ§‹æˆè¨­å®šã‚’å«ã‚€å¤‰æ•°ã¯ :ref:`connection_variables` ã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯ã€å½“åˆã¯è¨­å®šãƒ‘ラメーターå‘ã‘ã«è¨­è¨ˆã•れã¦ã¾ã—ãŸãŒã€ä¸€æ™‚ディレクトリーや Python インタープリターãªã©ã€ä»–ã®ã‚³ã‚¢å¤‰æ•°ã‚’å«ã‚るよã†ã«æ‹¡å¼µã•れã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/general_precedence.rst:98 msgid "Connection variables, like all variables, can be set in multiple ways and places. You can define variables for hosts and groups in :ref:`inventory`. You can define variables for tasks and plays in ``vars:`` blocks in :ref:`playbooks`. However, they are still variables - they are data, not keywords or configuration settings. Variables that override playbook keywords, command-line options, and configuration settings follow the same rules of :ref:`variable precedence ` as any other variables." msgstr "接続変数ã¯ã™ã¹ã¦ã®å¤‰æ•°ã¨åŒæ§˜ã€è¤‡æ•°ã®æ‰‹æ³•や場所ã§è¨­å®šã§ãã¾ã™ã€‚:ref:`インベントリー` ã§ãƒ›ã‚¹ãƒˆã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ã‚’定義ã§ãã¾ã™ã€‚:ref:`Playbook` ã® ``vars:`` ブロックã«ã€ã‚¿ã‚¹ã‚¯ã¨ãƒ—レイã®å¤‰æ•°ã‚’定義ã§ãã¾ã™ã€‚ãŸã ã—ã€ä¸Šè¨˜ã¯ã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚„æ§‹æˆè¨­å®šã§ã¯ãªãã€ãƒ‡ãƒ¼ã‚¿ã‚’æ ¼ç´ã™ã‚‹å¤‰æ•°ã§ã™ã€‚Playbook キーワードã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€ãŠã‚ˆã³è¨­å®šã‚ªãƒ—ションをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹å¤‰æ•°ã¯ã€ä»–ã®å¤‰æ•°ãŒä½¿ç”¨ã™ã‚‹ :ref:`変数ã®å„ªå…ˆé †ä½ ` ã¨åŒã˜ãƒ«ãƒ¼ãƒ«ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:100 msgid "When set in a playbook, variables follow the same inheritance rules as playbook keywords. You can set a value for the play, then override it in a task, block, or role::" msgstr "変数ã¯ã€Playbook ã«è¨­å®šã•れるã¨ã€Playbook キーワードã¨åŒã˜ç¶™æ‰¿ãƒ«ãƒ¼ãƒ«ã«å¾“ã„ã¾ã™ã€‚プレイã®å€¤ã‚’設定ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã€ãƒ–ロックã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®å€¤ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:125 msgid "Variable scope: how long is a value available?" msgstr "変数ã®ç¯„囲: å€¤ãŒæœ‰åŠ¹ãªæœŸé–“" #: ../../rst/reference_appendices/general_precedence.rst:127 msgid "Variable values set in a playbook exist only within the playbook object that defines them. These 'playbook object scope' variables are not available to subsequent objects, including other plays." msgstr "Playbook ã«è¨­å®šã—ãŸå¤‰æ•°ã®å€¤ã¯ã€ãã®å€¤ã‚’定義ã™ã‚‹ Playbook オブジェクト内ã«ã®ã¿å­˜åœ¨ã—ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªã€ŒPlaybook オブジェクトã®ç¯„囲ã€ã®å¤‰æ•°ã¯ã€ä»–ã®ãƒ—レイãªã©ã€å¾Œç¶šã®ã‚ªãƒ–ジェクトã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/reference_appendices/general_precedence.rst:129 msgid "Variable values associated directly with a host or group, including variables defined in inventory, by vars plugins, or using modules like :ref:`set_fact` and :ref:`include_vars`, are available to all plays. These 'host scope' variables are also available via the ``hostvars[]`` dictionary." msgstr "インベントリーã€vars プラグインã€:ref:`set_fact` ã‚„ :ref:`include_vars` ã¨ã„ã£ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½¿ç”¨ãªã©ã€ãƒ›ã‚¹ãƒˆã‚„グループã«ç›´æŽ¥é–¢é€£ä»˜ã‘られãŸå¤‰æ•°å€¤ã¯ã€å…¨ãƒ—レイã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã¾ãŸã€ã“れらã®ã€Œãƒ›ã‚¹ãƒˆç¯„囲ã€å¤‰æ•°ã¯ã€``hostvars[]`` ディクショナリーã‹ã‚‰åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:134 msgid "Using ``-e`` extra variables at the command line" msgstr "コマンドラインã§ã®è¿½åŠ å¤‰æ•° (``-e``) ã®ä½¿ç”¨" #: ../../rst/reference_appendices/general_precedence.rst:136 msgid "To override all other settings in all other categories, you can use extra variables: ``--extra-vars`` or ``-e`` at the command line. Values passed with ``-e`` are variables, not command-line options, and they will override configuration settings, command-line options, and playbook keywords as well as variables set elsewhere. For example, this task will connect as ``brian`` not as ``carol``::" msgstr "ä»–ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®å…¨è¨­å®šã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã«ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§è¿½åŠ å¤‰æ•° (``--extra-vars`` ã¾ãŸã¯ ``-e``) を使用ã—ã¾ã™ã€‚``-e`` ã§æ¸¡ã•れる値ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã§ã¯ãªã変数ã§ã€ä»–ã§è¨­å®šã—ãŸå¤‰æ•°ã‚’ã¯ã˜ã‚ã€æ§‹æˆè¨­å®šã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€Playbook キーワードをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€``carol`` ã§ã¯ãªã ``brian`` ã¨ã—ã¦æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/general_precedence.rst:140 msgid "You must specify both the variable name and the value with ``--extra-vars``." msgstr "変数åã¨å€¤ã¯ã€``--extra-vars`` ã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:2 msgid "Glossary" msgstr "用語集" #: ../../rst/reference_appendices/glossary.rst:4 msgid "The following is a list (and re-explanation) of term definitions used elsewhere in the Ansible documentation." msgstr "以下ã¯ã€Ansible ドキュメントã®å„所ã§ä½¿ç”¨ã•れる用語ã®å®šç¾© (ã¨å†èª¬) 一覧ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:6 msgid "Consult the documentation home page for the full documentation and to see the terms in context, but this should be a good resource to check your knowledge of Ansible's components and understand how they fit together. It's something you might wish to read for review or when a term comes up on the mailing list." msgstr "全ドキュメントã€ãŠã‚ˆã³æ–‡ä¸­ã§ç”¨èªžã‚’確èªã™ã‚‹ã«ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€Ansible ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®èª¬æ˜Žã‚’読ã¿ã€ã©ã®ã‚ˆã†ã«çµ„ã¿åˆã‚ã•れã¦ã„ã‚‹ã‹ã‚’ç†è§£ã™ã‚‹ã®ã«é©ã—ã¦ã„ã¾ã™ã€‚レビューã®ãŸã‚ã«ã€ã¾ãŸã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§ç”¨èªžãŒä½¿ç”¨ã•ã‚ŒãŸæ™‚ãªã©ã«ã”利用ã«ãªã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:11 msgid "Action" msgstr "アクション" #: ../../rst/reference_appendices/glossary.rst:13 msgid "An action is a part of a task that specifies which of the modules to run and which arguments to pass to that module. Each task can have only one action, but it may also have other parameters." msgstr "アクションã¯ã‚¿ã‚¹ã‚¯ã®ä¸€éƒ¨ã‚’指ã—ã€å®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ¸¡ã™å¼•数を指定ã—ã¾ã™ã€‚å„タスクã«ã¯ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ 1 ã¤ã ã‘指定ã§ãã¾ã™ãŒã€ä»–ã«è¤‡æ•°ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:16 msgid "Ad Hoc" msgstr "アドホック" #: ../../rst/reference_appendices/glossary.rst:18 msgid "Refers to running Ansible to perform some quick command, using :command:`/usr/bin/ansible`, rather than the :term:`orchestration` language, which is :command:`/usr/bin/ansible-playbook`. An example of an ad hoc command might be rebooting 50 machines in your infrastructure. Anything you can do ad hoc can be accomplished by writing a :term:`playbook ` and playbooks can also glue lots of other operations together." msgstr "Ansible を実行ã—ã¦ã€:command:`/usr/bin/ansible-playbook` ã® :term:`オーケストレーション` 言語ã§ã¯ãªãã€:command:`/usr/bin/ansible` を使用ã—ã¦ã‚¯ã‚¤ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚アドホックコマンドã®ä¾‹ã«ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼å†…ã§ã® 50 å°ã®ãƒžã‚·ãƒ³ã‚’å†èµ·å‹•ã™ã‚‹ã“ã¨ãªã©ãŒå«ã¾ã‚Œã¾ã™ã€‚アドホックã«å®Ÿè¡Œã§ãã‚‹ã™ã¹ã¦ã®ã“ã¨ã¯ :term:`playbook ` を作æˆã—ã¦å®Ÿè¡Œã§ãã€Playbook ã¯æ•°å¤šãã®ä»–ã®æ“作を 1 ã¤ã«ã¾ã¨ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:25 msgid "Ansible (the package)" msgstr "Ansible (パッケージ)" #: ../../rst/reference_appendices/glossary.rst:27 msgid "A software package (Python, deb, rpm, and so on) that contains ansible-core and a select group of collections. Playbooks that worked with Ansible 2.9 should still work with the Ansible 2.10 package. See the :file:`ansible-.build` file in the release-specific directory at `ansible-build-data `_ for a list of collections included in Ansible, as well as the included ``ansible-core`` version." msgstr "ansible-core ãŠã‚ˆã³é¸æŠžã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ã‚½ãƒ•トウェアパッケージ (Pythonã€debã€rpm ãªã©)。Ansible 2.9 ã§å‹•作ã—㟠Playbook ã¯ã€Ansible 2.10 パッケージã§ã‚‚動作ã™ã‚‹ã¯ãšã§ã™ã€‚Ansible ã«å«ã¾ã‚Œã¦ã„るコレクションã®ãƒªã‚¹ãƒˆã¨åŒæ¢±ã•れã¦ã„ã‚‹ ``ansible-core`` ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¤ã„ã¦ã¯ã€`ansible-build-data `_ ã®ãƒªãƒªãƒ¼ã‚¹å›ºæœ‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ :file:`ansible-.build` ファイルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:28 msgid "ansible-base" msgstr "ansible-base" #: ../../rst/reference_appendices/glossary.rst:30 msgid "Used only for 2.10. The installable package (RPM/Python/Deb package) generated from the `ansible/ansible repository `_. See ``ansible-core``." msgstr "2.10 ã§ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚`ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã‹ã‚‰ç”Ÿæˆã•れãŸã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¯èƒ½ãªãƒ‘ッケージ (RPM/Python/Deb パッケージ) ã§ã™ã€‚「``ansible-core``ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:31 #: ../../rst/reference_appendices/release_and_maintenance.rst:10 msgid "ansible-core" msgstr "ansible-core" #: ../../rst/reference_appendices/glossary.rst:33 msgid "Name used starting with 2.11. The installable package (RPM/Python/Deb package) generated from the `ansible/ansible repository `_. Contains the command-line tools and the code for basic features and functions, such as copying module code to managed nodes. The ``ansible-core`` package includes a few modules and plugins and allows you to add others by installing collections." msgstr "2.11 以é™ã§ä½¿ç”¨ã•れるåå‰ã€‚`ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã‹ã‚‰ç”Ÿæˆã•れるインストールå¯èƒ½ãªãƒ‘ッケージ (RPM/Python/Deb パッケージ)。コマンドラインツールã¨ã€åŸºæœ¬çš„ãªæ©Ÿèƒ½ãŠã‚ˆã³é–¢æ•° (モジュールコードã®ç®¡ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã¸ã®ã‚³ãƒ”ーãªã©) ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``ansible-core`` パッケージã«ã¯ã„ãã¤ã‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ã§ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:34 msgid "Ansible Galaxy" msgstr "Ansible Galaxy" #: ../../rst/reference_appendices/glossary.rst:36 msgid "An `online resource `_ for finding and sharing Ansible community content. Also, the command-line utility that lets users install individual Ansible Collections, for example`` ansible-galaxy install community.crypto``." msgstr "Ansible コミュニティーã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を見ã¤ã‘ã¦å…±æœ‰ã™ã‚‹ãŸã‚ã® `オンラインリソース `_。ã¾ãŸã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå€‹ã€…ã® Ansible コレクションをインストールã§ãるよã†ã«ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ (`` ansible-galaxy install community.crypto`` ãªã©)。" #: ../../rst/reference_appendices/glossary.rst:37 msgid "Async" msgstr "éžåŒæœŸ" #: ../../rst/reference_appendices/glossary.rst:39 msgid "Refers to a task that is configured to run in the background rather than waiting for completion. If you have a long process that would run longer than the SSH timeout, it would make sense to launch that task in async mode. Async modes can poll for completion every so many seconds or can be configured to \"fire and forget\", in which case Ansible will not even check on the task again; it will just kick it off and proceed to future steps. Async modes work with both :command:`/usr/bin/ansible` and :command:`/usr/bin/ansible-playbook`." msgstr "完了を待ãŸãšã«ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«æ§‹æˆã•れãŸã‚¿ã‚¹ã‚¯ã‚’指ã—ã¾ã™ã€‚SSH タイムアウトよりも長ã実行ã•れる長ã„プロセスãŒã‚ã‚‹å ´åˆã¯ã€ãã®ã‚¿ã‚¹ã‚¯ã‚’éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã™ã‚‹ã“ã¨ã¯ç†ã«ã‹ãªã£ã¦ã„ã¾ã™ã€‚éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ä½•ç§’ã‹ã”ã¨ã«å®Œäº†ã‚’ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ã‚‚ã€ã€Œãƒ•ァイアアンドフォーゲット (自動追尾機能)ã€ã‚ˆã†ã«è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãã®å ´åˆã€Ansible ã¯å†åº¦ã‚¿ã‚¹ã‚¯ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã›ã‚“。起動ã—ã¦æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã«é€²ã¿ã¾ã™ã€‚éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã¯ :command:`/usr/bin/ansible` 㨠:command:`/usr/bin/ansible-playbook` ã®ä¸¡æ–¹ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:47 msgid "Callback Plugin" msgstr "Callback プラグイン" #: ../../rst/reference_appendices/glossary.rst:49 msgid "Refers to some user-written code that can intercept results from Ansible and do something with them. Some supplied examples in the GitHub project perform custom logging, send email, or even play sound effects." msgstr "Ansible ã‹ã‚‰ã®çµæžœã‚’å‚å—ã§ãã€ãれらã«ã¤ã„ã¦ä½•らã‹ã®å‡¦ç†ã‚’行ã†ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆã‚³ãƒ¼ãƒ‰ã‚’指ã—ã¾ã™ã€‚GitHub ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã§æä¾›ã•れã¦ã„る一部ã®ã‚µãƒ³ãƒ—ルã®å®Ÿè¡Œå†…容ã«ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ­ã‚®ãƒ³ã‚°ã‚„メールé€ä¿¡ã€ã•らã«ã¯ã‚µã‚¦ãƒ³ãƒ‰åŠ¹æžœã®ãƒ—レイãªã©ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:53 msgid "Check Mode" msgstr "Check Mode (ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰)" #: ../../rst/reference_appendices/glossary.rst:55 msgid "Refers to running Ansible with the ``--check`` option, which does not make any changes on the remote systems, but only outputs the changes that might occur if the command ran without this flag. This is analogous to so-called \"dry run\" modes in other systems, though the user should be warned that this does not take into account unexpected command failures or cascade effects (which is true of similar modes in other systems). Use this to get an idea of what might happen, but do not substitute it for a good staging environment." msgstr "``--check`` オプションを指定ã—㦠Ansible を実行ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ã‚‚リモートシステムã«å¤‰æ›´ã¯åŠ ãˆã‚‰ã‚Œã‚‹ã“ã¨ã¯ãªãã€ã‚³ãƒžãƒ³ãƒ‰ãŒã“ã®ãƒ•ラグãªã—ã«å®Ÿè¡Œã•れãŸå ´åˆã«ç”Ÿã˜ã‚‹å¯èƒ½æ€§ã®ã‚る変更ã®ã¿ã‚’出力ã—ã¾ã™ã€‚ã“れã¯ã€ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã®ã„ã‚ゆる「ドライランã€ãƒ¢ãƒ¼ãƒ‰ã«é¡žä¼¼ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã“ã®å ´åˆã¯äºˆæœŸã—ãªã„コマンドã®å¤±æ•—やカスケード効果ãŒè€ƒæ…®ã•れãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ (ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã®åŒæ§˜ã®ãƒ¢ãƒ¼ãƒ‰ã«ã¤ã„ã¦ã‚‚åŒã˜ã§ã™)。ã“ã®ãƒ¢ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€èµ·ã“り得るã“ã¨ã®æ¦‚è¦ã‚’把æ¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ã“れãŒé©åˆ‡ãªã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ç’°å¢ƒã®ä»£ã‚りã«ãªã‚‹è¨³ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/glossary.rst:63 msgid "Collection" msgstr "コレクション" #: ../../rst/reference_appendices/glossary.rst:65 msgid "A packaging format for bundling and distributing Ansible content, including plugins, roles, modules, and more. Collections release independent of other collections or ``ansible-core`` so features can be available sooner to users. Some collections are packaged with Ansible (version 2.10 or later). You can install other collections (or other versions of collections) with ``ansible-galaxy collection install ``." msgstr "プラグインã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©ã‚’å«ã‚€ Ansible コンテンツをãƒãƒ³ãƒ‰ãƒ«ã—ã¦é…布ã™ã‚‹ãŸã‚ã®ãƒ‘ッケージングフォーマット。コレクションã¯ä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ ``ansible-core`` ã¨ã¯ç‹¬ç«‹ã—ã¦ãƒªãƒªãƒ¼ã‚¹ã•れるãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚ˆã‚Šæ—©ã機能を利用ã§ãã¾ã™ã€‚一部ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ Ansible (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™) ã§ãƒ‘ッケージ化ã•れã¦ã„ã¾ã™ã€‚ä»–ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä»–ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³) ã¯ã€``ansible-galaxy collection install `` ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:66 msgid "Collection name" msgstr "コレクションå" #: ../../rst/reference_appendices/glossary.rst:68 msgid "The second part of a Fully Qualified Collection Name. The collection name divides the collection namespace and usually reflects the function of the collection content. For example, the ``cisco`` namespace might contain ``cisco.ios``, ``cisco.aci``, and ``cisco.nxos``, with content for managing the different network devices maintained by Cisco." msgstr "完全修飾コレクションåã® 2 番目ã®éƒ¨åˆ†ã€‚コレクションåã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®åå‰ç©ºé–“を分割ã—ã€é€šå¸¸ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å†…å®¹ã®æ©Ÿèƒ½ã‚’åæ˜ ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``cisco`` åå‰ç©ºé–“ã«ã¯ã€``cisco.ios``ã€``cisco.aci``ã€ãŠã‚ˆã³ ``cisco.nxos`` ãŒå«ã¾ã‚Œã€ã‚·ã‚¹ã‚³ãŒç®¡ç†ã™ã‚‹ã•ã¾ã–ã¾ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚’管ç†ã™ã‚‹ãŸã‚ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:69 msgid "community.general (collection)" msgstr "community.general (コレクション)" #: ../../rst/reference_appendices/glossary.rst:71 msgid "A special collection managed by the Ansible Community Team containing all the modules and plugins which shipped in Ansible 2.9 that do not have their own dedicated Collection. See `community.general `_` on Galaxy." msgstr "Ansible 2.9 ã«åŒæ¢±ã•れãŸã€å°‚用ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æŒãŸãªã„ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインをå«ã‚€ Ansible Community Team ãŒç®¡ç†ã™ã‚‹ç‰¹å®šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚Galaxy ã®ã€Œ`community.general `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:72 msgid "community.network (collection)" msgstr "community.network (コレクション)" #: ../../rst/reference_appendices/glossary.rst:74 msgid "Similar to ``community.general``, focusing on network content. `community.network `_` on Galaxy." msgstr "``community.general`` ã¨åŒæ§˜ã«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ç„¦ç‚¹ã‚’å®›ã¦ã¦ã„ã¾ã™ (Galaxy ã® `community.network `_')。" #: ../../rst/reference_appendices/glossary.rst:75 msgid "Connection Plugin" msgstr "Connection プラグイン" #: ../../rst/reference_appendices/glossary.rst:77 msgid "By default, Ansible talks to remote machines through pluggable libraries. Ansible uses native OpenSSH (:term:`SSH (Native)`) or a Python implementation called :term:`paramiko`. OpenSSH is preferred if you are using a recent version, and also enables some features like Kerberos and jump hosts. This is covered in the :ref:`getting started section `. There are also other connection types like ``accelerate`` mode, which must be bootstrapped over one of the SSH-based connection types but is very fast, and local mode, which acts on the local system. Users can also write their own connection plugins." msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ—ラグå¯èƒ½ãªãƒ©ã‚¤ãƒ–ラリーを介ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¨å¯¾è©±ã—ã¾ã™ã€‚Ansible ã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ã® OpenSSH (:term:`SSH (Native)`) ã‚„ã€:term:`paramiko` ã¨å‘¼ã°ã‚Œã‚‹ Python ã®å®Ÿè£…を使用ã—ã¾ã™ã€‚最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ OpenSSH ãŒæŽ¨å¥¨ã•れã€Kerberos やジャンプホストãªã©ã®ä¸€éƒ¨ã®æ©Ÿèƒ½ã‚‚有効ã«ãªã‚Šã¾ã™ã€‚ã“れã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`getting started section `ã€ã§èª¬æ˜Žã—ã¾ã™ã€‚ä»–ã«ã‚‚ ``accelerate`` モードã®ã‚ˆã†ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ãŒã‚りã¾ã™ã€‚ã“れ㯠SSH ãƒ™ãƒ¼ã‚¹ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã®ã†ã¡ã®ã²ã¨ã¤ã‚’使用ã—ã¦èµ·å‹•ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ãŒã€éžå¸¸ã«é«˜é€Ÿã§ã™ã€‚ã¾ãŸã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ã‚¹ãƒ†ãƒ ä¸Šã§å‹•作ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¢ãƒ¼ãƒ‰ã‚‚ã‚りã¾ã™ã€‚ユーザーã¯ç‹¬è‡ªã® connection プラグインを記述ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:87 msgid "Conditionals" msgstr "æ¡ä»¶åˆ†å² (Conditional)" #: ../../rst/reference_appendices/glossary.rst:89 msgid "A conditional is an expression that evaluates to true or false that decides whether a given task is executed on a given machine or not. Ansible's conditionals are powered by the 'when' statement, which are discussed in the :ref:`working_with_playbooks`." msgstr "æ¡ä»¶ã¯ã€True ã¾ãŸã¯ False ã«è©•価ã—ã¦ã€æŒ‡å®šã®ã‚¿ã‚¹ã‚¯ã‚’所定ã®ãƒžã‚·ãƒ³ã§å®Ÿè¡Œã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹å¼ã®ã“ã¨ã§ã™ã€‚Ansible ã®æ¡ä»¶æ–‡ã¯ã€ã€Œwhenã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã«ã‚ˆã£ã¦å¼·åŒ–ã•れã¦ã„ã¾ã™ã€‚「:ref:`working_with_playbooks`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:93 msgid "Declarative" msgstr "宣言的 (Declarative)" #: ../../rst/reference_appendices/glossary.rst:95 msgid "An approach to achieving a task that uses a description of the final state rather than a description of the sequence of steps necessary to achieve that state. For a real world example, a declarative specification of a task would be: \"put me in California\". Depending on your current location, the sequence of steps to get you to California may vary, and if you are already in California, nothing at all needs to be done. Ansible's Resources are declarative; it figures out the steps needed to achieve the final state. It also lets you know whether or not any steps needed to be taken to get to the final state." msgstr "ã‚ã‚‹ã‚¿ã‚¹ã‚¯ã‚’é”æˆã™ã‚‹ãŸã‚ã«ã€ãã®çŠ¶æ…‹ã‚’é”æˆã™ã‚‹ãŸã‚ã«å¿…è¦ãªä¸€é€£ã®æ‰‹é †ã‚’記述ã™ã‚‹ã®ã§ã¯ãªãã€æœ€çµ‚çš„ãªçŠ¶æ…‹ã‚’è¨˜è¿°ã™ã‚‹ã‚¢ãƒ—ローãƒã®ã“ã¨ã€‚ç¾å®Ÿä¸–界ã®ä¾‹ã§ã¯ã€ã€Œç§ã‚’カリフォルニアã«é€£ã‚Œã¦è¡Œã£ã¦ãã ã•ã„ã€ã¨ã„ã†ã‚¿ã‚¹ã‚¯ã®å®£è¨€çš„ãªæŒ‡å®šãŒã‚りã¾ã™ã€‚ã‚ãªãŸã®ç¾åœ¨åœ°ã«ã‚ˆã£ã¦ã€ã‚ãªãŸã‚’カリフォルニアã«é€£ã‚Œã¦è¡ŒããŸã‚ã®ä¸€é€£ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ç•°ãªã‚‹ã‹ã‚‚ã—れãªã„ã—ã€ã‚ãªãŸãŒã™ã§ã«ã‚«ãƒªãƒ•ォルニアã«ã„ã‚‹å ´åˆã¯ã€ä½•ã‚‚ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ansible ã® Resource ã¯å®£è¨€åž‹ã§ã€æœ€çµ‚çš„ãªçŠ¶æ…‹ã‚’å®Ÿç¾ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚¹ãƒ†ãƒƒãƒ—を把æ¡ã—ã¦ã„ã¾ã™ã€‚ã¾ãŸã€æœ€çµ‚çš„ãªçŠ¶æ…‹ã«åˆ°é”ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚¹ãƒ†ãƒƒãƒ—ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚‚知るã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:105 msgid "Diff Mode" msgstr "差分モード" #: ../../rst/reference_appendices/glossary.rst:107 msgid "A ``--diff`` flag can be passed to Ansible to show what changed on modules that support it. You can combine it with ``--check`` to get a good 'dry run'. File diffs are normally in unified diff format." msgstr "``--diff`` フラグを Ansible ã«æ¸¡ã—ã¦ã€ãれをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ä½•ãŒå¤‰æ›´ã•れãŸã‹ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚``--check`` ã¨çµ„ã¿åˆã‚ã›ã‚‹ã¨å„ªã‚ŒãŸã€Œãƒ‰ãƒ©ã‚¤ãƒ©ãƒ³ã€ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ファイルã®å·®åˆ†ã¯é€šå¸¸ã€çµ±ä¸€ã•れãŸå·®åˆ†å½¢å¼ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:110 msgid "Executor" msgstr "エグゼキューター (Executor)" #: ../../rst/reference_appendices/glossary.rst:112 msgid "A core software component of Ansible that is the power behind :command:`/usr/bin/ansible` directly -- and corresponds to the invocation of each task in a :term:`playbook `. The Executor is something Ansible developers may talk about, but it's not really user land vocabulary." msgstr "Ansible ã®ä¸­æ ¸ã¨ãªã‚‹ã‚½ãƒ•トウェアコンãƒãƒ¼ãƒãƒ³ãƒˆã§ã€:command:`/usr/bin/ansible` を直接支ãˆã‚‹åŠ›ã§ã‚りã€:term:`Playbook ` ã®å„タスクã®å‘¼ã³å‡ºã—ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚エグゼキューターã¯ã€Ansible ã®é–‹ç™ºè€…ãŒä½¿ç”¨ã™ã‚‹ç”¨èªžã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å´ãŒä½¿ç”¨ã™ã‚‹ç”¨èªžã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/glossary.rst:117 #: ../../rst/reference_appendices/special_variables.rst:134 msgid "Facts" msgstr "ファクト" #: ../../rst/reference_appendices/glossary.rst:119 msgid "Facts are simply things that are discovered about remote nodes. While they can be used in :term:`playbooks` and templates just like variables, facts are things that are inferred, rather than set. Facts are automatically discovered by Ansible when running plays by executing the internal :ref:`setup module ` on the remote nodes. You never have to call the setup module explicitly, it just runs, but it can be disabled to save time if it is not needed or you can tell ansible to collect only a subset of the full facts via the ``gather_subset:`` option. For the convenience of users who are switching from other configuration management systems, the fact module will also pull in facts from the :program:`ohai` and :program:`facter` tools if they are installed. These are fact libraries from Chef and Puppet, respectively. (These may also be disabled via ``gather_subset:``)" msgstr "端的ã«è¨€ã†ã¨ã€ãƒ•ァクトã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã«ã¤ã„ã¦ç™ºè¦‹ã•れる事柄を指ã—ã¾ã™ã€‚ファクトã¯å¤‰æ•°ã®ã‚ˆã†ã« :term:`Playbook` やテンプレートã§ä½¿ç”¨ã§ãã¾ã™ãŒã€ãƒ•ァクトã¯è¨­å®šã•れる事柄ã¨ã„ã†ã‚ˆã‚Šã¯æŽ¨æ¸¬ã•れる事柄ã¨è¨€ãˆã¾ã™ã€‚ファクトã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã§å†…部 :ref:`セットアップモジュール ` を実行ã™ã‚‹ã“ã¨ã§ãƒ—レイã®å®Ÿè¡Œä¸­ã« Ansible ã«ã‚ˆã‚Šè‡ªå‹•çš„ã«æ¤œå‡ºã•れるãŸã‚ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—モジュールを明示的ã«å‘¼ã³å‡ºã™ã“ã¨ã¯ã‚りã¾ã›ã‚“。ãれã¯ãŸã å®Ÿè¡Œã•れã¾ã™ã€‚ãã®å¿…è¦ãŒãªã‘ã‚Œã°æ™‚間を節約ã™ã‚‹ãŸã‚ã«ç„¡åйã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€``gather_subset:`` オプションã§å…¨ãƒ•ァクトã®ã‚µãƒ–セットã ã‘ã‚’åŽé›†ã™ã‚‹ã‚ˆã†ã« Ansible ã«æŒ‡ç¤ºã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ä»–ã®è¨­å®šç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰åˆ‡ã‚Šæ›¿ãˆã‚’行ã‚れã¦ã„ã‚‹å ´åˆã®åˆ©ç‚¹ã¨ã—ã¦ã€ãƒ•ァクトモジュールã¯ã€Chef 㨠Puppet ã®ãƒ•ァクトライブラリーã‹ã‚‰ã€ãれãžã‚Œ :program:`ohai` ツールãŠã‚ˆã³ :program:`facter` ツールã‹ã‚‰ã‚‚ (インストールã•れã¦ã„ã‚‹å ´åˆ) ファクトをå–り込ã¿ã¾ã™ (ã“れ㯠``gather_subset:`` ã§ç„¡åйã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™)。" #: ../../rst/reference_appendices/glossary.rst:133 msgid "Filter Plugin" msgstr "Filter プラグイン" #: ../../rst/reference_appendices/glossary.rst:135 msgid "A filter plugin is something that most users will never need to understand. These allow for the creation of new :term:`Jinja2` filters, which are more or less only of use to people who know what Jinja2 filters are. If you need them, you can learn how to write them in the :ref:`API docs section `." msgstr "filter プラグインã¯ã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç†è§£ã™ã‚‹å¿…è¦ãŒãªã„ã‚‚ã®ã§ã™ã€‚ã“ã® filter プラグインã¯ã€æ–°ã—ã„ :term:`Jinja2` フィルターを作æˆã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€å¤šã‹ã‚Œå°‘ãªã‹ã‚Œã€Jinja2 ã®ãƒ•ィルターを知ã£ã¦ã„る人ã«ã—ã‹ä½¿ãˆã¾ã›ã‚“。必è¦ã§ã‚れã°ã€:ref:`API ドキュメントã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ ` ã§è¨˜è¿°æ–¹æ³•ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:140 msgid "Forks" msgstr "フォーク" #: ../../rst/reference_appendices/glossary.rst:142 msgid "Ansible talks to remote nodes in parallel and the level of parallelism can be set either by passing ``--forks`` or editing the default in a configuration file. The default is a very conservative five (5) forks, though if you have a lot of RAM, you can easily set this to a value like 50 for increased parallelism." msgstr "Ansible ã¯ã€è¤‡æ•°ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã¨åŒæ™‚ã«å¯¾è©±ã§ãã€ãã®ä¸¦åˆ—処ç†ã®ãƒ¬ãƒ™ãƒ«ã¯ã€``--forks`` を渡ã™ã‹ã€è¨­å®šãƒ•ァイルã®ãƒ‡ãƒ•ォルトを編集ã™ã‚‹ã“ã¨ã§è¨­å®šã§ãã¾ã™ã€‚デフォルトã«ã¯éžå¸¸ã«æŽ§ãˆç›®ã« 5 ã¤ã®ãƒ•ォークãŒè¨­å®šã•れã¦ã„ã¾ã™ãŒã€RAM ãŒå¤šæ•°ã‚ã‚‹å ´åˆã¯ã€ä¸¦åˆ—処ç†ã®ãƒ¬ãƒ™ãƒ«ã‚’上ã’ã‚‹ãŸã‚ã«å€¤ã‚’大ãã (50 ãªã©) 設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:147 msgid "Fully Qualified Collection Name (FQCN)" msgstr "FQCN (完全修飾コレクションå)" #: ../../rst/reference_appendices/glossary.rst:149 msgid "The full definition of a module, plugin, or role hosted within a collection, in the form . Allows a Playbook to refer to a specific module or plugin from a specific source in an unambiguous manner, for example, ``community.grafana.grafana_dashboard``. The FQCN is required when you want to specify the exact source of a plugin. For example, if multiple collections contain a module plugin called ``user``, the FQCN specifies which one to use for a given task. When you have multiple collections installed, the FQCN is always the explicit and authoritative indicator of which collection to search for the correct plugin for each task." msgstr "コレクション内ã§ãƒ›ã‚¹ãƒˆã•れã¦ã„るモジュールã€ãƒ—ラグインã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®å®Œå…¨ãªå®šç¾©ã‚’ ã®ã‚ˆã†ãªå½¢ã§ç¤ºã—ã¾ã™ã€‚Playbook ãŒç‰¹å®šã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¾ãŸã¯ãƒ—ラグインを曖昧ã•ã®ãªã„方法ã§å‚ç…§ã§ãるよã†ã«ã—ã¾ã™ (ãŸã¨ãˆã°ã€``community.grafana.grafana_dashboard`` ã§ã™)。FQCN ã¯ã€ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ­£ç¢ºãªã‚½ãƒ¼ã‚¹ã‚’指定ã—ãŸã„å ´åˆã«å¿…è¦ã§ã™ã€‚ãŸã¨ãˆã°ã€è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã« ``user`` ã¨ã„ã†åå‰ã® module プラグインãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã€FQCN ã¯ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã«ã©ã®ãƒ—ラグインを使用ã™ã‚‹ã‹ã‚’指定ã—ã¾ã™ã€‚複数ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã€FQCN ã¯å¸¸ã«ã€å„タスクã«é©ã—ãŸãƒ—ラグインをã©ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æ¤œç´¢ã™ã‚‹ã‹ã‚’明示的ã‹ã¤æ¨©å¨çš„ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:150 msgid "Gather Facts (Boolean)" msgstr "ファクトã®åŽé›† (ブール値)" #: ../../rst/reference_appendices/glossary.rst:152 msgid ":term:`Facts` are mentioned above. Sometimes when running a multi-play :term:`playbook `, it is desirable to have some plays that don't bother with fact computation if they aren't going to need to utilize any of these values. Setting ``gather_facts: False`` on a playbook allows this implicit fact gathering to be skipped." msgstr ":term:`ファクト` ã¯ä¸Šè¿°ã®ã¨ãŠã‚Šã§ã™ã€‚マルãƒãƒ—レイ (:term:`Playbook `) を実行ã™ã‚‹éš›ã«ã€ã“れらã®å€¤ã‚’利用ã™ã‚‹å¿…è¦ãŒãªã„å ´åˆã¯ã€ãƒ•ァクト計算を行ã‚ãªã„プレイをã„ãã¤ã‹ç”¨æ„ã™ã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„å ´åˆãŒã‚りã¾ã™ã€‚Playbook ã« ``gather_facts: False`` を設定ã™ã‚‹ã¨ã€ã“ã®æš—é»™ã®ãƒ•ァクトåŽé›†ã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:157 msgid "Globbing" msgstr "グラッビング (Globbing)" #: ../../rst/reference_appendices/glossary.rst:159 msgid "Globbing is a way to select lots of hosts based on wildcards, rather than the name of the host specifically, or the name of the group they are in. For instance, it is possible to select ``ww*`` to match all hosts starting with ``www``. This concept is pulled directly from :program:`Func`, one of Michael DeHaan's (an Ansible Founder) earlier projects. In addition to basic globbing, various set operations are also possible, such as 'hosts in this group and not in another group', and so on." msgstr "グラッビングã¨ã¯ã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆåや所属ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—åã§ã¯ãªãã€ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã«åŸºã¥ã„ã¦å¤šæ•°ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã™ã‚‹æ–¹æ³•ã§ã™ã€‚ãŸã¨ãˆã° ``ww*`` ã‚’é¸æŠžã™ã‚‹ã¨ã€``www`` ã§å§‹ã¾ã‚‹ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«ä¸€è‡´ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®æ¦‚念ã¯ã€Ansible ã®å‰µå§‹è€…ã§ã‚ã‚‹ Michael DeHaan æ°ã®åˆæœŸã®ãƒ—ロジェクト㮠1 ã¤ã§ã‚ã‚‹ :program:`Func` ã‹ã‚‰ç›´æŽ¥å¼•用ã—ã¦ã„ã¾ã™ã€‚基本的ãªã‚°ãƒ©ãƒƒãƒ“ングã«åŠ ãˆã¦ã€ã€Œã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å«ã¾ã‚Œã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯å«ã¾ã‚Œãªã„ホストã€ãªã©ã€ã•ã¾ã–ã¾ãªã‚»ãƒƒãƒˆæ“作ãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:167 msgid "Group" msgstr "グループ" #: ../../rst/reference_appendices/glossary.rst:169 msgid "A group consists of several hosts assigned to a pool that can be conveniently targeted together, as well as given variables that they share in common." msgstr "グループã¯ã€ãƒ—ールã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸè¤‡æ•°ã®ãƒ›ã‚¹ãƒˆã§æ§‹æˆã•れã¾ã™ã€‚ã“れらã®ãƒ›ã‚¹ãƒˆã¯ã€ä¸€ç·’ã«å¯¾è±¡ã«è¨­å®šã§ãã€ãれらãŒå…±é€šã—ã¦å…±æœ‰ã™ã‚‹ç‰¹å®šã®å¤‰æ•°ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:172 msgid "Group Vars" msgstr "グループ変数" #: ../../rst/reference_appendices/glossary.rst:174 msgid "The :file:`group_vars/` files are files that live in a directory alongside an inventory file, with an optional filename named after each group. This is a convenient place to put variables that are provided to a given group, especially complex data structures, so that these variables do not have to be embedded in the :term:`inventory` file or :term:`playbook `." msgstr ":file:`group_vars/` ファイルã¯ã€å„グループã«ç”±æ¥ã™ã‚‹ä»»æ„ã®ãƒ•ァイルåã§ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¨å…±ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å­˜åœ¨ã™ã‚‹ãƒ•ァイルã®ã“ã¨ã§ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ç‰¹ã«ãƒ‡ãƒ¼ã‚¿æ§‹é€ ãŒè¤‡é›‘ãªå ´åˆãªã©ã«ã€æ‰€å®šã‚°ãƒ«ãƒ¼ãƒ—ã«æä¾›ã•れる変数をé…ç½®ã§ãる便利ãªå ´æ‰€ã«ãªã‚Šã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã“れらã®å¤‰æ•°ãŒ :term:`inventory` ファイルã¾ãŸã¯ :term:`Playbook ` ã«åŸ‹ã‚込む必è¦ãŒãªããªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:180 msgid "Handlers" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼" #: ../../rst/reference_appendices/glossary.rst:182 msgid "Handlers are just like regular tasks in an Ansible :term:`playbook ` (see :term:`Tasks`) but are only run if the Task contains a ``notify`` keyword and also indicates that it changed something. For example, if a config file is changed, then the task referencing the config file templating operation may notify a service restart handler. This means services can be bounced only if they need to be restarted. Handlers can be used for things other than service restarts, but service restarts are the most common usage." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ Ansible :term:`playbook ` ã®é€šå¸¸ã®ã‚¿ã‚¹ã‚¯ã®ã‚ˆã†ãªæ©Ÿèƒ½ã‚’æŒã¡ã¾ã™ (「:term:`Tasks`ã€ã‚’å‚ç…§) ãŒã€ã‚¿ã‚¹ã‚¯ã« ``notify`` キーワードãŒã‚りã€å¤‰æ›´ãŒã‚ã£ãŸã“ã¨ãŒç¤ºå”†ã•れる場åˆã«ã®ã¿å®Ÿè¡Œã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€è¨­å®šãƒ•ァイルãŒå¤‰æ›´ã•れãŸå¾Œã«ã€è¨­å®šãƒ•ァイルをå‚ç…§ã™ã‚‹ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆä½œæˆæ“作ã®ã‚¿ã‚¹ã‚¯ã¯ã€ã‚µãƒ¼ãƒ“スå†èµ·å‹•ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«é€šçŸ¥ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ã‚µãƒ¼ãƒ“スãŒå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã®ã¿ãƒã‚¦ãƒ³ã‚¹ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã‚µãƒ¼ãƒ“スã®å†èµ·å‹•以外ã®ã‚¿ã‚¹ã‚¯ã«ä½¿ç”¨ã§ãã¾ã™ãŒã€ã‚µãƒ¼ãƒ“スã®å†èµ·å‹•ãŒæœ€ã‚‚一般的ãªä½¿ç”¨ä¾‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:190 msgid "Host" msgstr "ホスト" #: ../../rst/reference_appendices/glossary.rst:192 msgid "A host is simply a remote machine that Ansible manages. They can have individual variables assigned to them, and can also be organized in groups. All hosts have a name they can be reached at (which is either an IP address or a domain name) and, optionally, a port number, if they are not to be accessed on the default SSH port." msgstr "ホストã¨ã¯ã€Ansible ãŒç®¡ç†ã™ã‚‹ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã®ã“ã¨ã§ã™ã€‚ホストã«ã¯ã€å€‹åˆ¥ã«å¤‰æ•°ã‚’割り当ã¦ã‚‹ã“ã¨ã‚‚ã€ã‚°ãƒ«ãƒ¼ãƒ—ã§ã¾ã¨ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«ã¯ã€ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªåå‰ (IP アドレスã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³å) ã¨ã€ãƒ‡ãƒ•ォルト㮠SSH ãƒãƒ¼ãƒˆã§ã‚¢ã‚¯ã‚»ã‚¹ã—ãªã„å ´åˆã¯ã€ä»»æ„ã§ãƒãƒ¼ãƒˆç•ªå·ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:197 msgid "Host Specifier" msgstr "ホスト指定å­" #: ../../rst/reference_appendices/glossary.rst:199 msgid "Each :term:`Play ` in Ansible maps a series of :term:`tasks` (which define the role, purpose, or orders of a system) to a set of systems." msgstr "Ansible ã®å„ :term:`プレイ ` ã¯ã€ä¸€é€£ã® :term:`タスク` (システムã®ãƒ­ãƒ¼ãƒ«ã€ç›®çš„ã€ã¾ãŸã¯é †åºã‚’定義ã—ã¾ã™) を一連ã®ã‚·ã‚¹ãƒ†ãƒ ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:202 msgid "This ``hosts:`` keyword in each play is often called the hosts specifier." msgstr "å„プレイ㮠``hosts:`` キーワードã¯ã€ã—ã°ã—ã°ãƒ›ã‚¹ãƒˆæŒ‡å®šå­ã¨å‘¼ã°ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:204 msgid "It may select one system, many systems, one or more groups, or even some hosts that are in one group and explicitly not in another." msgstr "1 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ã€å¤šæ•°ã®ã‚·ã‚¹ãƒ†ãƒ ã€1 ã¤ä»¥ä¸Šã®ã‚°ãƒ«ãƒ¼ãƒ—ã€ã¾ãŸã¯ 1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã‚り明示的ã«åˆ¥ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ãªã„複数ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:206 msgid "Host Vars" msgstr "ホスト変数" #: ../../rst/reference_appendices/glossary.rst:208 msgid "Just like :term:`Group Vars`, a directory alongside the inventory file named :file:`host_vars/` can contain a file named after each hostname in the inventory file, in :term:`YAML` format. This provides a convenient place to assign variables to the host without having to embed them in the :term:`inventory` file. The Host Vars file can also be used to define complex data structures that can't be represented in the inventory file." msgstr ":term:`Group Vars` ã®ã‚ˆã†ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨ªã«ã‚ã‚‹ :file:`host_vars/` ディレクトリーã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®å„ホストåã«ã¡ãªã‚“ã§ :term:`YAML` å½¢å¼ã®ãƒ•ァイルを置ãã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€:term:`inventory` ファイルã«å¤‰æ•°ã‚’埋ã‚è¾¼ã¾ãªãã¦ã‚‚ã€ãƒ›ã‚¹ãƒˆã«å¤‰æ•°ã‚’割り当ã¦ã‚‹ãŸã‚ã®ä¾¿åˆ©ãªå ´æ‰€ã¨ãªã‚Šã¾ã™ã€‚ホスト㮠vars ファイルã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã§ã¯è¡¨ç¾ã§ããªã„複雑ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’定義ã™ã‚‹ã®ã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:214 msgid "Idempotency" msgstr "冪等性" #: ../../rst/reference_appendices/glossary.rst:216 msgid "An operation is idempotent if the result of performing it once is exactly the same as the result of performing it repeatedly without any intervening actions." msgstr "æ“作を 1 回実行ã—ãŸçµæžœãŒã€ä½•も介入ã›ãšã«ç¹°ã‚Šè¿”ã—実行ã—ãŸçµæžœã¨ã¾ã£ãŸãåŒã˜ã§ã‚れã°ã€æ“作ã¯å†ªç­‰ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:219 msgid "Includes" msgstr "インクルード (Include)" #: ../../rst/reference_appendices/glossary.rst:221 msgid "The idea that :term:`playbook ` files (which are nothing more than lists of :term:`plays`) can include other lists of plays, and task lists can externalize lists of :term:`tasks` in other files, and similarly with :term:`handlers`. Includes can be parameterized, which means that the loaded file can pass variables. For instance, an included play for setting up a WordPress blog may take a parameter called ``user`` and that play could be included more than once to create a blog for both ``alice`` and ``bob``." msgstr ":term:`Playbook ` ã®ãƒ•ァイル (ã“れ㯠:term:`プレイ` ã®ãƒªã‚¹ãƒˆã«ä»–ãªã‚‰ãªã„) ã¯ã€ä»–ã®ãƒ—レイリストをå«ã‚€ã“ã¨ãŒã§ãã€ã‚¿ã‚¹ã‚¯ãƒªã‚¹ãƒˆã¯ä»–ã®ãƒ•ァイル㮠:term:`タスク` ã®ãƒªã‚¹ãƒˆã‚’具体化ã™ã‚‹ã“ã¨ãŒã§ãã€:term:`ãƒãƒ³ãƒ‰ãƒ©ãƒ¼` ã§ã‚‚åŒæ§˜ã¨ãªã‚‹ã¨ã„ã†è€ƒãˆæ–¹ã§ã™ã€‚インクルードã¯ãƒ‘ラメーター化ã§ãã‚‹ãŸã‚ã€èª­ã¿è¾¼ã¾ã‚ŒãŸãƒ•ァイルã¯å¤‰æ•°ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€WordPress ブログをセットアップã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ—レイã¯ã€``user`` ã¨ã„ã†ãƒ‘ラメーターをå–りã€ãã®ãƒ—レイを複数回インクルードã™ã‚‹ã“ã¨ã§ã€``alice`` 㨠``bob`` ã®ä¸¡æ–¹ã«ãƒ–ログを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:229 msgid "Inventory" msgstr "インベントリー" #: ../../rst/reference_appendices/glossary.rst:231 msgid "A file (by default, Ansible uses a simple INI format) that describes :term:`Hosts ` and :term:`Groups ` in Ansible. Inventory can also be provided via an :term:`Inventory Script` (sometimes called an \"External Inventory Script\")." msgstr "Ansible ã§ :term:`ホスト ` 㨠:term:`グループ ` を記述ã—ãŸãƒ•ァイル (デフォルトã§ã¯ã€Ansible ã¯ç°¡å˜ãª INI å½¢å¼ã‚’使用)。インベントリーã¯ã€:term:`インベントリースクリプト` (「外部インベントリースクリプトã€ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™) を介ã—ã¦æä¾›ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:235 msgid "Inventory Script" msgstr "インベントリースクリプト" #: ../../rst/reference_appendices/glossary.rst:237 msgid "A very simple program (or a complicated one) that looks up :term:`hosts `, :term:`group` membership for hosts, and variable information from an external resource -- whether that be a SQL database, a CMDB solution, or something like LDAP. This concept was adapted from Puppet (where it is called an \"External Nodes Classifier\") and works more or less exactly the same way." msgstr ":term:`ホスト `ã€ãƒ›ã‚¹ãƒˆã® :term:`グループ` メンãƒãƒ¼ã‚·ãƒƒãƒ—ã€ãŠã‚ˆã³å¤‰æ•°æƒ…報をã€SQL データベースã€CMDB ソリューションã¾ãŸã¯ LDAP ã«é¡žã™ã‚‹å¤–部リソースã‹ã‚‰å‚ç…§ã™ã‚‹éžå¸¸ã«ç°¡å˜ãªãƒ—ログラム (ã¾ãŸã¯è¤‡é›‘ãªãƒ—ログラム) ã®ã“ã¨ã§ã™ã€‚ã“ã®æ¦‚念㯠Puppet (「外部ノード分類å­ã€ã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™) ã‹ã‚‰æŽ¡ç”¨ã•れãŸã‚‚ã®ã§ã€ã»ã¼åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:243 msgid "Jinja2" msgstr "Jinja2" #: ../../rst/reference_appendices/glossary.rst:245 msgid "Jinja2 is the preferred templating language of Ansible's template module. It is a very simple Python template language that is generally readable and easy to write." msgstr "Jinja2 ã¯ã€Ansible ã®ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§æŽ¨å¥¨ã•れるテンプレート言語ã§ã™ã€‚ã“れã¯éžå¸¸ã«ã‚·ãƒ³ãƒ—ル㪠Python テンプレート言語ã§ã‚りã€ä¸€èˆ¬çš„ã«èª­ã¿ã‚„ã™ãã€ç°¡å˜ã«è¨˜è¿°ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:248 msgid "JSON" msgstr "JSON" #: ../../rst/reference_appendices/glossary.rst:250 msgid "Ansible uses JSON for return data from remote modules. This allows modules to be written in any language, not just Python." msgstr "Ansible ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰è¿”ã•れるデータ㫠JSON を使用ã—ã¾ã™ã€‚モジュール㯠Python ã ã‘ã§ã¯ãªãã™ã¹ã¦ã®è¨€èªžã§ä½œæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:252 msgid "Keyword" msgstr "キーワード" #: ../../rst/reference_appendices/glossary.rst:254 msgid "The main expressions that make up Ansible, which apply to playbook objects (Play, Block, Role and Task). For example 'vars:' is a keyword that lets you define variables in the scope of the playbook object it is applied to." msgstr "Ansibleã‚’æ§‹æˆã™ã‚‹ä¸»ãªè¡¨ç¾ã§ã€Playbook オブジェクト(Playã€Blockã€Roleã€ãŠã‚ˆã³Task)ã«é©ç”¨ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œvars:ã€ã¯ã€é©ç”¨å…ˆã® Playbook オブジェクトã®ç¯„囲内ã§ã€å¤‰æ•°ã‚’定義ã§ãるよã†ã«ã™ã‚‹ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:257 msgid "Lazy Evaluation" msgstr "é…延評価" #: ../../rst/reference_appendices/glossary.rst:259 msgid "In general, Ansible evaluates any variables in :term:`playbook ` content at the last possible second, which means that if you define a data structure that data structure itself can define variable values within it, and everything \"just works\" as you would expect. This also means variable strings can include other variables inside of those strings." msgstr "一般的㫠Ansible ã¯ã€:term:`Playbook ` ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®å¤‰æ•°ã‚’å¯èƒ½ãªé™ã‚Šæœ€å¾Œã®çž¬é–“ã«è©•価ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’定義ã—ãŸå ´åˆã€ãã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ è‡ªä½“ãŒãã®ä¸­ã«å¤‰æ•°å€¤ã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã€ã™ã¹ã¦ãŒæœŸå¾…通りã«ã€ŒãŸã å‹•ãã€ã®ã§ã™ã€‚ã“れã¯ã€å¤‰æ•°æ–‡å­—列ãŒã€ãã®æ–‡å­—列内ã«ä»–ã®å¤‰æ•°ã‚’å«ã‚€ã“ã¨ãŒã§ãã‚‹ã“ã¨ã‚‚æ„味ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:265 msgid "Library" msgstr "ライブラリー" #: ../../rst/reference_appendices/glossary.rst:267 msgid "A collection of modules made available to :command:`/usr/bin/ansible` or an Ansible :term:`playbook `." msgstr ":command:`/usr/bin/ansible` ã¾ãŸã¯ Ansible :term:`Playbook ` ã§åˆ©ç”¨ã§ãるよã†ã«ãªã£ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚" #: ../../rst/reference_appendices/glossary.rst:269 msgid "Limit Groups" msgstr "グループã®åˆ¶é™" #: ../../rst/reference_appendices/glossary.rst:271 msgid "By passing ``--limit somegroup`` to :command:`ansible` or :command:`ansible-playbook`, the commands can be limited to a subset of :term:`hosts `. For instance, this can be used to run a :term:`playbook ` that normally targets an entire set of servers to one particular server." msgstr "``--limit somegroup`` ã‚’ :command:`ansible` ã¾ãŸã¯ :command:`ansible-playbook` ã«æ¸¡ã™ã“ã¨ã§ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’ :term:`ホスト ` ã®ã‚µãƒ–セットã«é™å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€é€šå¸¸ã¯ã‚µãƒ¼ãƒãƒ¼ã®ã‚»ãƒƒãƒˆå…¨ä½“を対象ã¨ã—ã¦ã„ã‚‹ :term:`Playbook ` ã‚’ã€ç‰¹å®šã®ã‚µãƒ¼ãƒãƒ¼ã«å‘ã‘ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:276 msgid "Local Action" msgstr "ローカルアクション" #: ../../rst/reference_appendices/glossary.rst:278 msgid "This keyword is an alias for ``delegate_to: localhost``. Used when you want to redirect an action from the remote to execute on the controller itself." msgstr "ã“ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ ``delegate_to: localhost`` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚リモートã‹ã‚‰ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’リダイレクトã—ã¦ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼è‡ªä½“ã§å®Ÿè¡Œã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:281 msgid "Local Connection" msgstr "ローカル接続" #: ../../rst/reference_appendices/glossary.rst:283 msgid "By using ``connection: local`` in a :term:`playbook `, or passing ``-c local`` to :command:`/usr/bin/ansible`, this indicates that we are executing a local fork instead of executing on the remote machine. You probably want ``local_action`` or ``delegate_to: localhost`` instead as this ONLY changes the connection and no other context for execution." msgstr ":term:`playbook ` ã§ã‚’ ``connection: local`` 使用ã™ã‚‹ã‹ã€:command:`/usr/bin/ansible` ã« ``-c local`` を指定ã™ã‚‹ã“ã¨ã§ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã§å®Ÿè¡Œã™ã‚‹ã®ã§ã¯ãªãã€ãƒ­ãƒ¼ã‚«ãƒ«ã®ãƒ•ォークを実行ã™ã‚‹ã“ã¨ã‚’指示ã—ã¾ã™ã€‚コãƒã‚¯ã‚·ãƒ§ãƒ³ã ã‘ãŒå¤‰æ›´ã•れã¦ã€å®Ÿè¡Œã®ä»–ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’変更ã—ãªã„ã®ã§ã€ä»£ã‚り㫠``local_action`` ã‹ ``delegate_to: localhost`` を指定ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:288 msgid "Lookup Plugin" msgstr "Lookup プラグイン" #: ../../rst/reference_appendices/glossary.rst:290 msgid "A lookup plugin is a way to get data into Ansible from the outside world. Lookup plugins are an extension of Jinja2 and can be accessed in templates, for example, ``{{ lookup('file','/path/to/file') }}``. These are how such things as ``with_items``, are implemented. There are also lookup plugins like ``file`` which loads data from a file and ones for querying environment variables, DNS text records, or key value stores." msgstr "Lookup プラグインã¨ã¯ã€å¤–部ã‹ã‚‰ Ansible ã«ãƒ‡ãƒ¼ã‚¿ã‚’å–り込むãŸã‚ã®æ–¹æ³•ã§ã™ã€‚Lookup プラグイン㯠Jinja2 ã®æ‹¡å¼µæ©Ÿèƒ½ã§ã€``{{ lookup('file','/path/to/file') }}`` ãªã©ã®ãƒ†ãƒ³ãƒ—レートã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚``with_items`` ã®ã‚ˆã†ãªã‚‚ã®ãŒã“れらã«ã‚ˆã£ã¦å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚Lookup プラグインã«ã¯ã€``file`` ã®ã‚ˆã†ã«ãƒ•ァイルã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã‚€ã‚‚ã®ã‚„ã€ç’°å¢ƒå¤‰æ•°ã‚„ DNS ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ¬ã‚³ãƒ¼ãƒ‰ã€ã‚­ãƒ¼ãƒãƒªãƒ¥ãƒ¼ã‚¹ãƒˆã‚¢ãªã©ã‚’照会ã™ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:297 msgid "Loops" msgstr "ループ" #: ../../rst/reference_appendices/glossary.rst:299 msgid "Generally, Ansible is not a programming language. It prefers to be more declarative, though various constructs like ``loop`` allow a particular task to be repeated for multiple items in a list. Certain modules, like :ref:`yum ` and :ref:`apt `, actually take lists directly, and can install all packages given in those lists within a single transaction, dramatically speeding up total time to configuration, so they can be used without loops." msgstr "一般的ã«ã€Ansible ã¯ãƒ—ログラミング言語ã§ã¯ã‚りã¾ã›ã‚“。ã—ã‹ã—ã€``loop`` ã®ã‚ˆã†ãªæ§˜ã€…ãªæ§‹é€ ã«ã‚ˆã£ã¦ã€ãƒªã‚¹ãƒˆã®è¤‡æ•°ã®ã‚¢ã‚¤ãƒ†ãƒ ã«å¯¾ã—ã¦ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã‚’繰り返ã™ã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`yum ` ã‚„:ref:`apt ` ãªã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€å®Ÿéš›ã«ãƒªã‚¹ãƒˆã‚’直接å—ã‘å–りã€ãれらã®ãƒªã‚¹ãƒˆã§æŒ‡å®šã•れãŸã™ã¹ã¦ã®ãƒ‘ッケージを 1 ã¤ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å†…ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã€è¨­å®šã«ã‹ã‹ã‚‹æ™‚間を劇的ã«çŸ­ç¸®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ãŸãŒã£ã¦ãƒ«ãƒ¼ãƒ—を使用ã›ãšã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:306 msgid "Modules" msgstr "モジュール" #: ../../rst/reference_appendices/glossary.rst:308 msgid "Modules are the units of work that Ansible ships out to remote machines. Modules are kicked off by either :command:`/usr/bin/ansible` or :command:`/usr/bin/ansible-playbook` (where multiple tasks use lots of different modules in conjunction). Modules can be implemented in any language, including Perl, Bash, or Ruby -- but can take advantage of some useful communal library code if written in Python. Modules just have to return :term:`JSON`. Once modules are executed on remote machines, they are removed, so no long running daemons are used. Ansible refers to the collection of available modules as a :term:`library`." msgstr "モジュールã¯ã€Ansible ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«é€å‡ºã™ã‚‹ä½œæ¥­å˜ä½ã§ã™ã€‚モジュールã¯ã€:command:`/usr/bin/ansible` ã‹ :command:`/usr/bin/ansible-playbook` (複数ã®ã‚¿ã‚¹ã‚¯ãŒå¤šæ•°ã®ç•°ãªã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹å ´åˆ) ã®ã„ãšã‚Œã‹ã§èµ·å‹•ã—ã¾ã™ã€‚モジュールã¯ã€Perlã€Bashã€Ruby ã‚’å«ã‚€ä»»æ„ã®è¨€èªžã§å®Ÿè£…ã§ãã¾ã™ãŒã€Python ã§è¨˜è¿°ã•れã¦ã„ã‚‹å ´åˆã¯ã€ã„ãã¤ã‹ã®æœ‰ç”¨ãªå…±é€šãƒ©ã‚¤ãƒ–ラリーコードを利用ã§ãã¾ã™ã€‚モジュール㯠:term:`JSON` ã‚’è¿”ã›ã°å分ã§ã™ã€‚モジュールãŒãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ä¸Šã§å®Ÿè¡Œã™ã‚‹ã¨ã€ãれらã¯å‰Šé™¤ã•れるãŸã‚ã€å®Ÿè¡Œä¸­ã®ãƒ‡ãƒ¼ãƒ¢ãƒ³ã¯ä½¿ç”¨ã•れã¾ã›ã‚“。Ansible ã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é›†åˆã‚’ :term:`library` ã¨ã—ã¦å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:318 msgid "Multi-Tier" msgstr "多層" #: ../../rst/reference_appendices/glossary.rst:320 msgid "The concept that IT systems are not managed one system at a time, but by interactions between multiple systems and groups of systems in well defined orders. For instance, a web server may need to be updated before a database server and pieces on the web server may need to be updated after *THAT* database server and various load balancers and monitoring servers may need to be contacted. Ansible models entire IT topologies and workflows rather than looking at configuration from a \"one system at a time\" perspective." msgstr "IT システムã¯ã€ä¸€åº¦ã« 1 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ãªãã€è¤‡æ•°ã®ã‚·ã‚¹ãƒ†ãƒ ã¨ã‚·ã‚¹ãƒ†ãƒ ã®ã‚°ãƒ«ãƒ¼ãƒ—é–“ã®ç›¸äº’作用ã«ã‚ˆã£ã¦ã€æ˜Žç¢ºã«å®šç¾©ã•れãŸé †åºã§ç®¡ç†ã•れるã¨ã„ã†æ¦‚念ã§ã™ã€‚ãŸã¨ãˆã°ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã®å‰ã« Web サーãƒãƒ¼ã‚’æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã€*ãã®* データベースサーãƒãƒ¼ã¨ã•ã¾ã–ã¾ãªãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ãŠã‚ˆã³ç›£è¦–サーãƒãƒ¼ã«æŽ¥ç¶šã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€Web サーãƒãƒ¼ä¸Šã®éƒ¨åˆ†ã‚’æ›´æ–°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible ã¯ã€ã€Œä¸€åº¦ã« 1 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ã€ã®è¦³ç‚¹ã‹ã‚‰æ§‹æˆã‚’検討ã™ã‚‹ã®ã§ã¯ãªãã€IT トãƒãƒ­ã‚¸ãƒ¼ã¨ãƒ¯ãƒ¼ã‚¯ãƒ•ロー全体をモデル化ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:328 msgid "Namespace" msgstr "åå‰ç©ºé–“" #: ../../rst/reference_appendices/glossary.rst:330 msgid "The first part of a fully qualified collection name, the namespace usually reflects a functional content category. Example: in ``cisco.ios.ios_config``, ``cisco`` is the namespace. Namespaces are reserved and distributed by Red Hat at Red Hat's discretion. Many, but not all, namespaces will correspond with vendor names. See `Galaxy namespaces `_ on the Galaxy docsite for namespace requirements." msgstr "完全修飾コレクションåã®æœ€åˆã®éƒ¨åˆ†ã§ã€åå‰ç©ºé–“ã¯é€šå¸¸ã€æ©Ÿèƒ½çš„ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’åæ˜ ã—ã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€``cisco.ios.ios_config`` ã§ã¯ã€``cisco`` ãŒåå‰ç©ºé–“ã«ãªã‚Šã¾ã™ã€‚åå‰ç©ºé–“㯠Red Hat ã«ã‚ˆã£ã¦äºˆç´„ã•れã€Red Hat ã®è£é‡ã§é…布ã•れã¾ã™ã€‚ã™ã¹ã¦ã§ã¯ã‚りã¾ã›ã‚“ãŒã€å¤šãã®åå‰ç©ºé–“ã¯ãƒ™ãƒ³ãƒ€ãƒ¼ã®åå‰ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚åå‰ç©ºé–“ã®è¦ä»¶ã«ã¤ã„ã¦ã¯ã€Galaxy ドキュメントサイトã®ã€Œ`Galaxy åå‰ç©ºé–“ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/glossary.rst:331 msgid "Notify" msgstr "Notify (通知)" #: ../../rst/reference_appendices/glossary.rst:333 msgid "The act of a :term:`task ` registering a change event and informing a :term:`handler ` task that another :term:`action` needs to be run at the end of the :term:`play `. If a handler is notified by multiple tasks, it will still be run only once. Handlers are run in the order they are listed, not in the order that they are notified." msgstr "変更イベントを登録ã—ã€:term:`ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ ` タスク㫠:term:`プレイ ` ã®çµ‚了時ã«åˆ¥ã® :term:`æ“作` ã®å®Ÿè¡ŒãŒå¿…è¦ã§ã‚ã‚‹ã“ã¨ã‚’知らã›ã‚‹ :term:`タスク ` ã®è¡Œç‚ºã§ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒè¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã«ã‚ˆã‚‹é€šçŸ¥ã‚’å—ã‘ã¦ã‚‚ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ 1 回ã®ã¿å®Ÿè¡Œã•れã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€ãれらãŒé€šçŸ¥ã‚’å—ã‘ãŸé †ç•ªã§ã¯ãªãã€ä¸€è¦§è¡¨ç¤ºã•れãŸé †ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:339 msgid "Orchestration" msgstr "オーケストレーション" #: ../../rst/reference_appendices/glossary.rst:341 msgid "Many software automation systems use this word to mean different things. Ansible uses it as a conductor would conduct an orchestra. A datacenter or cloud architecture is full of many systems, playing many parts -- web servers, database servers, maybe load balancers, monitoring systems, continuous integration systems, and so on. In performing any process, it is necessary to touch systems in particular orders, often to simulate rolling updates or to deploy software correctly. Some system may perform some steps, then others, then previous systems already processed may need to perform more steps. Along the way, emails may need to be sent or web services contacted. Ansible orchestration is all about modeling that kind of process." msgstr "多ãã®ã‚½ãƒ•トウェア自動化システムã§ã¯ã€ã“ã®è¨€è‘‰ã‚’ã•ã¾ã–ã¾ãªæ„味ã§ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚Ansible ã¯ã€ã“ã®è¨€è‘‰ã‚’「指æ®è€…ãŒã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ©ã‚’指æ®ã™ã‚‹ã€ã¨ã„ã†æ„味ã§ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚データセンターやクラウドã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã«ã¯ã€Web サーãƒãƒ¼ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã€ç›£è¦–システムã€ç¶™ç¶šçš„çµ±åˆã‚·ã‚¹ãƒ†ãƒ ãªã©ã€å¤šãã®ã‚·ã‚¹ãƒ†ãƒ ãŒå­˜åœ¨ã—ã€ã•ã¾ã–ã¾ãªå½¹å‰²ã‚’æ‹…ã£ã¦ã„ã¾ã™ã€‚プロセスを実行ã™ã‚‹éš›ã«ã¯ã€ç‰¹å®šã®é †åºã§ã‚·ã‚¹ãƒ†ãƒ ã«è§¦ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートをシミュレートã—ãŸã‚Šã€ã‚½ãƒ•トウェアを正ã—ãデプロイã™ã‚‹ãŸã‚ã§ã™ã€‚ã‚るシステムãŒã„ãã¤ã‹ã®ã‚¹ãƒ†ãƒƒãƒ—を実行ã—ã€æ¬¡ã«ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã‚’実行ã—ã€ã™ã§ã«å‡¦ç†ã•れãŸå‰ã®ã‚·ã‚¹ãƒ†ãƒ ãŒã•らã«ã‚¹ãƒ†ãƒƒãƒ—を実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ãã®éŽç¨‹ã§ã€ãƒ¡ãƒ¼ãƒ«ã®é€ä¿¡ã‚„ Web サービスã¸ã®å•ã„åˆã‚ã›ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚Ansible ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€ã“ã®ã‚ˆã†ãªãƒ—ロセスをモデル化ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:352 msgid "paramiko" msgstr "Paramiko" #: ../../rst/reference_appendices/glossary.rst:354 msgid "By default, Ansible manages machines over SSH. The library that Ansible uses by default to do this is a Python-powered library called paramiko. The paramiko library is generally fast and easy to manage, though users who want to use Kerberos or Jump Hosts may wish to switch to a native SSH binary such as OpenSSH by specifying the connection type in their :term:`playbooks`, or using the ``-c ssh`` flag." msgstr "デフォルトã§ã¯ã€Ansible 㯠SSH ã§ãƒžã‚·ãƒ³ã‚’管ç†ã—ã¾ã™ã€‚Ansible ãŒã“れを行ã†ãŸã‚ã«ãƒ‡ãƒ•ォルトã§ä½¿ç”¨ã—ã¦ã„ã‚‹ã®ã¯ã€paramiko ã¨ã„ã†åå‰ã® Python を使用ã—ãŸãƒ©ã‚¤ãƒ–ラリーã§ã™ã€‚paramiko ライブラリーã¯ä¸€èˆ¬çš„ã«é«˜é€Ÿã§ç®¡ç†ã‚‚ç°¡å˜ã§ã™ãŒã€Kerberos ã‚„ Jump Host を使用ã™ã‚‹å ´åˆã¯ã€:term:`Playbook` ã§æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’æŒ‡å®šã™ã‚‹ã‹ã€``-c ssh`` フラグを使用ã—㦠OpenSSH ãªã©ã®ãƒã‚¤ãƒ†ã‚£ãƒ–㪠SSH ãƒã‚¤ãƒŠãƒªãƒ¼ã«åˆ‡ã‚Šæ›¿ãˆãŸã»ã†ãŒè‰¯ã„ã§ã—ょã†ã€‚" #: ../../rst/reference_appendices/glossary.rst:360 msgid "Playbooks" msgstr "Playbook" #: ../../rst/reference_appendices/glossary.rst:362 msgid "Playbooks are the language by which Ansible orchestrates, configures, administers, or deploys systems. They are called playbooks partially because it's a sports analogy, and it's supposed to be fun using them. They aren't workbooks :)" msgstr "Playbook ã¯ã€Ansible ãŒã‚·ã‚¹ãƒ†ãƒ ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã€è¨­å®šã€ç®¡ç†ã€ã¾ãŸã¯ãƒ‡ãƒ—ロイã™ã‚‹ãŸã‚ã®è¨€èªžã§ã™ã€‚ã“れ㌠Playbook ã¨å‘¼ã°ã‚Œã‚‹ã®ã¯ã€ã‚る種スãƒãƒ¼ãƒ„ã«ä¼¼ã¦ãŠã‚Šã€ãれを使用ã™ã‚‹ã“ã¨ã§æ¥½ã—ã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚ã—ãŸãŒã£ã¦ã€ãƒ¯ãƒ¼ã‚¯ãƒ–ックã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/glossary.rst:366 msgid "Plays" msgstr "プレイ" #: ../../rst/reference_appendices/glossary.rst:368 msgid "A :term:`playbook ` is a list of plays. A play is minimally a mapping between a set of :term:`hosts ` selected by a host specifier (usually chosen by :term:`groups ` but sometimes by hostname :term:`globs `) and the :term:`tasks` which run on those hosts to define the role that those systems will perform. There can be one or many plays in a playbook." msgstr ":term:`Playbook ` ã¯ãƒ—レイã®ãƒªã‚¹ãƒˆã§ã™ã€‚最å°å˜ä½ã®ãƒ—レイã®ãƒžãƒƒãƒ”ングã¯ã€ãƒ›ã‚¹ãƒˆæŒ‡å®šå­ã§é¸æŠžã•れる :term:`ホスト ` ã®ã‚»ãƒƒãƒˆ (通常㯠:term:`グループ ` ã§é¸æŠžã•れã¾ã™ãŒã€ãƒ›ã‚¹ãƒˆå :term:`グロブ ` ã§é¸æŠžã•れるã“ã¨ã‚‚ã‚ã‚‹) ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ãŒå®Ÿè¡Œã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚’定義ã™ã‚‹ãŸã‚ã«ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れる :term:`タスク` é–“ã®ãƒžãƒƒãƒ”ングã§ã™ã€‚Playbook ã«ã¯ 1 ã¤ã¾ãŸã¯æ•°å¤šãã®ãƒ—レイãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:374 msgid "Pull Mode" msgstr "プルモード" #: ../../rst/reference_appendices/glossary.rst:376 msgid "By default, Ansible runs in :term:`push mode`, which allows it very fine-grained control over when it talks to each system. Pull mode is provided for when you would rather have nodes check in every N minutes on a particular schedule. It uses a program called :command:`ansible-pull` and can also be set up (or reconfigured) using a push-mode :term:`playbook `. Most Ansible users use push mode, but pull mode is included for variety and the sake of having choices." msgstr "デフォルトã§ã¯ã€Ansible 㯠:term:`プッシュモード` ã§å®Ÿè¡Œã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å„システムã¨å¯¾è©±ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’éžå¸¸ã«ç´°ã‹ã制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ç‰¹å®šã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ N 分ã”ã¨ã«ãƒŽãƒ¼ãƒ‰ã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸã„å ´åˆã¯ã€ãƒ—ルモードãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ã“れã«ã¯ :command:`ansible-pull` ã¨ã„ã†ãƒ—ログラムを使用ã—ã¾ã™ã€‚ã¾ãŸã€ãƒ—ッシュモード :term:`Playbook ` を使用ã—ã¦è¨­å®š (ã¾ãŸã¯å†è¨­å®š) ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã® Ansible ユーザーã¯ãƒ—ッシュモードを使用ã—ã¦ã„ã¾ã™ãŒã€å¤šæ§˜æ€§ã¨é¸æŠžè‚¢ã‚’æŒãŸã›ã‚‹ãŸã‚ã«ãƒ—ルモードもå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:385 msgid ":command:`ansible-pull` works by checking configuration orders out of git on a crontab and then managing the machine locally, using the :term:`local connection` plugin." msgstr ":command:`ansible-pull` ã¯ã€crontab ã§ git ã‹ã‚‰è¨­å®šé †åºã‚’確èªã—ã€:term:`local connection` プラグインを使用ã—ã¦ãƒžã‚·ãƒ³ã‚’ローカルã§ç®¡ç†ã™ã‚‹ã“ã¨ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:388 msgid "Push Mode" msgstr "プッシュモード" #: ../../rst/reference_appendices/glossary.rst:390 msgid "Push mode is the default mode of Ansible. In fact, it's not really a mode at all -- it's just how Ansible works when you aren't thinking about it. Push mode allows Ansible to be fine-grained and conduct nodes through complex orchestration processes without waiting for them to check in." msgstr "プッシュモードã¯ã€Ansible ã®ãƒ‡ãƒ•ォルトモードã§ã™ã€‚実際ã«ã¯ã€ãƒ¢ãƒ¼ãƒ‰ã¨ã„ã†ã‚ˆã‚Šã‚‚ã€æ„è­˜ã—ã¦ã„ãªã„ã¨ãã« Ansible ãŒã©ã®ã‚ˆã†ã«å‹•作ã™ã‚‹ã‹ã‚’示ã™ã‚‚ã®ã§ã™ã€‚プッシュモードã§ã¯ã€Ansible ã‚’ç´°ã‹ã設定ã™ã‚‹ã“ã¨ãŒã§ãã€è¤‡é›‘ãªã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ—ロセスã§ã‚‚ノードã®ãƒã‚§ãƒƒã‚¯ã‚¤ãƒ³ã‚’å¾…ãŸãšã«å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:395 msgid "Register Variable" msgstr "登録変数" #: ../../rst/reference_appendices/glossary.rst:397 msgid "The result of running any :term:`task ` in Ansible can be stored in a variable for use in a template or a conditional statement. The keyword used to define the variable is called ``register``, taking its name from the idea of registers in assembly programming (though Ansible will never feel like assembly programming). There are an infinite number of variable names you can use for registration." msgstr "Ansible ã§ :term:`タスク ` を実行ã—ãŸçµæžœã‚’å¤‰æ•°ã«æ ¼ç´ã—ã€ãƒ†ãƒ³ãƒ—レートやæ¡ä»¶æ–‡ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変数ã®å®šç¾©ã«ä½¿ç”¨ã•れるキーワード㯠``register`` ã¨å‘¼ã°ã‚Œã€ãã®åå‰ã¯ã‚¢ã‚»ãƒ³ãƒ–リープログラミングã«ãŠã‘るレジスターã®è€ƒãˆæ–¹ã«ç”±æ¥ã—ã¦ã„ã¾ã™ (ãŸã ã—ã€Ansible ãŒã‚¢ã‚»ãƒ³ãƒ–リープログラミングã®ã‚ˆã†ã«æ„Ÿã˜ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“)。登録ã«ä½¿ç”¨ã§ãる変数åã¯ç„¡é™ã«ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:403 msgid "Resource Model" msgstr "リソースモデル" #: ../../rst/reference_appendices/glossary.rst:405 msgid "Ansible modules work in terms of resources. For instance, the :ref:`file module ` will select a particular file and ensure that the attributes of that resource match a particular model. As an example, we might wish to change the owner of :file:`/etc/motd` to ``root`` if it is not already set to ``root``, or set its mode to ``0644`` if it is not already set to ``0644``. The resource models are :term:`idempotent ` meaning change commands are not run unless needed, and Ansible will bring the system back to a desired state regardless of the actual state -- rather than you having to tell it how to get to the state." msgstr "Ansible モジュールã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã®è¦³ç‚¹ã‹ã‚‰å‹•作ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€:ref:`ファイルモジュール ` ã¯ã€ç‰¹å®šã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã€ãã®ãƒªã‚½ãƒ¼ã‚¹ã®å±žæ€§ãŒç‰¹å®šã®ãƒ¢ãƒ‡ãƒ«ã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€:file:`/etc/motd` ã®æ‰€æœ‰è€…㌠``root`` ã«è¨­å®šã•れã¦ã„ãªã‘れ㰠``root`` ã«å¤‰æ›´ã—ã€ãã®ãƒ¢ãƒ¼ãƒ‰ãŒ ``0644`` ã«è¨­å®šã•れã¦ã„ãªã‘れ㰠``0644`` ã«è¨­å®šã—ãŸã„ã¨ã—ã¾ã™ã€‚リソースモデル㯠:term:`冪等 `ã€ã¤ã¾ã‚Šå¤‰æ›´ã‚³ãƒžãƒ³ãƒ‰ã¯å¿…è¦ãªæ™‚以外ã¯å®Ÿè¡Œã•れãšã€Ansible ã¯ã€å®Ÿéš›ã®çŠ¶æ…‹ã«é–¢ã‚らãšã€ã‚·ã‚¹ãƒ†ãƒ ã‚’望ã¾ã—ã„çŠ¶æ…‹ã«æˆ»ã—ã¦ãれã¾ã™ãŒã€ãã®çŠ¶æ…‹ã«ãªã‚‹ãŸã‚ã®æ–¹æ³•を指示ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/glossary.rst:415 msgid "Roles" msgstr "ロール" #: ../../rst/reference_appendices/glossary.rst:417 msgid "Roles are units of organization in Ansible. Assigning a role to a group of :term:`hosts ` (or a set of :term:`groups `, or :term:`host patterns `, and so on) implies that they should implement a specific behavior. A role may include applying certain variable values, certain :term:`tasks`, and certain :term:`handlers` -- or just one or more of these things. Because of the file structure associated with a role, roles become redistributable units that allow you to share behavior among :term:`playbooks` -- or even with other users." msgstr "ロール㯠Ansible ã«ãŠã‘る組織å˜ä½ã§ã™ã€‚ロールを :term:`ホスト ` ã®ã‚°ãƒ«ãƒ¼ãƒ— (ã‚‚ã—ã㯠:term:`グループ ` ã¾ãŸã¯ :term:`ホストパターン ` ã®ã‚»ãƒƒãƒˆãªã©) ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã¯ã€ãƒ›ã‚¹ãƒˆã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒç‰¹å®šã®å‹•作を実装ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ロールã«ã¯ç‰¹å®šã®å¤‰æ•°ã®å€¤ã€ç‰¹å®šã® :term:`タスク`ã€ç‰¹å®šã® :term:`ãƒãƒ³ãƒ‰ãƒ©ãƒ¼`ã€ã¾ãŸã¯ã“れら㮠1 ã¤ã¾ãŸã¯è¤‡æ•°ã‚’é©ç”¨ã™ã‚‹ã“ã¨ãŒå«ã¾ã‚Œã¾ã™ã€‚ファイル構造ãŒãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘られã¦ã„ã‚‹ã“ã¨ã‹ã‚‰ã€ãƒ­ãƒ¼ãƒ«ã¯å†é…布å¯èƒ½ãªå˜ä½ã§ã‚りã€ã“れを使用ã—㦠:term:`Playbook` é–“ã¾ãŸã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å‹•作を共有ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:425 msgid "Rolling Update" msgstr "ローリング更新" #: ../../rst/reference_appendices/glossary.rst:427 msgid "The act of addressing a number of nodes in a group N at a time to avoid updating them all at once and bringing the system offline. For instance, in a web topology of 500 nodes handling very large volume, it may be reasonable to update 10 or 20 machines at a time, moving on to the next 10 or 20 when done. The ``serial:`` keyword in an Ansible :term:`playbooks` control the size of the rolling update pool. The default is to address the batch size all at once, so this is something that you must opt-in to. OS configuration (such as making sure config files are correct) does not typically have to use the rolling update model, but can do so if desired." msgstr "一度ã«ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ã‚’æ›´æ–°ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ãŒã‚ªãƒ•ラインã«ãªã‚‹ã®ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ«ãƒ¼ãƒ— N 内ã®ã„ãã¤ã‹ã®ãƒŽãƒ¼ãƒ‰ã«å¯¾ã—ã¦ä¸€åº¦ã«å‡¦ç†ã™ã‚‹è¡Œç‚ºã€‚ãŸã¨ãˆã°ã€éžå¸¸ã«å¤§ããªãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚’扱ㆠ500 å°ã®ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ãªã‚‹ Web トãƒãƒ­ã‚¸ãƒ¼ã§ã¯ã€ä¸€åº¦ã« 10 å°ã¾ãŸã¯ 20 å°ã®ãƒžã‚·ãƒ³ã‚’æ›´æ–°ã—ã€æ›´æ–°ãŒå®Œäº†ã—ãŸã‚‰æ¬¡ã® 10 å°ã¾ãŸã¯ 20 å°ã«ç§»ã‚‹ã®ãŒå¦¥å½“ãªå ´åˆãŒã‚りã¾ã™ã€‚Ansible :term:`Playbook` ã® ``serial:`` キーワードã¯ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートプールã®ã‚µã‚¤ã‚ºã‚’制御ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ä¸€åº¦ã«ãƒãƒƒãƒã‚µã‚¤ã‚ºã«å¯¾å¿œã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ã“ã‚Œã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚OS ã®è¨­å®š (è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£ã—ã„ã‹ã©ã†ã‹ã®ç¢ºèªãªã©) ã§ã¯ã€é€šå¸¸ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートモデルを使用ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€å¿…è¦ã«å¿œã˜ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:437 msgid "Serial" msgstr "シリアル" #: ../../rst/reference_appendices/glossary.rst:441 msgid ":term:`Rolling Update`" msgstr ":term:`ローリングアップデート`" #: ../../rst/reference_appendices/glossary.rst:442 msgid "Sudo" msgstr "Sudo" #: ../../rst/reference_appendices/glossary.rst:444 msgid "Ansible does not require root logins, and since it's daemonless, definitely does not require root level daemons (which can be a security concern in sensitive environments). Ansible can log in and perform many operations wrapped in a sudo command, and can work with both password-less and password-based sudo. Some operations that don't normally work with sudo (like scp file transfer) can be achieved with Ansible's :ref:`copy `, :ref:`template `, and :ref:`fetch ` modules while running in sudo mode." msgstr "Ansible ã§ã¯ root ログインãŒä¸è¦ã§ã‚りã€ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚‚ä¸è¦ã®ãŸã‚ã€root レベルã®ãƒ‡ãƒ¼ãƒ¢ãƒ³ã‚‚è¦æ±‚ã•れã¾ã›ã‚“ (ã“ã‚Œã¯æ©Ÿå¯†ç’°å¢ƒã§ã¯ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®æ‡¸å¿µç‚¹ã¨ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™)。Ansible 㯠sudo コマンドã§ãƒ­ã‚°ã‚¤ãƒ³ã§ãã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãƒ©ãƒƒãƒ—ã•ã‚ŒãŸæ•°å¤šãã®æ“作を実行ã§ãã€ãƒ‘スワードãªã—ã‹ã€ã¾ãŸã¯ãƒ‘スワードを使用ã™ã‚‹ sudo ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚通常 sudo ã§æ©Ÿèƒ½ã—ãªã„æ“作 (scp ファイル転é€ãªã©) ã«ã¤ã„ã¦ã¯ã€sudo モードã§å®Ÿè¡Œä¸­ã® Ansible ã® :ref:`copy `ã€:ref:`template `ã€ãŠã‚ˆã³ :ref:`fetch ` モジュールを使用ã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:452 msgid "SSH (Native)" msgstr "SSH (ãƒã‚¤ãƒ†ã‚£ãƒ–)" #: ../../rst/reference_appendices/glossary.rst:454 msgid "Native OpenSSH as an Ansible transport is specified with ``-c ssh`` (or a config file, or a keyword in the :term:`playbook `) and can be useful if wanting to login via Kerberized SSH or using SSH jump hosts, and so on. In 1.2.1, ``ssh`` will be used by default if the OpenSSH binary on the control machine is sufficiently new. Previously, Ansible selected ``paramiko`` as a default. Using a client that supports ``ControlMaster`` and ``ControlPersist`` is recommended for maximum performance -- if you don't have that and don't need Kerberos, jump hosts, or other features, ``paramiko`` is a good choice. Ansible will warn you if it doesn't detect ControlMaster/ControlPersist capability." msgstr "Ansible ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã¨ã—ã¦ã®ãƒã‚¤ãƒ†ã‚£ãƒ–㪠OpenSSH ã¯ã€``-c ssh`` (ã¾ãŸã¯è¨­å®šãƒ•ァイルã€ã‚ã‚‹ã„㯠:term:`playbook ` ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰) ã§æŒ‡å®šã—ã¾ã™ã€‚ã“れ㯠Kerberized SSH ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ãŸã„å ´åˆã‚„ã€SSH ジャンプホストを使用ã—ãŸã„å ´åˆãªã©ã«ä¾¿åˆ©ã§ã™ã€‚1.2.1 ã§ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒžã‚·ãƒ³ä¸Šã® OpenSSH ãƒã‚¤ãƒŠãƒªãƒ¼ãŒååˆ†ã«æ–°ã—ã„å ´åˆã¯ã€``ssh`` ãŒãƒ‡ãƒ•ォルトã§ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¾ã§ã® Ansible ã§ã¯ã€ãƒ‡ãƒ•ォルト㧠``paramiko`` ãŒé¸æŠžã•れã¦ã„ã¾ã—ãŸã€‚最大é™ã®ãƒ‘フォーマンスを得るãŸã‚ã«ã¯ã€``ControlMaster`` ãŠã‚ˆã³ ``ControlPersist`` をサãƒãƒ¼ãƒˆã—ã¦ã„るクライアントを使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¦ã„ã¾ã™ã€‚ã‚‚ã—ãれãŒãªãã€Kerberos やジャンプホストãªã©ã®æ©Ÿèƒ½ãŒä¸è¦ãªå ´åˆã¯ã€``paramiko`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Ansible ã¯ã€ControlMaster/ControlPersist 機能を検出ã§ããªã„ã¨è­¦å‘Šã‚’発ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:465 msgid "Tags" msgstr "ã‚¿ã‚°" #: ../../rst/reference_appendices/glossary.rst:467 msgid "Ansible allows tagging resources in a :term:`playbook ` with arbitrary keywords, and then running only the parts of the playbook that correspond to those keywords. For instance, it is possible to have an entire OS configuration, and have certain steps labeled ``ntp``, and then run just the ``ntp`` steps to reconfigure the time server information on a remote host." msgstr "Ansible ã§ã¯ã€:term:`Playbook ` 内ã®ãƒªã‚½ãƒ¼ã‚¹ã«ä»»æ„ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’タグ付ã‘ã—ã€ãã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«å¯¾å¿œã™ã‚‹ Playbook ã®éƒ¨åˆ†ã®ã¿ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€OS 全体ã®è¨­å®šã‚’行ã„ã€ç‰¹å®šã®ã‚¹ãƒ†ãƒƒãƒ—ã«ãƒ©ãƒ™ãƒ« ``ntp`` を付ã‘ã€``ntp`` ã®ã‚¹ãƒ†ãƒƒãƒ—ã ã‘を実行ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®ã‚¿ã‚¤ãƒ ã‚µãƒ¼ãƒãƒ¼æƒ…報をå†è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:473 #: ../../rst/reference_appendices/playbooks_keywords.rst:348 msgid "Task" msgstr "タスク" #: ../../rst/reference_appendices/glossary.rst:475 msgid ":term:`Playbooks` exist to run tasks. Tasks combine an :term:`action` (a module and its arguments) with a name and optionally some other keywords (like :term:`looping keywords `). :term:`Handlers` are also tasks, but they are a special kind of task that do not run unless they are notified by name when a task reports an underlying change on a remote system." msgstr ":term:`Playbooks` ã¯ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãŸã‚ã«å­˜åœ¨ã—ã¾ã™ã€‚タスクã¯ã€:term:`action` (モジュールã¨ãã®å¼•æ•°) ã¨åå‰ã€ãã—㦠(:term:`looping keywords ` ã®ã‚ˆã†ãª) ãã®ä»–ã®ä»»æ„ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’組ã¿åˆã‚ã›ãŸã‚‚ã®ã§ã™ã€‚:term:`Handlers` もタスクã§ã™ãŒã€ã“れã¯ç‰¹åˆ¥ãªç¨®é¡žã®ã‚¿ã‚¹ã‚¯ã§ã€ã‚¿ã‚¹ã‚¯ãŒãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ä¸Šã§æ ¹æœ¬çš„ãªå¤‰æ›´ã‚’報告ã—ãŸã¨ãã«åå‰ã§é€šçŸ¥ã•れãªã„é™ã‚Šå®Ÿè¡Œã•れã¾ã›ã‚“。" #: ../../rst/reference_appendices/glossary.rst:481 msgid "Tasks" msgstr "タスク" #: ../../rst/reference_appendices/glossary.rst:483 msgid "A list of :term:`Task`." msgstr ":term:`タスク` ã®ä¸€è¦§ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:484 msgid "Templates" msgstr "テンプレート" #: ../../rst/reference_appendices/glossary.rst:486 msgid "Ansible can easily transfer files to remote systems but often it is desirable to substitute variables in other files. Variables may come from the :term:`inventory` file, :term:`Host Vars`, :term:`Group Vars`, or :term:`Facts`. Templates use the :term:`Jinja2` template engine and can also include logical constructs like loops and if statements." msgstr "Ansible ã¯ã€ãƒ•ァイルをリモートシステムã«ç°¡å˜ã«è»¢é€ã§ãã¾ã™ãŒã€ä»–ã®ãƒ•ァイルã®å¤‰æ•°ã‚’ç½®ãæ›ãˆã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„å ´åˆãŒã‚りã¾ã™ã€‚変数ã¯ã€:term:`inventory` ファイルã€:term:`Host Vars`ã€:term:`Group Vars`ã€ã¾ãŸã¯ :term:`ファクト` ã‹ã‚‰è¨­å®šã§ãã¾ã™ã€‚テンプレートã¯ã€:term:`Jinja2` テンプレートエンジンを使用ã—ã€ãƒ«ãƒ¼ãƒ—ã‚„ if ステートメントãªã©ã®è«–ç†æ§‹é€ ã‚’å«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:492 msgid "Transport" msgstr "トランスãƒãƒ¼ãƒˆ" #: ../../rst/reference_appendices/glossary.rst:494 msgid "Ansible uses :term:``Connection Plugins`` to define types of available transports. These are simply how Ansible will reach out to managed systems. Transports included are :term:`paramiko`, :term:`ssh ` (using OpenSSH), and :term:`local `." msgstr "Ansible 㯠:term:``Connection Plugins`` を使用ã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã®ç¨®é¡žã‚’定義ã—ã¾ã™ã€‚ã“れらã¯å˜ã«ã€Ansible ãŒç®¡ç†ã•れãŸã‚·ã‚¹ãƒ†ãƒ ã«åˆ°é”ã™ã‚‹æ–¹æ³•ã§ã™ã€‚å«ã¾ã‚Œã‚‹ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã¯ã€:term:`paramiko`ã€:term:`ssh ` (OpenSSH を使用)ã€ãŠã‚ˆã³ :term:`local ` ã§ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:499 msgid "When" msgstr "When" #: ../../rst/reference_appendices/glossary.rst:501 msgid "An optional conditional statement attached to a :term:`task ` that is used to determine if the task should run or not. If the expression following the ``when:`` keyword evaluates to false, the task will be ignored." msgstr ":term:`タスク ` ã«ä»˜ã‘られãŸä»»æ„ã®æ¡ä»¶æ–‡ã§ã€ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるã¹ãã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚``when:`` キーワードã«ç¶šãå¼ãŒ false ã¨è©•価ã•れãŸå ´åˆã€ãã®ã‚¿ã‚¹ã‚¯ã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:504 msgid "Vars (Variables)" msgstr "変数" #: ../../rst/reference_appendices/glossary.rst:506 msgid "As opposed to :term:`Facts`, variables are names of values (they can be simple scalar values -- integers, booleans, strings) or complex ones (dictionaries/hashes, lists) that can be used in templates and :term:`playbooks`. They are declared things, not things that are inferred from the remote system's current state or nature (which is what Facts are)." msgstr ":term:`ファクト` ã¨ã¯å¯¾ç…§çš„ã«ã€å¤‰æ•°ã¯ã€ãƒ†ãƒ³ãƒ—レートや :term:`Playbook` ã§ä½¿ç”¨ã§ãる値ã®åå‰ (æ•´æ•°ã€ãƒ–ãƒ¼ãƒ«å€¤ã€æ–‡å­—列ãªã©ã®å˜ç´”ãªã‚¹ã‚«ãƒ©ãƒ¼å€¤ãªã©) や複雑ãªåå‰ (ディクショナリー/ãƒãƒƒã‚·ãƒ¥ã€ãƒªã‚¹ãƒˆ) ã¨ãªã‚Šã¾ã™ã€‚ã“れらã¯å®£è¨€ã•れãŸã‚‚ã®ã§ã‚りã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ç¾åœ¨ã®çŠ¶æ…‹ã‚„æ€§è³ªã‹ã‚‰æŽ¨æ¸¬ã•れるもã®ã§ã¯ã‚りã¾ã›ã‚“ (ã“れãŒãƒ•ァクトã§ã™)。" #: ../../rst/reference_appendices/glossary.rst:512 msgid "YAML" msgstr "YAML" #: ../../rst/reference_appendices/glossary.rst:514 msgid "Ansible does not want to force people to write programming language code to automate infrastructure, so Ansible uses YAML to define :term:`playbook ` configuration languages and also variable files. YAML is nice because it has a minimum of syntax and is very clean and easy for people to skim. It is a good data format for configuration files and humans, but also machine readable. Ansible's usage of YAML stemmed from Michael DeHaan's first use of it inside of Cobbler around 2006. YAML is fairly popular in the dynamic language community and the format has libraries available for serialization in many languages (Python, Perl, Ruby, and so on)." msgstr "Ansible ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’自動化ã™ã‚‹ãŸã‚ã®ãƒ—ログラミング言語コードã®è¨˜è¿°ã‚’強制ã—ãªã„よã†ã«ã€YAML を使用ã—㦠:term:`Playbook ` 設定言語ã¨å¤‰æ•°ãƒ•ァイルを定義ã—ã¾ã™ã€‚YAML ã¯ã€æœ€å°é™ã®æ§‹æ–‡ã—ã‹ä½¿ç”¨ã•れã¦ã„ãªã„ãŸã‚ã€éžå¸¸ã«ã‚ã‹ã‚Šã‚„ã™ãã€ç°¡å˜ã«ç¢ºèªã§ãã‚‹ãŸã‚優れã¦ã„ã¾ã™ã€‚ã“れã¯ã€è¨­å®šãƒ•ァイルやユーザーã«ã¨ã£ã¦å„ªã‚ŒãŸãƒ‡ãƒ¼ã‚¿å½¢å¼ã§ã™ãŒã€æ©Ÿæ¢°ã§ã‚‚判別å¯èƒ½ã§ã™ã€‚Ansible ã§ã® YAML ã®ä½¿ç”¨ã¯ã€2006 年頃㫠Michael DeHaan ㌠Cobbler å†…ã§æœ€åˆã«ä½¿ç”¨ã—ãŸã“ã¨ã«ç«¯ã‚’発ã—ã¦ã„ã¾ã™ã€‚YAML ã¯å‹•的言語コミュニティーã§éžå¸¸ã«äººæ°—ãŒã‚りã€ã“ã®å½¢å¼ã«ã¯å¤šãã®è¨€èªž (Pythonã€Perlã€Ruby ãªã©) ã§ã‚·ãƒªã‚¢ãƒ«åŒ–ã§ãるライブラリーãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/glossary.rst:527 msgid ":ref:`ansible_faq`" msgstr ":ref:`ansible_faq`" #: ../../rst/reference_appendices/glossary.rst:528 msgid "Frequently asked questions" msgstr "よãã‚ã‚‹è³ªå• (FAQ)" #: ../../rst/reference_appendices/glossary.rst:533 msgid "`User Mailing List `_" msgstr "`メーリングリストã®ä½¿ç”¨ `_" #: ../../rst/reference_appendices/interpreter_discovery.rst:4 msgid "Interpreter Discovery" msgstr "ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¤œå‡º" #: ../../rst/reference_appendices/interpreter_discovery.rst:6 msgid "Most Ansible modules that execute under a POSIX environment require a Python interpreter on the target host. Unless configured otherwise, Ansible will attempt to discover a suitable Python interpreter on each target host the first time a Python module is executed for that host." msgstr "POSIX 環境ã§å®Ÿè¡Œã•れるã»ã¨ã‚“ã©ã® Ansible モジュールã«ã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆä¸Šã« Python インタープリターãŒå¿…è¦ã§ã™ã€‚特ã«è¨­å®šã•れã¦ã„ãªã„é™ã‚Šã€Ansible ã¯ã€Python モジュールãŒãã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦æœ€åˆã«å®Ÿè¡Œã•れるã¨ãã«ã€å„ターゲットホストã§é©åˆ‡ãª Python インタープリターを検出ã—よã†ã¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:11 msgid "To control the discovery behavior:" msgstr "検出動作を制御ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:13 msgid "for individual hosts and groups, use the ``ansible_python_interpreter`` inventory variable" msgstr "個別ã®ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã®å ´åˆã¯ã€``ansible_python_interpreter`` インベントリー変数を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:14 msgid "globally, use the ``interpreter_python`` key in the ``[defaults]`` section of ``ansible.cfg``" msgstr "グローãƒãƒ«è¨­å®šã¨ã—ã¦ã€``interpreter_python`` ã® ``[defaults]`` セクション㫠``ansible.cfg`` キーを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:16 msgid "Use one of the following values:" msgstr "以下ã®ã„ãšã‚Œã‹ã®å€¤ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:31 msgid "auto_legacy :" msgstr "auto_legacy:" #: ../../rst/reference_appendices/interpreter_discovery.rst:19 msgid "Detects the target OS platform, distribution, and version, then consults a table listing the correct Python interpreter and path for each platform/distribution/version. If an entry is found, and ``/usr/bin/python`` is absent, uses the discovered interpreter (and path). If an entry is found, and ``/usr/bin/python`` is present, uses ``/usr/bin/python`` and issues a warning. This exception provides temporary compatibility with previous versions of Ansible that always defaulted to ``/usr/bin/python``, so if you have installed Python and other dependencies at ``/usr/bin/python`` on some hosts, Ansible will find and use them with this setting. If no entry is found, or the listed Python is not present on the target host, searches a list of common Python interpreter paths and uses the first one found; also issues a warning that future installation of another Python interpreter could alter the one chosen." msgstr "ターゲット OS プラットフォームã€ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã€ãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’検出ã—ã¦ã‹ã‚‰ã€å„プラットフォーム/ディストリビューション/ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é©ã—㟠Python インタープリターã¨ãƒ‘スを表示ã™ã‚‹ãƒ†ãƒ¼ãƒ–ルをå‚ç…§ã—ã¾ã™ã€‚エントリーãŒè¦‹ã¤ã‹ã‚Šã€``/usr/bin/python`` ãŒå­˜åœ¨ã—ã¦ã„ãªã„å ´åˆã¯ã€æ¤œå‡ºã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リター (ãŠã‚ˆã³ãƒ‘ス) を使用ã—ã¾ã™ã€‚エントリーãŒè¦‹ã¤ã‹ã‚Šã€``/usr/bin/python`` ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€``/usr/bin/python`` を使用ã—ã¦è­¦å‘Šã‚’出力ã—ã¾ã™ã€‚ã“ã®ä¾‹å¤–ã¯ã€å¸¸ã« ``/usr/bin/python`` ã«ãƒ‡ãƒ•ォルトã§è¨­å®šã•れã¦ã„ãŸä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã¨ã®ä¸€æ™‚çš„ãªäº’æ›æ€§ã‚’æä¾›ã•れã¦ã„ã‚‹ãŸã‚ã€Python や一部ã®ãƒ›ã‚¹ãƒˆã® ``/usr/bin/python`` ã«ãã®ä»–ã®ä¾å­˜é–¢ä¿‚ã§ã‚ã‚‹å ´åˆã¯ã€Ansible ã¯ã“ã®è¨­å®šã§ãれらを見ã¤ã‘ã¦ä½¿ç”¨ã—ã¾ã™ã€‚エントリーãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã‚„ã€ãƒªã‚¹ãƒˆã•れ㟠Python ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«ãªã„å ´åˆã¯ã€ä¸€èˆ¬çš„㪠Python インタープリターパスã®ãƒªã‚¹ãƒˆã‚’検索ã—ã€æœ€åˆã«æ¤œå‡ºã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを使用ã—ã¾ã™ã€‚ã¾ãŸã€ä»Šå¾Œåˆ¥ã® Python インタープリターをインストールã™ã‚‹ã¨ã€é¸æŠžã—ãŸãƒ‘スãŒå¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã¨ã„ã†è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:41 msgid "auto" msgstr "auto" #: ../../rst/reference_appendices/interpreter_discovery.rst:34 msgid "Detects the target OS platform, distribution, and version, then consults a table listing the correct Python interpreter and path for each platform/distribution/version. If an entry is found, uses the discovered interpreter. If no entry is found, or the listed Python is not present on the target host, searches a list of common Python interpreter paths and uses the first one found; also issues a warning that future installation of another Python interpreter could alter the one chosen." msgstr "ターゲット OS プラットフォームã€ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã€ãŠã‚ˆã³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’検出ã—ã¦ã‹ã‚‰ã€å„プラットフォーム/ディストリビューション/ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é©ã—㟠Python インタープリターã¨ãƒ‘スを表示ã™ã‚‹ãƒ†ãƒ¼ãƒ–ルをå‚ç…§ã—ã¾ã™ã€‚エントリーãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã‚„ã€ãƒªã‚¹ãƒˆã•れ㟠Python ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«ãªã„å ´åˆã¯ã€ä¸€èˆ¬çš„㪠Python インタープリターパスã®ãƒªã‚¹ãƒˆã‚’検索ã—ã€æœ€åˆã«æ¤œå‡ºã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを使用ã—ã¾ã™ã€‚ã¾ãŸã€ä»Šå¾Œåˆ¥ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターをインストールã™ã‚‹ã¨ã€é¸æŠžã—ãŸãƒ‘スãŒå¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã¨ã„ã†è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/interpreter_discovery.rst:44 msgid "auto_legacy_silent" msgstr "auto_legacy_silent" #: ../../rst/reference_appendices/interpreter_discovery.rst:44 msgid "Same as ``auto_legacy``, but does not issue warnings." msgstr "``auto_legacy`` ã¨åŒã˜ã§ã™ãŒã€è­¦å‘Šã¯è¡¨ç¤ºã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/interpreter_discovery.rst:47 msgid "auto_silent" msgstr "auto_silent" #: ../../rst/reference_appendices/interpreter_discovery.rst:47 msgid "Same as ``auto``, but does not issue warnings." msgstr "``auto`` ã¨åŒã˜ã§ã™ãŒã€è­¦å‘Šã¯è¡¨ç¤ºã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/interpreter_discovery.rst:49 msgid "You can still set ``ansible_python_interpreter`` to a specific path at any variable level (for example, in host_vars, in vars files, in playbooks, and so on). Setting a specific path completely disables automatic interpreter discovery; Ansible always uses the path specified." msgstr "``ansible_python_interpreter`` を変数レベルã§ç‰¹å®šã®ãƒ‘スã«è¨­å®šã§ãã¾ã™ (例: host_vars ã«ã€vars ファイルã«ã€Playbook ã«ãªã©)。特定ã®ãƒ‘スを設定ã™ã‚‹ã¨ã€è‡ªå‹•ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¤œå‡ºãŒå®Œå…¨ã«ç„¡åŠ¹åŒ–ã•れã€Ansible ã¯å¸¸ã«æŒ‡å®šã•れãŸãƒ‘スを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/logging.rst:3 msgid "Logging Ansible output" msgstr "Ansible 出力ã®ãƒ­ã‚®ãƒ³ã‚°" #: ../../rst/reference_appendices/logging.rst:5 msgid "By default Ansible sends output about plays, tasks, and module arguments to your screen (STDOUT) on the control node. If you want to capture Ansible output in a log, you have three options:" msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ—レイã€ã‚¿ã‚¹ã‚¯ã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã®å‡ºåŠ›ã‚’ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã®ç”»é¢ (STDOUT) ã«é€ä¿¡ã—ã¾ã™ã€‚Ansible 出力をログã«è¨˜éŒ²ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã® 3 ã¤ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/logging.rst:7 msgid "To save Ansible output in a single log on the control node, set the ``log_path`` :ref:`configuration file setting `. You may also want to set ``display_args_to_stdout``, which helps to differentiate similar tasks by including variable values in the Ansible output." msgstr "コントロールノード㮠1 ã¤ã®ãƒ­ã‚°ã« Ansible 出力をä¿å­˜ã™ã‚‹ã«ã¯ã€``log_path`` ã® :ref:`設定ファイルオプション ` を設定ã—ã¾ã™ã€‚``display_args_to_stdout`` を設定ã™ã‚‹ã¨ã€Ansible ã®å‡ºåŠ›ã«å¤‰æ•°ã®å€¤ã‚’追加ã—ã€åŒæ§˜ã®ã‚¿ã‚¹ã‚¯ã‚’区別ã—ã‚„ã™ããªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/logging.rst:8 msgid "To save Ansible output in separate logs, one on each managed node, set the ``no_target_syslog`` and ``syslog_facility`` :ref:`configuration file settings `." msgstr "å„管ç†ãƒŽãƒ¼ãƒ‰ã”ã¨ã«ç•°ãªã‚‹ãƒ­ã‚°ã« Ansible 出力をä¿å­˜ã™ã‚‹ã«ã¯ã€``no_target_syslog`` ãŠã‚ˆã³ ``syslog_facility`` ã® :ref:`æ§‹æˆãƒ•ァイル設定 ` を設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/logging.rst:9 msgid "To save Ansible output to a secure database, use AWX or :ref:`Red Hat Ansible Automation Platform `. You can then review history based on hosts, projects, and particular inventories over time, using graphs and/or a REST API." msgstr "Ansible ã®å‡ºåŠ›ã‚’å®‰å…¨ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å­˜ã™ã‚‹ã«ã¯ã€AWX ã¾ãŸã¯ :ref:`Red Hat Ansible Automation Platform ` を使用ã—ã¾ã™ã€‚ã“ã†ã™ã‚‹ã“ã¨ã§ã‚°ãƒ©ãƒ•ã‚„ REST API を使用ã—ã¦ã€ãƒ›ã‚¹ãƒˆã€ãƒ—ロジェクトã€ãŠã‚ˆã³ç‰¹å®šã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«åŸºã¥ã„ã¦å±¥æ­´ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/logging.rst:12 msgid "Protecting sensitive data with ``no_log``" msgstr "``no_log`` を使用ã—ãŸæ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã®ä¿è­·" #: ../../rst/reference_appendices/logging.rst:14 msgid "If you save Ansible output to a log, you expose any secret data in your Ansible output, such as passwords and user names. To keep sensitive values out of your logs, mark tasks that expose them with the ``no_log: True`` attribute. However, the ``no_log`` attribute does not affect debugging output, so be careful not to debug playbooks in a production environment. See :ref:`keep_secret_data` for an example." msgstr "Ansible 出力をログã«ä¿å­˜ã™ã‚‹ã¨ã€ãƒ‘スワードやユーザーåãªã©ã®ç§˜å¯†ãƒ‡ãƒ¼ã‚¿ãŒ Ansible 出力ã«å…¬é–‹ã•れã¾ã™ã€‚機密性ã®é«˜ã„値をログã«è¨˜éŒ²ã—ãªã„よã†ã«ã™ã‚‹ã«ã¯ã€ãれらを公開ã™ã‚‹ã‚¿ã‚¹ã‚¯ã«ã€``no_log: True`` 属性ã§å°ã‚’付ã‘ã¾ã™ã€‚ãŸã ã—ã€``no_log`` 属性ã¯ã€ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã«å½±éŸ¿ã‚’与ãˆãªã„ãŸã‚ã€å®Ÿç¨¼åƒç’°å¢ƒã§ Playbook をデãƒãƒƒã‚°ã—ãªã„よã†ã«æ³¨æ„ã—ã¦ãã ã•ã„。サンプルã¯ã€ã€Œ:ref:`keep_secret_data`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/module_utils.rst:6 msgid "Ansible Reference: Module Utilities" msgstr "Ansible å‚考資料: モジュールユーティリティー" #: ../../rst/reference_appendices/module_utils.rst:8 msgid "This page documents utilities intended to be helpful when writing Ansible modules in Python." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Python ã§ Ansible モジュールを記述ã™ã‚‹ã¨ãã«å½¹ç«‹ã¤ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã«ã¤ã„ã¦ã¾ã¨ã‚ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/module_utils.rst:13 msgid "AnsibleModule" msgstr "AnsibleModule" #: ../../rst/reference_appendices/module_utils.rst:15 msgid "To use this functionality, include ``from ansible.module_utils.basic import AnsibleModule`` in your module." msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« ``from ansible.module_utils.basic import AnsibleModule`` を追加ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule:1 of msgid "Common code for quickly building an ansible module in Python (although you can write modules with anything that can return JSON)." msgstr "Python ã§ Ansible ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’è¿…é€Ÿã«æ§‹ç¯‰ã™ã‚‹ãŸã‚ã®ä¸€èˆ¬çš„ãªã‚³ãƒ¼ãƒ‰ (ãŸã ã—ã€JSON ã‚’è¿”ã™ã“ã¨ãŒã§ãã‚‹ã‚‚ã®ãªã‚‰ãªã‚“ã§ã‚‚モジュールを作æˆã§ãã¾ã™ï¼‰ã€‚" #: ansible.module_utils.basic.AnsibleModule:4 of msgid "See :ref:`developing_modules_general` for a general introduction and :ref:`developing_program_flow_modules` for more detailed explanation." msgstr "å…¨èˆ¬ã®æ¦‚è¦ã¯ã€Œ:ref:`developing_modules_general`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。詳細ãªèª¬æ˜Žã¯ã€Œ:ref:`developing_program_flow_modules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ansible.module_utils.basic.AnsibleModule.add_path_info:1 of msgid "for results that are files, supplement the info about the file in the return path with stats about the file path." msgstr "ファイルã®çµæžœã«ã¤ã„ã¦ã¯ã€ãƒ•ァイルパスã«é–¢ã™ã‚‹çµ±è¨ˆã§ã€ãƒªã‚¿ãƒ¼ãƒ³ãƒ‘スã®ãƒ•ァイルã«é–¢ã™ã‚‹æƒ…報を補完ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.atomic_move:1 of msgid "atomically move src to dest, copying attributes from dest, returns true on success it uses os.rename to ensure this as it is an atomic operation, rest of the function is to work around limitations, corner cases and ensure selinux context is saved if possible" msgstr "src ã‚’ dest ã«ã‚¢ãƒˆãƒŸãƒƒã‚¯ã«ç§»å‹•ã—ã€dest ã‹ã‚‰å±žæ€§ã‚’コピーã—ã€æˆåŠŸã™ã‚‹ã¨ true ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã‚¢ãƒˆãƒŸãƒƒã‚¯æ“作ã§ã‚ã‚‹ãŸã‚ã€os.rename を使用ã—ã¦ã“れを確èªã—ã¾ã™ã€‚残りã®é–¢æ•°ã¯ã€åˆ¶é™ã‚„ã€ã‚ã£ãŸã«ç™ºç”Ÿã—ãªã„厄介ãªã‚±ãƒ¼ã‚¹ã‚’回é¿ã—ã€å¯èƒ½ã§ã‚れ㰠selinux コンテキストãŒä¿å­˜ã•れるよã†ã«ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.backup_local:1 of msgid "make a date-marked backup of the specified file, return True or False on success or failure" msgstr "指定ã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ã®æ—¥ä»˜ãƒžãƒ¼ã‚¯ä»˜ããƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を作æˆã—ã€æˆåŠŸã—ãŸå ´åˆã¯ Trueã€å¤±æ•—ã—ãŸå ´åˆã¯ False ã‚’è¿”ã—ã¾ã™" #: ansible.module_utils.basic.AnsibleModule.boolean:1 of msgid "Convert the argument to a boolean" msgstr "引数をブール値ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.digest_from_file:1 of msgid "Return hex digest of local file for a digest_method specified by name, or None if file is not present." msgstr "åå‰ãŒæŒ‡å®šã—㟠digest_method ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイル㮠16 進数ダイジェストを返ã—ã¾ã™ã€‚ファイルãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ None ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.exit_json:1 of msgid "return from the module, without error" msgstr "モジュールã‹ã‚‰è¿”ã—ã¾ã™ã€‚エラーã¯ã‚りã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.fail_json:1 of msgid "return from the module, with an error message" msgstr "エラーメッセージをå«ã‚€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.find_mount_point:1 of msgid "Takes a path and returns it's mount point" msgstr "パスをå–å¾—ã—ã€ãã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/module_utils.rst:50 #: ansible.module_utils.basic.AnsibleModule.find_mount_point #: ansible.module_utils.basic.AnsibleModule.get_bin_path #: ansible.module_utils.basic.AnsibleModule.is_executable #: ansible.module_utils.basic.AnsibleModule.run_command #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate #: ansible.module_utils.common.arg_spec.ValidationResult #: ansible.module_utils.common.parameters.sanitize_keys #: ansible.module_utils.common.validation.check_missing_parameters #: ansible.module_utils.common.validation.check_mutually_exclusive #: ansible.module_utils.common.validation.check_required_arguments #: ansible.module_utils.common.validation.check_required_by #: ansible.module_utils.common.validation.check_required_if #: ansible.module_utils.common.validation.check_required_one_of #: ansible.module_utils.common.validation.check_required_together #: ansible.module_utils.common.validation.check_type_bool #: ansible.module_utils.common.validation.check_type_dict #: ansible.module_utils.common.validation.check_type_float #: ansible.module_utils.common.validation.check_type_int #: ansible.module_utils.common.validation.check_type_list #: ansible.module_utils.common.validation.check_type_str #: ansible.module_utils.common.validation.count_terms of msgid "Parameters" msgstr "パラメーター" #: ansible.module_utils.basic.AnsibleModule.find_mount_point:3 of msgid "a string type with a filesystem path" msgstr "ファイルシステムパスãŒã‚る文字列ã®ã‚¿ã‚¤ãƒ—" #: ansible.module_utils.basic.AnsibleModule.find_mount_point #: ansible.module_utils.basic.AnsibleModule.get_bin_path #: ansible.module_utils.basic.AnsibleModule.run_command #: ansible.module_utils.basic.get_platform #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate #: ansible.module_utils.common.parameters.sanitize_keys #: ansible.module_utils.common.validation.check_missing_parameters #: ansible.module_utils.common.validation.check_mutually_exclusive #: ansible.module_utils.common.validation.check_required_arguments #: ansible.module_utils.common.validation.check_required_by #: ansible.module_utils.common.validation.check_required_if #: ansible.module_utils.common.validation.check_required_one_of #: ansible.module_utils.common.validation.check_required_together #: ansible.module_utils.common.validation.check_type_bool #: ansible.module_utils.common.validation.check_type_dict #: ansible.module_utils.common.validation.check_type_float #: ansible.module_utils.common.validation.check_type_int #: ansible.module_utils.common.validation.check_type_list #: ansible.module_utils.common.validation.check_type_str #: ansible.module_utils.common.validation.count_terms of msgid "Returns" msgstr "戻り値" #: ansible.module_utils.basic.AnsibleModule.find_mount_point:4 of msgid "the path to the mount point as a text type" msgstr "テキストタイプã¨ã—ã¦ã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆã¸ã®ãƒ‘ス" #: ansible.module_utils.basic.AnsibleModule.get_bin_path:1 of msgid "Find system executable in PATH." msgstr "PATH ã§ã‚·ã‚¹ãƒ†ãƒ ã®å®Ÿè¡Œãƒ•ァイルを検索ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.get_bin_path:3 of msgid "The executable to find." msgstr "検索ã™ã‚‹å®Ÿè¡Œãƒ•ァイル。" #: ansible.module_utils.basic.AnsibleModule.get_bin_path:4 of msgid "if executable is not found and required is ``True``, fail_json" msgstr "実行ファイルãŒè¦‹ã¤ã‹ã‚‰ãšã€required ㌠``True`` ã®å ´åˆã¯ã€fail_json ã¨ãªã‚Šã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.get_bin_path:5 of msgid "optional list of directories to search in addition to ``PATH``" msgstr "``PATH`` ã¨ã€æ¤œç´¢ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ã‚ªãƒ—ションã®ä¸€è¦§ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.get_bin_path:6 of msgid "if found return full path; otherwise return None" msgstr "見ã¤ã‹ã£ãŸå ´åˆã¯ãƒ•ルパスを返ã—ã¾ã™ã€‚見ã¤ã‹ã‚‰ãªã„å ´åˆã¯ None ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.is_executable:1 of msgid "is the given path executable?" msgstr "指定ã®ãƒ‘スã¯å®Ÿè¡Œãƒ•ァイルã§ã™ã‹ã€‚" #: ansible.module_utils.basic.AnsibleModule.is_executable:3 of msgid "The path of the file to check." msgstr "確èªã™ã‚‹ãƒ•ァイルã®ãƒ‘ス。" #: ansible.module_utils.basic.AnsibleModule.is_executable:5 of msgid "Limitations:" msgstr "制é™äº‹é …:" #: ansible.module_utils.basic.AnsibleModule.is_executable:7 of msgid "Does not account for FSACLs." msgstr "FSACL を考慮ã—ã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.is_executable:8 of msgid "Most times we really want to know \"Can the current user execute this file\". This function does not tell us that, only if any execute bit is set." msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ã€Œç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®ãƒ•ァイルを実行ã§ãã‚‹ã‹ã©ã†ã‹ã€ã‚’本当ã«çŸ¥ã‚ŠãŸã„ã®ã§ã™ã€‚ã“ã®é–¢æ•°ã¯ã€å®Ÿè¡Œãƒ“ットãŒè¨­å®šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã ã‘ã§ã€ãれを知るã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.is_special_selinux_path:1 of msgid "Returns a tuple containing (True, selinux_context) if the given path is on a NFS or other 'special' fs mount point, otherwise the return will be (False, None)." msgstr "指定ã•れãŸãƒ‘ス㌠NFS ã¾ãŸã¯ãã®ä»–ã®ã€Œç‰¹åˆ¥ãªã€fs マウントãƒã‚¤ãƒ³ãƒˆä¸Šã«ã‚ã‚‹å ´åˆã¯ (True, selinux_context) ã‚’å«ã‚€ã‚¿ãƒ—ルを返ã—ã€ãã†ã§ãªã„å ´åˆã¯ (False, None) ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.load_file_common_arguments:1 of msgid "many modules deal with files, this encapsulates common options that the file module accepts such that it is directly available to all modules and they can share code." msgstr "多ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãƒ•ァイルを扱ã†ãŸã‚ã€ãƒ•ァイルモジュールãŒå—ã‘付ã‘る共通ã®ã‚ªãƒ—ションをカプセル化ã—ã¦ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒç›´æŽ¥åˆ©ç”¨ã§ãるよã†ã«ã—ã€ã‚³ãƒ¼ãƒ‰ã‚’共有ã§ãるよã†ã«ã—ã¦ã„ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.load_file_common_arguments:5 of msgid "Allows to overwrite the path/dest module argument by providing path." msgstr "パスを指定ã—ã¦ã€ãƒ‘ス/dest モジュール引数を上書ãã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.md5:1 of msgid "Return MD5 hex digest of local file using digest_from_file()." msgstr "digest_from_file() を使用ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイル㮠MD5 hex ダイジェストを返ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.md5:5 of msgid "Do not use this function unless you have no other choice for:" msgstr "ä»–ã®é¸æŠžè‚¢ãŒãªã„å ´åˆã¯ã€ã“ã®æ©Ÿèƒ½ã‚’使用ã—ãªã„ã§ãã ã•ã„。" #: ansible.module_utils.basic.AnsibleModule.md5:4 of msgid "Optional backwards compatibility" msgstr "ä»»æ„ã®ä¸‹ä½äº’æ›æ€§" #: ansible.module_utils.basic.AnsibleModule.md5:5 of msgid "Compatibility with a third party protocol" msgstr "サードパーティープロトコルã¨ã®äº’æ›æ€§" #: ansible.module_utils.basic.AnsibleModule.md5:7 of msgid "This function will not work on systems complying with FIPS-140-2." msgstr "ã“ã®æ©Ÿèƒ½ã¯ã€FIPS-140-2 ã«æº–æ‹ ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã§ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.md5:9 of msgid "Most uses of this function can use the module.sha1 function instead." msgstr "ã“ã®æ©Ÿèƒ½ã®å¤§åŠã¯ã€ä»£ã‚り㫠module.sha1 関数を使用ã§ãã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.preserved_copy:1 of msgid "Copy a file with preserved ownership, permissions and context" msgstr "ä¿å­˜æ¸ˆã¿ã®æ‰€æœ‰æ¨©ã€ãƒ‘ーミッションã€ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§ãƒ•ァイルをコピーã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command:1 of msgid "Execute a command, returns rc, stdout, and stderr." msgstr "コマンドを実行ã—ã¦ã€rcã€stdoutã€ãŠã‚ˆã³ stderr ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command:3 of msgid "is the command to run * If args is a list, the command will be run with shell=False. * If args is a string and use_unsafe_shell=False it will split args to a list and run with shell=False * If args is a string and use_unsafe_shell=True it runs with shell=True." msgstr "ã“れã¯å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã§ã™ * 引数ãŒãƒªã‚¹ãƒˆã®å ´åˆã€ã‚³ãƒžãƒ³ãƒ‰ã¯ shell=False ã§å®Ÿè¡Œã—ã¾ã™ã€‚ * å¼•æ•°ãŒæ–‡å­—列ã§ã€use_unsafe_shell=False ã®å ´åˆã¯ã€å¼•数をリストã«åˆ†å‰²ã—㦠shell=False ã§å®Ÿè¡Œã—ã¾ã™ * å¼•æ•°ãŒæ–‡å­—列㧠use_unsafe_shell=True ã®å ´åˆã¯ã€shell=True ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw check_rc" msgstr "kw check_rc" #: ansible.module_utils.basic.AnsibleModule.run_command:7 of msgid "Whether to call fail_json in case of non zero RC. Default False" msgstr "RC ãŒã‚¼ãƒ­ä»¥å¤–ã®å ´åˆã« fail_json を呼ã³å‡ºã™ã‹ã©ã†ã‹ã€‚デフォルト㯠False ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw close_fds" msgstr "kw close_fds" #: ansible.module_utils.basic.AnsibleModule.run_command:9 of msgid "See documentation for subprocess.Popen(). Default True" msgstr "subprocess.Popen() ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。デフォルト 㯠True ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw executable" msgstr "kw executable" #: ansible.module_utils.basic.AnsibleModule.run_command:10 of msgid "See documentation for subprocess.Popen(). Default None" msgstr "subprocess.Popen() ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。デフォルト㯠None ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw data" msgstr "kw data" #: ansible.module_utils.basic.AnsibleModule.run_command:11 of msgid "If given, information to write to the stdin of the command" msgstr "指定ã—ãŸå ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã® stdin ã«æ›¸ã込む情報。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw binary_data" msgstr "kw binary_data" #: ansible.module_utils.basic.AnsibleModule.run_command:12 of msgid "If False, append a newline to the data. Default False" msgstr "False ã®å ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿ã«æ–°ã—ã„行を追加ã—ã¾ã™ã€‚デフォルト㯠False ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw path_prefix" msgstr "kw path_prefix" #: ansible.module_utils.basic.AnsibleModule.run_command:13 of msgid "If given, additional path to find the command in. This adds to the PATH environment variable so helper commands in the same directory can also be found" msgstr "指定ã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’見ã¤ã‘ã‚‹ãŸã‚ã®è¿½åŠ ã®ãƒ‘スã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€PATH 環境変数ãŒè¿½åŠ ã•れるãŸã‚ã€åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®ãƒ˜ãƒ«ãƒ‘ーコマンドも見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw cwd" msgstr "kw cwd" #: ansible.module_utils.basic.AnsibleModule.run_command:16 of msgid "If given, working directory to run the command inside" msgstr "指定ã—ãŸå ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw use_unsafe_shell" msgstr "kw use_unsafe_shell" #: ansible.module_utils.basic.AnsibleModule.run_command:17 of msgid "See `args` parameter. Default False" msgstr "`args` パラメーターをå‚ç…§ã—ã¦ãã ã•ã„ (デフォルト㯠False)。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw prompt_regex" msgstr "kw prompt_regex" #: ansible.module_utils.basic.AnsibleModule.run_command:18 of msgid "Regex string (not a compiled regex) which can be used to detect prompts in the stdout which would otherwise cause the execution to hang (especially if no input data is specified)" msgstr "標準出力内ã®ãƒ—ロンプトを検出ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ Regex 文字列 (コンパイルã•ã‚ŒãŸæ­£è¦è¡¨ç¾ã§ã¯ã‚りã¾ã›ã‚“)。ãã†ã—ãªã„ã¨ã€å®Ÿè¡ŒãŒãƒãƒ³ã‚°ã—ã¾ã™ (特ã«å…¥åŠ›ãƒ‡ãƒ¼ã‚¿ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆ)。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw environ_update" msgstr "kw environ_update" #: ansible.module_utils.basic.AnsibleModule.run_command:21 of msgid "dictionary to *update* environ variables with" msgstr "環境変数を*æ›´æ–°*ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw umask" msgstr "kw umask" #: ansible.module_utils.basic.AnsibleModule.run_command:22 of msgid "Umask to be used when running the command. Default None" msgstr "コマンドを実行ã™ã‚‹éš›ã«ä½¿ç”¨ã•れる umask ã§ã™ã€‚デフォルト㯠None ã§ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw encoding" msgstr "kw encoding" #: ansible.module_utils.basic.AnsibleModule.run_command:23 of msgid "Since we return native strings, on python3 we need to know the encoding to use to transform from bytes to text. If you want to always get bytes back, use encoding=None. The default is \"utf-8\". This does not affect transformation of strings given as args." msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–文字列を返ã™ãŸã‚ã€python3 ã§ã¯ã€ãƒã‚¤ãƒˆã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›ã™ã‚‹ãŸã‚ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’知る必è¦ãŒã‚りã¾ã™ã€‚常ã«ãƒã‚¤ãƒˆã‚’è¿”ã—ãŸã„å ´åˆã¯ã€encoding=None を使用ã—ã¦ãã ã•ã„。デフォルトã¯ã€Œutf-8ã€ã§ã™ã€‚ã“れã¯å¼•æ•°ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸæ–‡å­—列ã®å¤‰æ›ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw errors" msgstr "kw errors" #: ansible.module_utils.basic.AnsibleModule.run_command:28 of msgid "Since we return native strings, on python3 we need to transform stdout and stderr from bytes to text. If the bytes are undecodable in the ``encoding`` specified, then use this error handler to deal with them. The default is ``surrogate_or_strict`` which means that the bytes will be decoded using the surrogateescape error handler if available (available on all python3 versions we support) otherwise a UnicodeError traceback will be raised. This does not affect transformations of strings given as args." msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–文字列を返ã™ãŸã‚ã€python3 ã§ã¯ stdout 㨠stderr ã‚’ãƒã‚¤ãƒˆã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã‚‚ã—ãƒã‚¤ãƒˆãŒæŒ‡å®šã•れ㟠``encoding`` ã§ãƒ‡ã‚³ãƒ¼ãƒ‰ã§ããªã„å ´åˆã¯ã€ã“ã®ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒ©ã‚’使用ã—ã¦å‡¦ç†ã—ã¾ã™ã€‚デフォルト㯠``surrogate_or_strict`` ã§ã€åˆ©ç”¨å¯èƒ½ã§ã‚れ㰠surrogateescape エラーãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’使ã£ã¦ãƒã‚¤ãƒˆãŒãƒ‡ã‚³ãƒ¼ãƒ‰ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ (サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ python3 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§åˆ©ç”¨å¯èƒ½)。ã“れã¯ã€å¼•æ•°ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸæ–‡å­—列ã®å¤‰æ›ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw expand_user_and_vars" msgstr "kw expand_user_and_vars" #: ansible.module_utils.basic.AnsibleModule.run_command:37 of msgid "When ``use_unsafe_shell=False`` this argument dictates whether ``~`` is expanded in paths and environment variables are expanded before running the command. When ``True`` a string such as ``$SHELL`` will be expanded regardless of escaping. When ``False`` and ``use_unsafe_shell=False`` no path or variable expansion will be done." msgstr "``use_unsafe_shell=False`` ã®å ´åˆã€ã“ã®å¼•æ•°ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹å‰ã«ã€ãƒ‘ス㧠``~`` を展開ã—ã€ç’°å¢ƒå¤‰æ•°ã‚’展開ã™ã‚‹ã‹ã©ã†ã‹ã‚’指示ã—ã¾ã™ã€‚``True`` ã®å ´åˆã€``$SHELL`` ã®ã‚ˆã†ãªæ–‡å­—列ã¯ã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã«é–¢ä¿‚ãªã展開ã•れã¾ã™ã€‚``False`` ãŠã‚ˆã³ ``use_unsafe_shell=False`` ã®å ´åˆã€ãƒ‘スや変数ã®å±•é–‹ã¯è¡Œã‚れã¾ã›ã‚“。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw pass_fds" msgstr "kw pass_fds" #: ansible.module_utils.basic.AnsibleModule.run_command:42 of msgid "When running on Python 3 this argument dictates which file descriptors should be passed to an underlying ``Popen`` constructor. On Python 2, this will set ``close_fds`` to False." msgstr "Python 3 ã§å®Ÿè¡Œã™ã‚‹å ´åˆã€ã“ã®å¼•数㯠``Popen`` ã®åŸºç¤Žã¨ãªã‚‹ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã«ã©ã®ãƒ•ァイル記述å­ã‚’渡ã™ã¹ãã‹ã‚’指示ã—ã¾ã™ã€‚Python 2 ã§ã¯ã€ã“ã®å¼•数㯠``close_fds`` ã‚’ False ã«è¨­å®šã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw before_communicate_callback" msgstr "kw before_communicate_callback" #: ansible.module_utils.basic.AnsibleModule.run_command:46 of msgid "This function will be called after ``Popen`` object will be created but before communicating to the process. (``Popen`` object will be passed to callback as a first argument)" msgstr "ã“ã®é–¢æ•°ã¯ã€``Popen`` オブジェクトãŒä½œæˆã•れるã¨å‘¼ã³å‡ºã•れã¾ã™ãŒã€ãƒ—ロセスã«é€šä¿¡ã™ã‚‹å‰ã«å‘¼ã³å‡ºã•れã¾ã™ (``Popen`` ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯æœ€åˆã®å¼•æ•°ã¨ã—ã¦ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã«æ¸¡ã•れã¾ã™)。" #: ansible.module_utils.basic.AnsibleModule.run_command of msgid "kw ignore_invalid_cwd" msgstr "kw ignore_invalid_cwd" #: ansible.module_utils.basic.AnsibleModule.run_command:50 of msgid "This flag indicates whether an invalid ``cwd`` (non-existent or not a directory) should be ignored or should raise an exception." msgstr "ã“ã®ãƒ•ラグã¯ã€ç„¡åŠ¹ãª ``cwd`` (存在ã—ãªã„ã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã¯ãªã„) を無視ã™ã‚‹ã¹ãã‹ã€ä¾‹å¤–を発生ã•ã›ã‚‹ã¹ãã‹ã‚’示ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.run_command:53 of msgid "A 3-tuple of return code (integer), stdout (native string), and stderr (native string). On python2, stdout and stderr are both byte strings. On python3, stdout and stderr are text strings converted according to the encoding and errors parameters. If you want byte strings on python3, use encoding=None to turn decoding to text off." msgstr "リターンコード (æ•´æ•°)ã€stdout (ãƒã‚¤ãƒ†ã‚£ãƒ–文字列) ã€ãŠã‚ˆã³ stderr (ãƒã‚¤ãƒ†ã‚£ãƒ–文字列) ã® 3 ã¤ã®ã‚¿ãƒ—ルã§ã™ã€‚python2 ã§ã¯ stdout 㨠stderr ã¯ã©ã¡ã‚‰ã‚‚ãƒã‚¤ãƒˆæ–‡å­—列ã§ã™ã€‚python3 ã§ã¯ã€stdout 㨠stderr ã¯ã€encoding パラメーター㨠errors パラメーターã«å¾“ã£ã¦å¤‰æ›ã•れãŸãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列ã§ã™ã€‚python3 ã§ãƒã‚¤ãƒˆæ–‡å­—列ã«ã—ãŸã„å ´åˆã¯ã€encoding=None を使用ã—ã¦ãƒ†ã‚­ã‚¹ãƒˆã¸ã®ãƒ‡ã‚³ãƒ¼ãƒ‰ã‚’オフã«ã—ã¦ãã ã•ã„。" #: ansible.module_utils.basic.AnsibleModule.sha1:1 of msgid "Return SHA1 hex digest of local file using digest_from_file()." msgstr "digest_from_file() を使用ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイル㮠SHA1 hex ダイジェストを返ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.AnsibleModule.sha256:1 of msgid "Return SHA-256 hex digest of local file using digest_from_file()." msgstr "digest_from_file() を使用ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイル㮠SHA-256 hex ダイジェストを返ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/module_utils.rst:22 msgid "Basic" msgstr "基本" #: ../../rst/reference_appendices/module_utils.rst:24 msgid "To use this functionality, include ``import ansible.module_utils.basic`` in your module." msgstr "ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« ``import ansible.module_utils.basic`` を追加ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.get_all_subclasses:1 of msgid "**Deprecated**: Use ansible.module_utils.common._utils.get_all_subclasses instead" msgstr "**éžæŽ¨å¥¨**: 代ã‚り㫠ansible.module_utils.common._utils.get_all_subclasses を使用ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.get_platform:1 of msgid "**Deprecated** Use :py:func:`platform.system` directly." msgstr "**éžæŽ¨å¥¨** :py:func:`platform.system` を直接使用ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.get_platform:3 of msgid "Name of the platform the module is running on in a native string" msgstr "モジュールãŒãƒã‚¤ãƒ†ã‚£ãƒ–文字列ã§å®Ÿè¡Œã•れã¦ã„るプラットフォームã®åå‰" #: ansible.module_utils.basic.get_platform:5 of msgid "Returns a native string that labels the platform (\"Linux\", \"Solaris\", etc). Currently, this is the result of calling :py:func:`platform.system`." msgstr "プラットフォーム (「Linuxã€ã€ã€ŒSolarisã€ãªã©) ã«ãƒ©ãƒ™ãƒ«ã‚’付ã‘ã‚‹ãƒã‚¤ãƒ†ã‚£ãƒ–文字列を返ã—ã¾ã™ã€‚ç¾åœ¨ã€ã“れ㯠:py:func:`platform.system` を呼ã³å‡ºã—ãŸçµæžœã«ãªã‚Šã¾ã™ã€‚" #: ansible.module_utils.basic.heuristic_log_sanitize:1 of msgid "Remove strings that look like passwords from log messages" msgstr "ログメッセージã‹ã‚‰ãƒ‘スワードã®ã‚ˆã†ã«è¦‹ãˆã‚‹æ–‡å­—列を削除ã—ã¾ã™ã€‚" #: ansible.module_utils.basic.load_platform_subclass:1 of msgid "**Deprecated**: Use ansible.module_utils.common.sys_info.get_platform_subclass instead" msgstr "**éžæŽ¨å¥¨**: 代ã‚り㫠ansible.module_utils.common.sys_info.get_platform_subclass を使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/module_utils.rst:31 msgid "Argument Spec" msgstr "引数ã®ä»•様" #: ../../rst/reference_appendices/module_utils.rst:33 msgid "Classes and functions for validating parameters against an argument spec." msgstr "引数仕様ã«å¯¾ã—ã¦ãƒ‘ラメーターを検証ã™ã‚‹ã‚¯ãƒ©ã‚¹ãŠã‚ˆã³é–¢æ•°ã§ã™ã€‚" #: ../../rst/reference_appendices/module_utils.rst:36 msgid "ArgumentSpecValidator" msgstr "ArgumentSpecValidator" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:1 of msgid "Argument spec validation class" msgstr "引数仕様検証クラス" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:3 of msgid "Creates a validator based on the ``argument_spec`` that can be used to validate a number of parameters using the :meth:`validate` method." msgstr ":meth:`validate` メソッドを使用ã—ã¦å¤šãã®ãƒ‘ラメーターを検証ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ ``argument_spec`` ã«åŸºã¥ã„ã¦ãƒãƒªãƒ‡ãƒ¼ã‚¿ãƒ¼ã‚’作æˆã—ã¾ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:6 of msgid "Specification of valid parameters and their type. May include nested argument specs." msgstr "有効ãªãƒ‘ラメーターã¨ãã®ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚ãƒã‚¹ãƒˆã•れãŸå¼•数仕様をå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:10 of msgid "List or list of lists of terms that should not be provided together." msgstr "ã¾ã¨ã‚ã¦æä¾›ã™ã¹ãã§ãªã„用語ã®ãƒªã‚¹ãƒˆã€ã¾ãŸã¯ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:14 of msgid "List of lists of terms that are required together." msgstr "åŒæ™‚ã«å¿…è¦ã¨ãªã‚‹ç”¨èªžã®ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:17 of msgid "List of lists of terms, one of which in each list is required." msgstr "用語ã®ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚å„リスト㫠1 ã¤ã®ç”¨èªžãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:21 of msgid "List of lists of ``[parameter, value, [parameters]]`` where one of ``[parameters]`` is required if ``parameter == value``." msgstr "``parameter == value`` ã®å ´åˆã« ``[parameters]`` ã® 1 ã¤ãŒå¿…è¦ã«ãªã‚‹ ``[parameter, value, [parameters]]`` ã®ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã§ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator:25 of msgid "Dictionary of parameter names that contain a list of parameters required by each key in the dictionary." msgstr "ディクショナリーã®å„キーã«å¿…è¦ãªãƒ‘ラメーターåã®ä¸€è¦§ãŒå«ã¾ã‚Œã‚‹ãƒ‘ラメーターåã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate:1 of msgid "Validate ``parameters`` against argument spec." msgstr "引数仕様ã«å¯¾ã—㦠``parameters`` を検証ã—ã¾ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate:3 of msgid "Error messages in the :class:`ValidationResult` may contain no_log values and should be sanitized with :func:`~ansible.module_utils.common.parameters.sanitize_keys` before logging or displaying." msgstr ":class:`ValidationResult` ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã« no_log ã®å€¤ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã€ãƒ­ã‚°ã¾ãŸã¯è¡¨ç¤ºã®å‰ã« :func:`~ansible.module_utils.common.parameters.sanitize_keys` ã§ã‚µãƒ‹ã‚¿ã‚¤ã‚ºã•れるã¯ãšã§ã™ã€‚" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate:6 of msgid "Parameters to validate against the argument spec" msgstr "引数仕様ã«å¯¾ã—ã¦æ¤œè¨¼ã™ã‚‹ãƒ‘ラメーター" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate:9 of msgid ":class:`ValidationResult` containing validated parameters." msgstr "検証済ã¿ãƒ‘ラメーターãŒå«ã¾ã‚Œã‚‹ :class:`ValidationResult`。" #: ansible.module_utils.common.arg_spec.ArgumentSpecValidator.validate of msgid "Simple Example" msgstr "ç°¡å˜ãªä¾‹" #: ../../rst/reference_appendices/module_utils.rst:42 msgid "ValidationResult" msgstr "ValidationResult" #: ansible.module_utils.common.arg_spec.ValidationResult:1 of msgid "Result of argument spec validation." msgstr "引数ã®ä»•様検証ã®çµæžœã§ã™ã€‚" #: ansible.module_utils.common.arg_spec.ValidationResult:3 of msgid "This is the object returned by :func:`ArgumentSpecValidator.validate() ` containing the validated parameters and any errors." msgstr "ã“れã¯ã€æ¤œè¨¼ã—ãŸãƒ‘ラメーターãŠã‚ˆã³ã‚¨ãƒ©ãƒ¼ãŒå«ã¾ã‚Œã‚‹ :func:`ArgumentSpecValidator.validate() ` ã«ã‚ˆã£ã¦è¿”ã•れるオブジェクトã§ã™ã€‚" #: ansible.module_utils.common.arg_spec.ValidationResult:7 of msgid "Terms to be validated and coerced to the correct type." msgstr "検証ã•ã‚Œã€æ­£ã—ã„タイプã«å¼·åˆ¶ã•れる用語。" #: ansible.module_utils.common.arg_spec.ValidationResult._no_log_values:1 of msgid ":class:`set` of values marked as ``no_log`` in the argument spec. This is a temporary holding place for these values and may move in the future." msgstr "引数仕様㧠``no_log`` ã¨ãƒžãƒ¼ã‚¯ã•れãŸå€¤ã® :class:`set`。ã“れã¯ã€ã“れらã®å€¤ã®ä¸€æ™‚çš„ãªä¿æŒã¨ãªã‚Šã€ä»Šå¾Œç§»å‹•ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ansible.module_utils.common.arg_spec.ValidationResult.errors:1 of msgid ":class:`~ansible.module_utils.errors.AnsibleValidationErrorMultiple` containing all :class:`~ansible.module_utils.errors.AnsibleValidationError` objects if there were any failures during validation." msgstr "検証中ã«å¤±æ•—ã—ãŸå ´åˆã¯ã€ã™ã¹ã¦ã® :class:`~ansible.module_utils.errors.AnsibleValidationError` オブジェクトをå«ã‚€ :class:`~ansible.module_utils.errors.AnsibleValidationErrorMultiple`。" #: ansible.module_utils.common.arg_spec.ValidationResult.validated_parameters:1 #: of msgid "Validated and coerced parameters." msgstr "検証ãŠã‚ˆã³å¼·åˆ¶ã•れãŸãƒ‘ラメーター。" #: ansible.module_utils.common.arg_spec.ValidationResult.unsupported_parameters:1 #: of msgid ":class:`set` of unsupported parameter names." msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã®ãƒ‘ラメーターåã® :class:`set`。" #: ansible.module_utils.common.arg_spec.ValidationResult.error_messages:1 of msgid ":class:`list` of all error messages from each exception in :attr:`errors`." msgstr ":attr:`errors` ã®å„例外ã®ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã® :class:`list`。" #: ../../rst/reference_appendices/module_utils.rst:57 msgid ":class:`dict` of type names, such as ``'str'``, and the default function used to check that type, :func:`~ansible.module_utils.common.validation.check_type_str` in this case." msgstr "``'str'`` ãªã©ï½ï½ã‚¿ã‚¤ãƒ—åã® :class:`dict` ã¨ã€ãã®ã‚¿ã‚¤ãƒ—ã®ç¢ºèªã«ä½¿ç”¨ã•れるデフォルトã®é–¢æ•°ã€‚ã“ã®å ´åˆã¯ :func:`~ansible.module_utils.common.validation.check_type_str` ã«ãªã‚Šã¾ã™ã€‚" #: ansible.module_utils.common.parameters.env_fallback:1 of msgid "Load value from environment variable" msgstr "環境変数ã‹ã‚‰ã®å€¤ã‚’読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ansible.module_utils.common.parameters.remove_values:1 of msgid "Remove strings in ``no_log_strings`` from value." msgstr "``no_log_strings`` ã®æ–‡å­—列を値ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚" #: ansible.module_utils.common.parameters.remove_values:3 of msgid "If value is a container type, then remove a lot more." msgstr "値ãŒã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚¿ã‚¤ãƒ—ã§ã‚ã‚‹å ´åˆã¯ã€ã•らã«å‰Šé™¤ã—ã¾ã™ã€‚" #: ansible.module_utils.common.parameters.remove_values:5 of msgid "Use of ``deferred_removals`` exists, rather than a pure recursive solution, because of the potential to hit the maximum recursion depth when dealing with large amounts of data (see `issue #24560 `_)." msgstr "大é‡ã®ãƒ‡ãƒ¼ã‚¿ã‚’処ç†ã™ã‚‹éš›ã«æœ€å¤§å†å¸°æ·±åº¦ã«é”ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ç´”粋ãªå†å¸°çš„ãªã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ãªãã€``deferred_removals`` ãŒä½¿ç”¨ã•れã¾ã™ (`issue #24560 `_ ã‚’å‚ç…§)。" #: ansible.module_utils.common.parameters.sanitize_keys:1 of msgid "Sanitize the keys in a container object by removing ``no_log`` values from key names." msgstr "``no_log`` ã®å€¤ã‚’キーåã‹ã‚‰å‰Šé™¤ã—ã¦ã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚ªãƒ–ジェクトã§ã‚­ãƒ¼ã‚’サニタイズã—ã¾ã™ã€‚" #: ansible.module_utils.common.parameters.sanitize_keys:3 of msgid "This is a companion function to the :func:`remove_values` function. Similar to that function, we make use of ``deferred_removals`` to avoid hitting maximum recursion depth in cases of large data structures." msgstr "ã“れã¯ã€:func:`remove_values` 関数ã®ã‚³ãƒ³ãƒ‘ニオン関数ã§ã™ã€‚ã“ã®é–¢æ•°ã¨åŒæ§˜ã«ã€``deferred_removals`` を使用ã—ã¦å¤§ããªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®å ´åˆã«æœ€å¤§å†å¸°æ·±åº¦ã«åˆ°é”ã—ãªã„よã†ã«ã—ã¾ã™ã€‚" #: ansible.module_utils.common.parameters.sanitize_keys:7 of msgid "The container object to sanitize. Non-container objects are returned unmodified." msgstr "サニタイズã™ã‚‹ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚ªãƒ–ジェクト。éžã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚ªãƒ–ジェクトã¯å¤‰æ›´ã•れãšã«è¿”ã•れã¾ã™ã€‚" #: ansible.module_utils.common.parameters.sanitize_keys:8 of msgid "A set of string values we do not want logged." msgstr "ログã«è¨˜éŒ²ã—ãŸããªã„文字列値ã®ã‚»ãƒƒãƒˆã€‚" #: ansible.module_utils.common.parameters.sanitize_keys:9 of msgid "A set of string values of keys to not sanitize." msgstr "サニタイズã—ãªã„ã‚­ãƒ¼ã®æ–‡å­—列値ã®ã‚»ãƒƒãƒˆã€‚" #: ansible.module_utils.common.parameters.sanitize_keys:11 of msgid "An object with sanitized keys." msgstr "サニタイズã•れãŸã‚­ãƒ¼ã‚’æŒã¤ã‚ªãƒ–ジェクト。" #: ../../rst/reference_appendices/module_utils.rst:61 msgid "Validation" msgstr "検証" #: ../../rst/reference_appendices/module_utils.rst:63 msgid "Standalone functions for validating various parameter types." msgstr "ã•ã¾ã–ã¾ãªãƒ‘ラメータータイプを検証ã™ã‚‹ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³æ©Ÿèƒ½ã€‚" #: ansible.module_utils.common.validation.check_missing_parameters:1 of msgid "This is for checking for required params when we can not check via argspec because we need more information than is simply given in the argspec." msgstr "ã“れã¯ã€å˜ã« argspec ã§æŒ‡å®šã•れるよりも多ãã®æƒ…å ±ãŒå¿…è¦ãªãŸã‚ã€argspec を介ã—ã¦ç¢ºèªã§ããªã„å ´åˆã«å¿…è¦ãªãƒ‘ラメーターを確èªã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ansible.module_utils.common.validation.check_missing_parameters:4 of msgid "Raises :class:`TypeError` if any required parameters are missing" msgstr "å¿…è¦ãªãƒ‘ラメーターãŒãªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_missing_parameters:6 #: ansible.module_utils.common.validation.check_mutually_exclusive:7 #: ansible.module_utils.common.validation.check_required_arguments:8 #: ansible.module_utils.common.validation.check_required_by:7 #: ansible.module_utils.common.validation.check_required_if:18 #: ansible.module_utils.common.validation.check_required_one_of:8 #: ansible.module_utils.common.validation.check_required_together:9 #: ansible.module_utils.common.validation.count_terms:4 of msgid "Dictionary of parameters" msgstr "パラメーターã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼" #: ansible.module_utils.common.validation.check_missing_parameters:7 of msgid "List of parameters to look for in the given parameters." msgstr "指定ã®ãƒ‘ラメーターを検索ã™ã‚‹ãƒ‘ラメーターã®ä¸€è¦§" #: ansible.module_utils.common.validation.check_missing_parameters:9 #: ansible.module_utils.common.validation.check_mutually_exclusive:11 #: ansible.module_utils.common.validation.check_required_arguments:12 #: ansible.module_utils.common.validation.check_required_one_of:12 #: ansible.module_utils.common.validation.check_required_together:13 of msgid "Empty list or raises :class:`TypeError` if the check fails." msgstr "空ã®ãƒªã‚¹ãƒˆ (確èªã«å¤±æ•—ã—ãŸå ´åˆã¯ :class:`TypeError` ãŒç™ºç”Ÿ)" #: ansible.module_utils.common.validation.check_mutually_exclusive:1 of msgid "Check mutually exclusive terms against argument parameters" msgstr "引数パラメーターã«å¯¾ã—ã¦ç›¸äº’排他的ãªç”¨èªžã‚’確èªã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_mutually_exclusive:3 of msgid "Accepts a single list or list of lists that are groups of terms that should be mutually exclusive with one another" msgstr "ç›¸äº’ã«æŽ’ä»–çš„ãªç”¨èªžã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã‚ã‚‹å˜ä¸€ã®ãƒªã‚¹ãƒˆã¾ãŸã¯ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã‚’å—ã‘入れã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_mutually_exclusive:6 of msgid "List of mutually exclusive parameters" msgstr "相互排他的パラメーターã®ãƒªã‚¹ãƒˆ" #: ansible.module_utils.common.validation.check_mutually_exclusive:8 #: ansible.module_utils.common.validation.check_required_one_of:9 #: ansible.module_utils.common.validation.check_required_together:10 of msgid "List of strings of parent key names if ``terms`` are in a sub spec." msgstr "``terms`` ãŒã‚µãƒ–仕様ã«ã‚ã‚‹å ´åˆã¯ã€è¦ªã‚­ãƒ¼åã®æ–‡å­—列ã®ãƒªã‚¹ãƒˆ" #: ansible.module_utils.common.validation.check_required_arguments:1 of msgid "Check all parameters in argument_spec and return a list of parameters that are required but not present in parameters." msgstr "argument_spec 内ã®ã™ã¹ã¦ã®ãƒ‘ラメーターを確èªã—ã€å¿…é ˆã§ã¯ã‚ã‚‹ãŒãƒ‘ラメーターã«å­˜åœ¨ã—ãªã„パラメーターã®ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_arguments:4 #: ansible.module_utils.common.validation.check_required_if:3 of msgid "Raises :class:`TypeError` if the check fails" msgstr "確èªã«å¤±æ•—ã™ã‚‹ã¨ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_arguments:6 of msgid "Argument spec dictionary containing all parameters and their specification" msgstr "ã™ã¹ã¦ã®ãƒ‘ラメーターã¨ãれらã®ä»•様をå«ã‚€å¼•数仕様ディクショナリー" #: ansible.module_utils.common.validation.check_required_arguments:9 of msgid "List of strings of parent key names if ``argument_spec`` are in a sub spec." msgstr "``argument_spec`` ãŒã‚µãƒ–仕様ã«ã‚ã‚‹å ´åˆã¯ã€è¦ªã‚­ãƒ¼åã®æ–‡å­—列ã®ãƒªã‚¹ãƒˆ" #: ansible.module_utils.common.validation.check_required_by:1 of msgid "For each key in requirements, check the corresponding list to see if they exist in parameters." msgstr "è¦ä»¶ã®å„キーã«ã¤ã„ã¦ã€å¯¾å¿œã™ã‚‹ãƒªã‚¹ãƒˆã‚’確èªã—ã¦ã€ãれらãŒãƒ‘ラメーターã«å­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_by:4 of msgid "Accepts a single string or list of values for each key." msgstr "å„キーã«å˜ä¸€ã®æ–‡å­—列ã¾ãŸã¯å€¤ã®ãƒªã‚¹ãƒˆã‚’å—ã‘入れã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_by:6 of msgid "Dictionary of requirements" msgstr "è¦ä»¶ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼" #: ansible.module_utils.common.validation.check_required_by:8 #: ansible.module_utils.common.validation.check_required_if:45 of msgid "List of strings of parent key names if ``requirements`` are in a sub spec." msgstr "``requirements`` ãŒã‚µãƒ–仕様ã«ã‚ã‚‹å ´åˆã¯ã€è¦ªã‚­ãƒ¼åã®æ–‡å­—列ã®ãƒªã‚¹ãƒˆ" #: ansible.module_utils.common.validation.check_required_by:11 of msgid "Empty dictionary or raises :class:`TypeError` if the" msgstr "空ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ (確èªã«å¤±æ•—ã—ãŸå ´åˆã¯ :class:`TypeError` ãŒç™ºç”Ÿ)" #: ansible.module_utils.common.validation.check_required_if:1 of msgid "Check parameters that are conditionally required" msgstr "æ¡ä»¶ä»˜ãã§å¿…è¦ãªãƒ‘ラメーターを確èªã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_if:5 of msgid "List of lists specifying a parameter, value, parameters required when the given parameter is the specified value, and optionally a boolean indicating any or all parameters are required." msgstr "パラメーターã€å€¤ã€æŒ‡å®šã•れãŸãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れãŸå€¤ã§ã‚ã‚‹å ´åˆã«å¿…è¦ãªãƒ‘ラメーターã€ãªã‚‰ã³ã«å¿…è¦ã«å¿œã˜ã¦ä¸€éƒ¨ã¾ãŸã¯ã™ã¹ã¦ã®ãƒ‘ラメーターãŒå¿…è¦ã§ã‚ã‚‹ã“ã¨ã‚’示ã™ãƒ–ール値を指定ã™ã‚‹ãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚" #: ansible.module_utils.common.validation.check_required_if of msgid "Example" msgstr "例" #: ansible.module_utils.common.validation.check_required_if:20 of msgid "Empty list or raises :class:`TypeError` if the check fails. The results attribute of the exception contains a list of dictionaries. Each dictionary is the result of evaluating each item in requirements. Each return dictionary contains the following keys: :key missing: List of parameters that are required but missing :key requires: 'any' or 'all' :key parameter: Parameter name that has the requirement :key value: Original value of the parameter :key requirements: Original required parameters :Example: .. code-block:: python [ { 'parameter': 'someint', 'value': 99 'requirements': ('bool_param', 'string_param'), 'missing': ['string_param'], 'requires': 'all', } ]" msgstr "空ã®ãƒªã‚¹ãƒˆ (確èªã«å¤±æ•—ã—ãŸå ´åˆã¯ :class:`TypeError` ãŒç™ºç”Ÿ)。例外ã®çµæžœå±žæ€§ã«ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒªã‚¹ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚å„ディクショナリーã¯ã€è¦ä»¶å†…ã®å„項目を評価ã—ãŸçµæžœã§ã™ã€‚ãれãžã‚Œã®æˆ»ã‚Šå€¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«ã¯ã€ä»¥ä¸‹ã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã¾ã™: :key missing: å¿…é ˆã§ã‚ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€æ¬ è½ã—ã¦ã„るパラメーターã®ãƒªã‚¹ãƒˆ :key requires: 「anyã€ã¾ãŸã¯ã€Œall〠:key parameter: è¦ä»¶ã‚’満ãŸã™ãƒ‘ラメーターå :key value: パラメーターã®å…ƒã®å€¤ :key requirements: å…ƒã®å¿…須パラメーター :例: .. code-block:: python [ { 'parameter': 'someint', 'value': 99 'requirements': ('bool_param', 'string_param'), 'missing': ['string_param'], 'requires': 'all', } ]" #: ansible.module_utils.common.validation.check_required_if:20 of msgid "Empty list or raises :class:`TypeError` if the check fails. The results attribute of the exception contains a list of dictionaries. Each dictionary is the result of evaluating each item in requirements. Each return dictionary contains the following keys:" msgstr "空ã®ãƒªã‚¹ãƒˆ (確èªã«å¤±æ•—ã—ãŸå ´åˆã¯ :class:`TypeError` ãŒç™ºç”Ÿ)。例外ã®çµæžœå±žæ€§ã«ã¯ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒªã‚¹ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚å„ディクショナリーã¯ã€è¦ä»¶å†…ã®å„項目を評価ã—ãŸçµæžœã§ã™ã€‚ãれãžã‚Œã®æˆ»ã‚Šå€¤ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã«ã¯ã€ä»¥ä¸‹ã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_if of msgid "key missing" msgstr "key missing" #: ansible.module_utils.common.validation.check_required_if:25 of msgid "List of parameters that are required but missing" msgstr "å¿…é ˆã§ã‚ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€æ¬ è½ã—ã¦ã„るパラメーターã®ãƒªã‚¹ãƒˆ" #: ansible.module_utils.common.validation.check_required_if of msgid "key requires" msgstr "key requires" #: ansible.module_utils.common.validation.check_required_if:26 of msgid "'any' or 'all'" msgstr "「anyã€ã¾ãŸã¯ã€Œallã€" #: ansible.module_utils.common.validation.check_required_if of msgid "key parameter" msgstr "key parameter" #: ansible.module_utils.common.validation.check_required_if:27 of msgid "Parameter name that has the requirement" msgstr "è¦ä»¶ã‚’満ãŸã™ãƒ‘ラメーターå" #: ansible.module_utils.common.validation.check_required_if of msgid "key value" msgstr "key value" #: ansible.module_utils.common.validation.check_required_if:28 of msgid "Original value of the parameter" msgstr "パラメーターã®å…ƒã®å€¤" #: ansible.module_utils.common.validation.check_required_if of msgid "key requirements" msgstr "key requirements" #: ansible.module_utils.common.validation.check_required_if:29 of msgid "Original required parameters" msgstr "å…ƒã®å¿…須パラメーター" #: ansible.module_utils.common.validation.check_required_one_of:1 of msgid "Check each list of terms to ensure at least one exists in the given module parameters" msgstr "用語ã®å„リストを確èªã—ã¦ã€æŒ‡å®šã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ラメーターã«å°‘ãªãã¨ã‚‚ 1 ã¤ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ansible.module_utils.common.validation.check_required_one_of:4 of msgid "Accepts a list of lists or tuples" msgstr "リストã¾ãŸã¯ã‚¿ãƒ—ルã®ä¸€è¦§ã‚’å—ã‘入れã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_one_of:6 of msgid "List of lists of terms to check. For each list of terms, at least one is required." msgstr "確èªã™ã‚‹ç”¨èªžãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚用語ã®å„リストã«å¯¾ã—ã¦ã€å°‘ãªãã¨ã‚‚ 1 ã¤ãŒå¿…è¦ã§ã™ã€‚" #: ansible.module_utils.common.validation.check_required_together:1 of msgid "Check each list of terms to ensure every parameter in each list exists in the given parameters." msgstr "用語ã®å„リストを確èªã—ã¦ã€å„リストã®ã™ã¹ã¦ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れãŸãƒ‘ラメーターã«å­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ansible.module_utils.common.validation.check_required_together:4 of msgid "Accepts a list of lists or tuples." msgstr "リストã¾ãŸã¯ã‚¿ãƒ—ルã®ãƒªã‚¹ãƒˆã‚’å—ã‘入れã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_required_together:6 of msgid "List of lists of terms to check. Each list should include parameters that are all required when at least one is specified in the parameters." msgstr "確èªã™ã‚‹ç”¨èªžãƒªã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã€‚å„リストã«ã¯ã€ãƒ‘ラメーターã§å°‘ãªãã¨ã‚‚ 1 ã¤ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«å¿…è¦ãªã™ã¹ã¦ã®ãƒ‘ラメーターをå«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bits:1 of msgid "Convert a human-readable string bits value to bits in integer." msgstr "人間ãŒåˆ¤èª­ã§ãる文字列ビットã®å€¤ã‚’æ•´æ•°ã®ãƒ“ットã«å¤‰æ›ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bits:3 of msgid "Example: ``check_type_bits('1Mb')`` returns integer 1048576." msgstr "例: ``check_type_bits('1Mb')`` ã¯æ•´æ•° 1048576 ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bits:5 of msgid "Raises :class:`TypeError` if unable to covert the value." msgstr "値をéžè¡¨ç¤ºã«ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bool:1 of msgid "Verify that the value is a bool or convert it to a bool and return it." msgstr "値ãŒãƒ–ール値ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‹ã€ãƒ–ールã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bool:3 of msgid "Raises :class:`TypeError` if unable to convert to a bool" msgstr "値をブール値ã«å¤‰æ›ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bool:5 of msgid "String, int, or float to convert to bool. Valid booleans include: '1', 'on', 1, '0', 0, 'n', 'f', 'false', 'true', 'y', 't', 'yes', 'no', 'off'" msgstr "ブール値ã«å¤‰æ›ã™ã‚‹æ–‡å­—åˆ—ã€æ•´æ•°ã€æµ®å‹•å°æ•°ç‚¹ã€‚有効ãªãƒ–ール値ã«ã¯ã€'1'ã€'on'ã€1ã€'0'ã€0ã€'n'ã€'f'ã€'false'ã€'true'ã€'y'ã€'t'ã€'yes'ã€'no'ã€'off' ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bool:8 of msgid "Boolean True or False" msgstr "ブール値 True ã¾ãŸã¯ False" #: ansible.module_utils.common.validation.check_type_bytes:1 of msgid "Convert a human-readable string value to bytes" msgstr "人間ãŒåˆ¤èª­ã§ãる文字列ã®å€¤ã‚’ãƒã‚¤ãƒˆã«å¤‰æ›ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_bytes:3 #: ansible.module_utils.common.validation.check_type_jsonarg:4 of msgid "Raises :class:`TypeError` if unable to covert the value" msgstr "値をéžè¡¨ç¤ºã«ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_dict:1 of msgid "Verify that value is a dict or convert it to a dict and return it." msgstr "値ãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‹ã€ã“れをディクショナリーã«å¤‰æ›ã—ã¦ã€è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_dict:3 of msgid "Raises :class:`TypeError` if unable to convert to a dict" msgstr "値をディクショナリーã«å¤‰æ›ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_dict:5 of msgid "Dict or string to convert to a dict. Accepts ``k1=v2, k2=v2``." msgstr "ディクショナリーã«å¤‰æ›ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¾ãŸã¯æ–‡å­—列。``k1=v2, k2=v2`` を使用ã§ãã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_dict:7 of msgid "value converted to a dictionary" msgstr "ディクショナリーã«å¤‰æ›ã•れãŸå€¤" #: ansible.module_utils.common.validation.check_type_float:1 of msgid "Verify that value is a float or convert it to a float and return it" msgstr "å€¤ãŒæµ®å‹•å°æ•°ç‚¹ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‹ã€ã“ã‚Œã‚’æµ®å‹•å°æ•°ç‚¹ã«å¤‰æ›ã—ã¦ã€è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_float:3 of msgid "Raises :class:`TypeError` if unable to convert to a float" msgstr "å€¤ã‚’æµ®å‹•å°æ•°ç‚¹ã«å¤‰æ›ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_float:5 of msgid "float, int, str, or bytes to verify or convert and return." msgstr "検証ã¾ãŸã¯å¤‰æ›ã—ã¦è¿”ã™æµ®å‹•å°æ•°ç‚¹ã€æ•´æ•°ã€æ–‡å­—列ã€ã¾ãŸã¯ãƒã‚¤ãƒˆã€‚" #: ansible.module_utils.common.validation.check_type_float:7 of msgid "float of given value." msgstr "指定ã•れãŸå€¤ã®æµ®å‹•å°æ•°ç‚¹" #: ansible.module_utils.common.validation.check_type_int:1 of msgid "Verify that the value is an integer and return it or convert the value to an integer and return it" msgstr "å€¤ãŒæ•´æ•°ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦è¿”ã™ã‹ã€å€¤ã‚’æ•´æ•°ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_int:4 of msgid "Raises :class:`TypeError` if unable to convert to an int" msgstr "値を整数ã«å¤‰æ›ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_int:6 of msgid "String or int to convert of verify" msgstr "検証ã®å¤‰æ›ã‚’è¡Œã†æ–‡å­—列ã¾ãŸã¯æ•´æ•°" #: ansible.module_utils.common.validation.check_type_int:8 of msgid "int of given value" msgstr "指定ã•れãŸå€¤ã® int" #: ansible.module_utils.common.validation.check_type_jsonarg:1 of msgid "Return a jsonified string. Sometimes the controller turns a json string into a dict/list so transform it back into json here" msgstr "json 化ã•ã‚ŒãŸæ–‡å­—列を返ã—ã¾ã™ã€‚コントローラー㌠json 文字列をディクショナリーã¾ãŸã¯ãƒªã‚¹ãƒˆã«å¤‰æ›ã™ã‚‹å ´åˆãŒã‚ã‚‹ãŸã‚ã€ã“ã“ã§ json ã«å¤‰æ›ã—ç›´ã—ã¦ãã ã•ã„。" #: ansible.module_utils.common.validation.check_type_list:1 of msgid "Verify that the value is a list or convert to a list" msgstr "値ãŒãƒªã‚¹ãƒˆã§ã‚ã‚‹ã‹ã€ã¾ãŸã¯ãƒªã‚¹ãƒˆã«å¤‰æ›ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_list:3 of msgid "A comma separated string will be split into a list. Raises a :class:`TypeError` if unable to convert to a list." msgstr "ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã¯ãƒªã‚¹ãƒˆã«åˆ†å‰²ã•れã¾ã™ã€‚リストã«ã«å¤‰æ›ã§ããªã„å ´åˆã¯ :class:`TypeError` を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_list:6 of msgid "Value to validate or convert to a list" msgstr "リストを検証ã¾ãŸã¯å¤‰æ›ã™ã‚‹å€¤" #: ansible.module_utils.common.validation.check_type_list:8 of msgid "Original value if it is already a list, single item list if a float, int, or string without commas, or a multi-item list if a comma-delimited string." msgstr "ã™ã§ã«ãƒªã‚¹ãƒˆã§ã‚ã‚‹å ´åˆã¯å…ƒã®å€¤ã€‚æµ®å‹•å°æ•°ç‚¹ã€intã€ã¾ãŸã¯ã‚³ãƒ³ãƒžã®ãªã„文字列ã®å ´åˆã¯å˜ä¸€é …ç›®ã®ãƒªã‚¹ãƒˆã€‚ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã®å ´åˆã¯è¤‡æ•°é …ç›®ã®ãƒªã‚¹ãƒˆã€‚" #: ansible.module_utils.common.validation.check_type_path:1 of msgid "Verify the provided value is a string or convert it to a string, then return the expanded path" msgstr "指定ã•れãŸå€¤ãŒæ–‡å­—列ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‹ã€æ–‡å­—列ã«å¤‰æ›ã—ã¦ã‹ã‚‰ã€å±•é–‹ã•れãŸãƒ‘スを返ã—ã¾ã™" #: ansible.module_utils.common.validation.check_type_raw:1 of msgid "Returns the raw value" msgstr "生ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_str:1 of msgid "Verify that the value is a string or convert to a string." msgstr "å€¤ãŒæ–‡å­—列ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‹ã€ã“れを文字列ã«å¤‰æ›ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_str:3 of msgid "Since unexpected changes can sometimes happen when converting to a string, ``allow_conversion`` controls whether or not the value will be converted or a TypeError will be raised if the value is not a string and would be converted" msgstr "文字列ã¸ã®å¤‰æ›æ™‚ã«äºˆæœŸã›ã¬å¤‰æ›´ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€``allow_conversion`` ã¯ã€å€¤ãŒå¤‰æ›ã•れるã‹ã©ã†ã‹ã€ã¾ãŸã¯å€¤ãŒæ–‡å­—列ã§ãªã‘れ㰠TypeError ãŒç™ºç”Ÿã•ã›ã€å¤‰æ›ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.check_type_str:7 of msgid "Value to validate or convert to a string" msgstr "検証ã¾ãŸã¯æ–‡å­—列ã«å¤‰æ›ã™ã‚‹å€¤" #: ansible.module_utils.common.validation.check_type_str:8 of msgid "Whether to convert the string and return it or raise a TypeError" msgstr "文字列を変æ›ã—ã¦è¿”ã™ã‹ã€TypeError を発生ã•ã›ã‚‹ã‹" #: ansible.module_utils.common.validation.check_type_str:11 of msgid "Original value if it is a string, the value converted to a string if allow_conversion=True, or raises a TypeError if allow_conversion=False." msgstr "文字列ã®å ´åˆã¯å…ƒã®å€¤ã€‚allow_conversion=True ã®å ´åˆã¯å€¤ã‚’文字列ã«å¤‰æ›ã—ã€allow_conversion=False ã®å ´åˆã¯ TypeError を発生ã•ã›ã¾ã™ã€‚" #: ansible.module_utils.common.validation.count_terms:1 of msgid "Count the number of occurrences of a key in a given dictionary" msgstr "特定ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã‚­ãƒ¼ã®ç™ºç”Ÿå›žæ•°ã‚’カウントã—ã¾ã™ã€‚" #: ansible.module_utils.common.validation.count_terms:3 of msgid "String or iterable of values to check" msgstr "確èªã™ã‚‹å€¤ã®æ–‡å­—列ã¾ãŸã¯å復å¯èƒ½" #: ansible.module_utils.common.validation.count_terms:6 of msgid "An integer that is the number of occurrences of the terms values in the provided dictionary." msgstr "æä¾›ã•れãŸãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã®ç”¨èªžã®å€¤ã®å‡ºç¾å›žæ•°ã‚’è¡¨ã™æ•´æ•°ã€‚" #: ../../rst/reference_appendices/module_utils.rst:70 msgid "Errors" msgstr "エラー" #: ansible.module_utils.errors.AnsibleFallbackNotFound:1 of msgid "Fallback validator was not found" msgstr "フォールãƒãƒƒã‚¯ãƒãƒªãƒ‡ãƒ¼ã‚¿ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" #: ansible.module_utils.errors.AnsibleValidationError:1 of msgid "Single argument spec validation error" msgstr "å˜ä¸€ã®å¼•æ•°ã®ä»•様検証エラー" #: ansible.module_utils.errors.AnsibleValidationError.error_message:1 #: ansible.module_utils.errors.AnsibleValidationError.msg:1 of msgid "The error message passed in when the exception was raised." msgstr "例外ãŒç™ºç”Ÿã—ãŸã¨ãã«æ¸¡ã•れãŸã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple:1 of msgid "Multiple argument spec validation errors" msgstr "複数ã®å¼•数仕様検証エラー" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.errors:1 of msgid ":class:`list` of :class:`AnsibleValidationError` objects" msgstr ":class:`AnsibleValidationError` オブジェクト㮠:class:`list`" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.msg:1 of msgid "The first message from the first error in ``errors``." msgstr "``errors`` ã®æœ€åˆã®ã‚¨ãƒ©ãƒ¼ã‹ã‚‰ã®æœ€åˆã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.messages:1 of msgid ":class:`list` of each error message in ``errors``." msgstr "``errors`` ã®å„エラーメッセージ㮠:class:`list`" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.append:1 of msgid "Append a new error to ``self.errors``." msgstr "``self.errors`` ã«æ–°ã—ã„エラーを追加ã—ã¾ã™ã€‚" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.append:3 of msgid "Only :class:`AnsibleValidationError` should be added." msgstr ":class:`AnsibleValidationError` ã ã‘を追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ansible.module_utils.errors.AnsibleValidationErrorMultiple.extend:1 of msgid "Append each item in ``errors`` to ``self.errors``. Only :class:`AnsibleValidationError` should be added." msgstr "``errors`` ã®å„アイテムを ``self.errors`` ã«è¿½åŠ ã—ã¾ã™ã€‚:class:`AnsibleValidationError` ã®ã¿ã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ansible.module_utils.errors.AliasError:1 of msgid "Error handling aliases" msgstr "エイリアスã®å‡¦ç†ä¸­ã®ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.ArgumentTypeError:1 of msgid "Error with parameter type" msgstr "パラメータータイプã®ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.ArgumentValueError:1 of msgid "Error with parameter value" msgstr "パラメーター値ã®ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.ElementError:1 of msgid "Error when validating elements" msgstr "è¦ç´ æ¤œè¨¼æ™‚ã®ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.MutuallyExclusiveError:1 of msgid "Mutually exclusive parameters were supplied" msgstr "ç›¸äº’ã«æŽ’ä»–çš„ãªãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ã¾ã™ã€‚" #: ansible.module_utils.errors.NoLogError:1 of msgid "Error converting no_log values" msgstr "no_log 値ã®å¤‰æ›ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.RequiredByError:1 of msgid "Error with parameters that are required by other parameters" msgstr "ä»–ã®ãƒ‘ラメーターã§å¿…è¦ãªãƒ‘ラメーターã§ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.RequiredDefaultError:1 of msgid "A required parameter was assigned a default value" msgstr "必須パラメーターã«ãƒ‡ãƒ•ォルト値ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚" #: ansible.module_utils.errors.RequiredError:1 of msgid "Missing a required parameter" msgstr "必須パラメーターãŒã‚りã¾ã›ã‚“" #: ansible.module_utils.errors.RequiredIfError:1 of msgid "Error with conditionally required parameters" msgstr "æ¡ä»¶çš„必須パラメーターã®ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.RequiredOneOfError:1 of msgid "Error with parameters where at least one is required" msgstr "最低 1 ã¤ã¯å¿…è¦ãªãƒ‘ラメーターã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.RequiredTogetherError:1 of msgid "Error with parameters that are required together" msgstr "åŒæ™‚ã«å¿…è¦ã¨ãªã‚‹ãƒ‘ラメーターã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼" #: ansible.module_utils.errors.SubParameterTypeError:1 of msgid "Incorrect type for subparameter" msgstr "サブパラメーターã®åž‹ãŒæ­£ã—ãã‚りã¾ã›ã‚“。" #: ansible.module_utils.errors.UnsupportedError:1 of msgid "Unsupported parameters were supplied" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:4 msgid "Playbook Keywords" msgstr "Playbook キーワード" #: ../../rst/reference_appendices/playbooks_keywords.rst:6 msgid "These are the keywords available on common playbook objects. Keywords are one of several sources for configuring Ansible behavior. See :ref:`general_precedence_rules` for details on the relative precedence of each source." msgstr "ã“れらã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã€ä¸€èˆ¬çš„㪠Playbook オブジェクトã§åˆ©ç”¨ã§ãã¾ã™ã€‚キーワードã¯ã€Ansible ã®å‹•作を設定ã™ã‚‹è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã®ã„ãšã‚Œã‹ã§ã™ã€‚å„ソースã®ç›¸å¯¾å„ªå…ˆé †ä½ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`general_precedence_rules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:9 msgid "Please note:" msgstr "注æ„:" #: ../../rst/reference_appendices/playbooks_keywords.rst:11 msgid "Aliases for the directives are not reflected here, nor are mutable one. For example, :term:`action` in task can be substituted by the name of any Ansible module." msgstr "ディレクティブã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¯ã“ã“ã§ã¯å映ã•れã¦ãŠã‚‰ãšã€å¤‰æ›´å¯èƒ½ãªã‚‚ã®ã§ã‚‚ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ã® :term:`action` ã¯ã€Ansible モジュールã®åå‰ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:13 msgid "The keywords do not have ``version_added`` information at this time" msgstr "ç¾æ™‚点ã§ã¯ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã« ``version_added`` 情報ãŒã‚りã¾ã›ã‚“" #: ../../rst/reference_appendices/playbooks_keywords.rst:14 msgid "Some keywords set defaults for the objects inside of them rather than for the objects themselves" msgstr "キーワードã«ã‚ˆã£ã¦ã¯ã€ã‚ªãƒ–ジェクト自体ã§ã¯ãªãã€ã‚ªãƒ–ジェクト内ã«ãƒ‡ãƒ•ォルトを設定ã™ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:24 msgid "Play" msgstr "プレイ" #: ../../rst/reference_appendices/playbooks_keywords.rst:27 #: ../../rst/reference_appendices/playbooks_keywords.rst:159 #: ../../rst/reference_appendices/playbooks_keywords.rst:252 #: ../../rst/reference_appendices/playbooks_keywords.rst:354 msgid "Force any un-handled task errors on any host to propagate to all hosts and end the play." msgstr "ホストã§å‡¦ç†ã•れã¦ã„ãªã„タスクエラーを強制的ã«å®Ÿè¡Œã—ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«ä¼æ’­ã—ã¦ãƒ—レイを終了ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:30 #: ../../rst/reference_appendices/playbooks_keywords.rst:162 #: ../../rst/reference_appendices/playbooks_keywords.rst:255 #: ../../rst/reference_appendices/playbooks_keywords.rst:363 msgid "Boolean that controls if privilege escalation is used or not on :term:`Task` execution. Implemented by the become plugin. See :ref:`become_plugins`." msgstr ":term:`タスク` ã®å®Ÿè¡Œæ™‚ã«ç‰¹æ¨©æ˜‡æ ¼ãŒä½¿ç”¨ã•れるã‹ã©ã†ã‹ã‚’制御ã™ã‚‹ãƒ–ール値。become プラグインã«ã‚ˆã£ã¦å®Ÿè£…ã•れã¾ã™ã€‚「:ref:`become_plugins`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:33 #: ../../rst/reference_appendices/playbooks_keywords.rst:165 #: ../../rst/reference_appendices/playbooks_keywords.rst:258 #: ../../rst/reference_appendices/playbooks_keywords.rst:366 msgid "Path to the executable used to elevate privileges. Implemented by the become plugin. See :ref:`become_plugins`." msgstr "権é™ã®æ˜‡æ ¼ã«ä½¿ç”¨ã™ã‚‹å®Ÿè¡Œå¯èƒ½ãƒ•ァイルã¸ã®ãƒ‘ス。become プラグインã«ã‚ˆã£ã¦å®Ÿè£…ã•れã¾ã™ã€‚「:ref:`become_plugins`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:36 #: ../../rst/reference_appendices/playbooks_keywords.rst:168 #: ../../rst/reference_appendices/playbooks_keywords.rst:261 #: ../../rst/reference_appendices/playbooks_keywords.rst:369 msgid "A string of flag(s) to pass to the privilege escalation program when :term:`become` is True." msgstr ":term:`become` ㌠True ã®å ´åˆã«ç‰¹æ¨©æ˜‡æ ¼ãƒ—ãƒ­ã‚°ãƒ©ãƒ ã«æ¸¡ã™ãƒ•ãƒ©ã‚°ã®æ–‡å­—列。" #: ../../rst/reference_appendices/playbooks_keywords.rst:39 #: ../../rst/reference_appendices/playbooks_keywords.rst:171 #: ../../rst/reference_appendices/playbooks_keywords.rst:264 #: ../../rst/reference_appendices/playbooks_keywords.rst:372 msgid "Which method of privilege escalation to use (such as sudo or su)." msgstr "使用ã™ã‚‹æ¨©é™æ˜‡æ ¼ã®æ–¹æ³• (sudoã€su ãªã©)。" #: ../../rst/reference_appendices/playbooks_keywords.rst:42 #: ../../rst/reference_appendices/playbooks_keywords.rst:174 #: ../../rst/reference_appendices/playbooks_keywords.rst:267 #: ../../rst/reference_appendices/playbooks_keywords.rst:375 msgid "User that you 'become' after using privilege escalation. The remote/login user must have permissions to become this user." msgstr "特権昇格を使用ã—ãŸå¾Œã«ã€Œbecomeã€ã¨ãªã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚リモート/ログインユーザーã«ã¯ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ (become) ãŸã‚ã®ãƒ‘ーミッションãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:45 #: ../../rst/reference_appendices/playbooks_keywords.rst:177 #: ../../rst/reference_appendices/playbooks_keywords.rst:273 #: ../../rst/reference_appendices/playbooks_keywords.rst:381 msgid "check_mode" msgstr "check_mode" #: ../../rst/reference_appendices/playbooks_keywords.rst:45 #: ../../rst/reference_appendices/playbooks_keywords.rst:177 #: ../../rst/reference_appendices/playbooks_keywords.rst:273 #: ../../rst/reference_appendices/playbooks_keywords.rst:381 msgid "A boolean that controls if a task is executed in 'check' mode. See :ref:`check_mode_dry`." msgstr "「checkã€ãƒ¢ãƒ¼ãƒ‰ã§ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるã‹ã©ã†ã‹ã‚’制御ã™ã‚‹ãƒ–ール値。「:ref:`check_mode_dry`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:53 #: ../../rst/reference_appendices/playbooks_keywords.rst:185 #: ../../rst/reference_appendices/playbooks_keywords.rst:281 #: ../../rst/reference_appendices/playbooks_keywords.rst:389 msgid "collections" msgstr "collections" #: ../../rst/reference_appendices/playbooks_keywords.rst:48 #: ../../rst/reference_appendices/playbooks_keywords.rst:180 #: ../../rst/reference_appendices/playbooks_keywords.rst:276 #: ../../rst/reference_appendices/playbooks_keywords.rst:384 msgid "List of collection namespaces to search for modules, plugins, and roles. See :ref:`collections_using_playbook`" msgstr "モジュールã€ãƒ—ラグインã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’検索ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åå‰ç©ºé–“ã®ä¸€è¦§ã€‚「:ref:`collections_using_playbook`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:52 #: ../../rst/reference_appendices/playbooks_keywords.rst:184 #: ../../rst/reference_appendices/playbooks_keywords.rst:280 #: ../../rst/reference_appendices/playbooks_keywords.rst:388 msgid "Tasks within a role do not inherit the value of ``collections`` from the play. To have a role search a list of collections, use the ``collections`` keyword in ``meta/main.yml`` within a role." msgstr "ロール内ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ—レイã‹ã‚‰ ``collections`` ã®å€¤ã‚’継承ã—ã¾ã›ã‚“。ロール検索ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€è¦§ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ãƒ­ãƒ¼ãƒ«å†…ã§ ``meta/main.yml`` ã® ``collections`` キーワードを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:56 #: ../../rst/reference_appendices/playbooks_keywords.rst:188 #: ../../rst/reference_appendices/playbooks_keywords.rst:284 #: ../../rst/reference_appendices/playbooks_keywords.rst:392 msgid "connection" msgstr "connection" #: ../../rst/reference_appendices/playbooks_keywords.rst:56 #: ../../rst/reference_appendices/playbooks_keywords.rst:188 #: ../../rst/reference_appendices/playbooks_keywords.rst:284 #: ../../rst/reference_appendices/playbooks_keywords.rst:392 msgid "Allows you to change the connection plugin used for tasks to execute on the target. See :ref:`using_connection`." msgstr "ターゲットã§å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã«ä½¿ç”¨ã•れる connection プラグインを変更ã§ãã¾ã™ã€‚「:ref:`using_connection`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:59 #: ../../rst/reference_appendices/playbooks_keywords.rst:191 #: ../../rst/reference_appendices/playbooks_keywords.rst:287 #: ../../rst/reference_appendices/playbooks_keywords.rst:395 msgid "debugger" msgstr "debugger" #: ../../rst/reference_appendices/playbooks_keywords.rst:59 #: ../../rst/reference_appendices/playbooks_keywords.rst:191 #: ../../rst/reference_appendices/playbooks_keywords.rst:287 #: ../../rst/reference_appendices/playbooks_keywords.rst:395 msgid "Enable debugging tasks based on state of the task result. See :ref:`playbook_debugger`." msgstr "ã‚¿ã‚¹ã‚¯çµæžœã®çŠ¶æ…‹ã«åŸºã¥ã„ã¦ã€ãƒ‡ãƒãƒƒã‚°ã‚¿ã‚¹ã‚¯ã‚’有効ã«ã—ã¾ã™ã€‚「:ref:`playbook_debugger`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:62 #: ../../rst/reference_appendices/playbooks_keywords.rst:200 #: ../../rst/reference_appendices/playbooks_keywords.rst:296 #: ../../rst/reference_appendices/playbooks_keywords.rst:407 msgid "Toggle to make tasks return 'diff' information or not." msgstr "タスクãŒã€Œdiffã€æƒ…報を返ã™ã‚ˆã†ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:65 #: ../../rst/reference_appendices/playbooks_keywords.rst:203 #: ../../rst/reference_appendices/playbooks_keywords.rst:299 #: ../../rst/reference_appendices/playbooks_keywords.rst:410 msgid "environment" msgstr "environment" #: ../../rst/reference_appendices/playbooks_keywords.rst:65 #: ../../rst/reference_appendices/playbooks_keywords.rst:203 #: ../../rst/reference_appendices/playbooks_keywords.rst:299 #: ../../rst/reference_appendices/playbooks_keywords.rst:410 msgid "A dictionary that gets converted into environment vars to be provided for the task upon execution. This can ONLY be used with modules. This isn't supported for any other type of plugins nor Ansible itself nor its configuration, it just sets the variables for the code responsible for executing the task. This is not a recommended way to pass in confidential data." msgstr "実行時ã«ã€ã‚¿ã‚¹ã‚¯ç”¨ã«æä¾›ã•れãŸç’°å¢ƒå¤‰æ•°ã«å¤‰æ›ã•れるディクショナリー。ã“れã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚ã“れã¯ã€ä»–ã®ã‚¿ã‚¤ãƒ—ã®ãƒ—ラグインや Ansible 自体ã€ãã®è¨­å®šã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。タスクã®å®Ÿè¡Œã‚’担当ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®å¤‰æ•°ã ã‘を設定ã—ã¾ã™ã€‚ã“れã¯ã€æ©Ÿå¯†æ€§ã®é«˜ã„ãƒ‡ãƒ¼ã‚¿ã«æ¸¡ã™ãŸã‚ã®æŽ¨å¥¨æ–¹æ³•ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/playbooks_keywords.rst:68 msgid "Set the fact path option for the fact gathering plugin controlled by :term:`gather_facts`." msgstr ":term:`gather_facts` ãŒåˆ¶å¾¡ã™ã‚‹ãƒ•ァクトåŽé›†ãƒ—ラグインã®ãƒ•ァクトパスオプションを設定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:71 msgid "Will force notified handler execution for hosts even if they failed during the play. Will not trigger if the play itself fails." msgstr "プレイ中ã«å¤±æ•—ã—ãŸå ´åˆã§ã‚‚ã€ãƒ›ã‚¹ãƒˆã®é€šçŸ¥ãƒãƒ³ãƒ‰ãƒ©ãƒ¼å®Ÿè¡Œã‚’強制的ã«å®Ÿè¡Œã—ã¾ã™ã€‚プレイ自体ãŒå¤±æ•—ã—ãŸå ´åˆã¯ç™ºç”Ÿã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/playbooks_keywords.rst:74 msgid "gather_facts" msgstr "gather_facts" #: ../../rst/reference_appendices/playbooks_keywords.rst:74 msgid "A boolean that controls if the play will automatically run the 'setup' task to gather facts for the hosts." msgstr "プレイãŒè‡ªå‹•çš„ã«ã€Œsetupã€ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¦ãƒ›ã‚¹ãƒˆã®ãƒ•ァクトをåŽé›†ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã™ã‚‹ãƒ–ール値。" #: ../../rst/reference_appendices/playbooks_keywords.rst:77 msgid "Allows you to pass subset options to the fact gathering plugin controlled by :term:`gather_facts`." msgstr ":term:`gather_facts` ãŒåˆ¶å¾¡ã™ã‚‹ãƒ•ァクトåŽé›†ãƒ—ラグインã«ã‚µãƒ–セットオプションを渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:80 msgid "Allows you to set the timeout for the fact gathering plugin controlled by :term:`gather_facts`." msgstr ":term:`gather_facts` ãŒåˆ¶å¾¡ã™ã‚‹ãƒ•ァクトåŽé›†ãƒ—ラグインã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:83 msgid "handlers" msgstr "handlers" #: ../../rst/reference_appendices/playbooks_keywords.rst:83 msgid "A section with tasks that are treated as handlers, these won't get executed normally, only when notified after each section of tasks is complete. A handler's `listen` field is not templatable." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨ã—ã¦æ‰±ã‚れるタスクãŒå«ã¾ã‚Œã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚¿ã‚¹ã‚¯ã®å„セクションã®å®Œäº†å¾Œã«é€šçŸ¥ã•れる場åˆã«ã®ã¿ã€é€šå¸¸ã©ãŠã‚Šå®Ÿè¡Œã•れã¾ã›ã‚“。ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã® `listen` フィールドã¯ãƒ†ãƒ³ãƒ—レート化ã§ãã¾ã›ã‚“。" #: ../../rst/reference_appendices/playbooks_keywords.rst:86 msgid "hosts" msgstr "hosts" #: ../../rst/reference_appendices/playbooks_keywords.rst:86 msgid "A list of groups, hosts or host pattern that translates into a list of hosts that are the play's target." msgstr "プレイã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã‚るホストã®ä¸€è¦§ã«å¤‰æ›ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã€ãƒ›ã‚¹ãƒˆã€ã¾ãŸã¯ãƒ›ã‚¹ãƒˆãƒ‘ターンã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:89 #: ../../rst/reference_appendices/playbooks_keywords.rst:206 #: ../../rst/reference_appendices/playbooks_keywords.rst:302 #: ../../rst/reference_appendices/playbooks_keywords.rst:416 msgid "ignore_errors" msgstr "ignore_errors" #: ../../rst/reference_appendices/playbooks_keywords.rst:89 #: ../../rst/reference_appendices/playbooks_keywords.rst:206 #: ../../rst/reference_appendices/playbooks_keywords.rst:302 #: ../../rst/reference_appendices/playbooks_keywords.rst:416 msgid "Boolean that allows you to ignore task failures and continue with play. It does not affect connection errors." msgstr "タスクã®å¤±æ•—を無視ã—ã¦ãƒ—レイを続行ã§ãるブール値。接続エラーã«ã¯å½±éŸ¿ã‚’åŠã¼ã—ã¾ã›ã‚“。" #: ../../rst/reference_appendices/playbooks_keywords.rst:92 #: ../../rst/reference_appendices/playbooks_keywords.rst:209 #: ../../rst/reference_appendices/playbooks_keywords.rst:305 #: ../../rst/reference_appendices/playbooks_keywords.rst:419 msgid "ignore_unreachable" msgstr "ignore_unreachable" #: ../../rst/reference_appendices/playbooks_keywords.rst:92 #: ../../rst/reference_appendices/playbooks_keywords.rst:209 #: ../../rst/reference_appendices/playbooks_keywords.rst:305 #: ../../rst/reference_appendices/playbooks_keywords.rst:419 msgid "Boolean that allows you to ignore task failures due to an unreachable host and continue with the play. This does not affect other task errors (see :term:`ignore_errors`) but is useful for groups of volatile/ephemeral hosts." msgstr "到é”ä¸å¯èƒ½ãªãƒ›ã‚¹ãƒˆãŒåŽŸå› ã§ã‚¿ã‚¹ã‚¯ã®å¤±æ•—を無視ã—ã€ãƒ—レイを続行ã§ãるブール値。ã“れã¯ä»–ã®ã‚¿ã‚¹ã‚¯ã‚¨ãƒ©ãƒ¼ã«ã¯å½±éŸ¿ã‚’与ãˆã¾ã›ã‚“ (「:term:`ignore_errors`ã€å‚ç…§)。æ®ç™ºæ€§/一時ホストã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:95 msgid "max_fail_percentage" msgstr "max_fail_percentage" #: ../../rst/reference_appendices/playbooks_keywords.rst:95 msgid "can be used to abort the run after a given percentage of hosts in the current batch has failed. This only wokrs on linear or linear derived strategies." msgstr "ç¾åœ¨ã®ãƒãƒƒãƒå†…ã®ç‰¹å®šã®å‰²åˆã®ãƒ›ã‚¹ãƒˆã«éšœå®³ãŒç™ºç”Ÿã—ãŸå¾Œã€å®Ÿè¡Œã‚’中止ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ã“れã¯ã€ç·šå½¢ã¾ãŸã¯ç·šå½¢æ´¾ç”Ÿã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã«ã®ã¿å½±éŸ¿ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:98 #: ../../rst/reference_appendices/playbooks_keywords.rst:212 #: ../../rst/reference_appendices/playbooks_keywords.rst:308 #: ../../rst/reference_appendices/playbooks_keywords.rst:431 msgid "module_defaults" msgstr "module_defaults" #: ../../rst/reference_appendices/playbooks_keywords.rst:98 #: ../../rst/reference_appendices/playbooks_keywords.rst:212 #: ../../rst/reference_appendices/playbooks_keywords.rst:308 #: ../../rst/reference_appendices/playbooks_keywords.rst:431 msgid "Specifies default parameter values for modules." msgstr "モジュールã®ãƒ‡ãƒ•ォルトパラメーター値を指定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:101 #: ../../rst/reference_appendices/playbooks_keywords.rst:215 #: ../../rst/reference_appendices/playbooks_keywords.rst:311 #: ../../rst/reference_appendices/playbooks_keywords.rst:434 msgid "Identifier. Can be used for documentation, or in tasks/handlers." msgstr "識別å­ã€‚ドキュメントã¾ãŸã¯ã‚¿ã‚¹ã‚¯/ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:104 #: ../../rst/reference_appendices/playbooks_keywords.rst:218 #: ../../rst/reference_appendices/playbooks_keywords.rst:314 #: ../../rst/reference_appendices/playbooks_keywords.rst:437 msgid "Boolean that controls information disclosure." msgstr "情報ã®å…¬é–‹ã‚’制御ã™ã‚‹ãƒ–ール値。" #: ../../rst/reference_appendices/playbooks_keywords.rst:107 msgid "order" msgstr "order" #: ../../rst/reference_appendices/playbooks_keywords.rst:107 msgid "Controls the sorting of hosts as they are used for executing the play. Possible values are inventory (default), sorted, reverse_sorted, reverse_inventory and shuffle." msgstr "プレイã®å®Ÿè¡Œã«ä½¿ç”¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã®ã‚½ãƒ¼ãƒˆã‚’制御ã—ã¾ã™ã€‚使用ã§ãる値ã¯ã€inventory (デフォルト)ã€sortedã€reverse_sortedã€reverse_inventoryã€ãŠã‚ˆã³ shuffle ã§ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:110 #: ../../rst/reference_appendices/playbooks_keywords.rst:221 #: ../../rst/reference_appendices/playbooks_keywords.rst:320 #: ../../rst/reference_appendices/playbooks_keywords.rst:446 msgid "port" msgstr "port" #: ../../rst/reference_appendices/playbooks_keywords.rst:110 #: ../../rst/reference_appendices/playbooks_keywords.rst:221 #: ../../rst/reference_appendices/playbooks_keywords.rst:320 #: ../../rst/reference_appendices/playbooks_keywords.rst:446 msgid "Used to override the default port used in a connection." msgstr "接続ã§ä½¿ç”¨ã•れるデフォルトã®ãƒãƒ¼ãƒˆã‚’上書ãã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:113 msgid "post_tasks" msgstr "post_tasks" #: ../../rst/reference_appendices/playbooks_keywords.rst:113 msgid "A list of tasks to execute after the :term:`tasks` section." msgstr ":term:`tasks` セクションã®å¾Œã«å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:116 msgid "pre_tasks" msgstr "pre_tasks" #: ../../rst/reference_appendices/playbooks_keywords.rst:116 msgid "A list of tasks to execute before :term:`roles`." msgstr ":term:`roles` ã®å‰ã«å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:119 #: ../../rst/reference_appendices/playbooks_keywords.rst:224 #: ../../rst/reference_appendices/playbooks_keywords.rst:323 #: ../../rst/reference_appendices/playbooks_keywords.rst:452 msgid "User used to log into the target via the connection plugin." msgstr "connection プラグインã§ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:122 msgid "roles" msgstr "roles" #: ../../rst/reference_appendices/playbooks_keywords.rst:122 msgid "List of roles to be imported into the play" msgstr "プレイã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ­ãƒ¼ãƒ«ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:125 #: ../../rst/reference_appendices/playbooks_keywords.rst:227 #: ../../rst/reference_appendices/playbooks_keywords.rst:329 #: ../../rst/reference_appendices/playbooks_keywords.rst:458 msgid "run_once" msgstr "run_once" #: ../../rst/reference_appendices/playbooks_keywords.rst:125 #: ../../rst/reference_appendices/playbooks_keywords.rst:227 #: ../../rst/reference_appendices/playbooks_keywords.rst:329 #: ../../rst/reference_appendices/playbooks_keywords.rst:458 msgid "Boolean that will bypass the host loop, forcing the task to attempt to execute on the first host available and afterwards apply any results and facts to all active hosts in the same batch." msgstr "ホストループを回é¿ã™ã‚‹ãƒ–ール値。タスクã¯ã€ä½¿ç”¨å¯èƒ½ãªæœ€åˆã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã‚’試行ã—ã€ãã®å¾Œã€åŒã˜ãƒãƒƒãƒå†…ã®ã™ã¹ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ›ã‚¹ãƒˆã«çµæžœã¨ãƒ•ァクトをé©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:128 msgid "serial" msgstr "serial" #: ../../rst/reference_appendices/playbooks_keywords.rst:128 msgid "Explicitly define how Ansible batches the execution of the current play on the play's target. See :ref:`rolling_update_batch_size`." msgstr "Ansible ãŒã€ãƒ—レイã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ç¾åœ¨ã®ãƒ—レイã®å®Ÿè¡Œã‚’ãƒãƒƒãƒå‡¦ç†ã™ã‚‹æ–¹æ³•を明示的ã«å®šç¾©ã—ã¾ã™ã€‚:ref:`rolling_update_batch_size` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:131 msgid "Allows you to choose the connection plugin to use for the play." msgstr "プレイã«ä½¿ç”¨ã™ã‚‹ connection ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:134 #: ../../rst/reference_appendices/playbooks_keywords.rst:230 #: ../../rst/reference_appendices/playbooks_keywords.rst:332 #: ../../rst/reference_appendices/playbooks_keywords.rst:461 msgid "tags" msgstr "tags" #: ../../rst/reference_appendices/playbooks_keywords.rst:134 #: ../../rst/reference_appendices/playbooks_keywords.rst:230 #: ../../rst/reference_appendices/playbooks_keywords.rst:332 #: ../../rst/reference_appendices/playbooks_keywords.rst:461 msgid "Tags applied to the task or included tasks, this allows selecting subsets of tasks from the command line." msgstr "タスクã¾ãŸã¯å«ã¾ã‚Œã‚‹ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れるタグ。ã“れã«ã‚ˆã‚Šã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ–ã‚»ãƒƒãƒˆã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:137 msgid "tasks" msgstr "tasks" #: ../../rst/reference_appendices/playbooks_keywords.rst:137 msgid "Main list of tasks to execute in the play, they run after :term:`roles` and before :term:`post_tasks`." msgstr "プレイã§å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®ä¸»ãªä¸€è¦§ã€‚:term:`roles` ã‹ã‚‰ :term:`post_tasks` ã®é–“ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:140 #: ../../rst/reference_appendices/playbooks_keywords.rst:233 #: ../../rst/reference_appendices/playbooks_keywords.rst:335 #: ../../rst/reference_appendices/playbooks_keywords.rst:464 msgid "throttle" msgstr "throttle" #: ../../rst/reference_appendices/playbooks_keywords.rst:140 #: ../../rst/reference_appendices/playbooks_keywords.rst:233 #: ../../rst/reference_appendices/playbooks_keywords.rst:335 #: ../../rst/reference_appendices/playbooks_keywords.rst:464 msgid "Limit number of concurrent task runs on task, block and playbook level. This is independent of the forks and serial settings, but cannot be set higher than those limits. For example, if forks is set to 10 and the throttle is set to 15, at most 10 hosts will be operated on in parallel." msgstr "タスクã€ãƒ–ロックã€ãŠã‚ˆã³ Playbook レベルã§å®Ÿè¡Œã•ã‚Œã‚‹åŒæ™‚ã‚¿ã‚¹ã‚¯ã®æ•°ã‚’制é™ã—ã¾ã™ã€‚ã“れã¯ãƒ•ォークã¨ã‚·ãƒªã‚¢ãƒ«è¨­å®šã¨ã¯ç‹¬ç«‹ã—ã¦ã„ã¾ã™ãŒã€ã“ã®ã‚ˆã†ãªåˆ¶é™ã‚ˆã‚Šã‚‚高ã設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ãŸã¨ãˆã°ã€ãƒ•ォークを 10 ã«è¨­å®šã—ã€ã‚¹ãƒ­ãƒƒãƒˆãƒ«ãŒ 15 ã«è¨­å®šã™ã‚‹ã¨ã€ã»ã¼ 10 å°ã®ãƒ›ã‚¹ãƒˆã‚’並行ã—ã¦æ“作ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:143 #: ../../rst/reference_appendices/playbooks_keywords.rst:236 #: ../../rst/reference_appendices/playbooks_keywords.rst:338 #: ../../rst/reference_appendices/playbooks_keywords.rst:467 msgid "Time limit for task to execute in, if exceeded Ansible will interrupt and fail the task." msgstr "実行ã™ã‚‹ã‚¿ã‚¹ã‚¯ã®æ™‚間制é™ã€‚ã“れを超ãˆã‚‹ã¨ã€Ansible ãŒå‰²ã‚Šè¾¼ã¿ã—ã€ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:146 #: ../../rst/reference_appendices/playbooks_keywords.rst:239 #: ../../rst/reference_appendices/playbooks_keywords.rst:341 #: ../../rst/reference_appendices/playbooks_keywords.rst:473 msgid "vars" msgstr "vars" #: ../../rst/reference_appendices/playbooks_keywords.rst:146 #: ../../rst/reference_appendices/playbooks_keywords.rst:239 #: ../../rst/reference_appendices/playbooks_keywords.rst:341 #: ../../rst/reference_appendices/playbooks_keywords.rst:473 msgid "Dictionary/map of variables" msgstr "変数ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/マップ。" #: ../../rst/reference_appendices/playbooks_keywords.rst:149 msgid "vars_files" msgstr "vars_files" #: ../../rst/reference_appendices/playbooks_keywords.rst:149 msgid "List of files that contain vars to include in the play." msgstr "プレイã«å«ã¾ã‚Œã‚‹ vars ãŒå«ã¾ã‚Œã‚‹ãƒ•ァイルã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:153 msgid "vars_prompt" msgstr "vars_prompt" #: ../../rst/reference_appendices/playbooks_keywords.rst:152 msgid "list of variables to prompt for." msgstr "プロンプトã™ã‚‹å¤‰æ•°ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:156 msgid "Role" msgstr "ロール" #: ../../rst/reference_appendices/playbooks_keywords.rst:194 #: ../../rst/reference_appendices/playbooks_keywords.rst:290 #: ../../rst/reference_appendices/playbooks_keywords.rst:401 msgid "delegate_facts" msgstr "delegate_facts" #: ../../rst/reference_appendices/playbooks_keywords.rst:194 #: ../../rst/reference_appendices/playbooks_keywords.rst:290 #: ../../rst/reference_appendices/playbooks_keywords.rst:401 msgid "Boolean that allows you to apply facts to a delegated host instead of inventory_hostname." msgstr "inventory_hostname ã®ä»£ã‚りã«å§”è­²ã•れãŸãƒ›ã‚¹ãƒˆã«ãƒ•ァクトをé©ç”¨ã§ãるよã†ã«ã™ã‚‹ãƒ–ール値。" #: ../../rst/reference_appendices/playbooks_keywords.rst:197 #: ../../rst/reference_appendices/playbooks_keywords.rst:293 #: ../../rst/reference_appendices/playbooks_keywords.rst:404 msgid "delegate_to" msgstr "delegate_to" #: ../../rst/reference_appendices/playbooks_keywords.rst:197 #: ../../rst/reference_appendices/playbooks_keywords.rst:293 #: ../../rst/reference_appendices/playbooks_keywords.rst:404 msgid "Host to execute task instead of the target (inventory_hostname). Connection vars from the delegated host will also be used for the task." msgstr "ターゲットã®ä»£ã‚りã«ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ãƒ›ã‚¹ãƒˆ (inventory_hostname)。委譲ã•れãŸãƒ›ã‚¹ãƒˆã‹ã‚‰ã®æŽ¥ç¶šå¤‰æ•°ã‚‚タスクã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:243 #: ../../rst/reference_appendices/playbooks_keywords.rst:345 #: ../../rst/reference_appendices/playbooks_keywords.rst:476 msgid "when" msgstr "when" #: ../../rst/reference_appendices/playbooks_keywords.rst:242 #: ../../rst/reference_appendices/playbooks_keywords.rst:344 #: ../../rst/reference_appendices/playbooks_keywords.rst:476 msgid "Conditional expression, determines if an iteration of a task is run or not." msgstr "æ¡ä»¶å¼ã€‚タスクã®å復を実行ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:246 msgid "Block" msgstr "ブロック (Block)" #: ../../rst/reference_appendices/playbooks_keywords.rst:249 msgid "List of tasks, in a block, that execute no matter if there is an error in the block or not." msgstr "ブロックã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚‹ã‹ã©ã†ã‹ã«é–¢ä¿‚ãªã実行ã•れるã€ãƒ–ロック内ã®ã‚¿ã‚¹ã‚¯ã®ãƒªã‚¹ãƒˆã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:270 msgid "block" msgstr "block" #: ../../rst/reference_appendices/playbooks_keywords.rst:270 msgid "List of tasks in a block." msgstr "ブロック内ã®ã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:317 #: ../../rst/reference_appendices/playbooks_keywords.rst:440 msgid "notify" msgstr "notify" #: ../../rst/reference_appendices/playbooks_keywords.rst:317 #: ../../rst/reference_appendices/playbooks_keywords.rst:440 msgid "List of handlers to notify when the task returns a 'changed=True' status." msgstr "タスクãŒã€Œchanged=Trueã€ã®çŠ¶æ…‹ã‚’è¿”ã™éš›ã«é€šçŸ¥ã™ã‚‹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ãƒªã‚¹ãƒˆã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:326 msgid "rescue" msgstr "rescue" #: ../../rst/reference_appendices/playbooks_keywords.rst:326 msgid "List of tasks in a :term:`block` that run if there is a task error in the main :term:`block` list." msgstr "メイン㮠:term:`block` 一覧ã«ã‚¿ã‚¹ã‚¯ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚‹å ´åˆã«å®Ÿè¡Œã•れる :term:`block` 内ã®ã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:351 msgid "action" msgstr "action" #: ../../rst/reference_appendices/playbooks_keywords.rst:351 msgid "The 'action' to execute for a task, it normally translates into a C(module) or action plugin." msgstr "タスクã§å®Ÿè¡Œã™ã‚‹ã€Œã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã€ã¯ã€é€šå¸¸ C(module) ã¾ãŸã¯ action プラグインã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:357 msgid "args" msgstr "args" #: ../../rst/reference_appendices/playbooks_keywords.rst:357 msgid "A secondary way to add arguments into a task. Takes a dictionary in which keys map to options and values." msgstr "引数をタスクã«è¿½åŠ ã™ã‚‹ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼æ–¹æ³•。キーをオプションãŠã‚ˆã³å€¤ã«ãƒžãƒƒãƒ—ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:360 msgid "async" msgstr "async" #: ../../rst/reference_appendices/playbooks_keywords.rst:360 msgid "Run a task asynchronously if the C(action) supports this; value is maximum runtime in seconds." msgstr "C(action) ãŒã“れをサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã‚¿ã‚¹ã‚¯ã‚’éžåŒæœŸã«å®Ÿè¡Œã—ã¾ã™ã€‚値ã¯ã€æœ€å¤§ãƒ©ãƒ³ã‚¿ã‚¤ãƒ  (ç§’å˜ä½) ã§ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:378 msgid "changed_when" msgstr "changed_when" #: ../../rst/reference_appendices/playbooks_keywords.rst:378 msgid "Conditional expression that overrides the task's normal 'changed' status." msgstr "タスクã®é€šå¸¸ã®ã€Œchangedã€çŠ¶æ…‹ã‚’ä¸Šæ›¸ãã™ã‚‹æ¡ä»¶å¼ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:398 msgid "delay" msgstr "delay" #: ../../rst/reference_appendices/playbooks_keywords.rst:398 msgid "Number of seconds to delay between retries. This setting is only used in combination with :term:`until`." msgstr "å†è©¦è¡Œã®é–“éš”ã®é…延秒数。ã“ã®è¨­å®šã¯ :term:`until` ã¨çµ„ã¿åˆã‚ã›ã¦ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:413 msgid "failed_when" msgstr "failed_when" #: ../../rst/reference_appendices/playbooks_keywords.rst:413 msgid "Conditional expression that overrides the task's normal 'failed' status." msgstr "タスクã®é€šå¸¸ã®ã€Œfailedã€çŠ¶æ…‹ã‚’ä¸Šæ›¸ãã™ã‚‹æ¡ä»¶å¼ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:422 msgid "local_action" msgstr "local_action" #: ../../rst/reference_appendices/playbooks_keywords.rst:422 msgid "Same as action but also implies ``delegate_to: localhost``" msgstr "アクションã¨åŒã˜ã§ã™ãŒã€``delegate_to: localhost`` ã¨ã„ã†æ„味をå«ã¿ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:425 msgid "loop" msgstr "loop" #: ../../rst/reference_appendices/playbooks_keywords.rst:425 msgid "Takes a list for the task to iterate over, saving each list element into the ``item`` variable (configurable via loop_control)" msgstr "タスクã®ãƒªã‚¹ãƒˆã‚’å–りã€å„リストè¦ç´ ã‚’ ``item`` 変数ã«ä¿å­˜ã—ã¾ã™ (loop_control ã§è¨­å®šå¯èƒ½)。" #: ../../rst/reference_appendices/playbooks_keywords.rst:428 msgid "loop_control" msgstr "loop_control" #: ../../rst/reference_appendices/playbooks_keywords.rst:428 msgid "Several keys here allow you to modify/set loop behaviour in a task. See :ref:`loop_control`." msgstr "ã“ã“ã«ã‚ã‚‹ã„ãã¤ã‹ã®ã‚­ãƒ¼ã‚’使用ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒ—動作を変更/設定ã§ãã¾ã™ã€‚:ref:`loop_control` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/playbooks_keywords.rst:443 msgid "poll" msgstr "poll" #: ../../rst/reference_appendices/playbooks_keywords.rst:443 msgid "Sets the polling interval in seconds for async tasks (default 10s)." msgstr "éžåŒæœŸã‚¿ã‚¹ã‚¯ (デフォルト㯠10) ã®ãƒãƒ¼ãƒªãƒ³ã‚°é–“隔を秒å˜ä½ã§è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:449 msgid "register" msgstr "register" #: ../../rst/reference_appendices/playbooks_keywords.rst:449 msgid "Name of variable that will contain task status and module return data." msgstr "タスクステータスã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒªã‚¿ãƒ¼ãƒ³ãƒ‡ãƒ¼ã‚¿ãŒå«ã¾ã‚Œã‚‹å¤‰æ•°ã®åå‰ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:455 msgid "retries" msgstr "retries" #: ../../rst/reference_appendices/playbooks_keywords.rst:455 msgid "Number of retries before giving up in a :term:`until` loop. This setting is only used in combination with :term:`until`." msgstr ":term:`until` ãƒ«ãƒ¼ãƒ—ã§æ–­å¿µã™ã‚‹ã¾ã§ã®å†è©¦è¡Œå›žæ•°ã€‚ã“ã®è¨­å®šã¯ :term:`until` ã¨çµ„ã¿åˆã‚ã›ã‚‹å ´åˆã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/playbooks_keywords.rst:470 msgid "until" msgstr "until" #: ../../rst/reference_appendices/playbooks_keywords.rst:470 msgid "This keyword implies a ':term:`retries` loop' that will go on until the condition supplied here is met or we hit the :term:`retries` limit." msgstr "ã“ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã€ã“ã“ã§æä¾›ã•ã‚ŒãŸæ¡ä»¶ãŒæº€ãŸã•れるã¾ã§ã€ã¾ãŸã¯ :term:`retries` ã®åˆ¶é™ã«åˆ°é”ã™ã‚‹ã¾ã§å®Ÿè¡Œã•れる ':term:`retries` loop' ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../:1 msgid "with_" msgstr "with_" #: ../../rst/reference_appendices/playbooks_keywords.rst:479 msgid "The same as ``loop`` but magically adds the output of any lookup plugin to generate the item list." msgstr "``loop`` ã¨åŒã˜ã§ã™ãŒã€ã‚¢ã‚¤ãƒ†ãƒ ä¸€è¦§ã‚’生æˆã™ã‚‹ãŸã‚ã« lookup プラグインã®å‡ºåŠ›ãŒè¦–覚的ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:3 msgid "Python 3 Support" msgstr "Python 3 サãƒãƒ¼ãƒˆ" #: ../../rst/reference_appendices/python_3_support.rst:5 msgid "Ansible 2.5 and above work with Python 3. Previous to 2.5, using Python 3 was considered a tech preview. This topic discusses how to set up your controller and managed machines to use Python 3." msgstr "Ansible 2.5 以é™ã§ã¯ Python 3 を使用ã—ã¾ã™ãŒã€Python 3 を使用ã™ã‚‹ Ansible 2.4 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ãƒ—レビューã¨ã¿ãªã•れã¾ã™ã€‚以下ã®ãƒˆãƒ”ックã§ã¯ã€Python 3 を使用ã§ãるよã†ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¨ç®¡ç†ãƒžã‚·ãƒ³ã‚’設定ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:9 msgid "On the controller we support Python 3.5 or greater and Python 2.7 or greater. Module-side, we support Python 3.5 or greater and Python 2.6 or greater." msgstr "コントローラーã§ã¯ã€Python 3.5 以é™ã€ãŠã‚ˆã³ Python 2.7 以é™ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚モジュールå´ã§ã¯ã€Python 3.5 以é™ã€Python 2.6 以é™ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:12 msgid "On the controller side" msgstr "コントローラーå´" #: ../../rst/reference_appendices/python_3_support.rst:14 msgid "The easiest way to run :command:`/usr/bin/ansible` under Python 3 is to install it with the Python3 version of pip. This will make the default :command:`/usr/bin/ansible` run with Python3:" msgstr "Python 3 ã§ :command:`/usr/bin/ansible` を最も簡å˜ã«å®Ÿè¡Œã™ã‚‹ã«ã¯ã€pip ã® Python 3 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚ã“れã§ãƒ‡ãƒ•ォルトã§ã€Python 3 を使用ã—㦠:command:`/usr/bin/ansible` を実行ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:23 msgid "If you are running Ansible :ref:`from_source` and want to use Python 3 with your source checkout, run your command via ``python3``. For example:" msgstr "Ansible :ref:`from_source` を実行ã—ã¦ã„ã¦ã€ã‚½ãƒ¼ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã« Python 3 を使用ã™ã‚‹ã«ã¯ã€``python3`` ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:32 msgid "Individual Linux distribution packages may be packaged for Python2 or Python3. When running from distro packages you'll only be able to use Ansible with the Python version for which it was installed. Sometimes distros will provide a means of installing for several Python versions (via a separate package or via some commands that are run after install). You'll need to check with your distro to see if that applies in your case." msgstr "個々㮠Linux ディストリビューションパッケージã¯ã€Python2 ã¾ãŸã¯ Python3 ã«ãƒ‘ッケージ化ã•れã¾ã™ã€‚ディストリビューションã‹ã‚‰å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã®ã¿ Ansible を使用ã§ãã¾ã™ã€‚障害ã«ã‚ˆã‚Šã€è¤‡æ•°ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (別ã®ãƒ‘ッケージã€ã¾ãŸã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å¾Œã«å®Ÿè¡Œã•れる一部ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’介ã—ã¦) ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’è¡Œã†æ‰‹æ®µãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:40 msgid "Using Python 3 on the managed machines with commands and playbooks" msgstr "コマンドãŠã‚ˆã³ Playbook を使用ã—ãŸç®¡ç†ãƒžã‚·ãƒ³ã§ã® Python 3 ã®ä½¿ç”¨" #: ../../rst/reference_appendices/python_3_support.rst:42 msgid "Ansible will automatically detect and use Python 3 on many platforms that ship with it. To explicitly configure a Python 3 interpreter, set the ``ansible_python_interpreter`` inventory variable at a group or host level to the location of a Python 3 interpreter, such as :command:`/usr/bin/python3`. The default interpreter path may also be set in ``ansible.cfg``." msgstr "Ansible ã¯ã€åŒæ¢±ã•れã¦ã„る多数ã®ãƒ—ラットフォーム㧠Python 3 ã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚Python 3 インタープリターを明示的ã«è¨­å®šã™ã‚‹ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ãƒ›ã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ã§ã€:command:`/usr/bin/python3` ãªã©ã®ã‚ˆã†ã«ã€``ansible_python_interpreter`` ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’ Python 3 インタープリターã®å ´æ‰€ã«æŒ‡å®šã—ã¾ã™ã€‚デフォルトã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターパスもã€``ansible.cfg`` ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:47 msgid ":ref:`interpreter_discovery` for more information." msgstr "詳細ã¯ã€Œ:ref:`interpreter_discovery`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/python_3_support.rst:62 msgid ":ref:`intro_inventory` for more information." msgstr "詳細ã¯ã€Œ:ref:`intro_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/python_3_support.rst:64 msgid "Run your command or playbook:" msgstr "コマンドã¾ãŸã¯ Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:72 msgid "Note that you can also use the `-e` command line option to manually set the python interpreter when you run a command. This can be useful if you want to test whether a specific module or playbook has any bugs under Python 3. For example:" msgstr "コマンドã®å®Ÿè¡Œæ™‚ã«ã€`-e` コマンドラインオプションを指定ã—ã¦ã€æ‰‹å‹•ã§ Python インタープリターを設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã¯ã€Python 3 ã§å›ºæœ‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ Playbook ã«ãƒã‚°ãŒç™ºç”Ÿã—ã¦ã„ã‚‹ã‹ã‚’テストã™ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/reference_appendices/python_3_support.rst:82 msgid "What to do if an incompatibility is found" msgstr "éžäº’æ›æ€§ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã®å¯¾å‡¦æ–¹æ³•" #: ../../rst/reference_appendices/python_3_support.rst:84 msgid "We have spent several releases squashing bugs and adding new tests so that Ansible's core feature set runs under both Python 2 and Python 3. However, bugs may still exist in edge cases and many of the modules shipped with Ansible are maintained by the community and not all of those may be ported yet." msgstr "Python 2 ãŠã‚ˆã³ Python 3 ã®ä¸¡æ–¹ã§ Ansible ã§ã‚³ã‚¢ã¨ãªã‚‹æ©Ÿèƒ½ãŒå®Ÿè¡Œã§ãるよã†ã«ã€è¤‡æ•°ãƒªãƒªãƒ¼ã‚¹ã«ã‚ãŸã£ã¦ãƒã‚°ä¿®æ­£ã‚„ã€æ–°è¦ãƒ†ã‚¹ãƒˆãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ãŸã ã—ã€ãƒã‚°ã¯ã€ã‚¨ãƒƒã‚¸ã‚±ãƒ¼ã‚¹ãªã©ã§ã¾ã å­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã¾ãŸã€Ansible ã«åŒæ¢±ã•れã¦ã„る多ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’実施ã—ã¦ãŠã‚Šã€ã™ã¹ã¦ãŒç§»æ¤ã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/python_3_support.rst:89 msgid "If you find a bug running under Python 3 you can submit a bug report on `Ansible's GitHub project `_. Be sure to mention Python3 in the bug report so that the right people look at it." msgstr "Python 3 ã§å®Ÿè¡Œä¸­ã«ãƒã‚°ã‚’発見ã—ãŸå ´åˆã«ã¯ã€`Ansible ã® GitHub プロジェクト `_ ã‹ã‚‰ãƒã‚°å ±å‘Šã‚’æå‡ºã—ã¦ãã ã•ã„。é©åˆ‡ãªæ‹…当者ãŒå¯¾å¿œã§ãるよã†ã«ã€ãƒã‚°å ±å‘Šã«ã¯ Python3 ã¨è¨˜è¼‰ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/python_3_support.rst:93 msgid "If you would like to fix the code and submit a pull request on github, you can refer to :ref:`developing_python_3` for information on how we fix common Python3 compatibility issues in the Ansible codebase." msgstr "コードを修正ã—㦠github ã¸ã®ãƒ—ãƒ«è¦æ±‚ã‚’é€ä¿¡ã™ã‚‹å ´åˆã¯ã€Ansible コードベースã§ä¸€èˆ¬çš„㪠Python 3 ã®äº’æ›æ€§ã®å•題を修正ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`developing_python_3`ã€å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:5 msgid "Releases and maintenance" msgstr "リリースãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹" #: ../../rst/reference_appendices/release_and_maintenance.rst:7 msgid "This section describes release cycles, rules, and maintenance schedules for both Ansible community projects: the Ansible community package and ``ansible-core``. The two projects have different versioning systems, maintenance structures, contents, and workflows." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansibleコミュニティプロジェクトã®ä¸¡æ–¹ (Ansibleコミュニティパッケージã¨``ansible-core``) ã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã€ãƒ«ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ã“ã®2ã¤ã®ãƒ—ロジェクトã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã€ä¿å®ˆæ§‹é€ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã€ãŠã‚ˆã³ãƒ¯ãƒ¼ã‚¯ãƒ•ローã¯ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:10 msgid "Ansible community package" msgstr "Ansibleコミュニティパッケージ" #: ../../rst/reference_appendices/release_and_maintenance.rst:12 msgid "Uses new versioning (2.10, then 3.0.0)" msgstr "æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚’使用ã™ã‚‹ï¼ˆ2.10ã€æ¬¡ã«3.0.0)" #: ../../rst/reference_appendices/release_and_maintenance.rst:12 msgid "Continues \"classic Ansible\" versioning (2.10, then 2.11)" msgstr "従æ¥ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚’続行ã™ã‚‹ï¼ˆ2.10ã€æ¬¡ã«2.11)" #: ../../rst/reference_appendices/release_and_maintenance.rst:13 msgid "Follows semantic versioning rules" msgstr "セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã«å¾“ã†" #: ../../rst/reference_appendices/release_and_maintenance.rst:13 msgid "Does not use semantic versioning" msgstr "セマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã‚’使用ã—ãªã„" #: ../../rst/reference_appendices/release_and_maintenance.rst:14 msgid "Maintains only one version at a time" msgstr "一度ã«1ã¤ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã¿ã‚’ç¶­æŒã™ã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:14 msgid "Maintains latest version plus two older versions" msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’2ã¤ç¶­æŒã™ã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:15 msgid "Includes language, runtime, and selected Collections" msgstr "言語ã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã€ãŠã‚ˆã³é¸æŠžã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå«ã¾ã‚Œã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:15 msgid "Includes language, runtime, and builtin plugins" msgstr "言語ã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã€ãŠã‚ˆã³çµ„ã¿è¾¼ã¿ãƒ—ラグインãŒå«ã¾ã‚Œã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:16 msgid "Developed and maintained in Collection repositories" msgstr "コレクションリãƒã‚¸ãƒˆãƒªã§é–‹ç™ºãŠã‚ˆã³ä¿å®ˆã•れã¦ã„ã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:16 msgid "Developed and maintained in ansible/ansible repository" msgstr "ansible / ansibleリãƒã‚¸ãƒˆãƒªã§é–‹ç™ºãŠã‚ˆã³ä¿å®ˆã•れã¦ã„ã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:19 msgid "Many community users install the Ansible community package. The Ansible community package offers the functionality that existed in Ansible 2.9, with more than 85 Collections containing thousands of modules and plugins. The ``ansible-core`` option is primarily for developers and users who want to install only the collections they need." msgstr "多ãã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒAnsibleコミュニティパッケージをインストールã—ã¾ã™ã€‚Ansibleコミュニティパッケージã§ã¯ã€Ansible 2.9ã«å­˜åœ¨ã—ã¦ã„ãŸæ©Ÿèƒ½ã¨ã€85ã‚’è¶…ãˆã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ (æ•°åƒã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインをå«ã‚€) ãŒæä¾›ã•れã¾ã™ã€‚``ansible-core``オプションã¯ä¸»ã«ã€å¿…è¦ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã ã‘をインストールã™ã‚‹é–‹ç™ºè€…ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼å‘ã‘ã§ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:27 msgid "Release cycle overview" msgstr "ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã®æ¦‚è¦" #: ../../rst/reference_appendices/release_and_maintenance.rst:29 msgid "The two community releases are related - the release cycle follows this pattern:" msgstr "2ã¤ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒªãƒªãƒ¼ã‚¹ã¯é–¢é€£ã—ã¦ãŠã‚Šã€ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ‘ターンã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:31 msgid "Release of a new ansible-core major version, for example, ansible-core 2.11" msgstr "æ–°ã—ã„ansible-coreメジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªãƒªãƒ¼ã‚¹ï¼ˆansible-core 2.11ãªã©ï¼‰" #: ../../rst/reference_appendices/release_and_maintenance.rst:33 msgid "New release of ansible-core and two prior versions are now maintained (in this case, ansible-base 2.10, Ansible 2.9)" msgstr "ansible-coreã®æ–°ã—ã„リリースã¨2ã¤å‰ã¾ã§ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç¶­æŒã•れるよã†ã«ï¼ˆä»Šå›žã®å ´åˆã¯ansible-base 2.10ã¨Ansible 2.9)" #: ../../rst/reference_appendices/release_and_maintenance.rst:34 msgid "Work on new features for ansible-core continues in the ``devel`` branch" msgstr "ansible-coreã®æ–°æ©Ÿèƒ½ã«é–¢ã™ã‚‹ä½œæ¥­ã¯``devel``ブランãƒã§ç¶™ç¶šã•れる" #: ../../rst/reference_appendices/release_and_maintenance.rst:36 msgid "Collection freeze (no new Collections or new versions of existing Collections) on the Ansible community package" msgstr "Ansibleコミュニティパッケージã§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ•リーズ(新ã—ã„コレクションや既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã‚りã¾ã›ã‚“)" #: ../../rst/reference_appendices/release_and_maintenance.rst:37 msgid "Release candidate for Ansible community package, testing, additional release candidates as necessary" msgstr "Ansibleコミュニティパッケージã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã€ãƒ†ã‚¹ãƒˆã€å¿…è¦ã«å¿œã˜ã¦è¿½åŠ ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œ" #: ../../rst/reference_appendices/release_and_maintenance.rst:38 msgid "Release of a new Ansible community package major version based on the new ansible-core, for example, Ansible 4.0.0 based on ansible-core 2.11" msgstr "æ–°ã—ã„ansible-coreã«åŸºã¥ãæ–°ã—ã„Ansibleコミュニティパッケージメジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªãƒªãƒ¼ã‚¹ï¼ˆä¾‹: ansible-core2.11ã«åŸºã¥ãAnsible4.0.0)" #: ../../rst/reference_appendices/release_and_maintenance.rst:40 msgid "Newest release of the Ansible community package is the only version now maintained" msgstr "Ansibleã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ã ã‘ãŒç¾åœ¨ç¶­æŒã•れã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:41 msgid "Work on new features continues in Collections" msgstr "新機能ã®ä½œæ¥­ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ç¶™ç¶šã•れる" #: ../../rst/reference_appendices/release_and_maintenance.rst:42 msgid "Individual Collections can make multiple minor and/or major releases" msgstr "個々ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€è¤‡æ•°ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ãŠã‚ˆã³/ã¾ãŸã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’作æˆã§ãã‚‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:44 msgid "Minor releases of three maintained ansible-core versions every three weeks (2.11.1)" msgstr "3ã¤ã®ansible-core管ç†ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’3週間毎ã«ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ï¼ˆ2.11.1)" #: ../../rst/reference_appendices/release_and_maintenance.rst:45 msgid "Minor releases of the single maintained Ansible community package version every three weeks (4.1.0)" msgstr "Ansibleコミュニティーパッケージã®ç®¡ç†ãƒãƒ¼ã‚¸ãƒ§ãƒ³1ã¤ã‚’3週間毎ã«ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ï¼ˆ4.1.0)" #: ../../rst/reference_appendices/release_and_maintenance.rst:46 msgid "Feature freeze on ansible-core" msgstr "ansible-core 機能ã®ãƒ•リーズ" #: ../../rst/reference_appendices/release_and_maintenance.rst:47 msgid "Release candidate for ansible-core, testing, additional release candidates as necessary" msgstr " ansible-core ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã€ãƒ†ã‚¹ãƒˆã€å¿…è¦ã«å¿œã˜ã¦è¿½åŠ ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œ" #: ../../rst/reference_appendices/release_and_maintenance.rst:48 msgid "Release of the next ansible-core major version, cycle begins again" msgstr "次ã®ansible-coreメジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒªãƒªãƒ¼ã‚¹ã€‚サイクルã®å†é–‹" #: ../../rst/reference_appendices/release_and_maintenance.rst:51 msgid "Ansible community package release cycle" msgstr "Ansible コミュニティーパッケージã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«" #: ../../rst/reference_appendices/release_and_maintenance.rst:53 msgid "The Ansible community team typically releases two major versions of the community package per year, on a flexible release cycle that trails the release of ``ansible-core``. This cycle can be extended to allow for larger changes to be properly implemented and tested before a new release is made available. See :ref:`roadmaps` for upcoming release details. Between major versions, we release a new minor version of the Ansible community package every three weeks. Minor releases include new backwards-compatible features, modules and plugins, as well as bug fixes." msgstr "Ansible コミュニティーãƒãƒ¼ãƒ ã¯é€šå¸¸ã€1å¹´ã«2回メジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’リリースã—ã€æŸ”軟ãªãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§ ``ansible-core`` ã®ãƒªãƒªãƒ¼ã‚¹ã«ç¶šãã¾ã™ã€‚ã“ã®ã‚µã‚¤ã‚¯ãƒ«ã¯ã€æ–°ã—ã„リリースをæä¾›ã™ã‚‹å‰ã«è¦æ¨¡ã®å¤§ãã„変更を正ã—ã実装ã—ã¦ãƒ†ã‚¹ãƒˆã§ãるよã†ã«ã€å»¶æœŸã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚今後ã®ãƒªãƒªãƒ¼ã‚¹ã®è©³ç´°ã¯ã€:ref:`roadmaps`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。次ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¾ã§ã«ã€Ansible ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ–°è¦ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ3週間毎ã«ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã™ã€‚マイナーリリースã«ã¯ã€å¾Œæ–¹äº’æ›æ€§ã®ã‚る機能ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインã ã‘ã§ãªãã€ãƒã‚°ä¿®æ­£ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:55 msgid "Starting with version 2.10, the Ansible community team guarantees maintenance for only one major community package release at a time. For example, when Ansible 4.0.0 gets released, the team will stop making new 3.x releases. Community members may maintain older versions if desired." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³2.10以é™ã€Ansibleコミュニティãƒãƒ¼ãƒ ã¯ã€ä¸€åº¦ã«ä¸»è¦ãªã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ‘ッケージリリースã®ä¿å®ˆã®ä¿è¨¼ã™ã‚‹ã®ã¯1ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã¿ã§ã™ã€‚ãŸã¨ãˆã°ã€Ansible ãƒãƒ¼ãƒ ã§ã¯ã€Ansible 4.0.0ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€æ–°ã—ã„3.xリリースã®ä½œæˆã‚’åœæ­¢ã—ã¾ã™ã€‚コミュニティメンãƒãƒ¼ã¯ã€å¿…è¦ã«å¿œã˜ã¦å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ç¶­æŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:59 msgid "Older, unmaintained versions of the Ansible community package might contain unfixed security vulnerabilities (*CVEs*). If you are using a release of the Ansible community package that is no longer maintained, we strongly encourage you to upgrade as soon as possible in order to benefit from the latest features and security fixes." msgstr "メンテナンスã•れã¦ã„ãªã„以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Ansibleコミュニティパッケージã«ã¯ã€ä¿®æ­£ã•れã¦ã„ãªã„セキュリティã®è„†å¼±æ€§ï¼ˆ* CVE *)ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚メンテナンスãŒçµ‚了ã—ãŸAnsibleコミュニティパッケージã®ãƒªãƒªãƒ¼ã‚¹ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã§ãã‚‹ã ã‘æ—©ãアップグレードã—ã¦ã€æœ€æ–°ã®æ©Ÿèƒ½ã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¿®æ­£ã‚’利用ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:61 msgid "Each major release of the Ansible community package accepts the latest released version of each included Collection and the latest released version of ansible-core. For specific schedules and deadlines, see the :ref:`ansible_roadmaps` for each version. Major releases of the Ansible community package can contain breaking changes in the modules and other plugins within the included Collections and/or in core features." msgstr "Ansible コミュニティーパッケージã®å„メジャーリリースã«ã¯ã€è¿½åŠ ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã”ã¨ã®æœ€æ–°ã®ãƒªãƒªãƒ¼ã‚¹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã€æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® ansible-core を追加ã§ãã¾ã™ã€‚具体的ãªã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„期é™ã«ã¤ã„ã¦ã¯ã€å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®:ref:`ansible_roadmaps`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible コミュニティーパッケージã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚„コア機能ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ãã®ä»–ã®å¤§è¦æ¨¡ãªå¤‰æ›´ãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:63 msgid "The Ansible community package follows semantic versioning rules. Minor releases of the Ansible community package accept only backwards-compatible changes in included Collections, in other words, not Collections major releases. Collections must also use semantic versioning, so the Collection version numbers reflect this rule. For example, if Ansible 3.0.0 releases with community.general 2.0.0, then all minor releases of Ansible 3.x (such as Ansible 3.1.0 or Ansible 3.5.0) must include a 2.x release of community.general (such as 2.8.0 or 2.9.5) and not 3.x.x or later major releases." msgstr "Ansibleコミュニティパッケージã¯ã€ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ãƒ«ãƒ¼ãƒ«ã‚’使用ã—ã¾ã™ã€‚Ansibleコミュニティパッケージã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯ã€åŒæ¢±ã•れã¦ã„るコレクションã¨ä¸‹ä½äº’æ›æ€§ã®ã‚る変更ã®ã¿ã‚’å—ã‘入れã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯å—ã‘入れã¾ã›ã‚“。コレクションもセマンティックãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚‚ã“ã®ãƒ«ãƒ¼ãƒ«ã‚’åæ˜ ã—ã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€community.general 2.0.0 ãŒå«ã¾ã‚Œã‚‹ Ansible 3.0.0 リリースã®å ´åˆã«ã¯ã€Ansible 3.x ã®å…¨ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ (Ansbile 3.1.0 ã¾ãŸã¯ Ansible 3.5.0ãªã©)ã«ã¯ã€3.0.0 以é™ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§ã¯ãªã〠community.general (2.8.0 ã¾ãŸã¯ 2.9.5ãªã©)ã®2.xリリースをå«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:65 msgid "Work in Collections is tracked within the individual Collection repositories." msgstr "コレクションã§ã®ä½œæ¥­ã¯ã€å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªå†…ã§è¿½è·¡ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:67 msgid "You can refer to the :ref:`Ansible package porting guides` for tips on updating your playbooks to run on newer versions of Ansible. For Ansible 2.10 and later releases, you can install the Ansible package with ``pip``. See :ref:`intro_installation_guide` for details. For older releases, you can download the Ansible release from ``_." msgstr "Ansible Playbook ã‚’æ›´æ–°ã—ã¦æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å®Ÿè¡Œã™ã‚‹ã¨ãã®ãƒ’ントã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`Ansible package porting guides`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible 2.10 以é™ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€``pip`` ã§ Ansible パッケージをインストールã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`intro_installation_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。å¤ã„リリースã§ã¯ã€Ansible リリース㯠``_ ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:69 msgid "This table links to the release notes for each major Ansible release. These release notes (changelogs) contain the dates and significant changes in each minor release." msgstr "以下ã®è¡¨ã«ã¯ã€Ansible ã®å„メジャーリリースã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã¸ã®ãƒªãƒ³ã‚¯ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆ (変更ログ) ã«ã¯ã€å„ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®æ—¥ä»˜ã‚„ã€å¤§ããªå¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:72 msgid "Ansible Community Package Release" msgstr "Ansible コミュニティーパッケージã®ãƒªãƒªãƒ¼ã‚¹" #: ../../rst/reference_appendices/release_and_maintenance.rst:72 #: ../../rst/reference_appendices/release_and_maintenance.rst:110 msgid "Status" msgstr "ステータス" #: ../../rst/reference_appendices/release_and_maintenance.rst:74 msgid "5.0.0" msgstr "5.0.0" #: ../../rst/reference_appendices/release_and_maintenance.rst:74 msgid "In development (unreleased)" msgstr "開発中 (未リリース)" #: ../../rst/reference_appendices/release_and_maintenance.rst:75 msgid "`4.x Release Notes`_" msgstr "`4.x Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:75 msgid "Current" msgstr "ç¾è¡Œ" #: ../../rst/reference_appendices/release_and_maintenance.rst:76 msgid "`3.x Release Notes`_" msgstr "`3.x Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:76 #: ../../rst/reference_appendices/release_and_maintenance.rst:77 #: ../../rst/reference_appendices/release_and_maintenance.rst:116 #: ../../rst/reference_appendices/release_and_maintenance.rst:117 #: ../../rst/reference_appendices/release_and_maintenance.rst:118 #: ../../rst/reference_appendices/release_and_maintenance.rst:119 #: ../../rst/reference_appendices/release_and_maintenance.rst:120 msgid "Unmaintained (end of life)" msgstr "メンテナンス対象外 (エンドオフライフ)" #: ../../rst/reference_appendices/release_and_maintenance.rst:77 msgid "`2.10 Release Notes`_" msgstr "`2.10 Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:87 msgid "ansible-core release cycle" msgstr "ansible-core リリースサイクル" #: ../../rst/reference_appendices/release_and_maintenance.rst:89 msgid "``ansible-core`` is developed and released on a flexible release cycle. This cycle can be extended in order to allow for larger changes to be properly implemented and tested before a new release is made available. See :ref:`roadmaps` for upcoming release details." msgstr "``ansible-core`` ã¯ã€æŸ”軟ãªãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§é–‹ç™ºãŠã‚ˆã³ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã™ã€‚ã“ã®ã‚µã‚¤ã‚¯ãƒ«ã¯ã€å¤§è¦æ¨¡ãªå¤‰æ›´ã‚’æ­£ã—ã実装ã—ã¦ã€ãƒ†ã‚¹ãƒˆã—ã¦ã‹ã‚‰æ–°ã—ã„リリースãŒå…¬é–‹ã•れるよã†ã«ã€å»¶é•·ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚今後ã®ãƒªãƒªãƒ¼ã‚¹ã®è©³ç´°ã¯ã€ã€Œ:ref:`roadmaps`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:91 msgid "``ansible-core`` has a graduated maintenance structure that extends to three major releases. For more information, read about the :ref:`development_and_stable_version_maintenance_workflow` or see the chart in :ref:`release_schedule` for the degrees to which current releases are maintained." msgstr "``ansible-core`` ã«ã¯ã€3 ã¤ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§å±•é–‹ã•れる段階的ãªãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹æ§‹é€ ãŒã‚りã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`development_and_stable_version_maintenance_workflow`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã€ç¾åœ¨ã®ãƒªãƒªãƒ¼ã‚¹ãŒã©ã®ç¨‹åº¦ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•れã¦ã„ã‚‹ã‹ã«ã¤ã„ã¦ã¯ã€:ref:`release_schedule` ã®è¡¨ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:97 msgid "Older, unmaintained versions of ``ansible-core`` can contain unfixed security vulnerabilities (*CVEs*). If you are using a release of ``ansible-core`` that is no longer maintained, we strongly encourage you to upgrade as soon as possible to benefit from the latest features and security fixes. ``ansible-core`` maintenance continues for 3 releases. Thus the latest release receives security and general bug fixes when it is first released, security and critical bug fixes when the next ``ansible-core`` version is released, and **only** security fixes once the follow on to that version is released." msgstr "``ansible-core``ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•れã¦ã„ãªã„以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼è„†å¼±æ€§ (*CVE*) ãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ä¿å®ˆã®ãªã„``ansible-core``ã®ãƒªãƒªãƒ¼ã‚¹ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€æœ€æ–°ã®æ©Ÿèƒ½ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¿®æ­£ã‚’活用ã§ãるよã†ã«ã€ã™ãã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã“ã¨ã‚’å¼·ãæŽ¨å¥¨ã—ã¾ã™ã€‚``ansible-core``ã®ä¿å®ˆã¯ã€3リリース分継続ã•れã¾ã™ã€‚ãã®ãŸã‚ã€æœ€æ–°ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€åˆå›žãƒªãƒªãƒ¼ã‚¹æ™‚ã«ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã¨ä¸€èˆ¬çš„ãªãƒã‚°ä¿®æ­£ãŒã€æ¬¡ã®``ansible-core``ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã¨é‡å¤§ãªãƒã‚°ä¿®æ­£ãŒã€ãã®æ¬¡ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¿®æ­£**ã®ã¿**ãŒæä¾›ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:99 msgid "You can refer to the :ref:`core_porting_guides` for tips on updating your playbooks to run on newer versions of ``ansible-core``." msgstr "Playbook ã‚’æ›´æ–°ã—ã¦``ansible-core`` ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å®Ÿè¡Œã™ã‚‹ã¨ãã®ãƒ’ントã¯ã€ã€Œ:ref:`core_porting_guides`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:101 msgid "You can install ``ansible-core`` with ``pip``. See :ref:`intro_installation_guide` for details." msgstr "``pip`` ã§ ``ansible-core`` をインストールã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`intro_installation_guide`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:105 msgid "This table links to the release notes for each major ``ansible-core`` release. These release notes (changelogs) contain the dates and significant changes in each minor release." msgstr "以下ã®è¡¨ã«ã¯ã€``ansible-core`` ã®å„メジャーリリースã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã¸ã®ãƒªãƒ³ã‚¯ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆ (変更ログ) ã«ã¯ã€å„ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®æ—¥ä»˜ã‚„ã€å¤§ããªå¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:110 msgid "``ansible-core`` / ``ansible-base`` Release" msgstr "``ansible-core`` / ``ansible-base`` リリース" #: ../../rst/reference_appendices/release_and_maintenance.rst:112 msgid "devel" msgstr "devel" #: ../../rst/reference_appendices/release_and_maintenance.rst:112 msgid "In development (ansible-core 2.12 unreleased, trunk)" msgstr "開発中 (未リリース㮠ansible-core 2.12 (trunk))" #: ../../rst/reference_appendices/release_and_maintenance.rst:113 msgid "`2.11 ansible-core Release Notes`_" msgstr "`2.11 ansible-core Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:113 msgid "Maintained (security **and** general bug fixes)" msgstr "メンテナンス対象 (セキュリティー **ãŠã‚ˆã³** 一般的ãªãƒã‚°ã®ä¿®æ­£)" #: ../../rst/reference_appendices/release_and_maintenance.rst:114 msgid "`2.10 ansible-base Release Notes`_" msgstr "`2.10 ansible-base Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:114 msgid "Maintained (security **and** critical bug fixes)" msgstr "メンテナンス対象 (セキュリティー **ãŠã‚ˆã³** é‡å¤§ãªãƒã‚°ã®ä¿®æ­£)" #: ../../rst/reference_appendices/release_and_maintenance.rst:115 msgid "`2.9 Release Notes`_" msgstr "`2.9 Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:115 msgid "Maintained (pre-collections) (security fixes only)" msgstr "ä¿å®ˆã‚り(事å‰åŽé›†ï¼‰ï¼ˆã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¿®æ­£ã®ã¿ï¼‰" #: ../../rst/reference_appendices/release_and_maintenance.rst:116 msgid "`2.8 Release Notes`_" msgstr "`2.8 Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:117 msgid "`2.7 Release Notes`_" msgstr "`2.7 Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:118 msgid "`2.6 Release Notes`_" msgstr "`2.6 Release Notes`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:119 msgid "`2.5 Release Notes`_" msgstr "`2.5 リリースノート`_" #: ../../rst/reference_appendices/release_and_maintenance.rst:120 msgid "<2.5" msgstr "2.5 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/reference_appendices/release_and_maintenance.rst:139 msgid "Preparing for a new release" msgstr "æ–°ã—ã„ãƒªãƒªãƒ¼ã‚¹ã®æº–å‚™" #: ../../rst/reference_appendices/release_and_maintenance.rst:144 msgid "Feature freezes" msgstr "機能フリーズ" #: ../../rst/reference_appendices/release_and_maintenance.rst:146 msgid "During final preparations for a new release, core developers and maintainers focus on improving the release candidate, not on adding or reviewing new features. We may impose a feature freeze." msgstr "æ–°ã—ã„ãƒªãƒªãƒ¼ã‚¹ã®æœ€çµ‚準備中ã€ã‚³ã‚¢é–‹ç™ºè€…ã¨ãƒ¡ãƒ³ãƒ†ãƒŠã¯ã€æ–°æ©Ÿèƒ½ã®è¿½åŠ ã‚„ãƒ¬ãƒ“ãƒ¥ãƒ¼ã§ã¯ãªãã€ãƒªãƒªãƒ¼ã‚¹å€™è£œã®æ”¹å–„ã«é›†ä¸­ã—ã¾ã™ã€‚機能フリーズを指示ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:148 msgid "A feature freeze means that we delay new features and fixes that are not related to the pending release so we can ship the new release as soon as possible." msgstr "機能フリーズã¨ã¯ã€ä¿ç•™ä¸­ã®ãƒªãƒªãƒ¼ã‚¹ã«é–¢é€£ã®ãªã„新機能や修正をé…らã›ã¦ã€æ–°ã—ã„リリースをã§ãã‚‹ã ã‘æ—©ã出è·ã§ãるよã†ã«ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:152 msgid "Release candidates" msgstr "リリースã®å€™è£œ (Release Candidate)" #: ../../rst/reference_appendices/release_and_maintenance.rst:154 msgid "We create at least one release candidate before each new major release of Ansible or ``ansible-core``. Release candidates allow the Ansible community to try out new features, test existing playbooks on the release candidate, and report bugs or issues they find." msgstr "Ansibleã¾ãŸã¯``ansible-core``ã®æ–°ã—ã„メジャーリリースã®å‰ã«æ¯Žå›žã€å°‘ãªãã¨ã‚‚1ã¤ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã‚’作æˆã—ã¾ã™ã€‚リリース候補を使用ã™ã‚‹ã“ã¨ã§ã€Ansibleã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯æ–°æ©Ÿèƒ½ã‚’試ã—ãŸã‚Šã€ãƒªãƒªãƒ¼ã‚¹å€™è£œã§æ—¢å­˜ã®Playbookをテストã—ãŸã‚Šã€è¦‹ã¤ã‹ã£ãŸãƒã‚°ã‚„å•題を報告ã—ãŸã‚Šã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:156 msgid "Ansible and ``ansible-core`` tag the first release candidate (RC1) which is usually scheduled to last five business days. If no major bugs or issues are identified during this period, the release candidate becomes the final release." msgstr "Ansible ãŠã‚ˆã³ ``ansible-core`` ã¯ã€æœ€åˆã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã®ã‚¿ã‚° (RC1) ãŒä»˜ã‘られã¾ã™ã€‚通常ã€RC1 ã¯æœ€å¾Œã®5営業日ã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れã¾ã™ã€‚ã“ã®æœŸé–“ã«ãƒ¡ã‚¸ãƒ£ãƒ¼ãªãƒã‚°ã‚„å•題ãŒç‰¹å®šã•れãªã„å ´åˆã«ã¯ã€ãƒªãƒªãƒ¼ã‚¹å€™è£œãŒæœ€çµ‚リリースã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:158 msgid "If there are major problems with the first candidate, the team and the community fix them and tag a second release candidate (RC2). This second candidate lasts for a shorter duration than the first. If no problems have been reported for an RC2 after two business days, the second release candidate becomes the final release." msgstr "最åˆã®å€™è£œã«å¤§ããªå•題ãŒã‚ã‚‹å ´åˆã¯ã€ãƒãƒ¼ãƒ ãŠã‚ˆã³ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãŒä¿®æ­£ã‚’加ãˆã¦ã€2 番目ã®å€™è£œã®ã‚¿ã‚° (RC2) ãŒä»˜ã‘られã¾ã™ã€‚2 番目ã®å€™è£œã¯ã€1 番目よりも期間ã¯çŸ­ããªã‚Šã¾ã™ã€‚2 営業日ãŒçµŒéŽã—ã¦å•題ãŒå ±å‘Šã•れãªã„å ´åˆã¯ã€ã“ã®2番目ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œãŒæœ€çµ‚çš„ãªãƒªãƒªãƒ¼ã‚¹ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:160 msgid "If there are major problems in RC2, the cycle begins again with another release candidate and repeats until the maintainers agree that all major problems have been fixed." msgstr "RC2ã«é‡å¤§ãªå•題ãŒã‚ã‚‹å ´åˆã«ã¯ã€ã‚µã‚¤ã‚¯ãƒ«ã¯åˆ¥ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã‹ã‚‰å†é–‹ã•れã€ã™ã¹ã¦ã®ä¸»è¦ãªå•題ãŒä¿®æ­£ã•れãŸã“ã¨ã«ãƒ¡ãƒ³ãƒ†ãƒŠãŒåŒæ„ã™ã‚‹ã¾ã§ç¹°ã‚Šè¿”ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:166 msgid "Development and maintenance workflows" msgstr "開発ã¨ä¿å®ˆã®ãƒ¯ãƒ¼ã‚¯ãƒ•ロー" #: ../../rst/reference_appendices/release_and_maintenance.rst:168 msgid "In between releases, the Ansible community develops new features, maintains existing functionality, and fixes bugs in ``ansible-core`` and in the collections included in the Ansible community package." msgstr "次ã®ãƒªãƒªãƒ¼ã‚¹ã¾ã§ã®é–“ã«ã€Ansibleã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯æ–°ã—ã„æ©Ÿèƒ½ã‚’開発ã—ã¦æ—¢å­˜ã®æ©Ÿèƒ½ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’行ã„ã€``ansible-core`` ã‚„ Ansible コミュニティーパッケージã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒã‚°ã‚’修正ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:171 msgid "Ansible community package workflow" msgstr "Ansible コミュニティパッケージã®ãƒ¯ãƒ¼ã‚¯ãƒ•ロー" #: ../../rst/reference_appendices/release_and_maintenance.rst:173 msgid "The Ansible community develops and maintains the features and functionality included in the Ansible community package in Collections repositories, with a workflow that looks like this:" msgstr "Ansibleコミュニティã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªã®Ansibleコミュニティパッケージã«å«ã¾ã‚Œã‚‹æ©Ÿèƒ½ã‚’開発ãŠã‚ˆã³ä¿å®ˆã—ã¾ã™ã€‚ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒ­ãƒ¼ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:175 msgid "Developers add new features and bug fixes to the individual Collections, following each Collection's rules on contributing." msgstr "開発者ã¯ã€è²¢çŒ®ã«é–¢ã™ã‚‹å„コレクションã®ãƒ«ãƒ¼ãƒ«ã«å¾“ã£ã¦ã€å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«æ–°æ©Ÿèƒ½ã¨ãƒã‚°ä¿®æ­£ã‚’追加ã™ã‚‹ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:176 #: ../../rst/reference_appendices/release_and_maintenance.rst:190 msgid "Each new feature and each bug fix includes a changelog fragment describing the work." msgstr "儿–°æ©Ÿèƒ½ã¨å„ãƒã‚°ä¿®æ­£ã«ã¯ã€ä½œæ¥­ã‚’説明ã™ã‚‹å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントãŒå«ã¾ã‚Œã¦ã„る。" #: ../../rst/reference_appendices/release_and_maintenance.rst:177 msgid "Release engineers create a minor release for the current version every three weeks to ensure that the latest bug fixes are available to users." msgstr "リリースエンジニアã¯ã€æœ€æ–°ã®ãƒã‚°ä¿®æ­£ã‚’ユーザーãŒåˆ©ç”¨ã§ãるよã†ã«ã€ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’3週間ã”ã¨ã«ä½œæˆã™ã‚‹ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:178 msgid "At the end of the development period, the release engineers announce which Collections, and which major version of each included Collection, will be included in the next release of the Ansible community package. New Collections and new major versions may not be added after this, and the work of creating a new release begins." msgstr "開発期間ã®çµ‚ã‚りã«ã€ãƒªãƒªãƒ¼ã‚¹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã¯ã€Ansibleã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ¬¡ã®ãƒªãƒªãƒ¼ã‚¹ã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã€è¿½åŠ æ¸ˆã¿ã®å„コレクションã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’発表ã—ã¾ã™ã€‚ã“れ以é™ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯æ–°ãŸã«è¿½åŠ ã§ããšã€æ–°ã—ã„リリースã®ä½œæˆæº–å‚™ãŒé–‹å§‹ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:180 msgid "We generally do not provide fixes for unmaintained releases of the Ansible community package, however, there can sometimes be exceptions for critical issues." msgstr "通常ã€Ansible コミュニティーパッケージã§ä¿å®ˆã•れã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã™ã‚‹ä¿®æ­£ã¯æä¾›ã—ã¦ã„ã¾ã›ã‚“ãŒã€é‡å¤§ãªå•題ã«é–¢ã—ã¦ã¯ä¾‹å¤–ã§å¯¾å¿œã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:182 msgid "Some Collections are maintained by the Ansible team, some by Partner organizations, and some by community teams. For more information on adding features or fixing bugs in Ansible-maintained Collections, see :ref:`contributing_maintained_collections`." msgstr "Ansibleãƒãƒ¼ãƒ ã€ãƒ‘ートナー組織ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒãƒ¼ãƒ ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãれãžã‚Œéƒ¨åˆ†çš„ã«ç®¡ç†ã—ã¦ã„ã¾ã™ã€‚ Ansibleã§ç®¡ç†ã•れã¦ã„ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ©Ÿèƒ½ã®è¿½åŠ ã‚„ãƒã‚°ã®ä¿®æ­£ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`contributing_maintained_collections` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:185 msgid "ansible-core workflow" msgstr "ansible-core ワークフロー" #: ../../rst/reference_appendices/release_and_maintenance.rst:187 msgid "The Ansible community develops and maintains ``ansible-core`` on GitHub_, with a workflow that looks like this:" msgstr "Ansibleコミュニティã¯ã€GitHub_ã®``ansible-core``ã§é–‹ç™ºã¨ç¶­æŒã‚’行ã£ã¦ãŠã‚Šã€æ¬¡ã®ã‚ˆã†ãªãƒ¯ãƒ¼ã‚¯ãƒ•ローを使用ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:189 msgid "Developers add new features and bug fixes to the ``devel`` branch." msgstr "開発者ã¯ã€``devel``ブランãƒã«æ–°æ©Ÿèƒ½ã¨ãƒã‚°ä¿®æ­£ã‚’追加ã™ã‚‹ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:191 msgid "The development team backports bug fixes to one, two, or three stable branches, depending on the severity of the bug. They do not backport new features." msgstr "開発ãƒãƒ¼ãƒ ã¯ã€ãƒã‚°ã®é‡å¤§åº¦ã«å¿œã˜ã¦ã€ãƒã‚°ä¿®æ­£ã‚’1ã¤ã€2ã¤ã€ã¾ãŸã¯3ã¤ã®å®‰å®šã—ãŸãƒ–ランãƒã«ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã—ã€æ–°æ©Ÿèƒ½ã®ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã¯è¡Œã‚ãªã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:192 msgid "Release engineers create a minor release for each maintained version every three weeks to ensure that the latest bug fixes are available to users." msgstr "リリースエンジニアã¯ã€æœ€æ–°ã®ãƒã‚°ä¿®æ­£ã‚’ユーザーãŒåˆ©ç”¨ã§ãるよã†ã«ã€å„ä¿å®ˆãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’3週間ã”ã¨ã«ä½œæˆã™ã‚‹ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:193 msgid "At the end of the development period, the release engineers impose a feature freeze and the work of creating a new release begins." msgstr "開発期間ã®çµ‚ã‚りã«ã€ãƒªãƒªãƒ¼ã‚¹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã¯æ©Ÿèƒ½ã‚’フリーズã—ã€æ–°ã—ã„ãƒªãƒªãƒ¼ã‚¹ã®æº–備を開始ã™ã‚‹ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:195 msgid "We generally do not provide fixes for unmaintained releases of ``ansible-core``, however, there can sometimes be exceptions for critical issues." msgstr "通常ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•れã¦ã„ãªã„``ansible-core``リリースã«å¯¾ã™ã‚‹ä¿®æ­£ã¯æä¾›ã—ã¦ã„ã¾ã›ã‚“ãŒã€é‡å¤§ãªå•題ã«é–¢ã—ã¦ã¯ä¾‹å¤–ã§å¯¾å¿œã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:197 msgid "For more information on adding features or fixing bugs in ``ansible-core`` see :ref:`community_development_process`." msgstr "``ansible-core`` ã®æ©Ÿèƒ½ã®è¿½åŠ ã¾ãŸã¯ãƒã‚°ã®ä¿®æ­£ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`community_development_process`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:204 msgid "Changelogs" msgstr "変更ログ (Changelog)" #: ../../rst/reference_appendices/release_and_maintenance.rst:206 msgid "We generate changelogs based on fragments. When creating new features for existing modules and plugins or fixing bugs, create a changelog fragment describing the change. A changelog entry is not needed for new modules or plugins. Details for those items will be generated from the module documentation." msgstr "変更ログã¯ã€ãƒ•ラグメントã«åŸºã¥ã„ã¦ç”Ÿæˆã•れã¾ã™ã€‚既存ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ–°ã—ã„æ©Ÿèƒ½ã‚’作æˆã—ãŸã‚Šã€ãƒã‚°ã‚’修正ã—ãŸã‚Šã™ã‚‹ã¨ãã¯ã€å¤‰æ›´ç‚¹ã‚’記述ã—ãŸå¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを作æˆã—ã¾ã™ã€‚変更ログã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ã€æ–°ã—ã„モジュールやプラグインã«ã¯å¿…è¦ã‚りã¾ã›ã‚“。ãれらã®é …ç›®ã®è©³ç´°ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‹ã‚‰ç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:208 msgid "To add changelog fragments to Collections in the Ansible community package, we recommend the `antsibull-changelog utility `_." msgstr "Ansibleコミュニティパッケージã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを追加ã™ã‚‹ã«ã¯ã€`antsibull-changelog utility `_を推奨ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:210 msgid "To add changelog fragments for new features and bug fixes in ``ansible-core``, see the :ref:`changelog examples and instructions` in the Community Guide." msgstr "``ansible-core``ã«æ–°æ©Ÿèƒ½ã¨ãƒã‚°ä¿®æ­£ã®å¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを追加ã™ã‚‹ã«ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚¬ã‚¤ãƒ‰ã®:ref:`changelog examples and instructions`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/release_and_maintenance.rst:213 msgid "Deprecation cycles" msgstr "éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«" #: ../../rst/reference_appendices/release_and_maintenance.rst:215 msgid "Sometimes we remove a feature, normally in favor of a reimplementation that we hope does a better job. To do this we have a deprecation cycle. First we mark a feature as 'deprecated'. This is normally accompanied with warnings to the user as to why we deprecated it, what alternatives they should switch to and when (which version) we are scheduled to remove the feature permanently." msgstr "通常ã€å†å®Ÿè£…ã—ã¦ã‚¸ãƒ§ãƒ–å®Ÿè¡Œã®æ”¹å–„を希望ã™ã‚‹å ´åˆãªã©ã€æ©Ÿèƒ½ã‚’削除ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れを行ã†ãŸã‚ã«ã€éžæŽ¨å¥¨ã®ã‚µã‚¤ã‚¯ãƒ«ãŒã‚りã¾ã™ã€‚ã¾ãšã€æ©Ÿèƒ½ã‚’ã€ŒéžæŽ¨å¥¨ã€ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã—ã¾ã™ã€‚ã“れã«ã¯é€šå¸¸ã€éžæŽ¨å¥¨ã«ãªã£ãŸç†ç”±ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåˆ‡ã‚Šæ›¿ãˆã‚‹å¿…è¦ã®ã‚る代替手段ã€ãŠã‚ˆã³æ©Ÿèƒ½ã‚’完全ã«å‰Šé™¤ã™ã‚‹äºˆå®šã®æ™‚期 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³) ã«é–¢ã™ã‚‹è­¦å‘ŠãŒä¼´ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:218 msgid "Ansible community package deprecation cycle" msgstr "Ansibleコミュニティパッケージã®éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«" #: ../../rst/reference_appendices/release_and_maintenance.rst:220 msgid "Since Ansible is a package of individual collections, the deprecation cycle depends on the collection maintainers. We recommend the collection maintainers deprecate a feature in one Ansible major version and do not remove that feature for one year, or at least until the next major Ansible version. For example, deprecate the feature in 3.1.0, and do not remove the feature until 5.0.0, or 4.0.0 at the earliest. Collections should use semantic versioning, such that the major collection version cannot be changed within an Ansible major version. Thus the removal should not happen before the next major Ansible community package release. This is up to each collection maintainer and cannot be guaranteed." msgstr "Ansible ã¯å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‘ッケージã§ã‚ã‚‹ãŸã‚ã€éžæŽ¨å¥¨ã®ã‚µã‚¤ã‚¯ãƒ«ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚コレクションメンテナー㯠1 ã¤ã® Ansible メジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã“ã®æ©Ÿèƒ½ã‚’éžæŽ¨å¥¨ã«ã—ã€1 å¹´é–“ã§ãã®æ©Ÿèƒ½ã‚’削除ã™ã‚‹ã‹ã€å°‘ãªãã¨ã‚‚次㮠Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¾ã§ã«å‰Šé™¤ã—ãªã„ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€3.1.0 ã§ã“ã®æ©Ÿèƒ½ã‚’éžæŽ¨å¥¨ã«ã—ãŸå ´åˆã¯ã€æœ€ä½Žã§ã‚‚ 5.0.0 ã¾ãŸã¯ 4.0.0 ã¾ã§ã®æ©Ÿèƒ½ã‚’削除ã—ãªã„ã§ãã ã•ã„。コレクションã¯ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€Ansible メジャーãƒãƒ¼ã‚¸ãƒ§ãƒ³å†…ã§å¤‰æ›´ã§ãã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€æ¬¡ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã® Ansible コミュニティーパッケージリリースã®å‰ã«å‰Šé™¤ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã“れã¯ã€å„コレクションã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã®å½¹å‰²ã§ã‚りã€ä¿è¨¼ã•れã¦ã„ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/release_and_maintenance.rst:223 msgid "ansible-core deprecation cycle" msgstr "ansible-core éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«" #: ../../rst/reference_appendices/release_and_maintenance.rst:225 msgid "The deprecation cycle in ``ansible-core`` is normally across 4 feature releases (2.x.y, where the x marks a feature release and the y a bugfix release), so the feature is normally removed in the 4th release after we announce the deprecation. For example, something deprecated in 2.9 will be removed in 2.13, assuming we do not jump to 3.x before that point. The tracking is tied to the number of releases, not the release numbering." msgstr "``ansible-core`` ã®éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«ã¯é€šå¸¸ 4 ã¤ã®æ©Ÿèƒ½ãƒªãƒªãƒ¼ã‚¹ (ãŸã¨ãˆã° 2.x.y ã§ã¯ã€x ã¯æ©Ÿèƒ½ãƒªãƒªãƒ¼ã‚¹ã‚’示ã—ã€y ã¯ãƒã‚°ä¿®æ­£ãƒªãƒªãƒ¼ã‚¹ã‚’示ã—ã¾ã™) ã«ã¾ãŸãŒã‚‹ãŸã‚ã€æ©Ÿèƒ½ã¯é€šå¸¸ã€éžæŽ¨å¥¨ã‚’発表ã—ã¦ã‹ã‚‰ 4 番目ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€2.9 ã§éžæŽ¨å¥¨ã«ãªã£ãŸã‚‚ã®ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒãã®ã¾ã¾ 3.x ã«ç¶šãã¨ä»®å®šã™ã‚‹ã¨ã€2.13 ã§å‰Šé™¤ã•れã¾ã™ã€‚追跡ã¯ã€ãƒªãƒªãƒ¼ã‚¹ç•ªå·ã§ã¯ãªãã€ãƒªãƒªãƒ¼ã‚¹ã®æ•°ã«é–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/release_and_maintenance.rst:229 msgid ":ref:`community_committer_guidelines`" msgstr ":ref:`community_committer_guidelines`" #: ../../rst/reference_appendices/release_and_maintenance.rst:230 msgid "Guidelines for Ansible core contributors and maintainers" msgstr "Ansible ã§ä¸­å¿ƒã¨ãªã‚‹è²¢çŒ®è€…ãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼å‘ã‘ガイドライン" #: ../../rst/reference_appendices/release_and_maintenance.rst:231 msgid ":ref:`testing_strategies`" msgstr ":ref:`testing_strategies`" #: ../../rst/reference_appendices/release_and_maintenance.rst:232 msgid "Testing strategies" msgstr "ストラテジーã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/reference_appendices/release_and_maintenance.rst:233 msgid ":ref:`ansible_community_guide`" msgstr ":ref:`ansible_community_guide`" #: ../../rst/reference_appendices/release_and_maintenance.rst:234 msgid "Community information and contributing" msgstr "コミュニティー情報ãŠã‚ˆã³è²¢çŒ®" #: ../../rst/reference_appendices/release_and_maintenance.rst:235 msgid "`Development Mailing List `_" msgstr "`開発メーリングリスト `_" #: ../../rst/reference_appendices/release_and_maintenance.rst:236 msgid "Mailing list for development topics" msgstr "開発トピックã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆ" #: ../../rst/reference_appendices/special_variables.rst:4 msgid "Special Variables" msgstr "特別ãªå¤‰æ•°" #: ../../rst/reference_appendices/special_variables.rst:7 msgid "Magic variables" msgstr "マジック変数" #: ../../rst/reference_appendices/special_variables.rst:8 msgid "These variables cannot be set directly by the user; Ansible will always override them to reflect internal state." msgstr "マジック変数ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç›´æŽ¥è¨­å®šã§ãã¾ã›ã‚“。Ansible ãŒã‚·ã‚¹ãƒ†ãƒ å†…ã®çŠ¶æ…‹ã‚’åæ˜ ã—ã¦ã“ã®å¤‰æ•°ã‚’常ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:11 msgid "ansible_check_mode" msgstr "ansible_check_mode" #: ../../rst/reference_appendices/special_variables.rst:11 msgid "Boolean that indicates if we are in check mode or not" msgstr "ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‹ã©ã†ã‹ã‚’指定ã™ã‚‹ãƒ–ール値" #: ../../rst/reference_appendices/special_variables.rst:14 msgid "ansible_config_file" msgstr "ansible_config_file" #: ../../rst/reference_appendices/special_variables.rst:14 msgid "The full path of used Ansible configuration file" msgstr "Ansbile 設定ファイルã«ä½¿ç”¨ã™ã‚‹ãƒ•ルパス" #: ../../rst/reference_appendices/special_variables.rst:17 msgid "ansible_dependent_role_names" msgstr "ansible_dependent_role_names" #: ../../rst/reference_appendices/special_variables.rst:17 msgid "The names of the roles currently imported into the current play as dependencies of other plays" msgstr "ä»–ã®ãƒ—レイã®ä¾å­˜é–¢ä¿‚ã¨ã—ã¦ç¾åœ¨ã®ãƒ—レイã«ç¾åœ¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¦ã„るロールã®åå‰" #: ../../rst/reference_appendices/special_variables.rst:20 msgid "ansible_diff_mode" msgstr "ansible_diff_mode" #: ../../rst/reference_appendices/special_variables.rst:20 msgid "Boolean that indicates if we are in diff mode or not" msgstr "diff モードã‹ã©ã†ã‹ã‚’指定ã™ã‚‹ãƒ–ール値" #: ../../rst/reference_appendices/special_variables.rst:23 msgid "ansible_forks" msgstr "ansible_forks" #: ../../rst/reference_appendices/special_variables.rst:23 msgid "Integer reflecting the number of maximum forks available to this run" msgstr "今回ã®å®Ÿè¡Œã§åˆ©ç”¨å¯èƒ½ãªæœ€å¤§ãƒ•ォーク数 (æ•´æ•°)" #: ../../rst/reference_appendices/special_variables.rst:26 msgid "ansible_inventory_sources" msgstr "ansible_inventory_sources" #: ../../rst/reference_appendices/special_variables.rst:26 msgid "List of sources used as inventory" msgstr "インベントリーã¨ã—ã¦ä½¿ç”¨ã•れるソースã®ä¸€è¦§" #: ../../rst/reference_appendices/special_variables.rst:29 msgid "ansible_limit" msgstr "ansible_limit" #: ../../rst/reference_appendices/special_variables.rst:29 msgid "Contents of the ``--limit`` CLI option for the current execution of Ansible" msgstr "Ansible ã®ç¾åœ¨ã®å®Ÿè¡Œã«å¯¾ã—ã¦ã€CLI オプション ``--limit`` ã¨ã—ã¦æŒ‡å®šã™ã‚‹å†…容" #: ../../rst/reference_appendices/special_variables.rst:32 msgid "ansible_loop" msgstr "ansible_loop" #: ../../rst/reference_appendices/special_variables.rst:32 msgid "A dictionary/map containing extended loop information when enabled via ``loop_control.extended``" msgstr "``loop_control.extended`` ã§æœ‰åйã«ã—ãŸå ´åˆã« loop ã®æ‹¡å¼µæƒ…報をå«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/マップ" #: ../../rst/reference_appendices/special_variables.rst:35 msgid "ansible_loop_var" msgstr "ansible_loop_var" #: ../../rst/reference_appendices/special_variables.rst:35 msgid "The name of the value provided to ``loop_control.loop_var``. Added in ``2.8``" msgstr "``loop_control.loop_var`` ã«æ¸¡ã™å€¤ã®åå‰ã€‚``2.8`` ã«è¿½åŠ ã€‚" #: ../../rst/reference_appendices/special_variables.rst:38 msgid "ansible_index_var" msgstr "ansible_index_var" #: ../../rst/reference_appendices/special_variables.rst:38 msgid "The name of the value provided to ``loop_control.index_var``. Added in ``2.9``" msgstr "``loop_control.index_var`` ã«æ¸¡ã™å€¤ã®åå‰ã€‚``2.9`` ã«è¿½åŠ ã€‚" #: ../../rst/reference_appendices/special_variables.rst:44 msgid "ansible_parent_role_names" msgstr "ansible_parent_role_names" #: ../../rst/reference_appendices/special_variables.rst:41 msgid "When the current role is being executed by means of an :ref:`include_role ` or :ref:`import_role ` action, this variable contains a list of all parent roles, with the most recent role (in other words, the role that included/imported this role) being the first item in the list. When multiple inclusions occur, this list lists the *last* role (in other words, the role that included this role) as the *first* item in the list. It is also possible that a specific role exists more than once in this list." msgstr "ç¾åœ¨ã®ãƒ­ãƒ¼ãƒ«ãŒã€:ref:`include_role ` アクションã¾ãŸã¯ :ref:`import_role ` アクションã«ã‚ˆã£ã¦å®Ÿè¡Œã•れã¦ã„ã‚‹å ´åˆã€ã“ã®å¤‰æ•°ã«ã¯ã™ã¹ã¦ã®è¦ªãƒ­ãƒ¼ãƒ«ã®ãƒªã‚¹ãƒˆãŒå«ã¾ã‚Œã€æœ€æ–°ã®ãƒ­ãƒ¼ãƒ« (ã¤ã¾ã‚Šã€ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’å«ã‚€/インãƒãƒ¼ãƒˆã—ãŸãƒ­ãƒ¼ãƒ«) ãŒãƒªã‚¹ãƒˆã®æœ€åˆã®é …ç›®ã«ãªã‚Šã¾ã™ã€‚複数ã®åŒ…å«ãŒç™ºç”Ÿã™ã‚‹å ´åˆã€ã“ã®ãƒªã‚¹ãƒˆã«ã¯ã€*最後ã®* ロール (ã¤ã¾ã‚Šã€ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’å«ã‚€ãƒ­ãƒ¼ãƒ«) ãŒãƒªã‚¹ãƒˆã® *最åˆã®* é …ç›®ã¨ã—ã¦æŒ™ã’られã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã«ç‰¹å®šã®å½¹å‰²ãŒè¤‡æ•°å­˜åœ¨ã™ã‚‹å¯èƒ½æ€§ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:44 msgid "For example: When role **A** includes role **B**, inside role B, ``ansible_parent_role_names`` will equal to ``['A']``. If role **B** then includes role **C**, the list becomes ``['B', 'A']``." msgstr "ãŸã¨ãˆã°ã€ãƒ­ãƒ¼ãƒ« **A** ã«ãƒ­ãƒ¼ãƒ« **B** ãŒå«ã¾ã‚Œã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ãƒ« B 内㮠``ansible_parent_role_names`` 㯠``['A']`` ã¨ç­‰ã—ããªã‚Šã¾ã™ã€‚次ã«ãƒ­ãƒ¼ãƒ« **B** ã«ãƒ­ãƒ¼ãƒ« **C** ãŒå«ã¾ã‚Œã‚‹ã¨ã€ä¸€è¦§ã¯ ``['B', 'A']`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:48 msgid "ansible_parent_role_paths" msgstr "ansible_parent_role_paths" #: ../../rst/reference_appendices/special_variables.rst:47 msgid "When the current role is being executed by means of an :ref:`include_role ` or :ref:`import_role ` action, this variable contains a list of all parent roles, with the most recent role (in other words, the role that included/imported this role) being the first item in the list. Please refer to ``ansible_parent_role_names`` for the order of items in this list." msgstr "ç¾åœ¨ã®ãƒ­ãƒ¼ãƒ«ãŒ :ref:`include_role ` アクションã¾ãŸã¯ :ref:`import_role ` アクションã§å®Ÿè¡Œã•れã¦ã„ã‚‹ã¨ã€ã“ã®å¤‰æ•°ã«ã¯è¦ªã®ãƒ­ãƒ¼ãƒ«ã®å…¨ä¸€è¦§ã¨ã€ãã®ä¸€è¦§ã®æœ€åˆã®é …ç›®ã§ã‚る最新ã®ãƒ­ãƒ¼ãƒ« (ã¤ã¾ã‚Šã€ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’追加/インãƒãƒ¼ãƒˆã—ãŸãƒ­ãƒ¼ãƒ«) ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã®é …ç›®ã®é †åºã¯ã€ã€Œ``ansible_parent_role_names``ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/special_variables.rst:51 msgid "ansible_play_batch" msgstr "ansible_play_batch" #: ../../rst/reference_appendices/special_variables.rst:51 msgid "List of active hosts in the current play run limited by the serial, aka 'batch'. Failed/Unreachable hosts are not considered 'active'." msgstr "シリアルã§åˆ¶é™ã•れるç¾åœ¨ã®ãƒ—レイ実行ã«å«ã¾ã‚Œã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ›ã‚¹ãƒˆä¸€è¦§ (「ãƒãƒƒãƒã€ã¨å‘¼ã°ã‚Œã¾ã™)。失敗ã—ãŸãƒ›ã‚¹ãƒˆã‚„到é”ä¸å¯èƒ½ãªãƒ›ã‚¹ãƒˆã¯ã€ã€Œã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã€ã¨ã¯ã¿ãªã•れã¾ã›ã‚“。" #: ../../rst/reference_appendices/special_variables.rst:54 msgid "ansible_play_hosts" msgstr "ansible_play_hosts" #: ../../rst/reference_appendices/special_variables.rst:54 msgid "List of hosts in the current play run, not limited by the serial. Failed/Unreachable hosts are excluded from this list." msgstr "ç¾åœ¨ã®ãƒ—レイã®ãƒ›ã‚¹ãƒˆä¸€è¦§ã¯ã€ã‚·ãƒªã‚¢ãƒ«ã«ã‚ˆã£ã¦åˆ¶é™ã•れã¾ã›ã‚“。失敗ã—ãŸãƒ›ã‚¹ãƒˆã¾ãŸã¯åˆ°é”ä¸å¯èƒ½ãªãƒ›ã‚¹ãƒˆã¯ã“ã®ä¸€è¦§ã‹ã‚‰é™¤å¤–ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:57 msgid "ansible_play_hosts_all" msgstr "ansible_play_hosts_all" #: ../../rst/reference_appendices/special_variables.rst:57 msgid "List of all the hosts that were targeted by the play" msgstr "プレイãŒå¯¾è±¡ã¨ã—ãŸãƒ›ã‚¹ãƒˆã®ä¸€è¦§" #: ../../rst/reference_appendices/special_variables.rst:61 msgid "ansible_play_role_names" msgstr "ansible_play_role_names" #: ../../rst/reference_appendices/special_variables.rst:60 msgid "The names of the roles currently imported into the current play. This list does **not** contain the role names that are implicitly included via dependencies." msgstr "ç¾åœ¨ã®ãƒ—レイã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¦ã„るロールå。ã“ã®ä¸€è¦§ã«ã¯ã€ä¾å­˜é–¢ä¿‚ã§æš—黙的ã«å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«å㯠**å«ã¾ã‚Œã¾ã›ã‚“**。" #: ../../rst/reference_appendices/special_variables.rst:64 msgid "ansible_playbook_python" msgstr "ansible_playbook_python" #: ../../rst/reference_appendices/special_variables.rst:64 msgid "The path to the python interpreter being used by Ansible on the controller" msgstr "Ansible ãŒä½¿ç”¨ã™ã‚‹ Python インタープリターã¸ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ä¸Šã®ãƒ‘ス" #: ../../rst/reference_appendices/special_variables.rst:68 msgid "ansible_role_names" msgstr "ansible_role_names" #: ../../rst/reference_appendices/special_variables.rst:67 msgid "The names of the roles currently imported into the current play, or roles referenced as dependencies of the roles imported into the current play." msgstr "ç¾åœ¨ã®ãƒ—レイã«ç¾åœ¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¦ã„るロールåã€ã¾ãŸã¯ç¾åœ¨ã®ãƒ—レイã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¦ã„るロールã®ä¾å­˜é–¢ä¿‚ã¨ã—ã¦å‚ç…§ã•れã¦ã„るロールå" #: ../../rst/reference_appendices/special_variables.rst:71 msgid "ansible_role_name" msgstr "ansible_role_name" #: ../../rst/reference_appendices/special_variables.rst:71 msgid "The fully qualified collection role name, in the format of ``namespace.collection.role_name``" msgstr "``namespace.collection.role_name`` ã®å½¢å¼ã§ã‚る完全修飾コレクションã®ãƒ­ãƒ¼ãƒ«å" #: ../../rst/reference_appendices/special_variables.rst:74 msgid "ansible_collection_name" msgstr "ansible_collection_name" #: ../../rst/reference_appendices/special_variables.rst:74 msgid "The name of the collection the task that is executing is a part of. In the format of ``namespace.collection``" msgstr "実行ã—ã¦ã„るタスクãŒä¸€éƒ¨ã§ã‚るコレクションã®åå‰ (``namespace.collection`` ã®å½¢å¼)。" #: ../../rst/reference_appendices/special_variables.rst:77 msgid "ansible_run_tags" msgstr "ansible_run_tags" #: ../../rst/reference_appendices/special_variables.rst:77 msgid "Contents of the ``--tags`` CLI option, which specifies which tags will be included for the current run. Note that if ``--tags`` is not passed, this variable will default to ``[\"all\"]``." msgstr "CLI オプション ``--tags`` ã®å†…容。ç¾åœ¨ã®å®Ÿè¡Œã«å«ã¾ã‚Œã‚‹ã‚¿ã‚°ã‚’指定ã—ã¾ã™ã€‚``--tags`` ãŒæ¸¡ã•れãªã„å ´åˆã€ã“ã®å¤‰æ•°ã¯ãƒ‡ãƒ•ォルト㧠``[\"all\"]`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:80 msgid "ansible_search_path" msgstr "ansible_search_path" #: ../../rst/reference_appendices/special_variables.rst:80 msgid "Current search path for action plugins and lookups, in other words, where we search for relative paths when you do ``template: src=myfile``" msgstr "action プラグインã¨ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ç¾åœ¨ã®æ¤œç´¢ãƒ‘ス。ã¤ã¾ã‚Šã€``template: src=myfile`` を指定ã—ãŸã¨ãã«æ¤œç´¢ã™ã‚‹ç›¸å¯¾ãƒ‘スã§ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:83 msgid "ansible_skip_tags" msgstr "ansible_skip_tags" #: ../../rst/reference_appendices/special_variables.rst:83 msgid "Contents of the ``--skip-tags`` CLI option, which specifies which tags will be skipped for the current run." msgstr "ç¾åœ¨ã®å®Ÿè¡Œã§çœç•¥ã™ã‚‹ã‚¿ã‚°ã‚’指定ã™ã‚‹ ``--skip-tags`` CLI オプションã®å†…容。" #: ../../rst/reference_appendices/special_variables.rst:86 msgid "ansible_verbosity" msgstr "ansible_verbosity" #: ../../rst/reference_appendices/special_variables.rst:86 msgid "Current verbosity setting for Ansible" msgstr "Ansible ã®ç¾åœ¨ã®è©³ç´°ãƒ¬ãƒ™ãƒ«è¨­å®š" #: ../../rst/reference_appendices/special_variables.rst:89 msgid "ansible_version" msgstr "ansible_version" #: ../../rst/reference_appendices/special_variables.rst:89 msgid "Dictionary/map that contains information about the current running version of ansible, it has the following keys: full, major, minor, revision and string." msgstr "ç¾åœ¨å®Ÿè¡Œã—ã¦ã„ã‚‹ Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é–¢ã™ã‚‹æƒ…報をå«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/マップ。fullã€majorã€minorã€revisionã€string ãªã©ã®ã‚­ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:92 msgid "group_names" msgstr "group_names" #: ../../rst/reference_appendices/special_variables.rst:92 msgid "List of groups the current host is part of" msgstr "ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆãŒæ‰€å±žã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€è¦§" #: ../../rst/reference_appendices/special_variables.rst:95 msgid "groups" msgstr "groups" #: ../../rst/reference_appendices/special_variables.rst:95 msgid "A dictionary/map with all the groups in inventory and each group has the list of hosts that belong to it" msgstr "インベントリー内ã®å…¨ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/マップ。å„グループã«ã¯ã€æ‰€å±žã™ã‚‹ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:98 msgid "hostvars" msgstr "hostvars" #: ../../rst/reference_appendices/special_variables.rst:98 msgid "A dictionary/map with all the hosts in inventory and variables assigned to them" msgstr "インベントリー内ã®å…¨ãƒ›ã‚¹ãƒˆã€ãã®ãƒ›ã‚¹ãƒˆã«å‰²å½“ã¦ã‚‰ã‚ŒãŸå¤‰æ•°ã‚’å«ã‚€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼/マップ" #: ../../rst/reference_appendices/special_variables.rst:101 msgid "inventory_hostname" msgstr "inventory_hostname" #: ../../rst/reference_appendices/special_variables.rst:101 msgid "The inventory name for the 'current' host being iterated over in the play" msgstr "プレイã§ç¹°ã‚Šè¿”ã•れる「ç¾åœ¨ã€ã®ãƒ›ã‚¹ãƒˆã®ã‚¤ãƒ™ãƒ³ãƒˆãƒªãƒ¼å" #: ../../rst/reference_appendices/special_variables.rst:104 msgid "inventory_hostname_short" msgstr "inventory_hostname_short" #: ../../rst/reference_appendices/special_variables.rst:104 msgid "The short version of `inventory_hostname`" msgstr "`inventory_hostname` ã®çŸ­ç¸®ç‰ˆ" #: ../../rst/reference_appendices/special_variables.rst:107 msgid "inventory_dir" msgstr "inventory_dir" #: ../../rst/reference_appendices/special_variables.rst:107 msgid "The directory of the inventory source in which the `inventory_hostname` was first defined" msgstr "`inventory_hostname` を最åˆã«å®šç¾©ã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼" #: ../../rst/reference_appendices/special_variables.rst:110 msgid "inventory_file" msgstr "inventory_file" #: ../../rst/reference_appendices/special_variables.rst:110 msgid "The file name of the inventory source in which the `inventory_hostname` was first defined" msgstr "`inventory_hostname` を最åˆã«å®šç¾©ã—ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ãƒ•ァイルå" #: ../../rst/reference_appendices/special_variables.rst:113 msgid "omit" msgstr "omit" #: ../../rst/reference_appendices/special_variables.rst:113 msgid "Special variable that allows you to 'omit' an option in a task, for example ``- user: name=bob home={{ bobs_home|default(omit) }}``" msgstr "タスクã®ã‚ªãƒ—ションを「çœç•¥ã€ã§ãるよã†ã«ã™ã‚‹ç‰¹åˆ¥å¤‰æ•° (ã¤ã¾ã‚Š ``- user: name=bob home={{ bobs_home|default(omit) }}``)" #: ../../rst/reference_appendices/special_variables.rst:116 msgid "play_hosts" msgstr "play_hosts" #: ../../rst/reference_appendices/special_variables.rst:116 msgid "Deprecated, the same as ansible_play_batch" msgstr "éžæŽ¨å¥¨ã€‚ansible_play_batch ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:119 msgid "ansible_play_name" msgstr "ansible_play_name" #: ../../rst/reference_appendices/special_variables.rst:119 msgid "The name of the currently executed play. Added in ``2.8``. (`name` attribute of the play, not file name of the playbook.)" msgstr "ç¾åœ¨å®Ÿè¡Œã•れãŸãƒ—レイã®åå‰ã§ã™ã€‚``2.8`` ã§è¿½åŠ ã•れã¾ã—㟠(Playbook ã®ãƒ•ァイルåã§ã¯ãªãã€ãƒ—レイ㮠`name` 属性)。" #: ../../rst/reference_appendices/special_variables.rst:122 msgid "The path to the directory of the playbook that was passed to the ``ansible-playbook`` command line." msgstr "``ansible-playbook`` ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«æ¸¡ã—㟠Playbook ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘ス" #: ../../rst/reference_appendices/special_variables.rst:125 msgid "role_name" msgstr "role_name" #: ../../rst/reference_appendices/special_variables.rst:125 msgid "The name of the role currently being executed." msgstr "ç¾åœ¨å®Ÿè¡Œä¸­ã®ãƒ­ãƒ¼ãƒ«å。" #: ../../rst/reference_appendices/special_variables.rst:128 msgid "role_names" msgstr "role_names" #: ../../rst/reference_appendices/special_variables.rst:128 msgid "Deprecated, the same as ansible_play_role_names" msgstr "éžæŽ¨å¥¨ã€‚ansible_play_role_names ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:131 msgid "role_path" msgstr "role_path" #: ../../rst/reference_appendices/special_variables.rst:131 msgid "The path to the dir of the currently running role" msgstr "ç¾åœ¨å®Ÿè¡Œä¸­ã®ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘ス" #: ../../rst/reference_appendices/special_variables.rst:135 msgid "These are variables that contain information pertinent to the current host (`inventory_hostname`). They are only available if gathered first. See :ref:`vars_and_facts` for more information." msgstr "ã“れã¯ã€ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆã«é–¢é€£ã™ã‚‹æƒ…報をå«ã‚€å¤‰æ•°ã§ã™ (`inventory_hostname`)。ã“ã®å¤‰æ•°ã¯ã€æœ€åˆã«åŽé›†ã—ãŸå ´åˆã«ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`vars_and_facts`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/special_variables.rst:138 msgid "Contains any facts gathered or cached for the `inventory_hostname` Facts are normally gathered by the :ref:`setup ` module automatically in a play, but any module can return facts." msgstr "`inventory_hostname` å‘ã‘ã«åŽé›†ã¾ãŸã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã—ãŸãƒ•ァクトãŒå«ã¾ã‚Œã¾ã™ã€‚ファクトã¯é€šå¸¸ã€ãƒ—レイã§è‡ªå‹•的㫠:ref:`setup ` モジュールã«ã‚ˆã‚ŠåŽé›†ã•れã¾ã™ãŒã€ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚‚ファクトを返ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:144 msgid "ansible_local" msgstr "ansible_local" #: ../../rst/reference_appendices/special_variables.rst:142 msgid "Contains any 'local facts' gathered or cached for the `inventory_hostname`. The keys available depend on the custom facts created. See the :ref:`setup ` module and :ref:`local_facts` for more details." msgstr "`inventory_hostname` ãŒåŽé›†ã¾ãŸã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹ã€Œãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァクトã€ãŒå«ã¾ã‚Œã¾ã™ã€‚利用å¯èƒ½ãªã‚­ãƒ¼ã¯ã€ä½œæˆã—ãŸã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚詳細ã¯ã€:ref:`setup ` モジュールãŠã‚ˆã³ :ref:`local_facts` モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/special_variables.rst:149 msgid "Connection variables" msgstr "接続変数" #: ../../rst/reference_appendices/special_variables.rst:150 msgid "Connection variables are normally used to set the specifics on how to execute actions on a target. Most of them correspond to connection plugins, but not all are specific to them; other plugins like shell, terminal and become are normally involved. Only the common ones are described as each connection/become/shell/etc plugin can define its own overrides and specific variables. See :ref:`general_precedence_rules` for how connection variables interact with :ref:`configuration settings`, :ref:`command-line options`, and :ref:`playbook keywords`." msgstr "接続変数ã¯é€šå¸¸ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³å®Ÿè¡Œæ–¹æ³•を具体的ã«è¨­å®šã™ã‚‹æ™‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚接続変数ã®å¤§åŠãŒ connection プラグインã«å¯¾å¿œã—ã¦ã„ã¾ã™ãŒã€connection プラグイン固有ã®ã‚‚ã®ã§ã¯ãªãã€é€šå¸¸ã¯ shellã€terminalã€become ãªã©ã®ä»–ã®ãƒ—ラグインも使用ã—ã¾ã™ã€‚å„ connection/become/shell/etc プラグインã¯ã€è‡ªèº«ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚„固有ã®å¤‰æ•°ã‚’定義ã™ã‚‹ãŸã‚ã€ä¸€èˆ¬çš„ãªã‚‚ã®ã®ã¿ã‚’説明ã—ã¾ã™ã€‚接続変数㌠:ref:`æ§‹æˆè¨­å®š`ã€:ref:`コマンドラインオプション`ã€ãŠã‚ˆã³ :ref:`Playbook キーワード` ã¨ç›¸äº’作用ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`general_precedence_rules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/special_variables.rst:155 msgid "ansible_become_user" msgstr "ansible_become_user" #: ../../rst/reference_appendices/special_variables.rst:155 msgid "The user Ansible 'becomes' after using privilege escalation. This must be available to the 'login user'." msgstr "特権昇格後㫠Ansible ãŒãªã‚‹ (become) ユーザー。ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã€Œãƒ­ã‚°ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ãŒåˆ©ç”¨ã§ãるよã†ã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/special_variables.rst:158 msgid "ansible_connection" msgstr "ansible_connection" #: ../../rst/reference_appendices/special_variables.rst:158 msgid "The connection plugin actually used for the task on the target host." msgstr "ターゲットホストã§ã‚¿ã‚¹ã‚¯ã«å®Ÿéš›ã«ä½¿ç”¨ã™ã‚‹ connection プラグイン" #: ../../rst/reference_appendices/special_variables.rst:161 msgid "ansible_host" msgstr "ansible_host" #: ../../rst/reference_appendices/special_variables.rst:161 msgid "The ip/name of the target host to use instead of `inventory_hostname`." msgstr "`inventory_hostname` ã®ä»£ã‚りã«ä½¿ç”¨ã™ã‚‹ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã® ip/åå‰" #: ../../rst/reference_appendices/special_variables.rst:164 msgid "ansible_python_interpreter" msgstr "ansible_python_interpreter" #: ../../rst/reference_appendices/special_variables.rst:164 msgid "The path to the Python executable Ansible should use on the target host." msgstr "Ansible ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã§ä½¿ç”¨ã™ã¹ã Python 実行ファイルã¸ã®ãƒ‘ス" #: ../../:1 msgid "ansible_user" msgstr "ansible_user" #: ../../rst/reference_appendices/special_variables.rst:167 msgid "The user Ansible 'logs in' as." msgstr "Ansible ãŒãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼" #: ../../rst/reference_appendices/test_strategies.rst:4 msgid "Testing Strategies" msgstr "ストラテジーã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/reference_appendices/test_strategies.rst:9 msgid "Integrating Testing With Ansible Playbooks" msgstr "Ansible Playbook ã¨ãƒ†ã‚¹ãƒˆã®çµ±åˆ" #: ../../rst/reference_appendices/test_strategies.rst:11 msgid "Many times, people ask, \"how can I best integrate testing with Ansible playbooks?\" There are many options. Ansible is actually designed to be a \"fail-fast\" and ordered system, therefore it makes it easy to embed testing directly in Ansible playbooks. In this chapter, we'll go into some patterns for integrating tests of infrastructure and discuss the right level of testing that may be appropriate." msgstr "「Ansible Playbook ã¨ãƒ†ã‚¹ãƒˆã‚’最é©ãªæ–¹æ³•ã§çµ±åˆã™ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰ã„ã„ã®ã‹ã€ã¨ã®è³ªå•ãŒå¤šæ•°å¯„ã›ã‚‰ã‚Œã¾ã™ã€‚çµ±åˆã®ã‚ªãƒ—ションã¯ã€å¤šæ•°ã‚りã¾ã™ã€‚Ansible ã¯å®Ÿéš›ã«ã¯ã€ã€Œãƒ•ェイルファースト (Fail fast)ã€ã®é †ç•ªãƒ™ãƒ¼ã‚¹ã®ã‚·ã‚¹ãƒ†ãƒ ã¨ãªã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã‚‹ãŸã‚ã€Ansible Playbookã«ç›´æŽ¥ã€ãƒ†ã‚¹ãƒˆã‚’ç°¡å˜ã«åŸ‹ã‚込むã“ã¨ãŒã§ãã¾ã™ã€‚本章ã§ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ãƒ†ã‚¹ãƒˆçµ±åˆãƒ‘ターンã«ã¤ã„ã¦è§¦ã‚Œã€é©åˆ‡ã«ãƒ†ã‚¹ãƒˆã™ã‚‹ãŸã‚ã®æ­£ã—ã„レベルã«ã¤ã„ã¦ã‚‚説明ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:15 msgid "This is a chapter about testing the application you are deploying, not the chapter on how to test Ansible modules during development. For that content, please hop over to the Development section." msgstr "以下ã®ç« ã¯ã€ãƒ‡ãƒ—ロイã™ã‚‹ã‚¢ãƒ—リケーションをテストã™ã‚‹æ–¹æ³•を説明ã—ã¦ãŠã‚Šã€é–‹ç™ºæ™‚ã« Ansible モジュールをテストã™ã‚‹æ–¹æ³•ã¯èª¬æ˜Žã—ã¦ã„ã¾ã›ã‚“。Ansible ã®ãƒ†ã‚¹ãƒˆæ–¹æ³•ã¯ã€é–‹ç™ºã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/test_strategies.rst:17 msgid "By incorporating a degree of testing into your deployment workflow, there will be fewer surprises when code hits production and, in many cases, tests can be used in production to prevent failed updates from migrating across an entire installation. Since it's push-based, it's also very easy to run the steps on the localhost or testing servers. Ansible lets you insert as many checks and balances into your upgrade workflow as you would like to have." msgstr "開発ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローã«ãƒ†ã‚¹ãƒˆã‚’ã‚る程度組ã¿è¾¼ã‚€ã“ã¨ã§ã€å®Ÿç¨¼åƒç’°å¢ƒã§ã‚³ãƒ¼ãƒ‰ã‚’使用時ã«ã€æ…Œã¦ã‚‹ã“ã¨ãŒå°‘ãªããªã‚Šã¾ã™ã€‚多ãã®å ´åˆã¯ã€å®Ÿç¨¼åƒç’°å¢ƒã§ãƒ†ã‚¹ãƒˆã‚’活用ã—ã¦ã€æ›´æ–°ã®å¤±æ•—ãŒã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å…¨ä½“ã«ç§»è¡Œã•れã¦ã—ã¾ã†ã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ—ッシュベースã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‚„テストサーãƒãƒ¼ã§æ‰‹é †ã‚’éžå¸¸ã«ç°¡å˜ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€å¤šãã®ãƒã‚§ãƒƒã‚¯ã‚’挿入ã§ãã‚‹ãŸã‚ã€ã‚¢ãƒƒãƒ—グレードã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローを希望ã®ãƒ¬ãƒ™ãƒ«ã«èª¿ç¯€ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:22 msgid "The Right Level of Testing" msgstr "é©åˆ‡ãªãƒ¬ãƒ™ãƒ«ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/reference_appendices/test_strategies.rst:24 msgid "Ansible resources are models of desired-state. As such, it should not be necessary to test that services are started, packages are installed, or other such things. Ansible is the system that will ensure these things are declaratively true. Instead, assert these things in your playbooks." msgstr "Ansible リソースã¯ã€ä»»æ„ã®çŠ¶æ…‹ã®ãƒ¢ãƒ‡ãƒ«ã§ã™ã€‚サービスã®èµ·å‹•ã€ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãªã©ã®ãƒ†ã‚¹ãƒˆã‚’行ã†å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ansible ã¯ã€ä¸Šè¨˜ã®å†…容㌠True ã¨å®£è¨€ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã§ã€ä»£ã‚りã«ã€ä»¥ä¸‹ã®é …目を Playbook ã«ã‚¢ã‚µãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:36 msgid "If you think the service may not be started, the best thing to do is request it to be started. If the service fails to start, Ansible will yell appropriately. (This should not be confused with whether the service is doing something functional, which we'll show more about how to do later)." msgstr "サービスãŒèµ·å‹•ã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚‹ã¨æ€ã‚れる場åˆã¯ã€ã‚µãƒ¼ãƒ“スã®é–‹å§‹ã‚’è¦æ±‚ã™ã‚‹ã®ãŒæœ€å–„ã®æ–¹æ³•ã§ã™ã€‚サービスã®é–‹å§‹ã«å¤±æ•—ã—ãŸå ´åˆã¯ã€Ansible ã«ã‚ˆã‚Šéšæ™‚æŒ‡ç¤ºãŒã§ã¾ã™ (ã“れã¯ã€ã‚µãƒ¼ãƒ“ã‚¹ãŒæ©Ÿèƒ½çš„ãªã“ã¨ã‚’行ã£ã¦ã„ã‚‹ã‹ã©ã†ã‹ã¨æ··åŒã—ãªã„ã§ãã ã•ã„。ã“れã«ã¤ã„ã¦ã¯ã€å¾Œã§è©³ã—ã説明ã—ã¾ã™)。" #: ../../rst/reference_appendices/test_strategies.rst:43 msgid "Check Mode As A Drift Test" msgstr "ドリフトテストã¨ã—ã¦ã® check モード" #: ../../rst/reference_appendices/test_strategies.rst:45 msgid "In the above setup, `--check` mode in Ansible can be used as a layer of testing as well. If running a deployment playbook against an existing system, using the `--check` flag to the `ansible` command will report if Ansible thinks it would have had to have made any changes to bring the system into a desired state." msgstr "上記ã®è¨­å®šã§ã¯ã€Ansible ã® `--check` モードã¯ã€ãƒ†ã‚¹ãƒˆã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¨ã—ã¦ã‚‚使用ã§ãã¾ã™ã€‚既存ã®ã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã—ã¦ãƒ‡ãƒ—ロイメント㮠Playbook を実行ã™ã‚‹å ´åˆã« `--check` フラグを `ansible` コマンドã«ä½¿ç”¨ã™ã‚‹ã¨ã€å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚Œã¦ã‚·ã‚¹ãƒ†ãƒ ãŒé©åˆ‡ãªçŠ¶æ…‹ã«ãªã£ã¦ã„る㨠Ansible ãŒåˆ¤æ–­ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’レãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:49 msgid "This can let you know up front if there is any need to deploy onto the given system. Ordinarily, scripts and commands don't run in check mode, so if you want certain steps to execute in normal mode even when the `--check` flag is used, such as calls to the script module, disable check mode for those tasks::" msgstr "ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã«ã‚ˆã‚Šã€ç‰¹å®šã®ã‚·ã‚¹ãƒ†ãƒ ã«ãƒ‡ãƒ—ロイメントãŒå¿…è¦ã‹ã©ã†ã‹ã‚’事å‰ã«æŠŠæ¡ã§ãã¾ã™ã€‚check モードã§ã¯ã€ä¸€èˆ¬çš„ãªã‚¹ã‚¯ãƒªãƒ—トやコマンドã¯å®Ÿè¡Œã•れãªã„ãŸã‚ã€ã‚¹ã‚¯ãƒªãƒ—トモジュールã¸ã®å‘¼ã³å‡ºã—ãªã©ã€`--check` フラグãŒä½¿ç”¨ã•れã¦ã„ã¦ã‚‚通常モードã§ç‰¹å®šã®æ‰‹é †ã‚’実行ã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ã®ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’無効ã«ã—ã¦ãã ã•ã„::" #: ../../rst/reference_appendices/test_strategies.rst:61 msgid "Modules That Are Useful for Testing" msgstr "テストã«ä¾¿åˆ©ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/reference_appendices/test_strategies.rst:63 msgid "Certain playbook modules are particularly good for testing. Below is an example that ensures a port is open::" msgstr "Playbook ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ç‰¹ã«ãƒ†ã‚¹ãƒˆã«é©ã—ã¦ã„ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚以下ã®ä¾‹ã¯ã€ãƒãƒ¼ãƒˆãŒé–‹æ”¾ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:72 msgid "Here's an example of using the URI module to make sure a web service returns::" msgstr "以下ã®ä¾‹ã¯ã€URI モジュールを使用ã—ã¦ã€Web サービスãŒè¿”ã•れるã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:83 msgid "It's easy to push an arbitrary script (in any language) on a remote host and the script will automatically fail if it has a non-zero return code::" msgstr "リモートホストã§ä»»æ„ã®ã‚¹ã‚¯ãƒªãƒ—ト (言語ã¯å•ã‚ãªã„) ãŒç°¡å˜ã«ãƒ—ッシュã•れるãŸã‚ã€ã‚¼ãƒ­ä»¥å¤–ã®ãƒªã‚¿ãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‰ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã¯è‡ªå‹•çš„ã«å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:90 msgid "If using roles (you should be, roles are great!), scripts pushed by the script module can live in the 'files/' directory of a role." msgstr "ロールを使用ã™ã‚‹å ´åˆ (ロールã¯ä¾¿åˆ©ãªã®ã§ä½¿ç”¨ã‚’推奨)ã€ã‚¹ã‚¯ãƒªãƒ—トモジュールãŒãƒ—ッシュã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ãƒ­ãƒ¼ãƒ«ã®ã€Œfiles/ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«é…ç½®ã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:92 msgid "And the assert module makes it very easy to validate various kinds of truth::" msgstr "ã¾ãŸã€ã‚¢ã‚µãƒ¼ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨ã€ã•ã¾ã–ã¾ãªçœŸå½ã®æ¤œè¨¼ãŒéžå¸¸ã«ç°¡å˜ã«ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:104 msgid "Should you feel the need to test for the existence of files that are not declaratively set by your Ansible configuration, the 'stat' module is a great choice::" msgstr "Ansible 設定ã§è¨­å®šãŒå®£è¨€ã•れã¦ã„ãªã„ファイルã®å­˜åœ¨ã‚’テストã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã€Œstatã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæœ€é©ã§ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:117 msgid "As mentioned above, there's no need to check things like the return codes of commands. Ansible is checking them automatically. Rather than checking for a user to exist, consider using the user module to make it exist." msgstr "上記ã®ã‚ˆã†ã«ã€ã‚³ãƒžãƒ³ãƒ‰ã®ãƒªã‚¿ãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‰ãªã©ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ansible ãŒã“ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ã‚’自動的ã«ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚ユーザーã®å­˜åœ¨ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ä»£ã‚りã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’存在ã•ã›ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:120 msgid "Ansible is a fail-fast system, so when there is an error creating that user, it will stop the playbook run. You do not have to check up behind it." msgstr "Ansible ã¯ãƒ•ェイルファーストシステムã§ã‚ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ä½œæˆæ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚‹ã¨ã€Playbook ã®å®Ÿè¡ŒãŒåœæ­¢ã—ã¾ã™ã€‚ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§è¡Œã‚れã¦ã„る内容を確èªã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/test_strategies.rst:124 msgid "Testing Lifecycle" msgstr "ライフサイクルã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/reference_appendices/test_strategies.rst:126 msgid "If writing some degree of basic validation of your application into your playbooks, they will run every time you deploy." msgstr "アプリケーションã®åŸºæœ¬æ¤œè¨¼ã‚’ Playbook ã«è¨˜è¿°ã™ã‚‹ã¨ã€ãƒ‡ãƒ—ロイ時ã«å¿…ãšã“ã®æ¤œè¨¼ãŒå®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:128 msgid "As such, deploying into a local development VM and a staging environment will both validate that things are according to plan ahead of your production deploy." msgstr "ãã®ãŸã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ã®é–‹ç™ºä»®æƒ³ãƒžã‚·ãƒ³ã‚„ステージ環境ã«ãƒ‡ãƒ—ロイã™ã‚‹ã¨ã„ãšã‚Œã‚‚ã€å®Ÿç¨¼åƒã§ã®ãƒ‡ãƒ—ロイã®å‰ã«è¨ˆç”»é€šã‚Šã«ä½œæ¥­ãŒé€²ã‚“ã§ã„ã‚‹ã‹ã©ã†ã‹ã‚’検証ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:131 msgid "Your workflow may be something like this::" msgstr "ワークフローã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:138 msgid "Something like an integration test battery should be written by your QA team if you are a production webservice. This would include things like Selenium tests or automated API tests and would usually not be something embedded into your Ansible playbooks." msgstr "実稼åƒã® Web サービスを使用ã™ã‚‹å ´åˆã«ã¯ã€QA ãƒãƒ¼ãƒ ãŒåŒæ§˜ã®çµ±åˆãƒ†ã‚¹ãƒˆãƒãƒƒãƒ†ãƒªãƒ¼ã‚’記述ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。ã“ã®ã‚ˆã†ãªãƒ†ã‚¹ãƒˆã«ã¯ Selenium テストや自動化 API テストãªã©ãŒå«ã¾ã‚Œã€é€šå¸¸ã¯ã€Ansible Playbook ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/reference_appendices/test_strategies.rst:141 msgid "However, it does make sense to include some basic health checks into your playbooks, and in some cases it may be possible to run a subset of the QA battery against remote nodes. This is what the next section covers." msgstr "ãŸã ã—ã€ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªãƒ˜ãƒ«ã‚¹ãƒã‚§ãƒƒã‚¯ã‚’ Playbook ã«è¿½åŠ ã™ã‚‹ã¨ä¾¿åˆ©ã§ã™ã€‚å ´åˆã«ã‚ˆã£ã¦ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã«å¯¾ã—㦠QA ãƒãƒƒãƒ†ãƒªãƒ¼ã®ã‚µãƒ–セットを実行ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®ç‚¹ã«ã¤ã„ã¦ã¯ã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:145 msgid "Integrating Testing With Rolling Updates" msgstr "ローリングアップデートã¸ã®ãƒ†ã‚¹ãƒˆã®çµ±åˆ" #: ../../rst/reference_appendices/test_strategies.rst:147 msgid "If you have read into :ref:`playbooks_delegation` it may quickly become apparent that the rolling update pattern can be extended, and you can use the success or failure of the playbook run to decide whether to add a machine into a load balancer or not." msgstr ":ref:`playbooks_delegation` を読むã¨ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートã®ãƒ‘ターンを拡張ã§ãã€ã¾ãŸã€Playbook å®Ÿè¡Œã®æˆå¦ã§ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã«ãƒžã‚·ãƒ³ã‚’ 1 å°è¿½åŠ ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã§ãã‚‹ã“ã¨ãŒå³åº§ã«æ˜Žç¢ºã«ãªã£ãŸã“ã¨ã§ã—ょã†ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:150 msgid "This is the great culmination of embedded tests::" msgstr "ã“れã¯ã€çµ„ã¿è¾¼ã¿ãƒ†ã‚¹ãƒˆã®é›†å¤§æˆã§ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:175 msgid "Of course in the above, the \"take out of the pool\" and \"add back\" steps would be replaced with a call to an Ansible load balancer module or appropriate shell command. You might also have steps that use a monitoring module to start and end an outage window for the machine." msgstr "上記ã§ã¯å½“ç„¶ã€ã€Œãƒ—ールã‹ã‚‰å–å¾—ã™ã‚‹ã€æ‰‹é †ã‚„「追加ã—ç›´ã™ã€æ‰‹é †ã¯ã€Ansible ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ã€é©åˆ‡ãª shell コマンドã®å‘¼ã³å‡ºã—ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚ã¾ãŸã€ãƒžã‚·ãƒ³ã®ã‚µãƒ¼ãƒ“ã‚¹åœæ­¢æœŸé–“ã‚’é–‹å§‹/終了ã™ã‚‹ãƒ¢ãƒ‹ã‚¿ãƒªãƒ³ã‚°ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹æ‰‹é †ãªã©ã‚‚å«ã¾ã‚Œã¦ã„ã‚‹å ´åˆãŒã‚りã¾ã™ãŒã€" #: ../../rst/reference_appendices/test_strategies.rst:179 msgid "However, what you can see from the above is that tests are used as a gate -- if the \"apply_testing_checks\" step is not performed, the machine will not go back into the pool." msgstr "上記ã§åˆ†ã‹ã‚‹ã‚ˆã†ã«ã€ãƒ†ã‚¹ãƒˆã¯ã‚²ãƒ¼ãƒˆã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œapply_testing_checksã€ã®æ‰‹é †ãŒå®Ÿè¡Œã•れãªã„å ´åˆã¯ã€ãƒžã‚·ãƒ³ãŒãƒ—ãƒ¼ãƒ«ã«æˆ»ã‚‰ãªã„よã†ã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:182 msgid "Read the delegation chapter about \"max_fail_percentage\" and you can also control how many failing tests will stop a rolling update from proceeding." msgstr "ローリングアップデートã®ç¶šè¡Œã‚’妨ã’るテストã®å¤±æ•—回数を制御ã§ãã¾ã™ã€‚ã“ã®ç‚¹ã«ã¤ã„ã¦ã¯ã€ã€Œmax_fail_percentageã€å‘ã‘ã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/reference_appendices/test_strategies.rst:185 msgid "This above approach can also be modified to run a step from a testing machine remotely against a machine::" msgstr "上記ã®ã‚¢ãƒ—ローãƒã‚’変更ã—ã¦ã€ãƒžã‚·ãƒ³ã«å¯¾ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ†ã‚¹ãƒˆãƒžã‚·ãƒ³ã‹ã‚‰æ‰‹é †ã‚’実行ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:213 msgid "In the above example, a script is run from the testing server against a remote node prior to bringing it back into the pool." msgstr "上記ã®ä¾‹ã§ã¯ã€ãƒ—ールã«ãƒžã‚·ãƒ³ã‚’戻ã™å‰ã«ã€ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒŽãƒ¼ãƒ‰ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã‚µãƒ¼ãƒãƒ¼ã‹ã‚‰ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:216 msgid "In the event of a problem, fix the few servers that fail using Ansible's automatically generated retry file to repeat the deploy on just those servers." msgstr "å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯ã€Ansible ãŒè‡ªå‹•ã§ç”Ÿæˆã—ãŸå†è©¦è¡Œãƒ•ァイルを使用ã—ã¦ã€å¤±æ•—ã—ãŸã‚µãƒ¼ãƒãƒ¼æ•°å°ã‚’修正ã—ã€ãã®ã‚µãƒ¼ãƒãƒ¼ã ã‘ã«ãƒ‡ãƒ—ロイメントを繰り返ã—実行ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:220 msgid "Achieving Continuous Deployment" msgstr "継続的ãªãƒ‡ãƒ—ロイメントã®å®Ÿç¾" #: ../../rst/reference_appendices/test_strategies.rst:222 msgid "If desired, the above techniques may be extended to enable continuous deployment practices." msgstr "ä»»æ„ã§ã€ä¸Šè¨˜ã®æ‰‹æ³•ã‚’æ‹¡å¼µã—ã¦ã€ç¶™ç¶šã—ã¦ãƒ‡ãƒ—ロイメントãŒã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:224 msgid "The workflow may look like this::" msgstr "ワークフローã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:231 msgid "Some Ansible users use the above approach to deploy a half-dozen or dozen times an hour without taking all of their infrastructure offline. A culture of automated QA is vital if you wish to get to this level." msgstr "Ansible ユーザーã«ã‚ˆã£ã¦ã¯ã€ä¸Šè¨˜ã®ã‚¢ãƒ—ローãƒã‚’使用ã—ã¦ã€ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’オフラインã«ã™ã‚‹ã“ã¨ãªãã€1 時間㫠6 回ã€ã¾ãŸã¯ 12 回デプロイã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ¬ãƒ™ãƒ«ã«åˆ°é”ã™ã‚‹ã«ã¯ã€è‡ªå‹•化 QA ã®æ–‡åŒ–ãŒå¿…è¦ä¸å¯æ¬ ã§ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:234 msgid "If you are still doing a large amount of manual QA, you should still make the decision on whether to deploy manually as well, but it can still help to work in the rolling update patterns of the previous section and incorporate some basic health checks using modules like 'script', 'stat', 'uri', and 'assert'." msgstr "大é‡ã® QA を手動ã§ç¶šã‘ã¦ã„ã‚‹å ´åˆã«ã¯ã€æ‰‹å‹•ã§ãƒ‡ãƒ—ロイã™ã‚‹ã¹ãã‹ã©ã†ã‹æ±ºå®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€å‰é …ã®ã‚ˆã†ã«ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートã®ãƒ‘ターンを使用ã—ã¦ä½œæ¥­ã‚’ã—ã€ã€Œscriptã€ã€ã€Œstatã€ã€ã€Œuriã€ã€ã€Œassertã€ãªã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§åŸºæœ¬çš„ãªãƒ˜ãƒ«ã‚¹ãƒã‚§ãƒƒã‚¯ã‚’組ã¿è¾¼ã‚€ã ã‘ã§ã‚‚役立ã¤å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:239 msgid "Conclusion" msgstr "ã¾ã¨ã‚" #: ../../rst/reference_appendices/test_strategies.rst:241 msgid "Ansible believes you should not need another framework to validate basic things of your infrastructure is true. This is the case because Ansible is an order-based system that will fail immediately on unhandled errors for a host, and prevent further configuration of that host. This forces errors to the top and shows them in a summary at the end of the Ansible run." msgstr "Ansible ã§ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®åŸºæœ¬çš„ãªå†…å®¹ãŒæ­£ã—ã„ã‹ã‚’検証ã™ã‚‹ãƒ•レームワークを別ã«ç”¨æ„ã™ã‚‹å¿…è¦ã¯ãªã„ã¨è€ƒãˆã¾ã™ã€‚ã“れã¯ã€Ansible ã¯é †åºãƒ™ãƒ¼ã‚¹ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã€ãƒ›ã‚¹ãƒˆã«æœªå‡¦ç†ã®ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚‹ã¨å³åº§ã«å¤±æ•—ã—ã€ãã®ãƒ›ã‚¹ãƒˆã®è¨­å®šãŒã“れ以上進ã¾ãªã„よã†ã«ã—ã¾ã™ã€‚ã“ã†ã™ã‚‹ã“ã¨ã§ã€ã‚¨ãƒ©ãƒ¼ãŒè¡¨é¢åŒ–ã—ã€Ansible ã®å®Ÿè¡Œã®æœ€å¾Œã«ã¾ã¨ã‚ã¨ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:245 msgid "However, as Ansible is designed as a multi-tier orchestration system, it makes it very easy to incorporate tests into the end of a playbook run, either using loose tasks or roles. When used with rolling updates, testing steps can decide whether to put a machine back into a load balanced pool or not." msgstr "ãŸã ã—ã€Ansible ã¯ã€è¤‡æ•°éšŽå±¤ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚·ã‚¹ãƒ†ãƒ ã¨ã—ã¦è¨­è¨ˆã•れã¦ã„ã‚‹ãŸã‚ã€éžå¸¸ã«ç°¡å˜ã«ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚’使用ã—㦠Playbook å®Ÿè¡Œã®æœ€å¾Œã«ãƒ†ã‚¹ãƒˆã‚’組ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ローリングアップデートã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ãƒ†ã‚¹ãƒˆã®æ‰‹é †ã§ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã®ãƒ—ールã«ãƒžã‚·ãƒ³ã‚’戻ã™ã‹ã©ã†ã‹ã‚’判断ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:249 msgid "Finally, because Ansible errors propagate all the way up to the return code of the Ansible program itself, and Ansible by default runs in an easy push-based mode, Ansible is a great step to put into a build environment if you wish to use it to roll out systems as part of a Continuous Integration/Continuous Delivery pipeline, as is covered in sections above." msgstr "最後ã«ã€Ansible ã®ã‚¨ãƒ©ãƒ¼ã¯ã€Ansible ã®ãƒ—ログラム自体ã®ãƒªã‚¿ãƒ¼ãƒ³ã‚³ãƒ¼ãƒ‰ã«ã¾ã§ä¼æ¬ã•れã€ã¾ãŸ Ansible ã¯ãƒ‡ãƒ•ォルトã§ç°¡å˜ãªãƒ—ッシュベースモードã§å®Ÿè¡Œã•れるãŸã‚ã€ä¸Šè¨˜ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ã“れを使用ã—ã¦ç¶™ç¶šçš„ãªçµ±åˆ/継続的ãªãƒ‡ãƒªãƒãƒªãƒ¼ãƒ‘イプラインã®ä¸€éƒ¨ã¨ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’展開ã™ã‚‹å ´åˆã« Ansible ã‚’ãƒ“ãƒ«ãƒ‰ç’°å¢ƒã«æ´»ç”¨ã™ã‚‹ã¨å¤§ããªä¸€æ­©ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:253 msgid "The focus should not be on infrastructure testing, but on application testing, so we strongly encourage getting together with your QA team and ask what sort of tests would make sense to run every time you deploy development VMs, and which sort of tests they would like to run against the staging environment on every deploy. Obviously at the development stage, unit tests are great too. But don't unit test your playbook. Ansible describes states of resources declaratively, so you don't have to. If there are cases where you want to be sure of something though, that's great, and things like stat/assert are great go-to modules for that purpose." msgstr "インフラストラクãƒãƒ£ãƒ¼ãƒ†ã‚¹ãƒˆã§ã¯ãªãã€ã‚¢ãƒ—リケーションã®ãƒ†ã‚¹ãƒˆã«ç„¦ç‚¹ã‚’当ã¦ã‚‹ãŸã‚ã€QA ãƒãƒ¼ãƒ ã¨é€£æºã—ã¦ã€ã©ã®ã‚ˆã†ãªãƒ†ã‚¹ãƒˆã‚’ã€é–‹ç™ºä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ‡ãƒ—ãƒ­ã‚¤ãƒ¡ãƒ³ãƒˆæ™‚ã«æ¯Žå›žå®Ÿè¡Œã™ã‚‹ã¨ä¾¿åˆ©ã‹ã€ã¾ãŸãƒ‡ãƒ—ãƒ­ã‚¤ãƒ¡ãƒ³ãƒˆæ™‚ã«æ¯Žå›žã€ã‚¹ãƒ†ãƒ¼ã‚¸ç’°å¢ƒã«ã©ã®ã‚ˆã†ãªãƒ†ã‚¹ãƒˆã‚’実行ã™ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。明らã‹ã«ã€é–‹ç™ºæ®µéšŽã§ã¯ã€ãƒ¦ãƒ‹ãƒƒãƒˆãƒ†ã‚¹ãƒˆã‚‚素晴らã—ã„ã§ã™ãŒã€Playbook をユニットテストã«ã¯ã—ãªã„ã§ãã ã•ã„。Ansible ã¯ãƒªã‚½ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’å®£è¨€çš„ã«è¨˜è¿°ã™ã‚‹ãŸã‚ã€ãã®å¿…è¦ã¯ã‚りã¾ã›ã‚“。ãŸã ã—ã€ä½•ã‹ã‚’確èªã—ãŸã„å ´åˆã¯ã€stat/assert ã®ã‚ˆã†ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:259 msgid "In all, testing is a very organizational and site-specific thing. Everybody should be doing it, but what makes the most sense for your environment will vary with what you are deploying and who is using it -- but everyone benefits from a more robust and reliable deployment system." msgstr "çµå±€ã€ãƒ†ã‚¹ãƒˆã¯éžå¸¸ã«çµ„織的ã§ã€ã‚µã‚¤ãƒˆå›ºæœ‰ã®å†…容ã¨ãªã£ã¦ã„ã¾ã™ã€‚テストã¯å¿…ãšè¡Œã†ã¹ãã§ã™ãŒã€è²´ç¤¾ã®ç’°å¢ƒã«æœ€ã‚‚有用ãªãƒ†ã‚¹ãƒˆã¯ã€ãƒ‡ãƒ—ロイメントã®å†…容やã€èª°ãŒä½¿ç”¨ã™ã‚‹ã‹ã«ã‚ˆã‚Šç•°ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€èª°ã‚‚ãŒã€å¼·åŠ›ã§ä¿¡é ¼æ€§ã®é«˜ã„デプロイメントシステムã‹ã‚‰æ©æµã‚’å—ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/test_strategies.rst:269 msgid ":ref:`playbooks_delegation`" msgstr ":ref:`playbooks_delegation`" #: ../../rst/reference_appendices/test_strategies.rst:270 msgid "Delegation, useful for working with load balancers, clouds, and locally executed steps." msgstr "委譲 (ロードãƒãƒ©ãƒ³ã‚µãƒ¼ã€ã‚¯ãƒ©ã‚¦ãƒ‰ã€ãŠã‚ˆã³ãƒ­ãƒ¼ã‚«ãƒ«ã§å®Ÿè¡Œã—ãŸæ‰‹é †ã‚’使用ã™ã‚‹éš›ã«å½¹ã«ç«‹ã¡ã¾ã™)" #: ../../rst/reference_appendices/tower.rst:4 msgid "Red Hat Ansible Automation Platform" msgstr "Red Hat Ansible Automation Platform" #: ../../rst/reference_appendices/tower.rst:6 msgid "`Red Hat Ansible Automation Platform `_ (RHAAP) is an integrated solution for operationalizing Ansible across your team, organization, and enterprise. The platform includes a controller with a web console and REST API, analytics, execution environments, and much more." msgstr "`Red Hat Ansible Automation Platform `_(RHAAP)ã¯ã€ãƒãƒ¼ãƒ ã€çµ„ç¹”ã€ä¼æ¥­å…¨ä½“ã§ Ansible ã‚’æ“作ã™ã‚‹çµ±åˆã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã§ã™ã€‚ã“ã®ãƒ—ラットフォームã«ã¯ã€Web コンソールãŠã‚ˆã³ REST APIã€è§£æžã€å®Ÿè¡Œç’°å¢ƒã‚’å‚™ãˆãŸã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/reference_appendices/tower.rst:8 msgid "RHAAP gives you role-based access control, including control over the use of securely stored credentials for SSH and other services. You can sync your inventory with a wide variety of cloud sources, and powerful multi-playbook workflows allow you to model complex processes." msgstr "RHAAP ã«ã¯ã€ã‚»ã‚­ãƒ¥ã‚¢ã«ä¿å­˜ã•れã¦ã„ã‚‹ SSH ã‚„ä»–ã®ã‚µãƒ¼ãƒ“スã®èªè¨¼æƒ…å ±ã®ä½¿ç”¨æ™‚ã«åˆ¶å¾¡ã™ã‚‹ãªã©ã€ãƒ­ãƒ¼ãƒ«ãƒ™ãƒ¼ã‚¹ã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚インベントリーã¯ã€å¹…広ã„クラウドソースã¨åŒæœŸã§ãã€å¼·åŠ›ãª Playbook ワークフローを複数使用ã™ã‚‹ã“ã¨ã§ã€è¤‡é›‘ãªãƒ—ロセスをモデル化ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/tower.rst:10 msgid "RHAAP logs all of your jobs, integrates well with LDAP, SAML, and other authentication sources, and has an amazing browsable REST API. Command line tools are available for easy integration with Jenkins as well." msgstr "RHAAP ã¯ã€ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–をログ記録ã—ã€LDAPã€SAMLã€ä»–ã®èªè¨¼ã‚½ãƒ¼ã‚¹ã¨çµ±åˆã®ç›¸æ€§ãŒã‚ˆãã€ãƒ–ラウザーã§ä½¿ç”¨å¯èƒ½ãªç´ æ™´ã‚‰ã—ã„ REST API ãŒå«ã¾ã‚Œã¾ã™ã€‚ã¾ãŸã€Jenkins ã¨ç°¡å˜ã«çµ±åˆã§ãるよã†ã«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚‚利用ã§ãã¾ã™ã€‚" #: ../../rst/reference_appendices/tower.rst:12 msgid "RHAAP incorporates the downstream Red Hat supported product version of Ansible AWX, the downstream Red Hat supported product version of Ansible Galaxy, and multiple SaaS offerings. Find out more about RHAAP features and on the `Red Hat Ansible Automation Platform webpage `_. A Red Hat Ansible Automation Platform subscription includes support from Red Hat, Inc." msgstr "RHAAP ã¯ã€Red Hat ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ Ansible AWX ã®è£½å“ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ã® Red Hat ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ Ansible Galaxy ã®è£½å“ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ãŠã‚ˆã³ SaaS オファリングã®ãƒ€ã‚¦ãƒ³ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚RHAAP 機能ã®è©³ç´°ã¯ã€`Red Hat Ansible Automation Platform webpage `_ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Red Hat Ansible Automation Platform サブスクリプションã«ã¯ã€Red Hat, Inc ã®ã‚µãƒãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #~ msgid "ANSIBLE_SSH_ARGS" #~ msgstr "" #~ msgid "If set, this will override the Ansible default ssh arguments. In particular, users may wish to raise the ControlPersist time to encourage performance. A value of 30 minutes may be appropriate. Be aware that if `-o ControlPath` is set in ssh_args, the control path setting is not used." #~ msgstr "" #~ msgid "-C -o ControlMaster=auto -o ControlPersist=60s" #~ msgstr "" #~ msgid "[ssh_connection]" #~ msgstr "" #~ msgid "ssh_args" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_ARGS`" #~ msgstr "" #~ msgid "ANSIBLE_SSH_CONTROL_PATH" #~ msgstr "" #~ msgid "This is the location to save ssh's ControlPath sockets, it uses ssh's variable substitution. Since 2.3, if null, ansible will generate a unique hash. Use `%(directory)s` to indicate where to use the control dir path setting. Before 2.3 it defaulted to `control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r`. Be aware that this setting is ignored if `-o ControlPath` is set in ssh args." #~ msgstr "" #~ msgid "control_path" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_CONTROL_PATH`" #~ msgstr "" #~ msgid "ANSIBLE_SSH_CONTROL_PATH_DIR" #~ msgstr "" #~ msgid "This sets the directory to use for ssh control path if the control path setting is null. Also, provides the `%(directory)s` variable for the control path setting." #~ msgstr "" #~ msgid "~/.ansible/cp" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_CONTROL_PATH_DIR`" #~ msgstr "" #~ msgid "ANSIBLE_SSH_EXECUTABLE" #~ msgstr "" #~ msgid "This defines the location of the ssh binary. It defaults to `ssh` which will use the first ssh binary available in $PATH. This option is usually not required, it might be useful when access to system ssh is restricted, or when using ssh wrappers to connect to remote hosts." #~ msgstr "" #~ msgid "ssh" #~ msgstr "" #~ msgid "ssh_executable" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_EXECUTABLE`" #~ msgstr "" #~ msgid "ANSIBLE_SSH_RETRIES" #~ msgstr "" #~ msgid "Number of attempts to establish a connection before we give up and report the host as 'UNREACHABLE'" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_RETRIES`" #~ msgstr "" #~ msgid "DEFAULT_SCP_IF_SSH" #~ msgstr "" #~ msgid "Preferred method to use when transferring files over ssh. When set to smart, Ansible will try them until one succeeds or they all fail. If set to True, it will force 'scp', if False it will use 'sftp'." #~ msgstr "" #~ msgid "scp_if_ssh" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SCP_IF_SSH`" #~ msgstr "" #~ msgid "DEFAULT_SFTP_BATCH_MODE" #~ msgstr "" #~ msgid "sftp_batch_mode" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SFTP_BATCH_MODE`" #~ msgstr "" #~ msgid "DEFAULT_SSH_TRANSFER_METHOD" #~ msgstr "" #~ msgid "unused?" #~ msgstr "" #~ msgid "transfer_method" #~ msgstr "" #~ msgid ":envvar:`ANSIBLE_SSH_TRANSFER_METHOD`" #~ msgstr "" #~ msgid "If set, this will override the Ansible default ssh arguments.In particular, users may wish to raise the ControlPersist time to encourage performance. A value of 30 minutes may be appropriate.Be aware that if `-o ControlPath` is set in ssh_args, the control path setting is not used." #~ msgstr "" #~ msgid "See also :ref:`ANSIBLE_SSH_ARGS `" #~ msgstr "" #~ msgid "This is the location to save ssh's ControlPath sockets, it uses ssh's variable substitution.Since 2.3, if null, ansible will generate a unique hash. Use `%(directory)s` to indicate where to use the control dir path setting.Before 2.3 it defaulted to `control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r`.Be aware that this setting is ignored if `-o ControlPath` is set in ssh args." #~ msgstr "" #~ msgid "See also :ref:`ANSIBLE_SSH_CONTROL_PATH `" #~ msgstr "" #~ msgid "This sets the directory to use for ssh control path if the control path setting is null.Also, provides the `%(directory)s` variable for the control path setting." #~ msgstr "" #~ msgid "See also :ref:`ANSIBLE_SSH_CONTROL_PATH_DIR `" #~ msgstr "" #~ msgid "This defines the location of the ssh binary. It defaults to `ssh` which will use the first ssh binary available in $PATH.This option is usually not required, it might be useful when access to system ssh is restricted, or when using ssh wrappers to connect to remote hosts." #~ msgstr "" #~ msgid "See also :ref:`ANSIBLE_SSH_EXECUTABLE `" #~ msgstr "" #~ msgid "See also :ref:`ANSIBLE_SSH_RETRIES `" #~ msgstr "" #~ msgid "Preferred method to use when transferring files over ssh.When set to smart, Ansible will try them until one succeeds or they all fail.If set to True, it will force 'scp', if False it will use 'sftp'." #~ msgstr "" #~ msgid "See also :ref:`DEFAULT_SCP_IF_SSH `" #~ msgstr "" #~ msgid "See also :ref:`DEFAULT_SFTP_BATCH_MODE `" #~ msgstr "" #~ msgid "See also :ref:`DEFAULT_SSH_TRANSFER_METHOD `" #~ msgstr "" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid "True" #~ msgstr "True" #~ msgid "This makes the temporary files created on the machine world-readable and will issue a warning instead of failing the task. It is useful when becoming an unprivileged user." #~ msgstr "ã“れã«ã‚ˆã‚Šã€ãƒžã‚·ãƒ³ã§ä½œæˆã•れãŸä¸€æ™‚ファイルãŒèª°ã§ã‚‚読ã¿å–りå¯èƒ½ã«ãªã‚Šã€ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ä»£ã‚りã«è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“れã¯ã€æ¨©é™ã®ãªã„ユーザーã«å¤‰ã‚ã‚‹ (become) å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚" #~ msgid "False" #~ msgstr "False" #~ msgid "moved to a per plugin approach that is more flexible" #~ msgstr "より柔軟ãªãƒ—ラグインã®ã‚¢ãƒ—ローãƒã¸ç§»è¡Œ" #~ msgid "mostly the same config will work, but now controlled from the plugin itself and not using the general constant." #~ msgstr "ã»ã¨ã‚“ã©ã®åŒã˜è¨­å®šã¯æ©Ÿèƒ½ã—ã¾ã™ãŒã€ãƒ—ラグイン自体ã‹ã‚‰åˆ¶å¾¡ã•れã€ä¸€èˆ¬çš„ãªå®šæ•°ã¯ä½¿ç”¨ã—ã¾ã›ã‚“。" #~ msgid "None" #~ msgstr "ãªã—" #~ msgid "[]" #~ msgstr "[]" #~ msgid "callback_enabled" #~ msgstr "callback_enabled" #~ msgid "CONDITIONAL_BARE_VARS" #~ msgstr "CONDITIONAL_BARE_VARS" #~ msgid "With this setting on (True), running conditional evaluation 'var' is treated differently than 'var.subkey' as the first is evaluated directly while the second goes through the Jinja2 parser. But 'false' strings in 'var' get evaluated as booleans. With this setting off they both evaluate the same but in cases in which 'var' was 'false' (a string) it won't get evaluated as a boolean anymore. Currently this setting defaults to 'True' but will soon change to 'False' and the setting itself will be removed in the future. Expect that this setting eventually will be deprecated after 2.12" #~ msgstr "ã“ã®è¨­å®šã‚’ (True) ã«ã™ã‚‹ã¨ã€æ¡ä»¶ä»˜ã評価「varã€ã®å®Ÿè¡Œã¯ã€Œvar.subkeyã€ã¨ã¯ç•°ãªã‚‹æ–¹æ³•ã§å‡¦ç†ã•れã¾ã™ã€‚最åˆã®è©•価ã¯ç›´æŽ¥è©•価ã•れã€2 番目ã®è©•価㯠Jinja2 パーサーを通éŽã™ã‚‹ãŸã‚ã§ã™ã€‚ãŸã ã—ã€ã€Œvarã€ã®ã€Œfalseã€æ–‡å­—列ã¯ãƒ–ール値ã¨ã—ã¦è©•価ã•れã¾ã™ã€‚ã“ã®è¨­å®šã‚’オフã«ã™ã‚‹ã¨ã€ã©ã¡ã‚‰ã‚‚åŒã˜ã‚ˆã†ã«è©•価ã•れã¾ã™ãŒã€ã€Œvarã€ãŒã€Œfalseã€(文字列) ã®å ´åˆã¯ã€ãƒ–ール値ã¨ã—ã¦è©•価ã•れãªããªã‚Šã¾ã™ã€‚ç¾åœ¨ã€ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルトã¯ã€ŒTrueã€ã§ã™ãŒã€ã¾ã‚‚ãªã「Falseã€ã«å¤‰æ›´ã•れã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§è¨­å®šè‡ªä½“ãŒå‰Šé™¤ã•れã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€2.12 以é™ã§æœ€çµ‚çš„ã«éžæŽ¨å¥¨ã«ãªã‚‹ã¨äºˆæƒ³ã•れã¾ã™ã€‚" #~ msgid "conditional_bare_variables" #~ msgstr "conditional_bare_variables" #~ msgid ":envvar:`ANSIBLE_CONDITIONAL_BARE_VARS`" #~ msgstr ":envvar:`ANSIBLE_CONDITIONAL_BARE_VARS`" #~ msgid "connection_facts_modules" #~ msgstr "connection_facts_modules" #~ msgid ":envvar:`ANSIBLE_CONNECTION_FACTS_MODULES`" #~ msgstr ":envvar:`ANSIBLE_CONNECTION_FACTS_MODULES`" #~ msgid "CONTROLLER_PYTHON_WARNING" #~ msgstr "CONTROLLER_PYTHON_WARNING" #~ msgid "controller_python_warning" #~ msgstr "controller_python_warning" #~ msgid ":envvar:`ANSIBLE_CONTROLLER_PYTHON_WARNING`" #~ msgstr ":envvar:`ANSIBLE_CONTROLLER_PYTHON_WARNING`" #~ msgid "5" #~ msgstr "5" #~ msgid "10" #~ msgstr "10" #~ msgid "DEFAULT_HANDLER_INCLUDES_STATIC" #~ msgstr "DEFAULT_HANDLER_INCLUDES_STATIC" #~ msgid "Since 2.0 M(ansible.builtin.include) can be 'dynamic', this setting (if True) forces that if the include appears in a ``handlers`` section to be 'static'." #~ msgstr "2.0 M(ansible.builtin.include) ã¯ã€Œå‹•çš„ã€ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®è¨­å®š (True ã®å ´åˆ) ã¯ã€``handlers`` セクションã«è¡¨ç¤ºã•れるインクルードãŒã€Œé™çš„ã€ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "handler_includes_static" #~ msgstr "handler_includes_static" #~ msgid ":envvar:`ANSIBLE_HANDLER_INCLUDES_STATIC`" #~ msgstr ":envvar:`ANSIBLE_HANDLER_INCLUDES_STATIC`" #~ msgid "include itself is deprecated and this setting will not matter in the future" #~ msgstr "インクルード自体ã¯éžæŽ¨å¥¨ã§ã‚ã‚‹ãŸã‚ã€ã“ã®è¨­å®šã¯ä»Šå¾Œé‡è¦ã§ã¯ã‚りã¾ã›ã‚“。" #~ msgid "none as its already built into the decision between include_tasks and import_tasks" #~ msgstr "include_tasks 㨠import_tasks ã®æ±ºå®šã«ã™ã§ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã‚‹ãŸã‚ã€none ã§ã™ã€‚" #~ msgid "Ansible managed" #~ msgstr "Ansible ãŒç®¡ç†" #~ msgid "ZIP_DEFLATED" #~ msgstr "ZIP_DEFLATED" #~ msgid "15" #~ msgstr "15" #~ msgid "LOG_USER" #~ msgstr "LOG_USER" #~ msgid "DEFAULT_TASK_INCLUDES_STATIC" #~ msgstr "DEFAULT_TASK_INCLUDES_STATIC" #~ msgid "The `include` tasks can be static or dynamic, this toggles the default expected behaviour if autodetection fails and it is not explicitly set in task." #~ msgstr "`include` タスクã¯é™çš„ã¾ãŸã¯å‹•çš„ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€è‡ªå‹•検出ãŒå¤±æ•—ã—ã€ã‚¿ã‚¹ã‚¯ã«è‡ªå‹•æ¤œå‡ºãŒæ˜Žç¤ºçš„ã«è¨­å®šã•れã¦ã„ãªã„å ´åˆã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æƒ³å®šã•れる動作を切り替ãˆã¾ã™ã€‚" #~ msgid "task_includes_static" #~ msgstr "task_includes_static" #~ msgid ":envvar:`ANSIBLE_TASK_INCLUDES_STATIC`" #~ msgstr ":envvar:`ANSIBLE_TASK_INCLUDES_STATIC`" #~ msgid "None, as its already built into the decision between include_tasks and import_tasks" #~ msgstr "include_tasks 㨠import_tasks ã®æ±ºå®šã«ã™ã§ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã‚‹ãŸã‚ã€none ã§ã™ã€‚" #~ msgid "0" #~ msgstr "0" #~ msgid "3" #~ msgstr "3" #~ msgid "Path to the Python interpreter to be used for module execution on remote targets, or an automatic discovery mode. Supported discovery modes are ``auto``, ``auto_silent``, and ``auto_legacy`` (the default). All discovery modes employ a lookup table to use the included system Python (on distributions known to include one), falling back to a fixed ordered list of well-known Python interpreter locations if a platform-specific default is not available. The fallback behavior will issue a warning that the interpreter should be set explicitly (since interpreters installed later may change which one is used). This warning behavior can be disabled by setting ``auto_silent``. The default value of ``auto_legacy`` provides all the same behavior, but for backwards-compatibility with older Ansible releases that always defaulted to ``/usr/bin/python``, will use that interpreter if present (and issue a warning that the default behavior will change to that of ``auto`` in a future Ansible release." #~ msgstr "リモートターゲットã¾ãŸã¯è‡ªå‹•検出モードã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å®Ÿè¡Œã«ä½¿ç”¨ã•れる Python インタープリターã¸ã®ãƒ‘ス。サãƒãƒ¼ãƒˆã•れã¦ã„る検出モードã¯ã€``auto``ã€``auto_silent``ã€ãŠã‚ˆã³ ``auto_legacy`` (デフォルト) ã§ã™ã€‚ã™ã¹ã¦ã®æ¤œå‡ºãƒ¢ãƒ¼ãƒ‰ã¯ã€å«ã¾ã‚Œã¦ã„るシステム㮠Python (å«ã‚€ã“ã¨ãŒãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§) を使用ã™ã‚‹ãŸã‚ã«ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—テーブルを使用ã—ã€ãƒ—ラットフォーム固有ã®ãƒ‡ãƒ•ォルトãŒä½¿ç”¨ã§ããªã„å ´åˆã¯ã€ã‚ˆã知られ㟠Python インタープリターã®ä½ç½®ã®å›ºå®šã•れãŸé †åºãƒªã‚¹ãƒˆã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚フォールãƒãƒƒã‚¯å‹•作ã§ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを明示的ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨ã„ã†è­¦å‘ŠãŒå‡ºåŠ›ã•れã¾ã™ (後ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターãŒã€ä½¿ç”¨ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを変更ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‹ã‚‰ã§ã™)。ã“ã®è­¦å‘Šå‹•作を無効ã«ã™ã‚‹ã«ã¯ã€``auto_silent`` を設定ã—ã¾ã™ã€‚``auto_legacy`` ã®ãƒ‡ãƒ•ォルト値ã¯ã™ã¹ã¦åŒã˜å‹•作をæä¾›ã—ã¾ã™ãŒã€ä»¥å‰ã® Ansible リリースã¨ã®ä¸‹ä½äº’æ›æ€§ã®ãŸã‚ã«ã€å¸¸ã«ãƒ‡ãƒ•ォルト㧠``/usr/bin/python`` ã«è¨­å®šã•れã¦ã„ãŸå ´åˆã€å­˜åœ¨ã™ã‚‹å ´åˆã¯ãã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターを使用ã—ã¾ã™ (デフォルトã®å‹•作ãŒå°†æ¥ã® Ansible リリース㮠``auto`` ã®å‹•作ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’示ã™è­¦å‘Šã‚’表示ã—ã¾ã™)。" #~ msgid "Toggle to turn on inventory caching" #~ msgstr "インベントリーキャッシュを有効ã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #~ msgid "The plugin for caching inventory. If INVENTORY_CACHE_PLUGIN is not provided CACHE_PLUGIN can be used instead." #~ msgstr "インベントリーã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ç”¨ã®ãƒ—ラグイン。INVENTORY_CACHE_PLUGIN ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€CACHE_PLUGIN を代ã‚りã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #~ msgid "The inventory cache connection. If INVENTORY_CACHE_PLUGIN_CONNECTION is not provided CACHE_PLUGIN_CONNECTION can be used instead." #~ msgstr "インベントリーキャッシュ接続。INVENTORY_CACHE_PLUGIN_CONNECTION ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ä»£ã‚り㫠CACHE_PLUGIN_CONNECTION を使用ã§ãã¾ã™ã€‚" #~ msgid "The table prefix for the cache plugin. If INVENTORY_CACHE_PLUGIN_PREFIX is not provided CACHE_PLUGIN_PREFIX can be used instead." #~ msgstr "cache プラグインã®ãƒ†ãƒ¼ãƒ–ル接頭辞。INVENTORY_CACHE_PLUGIN_PREFIX ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ä»£ã‚り㫠CACHE_PLUGIN_PREFIX を使用ã§ãã¾ã™ã€‚" #~ msgid "Expiration timeout for the inventory cache plugin data. If INVENTORY_CACHE_TIMEOUT is not provided CACHE_TIMEOUT can be used instead." #~ msgstr "inventory cache ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãƒ‡ãƒ¼ã‚¿ã®æœ‰åŠ¹æœŸé™ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€‚INVENTORY_CACHE_TIMEOUT ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ä»£ã‚り㫠CACHE_TIMEOUT を使用ã§ãã¾ã™ã€‚" #~ msgid "30" #~ msgstr "30" #~ msgid "With this setting on (True), running conditional evaluation 'var' is treated differently than 'var.subkey' as the first is evaluated directly while the second goes through the Jinja2 parser. But 'false' strings in 'var' get evaluated as booleans.With this setting off they both evaluate the same but in cases in which 'var' was 'false' (a string) it won't get evaluated as a boolean anymore.Currently this setting defaults to 'True' but will soon change to 'False' and the setting itself will be removed in the future.Expect that this setting eventually will be deprecated after 2.12" #~ msgstr "ã“ã®è¨­å®šã‚’ (True) ã«ã™ã‚‹ã¨ã€æ¡ä»¶ä»˜ã評価「varã€ã®å®Ÿè¡Œã¯ã€Œvar.subkeyã€ã¨ã¯ç•°ãªã‚‹æ–¹æ³•ã§å‡¦ç†ã•れã¾ã™ã€‚最åˆã®è©•価ã¯ç›´æŽ¥è©•価ã•れã€2 番目ã®è©•価㯠Jinja2 パーサーを通éŽã™ã‚‹ãŸã‚ã§ã™ã€‚ãŸã ã—ã€ã€Œvarã€ã®ã€Œfalseã€æ–‡å­—列ã¯ãƒ–ール値ã¨ã—ã¦è©•価ã•れã¾ã™ã€‚ã“ã®è¨­å®šã‚’オフã«ã™ã‚‹ã¨ã€ã©ã¡ã‚‰ã‚‚åŒã˜ã‚ˆã†ã«è©•価ã•れã¾ã™ãŒã€ã€Œvarã€ãŒã€Œfalseã€(文字列) ã®å ´åˆã¯ã€ãƒ–ール値ã¨ã—ã¦è©•価ã•れãªããªã‚Šã¾ã™ã€‚ç¾åœ¨ã€ã“ã®è¨­å®šã®ãƒ‡ãƒ•ォルトã¯ã€ŒTrueã€ã§ã™ãŒã€ã¾ã‚‚ãªã「Falseã€ã«å¤‰æ›´ã•れã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§è¨­å®šè‡ªä½“ãŒå‰Šé™¤ã•れã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€2.12 以é™ã§æœ€çµ‚çš„ã«éžæŽ¨å¥¨ã«ãªã‚‹ã¨äºˆæƒ³ã•れã¾ã™ã€‚" #~ msgid "See also :ref:`CONDITIONAL_BARE_VARS `" #~ msgstr "「:ref:`CONDITIONAL_BARE_VARS `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "See also :ref:`CONTROLLER_PYTHON_WARNING `" #~ msgstr "「:ref:`CONTROLLER_PYTHON_WARNING `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "See also :ref:`DEFAULT_HANDLER_INCLUDES_STATIC `" #~ msgstr "「:ref:`DEFAULT_HANDLER_INCLUDES_STATIC `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "See also :ref:`DEFAULT_TASK_INCLUDES_STATIC `" #~ msgstr "「:ref:`DEFAULT_TASK_INCLUDES_STATIC `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "See also :ref:`CONNECTION_FACTS_MODULES `" #~ msgstr "「:ref:`CONNECTION_FACTS_MODULES `ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Yes! Ansible, Inc makes a great product that makes Ansible even more powerful and easy to use. See :ref:`ansible_tower`." #~ msgstr "Ansible, Inc ã¯ã€Ansible ãŒã‚ˆã‚Šå¼·åŠ›ã§ä½¿ã„ã‚„ã™ããªã‚‹ã‚ˆã†ã«ã€å„ªã‚ŒãŸè£½å“ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚「:ref:`ansible_tower`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "Please see the section below for a link to IRC and the Google Group, where you can ask your question there." #~ msgstr "以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã€IRC ãŠã‚ˆã³ Google グループã¸ã®ãƒªãƒ³ã‚¯ãŒã‚りã¾ã™ã€‚ã“ã¡ã‚‰ã‹ã‚‰ã€è³ªå•ã‚’ã—ã¦ãã ã•ã„。" #~ msgid "New for 2.10. The installable package (RPM/Python/Deb package) generated from the `ansible/ansible repository `_. Contains the command-line tools and the code for basic features and functions, such as copying module code to managed nodes. The ``ansible-base`` package includes a few modules and plugins and allows you to add others by installing collections." #~ msgstr "2.10 ã®æ–°æ©Ÿèƒ½ã€‚`ansible/ansible リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã‹ã‚‰ç”Ÿæˆã•れるインストールå¯èƒ½ãªãƒ‘ッケージ (RPM/Python/Deb パッケージ)。コマンドラインツールã¨ã€åŸºæœ¬çš„ãªæ©Ÿèƒ½ã¨é–¢æ•° (モジュールコードã®ç®¡ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã¸ã®ã‚³ãƒ”ーãªã©) ã®ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``ansible-base`` パッケージã«ã¯ã„ãã¤ã‹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ—ラグインãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ã§ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加ã§ãã¾ã™ã€‚" #~ msgid "Handlers are just like regular tasks in an Ansible :term:`playbook ` (see :term:`Tasks`) but are only run if the Task contains a ``notify`` directive and also indicates that it changed something. For example, if a config file is changed, then the task referencing the config file templating operation may notify a service restart handler. This means services can be bounced only if they need to be restarted. Handlers can be used for things other than service restarts, but service restarts are the most common usage." #~ msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ Ansible :term:`playbook ` ã®é€šå¸¸ã®ã‚¿ã‚¹ã‚¯ã®ã‚ˆã†ãªæ©Ÿèƒ½ã‚’æŒã¡ã¾ã™(「:term:`タスク`ã€ã‚’å‚ç…§) ãŒã€ã‚¿ã‚¹ã‚¯ã« ``notify`` ディレクティブãŒã‚りã€å¤‰æ›´ãŒã‚ã£ãŸã“ã¨ãŒç¤ºå”†ã•れる場åˆã«ã®ã¿å®Ÿè¡Œã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€è¨­å®šãƒ•ァイルãŒå¤‰æ›´ã•れãŸå¾Œã«ã€è¨­å®šãƒ•ァイルをå‚ç…§ã™ã‚‹ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆä½œæˆæ“作ã®ã‚¿ã‚¹ã‚¯ã¯ã€ã‚µãƒ¼ãƒ“スå†èµ·å‹•ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«é€šçŸ¥ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ã‚µãƒ¼ãƒ“スãŒå†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã®ã¿ãƒã‚¦ãƒ³ã‚¹ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã‚µãƒ¼ãƒ“スã®å†èµ·å‹•以外ã®ã‚¿ã‚¹ã‚¯ã«ä½¿ç”¨ã§ãã¾ã™ãŒã€ã‚µãƒ¼ãƒ“スã®å†èµ·å‹•ãŒæœ€ã‚‚一般的ãªä½¿ç”¨ä¾‹ã«ãªã‚Šã¾ã™ã€‚" #~ msgid "A local_action directive in a :term:`playbook ` targeting remote machines means that the given step will actually occur on the local machine, but that the variable ``{{ ansible_hostname }}`` can be passed in to reference the remote hostname being referred to in that step. This can be used to trigger, for example, an rsync operation." #~ msgstr "リモートマシンを対象ã¨ã—㟠:term:`playbook ` ã® local_action ディレクティブã¯ã€æŒ‡å®šã—ãŸæ‰‹é †ãŒå®Ÿéš›ã«ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ä¸Šã§å®Ÿè¡Œã•れるãŒã€ãã®ã‚¹ãƒ†ãƒƒãƒ—ã§å‚ç…§ã•れるリモートホストåã‚’å‚ç…§ã™ã‚‹ãŸã‚ã«å¤‰æ•° ``{{ ansible_hostname }}`` を渡ã™ã“ã¨ãŒã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“れを利用ã—ã¦ã€ãŸã¨ãˆã° rsync ã®æ“作を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "By using ``connection: local`` in a :term:`playbook `, or passing ``-c local`` to :command:`/usr/bin/ansible`, this indicates that we are managing the local host and not a remote machine." #~ msgstr ":term:`playbook ` ã§ ``connection: local`` を使用ã™ã‚‹ã‹ã€``-c local`` ã‚’ :command:`/usr/bin/ansible` ã«æ¸¡ã—ãŸå ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã§ã¯ãªãローカルホストを管ç†ã—ã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #~ msgid "To save Ansible output to a secure database, use :ref:`Ansible Tower `. Tower allows you to review history based on hosts, projects, and particular inventories over time, using graphs and/or a REST API." #~ msgstr "Ansible ã®å‡ºåŠ›ã‚’å®‰å…¨ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å­˜ã™ã‚‹ã«ã¯ã€:ref:`Ansible Tower ` を使用ã—ã¾ã™ã€‚Tower を使用ã™ã‚‹ã¨ã€ã‚°ãƒ©ãƒ•ã‚„ REST API を使用ã—ã¦ã€ãƒ›ã‚¹ãƒˆã€ãƒ—ロジェクトã€ãŠã‚ˆã³ç‰¹å®šã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«åŸºã¥ã„ã¦å±¥æ­´ã‚’確èªã§ãã¾ã™ã€‚" #~ msgid ":ref:`rolling_update_batch_size`" #~ msgstr ":ref:`rolling_update_batch_size`" #~ msgid ":ref:`loop_control`" #~ msgstr ":ref:`loop_control`" #~ msgid "This section describes the Ansible and ``ansible-core`` releases. Ansible is the package that most users install. ``ansible-core`` is primarily for developers." #~ msgstr "本セクションã§ã¯ã€Ansible ãŠã‚ˆã³ ``ansible-core`` リリースを説明ã—ã¾ã™ã€‚Ansible ã¯ã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ãƒ‘ッケージã§ã™ã€‚``ansible-core`` ã¯ä¸»ã«é–‹ç™ºè€…å‘ã‘ã®ã‚‚ã®ã§ã™ã€‚" #~ msgid "Ansible is developed and released on a flexible release cycle. This cycle can be extended in order to allow for larger changes to be properly implemented and tested before a new release is made available. See :ref:`roadmaps` for upcoming release details." #~ msgstr "Ansibleã¯ã€æŸ”軟ãªãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§é–‹ç™ºãŠã‚ˆã³ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã™ã€‚ã“ã®ã‚µã‚¤ã‚¯ãƒ«ã¯ã€å¤§è¦æ¨¡ãªå¤‰æ›´ã‚’æ­£ã—ã実装ã—ã¦ã€ãƒ†ã‚¹ãƒˆã—ã¦ã‹ã‚‰æ–°ã—ã„リリースãŒå…¬é–‹ã•れるよã†ã«ã€å»¶é•·ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚今後ã®ãƒªãƒªãƒ¼ã‚¹ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`roadmaps`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "For Ansible version 2.10 or later, the major release is maintained for one release cycle. When the next release comes out (for example, 2.11), the older release (2.10 in this example) is no longer maintained." #~ msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 以é™ã§ã¯ã€ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯ 1 ã¤ã®ãƒªãƒªãƒ¼ã‚¹ã‚µã‚¤ã‚¯ãƒ«ã§ç¶­æŒã•れã¾ã™ã€‚次ã®ãƒªãƒªãƒ¼ã‚¹ãŒãªããªã‚‹ã¨ (ã“ã®ä¾‹ã§ã¯ 2.11)ã€å¤ã„リリース (ã“ã®ä¾‹ã§ã¯ 2.10) ã¯ç¶­æŒã•れãªããªã‚Šã¾ã™ã€‚" #~ msgid "If you are using a release of Ansible that is no longer maintained, we strongly encourage you to upgrade as soon as possible in order to benefit from the latest features and security fixes." #~ msgstr "メンテナンスã•れã¦ã„ãªã„ Ansible ã®ãƒªãƒªãƒ¼ã‚¹ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€æœ€æ–°ã®æ©Ÿèƒ½ã‚„セキュリティー修正ã‹ã‚‰ã®æ©æµã‚’å—ã‘られるよã†ã«ã§ãã‚‹ã ã‘æ—©ãアップグレードã™ã‚‹ã“ã¨ã‚’å¼·ãæŽ¨å¥¨ã—ã¾ã™ã€‚" #~ msgid "Older, unmaintained versions of Ansible can contain unfixed security vulnerabilities (*CVE*)." #~ msgstr "メンテナンスã®ãªã„ã€ä»¥å‰ã® Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€æœªä¿®æ­£ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®è„†å¼±æ€§ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ (*CVE*)。" #~ msgid "Ansible Release" #~ msgstr "Ansible リリース" #~ msgid "In development (2.10 alpha/beta)" #~ msgstr "開発 (2.10 アルファ/ベータ)" #~ msgid "If you are using a release of ``ansible-core`` that is no longer maintained, we strongly encourage you to upgrade as soon as possible in order to benefit from the latest features and security fixes." #~ msgstr "メンテナンスã•れãªããªã£ãŸ ``ansible-core`` ã®ãƒªãƒªãƒ¼ã‚¹ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€æœ€æ–°ã®æ©Ÿèƒ½ã‚„セキュリティー修正ã‹ã‚‰ã®æ©æµã‚’å—ã‘られるよã†ã«ã§ãã‚‹ã ã‘æ—©ãアップグレードã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #~ msgid "Older, unmaintained versions of ``ansible-core`` can contain unfixed security vulnerabilities (*CVE*)." #~ msgstr "メンテナンスã•れã¦ã„ãªã„ã€ä»¥å‰ã® ``ansible-core`` ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€æœªä¿®æ­£ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®è„†å¼±æ€§ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ (*CVE*)。" #~ msgid "Collection updates (new modules, plugins, features and bugfixes) will always be integrated in what will become the next version of Ansible. This work is tracked within the individual collection repositories." #~ msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ›´æ–° (æ–°ã—ã„モジュールã€ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã€æ©Ÿèƒ½ã€ãƒã‚°ä¿®æ­£) ã¯å¸¸ã«ã€Ansible ã®æ¬¡ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«çµ±åˆã•れã¾ã™ã€‚ã“ã®ä½œæ¥­ã¯ã€å€‹ã€…ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼å†…ã§è¿½è·¡ã•れã¾ã™ã€‚" #~ msgid "Ansible and ``ansible-core`` provide bugfixes and security improvements for the most recent major release. The previous major release of ``ansible-core`` will only receive fixes for security issues and critical bugs. ``ansible-core`` only applies security fixes to releases which are two releases old. This work is tracked on the ``stable-`` git branches." #~ msgstr "Ansible 㨠``ansible-core`` ã¯ã€æœ€æ–°ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã™ã‚‹ãƒã‚°ä¿®æ­£ãŠã‚ˆã³ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã®æ”¹å–„ã‚’æä¾›ã—ã¾ã™ã€‚``ansible-core`` ã® 1 ã¤å‰ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼å•題やé‡è¦ãªãƒã‚°ã®ä¿®æ­£ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚``ansible-core`` ã§ã¯ã€2 リリースå‰ã®ãƒªãƒªãƒ¼ã‚¹ã«å¯¾ã—ã¦ã®ã¿ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¿®æ­£ãŒé©ç”¨ã•れã¾ã™ã€‚ã“ã®ä½œæ¥­ã¯ ``stable-`` ã® git ブランãƒã§è¿½è·¡ã•れã¦ã„ã¾ã™ã€‚" #~ msgid "The fixes that land in maintained stable branches will eventually be released as a new version when necessary." #~ msgstr "ç¶­æŒã•れる安定版ã®ãƒ–ランãƒã«ä¿å­˜ã•れãŸä¿®æ­£ã¯ã€æœ€çµ‚çš„ã«ã€å¿…è¦ã«å¿œã˜ã¦æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ã—ã¦ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã™ã€‚" #~ msgid "We generate changelogs based on fragments. Here is the generated changelog for 2.9_ as an example. When creating new features or fixing bugs, create a changelog fragment describing the change. A changelog entry is not needed for new modules or plugins. Details for those items will be generated from the module documentation." #~ msgstr "変更ログã¯ã€ãƒ•ラグメントã«åŸºã¥ã„ã¦ç”Ÿæˆã•れã¾ã™ã€‚ã“ã“ã«ä¾‹ã¨ã—㦠2.9_ ã®ç”Ÿæˆã•れãŸå¤‰æ›´ãƒ­ã‚°ãŒã‚りã¾ã™ã€‚æ–°ã—ã„æ©Ÿèƒ½ã‚’作æˆã—ãŸã‚Šã€ãƒã‚°ã‚’修正ã—ãŸã‚Šã™ã‚‹ã¨ãã¯ã€å¤‰æ›´ç‚¹ã‚’記述ã—ãŸå¤‰æ›´ãƒ­ã‚°ãƒ•ラグメントを作æˆã—ã¾ã™ã€‚変更ログã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ã€æ–°ã—ã„モジュールやプラグインã«ã¯å¿…è¦ã‚りã¾ã›ã‚“。ãれらã®é …ç›®ã®è©³ç´°ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‹ã‚‰ç”Ÿæˆã•れã¾ã™ã€‚" #~ msgid "We've got :ref:`examples and instructions on creating changelog fragments ` in the Community Guide." #~ msgstr "コミュニティーガイド㮠:ref:`changelog フラグメントã®ä½œæˆä¾‹ãŠã‚ˆã³æŒ‡ç¤º ` ã«ã‚りã¾ã™ã€‚" #~ msgid "Before a new release or version of Ansible or ``ansible-core`` can be done, it will typically go through a release candidate process." #~ msgstr "Ansible ã¾ãŸã¯ ``ansible-core`` ã®æ–°è¦ãƒªãƒªãƒ¼ã‚¹ã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ã€é€šå¸¸ã¯ãƒªãƒªãƒ¼ã‚¹å€™è£œã®ãƒ—ロセスを行ã„ã¾ã™ã€‚" #~ msgid "This provides the Ansible community the opportunity to test these releases and report bugs or issues they might come across." #~ msgstr "ã“ã®ãƒ—ロセスã§ã¯ã€Ansible コミュニティーã¯ã€ã“れらã®ãƒªãƒªãƒ¼ã‚¹ã‚’テストã—ã¦ã€ä»Šå¾Œç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ãƒã‚°ã‚„修正を報告ã™ã‚‹æ©Ÿä¼šãŒã‚りã¾ã™ã€‚" #~ msgid "If there are major problems with the first candidate, a second candidate will be tagged (``RC2``) once the necessary fixes have landed. This second candidate lasts for a shorter duration than the first. If no problems have been reported after two business days, the final release is done." #~ msgstr "最åˆã®å€™è£œã«å¤§ããªå•題ãŒã‚ã‚‹å ´åˆã¯ã€å¿…è¦ãªä¿®æ­£ãŒãƒ—ッシュã•ã‚ŒãŸæ™‚点ã§ã€2 番目ã®å€™è£œã®ã‚¿ã‚° (``RC2``) ãŒä»˜ã‘られã¾ã™ã€‚2 番目ã®å€™è£œã¯ã€1 番目よりも期間ã¯çŸ­ããªã‚Šã¾ã™ã€‚2 営業日ãŒçµŒéŽã—ã¦å•題ãŒå ±å‘Šã•れãªã„å ´åˆã¯ã€æœ€çµ‚çš„ãªãƒªãƒªãƒ¼ã‚¹ã¨ãªã‚Šã¾ã™ã€‚" #~ msgid "More release candidates can be tagged as required, so long as there are bugs that the Ansible or ``ansible-core`` core maintainers consider should be fixed before the final release." #~ msgstr "Ansible ã¾ãŸã¯ ``ansible-core`` ã®ä¸­å¿ƒã¨ãªã‚‹ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ãŒæœ€çµ‚リリースå‰ã«ä¿®æ­£ãŒå¿…è¦ã¨ã¿ãªã—ãŸãƒã‚°ãŒã‚ã‚‹å ´åˆã¯ã€å¿…è¦ã«å¿œã˜ã¦è¿½åŠ ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œã‚¿ã‚°ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "While there is a pending release candidate, the focus of core developers and maintainers will on fixes towards the release candidate." #~ msgstr "ä¿ç•™ä¸­ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œãŒã‚ã‚‹å ´åˆã¯ã€ä¸­å¿ƒã¨ãªã‚‹é–‹ç™ºè€…やメンテナーã¯ã€ãƒªãƒªãƒ¼ã‚¹å€™è£œã«å‘ã‘ãŸä¿®æ­£ã«ç„¦ç‚¹ã‚’当ã¦ã¾ã™ã€‚" #~ msgid "Ansible deprecation cycle" #~ msgstr "Ansible éžæŽ¨å¥¨ã‚µã‚¤ã‚¯ãƒ«" #~ msgid "For modules/plugins, we keep the documentation after the removal for users of older versions." #~ msgstr "モジュール/プラグインã«ã¤ã„ã¦ã¯ã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ã”åˆ©ç”¨ã®æ–¹ã®ãŸã‚ã«ã€å‰Šé™¤å¾Œã‚‚ドキュメントã¯ä¿æŒã—ã¾ã™ã€‚" #~ msgid "By incorporating a degree of testing into your deployment workflow, there will be fewer surprises when code hits production and, in many cases, tests can be leveraged in production to prevent failed updates from migrating across an entire installation. Since it's push-based, it's also very easy to run the steps on the localhost or testing servers. Ansible lets you insert as many checks and balances into your upgrade workflow as you would like to have." #~ msgstr "開発ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローã«ãƒ†ã‚¹ãƒˆã‚’ã‚る程度組ã¿è¾¼ã‚€ã“ã¨ã§ã€å®Ÿç¨¼åƒç’°å¢ƒã§ã‚³ãƒ¼ãƒ‰ã‚’使用時ã«ã€æ…Œã¦ã‚‹ã“ã¨ãŒå°‘ãªããªã‚Šã¾ã™ã€‚多ãã®å ´åˆã¯ã€å®Ÿç¨¼åƒç’°å¢ƒã§ãƒ†ã‚¹ãƒˆã‚’活用ã—ã¦ã€æ›´æ–°ã®å¤±æ•—ãŒã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å…¨ä½“ã«ç§»è¡Œã•れã¦ã—ã¾ã†ã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ—ッシュベースã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‚„テストサーãƒãƒ¼ã§æ‰‹é †ã‚’éžå¸¸ã«ç°¡å˜ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€å¤šãã®ãƒã‚§ãƒƒã‚¯ã‚’挿入ã§ãã‚‹ãŸã‚ã€ã‚¢ãƒƒãƒ—グレードã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローを希望ã®ãƒ¬ãƒ™ãƒ«ã«èª¿ç¯€ã§ãã¾ã™ã€‚" #~ msgid "Red Hat Ansible Tower" #~ msgstr "Red Hat Ansible Tower" #~ msgid "`Red Hat Ansible Tower `_ is a web console and REST API for operationalizing Ansible across your team, organization, and enterprise. It's designed to be the hub for all of your automation tasks." #~ msgstr "`Red Hat Ansible Tower `_ ã¯ã€ãƒãƒ¼ãƒ ã€çµ„ç¹”ã€ä¼æ¥­å…¨ä½“ã§ Ansible ã‚’æ“作ã™ã‚‹ Web コンソールãŠã‚ˆã³ REST API ã§ã™ã€‚Red Hat Ansible Tower ã¯ã€ã™ã¹ã¦ã®è‡ªå‹•化タスクã®ãƒãƒ–ã¨ãªã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚" #~ msgid "Ansible Tower gives you role-based access control, including control over the use of securely stored credentials for SSH and other services. You can sync your Ansible Tower inventory with a wide variety of cloud sources, and powerful multi-playbook workflows allow you to model complex processes." #~ msgstr "Ansible Tower ã«ã¯ã€ã‚»ã‚­ãƒ¥ã‚¢ã«ä¿å­˜ã•れã¦ã„ã‚‹ SSH ã‚„ä»–ã®ã‚µãƒ¼ãƒ“スã®èªè¨¼æƒ…å ±ã®ä½¿ç”¨æ™‚ã«åˆ¶å¾¡ã™ã‚‹ãªã©ã€ãƒ­ãƒ¼ãƒ«ãƒ™ãƒ¼ã‚¹ã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Ansible Tower インベントリーã¯ã€å¹…広ã„クラウドソースã¨åŒæœŸã§ãã€å¼·åŠ›ãª Playbook ワークフローを複数使用ã™ã‚‹ã“ã¨ã§ã€è¤‡é›‘ãªãƒ—ロセスをモデル化ã§ãã¾ã™ã€‚" #~ msgid "Ansible Tower is the downstream Red-Hat supported product version of Ansible AWX. Find out more about Ansible Tower features and how to download it on the `Ansible Tower webpage `_. Ansible Tower is part of the Red Hat Ansible Automation subscription, and comes bundled with amazing support from Red Hat, Inc." #~ msgstr "Ansible Tower ã¯ã€Red Hat ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ Ansible AWX ã®è£½å“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (ダウンストリーム) ã§ã™ã€‚Ansible Tower ã®æ©Ÿèƒ½ã¨ãã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰æ–¹æ³•ã®è©³ç´°ã¯ã€`Ansible Tower web ページ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible Tower ã¯ã€Red Hat Ansible Automation サブスクリプションã«å«ã¾ã‚Œã€Red Hat, Inc ã®ã‚µãƒãƒ¼ãƒˆãŒåˆ©ç”¨ã§ãã¾ã™ã€‚" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.490556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/roadmap.po0000644000000000000000000031014100000000000025054 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:3 msgid "Ansible project 2.10" msgstr "Ansible プロジェクト 2.10" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:5 msgid "This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-base `_ package as well. All dates are subject to change. See :ref:`base_roadmap_2_10` for the most recent updates on ansible-base." msgstr "本リリーススケジュールã«ã¯ã€`ansible `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€`ansible-base `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ã‚‚ã„ãã¤ã‹å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æ—¥ä»˜ã¯ã™ã¹ã¦å¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ansible-base ã®æœ€æ–°ã®æ›´æ–°ã«ã¤ã„ã¦ã¯ã€Œ:ref:`base_roadmap_2_10`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:11 #: ../../rst/roadmap/ROADMAP_2_10.rst:11 ../../rst/roadmap/ROADMAP_2_11.rst:11 #: ../../rst/roadmap/ROADMAP_2_12.rst:11 ../../rst/roadmap/ROADMAP_2_6.rst:8 #: ../../rst/roadmap/ROADMAP_2_7.rst:8 ../../rst/roadmap/ROADMAP_2_8.rst:9 #: ../../rst/roadmap/ROADMAP_2_9.rst:9 msgid "Release Schedule" msgstr "リリーススケジュール" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:13 #: ../../rst/roadmap/ROADMAP_2_10.rst:19 ../../rst/roadmap/ROADMAP_2_11.rst:19 #: ../../rst/roadmap/ROADMAP_2_12.rst:19 msgid "Dates subject to change." msgstr "日付ã¯å¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:14 msgid "We plan to post weekly alpha releases to the `PyPI ansible project `_ for testing." msgstr "テストã®ãŸã‚ã€`PyPI ansible プロジェクト `_ ã« Alpha リリースを毎週公開ã™ã‚‹ã“ã¨ãŒäºˆå®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:17 msgid "We initially were going to have feature freeze on 2020-08-18. We tried this but decided to change course. Instead, we'll enter feature freeze when ansible-2.10.0 beta1 is released." msgstr "当åˆã¯ 2020 å¹´ 08 月 18 æ—¥ã«æ©Ÿèƒ½ãƒ•リーズãŒè¡Œã‚れる予定ã§ã—ãŸã€‚フリーズを試ã¿ã¾ã—ãŸãŒã€äºˆå®šãŒå¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚りã«ã€ansible-2.10.0 Beta1 ãŒãƒªãƒªãƒ¼ã‚¹ã•れãŸã¨ãã«æ©Ÿèƒ½ãƒ•リーズã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:20 msgid "2020-06-23: ansible-2.10 alpha freeze. No net new collections will be added to the ``ansible-2.10`` package after this date." msgstr "2020 å¹´ 06 月 23 æ—¥: ansible-2.10 Alpha フリーズ。ã“ã®æ—¥ä»˜ã‚’éŽãŽã‚‹ã¨ã€æ–°ã—ã„コレクション㌠``ansible-2.10`` パッケージã«è¿½åŠ ã•れãªããªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:22 msgid "2020-07-10: Ansible collections freeze date for content shuffling. Content should be in its final collection for the ansible-2.10 series of releases. No more content should move out of the ``community.general`` or ``community.network`` collections." msgstr "2020 å¹´ 07 月 10 æ—¥: コンテンツ入れ替ãˆã® Ansible コレクション。コンテンツã¯ã€ansible-2.10 シリーズã®ãƒªãƒªãƒ¼ã‚¹ã®æœ€çµ‚コレクションã«ã‚ã‚‹ã¯ãšã§ã™ã€‚ä»–ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㯠``community.general`` コレクションã¾ãŸã¯ ``community.network`` コレクションã«å«ã¾ã‚Œã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ä»–ã«ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:24 msgid "2020-08-13: ansible-base 2.10 Release date, see :ref:`base_roadmap_2_10`." msgstr "2020 å¹´ 08 月 13 æ—¥: ansible-base 2.10 リリース日。「:ref:`base_roadmap_2_10`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:25 msgid "2020-08-14: final ansible-2.10 alpha." msgstr "2020 å¹´ 08 月 14 æ—¥: 最終的㪠ansible-2.10 Alpha。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:26 msgid "2020-09-01: ansible-2.10.0 beta1 and feature freeze." msgstr "2020 å¹´ 09 月 01 æ—¥: ansible-2.10.0 Beta1 ãŠã‚ˆã³æ©Ÿèƒ½ãƒ•リーズ。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:28 msgid "No new modules or major features will be added after this date. In practice this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-1.1.0; ansible-2.10.0 could ship with community-crypto-1.1.1. It would not ship with community-crypto-1.2.0." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€æ–°ã—ã„ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ä¸»ãªæ©Ÿèƒ½ã¯è¿½åŠ ã•れã¾ã›ã‚“。実際ã«ã¯ã€semver コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯äº’æ›æ€§ã®ã‚るリリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ•リーズã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®æ—¥ä»˜ã® community.crypto ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ community-crypto-1.1.0 ã§ã‚れã°ã€ansible-2.10.0 㯠community-crypto-1.1.1 ã«åŒæ¢±ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã—ãŸã€‚community-crypto-1.2.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:30 msgid "2020-09-08: ansible-2.10.0 beta2." msgstr "2020 å¹´ 09 月 08 æ—¥: Ansible-2.10.0 beta2。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:31 msgid "2020-09-15: ansible-2.10.0 rc1 and final freeze." msgstr "2020 å¹´ 09 月 15 æ—¥: Ansible-2.10.0 rc1 ãŠã‚ˆã³æœ€çµ‚フリーズ。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:33 msgid "After this date only changes blocking a release are accepted." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã‚’ブロックã™ã‚‹å¤‰æ›´ã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:34 msgid "Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at the community meeting (on 9-17) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_." msgstr "コレクションã¯ã€ãƒ–ãƒ­ãƒƒã‚«ãƒ¼ãŒæ‰¿èªã•れãŸå ´åˆã«ã®ã¿æ–°è¦ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã•れã¾ã™ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€ä¿®æ­£ã®ãŸã‚ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上ã’ã‚‹ã‹ã©ã†ã‹ã‚’決ã‚ã‚‹ãŸã‚ã«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ãƒ–ロッカーã«ã¤ã„㦠(9 ~ 17 上) è­°è«–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`Community meeting agenda `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:36 msgid "** Additional release candidates to be published as needed as blockers are fixed **" msgstr "**ブロッカーãŒä¿®æ­£ã•れるã¨ã€å¿…è¦ã«å¿œã˜ã¦å…¬é–‹ã•れる追加ã®ãƒªãƒªãƒ¼ã‚¹å€™è£œ**" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:38 msgid "2020-09-22: ansible-2.10 GA release date." msgstr "2020 å¹´ 09 月 22 æ—¥: Ansible-2.10 GA リリース日。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:40 msgid "Ansible-2.10.x patch releases will occur roughly every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-base-2.10.x. Ansible-2.10.x patch releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed (example: Ansible-2.10 ships with community-crypto-1.1.0; ansible-2.10.1 may ship with community-crypto-1.2.0 but would not ship with community-crypto-2.0.0)." msgstr "コレクションã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸå ´åˆã€ã¾ãŸã¯å¾Œã§ ansible-base-2.10.x ã¸ã®ã‚¢ãƒƒãƒ—グレードを強制ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨è¦‹ãªã•れãŸå ´åˆã€Ansible-2.10.x パッãƒã®ãƒªãƒªãƒ¼ã‚¹ã¯ç´„ 3 週間ã”ã¨ã«è¡Œã‚れã¾ã™ã€‚Ansible-2.10.x パッãƒãƒªãƒªãƒ¼ã‚¹ã«ã¯æ–°æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€å¾Œæ–¹äº’æ›æ€§ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。実際ã«ã¯ã€ã“れã¯ã€ãƒ‘ッãƒã¾ãŸã¯ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã®ã„ãšã‚Œã‹ãŒå¤‰æ›´ã•れãŸã«ã‚‚ã‹ã‹ã‚らãšã€ãƒ¡ã‚¸ãƒ£ãƒ¼ç•ªå·ãŒå¤‰æ›´ã•れãŸã¨ãã¯å¤‰æ›´ã•れãªã„æ–°ã—ã„コレクションãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible-2.10 ㌠community-crypto-1.1.0 ã«åŒæ¢±ã•れるã¨ã€ansible-2.10.1 㯠community-crypto-1.2.0 ã«åŒæ¢±ã•れる場åˆãŒã‚りã¾ã™ãŒã€community-crypto-2.0.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:45 msgid "Minor releases will stop when :ref:`Ansible-3 ` is released. See the :ref:`Release and Maintenance Page ` for more information." msgstr ":ref:`Ansible-3 ` ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯åœæ­¢ã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`リリースãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãƒšãƒ¼ã‚¸ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:48 msgid "Breaking changes may be introduced in ansible-3.0 although we encourage collection owners to use deprecation periods that will show up in at least one Ansible release before being changed incompatibly." msgstr "ansible-3.0 ã§é‡å¤§ãªå¤‰æ›´ãŒå°Žå…¥ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€éžäº’æ›æ€§ã«ãªã‚‹å‰ã«å°‘ãªãã¨ã‚‚ 1 ã¤ã® Ansible リリースã«å«ã¾ã‚Œã‚‹éžæŽ¨å¥¨æœŸé–“を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_2_10.rst:51 #: ../../rst/roadmap/COLLECTIONS_3_0.rst:52 #: ../../rst/roadmap/COLLECTIONS_4.rst:55 #: ../../rst/roadmap/COLLECTIONS_5.rst:58 msgid "For more information, reach out on a mailing list or a chat channel - see :ref:`communication` for more details." msgstr "詳細ã¯ã€ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¾ãŸã¯ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’ã”利用ãã ã•ã„。「:ref:`communication`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:5 msgid "Ansible project 3.0" msgstr "Ansible プロジェクト 3.0" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:7 msgid "This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-base `_ package as well. All dates are subject to change. Ansible 3.x.x includes ``ansible-base`` 2.10. See :ref:`base_roadmap_2_10` for the most recent updates on ``ansible-base``." msgstr "本リリーススケジュールã«ã¯ã€`ansible `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€`ansible-base `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ã‚‚ã„ãã¤ã‹å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æ—¥ä»˜ã¯ã™ã¹ã¦å¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Ansible 3.x.x ã«ã¯ ``ansible-base`` 2.10 ãŒå«ã¾ã‚Œã¾ã™ã€‚``ansible-base`` ã®æœ€æ–°ã®æ›´æ–°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`base_roadmap_2_10`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:13 #: ../../rst/roadmap/COLLECTIONS_4.rst:14 #: ../../rst/roadmap/COLLECTIONS_5.rst:14 msgid "Release schedule" msgstr "リリーススケジュール" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:17 msgid "Ansible is switching from its traditional versioning scheme to `semantic versioning `_ starting with this release. So this version is 3.0.0 instead of 2.11.0." msgstr "Ansible ã¯ã€æœ¬ãƒªãƒªãƒ¼ã‚¹ä»¥é™ã®å¾“æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚¹ã‚­ãƒ¼ãƒ ã‹ã‚‰ `semantic versioning `_ ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ãŸã‚ã€ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ 2.11.0 ã§ã¯ãªã 3.0.0 ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2020-12-16" msgstr "2020 å¹´ 12 月 16 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:21 msgid "Finalize rules for net-new collections submitted for the ansible release." msgstr "Ansible リリースã«é€ä¿¡ã•れ㟠net-new コレクションã®ãƒ«ãƒ¼ãƒ«ã®ãƒ•ァイナライズ。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2021-01-27" msgstr "2021 å¹´ 01 月 27 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:22 msgid "Final day for new collections to be **reviewed and approved**. They MUST be submitted prior to this to give reviewers a chance to look them over and for collection owners to fix any problems." msgstr "æ–°ã—ã„コレクション㮠**レビューãŠã‚ˆã³æ‰¿èª** ã®æœ€çµ‚æ—¥ã€‚ãƒ¬ãƒ“ãƒ¥ãƒ¼æ‹…å½“è€…ãŒæ–°ã—ã„コレクションを確èªã—ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ãŒå•題を修正ã™ã‚‹æ©Ÿä¼šã‚’å¾—ã‚‹ãŸã‚ã«ã€ã“ã®æ—¥ä»˜ã¾ã§ã«æå‡ºã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2021-02-02" msgstr "2021 å¹´ 02 月 02 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:25 msgid "Ansible-3.0.0-beta1 -- feature freeze [1]_" msgstr "ansible-3.0.0-beta1 -- 機能フリーズ [1]_" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2021-02-09" msgstr "2021 å¹´ 02 月 09 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:26 msgid "Ansible-3.0.0-rc1 -- final freeze [2]_ [3]_" msgstr "Ansible-3.0.0-rc1 -- 最終フリーズ [2]_ [3]_" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2021-02-16" msgstr "2021 å¹´ 02 月 16 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:27 msgid "Release of Ansible-3.0.0" msgstr "Ansible-3.0.0 ã®ãƒªãƒªãƒ¼ã‚¹" #: ../../rst/roadmap/COLLECTIONS_3_0.rst msgid "2021-03-09" msgstr "2021 å¹´ 03 月 09 æ—¥" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:28 msgid "Release of Ansible-3.1.0 (bugfix + compatible features: every three weeks)" msgstr "Ansible-3.1.0 ã®ãƒªãƒªãƒ¼ã‚¹ (ãƒã‚°ä¿®æ­£ + äº’æ›æ€§ã®ã‚る機能: 3 週間ã”ã¨)" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:30 msgid "No new modules or major features accepted after this date. In practice this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-2.1.0; ansible-3.0.0 could ship with community-crypto-2.1.1. It would not ship with community-crypto-2.2.0." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€æ–°ã—ã„モジュールやメジャー機能ã¯è¿½åŠ ã•れã¾ã›ã‚“。実際ã«ã¯ã€semver コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯äº’æ›æ€§ã®ã‚るリリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ•リーズã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®æ—¥ä»˜ã® community.crypto ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ community-crypto-2.1.0 ã§ã‚れã°ã€ansible-3.0.0 㯠community-crypto-2.1.1 ã«åŒæ¢±ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã—ãŸã€‚community-crypto-2.2.0 ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:32 #: ../../rst/roadmap/COLLECTIONS_4.rst:35 #: ../../rst/roadmap/COLLECTIONS_5.rst:38 msgid "After this date only changes blocking a release are accepted. Accepted changes require creating a new rc and may slip the final release date." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€ãƒªãƒªãƒ¼ã‚¹ã‚’ブロックã™ã‚‹å¤‰æ›´ã®ã¿ãŒè¨±å¯ã•れã¾ã™ã€‚å—ã‘入れå¯èƒ½ãªå¤‰æ›´ã«ã¯ã€æ–°ã—ã„ rc を作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã€æœ€çµ‚リリース日ã¯å‡¦ç†ã•れãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:33 msgid "Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a community meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_." msgstr "コレクションã¯ã€ãƒ–ãƒ­ãƒƒã‚«ãƒ¼ãŒæ‰¿èªã•れãŸå ´åˆã«ã®ã¿æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã•れã¾ã™ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€(フリーズã®å‰ã«) 修正ã®ãŸã‚ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上ã’ã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ãƒ–ロッカーã«ã¤ã„ã¦æ¤œè¨Žã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`Community meeting agenda `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:38 msgid "Breaking changes may be introduced in Ansible 3.0.0, although we encourage collection owners to use deprecation periods that will show up in at least one Ansible release before the breaking change happens." msgstr "Ansible3.0.0 ã§é‡å¤§ãªå¤‰æ›´ãŒå°Žå…¥ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€é‡å¤§ãªå¤‰æ›´ãŒç™ºç”Ÿã™ã‚‹å‰ã«å°‘ãªãã¨ã‚‚ 1 ã¤ã® Ansible リリースã«å«ã¾ã‚Œã‚‹éžæŽ¨å¥¨æœŸé–“を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:42 #: ../../rst/roadmap/COLLECTIONS_4.rst:45 #: ../../rst/roadmap/COLLECTIONS_5.rst:48 msgid "Ansible minor releases" msgstr "Ansible マイナーリリース" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:44 msgid "Ansible 3.x.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-base-2.10.x. Ansible 3.x.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-3.0.0 ships with community-crypto-2.1.0; Ansible-3.1.0 may ship with community-crypto-2.2.0 but would not ship with community-crypto-3.0.0)." msgstr "コレクションã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸå ´åˆã€ã¾ãŸã¯å¾Œã§ ansible-base-2.10.x ã¸ã®ã‚¢ãƒƒãƒ—グレードを強制ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨è¦‹ãªã•れãŸå ´åˆã€Ansible 3.x.x マイナーリリースã¯ç´„ 3 週間ã”ã¨ã«è¡Œã‚れã¾ã™ã€‚Ansible 3.x.x マイナーリリースã«ã¯æ–°æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€å¾Œæ–¹äº’æ›æ€§ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。実際ã«ã¯ã€ã“れã¯ã€ãƒ‘ッãƒã¾ãŸã¯ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã®ã„ãšã‚Œã‹ãŒå¤‰æ›´ã•れãŸã«ã‚‚ã‹ã‹ã‚らãšã€ãƒ¡ã‚¸ãƒ£ãƒ¼ç•ªå·ãŒå¤‰æ›´ã•れãŸã¨ãã«å¤‰æ›´ã•れãªã„æ–°ã—ã„コレクションãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible-3.0.0 ㌠community-crypto-2.1.0 ã«åŒæ¢±ã•れるã¨ã€Ansible-3.1.0 㯠community-crypto-2.2.0 ã«åŒæ¢±ã•れる場åˆãŒã‚りã¾ã™ãŒã€community-crypto-3.0.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:49 msgid "Minor releases will stop when :ref:`Ansible-4 ` is released. See the :ref:`Release and Maintenance Page ` for more information." msgstr ":ref:`Ansible-4 ` ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯åœæ­¢ã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`リリースãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãƒšãƒ¼ã‚¸ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:56 msgid "ansible-base release" msgstr "ansible-base リリース" #: ../../rst/roadmap/COLLECTIONS_3_0.rst:58 msgid "Ansible 3.x.x works with ``ansible-base`` 2.10. See :ref:`base_roadmap_2_10` for details." msgstr "Ansible 3.x.x 㯠``ansible-base`` 2.10 ã§å‹•作ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`base_roadmap_2_10`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_4.rst:5 msgid "Ansible project 4.0" msgstr "Ansible プロジェクト 4.0" #: ../../rst/roadmap/COLLECTIONS_4.rst:7 msgid "This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-core `_ package as well. All dates are subject to change. See :ref:`base_roadmap_2_11` for the most recent updates on ``ansible-core``." msgstr "本リリーススケジュールã«ã¯ã€`ansible `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€`ansible-core `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ã‚‚ã„ãã¤ã‹å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æ—¥ä»˜ã¯ã™ã¹ã¦å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚``ansible-core`` ã®æœ€æ–°ã®æ›´æ–°ã«ã¤ã„ã¦ã¯ã€Œ:ref:`base_roadmap_2_11`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-01-26" msgstr "2021 å¹´ 01 月 26æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:17 msgid "New Collections will be reviewed for inclusion in Ansible 4. Submit a request to include a new collection in this `GitHub Discussion `_." msgstr "æ–°ã—ã„コレクションã¯ã€Ansible 4 ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãƒ¬ãƒ“ューã•れã¾ã™ã€‚ã“ã® `GitHub ディスカッション `_ ã«æ–°ã—ã„コレクションを追加ã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-03-03" msgstr "2021 å¹´ 03 月 03 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:18 msgid "Ansible-4.0.0 alpha1 (biweekly ``ansible`` alphas. These are timed to coincide with the start of the ``ansible-core-2.11`` pre-releases)." msgstr "Ansible-4.0.0 alpha1 (``ansible`` Alpha ã¯éš”週)。ã“れら㯠``ansible-core-2.11`` プレリリースã®é–‹å§‹ã¨åˆè‡´ã™ã‚‹ã‚ˆã†ã«ã‚¿ã‚¤ãƒŸãƒ³ã‚°ãŒèª¿æ•´ã•れã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-03-16" msgstr "2021 å¹´ 03 月 16 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:19 msgid "Ansible-4.0.0 alpha2" msgstr "Ansible-4.0.0 alpha2" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-03-30" msgstr "2021 å¹´ 03 月 30 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:20 msgid "Ansible-4.0.0 alpha3" msgstr "Ansible-4.0.0 alpha3" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-04-13" msgstr "2021 å¹´ 04 月 13 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:21 msgid "Last day for new collections to be submitted for inclusion in Ansible 4. Note that collections MUST be reviewed and approved before being included. There is no guarantee that we will review every collection. The earlier your collection is submitted, the more likely it will be that your collection will be reviewed and the necessary feedback can be addressed in time for inclusion." msgstr "Ansible 4 ã«å«ã‚ã‚‹ãŸã‚ã«æ–°ã—ã„コレクションをé€ä¿¡ã™ã‚‹æœ€çµ‚日。コレクションをå«ã‚ã‚‹å‰ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’レビューã—ã¦æ‰¿èªã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’レビューã™ã‚‹ä¿è¨¼ã¯ã‚りã¾ã›ã‚“ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒæ—©ãæå‡ºã•れるã»ã©ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒãƒ¬ãƒ“ューã•れã€å¿…è¦ãªãƒ•ィードãƒãƒƒã‚¯ãŒå«ã¾ã‚Œã‚‹ã®ã«é–“ã«åˆã†ã‚ˆã†ã«å¯¾å‡¦ã•れるå¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_4.rst:22 msgid "Ansible-4.0.0 alpha4" msgstr "Ansible-4.0.0 alpha4" #: ../../rst/roadmap/COLLECTIONS_4.rst ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-04-14" msgstr "2021 å¹´ 04 月 14 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:23 msgid "Community Meeting topic: list any new collection reviews which block release. List any backwards incompatible collection releases that beta1 should try to accommodate." msgstr "コミュニティーミーティングã®ãƒˆãƒ”ック: リリースをブロックã™ã‚‹æ–°ã—ã„コレクションレビューを一覧表示ã—ã¾ã™ã€‚beta1 ãŒå¯¾å¿œã—よã†ã¨ã™ã‚‹å¾Œæ–¹äº’æ›æ€§ã®ãªã„コレクションリリースã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-04-21" msgstr "2021 å¹´ 04 月 21 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:24 #: ../../rst/roadmap/COLLECTIONS_5.rst:25 msgid "Community Meeting topic: Decide what contingencies to activate for any blockers that do not meet the deadline." msgstr "コミュニティーミーティングã®ãƒˆãƒ”ック: 期é™ã«é–“ã«åˆã‚ãªã„ブロッカーã«å¯¾ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã™ã‚‹ä¸æ¸¬ã®äº‹æ…‹ã‚’決定ã—ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-04-26" msgstr "2021 å¹´ 04 月 26 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:25 msgid "Last day for new collections to be **reviewed and approved** for inclusion in Ansible 4." msgstr "æ–°ã—ã„コレクションを Ansible 4 ã«å«ã‚ã‚‹ãŸã‚ã« **レビューãŠã‚ˆã³æ‰¿èª** ã•れる最終日。" #: ../../rst/roadmap/COLLECTIONS_4.rst:26 msgid "Last day for collections to make backwards incompatible releases that will be accepted into Ansible 4." msgstr "コレクション㌠Ansible 4 ã«å—ã‘å…¥ã‚Œã‚‰ã‚Œã‚‹å¾Œæ–¹äº’æ›æ€§ã®ãªã„リリースを作æˆã™ã‚‹æœ€çµ‚日。" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-04-27" msgstr "2021 å¹´ 04 月 27 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:27 msgid "Ansible-4.0.0 beta1 -- feature freeze [1]_ (weekly beta releases. Collection owners and interested users should test for bugs)." msgstr "Ansible-4.0.0 beta1 -- 機能フリーズ [1]_ (週次 Beta リリース)ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¨å¯¾è±¡ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒã‚°ã«ã¤ã„ã¦ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-05-04" msgstr "2021 å¹´ 05 月 04 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:28 msgid "Ansible-4.0.0 beta2" msgstr "Ansible-4.0.0 beta2" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-05-11" msgstr "2021 å¹´ 05 月 11 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:29 msgid "Ansible-4.0.0 rc1 [2]_ [3]_ (weekly release candidates as needed. Test and alert us to any blocker bugs)." msgstr "Ansible-4.0.0 rc1 [2]_ [3]_ (å¿…è¦ã«å¿œã˜ã¦é€±æ¬¡ãƒªãƒªãƒ¼ã‚¹å€™è£œã€‚ã™ã¹ã¦ã®ãƒ–ロッカーãƒã‚°ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã—ã€è­¦å‘Šã—ã¾ã™)" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-05-18" msgstr "2021 å¹´ 05 月 18 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:30 msgid "Ansible-4.0.0 release" msgstr "Ansible-4.0.0 リリース" #: ../../rst/roadmap/COLLECTIONS_4.rst msgid "2021-06-08" msgstr "2021 å¹´ 06 月 08 æ—¥" #: ../../rst/roadmap/COLLECTIONS_4.rst:31 msgid "Release of Ansible-4.1.0 (bugfix + compatible features: every three weeks)" msgstr "Ansible-4.1.0 ã®ãƒªãƒªãƒ¼ã‚¹ (ãƒã‚°ä¿®æ­£ + äº’æ›æ€§ã®ã‚る機能: 3 週間ã”ã¨)" #: ../../rst/roadmap/COLLECTIONS_4.rst:33 msgid "No new modules or major features accepted after this date. In practice, this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-2.1.0; ansible-3.0.0 could ship with community-crypto-2.1.1. It would not ship with community-crypto-2.2.0." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€æ–°ã—ã„モジュールやメジャー機能ã¯è¿½åŠ ã•れã¾ã›ã‚“。実際ã«ã¯ã€semver コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯äº’æ›æ€§ã®ã‚るリリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ•リーズã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®æ—¥ä»˜ã® community.crypto ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ community-crypto-2.1.0 ã§ã‚れã°ã€ansible-3.0.0 㯠community-crypto-2.1.1 ã«åŒæ¢±ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã—ãŸã€‚community-crypto-2.2.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_4.rst:36 msgid "Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a Community meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_." msgstr "コレクションã¯ã€ãƒ–ãƒ­ãƒƒã‚«ãƒ¼ãŒæ‰¿èªã•れãŸå ´åˆã«ã®ã¿æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã•れã¾ã™ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€(フリーズã®å‰ã«) 修正ã®ãŸã‚ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上ã’ã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®ãƒ–ロッカーã«ã¤ã„ã¦æ¤œè¨Žã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`Community meeting agenda `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_4.rst:41 msgid "Breaking changes will be introduced in Ansible 4.0.0, although we encourage the use of deprecation periods that will show up in at least one Ansible release before the breaking change happens, this is not guaranteed." msgstr "Ansible 4.0.0 ã§ é‡å¤§ãªå¤‰æ›´ãŒå°Žå…¥ã•れã¾ã™ãŒã€é‡å¤§ãªå¤‰æ›´ãŒç™ºç”Ÿã™ã‚‹å‰ã«å°‘ãªãã¨ã‚‚ 1 ã¤ã® Ansible リリースã«è¡¨ç¤ºã•ã‚Œã‚‹éžæŽ¨å¥¨æœŸé–“ã®ä½¿ç”¨ãŒæŽ¨å¥¨ã•れã¾ã™ãŒã€ã“れã¯ä¿è¨¼ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_4.rst:47 msgid "Ansible 4.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-core-2.11.x. Ansible 4.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-4.0.0 ships with community-crypto-2.1.0; Ansible-4.1.0 may ship with community-crypto-2.2.0 but would not ship with community-crypto-3.0.0)." msgstr "コレクションã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸå ´åˆã€ã¾ãŸã¯å¾Œã§ ansible-core-2.11.x ã¸ã®ã‚¢ãƒƒãƒ—グレードを強制ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨è¦‹ãªã•れãŸå ´åˆã€Ansible 4.x マイナーリリースã¯ç´„ 3 週間ã”ã¨ã«è¡Œã‚れã¾ã™ã€‚Ansible 4.x マイナーリリースã«ã¯æ–°æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€å¾Œæ–¹äº’æ›æ€§ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。実際ã«ã¯ã€ã“れã¯ã€ãƒ‘ッãƒã¾ãŸã¯ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã®ã„ãšã‚Œã‹ãŒå¤‰æ›´ã•れãŸã«ã‚‚ã‹ã‹ã‚らãšã€ãƒ¡ã‚¸ãƒ£ãƒ¼ç•ªå·ãŒå¤‰æ›´ã•れãŸã¨ãã«å¤‰æ›´ã•れãªã„æ–°ã—ã„コレクションãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible-4.0.0 ㌠community-crypto-2.1.0 ã«åŒæ¢±ã•れるã¨ã€Ansible-4.1.0 㯠community-crypto-2.2.0 ã«åŒæ¢±ã•れる場åˆãŒã‚りã¾ã™ãŒã€community-crypto-3.0.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_4.rst:52 msgid "Minor releases will stop when Ansible-5 is released. See the :ref:`Release and Maintenance Page ` for more information." msgstr "Ansible-5 ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯åœæ­¢ã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`リリースãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãƒšãƒ¼ã‚¸ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_5.rst:5 msgid "Ansible project 5.0" msgstr "Ansible プロジェクト 5.0" #: ../../rst/roadmap/COLLECTIONS_5.rst:7 msgid "This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-core `_ package as well. All dates are subject to change. See :ref:`core_roadmap_2_12` for the most recent updates on ``ansible-core``." msgstr "本リリーススケジュールã«ã¯ã€`ansible `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€`ansible-core `_ ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ—¥ä»˜ã‚‚ã„ãã¤ã‹å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æ—¥ä»˜ã¯ã™ã¹ã¦å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚``ansible-core`` ã®æœ€æ–°ã®æ›´æ–°ã«ã¤ã„ã¦ã¯ã€Œ:ref:`core_roadmap_2_12`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_5.rst:16 msgid "New Collections can be reviewed for inclusion in Ansible 5. Submit a request to include a new collection in this `GitHub Discussion `_." msgstr "æ–°ã—ã„コレクションã¯ã€Ansible 5 ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãƒ¬ãƒ“ューã•れã¾ã™ã€‚ã“ã® `GitHub Discussion `_ ã«æ–°ã—ã„コレクションを追加ã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-09-24" msgstr "2021-09-24" #: ../../rst/roadmap/COLLECTIONS_5.rst:17 msgid "ansible-core feature freeze." msgstr "ansible-core 機能ã®ãƒ•リーズ。" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-09-27" msgstr "2021-09-27" #: ../../rst/roadmap/COLLECTIONS_5.rst:18 msgid "Start of ansible-core 2.12 betas (weekly, as needed)." msgstr "ansible-core 2.12 ベータ版(必è¦ã«å¿œã˜ã¦æ¯Žé€±ï¼‰ã®é–‹å§‹ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-05" msgstr "2021-10-05" #: ../../rst/roadmap/COLLECTIONS_5.rst:19 msgid "Ansible-5.0.0 alpha1 (roughly biweekly ``ansible`` alphas timed to coincide with ``ansible-core-2.12`` pre-releases)." msgstr "Ansible-5.0.0 alpha1(ã»ã¼éš”週。``ansible`` ã®ã‚¢ãƒ«ãƒ•ァ版。``ansible-core-2.12``プレリリースã¨ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’ã‚ã‚ã›ã‚‹ï¼‰ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-12" msgstr "2021-10-12" #: ../../rst/roadmap/COLLECTIONS_5.rst:20 msgid "Last day for new collections to be submitted for inclusion in Ansible-5. Collections MUST be reviewed and approved before being included. There is no guarantee that we will review every collection. The earlier your collection is submitted, the more likely it will be that your collection will be reviewed and the necessary feedback can be addressed in time for inclusion." msgstr "Ansible 5 ã«å«ã‚ã‚‹ãŸã‚ã«æ–°ã—ã„コレクションをé€ä¿¡ã™ã‚‹æœ€çµ‚日。コレクションをå«ã‚ã‚‹å‰ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’レビューã—ã¦æ‰¿èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’レビューã™ã‚‹ä¿è¨¼ã¯ã‚りã¾ã›ã‚“ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒæ—©ãæå‡ºã•れるã»ã©ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒãƒ¬ãƒ“ューã•れã€å¿…è¦ãªãƒ•ィードãƒãƒƒã‚¯ãŒå«ã¾ã‚Œã‚‹ã®ã«é–“ã«åˆã†ã‚ˆã†ã«å¯¾å‡¦ã•れるå¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-13" msgstr "2021-10-13" #: ../../rst/roadmap/COLLECTIONS_5.rst:21 msgid "Community Meeting topic: List any new collection reviews which block release. List any backwards incompatible collection releases that beta1 should try to accommodate." msgstr "コミュニティーミーティングã®ãƒˆãƒ”ック: リリースをブロックã™ã‚‹æ–°ã—ã„コレクションレビューを一覧表示ã—ã¾ã™ã€‚beta1 ãŒå¯¾å¿œã—よã†ã¨ã™ã‚‹å¾Œæ–¹äº’æ›æ€§ã®ãªã„コレクションリリースã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-18" msgstr "2021-10-18" #: ../../rst/roadmap/COLLECTIONS_5.rst:22 msgid "First ansible-core release candidate, stable-2.12 branch created." msgstr "最åˆã® ansible-core リリース候補ã€stable-2.12 ブランãƒã®ä½œæˆã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-19" msgstr "2021-10-19" #: ../../rst/roadmap/COLLECTIONS_5.rst:23 msgid "Ansible-5.0.0 alpha2." msgstr "Ansible-5.0.0 alpha2" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-26" msgstr "2021-10-26" #: ../../rst/roadmap/COLLECTIONS_5.rst:24 msgid "Last day for new collections to be **reviewed and approved** for inclusion in Ansible-5." msgstr "æ–°ã—ã„コレクションを Ansible 5 ã«å«ã‚ã‚‹ãŸã‚ã« **レビューãŠã‚ˆã³æ‰¿èª** ã•れる最終日。" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-10-27" msgstr "2021-10-27" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-02" msgstr "2021-11-02" #: ../../rst/roadmap/COLLECTIONS_5.rst:26 msgid "Ansible-5.0.0 alpha3." msgstr "Ansible-5.0.0 alpha3" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-08" msgstr "2021-11-08" #: ../../rst/roadmap/COLLECTIONS_5.rst:27 msgid "Ansible-core-2.12 released." msgstr "ansible-core-2.12 ã®ãƒªãƒªãƒ¼ã‚¹" #: ../../rst/roadmap/COLLECTIONS_5.rst:28 msgid "Last day for collections to make backwards incompatible releases that will be accepted into Ansible-5." msgstr "å¾Œæ–¹äº’æ›æ€§ã®ãªã„リリースをã¾ã¨ã‚ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ Ainbile-5 ã«æŽ¡ç”¨ã•れる最終日。" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-09" msgstr "2021-11-09" #: ../../rst/roadmap/COLLECTIONS_5.rst:29 msgid "Create the ansible-build-data directory and files for Ansible-6. New collection approvals will target this." msgstr "Ansible-6 å‘ã‘ã® ansible-build-data ディレクトリーã¨ãƒ•ァイルを作æˆã€‚æ–°è¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰¿èªã¯ã“れを対象ã¨ã—ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst:30 msgid "Ansible-5.0.0 beta1 -- feature freeze [1]_ (weekly beta releases; collection owners and interested users should test for bugs)." msgstr "Ansible-5.0.0 beta1 -- 機能フリーズ [1]_ (週次 Beta リリース)ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¨å¯¾è±¡ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒã‚°ã«ã¤ã„ã¦ãƒ†ã‚¹ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-16" msgstr "2021-11-16" #: ../../rst/roadmap/COLLECTIONS_5.rst:31 msgid "Ansible-5.0.0 beta2." msgstr "Ansible-5.0.0 beta2" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-23" msgstr "2021-11-23" #: ../../rst/roadmap/COLLECTIONS_5.rst:32 msgid "Ansible-5.0.0 rc1 [2]_ [3]_ (weekly release candidates as needed; test and alert us to any blocker bugs). Blocker bugs will slip release." msgstr "Ansible-5.0.0 rc1 [2]_ [3]_ (å¿…è¦ã«å¿œã˜ã¦é€±æ¬¡ãƒªãƒªãƒ¼ã‚¹å€™è£œã€‚ã™ã¹ã¦ã®ãƒ–ロッカーãƒã‚°ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã—ã€è­¦å‘Šã—ã¾ã™)。ブロッカーãƒã‚°ã¯ãƒªãƒªãƒ¼ã‚¹ã‚’é…å»¶ã•ã›ã¾ã™ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2021-11-30" msgstr "2021-11-30" #: ../../rst/roadmap/COLLECTIONS_5.rst:33 msgid "Ansible-5.0.0 release." msgstr "Ansible-5.0.0 リリース" #: ../../rst/roadmap/COLLECTIONS_5.rst msgid "2022-01-04" msgstr "2022-01-04" #: ../../rst/roadmap/COLLECTIONS_5.rst:34 msgid "Release of Ansible-5.1.0 (bugfix + compatible features: every three weeks. Note: this comes 4 week after 5.0.0 due to the winter holiday season)." msgstr "Ansible-5.1.0ã®ãƒªãƒªãƒ¼ã‚¹ï¼ˆãƒã‚°ä¿®æ­£+äº’æ›æ€§ã®ã‚る機能:3週間ã”ã¨ã€‚æ³¨ï¼šå†¬å­£ä¼‘æš‡ã®æ™‚期ã§ã‚ã‚‹ãŸã‚ã€5.0.0ã®4週間後ã«è¡Œã‚れã¾ã™ï¼‰ã€‚" #: ../../rst/roadmap/COLLECTIONS_5.rst:36 msgid "No new modules or major features accepted after this date. In practice, this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community.crypto 2.1.0; Ansible-5.0.0 could ship with community.crypto 2.1.1. It would not ship with community.crypto 2.2.0." msgstr "ã“ã®æ—¥ä»˜ä»¥é™ã¯ã€æ–°ã—ã„モジュールやメジャー機能ã¯è¿½åŠ ã•れã¾ã›ã‚“。実際ã«ã¯ã€semver コレクションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯äº’æ›æ€§ã®ã‚るリリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ•リーズã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®æ—¥ä»˜ã® community.crypto ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ community.crypto 2.1.0 ã§ã‚れã°ã€ansible-5.0.0 㯠community.crypto 2.1.1 ã«åŒæ¢±ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã—ãŸã€‚community.crypto 2.2.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_5.rst:40 msgid "Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a community IRC meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community IRC meeting agenda `_." msgstr "コレクションã¯ã€ãƒ–ãƒ­ãƒƒã‚«ãƒ¼ãŒæ‰¿èªã•れãŸå ´åˆã«ã®ã¿æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«æ›´æ–°ã•れã¾ã™ã€‚ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ‰€æœ‰è€…ã¯ã€(フリーズã®å‰ã«) 修正ã®ãŸã‚ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上ã’ã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ IRC ミーティングã®ãƒ–ロッカーã«ã¤ã„ã¦æ¤œè¨Žã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`コミュニティー IRC ミーティングã®è­°é¡Œ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/COLLECTIONS_5.rst:44 msgid "Breaking changes will be introduced in Ansible 5.0.0, although we encourage the use of deprecation periods that will show up in at least one Ansible release before the breaking change happens, this is not guaranteed." msgstr "Ansible 5.0.0 ã§ é‡å¤§ãªå¤‰æ›´ãŒå°Žå…¥ã•れã¾ã™ãŒã€é‡å¤§ãªå¤‰æ›´ãŒç™ºç”Ÿã™ã‚‹å‰ã«å°‘ãªãã¨ã‚‚ 1 ã¤ã® Ansible リリースã«è¡¨ç¤ºã•ã‚Œã‚‹éžæŽ¨å¥¨æœŸé–“ã®ä½¿ç”¨ãŒæŽ¨å¥¨ã•れã¾ã™ãŒã€ã“れã¯ä¿è¨¼ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_5.rst:50 msgid "Ansible 5.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-core-2.12.x. Ansible 5.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-5.0.0 ships with community.crypto 2.1.0; Ansible-5.1.0 may ship with community.crypto 2.2.0 but would not ship with community.crypto 3.0.0." msgstr "コレクションã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸå ´åˆã€ã¾ãŸã¯å¾Œã§ ansible-core-2.12.x ã¸ã®ã‚¢ãƒƒãƒ—グレードを強制ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã¨è¦‹ãªã•れãŸå ´åˆã€Ansible 5.x マイナーリリースã¯ç´„ 3 週間ã”ã¨ã«è¡Œã‚れã¾ã™ã€‚Ansible 5.x マイナーリリースã«ã¯æ–°æ©Ÿèƒ½ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€å¾Œæ–¹äº’æ›æ€§ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。実際ã«ã¯ã€ã“れã¯ã€ãƒ‘ッãƒã¾ãŸã¯ãƒžã‚¤ãƒŠãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã®ã„ãšã‚Œã‹ãŒå¤‰æ›´ã•れãŸã«ã‚‚ã‹ã‹ã‚らãšã€ãƒ¡ã‚¸ãƒ£ãƒ¼ç•ªå·ãŒå¤‰æ›´ã•れãŸã¨ãã«å¤‰æ›´ã•れãªã„æ–°ã—ã„コレクションãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible-5.0.0 ㌠community.crypto 2.1.0 ã«åŒæ¢±ã•れるã¨ã€Ansible-5.1.0 㯠community.crypto 2.2.0 ã«åŒæ¢±ã•れる場åˆãŒã‚りã¾ã™ãŒã€community.crypto.3.0.0 ã«ã¯åŒæ¢±ã•れã¾ã›ã‚“。" #: ../../rst/roadmap/COLLECTIONS_5.rst:55 msgid "Minor releases will stop when Ansible-6 is released. See the :ref:`Release and Maintenance Page ` for more information." msgstr "Ansible-6 ãŒãƒªãƒªãƒ¼ã‚¹ã•れるã¨ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯åœæ­¢ã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`Release and Maintenance Page `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ROADMAP_2_10.rst:5 msgid "Ansible-base 2.10" msgstr "Ansible-base 2.10" #: ../../rst/roadmap/ROADMAP_2_10.rst:14 ../../rst/roadmap/ROADMAP_2_11.rst:14 #: ../../rst/roadmap/ROADMAP_2_12.rst:14 ../../rst/roadmap/ROADMAP_2_7.rst:11 #: ../../rst/roadmap/ROADMAP_2_8.rst:12 ../../rst/roadmap/ROADMAP_2_9.rst:12 msgid "Expected" msgstr "予定" #: ../../rst/roadmap/ROADMAP_2_10.rst:16 msgid "PRs must be raised well in advance of the dates below to have a chance of being included in this ansible-base release." msgstr "ãƒ—ãƒ«è¦æ±‚ã¯ã€ã“ã® ansible-base リリースã«å«ã¾ã‚Œã‚‹å¯èƒ½æ€§ã‚’高ã‚ã‚‹ãŸã‚ã«ã€ä»¥ä¸‹ã®æœŸæ—¥ã«é–“ã«åˆã†ã‚ˆã†ã«ã€å分ãªä½™è£•ã‚’ã‚‚ã£ã¦ææ¡ˆã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ROADMAP_2_10.rst:18 msgid "There is no Alpha phase in 2.10." msgstr "2.10 ã«ã¯ã€Alpha フェーズã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_10.rst:21 msgid "2020-06-16 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code" msgstr "2020 å¹´ 06 月 16 æ—¥ Beta 1 **機能フリーズ** ã©ã®ã‚³ãƒ¼ãƒ‰ã«ã‚‚æ–°ã—ã„æ©Ÿèƒ½ (モジュールã€ãƒ—ラグインãªã©) ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_10.rst:24 msgid "2020-07-21 Release Candidate 1 (bumped from 2020-07-14)" msgstr "2020 å¹´ 07 月 21 æ—¥ リリース候補 1 (2020-07-14 ã‹ã‚‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上ã’ã¾ã—ãŸ)" #: ../../rst/roadmap/ROADMAP_2_10.rst:25 msgid "2020-07-24 Release Candidate 2" msgstr "2020 å¹´ 07 月 24 æ—¥ リリース候補 2" #: ../../rst/roadmap/ROADMAP_2_10.rst:26 msgid "2020-07-25 Release Candidate 3" msgstr "2020 å¹´ 07 月 25 æ—¥ リリース候補 3" #: ../../rst/roadmap/ROADMAP_2_10.rst:27 msgid "2020-07-30 Release Candidate 4" msgstr "2020 å¹´ 07 月 30 æ—¥ リリース候補 4" #: ../../rst/roadmap/ROADMAP_2_10.rst:28 msgid "2020-08-13 Release" msgstr "2020 å¹´ 08 月 13 æ—¥ リリース" #: ../../rst/roadmap/ROADMAP_2_10.rst:31 ../../rst/roadmap/ROADMAP_2_11.rst:33 #: ../../rst/roadmap/ROADMAP_2_12.rst:33 ../../rst/roadmap/ROADMAP_2_5.rst:19 #: ../../rst/roadmap/ROADMAP_2_6.rst:27 ../../rst/roadmap/ROADMAP_2_7.rst:24 #: ../../rst/roadmap/ROADMAP_2_8.rst:31 ../../rst/roadmap/ROADMAP_2_9.rst:31 msgid "Release Manager" msgstr "リリースマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" #: ../../rst/roadmap/ROADMAP_2_10.rst:33 msgid "@sivel" msgstr "@sivel" #: ../../rst/roadmap/ROADMAP_2_10.rst:36 ../../rst/roadmap/ROADMAP_2_11.rst:38 #: ../../rst/roadmap/ROADMAP_2_12.rst:38 ../../rst/roadmap/ROADMAP_2_8.rst:36 #: ../../rst/roadmap/ROADMAP_2_9.rst:37 msgid "Planned work" msgstr "予定ã•れる作業" #: ../../rst/roadmap/ROADMAP_2_10.rst:38 msgid "Migrate non-base plugins and modules from the ``ansible/ansible`` repository to smaller collection repositories" msgstr "ベースã§ãªã„プラグインã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ ``ansible/ansible`` リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰å°è¦æ¨¡ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ç§»è¡Œã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_10.rst:39 msgid "Add functionality to ease transition to collections, such as automatic redirects from the 2.9 names to the new FQCN of the plugin" msgstr "2.9 ã®åå‰ã‹ã‚‰ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã®æ–°ã—ã„ FQCN ã¸ã®è‡ªå‹•リダイレクトãªã©ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¸ã®ç§»è¡Œã‚’容易ã«ã™ã‚‹æ©Ÿèƒ½ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_10.rst:40 msgid "Create new ``ansible-base`` package representing the ``ansible/ansible`` repository" msgstr "``ansible-base`` リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’è¡¨ã™æ–°ã—ã„ ``ansible/ansible`` パッケージを作æˆã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_10.rst:43 msgid "Additional Resources" msgstr "追加情報" #: ../../rst/roadmap/ROADMAP_2_10.rst:45 msgid "The 2.10 release of Ansible will fundamentally change the scope of plugins included in the ``ansible/ansible`` repository, by moving much of the plugins into smaller collection repositories that will be shipped through https://galaxy.ansible.com/" msgstr "Ansible ã® 2.10 リリースã§ã¯ã€ãƒ—ラグインã®å¤§åŠã‚’ã€https://galaxy.ansible.com/ ã‹ã‚‰åŒæ¢±ã™ã‚‹å°è¦æ¨¡ãªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ç§»å‹•ã™ã‚‹ã“ã¨ã§ã€``ansible/ansible`` リãƒã‚¸ãƒˆãƒªãƒ¼ã«å«ã¾ã‚Œã‚‹ãƒ—ラグインã®ç¯„囲を基本的ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_10.rst:48 msgid "The following links have more information about this process:" msgstr "以下ã®ãƒªãƒ³ã‚¯ã«ã¯ã€ã“ã®ãƒ—ロセスã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_10.rst:50 msgid "https://groups.google.com/d/msg/ansible-devel/oKqgCeYTs-M/cHrOgMw8CAAJ" msgstr "https://groups.google.com/d/msg/ansible-devel/oKqgCeYTs-M/cHrOgMw8CAAJ" #: ../../rst/roadmap/ROADMAP_2_10.rst:51 msgid "https://github.com/ansible-collections/overview/blob/main/README.rst" msgstr "https://github.com/ansible-collections/overview/blob/main/README.rst" #: ../../rst/roadmap/ROADMAP_2_11.rst:5 msgid "Ansible-core 2.11" msgstr "Ansible-core 2.11" #: ../../rst/roadmap/ROADMAP_2_11.rst:16 ../../rst/roadmap/ROADMAP_2_12.rst:16 msgid "PRs must be raised well in advance of the dates below to have a chance of being included in this ansible-core release." msgstr "ãƒ—ãƒ«è¦æ±‚ã¯ã€ã“ã® ansible-core リリースã«å«ã¾ã‚Œã‚‹å¯èƒ½æ€§ã‚’高ã‚ã‚‹ãŸã‚ã«ã€ä»¥ä¸‹ã®æœŸæ—¥ã«é–“ã«åˆã†ã‚ˆã†ã«ã€å分ãªä½™è£•ã‚’ã‚‚ã£ã¦ææ¡ˆã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ROADMAP_2_11.rst:18 msgid "There is no Alpha phase in 2.11." msgstr "2.11 ã«ã¯ã€Alpha フェーズã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_11.rst:21 msgid "2021-02-12 Feature Freeze No new functionality (including modules/plugins) to any code" msgstr "2021 å¹´ 02 月 12 æ—¥ 機能フリーズ。コードã¸ã®æ–°ã—ã„æ©Ÿèƒ½ (モジュール/プラグインをå«ã‚€) ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_11.rst:24 msgid "2021-03-02 Beta 1" msgstr "2021 å¹´ 03 月 02 æ—¥ Beta 1" #: ../../rst/roadmap/ROADMAP_2_11.rst:25 msgid "2021-03-15 Beta 2 (if necessary)" msgstr "2021 å¹´ 03 月 15 æ—¥ Beta 2 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_11.rst:27 msgid "2021-03-29 Release Candidate 1 (and ``stable-2.11`` branching from ``devel``)" msgstr "2021 å¹´ 03 月 29 æ—¥ リリース候補 1 (ãŠã‚ˆã³ ``devel`` ã® ``stable-2.11`` ブランãƒ)" #: ../../rst/roadmap/ROADMAP_2_11.rst:28 msgid "2021-04-12 Release Candidate 2 (if necessary)" msgstr "2021 å¹´ 04 月 12 æ—¥ リリース候補 2 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_11.rst:30 msgid "2021-04-26 Release" msgstr "2021 å¹´ 04 月 26 æ—¥ リリース" #: ../../rst/roadmap/ROADMAP_2_11.rst:35 ../../rst/roadmap/ROADMAP_2_12.rst:35 msgid "Ansible Core Team" msgstr "Ansible Core Team" #: ../../rst/roadmap/ROADMAP_2_11.rst:40 msgid "Rename ``ansible-base`` to ``ansible-core``." msgstr "``ansible-base`` ã®åå‰ã‚’ ``ansible-core`` ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_11.rst:41 msgid "Improve UX of ``ansible-galaxy collection`` CLI, specifically as it relates to install and upgrade." msgstr "特ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŠã‚ˆã³ã‚¢ãƒƒãƒ—グレードã«é–¢é€£ã™ã‚‹ ``ansible-galaxy collection`` CLI ã® UX ãŒæ”¹å–„ã•れã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_11.rst:42 msgid "Add new Role Argument Spec feature that will allow a role to define an argument spec to be used in validating variables used by the role." msgstr "ロールãŒä½¿ç”¨ã™ã‚‹å¤‰æ•°ã®æ¤œè¨¼ã«ä½¿ç”¨ã™ã‚‹å¼•æ•°ã®ä»•様を定義ã§ãるよã†ã«ã€æ–°è¦ã® Role 引数仕様機能を追加ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_11.rst:44 msgid "Bump the minimum Python version requirement for the controller to Python 3.8. There will be no breaking changes to this release, however ``ansible-core`` will only be packaged for Python 3.8+. ``ansible-core==2.12`` will include breaking changes requiring at least Python 3.8." msgstr "ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®æœ€å° Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶ã‚’ Python 3.8 ã«ä¸Šã’ã¾ã™ã€‚今回ã®ãƒªãƒªãƒ¼ã‚¹ã«ã¯ã€é‡å¤§ãªå¤‰æ›´ã¯ã‚りã¾ã›ã‚“ãŒã€``ansible-core`` 㯠Python 3.8 以é™ã«å¯¾ã—ã¦ã®ã¿ãƒ‘ッケージ化ã•れã¾ã™ã€‚``ansible-core==2.12`` ã«ã¯ã€Python 3.8 以上を必è¦ã¨ã™ã‚‹é‡å¤§ãªå¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_11.rst:47 ../../rst/roadmap/ROADMAP_2_12.rst:42 msgid "Introduce split-controller testing in ``ansible-test`` to separate dependencies for the controller from dependencies on the target." msgstr "``ansible-test`` ã« split-controller テストãŒå°Žå…¥ã•れã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®ä¾å­˜é–¢ä¿‚をターゲットã®ä¾å­˜é–¢ä¿‚ã‹ã‚‰åˆ†é›¢ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_12.rst:5 msgid "Ansible-core 2.12" msgstr "Ansible-core 2.12" #: ../../rst/roadmap/ROADMAP_2_12.rst:18 msgid "There is no Alpha phase in 2.12." msgstr "2.12 ã«ã¯ã€Alpha フェーズã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_12.rst:21 msgid "2021-09-24 Feature Freeze (and ``stable-2.12`` branching from ``devel``) No new functionality (including modules/plugins) to any code" msgstr "2021 å¹´ 9 月 24 æ—¥ 機能フリーズ (``devel`` ã‹ã‚‰ã® ``stable-2.12`` ã®ãƒ–ランãƒä½œæˆ)。 (モジュール/プラグインãªã©)コードã«å¯¾ã—ã¦æ–°ã—ã„æ©Ÿèƒ½ãªã—" #: ../../rst/roadmap/ROADMAP_2_12.rst:24 msgid "2021-09-27 Beta 1" msgstr "2021 å¹´ 9 月 27 æ—¥ Beta 1" #: ../../rst/roadmap/ROADMAP_2_12.rst:25 msgid "2021-10-04 Beta 2 (if necessary)" msgstr "2021 å¹´ 10 月 4 æ—¥ Beta 2 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_12.rst:27 msgid "2021-10-18 Release Candidate 1" msgstr "2021 å¹´ 10 月 18 æ—¥ リリース候補 1" #: ../../rst/roadmap/ROADMAP_2_12.rst:28 msgid "2021-10-25 Release Candidate 2 (if necessary)" msgstr "2021 å¹´ 10 月 25 æ—¥ リリース候補 2 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_12.rst:30 msgid "2021-11-08 Release" msgstr "2021 å¹´ 11 月 8 æ—¥ リリース" #: ../../rst/roadmap/ROADMAP_2_12.rst:40 msgid "Bump the minimum Python version requirement for the controller to Python 3.8. This will be a hard requirement." msgstr "コントローラー㮠Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æœ€å°è¦ä»¶ã‚’ Python 3.8 ã«å¤‰æ›´ã—ã¾ã™ã€‚ã“れã¯ãƒãƒ¼ãƒ‰è¦ä»¶ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_12.rst:41 msgid "Deprecate Python 2.6 support for managed/target hosts. The release of ``ansible-core==2.13`` will remove Python 2.6 support." msgstr "管ç†/ターゲットホスト㮠Python 2.6 サãƒãƒ¼ãƒˆã‚’éžæŽ¨å¥¨ã«ã—ã¾ã™ã€‚``ansible-core==2.13`` ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€Python 2.6 ã®ã‚µãƒãƒ¼ãƒˆãŒå‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_12.rst:43 msgid "Extend the functionality of ``module_defaults`` ``action_groups`` to be created and presented by collections." msgstr "コレクションã«ã‚ˆã£ã¦ä½œæˆã•ã‚Œã€æç¤ºã•れるよã†ã« ``module_defaults`` ``action_groups`` ã®æ©Ÿèƒ½ã‚’æ‹¡å¼µã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_12.rst:46 msgid "Delayed work" msgstr "作業ã®é…å»¶" #: ../../rst/roadmap/ROADMAP_2_12.rst:48 msgid "The following work has been delayed and retargeted for a future release" msgstr "以下ã®ä½œæ¥­ã¯ã€é…å»¶ã—ã¦ãŠã‚Šã€ãƒªãƒªãƒ¼ã‚¹ã®ç›®æ¨™ã¯ä»Šå¾Œã®ãƒªãƒªãƒ¼ã‚¹ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_12.rst:50 msgid "Implement object proxies, to expose restricted interfaces between parts of the code, and enable deprecations of attributes and variables." msgstr "オブジェクトプロキシーを実装ã—ã¦éƒ¨åˆ†çš„ãªã‚³ãƒ¼ãƒ‰åŒå£«ã®é–“ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをé™å®šã—ã€å±žæ€§ã¨å¤‰æ•°ã‚’廃止ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:3 msgid "Ansible 2.5" msgstr "Ansible 2.5" #: ../../rst/roadmap/ROADMAP_2_5.rst:4 msgid "**Core Engine Freeze and Module Freeze: 22 January 2018**" msgstr "**コアエンジンã®ãƒ•リーズãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ•リーズ: 2018 å¹´ 1 月 22 æ—¥**" #: ../../rst/roadmap/ROADMAP_2_5.rst:6 msgid "**Core and Curated Module Freeze: 22 January 2018**" msgstr "**コアãŠã‚ˆã³ã‚­ãƒ¥ãƒ¼ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ•リーズ: 2018 å¹´ 1 月 22 æ—¥**" #: ../../rst/roadmap/ROADMAP_2_5.rst:8 msgid "**Community Module Freeze: 7 February 2018**" msgstr "**コミュニティーモジュールã®ãƒ•リーズ: 2018 å¹´ 2 月 7 æ—¥**" #: ../../rst/roadmap/ROADMAP_2_5.rst:10 msgid "**Release Candidate 1 will be 21 February, 2018**" msgstr "**リリース候補 1 㯠2018 å¹´ 2 月 21 æ—¥ã§ã™ã€‚**" #: ../../rst/roadmap/ROADMAP_2_5.rst:12 msgid "**Target: March 2018**" msgstr "**ターゲット: 2018 å¹´ 3 月**" #: ../../rst/roadmap/ROADMAP_2_5.rst:14 msgid "**Service Release schedule: every 2-3 weeks**" msgstr "**サービスリリーススケジュール: 2 ~ 3 週間ã”ã¨**" #: ../../rst/roadmap/ROADMAP_2_5.rst:16 ../../rst/roadmap/ROADMAP_2_6.rst:5 #: ../../rst/roadmap/ROADMAP_2_7.rst:5 msgid "Topics" msgstr "トピック" #: ../../rst/roadmap/ROADMAP_2_5.rst:20 msgid "Matt Davis (IRC/GitHub: @nitzmahone)" msgstr "Matt Davis (IRC/GitHub: @nitzmahone)" #: ../../rst/roadmap/ROADMAP_2_5.rst:24 ../../rst/roadmap/ROADMAP_2_6.rst:33 msgid "Engine improvements" msgstr "ã‚¨ãƒ³ã‚¸ãƒ³ã®æ”¹å–„" #: ../../rst/roadmap/ROADMAP_2_5.rst:25 msgid "Assemble module improvements - assemble just skips when in check mode, it should be able to test if there is a difference and changed=true/false. - The same with diff, it should work as template modules does" msgstr "assemble ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ”¹å–„ - ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã¯ assemble ã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã ã‘ã§ã€é•ã„ãŒã‚りã€å¤‰æ›´ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’テストã§ãã¾ã™ (true/false)。diff ã¨åŒã˜ã‚ˆã†ã«ã€ãƒ†ãƒ³ãƒ—レートモジュールã¨åŒã˜ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:28 msgid "Handle Password reset prompts cleaner" msgstr "パスワードリセットプロンプトクリーナーã®å‡¦ç†" #: ../../rst/roadmap/ROADMAP_2_5.rst:29 msgid "Tasks stats for rescues and ignores" msgstr "rescue ãŠã‚ˆã³ ignore ã®ã‚¿ã‚¹ã‚¯çµ±è¨ˆ" #: ../../rst/roadmap/ROADMAP_2_5.rst:30 msgid "Normalize temp dir usage across all subsystems" msgstr "ã™ã¹ã¦ã®ã‚µãƒ–システムã§ä¸€æ™‚ディレクトリーã®ä½¿ç”¨ã‚’æ­£è¦åŒ–" #: ../../rst/roadmap/ROADMAP_2_5.rst:31 msgid "Add option to set playbook dir for adhoc, inventory and console to allow for 'relative path loading'" msgstr "アドホックã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€ãŠã‚ˆã³ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã« Playbook ディレクトリーを設定ã—ã¦ã€ã€Œç›¸å¯¾ãƒ‘スã®èª­ã¿è¾¼ã¿ã€ã‚’å¯èƒ½ã«ã™ã‚‹ã‚ªãƒ—ションを追加ã—ã¾ã™" #: ../../rst/roadmap/ROADMAP_2_5.rst:35 msgid "Ansible-Config" msgstr "Ansible-Config" #: ../../rst/roadmap/ROADMAP_2_5.rst:36 msgid "Extend config to more plugin types and update plugins to support the new config" msgstr "設定を他ã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚¿ã‚¤ãƒ—ã«æ‹¡å¼µã—ã€æ–°ã—ã„設定をサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ãƒ—ラグインを更新ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:39 msgid "Inventory" msgstr "インベントリー" #: ../../rst/roadmap/ROADMAP_2_5.rst:40 msgid "ansible-inventory option to output group variable assignment and data (--export)" msgstr "グループ変数ã®å‰²ã‚Šå½“ã¦ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚’出力ã™ã‚‹ ansible-inventory オプション (--export)" #: ../../rst/roadmap/ROADMAP_2_5.rst:41 msgid "Create inventory plugins for: - aws" msgstr "- aws ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを作æˆã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:45 msgid "Facts" msgstr "ファクト" #: ../../rst/roadmap/ROADMAP_2_5.rst:46 msgid "Namespacing fact variables (via a config option) implemented in ansible/ansible PR `#18445 `_. Proposal found in ansible/proposals issue `#17 `_." msgstr "ansible/ansible ã®ãƒ—ãƒ«è¦æ±‚ã«å®Ÿè£…ã•れãŸãƒ•ァクト変数 (設定オプション経由) ã®åå‰ç©ºé–“ (`#18445 `_)。ansible/proposals å•題ã«è¡¨ç¤ºã•ã‚Œã‚‹ææ¡ˆ (`#17 `_)。" #: ../../rst/roadmap/ROADMAP_2_5.rst:48 msgid "Make fact collectors and gather_subset specs finer grained" msgstr "ファクトコレクター㨠gather_subset ã®ä»•様をより詳細ã«ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:49 msgid "Eliminate unneeded deps between fact collectors" msgstr "ファクトコレクター間ã®ä¸è¦ãªãƒ‡ãƒƒãƒ‰ã‚’排除ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:50 msgid "Allow fact collectors to indicate if they need information from another fact collector to be gathered first." msgstr "ファクトコレクターã¯ã€åˆ¥ã®ãƒ•ァクトコレクターã‹ã‚‰ã®æƒ…報を最åˆã«åŽé›†ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ã“ã¨ãŒã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:53 msgid "Static Loop Keyword" msgstr "é™çš„ループキーã®ãƒ‘スワード" #: ../../rst/roadmap/ROADMAP_2_5.rst:55 msgid "A simpler alternative to ``with_``, ``loop:`` only takes a list" msgstr "``with_`` ã®ã‚ˆã‚Šç°¡å˜ãªä»£æ›¿æ–¹æ³•ã¨ã—ã¦ã¯ã€``loop:`` ã¯ãƒªã‚¹ãƒˆã®ã¿ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:56 msgid "Remove complexity from loops, lookups are still available to users" msgstr "ループã‹ã‚‰è¤‡é›‘性を削除ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€å¼•ãç¶šãæ¤œç´¢ã‚’利用ã§ãã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:57 msgid "Less confusing having a static directive vs a one that is dynamic depending on plugins loaded." msgstr "読ã¿è¾¼ã¾ã‚ŒãŸãƒ—ラグインã«å¿œã˜ã¦å‹•çš„ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¨æ¯”較ã—ã¦ã€é™çš„ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã‚’æŒã¤ã“ã¨ã§æ··ä¹±ãŒå°‘ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:60 msgid "Vault" msgstr "Vault" #: ../../rst/roadmap/ROADMAP_2_5.rst:61 msgid "Vault secrets client inc new 'keyring' client" msgstr "æ–°ã—ã„「キーリングã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å«ã‚€ Vault シークレットクライアント" #: ../../rst/roadmap/ROADMAP_2_5.rst:64 msgid "Runtime Check on Modules for Disabling" msgstr "無効ã«ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãƒã‚§ãƒƒã‚¯" #: ../../rst/roadmap/ROADMAP_2_5.rst:65 msgid "Filter on things like \"supported_by\" in module metadata" msgstr "モジュールメタデータã«ã€Œsupported_byã€ãªã©ã®å†…容ã«ãƒ•ィルタリングã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:66 msgid "Provide users with an option of \"warning, error or allow/ignore\"" msgstr "「warning, error or allow/ignoreã€ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŒ‡å®šã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:67 msgid "Configurable via ansible.cfg and environment variable" msgstr "ansible.cfg ãŠã‚ˆã³ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¦è¨­å®šå¯èƒ½ã«" #: ../../rst/roadmap/ROADMAP_2_5.rst:70 ../../rst/roadmap/ROADMAP_2_6.rst:78 #: ../../rst/roadmap/ROADMAP_2_7.rst:94 msgid "Windows" msgstr "Windows" #: ../../rst/roadmap/ROADMAP_2_5.rst:71 msgid "Implement gather_subset on Windows facts" msgstr "Windows ファクトã¸ã® gather_subset ã®å®Ÿè£…" #: ../../rst/roadmap/ROADMAP_2_5.rst:72 msgid "Fix Windows async + become to allow them to work together" msgstr "Windows ã®éžåŒæœŸã‚’修正ã—ã€ãれらãŒé€£æºã§ãるよã†ã«ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:73 msgid "Implement Windows become flags for controlling various modes **(done)** - logontype - elevation behavior" msgstr "ã•ã¾ã–ã¾ãªãƒ¢ãƒ¼ãƒ‰ã‚’制御ã™ã‚‹ãŸã‚ã® Windows ã® become フラグを実装ã™ã‚‹ **(完了)** - logontype - elevation behavior" #: ../../rst/roadmap/ROADMAP_2_5.rst:76 msgid "Convert win_updates to action plugin for auto reboot and extra features **(done)**" msgstr "自動å†èµ·å‹•ãŠã‚ˆã³è¿½åŠ æ©Ÿèƒ½ã® Win_updates ã‹ã‚‰ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã«å¤‰æ›ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:77 msgid "Spike out changing the connection over to PSRP instead of WSMV **(done- it's possible)**" msgstr "接続を WSMV ã§ã¯ãªã PSRP ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’明確ã«ã™ã‚‹ **(完了 - å¯èƒ½)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:78 msgid "Module updates" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ›´æ–°" #: ../../rst/roadmap/ROADMAP_2_5.rst:80 msgid "win_updates **(done)**" msgstr "win_updates **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:82 msgid "Fix win_updates to detect (or request) become" msgstr "become を検出 (ã¾ãŸã¯è¦æ±‚) ã™ã‚‹ã‚ˆã†ã« win_updates を修正ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:83 msgid "Add enable/disable features to win_updates" msgstr "win_updates ã«æœ‰åŠ¹åŒ–/無効化機能を追加ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:84 msgid "win_dsc further improvements **(done)**" msgstr "win_dsc ã‚’ã•ã‚‰ã«æ”¹å–„ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:87 msgid "General Cloud" msgstr "一般クラウド" #: ../../rst/roadmap/ROADMAP_2_5.rst:88 msgid "Make multi-cloud provisioning easier" msgstr "マルãƒã‚¯ãƒ©ã‚¦ãƒ‰ã®ãƒ—ロビジョニングを容易ã«ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:89 msgid "Diff mode will output provisioning task results of ansible-playbook runs" msgstr "diff モードã¯ã€ansible-playbook ã®å®Ÿè¡Œã®ãƒ—ãƒ­ãƒ“ã‚¸ãƒ§ãƒ‹ãƒ³ã‚°ã‚¿ã‚¹ã‚¯çµæžœã‚’出力ã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:90 msgid "Terraform module" msgstr "Terraform モジュール" #: ../../rst/roadmap/ROADMAP_2_5.rst:93 ../../rst/roadmap/ROADMAP_2_7.rst:62 msgid "AWS" msgstr "AWS" #: ../../rst/roadmap/ROADMAP_2_5.rst:94 msgid "Focus on pull requests for various modules" msgstr "ã•ã¾ã–ã¾ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ—ãƒ«è¦æ±‚ã«ç„¦ç‚¹" #: ../../rst/roadmap/ROADMAP_2_5.rst:95 msgid "Triage existing merges for modules" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ—¢å­˜ãƒžãƒ¼ã‚¸ã®å„ªå…ˆé †ä½ä»˜ã‘" #: ../../rst/roadmap/ROADMAP_2_5.rst:96 msgid "Module work" msgstr "モジュール作業" #: ../../rst/roadmap/ROADMAP_2_5.rst:98 msgid "ec2_instance" msgstr "ec2_instance" #: ../../rst/roadmap/ROADMAP_2_5.rst:99 msgid "ec2_vpc: Allow the addition of secondary IPv4 CIDRS to existing VPCs." msgstr "ec2_vpc: 既存㮠VPC ã¸ã®ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼ IPv4 CIDRS ã®è¿½åŠ ã‚’è¨±å¯ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:100 msgid "AWS Network Load Balancer support (NLB module, ASG support, and so on)" msgstr "AWS Network Load Balancer サãƒãƒ¼ãƒˆ (NLB モジュールã€ASG サãƒãƒ¼ãƒˆãªã©)" #: ../../rst/roadmap/ROADMAP_2_5.rst:101 msgid "rds_instance" msgstr "rds_instance" #: ../../rst/roadmap/ROADMAP_2_5.rst:104 ../../rst/roadmap/ROADMAP_2_7.rst:71 msgid "Azure" msgstr "Azure" #: ../../rst/roadmap/ROADMAP_2_5.rst:105 msgid "Azure CLI auth **(done)**" msgstr "Azure CLI èªè¨¼ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:106 msgid "Fix Azure module results to have \"high-level\" output instead of raw REST API dictionary **(partial, more to come in 2.6)**" msgstr "生㮠REST API ディレクトリーã§ã¯ãªã「高レベルã€ã®å‡ºåŠ›ã‚’è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã« Azure モジュールã®çµæžœã‚’修正ã™ã‚‹ **(部分的。2.6 ã§ã•らã«è¿½åŠ äºˆå®š)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:107 msgid "Deprecate Azure automatic storage accounts in azure_rm_virtualmachine **(breaks on Azure Stack, punted until AS supports managed disks)**" msgstr "azure_rm_virtualmachine ã® Azure è‡ªå‹•ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’éžæŽ¨å¥¨ã« **(Azure Stack ã§ä¸­æ–­ã€‚AS ãŒç®¡ç†å¯¾è±¡ãƒ‡ã‚£ã‚¹ã‚¯ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã¾ã§ä¿ç•™)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:110 msgid "Network Roadmap" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—" #: ../../rst/roadmap/ROADMAP_2_5.rst:111 msgid "Refactor common network shared code into package **(done)**" msgstr "共通ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å…±æœ‰ã‚³ãƒ¼ãƒ‰ã‚’パッケージã«ãƒªãƒ•ァクタリングã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:112 msgid "Convert various nxos modules to use declarative intent **(done)**" msgstr "ã•ã¾ã–ã¾ãª nxos モジュールを変æ›ã—ã€å®£è¨€çš„æŽ¨è«– **(完了)** を活用" #: ../../rst/roadmap/ROADMAP_2_5.rst:113 msgid "Refactor various modules to use the cliconf plugin **(done)**" msgstr "cliconf プラグインを活用ã™ã‚‹ãŸã‚ã«å„種モジュールをリファクタリングã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:114 msgid "Add various missing declarative modules for supported platforms and functions **(done)**" msgstr "サãƒãƒ¼ãƒˆã•れるプラットフォームãŠã‚ˆã³æ©Ÿèƒ½ç”¨ã«ã€ä¸è¶³ã—ã¦ã„ã‚‹ã•ã¾ã–ã¾ãªå®£è¨€åž‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:115 msgid "Implement a feature that handles platform differences and feature unavailability **(done)**" msgstr "プラットフォームã®é•ã„ã¨æ©Ÿèƒ½ã®åˆ©ç”¨ä¸å¯ã«å¯¾å¿œã™ã‚‹æ©Ÿèƒ½ã‚’実装ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:116 msgid "netconf-config.py should provide control for deployment strategy" msgstr "netconf-config.py ãŒãƒ‡ãƒ—ロイメントストラテジーã®åˆ¶å¾¡ã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:117 msgid "Create netconf connection plugin **(done)**" msgstr "netconf connection プラグインを作æˆã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:118 msgid "Create netconf fact module" msgstr "netconf ファクトモジュールを作æˆã™ã‚‹" #: ../../rst/roadmap/ROADMAP_2_5.rst:119 msgid "Turn network_cli into a usable connection type **(done)**" msgstr "network_cli を使用å¯èƒ½ãªæŽ¥ç¶šã‚¿ã‚¤ãƒ—ã«å¤‰æ›ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:120 msgid "Implements jsonrpc message passing for ansible-connection **(done)**" msgstr "ansible-connection ã«æ¸¡ã™ jsonrpc メッセージを実装ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:121 msgid "Improve logging for ansible-connection **(done)**" msgstr "ansible-connection ã®ãƒ­ã‚®ãƒ³ã‚°ã‚’改善ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:122 msgid "Improve stdout output for failures whilst using persistent connection **(done)**" msgstr "æ°¸ç¶šçš„ãªæŽ¥ç¶šã®ä½¿ç”¨ä¸­ã«å‚·å®³ãŒç™ºç”Ÿã—ãŸå ´åˆã® stdout 出力を改善ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:123 msgid "Create IOS-XR NetConf Plugin and refactor iosxr modules to use netconf plugin **(done)**" msgstr "IOS-XR NetConf プラグインを作æˆã—ã€iosxr モジュールをリファクタリングã—㦠netconf プラグインを活用ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:124 msgid "Refactor junos modules to use netconf plugin **(done)**" msgstr "netconf プラグインを使用ã™ã‚‹ã‚ˆã†ã« junos モジュールをリファクタリングã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:125 msgid "Filters: Add a filter to convert XML response from a network device to JSON object **(done)**" msgstr "フィルター: XML 応答をãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ JSON オブジェクトã«å¤‰æ›ã™ã‚‹ãƒ•ィルターを追加ã™ã‚‹ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:128 msgid "Documentation" msgstr "ドキュメント" #: ../../rst/roadmap/ROADMAP_2_5.rst:129 msgid "Extend documentation to more plugins" msgstr "ドキュメントを他ã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¸æ‹¡å¼µ" #: ../../rst/roadmap/ROADMAP_2_5.rst:130 msgid "Document vault-password-client scripts." msgstr "vault-password-client スクリプトを文書化ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_5.rst:131 msgid "Network Documentation" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/roadmap/ROADMAP_2_5.rst:133 msgid "New landing page (to replace intro_networking) **(done)**" msgstr "æ–°ã—ã„ランディングページ (intro_networking ã‚’ç½®ãæ›ãˆã‚‹ãŸã‚) **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:134 msgid "Platform specific guides **(done)**" msgstr "プラットフォーム固有ã®ã‚¬ã‚¤ãƒ‰ **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:135 msgid "Walk through: Getting Started **(done)**" msgstr "ウォークスルー: ã¯ã˜ã‚ã« **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:136 msgid "Networking and ``become`` **(done)**" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ ``become`` **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:137 msgid "Best practice **(done)**" msgstr "ベストプラクティス **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:140 msgid "Contributor Quality of Life" msgstr "貢献者ã®ç”Ÿæ´»ã®è³ª" #: ../../rst/roadmap/ROADMAP_2_5.rst:141 msgid "Finish PSScriptAnalyer integration with ansible-test (for enforcing Powershell style) **(done)**" msgstr "PSScriptAnalyer 㨠ansible-test ã®çµ±åˆã‚’完了ã™ã‚‹ (Powershell スタイルをé©ç”¨ã™ã‚‹ãŸã‚) **(完了)**" #: ../../rst/roadmap/ROADMAP_2_5.rst:142 msgid "Resolve issues requiring skipping of some integration tests on Python 3." msgstr "Python 3 ã§ä¸€éƒ¨ã®çµ±åˆãƒ†ã‚¹ãƒˆã‚’スキップã™ã‚‹å¿…è¦ãŒã‚ã‚‹å•題を解決ã™ã‚‹ã€‚" #: ../../rst/roadmap/ROADMAP_2_6.rst:3 msgid "Ansible 2.6" msgstr "Ansible 2.6" #: ../../rst/roadmap/ROADMAP_2_6.rst:11 msgid "Actual" msgstr "実績" #: ../../rst/roadmap/ROADMAP_2_6.rst:13 msgid "2018-05-17 Core Freeze (Engine and Core Modules/Plugins)" msgstr "2018 å¹´ 05 月 17 æ—¥ コアフリーズ (Engine ãŠã‚ˆã³ Core モジュール/プラグイン)" #: ../../rst/roadmap/ROADMAP_2_6.rst:14 msgid "2018-05-21 Alpha Release 1" msgstr "2018 å¹´ 05 月 21 æ—¥ Alpha リリース 1" #: ../../rst/roadmap/ROADMAP_2_6.rst:15 msgid "2018-05-25 Community Freeze (Non-Core Modules/Plugins)" msgstr "2018 å¹´ 05 月 25 æ—¥ コミュニティーフリーズ (éž Core モジュール/プラグイン)" #: ../../rst/roadmap/ROADMAP_2_6.rst:16 msgid "2018-05-25 Branch stable-2.6" msgstr "2018 å¹´ 05 月 25 æ—¥ ブランãƒã® stable-2.6" #: ../../rst/roadmap/ROADMAP_2_6.rst:17 msgid "2018-05-30 Alpha Release 2" msgstr "2018 å¹´ 05 月 30 æ—¥ Ahpha リリース 2" #: ../../rst/roadmap/ROADMAP_2_6.rst:18 msgid "2018-06-05 Release Candidate 1" msgstr "2018 å¹´ 06 月 05 æ—¥ リリース候補 1" #: ../../rst/roadmap/ROADMAP_2_6.rst:19 msgid "2018-06-08 Release Candidate 2" msgstr "2018 å¹´ 06 月 08 æ—¥ リリース候補 2" #: ../../rst/roadmap/ROADMAP_2_6.rst:20 msgid "2018-06-18 Release Candidate 3" msgstr "2018 å¹´ 06 月 18 æ—¥ リリース候補 3" #: ../../rst/roadmap/ROADMAP_2_6.rst:21 msgid "2018-06-25 Release Candidate 4" msgstr "2018 å¹´ 06 月 25 æ—¥ リリース候補 4" #: ../../rst/roadmap/ROADMAP_2_6.rst:22 msgid "2018-06-26 Release Candidate 5" msgstr "2018 å¹´ 06 月 26 æ—¥ リリース候補 5" #: ../../rst/roadmap/ROADMAP_2_6.rst:23 msgid "2018-06-28 Final Release" msgstr "2018 å¹´ 06 月 28 æ—¥ 最終リリース" #: ../../rst/roadmap/ROADMAP_2_6.rst:28 msgid "2.6.0-2.6.12 Matt Clay (IRC/GitHub: @mattclay)" msgstr "2.6.0-2.6.12 Matt Clay (IRC/GitHub: @mattclay)" #: ../../rst/roadmap/ROADMAP_2_6.rst:29 msgid "2.6.13+ Toshio Kuratomi (IRC: abadger1999; GitHub: @abadger)" msgstr "2.6.13+ Toshio Kuratomi (IRC: abadger1999ã€GitHub: @abadger)" #: ../../rst/roadmap/ROADMAP_2_6.rst:35 msgid "Version 2.6 is largely going to be a stabilization release for Core code." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 ã¯ã€ä¸»ã« Core コード用ã®å®‰å®šç‰ˆãƒªãƒªãƒ¼ã‚¹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_6.rst:36 msgid "Some of the items covered in this release, but are not limited to are the following:" msgstr "一部ã®é …ç›®ã¯ã€æœ¬ãƒªãƒªãƒ¼ã‚¹ã§èª¬æ˜Žã•れã¦ã„ã¾ã™ãŒã€ä»¥ä¸‹ã«é™å®šã•れã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_6.rst:38 msgid "``ansible-inventory``" msgstr "``ansible-inventory``" #: ../../rst/roadmap/ROADMAP_2_6.rst:39 msgid "``import_*``" msgstr "``import_*``" #: ../../rst/roadmap/ROADMAP_2_6.rst:40 msgid "``include_*``" msgstr "``include_*``" #: ../../rst/roadmap/ROADMAP_2_6.rst:41 msgid "Test coverage" msgstr "テストカãƒãƒ¬ãƒƒã‚¸" #: ../../rst/roadmap/ROADMAP_2_6.rst:42 msgid "Performance Testing" msgstr "パフォーマンステスト" #: ../../rst/roadmap/ROADMAP_2_6.rst:45 ../../rst/roadmap/ROADMAP_2_7.rst:44 msgid "Core Modules" msgstr "コアモジュール" #: ../../rst/roadmap/ROADMAP_2_6.rst:46 msgid "Adopt-a-module Campaign" msgstr "adopt-a-module キャンペーン" #: ../../rst/roadmap/ROADMAP_2_6.rst:48 msgid "Review current status of all Core Modules" msgstr "ã™ã¹ã¦ã® Core モジュールã®ç¾åœ¨ã®çŠ¶æ…‹ã®ç¢ºèª" #: ../../rst/roadmap/ROADMAP_2_6.rst:49 msgid "Reduce backlog of open issues against these modules" msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã—ã¦ã‚ªãƒ¼ãƒ—ンå•題ã®ãƒãƒƒã‚¯ãƒ­ã‚°ã‚’減らã™" #: ../../rst/roadmap/ROADMAP_2_6.rst:52 ../../rst/roadmap/ROADMAP_2_7.rst:55 msgid "Cloud Modules" msgstr "クラウドモジュール" #: ../../rst/roadmap/ROADMAP_2_6.rst:55 ../../rst/roadmap/ROADMAP_2_7.rst:77 msgid "Network" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" #: ../../rst/roadmap/ROADMAP_2_6.rst:58 msgid "Connection work" msgstr "接続作業" #: ../../rst/roadmap/ROADMAP_2_6.rst:60 msgid "New connection plugin: eAPI `proposal#102 `_" msgstr "æ–°è¦ connection プラグイン: eAPI (`proposal#102 `_)" #: ../../rst/roadmap/ROADMAP_2_6.rst:61 msgid "New connection plugin: NX-API" msgstr "æ–°è¦ connection プラグイン: NX-API" #: ../../rst/roadmap/ROADMAP_2_6.rst:62 msgid "Support for configurable options for network_cli & netconf" msgstr "network_cli & netconf ã®è¨­å®šå¯èƒ½ãªã‚ªãƒ—ションã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/roadmap/ROADMAP_2_6.rst:65 ../../rst/roadmap/ROADMAP_2_7.rst:87 #: ../../rst/roadmap/ROADMAP_2_7.rst:102 msgid "Modules" msgstr "モジュール" #: ../../rst/roadmap/ROADMAP_2_6.rst:67 msgid "New ``net_get`` - platform independent module for pulling configuration via SCP/SFTP over network_cli" msgstr "æ–°ã—ã„ ``net_get`` - network_cli 経由㧠SCP/SFTP を介ã—ã¦è¨­å®šã‚’プルã™ã‚‹ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„モジュール" #: ../../rst/roadmap/ROADMAP_2_6.rst:68 msgid "New ``net_put`` - platform independent module for pushing configuration via SCP/SFTP over network_cli" msgstr "æ–°ã—ã„ ``net_put`` - network_cli 経由㧠SCP/SFTP を介ã—ã¦è¨­å®šã‚’プッシュã™ã‚‹ãƒ—ラットフォームã«ä¾å­˜ã—ãªã„モジュール" #: ../../rst/roadmap/ROADMAP_2_6.rst:69 msgid "New ``netconf_get`` - Netconf module to fetch configuration and state data `proposal#104 `_" msgstr "æ–°ã—ã„ ``netconf_get`` - 設定ãŠã‚ˆã³çŠ¶æ…‹ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ Netconf モジュール (`proposal#104 `_)。" #: ../../rst/roadmap/ROADMAP_2_6.rst:72 msgid "Other Features" msgstr "ãã®ä»–ã®æ©Ÿèƒ½" #: ../../rst/roadmap/ROADMAP_2_6.rst:74 msgid "Stretch & tech preview: Configuration caching for network_cli. Opt-in feature to avoid ``show running`` performance hit" msgstr "ストレッãƒãŠã‚ˆã³ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ãƒ—レビュー: network_cli ã®æ§‹æˆã‚­ãƒ£ãƒƒã‚·ãƒ¥ã€‚``show running`` パフォーマンスヒットを回é¿ã™ã‚‹ã‚ªãƒ—トイン機能" #: ../../rst/roadmap/ROADMAP_2_7.rst:3 msgid "Ansible 2.7" msgstr "Ansible 2.7" #: ../../rst/roadmap/ROADMAP_2_7.rst:13 msgid "2018-08-23 Core Freeze (Engine and Core Modules/Plugins)" msgstr "2018 å¹´ 08 月 23 æ—¥ コアフリーズ (Engine ãŠã‚ˆã³ Core モジュール/プラグイン)" #: ../../rst/roadmap/ROADMAP_2_7.rst:14 msgid "2018-08-23 Alpha Release 1" msgstr "2018 å¹´ 08 月 23 æ—¥ Ahpha リリース 1" #: ../../rst/roadmap/ROADMAP_2_7.rst:15 msgid "2018-08-30 Community Freeze (Non-Core Modules/Plugins)" msgstr "2018 å¹´ 08 月 30 æ—¥ コミュニティーフリーズ (éž Core モジュール/プラグイン)" #: ../../rst/roadmap/ROADMAP_2_7.rst:16 msgid "2018-08-30 Beta Release 1" msgstr "2018 å¹´ 08 月 30 æ—¥ Beta リリース 1" #: ../../rst/roadmap/ROADMAP_2_7.rst:17 msgid "2018-09-06 Release Candidate 1 (If needed)" msgstr "2018 å¹´ 09 月 06 æ—¥ リリース候補 1 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_7.rst:18 msgid "2018-09-13 Release Candidate 2 (If needed)" msgstr "2018 å¹´ 09 月 13æ—¥ リリース候補 2 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_7.rst:19 msgid "2018-09-20 Release Candidate 3 (If needed)" msgstr "2018 å¹´ 09 月 20 æ—¥ リリース候補 3 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_7.rst:20 msgid "2018-09-27 Release Candidate 4 (If needed)" msgstr "2018 å¹´ 09 月 27æ—¥ リリース候補 4 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_7.rst:21 msgid "2018-10-04 General Availability" msgstr "2018 å¹´ 10 月 04 æ—¥ 一般æä¾› (GA)" #: ../../rst/roadmap/ROADMAP_2_7.rst:25 ../../rst/roadmap/ROADMAP_2_8.rst:33 msgid "Toshio Kuratomi (IRC: abadger1999; GitHub: @abadger)" msgstr "Toshio Kuratomi (IRC: abadger1999ã€GitHub: @abadger)" #: ../../rst/roadmap/ROADMAP_2_7.rst:29 msgid "Cleaning Duty" msgstr "è²¬å‹™ã®æ¶ˆåŽ»" #: ../../rst/roadmap/ROADMAP_2_7.rst:31 msgid "Drop Py2.6 for controllers `Docs PR #42971 `_ and `issue #42972 `_" msgstr "コントローラー `Docs PR #42971 `_ ãŠã‚ˆã³ `issue #42972 `_ ã®å ´åˆã¯ã€Py2.6 を破棄ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_7.rst:33 msgid "Remove dependency on simplejson `issue #42761 `_" msgstr "simplejson `issue #42761 `_ ã®ä¾å­˜é–¢ä¿‚を削除ã—ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_7.rst:37 msgid "Engine Improvements" msgstr "ã‚¨ãƒ³ã‚¸ãƒ³ã®æ”¹å–„" #: ../../rst/roadmap/ROADMAP_2_7.rst:39 msgid "Performance improvement invoking Python modules `pr #41749 `_" msgstr "Python モジュール `pr #41749 `_ を呼ã³å‡ºã™ãƒ‘フォーマンスãŒå‘上ã—ã¾ã—ãŸã€‚" #: ../../rst/roadmap/ROADMAP_2_7.rst:40 msgid "Jinja native types will allow for users to render a Python native type. `pr #32738 `_" msgstr "Jinja ãƒã‚¤ãƒ†ã‚£ãƒ–タイプを使用ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ Python ãƒã‚¤ãƒ†ã‚£ãƒ–タイプをレンダリングã§ãã¾ã™ (`pr #32738 `_)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:46 msgid "Include feature changes and improvements" msgstr "機能変更ãŠã‚ˆã³æ”¹å–„ã®è¿½åŠ " #: ../../rst/roadmap/ROADMAP_2_7.rst:48 msgid "Create new argument ``apply`` that will allow for included tasks to inherit explicitly provided attributes. `pr #39236 `_" msgstr "å«ã¾ã‚Œã‚‹ã‚¿ã‚¹ã‚¯ãŒæ˜Žç¤ºçš„ã«æŒ‡å®šã—ãŸå±žæ€§ã‚’継承ã™ã‚‹ã‚ˆã†ã«ã€æ–°ã—ã„引数 ``apply`` を作æˆã—ã¾ã™ (`pr #39236 `)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:49 msgid "Create \"private\" functionality for allowing vars/default to be exposed outside of roles. `pr #41330 `_" msgstr "ロール外㫠vars/default ãŒå…¬é–‹ã•れるよã†ã«ã€Œãƒ—ãƒ©ã‚¤ãƒ™ãƒ¼ãƒˆã€æ©Ÿèƒ½ã‚’作æˆã—ã¾ã™ (`pr #41330 `)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:50 msgid "Provide a parameter for the ``template`` module to output to different encoding formats `pr #42171 `_" msgstr "``template`` モジュールãŒã€ç•°ãªã‚‹ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°å½¢å¼ã«å‡ºåŠ›ã™ã‚‹ãƒ‘ラメーターをæä¾›ã—ã¾ã™ (`pr #42171 `_)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:52 msgid "``reboot`` module for Linux hosts (@samdoran) `pr #35205 `_" msgstr "Linux ホスト㮠``reboot`` モジュール (@samdoran) (`pr #35205 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:58 ../../rst/roadmap/ROADMAP_2_7.rst:80 #: ../../rst/roadmap/ROADMAP_2_7.rst:97 msgid "General" msgstr "全般" #: ../../rst/roadmap/ROADMAP_2_7.rst:59 msgid "Cloud auth plugin `proposal #24 `_" msgstr "クラウドèªè¨¼ãƒ—ラグイン (`proposal #24 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:63 msgid "Inventory plugin for RDS `pr #41919 `_" msgstr "RDS ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグイン (`pr #41919 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:64 msgid "Count support for `ec2_instance`" msgstr "`ec2_instance` ã®ã‚«ã‚¦ãƒ³ãƒˆã‚µãƒãƒ¼ãƒˆ" #: ../../rst/roadmap/ROADMAP_2_7.rst:65 msgid "`aws_eks` module `pr #41183 `_" msgstr "`aws_eks` モジュール `pr #41183 `_" #: ../../rst/roadmap/ROADMAP_2_7.rst:66 msgid "Cloudformation stack sets support (`PR#41669 `_)" msgstr "CloudFormation スタックセットã®ã‚µãƒãƒ¼ãƒˆ (`PR#41669 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:67 msgid "RDS instance and snapshot modules `pr #39994 `_ `pr #43789 `_" msgstr "RDS インスタンスãŠã‚ˆã³ã‚¹ãƒŠãƒƒãƒ—ショットモジュール (`pr #39994 `_ `pr #43789 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:68 msgid "Diff mode improvements for cloud modules `pr #44533 `_" msgstr "クラウドモジュール㮠diff ãƒ¢ãƒ¼ãƒ‰ãŒæ”¹å–„ (`pr #44533 `)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:73 msgid "Azure inventory plugin `issue #42769 `__" msgstr "Azure インベントリープラグイン (`issue #42769 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:82 msgid "Refactor the APIs in cliconf (`issue #39056 `_) and netconf (`issue #39160 `_) plugins so that they have a uniform signature across supported network platforms. **done** (`PR #41846 `_) (`PR #43643 `_) (`PR #43837 `_) (`PR #43203 `_) (`PR #42300 `_) (`PR #44157 `_)" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォーム全体ã§çµ±ä¸€ã•れãŸç½²åã‚’æŒã¤ã‚ˆã†ã« cliconf (`issue #39056 `_) プラグインãŠã‚ˆã³ netconf (`issue #39160 `_) プラグイン㧠API をリファクタリングã™ã‚‹ã€‚**完了** (`PR #41846 `_) (`PR #43643 `_) (`PR #43837 `_) (`PR #43203 `_) (`PR #42300 `_) (`PR #44157 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:89 msgid "New ``cli_config`` module `issue #39228 `_ **done** `PR #42413 `_." msgstr "æ–°ã—ã„ ``cli_config`` モジュール (`issue #39228 `_ **完了** (`PR #42413 `_))。" #: ../../rst/roadmap/ROADMAP_2_7.rst:90 msgid "New ``cli_command`` module `issue #39284 `_" msgstr "æ–°ã—ã„ ``cli_command`` モジュール (`issue #39284 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:91 msgid "Refactor ``netconf_config`` module to add additional functionality. **done** `proposal #104 `_ (`PR #44379 `_)" msgstr "``netconf_config`` モジュールをリファクタリングã—ã¦ã€è¿½åŠ æ©Ÿèƒ½ã‚’è¿½åŠ ã™ã‚‹ **完了** (`proposal #104 `_ (`PR #44379 `_))" #: ../../rst/roadmap/ROADMAP_2_7.rst:99 msgid "Added new connection plugin that uses PSRP as the connection protocol `pr #41729 `__" msgstr "PSRP を接続プロトコルã¨ã—ã¦ä½¿ç”¨ã™ã‚‹æ–°è¦ connection プラグインを追加ã™ã‚‹ (`pr #41729 `_)。" #: ../../rst/roadmap/ROADMAP_2_7.rst:104 msgid "Revamp Chocolatey to fix bugs and support offline installation `pr #43013 `_." msgstr "Chocolatey を改良ã—ã¦ãƒã‚°ã‚’修正ã—ã€ã‚ªãƒ•ラインインストールをサãƒãƒ¼ãƒˆã™ã‚‹ (`pr #43013 `_)" #: ../../rst/roadmap/ROADMAP_2_7.rst:105 msgid "Add Chocolatey modules that can manage the following Chocolatey features" msgstr "以下㮠Chocolatey 機能を管ç†ã§ãã‚‹ Chocolatey モジュールを追加ã™ã‚‹ã€‚" #: ../../rst/roadmap/ROADMAP_2_7.rst:107 msgid "`Sources `_ `pr #42790 `_" msgstr "`Sources `_ `pr #42790 `_" #: ../../rst/roadmap/ROADMAP_2_7.rst:108 msgid "`Features `_ `pr #42848 `_" msgstr "`Features `_ `pr #42848 `_" #: ../../rst/roadmap/ROADMAP_2_7.rst:109 msgid "`Config `_ `pr #42915 `_" msgstr "`Config `_ `pr #42915 `_" #: ../../rst/roadmap/ROADMAP_2_8.rst:3 msgid "Ansible 2.8" msgstr "Ansible 2.8" #: ../../rst/roadmap/ROADMAP_2_8.rst:14 ../../rst/roadmap/ROADMAP_2_9.rst:14 msgid "PRs must be raised well in advance of the dates below to have a chance of being included in this Ansible release." msgstr "ãƒ—ãƒ«è¦æ±‚ã¯ã€ã“ã® Ansible リリースã«å«ã¾ã‚Œã‚‹å¯èƒ½æ€§ã‚’高ã‚ã‚‹ãŸã‚ã«ã€ä»¥ä¸‹ã®æœŸæ—¥ã«é–“ã«åˆã†ã‚ˆã†ã«ã€å分ãªä½™è£•ã‚’ã‚‚ã£ã¦ææ¡ˆã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ROADMAP_2_8.rst:16 msgid "2019-04-04 Alpha 1 **Core freeze** No new features to ``support:core`` code. Includes no new options to existing Core modules" msgstr "2019 å¹´ 04 月 04 æ—¥ Alpha 1 **コアフリーズ** ``support:core`` コードã¸ã®æ–°æ©Ÿèƒ½ã¯ã‚りã¾ã›ã‚“。既存ã®ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ–°ã—ã„オプションã¯å«ã¾ã‚Œã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_8.rst:20 msgid "2019-04-11 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code" msgstr "2019 å¹´ 04 月 11 æ—¥ ベータ 1 ** 機能フリーズ** ã„ãšã‚Œã®ã‚³ãƒ¼ãƒ‰ã¸ã®æ–°æ©Ÿèƒ½ãªã— (モジュール/プラグインをå«ã‚€)" #: ../../rst/roadmap/ROADMAP_2_8.rst:23 msgid "2019-04-25 Release Candidate 1" msgstr "2019 å¹´ 04 月 25 æ—¥ リリース候補 1" #: ../../rst/roadmap/ROADMAP_2_8.rst:24 msgid "2019-05-02 Release Candidate 2" msgstr "2019 å¹´ 05 月 02 æ—¥ リリース候補 2" #: ../../rst/roadmap/ROADMAP_2_8.rst:25 msgid "2019-05-10 Release Candidate 3" msgstr "2019 å¹´ 05 月 10 æ—¥ リリース候補 3" #: ../../rst/roadmap/ROADMAP_2_8.rst:26 msgid "2019-05-16 Release" msgstr "2019 å¹´ 05 月 16 æ—¥ リリース" #: ../../rst/roadmap/ROADMAP_2_8.rst:38 msgid "See the `Ansible 2.8 Project Board `_" msgstr "「`Ansible 2.8 Project Board `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ROADMAP_2_9.rst:3 msgid "Ansible 2.9" msgstr "Ansible 2.9" #: ../../rst/roadmap/ROADMAP_2_9.rst:16 msgid "There is no Alpha phase in 2.9." msgstr "2.9 ã«ã¯ã€Alpha フェーズã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_9.rst:18 msgid "2019-08-29 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code" msgstr "2019 å¹´ 08 月 29 æ—¥ Beta 1 **機能フリーズ** ã©ã®ã‚³ãƒ¼ãƒ‰ã«ã‚‚æ–°ã—ã„æ©Ÿèƒ½ (モジュールã€ãƒ—ラグインãªã©) ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ROADMAP_2_9.rst:21 msgid "2019-09-19 Release Candidate 1" msgstr "2019 å¹´ 09 月 19 æ—¥ リリースã®å€™è£œ 1" #: ../../rst/roadmap/ROADMAP_2_9.rst:22 msgid "2019-10-03 Release Candidate 2" msgstr "2019 å¹´ 10 月 03 æ—¥ リリースã®å€™è£œ 2" #: ../../rst/roadmap/ROADMAP_2_9.rst:23 msgid "2019-10-10 Release Candidate 3" msgstr "2019 å¹´ 10 月 10 æ—¥ リリースã®å€™è£œ 3" #: ../../rst/roadmap/ROADMAP_2_9.rst:24 msgid "2019-10-17 Release Candidate 4 (if needed)" msgstr "2019 å¹´ 10 月 17 æ—¥ リリースã®å€™è£œ 4 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_9.rst:25 msgid "2019-10-24 Release Candidate 5 (if needed)" msgstr "2019 å¹´ 10 月 24 æ—¥ リリースã®å€™è£œ 5 (å¿…è¦ãªå ´åˆ)" #: ../../rst/roadmap/ROADMAP_2_9.rst:26 msgid "2019-10-31 Release" msgstr "2019 å¹´ 10 月 31 æ—¥ リリース" #: ../../rst/roadmap/ROADMAP_2_9.rst:32 msgid "TBD" msgstr "TBD" #: ../../rst/roadmap/ROADMAP_2_9.rst:34 msgid "Temporarily, Matt Davis (@nitzmahone) or Matt Clay (@mattclay) on IRC or github." msgstr "IRC ã¾ãŸã¯ github ã§ã€æš«å®šçš„ã« Matt Davis (@nitzmahone) ã¾ãŸã¯ Matt Clay (@mattclay) ãŒæ‹…当ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/ROADMAP_2_9.rst:39 msgid "See the `Ansible 2.9 Project Board `_" msgstr "「`Ansible 2.9 Project Board `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:4 #: ../../rst/roadmap/ansible_core_roadmap_index.rst:26 msgid "ansible-core Roadmaps" msgstr "ansible-core ロードマップ" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:6 msgid "The ``ansible-core`` team develops a roadmap for each major and minor ``ansible-core`` release. The latest roadmap shows current work; older roadmaps provide a history of the project. We don't publish roadmaps for subminor versions. So 2.10 and 2.11 have roadmaps, but 2.10.1 does not." msgstr "``ansible-core`` ãƒãƒ¼ãƒ ã¯ã€``ansible-core`` ã®å„メジャーリリースã¨ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—を開発ã—ã¦ã„ã¾ã™ã€‚最新ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã¯ç¾åœ¨ã®ä½œæ¥­ã‚’示ã—ã€å¤ã„ロードマップã¯ãƒ—ロジェクトã®å±¥æ­´ã‚’示ã—ã¾ã™ã€‚サブマイナーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã¯å…¬é–‹ã—ã¦ã„ã¾ã›ã‚“。2.10 㨠2.11 ã«ã¯ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ãŒã‚りã¾ã™ãŒã€2.10.1 ã«ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:10 msgid "Ansible renamed ``ansible-base`` to ``ansible-core``." msgstr "Ansible ã®åå‰ã¯ ``ansible-base`` ã‹ã‚‰ ``ansible-core`` ã«å¤‰æ›´ã—ã¾ã—ãŸã€‚" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:12 #: ../../rst/roadmap/ansible_roadmap_index.rst:8 msgid "We incorporate team and community feedback in each roadmap, and aim for further transparency and better inclusion of both community desires and submissions." msgstr "å„ロードマップã«ãƒãƒ¼ãƒ ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ãƒ•ィードãƒãƒƒã‚¯ã‚’組ã¿è¾¼ã‚€ã“ã¨ã§ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®è¦æœ›ã¨æä¾›ã•れãŸã‚‚ã®ã‚’より多ã追加ã—ã€é€æ˜Žæ€§ã‚‚より高ã„ã‚‚ã®ã«ã™ã‚‹ã“ã¨ã‚’目指ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:14 msgid "Each roadmap offers a *best guess*, based on the ``ansible-core`` team's experience and on requests and feedback from the community, of what will be included in a given release. However, some items on the roadmap may be dropped due to time constraints, lack of community maintainers, and so on." msgstr "å„ロードマップã¯ã€``ansible-core`` ãƒãƒ¼ãƒ ã®çµŒé¨“ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‹ã‚‰ã®è¦æ±‚やフィードãƒãƒƒã‚¯ã«åŸºã¥ã„ã¦ã€ç‰¹å®šã®ãƒªãƒªãƒ¼ã‚¹ã«ä½•ãŒå«ã¾ã‚Œã‚‹ã‹ã«ã¤ã„㦠*æœ€è‰¯ã®æŽ¨æ¸¬* ã‚’æä¾›ã—ã¾ã™ã€‚ãŸã ã—ã€ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã®ä¸€éƒ¨ã®é …ç›®ã¯ã€æ™‚間的制約ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ä¸è¶³ãªã©ã®ãŸã‚ã«å‰Šé™¤ã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:16 msgid "Each roadmap is published both as an idea of what is upcoming in ``ansible-core``, and as a medium for seeking further feedback from the community." msgstr "å„ロードマップã¯ã€``ansible-core`` ã®ä»Šå¾Œã®äºˆå®šã€ãŠã‚ˆã³ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‹ã‚‰ã®ãƒ•ィードãƒãƒƒã‚¯ã‚’募る媒体ã¨ã—ã¦å…¬é–‹ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:18 #: ../../rst/roadmap/ansible_roadmap_index.rst:14 msgid "You can submit feedback on the current roadmap in multiple ways:" msgstr "ç¾åœ¨ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã«é–¢ã™ã‚‹ãƒ•ィードãƒãƒƒã‚¯ã¯ã€è¤‡æ•°ã®æ–¹æ³•ã§é€ä¿¡ã§ãã¾ã™ã€‚" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:20 msgid "Edit the agenda of an `Core Team Meeting `_ (preferred)" msgstr "`Core Team Meeting `_ ã®è­°é¡Œã‚’編集 (推奨)" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:21 msgid "Post on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)" msgstr "``#ansible-devel`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«æŠ•稿(ansible.im ã®è¡¨ã‚’使用ã™ã‚‹ã‹ã€`irc.libera.chat `_ ã§ IRC を使用)" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:22 msgid "Email the ansible-devel list" msgstr "ansible-devel リストã¸ã®ãƒ¡ãƒ¼ãƒ«é€ä¿¡" #: ../../rst/roadmap/ansible_core_roadmap_index.rst:24 msgid "See :ref:`Ansible communication channels ` for details on how to join and use the email lists and chat channels." msgstr "メーリングリストãŠã‚ˆã³ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã—ã¦ä½¿ç”¨ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`Ansible communication channels `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/ansible_roadmap_index.rst:21 msgid "Ansible Release Roadmaps" msgstr "Ansible リリースロードマップ" #: ../../rst/roadmap/ansible_roadmap_index.rst:4 msgid "Ansible Roadmap" msgstr "Ansible ロードマップ" #: ../../rst/roadmap/ansible_roadmap_index.rst:6 msgid "The Ansible team develops a roadmap for each major and minor Ansible release. The latest roadmap shows current work; older roadmaps provide a history of the project. We don't publish roadmaps for subminor versions. So 2.10 and 2.11 have roadmaps, but 2.10.1 does not." msgstr "Ansible ãƒãƒ¼ãƒ ã¯ã€Ansible ã®å„メジャーリリースã¨ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—を開発ã—ã¦ã„ã¾ã™ã€‚最新ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã¯ç¾åœ¨ã®ä½œæ¥­ã‚’示ã—ã€å¤ã„ロードマップã¯ãƒ—ロジェクトã®å±¥æ­´ã‚’示ã—ã¾ã™ã€‚サブマイナーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã¯å…¬é–‹ã—ã¦ã„ã¾ã›ã‚“。2.10 㨠2.11 ã«ã¯ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ãŒã‚りã¾ã™ãŒã€2.10.1 ã«ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/roadmap/ansible_roadmap_index.rst:10 msgid "Each roadmap offers a *best guess*, based on the Ansible team's experience and on requests and feedback from the community, of what will be included in a given release. However, some items on the roadmap may be dropped due to time constraints, lack of community maintainers, and so on." msgstr "å„ロードマップã¯ã€Ansible ãƒãƒ¼ãƒ ã®çµŒé¨“ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‹ã‚‰ã®è¦æ±‚やフィードãƒãƒƒã‚¯ã«åŸºã¥ã„ã¦ã€ç‰¹å®šã®ãƒªãƒªãƒ¼ã‚¹ã«ä½•ãŒå«ã¾ã‚Œã‚‹ã‹ã«ã¤ã„㦠*æœ€è‰¯ã®æŽ¨æ¸¬* ã‚’æä¾›ã—ã¾ã™ã€‚ãŸã ã—ã€ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã®ä¸€éƒ¨ã®é …ç›®ã¯ã€æ™‚間的制約ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ä¸è¶³ãªã©ã®ãŸã‚ã«å‰Šé™¤ã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/roadmap/ansible_roadmap_index.rst:12 msgid "Each roadmap is published both as an idea of what is upcoming in Ansible, and as a medium for seeking further feedback from the community." msgstr "å„ロードマップã¯ã€Ansible ã®ä»Šå¾Œã®äºˆå®šã€ãŠã‚ˆã³ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‹ã‚‰ã®ãƒ•ィードãƒãƒƒã‚¯ã‚’募る媒体ã¨ã—ã¦å…¬é–‹ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/roadmap/ansible_roadmap_index.rst:16 msgid "Edit the agenda of an `Ansible Community Meeting `_ (preferred)" msgstr "`Ansible Community Meeting `_ ã®è­°é¡Œã‚’編集 (推奨)" #: ../../rst/roadmap/ansible_roadmap_index.rst:17 msgid "Post on the ``#ansible-community`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_)" msgstr "``#ansible-community`` ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«æŠ•稿(ansible.im ã®è¡¨ã‚’使用ã™ã‚‹ã‹ã€`irc.libera.chat `_ ã§ IRC を使用)" #: ../../rst/roadmap/ansible_roadmap_index.rst:19 msgid "See :ref:`Ansible communication channels ` for details on how to join and use our chat channels." msgstr "ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã«å‚加ã—ã¦ä½¿ç”¨ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`Ansible communication channels `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/roadmap/index.rst:4 msgid "Roadmaps" msgstr "ロードマップ" #: ../../rst/roadmap/old_roadmap_index.rst:4 #: ../../rst/roadmap/old_roadmap_index.rst:10 msgid "Older Roadmaps" msgstr "å¤ã„ロードマップ" #: ../../rst/roadmap/old_roadmap_index.rst:6 msgid "Older roadmaps are listed here to provide a history of the Ansible project." msgstr "Ansible プロジェクトã®å±¥æ­´ã¯ã€ä»¥ä¸‹ã«ç¤ºã™ä»¥å‰ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã‹ã‚‰ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/roadmap/old_roadmap_index.rst:8 msgid "See :ref:`roadmaps` to find current Ansible and ``ansible-base`` roadmaps." msgstr "ç¾åœ¨ã® Ansible ãŠã‚ˆã³ ``ansible-base`` ã®ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—を確èªã™ã‚‹ã«ã¯ã€ã€Œ:ref:`roadmaps`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "The rough schedule for Ansible-2.11 and beyond (such as how many months we'll aim for between versions) is still to be discussed and likely will be made after 2.10.0 has been released." #~ msgstr "Ansible-2.11 以é™ã®å¤§ã¾ã‹ãªã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ« (ãƒãƒ¼ã‚¸ãƒ§ãƒ³é–“ã®ç›®æ¨™æ•°ãªã©) ã¯ä¾ç„¶ã¨ã—ã¦æ¤œè¨Žã•れã¦ãŠã‚Šã€2.10.0 ã®ãƒªãƒªãƒ¼ã‚¹å¾Œã«è¡Œã‚れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #~ msgid "New Collections will be reviewed for inclusion in Ansible 4." #~ msgstr "æ–°ã—ã„コレクションã¯ã€Ansible 4 ã«å«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãƒ¬ãƒ“ューã•れã¦ã„ã¾ã™ã€‚" #~ msgid "Post on the ``#ansible-devel`` Freenode IRC channel" #~ msgstr "Freenode IRC ãƒãƒ£ãƒ³ãƒãƒ« ``#ansible-devel`` ã§ç™ºè¨€" #~ msgid "Post on the ``#ansible-community`` Freenode IRC channel" #~ msgstr "Freenode IRC ãƒãƒ£ãƒ³ãƒãƒ« ``#ansible-community`` ã§ç™ºè¨€" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.493556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/scenario_guides.po0000644000000000000000000236524500000000000026615 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2019 Red Hat, Inc. # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/scenario_guides/cloud_guides.rst:5 #: ../../rst/scenario_guides/guides.rst:12 msgid "Public Cloud Guides" msgstr "パブリッククラウドガイド" #: ../../rst/scenario_guides/cloud_guides.rst:7 msgid "The guides in this section cover using Ansible with a range of public cloud platforms. They explore particular use cases in greater depth and provide a more \"top-down\" explanation of some basic features." msgstr "本セクションã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã•ã¾ã–ã¾ãªãƒ‘ブリッククラウドプラットフォームã§ã® Ansible ã®ä½¿ç”¨ã‚’説明ã—ã¾ã™ã€‚特定ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã€ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªæ©Ÿèƒ½ã‚’「トップダウンã€ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:4 msgid "Cisco ACI Guide" msgstr "Cisco ACI ガイド" #: ../../rst/scenario_guides/guide_aci.rst:10 msgid "What is Cisco ACI ?" msgstr "Cisco ACI ã¨ã¯" #: ../../rst/scenario_guides/guide_aci.rst:13 msgid "Application Centric Infrastructure (ACI)" msgstr "ACI (Application Centric Infrastructure)" #: ../../rst/scenario_guides/guide_aci.rst:14 msgid "The Cisco Application Centric Infrastructure (ACI) allows application requirements to define the network. This architecture simplifies, optimizes, and accelerates the entire application deployment life cycle." msgstr "ACI (Cisco Application Centric Infrastructure) を使用ã™ã‚‹ã¨ã€ã‚¢ãƒ—リケーションè¦ä»¶ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’定義ã§ãã¾ã™ã€‚ã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã¯ã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントライフサイクル全体をå˜ç´”化ã—ã€æœ€é©åŒ–ã—ã€é«˜é€ŸåŒ–ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:18 msgid "Application Policy Infrastructure Controller (APIC)" msgstr "APIC (Application Policy Infrastructure Controller)" #: ../../rst/scenario_guides/guide_aci.rst:19 msgid "The APIC manages the scalable ACI multi-tenant fabric. The APIC provides a unified point of automation and management, policy programming, application deployment, and health monitoring for the fabric. The APIC, which is implemented as a replicated synchronized clustered controller, optimizes performance, supports any application anywhere, and provides unified operation of the physical and virtual infrastructure." msgstr "APIC ã¯ã€ã‚¹ã‚±ãƒ¼ãƒ©ãƒ–ル㪠ACI マルãƒãƒ†ãƒŠãƒ³ãƒˆãƒ•ァブリックを管ç†ã—ã¾ã™ã€‚APIC ã¯ã€ãƒ•ァブリックã®è‡ªå‹•化ã¨ç®¡ç†ã€ãƒãƒªã‚·ãƒ¼ãƒ—ログラミングã€ã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントã€ãƒ˜ãƒ«ã‚¹ãƒ¢ãƒ‹ã‚¿ãƒªãƒ³ã‚°ã®çµ±åˆãƒã‚¤ãƒ³ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚APIC ã¯ã€è¤‡è£½ã•れãŸåŒæœŸã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¨ã—ã¦å®Ÿè£…ã•れã€ãƒ‘フォーマンスを最é©åŒ–ã—ã€ä»»æ„ã®ã‚¢ãƒ—リケーションをã©ã“ã§ã‚‚サãƒãƒ¼ãƒˆã—ã€ç‰©ç†ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ãŠã‚ˆã³ä»®æƒ³ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®çµ±ä¸€ã•ã‚ŒãŸæ“作をæä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:21 msgid "The APIC enables network administrators to easily define the optimal network for applications. Data center operators can clearly see how applications consume network resources, easily isolate and troubleshoot application and infrastructure problems, and monitor and profile resource usage patterns." msgstr "APIC ã«ã‚ˆã‚Šã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç®¡ç†è€…ã¯ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«æœ€é©ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ç°¡å˜ã«å®šç¾©ã§ãã¾ã™ã€‚データセンターオペレーターã¯ã€ã‚¢ãƒ—リケーションãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã‚’ã©ã®ã‚ˆã†ã«æ¶ˆè²»ã™ã‚‹ã‹ã‚’明確ã«ç¢ºèªã—ã€ã‚¢ãƒ—リケーションã¨ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®å•題を簡å˜ã«ç‰¹å®šã—ã¦ãƒˆãƒ©ãƒ–ルシューティングを行ã„ã€ãƒªã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨çжæ³ãƒ‘ターンを監視ãŠã‚ˆã³ãƒ—ロファイルã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:23 msgid "The Cisco Application Policy Infrastructure Controller (APIC) API enables applications to directly connect with a secure, shared, high-performance resource pool that includes network, compute, and storage capabilities." msgstr "APIC (Cisco Application Policy Infrastructure Controller) API を使用ã™ã‚‹ã¨ã€ã‚¢ãƒ—リケーションã¨ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã‚³ãƒ³ãƒ”ュートã€ãŠã‚ˆã³ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã®æ©Ÿèƒ½ã‚’å«ã‚€ã€å®‰å…¨ã§å…±æœ‰ã•れã¦ã„る高性能リソースプールを直接接続ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:27 msgid "ACI Fabric" msgstr "ACI Fabric" #: ../../rst/scenario_guides/guide_aci.rst:28 msgid "The Cisco Application Centric Infrastructure (ACI) Fabric includes Cisco Nexus 9000 Series switches with the APIC to run in the leaf/spine ACI fabric mode. These switches form a \"fat-tree\" network by connecting each leaf node to each spine node; all other devices connect to the leaf nodes. The APIC manages the ACI fabric." msgstr "Cisco ACI (Application Centric Infrastructure) Fabric ã«ã¯ã€ãƒªãƒ¼ãƒ•/スパイン㮠ACI ファブリックモードã§å®Ÿè¡Œã™ã‚‹ APIC ã‚’æ­è¼‰ã—㟠Cisco Nexus 9000 シリーズスイッãƒã¨åŒæ¢±ã•れã¾ã™ã€‚ã“ã®ã‚¹ã‚¤ãƒƒãƒã¯ã€å„リーフノードをå„ã‚¹ãƒ‘ã‚¤ãƒ³ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã€ãã®ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ãƒªãƒ¼ãƒ•ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã§ã€Œfat-treeã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’å½¢æˆã—ã¾ã™ã€‚APIC 㯠ACI ファブリックを管ç†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:30 msgid "The ACI fabric provides consistent low-latency forwarding across high-bandwidth links (40 Gbps, with a 100-Gbps future capability). Traffic with the source and destination on the same leaf switch is handled locally, and all other traffic travels from the ingress leaf to the egress leaf through a spine switch. Although this architecture appears as two hops from a physical perspective, it is actually a single Layer 3 hop because the fabric operates as a single Layer 3 switch." msgstr "ACI ファブリックã¯ã€é«˜å¸¯åŸŸå¹…ã®ãƒªãƒ³ã‚¯ã§ä¸€è²«ã—ãŸä½Žãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼è»¢é€ã‚’æä¾›ã—ã¾ã™ (40 Gbpsã€å°†æ¥çš„ã«ã¯ 100-Gbps)。é€ä¿¡å…ƒãŠã‚ˆã³å®›å…ˆãŒåŒã˜ãƒªãƒ¼ãƒ•スイッãƒã«ã‚るトラフィックã¯ãƒ­ãƒ¼ã‚«ãƒ«ã§å‡¦ç†ã•れã€ä»–ã®ã™ã¹ã¦ã®ãƒˆãƒ©ãƒ•ィックã¯ã‚¹ãƒ‘インスイッãƒã‚’介ã—ã¦å…¥åŠ›ãƒªãƒ¼ãƒ•ã‹ã‚‰å‡ºåŠ›ãƒªãƒ¼ãƒ•ã«é€ä¿¡ã•れã¾ã™ã€‚ã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã¯ã€ç‰©ç†çš„ã«ã¯ 2 ã¤ã®ãƒ›ãƒƒãƒ—ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ãŒã€ã“ã®ãƒ•ァブリックãŒå˜ä¸€ã® Layer 3 スイッãƒã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã€å®Ÿéš›ã«ã¯å˜ä¸€ã® Layer 3 ホップã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:32 msgid "The ACI fabric object-oriented operating system (OS) runs on each Cisco Nexus 9000 Series node. It enables programming of objects for each configurable element of the system. The ACI fabric OS renders policies from the APIC into a concrete model that runs in the physical infrastructure. The concrete model is analogous to compiled software; it is the form of the model that the switch operating system can execute." msgstr "ACI ファブリックオブジェクト指å‘ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ  (OS) ã¯ã€ãれãžã‚Œã® Cisco Nexus 9000 シリーズノードã§å®Ÿè¡Œã—ã¾ã™ã€‚ACI ファブリック OS ã¯ã€APIC ã‹ã‚‰ã®ãƒãƒªã‚·ãƒ¼ã‚’物ç†ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã§å®Ÿè¡Œã™ã‚‹å…·ä½“çš„ãªãƒ¢ãƒ‡ãƒ«ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã—ã¾ã™ã€‚具体的ãªãƒ¢ãƒ‡ãƒ«ã¯ã€ã‚³ãƒ³ãƒ‘イルã•れãŸã‚½ãƒ•トウェアã«ä¼¼ã¦ã„ã¾ã™ã€‚ã“れã¯ã€ã‚¹ã‚¤ãƒƒãƒã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’実行ã§ãるモデルã®å½¢å¼ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:34 msgid "All the switch nodes contain a complete copy of the concrete model. When an administrator creates a policy in the APIC that represents a configuration, the APIC updates the logical model. The APIC then performs the intermediate step of creating a fully elaborated policy that it pushes into all the switch nodes where the concrete model is updated." msgstr "ã™ã¹ã¦ã®ã‚¹ã‚¤ãƒƒãƒãƒŽãƒ¼ãƒ‰ã«ã¯ã€å…·ä½“çš„ãªãƒ¢ãƒ‡ãƒ«ã®å®Œå…¨ãªã‚³ãƒ”ーãŒå«ã¾ã‚Œã¾ã™ã€‚管ç†è€…ãŒè¨­å®šã‚’表㙠APIC ã«ãƒãƒªã‚·ãƒ¼ã‚’作æˆã™ã‚‹ã¨ã€APIC ã¯è«–ç†ãƒ¢ãƒ‡ãƒ«ã‚’æ›´æ–°ã—ã¾ã™ã€‚ãã®å¾Œã€APIC ã¯ã€å…·ä½“çš„ãªãƒ¢ãƒ‡ãƒ«ãŒæ›´æ–°ã•れるã™ã¹ã¦ã®ã‚¹ã‚¤ãƒƒãƒãƒŽãƒ¼ãƒ‰ã«ãƒ—ッシュã•ã‚Œã‚‹å®Œå…¨ã«æ”¹è‰¯ã•れãŸãƒãƒªã‚·ãƒ¼ã‚’作æˆã™ã‚‹ä¸­é–“ステップを実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:36 msgid "The APIC is responsible for fabric activation, switch firmware management, network policy configuration, and instantiation. While the APIC acts as the centralized policy and network management engine for the fabric, it is completely removed from the data path, including the forwarding topology. Therefore, the fabric can still forward traffic even when communication with the APIC is lost." msgstr "APIC ã¯ã€ãƒ•ァブリックã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–化ã€ãƒ•ァームウェア管ç†ã®åˆ‡ã‚Šæ›¿ãˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒªã‚·ãƒ¼ã®è¨­å®šã€ãŠã‚ˆã³ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–を行ã„ã¾ã™ã€‚APIC ã¯ãã®ãƒ•ァブリックã®é›†ä¸­ç®¡ç†ãƒãƒªã‚·ãƒ¼ãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç®¡ç†ã‚¨ãƒ³ã‚¸ãƒ³ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ãŒã€è»¢é€ãƒˆãƒãƒ­ã‚¸ãƒ¼ã‚’å«ã‚€ãƒ‡ãƒ¼ã‚¿ãƒ‘スã‹ã‚‰å®Œå…¨ã«å‰Šé™¤ã•れã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ãƒ•ァブリック㯠APIC ã¨ã®é€šä¿¡ãŒå¤±ã‚れã¦ã‚‚トラフィックを転é€ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:40 #: ../../rst/scenario_guides/guide_aci.rst:285 #: ../../rst/scenario_guides/guide_aci.rst:435 #: ../../rst/scenario_guides/guide_aci.rst:528 msgid "More information" msgstr "詳細情報" #: ../../rst/scenario_guides/guide_aci.rst:41 msgid "Various resources exist to start learning ACI, here is a list of interesting articles from the community." msgstr "ACI ã®å­¦ç¿’ã‚’é–‹å§‹ã™ã‚‹ãŸã‚ã®ã•ã¾ã–ã¾ãªãƒªã‚½ãƒ¼ã‚¹ãŒå­˜åœ¨ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‹ã‚‰ã®èˆˆå‘³æ·±ã„記事を記載ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:43 msgid "`Adam Raffe: Learning ACI `_" msgstr "`Adam Raffe: Learning ACI `_" #: ../../rst/scenario_guides/guide_aci.rst:44 msgid "`Luca Relandini: ACI for dummies `_" msgstr "`Luca Relandini: ACI for dummies `_" #: ../../rst/scenario_guides/guide_aci.rst:45 msgid "`Cisco DevNet Learning Labs about ACI `_" msgstr "`Cisco DevNet Learning Labs about ACI `_" #: ../../rst/scenario_guides/guide_aci.rst:51 msgid "Using the ACI modules" msgstr "ACI モジュールã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_aci.rst:52 msgid "The Ansible ACI modules provide a user-friendly interface to managing your ACI environment using Ansible playbooks." msgstr "Ansible ACI モジュールã¯ã€Ansible Playbook を使用ã—㦠ACI 環境を管ç†ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•レンドリーãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:54 msgid "For instance ensuring that a specific tenant exists, is done using the following Ansible task using the aci_tenant module:" msgstr "ãŸã¨ãˆã°ã€ç‰¹å®šã®ãƒ†ãƒŠãƒ³ãƒˆãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€aci_tenant モジュールを使用ã—ã¦ä»¥ä¸‹ã® Ansible タスクを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:68 msgid "A complete list of existing ACI modules is available on the content tab of the `ACI collection on Ansible Galaxy `_." msgstr "既存㮠ACI モジュールã®å®Œå…¨ãªä¸€è¦§ã¯ã€ã€Œ`Ansible Galaxy ã§ã® ACI コレクション `_ã€ã«ã‚るコンテンツタブã§ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:70 msgid "If you want to learn how to write your own ACI modules to contribute, look at the :ref:`Developing Cisco ACI modules ` section." msgstr "独自㮠ACI モジュールを作æˆã—ã¦è²¢çŒ®ã™ã‚‹æ–¹æ³•ã‚’å­¦ã¶å ´åˆã¯ã€ã€Œ:ref:`Cisco ACI モジュールã®é–‹ç™º `ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:73 msgid "Querying ACI configuration" msgstr "ACI 設定ã®ã‚¯ã‚¨ãƒªãƒ¼" #: ../../rst/scenario_guides/guide_aci.rst:75 msgid "A module can also be used to query a specific object." msgstr "モジュールã¯ã€ç‰¹å®šã®ã‚ªãƒ–ジェクトã®ã‚¯ã‚¨ãƒªãƒ¼ã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:89 msgid "Or query all objects." msgstr "ã¾ãŸã¯ã€ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトをクエリーã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:102 msgid "After registering the return values of the aci_tenant task as shown above, you can access all tenant information from variable ``all_tenants``." msgstr "上記ã®ã‚ˆã†ã« aci_tenant ã‚¿ã‚¹ã‚¯ã®æˆ»ã‚Šå€¤ã‚’登録ã—ãŸå¾Œã€å¤‰æ•° ``all_tenants`` ã‹ã‚‰ã™ã¹ã¦ã®ãƒ†ãƒŠãƒ³ãƒˆæƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:106 msgid "Running on the controller locally" msgstr "コントローラーã§ãƒ­ãƒ¼ã‚«ãƒ«ã«å®Ÿè¡Œ" #: ../../rst/scenario_guides/guide_aci.rst:107 msgid "As originally designed, Ansible modules are shipped to and run on the remote target(s), however the ACI modules (like most network-related modules) do not run on the network devices or controller (in this case the APIC), but they talk directly to the APIC's REST interface." msgstr "最åˆã«è¨­è¨ˆã•れãŸã‚ˆã†ã«ã€Ansible モジュールã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«åŒæ¢±ã•れã€å®Ÿè¡Œã—ã¾ã™ãŒã€ACI モジュール (ã»ã¨ã‚“ã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©) ã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚„コントローラー (ã“ã®å ´åˆã¯ APIC) ã§ã¯å‹•作ã—ã¾ã›ã‚“ãŒã€APIC ã® REST インターフェースã¨ç›´æŽ¥å¯¾è©±ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:109 msgid "For this very reason, the modules need to run on the local Ansible controller (or are delegated to another system that *can* connect to the APIC)." msgstr "ã“ã®ãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã® Ansible コントローラーã§å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (ã¾ãŸã¯ã€APIC ã«æŽ¥ç¶š *ã§ãã‚‹* 別ã®ã‚·ã‚¹ãƒ†ãƒ ã«å§”è­²ã•れã¾ã™)。" #: ../../rst/scenario_guides/guide_aci.rst:113 msgid "Gathering facts" msgstr "ファクトã®åŽé›†" #: ../../rst/scenario_guides/guide_aci.rst:114 msgid "Because we run the modules on the Ansible controller gathering facts will not work. That is why when using these ACI modules it is mandatory to disable facts gathering. You can do this globally in your ``ansible.cfg`` or by adding ``gather_facts: no`` to every play." msgstr "Ansible コントローラーã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãŸã‚ã€ãƒ•ァクトã®åŽé›†ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。ãã®ãŸã‚ã€ã“れら㮠ACI モジュールを使用ã™ã‚‹å ´åˆã¯ãƒ•ァクトã®åŽé›†ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€``ansible.cfg`` ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¡Œã†ã‹ã€ã™ã¹ã¦ã®ãƒ—レイ㫠``gather_facts: no`` を追加ã—ã¦è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:128 msgid "Delegating to localhost" msgstr "ローカルホストã¸ã®å§”è­²" #: ../../rst/scenario_guides/guide_aci.rst:129 msgid "So let us assume we have our target configured in the inventory using the FQDN name as the ``ansible_host`` value, as shown below." msgstr "ãã®ãŸã‚ã€ä»¥ä¸‹ã«ç¤ºã™ã‚ˆã†ã«ã€FQDN åã‚’ ``ansible_host`` 値ã¨ã—ã¦ä½¿ç”¨ã—ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’インベントリーã«è¨­å®šã—ãŸã¨ä»®å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:140 msgid "One way to set this up is to add to every task the directive: ``delegate_to: localhost``." msgstr "ã“れを設定ã™ã‚‹æ–¹æ³•ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ (``delegate_to: localhost``) ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:155 msgid "If one would forget to add this directive, Ansible will attempt to connect to the APIC using SSH and attempt to copy the module and run it remotely. This will fail with a clear error, yet may be confusing to some." msgstr "ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã®è¿½åŠ ã‚’å¿˜ã‚Œã‚‹ã¨ã€Ansible 㯠SSH を使用ã—㦠APIC ã¸ã®æŽ¥ç¶šã‚’試ã¿ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コピーã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã§å®Ÿè¡Œã—よã†ã¨ã—ã¾ã™ã€‚ã“れã¯ã‚¯ãƒªã‚¢ã‚¨ãƒ©ãƒ¼ã§å¤±æ•—ã—ã¾ã™ãŒã€æ··ä¹±ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:159 msgid "Using the local connection method" msgstr "ローカル接続方法ã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_aci.rst:160 msgid "Another option frequently used, is to tie the ``local`` connection method to this target so that every subsequent task for this target will use the local connection method (hence run it locally, rather than use SSH)." msgstr "よã使用ã•れる別ã®ã‚ªãƒ—ションã¯ã€``local`` 接続方法をã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«çµã³ä»˜ã‘ã‚‹ã“ã¨ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®å¾Œç¶šã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã§ãƒ­ãƒ¼ã‚«ãƒ«æŽ¥ç¶šæ–¹æ³•ãŒä½¿ç”¨ã•れã¾ã™ (ã—ãŸãŒã£ã¦ã€SSH を使用ã™ã‚‹ã®ã§ã¯ãªãローカルã§å®Ÿè¡Œã—ã¾ã™)。" #: ../../rst/scenario_guides/guide_aci.rst:162 msgid "In this case the inventory may look like this:" msgstr "ã“ã®å ´åˆã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:174 msgid "But used tasks do not need anything special added." msgstr "ãŸã ã—ã€ä½¿ç”¨ã—ãŸã‚¿ã‚¹ã‚¯ã«ã¯ç‰¹åˆ¥ãªè¿½åŠ ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:187 msgid "For clarity we have added ``delegate_to: localhost`` to all the examples in the module documentation. This helps to ensure first-time users can easily copy&paste parts and make them work with a minimum of effort." msgstr "分ã‹ã‚Šã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã™ã¹ã¦ã®ä¾‹ã« ``delegate_to: localhost`` を追加ã—ã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€åˆå›žã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç°¡å˜ã«ä¸€éƒ¨ã‚’コピーã—ã¦ã€æœ€ä½Žé™ã®åŠªåŠ›ã§ä½œæ¥­ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:191 msgid "Common parameters" msgstr "一般的ãªãƒ‘ラメーター" #: ../../rst/scenario_guides/guide_aci.rst:192 msgid "Every Ansible ACI module accepts the following parameters that influence the module's communication with the APIC REST API:" msgstr "ã™ã¹ã¦ã® Ansible ACI モジュールã¯ã€APIC REST API を使用ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é€šä¿¡ã«å½±éŸ¿ã‚’与ãˆã‚‹ä»¥ä¸‹ã®ãƒ‘ラメーターをå—ã‘入れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:195 #: ../../rst/scenario_guides/guide_meraki.rst:65 msgid "host" msgstr "host" #: ../../rst/scenario_guides/guide_aci.rst:195 msgid "Hostname or IP address of the APIC." msgstr "APIC ã®ãƒ›ã‚¹ãƒˆåã¾ãŸã¯ IP アドレス。" #: ../../rst/scenario_guides/guide_aci.rst:198 msgid "port" msgstr "port" #: ../../rst/scenario_guides/guide_aci.rst:198 msgid "Port to use for communication. (Defaults to ``443`` for HTTPS, and ``80`` for HTTP)" msgstr "通信ã«ä½¿ç”¨ã™ã‚‹ãƒãƒ¼ãƒˆ (デフォルトã§ã¯ã€HTTPS ã®å ´åˆã¯ ``443``ã€HTTP ã®å ´åˆã¯ ``80``)。" #: ../../rst/scenario_guides/guide_aci.rst:201 msgid "username" msgstr "username" #: ../../rst/scenario_guides/guide_aci.rst:201 msgid "User name used to log on to the APIC. (Defaults to ``admin``)" msgstr "APIC ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã®ã«ä½¿ç”¨ã•れるユーザーå (デフォルト㯠``admin``)。" #: ../../rst/scenario_guides/guide_aci.rst:204 #: ../../rst/scenario_guides/guide_azure.rst:132 #: ../../rst/scenario_guides/guide_azure.rst:138 msgid "password" msgstr "password" #: ../../rst/scenario_guides/guide_aci.rst:204 msgid "Password for ``username`` to log on to the APIC, using password-based authentication." msgstr "パスワードベースã®èªè¨¼ã‚’使用ã—㦠APIC ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ ``username`` ã®ãƒ‘スワード。" #: ../../rst/scenario_guides/guide_aci.rst:209 msgid "private_key" msgstr "private_key" #: ../../rst/scenario_guides/guide_aci.rst:207 msgid "Private key for ``username`` to log on to APIC, using signature-based authentication. This could either be the raw private key content (include header/footer) or a file that stores the key content. *New in version 2.5*" msgstr "ç½²åベースã®èªè¨¼ã‚’使用ã—㦠APIC ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ ``username`` ã®ç§˜å¯†éµã€‚ã“れã¯ã€(ヘッダー/フッターをå«ã‚€) 生ã®ç§˜å¯†éµã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã€ã¾ãŸã¯éµã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æ ¼ç´ã™ã‚‹ãƒ•ァイルã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚*ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã®æ–°æ©Ÿèƒ½* ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:214 msgid "certificate_name" msgstr "certificate_name" #: ../../rst/scenario_guides/guide_aci.rst:212 msgid "Name of the certificate in the ACI Web GUI. This defaults to either the ``username`` value or the ``private_key`` file base name). *New in version 2.5*" msgstr "ACI Web GUI ã®è¨¼æ˜Žæ›¸ã®åå‰ã€‚デフォルト㯠``username`` 値ã¾ãŸã¯ ``private_key`` ファイルã®ãƒ™ãƒ¼ã‚¹åã«ãªã‚Šã¾ã™ã€‚*ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã®æ–°æ©Ÿèƒ½* ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:217 msgid "timeout" msgstr "timeout" #: ../../rst/scenario_guides/guide_aci.rst:217 msgid "Timeout value for socket-level communication." msgstr "ソケットレベルã®é€šä¿¡ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:220 #: ../../rst/scenario_guides/guide_meraki.rst:71 msgid "use_proxy" msgstr "use_proxy" #: ../../rst/scenario_guides/guide_aci.rst:220 msgid "Use system proxy settings. (Defaults to ``yes``)" msgstr "システムプロキシー設定を使用ã—ã¾ã™ (``yes`` ã«ãƒ‡ãƒ•ォルト設定)。" #: ../../rst/scenario_guides/guide_aci.rst:223 msgid "use_ssl" msgstr "use_ssl" #: ../../rst/scenario_guides/guide_aci.rst:223 msgid "Use HTTPS or HTTP for APIC REST communication. (Defaults to ``yes``)" msgstr "APIC REST 通信ã«ã¯ HTTPS ã¾ãŸã¯ HTTP を使用ã—ã¾ã™ (``yes`` ã«ãƒ‡ãƒ•ォルト設定)。" #: ../../rst/scenario_guides/guide_aci.rst:226 #: ../../rst/scenario_guides/guide_meraki.rst:74 msgid "validate_certs" msgstr "validate_certs" #: ../../rst/scenario_guides/guide_aci.rst:226 msgid "Validate certificate when using HTTPS communication. (Defaults to ``yes``)" msgstr "HTTPS 通信を使用ã™ã‚‹å ´åˆã«è¨¼æ˜Žæ›¸ã‚’検証ã—ã¾ã™ (``yes`` ã«ãƒ‡ãƒ•ォルト設定)。" #: ../../rst/scenario_guides/guide_aci.rst:230 msgid "output_level" msgstr "output_level" #: ../../rst/scenario_guides/guide_aci.rst:229 msgid "Influence the level of detail ACI modules return to the user. (One of ``normal``, ``info`` or ``debug``) *New in version 2.5*" msgstr "詳細㪠ACI モジュールãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¿”ã™ãƒ¬ãƒ™ãƒ«ã«å½±éŸ¿ã—ã¾ã™ (``normal``ã€``info``ã€ã¾ãŸã¯ ``debug`` ã®ã„ãšã‚Œã‹)。*ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã®æ–°æ©Ÿèƒ½* ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:233 msgid "Proxy support" msgstr "プロキシーã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/scenario_guides/guide_aci.rst:234 msgid "By default, if an environment variable ``_proxy`` is set on the target host, requests will be sent through that proxy. This behaviour can be overridden by setting a variable for this task (see :ref:`playbooks_environment`), or by using the ``use_proxy`` module parameter." msgstr "デフォルトã§ã¯ã€ç’°å¢ƒå¤‰æ•° ``_proxy`` ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã«è¨­å®šã•れã¦ã„ã‚‹ã¨ã€è¦æ±‚ã¯ãã®ãƒ—ロキシー経由ã§é€ä¿¡ã•れã¾ã™ã€‚ã“ã®å‹•作ã¯ã€ã“ã®ã‚¿ã‚¹ã‚¯ã«å¤‰æ•°ã‚’設定ã—ã¦ä¸Šæ›¸ãã™ã‚‹ (「:ref:`playbooks_environment`ã€ã‚’å‚ç…§) ã‹ã€``use_proxy`` モジュールパラメーターを使用ã—ã¦ä¸Šæ›¸ãã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:236 msgid "HTTP redirects can redirect from HTTP to HTTPS so ensure that the proxy environment for both protocols is correctly configured." msgstr "HTTP リダイレクト㯠HTTP ã‹ã‚‰ HTTPS ã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã‚‹ãŸã‚ã€ä¸¡æ–¹ã®ãƒ—ロトコルã®ãƒ—ãƒ­ã‚­ã‚·ãƒ¼ç’°å¢ƒãŒæ­£ã—ã設定ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:238 msgid "If proxy support is not needed, but the system may have it configured nevertheless, use the parameter ``use_proxy: no`` to avoid accidental system proxy usage." msgstr "プロキシーサãƒãƒ¼ãƒˆãŒå¿…è¦ãªãã¦ã‚‚ã€ã‚·ã‚¹ãƒ†ãƒ ãŒãれを設定ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã¯ã€``use_proxy: no`` パラメーターを使用ã—ã¦ã€èª¤ã£ãŸã‚·ã‚¹ãƒ†ãƒ ãƒ—ロキシーã®ä½¿ç”¨ã‚’回é¿ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:240 msgid "Selective proxy support using the ``no_proxy`` environment variable is also supported." msgstr "``no_proxy`` 環境変数を使用ã—ãŸé¸æŠžçš„プロキシーサãƒãƒ¼ãƒˆã«ã‚‚対応ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:244 msgid "Return values" msgstr "戻り値" #: ../../rst/scenario_guides/guide_aci.rst:248 msgid "The following values are always returned:" msgstr "以下ã®å€¤ãŒå¸¸ã«è¿”ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:251 msgid "current" msgstr "current" #: ../../rst/scenario_guides/guide_aci.rst:251 msgid "The resulting state of the managed object, or results of your query." msgstr "管ç†ã‚ªãƒ–ジェクトã®çµæžœã®çŠ¶æ…‹ã€ã¾ãŸã¯ã‚¯ã‚¨ãƒªãƒ¼ã®çµæžœã€‚" #: ../../rst/scenario_guides/guide_aci.rst:253 msgid "The following values are returned when ``output_level: info``:" msgstr "``output_level: info`` ã®å ´åˆã¯ã€ä»¥ä¸‹ã®å€¤ãŒå¸¸ã«è¿”ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:256 msgid "previous" msgstr "previous" #: ../../rst/scenario_guides/guide_aci.rst:256 msgid "The original state of the managed object (before any change was made)." msgstr "管ç†å¯¾è±¡ã‚ªãƒ–ジェクトã®å…ƒã®çŠ¶æ…‹ (変更ãŒè¡Œã‚れるå‰ã®çŠ¶æ…‹)。" #: ../../rst/scenario_guides/guide_aci.rst:259 msgid "proposed" msgstr "proposed" #: ../../rst/scenario_guides/guide_aci.rst:259 msgid "The proposed config payload, based on user-supplied values." msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã—ãŸå€¤ã«åŸºã¥ã„ãŸã€ææ¡ˆã•れãŸè¨­å®šãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:262 msgid "sent" msgstr "sent" #: ../../rst/scenario_guides/guide_aci.rst:262 msgid "The sent config payload, based on user-supplied values and the existing configuration." msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã—ãŸå€¤ã€ãŠã‚ˆã³æ—¢å­˜ã®è¨­å®šã«åŸºã¥ãã€é€ä¿¡ã•れãŸè¨­å®šãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:264 msgid "The following values are returned when ``output_level: debug`` or ``ANSIBLE_DEBUG=1``:" msgstr "``output_level: debug`` ã¾ãŸã¯``ANSIBLE_DEBUG=1`` ã®å ´åˆã¯ã€ä»¥ä¸‹ã®å€¤ãŒå¸¸ã«è¿”ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:267 msgid "filter_string" msgstr "filter_string" #: ../../rst/scenario_guides/guide_aci.rst:267 msgid "The filter used for specific APIC queries." msgstr "特定㮠APIC クエリーã«ä½¿ç”¨ã•れるフィルター。" #: ../../rst/scenario_guides/guide_aci.rst:270 msgid "method" msgstr "method" #: ../../rst/scenario_guides/guide_aci.rst:270 msgid "The HTTP method used for the sent payload. (Either ``GET`` for queries, ``DELETE`` or ``POST`` for changes)" msgstr "é€ä¿¡ã•れãŸãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã«ä½¿ç”¨ã•れる HTTP メソッド (å•ã„åˆã‚ã›ã® ``GET``ã€ã‚‚ã—ãã¯å¤‰æ›´ã® ``DELETE`` ã¾ãŸã¯``POST`` ã®ã„ãšã‚Œã‹)。" #: ../../rst/scenario_guides/guide_aci.rst:273 msgid "response" msgstr "response" #: ../../rst/scenario_guides/guide_aci.rst:273 msgid "The HTTP response from the APIC." msgstr "APIC ã‹ã‚‰ã® HTTP 応答。" #: ../../rst/scenario_guides/guide_aci.rst:276 msgid "status" msgstr "status" #: ../../rst/scenario_guides/guide_aci.rst:276 msgid "The HTTP status code for the request." msgstr "リクエスト㮠HTTP ステータスコード。" #: ../../rst/scenario_guides/guide_aci.rst:279 msgid "url" msgstr "url" #: ../../rst/scenario_guides/guide_aci.rst:279 msgid "The url used for the request." msgstr "è¦æ±‚ã«ä½¿ç”¨ã•れる URL。" #: ../../rst/scenario_guides/guide_aci.rst:281 msgid "The module return values are documented in detail as part of each module's documentation." msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ã¯ã€å„モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§è©³ç´°ã«èª¬æ˜Žã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:286 msgid "Various resources exist to start learn more about ACI programmability, we recommend the following links:" msgstr "ACI プログラミングã®è©³ç´°ã‚’å­¦ã¶ãŸã‚ã«ã€ã•ã¾ã–ã¾ãªãƒªã‚½ãƒ¼ã‚¹ãŒã‚りã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:288 #: ../../rst/scenario_guides/guide_aci.rst:650 msgid ":ref:`Developing Cisco ACI modules `" msgstr ":ref:`Developing Cisco ACI modules `" #: ../../rst/scenario_guides/guide_aci.rst:289 msgid "`Jacob McGill: Automating Cisco ACI with Ansible `_" msgstr "`Jacob McGill: Automating Cisco ACI with Ansible `_" #: ../../rst/scenario_guides/guide_aci.rst:290 msgid "`Cisco DevNet Learning Labs about ACI and Ansible `_" msgstr "`Cisco DevNet Learning Labs about ACI and Ansible `_" #: ../../rst/scenario_guides/guide_aci.rst:296 msgid "ACI authentication" msgstr "ACI èªè¨¼" #: ../../rst/scenario_guides/guide_aci.rst:299 msgid "Password-based authentication" msgstr "パスワードベースã®èªè¨¼" #: ../../rst/scenario_guides/guide_aci.rst:300 msgid "If you want to log on using a username and password, you can use the following parameters with your ACI modules:" msgstr "ユーザーåã¨ãƒ‘スワードを使用ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å ´åˆã¯ã€ACI モジュールã§ä»¥ä¸‹ã®ãƒ‘ラメーターを使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:307 msgid "Password-based authentication is very simple to work with, but it is not the most efficient form of authentication from ACI's point-of-view as it requires a separate login-request and an open session to work. To avoid having your session time-out and requiring another login, you can use the more efficient Signature-based authentication." msgstr "パスワードベースã®èªè¨¼ã¯éžå¸¸ã«ç°¡å˜ã§ã™ãŒã€åˆ¥ã®ãƒ­ã‚°ã‚¤ãƒ³è¦æ±‚ã¨ã‚ªãƒ¼ãƒ—ãƒ³ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒæ©Ÿèƒ½ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ACI ã®è¦³ç‚¹ã‹ã‚‰æœ€ã‚‚効率的ãªèªè¨¼å½¢å¼ã§ã¯ã‚りã¾ã›ã‚“。セッションã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚„別ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’å¿…è¦ã¨ã—ãªã„よã†ã«ã€ã‚ˆã‚ŠåŠ¹çŽ‡çš„ãªç½²åベースã®èªè¨¼ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:309 msgid "Password-based authentication also may trigger anti-DoS measures in ACI v3.1+ that causes session throttling and results in HTTP 503 errors and login failures." msgstr "パスワードベースã®èªè¨¼ã§ã¯ã€ACI v3.1 以é™ã® DoS 対策ãŒãƒˆãƒªã‚¬ãƒ¼ã¨ãªã‚Šã€ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚¹ãƒ­ãƒƒãƒˆãƒ«ãŒç™ºç”Ÿã—ã€HTTP 503 エラーã¨ãªã‚Šã€ãƒ­ã‚°ã‚¤ãƒ³ãŒå¤±æ•—ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:311 msgid "Never store passwords in plain text." msgstr "プレーンテキストã«ãƒ‘スワードをä¿å­˜ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:313 #: ../../rst/scenario_guides/guide_meraki.rst:100 msgid "The \"Vault\" feature of Ansible allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plain text in your playbooks or roles. These vault files can then be distributed or placed in source control. See :ref:`playbooks_vault` for more information." msgstr "Ansible ã®ã€ŒVaultã€æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã¨ã€ãƒ‘スワードやキーãªã©ã®æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ã€Playbook やロールã®ãƒ—レーンテキストã¨ã—ã¦ã§ã¯ãªãã€æš—å·åŒ–ã•れãŸãƒ•ァイルã«ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã® Vault ファイルã¯ã€ã‚½ãƒ¼ã‚¹åˆ¶å¾¡ã«é…布ã¾ãŸã¯é…ç½®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`playbooks_vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:317 msgid "Signature-based authentication using certificates" msgstr "証明書を使用ã—ãŸç½²åベースã®èªè¨¼" #: ../../rst/scenario_guides/guide_aci.rst:321 msgid "Using signature-based authentication is more efficient and more reliable than password-based authentication." msgstr "ç½²åベースã®èªè¨¼ã®ä½¿ç”¨ã¯ã€ãƒ‘スワードベースã®èªè¨¼ã‚ˆã‚Šã‚‚効率的ã§ã€ä¿¡é ¼æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:324 msgid "Generate certificate and private key" msgstr "証明書ã¨ç§˜å¯†éµã®ç”Ÿæˆ" #: ../../rst/scenario_guides/guide_aci.rst:325 msgid "Signature-based authentication requires a (self-signed) X.509 certificate with private key, and a configuration step for your AAA user in ACI. To generate a working X.509 certificate and private key, use the following procedure:" msgstr "ç½²åベースã®èªè¨¼ã§ã¯ã€ç§˜å¯†éµã‚’æŒã¤ (自己署å) X.509 証明書ã¨ã€ACI ã® AAA ユーザーã®è¨­å®šæ‰‹é †ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚稼åƒä¸­ã® X.509 証明書ãŠã‚ˆã³ç§˜å¯†éµã‚’生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:332 msgid "Configure your local user" msgstr "ローカルユーザーã®è¨­å®š" #: ../../rst/scenario_guides/guide_aci.rst:333 msgid "Perform the following steps:" msgstr "ä»¥ä¸‹ã®æ‰‹é †ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:335 msgid "Add the X.509 certificate to your ACI AAA local user at :guilabel:`ADMIN` » :guilabel:`AAA`" msgstr ":guilabel:`ADMIN` » :guilabel:`AAA` ã§ã€ACI AAA ローカルユーザー㫠X.509 証明書を追加ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:336 msgid "Click :guilabel:`AAA Authentication`" msgstr ":guilabel:`AAA Authentication` をクリックã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:337 msgid "Check that in the :guilabel:`Authentication` field the :guilabel:`Realm` field displays :guilabel:`Local`" msgstr ":guilabel:`Authentication` フィールドã§ã€:guilabel:`Realm` フィールド㌠:guilabel:`Local` ã¨è¡¨ç¤ºã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:338 msgid "Expand :guilabel:`Security Management` » :guilabel:`Local Users`" msgstr ":guilabel:`Security Management` » :guilabel:`Local Users` ã¨å±•é–‹ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:339 msgid "Click the name of the user you want to add a certificate to, in the :guilabel:`User Certificates` area" msgstr ":guilabel:`User Certificates` エリアã§ã€è¨¼æ˜Žæ›¸ã‚’追加ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åをクリックã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:340 msgid "Click the :guilabel:`+` sign and in the :guilabel:`Create X509 Certificate` enter a certificate name in the :guilabel:`Name` field" msgstr ":guilabel:`+` 記å·ã‚’クリックã—ã€:guilabel:`Create X509 Certificate` ã® :guilabel:`Name` フィールドã«è¨¼æ˜Žæ›¸åを入力ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:342 msgid "If you use the basename of your private key here, you don't need to enter ``certificate_name`` in Ansible" msgstr "ã“ã“ã§ç§˜å¯†éµã®ãƒ™ãƒ¼ã‚¹åを使用ã™ã‚‹å ´åˆã¯ã€Ansible ã§ ``certificate_name`` を入力ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:344 msgid "Copy and paste your X.509 certificate in the :guilabel:`Data` field." msgstr ":guilabel:`Data` フィールド㫠X.509 証明書をコピーã—ã¦è²¼ã‚Šä»˜ã‘ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:346 msgid "You can automate this by using the following Ansible task:" msgstr "ã“れã¯ã€ä»¥ä¸‹ã® Ansible タスクを使用ã—ã¦è‡ªå‹•化ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:360 msgid "Signature-based authentication only works with local users." msgstr "ç½²åベースã®èªè¨¼ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:364 msgid "Use signature-based authentication with Ansible" msgstr "Ansible ã§ã®ç½²åベースã®èªè¨¼ã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_aci.rst:365 msgid "You need the following parameters with your ACI module(s) for it to work:" msgstr "ã“れを有効ã«ã™ã‚‹ã«ã¯ã€ACI モジュールã§ä»¥ä¸‹ã®ãƒ‘ラメーターãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:374 msgid "or you can use the private key content:" msgstr "ã¾ãŸã¯ã€ç§˜å¯†éµã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:387 msgid "If you use a certificate name in ACI that matches the private key's basename, you can leave out the ``certificate_name`` parameter like the example above." msgstr "秘密éµã®ãƒ™ãƒ¼ã‚¹åã«ä¸€è‡´ã™ã‚‹ ACI ã§è¨¼æ˜Žæ›¸åを使用ã™ã‚‹å ´åˆã¯ã€ä¸Šè¨˜ã®ä¾‹ã®ã‚ˆã†ãª ``certificate_name`` パラメーターをçœç•¥ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:391 msgid "Using Ansible Vault to encrypt the private key" msgstr "Ansible Vault を使用ã—ãŸç§˜å¯†éµã®æš—å·åŒ–" #: ../../rst/scenario_guides/guide_aci.rst:394 msgid "To start, encrypt the private key and give it a strong password." msgstr "ã¾ãšã€ç§˜å¯†éµã‚’æš—å·åŒ–ã—ã¦å¼·å›ºãªãƒ‘スワードを付与ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:400 msgid "Use a text editor to open the private-key. You should have an encrypted cert now." msgstr "テキストエディターを使用ã—ã¦ã€ç§˜å¯†éµã‚’é–‹ãã¾ã™ã€‚ã“れã§ã€æš—å·åŒ–ã•れãŸè¨¼æ˜Žæ›¸ãŒå­˜åœ¨ã™ã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:409 msgid "Copy and paste the new encrypted cert into your playbook as a new variable." msgstr "æ–°ã—ã„æš—å·åŒ–ã•れãŸè¨¼æ˜Žæ›¸ã‚’æ–°è¦ã®å¤‰æ•°ã¨ã—㦠Playbook ã«ã‚³ãƒ”ーアンドペーストã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:419 msgid "Use the new variable for the private_key:" msgstr "private_key ã®æ–°ã—ã„変数を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:427 msgid "When running the playbook, use \"--ask-vault-pass\" to decrypt the private key." msgstr "Playbook ã®å®Ÿè¡Œæ™‚ã«ã€ã€Œ--ask-vault-passã€ã‚’使用ã—ã¦ç§˜å¯†éµã‚’復å·ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:436 msgid "Detailed information about Signature-based Authentication is available from `Cisco APIC Signature-Based Transactions `_." msgstr "- ç½²åベースã®èªè¨¼ã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã¯ã€ã€Œ`Cisco APIC Signature-Based Transactions `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:437 msgid "More information on Ansible Vault can be found on the :ref:`Ansible Vault ` page." msgstr "Ansible Vault ã®è©³ç´°ã¯ã€ã€Œ:ref:`Ansible Vault `ã€ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:443 msgid "Using ACI REST with Ansible" msgstr "Ansible ã§ã® ACI REST ã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_aci.rst:444 msgid "While already a lot of ACI modules exists in the Ansible distribution, and the most common actions can be performed with these existing modules, there's always something that may not be possible with off-the-shelf modules." msgstr "ã™ã§ã«å¤šãã® ACI モジュール㌠Ansible ディストリビューションã«åŒæ¢±ã•れã¦ãŠã‚Šã€æœ€ã‚‚一般的ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã“ã‚Œã‚‰ã®æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å®Ÿè¡Œã§ãã¾ã™ãŒã€æ—¢è£½ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã§ããªã„ã“ã¨ã¯å¸¸ã«ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:446 msgid "The aci_rest module provides you with direct access to the APIC REST API and enables you to perform any task not already covered by the existing modules. This may seem like a complex undertaking, but you can generate the needed REST payload for any action performed in the ACI web interface effortlessly." msgstr "aci_rest モジュールを使用ã™ã‚‹ã¨ã€APIC REST API ã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ãã€æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å¯¾å¿œã—ã¦ã„ãªã„タスクを実行ã§ãã¾ã™ã€‚ã“れã¯è¤‡é›‘ãªä½œæ¥­ã®ã‚ˆã†ã«æ€ãˆã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ACI Web インターフェースã§å®Ÿè¡Œã•れるアクションã«å¿…è¦ãª REST ペイロードを簡å˜ã«ç”Ÿæˆã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:450 msgid "Built-in idempotency" msgstr "組ã¿è¾¼ã¿ã®å†ªç­‰æ€§" #: ../../rst/scenario_guides/guide_aci.rst:451 msgid "Because the APIC REST API is intrinsically idempotent and can report whether a change was made, the aci_rest module automatically inherits both capabilities and is a first-class solution for automating your ACI infrastructure. As a result, users that require more powerful low-level access to their ACI infrastructure don't have to give up on idempotency and don't have to guess whether a change was performed when using the aci_rest module." msgstr "APIC REST API ã¯å†ªç­‰ã§ã‚りã€å¤‰æ›´ã•れãŸã‹ã©ã†ã‹ã‚’報告ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€aci_rest モジュールã¯ä¸¡æ–¹ã®æ©Ÿèƒ½ã‚’自動的ã«ç¶™æ‰¿ã—ã€ACI インフラストラクãƒãƒ£ãƒ¼ã‚’自動化ã™ã‚‹ãƒ•ァーストクラスソリューションã¨ãªã‚Šã¾ã™ã€‚ãã®çµæžœã€ACI インフラストラクãƒãƒ£ãƒ¼ã¸ã®ã‚ˆã‚Šå¼·åŠ›ãªä½Žãƒ¬ãƒ™ãƒ«ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€å†ªç­‰æ€§ã‚’ã‚ãらã‚ã‚‹å¿…è¦ãŒãªãã€aci_rest モジュールã®ä½¿ç”¨æ™‚ã«å¤‰æ›´ãŒè¡Œã‚れãŸã‹ã©ã†ã‹ã‚’推測ã™ã‚‹å¿…è¦ã‚‚ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:455 msgid "Using the aci_rest module" msgstr "aci_rest モジュールã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_aci.rst:456 msgid "The aci_rest module accepts the native XML and JSON payloads, but additionally accepts inline YAML payload (structured like JSON). The XML payload requires you to use a path ending with ``.xml`` whereas JSON or YAML require the path to end with ``.json``." msgstr "aci_rest モジュールã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ã® XML ペイロードãŠã‚ˆã³ JSON ペイロードをå—ã‘入れã¾ã™ãŒã€(JSON ãªã©ã®) インライン YAML ペイロードも追加ã§å—ã‘入れã¾ã™ã€‚XML ペイロードã§ã¯ã€``.xml`` ã§çµ‚ã‚るパスを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€JSON ã¾ãŸã¯ YAML ã«ã¯ ``.json`` ã§çµ‚ã‚るパスãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:458 msgid "When you're making modifications, you can use the POST or DELETE methods, whereas doing just queries require the GET method." msgstr "変更を行ã†å ´åˆã¯ã€POST メソッドã¾ãŸã¯ DELETE メソッドを使用ã§ãã¾ã™ãŒã€ã‚¯ã‚¨ãƒªãƒ¼ã®ã¿ã‚’実行ã™ã‚‹ã«ã¯ GET メソッドãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:460 msgid "For instance, if you would like to ensure a specific tenant exists on ACI, these below four examples are functionally identical:" msgstr "ãŸã¨ãˆã°ã€ç‰¹å®šã®ãƒ†ãƒŠãƒ³ãƒˆãŒ ACI ã«å­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã® 4 ã¤ã®ä¾‹ãŒæ©Ÿèƒ½çš„ã«åŒã˜ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:462 msgid "**XML** (Native ACI REST)" msgstr "**XML** (ãƒã‚¤ãƒ†ã‚£ãƒ–ã® ACI REST)" #: ../../rst/scenario_guides/guide_aci.rst:475 msgid "**JSON** (Native ACI REST)" msgstr "**JSON** (ãƒã‚¤ãƒ†ã‚£ãƒ–ã® ACI REST)" #: ../../rst/scenario_guides/guide_aci.rst:495 msgid "**YAML** (Ansible-style REST)" msgstr "**YAML** (Ansible スタイル㮠REST)" #: ../../rst/scenario_guides/guide_aci.rst:511 msgid "**Ansible task** (Dedicated module)" msgstr "**Ansible タスク** (専用モジュール)" #: ../../rst/scenario_guides/guide_aci.rst:524 msgid "The XML format is more practical when there is a need to template the REST payload (inline), but the YAML format is more convenient for maintaining your infrastructure-as-code and feels more naturally integrated with Ansible playbooks. The dedicated modules offer a more simple, abstracted, but also a more limited experience. Use what feels best for your use-case." msgstr "XML å½¢å¼ã¯ã€REST ペイロード (インライン) ã®ãƒ†ãƒ³ãƒ—レートãŒå¿…è¦ãªå ´åˆã«ã‚ˆã‚Šå®Ÿç”¨çš„ãªã‚‚ã®ã§ã™ãŒã€YAML å½¢å¼ã¯ infrastructure-as-code ã‚’ç¶­æŒã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã€Ansible Playbook ã¨ã®çµ±åˆã‚‚ã‚ˆã‚Šè‡ªç„¶ã«æ„Ÿã˜ã‚‰ã‚Œã¾ã™ã€‚専用モジュールã¯ã€ã‚ˆã‚Šã‚·ãƒ³ãƒ—ãƒ«ã§æŠ½è±¡åŒ–ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã—ã¾ã™ãŒã€ã‚ˆã‚Šé™å®šçš„ãªã‚¨ã‚¯ã‚¹ãƒšãƒªã‚¨ãƒ³ã‚¹ã‚‚æä¾›ã—ã¾ã™ã€‚ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«æœ€é©ãªã‚‚ã®ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:529 msgid "Plenty of resources exist to learn about ACI's APIC REST interface, we recommend the links below:" msgstr "ACI ã® APIC REST インターフェースを学ã¶ãŸã‚ã®ãƒªã‚½ãƒ¼ã‚¹ã¯å¤šæ•°ã‚りã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:531 msgid "`The ACI collection on Ansible Galaxy `_" msgstr "`The ACI collection on Ansible Galaxy `_" #: ../../rst/scenario_guides/guide_aci.rst:532 msgid "`APIC REST API Configuration Guide `_ -- Detailed guide on how the APIC REST API is designed and used, incl. many examples" msgstr "`APIC REST API 設定ガイド `_ -- APIC REST API を設計ãŠã‚ˆã³ä½¿ç”¨ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã®è©³ç´°ã‚¬ã‚¤ãƒ‰ã€‚多数ã®ä¾‹ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:533 msgid "`APIC Management Information Model reference `_ -- Complete reference of the APIC object model" msgstr "`APIC ç®¡ç†æƒ…報モデルリファレンス `_ -- APIC オブジェクトモデルã®å®Œå…¨ãªãƒªãƒ•ァレンス。" #: ../../rst/scenario_guides/guide_aci.rst:534 msgid "`Cisco DevNet Learning Labs about ACI and REST `_" msgstr "`Cisco DevNet Learning Labs about ACI and REST `_" #: ../../rst/scenario_guides/guide_aci.rst:540 msgid "Operational examples" msgstr "é‹ç”¨ä¾‹" #: ../../rst/scenario_guides/guide_aci.rst:541 msgid "Here is a small overview of useful operational tasks to reuse in your playbooks." msgstr "以下ã¯ã€Playbook ã§å†åˆ©ç”¨ã™ã‚‹æœ‰ç”¨ãªé‹ç”¨ã‚¿ã‚¹ã‚¯ã®ã„ãã¤ã‹ã®æ¦‚è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:543 msgid "Feel free to contribute more useful snippets." msgstr "より便利ãªã‚¹ãƒ‹ãƒšãƒƒãƒˆã‚’è‡ªç”±ã«æŠ•ç¨¿ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:547 msgid "Waiting for all controllers to be ready" msgstr "Waiting for all controllers to be ready" #: ../../rst/scenario_guides/guide_aci.rst:548 msgid "You can use the below task after you started to build your APICs and configured the cluster to wait until all the APICs have come online. It will wait until the number of controllers equals the number listed in the ``apic`` inventory group." msgstr "APIC ã®æ§‹ç¯‰ã‚’é–‹å§‹ã—ã€ã™ã¹ã¦ã® APIC ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚‹ã¾ã§å¾…機ã™ã‚‹ã‚ˆã†ã«ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’設定ã—ãŸã‚‰ã€ä»¥ä¸‹ã®ã‚¿ã‚¹ã‚¯ã‚’使用ã§ãã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã®æ•°ãŒ ``apic`` ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«æŒ™ã’られã¦ã„ã‚‹æ•°ã¨ç­‰ã—ããªã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:565 msgid "Waiting for cluster to be fully-fit" msgstr "Waiting for cluster to be fully-fit" #: ../../rst/scenario_guides/guide_aci.rst:566 msgid "The below example waits until the cluster is fully-fit. In this example you know the number of APICs in the cluster and you verify each APIC reports a 'fully-fit' status." msgstr "以下ã®ä¾‹ã§ã¯ã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãŒå®Œå…¨ã«èª¿æ•´ã•れるã¾ã§å¾…機ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼å†…ã® APIC ã®æ•°ã‚’把æ¡ã—ã€å„ APIC ãŒã€Œå®Œå…¨ã«é©åˆ‡ãªã€çŠ¶æ…‹ã‚’å ±å‘Šã™ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:590 msgid "APIC error messages" msgstr "APIC エラーメッセージ" #: ../../rst/scenario_guides/guide_aci.rst:591 msgid "The following error messages may occur and this section can help you understand what exactly is going on and how to fix/avoid them." msgstr "以下ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れる場åˆãŒã‚りã¾ã™ã€‚本セクションã¯ã€ä½•ãŒèµ·ã£ã¦ã„ã‚‹ã®ã‹ã€ãŠã‚ˆã³ãã®ã‚¨ãƒ©ãƒ¼ã‚’修正ã¾ãŸã¯å›žé¿ã™ã‚‹æ–¹æ³•を正確ã«ç†è§£ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:595 msgid "APIC Error 122: unknown managed object class 'polUni'" msgstr "APIC Error 122: unknown managed object class 'polUni'" #: ../../rst/scenario_guides/guide_aci.rst:594 msgid "In case you receive this error while you are certain your aci_rest payload and object classes are seemingly correct, the issue might be that your payload is not in fact correct JSON (for example, the sent payload is using single quotes, rather than double quotes), and as a result the APIC is not correctly parsing your object classes from the payload. One way to avoid this is by using a YAML or an XML formatted payload, which are easier to construct correctly and modify later." msgstr "aci_rest ペイロードã¨ã‚ªãƒ–ジェクトクラスãŒä¸€è¦‹æ­£ã—ã„よã†ã«è¦‹ãˆã‚‹å ´åˆã«ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å ´åˆã¯ã€ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã® JSON ã«èª¤ã‚ŠãŒã‚り (ãŸã¨ãˆã°ã€é€ä¿¡ã•れãŸãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãŒäºŒé‡å¼•用符ã§ã¯ãªã一é‡å¼•用符を使用ã—ã¦ã„ã‚‹) ã€ãã®çµæžœ APIC ãŒãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‹ã‚‰ã‚ªãƒ–ジェクトクラスを正ã—ãè§£æžã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れを回é¿ã™ã‚‹ 1 ã¤ã®æ–¹æ³•ã¯ã€YAML å½¢å¼ã¾ãŸã¯ XML å½¢å¼ã®ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ­£ã—ãæ§‹ç¯‰ã—ã¦å¾Œã§å¤‰æ›´ã™ã‚‹ã®ãŒç°¡å˜ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:599 msgid "APIC Error 400: invalid data at line '1'. Attributes are missing, tag 'attributes' must be specified first, before any other tag" msgstr "APIC Error 400: invalid data at line '1'. Attributes are missing, tag 'attributes' must be specified first, before any other tag" #: ../../rst/scenario_guides/guide_aci.rst:598 msgid "Although the JSON specification allows unordered elements, the APIC REST API requires that the JSON ``attributes`` element precede the ``children`` array or other elements. So you need to ensure that your payload conforms to this requirement. Sorting your dictionary keys will do the trick just fine. If you don't have any attributes, it may be necessary to add: ``attributes: {}`` as the APIC does expect the entry to precede any ``children``." msgstr "JSON 仕様ã¯é †åºä»˜ã‘ã•れã¦ã„ãªã„è¦ç´ ã‚’許å¯ã—ã¾ã™ãŒã€APIC REST API ã§ã¯ã€JSON ã® ``attributes`` è¦ç´ ãŒ ``children`` アレイã¾ãŸã¯ä»–ã®è¦ç´ ã®å‰ã«ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãã®ãŸã‚ã€ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ãŒã“ã®è¦ä»¶ã«æº–æ‹ ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚­ãƒ¼ã‚’ä¸¦ã³æ›¿ãˆã‚‹ã¨å•題ãªã終了ã—ã¾ã™ã€‚属性をæŒãŸãªã„å ´åˆã€APIC ã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒ ``children`` ã®å‰ã«ã‚ã‚‹ã“ã¨ã‚’期待ã—ã¦ã„ã‚‹ãŸã‚ã€``attributes: {}`` を追加ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:603 msgid "APIC Error 801: property descr of uni/tn-TENANT/ap-AP failed validation for value 'A \"legacy\" network'" msgstr "APIC Error 801: property descr of uni/tn-TENANT/ap-AP failed validation for value 'A \"legacy\" network'" #: ../../rst/scenario_guides/guide_aci.rst:602 msgid "Some values in the APIC have strict format-rules to comply to, and the internal APIC validation check for the provided value failed. In the above case, the ``description`` parameter (internally known as ``descr``) only accepts values conforming to `Regex: [a-zA-Z0-9\\\\!#$%()*,-./:;@ _{|}~?&+]+ `_, in general it must not include quotes or square brackets." msgstr "APIC 内ã®ä¸€éƒ¨ã®å€¤ã«ã¯æº–æ‹ ãŒå¿…è¦ãªåŽ³æ ¼ãªå½¢å¼ãƒ«ãƒ¼ãƒ«ãŒã‚ã‚Šã€æä¾›ã•れる値ã«å¯¾ã™ã‚‹å†…部 APIC 検証ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚上記ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€``description`` パラメーター (内部的ã«ã¯``descr``) ã¯ã€`Regex: [a-zA-Z0-9\\\\!#$%()*,-./:;@ _{|}~?&+]+ `_ ã«æº–æ‹ ã—ãŸå€¤ã®ã¿ã‚’å—ã‘入れã€ä¸€èˆ¬çš„ã«ã¯å¼•用符や角括弧をå«ã‚€ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:608 msgid "Known issues" msgstr "既知ã®å•題" #: ../../rst/scenario_guides/guide_aci.rst:609 msgid "The aci_rest module is a wrapper around the APIC REST API. As a result any issues related to the APIC will be reflected in the use of this module." msgstr "aci_rest モジュールã¯ã€APIC REST API ã®ãƒ©ãƒƒãƒ‘ーã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€APIC ã«é–¢é€£ã™ã‚‹å•題ãŒã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½¿ç”¨ã«å映ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:611 msgid "All below issues either have been reported to the vendor, and most can simply be avoided." msgstr "以下ã®å•題ã¯ã™ã¹ã¦ãƒ™ãƒ³ãƒ€ãƒ¼ä¼æ¥­ã«å ±å‘Šã•れã¦ãŠã‚Šã€ã»ã¨ã‚“ã©ã®å ´åˆã¯å›žé¿ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:617 msgid "Too many consecutive API calls may result in connection throttling" msgstr "連続ã™ã‚‹ API 呼ã³å‡ºã—ãŒå¤šããªã‚Šã™ãŽã‚‹ã¨ã€æŽ¥ç¶šã®ã‚¹ãƒ­ãƒƒãƒˆãƒ«ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:614 msgid "Starting with ACI v3.1 the APIC will actively throttle password-based authenticated connection rates over a specific threshold. This is as part of an anti-DDOS measure but can act up when using Ansible with ACI using password-based authentication. Currently, one solution is to increase this threshold within the nginx configuration, but using signature-based authentication is recommended." msgstr "ACI v3.1 以é™ã€APIC ã¯ç‰¹å®šã®ã—ãã„値ã§ã€ãƒ‘スワードベースã®èªè¨¼æŽ¥ç¶šãƒ¬ãƒ¼ãƒˆã‚’アクティブã«ã‚¹ãƒ­ãƒƒãƒˆãƒ«ã—ã¾ã™ã€‚ã“れ㯠DDOS 対策ã®ä¸€ç’°ã§ã™ãŒã€ACI ã§ãƒ‘スワードベースã®èªè¨¼ã§ Ansible を使用ã—ã¦ã„ã‚‹å ´åˆã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ç¾åœ¨ã®ã¨ã“ã‚ã€nginx ã®è¨­å®šã§ã“ã®ã—ãã„値を増やã™ã“ã¨ã§è§£æ±ºã—ã¦ã„ã¾ã™ãŒã€ç½²åベースã®èªè¨¼ã‚’使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:616 msgid "**NOTE:** It is advisable to use signature-based authentication with ACI as it not only prevents connection-throttling, but also improves general performance when using the ACI modules." msgstr "**注記:** 接続スロットルを回é¿ã™ã‚‹ã ã‘ã§ãªãã€ACI モジュールを使用ã™ã‚‹å ´åˆã®å…¨èˆ¬çš„ãªãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ãŸã‚ã€ACI ã§ç½²åベースã®èªè¨¼ã‚’使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:623 msgid "Specific requests may not reflect changes correctly (`#35401 `_)" msgstr "特定ã®è¦æ±‚ã«ã¯ã€å¤‰æ›´ãŒæ­£ã—ãåæ˜ ã•れãªã„å ´åˆãŒã‚りã¾ã™ (`#35401 `_)。" #: ../../rst/scenario_guides/guide_aci.rst:620 msgid "There is a known issue where specific requests to the APIC do not properly reflect changed in the resulting output, even when we request those changes explicitly from the APIC. In one instance using the path ``api/node/mo/uni/infra.xml`` fails, where ``api/node/mo/uni/infra/.xml`` does work correctly." msgstr "APIC ã«æ˜Žç¤ºçš„ã«å¤‰æ›´ã‚’è¦æ±‚ã—ã¦ã‚‚ã€çµæžœã®å‡ºåŠ›ã«å¤‰æ›´ãŒæ­£ã—ãåæ˜ ã•れãªã„ã¨ã„ã†å•題ãŒã‚りã¾ã—ãŸã€‚ã‚る例ã§ã¯ã€``api/node/mo/uni/infra.xml`` ã¨ã„ã†ãƒ‘スを使用ã™ã‚‹ã¨å¤±æ•—ã—ã¾ã™ãŒã€``api/node/mo/uni/infra/.xml`` ã¯æ­£ã—ã動作ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:622 msgid "**NOTE:** A workaround is to register the task return values (for example, ``register: this``) and influence when the task should report a change by adding: ``changed_when: this.imdata != []``." msgstr "**注記:** 回é¿ç­–ã¯ã€ã‚¿ã‚¹ã‚¯ã®æˆ»ã‚Šå€¤ (例: ``register: this``) を登録ã—ã€``changed_when: this.imdata != []`` を追加ã—ã¦ã‚¿ã‚¹ã‚¯ãŒå¤‰æ›´ã‚’報告ã™ã‚‹å ´åˆã«å½±éŸ¿ã‚’åŠã¼ã™ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:629 msgid "Specific requests are known to not be idempotent (`#35050 `_)" msgstr "特定ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯å†ªç­‰ã§ãªã„ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ (`#35050 `_)。" #: ../../rst/scenario_guides/guide_aci.rst:626 msgid "The behaviour of the APIC is inconsistent to the use of ``status=\"created\"`` and ``status=\"deleted\"``. The result is that when you use ``status=\"created\"`` in your payload the resulting tasks are not idempotent and creation will fail when the object was already created. However this is not the case with ``status=\"deleted\"`` where such call to an non-existing object does not cause any failure whatsoever." msgstr "APIC ã®å‹•作ã¯ã€``status=\"created\"`` ãŠã‚ˆã³ ``status=\"deleted\"`` ã®ä½¿ç”¨ã¨çŸ›ç›¾ã—ã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã§ ``status=\"created\"`` を使用ã™ã‚‹ã¨ã€ä½œæˆã•れるタスクãŒå†ªç­‰ã§ã¯ãªãã€ã‚ªãƒ–ジェクトãŒã™ã§ã«ä½œæˆã•れã¦ã‚‚作æˆã«å¤±æ•—ã—ã¾ã™ã€‚ã—ã‹ã—ã€``status=\"deleted\"`` ã®å ´åˆã¯ãã®ã‚ˆã†ãªã“ã¨ã¯ãªãã€å­˜åœ¨ã—ãªã„オブジェクトã¸ã®å‘¼ã³å‡ºã—ã§ã‚‚何も失敗ã—ã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:628 msgid "**NOTE:** A workaround is to avoid using ``status=\"created\"`` and instead use ``status=\"modified\"`` when idempotency is essential to your workflow.." msgstr "**注記:** ワークフローã«ãŠã‘る冪等ãŒå¿…é ˆã§ã‚ã‚‹å ´åˆã¯ã€å›žé¿ç­–ã¨ã—ã¦ã€``status=\"created\"`` を使用ã›ãšã€``status=\"modified\"`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:635 msgid "Setting user password is not idempotent (`#35544 `_)" msgstr "ユーザーパスワードã®è¨­å®šã¯å†ªç­‰ã§ã¯ã‚りã¾ã›ã‚“ (`#35544 `_)" #: ../../rst/scenario_guides/guide_aci.rst:632 msgid "Due to an inconsistency in the APIC REST API, a task that sets the password of a locally-authenticated user is not idempotent. The APIC will complain with message ``Password history check: user dag should not use previous 5 passwords``." msgstr "APIC REST API ã®ä¸æ•´åˆã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ã‚«ãƒ«èªè¨¼ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘スワードを設定ã™ã‚‹ã‚¿ã‚¹ã‚¯ã¯å†ªç­‰ã§ã¯ã‚りã¾ã›ã‚“。APIC ã¯ã€``Password history check: user dag should not use previous 5 passwords`` メッセージを出力ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:634 msgid "**NOTE:** There is no workaround for this issue." msgstr "**注記:** ã“ã®å•題ã«å¯¾ã™ã‚‹å›žé¿ç­–ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_aci.rst:640 msgid "ACI Ansible community" msgstr "ACI Ansible コミュニティー" #: ../../rst/scenario_guides/guide_aci.rst:641 msgid "If you have specific issues with the ACI modules, or a feature request, or you like to contribute to the ACI project by proposing changes or documentation updates, look at the Ansible Community wiki ACI page at: https://github.com/ansible/community/wiki/Network:-ACI" msgstr "ACI モジュールã¾ãŸã¯æ©Ÿèƒ½è¦æ±‚ã«ç‰¹å®šã®å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã‚„ã€å¤‰æ›´ã‚„ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®æ›´æ–°ã‚’ææ¡ˆã—㦠ACI プロジェクトã«è²¢çŒ®ã™ã‚‹å ´åˆã¯ã€Ansible Community wiki ã® ACI ページ (https://github.com/ansible/community/wiki/Network:-ACI) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:643 msgid "You will find our roadmap, an overview of open ACI issues and pull-requests, and more information about who we are. If you have an interest in using ACI with Ansible, feel free to join! We occasionally meet online (on the #ansible-network chat channel, using Matrix at ansible.im or using IRC at `irc.libera.chat `_) to track progress and prepare for new Ansible releases." msgstr "ロードマップã€ã‚ªãƒ¼ãƒ—ン㪠ACI ã®å•題ãŠã‚ˆã³ãƒ—ãƒ«è¦æ±‚ã®æ¦‚è¦ã€ãªã‚‰ã³ã«ã“ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°æƒ…報を確èªã§ãã¾ã™ã€‚ACI ã‚’ Ansible ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãŠæ°—軽ã«ã”å‚加ãã ã•ã„。進æ—状æ³ã‚’追跡ã—ã€æ–°ã—ã„ Ansible ãƒªãƒªãƒ¼ã‚¹ã®æº–備をã™ã‚‹ãŸã‚ã«ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚° (#ansible-network ãƒãƒ£ãƒ³ãƒãƒ«ã€ansible.im ã®è¡¨ã€ã¾ãŸã¯ `irc.libera.chat `_ ã® IRC を使用) を行ã†å ´åˆã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:648 msgid "`ACI collection on Ansible Galaxy `_" msgstr "`ACI collection on Ansible Galaxy `_" #: ../../rst/scenario_guides/guide_aci.rst:649 msgid "View the content tab for a complete list of supported ACI modules." msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ ACI モジュールã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„タブをã”覧ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aci.rst:651 msgid "A walkthrough on how to develop new Cisco ACI modules to contribute back." msgstr "æ–°ã—ã„ Cisco ACI モジュールを開発ã—ã¦è²¢çŒ®ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹ã‚¦ã‚©ãƒ¼ã‚¯ã‚¹ãƒ«ãƒ¼" #: ../../rst/scenario_guides/guide_aci.rst:652 msgid "`ACI community `_" msgstr "`ACI community `_" #: ../../rst/scenario_guides/guide_aci.rst:653 msgid "The Ansible ACI community wiki page, includes roadmap, ideas and development documentation." msgstr "Ansible ACI コミュニティー㮠wiki ãƒšãƒ¼ã‚¸ã€‚ãƒ­ãƒ¼ãƒ‰ãƒžãƒƒãƒ—ã€æ¦‚念ã€ãŠã‚ˆã³é–‹ç™ºãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:654 msgid ":ref:`network_guide`" msgstr ":ref:`network_guide`" #: ../../rst/scenario_guides/guide_aci.rst:655 msgid "A detailed guide on how to use Ansible for automating network infrastructure." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®è‡ªå‹•化㫠Ansible を使用ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ãªã‚¬ã‚¤ãƒ‰ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:656 msgid "`Network Working Group `_" msgstr "`Network Working Group `_" #: ../../rst/scenario_guides/guide_aci.rst:657 msgid "The Ansible Network community page, includes contact information and meeting information." msgstr "Ansible Network コミュニティーページ。連絡先情報ãŠã‚ˆã³ãƒŸãƒ¼ãƒ†ã‚£ãƒ³ã‚°æƒ…å ±ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aci.rst:658 msgid "`User Mailing List `_" msgstr "`ユーザーメーリングリスト `_" #: ../../rst/scenario_guides/guide_aci.rst:659 #: ../../rst/scenario_guides/guide_aws.rst:282 msgid "Have a question? Stop by the google group!" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google Group ã‚’ã”覧ãã ã•ã„。" #: ../../rst/scenario_guides/guide_alicloud.rst:2 msgid "Alibaba Cloud Compute Services Guide" msgstr "Alibaba Cloud コンピュートサービスガイド" #: ../../rst/scenario_guides/guide_alicloud.rst:7 #: ../../rst/scenario_guides/guide_aws.rst:7 #: ../../rst/scenario_guides/guide_cloudstack.rst:7 #: ../../rst/scenario_guides/guide_gce.rst:7 #: ../../rst/scenario_guides/guide_online.rst:6 #: ../../rst/scenario_guides/guide_oracle.rst:7 #: ../../rst/scenario_guides/guide_packet.rst:6 #: ../../rst/scenario_guides/guide_rax.rst:7 #: ../../rst/scenario_guides/guide_scaleway.rst:10 #: ../../rst/scenario_guides/guide_vagrant.rst:7 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:11 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:11 #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:12 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:12 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:11 #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:11 msgid "Introduction" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/scenario_guides/guide_alicloud.rst:9 msgid "Ansible contains several modules for controlling and managing Alibaba Cloud Compute Services (Alicloud). This guide explains how to use the Alicloud Ansible modules together." msgstr "Ansible ã«ã¯ã€Alibaba Cloud Compute Services (Alicloud) を制御ãŠã‚ˆã³ç®¡ç†ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¤‡æ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Alicloud Ansible モジュールを一緒ã«ä½¿ç”¨ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:12 msgid "All Alicloud modules require ``footmark`` - install it on your control machine with ``pip install footmark``." msgstr "ã™ã¹ã¦ã® Alicloud モジュールã«ã¯ ``footmark`` ãŒå¿…è¦ã§ã™ã€‚ã“れã¯ã€``pip install footmark`` ã§ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒžã‚·ãƒ³ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:14 msgid "Cloud modules, including Alicloud modules, execute on your local machine (the control machine) with ``connection: local``, rather than on remote machines defined in your hosts." msgstr "Alicloud モジュールをå«ã‚€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ›ã‚¹ãƒˆã«å®šç¾©ã•れãŸãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã§ã¯ãªãã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ (コントロールマシン) ã§ ``connection: local`` を使用ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:16 msgid "Normally, you'll use the following pattern for plays that provision Alicloud resources::" msgstr "通常ã€Alicloud リソースをプロビジョニングã™ã‚‹ãƒ—レイã«ã¯æ¬¡ã®ãƒ‘ターンを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:28 #: ../../rst/scenario_guides/guide_aws.rst:31 #: ../../rst/scenario_guides/guide_vultr.rst:45 msgid "Authentication" msgstr "èªè¨¼" #: ../../rst/scenario_guides/guide_alicloud.rst:30 msgid "You can specify your Alicloud authentication credentials (access key and secret key) by passing them as environment variables or by storing them in a vars file." msgstr "Alicloud ã®èªè¨¼æƒ…å ± (アクセスキーãŠã‚ˆã³ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚­ãƒ¼) を指定ã™ã‚‹ã«ã¯ã€ãã®èªè¨¼æƒ…報を環境変数ã¨ã—ã¦æ¸¡ã™ã‹ã€vars ファイルã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:33 msgid "To pass authentication credentials as environment variables::" msgstr "環境変数ã¨ã—ã¦èªè¨¼æƒ…報を渡ã™ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:38 msgid "To store authentication credentials in a vars_file, encrypt them with :ref:`Ansible Vault` to keep them secure, then list them::" msgstr "èªè¨¼æƒ…報を vars_file ã«ä¿å­˜ã™ã‚‹ã«ã¯ã€:ref:`Ansible Vault` ã§èªè¨¼æƒ…報を暗å·åŒ–ã—ã¦ã‚»ã‚­ãƒ¥ã‚¢ã«ç¶­æŒã—ã¦ã‹ã‚‰ã€ãã®èªè¨¼æƒ…å ±ã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:44 msgid "Note that if you store your credentials in a vars_file, you need to refer to them in each Alicloud module. For example::" msgstr "èªè¨¼æƒ…報を vars_file ã«ä¿å­˜ã™ã‚‹å ´åˆã¯ã€å„ Alicloud モジュールã§èªè¨¼æƒ…報をå‚ç…§ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:54 #: ../../rst/scenario_guides/guide_aws.rst:57 #: ../../rst/scenario_guides/guide_rax.rst:86 msgid "Provisioning" msgstr "プロビジョニング" #: ../../rst/scenario_guides/guide_alicloud.rst:56 msgid "Alicloud modules create Alicloud ECS instances, disks, virtual private clouds, virtual switches, security groups and other resources." msgstr "Alicloud モジュールã¯ã€Alicloud ECS インスタンスã€ãƒ‡ã‚£ã‚¹ã‚¯ã€ä»®æƒ³ãƒ—ライベートクラウドã€ä»®æƒ³ã‚¹ã‚¤ãƒƒãƒã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³ãã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:58 msgid "You can use the ``count`` parameter to control the number of resources you create or terminate. For example, if you want exactly 5 instances tagged ``NewECS``, set the ``count`` of instances to 5 and the ``count_tag`` to ``NewECS``, as shown in the last task of the example playbook below. If there are no instances with the tag ``NewECS``, the task creates 5 new instances. If there are 2 instances with that tag, the task creates 3 more. If there are 8 instances with that tag, the task terminates 3 of those instances." msgstr "``count`` パラメーターを使用ã—ã¦ã€ä½œæˆã¾ãŸã¯çµ‚了ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®æ•°ã‚’制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``NewECS`` ã¨ã‚¿ã‚°ãŒä»˜ã„ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 5 ã¤å¿…è¦ãªå ´åˆã¯ã€ä»¥ä¸‹ã® Playbook ã®ä¾‹ã®æœ€å¾Œã®ã‚¿ã‚¹ã‚¯ã®ã‚ˆã†ã«ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã® ``count`` ã‚’ 5 ã«ã€``count_tag`` ã‚’ ``NewECS`` ã«ã€ãれãžã‚Œè¨­å®šã—ã¾ã™ã€‚タグ㌠``NewECS`` ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒãªã„å ´åˆã€ã‚¿ã‚¹ã‚¯ã¯ 5 ã¤ã®æ–°è¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã¾ã™ã€‚ãã®ã‚¿ã‚°ã‚’æŒã¤ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 2 ã¤ã‚ã‚‹å ´åˆã€ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã•ら㫠3 ã¤ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã¾ã™ã€‚ãã®ã‚¿ã‚°ã‚’æŒã¤ 8 ã¤ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã‚ã‚‹å ´åˆã€ã‚¿ã‚¹ã‚¯ã¯ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ã†ã¡ 3 ã¤ã‚’終了ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:63 msgid "If you do not specify a ``count_tag``, the task creates the number of instances you specify in ``count`` with the ``instance_name`` you provide." msgstr "``count_tag`` を指定ã—ãªã„ã¨ã€ã‚¿ã‚¹ã‚¯ã¯ã€æŒ‡å®šã—㟠``instance_name`` ã§ ``count`` ã«æŒ‡å®šã—ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®æ•°ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:121 msgid "In the example playbook above, data about the vpc, vswitch, group, and instances created by this playbook are saved in the variables defined by the \"register\" keyword in each task." msgstr "上記ã®ã‚µãƒ³ãƒ—ル Playbook ã§ã¯ã€ã“ã® Playbook ã§ä½œæˆã•れる vpcã€vswitchã€groupã€ãŠã‚ˆã³ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ãŒã€å„タスクã®ã€Œregisterã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§å®šç¾©ã•れる変数ã«ä¿å­˜ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_alicloud.rst:124 msgid "Each Alicloud module offers a variety of parameter options. Not all options are demonstrated in the above example. See each individual module for further details and examples." msgstr "å„ Alicloud モジュールã¯ã€ã•ã¾ã–ã¾ãªãƒ‘ラメーターオプションをæä¾›ã—ã¾ã™ã€‚上記ã®ä¾‹ã§ã€ã™ã¹ã¦ã®ã‚ªãƒ—ションãŒç¤ºã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。詳細ãŠã‚ˆã³ã‚µãƒ³ãƒ—ルã¯ã€å„モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:2 msgid "Amazon Web Services Guide" msgstr "Amazon Web Services ガイド" #: ../../rst/scenario_guides/guide_aws.rst:9 msgid "Ansible contains a number of modules for controlling Amazon Web Services (AWS). The purpose of this section is to explain how to put Ansible modules together (and use inventory scripts) to use Ansible in AWS context." msgstr "Ansible ã«ã¯ã€Amazon Web Services (AWS) を制御ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ç›®çš„ã¯ã€AWS ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§ Ansible を使用ã™ã‚‹ãŸã‚ã«ã€Ansible モジュールをã©ã®ã‚ˆã†ã«çµ„ã¿åˆã‚ã›ã‚‹ã‹ (インベントリースクリプトを使用ã™ã‚‹ã‹) を説明ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:12 msgid "Requirements for the AWS modules are minimal." msgstr "AWS モジュールã®è¦ä»¶ã¯æœ€å°é™ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:14 msgid "All of the modules require and are tested against recent versions of botocore and boto3. Starting with the 2.0 AWS collection releases, it is generally the policy of the collections to support the versions of these libraries released 12 months prior to the most recent major collection revision. Individual modules may require a more recent library version to support specific features or may require the boto library, check the module documentation for the minimum required version for each module. You must have the boto3 Python module installed on your control machine. You can install these modules from your OS distribution or using the python package installer: ``pip install boto3``." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€botocore ãŠã‚ˆã³ boto3 ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å¿…è¦ã¨ã—ã€ãれらã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã•れã¦ã„ã¾ã™ã€‚2.0 AWS コレクションリリース以é™ã€é€šå¸¸ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒªã‚·ãƒ¼ã¯ã€æœ€æ–°ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªãƒ“ジョン㮠12 カ月å‰ã«ãƒªãƒªãƒ¼ã‚¹ã•れãŸã“れらã®ãƒ©ã‚¤ãƒ–ラリーã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã§ã™ã€‚個々ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ç‰¹å®šã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«æœ€æ–°ã®ãƒ©ã‚¤ãƒ–ラリーãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…è¦ãªå ´åˆã‚„ã€boto ライブラリーãŒå¿…è¦ãªå ´åˆãŒã‚りã¾ã™ã€‚モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã€å„モジュールã«å¿…è¦ãªæœ€ä½Žãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’確èªã—ã¦ãã ã•ã„。制御マシン㫠boto3 Python モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€OS ディストリビューションã‹ã‚‰ã€ã¾ãŸã¯ python パッケージインストーラーを使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ (``pip install boto3``)。" #: ../../rst/scenario_guides/guide_aws.rst:16 msgid "Starting with the 2.0 releases of both collections, Python 2.7 support will be ended in accordance with AWS' `end of Python 2.7 support `_ and Python 3.6 or greater will be required." msgstr "両方ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ 2.0 リリース以é™ã€Python 2.7 サãƒãƒ¼ãƒˆã¯ AWS ã® `Python 2.7 サãƒãƒ¼ãƒˆã®çµ‚了 `_ 㨠Python 3.6 以上ã«å¿œã˜ã¦çµ‚了ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:19 msgid "Whereas classically Ansible will execute tasks in its host loop against multiple remote machines, most cloud-control steps occur on your local machine with reference to the regions to control." msgstr "従æ¥ã€Ansible ã¯ãƒ›ã‚¹ãƒˆãƒ«ãƒ¼ãƒ—内ã®ã‚¿ã‚¹ã‚¯ã‚’複数ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«å¯¾ã—ã¦å®Ÿè¡Œã—ã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®ã‚¯ãƒ©ã‚¦ãƒ‰åˆ¶å¾¡æ‰‹é †ã¯ã€åˆ¶å¾¡ã™ã‚‹ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å‚ç…§ã™ã‚‹ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:21 msgid "In your playbook steps we'll typically be using the following pattern for provisioning steps::" msgstr "Playbook ã®æ‰‹é †ã§ã¯ã€é€šå¸¸ã€ãƒ—ロビジョニング手順ã«ä»¥ä¸‹ã®ãƒ‘ターンを使用ã—ã¾ã™::" #: ../../rst/scenario_guides/guide_aws.rst:33 msgid "Authentication with the AWS-related modules is handled by either specifying your access and secret key as ENV variables or module arguments." msgstr "AWS 関連ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ãŸèªè¨¼ã¯ã€ENV 変数ã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã¨ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ãŠã‚ˆã³ç§˜å¯†éµã‚’指定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šå‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:36 msgid "For environment variables::" msgstr "環境変数ã®å ´åˆ::" #: ../../rst/scenario_guides/guide_aws.rst:41 msgid "For storing these in a vars_file, ideally encrypted with ansible-vault::" msgstr "vars_file ã«ä¿å­˜ã™ã‚‹ã«ã¯ã€ansible-vault ã§æš—å·åŒ–ã™ã‚‹ã“ã¨ãŒç†æƒ³çš„ã§ã™::" #: ../../rst/scenario_guides/guide_aws.rst:47 msgid "Note that if you store your credentials in vars_file, you need to refer to them in each AWS-module. For example::" msgstr "èªè¨¼æƒ…報を vars_file ã«ä¿å­˜ã™ã‚‹å ´åˆã¯ã€å„ AWS モジュールã§èªè¨¼æƒ…報をå‚ç…§ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:59 msgid "The ec2 module provisions and de-provisions instances within EC2." msgstr "ec2 モジュールã¯ã€EC2 内ã§ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ãƒ—ロビジョニングãŠã‚ˆã³ãƒ—ロビジョニング解除を行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:61 msgid "An example of making sure there are only 5 instances tagged 'Demo' in EC2 follows." msgstr "EC2 ã§ã€ŒDemoã€ã¨ã‚¿ã‚°ä»˜ã‘ã•れãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 5 個ã«ãªã‚‹ã‚ˆã†ã«ã™ã‚‹ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:63 msgid "In the example below, the \"exact_count\" of instances is set to 5. This means if there are 0 instances already existing, then 5 new instances would be created. If there were 2 instances, only 3 would be created, and if there were 8 instances, 3 instances would be terminated." msgstr "以下ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ã€Œexact_countã€ã¯ 5 ã«è¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒãªã„å ´åˆã¯ã€æ–°è¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 5 個作æˆã•れるã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚インスタンス㌠2 個ã‚ã‚‹å ´åˆã¯ã€3 個作æˆã•れã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ 8 個ã‚ã‚‹å ´åˆã¯ã€3 個ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒçµ‚了ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:67 msgid "What is being counted is specified by the \"count_tag\" parameter. The parameter \"instance_tags\" is used to apply tags to the newly created instance.::" msgstr "カウントã•れるもã®ã¯ã€Œcount_tagã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã§æŒ‡å®šã—ã¾ã™ã€‚「instance_tagsã€ãƒ‘ラメーターã¯ã€æ–°ãŸã«ä½œæˆã•れãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ã‚¿ã‚°ã«é©ç”¨ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:91 msgid "The data about what instances are created is being saved by the \"register\" keyword in the variable named \"ec2\"." msgstr "作æˆã•れるインスタンスã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯ã€ã€Œec2ã€ã¨ã„ã†å¤‰æ•°ã®ã€Œregisterã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«ã‚ˆã£ã¦ä¿å­˜ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:93 msgid "From this, we'll use the add_host module to dynamically create a host group consisting of these new instances. This facilitates performing configuration actions on the hosts immediately in a subsequent task.::" msgstr "ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ add_host モジュールを使用ã—ã€ã“ã‚Œã‚‰ã®æ–°è¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§æ§‹æˆã•れるホストグループを動的ã«ä½œæˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ã§ã€ãƒ›ã‚¹ãƒˆã§ã®è¨­å®šã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã™ãã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:120 msgid "With the host group now created, a second play at the bottom of the same provisioning playbook file might now have some configuration steps::" msgstr "ã“れã§ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ãŒä½œæˆã•れãŸã®ã§ã€åŒã˜ãƒ—ロビジョニング Playbook ファイルã®ä¸‹éƒ¨ã«ã‚ã‚‹2ã¤ç›®ã®ãƒ—レイã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªè¨­å®šã‚¹ãƒ†ãƒƒãƒ—ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:141 msgid "Security Groups" msgstr "セキュリティーグループ" #: ../../rst/scenario_guides/guide_aws.rst:143 msgid "Security groups on AWS are stateful. The response of a request from your instance is allowed to flow in regardless of inbound security group rules and vice-versa. In case you only want allow traffic with AWS S3 service, you need to fetch the current IP ranges of AWS S3 for one region and apply them as an egress rule.::" msgstr "AWS ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルã§ã™ã€‚インスタンスã‹ã‚‰ã®è¦æ±‚ã®å¿œç­”ã¯ã€å—信セキュリティーグループルールã«é–¢ä¿‚ãªãæµå…¥ãŒè¨±å¯ã•れã€ãã®é€†ã‚‚åŒæ§˜ã§ã™ã€‚AWS S3 サービスを使用ã™ã‚‹ãƒˆãƒ©ãƒ•ィックã®ã¿ã‚’許å¯ã™ã‚‹å ´åˆã¯ã€ã‚るリージョンã«å¯¾ã—㦠AWS S3 ã®ç¾åœ¨ã® IP 範囲をå–å¾—ã—ã€ãれを egress ルールã¨ã—ã¦é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:172 #: ../../rst/scenario_guides/guide_rax.rst:155 msgid "Host Inventory" msgstr "ホストインベントリー" #: ../../rst/scenario_guides/guide_aws.rst:174 msgid "Once your nodes are spun up, you'll probably want to talk to them again. With a cloud setup, it's best to not maintain a static list of cloud hostnames in text files. Rather, the best way to handle this is to use the aws_ec2 inventory plugin. See :ref:`dynamic_inventory`." msgstr "ノードãŒèµ·å‹•ã—ãŸã‚‰ã€ãŠãらãå†é€šä¿¡ã™ã‚‹ã‚ˆã†ã«ã—ãŸã„ã§ã—ょã†ã€‚クラウド設定ã§ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルã«ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ›ã‚¹ãƒˆåã®é™çš„リストを維æŒã—ãªã„ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れを処ç†ã™ã‚‹æœ€å–„ã®æ–¹æ³•ã¯ã€aws_ec2 インベントリープラグインを使用ã™ã‚‹ã“ã¨ã§ã™ã€‚:ref:`dynamic_inventory` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:177 msgid "The plugin will also return instances that were created outside of Ansible and allow Ansible to manage them." msgstr "ã“ã®ãƒ—ラグインã«ã‚ˆã‚Šã€Ansible 外ã§ä½œæˆã•れãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚‚é¸æŠžã•れã€Ansible ãŒã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’管ç†ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:182 msgid "Tags And Groups And Variables" msgstr "ã‚¿ã‚°ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³å¤‰æ•°" #: ../../rst/scenario_guides/guide_aws.rst:184 msgid "When using the inventory plugin, you can configure extra inventory structure based on the metadata returned by AWS." msgstr "インベントリープラグインを使用ã™ã‚‹å ´åˆã¯ã€AWS ã«ã‚ˆã‚Šè¿”ã•れるメタデータã«åŸºã¥ã„ã¦è¿½åŠ ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æ§‹é€ ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:186 msgid "For instance, you might use ``keyed_groups`` to create groups from instance tags::" msgstr "ãŸã¨ãˆã°ã€``keyed_groups`` を使用ã—ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚¿ã‚°ã‹ã‚‰ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:194 msgid "You can then target all instances with a \"class\" tag where the value is \"webserver\" in a play::" msgstr "次ã«ã€ã€Œclassã€ã‚¿ã‚°ã®ä»˜ã„ãŸã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ターゲットã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã“ã§ã€å€¤ã¯ãƒ—レイ内ã®ã€Œwebserverã€ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:200 msgid "You can also use these groups with 'group_vars' to set variables that are automatically applied to matching instances. See :ref:`splitting_out_vars`." msgstr "「group_varsã€ã§ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¦ã€ä¸€è‡´ã™ã‚‹ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«è‡ªå‹•çš„ã«é©ç”¨ã•れる変数を設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚「:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:205 msgid "Autoscaling with Ansible Pull" msgstr "Ansible Pull を使用ã—ãŸè‡ªå‹•スケーリング" #: ../../rst/scenario_guides/guide_aws.rst:207 msgid "Amazon Autoscaling features automatically increase or decrease capacity based on load. There are also Ansible modules shown in the cloud documentation that can configure autoscaling policy." msgstr "Amazon Autoscaling 機能ã¯ã€è² è·ã«å¿œã˜ã¦å®¹é‡ã‚’自動的ã«å¢—減ã—ã¾ã™ã€‚ã¾ãŸã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§èª¬æ˜Žã•れるよã†ã«ã€è‡ªå‹•スケーリングãƒãƒªã‚·ãƒ¼ã‚’設定ã™ã‚‹ Ansible モジュールãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:210 msgid "When nodes come online, it may not be sufficient to wait for the next cycle of an ansible command to come along and configure that node." msgstr "ノードãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚‹ã¨ã€ansible ã‚³ãƒžãƒ³ãƒ‰ã®æ¬¡ã®ã‚µã‚¤ã‚¯ãƒ«ãŒå映ã•れã¦ãã®ãƒŽãƒ¼ãƒ‰ã‚’設定ã™ã‚‹ã®ã‚’å¾…ã¤ã“ã¨ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:212 msgid "To do this, pre-bake machine images which contain the necessary ansible-pull invocation. Ansible-pull is a command line tool that fetches a playbook from a git server and runs it locally." msgstr "ãã®ãŸã‚ã«ã¯ã€å¿…è¦ãª ansible-pull 呼ã³å‡ºã—ã‚’å«ã‚€ãƒžã‚·ãƒ³ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’事å‰ã«ä½œæˆã—ã¾ã™ã€‚ansible-pull ã¯ã€git サーãƒãƒ¼ã‹ã‚‰ Playbook ã‚’å–å¾—ã—ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ„ールã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:214 msgid "One of the challenges of this approach is that there needs to be a centralized way to store data about the results of pull commands in an autoscaling context. For this reason, the autoscaling solution provided below in the next section can be a better approach." msgstr "ã“ã®ã‚¢ãƒ—ローãƒã®èª²é¡Œã® 1 ã¤ã¨ã—ã¦ã€pull コマンドã®çµæžœã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’自動スケーリングコンテキストã«ä¿å­˜ã™ã‚‹é›†ä¸­çš„ãªæ–¹æ³•ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã®ãŸã‚ã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§æä¾›ã•ã‚Œã‚‹è‡ªå‹•ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã®æ–¹ãŒé©åˆ‡ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:217 msgid "Read :ref:`ansible-pull` for more information on pull-mode playbooks." msgstr "pull モード㮠Playbook ã®è©³ç´°ã¯ã€ã€Œ:ref:`ansible-pull`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:222 msgid "Autoscaling with Ansible Tower" msgstr "Ansible Tower を使用ã—ãŸè‡ªå‹•スケーリング" #: ../../rst/scenario_guides/guide_aws.rst:224 msgid ":ref:`ansible_tower` also contains a very nice feature for auto-scaling use cases. In this mode, a simple curl script can call a defined URL and the server will \"dial out\" to the requester and configure an instance that is spinning up. This can be a great way to reconfigure ephemeral nodes. See the Tower install and product documentation for more details." msgstr "ã¾ãŸã€:ref:`ansible_tower` ã¯ã€è‡ªå‹•スケーリングã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«ã¯éžå¸¸ã«å„ªã‚ŒãŸæ©Ÿèƒ½ã‚‚å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ç°¡å˜ãª curl スクリプトã¯å®šç¾©ã•れ㟠URL を呼ã³å‡ºã™ã“ã¨ãŒã§ãã€ã‚µãƒ¼ãƒãƒ¼ã¯è¦æ±‚å…ƒã«å¯¾ã—ã¦ã€Œãƒ€ã‚¤ãƒ¤ãƒ«ã‚¢ã‚¦ãƒˆã€ã—ã€èµ·å‹•ã—ã¦ã„るインスタンスを構æˆã—ã¾ã™ã€‚ã“れã¯ã€ä¸€æ™‚ノードをå†è¨­å®šã™ã‚‹å„ªã‚ŒãŸæ–¹æ³•ã«ãªã‚Šã¾ã™ã€‚詳細ã¯ã€Tower ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨è£½å“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:228 msgid "A benefit of using the callback in Tower over pull mode is that job results are still centrally recorded and less information has to be shared with remote hosts." msgstr "pull モード㧠Tower ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’使用ã™ã‚‹åˆ©ç‚¹ã¯ã€ã‚¸ãƒ§ãƒ–ã®çµæžœãŒå¼•ãç¶šã中央ã§è¨˜éŒ²ã•れã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¨å…±æœ‰ã™ã‚‹å¿…è¦ã®ã‚る情報ãŒå°‘ãªããªã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:234 msgid "Ansible With (And Versus) CloudFormation" msgstr "CloudFormation を使用ã—㟠Ansible (Ansible 㨠CloudFormation ã®æ¯”較)" #: ../../rst/scenario_guides/guide_aws.rst:236 msgid "CloudFormation is a Amazon technology for defining a cloud stack as a JSON or YAML document." msgstr "CloudFormation ã¯ã€ã‚¯ãƒ©ã‚¦ãƒ‰ã‚¹ã‚¿ãƒƒã‚¯ã‚’ JSON ã¾ãŸã¯ YAML ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨ã—ã¦å®šç¾©ã™ã‚‹ Amazon テクノロジーã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:238 msgid "Ansible modules provide an easier to use interface than CloudFormation in many examples, without defining a complex JSON/YAML document. This is recommended for most users." msgstr "Ansible モジュールã¯ã€è¤‡é›‘㪠JSON/YAML ドキュメントを定義ã›ãšã«ã€å¤šãã®ä¾‹ã§ CloudFormation よりも簡å˜ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使用ã§ãã¾ã™ã€‚ã“れã¯ã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:241 msgid "However, for users that have decided to use CloudFormation, there is an Ansible module that can be used to apply a CloudFormation template to Amazon." msgstr "ãŸã ã—ã€CloudFormation を使用ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã€CloudFormation テンプレートを Amazon ã«é©ç”¨ã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã‚‹ Ansible モジュールãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:244 msgid "When using Ansible with CloudFormation, typically Ansible will be used with a tool like Packer to build images, and CloudFormation will launch those images, or ansible will be invoked through user data once the image comes online, or a combination of the two." msgstr "CloudFormation ã§ Ansible を使用ã™ã‚‹å ´åˆã¯ã€é€šå¸¸ã€Ansible ã‚’ Packer ãªã©ã®ãƒ„ールã§ä½¿ç”¨ã—ã¦ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’作æˆã—ã€CloudFormation ãŒãã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’èµ·å‹•ã™ã‚‹ã‹ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’通ã˜ã¦ ansible ãŒå‘¼ã³å‡ºã•れるã‹ã€ãã®çµ„ã¿åˆã‚ã›ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:247 msgid "Please see the examples in the Ansible CloudFormation module for more details." msgstr "詳細ã¯ã€Ansible CloudFormation モジュールã®ã‚µãƒ³ãƒ—ルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:252 msgid "AWS Image Building With Ansible" msgstr "Ansible ã§ã® AWS ã‚¤ãƒ¡ãƒ¼ã‚¸ã®æ§‹ç¯‰" #: ../../rst/scenario_guides/guide_aws.rst:254 msgid "Many users may want to have images boot to a more complete configuration rather than configuring them entirely after instantiation. To do this, one of many programs can be used with Ansible playbooks to define and upload a base image, which will then get its own AMI ID for usage with the ec2 module or other Ansible AWS modules such as ec2_asg or the cloudformation module. Possible tools include Packer, aminator, and Ansible's ec2_ami module." msgstr "多ãã®å ´åˆã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–後ã«ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’完全ã«è¨­å®šã™ã‚‹ã®ã§ã¯ãªãã€ã‚ˆã‚Šå®Œå…¨ãªè¨­å®šã§ã®èµ·å‹•を望ã¿ã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€Ansible Playbook ã¨ã¨ã‚‚ã«å¤šãã®ãƒ—ログラムã®ä¸­ã‹ã‚‰ 1 ã¤ä½¿ç”¨ã—ã¦ãƒ™ãƒ¼ã‚¹ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’定義ã—ã€ã‚¢ãƒƒãƒ—ロードã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ec2 モジュールã€ec2_asg モジュールや cloudformation モジュールãªã©ã®ãã®ä»–ã® Ansible AWS モジュールã¨ä½¿ç”¨ã™ã‚‹ãŸã‚ã€ç‹¬è‡ªã® AMI ID ã‚’å–å¾—ã—ã¾ã™ã€‚ツールã«ã¯ Packerã€aminatorã€ãŠã‚ˆã³ Ansible ã® ec2_ami モジュールãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:259 msgid "Generally speaking, we find most users using Packer." msgstr "一般的ã«ã¯ã€Packer ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:261 msgid "See the Packer documentation of the `Ansible local Packer provisioner `_ and `Ansible remote Packer provisioner `_." msgstr "`Ansible local Packer provisioner `_ ãŠã‚ˆã³ `Ansible remote Packer provisioner `_ ã® Packer ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:263 msgid "If you do not want to adopt Packer at this time, configuring a base-image with Ansible after provisioning (as shown above) is acceptable." msgstr "ç¾æ™‚点ã§ã¯ã€Packer を使用ã—ãªã„å ´åˆã¯ã€ãƒ—ロビジョニング後㫠(上記ã®ã‚ˆã†ã«) Ansible を使用ã—ãŸãƒ™ãƒ¼ã‚¹ã‚¤ãƒ¡ãƒ¼ã‚¸ã®è¨­å®šãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_aws.rst:268 msgid "Next Steps: Explore Modules" msgstr "次ã®ã‚¹ãƒ†ãƒƒãƒ—: ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¤œè¨¼" #: ../../rst/scenario_guides/guide_aws.rst:270 msgid "Ansible ships with lots of modules for configuring a wide array of EC2 services. Browse the \"Cloud\" category of the module documentation for a full list with examples." msgstr "Ansible ã«ã¯ã€ã•ã¾ã–ã¾ãª EC2 サービスを設定ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤šæ•°åŒæ¢±ã•れã¦ã„ã¾ã™ã€‚例をå«ã‚€å®Œå…¨ãªä¸€è¦§ã«ã¤ã„ã¦ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã€Œã‚¯ãƒ©ã‚¦ãƒ‰ã€ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_aws.rst:275 msgid ":ref:`list_of_collections`" msgstr ":ref:`list_of_collections`" #: ../../rst/scenario_guides/guide_aws.rst:276 msgid "Browse existing collections, modules, and plugins" msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインã®é–²è¦§" #: ../../rst/scenario_guides/guide_aws.rst:277 #: ../../rst/scenario_guides/guide_vagrant.rst:135 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:92 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:87 #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:52 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:88 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:213 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:125 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1181 msgid ":ref:`working_with_playbooks`" msgstr ":ref:`working_with_playbooks`" #: ../../rst/scenario_guides/guide_aws.rst:278 #: ../../rst/scenario_guides/guide_vagrant.rst:136 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:93 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:88 #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:53 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:89 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:214 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:126 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1182 msgid "An introduction to playbooks" msgstr "Playbook ã®æ¦‚è¦" #: ../../rst/scenario_guides/guide_aws.rst:279 msgid ":ref:`playbooks_delegation`" msgstr ":ref:`playbooks_delegation`" #: ../../rst/scenario_guides/guide_aws.rst:280 msgid "Delegation, useful for working with loud balancers, clouds, and locally executed steps." msgstr "委譲 (ロードãƒãƒ©ãƒ³ã‚µãƒ¼ã€ã‚¯ãƒ©ã‚¦ãƒ‰ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§å®Ÿè¡Œã—ãŸæ‰‹é †ã‚’使用ã™ã‚‹éš›ã«å½¹ã«ç«‹ã¡ã¾ã™)" #: ../../rst/scenario_guides/guide_aws.rst:281 msgid "`User Mailing List `_" msgstr "`ユーザーメーリングリスト `_" #: ../../rst/scenario_guides/guide_aws.rst:283 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/scenario_guides/guide_aws.rst:284 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/scenario_guides/guide_azure.rst:2 msgid "Microsoft Azure Guide" msgstr "Microsoft Azure ガイド" #: ../../rst/scenario_guides/guide_azure.rst:4 msgid "Ansible includes a suite of modules for interacting with Azure Resource Manager, giving you the tools to easily create and orchestrate infrastructure on the Microsoft Azure Cloud." msgstr "Ansible ã«ã¯ã€Azure Resource Manager ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¹ã‚¤ãƒ¼ãƒˆãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ç°¡å˜ã«ä½œæˆã—ã€Microsoft Azure Cloud 上ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’調整ã™ã‚‹ãƒ„ールをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:8 #: ../../rst/scenario_guides/guide_oracle.rst:13 #: ../../rst/scenario_guides/guide_packet.rst:16 #: ../../rst/scenario_guides/guide_scaleway.rst:26 #: ../../rst/scenario_guides/guide_vultr.rst:10 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:16 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:17 #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:12 #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:17 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:19 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:19 msgid "Requirements" msgstr "è¦ä»¶" #: ../../rst/scenario_guides/guide_azure.rst:10 msgid "Using the Azure Resource Manager modules requires having specific Azure SDK modules installed on the host running Ansible." msgstr "Azure Resource Manager モジュールを使用ã™ã‚‹ã«ã¯ã€Ansible を実行ã—ã¦ã„るホストã«ç‰¹å®šã® Azure SDK モジュールをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:17 msgid "If you are running Ansible from source, you can install the dependencies from the root directory of the Ansible repo." msgstr "ソースã‹ã‚‰ Ansible を実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã® root ディレクトリーã‹ã‚‰ä¾å­˜é–¢ä¿‚をインストールã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:24 msgid "You can also directly run Ansible in `Azure Cloud Shell `_, where Ansible is pre-installed." msgstr "ã¾ãŸã€Ansible ãŒäº‹å‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ `Azure Cloud Shell `_ ã§ Ansible を直接実行ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:27 msgid "Authenticating with Azure" msgstr "API ã§ã®èªè¨¼" #: ../../rst/scenario_guides/guide_azure.rst:29 msgid "Using the Azure Resource Manager modules requires authenticating with the Azure API. You can choose from two authentication strategies:" msgstr "Azure Resource Manager モジュールを使用ã™ã‚‹ã«ã¯ã€Azure API ã§èªè¨¼ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã®èªè¨¼ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:31 msgid "Active Directory Username/Password" msgstr "Active Directory ユーザーå/パスワード" #: ../../rst/scenario_guides/guide_azure.rst:32 msgid "Service Principal Credentials" msgstr "サービスプリンシパルã®èªè¨¼æƒ…å ±" #: ../../rst/scenario_guides/guide_azure.rst:34 msgid "Follow the directions for the strategy you wish to use, then proceed to `Providing Credentials to Azure Modules`_ for instructions on how to actually use the modules and authenticate with the Azure API." msgstr "使用ã™ã‚‹ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã®æŒ‡ç¤ºã«å¾“ã„ã€å®Ÿéš›ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—㦠Azure API ã§èªè¨¼ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ`Azure モジュールã¸ã®èªè¨¼æƒ…å ±ã®æä¾›`_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:39 msgid "Using Service Principal" msgstr "サービスプリンシパルã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_azure.rst:41 msgid "There is now a detailed official tutorial describing `how to create a service principal `_." msgstr "「`サービスプリンシパルã®ä½œæˆæ–¹æ³• `_ã€ã‚’説明ã™ã‚‹è©³ç´°ãªå…¬å¼ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:43 msgid "After stepping through the tutorial you will have:" msgstr "ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’実行ã™ã‚‹ã¨ã€ä»¥ä¸‹ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:45 msgid "Your Client ID, which is found in the \"client id\" box in the \"Configure\" page of your application in the Azure portal" msgstr "Azure ãƒãƒ¼ã‚¿ãƒ«ã®ã‚¢ãƒ—リケーションã®ã€Œè¨­å®šã€ãƒšãƒ¼ã‚¸ã®ã€Œã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ IDã€ãƒœãƒƒã‚¯ã‚¹ã«ã‚るクライアント ID。" #: ../../rst/scenario_guides/guide_azure.rst:46 msgid "Your Secret key, generated when you created the application. You cannot show the key after creation. If you lost the key, you must create a new one in the \"Configure\" page of your application." msgstr "シークレットキーã¯ã€ã‚¢ãƒ—リケーションã®ä½œæˆæ™‚ã«ç”Ÿæˆã•れã¾ã™ã€‚キーãŒç´›å¤±ã—ãŸå ´åˆã¯ã€ã‚¢ãƒ—リケーションã®ã€Œè¨­å®šã€ãƒšãƒ¼ã‚¸ã§æ–°ã—ã„キーを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:48 msgid "And finally, a tenant ID. It's a UUID (for example, ABCDEFGH-1234-ABCD-1234-ABCDEFGHIJKL) pointing to the AD containing your application. You will find it in the URL from within the Azure portal, or in the \"view endpoints\" of any given URL." msgstr "ãã—ã¦æœ€å¾Œã«ã€ãƒ†ãƒŠãƒ³ãƒˆ ID ã§ã™ã€‚ã“れã¯ã€ã‚¢ãƒ—リケーションをå«ã‚€ AD を指ã—示㙠UUID (例: ABCDEFGH-1234-ABCD-1234-ABCDEFGHIJKL) ã§ã™ã€‚ã“ã® ID ã¯ã€Azure ãƒãƒ¼ã‚¿ãƒ«å†…ã® URL ã‚„ã€æŒ‡å®šã® URL ã®ã€Œã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã®è¡¨ç¤ºã€ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:53 msgid "Using Active Directory Username/Password" msgstr "Active Directory ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_azure.rst:55 msgid "To create an Active Directory username/password:" msgstr "Active Directory ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:57 msgid "Connect to the Azure Classic Portal with your admin account" msgstr "管ç†è€…アカウントを使用ã—㦠Azure Classic Portal ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:58 msgid "Create a user in your default AAD. You must NOT activate Multi-Factor Authentication" msgstr "デフォルト㮠AAD ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã—ã¾ã™ã€‚マルãƒãƒ•ァクターèªè¨¼ã‚’アクティブã«ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:59 msgid "Go to Settings - Administrators" msgstr "Settingsã€Administrator ã®é †ã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:60 msgid "Click on Add and enter the email of the new user." msgstr "追加をクリックã—ã¦ã€æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¡ãƒ¼ãƒ«ã‚’入力ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:61 msgid "Check the checkbox of the subscription you want to test with this user." msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã‚µãƒ–スクリプションã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:62 msgid "Login to Azure Portal with this new user to change the temporary password to a new one. You will not be able to use the temporary password for OAuth login." msgstr "ã“ã®æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ Azure Portal ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã€ä¸€æ™‚パスワードを新è¦ãƒ‘スワードã«å¤‰æ›´ã—ã¾ã™ã€‚OAuth ログインã«ã€ä¸€æ™‚パスワードを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_azure.rst:66 msgid "Providing Credentials to Azure Modules" msgstr "Azure モジュールã¸ã®èªè¨¼æƒ…å ±ã®æä¾›" #: ../../rst/scenario_guides/guide_azure.rst:68 msgid "The modules offer several ways to provide your credentials. For a CI/CD tool such as Ansible AWX or Jenkins, you will most likely want to use environment variables. For local development you may wish to store your credentials in a file within your home directory. And of course, you can always pass credentials as parameters to a task within a playbook. The order of precedence is parameters, then environment variables, and finally a file found in your home directory." msgstr "モジュールã«ã¯ã€èªè¨¼æƒ…報をæä¾›ã™ã‚‹ã„ãã¤ã‹ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚Ansible AWX ã‚„ Jenkins ã®ã‚ˆã†ãª CI/CD ツールã§ã¯ã€ç’°å¢ƒå¤‰æ•°ã‚’使用ã™ã‚‹ã“ã¨ãŒå¤šã„ã§ã—ょã†ã€‚ローカルã§ã®é–‹ç™ºã§ã¯ã€ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®ãƒ•ァイルã«èªè¨¼æƒ…報をä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚èªè¨¼æƒ…å ±ã¯ãƒ‘ラメーターã¨ã—㦠Playbook 内ã®ã‚¿ã‚¹ã‚¯ã«æ¸¡ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚優先ã•れる順åºã¯ã€ãƒ‘ラメーターã€ç’°å¢ƒå¤‰æ•°ã€ãŠã‚ˆã³æœ€å¾Œã«ãƒ›ãƒ¼ãƒ ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚るファイルã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:74 msgid "Using Environment Variables" msgstr "追加ã®ç’°å¢ƒå¤‰æ•°" #: ../../rst/scenario_guides/guide_azure.rst:76 msgid "To pass service principal credentials via the environment, define the following variables:" msgstr "環境経由ã§ã‚µãƒ¼ãƒ“スプリンシパルã®èªè¨¼æƒ…報を渡ã™ã«ã¯ã€ä»¥ä¸‹ã®å¤‰æ•°ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:78 #: ../../rst/scenario_guides/guide_azure.rst:93 msgid "AZURE_CLIENT_ID" msgstr "AZURE_CLIENT_ID" #: ../../rst/scenario_guides/guide_azure.rst:79 msgid "AZURE_SECRET" msgstr "AZURE_SECRET" #: ../../rst/scenario_guides/guide_azure.rst:80 #: ../../rst/scenario_guides/guide_azure.rst:87 msgid "AZURE_SUBSCRIPTION_ID" msgstr "AZURE_SUBSCRIPTION_ID" #: ../../rst/scenario_guides/guide_azure.rst:81 #: ../../rst/scenario_guides/guide_azure.rst:94 msgid "AZURE_TENANT" msgstr "AZURE_TENANT" #: ../../rst/scenario_guides/guide_azure.rst:83 msgid "To pass Active Directory username/password via the environment, define the following variables:" msgstr "環境経由㧠Active Directory ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードを渡ã™ã«ã¯ã€ä»¥ä¸‹ã®å¤‰æ•°ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:85 #: ../../rst/scenario_guides/guide_azure.rst:91 msgid "AZURE_AD_USER" msgstr "AZURE_AD_USER" #: ../../rst/scenario_guides/guide_azure.rst:86 #: ../../rst/scenario_guides/guide_azure.rst:92 msgid "AZURE_PASSWORD" msgstr "AZURE_PASSWORD" #: ../../rst/scenario_guides/guide_azure.rst:89 msgid "To pass Active Directory username/password in ADFS via the environment, define the following variables:" msgstr "環境経由㧠Active Directory ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードを渡ã™ã«ã¯ã€ä»¥ä¸‹ã®å¤‰æ•°ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:95 msgid "AZURE_ADFS_AUTHORITY_URL" msgstr "AZURE_ADFS_AUTHORITY_URL" #: ../../rst/scenario_guides/guide_azure.rst:97 msgid "\"AZURE_ADFS_AUTHORITY_URL\" is optional. It's necessary only when you have own ADFS authority like https://yourdomain.com/adfs." msgstr "「AZURE_ADFS_AUTHORITY_URLã€ã¯ä»»æ„ã§ã™ã€‚ã“れã¯ã€https://yourdomain.com/adfs ã¨ã„ã£ãŸç‹¬è‡ªã®èªè¨¼æ©Ÿé–¢ãŒã‚ã‚‹å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:100 msgid "Storing in a File" msgstr "ファイルã¸ã®ä¿å­˜" #: ../../rst/scenario_guides/guide_azure.rst:102 msgid "When working in a development environment, it may be desirable to store credentials in a file. The modules will look for credentials in ``$HOME/.azure/credentials``. This file is an ini style file. It will look as follows:" msgstr "開発環境ã§ä½œæ¥­ã™ã‚‹å ´åˆã¯ã€ãƒ•ァイルã«èªè¨¼æƒ…報をä¿å­˜ã™ã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ ``$HOME/.azure/credentials`` ã«ã‚ã‚‹èªè¨¼æƒ…報を探ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイル㯠ini å½¢å¼ã®ãƒ•ァイルã§ã™ã€‚以下ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:113 msgid "If your secret values contain non-ASCII characters, you must `URL Encode `_ them to avoid login errors." msgstr "シークレット値㫠ASCII ä»¥å¤–ã®æ–‡å­—ãŒå«ã¾ã‚Œã‚‹å ´åˆã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ãŸã‚ã« `URL エンコード `_ を行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:115 msgid "It is possible to store multiple sets of credentials within the credentials file by creating multiple sections. Each section is considered a profile. The modules look for the [default] profile automatically. Define AZURE_PROFILE in the environment or pass a profile parameter to specify a specific profile." msgstr "複数ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã™ã‚‹ã“ã¨ã§ã€èªè¨¼æƒ…報ファイルã«è¤‡æ•°ã®èªè¨¼æƒ…報をä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å„セクションã¯ãƒ—ロファイルã¨ã¿ãªã•れã¾ã™ã€‚モジュール㯠[default] ãƒ—ãƒ­ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è‡ªå‹•çš„ã«æ¤œç´¢ã—ã¾ã™ã€‚環境内㧠AZURE_PROFILE を定義ã™ã‚‹ã‹ã€ç‰¹å®šã®ãƒ—ロファイルを指定ã™ã‚‹ãŸã‚ã« profile パラメーターを渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:120 msgid "Passing as Parameters" msgstr "パラメーターã¨ã—ã¦æ¸¡ã™" #: ../../rst/scenario_guides/guide_azure.rst:122 msgid "If you wish to pass credentials as parameters to a task, use the following parameters for service principal:" msgstr "èªè¨¼æƒ…報をパラメーターã¨ã—ã¦ã‚¿ã‚¹ã‚¯ã«æ¸¡ã™ã«ã¯ã€ã‚µãƒ¼ãƒ“スプリンシパルã«ã¤ã„ã¦ä»¥ä¸‹ã®ãƒ‘ラメーターを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:124 #: ../../rst/scenario_guides/guide_azure.rst:139 msgid "client_id" msgstr "client_id" #: ../../rst/scenario_guides/guide_azure.rst:125 msgid "secret" msgstr "secret" #: ../../rst/scenario_guides/guide_azure.rst:126 #: ../../rst/scenario_guides/guide_azure.rst:133 msgid "subscription_id" msgstr "subscription_id" #: ../../rst/scenario_guides/guide_azure.rst:127 #: ../../rst/scenario_guides/guide_azure.rst:140 msgid "tenant" msgstr "tenant" #: ../../rst/scenario_guides/guide_azure.rst:129 msgid "Or, pass the following parameters for Active Directory username/password:" msgstr "ã¾ãŸã¯ Active Directory ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードã«ã¤ã„ã¦ã®ä»¥ä¸‹ã®ãƒ‘ラメーターを渡ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:131 #: ../../rst/scenario_guides/guide_azure.rst:137 msgid "ad_user" msgstr "ad_user" #: ../../rst/scenario_guides/guide_azure.rst:135 msgid "Or, pass the following parameters for ADFS username/password:" msgstr "ã¾ãŸã¯ã€ä»¥ä¸‹ã®ãƒ‘ラメーターを ADFS ユーザーåã¾ãŸã¯ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:141 msgid "adfs_authority_url" msgstr "adfs_authority_url" #: ../../rst/scenario_guides/guide_azure.rst:143 msgid "\"adfs_authority_url\" is optional. It's necessary only when you have own ADFS authority like https://yourdomain.com/adfs." msgstr "「adfs_authority_urlã€ã¯ä»»æ„ã§ã™ã€‚ã“れã¯ã€https://yourdomain.com/adfs ã¨ã„ã£ãŸç‹¬è‡ªã®èªè¨¼æ©Ÿé–¢ãŒã‚ã‚‹å ´åˆã«é™ã‚Šå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:147 msgid "Other Cloud Environments" msgstr "ãã®ä»–ã®ã‚¯ãƒ©ã‚¦ãƒ‰ç’°å¢ƒ" #: ../../rst/scenario_guides/guide_azure.rst:149 msgid "To use an Azure Cloud other than the default public cloud (for example, Azure China Cloud, Azure US Government Cloud, Azure Stack), pass the \"cloud_environment\" argument to modules, configure it in a credential profile, or set the \"AZURE_CLOUD_ENVIRONMENT\" environment variable. The value is either a cloud name as defined by the Azure Python SDK (for example, \"AzureChinaCloud\", \"AzureUSGovernment\"; defaults to \"AzureCloud\") or an Azure metadata discovery URL (for Azure Stack)." msgstr "デフォルトã®ãƒ‘ブリッククラウド (Azure China Cloudã€Azure US Government Cloudã€Azure US Government Cloudã€Azure Stack ãªã©) 以外㮠Azure Cloud を使用ã™ã‚‹ã«ã¯ã€ã€Œcloud_environmentã€å¼•æ•°ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã‹ã€èªè¨¼æƒ…報プロファイルã§ã“れを設定ã™ã‚‹ã‹ã€ã€ŒAZURE_CLOUD_ENVIRONMENTã€ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ã€Azure Python SDK ã§å®šç¾©ã•れるクラウドå (例:「AzureChinaCloudã€ã€ã€ŒAzureUSGovernmentã€ã€‚デフォルトã¯ã€ŒAzureCloudã€) ã¾ãŸã¯ Azure メタデータ検出 URL (Azure Stack 用) ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:155 msgid "Creating Virtual Machines" msgstr "仮想マシンã®ä½œæˆ" #: ../../rst/scenario_guides/guide_azure.rst:157 msgid "There are two ways to create a virtual machine, both involving the azure_rm_virtualmachine module. We can either create a storage account, network interface, security group and public IP address and pass the names of these objects to the module as parameters, or we can let the module do the work for us and accept the defaults it chooses." msgstr "azure_rm_virtualmachine モジュールã«é–¢é€£ã™ã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚ストレージアカウントã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã€ãƒ‘ブリック IP アドレスを作æˆã—ã€ã“れらã®ã‚ªãƒ–ジェクトã®åå‰ã‚’パラメーターã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™æ–¹æ³•ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä½œæ¥­ã‚’ä»»ã›ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒé¸æŠžã™ã‚‹ãƒ‡ãƒ•ォルトをå—ã‘入れる方法ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:162 msgid "Creating Individual Components" msgstr "個別コンãƒãƒ¼ãƒãƒ³ãƒˆã®ä½œæˆ" #: ../../rst/scenario_guides/guide_azure.rst:164 msgid "An Azure module is available to help you create a storage account, virtual network, subnet, network interface, security group and public IP. Here is a full example of creating each of these and passing the names to the ``azure.azcollection.azure_rm_virtualmachine`` module at the end:" msgstr "Azure モジュールã¯ã€ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã€ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ã‚µãƒ–ãƒãƒƒãƒˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³ãƒ‘ブリック IP ã®ä½œæˆã«å½¹ç«‹ã¡ã¾ã™ã€‚ã“ã“ã§ã¯ã€ã“れらを作æˆã—ã€æœ€å¾Œã« ``azure.azcollection.azure_rm_virtualmachine`` モジュールã«åå‰ã‚’渡ã™ãŸã‚ã®å®Œå…¨ãªä¾‹ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:233 msgid "Each of the Azure modules offers a variety of parameter options. Not all options are demonstrated in the above example. See each individual module for further details and examples." msgstr "Azure ã®å„モジュールã¯ã€ã•ã¾ã–ã¾ãªãƒ‘ラメーターオプションをæä¾›ã—ã¾ã™ã€‚上記ã®ä¾‹ã§ã€ã™ã¹ã¦ã®ã‚ªãƒ—ションãŒç¤ºã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。詳細ãŠã‚ˆã³ã‚µãƒ³ãƒ—ルã¯ã€å„モジュールをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:238 msgid "Creating a Virtual Machine with Default Options" msgstr "デフォルトオプションを使用ã—ãŸä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆ" #: ../../rst/scenario_guides/guide_azure.rst:240 msgid "If you simply want to create a virtual machine without specifying all the details, you can do that as well. The only caveat is that you will need a virtual network with one subnet already in your resource group. Assuming you have a virtual network already with an existing subnet, you can run the following to create a VM:" msgstr "ã™ã¹ã¦ã®è©³ç´°ã‚’指定ã›ãšã«ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹å ´åˆã¯ã€ã“れも実行ã§ãã¾ã™ã€‚å”¯ä¸€ã®æ³¨æ„点ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚°ãƒ«ãƒ¼ãƒ—内㫠1 ã¤ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’æŒã¤ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒå¿…è¦ã¨ãªã‚‹ã“ã¨ã§ã™ã€‚既存サブãƒãƒƒãƒˆã‚’使用ã™ã‚‹ä»®æƒ³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒæ—¢ã«ã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:261 msgid "Creating a Virtual Machine in Availability Zones" msgstr "アベイラビリティーゾーンã§ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆ" #: ../../rst/scenario_guides/guide_azure.rst:263 msgid "If you want to create a VM in an availability zone, consider the following:" msgstr "アベイラビリティーゾーンã«ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’検討ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:266 msgid "Both OS disk and data disk must be a 'managed disk', not an 'unmanaged disk'." msgstr "OS ディスクã¨ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ã‚¹ã‚¯ã¯ã„ãšã‚Œã‚‚「éžç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã€ã§ã¯ãªãã€ã€Œç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã€ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:267 msgid "When creating a VM with the ``azure.azcollection.azure_rm_virtualmachine`` module, you need to explicitly set the ``managed_disk_type`` parameter to change the OS disk to a managed disk. Otherwise, the OS disk becomes an unmanaged disk." msgstr "``azure.azcollection.azure_rm_virtualmachine`` モジュールã§ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹å ´åˆã¯ã€``managed_disk_type`` パラメーターを明示的ã«è¨­å®šã—㦠OS ディスクを管ç†ãƒ‡ã‚£ã‚¹ã‚¯ã«å¤‰æ›´ã—ã¾ã™ã€‚ãã†ã§ãªã„ã¨ã€OS ディスクã¯éžç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:271 msgid "When you create a data disk with the ``azure.azcollection.azure_rm_manageddisk`` module, you need to explicitly specify the ``storage_account_type`` parameter to make it a managed disk. Otherwise, the data disk will be an unmanaged disk." msgstr "``azure.azcollection.azure_rm_manageddisk`` モジュールã§ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ã‚¹ã‚¯ã‚’作æˆã™ã‚‹å ´åˆã¯ã€``storage_account_type`` ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã—ã¦ç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã‚’作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã†ã§ãªã„ã¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ‡ã‚£ã‚¹ã‚¯ã¯éžç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:275 msgid "A managed disk does not require a storage account or a storage container, unlike an unmanaged disk. In particular, note that once a VM is created on an unmanaged disk, an unnecessary storage container named \"vhds\" is automatically created." msgstr "管ç†ãƒ‡ã‚£ã‚¹ã‚¯ã¯ã€éžç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã¨ç•°ãªã‚Šã€ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚„ストレージコンテナーを必è¦ã¨ã—ã¾ã›ã‚“。特ã«ã€éžç®¡ç†ãƒ‡ã‚£ã‚¹ã‚¯ã«ä»®æƒ³ãƒžã‚·ãƒ³ä½œæˆã™ã‚‹ã¨ã€ã€Œvhdsã€ã¨ã„ã†åå‰ã®ä¸è¦ãªã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ãŒè‡ªå‹•çš„ã«ä½œæˆã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:279 msgid "When you create an IP address with the ``azure.azcollection.azure_rm_publicipaddress`` module, you must set the ``sku`` parameter to ``standard``. Otherwise, the IP address cannot be used in an availability zone." msgstr "``azure.azcollection.azure_rm_publicipaddress`` モジュール㧠IP アドレスを作æˆã™ã‚‹å ´åˆã¯ã€``sku`` パラメーターを ``standard`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーン㧠IP アドレスを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_azure.rst:285 #: ../../rst/scenario_guides/guide_packet.rst:207 #: ../../rst/scenario_guides/guide_scaleway.rst:170 msgid "Dynamic Inventory Script" msgstr "動的インベントリースクリプト" #: ../../rst/scenario_guides/guide_azure.rst:287 msgid "If you are not familiar with Ansible's dynamic inventory scripts, check out :ref:`Intro to Dynamic Inventory `." msgstr "Ansible ã®å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ãƒˆã«æ…£ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã€Œ:ref:`å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ¦‚è¦ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_azure.rst:289 msgid "The Azure Resource Manager inventory script is called `azure_rm.py `_. It authenticates with the Azure API exactly the same as the Azure modules, which means you will either define the same environment variables described above in `Using Environment Variables`_, create a ``$HOME/.azure/credentials`` file (also described above in `Storing in a File`_), or pass command line parameters. To see available command line options execute the following:" msgstr "Azure Resource Manager インベントリースクリプト㯠`azure_rm.py `_ ã¨å‘¼ã°ã‚Œã¾ã™ã€‚Azure API ã§ã®èªè¨¼ã¯ Azure モジュールã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œ`Using Environment Variables`_ã€ã§èª¬æ˜Žã•れã¦ã„る環境変数ã¨åŒã˜ç’°å¢ƒå¤‰æ•°ã‚’定義ã™ã‚‹ã‹ã€``$HOME/.azure/credentials`` ファイルを作æˆã™ã‚‹ã‹ (「`Storing in a File`_ã€ã‚’å‚ç…§)ã€ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ‘ラメーターを渡ã—ã¾ã™ã€‚利用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションを表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:299 msgid "As with all dynamic inventory scripts, the script can be executed directly, passed as a parameter to the ansible command, or passed directly to ansible-playbook using the -i option. No matter how it is executed the script produces JSON representing all of the hosts found in your Azure subscription. You can narrow this down to just hosts found in a specific set of Azure resource groups, or even down to a specific host." msgstr "ã™ã¹ã¦ã®å‹•的インベントリースクリプトã¨åŒæ§˜ã«ã€ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ç›´æŽ¥å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚‚ã€ansible コマンドã®ãƒ‘ラメータã¨ã—ã¦æ¸¡ã™ã“ã¨ã‚‚ã€-i オプションを使用ã—㦠ansible-playbook ã«ç›´æŽ¥æ¸¡ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã©ã®ã‚ˆã†ã«å®Ÿè¡Œã—ã¦ã‚‚ã€ã‚¹ã‚¯ãƒªãƒ—トã¯ã€Azure サブスクリプションã§è¦‹ã¤ã‹ã£ãŸã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’表㙠JSON を生æˆã—ã¾ã™ã€‚ã“れをã€ç‰¹å®šã® Azure リソースグループã®ã‚»ãƒƒãƒˆã§è¦‹ã¤ã‹ã£ãŸãƒ›ã‚¹ãƒˆã ã‘ã«çµžã‚Šè¾¼ã‚“ã ã‚Šã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã«çµžã‚Šè¾¼ã‚“ã ã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:304 msgid "For a given host, the inventory script provides the following host variables:" msgstr "インベントリースクリプトã¯ã€æŒ‡å®šã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ä»¥ä¸‹ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:350 msgid "Host Groups" msgstr "ホストグループ" #: ../../rst/scenario_guides/guide_azure.rst:352 msgid "By default hosts are grouped by:" msgstr "デフォルトã§ã¯ã€ãƒ›ã‚¹ãƒˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:354 msgid "azure (all hosts)" msgstr "azure (å…¨ã¦ã®ãƒ›ã‚¹ãƒˆ)" #: ../../rst/scenario_guides/guide_azure.rst:355 msgid "location name" msgstr "ロケーションå" #: ../../rst/scenario_guides/guide_azure.rst:356 msgid "resource group name" msgstr "リソースグループå" #: ../../rst/scenario_guides/guide_azure.rst:357 msgid "security group name" msgstr "セキュリティーグループå" #: ../../rst/scenario_guides/guide_azure.rst:358 msgid "tag key" msgstr "タグキー" #: ../../rst/scenario_guides/guide_azure.rst:359 msgid "tag key_value" msgstr "ã‚¿ã‚°ã® key_value" #: ../../rst/scenario_guides/guide_azure.rst:360 msgid "os_disk operating_system_type (Windows/Linux)" msgstr "os_disk operating_system_type (Windows/Linux)" #: ../../rst/scenario_guides/guide_azure.rst:362 msgid "You can control host groupings and host selection by either defining environment variables or creating an azure_rm.ini file in your current working directory." msgstr "環境変数を定義ã™ã‚‹ã‹ã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« azure_rm.ini ファイルを作æˆã—ã¦ã€ãƒ›ã‚¹ãƒˆã®ã‚°ãƒ«ãƒ¼ãƒ—化ã¨ãƒ›ã‚¹ãƒˆã®é¸æŠžã‚’制御ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:365 msgid "NOTE: An .ini file will take precedence over environment variables." msgstr "注記: .ini ファイルã¯ç’°å¢ƒå¤‰æ•°ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:367 msgid "NOTE: The name of the .ini file is the basename of the inventory script (in other words, 'azure_rm') with a '.ini' extension. This allows you to copy, rename and customize the inventory script and have matching .ini files all in the same directory." msgstr "注記: .ini ファイルã®åå‰ã¯ã€ã€Œ.iniã€æ‹¡å¼µå­ãŒä»˜ã„ãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã®ãƒ™ãƒ¼ã‚¹å (ã¤ã¾ã‚Šã€Œazure_rmã€) ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã®ã‚³ãƒ”ーã€åå‰å¤‰æ›´ã€ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºãŒå¯èƒ½ã¨ãªã‚Šã€ã™ã¹ã¦åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® .ini ファイルãŒä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:371 msgid "Control grouping using the following variables defined in the environment:" msgstr "環境ã§å®šç¾©ã•れãŸä»¥ä¸‹ã®å¤‰æ•°ã‚’使用ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—化を制御ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:373 msgid "AZURE_GROUP_BY_RESOURCE_GROUP=yes" msgstr "AZURE_GROUP_BY_RESOURCE_GROUP=yes" #: ../../rst/scenario_guides/guide_azure.rst:374 msgid "AZURE_GROUP_BY_LOCATION=yes" msgstr "AZURE_GROUP_BY_LOCATION=yes" #: ../../rst/scenario_guides/guide_azure.rst:375 msgid "AZURE_GROUP_BY_SECURITY_GROUP=yes" msgstr "AZURE_GROUP_BY_SECURITY_GROUP=yes" #: ../../rst/scenario_guides/guide_azure.rst:376 msgid "AZURE_GROUP_BY_TAG=yes" msgstr "AZURE_GROUP_BY_TAG=yes" #: ../../rst/scenario_guides/guide_azure.rst:377 msgid "AZURE_GROUP_BY_OS_FAMILY=yes" msgstr "AZURE_GROUP_BY_OS_FAMILY=yes" #: ../../rst/scenario_guides/guide_azure.rst:379 msgid "Select hosts within specific resource groups by assigning a comma separated list to:" msgstr "コンマ区切りリストを割り当ã¦ã¦ã€ç‰¹å®šã®ãƒªã‚½ãƒ¼ã‚¹ã‚°ãƒ«ãƒ¼ãƒ—内ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:381 msgid "AZURE_RESOURCE_GROUPS=resource_group_a,resource_group_b" msgstr "AZURE_RESOURCE_GROUPS=resource_group_a,resource_group_b" #: ../../rst/scenario_guides/guide_azure.rst:383 msgid "Select hosts for specific tag key by assigning a comma separated list of tag keys to:" msgstr "タグキーã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã‚’割り当ã¦ã¦ã€å®šã®ã‚¿ã‚°ã‚­ãƒ¼ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:385 msgid "AZURE_TAGS=key1,key2,key3" msgstr "AZURE_TAGS=key1,key2,key3" #: ../../rst/scenario_guides/guide_azure.rst:387 msgid "Select hosts for specific locations by assigning a comma separated list of locations to:" msgstr "ロケーションã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒªã‚¹ãƒˆã‚’割り当ã¦ã¦ã€ç‰¹å®šã®ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:389 msgid "AZURE_LOCATIONS=eastus,eastus2,westus" msgstr "AZURE_LOCATIONS=eastus,eastus2,westus" #: ../../rst/scenario_guides/guide_azure.rst:391 msgid "Or, select hosts for specific tag key:value pairs by assigning a comma separated list key:value pairs to:" msgstr "ã¾ãŸã¯ã€ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆ key:value ペアを割り当ã¦ã€ç‰¹å®šã®ã‚¿ã‚° key:value ペアã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:393 msgid "AZURE_TAGS=key1:value1,key2:value2" msgstr "AZURE_TAGS=key1:value1,key2:value2" #: ../../rst/scenario_guides/guide_azure.rst:395 msgid "If you don't need the powerstate, you can improve performance by turning off powerstate fetching:" msgstr "é›»æºçŠ¶æ…‹ã‚’å¿…è¦ã¨ã—ãªã„å ´åˆã¯ã€é›»æºçŠ¶æ…‹ã®å–得をオフã«ã—ã¦ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:397 msgid "AZURE_INCLUDE_POWERSTATE=no" msgstr "AZURE_INCLUDE_POWERSTATE=no" #: ../../rst/scenario_guides/guide_azure.rst:399 msgid "A sample azure_rm.ini file is included along with the inventory script in `here `_. An .ini file will contain the following:" msgstr "azure_rm.ini ファイルã®ã‚µãƒ³ãƒ—ルã¯ã€`here `_ ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã¨ã¨ã‚‚ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚.ini ファイルã«ã¯ã€ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:428 #: ../../rst/scenario_guides/guide_oracle.rst:73 msgid "Examples" msgstr "例" #: ../../rst/scenario_guides/guide_azure.rst:430 msgid "Here are some examples using the inventory script:" msgstr "以下ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã®ä½¿ç”¨ä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:452 msgid "Here is a simple playbook to exercise the Azure inventory script:" msgstr "以下ã¯ã€Azure インベントリースクリプトを実行ã™ã‚‹ãŸã‚ã®å˜ç´”㪠Playbook ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:464 msgid "You can execute the playbook with something like:" msgstr "Playbook ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªæ–¹æ³•ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_azure.rst:472 msgid "Disabling certificate validation on Azure endpoints" msgstr "Azure エンドãƒã‚¤ãƒ³ãƒˆã§ã®è¨¼æ˜Žæ›¸æ¤œè¨¼ã®ç„¡åŠ¹åŒ–" #: ../../rst/scenario_guides/guide_azure.rst:474 msgid "When an HTTPS proxy is present, or when using Azure Stack, it may be necessary to disable certificate validation for Azure endpoints in the Azure modules. This is not a recommended security practice, but may be necessary when the system CA store cannot be altered to include the necessary CA certificate. Certificate validation can be controlled by setting the \"cert_validation_mode\" value in a credential profile, via the \"AZURE_CERT_VALIDATION_MODE\" environment variable, or by passing the \"cert_validation_mode\" argument to any Azure module. The default value is \"validate\"; setting the value to \"ignore\" will prevent all certificate validation. The module argument takes precedence over a credential profile value, which takes precedence over the environment value." msgstr "HTTPS プロキシーãŒå­˜åœ¨ã™ã‚‹å ´åˆã€ã¾ãŸã¯ Azure Stack を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€Azure モジュール㧠Azure エンドãƒã‚¤ãƒ³ãƒˆã®è¨¼æ˜Žæ›¸æ¤œè¨¼ã‚’無効ã«ã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“ã‚Œã¯æŽ¨å¥¨ã•れるセキュリティー対策ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ã‚·ã‚¹ãƒ†ãƒ  CA ストアを変更ã—ã¦å¿…è¦ãª CA 証明書をå«ã‚ã‚‹ã“ã¨ãŒã§ããªã„å ´åˆã«å¿…è¦ã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã¯ã€èªè¨¼æƒ…報プロファイルã§ã€Œcert_validation_modeã€å€¤ã‚’設定ã™ã‚‹ã‹ã€ç’°å¢ƒå¤‰æ•°ã€ŒAZURE_CERT_VALIDATION_MODEã€ã‚’経由ã™ã‚‹ã‹ã€ã€Œcert_validation_modeã€å¼•æ•°ã‚’ä»»æ„ã® Azure ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã“ã¨ã§åˆ¶å¾¡ã§ãã¾ã™ã€‚デフォルト値ã¯ã€Œvalidateã€ã§ã€ã€Œignoreã€ã«è¨­å®šã™ã‚‹ã¨è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã¯è¡Œã‚れã¾ã›ã‚“。モジュールã®å¼•æ•°ã¯ã€ç’°å¢ƒã®å€¤ã‚ˆã‚Šã‚‚優先ã•れるèªè¨¼æƒ…報プロファイルã®å€¤ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:2 msgid "CloudStack Cloud Guide" msgstr "CloudStack Cloud ガイド" #: ../../rst/scenario_guides/guide_cloudstack.rst:8 msgid "The purpose of this section is to explain how to put Ansible modules together to use Ansible in a CloudStack context. You will find more usage examples in the details section of each module." msgstr "本セクションã®ç›®çš„ã¯ã€Ansible モジュールを 1 ã¤ã«ã¾ã¨ã‚㦠CloudStack コンテキスト㧠Ansible を使用ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚詳細ã¯ã€å„モジュールã®è©³ç´°ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_cloudstack.rst:10 msgid "Ansible contains a number of extra modules for interacting with CloudStack based clouds. All modules support check mode, are designed to be idempotent, have been created and tested, and are maintained by the community." msgstr "Ansible ã«ã¯ã€CloudStack ベースã®ã‚¯ãƒ©ã‚¦ãƒ‰ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®è¿½åŠ ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚モジュールサãƒãƒ¼ãƒˆã®ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¯ã™ã¹ã¦ã€å†ªç­‰æ€§ãŒã‚りã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã«ã‚ˆã£ã¦ä½œæˆã€ãƒ†ã‚¹ãƒˆã•れã€ç¶­æŒã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:12 msgid "Some of the modules will require domain admin or root admin privileges." msgstr "一部ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ç®¡ç†ã¾ãŸã¯ root 管ç†è€…権é™ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:15 #: ../../rst/scenario_guides/guide_infoblox.rst:16 #: ../../rst/scenario_guides/scenario_template.rst:17 msgid "Prerequisites" msgstr "è¦ä»¶" #: ../../rst/scenario_guides/guide_cloudstack.rst:16 msgid "Prerequisites for using the CloudStack modules are minimal. In addition to Ansible itself, all of the modules require the python library ``cs`` https://pypi.org/project/cs/" msgstr "CloudStack モジュールを使用ã™ã‚‹ãŸã‚ã®å‰ææ¡ä»¶ã¯æœ€å°é™ã§ã™ã€‚Ansible 自体ã«åŠ ãˆã¦ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯ python ライブラリー ``cs`` https://pypi.org/project/cs/ ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:18 msgid "You'll need this Python module installed on the execution host, usually your workstation." msgstr "ã“ã® Python モジュールã¯ã€å®Ÿè¡Œãƒ›ã‚¹ãƒˆ (通常ã¯ãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:24 msgid "Or alternatively starting with Debian 9 and Ubuntu 16.04:" msgstr "ã‚‚ã—ãã¯ã€Debian 9 ãŠã‚ˆã³ Ubuntu 16.04 ã‹ã‚‰å§‹ã¾ã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:30 msgid "cs also includes a command line interface for ad hoc interaction with the CloudStack API, for example ``$ cs listVirtualMachines state=Running``." msgstr "cs ã«ã¯ã€CloudStack API ã¨ã®ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯å¯¾è©±ç”¨ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース (例: ``$ cs listVirtualMachines state=Running``) ã‚‚å«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:33 msgid "Limitations and Known Issues" msgstr "制é™ãŠã‚ˆã³æ—¢çŸ¥ã®å•題" #: ../../rst/scenario_guides/guide_cloudstack.rst:34 msgid "VPC support has been improved since Ansible 2.3 but is still not yet fully implemented. The community is working on the VPC integration." msgstr "Ansible 2.3 以é™ã€VPC サãƒãƒ¼ãƒˆãŒæ”¹å–„ã•れã¾ã—ãŸãŒã€ã¾ã å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。コミュニティー㯠VPC ã®çµ±åˆã«å–り組んã§ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:37 #: ../../rst/scenario_guides/guide_rax.rst:48 msgid "Credentials File" msgstr "èªè¨¼æƒ…報ファイル" #: ../../rst/scenario_guides/guide_cloudstack.rst:38 msgid "You can pass credentials and the endpoint of your cloud as module arguments, however in most cases it is a far less work to store your credentials in the cloudstack.ini file." msgstr "èªè¨¼æƒ…å ±ã¨ã‚¯ãƒ©ã‚¦ãƒ‰ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’モジュール引数ã¨ã—ã¦æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã€èªè¨¼æƒ…報を cloudstack.ini ファイルã«ä¿å­˜ã™ã‚‹ä½œæ¥­ã¯ã¯ã‚‹ã‹ã«å°‘ãªããªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:40 msgid "The python library cs looks for the credentials file in the following order (last one wins):" msgstr "Python ライブラリー cs ã¯ã€ä»¥ä¸‹ã®é †ç•ªã§èªè¨¼æƒ…報ファイルを検索ã—ã¾ã™ (最後ã®ã‚³ãƒ”ーãŒå„ªå…ˆã•れã¾ã™)。" #: ../../rst/scenario_guides/guide_cloudstack.rst:42 msgid "A ``.cloudstack.ini`` (note the dot) file in the home directory." msgstr "ホームディレクトリー㮠``.cloudstack.ini`` ファイル (ãƒ‰ãƒƒãƒˆã«æ³¨æ„)。" #: ../../rst/scenario_guides/guide_cloudstack.rst:43 msgid "A ``CLOUDSTACK_CONFIG`` environment variable pointing to an .ini file." msgstr ".ini ファイルをå‚ç…§ã™ã‚‹ ``CLOUDSTACK_CONFIG`` 環境変数。" #: ../../rst/scenario_guides/guide_cloudstack.rst:44 msgid "A ``cloudstack.ini`` (without the dot) file in the current working directory, same directory as your playbooks are located." msgstr "ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``cloudstack.ini`` ファイル (ドットãªã—) ã¯ã€Playbook ãŒç½®ã‹ã‚Œã¦ã„るディレクトリーã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:46 msgid "The structure of the ini file must look like this:" msgstr "ini ãƒ•ã‚¡ã‚¤ãƒ«ã®æ§‹é€ ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:57 msgid "The section ``[cloudstack]`` is the default section. ``CLOUDSTACK_REGION`` environment variable can be used to define the default section." msgstr "``[cloudstack]`` セクションã¯ãƒ‡ãƒ•ォルトã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚``CLOUDSTACK_REGION`` 環境変数を使用ã—ã¦ã€ãƒ‡ãƒ•ォルトã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:61 msgid "The ENV variables support ``CLOUDSTACK_*`` as written in the documentation of the library ``cs``, like ``CLOUDSTACK_TIMEOUT``, ``CLOUDSTACK_METHOD``, and so on. has been implemented into Ansible. It is even possible to have some incomplete config in your cloudstack.ini:" msgstr "ENV 変数ã¯ãƒ©ã‚¤ãƒ–ラリー ``cs`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¨˜è¼‰ã•れã¦ã„るよã†ã«ã€``CLOUDSTACK_TIMEOUT``ã€``CLOUDSTACK_METHOD`` ãªã©ã® ``CLOUDSTACK_*`` をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚cloudstack.ini ã«ä¸å®Œå…¨ãªè¨­å®šã®ä¸€éƒ¨ã‚’å«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:70 msgid "and fulfill the missing data by either setting ENV variables or tasks params:" msgstr "ENV 変数ã¾ãŸã¯ tasks パラメーターを設定ã—ã¦ã€ä¸è¶³ã—ã¦ã„るデータã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:86 msgid "Regions" msgstr "リージョン" #: ../../rst/scenario_guides/guide_cloudstack.rst:87 msgid "If you use more than one CloudStack region, you can define as many sections as you want and name them as you like, for example:" msgstr "複数㮠CloudStack リージョンを使用ã™ã‚‹å ´åˆã¯ã€å¿…è¦ãªæ•°ã ã‘セクションを定義ã—ã€ä»»æ„ã®åå‰ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:107 msgid "Sections can also be used to for login into the same region using different accounts." msgstr "セクションã¯ã€ç•°ãªã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã—ã¦åŒã˜ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã®ã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:109 msgid "By passing the argument ``api_region`` with the CloudStack modules, the region wanted will be selected." msgstr "CloudStack モジュールã§å¼•æ•° ``api_region`` を渡ã™ã¨ã€å¸Œæœ›ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ãŒé¸æŠžã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:120 msgid "Or by looping over a regions list if you want to do the task in every region:" msgstr "ã¾ãŸã¯ã€ã™ã¹ã¦ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å ´åˆã¯ã€ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ãƒªã‚¹ãƒˆã‚’ループã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:135 msgid "Environment Variables" msgstr "環境変数" #: ../../rst/scenario_guides/guide_cloudstack.rst:138 msgid "Since Ansible 2.3 it is possible to use environment variables for domain (``CLOUDSTACK_DOMAIN``), account (``CLOUDSTACK_ACCOUNT``), project (``CLOUDSTACK_PROJECT``), VPC (``CLOUDSTACK_VPC``) and zone (``CLOUDSTACK_ZONE``). This simplifies the tasks by not repeating the arguments for every tasks." msgstr "Ansible 2.3 以é™ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ (``CLOUDSTACK_DOMAIN``)ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ (``CLOUDSTACK_ACCOUNT``)ã€ãƒ—ロジェクト (``CLOUDSTACK_PROJECT``)ã€VPC (``CLOUDSTACK_VPC``)ã€ãŠã‚ˆã³ã‚¾ãƒ¼ãƒ³ (``CLOUDSTACK_ZONE``) ã«ç’°å¢ƒå¤‰æ•°ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å…¨ã‚¿ã‚¹ã‚¯ã®å¼•数を繰り返ã™å¿…è¦ãŒãªããªã‚Šã€ã‚¿ã‚¹ã‚¯ãŒç°¡ç´ åŒ–ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:140 msgid "Below you see an example how it can be used in combination with Ansible's block feature:" msgstr "以下ã¯ã€Ansible ã®ãƒ–ロック機能ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:166 msgid "You are still able overwrite the environment variables using the module arguments, for example ``zone: sf-2``" msgstr "モジュールã®å¼•数を使用ã—ã¦ç’°å¢ƒå¤‰æ•°ã‚’上書ãã§ãã¾ã™ (例: ``zone: sf-2``)。" #: ../../rst/scenario_guides/guide_cloudstack.rst:168 msgid "Unlike ``CLOUDSTACK_REGION`` these additional environment variables are ignored in the CLI ``cs``." msgstr "``CLOUDSTACK_REGION`` ã¨ã¯ç•°ãªã‚Šã€CLI ``cs`` ã§ã¯ã“れらã®è¿½åŠ ã®ç’°å¢ƒå¤‰æ•°ã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:171 #: ../../rst/scenario_guides/guide_rax.rst:406 msgid "Use Cases" msgstr "ユースケース" #: ../../rst/scenario_guides/guide_cloudstack.rst:172 msgid "The following should give you some ideas how to use the modules to provision VMs to the cloud. As always, there isn't only one way to do it. But as always: keep it simple for the beginning is always a good start." msgstr "以下ã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’クラウドã«ãƒ—ロビジョニングã™ã‚‹æ–¹æ³•を示ã—ã¾ã™ã€‚ã“ã‚Œã‚’è¡Œã†æ–¹æ³•㯠1 ã¤ã§ã¯ã‚りã¾ã›ã‚“ãŒã€æœ€åˆã¯ã‚·ãƒ³ãƒ—ルã«ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:175 msgid "Use Case: Provisioning in a Advanced Networking CloudStack setup" msgstr "ユースケース: Advanced Networking CloudStack 設定ã§ã®ãƒ—ロビジョニング" #: ../../rst/scenario_guides/guide_cloudstack.rst:176 msgid "Our CloudStack cloud has an advanced networking setup, we would like to provision web servers, which get a static NAT and open firewall ports 80 and 443. Further we provision database servers, to which we do not give any access to. For accessing the VMs by SSH we use a SSH jump host." msgstr "CloudStack クラウドã«ã¯é«˜åº¦ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šãŒã‚りã€é™çš„㪠NAT ã‚’å–å¾—ã—ã€ãƒ•ァイアウォールãƒãƒ¼ãƒˆ 80 ãŠã‚ˆã³ 443 ã‚’é–‹ã Web サーãƒãƒ¼ã®ãƒ—ロビジョニングを行ã„ã¾ã™ã€‚ã¾ãŸã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã‚‚プロビジョニングã—ã¾ã™ãŒã€ã“れã«ã¯ã‚¢ã‚¯ã‚»ã‚¹æ¨©ãŒä»˜ä¸Žã•れã¦ã„ã¾ã›ã‚“。SSH ã«ã‚ˆã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ã¯ SSH ジャンプホストを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:178 #: ../../rst/scenario_guides/guide_cloudstack.rst:285 msgid "This is how our inventory looks like:" msgstr "インベントリーã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:198 msgid "As you can see, the public IPs for our web servers and jumphost has been assigned as variable ``public_ip`` directly in the inventory." msgstr "ã”覧ã®ã‚ˆã†ã«ã€Web サーãƒãƒ¼ãŠã‚ˆã³ã‚¸ãƒ£ãƒ³ãƒ—ホストã®ãƒ‘ブリック IP ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ç›´æŽ¥å¤‰æ•° ``public_ip`` ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:200 msgid "The configure the jumphost, web servers and database servers, we use ``group_vars``. The ``group_vars`` directory contains 4 files for configuration of the groups: cloud-vm, jumphost, webserver and db-server. The cloud-vm is there for specifying the defaults of our cloud infrastructure." msgstr "ジャンプホストã€Web サーãƒãƒ¼ã€ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã—ã¾ã™ã€‚``group_vars`` を使用ã—ã¾ã™ã€‚``group_vars`` ディレクトリーã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—設定用㮠4 ã¤ã®ãƒ•ァイル (cloud-vmã€jumphostã€webserverã€ãŠã‚ˆã³ db-server) ã‚’å«ã¿ã¾ã™ã€‚cloud-vm ã¯ã‚¯ãƒ©ã‚¦ãƒ‰ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ãƒ‡ãƒ•ォルトを指定ã™ã‚‹ãŸã‚ã«å­˜åœ¨ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:209 msgid "Our database servers should get more CPU and RAM, so we define to use a ``Large`` offering for them." msgstr "データベースサーãƒãƒ¼ã¯ã‚ˆã‚Šå¤šãã® CPU ãŠã‚ˆã³ RAM ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€``Large`` オファリングã®ä½¿ç”¨ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:217 msgid "The web servers should get a ``Small`` offering as we would scale them horizontally, which is also our default offering. We also ensure the known web ports are opened for the world." msgstr "Web サーãƒãƒ¼ã¯ã€æ°´å¹³æ–¹å‘ã«æ‹¡å¼µã™ã‚‹ãŸã‚ã€``Small`` ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€ãƒ‡ãƒ•ォルトã®ã‚ªãƒ•ァリングã§ã‚‚ã‚りã¾ã™ã€‚ã¾ãŸã€æ—¢çŸ¥ã® Web ãƒãƒ¼ãƒˆãŒã‚°ãƒ­ãƒ¼ãƒãƒ«ã«é–‹ã„ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:227 msgid "Further we provision a jump host which has only port 22 opened for accessing the VMs from our office IPv4 network." msgstr "ã•らã«ã€ã‚ªãƒ•ィス IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ä»®æƒ³ãƒžã‚·ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ãƒãƒ¼ãƒˆ 22 ã®ã¿ã‚’é–‹ãジャンプホストをプロビジョニングã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:236 msgid "Now to the fun part. We create a playbook to create our infrastructure we call it ``infra.yml``:" msgstr "ã“ã“ã‹ã‚‰ãŒé‡è¦ã§ã™ã€‚インフラストラクãƒãƒ£ãƒ¼ã‚’構築ã™ã‚‹ãŸã‚ã® Playbook を作æˆã—ã¾ã™ã€‚ã“れã¯ã€``infra.yml`` ã¨å‘¼ã°ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:267 msgid "In the above play we defined 3 tasks and use the group ``cloud-vm`` as target to handle all VMs in the cloud but instead SSH to these VMs, we use ``delegate_to: localhost`` to execute the API calls locally from our workstation." msgstr "上記ã®ãƒ—レイã§ã¯ã€3 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’定義ã—ã€ã‚°ãƒ«ãƒ¼ãƒ— ``cloud-vm`` をターゲットã¨ã—ã¦ä½¿ç”¨ã—ã€ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’ã™ã¹ã¦å‡¦ç†ã—ã¾ã™ãŒã€ä»£ã‚りã«ã“れらã®ä»®æƒ³ãƒžã‚·ãƒ³ã« SSH を使用ã™ã‚‹ãŸã‚ã€``delegate_to: localhost`` を使用ã—ã¦ãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ­ãƒ¼ã‚«ãƒ«ã« API 呼ã³å‡ºã—を実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:269 msgid "In the first task, we ensure we have a running VM created with the Debian template. If the VM is already created but stopped, it would just start it. If you like to change the offering on an existing VM, you must add ``force: yes`` to the task, which would stop the VM, change the offering and start the VM again." msgstr "最åˆã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€Debian テンプレートã§å®Ÿè¡Œä¸­ã®ä»®æƒ³ãƒžã‚·ãƒ³ãŒä½œæˆã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã—ãŸã€‚仮想マシンãŒä½œæˆã•れã¦ã„ã¦åœæ­¢ã—ã¦ã„ã‚‹å ´åˆã¯ã€é–‹å§‹ã™ã‚‹ã ã‘ã§ã™ã€‚既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã§ã‚ªãƒ•ァリングを変更ã™ã‚‹å ´åˆã¯ ``force: yes`` をタスクã«è¿½åŠ ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯åœæ­¢ã—ã€ã‚ªãƒ•ァリングを変更ã—ã¦å†åº¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’é–‹å§‹ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:271 msgid "In the second task we ensure the ports are opened if we give a public IP to the VM." msgstr "2 ã¤ç›®ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã«ãƒ‘ブリック IP を付与ã—ãŸå ´åˆã«ãƒãƒ¼ãƒˆãŒé–‹ãよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:273 msgid "In the third task we add static NAT to the VMs having a public IP defined." msgstr "3 ã¤ç›®ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€ãƒ‘ブリック IP ãŒå®šç¾©ã•れã¦ã„る仮想マシンã«é™çš„ NAT を追加ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:276 msgid "The public IP addresses must have been acquired in advance, also see ``cs_ip_address``" msgstr "パブリック IP アドレスã¯äº‹å‰ã«å–å¾—ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚「``cs_ip_address``ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_cloudstack.rst:278 msgid "For some modules, for example ``cs_sshkeypair`` you usually want this to be executed only once, not for every VM. Therefore you would make a separate play for it targeting localhost. You find an example in the use cases below." msgstr "ãŸã¨ãˆã°ã€``cs_sshkeypair`` ãªã©ã®ä¸€éƒ¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã”ã¨ã«ä¸€åº¦ã ã‘ã“れを実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ローカルホストを対象ã¨ã™ã‚‹åˆ¥ã®ãƒ—レイを作æˆã—ã¾ã™ã€‚以下ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ä¾‹ã‚’見ã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:281 msgid "Use Case: Provisioning on a Basic Networking CloudStack setup" msgstr "ユースケース: 基本的ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ CloudStack 設定ã®ãƒ—ロビジョニング" #: ../../rst/scenario_guides/guide_cloudstack.rst:283 msgid "A basic networking CloudStack setup is slightly different: Every VM gets a public IP directly assigned and security groups are used for access restriction policy." msgstr "基本的ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ CloudStack ã®è¨­å®šã¯è‹¥å¹²ç•°ãªã‚Šã¾ã™ã€‚ã™ã¹ã¦ã®ä»®æƒ³ãƒžã‚·ãƒ³ãŒç›´æŽ¥å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ‘ブリック IP ã‚’å–å¾—ã—ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ãŒã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™ãƒãƒªã‚·ãƒ¼ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:296 msgid "The default for your VMs looks like this:" msgstr "仮想マシンã®ãƒ‡ãƒ•ォルトã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:305 msgid "Our webserver will also be in security group ``web``:" msgstr "Web サーãƒãƒ¼ã‚‚セキュリティーグループ ``web`` ã«å«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:313 msgid "The playbook looks like the following:" msgstr "Playbook ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:375 msgid "In the first play we setup the security groups, in the second play the VMs will created be assigned to these groups. Further you see, that we assign the public IP returned from the modules to the host inventory. This is needed as we do not know the IPs we will get in advance. In a next step you would configure the DNS servers with these IPs for accessing the VMs with their DNS name." msgstr "最åˆã®ãƒ—レイã§ã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚°ãƒ«ãƒ¼ãƒ—を設定ã—ã€2 ã¤ç›®ã®ãƒ—レイã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ä½œæˆã•れã¾ã™ã€‚ã•らã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰è¿”ã•れãŸãƒ‘ブリック IP をホストã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒç¢ºèªã§ãã¾ã™ã€‚ã“れã¯ã€äº‹å‰ã«å–å¾—ã™ã‚‹ IP を把æ¡ã—ã¦ã„ãªã„ãŸã‚å¿…è¦ã«ãªã‚Šã¾ã™ã€‚次ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€ã“ã®ã‚ˆã†ãª IP を使用ã—㦠DNS サーãƒãƒ¼ã‚’設定ã—ã€ä»®æƒ³ãƒžã‚·ãƒ³ã« DNS åã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_cloudstack.rst:377 msgid "In the last task we wait for SSH to be accessible, so any later play would be able to access the VM by SSH without failure." msgstr "最後ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€SSH ãŒã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ãªã‚‹ã®ã‚’å¾…ã¡ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€å¾Œç¶šã®ãƒ—レイã§ã¯ã€SSH ã§ä»®æƒ³ãƒžã‚·ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã«å¤±æ•—ã›ãšã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_docker.rst:4 msgid "Docker Guide" msgstr "Docker ガイド" #: ../../rst/scenario_guides/guide_docker.rst:6 msgid "The content on this page has moved. Please see the updated :ref:`ansible_collections.community.docker.docsite.scenario_guide` in the `community.docker collection `_." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ç§»å‹•ã—ã¾ã—ãŸã€‚`community.docker collection `_ ã«ã‚ã‚‹æ›´æ–°ã•れ㟠:ref:`ansible_collections.community.docker.docsite.scenario_guide` ã‚’ã”覧ãã ã•ã„。" #: ../../rst/scenario_guides/guide_gce.rst:2 msgid "Google Cloud Platform Guide" msgstr "Google Cloud Platform ガイド" #: ../../rst/scenario_guides/guide_gce.rst:9 msgid "Ansible + Google have been working together on a set of auto-generated Ansible modules designed to consistently and comprehensively cover the entirety of the Google Cloud Platform (GCP)." msgstr "Ansible ãŠã‚ˆã³ Google ã¯ã¨ã‚‚ã«ã€Google Cloud Platform (GCP) 全体を一貫ã—ã¦åŒ…括的ã«å¯¾å¿œã™ã‚‹ãŸã‚ã«è¨­è¨ˆã•れãŸã€è‡ªå‹•生æˆã•れる Ansible モジュールã®ã‚»ãƒƒãƒˆã‚’開発ã—ã¾ã—ãŸã€‚" #: ../../rst/scenario_guides/guide_gce.rst:13 msgid "Ansible contains modules for managing Google Cloud Platform resources, including creating instances, controlling network access, working with persistent disks, managing load balancers, and a lot more." msgstr "Ansible ã«ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ä½œæˆã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ã®åˆ¶å¾¡ã€æ°¸ç¶šçš„ãªãƒ‡ã‚£ã‚¹ã‚¯ã®ä½¿ç”¨ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã®ç®¡ç†ãªã©ã€Google Cloud Platform リソースを管ç†ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:17 msgid "These new modules can be found under a new consistent name scheme \"gcp_*\" (Note: gcp_target_proxy and gcp_url_map are legacy modules, despite the \"gcp_*\" name. Please use gcp_compute_target_proxy and gcp_compute_url_map instead)." msgstr "ã“ã‚Œã‚‰ã®æ–°ã—ã„モジュールã¯ã€æ–°ã—ã„一貫ã—ãŸåå‰ã‚¹ã‚­ãƒ¼ãƒ ã€Œgcp_*ã€ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ (注: gcp_target_proxy ãŠã‚ˆã³ gcp_url_map 㯠「gcp_*ã€ã®åå‰ã§ã™ãŒã€ãƒ¬ã‚¬ã‚·ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚代ã‚り㫠gcp_compute_target_proxy ãŠã‚ˆã³ gcp_compute_url_map を使用ã—ã¦ãã ã•ã„)。" #: ../../rst/scenario_guides/guide_gce.rst:21 msgid "Additionally, the gcp_compute inventory plugin can discover all Google Compute Engine (GCE) instances and make them automatically available in your Ansible inventory." msgstr "ã•らã«ã€gcp_compute インベントリープラグインã¯ã€ã™ã¹ã¦ã® Google Compute Engine(GCE) インスタンスを検出ã—ã€Ansible インベントリーã§è‡ªå‹•çš„ã«åˆ©ç”¨å¯èƒ½ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:25 msgid "You may see a collection of other GCP modules that do not conform to this naming convention. These are the original modules primarily developed by the Ansible community. You will find some overlapping functionality such as with the \"gce\" module and the new \"gcp_compute_instance\" module. Either can be used, but you may experience issues trying to use them together." msgstr "ã“ã®å‘½åè¦å‰‡ã«æº–æ‹ ã—ã¦ã„ãªã„ä»–ã® GCP モジュールã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒè¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚ã“れらã¯ã€ä¸»ã« Ansible コミュニティーã«ã‚ˆã£ã¦é–‹ç™ºã•れãŸã‚ªãƒªã‚¸ãƒŠãƒ«ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚「gceã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨æ–°ã—ã„「gcp_compute_instanceã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚ˆã†ã«ã€æ©Ÿèƒ½ãŒé‡è¤‡ã—ã¦ã„ã‚‹ã‚‚ã®ãŒã‚りã¾ã™ã€‚ã©ã¡ã‚‰ã‚’使用ã—ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“ãŒã€ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã¨å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:31 msgid "While the community GCP modules are not going away, Google is investing effort into the new \"gcp_*\" modules. Google is committed to ensuring the Ansible community has a great experience with GCP and therefore recommends adopting these new modules if possible." msgstr "コミュニティー㮠GCP モジュールã¯ãªããªã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€Google ã¯æ–°ã—ã„「gcp_*ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«åŠ›ã‚’æ³¨ã„ã§ã„ã¾ã™ã€‚Google ã¯ã€Ansible コミュニティー㌠GCP ã§è±Šå¯ŒãªçµŒé¨“ãŒã‚ã‚‹ã“ã¨ã‚’確ã‹ã«ã™ã‚‹ãŸã‚ã«ã‚³ãƒŸãƒƒãƒˆã•れã¦ã„ã‚‹ãŸã‚ã€å¯èƒ½ãªå ´åˆã¯ã“ã‚Œã‚‰ã®æ–°è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å°Žå…¥ã‚’推奨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:38 msgid "Requisites" msgstr "è¦ä»¶" #: ../../rst/scenario_guides/guide_gce.rst:39 msgid "The GCP modules require both the ``requests`` and the ``google-auth`` libraries to be installed." msgstr "GCP モジュールã§ã¯ã€``requests`` ライブラリー㨠``google-auth`` ライブラリーã®ä¸¡æ–¹ã‚’インストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:46 msgid "Alternatively for RHEL / CentOS, the ``python-requests`` package is also available to satisfy ``requests`` libraries." msgstr "RHEL/CentOS ã®å ´åˆã¯ã€``python-requests`` ライブラリーを満ãŸã™ãŸã‚ã« ``requests`` パッケージも利用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:54 msgid "Credentials" msgstr "èªè¨¼æƒ…å ±" #: ../../rst/scenario_guides/guide_gce.rst:55 msgid "It's easy to create a GCP account with credentials for Ansible. You have multiple options to get your credentials - here are two of the most common options:" msgstr "Ansible ã®èªè¨¼æƒ…報を使用ã—㦠GCP アカウントを作æˆã§ãã¾ã™ã€‚èªè¨¼æƒ…報をå–å¾—ã™ã‚‹ã‚ªãƒ—ションã¯è¤‡æ•°ã‚りã¾ã™ã€‚以下ã«ã€æœ€ã‚‚一般的ãªã‚ªãƒ—ション㮠2 ã¤ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:58 msgid "Service Accounts (Recommended): Use JSON service accounts with specific permissions." msgstr "サービスアカウント (推奨): 特定ã®ãƒ‘ーミッションをæŒã¤ JSON サービスアカウントを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:59 msgid "Machine Accounts: Use the permissions associated with the GCP Instance you're using Ansible on." msgstr "マシンアカウント: Ansible ã‚’ãŠä½¿ã„ã® GCP インスタンスã«é–¢é€£ä»˜ã‘られãŸãƒ‘ーミッションを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:61 msgid "For the following examples, we'll be using service account credentials." msgstr "以下ã®ä¾‹ã§ã¯ã€ã‚µãƒ¼ãƒ“スアカウントã®èªè¨¼æƒ…報を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:63 msgid "To work with the GCP modules, you'll first need to get some credentials in the JSON format:" msgstr "GCP モジュールを使用ã™ã‚‹ã«ã¯ã€æœ€åˆã« JSON å½¢å¼ã§ã„ãã¤ã‹ã®èªè¨¼æƒ…報をå–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:66 msgid "`Create a Service Account `_" msgstr "`Create a Service Account `_" #: ../../rst/scenario_guides/guide_gce.rst:67 msgid "`Download JSON credentials `_" msgstr "`Download JSON credentials `_" #: ../../rst/scenario_guides/guide_gce.rst:69 msgid "Once you have your credentials, there are two different ways to provide them to Ansible:" msgstr "èªè¨¼æƒ…報をå–å¾—ã—ãŸã‚ã¨ã€Ansible ã«æä¾›ã™ã‚‹æ–¹æ³•㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:71 msgid "by specifying them directly as module parameters" msgstr "モジュールパラメーターã¨ã—ã¦ç›´æŽ¥æŒ‡å®š" #: ../../rst/scenario_guides/guide_gce.rst:72 msgid "by setting environment variables" msgstr "環境変数を設定" #: ../../rst/scenario_guides/guide_gce.rst:75 msgid "Providing Credentials as Module Parameters" msgstr "èªè¨¼æƒ…報をモジュールパラメーターã¨ã—ã¦æŒ‡å®š" #: ../../rst/scenario_guides/guide_gce.rst:77 msgid "For the GCE modules you can specify the credentials as arguments:" msgstr "GCE モジュールã§ã¯ã€èªè¨¼æƒ…報を引数ã¨ã—ã¦æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:79 msgid "``auth_kind``: type of authentication being used (choices: machineaccount, serviceaccount, application)" msgstr "``auth_kind``: 使用ã•れるèªè¨¼ã®ã‚¿ã‚¤ãƒ— (é¸æŠžè‚¢: machineaccountã€serviceaccountã€application)" #: ../../rst/scenario_guides/guide_gce.rst:80 msgid "``service_account_email``: email associated with the project" msgstr "``service_account_email``: プロジェクトã«é–¢é€£ã™ã‚‹é›»å­ãƒ¡ãƒ¼ãƒ«" #: ../../rst/scenario_guides/guide_gce.rst:81 msgid "``service_account_file``: path to the JSON credentials file" msgstr "``service_account_file``: JSON èªè¨¼æƒ…報ファイルã¸ã®ãƒ‘ス" #: ../../rst/scenario_guides/guide_gce.rst:82 msgid "``project``: id of the project" msgstr "``project``: プロジェクト㮠ID" #: ../../rst/scenario_guides/guide_gce.rst:83 msgid "``scopes``: The specific scopes that you want the actions to use." msgstr "``scopes``: アクションã§ä½¿ç”¨ã™ã‚‹ç‰¹å®šã®ã‚¹ã‚³ãƒ¼ãƒ—。" #: ../../rst/scenario_guides/guide_gce.rst:85 msgid "For example, to create a new IP address using the ``gcp_compute_address`` module, you can use the following configuration:" msgstr "ãŸã¨ãˆã°ã€``gcp_compute_address`` モジュールを使用ã—ã¦æ–°è¦ IP アドレスを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®è¨­å®šã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:114 msgid "Providing Credentials as Environment Variables" msgstr "èªè¨¼æƒ…報を環境変数ã¨ã—ã¦æŒ‡å®š" #: ../../rst/scenario_guides/guide_gce.rst:116 msgid "Set the following environment variables before running Ansible in order to configure your credentials:" msgstr "èªè¨¼æƒ…報を設定ã™ã‚‹ãŸã‚ã« Ansible を実行ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:126 msgid "GCE Dynamic Inventory" msgstr "GCE 動的インベントリー" #: ../../rst/scenario_guides/guide_gce.rst:128 msgid "The best way to interact with your hosts is to use the gcp_compute inventory plugin, which dynamically queries GCE and tells Ansible what nodes can be managed." msgstr "ホストã¨å¯¾è©±ã™ã‚‹æœ€é©ãªæ–¹æ³•ã¯ã€gcp_compute インベントリープラグインを使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“ã®ãƒ—ラグインã¯ã€GCE ã«å‹•çš„ã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’é€ä¿¡ã—ã€ç®¡ç†ã§ãるノードを Ansible ã«é€šçŸ¥ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:130 msgid "To be able to use this GCE dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file:" msgstr "ã“ã® GCE 動的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€æœ€åˆã« ``ansible.cfg`` ファイルã«ä»¥ä¸‹ã‚’指定ã—ã¦æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:137 msgid "Then, create a file that ends in ``.gcp.yml`` in your root directory." msgstr "次ã«ã€root ディレクトリーã«ã€åå‰ã®æœ«å°¾ãŒ ``.gcp.yml`` ã§çµ‚ã‚るファイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:139 msgid "The gcp_compute inventory script takes in the same authentication information as any module." msgstr "gcp_compute スクリプトã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒã˜èªè¨¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:141 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:39 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:41 msgid "Here's an example of a valid inventory file:" msgstr "以下ã¯ã€æœ‰åйãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:152 msgid "Executing ``ansible-inventory --list -i .gcp.yml`` will create a list of GCP instances that are ready to be configured using Ansible." msgstr "``ansible-inventory --list -i .gcp.yml`` を実行ã™ã‚‹ã¨ã€Ansible を使用ã—ã¦è¨­å®šã™ã‚‹æº–å‚™ãŒã§ãã¦ã„ã‚‹ GCP インスタンスã®ä¸€è¦§ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:155 msgid "Create an instance" msgstr "インスタンスã®ä½œæˆ" #: ../../rst/scenario_guides/guide_gce.rst:157 msgid "The full range of GCP modules provide the ability to create a wide variety of GCP resources with the full support of the entire GCP API." msgstr "GCP モジュールã®å…¨ç¯„囲ã«ã‚ˆã‚Šã€GCP API 全体ã®å®Œå…¨ãªã‚µãƒãƒ¼ãƒˆã«ã‚ˆã‚Šã€ã•ã¾ã–ã¾ãª GCP リソースを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:160 msgid "The following playbook creates a GCE Instance. This instance relies on other GCP resources like Disk. By creating other resources separately, we can give as much detail as necessary about how we want to configure the other resources, for example formatting of the Disk. By registering it to a variable, we can simply insert the variable into the instance task. The gcp_compute_instance module will figure out the rest." msgstr "以下㮠Playbook 㯠GCE インスタンスを作æˆã—ã¾ã™ã€‚ã“ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ã€Disk ãªã©ã®ä»–ã® GCP リソースã«ä¾å­˜ã—ã¾ã™ã€‚ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’個別ã«ä½œæˆã™ã‚‹ã¨ã€ãƒ‡ã‚£ã‚¹ã‚¯ã®ãƒ•ォーマットãªã©ã€ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã®è¨­å®šæ–¹æ³•ã‚’å¿…è¦ãªã ã‘æä¾›ã§ãã¾ã™ã€‚ã“れを変数ã«ç™»éŒ²ã™ã‚‹ã¨ã€ãã®å¤‰æ•°ã‚’ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚¿ã‚¹ã‚¯ã«æŒ¿å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚gcp_compute_instance モジュールã¯ã€æ®‹ã‚Šã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:242 msgid "Note that use of the \"add_host\" module above creates a temporary, in-memory group. This means that a play in the same playbook can then manage machines in the 'new_instances' group, if so desired. Any sort of arbitrary configuration is possible at this point." msgstr "上記ã®ã€Œadd_hostã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨ã€ä¸€æ™‚çš„ãªã‚¤ãƒ³ãƒ¡ãƒ¢ãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ãŒä½œæˆã•れã¾ã™ã€‚ã“れã¯ã€åŒã˜ Playbook 内ã®ãƒ—レイãŒã€Œnew_instancesã€ã‚°ãƒ«ãƒ¼ãƒ—内ã®ãƒžã‚·ãƒ³ã‚’管ç†ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“ã®æ™‚点ã§ä»»æ„ã®è¨­å®šãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:245 msgid "For more information about Google Cloud, please visit the `Google Cloud website `_." msgstr "Google Cloud ã®è©³ç´°ã¯ã€`Google Cloud Web サイト `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_gce.rst:248 msgid "Migration Guides" msgstr "移行ガイド" #: ../../rst/scenario_guides/guide_gce.rst:251 msgid "gce.py -> gcp_compute_instance.py" msgstr "gce.py -> gcp_compute_instance.py" #: ../../rst/scenario_guides/guide_gce.rst:252 msgid "As of Ansible 2.8, we're encouraging everyone to move from the ``gce`` module to the ``gcp_compute_instance`` module. The ``gcp_compute_instance`` module has better support for all of GCP's features, fewer dependencies, more flexibility, and better supports GCP's authentication systems." msgstr "Ansible 2.8 ã§ã¯ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ``gce`` モジュールã‹ã‚‰ ``gcp_compute_instance`` モジュールã«ç§»è¡Œã™ã‚‹ã“ã¨ã‚’推奨ã—ã¦ã„ã¾ã™ã€‚``gcp_compute_instance`` モジュールã¯ã€ã™ã¹ã¦ã® GCP ã®æ©Ÿèƒ½ã®ã‚µãƒãƒ¼ãƒˆã¨ã€ä¾å­˜é–¢ä¿‚ãŒå°‘ãªãã€æŸ”軟性ãŒé«˜ã„ã€GCP ã®èªè¨¼ã‚·ã‚¹ãƒ†ãƒ ã«ã‚‚より良ã„サãƒãƒ¼ãƒˆã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:257 msgid "The ``gcp_compute_instance`` module supports all of the features of the ``gce`` module (and more!). Below is a mapping of ``gce`` fields over to ``gcp_compute_instance`` fields." msgstr "``gcp_compute_instance`` モジュールã¯ã€``gce`` モジュール (ãŠã‚ˆã³ãれ以上) ã®ã™ã¹ã¦ã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“れã¯ã€``gce`` フィールドã‹ã‚‰ ``gcp_compute_instance`` フィールドã¸ã®ãƒžãƒƒãƒ”ングã§ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:262 msgid "gce.py" msgstr "gce.py" #: ../../rst/scenario_guides/guide_gce.rst:262 msgid "gcp_compute_instance.py" msgstr "gcp_compute_instance.py" #: ../../rst/scenario_guides/guide_gce.rst:262 msgid "Notes" msgstr "備考" #: ../../rst/scenario_guides/guide_gce.rst:264 #: ../../rst/scenario_guides/guide_meraki.rst:91 msgid "state" msgstr "state" #: ../../rst/scenario_guides/guide_gce.rst:264 msgid "state/status" msgstr "state/status" #: ../../rst/scenario_guides/guide_gce.rst:264 msgid "State on gce has multiple values: \"present\", \"absent\", \"stopped\", \"started\", \"terminated\". State on gcp_compute_instance is used to describe if the instance exists (present) or does not (absent). Status is used to describe if the instance is \"started\", \"stopped\" or \"terminated\"." msgstr "gce ã®çŠ¶æ…‹ã«ã¯ã€è¤‡æ•°ã®å€¤ (「presentã€ã€ã€Œabsentã€ã€ã€Œstoppedã€ã€ã€Œstartedã€ã€ã€Œterminatedã€) ãŒã‚りã¾ã™ã€‚gcp_compute_instance ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒå­˜åœ¨ã™ã‚‹ã‹ (present) ã‹ã€ãã†ã§ãªã„ã‹ (absent) を示ã—ã¾ã™ã€‚ステータスã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã€Œstartedã€ã€ã€Œstoppedã€ã€ã¾ãŸã¯ã€Œterminatedã€ã§ã‚ã‚‹ã‹ã‚’説明ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:265 msgid "image" msgstr "image" #: ../../rst/scenario_guides/guide_gce.rst:265 #: ../../rst/scenario_guides/guide_gce.rst:266 #: ../../rst/scenario_guides/guide_gce.rst:267 msgid "disks[].initialize_params.source_image" msgstr "disks[].initialize_params.source_image" #: ../../rst/scenario_guides/guide_gce.rst:265 msgid "You'll need to create a single disk using the disks[] parameter and set it to be the boot disk (disks[].boot = true)" msgstr "disks[] パラメーターを使用ã—ã¦ãƒ‡ã‚£ã‚¹ã‚¯ã‚’ 1 ã¤ä½œæˆã—ã€ãれをブートディスクã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (disks[].boot = true)。" #: ../../rst/scenario_guides/guide_gce.rst:266 msgid "image_family" msgstr "image_family" #: ../../rst/scenario_guides/guide_gce.rst:266 msgid "See above." msgstr "上記をå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_gce.rst:267 msgid "external_projects" msgstr "external_projects" #: ../../rst/scenario_guides/guide_gce.rst:267 msgid "The name of the source_image will include the name of the project." msgstr "source_image ã®åå‰ã«ã¯ã€ãƒ—ロジェクトã®åå‰ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:268 msgid "instance_names" msgstr "instance_names" #: ../../rst/scenario_guides/guide_gce.rst:268 msgid "Use a loop or multiple tasks." msgstr "ループã¾ãŸã¯è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:268 msgid "Using loops is a more Ansible-centric way of creating multiple instances and gives you the most flexibility." msgstr "ループã®ä½¿ç”¨ã¯ã€è¤‡æ•°ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã™ã‚‹ã‚ˆã‚Šã‚‚ Ansible ã«é©ã—ãŸæ–¹æ³•ã§ã€æŸ”è»Ÿæ€§ãŒæœ€ã‚‚高ããªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:269 msgid "service_account_email" msgstr "service_account_email" #: ../../rst/scenario_guides/guide_gce.rst:269 msgid "service_accounts[].email" msgstr "service_accounts[].email" #: ../../rst/scenario_guides/guide_gce.rst:269 msgid "This is the service_account email address that you want the instance to be associated with. It is not the service_account email address that is used for the credentials necessary to create the instance." msgstr "ã“れã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒé–¢é€£ä»˜ã‘られる service_account ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚インスタンスã®ä½œæˆã«å¿…è¦ãªèªè¨¼æƒ…å ±ã«ä½¿ç”¨ã•れる service_account ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_gce.rst:270 msgid "service_account_permissions" msgstr "service_account_permissions" #: ../../rst/scenario_guides/guide_gce.rst:270 msgid "service_accounts[].scopes" msgstr "service_accounts[].scopes" #: ../../rst/scenario_guides/guide_gce.rst:270 msgid "These are the permissions you want to grant to the instance." msgstr "ã“れらã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ä»˜ä¸Žã™ã‚‹ãƒ‘ーミッションã§ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:271 msgid "pem_file" msgstr "pem_file" #: ../../rst/scenario_guides/guide_gce.rst:271 msgid "Not supported." msgstr "サãƒãƒ¼ãƒˆå¯¾è±¡å¤–。" #: ../../rst/scenario_guides/guide_gce.rst:271 msgid "We recommend using JSON service account credentials instead of PEM files." msgstr "PEM ファイルã®ä»£ã‚り㫠JSON サービスアカウントã®èªè¨¼æƒ…報を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:272 msgid "credentials_file" msgstr "credentials_file" #: ../../rst/scenario_guides/guide_gce.rst:272 msgid "service_account_file" msgstr "service_account_file" #: ../../rst/scenario_guides/guide_gce.rst:273 msgid "project_id" msgstr "project_id" #: ../../rst/scenario_guides/guide_gce.rst:273 msgid "project" msgstr "project" #: ../../rst/scenario_guides/guide_gce.rst:274 msgid "name" msgstr "name" #: ../../rst/scenario_guides/guide_gce.rst:274 msgid "This field does not accept an array of names. Use a loop to create multiple instances." msgstr "ã“ã®ãƒ•ィールドã¯åå‰ã®é…列をå—ã‘入れã¾ã›ã‚“。複数インスタンスを作æˆã™ã‚‹ã«ã¯ãƒ«ãƒ¼ãƒ—を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:275 msgid "num_instances" msgstr "num_instances" #: ../../rst/scenario_guides/guide_gce.rst:275 msgid "Use a loop" msgstr "ループã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_gce.rst:275 msgid "For maximum flexibility, we're encouraging users to use Ansible features to create multiple instances, rather than letting the module do it for you." msgstr "最大é™ã®æŸ”軟性を得るã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä»»ã›ãšã€Ansible 機能を使用ã—ã¦è¤‡æ•°ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã™ã‚‹ã“ã¨ã‚’推奨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:276 msgid "network" msgstr "network" #: ../../rst/scenario_guides/guide_gce.rst:276 msgid "network_interfaces[].network" msgstr "network_interfaces[].network" #: ../../rst/scenario_guides/guide_gce.rst:277 msgid "subnetwork" msgstr "subnetwork" #: ../../rst/scenario_guides/guide_gce.rst:277 msgid "network_interfaces[].subnetwork" msgstr "network_interfaces[].subnetwork" #: ../../rst/scenario_guides/guide_gce.rst:278 msgid "persistent_boot_disk" msgstr "persistent_boot_disk" #: ../../rst/scenario_guides/guide_gce.rst:278 msgid "disks[].type = 'PERSISTENT'" msgstr "disks[].type = 'PERSISTENT'" #: ../../rst/scenario_guides/guide_gce.rst:279 msgid "disks" msgstr "disks" #: ../../rst/scenario_guides/guide_gce.rst:279 msgid "disks[]" msgstr "disks[]" #: ../../rst/scenario_guides/guide_gce.rst:280 msgid "ip_forward" msgstr "ip_forward" #: ../../rst/scenario_guides/guide_gce.rst:280 msgid "can_ip_forward" msgstr "can_ip_forward" #: ../../rst/scenario_guides/guide_gce.rst:281 msgid "external_ip" msgstr "external_ip" #: ../../rst/scenario_guides/guide_gce.rst:281 msgid "network_interfaces[].access_configs.nat_ip" msgstr "network_interfaces[].access_configs.nat_ip" #: ../../rst/scenario_guides/guide_gce.rst:281 msgid "This field takes multiple types of values. You can create an IP address with ``gcp_compute_address`` and place the name/output of the address here. You can also place the string value of the IP address's GCP name or the actual IP address." msgstr "ã“ã®ãƒ•ィールドã¯ã€è¤‡æ•°ã®ã‚¿ã‚¤ãƒ—ã®å€¤ã‚’å–りã¾ã™ã€‚``gcp_compute_address`` ã§ IP アドレスを作æˆã—ã€ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®åå‰/出力をã“ã“ã«å…¥åŠ›ã—ã¾ã™ã€‚IP アドレス㮠GCP åã¾ãŸã¯å®Ÿéš›ã® IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ–‡å­—列値を入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_gce.rst:282 msgid "disks_auto_delete" msgstr "disks_auto_delete" #: ../../rst/scenario_guides/guide_gce.rst:282 msgid "disks[].auto_delete" msgstr "disks[].auto_delete" #: ../../rst/scenario_guides/guide_gce.rst:283 msgid "preemptible" msgstr "preemptible" #: ../../rst/scenario_guides/guide_gce.rst:283 msgid "scheduling.preemptible" msgstr "scheduling.preemptible" #: ../../rst/scenario_guides/guide_gce.rst:284 msgid "disk_size" msgstr "disk_size" #: ../../rst/scenario_guides/guide_gce.rst:284 msgid "disks[].initialize_params.disk_size_gb" msgstr "disks[].initialize_params.disk_size_gb" #: ../../rst/scenario_guides/guide_gce.rst:287 msgid "An example playbook is below:" msgstr "Playbook ã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:5 msgid "Infoblox Guide" msgstr "Infoblox ガイド" #: ../../rst/scenario_guides/guide_infoblox.rst:7 msgid "Topics" msgstr "トピック" #: ../../rst/scenario_guides/guide_infoblox.rst:9 msgid "This guide describes how to use Ansible with the Infoblox Network Identity Operating System (NIOS). With Ansible integration, you can use Ansible playbooks to automate Infoblox Core Network Services for IP address management (IPAM), DNS, and inventory tracking." msgstr "本ガイドã§ã¯ã€Infoblox NIOS (Network Identity Operating System) ã§ Ansible を使用ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚Ansible çµ±åˆã§ã¯ã€Ansible Playbook を使用ã—ã¦ã€IP ã‚¢ãƒ‰ãƒ¬ã‚¹ç®¡ç† (IPAM)ã€DNSã€ãŠã‚ˆã³ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¿½è·¡ã«ã¤ã„㦠Infoblox Core Network Services を自動化ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:11 msgid "You can review simple example tasks in the documentation for any of the :ref:`NIOS modules ` or look at the `Use cases with modules`_ section for more elaborate examples. See the `Infoblox `_ website for more information on the Infoblox product." msgstr "ç°¡å˜ãªã‚¿ã‚¹ã‚¯ã®ä¾‹ã«ã¤ã„ã¦ã¯ã€:ref:`NIOS モジュール ` ã®ã„ãšã‚Œã‹ã«ã¤ã„ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã™ã‚‹ã‹ã€`モジュールã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹`_ セクションをå‚ç…§ã—ã¦ã‚¿ã‚¹ã‚¯ã®ä¾‹ã‚’確èªã—ã¦ãã ã•ã„。Infoblox 製å“ã®è©³ç´°ã¯ã€`Infoblox `_ ã® Web サイトをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:13 msgid "You can retrieve most of the example playbooks used in this guide from the `network-automation/infoblox_ansible `_ GitHub repository." msgstr "本ガイドã§ä½¿ç”¨ã•れã¦ã„ã‚‹ Playbook サンプルã®å¤§åŠã¯ã€`network-automation/infoblox_ansible `_ GitHub リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:17 msgid "Before using Ansible ``nios`` modules with Infoblox, you must install the ``infoblox-client`` on your Ansible control node:" msgstr "Infoblox ã§ Ansible ``nios`` モジュールを使用ã™ã‚‹å‰ã«ã€Ansible コントロールノード㫠``infoblox-client`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:24 msgid "You need an NIOS account with the WAPI feature enabled to use Ansible with Infoblox." msgstr "Infoblox ã§ Ansible を使用ã™ã‚‹ã«ã¯ã€WAPI æ©Ÿèƒ½ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ NIOS アカウントãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:29 #: ../../rst/scenario_guides/scenario_template.rst:22 msgid "Credentials and authenticating" msgstr "èªè¨¼æƒ…å ±ãŠã‚ˆã³èªè¨¼" #: ../../rst/scenario_guides/guide_infoblox.rst:31 msgid "To use Infoblox ``nios`` modules in playbooks, you need to configure the credentials to access your Infoblox system. The examples in this guide use credentials stored in ``/group_vars/nios.yml``. Replace these values with your Infoblox credentials:" msgstr "Playbook ã§ Infoblox ``nios`` モジュールを使用ã™ã‚‹ã«ã¯ã€Infoblox システムã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®èªè¨¼æƒ…報を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚本ガイドã®ä¾‹ã§ã¯ã€``/group_vars/nios.yml`` ã«ä¿å­˜ã•れã¦ã„ã‚‹èªè¨¼æƒ…報を使用ã—ã¾ã™ã€‚ã“ã®å€¤ã‚’ãŠä½¿ã„ã® Infoblox èªè¨¼æƒ…å ±ã«ç½®ãæ›ãˆã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:42 msgid "NIOS lookup plugins" msgstr "NIOS Lookup プラグイン" #: ../../rst/scenario_guides/guide_infoblox.rst:44 msgid "Ansible includes the following lookup plugins for NIOS:" msgstr "Ansible ã«ã¯ã€NIOS 用ã«ä»¥ä¸‹ã® lookup プラグインãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:46 msgid ":ref:`nios ` Uses the Infoblox WAPI API to fetch NIOS specified objects, for example network views, DNS views, and host records." msgstr ":ref:`nios ` Infoblox WAPI API を使用ã—㦠NIOS ãŒæŒ‡å®šã•れãŸã‚ªãƒ–ジェクト (ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ューã€DNS ビューã€ãƒ›ã‚¹ãƒˆãƒ¬ã‚³ãƒ¼ãƒ‰ãªã©) ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:47 msgid ":ref:`nios_next_ip ` Provides the next available IP address from a network. You'll see an example of this in `Creating a host record`_." msgstr ":ref:`nios_next_ip ` ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰æ¬¡ã«åˆ©ç”¨å¯èƒ½ãª IP アドレスをæä¾›ã—ã¾ã™ã€‚「`ホストレコードã®ä½œæˆ`_ã€ã«ã€ã“ã®ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:48 msgid ":ref:`nios_next_network ` - Returns the next available network range for a network-container." msgstr ":ref:`nios_next_network ` - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã®æ¬¡ã«åˆ©ç”¨å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲を返ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:50 msgid "You must run the NIOS lookup plugins locally by specifying ``connection: local``. See :ref:`lookup plugins ` for more detail." msgstr "``connection: local`` を指定ã—㦠NIOS ルックアッププラグインをローカルã§å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ã€Œ:ref:`lookup プラグイン `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:54 msgid "Retrieving all network views" msgstr "ã™ã¹ã¦ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ューã®å–å¾—" #: ../../rst/scenario_guides/guide_infoblox.rst:56 msgid "To retrieve all network views and save them in a variable, use the :ref:`set_fact ` module with the :ref:`nios ` lookup plugin:" msgstr "ã™ã¹ã¦ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ“ューをå–å¾—ã—ã¦å¤‰æ•°ã«ä¿å­˜ã™ã‚‹ã«ã¯ã€:ref:`nios ` ルックアッププラグイン㧠:ref:`set_fact ` モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:74 msgid "Retrieving a host record" msgstr "ホストレコードã®å–å¾—" #: ../../rst/scenario_guides/guide_infoblox.rst:76 msgid "To retrieve a set of host records, use the ``set_fact`` module with the ``nios`` lookup plugin and include a filter for the specific hosts you want to retrieve:" msgstr "ホストレコードã®ã‚»ãƒƒãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€``nios`` ルックアッププラグイン㧠``set_fact`` モジュールを使用ã—ã€å–å¾—ã™ã‚‹ç‰¹å®šãƒ›ã‚¹ãƒˆã®ãƒ•ィルターを追加ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:105 msgid "If you run this ``get_host_record.yml`` playbook, you should see results similar to the following:" msgstr "ã“ã® ``get_host_record.yml`` Playbook を実行ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªçµæžœãŒè¡¨ç¤ºã•れるã¯ãšã§ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:156 msgid "The output above shows the host record for ``leaf01.ansible.com`` and ``leaf02.ansible.com`` that were retrieved by the ``nios`` lookup plugin. This playbook saves the information in variables which you can use in other playbooks. This allows you to use Infoblox as a single source of truth to gather and use information that changes dynamically. See :ref:`playbooks_variables` for more information on using Ansible variables. See the :ref:`nios ` examples for more data options that you can retrieve." msgstr "上記ã®å‡ºåŠ›ã«ã¯ã€``nios`` ルックアッププラグインã«ã‚ˆã£ã¦å–å¾—ã•れ㟠``leaf01.ansible.com`` ãŠã‚ˆã³ ``leaf02.ansible.com`` ã®ãƒ›ã‚¹ãƒˆãƒ¬ã‚³ãƒ¼ãƒ‰ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“ã® Playbook ã¯ã€ä»–ã® Playbook ã§ä½¿ç”¨ã§ãã‚‹å¤‰æ•°ã«æƒ…報をä¿å­˜ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Infoblox ã‚’ä¿¡é ¼ã§ãã‚‹å˜ä¸€ã®ã‚½ãƒ¼ã‚¹ã¨ã—ã¦ä½¿ç”¨ã—ã€å‹•çš„ã«å¤‰æ›´ã™ã‚‹æƒ…報をåŽé›†ã—ã€ä½¿ç”¨ã§ãã¾ã™ã€‚Ansible 変数ã®ä½¿ç”¨ã®è©³ç´°ã¯ã€ã€Œ:ref:`playbooks_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。å–å¾—ã§ãã‚‹ãã®ä»–ã®ãƒ‡ãƒ¼ã‚¿ã‚ªãƒ—ションã¯ã€ã€Œ:ref:`nios `ã€ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:158 msgid "You can access these playbooks at `Infoblox lookup playbooks `_." msgstr "ã“ã® Playbook ã«ã¯ã€ã€Œ`Infoblox lookup playbooks `_ã€ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:161 msgid "Use cases with modules" msgstr "モジュールを使用ã—ãŸãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹" #: ../../rst/scenario_guides/guide_infoblox.rst:163 msgid "You can use the ``nios`` modules in tasks to simplify common Infoblox workflows. Be sure to set up your :ref:`NIOS credentials` before following these examples." msgstr "``nios`` モジュールをタスクã§ä½¿ç”¨ã™ã‚‹ã¨ã€å…±é€šã® Infoblox ワークフローをå˜ç´”化ã§ãã¾ã™ã€‚ã“れらã®ä¾‹ã‚’行ã†å‰ã«ã€ã€Œ:ref:`NIOS èªè¨¼æƒ…å ±`ã€ã‚’設定ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:166 msgid "Configuring an IPv4 network" msgstr "IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®è¨­å®š" #: ../../rst/scenario_guides/guide_infoblox.rst:168 msgid "To configure an IPv4 network, use the :ref:`nios_network ` module:" msgstr "IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’設定ã™ã‚‹ã«ã¯ã€:ref:`nios_network ` モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:186 msgid "Notice the last parameter, ``provider``, uses the variable ``nios_provider`` defined in the ``group_vars/`` directory." msgstr "最後ã®ãƒ‘ラメーター ``provider`` ã¯ã€``nios_provider`` ディレクトリーã§å®šç¾©ã•れã¦ã„ã‚‹ ``group_vars/`` 変数を使用ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:189 msgid "Creating a host record" msgstr "ホストレコードã®ä½œæˆ" #: ../../rst/scenario_guides/guide_infoblox.rst:191 msgid "To create a host record named `leaf03.ansible.com` on the newly-created IPv4 network:" msgstr "æ–°ãŸã«ä½œæˆã—㟠IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§ `leaf03.ansible.com` ã¨ã„ã†åå‰ã®ãƒ›ã‚¹ãƒˆãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:208 msgid "Notice the IPv4 address in this example uses the :ref:`nios_next_ip ` lookup plugin to find the next available IPv4 address on the network." msgstr "ã“ã®ä¾‹ã® IPv4 アドレスã¯ã€:ref:`nios_next_ip ` lookup プラグインを使用ã—ã¦ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ¬¡ã«åˆ©ç”¨å¯èƒ½ãª IPv4 アドレスを検索ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:211 msgid "Creating a forward DNS zone" msgstr "正引ã DNS ゾーンã®ä½œæˆ" #: ../../rst/scenario_guides/guide_infoblox.rst:213 msgid "To configure a forward DNS zone use, the ``nios_zone`` module:" msgstr "正引ã DNS ゾーンを設定ã™ã‚‹ã«ã¯ã€``nios_zone`` モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:229 msgid "Creating a reverse DNS zone" msgstr "逆引ã DNS ゾーンã®ä½œæˆ" #: ../../rst/scenario_guides/guide_infoblox.rst:231 msgid "To configure a reverse DNS zone:" msgstr "逆引ã DNS ゾーンを設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:247 msgid "Dynamic inventory script" msgstr "動的インベントリースクリプト" #: ../../rst/scenario_guides/guide_infoblox.rst:249 msgid "You can use the Infoblox dynamic inventory script to import your network node inventory with Infoblox NIOS. To gather the inventory from Infoblox, you need two files:" msgstr "Infoblox 動的インベントリースクリプトを使用ã—ã¦ã€Infoblox NIOS ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒŽãƒ¼ãƒ‰ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’インãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚Infoblox ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’åŽé›†ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã® 2 ã¤ã®ãƒ•ァイルãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:251 msgid "`infoblox.yaml `_ - A file that specifies the NIOS provider arguments and optional filters." msgstr "`infoblox.yaml `_ - NIOS プロãƒã‚¤ãƒ€ãƒ¼å¼•æ•°ãŠã‚ˆã³ä»»æ„ã®ãƒ•ィルターを指定ã™ã‚‹ãƒ•ァイル。" #: ../../rst/scenario_guides/guide_infoblox.rst:253 msgid "`infoblox.py `_ - The python script that retrieves the NIOS inventory." msgstr "`infoblox.py `_ - NIOS インベントリーをå–å¾—ã™ã‚‹ python スクリプト。" #: ../../rst/scenario_guides/guide_infoblox.rst:257 msgid "Please note that the inventory script only works when Ansible 2.9, 2.10 or 3 have been installed. The inventory script will eventually be removed from `community.general `_, and will not work if `community.general` is only installed with `ansible-galaxy collection install`. Please use the inventory plugin from `infoblox.nios_modules `_ instead." msgstr "インベントリースクリプトã¯ã€Ansible 2.9ã€2.10ã€ã¾ãŸã¯ 3 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸå ´åˆã«ã®ã¿æ©Ÿèƒ½ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ã€‚ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ãƒˆã¯æœ€çµ‚的㫠`community.general `_ ã‹ã‚‰å‰Šé™¤ã•れã€`community.general` ㌠`ansible-galaxy collection install` ã¨å…±ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã«é™ã‚Šå‹•作ã—ã¾ã›ã‚“。代ã‚り㫠`infoblox.nios_modules `_ ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを使用ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:259 msgid "To use the Infoblox dynamic inventory script:" msgstr "Infoblox 動的インベントリースクリプトを使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:261 msgid "Download the ``infoblox.yaml`` file and save it in the ``/etc/ansible`` directory." msgstr "``infoblox.yaml`` ファイルをダウンロードã—ã¦ã€``/etc/ansible`` ディレクトリーã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:263 msgid "Modify the ``infoblox.yaml`` file with your NIOS credentials." msgstr "NIOS èªè¨¼æƒ…報を使用ã—㦠``infoblox.yaml`` ファイルを変更ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:265 msgid "Download the ``infoblox.py`` file and save it in the ``/etc/ansible/hosts`` directory." msgstr "``infoblox.py`` ファイルをダウンロードã—ã¦ã€``/etc/ansible/hosts`` ディレクトリーã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:267 msgid "Change the permissions on the ``infoblox.py`` file to make the file an executable:" msgstr "``infoblox.py`` ファイルã®ãƒ‘ーミッションを変更ã—ã¦ã€ãƒ•ァイルを実行å¯èƒ½ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:273 msgid "You can optionally use ``./infoblox.py --list`` to test the script. After a few minutes, you should see your Infoblox inventory in JSON format. You can explicitly use the Infoblox dynamic inventory script as follows:" msgstr "å¿…è¦ã«å¿œã˜ã¦ ``./infoblox.py --list`` を使用ã—ã¦ã‚¹ã‚¯ãƒªãƒ—トをテストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚数分後ã€JSON å½¢å¼ã§ Infoblox インベントリーãŒè¡¨ç¤ºã•れるã¯ãšã§ã™ã€‚以下ã®ã‚ˆã†ã« Infoblox 動的インベントリースクリプトを明示的ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_infoblox.rst:279 msgid "You can also implicitly use the Infoblox dynamic inventory script by including it in your inventory directory (``etc/ansible/hosts`` by default). See :ref:`dynamic_inventory` for more details." msgstr "ã¾ãŸã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (``etc/ansible/hosts`` ãŒãƒ‡ãƒ•ォルト) ã«è¿½åŠ ã—㦠Infoblox 動的インベントリースクリプトを暗黙的ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚詳細ã¯ã€Œ:ref:`dynamic_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_infoblox.rst:283 msgid "`Infoblox website `_" msgstr "`Infoblox Web サイト `_" #: ../../rst/scenario_guides/guide_infoblox.rst:284 msgid "The Infoblox website" msgstr "Infoblox ã® Web サイト" #: ../../rst/scenario_guides/guide_infoblox.rst:285 msgid "`Infoblox and Ansible Deployment Guide `_" msgstr "`Infoblox and Ansible Deployment Guide `_" #: ../../rst/scenario_guides/guide_infoblox.rst:286 msgid "The deployment guide for Ansible integration provided by Infoblox." msgstr "Infoblox ãŒæä¾›ã™ã‚‹ Ansible çµ±åˆã®ãƒ‡ãƒ—ロイメントガイド" #: ../../rst/scenario_guides/guide_infoblox.rst:287 msgid "`Infoblox Integration in Ansible 2.5 `_" msgstr "`Infoblox Integration in Ansible 2.5 `_" #: ../../rst/scenario_guides/guide_infoblox.rst:288 msgid "Ansible blog post about Infoblox." msgstr "Infoblox ã«é–¢ã™ã‚‹ Ansible ブログ投稿" #: ../../rst/scenario_guides/guide_infoblox.rst:289 msgid ":ref:`Ansible NIOS modules `" msgstr ":ref:`Ansible NIOS modules `" #: ../../rst/scenario_guides/guide_infoblox.rst:290 msgid "The list of supported NIOS modules, with examples." msgstr "対応ã—ã¦ã„ã‚‹ NIOS モジュールã®ä¸€è¦§ (サンプルã‚り)" #: ../../rst/scenario_guides/guide_infoblox.rst:291 msgid "`Infoblox Ansible Examples `_" msgstr "`Infoblox Ansible Examples `_" #: ../../rst/scenario_guides/guide_infoblox.rst:292 msgid "Infoblox example playbooks." msgstr "Infoblox ã® Playbook サンプル" #: ../../rst/scenario_guides/guide_kubernetes.rst:5 msgid "Kubernetes Guide" msgstr "Kubernetes ゲスト" #: ../../rst/scenario_guides/guide_kubernetes.rst:7 msgid "Welcome to the Ansible for Kubernetes Guide!" msgstr "Kubernetes å‘ã‘ Ansible ガイドã«ã‚ˆã†ã“ã!" #: ../../rst/scenario_guides/guide_kubernetes.rst:9 msgid "The purpose of this guide is to teach you everything you need to know about using Ansible with Kubernetes." msgstr "本ガイドã®ç›®çš„ã¯ã€Kubernetes ã§ã® Ansible ã®ä½¿ç”¨ã«ã¤ã„ã¦ç†è§£ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_kubernetes.rst:11 #: ../../rst/scenario_guides/guide_vmware.rst:11 msgid "To get started, please select one of the following topics." msgstr "最åˆã«ä»¥ä¸‹ã®ãƒˆãƒ”ックã®ã„ãšã‚Œã‹ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_meraki.rst:5 msgid "Cisco Meraki Guide" msgstr "Cisco Meraki ガイド" #: ../../rst/scenario_guides/guide_meraki.rst:14 msgid "What is Cisco Meraki?" msgstr "Cisco Meraki ã¨ã¯" #: ../../rst/scenario_guides/guide_meraki.rst:16 msgid "Cisco Meraki is an easy-to-use, cloud-based, network infrastructure platform for enterprise environments. While most network hardware uses command-line interfaces (CLIs) for configuration, Meraki uses an easy-to-use Dashboard hosted in the Meraki cloud. No on-premises management hardware or software is required - only the network infrastructure to run your business." msgstr "Cisco Meraki ã¯ã€ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズ環境å‘ã‘ã®ä½¿ã„ã‚„ã™ã„クラウドベースã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ãƒ—ラットフォームã§ã™ã€‚ã»ã¨ã‚“ã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¯ã€è¨­å®šã«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース (CLI) を使用ã—ã¾ã™ãŒã€Meraki 㯠Meraki クラウドã§ãƒ›ã‚¹ãƒˆã•れる使ã„ã‚„ã™ã„ Dashboard を使用ã—ã¾ã™ã€‚オンプレミスã®ç®¡ç†ç”¨ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚„ソフトウェアã¯å¿…è¦ãªãã€ãƒ“ジãƒã‚¹ã«å¿…è¦ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ã¿ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:19 msgid "MS Switches" msgstr "MS スイッãƒ" #: ../../rst/scenario_guides/guide_meraki.rst:21 msgid "Meraki MS switches come in multiple flavors and form factors. Meraki switches support 10/100/1000/10000 ports, as well as Cisco's mGig technology for 2.5/5/10Gbps copper connectivity. 8, 24, and 48 port flavors are available with PoE (802.3af/802.3at/UPoE) available on many models." msgstr "Meraki MS スイッãƒã«ã¯è¤‡æ•°ã®ãƒ•レーãƒãƒ¼ãŠã‚ˆã³å½¢å¼è¦ç´ ãŒã‚りã¾ã™ã€‚Meraki スイッãƒã¯ã€10/100/1000/10000 ãƒãƒ¼ãƒˆã¨ã€2.5/5/10 Gbps ã®ã‚«ãƒƒãƒ‘ー接続用ã§ã‚ã‚‹ Cisco 社㮠mGig テクノロジーã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚8ã€24ã€ãŠã‚ˆã³ 48 ã®ãƒãƒ¼ãƒˆãƒ•レーãƒãƒ¼ã¯ã€å¤šãã®ãƒ¢ãƒ‡ãƒ«ã§åˆ©ç”¨å¯èƒ½ãª PoE (802.3af/802.3at/UPoE) ã§åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:24 msgid "MX Firewalls" msgstr "MX ファイアウォール" #: ../../rst/scenario_guides/guide_meraki.rst:26 msgid "Meraki's MX firewalls support full layer 3-7 deep packet inspection. MX firewalls are compatible with a variety of VPN technologies including IPSec, SSL VPN, and Meraki's easy-to-use AutoVPN." msgstr "Meraki ã® MX ファイアウォールã¯ã€ãƒ¬ã‚¤ãƒ¤ãƒ¼ 3 ã‹ã‚‰ 7 ã®ãƒ‡ã‚£ãƒ¼ãƒ—パケット検査をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚MX ファイアウォールã¯ã€IPsecã€SSL VPNã€ãŠã‚ˆã³ Meraki ã®ä½¿ã„ã‚„ã™ã„ AutoVPN ãªã©ã€ã•ã¾ã–ã¾ãª VPN テクノロジーã¨äº’æ›æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:29 msgid "MR Wireless Access Points" msgstr "MR ワイヤレスアクセスãƒã‚¤ãƒ³ãƒˆ" #: ../../rst/scenario_guides/guide_meraki.rst:31 msgid "MR access points are enterprise-class, high-performance access points for the enterprise. MR access points have MIMO technology and integrated beamforming built-in for high performance applications. BLE allows for advanced location applications to be developed with no on-premises analytics platforms." msgstr "MR アクセスãƒã‚¤ãƒ³ãƒˆã¯ã€ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズクラスã®é«˜ãƒ‘フォーマンスã®ã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚MR アクセスãƒã‚¤ãƒ³ãƒˆã«ã¯ã€é«˜æ€§èƒ½ã‚¢ãƒ—リケーションå‘ã‘ã«ã€MIMO テクノロジーã¨çµ±åˆãƒ“ームフォーマーãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚BLE ã¯ã€ã‚ªãƒ³ãƒ—レミスã®è§£æžãƒ—ラットフォームを使用ã›ãšã«é«˜åº¦ãªãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚¢ãƒ—リケーションを開発ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:34 msgid "Using the Meraki modules" msgstr "Meraki モジュールã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_meraki.rst:36 msgid "Meraki modules provide a user-friendly interface to manage your Meraki environment using Ansible. For example, details about SNMP settings for a particular organization can be discovered using the module `meraki_snmp `." msgstr "Meraki モジュールã¯ã€Ansible を使用ã—㦠Meraki 環境を管ç†ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ•レンドリーãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ç‰¹å®šã®çµ„織㮠SNMP 設定ã®è©³ç´°ã¯ã€`meraki_snmp ` モジュールを使用ã—ã¦æ¤œå‡ºã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:47 msgid "Information about a particular object can be queried. For example, the `meraki_admin ` module supports" msgstr "特定ã®ã‚ªãƒ–ジェクトã«é–¢ã™ã‚‹æƒ…報をクエリーã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€`meraki_admin ` モジュールãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ã‚‚ã®ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:60 msgid "Common Parameters" msgstr "一般的ãªãƒ‘ラメーター" #: ../../rst/scenario_guides/guide_meraki.rst:62 msgid "All Ansible Meraki modules support the following parameters which affect communication with the Meraki Dashboard API. Most of these should only be used by Meraki developers and not the general public." msgstr "ã™ã¹ã¦ã® Ansible Meraki モジュールã¯ã€Meraki Dashboard API ã¨ã®é€šä¿¡ã«å½±éŸ¿ã™ã‚‹ä»¥ä¸‹ã®ãƒ‘ラメーターã«å¯¾å¿œã—ã¾ã™ã€‚ã“れらã®ã»ã¨ã‚“ã©ã¯ã€ä¸€èˆ¬çš„ã«ã¯ä½¿ç”¨ã™ã‚‹ã‚‚ã®ã§ã¯ãªãã€Meraki 開発者ãŒä½¿ç”¨ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:65 msgid "Hostname or IP of Meraki Dashboard." msgstr "Meraki Dashboard ã®ãƒ›ã‚¹ãƒˆåã¾ãŸã¯ IP。" #: ../../rst/scenario_guides/guide_meraki.rst:68 msgid "use_https" msgstr "use_https" #: ../../rst/scenario_guides/guide_meraki.rst:68 msgid "Specifies whether communication should be over HTTPS. (Defaults to ``yes``)" msgstr "通信㌠HTTPS を使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ (デフォルト㯠``yes``)。" #: ../../rst/scenario_guides/guide_meraki.rst:71 msgid "Whether to use a proxy for any communication." msgstr "通信ã«ãƒ—ロキシーを使用ã™ã‚‹ã‹ã©ã†ã‹ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:74 msgid "Determine whether certificates should be validated or trusted. (Defaults to ``yes``)" msgstr "証明書を検証ã™ã¹ãã‹ã€ãれã¨ã‚‚信用ã™ã¹ãを指定ã—ã¾ã™ (デフォルト㯠``yes``)。" #: ../../rst/scenario_guides/guide_meraki.rst:76 msgid "These are the common parameters which are used for most every module." msgstr "以下ã¯ã€å¤§æŠµã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ä½¿ç”¨ã•れる一般的ãªãƒ‘ラメーターã§ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:79 msgid "org_name" msgstr "org_name" #: ../../rst/scenario_guides/guide_meraki.rst:79 msgid "Name of organization to perform actions in." msgstr "アクションを実行ã™ã‚‹çµ„ç¹”ã®åå‰ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:82 msgid "org_id" msgstr "org_id" #: ../../rst/scenario_guides/guide_meraki.rst:82 msgid "ID of organization to perform actions in." msgstr "アクションを実行ã™ã‚‹çµ„織㮠ID。" #: ../../rst/scenario_guides/guide_meraki.rst:85 msgid "net_name" msgstr "net_name" #: ../../rst/scenario_guides/guide_meraki.rst:85 msgid "Name of network to perform actions in." msgstr "アクションを実行ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®åå‰ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:88 msgid "net_id" msgstr "net_id" #: ../../rst/scenario_guides/guide_meraki.rst:88 msgid "ID of network to perform actions in." msgstr "アクションを実行ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® ID。" #: ../../rst/scenario_guides/guide_meraki.rst:91 msgid "General specification of what action to take. ``query`` does lookups. ``present`` creates or edits. ``absent`` deletes." msgstr "実行ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªä»•様。``query`` ã¯æ¤œç´¢ã‚’行ã„ã€``present`` ã¯ä½œæˆã¾ãŸã¯ç·¨é›†ã‚’行ã„ã¾ã™ã€‚``absent`` ã¯å‰Šé™¤ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:93 msgid "Use the ``org_id`` and ``net_id`` parameters when possible. ``org_name`` and ``net_name`` require additional behind-the-scenes API calls to learn the ID values. ``org_id`` and ``net_id`` will perform faster." msgstr "å¯èƒ½ãªå ´åˆã¯ã€``org_id`` パラメーターãŠã‚ˆã³ ``net_id`` パラメーターを使用ã—ã¾ã™ã€‚``org_name`` ãŠã‚ˆã³ ``net_name``ã¯ã€ID 値を確èªã™ã‚‹ãŸã‚ã«ã€ãã®è£ã§è¿½åŠ ã® API 呼ã³å‡ºã—ãŒå¿…è¦ã§ã™ã€‚``org_id`` ãŠã‚ˆã³ ``net_id`` ã®å‹•作ã¯ã‚ˆã‚Šé€Ÿããªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:96 msgid "Meraki Authentication" msgstr "Meraki èªè¨¼" #: ../../rst/scenario_guides/guide_meraki.rst:98 msgid "All API access with the Meraki Dashboard requires an API key. An API key can be generated from the organization's settings page. Each play in a playbook requires the ``api_key`` parameter to be specified." msgstr "Meraki Dashboard を使用ã—㟠API アクセスã¯ã™ã¹ã¦ API キーを必è¦ã¨ã—ã¾ã™ã€‚API キーã¯çµ„ç¹”ã®è¨­å®šãƒšãƒ¼ã‚¸ã‹ã‚‰ç”Ÿæˆã§ãã¾ã™ã€‚Playbook ã®å„プレイã«ã¯ ``api_key`` パラメーターを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:102 msgid "Meraki's API returns a 404 error if the API key is not correct. It does not provide any specific error saying the key is incorrect. If you receive a 404 error, check the API key first." msgstr "API ã‚­ãƒ¼ãŒæ­£ã—ããªã„å ´åˆã¯ã€Meraki ã® API ㌠404 エラーを返ã—ã¾ã™ã€‚ã‚­ãƒ¼ãŒæ­£ã—ããªã„ã“ã¨ã‚’示ã™ç‰¹å®šã®ã‚¨ãƒ©ãƒ¼ã¯æä¾›ã•れã¾ã›ã‚“。404 エラーをå—ã‘å–ã£ãŸå ´åˆã¯ã€æœ€åˆã« API キーを確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_meraki.rst:105 msgid "Returned Data Structures" msgstr "è¿”ã•れãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ " #: ../../rst/scenario_guides/guide_meraki.rst:107 msgid "Meraki and its related Ansible modules return most information in the form of a list. For example, this is returned information by ``meraki_admin`` querying administrators. It returns a list even though there's only one." msgstr "Meraki ã¨ãã®é–¢é€£ Ansible モジュールã¯ã€ãƒªã‚¹ãƒˆå½¢å¼ã§ã»ã¨ã‚“ã©ã®æƒ…報を返ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“れã¯ã€ç®¡ç†è€…ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’行ㆠ``meraki_admin`` ã«ã‚ˆã‚Šæƒ…報を返ã—ã¾ã™ã€‚管ç†è€…㌠1 人ã—ã‹ã„ãªãã¦ã‚‚一覧を返ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:123 msgid "Handling Returned Data" msgstr "è¿”ã•れãŸãƒ‡ãƒ¼ã‚¿ã®å‡¦ç†" #: ../../rst/scenario_guides/guide_meraki.rst:125 msgid "Since Meraki's response data uses lists instead of properly keyed dictionaries for responses, certain strategies should be used when querying data for particular information. For many situations, use the ``selectattr()`` Jinja2 function." msgstr "Meraki ã®å¿œç­”データã¯å¿œç­”ã«é©åˆ‡ã«éµä»˜ã‘ã•れãŸãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã¯ãªãリストを使用ã™ã‚‹ãŸã‚ã€ç‰¹å®šæƒ…å ±ã«å¯¾ã—ã¦ãƒ‡ãƒ¼ã‚¿ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’行ã†éš›ã«ç‰¹å®šã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚多ãã®çжæ³ã§ã¯ã€Jinja2 機能 ``selectattr()`` を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:128 msgid "Merging Existing and New Data" msgstr "æ—¢å­˜ãƒ‡ãƒ¼ã‚¿ã¨æ–°è¦ãƒ‡ãƒ¼ã‚¿ã®ãƒžãƒ¼ã‚¸" #: ../../rst/scenario_guides/guide_meraki.rst:130 msgid "Ansible's Meraki modules do not allow for manipulating data. For example, you may need to insert a rule in the middle of a firewall ruleset. Ansible and the Meraki modules lack a way to directly merge to manipulate data. However, a playlist can use a few tasks to split the list where you need to insert a rule and then merge them together again with the new rule added. The steps involved are as follows:" msgstr "Ansible ã® Meraki モジュールã¯ã€ãƒ‡ãƒ¼ã‚¿ã®æ“作を許å¯ã—ã¾ã›ã‚“。ãŸã¨ãˆã°ã€ãƒ•ァイアウォールルールセットã®é€”中ã§ãƒ«ãƒ¼ãƒ«ã‚’挿入ã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆãŒã‚りã¾ã™ã€‚Ansible モジュールãŠã‚ˆã³ Meraki モジュールã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã™ã‚‹ãŸã‚ã«ç›´æŽ¥ãƒžãƒ¼ã‚¸ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã›ã‚“。ãŸã ã—ã€ãƒ—レイリストã§ã¯ã€ã„ãã¤ã‹ã®ã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¦ã€ãƒ«ãƒ¼ãƒ«ã‚’挿入ã™ã‚‹å¿…è¦ã®ã‚るリストを分割ã—ã€æ–°ã—ã„ルールを追加ã—ã¦å†ã³ãƒžãƒ¼ã‚¸ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®æ‰‹é †ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:136 msgid "Create blank \"front\" and \"back\" lists." msgstr "空ã®ã€Œå‰ã€ãƒªã‚¹ãƒˆãŠã‚ˆã³ã€Œå¾Œã€ãƒªã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:149 msgid "Get existing firewall rules from Meraki and create a new variable." msgstr "Meraki ã‹ã‚‰æ—¢å­˜ã®ãƒ•ァイアウォールルールをå–å¾—ã—ã¦ã€æ–°ã—ã„変数を作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:162 msgid "Write the new rule. The new rule needs to be in a list so it can be merged with other lists in an upcoming step. The blank `-` puts the rule in a list so it can be merged." msgstr "æ–°ã—ã„ルールを記述ã—ã¾ã™ã€‚æ–°ã—ã„ルールã¯ã€ä»Šå¾Œã®ã‚¹ãƒ†ãƒƒãƒ—ã§ä»–ã®ãƒªã‚¹ãƒˆã«ãƒžãƒ¼ã‚¸ã§ãるよã†ã«ã€ãƒªã‚¹ãƒˆã«å…¥ã‚Œã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚空白㮠`-` ã¯ã€ãƒ«ãƒ¼ãƒ«ã‚’リストã«å…¥ã‚Œã¦ã€ãƒžãƒ¼ã‚¸ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:169 msgid "Split the rules into two lists. This assumes the existing ruleset is 2 rules long." msgstr "ルールを 2 ã¤ã®ãƒªã‚¹ãƒˆã«åˆ†å‰²ã—ã¾ã™ã€‚ã“れã¯ã€æ—¢å­˜ã®ãƒ«ãƒ¼ãƒ«ã‚»ãƒƒãƒˆãŒ 2 ã¤ã®ãƒ«ãƒ¼ãƒ«ã®é•·ã•ã§ã‚ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:174 msgid "Merge rules with the new rule in the middle." msgstr "ルールをã€ä¸­é–“ã®æ–°ã—ã„ルールã¨ãƒžãƒ¼ã‚¸ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:186 msgid "Upload new ruleset to Meraki." msgstr "æ–°ã—ã„ルールセットを Meraki ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:189 msgid "Error Handling" msgstr "エラー処ç†" #: ../../rst/scenario_guides/guide_meraki.rst:191 msgid "Ansible's Meraki modules will often fail if improper or incompatible parameters are specified. However, there will likely be scenarios where the module accepts the information but the Meraki API rejects the data. If this happens, the error will be returned in the ``body`` field for HTTP status of 400 return code." msgstr "Ansible ã® Meraki モジュールã¯ã€ä¸é©åˆ‡ãªãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚„äº’æ›æ€§ã®ãªã„ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚ãŸã ã—ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæƒ…報をå—ã‘入れã¦ã‚‚ Meraki API ãŒãƒ‡ãƒ¼ã‚¿ã‚’æ‹’å¦ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“れã«ç”Ÿã˜ã‚‹ã¨ã€``body`` フィールドã«ã‚¨ãƒ©ãƒ¼ãŒè¿”ã•れã€HTTP ステータス㯠400 ã®æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_meraki.rst:193 msgid "Meraki's API returns a 404 error if the API key is not correct. It does not provide any specific error saying the key is incorrect. If you receive a 404 error, check the API key first. 404 errors can also occur if improper object IDs (ex. ``org_id``) are specified." msgstr "API ã‚­ãƒ¼ãŒæ­£ã—ããªã„ã¨ã€Meraki ã® API 㯠404 エラーを返ã—ã¾ã™ã€‚ã“ã®ã‚­ãƒ¼ãŒæ­£ã—ããªã„ã“ã¨ã‚’示ã™ç‰¹åˆ¥ãªã‚¨ãƒ©ãƒ¼ã¯ã‚りã¾ã›ã‚“。404 エラーをå—ã‘å–ã£ãŸå ´åˆã¯ã€æœ€åˆã« API キーを確èªã—ã¦ãã ã•ã„。ã¾ãŸã€ä¸é©åˆ‡ãªã‚ªãƒ–ジェクトID (例: ``org_id``) を指定ã—ãŸå ´åˆã«ã‚‚ 404 エラーãŒå‡ºåŠ›ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:3 msgid "Online.net Guide" msgstr "Online.net ガイド" #: ../../rst/scenario_guides/guide_online.rst:8 msgid "Online is a French hosting company mainly known for providing bare-metal servers named Dedibox. Check it out: `https://www.online.net/en `_" msgstr "Online ã¯ã€ä¸»ã« Dedibox ã¨ã„ã†åå‰ã®ãƒ™ã‚¢ãƒ¡ã‚¿ãƒ«ã‚µãƒ¼ãƒãƒ¼ã‚’æä¾›ã™ã‚‹ãƒ•ランス系ã®ãƒ›ã‚¹ãƒ†ã‚£ãƒ³ã‚°ä¼æ¥­ã§ã™ã€‚`https://www.online.net/en `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_online.rst:12 msgid "Dynamic inventory for Online resources" msgstr "Online リソースã®å‹•的インベントリー" #: ../../rst/scenario_guides/guide_online.rst:14 msgid "Ansible has a dynamic inventory plugin that can list your resources." msgstr "Ansible ã«ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’一覧表示ã§ãる動的インベントリープラグインãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:16 msgid "Create a YAML configuration such as ``online_inventory.yml`` with this content:" msgstr "以下ã®å†…容㧠``online_inventory.yml`` ãªã©ã® YAML 設定を作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:24 msgid "Set your ``ONLINE_TOKEN`` environment variable with your token." msgstr "トークンを使用ã—ã¦ã€``ONLINE_TOKEN`` 環境変数を設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:23 msgid "You need to open an account and log into it before you can get a token. You can find your token at the following page: `https://console.online.net/en/api/access `_" msgstr "トークンをå–å¾—ã™ã‚‹ã«ã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’é–‹ãã€ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚トークンã¯ã€`https://console.online.net/en/api/access `_ ã®ãƒšãƒ¼ã‚¸ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:26 msgid "You can test that your inventory is working by running:" msgstr "以下を実行ã™ã‚‹ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŒæ©Ÿèƒ½ã—ã¦ã„ã‚‹ã“ã¨ã‚’テストã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_online.rst:33 msgid "Now you can run your playbook or any other module with this inventory:" msgstr "ã“れã§ã€Playbook ã¾ãŸã¯ãã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:3 msgid "Oracle Cloud Infrastructure Guide" msgstr "Oracle Cloud Infrastructure ガイド" #: ../../rst/scenario_guides/guide_oracle.rst:9 msgid "Oracle provides a number of Ansible modules to interact with Oracle Cloud Infrastructure (OCI). In this guide, we will explain how you can use these modules to orchestrate, provision and configure your infrastructure on OCI." msgstr "Oracle ã§ã¯ã€Oracle Cloud Infrastructure (OCI) ã¨å¯¾è©±ã™ã‚‹ Ansible モジュールãŒå¤šæ•°æä¾›ã•れã¦ã„ã¾ã™ã€‚本ガイドã§ã¯ã€OCI ã§ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ãŸã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã€ãƒ—ロビジョニングã€ãŠã‚ˆã³è¨­å®šã®æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:14 msgid "To use the OCI Ansible modules, you must have the following prerequisites on your control node, the computer from which Ansible playbooks are executed." msgstr "OCI Ansible モジュールを使用ã™ã‚‹ã«ã¯ã€Ansible Playbook を実行ã™ã‚‹ã‚³ãƒ³ãƒ”ューターã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã€ä»¥ä¸‹ã®å‰ææ¡ä»¶ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:16 msgid "`An Oracle Cloud Infrastructure account. `_" msgstr "`An Oracle Cloud Infrastructure account. `_" #: ../../rst/scenario_guides/guide_oracle.rst:18 msgid "A user created in that account, in a security group with a policy that grants the necessary permissions for working with resources in those compartments. For guidance, see `How Policies Work `_." msgstr "ãれらã®ã‚³ãƒ³ãƒ‘ートメント内ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’æ“作ã™ã‚‹ãŸã‚ã«å¿…è¦ãªãƒ‘ーミッションを付与ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã‚’æŒã¤ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã§ã€ãã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ä½œæˆã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã€‚ガイダンスã«ã¤ã„ã¦ã¯ã€ã€Œ`ãƒãƒªã‚·ãƒ¼ã®ä»•組㿠`_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_oracle.rst:20 msgid "The necessary credentials and OCID information." msgstr "å¿…è¦ãªèªè¨¼æƒ…å ±ãŠã‚ˆã³ OCID 情報" #: ../../rst/scenario_guides/guide_oracle.rst:24 #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:25 #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:37 msgid "Installation" msgstr "インストール" #: ../../rst/scenario_guides/guide_oracle.rst:25 msgid "Install the Oracle Cloud Infrastructure Python SDK (`detailed installation instructions `_):" msgstr "Oracle Cloud Infrastructure Python SDK (`detailed installation instructions `_) をインストールã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:31 msgid "Install the Ansible OCI Modules in one of two ways:" msgstr "以下ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§ Ansible OCI モジュールをインストールã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:33 msgid "From Galaxy:" msgstr "Galaxy ã®å ´åˆ:" #: ../../rst/scenario_guides/guide_oracle.rst:39 msgid "From GitHub:" msgstr "GitHub ã§ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:50 msgid "Run one of the following commands:" msgstr "以下ã®ã‚³ãƒžãƒ³ãƒ‰ã®ã„ãšã‚Œã‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:52 msgid "If Ansible is installed only for your user:" msgstr "Ansible ã‚’ãŠä½¿ã„ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã®ã¿ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:58 msgid "If Ansible is installed as root:" msgstr "Ansible ã‚’ root ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:66 #: ../../rst/scenario_guides/guide_vultr.rst:16 msgid "Configuration" msgstr "設定" #: ../../rst/scenario_guides/guide_oracle.rst:68 msgid "When creating and configuring Oracle Cloud Infrastructure resources, Ansible modules use the authentication information outlined `here `_. ." msgstr "Oracle Cloud Infrastructure リソースを作æˆã—ã¦è¨­å®šã™ã‚‹éš›ã«ã€Ansible モジュール㯠`ã“ã¡ã‚‰ `_ ã§èª¬æ˜Žã•れã¦ã„ã‚‹èªè¨¼æƒ…報を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:75 msgid "Launch a compute instance" msgstr "コンピュートインスタンスã®èµ·å‹•" #: ../../rst/scenario_guides/guide_oracle.rst:76 msgid "This `sample launch playbook `_ launches a public Compute instance and then accesses the instance from an Ansible module over an SSH connection. The sample illustrates how to:" msgstr "ã“ã® `サンプルã®èµ·å‹• Playbook `_ ã¯ã€ãƒ‘ブリック Compute インスタンスを起動ã—ã€SSH 接続を介ã—㦠Ansible モジュールã‹ã‚‰ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:79 msgid "Generate a temporary, host-specific SSH key pair." msgstr "一時的ãªãƒ›ã‚¹ãƒˆå›ºæœ‰ã® SSH キーペアを生æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:80 msgid "Specify the public key from the key pair for connecting to the instance, and then launch the instance." msgstr "ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«æŽ¥ç¶šã™ã‚‹éµãƒšã‚¢ã‹ã‚‰å…¬é–‹éµã‚’指定ã—ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:81 msgid "Connect to the newly launched instance using SSH." msgstr "SSH を使用ã—ã¦æ–°ãŸã«èµ·å‹•ã—ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:84 msgid "Create and manage Autonomous Data Warehouses" msgstr "Autonomous Data Warehouse ã®ä½œæˆãŠã‚ˆã³ç®¡ç†" #: ../../rst/scenario_guides/guide_oracle.rst:85 msgid "This `sample warehouse playbook `_ creates an Autonomous Data Warehouse and manage its lifecycle. The sample shows how to:" msgstr "ã“ã® `サンプルã®ã‚¦ã‚§ã‚¢ãƒã‚¦ã‚¹ Playbook `_ ã¯è‡ªå¾‹åž‹ãƒ‡ãƒ¼ã‚¿ã‚¦ã‚§ã‚¢ãƒã‚¦ã‚¹ (Autonomous Data Warehouse ) を作æˆã—ã€ãã®ãƒ©ã‚¤ãƒ•サイクルを管ç†ã—ã¾ã™ã€‚サンプルã§ã¯ä»¥ä¸‹ã®æ–¹æ³•を示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:87 msgid "Set up an Autonomous Data Warehouse." msgstr "Autonomous Data Warehouse を設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:88 msgid "List all of the Autonomous Data Warehouse instances available in a compartment, filtered by the display name." msgstr "表示åã§å¯¾è±¡ã‚’絞ã£ãŸã€ã‚³ãƒ³ãƒ‘ートメントã§åˆ©ç”¨å¯èƒ½ãª Autonomous Data Warehouse インスタンスã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:89 msgid "Get the \"facts\" for a specified Autonomous Data Warehouse." msgstr "指定ã—㟠Autonomous Data Warehouse ã®ã€Œãƒ•ァクトã€ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:90 msgid "Stop and start an Autonomous Data Warehouse instance." msgstr "Autonomous Data Warehouse ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’åœæ­¢ã—ã¦èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:91 msgid "Delete an Autonomous Data Warehouse instance." msgstr "Autonomous Data Warehouse インスタンスを削除ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:94 msgid "Create and manage Autonomous Transaction Processing" msgstr "Autonomous Transaction Processing ã®ä½œæˆã¨ç®¡ç†" #: ../../rst/scenario_guides/guide_oracle.rst:95 msgid "This `sample playbook `_ creates an Autonomous Transaction Processing database and manage its lifecycle. The sample shows how to:" msgstr "ã“ã® `Playbook サンプル `_ ã¯ã€è‡ªå¾‹åž‹ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç†ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ã€ãã®ãƒ©ã‚¤ãƒ•サイクルを管ç†ã—ã¾ã™ã€‚サンプルã¯ä»¥ä¸‹ã®æ–¹æ³•を示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:98 msgid "Set up an Autonomous Transaction Processing database instance." msgstr "Autonomous Transaction Processing データベースインスタンスを設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:99 msgid "List all of the Autonomous Transaction Processing instances in a compartment, filtered by the display name." msgstr "表示åã§å¯¾è±¡ã‚’絞ã£ãŸã€ã‚³ãƒ³ãƒ‘ートメントã§åˆ©ç”¨å¯èƒ½ãª Autonomous Transaction Processing インスタンスã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:100 msgid "Get the \"facts\" for a specified Autonomous Transaction Processing instance." msgstr "指定ã—㟠Autonomous Transaction Processing インスタンスã«å¯¾ã—ã¦ã€Œãƒ•ァクトã€ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:101 msgid "Delete an Autonomous Transaction Processing database instance." msgstr "Autonomous Transaction Processing データベースインスタンスを削除ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_oracle.rst:103 msgid "You can find more examples here: `Sample Ansible Playbooks `_." msgstr "詳細ã¯ã€`サンプル Ansible Playbook `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:3 msgid "Packet.net Guide" msgstr "Packet.net ガイド" #: ../../rst/scenario_guides/guide_packet.rst:8 msgid "`Packet.net `_ is a bare metal infrastructure host that's supported by Ansible (>=2.3) via a dynamic inventory script and two cloud modules. The two modules are:" msgstr "`Packet.net `_ ã¯ã€å‹•的インベントリースクリプト㨠2 ã¤ã®ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’介ã—㦠Ansible (2.3 以é™) ã§å¯¾å¿œã—ã¦ã„るベアメタルインフラストラクãƒãƒ£ãƒ¼ãƒ›ã‚¹ãƒˆã§ã™ã€‚ã“ã® 2 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:10 msgid "packet_sshkey: adds a public SSH key from file or value to the Packet infrastructure. Every subsequently-created device will have this public key installed in .ssh/authorized_keys." msgstr "packet_sshkey: ファイルã¾ãŸã¯å€¤ã‹ã‚‰ Packet インフラストラクãƒãƒ£ãƒ¼ã«å…¬é–‹ SSH éµã‚’追加ã—ã¾ã™ã€‚今後作æˆã•れるã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã® .ssh/authorized_keys ã«ã“ã®å…¬é–‹éµãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:11 msgid "packet_device: manages servers on Packet. You can use this module to create, restart and delete devices." msgstr "packet_device: パケット上ã®ã‚µãƒ¼ãƒãƒ¼ã‚’管ç†ã—ã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã€ãƒ‡ãƒã‚¤ã‚¹ã®ä½œæˆã€å†èµ·å‹•ã€ãŠã‚ˆã³å‰Šé™¤ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:13 msgid "Note, this guide assumes you are familiar with Ansible and how it works. If you're not, have a look at their :ref:`docs ` before getting started." msgstr "本ガイドã§ã¯ã€Ansible ã«ç²¾é€šã—ã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚Ansible ã«ã‚ã¾ã‚Šç²¾é€šã—ã¦ã„ãªã„å ´åˆã¯ã€é–‹å§‹ã™ã‚‹å‰ã«ã€Œ:ref:`docs `ã€ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:18 msgid "The Packet modules and inventory script connect to the Packet API using the packet-python package. You can install it with pip:" msgstr "Packet モジュールã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã¯ã€packets-python パッケージを使用ã—㦠Packet API ã«æŽ¥ç¶šã—ã¾ã™ã€‚ã“れã¯ã€pip ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:24 msgid "In order to check the state of devices created by Ansible on Packet, it's a good idea to install one of the `Packet CLI clients `_. Otherwise you can check them via the `Packet portal `_." msgstr "パケット上㧠Ansible ãŒä½œæˆã—ãŸãƒ‡ãƒã‚¤ã‚¹ã®çŠ¶æ…‹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã«ã¯ã€`Packet CLI clients `_ ã®ã„ãšã‚Œã‹ã‚’インストールã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ã€`Packet portal `_ ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:26 msgid "To use the modules and inventory script you'll need a Packet API token. You can generate an API token via the Packet portal `here `__. The simplest way to authenticate yourself is to set the Packet API token in an environment variable:" msgstr "モジュールãŠã‚ˆã³ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを使用ã™ã‚‹ã«ã¯ã€ãƒ‘ケット API トークンãŒå¿…è¦ã§ã™ã€‚パケットãƒãƒ¼ã‚¿ãƒ« (`ã“ã¡ã‚‰ `__) を使用ã—㦠API トークンを生æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚èªè¨¼ã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€ç’°å¢ƒå¤‰æ•°ã§ Packet API トークンを設定ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:32 msgid "If you're not comfortable exporting your API token, you can pass it as a parameter to the modules." msgstr "API トークンã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŒä¸æ˜Žãªå ´åˆã¯ã€ã“れをパラメーターã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:34 msgid "On Packet, devices and reserved IP addresses belong to `projects `_. In order to use the packet_device module, you need to specify the UUID of the project in which you want to create or manage devices. You can find a project's UUID in the Packet portal `here `_ (it's just under the project table) or via one of the available `CLIs `_." msgstr "パケットã§ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã¨äºˆç´„済ã¿ã® IP アドレスã¯ã€`プロジェクト `_ ã«å±žã—ã¾ã™ã€‚packet_device モジュールを使用ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã®ä½œæˆã¾ãŸã¯ç®¡ç†ã‚’行ã†ãƒ—ロジェクト㮠UUID を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚プロジェクト㮠UUID ã¯ã€ãƒ‘ケットãƒãƒ¼ã‚¿ãƒ« (`ã“ã¡ã‚‰ `_ (プロジェクトテーブルã®ã™ã下ã«ã‚りã¾ã™)) ã¾ãŸã¯åˆ©ç”¨å¯èƒ½ãª `CLI `_ ã®ã„ãšã‚Œã‹ã‚’介ã—ã¦è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:37 #: ../../rst/scenario_guides/guide_scaleway.rst:39 msgid "If you want to use a new SSH keypair in this tutorial, you can generate it to ``./id_rsa`` and ``./id_rsa.pub`` as:" msgstr "本ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§æ–°ã—ã„ SSH キーペアを使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« ``./id_rsa`` ãŠã‚ˆã³ ``./id_rsa.pub`` ã«ç”Ÿæˆã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:43 #: ../../rst/scenario_guides/guide_scaleway.rst:45 msgid "If you want to use an existing keypair, just copy the private and public key over to the playbook directory." msgstr "既存ã®ã‚­ãƒ¼ãƒšã‚¢ã‚’使用ã™ã‚‹å ´åˆã¯ã€ç§˜å¯†éµã¨å…¬é–‹éµã‚’ Playbook ディレクトリーã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:47 msgid "Device Creation" msgstr "デãƒã‚¤ã‚¹ã®ä½œæˆ" #: ../../rst/scenario_guides/guide_packet.rst:49 msgid "The following code block is a simple playbook that creates one `Type 0 `_ server (the 'plan' parameter). You have to supply 'plan' and 'operating_system'. 'location' defaults to 'ewr1' (Parsippany, NJ). You can find all the possible values for the parameters via a `CLI client `_." msgstr "以下ã®ã‚³ãƒ¼ãƒ‰ãƒ–ロックã¯ã€`Type 0 `_ サーãƒãƒ¼ (「planã€ãƒ‘ラメーター) を作æˆã™ã‚‹ç°¡å˜ãª Playbook ã§ã™ã€‚「planã€ãŠã‚ˆã³ã€Œoperating_systemã€ã‚’定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚「locationã€ã¯ã€ã€Œewr1ã€(Parsippanyã€NJ) ã«è¨­å®šã•れã¾ã™ã€‚`CLI クライアント `_ を介ã—ã¦ã€ãƒ‘ラメーターã§å¯èƒ½ãªå€¤ã‚’ã™ã¹ã¦ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:70 msgid "After running ``ansible-playbook playbook_create.yml``, you should have a server provisioned on Packet. You can verify via a CLI or in the `Packet portal `__." msgstr "``ansible-playbook playbook_create.yml`` ã®å®Ÿè¡Œå¾Œã«ã€ãƒ‘ケット上ã«ã‚µãƒ¼ãƒãƒ¼ã‚’プロビジョニングã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚CLI ã¾ãŸã¯ `パケットãƒãƒ¼ã‚¿ãƒ« `__ ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:72 msgid "If you get an error with the message \"failed to set machine state present, error: Error 404: Not Found\", please verify your project UUID." msgstr "エラーãŒç™ºç”Ÿã—ã¦ã€Œfailed to set machine state present, error: Error 404: Not Foundã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れãŸå ´åˆã¯ã€ãƒ—ロジェクト㮠UUID を確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:76 msgid "Updating Devices" msgstr "デãƒã‚¤ã‚¹ã®æ›´æ–°" #: ../../rst/scenario_guides/guide_packet.rst:78 msgid "The two parameters used to uniquely identify Packet devices are: \"device_ids\" and \"hostnames\". Both parameters accept either a single string (later converted to a one-element list), or a list of strings." msgstr "Packet デãƒã‚¤ã‚¹ã‚’一æ„ã«è­˜åˆ¥ã™ã‚‹ãŸã‚ã«ã€ã€Œdevice_idsã€ãŠã‚ˆã³ã€Œhostnamesã€ã¨ã„ㆠ2 ã¤ã®ãƒ‘ラメーターãŒã‚りã¾ã™ã€‚ã©ã¡ã‚‰ã®ãƒ‘ラメーターもã€1 ã¤ã®æ–‡å­—列 (後ã§å˜ä¸€ã®è¦ç´ ã®ä¸€è¦§ã«å¤‰æ›) ã¾ãŸã¯æ–‡å­—列ã®ä¸€è¦§ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:80 msgid "The 'device_ids' and 'hostnames' parameters are mutually exclusive. The following values are all acceptable:" msgstr "「device_idsã€ãƒ‘ラメーターãŠã‚ˆã³ã€Œhostnamesã€ãƒ‘ラメーターã¯ç›¸äº’排他的ã§ã™ã€‚以下ã®å€¤ã¯ã™ã¹ã¦å—ã‘入れå¯èƒ½ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:82 msgid "device_ids: a27b7a83-fc93-435b-a128-47a5b04f2dcf" msgstr "device_ids: a27b7a83-fc93-435b-a128-47a5b04f2dcf" #: ../../rst/scenario_guides/guide_packet.rst:84 msgid "hostnames: mydev1" msgstr "hostnames: mydev1" #: ../../rst/scenario_guides/guide_packet.rst:86 msgid "device_ids: [a27b7a83-fc93-435b-a128-47a5b04f2dcf, 4887130f-0ccd-49a0-99b0-323c1ceb527b]" msgstr "device_ids: [a27b7a83-fc93-435b-a128-47a5b04f2dcf, 4887130f-0ccd-49a0-99b0-323c1ceb527b]" #: ../../rst/scenario_guides/guide_packet.rst:88 msgid "hostnames: [mydev1, mydev2]" msgstr "hostnames: [mydev1, mydev2]" #: ../../rst/scenario_guides/guide_packet.rst:90 #, python-format msgid "In addition, hostnames can contain a special '%d' formatter along with a 'count' parameter that lets you easily expand hostnames that follow a simple name and number pattern; in other words, ``hostnames: \"mydev%d\", count: 2`` will expand to [mydev1, mydev2]." msgstr "ã•らã«ã€ãƒ›ã‚¹ãƒˆåã«ã¯ã€ç°¡å˜ãªåå‰ã¨æ•°å­—ã®ãƒ‘ターンã«å¾“ã†ãƒ›ã‚¹ãƒˆåã‚’ç°¡å˜ã«æ‹¡å¼µã§ãる「countã€ãƒ‘ラメーターã¨ã¨ã‚‚ã«ç‰¹åˆ¥ãªã€Œ%dã€ãƒ•ォーマッターをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€``hostnames: \"mydev%d\", count: 2`` 㯠[mydev1, mydev2] ã«æ‹¡å¼µã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:92 msgid "If your playbook acts on existing Packet devices, you can only pass the 'hostname' and 'device_ids' parameters. The following playbook shows how you can reboot a specific Packet device by setting the 'hostname' parameter:" msgstr "Playbook ãŒæ—¢å­˜ã®ãƒ‘ケットデãƒã‚¤ã‚¹ã«æ©Ÿèƒ½ã™ã‚‹å ´åˆã¯ã€ã€Œhostnameã€ãŠã‚ˆã³ã€Œdevice_idsã€ã®ãƒ‘ラメーターを渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚以下㮠Playbook ã¯ã€ã€Œhostnameã€ãƒ‘ラメーターを設定ã—ã¦ç‰¹å®šã®ãƒ‘ケットデãƒã‚¤ã‚¹ã‚’å†èµ·å‹•ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:107 msgid "You can also identify specific Packet devices with the 'device_ids' parameter. The device's UUID can be found in the `Packet Portal `_ or by using a `CLI `_. The following playbook removes a Packet device using the 'device_ids' field:" msgstr "「device_idsã€ãƒ‘ラメーターを使用ã—ã¦ç‰¹å®šã®ãƒ‘ケットデãƒã‚¤ã‚¹ã‚’識別ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚デãƒã‚¤ã‚¹ã® UUID ã¯ã€`Packet ãƒãƒ¼ã‚¿ãƒ« `_ ã‹ `CLI `_ を使用ã—ã¦ç¢ºèªã§ãã¾ã™ã€‚以下㮠Playbook ã¯ã€Œdevice_idsã€ãƒ•ィールドを使用ã—ã¦ãƒ‘ケットデãƒã‚¤ã‚¹ã‚’削除ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:124 msgid "More Complex Playbooks" msgstr "より複雑㪠Playbook" #: ../../rst/scenario_guides/guide_packet.rst:126 msgid "In this example, we'll create a CoreOS cluster with `user data `_." msgstr "ã“ã®ä¾‹ã§ã¯ã€`ユーザーデータ `_ ã§ CoreOS クラスターを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:129 msgid "The CoreOS cluster will use `etcd `_ for discovery of other servers in the cluster. Before provisioning your servers, you'll need to generate a discovery token for your cluster:" msgstr "CoreOS クラスターã¯ã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼å†…ã®ä»–ã®ã‚µãƒ¼ãƒãƒ¼ã®æ¤œå‡ºã« `etcd `_ を使用ã—ã¾ã™ã€‚サーãƒãƒ¼ã‚’プロビジョニングã™ã‚‹å‰ã«ã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®æ¤œå‡ºãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:135 msgid "The following playbook will create an SSH key, 3 Packet servers, and then wait until SSH is ready (or until 5 minutes passed). Make sure to substitute the discovery token URL in 'user_data', and the 'project_id' before running ``ansible-playbook``. Also, feel free to change 'plan' and 'facility'." msgstr "以下㮠Playbook ã¯ã€SSH キーã€3 å°ã® Packet サーãƒãƒ¼ã‚’作æˆã—ã€SSH ã®æº–å‚™ãŒã§ãã‚‹ã¾ã§ (ã¾ãŸã¯ 5 分経éŽã™ã‚‹ã¾ã§) å¾…ã¡ã¾ã™ã€‚``ansible-playbook`` を実行ã™ã‚‹å‰ã«ã€ã€Œuser_dataã€ã®æ¤œå‡ºãƒˆãƒ¼ã‚¯ãƒ³ URL ã¨ã€Œproject_idã€ã‚’ç½®ãæ›ãˆã¦ãã ã•ã„。ã¾ãŸã€ã€Œplanã€ã¨ã€Œfacilityã€ã¯è‡ªç”±ã«å¤‰æ›´ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:184 msgid "As with most Ansible modules, the default states of the Packet modules are idempotent, meaning the resources in your project will remain the same after re-runs of a playbook. Thus, we can keep the ``packet_sshkey`` module call in our playbook. If the public key is already in your Packet account, the call will have no effect." msgstr "ã»ã¨ã‚“ã©ã® Ansible モジュールã¨åŒæ§˜ã«ã€Packet モジュールã®ãƒ‡ãƒ•ォルト状態ã¯å†ªç­‰ã§ã™ã€‚ã¤ã¾ã‚Šã€Playbook ã‚’å†å®Ÿè¡Œã—ãŸå¾Œã‚‚プロジェクトã®ãƒªã‚½ãƒ¼ã‚¹ã¯åŒã˜ã¾ã¾ã«ãªã‚Šã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€Playbook ã§ ``packet_sshkey`` モジュールã®å‘¼ã³å‡ºã—ã‚’ç¶­æŒã§ãã¾ã™ã€‚パブリックキーãŒã™ã§ã«ãƒ‘ケットアカウントã«ã‚ã‚‹å ´åˆã¯ã€å‘¼ã³å‡ºã—ã¦ã‚‚効果ãŒã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_packet.rst:186 msgid "The second module call provisions 3 Packet Type 0 (specified using the 'plan' parameter) servers in the project identified via the 'project_id' parameter. The servers are all provisioned with CoreOS beta (the 'operating_system' parameter) and are customized with cloud-config user data passed to the 'user_data' parameter." msgstr "2 ã¤ç›®ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å‘¼ã³å‡ºã—ã¯ã€ã€Œproject_idã€ãƒ‘ラメーターã§è­˜åˆ¥ã•れるプロジェクト㮠3 Packet タイプ 0 (「planã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã§æŒ‡å®š) サーãƒãƒ¼ã‚’プロビジョニングã—ã¾ã™ã€‚サーãƒãƒ¼ã¯ã™ã¹ã¦ CoreOS ベータã§ãƒ—ロビジョニングã•れ (「operating_systemã€ãƒ‘ラメーター)ã€ã€Œuser_dataã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ¸¡ã•れる cloud-config ユーザーデータã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:188 msgid "The ``packet_device`` module has a ``wait_for_public_IPv`` that is used to specify the version of the IP address to wait for (valid values are ``4`` or ``6`` for IPv4 or IPv6). If specified, Ansible will wait until the GET API call for a device contains an Internet-routeable IP address of the specified version. When referring to an IP address of a created device in subsequent module calls, it's wise to use the ``wait_for_public_IPv`` parameter, or ``state: active`` in the packet_device module call." msgstr "``packet_device`` モジュールã«ã¯ã€å¾…機ã™ã‚‹ IP アドレスã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる ``wait_for_public_IPv`` ãŒã‚りã¾ã™ (有効ãªå€¤ã¯ã€IPv4 ã¾ãŸã¯ IPv6 ã§ã‚ã‚‹ ``4`` ã¾ãŸã¯ ``6``)。ã“ã‚ŒãŒæŒ‡å®šã•れã¦ã„ã‚‹å ´åˆã€Ansible ã¯ãƒ‡ãƒã‚¤ã‚¹ã® GET API 呼ã³å‡ºã—ã«æŒ‡å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°å¯èƒ½ãª IP アドレスãŒå«ã¾ã‚Œã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚後続ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å‘¼ã³å‡ºã—ã§ä½œæˆã•れãŸãƒ‡ãƒã‚¤ã‚¹ã® IP アドレスをå‚ç…§ã™ã‚‹å ´åˆã¯ã€packet_device モジュール呼ã³å‡ºã—ã§ ``wait_for_public_IPv`` パラメーターã¾ãŸã¯ ``state: active`` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:190 msgid "Run the playbook:" msgstr "Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:196 msgid "Once the playbook quits, your new devices should be reachable via SSH. Try to connect to one and check if etcd has started properly:" msgstr "Playbook ãŒçµ‚了ã™ã‚‹ã¨ã€SSH を介ã—ã¦æ–°è¦ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã¯ãšã§ã™ã€‚1 ã¤ã®ãƒ‡ãƒã‚¤ã‚¹ã«æŽ¥ç¶šã—ã¦ã€etcd ãŒæ­£å¸¸ã«èµ·å‹•ã—ãŸã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:203 msgid "Once you create a couple of devices, you might appreciate the dynamic inventory script..." msgstr "ã„ãã¤ã‹ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’作æˆã—ãŸã‚‰ã€å‹•的インベントリースクリプトを利用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:209 msgid "The dynamic inventory script queries the Packet API for a list of hosts, and exposes it to Ansible so you can easily identify and act on Packet devices." msgstr "動的インベントリースクリプトã¯ã€ãƒ›ã‚¹ãƒˆã®ä¸€è¦§ã« Packet API をクエリーã—ã€ã“れを Ansible ã«å…¬é–‹ã—ã¦ã€Packet デãƒã‚¤ã‚¹ã‚’ç°¡å˜ã«è­˜åˆ¥ã—ã€æ“作ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:211 msgid "You can find it in Ansible Community General Collection's git repo at `scripts/inventory/packet_net.py `_." msgstr "Ansible Community General Collection ã® git リãƒã‚¸ãƒˆãƒªãƒ¼ã¯ã€`scripts/inventory/packet_net.py `_ ã«ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:213 msgid "The inventory script is configurable via a `ini file `_." msgstr "インベントリースクリプトã¯ã€`ini ファイル `_ ã§è¨­å®šå¯èƒ½ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:215 msgid "If you want to use the inventory script, you must first export your Packet API token to a PACKET_API_TOKEN environment variable." msgstr "インベントリースクリプトを使用ã™ã‚‹å ´åˆã€æœ€åˆã« Packet API トークンを PACKET_API_TOKEN 環境変数ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:217 msgid "You can either copy the inventory and ini config out from the cloned git repo, or you can download it to your working directory like so:" msgstr "インベントリーãŠã‚ˆã³ ini 設定をクローンã•れ㟠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ”ーã™ã‚‹ã‹ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:225 msgid "In order to understand what the inventory script gives to Ansible you can run:" msgstr "インベントリースクリプト㌠Ansible ã«ä¸Žãˆã‚‹å½±éŸ¿ã‚’ç†è§£ã™ã‚‹ãŸã‚ã«ã€æ¬¡ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:231 msgid "It should print a JSON document looking similar to following trimmed dictionary:" msgstr "以下ã®ãƒˆãƒªãƒ ã•れãŸãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ã‚ˆã†ãª JSON ドキュメントを出力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:289 msgid "In the ``['_meta']['hostvars']`` key, there is a list of devices (uniquely identified by their public IPv4 address) with their parameters. The other keys under ``['_meta']`` are lists of devices grouped by some parameter. Here, it is type (all devices are of type baremetal_0), operating system, and facility (ewr1 and sjc1)." msgstr "``['_meta']['hostvars']`` キーã«ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ã®ä¸€è¦§ (特ã«ãƒ‘ブリック IPv4 アドレスã§è­˜åˆ¥ã•れるもã®) ã¨ãã®ãƒ‘ラメーターãŒã‚りã¾ã™ã€‚``['_meta']`` 以下ã®ä»–ã®ã‚­ãƒ¼ã¯ã€ä½•らã‹ã®ãƒ‘ラメータã§ã‚°ãƒ«ãƒ¼ãƒ—化ã•れãŸãƒ‡ãƒã‚¤ã‚¹ã®ãƒªã‚¹ãƒˆã§ã™ã€‚ã“れã¯ç¨®é¡ž (ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã®ç¨®é¡žã¯ baremetal_0)ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€ãŠã‚ˆã³ãƒ•ァシリティー (ewr1 ãŠã‚ˆã³ sjc1) ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:291 msgid "In addition to the parameter groups, there are also one-item groups with the UUID or hostname of the device." msgstr "パラメーターグループã®ä»–ã«ã€ãƒ‡ãƒã‚¤ã‚¹ã® UUID ã¾ãŸã¯ãƒ›ã‚¹ãƒˆåã‚’æŒã¤ 1 項目グループもã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:293 msgid "You can now target groups in playbooks! The following playbook will install a role that supplies resources for an Ansible target into all devices in the \"coreos_beta\" group:" msgstr "Playbook ã§ã‚°ãƒ«ãƒ¼ãƒ—をターゲットã«ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚以下㮠Playbook ã¯ã€ã€Œcoreos_betaã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã« Ansible ターゲットã®ãƒªã‚½ãƒ¼ã‚¹ã‚’æä¾›ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_packet.rst:304 msgid "Don't forget to supply the dynamic inventory in the ``-i`` argument!" msgstr "``-i`` 引数ã§å¿˜ã‚Œãšã«å‹•的インベントリーを指定ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_packet.rst:311 msgid "If you have any questions or comments let us know! help@packet.net" msgstr "ã”質å•ã‚„ã”æ„Ÿæƒ³ã¯ã€help@packet.net ã¾ã§ã”連絡ãã ã•ã„。" #: ../../rst/scenario_guides/guide_rax.rst:2 msgid "Rackspace Cloud Guide" msgstr "Rackspace Cloud ガイド" #: ../../rst/scenario_guides/guide_rax.rst:9 msgid "This section of the documentation is under construction. We are in the process of adding more examples about the Rackspace modules and how they work together. Once complete, there will also be examples for Rackspace Cloud in `ansible-examples `_." msgstr "本ガイドã«è¨˜è¼‰ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ä½œæˆä¸­ã§ã™ã€‚ã“ã“ã§ã¯ã€Rackspace モジュールやãれãŒã©ã®ã‚ˆã†ã«é€£æºã™ã‚‹ã‹ã«ã¤ã„ã¦ã®ä¾‹ã‚’追加ã™ã‚‹ãƒ—ロセスã§ã™ã€‚完了後ã¯ã€`ansible-examples `_ ã« Rackspace Cloud ã®ä¾‹ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:11 msgid "Ansible contains a number of core modules for interacting with Rackspace Cloud." msgstr "Ansible ã«ã¯ã€Rackspace Cloud ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤šæ•°å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:13 msgid "The purpose of this section is to explain how to put Ansible modules together (and use inventory scripts) to use Ansible in a Rackspace Cloud context." msgstr "本セクションã§ã¯ã€Ansible モジュールを組ã¿åˆã‚ã›ã¦ (インベントリースクリプトを使用ã—ã¦)ã€Rackspace Cloudã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§ Ansible を使用ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:16 msgid "Prerequisites for using the rax modules are minimal. In addition to ansible itself, all of the modules require and are tested against pyrax 1.5 or higher. You'll need this Python module installed on the execution host." msgstr "rax モジュール使用ã®å‰ææ¡ä»¶ã¯æœ€å°é™ã§ã™ã€‚Ansible 自体ã®ä»–ã«ã€ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¿…è¦ã§ã€pyrax 1.5 以é™ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã•れã¦ã„ã¾ã™ã€‚実行ホストã«ã€ã“ã® Python モジュールをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:20 msgid "``pyrax`` is not currently available in many operating system package repositories, so you will likely need to install it via pip:" msgstr "``pyrax`` ã¯ã€ç¾åœ¨å¤šãã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãƒ‘ッケージリãƒã‚¸ãƒˆãƒªãƒ¼ã§ã¯åˆ©ç”¨ã§ããªã„ãŸã‚ã€pip を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãªã‘れã°ãªã‚‰ãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:27 msgid "Ansible creates an implicit localhost that executes in the same context as the ``ansible-playbook`` and the other CLI tools. If for any reason you need or want to have it in your inventory you should do something like the following:" msgstr "Ansible ã¯ã€``ansible-playbook`` ãŠã‚ˆã³ãã®ä»–ã® CLI ツールã¨åŒã˜ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§å®Ÿè¡Œã™ã‚‹æš—黙的ãªãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚何らã‹ã®ç†ç”±ã§å¿…è¦ãªå ´åˆã‚„ã“れを使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªä½œæ¥­ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:35 msgid "For more information see :ref:`Implicit Localhost `" msgstr "詳細情報ã¯ã€ã€Œ:ref:`Implicit Localhost `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_rax.rst:37 msgid "In playbook steps, we'll typically be using the following pattern:" msgstr "Playbook ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€é€šå¸¸ã€ä»¥ä¸‹ã®ãƒ‘ターンを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:50 msgid "The `rax.py` inventory script and all `rax` modules support a standard `pyrax` credentials file that looks like:" msgstr "`rax.py` インベントリースクリプトã¨ã™ã¹ã¦ã® `rax` モジュールã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªæ¨™æº–ã® `pyrax` èªè¨¼æƒ…報ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:58 msgid "Setting the environment parameter ``RAX_CREDS_FILE`` to the path of this file will help Ansible find how to load this information." msgstr "環境パラメーター ``RAX_CREDS_FILE`` ã«ã“ã®ãƒ•ァイルã®ãƒ‘スを設定ã™ã‚‹ã“ã¨ã§ã€Ansible ã¯ã“ã®æƒ…報を読ã¿è¾¼ã‚€æ–¹æ³•を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:61 msgid "More information about this credentials file can be found at https://github.com/pycontribs/pyrax/blob/master/docs/getting_started.md#authenticating" msgstr "ã“ã®èªè¨¼æƒ…報ファイルã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã¯ã€https://github.com/pycontribs/pyrax/blob/master/docs/getting_started.md#authenticating ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_rax.rst:68 msgid "Running from a Python Virtual Environment (Optional)" msgstr "Python 仮想環境ã‹ã‚‰ã®å®Ÿè¡Œ (ä»»æ„)" #: ../../rst/scenario_guides/guide_rax.rst:70 msgid "Most users will not be using virtualenv, but some users, particularly Python developers sometimes like to." msgstr "ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ virtualenv を使用ã—ã¾ã›ã‚“ãŒã€ä¸€éƒ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ç‰¹ã« Python ã®é–‹ç™ºè€…ã¯ãれを使用ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:72 msgid "There are special considerations when Ansible is installed to a Python virtualenv, rather than the default of installing at a global scope. Ansible assumes, unless otherwise instructed, that the python binary will live at /usr/bin/python. This is done via the interpreter line in modules, however when instructed by setting the inventory variable 'ansible_python_interpreter', Ansible will use this specified path instead to find Python. This can be a cause of confusion as one may assume that modules running on 'localhost', or perhaps running via 'local_action', are using the virtualenv Python interpreter. By setting this line in the inventory, the modules will execute in the virtualenv interpreter and have available the virtualenv packages, specifically pyrax. If using virtualenv, you may wish to modify your localhost inventory definition to find this location as follows:" msgstr "Ansible ㌠Python virtualenv ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れる場åˆã«ã¯ã€ãƒ‡ãƒ•ォルトã®ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã§ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ã¯ãªãã€ç‰¹åˆ¥ãªè€ƒæ…®äº‹é …ãŒã‚りã¾ã™ã€‚Ansible ã¯ã€ç‰¹ã«æŒ‡ç¤ºãŒãªã„é™ã‚Šã€Python ã®ãƒã‚¤ãƒŠãƒªãƒ¼ã‚’ /usr/bin/python ã«ç½®ãã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リターã®è¡Œã‹ã‚‰è¡Œã‚れã¾ã™ãŒã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã€Œansible_python_interpreterã€ã‚’設定ã—ã¦æŒ‡ç¤ºã™ã‚‹ã¨ã€Ansible 㯠Python ã®æ¤œç´¢ã®ä»£ã‚りã«ã€ã“ã®æŒ‡å®šã•れãŸãƒ‘スを使用ã—ã¾ã™ã€‚ã“れã¯ã€ã€Œlocalhostã€ã§å®Ÿè¡Œã—ã¦ã„るモジュールã€ã¾ãŸã¯ã€Œlocal_actionã€ã§å®Ÿè¡Œã•れるモジュール㌠virtualenv Python インタープリターを使用ã—ã¦ã„ã‚‹ã¨æ€ã„込んã§ã—ã¾ã†ãŸã‚ã€æ··ä¹±ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®è¡Œã‚’インベントリーã«è¨­å®šã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ virtualenv インタープリターã§å®Ÿè¡Œã—ã€virtualenv パッケージ (具体的ã«ã¯ pyrax) ãŒåˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚virtualenv を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã€localhost インベントリー定義を変更ã—ã¦ã“ã®å ´æ‰€ãŒæ¤œå‡ºã•れるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:81 msgid "pyrax may be installed in the global Python package scope or in a virtual environment. There are no special considerations to keep in mind when installing pyrax." msgstr "pyrax ã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ãª Python パッケージスコープã¾ãŸã¯ä»®æƒ³ç’°å¢ƒã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚pyrax をインストールã™ã‚‹éš›ã«ã¯ã€ç‰¹åˆ¥ãªè€ƒæ…®äº‹é …ã«ç•™æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_rax.rst:88 msgid "Now for the fun parts." msgstr "ã“ã“ã‹ã‚‰ãŒé‡è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:90 msgid "The 'rax' module provides the ability to provision instances within Rackspace Cloud. Typically the provisioning task will be performed from your Ansible control server (in our example, localhost) against the Rackspace cloud API. This is done for several reasons:" msgstr "「raxã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€Rackspace Cloud 内ã§ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’プロビジョニングã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚通常ã€ãƒ—ロビジョニングタスクã¯ã€Rackspace Cloud API ã«å¯¾ã—㦠Ansible コントロールサーãƒãƒ¼ (ã“ã®ä¾‹ã§ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆ) ã‹ã‚‰å®Ÿè¡Œã—ã¾ã™ã€‚ã“れã«ã¯ã€ã„ãã¤ã‹ã®ç†ç”±ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:92 msgid "Avoiding installing the pyrax library on remote nodes" msgstr "リモートノード㫠pyrax ライブラリーをインストールã—ãªã„よã†ã«ã™ã‚‹" #: ../../rst/scenario_guides/guide_rax.rst:93 msgid "No need to encrypt and distribute credentials to remote nodes" msgstr "èªè¨¼æƒ…報を暗å·åŒ–ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã«é…布ã™ã‚‹å¿…è¦ã¯ãªã„" #: ../../rst/scenario_guides/guide_rax.rst:94 msgid "Speed and simplicity" msgstr "スピードãŠã‚ˆã³å˜ç´”化" #: ../../rst/scenario_guides/guide_rax.rst:98 msgid "Authentication with the Rackspace-related modules is handled by either specifying your username and API key as environment variables or passing them as module arguments, or by specifying the location of a credentials file." msgstr "Rackspace ã«é–¢é€£ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ãŸèªè¨¼ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ API キーを環境変数ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã‹ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã¨ã—ã¦æ¸¡ã™ã‹ã€èªè¨¼æƒ…報ファイルã®å ´æ‰€ã‚’指定ã—ã¦å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:103 msgid "Here is a basic example of provisioning an instance in ad hoc mode:" msgstr "以下ã¯ã€ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’プロビジョニングã™ã‚‹åŸºæœ¬çš„ãªä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:109 msgid "Here's what it would look like in a playbook, assuming the parameters were defined in variables:" msgstr "以下ã¯ã€ãƒ‘ラメーターãŒå¤‰æ•°ã«å®šç¾©ã•れã¦ã„ã‚‹ã¨ä»®å®šã—ãŸå ´åˆã®ã€Playbook ã§è¡¨ç¤ºã•れる内容ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:125 msgid "The rax module returns data about the nodes it creates, like IP addresses, hostnames, and login passwords. By registering the return value of the step, it is possible used this data to dynamically add the resulting hosts to inventory (temporarily, in memory). This facilitates performing configuration actions on the hosts in a follow-on task. In the following example, the servers that were successfully created using the above task are dynamically added to a group called \"raxhosts\", with each nodes hostname, IP address, and root password being added to the inventory." msgstr "rax モジュールã¯ã€IP アドレスã€ãƒ›ã‚¹ãƒˆåã€ãƒ­ã‚°ã‚¤ãƒ³ãƒ‘スワードãªã©ã€ä½œæˆã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã€‚ã‚¹ãƒ†ãƒƒãƒ—ã®æˆ»ã‚Šå€¤ã‚’登録ã™ã‚‹ã¨ã€ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦ã€ä½œæˆã•れるホストをインベントリー (通常ã¯ãƒ¡ãƒ¢ãƒªãƒ¼å†…) ã«å‹•çš„ã«è¿½åŠ ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ã«ã‚ˆã‚‹ãƒ›ã‚¹ãƒˆã§ã®è¨­å®šã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å®Ÿè¡ŒãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚以下ã®ä¾‹ã§ã¯ã€ä¸Šè¨˜ã®ã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¦æ­£å¸¸ã«ä½œæˆã•れãŸã‚µãƒ¼ãƒãƒ¼ã¯ã€Œraxhostsã€ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã«å‹•çš„ã«è¿½åŠ ã•れã€å„ノードã®ãƒ›ã‚¹ãƒˆåã€IP アドレスã€ãŠã‚ˆã³ root パスワードãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:138 msgid "With the host group now created, the next play in this playbook could now configure servers belonging to the raxhosts group." msgstr "ã“れã§ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ãŒä½œæˆã•れã€ã“ã® Playbook ã®æ¬¡ã®ãƒ—レイ㧠raxhosts グループã«å±žã™ã‚‹ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/scenario_guides/guide_rax.rst:149 msgid "The method above ties the configuration of a host with the provisioning step. This isn't always what you want, and leads us to the next section." msgstr "ä¸Šè¨˜ã®æ–¹æ³•ã§ãƒ—ロビジョニングステップã§ãƒ›ã‚¹ãƒˆã®è¨­å®šã‚’çµ±åˆã—ã¾ã™ã€‚ã“れã¯å¿…ãšã—も望ã¾ã—ã„ã“ã¨ã§ã¯ãªãã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã¤ãªãŒã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:157 msgid "Once your nodes are spun up, you'll probably want to talk to them again. The best way to handle this is to use the \"rax\" inventory plugin, which dynamically queries Rackspace Cloud and tells Ansible what nodes you have to manage. You might want to use this even if you are spinning up cloud instances via other tools, including the Rackspace Cloud user interface. The inventory plugin can be used to group resources by metadata, region, OS, and so on. Utilizing metadata is highly recommended in \"rax\" and can provide an easy way to sort between host groups and roles. If you don't want to use the ``rax.py`` dynamic inventory script, you could also still choose to manually manage your INI inventory file, though this is less recommended." msgstr "ノードãŒèµ·å‹•ã—ãŸã‚‰ã€å†ã³ãƒŽãƒ¼ãƒ‰ã¨ã‚„りå–りã—ãŸããªã‚‹ã§ã—ょã†ã€‚ã“れを処ç†ã™ã‚‹æœ€å–„ã®æ–¹æ³•ã¯ã€ã€Œraxã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを使用ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã¯ã€Rackspace Cloud ã«å‹•çš„ã«ã‚¯ã‚¨ãƒªãƒ¼ã‚’実行ã—ã€ç®¡ç†ã™ã‚‹å¿…è¦ãŒã‚るノードを Ansible ã«é€šçŸ¥ã—ã¾ã™ã€‚Rackspace Cloud ユーザーインターフェースãªã©ã€ä»–ã®ãƒ„ールã§ã‚¯ãƒ©ã‚¦ãƒ‰ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’èµ·å‹•ã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ã“ã®ãƒ—ラグインを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚インベントリープラグインã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã€ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã€OS ãªã©ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’グループ化ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚メタデータã®ä½¿ç”¨ã¯ã€Œraxã€ã§å¼·ã推奨ã•れã€ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ã¨ãƒ­ãƒ¼ãƒ«ã¨ã®é–“ã§ç°¡å˜ã«ä¸¦ã¹æ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``rax.py`` ダイナミックインベントリースクリプトを使用ã—ãŸããªã„å ´åˆã¯ã€INI インベントリーファイルを手動ã§ç®¡ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã“れã¯ã‚ã¾ã‚ŠãŠå‹§ã‚ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_rax.rst:159 msgid "In Ansible it is quite possible to use multiple dynamic inventory plugins along with INI file data. Just put them in a common directory and be sure the scripts are chmod +x, and the INI-based ones are not." msgstr "Ansible ã§ã¯ã€INI ファイルデータã¨ã¨ã‚‚ã«è¤‡æ•°ã®å‹•的インベントリープラグインを使用ã§ãã¾ã™ã€‚ã“れらã®ãƒ—ラグインを共通ディレクトリーã«ç½®ãã€ã‚¹ã‚¯ãƒªãƒ—ト㫠chmod +x を設定ã—ã€INI ベースã®ãƒ•ァイルã«ã¯ chmod +x を設定ã—ãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:164 msgid "rax.py" msgstr "rax.py" #: ../../rst/scenario_guides/guide_rax.rst:166 msgid "To use the Rackspace dynamic inventory script, copy ``rax.py`` into your inventory directory and make it executable. You can specify a credentials file for ``rax.py`` utilizing the ``RAX_CREDS_FILE`` environment variable." msgstr "Rackspace 動的インベントリースクリプトを使用ã™ã‚‹ã«ã¯ã€``rax.py`` をインベントリーディレクトリーã«ã‚³ãƒ”ーã—ã¦ã€å®Ÿè¡Œå¯èƒ½ã«ã—ã¾ã™ã€‚``RAX_CREDS_FILE`` 環境変数を使用ã™ã‚‹ã¨ã€``rax.py`` 用ã®èªè¨¼æƒ…報ファイルを指定ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:168 msgid "Dynamic inventory scripts (like ``rax.py``) are saved in ``/usr/share/ansible/inventory`` if Ansible has been installed globally. If installed to a virtualenv, the inventory scripts are installed to ``$VIRTUALENV/share/inventory``." msgstr "Ansible ãŒã‚°ãƒ­ãƒ¼ãƒãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã¯ã€å‹•的インベントリースクリプト (``rax.py`` ãªã©) ㌠``/usr/share/ansible/inventory`` ã«ä¿å­˜ã•れã¾ã™ã€‚virtualenv ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れるã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ト㯠``$VIRTUALENV/share/inventory`` ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:170 msgid "Users of :ref:`ansible_platform` will note that dynamic inventory is natively supported by the controller in the platform, and all you have to do is associate a group with your Rackspace Cloud credentials, and it will easily synchronize without going through these steps::" msgstr ":ref:`ansible_platform` ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ãƒ—ラットフォームã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãŒå‹•的インベントリーをãƒã‚¤ãƒ†ã‚£ãƒ–ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ãŠã‚Šã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ Rackspace Cloud èªè¨¼æƒ…å ±ã«é–¢é€£ä»˜ã‘ã‚‹ã ã‘ã§ã€ã“ã®ã‚¹ãƒ†ãƒƒãƒ—を実行ã›ãšã«ç°¡å˜ã«åŒæœŸã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:174 msgid "``rax.py`` also accepts a ``RAX_REGION`` environment variable, which can contain an individual region, or a comma separated list of regions." msgstr "``rax.py`` ã¯ã€å€‹åˆ¥ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã¾ãŸã¯ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ä¸€è¦§ã‚’指定ã§ãã‚‹ ``RAX_REGION`` 環境変数もå—ã‘入れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:176 msgid "When using ``rax.py``, you will not have a 'localhost' defined in the inventory." msgstr "``rax.py`` を使用ã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã€Œlocalhostã€ãŒå®šç¾©ã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/guide_rax.rst:178 msgid "As mentioned previously, you will often be running most of these modules outside of the host loop, and will need 'localhost' defined. The recommended way to do this, would be to create an ``inventory`` directory, and place both the ``rax.py`` script and a file containing ``localhost`` in it." msgstr "å‰è¿°ã—ãŸã‚ˆã†ã«ã€ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã»ã¨ã‚“ã©ã¯ã€ãƒ›ã‚¹ãƒˆãƒ«ãƒ¼ãƒ—ã®å¤–ã§å®Ÿè¡Œã•れるã“ã¨ãŒå¤šã„ãŸã‚ã€ã€Œlocalhostã€ã‚’定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€``inventory`` ディレクトリーを作æˆã—ã€``rax.py`` スクリプトã¨ã€``localhost`` ã‚’å«ã‚€ãƒ•ァイルã®ä¸¡æ–¹ã‚’ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ãã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:180 msgid "Executing ``ansible`` or ``ansible-playbook`` and specifying the ``inventory`` directory instead of an individual file, will cause ansible to evaluate each file in that directory for inventory." msgstr "``ansible`` ã¾ãŸã¯ ``ansible-playbook`` を実行ã—ã€å€‹åˆ¥ã®ãƒ•ァイルã§ã¯ãªã ``inventory`` ディレクトリーを指定ã™ã‚‹ã¨ã€Ansible ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ç”¨ã«ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®å„ファイルを評価ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:183 msgid "Let's test our inventory script to see if it can talk to Rackspace Cloud." msgstr "インベントリースクリプトをテストã—ã€Rackspace Cloud ã¨é€šä¿¡ã§ãã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:189 msgid "Assuming things are properly configured, the ``rax.py`` inventory script will output information similar to the following information, which will be utilized for inventory and variables." msgstr "設定ãŒé©åˆ‡ã«è¡Œã‚れã¦ã„れã°ã€``rax.py`` インベントリスクリプトã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŠã‚ˆã³å¤‰æ•°ã«ä½¿ç”¨ã•れる以下ã®ã‚ˆã†ãªæƒ…å ±ã¨åŒæ§˜ã®æƒ…報を出力ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:287 msgid "Standard Inventory" msgstr "標準インベントリー" #: ../../rst/scenario_guides/guide_rax.rst:289 msgid "When utilizing a standard ini formatted inventory file (as opposed to the inventory plugin), it may still be advantageous to retrieve discoverable hostvar information from the Rackspace API." msgstr "(インベントリープラグインã§ã¯ãªã) 標準㮠ini å½¢å¼ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを使用ã™ã‚‹å ´åˆã§ã‚‚ã€æ¤œå‡ºå¯èƒ½ãª hostvar 情報を Rackspace API ã‹ã‚‰å–å¾—ã™ã‚‹ã¨æœ‰åйãªå ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:291 msgid "This can be achieved with the ``rax_facts`` module and an inventory file similar to the following:" msgstr "ã“れã¯ã€``rax_facts`` モジュールã¨ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:315 msgid "While you don't need to know how it works, it may be interesting to know what kind of variables are returned." msgstr "ã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’知る必è¦ã¯ã‚りã¾ã›ã‚“ãŒã€è¿”ã•れる変数ã®ç¨®é¡žã‚’把æ¡ã—ã¦ãŠãã¨ã„ã„ã§ã—ょã†ã€" #: ../../rst/scenario_guides/guide_rax.rst:317 msgid "The ``rax_facts`` module provides facts as followings, which match the ``rax.py`` inventory script:" msgstr "``rax_facts`` モジュールã¯ã€``rax.py`` インベントリースクリプトã«ä¸€è‡´ã™ã‚‹ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ•ァクトをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:408 msgid "This section covers some additional usage examples built around a specific use case." msgstr "本セクションã§ã¯ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’中心ã¨ã—ãŸã€ãã®ä»–ã®ä½¿ç”¨ä¾‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:413 msgid "Network and Server" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ã‚µãƒ¼ãƒãƒ¼" #: ../../rst/scenario_guides/guide_rax.rst:415 msgid "Create an isolated cloud network and build a server" msgstr "分離ã—ãŸã‚¯ãƒ©ã‚¦ãƒ‰ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’作æˆã—ã€ã‚µãƒ¼ãƒãƒ¼ã‚’構築ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:455 msgid "Complete Environment" msgstr "完全ãªç’°å¢ƒ" #: ../../rst/scenario_guides/guide_rax.rst:457 msgid "Build a complete webserver environment with servers, custom networks and load balancers, install nginx and create a custom index.html" msgstr "サーãƒãƒ¼ã€ã‚«ã‚¹ã‚¿ãƒ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã§å®Œå…¨ãª Web サーãƒãƒ¼ç’°å¢ƒã‚’構築ã—ã€nginx をインストールã—ã¦ã‚«ã‚¹ã‚¿ãƒ ã® index.html を作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:555 msgid "RackConnect and Managed Cloud" msgstr "RackConnect ãŠã‚ˆã³ Managed Cloud" #: ../../rst/scenario_guides/guide_rax.rst:557 msgid "When using RackConnect version 2 or Rackspace Managed Cloud there are Rackspace automation tasks that are executed on the servers you create after they are successfully built. If your automation executes before the RackConnect or Managed Cloud automation, you can cause failures and unusable servers." msgstr "RackConnect ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã¾ãŸã¯ Rackspace Managed Cloud を使用ã™ã‚‹å ´åˆã¯ã€ä½œæˆã—ãŸã‚µãƒ¼ãƒãƒ¼ãŒæ­£å¸¸ã«æ§‹ç¯‰ã•れãŸå¾Œã«å®Ÿè¡Œã•れる Rackspace ã®è‡ªå‹•化タスクãŒã‚りã¾ã™ã€‚ãã®è‡ªå‹•化ãŒã€ŒRackConnectã€ã¾ãŸã¯ã€ŒManaged Cloudã€ã®è‡ªå‹•化よりもå‰ã«å®Ÿè¡Œã•れã¦ã—ã¾ã†ã¨ã€éšœå®³ãŒç™ºç”Ÿã—ãŸã‚Šã€ã‚µãƒ¼ãƒãƒ¼ãŒåˆ©ç”¨ã§ããªããªã£ãŸã‚Šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:559 msgid "These examples show creating servers, and ensuring that the Rackspace automation has completed before Ansible continues onwards." msgstr "ã“れらã®ä¾‹ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã‚’作æˆã—ã€Ansible ãŒç¶šè¡Œã™ã‚‹å‰ã«ã€Rackspace 自動化ãŒå®Œäº†ã—ãŸã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:561 msgid "For simplicity, these examples are joined, however both are only needed when using RackConnect. When only using Managed Cloud, the RackConnect portion can be ignored." msgstr "分ã‹ã‚Šã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€ã“ã®ä¾‹ã¯ä¸€ç·’ã«ãªã£ã¦ã„ã¾ã™ãŒã€ã©ã¡ã‚‰ã‚‚ RackConnect を使用ã™ã‚‹å ´åˆã«é™ã‚Šå¿…è¦ã§ã™ã€‚Managed Cloud ã®ã¿ã‚’使用ã™ã‚‹å ´åˆã¯ã€RackConnect ã®éƒ¨åˆ†ãŒç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:563 msgid "The RackConnect portions only apply to RackConnect version 2." msgstr "RackConnect ã®éƒ¨åˆ†ã¯ã€RackConnect ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã«ã®ã¿é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:568 msgid "Using a Control Machine" msgstr "コントロールマシンã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_rax.rst:655 msgid "Using Ansible Pull" msgstr "Ansible Pull ã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_rax.rst:713 msgid "Using Ansible Pull with XenStore" msgstr "XenStore ã§ã® Ansible Pull ã®ä½¿ç”¨" #: ../../rst/scenario_guides/guide_rax.rst:781 msgid "Advanced Usage" msgstr "高度ãªä½¿ç”¨æ–¹æ³•" #: ../../rst/scenario_guides/guide_rax.rst:786 msgid "Autoscaling with AWX or Red Hat Ansible Automation Platform" msgstr "AWX ã¾ãŸã¯ Red Hat Ansible Automation Platform ã§ã®è‡ªå‹•スケーリング" #: ../../rst/scenario_guides/guide_rax.rst:788 msgid "The GUI component of :ref:`Red Hat Ansible Automation Platform ` also contains a very nice feature for auto-scaling use cases. In this mode, a simple curl script can call a defined URL and the server will \"dial out\" to the requester and configure an instance that is spinning up. This can be a great way to reconfigure ephemeral nodes. See `the documentation on provisioning callbacks `_ for more details." msgstr "ã¾ãŸã€:ref:`Red Hat Ansible Automation Platform ` ã® GUI コンãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€è‡ªå‹•スケーリングã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«ã¯éžå¸¸ã«å„ªã‚ŒãŸæ©Ÿèƒ½ã‚‚å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ç°¡å˜ãª curl スクリプトã¯å®šç¾©ã•れ㟠URL を呼ã³å‡ºã™ã“ã¨ãŒã§ãã€ã‚µãƒ¼ãƒãƒ¼ã¯è¦æ±‚å…ƒã«å¯¾ã—ã¦ã€Œãƒ€ã‚¤ãƒ¤ãƒ«ã‚¢ã‚¦ãƒˆã€ã—ã€èµ·å‹•ã—ã¦ã„るインスタンスを構æˆã—ã¾ã™ã€‚ã“れã¯ã€ä¸€æ™‚ノードをå†è¨­å®šã™ã‚‹å„ªã‚ŒãŸæ–¹æ³•ã«ãªã‚Šã¾ã™ã€‚詳細ã¯ã€`the documentation on provisioning callbacks `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_rax.rst:792 msgid "A benefit of using the callback approach over pull mode is that job results are still centrally recorded and less information has to be shared with remote hosts." msgstr "pull モードã§ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚¢ãƒ—ローãƒã‚’使用ã™ã‚‹åˆ©ç‚¹ã¯ã€ã‚¸ãƒ§ãƒ–ã®çµæžœãŒå¼•ãç¶šã中央ã§è¨˜éŒ²ã•れã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¨å…±æœ‰ã™ã‚‹å¿…è¦ã®ã‚る情報ãŒå°‘ãªããªã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:798 msgid "Orchestration in the Rackspace Cloud" msgstr "Rackspace Cloud ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³" #: ../../rst/scenario_guides/guide_rax.rst:800 msgid "Ansible is a powerful orchestration tool, and rax modules allow you the opportunity to orchestrate complex tasks, deployments, and configurations. The key here is to automate provisioning of infrastructure, like any other piece of software in an environment. Complex deployments might have previously required manual manipulation of load balancers, or manual provisioning of servers. Utilizing the rax modules included with Ansible, one can make the deployment of additional nodes contingent on the current number of running nodes, or the configuration of a clustered application dependent on the number of nodes with common metadata. One could automate the following scenarios, for example:" msgstr "Ansible ã¯å¼·åŠ›ãªã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ„ールã§ã‚りã€rax モジュールを使用ã™ã‚‹ã“ã¨ã§ã€è¤‡é›‘ãªã‚¿ã‚¹ã‚¯ã€ãƒ‡ãƒ—ロイメントã€ãŠã‚ˆã³è¨­å®šã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ã“ã“ã§ã¯ã€ç’°å¢ƒå†…ã«ã‚ã‚‹ä»–ã®ã‚½ãƒ•トウェアã¨åŒæ§˜ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ãƒ—ロビジョニングを自動化ã™ã‚‹ã“ã¨ãŒé‡è¦ã«ãªã‚Šã¾ã™ã€‚複雑ãªãƒ‡ãƒ—ロイメントを行ã†å ´åˆã€ã“れã¾ã§ã¯ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’æ‰‹å‹•ã§æ“作ã—ãŸã‚Šã€ã‚µãƒ¼ãƒãƒ¼ã®ãƒ—ロビジョニングを手動ã§è¡Œã†å¿…è¦ãŒã‚ã£ãŸã‹ã‚‚ã—れã¾ã›ã‚“。Ansible ã«å«ã¾ã‚Œã‚‹ rax モジュールを利用ã™ã‚‹ã¨ã€ç¾åœ¨ç¨¼åƒã—ã¦ã„ã‚‹ãƒŽãƒ¼ãƒ‰ã®æ•°ã«å¿œã˜ã¦ãƒŽãƒ¼ãƒ‰ã‚’追加ã—ãŸã‚Šã€å…±é€šã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦ãƒŽãƒ¼ãƒ‰ã®æ•°ã«å¿œã˜ã¦ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼åŒ–ã•れãŸã‚¢ãƒ—リケーションを構æˆã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚·ãƒŠãƒªã‚ªã‚’自動化ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_rax.rst:802 msgid "Servers that are removed from a Cloud Load Balancer one-by-one, updated, verified, and returned to the load balancer pool" msgstr "Cloud Load Balancer ã‹ã‚‰ 1 ã¤ãšã¤å‰Šé™¤ã•ã‚Œã€æ›´æ–°ã•ã‚Œã€æ¤œè¨¼ã•れã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ãƒ—ールã«è¿”ã•れるサーãƒãƒ¼" #: ../../rst/scenario_guides/guide_rax.rst:803 msgid "Expansion of an already-online environment, where nodes are provisioned, bootstrapped, configured, and software installed" msgstr "ノードã®ãƒ—ロビジョニングã€ãƒ–ートストラップã€è¨­å®šã€ãŠã‚ˆã³ã‚½ãƒ•トウェアãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã€ã™ã§ã«ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã®ç’°å¢ƒã®æ‹¡å¼µ" #: ../../rst/scenario_guides/guide_rax.rst:804 msgid "A procedure where app log files are uploaded to a central location, like Cloud Files, before a node is decommissioned" msgstr "ノードãŒå»ƒæ­¢ã•れるå‰ã«ã€ã‚¢ãƒ—リã®ãƒ­ã‚°ãƒ•ァイル㌠Cloud Files ãªã©ã®ä¸­å¤®ã®å ´æ‰€ã«ã‚¢ãƒƒãƒ—ロードã•れる手順" #: ../../rst/scenario_guides/guide_rax.rst:805 msgid "Servers and load balancers that have DNS records created and destroyed on creation and decommissioning, respectively" msgstr "ä½œæˆæ™‚ã« DNS レコードãŒä½œæˆã•れã€å»ƒæ­¢æ™‚ã«ç ´æ£„ã•れるサーãƒãƒ¼ã¨ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼" #: ../../rst/scenario_guides/guide_scaleway.rst:5 msgid "Scaleway Guide" msgstr "Scaleway ガイド" #: ../../rst/scenario_guides/guide_scaleway.rst:12 msgid "`Scaleway `_ is a cloud provider supported by Ansible, version 2.6 or higher via a dynamic inventory plugin and modules. Those modules are:" msgstr "`Scaleway `_ ã¯ã€å‹•的インベントリープラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’介ã—㦠Ansible (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™) ãŒå¯¾å¿œã™ã‚‹ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:15 msgid ":ref:`scaleway_sshkey_module`: adds a public SSH key from a file or value to the Packet infrastructure. Every subsequently-created device will have this public key installed in .ssh/authorized_keys." msgstr ":ref:`scaleway_sshkey_module`: ファイルã¾ãŸã¯å€¤ã‹ã‚‰ Packet インフラストラクãƒãƒ£ãƒ¼ã«å…¬é–‹ SSH éµã‚’追加ã—ã¾ã™ã€‚後ã«ä½œæˆã—ãŸã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã® .ssh/authorized_keys ã«ã“ã®å…¬é–‹éµãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:16 msgid ":ref:`scaleway_compute_module`: manages servers on Scaleway. You can use this module to create, restart and delete servers." msgstr ":ref:`scaleway_compute_module`: Scaleway ã§ã‚µãƒ¼ãƒãƒ¼ã‚’管ç†ã—ã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã‚µãƒ¼ãƒãƒ¼ã‚’作æˆã€å†èµ·å‹•ã€ãŠã‚ˆã³å‰Šé™¤ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:17 msgid ":ref:`scaleway_volume_module`: manages volumes on Scaleway." msgstr ":ref:`scaleway_volume_module`: Scaleway ã§ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚’管ç†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:20 msgid "This guide assumes you are familiar with Ansible and how it works. If you're not, have a look at :ref:`ansible_documentation` before getting started." msgstr "本ガイドã§ã¯ã€Ansible ã«ç²¾é€šã—ã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚Ansible ã«ã‚ã¾ã‚Šç²¾é€šã—ã¦ã„ãªã„å ´åˆã¯ã€é–‹å§‹ã™ã‚‹å‰ã«ã€Œ:ref:`ansible_documentation`ã€ã‚’ãŠèª­ã¿ãã ã•ã„。" #: ../../rst/scenario_guides/guide_scaleway.rst:28 msgid "The Scaleway modules and inventory script connect to the Scaleway API using `Scaleway REST API `_. To use the modules and inventory script you'll need a Scaleway API token. You can generate an API token via the Scaleway console `here `__. The simplest way to authenticate yourself is to set the Scaleway API token in an environment variable:" msgstr "Scaleway モジュールã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã¯ã€`Scaleway REST API `_ を使用ã—㦠Scaleway API ã«æŽ¥ç¶šã—ã¾ã™ã€‚モジュールã¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを使用ã™ã‚‹ã«ã¯ã€Scaleway API トークンãŒå¿…è¦ã§ã™ã€‚API トークンã¯ã€Scaleway コンソール (`ã“ã¡ã‚‰ `__) ã§ç”Ÿæˆã§ãã¾ã™ã€‚自身をèªè¨¼ã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€ç’°å¢ƒå¤‰æ•°ã« Scaleway API トークンを設定ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:37 msgid "If you're not comfortable exporting your API token, you can pass it as a parameter to the modules using the ``api_token`` argument." msgstr "API トークンã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«æŠµæŠ—ãŒã‚ã‚‹å ´åˆã¯ã€``api_token`` 引数を使用ã—ã¦ã“れをパラメーターã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:50 msgid "How to add an SSH key?" msgstr "SSH キーã®è¿½åŠ æ–¹æ³•" #: ../../rst/scenario_guides/guide_scaleway.rst:52 msgid "Connection to Scaleway Compute nodes use Secure Shell. SSH keys are stored at the account level, which means that you can re-use the same SSH key in multiple nodes. The first step to configure Scaleway compute resources is to have at least one SSH key configured." msgstr "Scaleway コンピュートノードã¸ã®æŽ¥ç¶šã¯ã€Secure Shell を使用ã—ã¾ã™ã€‚SSH キーã¯ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ¬ãƒ™ãƒ«ã«ä¿å­˜ã•れるãŸã‚ã€åŒã˜ SSH キーを複数ã®ãƒŽãƒ¼ãƒ‰ã§å†åˆ©ç”¨ã§ãã¾ã™ã€‚Scaleway コンピュートリソースを設定ã™ã‚‹æœ€åˆã®æ‰‹é †ã¯ã€å°‘ãªãã¨ã‚‚ 1 ã¤ã® SSH キーを設定ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:56 msgid ":ref:`scaleway_sshkey_module` is a module that manages SSH keys on your Scaleway account. You can add an SSH key to your account by including the following task in a playbook:" msgstr ":ref:`scaleway_sshkey_module` ã¯ã€Scaleway アカウント㧠SSH キーを管ç†ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚SSH キーã¯ã€Playbook ã«ä»¥ä¸‹ã®ã‚¿ã‚¹ã‚¯ã‚’å«ã‚ã‚‹ã“ã¨ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«è¿½åŠ ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:66 msgid "The ``ssh_pub_key`` parameter contains your ssh public key as a string. Here is an example inside a playbook:" msgstr "``ssh_pub_key`` パラメーターã«ã¯ã€æ–‡å­—列ã¨ã—㦠ssh 公開éµãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€Playbook 内ã®ä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:91 msgid "How to create a compute instance?" msgstr "コンピュートインスタンスã®ä½œæˆæ–¹æ³•" #: ../../rst/scenario_guides/guide_scaleway.rst:93 msgid "Now that we have an SSH key configured, the next step is to spin up a server! :ref:`scaleway_compute_module` is a module that can create, update and delete Scaleway compute instances:" msgstr "ã“れ㧠SSH キーãŒè¨­å®šã•れãŸãŸã‚ã€æ¬¡ã®æ‰‹é †ã§ã¯ã‚µãƒ¼ãƒãƒ¼ã‚’èµ·å‹•ã—ã¾ã™ã€‚:ref:`scaleway_compute_module` ã¯ã€Scaleway コンピュートインスタンスã®ä½œæˆã€æ›´æ–°ã€ãŠã‚ˆã³å‰Šé™¤ãŒå¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:107 msgid "Here are the parameter details for the example shown above:" msgstr "以下ã¯ã€ä¸Šè¿°ã®ãƒ‘ラメーターã®è©³ç´°ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:109 msgid "``name`` is the name of the instance (the one that will show up in your web console)." msgstr "``name`` インスタンスã®åå‰ (Web コンソールã«è¡¨ç¤ºã•れるもã®)。" #: ../../rst/scenario_guides/guide_scaleway.rst:110 msgid "``image`` is the UUID of the system image you would like to use. A list of all images is available for each availability zone." msgstr "``image`` ã¯ã€ä½¿ç”¨ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚¤ãƒ¡ãƒ¼ã‚¸ã® UUID ã§ã™ã€‚å„アベイラビリティーゾーンã§ã‚¤ãƒ¡ãƒ¼ã‚¸ä¸€è¦§ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:112 msgid "``organization`` represents the organization that your account is attached to." msgstr "``organization`` アカウントを登録ã—ã¦ã„る組織を表ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:113 msgid "``region`` represents the Availability Zone which your instance is in (for this example, par1 and ams1)." msgstr "``region`` ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒå­˜åœ¨ã™ã‚‹ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーン (例: par1 ãŠã‚ˆã³ ams1) を表ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:114 msgid "``commercial_type`` represents the name of the commercial offers. You can check out the Scaleway pricing page to find which instance is right for you." msgstr "``commercial_type`` ã¯ã€è²©å£²ã‚µãƒ¼ãƒ“スã®åå‰ã‚’表ã—ã¾ã™ã€‚Scaleway 価格ページã§ã¯ã€ã©ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒé©ã—ã¦ã„ã‚‹ã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:117 msgid "Take a look at this short playbook to see a working example using ``scaleway_compute``:" msgstr "ã“ã®çŸ­ã„ Playbook ã‚’å‚ç…§ã—ã¦ã€``scaleway_compute`` を使用ã—ãŸä½œæ¥­ä¾‹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_scaleway.rst:172 msgid "Ansible ships with :ref:`scaleway_inventory`. You can now get a complete inventory of your Scaleway resources through this plugin and filter it on different parameters (``regions`` and ``tags`` are currently supported)." msgstr "Ansible ã«ã¯ :ref:`scaleway_inventory` ãŒåŒæ¢±ã•れã¾ã™ã€‚ã“ã®ãƒ—ラグインを介ã—ã¦ã€Scaleway リソースã®å®Œå…¨ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’å–å¾—ã—ã€ç•°ãªã‚‹ãƒ‘ラメーターã§ãƒ•ィルターã§ãるよã†ã«ãªã‚Šã¾ã—㟠(``regions`` ãŠã‚ˆã³ ``tags`` ã¯ç¾åœ¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™)。" #: ../../rst/scenario_guides/guide_scaleway.rst:176 msgid "Let's create an example! Suppose that we want to get all hosts that got the tag web_server. Create a file named ``scaleway_inventory.yml`` with the following content:" msgstr "以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚web_server タグを付ã‘ãŸã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚以下ã®å†…容㧠``scaleway_inventory.yml`` ã¨ã„ã†åå‰ã®ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:189 msgid "This inventory means that we want all hosts that got the tag ``web_server`` on the zones ``ams1`` and ``par1``. Once you have configured this file, you can get the information using the following command:" msgstr "ã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¯ã€``ams1`` ゾーンãŠã‚ˆã³ ``par1`` ゾーンã§ã‚¿ã‚° ``web_server`` ã‚’å–å¾—ã—ãŸã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆãŒå¿…è¦ãªã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ•ァイルを設定ã—ãŸã‚‰ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦æƒ…報をå–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:196 msgid "The output will be:" msgstr "出力ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:239 msgid "As you can see, we get different groups of hosts. ``par1`` and ``ams1`` are groups based on location. ``web_server`` is a group based on a tag." msgstr "ã”覧ã®ã¨ãŠã‚Šã€ãƒ›ã‚¹ãƒˆã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒç•°ãªã‚Šã¾ã™ã€‚``par1`` ãŠã‚ˆã³ ``ams1`` ã¯å ´æ‰€ã«åŸºã¥ã„ãŸã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚``web_server`` ã¯ã€ã‚¿ã‚°ã«åŸºã¥ã„ãŸã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:243 msgid "In case a filter parameter is not defined, the plugin supposes all values possible are wanted. This means that for each tag that exists on your Scaleway compute nodes, a group based on each tag will be created." msgstr "フィルターパラメーターãŒå®šç¾©ã•れã¦ã„ãªã„ã¨ã€ãƒ—ラグインã¯å¯èƒ½ãªå€¤ãŒã™ã¹ã¦å¿…è¦ã§ã‚ã‚‹ã¨æƒ³å®šã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Scaleway コンピュートノードã«å­˜åœ¨ã™ã‚‹ã‚¿ã‚°ã”ã¨ã«ã€å„ã‚¿ã‚°ã«åŸºã¥ã„ãŸã‚°ãƒ«ãƒ¼ãƒ—ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:247 msgid "Scaleway S3 object storage" msgstr "Scaleway S3 オブジェクトストレージ" #: ../../rst/scenario_guides/guide_scaleway.rst:249 msgid "`Object Storage `_ allows you to store any kind of objects (documents, images, videos, and so on). As the Scaleway API is S3 compatible, Ansible supports it natively through the modules: :ref:`s3_bucket_module`, :ref:`aws_s3_module`." msgstr "`Object Storage `_ を使用ã™ã‚‹ã¨ã€ã‚らゆる種類ã®ã‚ªãƒ–ジェクト (ドキュメントã€ã‚¤ãƒ¡ãƒ¼ã‚¸ã€éŒ²ç”»ãªã©) ã‚’ä¿å­˜ã§ãã¾ã™ã€‚Scaleway API 㯠S3 互æ›ã§ã‚ã‚‹ãŸã‚ã€Ansible ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« :ref:`s3_bucket_module`ã€:ref:`aws_s3_module` ã§ãƒã‚¤ãƒ†ã‚£ãƒ–ã«ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_scaleway.rst:252 msgid "You can find many examples in the `scaleway_s3 integration tests `_." msgstr "`scaleway_s3 çµ±åˆã‚²ã‚¹ãƒˆ `_ ã«ã€ä¾‹ãŒå¤šæ•°ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:2 msgid "Vagrant Guide" msgstr "Vagrant ガイド" #: ../../rst/scenario_guides/guide_vagrant.rst:9 msgid "`Vagrant `_ is a tool to manage virtual machine environments, and allows you to configure and use reproducible work environments on top of various virtualization and cloud platforms. It also has integration with Ansible as a provisioner for these virtual machines, and the two tools work together well." msgstr "`Vagrant `_ ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ç’°å¢ƒã‚’管ç†ã™ã‚‹ãŸã‚ã®ãƒ„ールã§ã€ã•ã¾ã–ã¾ãªä»®æƒ³åŒ–やクラウドプラットフォームã§ã€å†ç¾æ€§ã®ã‚る作業環境を構æˆã—ã¦åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã“れらã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ—ロビジョナーã¨ã—㦠Ansible ã¨é€£æºã—ã¦ãŠã‚Šã€2 ã¤ã®ãƒ„ールãŒé©åˆ‡ã«é€£æºã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:15 msgid "This guide will describe how to use Vagrant 1.7+ and Ansible together." msgstr "本ガイドã§ã¯ã€Vagrant 1.7 以é™ãŠã‚ˆã³ Ansible を一緒ã«ä½¿ç”¨ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:17 msgid "If you're not familiar with Vagrant, you should visit `the documentation `_." msgstr "Vagrant ã«ç²¾é€šã—ã¦ã„ãªã„å ´åˆã¯ã€`the documentation `_ ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:20 msgid "This guide assumes that you already have Ansible installed and working. Running from a Git checkout is fine. Follow the :ref:`installation_guide` guide for more information." msgstr "本ガイドã§ã¯ã€ã™ã§ã« Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€å‹•作ã—ã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™ã€‚Git checkout ã‹ã‚‰ã®å®Ÿè¡Œã‚‚å¯èƒ½ã§ã™ã€‚詳細ã¯ã€ã€Œ:ref:`installation_guide`ã€ã‚¬ã‚¤ãƒ‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vagrant.rst:27 msgid "Vagrant Setup" msgstr "Vagrant 設定" #: ../../rst/scenario_guides/guide_vagrant.rst:29 msgid "The first step once you've installed Vagrant is to create a ``Vagrantfile`` and customize it to suit your needs. This is covered in detail in the Vagrant documentation, but here is a quick example that includes a section to use the Ansible provisioner to manage a single machine:" msgstr "Vagrant をインストールã—ãŸã‚‰ã¾ãšã€``Vagrantfile`` を作æˆã—ã€ãƒ‹ãƒ¼ã‚ºã«åˆã‚ã›ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“れã«ã¤ã„ã¦ã¯ Vagrant ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§è©³ã—ã説明ã•れã¦ã„ã¾ã™ãŒã€ã“ã“ã§ã¯ç°¡å˜ãªä¾‹ã¨ã—ã¦ã€Ansible プロビジョナーを使用ã—㦠1 å°ã®ãƒžã‚·ãƒ³ã‚’管ç†ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:50 msgid "Notice the ``config.vm.provision`` section that refers to an Ansible playbook called ``playbook.yml`` in the same directory as the ``Vagrantfile``. Vagrant runs the provisioner once the virtual machine has booted and is ready for SSH access." msgstr "``Vagrantfile`` ã¨åŒã˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ ``playbook.yml`` ã¨ã„ã†åå‰ã® Ansible Playbook ã‚’å‚ç…§ã—ã¦ã„ã‚‹ ``config.vm.provision`` ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«æ³¨ç›®ã—ã¦ãã ã•ã„。Vagrant ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã€SSH ã‚¢ã‚¯ã‚»ã‚¹ã®æº–å‚™ãŒæ•´ã£ãŸã‚‰ãƒ—ロビジョナーを実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:55 msgid "There are a lot of Ansible options you can configure in your ``Vagrantfile``. Visit the `Ansible Provisioner documentation `_ for more information." msgstr "``Vagrantfile`` ã§è¨­å®šã§ãã‚‹ Ansible オプションãŒå¤šæ•°ã‚りã¾ã™ã€‚詳細ã¯ã€`Ansible Provisioner ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vagrant.rst:64 msgid "This will start the VM, and run the provisioning playbook (on the first VM startup)." msgstr "ã“れã«ã‚ˆã‚Šã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒèµ·å‹•ã—ã€(最åˆã®ä»®æƒ³ãƒžã‚·ãƒ³ã®èµ·å‹•ã§) プロビジョニング Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:68 msgid "To re-run a playbook on an existing VM, just run:" msgstr "既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã§ Playbook ã‚’å†å®Ÿè¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:74 msgid "This will re-run the playbook against the existing VM." msgstr "ã“れã«ã‚ˆã‚Šã€Playbook ãŒæ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«å¯¾ã—ã¦å†å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:76 msgid "Note that having the ``ansible.verbose`` option enabled will instruct Vagrant to show the full ``ansible-playbook`` command used behind the scene, as illustrated by this example:" msgstr "``ansible.verbose`` オプションを有効ã«ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ä¾‹ã®ã‚ˆã†ã«ã€å†…部ã§ä½¿ç”¨ã•れる ``ansible-playbook`` コマンド全体を表示ã™ã‚‹ã‚ˆã† Vagrant ã«æŒ‡ç¤ºã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vagrant.rst:84 msgid "This information can be quite useful to debug integration issues and can also be used to manually execute Ansible from a shell, as explained in the next section." msgstr "ã“ã®æƒ…å ±ã¯ã€çµ±åˆã®å•題ã®ãƒ‡ãƒãƒƒã‚°ã«éžå¸¸ã«ä¾¿åˆ©ã§ã™ã€‚ã¾ãŸã€æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ã‚·ã‚§ãƒ«ã‹ã‚‰ Ansible を手動ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:91 msgid "Running Ansible Manually" msgstr "Ansible ã®æ‰‹å‹•実行" #: ../../rst/scenario_guides/guide_vagrant.rst:93 msgid "Sometimes you may want to run Ansible manually against the machines. This is faster than kicking ``vagrant provision`` and pretty easy to do." msgstr "マシンã«å¯¾ã—ã¦æ‰‹å‹•ã§ Ansible を実行ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã¯ã€``vagrant provision`` を実行ã™ã‚‹ã‚ˆã‚Šã‚‚速ãã€éžå¸¸ã«ç°¡å˜ã«ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:96 msgid "With our ``Vagrantfile`` example, Vagrant automatically creates an Ansible inventory file in ``.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory``. This inventory is configured according to the SSH tunnel that Vagrant automatically creates. A typical automatically-created inventory file for a single machine environment may look something like this:" msgstr "``Vagrantfile`` ã®ä¾‹ã§ã¯ã€Vagrant ㌠``.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory`` ã« Ansible インベントリーファイルを自動的ã«ä½œæˆã—ã¾ã™ã€‚ã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¯ Vagrant ãŒè‡ªå‹•çš„ã«ä½œæˆã™ã‚‹ SSH トンãƒãƒ«ã«å¾“ã£ã¦è¨­å®šã•れã¾ã™ã€‚シングルマシン環境用ã§å…¸åž‹çš„ãªè‡ªå‹•作æˆã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:108 msgid "If you want to run Ansible manually, you will want to make sure to pass ``ansible`` or ``ansible-playbook`` commands the correct arguments, at least for the *inventory*." msgstr "Ansible を手動ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€å°‘ãªãã¨ã‚‚ *インベントリー* 対ã—ã¦ã€``ansible`` コマンドã¾ãŸã¯ ``ansible-playbook`` ã‚³ãƒžãƒ³ãƒ‰ã«æ­£ã—ã„引数を渡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:117 msgid "Advanced Usages" msgstr "高度ãªä½¿ç”¨æ–¹æ³•" #: ../../rst/scenario_guides/guide_vagrant.rst:119 msgid "The \"Tips and Tricks\" chapter of the `Ansible Provisioner documentation `_ provides detailed information about more advanced Ansible features like:" msgstr "`Ansible Provisioner ドキュメント `_ ã®ã€Œãƒ’ントãŠã‚ˆã³è£æŠ€ã€ã®ç« ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªé«˜åº¦ãª Ansible 機能ã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ãŒæä¾›ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vagrant.rst:122 msgid "how to execute a playbook in parallel within a multi-machine environment" msgstr "マルãƒãƒžã‚·ãƒ³ç’°å¢ƒå†…ã§ Playbook を並行ã—ã¦å®Ÿè¡Œã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/guide_vagrant.rst:123 msgid "how to integrate a local ``ansible.cfg`` configuration file" msgstr "ローカル㮠``ansible.cfg`` 設定ファイルを統åˆã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/guide_vagrant.rst:127 msgid "`Vagrant Home `_" msgstr "`Vagrant ホーム `_" #: ../../rst/scenario_guides/guide_vagrant.rst:128 msgid "The Vagrant homepage with downloads" msgstr "ダウンロードをå«ã‚€ Vagrant ホームページ" #: ../../rst/scenario_guides/guide_vagrant.rst:129 msgid "`Vagrant Documentation `_" msgstr "`Vagrant ドキュメント `_" #: ../../rst/scenario_guides/guide_vagrant.rst:130 msgid "Vagrant Documentation" msgstr "Vagrant ドキュメント" #: ../../rst/scenario_guides/guide_vagrant.rst:131 msgid "`Ansible Provisioner `_" msgstr "`Ansible Provisioner `_" #: ../../rst/scenario_guides/guide_vagrant.rst:132 msgid "The Vagrant documentation for the Ansible provisioner" msgstr "Ansible プロビジョナー㮠Vagrant ドキュメント" #: ../../rst/scenario_guides/guide_vagrant.rst:133 #, python-format msgid "`Vagrant Issue Tracker `_" msgstr "`Vagrant Issue Tracker `_" #: ../../rst/scenario_guides/guide_vagrant.rst:134 msgid "The open issues for the Ansible provisioner in the Vagrant project" msgstr "Vagrant プロジェクトã§ã® Ansible プロビジョナーã«é–¢ã™ã‚‹æœªè§£æ±ºãªå•題" #: ../../rst/scenario_guides/guide_vmware.rst:5 msgid "VMware Guide" msgstr "VMware ガイド" #: ../../rst/scenario_guides/guide_vmware.rst:7 msgid "Welcome to the Ansible for VMware Guide!" msgstr "Ansible for VMware ガイドã¸ã‚ˆã†ã“ã!" #: ../../rst/scenario_guides/guide_vmware.rst:9 msgid "The purpose of this guide is to teach you everything you need to know about using Ansible with VMware." msgstr "本ガイドã®ç›®çš„ã¯ã€VMware ã§ Ansible を使用ã™ã‚‹éš›ã«å¿…è¦ãªçŸ¥è­˜ã‚’学習ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_vmware_rest.rst:5 msgid "VMware REST Scenarios" msgstr "VMware REST シナリオ" #: ../../rst/scenario_guides/guide_vmware_rest.rst:7 msgid "These scenarios teach you how to accomplish common VMware tasks using the REST API and the Ansible ``vmware.vmware_rest`` collection. To get started, please select the task you want to accomplish." msgstr "ã“れらã®ã‚·ãƒŠãƒªã‚ªã¯ã€REST API 㨠Ansible ``vmware.vmware_rest`` コレクションを使用ã—ã¦ä¸€èˆ¬çš„㪠VMware タスクを実ç¾ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚é–‹å§‹ã™ã‚‹ã«ã¯ã€é”æˆã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vultr.rst:2 msgid "Vultr Guide" msgstr "Vultr ガイド" #: ../../rst/scenario_guides/guide_vultr.rst:4 msgid "Ansible offers a set of modules to interact with `Vultr `_ cloud platform." msgstr "Ansible ã¯ã€`Vultr `_ クラウドプラットフォームã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:6 msgid "This set of module forms a framework that allows one to easily manage and orchestrate one's infrastructure on Vultr cloud platform." msgstr "ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚»ãƒƒãƒˆã¯ã€Vultr クラウドプラットフォームã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’ç°¡å˜ã«ç®¡ç†ãŠã‚ˆã³èª¿æ•´ã§ãるよã†ã«ã™ã‚‹ãƒ•レームワークを形æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:12 msgid "There is actually no technical requirement; simply an already created Vultr account." msgstr "技術的è¦ä»¶ã¯ã‚りã¾ã›ã‚“。ã™ã§ã«ä½œæˆã•れã¦ã„ã‚‹ Vultr アカウントãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:18 msgid "Vultr modules offer a rather flexible way with regard to configuration." msgstr "Vultr モジュールã¯ã€è¨­å®šã«é–¢ã—ã¦ã‹ãªã‚ŠæŸ”è»Ÿãªæ–¹æ³•ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:20 msgid "Configuration is read in that order:" msgstr "設定ã¯ã€ä»¥ä¸‹ã®é †åºã§èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:22 msgid "Environment Variables (eg. ``VULTR_API_KEY``, ``VULTR_API_TIMEOUT``)" msgstr "環境変数 (例: ``VULTR_API_KEY``ã€``VULTR_API_TIMEOUT``)" #: ../../rst/scenario_guides/guide_vultr.rst:23 msgid "File specified by environment variable ``VULTR_API_CONFIG``" msgstr "環境変数 ``VULTR_API_CONFIG`` ã§æŒ‡å®šã•れるファイル" #: ../../rst/scenario_guides/guide_vultr.rst:24 msgid "``vultr.ini`` file located in current working directory" msgstr "ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚ã‚‹ ``vultr.ini`` ファイル" #: ../../rst/scenario_guides/guide_vultr.rst:25 msgid "``$HOME/.vultr.ini``" msgstr "``$HOME/.vultr.ini``" #: ../../rst/scenario_guides/guide_vultr.rst:28 msgid "Ini file are structured this way:" msgstr "ini ファイルã¯ä»¥ä¸‹ã®ã‚ˆã†ãªæ§‹æˆã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:41 msgid "If ``VULTR_API_ACCOUNT`` environment variable or ``api_account`` module parameter is not specified, modules will look for the section named \"default\"." msgstr "``VULTR_API_ACCOUNT`` 環境変数ã¾ãŸã¯ ``api_account`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€Œdefaultã€ã¨ã„ã†åå‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’探ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:47 msgid "Before using the Ansible modules to interact with Vultr, ones need an API key. If one doesn't own one yet, log in to `Vultr `_ go to Account, then API, enable API then the API key should show up." msgstr "Ansible モジュールを使用ã—㦠Vultr ã¨å¯¾è©±ã™ã‚‹å‰ã«ã€API キーãŒå¿…è¦ã§ã™ã€‚API キーを所有ã—ã¦ã„ãªã„å ´åˆã¯ã€`Vultr `_ ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ç§»å‹•ã—㦠API を有効ã«ã™ã‚‹ã¨ã€API キーãŒè¡¨ç¤ºã•れるã¯ãšã§ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:50 msgid "Ensure you allow the usage of the API key from the proper IP addresses." msgstr "é©åˆ‡ãª IP アドレスã‹ã‚‰ API キーを使用ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:52 msgid "Refer to the Configuration section to find out where to put this information." msgstr "ã“ã®æƒ…報をã©ã“ã«ç½®ãã‹ã¯ã€ã€Œæ§‹æˆã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vultr.rst:54 msgid "To check that everything is working properly run the following command:" msgstr "ã™ã¹ã¦ãŒé©åˆ‡ã«æ©Ÿèƒ½ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:76 msgid "If a similar output displays then everything is setup properly, else please ensure the proper ``VULTR_API_KEY`` has been specified and that Access Control on Vultr > Account > API page are accurate." msgstr "åŒæ§˜ã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã€ã™ã¹ã¦ã®è¨­å®šãŒé©åˆ‡ã«è¡Œã‚れãŸå ´åˆã¯ã€é©åˆ‡ãª ``VULTR_API_KEY`` ãŒæ­£ã—ãæŒ‡å®šã•れã¦ãŠã‚Šã€Vultr > Account > API ページã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶å¾¡ãŒæ­£ç¢ºã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vultr.rst:80 msgid "Usage" msgstr "使用法" #: ../../rst/scenario_guides/guide_vultr.rst:82 msgid "Since `Vultr `_ offers a public API, the execution of the module to manage the infrastructure on their platform will happen on localhost. This translates to:" msgstr "`Vultr `_ ã¯ã€ãƒ‘ブリック API ã‚’æä¾›ã™ã‚‹ãŸã‚ã€ãƒ—ラットフォーム上ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’管ç†ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã§è¡Œã‚れã¾ã™ã€‚ã“れã¯ã€ä»¥ä¸‹ã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:96 msgid "From that point on, only your creativity is the limit. Make sure to read the documentation of the `available modules `_." msgstr "ã“れ以é™ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å‰µé€ æ€§ã ã‘ãŒé™ç•Œã¨ãªã‚Šã¾ã™ã€‚`利用å¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« `_ ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/guide_vultr.rst:100 msgid "Dynamic Inventory" msgstr "動的インベントリー" #: ../../rst/scenario_guides/guide_vultr.rst:102 msgid "Ansible provides a dynamic inventory plugin for `Vultr `_. The configuration process is exactly the same as the one for the modules." msgstr "Ansible ã¯ã€`Vultr `_ ã®å‹•的インベントリープラグインをæä¾›ã—ã¾ã™ã€‚設定プロセスã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å ´åˆã¨åŒã˜ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:105 msgid "To be able to use it you need to enable it first by specifying the following in the ``ansible.cfg`` file:" msgstr "ã“れを使用ã§ãるよã†ã«ã™ã‚‹ã«ã¯ã€``ansible.cfg`` ファイルã§ä»¥ä¸‹ã‚’指定ã—ã¦ã€ã¾ãšæœ‰åŠ¹ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:112 msgid "And provide a configuration file to be used with the plugin, the minimal configuration file looks like this:" msgstr "ã¾ãŸã€ãƒ—ラグインã§ä½¿ç”¨ã™ã‚‹è¨­å®šãƒ•ァイルをæä¾›ã—ã¾ã™ã€‚最å°è¨­å®šãƒ•ァイルã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:119 msgid "To list the available hosts one can simply run:" msgstr "利用å¯èƒ½ãªãƒ›ã‚¹ãƒˆã‚’一覧表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:126 msgid "For example, this allows you to take action on nodes grouped by location or OS name:" msgstr "ãŸã¨ãˆã°ã€ã“れã«ã‚ˆã‚Šã€å ´æ‰€åˆ¥ã¾ãŸã¯ OS å別ã«ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¾ã¨ã‚ãŸãƒŽãƒ¼ãƒ‰ã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:139 msgid "Integration tests" msgstr "çµ±åˆãƒ†ã‚¹ãƒˆ" #: ../../rst/scenario_guides/guide_vultr.rst:141 msgid "Ansible includes integration tests for all Vultr modules." msgstr "Ansible ã«ã¯ã€ã™ã¹ã¦ã® Vultr モジュールã®çµ±åˆãƒ†ã‚¹ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:143 msgid "These tests are meant to run against the public Vultr API and that is why they require a valid key to access the API." msgstr "ã“れらã®ãƒ†ã‚¹ãƒˆã¯ã€ãƒ‘ブリック Vultr API ã«å¯¾ã—ã¦å®Ÿè¡Œã•れるã“ã¨ãŒæ„図ã•れã¦ã„ã¾ã™ã€‚ã“れãŒã€API ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«æœ‰åйãªéµãŒå¿…è¦ã¨ãªã‚‹ç†ç”±ã§ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:145 msgid "Prepare the test setup:" msgstr "テスト設定を準備ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:152 msgid "Set the Vultr API key:" msgstr "Vultr API キーを設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:160 msgid "Run all Vultr tests:" msgstr "ã™ã¹ã¦ã® Vultr テストを実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guide_vultr.rst:167 msgid "To run a specific test, for example vultr_account_info:" msgstr "特定ã®ãƒ†ã‚¹ãƒˆ (例: vultr_account_info) を実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/guides.rst:28 #: ../../rst/scenario_guides/network_guides.rst:5 msgid "Network Technology Guides" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ã‚¬ã‚¤ãƒ‰" #: ../../rst/scenario_guides/guides.rst:36 msgid "Virtualization & Containerization Guides" msgstr "仮想化ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ãƒŠãƒ¼åŒ–ガイド" #: ../../rst/scenario_guides/guides.rst:7 msgid "Scenario Guides" msgstr "シナリオガイド" #: ../../rst/scenario_guides/guides.rst:9 msgid "The guides in this section cover integrating Ansible with a variety of platforms, products, and technologies. They explore particular use cases in greater depth and provide a more \"top-down\" explanation of some basic features." msgstr "本セクションã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€Ansible ã¨ã•ã¾ã–ã¾ãªãƒ—ラットフォームã€è£½å“ã€ãŠã‚ˆã³ãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ã®çµ±åˆã‚’説明ã—ã¾ã™ã€‚特定ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã€ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªæ©Ÿèƒ½ã‚’「トップダウンã€ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:5 msgid "Introduction to Ansible for Kubernetes" msgstr "Kubernetes å‘ã‘ Ansible ã®æ¦‚è¦" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:13 msgid "Modules for interacting with the Kubernetes (K8s) and OpenShift API are under development, and can be used in preview mode. To use them, review the requirements, and then follow the installation and use instructions." msgstr "Kubernetes (K8s) ãŠã‚ˆã³ OpenShift API ã¨å¯¾è©±ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é–‹ç™ºä¸­ã§ã‚りã€ãƒ—レビューモードã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã«ã¯ã€è¦ä»¶ã‚’確èªã—ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŠã‚ˆã³æŒ‡ç¤ºã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:18 msgid "To use the modules, you'll need the following:" msgstr "モジュールを使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:20 msgid "Run Ansible from source. For assistance, view :ref:`from_source`." msgstr "ソースã‹ã‚‰ Ansible を実行ã—ã¾ã™ã€‚サãƒãƒ¼ãƒˆã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`from_source`ã€ã‚’ã”覧ãã ã•ã„。" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:21 msgid "`OpenShift Rest Client `_ installed on the host that will execute the modules." msgstr "`OpenShift Rest クライアント ` ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãƒ›ã‚¹ãƒˆã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„る。" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:27 msgid "The Kubernetes modules are part of the `Ansible Kubernetes collection `_." msgstr "Kubernetes モジュールã¯ã€`Ansible Kubernetes コレクション `_ ã®ä¸€éƒ¨ã§ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:29 msgid "To install the collection, run the following:" msgstr "コレクションをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:37 msgid "Authenticating with the API" msgstr "API ã§ã®èªè¨¼" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:39 msgid "By default the OpenShift Rest Client will look for ``~/.kube/config``, and if found, connect using the active context. You can override the location of the file using the``kubeconfig`` parameter, and the context, using the ``context`` parameter." msgstr "デフォルトã§ã¯ã€OpenShift Rest Client 㯠``~/.kube/config`` を検索ã—ã€è¦‹ã¤ã‹ã£ãŸå ´åˆã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’使用ã—ã¦æŽ¥ç¶šã—ã¾ã™ã€‚``kubeconfig`` パラメーターを使用ã—ã¦ãƒ•ァイルã®å ´æ‰€ã‚’上書ãã—ã€``context`` パラメーターを使用ã—ã¦ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’上書ãã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:41 msgid "Basic authentication is also supported using the ``username`` and ``password`` options. You can override the URL using the ``host`` parameter. Certificate authentication works through the ``ssl_ca_cert``, ``cert_file``, and ``key_file`` parameters, and for token authentication, use the ``api_key`` parameter." msgstr "Basic èªè¨¼ã¯ã€``username`` オプションãŠã‚ˆã³ ``password`` オプションを使用ã—ã¦ã‚‚サãƒãƒ¼ãƒˆã•れã¾ã™ã€‚``host`` パラメーターを使用ã—㦠URL を上書ãã§ãã¾ã™ã€‚証明書èªè¨¼ã¯ã€``ssl_ca_cert`` パラメーターã€``cert_file`` パラメーターã€ãŠã‚ˆã³ ``key_file`` ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚ã¾ãŸã€ãƒˆãƒ¼ã‚¯ãƒ³èªè¨¼ã«ã¯ ``api_key`` パラメーターを使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:43 msgid "To disable SSL certificate verification, set ``verify_ssl`` to false." msgstr "SSL è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚’無効ã«ã™ã‚‹ã«ã¯ã€``verify_ssl`` ã‚’ false ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:46 msgid "Reporting an issue" msgstr "å•題ã®å ±å‘Š" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst:48 msgid "If you find a bug or have a suggestion regarding modules, please file issues at `Ansible Kubernetes collection `_. If you find a bug regarding OpenShift client, please file issues at `OpenShift REST Client issues `_. If you find a bug regarding Kubectl binary, please file issues at `Kubectl issue tracker `_" msgstr "ãƒã‚°ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã‚„モジュールã«é–¢ã™ã‚‹ææ¡ˆã‚’ãŠå¯„ã›ã„ãŸã ã‘ã‚‹å ´åˆã¯ã€`Ansible Kubernetes コレクション `_ ã«å•題を報告ã—ã¦ãã ã•ã„。OpenShift クライアントã«é–¢ã™ã‚‹ãƒã‚°ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã¯ã€`OpenShift REST Client issues `_ ã«å•題を報告ã—ã¦ãã ã•ã„。Kubectl ãƒã‚¤ãƒŠãƒªãƒ¼ã«é–¢ã™ã‚‹ãƒã‚°ã¯ã€`Kubectl issue tracker `_ ã«å•題を報告ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:5 msgid "Using Kubernetes dynamic inventory plugin" msgstr "Kubernetes 動的インベントリープラグインã®ä½¿ç”¨" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:11 msgid "Kubernetes dynamic inventory plugin" msgstr "Kubernetes 動的インベントリープラグイン" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:14 msgid "The best way to interact with your Pods is to use the Kubernetes dynamic inventory plugin, which dynamically queries Kubernetes APIs using ``kubectl`` command line available on controller node and tells Ansible what Pods can be managed." msgstr "Pod ã¨å¯¾è©±ã™ã‚‹æœ€é©ãªæ–¹æ³•ã¨ã—ã¦ã€Kubernetes 動的インベントリープラグインを使用ã—ã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãƒŽãƒ¼ãƒ‰ã§åˆ©ç”¨å¯èƒ½ãª ``kubectl`` コマンドラインを使用ã—㦠Kubernetes API ã‚’å‹•çš„ã«ã‚¯ã‚¨ãƒªãƒ¼ã—ã€Ansible ã§ç®¡ç†ã§ãã‚‹ Pod を示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:19 msgid "To use the Kubernetes dynamic inventory plugins, you must install `Kubernetes Python client `_, `kubectl `_ and `OpenShift Python client `_ on your control node (the host running Ansible)." msgstr "Kubernetes ã®å‹•的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€`Kubernetes Python クライアント `_ã€`kubectl `_ã€ãŠã‚ˆã³ `OpenShift Python client `_ をコントロールノード (Ansible を実行ã™ã‚‹ãƒ›ã‚¹ãƒˆ) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:26 msgid "Please refer to Kubernetes official documentation for `installing kubectl `_ on the given operating systems." msgstr "該当ã™ã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€`kubectl ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« `_ ã® Kubernetes ã®å…¬å¼ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:28 msgid "To use this Kubernetes dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file:" msgstr "ã“ã® Kubernetes 動的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€``ansible.cfg`` ファイルã§ä»¥ä¸‹ã‚’指定ã—ã¦ã€ã¾ãšã“れを有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:35 msgid "Then, create a file that ends in ``.k8s.yml`` or ``.k8s.yaml`` in your working directory." msgstr "次ã«ã€ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã€åå‰ã®æœ«å°¾ãŒ ``.k8s.yml`` ã¾ãŸã¯ ``.k8s.yaml`` ã§çµ‚ã‚るファイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:37 msgid "The ``kubernetes.core.k8s`` inventory plugin takes in the same authentication information as any other Kubernetes modules." msgstr "``kubernetes.core.k8s`` インベントリープラグインã¯ã€ä»–ã® Kubernetes モジュールã¨åŒã˜èªè¨¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:45 msgid "Executing ``ansible-inventory --list -i .k8s.yml`` will create a list of Pods that are ready to be configured using Ansible." msgstr "``ansible-inventory --list -i .k8s.yml`` を実行ã™ã‚‹ã¨ã€Ansible を使用ã—ã¦è¨­å®šã§ãã‚‹ Pod ã®ä¸€è¦§ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:47 msgid "You can also provide the namespace to gather information about specific pods from the given namespace. For example, to gather information about Pods under the ``test`` namespace you will specify the ``namespaces`` parameter:" msgstr "ã¾ãŸã€æŒ‡å®šã•れãŸåå‰ç©ºé–“ã‹ã‚‰ç‰¹å®šã® Pod ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹åå‰ç©ºé–“ã‚’æä¾›ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``test`` åå‰ç©ºé–“ã§ Pod ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹ã«ã¯ã€``namespaces`` パラメーターを指定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:57 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:57 msgid "Using vaulted configuration files" msgstr "Vault ãŒè¨­å®šã•れãŸè¨­å®šãƒ•ァイルã®ä½¿ç”¨" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:59 msgid "Since the inventory configuration file contains Kubernetes related sensitive information in plain text, a security risk, you may want to encrypt your entire inventory configuration file." msgstr "インベントリー設定ファイルã«ã¯ã€Kubernetes é–¢é€£ã®æ©Ÿå¯†æƒ…å ±ãŒãƒ—レーンテキストã§å«ã¾ã‚Œã‚‹ãŸã‚ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚インベントリー設定ファイル全体を暗å·åŒ–ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:62 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:62 msgid "You can encrypt a valid inventory configuration file as follows:" msgstr "有効ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šãƒ•ァイルã¯ä»¥ä¸‹ã®ã‚ˆã†ã«æš—å·åŒ–ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:73 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:71 msgid "And you can use this vaulted inventory configuration file using:" msgstr "ã¾ãŸã€ä»¥ä¸‹ã‚’使用ã—ã¦ã€Vault ãŒè¨­å®šã•れãŸã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šãƒ•ァイルを使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:82 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:77 msgid "`Kubernetes Python client `_" msgstr "`Kubernetes Python クライアント `_" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:83 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:78 msgid "The GitHub Page of Kubernetes Python client" msgstr "Kubernetes Python クライアント㮠GitHub ページ" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:84 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:79 msgid "`Kubernetes Python client - Issue Tracker `_" msgstr "`Kubernetes Python クライアント - Issue Tracker `_" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:85 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:80 msgid "The issue tracker for Kubernetes Python client" msgstr "Kubernetes Python クライアントã®å•題トラッカー" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:86 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:81 msgid "`OpenShift Python client `_" msgstr "`OpenShift Python クライアント `_" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:87 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:82 msgid "The GitHub Page of OpenShift Dynamic API client" msgstr "OpenShift Dynamic API クライアント㮠GitHub ページ" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:88 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:83 msgid "`OpenShift Python client - Issue Tracker `_" msgstr "`OpenShift Python クライアント - Issue Tracker `_" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:89 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:84 msgid "The issue tracker for OpenShift Dynamic API client" msgstr "OpenShift Dynamic API クライアントã®å•題トラッカー" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:90 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:85 msgid "`Kubectl installation `_" msgstr "`Kubectl インストール `_" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:91 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:86 msgid "Installation guide for installing Kubectl" msgstr "Kubectl をインストールã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚¬ã‚¤ãƒ‰" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:94 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:89 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:90 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:215 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:127 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1183 msgid ":ref:`playbooks_vault`" msgstr ":ref:`playbooks_vault`" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst:95 #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:90 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:91 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:216 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:128 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1184 msgid "Using Vault in playbooks" msgstr "Playbook ã§ã® Vault ã®ä½¿ç”¨" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_scenarios.rst:5 msgid "Ansible for Kubernetes Scenarios" msgstr "Kubernetes シナリオã«ãŠã‘ã‚‹ Ansible" #: ../../rst/scenario_guides/kubernetes_scenarios/k8s_scenarios.rst:7 msgid "These scenarios teach you how to accomplish common Kubernetes tasks using Ansible. To get started, please select the task you want to accomplish." msgstr "ã“れらã®ã‚·ãƒŠãƒªã‚ªã¯ã€Ansible を使用ã—ã¦ä¸€èˆ¬çš„㪠Kubernetes タスクを実ç¾ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚é–‹å§‹ã™ã‚‹ã«ã¯ã€é”æˆã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:5 msgid "Creating K8S object" msgstr "K8S オブジェクトã®ä½œæˆ" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:13 msgid "This guide will show you how to utilize Ansible to create Kubernetes objects such as Pods, Deployments, and Secrets." msgstr "以下ã§ã¯ã€Ansible を使用ã—㦠Podã€Deploymentã€Secret ãªã©ã® Kubernetes オブジェクトを作æˆã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:16 msgid "Scenario Requirements" msgstr "シナリオã®è¦ä»¶" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:18 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:18 msgid "Software" msgstr "ソフトウェア" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:20 msgid "Ansible 2.9.10 or later must be installed" msgstr "Ansible 2.9.10 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:22 msgid "The Python modules ``openshift`` and ``kubernetes`` must be installed on the Ansible controller (or Target host if not executing against localhost)" msgstr "Python モジュール ``openshift`` ãŠã‚ˆã³ ``kubernetes`` ã¯ã€Ansible コントローラー (ã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦å®Ÿè¡Œã•れã¦ã„ãªã„å ´åˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆ) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:24 msgid "Kubernetes Cluster" msgstr "Kubernetes クラスター" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:26 msgid "Kubectl binary installed on the Ansible controller" msgstr "Ansible コントローラーã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れ㟠Kubectl ãƒã‚¤ãƒŠãƒªãƒ¼" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:29 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:30 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:32 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:32 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:32 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:29 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:29 msgid "Access / Credentials" msgstr "アクセス/èªè¨¼æƒ…å ±" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:31 msgid "Kubeconfig configured with the given Kubernetes cluster" msgstr "指定㮠Kubernetes クラスターã§è¨­å®šã•れ㟠kubeconfig" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:35 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:66 msgid "Assumptions" msgstr "剿æ¡ä»¶" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:37 msgid "User has required level of authorization to create, delete and update resources on the given Kubernetes cluster." msgstr "ユーザーã«ã¯ã€æŒ‡å®šã® Kubernetes クラスターã§ãƒªã‚½ãƒ¼ã‚¹ã‚’作æˆã€å‰Šé™¤ã€ãŠã‚ˆã³æ›´æ–°ã™ã‚‹ã®ã«å¿…è¦ãªæ‰¿èªãƒ¬ãƒ™ãƒ«ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:40 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:73 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:39 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:41 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:41 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:36 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:38 msgid "Caveats" msgstr "注æ„事項" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:42 msgid "community.kubernetes 1.1.0 is going to migrate to `kubernetes.core `_" msgstr "community.kubernetes 1.1.0 㯠`kubernetes.core `_ ã«ç§»è¡Œã™ã‚‹äºˆå®šã§ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:45 msgid "Example Description" msgstr "例ã®èª¬æ˜Ž" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:47 msgid "In this use case / example, we will create a Pod in the given Kubernetes Cluster. The following Ansible playbook showcases the basic parameters that are needed for this." msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹/サンプルã§ã¯ã€æŒ‡å®šã—㟠Kubernetes Cluster ã« Pod を作æˆã—ã¾ã™ã€‚以下㮠Ansible Playbook ã§ã¯ã€ã“れã«å¿…è¦ãªåŸºæœ¬ãƒ‘ラメーターã«ã¤ã„ã¦å–り上ã’ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:51 msgid "Since Ansible utilizes the Kubernetes API to perform actions, in this use case we will be connecting directly to the Kubernetes cluster." msgstr "Ansible 㯠Kubernetes API を使用ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ãŸã‚ã€ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ Kubernetes クラスターã«ç›´æŽ¥æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:53 msgid "To begin, there are a few bits of information we will need. Here you are using Kubeconfig which is pre-configured in your machine. The Kubeconfig is generally located at ``~/.kube/config``. It is highly recommended to store sensitive information such as password, user certificates in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_." msgstr "ã¾ãšã€å¿…è¦ãªæƒ…報をã„ãã¤ã‹ç´¹ä»‹ã—ã¾ã™ã€‚マシン内ã§äº‹å‰è¨­å®šã•れã¦ã„ã‚‹ Kubeconfig を使用ã—ã¾ã™ã€‚Kubeconfig ã¯é€šå¸¸ ``~/.kube/config`` ã«ç½®ã‹ã‚Œã¾ã™ã€‚パスワードやユーザー証明書ãªã©ã®æ©Ÿå¯†æƒ…å ±ã¯ã€:ref:`ansible-vault` ã¾ãŸã¯`Ansible Tower èªè¨¼æƒ…å ± `_ を使用ã—ã¦ã€ã‚ˆã‚Šå®‰å…¨ãªæ–¹æ³•ã§ä¿å­˜ã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:55 msgid "Now you need to supply the information about the Pod which will be created. Using ``definition`` parameter of the ``kubernetes.core.k8s`` module, you specify `PodTemplate `_. This PodTemplate is identical to what you provide to the ``kubectl`` command." msgstr "作æˆã•れる Pod ã«é–¢ã™ã‚‹æƒ…報をæä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``kubernetes.core.k8s`` モジュール㮠``definition`` パラメーターを使用ã—㦠`PodTemplate `_ を指定ã—ã¾ã™ã€‚ã“ã® PodTemplate ã¯ã€``kubectl`` ã‚³ãƒžãƒ³ãƒ‰ã«æŒ‡å®šã™ã‚‹å†…容ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:58 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:115 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:97 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:106 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:113 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:114 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:95 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:163 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:74 msgid "What to expect" msgstr "予想ã•れるã“ã¨" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:60 msgid "You will see a bit of JSON output after this playbook completes. This output shows various parameters that are returned from the module and from cluster about the newly created Pod." msgstr "ã“ã® Playbook ãŒå®Œäº†ã™ã‚‹ã¨ã€JSON ã®å‡ºåŠ›ãŒå°‘ã—表示ã•れã¾ã™ã€‚ã“ã®å‡ºåŠ›ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰è¿”ã•れãŸã•ã¾ã–ã¾ãªãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚„ã€æ–°ãŸã«ä½œæˆã•れ㟠Pod ã«é–¢ã™ã‚‹ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‹ã‚‰è¿”ã•れãŸã•ã¾ã–ã¾ãªãƒ‘ラメーターãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:64 msgid "In the above example, 'changed' is ``True`` which notifies that the Pod creation started on the given cluster. This can take some time depending on your environment." msgstr "上記ã®ä¾‹ã§ã¯ã€ã€Œchangedã€ã¯ ``True`` ã§ã€æŒ‡å®šã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã§ Pod ã®ä½œæˆãŒé–‹å§‹ã•れã¦ã„ã‚‹ã“ã¨ã‚’通知ã—ã¾ã™ã€‚ã“れã«ã¯ã€ç’°å¢ƒã«å¿œã˜ã¦å¤šå°‘時間ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:68 #: ../../rst/scenario_guides/scenario_template.rst:45 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:215 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:114 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:120 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:167 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:150 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:115 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:103 msgid "Troubleshooting" msgstr "トラブルシューティング" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:70 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:217 msgid "Things to inspect" msgstr "検証事項" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:72 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:219 msgid "Check if the values provided for username and password are correct" msgstr "ユーザーåãŠã‚ˆã³ãƒ‘スワードã®å€¤ãŒæ­£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst:73 msgid "Check if the Kubeconfig is populated with correct values" msgstr "Kubeconfig ãŒæ­£ã—ã„値ã§å…¥åŠ›ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/network_guides.rst:7 msgid "The guides in this section cover using Ansible with specific network technologies. They explore particular use cases in greater depth and provide a more \"top-down\" explanation of some basic features." msgstr "本セクションã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ç‰¹å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŠ€è¡“を使用ã—㟠Ansible ã®ä½¿ç”¨ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚特定ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã€ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªæ©Ÿèƒ½ã‚’「トップダウンã€ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/network_guides.rst:16 msgid "To learn more about Network Automation with Ansible, see :ref:`network_getting_started` and :ref:`network_advanced`." msgstr "Ansible を使用ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化ã®è©³ç´°ã¯ã€ã€Œ:ref:`network_getting_started`ã€ãŠã‚ˆã³ã€Œ:ref:`network_advanced`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/scenario_template.rst:7 msgid "Sample scenario for Ansible platforms" msgstr "Ansible プラットフォームã®ã‚µãƒ³ãƒ—ルシナリオ" #: ../../rst/scenario_guides/scenario_template.rst:9 msgid "*Use this ``rst`` file as a starting point to create a scenario guide for your platform. The sections below are suggestions on what should be in a scenario guide.*" msgstr "*ã“ã® ``rst`` ファイルをã€ãŠä½¿ã„ã®ãƒ—ラットフォームã®ã‚·ãƒŠãƒªã‚ªã‚¬ã‚¤ãƒ‰ã‚’作æˆã™ã‚‹ãŸã‚ã®å‡ºç™ºç‚¹ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚·ãƒŠãƒªã‚ªã‚¬ã‚¤ãƒ‰ã«å«ã¾ã‚Œã‚‹ã¹ãå†…å®¹ã‚’ææ¡ˆã—ã¦ã„ã¾ã™ã€‚*" #: ../../rst/scenario_guides/scenario_template.rst:11 msgid "Introductory paragraph." msgstr "概è¦" #: ../../rst/scenario_guides/scenario_template.rst:19 msgid "Describe the requirements and assumptions for this scenario. This should include applicable subsections for hardware, software, and any other caveats to using the scenarios in this guide." msgstr "ã“ã®ã‚·ãƒŠãƒªã‚ªã®è¦ä»¶ãŠã‚ˆã³å‰ææ¡ä»¶ã‚’説明ã—ã¾ã™ã€‚ã“れã«ã¯ã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã€ã‚½ãƒ•トウェアã€ãŠã‚ˆã³ãã®ä»–ã®ã‚·ãƒŠãƒªã‚ªã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®é©ç”¨å¯èƒ½ãªã‚µãƒ–セクションをå«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/scenario_template.rst:24 msgid "Describe credential requirements and how to authenticate to this platform." msgstr "èªè¨¼æƒ…å ±ã®è¦ä»¶ã¨ã€ã“ã®ãƒ—ラットフォームã¸ã®èªè¨¼æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/scenario_template.rst:27 msgid "Using dynamic inventory" msgstr "動的インベントリーã®ä½¿ç”¨" #: ../../rst/scenario_guides/scenario_template.rst:29 msgid "If applicable, describe how to use a dynamic inventory plugin for this platform." msgstr "該当ã™ã‚‹å ´åˆã¯ã€ã“ã®ãƒ—ラットフォームã§å‹•的インベントリープラグインを使用ã™ã‚‹æ–¹æ³•を記述ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/scenario_template.rst:33 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:81 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:46 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:52 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:48 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:45 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:45 msgid "Example description" msgstr "例ã®èª¬æ˜Ž" #: ../../rst/scenario_guides/scenario_template.rst:35 msgid "Description and code here. Change the section header to something descriptive about this example, such as \"Renaming a virtual machine\". The goal is that this is the text someone would search for to find your example." msgstr "ã“ã“ã«ã¯èª¬æ˜Žã¨ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¾ã™ã€‚セクションヘッダーをã€ã€ŒRenaming a virtual machine (仮想マシンã®åå‰å¤‰æ›´)ã€ãªã©ã€ã“ã®ã‚µãƒ³ãƒ—ルを説明ã™ã‚‹ã‚‚ã®ã«å¤‰æ›´ã—ã¾ã™ã€‚ã“れã¯ã€ä½œæˆã—ãŸä¾‹ã‚’ä»–ã®èª°ã‹ãŒæ¤œç´¢ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/scenario_template.rst:39 msgid "Example output" msgstr "出力例" #: ../../rst/scenario_guides/scenario_template.rst:41 msgid "What the user should expect to see." msgstr "期待ã•ã‚Œã‚‹çµæžœã€‚" #: ../../rst/scenario_guides/scenario_template.rst:47 msgid "What to look for if it breaks." msgstr "壊れãŸã¨ãã®æ³¨æ„点・" #: ../../rst/scenario_guides/scenario_template.rst:51 msgid "Conclusion and where to go next" msgstr "çµè«–ãŠã‚ˆã³æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—" #: ../../rst/scenario_guides/scenario_template.rst:53 msgid "Recap of important points. For more information please see: links." msgstr "é‡è¦ãªãƒã‚¤ãƒ³ãƒˆã®è¦ç´„。詳細ã¯ã€ãƒªãƒ³ã‚¯ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/virt_guides.rst:5 msgid "Virtualization and Containerization Guides" msgstr "仮想化ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ãƒŠãƒ¼åŒ–ガイド" #: ../../rst/scenario_guides/virt_guides.rst:7 msgid "The guides in this section cover integrating Ansible with popular tools for creating virtual machines and containers. They explore particular use cases in greater depth and provide a more \"top-down\" explanation of some basic features." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚„コンテナーを作æˆã™ã‚‹ä¸€èˆ¬çš„ãªãƒ„ール㨠Ansible ã®çµ±åˆã‚’説明ã—ã¦ã„ã¾ã™ã€‚特定ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’ã‚ˆã‚Šæ·±ãæŽ˜ã‚Šä¸‹ã’ã€ã„ãã¤ã‹ã®åŸºæœ¬çš„ãªæ©Ÿèƒ½ã‚’「トップダウンã€ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:5 msgid "How to configure the vmware_rest collection" msgstr "vmware_rest コレクションã®è¨­å®šæ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:14 msgid "The vcenter_rest modules need to be authenticated. There are two different" msgstr "vcenter_rest モジュールをèªè¨¼ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚2 ã¤ã®ç•°ãªã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:17 msgid "Environment variables" msgstr "環境変数" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:20 msgid "This solution requires that you call the modules from the local machine." msgstr "ã“ã®ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ã‹ã‚‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:22 msgid "You need to export some environment variables in your shell before you call the modules." msgstr "モジュールを呼ã³å‡ºã™å‰ã«ã€ã‚·ã‚§ãƒ«ã§ç’°å¢ƒå¤‰æ•°ã®ä¸€éƒ¨ã‚’エクスãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:32 msgid "Module parameters" msgstr "モジュールパラメーター" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:34 msgid "All the vcenter_rest modules accept the following arguments:" msgstr "ã™ã¹ã¦ã® vcenter_rest モジュールã¯ã€ä»¥ä¸‹ã®å¼•æ•°ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:36 msgid "``vcenter_host``" msgstr "``vcenter_host``" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:37 msgid "``vcenter_username``" msgstr "``vcenter_username``" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:38 msgid "``vcenter_password``" msgstr "``vcenter_password``" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:42 msgid "Ignore SSL certificate error" msgstr "SSL 証明書エラーを無視ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:44 msgid "It's common to run a test environment without a proper SSL certificate configuration." msgstr "é©åˆ‡ãª SSL 証明書設定ãªã—ã§ãƒ†ã‚¹ãƒˆç’°å¢ƒã‚’実行ã™ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/authentication.rst:46 msgid "To ignore the SSL error, you can use the ``vcenter_validate_certs: no`` argument or ``export VMWARE_VALIDATE_CERTS=no`` to set the environment variable." msgstr "SSL エラーを無視ã™ã‚‹ã«ã¯ã€``vcenter_validate_certs: no`` 引数ã¾ãŸã¯ ``export VMWARE_VALIDATE_CERTS=no`` を使用ã—ã¦ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:5 msgid "How to collect information about your environment" msgstr "環境ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:14 msgid "This section shows you how to utilize Ansible to collect information about your environment. This information is useful for the other tutorials." msgstr "本セクションã§ã¯ã€Ansible を使用ã—ã¦ãŠä½¿ã„ã®ç’°å¢ƒã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚ã“ã®æƒ…å ±ã¯ã€ä»–ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:18 #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:17 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:17 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:17 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:17 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:17 #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:16 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:16 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:16 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:16 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:16 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:16 msgid "Scenario requirements" msgstr "シナリオã®è¦ä»¶" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:20 msgid "In this scenario we've got a vCenter with an ESXi host." msgstr "ã“ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€ESXi ホストをæ­è¼‰ã™ã‚‹ vCenter ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:22 msgid "Our environment is pre-initialized with the following elements:" msgstr "ãŠä½¿ã„ã®ç’°å¢ƒã¯ã€ä»¥ä¸‹ã®è¦ç´ ã§äº‹å‰ã«åˆæœŸåŒ–ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:24 msgid "A datacenter called ``my_dc``" msgstr "``my_dc`` ã¨ã„ã†åå‰ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:25 msgid "A cluster called ``my_cluster``" msgstr "``my_cluster`` ã¨ã„ã†åå‰ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:26 msgid "An ESXi host called ``esxi1`` is in the cluster" msgstr "``esxi1`` ã¨ã„ã†åå‰ã® ESXi ホストãŒã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼å†…ã«ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:27 msgid "Two datastores on the ESXi: ``rw_datastore`` and ``ro_datastore``" msgstr "ESXi 上㮠2 ã¤ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢: ``rw_datastore`` ãŠã‚ˆã³ ``ro_datastore``" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:28 msgid "A dvswitch based guest network" msgstr "dvswitch ベースã®ã‚²ã‚¹ãƒˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:30 msgid "Finally, we use the environment variables to authenticate ourselves as explained in :ref:`vmware_rest_authentication`." msgstr "最後ã«ã€ã€Œ:ref:`vmware_rest_authentication`ã€ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¦èªè¨¼ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:33 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:22 msgid "How to collect information" msgstr "情報ã®åŽé›†æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:35 msgid "In these examples, we use the ``vcenter_*_info`` module to collect information about the associated resources." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_*_info`` モジュールを使用ã—ã¦ã€é–¢é€£ä»˜ã‘られãŸãƒªã‚½ãƒ¼ã‚¹ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:37 msgid "All these modules return a ``value`` key. Depending on the context, this ``value`` key will be either a list or a dictionary." msgstr "ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã™ã¹ã¦ ``value`` キーを返ã—ã¾ã™ã€‚コンテキストã«å¿œã˜ã¦ã€ã“ã® ``value`` キーã¯ãƒªã‚¹ãƒˆã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:40 msgid "Datacenter" msgstr "データセンター" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:42 msgid "Here we use the ``vcenter_datacenter_info`` module to list all the datacenters:" msgstr "ã“ã“ã§ã¯ã€``vcenter_datacenter_info`` モジュールを使用ã—ã¦ã€ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã‚’一覧表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:47 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:61 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:70 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:85 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:97 #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:106 #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:34 #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:24 #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:37 #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:50 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:34 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:46 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:66 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:76 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:88 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:100 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:112 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:124 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:136 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:148 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:34 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:48 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:65 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:79 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:91 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:103 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:115 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:127 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:32 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:43 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:37 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:49 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:61 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:75 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:87 msgid "Result" msgstr "çµæžœ" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:49 msgid "As expected, the ``value`` key of the output is a list." msgstr "想定ã©ãŠã‚Šã«ã€å‡ºåŠ›ã® ``value`` キーã¯ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:54 msgid "Cluster" msgstr "クラスター" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:56 msgid "Here we do the same with ``vcenter_cluster_info``:" msgstr "ã“ã“ã§ã¯ã€``vcenter_cluster_info`` ã§ã‚‚åŒã˜ã“ã¨ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:65 msgid "And we can also fetch the details about a specific cluster, with the ``cluster`` parameter:" msgstr "ã¾ãŸã€``cluster`` パラメーターを使用ã—ã¦ã€ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã®è©³ç´°ã‚’å–å¾—ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:72 msgid "And the ``value`` key of the output is this time a dictionary." msgstr "ã¾ãŸã€å‡ºåŠ›ã® ``value`` キーã¯ã€ä»Šå›žãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:78 msgid "Datastore" msgstr "データストア" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:80 msgid "Here we use ``vcenter_datastore_info`` to get a list of all the datastores:" msgstr "ã“ã“ã§ã¯ã€``vcenter_datastore_info`` を使用ã—ã¦ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã®ä¸€è¦§ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:90 msgid "Folder" msgstr "フォルダー" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:92 msgid "And here again, you use the ``vcenter_folder_info`` module to retrieve a list of all the folders." msgstr "ã¾ãŸã€ã“ã“ã§ã¯ ``vcenter_folder_info`` モジュールを使用ã—ã¦ã™ã¹ã¦ã®ãƒ•ォルダーã®ä¸€è¦§ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/collect_information.rst:101 msgid "Most of the time, you will just want one type of folder. In this case we can use filters to reduce the amount to collect. Most of the ``_info`` modules come with similar filters." msgstr "多ãã®å ´åˆã¯ã€1 種類ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå¿…è¦ã§ã™ã€‚ã“ã®å ´åˆã¯ã€ãƒ•ィルターを使用ã—ã¦åŽé›†ã™ã‚‹é‡ã‚’減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã® ``_info`` モジュールã«ã¯åŒæ§˜ã®ãƒ•ィルターãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:5 msgid "How to create a Virtual Machine" msgstr "仮想マシンã®ä½œæˆæ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:14 msgid "This section shows you how to use Ansible to create a virtual machine." msgstr "本セクションã§ã¯ã€Ansible を使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:19 msgid "You've already followed :ref:`vmware_rest_collect_info` and you've got the following variables defined:" msgstr "ã™ã§ã« :ref:`vmware_rest_collect_info` ã«å¾“ã„ã€ä»¥ä¸‹ã®å¤‰æ•°ãŒå®šç¾©æ¸ˆã¿ã§ã‚る。" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:21 #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:24 msgid "``my_cluster_info``" msgstr "``my_cluster_info``" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:22 msgid "``my_datastore``" msgstr "``my_datastore``" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:23 msgid "``my_virtual_machine_folder``" msgstr "``my_virtual_machine_folder``" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:27 msgid "How to create a virtual machine" msgstr "仮想マシンã®ä½œæˆæ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:29 msgid "In this example, we will use the ``vcenter_vm`` module to create a new guest." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_vm`` モジュールを使用ã—ã¦æ–°è¦ã‚²ã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/create_vm.rst:39 msgid "``vcenter_vm`` accepts more parameters, however you may prefer to start with a simple VM and use the ``vcenter_vm_hardware`` modules to tune it up afterwards. It's easier this way to identify a potential problematical step." msgstr "``vcenter_vm`` ã¯ã€ã‚ˆã‚Šå¤šãã®ãƒ‘ラメーターをå—ã‘入れるã“ã¨ãŒã§ãã¾ã™ãŒã€å˜ç´”ãªä»®æƒ³ãƒžã‚·ãƒ³ã§é–‹å§‹ã—ã€å¾Œã§ ``vcenter_vm_hardware`` モジュールを使用ã—ã¦èª¿æ•´ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å•題ã®ã‚るステップを特定ã™ã‚‹ã®ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:5 msgid "How to install the vmware_rest collection" msgstr "vmware_rest コレクションをインストールã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:14 msgid "The collection depends on:" msgstr "コレクションã¯ã€ä»¥ä¸‹ã®æ¡ä»¶ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:16 msgid "Ansible >=2.9.10 or greater" msgstr "2.9.10 以é™ã® Ansible" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:17 msgid "Python 3.6 or greater" msgstr "Python 3.6 以é™" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:20 msgid "aiohttp" msgstr "aiohttp" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:22 msgid "aiohttp_ is the only dependency of the collection. You can install it with ``pip`` if you use a virtualenv to run Ansible." msgstr "aiohttp_ ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å”¯ä¸€ã®ä¾å­˜é–¢ä¿‚ã§ã™ã€‚virtualenv を使用ã—㦠Ansible を実行ã™ã‚‹å ´åˆã¯ ``pip`` ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:28 msgid "Or using an RPM." msgstr "ã¾ãŸã¯ RPM を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/installation.rst:39 msgid "The best option to install the collection is to use the ``ansible-galaxy`` command:" msgstr "コレクションをインストールã™ã‚‹å ´åˆã¯ã€``ansible-galaxy`` コマンドを使用ã™ã‚‹ã®ãŒæœ€é©ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:5 msgid "How to run a virtual machine" msgstr "仮想マシンã®å®Ÿè¡Œæ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:14 msgid "This section covers the power management of your virtual machine." msgstr "本セクションã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºç®¡ç†ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:17 msgid "Power information" msgstr "é›»æºæƒ…å ±" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:19 msgid "Use ``vcenter_vm_power_info`` to know the power state of the VM." msgstr "``vcenter_vm_power_info`` を使用ã—ã¦ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºçŠ¶æ…‹ã‚’ç¢ºèªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:30 msgid "How to start a virtual machine" msgstr "仮想マシンã®èµ·å‹•方法" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:32 msgid "Use the ``vcenter_vm_power`` module to start your VM:" msgstr "``vcenter_vm_power`` モジュールを使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:42 msgid "How to wait until my virtual machine is ready" msgstr "ä»®æƒ³ãƒžã‚·ãƒ³ã®æº–å‚™ãŒã§ãã‚‹ã¾ã§å¾…機ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst:44 msgid "If your virtual machine runs VMware Tools, you can build a loop around the ``center_vm_tools_info`` module:" msgstr "仮想マシン㌠VMware Tool を実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€``center_vm_tools_info`` モジュールを中心ã«ãƒ«ãƒ¼ãƒ—を構築ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:5 msgid "How to modify a virtual machine" msgstr "仮想マシンã®å¤‰æ›´æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:14 msgid "This section shows you how to use Ansible to modify an existing virtual machine." msgstr "本セクションã§ã¯ã€Ansible を使用ã—ã¦æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’変更ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:19 msgid "You've already followed :ref:`vmware_rest_create_vm` and created a VM." msgstr "ã™ã§ã« :ref:`vmware_rest_create_vm` ã«å¾“ã„ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã—ã¦ã„る。" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:22 msgid "How to add a CDROM drive to a virtual machine" msgstr "CDROM ドライブを仮想マシンã«è¿½åŠ ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:24 msgid "In this example, we use the ``vcenter_vm_hardware_*`` modules to add a new CDROM to an existing VM." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_vm_hardware_*`` モジュールを使用ã—ã¦ã€æ–°ã—ã„ CDROM を既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:27 msgid "Add a new SATA adapter" msgstr "æ–°ã—ã„ SATA アダプターã®è¿½åŠ " #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:29 msgid "First we create a new SATA adapter. We specify the ``pci_slot_number``. This way if we run the task again it won't do anything if there is already an adapter there." msgstr "最åˆã«æ–°ã—ã„ SATA アダプターを作æˆã—ã¾ã™ã€‚``pci_slot_number`` を指定ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¿ã‚¹ã‚¯ã‚’å†åº¦å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€ã‚¢ãƒ€ãƒ—ターãŒã™ã§ã«å­˜åœ¨ã—ã¦ã„ã¦ã‚‚何も実行ã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:39 msgid "Add a CDROM drive" msgstr "CDROM ドライブã®è¿½åŠ " #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:41 msgid "Now we can create the CDROM drive:" msgstr "ã“れ㧠CDROM ドライブを作æˆã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:54 msgid "How to attach a VM to a network" msgstr "仮想マシンをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«å‰²ã‚Šå½“ã¦ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:57 msgid "Attach a new NIC" msgstr "æ–°è¦ NIC ã®å‰²ã‚Šå½“ã¦" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:59 msgid "Here we attach the VM to the network (through the portgroup). We specify a ``pci_slot_number`` for the same reason." msgstr "ã“ã“ã§ã¯ã€(portgroup ã‹ã‚‰) 仮想マシンをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã—ã¾ã™ã€‚åŒæ§˜ã« ``pci_slot_number`` を指定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:61 msgid "The second task adjusts the NIC configuration." msgstr "2 ã¤ç›®ã®ã‚¿ã‚¹ã‚¯ã¯ã€NIC 設定を調整ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:71 msgid "Adjust the configuration of the NIC" msgstr "NIC ã®è¨­å®šã®èª¿æ•´" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:81 msgid "Increase the memory of the VM" msgstr "仮想マシンã®ãƒ¡ãƒ¢ãƒªãƒ¼ã®å¢—加" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:83 msgid "We can also adjust the amount of memory that we dedicate to our VM." msgstr "ã¾ãŸã€ä»®æƒ³ãƒžã‚·ãƒ³ã«å‰²ã‚Šå½“ã¦ã‚‹ãƒ¡ãƒ¢ãƒªãƒ¼å®¹é‡ã‚’調整ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:93 msgid "Upgrade the hardware version of the VM" msgstr "仮想マシンã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップグレードã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:95 msgid "Here we use the ``vcenter_vm_hardware`` module to upgrade the version of the hardware:" msgstr "ã“ã“ã§ã¯ã€``vcenter_vm_hardware`` モジュールを使用ã—ã¦ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップグレードã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:105 msgid "Adjust the number of CPUs of the VM" msgstr "仮想マシン㮠CPU 数を調整ã™ã‚‹" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:107 msgid "You can use ``vcenter_vm_hardware_cpu`` for that:" msgstr "ãã®ãŸã‚ã«ã¯ã€``vcenter_vm_hardware_cpu`` を使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:117 msgid "Remove a SATA controller" msgstr "SATA コントローラーã®å‰Šé™¤" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:119 msgid "In this example, we remove the SATA controller of the PCI slot 34." msgstr "ã“ã®ä¾‹ã§ã¯ã€PCI スロット 34 ã® SATA コントローラーを削除ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:129 msgid "Attach a floppy drive" msgstr "ãƒ•ãƒ­ãƒƒãƒ”ãƒ¼ãƒ‰ãƒ©ã‚¤ãƒ–ã®æŽ¥ç¶š" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:131 msgid "Here we attach a floppy drive to a VM." msgstr "ã“ã“ã§ã¯ã€ãƒ•ロッピードライブを仮想マシンã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:141 msgid "Attach a new disk" msgstr "æ–°è¦ãƒ‡ã‚£ã‚¹ã‚¯ã®å‰²ã‚Šå½“ã¦" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst:143 msgid "Here we attach a tiny disk to the VM. The ``capacity`` is in bytes." msgstr "ã“ã“ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã«å°è¦æ¨¡ãªãƒ‡ã‚£ã‚¹ã‚¯ã‚’割り当ã¦ã¾ã™ã€‚``capacity`` ã¯ãƒã‚¤ãƒˆå˜ä½ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:5 msgid "Retrieve information from a specific VM" msgstr "特定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‹ã‚‰ã®æƒ…å ±ã®å–å¾—" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:14 msgid "This section shows you how to use Ansible to retrieve information about a specific virtual machine." msgstr "本セクションã§ã¯ã€Ansible を使用ã—ã¦ç‰¹å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:19 msgid "You've already followed :ref:`vmware_rest_create_vm` and you've got create a new VM called ``test_vm1``." msgstr "ã™ã§ã« :ref:`vmware_rest_create_vm` ã«å¾“ã„ã€``test_vm1`` ã¨ã„ã†åå‰ã®æ–°ã—ã„仮想マシンを作æˆã—ã¦ã„る。" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:22 msgid "How to collect virtual machine information" msgstr "仮想マシン情報をåŽé›†ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:25 msgid "List the VM" msgstr "仮想マシンã®ä¸€è¦§è¡¨ç¤º" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:27 msgid "In this example, we use the ``vcenter_vm_info`` module to collect information about our new VM." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_vm_info`` モジュールを使用ã—ã¦ã€æ–°ã—ã„仮想マシンã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:29 msgid "In this example, we start by asking for a list of VMs. We use a filter to limit the results to just the VM called ``test_vm1``. So we are in a list context, with one single entry in the ``value`` key." msgstr "ã“ã®ä¾‹ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ä¸€è¦§ã‚’求ã‚ã‚‹ã“ã¨ã‹ã‚‰é–‹å§‹ã—ã¾ã™ã€‚çµæžœã¯ã€``test_vm1`` ã¨å‘¼ã°ã‚Œã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã«åˆ¶é™ã—ã¾ã™ã€‚ãã®ãŸã‚ã€``value`` キーã«ã¯ 1 ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:36 msgid "As expected, we get a list. And thanks to our filter, we just get one entry." msgstr "予想通りã€ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚ãã—ã¦ã€ãƒ•ィルターã®ãŠã‹ã’ã§ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ 1 ã ã‘ã¤å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:41 msgid "Collect the details about a specific VM" msgstr "特定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹è©³ç´°ã®åŽé›†" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:43 msgid "For the next steps, we pass the ID of the VM through the ``vm`` parameter. This allow us to collect more details about this specific VM." msgstr "次ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€``vm`` パラメーターを使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã® ID を渡ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã“ã®ç‰¹å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹è©³ç´°ã‚’åŽé›†ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:50 msgid "The result is a structure with all the details about our VM. You will note this is actually the same information that we get when we created the VM." msgstr "çµæžœã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹è©³ç´°ãŒã™ã¹ã¦è¨˜è¼‰ã•れã¦ã„る構造ã§ã™ã€‚ã“れã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆæ™‚ã«å¾—られる情報ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:56 msgid "Get the hardware version of a specific VM" msgstr "特定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å–å¾—" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:58 msgid "We can also use all the ``vcenter_vm_*_info`` modules to retrieve a smaller amount of information. Here we use ``vcenter_vm_hardware_info`` to know the hardware version of the VM." msgstr "ã™ã¹ã¦ã® ``vcenter_vm_*_info`` モジュールを使用ã—ã¦ã€ã‚ˆã‚Šè©³ç´°ãªæƒ…報をå–å¾—ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã“ã§ã¯ã€``vcenter_vm_hardware_info`` を使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’把æ¡ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:70 msgid "List the SCSI adapter(s) of a specific VM" msgstr "特定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã® SCSI アダプターを一覧表示ã™ã‚‹" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:72 msgid "Here for instance, we list the SCSI adapter(s) of the VM:" msgstr "ãŸã¨ãˆã°ã€ä»®æƒ³ãƒžã‚·ãƒ³ã® SCSI アダプターを一覧表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:76 msgid "You can do the same for the SATA controllers with ``vcenter_vm_adapter_sata_info``." msgstr "``vcenter_vm_adapter_sata_info`` を使用ã—㦠SATA コントローラーã§åŒã˜æ“作を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:84 msgid "List the CDROM drive(s) of a specific VM" msgstr "特定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã® CDROM ドライブを一覧表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:86 msgid "And we list its CDROM drives." msgstr "ãã® CDROM ドライブを一覧表示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:96 msgid "Get the memory information of the VM" msgstr "仮想マシンã®ãƒ¡ãƒ¢ãƒªãƒ¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:98 msgid "Here we collect the memory information of the VM:" msgstr "ã“ã“ã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ¡ãƒ¢ãƒªãƒ¼æƒ…報をåŽé›†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:108 msgid "Get the storage policy of the VM" msgstr "仮想マシンã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒãƒªã‚·ãƒ¼ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:110 msgid "We use the ``vcenter_vm_storage_policy_info`` module for that:" msgstr "ãã®ãŸã‚ã« ``vcenter_vm_storage_policy_info`` モジュールを使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:120 msgid "Get the disk information of the VM" msgstr "仮想マシンã®ãƒ‡ã‚£ã‚¹ã‚¯æƒ…å ±ã®å–å¾—" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_info.rst:122 msgid "We use the ``vcenter_vm_hardware_disk_info`` for this operation:" msgstr "ã“ã®æ“作ã«ã¯ ``vcenter_vm_hardware_disk_info`` を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:5 msgid "How to configure the VMware tools of a running virtual machine" msgstr "実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã® VMware ツールを設定ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:14 msgid "This section show you how to collection information from a running virtual machine." msgstr "本セクションã§ã¯ã€å®Ÿè¡Œä¸­ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‹ã‚‰æƒ…報をå–å¾—ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:19 #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:19 msgid "You've already followed :ref:`vmware_rest_run_a_vm` and your virtual machine runs VMware Tools." msgstr "ã™ã§ã« :ref:`vmware_rest_run_a_vm` ã«å¾“ã„ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒ VMware ツールを実行ã—ã¦ã„る。" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:22 msgid "How to change the upgrade policy" msgstr "アップグレードãƒãƒªã‚·ãƒ¼ã‚’変更ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:25 msgid "Change the upgrade policy to MANUAL" msgstr "アップグレードãƒãƒªã‚·ãƒ¼ã‚’ MANUAL ã«å¤‰æ›´" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:27 msgid "You can adjust the VMware Tools upgrade policy with the ``vcenter_vm_tools`` module." msgstr "``vcenter_vm_tools`` モジュール㧠VMware Tools アップグレードãƒãƒªã‚·ãƒ¼ã‚’調整ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst:38 msgid "Change the upgrade policy to UPGRADE_AT_POWER_CYCLE" msgstr "アップグレードãƒãƒªã‚·ãƒ¼ã‚’ UPGRADE_AT_POWER_CYCLE ã«å¤‰æ›´" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:5 msgid "How to get information from a running virtual machine" msgstr "実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‹ã‚‰æƒ…報をå–å¾—ã™ã‚‹æ–¹æ³•" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:14 msgid "This section shows you how to collection information from a running virtual machine." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€å®Ÿè¡Œä¸­ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‹ã‚‰æƒ…報をå–å¾—ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:24 msgid "In this example, we use the ``vcenter_vm_guest_*`` module to collect information about the associated resources." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_vm_guest_*`` モジュールを使用ã—ã¦ã€é–¢é€£ä»˜ã‘られãŸãƒªã‚½ãƒ¼ã‚¹ã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:27 msgid "Filesystem" msgstr "ファイルシステム" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:29 msgid "Here we use ``vcenter_vm_guest_localfilesystem_info`` to retrieve the details about the filesystem of the guest. In this example we also use a ``retries`` loop. The VMware Tools may take a bit of time to start and by doing so, we give the VM a bit more time." msgstr "ã“ã®ä¾‹ã§ã¯ã€``vcenter_vm_guest_localfilesystem_info`` を使用ã—ã¦ã‚²ã‚¹ãƒˆã®ãƒ•ァイルシステムã®è©³ç´°ã‚’å–å¾—ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``retries`` ループも使用ã—ã¾ã™ã€‚VMware Tool ã®é–‹å§‹ã«ã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ãŒã€ã“ã®ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã§ä»®æƒ³ãƒžã‚·ãƒ³ã«å°‘ã—æ™‚é–“ã«ä½™è£•ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:42 msgid "Guest identity" msgstr "ゲスト ID" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:44 msgid "You can use ``vcenter_vm_guest_identity_info`` to get details like the OS family or the hostname of the running VM." msgstr "``vcenter_vm_guest_identity_info`` を使用ã™ã‚‹ã¨ã€OS ファミリーや実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ›ã‚¹ãƒˆåãªã©ã®è©³ç´°ã‚’å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:54 msgid "Network" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:56 msgid "``vcenter_vm_guest_networking_info`` will return the OS network configuration." msgstr "``vcenter_vm_guest_networking_info`` ã¯ã€OS ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:66 msgid "Network interfaces" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:68 msgid "``vcenter_vm_guest_networking_interfaces_info`` will return a list of NIC configurations." msgstr "``vcenter_vm_guest_networking_interfaces_info`` ã¯ã€NC 設定ã®ä¸€è¦§ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:70 msgid "See also :ref:`vmware_rest_attach_a_network`." msgstr "「:ref:`vmware_rest_attach_a_network`ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:80 msgid "Network routes" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ«ãƒ¼ãƒˆ" #: ../../rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst:82 msgid "Use ``vcenter_vm_guest_networking_routes_info`` to explore the route table of your virtual machine." msgstr "仮想マシンã®ãƒ«ãƒ¼ãƒˆãƒ†ãƒ¼ãƒ–ルを確èªã™ã‚‹ã«ã¯ã€``vcenter_vm_guest_networking_routes_info`` を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:5 msgid "Ansible VMware FAQ" msgstr "Ansible VMware FAQ" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:8 msgid "vmware_guest" msgstr "vmware_guest" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:11 msgid "Can I deploy a virtual machine on a standalone ESXi server ?" msgstr "スタンドアロン㮠ESXi サーãƒãƒ¼ã«ä»®æƒ³ãƒžã‚·ãƒ³ã‚’デプロイã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:13 msgid "Yes. ``vmware_guest`` can deploy a virtual machine with required settings on a standalone ESXi server. However, you must have a paid license to deploy virtual machines this way. If you are using the free version, the API is read-only." msgstr "ã¯ã„。``vmware_guest`` ã¯ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³ ESXi サーãƒãƒ¼ã«å¿…è¦ãªè¨­å®šã§ä»®æƒ³ãƒžã‚·ãƒ³ã‚’デプロイã§ãã¾ã™ã€‚ãŸã ã—ã€ã“ã®æ–¹æ³•ã§ä»®æƒ³ãƒžã‚·ãƒ³ã‚’デプロイã™ã‚‹ã«ã¯æœ‰æ–™ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚フリーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€API ã¯èª­ã¿å–り専用ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:17 msgid "Is ``/vm`` required for ``vmware_guest`` module ?" msgstr "``vmware_guest`` モジュールã«ã¯ ``/vm`` ãŒå¿…è¦ã§ã™ã‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:19 msgid "Prior to Ansible version 2.5, ``folder`` was an optional parameter with a default value of ``/vm``." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``folder`` ã¯ã€ä»»æ„ã®ãƒ‘ラメーターã§ã€ãƒ‡ãƒ•ォルト値㯠``/vm`` ã§ã—ãŸã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:21 msgid "The folder parameter was used to discover information about virtual machines in the given infrastructure." msgstr "folder パラメーターã¯ã€æŒ‡å®šã—ãŸã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹æƒ…報を検出ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/faq.rst:23 msgid "Starting with Ansible version 2.5, ``folder`` is still an optional parameter with no default value. This parameter will be now used to identify a user's virtual machine, if multiple virtual machines or virtual machine templates are found with same name. VMware does not restrict the system administrator from creating virtual machines with same name." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 以é™ã€``folder`` ã¯ã€ãƒ‡ãƒ•ォルト値ã®ãªã„ä»»æ„ã®ãƒ‘ラメーターã§ã™ã€‚ã“ã®ãƒ‘ラメーターã¯ã€è¤‡æ•°ã®ä»®æƒ³ãƒžã‚·ãƒ³ã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ†ãƒ³ãƒ—レートãŒåŒã˜åå‰ã§è¦‹ã¤ã‹ã£ãŸå ´åˆã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’識別ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚VMware ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†è€…ãŒåŒã˜åå‰ã‚’æŒã¤ä»®æƒ³ãƒžã‚·ãƒ³ã‚’作æˆã™ã‚‹ã“ã¨ã‚’制é™ã—ã¦ã„ã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:5 msgid "Deploy a virtual machine from a template" msgstr "テンプレートã‹ã‚‰ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ‡ãƒ—ロイメント" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:13 msgid "This guide will show you how to utilize Ansible to clone a virtual machine from already existing VMware template or existing VMware guest." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—ã¦ã€æ—¢å­˜ã® VMware テンプレートã¾ãŸã¯æ—¢å­˜ã® VMware ゲストã‹ã‚‰ä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:20 msgid "Ansible 2.5 or later must be installed" msgstr "Ansible 2.5 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:22 msgid "The Python module ``Pyvmomi`` must be installed on the Ansible (or Target host if not executing against localhost)" msgstr "Python モジュール ``Pyvmomi`` ã‚’ Ansible (ローカルホストã«å¯¾ã—ã¦å®Ÿè¡Œã—ãªã„å ´åˆã«ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆ) ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã„る。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:24 msgid "Installing the latest ``Pyvmomi`` via ``pip`` is recommended [as the OS provided packages are usually out of date and incompatible]" msgstr "``pip`` を介ã—ã¦æœ€æ–°ã® ``Pyvmomi`` をインストールã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ (OS æä¾›ãƒ‘ッケージã¯é€šå¸¸å¤ããªã‚Šã€äº’æ›æ€§ãŒãªã„ãŸã‚)。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:26 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:26 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:26 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:26 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:25 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:25 msgid "Hardware" msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:28 #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:30 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:30 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:30 msgid "vCenter Server with at least one ESXi server" msgstr "ESXi サーãƒãƒ¼ãŒ 1 å°ä»¥ä¸Šæ­è¼‰ã•れã¦ã„ã‚‹ vCenter Server" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:32 msgid "Ansible (or the target server) must have network access to the either vCenter server or the ESXi server you will be deploying to" msgstr "Ansible (ã¾ãŸã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒãƒ¼) ã«ã¯ã€ãƒ‡ãƒ—ロイã™ã‚‹ vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã¸ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:34 msgid "Username and Password" msgstr "ユーザーåãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:36 msgid "Administrator user with following privileges" msgstr "ä»¥ä¸‹ã®æ¨©é™ã‚’æŒã¤ç®¡ç†ãƒ¦ãƒ¼ã‚¶ãƒ¼" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:38 msgid "``Datastore.AllocateSpace`` on the destination datastore or datastore folder" msgstr "宛先データストアã¾ãŸã¯ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``Datastore.AllocateSpace``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:39 msgid "``Network.Assign`` on the network to which the virtual machine will be assigned" msgstr "仮想マシンãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® ``Network.Assign``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:40 msgid "``Resource.AssignVMToPool`` on the destination host, cluster, or resource pool" msgstr "移行先ホストã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã€ã¾ãŸã¯ãƒªã‚½ãƒ¼ã‚¹ãƒ—ール㮠``Resource.AssignVMToPool``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:41 msgid "``VirtualMachine.Config.AddNewDisk`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.AddNewDisk``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:42 msgid "``VirtualMachine.Config.AddRemoveDevice`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.AddRemoveDevice``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:43 msgid "``VirtualMachine.Interact.PowerOn`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Interact.PowerOn``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:44 msgid "``VirtualMachine.Inventory.CreateFromExisting`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Inventory.CreateFromExisting``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:45 msgid "``VirtualMachine.Provisioning.Clone`` on the virtual machine you are cloning" msgstr "クローンを作æˆã—ã¦ã„る仮想マシン㮠``VirtualMachine.Provisioning.Clone``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:46 msgid "``VirtualMachine.Provisioning.Customize`` on the virtual machine or virtual machine folder if you are customizing the guest operating system" msgstr "ゲストオペレーティングシステムをカスタマイズã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Provisioning.Customize``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:47 msgid "``VirtualMachine.Provisioning.DeployTemplate`` on the template you are using" msgstr "使用ã—ã¦ã„るテンプレート㮠``VirtualMachine.Provisioning.DeployTemplate``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:48 msgid "``VirtualMachine.Provisioning.ReadCustSpecs`` on the root vCenter Server if you are customizing the guest operating system" msgstr "ゲストオペレーティングシステムをカスタマイズã™ã‚‹å ´åˆã¯ã€ãƒ«ãƒ¼ãƒˆ vCenter サーãƒãƒ¼ã® ``VirtualMachine.Provisioning.ReadCustSpecs``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:50 msgid "Depending on your requirements, you could also need one or more of the following privileges:" msgstr "è¦ä»¶ã«ã‚ˆã£ã¦ã¯ã€ä»¥ä¸‹ã®æ¨©é™ãŒ 1 ã¤ä»¥ä¸Šå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:52 msgid "``VirtualMachine.Config.CPUCount`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.CPUCount``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:53 msgid "``VirtualMachine.Config.Memory`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.Memory``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:54 msgid "``VirtualMachine.Config.DiskExtend`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.DiskExtend``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:55 msgid "``VirtualMachine.Config.Annotation`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.Annotation``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:56 msgid "``VirtualMachine.Config.AdvancedConfig`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.AdvancedConfig``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:57 msgid "``VirtualMachine.Config.EditDevice`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.EditDevice``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:58 msgid "``VirtualMachine.Config.Resource`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.Resource``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:59 msgid "``VirtualMachine.Config.Settings`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.Settings``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:60 msgid "``VirtualMachine.Config.UpgradeVirtualHardware`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Config.UpgradeVirtualHardware``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:61 msgid "``VirtualMachine.Interact.SetCDMedia`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Interact.SetCDMedia``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:62 msgid "``VirtualMachine.Interact.SetFloppyMedia`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Interact.SetFloppyMedia``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:63 msgid "``VirtualMachine.Interact.DeviceConnection`` on the datacenter or virtual machine folder" msgstr "データセンターã¾ãŸã¯ä»®æƒ³ãƒžã‚·ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã® ``VirtualMachine.Interact.DeviceConnection``" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:68 msgid "All variable names and VMware object names are case sensitive" msgstr "変数åãŠã‚ˆã³ VMware オブジェクトåã¯ã™ã¹ã¦å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:69 msgid "VMware allows creation of virtual machine and templates with same name across datacenters and within datacenters" msgstr "VMware ã§ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼é–“ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼å†…ã§ã€åŒã˜åå‰ã®ä»®æƒ³ãƒžã‚·ãƒ³ãŠã‚ˆã³ãƒ†ãƒ³ãƒ—レートを作æˆã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:70 msgid "You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours" msgstr "``validate_certs`` オプションを使用ã™ã‚‹ã«ã¯ã€Python 2.7.9 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€SSL 検証ã®å‹•作を変更ã§ãã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:75 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:38 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:38 msgid "Hosts in the ESXi cluster must have access to the datastore that the template resides on." msgstr "ESXi クラスター内ã®ãƒ›ã‚¹ãƒˆãŒã€ãƒ†ãƒ³ãƒ—レートãŒå­˜åœ¨ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:76 msgid "Multiple templates with the same name will cause module failures." msgstr "åŒã˜åå‰ã®ãƒ†ãƒ³ãƒ—レートãŒè¤‡æ•°å­˜åœ¨ã™ã‚‹å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:77 msgid "In order to utilize Guest Customization, VMware Tools must be installed on the template. For Linux, the ``open-vm-tools`` package is recommended, and it requires that ``Perl`` be installed." msgstr "ゲストã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã‚’使用ã™ã‚‹ã«ã¯ã€VMware Tool をテンプレートã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Linux ã®å ´åˆã¯ ``open-vm-tools`` ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãŒæŽ¨å¥¨ã•れã€``Perl`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:83 msgid "In this use case / example, we will be selecting a virtual machine template and cloning it into a specific folder in our Datacenter / Cluster. The following Ansible playbook showcases the basic parameters that are needed for this." msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã¾ãŸã¯ã‚µãƒ³ãƒ—ルã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã‚’é¸æŠžã—ã€ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼/クラスターã®ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¾ã™ã€‚以下㮠Ansible Playbook ã§ã¯ã€ã“れã«å¿…è¦ãªåŸºæœ¬çš„ãªãƒ‘ラメーターã«ã¤ã„ã¦å–り上ã’ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:107 msgid "Since Ansible utilizes the VMware API to perform actions, in this use case we will be connecting directly to the API from our localhost. This means that our playbooks will not be running from the vCenter or ESXi Server. We do not necessarily need to collect facts about our localhost, so the ``gather_facts`` parameter will be disabled. You can run these modules against another server that would then connect to the API if your localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server." msgstr "Ansible 㯠VMware API を使用ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ãŸã‚ã€ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‹ã‚‰ç›´æŽ¥ API ã«æŽ¥ç¶šã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€Playbook 㯠vCenter ã¾ãŸã¯ ESXi サーãƒãƒ¼ã‹ã‚‰å®Ÿè¡Œã—ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚å¿…ãšã—もローカルホストã«é–¢ã™ã‚‹ãƒ•ァクトをåŽé›†ã™ã‚‹å¿…è¦ãŒãªã„ãŸã‚ã€``gather_facts`` パラメーターã¯ç„¡åйã«ãªã‚Šã¾ã™ã€‚ローカルホスト㌠vCenter ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€API ã«æŽ¥ç¶šã™ã‚‹åˆ¥ã®ã‚µãƒ¼ãƒãƒ¼ã«å¯¾ã—ã¦ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®å ´åˆã¯ã€å¿…è¦ãª Python モジュールをã€ãã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒãƒ¼ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:109 msgid "To begin, there are a few bits of information we will need. First and foremost is the hostname of the ESXi server or vCenter server. After this, you will need the username and password for this server. For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook." msgstr "ã¾ãšã€ã„ãã¤ã‹ã®æƒ…å ±ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã¾ãšç¬¬ä¸€ã«ã€ESXi サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆåã¾ãŸã¯ vCenter サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆåã§ã™ã€‚ãã®å¾Œã€ã“ã®ã‚µãƒ¼ãƒãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã“ã§ã¯ã€ã“れらを直接入力ã—ã¾ã™ãŒã€ã‚ˆã‚Šé«˜åº¦ãª Playbook ã§ã¯ã“ã®æƒ…報を抽象化ã—ã€:ref:`ansible-vault` ã¾ãŸã¯ `Ansible Tower èªè¨¼æƒ…å ± `_ を使用ã—ã¦ã€ã‚ˆã‚Šã‚»ã‚­ãƒ¥ã‚¢ãªæ–¹æ³•ã§ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã«ã€Ansible サーãƒãƒ¼ã‹ã‚‰æ¤œè¨¼å¯èƒ½ãªé©åˆ‡ãª CA 証明書ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€``validate_certs`` パラメーターを使用ã—ã¦ã“れらã®è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã®ãŸã‚ã«ã¯ã€Playbook ã§ ``validate_certs=False`` を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:111 msgid "Now you need to supply the information about the virtual machine which will be created. Give your virtual machine a name, one that conforms to all VMware requirements for naming conventions. Next, select the display name of the template from which you want to clone new virtual machine. This must match what's displayed in VMware Web UI exactly. Then you can specify a folder to place this new virtual machine in. This path can either be a relative path or a full path to the folder including the Datacenter. You may need to specify a state for the virtual machine. This simply tells the module which action you want to take, in this case you will be ensure that the virtual machine exists and is powered on. An optional parameter is ``wait_for_ip_address``, this will tell Ansible to wait for the virtual machine to fully boot up and VMware Tools is running before completing this task." msgstr "ã“ã“ã§ã€ä½œæˆã•れる仮想マシンã«é–¢ã™ã‚‹æƒ…報を入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚仮想マシンã®åå‰ã¯ã€VMware ãŒè¦æ±‚ã™ã‚‹å‘½åè¦å‰‡ã«æº–æ‹ ã—ãŸã‚‚ã®ã«ã—ã¦ãã ã•ã„。次ã«ã€æ–°ã—ã„仮想マシンã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートã®è¡¨ç¤ºåã‚’é¸æŠžã—ã¾ã™ã€‚ã“れã¯ã€VMware Web UI ã«è¡¨ç¤ºã•れる内容ã«ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚次ã«ã€ã“ã®æ–°ã—ã„仮想マシンをé…ç½®ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’指定ã—ã¾ã™ã€‚ã“ã®ãƒ‘スã¯ã€ç›¸å¯¾ãƒ‘スã§ã‚‚ã€ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã‚’å«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®å®Œå…¨ãƒ‘スã§ã‚‚æ§‹ã„ã¾ã›ã‚“。仮想マシンã®çŠ¶æ…‹ã‚’æŒ‡å®šã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã¯å˜ã«ã€å®Ÿè¡Œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æŒ‡ç¤ºã™ã‚‹ã ã‘ã§ã™ã€‚ã“ã®å ´åˆã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã¨ã€é›»æºãŒã‚ªãƒ³ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ä»»æ„ã®ãƒ‘ラメーター㯠``wait_for_ip_address`` ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã“ã®ã‚¿ã‚¹ã‚¯ã‚’完了ã™ã‚‹å‰ã«ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒå®Œå…¨ã«èµ·å‹•ã—ã€VMware Tools ãŒå®Ÿè¡Œã™ã‚‹ã®ã‚’å¾…ã¤ã‚ˆã† Ansible ã«æŒ‡ç¤ºã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:117 msgid "You will see a bit of JSON output after this playbook completes. This output shows various parameters that are returned from the module and from vCenter about the newly created VM." msgstr "ã“ã® Playbook ãŒå®Œäº†ã™ã‚‹ã¨ã€JSON ã®å‡ºåŠ›ãŒå°‘ã—表示ã•れã¾ã™ã€‚ã“ã®å‡ºåŠ›ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰è¿”ã•れãŸã•ã¾ã–ã¾ãªãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚„ã€æ–°ãŸã«ä½œæˆã•れãŸä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹ vCenter ã‹ã‚‰è¿”ã•れãŸã•ã¾ã–ã¾ãªãƒ‘ラメーターãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:208 msgid "State is changed to ``True`` which notifies that the virtual machine is built using given template. The module will not complete until the clone task in VMware is finished. This can take some time depending on your environment." msgstr "状態㌠``True`` ã«å¤‰æ›´ã•れã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒæŒ‡å®šã®ãƒ†ãƒ³ãƒ—レートを使用ã—ã¦æ§‹ç¯‰ã•れるã“ã¨ã‚’通知ã—ã¾ã™ã€‚モジュールã¯ã€VMware ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚¿ã‚¹ã‚¯ãŒçµ‚了ã™ã‚‹ã¾ã§å®Œäº†ã—ã¾ã›ã‚“。ã“れã¯ç’°å¢ƒã«å¿œã˜ã¦å¤šå°‘時間ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:210 msgid "If you utilize the ``wait_for_ip_address`` parameter, then it will also increase the clone time as it will wait until virtual machine boots into the OS and an IP Address has been assigned to the given NIC." msgstr "``wait_for_ip_address`` パラメーターを使用ã™ã‚‹ã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒ OS ã§èµ·å‹•ã—ã€æŒ‡å®šã® NIC ã« IP アドレスãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã¾ã§å¾…機ã™ã‚‹ãŸã‚ã€ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã™ã‚‹æ™‚é–“ã‚‚é•·ããªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:220 msgid "Check if the datacenter you provided is available" msgstr "指定ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ãŒåˆ©ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:221 msgid "Check if the template specified exists and you have permissions to access the datastore" msgstr "指定ã—ãŸãƒ†ãƒ³ãƒ—レートãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã€ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ‘ーミッションãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst:222 msgid "Ensure the full folder path you specified already exists. It will not create folders automatically for you" msgstr "指定ã—ãŸå®Œå…¨ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‘スãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ディレクトリーã¯è‡ªå‹•çš„ã«ä½œæˆã•れã¾ã›ã‚“" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:5 msgid "Find folder path of an existing VMware virtual machine" msgstr "既存㮠VMware 仮想マシンã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‘ã‚¹ã®æ¤œç´¢" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:13 msgid "This guide will show you how to utilize Ansible to find folder path of an existing VMware virtual machine." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—ã¦æ—¢å­˜ã® VMware 仮想マシンã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‘スを検索ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:20 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:20 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:20 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:20 msgid "Ansible 2.5 or later must be installed." msgstr "Ansible 2.5 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:22 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:22 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:22 msgid "The Python module ``Pyvmomi`` must be installed on the Ansible control node (or Target host if not executing against localhost)." msgstr "Ansible コントロールノード (ã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¦ã„ãªã„å ´åˆã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆ) ã«ã€Python モジュール ``Pyvmomi`` をインストールã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:24 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:24 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:24 msgid "We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible)." msgstr "pip ã§æœ€æ–°ç‰ˆã‚’インストール (``pip install Pyvmomi``) ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ (OSã®ãƒ‘ッケージã¯ãŸã„ã¦ã„å¤ãã¦äº’æ›æ€§ãŒãªã„ãŸã‚)。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:28 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:28 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:28 msgid "At least one standalone ESXi server or" msgstr "å°‘ãªãã¨ã‚‚スタンドアロン㮠ESXi サーãƒãƒ¼ 1 å°ã€ã¾ãŸã¯" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:34 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:34 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:34 msgid "Ansible (or the target server) must have network access to the either vCenter server or the ESXi server" msgstr "Ansible (ã¾ãŸã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒãƒ¼) ã«ã¯ã€vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã¸ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:36 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:36 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:36 msgid "Username and Password for vCenter or ESXi server" msgstr "vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:41 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:43 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:43 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:38 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:40 msgid "All variable names and VMware object names are case sensitive." msgstr "変数åãŠã‚ˆã³ VMware オブジェクトåã¯ã™ã¹ã¦å¤§æ–‡å­—ã¨å°æ–‡å­—を区別ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:42 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:44 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:44 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:39 msgid "You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours." msgstr "``validate_certs`` オプションを使用ã™ã‚‹ã«ã¯ã€Python 2.7.9 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€SSL 検証ã®å‹•作を変更ã§ãã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:48 msgid "With the following Ansible playbook you can find the folder path of an existing virtual machine using name." msgstr "次㮠Ansible Playbook ã§ã¯ã€åå‰ã‚’使用ã—ã¦æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‘スを検索ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:75 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:84 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:90 msgid "Since Ansible utilizes the VMware API to perform actions, in this use case it will be connecting directly to the API from localhost." msgstr "Ansible 㯠VMware API を使用ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ãŸã‚ã€ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‹ã‚‰ API ã«ç›´æŽ¥æŽ¥ç¶šã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:77 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:86 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:92 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:95 msgid "This means that playbooks will not be running from the vCenter or ESXi Server." msgstr "ã¤ã¾ã‚Šã€Playbook 㯠vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã‹ã‚‰å®Ÿè¡Œã•れãªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:79 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:88 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:94 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:97 msgid "Note that this play disables the ``gather_facts`` parameter, since you don't want to collect facts about localhost." msgstr "ローカルホストã«é–¢ã™ã‚‹ãƒ•ァクトをåŽé›†ã—ãªã„ãŸã‚ã€ã“ã®ãƒ—レイ㯠``gather_facts`` パラメーターを無効ã«ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:81 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:90 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:96 msgid "You can run these modules against another server that would then connect to the API if localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server. We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible)." msgstr "ローカルホスト㌠vCenter サーãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€API ã«æŽ¥ç¶šã™ã‚‹åˆ¥ã®ã‚µãƒ¼ãƒãƒ¼ã«å¯¾ã—ã¦ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã§ãã¾ã™ã€‚ãã®å ´åˆã¯ã€å¿…è¦ãª Python モジュールをターゲットサーãƒãƒ¼ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚pip ã§æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚インストールã™ã‚‹ã«ã¯ ``pip install Pyvmomi`` を実行ã—ã¦ãã ã•ã„ (通常㯠OS パッケージãŒå¤ãã€äº’æ›æ€§ãŒãªã„ãŸã‚)。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:83 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:92 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:98 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:99 msgid "Before you begin, make sure you have:" msgstr "é–‹å§‹ã™ã‚‹å‰ã«ã€ä»¥ä¸‹ã®ç‚¹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:85 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:94 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:100 msgid "Hostname of the ESXi server or vCenter server" msgstr "ESXi サーãƒãƒ¼ã¾ãŸã¯ vCenter サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆå" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:86 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:95 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:101 msgid "Username and password for the ESXi or vCenter server" msgstr "ESXi サーãƒãƒ¼ã¾ãŸã¯ vCenter サーãƒãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:87 msgid "Name of the existing Virtual Machine for which you want to collect folder path" msgstr "ディレクトリーパスをåŽé›†ã™ã‚‹æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:89 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:98 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:104 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:105 msgid "For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_." msgstr "ã“ã“ã§ã¯ã€ã“れらを直接入力ã—ã¾ã™ãŒã€ã‚ˆã‚Šé«˜åº¦ãª Playbook ã§ã¯ :ref:`ansible-vault` ã¾ãŸã¯ `Ansible Tower èªè¨¼æƒ…å ± `_ を使用ã—ã¦ã€ã‚ˆã‚Šã‚»ã‚­ãƒ¥ã‚¢ãªæ–¹æ³•ã§ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:91 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:100 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:106 msgid "If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook." msgstr "vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ãŒ Ansible サーãƒãƒ¼ã‹ã‚‰æ¤œè¨¼ã§ãã‚‹é©åˆ‡ãª CA 証明書ã§è¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€``validate_certs`` パラメーターを使用ã—ã¦ã“れらã®è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€Playbook ã§ ``validate_certs=False`` を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:93 msgid "The name of existing virtual machine will be used as input for ``vmware_guest_find`` module via ``name`` parameter." msgstr "既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰ã¯ã€``vmware_guest_find`` パラメーターã«ã‚ˆã‚Š ``name`` モジュールã®å…¥åŠ›ã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:99 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:115 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:116 msgid "Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see" msgstr "ã”使用ã®ç’°å¢ƒãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã«ã‚ˆã£ã¦ã¯ã€ã“ã® Playbook ã®å®Ÿè¡Œã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚実行ãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:116 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:122 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:169 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:152 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:117 msgid "If your playbook fails:" msgstr "Playbook ãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:118 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:124 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:171 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:154 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:119 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:195 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:107 msgid "Check if the values provided for username and password are correct." msgstr "ユーザーåãŠã‚ˆã³ãƒ‘スワードã®å€¤ãŒæ­£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:119 #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:125 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:172 msgid "Check if the datacenter you provided is available." msgstr "指定ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ãŒåˆ©ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:120 msgid "Check if the virtual machine specified exists and you have respective permissions to access VMware object." msgstr "指定ã—ãŸä»®æƒ³ãƒžã‚·ãƒ³ãŒå­˜åœ¨ã—ã€VMware オブジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ‘ーミッションãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst:121 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:174 msgid "Ensure the full folder path you specified already exists." msgstr "指定ã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®å®Œå…¨ãƒ‘スãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:5 msgid "Remove an existing VMware virtual machine" msgstr "既存㮠VMware 仮想マシンã®å‰Šé™¤" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:13 msgid "This guide will show you how to utilize Ansible to remove an existing VMware virtual machine." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—ã¦æ—¢å­˜ã® VMware 仮想マシンを削除ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:45 msgid "``vmware_guest`` module tries to mimic VMware Web UI and workflow, so the virtual machine must be in powered off state in order to remove it from the VMware inventory." msgstr "``vmware_guest`` モジュールã¯ã€VMware Web UI ãŠã‚ˆã³ãƒ¯ãƒ¼ã‚¯ãƒ•ローを模倣ã™ã‚‹ãŸã‚ã€VMware インベントリーã‹ã‚‰ä»®æƒ³ãƒžã‚·ãƒ³ã‚’削除ã™ã‚‹ã«ã¯ã€é›»æºãŒã‚ªãƒ•ã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:49 msgid "The removal VMware virtual machine using ``vmware_guest`` module is destructive operation and can not be reverted, so it is strongly recommended to take the backup of virtual machine and related files (vmx and vmdk files) before proceeding." msgstr "``vmware_guest`` モジュールを使用ã—㦠VMware 仮想マシンを削除ã™ã‚‹ã“ã¨ã¯ç ´å£Šçš„ãªæ“作ã§ã‚りã€å…ƒã«æˆ»ã™ã“ã¨ãŒã§ããªã„ãŸã‚ã€å…ˆã«é€²ã‚€å‰ã«ä»®æƒ³ãƒžã‚·ãƒ³ã¨é–¢é€£ãƒ•ァイル (vmx ファイルãŠã‚ˆã³ vmdk ファイル) ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を作æˆã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:54 msgid "In this use case / example, user will be removing a virtual machine using name. The following Ansible playbook showcases the basic parameters that are needed for this." msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã¾ãŸã¯ã‚µãƒ³ãƒ—ルã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåå‰ã‚’使用ã—ã¦ä»®æƒ³ãƒžã‚·ãƒ³ã‚’削除ã—ã¾ã™ã€‚以下㮠Ansible Playbook ã§ã¯ã€ã“ã®ã‚ˆã†ã«å‰Šé™¤ã™ã‚‹ã®ã«å¿…è¦ãªåŸºæœ¬ãƒ‘ラメーターã«ã¤ã„ã¦å–り上ã’ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:96 msgid "Name of the existing Virtual Machine you want to remove" msgstr "削除ã™ã‚‹æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:102 msgid "The name of existing virtual machine will be used as input for ``vmware_guest`` module via ``name`` parameter." msgstr "既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰ã¯ã€``vmware_guest`` パラメーターã«ã‚ˆã‚Š ``name`` モジュールã®å…¥åŠ›ã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:108 msgid "You will not see any JSON output after this playbook completes as compared to other operations performed using ``vmware_guest`` module." msgstr "``vmware_guest`` モジュールを使用ã—ã¦å®Ÿè¡Œã—ãŸä»–ã®æ“作ã¨ç•°ãªã‚Šã€ã“ã® Playbook ãŒå®Œäº†ã—ã¦ã‚‚ã€JSON 出力ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:116 msgid "State is changed to ``True`` which notifies that the virtual machine is removed from the VMware inventory. This can take some time depending upon your environment and network connectivity." msgstr "状態㌠``True`` ã«å¤‰æ›´ã«ãªã‚Šã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒ VMware インベントリーã‹ã‚‰å‰Šé™¤ã•れãŸã“ã¨ãŒé€šçŸ¥ã•れã¾ã™ã€‚ã“ã®å‡¦ç†ã«ã¯ã€ã”使用ã®ç’°å¢ƒã‚„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã«ã‚ˆã£ã¦ã¯æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:126 #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:173 msgid "Check if the virtual machine specified exists and you have permissions to access the datastore." msgstr "指定ã—ãŸä»®æƒ³ãƒžã‚·ãƒ³ãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã€ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒ‘ーミッションãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst:127 msgid "Ensure the full folder path you specified already exists. It will not create folders automatically for you." msgstr "指定ã—ãŸå®Œå…¨ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ‘スãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ディレクトリーã¯è‡ªå‹•çš„ã«ä½œæˆã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:5 msgid "Rename an existing virtual machine" msgstr "既存ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰å¤‰æ›´" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:13 msgid "This guide will show you how to utilize Ansible to rename an existing virtual machine." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—ã¦æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰ã‚’変更ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:50 msgid "With the following Ansible playbook you can rename an existing virtual machine by changing the UUID." msgstr "以下㮠Ansible Playbook を使用ã—ã¦ã€UUID を変更ã—ã¦æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®åå‰ã‚’変更ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:102 msgid "The UUID of the existing Virtual Machine you want to rename" msgstr "åå‰ã‚’変更ã™ã‚‹æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã® UUID" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:108 msgid "Now you need to supply the information about the existing virtual machine which will be renamed. For renaming virtual machine, ``vmware_guest`` module uses VMware UUID, which is unique across vCenter environment. This value is autogenerated and can not be changed. You will use ``vmware_guest_facts`` module to find virtual machine and get information about VMware UUID of the virtual machine." msgstr "ã“ã“ã§ã€åå‰ã‚’変更ã™ã‚‹æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®æƒ…報を入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚仮想マシンã®åå‰ã‚’変更ã™ã‚‹ãŸã‚ã«ã€``vmware_guest`` モジュール㯠vCenter 環境全体ã§ä¸€æ„ã¨ãªã‚‹ VMware UUID を使用ã—ã¾ã™ã€‚ã“ã®å€¤ã¯è‡ªå‹•生æˆã•れã€å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。``vmware_guest_facts`` モジュールを使用ã—ã¦ã€ä»®æƒ³ãƒžã‚·ãƒ³ã® VMware UUID ã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:110 msgid "This value will be used input for ``vmware_guest`` module. Specify new name to virtual machine which conforms to all VMware requirements for naming conventions as ``name`` parameter. Also, provide ``uuid`` as the value of VMware UUID." msgstr "ã“ã®å€¤ã¯ã€``vmware_guest`` モジュールã®å…¥åŠ›ã‚’ä½¿ç”¨ã—ã¾ã™ã€‚``name`` パラメーターã¨ã—ã¦å‘½åè¦å‰‡ã®ã™ã¹ã¦ã® VMware è¦ä»¶ã«æº–æ‹ ã™ã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã«æ–°ã—ã„åå‰ã‚’指定ã—ã¾ã™ã€‚ã¾ãŸã€``uuid`` ã‚’ VMware UUID ã®å€¤ã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst:163 msgid "confirming that you've renamed the virtual machine." msgstr "仮想マシンã®åå‰ãŒå¤‰æ›´ã•れãŸã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:5 msgid "Using VMware HTTP API using Ansible" msgstr "Ansible を使用ã—㟠VMware HTTP API ã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:13 msgid "This guide will show you how to utilize Ansible to use VMware HTTP APIs to automate various tasks." msgstr "本書ã§ã¯ã€Ansible ã§ VMware HTTP API を使用ã—ã¦ã•ã¾ã–ã¾ãªã‚¿ã‚¹ã‚¯ã‚’自動化ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:22 #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:22 msgid "We recommend installing the latest version with pip: ``pip install Pyvmomi`` on the Ansible control node (as the OS packages are usually out of date and incompatible) if you are planning to use any existing VMware modules." msgstr "既存㮠VMware モジュールを使用ã™ã‚‹äºˆå®šãŒã‚ã‚‹å ´åˆã¯ã€Ansible コントロールノード㧠pip を使用ã—ã¦æœ€æ–°ç‰ˆã‚’インストール (``pip install Pyvmomi``) ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ (OS ã®ãƒ‘ッケージã¯ãŸã„ã¦ã„å¤ãã¦äº’æ›æ€§ãŒãªã„ãŸã‚)。" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:27 msgid "vCenter Server 6.5 and above with at least one ESXi server" msgstr "å°‘ãªãã¨ã‚‚ 1 å°ã® ESXi サーãƒãƒ¼ã‚’å‚™ãˆãŸ vCenter Server 6.5 以é™" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:31 msgid "Ansible (or the target server) must have network access to either the vCenter server or the ESXi server" msgstr "Ansible (ã¾ãŸã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒãƒ¼) ã«ã¯ã€vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã¸ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:33 msgid "Username and Password for vCenter" msgstr "vCenter ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:40 msgid "VMware HTTP APIs are introduced in vSphere 6.5 and above so minimum level required in 6.5." msgstr "VMware HTTP API ã¯ã€vSphere 6.5 以é™ã§å°Žå…¥ã•れã€6.5 以上ã®ãƒ¬ãƒ™ãƒ«ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:41 msgid "There are very limited number of APIs exposed, so you may need to rely on XMLRPC based VMware modules." msgstr "公開ã•れる API ã®æ•°ã¯éžå¸¸ã«é™ã‚‰ã‚Œã¦ã„ã‚‹ãŸã‚ã€XMLRPC ベース㮠VMware モジュールãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:47 msgid "With the following Ansible playbook you can find the VMware ESXi host system(s) and can perform various tasks depending on the list of host systems. This is a generic example to show how Ansible can be utilized to consume VMware HTTP APIs." msgstr "以下㮠Ansible Playbook を使用ã™ã‚‹ã¨ã€VMware ESXi ホストシステムを見ã¤ã‘ã€ãƒ›ã‚¹ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ä¸€è¦§ã«å¿œã˜ã¦ã•ã¾ã–ã¾ãªã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã¾ã™ã€‚ã“れã¯ã€Ansible を使用ã—㦠VMware HTTP API ã‚’ã©ã®ã‚ˆã†ã«æ¶ˆè²»ã™ã‚‹ã‹ã‚’示ã™ä¸€èˆ¬çš„ãªä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:93 msgid "Since Ansible utilizes the VMware HTTP API using the ``uri`` module to perform actions, in this use case it will be connecting directly to the VMware HTTP API from localhost." msgstr "Ansible 㯠``uri`` モジュールを使用ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ãŸã‚ã« VMware HTTP API を利用ã—ã¦ã€ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã‹ã‚‰ VMware HTTP API ã«ç›´æŽ¥æŽ¥ç¶šã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:101 msgid "Hostname of the vCenter server" msgstr "vCenter サーãƒãƒ¼ã®ãƒ›ã‚¹ãƒˆå" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:102 msgid "Username and password for the vCenter server" msgstr "vCenter サーãƒãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:103 msgid "Version of vCenter is at least 6.5" msgstr "vCenter ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ 6.5 以上" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:107 msgid "If your vCenter server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook." msgstr "vCenter サーãƒãƒ¼ãŒ Ansible サーãƒãƒ¼ã‹ã‚‰æ¤œè¨¼ã§ãã‚‹é©åˆ‡ãª CA 証明書ã§è¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€``validate_certs`` パラメーターを使用ã—ã¦ã“れらã®è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€Playbook ã§ ``validate_certs=False`` を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:109 msgid "As you can see, we are using the ``uri`` module in first task to login into the vCenter server and storing result in the ``login`` variable using register. In the second task, using cookies from the first task we are gathering information about the ESXi host system." msgstr "ã”覧ã®ã¨ãŠã‚Šã€æœ€åˆã®ã‚¿ã‚¹ã‚¯ã§ ``uri`` モジュールを使用ã—㦠vCenter サーãƒãƒ¼ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã€ç™»éŒ²ã‚’使用ã—㦠``login`` 変数ã«çµæžœã‚’ä¿å­˜ã—ã¦ã„ã¾ã™ã€‚次ã®ã‚¿ã‚¹ã‚¯ã§ã¯ã€æœ€åˆã®ã‚¿ã‚¹ã‚¯ã® Cookie を使用ã—㦠ESXi ホストシステムã«é–¢ã™ã‚‹æƒ…報をåŽé›†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:111 msgid "Using this information, we are changing the ESXi host system's advance configuration." msgstr "ã“ã®æƒ…報を使用ã—ã¦ã€ESXi ホストシステムã®äº‹å‰è¨­å®šã‚’変更ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:155 msgid "Check if you are using vCenter 6.5 and onwards to use this HTTP APIs." msgstr "ã“ã® HTTP API を使用ã™ã‚‹ãŸã‚ã«ã€vCenter 6.5 以é™ã‚’使用ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:159 msgid "`VMware vSphere and Ansible From Zero to Useful by @arielsanchezmor `_" msgstr "`VMware vSphere and Ansible From Zero to Useful by @arielsanchezmor `_" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:160 msgid "vBrownBag session video related to VMware HTTP APIs" msgstr "VMware HTTP API ã«é–¢é€£ã™ã‚‹ vBrownBag セッションビデオ" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:161 msgid "`Sample Playbooks for using VMware HTTP APIs `_" msgstr "`Sample Playbooks for using VMware HTTP APIs `_" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst:162 msgid "GitHub repo for examples of Ansible playbook to manage VMware using HTTP APIs" msgstr "HTTP API を使用ã—㦠VMware を管ç†ã™ã‚‹ Ansible Playbook 例㮠GitHub リãƒã‚¸ãƒˆãƒªãƒ¼" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:5 msgid "Using vmware_tools connection plugin" msgstr "vmware_tools connection プラグインã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:13 msgid "This guide will show you how to utilize VMware Connection plugin to communicate and automate various tasks on VMware guest machines." msgstr "本ガイドã§ã¯ã€VMware Connection プラグインを使用ã—ã¦ã€VMware ゲストマシンã§ã•ã¾ã–ã¾ãªã‚¿ã‚¹ã‚¯ã¨é€šä¿¡ã—ã€è‡ªå‹•化ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:20 msgid "Ansible 2.9 or later must be installed." msgstr "Ansible 2.9 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:27 msgid "vCenter Server 6.5 and above" msgstr "vCenter Server 6.5 以é™" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:31 msgid "Ansible (or the target server) must have network access to either the vCenter server" msgstr "Ansible (ã¾ãŸã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒãƒ¼) ã«ã¯ã€ã„ãšã‚Œã‹ã® vCenter サーãƒãƒ¼ã¸ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:33 msgid "Username and Password for vCenter with required permissions" msgstr "å¿…è¦ãªãƒ‘ーミッションをæŒã¤ vCenter ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワード" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:35 msgid "VMware tools or openvm-tools with required dependencies like Perl installed on the given virtual machine" msgstr "指定ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ Perl ãªã©ã®å¿…è¦ãªä¾å­˜é–¢ä¿‚ã®ã‚ã‚‹ VMware ツールã¾ãŸã¯ openvm-tools" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:41 msgid "You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviors." msgstr "``validate_certs`` オプションを使用ã™ã‚‹ã«ã¯ã€Python 2.7.9 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€SSL 検証ã®å‹•作を変更ã§ãã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:47 msgid "User can run playbooks against VMware virtual machines using ``vmware_tools`` connection plugin." msgstr "ユーザーã¯ã€``vmware_tools`` connection プラグインを使用ã—㦠VMware 仮想マシンã«å¯¾ã—㦠Playbook を実行ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:49 msgid "In order work with ``vmware_tools`` connection plugin, you will need to specify hostvars for the given virtual machine." msgstr "``vmware_tools`` connection プラグインã¨é€£æºã™ã‚‹ã«ã¯ã€æŒ‡å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã® hostvar を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:51 msgid "For example, if you want to run a playbook on a virtual machine called ``centos_7`` located at ``/Asia-Datacenter1/prod/centos_7`` in the given vCenter, you will need to specify hostvars as follows:" msgstr "ãŸã¨ãˆã°ã€æŒ‡å®šã® vCenter ã® ``/Asia-Datacenter1/prod/centos_7`` ã«ã‚ã‚‹ ``centos_7`` ã¨ã„ã†åå‰ã®ä»®æƒ³ãƒžã‚·ãƒ³ã§ Playbook を実行ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« hostvars を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:73 msgid "Here, we are providing vCenter details and credentials for the given virtual machine to run the playbook on. If your virtual machine path is ``Asia-Datacenter1/prod/centos_7``, you specify ``ansible_vmware_guest_path`` as ``Asia-Datacenter1/vm/prod/centos_7``. Please take a note that ``/vm`` is added in the virtual machine path, since this is a logical folder structure in the VMware inventory." msgstr "ã“ã“ã§ã¯ã€Playbook を実行ã™ã‚‹ãŸã‚ã«ã€æŒ‡å®šã—ãŸä»®æƒ³ãƒžã‚·ãƒ³ã® vCenter ã®è©³ç´°ã¨èªè¨¼æƒ…報をæä¾›ã—ã¦ã„ã¾ã™ã€‚仮想マシンã®ãƒ‘ス㌠``Asia-Datacenter1/prod/centos_7`` ã®å ´åˆã¯ã€``ansible_vmware_guest_path`` ã‚’ ``Asia-Datacenter1/vm/prod/centos_7`` ã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚仮想マシンã®ãƒ‘ス㫠``/vm`` ãŒè¿½åŠ ã•れã¦ã„ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã¯ã€VMware インベントリー内ãŒè«–ç†çš„ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ã§ã‚ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:76 msgid "Let us now run following playbook," msgstr "以下㮠Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:88 msgid "Since Ansible utilizes the ``vmware-tools`` or ``openvm-tools`` service capabilities running in the virtual machine to perform actions, in this use case it will be connecting directly to the guest machine." msgstr "Ansible ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã§å®Ÿè¡Œã—ã¦ã„ã‚‹ ``vmware-tools`` ã¾ãŸã¯ ``openvm-tools`` ã®ã‚µãƒ¼ãƒ“ス機能を使用ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ãŸã‚ã€ã“ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§ã¯ã‚²ã‚¹ãƒˆãƒžã‚·ãƒ³ã«ç›´æŽ¥æŽ¥ç¶šã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:91 msgid "For now, you will be entering credentials in plain text, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_." msgstr "ã“ã“ã§ã¯ã€ãƒ—レーンテキストã§èªè¨¼æƒ…報を入力ã—ã¾ã™ãŒã€ã‚ˆã‚Šé«˜åº¦ãª Playbook ã§ã¯ã€:ref:`ansible-vault` ã¾ãŸã¯ `Ansible Tower èªè¨¼æƒ…å ± `_ を使用ã—ã¦ã‚ˆã‚Šã‚»ã‚­ãƒ¥ã‚¢ãªæ–¹æ³•ã§æŠ½è±¡åŒ–ãŠã‚ˆã³ä¿å­˜ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:97 msgid "Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see:" msgstr "ã”使用ã®ç’°å¢ƒãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã«ã‚ˆã£ã¦ã¯ã€ã“ã® Playbook ã®å®Ÿè¡Œã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚実行ãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst:120 msgid "Check if the path of virtual machine is correct. Please mind that ``/vm/`` needs to be provided while specifying virtual machine location." msgstr "仮想マシンã®ãƒ‘ã‚¹ãŒæ­£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚仮想マシンã®å ´æ‰€ã‚’指定ã™ã‚‹éš›ã«ã€``/vm/`` ã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:5 msgid "Ansible for VMware Concepts" msgstr "VMware å‘ã‘ Ansible ã®æ¦‚念" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:7 msgid "Some of these concepts are common to all uses of Ansible, including VMware automation; some are specific to VMware. You need to understand them to use Ansible for VMware automation. This introduction provides the background you need to follow the :ref:`scenarios` in this guide." msgstr "ã“ã‚Œã‚‰ã®æ¦‚念ã®ä¸­ã«ã¯ã€VMware ã®è‡ªå‹•化をå«ã‚€ Ansible ã®ã™ã¹ã¦ã®ç”¨é€”ã«å…±é€šã™ã‚‹ã‚‚ã®ã‚‚ã‚れã°ã€VMware ã«å›ºæœ‰ã®ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚VMware ã®è‡ªå‹•化㫠Ansible を使用ã™ã‚‹ã«ã¯ã€ã“ã‚Œã‚‰ã®æ¦‚念をç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ç« ã§ã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã® :ref:`シナリオ` ã«å¾“ã†ãŸã‚ã«å¿…è¦ãªèƒŒæ™¯ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:13 msgid "Control Node" msgstr "コントロールノード" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:15 msgid "Any machine with Ansible installed. You can run commands and playbooks, invoking ``/usr/bin/ansible`` or ``/usr/bin/ansible-playbook``, from any control node. You can use any computer that has Python installed on it as a control node - laptops, shared desktops, and servers can all run Ansible. However, you cannot use a Windows machine as a control node. You can have multiple control nodes." msgstr "Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るマシン。ã©ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ ã§ã‚‚``/usr/bin/ansible`` ã¾ãŸã¯ ``/usr/bin/ansible-playbook`` ã‚’èµ·å‹•ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ã‚„ Playbook を実行ã§ãã¾ã™ã€‚コントロールノードã¨ã—ã¦ä½¿ç”¨ã—ã€Python ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るコンピューターã§ã‚れã°ã€ãƒ©ãƒƒãƒ—トップã€å…±æœ‰ãƒ‡ã‚£ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚µãƒ¼ãƒãƒ¼ãªã©ã€ã©ã®ã‚³ãƒ³ãƒ”ューターã§ã‚‚ Ansible を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€Windows マシンをコントロールノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。コントロールノードã¯è¤‡æ•°ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:18 msgid "Delegation" msgstr "委譲" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:20 msgid "Delegation allows you to select the system that executes a given task. If you do not have ``pyVmomi`` installed on your control node, use the ``delegate_to`` keyword on VMware-specific tasks to execute them on any host where you have ``pyVmomi`` installed." msgstr "委譲を使用ã™ã‚‹ã¨ã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚’é¸æŠžã§ãã¾ã™ã€‚コントロールノード㫠``pyVmomi`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã¯ã€VMware 固有ã®ã‚¿ã‚¹ã‚¯ã§ ``delegate_to`` キーワードを使用ã—ã¦ã€``pyVmomi`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ä»»æ„ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:23 msgid "Modules" msgstr "モジュール" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:25 msgid "The units of code Ansible executes. Each module has a particular use, from creating virtual machines on vCenter to managing distributed virtual switches in the vCenter environment. You can invoke a single module with a task, or invoke several different modules in a playbook. For an idea of how many modules Ansible includes, take a look at the :ref:`list of cloud modules`, which includes VMware modules." msgstr "Ansible ãŒå®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®å˜ä½ã€‚å„モジュールã«ã¯ã€vCenter ã§ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆã‹ã‚‰ã€vCenter 環境ã«ãŠã‘る分散型仮想スイッãƒã®ç®¡ç†ã¾ã§ã€ç‰¹å®šã®ç”¨é€”ãŒã‚りã¾ã™ã€‚å˜ä¸€ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ã‹ã€Playbook ã§ã„ãã¤ã‹ã®ç•°ãªã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã—ã¾ã™ã€‚Ansible ã«å«ã¾ã‚Œã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ•°ã‚’ç†è§£ã™ã‚‹ã«ã¯ã€VMware モジュールをå«ã‚€ã€Œ:ref:`クラウドモジュールã®ãƒªã‚¹ãƒˆ`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:28 msgid "Playbooks" msgstr "Playbook" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:30 msgid "Ordered lists of tasks, saved so you can run those tasks in that order repeatedly. Playbooks can include variables as well as tasks. Playbooks are written in YAML and are easy to read, write, share and understand." msgstr "順番ã«ä¸¦ã¹ã‚‰ã‚ŒãŸã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã¯ä¿å­˜ã•れã¦ã„ã‚‹ãŸã‚ã€ãã®é †ç•ªã§ã‚¿ã‚¹ã‚¯ã‚’繰り返ã—実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã ã‘ã§ãªãã€å¤‰æ•°ã‚‚å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook 㯠YAML ã§è¨˜è¿°ã•れã¦ã„ã‚‹ãŸã‚ã€èª­ã¿ã‚„ã™ãã€æ›¸ãã‚„ã™ãã€å…±æœ‰ã—ã‚„ã™ãã€ç†è§£ã—ã‚„ã™ã„特徴ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:33 msgid "pyVmomi" msgstr "pyVmomi" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:35 msgid "Ansible VMware modules are written on top of `pyVmomi `_. ``pyVmomi`` is the official Python SDK for the VMware vSphere API that allows user to manage ESX, ESXi, and vCenter infrastructure." msgstr "Ansible VMware モジュールã¯ã€`pyVmomi `_ ã«è¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚``pyVmomi`` ã¯ã€VMware vSphere API ã®å…¬å¼ Python SDK ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ESXã€ESXiã€ãŠã‚ˆã³ vCenter インフラストラクãƒãƒ£ãƒ¼ã‚’管ç†ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:37 msgid "You need to install this Python SDK on host from where you want to invoke VMware automation. For example, if you are using control node then ``pyVmomi`` must be installed on control node." msgstr "VMware ã®è‡ªå‹•化を呼ã³å‡ºã™ãƒ›ã‚¹ãƒˆã«ã€ã“ã® Python SDK をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``pyVmomi`` をコントロールノードã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:39 msgid "If you are using any ``delegate_to`` host which is different from your control node then you need to install ``pyVmomi`` on that ``delegate_to`` node." msgstr "コントロールノードã¨ã¯ç•°ãªã‚‹ ``delegate_to`` ホストを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã® ``delegate_to`` ノード㫠``pyVmomi`` をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_concepts.rst:41 msgid "You can install pyVmomi using pip:" msgstr "pip を使用ã—㦠pyVmomi をインストールã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:5 msgid "Other useful VMware resources" msgstr "ä»–ã®ä¾¿åˆ©ãª VMware リソース" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:7 msgid "`VMware API and SDK Documentation `_" msgstr "`VMware API and SDK Documentation `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:8 msgid "`VCSIM test container image `_" msgstr "`VCSIM test container image `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:9 msgid "`Ansible VMware community wiki page `_" msgstr "`Ansible VMware community wiki page `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:10 msgid "`VMware's official Guest Operating system customization matrix `_" msgstr "`VMware's official Guest Operating system customization matrix `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst:11 msgid "`VMware Compatibility Guide `_" msgstr "`VMware Compatibility Guide `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_getting_started.rst:7 msgid "Getting Started with Ansible for VMware" msgstr "VMware å‘ã‘ Ansible ã®æ¦‚è¦" #: ../../rst/scenario_guides/vmware_scenarios/vmware_getting_started.rst:9 msgid "This will have a basic \"hello world\" scenario/walkthrough that gets the user introduced to the basics." msgstr "ã“ã“ã§ã¯ã€åŸºæœ¬å‹•作を説明ã™ã‚‹åŸºæœ¬çš„ãªã€Œhello worldã€ã‚·ãƒŠãƒªã‚ªãŠã‚ˆã³ã‚¦ã‚©ãƒ¼ã‚¯ã‚¹ãƒ«ãƒ¼ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:5 msgid "Introduction to Ansible for VMware" msgstr "VMware å‘ã‘ Ansible ã®æ¦‚è¦" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:13 msgid "Ansible provides various modules to manage VMware infrastructure, which includes datacenter, cluster, host system and virtual machine." msgstr "Ansible ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã€ãƒ›ã‚¹ãƒˆã‚·ã‚¹ãƒ†ãƒ ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚’å«ã‚€ VMware インフラストラクãƒãƒ£ãƒ¼ã‚’管ç†ã™ã‚‹ã•ã¾ã–ã¾ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:19 msgid "Ansible VMware modules are written on top of `pyVmomi `_. pyVmomi is the Python SDK for the VMware vSphere API that allows user to manage ESX, ESXi, and vCenter infrastructure. You can install pyVmomi using pip (you may need to use pip3, depending on your OS/distro):" msgstr "Ansible VMware モジュール㯠`pyVmomi `_ 上ã«è¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚pyVmomi ã¯ã€ESXã€ESXiã€ãŠã‚ˆã³ vCenter インフラストラクãƒãƒ£ãƒ¼ã®ç®¡ç†ã‚’å¯èƒ½ã«ã™ã‚‹ VMware vSphere API ã® Python SDK ã§ã™ã€‚pip を使用ã—ã¦ã€pyVmomi をインストールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (OS ã¾ãŸã¯ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã«å¾“ã£ã¦ pip3 を使用ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:27 msgid "Ansible VMware modules leveraging latest vSphere(6.0+) features are using `vSphere Automation Python SDK `_. The vSphere Automation Python SDK also has client libraries, documentation, and sample code for VMware Cloud on AWS Console APIs, NSX VMware Cloud on AWS integration APIs, VMware Cloud on AWS site recovery APIs, NSX-T APIs." msgstr "最新㮠vSphere (6.0 以é™) 機能を使用ã™ã‚‹ Ansible VMware モジュールã¯ã€`vSphere Automation Python SDK `_ を使用ã—ã¦ã„ã¾ã™ã€‚VSphere Automation Python SDK ã«ã¯ã€AWS Console API å‘ã‘ VMware Cloudã€AWS çµ±åˆ API å‘ã‘ NSX VMware Cloudã€AWS サイトリカãƒãƒªãƒ¼ API å‘ã‘ VMware Cloudã€NSX-T API ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ©ã‚¤ãƒ–ラリーã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€ã‚µãƒ³ãƒ—ルコードもã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:29 msgid "You can install vSphere Automation Python SDK using pip:" msgstr "VSphere Automation Python SDK ã¯ã€pip を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:36 msgid "Note:" msgstr "注記:" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:36 msgid "Installing vSphere Automation Python SDK also installs ``pyvmomi``. A separate installation of ``pyvmomi`` is not required." msgstr "vSphere Automation Python SDK をインストールã™ã‚‹ã¨ã€``pyvmomi`` もインストールã•れã¾ã™ã€‚``pyvmomi`` ã®å€‹åˆ¥ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:39 msgid "vmware_guest module" msgstr "vmware_guest モジュール" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:41 msgid "The :ref:`vmware_guest` module manages various operations related to virtual machines in the given ESXi or vCenter server." msgstr ":ref:`vmware_guest` モジュールã¯ã€æŒ‡å®šã® ESXi ã¾ãŸã¯ vCenter サーãƒãƒ¼ã§ä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢é€£ã™ã‚‹ã•ã¾ã–ã¾ãªæ“作を管ç†ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:46 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:80 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:203 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:115 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1173 msgid "`pyVmomi `_" msgstr "`pyVmomi `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:47 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:81 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:204 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:116 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1174 msgid "The GitHub Page of pyVmomi" msgstr "pyVmomi ã® GitHub ページ" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:48 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:82 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:205 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:117 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1175 msgid "`pyVmomi Issue Tracker `_" msgstr "`pyVmomi Issue Tracker `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:49 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:83 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:206 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:118 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1176 msgid "The issue tracker for the pyVmomi project" msgstr "pyVmomi プロジェクトã®å•題トラッカー" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:50 msgid "`govc `_" msgstr "`govc `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_intro.rst:51 msgid "govc is a vSphere CLI built on top of govmomi" msgstr "govc ã¯ã€govmomi ã«æ§‹ç¯‰ã•れ㟠vSphere CLI ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:5 msgid "Using VMware dynamic inventory plugin" msgstr "VMware 動的インベントリープラグインã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:11 msgid "VMware Dynamic Inventory Plugin" msgstr "VMware 動的インベントリープラグイン" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:14 msgid "The best way to interact with your hosts is to use the VMware dynamic inventory plugin, which dynamically queries VMware APIs and tells Ansible what nodes can be managed." msgstr "ホストã¨å¯¾è©±ã™ã‚‹æœ€é©ãªæ–¹æ³•ã¨ã—ã¦ã€VMware ã®å‹•的インベントリープラグインを使用ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€VMware API ã‚’å‹•çš„ã«ã‚¯ã‚¨ãƒªãƒ¼ã—ã€ã©ã®ãƒŽãƒ¼ãƒ‰ãŒç®¡ç†ã§ãã‚‹ã‹ã‚’ Ansible ã«é€šçŸ¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:20 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:21 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:21 msgid "To use the VMware dynamic inventory plugins, you must install `pyVmomi `_ on your control node (the host running Ansible)." msgstr "VMware 動的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ (Ansible を実行ã™ã‚‹ãƒ›ã‚¹ãƒˆ) ã« `pyVmomi `_ をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:23 msgid "To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK `_, which supports REST API features like tagging and content libraries, on your control node. You can install the ``vSphere Automation SDK`` following `these instructions `_." msgstr "動的インベントリーã«ä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚¿ã‚°é–¢é€£ã®æƒ…報をå«ã‚ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã‚¿ã‚°ä»˜ã‘やコンテンツライブラリーãªã©ã® REST API 機能をサãƒãƒ¼ãƒˆã™ã‚‹ `vSphere Automation SDK `__ ã‚‚å¿…è¦ã§ã™ã€‚`ã“ã¡ã‚‰ã®æ‰‹é † ` ã«å¾“ã£ã¦ ``vSphere Automation SDK`` をインストールã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:30 msgid "To use this VMware dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file:" msgstr "ã“ã® VMware 動的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€æœ€åˆã« ``ansible.cfg`` ファイルã«ä»¥ä¸‹ã‚’指定ã—ã¦æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:37 msgid "Then, create a file that ends in ``.vmware.yml`` or ``.vmware.yaml`` in your working directory." msgstr "次ã«ã€ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã€åå‰ã®æœ«å°¾ãŒ ``.vmware.yml`` ã¾ãŸã¯ ``.vmware.yaml`` ã§çµ‚ã‚るファイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:39 msgid "The ``vmware_vm_inventory`` script takes in the same authentication information as any VMware module." msgstr "``vmware_vm_inventory`` スクリプトã¯ã€VMware モジュールã¨åŒã˜èªè¨¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:54 msgid "Executing ``ansible-inventory --list -i .vmware.yml`` will create a list of VMware instances that are ready to be configured using Ansible." msgstr "``ansible-inventory --list -i .vmware.yml`` を実行ã™ã‚‹ã¨ã€Ansible を使用ã—ã¦è¨­å®šã§ãã‚‹ VMware インスタンスã®ä¸€è¦§ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:59 msgid "Since the inventory configuration file contains vCenter password in plain text, a security risk, you may want to encrypt your entire inventory configuration file." msgstr "インベントリー設定ファイルã«ã¯ãƒ—レーンテキスト㮠vCenter パスワードãŒå«ã¾ã‚Œã‚‹ãŸã‚ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚インベントリー設定ファイル全体を暗å·åŒ–ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:84 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:207 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:119 msgid "`vSphere Automation SDK GitHub Page `_" msgstr "`vSphere Automation SDK GitHub Page `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:85 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:208 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:120 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1178 msgid "The GitHub Page of vSphere Automation SDK for Python" msgstr "Python å‘ã‘ã® vSphere Automation SDK ã® GitHub ページ" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:86 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:209 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:121 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1179 msgid "`vSphere Automation SDK Issue Tracker `_" msgstr "`vSphere Automation SDK Issue Tracker `_" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory.rst:87 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:210 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:122 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1180 msgid "The issue tracker for vSphere Automation SDK for Python" msgstr "Python å‘ã‘ã® vSphere Automation SDK ã®å•題トラッカー" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:5 msgid "Using VMware dynamic inventory plugin - Filters" msgstr "VMware 動的インベントリープラグインã®ä½¿ç”¨ - フィルター" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:11 msgid "VMware dynamic inventory plugin - filtering VMware guests" msgstr "VMware 動的インベントリープラグイン - VMware ゲストã®ãƒ•ィルター設定" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:14 msgid "VMware inventory plugin allows you to filter VMware guests using the ``filters`` configuration parameter." msgstr "VMware インベントリープラグインを使用ã™ã‚‹ã¨ã€``filters`` 設定パラメーターを使用ã—㦠VMware ゲストã«ãƒ•ィルターを設定ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:16 msgid "This section shows how you configure ``filters`` for the given VMware guest in the inventory." msgstr "本セクションã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ç‰¹å®šã® VMware ゲスト㮠``filters`` を設定ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:24 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:24 msgid "To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK `_, which supports REST API features such as tagging and content libraries, on your control node. You can install the ``vSphere Automation SDK`` following `these instructions `_." msgstr "動的インベントリーã«ä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚¿ã‚°é–¢é€£ã®æƒ…報をå«ã‚ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã‚¿ã‚°ä»˜ã‘やコンテンツライブラリーãªã©ã® REST API 機能をサãƒãƒ¼ãƒˆã™ã‚‹ `vSphere Automation SDK `__ ã‚‚å¿…è¦ã§ã™ã€‚`ã“ã¡ã‚‰ã®æ‰‹é † ` ã«å¾“ã£ã¦ ``vSphere Automation SDK`` をインストールã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:31 msgid "Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible. Alternately, to install the latest ``community.vmware`` collection:" msgstr "Ansible 2.10 以é™ã§ã¯ã€Ansible ã‚’å«ã‚€ ``community.vmware`` コレクション㧠VMware 動的インベントリープラグインを利用ã§ãã¾ã™ã€‚最新㮠``community.vmware`` コレクションをインストールã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:38 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:38 msgid "To use this VMware dynamic inventory plugin:" msgstr "VMware 動的インベントリープラグインを使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:40 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:40 msgid "Enable it first by specifying the following in the ``ansible.cfg`` file:" msgstr "``ansible.cfg`` ファイルã§ä»¥ä¸‹ã‚’指定ã—ã¦ã€ã¾ãšæœ‰åŠ¹ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:47 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:47 msgid "Create a file that ends in ``vmware.yml`` or ``vmware.yaml`` in your working directory." msgstr "作業ディレクトリーã«ã€åå‰ã®æœ«å°¾ãŒ ``vmware.yml`` ã¾ãŸã¯ ``vmware.yaml`` ã§çµ‚ã‚るファイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:49 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:49 msgid "The ``vmware_vm_inventory`` inventory plugin takes in the same authentication information as any other VMware modules does." msgstr "``vmware_vm_inventory`` インベントリープラグインã¯ã€ä»–ã® VMware モジュールã¨åŒæ§˜ã«èªè¨¼æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:51 msgid "Let us assume we want to list all RHEL7 VMs with the power state as \"poweredOn\". A valid inventory file with filters for the given VMware guest looks as follows:" msgstr "é›»æºçŠ¶æ…‹ãŒã€ŒPoweredOnã€ã§ã‚ã‚‹ RHEL7 仮想マシンã®ä¸€è¦§ã‚’表示ã™ã‚‹ã¨ã—ã¾ã™ã€‚指定ã—㟠VMware ゲストã«å¯¾ã—ã¦ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼æ©Ÿèƒ½ãŒæœ‰åйãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:69 msgid "Here, we have configured two filters -" msgstr "ã“ã“ã§ã¯ã€ãƒ•ィルターを 2 ã¤è¨­å®šã—ã¾ã—ãŸã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:71 msgid "``config.guestId`` is equal to ``rhel7_64Guest``" msgstr "``config.guestId`` 㯠``rhel7_64Guest`` ã¨ç­‰ã—ã„" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:72 msgid "``summary.runtime.powerState`` is equal to ``poweredOn``" msgstr "``summary.runtime.powerState`` 㯠``poweredOn`` ã¨ç­‰ã—ã„" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:74 msgid "This retrieves all the VMs which satisfy these two conditions and populates them in the inventory. Notice that the conditions are combined using an ``and`` operation." msgstr "ã“れã«ã‚ˆã‚Šã€ã“ã® 2 ã¤ã®æ¡ä»¶ã‚’満ãŸã™ã™ã¹ã¦ã®ä»®æƒ³ãƒžã‚·ãƒ³ãŒå–å¾—ã•れã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å映ã•れã¾ã™ã€‚``and`` æ“作を使用ã—ã¦æ¡ä»¶ãŒçµ„ã¿åˆã‚ã•れã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:78 msgid "Using ``or`` conditions in filters" msgstr "フィルターã§ã® ``or`` æ¡ä»¶ã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:80 msgid "Let us assume you want filter RHEL7 and Ubuntu VMs. You can use multiple filters using ``or`` condition in your inventory file." msgstr "RHEL7 ãŠã‚ˆã³ Ubuntu ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«ãƒ•ィルターを設定ã™ã‚‹ã¨ã—ã¾ã™ã€‚インベントリーファイル㧠``or`` æ¡ä»¶ã‚’使用ã—ã¦è¤‡æ•°ã®ãƒ•ィルターを使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:82 msgid "A valid filter in the VMware inventory file for this example is:" msgstr "ã“ã®ä¾‹ã® VMware インベントリーファイルã«ãŠã‘る有効ãªãƒ•ィルターã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:99 msgid "You can check all allowed properties for filters for the given virtual machine at :ref:`vmware_inventory_vm_attributes`." msgstr ":ref:`vmware_inventory_vm_attributes` ã§æŒ‡å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ•ィルターã«è¨±å¯ã•れるã™ã¹ã¦ã®ãƒ—ロパティーを確èªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:101 msgid "If you are using the ``properties`` parameter with custom VM properties, make sure that you include all the properties used by filters as well in your VM property list." msgstr "カスタムã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ—ロパティー㧠``properties`` パラメーターを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ—ロパティーã®ä¸€è¦§ã«ãƒ•ィルターãŒä½¿ç”¨ã™ã‚‹ã™ã¹ã¦ã®ãƒ—ロパティーをå«ã‚るよã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:103 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:136 msgid "For example, if we want all RHEL7 and Ubuntu VMs that are poweredOn, you can use inventory file:" msgstr "ãŸã¨ãˆã°ã€RHEL7 ãŠã‚ˆã³ Ubuntu ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«ã™ã¹ã¦é›»æºãŒå…¥ã£ã¦ã„るよã†ã«ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:125 msgid "Here, we are using minimum VM properties, that is ``config.name``, ``config.guestId``, ``summary.runtime.powerState``, and ``guest.ipAddress``." msgstr "ã“ã“ã§ã¯ã€æœ€å°ã®ä»®æƒ³ãƒžã‚·ãƒ³ãƒ—ロパティー (``config.name``ã€``config.guestId``ã€``summary.runtime.powerState``ã€ãŠã‚ˆã³ ``guest.ipAddress``) を使用ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:127 msgid "``config.name`` is used by the ``hostnames`` parameter." msgstr "``config.name`` ã¯ã€``hostnames`` パラメーターã«ã‚ˆã‚Šä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:128 msgid "``config.guestId`` and ``summary.runtime.powerState`` are used by the ``filters`` parameter." msgstr "``config.guestId`` ãŠã‚ˆã³ ``summary.runtime.powerState`` ã¯ã€``filters`` パラメーターã§ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:129 msgid "``guest.guestId`` is used by ``ansible_host`` internally by the inventory plugin." msgstr "``guest.guestId`` ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ã‚ˆã‚Š ``ansible_host`` ã«å†…部的ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:132 msgid "Using regular expression in filters" msgstr "フィルターã§ã®æ­£è¦è¡¨ç¾ã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:134 msgid "Let us assume you want filter VMs with specific IP range. You can use regular expression in ``filters`` in your inventory file." msgstr "特定㮠IP 範囲をæŒã¤ä»®æƒ³ãƒžã‚·ãƒ³ã«ãƒ•ィルターを設定ã™ã‚‹ã¨ã—ã¾ã™ã€‚インベントリーファイル㮠``filters`` ã§æ­£è¦è¡¨ç¾ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:157 msgid "Here, we are using ``guest.ipAddress`` VM property. This property is optional and depended upon VMware tools installed on VMs. We are using ``match`` to validate the regular expression for the given IP range." msgstr "ã“ã“ã§ã€``guest.ipAddress`` 仮想マシンプロパティーを使用ã—ã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ä»»æ„ã§ã€ä»®æƒ³ãƒžã‚·ãƒ³ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ VMware ツールã«ä¾å­˜ã—ã¾ã™ã€‚``match`` を使用ã—ã¦ã€æŒ‡å®šã•れ㟠IP ç¯„å›²ã®æ­£è¦è¡¨ç¾ã‚’検証ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:160 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:71 msgid "Executing ``ansible-inventory --list -i .vmware.yml`` creates a list of the virtual machines that are ready to be configured using Ansible." msgstr "``ansible-inventory --list -i .vmware.yml`` を実行ã™ã‚‹ã¨ã€Ansible を使用ã—ã¦è¨­å®šã§ãる仮想マシンã®ä¸€è¦§ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:165 msgid "You will notice that the inventory hosts are filtered depending on your ``filters`` section." msgstr "``filters`` セクションã«å¿œã˜ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆã«ãƒ•ィルターãŒè¨­å®šã•ã‚Œã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:191 msgid "Troubleshooting filters" msgstr "フィルターã®ãƒˆãƒ©ãƒ–ルシューティング" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:193 msgid "If the custom property specified in ``filters`` fails:" msgstr "``filters`` ã§æŒ‡å®šã•れãŸã‚«ã‚¹ã‚¿ãƒ ãƒ—ロパティーãŒå¤±æ•—ã™ã‚‹å ´åˆ:" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:196 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:108 msgid "Make sure it is a valid property, see :ref:`vmware_inventory_vm_attributes`." msgstr "有効ãªãƒ—ロパティーã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚「:ref:`vmware_inventory_vm_attributes`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:197 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:109 msgid "Use ``strict: True`` to get more information about the error." msgstr "``strict: True`` を使用ã—ã¦ã€ã‚¨ãƒ©ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°æƒ…報をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:198 msgid "Please make sure that you are using latest version of the VMware collection." msgstr "VMware ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:211 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:123 msgid ":ref:`vmware_inventory_vm_attributes`" msgstr ":ref:`vmware_inventory_vm_attributes`" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst:212 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:124 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:5 msgid "Using Virtual machine attributes in VMware dynamic inventory plugin" msgstr "VMware 動的インベントリープラグインã§ã®ä»®æƒ³ãƒžã‚·ãƒ³å±žæ€§ã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:5 msgid "Using VMware dynamic inventory plugin - Hostnames" msgstr "VMware 動的インベントリープラグインã®ä½¿ç”¨ - ホストå" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:11 msgid "VMware dynamic inventory plugin - customizing hostnames" msgstr "VMware 動的インベントリープラグイン - ホストåã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:14 msgid "VMware inventory plugin allows you to configure hostnames using the ``hostnames`` configuration parameter." msgstr "VMware インベントリープラグインã§ã¯ã€``hostnames`` 設定パラメーターを使用ã—ã¦ãƒ›ã‚¹ãƒˆåを設定ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:16 msgid "In this scenario guide we will see how you configure hostnames from the given VMware guest in the inventory." msgstr "ã“ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ã€æŒ‡å®šã—㟠VMware ゲストã‹ã‚‰ãƒ›ã‚¹ãƒˆåを設定ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:31 msgid "Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible. To install the latest ``community.vmware`` collection:" msgstr "Ansible 2.10 以é™ã§ã¯ã€VMware 動的インベントリープラグイン㌠Ansible ã«å«ã¾ã‚Œã‚‹ ``community.vmware`` コレクションã§åˆ©ç”¨å¯èƒ½ã«ãªã‚Šã¾ã—ãŸã€‚最新㮠``community.vmware`` コレクションをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:51 msgid "Here's an example of a valid inventory file with custom hostname for the given VMware guest:" msgstr "以下ã¯ã€ç‰¹å®šã® VMware ゲストã®ã‚«ã‚¹ã‚¿ãƒ ãƒ›ã‚¹ãƒˆåã‚’æŒã¤æœ‰åйãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:66 msgid "Here, we have configured a custom hostname by setting the ``hostnames`` parameter to ``config.name``. This will retrieve the ``config.name`` property from the virtual machine and populate it in the inventory." msgstr "ã“ã“ã§ã¯ã€``hostnames`` パラメーターを ``config.name`` ã«è¨­å®šã—ã¦ã‚«ã‚¹ã‚¿ãƒ ã®ãƒ›ã‚¹ãƒˆåを設定ã—ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‹ã‚‰ ``config.name`` プロパティーをå–å¾—ã—ã€ã“れをインベントリーã«å映ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:69 msgid "You can check all allowed properties for the given virtual machine at :ref:`vmware_inventory_vm_attributes`." msgstr ":ref:`vmware_inventory_vm_attributes` ã§æŒ‡å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã«å¯¾ã—ã¦è¨±å¯ã•れるã™ã¹ã¦ã®ãƒ—ロパティーを確èªã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:76 msgid "You will notice that instead of default behavior of representing the hostname as ``config.name + _ + config.uuid``, the inventory hosts show value as ``config.name``." msgstr "ホストåã‚’ ``config.name + _ + config.uuid`` ã¨ã—ã¦è¡¨ç¤ºã™ã‚‹ä»£ã‚りã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆã¯å€¤ã‚’ ``config.name`` ã¨è¡¨ç¤ºã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:105 msgid "If the custom property specified in ``hostnames`` fails:" msgstr "``hostnames`` ã§æŒ‡å®šã•れãŸã‚«ã‚¹ã‚¿ãƒ ãƒ—ロパティーãŒå¤±æ•—ã™ã‚‹å ´åˆ:" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst:110 msgid "Please make sure that you are using latest version VMware collection." msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® VMware コレクションを使用ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:11 msgid "Virtual machine attributes" msgstr "仮想マシンã®å±žæ€§" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:13 msgid "You can use virtual machine properties which can be used to populate ``hostvars`` for the given virtual machine in a VMware dynamic inventory plugin." msgstr "VMware å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã§æŒ‡å®šã®ä»®æƒ³ãƒžã‚·ãƒ³ã® ``hostvars`` を設定ã™ã‚‹ã®ã«ä½¿ç”¨ã§ãる仮想マシンプロパティーを使用ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:17 msgid "capability" msgstr "機能" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:19 msgid "This section describes settings for the runtime capabilities of the virtual machine." msgstr "本セクションã§ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ©Ÿèƒ½ã®è¨­å®šã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:22 msgid "snapshotOperationsSupported (bool)" msgstr "snapshotOperationsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:24 msgid "Indicates whether or not a virtual machine supports snapshot operations." msgstr "仮想マシンã§ã‚¹ãƒŠãƒƒãƒ—ã‚·ãƒ§ãƒƒãƒˆã®æ“作をサãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:27 msgid "multipleSnapshotsSupported (bool)" msgstr "multipleSnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:29 msgid "Indicates whether or not a virtual machine supports multiple snapshots. This value is not set when the virtual machine is unavailable, for instance, when it is being created or deleted." msgstr "仮想マシンãŒè¤‡æ•°ã®ã‚¹ãƒŠãƒƒãƒ—ショットをサãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆæ™‚や削除時ãªã©ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒåˆ©ç”¨ã§ããªã„ã¨ãã«ã¯è¨­å®šã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:33 msgid "snapshotConfigSupported (bool)" msgstr "snapshotConfigSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:35 msgid "Indicates whether or not a virtual machine supports snapshot config." msgstr "仮想マシンãŒã‚¹ãƒŠãƒƒãƒ—ショット設定をサãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:38 msgid "poweredOffSnapshotsSupported (bool)" msgstr "poweredOffSnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:40 msgid "Indicates whether or not a virtual machine supports snapshot operations in ``poweredOff`` state." msgstr "仮想マシン㌠``poweredOff`` 状態ã®ã‚¹ãƒŠãƒƒãƒ—ショットæ“作ã«å¯¾å¿œã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:43 msgid "memorySnapshotsSupported (bool)" msgstr "memorySnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:45 msgid "Indicates whether or not a virtual machine supports memory snapshots." msgstr "仮想マシンãŒãƒ¡ãƒ¢ãƒªãƒ¼ã‚¹ãƒŠãƒƒãƒ—ショットをサãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:48 msgid "revertToSnapshotSupported (bool)" msgstr "revertToSnapshotSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:50 msgid "Indicates whether or not a virtual machine supports reverting to a snapshot." msgstr "仮想マシンをスナップショットã®çŠ¶æ…‹ã«æˆ»ã™ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:53 msgid "quiescedSnapshotsSupported (bool)" msgstr "quiescedSnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:55 msgid "Indicates whether or not a virtual machine supports quiesced snapshots." msgstr "仮想マシンãŒé™æ­¢çŠ¶æ…‹ã®ã‚¹ãƒŠãƒƒãƒ—ショットをサãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:58 msgid "disableSnapshotsSupported (bool)" msgstr "disableSnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:60 msgid "Indicates whether or not snapshots can be disabled." msgstr "スナップショットを無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:63 msgid "lockSnapshotsSupported (bool)" msgstr "lockSnapshotsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:65 msgid "Indicates whether or not the snapshot tree can be locked." msgstr "スナップショットツリーãŒãƒ­ãƒƒã‚¯ã•れるã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:68 msgid "consolePreferencesSupported (bool)" msgstr "consolePreferencesSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:70 msgid "Indicates whether console preferences can be set for the virtual machine." msgstr "コンソール設定を仮想マシンã«è¨­å®šã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:73 msgid "cpuFeatureMaskSupported (bool)" msgstr "cpuFeatureMaskSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:75 msgid "Indicates whether CPU feature requirements masks can be set for the virtual machine." msgstr "CPU 機能è¦ä»¶ã®ãƒžã‚¹ã‚¯ã‚’仮想マシンã«è¨­å®šã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:78 msgid "s1AcpiManagementSupported (bool)" msgstr "s1AcpiManagementSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:80 msgid "Indicates whether or not a virtual machine supports ACPI S1 settings management." msgstr "仮想マシン㌠ACPI S1 設定管ç†ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:83 msgid "settingScreenResolutionSupported (bool)" msgstr "settingScreenResolutionSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:85 msgid "Indicates whether or not the virtual machine supports setting the screen resolution of the console window." msgstr "仮想マシンãŒã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ç”»é¢ã®è§£åƒåº¦ã®è¨­å®šã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:88 msgid "toolsAutoUpdateSupported (bool)" msgstr "toolsAutoUpdateSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:90 msgid "Supports tools auto-update." msgstr "ツールã®è‡ªå‹•更新をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:93 msgid "vmNpivWwnSupported (bool)" msgstr "vmNpivWwnSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:95 msgid "Supports virtual machine NPIV WWN." msgstr "仮想マシン㮠NPIV WWN をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:98 msgid "npivWwnOnNonRdmVmSupported (bool)" msgstr "npivWwnOnNonRdmVmSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:100 msgid "Supports assigning NPIV WWN to virtual machines that do not have RDM disks." msgstr "RDM ディスクをæŒãŸãªã„仮想マシンã¸ã® NPIV WWN ã®å‰²ã‚Šå½“ã¦ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:103 msgid "vmNpivWwnDisableSupported (bool)" msgstr "vmNpivWwnDisableSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:105 msgid "Indicates whether the NPIV disabling operation is supported on the virtual machine." msgstr "仮想マシン㧠NPIV ã®ç„¡åŠ¹åŒ–æ“作ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:108 msgid "vmNpivWwnUpdateSupported (bool)" msgstr "vmNpivWwnUpdateSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:110 msgid "Indicates whether the update of NPIV WWNs are supported on the virtual machine." msgstr "仮想マシン㧠NPIV WWN ã®æ›´æ–°ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:113 msgid "swapPlacementSupported (bool)" msgstr "swapPlacementSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:115 msgid "Flag indicating whether the virtual machine has a configurable (swapfile placement policy)." msgstr "仮想マシンã«è¨­å®šå¯èƒ½ãª (swapfile ã®é…ç½®ãƒãƒªã‚·ãƒ¼) ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ•ラグ。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:118 msgid "toolsSyncTimeSupported (bool)" msgstr "toolsSyncTimeSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:120 msgid "Indicates whether asking tools to sync time with the host is supported." msgstr "ツールã«ãƒ›ã‚¹ãƒˆã¨æ™‚刻ã®åŒæœŸã‚’è¦æ±‚ã™ã‚‹ã“ã¨ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:123 msgid "virtualMmuUsageSupported (bool)" msgstr "virtualMmuUsageSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:125 msgid "Indicates whether or not the use of nested page table hardware support can be explicitly set." msgstr "入れå­ãƒšãƒ¼ã‚¸ãƒ†ãƒ¼ãƒ–ルã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚µãƒãƒ¼ãƒˆã‚’明示的ã«è¨­å®šã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:128 msgid "diskSharesSupported (bool)" msgstr "diskSharesSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:130 msgid "Indicates whether resource settings for disks can be applied to the virtual machine." msgstr "ディスクã®ãƒªã‚½ãƒ¼ã‚¹è¨­å®šã‚’仮想マシンã«é©ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:133 msgid "bootOptionsSupported (bool)" msgstr "bootOptionsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:135 msgid "Indicates whether boot options can be configured for the virtual machine." msgstr "仮想マシンã«èµ·å‹•オプションを設定ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:138 msgid "bootRetryOptionsSupported (bool)" msgstr "bootRetryOptionsSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:140 msgid "Indicates whether automatic boot retry can be configured for the virtual machine." msgstr "仮想マシンã«è‡ªå‹•èµ·å‹•å†è©¦è¡Œã‚’設定ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:143 msgid "settingVideoRamSizeSupported (bool)" msgstr "settingVideoRamSizeSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:145 msgid "Flag indicating whether the video RAM size of the virtual machine can be configured." msgstr "仮想マシンã®ãƒ“デオ RAM サイズを設定ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ•ラグ。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:148 msgid "settingDisplayTopologySupported (bool)" msgstr "settingDisplayTopologySupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:150 msgid "Indicates whether or not the virtual machine supports setting the display topology of the console window." msgstr "仮想マシンãŒã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®è¡¨ç¤ºãƒˆãƒãƒ­ã‚¸ãƒ¼ã®è¨­å®šã«å¯¾å¿œã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:153 msgid "recordReplaySupported (bool)" msgstr "recordReplaySupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:155 msgid "Indicates whether record and replay functionality is supported on the virtual machine." msgstr "仮想マシンã§è¨˜éŒ²æ©Ÿèƒ½ãŠã‚ˆã³å†ç”Ÿæ©Ÿèƒ½ãŒã‚µãƒãƒ¼ãƒˆã•れるã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:158 msgid "changeTrackingSupported (bool)" msgstr "changeTrackingSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:160 msgid "Indicates that change tracking is supported for virtual disks of the virtual machine. However, even if change tracking is supported, it might not be available for all disks of the virtual machine. For example, passthru raw disk mappings or disks backed by any Ver1BackingInfo cannot be tracked." msgstr "仮想マシンã®ä»®æƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã§ã€å¤‰æ›´è¿½è·¡ãŒã‚µãƒãƒ¼ãƒˆã•れるã“ã¨ã‚’示ã—ã¾ã™ãŒã€å¤‰æ›´è¿½è·¡ãŒã‚µãƒãƒ¼ãƒˆã•れる場åˆã§ã‚‚ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ã™ã¹ã¦ã®ãƒ‡ã‚£ã‚¹ã‚¯ã§åˆ©ç”¨ã§ãã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€ãƒ‘ススルー㮠RAW ディスクマッピングやã€ä»»æ„ã® Ver1BackingInfo ã§ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã•れãŸãƒ‡ã‚£ã‚¹ã‚¯ã¯è¿½è·¡ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:165 msgid "multipleCoresPerSocketSupported (bool)" msgstr "multipleCoresPerSocketSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:167 msgid "Indicates whether multiple virtual cores per socket is supported on the virtual machine." msgstr "1 ソケットã‚ãŸã‚Šã®è¤‡æ•°ã®ä»®æƒ³ã‚³ã‚¢ãŒä»®æƒ³ãƒžã‚·ãƒ³ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:170 msgid "hostBasedReplicationSupported (bool)" msgstr "hostBasedReplicationSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:172 msgid "Indicates that host based replication is supported on the virtual machine. However, even if host based replication is supported, it might not be available for all disk types. For example, passthru raw disk mappings can not be replicated." msgstr "仮想マシンã§ãƒ›ã‚¹ãƒˆãƒ™ãƒ¼ã‚¹ã®ãƒ¬ãƒ—リケーションãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ãŒã€ãƒ›ã‚¹ãƒˆãƒ™ãƒ¼ã‚¹ã®ãƒ¬ãƒ—リケーションãŒã‚µãƒãƒ¼ãƒˆã•れる場åˆã§ã‚‚ã€ã™ã¹ã¦ã®ãƒ‡ã‚£ã‚¹ã‚¯ã‚¿ã‚¤ãƒ—ã§åˆ©ç”¨ã§ããªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ‘ススルー㮠RAW ディスクマッピングã¯è¤‡è£½ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:177 msgid "guestAutoLockSupported (bool)" msgstr "guestAutoLockSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:179 msgid "Indicates whether or not guest autolock is supported on the virtual machine." msgstr "仮想マシンã§ã‚²ã‚¹ãƒˆã®è‡ªå‹•ロックãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:182 msgid "memoryReservationLockSupported (bool)" msgstr "memoryReservationLockSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:184 msgid "Indicates whether :ref:`memory_reservation_locked_to_max` may be set to true for the virtual machine." msgstr "仮想マシンã«å¯¾ã—㦠:ref:`memory_reservation_locked_to_max` ㌠true ã«è¨­å®šã•れるã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:187 msgid "featureRequirementSupported (bool)" msgstr "featureRequirementSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:189 msgid "Indicates whether the featureRequirement feature is supported." msgstr "featureRequirement 機能ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:192 msgid "poweredOnMonitorTypeChangeSupported (bool)" msgstr "poweredOnMonitorTypeChangeSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:194 msgid "Indicates whether a monitor type change is supported while the virtual machine is in the ``poweredOn`` state." msgstr "仮想マシン㌠``poweredOn`` 状態ã«ã‚ã‚‹é–“ã«ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚¿ã‚¤ãƒ—ã®å¤‰æ›´ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:197 msgid "seSparseDiskSupported (bool)" msgstr "seSparseDiskSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:199 msgid "Indicates whether the virtual machine supports the Flex-SE (space-efficient, sparse) format for virtual disks." msgstr "仮想マシンãŒä»®æƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã® Flex-SE (ã‚¹ãƒšãƒ¼ã‚¹ãŒæœ‰åйã€ã‚¹ãƒ‘ース) å½¢å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:202 msgid "nestedHVSupported (bool)" msgstr "nestedHVSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:204 msgid "Indicates whether the virtual machine supports nested hardware-assisted virtualization." msgstr "仮想マシンãŒãƒã‚¹ãƒˆã•れãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æ”¯æ´åž‹ä»®æƒ³åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:207 msgid "vPMCSupported (bool)" msgstr "vPMCSupported (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:209 msgid "Indicates whether the virtual machine supports virtualized CPU performance counters." msgstr "仮想マシンãŒä»®æƒ³ CPU パフォーマンスカウンターをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:213 msgid "config" msgstr "設定" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:215 msgid "This section describes the configuration settings of the virtual machine, including the name and UUID. This property is set when a virtual machine is created or when the ``reconfigVM`` method is called. The virtual machine configuration is not guaranteed to be available. For example, the configuration information would be unavailable if the server is unable to access the virtual machine files on disk, and is often also unavailable during the initial phases of virtual machine creation." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€åå‰ãŠã‚ˆã³ UUID ã‚’å«ã‚€ä»®æƒ³ãƒžã‚·ãƒ³ã®è¨­å®šã‚’説明ã—ã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆæ™‚ã¾ãŸã¯ ``reconfigVM`` メソッドãŒå‘¼ã³å‡ºã•れる際ã«è¨­å®šã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®è¨­å®šãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚‹ä¿è¨¼ã¯ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€ã‚µãƒ¼ãƒãƒ¼ãŒãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã®ä»®æƒ³ãƒžã‚·ãƒ³ãƒ•ァイルã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€è¨­å®šæƒ…å ±ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。仮想マシン作æˆã®åˆæœŸæ®µéšŽã§ã‚‚利用ã§ããªã„ã“ã¨ãŒå¤šã€…ã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:221 msgid "changeVersion (str)" msgstr "changeVersion (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:223 msgid "The changeVersion is a unique identifier for a given version of the configuration. Each change to the configuration updates this value. This is typically implemented as an ever increasing count or a time-stamp. However, a client should always treat this as an opaque string." msgstr "changeVersion ã¯ã€è¨­å®šã®ç‰¹å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸€æ„ã®è­˜åˆ¥å­ã§ã™ã€‚設定ã¸ã®å¤‰æ›´ã¯ãれãžã‚Œã“ã®å€¤ã‚’æ›´æ–°ã—ã¾ã™ã€‚ã“れã¯é€šå¸¸ã€å¢—加ã—ç¶šã‘るカウントやタイムスタンプã¨ã—ã¦å®Ÿè£…ã•れã¾ã™ãŒã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯å¸¸ã«ã“れをä¸é€æ˜Žãªæ–‡å­—列ã¨ã—ã¦æ‰±ã†å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:228 msgid "modified (datetime)" msgstr "modified (datetime)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:230 msgid "Last time a virtual machine's configuration was modified." msgstr "仮想マシンã®è¨­å®šãŒæœ€å¾Œã«å¤‰æ›´ã—ãŸæ™‚間。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:233 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:680 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1113 msgid "name (str)" msgstr "name (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:235 #, python-format msgid "Display name of the virtual machine. Any / (slash), \\ (backslash), character used in this name element is escaped. Similarly, any % (percent) character used in this name element is escaped, unless it is used to start an escape sequence. A slash is escaped as %2F or %2f. A backslash is escaped as %5C or %5c, and a percent is escaped as %25." msgstr "仮想マシンã®è¡¨ç¤ºåã§ã™ã€‚/ (スラッシュ)ã€\\ (ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥)ã€ã“ã®åå‰è¦ç´ ã§ä½¿ç”¨ã•れる文字ãŒã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¾ã™ã€‚åŒæ§˜ã«ã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã‚’é–‹å§‹ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¦ã„ãªã„é™ã‚Šã€ã“ã®åå‰è¦ç´ ã§ä½¿ç”¨ã•れる % (パーセント) 文字ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¾ã™ã€‚スラッシュをエスケープã™ã‚‹å ´åˆã¯ %2F ã¾ãŸã¯ %2f ã¨ãªã‚Šã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープã™ã‚‹å ´åˆã¯ %5C ã¾ãŸã¯ %5c ã¨ãªã‚Šã€ãƒ‘ーセントをエスケープã™ã‚‹å ´åˆã¯ %25 ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:240 msgid "guestFullName (str)" msgstr "guestFullName (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:242 msgid "This is the full name of the guest operating system for the virtual machine. For example: Windows 2000 Professional. See :ref:`alternate_guest_name`." msgstr "ã“れã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®å®Œå…¨ãªåå‰ã§ã™ (ãŸã¨ãˆã°ã€Windows 2000 Professional)。「:ref:`alternate_guest_name`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:245 msgid "version (str)" msgstr "version (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:247 msgid "The version string for the virtual machine." msgstr "仮想マシンã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æ–‡å­—列。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:250 msgid "uuid (str)" msgstr "uuid (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:252 msgid "128-bit SMBIOS UUID of a virtual machine represented as a hexadecimal string in \"12345678-abcd-1234-cdef-123456789abc\" format." msgstr "仮想マシン㮠128 ビット SMBIOS UUID ã¯ã€ã€Œ12345678-abcd-1234-cdef-123456789abcã€å½¢å¼ã§ 16 é€²æ•°ã®æ–‡å­—列ã¨ã—ã¦è¡¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:255 msgid "instanceUuid (str, optional)" msgstr "instanceUuid (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:257 msgid "VirtualCenter-specific 128-bit UUID of a virtual machine, represented as a hexadecimal string. This identifier is used by VirtualCenter to uniquely identify all virtual machine instances, including those that may share the same SMBIOS UUID." msgstr "仮想マシン㮠VirtualCenter 固有㮠128 ビット㮠UUID 㯠16 進法ã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚ã“ã®è­˜åˆ¥å­ã¯ã€åŒã˜ SMBIOS UUID を共有ã™ã‚‹å¯èƒ½æ€§ã®ã‚る仮想マシンインスタンスをå«ã‚ã€ã™ã¹ã¦ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’一æ„ã«è­˜åˆ¥ã™ã‚‹ãŸã‚ã« VirtualCenter ã«ã‚ˆã‚Šä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:260 msgid "npivNodeWorldWideName (long, optional)" msgstr "npivNodeWorldWideName (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:262 msgid "A 64-bit node WWN (World Wide Name)." msgstr "64 ビットノード WWN (World Wide Name)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:265 msgid "npivPortWorldWideName (long, optional)" msgstr "npivPortWorldWideName (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:267 msgid "A 64-bit port WWN (World Wide Name)." msgstr "64 ビットã®ãƒãƒ¼ãƒˆ WWN (World Wide Name)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:270 msgid "npivWorldWideNameType (str, optional)" msgstr "npivWorldWideNameType (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:272 msgid "The source that provides/generates the assigned WWNs." msgstr "割り当ã¦ã‚‰ã‚ŒãŸ WWN ã‚’æä¾›ã¾ãŸã¯ç”Ÿæˆã™ã‚‹ã‚½ãƒ¼ã‚¹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:275 msgid "npivDesiredNodeWwns (short, optional)" msgstr "npivDesiredNodeWwns (short, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:277 msgid "The NPIV node WWNs to be extended from the original list of WWN numbers." msgstr "WWN 番å·ã®å…ƒã®ä¸€è¦§ã‹ã‚‰æ‹¡å¼µã•れる NPIV ノード WWN。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:280 msgid "npivDesiredPortWwns (short, optional)" msgstr "npivDesiredPortWwns (short, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:282 msgid "The NPIV port WWNs to be extended from the original list of WWN numbers." msgstr "WWN 番å·ã®å…ƒã®ãƒªã‚¹ãƒˆã‹ã‚‰æ‹¡å¼µã•れる NPIV ãƒãƒ¼ãƒˆ WWN。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:285 msgid "npivTemporaryDisabled (bool, optional)" msgstr "npivTemporaryDisabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:287 msgid "This property is used to enable or disable the NPIV capability on a desired virtual machine on a temporary basis." msgstr "ã“ã®ãƒ—ロパティーã¯ã€å¿…è¦ãªä»®æƒ³ãƒžã‚·ãƒ³ã® NPIV æ©Ÿèƒ½ã‚’ä¸€æ™‚çš„ã«æœ‰åйã¾ãŸã¯ç„¡åйã«ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:290 msgid "npivOnNonRdmDisks (bool, optional)" msgstr "npivOnNonRdmDisks (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:292 msgid "This property is used to check whether the NPIV can be enabled on the Virtual machine with non-rdm disks in the configuration, so this is potentially not enabling npiv on vmfs disks. Also this property is used to check whether RDM is required to generate WWNs for a virtual machine." msgstr "ã“ã®ãƒ—ロパティーã¯ã€è¨­å®šå†…ã®éž rdm ディスクをæŒã¤ä»®æƒ³ãƒžã‚·ãƒ³ã§ NPIV を有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã€vmfs ディスク㧠npiv ãŒæœ‰åйã«ãªã£ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã¾ãŸã€ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã® WWN を生æˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:296 msgid "locationId (str, optional)" msgstr "locationId (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:298 msgid "Hash incorporating the virtual machine's config file location and the UUID of the host assigned to run the virtual machine." msgstr "仮想マシンã®è¨­å®šãƒ•ァイルã®å ´æ‰€ã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®å®Ÿè¡Œã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ›ã‚¹ãƒˆã® UUID を組ã¿è¾¼ã‚“ã ãƒãƒƒã‚·ãƒ¥ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:301 msgid "template (bool)" msgstr "template (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:303 msgid "Flag indicating whether or not a virtual machine is a template." msgstr "仮想マシンãŒãƒ†ãƒ³ãƒ—レートã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ•ラグ。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:306 msgid "guestId (str)" msgstr "guestId (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:308 msgid "Guest operating system configured on a virtual machine." msgstr "仮想マシンã«è¨­å®šã•れãŸã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:313 msgid "alternateGuestName (str)" msgstr "alternateGuestName (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:315 msgid "Used as display name for the operating system if guestId isotherorother-64. See :ref:`guest_full_name`." msgstr "guestId ㌠other ã¾ãŸã¯ other-64 ã®å ´åˆã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®è¡¨ç¤ºåã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚「:ref:`guest_full_name`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:318 msgid "annotation (str, optional)" msgstr "annotation (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:320 msgid "Description for the virtual machine." msgstr "仮想マシンã®èª¬æ˜Žã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:323 msgid "files (vim.vm.FileInfo)" msgstr "files (vim.vm.FileInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:325 msgid "Information about the files associated with a virtual machine. This information does not include files for specific virtual disks or snapshots." msgstr "仮想マシンã«é–¢é€£ä»˜ã‘られãŸãƒ•ァイルã«é–¢ã™ã‚‹æƒ…報。ã“ã®æƒ…å ±ã«ã¯ã€ç‰¹å®šã®ä»®æƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã‚„スナップショットã®ãƒ•ァイルãŒå«ã¾ã‚Œã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:329 msgid "tools (vim.vm.ToolsConfigInfo, optional)" msgstr "tools (vim.vm.ToolsConfigInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:331 msgid "Configuration of VMware Tools running in the guest operating system." msgstr "ゲストオペレーティングシステムã§å®Ÿè¡Œã—ã¦ã„ã‚‹ VMware ツールã®è¨­å®šã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:334 msgid "flags (vim.vm.FlagInfo)" msgstr "flags (vim.vm.FlagInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:336 msgid "Additional flags for a virtual machine." msgstr "仮想マシンã®è¿½åŠ ãƒ•ãƒ©ã‚°ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:339 msgid "consolePreferences (vim.vm.ConsolePreferences, optional)" msgstr "consolePreferences (vim.vm.ConsolePreferences, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:341 msgid "Legacy console viewer preferences when doing power operations." msgstr "レガシーコンソールビューアーã¯ã€é›»æºæ“作を実行ã™ã‚‹éš›ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:344 msgid "defaultPowerOps (vim.vm.DefaultPowerOpInfo)" msgstr "defaultPowerOps (vim.vm.DefaultPowerOpInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:346 msgid "Configuration of default power operations." msgstr "デフォルトã®é›»æºæ“作ã®è¨­å®šã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:349 msgid "hardware (vim.vm.VirtualHardware)" msgstr "hardware (vim.vm.VirtualHardware)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:351 msgid "Processor, memory, and virtual devices for a virtual machine." msgstr "仮想マシンã®ãƒ—ロセッサーã€ãƒ¡ãƒ¢ãƒªãƒ¼ã€ãŠã‚ˆã³ä»®æƒ³ãƒ‡ãƒã‚¤ã‚¹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:354 msgid "cpuAllocation (vim.ResourceAllocationInfo, optional)" msgstr "cpuAllocation (vim.ResourceAllocationInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:356 msgid "Resource limits for CPU." msgstr "CPU ã®ãƒªã‚½ãƒ¼ã‚¹åˆ¶é™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:359 msgid "memoryAllocation (vim.ResourceAllocationInfo, optional)" msgstr "memoryAllocation (vim.ResourceAllocationInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:361 msgid "Resource limits for memory." msgstr "メモリーã®ãƒªã‚½ãƒ¼ã‚¹åˆ¶é™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:364 msgid "latencySensitivity (vim.LatencySensitivity, optional)" msgstr "latencySensitivity (vim.LatencySensitivity, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:366 msgid "The latency-sensitivity of the virtual machine." msgstr "仮想マシンã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼ã®æ„Ÿåº¦ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:369 msgid "memoryHotAddEnabled (bool, optional)" msgstr "memoryHotAddEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:371 msgid "Whether memory can be added while the virtual machine is running." msgstr "仮想マシンã®å®Ÿè¡Œä¸­ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’追加ã§ãã‚‹ã‹ã©ã†ã‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:374 msgid "cpuHotAddEnabled (bool, optional)" msgstr "cpuHotAddEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:376 msgid "Whether virtual processors can be added while the virtual machine is running." msgstr "仮想マシンã®å®Ÿè¡Œä¸­ã«ä»®æƒ³ãƒ—ロセッサーを追加ã§ãã‚‹ã‹ã©ã†ã‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:379 msgid "cpuHotRemoveEnabled (bool, optional)" msgstr "cpuHotRemoveEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:381 msgid "Whether virtual processors can be removed while the virtual machine is running." msgstr "仮想マシンã®å®Ÿè¡Œä¸­ã«ä»®æƒ³ãƒ—ロセッサーを削除ã§ãã‚‹ã‹ã©ã†ã‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:384 msgid "hotPlugMemoryLimit (long, optional)" msgstr "hotPlugMemoryLimit (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:386 msgid "The maximum amount of memory, in MB, than can be added to a running virtual machine." msgstr "実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«è¿½åŠ ã§ãã‚‹ãƒ¡ãƒ¢ãƒªãƒ¼ã®æœ€å¤§é‡ (MB å˜ä½)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:389 msgid "hotPlugMemoryIncrementSize (long, optional)" msgstr "hotPlugMemoryIncrementSize (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:391 msgid "Memory, in MB that can be added to a running virtual machine." msgstr "実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«è¿½åŠ ã§ãるメモリー (MB å˜ä½)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:394 msgid "cpuAffinity (vim.vm.AffinityInfo, optional)" msgstr "cpuAffinity (vim.vm.AffinityInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:396 msgid "Affinity settings for CPU." msgstr "CPU ã®ã‚¢ãƒ•ィニティー設定。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:399 msgid "memoryAffinity (vim.vm.AffinityInfo, optional)" msgstr "memoryAffinity (vim.vm.AffinityInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:401 msgid "Affinity settings for memory." msgstr "メモリーã®ã‚¢ãƒ•ィニティー設定。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:404 msgid "networkShaper (vim.vm.NetworkShaperInfo, optional)" msgstr "networkShaper (vim.vm.NetworkShaperInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:406 msgid "Resource limits for network." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚½ãƒ¼ã‚¹åˆ¶é™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:409 msgid "extraConfig (vim.option.OptionValue, optional)" msgstr "extraConfig (vim.option.OptionValue, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:411 msgid "Additional configuration information for the virtual machine." msgstr "仮想マシンã®è¿½åŠ è¨­å®šæƒ…å ±ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:414 msgid "cpuFeatureMask (vim.host.CpuIdInfo, optional)" msgstr "cpuFeatureMask (vim.host.CpuIdInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:416 msgid "Specifies CPU feature compatibility masks that override the defaults from the ``GuestOsDescriptor`` of the virtual machine's guest OS." msgstr "仮想マシンã®ã‚²ã‚¹ãƒˆ OS ã® ``GuestOsDescriptor`` ã‹ã‚‰ãƒ‡ãƒ•ォルトを上書ãã™ã‚‹ CPU æ©Ÿèƒ½äº’æ›æ€§ãƒžã‚¹ã‚¯ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:419 msgid "datastoreUrl (vim.vm.ConfigInfo.DatastoreUrlPair, optional)" msgstr "datastoreUrl (vim.vm.ConfigInfo.DatastoreUrlPair, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:421 msgid "Enumerates the set of datastores that the virtual machine is stored on, as well as the URL identification for each of these." msgstr "仮想マシンãŒä¿å­˜ã•れるデータストアã®ã‚»ãƒƒãƒˆã¨ã€ãã®å„ URL ID を列挙ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:424 msgid "swapPlacement (str, optional)" msgstr "swapPlacement (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:426 msgid "Virtual machine swapfile placement policy." msgstr "仮想マシン㮠swapfile é…ç½®ãƒãƒªã‚·ãƒ¼ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:429 msgid "bootOptions (vim.vm.BootOptions, optional)" msgstr "bootOptions (vim.vm.BootOptions, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:431 msgid "Configuration options for the boot behavior of the virtual machine." msgstr "仮想マシンã®ãƒ–ート動作ã®è¨­å®šã‚ªãƒ—ション。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:434 msgid "ftInfo (vim.vm.FaultToleranceConfigInfo, optional)" msgstr "ftInfo (vim.vm.FaultToleranceConfigInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:436 msgid "Fault tolerance settings for the virtual machine." msgstr "仮想マシンã®ãƒ•ォールトトレランス設定。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:439 msgid "vAppConfig (vim.vApp.VmConfigInfo, optional)" msgstr "vAppConfig (vim.vApp.VmConfigInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:441 msgid "vApp meta-data for the virtual machine." msgstr "仮想マシン㮠vApp メタデータ。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:444 msgid "vAssertsEnabled (bool, optional)" msgstr "vAssertsEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:446 msgid "Indicates whether user-configured virtual asserts will be triggered during virtual machine replay." msgstr "仮想マシンã®å†ç”Ÿä¸­ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®ä»®æƒ³ã‚¢ã‚µãƒ¼ãƒˆãŒãƒˆãƒªã‚¬ãƒ¼ã•れるã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:449 msgid "changeTrackingEnabled (bool, optional)" msgstr "changeTrackingEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:451 msgid "Indicates whether changed block tracking for the virtual machine's disks is active." msgstr "仮想マシンã®ãƒ‡ã‚£ã‚¹ã‚¯ã®ãƒ–ロック追跡ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:454 msgid "firmware (str, optional)" msgstr "firmware (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:456 msgid "Information about firmware type for the virtual machine." msgstr "仮想マシンã®ãƒ•ァームウェアã®ç¨®é¡žã«é–¢ã™ã‚‹æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:459 msgid "maxMksConnections (int, optional)" msgstr "maxMksConnections (int, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:461 msgid "Indicates the maximum number of active remote display connections that the virtual machine will support." msgstr "仮想マシンãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ãƒ—ãƒ¬ã‚¤æŽ¥ç¶šã®æœ€å¤§æ•°ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:464 msgid "guestAutoLockEnabled (bool, optional)" msgstr "guestAutoLockEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:466 msgid "Indicates whether the guest operating system will logout any active sessions whenever there are no remote display connections open to the virtual machine." msgstr "仮想マシンã«ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ãƒ—レイ接続ãŒé–‹ã‹ãªã„å ´åˆã«ã€ã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’ã™ã¹ã¦ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:469 msgid "managedBy (vim.ext.ManagedByInfo, optional)" msgstr "managedBy (vim.ext.ManagedByInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:471 msgid "Specifies that the virtual machine is managed by a VC Extension." msgstr "仮想マシン㌠VC æ‹¡å¼µã§ç®¡ç†ã•れるよã†ã«æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:476 msgid "memoryReservationLockedToMax (bool, optional)" msgstr "memoryReservationLockedToMax (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:478 msgid "If set true, memory resource reservation for the virtual machine will always be equal to the virtual machine's memory size; increases in memory size will be rejected when a corresponding reservation increase is not possible." msgstr "true ã«è¨­å®šã™ã‚‹ã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ¡ãƒ¢ãƒªãƒ¼ãƒªã‚½ãƒ¼ã‚¹äºˆç´„ã¯å¸¸ã«ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚µã‚¤ã‚ºã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚対応ã™ã‚‹äºˆç´„ãŒå¢—ãˆãªã„ã¨ã€ãƒ¡ãƒ¢ãƒªãƒ¼ã‚µã‚¤ã‚ºã®å¢—åŠ ã¯æ‹’å¦ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:481 msgid "initialOverhead (vim.vm.ConfigInfo.OverheadInfo), optional)" msgstr "initialOverhead (vim.vm.ConfigInfo.OverheadInfo), optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:483 msgid "Set of values to be used only to perform admission control when determining if a host has sufficient resources for the virtual machine to power on." msgstr "ホストã«ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºã‚’入れるã®ã«å分ãªãƒªã‚½ãƒ¼ã‚¹ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’判別ã™ã‚‹éš›ã«ã®ã¿å—付制御を実行ã™ã‚‹ã®ã«ä½¿ç”¨ã™ã‚‹å€¤ã®ã‚»ãƒƒãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:486 msgid "nestedHVEnabled (bool, optional)" msgstr "nestedHVEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:488 msgid "Indicates whether the virtual machine is configured to use nested hardware-assisted virtualization." msgstr "仮想マシンãŒãƒã‚¹ãƒˆã•れãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æ”¯æ´åž‹ä»®æƒ³åŒ–を使用ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:491 msgid "vPMCEnabled (bool, optional)" msgstr "vPMCEnabled (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:493 msgid "Indicates whether the virtual machine have virtual CPU performance counters enabled." msgstr "仮想マシンã®ä»®æƒ³ CPU ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:496 msgid "scheduledHardwareUpgradeInfo (vim.vm.ScheduledHardwareUpgradeInfo, optional)" msgstr "scheduledHardwareUpgradeInfo (vim.vm.ScheduledHardwareUpgradeInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:498 msgid "Configuration of scheduled hardware upgrades and result from last attempt to run scheduled hardware upgrade." msgstr "スケジュールã•れãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ãƒƒãƒ—グレードã®è¨­å®šã¨ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¢ãƒƒãƒ—グレードを最後ã«å®Ÿè¡Œã—ãŸã¨ãã®çµæžœã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:501 msgid "vFlashCacheReservation (long, optional)" msgstr "vFlashCacheReservation (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:503 msgid "Specifies the total vFlash resource reservation for the vFlash caches associated with the virtual machine's virtual disks, in bytes." msgstr "仮想マシンã®ä»®æƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã«é–¢é€£ä»˜ã‘られ㟠vFlash キャッシュ㮠vFlash リソース予約ã®åˆè¨ˆã‚’ãƒã‚¤ãƒˆå˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:506 msgid "layout" msgstr "レイアウト" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:508 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:544 msgid "Detailed information about the files that comprise the virtual machine." msgstr "仮想マシンを構æˆã™ã‚‹ãƒ•ァイルã«é–¢ã™ã‚‹è©³ç´°æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:511 msgid "configFile (str, optional)" msgstr "configFile (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:513 msgid "A list of files that makes up the configuration of the virtual machine (excluding the .vmx file, since that file is represented in the FileInfo). These are relative paths from the configuration directory. A slash is always used as a separator. This list will typically include the NVRAM file, but could also include other meta-data files." msgstr "仮想マシンã®è¨­å®šã‚’æ§‹æˆã™ã‚‹ãƒ•ァイルã®ä¸€è¦§ (.vmx ファイル㯠FileInfo ã§è¡¨ç¾ã•れるãŸã‚除ã)。ã“れらã¯è¨­å®šãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ç›¸å¯¾ãƒ‘スã«ãªã‚Šã¾ã™ã€‚スラッシュã¯å¸¸ã«ã‚»ãƒ‘レーターã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ä¸€è¦§ã«ã¯é€šå¸¸ NVRAM ファイルãŒå«ã¾ã‚Œã¾ã™ãŒã€ä»–ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルをå«ã‚ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:519 msgid "logFile (str, optional)" msgstr "logFile (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:521 msgid "A list of files stored in the virtual machine's log directory. These are relative paths from the ``logDirectory``. A slash is always used as a separator." msgstr "仮想マシンã®ãƒ­ã‚°ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ä¿å­˜ã•れã¦ã„るファイルã®ä¸€è¦§ã€‚ã“れら㯠``logDirectory`` ã‹ã‚‰ã®ç›¸å¯¾ãƒ‘スã«ãªã‚Šã¾ã™ã€‚スラッシュã¯å¸¸ã«ã‚»ãƒ‘レーターã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:526 msgid "disk (vim.vm.FileLayout.DiskLayout, optional)" msgstr "disk (vim.vm.FileLayout.DiskLayout, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:528 msgid "Files making up each virtual disk." msgstr "å„仮想ディスクを作æˆã™ã‚‹ãƒ•ァイル。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:531 msgid "snapshot (vim.vm.FileLayout.SnapshotLayout, optional)" msgstr "snapshot (vim.vm.FileLayout.SnapshotLayout, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:533 msgid "Files of each snapshot." msgstr "å„スナップショットã®ãƒ•ァイル。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:536 msgid "swapFile (str, optional)" msgstr "swapFile (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:538 msgid "The swapfile specific to the virtual machine, if any. This is a complete datastore path, not a relative path." msgstr "仮想マシンã«å›ºæœ‰ã®ã‚¹ãƒ¯ãƒƒãƒ—ファイル (存在ã™ã‚‹å ´åˆ)。ã“れã¯å®Œå…¨ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ãƒ‘スã§ã‚りã€ç›¸å¯¾ãƒ‘スã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:542 msgid "layoutEx" msgstr "layoutEx" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:547 msgid "file (vim.vm.FileLayoutEx.FileInfo, optional)" msgstr "file (vim.vm.FileLayoutEx.FileInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:549 msgid "Information about all the files that constitute the virtual machine including configuration files, disks, swap file, suspend file, log files, core files, memory file and so on." msgstr "設定ファイルã€ãƒ‡ã‚£ã‚¹ã‚¯ã€ã‚¹ãƒ¯ãƒƒãƒ—ファイルã€ä¸€æ™‚åœæ­¢ãƒ•ァイルã€ãƒ­ã‚°ãƒ•ァイルã€ã‚³ã‚¢ãƒ•ァイルã€ãƒ¡ãƒ¢ãƒªãƒ¼ãƒ•ァイルãªã©ã€ä»®æƒ³ãƒžã‚·ãƒ³ã‚’æ§‹æˆã™ã‚‹ã™ã¹ã¦ã®ãƒ•ァイルã«é–¢ã™ã‚‹æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:552 msgid "disk (vim.vm.FileLayoutEx.DiskLayout, optional)" msgstr "disk (vim.vm.FileLayoutEx.DiskLayout, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:554 msgid "Layout of each virtual disk attached to the virtual machine. For a virtual machine with snapshots, this property gives only those disks that are attached to it at the current point of running." msgstr "ä»®æƒ³ãƒžã‚·ãƒ³ã«æŽ¥ç¶šã•れã¦ã„ã‚‹å„仮想ディスクã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚スナップショットをæŒã¤ä»®æƒ³ãƒžã‚·ãƒ³ã§ã¯ã€ã“ã®ãƒ—ロパティーã¯ã€å®Ÿè¡Œä¸­ã®æ™‚点ã§ã‚¢ã‚¿ãƒƒãƒã•れã¦ã„るディスクã®ã¿ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:558 msgid "snapshot (vim.vm.FileLayoutEx.SnapshotLayout, optional)" msgstr "snapshot (vim.vm.FileLayoutEx.SnapshotLayout, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:560 msgid "Layout of each snapshot of the virtual machine." msgstr "仮想マシンã®å„スナップショットã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:563 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:579 msgid "timestamp (datetime)" msgstr "timestamp (datetime)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:565 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:581 msgid "Time when values in this structure were last updated." msgstr "ã“ã®æ§‹é€ ã®å€¤ãŒæœ€å¾Œã«æ›´æ–°ã•ã‚ŒãŸæ™‚間。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:568 msgid "storage (vim.vm.StorageInfo)" msgstr "storage (vim.vm.StorageInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:570 msgid "Storage space used by the virtual machine, split by datastore." msgstr "仮想マシンã«ã‚ˆã£ã¦ä½¿ç”¨ã•れるストレージ領域。データストアã«ã‚ˆã£ã¦åˆ†å‰²ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:573 msgid "perDatastoreUsage (vim.vm.StorageInfo.UsageOnDatastore, optional)" msgstr "perDatastoreUsage (vim.vm.StorageInfo.UsageOnDatastore, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:575 msgid "Storage space used by the virtual machine on all datastores that it is located on. Total storage space committed to the virtual machine across all datastores is simply an aggregate of the property ``committed``" msgstr "仮想マシンãŒé…ç½®ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã§ä½¿ç”¨ã•れã¦ã„るストレージ領域。ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã§ä»®æƒ³ãƒžã‚·ãƒ³ã«ã‚³ãƒŸãƒƒãƒˆã•れã¦ã„ã‚‹ç·ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸å®¹é‡ã¯ã€å˜ç´”ã«ãƒ—ロパティー ``committed`` を集約ã—ãŸã‚‚ã®ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:584 msgid "environmentBrowser (vim.EnvironmentBrowser)" msgstr "environmentBrowser (vim.EnvironmentBrowser)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:586 msgid "The current virtual machine's environment browser object. This contains information on all the configurations that can be used on the virtual machine. This is identical to the environment browser on the ComputeResource to which the virtual machine belongs." msgstr "ç¾åœ¨ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ç’°å¢ƒãƒ–ラウザーオブジェクト。仮想マシンã§ä½¿ç”¨ã§ãã‚‹ã™ã¹ã¦ã®è¨­å®šã«é–¢ã™ã‚‹æƒ…å ±ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒå±žã™ã‚‹ ComputeResource ã®ç’°å¢ƒãƒ–ラウザーã¨åŒã˜ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:591 msgid "datastoreBrowser (vim.host.DatastoreBrowser)" msgstr "datastoreBrowser (vim.host.DatastoreBrowser)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:593 msgid "DatastoreBrowser to browse datastores that are available on this entity." msgstr "DatastoreBrowser ã¯ã€ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§åˆ©ç”¨å¯èƒ½ãªãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:596 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:618 msgid "resourcePool (vim.ResourcePool)" msgstr "resourcePool (vim.ResourcePool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:598 msgid "The current resource pool that specifies resource allocation for the virtual machine. This property is set when a virtual machine is created or associated with a different resource pool. Returns null if the virtual machine is a template or the session has no access to the resource pool." msgstr "仮想マシンã®ãƒªã‚½ãƒ¼ã‚¹å‰²ã‚Šå½“ã¦ã‚’指定ã™ã‚‹ç¾åœ¨ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ—ール。ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒä½œæˆã•れãŸã‹ã€åˆ¥ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã«é–¢é€£ä»˜ã‘られãŸã¨ãã«è¨­å®šã•れã¾ã™ã€‚仮想マシンãŒãƒ†ãƒ³ãƒ—レートã§ã‚ã‚‹ã‹ã€ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ null ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:603 msgid "summary (vim.ResourcePool.Summary)" msgstr "summary (vim.ResourcePool.Summary)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:605 msgid "Basic information about a resource pool." msgstr "リソースプールã«é–¢ã™ã‚‹åŸºæœ¬æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:608 msgid "runtime (vim.ResourcePool.RuntimeInfo)" msgstr "runtime (vim.ResourcePool.RuntimeInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:610 msgid "Runtime information about a resource pool." msgstr "リソースプールã«é–¢ã™ã‚‹ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:613 msgid "owner (vim.ComputeResource)" msgstr "owner (vim.ComputeResource)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:615 msgid "The ComputeResource to which this set of one or more nested resource pools belong." msgstr "1 ã¤ä»¥ä¸Šã®ãƒã‚¹ãƒˆã•れãŸãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã®ã‚»ãƒƒãƒˆãŒå±žã™ã‚‹ ComputeResource。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:620 msgid "The set of child resource pools." msgstr "å­ãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã®ã‚»ãƒƒãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:623 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1086 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1128 msgid "vm (vim.VirtualMachine)" msgstr "vm (vim.VirtualMachine)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:625 msgid "The set of virtual machines associated with this resource pool." msgstr "ã“ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã«é–¢é€£ä»˜ã‘られãŸä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚»ãƒƒãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:628 msgid "config (vim.ResourceConfigSpec)" msgstr "config (vim.ResourceConfigSpec)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:630 msgid "Configuration of this resource pool." msgstr "ã“ã®ãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã®è¨­å®šã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:633 msgid "childConfiguration (vim.ResourceConfigSpec)" msgstr "childConfiguration (vim.ResourceConfigSpec)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:635 msgid "The resource configuration of all direct children (VirtualMachine and ResourcePool) of this resource group." msgstr "ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã‚°ãƒ«ãƒ¼ãƒ—ã®ã™ã¹ã¦ã®ç›´æŽ¥ã®å­ (VirtualMachine ãŠã‚ˆã³ ResourcePool) ã®ãƒªã‚½ãƒ¼ã‚¹è¨­å®šã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:638 msgid "parentVApp (vim.ManagedEntity)" msgstr "parentVApp (vim.ManagedEntity)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:640 msgid "Reference to the parent vApp." msgstr "親 vApp ã¸ã®å‚照。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:643 msgid "parent (vim.ManagedEntity)" msgstr "parent (vim.ManagedEntity)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:645 msgid "Parent of this entity. This value is null for the root object and for (VirtualMachine) objects that are part of a (VirtualApp)." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã®è¦ªã€‚ルートオブジェクトã¨ã€(VirtualApp) ã®ä¸€éƒ¨ã§ã‚ã‚‹ (VirtualMachine) オブジェクトã®å ´åˆã€ã“ã®å€¤ã¯ null ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:649 msgid "customValue (vim.CustomFieldsManager.Value)" msgstr "customValue (vim.CustomFieldsManager.Value)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:651 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1062 msgid "Custom field values." msgstr "カスタムフィールドã®å€¤ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:654 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1055 msgid "overallStatus (vim.ManagedEntity.Status)" msgstr "overallStatus (vim.ManagedEntity.Status)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:656 msgid "General health of this managed entity." msgstr "ã“ã®ç®¡ç†ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã®ä¸€èˆ¬çš„ãªæ­£å¸¸æ€§ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:659 msgid "configStatus (vim.ManagedEntity.Status)" msgstr "configStatus (vim.ManagedEntity.Status)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:661 msgid "The configStatus indicates whether or not the system has detected a configuration issue involving this entity. For example, it might have detected a duplicate IP address or MAC address, or a host in a cluster might be out of ``compliance.property``." msgstr "configStatus ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«é–¢é€£ã™ã‚‹è¨­å®šå•題を検出ã—ãŸã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€é‡è¤‡ã™ã‚‹ IP アドレスã¾ãŸã¯ MAC アドレスを検出ã—ãŸã‚Šã€ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼å†…ã®ãƒ›ã‚¹ãƒˆãŒ ``compliance.property`` 外ã®å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:665 msgid "configIssue (vim.event.Event)" msgstr "configIssue (vim.event.Event)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:667 msgid "Current configuration issues that have been detected for this entity." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«ã¤ã„ã¦æ¤œå‡ºã•れãŸç¾åœ¨ã®è¨­å®šã®å•題。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:670 msgid "effectiveRole (int)" msgstr "effectiveRole (int)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:672 msgid "Access rights the current session has to this entity." msgstr "ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«å¯¾ã—ã¦è¨­å®šã•れã¦ã„るアクセス権。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:675 msgid "permission (vim.AuthorizationManager.Permission)" msgstr "permission (vim.AuthorizationManager.Permission)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:677 msgid "List of permissions defined for this entity." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«å®šç¾©ã•れãŸãƒ‘ーミッションã®ä¸€è¦§ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:682 #, python-format msgid "Name of this entity, unique relative to its parent. Any / (slash), \\ (backslash), character used in this name element will be escaped. Similarly, any % (percent) character used in this name element will be escaped, unless it is used to start an escape sequence. A slash is escaped as %2F or %2f. A backslash is escaped as %5C or %5c, and a percent is escaped as %25." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã®åå‰ã§ã€è¦ªã¨ã®é–¢ä¿‚ã¯ä¸€æ„ã§ã™ã€‚/ (スラッシュ)ã€\\ (ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥)ã€ã“ã®åå‰è¦ç´ ã§ä½¿ç”¨ã•れる文字ãŒã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¾ã™ã€‚åŒæ§˜ã«ã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã‚’é–‹å§‹ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¦ã„ãªã„é™ã‚Šã€ã“ã®åå‰è¦ç´ ã§ä½¿ç”¨ã•れる % (パーセント) 文字ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¾ã™ã€‚スラッシュをエスケープã™ã‚‹å ´åˆã¯ %2F ã¾ãŸã¯ %2f ã¨ãªã‚Šã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープã™ã‚‹å ´åˆã¯ %5C ã¾ãŸã¯ %5c ã¨ãªã‚Šã€ãƒ‘ーセントをエスケープã™ã‚‹å ´åˆã¯ %25 ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:688 msgid "disabledMethod (str)" msgstr "disabledMethod (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:690 msgid "List of operations that are disabled, given the current runtime state of the entity. For example, a power-on operation always fails if a virtual machine is already powered on." msgstr "エンティティーã®ç¾åœ¨ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ çŠ¶æ…‹ã‚’è€ƒæ…®ã—ã¦ã€ç„¡åйã¨ãªã‚‹æ“作ã®ãƒªã‚¹ãƒˆã€‚ãŸã¨ãˆã°ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºãŒå…¥ã£ã¦ã„ã‚‹å ´åˆã¯å¸¸ã«ã€ãƒ‘ワーオンæ“作ã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:694 msgid "recentTask (vim.Task)" msgstr "recentTask (vim.Task)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:696 msgid "The set of recent tasks operating on this managed entity. A task in this list could be in one of the four states: pending, running, success or error." msgstr "ã“ã®ç®¡ç†ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§å‹•作ã™ã‚‹æœ€è¿‘ã®ã‚¿ã‚¹ã‚¯ã‚»ãƒƒãƒˆã€‚ã“ã®ãƒªã‚¹ãƒˆã®ã‚¿ã‚¹ã‚¯ã¯ã€4 ã¤ã®çŠ¶æ…‹ (ä¿ç•™ã€å®Ÿè¡Œã€æˆåŠŸã€ã¾ãŸã¯ã‚¨ãƒ©ãƒ¼) ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:700 msgid "declaredAlarmState (vim.alarm.AlarmState)" msgstr "declaredAlarmState (vim.alarm.AlarmState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:702 msgid "A set of alarm states for alarms that apply to this managed entity." msgstr "ã“ã®ç®¡ç†ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«é©ç”¨ã•れるアラームã®ã‚¢ãƒ©ãƒ¼ãƒ çŠ¶æ…‹ã®ã‚»ãƒƒãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:705 msgid "triggeredAlarmState (vim.alarm.AlarmState)" msgstr "triggeredAlarmState (vim.alarm.AlarmState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:707 msgid "A set of alarm states for alarms triggered by this entity or by its descendants." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã¾ãŸã¯ãã®å­å­«ã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•れるアラームã®ã‚¢ãƒ©ãƒ¼ãƒ çŠ¶æ…‹ã®ã‚»ãƒƒãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:710 msgid "alarmActionsEnabled (bool)" msgstr "alarmActionsEnabled (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:712 msgid "Whether alarm actions are enabled for this entity. True if enabled; false otherwise." msgstr "ã“ã®ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«å¯¾ã—ã¦ã‚¢ãƒ©ãƒ¼ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã‹ã©ã†ã‹ã€‚有効ãªå ´åˆã¯ True。ãã†ã§ãªã„å ´åˆã¯ false。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:715 msgid "tag (vim.Tag)" msgstr "tag (vim.Tag)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:717 msgid "The set of tags associated with this managed entity. Experimental. Subject to change." msgstr "ã“ã®ç®¡ç†ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã«é–¢é€£ä»˜ã‘られãŸã‚¿ã‚°ã®ã‚»ãƒƒãƒˆã€‚実験的ã§ã€å¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:720 msgid "resourceConfig (vim.ResourceConfigSpec)" msgstr "resourceConfig (vim.ResourceConfigSpec)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:722 msgid "The resource configuration for a virtual machine." msgstr "仮想マシンã®ãƒªã‚½ãƒ¼ã‚¹è¨­å®šã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:725 msgid "entity (vim.ManagedEntity, optional)" msgstr "entity (vim.ManagedEntity, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:727 msgid "Reference to the entity with this resource specification: either a VirtualMachine or a ResourcePool." msgstr "ã“ã®ãƒªã‚½ãƒ¼ã‚¹ä»•様をæŒã¤ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã¸ã®å‚ç…§ (VirtualMachine ã¾ãŸã¯ ResourcePool ã®ã„ãšã‚Œã‹)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:730 msgid "changeVersion (str, optional)" msgstr "changeVersion (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:732 msgid "The changeVersion is a unique identifier for a given version of the configuration. Each change to the configuration will update this value. This is typically implemented as an ever increasing count or a time-stamp." msgstr "changeVersion ã¯ã€è¨­å®šã®ç‰¹å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸€æ„ã®è­˜åˆ¥å­ã§ã™ã€‚設定ã¸ã®å¤‰æ›´ã¯ãれãžã‚Œã“ã®å€¤ã‚’æ›´æ–°ã—ã¾ã™ã€‚ã“れã¯é€šå¸¸ã€å¢—加ã—ç¶šã‘るカウントやタイムスタンプã¨ã—ã¦å®Ÿè£…ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:737 msgid "lastModified (datetime, optional)" msgstr "lastModified (datetime, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:739 msgid "Timestamp when the resources were last modified. This is ignored when the object is used to update a configuration." msgstr "ãƒªã‚½ãƒ¼ã‚¹ãŒæœ€å¾Œã«å¤‰æ›´ã—ãŸæ™‚点ã®ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—。ã“れã¯ã€ã‚ªãƒ–ジェクトを使用ã—ã¦è¨­å®šã‚’æ›´æ–°ã™ã‚‹å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:742 msgid "cpuAllocation (vim.ResourceAllocationInfo)" msgstr "cpuAllocation (vim.ResourceAllocationInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:744 msgid "Resource allocation for CPU." msgstr "CPU ã®ãƒªã‚½ãƒ¼ã‚¹å‰²ã‚Šå½“ã¦ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:747 msgid "memoryAllocation (vim.ResourceAllocationInfo)" msgstr "memoryAllocation (vim.ResourceAllocationInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:749 msgid "Resource allocation for memory." msgstr "メモリーã®ãƒªã‚½ãƒ¼ã‚¹å‰²ã‚Šå½“ã¦ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:752 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1027 msgid "runtime (vim.vm.RuntimeInfo)" msgstr "runtime (vim.vm.RuntimeInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:754 msgid "Execution state and history for the virtual machine." msgstr "仮想マシンã®å®Ÿè¡ŒçŠ¶æ…‹ãŠã‚ˆã³å±¥æ­´ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:757 msgid "device (vim.vm.DeviceRuntimeInfo, optional)" msgstr "device (vim.vm.DeviceRuntimeInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:759 msgid "Per-device runtime info. This array will be empty if the host software does not provide runtime info for any of the device types currently in use by the virtual machine." msgstr "デãƒã‚¤ã‚¹ã”ã¨ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æƒ…報。ホストソフトウェアãŒã€ä»®æƒ³ãƒžã‚·ãƒ³ã§ç¾åœ¨ä½¿ç”¨ã•れã¦ã„るデãƒã‚¤ã‚¹ã‚¿ã‚¤ãƒ—ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æƒ…報をæä¾›ã—ã¦ã„ãªã„å ´åˆã€ã“ã®é…列ã¯ç©ºã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:762 msgid "host (vim.HostSystem, optional)" msgstr "host (vim.HostSystem, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:764 msgid "The host that is responsible for running a virtual machine. This property is null if the virtual machine is not running and is not assigned to run on a particular host." msgstr "仮想マシンã®å®Ÿè¡Œã‚’担当ã™ã‚‹ãƒ›ã‚¹ãƒˆã€‚ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒå®Ÿè¡Œä¸­ã§ã¯ãªãã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„å ´åˆã« null ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:768 msgid "connectionState (vim.VirtualMachine.ConnectionState)" msgstr "connectionState (vim.VirtualMachine.ConnectionState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:770 msgid "Indicates whether or not the virtual machine is available for management." msgstr "仮想マシンãŒç®¡ç†ã«ä½¿ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:773 msgid "powerState (vim.VirtualMachine.PowerState)" msgstr "powerState (vim.VirtualMachine.PowerState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:775 msgid "The current power state of the virtual machine." msgstr "仮想マシンã®ç¾åœ¨ã®çŠ¶æ…‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:778 msgid "faultToleranceState (vim.VirtualMachine.FaultToleranceState)" msgstr "faultToleranceState (vim.VirtualMachine.FaultToleranceState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:780 msgid "The fault tolerance state of the virtual machine." msgstr "仮想マシンã®ãƒ•ォールトトレランス状態。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:783 msgid "dasVmProtection (vim.vm.RuntimeInfo.DasProtectionState, optional)" msgstr "dasVmProtection (vim.vm.RuntimeInfo.DasProtectionState, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:785 msgid "The vSphere HA protection state for a virtual machine. Property is unset if vSphere HA is not enabled." msgstr "仮想マシン㮠vSphere HA ä¿è­·ã®çŠ¶æ…‹ã€‚vSphere HA ãŒæœ‰åйã«ãªã£ã¦ã„ãªã„ã¨ã€ãƒ—ロパティーã¯è¨­å®šã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:789 msgid "toolsInstallerMounted (bool)" msgstr "toolsInstallerMounted (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:791 msgid "Flag to indicate whether or not the VMware Tools installer is mounted as a CD-ROM." msgstr "VMware Tool インストーラー㌠CD-ROM ã¨ã—ã¦ãƒžã‚¦ãƒ³ãƒˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã™ãƒ•ラグ。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:794 msgid "suspendTime (datetime, optional)" msgstr "suspendTime (datetime, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:796 msgid "The timestamp when the virtual machine was most recently suspended. This property is updated every time the virtual machine is suspended." msgstr "ä»®æƒ³ãƒžã‚·ãƒ³ãŒæœ€è¿‘ä¸€æ™‚åœæ­¢ã•ã‚ŒãŸæ™‚点ã®ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—。ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒä¸€æ™‚åœæ­¢ã•れるãŸã³ã«æ›´æ–°ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:800 msgid "bootTime (datetime, optional)" msgstr "bootTime (datetime, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:802 msgid "The timestamp when the virtual machine was most recently powered on. This property is updated when the virtual machine is powered on from the poweredOff state, and is cleared when the virtual machine is powered off. This property is not updated when a virtual machine is resumed from a suspended state." msgstr "仮想マシンã®é›»æºãŒæœ€å¾Œã«å…¥ã£ãŸæ™‚ã®ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã§ã™ã€‚ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒã€poweredOff 状態ã‹ã‚‰é›»æºãŒã‚ªãƒ³ã«ãªã‚‹ã¨æ›´æ–°ã—ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºãŒã‚ªãƒ•ã«ãªã‚‹å‰Šé™¤ã•れã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒä¸€æ™‚åœæ­¢çŠ¶æ…‹ã‹ã‚‰å†é–‹ã—ãŸã¨ãã«ã¯æ›´æ–°ã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:807 msgid "suspendInterval (long, optional)" msgstr "suspendInterval (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:809 msgid "The total time the virtual machine has been suspended since it was initially powered on. This time excludes the current period, if the virtual machine is currently suspended. This property is updated when the virtual machine resumes, and is reset to zero when the virtual machine is powered off." msgstr "仮想マシンã®é›»æºãŒæœ€åˆã«å…¥ã£ã¦ã‹ã‚‰ä¸€æ™‚åœæ­¢çŠ¶æ…‹ã«ãªã£ã¦ã„ãŸåˆè¨ˆæ™‚間。ã“ã®æ™‚é–“ã«ã‚ˆã‚Šã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒç¾åœ¨ä¸€æ™‚åœæ­¢ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ç¾åœ¨ã®æœŸé–“ãŒé™¤å¤–ã•れã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ä»®æƒ³ãƒžã‚·ãƒ³ãŒå†é–‹ã—ãŸã¨ãã«æ›´æ–°ã•れã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºã‚ªãƒ•時ã«ã‚¼ãƒ­ã«ãƒªã‚»ãƒƒãƒˆã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:814 msgid "question (vim.vm.QuestionInfo, optional)" msgstr "question (vim.vm.QuestionInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:816 msgid "The current question, if any, that is blocking the virtual machine's execution." msgstr "仮想マシンã®å®Ÿè¡Œã‚’ブロックã™ã‚‹ç¾åœ¨ã®è³ªå• (ã‚ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:819 msgid "memoryOverhead (long, optional)" msgstr "memoryOverhead (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:821 msgid "The amount of memory resource (in bytes) that will be used by the virtual machine above its guest memory requirements. This value is set if and only if the virtual machine is registered on a host that supports memory resource allocation features. For powered off VMs, this is the minimum overhead required to power on the VM on the registered host. For powered on VMs, this is the current overhead reservation, a value which is almost always larger than the minimum overhead, and which grows with time." msgstr "仮想マシンãŒã‚²ã‚¹ãƒˆã®ãƒ¡ãƒ¢ãƒªãƒ¼è¦ä»¶ã‚’è¶…ãˆã¦ä½¿ç”¨ã™ã‚‹ãƒ¡ãƒ¢ãƒªãƒ¼ãƒªã‚½ãƒ¼ã‚¹ã®é‡ (ãƒã‚¤ãƒˆæ•°) ã§ã™ã€‚ã“ã®å€¤ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒãƒ¡ãƒ¢ãƒªãƒ¼ãƒªã‚½ãƒ¼ã‚¹ã®å‰²ã‚Šå½“ã¦æ©Ÿèƒ½ã«å¯¾å¿œã™ã‚‹ãƒ›ã‚¹ãƒˆã«ç™»éŒ²ã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿è¨­å®šã•れã¾ã™ã€‚仮想マシンã®é›»æºãŒåˆ‡ã‚Œã¦ã„ã‚‹å ´åˆã€ã“れã¯ç™»éŒ²ã•れã¦ã„るホストã®ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºã‚’入れるãŸã‚ã«å¿…è¦ãªæœ€å°ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã§ã™ã€‚仮想マシンã®é›»æºãŒå…¥ã£ã¦ã„ã‚‹å ´åˆã€ã“れã¯ç¾åœ¨ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã®äºˆç´„値ã§ã€ã»ã¨ã‚“ã©ã®å ´åˆã€æœ€å°ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã‚ˆã‚Šã‚‚大ããã€æ™‚é–“ã¨ã¨ã‚‚ã«å¢—加ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:827 msgid "maxCpuUsage (int, optional)" msgstr "maxCpuUsage (int, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:829 msgid "Current upper-bound on CPU usage. The upper-bound is based on the host the virtual machine is current running on, as well as limits configured on the virtual machine itself or any parent resource pool. Valid while the virtual machine is running." msgstr "CPU 使用率ã®ç¾åœ¨ã®ä¸Šé™ã€‚上é™ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒç¾åœ¨å®Ÿè¡Œã—ã¦ã„るホストã«åŸºã¥ãã€ä»®æƒ³ãƒžã‚·ãƒ³è‡ªä½“ã¾ãŸã¯è¦ªãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã«è¨­å®šã•れãŸåˆ¶é™ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚仮想マシンãŒå®Ÿè¡Œä¸­ã®é–“有効ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:834 msgid "maxMemoryUsage (int, optional)" msgstr "maxMemoryUsage (int, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:836 msgid "Current upper-bound on memory usage. The upper-bound is based on memory configuration of the virtual machine, as well as limits configured on the virtual machine itself or any parent resource pool. Valid while the virtual machine is running." msgstr "メモリー使用é‡ã®ç¾åœ¨ã®ä¸Šé™ã€‚上é™ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ¡ãƒ¢ãƒªãƒ¼è¨­å®šã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³è‡ªä½“ã¾ãŸã¯è¦ªãƒªã‚½ãƒ¼ã‚¹ãƒ—ールã«è¨­å®šã•れãŸåˆ¶é™ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚仮想マシンãŒå®Ÿè¡Œä¸­ã®é–“ã¯æœ‰åйã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:841 msgid "numMksConnections (int)" msgstr "numMksConnections (int)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:843 msgid "Number of active MKS connections to the virtual machine." msgstr "仮想マシンã¸ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–㪠MKS æŽ¥ç¶šã®æ•°ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:846 msgid "recordReplayState (vim.VirtualMachine.RecordReplayState)" msgstr "recordReplayState (vim.VirtualMachine.RecordReplayState)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:848 msgid "Record / replay state of the virtual machine." msgstr "仮想マシンã®çŠ¶æ…‹ã®è¨˜éŒ²/å†ç”Ÿã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:851 msgid "cleanPowerOff (bool, optional)" msgstr "cleanPowerOff (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:853 msgid "For a powered off virtual machine, indicates whether the virtual machine's last shutdown was an orderly power off or not. Unset if the virtual machine is running or suspended." msgstr "仮想マシンã®é›»æºãŒã‚ªãƒ•ã®å ´åˆã€ä»®æƒ³ãƒžã‚·ãƒ³ã®æœ€å¾Œã®ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ãŒé †åºé€šã‚Šè¡Œã‚れãŸã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚仮想マシンãŒå®Ÿè¡Œä¸­ã‹ã€ã‚µã‚¹ãƒšãƒ³ãƒ‰ã•れã¦ã„ãŸå ´åˆã¯è¨­å®šã•れã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:857 msgid "needSecondaryReason (str, optional)" msgstr "needSecondaryReason (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:859 msgid "If set, indicates the reason the virtual machine needs a secondary." msgstr "設定ã•れã¦ã„ã‚‹ã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼ã‚’å¿…è¦ã¨ã™ã‚‹ç†ç”±ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:862 msgid "onlineStandby (bool)" msgstr "onlineStandby (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:864 msgid "This property indicates whether the guest has gone into one of the s1, s2 or s3 standby modes. False indicates the guest is awake." msgstr "ã“ã®ãƒ—ロパティーã¯ã€ã‚²ã‚¹ãƒˆãŒ s1ã€s2ã€ã¾ãŸã¯ s3 ã®ã‚¹ã‚¿ãƒ³ãƒã‚¤ãƒ¢ãƒ¼ãƒ‰ã®ã„ãšã‚Œã‹ã«åˆ‡ã‚Šæ›¿ã‚ã£ãŸã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚False ã¯ã€ã‚²ã‚¹ãƒˆãŒç¨¼åƒã—ã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:867 msgid "minRequiredEVCModeKey (str, optional)" msgstr "minRequiredEVCModeKey (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:869 msgid "For a powered-on or suspended virtual machine in a cluster with Enhanced VMotion Compatibility (EVC) enabled, this identifies the least-featured EVC mode (among those for the appropriate CPU vendor) that could admit the virtual machine. This property will be unset if the virtual machine is powered off or is not in an EVC cluster. This property may be used as a general indicator of the CPU feature baseline currently in use by the virtual machine. However, the virtual machine may be suppressing some of the features present in the CPU feature baseline of the indicated mode, either explicitly (in the virtual machine's configured ``cpuFeatureMask``) or implicitly (in the default masks for the ``GuestOsDescriptor`` appropriate for the virtual machine's configured guest OS)." msgstr "EVC (Enhanced VMotion Compatibility) ãŒæœ‰åйã«ãªã£ã¦ã„るクラスターã§ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºãŒå…¥ã£ã¦ã„ã‚‹ã€ã¾ãŸã¯ä¸€æ™‚åœæ­¢ã—ã¦ã„ã‚‹å ´åˆã€ã“れã¯ä»®æƒ³ãƒžã‚·ãƒ³ã‚’許å¯ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹æœ€å°æ©Ÿèƒ½ã® EVC モード (é©åˆ‡ãª CPU ベンダー用) を特定ã—ã¾ã™ã€‚仮想マシンã®é›»æºãŒã‚ªãƒ•ã®å ´åˆã€ã¾ãŸã¯ EVC クラスターã«ãªã„å ´åˆã¯ã€ã“ã®ãƒ—ロパティーã®è¨­å®šã‚’解除ã—ã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒç¾åœ¨ä½¿ç”¨ã—ã¦ã„ã‚‹ CPU 機能ベースラインã®ä¸€èˆ¬çš„ãªã‚¤ãƒ³ã‚¸ã‚±ãƒ¼ã‚¿ãƒ¼ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã ã—ã€ä»®æƒ³ãƒžã‚·ãƒ³ã¯ã€æ˜Žç¤ºçš„ (仮想マシンã®è¨­å®šæ¸ˆã¿ ``cpuFeatureMask``) ã¾ãŸã¯æš—黙的 (仮想マシンã®è¨­å®šæ¸ˆã¿ã‚²ã‚¹ãƒˆ OS ã«é©åˆ‡ãª ``GuestOsDescriptor`` ã®ãƒ‡ãƒ•ォルトマスク) ã«æŒ‡å®šã—ãŸãƒ¢ãƒ¼ãƒ‰ã® CPU 機能ベースラインã«å­˜åœ¨ã™ã‚‹æ©Ÿèƒ½ã®ä¸€éƒ¨ã‚’抑制ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:875 msgid "consolidationNeeded (bool)" msgstr "consolidationNeeded (bool)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:877 msgid "Whether any disk of the virtual machine requires consolidation. This can happen for example when a snapshot is deleted but its associated disk is not committed back to the base disk." msgstr "仮想マシンã®ãƒ‡ã‚£ã‚¹ã‚¯ãŒçµ±åˆã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã€‚ã“れã¯ã€ã‚¹ãƒŠãƒƒãƒ—ショットãŒå‰Šé™¤ã•れã¦ã‚‚ã€é–¢é€£ä»˜ã‘られãŸãƒ‡ã‚£ã‚¹ã‚¯ãŒãƒ™ãƒ¼ã‚¹ãƒ‡ã‚£ã‚¹ã‚¯ã«ã‚³ãƒŸãƒƒãƒˆã•れãªã„å ´åˆãªã©ã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:881 msgid "offlineFeatureRequirement (vim.vm.FeatureRequirement, optional)" msgstr "offlineFeatureRequirement (vim.vm.FeatureRequirement, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:883 msgid "These requirements must have equivalent host capabilities ``featureCapability`` in order to power on." msgstr "ã“れらã®è¦ä»¶ã«ã¯ã€é›»æºã‚’入れるã®ã«åŒç­‰ã®ãƒ›ã‚¹ãƒˆæ©Ÿèƒ½ ``featureCapability`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:886 msgid "featureRequirement (vim.vm.FeatureRequirement, optional)" msgstr "featureRequirement (vim.vm.FeatureRequirement, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:888 msgid "These requirements must have equivalent host capabilities ``featureCapability`` in order to power on, resume, or migrate to the host." msgstr "ホストã®é›»æºã‚ªãƒ³ã€å†é–‹ã€ã¾ãŸã¯ç§»è¡Œã‚’行ã†ã«ã¯ã€ã“れらã®è¦ä»¶ã«åŒç­‰ã®ãƒ›ã‚¹ãƒˆæ©Ÿèƒ½ ``featureCapability`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:891 msgid "featureMask (vim.host.FeatureMask, optional)" msgstr "featureMask (vim.host.FeatureMask, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:893 msgid "The masks applied to an individual virtual machine as a result of its configuration." msgstr "設定ã®çµæžœã¨ã—ã¦ã€å€‹ã€…ã®ä»®æƒ³ãƒžã‚·ãƒ³ã«é©ç”¨ã•れるマスク。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:896 msgid "vFlashCacheAllocation (long, optional)" msgstr "vFlashCacheAllocation (long, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:898 msgid "Specifies the total allocated vFlash resource for the vFlash caches associated with VM's VMDKs when VM is powered on, in bytes." msgstr "仮想マシンã®é›»æºãŒå…¥ã£ãŸã¨ãã«ã€ä»®æƒ³ãƒžã‚·ãƒ³ã® VMDK ã«é–¢é€£ä»˜ã‘られ㟠vFlash キャッシュã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ vFlash リソースã®åˆè¨ˆã‚’ãƒã‚¤ãƒˆå˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:902 msgid "guest (vim.vm.GuestInfo)" msgstr "guest (vim.vm.GuestInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:904 msgid "Information about VMware Tools and about the virtual machine from the perspective of VMware Tools. Information about the guest operating system is available in VirtualCenter. Guest operating system information reflects the last known state of the virtual machine. For powered on machines, this is current information. For powered off machines, this is the last recorded state before the virtual machine was powered off." msgstr "VMware Tool ã«é–¢ã™ã‚‹æƒ…å ±ã€ãŠã‚ˆã³ VMware Tool ツールã‹ã‚‰è¦‹ãŸä»®æƒ³ãƒžã‚·ãƒ³ã«é–¢ã™ã‚‹æƒ…報。ゲストオペレーティングシステムã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€VirtualCenter ã§åˆ©ç”¨ã§ãã¾ã™ã€‚ã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®æƒ…å ±ã«ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®æœ€å¾Œã®æ—¢çŸ¥ã®çŠ¶æ…‹ã‚’åæ˜ ã—ã¾ã™ã€‚マシンã®é›»æºãŒå…¥ã£ã¦ã„ã‚‹ã¨ã€ã“れã¯ç¾åœ¨ã®æƒ…å ±ã«ãªã‚Šã¾ã™ã€‚マシンã®é›»æºãŒåˆ‡ã‚Œã¦ã„ã‚‹ã¨ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºãŒåˆ‡ã‚Œã‚‹å‰ã«æœ€å¾Œã«è¨˜éŒ²ã•れãŸçŠ¶æ…‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:911 msgid "toolsStatus (vim.vm.GuestInfo.ToolsStatus, optional)" msgstr "toolsStatus (vim.vm.GuestInfo.ToolsStatus, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:913 msgid "Current status of VMware Tools in the guest operating system, if known." msgstr "ゲストオペレーティングシステム㮠VMware Tool ã®ç¾åœ¨ã®çŠ¶æ…‹ (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:916 msgid "toolsVersionStatus (str, optional)" msgstr "toolsVersionStatus (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:918 #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:923 msgid "Current version status of VMware Tools in the guest operating system, if known." msgstr "ゲストオペレーティングシステム㮠VMware ツールã®ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:921 msgid "toolsVersionStatus2 (str, optional)" msgstr "toolsVersionStatus2 (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:926 msgid "toolsRunningStatus (str, optional)" msgstr "toolsRunningStatus (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:928 msgid "Current running status of VMware Tools in the guest operating system, if known." msgstr "ゲストオペレーティングシステム㮠VMware ツールã®ç¾åœ¨ã®å®Ÿè¡Œã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:931 msgid "toolsVersion (str, optional)" msgstr "toolsVersion (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:933 msgid "Current version of VMware Tools, if known." msgstr "VMware ツールã®ç¾è¡Œãƒãƒ¼ã‚¸ãƒ§ãƒ³ (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:936 msgid "guestId (str, optional)" msgstr "guestId (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:938 msgid "Guest operating system identifier (short name), if known." msgstr "既知ã®å ´åˆã¯ã€ã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ è­˜åˆ¥å­ (短縮å)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:941 msgid "guestFamily (str, optional)" msgstr "guestFamily (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:943 msgid "Guest operating system family, if known." msgstr "ゲストオペレーティングシステムファミリー (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:946 msgid "guestFullName (str, optional)" msgstr "guestFullName (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:948 msgid "See :ref:`guest_full_name`." msgstr "「:ref:`guest_full_name`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:951 msgid "hostName (str, optional)" msgstr "hostName (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:953 msgid "Hostname of the guest operating system, if known." msgstr "ゲストオペレーティングシステムã®ãƒ›ã‚¹ãƒˆå (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:956 msgid "ipAddress (str, optional)" msgstr "ipAddress (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:958 msgid "Primary IP address assigned to the guest operating system, if known." msgstr "ゲストオペレーティングシステムã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ãƒ—ライマリー IP アドレス (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:961 msgid "net (vim.vm.GuestInfo.NicInfo, optional)" msgstr "net (vim.vm.GuestInfo.NicInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:963 msgid "Guest information about network adapters, if known." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ€ãƒ—ターã«é–¢ã™ã‚‹ã‚²ã‚¹ãƒˆæƒ…å ± (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:966 msgid "ipStack (vim.vm.GuestInfo.StackInfo, optional)" msgstr "ipStack (vim.vm.GuestInfo.StackInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:968 msgid "Guest information about IP networking stack, if known." msgstr "IP ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ã‚¿ãƒƒã‚¯ã«é–¢ã™ã‚‹ã‚²ã‚¹ãƒˆæƒ…å ± (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:971 msgid "disk (vim.vm.GuestInfo.DiskInfo, optional)" msgstr "disk (vim.vm.GuestInfo.DiskInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:973 msgid "Guest information about disks. You can obtain Linux guest disk information for the following file system types only: Ext2, Ext3, Ext4, ReiserFS, ZFS, NTFS, VFAT, UFS, PCFS, HFS, and MS-DOS." msgstr "ディスクã«é–¢ã™ã‚‹ã‚²ã‚¹ãƒˆæƒ…報。次ã®ãƒ•ァイルシステムタイプ㮠Linux ゲストディスク情報をå–å¾—ã§ãã¾ã™ (Ext2ã€Ext3ã€Ext4ã€ReiserFSã€ZFSã€NTFSã€VFATã€UFSã€PCFSã€HFSã€ãŠã‚ˆã³ MS-DOS)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:977 msgid "screen (vim.vm.GuestInfo.ScreenInfo, optional)" msgstr "screen (vim.vm.GuestInfo.ScreenInfo, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:979 msgid "Guest screen resolution info, if known." msgstr "ゲスト画é¢ã®è§£åƒåº¦æƒ…å ± (判明ã—ã¦ã„ã‚‹å ´åˆ)。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:982 msgid "guestState (str)" msgstr "guestState (str)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:984 msgid "Operation mode of guest operating system." msgstr "ã‚²ã‚¹ãƒˆã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®æ“作モード。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:987 msgid "appHeartbeatStatus (str, optional)" msgstr "appHeartbeatStatus (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:989 msgid "Application heartbeat status." msgstr "アプリケーションã®ãƒãƒ¼ãƒˆãƒ“ート状態。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:992 msgid "appState (str, optional)" msgstr "appState (str, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:994 msgid "Application state. If vSphere HA is enabled and the vm is configured for Application Monitoring and this field's value is ``appStateNeedReset`` then HA will attempt immediately reset the virtual machine. There are some system conditions which may delay the immediate reset. The immediate reset will be performed as soon as allowed by vSphere HA and ESX. If during these conditions the value is changed to ``appStateOk`` the reset will be cancelled." msgstr "アプリケーションã®çŠ¶æ…‹ã€‚vSphere HA ãŒæœ‰åйã§ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒã‚¢ãƒ—リケーション監視用ã«è¨­å®šã•れã¦ã„ã¦ã€ãŠã‚ˆã³ã“ã®ãƒ•ィールドã®å€¤ãŒ ``appStateNeedReset`` ã®å ´åˆã€HA ã¯ä»®æƒ³ãƒžã‚·ãƒ³ã®å³æ™‚リセットを試ã¿ã¾ã™ã€‚システムã®çŠ¶æ…‹ã«ã‚ˆã£ã¦ã¯ã€å³æ™‚リセットãŒé…れる場åˆãŒã‚りã¾ã™ã€‚峿™‚リセットã¯ã€vSphere HA 㨠ESX ã§è¨±å¯ã•れるã¨ã™ãã«ã€å³æ™‚リセットãŒå®Ÿè¡Œã•れã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ¡ä»¶ã§å€¤ãŒ ``appStateOk`` ã«å¤‰æ›´ã«ãªã‚‹ã¨ã€ãƒªã‚»ãƒƒãƒˆãŒå–り消ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1001 msgid "guestOperationsReady (bool, optional)" msgstr "guestOperationsReady (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1003 msgid "Guest Operations availability. If true, the virtual machine is ready to process guest operations." msgstr "ゲストæ“作ã®å¯ç”¨æ€§ã€‚true ã®å ´åˆã¯ã€ã‚²ã‚¹ãƒˆæ“作を処ç†ã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1006 msgid "interactiveGuestOperationsReady (bool, optional)" msgstr "interactiveGuestOperationsReady (bool, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1008 msgid "Interactive Guest Operations availability. If true, the virtual machine is ready to process guest operations as the user interacting with the guest desktop." msgstr "インタラクティブãªã‚²ã‚¹ãƒˆæ“作ã®å¯ç”¨æ€§ã€‚true ã®å ´åˆã¯ã€ã‚²ã‚¹ãƒˆãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã¨å¯¾è©±ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚²ã‚¹ãƒˆæ“作を処ç†ã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1011 msgid "generationInfo (vim.vm.GuestInfo.NamespaceGenerationInfo, privilege: VirtualMachine.Namespace.EventNotify, optional)" msgstr "generationInfo (vim.vm.GuestInfo.NamespaceGenerationInfo, privilege: VirtualMachine.Namespace.EventNotify, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1013 msgid "A list of namespaces and their corresponding generation numbers. Only namespaces with non-zero ``maxSizeEventsFromGuest`` are guaranteed to be present here." msgstr "åå‰ç©ºé–“ã®ä¸€è¦§ã¨ãれã«å¯¾å¿œã™ã‚‹ç”Ÿæˆç•ªå·ã€‚ゼロ以外㮠``maxSizeEventsFromGuest`` ã®åå‰ç©ºé–“ã®ã¿ãŒã“ã“ã«å­˜åœ¨ã™ã‚‹ã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1017 msgid "summary (vim.vm.Summary)" msgstr "summary (vim.vm.Summary)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1019 msgid "Basic information about the virtual machine." msgstr "仮想マシンã«é–¢ã™ã‚‹åŸºæœ¬æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1022 msgid "vm (vim.VirtualMachine, optional)" msgstr "vm (vim.VirtualMachine, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1024 msgid "Reference to the virtual machine managed object." msgstr "仮想マシン管ç†ã‚ªãƒ–ジェクトã¸ã®å‚照。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1029 msgid "Runtime and state information of a running virtual machine. Most of this information is also available when a virtual machine is powered off. In that case, it contains information from the last run, if available." msgstr "実行中ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ãŠã‚ˆã³çŠ¶æ…‹ã®æƒ…報。ã“ã®æƒ…å ±ã®ã»ã¨ã‚“ã©ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®é›»æºãŒåˆ‡ã‚ŒãŸã¨ãã«ã‚‚利用ã§ãã¾ã™ã€‚ãã®å ´åˆã¯ã€æœ€å¾Œã®å®Ÿè¡Œã‹ã‚‰ã®æƒ…å ± (利用å¯èƒ½ãªå ´åˆ) ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1034 msgid "guest (vim.vm.Summary.GuestSummary, optional)" msgstr "guest (vim.vm.Summary.GuestSummary, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1036 msgid "Guest operating system and VMware Tools information." msgstr "ゲストオペレーティングシステムãŠã‚ˆã³ VMware Tool ã®æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1039 msgid "config (vim.vm.Summary.ConfigSummary)" msgstr "config (vim.vm.Summary.ConfigSummary)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1041 msgid "Basic configuration information about the virtual machine. This information is not available when the virtual machine is unavailable, for instance, when it is being created or deleted." msgstr "仮想マシンã®åŸºæœ¬çš„ãªè¨­å®šæƒ…å ±ã§ã™ã€‚ã“ã®æƒ…å ±ã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ã®ä½œæˆæ™‚や削除時ãªã©ã€ä»®æƒ³ãƒžã‚·ãƒ³ãŒåˆ©ç”¨ã§ããªã„ã¨ãã«ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1045 msgid "storage (vim.vm.Summary.StorageSummary, optional)" msgstr "storage (vim.vm.Summary.StorageSummary, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1047 msgid "Storage information of the virtual machine." msgstr "仮想マシンã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸æƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1050 msgid "quickStats (vim.vm.Summary.QuickStats)" msgstr "quickStats (vim.vm.Summary.QuickStats)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1052 msgid "A set of statistics that are typically updated with near real-time regularity." msgstr "通常ã€ã»ã¼ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ æ­£è¦è¡¨ç¾ã§æ›´æ–°ã•れる統計セット。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1057 msgid "Overall alarm status on this node." msgstr "ã“ã®ãƒŽãƒ¼ãƒ‰ã®å…¨ä½“çš„ãªã‚¢ãƒ©ãƒ¼ãƒ çŠ¶æ…‹ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1060 msgid "customValue (vim.CustomFieldsManager.Value, optional)" msgstr "customValue (vim.CustomFieldsManager.Value, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1066 msgid "datastore (vim.Datastore)" msgstr "datastore (vim.Datastore)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1068 msgid "A collection of references to the subset of datastore objects in the datacenter that is used by the virtual machine." msgstr "仮想マシンãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã‚ªãƒ–ジェクトã®ã‚µãƒ–セットã¸ã®å‚ç…§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1071 msgid "info (vim.Datastore.Info)" msgstr "info (vim.Datastore.Info)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1073 msgid "Specific information about the datastore." msgstr "データストアã«é–¢ã™ã‚‹å…·ä½“çš„ãªæƒ…報。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1076 msgid "summary (vim.Datastore.Summary)" msgstr "summary (vim.Datastore.Summary)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1078 msgid "Global properties of the datastore." msgstr "データストアã®ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ—ロパティー。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1081 msgid "host (vim.Datastore.HostMount)" msgstr "host (vim.Datastore.HostMount)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1083 msgid "Hosts attached to this datastore." msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã«æŽ¥ç¶šã•れãŸãƒ›ã‚¹ãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1088 msgid "Virtual machines stored on this datastore." msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã«ä¿å­˜ã•れã¦ã„る仮想マシン。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1091 msgid "browser (vim.host.DatastoreBrowser)" msgstr "browser (vim.host.DatastoreBrowser)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1093 msgid "DatastoreBrowser used to browse this datastore." msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã®é–²è¦§ã«ä½¿ç”¨ã™ã‚‹ DatastoreBrowser。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1096 msgid "capability (vim.Datastore.Capability)" msgstr "capability (vim.Datastore.Capability)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1098 msgid "Capabilities of this datastore." msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã®æ©Ÿèƒ½ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1101 msgid "iormConfiguration (vim.StorageResourceManager.IORMConfigInfo)" msgstr "iormConfiguration (vim.StorageResourceManager.IORMConfigInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1103 msgid "Configuration of storage I/O resource management for the datastore. Currently VMware only support storage I/O resource management on VMFS volumes of a datastore. This configuration may not be available if the datastore is not accessible from any host, or if the datastore does not have VMFS volume." msgstr "データストアã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ I/O リソース管ç†ã®è¨­å®šã€‚ç¾åœ¨ã€VMware ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã® VMFS ボリュームã§ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ I/O リソース管ç†ã®ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ãŒã„ãšã‚Œã‹ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã‚„ã€ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ã« VMFS ボリュームãŒãªã„å ´åˆã«ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1108 msgid "network (vim.Network)" msgstr "network (vim.Network)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1110 msgid "A collection of references to the subset of network objects in the datacenter that is used by the virtual machine." msgstr "仮想マシンãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼å†…ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚ªãƒ–ジェクトã®ã‚µãƒ–セットã¸ã®å‚ç…§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1115 msgid "Name of this network." msgstr "ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®åå‰ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1118 msgid "summary (vim.Network.Summary)" msgstr "summary (vim.Network.Summary)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1120 msgid "Properties of a network." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒ—ロパティー。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1123 msgid "host (vim.HostSystem)" msgstr "host (vim.HostSystem)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1125 msgid "Hosts attached to this network." msgstr "ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã•れãŸãƒ›ã‚¹ãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1130 msgid "Virtual machines using this network." msgstr "ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’使用ã™ã‚‹ä»®æƒ³ãƒžã‚·ãƒ³ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1134 msgid "snapshot (vim.vm.SnapshotInfo)" msgstr "snapshot (vim.vm.SnapshotInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1136 msgid "Current snapshot and tree. The property is valid if snapshots have been created for the virtual machine." msgstr "ç¾åœ¨ã®ã‚¹ãƒŠãƒƒãƒ—ショットãŠã‚ˆã³ãƒ„リー。ã“ã®ãƒ—ロパティーã¯ã€ä»®æƒ³ãƒžã‚·ãƒ³ç”¨ã«ã‚¹ãƒŠãƒƒãƒ—ショットãŒä½œæˆã•れãŸå ´åˆã«æœ‰åйã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1140 msgid "currentSnapshot (vim.vm.Snapshot, optional)" msgstr "currentSnapshot (vim.vm.Snapshot, optional)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1142 msgid "Current snapshot of the virtual machine. This property is set by calling ``Snapshot.revert`` or ``VirtualMachine.createSnapshot``. This property will be empty when the working snapshot is at the root of the snapshot tree." msgstr "仮想マシンã®ç¾åœ¨ã®ã‚¹ãƒŠãƒƒãƒ—ショット。ã“ã®ãƒ—ロパティーã¯ã€``Snapshot.revert`` ã¾ãŸã¯ ``VirtualMachine.createSnapshot`` を呼ã³å‡ºã™ã“ã¨ã§è¨­å®šã•れã¾ã™ã€‚ã“ã®ãƒ—ロパティーã¯ã€ä½œæ¥­ã‚¹ãƒŠãƒƒãƒ—ショットãŒã‚¹ãƒŠãƒƒãƒ—ショットツリーã®ãƒ«ãƒ¼ãƒˆã«ã‚ã‚‹ã¨ç©ºã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1146 msgid "rootSnapshotList (vim.vm.SnapshotTree)" msgstr "rootSnapshotList (vim.vm.SnapshotTree)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1148 msgid "Data for the entire set of snapshots for one virtual machine." msgstr "1 å°ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®å…¨ã‚»ãƒƒãƒˆã®ãƒ‡ãƒ¼ã‚¿ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1151 msgid "rootSnapshot (vim.vm.Snapshot)" msgstr "rootSnapshot (vim.vm.Snapshot)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1153 msgid "The roots of all snapshot trees for the virtual machine." msgstr "仮想マシンã®ã™ã¹ã¦ã®ã‚¹ãƒŠãƒƒãƒ—ショットツリーã®ãƒ«ãƒ¼ãƒˆã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1156 msgid "config (vim.vm.ConfigInfo)" msgstr "config (vim.vm.ConfigInfo)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1158 msgid "Information about the configuration of the virtual machine when this snapshot was taken. The datastore paths for the virtual machine disks point to the head of the disk chain that represents the disk at this given snapshot." msgstr "ã“ã®ã‚¹ãƒŠãƒƒãƒ—ショットãŒå–ã‚‰ã‚ŒãŸæ™‚点ã®ä»®æƒ³ãƒžã‚·ãƒ³ã®è¨­å®šã«é–¢ã™ã‚‹æƒ…報。仮想マシンディスクã®ãƒ‡ãƒ¼ã‚¿ã‚¹ãƒˆã‚¢ãƒ‘スã¯ã€ã“ã®æŒ‡å®šã—ãŸã‚¹ãƒŠãƒƒãƒ—ショットã®ãƒ‡ã‚£ã‚¹ã‚¯ã‚’表ã™ãƒ‡ã‚£ã‚¹ã‚¯ãƒã‚§ãƒ¼ãƒ³ã®ãƒ˜ãƒƒãƒ‰ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1162 msgid "childSnapshot (vim.vm.Snapshot)" msgstr "childSnapshot (vim.vm.Snapshot)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1164 msgid "All snapshots for which this snapshot is the parent." msgstr "ã“ã®ã‚¹ãƒŠãƒƒãƒ—ショットãŒè¦ªã§ã‚ã‚‹ã™ã¹ã¦ã®ã‚¹ãƒŠãƒƒãƒ—ショット。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1167 msgid "guestHeartbeatStatus (vim.ManagedEntity.Status)" msgstr "guestHeartbeatStatus (vim.ManagedEntity.Status)" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1169 msgid "The guest heartbeat." msgstr "ゲストã®ãƒãƒ¼ãƒˆãƒ“ート。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst:1177 msgid "rst/scenario_guides/guide_vmware.rst" msgstr "rst/scenario_guides/guide_vmware.rst" #: ../../rst/scenario_guides/vmware_scenarios/vmware_module_reference.rst:7 msgid "Ansible VMware Module Guide" msgstr "Ansible VMware モジュールガイド" #: ../../rst/scenario_guides/vmware_scenarios/vmware_module_reference.rst:9 msgid "This will be a listing similar to the module index in our core docs." msgstr "ã“ã“ã§ã¯ã€ã‚³ã‚¢ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¨åŒæ§˜ã®ãƒªã‚¹ãƒˆã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:5 msgid "VMware Prerequisites" msgstr "VMware ã®è¦ä»¶" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:11 msgid "Installing SSL Certificates" msgstr "SSL 証明書ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:13 msgid "All vCenter and ESXi servers require SSL encryption on all connections to enforce secure communication. You must enable SSL encryption for Ansible by installing the server's SSL certificates on your Ansible control node or delegate node." msgstr "ã™ã¹ã¦ã® vCenter サーãƒãƒ¼ãŠã‚ˆã³ ESXi サーãƒãƒ¼ã§ã¯ã€å®‰å…¨ãªé€šä¿¡ã‚’実ç¾ã™ã‚‹ãŸã‚ã«ã€ã™ã¹ã¦ã®æŽ¥ç¶šã« SSL æš—å·åŒ–ãŒå¿…è¦ã§ã™ã€‚サーãƒãƒ¼ã® SSL 証明書を Ansible コントロールノードã¾ãŸã¯å§”譲ノードã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã€Ansible ã® SSL æš—å·åŒ–を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:15 msgid "If the SSL certificate of your vCenter or ESXi server is not correctly installed on your Ansible control node, you will see the following warning when using Ansible VMware modules:" msgstr "vCenter サーãƒãƒ¼ã¾ãŸã¯ ESXi サーãƒãƒ¼ã® SSL 証明書㌠Ansible ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«æ­£ã—ãインストールã•れã¦ã„ãªã„å ´åˆã¯ã€Ansible VMware モジュールを使用ã™ã‚‹éš›ã«ä»¥ä¸‹ã®è­¦å‘ŠãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:17 msgid "``Unable to connect to vCenter or ESXi API at xx.xx.xx.xx on TCP/443: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)``" msgstr "``Unable to connect to vCenter or ESXi API at xx.xx.xx.xx on TCP/443: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)``" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:19 msgid "To install the SSL certificate for your VMware server, and run your Ansible VMware modules in encrypted mode, please follow the instructions for the server you are running with VMware." msgstr "VMware サーãƒãƒ¼ã« SSL 証明書をインストールã—ã€Ansible VMware モジュールを暗å·åŒ–モードã§å®Ÿè¡Œã™ã‚‹ã«ã¯ã€VMware ã§å®Ÿè¡Œã—ã¦ã„るサーãƒãƒ¼ã®æ‰‹é †ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:22 msgid "Installing vCenter SSL certificates for Ansible" msgstr "Ansible 用㮠vCenter SSL 証明書ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:24 msgid "From any web browser, go to the base URL of the vCenter Server without port number like ``https://vcenter-domain.example.com``" msgstr "ä»»æ„ã® Web ブラウザーã‹ã‚‰ã€``https://vcenter-domain.example.com`` ãªã©ãƒãƒ¼ãƒˆç•ªå·ã®ãªã„ vCenter Server ã®ãƒ™ãƒ¼ã‚¹ URL ã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:26 msgid "Click the \"Download trusted root CA certificates\" link at the bottom of the grey box on the right and download the file." msgstr "å³å´ã®ç°è‰²ã®é ˜åŸŸã®ä¸‹éƒ¨ã«ã‚る「Download trusted root CA certificates (ä¿¡é ¼ã•れãŸãƒ«ãƒ¼ãƒˆ CA 証明書ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰)ã€ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã€ãƒ•ァイルをダウンロードã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:28 msgid "Change the extension of the file to .zip. The file is a ZIP file of all root certificates and all CRLs." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå­ã‚’ .zip ã«å¤‰æ›´ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã™ã¹ã¦ã®ãƒ«ãƒ¼ãƒˆè¨¼æ˜Žæ›¸ã¨ã™ã¹ã¦ã® CRL ãŒå«ã¾ã‚Œã‚‹ ZIP ファイルã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:30 msgid "Extract the contents of the zip file. The extracted directory contains a ``.certs`` directory that contains two types of files. Files with a number as the extension (.0, .1, and so on) are root certificates." msgstr "zip ファイルã®å†…容を展開ã—ã¾ã™ã€‚展開ã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã¯ã€ä¸¡ã‚¿ã‚¤ãƒ—ã®ãƒ•ァイルãŒå«ã¾ã‚Œã‚‹ ``.certs`` ディレクトリーãŒå«ã¾ã‚Œã¾ã™ã€‚æ•°å­—ãŒæ‹¡å¼µå­ (.0ã€.1 ãªã©) ã«ãªã£ã¦ã„るファイルã¯ã€ãƒ«ãƒ¼ãƒˆè¨¼æ˜Žæ›¸ã§ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:32 msgid "Install the certificate files are trusted certificates by the process that is appropriate for your operating system." msgstr "証明書ファイルをã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«é©ã—ãŸãƒ—ロセスã§ä¿¡é ¼ã•れã¦ã„る証明書ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:36 msgid "Installing ESXi SSL certificates for Ansible" msgstr "Ansible 用㮠ESXi SSL 証明書ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:38 msgid "Enable SSH Service on ESXi either by using Ansible VMware module `vmware_host_service_manager `_ or manually using vSphere Web interface." msgstr "Ansible VMware モジュール `vmware_host_service_manager `_ を使用ã™ã‚‹ã‹ã€vSphere Web インターフェースを手動ã§ä½¿ç”¨ã—ã¦ã€ESXi ã§ SSH サービスを有効ã«ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:40 msgid "SSH to ESXi server using administrative credentials, and navigate to directory ``/etc/vmware/ssl``" msgstr "管ç†èªè¨¼æƒ…報を使用ã—㦠ESXi サーãƒãƒ¼ã« SSH 接続ã—ã€``/etc/vmware/ssl`` ディレクトリーã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:42 msgid "Secure copy (SCP) ``rui.crt`` located in ``/etc/vmware/ssl`` directory to Ansible control node." msgstr "``/etc/vmware/ssl`` ディレクトリーã«ã‚ã‚‹ SCP (Secure Copy) ``rui.crt`` ã‚’ Ansible コントロールノードã¸ç½®ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:44 msgid "Install the certificate file by the process that is appropriate for your operating system." msgstr "オペレーティングシステムã«é©ã—ãŸãƒ—ロセスã§ã€è¨¼æ˜Žæ›¸ãƒ•ァイルをインストールã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:47 msgid "Using custom path for SSL certificates" msgstr "SSL 証明書ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ‘スã®ä½¿ç”¨" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:49 msgid "If you need to use a custom path for SSL certificates, you can set the ``REQUESTS_CA_BUNDLE`` environment variable in your playbook." msgstr "SSL 証明書ã«ã‚«ã‚¹ã‚¿ãƒ ãƒ‘スを使用ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆã¯ã€Playbook ã« ``REQUESTS_CA_BUNDLE`` 環境変数を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:51 msgid "For example, if ``/var/vmware/certs/vcenter1.crt`` is the SSL certificate for your vCenter Server, you can use the :ref:`environment ` keyword to pass it to the modules:" msgstr "ãŸã¨ãˆã°ã€``/var/vmware/certs/vcenter1.crt`` ㌠vCenter Server ã® SSL 証明書ã§ã‚ã‚‹å ´åˆã¯ã€:ref:`environment ` キーワードを使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_requirements.rst:64 msgid "There is a `known issue `_ in ``requests`` library (version 2) which you may want to consider when using this environment variable. Basically, setting ``REQUESTS_CA_BUNDLE`` environment variable on managed nodes overrides the ``validate_certs`` value. This may result in unexpected behavior while running the playbook. Please see `community.vmware issue 601 `_ and `vmware issue 254 `_ for more information." msgstr "``requests`` ライブラリー (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã«ã¯ `既知ã®å•題 `_ ãŒã‚りã€ã“ã®ç’°å¢ƒå¤‰æ•°ã‚’使用ã™ã‚‹éš›ã«æ¤œè¨Žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚基本的ã«ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ ``REQUESTS_CA_BUNDLE`` 環境変数を設定ã™ã‚‹ã¨ã€``validate_certs`` ã®å€¤ãŒä¸Šæ›¸ãã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Playbook ã®å®Ÿè¡Œä¸­ã«äºˆæœŸã—ãªã„動作ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚詳細ã¯ã€`community.vmware issue 601 `_ ãŠã‚ˆã³ `vmware issue 254 `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_scenarios.rst:5 msgid "Ansible for VMware Scenarios" msgstr "VMware シナリオã«ãŠã‘ã‚‹ Ansible" #: ../../rst/scenario_guides/vmware_scenarios/vmware_scenarios.rst:7 msgid "These scenarios teach you how to accomplish common VMware tasks using Ansible. To get started, please select the task you want to accomplish." msgstr "以下ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€Ansible を使用ã—ã¦ä¸€èˆ¬çš„㪠VMware タスクを実行ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚最åˆã«ã€å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:5 msgid "Troubleshooting Ansible for VMware" msgstr "Ansible for VMware ã®ãƒˆãƒ©ãƒ–ルシューティング" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:10 msgid "This section lists things that can go wrong and possible ways to fix them." msgstr "本セクションã§ã¯ã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‚‚ã®ã¨ã€ãã®ä¿®æ­£æ–¹æ³•を紹介ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:13 msgid "Debugging Ansible for VMware" msgstr "Ansible for VMware ã®ãƒ‡ãƒãƒƒã‚°" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:15 msgid "When debugging or creating a new issue, you will need information about your VMware infrastructure. You can get this information using `govc `_, For example:" msgstr "æ–°ã—ã„å•題をデãƒãƒƒã‚°ã¾ãŸã¯ä½œæˆã™ã‚‹å ´åˆã¯ã€VMware インフラストラクãƒãƒ£ãƒ¼ã«é–¢ã™ã‚‹æƒ…å ±ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ã“ã®æƒ…å ±ã¯ã€`govc `_ を使用ã—ã¦å–å¾—ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:27 msgid "Known issues with Ansible for VMware" msgstr "Ansible for VMware ã«é–¢ã™ã‚‹æ—¢çŸ¥ã®å•題" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:31 msgid "Network settings with vmware_guest in Ubuntu 18.04" msgstr "Ubuntu 18.04 ã§ vmware_guest を使用ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®š" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:33 msgid "Setting the network with ``vmware_guest`` in Ubuntu 18.04 is known to be broken, due to missing support for ``netplan`` in the ``open-vm-tools``. This issue is tracked via:" msgstr "``open-vm-tools`` ã« ``netplan`` ã®ã‚µãƒãƒ¼ãƒˆãŒãªã„ãŸã‚ã€Ubuntu 18.04 ã§ ``vmware_guest`` を使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’設定ã™ã‚‹ã¨ç ´æã™ã‚‹ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ã“れã¯ä»¥ä¸‹ã®å•題ã§è¿½è·¡ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:36 msgid "https://github.com/vmware/open-vm-tools/issues/240" msgstr "https://github.com/vmware/open-vm-tools/issues/240" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:37 msgid "https://github.com/ansible/ansible/issues/41133" msgstr "https://github.com/ansible/ansible/issues/41133" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:40 msgid "Potential Workarounds" msgstr "潜在的ãªå›žé¿ç­–" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:42 msgid "There are several workarounds for this issue." msgstr "ã“ã®å•題ã«ã¯ã€è¤‡æ•°ã®å›žé¿ç­–ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:44 msgid "Modify the Ubuntu 18.04 images and installing ``ifupdown`` in them via ``sudo apt install ifupdown``. If so you need to remove ``netplan`` via ``sudo apt remove netplan.io`` and you need stop ``systemd-networkd`` via ``sudo systemctl disable systemctl-networkd``." msgstr "Ubuntu 18.04 イメージを変更ã—ã€``sudo apt install ifupdown`` ã§ ``ifupdown`` をインストールã—ã¾ã™ã€‚ã“ã®å ´åˆã€``sudo apt remove netplan.io`` ã‹ã‚‰ ``netplan`` を削除ã—ã¦ã€``sudo systemctl disable systemctl-networkd`` ã§ ``systemd-networkd`` ã‚’åœæ­¢ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:47 msgid "Generate the ``systemd-networkd`` files with a task in your VMware Ansible role:" msgstr "VMware Ansible ロールã§ã‚¿ã‚¹ã‚¯ã‚’使用ã—㦠``systemd-networkd`` ファイルを生æˆã—ã¾ã™ã€‚" #: ../../rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst:103 msgid "Wait for ``netplan`` support in ``open-vm-tools``" msgstr "``open-vm-tools`` ã§ ``netplan`` ãŒã‚µãƒãƒ¼ãƒˆã•れるã®ã‚’å¾…ã¡ã¾ã™ã€‚" #~ msgid "To use an Azure Cloud other than the default public cloud (eg, Azure China Cloud, Azure US Government Cloud, Azure Stack), pass the \"cloud_environment\" argument to modules, configure it in a credential profile, or set the \"AZURE_CLOUD_ENVIRONMENT\" environment variable. The value is either a cloud name as defined by the Azure Python SDK (eg, \"AzureChinaCloud\", \"AzureUSGovernment\"; defaults to \"AzureCloud\") or an Azure metadata discovery URL (for Azure Stack)." #~ msgstr "" #~ msgid "An Azure module is available to help you create a storage account, virtual network, subnet, network interface, security group and public IP. Here is a full example of creating each of these and passing the names to the azure_rm_virtualmachine module at the end:" #~ msgstr "" #~ msgid "When creating a VM with the ``azure_rm_virtualmachine`` module, you need to explicitly set the ``managed_disk_type`` parameter to change the OS disk to a managed disk. Otherwise, the OS disk becomes an unmanaged disk.." #~ msgstr "" #~ msgid "When you create a data disk with the ``azure_rm_manageddisk`` module, you need to explicitly specify the ``storage_account_type`` parameter to make it a managed disk. Otherwise, the data disk will be an unmanaged disk." #~ msgstr "" #~ msgid "A managed disk does not require a storage account or a storage container, unlike a n unmanaged disk. In particular, note that once a VM is created on an unmanaged disk, an unnecessary storage container named \"vhds\" is automatically created." #~ msgstr "" #~ msgid "When you create an IP address with the ``azure_rm_publicipaddress`` module, you must set the ``sku`` parameter to ``standard``. Otherwise, the IP address cannot be used in an availability zone." #~ msgstr "" #~ msgid "cs also includes a command line interface for ad-hoc interaction with the CloudStack API, for example ``$ cs listVirtualMachines state=Running``." #~ msgstr "" #~ msgid "Ansible offers the following modules for orchestrating Docker containers:" #~ msgstr "" #~ msgid "docker_compose" #~ msgstr "" #~ msgid "Use your existing Docker compose files to orchestrate containers on a single Docker daemon or on Swarm. Supports compose versions 1 and 2." #~ msgstr "" #~ msgid "docker_container" #~ msgstr "" #~ msgid "Manages the container lifecycle by providing the ability to create, update, stop, start and destroy a container." #~ msgstr "" #~ msgid "docker_image" #~ msgstr "" #~ msgid "Provides full control over images, including: build, pull, push, tag and remove." #~ msgstr "" #~ msgid "docker_image_info" #~ msgstr "" #~ msgid "Inspects one or more images in the Docker host's image cache, providing the information for making decision or assertions in a playbook." #~ msgstr "" #~ msgid "docker_login" #~ msgstr "" #~ msgid "Authenticates with Docker Hub or any Docker registry and updates the Docker Engine config file, which in turn provides password-free pushing and pulling of images to and from the registry." #~ msgstr "" #~ msgid "docker (dynamic inventory)" #~ msgstr "" #~ msgid "Dynamically builds an inventory of all the available containers from a set of one or more Docker hosts." #~ msgstr "" #~ msgid "Ansible 2.1.0 includes major updates to the Docker modules, marking the start of a project to create a complete and integrated set of tools for orchestrating containers. In addition to the above modules, we are also working on the following:" #~ msgstr "" #~ msgid "There's more planned. See the latest ideas and thinking at the `Ansible proposal repo `_." #~ msgstr "" #~ msgid "Using the docker modules requires having the `Docker SDK for Python `_ installed on the host running Ansible. You will need to have >= 1.7.0 installed. For Python 2.7 or Python 3, you can install it as follows:" #~ msgstr "" #~ msgid "Please note that only one of ``docker`` and ``docker-py`` must be installed. Installing both will result in a broken installation. If this happens, Ansible will detect it and inform you about it::" #~ msgstr "" #~ msgid "The docker_compose module also requires `docker-compose `_" #~ msgstr "" #~ msgid "You can connect to a local or remote API using parameters passed to each task or by setting environment variables. The order of precedence is command line parameters and then environment variables. If neither a command line option or an environment variable is found, a default value will be used. The default values are provided under `Parameters`_" #~ msgstr "" #~ msgid "Control how modules connect to the Docker API by passing the following parameters:" #~ msgstr "" #~ msgid "The URL or Unix socket path used to connect to the Docker API. Defaults to ``unix://var/run/docker.sock``. To connect to a remote host, provide the TCP connection string. For example: ``tcp://192.0.2.23:2376``. If TLS is used to encrypt the connection to the API, then the module will automatically replace 'tcp' in the connection URL with 'https'." #~ msgstr "" #~ msgid "Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Defaults to False." #~ msgstr "" #~ msgid "tls_verify" #~ msgstr "" #~ msgid "Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server. Default is False." #~ msgstr "" #~ msgid "When verifying the authenticity of the Docker Host server, provide the expected name of the server. Defaults to 'localhost'." #~ msgstr "" #~ msgid "Provide a valid SSL version number. Default value determined by docker-py, which at the time of this writing was 1.0" #~ msgstr "" #~ msgid "Control how the modules connect to the Docker API by setting the following variables in the environment of the host running Ansible:" #~ msgstr "" #~ msgid "The inventory script generates dynamic inventory by making API requests to one or more Docker APIs. It's dynamic because the inventory is generated at run-time rather than being read from a static file. The script generates the inventory by connecting to one or many Docker APIs and inspecting the containers it finds at each API. Which APIs the script contacts can be defined using environment variables or a configuration file." #~ msgstr "" #~ msgid "Groups" #~ msgstr "" #~ msgid "The script will create the following host groups:" #~ msgstr "" #~ msgid "container id" #~ msgstr "" #~ msgid "container name" #~ msgstr "" #~ msgid "container short id" #~ msgstr "" #~ msgid "image_name (image_)" #~ msgstr "" #~ msgid "running" #~ msgstr "" #~ msgid "stopped" #~ msgstr "" #~ msgid "You can run the script interactively from the command line or pass it as the inventory to a playbook. Here are few examples to get you started:" #~ msgstr "" #~ msgid "You can control the behavior of the inventory script by defining environment variables, or creating a docker.yml file (sample provided in https://raw.githubusercontent.com/ansible-collections/community.general/main/scripts/inventory/docker.py). The order of precedence is the docker.yml file and then environment variables." #~ msgstr "" #~ msgid "To connect to a single Docker API the following variables can be defined in the environment to control the connection options. These are the same environment variables used by the Docker modules." #~ msgstr "" #~ msgid "The URL or Unix socket path used to connect to the Docker API. Defaults to unix://var/run/docker.sock." #~ msgstr "" #~ msgid "DOCKER_API_VERSION:" #~ msgstr "" #~ msgid "DOCKER_TIMEOUT:" #~ msgstr "" #~ msgid "DOCKER_TLS:" #~ msgstr "" #~ msgid "DOCKER_TLS_VERIFY:" #~ msgstr "" #~ msgid "Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server. Default is False" #~ msgstr "" #~ msgid "DOCKER_TLS_HOSTNAME:" #~ msgstr "" #~ msgid "When verifying the authenticity of the Docker Host server, provide the expected name of the server. Defaults to localhost." #~ msgstr "" #~ msgid "DOCKER_CERT_PATH:" #~ msgstr "" #~ msgid "DOCKER_SSL_VERSION:" #~ msgstr "" #~ msgid "In addition to the connection variables there are a couple variables used to control the execution and output of the script:" #~ msgstr "" #~ msgid "DOCKER_CONFIG_FILE" #~ msgstr "" #~ msgid "Path to the configuration file. Defaults to ./docker.yml." #~ msgstr "" #~ msgid "DOCKER_PRIVATE_SSH_PORT:" #~ msgstr "" #~ msgid "The private port (container port) on which SSH is listening for connections. Defaults to 22." #~ msgstr "" #~ msgid "DOCKER_DEFAULT_IP:" #~ msgstr "" #~ msgid "The IP address to assign to ansible_host when the container's SSH port is mapped to interface '0.0.0.0'." #~ msgstr "" #~ msgid "Configuration File" #~ msgstr "" #~ msgid "Using a configuration file provides a means for defining a set of Docker APIs from which to build an inventory." #~ msgstr "" #~ msgid "The default name of the file is derived from the name of the inventory script. By default the script will look for basename of the script (in other words, docker) with an extension of '.yml'." #~ msgstr "" #~ msgid "You can also override the default name of the script by defining DOCKER_CONFIG_FILE in the environment." #~ msgstr "" #~ msgid "Here's what you can define in docker_inventory.yml:" #~ msgstr "" #~ msgid "defaults" #~ msgstr "" #~ msgid "Defines a default connection. Defaults will be taken from this and applied to any values not provided for a host defined in the hosts list." #~ msgstr "" #~ msgid "hosts" #~ msgstr "" #~ msgid "If you wish to get inventory from more than one Docker host, define a hosts list." #~ msgstr "" #~ msgid "For the default host and each host in the hosts list define the following attributes:" #~ msgstr "" #~ msgid "Here is a basic example of provisioning an instance in ad-hoc mode:" #~ msgstr "" #~ msgid "`#ansible-network `_" #~ msgstr "`#ansible-network `_" #~ msgid "The #ansible-network IRC chat channel on Freenode.net." #~ msgstr "Freenode.net ã® IRC ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (#ansible-network)" #~ msgid "All of the modules require and are tested against recent versions of boto, usually boto3. Check the module documentation for the minimum required version for each module. You must have the boto3 Python module installed on your control machine. You may also need the original boto package. You can install these modules from your OS distribution or using the python package installer: ``pip install boto3``." #~ msgstr "モジュールã¯ã™ã¹ã¦å¿…è¦ã§ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® botoã€é€šå¸¸ã¯ boto3 ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã•れã¦ã„ã¾ã™ã€‚å„モジュールã«å¿…è¦ãªæœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¤ã„ã¦ã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’確èªã—ã¾ã™ã€‚boto3 ã® Python モジュールをコントロールマシンã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚元㮠boto パッケージもインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€OS ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‹ã€Python パッケージインストーラー ``pip install boto3`` を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "See the Packer documentation of the `Ansible local Packer provisioner `_ and `Ansible remote Packer provisioner `_." #~ msgstr "`Ansible ローカル Packer プロビジョナー `_ ãŠã‚ˆã³ `Ansible リモート Packer プロビジョナー `_ ã® Packer ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "`irc.freenode.net `_" #~ msgstr "`irc.freenode.net `_" #~ msgid "The Azure Resource Manager inventory script is called `azure_rm.py `_. It authenticates with the Azure API exactly the same as the Azure modules, which means you will either define the same environment variables described above in `Using Environment Variables`_, create a ``$HOME/.azure/credentials`` file (also described above in `Storing in a File`_), or pass command line parameters. To see available command line options execute the following:" #~ msgstr "Azure Resource Manager インベントリースクリプト㯠`azure_rm.py `_ ã¨å‘¼ã°ã‚Œã¾ã™ã€‚Azure API ã§ã®èªè¨¼ã¯ Azure モジュールã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œ`環境変数ã®ä½¿ç”¨`_ã€ã§èª¬æ˜Žã•れã¦ã„る環境変数ã¨åŒã˜ç’°å¢ƒå¤‰æ•°ã‚’定義ã™ã‚‹ã‹ã€``$HOME/.azure/credentials`` ファイルを作æˆã™ã‚‹ã‹ (「`ファイルã®ä¿å­˜`_ã€ã‚’å‚ç…§)ã€ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ‘ラメーターを渡ã—ã¾ã™ã€‚利用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションを表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #~ msgid "The `community.docker collection `_ offers several modules and plugins for orchestrating Docker containers and Docker Swarm." #~ msgstr "`community.docker collection `_ ã¯ã€è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã€Docker コンテナーãŠã‚ˆã³ Docker Swarm ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ç”¨ã®ãƒ—ラグインをæä¾›ã—ã¾ã™ã€‚" #~ msgid "Most of the modules and plugins in community.docker require the `Docker SDK for Python `_. The SDK needs to be installed on the machines where the modules and plugins are executed, and for the Python version(s) with which the modules and plugins are executed. You can use the :ref:`community.general.python_requirements_info module ` to make sure that the Docker SDK for Python is installed on the correct machine and for the Python version used by Ansible." #~ msgstr "community.docker ã«ãŠã‘ã‚‹ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã«ã¯ `Docker SDK for Python `_ ãŒå¿…è¦ã§ã™ã€‚モジュールã¨ãƒ—ラグインãŒå®Ÿè¡Œã™ã‚‹ãƒžã‚·ãƒ³ã« SDK をインストールã™ã‚‹å¿…è¦ãŒã‚りã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインãŒå®Ÿè¡Œã™ã‚‹ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ :ref:`community.general.python_requirements_info module ` を使用ã—ã¦ã€Docker SDK for Python ãŒæ­£ã—ã„マシンã«ã€Ansible ãŒä½¿ç”¨ã™ã‚‹ Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç”¨ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るよã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "Note that plugins (inventory plugins and connection plugins) are always executed in the context of Ansible itself. If you use a plugin that requires the Docker SDK for Python, you need to install it on the machine running ``ansible`` or ``ansible-playbook`` and for the same Python interpreter used by Ansible. To see which Python is used, run ``ansible --version``." #~ msgstr "プラグイン (インベントリープラグインãŠã‚ˆã³æŽ¥ç¶šãƒ—ラグイン) ã¯å¸¸ã« Ansible ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§å®Ÿè¡Œã•れã¾ã™ã€‚Python 用㮠Docker SDK ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ—ラグインを使用ã™ã‚‹å ´åˆã¯ã€``ansible`` ã¾ãŸã¯ ``ansible-playbook`` を実行ã—ã¦ã„るマシンã«ãƒ—ラグインをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚使用ã™ã‚‹ Python を確èªã™ã‚‹ã«ã¯ã€``ansible --version`` を実行ã—ã¾ã™ã€‚" #~ msgid "You can install the Docker SDK for Python for Python 2.7 or Python 3 as follows:" #~ msgstr "Python 2.7 ã¾ãŸã¯ Python 3 用㮠Docker SDK ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #~ msgid "For Python 2.6, you need a version before 2.0. For these versions, the SDK was called ``docker-py``, so you need to install it as follows:" #~ msgstr "Python 2.6 ã§ã¯ 2.0 よりもå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…è¦ã§ã™ã€‚ã“れらã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€SDK 㯠``docker-py`` ã¨å‘¼ã°ã‚Œã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "Please install only one of ``docker`` or ``docker-py``. Installing both will result in a broken installation. If this happens, Ansible will detect it and inform you about it. If that happens, you must uninstall both and reinstall the correct version." #~ msgstr "``docker`` ã¾ãŸã¯ ``docker-py`` ã®ã„ãšã‚Œã‹ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒç ´æã—ã¾ã™ã€‚ã“れãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れるã¨ã€Ansible ã«ã‚ˆã£ã¦æ¤œå‡ºã•れã€ãれã«ã¤ã„ã¦é€šçŸ¥ã•れã¾ã™ã€‚ãã®å ´åˆã¯ã€ä¸¡æ–¹ã‚’アンインストールã—ã¦å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "If in doubt, always install ``docker`` and never ``docker-py``." #~ msgstr "䏿˜Žãªå ´åˆã¯ã€å¸¸ã« ``docker`` をインストールã—ã€``docker-py`` ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã›ã‚“。" #~ msgid "Connecting to the Docker API" #~ msgstr "Docker API ã¸ã®æŽ¥ç¶š" #~ msgid "You can connect to a local or remote API using parameters passed to each task or by setting environment variables. The order of precedence is command line parameters and then environment variables. If neither a command line option nor an environment variable is found, Ansible uses the default value provided under `Parameters`_." #~ msgstr "å„ã‚¿ã‚¹ã‚¯ã«æ¸¡ã•れるパラメーターを使用ã™ã‚‹ã‹ã€ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¦ãƒ­ãƒ¼ã‚«ãƒ«ã¾ãŸã¯ãƒªãƒ¢ãƒ¼ãƒˆã® API ã«æŽ¥ç¶šã§ãã¾ã™ã€‚優先順ä½ã®é †ç•ªã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ‘ラメーターã¨ãã®ç’°å¢ƒå¤‰æ•°ã§ã™ã€‚コマンドラインオプションも環境変数も見ã¤ã‹ã‚‰ãªã„å ´åˆã€Ansible 㯠`Parameters`_ ã§æŒ‡å®šã—ãŸãƒ‡ãƒ•ォルト値を使用ã—ã¾ã™ã€‚" #~ msgid "Parameters" #~ msgstr "パラメーター" #~ msgid "Most plugins and modules can be configured by the following parameters:" #~ msgstr "ã»ã¨ã‚“ã©ã®ãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ä»¥ä¸‹ã®ãƒ‘ラメーターã§è¨­å®šã§ãã¾ã™ã€‚" #~ msgid "docker_host" #~ msgstr "docker_host" #~ msgid "The URL or Unix socket path used to connect to the Docker API. Defaults to ``unix://var/run/docker.sock``. To connect to a remote host, provide the TCP connection string (for example: ``tcp://192.0.2.23:2376``). If TLS is used to encrypt the connection to the API, then the module will automatically replace 'tcp' in the connection URL with 'https'." #~ msgstr "Docker API ã¸ã®æŽ¥ç¶šã«ä½¿ç”¨ã•れる URL ã¾ãŸã¯ Unix ソケットパス。デフォルト㯠``unix://var/run/docker.sock`` ã§ã™ã€‚ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹ã«ã¯ã€TCP 接続文字列を指定ã—ã¾ã™ (例: ``tcp://192.0.2.23:2376``)。TLS を使用ã—㦠API ã¸ã®æŽ¥ç¶šã‚’æš—å·åŒ–ã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€æŽ¥ç¶š URL 㮠「tcpã€ã‚’自動的ã«ã€Œhttpsã€ã«ç½®ãæ›ãˆã¾ã™ã€‚" #~ msgid "api_version" #~ msgstr "api_version" #~ msgid "The version of the Docker API running on the Docker Host. Defaults to the latest version of the API supported by the Docker SDK for Python installed." #~ msgstr "Docker Host 上ã§å®Ÿè¡Œã•れる Docker API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚デフォルトã§ã¯ã€Python 用㮠Docker SDK ã«ã‚ˆã£ã¦ã‚µãƒãƒ¼ãƒˆã•れる API ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«è¨­å®šã•れã¾ã™ã€‚" #~ msgid "The maximum amount of time in seconds to wait on a response from the API. Defaults to 60 seconds." #~ msgstr "API ã‹ã‚‰ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã§å¾…機ã™ã‚‹æœ€å¤§æ™‚é–“ (ç§’å˜ä½)。デフォルト㯠60 ç§’ã§ã™ã€‚" #~ msgid "tls" #~ msgstr "tls" #~ msgid "Secure the connection to the API by using TLS without verifying the authenticity of the Docker host server. Defaults to ``false``." #~ msgstr "Docker ホストサーãƒãƒ¼ã®ä¿¡é ¼æ€§ã‚’検証ã›ãšã« TLS を使用ã—㦠API ã¸ã®æŽ¥ç¶šã‚’ä¿è­·ã—ã¾ã™ã€‚デフォルト㯠``false`` ã§ã™ã€‚" #~ msgid "Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server. Default is ``false``." #~ msgstr "TLS を使用ã—ã€Docker ホストサーãƒãƒ¼ã®ä¿¡é ¼æ€§ã‚’検証ã—ã¦ã€API ã¸ã®æŽ¥ç¶šã‚’ä¿è­·ã—ã¾ã™ã€‚デフォルトã¯``false`` ã§ã™ã€‚" #~ msgid "cacert_path" #~ msgstr "cacert_path" #~ msgid "Use a CA certificate when performing server verification by providing the path to a CA certificate file." #~ msgstr "CA 証明書ファイルã¸ã®ãƒ‘スを指定ã—ã¦ã‚µãƒ¼ãƒãƒ¼ã®æ¤œè¨¼ã‚’実行ã™ã‚‹éš›ã« CA 証明書を使用ã—ã¾ã™ã€‚" #~ msgid "cert_path" #~ msgstr "cert_path" #~ msgid "Path to the client's TLS certificate file." #~ msgstr "クライアント㮠TLS 証明書ファイルã¸ã®ãƒ‘スã§ã™ã€‚" #~ msgid "key_path" #~ msgstr "key_path" #~ msgid "Path to the client's TLS key file." #~ msgstr "クライアント㮠TLS キーファイルã¸ã®ãƒ‘スã§ã™ã€‚" #~ msgid "tls_hostname" #~ msgstr "tls_hostname" #~ msgid "When verifying the authenticity of the Docker Host server, provide the expected name of the server. Defaults to ``localhost``." #~ msgstr "Docker Host サーãƒãƒ¼ã®ä¿¡é ¼æ€§ã‚’確èªã™ã‚‹éš›ã«ã€äºˆæƒ³ã•れるサーãƒãƒ¼åã‚’æä¾›ã—ã¾ã™ã€‚デフォルト㯠``localhost`` ã§ã™ã€‚" #~ msgid "ssl_version" #~ msgstr "ssl_version" #~ msgid "Provide a valid SSL version number. The default value is determined by the Docker SDK for Python." #~ msgstr "有効㪠SSL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’æä¾›ã—ã¾ã™ã€‚デフォルト値ã¯ã€Python ã® Docker SDK ã«ã‚ˆã‚Šæ±ºå®šã•れã¾ã™ã€‚" #~ msgid "You can also control how the plugins and modules connect to the Docker API by setting the following environment variables." #~ msgstr "以下ã®ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¦ã€ãƒ—ラグインãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ Docker API ã«æŽ¥ç¶šã™ã‚‹æ–¹æ³•を制御ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #~ msgid "For plugins, they have to be set for the environment Ansible itself runs in. For modules, they have to be set for the environment the modules are executed in. For modules running on remote machines, the environment variables have to be set on that machine for the user used to execute the modules with." #~ msgstr "プラグインã«ã¯ã€Ansible 自体ãŒå®Ÿè¡Œã™ã‚‹ç’°å¢ƒã«åˆã‚ã›ã¦è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モジュールã®å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå®Ÿè¡Œã™ã‚‹ç’°å¢ƒã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚リモートマシンã§å®Ÿè¡Œã—ã¦ã„るモジュールã®å ´åˆã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒžã‚·ãƒ³ã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "DOCKER_HOST" #~ msgstr "DOCKER_HOST" #~ msgid "The URL or Unix socket path used to connect to the Docker API." #~ msgstr "Docker API ã¸ã®æŽ¥ç¶šã«ä½¿ç”¨ã•れる URL ã¾ãŸã¯ Unix ソケットパス。" #~ msgid "DOCKER_API_VERSION" #~ msgstr "DOCKER_API_VERSION" #~ msgid "The version of the Docker API running on the Docker Host. Defaults to the latest version of the API supported by docker-py." #~ msgstr "Docker Host 上ã§å®Ÿè¡Œã™ã‚‹ Docker API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚デフォルトã§ã¯ã€docker-py ã§ã‚µãƒãƒ¼ãƒˆã•れる API ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«è¨­å®šã•れã¾ã™ã€‚" #~ msgid "DOCKER_TIMEOUT" #~ msgstr "DOCKER_TIMEOUT" #~ msgid "The maximum amount of time in seconds to wait on a response from the API." #~ msgstr "API ã‹ã‚‰ã®å¿œç­”ã§å¾…機ã™ã‚‹æœ€å¤§æ™‚é–“ (ç§’å˜ä½)。" #~ msgid "DOCKER_CERT_PATH" #~ msgstr "DOCKER_CERT_PATH" #~ msgid "Path to the directory containing the client certificate, client key and CA certificate." #~ msgstr "クライアント証明書ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚­ãƒ¼ã€ãŠã‚ˆã³ CA 証明書をå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¸ã®ãƒ‘ス。" #~ msgid "DOCKER_SSL_VERSION" #~ msgstr "DOCKER_SSL_VERSION" #~ msgid "Provide a valid SSL version number." #~ msgstr "有効㪠SSL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’指定ã—ã¾ã™ã€‚" #~ msgid "DOCKER_TLS" #~ msgstr "DOCKER_TLS" #~ msgid "Secure the connection to the API by using TLS without verifying the authenticity of the Docker Host." #~ msgstr "Docker ホストã®ä¿¡é ¼æ€§ã‚’検証ã›ãšã« TLS を使用ã—㦠API ã¸ã®æŽ¥ç¶šã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’ä¿è­·ã—ã¾ã™ã€‚" #~ msgid "DOCKER_TLS_VERIFY" #~ msgstr "DOCKER_TLS_VERIFY" #~ msgid "Secure the connection to the API by using TLS and verify the authenticity of the Docker Host." #~ msgstr "TLS を使用ã—㦠API ã¸ã®æŽ¥ç¶šã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’確ä¿ã—ã€Docker ホストã®ä¿¡é ¼æ€§ã‚’検証ã—ã¾ã™ã€‚" #~ msgid "Plain Docker daemon: images, networks, volumes, and containers" #~ msgstr "å˜ç´”㪠Docker デーモン: イメージã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒœãƒªãƒ¥ãƒ¼ãƒ ã€ãŠã‚ˆã³ã‚³ãƒ³ãƒ†ãƒŠãƒ¼" #~ msgid "For working with a plain Docker daemon, that is without Swarm, there are connection plugins, an inventory plugin, and several modules available:" #~ msgstr "Swarm を使用ã—ãªã„プレーン㪠Docker デーモンを使用ã™ã‚‹å ´åˆã¯ã€æŽ¥ç¶šãƒ—ラグインã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã€ãŠã‚ˆã³è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚" #~ msgid "docker connection plugin" #~ msgstr "Docker 接続プラグイン" #~ msgid "The :ref:`community.docker.docker connection plugin ` uses the Docker CLI utility to connect to Docker containers and execute modules in them. It essentially wraps ``docker exec`` and ``docker cp``. This connection plugin is supported by the :ref:`ansible.posix.synchronize module `." #~ msgstr ":ref:`community.docker.docker 接続プラグイン ` ã¯ã€Docker CLI ユーティリティーを使用ã—㦠Docker ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«æŽ¥ç¶šã—ã€ãã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚基本的㫠``docker exec`` 㨠``docker cp`` をラップã—ã¾ã™ã€‚ã“ã®æŽ¥ç¶šãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã¯ :ref:`ansible.posix.synchronize module ` ã«ã‚ˆã‚Šã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚" #~ msgid "docker_api connection plugin" #~ msgstr "docker_api connection プラグイン" #~ msgid "The :ref:`community.docker.docker_api connection plugin ` talks directly to the Docker daemon to connect to Docker containers and execute modules in them." #~ msgstr ":ref:`community.docker.docker_api 接続プラグイン ` 㯠Docker デーモンã«ç›´æŽ¥å¯¾è©±ã—ã€Docker ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«æŽ¥ç¶šã—ã€ãã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚" #~ msgid "docker_containers inventory plugin" #~ msgstr "docker_containers インベントリープラグイン" #~ msgid "The :ref:`community.docker.docker_containers inventory plugin ` allows you to dynamically add Docker containers from a Docker Daemon to your Ansible inventory. See :ref:`dynamic_inventory` for details on dynamic inventories." #~ msgstr ":ref:`community.docker.docker_containers インベントリープラグイン ` ã§ã¯ã€Docker Daemon ã‹ã‚‰ Ansible インベントリー㫠Docker コンテナーを動的ã«è¿½åŠ ã§ãã¾ã™ã€‚動的インベントリーã®è©³ç´°ã¯ã€ã€Œ:ref:`dynamic_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #~ msgid "The `docker inventory script `_ is deprecated. Please use the inventory plugin instead. The inventory plugin has several compatibility options. If you need to collect Docker containers from multiple Docker daemons, you need to add every Docker daemon as an individual inventory source." #~ msgstr "`Docker インベントリースクリプト `_ ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚りã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインを使用ã—ã¦ãã ã•ã„。インベントリープラグインã«ã¯ã€è¤‡æ•°ã®äº’æ›æ€§ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚複数㮠Docker デーモンã‹ã‚‰ Docker コンテナーをåŽé›†ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã® Docker デーモンを個別ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã¨ã—ã¦è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "docker_host_info module" #~ msgstr "docker_host_info モジュール" #~ msgid "The :ref:`community.docker.docker_host_info module ` allows you to retrieve information on a Docker daemon, such as all containers, images, volumes, networks and so on." #~ msgstr ":ref:`community.docker.docker_host_info モジュール ` ã§ã¯ã€ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ã€ãƒœãƒªãƒ¥ãƒ¼ãƒ ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãªã©ã€Docker ãƒ‡ãƒ¼ãƒ¢ãƒ³ã®æƒ…報をå–å¾—ã§ãã¾ã™ã€‚" #~ msgid "docker_login module" #~ msgstr "docker_login モジュール" #~ msgid "The :ref:`community.docker.docker_login module ` allows you to log in and out of a remote registry, such as Docker Hub or a private registry. It provides similar functionality to the ``docker login`` and ``docker logout`` CLI commands." #~ msgstr ":ref:`community.docker.docker_login モジュール ` ã§ã¯ã€Docker Hubã€ãƒ—ライベートレジストリーãªã©ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ¬ã‚¸ã‚¹ãƒˆãƒªãƒ¼ã¸ã®ãƒ­ã‚°ã‚¤ãƒ³ã€ãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆãƒ¬ã‚¸ã‚¹ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã§ãã¾ã™ã€‚CLI コマンド ``docker login`` ãŠã‚ˆã³ ``docker logout`` ã¨åŒæ§˜ã®æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #~ msgid "docker_prune module" #~ msgstr "docker_prune モジュール" #~ msgid "The :ref:`community.docker.docker_prune module ` allows you to prune no longer needed containers, images, volumes and so on. It provides similar functionality to the ``docker prune`` CLI command." #~ msgstr ":ref:`community.docker.docker_prune モジュール ` ã§ã¯ã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ã€ãƒœãƒªãƒ¥ãƒ¼ãƒ ãªã©ã¯å–り除ãã“ã¨ãŒã§ããªããªã‚Šã€CLI コマンド ``docker prune`` ã¨åŒæ§˜ã®æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #~ msgid "docker_image module" #~ msgstr "docker_image モジュール" #~ msgid "The :ref:`community.docker.docker_image module ` provides full control over images, including: build, pull, push, tag and remove." #~ msgstr ":ref:`community.docker.docker_image モジュール ` ã¯ã€buildã€pullã€pushã€tagã€remove ãªã©ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’完全ã«åˆ¶å¾¡ã—ã¾ã™ã€‚" #~ msgid "docker_image_info module" #~ msgstr "docker_image_info モジュール" #~ msgid "The :ref:`community.docker.docker_image_info module ` allows you to list and inspect images." #~ msgstr ":ref:`community.docker.docker_image_info モジュール ` を使用ã™ã‚‹ã¨ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’一覧表示ã—ã€æ¤œæŸ»ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "docker_network module" #~ msgstr "docker_network モジュール" #~ msgid "The :ref:`community.docker.docker_network module ` provides full control over Docker networks." #~ msgstr ":ref:`community.docker.docker_network モジュール ` ã¯ã€Docker ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’完全ã«åˆ¶å¾¡ã—ã¾ã™ã€‚" #~ msgid "docker_network_info module" #~ msgstr "docker_network_info モジュール" #~ msgid "The :ref:`community.docker.docker_network_info module ` allows you to inspect Docker networks." #~ msgstr ":ref:`community.docker.docker_network_info モジュール ` ã§ã¯ã€Docker ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "docker_volume_info module" #~ msgstr "docker_volume_info モジュール" #~ msgid "The :ref:`community.docker.docker_volume_info module ` provides full control over Docker volumes." #~ msgstr ":ref:`community.docker.docker_volume_info モジュール ` ã¯ã€Docker ボリュームを完全ã«åˆ¶å¾¡ã—ã¾ã™ã€‚" #~ msgid "docker_volume module" #~ msgstr "docker_volume モジュール" #~ msgid "The :ref:`community.docker.docker_volume module ` allows you to inspect Docker volumes." #~ msgstr ":ref:`community.docker.docker_volume モジュール ` を使用ã™ã‚‹ã¨ã€Docker ボリュームを検査ã§ãã¾ã™ã€‚" #~ msgid "docker_container module" #~ msgstr "docker_container モジュール" #~ msgid "The :ref:`community.docker.docker_container module ` manages the container lifecycle by providing the ability to create, update, stop, start and destroy a Docker container." #~ msgstr ":ref:`community.docker.docker_container モジュール ` ã¯ã€Docker コンテナーã®ä½œæˆã€æ›´æ–°ã€åœæ­¢ã€é–‹å§‹ã€ãŠã‚ˆã³ç ´æ£„ã®æ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹ã“ã¨ã§ã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã®ãƒ©ã‚¤ãƒ•サイクルを管ç†ã—ã¾ã™ã€‚" #~ msgid "docker_container_info module" #~ msgstr "docker_container_info モジュール" #~ msgid "The :ref:`community.docker.docker_container_info module ` allows you to inspect a Docker container." #~ msgstr ":ref:`community.docker.docker_container_info モジュール ` ã§ã¯ã€Docker コンテナーを検査ã§ãã¾ã™ã€‚" #~ msgid "Docker Compose" #~ msgstr "Docker Compose" #~ msgid "The :ref:`community.docker.docker_compose module ` allows you to use your existing Docker compose files to orchestrate containers on a single Docker daemon or on Swarm. Supports compose versions 1 and 2." #~ msgstr ":ref:`community.docker.docker_compose モジュール ` ã§ã¯ã€æ—¢å­˜ã® Docker Compose ファイルを使用ã—ã¦ã€å˜ä¸€ã® Docker デーモンã¾ãŸã¯ Swarm ã§ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã‚’オーケストレーションã§ãã¾ã™ã€‚Compose ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1 ãŠã‚ˆã³ 2 をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #~ msgid "Next to Docker SDK for Python, you need to install `docker-compose `_ on the remote machines to use the module." #~ msgstr "モジュールを使用ã™ã‚‹ã«ã¯ã€Python ã® Docker SDK ã®æ¬¡ã«ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã« `docker-compose `_ をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #~ msgid "Docker Machine" #~ msgstr "Docker マシン" #~ msgid "The :ref:`community.docker.docker_machine inventory plugin ` allows you to dynamically add Docker Machine hosts to your Ansible inventory." #~ msgstr ":ref:`community.docker.docker_machine inventory plugin ` ã§ã¯ã€Docker マシンホストを Ansible インベントリーã«å‹•çš„ã«è¿½åŠ ã§ãã¾ã™ã€‚" #~ msgid "Docker stack" #~ msgstr "Docker スタック" #~ msgid "The :ref:`community.docker.docker_stack module ` module allows you to control Docker stacks. Information on stacks can be retrieved by the :ref:`community.docker.docker_stack_info module `, and information on stack tasks can be retrieved by the :ref:`community.docker.docker_stack_task_info module `." #~ msgstr ":ref:`community.docker.docker_stack モジュール ` モジュールã«ã‚ˆã‚Šã€Docker スタックを制御ã§ãã¾ã™ã€‚ã‚¹ã‚¿ãƒƒã‚¯ã®æƒ…å ±ã¯ã€:ref:`community.docker.docker_stack_info モジュール ` ã§å–å¾—ã§ãã€ã‚¹ã‚¿ãƒƒã‚¯ã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹æƒ…報㯠:ref:`community.docker.docker_stack_task_info モジュール ` ã§å–å¾—ã§ãã¾ã™ã€‚" #~ msgid "Docker Swarm" #~ msgstr "Docker Swarm" #~ msgid "The community.docker collection provides multiple plugins and modules for managing Docker Swarms." #~ msgstr "community.docker コレクションã¯ã€Docker Swarm を管ç†ã™ã‚‹ãŸã‚ã®è¤‡æ•°ã®ãƒ—ラグインã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã—ã¾ã™ã€‚" #~ msgid "Swarm management" #~ msgstr "Swarm 管ç†" #~ msgid "One inventory plugin and several modules are provided to manage Docker Swarms:" #~ msgstr "Docker Swarms を管ç†ã™ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã¨è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæä¾›ã•れã¾ã™ã€‚" #~ msgid "docker_swarm inventory plugin" #~ msgstr "docker_swarm インベントリープラグイン" #~ msgid "The :ref:`community.docker.docker_swarm inventory plugin ` allows you to dynamically add all Docker Swarm nodes to your Ansible inventory." #~ msgstr ":ref:`community.docker.docker_swarm インベントリープラグイン ` ã«ã‚ˆã‚Šã€ã™ã¹ã¦ã® Docker Swarm ノードを Ansible インベントリーã«å‹•çš„ã«è¿½åŠ ã§ãã¾ã™ã€‚" #~ msgid "docker_swarm module" #~ msgstr "docker_swarm モジュール" #~ msgid "The :ref:`community.docker.docker_swarm module ` allows you to globally configure Docker Swarm manager nodes to join and leave swarms, and to change the Docker Swarm configuration." #~ msgstr ":ref:`community.docker.docker_swarm モジュール ` ã§ã¯ã€Docker Swarm マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãƒŽãƒ¼ãƒ‰ã‚’グローãƒãƒ«ã«è¨­å®šã—ã€swarm ã«å‚加ãŠã‚ˆã³ swarm ã‹ã‚‰é›¢è„±ã—ã€Docker Swarm 設定ã®å¤‰æ›´ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #~ msgid "docker_swarm_info module" #~ msgstr "docker_swarm_info モジュール" #~ msgid "The :ref:`community.docker.docker_swarm_info module ` allows you to retrieve information on Docker Swarm." #~ msgstr ":ref:`community.docker.docker_swarm_info モジュール ` ã§ã¯ã€Docker Swarm ã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã§ãã¾ã™ã€‚" #~ msgid "docker_node module" #~ msgstr "docker_node モジュール" #~ msgid "The :ref:`community.docker.docker_node module ` allows you to manage Docker Swarm nodes." #~ msgstr ":ref:`community.docker.docker_node モジュール ` ã§ã¯ã€Docker Swarm ノードを管ç†ã§ãã¾ã™ã€‚" #~ msgid "docker_node_info module" #~ msgstr "docker_node_info モジュール" #~ msgid "The :ref:`community.docker.docker_node_info module ` allows you to retrieve information on Docker Swarm nodes." #~ msgstr ":ref:`community.docker.docker_node_info モジュール ` ã§ã¯ã€Docker Swarm ãƒŽãƒ¼ãƒ‰ã®æƒ…報をå–å¾—ã§ãã¾ã™ã€‚" #~ msgid "Configuration management" #~ msgstr "設定管ç†" #~ msgid "The community.docker collection offers modules to manage Docker Swarm configurations and secrets:" #~ msgstr "community.docker コレクションã¯ã€Docker Swarm 設定ãŠã‚ˆã³ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’管ç†ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æä¾›ã—ã¾ã™ã€‚" #~ msgid "docker_config module" #~ msgstr "docker_config モジュール" #~ msgid "The :ref:`community.docker.docker_config module ` allows you to create and modify Docker Swarm configs." #~ msgstr ":ref:`community.docker.docker_config モジュール ` を使用ã™ã‚‹ã¨ã€Docker Swarm 設定を作æˆãŠã‚ˆã³å¤‰æ›´ã§ãã¾ã™ã€‚" #~ msgid "docker_secret module" #~ msgstr "docker_secret モジュール" #~ msgid "The :ref:`community.docker.docker_secret module ` allows you to create and modify Docker Swarm secrets." #~ msgstr ":ref:`community.docker.docker_secret モジュール ` ã§ã¯ã€Docker Swarm シークレットを作æˆãŠã‚ˆã³å¤‰æ›´ã§ãã¾ã™ã€‚" #~ msgid "Swarm services" #~ msgstr "Swarm サービス" #~ msgid "Docker Swarm services can be created and updated with the :ref:`community.docker.docker_swarm_service module `, and information on them can be queried by the :ref:`community.docker.docker_swarm_service_info module `." #~ msgstr "Docker Swarm サービスã¯ã€:ref:`community.docker.docker_swarm_service モジュール ` ã§ä½œæˆãŠã‚ˆã³æ›´æ–°ã§ãã€ãã®æƒ…å ±ã¯ã€:ref:`community.docker.docker_swarm_service_info モジュール ` ã§ã‚¯ã‚¨ãƒªãƒ¼ã§ãã¾ã™ã€‚" #~ msgid "Helpful links" #~ msgstr "便利ãªãƒªãƒ³ã‚¯" #~ msgid "Still using Dockerfile to build images? Check out `ansible-bender `_, and start building images from your Ansible playbooks." #~ msgstr "Dockerfile を使用ã—ã¦ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’構築ã—ã¦ã„ã¾ã™ã‹ã€‚`ansible-bender `_ を確èªã—ã¦ã€Ansible Playbook ã‹ã‚‰ã‚¤ãƒ¡ãƒ¼ã‚¸ã®æ§‹ç¯‰ã‚’é–‹å§‹ã—ã¾ã™ã€‚" #~ msgid "Use `Ansible Operator `_ to launch your docker-compose file on `OpenShift `_. Go from an app on your laptop to a fully scalable app in the cloud with Kubernetes in just a few moments." #~ msgstr "`Ansible Operator `_ を使用ã—ã¦ã€`OpenShift `_ ã§ docker æ§‹æˆã®ãƒ•ァイルを起動ã—ã¾ã™ã€‚ラップトップ上ã®ã‚¢ãƒ—リケーションã‹ã‚‰ã€Kubernetes を使用ã™ã‚‹ã‚¯ãƒ©ã‚¦ãƒ‰å†…ã®å®Œå…¨ãªã‚¹ã‚±ãƒ¼ãƒ©ãƒ–ルãªã‚¢ãƒ—リケーション (数分間) ã«ç§»å‹•ã—ã¾ã™ã€‚" #~ msgid "Autoscaling with Tower" #~ msgstr "Tower を使用ã—ãŸè‡ªå‹•スケーリング" #~ msgid "If you find a bug or have a suggestion regarding modules, please file issues at `Ansible Kubernetes collection `_. If you find a bug regarding OpenShift client, please file issues at `OpenShift REST Client issues `_. If you find a bug regarding Kubectl binary, please file issues at `Kubectl issue tracker `_" #~ msgstr "ãƒã‚°ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã‚„モジュールã«é–¢ã™ã‚‹ææ¡ˆã‚’ãŠå¯„ã›ã„ãŸã ã‘ã‚‹å ´åˆã¯ã€`Ansible Kubernetes コレクション `_ ã«ãƒ•ァイルã®å•題を報告ã—ã¦ãã ã•ã„。OpenShift クライアントã«é–¢ã™ã‚‹ãƒã‚°ãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã¯ã€`OpenShift REST クライアントã®å•題 `_ ã«å•題を作æˆã—ã¦ãã ã•ã„。Kubectl ãƒã‚¤ãƒŠãƒªãƒ¼ã«é–¢ã™ã‚‹ãƒã‚°ã¯ã€`Kubectl issue tracker `_ ã§å•題を作æˆã—ã¦ãã ã•ã„。" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.493556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/sphinx.po0000644000000000000000000000223500000000000024744 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) Ansible project contributors # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-05 13:48+0200\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: Babel 2.9.0\n" #: ../../.templates/breadcrumbs.html:8 ../../.templates/breadcrumbs.html:16 #: ../../.templates/breadcrumbs.html:19 ../../.templates/breadcrumbs.html:21 msgid "Edit on GitHub" msgstr "GitHub ã§ç·¨é›†" #: ../../.templates/breadcrumbs.html:27 ../../.templates/breadcrumbs.html:29 msgid "Edit on Bitbucket" msgstr "Bitbucket ã§ç·¨é›†" #: ../../.templates/breadcrumbs.html:34 ../../.templates/breadcrumbs.html:36 msgid "Edit on GitLab" msgstr "GitLab ã§ç·¨é›†" #: ../../.templates/breadcrumbs.html:39 ../../.templates/breadcrumbs.html:41 msgid "View page source" msgstr "ページソースã®è¡¨ç¤º" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.500556 ansible-core-2.12.0/docs/docsite/rst/locales/ja/LC_MESSAGES/user_guide.po0000644000000000000000000475120300000000000025600 0ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) Ansible project contributors # This file is distributed under the same license as the Ansible package. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: Ansible devel\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-10-05 13:53+0200\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: Babel 2.9.0\n" #: ../../rst/user_guide/basic_concepts.rst:5 msgid "Ansible concepts" msgstr "Ansible ã®æ¦‚念" #: ../../rst/user_guide/basic_concepts.rst:7 msgid "These concepts are common to all uses of Ansible. You need to understand them to use Ansible for any kind of automation. This basic introduction provides the background you need to follow the rest of the User Guide." msgstr "ã“ã®æ¦‚念ã¯ã€Ansible ã®ã™ã¹ã¦ã®ç”¨é€”ã«å…±é€šã—ã¦ã„ã¾ã™ã€‚ã‚らゆる種類ã®è‡ªå‹•化ã®ãŸã‚ã« Ansible を使用ã™ã‚‹ã«ã¯ã€ã“れらをç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®åŸºæœ¬çš„ãªç´¹ä»‹ã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã®å†…容をç†è§£ã™ã‚‹ã®ã«å¿…è¦ãªèƒŒæ™¯ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:2 msgid "Control node" msgstr "コントロールノード" #: ../../rst/shared_snippets/basic_concepts.txt:4 msgid "Any machine with Ansible installed. You can run Ansible commands and playbooks by invoking the ``ansible`` or ``ansible-playbook`` command from any control node. You can use any computer that has a Python installation as a control node - laptops, shared desktops, and servers can all run Ansible. However, you cannot use a Windows machine as a control node. You can have multiple control nodes." msgstr "Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るマシン。任æ„ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ ``ansible`` コマンドã¾ãŸã¯ ``ansible-playbook`` コマンドを呼ã³å‡ºã™ã“ã¨ã§ã€Ansible コマンドãŠã‚ˆã³ Playbook を実行ã§ãã¾ã™ã€‚Python ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„るコンピューターã§ã‚れã°ã€ãƒ©ãƒƒãƒ—トップã€å…±æœ‰ãƒ‡ã‚£ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã€ã‚µãƒ¼ãƒãƒ¼ãªã©ã€ã©ã®ã‚³ãƒ³ãƒ”ューターã§ã‚‚ Ansible を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€Windows マシンをコントロールノードã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。複数ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:7 msgid "Managed nodes" msgstr "管ç†ãƒŽãƒ¼ãƒ‰" #: ../../rst/shared_snippets/basic_concepts.txt:9 msgid "The network devices (and/or servers) you manage with Ansible. Managed nodes are also sometimes called \"hosts\". Ansible is not installed on managed nodes." msgstr "Ansible ã§ç®¡ç†ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ (ã¾ãŸã¯ã‚µãƒ¼ãƒãƒ¼)。管ç†ãƒŽãƒ¼ãƒ‰ã¯ã€Œãƒ›ã‚¹ãƒˆã€ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚Ansible ã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“。" #: ../../rst/shared_snippets/basic_concepts.txt:12 msgid "Inventory" msgstr "インベントリー" #: ../../rst/shared_snippets/basic_concepts.txt:14 msgid "A list of managed nodes. An inventory file is also sometimes called a \"hostfile\". Your inventory can specify information like IP address for each managed node. An inventory can also organize managed nodes, creating and nesting groups for easier scaling. To learn more about inventory, see :ref:`the Working with Inventory` section." msgstr "管ç†ãƒŽãƒ¼ãƒ‰ã®ä¸€è¦§ã€‚インベントリーファイルã¯ã€Œãƒ›ã‚¹ãƒˆãƒ•ァイルã€ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚インベントリーã¯ã€å„管ç†ãƒŽãƒ¼ãƒ‰ã«å¯¾ã—㦠IP アドレスãªã©ã®æƒ…報を指定ã§ãã¾ã™ã€‚インベントリーã¯ç®¡ç†ãƒŽãƒ¼ãƒ‰ã‚’æ•´ç†ã§ãã€ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ãŒå®¹æ˜“ã«ãªã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ä½œæˆã‚„ãƒã‚¹ãƒˆåŒ–ãŒå¯èƒ½ã§ã™ã€‚インベントリーã®è©³ç´°ã¯ã€Œ:ref:`インベントリーã®ä½¿ç”¨ `ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:17 msgid "Collections" msgstr "コレクション" #: ../../rst/shared_snippets/basic_concepts.txt:19 msgid "Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. You can install and use collections through `Ansible Galaxy `_. To learn more about collections, see :ref:`collections`." msgstr "コレクションã¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインをå«ã‚€ Ansible コンテンツã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション形å¼ã§ã™ã€‚`Ansible Galaxy `_ ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コレクションã®è©³ç´°ã¯ã€ã€Œ:ref:`collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:22 msgid "Modules" msgstr "モジュール" #: ../../rst/shared_snippets/basic_concepts.txt:24 msgid "The units of code Ansible executes. Each module has a particular use, from administering users on a specific type of database to managing VLAN interfaces on a specific type of network device. You can invoke a single module with a task, or invoke several different modules in a playbook. Starting in Ansible 2.10, modules are grouped in collections. For an idea of how many collections Ansible includes, take a look at the :ref:`list_of_collections`." msgstr "Ansible ãŒå®Ÿè¡Œã™ã‚‹ã‚³ãƒ¼ãƒ‰ã®å˜ä½ã€‚å„モジュールã¯ã€ç‰¹å®šã‚¿ã‚¤ãƒ—ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’管ç†ã—ãŸã‚Šã€ç‰¹å®šã‚¿ã‚¤ãƒ—ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® VLAN インターフェースを管ç†ã™ã‚‹ãªã©ã€ç‰¹å®šã®ç”¨é€”ã«ä½¿ç”¨ã•れã¾ã™ã€‚タスク㧠1 ã¤ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èµ·å‹•ã—ãŸã‚Šã€Playbook ã§è¤‡æ•°ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’èµ·å‹•ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible 2.10 以é™ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã¾ã¨ã‚られã¦ã„ã¾ã™ã€‚Ansible ã«å«ã¾ã‚Œã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ•°ã¯ã€ã€Œ:ref:`list_of_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/basic_concepts.txt:27 msgid "Tasks" msgstr "タスク" #: ../../rst/shared_snippets/basic_concepts.txt:29 msgid "The units of action in Ansible. You can execute a single task once with an ad hoc command." msgstr "Ansible ã§ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®å˜ä½ã€‚アドホックコマンドを使用ã™ã‚‹ã¨ã€å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/basic_concepts.txt:32 msgid "Playbooks" msgstr "Playbook" #: ../../rst/shared_snippets/basic_concepts.txt:34 msgid "Ordered lists of tasks, saved so you can run those tasks in that order repeatedly. Playbooks can include variables as well as tasks. Playbooks are written in YAML and are easy to read, write, share and understand. To learn more about playbooks, see :ref:`about_playbooks`." msgstr "順番ã«ä¸¦ã¹ã‚‰ã‚ŒãŸã‚¿ã‚¹ã‚¯ã®ä¸€è¦§ã¯ä¿å­˜ã•れã¦ã„ã‚‹ãŸã‚ã€ãã®é †ç•ªã§ã‚¿ã‚¹ã‚¯ã‚’繰り返ã—実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã ã‘ã§ãªãã€å¤‰æ•°ã‚‚å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook 㯠YAML ã§è¨˜è¿°ã•れã¦ã„ã‚‹ãŸã‚ã€èª­ã¿ã‚„ã™ãã€æ›¸ãã‚„ã™ãã€å…±æœ‰ã—ã‚„ã™ãã€ç†è§£ã—ã‚„ã™ã„特徴ãŒã‚りã¾ã™ã€‚Playbook ã®è©³ç´°ã¯ã€ã€Œ:ref:`about_playbooks`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:5 msgid "Understanding privilege escalation: become" msgstr "æ¨©é™æ˜‡æ ¼ã®ç†è§£: become" #: ../../rst/user_guide/become.rst:7 msgid "Ansible uses existing privilege escalation systems to execute tasks with root privileges or with another user's permissions. Because this feature allows you to 'become' another user, different from the user that logged into the machine (remote user), we call it ``become``. The ``become`` keyword uses existing privilege escalation tools like `sudo`, `su`, `pfexec`, `doas`, `pbrun`, `dzdo`, `ksu`, `runas`, `machinectl` and others." msgstr "Ansible ã¯æ—¢å­˜ã®æ¨©é™æ˜‡æ ¼ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã—ã¦ã€root 権é™ã¾ãŸã¯åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ‘ーミッションã§ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã¨ã€ã“ã®ãƒžã‚·ãƒ³ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ (リモートユーザー) ã¨ã¯åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€Œã«ãªã‚‹ (become)ã€ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ã“ã®æ©Ÿèƒ½ã¯ ``become`` ã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™ã€‚``become`` キーワードã¯ã€`sudo`ã€`su`ã€`pfexec`ã€`doas`ã€`pbrun`ã€`dzdo`ã€`ksu`ã€`runas`ã€`machinectl` ãªã©ã®æ—¢å­˜ã®ç‰¹æ¨©æ˜‡æ ¼ãƒ„ールを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:13 msgid "Using become" msgstr "become ã®ä½¿ç”¨" #: ../../rst/user_guide/become.rst:15 msgid "You can control the use of ``become`` with play or task directives, connection variables, or at the command line. If you set privilege escalation properties in multiple ways, review the :ref:`general precedence rules` to understand which settings will be used." msgstr "play ディレクティブã¾ãŸã¯ task ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã€æŽ¥ç¶šå¤‰æ•°ã€ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã® ``become`` ã®ä½¿ç”¨ã‚’制御ã§ãã¾ã™ã€‚è¤‡æ•°ã®æ–¹æ³•ã§æ¨©é™æ˜‡æ ¼ãƒ—ロパティーを設定ã™ã‚‹å ´åˆã¯ã€:ref:`一般的ãªå„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ«` を確èªã—ã€ä½¿ç”¨ã™ã‚‹è¨­å®šã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:17 msgid "A full list of all become plugins that are included in Ansible can be found in the :ref:`become_plugin_list`." msgstr "Ansible ã«å«ã¾ã‚Œã‚‹å…¨ become プラグインã®å®Œå…¨ãƒªã‚¹ãƒˆã¯ã€:ref:`become_plugin_list` ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:20 msgid "Become directives" msgstr "Become ディレクティブ" #: ../../rst/user_guide/become.rst:22 msgid "You can set the directives that control ``become`` at the play or task level. You can override these by setting connection variables, which often differ from one host to another. These variables and directives are independent. For example, setting ``become_user`` does not set ``become``." msgstr "プレイã¾ãŸã¯ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ã€``become`` を制御ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–を設定ã§ãã¾ã™ã€‚多ãã®å ´åˆã¯ã€ãƒ›ã‚¹ãƒˆã”ã¨ã«ç•°ãªã‚‹æŽ¥ç¶šå¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ã§ã€ã“れらをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¯ç‹¬ç«‹ã—ã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€``become_user`` ã«è¨­å®šã—ã¦ã‚‚ ``become`` ã«è¨­å®šã•れã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:25 msgid "become" msgstr "become" #: ../../rst/user_guide/become.rst:25 msgid "set to ``yes`` to activate privilege escalation." msgstr "æ¨©é™æ˜‡æ ¼ã‚’アクティブã«ã™ã‚‹ã«ã¯ã€``yes`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:28 msgid "become_user" msgstr "become_user" #: ../../rst/user_guide/become.rst:28 msgid "set to user with desired privileges — the user you `become`, NOT the user you login as. Does NOT imply ``become: yes``, to allow it to be set at host level. Default value is ``root``." msgstr "希望ã™ã‚‹æ¨©é™ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è¨­å®šã—ã¾ã™ã€‚ログインã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ãªãã€`become` を行ã£ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚Šã¾ã™ã€‚ホストレベルã§è¨­å®šã§ãるよã†ã«ã™ã‚‹ ``become: yes`` ã‚’æ„味ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。デフォルト値㯠``root`` ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:31 msgid "become_method" msgstr "become_method" #: ../../rst/user_guide/become.rst:31 msgid "(at play or task level) overrides the default method set in ansible.cfg, set to use any of the :ref:`become_plugins`." msgstr "(play レベルã¾ãŸã¯ task レベルã§)ã€ansible.cfg ã«è¨­å®šã•れãŸãƒ‡ãƒ•ォルトã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã€:ref:`become_plugins` を使用ã™ã‚‹ã‚ˆã†è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:34 msgid "become_flags" msgstr "become_flags" #: ../../rst/user_guide/become.rst:34 msgid "(at play or task level) permit the use of specific flags for the tasks or role. One common use is to change the user to nobody when the shell is set to nologin. Added in Ansible 2.2." msgstr "(play レベルã¾ãŸã¯ task レベルã§) タスクã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã«ç‰¹å®šã®ãƒ•ラグã®ä½¿ç”¨ã‚’許å¯ã—ã¾ã™ã€‚一般的ãªä½¿ã„æ–¹ã¨ã—ã¦ã¯ã€ã‚·ã‚§ãƒ«ãŒ nologin ã«è¨­å®šã•れã¦ã„ã‚‹ã¨ãã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ nobody ã«å¤‰æ›´ã™ã‚‹ã®ãŒä¸€èˆ¬çš„ãªæ–¹æ³•ã§ã™ã€‚Ansible 2.2 ã§è¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/become.rst:36 msgid "For example, to manage a system service (which requires ``root`` privileges) when connected as a non-``root`` user, you can use the default value of ``become_user`` (``root``):" msgstr "ãŸã¨ãˆã°ã€``root`` 以外ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦æŽ¥ç¶šã™ã‚‹éš›ã«ã‚·ã‚¹ãƒ†ãƒ ã‚µãƒ¼ãƒ“スを管ç†ã™ã‚‹ (``root`` 権é™ãŒå¿…è¦) ã«ã¯ã€``become_user`` (``root``) ã®ãƒ‡ãƒ•ォルト値を使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:46 msgid "To run a command as the ``apache`` user:" msgstr "``apache`` ユーザーã¨ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:55 msgid "To do something as the ``nobody`` user when the shell is nologin:" msgstr "シェル㌠nologin ã®å ´åˆã« ``nobody`` ユーザーã¨ã—ã¦æ“作を行ã†å ´åˆã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:66 msgid "To specify a password for sudo, run ``ansible-playbook`` with ``--ask-become-pass`` (``-K`` for short). If you run a playbook utilizing ``become`` and the playbook seems to hang, most likely it is stuck at the privilege escalation prompt. Stop it with `CTRL-c`, then execute the playbook with ``-K`` and the appropriate password." msgstr "sudo ã®ãƒ‘スワードを指定ã™ã‚‹ã«ã¯ã€``ansible-playbook`` ã‚’ ``--ask-become-pass`` (ç•¥ã—㦠``-K``) ã¨ä¸€ç·’ã«å®Ÿè¡Œã—ã¾ã™ã€‚``become`` を使用ã—㦠Playbook を実行ã—ã€Playbook ãŒãƒãƒ³ã‚°ã—ã¦ã„るよã†ã«è¦‹ãˆã‚‹å ´åˆã¯ã€ã»ã¨ã‚“ã©ã®å ´åˆã€ç‰¹æ¨©æ˜‡æ ¼ã®ãƒ—ãƒ­ãƒ³ãƒ—ãƒˆã§æ­¢ã¾ã£ã¦ã„ã¾ã™ã€‚`CTRL-c` ã§åœæ­¢ã•ã›ã¦ã‹ã‚‰ã€``-K`` ã¨é©åˆ‡ãªãƒ‘スワード㧠Playbook を実行ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:70 msgid "Become connection variables" msgstr "Become 接続変数" #: ../../rst/user_guide/become.rst:72 msgid "You can define different ``become`` options for each managed node or group. You can define these variables in inventory or use them as normal variables." msgstr "管ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã”ã¨ã«ç•°ãªã‚‹ ``become`` オプションを定義ã§ãã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§å®šç¾©ã™ã‚‹ã‹ã€é€šå¸¸ã®å¤‰æ•°ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:75 #: ../../rst/user_guide/intro_inventory.rst:573 #: ../../rst/user_guide/intro_inventory.rst:648 msgid "ansible_become" msgstr "ansible_become" #: ../../rst/user_guide/become.rst:75 msgid "overrides the ``become`` directive, decides if privilege escalation is used or not." msgstr "``become`` ディレクティブを上書ãã—ã¾ã™ã€‚権é™ã®ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãŒä½¿ç”¨ã•れるã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:78 #: ../../rst/user_guide/intro_inventory.rst:575 msgid "ansible_become_method" msgstr "ansible_become_method" #: ../../rst/user_guide/become.rst:78 msgid "which privilege escalation method should be used" msgstr "使用ã™ã‚‹æ¨©é™æ˜‡æ ¼æ–¹æ³•ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:81 #: ../../rst/user_guide/intro_inventory.rst:577 msgid "ansible_become_user" msgstr "ansible_become_user" #: ../../rst/user_guide/become.rst:81 msgid "set the user you become through privilege escalation; does not imply ``ansible_become: yes``" msgstr "æ¨©é™æ˜‡æ ¼ã§ become を行ã†ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’設定ã—ã¾ã™ã€‚``ansible_become: yes`` ã‚’æ„味ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:84 #: ../../rst/user_guide/intro_inventory.rst:579 msgid "ansible_become_password" msgstr "ansible_become_password" #: ../../rst/user_guide/become.rst:84 msgid "set the privilege escalation password. See :ref:`playbooks_vault` for details on how to avoid having secrets in plain text" msgstr "æ¨©é™æ˜‡æ ¼ãƒ‘スワードを設定ã—ã¾ã™ã€‚平文ã§ã®ç§˜å¯†ã®ä½¿ç”¨ã‚’回é¿ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`playbooks_vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:87 msgid "ansible_common_remote_group" msgstr "ansible_common_remote_group" #: ../../rst/user_guide/become.rst:87 msgid "determines if Ansible should try to ``chgrp`` its temporary files to a group if ``setfacl`` and ``chown`` both fail. See `Risks of becoming an unprivileged user`_ for more information. Added in version 2.10." msgstr "``setfacl`` 㨠``chown`` ã®ä¸¡æ–¹ãŒå¤±æ•—ã—ãŸå ´åˆã«ã€Ansible ãŒä¸€æ™‚ファイルをグループ㫠``chgrp`` ã—よã†ã¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚詳細ã¯ã€Œ`éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ãƒªã‚¹ã‚¯`_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.10 ã§è¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/become.rst:89 msgid "For example, if you want to run all tasks as ``root`` on a server named ``webserver``, but you can only connect as the ``manager`` user, you could use an inventory entry like this:" msgstr "ãŸã¨ãˆã°ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’ ``webserver`` ã¨ã„ã†åå‰ã®ã‚µãƒ¼ãƒãƒ¼ã§ ``root`` ã¨ã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’望ã¿ã€``manager`` ユーザーã¨ã—ã¦ã®ã¿æŽ¥ç¶šã§ãã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:96 msgid "The variables defined above are generic for all become plugins but plugin specific ones can also be set instead. Please see the documentation for each plugin for a list of all options the plugin has and how they can be defined. A full list of become plugins in Ansible can be found at :ref:`become_plugins`." msgstr "上記ã®å¤‰æ•°ã¯ã™ã¹ã¦ã® become ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã«æ±Žç”¨çš„ãªã‚‚ã®ã§ã™ãŒã€ä»£ã‚りã«ãƒ—ラグイン固有ã®å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæŒã¤ã™ã¹ã¦ã®ã‚ªãƒ—ションã¨ãã®å®šç¾©æ–¹æ³•ã®ä¸€è¦§ã¯ã€å„プラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible ã«ãŠã‘ã‚‹ become プラグインã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ :ref:`become_plugins` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:101 msgid "Become command-line options" msgstr "Become コマンドラインオプション" #: ../../rst/user_guide/become.rst:104 msgid "ask for privilege escalation password; does not imply become will be used. Note that this password will be used for all hosts." msgstr "æ¨©é™æ˜‡æ ¼ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã—ã¾ã™ã€‚ã“れã¯ã€‚å¿…ãšã—ã‚‚ become ãŒä½¿ç”¨ã•れるã¨ã¯é™ã‚Šã¾ã›ã‚“。ã“ã®ãƒ‘スワードã¯ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§ä½¿ç”¨ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:107 msgid "run operations with become (no password implied)" msgstr "become ã§æ“作を実行ã—ã¾ã™ (パスワードãŒãªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™)。" #: ../../rst/user_guide/become.rst:110 msgid "privilege escalation method to use (default=sudo), valid choices: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ]" msgstr "使用ã™ã‚‹ç‰¹æ¨©æ˜‡æ ¼æ–¹æ³• (デフォルト㯠sudo)。有効ãªé¸æŠžè‚¢ã¯ã€[ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ] ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:114 msgid "run operations as this user (default=root), does not imply --become/-b" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ (デフォルト㯠root) ã¨ã—ã¦æ“作を実行ã—ã¾ã™ã€‚--become/-b ã‚’æ„味ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:117 msgid "Risks and limitations of become" msgstr "become ã®ãƒªã‚¹ã‚¯ãŠã‚ˆã³åˆ¶é™" #: ../../rst/user_guide/become.rst:119 msgid "Although privilege escalation is mostly intuitive, there are a few limitations on how it works. Users should be aware of these to avoid surprises." msgstr "ç‰¹æ¨©ã®æ˜‡æ ¼ã¯ã»ã¨ã‚“ã©ç›´æ„Ÿçš„ã§ã™ãŒã€ãれãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã«ã¤ã„ã¦ã¯ã€ã„ãã¤ã‹ã®åˆ¶é™ãŒã‚りã¾ã™ã€‚å•題ãŒç™ºç”Ÿã—ãªã„よã†ã«ã€ã“れらã®ç‚¹ã«æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:123 msgid "Risks of becoming an unprivileged user" msgstr "éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ (become) リスク" #: ../../rst/user_guide/become.rst:125 msgid "Ansible modules are executed on the remote machine by first substituting the parameters into the module file, then copying the file to the remote machine, and finally executing it there." msgstr "Ansible モジュールã¯ã€ã¾ãšãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã«ãƒ‘ラメーターを代入ã—ã€æ¬¡ã«ãã®ãƒ•ァイルをリモートマシンã«ã‚³ãƒ”ーã—ã€æœ€å¾Œã«ãã“ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ã§ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ä¸Šã§å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:129 msgid "Everything is fine if the module file is executed without using ``become``, when the ``become_user`` is root, or when the connection to the remote machine is made as root. In these cases Ansible creates the module file with permissions that only allow reading by the user and root, or only allow reading by the unprivileged user being switched to." msgstr "モジュールファイル㌠``become`` を使用ã›ãšã«ã€``become_user`` ㌠root ã®å ´åˆã‚„ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¸ã®æŽ¥ç¶šãŒ root ã¨ã—ã¦è¡Œã‚れる場åˆã€ã™ã¹ã¦ã®ã“ã¨ã¯å•題ã‚りã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå ´åˆã€Ansible ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŠã‚ˆã³ root ã«ã‚ˆã‚‹èª­ã¿å–りã®ã¿ã‚’許å¯ã™ã‚‹ãƒ‘ーミッションã€ã¾ãŸã¯åˆ‡ã‚Šæ›¿ãˆå…ˆã®éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®èª­ã¿å–りã®ã¿ã‚’許å¯ã™ã‚‹ãƒ‘ーミッションをæŒã¤ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:135 msgid "However, when both the connection user and the ``become_user`` are unprivileged, the module file is written as the user that Ansible connects as (the ``remote_user``), but the file needs to be readable by the user Ansible is set to ``become``. The details of how Ansible solves this can vary based on platform. However, on POSIX systems, Ansible solves this problem in the following way:" msgstr "ãŸã ã—ã€æŽ¥ç¶šãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ ``become_user`` ã®ä¸¡æ–¹ãŒç‰¹æ¨©ã‚’æŒãŸãªã„å ´åˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイル㯠Ansible ãŒæŽ¥ç¶šã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ (``remote_user``) ã¨ã—ã¦è¨˜è¿°ã•れã¾ã™ãŒã€Ansible ㌠``become`` ã«è¨­å®šã•れã¦ã„るユーザーãŒãƒ•ァイルを読ã¿å–れる必è¦ãŒã‚りã¾ã™ã€‚Ansible ãŒã“れをプラットフォーム別ã«è§£æ±ºã™ã‚‹æ–¹æ³•ã®è©³ç´°ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ãŒã€POSIX システムã§ã¯ã€Ansible ãŒã“ã®å•題を解決ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:141 msgid "First, if :command:`setfacl` is installed and available in the remote ``PATH``, and the temporary directory on the remote host is mounted with POSIX.1e filesystem ACL support, Ansible will use POSIX ACLs to share the module file with the second unprivileged user." msgstr "ã¾ãšã€ãƒªãƒ¢ãƒ¼ãƒˆ ``PATH`` ã« :command:`setfacl` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€åˆ©ç”¨å¯èƒ½ãªå ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®ä¸€æ™‚ディレクトリー㌠POSIX.1e ファイルシステム ACL サãƒãƒ¼ãƒˆã§ãƒžã‚¦ãƒ³ãƒˆã•れã¦ã„ã‚‹å ´åˆã€Ansible 㯠POSIX ACL を使用ã—㦠2 ã¤ã®éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルを共有ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:146 msgid "Next, if POSIX ACLs are **not** available or :command:`setfacl` could not be run, Ansible will attempt to change ownership of the module file using :command:`chown` for systems which support doing so as an unprivileged user." msgstr "次ã«ã€POSIX ACL ãŒåˆ©ç”¨ **ã§ããªã„** ã‹ã€:command:`setfacl` を実行ã§ããªã„å ´åˆã€Ansible ã¯ã€ç‰¹æ¨©ã®ãªã„ユーザーã¨ã—ã¦å¯¾å¿œã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã® :command:`chown` を使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‰€æœ‰æ¨©ã‚’変更ã—よã†ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:150 msgid "New in Ansible 2.11, at this point, Ansible will try :command:`chmod +a` which is a macOS-specific way of setting ACLs on files." msgstr "Ansible 2.11 ã®æ–°æ©Ÿèƒ½ã¨ã—ã¦ã€Ansible ã¯ã€ãƒ•ァイル㫠ACL を設定ã™ã‚‹éš›ã« macOS å›ºæœ‰ã®æ–¹æ³•ã§ :command:`chmod +a` を試行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:153 msgid "New in Ansible 2.10, if all of the above fails, Ansible will then check the value of the configuration setting ``ansible_common_remote_group``. Many systems will allow a given user to change the group ownership of a file to a group the user is in. As a result, if the second unprivileged user (the ``become_user``) has a UNIX group in common with the user Ansible is connected as (the ``remote_user``), and if ``ansible_common_remote_group`` is defined to be that group, Ansible can try to change the group ownership of the module file to that group by using :command:`chgrp`, thereby likely making it readable to the ``become_user``." msgstr "Ansible 2.10 ã®æ–°æ©Ÿèƒ½ã§ã€ä¸Šè¨˜ã®ã™ã¹ã¦ãŒå¤±æ•—ã™ã‚‹ã¨ã€Ansible ã¯æ§‹æˆè¨­å®š ``ansible_common_remote_group`` ã®å€¤ã‚’確èªã—ã¾ã™ã€‚多ãã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã€ãƒ•ァイルã®ã‚°ãƒ«ãƒ¼ãƒ—æ‰€æœ‰æ¨©ã‚’ã€æ‰€å±žã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã«å¤‰æ›´ã§ãã¾ã™ã€‚ãã®çµæžœã€2 番目ã®éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ (``become_user``) ã«ã€Ansible ㌠(``remote_user``ã¨ã—ã¦) 接続ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å…±é€šã™ã‚‹ UNIX グループãŒã‚りã€``ansible_common_remote_group`` ãŒãã®ã‚°ãƒ«ãƒ¼ãƒ—ã¨ã—ã¦å®šç¾©ã•れã¦ã„ã‚‹å ´åˆã¯ã€ :command:`chgrp` を使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã®ã‚°ãƒ«ãƒ¼ãƒ—所有権をãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å¤‰æ›´ã—よã†ã¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€``become_user`` ãŒèª­ã¿ã‚‹ã‚ˆã†ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:163 msgid "At this point, if ``ansible_common_remote_group`` was defined and a :command:`chgrp` was attempted and returned successfully, Ansible assumes (but, importantly, does not check) that the new group ownership is enough and does not fall back further. That is, Ansible **does not check** that the ``become_user`` does in fact share a group with the ``remote_user``; so long as the command exits successfully, Ansible considers the result successful and does not proceed to check ``allow_world_readable_tmpfiles`` per below." msgstr "ã“ã®æ™‚点ã§ã€``ansible_common_remote_group`` ãŒå®šç¾©ã•れ〠:command:`chgrp` ãŒè©¦è¡Œã•ã‚Œã¦æ­£å¸¸ã«è¿”ã•れãŸå ´åˆã€Ansible ã¯æ–°ã—ã„ã‚°ãƒ«ãƒ¼ãƒ—ã®æ‰€æœ‰æ¨©ã§å分ã§ã‚ã‚‹ã¨ä»®å®šã— (ãŸã ã—ã€é‡è¦ãªã“ã¨ã§ã™ãŒã€ç¢ºèªã¯ã—ã¾ã›ã‚“)ã€ãれ以上ã¯ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã›ã‚“。ã¤ã¾ã‚Šã€``become_user`` ãŒå®Ÿéš›ã« ``remote_user`` ã¨ã‚°ãƒ«ãƒ¼ãƒ—を共有ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã¯ **確èªã—ã¾ã›ã‚“**ã€‚ã‚³ãƒžãƒ³ãƒ‰ãŒæ­£å¸¸ã«çµ‚了ã™ã‚‹é™ã‚Šã€Ansible ã¯ãã®çµæžœã‚’æˆåŠŸã¨ã¿ãªã—ã€ä»¥ä¸‹ã® ``allow_world_readable_tmpfiles`` ã®ãƒã‚§ãƒƒã‚¯ã«ã¯é€²ã¿ã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:171 msgid "If ``ansible_common_remote_group`` is **not** set and the chown above it failed, or if ``ansible_common_remote_group`` *is* set but the :command:`chgrp` (or following group-permissions :command:`chmod`) returned a non-successful exit code, Ansible will lastly check the value of ``allow_world_readable_tmpfiles``. If this is set, Ansible will place the module file in a world-readable temporary directory, with world-readable permissions to allow the ``become_user`` (and incidentally any other user on the system) to read the contents of the file. **If any of the parameters passed to the module are sensitive in nature, and you do not trust the remote machines, then this is a potential security risk.**" msgstr "``ansible_common_remote_group`` ㌠**設定ã•れã¦ãŠã‚‰ãš**ã€ãã“ã§ã® chown ãŒå¤±æ•—ã—ãŸå ´åˆã€ã¾ãŸã¯ ``ansible_common_remote_group`` *ãŒ* 設定ã•れã¦ã„る㌠:command:`chgrp` (ã¾ãŸã¯ãれã«ç¶šãグループパーミッション㮠:command:`chmod`) ãŒæˆåŠŸã—ãªã„終了コードを返ã—ãŸå ´åˆã€Ansible ã¯æœ€å¾Œã« ``allow_world_readable_tmpfiles`` ã®å€¤ã‚’確èªã—ã¾ã™ã€‚ã“ã®å€¤ãŒè¨­å®šã•れã¦ã„ã‚‹ã¨ã€Ansible ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルを誰もãŒèª­ã‚る一時ディレクトリーã«ç½®ãã€``become_user`` (ãŠã‚ˆã³ã‚·ã‚¹ãƒ†ãƒ ä¸Šã®ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼) ãŒãƒ•ァイルã®å†…容を読ã‚るよã†ã«ã€èª°ã‚‚ãŒèª­ã¿å–りå¯èƒ½ãªãƒ‘ーミッションを設定ã—ã¾ã™ã€‚**ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ¸¡ã•ã‚Œã‚‹ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ©Ÿå¯†æ€§ãŒã‚りã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã‚’信用ã—ã¦ã„ãªã„å ´åˆã€ã“ã‚Œã¯æ½œåœ¨çš„ãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒªã‚¹ã‚¯ã¨ãªã‚Šã¾ã™ã€‚**" #: ../../rst/user_guide/become.rst:182 msgid "Once the module is done executing, Ansible deletes the temporary file." msgstr "モジュールã®å®Ÿè¡ŒãŒå®Œäº†ã™ã‚‹ã¨ã€Ansible ã¯ä¸€æ™‚ファイルを削除ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:184 msgid "Several ways exist to avoid the above logic flow entirely:" msgstr "上記ã®ãƒ­ã‚¸ãƒƒã‚¯ãƒ•ローを完全ã«å›žé¿ã™ã‚‹æ–¹æ³•ã¯ã„ãã¤ã‹ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:186 msgid "Use `pipelining`. When pipelining is enabled, Ansible does not save the module to a temporary file on the client. Instead it pipes the module to the remote python interpreter's stdin. Pipelining does not work for python modules involving file transfer (for example: :ref:`copy `, :ref:`fetch `, :ref:`template `), or for non-python modules." msgstr "`pipelining` を使用ã—ã¾ã™ã€‚パイプラインを有効ã«ã™ã‚‹ã¨ã€Ansible ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’クライアント上ã®ä¸€æ™‚ファイルã«ä¿å­˜ã—ã¾ã›ã‚“。代ã‚りã«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’リモート㮠python ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—ãƒªã‚¿ãƒ¼ã®æ¨™æº–入力ã«ãƒ‘イプã—ã¾ã™ã€‚パイプラインã¯ã€ãƒ•ァイル転é€ã‚’伴ㆠpython モジュール (例: :ref:`copy `ã€:ref:`fetch `ã€:ref:`template `) ã‚„ã€python 以外ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:192 msgid "Avoid becoming an unprivileged user. Temporary files are protected by UNIX file permissions when you ``become`` root or do not use ``become``. In Ansible 2.1 and above, UNIX file permissions are also secure if you make the connection to the managed machine as root and then use ``become`` to access an unprivileged account." msgstr "éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。root ã« ``become`` ã—ãŸå ´åˆã€ã¾ãŸã¯ ``become`` を使用ã—ãªã„å ´åˆã¯ã€UNIX ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨©é™ã§ä¿è­·ã•れã¾ã™ã€‚Ansible 2.1 以é™ã§ã¯ã€UNIX ファイルã®ãƒ‘ーミッションã¯ã€root ã¨ã—ã¦ç®¡ç†ãƒžã‚·ãƒ³ã«æŽ¥ç¶šã—ã€æ¨©é™ã®ãªã„アカウントã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``become`` を使用ã—ã¦ã‚‚ä¿è­·ã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:198 msgid "Although the Solaris ZFS filesystem has filesystem ACLs, the ACLs are not POSIX.1e filesystem acls (they are NFSv4 ACLs instead). Ansible cannot use these ACLs to manage its temp file permissions so you may have to resort to ``allow_world_readable_tmpfiles`` if the remote machines use ZFS." msgstr "Solaris ZFS ファイルシステムã«ã¯ãƒ•ァイルシステム ACL ãŒã‚りã¾ã™ãŒã€ACL 㯠POSIX.1e ファイルシステム㮠acl ã§ã¯ã‚りã¾ã›ã‚“ (æ­£ã—ã㯠NFSv4 ACL)。Ansible ã¯ã“れら㮠ACL を使用ã—ã¦ãã®ä¸€æ™‚ファイルã®ãƒ‘ーミッションを管ç†ã§ããªã„ãŸã‚ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ãŒ ZFS を使用ã—ã¦ã„ã‚‹å ´åˆã¯ ``allow_world_readable_tmpfiles`` ã‚’å†å‡¦ç†ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:205 msgid "Ansible makes it hard to unknowingly use ``become`` insecurely. Starting in Ansible 2.1, Ansible defaults to issuing an error if it cannot execute securely with ``become``. If you cannot use pipelining or POSIX ACLs, must connect as an unprivileged user, must use ``become`` to execute as a different unprivileged user, and decide that your managed nodes are secure enough for the modules you want to run there to be world readable, you can turn on ``allow_world_readable_tmpfiles`` in the :file:`ansible.cfg` file. Setting ``allow_world_readable_tmpfiles`` will change this from an error into a warning and allow the task to run as it did prior to 2.1." msgstr "Ansible ã§ã¯ã€çŸ¥ã‚‰ãšã« ``become`` を安全ã§ãªã„状態ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å›°é›£ã§ã™ã€‚Ansible 2.1 以é™ã€Ansible 㯠``become`` ã§å®‰å…¨ã«å®Ÿè¡Œã§ããªã„å ´åˆã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¨ãƒ©ãƒ¼ã‚’発行ã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚パイプラインや POSIX ACL を使用ã§ããšã€éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦æŽ¥ç¶šã—ãªã‘れã°ãªã‚‰ãšã€``become`` を使用ã—ã¦åˆ¥ã®éžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦å®Ÿè¡Œã—ãªã‘れã°ãªã‚‰ãšã€ç®¡ç†å¯¾è±¡ã®ãƒŽãƒ¼ãƒ‰ãŒã€ãã“ã§å®Ÿè¡Œã—ãŸã„モジュールãŒèª°ã§ã‚‚読むã“ã¨ãŒã§ãる程度ã«å®‰å…¨ã§ã‚ã‚‹ã¨åˆ¤æ–­ã—ãŸå ´åˆã¯ã€:file:`ansible.cfg` ファイル㧠``allow_world_readable_tmpfiles`` を有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``allow_world_readable_tmpfiles`` を設定ã™ã‚‹ã¨ã€ã“れãŒã‚¨ãƒ©ãƒ¼ã‹ã‚‰è­¦å‘Šã«å¤‰ã‚りã€2.1 以å‰ã®ã‚ˆã†ã«ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:217 msgid "Ansible 2.10 introduces the above-mentioned ``ansible_common_remote_group`` fallback. As mentioned above, if enabled, it is used when ``remote_user`` and ``become_user`` are both unprivileged users. Refer to the text above for details on when this fallback happens." msgstr "Ansible 2.10 ã§ã¯ã€ä¸Šè¨˜ã® ``ansible_common_remote_group`` フォールãƒãƒƒã‚¯ãŒå°Žå…¥ã•れã¾ã—ãŸã€‚上記ã®ã‚ˆã†ã«ã€æœ‰åйã«ãªã£ã¦ã„ã‚‹ã¨ã€``remote_user`` 㨠``become_user`` ã®ä¸¡æ–¹ãŒéžç‰¹æ¨©ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã‚ã‚‹å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®ãƒ•ォールãƒãƒƒã‚¯ãŒç™ºç”Ÿã™ã‚‹ã¨ãã®è©³ç´°ã¯ã€ä¸Šè¨˜ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:222 msgid "As mentioned above, if ``ansible_common_remote_group`` and ``allow_world_readable_tmpfiles`` are both enabled, it is unlikely that the world-readable fallback will ever trigger, and yet Ansible might still be unable to access the module file. This is because after the group ownership change is successful, Ansible does not fall back any further, and also does not do any check to ensure that the ``become_user`` is actually a member of the \"common group\". This is a design decision made by the fact that doing such a check would require another round-trip connection to the remote machine, which is a time-expensive operation. Ansible does, however, emit a warning in this case." msgstr "上記ã®ã‚ˆã†ã«ã€``ansible_common_remote_group`` 㨠``allow_world_readable_tmpfiles`` ã®ä¸¡æ–¹ãŒæœ‰åйã«ãªã‚‹ã¨ã€èª°ã§ã‚‚読ã¿å–りå¯èƒ½ãªãƒ•ォールãƒãƒƒã‚¯ãŒãƒˆãƒªã‚¬ãƒ¼ã•れãšã€Ansible ãŒã¾ã ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®æ‰€æœ‰æ¨©å¤‰æ›´ãŒæˆåŠŸã—ãŸå¾Œã«ã€Ansible ã¯ã“れ以上フォールãƒãƒƒã‚¯ã›ãšã€``become_user`` ãŒå®Ÿéš›ã«ã¯ã€Œå…±é€šã‚°ãƒ«ãƒ¼ãƒ—ã€ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã®ãƒã‚§ãƒƒã‚¯ãŒè¡Œã‚れãªã„ãŸã‚ã§ã™ã“れã¯ã€ã“ã®ã‚ˆã†ãªãƒã‚§ãƒƒã‚¯ã‚’行ã†ã¨ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¸ã®åˆ¥ã®ãƒ©ã‚¦ãƒ³ãƒ‰ãƒˆãƒªãƒƒãƒ—接続ãŒå¿…è¦ã«ãªã‚Šã€æ™‚é–“ã®ã‹ã‹ã‚‹æ“作ã«ãªã£ã¦ã—ã¾ã†ã“ã¨ã‚’考慮ã—ãŸè¨­è¨ˆä¸Šã®æ±ºå®šã§ã™ã€‚ã—ã‹ã—ã€Ansible ã¯ã“ã®å ´åˆã€è­¦å‘Šã‚’発ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:234 msgid "Not supported by all connection plugins" msgstr "ã™ã¹ã¦ã® connection プラグインã§ã‚µãƒãƒ¼ãƒˆã•れãªã„" #: ../../rst/user_guide/become.rst:236 msgid "Privilege escalation methods must also be supported by the connection plugin used. Most connection plugins will warn if they do not support become. Some will just ignore it as they always run as root (jail, chroot, and so on)." msgstr "ç‰¹æ¨©æ˜‡æ ¼ã®æ–¹æ³•ã¯ã€ä½¿ç”¨ã™ã‚‹ connection プラグインãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã»ã¨ã‚“ã©ã® connection プラグインã¯ã€become をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ã¨è­¦å‘Šã‚’表示ã—ã¾ã™ã€‚一部㮠connection プラグインã§ã¯ã€å¸¸ã« root ã¨ã—ã¦å®Ÿè¡Œã•れるãŸã‚ (jailã€chroot ãªã©)ã€ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:241 msgid "Only one method may be enabled per host" msgstr "ホストã”ã¨ã«æœ‰åйã«ã§ãる方法㯠1 ã¤ã ã‘" #: ../../rst/user_guide/become.rst:243 msgid "Methods cannot be chained. You cannot use ``sudo /bin/su -`` to become a user, you need to have privileges to run the command as that user in sudo or be able to su directly to it (the same for pbrun, pfexec or other supported methods)." msgstr "メソッドを連鎖ã•ã›ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。``sudo /bin/su -`` を使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ (become) ã“ã¨ã¯ã§ãã¾ã›ã‚“。ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—㦠sudo ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã‹ã€ç›´æŽ¥ su ã§ãるよã†ãªæ¨©é™ãŒå¿…è¦ã§ã™ (pbrunã€pfexecã€ãã®ä»–ã®ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹æ–¹æ³•ã‚‚åŒæ§˜ã§ã™)。" #: ../../rst/user_guide/become.rst:248 msgid "Privilege escalation must be general" msgstr "特権昇格ã¯ä¸€èˆ¬çš„ãªã‚‚ã®ã«ã™ã‚‹ã“ã¨" #: ../../rst/user_guide/become.rst:250 msgid "You cannot limit privilege escalation permissions to certain commands. Ansible does not always use a specific command to do something but runs modules (code) from a temporary file name which changes every time. If you have '/sbin/service' or '/bin/chmod' as the allowed commands this will fail with ansible as those paths won't match with the temporary file that Ansible creates to run the module. If you have security rules that constrain your sudo/pbrun/doas environment to running specific command paths only, use Ansible from a special account that does not have this constraint, or use AWX or the :ref:`ansible_platform` to manage indirect access to SSH credentials." msgstr "特権昇格ã®è¨±å¯ã‚’特定ã®ã‚³ãƒžãƒ³ãƒ‰ã«é™å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。Ansible ã¯å¸¸ã«ç‰¹å®šã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦ä½•ã‹ã‚’行ã†ã‚ã‘ã§ã¯ãªãã€æ¯Žå›žå¤‰æ›´ã•れる一時ファイルåã‹ã‚‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (コード) を実行ã—ã¾ã™ã€‚許å¯ã•れるコマンドã¨ã—ã¦ã€Œ/sbin/serviceã€ã‚„「/bin/chmodã€ã‚’指定ã—ãŸå ´åˆã€ã“れらã®ãƒ‘ス㯠Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ãŸã‚ã«ä½œæˆã™ã‚‹ä¸€æ™‚ファイルã¨ä¸€è‡´ã—ãªã„ãŸã‚ã€Ansible ã§ã¯å¤±æ•—ã—ã¾ã™ã€‚sudo/pbrun/doas 環境ã§ç‰¹å®šã®ã‚³ãƒžãƒ³ãƒ‰ãƒ‘スã—ã‹å®Ÿè¡Œã§ããªã„よã†ãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ«ãƒ¼ãƒ«ãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®åˆ¶ç´„ã‚’å—ã‘ãªã„特別ãªã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ Ansible を使用ã™ã‚‹ã‹ã€AWX ã¾ãŸã¯ :ref:`ansible_platform` を使用ã—㦠SSH èªè¨¼æƒ…å ±ã¸ã®é–“接的ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’管ç†ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:261 msgid "May not access environment variables populated by pamd_systemd" msgstr "pamd_systemd ãŒè¨­å®šã™ã‚‹ç’°å¢ƒå¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆ" #: ../../rst/user_guide/become.rst:263 msgid "For most Linux distributions using ``systemd`` as their init, the default methods used by ``become`` do not open a new \"session\", in the sense of systemd. Because the ``pam_systemd`` module will not fully initialize a new session, you might have surprises compared to a normal session opened through ssh: some environment variables set by ``pam_systemd``, most notably ``XDG_RUNTIME_DIR``, are not populated for the new user and instead inherited or just emptied." msgstr "``systemd`` ã‚’ init ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã„ã‚‹ã»ã¨ã‚“ã©ã® Linux ディストリビューションã§ã¯ã€``become`` ãŒä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ–¹æ³•ã§ã¯ã€systemd ã®æ„味ã§ã®æ–°ã—ã„「セッションã€ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。``pam_systemd`` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æ–°ã—ã„セッションを完全ã«ã¯åˆæœŸåŒ–ã—ãªã„ãŸã‚ã€ssh ã§é–‹ã„ãŸé€šå¸¸ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¨æ¯”ã¹ã¦é©šãã“ã¨ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。``pam_systemd`` ã«ã‚ˆã£ã¦è¨­å®šã•れãŸã„ãã¤ã‹ã®ç’°å¢ƒå¤‰æ•°ã€ç‰¹ã« ``XDG_RUNTIME_DIR`` ã¯æ–°ã—ã„ユーザーã«ã¯è¨­å®šã•れãšã€ä»£ã‚りã«ç¶™æ‰¿ã•れãŸã‚Šã€å˜ã«ç©ºã«ãªã£ãŸã‚Šã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:271 msgid "This might cause trouble when trying to invoke systemd commands that depend on ``XDG_RUNTIME_DIR`` to access the bus:" msgstr "ã“ã®ãŸã‚ã€ãƒã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ ``XDG_RUNTIME_DIR`` ã«ä¾å­˜ã™ã‚‹ systemd コマンドを呼ã³å‡ºã™éš›ã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:281 msgid "To force ``become`` to open a new systemd session that goes through ``pam_systemd``, you can use ``become_method: machinectl``." msgstr "``become`` ã«ã€``pam_systemd`` を通ã—ã¦æ–°ã—ã„ systemd セッションを開ããŸã‚ã«ã€``become_method: machinectl`` を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:284 msgid "For more information, see `this systemd issue `_." msgstr "詳細情報ã¯ã€ã€Œ`this systemd issue `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:290 msgid "Become and network automation" msgstr "become ãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è‡ªå‹•化" #: ../../rst/user_guide/become.rst:292 msgid "As of version 2.6, Ansible supports ``become`` for privilege escalation (entering ``enable`` mode or privileged EXEC mode) on all Ansible-maintained network platforms that support ``enable`` mode. Using ``become`` replaces the ``authorize`` and ``auth_pass`` options in a ``provider`` dictionary." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™ã€Ansible ã¯ã€``enable`` モードをサãƒãƒ¼ãƒˆã™ã‚‹ã™ã¹ã¦ã® Ansible ãŒä¿å®ˆã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ラットフォームã«ãŠã„ã¦ã€ç‰¹æ¨©æ˜‡æ ¼ (``enable`` モードã¾ãŸã¯ç‰¹æ¨© EXEC モードã¸ã®ç§»è¡Œ) ã®ãŸã‚ã« ``become`` をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚``become`` を使用ã™ã‚‹ã¨ã€``provider`` ディクショナリー㮠``authorize`` オプションãŠã‚ˆã³ ``auth_pass`` ã®ã‚ªãƒ—ションãŒç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:294 msgid "You must set the connection type to either ``connection: ansible.netcommon.network_cli`` or ``connection: ansible.netcommon.httpapi`` to use ``become`` for privilege escalation on network devices. Check the :ref:`platform_options` documentation for details." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã®ç‰¹æ¨©æ˜‡æ ¼ã« ``become`` を使用ã™ã‚‹ã«ã¯ã€æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’ ``connection: ansible.netcommon.network_cli`` ã¾ãŸã¯ ``connection: ansible.netcommon.httpapi`` ã®ã„ãšã‚Œã‹ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`platform_options`ã€ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:296 msgid "You can use escalated privileges on only the specific tasks that need them, on an entire play, or on all plays. Adding ``become: yes`` and ``become_method: enable`` instructs Ansible to enter ``enable`` mode before executing the task, play, or playbook where those parameters are set." msgstr "昇格ã—ãŸæ¨©é™ã¯ã€ãれを必è¦ã¨ã™ã‚‹ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã®ã¿ã€ãƒ—レイ全体ã§ã®ã¿ã€ã¾ãŸã¯ã™ã¹ã¦ã®ãƒ—レイã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``become: yes`` 㨠``become_method: enable`` を追加ã™ã‚‹ã¨ã€ã“れらã®ãƒ‘ラメーターãŒè¨­å®šã•れã¦ã„るタスクã€ãƒ—レイã€ã¾ãŸã¯ Playbook を実行ã™ã‚‹å‰ã«ã€``enable`` モードã«å…¥ã‚‹ã‚ˆã† Ansible ã«æŒ‡ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:298 msgid "If you see this error message, the task that generated it requires ``enable`` mode to succeed:" msgstr "ã“ã®ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れãŸå ´åˆã«ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’生æˆã—ãŸã‚¿ã‚¹ã‚¯ã‚’æˆåŠŸã•ã›ã‚‹ã«ã¯ã€``enable`` モードãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:304 msgid "To set ``enable`` mode for a specific task, add ``become`` at the task level:" msgstr "特定ã®ã‚¿ã‚¹ã‚¯ã« ``enable`` モードを設定ã™ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ ``become`` を追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:315 msgid "To set enable mode for all tasks in a single play, add ``become`` at the play level:" msgstr "1 ã¤ã®ãƒ—レイã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã« enable モードを設定ã™ã‚‹ã«ã¯ã€ãƒ—レイレベル㫠``become`` を追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:329 msgid "Setting enable mode for all tasks" msgstr "ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã« enable モードã®è¨­å®š" #: ../../rst/user_guide/become.rst:331 msgid "Often you wish for all tasks in all plays to run using privilege mode, that is best achieved by using ``group_vars``:" msgstr "ã™ã¹ã¦ã®ãƒ—レイã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’特権モードã§å®Ÿè¡Œã•ã›ãŸã„ã¨æ€ã†ã“ã¨ãŒã‚ˆãã‚りã¾ã™ãŒã€ãã®ã‚ˆã†ãªå ´åˆã«ã¯ã€``group_vars`` を使用ã™ã‚‹ã“ã¨ãŒæœ€é©ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:333 msgid "**group_vars/eos.yml**" msgstr "**group_vars/eos.yml**" #: ../../rst/user_guide/become.rst:344 msgid "Passwords for enable mode" msgstr "enable モードã®ãƒ‘スワード" #: ../../rst/user_guide/become.rst:346 msgid "If you need a password to enter ``enable`` mode, you can specify it in one of two ways:" msgstr "``enable`` モードã«å…¥ã‚‹ãƒ‘スワードãŒå¿…è¦ãªå ´åˆã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:348 msgid "providing the :option:`--ask-become-pass ` command line option" msgstr ":option:`--ask-become-pass ` ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æŒ‡å®š" #: ../../rst/user_guide/become.rst:349 msgid "setting the ``ansible_become_password`` connection variable" msgstr "``ansible_become_password`` 接続変数ã®è¨­å®š" #: ../../rst/user_guide/become.rst:353 msgid "As a reminder passwords should never be stored in plain text. For information on encrypting your passwords and other secrets with Ansible Vault, see :ref:`vault`." msgstr "通知パスワードã¯å¹³æ–‡ã§ä¿å­˜ã—ãªã„ã§ãã ã•ã„。Ansible Vault ã§ãƒ‘スワードやãã®ä»–ã®ç§˜å¯†ã‚’æš—å·åŒ–ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`vault`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:356 msgid "authorize and auth_pass" msgstr "authorize ãŠã‚ˆã³ auth_pass" #: ../../rst/user_guide/become.rst:358 msgid "Ansible still supports ``enable`` mode with ``connection: local`` for legacy network playbooks. To enter ``enable`` mode with ``connection: local``, use the module options ``authorize`` and ``auth_pass``:" msgstr "Ansible ã§ã¯ã€å¾“æ¥ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã® Playbook ã«ã¤ã„ã¦ã€``connection: local`` を使用ã—㟠``enable`` モードを引ãç¶šãサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚``connection: local`` ã§ ``enable`` モードã«å…¥ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ション ``authorize`` ãŠã‚ˆã³ ``auth_pass`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:373 msgid "We recommend updating your playbooks to use ``become`` for network-device ``enable`` mode consistently. The use of ``authorize`` and of ``provider`` dictionaries will be deprecated in future. Check the :ref:`platform_options` and :ref:`network_modules` documentation for details." msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã® ``enable`` モード㫠``become`` を一貫ã—ã¦ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã« Playbook ã‚’æ›´æ–°ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚``authorize`` ãŠã‚ˆã³ ``provider`` ディクショナリーã®ä½¿ç”¨ã¯ã€ä»Šå¾Œã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。詳細ã¯ã€ã€Œ:ref:`platform_options`ã€ãŠã‚ˆã³ã€Œ:ref:`network_modules`ã€ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:378 msgid "Become and Windows" msgstr "Become ãŠã‚ˆã³ Windows" #: ../../rst/user_guide/become.rst:380 msgid "Since Ansible 2.3, ``become`` can be used on Windows hosts through the ``runas`` method. Become on Windows uses the same inventory setup and invocation arguments as ``become`` on a non-Windows host, so the setup and variable names are the same as what is defined in this document." msgstr "Ansible 2.3 以é™ã€``become`` 㯠``runas`` メソッドを通ã˜ã¦ Windows ホストã§ã‚‚使用ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚Windows 上㮠Become ã¯ã€éž Windows ホスト上㮠``become`` ã¨åŒã˜ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼è¨­å®šã¨èµ·å‹•引数を使用ã™ã‚‹ãŸã‚ã€è¨­å®šã¨å¤‰æ•°åã¯ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§å®šç¾©ã•れã¦ã„ã‚‹ã‚‚ã®ã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:385 msgid "While ``become`` can be used to assume the identity of another user, there are other uses for it with Windows hosts. One important use is to bypass some of the limitations that are imposed when running on WinRM, such as constrained network delegation or accessing forbidden system calls like the WUA API. You can use ``become`` with the same user as ``ansible_user`` to bypass these limitations and run commands that are not normally accessible in a WinRM session." msgstr "``become`` ã¯ã€åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã® ID を装ã†ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€Windows ホストã§ã¯ãれ以外ã«ã‚‚使用方法ãŒã‚りã¾ã™ã€‚é‡è¦ãªç”¨é€”ã® 1 ã¤ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å§”è­²ã®åˆ¶ç´„ã‚„ã€WUA API ã®ã‚ˆã†ãªç¦æ­¢ã•れãŸã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ¼ãƒ«ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãªã©ã€WinRM 上ã§å®Ÿè¡Œã™ã‚‹éš›ã«èª²ã•れる制é™ã®ä¸€éƒ¨ã‚’回é¿ã™ã‚‹ã“ã¨ã§ã™ã€‚``become`` ã‚’ ``ansible_user`` ã¨åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ä½¿ç”¨ã™ã‚‹ã¨ã€ã“れらã®åˆ¶é™ã‚’回é¿ã—ã¦ã€WinRM セッションã§ã¯é€šå¸¸ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„コマンドを実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:393 msgid "Administrative rights" msgstr "管ç†è€…権é™" #: ../../rst/user_guide/become.rst:395 msgid "Many tasks in Windows require administrative privileges to complete. When using the ``runas`` become method, Ansible will attempt to run the module with the full privileges that are available to the remote user. If it fails to elevate the user token, it will continue to use the limited token during execution." msgstr "Windows ã®å¤šãã®ã‚¿ã‚¹ã‚¯ã‚’完了ã™ã‚‹ã«ã¯ã€ç®¡ç†è€…権é™ãŒå¿…è¦ã§ã™ã€‚``runas`` ã® become メソッドを使用ã™ã‚‹ã¨ã€Ansible ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä½¿ç”¨ã§ãる全権é™ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã‚’試ã¿ã¾ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ã®æ˜‡æ ¼ã«å¤±æ•—ã™ã‚‹ã¨ã€å®Ÿè¡Œä¸­ã«åˆ¶é™ã•れãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’引ãç¶šã使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:400 msgid "A user must have the ``SeDebugPrivilege`` to run a become process with elevated privileges. This privilege is assigned to Administrators by default. If the debug privilege is not available, the become process will run with a limited set of privileges and groups." msgstr "ユーザーã¯ã€æ˜‡æ ¼ã•ã‚ŒãŸæ¨©é™ã§ become プロセスを実行ã™ã‚‹ã«ã¯ã€``SeDebugPrivilege`` ãŒå¿…è¦ã§ã™ã€‚ã“ã®æ¨©é™ã¯ãƒ‡ãƒ•ォルトã§ç®¡ç†è€…ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚デãƒãƒƒã‚°æ¨©é™ãŒåˆ©ç”¨ã§ããªã„å ´åˆã€become プロセスã¯ã€é™ã‚‰ã‚ŒãŸä¸€é€£ã®ç‰¹æ¨©ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã§å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:405 msgid "To determine the type of token that Ansible was able to get, run the following task:" msgstr "Ansible ãŒå–å¾—ã§ããŸãƒˆãƒ¼ã‚¯ãƒ³ã®ç¨®é¡žã‚’確èªã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:414 msgid "The output will look something similar to the below:" msgstr "出力ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:502 msgid "Under the ``label`` key, the ``account_name`` entry determines whether the user has Administrative rights. Here are the labels that can be returned and what they represent:" msgstr "``label`` キーã«ãŠã„ã¦ã€``account_name`` エントリーã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç®¡ç†æ¨©é™ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’判断ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€è¿”ã™ã“ã¨ãŒã§ãるラベルã¨ã€ãã®ãƒ©ãƒ™ãƒ«ãŒè¡¨ã™å†…容を紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:506 msgid "``Medium``: Ansible failed to get an elevated token and ran under a limited token. Only a subset of the privileges assigned to user are available during the module execution and the user does not have administrative rights." msgstr "``Medium``: Ansible ãŒæ˜‡æ ¼ã—ãŸãƒˆãƒ¼ã‚¯ãƒ³ã®å–å¾—ã«å¤±æ•—ã—ã€åˆ¶é™ä»˜ãã®ãƒˆãƒ¼ã‚¯ãƒ³ã§å®Ÿè¡Œã•れã¾ã—ãŸã€‚モジュールã®å®Ÿè¡Œä¸­ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸç‰¹æ¨©ã®ã‚µãƒ–セットã®ã¿ãŒåˆ©ç”¨å¯èƒ½ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ç®¡ç†è€…権é™ã‚’æŒã£ã¦ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:510 msgid "``High``: An elevated token was used and all the privileges assigned to the user are available during the module execution." msgstr "``High``: 昇格ã•れãŸãƒˆãƒ¼ã‚¯ãƒ³ãŒä½¿ç”¨ã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã™ã¹ã¦ã®ç‰¹æ¨©ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œæ™‚ã«åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:513 msgid "``System``: The ``NT AUTHORITY\\System`` account is used and has the highest level of privileges available." msgstr "``System``: ``NT AUTHORITY\\System`` アカウントãŒä½¿ç”¨ã•れã€åˆ©ç”¨å¯èƒ½ãªæœ€é«˜ãƒ¬ãƒ™ãƒ«ã®ç‰¹æ¨©ãŒä»˜ä¸Žã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:516 msgid "The output will also show the list of privileges that have been granted to the user. When the privilege value is ``disabled``, the privilege is assigned to the logon token but has not been enabled. In most scenarios these privileges are automatically enabled when required." msgstr "出力ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ä»˜ä¸Žã•れる権é™ã®ä¸€è¦§ãŒè¡¨ç¤ºã•れã¾ã™ã€‚権é™ã®å€¤ãŒ ``disabled`` ã®å ´åˆã€ç‰¹æ¨©ã¯ãƒ­ã‚°ã‚ªãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ãŒã€æœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“。ã»ã¨ã‚“ã©ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€ã“れらã®ç‰¹æ¨©ã¯å¿…è¦ã«å¿œã˜ã¦è‡ªå‹•çš„ã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:521 msgid "If running on a version of Ansible that is older than 2.5 or the normal ``runas`` escalation process fails, an elevated token can be retrieved by:" msgstr "Ansible ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ 2.5 よりもå¤ã„å ´åˆã‚„ã€é€šå¸¸ã® ``runas`` ã®ã‚¨ã‚¹ã‚«ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ—ロセスãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€æ˜‡æ ¼ã—ãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’ä»¥ä¸‹ã®æ–¹æ³•ã§å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:524 msgid "Set the ``become_user`` to ``System`` which has full control over the operating system." msgstr "``become_user`` ã‚’ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’完全ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã™ã‚‹ ``System`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:527 msgid "Grant ``SeTcbPrivilege`` to the user Ansible connects with on WinRM. ``SeTcbPrivilege`` is a high-level privilege that grants full control over the operating system. No user is given this privilege by default, and care should be taken if you grant this privilege to a user or group. For more information on this privilege, please see `Act as part of the operating system `_. You can use the below task to set this privilege on a Windows host:" msgstr "Ansible ㌠WinRM ã§æŽ¥ç¶šã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã« ``SeTcbPrivilege`` を付与ã—ã¾ã™ã€‚``SeTcbPrivilege`` ã¯ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã™ã‚‹å®Œå…¨ãªåˆ¶å¾¡ã‚’付与ã™ã‚‹é«˜ãƒ¬ãƒ™ãƒ«ã®ç‰¹æ¨©ã§ã™ã€‚デフォルトã§ã¯ã€ã“ã®ç‰¹æ¨©ã¯æŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。ã“ã®ç‰¹æ¨©ã‚’ユーザーã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«ä»˜ä¸Žã™ã‚‹å ´åˆã¯æ³¨æ„ãŒå¿…è¦ã§ã™ã€‚ã“ã®ç‰¹æ¨©ã®è©³ç´°ã¯ã€ã€Œ`Act as part of the operating system `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。以下ã®ã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¦ã€Windows ホストã§ã“ã®ç‰¹æ¨©ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:543 msgid "Turn UAC off on the host and reboot before trying to become the user. UAC is a security protocol that is designed to run accounts with the ``least privilege`` principle. You can turn UAC off by running the following tasks:" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã‚‹ (become) å‰ã«ã€ãƒ›ã‚¹ãƒˆã§ UAC をオフã«ã—ã€å†èµ·å‹•ã—ã¾ã™ã€‚UAC ã¯ã€``least privilege`` プリンシパルã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’実行ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れãŸã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ—ロトコルã§ã™ã€‚以下ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—㦠UAC をオフã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:563 msgid "Granting the ``SeTcbPrivilege`` or turning UAC off can cause Windows security vulnerabilities and care should be given if these steps are taken." msgstr "``SeTcbPrivilege`` を付与ã™ã‚‹ã‹ UAC をオフã«ã™ã‚‹ã¨ã€Windows ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®è„†å¼±æ€§ã‚’引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ã‚ˆã†ãªæ‰‹é †ã‚’実行ã™ã‚‹å ´åˆã¯æ³¨æ„ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:567 msgid "Local service accounts" msgstr "ローカルサービスアカウント" #: ../../rst/user_guide/become.rst:569 msgid "Prior to Ansible version 2.5, ``become`` only worked on Windows with a local or domain user account. Local service accounts like ``System`` or ``NetworkService`` could not be used as ``become_user`` in these older versions. This restriction has been lifted since the 2.5 release of Ansible. The three service accounts that can be set under ``become_user`` are:" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``become`` ã¯ã€Windows ã§ãƒ­ãƒ¼ã‚«ãƒ«ã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã®ã¿å‹•作ã—ã¦ã„ã¾ã—ãŸã€‚``System`` ã‚„ ``NetworkService`` ãªã©ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚µãƒ¼ãƒ“スアカウントã¯ã€ã“ã‚Œã‚‰ã®æ—§ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ ``become_user`` ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã›ã‚“。ã“ã®åˆ¶é™ã¯ã€Ansible 2.5 ã®ãƒªãƒªãƒ¼ã‚¹ä»¥é™ã¯è§£é™¤ã•れã¾ã—ãŸã€‚``become_user`` ã«è¨­å®šã§ãã‚‹ 3 ã¤ã®ã‚µãƒ¼ãƒ“スアカウントã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/become.rst:575 msgid "System" msgstr "システム" #: ../../rst/user_guide/become.rst:576 msgid "NetworkService" msgstr "NetworkService" #: ../../rst/user_guide/become.rst:577 msgid "LocalService" msgstr "LocalService" #: ../../rst/user_guide/become.rst:579 msgid "Because local service accounts do not have passwords, the ``ansible_become_password`` parameter is not required and is ignored if specified." msgstr "ローカルサービスアカウントã¯ãƒ‘スワードをæŒãŸãªã„ãŸã‚ã€``ansible_become_password`` パラメーターã¯å¿…é ˆã§ã¯ãªãã€æŒ‡å®šã—ã¦ã‚‚無視ã•れã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:584 msgid "Become without setting a password" msgstr "パスワードを設定ã—ãªã„ Become" #: ../../rst/user_guide/become.rst:586 msgid "As of Ansible 2.8, ``become`` can be used to become a Windows local or domain account without requiring a password for that account. For this method to work, the following requirements must be met:" msgstr "Ansible 2.8 ã§ã¯ã€Windows ã®ãƒ­ãƒ¼ã‚«ãƒ«ã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãªã‚‹ãŸã‚ã«ã€ãã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ‘スワードãŒãªãã¦ã‚‚ ``become`` を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®æ–¹æ³•を行ã†ã«ã¯ã€ä»¥ä¸‹ã®è¦ä»¶ã‚’満ãŸã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:590 msgid "The connection user has the ``SeDebugPrivilege`` privilege assigned" msgstr "接続ユーザー㫠``SeDebugPrivilege`` 権é™ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã‚‹" #: ../../rst/user_guide/become.rst:591 msgid "The connection user is part of the ``BUILTIN\\Administrators`` group" msgstr "接続ユーザー㌠``BUILTIN\\Administrators`` グループã«å±žã—ã¦ã„ã‚‹" #: ../../rst/user_guide/become.rst:592 msgid "The ``become_user`` has either the ``SeBatchLogonRight`` or ``SeNetworkLogonRight`` user right" msgstr "``become_user`` ã«ã€``SeBatchLogonRight`` ã¾ãŸã¯ ``SeNetworkLogonRight`` ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©é™ãŒã‚ã‚‹" #: ../../rst/user_guide/become.rst:594 msgid "Using become without a password is achieved in one of two different methods:" msgstr "パスワードãªã—ã® become ã¯ã€æ¬¡ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:596 msgid "Duplicating an existing logon session's token if the account is already logged on" msgstr "アカウントãŒã™ã§ã«ãƒ­ã‚°ã‚ªãƒ³ã—ã¦ã„ã‚‹å ´åˆã¯ã€æ—¢å­˜ã®ãƒ­ã‚°ã‚ªãƒ³ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’複製ã™ã‚‹" #: ../../rst/user_guide/become.rst:597 msgid "Using S4U to generate a logon token that is valid on the remote host only" msgstr "S4U を使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã§ã®ã¿æœ‰åйãªãƒ­ã‚°ã‚¤ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹" #: ../../rst/user_guide/become.rst:599 msgid "In the first scenario, the become process is spawned from another logon of that user account. This could be an existing RDP logon, console logon, but this is not guaranteed to occur all the time. This is similar to the ``Run only when user is logged on`` option for a Scheduled Task." msgstr "最åˆã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®åˆ¥ã®ãƒ­ã‚°ã‚ªãƒ³ã‹ã‚‰ become プロセスを起動ã—ã¾ã™ã€‚ã“ã‚Œã¯æ—¢å­˜ã® RDP ログインã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ­ã‚°ã‚ªãƒ³ã§ã™ãŒã€ã“れã¯å¸¸ã«ç™ºç”Ÿã™ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“。ã“れã¯ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«æ¸ˆã¿ã‚¿ã‚¹ã‚¯ã® ``Run only when user is logged on`` オプションã¨é¡žä¼¼ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:604 msgid "In the case where another logon of the become account does not exist, S4U is used to create a new logon and run the module through that. This is similar to the ``Run whether user is logged on or not`` with the ``Do not store password`` option for a Scheduled Task. In this scenario, the become process will not be able to access any network resources like a normal WinRM process." msgstr "become アカウントã®åˆ¥ã®ãƒ­ã‚°ã‚ªãƒ³ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€S4U を使用ã—ã¦æ–°ã—ã„ログオンを作æˆã—ã€ãれを介ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚ã“れã¯ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«æ¸ˆã¿ã‚¿ã‚¹ã‚¯ã® ``Do not store password`` オプションをæŒã¤ ``Run whether user is logged on or not`` ã¨ä¼¼ã¦ã„ã¾ã™ã€‚ã“ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€become プロセスã¯é€šå¸¸ã® WinRM プロセスãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/become.rst:610 msgid "To make a distinction between using become with no password and becoming an account that has no password make sure to keep ``ansible_become_password`` as undefined or set ``ansible_become_password:``." msgstr "パスワードãªã—ã§ become を使用ã™ã‚‹ã“ã¨ã¨ã€ãƒ‘スワードãŒãªã„アカウントã«ãªã‚‹ (become) ã“ã¨ã‚’区別ã™ã‚‹ã«ã¯ã€``ansible_become_password`` ã‚’ undefined ã«ã—ã¦ãŠãã‹ã€``ansible_become_password:`` を設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:614 msgid "Because there are no guarantees an existing token will exist for a user when Ansible runs, there's a high change the become process will only have access to local resources. Use become with a password if the task needs to access network resources" msgstr "Ansible ã®å®Ÿè¡Œæ™‚ã«æ—¢å­˜ã®ãƒˆãƒ¼ã‚¯ãƒ³ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å­˜åœ¨ã™ã‚‹ã¨ã„ã†ä¿è¨¼ãŒãªã„ãŸã‚ã€become プロセスãŒãƒ­ãƒ¼ã‚«ãƒ«ãƒªã‚½ãƒ¼ã‚¹ã«ã®ã¿ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚タスクãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ‘スワード㧠become を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:620 msgid "Accounts without a password" msgstr "パスワードã®ãªã„アカウント" #: ../../rst/user_guide/become.rst:622 msgid "As a general security best practice, you should avoid allowing accounts without passwords." msgstr "セキュリティーã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªãƒ™ã‚¹ãƒˆãƒ—ラクティスã¨ã—ã¦ã€ãƒ‘スワードã®ãªã„アカウントを許å¯ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/become.rst:624 msgid "Ansible can be used to become a Windows account that does not have a password (like the ``Guest`` account). To become an account without a password, set up the variables like normal but set ``ansible_become_password: ''``." msgstr "Ansible を使用ã—ã¦ã€ãƒ‘スワードãŒãªã„ Windows アカウントã«ãªã‚Šã¾ã™ (``Guest`` アカウントãªã©)。パスワードã®ãªã„アカウントã«ãªã‚‹ã«ã¯ã€é€šå¸¸ã©ãŠã‚Šå¤‰æ•°ã‚’設定ã—ã¾ã™ãŒã€``ansible_become_password: ''`` を設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:628 msgid "Before become can work on an account like this, the local policy `Accounts: Limit local account use of blank passwords to console logon only `_ must be disabled. This can either be done through a Group Policy Object (GPO) or with this Ansible task:" msgstr "ã“ã®ã‚ˆã†ãªã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ become を有効ã«ã™ã‚‹å‰ã«ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒªã‚·ãƒ¼ `Accounts: Limit local account use of blank passwords to console logon only `_ を無効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れ㯠Group Policy Object (GPO) ã¾ãŸã¯ã“ã® Ansible タスクã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:643 msgid "This is only for accounts that do not have a password. You still need to set the account's password under ``ansible_become_password`` if the become_user has a password." msgstr "ã“れã¯ã€ãƒ‘スワードãŒãªã„アカウント専用ã§ã™ã€‚become_user ã«ãƒ‘スワードãŒã‚ã‚‹å ´åˆã¯ã€``ansible_become_password`` ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ‘スワードを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:648 msgid "Become flags for Windows" msgstr "Windows ã§ã® Become フラグ" #: ../../rst/user_guide/become.rst:650 msgid "Ansible 2.5 added the ``become_flags`` parameter to the ``runas`` become method. This parameter can be set using the ``become_flags`` task directive or set in Ansible's configuration using ``ansible_become_flags``. The two valid values that are initially supported for this parameter are ``logon_type`` and ``logon_flags``." msgstr "Ansible 2.5 ã§ã¯ã€``become_flags`` パラメーターを become メソッド ``runas`` ã«è¿½åŠ ã—ã¾ã—ãŸã€‚ã“ã®ãƒ‘ラメーターã¯ã€``become_flags`` タスクディレクティブを使用ã™ã‚‹ã‹ã€``ansible_become_flags`` を使用ã—㦠Ansible ã®è¨­å®šã§è¨­å®šã§ãã¾ã™ã€‚ã“ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã§æœ€åˆã«ã‚µãƒãƒ¼ãƒˆã•れる 2 ã¤ã®æœ‰åйãªå€¤ã¯ ``logon_type`` 㨠``logon_flags`` ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:656 msgid "These flags should only be set when becoming a normal user account, not a local service account like LocalSystem." msgstr "ã“れらã®ãƒ•ラグã¯ã€LocalSystem ãªã©ã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚µãƒ¼ãƒ“スアカウントã§ã¯ãªãã€é€šå¸¸ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãªã‚‹ (become) å ´åˆã«ã®ã¿è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:658 msgid "The key ``logon_type`` sets the type of logon operation to perform. The value can be set to one of the following:" msgstr "éµ ``logon_type`` ã¯ã€å®Ÿè¡Œã™ã‚‹ãƒ­ã‚°ã‚ªãƒ³æ“作ã®ã‚¿ã‚¤ãƒ—を設定ã—ã¾ã™ã€‚値ã¯ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:661 msgid "``interactive``: The default logon type. The process will be run under a context that is the same as when running a process locally. This bypasses all WinRM restrictions and is the recommended method to use." msgstr "``interactive``: デフォルトã®ãƒ­ã‚°ã‚ªãƒ³ã‚¿ã‚¤ãƒ—。プロセスã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ãƒ—ロセスを実行ã™ã‚‹ã¨ãã¨åŒã˜ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§å®Ÿè¡Œã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã™ã¹ã¦ã® WinRM 制é™ãŒå›žé¿ã•ã‚Œã€æŽ¨å¥¨ã•れる方法ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:665 msgid "``batch``: Runs the process under a batch context that is similar to a scheduled task with a password set. This should bypass most WinRM restrictions and is useful if the ``become_user`` is not allowed to log on interactively." msgstr "``batch``: パスワードセットを使用ã—ã¦ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸã‚¿ã‚¹ã‚¯ã«ä¼¼ãŸãƒãƒƒãƒã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§ãƒ—ロセスを実行ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã»ã¨ã‚“ã©ã® WinRM 制é™ã‚’回é¿ã™ã‚‹å¿…è¦ãŒã‚りã€``become_user`` ãŒå¯¾è©±çš„ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ããªã„å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:670 msgid "``new_credentials``: Runs under the same credentials as the calling user, but outbound connections are run under the context of the ``become_user`` and ``become_password``, similar to ``runas.exe /netonly``. The ``logon_flags`` flag should also be set to ``netcredentials_only``. Use this flag if the process needs to access a network resource (like an SMB share) using a different set of credentials." msgstr "``new_credentials``: 呼ã³å‡ºã—元ユーザーã¨åŒã˜èªè¨¼æƒ…å ±ã®ä¸‹ã§å®Ÿè¡Œã•れã¾ã™ãŒã€ç™ºä¿¡å´ã®æŽ¥ç¶šã¯ ``runas.exe /netonly`` ã¨åŒæ§˜ã« ``become_user`` 㨠``become_password`` ã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã®ä¸‹ã§å®Ÿè¡Œã•れã¾ã™ã€‚``logon_flags`` フラグã¯ã€``netcredentials_only`` ã«ã‚‚設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ラグã¯ã€ãƒ—ロセスãŒç•°ãªã‚‹èªè¨¼æƒ…報セットを使用ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ (SMB 共有ãªã©) ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:677 msgid "``network``: Runs the process under a network context without any cached credentials. This results in the same type of logon session as running a normal WinRM process without credential delegation, and operates under the same restrictions." msgstr "``network``: キャッシュã•れãŸèªè¨¼æƒ…å ±ãªã—ã§ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§ãƒ—ロセスを実行ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€èªè¨¼æƒ…å ±ã®å§”譲を使用ã›ãšã«é€šå¸¸ã® WinRM プロセスを実行ã™ã‚‹ã®ã¨åŒã˜ç¨®é¡žã®ãƒ­ã‚°ã‚ªãƒ³ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒå®Ÿè¡Œã•れã€åŒã˜åˆ¶é™ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:682 msgid "``network_cleartext``: Like the ``network`` logon type, but instead caches the credentials so it can access network resources. This is the same type of logon session as running a normal WinRM process with credential delegation." msgstr "``network_cleartext``: ``network`` ログオンタイプãªã®ã§ã™ãŒã€ä»£ã‚りã«èªè¨¼æƒ…報をキャッシュã™ã‚‹ãŸã‚ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ã“れã¯ã€èªè¨¼æƒ…å ±ã®å§”譲を使用ã—ã¦é€šå¸¸ã® WinRM プロセスを実行ã™ã‚‹ã®ã¨åŒã˜ã‚¿ã‚¤ãƒ—ã®ãƒ­ã‚°ã‚ªãƒ³ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:686 msgid "For more information, see `dwLogonType `_." msgstr "詳細情報ã¯ã€ã€Œ`dwLogonType `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:689 msgid "The ``logon_flags`` key specifies how Windows will log the user on when creating the new process. The value can be set to none or multiple of the following:" msgstr "``logon_flags`` キーã¯ã€æ–°è¦ãƒ—ロセスã®ä½œæˆæ™‚ã« Windows ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ログã«è¨˜éŒ²ã™ã‚‹æ–¹æ³•を指定ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ã€ä»¥ä¸‹ã®è¤‡æ•°ã®å€¤ã«è¨­å®šã§ãã€å€¤ã‚’設定ã—ãªã„ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:692 msgid "``with_profile``: The default logon flag set. The process will load the user's profile in the ``HKEY_USERS`` registry key to ``HKEY_CURRENT_USER``." msgstr "``with_profile``: デフォルトã®ãƒ­ã‚°ã‚ªãƒ³ãƒ•ラグセット。ã“ã®ãƒ—ロセスã¯ã€``HKEY_USERS`` レジストリーキーã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ロファイルを ``HKEY_CURRENT_USER`` ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:695 msgid "``netcredentials_only``: The process will use the same token as the caller but will use the ``become_user`` and ``become_password`` when accessing a remote resource. This is useful in inter-domain scenarios where there is no trust relationship, and should be used with the ``new_credentials`` ``logon_type``." msgstr "``netcredentials_only``: プロセスã¯å‘¼ã³å‡ºã—å…ƒã¨åŒã˜ãƒˆãƒ¼ã‚¯ãƒ³ã‚’使用ã—ã¾ã™ãŒã€ãƒªãƒ¢ãƒ¼ãƒˆãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã«ã¯ ``become_user`` 㨠``become_password`` を使用ã—ã¾ã™ã€‚ã“れã¯ã€ä¿¡é ¼é–¢ä¿‚ãŒãªã„ドメイン間シナリオã§ä¾¿åˆ©ã§ã™ã€‚ã¾ãŸã€``new_credentials`` ``logon_type`` ã¨å…±ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:700 msgid "By default ``logon_flags=with_profile`` is set, if the profile should not be loaded set ``logon_flags=`` or if the profile should be loaded with ``netcredentials_only``, set ``logon_flags=with_profile,netcredentials_only``." msgstr "デフォルトã§ã¯ ``logon_flags=with_profile`` ãŒè¨­å®šã•れã¦ã„ã¾ã™ãŒã€ãƒ—ロファイルを読ã¿è¾¼ã‚€å¿…è¦ãŒãªã„å ´åˆã¯ ``logon_flags=`` を設定ã™ã‚‹ã‹ã€``netcredentials_only`` ã§ãƒ—ロファイルを読ã¿è¾¼ã‚€å¿…è¦ãŒã‚ã‚‹å ´åˆã¯``logon_flags=with_profile,netcredentials_only`` を設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:704 msgid "For more information, see `dwLogonFlags `_." msgstr "詳細情報ã¯ã€ã€Œ`dwLogonFlags `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:706 msgid "Here are some examples of how to use ``become_flags`` with Windows tasks:" msgstr "Windows タスク㧠``become_flags`` を使用ã™ã‚‹ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:734 msgid "Limitations of become on Windows" msgstr "Windows ã«ãŠã‘ã‚‹ become 制é™" #: ../../rst/user_guide/become.rst:736 msgid "Running a task with ``async`` and ``become`` on Windows Server 2008, 2008 R2 and Windows 7 only works when using Ansible 2.7 or newer." msgstr "Windows Server 2008ã€2008 R2ã€Windows 7 ã§ ``async`` ãŠã‚ˆã³ ``become`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã‚‹ã®ã¯ã€Ansible 2.7 以é™ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã®ã¿ã§ã™ã€‚" #: ../../rst/user_guide/become.rst:739 msgid "By default, the become user logs on with an interactive session, so it must have the right to do so on the Windows host. If it does not inherit the ``SeAllowLogOnLocally`` privilege or inherits the ``SeDenyLogOnLocally`` privilege, the become process will fail. Either add the privilege or set the ``logon_type`` flag to change the logon type used." msgstr "デフォルトã§ã¯ã€become ユーザーã¯å¯¾è©±åž‹ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ãƒ­ã‚°ã‚ªãƒ³ã™ã‚‹ãŸã‚ã€Windows ホストã§ã“ã®æ¨©é™ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``SeAllowLogOnLocally`` 特権を継承ã—ãªã„å ´åˆã€ã¾ãŸã¯ ``SeDenyLogOnLocally`` 特権を継承ã™ã‚‹å ´åˆã¯ become プロセスã«å¤±æ•—ã—ã¾ã™ã€‚特権を追加ã™ã‚‹ã‹ã€``logon_type`` フラグを設定ã—ã¦ä½¿ç”¨ã™ã‚‹ãƒ­ã‚°ã‚ªãƒ³ã‚¿ã‚¤ãƒ—を変更ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/become.rst:745 msgid "Prior to Ansible version 2.3, become only worked when ``ansible_winrm_transport`` was either ``basic`` or ``credssp``. This restriction has been lifted since the 2.4 release of Ansible for all hosts except Windows Server 2008 (non R2 version)." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.3 よりもå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€``ansible_winrm_transport`` ㌠``basic`` ã¾ãŸã¯ ``credssp`` ã®ã„ãšã‚Œã‹ã§ã®ã¿æ©Ÿèƒ½ã—ã¦ã„ã¾ã—ãŸã€‚ã“ã®åˆ¶é™ã¯ã€Windows Server 2008 (R2 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥å¤–) を除ãã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§ 2.4 リリース以é™ã«å–り込ã¾ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/become.rst:750 msgid "The Secondary Logon service ``seclogon`` must be running to use ``ansible_become_method: runas``" msgstr "``ansible_become_method: runas`` を使用ã™ã‚‹ã«ã¯ã€ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼ãƒ­ã‚°ã‚ªãƒ³ã‚µãƒ¼ãƒ“ス ``seclogon`` ãŒå®Ÿè¡Œã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/become.rst:754 msgid "`Mailing List `_" msgstr "`Mailing List `_" #: ../../rst/user_guide/become.rst:755 ../../rst/user_guide/intro_adhoc.rst:210 #: ../../rst/user_guide/intro_bsd.rst:104 #: ../../rst/user_guide/intro_dynamic_inventory.rst:247 #: ../../rst/user_guide/intro_getting_started.rst:196 #: ../../rst/user_guide/intro_inventory.rst:789 #: ../../rst/user_guide/intro_patterns.rst:199 #: ../../rst/user_guide/modules.rst:34 #: ../../rst/user_guide/modules_intro.rst:50 #: ../../rst/user_guide/modules_support.rst:68 #: ../../rst/user_guide/playbooks_best_practices.rst:167 #: ../../rst/user_guide/playbooks_intro.rst:155 #: ../../rst/user_guide/playbooks_reuse.rst:221 #: ../../rst/user_guide/playbooks_reuse_includes.rst:32 #: ../../rst/user_guide/playbooks_reuse_roles.rst:623 #: ../../rst/user_guide/sample_setup.rst:285 msgid "Questions? Help? Ideas? Stop by the list on Google Groups" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã‹ã€‚ã”ææ¡ˆã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google グループã®ä¸€è¦§ã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/become.rst:756 #: ../../rst/user_guide/collections_using.rst:382 #: ../../rst/user_guide/intro_adhoc.rst:211 #: ../../rst/user_guide/intro_bsd.rst:105 #: ../../rst/user_guide/intro_dynamic_inventory.rst:248 #: ../../rst/user_guide/intro_getting_started.rst:197 #: ../../rst/user_guide/intro_inventory.rst:790 #: ../../rst/user_guide/intro_patterns.rst:200 #: ../../rst/user_guide/modules.rst:35 #: ../../rst/user_guide/modules_intro.rst:51 #: ../../rst/user_guide/modules_support.rst:69 #: ../../rst/user_guide/playbooks_advanced_syntax.rst:111 #: ../../rst/user_guide/playbooks_async.rst:174 #: ../../rst/user_guide/playbooks_blocks.rst:188 #: ../../rst/user_guide/playbooks_conditionals.rst:507 #: ../../rst/user_guide/playbooks_debugger.rst:328 #: ../../rst/user_guide/playbooks_delegation.rst:157 #: ../../rst/user_guide/playbooks_environment.rst:140 #: ../../rst/user_guide/playbooks_error_handling.rst:244 #: ../../rst/user_guide/playbooks_filters.rst:1851 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:741 #: ../../rst/user_guide/playbooks_lookups.rst:36 #: ../../rst/user_guide/playbooks_loops.rst:446 #: ../../rst/user_guide/playbooks_prompts.rst:115 #: ../../rst/user_guide/playbooks_strategies.rst:224 #: ../../rst/user_guide/playbooks_tags.rst:431 #: ../../rst/user_guide/playbooks_templating.rst:60 #: ../../rst/user_guide/playbooks_tests.rst:402 #: ../../rst/user_guide/playbooks_variables.rst:465 #: ../../rst/user_guide/windows_dsc.rst:504 #: ../../rst/user_guide/windows_faq.rst:250 #: ../../rst/user_guide/windows_setup.rst:582 #: ../../rst/user_guide/windows_usage.rst:512 #: ../../rst/user_guide/windows_winrm.rst:913 msgid ":ref:`communication_irc`" msgstr ":ref:`communication_irc`" #: ../../rst/user_guide/become.rst:757 #: ../../rst/user_guide/collections_using.rst:383 #: ../../rst/user_guide/intro_adhoc.rst:212 #: ../../rst/user_guide/intro_bsd.rst:106 #: ../../rst/user_guide/intro_dynamic_inventory.rst:249 #: ../../rst/user_guide/intro_getting_started.rst:198 #: ../../rst/user_guide/intro_inventory.rst:791 #: ../../rst/user_guide/intro_patterns.rst:201 #: ../../rst/user_guide/modules.rst:36 #: ../../rst/user_guide/modules_intro.rst:52 #: ../../rst/user_guide/modules_support.rst:70 #: ../../rst/user_guide/playbooks_advanced_syntax.rst:112 #: ../../rst/user_guide/playbooks_async.rst:175 #: ../../rst/user_guide/playbooks_blocks.rst:189 #: ../../rst/user_guide/playbooks_conditionals.rst:508 #: ../../rst/user_guide/playbooks_debugger.rst:329 #: ../../rst/user_guide/playbooks_delegation.rst:158 #: ../../rst/user_guide/playbooks_environment.rst:141 #: ../../rst/user_guide/playbooks_error_handling.rst:245 #: ../../rst/user_guide/playbooks_filters.rst:1852 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:742 #: ../../rst/user_guide/playbooks_lookups.rst:37 #: ../../rst/user_guide/playbooks_loops.rst:447 #: ../../rst/user_guide/playbooks_prompts.rst:116 #: ../../rst/user_guide/playbooks_strategies.rst:225 #: ../../rst/user_guide/playbooks_tags.rst:432 #: ../../rst/user_guide/playbooks_templating.rst:61 #: ../../rst/user_guide/playbooks_tests.rst:403 #: ../../rst/user_guide/playbooks_variables.rst:466 #: ../../rst/user_guide/windows_dsc.rst:505 #: ../../rst/user_guide/windows_faq.rst:251 #: ../../rst/user_guide/windows_setup.rst:583 #: ../../rst/user_guide/windows_usage.rst:513 #: ../../rst/user_guide/windows_winrm.rst:914 msgid "How to join Ansible chat channels" msgstr "Ansible ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã¸ã®å‚加方法" #: ../../rst/user_guide/collections_using.rst:6 msgid "Using collections" msgstr "コレクションã®ä½¿ç”¨" #: ../../rst/user_guide/collections_using.rst:8 msgid "Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. As modules move from the core Ansible repository into collections, the module documentation will move to the :ref:`collections pages `." msgstr "コレクションã¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ—ラグインãªã©ã® Ansible コンテンツã®é…布形å¼ã§ã™ã€‚モジュールãŒã‚³ã‚¢ã® Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»å‹•ã—ãŸãŸã‚ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚‚ :ref:`コレクションページ ` ã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:10 msgid "You can install and use collections through `Ansible Galaxy `_." msgstr "`Ansible Galaxy `_ を使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:12 msgid "For details on how to *develop* collections see :ref:`developing_collections`." msgstr "*develop* コレクションã®ä½¿ç”¨æ–¹æ³•ã¯ã€ã€Œ:ref:`developing_collections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/collections_using.rst:13 msgid "For the current development status of Collections and FAQ see `Ansible Collections Community Guide `_." msgstr "コレクションãŠã‚ˆã³ FAQ ã®ç¾åœ¨ã®é–‹ç™ºã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€ã€Œ`Ansible コレクションã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã‚¬ã‚¤ãƒ‰ `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/collections_using.rst:22 msgid "Installing collections" msgstr "コレクションã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/collections_using.rst:26 msgid "If you install a collection manually as described in this paragraph, the collection will not be upgraded automatically when you upgrade the ``ansible`` package or ``ansible-core``." msgstr "ã“ã®æ®µè½ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸå ´åˆã«ã¯ã€``ansible`` パッケージã¾ãŸã¯ ``ansible-core`` をアップグレードã—ãŸã¨ãã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒè‡ªå‹•çš„ã«ã‚¢ãƒƒãƒ—グレードã•れã¾ã›ã‚“。" #: ../../rst/user_guide/collections_using.rst:29 msgid "Installing collections with ``ansible-galaxy``" msgstr "``ansible-galaxy`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections.txt:3 msgid "By default, ``ansible-galaxy collection install`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`). You do not need any further configuration." msgstr "デフォルトã§ã¯ã€``ansible-galaxy collection install`` 㯠https://galaxy.ansible.com ã‚’ Galaxy サーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ (:ref:`galaxy_server` ã® :file:`ansible.cfg` ファイルã«è¨˜è¼‰)。追加設定ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/shared_snippets/installing_collections.txt:7 msgid "See :ref:`Configuring the ansible-galaxy client ` if you are using any other Galaxy server, such as Red Hat Automation Hub." msgstr "Red Hat Automation Hub ãªã©ã®ä»–ã® Galaxy サーãƒãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã€Œ:ref:`ansible-galaxy クライアントã®è¨­å®š `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/shared_snippets/installing_collections.txt:9 msgid "To install a collection hosted in Galaxy:" msgstr "Galaxy ã§ãƒ›ã‚¹ãƒˆã•れるコレクションをインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:15 msgid "To upgrade a collection to the latest available version from the Galaxy server you can use the ``--upgrade`` option:" msgstr "コレクションを Galaxy サーãƒãƒ¼ã‹ã‚‰åˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã«ã¯ã€``--upgrade`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:21 msgid "You can also directly use the tarball from your build:" msgstr "ビルドã‹ã‚‰ tarball を直接使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:27 msgid "You can build and install a collection from a local source directory. The ``ansible-galaxy`` utility builds the collection using the ``MANIFEST.json`` or ``galaxy.yml`` metadata in the directory." msgstr "ローカルソースディレクトリーã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚``ansible-galaxy`` ユーティリティーã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``MANIFEST.json`` ã¾ãŸã¯ ``galaxy.yml`` メタデータを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:34 msgid "You can also install multiple collections in a namespace directory." msgstr "åå‰ç©ºé–“ディレクトリーã«è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:51 msgid "The install command automatically appends the path ``ansible_collections`` to the one specified with the ``-p`` option unless the parent directory is already in a folder called ``ansible_collections``." msgstr "install コマンドã¯ã€è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒ ``ansible_collections`` ディレクトリーã«å«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã‚’除ãã€``-p`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã—ãŸã‚‚ã®ã«ã€ãƒ‘ス ``ansible_collections`` を自動的ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:55 msgid "When using the ``-p`` option to specify the install path, use one of the values configured in :ref:`COLLECTIONS_PATHS`, as this is where Ansible itself will expect to find collections. If you don't specify a path, ``ansible-galaxy collection install`` installs the collection to the first path defined in :ref:`COLLECTIONS_PATHS`, which by default is ``~/.ansible/collections``" msgstr "``-p`` オプションを使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‘スを指定ã™ã‚‹å ´åˆã¯ã€Ansible 自体ãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒäºˆæƒ³ã•れる場所ã§ã‚ã‚‹ãŸã‚ã€:ref:`COLLECTIONS_PATHS` ã«è¨­å®šã•れãŸå€¤ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¾ã™ã€‚パスを指定ã—ãªã„ã¨ã€``ansible-galaxy collection install`` ã¯ã€:ref:`COLLECTIONS_PATHS` ã§å®šç¾©ã•れã¦ã„る最åˆã®ãƒ‘スã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚ã“れã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ ``~/.ansible/collections`` ã§ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:59 msgid "You can also keep a collection adjacent to the current playbook, under a ``collections/ansible_collections/`` directory structure." msgstr "ã¾ãŸã€``collections/ansible_collections/`` ディレクトリー構造ã®ä¸‹ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ç¾åœ¨ã® Playbook ã®æ¨ªã«ç¶­æŒã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections.txt:71 msgid "See :ref:`collection_structure` for details on the collection directory structure." msgstr "コレクションディレクトリー構造ã®è©³ç´°ã¯ã€ã€Œ:ref:`collection_structure`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/collections_using.rst:36 msgid "Installing an older version of a collection" msgstr "å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_older_collection.txt:2 msgid "You can only have one version of a collection installed at a time. By default ``ansible-galaxy`` installs the latest available version. If you want to install a specific version, you can add a version range identifier. For example, to install the 1.0.0-beta.1 version of the collection:" msgstr "一度ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ 1 ã¤ã ã‘ã§ã™ã€‚デフォルトã§ã¯ã€``ansible-galaxy`` ã«ã‚ˆã‚Šåˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç¯„囲識別å­ã‚’追加ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã® 1.0.0-beta.1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:8 msgid "You can specify multiple range identifiers separated by ``,``. Use single quotes so the shell passes the entire command, including ``>``, ``!``, and other operators, along. For example, to install the most recent version that is greater than or equal to 1.0.0 and less than 2.0.0:" msgstr "``,`` ã§åŒºåˆ‡ã£ã¦è¤‡æ•°ã®ç¯„囲識別å­ã‚’指定ã§ãã¾ã™ã€‚シェルãŒã€``>``ã€``!``ã€ãŠã‚ˆã³ãã®ä»–ã®æ¼”ç®—å­ã‚’å«ã‚€ã‚³ãƒžãƒ³ãƒ‰å…¨ä½“を渡ã™ã‚ˆã†ã«ã€ä¸€é‡å¼•用符を使用ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€1.0.0 以上 2.0.0 æœªæº€ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:14 msgid "Ansible will always install the most recent version that meets the range identifiers you specify. You can use the following range identifiers:" msgstr "Ansible ã¯ã€æŒ‡å®šã™ã‚‹ç¯„囲識別å­ã‚’満ãŸã™æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’常ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚以下ã®ç¯„囲識別å­ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:16 msgid "``*``: The most recent version. This is the default." msgstr "``*``: 最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚ã“れãŒãƒ‡ãƒ•ォルトã§ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:17 msgid "``!=``: Not equal to the version specified." msgstr "``!=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨åŒç­‰ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/shared_snippets/installing_older_collection.txt:18 msgid "``==``: Exactly the version specified." msgstr "``==``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ãã®ã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:19 msgid "``>=``: Greater than or equal to the version specified." msgstr "``>=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸Šã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:20 msgid "``>``: Greater than the version specified." msgstr "``>``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚大ãããªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:21 msgid "``<=``: Less than or equal to the version specified." msgstr "``<=``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸‹ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:22 msgid "``<``: Less than the version specified." msgstr "``<``: 指定ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šã‚‚å°ã•ããªã‚Šã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_older_collection.txt:25 msgid "By default ``ansible-galaxy`` ignores pre-release versions. To install a pre-release version, you must use the ``==`` range identifier to require it explicitly." msgstr "デフォルトã§ã¯ã€``ansible-galaxy`` ã¯ãƒªãƒªãƒ¼ã‚¹å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’無視ã—ã¾ã™ã€‚リリースå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€``==`` 範囲識別å­ã‚’使用ã—ã¦æ˜Žç¤ºçš„ã«è¦æ±‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:41 msgid "Installing a collection from a git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:1 msgid "You can install a collection from a git repository instead of from Galaxy or Automation Hub. As a developer, installing from a git repository lets you review your collection before you create the tarball and publish the collection. As a user, installing from a git repository lets you use collections or versions that are not in Galaxy or Automation Hub yet." msgstr "コレクションã¯ã€Galaxy ã¾ãŸã¯ Automation Hub ã®ä»£ã‚り㫠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚開発者ã¯ã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã€tarball を作æˆã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’公開ã™ã‚‹å‰ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’確èªã§ãã¾ã™ã€‚ユーザーã¨ã—㦠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã€Galaxy ã¾ãŸã¯ Automation Hub ã«ãªã„コレクションã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:3 msgid "The repository must contain a ``galaxy.yml`` or ``MANIFEST.json`` file. This file provides metadata such as the version number and namespace of the collection." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã¯ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã€namespace ãªã©ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:6 msgid "Installing a collection from a git repository at the command line" msgstr "コマンドガイド㧠git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:8 msgid "To install a collection from a git repository at the command line, use the URI of the repository instead of a collection name or path to a ``tar.gz`` file. Prefix the URI with ``git+`` (or with ``git@`` to use a private repository with ssh authentication). You can specify a branch, commit, or tag using the comma-separated `git commit-ish `_ syntax." msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã«ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã¾ãŸã¯ ``tar.gz`` ファイルã¸ã®ãƒ‘スã§ã¯ãªãã€ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã® URI を使用ã—ã¾ã™ã€‚``git+`` を使用ã—㦠URI をプレフィックスã—ã¾ã™ï¼ˆã¾ãŸã¯ ``git@`` を使用ã—ã¦ã€ssh èªè¨¼ã§ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ï¼‰ã€‚コンマ区切り㮠`git commit-ish `_ 構文を使用ã—ã¦ã€ãƒ–ランãƒã€ã‚³ãƒŸãƒƒãƒˆã€ã¾ãŸã¯ã‚¿ã‚°ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:10 #: ../../rst/user_guide/playbooks_tags.rst:285 #: ../../rst/user_guide/playbooks_tags.rst:315 msgid "For example:" msgstr "例:" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:25 msgid "Embedding credentials into a git URI is not secure. Use safe authentication options to prevent your credentials from being exposed in logs or elsewhere." msgstr "èªè¨¼æƒ…報を git URI ã«åŸ‹ã‚込むã“ã¨ã¯å®‰å…¨ã§ã¯ã‚りã¾ã›ã‚“。安全ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ã€èªè¨¼æƒ…å ±ãŒãƒ­ã‚°ã«å…¬é–‹ã•れãªã„よã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:27 msgid "Use `SSH `_ authentication" msgstr "`SSH `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:28 msgid "Use `netrc `_ authentication" msgstr "`netrc `_ èªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:29 msgid "Use `http.extraHeader `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`http.extraHeader `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:30 msgid "Use `url..pushInsteadOf `_ in your git configuration" msgstr "ãŠä½¿ã„ã® git 設定㧠`url..pushInsteadOf `_ を使用ã™ã‚‹" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:33 msgid "Specifying the collection location within the git repository" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼å†…ã§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å ´æ‰€ã®æŒ‡å®š" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:35 msgid "When you install a collection from a git repository, Ansible uses the collection ``galaxy.yml`` or ``MANIFEST.json`` metadata file to build the collection. By default, Ansible searches two paths for collection ``galaxy.yml`` or ``MANIFEST.json`` metadata files:" msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイルを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’構築ã—ã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` メタデータファイル㮠2 ã¤ã®ãƒ‘スを検索ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:37 msgid "The top level of the repository." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベル。" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:38 msgid "Each directory in the repository path (one level deep)." msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内ã®å„ディレクトリー(1 ãƒ¬ãƒ™ãƒ«ã®æ·±ã•)" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:40 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in the top level of the repository, Ansible uses the collection metadata in that file to install an individual collection." msgstr "``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ãƒˆãƒƒãƒ—レベルã«ã‚ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイル内ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’使用ã—ã¦å€‹åˆ¥ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:51 msgid "If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in one or more directories in the repository path (one level deep), Ansible installs each directory with a metadata file as a collection. For example, Ansible installs both collection1 and collection2 from this repository structure by default:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ãƒ‘ス内㮠1 ã¤ä»¥ä¸Šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã« ``galaxy.yml`` ã¾ãŸã¯ ``MANIFEST.json`` ファイルãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€Ansible ã¯ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルをæŒã¤å„ディレクトリーをコレクションã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible ã¯ã€ãƒ‡ãƒ•ォルトã§ã€ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼æ§‹é€ ã‹ã‚‰ collection1 㨠collection2 ã®ä¸¡æ–¹ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:69 msgid "If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate the location of the metadata file or files. The path should be a directory, not the metadata file itself. For example, to install only collection2 from the example repository with two collections:" msgstr "リãƒã‚¸ãƒˆãƒªæ§‹é€ ãŒç•°ãªã‚‹å ´åˆã€ã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚µãƒ–セットã®ã¿ã‚’インストールã™ã‚‹å ´åˆã¯ã€URI ã®æœ«å°¾ï¼ˆã‚ªãƒ—ションã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰ï¼‰ã«ãƒ•ラグメントを追加ã—ã¦ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã®å ´æ‰€ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスã¯ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイル自体ã§ã¯ãªãã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€2ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æŒã¤ã‚µãƒ³ãƒ—ルリãƒã‚¸ãƒˆãƒªã‹ã‚‰collection2ã®ã¿ã‚’インストールã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:75 msgid "In some repositories, the main directory corresponds to the namespace:" msgstr "リãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚ˆã£ã¦ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯åå‰ç©ºé–“ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_collections_git_repo.txt:97 msgid "You can install all collections in this repository, or install one collection from a specific commit:" msgstr "ã“ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã®ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã‹ã€ç‰¹å®šã®ã‚³ãƒŸãƒƒãƒˆã‹ã‚‰ 1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:48 msgid "Install multiple collections with a requirements file" msgstr "è¦ä»¶ãƒ•ァイルを使用ã—ãŸè¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/shared_snippets/installing_multiple_collections.txt:2 msgid "You can set up a ``requirements.yml`` file to install multiple collections in one command. This file is a YAML file in the format:" msgstr "``requirements.yml`` ファイルを設定ã—ã¦ã€1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€ä»¥ä¸‹ã®å½¢å¼ã® YAML ファイルã§ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:16 msgid "You can specify four keys for each collection entry:" msgstr "å„コレクションエントリー㫠4 ã¤ã®ã‚­ãƒ¼ã‚’指定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:18 msgid "``name``" msgstr "``name``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:19 msgid "``version``" msgstr "``version``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:20 msgid "``source``" msgstr "``source``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:21 msgid "``type``" msgstr "``type``" #: ../../rst/shared_snippets/installing_multiple_collections.txt:23 msgid "The ``version`` key uses the same range identifier format documented in :ref:`collections_older_version`." msgstr "``version`` キーã¯ã€:ref:`collections_older_version` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹ã‚‚ã®ã¨åŒã˜ç¯„囲識別å­å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:25 msgid "The ``type`` key can be set to ``galaxy``, ``url``, ``file``, and ``git``. If ``type`` is omitted, the ``name`` key is used to implicitly determine the source of the collection." msgstr "``type`` キー㯠``galaxy``ã€``url``ã€``file``ã€ãŠã‚ˆã³ ``git`` ã«è¨­å®šã§ãã¾ã™ã€‚``type`` ã‚’çœç•¥ã™ã‚‹ã¨ã€``name`` キーを使用ã—ã¦ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚½ãƒ¼ã‚¹ã‚’æš—é»™çš„ã«æ±ºå®šã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:27 msgid "When you install a collection with ``type: git``, the ``version`` key can refer to a branch or to a `git commit-ish `_ object (commit or tag). For example:" msgstr "``type: git`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹å ´åˆã€``version`` キーã¯ãƒ–ランãƒã¾ãŸã¯ `git commit-ish `_ オブジェクト(コミットã¾ãŸã¯ã‚¿ã‚°ï¼‰ã‚’å‚ç…§ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:36 msgid "You can also add roles to a ``requirements.yml`` file, under the ``roles`` key. The values follow the same format as a requirements file used in older Ansible releases." msgstr "``roles``キーã®ä¸‹ã«ã‚ã‚‹``requirements.yml``ファイルã«ãƒ­ãƒ¼ãƒ«ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å€¤ã¯ã€å¤ã„ Ansible リリースã§ä½¿ç”¨ã•れるè¦ä»¶ãƒ•ァイルã¨åŒã˜å½¢å¼ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:52 msgid "To install both roles and collections at the same time with one command, run the following:" msgstr "1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã€ãƒ­ãƒ¼ãƒ«ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’åŒæ™‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:58 msgid "Running ``ansible-galaxy collection install -r`` or ``ansible-galaxy role install -r`` will only install collections, or roles respectively." msgstr "``ansible-galaxy collection install -r`` ã¾ãŸã¯ ``ansible-galaxy role install -r`` を実行ã™ã‚‹ã¨ã€ãれãžã‚Œã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚" #: ../../rst/shared_snippets/installing_multiple_collections.txt:61 msgid "Installing both roles and collections from the same requirements file will not work when specifying a custom collection or role install path. In this scenario the collections will be skipped and the command will process each like ``ansible-galaxy role install`` would." msgstr "カスタムコレクションã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‘スを指定ã™ã‚‹å ´åˆã€åŒã˜è¦ä»¶ãƒ•ァイルã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã¨ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸¡æ–¹ã‚’インストールã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。今回ã®ä¾‹ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯çœç•¥ã•れã€ã‚³ãƒžãƒ³ãƒ‰ã¯ ``ansible-galaxy role install`` ã®ã‚ˆã†ã«å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:55 msgid "Downloading a collection for offline use" msgstr "オフラインã§ä½¿ç”¨ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../../rst/shared_snippets/download_tarball_collections.txt:3 msgid "To download the collection tarball from Galaxy for offline use:" msgstr "オフラインã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ tarball ã‚’ Galaxy ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:5 msgid "Navigate to the collection page." msgstr "コレクションページã«ç§»å‹•ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:6 msgid "Click on :guilabel:`Download tarball`." msgstr ":guilabel:`Download tarball` をクリックã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/download_tarball_collections.txt:8 msgid "You may also need to manually download any dependent collections." msgstr "ã¾ãŸã€ä¾å­˜ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’手動ã§ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:63 msgid "Configuring the ``ansible-galaxy`` client" msgstr "``ansible-galaxy`` クライアントã®è¨­å®š" #: ../../rst/shared_snippets/galaxy_server_list.txt:3 msgid "By default, ``ansible-galaxy`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`)." msgstr "デフォルトã§ã¯ã€``ansible-galaxy`` 㯠https://galaxy.ansible.com ã‚’ Galaxy サーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ (:ref:`galaxy_server` ã® :file:`ansible.cfg` ファイルã«è¨˜è¼‰)。" #: ../../rst/shared_snippets/galaxy_server_list.txt:5 msgid "You can use either option below to configure ``ansible-galaxy collection`` to use other servers (such as Red Hat Automation Hub or a custom Galaxy server):" msgstr "以下ã®ã‚ªãƒ—ションを使用ã—ã¦ã€ä»–ã®ã‚µãƒ¼ãƒãƒ¼ (Red Hat Automation Hubã€ã‚«ã‚¹ã‚¿ãƒ ã® Galaxy サーãƒãƒ¼ãªã©) を使用ã™ã‚‹ã‚ˆã†ã« ``ansible-galaxy collection`` を設定ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:7 msgid "Set the server list in the :ref:`galaxy_server_list` configuration option in :ref:`ansible_configuration_settings_locations`." msgstr ":ref:`ansible_configuration_settings_locations` ã® :ref:`galaxy_server_list` 設定オプションã«ã‚µãƒ¼ãƒãƒ¼ãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:8 msgid "Use the ``--server`` command line argument to limit to an individual server." msgstr "``--server`` コマンドライン引数を使用ã—ã¦ã€å€‹ã€…ã®ã‚µãƒ¼ãƒãƒ¼ã«åˆ¶é™ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:10 msgid "To configure a Galaxy server list in ``ansible.cfg``:" msgstr "``ansible.cfg`` ã§ Galaxy サーãƒãƒ¼ä¸€è¦§ã‚’設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:13 msgid "Add the ``server_list`` option under the ``[galaxy]`` section to one or more server names." msgstr "``server_list`` セクション㮠``[galaxy]`` オプションを 1 ã¤ä»¥ä¸Šã®ã‚µãƒ¼ãƒãƒ¼åã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:14 msgid "Create a new section for each server name." msgstr "å„サーãƒãƒ¼åã«æ–°ã—ã„セクションを作æˆã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:15 msgid "Set the ``url`` option for each server name." msgstr "å„サーãƒãƒ¼åã« ``url`` オプションを設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:16 msgid "Optionally, set the API token for each server name. Go to https://galaxy.ansible.com/me/preferences and click :guilabel:`Show API key`." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€å„サーãƒãƒ¼åã® API トークンを設定ã—ã¾ã™ã€‚https://galaxy.ansible.com/me/preferences ã«ç§»å‹•ã—ã€guilabel:`Show API key` をクリックã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:19 msgid "The ``url`` option for each server name must end with a forward slash ``/``. If you do not set the API token in your Galaxy server list, use the ``--api-key`` argument to pass in the token to the ``ansible-galaxy collection publish`` command." msgstr "å„サーãƒãƒ¼åã® ``url`` オプションã¯ã€ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ ``/`` ã§çµ‚了ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Galaxy サーãƒãƒ¼ä¸€è¦§ã® API トークンを設定ã—ãªã„å ´åˆã¯ã€``--api-key`` 引数を使用ã—ã¦ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ ``ansible-galaxy collection publish`` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:21 msgid "For Automation Hub, you additionally need to:" msgstr "Automation Hub ã®å ´åˆã«ã¯ã€ã•らã«ä»¥ä¸‹ã®æ“作ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:23 msgid "Set the ``auth_url`` option for each server name." msgstr "å„サーãƒãƒ¼åã« ``auth_url`` オプションを設定ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:24 msgid "Set the API token for each server name. Go to https://cloud.redhat.com/ansible/automation-hub/token/ and click ::guilabel:`Get API token` from the version dropdown to copy your API token." msgstr "å„サーãƒãƒ¼åã® API トークンを設定ã—ã¾ã™ã€‚https://cloud.redhat.com/ansible/automation-hub/token/ ã§ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒ‰ãƒ­ãƒƒãƒ—ダウンリストã‹ã‚‰ ::guilabel:`Get API token` をクリックã—㦠API トークンをコピーã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:26 msgid "The following example shows how to configure multiple servers:" msgstr "以下ã®ä¾‹ã¯ã€è¤‡æ•°ã®ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:58 msgid "You can use the ``--server`` command line argument to select an explicit Galaxy server in the ``server_list`` and the value of this argument should match the name of the server. To use a server not in the server list, set the value to the URL to access that server (all servers in the server list will be ignored). Also you cannot use the ``--api-key`` argument for any of the predefined servers. You can only use the ``api_key`` argument if you did not define a server list or if you specify a URL in the ``--server`` argument." msgstr "``--server`` コマンドライン引数を使用ã—㦠``server_list`` ã§æ˜Žç¤ºçš„㪠Galaxy サーãƒãƒ¼ã‚’é¸æŠžã—ã€ã“ã®å¼•æ•°ã®å€¤ã¯ã‚µãƒ¼ãƒãƒ¼åã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚サーãƒãƒ¼ä¸€è¦§ã«ãªã„サーãƒãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãã®ã‚µãƒ¼ãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ URL ã«å€¤ã‚’設定ã—ã¾ã™ (サーãƒãƒ¼ãƒªã‚¹ãƒˆå†…ã®ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã¯ç„¡è¦–ã•れã¾ã™)。ã¾ãŸã€äº‹å‰å®šç¾©ã•れãŸã‚µãƒ¼ãƒãƒ¼ã®ã„ãšã‚Œã‹ã« ``--api-key`` 引数を使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。サーãƒãƒ¼ã®ä¸€è¦§ã‚’定義ã—ã¦ã„ãªã„å ´åˆã€ã¾ãŸã¯ ``--server`` ã« URL を指定ã—ãŸå ´åˆé™ã‚Šã€``api_key`` 引数を使用ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:62 msgid "**Galaxy server list configuration options**" msgstr "**Galaxy サーãƒãƒ¼ä¸€è¦§è¨­å®šã‚ªãƒ—ション**" #: ../../rst/shared_snippets/galaxy_server_list.txt:64 msgid "The :ref:`galaxy_server_list` option is a list of server identifiers in a prioritized order. When searching for a collection, the install process will search in that order, for example, ``automation_hub`` first, then ``my_org_hub``, ``release_galaxy``, and finally ``test_galaxy`` until the collection is found. The actual Galaxy instance is then defined under the section ``[galaxy_server.{{ id }}]`` where ``{{ id }}`` is the server identifier defined in the list. This section can then define the following keys:" msgstr ":ref:`galaxy_server_list` オプションã¯ã€å„ªå…ˆé †ä½ãŒä»˜ã‘られãŸã‚µãƒ¼ãƒãƒ¼è­˜åˆ¥å­ã®ä¸€è¦§ã§ã™ã€‚コレクションを検索ã™ã‚‹å ´åˆã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ—ãƒ­ã‚»ã‚¹ã¯æ¬¡ã®é †åºã§æ¤œç´¢ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``automation_hub`` を検索ã—ã¦ã‹ã‚‰ã€``my_org_hub``ã€``release_galaxy``ã€æœ€å¾Œã« ``test_galaxy`` ã§ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒè¦‹ã¤ã‹ã‚‹ã¾ã§è¡Œã„ã¾ã™ã€‚次ã«ã€å®Ÿéš›ã® Galaxy インスタンス㌠``[galaxy_server.{{ id }}]`` セクションã§å®šç¾©ã•れã¾ã™ã€‚``{{ id }}`` ã¯ã€ä¸€è¦§ã§å®šç¾©ã•れã¦ã„るサーãƒãƒ¼è­˜åˆ¥å­ã§ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€æ¬¡ã®ã‚­ãƒ¼ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:70 msgid "``url``: The URL of the Galaxy instance to connect to. Required." msgstr "``url``: 接続ã™ã‚‹ Galaxy インスタンス㮠URL。必須。" #: ../../rst/shared_snippets/galaxy_server_list.txt:71 msgid "``token``: An API token key to use for authentication against the Galaxy instance. Mutually exclusive with ``username``." msgstr "``token``: Galaxy インスタンスã«å¯¾ã™ã‚‹èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ API トークンキー。``username`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:72 msgid "``username``: The username to use for basic authentication against the Galaxy instance. Mutually exclusive with ``token``." msgstr "``username``: Galaxy インスタンスã«å¯¾ã™ã‚‹ Basic èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å。``token`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:73 msgid "``password``: The password to use, in conjunction with ``username``, for basic authentication." msgstr "``password``: Basic èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワード。``username`` ã¨ä½µç”¨ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:74 msgid "``auth_url``: The URL of a Keycloak server 'token_endpoint' if using SSO authentication (for example, Automation Hub). Mutually exclusive with ``username``. Requires ``token``." msgstr "``auth_url``: SSO èªè¨¼ (例: Automation Hub) を使用ã™ã‚‹å ´åˆã¯ Keycloak サーãƒãƒ¼ã€Œtoken_endpointã€ã® URL ã§ã™ã€‚``username`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ã§ã™ã€‚``token`` ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:75 msgid "``validate_certs``: Whether or not to verify TLS certificates for the Galaxy server. This defaults to True unless the ``--ignore-certs`` option is provided or ``GALAXY_IGNORE_CERTS`` is configured to True." msgstr "``validate_certs``: Galaxy サーãƒãƒ¼ã® TLS 証明書を検証ã™ã‚‹ã‹ã©ã†ã‹ã€‚ã“れã¯ã€``--ignore-certs`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæä¾›ã•れるã‹ã€``GALAXY_IGNORE_CERTS`` ㌠True ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã‚’除ãã€ãƒ‡ãƒ•ォルト㧠True ã«è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:76 msgid "``client_id``: The Keycloak token's client_id to use for authentication. Requires ``auth_url`` and ``token``. The default ``client_id`` is cloud-services to work with Red Hat SSO." msgstr "``client_id``: èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ Keycloak トークン㮠client_id。``auth_url`` ãŠã‚ˆã³ ``token`` ãŒå¿…è¦ã§ã™ã€‚デフォルト㮠``client_id`` ã¯ã€Red Hat SSO ã¨é€£æºã™ã‚‹ã‚¯ãƒ©ã‚¦ãƒ‰ã‚µãƒ¼ãƒ“スã§ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:78 msgid "As well as defining these server options in the ``ansible.cfg`` file, you can also define them as environment variables. The environment variable is in the form ``ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}`` where ``{{ id }}`` is the upper case form of the server identifier and ``{{ key }}`` is the key to define. For example I can define ``token`` for ``release_galaxy`` by setting ``ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token``." msgstr "ã“れらã®ã‚µãƒ¼ãƒãƒ¼ã‚ªãƒ—ションを ``ansible.cfg`` ファイルã§å®šç¾©ã™ã‚‹ã ã‘ã§ãªãã€ãれらを環境変数ã¨ã—ã¦å®šç¾©ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚環境変数㯠``ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}`` ã®å½¢å¼ã§ã™ã€‚``{{ id }}`` ã¯ã‚µãƒ¼ãƒãƒ¼è­˜åˆ¥å­ã®å¤§æ–‡å­—å½¢å¼ã§ã‚りã€``{{ key }}`` ã¯å®šç¾©ã™ã‚‹ã‚­ãƒ¼ã§ã™ã€‚ãŸã¨ãˆã°ã€``ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token`` を設定ã™ã‚‹ã“ã¨ã§ã€``release_galaxy`` ã« ``token`` を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:83 msgid "For operations that use only one Galaxy server (for example, the ``publish``, ``info``, or ``install`` commands). the ``ansible-galaxy collection`` command uses the first entry in the ``server_list``, unless you pass in an explicit server with the ``--server`` argument." msgstr "Galaxy サーãƒãƒ¼ 1 ã¤ã ã‘を使用ã™ã‚‹æ“作 (例: ``publish`` コマンドã€``info`` コマンドã€ã¾ãŸã¯ ``install`` コマンド) ã®å ´åˆã€``ansible-galaxy collection`` コマンドã¯ã€``--server`` 引数を使用ã—ã¦æ˜Žç¤ºçš„ãªã‚µãƒ¼ãƒãƒ¼ã«æ¸¡ã—ãªã„é™ã‚Šã€``server_list`` ã®æœ€åˆã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/shared_snippets/galaxy_server_list.txt:87 msgid "Once a collection is found, any of its requirements are only searched within the same Galaxy instance as the parent collection. The install process will not search for a collection requirement in a different Galaxy instance." msgstr "コレクションãŒè¦‹ã¤ã‹ã‚‹ã¨ã€ãã®è¦ä»¶ã¯è¦ªã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨åŒã˜ Galaxy インスタンス内ã§ã®ã¿æ¤œç´¢ã•れã¾ã™ã€‚インストールプロセスã§ã¯ã€åˆ¥ã® Galaxy インスタンスã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³è¦ä»¶ã‚’検索ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/collections_using.rst:70 msgid "Downloading collections" msgstr "コレクションã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../../rst/user_guide/collections_using.rst:72 msgid "To download a collection and its dependencies for an offline install, run ``ansible-galaxy collection download``. This downloads the collections specified and their dependencies to the specified folder and creates a ``requirements.yml`` file which can be used to install those collections on a host without access to a Galaxy server. All the collections are downloaded by default to the ``./collections`` folder." msgstr "オフラインインストール用ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ãã®ä¾å­˜é–¢ä¿‚をダウンロードã™ã‚‹ã«ã¯ã€``ansible-galaxy collection download`` を実行ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æŒ‡å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ãã®ä¾å­˜é–¢ä¿‚を指定ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ã€Galaxy サーãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã›ãšã«ã€ãƒ›ã‚¹ãƒˆã«ã“れらã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã‚‹ ``requirements.yml`` ファイルを作æˆã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ãƒ‡ãƒ•ォルト㧠``./collections`` ディレクトリーã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:77 msgid "Just like the ``install`` command, the collections are sourced based on the :ref:`configured galaxy server config `. Even if a collection to download was specified by a URL or path to a tarball, the collection will be redownloaded from the configured Galaxy server." msgstr "``install`` コマンドã¨åŒæ§˜ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ :ref:`configured galaxy server config ` ã«åŸºã¥ã„ã¦å–å¾—ã•れã¾ã™ã€‚ダウンロードã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒ URL ã‚„ tarball ã¸ã®ãƒ‘ã‚¹ã§æŒ‡å®šã•れã¦ã„ãŸå ´åˆã§ã‚‚ã€è¨­å®šã•れ㟠Galaxy サーãƒãƒ¼ã‹ã‚‰ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:81 msgid "Collections can be specified as one or multiple collections or with a ``requirements.yml`` file just like ``ansible-galaxy collection install``." msgstr "コレクションã¯ã€1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ã—ã¦ã€ã¾ãŸã¯ ``ansible-galaxy collection install`` ã®ã‚ˆã†ã« ``requirements.yml`` ãƒ•ã‚¡ã‚¤ãƒ«ã§æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:84 msgid "To download a single collection and its dependencies:" msgstr "1 ã¤ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¨ãã®ä¾å­˜é–¢ä¿‚をダウンロードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:90 msgid "To download a single collection at a specific version:" msgstr "特定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å˜ä¸€ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:96 msgid "To download multiple collections either specify multiple collections as command line arguments as shown above or use a requirements file in the format documented with :ref:`collection_requirements_file`." msgstr "複数ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã™ã‚‹ã«ã¯ã€ä¸Šè¨˜ã®ã‚ˆã†ã«è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’コマンドライン引数ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã‹ã€:ref:`collection_requirements_file` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹å½¢å¼ã§è¦ä»¶ãƒ•ァイルを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:103 msgid "You can also download a source collection directory. The collection is built with the mandatory ``galaxy.yml`` file." msgstr "ソースコレクションディレクトリーをダウンロードã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚コレクションã¯å¿…須㮠``galaxy.yml`` ファイルã§ãƒ“ルドã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:111 msgid "You can download multiple source collections from a single namespace by providing the path to the namespace." msgstr "åå‰ç©ºé–“ã¸ã®ãƒ‘スを指定ã™ã‚‹ã¨ã€å˜ä¸€ã®åå‰ç©ºé–“ã‹ã‚‰è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ダウンロードã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:127 msgid "All the collections are downloaded by default to the ``./collections`` folder but you can use ``-p`` or ``--download-path`` to specify another path:" msgstr "コレクションã¯ã™ã¹ã¦ã€ãƒ‡ãƒ•ォルト㧠``./collections`` ディレクトリーã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•れã¾ã™ãŒã€``-p`` ã¾ãŸã¯ ``--download-path`` を使用ã—ã¦åˆ¥ã®ãƒ‘スを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:134 msgid "Once you have downloaded the collections, the folder contains the collections specified, their dependencies, and a ``requirements.yml`` file. You can use this folder as is with ``ansible-galaxy collection install`` to install the collections on a host without access to a Galaxy or Automation Hub server." msgstr "コレクションをダウンロードã—ãŸå¾Œã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã¯æŒ‡å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€ãã®ä¾å­˜é–¢ä¿‚ã€ãŠã‚ˆã³ ``requirements.yml`` ファイルãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€``ansible-galaxy collection install`` ã¨åŒã˜ã‚ˆã†ã«ã€Galaxy サーãƒãƒ¼ã¾ãŸã¯ Automation Hub サーãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã›ãšã«ãƒ›ã‚¹ãƒˆã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:148 msgid "Listing collections" msgstr "コレクション一覧ã®è¡¨ç¤º" #: ../../rst/user_guide/collections_using.rst:150 msgid "To list installed collections, run ``ansible-galaxy collection list``. This shows all of the installed collections found in the configured collections search paths. It will also show collections under development which contain a galaxy.yml file instead of a MANIFEST.json. The path where the collections are located are displayed as well as version information. If no version information is available, a ``*`` is displayed for the version number." msgstr "インストールã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’一覧表示ã™ã‚‹ã«ã¯ã€``ansible-galaxy collection list`` を実行ã—ã¾ã™ã€‚ã“れã¯ã€è¨­å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¤œç´¢ãƒ‘スã«ã‚るインストールã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã™ã¹ã¦è¡¨ç¤ºã—ã¾ã™ã€‚ã“れã¯ã€MANIFEST.json ã§ã¯ãªã galaxy.yml ファイルãŒå«ã¾ã‚Œã‚‹é–‹ç™ºä¸­ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚‚表示ã—ã¾ã™ã€‚コレクションãŒé…ç½®ã•れã¦ã„るパスã¨ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ãŒãªã„å ´åˆã¯ã€``*`` ãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:169 msgid "Run with ``-vvv`` to display more detailed information." msgstr "詳細情報を表示ã™ã‚‹ã«ã¯ã€``-vvv`` を付ã‘ã¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:171 msgid "To list a specific collection, pass a valid fully qualified collection name (FQCN) to the command ``ansible-galaxy collection list``. All instances of the collection will be listed." msgstr "特定ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’一覧表示ã™ã‚‹ã«ã¯ã€æœ‰åйãªå®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ã‚’ ``ansible-galaxy collection list`` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚コレクションã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ä¸€è¦§ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:187 msgid "To search other paths for collections, use the ``-p`` option. Specify multiple search paths by separating them with a ``:``. The list of paths specified on the command line will be added to the beginning of the configured collections search paths." msgstr "ä»–ã®ãƒ‘スã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’検索ã™ã‚‹ã«ã¯ã€``-p`` オプションを使用ã—ã¾ã™ã€‚è¤‡æ•°ã®æ¤œç´¢ãƒ‘スを指定ã™ã‚‹å ´åˆã¯ã€``:`` ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã—ã¾ã™ã€‚ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã•れãŸãƒ‘スã®ãƒªã‚¹ãƒˆã¯ã€è¨­å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¤œç´¢ãƒ‘スã®å…ˆé ­ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:223 msgid "Verifying collections" msgstr "ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®æ¤œè¨¼" #: ../../rst/user_guide/collections_using.rst:226 msgid "Verifying collections with ``ansible-galaxy``" msgstr "``ansible-galaxy`` ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’検証" #: ../../rst/user_guide/collections_using.rst:228 msgid "Once installed, you can verify that the content of the installed collection matches the content of the collection on the server. This feature expects that the collection is installed in one of the configured collection paths and that the collection exists on one of the configured galaxy servers." msgstr "インストールã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å†…容ãŒã€ã‚µãƒ¼ãƒãƒ¼ä¸Šã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®å†…容ã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’確èªã§ãã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ã€è¨­å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒ‘スã®ã„ãšã‚Œã‹ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€è¨­å®šã•れ㟠galaxy サーãƒãƒ¼ã®ã„ãšã‚Œã‹ã«ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã‚’想定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:234 msgid "The output of the ``ansible-galaxy collection verify`` command is quiet if it is successful. If a collection has been modified, the altered files are listed under the collection name." msgstr "``ansible-galaxy collection verify`` コマンドã®å‡ºåŠ›ã¯ã€æˆåŠŸã™ã‚‹ã¨ä½•も表示ã•れã¾ã›ã‚“。コレクションを変更ã™ã‚‹ã¨ã€å¤‰æ›´ã—ãŸãƒ•ァイルãŒã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åã®ä¸‹ã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:244 msgid "You can use the ``-vvv`` flag to display additional information, such as the version and path of the installed collection, the URL of the remote collection used for validation, and successful verification output." msgstr "``-vvv`` フラグを使用ã™ã‚‹ã¨ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ãƒ‘ã‚¹ã€æ¤œè¨¼ã«ä½¿ç”¨ã•れるリモートコレクション㮠URLã€æ­£å¸¸ãªç¢ºèªå‡ºåŠ›ãªã©ã®è¿½åŠ æƒ…å ±ã‚’è¡¨ç¤ºã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:255 msgid "If you have a pre-release or non-latest version of a collection installed you should include the specific version to verify. If the version is omitted, the installed collection is verified against the latest version available on the server." msgstr "プレリリースã¾ãŸã¯æœ€æ–°ã§ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¦ã„ã‚‹å ´åˆã¯ã€æ¤œè¨¼ã™ã‚‹ç‰¹å®šã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒçœç•¥ã•れãŸå ´åˆã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã§åˆ©ç”¨å¯èƒ½ãªæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨æ¯”較ã—ã¦æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:261 msgid "In addition to the ``namespace.collection_name:version`` format, you can provide the collections to verify in a ``requirements.yml`` file. Dependencies listed in ``requirements.yml`` are not included in the verify process and should be verified separately." msgstr "``namespace.collection_name:version`` å½¢å¼ã«åŠ ãˆã¦ã€``requirements.yml`` ãƒ•ã‚¡ã‚¤ãƒ«ã§æ¤œè¨¼ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``requirements.yml`` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹ä¾å­˜é–¢ä¿‚ã¯ã€æ¤œè¨¼ãƒ—ロセスã«å«ã¾ã‚Œãªã„ãŸã‚ã€åˆ¥é€”検証ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:267 msgid "Verifying against ``tar.gz`` files is not supported. If your ``requirements.yml`` contains paths to tar files or URLs for installation, you can use the ``--ignore-errors`` flag to ensure that all collections using the ``namespace.name`` format in the file are processed." msgstr "``tar.gz`` ファイルã«å¯¾ã™ã‚‹æ¤œè¨¼ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。``requirements.yml`` ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ç”¨ã® tar ファイルや URL ã¸ã®ãƒ‘スãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€``--ignore-errors`` フラグを使用ã—ã¦ã€ãƒ•ァイル内㧠``namespace.name`` å½¢å¼ã‚’使用ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŒå‡¦ç†ã•れるよã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:272 msgid "Using collections in a Playbook" msgstr "Playbook ã§ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ä½¿ç”¨" #: ../../rst/user_guide/collections_using.rst:274 msgid "Once installed, you can reference a collection content by its fully qualified collection name (FQCN):" msgstr "インストールãŒå®Œäº†ã™ã‚‹ã¨ã€å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³å (FQCN) ã§ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:283 msgid "This works for roles or any type of plugin distributed within the collection:" msgstr "ã“れã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§é…布ã•れるロールã¾ãŸã¯ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ—ã®ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã§æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:299 msgid "Simplifying module names with the ``collections`` keyword" msgstr "``collections`` キーワードを使用ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã®ç°¡ç´ åŒ–" #: ../../rst/user_guide/collections_using.rst:301 msgid "The ``collections`` keyword lets you define a list of collections that your role or playbook should search for unqualified module and action names. So you can use the ``collections`` keyword, then simply refer to modules and action plugins by their short-form names throughout that role or playbook." msgstr "``collections`` キーワードを使用ã™ã‚‹ã¨ã€ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ Playbook ãŒéžä¿®é£¾ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³åを検索ã™ã‚‹å¿…è¦ã®ã‚るコレクションã®ä¸€è¦§ã‚’定義ã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€``collections`` キーワードを使用ã™ã‚‹ã¨ã€ãã®ãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ Playbook 全体ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインを短縮åã§å‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:304 msgid "If your playbook uses both the ``collections`` keyword and one or more roles, the roles do not inherit the collections set by the playbook. This is one of the reasons we recommend you always use FQCN. See below for roles details." msgstr "Playbook ã§ ``collections`` キーワード㨠1 ã¤ä»¥ä¸Šã®ãƒ­ãƒ¼ãƒ«ã®ä¸¡æ–¹ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€ãƒ­ãƒ¼ãƒ«ã¯ Playbook ã§è¨­å®šã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’継承ã—ã¾ã›ã‚“。ã“れãŒã€å¸¸ã« FQCN を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れるç†ç”±ã® 1 ã¤ã§ã™ã€‚ロールã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/collections_using.rst:307 msgid "Using ``collections`` in roles" msgstr "ロールã§ã® ``collections`` ã®ä½¿ç”¨" #: ../../rst/user_guide/collections_using.rst:309 msgid "Within a role, you can control which collections Ansible searches for the tasks inside the role using the ``collections`` keyword in the role's ``meta/main.yml``. Ansible will use the collections list defined inside the role even if the playbook that calls the role defines different collections in a separate ``collections`` keyword entry. Roles defined inside a collection always implicitly search their own collection first, so you don't need to use the ``collections`` keyword to access modules, actions, or other roles contained in the same collection." msgstr "ロール内ã§ã€Ansible ãŒãƒ­ãƒ¼ãƒ«ã® ``meta/main.yml`` ã® ``collections`` キーワードを使用ã—ã¦ã€ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ã‚’検索ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’制御ã§ãã¾ã™ã€‚Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ Playbook ãŒåˆ¥ã® ``collections`` キーワードエントリーã§ç•°ãªã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’定義ã™ã‚‹å ´åˆã§ã‚‚ã€ãƒ­ãƒ¼ãƒ«å†…ã«å®šç¾©ã•れãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ã€‚コレクション内ã§å®šç¾©ã•れãŸãƒ­ãƒ¼ãƒ«ã¯ã€å¸¸ã«æš—黙的ã«è‡ªèº«ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’最åˆã«æ¤œç´¢ã™ã‚‹ãŸã‚ã€åŒã˜ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å«ã¾ã‚Œã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã€ã¾ãŸã¯ä»–ã®ãƒ­ãƒ¼ãƒ«ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã« ``collections`` キーワードを使用ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/collections_using.rst:320 msgid "Using ``collections`` in playbooks" msgstr "Playbook ã§ã® ``collections`` ã®ä½¿ç”¨" #: ../../rst/user_guide/collections_using.rst:322 msgid "In a playbook, you can control the collections Ansible searches for modules and action plugins to execute. However, any roles you call in your playbook define their own collections search order; they do not inherit the calling playbook's settings. This is true even if the role does not define its own ``collections`` keyword." msgstr "Playbook ã§ã¯ã€Ansible ãŒå®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„アクションプラグインを検索ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€Playbook ã§å‘¼ã³å‡ºã—ãŸãƒ­ãƒ¼ãƒ«ã¯ã€ç‹¬è‡ªã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³æ¤œç´¢é †åºã‚’定義ã—ã€å‘¼ã³å‡ºã—㟠Playbook ã®è¨­å®šã‚’継承ã—ã¾ã›ã‚“。ã“れã¯ã€ãƒ­ãƒ¼ãƒ«ãŒç‹¬è‡ªã® ``collections`` キーワードを定義ã—ã¦ã„ãªã„å ´åˆã§ã‚‚åŒæ§˜ã§ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:340 msgid "The ``collections`` keyword merely creates an ordered 'search path' for non-namespaced plugin and role references. It does not install content or otherwise change Ansible's behavior around the loading of plugins or roles. Note that an FQCN is still required for non-action or module plugins (for example, lookups, filters, tests)." msgstr "``collections`` キーワードã¯ã€åå‰ç©ºé–“以外ã®ãƒ—ラグインãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«å‚ç…§ã«å¯¾ã—ã¦ã€é †åºä»˜ã‘ã•れãŸã€Œæ¤œç´¢ãƒ‘スã€ã‚’作æˆã—ã¾ã™ã€‚コンテンツã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚„ã€ãƒ—ラグインやロールã®èª­ã¿è¾¼ã¿ã«é–¢ã™ã‚‹ Ansible ã®å‹•作ã¯å¤‰æ›´ã•れã¾ã›ã‚“。éžã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚„モジュールプラグイン (ルックアップã€ãƒ•ィルターã€ãƒ†ã‚¹ãƒˆãªã©) ãŒå¿…è¦ãªã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/collections_using.rst:344 msgid "Using a playbook from a collection" msgstr "コレクションã‹ã‚‰ã® Playbook ã®ä½¿ç”¨" #: ../../rst/user_guide/collections_using.rst:348 msgid "You can also distribute playbooks in your collection and invoke them using the same semantics you use for plugins:" msgstr "コレクション㫠Playbook を分散ã—ã€ãƒ—ラグインã«ä½¿ç”¨ã™ã‚‹ã®ã¨åŒã˜ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã‚’使用ã—㦠Playbook を呼ã³å‡ºã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:354 msgid "From inside a playbook:" msgstr "Playbook 内ã‹ã‚‰ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:361 msgid "A few recommendations when creating such playbooks, ``hosts:`` should be generic or at least have a variable input." msgstr "ã“ã®ã‚ˆã†ãª Playbook を作æˆã™ã‚‹éš›ã®ã„ãã¤ã‹ã®æŽ¨å¥¨äº‹é …ã¨ã—ã¦ã€``hosts:`` ã¯ä¸€èˆ¬çš„ãªã‚‚ã®ã«ã™ã‚‹ã‹ã€å°‘ãªãã¨ã‚‚変数入力ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:372 msgid "This will have an implied entry in the ``collections:`` keyword of ``my_namespace.my_collection`` just as with roles." msgstr "ã“れã¯ã€ãƒ­ãƒ¼ãƒ«ã¨åŒæ§˜ã«ã€``my_namespace.my_collection`` ã® ``collections:`` ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«æš—黙的ãªã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æŒã¡ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:376 msgid ":ref:`developing_collections`" msgstr ":ref:`developing_collections`" #: ../../rst/user_guide/collections_using.rst:377 msgid "Develop or modify a collection." msgstr "コレクションを開発ã™ã‚‹ã‹ã€ã¾ãŸã¯å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:378 msgid ":ref:`collections_galaxy_meta`" msgstr ":ref:`collections_galaxy_meta`" #: ../../rst/user_guide/collections_using.rst:379 msgid "Understand the collections metadata structure." msgstr "コレクションã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’ç†è§£ã—ã¾ã™ã€‚" #: ../../rst/user_guide/collections_using.rst:380 msgid "`Mailing List `_" msgstr "`メーリングリスト `_" #: ../../rst/user_guide/collections_using.rst:381 msgid "The development mailing list" msgstr "開発メーリングリスト" #: ../../rst/user_guide/command_line_tools.rst:4 msgid "Working with command line tools" msgstr "コマンドラインツールã®ä½¿ç”¨" #: ../../rst/user_guide/command_line_tools.rst:6 msgid "Most users are familiar with `ansible` and `ansible-playbook`, but those are not the only utilities Ansible provides. Below is a complete list of Ansible utilities. Each page contains a description of the utility and a listing of supported parameters." msgstr "ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€`ansible` ãŠã‚ˆã³ `ansible-playbook` ã«ç²¾é€šã—ã¦ã„ã¾ã™ãŒã€ã“れらã¯ã€Ansible ãŒæä¾›ã™ã‚‹å”¯ä¸€ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã§ã¯ã‚りã¾ã›ã‚“。以下ã¯ã€Ansible ユーティリティーã®å®Œå…¨ãªãƒªã‚¹ãƒˆã§ã™ã€‚å„ページã«ã¯ã€ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ãƒ¼ã®èª¬æ˜Žã¨ã€ã‚µãƒãƒ¼ãƒˆã•れるパラメーター一覧ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:4 msgid "Data manipulation" msgstr "データæ“作" #: ../../rst/user_guide/complex_data_manipulation.rst:6 msgid "In many cases, you need to do some complex operation with your variables, while Ansible is not recommended as a data processing/manipulation tool, you can use the existing Jinja2 templating in conjunction with the many added Ansible filters, lookups and tests to do some very complex transformations." msgstr "多ãã®å ´åˆã‚ã€å¤‰æ•°ã‚’使用ã—ã¦è¤‡é›‘ãªæ“作を行ã†å¿…è¦ãŒã‚りã¾ã™ãŒã€Ansible ã¯ãƒ‡ãƒ¼ã‚¿å‡¦ç†/æ“作ツールã¨ã—ã¦ã¯ãŠå‹§ã‚ã§ãã¾ã›ã‚“ãŒã€æ—¢å­˜ã® Jinja2 テンプレートã¨ã€è¿½åŠ ã•れãŸå¤šãã® Ansible フィルターã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã€ãƒ†ã‚¹ãƒˆã‚’併用ã™ã‚‹ã“ã¨ã§ã€éžå¸¸ã«è¤‡é›‘ãªå¤‰æ›ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:11 msgid "Let's start with a quick definition of each type of plugin:" msgstr "å„ãƒ—ãƒ©ã‚°ã‚¤ãƒ³å®šç¾©ã®æ¦‚è¦:" #: ../../rst/user_guide/complex_data_manipulation.rst:9 msgid "lookups: Mainly used to query 'external data', in Ansible these were the primary part of loops using the ``with_`` construct, but they can be used independently to return data for processing. They normally return a list due to their primary function in loops as mentioned previously. Used with the ``lookup`` or ``query`` Jinja2 operators." msgstr "lookups: 主ã«ã€Œå¤–部データã€ã‚’照会ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚Ansible ã§ã¯ã€``with_`` æ§‹æˆã‚’使用ã—ãŸãƒ«ãƒ¼ãƒ—ã®ä¸»è¦éƒ¨åˆ†ã§ã—ãŸãŒã€å‡¦ç†ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™ãŸã‚ã«ç‹¬ç«‹ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚å‰è¿°ã®ã‚ˆã†ã«ãƒ«ãƒ¼ãƒ—ã§ã®ä¸»ãªæ©Ÿèƒ½ã§ã‚ã‚‹ãŸã‚ã€é€šå¸¸ã¯ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚Jinja2 ã®æ¼”ç®—å­ ``lookup`` ã¾ãŸã¯ ``query`` ã¨ä¸€ç·’ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:10 msgid "filters: used to change/transform data, used with the ``|`` Jinja2 operator." msgstr "filters: Jinja2 æ¼”ç®—å­ ``|`` ã§ä½¿ç”¨ã•れるã€ãƒ‡ãƒ¼ã‚¿ã®å¤‰æ›´/変æ›ã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:11 msgid "tests: used to validate data, used with the ``is`` Jinja2 operator." msgstr "tests: Jinja2 æ¼”ç®—å­ ``is`` ã§ä½¿ç”¨ã•ã‚Œã‚‹ãƒ‡ãƒ¼ã‚¿ã®æ¤œè¨¼ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:19 msgid "Loops and list comprehensions" msgstr "ループãŠã‚ˆã³ãƒªã‚¹ãƒˆã®ç«¶åˆ" #: ../../rst/user_guide/complex_data_manipulation.rst:21 msgid "Most programming languages have loops (``for``, ``while``, and so on) and list comprehensions to do transformations on lists including lists of objects. Jinja2 has a few filters that provide this functionality: ``map``, ``select``, ``reject``, ``selectattr``, ``rejectattr``." msgstr "ã»ã¨ã‚“ã©ã®ãƒ—ログラミング言語ã«ã¯ãƒ«ãƒ¼ãƒ— (``for``ã€``while`` ãªã©) やリスト内包ãŒã‚りã€ã‚ªãƒ–ジェクトã®ãƒªã‚¹ãƒˆã‚’å«ã‚€ãƒªã‚¹ãƒˆã®å¤‰æ›ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚Jinja2 ã«ã¯ã€ã“ã®ã‚ˆã†ãªæ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹ãƒ•ィルターãŒã„ãã¤ã‹ã‚りã¾ã™ (``map``ã€``select``ã€``reject``ã€``selectattr``ã€``rejectattr``)。" #: ../../rst/user_guide/complex_data_manipulation.rst:23 msgid "map: this is a basic for loop that just allows you to change every item in a list, using the 'attribute' keyword you can do the transformation based on attributes of the list elements." msgstr "map: ã“れã¯åŸºæœ¬çš„㪠for ループã§ã€ãƒªã‚¹ãƒˆã®ã™ã¹ã¦ã®é …目を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「attributeã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€ãƒªã‚¹ãƒˆè¦ç´ ã®å±žæ€§ã«åŸºã¥ã„ã¦å¤‰æ›ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:24 msgid "select/reject: this is a for loop with a condition, that allows you to create a subset of a list that matches (or not) based on the result of the condition." msgstr "select/reject: ã“れã¯ã€æ¡ä»¶ã®ã‚るループ用ã§ã‚ã‚Šã€æ¡ä»¶ã®çµæžœã«åŸºã¥ã„ã¦ä¸€è‡´ã™ã‚‹ (ã¾ãŸã¯ä¸€è‡´ã—ãªã„) リストã®ã‚µãƒ–セットを作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:25 msgid "selectattr/rejectattr: very similar to the above but it uses a specific attribute of the list elements for the conditional statement." msgstr "selectattr/rejectattr: 上記ã¨éžå¸¸ã«ä¼¼ã¦ã„ã¾ã™ãŒã€æ¡ä»¶æ–‡ã«å¯¾ã—㦠list è¦ç´ ã®ç‰¹å®šã®å±žæ€§ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:30 msgid "Use a loop to create exponential backoff for retries/until." msgstr "ループを使用ã—ã¦å†è©¦è¡Œ/ä¸€æ™‚åœæ­¢ã®æŒ‡æ•°é–¢æ•°çš„ãªãƒãƒƒã‚¯ã‚ªãƒ•を作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:44 msgid "Extract keys from a dictionary matching elements from a list" msgstr "リストã‹ã‚‰ä¸€è‡´ã™ã‚‹ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼è¦ç´ ã‹ã‚‰ã®ã‚­ãƒ¼æŠ½å‡º" #: ../../rst/user_guide/complex_data_manipulation.rst:46 msgid "The Python equivalent code would be:" msgstr "Python ã¨åŒç­‰ã®ã‚³ãƒ¼ãƒ‰ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:55 msgid "There are several ways to do it in Ansible, this is just one example:" msgstr "Ansible ã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•ã¯ã„ãã¤ã‹ã‚りã¾ã™ã€‚以下ã¯ä¸€ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:57 msgid "Way to extract matching keys from a list of dictionaries" msgstr "ディクショナリーã®ãƒªã‚¹ãƒˆã‹ã‚‰ä¸€è‡´ã™ã‚‹ã‚­ãƒ¼ã‚’抽出ã™ã‚‹æ–¹æ³•" #: ../../rst/user_guide/complex_data_manipulation.rst:84 msgid "Results of debug task, a list with the extracted keys" msgstr "デãƒãƒƒã‚°ã‚¿ã‚¹ã‚¯ã®çµæžœ (展開ã—ãŸéµã‚’å«ã‚€ãƒªã‚¹ãƒˆ)" #: ../../rst/user_guide/complex_data_manipulation.rst:97 msgid "Get the unique list of values of a variable that vary per host" msgstr "ホストã”ã¨ã«ç•°ãªã‚‹å¤‰æ•°ã®å€¤ã®ä¸€æ„ã®ãƒªã‚¹ãƒˆã‚’å–å¾—" #: ../../rst/user_guide/complex_data_manipulation.rst:107 msgid "Find mount point" msgstr "マウントãƒã‚¤ãƒ³ãƒˆã®æ¤œç´¢" #: ../../rst/user_guide/complex_data_manipulation.rst:109 msgid "In this case, we want to find the mount point for a given path across our machines, since we already collect mount facts, we can use the following:" msgstr "今回ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€ãƒžã‚·ãƒ³é–“ã§æŒ‡å®šã•れãŸãƒ‘スã®ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆã‚’検索ã—ãŸã„ã®ã§ã™ãŒã€ã™ã§ã«ãƒžã‚¦ãƒ³ãƒˆãƒ•ァクトをåŽé›†ã—ã¦ã„ã‚‹ãŸã‚ã€æ¬¡ã®ã‚ˆã†ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:111 msgid "Use selectattr to filter mounts into list I can then sort and select the last from" msgstr "selectattr を使用ã—ã¦ãƒžã‚¦ãƒ³ãƒˆã«ãƒ•ィルターを設定ã—ã¦ãƒªã‚¹ãƒˆã«ã—ã€ã‚½ãƒ¼ãƒˆã—ã¦æœ€å¾Œã®ã‚‚ã®ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:128 msgid "Omit elements from a list" msgstr "リストã‹ã‚‰ã®è¦ç´ ã‚’çœç•¥" #: ../../rst/user_guide/complex_data_manipulation.rst:130 msgid "The special ``omit`` variable ONLY works with module options, but we can still use it in other ways as an identifier to tailor a list of elements:" msgstr "特別㪠``omit`` 変数ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚ªãƒ—ションã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ãŒã€è¦ç´ ã®ãƒªã‚¹ãƒˆã‚’調整ã™ã‚‹ãŸã‚ã®è­˜åˆ¥å­ã¨ã—ã¦ã€ä»–ã®æ–¹æ³•ã§ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:132 msgid "Inline list filtering when feeding a module option" msgstr "モジュールオプションã®ãƒ•ィード時ã®ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ãƒªã‚¹ãƒˆã®ãƒ•ィルタリング" #: ../../rst/user_guide/complex_data_manipulation.rst:146 msgid "Another way is to avoid adding elements to the list in the first place, so you can just use it directly:" msgstr "もㆠ1 ã¤ã®æ–¹æ³•ã¯ã€ãã‚‚ãもリストã«è¦ç´ ã‚’追加ã—ãªã„よã†ã«ã—ã¦ã€ç›´æŽ¥åˆ©ç”¨ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:148 msgid "Using set_fact in a loop to increment a list conditionally" msgstr "ループ㧠set_fact を使用ã—ã¦ãƒªã‚¹ãƒˆã‚’æ¡ä»¶ä»˜ãã§å¢—分ã™ã‚‹" #: ../../rst/user_guide/complex_data_manipulation.rst:166 msgid "Combine values from same list of dicts" msgstr "åŒã˜ãƒªã‚¹ãƒˆã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®å€¤ã‚’çµåˆã™ã‚‹" #: ../../rst/user_guide/complex_data_manipulation.rst:167 msgid "Combining positive and negative filters from examples above, you can get a 'value when it exists' and a 'fallback' when it doesn't." msgstr "上記ã®ä¾‹ã‹ã‚‰æ­£ã®ãƒ•ィルターã¨è² ã®ãƒ•ィルターを組ã¿åˆã‚ã›ã‚‹ã¨ã€ã€Œå­˜åœ¨ã™ã‚‹å ´åˆã®å€¤ã€ã¨å­˜åœ¨ã—ãªã„å ´åˆã®ã€Œãƒ•ォールãƒãƒƒã‚¯ã€ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:169 msgid "Use selectattr and rejectattr to get the ansible_host or inventory_hostname as needed" msgstr "å¿…è¦ã«å¿œã˜ã¦ã€selectattr ãŠã‚ˆã³ rejectattr を使用ã—㦠ansible_host ã¾ãŸã¯ inventory_hostname ã‚’å–å¾—" #: ../../rst/user_guide/complex_data_manipulation.rst:187 msgid "Custom Fileglob Based on a Variable" msgstr "変数ã«åŸºã¥ãカスタムファイルグロブ" #: ../../rst/user_guide/complex_data_manipulation.rst:189 msgid "This example uses `Python argument list unpacking `_ to create a custom list of fileglobs based on a variable." msgstr "ã“ã®ä¾‹ã§ã¯ã€`Python argument list unpacking `_ を使用ã—ã¦ã€å¤‰æ•°ã«åŸºã¥ã„ã¦ãƒ•ァイルグロブã®ã‚«ã‚¹ã‚¿ãƒ ãƒªã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:191 msgid "Using fileglob with a list based on a variable." msgstr "変数ã«åŸºã¥ãリストã§ãƒ•ァイルグロブã®ä½¿ç”¨" #: ../../rst/user_guide/complex_data_manipulation.rst:212 msgid "Complex Type transformations" msgstr "複雑ãªã‚¿ã‚¤ãƒ—変æ›" #: ../../rst/user_guide/complex_data_manipulation.rst:214 msgid "Jinja provides filters for simple data type transformations (``int``, ``bool``, and so on), but when you want to transform data structures things are not as easy. You can use loops and list comprehensions as shown above to help, also other filters and lookups can be chained and used to achieve more complex transformations." msgstr "Jinja ã«ã¯å˜ç´”ãªãƒ‡ãƒ¼ã‚¿åž‹å¤‰æ›ã®ãŸã‚ã®ãƒ•ィルターãŒç”¨æ„ã•れã¦ã„ã¾ã™ãŒ (``int``ã€``bool`` ãªã©)ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’変æ›ã—ãŸã„å ´åˆã¯ãã†ç°¡å˜ã§ã¯ã‚りã¾ã›ã‚“。上記ã®ã‚ˆã†ã«ãƒ«ãƒ¼ãƒ—やリスト内包を利用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€ä»–ã®ãƒ•ィルターやルックアップを連鎖ã•ã›ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€ã‚ˆã‚Šè¤‡é›‘ãªå¤‰æ›ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:221 msgid "Create dictionary from list" msgstr "リストã‹ã‚‰ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’作æˆ" #: ../../rst/user_guide/complex_data_manipulation.rst:223 msgid "In most languages it is easy to create a dictionary (a.k.a. map/associative array/hash and so on) from a list of pairs, in Ansible there are a couple of ways to do it and the best one for you might depend on the source of your data." msgstr "ã»ã¨ã‚“ã©ã®è¨€èªžã§ã¯ã€ãƒšã‚¢ã®ãƒªã‚¹ãƒˆã‹ã‚‰ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ (マップã€é€£æƒ³é…列ã€ãƒãƒƒã‚·ãƒ¥ãªã©) ã‚’ç°¡å˜ã«ä½œæˆã§ãã¾ã™ãŒã€Ansible ã§ã¯ã„ãã¤ã‹ã®æ–¹æ³•ãŒã‚りã€ãƒ‡ãƒ¼ã‚¿ã®ã‚½ãƒ¼ã‚¹ã«ã‚ˆã£ã¦æœ€é©ãªæ–¹æ³•ãŒç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:226 msgid "These example produces ``{\"a\": \"b\", \"c\": \"d\"}``" msgstr "ã“れらã®ä¾‹ã§ã¯ã€``{\"a\": \"b\", \"c\": \"d\"}`` を生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:228 msgid "Simple list to dict by assuming the list is [key, value , key, value, ...]" msgstr "リスト㌠[key, value , key, value, ...] ã§ã‚ã‚‹ã“ã¨ã‚’剿ã¨ã™ã‚‹ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¸ã®å˜ç´”ãªãƒªã‚¹ãƒˆ" #: ../../rst/user_guide/complex_data_manipulation.rst:236 msgid "It is simpler when we have a list of pairs:" msgstr "ペアã®ãƒªã‚¹ãƒˆãŒã‚ã‚‹å ´åˆã¯ã‚ˆã‚Šç°¡å˜ã«ã§ãã‚‹" #: ../../rst/user_guide/complex_data_manipulation.rst:243 msgid "Both end up being the same thing, with ``slice(2)`` transforming ``single_list`` to a ``list_of_pairs`` generator." msgstr "``slice(2)`` ㌠``single_list`` ã‚’ ``list_of_pairs`` ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å¤‰æ›ã™ã‚‹ã“ã¨ã§ã€ä¸¡æ–¹ã¨ã‚‚åŒã˜å†…容ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:247 msgid "A bit more complex, using ``set_fact`` and a ``loop`` to create/update a dictionary with key value pairs from 2 lists:" msgstr "``set_fact`` 㨠``loop`` を使用ã—ã¦ã€2 ã¤ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’æŒã¤ã€ã‚‚ã†å°‘ã—複雑ãªãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’作æˆ/æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:249 msgid "Using set_fact to create a dictionary from a set of lists" msgstr "set_fact を使用ã—ã¦ãƒªã‚¹ãƒˆã®ã‚»ãƒƒãƒˆã‹ã‚‰ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ä½œæˆ" #: ../../rst/user_guide/complex_data_manipulation.rst:267 msgid "This results in ``{\"foo\": \"a\", \"var\": \"b\", \"bar\": \"c\"}``." msgstr "ãã®çµæžœã€``{\"foo\": \"a\", \"var\": \"b\", \"bar\": \"c\"}`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:270 msgid "You can even combine these simple examples with other filters and lookups to create a dictionary dynamically by matching patterns to variable names:" msgstr "ã“れらã®ç°¡å˜ãªä¾‹ã‚’ä»–ã®ãƒ•ィルターやルックアップã¨çµ„ã¿åˆã‚ã›ã¦ã€å¤‰æ•°åã«ãƒ‘ターンを一致ã•ã›ã¦å‹•çš„ã«ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:272 msgid "Using 'vars' to define dictionary from a set of lists without needing a task" msgstr "「varsã€ã‚’使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã‚’å¿…è¦ã¨ã›ãšã«ãƒªã‚¹ãƒˆã®ã‚»ãƒƒãƒˆã‹ã‚‰ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’定義" #: ../../rst/user_guide/complex_data_manipulation.rst:279 msgid "A quick explanation, since there is a lot to unpack from these two lines:" msgstr "以下㮠2 ã¤ã®è¡Œã‹ã‚‰å±•é–‹ã™ã‚‹ãŸã‚ã€ç°¡å˜ãªèª¬æ˜ŽãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:281 msgid "The ``varnames`` lookup returns a list of variables that match \"begin with ``my``\"." msgstr "``varnames`` ルックアップã¯ã€ã€Œbegin with ``my``ã€ã«ä¸€è‡´ã™ã‚‹å¤‰æ•°ã®ä¸€è¦§ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:282 msgid "Then feeding the list from the previous step into the ``vars`` lookup to get the list of values. The ``*`` is used to 'dereference the list' (a pythonism that works in Jinja), otherwise it would take the list as a single argument." msgstr "ãã—ã¦ã€å‰ã®ã‚¹ãƒ†ãƒƒãƒ—ã®ãƒªã‚¹ãƒˆã‚’ ``vars`` ルックアップã«é€ã‚Šã€å€¤ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚``*`` ã¯ã€Œãƒªã‚¹ãƒˆã‚’å‚照解除ã™ã‚‹ã€ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ (Jinja ã§ã‚‚通用ã™ã‚‹ python ã®æ‰‹æ³•ã§ã™)。ãã†ã§ãªã‘れã°ã€ãƒªã‚¹ãƒˆã‚’ 1 ã¤ã®å¼•æ•°ã¨ã—ã¦å—ã‘å–ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:284 msgid "Both lists get passed to the ``zip`` filter to pair them off into a unified list (key, value, key2, value2, ...)." msgstr "両方ã®ãƒªã‚¹ãƒˆã¯ã€``zip`` ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã«æ¸¡ã•れã€ãれらをペアã«ã—ã¦çµ±ä¸€ã•れãŸãƒªã‚¹ãƒˆ (key, value, key2, value2, ...) ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:285 msgid "The dict function then takes this 'list of pairs' to create the dictionary." msgstr "ãã®å¾Œã€dict 関数ã¯ã“ã®ã€Œãƒšã‚¢ã®ãƒªã‚¹ãƒˆã€ã‚’å–å¾—ã—ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/complex_data_manipulation.rst:288 msgid "An example on how to use facts to find a host's data that meets condition X:" msgstr "ファクトを使用ã—ã¦ã€æ¡ä»¶ X を満ãŸã™ãƒ›ã‚¹ãƒˆã®ãƒ‡ãƒ¼ã‚¿ã‚’検索ã™ã‚‹ä¾‹:" #: ../../rst/user_guide/complex_data_manipulation.rst:297 msgid "Using an example from @zoradache on reddit, to show the 'uptime in days/hours/minutes' (assumes facts where gathered). https://www.reddit.com/r/ansible/comments/gj5a93/trying_to_get_uptime_from_seconds/fqj2qr3/" msgstr "reddit ã® @zoradache æ°ã®ä¾‹ã‚’å‚考ã«ã€ã€Œæ—¥/時間/分å˜ä½ã§ã®ç¨¼åƒæ™‚é–“ã€ã‚’表示ã—ã¦ã„ã¾ã™ (ファクトãŒåŽé›†ã•れã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¦ã„ã¾ã™) (https://www.reddit.com/r/ansible/comments/gj5a93/trying_to_get_uptime_from_seconds/fqj2qr3/)。" #: ../../rst/user_guide/complex_data_manipulation.rst:309 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:727 #: ../../rst/user_guide/playbooks_variables.rst:453 msgid ":ref:`playbooks_filters`" msgstr ":ref:`playbooks_filters`" #: ../../rst/user_guide/complex_data_manipulation.rst:310 msgid "Jinja2 filters included with Ansible" msgstr "Ansible ã«å«ã¾ã‚Œã‚‹ Jinja2 フィルター" #: ../../rst/user_guide/complex_data_manipulation.rst:311 msgid ":ref:`playbooks_tests`" msgstr ":ref:`playbooks_tests`" #: ../../rst/user_guide/complex_data_manipulation.rst:312 msgid "Jinja2 tests included with Ansible" msgstr "Ansible ã«å«ã¾ã‚Œã‚‹ Jinja2 テスト" #: ../../rst/user_guide/complex_data_manipulation.rst:313 msgid "`Jinja2 Docs `_" msgstr "`Jinja2 Docs `_" #: ../../rst/user_guide/complex_data_manipulation.rst:314 msgid "Jinja2 documentation, includes lists for core filters and tests" msgstr "Jinja2 ドキュメント。コアフィルターãŠã‚ˆã³ãƒ†ã‚¹ãƒˆã®ä¸€è¦§ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:5 msgid "Connection methods and details" msgstr "接続方法ãŠã‚ˆã³è©³ç´°" #: ../../rst/user_guide/connection_details.rst:7 msgid "This section shows you how to expand and refine the connection methods Ansible uses for your inventory." msgstr "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible ãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ä½¿ç”¨ã™ã‚‹æŽ¥ç¶šæ–¹æ³•ã‚’æ‹¡å¼µãŠã‚ˆã³æ”¹è‰¯ã™ã‚‹æ–¹æ³•を示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:10 msgid "ControlPersist and paramiko" msgstr "ControlPersist ãŠã‚ˆã³ paramiko" #: ../../rst/user_guide/connection_details.rst:12 msgid "By default, Ansible uses native OpenSSH, because it supports ControlPersist (a performance feature), Kerberos, and options in ``~/.ssh/config`` such as Jump Host setup. If your control machine uses an older version of OpenSSH that does not support ControlPersist, Ansible will fallback to a Python implementation of OpenSSH called 'paramiko'." msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ã® OpenSSH を使用ã—ã¾ã™ã€‚ã“れã¯ã€ControlPersist (パフォーマンス機能)ã€Kerberosã€ãŠã‚ˆã³ Jump Host 設定ãªã©ã® ``~/.ssh/config`` ã®ã‚ªãƒ—ションをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ãŸã‚ã§ã™ã€‚コントロールマシン㌠ControlPersist をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® OpenSSH を使用ã—ã¦ã„ã‚‹å ´åˆã€Ansible ã¯ã€Œparamikoã€ã¨å‘¼ã°ã‚Œã‚‹ Python ã«ã‚ˆã‚‹ OpenSSH ã®å®Ÿè£…ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:17 msgid "Setting a remote user" msgstr "リモートユーザーã®è¨­å®š" #: ../../rst/user_guide/connection_details.rst:19 msgid "By default, Ansible connects to all remote devices with the user name you are using on the control node. If that user name does not exist on a remote device, you can set a different user name for the connection. If you just need to do some tasks as a different user, look at :ref:`become`. You can set the connection user in a playbook:" msgstr "デフォルトã§ã¯ã€Ansible ã¯ã™ã¹ã¦ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã«ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã§ä½¿ç”¨ã—ã¦ã„るユーザーåã§æŽ¥ç¶šã—ã¾ã™ã€‚リモートデãƒã‚¤ã‚¹ã«ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€æŽ¥ç¶šã«åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ã„ãã¤ã‹ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã ã‘ã®å ´åˆã¯ã€ã€Œ:ref:`become`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Playbookã§æŽ¥ç¶šãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:32 msgid "as a host variable in inventory:" msgstr "インベントリーã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:39 msgid "or as a group variable in inventory:" msgstr "ã¾ãŸã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«å¤‰æ•°ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:51 msgid "Setting up SSH keys" msgstr "SSH キーã®è¨­å®š" #: ../../rst/user_guide/connection_details.rst:53 msgid "By default, Ansible assumes you are using SSH keys to connect to remote machines. SSH keys are encouraged, but you can use password authentication if needed with the ``--ask-pass`` option. If you need to provide a password for :ref:`privilege escalation ` (sudo, pbrun, and so on), use ``--ask-become-pass``." msgstr "デフォルトã§ã¯ã€Ansible 㯠SSH éµã‚’使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚SSH ã‚­ãƒ¼ãŒæŽ¨å¥¨ã•れã¾ã™ãŒã€å¿…è¦ã«å¿œã˜ã¦ ``--ask-pass`` オプションを使用ã—ã¦ãƒ‘スワードèªè¨¼ã‚’使用ã§ãã¾ã™ã€‚:ref:`privilege escalation ` (sudoã€pbrun ãªã©) ã®ãƒ‘スワードをæä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``--ask-become-pass`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/shared_snippets/SSH_password_prompt.txt:2 msgid "Ansible does not expose a channel to allow communication between the user and the ssh process to accept a password manually to decrypt an ssh key when using the ssh connection plugin (which is the default). The use of ``ssh-agent`` is highly recommended." msgstr "Ansible ã¯ã€ssh connection プラグインを使用ã—ã¦ã„ã‚‹å ´åˆ (ã“れãŒãƒ‡ãƒ•ォルトã§ã™)ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ ssh プロセスã®é–“ã®é€šä¿¡ã‚’å¯èƒ½ã«ã™ã‚‹ãƒãƒ£ãƒ³ãƒãƒ«ã‚’公開ã—ã¦ãŠã‚‰ãšã€ssh éµã‚’復å·ã™ã‚‹ãŸã‚ã®ãƒ‘スワードを手動ã§å—ã‘入れるã“ã¨ãŒã§ãã¾ã›ã‚“。``ssh-agent`` を使用ã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:57 msgid "To set up SSH agent to avoid retyping passwords, you can do:" msgstr "パスワードをå†å…¥åŠ›ã—ãªã„よã†ã« SSH エージェントをセットアップã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:64 msgid "Depending on your setup, you may wish to use Ansible's ``--private-key`` command line option to specify a pem file instead. You can also add the private key file:" msgstr "セットアップã«ã‚ˆã£ã¦ã¯ã€ä»£ã‚り㫠Ansible ã® ``--private-key`` コマンドラインオプションを使用ã—㦠pem ファイルを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚秘密éµãƒ•ァイルを追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:71 msgid "Another way to add private key files without using ssh-agent is using ``ansible_ssh_private_key_file`` in an inventory file as explained here: :ref:`intro_inventory`." msgstr "ssh-agent を使用ã›ãšã«ç§˜å¯†éµãƒ•ァイルを追加ã™ã‚‹åˆ¥ã®æ–¹æ³•ã¯ã€ã€Œ:ref:`intro_inventory`ã€ã§èª¬æ˜Žã™ã‚‹ã‚ˆã†ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㧠``ansible_ssh_private_key_file`` を使用ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:74 msgid "Running against localhost" msgstr "ローカルホストã«å¯¾ã—ã¦å®Ÿè¡Œ" #: ../../rst/user_guide/connection_details.rst:76 msgid "You can run commands against the control node by using \"localhost\" or \"127.0.0.1\" for the server name:" msgstr "サーãƒãƒ¼åã«ã€Œlocalhostã€ã¾ãŸã¯ã€Œ127.0.0.1ã€ã‚’使用ã—ã¦ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:82 msgid "You can specify localhost explicitly by adding this to your inventory file:" msgstr "ã“れをインベントリーファイルã«è¿½åŠ ã—ã¦ã€localhost ã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:91 msgid "Managing host key checking" msgstr "ホストéµã®ç¢ºèªã®ç®¡ç†" #: ../../rst/user_guide/connection_details.rst:93 msgid "Ansible enables host key checking by default. Checking host keys guards against server spoofing and man-in-the-middle attacks, but it does require some maintenance." msgstr "Ansible ã¯ã€ãƒ‡ãƒ•ォルトã§ãƒ›ã‚¹ãƒˆéµã®ç¢ºèªã‚’有効ã«ã—ã¾ã™ã€‚ホストéµã‚’確èªã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ã®ãªã‚Šã™ã¾ã—や中間者攻撃ã‹ã‚‰ä¿è­·ã•れã¾ã™ãŒã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:95 msgid "If a host is reinstalled and has a different key in 'known_hosts', this will result in an error message until corrected. If a new host is not in 'known_hosts' your control node may prompt for confirmation of the key, which results in an interactive experience if using Ansible, from say, cron. You might not want this." msgstr "ホストãŒå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã€ã€Œknown_hostsã€ã«ç•°ãªã‚‹ã‚­ãƒ¼ãŒã‚ã‚‹å ´åˆã¯ã€ä¿®æ­£ã•れるã¾ã§ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚æ–°ã—ã„ホストãŒã€Œknown_hostsã€ã«ãªã„å ´åˆã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã¯ã‚­ãƒ¼ã®ç¢ºèªã‚’求ã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ã“れ㯠Ansible ã‚’ cron ãªã©ã‹ã‚‰ä½¿ç”¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ãƒ†ã‚£ãƒ–ãªæ“作ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ˆã†ã«å‹•作ã—ãªã„よã†ã«ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:97 msgid "If you understand the implications and wish to disable this behavior, you can do so by editing ``/etc/ansible/ansible.cfg`` or ``~/.ansible.cfg``:" msgstr "ã“ã®å‹•作を無効ã«ã—ãŸå ´åˆã®å½±éŸ¿ã‚’ç†è§£ã—ã€ç„¡åйã«ã™ã‚‹å ´åˆã¯ã€``/etc/ansible/ansible.cfg`` ã¾ãŸã¯ ``~/.ansible.cfg`` 編集ã—ã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:104 msgid "Alternatively this can be set by the :envvar:`ANSIBLE_HOST_KEY_CHECKING` environment variable:" msgstr "ã¾ãŸã€ã“れã¯ã€:envvar:`ANSIBLE_HOST_KEY_CHECKING` 環境変数ã«ã‚ˆã‚Šè¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:110 msgid "Also note that host key checking in paramiko mode is reasonably slow, therefore switching to 'ssh' is also recommended when using this feature." msgstr "ã¾ãŸã€paramiko モードã§ã®ãƒ›ã‚¹ãƒˆã‚­ãƒ¼ãƒã‚§ãƒƒã‚¯ã¯ã‹ãªã‚Šé…ã„ãŸã‚ã€ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹å ´åˆã¯ã€Œsshã€ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ã‚‚推奨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/connection_details.rst:113 msgid "Other connection methods" msgstr "ãã®ä»–ã®æŽ¥ç¶šæ–¹æ³•" #: ../../rst/user_guide/connection_details.rst:115 msgid "Ansible can use a variety of connection methods beyond SSH. You can select any connection plugin, including managing things locally and managing chroot, lxc, and jail containers. A mode called 'ansible-pull' can also invert the system and have systems 'phone home' via scheduled git checkouts to pull configuration directives from a central repository." msgstr "Ansible ã§ã¯ã€SSH 以外ã«ã‚‚ã•ã¾ã–ã¾ãªæŽ¥ç¶šæ–¹æ³•を利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ローカルã§ã®ç®¡ç†ã€chroot コンテナーã€lxc コンテナーã€ãŠã‚ˆã³ jail コンテナーã®ç®¡ç†ãªã©ã€ä»»æ„ã® connection ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚「ansible-pullã€ã¨å‘¼ã°ã‚Œã‚‹ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’å転ã•ã›ã¦ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れ㟠git ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’介ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’「phone homeã€ã•ã›ã€ä¸­å¤®ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰è¨­å®šãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–を引ã出ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:3 msgid "Playbook Example: Continuous Delivery and Rolling Upgrades" msgstr "Playbook ã®ä¾‹: 継続的デリãƒãƒªãƒ¼ãŠã‚ˆã³ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—グレード" #: ../../rst/user_guide/guide_rolling_upgrade.rst:11 msgid "What is continuous delivery?" msgstr "継続的デリãƒãƒªãƒ¼ã¨ã¯" #: ../../rst/user_guide/guide_rolling_upgrade.rst:13 msgid "Continuous delivery (CD) means frequently delivering updates to your software application." msgstr "継続的デリãƒãƒªãƒ¼ (CD) ã¯ã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«æ›´æ–°ã‚’é »ç¹ã«é…ä¿¡ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:15 msgid "The idea is that by updating more often, you do not have to wait for a specific timed period, and your organization gets better at the process of responding to change." msgstr "æ›´æ–°ã®é »åº¦ã‚’上ã’ã‚‹ã“ã¨ã§ã€ç‰¹å®šã®æœŸé–“ã‚’å¾…ã¤å¿…è¦ãŒãªããªã‚Šã€çµ„ç¹”ã¯å¤‰åŒ–ã«å¯¾å¿œã™ã‚‹ãƒ—ロセスを改善ã§ãã‚‹ã¨ã„ã†è€ƒãˆæ–¹ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:18 msgid "Some Ansible users are deploying updates to their end users on an hourly or even more frequent basis -- sometimes every time there is an approved code change. To achieve this, you need tools to be able to quickly apply those updates in a zero-downtime way." msgstr "Ansible ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ä¸­ã«ã¯ã€ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¢ãƒƒãƒ—デートを毎時ã¾ãŸã¯ãれ以上ã®é »åº¦ã§é…布ã—ã¦ã„る人ãŒã„ã¾ã™ã€‚承èªã•れãŸã‚³ãƒ¼ãƒ‰å¤‰æ›´ãŒã‚ã‚‹ãŸã³ã«é…布ã—ã¦ã„ã‚‹å ´åˆã‚‚ã‚りã¾ã™ã€‚ãã®ãŸã‚ã«ã¯ã€ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ãªã—ã§æ›´æ–°ã‚’迅速ã«é©ç”¨ã§ãるツールãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:21 msgid "This document describes in detail how to achieve this goal, using one of Ansible's most complete example playbooks as a template: lamp_haproxy. This example uses a lot of Ansible features: roles, templates, and group variables, and it also comes with an orchestration playbook that can do zero-downtime rolling upgrades of the web application stack." msgstr "本ガイドã§ã¯ã€Ansible ã®æœ€ã‚‚完æˆåº¦ã®é«˜ã„サンプル Playbook ã® 1 ã¤ã§ã‚ã‚‹ lamp_haproxy をテンプレートã¨ã—ã¦ã€ã“ã®ç›®æ¨™ã‚’锿ˆã™ã‚‹æ–¹æ³•を詳細ã«èª¬æ˜Žã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã€ãƒ†ãƒ³ãƒ—レートã€ã‚°ãƒ«ãƒ¼ãƒ—変数ãªã©ã® Ansible ã®æ©Ÿèƒ½ãŒæ•°å¤šã使用ã•れã¦ãŠã‚Šã€Web アプリケーションスタックã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—グレードをダウンタイムãªã—ã§è¡Œã†ã“ã¨ãŒã§ãるオーケストレーション Playbook も付属ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:28 msgid "`Click here for the latest playbooks for this example `_." msgstr "ã“ã®ã‚µãƒ³ãƒ—ルã«ä½¿ç”¨ã™ã‚‹ Playbook ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€`ã“ã¡ã‚‰ `_ をクリックã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:31 msgid "The playbooks deploy Apache, PHP, MySQL, Nagios, and HAProxy to a CentOS-based set of servers." msgstr "Playbook 㯠Apacheã€PHPã€MySQLã€Nagiosã€ãŠã‚ˆã³ HAProxy ã‚’ CentOS ベースã®ã‚µãƒ¼ãƒãƒ¼ã‚»ãƒƒãƒˆã«ãƒ‡ãƒ—ロイã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:33 msgid "We're not going to cover how to run these playbooks here. Read the included README in the github project along with the example for that information. Instead, we're going to take a close look at every part of the playbook and describe what it does." msgstr "ã“ã“ã§ã¯ã€ã“れら㮠Playbook を実行ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã¯èª¬æ˜Žã—ã¾ã›ã‚“。ãã®æƒ…å ±ã«ã¤ã„ã¦ã¯ã€github プロジェクトã«å«ã¾ã‚Œã‚‹ README をサンプルã¨ä¸€ç·’ã«èª­ã‚“ã§ãã ã•ã„。ãã®ä»£ã‚りã€Playbook ã®å„部分をよã見ã¦ã€ãれãŒä½•ã‚’ã™ã‚‹ã®ã‹ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:39 msgid "Site deployment" msgstr "サイトã®ãƒ‡ãƒ—ロイメント" #: ../../rst/user_guide/guide_rolling_upgrade.rst:41 msgid "Let's start with ``site.yml``. This is our site-wide deployment playbook. It can be used to initially deploy the site, as well as push updates to all of the servers:" msgstr "ã¾ãšã€``site.yml`` ã‹ã‚‰å§‹ã‚ã¾ã—ょã†ã€‚ã“れã¯ã€ã‚µã‚¤ãƒˆå…¨ä½“ã®ãƒ‡ãƒ—ロイメント Playbook ã§ã™ã€‚ã“ã® Playbook を使用ã—ã¦ã€ã‚µã‚¤ãƒˆã®åˆæœŸãƒ‡ãƒ—ロイメントã¨ã€ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã¸ã®æ›´æ–°ã®ãƒ—ッシュを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:86 msgid "If you're not familiar with terms like playbooks and plays, you should review :ref:`working_with_playbooks`." msgstr "Playbook やプレイãªã©ã®ç”¨èªžã«æ…£ã‚Œã¦ã„ãªã„å ´åˆã¯ã€:ref:`working_with_playbooks` を確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/guide_rolling_upgrade.rst:88 msgid "In this playbook we have 5 plays. The first one targets ``all`` hosts and applies the ``common`` role to all of the hosts. This is for site-wide things like yum repository configuration, firewall configuration, and anything else that needs to apply to all of the servers." msgstr "ã“ã® Playbook ã§ã¯ 5 ã¤ã®ãƒ—レイを紹介ã—ã¾ã™ã€‚最åˆã® Playbook 㯠``all`` ã®ãƒ›ã‚¹ãƒˆã‚’対象ã¨ã—ã€``common`` ã®ãƒ­ãƒ¼ãƒ«ã‚’ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã—ã¾ã™ã€‚ã“れã¯ã€yum リãƒã‚¸ãƒˆãƒªãƒ¼ã®è¨­å®šã‚„ファイアウォールã®è¨­å®šãªã©ã€ã‚µã‚¤ãƒˆå…¨ä½“ã§ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã«é©ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‚‚ã®ã‚’対象ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:91 msgid "The next four plays run against specific host groups and apply specific roles to those servers. Along with the roles for Nagios monitoring, the database, and the web application, we've implemented a ``base-apache`` role that installs and configures a basic Apache setup. This is used by both the sample web application and the Nagios hosts." msgstr "次㮠4 ã¤ã®ãƒ—レイã¯ã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ã«å¯¾ã—ã¦å®Ÿè¡Œã—ã€ãれらã®ã‚µãƒ¼ãƒãƒ¼ã«ç‰¹å®šã®ãƒ­ãƒ¼ãƒ«ã‚’é©ç”¨ã—ã¾ã™ã€‚Nagios 監視ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€Web アプリケーションã®ãƒ­ãƒ¼ãƒ«ã¨ä¸€ç·’ã«ã€åŸºæœ¬çš„㪠Apache セットアップをインストールã—ã¦è¨­å®šã™ã‚‹ ``base-apache`` ロールを実装ã—ã¾ã—ãŸã€‚ã“れã¯ã€ã‚µãƒ³ãƒ—ル㮠Web アプリケーション㨠Nagios ホストã®ä¸¡æ–¹ã§ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:99 msgid "Reusable content: roles" msgstr "å†åˆ©ç”¨å¯èƒ½ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„: ロール" #: ../../rst/user_guide/guide_rolling_upgrade.rst:101 msgid "By now you should have a bit of understanding about roles and how they work in Ansible. Roles are a way to organize content: tasks, handlers, templates, and files, into reusable components." msgstr "ãã®çµæžœã€ãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ Ansible ã§ã®å‹•作ã«ã¤ã„ã¦ã‚る程度ç†è§£ã§ãã‚‹ã¯ãšã§ã™ã€‚ロールã¯ã€ã‚¿ã‚¹ã‚¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€ãƒ†ãƒ³ãƒ—レートã€ãƒ•ァイルãªã©ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å†åˆ©ç”¨å¯èƒ½ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«æ•´ç†ã™ã‚‹æ–¹æ³•ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:104 msgid "This example has six roles: ``common``, ``base-apache``, ``db``, ``haproxy``, ``nagios``, and ``web``. How you organize your roles is up to you and your application, but most sites will have one or more common roles that are applied to all systems, and then a series of application-specific roles that install and configure particular parts of the site." msgstr "ã“ã®ä¾‹ã§ã¯ã€``common``ã€``base-apache``ã€``db``ã€``haproxy``ã€``nagios``ã€ãŠã‚ˆã³ ``web`` ã® 6 ã¤ã®ãƒ­ãƒ¼ãƒ«ãŒã‚りã¾ã™ã€‚ロールをã©ã®ã‚ˆã†ã«ç·¨æˆã™ã‚‹ã‹ã¯ã€ãƒ‹ãƒ¼ã‚ºãŠã‚ˆã³ä½¿ç”¨ã™ã‚‹ã‚¢ãƒ—リケーション次第ã§ã™ãŒã€ã»ã¨ã‚“ã©ã®ã‚µã‚¤ãƒˆã§ã¯ã€ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ã«é©ç”¨ã•れる 1 ã¤ã¾ãŸã¯è¤‡æ•°ã®å…±é€šãƒ­ãƒ¼ãƒ«ã¨ã€ã‚µã‚¤ãƒˆã®ç‰¹å®šã®éƒ¨åˆ†ã‚’インストールãŠã‚ˆã³è¨­å®šã™ã‚‹ä¸€é€£ã®ã‚¢ãƒ—リケーション固有ã®ãƒ­ãƒ¼ãƒ«ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:108 msgid "Roles can have variables and dependencies, and you can pass in parameters to roles to modify their behavior. You can read more about roles in the :ref:`playbooks_reuse_roles` section." msgstr "ロールã¯å¤‰æ•°ã¨ä¾å­˜é–¢ä¿‚ã‚’æŒã¤ã“ã¨ãŒã§ãã€ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ãƒ­ãƒ¼ãƒ«ã«æ¸¡ã™ã“ã¨ã§ãã®å‹•作を変更ã§ãã¾ã™ã€‚ロールã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`playbooks_reuse_roles`ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§è©³ã—ã説明ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:114 msgid "Configuration: group variables" msgstr "設定: グループ変数" #: ../../rst/user_guide/guide_rolling_upgrade.rst:116 msgid "Group variables are variables that are applied to groups of servers. They can be used in templates and in playbooks to customize behavior and to provide easily-changed settings and parameters. They are stored in a directory called ``group_vars`` in the same location as your inventory. Here is lamp_haproxy's ``group_vars/all`` file. As you might expect, these variables are applied to all of the machines in your inventory:" msgstr "グループ変数ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«é©ç”¨ã•れる変数ã§ã™ã€‚テンプレートや Playbook ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€å‹•作をカスタマイズã—ãŸã‚Šã€ç°¡å˜ã«å¤‰æ›´ã§ãる設定やパラメーターをæä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚グループ変数ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨åŒã˜å ´æ‰€ã«ã‚ã‚‹ ``group_vars`` ディレクトリーã«ä¿å­˜ã•れã¾ã™ã€‚以下㯠lamp_haproxy ã® ``group_vars/all`` ファイルã§ã™ã€‚ã”æƒ³åƒã®ã¨ãŠã‚Šã€ã“れらã®å¤‰æ•°ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:127 msgid "This is a YAML file, and you can create lists and dictionaries for more complex variable structures. In this case, we are just setting two variables, one for the port for the web server, and one for the NTP server that our machines should use for time synchronization." msgstr "ã“れ㯠YAML ファイルã§ã™ãŒã€ãƒªã‚¹ãƒˆã‚„ディクショナリーを作æˆã™ã‚‹ã“ã¨ã§ã€ã‚ˆã‚Šè¤‡é›‘ãªå¤‰æ•°æ§‹é€ ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã“ã§ã¯ 2 ã¤ã®å¤‰æ•°ã‚’設定ã—ã¦ã„ã¾ã™ã€‚1 ã¤ã¯ Web サーãƒãƒ¼ã®ãƒãƒ¼ãƒˆç”¨ã€ã‚‚ㆠ1 ã¤ã¯ãƒžã‚·ãƒ³ãŒæ™‚åˆ»åŒæœŸã«ä½¿ç”¨ã™ã‚‹ NTP サーãƒãƒ¼ã®ãƒãƒ¼ãƒˆç”¨ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:131 msgid "Here's another group variables file. This is ``group_vars/dbservers`` which applies to the hosts in the ``dbservers`` group:" msgstr "次ã¯ã€åˆ¥ã®ã‚°ãƒ«ãƒ¼ãƒ—変数ファイルã§ã™ã€‚ã“れã¯ã€``dbservers`` グループã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã•れる ``group_vars/dbservers`` ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:142 msgid "If you look in the example, there are group variables for the ``webservers`` group and the ``lbservers`` group, similarly." msgstr "上記ã®ä¾‹ã‚’å‚ç…§ã™ã‚‹ã¨ã€åŒæ§˜ã« ``webservers`` グループ㨠``lbservers`` グループã®ã‚°ãƒ«ãƒ¼ãƒ—変数も存在ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:144 msgid "These variables are used in a variety of places. You can use them in playbooks, like this, in ``roles/db/tasks/main.yml``:" msgstr "ã“れらã®å¤‰æ•°ã¯ã•ã¾ã–ã¾ãªå ´æ‰€ã§ä½¿ç”¨ã•れã€``roles/db/tasks/main.yml`` ã®ã‚ˆã†ã« Playbook ã§ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:161 msgid "You can also use these variables in templates, like this, in ``roles/common/templates/ntp.conf.j2``:" msgstr "ã“れらã®å¤‰æ•°ã¯ã€``roles/common/templates/ntp.conf.j2`` ã§ã€ãƒ†ãƒ³ãƒ—レートã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:176 msgid "You can see that the variable substitution syntax of {{ and }} is the same for both templates and variables. The syntax inside the curly braces is Jinja2, and you can do all sorts of operations and apply different filters to the data inside. In templates, you can also use for loops and if statements to handle more complex situations, like this, in ``roles/common/templates/iptables.j2``:" msgstr "{{ ãŠã‚ˆã³ }} ã®å¤‰æ•°ç½®æ›æ§‹æ–‡ã¯ã€ãƒ†ãƒ³ãƒ—レートã§ã‚‚変数ã§ã‚‚åŒã˜ã§ã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚中括弧ã®ä¸­ã®æ§‹æ–‡ã¯ Jinja2 ã®ã‚‚ã®ã§ã€ä¸­ã®ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦ã‚ã‚‰ã‚†ã‚‹ç¨®é¡žã®æ“作やã•ã¾ã–ã¾ãªãƒ•ィルターをé©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚テンプレートã§ã¯ã€for ループや if 文を使用ã—ã¦ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã€``roles/common/templates/iptables.j2`` ã§ã‚ˆã‚Šè¤‡é›‘ãªçжæ³ã‚’処ç†ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:187 msgid "This is testing to see if the inventory name of the machine we're currently operating on (``inventory_hostname``) exists in the inventory group ``dbservers``. If so, that machine will get an iptables ACCEPT line for port 3306." msgstr "ã“れã¯ã€ç¾åœ¨æ“作ã—ã¦ã„るマシンã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å (``inventory_hostname``) ãŒã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ— ``dbservers`` ã«å­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’テストã—ã¦ã„ã¾ã™ã€‚存在ã™ã‚‹å ´åˆã€ãã®ãƒžã‚·ãƒ³ã¯ãƒãƒ¼ãƒˆ 3306 ã«å¯¾ã—㦠iptables ã® ACCEPT 行をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:190 msgid "Here's another example, from the same template:" msgstr "以下ã¯ã€åŒã˜ãƒ†ãƒ³ãƒ—レートã®åˆ¥ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:198 msgid "This loops over all of the hosts in the group called ``monitoring``, and adds an ACCEPT line for each monitoring hosts' default IPv4 address to the current machine's iptables configuration, so that Nagios can monitor those hosts." msgstr "ã“れã¯ã€``monitoring`` ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’ループã—ã€ç¾åœ¨ã®ãƒžã‚·ãƒ³ã® iptables 設定ã«ã€å„監視ホストã®ãƒ‡ãƒ•ォルト㮠IPv4 アドレス㫠ACCEPT 行を追加ã—ã€Nagios ãŒãれらã®ãƒ›ã‚¹ãƒˆã‚’監視ã§ãるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:201 msgid "You can learn a lot more about Jinja2 and its capabilities `here `_, and you can read more about Ansible variables in general in the :ref:`playbooks_variables` section." msgstr "Jinja2 ã¨ãã®æ©Ÿèƒ½ã«ã¤ã„ã¦ã¯ `ã“ã¡ã‚‰ `_ ã§ã€ã¾ãŸ Ansible ã®å¤‰æ•°å…¨èˆ¬ã«ã¤ã„ã¦ã¯ :ref:`playbooks_variables` ã§è©³ã—ã説明ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:207 msgid "The rolling upgrade" msgstr "ローリングアップグレード" #: ../../rst/user_guide/guide_rolling_upgrade.rst:209 msgid "Now you have a fully-deployed site with web servers, a load balancer, and monitoring. How do you update it? This is where Ansible's orchestration features come into play. While some applications use the term 'orchestration' to mean basic ordering or command-blasting, Ansible refers to orchestration as 'conducting machines like an orchestra', and has a pretty sophisticated engine for it." msgstr "ã“れã§ã€Web サーãƒãƒ¼ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã€ãŠã‚ˆã³ç›£è¦–機能を備ãˆãŸå®Œå…¨ãªã‚µã‚¤ãƒˆãŒå±•é–‹ã•れã¾ã—ãŸã€‚ã“れをã©ã†ã‚„ã£ã¦æ›´æ–°ã—ã¾ã™ã‹ã€‚ã“ã“ã§ã€Ansible ã®ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³æ©Ÿèƒ½ãŒæ´»èºã—ã¾ã™ã€‚アプリケーションã®ä¸­ã«ã¯ã€ã€Œã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã€ã¨ã„ã†è¨€è‘‰ã‚’ã€åŸºæœ¬çš„ãªå‘½ä»¤ã‚„ã‚³ãƒžãƒ³ãƒ‰ãƒ–ãƒ©ã‚¹ãƒˆã®æ„味ã§ä½¿ç”¨ã—ã¦ã„ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ãŒã€Ansible ã§ã¯ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’「オーケストラã®ã‚ˆã†ã«ãƒžã‚·ãƒ³ã‚’指æ®ã™ã‚‹ã“ã¨ã€ã¨å‘¼ã‚“ã§ãŠã‚Šã€ãã®ãŸã‚ã«ã‹ãªã‚Šé«˜åº¦ãªã‚¨ãƒ³ã‚¸ãƒ³ã‚’å‚™ãˆã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:213 msgid "Ansible has the capability to do operations on multi-tier applications in a coordinated way, making it easy to orchestrate a sophisticated zero-downtime rolling upgrade of our web application. This is implemented in a separate playbook, called ``rolling_update.yml``." msgstr "Ansible ã«ã¯ã€å¤šå±¤ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ“作を連æºã—ã¦è¡Œã†æ©Ÿèƒ½ãŒã‚りã€Web アプリケーションã®ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ãªã—ã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—グレードを簡å˜ã«ç·¨æˆ (オーケストレーション) ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€``rolling_update.yml`` ã¨ã„ã†åå‰ã®åˆ¥ã® Playbook ã«å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:215 msgid "Looking at the playbook, you can see it is made up of two plays. The first play is very simple and looks like this:" msgstr "Playbook を確èªã™ã‚‹ã¨ã€2 ã¤ã®ãƒ—ãƒ¬ã‚¤ã§æ§‹æˆã•れã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚1 ã¤ç›®ã®ãƒ—レイã¯ã¨ã¦ã‚‚シンプルã§ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:222 msgid "What's going on here, and why are there no tasks? You might know that Ansible gathers \"facts\" from the servers before operating upon them. These facts are useful for all sorts of things: networking information, OS/distribution versions, and so on. In our case, we need to know something about all of the monitoring servers in our environment before we perform the update, so this simple play forces a fact-gathering step on our monitoring servers. You will see this pattern sometimes, and it's a useful trick to know." msgstr "ã©ã†ãªã£ã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ã€‚ãªãœã‚¿ã‚¹ã‚¯ãŒå­˜åœ¨ã—ãªã„ã®ã§ã—ょã†ã‹ã€‚Ansible ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã‚’æ“作ã™ã‚‹å‰ã«ã€ã‚µãƒ¼ãƒãƒ¼ã‹ã‚‰ã€Œãƒ•ァクトã€ã‚’åŽé›†ã™ã‚‹ã“ã¨ã¯ã”存知ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れらã®ãƒ•ァクトã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æƒ…å ±ã€OS/ディストリビューションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã€ã‚らゆる種類ã®ã‚‚ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚今回ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€æ›´æ–°ã‚’実行ã™ã‚‹å‰ã«ã€ç’°å¢ƒå†…ã®ã™ã¹ã¦ã®ç›£è¦–サーãƒãƒ¼ã«ã¤ã„ã¦ä½•ã‹ã‚’知る必è¦ãŒã‚ã‚‹ãŸã‚ã€ã“ã®å˜ç´”ãªãƒ—レイã«ã‚ˆã£ã¦ã€ç›£è¦–サーãƒãƒ¼ã®ãƒ•ァクトåŽé›†ã‚¹ãƒ†ãƒƒãƒ—ãŒå¼·åˆ¶çš„ã«å®Ÿè¡Œã•れã¾ã™ã€‚ã“ã®ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ™‚々見ã‹ã‘ã¾ã™ãŒã€çŸ¥ã£ã¦ãŠãã¨ä¾¿åˆ©ãªãƒ¯ã‚¶ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:224 msgid "The next part is the update play. The first part looks like this:" msgstr "次ã®éƒ¨åˆ†ã¯ã€æ›´æ–°ãƒ—レイã§ã™ã€‚最åˆã®éƒ¨åˆ†ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:232 msgid "This is just a normal play definition, operating on the ``webservers`` group. The ``serial`` keyword tells Ansible how many servers to operate on at once. If it's not specified, Ansible will parallelize these operations up to the default \"forks\" limit specified in the configuration file. But for a zero-downtime rolling upgrade, you may not want to operate on that many hosts at once. If you had just a handful of webservers, you may want to set ``serial`` to 1, for one host at a time. If you have 100, maybe you could set ``serial`` to 10, for ten at a time." msgstr "ã“れã¯é€šå¸¸ã®ãƒ—レイ定義ã§ã€``webservers`` グループã§å‹•作ã—ã¾ã™ã€‚``serial`` キーワードã¯ã€ä¸€åº¦ã«æ“作ã™ã‚‹ã‚µãƒ¼ãƒãƒ¼ã®æ•°ã‚’ Ansible ã«ä¼ãˆã¾ã™ã€‚ã“ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã€Ansible ã¯è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã§æŒ‡å®šã•れã¦ã„るデフォルトã®ã€Œãƒ•ォークã€åˆ¶é™ã¾ã§ã€ã“ã‚Œã‚‰ã®æ“作を並列化ã—ã¾ã™ã€‚ã—ã‹ã—ã€ãƒ€ã‚¦ãƒ³ã‚¿ã‚¤ãƒ ãªã—ã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—グレードã§ã¯ã€ãれã»ã©å¤šãã®ãƒ›ã‚¹ãƒˆã‚’ä¸€åº¦ã«æ“作ã™ã‚‹å¿…è¦ã¯ãªã„ã§ã—ょã†ã€‚Web サーãƒãƒ¼ãŒã»ã‚“ã®ä¸€æ¡ã‚Šã—ã‹ãªã„å ´åˆã«ã¯ã€``serial`` ã‚’ 1 ã«è¨­å®šã—ã¦ã€ä¸€åº¦ã« 1 ã¤ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦è¡Œã†ã®ãŒã‚ˆã„ã§ã—ょã†ã€‚100 å°ã‚ã‚‹å ´åˆã¯ã€``serial`` ã‚’ 10 ã«è¨­å®šã—ã¦ã€ä¸€åº¦ã« 10 å°ã®ãƒ›ã‚¹ãƒˆã‚’æ“作ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:234 msgid "Here is the next part of the update play:" msgstr "ä»¥ä¸‹ã¯æ›´æ–°ãƒ—ãƒ¬ã‚¤ã®æ¬¡ã®éƒ¨åˆ†ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:253 msgid "The ``serial`` keyword forces the play to be executed in 'batches'. Each batch counts as a full play with a subselection of hosts. This has some consequences on play behavior. For example, if all hosts in a batch fails, the play fails, which in turn fails the entire run. You should consider this when combining with ``max_fail_percentage``." msgstr "``serial`` キーワードを使用ã™ã‚‹ã¨ã€ãƒ—レイãŒã€Œãƒãƒƒãƒã€ã§å®Ÿè¡Œã•れã¾ã™ã€‚å„ãƒãƒƒãƒã¯ã€ãƒ›ã‚¹ãƒˆã®ã‚µãƒ–セレクションを使用ã—ãŸå®Œå…¨ãªãƒ—レイã¨ã—ã¦ã‚«ã‚¦ãƒ³ãƒˆã•れã¾ã™ã€‚ã“れã¯ã€ãƒ—レイã®å‹•作ã«ã„ãã¤ã‹ã®å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒãƒƒãƒå†…ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆãŒå¤±æ•—ã—ãŸå ´åˆã€ãã®ãƒ—レイã¯å¤±æ•—ã—ã€ãã®çµæžœã€å…¨ä½“ã®å®Ÿè¡Œã‚‚失敗ã—ã¾ã™ã€‚``max_fail_percentage`` ã¨çµ„ã¿åˆã‚ã›ã‚‹å ´åˆã¯ã€ã“ã®ç‚¹ã‚’考慮ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:256 msgid "The ``pre_tasks`` keyword just lets you list tasks to run before the roles are called. This will make more sense in a minute. If you look at the names of these tasks, you can see that we are disabling Nagios alerts and then removing the webserver that we are currently updating from the HAProxy load balancing pool." msgstr "``pre_tasks`` キーワードã§ã¯ã€ãƒ­ãƒ¼ãƒ«ãŒå‘¼ã³å‡ºã•れるå‰ã«å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’リストアップã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã™ãã«æ„味をãªã—ã¾ã™ã€‚ã“れらã®ã‚¿ã‚¹ã‚¯ã®åå‰ã‚’見るã¨ã€Nagios ã®ã‚¢ãƒ©ãƒ¼ãƒˆã‚’無効ã«ã—ã¦ã€ç¾åœ¨æ›´æ–°ä¸­ã® Web サーãƒãƒ¼ã‚’ HAProxy è² è·åˆ†æ•£ãƒ—ールã‹ã‚‰å‰Šé™¤ã—ã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:258 msgid "The ``delegate_to`` and ``loop`` arguments, used together, cause Ansible to loop over each monitoring server and load balancer, and perform that operation (delegate that operation) on the monitoring or load balancing server, \"on behalf\" of the webserver. In programming terms, the outer loop is the list of web servers, and the inner loop is the list of monitoring servers." msgstr "``delegate_to`` 引数ãŠã‚ˆã³ ``loop`` 引数を一緒ã«ä½¿ç”¨ã™ã‚‹ã¨ã€Ansible ãŒå„監視サーãƒãƒ¼ã¨ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’ループã—ã€Web サーãƒãƒ¼ã«ã€Œä»£ã‚ã£ã¦ã€ç›£è¦–サーãƒãƒ¼ã¾ãŸã¯è² è·åˆ†æ•£ã‚µãƒ¼ãƒãƒ¼ã§ãã®æ“作を実行 (æ“作を委譲) ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚プログラミング用語ã§ã¯ã€å¤–部ループ㯠Web サーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã€å†…部ループã¯ç›£è¦–サーãƒãƒ¼ã®ãƒªã‚¹ãƒˆã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:260 msgid "Note that the HAProxy step looks a little complicated. We're using HAProxy in this example because it's freely available, though if you have (for instance) an F5 or Netscaler in your infrastructure (or maybe you have an AWS Elastic IP setup?), you can use Ansible modules to communicate with them instead. You might also wish to use other monitoring modules instead of nagios, but this just shows the main goal of the 'pre tasks' section -- take the server out of monitoring, and take it out of rotation." msgstr "HAProxy ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯å°‘ã—複雑ã«è¦‹ãˆã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã“ã®ä¾‹ã§ã¯ HAProxy を使用ã—ã¦ã„ã¾ã™ãŒã€ã“れã¯è‡ªç”±ã«åˆ©ç”¨ã§ãã‚‹ã‹ã‚‰ã§ã™ã€‚ã—ã‹ã—ã€(ãŸã¨ãˆã°) F5 ã‚„ Netscaler ãŒã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã«ã‚ã‚‹å ´åˆ (ã‚ã‚‹ã„㯠AWS ã® Elastic IP を設定ã—ã¦ã„ã‚‹å ´åˆ) ã¯ã€ä»£ã‚り㫠Ansible モジュールを使用ã—ã¦ãれらã¨é€šä¿¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚nagios ã®ä»£ã‚りã«ä»–ã®ç›£è¦–モジュールを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã“れã¯ã€Œäº‹å‰ã‚¿ã‚¹ã‚¯ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸»ãªç›®çš„ã€ã¤ã¾ã‚Šã€ã‚µãƒ¼ãƒãƒ¼ã‚’監視ã‹ã‚‰å¤–ã—ã€ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰å¤–ã™ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:262 msgid "The next step simply re-applies the proper roles to the web servers. This will cause any configuration management declarations in ``web`` and ``base-apache`` roles to be applied to the web servers, including an update of the web application code itself. We don't have to do it this way--we could instead just purely update the web application, but this is a good example of how roles can be used to reuse tasks:" msgstr "æ¬¡ã®æ‰‹é †ã§ã¯ã€é©åˆ‡ãªãƒ­ãƒ¼ãƒ«ã‚’ Web サーãƒãƒ¼ã«å†é©ç”¨ã™ã‚‹ã ã‘ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€``web`` 㨠``base-apache`` ã®ãƒ­ãƒ¼ãƒ«ã«ãŠã‘ã‚‹æ§‹æˆç®¡ç†å®£è¨€ãŒ Web サーãƒãƒ¼ã«é©ç”¨ã•れã€Web ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚³ãƒ¼ãƒ‰è‡ªä½“ã®æ›´æ–°ã‚‚行ã‚れã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã—ãªãã¦ã‚‚ã€ç´”粋㫠Web アプリケーションを更新ã™ã‚‹ã ã‘ã§ã‚‚よã„ã®ã§ã™ãŒã€ã“れã¯ãƒ­ãƒ¼ãƒ«ã‚’使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’å†åˆ©ç”¨ã™ã‚‹æ–¹æ³•ã®ã‚ˆã„例ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:271 msgid "Finally, in the ``post_tasks`` section, we reverse the changes to the Nagios configuration and put the web server back in the load balancing pool:" msgstr "最後ã«ã€``post_tasks`` セクションã§ã€Nuppet 設定ã¸ã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã—ã€Web サーãƒãƒ¼ã‚’è² è·åˆ†æ•£ãƒ—ãƒ¼ãƒ«ã«æˆ»ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:289 msgid "Again, if you were using a Netscaler or F5 or Elastic Load Balancer, you would just substitute in the appropriate modules instead." msgstr "NetScalerã€F5ã€ã¾ãŸã¯ Elastic Load Balancer を使用ã™ã‚‹å ´åˆã¯ã€ä»£ã‚りã«é©åˆ‡ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ç½®ãæ›ãˆã¦ãã ã•ã„。" #: ../../rst/user_guide/guide_rolling_upgrade.rst:294 msgid "Managing other load balancers" msgstr "ãã®ä»–ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã®ç®¡ç†" #: ../../rst/user_guide/guide_rolling_upgrade.rst:296 msgid "In this example, we use the simple HAProxy load balancer to front-end the web servers. It's easy to configure and easy to manage. As we have mentioned, Ansible has support for a variety of other load balancers like Citrix NetScaler, F5 BigIP, Amazon Elastic Load Balancers, and more. See the :ref:`working_with_modules` documentation for more information." msgstr "ã“ã®ä¾‹ã§ã¯ã€ã‚·ãƒ³ãƒ—ル㪠HAProxy ロードãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’ Web サーãƒãƒ¼ã®ãƒ•ロントエンドã«ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚設定ãŒç°¡å˜ã§ã€ç®¡ç†ã‚‚容易ã§ã™ã€‚ã“れã¾ã§è¿°ã¹ã¦ããŸã‚ˆã†ã«ã€Ansible 㯠Citrix NetScalerã€F5 BigIPã€Amazon Elastic Load Balancer ãªã©ã€ä»–ã®ã•ã¾ã–ã¾ãªãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`working_with_modules`ã€ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/guide_rolling_upgrade.rst:298 msgid "For other load balancers, you may need to send shell commands to them (like we do for HAProxy above), or call an API, if your load balancer exposes one. For the load balancers for which Ansible has modules, you may want to run them as a ``local_action`` if they contact an API. You can read more about local actions in the :ref:`playbooks_delegation` section. Should you develop anything interesting for some hardware where there is not a module, it might make for a good contribution!" msgstr "ãã®ä»–ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã®å ´åˆã¯ã€ã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ä¿¡ã™ã‚‹ã‹ (上記㮠HAProxy ã®å ´åˆã¨åŒæ§˜)ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ãŒ API を公開ã—ã¦ã„ã‚‹å ´åˆã¯ API を呼ã³å‡ºã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。Ansible ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒç”¨æ„ã•れã¦ã„るロードãƒãƒ©ãƒ³ã‚µãƒ¼ã«ã¤ã„ã¦ã¯ã€API を呼ã³å‡ºã™å ´åˆã«ã¯ã€``local_action`` ã¨ã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ローカルアクションã«ã¤ã„ã¦ã¯ã€:ref:`playbooks_delegation` セクションã§è©³ã—ã説明ã—ã¦ã„ã¾ã™ã€‚モジュールãŒãªã„ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ä½•ã‹é¢ç™½ã„ã‚‚ã®ã‚’開発ã—ãŸã‚‰ã€è‰¯ã„貢献ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/user_guide/guide_rolling_upgrade.rst:303 msgid "Continuous delivery end-to-end" msgstr "継続的デリãƒãƒªãƒ¼ã®ã‚¨ãƒ³ãƒ‰ãƒ„ーエンド" #: ../../rst/user_guide/guide_rolling_upgrade.rst:305 msgid "Now that you have an automated way to deploy updates to your application, how do you tie it all together? A lot of organizations use a continuous integration tool like `Jenkins `_ or `Atlassian Bamboo `_ to tie the development, test, release, and deploy steps together. You may also want to use a tool like `Gerrit `_ to add a code review step to commits to either the application code itself, or to your Ansible playbooks, or both." msgstr "ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ›´æ–°ã‚’自動的ã«ãƒ‡ãƒ—ロイã™ã‚‹æ–¹æ³•ãŒç¢ºç«‹ã•れã¾ã—ãŸãŒã€ã“れらをã©ã®ã‚ˆã†ã«ã¾ã¨ã‚ãŸã‚‰ã‚ˆã„ã§ã—ょã†ã‹ã€‚多ãã®çµ„ç¹”ã§ã¯ã€`Jenkins `_ ã‚„ `Atlassian Bamboo `_ ã®ã‚ˆã†ãªç¶™ç¶šçš„çµ±åˆãƒ„ールを使用ã—ã¦ã€é–‹ç™ºã€ãƒ†ã‚¹ãƒˆã€ãƒªãƒªãƒ¼ã‚¹ã€ãƒ‡ãƒ—ロイã®å„ステップを関連付ã‘ã¦ã„ã¾ã™ã€‚ã¾ãŸã€`Gerrit `_ ã®ã‚ˆã†ãªãƒ„ールを使用ã—ã¦ã€ã‚¢ãƒ—リケーションコード自体ã‹ã€Ansible Playbook ã®ã„ãšã‚Œã‹ã€ã¾ãŸã¯ä¸¡æ–¹ã®ã‚³ãƒŸãƒƒãƒˆã«ã‚³ãƒ¼ãƒ‰ãƒ¬ãƒ“ューã®ã‚¹ãƒ†ãƒƒãƒ—を追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:307 msgid "Depending on your environment, you might be deploying continuously to a test environment, running an integration test battery against that environment, and then deploying automatically into production. Or you could keep it simple and just use the rolling-update for on-demand deployment into test or production specifically. This is all up to you." msgstr "環境ã«ã‚ˆã£ã¦ã¯ã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã«ç¶™ç¶šçš„ã«ãƒ‡ãƒ—ロイã—ã€ãã®ç’°å¢ƒã«å¯¾ã—ã¦çµ±åˆãƒ†ã‚¹ãƒˆãƒãƒƒãƒ†ãƒªãƒ¼ã‚’実行ã—ã¦ã‹ã‚‰ã€å®Ÿç¨¼åƒç’°å¢ƒã«è‡ªå‹•çš„ã«ãƒ‡ãƒ—ロイã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã¾ãŸã¯ã€ã‚·ãƒ³ãƒ—ルã«ä¿ã¡ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートを使用ã—ã¦ã€ç‰¹ã«ãƒ†ã‚¹ãƒˆç’°å¢ƒã¾ãŸã¯å®Ÿç¨¼åƒç’°å¢ƒã«ã‚ªãƒ³ãƒ‡ãƒžãƒ³ãƒ‰ã§ãƒ‡ãƒ—ロイã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れã¯ã™ã¹ã¦ã‚ãªãŸæ¬¡ç¬¬ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:309 msgid "For integration with Continuous Integration systems, you can easily trigger playbook runs using the ``ansible-playbook`` command line tool, or, if you're using AWX, the ``tower-cli`` command or the built-in REST API. (The tower-cli command 'joblaunch' will spawn a remote job over the REST API and is pretty slick)." msgstr "継続的統åˆã‚·ã‚¹ãƒ†ãƒ ã¨ã®é€£æºã§ã¯ã€``ansible-playbook`` コマンドラインツール (AWX を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€``tower-cli`` コマンドや組ã¿è¾¼ã¿ REST API) を使用ã—ã¦ç°¡å˜ã« Playbook ã®å®Ÿè¡Œã‚’トリガーã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (tower-cli コマンドã®ã€Œjoblaunchã€ã¯ã€REST API を介ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆã‚¸ãƒ§ãƒ–を生æˆã—ã€éžå¸¸ã«æ´—ç·´ã•れã¦ã„ã¾ã™)。" #: ../../rst/user_guide/guide_rolling_upgrade.rst:311 msgid "This should give you a good idea of how to structure a multi-tier application with Ansible, and orchestrate operations upon that app, with the eventual goal of continuous delivery to your customers. You could extend the idea of the rolling upgrade to lots of different parts of the app; maybe add front-end web servers along with application servers, for instance, or replace the SQL database with something like MongoDB or Riak. Ansible gives you the capability to easily manage complicated environments and automate common operations." msgstr "ã“ã“ã§ã¯ã€Ansible を使用ã—ã¦å¤šå±¤ã‚¢ãƒ—リケーションを構築ã—ã€ãã®ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®æ“作を調整ã—ã¦ã€æœ€çµ‚çš„ã«é¡§å®¢ã«ç¶™ç¶šçš„ã«æä¾›ã™ã‚‹æ–¹æ³•を紹介ã—ã¦ã„ã¾ã™ã€‚ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—ã‚°ãƒ¬ãƒ¼ãƒ‰ã®æ¦‚念ã¯ã€ã‚¢ãƒ—リケーションã®ã•ã¾ã–ã¾ãªéƒ¨åˆ†ã«åºƒã’ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¢ãƒ—リケーションサーãƒãƒ¼ã¨ä¸€ç·’ã«ãƒ•ロントエンド㮠Web サーãƒãƒ¼ã‚’追加ã—ãŸã‚Šã€SQL データベースを MongoDB ã‚„ Riak ã®ã‚ˆã†ãªã‚‚ã®ã«ç½®ãæ›ãˆãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€è¤‡é›‘ãªç’°å¢ƒã‚’ç°¡å˜ã«ç®¡ç†ã—ã€ä¸€èˆ¬çš„ãªæ“作を自動化ã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:315 msgid "`lamp_haproxy example `_" msgstr "`lamp_haproxy example `_" #: ../../rst/user_guide/guide_rolling_upgrade.rst:316 msgid "The lamp_haproxy example discussed here." msgstr "ã“ã“ã§èª¬æ˜Žã—㟠lamp_haproxy ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/guide_rolling_upgrade.rst:317 #: ../../rst/user_guide/intro_adhoc.rst:207 #: ../../rst/user_guide/intro_bsd.rst:99 #: ../../rst/user_guide/intro_getting_started.rst:189 #: ../../rst/user_guide/intro_inventory.rst:786 #: ../../rst/user_guide/intro_patterns.rst:196 #: ../../rst/user_guide/modules_intro.rst:43 #: ../../rst/user_guide/modules_support.rst:65 #: ../../rst/user_guide/playbooks_best_practices.rst:156 #: ../../rst/user_guide/playbooks_conditionals.rst:497 #: ../../rst/user_guide/playbooks_lookups.rst:26 #: ../../rst/user_guide/playbooks_reuse.rst:206 #: ../../rst/user_guide/playbooks_reuse_includes.rst:15 #: ../../rst/user_guide/playbooks_reuse_roles.rst:604 #: ../../rst/user_guide/playbooks_roles.rst:15 #: ../../rst/user_guide/sample_setup.rst:274 msgid ":ref:`working_with_playbooks`" msgstr ":ref:`working_with_playbooks`" #: ../../rst/user_guide/guide_rolling_upgrade.rst:318 #: ../../rst/user_guide/playbooks_async.rst:171 #: ../../rst/user_guide/playbooks_blocks.rst:183 #: ../../rst/user_guide/playbooks_conditionals.rst:498 #: ../../rst/user_guide/playbooks_debugger.rst:325 #: ../../rst/user_guide/playbooks_delegation.rst:150 #: ../../rst/user_guide/playbooks_environment.rst:137 #: ../../rst/user_guide/playbooks_error_handling.rst:235 #: ../../rst/user_guide/playbooks_filters.rst:1838 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:726 #: ../../rst/user_guide/playbooks_lookups.rst:27 #: ../../rst/user_guide/playbooks_loops.rst:435 #: ../../rst/user_guide/playbooks_prompts.rst:108 #: ../../rst/user_guide/playbooks_startnstep.rst:38 #: ../../rst/user_guide/playbooks_strategies.rst:217 #: ../../rst/user_guide/playbooks_tags.rst:426 #: ../../rst/user_guide/playbooks_templating.rst:47 #: ../../rst/user_guide/playbooks_tests.rst:389 #: ../../rst/user_guide/playbooks_variables.rst:450 #: ../../rst/user_guide/windows_dsc.rst:497 #: ../../rst/user_guide/windows_faq.rst:245 #: ../../rst/user_guide/windows_setup.rst:575 #: ../../rst/user_guide/windows_usage.rst:505 #: ../../rst/user_guide/windows_winrm.rst:906 msgid "An introduction to playbooks" msgstr "Playbook ã®æ¦‚è¦" #: ../../rst/user_guide/guide_rolling_upgrade.rst:319 #: ../../rst/user_guide/playbooks_blocks.rst:184 #: ../../rst/user_guide/playbooks_conditionals.rst:499 #: ../../rst/user_guide/playbooks_filters.rst:1845 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:735 #: ../../rst/user_guide/playbooks_loops.rst:436 #: ../../rst/user_guide/playbooks_strategies.rst:220 #: ../../rst/user_guide/playbooks_tags.rst:427 #: ../../rst/user_guide/playbooks_templating.rst:52 #: ../../rst/user_guide/playbooks_tests.rst:396 #: ../../rst/user_guide/playbooks_variables.rst:457 msgid ":ref:`playbooks_reuse_roles`" msgstr ":ref:`playbooks_reuse_roles`" #: ../../rst/user_guide/guide_rolling_upgrade.rst:320 msgid "An introduction to playbook roles" msgstr "Playbook ã®ãƒ­ãƒ¼ãƒ«ã®æ¦‚è¦" #: ../../rst/user_guide/guide_rolling_upgrade.rst:321 #: ../../rst/user_guide/playbooks_advanced_syntax.rst:105 #: ../../rst/user_guide/playbooks_conditionals.rst:503 #: ../../rst/user_guide/playbooks_error_handling.rst:240 #: ../../rst/user_guide/playbooks_filters.rst:1841 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:731 #: ../../rst/user_guide/playbooks_lookups.rst:30 #: ../../rst/user_guide/playbooks_loops.rst:442 #: ../../rst/user_guide/playbooks_prompts.rst:111 #: ../../rst/user_guide/playbooks_reuse.rst:208 #: ../../rst/user_guide/playbooks_reuse_includes.rst:19 #: ../../rst/user_guide/playbooks_reuse_roles.rst:608 #: ../../rst/user_guide/playbooks_tests.rst:392 msgid ":ref:`playbooks_variables`" msgstr ":ref:`playbooks_variables`" #: ../../rst/user_guide/guide_rolling_upgrade.rst:322 msgid "An introduction to Ansible variables" msgstr "Ansible å¤‰æ•°ã®æ¦‚è¦" #: ../../rst/user_guide/guide_rolling_upgrade.rst:323 msgid "`Ansible.com: Continuous Delivery `_" msgstr "`Ansible.com: Continuous Delivery `_" #: ../../rst/user_guide/guide_rolling_upgrade.rst:324 msgid "An introduction to Continuous Delivery with Ansible" msgstr "Ansible を使用ã—ãŸç¶™ç¶šçš„デリãƒãƒªãƒ¼ã®æ¦‚è¦" #: ../../rst/user_guide/index.rst:5 msgid "User Guide" msgstr "ユーザーガイド" #: ../../rst/user_guide/index.rst:9 msgid "**Making Open Source More Inclusive**" msgstr "**多様性をå—ã‘入れるオープンソースã®å¼·åŒ–**" #: ../../rst/user_guide/index.rst:11 msgid "Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_." msgstr "Red Hat ã§ã¯ã€ã‚³ãƒ¼ãƒ‰ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€Web プロパティーã«ãŠã‘ã‚‹é…æ…®ã«æ¬ ã‘る用語ã®ç½®ãæ›ãˆã«å–り組んã§ã„ã¾ã™ã€‚ã¾ãšã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ (master)ã€ã‚¹ãƒ¬ãƒ¼ãƒ– (slave)ã€ãƒ–ラックリスト (blacklist)ã€ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆ (whitelist) ã® 4 ã¤ã®ç”¨èªžã®ç½®ãæ›ãˆã‹ã‚‰å§‹ã‚ã¾ã™ã€‚å•題ã®ã‚る用語を見ã¤ã‘ãŸå ´åˆã¯ã€å•題を作æˆã™ã‚‹ã‹ã€ãƒ—ãƒ«è¦æ±‚を作æˆã—ã¦ãã ã•ã„。詳細ã¯ã€`弊社 ã® CTOã€Chris Wright ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/index.rst:13 msgid "Welcome to the Ansible User Guide! This guide covers how to work with Ansible, including using the command line, working with inventory, interacting with data, writing tasks, plays, and playbooks; executing playbooks, and reference materials. This page outlines the most common situations and questions that bring readers to this section. If you prefer a traditional table of contents, you can find one at the bottom of the page." msgstr "Ansible ユーザーガイドã¸ã‚ˆã†ã“ã! 本ガイドã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã®ä½¿ç”¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ“作ã€ãƒ‡ãƒ¼ã‚¿ã®æ“作ã€ã‚¿ã‚¹ã‚¯ã€ãƒ—レイã€Playbook ã®ä½œæˆã€Playbook 実行ã€å‚考資料ãªã©ã€Ansible ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€èª­è€…ãŒã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’è¨ªã‚Œã‚‹æ™‚ã«æŠ±ãæœ€ã‚‚一般的ãªçжæ³ãŠã‚ˆã³è³ªå•ã®æ¦‚è¦ã‚’説明ã—ã¾ã™ã€‚従æ¥ã®ç›®æ¬¡ã‚’ã”å¸Œæœ›ã®æ–¹ã¯ã€ãƒšãƒ¼ã‚¸ä¸‹éƒ¨ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/index.rst:16 msgid "Getting started" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/user_guide/index.rst:18 msgid "I'd like an overview of how Ansible works. Where can I find:" msgstr "Ansible ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã®æ¦‚è¦ã‚’知りãŸã„ã§ã™ã€‚ã©ã“ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:20 msgid "a :ref:`quick video overview `" msgstr ":ref:`ã‚¯ã‚¤ãƒƒã‚¯ãƒ“ãƒ‡ã‚ªã®æ¦‚è¦ `" #: ../../rst/user_guide/index.rst:21 msgid "a :ref:`text introduction `" msgstr ":ref:`テキストã®ç´¹ä»‹ `" #: ../../rst/user_guide/index.rst:23 msgid "I'm ready to learn about Ansible. What :ref:`basic_concepts` do I need to learn?" msgstr "Ansible ã«é–¢ã™ã‚‹æº–å‚™ãŒæ•´ã£ã¦ã„ã¾ã™ã€‚ã©ã® :ref:`basic_concepts` ã‚’å­¦ã¶å¿…è¦ãŒã‚りã¾ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:24 msgid "I want to use Ansible without writing a playbook. How do I use :ref:`ad hoc commands `?" msgstr "Playbook を作æˆã›ãšã« Ansible を使用ã™ã‚‹å ´åˆã¯ã€:ref:`アドホックコマンド ` ã‚’ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:27 msgid "Writing tasks, plays, and playbooks" msgstr "タスクã€ãƒ—レイã€ãŠã‚ˆã³ Playbook ã®ä½œæˆ" #: ../../rst/user_guide/index.rst:29 msgid "I'm writing my first playbook. What should I :ref:`know before I begin `?" msgstr "最åˆã® Playbook を作æˆã—ã¾ã™ã€‚:ref:`é–‹å§‹ã™ã‚‹å‰ã«å­¦ã¶ ` ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:30 msgid "I have a specific use case for a task or play:" msgstr "タスクã¾ãŸã¯ãƒ—レイã«ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/index.rst:32 msgid "Executing tasks with elevated privileges or as a different user with :ref:`become `" msgstr ":ref:`become ` を使用ã—ã¦ã€æ¨©é™ãŒæ˜‡æ ¼ã•れãŸã‚¿ã‚¹ã‚¯ã€ã¾ãŸã¯åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹" #: ../../rst/user_guide/index.rst:33 msgid "Repeating a task once for each item in a list with :ref:`loops `" msgstr ":ref:`ループ ` を使用ã—ã¦ãƒªã‚¹ãƒˆå†…ã®é …ç›®ã”ã¨ã«ã‚¿ã‚¹ã‚¯ã‚’ 1 度繰り返ã™" #: ../../rst/user_guide/index.rst:34 msgid "Executing tasks on a different machine with :ref:`delegation `" msgstr ":ref:`delegation ` を使用ã—ã¦åˆ¥ã®ãƒžã‚·ãƒ³ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹" #: ../../rst/user_guide/index.rst:35 msgid "Running tasks only when certain conditions apply with :ref:`conditionals ` and evaluating conditions with :ref:`tests `" msgstr ":ref:`conditionals ` ã§ç‰¹å®šã®æ¡ä»¶ãŒé©ç”¨ã•れãŸå ´åˆã«ã®ã¿ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€:ref:`tests ` ã§æ¡ä»¶ã‚’評価ã™ã‚‹" #: ../../rst/user_guide/index.rst:36 msgid "Grouping a set of tasks together with :ref:`blocks `" msgstr ":ref:`blocks ` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã®ã‚»ãƒƒãƒˆã‚’ã¾ã¨ã‚ã‚‹" #: ../../rst/user_guide/index.rst:37 msgid "Running tasks only when something has changed with :ref:`handlers `" msgstr ":ref:`handlers ` を使用ã—ã¦å¤‰æ›´ãŒã‚ã£ãŸå ´åˆã«é™ã‚Šã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹" #: ../../rst/user_guide/index.rst:38 msgid "Changing the way Ansible :ref:`handles failures `" msgstr "Ansible ㌠:ref:`失敗を処ç†ã™ã‚‹ ` 方法を変更ã™ã‚‹" #: ../../rst/user_guide/index.rst:39 msgid "Setting remote :ref:`environment values `" msgstr "リモート㮠:ref:`環境値 ` を設定ã™ã‚‹" #: ../../rst/user_guide/index.rst:41 msgid "I want to take advantage of the power of re-usable Ansible artifacts. How do I create re-usable :ref:`files ` and :ref:`roles `?" msgstr "å†åˆ©ç”¨å¯èƒ½ãª Ansible アーティファクトã®é›»æºã‚’活用ã™ã‚‹ã«ã¯ã€å†åˆ©ç”¨å¯èƒ½ãª :ref:`files ` ãŠã‚ˆã³ :ref:`roles ` ã‚’ã©ã®ã‚ˆã†ã«ä½œæˆã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:42 msgid "I need to incorporate one file or playbook inside another. What is the difference between :ref:`including and importing `?" msgstr "ã‚るファイルã¾ãŸã¯ Playbook を別ã®ãƒ•ァイルã«çµ„ã¿è¾¼ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚:ref:`インクルードã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆ ` ã®é•ã„ã¯ä½•ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:43 msgid "I want to run selected parts of my playbook. How do I add and use :ref:`tags `?" msgstr "Playbook ã®é¸æŠžã—ãŸéƒ¨åˆ†ã‚’実行ã™ã‚‹å ´åˆã¯ã€:ref:`ã‚¿ã‚° ` ã‚’ã©ã®ã‚ˆã†ã«è¿½åŠ ã—ã¦ä½¿ç”¨ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:46 msgid "Working with inventory" msgstr "インベントリーã®ä½¿ç”¨" #: ../../rst/user_guide/index.rst:48 msgid "I have a list of servers and devices I want to automate. How do I create :ref:`inventory ` to track them?" msgstr "自動化ã™ã‚‹ã‚µãƒ¼ãƒãƒ¼ãŠã‚ˆã³ãƒ‡ãƒã‚¤ã‚¹ã®ä¸€è¦§ãŒã‚りã¾ã™ã€‚:ref:`インベントリー ` を作æˆã—ã¦è¿½è·¡ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:49 msgid "I use cloud services and constantly have servers and devices starting and stopping. How do I track them using :ref:`dynamic inventory `?" msgstr "クラウドサービスを使用ã—ã€ã‚µãƒ¼ãƒãƒ¼ãŠã‚ˆã³ãƒ‡ãƒã‚¤ã‚¹ã®é–‹å§‹ãŠã‚ˆã³åœæ­¢ãŒå¸¸ã«ã‚りã¾ã™ã€‚:ref:`動的インベントリー ` を使用ã—ã¦ã“れらを追跡ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:50 msgid "I want to automate specific sub-sets of my inventory. How do I use :ref:`patterns `?" msgstr "インベントリーã®ç‰¹å®šã®ã‚µãƒ–セットを自動化ã—ãŸã„ã§ã™ã€‚:ref:`パターン ` ã‚’ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:53 msgid "Interacting with data" msgstr "データã¨ã®å¯¾è©±" #: ../../rst/user_guide/index.rst:55 msgid "I want to use a single playbook against multiple systems with different attributes. How do I use :ref:`variables ` to handle the differences?" msgstr "ç•°ãªã‚‹å±žæ€§ã‚’æŒã¤è¤‡æ•°ã®ã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã—㦠Playbook ã‚’ 1 ã¤ä½¿ç”¨ã—ã¾ã™ã€‚:ref:`変数 ` を使用ã—ã¦é•ã„を処ç†ã™ã‚‹ã«ã¯ã©ã†ã—ãŸã‚‰ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:56 msgid "I want to retrieve data about my systems. How do I access :ref:`Ansible facts `?" msgstr "システムã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ãŸã„ã§ã™ã€‚:ref:`Ansible ファクト ` ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:57 msgid "I need to access sensitive data like passwords with Ansible. How can I protect that data with :ref:`Ansible vault `?" msgstr "Ansible ã§ãƒ‘スワードãªã©ã®æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚:ref:`Ansible vault ` ã§ãã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿è­·ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:58 msgid "I want to change the data I have, so I can use it in a task. How do I use :ref:`filters ` to transform my data?" msgstr "データã«å¤‰æ›´ã‚’加ãˆã¦ã€ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã§ãるよã†ã«ã—ã¾ã™ã€‚:ref:`フィルター ` を使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’変æ›ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:59 msgid "I need to retrieve data from an external datastore. How do I use :ref:`lookups ` to access databases and APIs?" msgstr "外部データストアã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚:ref:`検索 ` を使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŠã‚ˆã³ API ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:60 msgid "I want to ask playbook users to supply data. How do I get user input with :ref:`prompts `?" msgstr "Playbook ユーザーã«ãƒ‡ãƒ¼ã‚¿ã‚’æä¾›ã™ã‚‹ã‚ˆã†ä¾é ¼ã—ãŸã„ã§ã™ã€‚:ref:`プロンプト ` ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã‚’å–å¾—ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:61 msgid "I use certain modules frequently. How do I streamline my inventory and playbooks by :ref:`setting default values for module parameters `?" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é »ç¹ã«ä½¿ç”¨ã—ã¾ã™ã€‚:ref:`モジュールパラメーターã«ãƒ‡ãƒ•ォルト値を設定 ` ã«ã‚ˆã‚‹ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ Playbook をストリーミングã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°è‰¯ã„ã§ã™ã‹ã€‚" #: ../../rst/user_guide/index.rst:64 msgid "Executing playbooks" msgstr "Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/index.rst:66 msgid "Once your playbook is ready to run, you may need to use these topics:" msgstr "Playbook ã®å®Ÿè¡Œæº–å‚™ãŒã§ããŸã‚‰ã€ä»¥ä¸‹ã®ãƒˆãƒ”ックを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/index.rst:68 msgid "Executing \"dry run\" playbooks with :ref:`check mode and diff `" msgstr ":ref:`確èªãƒ¢ãƒ¼ãƒ‰ãŠã‚ˆã³å·®ç•°ãƒ¢ãƒ¼ãƒ‰ ` ã§ã€Œãƒ‰ãƒ©ã‚¤ãƒ©ãƒ³ã€Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/index.rst:69 msgid "Running playbooks while troubleshooting with :ref:`start and step `" msgstr ":ref:`start ãŠã‚ˆã³ step ` を使用ã—ãŸãƒˆãƒ©ãƒ–ルシューティング時㮠Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/index.rst:70 msgid "Correcting tasks during execution with the :ref:`Ansible debugger `" msgstr ":ref:`Ansible デãƒãƒƒã‚¬â€• ` ã§å®Ÿè¡Œæ™‚ã®ã‚¿ã‚¹ã‚¯ã®ä¿®æ­£" #: ../../rst/user_guide/index.rst:71 msgid "Controlling how my playbook executes with :ref:`strategies and more `" msgstr ":ref:`ストラテジーãªã© ` を使用ã—㟠Playbook ã®å®Ÿè¡Œæ–¹æ³•ã®åˆ¶å¾¡" #: ../../rst/user_guide/index.rst:72 msgid "Running tasks, plays, and playbooks :ref:`asynchronously `" msgstr "タスクã€ãƒ—レイã€ãŠã‚ˆã³ Playbook ã‚’ :ref:`éžåŒæœŸã« ` 実行" #: ../../rst/user_guide/index.rst:75 msgid "Advanced features and reference" msgstr "é«˜åº¦ãªæ©Ÿèƒ½ãŠã‚ˆã³å‚ç…§" #: ../../rst/user_guide/index.rst:77 msgid "Using :ref:`advanced syntax `" msgstr ":ref:`é«˜åº¦ãªæ§‹æ–‡ ` ã®ä½¿ç”¨" #: ../../rst/user_guide/index.rst:78 msgid "Manipulating :ref:`complex data `" msgstr ":ref:`複雑ãªãƒ‡ãƒ¼ã‚¿ ` ã®å‡¦ç†" #: ../../rst/user_guide/index.rst:79 msgid "Using :ref:`plugins `" msgstr ":ref:`プラグイン ` ã®ä½¿ç”¨" #: ../../rst/user_guide/index.rst:80 msgid "Using :ref:`playbook keywords `" msgstr ":ref:`Playbook キーワード ` ã®ä½¿ç”¨" #: ../../rst/user_guide/index.rst:81 msgid "Using :ref:`command-line tools `" msgstr ":ref:`コマンドラインツール ` ã®ä½¿ç”¨" #: ../../rst/user_guide/index.rst:82 msgid "Rejecting :ref:`specific modules `" msgstr ":ref:`特定モジュール ` ã®æ‹’å¦" #: ../../rst/user_guide/index.rst:83 msgid "Module :ref:`maintenance `" msgstr "モジュール㮠:ref:`ä¿å®ˆ `" #: ../../rst/user_guide/index.rst:86 msgid "Traditional Table of Contents" msgstr "従æ¥ã®ç›®æ¬¡" #: ../../rst/user_guide/index.rst:88 msgid "If you prefer to read the entire User Guide, here's a list of the pages in order:" msgstr "本ユーザーガイドをã™ã¹ã¦èª­ã‚€å ´åˆã¯ã€ä»¥ä¸‹ã«ç¤ºã™é †ç•ªã§ãƒšãƒ¼ã‚¸ã‚’表示ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro.rst:4 msgid "Introduction" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/user_guide/intro.rst:6 msgid "Before we start exploring the main components of Ansible -- playbooks, configuration management, deployment, and orchestration -- we'll learn how to get Ansible installed and cover some basic concepts. We'll also go over how to execute ad hoc commands in parallel across your nodes using /usr/bin/ansible, and see what modules are available in Ansible's core (you can also write your own, which is covered later)." msgstr "ã“ã“ã§ã¯ã€Ansible ã®ä¸»ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§ã‚ã‚‹ Playbookã€æ§‹æˆç®¡ç†ã€ãƒ‡ãƒ—ロイメントã€ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ãŒã€ãã®å‰ã«ã€Ansible ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã¨åŸºæœ¬çš„ãªæ¦‚念ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ã¾ãŸã€/usr/bin/ansible を使用ã—ã¦ãƒŽãƒ¼ãƒ‰é–“ã§ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’並列実行ã™ã‚‹æ–¹æ³•ã‚„ã€Ansible ã®ã‚³ã‚¢ã«ã¯ã©ã®ã‚ˆã†ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒç”¨æ„ã•れã¦ã„ã‚‹ã‹ã‚’見ã¦ã„ãã¾ã™ (自分ã§ä½œæˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã“れã¯å¾Œã§èª¬æ˜Žã—ã¾ã™)。" #: ../../rst/user_guide/intro_adhoc.rst:5 msgid "Introduction to ad hoc commands" msgstr "ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã®æ¦‚è¦" #: ../../rst/user_guide/intro_adhoc.rst:7 msgid "An Ansible ad hoc command uses the `/usr/bin/ansible` command-line tool to automate a single task on one or more managed nodes. ad hoc commands are quick and easy, but they are not reusable. So why learn about ad hoc commands first? ad hoc commands demonstrate the simplicity and power of Ansible. The concepts you learn here will port over directly to the playbook language. Before reading and executing these examples, please read :ref:`intro_inventory`." msgstr "Ansible アドホックコマンドã¯ã€`/usr/bin/ansible` コマンドラインツールを使用ã—ã¦ã€1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ä¸Šã®å˜ä¸€ã‚¿ã‚¹ã‚¯ã‚’自動化ã—ã¾ã™ã€‚アドホックコマンドã¯ç´ æ—©ãç°¡å˜ã«å®Ÿè¡Œã§ãã¾ã™ãŒã€å†åˆ©ç”¨ã¯ã§ãã¾ã›ã‚“。ã§ã¯ã€ãªãœæœ€åˆã«ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’å­¦ã¶ã®ã‹ã¨ã„ã†ã¨ã€ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã¯ Ansible ã®ç°¡æ˜“ã•ã¨æ€§èƒ½ã‚’実証ã™ã‚‹ã‚‚ã®ã ã‹ã‚‰ã§ã™ã€‚ã“ã“ã§å­¦ã‚“ã æ¦‚念ã¯ã€ãã®ã¾ã¾ Playbook 言語ã«ç§»æ¤ã•れã¾ã™ã€‚ã“れらã®ä¾‹ã‚’読んã§å®Ÿè¡Œã™ã‚‹å‰ã«ã€ã€Œ:ref:`intro_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:13 msgid "Why use ad hoc commands?" msgstr "アドホックコマンドを使用ã™ã‚‹ç†ç”±" #: ../../rst/user_guide/intro_adhoc.rst:15 msgid "ad hoc commands are great for tasks you repeat rarely. For example, if you want to power off all the machines in your lab for Christmas vacation, you could execute a quick one-liner in Ansible without writing a playbook. An ad hoc command looks like this:" msgstr "アドホックコマンドã¯ã€ã‚ã£ãŸã«ç¹°ã‚Šè¿”ã•ãªã„ã‚¿ã‚¹ã‚¯ã«æœ€é©ã§ã™ã€‚ãŸã¨ãˆã°ã€ã‚¯ãƒªã‚¹ãƒžã‚¹ä¼‘暇中ã«ç ”究室ã®ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ã®é›»æºã‚’切りãŸã„å ´åˆã¯ã€Playbook を作æˆã›ãšã€Ansible ã§ 1 行ã®ç°¡å˜ãªã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:21 msgid "You can learn more about :ref:`patterns` and :ref:`modules` on other pages." msgstr "ä»–ã®ãƒšãƒ¼ã‚¸ã§ã€:ref:`パターン` ã‚„ :ref:`モジュール` ã®è©³ç´°ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:24 msgid "Use cases for ad hoc tasks" msgstr "アドホックタスクã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹" #: ../../rst/user_guide/intro_adhoc.rst:26 msgid "ad hoc tasks can be used to reboot servers, copy files, manage packages and users, and much more. You can use any Ansible module in an ad hoc task. ad hoc tasks, like playbooks, use a declarative model, calculating and executing the actions required to reach a specified final state. They achieve a form of idempotence by checking the current state before they begin and doing nothing unless the current state is different from the specified final state." msgstr "アドホックタスクã¯ã€ã‚µãƒ¼ãƒãƒ¼ã®å†èµ·å‹•ã€ãƒ•ァイルã®ã‚³ãƒ”ーã€ãƒ‘ッケージやユーザーã®ç®¡ç†ãªã©ã€ã•ã¾ã–ã¾ãªç”¨é€”ã«ä½¿ç”¨ã§ãã¾ã™ã€‚Ansible モジュールã¯ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã§ãã¾ã™ã€‚アドホックタスクã¯ã€Playbook ã¨åŒæ§˜ã«ã€å®£è¨€åž‹ãƒ¢ãƒ‡ãƒ«ã‚’使用ã—ã€æŒ‡å®šã•ã‚ŒãŸæœ€çµ‚状態ã«åˆ°é”ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’計算ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚アドホックタスクã¯ã€é–‹å§‹å‰ã«ç¾åœ¨ã®çŠ¶æ…‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€ç¾åœ¨ã®çŠ¶æ…‹ãŒæŒ‡å®šã•ã‚ŒãŸæœ€çµ‚状態ã¨ç•°ãªã‚‹å ´åˆã‚’除ã„ã¦ä½•ã‚‚ã—ãªã„ã“ã¨ã§ã€ä¸€ç¨®ã®å†ªç­‰æ€§ã‚’実ç¾ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:31 msgid "Rebooting servers" msgstr "サーãƒãƒ¼ã®å†èµ·å‹•" #: ../../rst/user_guide/intro_adhoc.rst:33 msgid "The default module for the ``ansible`` command-line utility is the :ref:`ansible.builtin.command module`. You can use an ad hoc task to call the command module and reboot all web servers in Atlanta, 10 at a time. Before Ansible can do this, you must have all servers in Atlanta listed in a group called [atlanta] in your inventory, and you must have working SSH credentials for each machine in that group. To reboot all the servers in the [atlanta] group:" msgstr "``ansible`` コマンドラインユーティリティーã®ãƒ‡ãƒ•ォルトモジュールã¯ã€:ref:`ansible.builtin.command モジュール` ã§ã™ã€‚アドホックタスクを使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã—ã€Atlanta ã®ã™ã¹ã¦ã® Web サーãƒã‚’一度㫠10 å°ãšã¤å†èµ·å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ãŒã“れを行ã†å‰ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã® [atlanta] ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã« Atlanta ã«ã‚ã‚‹ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ãŒè¨˜è¼‰ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã€ãã®ã‚°ãƒ«ãƒ¼ãƒ—内ã®å„マシン㮠SSH èªè¨¼æƒ…å ±ãŒæœ‰åйã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。[atlanta] グループã®ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã‚’å†èµ·å‹•ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:39 msgid "By default Ansible uses only 5 simultaneous processes. If you have more hosts than the value set for the fork count, Ansible will talk to them, but it will take a little longer. To reboot the [atlanta] servers with 10 parallel forks:" msgstr "デフォルトã§ã¯ã€Ansible 㯠5 ã¤ã®åŒæ™‚プロセスã®ã¿ã‚’使用ã—ã¾ã™ã€‚フォーク数ã«è¨­å®šã•れãŸå€¤ã‚ˆã‚Šã‚‚多ãã®ãƒ›ã‚¹ãƒˆãŒã‚ã‚‹å ´åˆã€Ansible ã¯ãれらã®ãƒ›ã‚¹ãƒˆã¨å¯¾è©±ã—ã¾ã™ãŒã€å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚10 個ã®ä¸¦åˆ—フォーク㧠[atlanta] サーãƒãƒ¼ã‚’å†èµ·å‹•ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:45 msgid "/usr/bin/ansible will default to running from your user account. To connect as a different user:" msgstr "usr/bin/ansible ã¯ãƒ‡ãƒ•ォルトã§è‡ªèº«ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰å®Ÿè¡Œã•れã¾ã™ã€‚別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦æŽ¥ç¶šã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:51 msgid "Rebooting probably requires privilege escalation. You can connect to the server as ``username`` and run the command as the ``root`` user by using the :ref:`become ` keyword:" msgstr "å†èµ·å‹•ã«ã¯ã€ãŠãã‚‰ãæ¨©é™æ˜‡æ ¼ãŒå¿…è¦ã§ã™ã€‚``username`` ã¨ã—ã¦ã‚µãƒ¼ãƒãƒ¼ã«æŽ¥ç¶šã—ã€:ref:`become ` キーワードを使用ã—㦠``root`` ユーザーã¨ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:57 msgid "If you add ``--ask-become-pass`` or ``-K``, Ansible prompts you for the password to use for privilege escalation (sudo/su/pfexec/doas/etc)." msgstr "``--ask-become-pass`` ã¾ãŸã¯ ``-K`` を追加ã—ã¾ã™ã€‚Ansible ã«ã‚ˆã‚Šã€æ¨©é™æ˜‡æ ¼ã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワード (sudo/su/pfexec/doas ãªã©) ã®å…¥åŠ›ãŒæ±‚ã‚られã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:60 msgid "The :ref:`command module ` does not support extended shell syntax like piping and redirects (although shell variables will always work). If your command requires shell-specific syntax, use the `shell` module instead. Read more about the differences on the :ref:`working_with_modules` page." msgstr ":ref:`command モジュール ` ã¯ã€piping ã‚„ redirects ã®ã‚ˆã†ãªæ‹¡å¼µã‚·ã‚§ãƒ«æ§‹æ–‡ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“ (ãŸã ã—ã€ã‚·ã‚§ãƒ«å¤‰æ•°ã¯å¸¸ã«å‹•作ã—ã¾ã™)ã€‚ã‚·ã‚§ãƒ«ç‰¹æœ‰ã®æ§‹æ–‡ã‚’å¿…è¦ã¨ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®å ´åˆã¯ã€ä»£ã‚り㫠`shell` モジュールを使用ã—ã¦ãã ã•ã„。ãã®é•ã„ã«ã¤ã„ã¦ã¯ã€Œ:ref:`working_with_modules`ã€ã®ãƒšãƒ¼ã‚¸ã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:65 msgid "So far all our examples have used the default 'command' module. To use a different module, pass ``-m`` for module name. For example, to use the :ref:`ansible.builtin.shell module `:" msgstr "ã“ã®ä¾‹ã§ã¯ã€ãƒ‡ãƒ•ォルトã®ã€Œcommandã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã„ã¾ã™ã€‚別ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åã« ``-m`` を渡ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€:ref:`ansible.builtin.shell モジュール ` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:71 msgid "When running any command with the Ansible *ad hoc* CLI (as opposed to :ref:`Playbooks `), pay particular attention to shell quoting rules, so the local shell retains the variable and passes it to Ansible. For example, using double rather than single quotes in the above example would evaluate the variable on the box you were on." msgstr "(:ref:`Playbooks ` ã¨ã¯ç•°ãªã‚Š) Ansible ã® *アドホック* CLI を使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚·ã‚§ãƒ«ãŒå¤‰æ•°ã‚’ä¿æŒã—㦠Ansible ã«æ¸¡ã™ã‚ˆã†ã«ã€ã‚·ã‚§ãƒ«ã®å¼•用è¦å‰‡ã«ç‰¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€ä¸Šè¨˜ã®ä¾‹ã§ä¸€é‡å¼•用符ã§ã¯ãªã二é‡å¼•用符を使用ã™ã‚‹ã¨ã€æŒ‡å®šã—ã¦ã„ã‚‹ãã®ãƒœãƒƒã‚¯ã‚¹ã®å¤‰æ•°ãŒè©•価ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:80 msgid "Managing files" msgstr "ファイルã®ç®¡ç†" #: ../../rst/user_guide/intro_adhoc.rst:82 msgid "An ad hoc task can harness the power of Ansible and SCP to transfer many files to multiple machines in parallel. To transfer a file directly to all servers in the [atlanta] group:" msgstr "アドホックタスクã§ã¯ã€Ansible 㨠SCP ã®åŠ›ã‚’åˆ©ç”¨ã—ã¦ã€å¤šæ•°ã®ãƒ•ァイルを複数ã®ãƒžã‚·ãƒ³ã«ä¸¦è¡Œã—ã¦è»¢é€ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚[atlanta] グループã®ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼ã«ç›´æŽ¥ãƒ•ァイルを転é€ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:88 msgid "If you plan to repeat a task like this, use the :ref:`ansible.builtin.template` module in a playbook." msgstr "ã“ã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ã‚’繰り返ã™å ´åˆã¯ã€Playbook ã§ :ref:`ansible.builtin.template` モジュールを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:90 msgid "The :ref:`ansible.builtin.file` module allows changing ownership and permissions on files. These same options can be passed directly to the ``copy`` module as well:" msgstr ":ref:`ansible.builtin.file` モジュールã«ã‚ˆã‚Šã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‰€æœ‰æ¨©ãŠã‚ˆã³ãƒ‘ーミッションを変更ã§ãã¾ã™ã€‚åŒã˜ã‚ªãƒ—ションを ``copy`` モジュールã«ç›´æŽ¥æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:98 msgid "The ``file`` module can also create directories, similar to ``mkdir -p``:" msgstr "``file`` モジュールã¯ã€``mkdir -p`` ã¨åŒæ§˜ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚‚作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:104 msgid "As well as delete directories (recursively) and delete files:" msgstr "ディレクトリーを (å†å¸°çš„ã«) 削除ã—ã€ãƒ•ァイルを削除ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:113 msgid "Managing packages" msgstr "パッケージã®ç®¡ç†" #: ../../rst/user_guide/intro_adhoc.rst:115 msgid "You might also use an ad hoc task to install, update, or remove packages on managed nodes using a package management module like yum. To ensure a package is installed without updating it:" msgstr "ã¾ãŸã€yum ãªã©ã®ãƒ‘ッケージ管ç†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã€ç®¡ç†å¯¾è±¡ã®ãƒŽãƒ¼ãƒ‰ã«ãƒ‘ッケージをインストールã€ã‚¢ãƒƒãƒ—デートã€ã¾ãŸã¯å‰Šé™¤ã™ã‚‹ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚¿ã‚¹ã‚¯ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚パッケージを更新ã›ãšã«ç¢ºå®Ÿã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:121 msgid "To ensure a specific version of a package is installed:" msgstr "パッケージã®ç‰¹å®šãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:127 msgid "To ensure a package is at the latest version:" msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãŒæœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:133 msgid "To ensure a package is not installed:" msgstr "パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:139 msgid "Ansible has modules for managing packages under many platforms. If there is no module for your package manager, you can install packages using the command module or create a module for your package manager." msgstr "Ansible ã«ã¯ã€å¤šãã®ãƒ—ラットフォームã§ãƒ‘ッケージを管ç†ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ãŠä½¿ã„ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ç”¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãªã„å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãƒ‘ッケージをインストールã™ã‚‹ã‹ã€ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ç”¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:144 msgid "Managing users and groups" msgstr "ユーザーãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã®ç®¡ç†" #: ../../rst/user_guide/intro_adhoc.rst:146 msgid "You can create, manage, and remove user accounts on your managed nodes with ad hoc tasks:" msgstr "アドホックタスクを使用ã™ã‚‹ã¨ã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’作æˆã€ç®¡ç†ã€ãŠã‚ˆã³å‰Šé™¤ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:154 msgid "See the :ref:`ansible.builtin.user ` module documentation for details on all of the available options, including how to manipulate groups and group membership." msgstr "グループやグループメンãƒãƒ¼ã‚·ãƒƒãƒ—ã®æ“作方法ãªã©ã€åˆ©ç”¨å¯èƒ½ãªã™ã¹ã¦ã®ã‚ªãƒ—ションã®è©³ç´°ã¯ã€:ref:`ansible.builtin.user ` モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:160 msgid "Managing services" msgstr "サービスã®ç®¡ç†" #: ../../rst/user_guide/intro_adhoc.rst:162 msgid "Ensure a service is started on all webservers:" msgstr "サービスãŒã™ã¹ã¦ã® Web サーãƒãƒ¼ã§èµ·å‹•ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:168 msgid "Alternatively, restart a service on all webservers:" msgstr "ã¾ãŸã¯ã€ã™ã¹ã¦ã® Web サーãƒãƒ¼ã§ã‚µãƒ¼ãƒ“スをå†èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:174 msgid "Ensure a service is stopped:" msgstr "サービスãŒåœæ­¢ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:183 msgid "Gathering facts" msgstr "ファクトã®åŽé›†" #: ../../rst/user_guide/intro_adhoc.rst:185 msgid "Facts represent discovered variables about a system. You can use facts to implement conditional execution of tasks but also just to get ad hoc information about your systems. To see all facts:" msgstr "ファクトã¯ã€æ¤œå‡ºã•れãŸã‚·ã‚¹ãƒ†ãƒ ã«é–¢ã™ã‚‹å¤‰æ•°ã‚’表ã—ã¾ã™ã€‚ファクトを使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã®æ¡ä»¶ä»˜ã実行を実装ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã‚·ã‚¹ãƒ†ãƒ ã«é–¢ã™ã‚‹ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯æƒ…報をå–å¾—ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ•ァクトを表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_adhoc.rst:191 msgid "You can also filter this output to display only certain facts, see the :ref:`ansible.builtin.setup ` module documentation for details." msgstr "ã“ã®å‡ºåŠ›ã‚’ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã§çµžã‚Šè¾¼ã‚“ã§ã€ç‰¹å®šã®ãƒ•ァクトã®ã¿ã‚’表示ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚詳細㯠:ref:`ansible.builtin.setup ` モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:194 #: ../../rst/user_guide/intro_patterns.rst:146 msgid "Patterns and ad-hoc commands" msgstr "パターンãŠã‚ˆã³ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰" #: ../../rst/user_guide/intro_adhoc.rst:196 msgid "See the :ref:`patterns ` documentation for details on all of the available options, including how to limit using patterns in ad-hoc commands." msgstr "アドホックコマンドã§ãƒ‘ターンã®ä½¿ç”¨ã‚’制é™ã™ã‚‹æ–¹æ³•ãªã©ã€åˆ©ç”¨å¯èƒ½ãªã™ã¹ã¦ã®ã‚ªãƒ—ションã®è©³ç´°ã¯ã€:ref:`patterns ` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_adhoc.rst:199 msgid "Now that you understand the basic elements of Ansible execution, you are ready to learn to automate repetitive tasks using :ref:`Ansible Playbooks `." msgstr "ã“れã§ã€Ansible を実行ã™ã‚‹åŸºæœ¬è¦ç´ ã‚’ç†è§£ã—ã€:ref:`Ansible Playbook ` を使用ã—ã¦å復タスクを自動化ã™ã‚‹æ–¹æ³•ã‚’å­¦ã¶æº–å‚™ãŒæ•´ã„ã¾ã—ãŸã€‚" #: ../../rst/user_guide/intro_adhoc.rst:203 msgid ":ref:`intro_configuration`" msgstr ":ref:`intro_configuration`" #: ../../rst/user_guide/intro_adhoc.rst:204 msgid "All about the Ansible config file" msgstr "Ansible 設定ファイルã®è©³ç´°" #: ../../rst/user_guide/intro_adhoc.rst:205 #: ../../rst/user_guide/playbooks_best_practices.rst:158 #: ../../rst/user_guide/playbooks_intro.rst:146 #: ../../rst/user_guide/playbooks_reuse_includes.rst:25 #: ../../rst/user_guide/playbooks_reuse_roles.rst:616 #: ../../rst/user_guide/sample_setup.rst:276 msgid ":ref:`list_of_collections`" msgstr ":ref:`list_of_collections`" #: ../../rst/user_guide/intro_adhoc.rst:206 #: ../../rst/user_guide/playbooks_best_practices.rst:159 #: ../../rst/user_guide/playbooks_intro.rst:147 #: ../../rst/user_guide/playbooks_reuse_includes.rst:26 #: ../../rst/user_guide/playbooks_reuse_roles.rst:617 #: ../../rst/user_guide/sample_setup.rst:277 msgid "Browse existing collections, modules, and plugins" msgstr "既存ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãŠã‚ˆã³ãƒ—ラグインã®é–²è¦§" #: ../../rst/user_guide/intro_adhoc.rst:208 msgid "Using Ansible for configuration management & deployment" msgstr "設定管ç†ãŠã‚ˆã³ãƒ‡ãƒ—ロイメント㫠Ansible ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_adhoc.rst:209 #: ../../rst/user_guide/intro_bsd.rst:103 #: ../../rst/user_guide/intro_dynamic_inventory.rst:246 #: ../../rst/user_guide/intro_getting_started.rst:195 #: ../../rst/user_guide/intro_inventory.rst:788 #: ../../rst/user_guide/intro_patterns.rst:198 #: ../../rst/user_guide/modules.rst:33 #: ../../rst/user_guide/modules_intro.rst:49 #: ../../rst/user_guide/modules_support.rst:67 #: ../../rst/user_guide/playbooks_best_practices.rst:166 #: ../../rst/user_guide/playbooks_intro.rst:154 #: ../../rst/user_guide/playbooks_reuse.rst:220 #: ../../rst/user_guide/playbooks_reuse_includes.rst:31 #: ../../rst/user_guide/playbooks_reuse_roles.rst:622 #: ../../rst/user_guide/sample_setup.rst:284 msgid "`Mailing List `_" msgstr "`Mailing List `_" #: ../../rst/user_guide/intro_bsd.rst:4 msgid "Ansible and BSD" msgstr "Ansible ãŠã‚ˆã³ BSD" #: ../../rst/user_guide/intro_bsd.rst:6 msgid "Managing BSD machines is different from managing other Unix-like machines. If you have managed nodes running BSD, review these topics." msgstr "BSD マシンã®ç®¡ç†ã¯ã€ä»–ã® Unix 系マシンã®ç®¡ç†ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚BSD を実行ã—ã¦ã„る管ç†ãƒŽãƒ¼ãƒ‰ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ãƒˆãƒ”ックを確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_bsd.rst:12 msgid "Connecting to BSD nodes" msgstr "BSD ノードã¸ã®æŽ¥ç¶š" #: ../../rst/user_guide/intro_bsd.rst:14 msgid "Ansible connects to managed nodes using OpenSSH by default. This works on BSD if you use SSH keys for authentication. However, if you use SSH passwords for authentication, Ansible relies on sshpass. Most versions of sshpass do not deal well with BSD login prompts, so when using SSH passwords against BSD machines, use ``paramiko`` to connect instead of OpenSSH. You can do this in ansible.cfg globally or you can set it as an inventory/group/host variable. For example:" msgstr "Ansible ã¯ãƒ‡ãƒ•ォルト㧠OpenSSH を使用ã—ã¦ç®¡ç†ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã¾ã™ã€‚ã“れã¯ã€èªè¨¼ã« SSH éµã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ BSD ã§å‹•作ã—ã¾ã™ã€‚ãŸã ã—ã€èªè¨¼ã« SSH パスワードを使用ã™ã‚‹å ´åˆã€Ansible 㯠sshpass ã«ä¾å­˜ã—ã¾ã™ã€‚sshpass ã®ã»ã¨ã‚“ã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ BSD ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ—ロンプトã«é©åˆ‡ã«å¯¾å¿œã§ãã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€BSD マシンã«å¯¾ã—㦠SSH パスワードを使用ã™ã‚‹å ´åˆã¯ã€OpenSSH ã®ä»£ã‚り㫠``paramiko`` を使用ã—ã¦æŽ¥ç¶šã—ã¦ãã ã•ã„。ã“れ㯠ansible.cfg ã§ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«è¡Œã†ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€inventory/group/host 変数ã¨ã—ã¦è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:25 msgid "Bootstrapping BSD" msgstr "BSD ã®ãƒ–ートストラップ" #: ../../rst/user_guide/intro_bsd.rst:27 msgid "Ansible is agentless by default, however, it requires Python on managed nodes. Only the :ref:`raw ` module will operate without Python. Although this module can be used to bootstrap Ansible and install Python on BSD variants (see below), it is very limited and the use of Python is required to make full use of Ansible's features." msgstr "Ansible ã¯ãƒ‡ãƒ•ォルトã§ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆãƒ¬ã‚¹ã§ã™ãŒã€ç®¡ç†ãƒŽãƒ¼ãƒ‰ã§ Python ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚:ref:`raw ` モジュールã®ã¿ãŒ Python ãªã—ã§å‹•作ã—ã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—㦠Ansible をブートストラップã—㦠BSD ãƒãƒªã‚¢ãƒ³ãƒˆã« Python をインストールã§ãã¾ã™ (下記å‚ç…§) ãŒã€Python ã¯éžå¸¸ã«åˆ¶é™ã•れã¦ãŠã‚Šã€Ansible ã®æ©Ÿèƒ½ã‚’å®Œå…¨ã«æ´»ç”¨ã™ã‚‹ã«ã¯ Python を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:29 msgid "The following example installs Python which includes the json library required for full functionality of Ansible. On your control machine you can execute the following for most versions of FreeBSD:" msgstr "次ã®ä¾‹ã§ã¯ã€Ansible ã®å®Œå…¨ãªæ©Ÿèƒ½ã«å¿…è¦ãª json ライブラリーをå«ã‚€ Python をインストールã—ã¦ã„ã¾ã™ã€‚コントロールマシンã§ã¯ã€ã»ã¨ã‚“ã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® FreeBSD ã§æ¬¡ã®ã‚ˆã†ã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:36 msgid "Or for OpenBSD:" msgstr "OpenBSD ã®å ´åˆã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:42 msgid "Once this is done you can now use other Ansible modules apart from the ``raw`` module." msgstr "ã“れãŒå®Œäº†ã™ã‚‹ã¨ã€``raw`` モジュール以外ã®ä»–ã® Ansible モジュールを使用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:45 msgid "This example demonstrated using pkg on FreeBSD and pkg_add on OpenBSD, however you should be able to substitute the appropriate package tool for your BSD; the package name may also differ. Refer to the package list or documentation of the BSD variant you are using for the exact Python package name you intend to install." msgstr "ã“ã®ä¾‹ã§ã¯ã€FreeBSD ã§ã¯ pkg ã‚’ã€OpenBSD ã§ã¯ pkg_add を使用ã—ã¦ã„ã¾ã™ãŒã€ãŠä½¿ã„ã® BSD ã«åˆã‚ã›ã¦é©åˆ‡ãªãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãƒ„ãƒ¼ãƒ«ã‚’é¸æŠžã—ã¦ãã ã•ã„。ã¾ãŸã€ãƒ‘ッケージåã‚‚ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚インストールã™ã‚‹ Python パッケージåã«ã¤ã„ã¦ã¯ã€ä½¿ç”¨ã—ã¦ã„ã‚‹ BSD ã®ãƒ‘ッケージリストやドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_bsd.rst:50 msgid "Setting the Python interpreter" msgstr "Python インタープリターã®è¨­å®š" #: ../../rst/user_guide/intro_bsd.rst:52 msgid "To support a variety of Unix-like operating systems and distributions, Ansible cannot always rely on the existing environment or ``env`` variables to locate the correct Python binary. By default, modules point at ``/usr/bin/python`` as this is the most common location. On BSD variants, this path may differ, so it is advised to inform Ansible of the binary's location, through the ``ansible_python_interpreter`` inventory variable. For example:" msgstr "ã•ã¾ã–ã¾ãª Unix 系オペレーティングシステムやディストリビューションをサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€Ansible ã¯å¸¸ã«æ—¢å­˜ã®ç’°å¢ƒå¤‰æ•°ã‚„ ``env`` å¤‰æ•°ã‚’é ¼ã‚Šã«æ­£ã—ã„ Python ãƒã‚¤ãƒŠãƒªãƒ¼ã‚’探ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。デフォルトã§ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æœ€ã‚‚一般的ãªå ´æ‰€ã§ã‚ã‚‹ ``/usr/bin/python`` を指ã—ã¾ã™ã€‚BSD ç³»ã§ã¯ã€ã“ã®ãƒ‘スãŒç•°ãªã‚‹å ´åˆãŒã‚ã‚‹ã®ã§ã€``ansible_python_interpreter`` インベントリー変数を使用ã—ã¦ã€ãƒã‚¤ãƒŠãƒªãƒ¼ã®å ´æ‰€ã‚’ Ansible ã«çŸ¥ã‚‰ã›ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:61 msgid "If you use additional plugins beyond those bundled with Ansible, you can set similar variables for ``bash``, ``perl`` or ``ruby``, depending on how the plugin is written. For example:" msgstr "Ansible ã§ãƒãƒ³ãƒ‰ãƒ«ã•れã¦ã„るプラグイン以外ã®ãƒ—ラグインを使用ã™ã‚‹å ´åˆã¯ã€ãƒ—ラグインã®è¨˜è¿°æ–¹æ³•ã«å¿œã˜ã¦ ``bash``ã€``perl``ã€ã¾ãŸã¯ ``ruby`` ã«åŒæ§˜ã®å¤‰æ•°ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:71 msgid "Which modules are available?" msgstr "利用å¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" #: ../../rst/user_guide/intro_bsd.rst:73 msgid "The majority of the core Ansible modules are written for a combination of Unix-like machines and other generic services, so most should function well on the BSDs with the obvious exception of those that are aimed at Linux-only technologies (such as LVG)." msgstr "Ansible ã®ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¤§åŠã¯ã€Unix 系マシンã¨ä»–ã®æ±Žç”¨ã‚µãƒ¼ãƒ“スを組ã¿åˆã‚ã›ã¦è¨˜è¿°ã•れã¦ã„ã‚‹ãŸã‚ã€Linux ã«é™å®šã—ãŸãƒ†ã‚¯ãƒŽãƒ­ã‚¸ãƒ¼ (LVG ãªã©) を対象ã¨ã™ã‚‹ã‚‚ã®ã‚’除ãã€ãã®å¤§åŠãŒ BSD ä¸Šã§æ­£å¸¸ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:76 msgid "Using BSD as the control node" msgstr "コントロールノードã¨ã—ã¦ã® BSD ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_bsd.rst:78 msgid "Using BSD as the control machine is as simple as installing the Ansible package for your BSD variant or by following the ``pip`` or 'from source' instructions." msgstr "BSD をコントロールマシンã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã€BSD ãƒãƒªã‚¢ãƒ³ãƒˆã® Ansible パッケージをインストールã™ã‚‹ã‹ã€``pip`` ã¾ãŸã¯ã€Œfrom sourceã€ã®æŒ‡ç¤ºã«å¾“ã†ã®ã¨åŒã˜ãらã„ç°¡å˜ã§ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:83 msgid "BSD facts" msgstr "BSD ファクト" #: ../../rst/user_guide/intro_bsd.rst:85 msgid "Ansible gathers facts from the BSDs in a similar manner to Linux machines, but since the data, names and structures can vary for network, disks and other devices, one should expect the output to be slightly different yet still familiar to a BSD administrator." msgstr "Ansible ã¯ã€Linux マシンã¨åŒæ§˜ã®æ–¹æ³•ã§ BSD ã‹ã‚‰ãƒ•ァクトをåŽé›†ã—ã¾ã™ãŒã€ãƒ‡ãƒ¼ã‚¿ã€åå‰ã€æ§‹é€ ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€ãƒ‡ã‚£ã‚¹ã‚¯ã€ãŠã‚ˆã³ãã®ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã«ã‚ˆã‚Šç•°ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€BSD 管ç†è€…ã«ã¨ã£ã¦ã¯å‡ºåŠ›ãŒå¤šå°‘ç•°ãªã‚‹ã‚‚ã®ã®ã¾ã é¦´æŸ“ã¿ãŒã‚ã‚‹ã“ã¨ãŒæœŸå¾…ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_bsd.rst:90 msgid "BSD efforts and contributions" msgstr "BSD ã®å–り組ã¿ãŠã‚ˆã³è²¢çŒ®" #: ../../rst/user_guide/intro_bsd.rst:92 msgid "BSD support is important to us at Ansible. Even though the majority of our contributors use and target Linux we have an active BSD community and strive to be as BSD-friendly as possible. Please feel free to report any issues or incompatibilities you discover with BSD; pull requests with an included fix are also welcome!" msgstr "BSD サãƒãƒ¼ãƒˆã¯ Ansible ã«ã¨ã£ã¦é‡è¦ã§ã™ã€‚貢献者ã®å¤§åŠã¯ Linux を使用ã—ã¦ã„ã¾ã™ãŒã€Ansible ã«ã¯æ´»ç™ºãª BSD コミュニティーãŒã‚りã€å¯èƒ½ãªé™ã‚Š BSD フレンドリーã§ã‚るよã†ã«åŠªã‚ã¦ã„ã¾ã™ã€‚BSD ã«é–¢ã™ã‚‹å•題やéžäº’æ›æ€§ã‚’発見ã—ãŸå ´åˆã¯ã€é æ…®ãªãã”報告ãã ã•ã„。" #: ../../rst/user_guide/intro_bsd.rst:97 #: ../../rst/user_guide/intro_getting_started.rst:187 #: ../../rst/user_guide/intro_inventory.rst:784 #: ../../rst/user_guide/intro_patterns.rst:194 #: ../../rst/user_guide/modules.rst:23 #: ../../rst/user_guide/modules_intro.rst:41 #: ../../rst/user_guide/modules_support.rst:63 msgid ":ref:`intro_adhoc`" msgstr ":ref:`intro_adhoc`" #: ../../rst/user_guide/intro_bsd.rst:98 #: ../../rst/user_guide/intro_getting_started.rst:188 #: ../../rst/user_guide/intro_inventory.rst:785 #: ../../rst/user_guide/intro_patterns.rst:195 msgid "Examples of basic commands" msgstr "基本コマンドã®ä¾‹" #: ../../rst/user_guide/intro_bsd.rst:100 msgid "Learning ansible's configuration management language" msgstr "Ansible ã®è¨­å®šç®¡ç†è¨€èªžã®æ¦‚è¦" #: ../../rst/user_guide/intro_bsd.rst:101 #: ../../rst/user_guide/modules_intro.rst:45 #: ../../rst/user_guide/playbooks_best_practices.rst:160 #: ../../rst/user_guide/playbooks_intro.rst:148 #: ../../rst/user_guide/playbooks_reuse_includes.rst:27 #: ../../rst/user_guide/playbooks_reuse_roles.rst:618 #: ../../rst/user_guide/sample_setup.rst:278 msgid ":ref:`developing_modules`" msgstr ":ref:`developing_modules`" #: ../../rst/user_guide/intro_bsd.rst:102 msgid "How to write modules" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ›¸ãæ–¹" #: ../../rst/user_guide/intro_dynamic_inventory.rst:6 msgid "Working with dynamic inventory" msgstr "動的インベントリーã®ä½¿ç”¨" #: ../../rst/user_guide/intro_dynamic_inventory.rst:11 msgid "If your Ansible inventory fluctuates over time, with hosts spinning up and shutting down in response to business demands, the static inventory solutions described in :ref:`inventory` will not serve your needs. You may need to track hosts from multiple sources: cloud providers, LDAP, `Cobbler `_, and/or enterprise CMDB systems." msgstr "Ansible ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŒã€ãƒ“ジãƒã‚¹ä¸Šã®è¦æ±‚ã«å¿œã˜ã¦ãƒ›ã‚¹ãƒˆã®å›žè»¢ã‚„åœæ­¢ãªã©ã€æ™‚é–“ã¨ã¨ã‚‚ã«å¤‰å‹•ã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`inventory`ã€ã§èª¬æ˜Žã—ã¦ã„ã‚‹é™çš„ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã§ã¯ãƒ‹ãƒ¼ã‚ºã«å¿œãˆã‚‰ã‚Œã¾ã›ã‚“。クラウドプロãƒã‚¤ãƒ€ãƒ¼ã€LDAPã€`Cobbler `_ã€ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズ CMDB システムãªã©ã€è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã®ãƒ›ã‚¹ãƒˆã®è¿½è·¡ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:13 msgid "Ansible integrates all of these options through a dynamic external inventory system. Ansible supports two ways to connect with external inventory: :ref:`inventory_plugins` and `inventory scripts`." msgstr "Ansible ã¯ã€å‹•çš„ãªå¤–部インベントリーシステムを通ã˜ã¦ã€ã“れらã®ã‚ªãƒ—ションをã™ã¹ã¦çµ±åˆã—ã¾ã™ã€‚Ansible ã¯ã€å¤–éƒ¨ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«æŽ¥ç¶šã™ã‚‹ 2 ã¤ã®æ–¹æ³• (:ref:`inventory_plugins` ãŠã‚ˆã³ `inventory scripts`) をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:15 msgid "Inventory plugins take advantage of the most recent updates to the Ansible core code. We recommend plugins over scripts for dynamic inventory. You can :ref:`write your own plugin ` to connect to additional dynamic inventory sources." msgstr "インベントリープラグインã¯ã€Ansible ã‚³ã‚¢ã‚³ãƒ¼ãƒ‰ã®æœ€æ–°ã®æ›´æ–°ã‚’利用ã—ã¦ã„ã¾ã™ã€‚動的インベントリーã«ã¯ã€ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚ˆã‚Šã‚‚ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚:ref:`独自ã®ãƒ—ラグインを記述 ` ã—ã¦ã€è¿½åŠ ã®å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:17 msgid "You can still use inventory scripts if you choose. When we implemented inventory plugins, we ensured backwards compatibility through the script inventory plugin. The examples below illustrate how to use inventory scripts." msgstr "ã¾ãŸã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚インベントリープラグインを実装ã™ã‚‹éš›ã«ã€ã‚¹ã‚¯ãƒªãƒ—トインベントリープラグインã«ã‚ˆã‚‹å¾Œæ–¹äº’æ›æ€§ã‚’確ä¿ã—ã¾ã—ãŸã€‚以下ã®ä¾‹ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã®ä½¿ç”¨æ–¹æ³•を説明ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:19 msgid "If you prefer a GUI for handling dynamic inventory, the inventory database on AWX or :ref:`ansible_platform` syncs with all your dynamic inventory sources, provides web and REST access to the results, and offers a graphical inventory editor. With a database record of all of your hosts, you can correlate past event history and see which hosts have had failures on their last playbook runs." msgstr "動的インベントリーを GUI ã§æ“作ã—ãŸã„å ´åˆã¯ã€AWX ã¾ãŸã¯ :ref:`ansible_platform` ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒã™ã¹ã¦ã®å‹•的インベントリーソースã¨åŒæœŸã—ã€ãã®çµæžœã« Web ãŠã‚ˆã³ REST アクセスをæä¾›ã—ã€ã‚°ãƒ©ãƒ•ィカルインベントリーエディターをæä¾›ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã€éŽåŽ»ã®ã‚¤ãƒ™ãƒ³ãƒˆå±¥æ­´ã‚’関連付ã‘ã€æœ€å¾Œã® Playbook ã®å®Ÿè¡Œã§ã©ã®ãƒ›ã‚¹ãƒˆã«éšœå®³ãŒç™ºç”Ÿã—ãŸã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:24 msgid "Inventory script example: Cobbler" msgstr "インベントリースクリプトã®ä¾‹: Cobbler" #: ../../rst/user_guide/intro_dynamic_inventory.rst:26 msgid "Ansible integrates seamlessly with `Cobbler `_, a Linux installation server originally written by Michael DeHaan and now led by James Cammarata, who works for Ansible." msgstr "Ansible ã¯ã€Linux インストールサーãƒãƒ¼ `Cobbler `_ (最åˆã« Michael DeHaan æ°ãŒä½œæˆã—ã€ç¾åœ¨ã¯ Ansible ã«æ‰€å±žã™ã‚‹ James Cammarata ãŒçއã„ã¦ã„ã¾ã™) ã¨ã‚·ãƒ¼ãƒ ãƒ¬ã‚¹ã«çµ±åˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:28 msgid "While primarily used to kickoff OS installations and manage DHCP and DNS, Cobbler has a generic layer that can represent data for multiple configuration management systems (even at the same time) and serve as a 'lightweight CMDB'." msgstr "Cobbler ã¯ä¸»ã« OS ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’é–‹å§‹ã—ã€DHCP 㨠DNS を管ç†ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ãŒã€è¤‡æ•°ã®æ§‹æˆç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‡ãƒ¼ã‚¿ã‚’ (åŒæ™‚ã«ã§ã‚‚) 表ç¾ã—ã€ã€Œè»½é‡CMDBã€ã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹æ±Žç”¨ãƒ¬ã‚¤ãƒ¤ãƒ¼ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:31 msgid "To tie your Ansible inventory to Cobbler, copy `this script `_ to ``/etc/ansible`` and ``chmod +x`` the file. Run ``cobblerd`` any time you use Ansible and use the ``-i`` command line option (for example, ``-i /etc/ansible/cobbler.py``) to communicate with Cobbler using Cobbler's XMLRPC API." msgstr "Ansible インベントリーを Cobbler ã«é–¢é€£ä»˜ã‘ã‚‹ã«ã¯ã€`ã“ã®ã‚¹ã‚¯ãƒªãƒ—ト `_ ã‚’ ``/etc/ansible`` ã«ã‚³ãƒ”ーã—ã¦ã€ã‚³ãƒ”ーã—ãŸãƒ•ァイル㫠``chmod +x`` を付与ã—ã¾ã™ã€‚Ansible を使用ã—㦠``cobblerd`` を実行ã—ã€``-i`` コマンドラインオプション (例: ``-i /etc/ansible/cobbler.py``) を付ã‘ã¦ã€Cobbler ã® XMLRPC API 使用ã—㦠Cobbler ã¨é€šä¿¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:33 msgid "Add a ``cobbler.ini`` file in ``/etc/ansible`` so Ansible knows where the Cobbler server is and some cache improvements can be used. For example:" msgstr "Ansible ㌠Cobbler サーãƒãƒ¼ã®å ´æ‰€ã¨ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æ”¹è‰¯ã«ä½¿ç”¨ã§ãã‚‹ã‚‚ã®ã‚’èªè­˜ã§ãるよã†ã«ã€``/etc/ansible`` ã« ``cobbler.ini`` ファイルを追加ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:56 msgid "First test the script by running ``/etc/ansible/cobbler.py`` directly. You should see some JSON data output, but it may not have anything in it just yet." msgstr "ã¾ãš ``/etc/ansible/cobbler.py`` を直接実行ã—ã¦ã‚¹ã‚¯ãƒªãƒ—トをテストã—ã¾ã™ã€‚JSON データ出力ãŒè¡¨ç¤ºã•れã¾ã™ãŒã€ã¾ã ä½•ã‚‚å«ã¾ã‚Œã¦ã„ãªã„å ´åˆã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:58 msgid "Let's explore what this does. In Cobbler, assume a scenario somewhat like the following:" msgstr "ã“れã§ä½•ãŒã§ãã‚‹ã®ã‹è¦‹ã¦ã¿ã¾ã—ょã†ã€‚Cobbler ã§ã€æ¬¡ã®ã‚ˆã†ãªã‚·ãƒŠãƒªã‚ªã‚’想定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:67 msgid "In the example above, the system 'foo.example.com' is addressable by ansible directly, but is also addressable when using the group names 'webserver' or 'atlanta'. Since Ansible uses SSH, it contacts system foo over 'foo.example.com', only, never just 'foo'. Similarly, if you tried \"ansible foo\", it would not find the system... but \"ansible 'foo*'\" would do, because the system DNS name starts with 'foo'." msgstr "上ã®ä¾‹ã§ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã€Œfoo.example.comã€ã¯ã€ansible ãŒç›´æŽ¥ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã§ãã‚‹ã ã‘ã§ãªãã€ã‚°ãƒ«ãƒ¼ãƒ—å「webserverã€ã‚„「atlantaã€ã‚’使用ã—ã¦ã‚‚アドレスを指定ã§ãã¾ã™ã€‚Ansible 㯠SSH を使用ã—ã¦ã„ã‚‹ãŸã‚ã€ã€Œfoo.example.comã€ã‚’経由ã—ã¦ã‚·ã‚¹ãƒ†ãƒ  foo ã«æŽ¥ç¶šã—ã¾ã™ãŒã€æ±ºã—ã¦ã€Œfooã€ã ã‘ã§ã¯ã‚りã¾ã›ã‚“ã€‚åŒæ§˜ã«ã€ã€Œansible fooã€ã¨å…¥åŠ›ã—ã¦ã‚‚ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’見ã¤ã‘ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ãŒã€ã€Œansible 'foo'*ã€ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã® DNS å㌠'foo' ã§å§‹ã¾ã‚‹ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:69 msgid "The script provides more than host and group info. In addition, as a bonus, when the 'setup' module is run (which happens automatically when using playbooks), the variables 'a', 'b', and 'c' will all be auto-populated in the templates:" msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ãƒ›ã‚¹ãƒˆã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®æƒ…報以外ã«ã‚‚ã•ã¾ã–ã¾ãªæƒ…報をæä¾›ã—ã¾ã™ã€‚ã•らã«ã€(Playbook を使用ã™ã‚‹éš›ã«è‡ªå‹•çš„ã«å®Ÿè¡Œã•れる)「setupã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã™ã‚‹ã¨ã€å¤‰æ•°ã€Œaã€ã€ã€Œbã€ã€ãŠã‚ˆã³ã€Œcã€ã¯ã™ã¹ã¦ãƒ†ãƒ³ãƒ—レートã«è‡ªå‹•入力ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:76 msgid "Which could be executed just like this:" msgstr "ã“れã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:84 msgid "The name 'webserver' came from Cobbler, as did the variables for the config file. You can still pass in your own variables like normal in Ansible, but variables from the external inventory script will override any that have the same name." msgstr "「webserverã€ã¨ã„ã†åå‰ã¯ã€è¨­å®šãƒ•ァイルã®å¤‰æ•°ã¨åŒæ§˜ã«ã€Cobbler ã‹ã‚‰æ¥ã¦ã„ã¾ã™ã€‚Ansible ã§ã¯é€šå¸¸ã®ã‚ˆã†ã«ç‹¬è‡ªã®å¤‰æ•°ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ãŒã€å¤–部ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã‹ã‚‰ã®å¤‰æ•°ã¯ã€åŒã˜åå‰ã®ã‚‚ã®ã‚’上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:89 msgid "So, with the template above (``motd.j2``), this results in the following data being written to ``/etc/motd`` for system 'foo':" msgstr "ãã®ãŸã‚ã€ä¸Šè¨˜ã®ãƒ†ãƒ³ãƒ—レート (``motd.j2``) を使用ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ãƒ‡ãƒ¼ã‚¿ãŒã‚·ã‚¹ãƒ†ãƒ ã€Œfooã€ç”¨ã« ``/etc/motd`` ã«æ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:95 msgid "And on system 'bar' (bar.example.com):" msgstr "システム「barã€(bar.example.com) ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:101 msgid "And technically, though there is no major good reason to do it, this also works:" msgstr "技術的ã«ã¯ã€ã“れを行ã†å¤§ããªæ­£å½“ãªç†ç”±ã¯ã‚りã¾ã›ã‚“ãŒã€ã“れも機能ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:107 msgid "So, in other words, you can use those variables in arguments/actions as well." msgstr "ã¤ã¾ã‚Šã€å¼•数やアクションã§ã“ã®å¤‰æ•°ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:112 msgid "Inventory script example: OpenStack" msgstr "インベントリースクリプトã®ä¾‹: OpenStack" #: ../../rst/user_guide/intro_dynamic_inventory.rst:114 msgid "If you use an OpenStack-based cloud, instead of manually maintaining your own inventory file, you can use the ``openstack_inventory.py`` dynamic inventory to pull information about your compute instances directly from OpenStack." msgstr "独自ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを手動ã§ç®¡ç†ã™ã‚‹ä»£ã‚りã«ã€OpenStack ベースã®ã‚¯ãƒ©ã‚¦ãƒ‰ã‚’使用ã™ã‚‹å ´åˆã¯ã€å‹•的インベントリー ``openstack_inventory.py`` を使用ã—ã¦ã€OpenStack ã‹ã‚‰ç›´æŽ¥ Compute インスタンスã«é–¢ã™ã‚‹æƒ…報をå–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:116 msgid "You can download the latest version of the OpenStack inventory script `here `_." msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® OpenStack インベントリースクリプトã¯ã€`ã“ã¡ã‚‰ `_ ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:118 msgid "You can use the inventory script explicitly (by passing the `-i openstack_inventory.py` argument to Ansible) or implicitly (by placing the script at `/etc/ansible/hosts`)." msgstr "(`-i openstack_inventory.py` 引数を Ansible ã«æ¸¡ã™ã“ã¨ã§) インベントリースクリプトを明示的ã«ä½¿ç”¨ã™ã‚‹ã‹ã€(スクリプトを `/etc/ansible/hosts` ã«ãŠã„ã¦) 暗黙的ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:121 msgid "Explicit use of OpenStack inventory script" msgstr "OpenStack ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æ˜Žç¤ºçš„ãªä½¿ç”¨" #: ../../rst/user_guide/intro_dynamic_inventory.rst:123 msgid "Download the latest version of the OpenStack dynamic inventory script and make it executable::" msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® OpenStack ã®å‹•的インベントリースクリプトをダウンロードã—ã€å®Ÿè¡Œå¯èƒ½ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:129 msgid "Do not name it `openstack.py`. This name will conflict with imports from openstacksdk." msgstr "`openstack.py` ã¨ã„ã†åå‰ã¯ã¤ã‘ãªã„ã§ãã ã•ã„。ã“ã®åå‰ã¯ã€openstacksdk ã‹ã‚‰ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¨ç«¶åˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:131 msgid "Source an OpenStack RC file:" msgstr "OpenStack RC ファイルを読ã¿è¾¼ã¿ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:139 msgid "An OpenStack RC file contains the environment variables required by the client tools to establish a connection with the cloud provider, such as the authentication URL, user name, password and region name. For more information on how to download, create or source an OpenStack RC file, please refer to `Set environment variables using the OpenStack RC file `_." msgstr "OpenStack RC ファイルã«ã¯ã€èªè¨¼ URLã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã€ãƒ‘スワードã€ãƒªãƒ¼ã‚¸ãƒ§ãƒ³åãªã©ã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã¨ã®æŽ¥ç¶šã‚’確立ã™ã‚‹ãŸã‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ„ールã§å¿…è¦ãªç’°å¢ƒå¤‰æ•°ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚OpenStack RC ファイルã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã€ä½œæˆã€ã¾ãŸã¯ã‚½ãƒ¼ã‚¹ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ`Set environment variables using the OpenStack RC file `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_dynamic_inventory.rst:141 msgid "You can confirm the file has been successfully sourced by running a simple command, such as `nova list` and ensuring it returns no errors." msgstr "`nova list` ãªã©ã®å˜ç´”ãªã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‚¨ãƒ©ãƒ¼ã‚’è¿”ã•ãªã„よã†ã«ã™ã‚‹ã“ã¨ã§ã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ­£å¸¸ã«èª­ã¿è¾¼ã¾ã‚ŒãŸã“ã¨ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:145 msgid "The OpenStack command line clients are required to run the `nova list` command. For more information on how to install them, please refer to `Install the OpenStack command-line clients `_." msgstr "`nova list` コマンドを実行ã™ã‚‹ã«ã¯ã€OpenStack コマンドラインクライアントãŒå¿…è¦ã§ã™ã€‚インストール方法ã®è©³ç´°ã¯ã€ã€Œ`Install the OpenStack command-line clients `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_dynamic_inventory.rst:147 msgid "You can test the OpenStack dynamic inventory script manually to confirm it is working as expected::" msgstr "OpenStack ã®å‹•的インベントリースクリプトを手動ã§ãƒ†ã‚¹ãƒˆã—ã¦ã€æƒ³å®šã©ãŠã‚Šã«æ©Ÿèƒ½ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:151 #: ../../rst/user_guide/intro_dynamic_inventory.rst:184 msgid "After a few moments you should see some JSON output with information about your compute instances." msgstr "ã—ã°ã‚‰ãã™ã‚‹ã¨ã€Compute インスタンスã«é–¢ã™ã‚‹æƒ…å ±ãŒå«ã¾ã‚Œã‚‹ JSON 出力ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:153 msgid "Once you confirm the dynamic inventory script is working as expected, you can tell Ansible to use the `openstack_inventory.py` script as an inventory file, as illustrated below:" msgstr "å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ãƒˆãŒæƒ³å®šã©ãŠã‚Šã«æ©Ÿèƒ½ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ãŸã‚‰ã€ä»¥ä¸‹ã®ã‚ˆã†ã« Ansible ㌠`openstack_inventory.py` スクリプトをインベントリーファイルã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:160 msgid "Implicit use of OpenStack inventory script" msgstr "OpenStack ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æš—黙的ãªä½¿ç”¨" #: ../../rst/user_guide/intro_dynamic_inventory.rst:162 msgid "Download the latest version of the OpenStack dynamic inventory script, make it executable and copy it to `/etc/ansible/hosts`:" msgstr "最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® OpenStack 動的インベントリースクリプトをダウンロードã—ã€å®Ÿè¡Œå¯èƒ½ã«ã—ã€ã“れを `/etc/ansible/hosts` ã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:170 msgid "Download the sample configuration file, modify it to suit your needs and copy it to `/etc/ansible/openstack.yml`:" msgstr "サンプル設定ファイルをダウンロードã—ã€å¿…è¦ã«å¿œã˜ã¦å¤‰æ›´ã—ã€ã“れを `/etc/ansible/openstack.yml` ã«ã‚³ãƒ”ーã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:178 msgid "You can test the OpenStack dynamic inventory script manually to confirm it is working as expected:" msgstr "OpenStack 動的インベントリースクリプトを手動ã§ãƒ†ã‚¹ãƒˆã—ã¦ã€æƒ³å®šã©ãŠã‚Šã«æ©Ÿèƒ½ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:187 msgid "Refreshing the cache" msgstr "ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®æ›´æ–°" #: ../../rst/user_guide/intro_dynamic_inventory.rst:189 msgid "Note that the OpenStack dynamic inventory script will cache results to avoid repeated API calls. To explicitly clear the cache, you can run the openstack_inventory.py (or hosts) script with the ``--refresh`` parameter:" msgstr "OpenStack 動的インベントリースクリプトã¯ã€API 呼ã³å‡ºã—ãŒç¹°ã‚Šè¿”ã—行ã‚れるã®ã‚’防ããŸã‚ã«ã€çµæžœã‚’キャッシュã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„ã€‚ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’æ˜Žç¤ºçš„ã«æ¶ˆåŽ»ã™ã‚‹ã«ã¯ã€``--refresh`` パラメーターを使用ã—㦠openstack_inventory.py (ã¾ãŸã¯ hosts) スクリプトを実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:198 msgid "Other inventory scripts" msgstr "ãã®ä»–ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—ト" #: ../../rst/user_guide/intro_dynamic_inventory.rst:200 msgid "In Ansible 2.10 and later, inventory scripts moved to their associated collections. Many are now in the `community.general scripts/inventory directory `_. We recommend you use :ref:`inventory_plugins` instead." msgstr "Ansible 2.10 以é™ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚¹ã‚¯ãƒªãƒ—トã¯é–¢é€£ã™ã‚‹ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»å‹•ã—ã¾ã—ãŸã€‚ç¾åœ¨ã€å¤šãã®ã‚¹ã‚¯ãƒªãƒ—ト㯠`community.general scripts/inventory directory `_ ã«ã‚りã¾ã™ã€‚代ã‚り㫠:ref:`inventory_plugins` を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:205 msgid "Using inventory directories and multiple inventory sources" msgstr "インベントリーディレクトリーãŠã‚ˆã³è¤‡æ•°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_dynamic_inventory.rst:207 msgid "If the location given to ``-i`` in Ansible is a directory (or as so configured in ``ansible.cfg``), Ansible can use multiple inventory sources at the same time. When doing so, it is possible to mix both dynamic and statically managed inventory sources in the same ansible run. Instant hybrid cloud!" msgstr "Ansible ã§ ``-i`` ã«æŒ‡å®šã•れる場所ãŒãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®å ´åˆ (ã¾ãŸã¯ ``ansible.cfg`` ã§ãã®ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆ)ã€Ansible ã¯è¤‡æ•°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚’åŒæ™‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ã“れを実行ã™ã‚‹å ´åˆã¯ã€åŒã˜ Ansible 実行ã§å‹•çš„ãŠã‚ˆã³é™çš„ã«ç®¡ç†ã•れã¦ã„るインベントリーソースを混在ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:211 msgid "In an inventory directory, executable files are treated as dynamic inventory sources and most other files as static sources. Files which end with any of the following are ignored:" msgstr "インベントリーディレクトリã§ã¯ã€å®Ÿè¡Œãƒ•ァイルã¯å‹•的インベントリーソースã¨ã—ã¦ã€ãã®ä»–ã®ã»ã¨ã‚“ã©ã®ãƒ•ァイルã¯é™çš„ソースã¨ã—ã¦æ‰±ã‚れã¾ã™ã€‚以下ã®ã„ãšã‚Œã‹ã§çµ‚ã‚るファイルã¯ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:217 msgid "You can replace this list with your own selection by configuring an ``inventory_ignore_extensions`` list in ``ansible.cfg``, or setting the :envvar:`ANSIBLE_INVENTORY_IGNORE` environment variable. The value in either case must be a comma-separated list of patterns, as shown above." msgstr "ã“ã®ä¸€è¦§ã¯ã€``ansible.cfg`` ã§ ``inventory_ignore_extensions`` 一覧を設定ã™ã‚‹ã‹ã€:envvar:`ANSIBLE_INVENTORY_IGNORE` 環境変数を設定ã—ã¦ç‹¬è‡ªã®é¸æŠžã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã„ãšã‚Œã®å€¤ã‚‚ã€ä¸Šè¨˜ã®ã‚ˆã†ã«ãƒ‘ターンã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ä¸€è¦§ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:219 msgid "Any ``group_vars`` and ``host_vars`` subdirectories in an inventory directory are interpreted as expected, making inventory directories a powerful way to organize different sets of configurations. See :ref:`using_multiple_inventory_sources` for more information." msgstr "インベントリーディレクトリー㮠``group_vars`` サブディレクトリーãŠã‚ˆã³ ``host_vars`` ã‚µãƒ–ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯æƒ³å®šã©ãŠã‚Šã«è§£é‡ˆã•れるãŸã‚ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã•ã¾ã–ã¾ãªæ§‹æˆã‚»ãƒƒãƒˆã‚’æ•´ç†ã™ã‚‹ãŸã‚ã®å¼·åŠ›ãªæ–¹æ³•ã«ãªã‚Šã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`using_multiple_inventory_sources`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_dynamic_inventory.rst:224 msgid "Static groups of dynamic groups" msgstr "動的グループã®é™çš„グループ" #: ../../rst/user_guide/intro_dynamic_inventory.rst:226 msgid "When defining groups of groups in the static inventory file, the child groups must also be defined in the static inventory file, otherwise ansible returns an error. If you want to define a static group of dynamic child groups, define the dynamic groups as empty in the static inventory file. For example:" msgstr "é™çš„インベントリーファイルã§ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚°ãƒ«ãƒ¼ãƒ—を定義ã™ã‚‹å ´åˆã¯ã€å­ã‚°ãƒ«ãƒ¼ãƒ—ã‚‚é™çš„インベントリーファイルã§å®šç¾©ã•れã¦ã„ãªã‘れã°ã€Ansible ã¯ã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚å‹•çš„ãªå­ã‚°ãƒ«ãƒ¼ãƒ—ã®é™çš„グループを定義ã™ã‚‹å ´åˆã¯ã€é™çš„インベントリーファイルã§å‹•的グループを空ã«å®šç¾©ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_dynamic_inventory.rst:244 #: ../../rst/user_guide/intro_getting_started.rst:185 msgid ":ref:`intro_inventory`" msgstr ":ref:`intro_inventory`" #: ../../rst/user_guide/intro_dynamic_inventory.rst:245 msgid "All about static inventory files" msgstr "é™çš„インベントリーファイルã®è©³ç´°" #: ../../rst/user_guide/intro_getting_started.rst:5 msgid "Getting Started" msgstr "ã¯ã˜ã‚ã«" #: ../../rst/user_guide/intro_getting_started.rst:7 msgid "Now that you have read the :ref:`installation guide` and installed Ansible on a control node, you are ready to learn how Ansible works. A basic Ansible command or playbook:" msgstr "「:ref:`インストールガイド`ã€ã‚’読ã¿ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ã« Ansible をインストールã—ãŸã‚‰ã€Ansible ã®ä»•組ã¿ã‚’å­¦ã¶æº–å‚™ãŒã§ãã¾ã—ãŸã€‚基本的㪠Ansible ã®ã‚³ãƒžãƒ³ãƒ‰ã‚„ Playbook ã§ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:9 msgid "selects machines to execute against from inventory" msgstr "インベントリーã‹ã‚‰å®Ÿè¡Œã™ã‚‹ãƒžã‚·ãƒ³ã‚’é¸æŠžã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:10 msgid "connects to those machines (or network devices, or other managed nodes), usually over SSH" msgstr "通常㯠SSH 経由ã§ã€ã“ã®ãƒžã‚·ãƒ³ (ã‚‚ã—ãã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã¾ãŸã¯ãã®ä»–ã®ç®¡ç†å¯¾è±¡ãƒŽãƒ¼ãƒ‰) ã«æŽ¥ç¶šã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:11 msgid "copies one or more modules to the remote machines and starts execution there" msgstr "1 ã¤ä»¥ä¸Šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’リモートマシンã«ã‚³ãƒ”ーã—ã€ãã“ã§å®Ÿè¡Œã‚’é–‹å§‹ã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:13 msgid "Ansible can do much more, but you should understand the most common use case before exploring all the powerful configuration, deployment, and orchestration features of Ansible. This page illustrates the basic process with a simple inventory and an ad hoc command. Once you understand how Ansible works, you can read more details about :ref:`ad hoc commands`, organize your infrastructure with :ref:`inventory`, and harness the full power of Ansible with :ref:`playbooks`." msgstr "Ansible ã¯ã•らã«å¤šãã®ã“ã¨ãŒã§ãã¾ã™ãŒã€Ansible ã®å¼·åŠ›ãªè¨­å®šã€ãƒ‡ãƒ—ロイメントã€ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³æ©Ÿèƒ½ã‚’ã™ã¹ã¦è©¦ã™å‰ã«ã€æœ€ã‚‚一般的ãªä½¿ç”¨ä¾‹ã‚’ç†è§£ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ç°¡å˜ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦ã€åŸºæœ¬çš„ãªãƒ—ロセスを説明ã—ã¦ã„ã¾ã™ã€‚Ansible ã®ä»•組ã¿ã‚’ç†è§£ã—ãŸã‚‰ã€:ref:`アドホックコマンド` ã®è©³ç´°ã‚’読ã¿ã€:ref:`インベントリー` ã§ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’æ•´ç†ã—ã€:ref:`Playbook` ã§ Ansible ã®æ©Ÿèƒ½ã‚’最大é™ã«æ´»ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:19 msgid "Selecting machines from inventory" msgstr "インベントリーã‹ã‚‰ã®ãƒžã‚·ãƒ³ã®é¸æŠž" #: ../../rst/user_guide/intro_getting_started.rst:21 msgid "Ansible reads information about which machines you want to manage from your inventory. Although you can pass an IP address to an ad hoc command, you need inventory to take advantage of the full flexibility and repeatability of Ansible." msgstr "Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰ç®¡ç†ã—ãŸã„ãƒžã‚·ãƒ³ã®æƒ…報を読ã¿è¾¼ã¿ã¾ã™ã€‚アドホックコマンド㫠IP アドレスを渡ã™ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€Ansible ã®æŸ”軟性ã¨å†ç¾æ€§ã‚’最大é™ã«æ´»ç”¨ã™ã‚‹ã«ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:24 msgid "Action: create a basic inventory" msgstr "アクション: 基本的ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ä½œæˆ" #: ../../rst/user_guide/intro_getting_started.rst:25 msgid "For this basic inventory, edit (or create) ``/etc/ansible/hosts`` and add a few remote systems to it. For this example, use either IP addresses or FQDNs:" msgstr "ã“ã®åŸºæœ¬çš„ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ã¯ã€``/etc/ansible/hosts`` を編集 (ã¾ãŸã¯ä½œæˆ) ã—ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã‚’ã„ãã¤ã‹è¿½åŠ ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€IP アドレスã¾ãŸã¯ FQDN を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:34 #: ../../rst/user_guide/intro_getting_started.rst:49 #: ../../rst/user_guide/intro_getting_started.rst:150 msgid "Beyond the basics" msgstr "中級編" #: ../../rst/user_guide/intro_getting_started.rst:35 msgid "Your inventory can store much more than IPs and FQDNs. You can create :ref:`aliases`, set variable values for a single host with :ref:`host vars`, or set variable values for multiple hosts with :ref:`group vars`." msgstr "インベントリーã«ã¯ã€IP ã‚„ FQDN 以外ã«ã‚‚多ãã®æƒ…報をä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`エイリアス` を作æˆã—ãŸã‚Šã€:ref:`host 変数` ã§å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã«å¤‰æ•°å€¤ã‚’設定ã—ãŸã‚Šã€:ref:`group 変数` ã§è¤‡æ•°ã®ãƒ›ã‚¹ãƒˆã«å¤‰æ•°å€¤ã‚’設定ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:40 msgid "Connecting to remote nodes" msgstr "リモートノードã¸ã®æŽ¥ç¶š" #: ../../rst/user_guide/intro_getting_started.rst:42 msgid "Ansible communicates with remote machines over the `SSH protocol `_. By default, Ansible uses native OpenSSH and connects to remote machines using your current user name, just as SSH does." msgstr "Ansible 㯠`SSH プロトコル `_ ã§ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¨é€šä¿¡ã—ã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ã® OpenSSH を使用ã—ã€SSH ã¨åŒæ§˜ã«ç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åを使用ã—ã¦ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«æŽ¥ç¶šã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:45 msgid "Action: check your SSH connections" msgstr "アクション: SSH 接続ã®ç¢ºèª" #: ../../rst/user_guide/intro_getting_started.rst:46 msgid "Confirm that you can connect using SSH to all the nodes in your inventory using the same username. If necessary, add your public SSH key to the ``authorized_keys`` file on those systems." msgstr "インベントリー内ã®ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ã«ã€åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ SSH 接続ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€ã“れらã®ã‚·ã‚¹ãƒ†ãƒ ã® ``authorized_keys`` ファイルã«è‡ªåˆ†ã®å…¬é–‹ SSH éµã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:50 msgid "You can override the default remote user name in several ways, including:" msgstr "次ã®ã‚ˆã†ãªã„ãã¤ã‹ã®æ–¹æ³•ã§ã€ãƒ‡ãƒ•ォルトã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼åを上書ãã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:52 msgid "passing the ``-u`` parameter at the command line" msgstr "コマンドライン㧠``-u`` パラメーターを渡ã™" #: ../../rst/user_guide/intro_getting_started.rst:53 msgid "setting user information in your inventory file" msgstr "インベントリーファイルã«ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を設定ã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:54 msgid "setting user information in your configuration file" msgstr "設定ファイルã«ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を設定ã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:55 msgid "setting environment variables" msgstr "追加ã®ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹" #: ../../rst/user_guide/intro_getting_started.rst:57 msgid "See :ref:`general_precedence_rules` for details on the (sometimes unintuitive) precedence of each method of passing user information. You can read more about connections in :ref:`connections`." msgstr "ユーザー情報を渡ã™å„メソッドã®å„ªå…ˆé †ä½ (æ„図ã—ãªã„å ´åˆã‚‚ã‚りã¾ã™) ã®è©³ç´°ã¯ã€ã€Œ:ref:`general_precedence_rules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。接続ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`connections`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_getting_started.rst:60 msgid "Copying and executing modules" msgstr "モジュールã®ã‚³ãƒ”ーãŠã‚ˆã³å®Ÿè¡Œ" #: ../../rst/user_guide/intro_getting_started.rst:62 msgid "Once it has connected, Ansible transfers the modules required by your command or playbook to the remote machine(s) for execution." msgstr "接続後ã€Ansible ã¯ã‚³ãƒžãƒ³ãƒ‰ã¾ãŸã¯ Playbook ãŒå¿…è¦ã¨ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã«è»¢é€ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:65 msgid "Action: run your first Ansible commands" msgstr "アクション: 最åˆã® Ansible コマンドã®å®Ÿè¡Œ" #: ../../rst/user_guide/intro_getting_started.rst:66 msgid "Use the ping module to ping all the nodes in your inventory:" msgstr "ping モジュールを使用ã—ã¦ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ã«å¯¾ã—㦠ping を実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:72 #: ../../rst/user_guide/intro_getting_started.rst:92 msgid "You should see output for each host in your inventory, similar to this:" msgstr "次ã®ã‚ˆã†ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®å„ホストã®å‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:84 msgid "You can use ``-u`` as one way to specify the user to connect as, by default Ansible uses SSH, which defaults to the 'current user'." msgstr "``-u`` ã¯ã€æŽ¥ç¶šã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’指定ã™ã‚‹ 1 ã¤ã®æ–¹æ³•ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚デフォルトã§ã¯ã€Ansible 㯠SSH を使用ã—ã¾ã™ãŒã€SSH ã§ã¯ãƒ‡ãƒ•ォルトã§ã€Œç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ãŒæŒ‡å®šã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:86 msgid "Now run a live command on all of your nodes:" msgstr "全ノードã§ãƒ©ã‚¤ãƒ–コマンドを実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:100 msgid "Action: Run your first playbook" msgstr "アクション: 最åˆã® Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/intro_getting_started.rst:102 msgid "Playbooks are used to pull together tasks into reusable units." msgstr "Playbook ã¯ã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’å†åˆ©ç”¨å¯èƒ½ãªå˜ä½ã«ãƒ—ルã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:104 msgid "Ansible does not store playbooks for you; they are simply YAML documents that you store and manage, passing them to Ansible to run as needed." msgstr "Ansible ã¯ã€Playbook ã‚’ä¿å­˜ã—ã¾ã›ã‚“。Playbook ã¯ã€ä¿å­˜ãŠã‚ˆã³ç®¡ç†ã™ã‚‹å˜ç´”㪠YAML ドキュメントã§ã‚りã€å¿…è¦ã«å¿œã˜ã¦å®Ÿè¡Œã™ã‚‹ãŸã‚ã« Ansible ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:106 msgid "In a directory of your choice you can create your first playbook in a file called mytask.yml:" msgstr "ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã¯ã€mytask.yml ã¨ã„ã†åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«æœ€åˆã® Playbook を作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:117 msgid "You can run this command as follows:" msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:123 msgid "and may see output like this:" msgstr "ã¾ãŸã€ä»¥ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:147 msgid "Read on to learn more about controlling which nodes your playbooks execute on, more sophisticated tasks, and the meaning of the output." msgstr "Playbook ãŒå®Ÿè¡Œã™ã‚‹ãƒŽãƒ¼ãƒ‰ã€ã‚ˆã‚Šé«˜åº¦ãªã‚¿ã‚¹ã‚¯ã€ãŠã‚ˆã³å‡ºåŠ›ã®æ„味を把æ¡ã™ã‚‹ã«ã¯ã€ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_getting_started.rst:151 msgid "By default Ansible uses SFTP to transfer files. If the machine or device you want to manage does not support SFTP, you can switch to SCP mode in :ref:`intro_configuration`. The files are placed in a temporary directory and executed from there." msgstr "Ansible ã®ãƒ‡ãƒ•ォルトã§ã¯ã€ãƒ•ァイルã®è»¢é€ã« SFTP を使用ã—ã¾ã™ã€‚管ç†ã™ã‚‹ãƒžã‚·ãƒ³ã‚„デãƒã‚¤ã‚¹ãŒ SFTP をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å ´åˆã¯ã€:ref:`intro_configuration` ã§ SCP モードã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ファイルã¯ä¸€æ™‚ディレクトリーã«ç½®ã‹ã‚Œã€ãã“ã‹ã‚‰å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:153 msgid "If you need privilege escalation (sudo and similar) to run a command, pass the ``become`` flags:" msgstr "コマンドを実行ã™ã‚‹æ¨©é™æ˜‡æ ¼ (sudo ãªã©) ãŒå¿…è¦ãªå ´åˆã¯ã€``become`` フラグを渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:164 msgid "You can read more about privilege escalation in :ref:`become`." msgstr "権é™ã®æ˜‡æ ¼ã®è©³ç´°ã¯ã€ã€Œ:ref:`become`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_getting_started.rst:166 msgid "Congratulations! You have contacted your nodes using Ansible. You used a basic inventory file and an ad hoc command to direct Ansible to connect to specific remote nodes, copy a module file there and execute it, and return output. You have a fully working infrastructure." msgstr "ã“れã§ã€Ansible を使用ã—ã¦ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã§ãã¾ã—ãŸã€‚基本的ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¨ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¦ã€Ansible ãŒç‰¹å®šã®ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã€ãã“ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ•ァイルをコピーã—ã¦å®Ÿè¡Œã—ã€å‡ºåŠ›ã‚’è¿”ã™ã‚ˆã†ã«æŒ‡ç¤ºã—ã¾ã—ãŸã€‚ã“れã§å®Œå…¨ã«æ©Ÿèƒ½ã™ã‚‹ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ãŒå®Œæˆã—ã¾ã—ãŸã€‚" #: ../../rst/user_guide/intro_getting_started.rst:169 msgid "Resources" msgstr "リソース" #: ../../rst/user_guide/intro_getting_started.rst:170 msgid "`Product Demos `_" msgstr "`Product Demos `_" #: ../../rst/user_guide/intro_getting_started.rst:171 msgid "`Katakoda `_" msgstr "`Katakoda `_" #: ../../rst/user_guide/intro_getting_started.rst:172 msgid "`Workshops `_" msgstr "`Workshops `_" #: ../../rst/user_guide/intro_getting_started.rst:173 msgid "`Ansible Examples `_" msgstr "`Ansible Examples `_" #: ../../rst/user_guide/intro_getting_started.rst:174 msgid "`Ansible Baseline `_" msgstr "`Ansible Baseline `_" #: ../../rst/user_guide/intro_getting_started.rst:177 msgid "Next steps" msgstr "次ã®ã‚¹ãƒ†ãƒƒãƒ—" #: ../../rst/user_guide/intro_getting_started.rst:178 msgid "Next you can read about more real-world cases in :ref:`intro_adhoc`, explore what you can do with different modules, or read about the Ansible :ref:`working_with_playbooks` language. Ansible is not just about running commands, it also has powerful configuration management and deployment features." msgstr "次ã«ã€:ref:`intro_adhoc` ã®ã‚ˆã‚Šå¤šãã®å®Ÿä¾‹ã‚’読んã ã‚Šã€ã•ã¾ã–ã¾ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã§ãã‚‹ã“ã¨ã‚’調ã¹ãŸã‚Šã€Ansible :ref:`working_with_playbooks` ã®è¨€èªžã«ã¤ã„ã¦èª­ã‚“ã ã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€å˜ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã ã‘ã§ãªãã€å¼·åŠ›ãªæ§‹æˆç®¡ç†æ©Ÿèƒ½ãŠã‚ˆã³ãƒ‡ãƒ—ロイ機能を備ãˆã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_getting_started.rst:186 msgid "More information about inventory" msgstr "インベントリーã®è©³ç´°æƒ…å ±" #: ../../rst/user_guide/intro_getting_started.rst:190 msgid "Learning Ansible's configuration management language" msgstr "Ansible ã®è¨­å®šç®¡ç†è¨€èªžã®æ¦‚è¦" #: ../../rst/user_guide/intro_getting_started.rst:191 msgid "`Ansible Demos `_" msgstr "`Ansible Demos `_" #: ../../rst/user_guide/intro_getting_started.rst:192 msgid "Demonstrations of different Ansible usecases" msgstr "å„種 Ansible ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã®ãƒ‡ãƒ¢" #: ../../rst/user_guide/intro_getting_started.rst:193 msgid "`RHEL Labs `_" msgstr "`RHEL Labs `_" #: ../../rst/user_guide/intro_getting_started.rst:194 msgid "Labs to provide further knowledge on different topics" msgstr "ã•ã¾ã–ã¾ãªãƒˆãƒ”ックã§ã®è©³ç´°ãªçŸ¥è­˜ã‚’æä¾›ã™ã‚‹ãƒ©ãƒœ" #: ../../rst/user_guide/intro_inventory.rst:6 msgid "How to build your inventory" msgstr "ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ§‹ç¯‰æ–¹æ³•" #: ../../rst/user_guide/intro_inventory.rst:8 msgid "Ansible works against multiple managed nodes or \"hosts\" in your infrastructure at the same time, using a list or group of lists known as inventory. Once your inventory is defined, you use :ref:`patterns ` to select the hosts or groups you want Ansible to run against." msgstr "Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨å‘¼ã°ã‚Œã‚‹ãƒªã‚¹ãƒˆã€ã¾ãŸã¯ãƒªã‚¹ãƒˆã®ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¦ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã«ã‚る複数ã®ç®¡ç†ãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ã€Œãƒ›ã‚¹ãƒˆã€ã«å¯¾ã—ã¦åŒæ™‚ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚インベントリーãŒå®šç¾©ã•れãŸã‚‰ã€:ref:`パターン ` を使用ã—㦠Ansible ã§å®Ÿè¡Œã™ã‚‹ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:10 msgid "The default location for inventory is a file called ``/etc/ansible/hosts``. You can specify a different inventory file at the command line using the ``-i `` option. You can also use multiple inventory files at the same time as described in :ref:`using_multiple_inventory_sources`, and/or pull inventory from dynamic or cloud sources or different formats (YAML, ini, and so on), as described in :ref:`intro_dynamic_inventory`. Introduced in version 2.4, Ansible has :ref:`inventory_plugins` to make this flexible and customizable." msgstr "インベントリーã®ãƒ‡ãƒ•ォルトã®å ´æ‰€ã¯ã€``/etc/ansible/hosts`` ã¨å‘¼ã°ã‚Œã‚‹ãƒ•ァイルã§ã™ã€‚``-i `` オプションを使用ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§åˆ¥ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを指定ã§ãã¾ã™ã€‚「:ref:`intro_dynamic_inventory`ã€ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€:ref:`using_multiple_inventory_sources` ã§èª¬æ˜Žã•れã¦ã„る複数ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åŒæ™‚ã«ä½¿ç”¨ã—ãŸã‚Šã€å‹•çš„ã¾ãŸã¯ã‚¯ãƒ©ã‚¦ãƒ‰ã‚½ãƒ¼ã‚¹ã¾ãŸã¯ç•°ãªã‚‹å½¢å¼ (YAMLã€ini ãªã©) ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’プルã—ãŸã‚Šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4 ã§å°Žå…¥ã•れ㟠Ansible ã«ã¯ã€ã“ã®æŸ”軟ã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºå¯èƒ½ãª :ref:`inventory_plugins` ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:19 msgid "Inventory basics: formats, hosts, and groups" msgstr "インベントリーã®åŸºæœ¬: å½¢å¼ã€ãƒ›ã‚¹ãƒˆã€ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/intro_inventory.rst:21 msgid "The inventory file can be in one of many formats, depending on the inventory plugins you have. The most common formats are INI and YAML. A basic INI ``/etc/ansible/hosts`` might look like this:" msgstr "インベントリーファイルã¯ã€æ‰€æœ‰ã™ã‚‹ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«å¿œã˜ã¦ã€å¤šãã®å½¢å¼ã®ã„ãšã‚Œã‹ã«ãªã‚Šã¾ã™ã€‚最も一般的ãªå½¢å¼ã¯ INI ãŠã‚ˆã³ YAML ã§ã™ã€‚基本的㪠INI ``/etc/ansible/hosts`` ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:37 msgid "The headings in brackets are group names, which are used in classifying hosts and deciding what hosts you are controlling at what times and for what purpose. Group names should follow the same guidelines as :ref:`valid_variable_names`." msgstr "括弧内ã®è¦‹å‡ºã—ã¯ã‚°ãƒ«ãƒ¼ãƒ—åã§ã€ãƒ›ã‚¹ãƒˆã‚’分類ã—ã€ã©ã®æ™‚点ã§ã€ã©ã®ã‚ˆã†ãªç›®çš„ã§ã€ã©ã®ãƒ›ã‚¹ãƒˆã‚’制御ã™ã‚‹ã‹ã‚’決定ã™ã‚‹ã®ã«ä½¿ç”¨ã•れã¾ã™ã€‚グループåã¯ã€:ref:`valid_variable_names` ã¨åŒã˜ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:41 msgid "Here's that same basic inventory file in YAML format:" msgstr "以下ã¯ã€åŒã˜åŸºæœ¬çš„ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイル㮠YAML å½¢å¼ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:62 msgid "Default groups" msgstr "デフォルトã®ã‚°ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/intro_inventory.rst:64 msgid "There are two default groups: ``all`` and ``ungrouped``. The ``all`` group contains every host. The ``ungrouped`` group contains all hosts that don't have another group aside from ``all``. Every host will always belong to at least 2 groups (``all`` and ``ungrouped`` or ``all`` and some other group). Though ``all`` and ``ungrouped`` are always present, they can be implicit and not appear in group listings like ``group_names``." msgstr "デフォルトグループ㌠2 㤠(``all`` ãŠã‚ˆã³ ``ungrouped``) ã‚りã¾ã™ã€‚``all`` グループã«ã¯ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``ungrouped`` グループã¯ã€``all`` 以外ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’æŒãŸãªã„ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’å«ã¿ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã¯ã€å¸¸ã«å°‘ãªãã¨ã‚‚ 2 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ— (``all`` 㨠``ungrouped``ã€ã¾ãŸã¯ ``all`` ã¨ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—) ã«å±žã—ã¦ã„ã¾ã™ã€‚``all`` 㨠``ungrouped`` ã¯å¸¸ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ãŒã€``group_names`` ã®ã‚ˆã†ã«ã‚°ãƒ«ãƒ¼ãƒ—一覧ã«è¡¨ç¤ºã•れãªã„暗黙的ãªã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:71 msgid "Hosts in multiple groups" msgstr "複数グループ内ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_inventory.rst:73 msgid "You can (and probably will) put each host in more than one group. For example a production webserver in a datacenter in Atlanta might be included in groups called [prod] and [atlanta] and [webservers]. You can create groups that track:" msgstr "å„ホストを複数ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«é…ç½®ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Atlanta ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã®å®Ÿç¨¼åƒ Web サーãƒãƒ¼ã¯ã€[prod]ã€[atlanta]ã€ãŠã‚ˆã³ [webservers] ã¨å‘¼ã°ã‚Œã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã«è¿½åŠ ã§ãã¾ã™ã€‚以下を追跡ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:75 msgid "What - An application, stack or microservice (for example, database servers, web servers, and so on)." msgstr "ãªã«ã‚’ - アプリケーションã€ã‚¹ã‚¿ãƒƒã‚¯ã€ã¾ãŸã¯ãƒžã‚¤ã‚¯ãƒ­ã‚µãƒ¼ãƒ“ス (ãŸã¨ãˆã°ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã€Web サーãƒãƒ¼ãªã©)。" #: ../../rst/user_guide/intro_inventory.rst:76 msgid "Where - A datacenter or region, to talk to local DNS, storage, and so on (for example, east, west)." msgstr "ã©ã“ã§ - データセンターã¾ãŸã¯ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€ãƒ­ãƒ¼ã‚«ãƒ«ã® DNS やストレージãªã©ã¨é€šä¿¡ã—ã¾ã™ (例: eastã€west)。" #: ../../rst/user_guide/intro_inventory.rst:77 msgid "When - The development stage, to avoid testing on production resources (for example, prod, test)." msgstr "ã„㤠- 開発段階ã§ã€å®Ÿç¨¼åƒãƒªã‚½ãƒ¼ã‚¹ã§ã®ãƒ†ã‚¹ãƒˆã‚’回é¿ã™ã‚‹ãŸã‚ (例: prodã€test)。" #: ../../rst/user_guide/intro_inventory.rst:79 msgid "Extending the previous YAML inventory to include what, when, and where would look like:" msgstr "以å‰ã® YAML インベントリーを拡張ã—ã¦ã€ä¸Šè¿°ã®ã€Œã„ã¤ã€ã©ã“ã§ã€ãªã«ã‚’ã€ãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:115 msgid "You can see that ``one.example.com`` exists in the ``dbservers``, ``east``, and ``prod`` groups." msgstr "``one.example.com`` ㌠``dbservers``ã€``east``ã€ãŠã‚ˆã³ ``prod`` グループã«å­˜åœ¨ã™ã‚‹ã“ã¨ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:117 msgid "You can also use nested groups to simplify ``prod`` and ``test`` in this inventory, for the same result:" msgstr "ã¾ãŸã€å…¥ã‚Œå­ã«ãªã£ãŸã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¦ã€ã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ ``prod`` 㨠``test`` を簡素化ã—ã¦ã‚‚ã€åŒã˜çµæžœã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:150 msgid "You can find more examples on how to organize your inventories and group your hosts in :ref:`inventory_setup_examples`." msgstr "インベントリーを整ç†ã—ã€ãƒ›ã‚¹ãƒˆã‚’グループ化ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`inventory_setup_examples`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:153 msgid "Adding ranges of hosts" msgstr "ホスト範囲ã®è¿½åŠ " #: ../../rst/user_guide/intro_inventory.rst:155 msgid "If you have a lot of hosts with a similar pattern, you can add them as a range rather than listing each hostname separately:" msgstr "åŒæ§˜ã®ãƒ‘ターンをæŒã¤ãƒ›ã‚¹ãƒˆãŒå¤šæ•°ã‚ã‚‹å ´åˆã¯ã€å„ホストåを個別ã«è¡¨ç¤ºã™ã‚‹ã®ã§ã¯ãªãã€ãƒ›ã‚¹ãƒˆã‚’範囲ã¨ã—ã¦è¿½åŠ ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:157 #: ../../rst/user_guide/intro_inventory.rst:175 #: ../../rst/user_guide/intro_inventory.rst:256 #: ../../rst/user_guide/intro_inventory.rst:326 msgid "In INI:" msgstr "INI ã®å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:164 #: ../../rst/user_guide/intro_inventory.rst:182 #: ../../rst/user_guide/intro_inventory.rst:218 #: ../../rst/user_guide/intro_inventory.rst:262 #: ../../rst/user_guide/intro_inventory.rst:304 #: ../../rst/user_guide/intro_inventory.rst:354 msgid "In YAML:" msgstr "YAML ã®å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:173 msgid "You can specify a stride (increments between sequence numbers) when defining a numeric range of hosts:" msgstr "ãƒ›ã‚¹ãƒˆã®æ•°å€¤ç¯„囲を定義ã™ã‚‹éš›ã«ã€stride (シーケンス番å·é–“ã®å¢—分) を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:191 msgid "For numeric patterns, leading zeros can be included or removed, as desired. Ranges are inclusive. You can also define alphabetic ranges:" msgstr "数値ã®ãƒ‘ターンã§ã¯ã€å¿…è¦ã«å¿œã˜ã¦å…ˆé ­ã«ã‚¼ãƒ­ã‚’å«ã‚ã‚‹ã‹ã€ã¾ãŸã¯å‰Šé™¤ã§ãã¾ã™ã€‚範囲ã¯åŒ…å«çš„範囲も定義ã§ãã¾ã™ã€‚ã¾ãŸã€ã‚¢ãƒ«ãƒ•ァベットã®ç¯„囲も定義ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:201 msgid "Adding variables to inventory" msgstr "インベントリーã¸ã®å¤‰æ•°ã®è¿½åŠ " #: ../../rst/user_guide/intro_inventory.rst:203 msgid "You can store variable values that relate to a specific host or group in inventory. To start with, you may add variables directly to the hosts and groups in your main inventory file. As you add more and more managed nodes to your Ansible inventory, however, you will likely want to store variables in separate host and group variable files. See :ref:`define_variables_in_inventory` for details." msgstr "インベントリー内ã®ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã‚„グループã«é–¢é€£ã™ã‚‹å¤‰æ•°å€¤ã‚’ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚最åˆã®ã†ã¡ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã®ãƒ›ã‚¹ãƒˆã‚„グループã«ç›´æŽ¥å¤‰æ•°ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€Ansible インベントリーã«ç®¡ç†ãƒŽãƒ¼ãƒ‰ã‚’ã©ã‚“ã©ã‚“追加ã—ã¦ã„ãã¨ã€å¤‰æ•°ã‚’ホストやグループã®å¤‰æ•°ãƒ•ァイルã«åˆ†ã‘ã¦ä¿å­˜ã—ãŸããªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚詳細ã¯ã€Œ:ref:`define_variables_in_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:208 msgid "Assigning a variable to one machine: host variables" msgstr "ã‚るマシンã¸ã®å¤‰æ•°ã®å‰²ã‚Šå½“ã¦: ホスト変数" #: ../../rst/user_guide/intro_inventory.rst:210 msgid "You can easily assign a variable to a single host, then use it later in playbooks. In INI:" msgstr "1 å°ã®ãƒ›ã‚¹ãƒˆã«å¤‰æ•°ã‚’ç°¡å˜ã«å‰²ã‚Šå½“ã¦ã‚‹ã¨ã€å¾Œã§ Playbook ã§ä½¿ç”¨ã§ãã¾ã™ã€‚INI ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:231 msgid "Unique values like non-standard SSH ports work well as host variables. You can add them to your Ansible inventory by adding the port number after the hostname with a colon:" msgstr "éžæ¨™æº–ã® SSH ãƒãƒ¼ãƒˆã®ã‚ˆã†ãªä¸€æ„ãªå€¤ã¯ã€ãƒ›ã‚¹ãƒˆå¤‰æ•°ã¨ã—ã¦ã†ã¾ã機能ã—ã¾ã™ã€‚ホストåã®å¾Œã«ã‚³ãƒ­ãƒ³ã‚’付ã‘ã¦ãƒãƒ¼ãƒˆç•ªå·ã‚’追加ã™ã‚‹ã“ã¨ã§ã€Ansible インベントリーã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:237 msgid "Connection variables also work well as host variables:" msgstr "接続変数もホスト変数ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:247 msgid "If you list non-standard SSH ports in your SSH config file, the ``openssh`` connection will find and use them, but the ``paramiko`` connection will not." msgstr "SSH 設定ファイル内ã«éžæ¨™æº–ã® SSH ãƒãƒ¼ãƒˆã®ä¸€è¦§ã‚’表示ã—ãŸå ´åˆã€``openssh`` 接続ã¯ãã®ãƒãƒ¼ãƒˆã‚’見ã¤ã‘ã¦ä½¿ç”¨ã—ã¾ã™ãŒã€``paramiko`` 接続ã¯è¡Œã‚れã¾ã›ã‚“。" #: ../../rst/user_guide/intro_inventory.rst:252 msgid "Inventory aliases" msgstr "インベントリーエイリアス" #: ../../rst/user_guide/intro_inventory.rst:254 msgid "You can also define aliases in your inventory:" msgstr "エイリアスをインベントリーã«å®šç¾©ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:272 msgid "In the above example, running Ansible against the host alias \"jumper\" will connect to 192.0.2.50 on port 5555. See :ref:`behavioral inventory parameters ` to further customize the connection to hosts." msgstr "上記ã®ä¾‹ã§ã¯ã€ãƒ›ã‚¹ãƒˆã®åˆ¥å「jumperã€ã«å¯¾ã—㦠Ansible を実行ã™ã‚‹ã¨ã€ãƒãƒ¼ãƒˆ 5555 ã® 192.0.2.50 ã«æŽ¥ç¶šã•れã¾ã™ã€‚ホストã¸ã®æŽ¥ç¶šã‚’ã•らã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã«ã¯ã€ã€Œ:ref:`動作用ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‘ラメーター `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:275 msgid "Values passed in the INI format using the ``key=value`` syntax are interpreted differently depending on where they are declared:" msgstr "``key=value`` 構文を使用ã—㦠INI å½¢å¼ã§æ¸¡ã•れる値ãŒè§£é‡ˆã•れる方法ã¯ã€å®£è¨€ã•れる場所ã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:277 msgid "When declared inline with the host, INI values are interpreted as Python literal structures (strings, numbers, tuples, lists, dicts, booleans, None). Host lines accept multiple ``key=value`` parameters per line. Therefore they need a way to indicate that a space is part of a value rather than a separator." msgstr "ホストã®ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã§å®£è¨€ã™ã‚‹ã¨ã€INI 値㯠Python㮠リテラル構造 (æ–‡å­—åˆ—ã€æ•°å€¤ã€ã‚¿ãƒ—ルã€ãƒªã‚¹ãƒˆã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã€ãƒ–ール値ã€ãªã—) ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚ホストã®è¡Œã¯ã€1 行ã«ã¤ã複数㮠``key=value`` パラメーターをå—ã‘付ã‘ã¾ã™ã€‚ãã®ãŸã‚ã€ã‚¹ãƒšãƒ¼ã‚¹ãŒåŒºåˆ‡ã‚Šæ–‡å­—ã§ã¯ãªã値ã®ä¸€éƒ¨ã§ã‚ã‚‹ã“ã¨ã‚’ç¤ºã™æ–¹æ³•ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:279 msgid "When declared in a ``:vars`` section, INI values are interpreted as strings. For example ``var=FALSE`` would create a string equal to 'FALSE'. Unlike host lines, ``:vars`` sections accept only a single entry per line, so everything after the ``=`` must be the value for the entry." msgstr "``:vars`` セクションã§å®£è¨€ã™ã‚‹ã¨ã€INI ã®å€¤ã¯æ–‡å­—列ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€``var=FALSE`` 㯠FALSE ã¨ç­‰ã—ã„æ–‡å­—列を作æˆã—ã¾ã™ã€‚ホスト行ã¨ã¯ç•°ãªã‚Šã€``:vars`` セクションã¯è¡Œã”ã¨ã« 1 ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã¿ã‚’許å¯ã™ã‚‹ãŸã‚ã€``=`` ã®å¾Œã«ç¶šãã™ã¹ã¦ã®ã‚‚ã®ãŒã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:281 msgid "If a variable value set in an INI inventory must be a certain type (for example, a string or a boolean value), always specify the type with a filter in your task. Do not rely on types set in INI inventories when consuming variables." msgstr "INI インベントリーã«è¨­å®šã•れã¦ã„る変数ã®å€¤ãŒç‰¹å®šã®åž‹ (文字列やブール値ãªã©) ã§ãªã‘れã°ãªã‚‰ãªã„å ´åˆã¯ã€å¿…ãšã‚¿ã‚¹ã‚¯ã®ãƒ•ィルターã§åž‹ã‚’指定ã—ã¦ãã ã•ã„。変数を使用ã™ã‚‹éš›ã«ã€INI インベントリーã«è¨­å®šã•れã¦ã„ã‚‹åž‹ã«é ¼ã‚‰ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:283 msgid "Consider using YAML format for inventory sources to avoid confusion on the actual type of a variable. The YAML inventory plugin processes variable values consistently and correctly." msgstr "変数ã®å®Ÿéš›ã®ã‚¿ã‚¤ãƒ—ã«é–¢ã™ã‚‹æ··ä¹±ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã« YAML å½¢å¼ã‚’使用ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。YAML インベントリープラグインã¯å¤‰æ•°ã®å€¤ã‚’一貫ã—ã¦ã€æ­£ã—ã処ç†ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:285 msgid "Generally speaking, this is not the best way to define variables that describe your system policy. Setting variables in the main inventory file is only a shorthand. See :ref:`splitting_out_vars` for guidelines on storing variable values in individual files in the 'host_vars' directory." msgstr "一般的ã«ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ãƒãƒªã‚·ãƒ¼ã‚’記述ã™ã‚‹å¤‰æ•°ã‚’定義ã™ã‚‹ã®ã«ã€ã“ã®æ–¹æ³•ã¯æœ€é©ã§ã¯ã‚りã¾ã›ã‚“。メインã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ã¯ã€å˜ãªã‚‹çœç•¥ã«ã™ãŽã¾ã›ã‚“。変数ã®å€¤ã‚’「host_varsã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã®å€‹ã€…ã®ãƒ•ァイルã«ä¿å­˜ã™ã‚‹éš›ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:290 msgid "Assigning a variable to many machines: group variables" msgstr "多ãã®ãƒžã‚·ãƒ³ã¸ã®å¤‰æ•°ã®å‰²ã‚Šå½“ã¦: グループ変数" #: ../../rst/user_guide/intro_inventory.rst:292 msgid "If all hosts in a group share a variable value, you can apply that variable to an entire group at once. In INI:" msgstr "グループ内ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆãŒå¤‰æ•°ã®å€¤ã‚’共有ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®å¤‰æ•°ã‚’グループ全体ã«ä¸€åº¦ã«é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚INI ã®å ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:316 msgid "Group variables are a convenient way to apply variables to multiple hosts at once. Before executing, however, Ansible always flattens variables, including inventory variables, to the host level. If a host is a member of multiple groups, Ansible reads variable values from all of those groups. If you assign different values to the same variable in different groups, Ansible chooses which value to use based on internal :ref:`rules for merging `." msgstr "グループ変数ã¯ã€è¤‡æ•°ã®ãƒ›ã‚¹ãƒˆã«ä¸€åº¦ã«å¤‰æ•°ã‚’é©ç”¨ã™ã‚‹ä¾¿åˆ©ãªæ–¹æ³•ã§ã™ã€‚ã—ã‹ã—ã€Ansible ã¯å®Ÿè¡Œå‰ã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’å«ã‚€å¤‰æ•°ã‚’常ã«ãƒ›ã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ã«ãƒ•ラット化ã—ã¾ã™ã€‚ホストãŒè¤‡æ•°ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã—ã¦ã„ã‚‹å ´åˆã€Ansible ã¯ãれらã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã™ã¹ã¦ã‹ã‚‰å¤‰æ•°ã®å€¤ã‚’読ã¿å–りã¾ã™ã€‚ç•°ãªã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã§åŒã˜å¤‰æ•°ã«ç•°ãªã‚‹å€¤ã‚’割り当ã¦ãŸå ´åˆã€Ansible ã¯å†…部 :ref:`マージã®ãƒ«ãƒ¼ãƒ« ` ã«åŸºã¥ã„ã¦ã©ã®å€¤ã‚’使用ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:321 msgid "Inheriting variable values: group variables for groups of groups" msgstr "変数値ã®ç¶™æ‰¿: グループã®ã‚°ãƒ«ãƒ¼ãƒ—用グループ変数" #: ../../rst/user_guide/intro_inventory.rst:323 msgid "You can make groups of groups using the ``:children`` suffix in INI or the ``children:`` entry in YAML. You can apply variables to these groups of groups using ``:vars`` or ``vars:``:" msgstr "INI ã® ``:children`` サフィックスã¾ãŸã¯ YAML ã® ``children:`` エントリーを使用ã—ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã§ãã¾ã™ã€‚``:vars`` ã¾ãŸã¯ ``vars:`` を使用ã—ã¦ã€å¤‰æ•°ã‚’ãれらã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«é©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:381 msgid "If you need to store lists or hash data, or prefer to keep host and group specific variables separate from the inventory file, see :ref:`splitting_out_vars`." msgstr "リストã¾ãŸã¯ãƒãƒƒã‚·ãƒ¥ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã‚„ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¨ã¯åˆ¥ã«ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—固有ã®å¤‰æ•°ã‚’ä¿æŒã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã€Œ:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:383 msgid "Child groups have a couple of properties to note:" msgstr "å­ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ã€æ³¨æ„ã™ã¹ã以下ã®ãƒ—ロパティーãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:385 msgid "Any host that is member of a child group is automatically a member of the parent group." msgstr "å­ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚るホストã¯ã€è‡ªå‹•çš„ã«è¦ªã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:386 msgid "A child group's variables will have higher precedence (override) a parent group's variables." msgstr "å­ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ã¯ã€è¦ªã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ã‚ˆã‚Šã‚‚優先度ãŒé«˜ããªã‚Šã¾ã™ (オーãƒãƒ©ã‚¤ãƒ‰)。" #: ../../rst/user_guide/intro_inventory.rst:387 msgid "Groups can have multiple parents and children, but not circular relationships." msgstr "グループã«è¤‡æ•°ã®è¦ªã¨å­ã‚’追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€å¾ªç’°é–¢ä¿‚ã¯è¨­å®šã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/intro_inventory.rst:388 msgid "Hosts can also be in multiple groups, but there will only be **one** instance of a host, merging the data from the multiple groups." msgstr "ホストã¯è¤‡æ•°ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ãƒ›ã‚¹ãƒˆã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ **1 ã¤** ã ã‘ã§ã‚りã€è¤‡æ•°ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã®ãƒ‡ãƒ¼ã‚¿ã‚’マージã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:393 msgid "Organizing host and group variables" msgstr "ホスト変数ã¨ã‚°ãƒ«ãƒ¼ãƒ—å¤‰æ•°ã®æ•´ç†" #: ../../rst/user_guide/intro_inventory.rst:395 msgid "Although you can store variables in the main inventory file, storing separate host and group variables files may help you organize your variable values more easily. Host and group variable files must use YAML syntax. Valid file extensions include '.yml', '.yaml', '.json', or no file extension. See :ref:`yaml_syntax` if you are new to YAML." msgstr "メインã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«å¤‰æ•°ã‚’æ ¼ç´ã§ãã¾ã™ãŒã€ãƒ›ã‚¹ãƒˆå¤‰æ•°ãƒ•ァイルã¨ã‚°ãƒ«ãƒ¼ãƒ—å¤‰æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åˆ¥ã€…ã«æ ¼ç´ã™ã‚‹ã“ã¨ã§ã€å¤‰æ•°ã®å€¤ã‚’より簡å˜ã«æ•´ç†ã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ホストã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ãƒ•ァイルã¯ã€YAML 構文を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚有効ãªãƒ•ァイル拡張å­ã¯ã€ã€Œ.ymlã€ã€ã€Œ.yamlã€ã€ã¾ãŸã¯ã€Œ.jsonã€ã§ã™ã€‚ファイル拡張å­ã‚’付ã‘ãªãã¦ã‚‚有効ã§ã™ã€‚YAML ã‚’åˆã‚ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã€Œ:ref:`yaml_syntax`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:398 msgid "Ansible loads host and group variable files by searching paths relative to the inventory file or the playbook file. If your inventory file at ``/etc/ansible/hosts`` contains a host named 'foosball' that belongs to two groups, 'raleigh' and 'webservers', that host will use variables in YAML files at the following locations:" msgstr "Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¾ãŸã¯ Playbook ファイルã‹ã‚‰ã®ç›¸å¯¾ãƒ‘スを検索ã—ã¦ã€ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—変数ファイルを読ã¿è¾¼ã¿ã¾ã™ã€‚``/etc/ansible/hosts`` ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã«ã€Œfoosballã€ã¨ã„ã†åå‰ã®ãƒ›ã‚¹ãƒˆãŒã‚りã€ãれãŒã€Œraleighã€ã¨ã€Œwebserversã€ã¨ã„ㆠ2 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‰€å±žã—ã¦ã„ã‚‹å ´åˆã€ãã®ãƒ›ã‚¹ãƒˆã¯ä»¥ä¸‹ã®å ´æ‰€ã«ã‚ã‚‹ YAML ファイルã®å¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:406 msgid "For example, if you group hosts in your inventory by datacenter, and each datacenter uses its own NTP server and database server, you can create a file called ``/etc/ansible/group_vars/raleigh`` to store the variables for the ``raleigh`` group:" msgstr "ãŸã¨ãˆã°ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ãƒ›ã‚¹ãƒˆã‚’データセンターã”ã¨ã«ã¾ã¨ã‚ã€å„データセンターãŒç‹¬è‡ªã® NTP サーãƒãƒ¼ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€``/etc/ansible/group_vars/raleigh`` ã¨ã„ã†åå‰ã®ãƒ•ァイルを作æˆã—ã¦ã€``raleigh`` グループã®å¤‰æ•°ã‚’ä¿å­˜ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:414 msgid "You can also create *directories* named after your groups or hosts. Ansible will read all the files in these directories in lexicographical order. An example with the 'raleigh' group:" msgstr "ã¾ãŸã€ã‚°ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ãƒ›ã‚¹ãƒˆã®åå‰ãŒä»˜ã‘られ㟠*ディレクトリー* も作æˆã§ãã¾ã™ã€‚Ansible ã¯ã€ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®ãƒ•ァイルをディクショナリーã®é †ã«èª­ã¿è¾¼ã¿ã¾ã™ã€‚例ã§ã¯ã€ã€Œraleighã€ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:421 msgid "All hosts in the 'raleigh' group will have the variables defined in these files available to them. This can be very useful to keep your variables organized when a single file gets too big, or when you want to use :ref:`Ansible Vault` on some group variables." msgstr "「raleighã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã¯ã€ã“れらã®ãƒ•ァイルã§å®šç¾©ã•れãŸå¤‰æ•°ã‚’利用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€1 ã¤ã®ãƒ•ァイルãŒå¤§ãããªã‚Šã™ãŽãŸã¨ãã«ã€å¤‰æ•°ã‚’æ•´ç†ã—ã¦ãŠãã®ã«éžå¸¸ã«ä¾¿åˆ©ã§ã™ã€‚ã¾ãŸã€ã„ãã¤ã‹ã®ã‚°ãƒ«ãƒ¼ãƒ—変数㫠:ref:`Ansible Vault` を使用ã—ãŸã„å ´åˆã«ã‚‚便利ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:425 msgid "You can also add ``group_vars/`` and ``host_vars/`` directories to your playbook directory. The ``ansible-playbook`` command looks for these directories in the current working directory by default. Other Ansible commands (for example, ``ansible``, ``ansible-console``, and so on) will only look for ``group_vars/`` and ``host_vars/`` in the inventory directory. If you want other commands to load group and host variables from a playbook directory, you must provide the ``--playbook-dir`` option on the command line. If you load inventory files from both the playbook directory and the inventory directory, variables in the playbook directory will override variables set in the inventory directory." msgstr "ã¾ãŸã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ ``group_vars/`` ãŠã‚ˆã³ ``host_vars/`` ã‚’ Playbook ディレクトリーã«è¿½åŠ ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚``ansible-playbook`` コマンドã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ã€ã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§æŽ¢ã—ã¾ã™ã€‚ä»–ã® Ansible コマンド (ãŸã¨ãˆã°ã€``ansible``ã€``ansible-console`` ãªã©) ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``group_vars/`` 㨠``host_vars/`` ã®ã¿ã‚’探ã—ã¾ã™ã€‚ä»–ã®ã‚³ãƒžãƒ³ãƒ‰ã§ Playbook ディレクトリーã‹ã‚‰ã‚°ãƒ«ãƒ¼ãƒ—変数やホスト変数を読ã¿è¾¼ã‚€å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--playbook-dir`` オプションを指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Playbook ディレクトリー㨠inventory ディレクトリーã®ä¸¡æ–¹ã‹ã‚‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを読ã¿è¾¼ã‚“ã å ´åˆã€Playbook ディレクトリーã®å¤‰æ•°ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§è¨­å®šã•れãŸå¤‰æ•°ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:428 msgid "Keeping your inventory file and variables in a git repo (or other version control) is an excellent way to track changes to your inventory and host variables." msgstr "git リãƒã‚¸ãƒˆãƒªãƒ¼ (ã¾ãŸã¯ä»–ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†) ã§ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルãŠã‚ˆã³å¤‰æ•°ã‚’ç¶­æŒã™ã‚‹ã“ã¨ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŠã‚ˆã³ãƒ›ã‚¹ãƒˆå¤‰æ•°ã¸ã®å¤‰æ›´ã‚’追跡ã™ã‚‹å„ªã‚ŒãŸæ–¹æ³•ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:434 msgid "How variables are merged" msgstr "変数をマージã™ã‚‹æ–¹æ³•" #: ../../rst/user_guide/intro_inventory.rst:436 msgid "By default variables are merged/flattened to the specific host before a play is run. This keeps Ansible focused on the Host and Task, so groups don't really survive outside of inventory and host matching. By default, Ansible overwrites variables including the ones defined for a group and/or host (see :ref:`DEFAULT_HASH_BEHAVIOUR`). The order/precedence is (from lowest to highest):" msgstr "デフォルトã§ã¯ã€ãƒ—レイãŒå®Ÿè¡Œã•れるå‰ã«ã€å¤‰æ•°ãŒç‰¹å®šã®ãƒ›ã‚¹ãƒˆã«ãƒžãƒ¼ã‚¸/フラット化ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€Ansible ã¯ãƒ›ã‚¹ãƒˆã¨ã‚¿ã‚¹ã‚¯ã«ç„¦ç‚¹ã‚’当ã¦ã¦ã„ã‚‹ãŸã‚ã€ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ãƒ›ã‚¹ãƒˆã®ä¸€è‡´ä»¥å¤–ã§ã¯å®Ÿéš›ã«ã¯å­˜ç¶šã—ã¾ã›ã‚“。デフォルトã§ã¯ã€Ansible ã¯ã‚°ãƒ«ãƒ¼ãƒ—やホストã«å®šç¾©ã•れãŸã‚‚ã®ã‚’å«ã‚€å¤‰æ•°ã‚’上書ãã—ã¾ã™ (「:ref:`DEFAULT_HASH_BEHAVIOUR`ã€ã‚’å‚ç…§)。ãã®é †åº/優先順ä½ã¯ (低ã„ã‚‚ã®ã‹ã‚‰é«˜ã„ã‚‚ã®ã¸) ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:438 msgid "all group (because it is the 'parent' of all other groups)" msgstr "ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ— (ä»–ã®ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã€Œè¦ªã€ã§ã‚ã‚‹ãŸã‚)" #: ../../rst/user_guide/intro_inventory.rst:439 msgid "parent group" msgstr "親グループ" #: ../../rst/user_guide/intro_inventory.rst:440 msgid "child group" msgstr "å­ã‚°ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/intro_inventory.rst:441 msgid "host" msgstr "ホスト" #: ../../rst/user_guide/intro_inventory.rst:443 msgid "By default Ansible merges groups at the same parent/child level in ASCII order, and the last group loaded overwrites the previous groups. For example, an a_group will be merged with b_group and b_group vars that match will overwrite the ones in a_group." msgstr "デフォルトã§ã¯ã€Ansible ã¯åŒã˜è¦ªå­ãƒ¬ãƒ™ãƒ«ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ ASCII é †ã«ãƒžãƒ¼ã‚¸ã—ã€æœ€å¾Œã«èª­ã¿è¾¼ã¾ã‚ŒãŸã‚°ãƒ«ãƒ¼ãƒ—ãŒãれ以å‰ã®ã‚°ãƒ«ãƒ¼ãƒ—を上書ãã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€a_group 㯠b_group ã«ãƒžãƒ¼ã‚¸ã•れã€ä¸€è‡´ã™ã‚‹ b_group ã®å¤‰æ•°ãŒ a_group ã®å¤‰æ•°ã‚’上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:445 msgid "You can change this behavior by setting the group variable ``ansible_group_priority`` to change the merge order for groups of the same level (after the parent/child order is resolved). The larger the number, the later it will be merged, giving it higher priority. This variable defaults to ``1`` if not set. For example:" msgstr "ã“ã®å‹•作を変更ã™ã‚‹ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—変数 ``ansible_group_priority`` を設定ã—ã¦ã€åŒã˜ãƒ¬ãƒ™ãƒ«ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒžãƒ¼ã‚¸é †åºã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (親å­ã®é †åºãŒè§£æ±ºã•れãŸå¾Œ)。数字ãŒå¤§ãã„ã»ã©å¾Œã«ãƒžãƒ¼ã‚¸ã•れã€å„ªå…ˆé †ä½ãŒé«˜ããªã‚Šã¾ã™ã€‚ã“ã®å¤‰æ•°ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã®ãƒ‡ãƒ•ォルト㯠``1`` ã§ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:457 msgid "In this example, if both groups have the same priority, the result would normally have been ``testvar == b``, but since we are giving the ``a_group`` a higher priority the result will be ``testvar == a``." msgstr "ã“ã®ä¾‹ã§ã¯ã€ä¸¡æ–¹ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®å„ªå…ˆé †ä½ãŒåŒã˜å ´åˆã€çµæžœã¯é€šå¸¸ ``testvar == b`` ã«ãªã‚Šã¾ã™ãŒã€``a_group`` ã®å„ªå…ˆåº¦ãŒé«˜ã„ãŸã‚ã€çµæžœã¯ ``testvar == a`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:459 msgid "``ansible_group_priority`` can only be set in the inventory source and not in group_vars/, as the variable is used in the loading of group_vars." msgstr "``ansible_group_priority`` ã¯ã€group_vars ã®èª­ã¿è¾¼ã¿ã§ã“ã®å¤‰æ•°ãŒä½¿ç”¨ã•れるãŸã‚ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã§ã®ã¿è¨­å®šã§ãã€group_vars/ ã§ã¯è¨­å®šã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/intro_inventory.rst:464 msgid "Using multiple inventory sources" msgstr "複数ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_inventory.rst:466 msgid "You can target multiple inventory sources (directories, dynamic inventory scripts or files supported by inventory plugins) at the same time by giving multiple inventory parameters from the command line or by configuring :envvar:`ANSIBLE_INVENTORY`. This can be useful when you want to target normally separate environments, like staging and production, at the same time for a specific action." msgstr "コマンドラインã‹ã‚‰è¤‡æ•°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‘ラメーターを指定ã™ã‚‹ã‹ã€:envvar:`ANSIBLE_INVENTORY` を設定ã™ã‚‹ã“ã¨ã§ã€è¤‡æ•°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒªã‚½ãƒ¼ã‚¹ (ディレクトリーã€å‹•的インベントリースクリプトã€ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã«ã‚ˆã‚Šã‚µãƒãƒ¼ãƒˆã•れるファイル) ã‚’åŒæ™‚ã«å¯¾è±¡ã«æŒ‡å®šã§ãã¾ã™ã€‚ã“れã¯ã€ã‚¹ãƒ†ãƒ¼ã‚¸ç’°å¢ƒã‚„実稼åƒç’°å¢ƒãªã©ã€é€šå¸¸ã¯ç•°ãªã‚‹ç’°å¢ƒã‚’åŒæ™‚ã«å¯¾è±¡ã«æŒ‡å®šã«ã—ã¦ç‰¹å®šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:471 msgid "Target two sources from the command line like this:" msgstr "以下ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ 2 ã¤ã®ã‚½ãƒ¼ã‚¹ã‚’対象ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:477 msgid "Keep in mind that if there are variable conflicts in the inventories, they are resolved according to the rules described in :ref:`how_we_merge` and :ref:`ansible_variable_precedence`. The merging order is controlled by the order of the inventory source parameters. If ``[all:vars]`` in staging inventory defines ``myvar = 1``, but production inventory defines ``myvar = 2``, the playbook will be run with ``myvar = 2``. The result would be reversed if the playbook was run with ``-i production -i staging``." msgstr "インベントリーã«å¤‰æ•°ã®ç«¶åˆãŒã‚ã‚‹å ´åˆã¯ã€:ref:`how_we_merge` ãŠã‚ˆã³ :ref:`ansible_variable_precedence` ã§èª¬æ˜Žã•れã¦ã„るルールã«å¾“ã£ã¦è§£æ±ºã•れるã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。マージã®é †åºã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚½ãƒ¼ã‚¹ãƒ‘ラメーターã®é †åºã«ã‚ˆã£ã¦åˆ¶å¾¡ã•れã¾ã™ã€‚ステージングインベントリー㮠``[all:vars]`` ㌠``myvar = 1`` を定義ã—ã¦ã„ã¦ã€å®Ÿç¨¼åƒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãŒ ``myvar = 2`` を定義ã—ã¦ã„ã‚‹å ´åˆã€Playbook 㯠``myvar = 2`` ã§å®Ÿè¡Œã•れã¾ã™ã€‚Playbook ㌠``-i production -i staging`` ã§å®Ÿè¡Œã•れãŸå ´åˆã¯ã€çµæžœãŒé€†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:484 msgid "**Aggregating inventory sources with a directory**" msgstr "**インベントリーソースをディレクトリーã«é›†ç´„**" #: ../../rst/user_guide/intro_inventory.rst:486 msgid "You can also create an inventory by combining multiple inventory sources and source types under a directory. This can be useful for combining static and dynamic hosts and managing them as one inventory. The following inventory combines an inventory plugin source, a dynamic inventory script, and a file with static hosts:" msgstr "ã¾ãŸã€è¤‡æ•°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã‚„ソースタイプを 1 ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ä¸‹ã«ã¾ã¨ã‚ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れã¯ã€é™çš„ホストã¨å‹•的ホストを組ã¿åˆã‚ã›ã¦ã€1 ã¤ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¨ã—ã¦ç®¡ç†ã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚次ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインソースã€å‹•的インベントリースクリプトã€ãŠã‚ˆã³é™çš„ホストã®ãƒ•ァイルを組ã¿åˆã‚ã›ãŸã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:500 msgid "You can target this inventory directory simply like this:" msgstr "ã“ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¯ã€æ¬¡ã®ã‚ˆã†ã«ç°¡å˜ã«å¯¾è±¡ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:506 msgid "It can be useful to control the merging order of the inventory sources if there's variable conflicts or group of groups dependencies to the other inventory sources. The inventories are merged in ASCII order according to the filenames so the result can be controlled by adding prefixes to the files:" msgstr "ä»–ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã«å¯¾ã™ã‚‹å¤‰æ•°ã®ç«¶åˆã‚„グループã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¾å­˜é–¢ä¿‚ãŒã‚ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ã®ãƒžãƒ¼ã‚¸é †åºã‚’制御ã™ã‚‹ã¨ä¾¿åˆ©ã§ã™ã€‚インベントリーã¯ãƒ•ァイルåã«å¿œã˜ã¦ ASCII é †ã«ãƒžãƒ¼ã‚¸ã•れるãŸã‚ã€ãƒ•ァイルã«ãƒ—レフィックスを追加ã™ã‚‹ã“ã¨ã§çµæžœã‚’コントロールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:520 msgid "If ``01-openstack.yml`` defines ``myvar = 1`` for the group ``all``, ``02-dynamic-inventory.py`` defines ``myvar = 2``, and ``03-static-inventory`` defines ``myvar = 3``, the playbook will be run with ``myvar = 3``." msgstr "``01-openstack.yml`` ãŒã‚°ãƒ«ãƒ¼ãƒ— ``all`` ã«å¯¾ã—㦠``myvar = 1`` を定義ã—ã€``02-dynamic-inventory.py`` ㌠``myvar = 2`` を定義ã—ã€``03-static-inventory`` ㌠``myvar = 3`` を定義ã—ãŸå ´åˆã¯ã€Playbook ㌠``myvar = 3`` ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:523 msgid "For more details on inventory plugins and dynamic inventory scripts see :ref:`inventory_plugins` and :ref:`intro_dynamic_inventory`." msgstr "インベントリープラグインãŠã‚ˆã³å‹•的インベントリースクリプトã®è©³ç´°ã¯ã€ã€Œ:ref:`inventory_plugins`ã€ãŠã‚ˆã³ã€Œ:ref:`intro_dynamic_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:528 msgid "Connecting to hosts: behavioral inventory parameters" msgstr "ホストã¸ã®æŽ¥ç¶š: 動作用インベントリーパラメーター" #: ../../rst/user_guide/intro_inventory.rst:530 msgid "As described above, setting the following variables control how Ansible interacts with remote hosts." msgstr "上記ã®ã‚ˆã†ã«ã€ä»¥ä¸‹ã®å¤‰æ•°ã‚’設定ã—ã¦ã€Ansible ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¨å¯¾è©±ã™ã‚‹æ–¹æ³•を制御ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:532 msgid "Host connection:" msgstr "ホスト接続:" #: ../../rst/user_guide/intro_inventory.rst:537 msgid "ansible_connection" msgstr "ansible_connection" #: ../../rst/user_guide/intro_inventory.rst:537 msgid "Connection type to the host. This can be the name of any of ansible's connection plugins. SSH protocol types are ``smart``, ``ssh`` or ``paramiko``. The default is smart. Non-SSH based types are described in the next section." msgstr "ホストã¸ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—。ã“れã¯ã€Ansible ã® connection プラグインã®åå‰ã§ã™ã€‚SSH プロトコルタイプ㯠``smart``ã€``ssh``ã€ã¾ãŸã¯ ``paramiko`` ã§ã™ã€‚デフォルト㯠smart ã§ã™ã€‚SSH ベース以外ã®ã‚¿ã‚¤ãƒ—ã¯æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:539 msgid "General for all connections:" msgstr "ã™ã¹ã¦ã®æŽ¥ç¶šã«å¯¾ã™ã‚‹ä¸€èˆ¬çš„ãªè¨­å®š:" #: ../../rst/user_guide/intro_inventory.rst:541 #: ../../rst/user_guide/intro_inventory.rst:644 msgid "ansible_host" msgstr "ansible_host" #: ../../rst/user_guide/intro_inventory.rst:542 msgid "The name of the host to connect to, if different from the alias you wish to give to it." msgstr "接続ã™ã‚‹ãƒ›ã‚¹ãƒˆã®åå‰ (割り当ã¦ãŸã„エイリアスã¨ç•°ãªã‚‹å ´åˆ)。" #: ../../rst/user_guide/intro_inventory.rst:543 msgid "ansible_port" msgstr "ansible_port" #: ../../rst/user_guide/intro_inventory.rst:544 msgid "The connection port number, if not the default (22 for ssh)" msgstr "デフォルトã§ã¯ãªã„å ´åˆ (ssh ã®å ´åˆã¯ 22) ã¯ã€æŽ¥ç¶šãƒãƒ¼ãƒˆç•ªå·ã€‚" #: ../../rst/user_guide/intro_inventory.rst:545 #: ../../rst/user_guide/intro_inventory.rst:646 msgid "ansible_user" msgstr "ansible_user" #: ../../rst/user_guide/intro_inventory.rst:546 msgid "The user name to use when connecting to the host" msgstr "ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å。" #: ../../rst/user_guide/intro_inventory.rst:549 msgid "ansible_password" msgstr "ansible_password" #: ../../rst/user_guide/intro_inventory.rst:548 msgid "The password to use to authenticate to the host (never store this variable in plain text; always use a vault. See :ref:`tip_for_variables_and_vaults`)" msgstr "ホストã¸ã®èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ‘スワード (ã“ã®å¤‰æ•°ã‚’平文ã§ä¿å­˜ã—ãªã„ã§ãã ã•ã„。常㫠Valut を使用ã—ã¦ãã ã•ã„。「:ref:`tip_for_variables_and_vaults`ã€ã‚’å‚ç…§)。" #: ../../rst/user_guide/intro_inventory.rst:551 msgid "Specific to the SSH connection:" msgstr "SSH 接続ã«å›ºæœ‰:" #: ../../rst/user_guide/intro_inventory.rst:553 msgid "ansible_ssh_private_key_file" msgstr "ansible_ssh_private_key_file" #: ../../rst/user_guide/intro_inventory.rst:554 msgid "Private key file used by ssh. Useful if using multiple keys and you don't want to use SSH agent." msgstr "ssh ãŒä½¿ç”¨ã™ã‚‹ç§˜å¯†éµãƒ•ァイル。複数ã®éµã‚’使用ã—ã€SSH エージェントを使用ã—ãŸããªã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:557 msgid "ansible_ssh_common_args" msgstr "ansible_ssh_common_args" #: ../../rst/user_guide/intro_inventory.rst:556 msgid "This setting is always appended to the default command line for :command:`sftp`, :command:`scp`, and :command:`ssh`. Useful to configure a ``ProxyCommand`` for a certain host (or group)." msgstr "ã“ã®è¨­å®šã¯ã€å¸¸ã« :command:`sftp`ã€:command:`scp`ã€ãŠã‚ˆã³ :command:`ssh` ã®ãƒ‡ãƒ•ォルトã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã«è¿½åŠ ã•れã¾ã™ã€‚特定ã®ãƒ›ã‚¹ãƒˆ (ã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—) ã« ``ProxyCommand`` を設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:559 msgid "ansible_sftp_extra_args" msgstr "ansible_sftp_extra_args" #: ../../rst/user_guide/intro_inventory.rst:560 msgid "This setting is always appended to the default :command:`sftp` command line." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ‡ãƒ•ォルト㮠:command:`sftp` コマンドラインã«å¸¸ã«ä»˜åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:561 msgid "ansible_scp_extra_args" msgstr "ansible_scp_extra_args" #: ../../rst/user_guide/intro_inventory.rst:562 msgid "This setting is always appended to the default :command:`scp` command line." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ‡ãƒ•ォルト㮠:command:`scp` コマンドラインã«å¸¸ã«ä»˜åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:563 msgid "ansible_ssh_extra_args" msgstr "ansible_ssh_extra_args" #: ../../rst/user_guide/intro_inventory.rst:564 msgid "This setting is always appended to the default :command:`ssh` command line." msgstr "ã“ã®è¨­å®šã¯ã€ãƒ‡ãƒ•ォルト㮠:command:`ssh` コマンドラインã«å¸¸ã«ä»˜åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:565 msgid "ansible_ssh_pipelining" msgstr "ansible_ssh_pipelining" #: ../../rst/user_guide/intro_inventory.rst:566 msgid "Determines whether or not to use SSH pipelining. This can override the ``pipelining`` setting in :file:`ansible.cfg`." msgstr "SSH パイプラインを使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚ã“れ㯠:file:`ansible.cfg` ã® ``pipelining`` ã®è¨­å®šã‚’上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:569 msgid "ansible_ssh_executable (added in version 2.2)" msgstr "ansible_ssh_executable (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2 ã§è¿½åŠ )" #: ../../rst/user_guide/intro_inventory.rst:568 msgid "This setting overrides the default behavior to use the system :command:`ssh`. This can override the ``ssh_executable`` setting in :file:`ansible.cfg`." msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ã® :command:`ssh` を使用ã™ã‚‹ã‚ˆã†ã«ãƒ‡ãƒ•ォルトã®å‹•作ãŒä¸Šæ›¸ãã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€:file:`ansible.cfg` ã® ``ssh_executable`` 設定を上書ãã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:571 msgid "Privilege escalation (see :ref:`Ansible Privilege Escalation` for further details):" msgstr "権é™ã®æ˜‡æ ¼ (詳細ã¯ã€Œ:ref:`Ansible æ¨©é™æ˜‡æ ¼`ã€ã‚’å‚ç…§):" #: ../../rst/user_guide/intro_inventory.rst:574 msgid "Equivalent to ``ansible_sudo`` or ``ansible_su``, allows to force privilege escalation" msgstr "``ansible_sudo`` ã¾ãŸã¯ ``ansible_su`` ã¨åŒç­‰ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€æ¨©é™æ˜‡æ ¼ã‚’強制ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:576 msgid "Allows to set privilege escalation method" msgstr "æ¨©é™æ˜‡æ ¼ãƒ¡ã‚½ãƒƒãƒ‰ã®è¨­å®šã‚’許å¯ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:578 msgid "Equivalent to ``ansible_sudo_user`` or ``ansible_su_user``, allows to set the user you become through privilege escalation" msgstr "``ansible_sudo_user`` ã¾ãŸã¯ ``ansible_su_user`` ã¨åŒç­‰ã§ã€æ¨©é™æ˜‡æ ¼ã«ã‚ˆã‚Š become を行ã†ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:580 msgid "Equivalent to ``ansible_sudo_password`` or ``ansible_su_password``, allows you to set the privilege escalation password (never store this variable in plain text; always use a vault. See :ref:`tip_for_variables_and_vaults`)" msgstr "``ansible_sudo_password`` ã¾ãŸã¯ ``ansible_su_password`` ã¨åŒç­‰ã§ã€ç‰¹æ¨©æ˜‡æ ¼ãƒ‘スワードを設定ã§ãã¾ã™ (ã“ã®å¤‰æ•°ã‚’平文ã§ä¿å­˜ã›ãšã€å¸¸ã« vault を使用ã—ã¦ãã ã•ã„。「:ref:`tip_for_variables_and_vaults`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。" #: ../../rst/user_guide/intro_inventory.rst:581 msgid "ansible_become_exe" msgstr "ansible_become_exe" #: ../../rst/user_guide/intro_inventory.rst:582 msgid "Equivalent to ``ansible_sudo_exe`` or ``ansible_su_exe``, allows you to set the executable for the escalation method selected" msgstr "``ansible_sudo_exe`` ã¾ãŸã¯ ``ansible_su_exe`` ã¨åŒç­‰ã§ã€é¸æŠžã—ãŸæ˜‡æ ¼ãƒ¡ã‚½ãƒƒãƒ‰ã®å®Ÿè¡Œãƒ•ァイルを設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:584 msgid "ansible_become_flags" msgstr "ansible_become_flags" #: ../../rst/user_guide/intro_inventory.rst:584 msgid "Equivalent to ``ansible_sudo_flags`` or ``ansible_su_flags``, allows you to set the flags passed to the selected escalation method. This can be also set globally in :file:`ansible.cfg` in the ``sudo_flags`` option" msgstr "``ansible_sudo_flags`` ã¾ãŸã¯ ``ansible_su_flags`` ã¨åŒç­‰ã§ã€é¸æŠžã•ã‚ŒãŸæ˜‡æ ¼æ–¹æ³•ã«æ¸¡ã•れるフラグを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れ㯠``sudo_flags`` オプション㮠:file:`ansible.cfg` ã§ã‚‚グローãƒãƒ«ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:586 msgid "Remote host environment parameters:" msgstr "リモートホスト環境パラメーター:" #: ../../rst/user_guide/intro_inventory.rst:594 msgid "ansible_shell_type" msgstr "ansible_shell_type" #: ../../rst/user_guide/intro_inventory.rst:591 msgid "The shell type of the target system. You should not use this setting unless you have set the :ref:`ansible_shell_executable` to a non-Bourne (sh) compatible shell. By default commands are formatted using ``sh``-style syntax. Setting this to ``csh`` or ``fish`` will cause commands executed on target systems to follow those shell's syntax instead." msgstr "ターゲットシステムã®ã‚·ã‚§ãƒ«ã‚¿ã‚¤ãƒ—。:ref:`ansible_shell_executable` ã‚’ Bourne (sh) 以外ã®äº’æ›ã‚·ã‚§ãƒ«ã«è¨­å®šã—ãªã„é™ã‚Šã€ã“ã®è¨­å®šã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。デフォルトã§ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã¯ ``sh`` ã‚¹ã‚¿ã‚¤ãƒ«ã®æ§‹æ–‡ã‚’使用ã—ã¦ãƒ•ォーマットã•れã¾ã™ã€‚ã“れを ``csh`` ã¾ãŸã¯ ``fish`` ã«è¨­å®šã™ã‚‹ã¨ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚·ã‚¹ãƒ†ãƒ ã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãŒã‚·ã‚§ãƒ«ã®æ§‹æ–‡ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:603 msgid "ansible_python_interpreter" msgstr "ansible_python_interpreter" #: ../../rst/user_guide/intro_inventory.rst:599 msgid "The target host python path. This is useful for systems with more than one Python or not located at :command:`/usr/bin/python` such as \\*BSD, or where :command:`/usr/bin/python` is not a 2.X series Python. We do not use the :command:`/usr/bin/env` mechanism as that requires the remote user's path to be set right and also assumes the :program:`python` executable is named python, where the executable might be named something like :program:`python2.6`." msgstr "ターゲットホスト㮠Python パス。ã“れã¯ã€è¤‡æ•°ã® Python ãŒã‚るシステムã€\\*BSD ãªã©ã® :command:`/usr/bin/python` ã«ãªã„システムã€:command:`/usr/bin/python` ㌠2.X シリーズ㮠Python 以外ã®ã‚·ã‚¹ãƒ†ãƒ ã«å½¹ç«‹ã¡ã¾ã™ã€‚リモートユーザーã®ãƒ‘スを正ã—ã設定ã™ã‚‹å¿…è¦ãŒã‚りã€:program:`python` 実行ファイルã®åå‰ãŒ python ã§ã‚ã‚‹ã¨æƒ³å®šã™ã‚‹ãŸã‚ã€:command:`/usr/bin/env` メカニズムã¯ä½¿ç”¨ã—ã¾ã›ã‚“。実行ファイルã®åå‰ã¯ :program:`python2.6` ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:607 msgid "ansible_*_interpreter" msgstr "ansible_*_interpreter" #: ../../rst/user_guide/intro_inventory.rst:606 msgid "Works for anything such as ruby or perl and works just like :ref:`ansible_python_interpreter`. This replaces shebang of modules which will run on that host." msgstr "ruby ã‚„ perl ãªã©ã®ã‚らゆるもã®ã§å‹•作ã—ã€:ref:`ansible_python_interpreter` ã®ã‚ˆã†ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚ã“れã¯ã€ãã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れるモジュールã®ã‚·ãƒãƒ³ã«ä»£ã‚ã‚‹ã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:618 msgid "ansible_shell_executable" msgstr "ansible_shell_executable" #: ../../rst/user_guide/intro_inventory.rst:614 msgid "This sets the shell the ansible controller will use on the target machine, overrides ``executable`` in :file:`ansible.cfg` which defaults to :command:`/bin/sh`. You should really only change it if is not possible to use :command:`/bin/sh` (in other words, if :command:`/bin/sh` is not installed on the target machine or cannot be run from sudo.)." msgstr "ã“れã«ã‚ˆã‚Šã€Ansible コントローラーãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã§ä½¿ç”¨ã™ã‚‹ã‚·ã‚§ãƒ«ã‚’設定ã—ã€:file:`ansible.cfg` ã® ``executable`` を上書ãã—ã¾ã™ã€‚デフォルト㯠:command:`/bin/sh` ã§ã™ã€‚:command:`/bin/sh` を使用ã§ããªã„å ´åˆã«ã®ã¿å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (ã¤ã¾ã‚Šã€:command:`/bin/sh` ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã€ã¾ãŸã¯ sudo ã‹ã‚‰å®Ÿè¡Œã§ããªã„å ´åˆ)。" #: ../../rst/user_guide/intro_inventory.rst:620 msgid "Examples from an Ansible-INI host file:" msgstr "Ansible-INI ホストファイルã®ä¾‹:" #: ../../rst/user_guide/intro_inventory.rst:630 msgid "Non-SSH connection types" msgstr "SSH ä»¥å¤–ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—" #: ../../rst/user_guide/intro_inventory.rst:632 msgid "As stated in the previous section, Ansible executes playbooks over SSH but it is not limited to this connection type. With the host specific parameter ``ansible_connection=``, the connection type can be changed. The following non-SSH based connectors are available:" msgstr "å‰ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§èª¬æ˜Žã—ãŸã‚ˆã†ã«ã€Ansible 㯠SSH ã§ Playbook を実行ã—ã¾ã™ãŒã€ã“ã®æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã¯åˆ¶é™ã•れã¦ã„ã¾ã›ã‚“。ホスト固有ã®ãƒ‘ラメーター ``ansible_connection=`` ã§ã¯ã€æŽ¥ç¶šã‚¿ã‚¤ãƒ—を変更ã§ãã¾ã™ã€‚次㮠SSH 以外ã®ã‚³ãƒã‚¯ã‚¿ãƒ¼ã‚’利用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:636 msgid "**local**" msgstr "**local**" #: ../../rst/user_guide/intro_inventory.rst:638 msgid "This connector can be used to deploy the playbook to the control machine itself." msgstr "ã“ã®ã‚³ãƒã‚¯ã‚¿ãƒ¼ã¯ã€Playbook をコントロールマシン自体ã«ãƒ‡ãƒ—ロイã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:640 msgid "**docker**" msgstr "**docker**" #: ../../rst/user_guide/intro_inventory.rst:642 msgid "This connector deploys the playbook directly into Docker containers using the local Docker client. The following parameters are processed by this connector:" msgstr "ã“ã®ã‚³ãƒã‚¯ã‚¿ãƒ¼ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã® Docker クライアントを使用ã—㦠Playbook を直接 Docker コンテナーã«ãƒ‡ãƒ—ロイã—ã¾ã™ã€‚以下ã®ãƒ‘ラメーターã¯ã“ã®ã‚³ãƒã‚¯ã‚¿ãƒ¼ã«ã‚ˆã£ã¦å‡¦ç†ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:645 msgid "The name of the Docker container to connect to." msgstr "接続先㮠Docker コンテナーã®åå‰ã€‚" #: ../../rst/user_guide/intro_inventory.rst:647 msgid "The user name to operate within the container. The user must exist inside the container." msgstr "ã‚³ãƒ³ãƒ†ãƒŠãƒ¼å†…ã§æ“作ã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶å。ユーザーã¯ã‚³ãƒ³ãƒ†ãƒŠãƒ¼å†…ã«å­˜åœ¨ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:649 msgid "If set to ``true`` the ``become_user`` will be used to operate within the container." msgstr "``true`` ã«è¨­å®šã™ã‚‹ã¨ã€``become_user`` ã¯ã‚³ãƒ³ãƒ†ãƒŠãƒ¼å†…ã§å‹•作ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:651 msgid "ansible_docker_extra_args" msgstr "ansible_docker_extra_args" #: ../../rst/user_guide/intro_inventory.rst:651 msgid "Could be a string with any additional arguments understood by Docker, which are not command specific. This parameter is mainly used to configure a remote Docker daemon to use." msgstr "Docker ãŒèªè­˜ã™ã‚‹è¿½åŠ ã®å¼•æ•°ã‚’æŒã¤æ–‡å­—列を指定ã§ãã¾ã™ãŒã€ã“れã¯ã‚³ãƒžãƒ³ãƒ‰å›ºæœ‰ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ãƒ‘ラメーターã¯ä¸»ã«ã€ä½¿ç”¨ã™ã‚‹ãƒªãƒ¢ãƒ¼ãƒˆ Docker デーモンを設定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:653 msgid "Here is an example of how to instantly deploy to created containers:" msgstr "以下ã¯ã€ä½œæˆã•れãŸã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã«å³æ™‚ã«ãƒ‡ãƒ—ロイã™ã‚‹ä¾‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:677 msgid "For a full list with available plugins and examples, see :ref:`connection_plugin_list`." msgstr "利用å¯èƒ½ãªãƒ—ラグインã¨ã‚µãƒ³ãƒ—ルã®ä¸€è¦§ã¯ã€ã€Œ:ref:`connection_plugin_list`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:679 msgid "If you're reading the docs from the beginning, this may be the first example you've seen of an Ansible playbook. This is not an inventory file. Playbooks will be covered in great detail later in the docs." msgstr "ドキュメントを最åˆã‹ã‚‰èª­ã‚“ã§ã„ã‚‹å ´åˆã€ã“れ㯠Ansible Playbook ã‚’åˆã‚ã¦ç¢ºèªã—ãŸä¾‹ã§ã™ã€‚ã“れã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã§ã¯ã‚りã¾ã›ã‚“。Playbook ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§å¾Œã»ã©è©³ç´°ã«èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:685 msgid "Inventory setup examples" msgstr "インベントリーã®è¨­å®šä¾‹" #: ../../rst/user_guide/intro_inventory.rst:687 msgid "See also :ref:`sample_setup`, which shows inventory along with playbooks and other Ansible artifacts." msgstr "Playbook ãŠã‚ˆã³ãã®ä»–ã® Ansible アーティファクトã¨ã¨ã‚‚ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’表示ã™ã‚‹ã€Œ:ref:`sample_setup`ã€ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_inventory.rst:692 msgid "Example: One inventory per environment" msgstr "例: å„環境㫠1 ã¤ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼" #: ../../rst/user_guide/intro_inventory.rst:694 msgid "If you need to manage multiple environments it's sometimes prudent to have only hosts of a single environment defined per inventory. This way, it is harder to, for instance, accidentally change the state of nodes inside the \"test\" environment when you actually wanted to update some \"staging\" servers." msgstr "複数ã®ç’°å¢ƒã‚’管ç†ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã”ã¨ã« 1 ã¤ã®ç’°å¢ƒã®ãƒ›ã‚¹ãƒˆã®ã¿ã‚’定義ã™ã‚‹ã“ã¨ãŒè³¢æ˜Žãªå ´åˆãŒã‚りã¾ã™ã€‚ã“ã†ã™ã‚‹ã“ã¨ã§ã€ãŸã¨ãˆã°ã€å®Ÿéš›ã«ã¯ã€Œã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ã€ã‚µãƒ¼ãƒãƒ¼ã‚’æ›´æ–°ã—ãŸã„ã®ã«ã€èª¤ã£ã¦ã€Œãƒ†ã‚¹ãƒˆã€ç’°å¢ƒå†…ã®ãƒŽãƒ¼ãƒ‰ã®çŠ¶æ…‹ã‚’å¤‰æ›´ã—ã¦ã—ã¾ã†ã“ã¨ãŒèµ·ã“りã«ãããªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:700 msgid "For the example mentioned above you could have an :file:`inventory_test` file:" msgstr "å‰è¿°ã®ä¾‹ã§ã¯ã€:file:`inventory_test` ã¨ã„ã†ãƒ•ァイルãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:714 msgid "That file only includes hosts that are part of the \"test\" environment. Define the \"staging\" machines in another file called :file:`inventory_staging`:" msgstr "ã“ã®ãƒ•ァイルã«ã¯ã€ã€Œãƒ†ã‚¹ãƒˆã€ç’°å¢ƒã«å«ã¾ã‚Œã‚‹ãƒ›ã‚¹ãƒˆã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚:file:`inventory_staging` ã¨å‘¼ã°ã‚Œã‚‹åˆ¥ã®ãƒ•ァイルã®ã€Œã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ã€ãƒžã‚·ãƒ³ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:729 msgid "To apply a playbook called :file:`site.yml` to all the app servers in the test environment, use the following command::" msgstr "`site.yml` ã¨ã„ã†åå‰ã® Playbook をテスト環境ã®ã™ã¹ã¦ã®ã‚¢ãƒ—リケーションサーãƒãƒ¼ã«é©ç”¨ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:738 msgid "Example: Group by function" msgstr "例: 機能別ã«ã‚°ãƒ«ãƒ¼ãƒ—化" #: ../../rst/user_guide/intro_inventory.rst:740 msgid "In the previous section you already saw an example for using groups in order to cluster hosts that have the same function. This allows you, for instance, to define firewall rules inside a playbook or role affecting only database servers:" msgstr "å‰ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€åŒã˜æ©Ÿèƒ½ã‚’æŒã¤ãƒ›ã‚¹ãƒˆã‚’クラスター化ã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ«ãƒ¼ãƒ—を使用ã™ã‚‹ä¾‹ã‚’ã™ã§ã«æç¤ºã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã ã‘ã«å½±éŸ¿ã™ã‚‹ Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã§ãƒ•ァイアウォールルールを定義ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:758 msgid "Example: Group by location" msgstr "例: 場所別ã«ã‚°ãƒ«ãƒ¼ãƒ—化" #: ../../rst/user_guide/intro_inventory.rst:760 msgid "Other tasks might be focused on where a certain host is located. Let's say that ``db01.test.example.com`` and ``app01.test.example.com`` are located in DC1 while ``db02.test.example.com`` is in DC2:" msgstr "ã¾ãŸã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆãŒã©ã“ã«ã‚ã‚‹ã‹ã«ç„¦ç‚¹ã‚’当ã¦ãŸã‚¿ã‚¹ã‚¯ã‚‚ã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€``db01.test.example.com`` 㨠``app01.test.example.com`` ㌠DC1 ã«ã‚りã€``db02.test.example.com`` ㌠DC2 ã«ã‚ã‚‹ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:773 msgid "In practice, you might even end up mixing all these setups as you might need to, on one day, update all nodes in a specific data center while, on another day, update all the application servers no matter their location." msgstr "実際ã«ã¯ã€ãŸã¨ãˆã°ç‰¹å®šã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ã‚’æ›´æ–°ã™ã‚‹æ—¥ã¨ã€ç½®ã‹ã‚Œã¦ã„る場所ã«é–¢ä¿‚ãªãã™ã¹ã¦ã®ã‚¢ãƒ—リケーションサーãƒãƒ¼ã‚’æ›´æ–°ã™ã‚‹æ—¥ãŒå¿…è¦ã«ãªã‚‹ãŸã‚ã€ã“れらã™ã¹ã¦ã®è¨­å®šã‚’組ã¿åˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_inventory.rst:780 msgid ":ref:`inventory_plugins`" msgstr ":ref:`inventory_plugins`" #: ../../rst/user_guide/intro_inventory.rst:781 msgid "Pulling inventory from dynamic or static sources" msgstr "動的ソースã¾ãŸã¯é™çš„ソースã‹ã‚‰ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ—ル" #: ../../rst/user_guide/intro_inventory.rst:782 msgid ":ref:`intro_dynamic_inventory`" msgstr ":ref:`intro_dynamic_inventory`" #: ../../rst/user_guide/intro_inventory.rst:783 msgid "Pulling inventory from dynamic sources, such as cloud providers" msgstr "クラウドプロãƒã‚¤ãƒ€ãƒ¼ãªã©ã®å‹•的ソースã‹ã‚‰ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ—ル" #: ../../rst/user_guide/intro_inventory.rst:787 msgid "Learning Ansible's configuration, deployment, and orchestration language." msgstr "Ansible ã®è¨­å®šã€ãƒ‡ãƒ—ロイメントã€ãŠã‚ˆã³ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³è¨€èªžã«ã¤ã„ã¦" #: ../../rst/user_guide/intro_patterns.rst:4 msgid "Patterns: targeting hosts and groups" msgstr "パターン: ホストãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を対象ã¨ã™ã‚‹" #: ../../rst/user_guide/intro_patterns.rst:6 msgid "When you execute Ansible through an ad hoc command or by running a playbook, you must choose which managed nodes or groups you want to execute against. Patterns let you run commands and playbooks against specific hosts and/or groups in your inventory. An Ansible pattern can refer to a single host, an IP address, an inventory group, a set of groups, or all hosts in your inventory. Patterns are highly flexible - you can exclude or require subsets of hosts, use wildcards or regular expressions, and more. Ansible executes on all inventory hosts included in the pattern." msgstr "アドホックコマンドã¾ãŸã¯ Playbook ã‹ã‚‰ Ansible を実行ã™ã‚‹å ´åˆã¯ã€å®Ÿè¡Œã™ã‚‹ç®¡ç†ãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚パターンã«ã‚ˆã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã‚„グループã«å¯¾ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã¨ Playbook を実行ã§ãã¾ã™ã€‚Ansible パターンã¯ã€1 å°ã®ãƒ›ã‚¹ãƒˆã€IP アドレスã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã€ã‚°ãƒ«ãƒ¼ãƒ—セットã€ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’å‚ç…§ã§ãã¾ã™ã€‚ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æŸ”軟性ãŒé«˜ãã€ãƒ›ã‚¹ãƒˆã®ã‚µãƒ–セットを除外ã¾ãŸã¯è¦æ±‚ã—ãŸã‚Šã€ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚„æ­£è¦è¡¨ç¾ã‚’使用ã—ãŸã‚Šã§ãã¾ã™ã€‚Ansible ã¯ã€ãƒ‘ターンã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:12 msgid "Using patterns" msgstr "パターンã®ä½¿ç”¨" #: ../../rst/user_guide/intro_patterns.rst:14 msgid "You use a pattern almost any time you execute an ad hoc command or a playbook. The pattern is the only element of an :ref:`ad hoc command` that has no flag. It is usually the second element::" msgstr "アドホックコマンドã¾ãŸã¯ Playbook を実行ã™ã‚‹éš›ã¯ã€ã»ã¼å¸¸ã«ãƒ‘ターンを使用ã—ã¾ã™ã€‚パターンã¯ã€ãƒ•ラグã®ãªã„ :ref:`ad hoc command` ã®å”¯ä¸€ã®è¦ç´ ã§ã™ã€‚通常㯠2 番目ã®è¦ç´ ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:18 #: ../../rst/user_guide/intro_patterns.rst:29 #: ../../rst/user_guide/playbooks_checkmode.rst:31 #: ../../rst/user_guide/playbooks_filters.rst:676 #: ../../rst/user_guide/playbooks_tests.rst:307 #: ../../rst/user_guide/playbooks_tests.rst:328 msgid "For example::" msgstr "例::" #: ../../rst/user_guide/intro_patterns.rst:22 msgid "In a playbook the pattern is the content of the ``hosts:`` line for each play:" msgstr "Playbook ã§ã¯ã€ãƒ‘ターンã¯å„プレイ㮠``hosts:`` 行ã®å†…容ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:34 msgid "Since you often want to run a command or playbook against multiple hosts at once, patterns often refer to inventory groups. Both the ad hoc command and the playbook above will execute against all machines in the ``webservers`` group." msgstr "多ãã®å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã¾ãŸã¯ Playbook を複数ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ä¸€åº¦ã«å®Ÿè¡Œã™ã‚‹ãŸã‚ã€ãƒ‘ターンã¯å¤šãã®å ´åˆã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å‚ç…§ã—ã¾ã™ã€‚アドホックコマンドã¨ä¸Šè¨˜ã® Playbook ã¯ã€``webservers`` グループã®ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ã«å¯¾ã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:39 msgid "Common patterns" msgstr "一般的ãªãƒ‘ターン" #: ../../rst/user_guide/intro_patterns.rst:41 msgid "This table lists common patterns for targeting inventory hosts and groups." msgstr "以下ã®è¡¨ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を対象ã«è¨­å®šã™ã‚‹ä¸€èˆ¬çš„ãªãƒ‘ターンを示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:47 #: ../../rst/user_guide/playbooks_loops.rst:394 msgid "Description" msgstr "説明" #: ../../rst/user_guide/intro_patterns.rst:47 msgid "Pattern(s)" msgstr "パターン" #: ../../rst/user_guide/intro_patterns.rst:47 msgid "Targets" msgstr "ターゲット" #: ../../rst/user_guide/intro_patterns.rst:49 msgid "All hosts" msgstr "ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:49 msgid "all (or \\*)" msgstr "all (ã¾ãŸã¯ \\*)" #: ../../rst/user_guide/intro_patterns.rst:51 msgid "One host" msgstr "1 å°ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:51 msgid "host1" msgstr "host1" #: ../../rst/user_guide/intro_patterns.rst:53 msgid "Multiple hosts" msgstr "複数ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:53 msgid "host1:host2 (or host1,host2)" msgstr "host1:host2 (ã¾ãŸã¯ host1,host2)" #: ../../rst/user_guide/intro_patterns.rst:55 msgid "One group" msgstr "1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/intro_patterns.rst:55 msgid "webservers" msgstr "webservers" #: ../../rst/user_guide/intro_patterns.rst:57 msgid "Multiple groups" msgstr "複数グループ" #: ../../rst/user_guide/intro_patterns.rst:57 msgid "webservers:dbservers" msgstr "webservers:dbservers" #: ../../rst/user_guide/intro_patterns.rst:57 msgid "all hosts in webservers plus all hosts in dbservers" msgstr "webservers 上ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã¨ã€dbservers 上ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:59 msgid "Excluding groups" msgstr "グループã®é™¤å¤–" #: ../../rst/user_guide/intro_patterns.rst:59 msgid "webservers:!atlanta" msgstr "webservers:!atlanta" #: ../../rst/user_guide/intro_patterns.rst:59 msgid "all hosts in webservers except those in atlanta" msgstr "atlanta 上ã®ãƒ›ã‚¹ãƒˆã‚’除ã webservers ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:61 msgid "Intersection of groups" msgstr "グループã®äº¤å·®éƒ¨åˆ†" #: ../../rst/user_guide/intro_patterns.rst:61 msgid "webservers:&staging" msgstr "webservers:&staging" #: ../../rst/user_guide/intro_patterns.rst:61 msgid "any hosts in webservers that are also in staging" msgstr "ステージ状態ã«ã‚ã‚‹ webservers ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆ" #: ../../rst/user_guide/intro_patterns.rst:64 msgid "You can use either a comma (``,``) or a colon (``:``) to separate a list of hosts. The comma is preferred when dealing with ranges and IPv6 addresses." msgstr "ホストã®ãƒªã‚¹ãƒˆã‚’分離ã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒž (``,``) ã¾ãŸã¯ã‚³ãƒ­ãƒ³ (``:``) ã®ã„ãšã‚Œã‹ã‚’使用ã§ãã¾ã™ã€‚コンマã¯ã€ç¯„囲ãŠã‚ˆã³ IPv6 アドレスを処ç†ã™ã‚‹å ´åˆã«æŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:66 msgid "Once you know the basic patterns, you can combine them. This example::" msgstr "基本的ãªãƒ‘ターンを把æ¡ã—ãŸã‚‰ã€ãれを組ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:70 msgid "targets all machines in the groups 'webservers' and 'dbservers' that are also in the group 'staging', except any machines in the group 'phoenix'." msgstr "「phoenixã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒžã‚·ãƒ³ã‚’除ãã€ã€Œstagingã€ã‚°ãƒ«ãƒ¼ãƒ—ã«ã‚る「webserversã€ã‚°ãƒ«ãƒ¼ãƒ—ãŠã‚ˆã³ã€Œdbserversã€ã‚°ãƒ«ãƒ¼ãƒ—ã«ã‚ã‚‹ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ã‚’対象ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:73 msgid "You can use wildcard patterns with FQDNs or IP addresses, as long as the hosts are named in your inventory by FQDN or IP address::" msgstr "ホストãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ FQDN ã¾ãŸã¯ IP アドレスã«ã‚ˆã‚Šåå‰ãŒä»˜ã‘られã¦ã„ã‚‹é™ã‚Šã€FQDN ã¾ãŸã¯ IP アドレスã§ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ãƒ‘ターンを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:79 msgid "You can mix wildcard patterns and groups at the same time::" msgstr "ワイルドカードパターンãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’åŒæ™‚ã«çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:84 msgid "Limitations of patterns" msgstr "パターンã®åˆ¶é™" #: ../../rst/user_guide/intro_patterns.rst:86 msgid "Patterns depend on inventory. If a host or group is not listed in your inventory, you cannot use a pattern to target it. If your pattern includes an IP address or hostname that does not appear in your inventory, you will see an error like this:" msgstr "パターンã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ホストã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«è¨˜è¼‰ã•れã¦ã„ãªã„å ´åˆã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ãƒ‘ターンを使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。インベントリーã«è¡¨ç¤ºã•れãªã„ IP アドレスã¾ãŸã¯ãƒ›ã‚¹ãƒˆåãŒãƒ‘ターンã«å«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:93 msgid "Your pattern must match your inventory syntax. If you define a host as an :ref:`alias`:" msgstr "ãŠä½¿ã„ã®ãƒ‘ターンã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼æ§‹æ–‡ã«ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ホストを :ref:`エイリアス` ã¨ã—ã¦å®šç¾©ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:103 msgid "you must use the alias in your pattern. In the example above, you must use ``host1`` in your pattern. If you use the IP address, you will once again get the error::" msgstr "パターンã§ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚上記ã®ä¾‹ã§ã¯ã€ãƒ‘ターン㧠``host1`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚IP アドレスを使用ã™ã‚‹å ´åˆã¯ã€ã‚¨ãƒ©ãƒ¼ãŒå†åº¦è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:108 msgid "Advanced pattern options" msgstr "詳細ãªãƒ‘ターンオプション" #: ../../rst/user_guide/intro_patterns.rst:110 msgid "The common patterns described above will meet most of your needs, but Ansible offers several other ways to define the hosts and groups you want to target." msgstr "上記ã®ä¸€èˆ¬çš„ãªãƒ‘ターンã¯ã»ã¨ã‚“ã©ã®ãƒ‹ãƒ¼ã‚ºã«å¯¾å¿œã—ã¾ã™ãŒã€Ansible ã§ã¯ã€å¯¾è±¡ã¨ã™ã‚‹ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を定義ã™ã‚‹ä»–ã®æ–¹æ³•ã‚‚ã„ãã¤ã‹æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:113 msgid "Using variables in patterns" msgstr "パターンã«ãŠã‘る変数ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_patterns.rst:115 msgid "You can use variables to enable passing group specifiers via the ``-e`` argument to ansible-playbook::" msgstr "変数を使ã†ã¨ã€ansible-playbook ã® ``-e`` 引数ã§ã‚°ãƒ«ãƒ¼ãƒ—指定å­ã‚’渡ã›ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:120 msgid "Using group position in patterns" msgstr "パターンã«ãŠã‘るグループã®ä½ç½®ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_patterns.rst:122 msgid "You can define a host or subset of hosts by its position in a group. For example, given the following group::" msgstr "グループ内ã®ä½ç½®ã«ã‚ˆã£ã¦ã€ãƒ›ã‚¹ãƒˆã‚„ホストã®ã‚µãƒ–セットを定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€æ¬¡ã®ã‚ˆã†ãªã‚°ãƒ«ãƒ¼ãƒ—ãŒæŒ‡å®šã•れãŸå ´åˆã§ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:129 msgid "you can use subscripts to select individual hosts or ranges within the webservers group::" msgstr "subscripts を使用ã—ã¦ã€webservers グループ内ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ç¯„囲を個別ã«é¸æŠžã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:139 msgid "Using regexes in patterns" msgstr "ãƒ‘ã‚¿ãƒ¼ãƒ³ã§æ­£è¦è¡¨ç¾ã®ä½¿ç”¨" #: ../../rst/user_guide/intro_patterns.rst:141 msgid "You can specify a pattern as a regular expression by starting the pattern with ``~``::" msgstr "パターンを正è¦è¡¨ç¾ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã«ã¯ã€``~`` ã§ãƒ‘ターンを開始ã—ã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:148 msgid "You can change the behavior of the patterns defined in ad-hoc commands using command-line options. You can also limit the hosts you target on a particular run with the ``--limit`` flag." msgstr "コマンドラインオプションを使用ã—ã¦ã€ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã§å®šç¾©ã•れãŸãƒ‘ターンã®å‹•作を変更ã§ãã¾ã™ã€‚ã¾ãŸã€``--limit`` フラグを使用ã—ã¦ã€ç‰¹å®šã®å®Ÿè¡Œã§å¯¾è±¡ã¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã‚’制é™ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:151 msgid "Limit to one host" msgstr "1 å°ã®ãƒ›ã‚¹ãƒˆã«åˆ¶é™ã™ã‚‹" #: ../../rst/user_guide/intro_patterns.rst:157 msgid "Limit to multiple hosts" msgstr "複数ã®ãƒ›ã‚¹ãƒˆã«åˆ¶é™ã™ã‚‹" #: ../../rst/user_guide/intro_patterns.rst:163 msgid "Negated limit. Note that single quotes MUST be used to prevent bash interpolation." msgstr "å¦å®šçš„ãªåˆ¶é™ã€‚bash ã®è£œé–“を防ããŸã‚ã«ã€ä¸€é‡å¼•用符を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:169 msgid "Limit to host group" msgstr "ホストグループã«åˆ¶é™ã™ã‚‹" #: ../../rst/user_guide/intro_patterns.rst:176 msgid "Patterns and ansible-playbook flags" msgstr "パターンãŠã‚ˆã³ ansible-playbook フラグ" #: ../../rst/user_guide/intro_patterns.rst:178 msgid "You can change the behavior of the patterns defined in playbooks using command-line options. For example, you can run a playbook that defines ``hosts: all`` on a single host by specifying ``-i 127.0.0.2,`` (note the trailing comma). This works even if the host you target is not defined in your inventory. You can also limit the hosts you target on a particular run with the ``--limit`` flag::" msgstr "コマンドラインオプションを使用ã—㦠Playbook ã§å®šç¾©ã—ãŸãƒ‘ターンã®å‹•作を変更ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``-i 127.0.0.2,`` (末尾ã®ã‚³ãƒ³ãƒž) を指定ã—ã¦ã€å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã§ ``hosts: all`` を定義ã™ã‚‹ Playbook を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€å¯¾è±¡ã¨ã™ã‚‹ãƒ›ã‚¹ãƒˆãŒã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å®šç¾©ã•れã¦ã„ãªã„å ´åˆã§ã‚‚有効ã§ã™ã€‚ã¾ãŸã€``--limit`` フラグを使用ã—ã¦ã€ç‰¹å®šã®å®Ÿè¡Œã§å¯¾è±¡ã¨ã™ã‚‹ãƒ›ã‚¹ãƒˆã‚’制é™ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:182 msgid "Finally, you can use ``--limit`` to read the list of hosts from a file by prefixing the file name with ``@``::" msgstr "最後㫠``--limit`` を使用ã—ã¦ã€ãƒ•ァイルåã®å‰ã« ``@`` を付ã‘ã‚‹ã“ã¨ã§ã€ãƒ•ァイルã‹ã‚‰ãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:186 msgid "If :ref:`RETRY_FILES_ENABLED` is set to ``True``, a ``.retry`` file will be created after the ``ansible-playbook`` run containing a list of failed hosts from all plays. This file is overwritten each time ``ansible-playbook`` finishes running." msgstr ":ref:`RETRY_FILES_ENABLED` ㌠``True`` ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€``ansible-playbook`` ã®å®Ÿè¡Œå¾Œã«ã€ã™ã¹ã¦ã®ãƒ—レイã§å¤±æ•—ã—ãŸãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã‚’å«ã‚€ ``.retry`` ファイルãŒä½œæˆã•れã¾ã™ã€‚ã“ã®ãƒ•ァイルã¯ã€``ansible-playbook`` ã®å®Ÿè¡ŒãŒçµ‚了ã™ã‚‹ãŸã³ã«ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/user_guide/intro_patterns.rst:188 msgid "ansible-playbook site.yml --limit @site.retry" msgstr "ansible-playbook site.yml --limit @site.retry" #: ../../rst/user_guide/intro_patterns.rst:190 msgid "To apply your knowledge of patterns with Ansible commands and playbooks, read :ref:`intro_adhoc` and :ref:`playbooks_intro`." msgstr "Ansible コマンドãŠã‚ˆã³ Playbook ã§ãƒ‘ターンã«é–¢ã™ã‚‹çŸ¥è­˜ã‚’活用ã™ã‚‹ã«ã¯ã€ã€Œ:ref:`intro_adhoc`ã€ãŠã‚ˆã³ã€Œ:ref:`playbooks_intro`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/intro_patterns.rst:197 msgid "Learning the Ansible configuration management language" msgstr "Ansible ã®è¨­å®šç®¡ç†è¨€èªžã«ã¤ã„ã¦" #: ../../rst/user_guide/intro_windows.rst:2 msgid "Windows Support" msgstr "Windows サãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/intro_windows.rst:4 msgid "This page has been split up and moved to the new section :ref:`windows`." msgstr "本ページã¯åˆ†å‰²ã—ã€æ–°ã—ã„セクション :ref:`windows` ã«ç§»å‹•ã—ã¾ã—ãŸã€‚" #: ../../rst/user_guide/modules.rst:4 msgid "Working With Modules" msgstr "モジュールã®ä½¿ç”¨" #: ../../rst/user_guide/modules.rst:14 msgid "Ansible ships with a number of modules (called the 'module library') that can be executed directly on remote hosts or through :ref:`Playbooks `." msgstr "Ansible ã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆä¸Šã¾ãŸã¯ :ref:`Playbooks ` を介ã—ã¦ç›´æŽ¥å®Ÿè¡Œã§ãる多数ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (「モジュールライブラリーã€ã¨å‘¼ã°ã‚Œã¦ã„ã‚‹) ãŒåŒæ¢±ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/modules.rst:17 msgid "Users can also write their own modules. These modules can control system resources, like services, packages, or files (anything really), or handle executing system commands." msgstr "ユーザーã¯è‡ªåˆ†ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’書ãã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚µãƒ¼ãƒ“スã€ãƒ‘ッケージã€ãƒ•ァイルãªã© (実際ã«ã¯ã©ã‚“ãªã‚‚ã®ã§ã‚‚) ã®ã‚·ã‚¹ãƒ†ãƒ ãƒªã‚½ãƒ¼ã‚¹ã‚’制御ã—ãŸã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/modules.rst:24 #: ../../rst/user_guide/modules_intro.rst:42 #: ../../rst/user_guide/modules_support.rst:64 msgid "Examples of using modules in /usr/bin/ansible" msgstr "/usr/bin/ansible ã«ãŠã‘るモジュールã®ä½¿ç”¨ä¾‹" #: ../../rst/user_guide/modules.rst:25 #: ../../rst/user_guide/playbooks_async.rst:170 #: ../../rst/user_guide/playbooks_blocks.rst:182 #: ../../rst/user_guide/playbooks_debugger.rst:324 #: ../../rst/user_guide/playbooks_delegation.rst:149 #: ../../rst/user_guide/playbooks_environment.rst:136 #: ../../rst/user_guide/playbooks_error_handling.rst:234 #: ../../rst/user_guide/playbooks_prompts.rst:107 #: ../../rst/user_guide/playbooks_startnstep.rst:37 #: ../../rst/user_guide/playbooks_tags.rst:425 #: ../../rst/user_guide/playbooks_templating.rst:46 #: ../../rst/user_guide/playbooks_tests.rst:388 #: ../../rst/user_guide/windows_dsc.rst:496 #: ../../rst/user_guide/windows_usage.rst:504 #: ../../rst/user_guide/windows_winrm.rst:905 msgid ":ref:`playbooks_intro`" msgstr ":ref:`playbooks_intro`" #: ../../rst/user_guide/modules.rst:26 msgid "Introduction to using modules with /usr/bin/ansible-playbook" msgstr "/usr/bin/ansible-playbook ã«ãŠã‘ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ä½¿ç”¨ã®æ¦‚è¦" #: ../../rst/user_guide/modules.rst:27 msgid ":ref:`developing_modules_general`" msgstr ":ref:`developing_modules_general`" #: ../../rst/user_guide/modules.rst:28 #: ../../rst/user_guide/modules_intro.rst:46 msgid "How to write your own modules" msgstr "独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½œæˆæ–¹æ³•" #: ../../rst/user_guide/modules.rst:29 #: ../../rst/user_guide/modules_intro.rst:47 msgid ":ref:`developing_api`" msgstr ":ref:`developing_api`" #: ../../rst/user_guide/modules.rst:30 #: ../../rst/user_guide/modules_intro.rst:48 msgid "Examples of using modules with the Python API" msgstr "Python API ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ä¾‹" #: ../../rst/user_guide/modules.rst:31 msgid ":ref:`interpreter_discovery`" msgstr ":ref:`interpreter_discovery`" #: ../../rst/user_guide/modules.rst:32 msgid "Configuring the right Python interpreter on target hosts" msgstr "ターゲットホストã§ã®é©åˆ‡ãª Python インタープリターã®è¨­å®š" #: ../../rst/user_guide/modules_intro.rst:4 msgid "Introduction to modules" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¦‚è¦" #: ../../rst/user_guide/modules_intro.rst:6 msgid "Modules (also referred to as \"task plugins\" or \"library plugins\") are discrete units of code that can be used from the command line or in a playbook task. Ansible executes each module, usually on the remote managed node, and collects return values. In Ansible 2.10 and later, most modules are hosted in collections." msgstr "モジュール (「タスクプラグインã€ã¾ãŸã¯ã€Œãƒ©ã‚¤ãƒ–ラリープラグインã€ã¨ã‚‚呼ã°ã‚Œã‚‹) ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã¾ãŸã¯ Playbook タスクã§ä½¿ç”¨å¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã®å€‹åˆ¥å˜ä½ã§ã™ã€‚Ansible ã¯ã€å„モジュールを実行ã—ã€é€šå¸¸ã®ãƒªãƒ¢ãƒ¼ãƒˆç®¡ç†ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã—ã€æˆ»ã‚Šå€¤ã‚’åŽé›†ã—ã¾ã™ã€‚Ansible 2.10 以é™ã§ã¯ã€ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§ãƒ›ã‚¹ãƒˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:8 msgid "You can execute modules from the command line::" msgstr "コマンドラインã‹ã‚‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:14 msgid "Each module supports taking arguments. Nearly all modules take ``key=value`` arguments, space delimited. Some modules take no arguments, and the command/shell modules simply take the string of the command you want to run." msgstr "å„モジュールã¯ã€å¼•æ•°ã‚’å–ã‚‹ã“ã¨ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã»ã¼ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ ``key=value`` ã®å¼•æ•°ã‚’å–りã¾ã™ã€‚一部ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å¼•æ•°ã‚’å–らãšã€ã‚³ãƒžãƒ³ãƒ‰/シェルモジュールã¯å˜ã«å®Ÿè¡Œã—ãŸã„ã‚³ãƒžãƒ³ãƒ‰ã®æ–‡å­—列をå–りã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:16 msgid "From playbooks, Ansible modules are executed in a very similar way::" msgstr "Playbook ã‹ã‚‰ã€Ansible モジュールã¯åŒã˜ã‚ˆã†ãªæ–¹æ³•ã§å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:21 msgid "Another way to pass arguments to a module is using YAML syntax, also called 'complex args' ::" msgstr "ã‚‚ã—ãã¯ã€ã€Œcomplex argsã€ã¨ã‚‚呼ã°ã‚Œã‚‹ YAML 構文を使用ã—ã¦ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¼•数を渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:28 msgid "All modules return JSON format data. This means modules can be written in any programming language. Modules should be idempotent, and should avoid making any changes if they detect that the current state matches the desired final state. When used in an Ansible playbook, modules can trigger 'change events' in the form of notifying :ref:`handlers ` to run additional tasks." msgstr "ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ JSON å½¢å¼ã®ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€ã©ã®ãƒ—ログラミング言語ã§ã‚‚モジュールを作æˆã§ãã¾ã™ã€‚モジュールã¯å†ªç­‰ã§ã‚りã€ç¾åœ¨ã®çŠ¶æ…‹ãŒå¿…è¦ãªæœ€çµ‚状態ã¨ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’検知ã™ã‚‹ã¨ã€å¤‰æ›´ã¯å›žé¿ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible Playbook ã§ä½¿ç”¨ã™ã‚‹ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ :ref:`handlers ` ã«é€šçŸ¥ã™ã‚‹å½¢å¼ã§ã€Œå¤‰æ›´ã‚¤ãƒ™ãƒ³ãƒˆã€ã‚’トリガーã—ã¦è¿½åŠ ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:30 msgid "You can access the documentation for each module from the command line with the ansible-doc tool::" msgstr "å„モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ansible-doc ツールを使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:34 msgid "For a list of all available modules, see the :ref:`Collection docs `, or run the following at a command prompt::" msgstr "利用å¯èƒ½ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸€è¦§ã¯ã€ã€Œ:ref:`Collection docs `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ—ãƒ­ãƒ³ãƒ—ãƒˆã§æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/modules_intro.rst:44 #: ../../rst/user_guide/modules_support.rst:66 msgid "Examples of using modules with /usr/bin/ansible-playbook" msgstr "/usr/bin/ansible-playbook ã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ä¾‹" #: ../../rst/user_guide/modules_support.rst:5 msgid "Module Maintenance & Support" msgstr "モジュールã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŠã‚ˆã³ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/modules_support.rst:7 msgid "If you are using a module and you discover a bug, you may want to know where to report that bug, who is responsible for fixing it, and how you can track changes to the module. If you are a Red Hat subscriber, you may want to know whether you can get support for the issue you are facing." msgstr "モジュールを使用ã—ã€ãƒã‚°ã‚’発見ã—ãŸå ´åˆã¯ã€ãã®ãƒã‚°ã®å ±å‘Šå ´æ‰€ã€ä¿®æ­£ã‚’è¡Œã†æ‹…当者ã€ãŠã‚ˆã³ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¸ã®å¤‰æ›´ã‚’追跡ã™ã‚‹æ–¹æ³•を把æ¡ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Red Hat ã®ã‚µãƒ–ã‚¹ã‚¯ãƒªãƒ—ã‚·ãƒ§ãƒ³ã‚’ãŠæŒã¡ã®å ´åˆã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å•題ã®ã‚µãƒãƒ¼ãƒˆã‚’å–å¾—ã§ãã‚‹ã‹ã©ã†ã‹ã‚’èªè­˜ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:9 msgid "Starting in Ansible 2.10, most modules live in collections. The distribution method for each collection reflects the maintenance and support for the modules in that collection." msgstr "Ansible 2.10 以é™ã€ã»ã¨ã‚“ã©ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«å­˜åœ¨ã—ã¾ã™ã€‚å„コレクションã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション方法ã¯ã€ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å¯¾ã™ã‚‹ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã¨ã‚µãƒãƒ¼ãƒˆã‚’åæ˜ ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:15 msgid "Maintenance" msgstr "メンテナンス" #: ../../rst/user_guide/modules_support.rst:21 msgid "Collection" msgstr "コレクション" #: ../../rst/user_guide/modules_support.rst:21 msgid "Code location" msgstr "コードã®å ´æ‰€" #: ../../rst/user_guide/modules_support.rst:21 msgid "Maintained by" msgstr "メンテナンス担当" #: ../../rst/user_guide/modules_support.rst:23 msgid "ansible.builtin" msgstr "ansible.builtin" #: ../../rst/user_guide/modules_support.rst:23 msgid "`ansible/ansible repo`_ on GitHub" msgstr "GitHub ã® `ansible/ansible repo`_" #: ../../rst/user_guide/modules_support.rst:23 msgid "core team" msgstr "core ãƒãƒ¼ãƒ " #: ../../rst/user_guide/modules_support.rst:25 msgid "distributed on Galaxy" msgstr "Galaxy ã¸ã®é…布" #: ../../rst/user_guide/modules_support.rst:25 #: ../../rst/user_guide/modules_support.rst:27 msgid "various; follow ``repo`` link" msgstr "ã•ã¾ã–ã¾ã€‚``repo`` リンクã«å¾“ã£ã¦ãã ã•ã„。" #: ../../rst/user_guide/modules_support.rst:25 msgid "community or partners" msgstr "コミュニティーã¾ãŸã¯ãƒ‘ートナー" #: ../../rst/user_guide/modules_support.rst:27 msgid "distributed on Automation Hub" msgstr "Automation Hub ã¸ã®é…布" #: ../../rst/user_guide/modules_support.rst:27 msgid "content team or partners" msgstr "コンテンツãƒãƒ¼ãƒ ã¾ãŸã¯ãƒ‘ートナー" #: ../../rst/user_guide/modules_support.rst:33 msgid "Issue Reporting" msgstr "å•題ã®å ±å‘Š" #: ../../rst/user_guide/modules_support.rst:35 msgid "If you find a bug that affects a plugin in the main Ansible repo, also known as ``ansible-core``:" msgstr "Ansible メインリãƒã‚¸ãƒˆãƒªãƒ¼ (``ansible-core`` ã¨ã‚‚知られã¦ã„ã‚‹) ã®ãƒ—ラグインã«å½±éŸ¿ã™ã‚‹ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:37 msgid "Confirm that you are running the latest stable version of Ansible or the devel branch." msgstr "Ansible ã®æœ€æ–°ã®å®‰å®šç‰ˆã¾ãŸã¯ devel ブランãƒã‚’実行ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:38 msgid "Look at the `issue tracker in the Ansible repo `_ to see if an issue has already been filed." msgstr "`Ansible リãƒã‚¸ãƒˆãƒªãƒ¼ã®å•題トラッカー `_ を確èªã—ã¦ã€å•題ãŒã™ã§ã«å ±å‘Šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:39 #: ../../rst/user_guide/modules_support.rst:46 msgid "Create an issue if one does not already exist. Include as much detail as you can about the behavior you discovered." msgstr "å•題ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€å•題を作æˆã—ã¦ãã ã•ã„。発見ã—ãŸå‹•作ã«ã¤ã„ã¦ã€ã§ãã‚‹é™ã‚Šè©³ç´°ã«è¨˜è¿°ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/modules_support.rst:41 msgid "If you find a bug that affects a plugin in a Galaxy collection:" msgstr "Galaxy コレクションã§ãƒ—ラグインã«å½±éŸ¿ã‚’与ãˆã‚‹ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:43 msgid "Find the collection on Galaxy." msgstr "Galaxy ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:44 msgid "Find the issue tracker for the collection." msgstr "コレクションã®å•é¡Œãƒˆãƒ©ãƒƒã‚«ãƒ¼ã®æ¤œç´¢" #: ../../rst/user_guide/modules_support.rst:45 msgid "Look there to see if an issue has already been filed." msgstr "å•題ãŒã™ã§ã«å ±å‘Šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:48 msgid "Some partner collections may be hosted in private repositories." msgstr "一部ã®ãƒ‘ートナーコレクションã¯ã€ãƒ—ライベートリãƒã‚¸ãƒˆãƒªãƒ¼ã§ãƒ›ã‚¹ãƒˆã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:50 msgid "If you are not sure whether the behavior you see is a bug, if you have questions, if you want to discuss development-oriented topics, or if you just want to get in touch, use one of our Google mailing lists or chat channels (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) to :ref:`communicate with Ansiblers `." msgstr "ã”覧ã«ãªã£ãŸå‹•作ãŒãƒã‚°ãªã®ã‹ã©ã†ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã€è³ªå•ãŒã‚ã‚‹å ´åˆã€é–‹ç™ºé–¢é€£ã®ãƒˆãƒ”ックã«ã¤ã„ã¦è­°è«–ã—ãŸã„å ´åˆã€ã¾ãŸã¯å˜ã«é€£çµ¡ã‚’å–りãŸã„å ´åˆã¯ã€Google メーリングリストã¾ãŸã¯ãƒãƒ£ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ« (ansible.im ã® Matrix ã¾ãŸã¯ `irc.libera.chat `_ ã® IRC を使用) ã®ã„ãšã‚Œã‹ã‚’使用ã—㦠:ref:`Ansible ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã”連絡ãã ã•ã„ ` ãã ã•ã„。" #: ../../rst/user_guide/modules_support.rst:52 msgid "If you find a bug that affects a module in an Automation Hub collection:" msgstr "Automation Hub コレクションã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«å½±éŸ¿ã™ã‚‹ãƒã‚°ã‚’見ã¤ã‘ãŸå ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:54 msgid "If the collection offers an Issue Tracker link on Automation Hub, click there and open an issue on the collection repository. If it does not, follow the standard process for reporting issues on the `Red Hat Customer Portal `_. You must have a subscription to the Red Hat Ansible Automation Platform to create an issue on the portal." msgstr "コレクション㧠Automation Hub 上㮠Issue Tracker ãƒªãƒ³ã‚¯ãŒæä¾›ã•れã¦ã„ã‚‹å ´åˆã€ãã“をクリックã—ã¦ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«å•題を作æˆã—ã¾ã™ã€‚指定ã—ã¦ã„ãªã„å ´åˆã¯ã€`Red Hat カスタマーãƒãƒ¼ã‚¿ãƒ« `_ ã§å•題を報告ã™ã‚‹ãŸã‚ã®æ¨™æº–çš„ãªãƒ—ロセスã«å¾“ã£ã¦ãã ã•ã„。ãƒãƒ¼ã‚¿ãƒ«ã§å•題を作æˆã™ã‚‹ã«ã¯ã€Red Hat Ansible Automation Platform ã®ã‚µãƒ–スクリプションãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/modules_support.rst:57 msgid "Support" msgstr "サãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/modules_support.rst:59 msgid "All plugins that remain in ``ansible-core`` and all collections hosted in Automation Hub are supported by Red Hat. No other plugins or collections are supported by Red Hat. If you have a subscription to the Red Hat Ansible Automation Platform, you can find more information and resources on the `Red Hat Customer Portal. `_" msgstr "``ansible-core`` ã«ã‚ã‚‹ã™ã¹ã¦ã®ãƒ—ラグインã¨ã€Automation Hub ã§ãƒ›ã‚¹ãƒˆã•れるã™ã¹ã¦ã®ãƒ—ラグイン㯠Red Hat ã«ã‚ˆã£ã¦ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚ãã®ä»–ã®ãƒ—ラグインã¾ãŸã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ Red Hat ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“。Red Hat Ansible Automation Platform ã«ã‚µãƒ–スクリプションãŒã‚ã‚‹å ´åˆã¯ã€`Red Hat カスタマーãƒãƒ¼ã‚¿ãƒ« `_ ã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã¨ãƒªã‚½ãƒ¼ã‚¹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:5 msgid "Search paths in Ansible" msgstr "Ansible ã§ãƒ‘ã‚¹ã®æ¤œç´¢" #: ../../rst/user_guide/playbook_pathing.rst:7 msgid "You can control the paths Ansible searches to find resources on your control node (including configuration, modules, roles, ssh keys, and more) as well as resources on the remote nodes you are managing. Use absolute paths to tell Ansible where to find resources whenever you can. However, absolute paths are not always practical. This page covers how Ansible interprets relative search paths, along with ways to troubleshoot when Ansible cannot find the resource you need." msgstr "Ansible ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒŽãƒ¼ãƒ‰ä¸Šã®ãƒªã‚½ãƒ¼ã‚¹ (æ§‹æˆã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã€ãƒ­ãƒ¼ãƒ«ã€ssh キーãªã©) ã‚„ã€ç®¡ç†ã—ã¦ã„るリモートノード上ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’検索ã™ã‚‹éš›ã®ãƒ‘スを制御ã§ãã¾ã™ã€‚リソースを検索ã™ã‚‹å ´æ‰€ã‚’ Ansible ã«ä¼ãˆã‚‹ã«ã¯ã€å¯èƒ½ãªé™ã‚Šçµ¶å¯¾ãƒ‘スを使用ã—ã¾ã™ã€‚ã—ã‹ã—ã€çµ¶å¯¾ãƒ‘スã¯å¿…ãšã—も実用的ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Ansible ãŒç›¸å¯¾æ¤œç´¢ãƒ‘スをã©ã®ã‚ˆã†ã«è§£é‡ˆã™ã‚‹ã‹ã€ã¾ãŸ Ansible ãŒå¿…è¦ãªãƒªã‚½ãƒ¼ã‚¹ã‚’見ã¤ã‘られãªã„å ´åˆã®ãƒˆãƒ©ãƒ–ãƒ«ã‚·ãƒ¥ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:13 msgid "Config paths" msgstr "設定パス" #: ../../rst/user_guide/playbook_pathing.rst:15 msgid "By default these should be relative to the config file, some are specifically relative to the current working directory or the playbook and should have this noted in their description. Things like ssh keys are left to use the current working directory because it mirrors how the underlying tools would use it." msgstr "デフォルトã§ã¯ã€ã“れらã¯è¨­å®šãƒ•ァイルã‹ã‚‰ã®ç›¸å¯¾çš„ãªã‚‚ã®ã§ã™ãŒã€ä¸­ã«ã¯ç‰¹ã«ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚„ Playbook ã‹ã‚‰ã®ç›¸å¯¾çš„ãªã‚‚ã®ã‚‚ã‚ã‚‹ãŸã‚ã€èª¬æ˜Žã«ãã®æ—¨ã‚’記載ã—ã¦ãã ã•ã„。ssh キーã®ã‚ˆã†ãªã‚‚ã®ã¯ã€åŸºæœ¬çš„ãªãƒ„ールãŒä½¿ç”¨ã™ã‚‹æ–¹æ³•ã‚’åæ˜ ã™ã‚‹ãŸã‚ã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’使用ã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:19 msgid "Task paths" msgstr "タスクパス" #: ../../rst/user_guide/playbook_pathing.rst:21 msgid "Task paths include two different scopes: task evaluation and task execution. For task evaluation, all paths are local, like in lookups. For task execution, which usually happens on the remote nodes, local paths do not usually apply. However, if a task uses an action plugin, it uses a local path. The template and copy modules are examples of modules that use action plugins, and therefore use local paths." msgstr "タスクパスã«ã¯ã€ã‚¿ã‚¹ã‚¯ã®è©•価ã¨ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã¨ã„ㆠ2 ã¤ã®ç•°ãªã‚‹ã‚¹ã‚³ãƒ¼ãƒ—ãŒã‚りã¾ã™ã€‚タスクã®è©•価ã§ã¯ã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ã‚ˆã†ã«ã™ã¹ã¦ã®ãƒ‘スãŒãƒ­ãƒ¼ã‚«ãƒ«ã«ãªã‚Šã¾ã™ã€‚タスクã®å®Ÿè¡Œã¯é€šå¸¸ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã§è¡Œã‚れるãŸã‚ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘スã¯é€šå¸¸é©ç”¨ã•れã¾ã›ã‚“。ãŸã ã—ã€ã‚¿ã‚¹ã‚¯ãŒã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインを使用ã™ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘スを使用ã—ã¾ã™ã€‚アクションプラグインを使用ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¾‹ã¨ã—ã¦ã¯ã€template モジュール㨠copy モジュールãŒã‚りã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‘スを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:24 msgid "The magic of 'local' paths" msgstr "「ローカルã€ãƒ‘スã®ãƒžã‚¸ãƒƒã‚¯" #: ../../rst/user_guide/playbook_pathing.rst:26 msgid "Lookups and action plugins both use a special 'search magic' to find things, taking the current play into account, it uses from most specific to most general playbook dir in which a task is contained (this includes roles and includes)." msgstr "lookup ãŠã‚ˆã³ action プラグインã¯ã©ã¡ã‚‰ã‚‚特殊ãªã€Œæ¤œç´¢ãƒžã‚¸ãƒƒã‚¯ã€ã‚’使用ã—ã¾ã™ã€‚ã“れã«ã¯ç¾åœ¨ã®ãƒ—レイãŒè€ƒæ…®ã•れã€ã‚¿ã‚¹ã‚¯ãŒå«ã¾ã‚Œã‚‹ Playbook ディレクトリー (ã“れã«ã¯ãƒ­ãƒ¼ãƒ«ã¨ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’å«ã‚€) ã§ã€ã‚ˆã‚Šå…·ä½“çš„ãªæŒ‡å®šã‹ã‚‰ã‚ˆã‚Šä¸€èˆ¬çš„ãªæŒ‡å®šãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:28 msgid "Using this magic, relative paths get attempted first with a 'files|templates|vars' appended (if not already present), depending on action being taken, 'files' is the default. (in other words, include_vars will use vars/). The paths will be searched from most specific to most general (in other words, role before play). dependent roles WILL be traversed (in other words, task is in role2, role2 is a dependency of role1, role2 will be looked at first, then role1, then play). i.e ::" msgstr "ã“ã®ãƒžã‚¸ãƒƒã‚¯ã‚’使用ã™ã‚‹ã¨ã€ç›¸å¯¾ãƒ‘スãŒå­˜åœ¨ã—ã¦ã„ãªã„å ´åˆã¯ã€æœ€åˆã«ã€Œfiles|templates|varsã€ã‚’付加ã—ã¦è©¦è¡Œã•れã¾ã™ã€‚実行ã•れるアクションã«ã‚ˆã£ã¦ã¯ã€Œfilesã€ãŒãƒ‡ãƒ•ォルトã«ãªã‚Šã¾ã™ (ã¤ã¾ã‚Šã€include_vars 㯠vars/ を使用ã—ã¾ã™)。パスã¯ã€æœ€ã‚‚具体的ãªã‚‚ã®ã‹ã‚‰æœ€ã‚‚一般的ãªã‚‚ã®ã¸æ¤œç´¢ã•れã¾ã™ (ã¤ã¾ã‚Šã€play ã®å‰ã« role ãŒã‚りã¾ã™)。ä¾å­˜ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¯ã€æ¨ªæ–­ã•れã¾ã™ (ã¤ã¾ã‚Šã€ã‚¿ã‚¹ã‚¯ãŒ role2 ã«ã‚りã€role2 ㌠role1 ã®ä¾å­˜é–¢ä¿‚ã«ã‚ã‚‹å ´åˆã¯ã€role2 ãŒæœ€åˆã«æ¤œç´¢ã•ã‚Œã€æ¬¡ã« role1ã€ãã—㦠play ãŒæ¤œç´¢ã•れã¾ã™)。ã¤ã¾ã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:36 msgid "By default, Ansible does not search the current working directory unless it happens to coincide with one of the paths above. If you `include` a task file from a role, it will NOT trigger role behavior, this only happens when running as a role, `include_role` will work. A new variable `ansible_search_path` var will have the search path used, in order (but without the appended subdirs). Using 5 \"v\"s (`-vvvvv`) should show the detail of the search as it happens." msgstr "デフォルトã§ã¯ã€Ansible ã¯ä¸Šè¨˜ã®ãƒ‘スã®ã„ãšã‚Œã‹ã«ä¸€è‡´ã—ãªã„é™ã‚Šã€ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’検索ã—ã¾ã›ã‚“。ロールã‹ã‚‰ã‚¿ã‚¹ã‚¯ãƒ•ァイルを `include` ã—ãŸå ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®å‹•作を誘発ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。ã“れã¯ãƒ­ãƒ¼ãƒ«ã¨ã—ã¦å®Ÿè¡Œã—ãŸå ´åˆã«ã®ã¿ç™ºç”Ÿã—ã€`include_role` ã¯å‹•作ã—ã¾ã™ã€‚æ–°ã—ã„変数 `ansible_search_path` ã«ã¯ã€ä½¿ç”¨ã•れる検索パスãŒé †ç•ªã«å…¥ã‚Šã¾ã™ (ãŸã ã—ã€ä»˜åŠ ã•れãŸã‚µãƒ–ディレクトリーã¯å«ã¾ã‚Œã¾ã›ã‚“)。5ã¤ã®ã€Œvã€(`-vvvvv`) を使用ã—ã¦ã€æ¤œç´¢ã®è©³ç´°ã‚’表示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:38 msgid "As for includes, they try the path of the included file first and fall back to the play/role that includes them." msgstr "インクルードã«é–¢ã—ã¦ã¯ã€æœ€åˆã«ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れãŸãƒ•ァイルã®ãƒ‘スを試ã—ã€ãã®ãƒ•ァイルをå«ã‚€ãƒ—レイã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbook_pathing.rst:42 msgid "The current working directory might vary depending on the connection plugin and if the action is local or remote. For the remote it is normally the directory on which the login shell puts the user. For local it is either the directory you executed ansible from or in some cases the playbook directory." msgstr "ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€æŽ¥ç¶šãƒ—ラグインã¨ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒãƒ­ãƒ¼ã‚«ãƒ«ã‹ãƒªãƒ¢ãƒ¼ãƒˆã‹ã«ã‚ˆã£ã¦ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚リモートã®å ´åˆã€é€šå¸¸ã€ãƒ­ã‚°ã‚¤ãƒ³ã‚·ã‚§ãƒ«ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’é…ç½®ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ãªã‚Šã¾ã™ã€‚ローカルã®å ´åˆã¯ã€ansibleを実行ã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã€å ´åˆã«ã‚ˆã£ã¦ã¯Playbokディレクトリã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks.rst:4 msgid "Working with playbooks" msgstr "Playbook ã®æ“作" #: ../../rst/user_guide/playbooks.rst:6 msgid "Playbooks record and execute Ansible's configuration, deployment, and orchestration functions. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process." msgstr "Playbook ã¯ã€Ansible ã®è¨­å®šã€ãƒ‡ãƒ—ロイメントã€ã‚ªãƒ¼ã‚±ã‚¹ãƒˆãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³æ©Ÿèƒ½ã‚’記録ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚リモートシステムを強制ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã‚„ã€ä¸€èˆ¬çš„㪠IT プロセスã§ä¸€é€£ã®æ‰‹é †ã‚’説明ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks.rst:8 msgid "If Ansible modules are the tools in your workshop, playbooks are your instruction manuals, and your inventory of hosts are your raw material." msgstr "Ansible モジュールãŒãƒ¯ãƒ¼ã‚¯ã‚·ãƒ§ãƒƒãƒ—ã®ãƒ„ールã§ã‚ã‚‹å ´åˆã€Playbook ã¯æ‰‹é †ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã«ã‚りã€ãƒ›ã‚¹ãƒˆã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã¯å®Ÿéš›ã®ãƒžãƒ†ãƒªã‚¢ãƒ«ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks.rst:10 msgid "At a basic level, playbooks can be used to manage configurations of and deployments to remote machines. At a more advanced level, they can sequence multi-tier rollouts involving rolling updates, and can delegate actions to other hosts, interacting with monitoring servers and load balancers along the way." msgstr "基本的ãªãƒ¬ãƒ™ãƒ«ã§ã¯ã€Playbook を使用ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã®è¨­å®šãŠã‚ˆã³ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã¸ã®ãƒ‡ãƒ—ロイメントを管ç†ã§ãã¾ã™ã€‚より高度ãªãƒ¬ãƒ™ãƒ«ã§ã¯ã€ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚¢ãƒƒãƒ—デートã«é–¢é€£ã™ã‚‹è¤‡æ•°å±¤ã®ãƒ­ãƒ¼ãƒ«ã‚¢ã‚¦ãƒˆã‚’分類ã—ã€ä»–ã®ãƒ›ã‚¹ãƒˆã«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’委譲ã—ã¦ã€ç›£è¦–サーãƒãƒ¼ã‚„ロードãƒãƒ©ãƒ³ã‚µãƒ¼ã¨å¯¾è©±ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks.rst:12 msgid "Playbooks are designed to be human-readable and are developed in a basic text language. There are multiple ways to organize playbooks and the files they include, and we'll offer up some suggestions on that and making the most out of Ansible." msgstr "Playbook ã¯äººé–“ãŒåˆ¤èª­å¯èƒ½ã§ã€åŸºæœ¬çš„ãªãƒ†ã‚­ã‚¹ãƒˆè¨€èªžã§é–‹ç™ºã•れるよã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚Playbook ã¨ã€Playbook ã«å«ã¾ã‚Œã‚‹ãƒ•ァイルを整ç†ã™ã‚‹æ–¹æ³•ã¯è¤‡æ•°ã‚りã€ãã®æ–¹æ³•ã¨ã€Ansible を最大é™ã«æ´»ç”¨ã™ã‚‹ãŸã‚ã®ææ¡ˆã‚’è¡Œã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks.rst:14 msgid "You should look at `Example Playbooks `_ while reading along with the playbook documentation. These illustrate best practices as well as how to put many of the various concepts together." msgstr "Playbook ドキュメントã¨ä¸€ç·’ã«ã€ã€Œ`Example Playbooks `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã“ã§ã¯ã€ãƒ™ã‚¹ãƒˆãƒ—ラクティスやã€ã•ã¾ã–ã¾ãªæ¦‚念をã¾ã¨ã‚ã¦é…ç½®ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:5 msgid "Advanced Syntax" msgstr "é«˜åº¦ãªæ§‹æ–‡" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:7 msgid "The advanced YAML syntax examples on this page give you more control over the data placed in YAML files used by Ansible. You can find additional information about Python-specific YAML in the official `PyYAML Documentation `_." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®é«˜åº¦ãª YAML æ§‹æ–‡ã®ä¾‹ã§ã¯ã€Ansible ãŒä½¿ç”¨ã™ã‚‹ YAML ファイルã«é…ç½®ã•れるデータをより細ã‹ã制御ã§ãã¾ã™ã€‚Python 固有㮠YAML ã«é–¢ã™ã‚‹è¿½åŠ æƒ…å ±ã¯ã€å…¬å¼ã® `PyYAML ドキュメント `_ ã§ã”覧ã„ãŸã ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:15 msgid "Unsafe or raw strings" msgstr "安全ã§ãªã„文字列ã¾ãŸã¯ç”Ÿã®æ–‡å­—列" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:17 #, python-format msgid "When handling values returned by lookup plugins, Ansible uses a data type called ``unsafe`` to block templating. Marking data as unsafe prevents malicious users from abusing Jinja2 templates to execute arbitrary code on target machines. The Ansible implementation ensures that unsafe values are never templated. It is more comprehensive than escaping Jinja2 with ``{% raw %} ... {% endraw %}`` tags." msgstr "lookup プラグインã‹ã‚‰è¿”ã•れる値を処ç†ã™ã‚‹éš›ã€Ansible 㯠``unsafe`` ã¨ã„ã†ãƒ‡ãƒ¼ã‚¿ã‚¿ã‚¤ãƒ—を使用ã—ã¦ãƒ†ãƒ³ãƒ—レートをブロックã—ã¾ã™ã€‚データを安全ã§ã¯ãªã„ã¨ãƒžãƒ¼ã‚¯ã™ã‚‹ã“ã¨ã§ã€æ‚ªæ„ã®ã‚るユーザー㌠Jinja2 ã®ãƒ†ãƒ³ãƒ—レートを悪用ã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã§ä»»æ„ã®ã‚³ãƒ¼ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã‚’防ãŽã¾ã™ã€‚Ansible ã®å®Ÿè£…ã§ã¯ã€å®‰å…¨ã§ãªã„å€¤ãŒæ±ºã—ã¦ãƒ†ãƒ³ãƒ—レート化ã•れãªã„よã†ã«ã—ã¦ã„ã¾ã™ã€‚``{% raw %} ... {% endraw %}`` ã‚¿ã‚°ã§ Jinja2 をエスケープã™ã‚‹ã‚ˆã‚Šã‚‚包括的ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:19 msgid "You can use the same ``unsafe`` data type in variables you define, to prevent templating errors and information disclosure. You can mark values supplied by :ref:`vars_prompts` as unsafe. You can also use ``unsafe`` in playbooks. The most common use cases include passwords that allow special characters like ``{`` or ``%``, and JSON arguments that look like templates but should not be templated. For example:" msgstr "定義ã—ãŸå¤‰æ•°ã«åŒã˜ ``unsafe`` データ型を使用ã™ã‚‹ã¨ã€ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã‚¨ãƒ©ãƒ¼ã‚„æƒ…å ±ã®æ¼ãˆã„を防ãã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`vars_prompts` ã«ã‚ˆã‚Šæä¾›ã•れãŸå€¤ã‚’安全ã§ãªã„ã‚‚ã®ã¨ã—ã¦ãƒžãƒ¼ã‚¯ä»˜ã‘ã§ãã¾ã™ã€‚Playbook ã§ ``unsafe`` を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚最も一般的ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«ã¯ã€ãƒ†ãƒ³ãƒ—レートã®ã‚ˆã†ãª ``{`` ã‚„ ``%`` ãªã©ã®ç‰¹æ®Šæ–‡å­—を許å¯ã™ã‚‹ãƒ‘スワードãŒå«ã¾ã‚Œã¦ã„ã¾ã™ãŒã€ãƒ†ãƒ³ãƒ—レート化ã™ã¹ãã§ã¯ã‚りã¾ã›ã‚“。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:26 msgid "In a playbook::" msgstr "Playbook ã®å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:35 msgid "For complex variables such as hashes or arrays, use ``!unsafe`` on the individual elements::" msgstr "ãƒãƒƒã‚·ãƒ¥ã‚„é…列ãªã©ã®è¤‡é›‘ãªå¤‰æ•°ã®å ´åˆã¯ã€å€‹ã€…ã®è¦ç´ ã§ ``!unsafe`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:48 msgid "YAML anchors and aliases: sharing variable values" msgstr "YAML アンカーãŠã‚ˆã³ã‚¨ã‚¤ãƒªã‚¢ã‚¹: 変数値ã®å…±æœ‰" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:50 msgid "`YAML anchors and aliases `_ help you define, maintain, and use shared variable values in a flexible way. You define an anchor with ``&``, then refer to it using an alias, denoted with ``*``. Here's an example that sets three values with an anchor, uses two of those values with an alias, and overrides the third value::" msgstr "`YAML アンカーãŠã‚ˆã³ã‚¨ã‚¤ãƒªã‚¢ã‚¹ `_ ã¯ã€æŸ”è»Ÿãªæ–¹æ³•ã§å…±æœ‰å¤‰æ•°ã®å€¤ã‚’定義ã€ç¶­æŒã€ãŠã‚ˆã³ä½¿ç”¨ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚``&`` ã§ã‚¢ãƒ³ã‚«ãƒ¼ã‚’定義ã—ã€``*`` ã§ç¤ºã™ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã—ã¦å‚ç…§ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€ã‚¢ãƒ³ã‚«ãƒ¼ã§ 3 ã¤ã®å€¤ã‚’設定ã—ã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã“れらã®å€¤ã‚’ 2 ã¤ä½¿ç”¨ã—ã€3 番目ã®å€¤ã‚’上書ãã™ã‚‹ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:67 msgid "Here, ``app1`` and ``app2`` share the values for ``opts`` and ``port`` using the anchor ``&jvm_opts`` and the alias ``*jvm_opts``. The value for ``path`` is merged by ``<<`` or `merge operator `_." msgstr "ã“ã“ã§ã€``app1`` ãŠã‚ˆã³ ``app2`` ã¯ã€ã‚¢ãƒ³ã‚«ãƒ¼ ``&jvm_opts`` ãŠã‚ˆã³ã‚¨ã‚¤ãƒªã‚¢ã‚¹ ``*jvm_opts`` を使用ã—ã¦ã€``opts`` 㨠``port`` ã®å€¤ã‚’共有ã—ã¾ã™ã€‚``path`` ã®å€¤ã¯ã€``<<`` ã¾ãŸã¯ `merge operator `_ ã«ã‚ˆã£ã¦ãƒžãƒ¼ã‚¸ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:70 msgid "Anchors and aliases also let you share complex sets of variable values, including nested variables. If you have one variable value that includes another variable value, you can define them separately::" msgstr "アンカーãŠã‚ˆã³ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã™ã‚‹ã¨ã€å…¥ã‚Œå­ã«ãªã£ãŸå¤‰æ•°ãªã©ã€è¤‡é›‘ãªå¤‰æ•°å€¤ã®ã‚»ãƒƒãƒˆã‚’共有ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã‚る変数値ã«åˆ¥ã®å¤‰æ•°å€¤ãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ãã®å¤‰æ•°å€¤ã‚’別々ã«å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:76 msgid "This is inefficient and, at scale, means more maintenance. To incorporate the version value in the name, you can use an anchor in ``app_version`` and an alias in ``custom_name``::" msgstr "ã“れã¯éžåŠ¹çŽ‡çš„ã§ã‚りã€å¤§è¦æ¨¡ãªå ´åˆã«ã¯ã€ã‚ˆã‚Šå¤šãã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒè¡Œã‚れã¾ã™ã€‚åå‰ã« version ã®å€¤ã‚’組ã¿è¾¼ã‚€ã«ã¯ã€``app_version`` ã«ã‚¢ãƒ³ã‚«ãƒ¼ã¨ã€``custom_name`` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:85 msgid "Now, you can re-use the value of ``app_version`` within the value of ``custom_name`` and use the output in a template::" msgstr "ã“れã§ã€``custom_name`` ã®å€¤ã® ``app_version`` ã®å€¤ã‚’å†åˆ©ç”¨ã—ã€ãƒ†ãƒ³ãƒ—レートã§å‡ºåŠ›ã‚’ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:101 msgid "You've anchored the value of ``version`` with the ``&my_version`` anchor, and re-used it with the ``*my_version`` alias. Anchors and aliases let you access nested values inside dictionaries." msgstr "``version`` ã®å€¤ã‚’ ``&my_version`` ã¨ã„ã†ã‚¢ãƒ³ã‚«ãƒ¼ã§å›ºå®šã—ã€``*my_version`` ã¨ã„ã†ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§å†åˆ©ç”¨ã—ã¦ã„ã¾ã™ã€‚アンカーã¨ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å†…ã®ãƒã‚¹ãƒˆã—ãŸå€¤ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:106 #: ../../rst/user_guide/playbooks_conditionals.rst:504 #: ../../rst/user_guide/playbooks_error_handling.rst:241 #: ../../rst/user_guide/playbooks_filters.rst:1842 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:732 #: ../../rst/user_guide/playbooks_lookups.rst:31 #: ../../rst/user_guide/playbooks_loops.rst:443 #: ../../rst/user_guide/playbooks_prompts.rst:112 #: ../../rst/user_guide/playbooks_tests.rst:393 msgid "All about variables" msgstr "変数ã®è©³ç´°" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:107 msgid ":ref:`complex_data_manipulation`" msgstr ":ref:`complex_data_manipulation`" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:108 msgid "Doing complex data manipulation in Ansible" msgstr "Ansible ã§ã®è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿æ“作ã®å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:109 #: ../../rst/user_guide/windows_dsc.rst:502 #: ../../rst/user_guide/windows_faq.rst:248 #: ../../rst/user_guide/windows_setup.rst:580 #: ../../rst/user_guide/windows_usage.rst:510 #: ../../rst/user_guide/windows_winrm.rst:911 msgid "`User Mailing List `_" msgstr "`User Mailing List `_" #: ../../rst/user_guide/playbooks_advanced_syntax.rst:110 #: ../../rst/user_guide/playbooks_async.rst:173 #: ../../rst/user_guide/playbooks_blocks.rst:187 #: ../../rst/user_guide/playbooks_conditionals.rst:506 #: ../../rst/user_guide/playbooks_debugger.rst:327 #: ../../rst/user_guide/playbooks_delegation.rst:156 #: ../../rst/user_guide/playbooks_environment.rst:139 #: ../../rst/user_guide/playbooks_error_handling.rst:243 #: ../../rst/user_guide/playbooks_filters.rst:1850 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:740 #: ../../rst/user_guide/playbooks_lookups.rst:35 #: ../../rst/user_guide/playbooks_loops.rst:445 #: ../../rst/user_guide/playbooks_prompts.rst:114 #: ../../rst/user_guide/playbooks_strategies.rst:223 #: ../../rst/user_guide/playbooks_tags.rst:430 #: ../../rst/user_guide/playbooks_templating.rst:59 #: ../../rst/user_guide/playbooks_tests.rst:401 #: ../../rst/user_guide/playbooks_variables.rst:464 #: ../../rst/user_guide/windows_dsc.rst:503 #: ../../rst/user_guide/windows_faq.rst:249 #: ../../rst/user_guide/windows_setup.rst:581 #: ../../rst/user_guide/windows_usage.rst:511 #: ../../rst/user_guide/windows_winrm.rst:912 msgid "Have a question? Stop by the google group!" msgstr "ã”質å•ã¯ã”ã–ã„ã¾ã™ã‹ã€‚Google Group ã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/playbooks_async.rst:4 msgid "Asynchronous actions and polling" msgstr "éžåŒæœŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ãƒãƒ¼ãƒªãƒ³ã‚°" #: ../../rst/user_guide/playbooks_async.rst:6 msgid "By default Ansible runs tasks synchronously, holding the connection to the remote node open until the action is completed. This means within a playbook, each task blocks the next task by default, meaning subsequent tasks will not run until the current task completes. This behavior can create challenges. For example, a task may take longer to complete than the SSH session allows for, causing a timeout. Or you may want a long-running process to execute in the background while you perform other tasks concurrently. Asynchronous mode lets you control how long-running tasks execute." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚’åŒæœŸçš„ã«å®Ÿè¡Œã—ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒå®Œäº†ã™ã‚‹ã¾ã§ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã¸ã®æŽ¥ç¶šã‚’ç¶­æŒã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€Playbook 内ã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã¯å„ã‚¿ã‚¹ã‚¯ãŒæ¬¡ã®ã‚¿ã‚¹ã‚¯ã‚’ブロックã—ã€ç¾åœ¨ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã™ã‚‹ã¾ã§å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れãªã„ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“ã®å‹•作ã«ã¯èª²é¡ŒãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚るタスク㌠SSH セッションã®è¨±å®¹ç¯„囲を超ãˆã¦å®Œäº†ã™ã‚‹ã®ã«æ™‚é–“ãŒã‹ã‹ã‚Šã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã¾ãŸã€ä»–ã®ã‚¿ã‚¹ã‚¯ã‚’åŒæ™‚ã«å®Ÿè¡Œã—ã¦ã„ã‚‹é–“ã€é•·æ™‚間実行ã™ã‚‹ãƒ—ロセスをãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å®Ÿè¡Œã—ãŸã„å ´åˆã‚‚ã‚りã¾ã™ã€‚éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€é•·æ™‚間実行ã™ã‚‹ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œæ–¹æ³•を制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:12 msgid "Asynchronous ad hoc tasks" msgstr "éžåŒæœŸã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚¿ã‚¹ã‚¯" #: ../../rst/user_guide/playbooks_async.rst:14 msgid "You can execute long-running operations in the background with :ref:`ad hoc tasks `. For example, to execute ``long_running_operation`` asynchronously in the background, with a timeout (``-B``) of 3600 seconds, and without polling (``-P``)::" msgstr ":ref:`ad hoc tasks ` を使用ã™ã‚‹ã¨ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é•·æ™‚間実行ã•れるæ“作を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``long_running_operation`` ã‚’ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§éžåŒæœŸçš„ã«å®Ÿè¡Œã—ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ (``-B``) ã‚’ 3600 ç§’ã«è¨­å®šã—ã€ãƒãƒ¼ãƒªãƒ³ã‚° (``-P``) を行ã‚ãªã„å ´åˆã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:18 msgid "To check on the job status later, use the ``async_status`` module, passing it the job ID that was returned when you ran the original job in the background::" msgstr "後ã§ã‚¸ãƒ§ãƒ–ステータスを確èªã™ã‚‹ã«ã¯ã€``async_status`` モジュールを使用ã—ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§å…ƒã®ã‚¸ãƒ§ãƒ–ã®å®Ÿè¡Œæ™‚ã«è¿”ã•れãŸã‚¸ãƒ§ãƒ– ID を渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:22 msgid "Ansible can also check on the status of your long-running job automatically with polling. In most cases, Ansible will keep the connection to your remote node open between polls. To run for 30 minutes and poll for status every 60 seconds::" msgstr "Ansible ã¯ã€ãƒãƒ¼ãƒªãƒ³ã‚°ã«ã‚ˆã£ã¦é•·æ™‚間実行ã™ã‚‹ã‚¸ãƒ§ãƒ–ã®çŠ¶æ…‹ã‚’è‡ªå‹•çš„ã«ç¢ºèªã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã€Ansible ã¯ãƒãƒ¼ãƒªãƒ³ã‚°ã®é–“もリモートノードã¸ã®æŽ¥ç¶šã‚’ç¶­æŒã—ã¾ã™ã€‚30 分間実行ã—ã€60 ç§’ã”ã¨ã«ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã«ã¯æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:26 msgid "Poll mode is smart so all jobs will be started before polling begins on any machine. Be sure to use a high enough ``--forks`` value if you want to get all of your jobs started very quickly. After the time limit (in seconds) runs out (``-B``), the process on the remote nodes will be terminated." msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ãƒ¢ãƒ¼ãƒ‰ã¯é«˜æ€§èƒ½ã§ã‚ã‚‹ãŸã‚ã€ã©ã®ãƒžã‚·ãƒ³ã§ã‚‚ãƒãƒ¼ãƒªãƒ³ã‚°ãŒé–‹å§‹ã™ã‚‹å‰ã«ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ãŒé–‹å§‹ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚¸ãƒ§ãƒ–ã‚’éžå¸¸ã«è¿…速ã«é–‹å§‹ã—ãŸã„å ´åˆã¯ ``--forks`` ã‚’å分ãªé«˜ã•ã«ã—ã¦ãã ã•ã„ã€‚åˆ¶é™æ™‚é–“ (ç§’å˜ä½) ãŒãªããªã‚‹ã¨ (``-B``)ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã®ãƒ—ロセスã¯çµ‚了ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:28 msgid "Asynchronous mode is best suited to long-running shell commands or software upgrades. Running the copy module asynchronously, for example, does not do a background file transfer." msgstr "éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã¯ã€é•·æ™‚間実行ã™ã‚‹ã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚„ソフトウェアã®ã‚¢ãƒƒãƒ—ã‚°ãƒ¬ãƒ¼ãƒ‰ã«æœ€é©ã§ã™ã€‚ãŸã¨ãˆã°ã€copy モジュールをéžåŒæœŸã§å®Ÿè¡Œã—ã¦ã‚‚ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã®ãƒ•ァイル転é€ã¯è¡Œã‚れã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_async.rst:31 msgid "Asynchronous playbook tasks" msgstr "éžåŒæœŸ Playbook タスク" #: ../../rst/user_guide/playbooks_async.rst:33 msgid ":ref:`Playbooks ` also support asynchronous mode and polling, with a simplified syntax. You can use asynchronous mode in playbooks to avoid connection timeouts or to avoid blocking subsequent tasks. The behavior of asynchronous mode in a playbook depends on the value of `poll`." msgstr ":ref:`Playbook ` ã¯ã€éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã¨ãƒãƒ¼ãƒªãƒ³ã‚°ã‚‚サãƒãƒ¼ãƒˆã—ã¦ãŠã‚Šã€æ§‹æ–‡ã‚‚簡素化ã•れã¦ã„ã¾ã™ã€‚éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã‚’ Playbook ã§ä½¿ç”¨ã™ã‚‹ã¨ã€æŽ¥ç¶šã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚„ã€å¾Œç¶šã‚¿ã‚¹ã‚¯ã®ãƒ–ロックを回é¿ã§ãã¾ã™ã€‚Playbook ã§ã®éžåŒæœŸãƒ¢ãƒ¼ãƒ‰ã®å‹•作ã¯ã€`poll` ã®å€¤ã«ä¾å­˜ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:36 msgid "Avoid connection timeouts: poll > 0" msgstr "接続ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®å›žé¿: poll > 0" #: ../../rst/user_guide/playbooks_async.rst:38 msgid "If you want to set a longer timeout limit for a certain task in your playbook, use ``async`` with ``poll`` set to a positive value. Ansible will still block the next task in your playbook, waiting until the async task either completes, fails or times out. However, the task will only time out if it exceeds the timeout limit you set with the ``async`` parameter." msgstr "Playbook 内ã®ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã«ã‚ˆã‚Šé•·ã„タイムアウト制é™ã‚’設定ã™ã‚‹å ´åˆã¯ã€``async`` を使用ã—ã€``poll`` ã‚’æ­£ã®å€¤ã«è¨­å®šã—ã¾ã™ã€‚Ansible ã¯ã€Playbook 内ã«è¨˜è¼‰ã•れる次ã®ã‚¿ã‚¹ã‚¯ã‚’ブロックã—ã€éžåŒæœŸã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã™ã‚‹ã‹ã€å¤±æ•—ã™ã‚‹ã‹ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã«ãªã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚ãŸã ã—ã€ã‚¿ã‚¹ã‚¯ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã«ãªã‚‹ã®ã¯ã€``async`` パラメーターã§è¨­å®šã—ãŸã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆåˆ¶é™ã‚’è¶…ãˆãŸå ´åˆã®ã¿ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:40 msgid "To avoid timeouts on a task, specify its maximum runtime and how frequently you would like to poll for status::" msgstr "タスクã§ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’回é¿ã™ã‚‹ã«ã¯ã€æœ€å¤§ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã¨ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’ãƒãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹é »åº¦ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:55 msgid "The default poll value is set by the :ref:`DEFAULT_POLL_INTERVAL` setting. There is no default for the async time limit. If you leave off the 'async' keyword, the task runs synchronously, which is Ansible's default." msgstr "デフォルトã®ãƒãƒ¼ãƒ«å€¤ã¯ã€:ref:`DEFAULT_POLL_INTERVAL` ã®è¨­å®šã§è¨­å®šã•れã¾ã™ã€‚éžåŒæœŸæ™‚間制é™ã®ãƒ‡ãƒ•ォルトã¯ã‚りã¾ã›ã‚“。「asyncã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’çœç•¥ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã¯åŒæœŸçš„ã«å®Ÿè¡Œã•れã¾ã™ã€‚ã“れ㌠Ansible ã®ãƒ‡ãƒ•ォルトã§ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:61 msgid "As of Ansible 2.3, async does not support check mode and will fail the task when run in check mode. See :ref:`check_mode_dry` on how to skip a task in check mode." msgstr "Ansible 2.3 ã®æ™‚点ã§ã¯ã€éžåŒæœŸã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã¦ãŠã‚‰ãšã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã¨ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã‚¿ã‚¹ã‚¯ã‚’スキップã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`check_mode_dry`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_async.rst:66 msgid "When an async task completes with polling enabled, the temporary async job cache file (by default in ~/.ansible_async/) is automatically removed." msgstr "ãƒãƒ¼ãƒªãƒ³ã‚°ã‚’有効ã«ã—ã¦éžåŒæœŸã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã™ã‚‹ã¨ã€ä¸€æ™‚çš„ãªéžåŒæœŸã‚¸ãƒ§ãƒ–キャッシュファイル (デフォルトã§ã¯ ~/.ansible_async/ ã«ã‚ã‚‹) ãŒè‡ªå‹•çš„ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:70 msgid "Run tasks concurrently: poll = 0" msgstr "タスクã®åŒæ™‚実行: poll = 0" #: ../../rst/user_guide/playbooks_async.rst:72 msgid "If you want to run multiple tasks in a playbook concurrently, use ``async`` with ``poll`` set to 0. When you set ``poll: 0``, Ansible starts the task and immediately moves on to the next task without waiting for a result. Each async task runs until it either completes, fails or times out (runs longer than its ``async`` value). The playbook run ends without checking back on async tasks." msgstr "Playbook 内ã®è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’åŒæ™‚ã«å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€``async`` を使用ã—ã€``poll`` ã‚’ 0 ã«è¨­å®šã—ã¾ã™ã€‚``poll: 0`` を設定ã™ã‚‹ã¨ã€Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚’é–‹å§‹ã—ã€çµæžœã‚’å¾…ãŸãšã«ç›´ã¡ã«æ¬¡ã®ã‚¿ã‚¹ã‚¯ã«ç§»ã‚Šã¾ã™ã€‚å„éžåŒæœŸã‚¿ã‚¹ã‚¯ã¯ã€å®Œäº†ã™ã‚‹ã‹ã€å¤±æ•—ã™ã‚‹ã‹ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã«ã™ã‚‹ (``async`` ã®å€¤ã‚ˆã‚Šã‚‚é•·ã実行ã•れる) ã¾ã§å®Ÿè¡Œã•れã¾ã™ã€‚Playbook ã®å®Ÿè¡Œã¯ã€éžåŒæœŸã‚¿ã‚¹ã‚¯ã‚’å†åº¦ãƒã‚§ãƒƒã‚¯ã›ãšã«çµ‚了ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:74 msgid "To run a playbook task asynchronously::" msgstr "Playbook タスクをéžåŒæœŸçš„ã«å®Ÿè¡Œã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:89 msgid "Do not specify a poll value of 0 with operations that require exclusive locks (such as yum transactions) if you expect to run other commands later in the playbook against those same resources." msgstr "排他的ロックを必è¦ã¨ã™ã‚‹æ“作 (yum トランザクションãªã©) ã§ã¯ã€åŒã˜ãƒªã‚½ãƒ¼ã‚¹ã«å¯¾ã—㦠Playbook ã®å¾ŒåŠã§ä»–ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã€poll 値㫠0 を指定ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/playbooks_async.rst:92 msgid "Using a higher value for ``--forks`` will result in kicking off asynchronous tasks even faster. This also increases the efficiency of polling." msgstr "``--forks`` ã®å€¤ã‚’増やã™ã¨ã€éžåŒæœŸã‚¿ã‚¹ã‚¯ã®é–‹å§‹ãŒé€Ÿããªã‚Šã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒãƒ¼ãƒªãƒ³ã‚°ã®åŠ¹çŽ‡ãŒé«˜ã¾ã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:95 msgid "When running with ``poll: 0``, Ansible will not automatically cleanup the async job cache file. You will need to manually clean this up with the :ref:`async_status ` module with ``mode: cleanup``." msgstr "``poll: 0`` ã§å®Ÿè¡Œã™ã‚‹ã¨ã€Ansible ã¯éžåŒæœŸã‚¸ãƒ§ãƒ–キャッシュファイルを自動的ã«ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã—ã¾ã›ã‚“。``mode: cleanup`` ã§ :ref:`async_status ` モジュールを使用ã—ã¦æ‰‹å‹•ã§ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:99 msgid "If you need a synchronization point with an async task, you can register it to obtain its job ID and use the :ref:`async_status ` module to observe it in a later task. For example::" msgstr "éžåŒæœŸã‚¿ã‚¹ã‚¯ã¨ã®åŒæœŸãƒã‚¤ãƒ³ãƒˆãŒå¿…è¦ãªå ´åˆã¯ã€ã“れを登録ã—ã¦ã‚¸ãƒ§ãƒ– ID ã‚’å–å¾—ã—ã€:ref:`async_status ` モジュールを使用ã—ã¦å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ã§ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:118 msgid "If the value of ``async:`` is not high enough, this will cause the \"check on it later\" task to fail because the temporary status file that the ``async_status:`` is looking for will not have been written or no longer exist" msgstr "``async:`` ã®å€¤ãŒå分ã«é«˜ããªã„å ´åˆã¯ã€``async_status:`` ãŒæŽ¢ã—ã¦ã„る一時的ãªã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ãè¾¼ã¾ã‚Œã¦ã„ãªã„ã‹ã€å­˜åœ¨ã—ãªããªã£ãŸãŸã‚ã€ã€Œå¾Œã§ç¢ºèªã™ã‚‹ã€ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:123 msgid "Asynchronous playbook tasks always return changed. If the task is using a module that requires the user to annotate changes with ``changed_when``, ``creates``, and so on, then those should be added to the following ``async_status`` task." msgstr "éžåŒæœŸ Playbook タスクã¯å¸¸ã«å¤‰æ›´ã‚’è¿”ã—ã¾ã™ã€‚タスクãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ ``changed_when`` ãŠã‚ˆã³ ``creates`` を使用ã—ã¦å¤‰æ›´ã«ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚るモジュールを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãれらã®ã‚¿ã‚¹ã‚¯ã‚’以下㮠``async_status`` タスクã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:127 msgid "To run multiple asynchronous tasks while limiting the number of tasks running concurrently::" msgstr "複数ã®éžåŒæœŸã‚¿ã‚¹ã‚¯ã‚’実行ã—ãªãŒã‚‰ã€åŒæ™‚ã«å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®æ•°ã‚’制é™ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_async.rst:168 #: ../../rst/user_guide/playbooks_delegation.rst:151 msgid ":ref:`playbooks_strategies`" msgstr ":ref:`playbooks_strategies`" #: ../../rst/user_guide/playbooks_async.rst:169 msgid "Options for controlling playbook execution" msgstr "Playbook ã®å®Ÿè¡Œã‚’制御ã™ã‚‹ã‚ªãƒ—ション" #: ../../rst/user_guide/playbooks_async.rst:172 #: ../../rst/user_guide/playbooks_blocks.rst:186 #: ../../rst/user_guide/playbooks_conditionals.rst:505 #: ../../rst/user_guide/playbooks_debugger.rst:326 #: ../../rst/user_guide/playbooks_delegation.rst:155 #: ../../rst/user_guide/playbooks_environment.rst:138 #: ../../rst/user_guide/playbooks_error_handling.rst:242 #: ../../rst/user_guide/playbooks_filters.rst:1849 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:739 #: ../../rst/user_guide/playbooks_lookups.rst:34 #: ../../rst/user_guide/playbooks_loops.rst:444 #: ../../rst/user_guide/playbooks_prompts.rst:113 #: ../../rst/user_guide/playbooks_strategies.rst:222 #: ../../rst/user_guide/playbooks_tags.rst:429 #: ../../rst/user_guide/playbooks_templating.rst:58 #: ../../rst/user_guide/playbooks_tests.rst:400 #: ../../rst/user_guide/playbooks_variables.rst:463 msgid "`User Mailing List `_" msgstr "`ユーザーメーリングリスト `_" #: ../../rst/user_guide/playbooks_best_practices.rst:6 msgid "Tips and tricks" msgstr "ヒントã¨è£æŠ€" #: ../../rst/user_guide/playbooks_best_practices.rst:8 msgid "These tips and tricks have helped us optimize our Ansible usage, and we offer them here as suggestions. We hope they will help you organize content, write playbooks, maintain inventory, and execute Ansible. Ultimately, though, you should use Ansible in the way that makes most sense for your organization and your goals." msgstr "ã“れらã®ãƒ’ントã¨ã‚³ãƒ„ã¯ã€Ansible ã®ä½¿ç”¨æ³•を最é©åŒ–ã™ã‚‹ã®ã«å½¹ã«ç«‹ã£ãŸãŸã‚ã€ææ¡ˆã¨ã—ã¦ã“ã“ã«ç¤ºã—ã¾ã™ã€‚ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ•´ç†ã€Playbook ã®ä½œæˆã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ç¶­æŒã€Ansible ã®å®Ÿè¡Œã«å½¹ç«‹ã¤ã“ã¨ã‚’願ã£ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€æœ€çµ‚çš„ã«ã¯ã€è‡ªèº«ã®çµ„ç¹”ã¨ç›®æ¨™ã«æœ€ã‚‚é©ã—ãŸæ–¹æ³•ã§ Ansible を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:14 msgid "General tips" msgstr "一般的ãªãƒ’ント" #: ../../rst/user_guide/playbooks_best_practices.rst:16 msgid "These concepts apply to all Ansible activities and artifacts." msgstr "ã“ã®æ¦‚念ã¯ã€ã™ã¹ã¦ã® Ansible アクティビティーãŠã‚ˆã³ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:19 msgid "Keep it simple" msgstr "シンプルã®ã¾ã¾ã«ã™ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:21 msgid "Whenever you can, do things simply. Use advanced features only when necessary, and select the feature that best matches your use case. For example, you will probably not need ``vars``, ``vars_files``, ``vars_prompt`` and ``--extra-vars`` all at once, while also using an external inventory file. If something feels complicated, it probably is. Take the time to look for a simpler solution." msgstr "ã§ãã‚‹é™ã‚Šã‚·ãƒ³ãƒ—ルã«ã€‚é«˜åº¦ãªæ©Ÿèƒ½ã¯å¿…è¦ãªå ´åˆã«ã®ã¿ä½¿ç”¨ã—ã€è‡ªèº«ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«æœ€ã‚‚一致ã—ãŸæ©Ÿèƒ½ã‚’é¸æŠžã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€å¤–部ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを使用ã—ãªãŒã‚‰ã€``vars``ã€``vars_files``ã€``vars_prompt``ã€ãŠã‚ˆã³ ``--extra-vars`` を一度ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ãªã„ã§ã—ょã†ã€‚何ã‹ãŒè¤‡é›‘ã«æ„Ÿã˜ã‚‰ã‚Œã‚‹å ´åˆã¯ã€ãŠãらã複雑ãªã®ã§ã™ã€‚時間をã‹ã‘ã¦ã€ã‚ˆã‚Šã‚·ãƒ³ãƒ—ルãªã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã‚’探ã—ã¦ã¿ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_best_practices.rst:24 msgid "Use version control" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³åˆ¶å¾¡ã‚’使用ã™ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:26 msgid "Keep your playbooks, roles, inventory, and variables files in git or another version control system and make commits to the repository when you make changes. Version control gives you an audit trail describing when and why you changed the rules that automate your infrastructure." msgstr "Playbookã€ãƒ­ãƒ¼ãƒ«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€å¤‰æ•°ãªã©ã®ãƒ•ァイルを git ãªã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ ã§ç®¡ç†ã—ã€å¤‰æ›´ãŒã‚ã£ãŸå ´åˆã¯ãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã«ã‚³ãƒŸãƒƒãƒˆã—ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã¯ã€ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’自動化ã™ã‚‹ãƒ«ãƒ¼ãƒ«ã‚’ã„ã¤ã€ãªãœå¤‰æ›´ã—ãŸã‹ã‚’示ã™ç›£æŸ»è¨¼è·¡ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:29 msgid "Playbook tips" msgstr "Playbook ã®ãƒ’ント" #: ../../rst/user_guide/playbooks_best_practices.rst:31 msgid "These tips help make playbooks and roles easier to read, maintain, and debug." msgstr "ã“ã®ãƒ’ントã¯ã€Playbook ã¨ãƒ­ãƒ¼ãƒ«ã®èª­ã¿å–りã€ç¶­æŒã€ãŠã‚ˆã³ãƒ‡ãƒãƒƒã‚°ã‚’容易ã«ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:34 msgid "Use whitespace" msgstr "空白を使用ã™ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:36 msgid "Generous use of whitespace, for example, a blank line before each block or task, makes a playbook easy to scan." msgstr "å„ブロックやタスクã®å‰ã«ç©ºã®è¡Œãªã©ã€ç©ºç™½ã‚’使用ã™ã‚‹ã¨ Playbook ã‚’ç°¡å˜ã«ã‚¹ã‚­ãƒ£ãƒ³ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:39 msgid "Always name tasks" msgstr "常ã«ã‚¿ã‚¹ã‚¯ã«åå‰ã‚’付ã‘ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:41 msgid "Task names are optional, but extremely useful. In its output, Ansible shows you the name of each task it runs. Choose names that describe what each task does and why." msgstr "タスクåã¯ä»»æ„ã§ã™ãŒã€éžå¸¸ã«ä¾¿åˆ©ãªã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚ãã®å‡ºåŠ›ã§ã€Ansible ã§ã¯ã€å®Ÿè¡Œã™ã‚‹å„タスクã®åå‰ãŒè¨˜è¼‰ã•れã¾ã™ã€‚å„ã‚¿ã‚¹ã‚¯ã®æ©Ÿèƒ½ã‚„ç†ç”±ã‚’説明ã™ã‚‹åå‰ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:44 msgid "Always mention the state" msgstr "状態ã«ã¤ã„ã¦å¸¸ã«è¨€åŠã™ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:46 msgid "For many modules, the 'state' parameter is optional. Different modules have different default settings for 'state', and some modules support several 'state' settings. Explicitly setting 'state=present' or 'state=absent' makes playbooks and roles clearer." msgstr "多ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ã€ã€Œstateã€ãƒ‘ラメーターã¯ä»»æ„ã§ã™ã€‚モジュールã«ã‚ˆã£ã¦ã€Œstateã€ã®ãƒ‡ãƒ•ォルト設定ã¯ç•°ãªã‚Šã€è¤‡æ•°ã®ã€Œstateã€è¨­å®šã‚’サãƒãƒ¼ãƒˆã—ã¦ã„るモジュールもã‚りã¾ã™ã€‚「state=presentã€ã‚„「state=absentã€ã‚’明示的ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€Playbook やロールãŒã‚ˆã‚Šæ˜Žç¢ºã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:49 msgid "Use comments" msgstr "コマンドを使用ã™ã‚‹" #: ../../rst/user_guide/playbooks_best_practices.rst:51 msgid "Even with task names and explicit state, sometimes a part of a playbook or role (or inventory/variable file) needs more explanation. Adding a comment (any line starting with '#') helps others (and possibly yourself in future) understand what a play or task (or variable setting) does, how it does it, and why." msgstr "タスクåã‚„çŠ¶æ…‹ãŒæ˜Žç¤ºã•れã¦ã„ã¦ã‚‚ã€Playbook やロール (ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼/変数ファイル) ã®ä¸€éƒ¨ã«ã•らã«èª¬æ˜ŽãŒå¿…è¦ãªå ´åˆãŒã‚りã¾ã™ã€‚コメント (「#ã€ã§å§‹ã¾ã‚‹è¡Œ) を追加ã™ã‚‹ã“ã¨ã§ã€ãƒ—レイやタスク (ã¾ãŸã¯å¤‰æ•°è¨­å®š) ãŒä½•ã‚’ã©ã®ã‚ˆã†ã«è¡Œã†ã®ã‹ã€ã¾ãŸãã®ç†ç”±ã‚’ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ (ãã—ã¦å°†æ¥çš„ã«ã¯è‡ªåˆ†è‡ªèº«) ãŒç†è§£ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:54 msgid "Inventory tips" msgstr "インベントリーã®ãƒ’ント" #: ../../rst/user_guide/playbooks_best_practices.rst:56 msgid "These tips help keep your inventory well organized." msgstr "ã“れらã®ãƒ’ントã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚’ååˆ†ã«æ•´ç†ã™ã‚‹ã®ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:59 msgid "Use dynamic inventory with clouds" msgstr "クラウドã§ã®å‹•的インベントリーã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_best_practices.rst:61 msgid "With cloud providers and other systems that maintain canonical lists of your infrastructure, use :ref:`dynamic inventory ` to retrieve those lists instead of manually updating static inventory files. With cloud resources, you can use tags to differentiate production and staging environments." msgstr "クラウドプロãƒã‚¤ãƒ€ãƒ¼ã‚„ãã®ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ãŒã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã®æ­£è¦ã®ãƒªã‚¹ãƒˆã‚’管ç†ã—ã¦ã„ã‚‹å ´åˆã¯ã€é™çš„ãªã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ‰‹å‹•ã§æ›´æ–°ã™ã‚‹ä»£ã‚りã«ã€:ref:`動的インベントリー ` を使用ã—ã¦ã“れらã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚クラウドリソースã§ã¯ã€ã‚¿ã‚°ã‚’使用ã—ã¦æœ¬ç•ªç’°å¢ƒã¨ã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ç’°å¢ƒã‚’区別ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:64 msgid "Group inventory by function" msgstr "機能別ã«ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—化" #: ../../rst/user_guide/playbooks_best_practices.rst:66 msgid "A system can be in multiple groups. See :ref:`intro_inventory` and :ref:`intro_patterns`. If you create groups named for the function of the nodes in the group, for example *webservers* or *dbservers*, your playbooks can target machines based on function. You can assign function-specific variables using the group variable system, and design Ansible roles to handle function-specific use cases. See :ref:`playbooks_reuse_roles`." msgstr "1 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ã¯è¤‡æ•°ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「:ref:`intro_inventory`ã€ãŠã‚ˆã³ã€Œ:ref:`intro_patterns`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。*webservers*ã€*dbservers* ãªã©ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã®ãƒŽãƒ¼ãƒ‰ã®æ©Ÿèƒ½ã«å¿œã˜ãŸåå‰ã®ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ã¨ã€Playbook ã§æ©Ÿèƒ½ã«å¿œã˜ã¦ãƒžã‚·ãƒ³ã‚’ターゲットã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚グループ変数システムを使用ã—ã¦æ©Ÿèƒ½å›ºæœ‰ã®å¤‰æ•°ã‚’割り当ã¦ã€æ©Ÿèƒ½å›ºæœ‰ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’処ç†ã™ã‚‹ãŸã‚ã« Ansible ロールを設計ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「:ref:`playbooks_reuse_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_best_practices.rst:69 msgid "Separate production and staging inventory" msgstr "別個ã®å®Ÿç¨¼åƒãŠã‚ˆã³ã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼" #: ../../rst/user_guide/playbooks_best_practices.rst:71 msgid "You can keep your production environment separate from development, test, and staging environments by using separate inventory files or directories for each environment. This way you pick with -i what you are targeting. Keeping all your environments in one file can lead to surprises!" msgstr "実稼åƒã‚’開発環境ã€ãƒ†ã‚¹ãƒˆç’°å¢ƒã€ã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ç’°å¢ƒã‹ã‚‰åˆ†é›¢ã™ã‚‹ã«ã¯ã€ãれãžã‚Œã®ç’°å¢ƒã«å€‹åˆ¥ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’使用ã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã§ã¯ã€-i ã§å¯¾è±¡ã¨ãªã‚‹ã‚‚ã®ã‚’é¸ã¶ã“ã¨ãŒã§ãã¾ã™ã€‚ã™ã¹ã¦ã®ç’°å¢ƒã‚’ 1 ã¤ã®ãƒ•ァイルã«ã¾ã¨ã‚ã¦ãŠãã¨ã€é©šãよã†ãªã“ã¨ãŒèµ·ã“りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:76 msgid "Keep vaulted variables safely visible" msgstr "Vault 処ç†ã•れãŸå¤‰æ•°ã‚’安全ã«è¡¨ç¤º" #: ../../rst/user_guide/playbooks_best_practices.rst:78 msgid "You should encrypt sensitive or secret variables with Ansible Vault. However, encrypting the variable names as well as the variable values makes it hard to find the source of the values. You can keep the names of your variables accessible (by ``grep``, for example) without exposing any secrets by adding a layer of indirection:" msgstr "機密性ã®é«˜ã„変数や秘密ã®å¤‰æ•°ã¯ã€Ansible Vault ã§æš—å·åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã—ã‹ã—ã€å¤‰æ•°åã ã‘ã§ãªã変数ã®å€¤ã‚‚æš—å·åŒ–ã™ã‚‹ã¨ã€ã©ã“ã‹ã‚‰å€¤ã‚’å–å¾—ã—ã¦ã„ã‚‹ã‹ã‚’見ã¤ã‘ã‚‹ã®ãŒé›£ã—ããªã‚Šã¾ã™ã€‚間接層を追加ã™ã‚‹ã“ã¨ã§ã€ç§˜å¯†ã‚’公開ã™ã‚‹ã“ã¨ãªãã€å¤‰æ•°ã®åå‰ã« (ãŸã¨ãˆã° ``grep`` ã§) アクセスã§ãる状態を維æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:80 msgid "Create a ``group_vars/`` subdirectory named after the group." msgstr "グループã®åå‰ãŒä»˜ã‘られ㟠``group_vars/`` サブディレクトリーを作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:81 msgid "Inside this subdirectory, create two files named ``vars`` and ``vault``." msgstr "ã“ã®ã‚µãƒ–ディレクトリー内ã«ã€``vars`` 㨠``vault`` ã¨ã„ã†åå‰ã®ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:82 msgid "In the ``vars`` file, define all of the variables needed, including any sensitive ones." msgstr "``vars`` ファイルã§ã€æ©Ÿå¯†æ€§ã®é«˜ã„変数ãªã©ã€å¿…è¦ãªå¤‰æ•°ã‚’ã™ã¹ã¦å®šç¾©ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:83 msgid "Copy all of the sensitive variables over to the ``vault`` file and prefix these variables with ``vault_``." msgstr "ã™ã¹ã¦ã®æ©Ÿå¯†å¤‰æ•°ã‚’ ``vault`` ファイルã«ã‚³ãƒ”ーã—ã€ã“ã®å¤‰æ•°ã®å‰ã« ``vault_`` を付ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:84 msgid "Adjust the variables in the ``vars`` file to point to the matching ``vault_`` variables using jinja2 syntax: ``db_password: {{ vault_db_password }}``." msgstr "jinja2 構文を使用ã—ã¦ä¸€è‡´ã™ã‚‹ ``vault_`` 変数をå‚ç…§ã™ã‚‹ã‚ˆã†ã«ã€``vars`` ファイルã®å¤‰æ•°ã‚’調整ã—ã¾ã™ (``db_password: {{ vault_db_password }}``)。" #: ../../rst/user_guide/playbooks_best_practices.rst:85 msgid "Encrypt the ``vault`` file to protect its contents." msgstr "``vault`` ファイルを暗å·åŒ–ã™ã‚‹ã“ã¨ã§ã€ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ä¿è­·ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:86 msgid "Use the variable name from the ``vars`` file in your playbooks." msgstr "Playbook ã® ``vars`` ファイルã®å¤‰æ•°åを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:88 msgid "When running a playbook, Ansible finds the variables in the unencrypted file, which pulls the sensitive variable values from the encrypted file. There is no limit to the number of variable and vault files or their names." msgstr "Playbook を実行ã™ã‚‹éš›ã€Ansible ã¯æš—å·åŒ–ã•れã¦ã„ãªã„ファイルã®å¤‰æ•°ã‚’見ã¤ã‘ã€æš—å·åŒ–ã•れãŸãƒ•ァイルã‹ã‚‰æ©Ÿå¯†æ€§ã®é«˜ã„変数ã®å€¤ã‚’引ã出ã—ã¾ã™ã€‚変数ファイル㨠Vault ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°ã‚„åå‰ã«åˆ¶é™ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_best_practices.rst:91 msgid "Execution tricks" msgstr "実行トリック" #: ../../rst/user_guide/playbooks_best_practices.rst:93 msgid "These tips apply to using Ansible, rather than to Ansible artifacts." msgstr "ã“ã®ãƒ’ントã¯ã€Ansible アーティファクトã§ã¯ãªã Ansible ã®ä½¿ç”¨ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:96 msgid "Try it in staging first" msgstr "最åˆã«ã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ã§è©¦ã™" #: ../../rst/user_guide/playbooks_best_practices.rst:98 msgid "Testing changes in a staging environment before rolling them out in production is always a great idea. Your environments need not be the same size and you can use group variables to control the differences between those environments." msgstr "変更を実稼åƒç’°å¢ƒã«å±•é–‹ã™ã‚‹å‰ã«ã‚¹ãƒ†ãƒ¼ã‚¸ãƒ³ã‚°ç’°å¢ƒã§ãƒ†ã‚¹ãƒˆã™ã‚‹ã“ã¨ã¯ã€å¸¸ã«ç´ æ™´ã‚‰ã—ã„考ãˆã§ã™ã€‚環境ã¯åŒã˜å¤§ãã•ã§ã‚ã‚‹å¿…è¦ã¯ãªãã€ã‚°ãƒ«ãƒ¼ãƒ—変数を使用ã—ã¦ç’°å¢ƒé–“ã®é•ã„を制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:101 msgid "Update in batches" msgstr "ãƒãƒƒãƒã®æ›´æ–°" #: ../../rst/user_guide/playbooks_best_practices.rst:103 msgid "Use the 'serial' keyword to control how many machines you update at once in the batch. See :ref:`playbooks_delegation`." msgstr "「serialã€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã€ãƒãƒƒãƒã§ä¸€åº¦ã«ã‚¢ãƒƒãƒ—デートã™ã‚‹ãƒžã‚·ãƒ³ã®æ•°ã‚’制御ã—ã¾ã™ã€‚「:ref:`playbooks_delegation`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_best_practices.rst:108 msgid "Handling OS and distro differences" msgstr "OS ã¨ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ç›¸é•点ã®å‡¦ç†" #: ../../rst/user_guide/playbooks_best_practices.rst:110 msgid "Group variables files and the ``group_by`` module work together to help Ansible execute across a range of operating systems and distributions that require different settings, packages, and tools. The ``group_by`` module creates a dynamic group of hosts matching certain criteria. This group does not need to be defined in the inventory file. This approach lets you execute different tasks on different operating systems or distributions. For example::" msgstr "グループ変数ファイル㨠``group_by`` モジュールãŒé€£æºã™ã‚‹ã“ã¨ã§ã€Ansible ã¯ã€ç•°ãªã‚‹è¨­å®šã€ãƒ‘ッケージã€ãƒ„ールを必è¦ã¨ã™ã‚‹ã•ã¾ã–ã¾ãªã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚„ディストリビューションã«å¯¾å¿œã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``group_by`` モジュールã¯ã€ç‰¹å®šã®æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ›ã‚¹ãƒˆã®å‹•的グループを作æˆã—ã¾ã™ã€‚ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã§å®šç¾©ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ã“ã®æ–¹æ³•ã§ã¯ã€ç•°ãªã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚„ディストリビューション上ã§ç•°ãªã‚‹ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:128 msgid "The first play categorizes all systems into dynamic groups based on the operating system name. Later plays can use these groups as patterns on the ``hosts`` line. You can also add group-specific settings in group vars files. All three names must match: the name created by the ``group_by`` task, the name of the pattern in subsequent plays, and the name of the group vars file. For example::" msgstr "最åˆã®ãƒ—レイã§ã¯ã€ã™ã¹ã¦ã®ã‚·ã‚¹ãƒ†ãƒ ã‚’オペレーティングシステムã®åå‰ã«åŸºã¥ã„ã¦å‹•çš„ãªã‚°ãƒ«ãƒ¼ãƒ—ã«åˆ†é¡žã—ã¾ã™ã€‚後ã®ãƒ—レイã§ã¯ã€ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ ``hosts`` 行ã®ãƒ‘ターンã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ã¾ãŸã€ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ãƒ•ァイルã§ã‚°ãƒ«ãƒ¼ãƒ—固有ã®è¨­å®šã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚``group_by`` タスクã§ä½œæˆã•れãŸåå‰ã€å¾Œç¶šã®ãƒ—レイã§ã®ãƒ‘ターンã®åå‰ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®å¤‰æ•°ãƒ•ァイルã®åå‰ã® 3 ã¤ã®åå‰ãŒã™ã¹ã¦ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:138 msgid "In this example, CentOS machines get the value of '42' for asdf, but other machines get '10'. This can be used not only to set variables, but also to apply certain roles to only certain systems." msgstr "ã“ã®ä¾‹ã§ã¯ã€CentOS マシンã§ã¯ asdf ã«ã€Œ42ã€ã¨ã„ã†å€¤ãŒè¨­å®šã•れã¾ã™ãŒã€ãã®ä»–ã®ãƒžã‚·ãƒ³ã§ã¯ã€Œ10ã€ãŒè¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€å¤‰æ•°ã®è¨­å®šã ã‘ã§ãªãã€ç‰¹å®šã®ã‚·ã‚¹ãƒ†ãƒ ã ã‘ã«ç‰¹å®šã®ãƒ­ãƒ¼ãƒ«ã‚’é©ç”¨ã™ã‚‹ãŸã‚ã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:141 msgid "You can use the same setup with ``include_vars`` when you only need OS-specific variables, not tasks::" msgstr "タスクã§ã¯ãªãã€OS 固有ã®å¤‰æ•°ã®ã¿ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆã¯ã€``include_vars`` ã§åŒã˜è¨­å®šã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:150 msgid "This pulls in variables from the group_vars/os_CentOS.yml file." msgstr "ã“れã«ã‚ˆã‚Šã€group_vars/os_CentOS.yml ファイルã‹ã‚‰å¤‰æ•°ãŒãƒ—ルã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_best_practices.rst:154 #: ../../rst/user_guide/playbooks_intro.rst:142 #: ../../rst/user_guide/playbooks_reuse_includes.rst:13 #: ../../rst/user_guide/playbooks_reuse_roles.rst:602 #: ../../rst/user_guide/sample_setup.rst:272 msgid ":ref:`yaml_syntax`" msgstr ":ref:`yaml_syntax`" #: ../../rst/user_guide/playbooks_best_practices.rst:155 #: ../../rst/user_guide/playbooks_intro.rst:143 #: ../../rst/user_guide/playbooks_reuse_includes.rst:14 #: ../../rst/user_guide/playbooks_reuse_roles.rst:603 #: ../../rst/user_guide/sample_setup.rst:273 msgid "Learn about YAML syntax" msgstr "YAML æ§‹æ–‡ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_best_practices.rst:157 #: ../../rst/user_guide/sample_setup.rst:275 msgid "Review the basic playbook features" msgstr "基本的㪠Playbook 機能ã®ç¢ºèª" #: ../../rst/user_guide/playbooks_best_practices.rst:161 #: ../../rst/user_guide/playbooks_reuse_includes.rst:28 #: ../../rst/user_guide/sample_setup.rst:279 msgid "Learn how to extend Ansible by writing your own modules" msgstr "独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—㦠Ansible ã‚’æ‹¡å¼µã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_best_practices.rst:162 #: ../../rst/user_guide/playbooks_intro.rst:150 #: ../../rst/user_guide/sample_setup.rst:280 msgid ":ref:`intro_patterns`" msgstr ":ref:`intro_patterns`" #: ../../rst/user_guide/playbooks_best_practices.rst:163 #: ../../rst/user_guide/playbooks_intro.rst:151 #: ../../rst/user_guide/sample_setup.rst:281 msgid "Learn about how to select hosts" msgstr "ホストã®é¸æŠžæ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_best_practices.rst:164 #: ../../rst/user_guide/playbooks_intro.rst:152 #: ../../rst/user_guide/sample_setup.rst:282 msgid "`GitHub examples directory `_" msgstr "`GitHub サンプルディレクトリー `_" #: ../../rst/user_guide/playbooks_best_practices.rst:165 #: ../../rst/user_guide/sample_setup.rst:283 msgid "Complete playbook files from the github project source" msgstr "Github プロジェクトソースã®å®Œå…¨ãª Playbook ファイル" #: ../../rst/user_guide/playbooks_blocks.rst:5 msgid "Blocks" msgstr "ブロック" #: ../../rst/user_guide/playbooks_blocks.rst:7 msgid "Blocks create logical groups of tasks. Blocks also offer ways to handle task errors, similar to exception handling in many programming languages." msgstr "ブロックã¯ã€ã‚¿ã‚¹ã‚¯ã®è«–ç†çš„ãªã‚°ãƒ«ãƒ¼ãƒ—を作りã¾ã™ã€‚ã¾ãŸã€ãƒ–ロックã«ã¯ã‚¿ã‚¹ã‚¯ã®ã‚¨ãƒ©ãƒ¼ã‚’処ç†ã™ã‚‹æ–¹æ³•ãŒã‚りã€å¤šãã®ãƒ—ログラミング言語ã®ä¾‹å¤–処ç†ã«ä¼¼ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:13 msgid "Grouping tasks with blocks" msgstr "ブロックを使用ã—ãŸã‚¿ã‚¹ã‚¯ã®ã‚°ãƒ«ãƒ¼ãƒ—化" #: ../../rst/user_guide/playbooks_blocks.rst:15 msgid "All tasks in a block inherit directives applied at the block level. Most of what you can apply to a single task (with the exception of loops) can be applied at the block level, so blocks make it much easier to set data or directives common to the tasks. The directive does not affect the block itself, it is only inherited by the tasks enclosed by a block. For example, a `when` statement is applied to the tasks within a block, not to the block itself." msgstr "ブロック内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ–ロックレベルã§é©ç”¨ã•れるディレクティブを継承ã—ã¾ã™ã€‚å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã§ãã‚‹ã‚‚ã® (ループを除ã) ã®ã»ã¨ã‚“ã©ã¯ã€ãƒ–ロックレベルã§é©ç”¨ã§ãã‚‹ãŸã‚ã€ãƒ–ロックを使用ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã«å…±é€šã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚„ディレクティブを設定ã™ã‚‹ã“ã¨ãŒéžå¸¸ã«ç°¡å˜ã«ãªã‚Šã¾ã™ã€‚ディレクティブã¯ãƒ–ロック自体ã«ã¯å½±éŸ¿ã›ãšã€ãƒ–ロックã§å›²ã¾ã‚ŒãŸã‚¿ã‚¹ã‚¯ã«ã®ã¿ç¶™æ‰¿ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€`when` æ–‡ã¯ã€ãƒ–ロック自体ã«ã§ã¯ãªãã€ãƒ–ロック内ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:17 msgid "Block example with named tasks inside the block" msgstr "内部ã«åå‰ä»˜ãタスクをå«ã‚€ãƒ–ロックã®ä¾‹" #: ../../rst/user_guide/playbooks_blocks.rst:46 msgid "In the example above, the 'when' condition will be evaluated before Ansible runs each of the three tasks in the block. All three tasks also inherit the privilege escalation directives, running as the root user. Finally, ``ignore_errors: yes`` ensures that Ansible continues to execute the playbook even if some of the tasks fail." msgstr "上ã®ä¾‹ã§ã¯ã€Ansible ãŒãƒ–ロック内㮠3 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’ãれãžã‚Œå®Ÿè¡Œã™ã‚‹å‰ã«ã€ã€Œwhenã€æ¡ä»¶ãŒè©•価ã•れã¾ã™ã€‚ã¾ãŸã€3 ã¤ã®ã‚¿ã‚¹ã‚¯ã¯ã™ã¹ã¦ã€ç‰¹æ¨©æ˜‡æ ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–を継承ã—ã€root ユーザーã¨ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚最後ã«ã€``ignore_errors: yes`` ã¯ã€ä¸€éƒ¨ã®ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ã¦ã‚‚ã€Ansible ㌠Playbook ã®å®Ÿè¡Œã‚’継続ã™ã‚‹ã“ã¨ã‚’ä¿è¨¼ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:48 msgid "Names for blocks have been available since Ansible 2.3. We recommend using names in all tasks, within blocks or elsewhere, for better visibility into the tasks being executed when you run the playbook." msgstr "ブロックã®åå‰ã¯ã€Ansible 2.3 ã‹ã‚‰åˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚Playbook ã®å®Ÿè¡Œæ™‚ã«å®Ÿè¡Œã•れã¦ã„るタスクã®å¯è¦–性を高ã‚ã‚‹ãŸã‚ã«ã€ãƒ–ロック内やãã®ä»–ã®å ´æ‰€ã§ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åå‰ã‚’使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:53 msgid "Handling errors with blocks" msgstr "ブロックを使用ã—ãŸã‚¨ãƒ©ãƒ¼ã®å‡¦ç†" #: ../../rst/user_guide/playbooks_blocks.rst:55 msgid "You can control how Ansible responds to task errors using blocks with ``rescue`` and ``always`` sections." msgstr "``rescue`` セクションãŠã‚ˆã³ ``always`` セクションã®ãƒ–ロックを使用ã—ã¦ã€Ansible ãŒã‚¿ã‚¹ã‚¯ã‚¨ãƒ©ãƒ¼ã«å¯¾å¿œã™ã‚‹æ–¹æ³•を制御ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:57 msgid "Rescue blocks specify tasks to run when an earlier task in a block fails. This approach is similar to exception handling in many programming languages. Ansible only runs rescue blocks after a task returns a 'failed' state. Bad task definitions and unreachable hosts will not trigger the rescue block." msgstr "レスキューブロックã¯ã€ãƒ–ロック内ã®å…ˆè¡Œã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ãŸã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’指定ã—ã¾ã™ã€‚ã“ã®ã‚¢ãƒ—ローãƒã¯ã€å¤šãã®ãƒ—ログラミング言語ã«ãŠã‘る例外処ç†ã«ä¼¼ã¦ã„ã¾ã™ã€‚Ansible ã¯ã€ã‚¿ã‚¹ã‚¯ãŒã€Œå¤±æ•—ã€çŠ¶æ…‹ã‚’è¿”ã—ãŸå¾Œã«ã®ã¿ãƒ¬ã‚¹ã‚­ãƒ¥ãƒ¼ãƒ–ロックを実行ã—ã¾ã™ã€‚誤ã£ãŸã‚¿ã‚¹ã‚¯å®šç¾©ã‚„到é”ä¸å¯èƒ½ãªãƒ›ã‚¹ãƒˆã§ã¯ã€ãƒ¬ã‚¹ã‚­ãƒ¥ãƒ¼ãƒ–ロックã¯å®Ÿè¡Œã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_blocks.rst:60 msgid "Block error handling example" msgstr "ブロックエラー処ç†ä¾‹" #: ../../rst/user_guide/playbooks_blocks.rst:82 msgid "You can also add an ``always`` section to a block. Tasks in the ``always`` section run no matter what the task status of the previous block is." msgstr "``always`` セクションをブロックã«è¿½åŠ ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚å‰ã®ãƒ–ロックã®ã‚¿ã‚¹ã‚¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã«é–¢ä¿‚ãªãã€``always`` セクションã®ã‚¿ã‚¹ã‚¯ã¯å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:85 msgid "Block with always section" msgstr "always セクションã®ã‚るブロック" #: ../../rst/user_guide/playbooks_blocks.rst:106 msgid "Together, these elements offer complex error handling." msgstr "ã“ã®è¦ç´ ã‚’ã¾ã¨ã‚ã‚‹ã¨ã€è¤‡é›‘ãªã‚¨ãƒ©ãƒ¼å‡¦ç†ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:108 msgid "Block with all sections" msgstr "ã™ã¹ã¦ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ–ロック" #: ../../rst/user_guide/playbooks_blocks.rst:140 msgid "The tasks in the ``block`` execute normally. If any tasks in the block return ``failed``, the ``rescue`` section executes tasks to recover from the error. The ``always`` section runs regardless of the results of the ``block`` and ``rescue`` sections." msgstr "``block`` ã®ã‚¿ã‚¹ã‚¯ã¯æ­£å¸¸ã«å®Ÿè¡Œã•れã¾ã™ã€‚ブロック内ã®ã„ãšã‚Œã‹ã®ã‚¿ã‚¹ã‚¯ãŒ ``failed`` ã‚’è¿”ã™ã¨ã€``rescue`` セクションã¯ã‚¨ãƒ©ãƒ¼ã‹ã‚‰å›žå¾©ã™ã‚‹ãŸã‚ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚``always`` セクションã¯ã€``block`` セクション㨠``rescue`` セクションã®çµæžœã«é–¢ã‚らãšå®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:142 msgid "If an error occurs in the block and the rescue task succeeds, Ansible reverts the failed status of the original task for the run and continues to run the play as if the original task had succeeded. The rescued task is considered successful, and does not trigger ``max_fail_percentage`` or ``any_errors_fatal`` configurations. However, Ansible still reports a failure in the playbook statistics." msgstr "ブロック内ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã€ãƒ¬ã‚¹ã‚­ãƒ¥ãƒ¼ã‚¿ã‚¹ã‚¯ãŒæˆåŠŸã—ãŸå ´åˆã€Ansible ã¯å®Ÿè¡Œä¸­ã®å…ƒã®ã‚¿ã‚¹ã‚¯ã®å¤±æ•—ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’å…ƒã«æˆ»ã—ã€å…ƒã®ã‚¿ã‚¹ã‚¯ãŒæˆåŠŸã—ãŸã‹ã®ã‚ˆã†ã«ãƒ—レイã®å®Ÿè¡Œã‚’継続ã—ã¾ã™ã€‚レスキューã¨ãªã£ãŸã‚¿ã‚¹ã‚¯ã¯æˆåŠŸã—ãŸã¨ã¿ãªã•れã€``max_fail_percentage`` ã‚„ ``any_errors_fatal`` ã®è¨­å®šã¯ç™ºç”Ÿã—ã¾ã›ã‚“。ãŸã ã—ã€Ansible 㯠Playbook ã®çµ±è¨ˆã§å¤±æ•—を報告ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:144 msgid "You can use blocks with ``flush_handlers`` in a rescue task to ensure that all handlers run even if an error occurs:" msgstr "レスキュータスクã«ãŠã„㦠``flush_handlers`` ã§ãƒ–ロックを使用ã—ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã§ã‚‚ã™ã¹ã¦ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒå®Ÿè¡Œã•れるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:146 msgid "Block run handlers in error handling" msgstr "エラー処ç†ã«ãŠã‘るブロック実行ãƒãƒ³ãƒ‰ãƒ©ãƒ¼" #: ../../rst/user_guide/playbooks_blocks.rst:172 msgid "Ansible provides a couple of variables for tasks in the ``rescue`` portion of a block:" msgstr "Ansible ã¯ã€ãƒ–ロック㮠``rescue`` ã®éƒ¨åˆ†ã«ã‚¿ã‚¹ã‚¯ã®å¤‰æ•°ã‚’ã„ãã¤ã‹æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:175 msgid "ansible_failed_task" msgstr "ansible_failed_task" #: ../../rst/user_guide/playbooks_blocks.rst:175 msgid "The task that returned 'failed' and triggered the rescue. For example, to get the name use ``ansible_failed_task.name``." msgstr "「失敗ã—ãŸã€ã¨è¿”ã•れã€ãƒ¬ã‚¹ã‚­ãƒ¥ãƒ¼ã®ãã£ã‹ã‘ã¨ãªã£ãŸã‚¿ã‚¹ã‚¯ã§ã™ã€‚ãŸã¨ãˆã°ã€åå‰ã‚’å–å¾—ã™ã‚‹ã«ã¯ ``ansible_failed_task.name`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:178 msgid "ansible_failed_result" msgstr "ansible_failed_result" #: ../../rst/user_guide/playbooks_blocks.rst:178 msgid "The captured return result of the failed task that triggered the rescue. This would equate to having used this var in the ``register`` keyword." msgstr "レスキューをトリガーã—ãŸå¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯ã®æˆ»ã‚Šå€¤ã€‚ã“れã¯ã€``register`` キーワードã§ã“ã®å¤‰æ•°ã‚’使用ã™ã‚‹ã®ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_blocks.rst:185 #: ../../rst/user_guide/playbooks_conditionals.rst:500 #: ../../rst/user_guide/playbooks_filters.rst:1846 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:736 #: ../../rst/user_guide/playbooks_loops.rst:437 #: ../../rst/user_guide/playbooks_strategies.rst:221 #: ../../rst/user_guide/playbooks_tags.rst:428 #: ../../rst/user_guide/playbooks_templating.rst:53 #: ../../rst/user_guide/playbooks_tests.rst:397 #: ../../rst/user_guide/playbooks_variables.rst:458 msgid "Playbook organization by roles" msgstr "ロール別㮠Playbook ã®çµ„ç¹”" #: ../../rst/user_guide/playbooks_checkmode.rst:5 msgid "Validating tasks: check mode and diff mode" msgstr "ã‚¿ã‚¹ã‚¯ã®æ¤œè¨¼: ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¨å·®åˆ†ãƒ¢ãƒ¼ãƒ‰" #: ../../rst/user_guide/playbooks_checkmode.rst:7 msgid "Ansible provides two modes of execution that validate tasks: check mode and diff mode. These modes can be used separately or together. They are useful when you are creating or editing a playbook or role and you want to know what it will do. In check mode, Ansible runs without making any changes on remote systems. Modules that support check mode report the changes they would have made. Modules that do not support check mode report nothing and do nothing. In diff mode, Ansible provides before-and-after comparisons. Modules that support diff mode display detailed information. You can combine check mode and diff mode for detailed validation of your playbook or role." msgstr "Ansible ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã‚’検証ã™ã‚‹ãŸã‚ã«ã€ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¨å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã¨ã„ㆠ2 ã¤ã®å®Ÿè¡Œãƒ¢ãƒ¼ãƒ‰ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ¢ãƒ¼ãƒ‰ã¯ã€åˆ¥ã€…ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã€ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れらã®ãƒ¢ãƒ¼ãƒ‰ã¯ã€Playbook やロールを作æˆã¾ãŸã¯ç·¨é›†ã™ã‚‹éš›ã«ã€ãã®å®Ÿè¡Œå†…容を知りãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€Ansible ã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã«å¤‰æ›´ã‚’加ãˆãšã«å®Ÿè¡Œã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€è‡ªèº«ãŒè¡Œã£ãŸå¤‰æ›´ã‚’報告ã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„モジュールã¯ã€ä½•も報告ã›ãšã€ä½•も行ã„ã¾ã›ã‚“。差分モードã§ã¯ã€Ansible ã¯äº‹å‰ã¨äº‹å¾Œã®æ¯”較を行ã„ã¾ã™ã€‚差分モードをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€è©³ç´°æƒ…報を表示ã—ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¨å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã‚’組ã¿åˆã‚ã›ã¦ã€Playbook やロールã®è©³ç´°ãªæ¤œè¨¼ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:13 msgid "Using check mode" msgstr "ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_checkmode.rst:15 msgid "Check mode is just a simulation. It will not generate output for tasks that use :ref:`conditionals based on registered variables ` (results of prior tasks). However, it is great for validating configuration management playbooks that run on one node at a time. To run a playbook in check mode::" msgstr "ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã¯ã‚ãã¾ã§ã‚‚シミュレーションã§ã™ã€‚:ref:`登録変数ã«åŸºã¥ã„ãŸæ¡ä»¶ ` (先行タスクã®çµæžœ) を使用ã™ã‚‹ã‚¿ã‚¹ã‚¯ã®å‡ºåŠ›ã¯ç”Ÿæˆã•れã¾ã›ã‚“。ã—ã‹ã—ã€ä¸€åº¦ã« 1 ã¤ã®ãƒŽãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹æ§‹æˆç®¡ç†ã® Playbook を検証ã™ã‚‹ã«ã¯æœ€é©ã§ã™ã€‚Playbook ã‚’ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã«ã¯ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:22 msgid "Enforcing or preventing check mode on tasks" msgstr "タスクã§ã®ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã®å¼·åˆ¶ã¾ãŸã¯ç¦æ­¢" #: ../../rst/user_guide/playbooks_checkmode.rst:26 msgid "If you want certain tasks to run in check mode always, or never, regardless of whether you run the playbook with or without ``--check``, you can add the ``check_mode`` option to those tasks:" msgstr "Playbook を実行ã™ã‚‹éš›ã« ``--check`` を付ã‘ã‚‹ã‹ã©ã†ã‹ã«é–¢ã‚らãšã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã‚’常ã«ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€ãれらã®ã‚¿ã‚¹ã‚¯ã« ``check_mode`` オプションを追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:28 msgid "To force a task to run in check mode, even when the playbook is called without ``--check``, set ``check_mode: yes``." msgstr "``--check`` を使用ã›ãšã« Playbook ãŒå‘¼ã³å‡ºã•れãŸå ´åˆã§ã‚‚ã€ã‚¿ã‚¹ã‚¯ã‚’強制的ã«ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã«ã¯ã€``check_mode: yes`` を設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:29 msgid "To force a task to run in normal mode and make changes to the system, even when the playbook is called with ``--check``, set ``check_mode: no``." msgstr "Playbook ㌠``--check`` ã§å‘¼ã³å‡ºã•れãŸå ´åˆã§ã‚‚ã€ã‚¿ã‚¹ã‚¯ã‚’強制的ã«é€šå¸¸ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã—ã€ã‚·ã‚¹ãƒ†ãƒ ã«å¤‰æ›´ã‚’加ãˆã‚‹ã«ã¯ã€``check_mode: no`` を設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:46 msgid "Running single tasks with ``check_mode: yes`` can be useful for testing Ansible modules, either to test the module itself or to test the conditions under which a module would make changes. You can register variables (see :ref:`playbooks_conditionals`) on these tasks for even more detail on the potential changes." msgstr "``check_mode: yes`` を使用ã—ã¦ã‚·ãƒ³ã‚°ãƒ«ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã¨ã€Ansible モジュールをテストã™ã‚‹éš›ã«ä¾¿åˆ©ã§ã™ã€‚モジュール自体をテストã—ãŸã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå¤‰æ›´ã‚’è¡Œã†æ¡ä»¶ã‚’テストã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ã‚¿ã‚¹ã‚¯ã«å¤‰æ•° (:ref:`playbooks_conditionals` ã‚’å‚ç…§) を登録ã™ã‚‹ã¨ã€æ½œåœ¨çš„ãªå¤‰æ›´ã«ã¤ã„ã¦ã•らã«è©³ã—ã知るã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:48 msgid "Prior to version 2.2 only the equivalent of ``check_mode: no`` existed. The notation for that was ``always_run: yes``." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2 以å‰ã§ã¯ã€``check_mode: no`` ã«ç›¸å½“ã™ã‚‹ã‚‚ã®ã ã‘ãŒå­˜åœ¨ã—ã¦ã„ã¾ã—ãŸã€‚ãã®è¡¨è¨˜æ³•㯠``always_run: yes`` ã§ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:51 msgid "Skipping tasks or ignoring errors in check mode" msgstr "タスクをスキップã¾ãŸã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã‚¨ãƒ©ãƒ¼ã‚’無視ã™ã‚‹" #: ../../rst/user_guide/playbooks_checkmode.rst:55 msgid "If you want to skip a task or ignore errors on a task when you run Ansible in check mode, you can use a boolean magic variable ``ansible_check_mode``, which is set to ``True`` when Ansible runs in check mode. For example::" msgstr "Ansible ã‚’ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹éš›ã«ã€ã‚¿ã‚¹ã‚¯ã‚’スキップã—ãŸã‚Šã€ã‚¿ã‚¹ã‚¯ã®ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ãŸã‚Šã™ã‚‹å ´åˆã¯ã€ãƒ–ール型ã®ãƒžã‚¸ãƒƒã‚¯å¤‰æ•° ``ansible_check_mode`` を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®å¤‰æ•°ã¯ã€Ansible ã‚’ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã™ã‚‹ã¨ã€``True`` ã«è¨­å®šã•れã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:74 msgid "Using diff mode" msgstr "差分モードã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_checkmode.rst:76 msgid "The ``--diff`` option for ansible-playbook can be used alone or with ``--check``. When you run in diff mode, any module that supports diff mode reports the changes made or, if used with ``--check``, the changes that would have been made. Diff mode is most common in modules that manipulate files (for example, the template module) but other modules might also show 'before and after' information (for example, the user module)." msgstr "ansible-playbook ã® ``--diff`` オプションã¯ã€å˜ç‹¬ã§ã‚‚ ``--check`` ã¨ä½µç”¨ã—ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“。差分モードã§å®Ÿè¡Œã™ã‚‹ã¨ã€å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã€è¡Œã‚れãŸå¤‰æ›´ã‚’報告ã—ã¾ã™ (``--check`` ã¨ä½µç”¨ã™ã‚‹å ´åˆã¯ã€è¡Œã‚れãŸã§ã‚ã‚ã†å¤‰æ›´ã‚’報告ã—ã¾ã™)。差分モードã¯ã€ãƒ•ァイルをæ“作ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« (template モジュールãªã©) ã§æœ€ã‚‚一般的ã§ã™ãŒã€ãã®ä»–ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚‚「変更å‰ã¨å¤‰æ›´å¾Œã€ã®æƒ…報を表示ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ (user モジュールãªã©)。" #: ../../rst/user_guide/playbooks_checkmode.rst:78 msgid "Diff mode produces a large amount of output, so it is best used when checking a single host at a time. For example::" msgstr "差分モードã¯å¤§é‡ã®å‡ºåŠ›ã‚’ç”Ÿæˆã™ã‚‹ãŸã‚ã€ä¸€åº¦ã« 1 ã¤ã®ãƒ›ã‚¹ãƒˆã‚’確èªã™ã‚‹ã¨ãã«ä½¿ã†ã®ãŒæœ€é©ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_checkmode.rst:85 msgid "Enforcing or preventing diff mode on tasks" msgstr "タスクã§ã®å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã®å¼·åˆ¶ã¾ãŸã¯ç¦æ­¢" #: ../../rst/user_guide/playbooks_checkmode.rst:87 msgid "Because the ``--diff`` option can reveal sensitive information, you can disable it for a task by specifying ``diff: no``. For example::" msgstr "``--diff`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ©Ÿå¯†æƒ…報を表示ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€``diff: no`` を指定ã—ã¦ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ã“れを無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:5 msgid "Conditionals" msgstr "æ¡ä»¶åˆ†å² (Conditional)" #: ../../rst/user_guide/playbooks_conditionals.rst:7 msgid "In a playbook, you may want to execute different tasks, or have different goals, depending on the value of a fact (data about the remote system), a variable, or the result of a previous task. You may want the value of some variables to depend on the value of other variables. Or you may want to create additional groups of hosts based on whether the hosts match other criteria. You can do all of these things with conditionals." msgstr "Playbook ã§ã¯ã€ãƒ•ァクト (リモートシステムã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿)ã€å¤‰æ•°ã€ã¾ãŸã¯ä»¥å‰ã®ã‚¿ã‚¹ã‚¯ã®çµæžœã®å€¤ã«å¿œã˜ã¦ã€ç•°ãªã‚‹ã‚¿ã‚¹ã‚¯ã‚’実行ã—ãŸã‚Šã€ç•°ãªã‚‹ã‚´ãƒ¼ãƒ«ã‚’設定ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚る変数ã®å€¤ã«å¿œã˜ã¦åˆ¥ã®å¤‰æ•°ã®å€¤ã‚’変更ã—ãŸã„å ´åˆã‚‚ã‚りã¾ã™ã€‚ã¾ãŸã€ãƒ›ã‚¹ãƒˆãŒä»–ã®åŸºæº–ã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã«åŸºã¥ã„ã¦ã€ãƒ›ã‚¹ãƒˆã®è¿½åŠ ã‚°ãƒ«ãƒ¼ãƒ—ã‚’ä½œæˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れらã®ã“ã¨ã¯ã™ã¹ã¦ã€æ¡ä»¶åˆ†å²ã§å®Ÿç¾ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:9 msgid "Ansible uses Jinja2 :ref:`tests ` and :ref:`filters ` in conditionals. Ansible supports all the standard tests and filters, and adds some unique ones as well." msgstr "Ansible 㯠Jinja2 ã® :ref:`テスト ` ãŠã‚ˆã³ :ref:`フィルター ` ã‚’æ¡ä»¶åˆ†å²ã§ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚Ansible ã¯æ¨™æº–çš„ãªãƒ†ã‚¹ãƒˆã‚„フィルターをã™ã¹ã¦ã‚µãƒãƒ¼ãƒˆã—ã¦ãŠã‚Šã€ç‹¬è‡ªã®ã‚‚ã®ã‚‚ã„ãã¤ã‹è¿½åŠ ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:13 msgid "There are many options to control execution flow in Ansible. You can find more examples of supported conditionals at ``_." msgstr "Ansible ã§å®Ÿè¡Œãƒ•ローを制御ã™ã‚‹ã‚ªãƒ—ションã¯å¤šæ•°ã‚りã¾ã™ã€‚サãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹æ¡ä»¶åˆ†å²ã®ä¾‹ã¯ã€``_ ã§ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:21 msgid "Basic conditionals with ``when``" msgstr "``when`` を使用ã™ã‚‹åŸºæœ¬çš„ãªæ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:23 msgid "The simplest conditional statement applies to a single task. Create the task, then add a ``when`` statement that applies a test. The ``when`` clause is a raw Jinja2 expression without double curly braces (see :ref:`group_by_module`). When you run the task or playbook, Ansible evaluates the test for all hosts. On any host where the test passes (returns a value of True), Ansible runs that task. For example, if you are installing mysql on multiple machines, some of which have SELinux enabled, you might have a task to configure SELinux to allow mysql to run. You would only want that task to run on machines that have SELinux enabled:" msgstr "最も簡å˜ãªæ¡ä»¶æ–‡ã¯ã€1 ã¤ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れるもã®ã§ã™ã€‚タスクを作æˆã—ã€ãƒ†ã‚¹ãƒˆã‚’é©ç”¨ã™ã‚‹ ``when`` ã®æ–‡ã‚’追加ã—ã¾ã™ã€‚``when`` å¥ã¯ã€äºŒé‡ä¸­æ‹¬å¼§ã®ãªã„生㮠Jinja2 å¼ã§ã™ (:ref:`group_by_module` å‚ç…§)。タスクや Playbook を実行ã™ã‚‹ã¨ã€Ansible ã¯ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆã‚’評価ã—ã¾ã™ã€‚テストã«ãƒ‘スã™ã‚‹ (True ã®å€¤ã‚’è¿”ã™) ホストã§ã¯ã€Ansible ã¯ãã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€è¤‡æ•°ã®ãƒžã‚·ãƒ³ã« mysql をインストールã—ã€ãã®ã†ã¡ã®ã„ãã¤ã‹ã®ãƒžã‚·ãƒ³ã§ã¯ SELinux ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€mysql ã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹ã‚ˆã†ã« SELinux を設定ã™ã‚‹ã‚¿ã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€SELinux ãŒæœ‰åйã«ãªã£ã¦ã„るマシンã§ã®ã¿å®Ÿè¡Œã•れるよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:37 msgid "Conditionals based on ansible_facts" msgstr "ansible_facts ã«åŸºã¥ãæ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:39 msgid "Often you want to execute or skip a task based on facts. Facts are attributes of individual hosts, including IP address, operating system, the status of a filesystem, and many more. With conditionals based on facts:" msgstr "ファクトã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã—ãŸã‚Šã‚¹ã‚­ãƒƒãƒ—ã—ãŸã‚Šã—ãŸã„å ´åˆãŒã‚ˆãã‚りã¾ã™ã€‚ファクトã¨ã¯ã€IP アドレスã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€ãƒ•ァイルシステムã®çŠ¶æ…‹ãªã©ã€å€‹ã€…ã®ãƒ›ã‚¹ãƒˆã®å±žæ€§ã®ã“ã¨ã§ã™ã€‚ファクトã«åŸºã¥ãæ¡ä»¶åˆ†å²ã§ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:41 msgid "You can install a certain package only when the operating system is a particular version." msgstr "特定ã®ãƒ‘ッケージã¯ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ãŒç‰¹å®šã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å ´åˆã«ã®ã¿ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:42 msgid "You can skip configuring a firewall on hosts with internal IP addresses." msgstr "内部 IP アドレスをæŒã¤ãƒ›ã‚¹ãƒˆã§ãƒ•ァイアウォールã®è¨­å®šã‚’çœç•¥ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:43 msgid "You can perform cleanup tasks only when a filesystem is getting full." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ãŒæº€æ¯ã«ãªã£ãŸå ´åˆã«ã®ã¿ã€ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—タスクを実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:45 msgid "See :ref:`commonly_used_facts` for a list of facts that frequently appear in conditional statements. Not all facts exist for all hosts. For example, the 'lsb_major_release' fact used in an example below only exists when the lsb_release package is installed on the target host. To see what facts are available on your systems, add a debug task to your playbook::" msgstr "æ¡ä»¶æ–‡ã«é »ç¹ã«ç¾ã‚Œã‚‹ãƒ•ァクトã®ä¸€è¦§ã¯ã€:ref:`commonly_used_facts` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã™ã¹ã¦ã®ãƒ•ァクトãŒã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«å­˜åœ¨ã™ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ä¾‹ã§ä½¿ç”¨ã•れã¦ã„る「lsb_major_releaseã€ãƒ•ァクトã¯ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆã« lsb_release パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿å­˜åœ¨ã—ã¾ã™ã€‚システム上ã§åˆ©ç”¨å¯èƒ½ãªãƒ•ァクトを確èªã™ã‚‹ã«ã¯ã€Playbook ã«ãƒ‡ãƒãƒƒã‚°ã‚¿ã‚¹ã‚¯ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:51 msgid "Here is a sample conditional based on a fact:" msgstr "以下ã¯ã€ãƒ•ァクトã«åŸºã¥ãæ¡ä»¶åˆ†å²ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:60 msgid "If you have multiple conditions, you can group them with parentheses:" msgstr "è¤‡æ•°ã®æ¡ä»¶ãŒã‚ã‚‹å ´åˆã¯ã€æ‹¬å¼§ã§ã‚°ãƒ«ãƒ¼ãƒ—化ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:70 msgid "You can use `logical operators `_ to combine conditions. When you have multiple conditions that all need to be true (that is, a logical ``and``), you can specify them as a list::" msgstr "`logical operators `_ を使用ã—ã¦æ¡ä»¶ã‚’組ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã™ã¹ã¦ãŒ True ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹è¤‡æ•°ã®æ¡ä»¶ãŒã‚ã‚‹å ´åˆ (ã¤ã¾ã‚Šã€è«–ç†çš„㪠``and``)ã€ãれらをリストã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:79 msgid "If a fact or variable is a string, and you need to run a mathematical comparison on it, use a filter to ensure that Ansible reads the value as an integer::" msgstr "ファクトã¾ãŸã¯å¤‰æ•°ãŒæ–‡å­—列ã§ã€ãれã«å¯¾ã—ã¦æ•°å­¦æ¯”較を実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ•ィルターを使用ã—㦠Ansible ãŒå€¤ã‚’æ•´æ•°ã¨ã—ã¦èª­ã¿å–るよã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:88 msgid "Conditions based on registered variables" msgstr "登録済ã¿ã®å¤‰æ•°ã«åŸºã¥ãæ¡ä»¶" #: ../../rst/user_guide/playbooks_conditionals.rst:90 msgid "Often in a playbook you want to execute or skip a task based on the outcome of an earlier task. For example, you might want to configure a service after it is upgraded by an earlier task. To create a conditional based on a registered variable:" msgstr "Playbook ã§ã¯ã€ä»¥å‰ã®ã‚¿ã‚¹ã‚¯ã®çµæžœã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã—ãŸã„å ´åˆãŒã‚ˆãã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥å‰ã®ã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦ã‚µãƒ¼ãƒ“スãŒã‚¢ãƒƒãƒ—グレードã•れãŸå¾Œã«ã€ãã®ã‚µãƒ¼ãƒ“スを設定ã—ãŸã„å ´åˆãªã©ã§ã™ã€‚登録ã•れãŸå¤‰æ•°ã«åŸºã¥ã„ã¦æ¡ä»¶åˆ†å²ã‚’作æˆã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:92 msgid "Register the outcome of the earlier task as a variable." msgstr "以å‰ã®ã‚¿ã‚¹ã‚¯ã®çµæžœã‚’変数ã¨ã—ã¦ç™»éŒ²ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:93 msgid "Create a conditional test based on the registered variable." msgstr "登録ã—ãŸå¤‰æ•°ã«åŸºã¥ã„ã¦æ¡ä»¶åˆ†å²ãƒ†ã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:95 msgid "You create the name of the registered variable using the ``register`` keyword. A registered variable always contains the status of the task that created it as well as any output that task generated. You can use registered variables in templates and action lines as well as in conditional ``when`` statements. You can access the string contents of the registered variable using ``variable.stdout``. For example::" msgstr "登録ã•れãŸå¤‰æ•°ã®åå‰ã¯ã€``register`` キーワードを使用ã—ã¦ä½œæˆã—ã¾ã™ã€‚登録ã•れãŸå¤‰æ•°ã«ã¯ã€ãã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’作æˆã—ãŸã‚¿ã‚¹ã‚¯ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¨ã€ãã®ã‚¿ã‚¹ã‚¯ãŒç”Ÿæˆã—ãŸå‡ºåŠ›ãŒå¸¸ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚登録ã•れãŸå¤‰æ•°ã¯ã€ãƒ†ãƒ³ãƒ—レートやアクション行ã€ãŠã‚ˆã³æ¡ä»¶ä»˜ãã® ``when`` æ–‡ã§ä½¿ç”¨ã§ãã¾ã™ã€‚登録ã•れãŸå¤‰æ•°ã®æ–‡å­—列内容ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€``variable.stdout`` を使用ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:110 msgid "You can use registered results in the loop of a task if the variable is a list. If the variable is not a list, you can convert it into a list, with either ``stdout_lines`` or with ``variable.stdout.split()``. You can also split the lines by other fields::" msgstr "登録ã•れãŸçµæžœã¯ã€å¤‰æ•°ãŒãƒªã‚¹ãƒˆã®å ´åˆã€ã‚¿ã‚¹ã‚¯ã®ãƒ«ãƒ¼ãƒ—内ã§ä½¿ç”¨ã§ãã¾ã™ã€‚変数ãŒãƒªã‚¹ãƒˆã§ãªã„å ´åˆã¯ã€``stdout_lines`` ã¾ãŸã¯ ``variable.stdout.split()`` ã§ãƒªã‚¹ãƒˆã«å¤‰æ›ã§ãã¾ã™ã€‚ã¾ãŸã€ä»–ã®ãƒ•ィールドã§è¡Œã‚’分割ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:128 msgid "The string content of a registered variable can be empty. If you want to run another task only on hosts where the stdout of your registered variable is empty, check the registered variable's string contents for emptiness:" msgstr "登録ã•れãŸå¤‰æ•°ã®æ–‡å­—列内容ã¯ç©ºã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚登録ã•れãŸå¤‰æ•°ã®æ¨™æº–出力ãŒç©ºã®ãƒ›ã‚¹ãƒˆã§ã®ã¿åˆ¥ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ãŸã„å ´åˆã¯ã€ç™»éŒ²ã•れãŸå¤‰æ•°ã®æ–‡å­—列内容ãŒç©ºã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:146 msgid "Ansible always registers something in a registered variable for every host, even on hosts where a task fails or Ansible skips a task because a condition is not met. To run a follow-up task on these hosts, query the registered variable for ``is skipped`` (not for \"undefined\" or \"default\"). See :ref:`registered_variables` for more information. Here are sample conditionals based on the success or failure of a task. Remember to ignore errors if you want Ansible to continue executing on a host when a failure occurs:" msgstr "タスクãŒå¤±æ•—ã—ãŸãƒ›ã‚¹ãƒˆã‚„ã€æ¡ä»¶ãŒæº€ãŸã•れãšã« Ansible ãŒã‚¿ã‚¹ã‚¯ã‚’スキップã—ãŸãƒ›ã‚¹ãƒˆã§ã‚ã£ã¦ã‚‚ã€Ansible ã¯å¸¸ã«ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®ç™»éŒ²å¤‰æ•°ã«ä½•ã‹ã‚’登録ã—ã¾ã™ã€‚ã“れらã®ãƒ›ã‚¹ãƒˆã§ãƒ•ォローアップタスクを実行ã™ã‚‹ã«ã¯ã€ç™»éŒ²æ¸ˆã¿ã®å¤‰æ•°ã« ``is skipped`` を照会ã—ã¾ã™ (「undefinedã€ã‚„「defaultã€ã§ã¯ã‚りã¾ã›ã‚“)。詳細ã¯ã€ã€Œ:ref:`registered_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。以下ã¯ã€ã‚¿ã‚¹ã‚¯ã®æˆåŠŸã¾ãŸã¯å¤±æ•—ã«åŸºã¥ãæ¡ä»¶åˆ†å²ã®ã‚µãƒ³ãƒ—ルã§ã™ã€‚失敗ã—ãŸã¨ãã«ãƒ›ã‚¹ãƒˆä¸Šã§ Ansible ã®å®Ÿè¡Œã‚’継続ã•ã›ãŸã„å ´åˆã¯ã€ã‚¨ãƒ©ãƒ¼ã‚’無視ã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/playbooks_conditionals.rst:168 msgid "Older versions of Ansible used ``success`` and ``fail``, but ``succeeded`` and ``failed`` use the correct tense. All of these options are now valid." msgstr "å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§ã¯ã€``success`` ãŠã‚ˆã³ ``fail`` ãŒä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸãŒã€``succeeded`` ãŠã‚ˆã³ ``failed`` ã¯æ­£ã—ã„æ™‚制を使用ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã™ã¹ã¦æœ‰åйã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:172 msgid "Conditionals based on variables" msgstr "変数ã«åŸºã¥ãæ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:174 msgid "You can also create conditionals based on variables defined in the playbooks or inventory. Because conditionals require boolean input (a test must evaluate as True to trigger the condition), you must apply the ``| bool`` filter to non boolean variables, such as string variables with content like 'yes', 'on', '1', or 'true'. You can define variables like this:" msgstr "ã¾ãŸã€Playbook やインベントリーã§å®šç¾©ã•れãŸå¤‰æ•°ã«åŸºã¥ã„ã¦ã€æ¡ä»¶åˆ†å²ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚æ¡ä»¶åˆ†å²ã«ã¯ãƒ–ール値ã®å…¥åŠ›ãŒå¿…è¦ãªãŸã‚ (æ¡ä»¶ã‚’æˆç«‹ã•ã›ã‚‹ãŸã‚ã«ã¯ã€ãƒ†ã‚¹ãƒˆãŒ True ã¨è©•価ã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“)ã€ã€Œyesã€ã€ã€Œonã€ã€ã€Œ1ã€ã€ã€Œtrueã€ãªã©ã®å†…容をæŒã¤æ–‡å­—列変数ãªã©ã€ãƒ–ール値以外ã®å¤‰æ•°ã«ã¯ã€``| bool`` フィルターをé©ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚å¤‰æ•°ã¯æ¬¡ã®ã‚ˆã†ã«å®šç¾©ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:182 msgid "With the variables above, Ansible would run one of these tasks and skip the other:" msgstr "上記ã®å¤‰æ•°ã‚’使用ã™ã‚‹ã¨ã€Ansible ã¯ã“れらã®ã‚¿ã‚¹ã‚¯ã®ã„ãšã‚Œã‹ã‚’実行ã—ã€ä»–ã®ã‚¿ã‚¹ã‚¯ã‚’çœç•¥ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:195 msgid "If a required variable has not been set, you can skip or fail using Jinja2's `defined` test. For example:" msgstr "å¿…è¦ãªå¤‰æ•°ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€çœç•¥ã™ã‚‹ã‹ã€Jinja2 ã® `定義済ã¿` テストを使用ã—ã¦å¤±æ•—ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:208 msgid "This is especially useful in combination with the conditional import of vars files (see below). As the examples show, you do not need to use `{{ }}` to use variables inside conditionals, as these are already implied." msgstr "ã“れã¯ã€å¤‰æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¡ä»¶åˆ†å²ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¨ã®çµ„ã¿åˆã‚ã›ã§ç‰¹ã«æœ‰åйã§ã™ (以下å‚ç…§)。ã“れらã®ä¾‹ãŒç¤ºã™ã‚ˆã†ã«ã€æ¡ä»¶åˆ†å²ã®ä¸­ã§å¤‰æ•°ã‚’使用ã™ã‚‹ãŸã‚ã« `{{ }}` を使用ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ãれらã¯ã™ã§ã«æš—示ã•れã¦ã„ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:214 msgid "Using conditionals in loops" msgstr "ループã§ã®æ¡ä»¶åˆ†å²ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_conditionals.rst:216 msgid "If you combine a ``when`` statement with a :ref:`loop `, Ansible processes the condition separately for each item. This is by design, so you can execute the task on some items in the loop and skip it on other items. For example:" msgstr "``when`` 文㨠:ref:`loop ` を組ã¿åˆã‚ã›ãŸå ´åˆã€Ansible ã¯å„アイテムã«å¯¾ã—ã¦å€‹åˆ¥ã«æ¡ä»¶ã‚’処ç†ã—ã¾ã™ã€‚ã“ã‚Œã¯æ„図的ãªã‚‚ã®ã§ã€ãƒ«ãƒ¼ãƒ—内ã®ä¸€éƒ¨ã®ã‚¢ã‚¤ãƒ†ãƒ ã§ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ä»–ã®ã‚¢ã‚¤ãƒ†ãƒ ã§ã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:226 msgid "If you need to skip the whole task when the loop variable is undefined, use the `|default` filter to provide an empty iterator. For example, when looping over a list:" msgstr "ãƒ«ãƒ¼ãƒ—å¤‰æ•°ãŒæœªå®šç¾©ã®ã¨ãã«ã‚¿ã‚¹ã‚¯å…¨ä½“ã‚’çœç•¥ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€`|default` フィルターを使用ã—ã¦ç©ºã®ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’指定ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒªã‚¹ãƒˆã‚’ループã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:235 msgid "You can do the same thing when looping over a dict:" msgstr "åŒã˜ã“ã¨ãŒã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’ループã™ã‚‹ã¨ãã«ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:247 msgid "Loading custom facts" msgstr "カスタムファクトã®èª­ã¿è¾¼ã¿ä¸­" #: ../../rst/user_guide/playbooks_conditionals.rst:249 msgid "You can provide your own facts, as described in :ref:`developing_modules`. To run them, just make a call to your own custom fact gathering module at the top of your list of tasks, and variables returned there will be accessible to future tasks:" msgstr ":ref:`developing_modules` ã§èª¬æ˜Žã—ã¦ã„るよã†ã«ã€ç‹¬è‡ªã®ãƒ•ァクトをæä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãれらを実行ã™ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ãƒªã‚¹ãƒˆã®å…ˆé ­ã«ã‚る独自ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトåŽé›†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ã ã‘ã§ã€ãã“ã‹ã‚‰è¿”ã•れãŸå¤‰æ•°ã¯å°†æ¥ã®ã‚¿ã‚¹ã‚¯ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:264 msgid "Conditionals with re-use" msgstr "å†åˆ©ç”¨ã«ã‚ˆã‚‹æ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:266 msgid "You can use conditionals with re-usable tasks files, playbooks, or roles. Ansible executes these conditional statements differently for dynamic re-use (includes) and for static re-use (imports). See :ref:`playbooks_reuse` for more information on re-use in Ansible." msgstr "æ¡ä»¶åˆ†å²ã¯ã€å†åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚¹ã‚¯ãƒ•ァイルã€Playbookã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚Ansible ã¯ã“ã‚Œã‚‰ã®æ¡ä»¶æ–‡ã‚’ã€å‹•çš„å†åˆ©ç”¨ (インクルード) ãŠã‚ˆã³é™çš„å†åˆ©ç”¨ (インãƒãƒ¼ãƒˆ) ã§ç•°ãªã‚‹æ–¹æ³•ã§å®Ÿè¡Œã—ã¾ã™ã€‚Ansible ã§ã®å†åˆ©ç”¨ã®è©³ç´°ã¯ã€ã€Œ:ref:`playbooks_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_conditionals.rst:271 msgid "Conditionals with imports" msgstr "インãƒãƒ¼ãƒˆã®ã‚ã‚‹æ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:273 msgid "When you add a conditional to an import statement, Ansible applies the condition to all tasks within the imported file. This behavior is the equivalent of :ref:`tag_inheritance`. Ansible applies the condition to every task, and evaluates each task separately. For example, you might have a playbook called ``main.yml`` and a tasks file called ``other_tasks.yml``::" msgstr "インãƒãƒ¼ãƒˆã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã«æ¡ä»¶åˆ†å²ã‚’追加ã™ã‚‹ã¨ã€Ansible ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ•ァイル内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«ãã®æ¡ä»¶ã‚’é©ç”¨ã—ã¾ã™ã€‚ã“ã®å‹•作ã¯ã€:ref:`tag_inheritance` ã¨åŒç­‰ã§ã™ã€‚Ansible ã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«æ¡ä»¶ã‚’é©ç”¨ã—ã€å„タスクを個別ã«è©•価ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€``main.yml`` ã¨ã„ㆠPlaybookã¨ã€``other_tasks.yml`` ã¨ã„ã†ã‚¿ã‚¹ã‚¯ãƒ•ァイルãŒã‚ã‚‹ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:289 #: ../../rst/user_guide/playbooks_conditionals.rst:329 msgid "Ansible expands this at execution time to the equivalent of::" msgstr "Ansible ã¯ã€å®Ÿè¡Œæ™‚ã«ã“れを以下ã«ç›¸å½“ã™ã‚‹ã‚‚ã®ã«æ‹¡å¼µã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:303 msgid "Thus if ``x`` is initially undefined, the ``debug`` task will be skipped. If this is not the behavior you want, use an ``include_*`` statement to apply a condition only to that statement itself." msgstr "ã—ãŸãŒã£ã¦ã€``x`` ãŒæœ€åˆã«æœªå®šç¾©ã§ã‚れã°ã€``debug`` ã®ã‚¿ã‚¹ã‚¯ã¯ã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚ã“ã®ã‚ˆã†ãªå‹•作を望ã¾ãªã„å ´åˆã¯ã€``include_*`` 文を使用ã—ã¦ã€ãã®æ–‡è‡ªä½“ã«ã®ã¿æ¡ä»¶ã‚’é©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:305 msgid "You can apply conditions to ``import_playbook`` as well as to the other ``import_*`` statements. When you use this approach, Ansible returns a 'skipped' message for every task on every host that does not match the criteria, creating repetitive output. In many cases the :ref:`group_by module ` can be a more streamlined way to accomplish the same objective; see :ref:`os_variance`." msgstr "``import_playbook`` ã«ã¯ã€ä»–ã® ``import_*`` æ–‡ã¨åŒæ§˜ã«æ¡ä»¶ã‚’é©ç”¨ã§ãã¾ã™ã€‚ã“ã®æ–¹æ³•を使用ã™ã‚‹ã¨ã€Ansible ã¯åŸºæº–ã«ä¸€è‡´ã—ãªã„ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆä¸Šã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ã€Œskippedã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã€å復的ãªå‡ºåŠ›ã‚’ä½œæˆã—ã¾ã™ã€‚多ãã®å ´åˆã€:ref:`group_by モジュール ` ã¯ã€åŒã˜ç›®çš„ã‚’é”æˆã™ã‚‹ãŸã‚ã®ã‚ˆã‚Šåˆç†çš„ãªæ–¹æ³•ã¨ãªã‚Šã¾ã™ã€‚「:ref:`os_variance`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_conditionals.rst:310 msgid "Conditionals with includes" msgstr "includes ã‚’æŒã¤æ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:312 msgid "When you use a conditional on an ``include_*`` statement, the condition is applied only to the include task itself and not to any other tasks within the included file(s). To contrast with the example used for conditionals on imports above, look at the same playbook and tasks file, but using an include instead of an import::" msgstr "``include_*`` æ–‡ã«æ¡ä»¶åˆ†å²ã‚’使用ã™ã‚‹ã¨ã€ãã®æ¡ä»¶ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚¿ã‚¹ã‚¯è‡ªä½“ã«ã®ã¿é©ç”¨ã•れã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ•ァイル内ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。上記ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¯¾ã™ã‚‹æ¡ä»¶åˆ†å²ã®ä¾‹ã¨å¯¾æ¯”ã™ã‚‹ãŸã‚ã«ã€åŒã˜ Playbook ã¨ã‚¿ã‚¹ã‚¯ãƒ•ァイルを見ã¦ãã ã•ã„。ãŸã ã—ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ä»£ã‚りã«ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:347 msgid "By using ``include_tasks`` instead of ``import_tasks``, both tasks from ``other_tasks.yml`` will be executed as expected. For more information on the differences between ``include`` v ``import`` see :ref:`playbooks_reuse`." msgstr "``import_tasks`` ã®ä»£ã‚り㫠``include_tasks`` を使用ã™ã‚‹ã¨ã€``other_tasks.yml`` ã‹ã‚‰ã®ä¸¡æ–¹ã®ã‚¿ã‚¹ã‚¯ãŒæƒ³å®šã©ãŠã‚Šã«å®Ÿè¡Œã•れã¾ã™ã€‚``include`` 㨠``import`` ã®ç›¸é•点ã¯ã€ã€Œ:ref:`playbooks_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_conditionals.rst:350 msgid "Conditionals with roles" msgstr "ロールをå«ã‚€æ¡ä»¶åˆ†å²" #: ../../rst/user_guide/playbooks_conditionals.rst:352 msgid "There are three ways to apply conditions to roles:" msgstr "状態をロールã«é©ç”¨ã™ã‚‹æ–¹æ³•㯠3 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:354 msgid "Add the same condition or conditions to all tasks in the role by placing your ``when`` statement under the ``roles`` keyword. See the example in this section." msgstr "``when`` 文を ``roles`` キーワードã®ä¸‹ã«ç½®ãã“ã¨ã§ã€ãƒ­ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜æ¡ä»¶ã‚’追加ã—ã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_conditionals.rst:355 msgid "Add the same condition or conditions to all tasks in the role by placing your ``when`` statement on a static ``import_role`` in your playbook." msgstr "Playbook ã®é™çš„ ``import_role`` ã« ``when`` 文をé…ç½®ã—ã¦ã€ãƒ­ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜æ¡ä»¶ã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:356 msgid "Add a condition or conditions to individual tasks or blocks within the role itself. This is the only approach that allows you to select or skip some tasks within the role based on your ``when`` statement. To select or skip tasks within the role, you must have conditions set on individual tasks or blocks, use the dynamic ``include_role`` in your playbook, and add the condition or conditions to the include. When you use this approach, Ansible applies the condition to the include itself plus any tasks in the role that also have that ``when`` statement." msgstr "ロール自体ã®ä¸­ã®å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ–ãƒ­ãƒƒã‚¯ã«æ¡ä»¶ã‚’追加ã—ã¾ã™ã€‚ã“れã¯ã€``when`` æ–‡ã«åŸºã¥ã„ã¦ãƒ­ãƒ¼ãƒ«å†…ã®ä¸€éƒ¨ã®ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã‚‹å”¯ä¸€ã®æ–¹æ³•ã§ã™ã€‚ロール内ã®ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã«ã¯ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ–ãƒ­ãƒƒã‚¯ã«æ¡ä»¶ã‚’設定ã—ã€Playbook ã§å‹•çš„ ``include_role`` を使用ã—ã€æ¡ä»¶ã‚’インクルードã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®æ–¹æ³•を使用ã™ã‚‹ã¨ã€Ansible ã¯æ¡ä»¶ã‚’インクルード自体ã«åŠ ãˆã¦ã€``when`` ã®æ–‡ã‚’æŒã¤ãƒ­ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:358 msgid "When you incorporate a role in your playbook statically with the ``roles`` keyword, Ansible adds the conditions you define to all the tasks in the role. For example:" msgstr "``roles`` キーワードを使用ã—㦠Playbook ã«ãƒ­ãƒ¼ãƒ«ã‚’é™çš„ã«çµ„ã¿è¾¼ã‚€ã¨ã€Ansible ã¯å®šç¾©ã—ãŸæ¡ä»¶ã‚’ロール内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«è¿½åŠ ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:370 msgid "Selecting variables, files, or templates based on facts" msgstr "ファクトã«åŸºã¥ã„ãŸå¤‰æ•°ã€ãƒ•ァイルã€ã¾ãŸã¯ãƒ†ãƒ³ãƒ—レートã®é¸æŠž" #: ../../rst/user_guide/playbooks_conditionals.rst:372 msgid "Sometimes the facts about a host determine the values you want to use for certain variables or even the file or template you want to select for that host. For example, the names of packages are different on CentOS and on Debian. The configuration files for common services are also different on different OS flavors and versions. To load different variables file, templates, or other files based on a fact about the hosts:" msgstr "ホストã«é–¢ã™ã‚‹ãƒ•ァクトã«ã‚ˆã£ã¦ã€ç‰¹å®šã®å¤‰æ•°ã«ä½¿ç”¨ã™ã‚‹å€¤ã‚„ã€ãã®ãƒ›ã‚¹ãƒˆç”¨ã«é¸æŠžã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚„ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆãŒæ±ºå®šã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ‘ッケージã®åå‰ã¯ CentOS 㨠Debian ã§ã¯ç•°ãªã‚Šã¾ã™ã€‚ã¾ãŸã€ä¸€èˆ¬çš„ãªã‚µãƒ¼ãƒ“スã®è¨­å®šãƒ•ァイルもã€OS ã®ãƒ•レーãƒãƒ¼ã‚„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã”ã¨ã«ç•°ãªã‚Šã¾ã™ã€‚ホストã«é–¢ã™ã‚‹ãƒ•ァクトã«åŸºã¥ã„ã¦ã€ç•°ãªã‚‹å¤‰æ•°ãƒ•ァイルやテンプレートãªã©ã‚’読ã¿è¾¼ã‚€ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:374 msgid "name your vars files, templates, or files to match the Ansible fact that differentiates them" msgstr "変数ファイルã€ãƒ†ãƒ³ãƒ—レートã€ã¾ãŸã¯ãƒ•ァイルを区別ã™ã‚‹ Ansible ファクトã«åˆã‚ã›ã¦åå‰ã‚’付ã‘ã‚‹" #: ../../rst/user_guide/playbooks_conditionals.rst:376 msgid "select the correct vars file, template, or file for each host with a variable based on that Ansible fact" msgstr "Ansible ファクトã«åŸºã¥ã„ã¦å¤‰æ•°ã‚’使用ã—ã¦ã€å„ãƒ›ã‚¹ãƒˆã®æ­£ã—ã„変数ファイルã€ãƒ†ãƒ³ãƒ—レートã€ã¾ãŸã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:378 msgid "Ansible separates variables from tasks, keeping your playbooks from turning into arbitrary code with nested conditionals. This approach results in more streamlined and auditable configuration rules because there are fewer decision points to track." msgstr "Ansible ã¯ã€å¤‰æ•°ã¨ã‚¿ã‚¹ã‚¯ã‚’分離ã™ã‚‹ã“ã¨ã§ã€Playbook ãŒãƒã‚¹ãƒˆã•ã‚ŒãŸæ¡ä»¶åˆ†å²ã«ã‚ˆã‚‹ä»»æ„ã®ã‚³ãƒ¼ãƒ‰ã«ãªã‚‰ãªã„よã†ã«ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ãƒ—ローãƒã§ã¯ã€è¿½è·¡ã™ã¹ã決定ãƒã‚¤ãƒ³ãƒˆãŒå°‘ãªããªã‚‹ãŸã‚ã€ã‚ˆã‚Šåˆç†çš„ã§ç›£æŸ»å¯èƒ½ãªè¨­å®šãƒ«ãƒ¼ãƒ«ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:381 msgid "Selecting variables files based on facts" msgstr "ファクトã«åŸºã¥ã変数ファイルã®é¸æŠž" #: ../../rst/user_guide/playbooks_conditionals.rst:383 msgid "You can create a playbook that works on multiple platforms and OS versions with a minimum of syntax by placing your variable values in vars files and conditionally importing them. If you want to install Apache on some CentOS and some Debian servers, create variables files with YAML keys and values. For example::" msgstr "変数ã®å€¤ã‚’ vars ファイルã«ç½®ãã€æ¡ä»¶ä»˜ãã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã§ã€æœ€å°é™ã®æ§‹æ–‡ã§è¤‡æ•°ã®ãƒ—ラットフォームや OS ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‹•作ã™ã‚‹ Playbook を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚一部㮠CentOS ã¨ä¸€éƒ¨ã® Debian サーãƒãƒ¼ã« Apache をインストールã™ã‚‹å ´åˆã¯ã€YAML ã®ã‚­ãƒ¼ã¨å€¤ã§å¤‰æ•°ãƒ•ァイルを作æˆã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:390 msgid "Then import those variables files based on the facts you gather on the hosts in your playbook::" msgstr "次ã«ã€Playbook ã®ãƒ›ã‚¹ãƒˆã«åŽé›†ã™ã‚‹ãƒ•ァクトã«åŸºã¥ã„ã¦ã€ã“れらã®å¤‰æ•°ãƒ•ァイルをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:404 msgid "Ansible gathers facts on the hosts in the webservers group, then interpolates the variable \"ansible_facts['os_family']\" into a list of filenames. If you have hosts with Red Hat operating systems (CentOS, for example), Ansible looks for 'vars/RedHat.yml'. If that file does not exist, Ansible attempts to load 'vars/os_defaults.yml'. For Debian hosts, Ansible first looks for 'vars/Debian.yml', before falling back on 'vars/os_defaults.yml'. If no files in the list are found, Ansible raises an error." msgstr "Ansible 㯠webservers グループã«å±žã™ã‚‹ãƒ›ã‚¹ãƒˆã®ãƒ•ァクトをåŽé›†ã—ã€å¤‰æ•°ã€Œansible_facts['os_family']ã€ã‚’ファイルåã®ãƒªã‚¹ãƒˆã«è£œé–“ã—ã¾ã™ã€‚Red Hat オペレーティングシステムをæ­è¼‰ã—ãŸãƒ›ã‚¹ãƒˆ (CentOS ãªã©) ãŒã‚ã‚‹å ´åˆã€Ansible ã¯ã€Œvars/RedHat.ymlã€ã‚’探ã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルãŒå­˜åœ¨ã—ãªã„å ´åˆã€Ansibleã¯ã€Œvars/os_defaults.ymlã€ã®èª­ã¿è¾¼ã¿ã‚’試ã¿ã¾ã™ã€‚Debian ホストã®å ´åˆã€Ansible ã¯ã¾ãšã€Œvars/Debian.ymlã€ã‚’探ã—ã€ãã®å¾Œã§ã€Œvars/os_defaults.ymlã€ã«ãƒ•ォールãƒãƒƒã‚¯ã—ã¾ã™ã€‚リスト内ã®ãƒ•ァイルãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã€Ansible ãŒã‚¨ãƒ©ãƒ¼ã‚’出力ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:407 msgid "Selecting files and templates based on facts" msgstr "ファクトã«åŸºã¥ãファイルã¨ãƒ†ãƒ³ãƒ—レートã®é¸æŠž" #: ../../rst/user_guide/playbooks_conditionals.rst:409 msgid "You can use the same approach when different OS flavors or versions require different configuration files or templates. Select the appropriate file or template based on the variables assigned to each host. This approach is often much cleaner than putting a lot of conditionals into a single template to cover multiple OS or package versions." msgstr "OS ã®ãƒ•レーãƒãƒ¼ã‚„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ˆã£ã¦ã€è¨­å®šãƒ•ァイルやテンプレートãŒç•°ãªã‚‹å ´åˆã‚‚åŒæ§˜ã®æ–¹æ³•ã§å¯¾å¿œã§ãã¾ã™ã€‚å„ホストã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå¤‰æ•°ã«åŸºã¥ã„ã¦ã€é©åˆ‡ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚„ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯ã€è¤‡æ•°ã® OS やパッケージã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾å¿œã™ã‚‹ãŸã‚ã« 1 ã¤ã®ãƒ†ãƒ³ãƒ—レートã«å¤šãã®æ¡ä»¶åˆ†å²ã‚’入れるよりもã€ã¯ã‚‹ã‹ã«ã™ã£ãりã™ã‚‹ã“ã¨ãŒå¤šã„ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:411 msgid "For example, you can template out a configuration file that is very different between, say, CentOS and Debian::" msgstr "例ãˆã°ã€CentOS 㨠Debian ã®é–“ã§å¤§ããç•°ãªã‚‹è¨­å®šãƒ•ァイルをテンプレート化ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:427 msgid "Commonly-used facts" msgstr "一般的ã«ä½¿ç”¨ã•れるファクト" #: ../../rst/user_guide/playbooks_conditionals.rst:429 msgid "The following Ansible facts are frequently used in conditionals." msgstr "以下㮠Ansible ファクトã¯ã€æ¡ä»¶åˆ†å²ã§é »ç¹ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:434 msgid "ansible_facts['distribution']" msgstr "ansible_facts['distribution']" #: ../../rst/user_guide/playbooks_conditionals.rst:436 #: ../../rst/user_guide/playbooks_conditionals.rst:474 msgid "Possible values (sample, not complete list)::" msgstr "使用ã§ãる値 (完全リストã§ã¯ãªã一部ã§ã™):" #: ../../rst/user_guide/playbooks_conditionals.rst:465 msgid "ansible_facts['distribution_major_version']" msgstr "ansible_facts['distribution_major_version']" #: ../../rst/user_guide/playbooks_conditionals.rst:467 msgid "The major version of the operating system. For example, the value is `16` for Ubuntu 16.04." msgstr "オペレーティングシステムã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚ãŸã¨ãˆã°ã€Ubuntu 16.04 ã®å ´åˆã¯ `16` ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_conditionals.rst:472 msgid "ansible_facts['os_family']" msgstr "ansible_facts['os_family']" #: ../../rst/user_guide/playbooks_conditionals.rst:501 #: ../../rst/user_guide/playbooks_error_handling.rst:236 #: ../../rst/user_guide/playbooks_filters.rst:1847 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:737 #: ../../rst/user_guide/playbooks_intro.rst:144 #: ../../rst/user_guide/playbooks_loops.rst:438 #: ../../rst/user_guide/playbooks_reuse.rst:214 #: ../../rst/user_guide/playbooks_reuse_includes.rst:17 #: ../../rst/user_guide/playbooks_reuse_roles.rst:606 #: ../../rst/user_guide/playbooks_templating.rst:54 #: ../../rst/user_guide/playbooks_tests.rst:398 #: ../../rst/user_guide/playbooks_variables.rst:459 #: ../../rst/user_guide/windows_dsc.rst:498 #: ../../rst/user_guide/windows_faq.rst:246 #: ../../rst/user_guide/windows_setup.rst:576 #: ../../rst/user_guide/windows_usage.rst:506 #: ../../rst/user_guide/windows_winrm.rst:907 msgid ":ref:`playbooks_best_practices`" msgstr ":ref:`playbooks_best_practices`" #: ../../rst/user_guide/playbooks_conditionals.rst:502 #: ../../rst/user_guide/playbooks_error_handling.rst:237 #: ../../rst/user_guide/playbooks_filters.rst:1848 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:738 #: ../../rst/user_guide/playbooks_loops.rst:439 #: ../../rst/user_guide/playbooks_reuse.rst:215 #: ../../rst/user_guide/playbooks_reuse_includes.rst:18 #: ../../rst/user_guide/playbooks_reuse_roles.rst:607 #: ../../rst/user_guide/playbooks_templating.rst:55 #: ../../rst/user_guide/playbooks_tests.rst:399 #: ../../rst/user_guide/playbooks_variables.rst:460 #: ../../rst/user_guide/windows_dsc.rst:499 #: ../../rst/user_guide/windows_faq.rst:247 #: ../../rst/user_guide/windows_setup.rst:577 #: ../../rst/user_guide/windows_usage.rst:507 #: ../../rst/user_guide/windows_winrm.rst:908 msgid "Tips and tricks for playbooks" msgstr "Playbook ã®ãƒ’ントã¨è£æŠ€" #: ../../rst/user_guide/playbooks_debugger.rst:5 msgid "Debugging tasks" msgstr "タスクã®ãƒ‡ãƒãƒƒã‚°" #: ../../rst/user_guide/playbooks_debugger.rst:7 msgid "Ansible offers a task debugger so you can fix errors during execution instead of editing your playbook and running it again to see if your change worked. You have access to all of the features of the debugger in the context of the task. You can check or set the value of variables, update module arguments, and re-run the task with the new variables and arguments. The debugger lets you resolve the cause of the failure and continue with playbook execution." msgstr "Ansible ã«ã¯ã‚¿ã‚¹ã‚¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒã‚りã€å¤‰æ›´ãŒæˆåŠŸã—ãŸã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ãŸã‚ã« Playbook を編集ã—ã¦å†åº¦å®Ÿè¡Œã™ã‚‹ã®ã§ã¯ãªãã€å®Ÿè¡Œä¸­ã«ã‚¨ãƒ©ãƒ¼ã‚’修正ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚タスクã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆå†…ã§ã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã®ã™ã¹ã¦ã®æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚変数ã®å€¤ã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸã‚Šè¨­å®šã—ãŸã‚Šã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¼•æ•°ã‚’æ›´æ–°ã—ãŸã‚Šã€æ–°ã—ã„変数や引数を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’å†å®Ÿè¡Œã—ãŸã‚Šã§ãã¾ã™ã€‚デãƒãƒƒã‚¬ãƒ¼ã¯ã€å¤±æ•—ã®åŽŸå› ã‚’è§£æ±ºã—ã€Playbook ã®å®Ÿè¡Œã‚’続行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:13 msgid "Enabling the debugger" msgstr "デãƒãƒƒã‚¬ãƒ¼ã®æœ‰åŠ¹åŒ–" #: ../../rst/user_guide/playbooks_debugger.rst:15 msgid "The debugger is not enabled by default. If you want to invoke the debugger during playbook execution, you must enable it first." msgstr "デãƒãƒƒã‚¬ãƒ¼ã¯ãƒ‡ãƒ•ォルトã§ã¯æœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“。Playbook ã®å®Ÿè¡Œä¸­ã«ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã™å ´åˆã¯ã€æœ€åˆã«æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:17 msgid "Use one of these three methods to enable the debugger:" msgstr "以下㮠3 ã¤ã®æ–¹æ³•ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:19 msgid "with the debugger keyword" msgstr "デãƒãƒƒã‚¬ãƒ¼ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_debugger.rst:20 msgid "in configuration or an environment variable, or" msgstr "設定ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã§" #: ../../rst/user_guide/playbooks_debugger.rst:21 msgid "as a strategy" msgstr "ストラテジーã¨ã—ã¦" #: ../../rst/user_guide/playbooks_debugger.rst:24 msgid "Enabling the debugger with the ``debugger`` keyword" msgstr "``debugger`` キーワードã§ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:28 msgid "You can use the ``debugger`` keyword to enable (or disable) the debugger for a specific play, role, block, or task. This option is especially useful when developing or extending playbooks, plays, and roles. You can enable the debugger on new or updated tasks. If they fail, you can fix the errors efficiently. The ``debugger`` keyword accepts five values:" msgstr "``debugger`` キーワードを使用ã™ã‚‹ã¨ã€ç‰¹å®šã®ãƒ—レイã€ãƒ­ãƒ¼ãƒ«ã€ãƒ–ロックã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効 (ã¾ãŸã¯ç„¡åй) ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€Playbookã€ãƒ—レイã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã‚’開発ã¾ãŸã¯æ‹¡å¼µã™ã‚‹éš›ã«ç‰¹ã«å½¹ç«‹ã¡ã¾ã™ã€‚æ–°è¦ã¾ãŸã¯æ›´æ–°ã•れãŸã‚¿ã‚¹ã‚¯ã§ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚失敗ã—ã¦ã‚‚ã€åŠ¹çŽ‡çš„ã«ã‚¨ãƒ©ãƒ¼ã‚’修正ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``debugger`` キーワード㯠5 ã¤ã®å€¤ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:34 msgid "Value" msgstr "値" #: ../../rst/user_guide/playbooks_debugger.rst:34 msgid "Result" msgstr "çµæžœ" #: ../../rst/user_guide/playbooks_debugger.rst:36 msgid "always" msgstr "always" #: ../../rst/user_guide/playbooks_debugger.rst:36 msgid "Always invoke the debugger, regardless of the outcome" msgstr "çµæžœã«é–¢ä¿‚ãªãã€å¸¸ã«ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:38 msgid "never" msgstr "never" #: ../../rst/user_guide/playbooks_debugger.rst:38 msgid "Never invoke the debugger, regardless of the outcome" msgstr "çµæžœã«é–¢ä¿‚ãªãã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_debugger.rst:40 msgid "on_failed" msgstr "on_failed" #: ../../rst/user_guide/playbooks_debugger.rst:40 msgid "Only invoke the debugger if a task fails" msgstr "タスクãŒå¤±æ•—ã—ãŸå ´åˆã«é™ã‚Šãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:42 msgid "on_unreachable" msgstr "on_unreachable" #: ../../rst/user_guide/playbooks_debugger.rst:42 msgid "Only invoke the debugger if a host is unreachable" msgstr "ホストãŒåˆ°é”ã§ããªã„å ´åˆã«é™ã‚Šãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:44 msgid "on_skipped" msgstr "on_skipped" #: ../../rst/user_guide/playbooks_debugger.rst:44 msgid "Only invoke the debugger if the task is skipped" msgstr "タスクãŒã‚¹ã‚­ãƒƒãƒ—ã•れãŸå ´åˆã«é™ã‚Šãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:48 msgid "When you use the ``debugger`` keyword, the value you specify overrides any global configuration to enable or disable the debugger. If you define ``debugger`` at multiple levels, such as in a role and in a task, Ansible honors the most granular definition. The definition at the play or role level applies to all blocks and tasks within that play or role, unless they specify a different value. The definition at the block level overrides the definition at the play or role level, and applies to all tasks within that block, unless they specify a different value. The definition at the task level always applies to the task; it overrides the definitions at the block, play, or role level." msgstr "``debugger`` キーワードを使用ã™ã‚‹ã¨ã€æŒ‡å®šã—ãŸå€¤ãŒã€ãƒ‡ãƒãƒƒã‚¬â€•を有効ã¾ãŸã¯ç„¡åйã«ã™ã‚‹ã‚°ãƒ­ãƒ¼ãƒãƒ«æ§‹æˆã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚``debugger`` をロールやタスクãªã©ã®è¤‡æ•°ã®ãƒ¬ãƒ™ãƒ«ã§å®šç¾©ã—ãŸå ´åˆã€Ansible ã¯æœ€ã‚‚詳細ãªå®šç¾©ã‚’å°Šé‡ã—ã¾ã™ã€‚プレイã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®ãƒ¬ãƒ™ãƒ«ã§ã®å®šç¾©ã¯ã€ç•°ãªã‚‹å€¤ã‚’指定ã—ãªã„é™ã‚Šã€ãã®ãƒ—レイã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®ãƒ–ロックãŠã‚ˆã³ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れã¾ã™ã€‚ブロックレベルã®å®šç¾©ã¯ã€ãƒ—レイã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãƒ¬ãƒ™ãƒ«ã®å®šç¾©ã‚ˆã‚Šã‚‚優先ã•れã€ç•°ãªã‚‹å€¤ãŒæŒ‡å®šã•れã¦ã„ãªã„é™ã‚Šã€ãã®ãƒ–ロック内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れã¾ã™ã€‚タスクレベルã§ã®å®šç¾©ã¯ã€å¸¸ã«ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れã€ãƒ–ロックã€ãƒ—レイã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãƒ¬ãƒ™ãƒ«ã§ã®å®šç¾©ã‚ˆã‚Šã‚‚優先ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:51 msgid "Examples of using the ``debugger`` keyword" msgstr "``debugger`` キーワードã®ä½¿ç”¨ä¾‹" #: ../../rst/user_guide/playbooks_debugger.rst:53 msgid "Example of setting the ``debugger`` keyword on a task:" msgstr "タスク㫠``debugger`` キーワードを設定ã™ã‚‹ä¾‹:" #: ../../rst/user_guide/playbooks_debugger.rst:61 msgid "Example of setting the ``debugger`` keyword on a play:" msgstr "プレイ㫠``debugger`` キーワードを設定ã™ã‚‹ä¾‹:" #: ../../rst/user_guide/playbooks_debugger.rst:73 msgid "Example of setting the ``debugger`` keyword at multiple levels:" msgstr "複数ã®ãƒ¬ãƒ™ãƒ«ã§ ``debugger`` キーワードを設定ã™ã‚‹ä¾‹:" #: ../../rst/user_guide/playbooks_debugger.rst:86 msgid "In this example, the debugger is set to ``never`` at the play level and to ``on_failed`` at the task level. If the task fails, Ansible invokes the debugger, because the definition on the task overrides the definition on its parent play." msgstr "ã“ã®ä¾‹ã§ã¯ã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã¯ã€ãƒ—レイレベルã§ã¯ ``never`` ã«ã€ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ã¯ ``on_failed`` ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚タスクãŒå¤±æ•—ã—ãŸå ´åˆã€ã‚¿ã‚¹ã‚¯ã®å®šç¾©ãŒè¦ªãƒ—レイã®å®šç¾©ã‚’上書ãã™ã‚‹ãŸã‚ã€Ansible ã¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’èµ·å‹•ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:89 msgid "Enabling the debugger in configuration or an environment variable" msgstr "設定ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã§ã®ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã®æœ‰åŠ¹åŒ–" #: ../../rst/user_guide/playbooks_debugger.rst:93 msgid "You can enable the task debugger globally with a setting in ansible.cfg or with an environment variable. The only options are ``True`` or ``False``. If you set the configuration option or environment variable to ``True``, Ansible runs the debugger on failed tasks by default." msgstr "タスクデãƒãƒƒã‚¬ãƒ¼ã‚’グローãƒãƒ«ã«æœ‰åйã«ã™ã‚‹ã«ã¯ã€ansible.cfg 内ã®è¨­å®šã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚オプション㯠``True`` ã¾ãŸã¯ ``False`` ã®ã¿ã§ã™ã€‚設定オプションã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’ ``True`` ã«è¨­å®šã—ãŸå ´åˆã€Ansible ã¯ãƒ‡ãƒ•ォルトã§å¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯ã«å¯¾ã—ã¦ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:95 msgid "To enable the task debugger from ansible.cfg, add this setting to the defaults section::" msgstr "ansible.cfg ã‹ã‚‰ã‚¿ã‚¹ã‚¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®è¨­å®šã‚’ defaults セクションã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:100 msgid "To enable the task debugger with an environment variable, pass the variable when you run your playbook::" msgstr "環境変数ã§ã‚¿ã‚¹ã‚¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’有効ã«ã™ã‚‹ã«ã¯ã€Playbook ã®å®Ÿè¡Œæ™‚ã«å¤‰æ•°ã‚’渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:104 msgid "When you enable the debugger globally, every failed task invokes the debugger, unless the role, play, block, or task explicitly disables the debugger. If you need more granular control over what conditions trigger the debugger, use the ``debugger`` keyword." msgstr "グローãƒãƒ«ã«ãƒ‡ãƒãƒƒã‚¬ã‚’有効ã«ã™ã‚‹ã¨ã€ãƒ­ãƒ¼ãƒ«ã€ãƒ—レイã€ãƒ–ロックã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ãŒæ˜Žç¤ºçš„ã«ãƒ‡ãƒãƒƒã‚¬â€•を無効ã«ã—ã¦ã„ãªã„é™ã‚Šã€å¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯ã¯ã™ã¹ã¦ãƒ‡ãƒãƒƒã‚¬â€•ã‚’èµ·å‹•ã—ã¾ã™ã€‚ã©ã®ã‚ˆã†ãªæ¡ä»¶ã§ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒèµ·å‹•ã™ã‚‹ã‹ã‚’より詳細ã«åˆ¶å¾¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€``debugger`` キーワードを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:107 msgid "Enabling the debugger as a strategy" msgstr "ストラテジーã¨ã—ã¦ã®ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã®æœ‰åŠ¹åŒ–" #: ../../rst/user_guide/playbooks_debugger.rst:109 msgid "If you are running legacy playbooks or roles, you may see the debugger enabled as a :ref:`strategy `. You can do this at the play level, in ansible.cfg, or with the environment variable ``ANSIBLE_STRATEGY=debug``. For example:" msgstr "レガシー㮠Playbook やロールを実行ã—ã¦ã„ã‚‹å ´åˆã¯ã€:ref:`strategy ` ã¨ã—ã¦ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ãƒ—レイレベルã€ansible.cfgã€ã¾ãŸã¯ç’°å¢ƒå¤‰æ•° ``ANSIBLE_STRATEGY=debug`` ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:118 msgid "Or in ansible.cfg::" msgstr "ã¾ãŸã¯ ansible.cfg ã§ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:125 msgid "This backwards-compatible method, which matches Ansible versions before 2.5, may be removed in a future release." msgstr "ã“ã®å¾Œæ–¹äº’æ›æ€§ã®ã‚る方法ã¯ã€Ansible ã® 2.5 以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾å¿œã—ã¦ã„ã¾ã™ãŒã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:128 msgid "Resolving errors in the debugger" msgstr "デãƒãƒƒã‚¬ãƒ¼ã§ã‚¨ãƒ©ãƒ¼ã®è§£æ±º" #: ../../rst/user_guide/playbooks_debugger.rst:130 msgid "After Ansible invokes the debugger, you can use the seven :ref:`debugger commands ` to resolve the error that Ansible encountered. Consider this example playbook, which defines the ``var1`` variable but uses the undefined ``wrong_var`` variable in a task by mistake." msgstr "Ansible ãŒãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’èµ·å‹•ã—ãŸå¾Œã€7 ã¤ã® :ref:`debugger コマンド ` を使用ã—ã¦ã€AnsibleãŒé­é‡ã—ãŸã‚¨ãƒ©ãƒ¼ã‚’解決ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã® Playbook ã®ä¾‹ã§ã¯ ``var1`` 変数を定義ã—ã¦ã„ã¾ã™ãŒã€æœªå®šç¾©ã® ``wrong_var`` 変数を誤ã£ã¦ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:143 msgid "If you run this playbook, Ansible invokes the debugger when the task fails. From the debug prompt, you can change the module arguments or the variables and run the task again." msgstr "ã“ã® Playbook を実行ã™ã‚‹ã¨ã€Ansible ã¯ã‚¿ã‚¹ã‚¯ã®å¤±æ•—時ã«ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’呼ã³å‡ºã—ã¾ã™ã€‚デãƒãƒƒã‚°ãƒ—ロンプトã‹ã‚‰ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã¾ãŸã¯å¤‰æ•°ã‚’変更ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã‚’å†åº¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:178 msgid "Changing the task arguments in the debugger to use ``var1`` instead of ``wrong_var`` makes the task run successfully." msgstr "デãƒãƒƒã‚¬ã§ã‚¿ã‚¹ã‚¯ã®å¼•æ•° ``wrong_var`` ã®ä»£ã‚り㫠``var1`` を使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ãŒæ­£å¸¸ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:183 msgid "Available debug commands" msgstr "利用å¯èƒ½ãªãƒ‡ãƒãƒƒã‚°ã‚³ãƒžãƒ³ãƒ‰" #: ../../rst/user_guide/playbooks_debugger.rst:185 msgid "You can use these seven commands at the debug prompt:" msgstr "ã“れら㮠7 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ãƒ‡ãƒãƒƒã‚°ãƒ—ロンプトã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:191 msgid "Command" msgstr "コマンド" #: ../../rst/user_guide/playbooks_debugger.rst:191 msgid "Shortcut" msgstr "ショートカット" #: ../../rst/user_guide/playbooks_debugger.rst:191 msgid "Action" msgstr "アクション" #: ../../rst/user_guide/playbooks_debugger.rst:193 msgid "print" msgstr "print" #: ../../rst/user_guide/playbooks_debugger.rst:193 msgid "p" msgstr "p" #: ../../rst/user_guide/playbooks_debugger.rst:193 msgid "Print information about the task" msgstr "タスクã«é–¢ã™ã‚‹æƒ…報を出力ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:195 msgid "task.args[*key*] = *value*" msgstr "task.args[*key*] = *value*" #: ../../rst/user_guide/playbooks_debugger.rst:195 #: ../../rst/user_guide/playbooks_debugger.rst:197 msgid "no shortcut" msgstr "ショートカットãªã—" #: ../../rst/user_guide/playbooks_debugger.rst:195 msgid "Update module arguments" msgstr "モジュール引数を更新ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:197 msgid "task_vars[*key*] = *value*" msgstr "task_vars[*key*] = *value*" #: ../../rst/user_guide/playbooks_debugger.rst:197 msgid "Update task variables (you must ``update_task`` next)" msgstr "タスク変数を更新ã™ã‚‹ (次回 ``update_task`` ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™)" #: ../../rst/user_guide/playbooks_debugger.rst:199 msgid "update_task" msgstr "update_task" #: ../../rst/user_guide/playbooks_debugger.rst:199 msgid "u" msgstr "u" #: ../../rst/user_guide/playbooks_debugger.rst:199 msgid "Recreate a task with updated task variables" msgstr "æ›´æ–°ã•れãŸã‚¿ã‚¹ã‚¯å¤‰æ•°ã§ã‚¿ã‚¹ã‚¯ã‚’å†ä½œæˆã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:201 msgid "redo" msgstr "redo" #: ../../rst/user_guide/playbooks_debugger.rst:201 msgid "r" msgstr "r" #: ../../rst/user_guide/playbooks_debugger.rst:201 msgid "Run the task again" msgstr "タスクをå†åº¦å®Ÿè¡Œã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:203 msgid "continue" msgstr "continue" #: ../../rst/user_guide/playbooks_debugger.rst:203 msgid "c" msgstr "c" #: ../../rst/user_guide/playbooks_debugger.rst:203 msgid "Continue executing, starting with the next task" msgstr "実行を継続ã™ã‚‹ (次ã®ã‚¿ã‚¹ã‚¯ã‹ã‚‰é–‹å§‹)" #: ../../rst/user_guide/playbooks_debugger.rst:205 msgid "quit" msgstr "quit" #: ../../rst/user_guide/playbooks_debugger.rst:205 msgid "q" msgstr "q" #: ../../rst/user_guide/playbooks_debugger.rst:205 msgid "Quit the debugger" msgstr "デãƒãƒƒã‚¬ãƒ¼ã‚’終了ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:209 msgid "For more details, see the individual descriptions and examples below." msgstr "詳細ã¯ã€ä»¥ä¸‹ã®å€‹åˆ¥ã®èª¬æ˜ŽãŠã‚ˆã³ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_debugger.rst:214 msgid "Print command" msgstr "コマンドを出力ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:216 msgid "``print *task/task.args/task_vars/host/result*`` prints information about the task::" msgstr "``print *task/task.args/task_vars/host/result*`` ã¯ã€ã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹æƒ…報を出力ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:241 msgid "Update args command" msgstr "args コマンドを更新ã™ã‚‹" #: ../../rst/user_guide/playbooks_debugger.rst:243 msgid "``task.args[*key*] = *value*`` updates a module argument. This sample playbook has an invalid package name::" msgstr "``task.args[*key*] = *value*`` モジュール引数を更新ã—ã¾ã™ã€‚ã“ã®ã‚µãƒ³ãƒ—ル Playbook ã«ã¯ç„¡åйãªãƒ‘ッケージåãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:254 msgid "When you run the playbook, the invalid package name triggers an error, and Ansible invokes the debugger. You can fix the package name by viewing, then updating the module argument::" msgstr "Playbook を実行ã™ã‚‹ã¨ã€ãƒ‘ッケージåãŒç„¡åйã§ã‚ã‚‹ãŸã‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã€Ansible ãŒãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’èµ·å‹•ã—ã¾ã™ã€‚パッケージåを修正ã™ã‚‹ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å¼•数を表示ã—ã¦ã‹ã‚‰æ›´æ–°ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:263 msgid "After you update the module argument, use ``redo`` to run the task again with the new args." msgstr "モジュール引数を更新ã—ãŸã‚‰ã€``redo`` を使用ã—ã¦ã€æ–°ã—ã„引数ã§ã‚¿ã‚¹ã‚¯ã‚’å†åº¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:268 msgid "Update vars command" msgstr "vars ã‚³ãƒžãƒ³ãƒ‰ã®æ›´æ–°" #: ../../rst/user_guide/playbooks_debugger.rst:270 msgid "``task_vars[*key*] = *value*`` updates the ``task_vars``. You could fix the playbook above by viewing, then updating the task variables instead of the module args::" msgstr "``task_vars[*key*] = *value*`` ã¯ã€``task_vars`` ã‚’æ›´æ–°ã—ã¾ã™ã€‚モジュール引数ã§ã¯ãªãタスク変数を表示ã—ã¦ã‹ã‚‰æ›´æ–°ã—ã¦ã€ä¸Šè¨˜ã® Playbook を修正ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:280 msgid "After you update the task variables, you must use ``update_task`` to load the new variables before using ``redo`` to run the task again." msgstr "タスク変数を更新ã—ãŸã‚‰ã€``redo`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’å†å®Ÿè¡Œã™ã‚‹å‰ã«ã€``update_task`` を使用ã—ã¦æ–°ã—ã„変数を読ã¿è¾¼ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:283 msgid "In 2.5 this was updated from ``vars`` to ``task_vars`` to avoid conflicts with the ``vars()`` python function." msgstr "ã“れã¯ã€python 関数 ``vars()`` ã¨ç«¶åˆã—ãªã„よã†ã«ã€2.5 ã§ ``vars`` ã‹ã‚‰ ``task_vars`` ã«æ›´æ–°ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:288 msgid "Update task command" msgstr "task ã‚³ãƒžãƒ³ãƒ‰ã®æ›´æ–°" #: ../../rst/user_guide/playbooks_debugger.rst:292 msgid "``u`` or ``update_task`` recreates the task from the original task data structure and templates with updated task variables. See the entry :ref:`update_vars_command` for an example of use." msgstr "``u`` ã¾ãŸã¯ ``update_task`` ã¯ã€æ›´æ–°ã•れãŸã‚¿ã‚¹ã‚¯å¤‰æ•°ã‚’æŒã¤å…ƒã®ã‚¿ã‚¹ã‚¯ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã¨ãƒ†ãƒ³ãƒ—レートã‹ã‚‰ã‚¿ã‚¹ã‚¯ã‚’å†ä½œæˆã—ã¾ã™ã€‚使用例ã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼:ref:`update_vars_command` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_debugger.rst:297 msgid "Redo command" msgstr "コマンドã®ã‚„り直ã—" #: ../../rst/user_guide/playbooks_debugger.rst:299 msgid "``r`` or ``redo`` runs the task again." msgstr "``r`` ã¾ãŸã¯ ``redo`` ã¯ã‚¿ã‚¹ã‚¯ã‚’å†å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:304 msgid "Continue command" msgstr "コマンドã®ç¶šè¡Œ" #: ../../rst/user_guide/playbooks_debugger.rst:306 msgid "``c`` or ``continue`` continues executing, starting with the next task." msgstr "``c`` ã¾ãŸã¯ ``continue`` ã¯ã€æ¬¡ã®ã‚¿ã‚¹ã‚¯ã‹ã‚‰é–‹å§‹ã—ã¦å®Ÿè¡Œã‚’継続ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:311 msgid "Quit command" msgstr "Quit コマンド" #: ../../rst/user_guide/playbooks_debugger.rst:313 msgid "``q`` or ``quit`` quits the debugger. The playbook execution is aborted." msgstr "``q`` ã¾ãŸã¯ ``quit`` ã¯ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’終了ã—ã¾ã™ã€‚Playbook ã®å®Ÿè¡Œã¯ä¸­æ­¢ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_debugger.rst:316 msgid "How the debugger interacts with the free strategy" msgstr "デãƒãƒƒã‚¬ãƒ¼ãŒãƒ•リーストラテジーã¨ã©ã®ã‚ˆã†ã«ç›¸äº’作用ã™ã‚‹ã‹" #: ../../rst/user_guide/playbooks_debugger.rst:318 msgid "With the default ``linear`` strategy enabled, Ansible halts execution while the debugger is active, and runs the debugged task immediately after you enter the ``redo`` command. With the ``free`` strategy enabled, however, Ansible does not wait for all hosts, and may queue later tasks on one host before a task fails on another host. With the ``free`` strategy, Ansible does not queue or execute any tasks while the debugger is active. However, all queued tasks remain in the queue and run as soon as you exit the debugger. If you use ``redo`` to reschedule a task from the debugger, other queued tasks may execute before your rescheduled task. For more information about strategies, see :ref:`playbooks_strategies`." msgstr "デフォルト㮠``linear`` ストラテジーを有効ã«ã™ã‚‹ã¨ã€Ansible ã¯ãƒ‡ãƒãƒƒã‚¬â€•ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªé–“ã¯å®Ÿè¡Œã‚’åœæ­¢ã—ã€``redo`` コマンドを入力ã—ãŸç›´å¾Œã«ãƒ‡ãƒãƒƒã‚°ã•れãŸã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚ã—ã‹ã—ã€``free`` ストラテジーを有効ã«ã™ã‚‹ã¨ã€Ansible ã¯ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’å¾…ãŸãšã«ã€åˆ¥ã®ãƒ›ã‚¹ãƒˆã§ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹å‰ã«ã€ã‚るホストã§å¾Œã®ã‚¿ã‚¹ã‚¯ã‚’キューã«å…¥ã‚Œã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚``free`` ストラテジーを使用ã™ã‚‹ã¨ã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªé–“ã€Ansible ã¯ã€ã‚¿ã‚¹ã‚¯ã®ç…§ä¼šã‚„実行を行ã„ã¾ã›ã‚“。ãŸã ã—ã€ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‰ã‚ŒãŸã‚¿ã‚¹ã‚¯ã¯ã™ã¹ã¦ã‚­ãƒ¥ãƒ¼ã«æ®‹ã‚Šã€ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‚’終了ã™ã‚‹ã¨ã™ãã«å®Ÿè¡Œã•れã¾ã™ã€‚``redo`` を使用ã—ã¦ãƒ‡ãƒãƒƒã‚¬ãƒ¼ã‹ã‚‰ã‚¿ã‚¹ã‚¯ã‚’å†ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã™ã‚‹ã¨ã€å†ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸã‚¿ã‚¹ã‚¯ã®å‰ã«ã‚­ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‰ã‚ŒãŸä»–ã®ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ストラテジーã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€Œ:ref:`playbooks_strategies`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_debugger.rst:322 msgid ":ref:`playbooks_start_and_step`" msgstr ":ref:`playbooks_start_and_step`" #: ../../rst/user_guide/playbooks_debugger.rst:323 msgid "Running playbooks while debugging or testing" msgstr "デãƒãƒƒã‚°æ™‚ã¾ãŸã¯ãƒ†ã‚¹ãƒˆæ™‚ã® Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_delegation.rst:4 msgid "Controlling where tasks run: delegation and local actions" msgstr "タスクã®å®Ÿè¡Œå ´æ‰€ã®åˆ¶å¾¡: 委譲ãŠã‚ˆã³ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/user_guide/playbooks_delegation.rst:6 msgid "By default Ansible gathers facts and executes all tasks on the machines that match the ``hosts`` line of your playbook. This page shows you how to delegate tasks to a different machine or group, delegate facts to specific machines or groups, or run an entire playbook locally. Using these approaches, you can manage inter-related environments precisely and efficiently. For example, when updating your webservers, you might need to remove them from a load-balanced pool temporarily. You cannot perform this task on the webservers themselves. By delegating the task to localhost, you keep all the tasks within the same play." msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ•ァクトをåŽé›†ã—ã€Playbook ã® ``hosts`` 行ã«ä¸€è‡´ã™ã‚‹ãƒžã‚·ãƒ³ä¸Šã§ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã‚’別ã®ãƒžã‚·ãƒ³ã‚„グループã«å§”è­²ã—ãŸã‚Šã€ãƒ•ァクトを特定ã®ãƒžã‚·ãƒ³ã‚„グループã«å§”è­²ã—ãŸã‚Šã€Playbook 全体をローカルã§å®Ÿè¡Œã™ã‚‹æ–¹æ³•を紹介ã—ã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ–¹æ³•を用ã„ã‚‹ã“ã¨ã§ã€ç›¸äº’ã«é–¢é€£ã™ã‚‹ç’°å¢ƒã‚’正確ã‹ã¤åŠ¹çŽ‡çš„ã«ç®¡ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Web サーãƒãƒ¼ã‚’æ›´æ–°ã™ã‚‹éš›ã«ã€è² è·åˆ†æ•£ã—ãŸãƒ—ールã‹ã‚‰ä¸€æ™‚的㫠Web サーãƒãƒ¼ã‚’削除ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€Web サーãƒãƒ¼è‡ªèº«ã§ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。ã“ã®ã‚¿ã‚¹ã‚¯ã‚’ localhost ã«å§”è­²ã™ã‚‹ã“ã¨ã§ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’åŒã˜ãƒ—レイã«åŽã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:12 msgid "Tasks that cannot be delegated" msgstr "委譲ã§ããªã„タスク" #: ../../rst/user_guide/playbooks_delegation.rst:14 msgid "Some tasks always execute on the controller. These tasks, including ``include``, ``add_host``, and ``debug``, cannot be delegated." msgstr "一部ã®ã‚¿ã‚¹ã‚¯ã¯å¸¸ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§å®Ÿè¡Œã—ã¾ã™ã€‚ã“れらã®ã‚¿ã‚¹ã‚¯ã«ã¯ã€``include``ã€``add_host``ã€ãŠã‚ˆã³ ``debug`` ã‚’å«ã‚€ã‚¿ã‚¹ã‚¯ã‚’委譲ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_delegation.rst:19 msgid "Delegating tasks" msgstr "タスクã®å§”è­²" #: ../../rst/user_guide/playbooks_delegation.rst:21 msgid "If you want to perform a task on one host with reference to other hosts, use the ``delegate_to`` keyword on a task. This is ideal for managing nodes in a load balanced pool or for controlling outage windows. You can use delegation with the :ref:`serial ` keyword to control the number of hosts executing at one time::" msgstr "ã‚るホストã§ä»–ã®ãƒ›ã‚¹ãƒˆã‚’å‚ç…§ã—ãªãŒã‚‰ã‚¿ã‚¹ã‚¯ã‚’実行ã—ãŸã„å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯ã« ``delegate_to`` キーワードを使用ã—ã¾ã™ã€‚ã“れã¯ã€è² è·åˆ†æ•£ã•れãŸãƒ—ールã®ãƒŽãƒ¼ãƒ‰ã‚’管ç†ã—ãŸã‚Šã€éšœå®³ç™ºç”Ÿæ™‚ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’制御ã™ã‚‹ã®ã«æœ€é©ã§ã™ã€‚:ref:`serial ` キーワードã§å§”譲を使用ã™ã‚‹ã¨ã€ä¸€åº¦ã«å®Ÿè¡Œã™ã‚‹ãƒ›ã‚¹ãƒˆã®æ•°ã‚’制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:41 msgid "The first and third tasks in this play run on 127.0.0.1, which is the machine running Ansible. There is also a shorthand syntax that you can use on a per-task basis: ``local_action``. Here is the same playbook as above, but using the shorthand syntax for delegating to 127.0.0.1::" msgstr "ã“ã“ã§ã¯ã€1 番目㨠3 番目ã®ã‚¿ã‚¹ã‚¯ã‚’ 127.0.0.1 ã§å®Ÿè¡Œã—ã¦ã„ã¾ã™ãŒã€ã“れ㯠Ansible を実行ã—ã¦ã„るマシンã§ã™ã€‚ã¾ãŸã€ã‚¿ã‚¹ã‚¯ã”ã¨ã«ä½¿ç”¨ã§ãる簡略化ã•ã‚ŒãŸæ§‹æ–‡ãŒã‚りã¾ã™ (``local_action``)。以下ã¯ã€ä¸Šè¨˜ã¨åŒã˜ Playbook ã§ã™ãŒã€127.0.0.1 ã«å§”è­²ã™ã‚‹ãŸã‚ã®çŸ­ç¸®æ§‹æ–‡ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:55 msgid "You can use a local action to call 'rsync' to recursively copy files to the managed servers::" msgstr "ローカルアクションを使用ã—ã¦ã€Œrsyncã€ã‚’呼ã³å‡ºã—ã€ç®¡ç†å¯¾è±¡ã®ã‚µãƒ¼ãƒãƒ¼ã«ãƒ•ァイルをå†å¸°çš„ã«ã‚³ãƒ”ーã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:64 msgid "Note that you must have passphrase-less SSH keys or an ssh-agent configured for this to work, otherwise rsync asks for a passphrase." msgstr "ã“ã‚ŒãŒæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã¯ã€ãƒ‘スフレーズãªã—ã® SSH éµã¾ãŸã¯ ssh-agent ãŒè¨­å®šã•れã¦ã„ãªã‘れã°ãªã‚‰ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãã†ã§ãªã‘れã°ã€rsync ã¯ãƒ‘ã‚¹ãƒ•ãƒ¬ãƒ¼ã‚ºã‚’è¦æ±‚ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:66 msgid "To specify more arguments, use the following syntax::" msgstr "引数をã•ã‚‰ã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®æ§‹æ–‡ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:81 msgid "The `ansible_host` variable and other connection variables, if present, reflects information about the host a task is delegated to, not the inventory_hostname." msgstr "`ansible_host` 変数ã¨ä»–ã®æŽ¥ç¶šå¤‰æ•°ãŒã‚ã‚‹å ´åˆã¯ã€inventory_hostname ã§ã¯ãªãã€ã‚¿ã‚¹ã‚¯ãŒå§”è­²ã•れるホストã«é–¢ã™ã‚‹æƒ…å ±ã‚’åæ˜ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:85 msgid "Although you can ``delegate_to`` a host that does not exist in inventory (by adding IP address, DNS name or whatever requirement the connection plugin has), doing so does not add the host to your inventory and might cause issues. Hosts delegated to in this way do not inherit variables from the \"all\" group', so variables like connection user and key are missing. If you must ``delegate_to`` a non-inventory host, use the :ref:`add host module `." msgstr "(IP アドレスã€DNS åã€ã¾ãŸã¯æŽ¥ç¶šãƒ—ラグインã®è¦ä»¶ã‚’追加ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šï¼‰ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å­˜åœ¨ã—ãªã„ホストを ``delegate_to`` ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ã“れを行ã†ã¨ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ãƒ›ã‚¹ãƒˆã‚’追加ã›ãšã€å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ã«å§”è­²ã•れãŸãƒ›ã‚¹ãƒˆã¯ã€Œã™ã¹ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å¤‰æ•°ã‚’継承ã—ãªã„ãŸã‚ã€æŽ¥ç¶šãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã‚­ãƒ¼ãªã©ã®å¤‰æ•°ãŒã‚りã¾ã›ã‚“。インベントリーホスト以外をã®ãƒ›ã‚¹ãƒˆã‚’ ``delegate_to`` ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€:ref:`add host module ` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:91 msgid "Delegation and parallel execution" msgstr "委譲ã¨ä¸¦åˆ—実行" #: ../../rst/user_guide/playbooks_delegation.rst:92 msgid "By default Ansible tasks are executed in parallel. Delegating a task does not change this and does not handle concurrency issues (multiple forks writing to the same file). Most commonly, users are affected by this when updating a single file on a single delegated to host for all hosts (using the ``copy``, ``template``, or ``lineinfile`` modules, for example). They will still operate in parallel forks (default 5) and overwrite each other." msgstr "デフォルトã§ã¯ã€Ansible タスクã¯ä¸¦è¡Œã—ã¦å®Ÿè¡Œã•れã¾ã™ã€‚タスクを委譲ã—ã¦ã‚‚ã“れã¯å¤‰æ›´ã•れãšã€åŒæ™‚実行ã®å•題(複数ã®ãƒ•ォークãŒåŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã込む)ã¯å‡¦ç†ã•れã¾ã›ã‚“。最も一般的ã«ã¯ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®ãƒ›ã‚¹ãƒˆã«å§”ä»»ã•れãŸå˜ä¸€ã®ãƒ•ァイルを更新ã™ã‚‹ã¨ãã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“れã®å½±éŸ¿ã‚’å—ã‘ã¾ã™ï¼ˆ``copy``ã€``template``〠ã¾ãŸã¯``lineinfile`` モジュールãªã©ï¼‰ã€‚ãれらã¯å¼•ãç¶šã並列フォーク(デフォルト㯠5)ã§å‹•作ã—ã€ç›¸äº’ã«ä¸Šæ›¸ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:95 msgid "This can be handled in several ways::" msgstr "ã“れã¯è¤‡æ•°ã®æ–¹æ³•ã§å‡¦ç†ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:102 msgid "By using an intermediate play with `serial: 1` or using `throttle: 1` at task level, for more detail see :ref:`playbooks_strategies`" msgstr "`serial: 1` ã§ä¸­é–“プレイを使用ã™ã‚‹ã‹ã€ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ `throttle: 1` を使用ã—ã¾ã™ã€‚詳細ã¯ã€:ref:`playbooks_strategies`ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_delegation.rst:107 msgid "Delegating facts" msgstr "ファクトã®å§”è­²" #: ../../rst/user_guide/playbooks_delegation.rst:109 msgid "Delegating Ansible tasks is like delegating tasks in the real world - your groceries belong to you, even if someone else delivers them to your home. Similarly, any facts gathered by a delegated task are assigned by default to the `inventory_hostname` (the current host), not to the host which produced the facts (the delegated to host). To assign gathered facts to the delegated host instead of the current host, set ``delegate_facts`` to ``true``::" msgstr "Ansible ã®ã‚¿ã‚¹ã‚¯ã‚’委譲ã™ã‚‹ã“ã¨ã¯ã€ç¾å®Ÿä¸–界ã§ã‚¿ã‚¹ã‚¯ã‚’委譲ã™ã‚‹ã“ã¨ã¨åŒã˜ã§ã™ã€‚ãŸã¨ãˆä»–ã®èª°ã‹ãŒã‚ãªãŸã®å®¶ã«é£Ÿæ–™å“を届ã‘ãŸã¨ã—ã¦ã‚‚ã€ã‚ãªãŸã®é£Ÿæ–™å“ã¯ã‚ãªãŸã®ã‚‚ã®ã§ã™ã€‚åŒæ§˜ã«ã€å§”è­²ã•れãŸã‚¿ã‚¹ã‚¯ã«ã‚ˆã£ã¦åŽé›†ã•れãŸãƒ•ァクトã¯ã€ãƒ‡ãƒ•ォルトã§ã¯ã€ãƒ•ァクトを生æˆã—ãŸãƒ›ã‚¹ãƒˆ (委譲ã•れãŸãƒ›ã‚¹ãƒˆ) ã§ã¯ãªãã€`inventory_hostname` (ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆ) ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚集ã‚ãŸãƒ•ァクトをç¾åœ¨ã®ãƒ›ã‚¹ãƒˆã§ã¯ãªã委譲ã•れãŸãƒ›ã‚¹ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‹ã«ã¯ã€``delegate_facts`` ã‚’ ``true`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:121 msgid "This task gathers facts for the machines in the dbservers group and assigns the facts to those machines, even though the play targets the app_servers group. This way you can lookup `hostvars['dbhost1']['ansible_default_ipv4']['address']` even though dbservers were not part of the play, or left out by using `--limit`." msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€ãƒ—レイ㌠app_servers グループを対象ã¨ã—ã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€dbservers グループã®ãƒžã‚·ãƒ³ã®ãƒ•ァクトをåŽé›†ã—ã€ãれらã®ãƒžã‚·ãƒ³ã«ãƒ•ァクトを割り当ã¦ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã—ã¦ã€ãŸã¨ãˆ dbservers ãŒãƒ—レイã®ä¸€éƒ¨ã§ãªãã¦ã‚‚ã€ã‚ã‚‹ã„㯠`--limit` を使用ã—ã¦é™¤å¤–ã•れã¦ã„ã¦ã‚‚ã€`hostvars['dbhost1']['ansible_default_ipv4']['address']` を調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:126 msgid "Local playbooks" msgstr "ローカル㮠Playbook" #: ../../rst/user_guide/playbooks_delegation.rst:128 msgid "It may be useful to use a playbook locally on a remote host, rather than by connecting over SSH. This can be useful for assuring the configuration of a system by putting a playbook in a crontab. This may also be used to run a playbook inside an OS installer, such as an Anaconda kickstart." msgstr "SSH ã§æŽ¥ç¶šã™ã‚‹ã®ã§ã¯ãªãã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆä¸Šã§ãƒ­ãƒ¼ã‚«ãƒ«ã« Playbook を使用ã™ã‚‹ã“ã¨ãŒä¾¿åˆ©ãªå ´åˆãŒã‚りã¾ã™ã€‚ã“れã¯ã€crontab ã« Playbook ã‚’ç½®ãã“ã¨ã§ã€ã‚·ã‚¹ãƒ†ãƒ ã®æ§‹æˆã‚’ä¿è¨¼ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã¾ãŸã€Anaconda ã®ã‚­ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆãªã©ã€OS インストーラー内㧠Playbook を実行ã™ã‚‹å ´åˆã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:131 msgid "To run an entire playbook locally, just set the ``hosts:`` line to ``hosts: 127.0.0.1`` and then run the playbook like so::" msgstr "Playbook 全体をローカルã§å®Ÿè¡Œã™ã‚‹ã«ã¯ã€``hosts:`` 行を ``hosts: 127.0.0.1`` ã«è¨­å®šã—ã€æ¬¡ã®ã‚ˆã†ã« Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:135 msgid "Alternatively, a local connection can be used in a single playbook play, even if other plays in the playbook use the default remote connection type::" msgstr "ã¾ãŸã€Playbook 内ã®ä»–ã®ãƒ—レイãŒãƒ‡ãƒ•ォルトã®ãƒªãƒ¢ãƒ¼ãƒˆæŽ¥ç¶šã‚¿ã‚¤ãƒ—を使用ã—ã¦ã„ã¦ã‚‚ã€1 ã¤ã® Playbook ã®ãƒ—レイã§ãƒ­ãƒ¼ã‚«ãƒ«æŽ¥ç¶šã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:143 msgid "If you set the connection to local and there is no ansible_python_interpreter set, modules will run under /usr/bin/python and not under {{ ansible_playbook_python }}. Be sure to set ansible_python_interpreter: \"{{ ansible_playbook_python }}\" in host_vars/localhost.yml, for example. You can avoid this issue by using ``local_action`` or ``delegate_to: localhost`` instead." msgstr "接続先をローカルã«è¨­å®šã—ã€ansible_python_interpreter ãŒè¨­å®šã•れã¦ã„ãªã„ã¨ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€{{ ansible_playbook_python }} ã§ã¯ãªã /usr/bin/python ã§å®Ÿè¡Œã—ã¾ã™ã€‚ansible_python_interpreter ã‚’å¿…ãšè¨­å®šã—ã¦ãã ã•ã„ (host_vars/localhost.yml ã®ã€Œ{{ ansible_playbook_python }}ã€ãªã©)。代ã‚り㫠``local_action`` ã¾ãŸã¯ ``delegate_to: localhost`` を使用ã™ã‚‹ã“ã¨ã§ã€ã“ã®å•題を回é¿ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_delegation.rst:152 msgid "More ways to control how and where Ansible executes" msgstr "Ansible ã®å®Ÿè¡Œæ–¹æ³•ãŠã‚ˆã³å ´æ‰€ã‚’制御ã™ã‚‹æ–¹æ³•" #: ../../rst/user_guide/playbooks_delegation.rst:153 msgid "`Ansible Examples on GitHub `_" msgstr "`Ansible Examples on GitHub `_" #: ../../rst/user_guide/playbooks_delegation.rst:154 msgid "Many examples of full-stack deployments" msgstr "フルスタックデプロイメントã®ä¾‹ãŒå¤šæ•°ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:4 msgid "Setting the remote environment" msgstr "リモート環境ã®è¨­å®š" #: ../../rst/user_guide/playbooks_environment.rst:8 msgid "You can use the ``environment`` keyword at the play, block, or task level to set an environment variable for an action on a remote host. With this keyword, you can enable using a proxy for a task that does http requests, set the required environment variables for language-specific version managers, and more." msgstr "プレイã€ãƒ–ロックã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã®ãƒ¬ãƒ™ãƒ«ã§ ``environment`` キーワードを使用ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆä¸Šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ã¨ã€http リクエストを行ã†ã‚¿ã‚¹ã‚¯ã§ãƒ—ロキシーã®ä½¿ç”¨ã‚’有効ã«ã—ãŸã‚Šã€è¨€èªžå›ºæœ‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«å¿…è¦ãªç’°å¢ƒå¤‰æ•°ã‚’設定ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:10 msgid "When you set a value with ``environment:`` at the play or block level, it is available only to tasks within the play or block that are executed by the same user. The ``environment:`` keyword does not affect Ansible itself, Ansible configuration settings, the environment for other users, or the execution of other plugins like lookups and filters. Variables set with ``environment:`` do not automatically become Ansible facts, even when you set them at the play level. You must include an explicit ``gather_facts`` task in your playbook and set the ``environment`` keyword on that task to turn these values into Ansible facts." msgstr "プレイã¾ãŸã¯ãƒ–ロックレベル㧠``environment:`` を使用ã—ã¦å€¤ã‚’設定ã™ã‚‹ã¨ã€åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦å®Ÿè¡Œã•れるプレイã¾ãŸã¯ãƒ–ロック内ã®ã‚¿ã‚¹ã‚¯ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚``environment:`` キーワードã¯ã€Ansible 自体ã€Ansible ã®æ§‹æˆè¨­å®šã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç’°å¢ƒã€ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—やフィルターãªã©ã®ä»–ã®ãƒ—ラグインã®å®Ÿè¡Œã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。``environment:`` ã§è¨­å®šã—ãŸå¤‰æ•°ã¯ã€ãƒ—レイレベルã§è¨­å®šã—ã¦ã‚‚ã€è‡ªå‹•的㫠Ansible ã®ãƒ•ァクトã«ã¯ãªã‚Šã¾ã›ã‚“。ã“れらã®å€¤ã‚’ Ansible ã®ãƒ•ァクトã«ã™ã‚‹ã«ã¯ã€Playbook ã«æ˜Žç¤ºçš„㪠``gather_facts`` タスクをå«ã‚ã€ãã®ã‚¿ã‚¹ã‚¯ã« ``environment`` キーワードを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:16 msgid "Setting the remote environment in a task" msgstr "タスクã¸ã®ãƒªãƒ¢ãƒ¼ãƒˆç’°å¢ƒã®è¨­å®š" #: ../../rst/user_guide/playbooks_environment.rst:18 msgid "You can set the environment directly at the task level::" msgstr "タスクレベルã§ç’°å¢ƒã‚’直接指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:32 msgid "You can re-use environment settings by defining them as variables in your play and accessing them in a task as you would access any stored Ansible variable::" msgstr "環境変数をプレイã®å¤‰æ•°ã¨ã—ã¦å®šç¾©ã—ã€ä¿å­˜ã—㟠Ansible 変数ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ãã«ã‚¿ã‚¹ã‚¯ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã“ã¨ã§ã€ç’°å¢ƒå¤‰æ•°ã‚’å†åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:50 msgid "You can store environment settings for re-use in multiple playbooks by defining them in a group_vars file::" msgstr "複数㮠Playbook ã«å†ä½¿ç”¨ã™ã‚‹ç’°å¢ƒè¨­å®šã¯ã€group_vars ファイルã«å®šç¾©ã™ã‚‹ã“ã¨ã§ä¿å­˜ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:61 msgid "You can set the remote environment at the play level::" msgstr "プレイレベルã§ãƒªãƒ¢ãƒ¼ãƒˆç’°å¢ƒã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:72 msgid "These examples show proxy settings, but you can provide any number of settings this way." msgstr "ã“れらã®ä¾‹ã§ã¯ãƒ—ロキシー設定を示ã—ã¦ã„ã¾ã™ãŒã€ã“ã®è¨­å®šã‚’ã„ãã¤ã§ã‚‚æä¾›ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:75 msgid "Working with language-specific version managers" msgstr "言語固有ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_environment.rst:77 msgid "Some language-specific version managers (such as rbenv and nvm) require you to set environment variables while these tools are in use. When using these tools manually, you usually source some environment variables from a script or from lines added to your shell configuration file. In Ansible, you can do this with the environment keyword at the play level::" msgstr "言語固有ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ (rbenv ã‚„ nvmãªã©) ã®ä¸­ã«ã¯ã€ã“れらã®ãƒ„ールを使用ã™ã‚‹éš›ã«ç’°å¢ƒå¤‰æ•°ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ„ールを手動ã§ä½¿ç”¨ã™ã‚‹å ´åˆã€é€šå¸¸ã¯ã‚¹ã‚¯ãƒªãƒ—トやシェル構æˆãƒ•ァイルã«è¿½åŠ ã—ãŸè¡Œã‹ã‚‰ç’°å¢ƒå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚Ansible ã§ã¯ã€ãƒ—レイレベルã§ç’°å¢ƒã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã“れを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:114 msgid "The example above uses ``ansible_env`` as part of the PATH. Basing variables on ``ansible_env`` is risky. Ansible populates ``ansible_env`` values by gathering facts, so the value of the variables depends on the remote_user or become_user Ansible used when gathering those facts. If you change remote_user/become_user the values in ``ansible-env`` may not be the ones you expect." msgstr "上ã®ä¾‹ã§ã¯ã€``ansible_env`` ã‚’ PATH ã®ä¸€éƒ¨ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã„ã¾ã™ã€‚変数を ``ansible_env`` ã«åŸºã¥ã‹ã›ã‚‹ã®ã¯ãƒªã‚¹ã‚¯ãŒã‚りã¾ã™ã€‚Ansible ã¯ãƒ•ァクトをåŽé›†ã—㦠``ansible_env`` ã®å€¤ã‚’生æˆã™ã‚‹ãŸã‚ã€å¤‰æ•°ã®å€¤ã¯ãƒ•ァクトã®åŽé›†æ™‚ã« Ansible ãŒä½¿ç”¨ã—㟠remote_user ã‚„ become_user ã«ä¾å­˜ã—ã¾ã™ã€‚remote_user/become_user を変更ã—ãŸå ´åˆã€``ansible-env`` ã®å€¤ã¯æœŸå¾…ã—ãŸã‚‚ã®ã¨ã¯ç•°ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_environment.rst:117 msgid "Environment variables are normally passed in clear text (shell plugin dependent) so they are not a recommended way of passing secrets to the module being executed." msgstr "環境変数ã¯ã€é€šå¸¸ã€(シェルプラグインã«ä¾å­˜ã™ã‚‹) ã‚¯ãƒªã‚¢ãƒ†ã‚­ã‚¹ãƒˆã«æ¸¡ã•れã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€å®Ÿè¡Œã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’æ¸¡ã™æ–¹æ³•ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_environment.rst:119 msgid "You can also specify the environment at the task level::" msgstr "タスクレベルã§ç’°å¢ƒã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:5 msgid "Error handling in playbooks" msgstr "Playbook ã§ã®ã‚¨ãƒ©ãƒ¼å‡¦ç†" #: ../../rst/user_guide/playbooks_error_handling.rst:7 msgid "When Ansible receives a non-zero return code from a command or a failure from a module, by default it stops executing on that host and continues on other hosts. However, in some circumstances you may want different behavior. Sometimes a non-zero return code indicates success. Sometimes you want a failure on one host to stop execution on all hosts. Ansible provides tools and settings to handle these situations and help you get the behavior, output, and reporting you want." msgstr "Ansible ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ã‹ã‚‰ã‚¼ãƒ­ä»¥å¤–ã®æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã‚’å—ã‘å–ã£ãŸå ´åˆã‚„ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰å¤±æ•—ã‚’å—ã‘å–ã£ãŸå ´åˆã€ãƒ‡ãƒ•ォルトã§ã¯ã€ãã®ãƒ›ã‚¹ãƒˆã§ã®å®Ÿè¡Œã‚’åœæ­¢ã—ã€ä»–ã®ãƒ›ã‚¹ãƒˆã§ç¶™ç¶šã—ã¾ã™ã€‚ã—ã‹ã—ã€çжæ³ã«ã‚ˆã£ã¦ã¯ç•°ãªã‚‹å‹•作をã•ã›ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã‚¼ãƒ­ä»¥å¤–ã®æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ãŒæˆåŠŸã‚’ç¤ºã™å ´åˆã‚‚ã‚りã¾ã™ã€‚ã‚るホストã§å¤±æ•—ã—ãŸã‚‰ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã‚’åœæ­¢ã•ã›ãŸã„å ´åˆã‚‚ã‚りã¾ã™ã€‚Ansible ã«ã¯ã€ã“ã®ã‚ˆã†ãªçжæ³ã«å¯¾å¿œã™ã‚‹ãŸã‚ã®ãƒ„ールや設定ãŒç”¨æ„ã•れã¦ãŠã‚Šã€å¿…è¦ãªå‹•作ã€å‡ºåŠ›ã€ãƒ¬ãƒãƒ¼ãƒˆã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:15 msgid "Ignoring failed commands" msgstr "失敗ã—ãŸã‚³ãƒžãƒ³ãƒ‰ã®ç„¡è¦–" #: ../../rst/user_guide/playbooks_error_handling.rst:17 msgid "By default Ansible stops executing tasks on a host when a task fails on that host. You can use ``ignore_errors`` to continue on in spite of the failure::" msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€ãƒ›ã‚¹ãƒˆã§ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã§ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã‚’åœæ­¢ã—ã¾ã™ã€‚``ignore_errors`` を使用ã™ã‚‹ã¨ã€éšœå®³ãŒç™ºç”Ÿã—ã¦ã‚‚続行ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:23 msgid "The ``ignore_errors`` directive only works when the task is able to run and returns a value of 'failed'. It does not make Ansible ignore undefined variable errors, connection failures, execution issues (for example, missing packages), or syntax errors." msgstr "``ignore_errors`` ディレクティブã¯ã€ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œå¯èƒ½ã§ã€ã€Œfailedã€ã¨ã„ã†å€¤ã‚’è¿”ã™å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚未定義ã®å¤‰æ•°ã®ã‚¨ãƒ©ãƒ¼ã€æŽ¥ç¶šã®å¤±æ•—ã€å®Ÿè¡Œæ™‚ã®å•題 (ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æ¬ è½ãªã©)ã€æ§‹æ–‡ã‚¨ãƒ©ãƒ¼ãªã©ã‚’ Ansible ã«ç„¡è¦–ã•ã›ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_error_handling.rst:26 msgid "Ignoring unreachable host errors" msgstr "到é”ä¸èƒ½ãªãƒ›ã‚¹ãƒˆã‚¨ãƒ©ãƒ¼ã‚’無視" #: ../../rst/user_guide/playbooks_error_handling.rst:30 msgid "You can ignore a task failure due to the host instance being 'UNREACHABLE' with the ``ignore_unreachable`` keyword. Ansible ignores the task errors, but continues to execute future tasks against the unreachable host. For example, at the task level::" msgstr "``ignore_unreachable`` キーワードã§ã€ãƒ›ã‚¹ãƒˆã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã€ŒUNREACHABLEã€ã§ã‚ã‚‹ã“ã¨ã«ã‚ˆã‚‹ã‚¿ã‚¹ã‚¯ã®å¤±æ•—を無視ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã‚¿ã‚¹ã‚¯ã®ã‚¨ãƒ©ãƒ¼ã‚’無視ã—ã¾ã™ãŒã€åˆ°é”ä¸å¯èƒ½ãªãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ä»Šå¾Œã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ç¶šã‘ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:39 msgid "And at the playbook level::" msgstr "ã¾ãŸã€Playbook レベルã§ã¯ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:54 msgid "Resetting unreachable hosts" msgstr "到é”ã§ããªã„ホストã®ãƒªã‚»ãƒƒãƒˆ" #: ../../rst/user_guide/playbooks_error_handling.rst:56 msgid "If Ansible cannot connect to a host, it marks that host as 'UNREACHABLE' and removes it from the list of active hosts for the run. You can use `meta: clear_host_errors` to reactivate all hosts, so subsequent tasks can try to reach them again." msgstr "Ansible ã¯ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ããªã„å ´åˆã€ãã®ãƒ›ã‚¹ãƒˆã‚’「UNREACHABLEã€ã¨ãƒžãƒ¼ã‚¯ã—ã€å®Ÿè¡Œæ™‚ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ›ã‚¹ãƒˆã®ãƒªã‚¹ãƒˆã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚`meta: clear_host_errors` を使用ã—ã¦ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’冿œ‰åŠ¹åŒ–ã™ã‚‹ã“ã¨ã§ã€å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ãŒå†ã³ãƒ›ã‚¹ãƒˆã«åˆ°é”ã—よã†ã¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:62 msgid "Handlers and failure" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŠã‚ˆã³å¤±æ•—" #: ../../rst/user_guide/playbooks_error_handling.rst:64 msgid "Ansible runs :ref:`handlers ` at the end of each play. If a task notifies a handler but another task fails later in the play, by default the handler does *not* run on that host, which may leave the host in an unexpected state. For example, a task could update a configuration file and notify a handler to restart some service. If a task later in the same play fails, the configuration file might be changed but the service will not be restarted." msgstr "Ansible ã¯ã€å„ãƒ—ãƒ¬ã‚¤ã®æœ€å¾Œã« :ref:`handlers ` を実行ã—ã¾ã™ã€‚タスクãŒãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«é€šçŸ¥ã—ã¦ã‚‚ã€ãƒ—レイã®å¾ŒåŠã§åˆ¥ã®ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã¨ã€ãƒ‡ãƒ•ォルトã§ã¯ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ãã®ãƒ›ã‚¹ãƒˆä¸Šã§ **実行ã•れãš**ã€ãƒ›ã‚¹ãƒˆãŒäºˆæœŸã›ã¬çŠ¶æ…‹ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ãŒè¨­å®šãƒ•ァイルを更新ã—ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«ã‚µãƒ¼ãƒ“スã®å†èµ·å‹•を通知ã—ãŸã¨ã—ã¾ã™ã€‚åŒã˜ãƒ—レイã®å¾ŒåŠã§ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ãŸå ´åˆã€è¨­å®šãƒ•ァイルã¯å¤‰æ›´ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ã‚µãƒ¼ãƒ“スã¯å†èµ·å‹•ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_error_handling.rst:71 msgid "You can change this behavior with the ``--force-handlers`` command-line option, by including ``force_handlers: True`` in a play, or by adding ``force_handlers = True`` to ansible.cfg. When handlers are forced, Ansible will run all notified handlers on all hosts, even hosts with failed tasks. (Note that certain errors could still prevent the handler from running, such as a host becoming unreachable.)" msgstr "ã“ã®å‹•作ã¯ã€``force_handlers: True`` をプレイã«å«ã‚ã‚‹ã‹ã€``force_handlers = True`` ã‚’ ansible.cfg ã«è¿½åŠ ã—ã¦ã€``--force-handlers`` コマンドラインオプションã§å¤‰æ›´ã§ãã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒå¼·åˆ¶çš„ã«å®Ÿè¡Œã™ã‚‹ã¨ã€Ansible ã¯é€šçŸ¥ã•れãŸã™ã¹ã¦ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’ã€ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ãŸãƒ›ã‚¹ãƒˆã‚‚å«ã‚ã¦ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ (ホストãŒåˆ°é”ä¸èƒ½ã«ãªã‚‹ãªã©ã€ç‰¹å®šã®ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã£ã¦ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å®Ÿè¡ŒãŒå¦¨ã’られるå¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„)。" #: ../../rst/user_guide/playbooks_error_handling.rst:80 msgid "Defining failure" msgstr "障害ã®å®šç¾©" #: ../../rst/user_guide/playbooks_error_handling.rst:82 msgid "Ansible lets you define what \"failure\" means in each task using the ``failed_when`` conditional. As with all conditionals in Ansible, lists of multiple ``failed_when`` conditions are joined with an implicit ``and``, meaning the task only fails when *all* conditions are met. If you want to trigger a failure when any of the conditions is met, you must define the conditions in a string with an explicit ``or`` operator." msgstr "Ansible ã§ã¯ã€``failed_when`` æ¡ä»¶åˆ†å²ã‚’使用ã—ã¦ã€å„タスクã§ã€Œå¤±æ•—ã€ã®æ„味を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã®ã™ã¹ã¦ã®æ¡ä»¶åˆ†å²ã¨åŒæ§˜ã«ã€è¤‡æ•°ã® ``failed_when`` æ¡ä»¶ã®ãƒªã‚¹ãƒˆã¯æš—黙㮠``and`` ã§çµåˆã•れã¦ãŠã‚Šã€ã“れ㯠*ã™ã¹ã¦ã®* æ¡ä»¶ãŒæº€ãŸã•れãŸã¨ãã«ã®ã¿ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã„ãšã‚Œã‹ã®æ¡ä»¶ãŒæº€ãŸã•れãŸã¨ãã«å¤±æ•—をトリガーã—ãŸã„å ´åˆã¯ã€æ˜Žç¤ºçš„㪠``or`` 演算å­ã‚’使用ã—ã¦æ–‡å­—åˆ—ã§æ¡ä»¶ã‚’定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:84 msgid "You may check for failure by searching for a word or phrase in the output of a command::" msgstr "コマンドã®å‡ºåŠ›ã§å˜èªžã¾ãŸã¯ãƒ•レーズを検索ã—ã¦ã€éšœå®³ã®æœ‰ç„¡ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:91 msgid "or based on the return code::" msgstr "ã¾ãŸã¯ã€æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã«åŸºã„ã¦ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:98 msgid "You can also combine multiple conditions for failure. This task will fail if both conditions are true::" msgstr "è¤‡æ•°ã®æ¡ä»¶ã‚’組ã¿åˆã‚ã›ã¦å¤±æ•—ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€ä¸¡æ–¹ã®æ¡ä»¶ãŒçœŸã§ã‚れã°å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:107 msgid "If you want the task to fail when only one condition is satisfied, change the ``failed_when`` definition to::" msgstr "æ¡ä»¶ãŒæº€ãŸã•れãŸã¨ãã«ã®ã¿ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹å ´åˆã¯ã€``failed_when`` 定義を以下ã®ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:111 msgid "If you have too many conditions to fit neatly into one line, you can split it into a multi-line yaml value with ``>``::" msgstr "æ¡ä»¶ãŒå¤šã™ãŽã¦ 1 行ã«ã†ã¾ãåŽã¾ã‚‰ãªã„å ´åˆã¯ã€``>`` を使用ã—ã¦ã€ã“れを複数行㮠yaml 値ã«åˆ†å‰²ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:124 msgid "Defining \"changed\"" msgstr "「変更済ã¿ã€ã®å®šç¾©" #: ../../rst/user_guide/playbooks_error_handling.rst:126 msgid "Ansible lets you define when a particular task has \"changed\" a remote node using the ``changed_when`` conditional. This lets you determine, based on return codes or output, whether a change should be reported in Ansible statistics and whether a handler should be triggered or not. As with all conditionals in Ansible, lists of multiple ``changed_when`` conditions are joined with an implicit ``and``, meaning the task only reports a change when *all* conditions are met. If you want to report a change when any of the conditions is met, you must define the conditions in a string with an explicit ``or`` operator. For example::" msgstr "Ansible ã§ã¯ã€``changed_when`` æ¡ä»¶å¼ã‚’使用ã—ã¦ã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã‚’「変更ã€ã—ãŸã¨ãを定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã‚„出力ã«åŸºã¥ã„ã¦ã€å¤‰æ›´ã‚’ Ansible ã®çµ±è¨ˆã§å ±å‘Šã™ã‚‹ã‹ã©ã†ã‹ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’トリガーã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã®ã™ã¹ã¦ã®æ¡ä»¶å¼ã¨åŒæ§˜ã«ã€è¤‡æ•°ã® ``changed_when`` æ¡ä»¶ã®ãƒªã‚¹ãƒˆã¯æš—黙㮠``and`` ã§çµåˆã•れã¦ãŠã‚Šã€ã‚¿ã‚¹ã‚¯ã¯ *ã™ã¹ã¦ã®* æ¡ä»¶ãŒæº€ãŸã•れãŸã¨ãã«ã®ã¿å¤‰æ›´ã‚’報告ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã„ãšã‚Œã‹ã®æ¡ä»¶ãŒæº€ãŸã•れãŸã¨ãã«å¤‰æ›´ã‚’報告ã—ãŸã„å ´åˆã¯ã€æ˜Žç¤ºçš„㪠``or`` 演算å­ã‚’使用ã—ã¦æ–‡å­—åˆ—ã§æ¡ä»¶ã‚’定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:139 msgid "You can also combine multiple conditions to override \"changed\" result::" msgstr "è¤‡æ•°ã®æ¡ä»¶ã‚’組ã¿åˆã‚ã›ã¦ã€Œå¤‰æ›´ã€ã®çµæžœã‚’上書ãã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:149 msgid "See :ref:`controlling_what_defines_failure` for more conditional syntax examples." msgstr "ãã®ä»–ã®æ¡ä»¶ä»˜ã構文例ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`controlling_what_defines_failure`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_error_handling.rst:152 msgid "Ensuring success for command and shell" msgstr "コマンドã¨ã‚·ã‚§ãƒ«ã®æˆåŠŸã®ç¢ºèª" #: ../../rst/user_guide/playbooks_error_handling.rst:154 msgid "The :ref:`command ` and :ref:`shell ` modules care about return codes, so if you have a command whose successful exit code is not zero, you can do this::" msgstr ":ref:`command ` モジュールãŠã‚ˆã³ :ref:`shell ` ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æˆ»ã‚Šã‚³ãƒ¼ãƒ‰ã‚’処ç†ã™ã‚‹ãŸã‚ã€æ­£å¸¸ãªçµ‚了コードãŒã‚¼ãƒ­ã§ã¯ãªã„コマンドãŒã‚ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:162 msgid "Aborting a play on all hosts" msgstr "ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§ãƒ—レイを中止" #: ../../rst/user_guide/playbooks_error_handling.rst:164 msgid "Sometimes you want a failure on a single host, or failures on a certain percentage of hosts, to abort the entire play on all hosts. You can stop play execution after the first failure happens with ``any_errors_fatal``. For finer-grained control, you can use ``max_fail_percentage`` to abort the run after a given percentage of hosts has failed." msgstr "時ã«ã¯ã€1 ã¤ã®ãƒ›ã‚¹ãƒˆã§ã®å¤±æ•—ã‚„ã€ã‚る割åˆã®ãƒ›ã‚¹ãƒˆã§ã®å¤±æ•—ã«ã‚ˆã‚Šã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§ã®ãƒ—レイ全体を中止ã•ã›ãŸã„ã“ã¨ãŒã‚りã¾ã™ã€‚``any_errors_fatal`` を使用ã™ã‚‹ã¨ã€æœ€åˆã®å¤±æ•—ãŒç™ºç”Ÿã—ãŸå¾Œã«ãƒ—レイã®å®Ÿè¡Œã‚’åœæ­¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚より細ã‹ã制御ã™ã‚‹ã«ã¯ã€``max_fail_percentage`` を使用ã—ã¦ã€ç‰¹å®šã®å‰²åˆã®ãƒ›ã‚¹ãƒˆã§å¤±æ•—ã—ãŸå¾Œã«å®Ÿè¡Œã‚’中止ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:167 msgid "Aborting on the first error: any_errors_fatal" msgstr "最åˆã®ã‚¨ãƒ©ãƒ¼ã§å¼·åˆ¶çµ‚了: any_errors_fatal" #: ../../rst/user_guide/playbooks_error_handling.rst:169 msgid "If you set ``any_errors_fatal`` and a task returns an error, Ansible finishes the fatal task on all hosts in the current batch, then stops executing the play on all hosts. Subsequent tasks and plays are not executed. You can recover from fatal errors by adding a :ref:`rescue section ` to the block. You can set ``any_errors_fatal`` at the play or block level::" msgstr "``any_errors_fatal`` を設定ã—ã€ã‚¿ã‚¹ã‚¯ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ãŸå ´åˆã€Ansible ã¯ç¾åœ¨ã®ãƒãƒƒãƒå†…ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§è‡´å‘½çš„ãªã‚¿ã‚¹ã‚¯ã‚’終了ã—ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§ãƒ—レイã®å®Ÿè¡Œã‚’åœæ­¢ã—ã¾ã™ã€‚後続ã®ã‚¿ã‚¹ã‚¯ã‚„プレイã¯å®Ÿè¡Œã•れã¾ã›ã‚“。致命的ãªã‚¨ãƒ©ãƒ¼ã‹ã‚‰å›žå¾©ã™ã‚‹ã«ã¯ã€ãƒ–ロック㫠:ref:`rescue section ` を追加ã—ã¾ã™ã€‚``any_errors_fatal`` ã¯ã€ãƒ—レイã¾ãŸã¯ãƒ–ロックレベルã§è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:182 #, python-format msgid "You can use this feature when all tasks must be 100% successful to continue playbook execution. For example, if you run a service on machines in multiple data centers with load balancers to pass traffic from users to the service, you want all load balancers to be disabled before you stop the service for maintenance. To ensure that any failure in the task that disables the load balancers will stop all other tasks::" msgstr "ã“ã®æ©Ÿèƒ½ã¯ã€Playbook ã®å®Ÿè¡Œã‚’継続ã™ã‚‹ãŸã‚ã«ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒ 100ï¼… æˆåŠŸã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ä½¿ç”¨ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€è¤‡æ•°ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã«ã‚るマシンã§ã‚µãƒ¼ãƒ“スを実行ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’ã‚µãƒ¼ãƒ“ã‚¹ã«æ¸¡ã™ãŸã‚ã«ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã®ãŸã‚ã«ã‚µãƒ¼ãƒ“ã‚¹ã‚’åœæ­¢ã™ã‚‹å‰ã«ã€ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’無効ã«ã—ã¾ã™ã€‚ロードãƒãƒ©ãƒ³ã‚µãƒ¼ã‚’無効ã«ã™ã‚‹ã‚¿ã‚¹ã‚¯ã«éšœå®³ãŒç™ºç”Ÿã—ã¦ã‚‚ã€ä»–ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’åœæ­¢ã•ã›ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:207 msgid "In this example Ansible starts the software upgrade on the front ends only if all of the load balancers are successfully disabled." msgstr "ã“ã®ä¾‹ã§ã¯ã€ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ãŒæ­£å¸¸ã«ç„¡åйã«ãªã£ã¦ã„ã‚‹å ´åˆã«ã®ã¿ã€Ansible ãŒã€ãƒ•ロントエンドã§ã‚½ãƒ•トウェアã®ã‚¢ãƒƒãƒ—グレードを開始ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:212 msgid "Setting a maximum failure percentage" msgstr "最大失敗率ã®è¨­å®š" #: ../../rst/user_guide/playbooks_error_handling.rst:214 msgid "By default, Ansible continues to execute tasks as long as there are hosts that have not yet failed. In some situations, such as when executing a rolling update, you may want to abort the play when a certain threshold of failures has been reached. To achieve this, you can set a maximum failure percentage on a play::" msgstr "デフォルトã§ã¯ã€Ansible ã¯ã¾ã å¤±æ•—ã—ã¦ã„ãªã„ホストãŒã‚ã‚‹é™ã‚Šã€ã‚¿ã‚¹ã‚¯ã‚’実行ã—ç¶šã‘ã¾ã™ã€‚ローリングアップデートを実行ã™ã‚‹å ´åˆãªã©ã€ã‚る一定ã®å¤±æ•—率ã«é”ã—ãŸã¨ãã«ãƒ—レイを中断ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れをå¯èƒ½ã«ã™ã‚‹ã«ã¯ã€ãƒ—ãƒ¬ã‚¤ã®æœ€å¤§å¤±æ•—率を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:221 msgid "The ``max_fail_percentage`` setting applies to each batch when you use it with :ref:`serial `. In the example above, if more than 3 of the 10 servers in the first (or any) batch of servers failed, the rest of the play would be aborted." msgstr "``max_fail_percentage`` ã®è¨­å®šã¯ã€:ref:`serial ` ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã¨ã€å„ãƒãƒƒãƒã«é©ç”¨ã•れã¾ã™ã€‚上ã®ä¾‹ã§ã¯ã€æœ€åˆã® (ã‚ã‚‹ã„ã¯ä»»æ„ã®) ãƒãƒƒãƒã«å«ã¾ã‚Œã‚‹ 10 å°ã®ã‚µãƒ¼ãƒãƒ¼ã®ã†ã¡ 3 å°ä»¥ä¸ŠãŒæ•…éšœã—ãŸå ´åˆã€æ®‹ã‚Šã®ãƒ—レイã¯ä¸­æ­¢ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:225 msgid "The percentage set must be exceeded, not equaled. For example, if serial were set to 4 and you wanted the task to abort the play when 2 of the systems failed, set the max_fail_percentage at 49 rather than 50." msgstr "設定ã•れãŸãƒ‘ーセンテージã¯ã€åŒç­‰ã§ã¯ãªãã€è¶…ãˆãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãŸã¨ãˆã°ã€serial㌠4 ã«è¨­å®šã•れã¦ã„ã¦ã€2 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ãŒæ•…éšœã—ãŸã¨ãã«ãƒ—レイを中止ã™ã‚‹ã‚¿ã‚¹ã‚¯ã«ã—ãŸã„å ´åˆã¯ã€max_fail_percentage ã‚’ 50 ã§ã¯ãªã 49 ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_error_handling.rst:228 msgid "Controlling errors in blocks" msgstr "ブロックã®ã‚¨ãƒ©ãƒ¼ã‚’制御" #: ../../rst/user_guide/playbooks_error_handling.rst:230 msgid "You can also use blocks to define responses to task errors. This approach is similar to exception handling in many programming languages. See :ref:`block_error_handling` for details and examples." msgstr "ブロックを使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚¨ãƒ©ãƒ¼ã¸ã®å¿œç­”を定義ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯ã€å¤šãã®ãƒ—ログラミング言語ã§ã®ä¾‹å¤–処ç†ã«ä¼¼ã¦ã„ã¾ã™ã€‚詳細ã¨ä¾‹ã¯ã€ã€Œ:ref:`block_error_handling`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_error_handling.rst:238 #: ../../rst/user_guide/playbooks_filters.rst:1839 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:729 #: ../../rst/user_guide/playbooks_lookups.rst:28 #: ../../rst/user_guide/playbooks_loops.rst:440 #: ../../rst/user_guide/playbooks_prompts.rst:109 #: ../../rst/user_guide/playbooks_reuse.rst:210 #: ../../rst/user_guide/playbooks_reuse_includes.rst:21 #: ../../rst/user_guide/playbooks_reuse_roles.rst:610 #: ../../rst/user_guide/playbooks_templating.rst:48 #: ../../rst/user_guide/playbooks_tests.rst:390 #: ../../rst/user_guide/playbooks_variables.rst:451 msgid ":ref:`playbooks_conditionals`" msgstr ":ref:`playbooks_conditionals`" #: ../../rst/user_guide/playbooks_error_handling.rst:239 #: ../../rst/user_guide/playbooks_filters.rst:1840 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:730 #: ../../rst/user_guide/playbooks_lookups.rst:29 #: ../../rst/user_guide/playbooks_loops.rst:441 #: ../../rst/user_guide/playbooks_prompts.rst:110 #: ../../rst/user_guide/playbooks_templating.rst:49 #: ../../rst/user_guide/playbooks_tests.rst:391 #: ../../rst/user_guide/playbooks_variables.rst:452 msgid "Conditional statements in playbooks" msgstr "Playbook ã®æ¡ä»¶åˆ†å²æ–‡" #: ../../rst/user_guide/playbooks_filters.rst:5 msgid "Using filters to manipulate data" msgstr "フィルターを使用ã—ãŸãƒ‡ãƒ¼ã‚¿ã®æ“作" #: ../../rst/user_guide/playbooks_filters.rst:7 msgid "Filters let you transform JSON data into YAML data, split a URL to extract the hostname, get the SHA1 hash of a string, add or multiply integers, and much more. You can use the Ansible-specific filters documented here to manipulate your data, or use any of the standard filters shipped with Jinja2 - see the list of :ref:`built-in filters ` in the official Jinja2 template documentation. You can also use :ref:`Python methods ` to transform data. You can :ref:`create custom Ansible filters as plugins `, though we generally welcome new filters into the ansible-core repo so everyone can use them." msgstr "フィルターを使用ã™ã‚‹ã¨ã€JSON データを YAML データã«å¤‰æ›ã—ãŸã‚Šã€URL を分割ã—ã¦ãƒ›ã‚¹ãƒˆåを抽出ã—ãŸã‚Šã€æ–‡å­—列㮠SHA1 ãƒãƒƒã‚·ãƒ¥ã‚’å–å¾—ã—ãŸã‚Šã€æ•´æ•°ã‚’加算ã¾ãŸã¯ä¹—ç®—ã—ãŸã‚Šãªã©ã€ã•ã¾ã–ã¾ãªã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã“ã§ç´¹ä»‹ã—ã¦ã„ã‚‹ Ansible 固有ã®ãƒ•ィルターを使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã—ã€Jinja2 ã«åŒæ¢±ã•れã¦ã„る標準的ãªãƒ•ィルターを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚Jinja2 ã®å…¬å¼ãƒ†ãƒ³ãƒ—レートドキュメント㮠:ref:`組ã¿è¾¼ã¿ãƒ•ィルター ` ã®ãƒªã‚¹ãƒˆã‚’å‚ç…§ã—ã¦ã ã•ã„。ã¾ãŸã€:ref:`Python メソッド ` を使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’変æ›ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚:ref:`カスタム Ansible フィルターをプラグインã¨ã—ã¦ä½œæˆ ` ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€é€šå¸¸ã¯ã€èª°ã‚‚ãŒä½¿ç”¨ã§ãるよã†ã«æ–°ã—ã„フィルターを ansible-core リãƒã‚¸ãƒˆãƒªãƒ¼ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒæ­“迎ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:9 msgid "Because templating happens on the Ansible controller, **not** on the target host, filters execute on the controller and transform data locally." msgstr "テンプレート化ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆä¸Š **ã§ã¯ãªã**ã€Ansible コントローラー上ã§è¡Œã‚れるãŸã‚ã€ãƒ•ィルターã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ä¸Šã§å®Ÿè¡Œã—ã€ãƒ‡ãƒ¼ã‚¿ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:15 msgid "Handling undefined variables" msgstr "未定義変数ã®å‡¦ç†" #: ../../rst/user_guide/playbooks_filters.rst:17 msgid "Filters can help you manage missing or undefined variables by providing defaults or making some variables optional. If you configure Ansible to ignore most undefined variables, you can mark some variables as requiring values with the ``mandatory`` filter." msgstr "フィルターã¯ã€ãƒ‡ãƒ•ォルトを指定ã—ãŸã‚Šã€ä¸€éƒ¨ã®å¤‰æ•°ã‚’ä»»æ„ã«ã—ãŸã‚Šã™ã‚‹ã“ã¨ã§ã€æ¬ è½ã—ã¦ã„る変数や未定義ã®å¤‰æ•°ã‚’管ç†ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã»ã¨ã‚“ã©ã®æœªå®šç¾©ã®å¤‰æ•°ã‚’無視ã™ã‚‹ã‚ˆã†ã« Ansibl eを設定ã—ãŸå ´åˆã¯ã€``mandatory`` フィルターを使用ã—ã¦ã€ã„ãã¤ã‹ã®å¤‰æ•°ã‚’å¿…è¦ãªå€¤ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:22 msgid "Providing default values" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã®æŒ‡å®š" #: ../../rst/user_guide/playbooks_filters.rst:24 msgid "You can provide default values for variables directly in your templates using the Jinja2 'default' filter. This is often a better approach than failing if a variable is not defined::" msgstr "Jinja2 ã®ã€Œdefaultã€ãƒ•ィルターを使用ã™ã‚Œã°ã€ãƒ†ãƒ³ãƒ—レートã®ä¸­ã§ç›´æŽ¥ã€å¤‰æ•°ã®ãƒ‡ãƒ•ォルト値を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変数ãŒå®šç¾©ã•れã¦ã„ãªã„å ´åˆã«å¤±æ•—ã™ã‚‹ã‚ˆã‚Šã‚‚優れãŸã‚¢ãƒ—ローãƒã§ã‚ã‚‹ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:28 msgid "In the above example, if the variable 'some_variable' is not defined, Ansible uses the default value 5, rather than raising an \"undefined variable\" error and failing. If you are working within a role, you can also add a ``defaults/main.yml`` to define the default values for variables in your role." msgstr "上記ã®ä¾‹ã§ã¯ã€å¤‰æ•°ã€Œsome_variableã€ãŒå®šç¾©ã•れã¦ã„ãªã„å ´åˆã€Ansible ã¯ã€Œundefined variableã€ã‚¨ãƒ©ãƒ¼ã‚’発生ã•ã›ã¦å¤±æ•—ã™ã‚‹ã®ã§ã¯ãªãã€ãƒ‡ãƒ•ォルト値 5 を使用ã—ã¾ã™ã€‚ロール内ã§ä½œæ¥­ã—ã¦ã„ã‚‹å ´åˆã¯ã€``defaults/main.yml`` を追加ã—ã¦ã€ãƒ­ãƒ¼ãƒ«å†…ã®å¤‰æ•°ã®ãƒ‡ãƒ•ォルト値を定義ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:30 msgid "Beginning in version 2.8, attempting to access an attribute of an Undefined value in Jinja will return another Undefined value, rather than throwing an error immediately. This means that you can now simply use a default with a value in a nested data structure (in other words, :code:`{{ foo.bar.baz | default('DEFAULT') }}`) when you do not know if the intermediate values are defined." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 ã‹ã‚‰ã€Jinja ã§ Undefined ã®å€¤ã®å±žæ€§ã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨ã€ã™ãã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã®ã§ã¯ãªãã€åˆ¥ã® Undefined ã®å€¤ãŒè¿”ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ä¸­é–“値ãŒå®šç¾©ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚‰ãªã„å ´åˆã«ã€ãƒã‚¹ãƒˆã•れãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®ä¸­ã®å€¤ã§ãƒ‡ãƒ•ォルトを簡å˜ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã—㟠(ã¤ã¾ã‚Š :code:`{{ foo.bar.baz | default('DEFAULT') }}`)。" #: ../../rst/user_guide/playbooks_filters.rst:33 msgid "If you want to use the default value when variables evaluate to false or an empty string you have to set the second parameter to ``true``::" msgstr "変数㌠false ã¾ãŸã¯ç©ºã®æ–‡å­—列ã«è©•価ã•れるã¨ãã«ãƒ‡ãƒ•ォルト値を使用ã™ã‚‹å ´åˆã¯ã€2 番目ã®ãƒ‘ラメーターを ``true`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:40 msgid "Making variables optional" msgstr "変数ã®ä»»æ„設定" #: ../../rst/user_guide/playbooks_filters.rst:42 msgid "By default Ansible requires values for all variables in a templated expression. However, you can make specific variables optional. For example, you might want to use a system default for some items and control the value for others. To make a variable optional, set the default value to the special variable ``omit``::" msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ†ãƒ³ãƒ—レートå¼ã®ã™ã¹ã¦ã®å¤‰æ•°ã«å€¤ã‚’è¦æ±‚ã—ã¾ã™ã€‚ã—ã‹ã—ã€ç‰¹å®šã®å¤‰æ•°ã‚’ä»»æ„ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸€éƒ¨ã®é …ç›®ã§ã¯ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‡ãƒ•ォルト値を使用ã—ã€ä»–ã®é …ç›®ã§ã¯å€¤ã‚’制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変数を任æ„ã«ã™ã‚‹ã«ã¯ã€ç‰¹æ®Šå¤‰æ•° ``omit`` ã«ãƒ‡ãƒ•ォルト値を設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:55 msgid "In this example, the default mode for the files ``/tmp/foo`` and ``/tmp/bar`` is determined by the umask of the system. Ansible does not send a value for ``mode``. Only the third file, ``/tmp/baz``, receives the `mode=0444` option." msgstr "ã“ã®ä¾‹ã§ã¯ã€``/tmp/foo`` ファイルãŠã‚ˆã³ ``/tmp/bar`` ファイルã®ãƒ‡ãƒ•ォルトモードã¯ã‚·ã‚¹ãƒ†ãƒ ã® umask ã«ã‚ˆã‚Šæ±ºå®šã•れã¾ã™ã€‚Ansible 㯠``mode`` ã®å€¤ã‚’é€ä¿¡ã—ã¾ã›ã‚“。3 番目ã®ãƒ•ァイルã§ã‚ã‚‹ ``/tmp/baz`` ã ã‘㌠`mode=0444` オプションをå—ã‘å–りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:57 msgid "If you are \"chaining\" additional filters after the ``default(omit)`` filter, you should instead do something like this: ``\"{{ foo | default(None) | some_filter or omit }}\"``. In this example, the default ``None`` (Python null) value will cause the later filters to fail, which will trigger the ``or omit`` portion of the logic. Using ``omit`` in this manner is very specific to the later filters you are chaining though, so be prepared for some trial and error if you do this." msgstr "``default(omit)`` フィルターã®å¾Œã«è¿½åŠ ã®ãƒ•ィルターを「連鎖ã€ã•ã›ã‚‹å ´åˆã¯ã€ä»£ã‚り㫠``\"{{ foo | default(None) | some_filter or omit }}\"`` ã®ã‚ˆã†ã«ã—ã¦ãã ã•ã„。ã“ã®ä¾‹ã§ã¯ã€ãƒ‡ãƒ•ォルト㮠``None`` (Python null) ã®å€¤ã«ã‚ˆã‚Šã€å¾Œç¶šã®ãƒ•ィルターãŒå¤±æ•—ã—ã€ãƒ­ã‚¸ãƒƒã‚¯ã® ``or omit`` 部分ãŒèª˜ç™ºã•れã¾ã™ã€‚``omit`` ã‚’ã“ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã€é€£éŽ–ã•ã›ã‚‹å¾Œç¶šã®ãƒ•ィルターã«éžå¸¸ã«ä¾å­˜ã™ã‚‹ãŸã‚ã€è©¦è¡ŒéŒ¯èª¤ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:63 msgid "Defining mandatory values" msgstr "必須値ã®å®šç¾©" #: ../../rst/user_guide/playbooks_filters.rst:65 msgid "If you configure Ansible to ignore undefined variables, you may want to define some values as mandatory. By default, Ansible fails if a variable in your playbook or command is undefined. You can configure Ansible to allow undefined variables by setting :ref:`DEFAULT_UNDEFINED_VAR_BEHAVIOR` to ``false``. In that case, you may want to require some variables to be defined. You can do this with::" msgstr "未定義ã®å¤‰æ•°ã‚’無視ã™ã‚‹ã‚ˆã†ã« Ansible を設定ã™ã‚‹å ´åˆã¯ã€ä¸€éƒ¨ã®å€¤ã‚’å¿…é ˆã¨ã—ã¦å®šç¾©ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚デフォルトã§ã¯ã€Playbook ã¾ãŸã¯ã‚³ãƒžãƒ³ãƒ‰ã®å¤‰æ•°ãŒæœªå®šç¾©ã®å ´åˆã€Ansible ã¯å¤±æ•—ã—ã¾ã™ã€‚:ref:`DEFAULT_UNDEFINED_VAR_BEHAVIOR` ã‚’ ``false`` ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€æœªå®šç¾©ã®å¤‰æ•°ã‚’許å¯ã™ã‚‹ã‚ˆã†ã« Ansible を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®å ´åˆã¯ã€ä¸€éƒ¨ã®å¤‰æ•°ã®å®šç¾©ã‚’å¿…é ˆã«ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れã«ã¯æ¬¡ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:69 msgid "The variable value will be used as is, but the template evaluation will raise an error if it is undefined." msgstr "変数ã®å€¤ã¯ãã®ã¾ã¾ä½¿ç”¨ã•れã¾ã™ãŒã€å®šç¾©ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ†ãƒ³ãƒ—レートã®è©•価ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:71 msgid "A convenient way of requiring a variable to be overridden is to give it an undefined value using the ``undef`` keyword. This can be useful in a role's defaults." msgstr "変数ã®ä¸Šæ›¸ãã‚’è¦æ±‚ã™ã‚‹ä¾¿åˆ©ãªæ–¹æ³•ã¯ã€``undef`` キーワードを使用ã—ã¦æœªå®šç¾©å€¤ã‚’æä¾›ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトã§å½¹ã«ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:79 msgid "Defining different values for true/false/null (ternary)" msgstr "true/false/null (三項) ã«ç•°ãªã‚‹å€¤ã‚’定義ã™ã‚‹" #: ../../rst/user_guide/playbooks_filters.rst:81 msgid "You can create a test, then define one value to use when the test returns true and another when the test returns false (new in version 1.9)::" msgstr "テストを作æˆã—ã€ãã®ãƒ†ã‚¹ãƒˆãŒ true ã‚’è¿”ã—ãŸã¨ãã«ä½¿ç”¨ã™ã‚‹å€¤ã¨ã€false ã‚’è¿”ã—ãŸã¨ãã«ä½¿ç”¨ã™ã‚‹å€¤ã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.9 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:85 msgid "In addition, you can define a one value to use on true, one value on false and a third value on null (new in version 2.8)::" msgstr "ã•らã«ã€true ã«ä½¿ç”¨ã™ã‚‹å€¤ã‚’ 1 ã¤å®šç¾©ã—ã€false ã§ 1 ã¤ã®å€¤ã€null ã§ 3 番目ã®å€¤ã‚’定義ã§ãã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.8 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:90 msgid "Managing data types" msgstr "データ型ã®ç®¡ç†" #: ../../rst/user_guide/playbooks_filters.rst:92 msgid "You might need to know, change, or set the data type on a variable. For example, a registered variable might contain a dictionary when your next task needs a list, or a user :ref:`prompt ` might return a string when your playbook needs a boolean value. Use the ``type_debug``, ``dict2items``, and ``items2dict`` filters to manage data types. You can also use the data type itself to cast a value as a specific data type." msgstr "変数ã®ãƒ‡ãƒ¼ã‚¿åž‹ã®ç¢ºèªã€å¤‰æ›´ã€ã¾ãŸã¯è¨­å®šã‚’行ã†å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€æ¬¡ã®ã‚¿ã‚¹ã‚¯ã§ãƒªã‚¹ãƒˆãŒå¿…è¦ãªã¨ãã«ã€ç™»éŒ²æ¸ˆã¿ã®å¤‰æ•°ã«ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãŒå«ã¾ã‚Œã¦ã„ãŸã‚Šã€Playbook ã§ãƒ–ール値ãŒå¿…è¦ãªã¨ãã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã® :ref:`prompt ` ãŒæ–‡å­—列を返ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚データタイプã®ç®¡ç†ã«ã¯ã€``type_debug``ã€``dict2items``ã€ãŠã‚ˆã³ ``items2dict`` ã®å„フィルターを使用ã—ã¾ã™ã€‚ã¾ãŸã€ãƒ‡ãƒ¼ã‚¿åž‹è‡ªä½“を使用ã—ã¦ã€å€¤ã‚’特定ã®ãƒ‡ãƒ¼ã‚¿åž‹ã¨ã—ã¦ã‚­ãƒ£ã‚¹ãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:95 msgid "Discovering the data type" msgstr "ãƒ‡ãƒ¼ã‚¿åž‹ã®æ¤œå‡º" #: ../../rst/user_guide/playbooks_filters.rst:99 msgid "If you are unsure of the underlying Python type of a variable, you can use the ``type_debug`` filter to display it. This is useful in debugging when you need a particular type of variable::" msgstr "変数ã®åŸºç¤Žã¨ãªã‚‹ Python ã®åž‹ãŒã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€``type_debug`` フィルターを使用ã—ã¦è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ãƒ‡ãƒãƒƒã‚°æ™‚ã«ç‰¹å®šã®åž‹ã®å¤‰æ•°ãŒå¿…è¦ã«ãªã£ãŸã¨ãã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:107 msgid "Transforming dictionaries into lists" msgstr "ディクショナリーã®ãƒªã‚¹ãƒˆã¸ã®å¤‰æ›" #: ../../rst/user_guide/playbooks_filters.rst:112 msgid "Use the ``dict2items`` filter to transform a dictionary into a list of items suitable for :ref:`looping `::" msgstr "``dict2items`` フィルターを使用ã—ã¦ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’ :ref:`looping ` ã«é©ã—ãŸé …ç›®ã®ãƒªã‚¹ãƒˆã«å¤‰æ›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:116 #: ../../rst/user_guide/playbooks_filters.rst:137 msgid "Dictionary data (before applying the ``dict2items`` filter)::" msgstr "ディクショナリーデータ (``dict2items`` フィルターをé©ç”¨ã™ã‚‹å‰)::" #: ../../rst/user_guide/playbooks_filters.rst:122 #: ../../rst/user_guide/playbooks_filters.rst:143 msgid "List data (after applying the ``dict2items`` filter)::" msgstr "データを一覧表示 (``dict2items`` フィルターをé©ç”¨ã—ãŸå¾Œ)::" #: ../../rst/user_guide/playbooks_filters.rst:131 msgid "The ``dict2items`` filter is the reverse of the ``items2dict`` filter." msgstr "``dict2items`` フィルターã¯ã€``items2dict`` フィルターã®é€†ã®åŠ¹æžœãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:133 msgid "If you want to configure the names of the keys, the ``dict2items`` filter accepts 2 keyword arguments. Pass the ``key_name`` and ``value_name`` arguments to configure the names of the keys in the list output::" msgstr "キーåを設定ã™ã‚‹å ´åˆã¯ã€``dict2items`` フィルター㯠2 ã¤ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰å¼•æ•°ã‚’å—ã‘入れã¾ã™ã€‚``key_name`` 引数ãŠã‚ˆã³ ``value_name`` 引数を渡ã™ã¨ã€ãƒªã‚¹ãƒˆå‡ºåŠ›ã®ã‚­ãƒ¼ã®åå‰ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:152 msgid "Transforming lists into dictionaries" msgstr "リストã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¸ã®å¤‰æ›" #: ../../rst/user_guide/playbooks_filters.rst:156 msgid "Use the ``items2dict`` filter to transform a list into a dictionary, mapping the content into ``key: value`` pairs::" msgstr "``items2dict`` フィルターを使用ã—ã¦ãƒªã‚¹ãƒˆã‚’ディクショナリーã«å¤‰æ›ã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ ``key: value`` ã®ãƒšã‚¢ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:160 msgid "List data (before applying the ``items2dict`` filter)::" msgstr "リストデータ (``items2dict`` フィルターをé©ç”¨ã™ã‚‹å‰)::" #: ../../rst/user_guide/playbooks_filters.rst:168 msgid "Dictionary data (after applying the ``items2dict`` filter)::" msgstr "ディクショナリーデータ (``items2dict`` フィルターをé©ç”¨ã—ãŸå¾Œ)::" #: ../../rst/user_guide/playbooks_filters.rst:173 msgid "The ``items2dict`` filter is the reverse of the ``dict2items`` filter." msgstr "``items2dict`` フィルターã¯ã€``dict2items`` フィルターã®é€†ã®åŠ¹æžœãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:175 msgid "Not all lists use ``key`` to designate keys and ``value`` to designate values. For example::" msgstr "ã™ã¹ã¦ã®ãƒªã‚¹ãƒˆã§ã€ã‚­ãƒ¼ã®æŒ‡å®šã« ``key`` を使用ã—ã€å€¤ã®æŒ‡å®šã« ``value`` を使用ã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:185 msgid "In this example, you must pass the ``key_name`` and ``value_name`` arguments to configure the transformation. For example::" msgstr "ã“ã®ä¾‹ã§ã¯ã€``key_name`` 引数㨠``value_name`` 引数を渡ã™ã¨ã€å¤‰æ›ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:189 msgid "If you do not pass these arguments, or do not pass the correct values for your list, you will see ``KeyError: key`` or ``KeyError: my_typo``." msgstr "ã“れらã®å¼•æ•°ã€ã¾ãŸã¯ãƒªã‚¹ãƒˆã«é©ã—ãŸå€¤ã‚’渡ã•ãªã„å ´åˆã¯ã€``KeyError: key`` ã¾ãŸã¯ ``KeyError: my_typo`` ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:192 msgid "Forcing the data type" msgstr "データ型を強制" #: ../../rst/user_guide/playbooks_filters.rst:194 msgid "You can cast values as certain types. For example, if you expect the input \"True\" from a :ref:`vars_prompt ` and you want Ansible to recognize it as a boolean value instead of a string::" msgstr "値を特定ã®åž‹ã«ã‚­ãƒ£ã‚¹ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€:ref:`vars_prompt ` ã‹ã‚‰ã€ŒTrueã€ã¨ã„ã†å…¥åŠ›ã‚’æœŸå¾…ã—ã¦ã„ã¦ã€Ansible ã«ãれを文字列ã§ã¯ãªãブール値ã¨ã—ã¦èªè­˜ã•ã›ãŸã„å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:200 msgid "If you want to perform a mathematical comparison on a fact and you want Ansible to recognize it as an integer instead of a string::" msgstr "ファクトã«å¯¾ã—ã¦æ•°å­¦çš„ãªæ¯”較を実行ã—ã€Ansible ãŒæ–‡å­—列ã§ã¯ãªãæ•´æ•°ã¨ã—ã¦èªè­˜ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:211 msgid "Formatting data: YAML and JSON" msgstr "データã®ãƒ•ォーマット: YAML ãŠã‚ˆã³ JSON" #: ../../rst/user_guide/playbooks_filters.rst:213 msgid "You can switch a data structure in a template from or to JSON or YAML format, with options for formatting, indenting, and loading data. The basic filters are occasionally useful for debugging::" msgstr "テンプレート内ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’ JSON å½¢å¼ã¨ YAML å½¢å¼ã¨ã®é–“ã§åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã€ãƒ•ォーマット化やインデント付ã‘ã€ãƒ‡ãƒ¼ã‚¿ã®èª­ã¿è¾¼ã¿ãªã©ã®ã‚ªãƒ—ションも用æ„ã•れã¦ã„ã¾ã™ã€‚基本的ãªãƒ•ィルターã¯ã€æ™‚折ã€ãƒ‡ãƒãƒƒã‚°ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:218 msgid "For human readable output, you can use::" msgstr "人ãŒåˆ¤èª­ã§ãる出力ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:223 msgid "You can change the indentation of either format::" msgstr "ã„ãšã‚Œã‹ã®å½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã‚’変更ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:228 msgid "The ``to_yaml`` and ``to_nice_yaml`` filters use the `PyYAML library`_ which has a default 80 symbol string length limit. That causes unexpected line break after 80th symbol (if there is a space after 80th symbol) To avoid such behavior and generate long lines, use the ``width`` option. You must use a hardcoded number to define the width, instead of a construction like ``float(\"inf\")``, because the filter does not support proxying Python functions. For example::" msgstr "``to_yaml`` フィルターãŠã‚ˆã³ ``to_nice_yaml`` フィルターã¯ã€ãƒ‡ãƒ•ォルト㧠80 記å·ã®æ–‡å­—列長制é™ã‚’æŒã¤ `PyYAML library`_ を使用ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãŸã‚ã€80 番目ã®è¨˜å·ã®å¾Œã«äºˆæœŸã›ã¬æ”¹è¡ŒãŒç™ºç”Ÿã—ã¾ã™ (80 番目ã®ã‚·ãƒ³ãƒœãƒ«ã®å¾Œã«ç©ºç™½ãŒã‚ã‚‹å ´åˆ)。ã“ã®ã‚ˆã†ãªå‹•作を回é¿ã—ã€é•·ã„行を生æˆã™ã‚‹ã«ã¯ã€``width`` オプションを使用ã—ã¾ã™ã€‚フィルター㯠Python 関数ã®ãƒ—ロキシーをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãŸã‚ã€``float(\"inf\")`` ã®ã‚ˆã†ãªæ§‹æ–‡ã§ã¯ãªãã€ãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ•°å€¤ã‚’使用ã—ã¦å¹…を定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:234 msgid "The filter does support passing through other YAML parameters. For a full list, see the `PyYAML documentation`_." msgstr "フィルターã¯ä»–ã® YAML パラメーターã®ãƒ‘ススルーをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚完全ãªä¸€è¦§ã¯ã€ã€Œ`PyYAML documentation`_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:236 msgid "If you are reading in some already formatted data::" msgstr "ã™ã§ã«ãƒ•ォーマットã•れã¦ã„る一部ã®ãƒ‡ãƒ¼ã‚¿ã§èª­ã¿å–ã‚‹å ´åˆ::" #: ../../rst/user_guide/playbooks_filters.rst:241 #: ../../rst/user_guide/playbooks_filters.rst:275 msgid "for example::" msgstr "ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:254 msgid "Filter `to_json` and Unicode support" msgstr "`to_json` 㨠Unicode サãƒãƒ¼ãƒˆã‚’フィルタリング" #: ../../rst/user_guide/playbooks_filters.rst:256 msgid "By default `to_json` and `to_nice_json` will convert data received to ASCII, so::" msgstr "デフォルトã§ã¯ã€`to_json` ãŠã‚ˆã³ `to_nice_json` ã¯ã€å—診ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’ ASCII ã«å¤‰æ›ã™ã‚‹ãŸã‚ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:260 msgid "will return::" msgstr "以下ãŒè¿”ã£ã¦ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:264 msgid "To keep Unicode characters, pass the parameter `ensure_ascii=False` to the filter::" msgstr "Unicode æ–‡å­—ã‚’ä¿æŒã™ã‚‹ã«ã¯ã€ãƒ‘ラメーター `ensure_ascii=False` ã‚’ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:272 msgid "To parse multi-document YAML strings, the ``from_yaml_all`` filter is provided. The ``from_yaml_all`` filter will return a generator of parsed YAML documents." msgstr "複数ドキュメント㮠YAML 文字列を解æžã™ã‚‹ãŸã‚ã«ã€``from_yaml_all`` ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãŒæä¾›ã•れã¾ã™ã€‚``from_yaml_all`` フィルターã¯è§£æžã•れ㟠YAML ドキュメントã®ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:288 msgid "Combining and selecting data" msgstr "データã®çµ±åˆãŠã‚ˆã³é¸æŠž" #: ../../rst/user_guide/playbooks_filters.rst:290 msgid "You can combine data from multiple sources and types, and select values from large data structures, giving you precise control over complex data." msgstr "複数ã®ã‚½ãƒ¼ã‚¹ã‚„タイプã®ãƒ‡ãƒ¼ã‚¿ã‚’組ã¿åˆã‚ã›ãŸã‚Šã€å¤§è¦æ¨¡ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‹ã‚‰å€¤ã‚’é¸æŠžã—ãŸã‚Šã™ã‚‹ã“ã¨ã§ã€è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿ã‚’正確ã«åˆ¶å¾¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:295 msgid "Combining items from multiple lists: zip and zip_longest" msgstr "複数ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã®é …ç›®ã®çµ„ã¿åˆã‚ã›: zip ãŠã‚ˆã³ zip_longest" #: ../../rst/user_guide/playbooks_filters.rst:299 msgid "To get a list combining the elements of other lists use ``zip``::" msgstr "ä»–ã®ãƒªã‚¹ãƒˆã®è¦ç´ ã‚’組ã¿åˆã‚ã›ãŸãƒªã‚¹ãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€``zip`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:313 msgid "To always exhaust all lists use ``zip_longest``::" msgstr "ã™ã¹ã¦ã®ä¸€è¦§ã‚’常ã«ä½¿ã„切るã«ã¯ã€``zip_longest`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:321 msgid "Similarly to the output of the ``items2dict`` filter mentioned above, these filters can be used to construct a ``dict``::" msgstr "上記㮠``items2dict`` フィルターã®å‡ºåŠ›ã¨åŒæ§˜ã«ã€ã“れらã®ãƒ•ィルターを使用ã—㦠``dict`` を作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:325 msgid "List data (before applying the ``zip`` filter)::" msgstr "リストデータ (``zip`` フィルターをé©ç”¨ã™ã‚‹å‰)::" #: ../../rst/user_guide/playbooks_filters.rst:334 msgid "Dictionary data (after applying the ``zip`` filter)::" msgstr "ディクショナリーデータ (``zip`` フィルターをé©ç”¨ã—ãŸå¾Œ)::" #: ../../rst/user_guide/playbooks_filters.rst:340 msgid "Combining objects and subelements" msgstr "オブジェクトã¨ã‚µãƒ–è¦ç´ ã®çµ±åˆ" #: ../../rst/user_guide/playbooks_filters.rst:344 msgid "The ``subelements`` filter produces a product of an object and the subelement values of that object, similar to the ``subelements`` lookup. This lets you specify individual subelements to use in a template. For example, this expression::" msgstr "``subelements`` フィルターã¯ã€``subelements`` ルックアップã¨åŒæ§˜ã«ã€ã‚ªãƒ–ジェクトã¨ãã®ã‚ªãƒ–ジェクトã®ã‚µãƒ–エレメントã®å€¤ã®ç©ã‚’生æˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ†ãƒ³ãƒ—レートã§ä½¿ç”¨ã™ã‚‹å€‹ã€…ã®ã‚µãƒ–エレメントを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ãªå¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:348 msgid "Data before applying the ``subelements`` filter::" msgstr "``subelements`` フィルターã®é©ç”¨å‰ã®ãƒ‡ãƒ¼ã‚¿::" #: ../../rst/user_guide/playbooks_filters.rst:364 msgid "Data after applying the ``subelements`` filter::" msgstr "``subelements`` フィルターã®é©ç”¨å¾Œã®ãƒ‡ãƒ¼ã‚¿::" #: ../../rst/user_guide/playbooks_filters.rst:392 msgid "You can use the transformed data with ``loop`` to iterate over the same subelement for multiple objects::" msgstr "変æ›ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’ ``loop`` ã¨ã¨ã‚‚ã«ä½¿ç”¨ã—ã¦ã€è¤‡æ•°ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦åŒã˜ã‚µãƒ–è¦ç´ ã‚’繰り返ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:403 msgid "Combining hashes/dictionaries" msgstr "ãƒãƒƒã‚·ãƒ¥/ディクショナリーã®çµ±åˆ" #: ../../rst/user_guide/playbooks_filters.rst:407 msgid "The ``combine`` filter allows hashes to be merged. For example, the following would override keys in one hash::" msgstr "``combine`` フィルターã¯ãƒãƒƒã‚·ãƒ¥ã‚’マージã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã¯ 1 ã¤ã®ãƒãƒƒã‚·ãƒ¥å†…ã®ã‚­ãƒ¼ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:411 msgid "The resulting hash would be::" msgstr "生æˆã•れるãƒãƒƒã‚·ãƒ¥ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:415 msgid "The filter can also take multiple arguments to merge::" msgstr "フィルターã¯è¤‡æ•°ã®å¼•数を使用ã—ã¦ãƒžãƒ¼ã‚¸ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:420 msgid "In this case, keys in ``d`` would override those in ``c``, which would override those in ``b``, and so on." msgstr "ã“ã®å ´åˆã€``d`` ã®ã‚­ãƒ¼ã¯ ``c`` ã®ã‚­ãƒ¼ã‚’上書ãã—ã€``b`` ã®ã‚­ãƒ¼ã‚‚åŒæ§˜ã«ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:422 msgid "The filter also accepts two optional parameters: ``recursive`` and ``list_merge``." msgstr "フィルターã¯ã€``recursive`` ãŠã‚ˆã³ ``list_merge`` ã® 2 ã¤ã®ä»»æ„ã®ãƒ‘ラメーターも使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:427 msgid "recursive" msgstr "å†å¸°" #: ../../rst/user_guide/playbooks_filters.rst:425 msgid "Is a boolean, default to ``False``. Should the ``combine`` recursively merge nested hashes. Note: It does **not** depend on the value of the ``hash_behaviour`` setting in ``ansible.cfg``." msgstr "ブール値ã§ã€ãƒ‡ãƒ•ォルト㯠``False`` ã§ã™ã€‚``combine`` ãŒå…¥ã‚Œå­ã«ãªã£ãŸãƒãƒƒã‚·ãƒ¥ã‚’å†å¸°çš„ã«ãƒžãƒ¼ã‚¸ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚注: ``ansible.cfg`` ã® ``hash_behaviour`` 設定ã®å€¤ã«ã¯ **ä¾å­˜ã—ã¾ã›ã‚“** 。" #: ../../rst/user_guide/playbooks_filters.rst:431 msgid "list_merge" msgstr "list_merge" #: ../../rst/user_guide/playbooks_filters.rst:430 msgid "Is a string, its possible values are ``replace`` (default), ``keep``, ``append``, ``prepend``, ``append_rp`` or ``prepend_rp``. It modifies the behaviour of ``combine`` when the hashes to merge contain arrays/lists." msgstr "使用ã§ãる値㯠``replace`` (デフォルト)ã€``keep``ã€``append``ã€``prepend``ã€``append_rp``ã€ã¾ãŸã¯ ``prepend_rp`` ã§ã™ã€‚ãƒãƒƒã‚·ãƒ¥ã«é…列/リストをマージã™ã‚‹éš›ã« ``combine`` ã®å‹•作を変更ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:447 msgid "If ``recursive=False`` (the default), nested hash aren't merged::" msgstr "``recursive=False`` (デフォルト) ã®å ´åˆã¯ã€ãƒã‚¹ãƒˆã•れãŸãƒãƒƒã‚·ãƒ¥ãŒãƒžãƒ¼ã‚¸ã•れã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_filters.rst:451 #: ../../rst/user_guide/playbooks_filters.rst:463 #: ../../rst/user_guide/playbooks_filters.rst:485 #: ../../rst/user_guide/playbooks_filters.rst:494 #: ../../rst/user_guide/playbooks_filters.rst:503 #: ../../rst/user_guide/playbooks_filters.rst:513 #: ../../rst/user_guide/playbooks_filters.rst:538 #: ../../rst/user_guide/playbooks_filters.rst:553 #: ../../rst/user_guide/playbooks_filters.rst:595 #: ../../rst/user_guide/playbooks_filters.rst:682 #: ../../rst/user_guide/playbooks_tests.rst:319 #: ../../rst/user_guide/playbooks_tests.rst:342 msgid "This would result in::" msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:459 msgid "If ``recursive=True``, recurse into nested hash and merge their keys::" msgstr "``recursive=True`` ã®å ´åˆã¯ã€ãƒã‚¹ãƒˆã•れãŸãƒãƒƒã‚·ãƒ¥ã‚’å†å¸°çš„ã«ä½¿ç”¨ã—ã¦ã€éµã‚’マージã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:472 msgid "If ``list_merge='replace'`` (the default), arrays from the right hash will \"replace\" the ones in the left hash::" msgstr "``list_merge='replace'`` (デフォルト) ã®å ´åˆã€å³ãƒãƒƒã‚·ãƒ¥ã®é…列ã¯å·¦ãƒãƒƒã‚·ãƒ¥ã®é…åˆ—ã‚’ã€Œç½®ãæ›ãˆã€ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:490 msgid "If ``list_merge='keep'``, arrays from the left hash will be kept::" msgstr "``list_merge='keep'`` ã®å ´åˆã¯ã€å·¦ã®ãƒãƒƒã‚·ãƒ¥ã‹ã‚‰ã®é…列ãŒä¿æŒã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:499 msgid "If ``list_merge='append'``, arrays from the right hash will be appended to the ones in the left hash::" msgstr "``list_merge='append'`` ã®å ´åˆã¯ã€å³ã®ãƒãƒƒã‚·ãƒ¥ã‹ã‚‰ã®é…列ãŒå·¦ã®ãƒãƒƒã‚·ãƒ¥å†…ã®é…列ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:509 msgid "If ``list_merge='prepend'``, arrays from the right hash will be prepended to the ones in the left hash::" msgstr "``list_merge='prepend'`` ã®å ´åˆã¯ã€å³ã®ãƒãƒƒã‚·ãƒ¥ã‹ã‚‰ã®é…列ãŒå·¦ã®ãƒãƒƒã‚·ãƒ¥å†…ã®é…列ã®å‰ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:519 msgid "If ``list_merge='append_rp'``, arrays from the right hash will be appended to the ones in the left hash. Elements of arrays in the left hash that are also in the corresponding array of the right hash will be removed (\"rp\" stands for \"remove present\"). Duplicate elements that aren't in both hashes are kept::" msgstr "``list_merge='append_rp'`` ã®å ´åˆã¯ã€å³ãƒãƒƒã‚·ãƒ¥ã®é…列ãŒã€å·¦ãƒãƒƒã‚·ãƒ¥ã®é…列ã«è¿½åŠ ã•れã¾ã™ã€‚å·¦ãƒãƒƒã‚·ãƒ¥ã®é…列ã®ã†ã¡ã€å³ãƒãƒƒã‚·ãƒ¥ã®å¯¾å¿œã™ã‚‹é…列ã«ã‚‚ã‚ã‚‹è¦ç´ ã¯å‰Šé™¤ã•れã¾ã™ (「rpã€ã¯ã€Œremove presentã€ã®ç•¥)。両方ã®ãƒãƒƒã‚·ãƒ¥ã«å­˜åœ¨ã—ãªã„é‡è¤‡ã—ãŸè¦ç´ ã¯ä¿æŒã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:549 msgid "If ``list_merge='prepend_rp'``, the behavior is similar to the one for ``append_rp``, but elements of arrays in the right hash are prepended::" msgstr "``list_merge='prepend_rp'`` ã®å ´åˆã€å‹•作㯠``append_rp`` ã®ã‚‚ã®ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€å³ã®ãƒãƒƒã‚·ãƒ¥å†…ã®é…列ã®è¦ç´ ã®å‰ã«è¿½åŠ ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:564 msgid "``recursive`` and ``list_merge`` can be used together::" msgstr "``recursive`` ãŠã‚ˆã³ ``list_merge`` ã¯ä¸€ç·’ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:618 msgid "Selecting values from arrays or hashtables" msgstr "é…列ã¾ãŸã¯ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã‹ã‚‰ã®å€¤ã®é¸æŠž" #: ../../rst/user_guide/playbooks_filters.rst:622 msgid "The `extract` filter is used to map from a list of indices to a list of values from a container (hash or array)::" msgstr "`extract` フィルターã¯ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ (ãƒãƒƒã‚·ãƒ¥ã¾ãŸã¯é…列) ã®å€¤ã®ãƒªã‚¹ãƒˆã¸ã®ãƒžãƒƒãƒ”ングã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:627 msgid "The results of the above expressions would be::" msgstr "上記ã®å¼ã®çµæžœã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:632 msgid "The filter can take another argument::" msgstr "フィルターã¯åˆ¥ã®å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:636 msgid "This takes the list of hosts in group 'x', looks them up in `hostvars`, and then looks up the `ec2_ip_address` of the result. The final result is a list of IP addresses for the hosts in group 'x'." msgstr "ã“れã«ã‚ˆã‚Šã€ã‚°ãƒ«ãƒ¼ãƒ—「xã€ã®ãƒ›ã‚¹ãƒˆä¸€è¦§ãŒ `hostvars` ã§æ¤œç´¢ã•れã€çµæžœã® `ec2_ip_address` を探ã—ã¾ã™ã€‚æœ€çµ‚çµæžœã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—「xã€ã®ãƒ›ã‚¹ãƒˆã® IP アドレス一覧ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:638 msgid "The third argument to the filter can also be a list, for a recursive lookup inside the container::" msgstr "フィルターã®ç¬¬ 3 引数ã«ã¯ãƒªã‚¹ãƒˆã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã€ã‚³ãƒ³ãƒ†ãƒŠãƒ¼å†…ã®å†å¸°çš„ãªãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒå¯èƒ½ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:642 msgid "This would return a list containing the value of `b['a']['x']['y']`." msgstr "ã“れã«ã‚ˆã‚Šã€`b['a']['x']['y']` ã®å€¤ãŒå«ã¾ã‚Œã‚‹ãƒªã‚¹ãƒˆãŒè¿”ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:645 msgid "Combining lists" msgstr "リストã®çµ±åˆ" #: ../../rst/user_guide/playbooks_filters.rst:647 msgid "This set of filters returns a list of combined lists." msgstr "ã“ã®ãƒ•ィルターセットã¯ã€çµ„ã¿åˆã‚ã›ãŸãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:651 msgid "permutations" msgstr "ç½®æ›" #: ../../rst/user_guide/playbooks_filters.rst:652 msgid "To get permutations of a list::" msgstr "リストã®ç½®æ›ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:663 msgid "combinations" msgstr "組ã¿åˆã‚ã›" #: ../../rst/user_guide/playbooks_filters.rst:664 msgid "Combinations always require a set size::" msgstr "組ã¿åˆã‚ã›ã«ã¯å¸¸ã«ã‚»ãƒƒãƒˆã‚µã‚¤ã‚ºãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:670 msgid "Also see the :ref:`zip_filter`" msgstr "ã¾ãŸã€ã€Œ:ref:`zip_filter`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:673 msgid "products" msgstr "製å“" #: ../../rst/user_guide/playbooks_filters.rst:674 msgid "The product filter returns the `cartesian product `_ of the input iterables. This is roughly equivalent to nested for-loops in a generator expression." msgstr "製å“フィルターã¯ã€å…¥åŠ›ã•れãŸã‚¤ãƒ†ãƒ©ãƒ–ル㮠`cartesian product `_ ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿å¼ã®å…¥ã‚Œå­ã«ãªã£ãŸ for-loop ã¨ã»ã¼åŒã˜ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:689 msgid "Selecting JSON data: JSON queries" msgstr "JSON データã®é¸æŠž: JSON クエリー" #: ../../rst/user_guide/playbooks_filters.rst:691 msgid "To select a single element or a data subset from a complex data structure in JSON format (for example, Ansible facts), use the ``json_query`` filter. The ``json_query`` filter lets you query a complex JSON structure and iterate over it using a loop structure." msgstr "JSON å½¢å¼ã®è¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿æ§‹é€  (Ansible ファクトãªã©) ã‹ã‚‰å˜ä¸€ã®è¦ç´ ã‚„ãƒ‡ãƒ¼ã‚¿ã‚µãƒ–ã‚»ãƒƒãƒˆã‚’é¸æŠžã™ã‚‹ã«ã¯ã€``json_query`` フィルターを使用ã—ã¾ã™ã€‚``json_query`` フィルターを使用ã™ã‚‹ã¨ã€è¤‡é›‘㪠JSON 構造を照会ã—ã€ãƒ«ãƒ¼ãƒ—構造を使用ã—ã¦å復処ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:695 #: ../../rst/user_guide/playbooks_filters.rst:836 msgid "This filter has migrated to the `community.general `_ collection. Follow the installation instructions to install that collection." msgstr "`community.general `_ フィルターã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ç§»è¡Œã—ã¾ã—ãŸã€‚インストール手順ã«å¾“ã£ã¦ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:698 msgid "You must manually install the **jmespath** dependency on the Ansible controller before using this filter. This filter is built upon **jmespath**, and you can use the same syntax. For examples, see `jmespath examples `_." msgstr "ã“ã®ãƒ•ィルターを使用ã™ã‚‹å‰ã«ã€Ansible コントローラー㫠**jmespath** ä¾å­˜é–¢ä¿‚を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ•ィルター㯠**jmespath** をベースã«ä½œã‚‰ã‚Œã¦ãŠã‚Šã€åŒã˜æ§‹æ–‡ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚例ã«ã¤ã„ã¦ã¯ã€`jmespath examples `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:700 msgid "Consider this data structure::" msgstr "ã“ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’考ãˆã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:749 msgid "To extract all clusters from this structure, you can use the following query::" msgstr "ã“ã®æ§‹é€ ã‹ã‚‰ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‚’抽出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:756 msgid "To extract all server names::" msgstr "ã™ã¹ã¦ã®ã‚µãƒ¼ãƒãƒ¼åを抽出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:763 msgid "To extract ports from cluster1::" msgstr "cluster1 ã‹ã‚‰ãƒãƒ¼ãƒˆã‚’抽出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:772 msgid "You can use a variable to make the query more readable." msgstr "変数を使用ã™ã‚‹ã¨ã€ã‚¯ã‚¨ãƒªãƒ¼ã®èª­ã¿å–りãŒã‚ˆã‚Šå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:774 msgid "To print out the ports from cluster1 in a comma separated string::" msgstr "cluster1 ã®ãƒãƒ¼ãƒˆã‚’ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã§è¡¨ç¤ºã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:780 msgid "In the example above, quoting literals using backticks avoids escaping quotes and maintains readability." msgstr "上ã®ä¾‹ã§ã¯ã€ãƒªãƒ†ãƒ©ãƒ«ã‚’ backtick ã§å¼•用ã™ã‚‹ã“ã¨ã§ã€å¼•用符ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã‚’é¿ã‘ã€èª­ã¿ã‚„ã™ã•ã‚’ç¶­æŒã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:782 msgid "You can use YAML `single quote escaping `_::" msgstr "YAML ã® `一é‡å¼•用符ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ— `_ を使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:789 msgid "Escaping single quotes within single quotes in YAML is done by doubling the single quote." msgstr "YAML ã®ä¸€é‡å¼•用符内ã§ä¸€é‡å¼•用符をエスケープã™ã‚‹å ´åˆã¯ã€ä¸€é‡å¼•用符を二é‡ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:791 msgid "To get a hash map with all ports and names of a cluster::" msgstr "クラスターã®ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆãŠã‚ˆã³åå‰ã‚’æŒã¤ãƒãƒƒã‚·ãƒ¥ãƒžãƒƒãƒ—ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:800 msgid "To extract ports from all clusters with name starting with 'server1'::" msgstr "「server1ã€ã§å§‹ã¾ã‚‹åå‰ã®å…¨ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‹ã‚‰ãƒãƒ¼ãƒˆã‚’抽出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:808 msgid "To extract ports from all clusters with name containing 'server1'::" msgstr "「server1ã€ã‚’å«ã‚€åå‰ã®å…¨ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ã‹ã‚‰ãƒãƒ¼ãƒˆã‚’抽出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:816 msgid "while using ``starts_with`` and ``contains``, you have to use `` to_json | from_json `` filter for correct parsing of data structure." msgstr "``starts_with`` ãŠã‚ˆã³ ``contains`` を使用ã™ã‚‹å ´åˆã¯ã€ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’æ­£ã—ãè§£æžã™ã‚‹ãŸã‚ã« ``to_json | from_json`` フィルターを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:820 msgid "Randomizing data" msgstr "データã®ãƒ©ãƒ³ãƒ€ãƒ åŒ–" #: ../../rst/user_guide/playbooks_filters.rst:822 msgid "When you need a randomly generated value, use one of these filters." msgstr "ランダムã«ç”Ÿæˆã•れãŸå€¤ãŒå¿…è¦ãªå ´åˆã¯ã€ã“れらã®ãƒ•ィルターã®ã„ãšã‚Œã‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:828 msgid "Random MAC addresses" msgstr "ランダム㪠MAC アドレス" #: ../../rst/user_guide/playbooks_filters.rst:832 msgid "This filter can be used to generate a random MAC address from a string prefix." msgstr "ã“ã®ãƒ•ィルターã¯ã€æ–‡å­—列プレフィックスã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ãª MAC アドレスを生æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:838 msgid "To get a random MAC address from a string prefix starting with '52:54:00'::" msgstr "文字列プレフィックス「52:54:00ã€ã§å§‹ã¾ã‚‹ãƒ©ãƒ³ãƒ€ãƒ ãª MAC アドレスをå–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:843 msgid "Note that if anything is wrong with the prefix string, the filter will issue an error." msgstr "ãƒ—ãƒ¬ãƒ•ã‚£ãƒƒã‚¯ã‚¹ã®æ–‡å­—列ã§ä¸å…·åˆãŒç”Ÿã˜ãŸå ´åˆã¯ã€ãƒ•ィルターã«ã‚ˆã‚Šã‚¨ãƒ©ãƒ¼ãŒç”Ÿã˜ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:847 msgid "As of Ansible version 2.9, you can also initialize the random number generator from a seed to create random-but-idempotent MAC addresses::" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.9 以é™ã§ã¯ã€ã‚·ãƒ¼ãƒ‰ã‹ã‚‰ä¹±æ•°ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’åˆæœŸåŒ–ã—ã€ãƒ©ãƒ³ãƒ€ãƒ ã§å†ªç­‰ãª MAC アドレスを作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:855 msgid "Random items or numbers" msgstr "ランダムãªé …ç›®ã¾ãŸã¯æ•°å­—" #: ../../rst/user_guide/playbooks_filters.rst:857 msgid "The ``random`` filter in Ansible is an extension of the default Jinja2 random filter, and can be used to return a random item from a sequence of items or to generate a random number based on a range." msgstr "Ansible ã®``random`` フィルターã¯ã€ãƒ‡ãƒ•ォルト㮠Jinja2 ランダムフィルターを拡張ã—ãŸã‚‚ã®ã§ã€ä¸€é€£ã®ã‚¢ã‚¤ãƒ†ãƒ ã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ãªé …目を返ã—ãŸã‚Šã€ç¯„囲ã«åŸºã¥ã„ã¦ãƒ©ãƒ³ãƒ€ãƒ ãªæ•°å€¤ã‚’生æˆã—ãŸã‚Šã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:859 msgid "To get a random item from a list::" msgstr "リストã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ãªã‚¢ã‚¤ãƒ†ãƒ ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:864 msgid "To get a random number between 0 (inclusive) and a specified integer (exclusive)::" msgstr "0 (å«ã‚€) ã‹ã‚‰æŒ‡å®šã—ãŸæ•´æ•° (除ã) ã®é–“ã®ä¹±æ•°ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:869 msgid "To get a random number from 0 to 100 but in steps of 10::" msgstr "0 ã‹ã‚‰ 100 ã¾ã§ã® 10 ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ä¹±æ•°ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:874 msgid "To get a random number from 1 to 100 but in steps of 10::" msgstr "1 ã‹ã‚‰ 100 ã¾ã§ã® 10 ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ä¹±æ•°ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:881 msgid "You can initialize the random number generator from a seed to create random-but-idempotent numbers::" msgstr "シードã‹ã‚‰ä¹±æ•°ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’åˆæœŸåŒ–ã—ã€ãƒ©ãƒ³ãƒ€ãƒ ã§å†ªç­‰ãªæ•°å­—を作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:886 msgid "Shuffling a list" msgstr "リストã®ã‚·ãƒ£ãƒƒãƒ•ル" #: ../../rst/user_guide/playbooks_filters.rst:888 msgid "The ``shuffle`` filter randomizes an existing list, giving a different order every invocation." msgstr "``shuffle`` フィルターã¯ã€æ—¢å­˜ã®ãƒªã‚¹ãƒˆã‚’ランダム化ã—ã€å‘¼ã³å‡ºã—ã”ã¨ã«ç•°ãªã‚‹é †åºã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:890 msgid "To get a random list from an existing list::" msgstr "既存ã®ãƒªã‚¹ãƒˆã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ãªãƒªã‚¹ãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:897 msgid "You can initialize the shuffle generator from a seed to generate a random-but-idempotent order::" msgstr "シャッフルジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’シードã‹ã‚‰åˆæœŸåŒ–ã—ã¦ã€ãƒ©ãƒ³ãƒ€ãƒ ã§å†ªç­‰ãªé †åºã‚’生æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:902 msgid "The shuffle filter returns a list whenever possible. If you use it with a non 'listable' item, the filter does nothing." msgstr "シャッフルフィルターã¯å¯èƒ½ãªå ´åˆå¸¸ã«ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚「リストå¯èƒ½ã€ã§ã¯ãªã„é …ç›®ã§ä½¿ç”¨ã™ã‚‹ã¨ã€ãƒ•ィルターã¯ä½•も行ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_filters.rst:908 msgid "Managing list variables" msgstr "リスト変数ã®ç®¡ç†" #: ../../rst/user_guide/playbooks_filters.rst:910 msgid "You can search for the minimum or maximum value in a list, or flatten a multi-level list." msgstr "ãƒªã‚¹ãƒˆã®æœ€å°å€¤ã‚„最大値を検索ã—ãŸã‚Šã€è¤‡æ•°ãƒ¬ãƒ™ãƒ«ã®ãƒªã‚¹ãƒˆã‚’フラットã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:912 msgid "To get the minimum value from list of numbers::" msgstr "数値リストã‹ã‚‰æœ€å°å€¤ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:918 msgid "To get the minimum value in a list of objects::" msgstr "オブジェクトã®ãƒªã‚¹ãƒˆã§æœ€å°å€¤ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:922 msgid "To get the maximum value from a list of numbers::" msgstr "数値リストã‹ã‚‰æœ€å¤§å€¤ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:928 msgid "To get the maximum value in a list of objects::" msgstr "オブジェクトã®ãƒªã‚¹ãƒˆã§æœ€å¤§å€¤ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:934 msgid "Flatten a list (same thing the `flatten` lookup does)::" msgstr "リストをフラット化ã—ã¾ã™ (`flatten` ルックアップã¨åŒç­‰)。" #: ../../rst/user_guide/playbooks_filters.rst:939 msgid "Flatten only the first level of a list (akin to the `items` lookup)::" msgstr "ãƒªã‚¹ãƒˆã®æœ€åˆã®ãƒ¬ãƒ™ãƒ«ã®ã¿ã‚’フラット化ã—ã¾ã™ (`items` ルックアップã¨åŒç­‰)。" #: ../../rst/user_guide/playbooks_filters.rst:947 msgid "Preserve nulls in a list, by default flatten removes them. ::" msgstr "リスト㫠null ã‚’ä¿æŒã—ã¾ã™ã€‚デフォルトã§ã¯ã€ãƒ•ラット化ã¯ã“れらを削除ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:956 msgid "Selecting from sets or lists (set theory)" msgstr "セットã¾ãŸã¯ãƒªã‚¹ãƒˆã®ä¸­ã‹ã‚‰é¸æŠž (ç†è«–ã®è¨­å®š)" #: ../../rst/user_guide/playbooks_filters.rst:958 msgid "You can select or combine items from sets or lists." msgstr "セットã¾ãŸã¯ãƒªã‚¹ãƒˆã‹ã‚‰é …ç›®ã‚’é¸æŠžã¾ãŸã¯çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:962 msgid "To get a unique set from a list::" msgstr "リストã‹ã‚‰ä¸€æ„ã®ã‚»ãƒƒãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:968 msgid "To get a union of two lists::" msgstr "2 ã¤ã®ãƒªã‚¹ãƒˆã‚’組ã¿åˆã‚ã›ã¦å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:975 msgid "To get the intersection of 2 lists (unique list of all items in both)::" msgstr "2 ã¤ã®ãƒªã‚¹ãƒˆ (両方ã®å…¨é …ç›®ã®ä¸€æ„ã®ãƒªã‚¹ãƒˆ) ã§æ§‹æˆã•れるもã®ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:982 msgid "To get the difference of 2 lists (items in 1 that don't exist in 2)::" msgstr "2 ã¤ã®ãƒªã‚¹ãƒˆã®ç›¸é•点をå–å¾—ã™ã‚‹ã«ã¯ (2 ã«å­˜åœ¨ã—ãªã„ 1 ã®é …ç›®)ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:989 msgid "To get the symmetric difference of 2 lists (items exclusive to each list)::" msgstr "2 ã¤ã®ãƒªã‚¹ãƒˆã®å¯¾ç§°çš„ãªé•ã„ã‚’å–å¾—ã™ã‚‹ (å„リストã¸ã®é™¤å¤–) ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:999 msgid "Calculating numbers (math)" msgstr "æ•°å­—ã®è¨ˆç®— (æ•°å­¦)" #: ../../rst/user_guide/playbooks_filters.rst:1003 msgid "You can calculate logs, powers, and roots of numbers with Ansible filters. Jinja2 provides other mathematical functions like abs() and round()." msgstr "Ansible ã®ãƒ•ィルターを使用ã—ã¦ã€å¯¾æ•°ã€ç´¯ä¹—ã€ãŠã‚ˆã‚Šæ ¹ã‚’計算ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€Jinja2 ã«ã¯ abs() ã‚„ round() ãªã©ã®æ•°å­¦é–¢æ•°ã‚‚用æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1005 msgid "Get the logarithm (default is e)::" msgstr "対数をå–å¾—ã—ã¾ã™ (デフォルト㯠e)。" #: ../../rst/user_guide/playbooks_filters.rst:1010 msgid "Get the base 10 logarithm::" msgstr "ベース 10 ã®å¯¾æ•°ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1015 msgid "Give me the power of 2! (or 5)::" msgstr "2 ã®ç´¯ä¹— (ã¾ãŸã¯ 5)::" #: ../../rst/user_guide/playbooks_filters.rst:1020 msgid "Square root, or the 5th::" msgstr "平方根ã¾ãŸã¯ 5 番目::" #: ../../rst/user_guide/playbooks_filters.rst:1030 msgid "Managing network interactions" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å¯¾è©±ã®ç®¡ç†" #: ../../rst/user_guide/playbooks_filters.rst:1032 msgid "These filters help you with common network tasks." msgstr "ã“れらã®ãƒ•ィルターã¯ã€ä¸€èˆ¬çš„ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¿ã‚¹ã‚¯ã®ä½¿ç”¨ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1036 msgid "These filters have migrated to the `ansible.netcommon `_ collection. Follow the installation instructions to install that collection." msgstr "ã“れらã®ãƒ•ィルター㯠`ansible.netcommon `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚インストール手順ã«å¾“ã£ã¦ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1041 msgid "IP address filters" msgstr "IP アドレスフィルター" #: ../../rst/user_guide/playbooks_filters.rst:1045 msgid "To test if a string is a valid IP address::" msgstr "æ–‡å­—åˆ—ãŒæœ‰åŠ¹ãª IP アドレスã‹ã©ã†ã‹ã‚’テストã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1049 msgid "You can also require a specific IP protocol version::" msgstr "ã•らã«ã€ç‰¹å®šã® IP プロトコルãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1054 msgid "IP address filter can also be used to extract specific information from an IP address. For example, to get the IP address itself from a CIDR, you can use::" msgstr "IP アドレスフィルターを使用ã—ã¦ã€IP アドレスã‹ã‚‰ç‰¹å®šã®æƒ…報を抽出ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€CIDR ã‹ã‚‰ IP アドレス自体をå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1060 msgid "More information about ``ipaddr`` filter and complete usage guide can be found in :ref:`playbooks_filters_ipaddr`." msgstr "``ipaddr`` フィルターã®è©³ç´°ã¨å®Œå…¨ãªä½¿ç”¨ã‚¬ã‚¤ãƒ‰ã¯ã€ã€Œ:ref:`playbooks_filters_ipaddr`ã€ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1066 msgid "Network CLI filters" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ CLI フィルター" #: ../../rst/user_guide/playbooks_filters.rst:1070 msgid "To convert the output of a network device CLI command into structured JSON output, use the ``parse_cli`` filter::" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ©Ÿå™¨ã® CLI コマンドã®å‡ºåŠ›ã‚’æ§‹é€ åŒ–ã•れ㟠JSON 出力ã«å¤‰æ›ã™ã‚‹ã«ã¯ã€``parse_cli`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1075 msgid "The ``parse_cli`` filter will load the spec file and pass the command output through it, returning JSON output. The YAML spec file defines how to parse the CLI output." msgstr "``parse_cli`` フィルターã¯ã€spec ファイルを読ã¿è¾¼ã¿ã€ã‚³ãƒžãƒ³ãƒ‰å‡ºåŠ›ã‚’é€šã—㦠JSON 出力を返ã—ã¾ã™ã€‚YAML ã® spec ファイルã¯ã€CLI 出力をã©ã®ã‚ˆã†ã«è§£æžã™ã‚‹ã‹ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1078 msgid "The spec file should be valid formatted YAML. It defines how to parse the CLI output and return JSON data. Below is an example of a valid spec file that will parse the output from the ``show vlan`` command." msgstr "spec ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ‰åйãªå½¢å¼ã® YAML ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。CLI ã®å‡ºåŠ›ã‚’ã©ã®ã‚ˆã†ã«è§£æžã—ã€JSON データを返ã™ã‹ã‚’定義ã—ã¾ã™ã€‚以下ã¯ã€``show vlan`` コマンドã‹ã‚‰ã®å‡ºåŠ›ã‚’è§£æžã™ã‚‹æœ‰åŠ¹ãª spec ファイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1100 #: ../../rst/user_guide/playbooks_filters.rst:1202 msgid "The spec file above will return a JSON data structure that is a list of hashes with the parsed VLAN information." msgstr "上記㮠spec ファイルã¯ã€è§£æžã•れ㟠VLAN 情報をæŒã¤ãƒãƒƒã‚·ãƒ¥ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ JSON データ構造を返ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1103 msgid "The same command could be parsed into a hash by using the key and values directives. Here is an example of how to parse the output into a hash value using the same ``show vlan`` command." msgstr "åŒã˜ã‚³ãƒžãƒ³ãƒ‰ã§ã‚‚ã€éµã¨å€¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–を使用ã™ã‚‹ã“ã¨ã§ã€ãƒãƒƒã‚·ãƒ¥ã«è§£æžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã¯ã€åŒã˜ ``show vlan`` コマンドを使用ã—ã¦å‡ºåŠ›ã‚’ãƒãƒƒã‚·ãƒ¥å€¤ã«è§£æžã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1126 msgid "Another common use case for parsing CLI commands is to break a large command into blocks that can be parsed. This can be done using the ``start_block`` and ``end_block`` directives to break the command into blocks that can be parsed." msgstr "CLI コマンドを解æžã™ã‚‹ã‚‚ã†ä¸€ã¤ã®ä¸€èˆ¬çš„ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã¯ã€å¤§ããªã‚³ãƒžãƒ³ãƒ‰ã‚’è§£æžå¯èƒ½ãªãƒ–ロックã«åˆ†å‰²ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れã¯ã€``start_block`` ディレクティブ㨠``end_block`` ディレクティブを使用ã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ã‚’è§£æžå¯èƒ½ãªãƒ–ロックã«åˆ†å‰²ã™ã‚‹ã“ã¨ã§è¡Œã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1150 msgid "The example above will parse the output of ``show interface`` into a list of hashes." msgstr "上ã®ä¾‹ã§ã¯ã€``show interface`` ã®å‡ºåŠ›ã‚’è§£æžã—ã¦ã€ãƒãƒƒã‚·ãƒ¥ã®ãƒªã‚¹ãƒˆã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1153 msgid "The network filters also support parsing the output of a CLI command using the TextFSM library. To parse the CLI output with TextFSM use the following filter::" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ィルターã¯ã€TextFSM ライブラリーを使用ã—㦠CLI コマンドã®å‡ºåŠ›ã®è§£æžã‚‚サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚TextFSM ã§ CLI 出力を解æžã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒ•ィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1159 msgid "Use of the TextFSM filter requires the TextFSM library to be installed." msgstr "TextFSM フィルターを使用ã™ã‚‹ã«ã¯ã€TextFSM ライブラリーをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1162 msgid "Network XML filters" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ XML フィルター" #: ../../rst/user_guide/playbooks_filters.rst:1166 msgid "To convert the XML output of a network device command into structured JSON output, use the ``parse_xml`` filter::" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‡ãƒã‚¤ã‚¹ã‚³ãƒžãƒ³ãƒ‰ã® XML 出力を構造化ã•れ㟠JSON 出力ã«å¤‰æ›ã™ã‚‹ã«ã¯ã€``parse_xml`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1171 msgid "The ``parse_xml`` filter will load the spec file and pass the command output through formatted as JSON." msgstr "``parse_xml`` フィルターã¯ã€spec ファイルを読ã¿è¾¼ã¿ã€JSON ã¨ã—ã¦ãƒ•ォーマットã•れãŸã‚³ãƒžãƒ³ãƒ‰å‡ºåŠ›ã‚’æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1174 msgid "The spec file should be valid formatted YAML. It defines how to parse the XML output and return JSON data." msgstr "ä»•æ§˜ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ‰åŠ¹ãª YAML å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚XML 出力を解æžã—ã€JSON ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™æ–¹æ³•を定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1177 msgid "Below is an example of a valid spec file that will parse the output from the ``show vlan | display xml`` command." msgstr "以下ã¯ã€``show vlan | display xml`` コマンドã®å‡ºåŠ›ã‚’è§£æžã™ã‚‹ãŸã‚ã®æœ‰åŠ¹ãª spec ファイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1205 msgid "The same command could be parsed into a hash by using the key and values directives. Here is an example of how to parse the output into a hash value using the same ``show vlan | display xml`` command." msgstr "åŒã˜ã‚³ãƒžãƒ³ãƒ‰ã§ã‚‚ã€éµã¨å€¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–を使用ã™ã‚‹ã“ã¨ã§ã€ãƒãƒƒã‚·ãƒ¥ã«è§£æžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã¯ã€åŒã˜ ``show vlan | display xml`` コマンドを使用ã—ã¦å‡ºåŠ›ã‚’ãƒãƒƒã‚·ãƒ¥å€¤ã«è§£æžã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1233 msgid "The value of ``top`` is the XPath relative to the XML root node. In the example XML output given below, the value of ``top`` is ``configuration/vlans/vlan``, which is an XPath expression relative to the root node (). ``configuration`` in the value of ``top`` is the outer most container node, and ``vlan`` is the inner-most container node." msgstr "``top`` ã®å€¤ã¯ã€XML ルートノードã«å¯¾ã™ã‚‹ç›¸å¯¾çš„㪠XPath ã§ã™ã€‚以下㮠XML 出力例ã§ã¯ã€``top`` ã®å€¤ã¯ ``configuration/vlans/vlan`` ã§ã‚りã€ã“れã¯ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ () ã«å¯¾ã™ã‚‹ç›¸å¯¾çš„㪠XPath å¼ã§ã™ã€‚``top`` ã®å€¤ã® ``configuration`` ã¯æœ€ã‚‚外å´ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ãƒŽãƒ¼ãƒ‰ã§ã‚りã€``vlan`` ã¯æœ€ã‚‚内å´ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ãƒŽãƒ¼ãƒ‰ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1239 msgid "``items`` is a dictionary of key-value pairs that map user-defined names to XPath expressions that select elements. The Xpath expression is relative to the value of the XPath value contained in ``top``. For example, the ``vlan_id`` in the spec file is a user defined name and its value ``vlan-id`` is the relative to the value of XPath in ``top``" msgstr "``items`` ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®åå‰ã‚’ã€è¦ç´ ã‚’é¸æŠžã™ã‚‹ XPath å¼ã«ãƒžãƒƒãƒ”ングã™ã‚‹ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã§ã™ã€‚Xpath å¼ã¯ã€``top`` ã«å«ã¾ã‚Œã‚‹ XPath 値ã®å€¤ã«å¯¾ã™ã‚‹ç›¸å¯¾å€¤ã§ã™ã€‚ãŸã¨ãˆã°ã€spec ファイル㮠``vlan_id`` ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã®åå‰ã§ã€ãã®å€¤ ``vlan-id`` ã¯ã€``top`` ã«å«ã¾ã‚Œã‚‹ XPath ã®å€¤ã«å¯¾ã™ã‚‹ç›¸å¯¾å€¤ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1244 msgid "Attributes of XML tags can be extracted using XPath expressions. The value of ``state`` in the spec is an XPath expression used to get the attributes of the ``vlan`` tag in output XML.::" msgstr "XML ã‚¿ã‚°ã®å±žæ€§ã¯ã€XPath å¼ã‚’用ã„ã¦æŠ½å‡ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚仕様書㮠``state`` ã®å€¤ã¯ã€å‡ºåŠ›ã•れ㟠XML ã® ``vlan`` ã‚¿ã‚°ã®å±žæ€§ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる XPath å¼ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1260 msgid "For more information on supported XPath expressions, see `XPath Support `_." msgstr "サãƒãƒ¼ãƒˆã•れる XPath å¼ã®è©³ç´°ã¯ã€ã€Œ`XPath Support `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:1263 msgid "Network VLAN filters" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ VLAN フィルター" #: ../../rst/user_guide/playbooks_filters.rst:1267 msgid "Use the ``vlan_parser`` filter to transform an unsorted list of VLAN integers into a sorted string list of integers according to IOS-like VLAN list rules. This list has the following properties:" msgstr "``vlan_parser`` フィルターを使用ã—ã¦ã€ã‚½ãƒ¼ãƒˆã•れã¦ã„ãªã„ VLAN æ•´æ•°ã®ãƒªã‚¹ãƒˆã‚’ã€IOS ã®ã‚ˆã†ãª VLAN リストã®ãƒ«ãƒ¼ãƒ«ã«å¾“ã£ã¦ã‚½ãƒ¼ãƒˆã•ã‚ŒãŸæ•´æ•°ã®æ–‡å­—列リストã«å¤‰æ›ã—ã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã«ã¯ä»¥ä¸‹ã®ãƒ—ロパティーãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1270 msgid "Vlans are listed in ascending order." msgstr "VLAN ã¯æ˜‡é †ã§ãƒªã‚¹ãƒˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1271 msgid "Three or more consecutive VLANs are listed with a dash." msgstr "3 ã¤ä»¥ä¸Šã®é€£ç¶šã—㟠VLAN ã¯ãƒ€ãƒƒã‚·ãƒ¥ä»˜ãã§ãƒªã‚¹ãƒˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1272 msgid "The first line of the list can be first_line_len characters long." msgstr "ãƒªã‚¹ãƒˆã®æœ€åˆã®è¡Œã¯ã€first_line_len 文字ã®é•·ã•ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1273 msgid "Subsequent list lines can be other_line_len characters." msgstr "後続ã®ãƒªã‚¹ãƒˆè¡Œã¯ã€other_line_len 文字ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1275 msgid "To sort a VLAN list::" msgstr "VLAN リストをソートã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1279 msgid "This example renders the following sorted list::" msgstr "ã“ã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã®ã‚½ãƒ¼ãƒˆãƒªã‚¹ãƒˆã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1284 msgid "Another example Jinja template::" msgstr "Jinja テンプレートã®ä»–ã®ä¾‹::" #: ../../rst/user_guide/playbooks_filters.rst:1292 msgid "This allows for dynamic generation of VLAN lists on a Cisco IOS tagged interface. You can store an exhaustive raw list of the exact VLANs required for an interface and then compare that to the parsed IOS output that would actually be generated for the configuration." msgstr "ã“れã«ã‚ˆã‚Šã€Cisco IOS タグ付ãインターフェース上㮠VLAN リストを動的ã«ç”Ÿæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚インターフェースã«å¿…è¦ãªæ­£ç¢ºãª VLAN ã®ç¶²ç¾…çš„ãªç”Ÿã®ãƒªã‚¹ãƒˆã‚’ä¿å­˜ã—ã€ãれを設定ã®ãŸã‚ã«å®Ÿéš›ã«ç”Ÿæˆã•れるã§ã‚ã‚ã†è§£æžã•れ㟠IOS å‡ºåŠ›ã¨æ¯”較ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1298 msgid "Encrypting and checksumming strings and passwords" msgstr "文字列ãŠã‚ˆã³ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã®æš—å·åŒ–ãŠã‚ˆã³ãƒã‚§ãƒƒã‚¯ã‚µãƒ " #: ../../rst/user_guide/playbooks_filters.rst:1302 msgid "To get the sha1 hash of a string::" msgstr "文字列㮠sha1 ãƒãƒƒã‚·ãƒ¥ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1307 msgid "To get the md5 hash of a string::" msgstr "文字列㮠md5 ãƒãƒƒã‚·ãƒ¥ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1312 msgid "Get a string checksum::" msgstr "文字列ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1317 msgid "Other hashes (platform dependent)::" msgstr "ãã®ä»–ã®ãƒãƒƒã‚·ãƒ¥ (プラットフォームã«ä¾å­˜)::" #: ../../rst/user_guide/playbooks_filters.rst:1321 msgid "To get a sha512 password hash (random salt)::" msgstr "sha512 パスワードãƒãƒƒã‚·ãƒ¥ (ä»»æ„ã® salt) ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1326 msgid "To get a sha256 password hash with a specific salt::" msgstr "特定㮠salt ã‚’æŒã¤ sha256 パスワードãƒãƒƒã‚·ãƒ¥ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1331 msgid "An idempotent method to generate unique hashes per system is to use a salt that is consistent between runs::" msgstr "システムã”ã¨ã«ä¸€æ„ã®ãƒãƒƒã‚·ãƒ¥ã‚’生æˆã™ã‚‹å†ªç­‰ãªæ–¹æ³•ã¯ã€å®Ÿè¡Œé–“ã§ä¸€è²«æ€§ã®ã‚ã‚‹ salt を使用ã™ã‚‹ã“ã¨ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1336 msgid "Hash types available depend on the control system running Ansible, 'hash' depends on `hashlib `_, password_hash depends on `passlib `_. The `crypt `_ is used as a fallback if ``passlib`` is not installed." msgstr "利用å¯èƒ½ãªãƒãƒƒã‚·ãƒ¥ã‚¿ã‚¤ãƒ—ã¯ã€Ansible を実行ã—ã¦ã„る制御システムã«ä¾å­˜ã—ã¦ãŠã‚Šã€ã€Œhashã€ã¯ `hashlib `_ ã«ã€ã€Œpassword_hashã€ã¯ `passlib `_ ã«ä¾å­˜ã—ã¦ã„ã¾ã™ã€‚`crypt `_ 㯠``passlib`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã®ãƒ•ォールãƒãƒƒã‚¯ã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1340 msgid "Some hash types allow providing a rounds parameter::" msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚¤ãƒ—ã«ã‚ˆã£ã¦ã¯ã€rounds パラメーターを指定ã§ãã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1345 msgid "Hash type 'blowfish' (BCrypt) provides the facility to specify the version of the BCrypt algorithm" msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚¤ãƒ— 'blowfish' (BCrypt) ã¯ã€BCrypt アルゴリズムã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1353 msgid "The parameter is only available for `blowfish (BCrypt) `_. Other hash types will simply ignore this parameter. Valid values for this parameter are: ['2', '2a', '2y', '2b']" msgstr "ã“ã®ãƒ‘ラメーターã¯ã€`blowfish (BCrypt) `_ ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ä»–ã®ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚¤ãƒ—ã¯ã€ã“ã®ãƒ‘ラメーターを無視ã—ã¾ã™ã€‚ã“ã®ãƒ‘ラメーターã«å¯¾ã™ã‚‹æœ‰åйãªå€¤ã¯ ['2', '2a', '2y', '2b'] ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1359 msgid "You can also use the Ansible :ref:`vault ` filter to encrypt data::" msgstr "Ansible ã® :ref:`vault ` フィルターを使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’æš—å·åŒ–ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1372 msgid "And then decrypt it using the unvault filter::" msgstr "ãã®å¾Œã€unvault フィルターを使用ã—ã¦å¾©å·ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1387 msgid "Manipulating text" msgstr "ãƒ†ã‚­ã‚¹ãƒˆã®æ“作" #: ../../rst/user_guide/playbooks_filters.rst:1389 msgid "Several filters work with text, including URLs, file names, and path names." msgstr "ã„ãã¤ã‹ã®ãƒ•ィルターã¯ã€URLã€ãƒ•ァイルåã€ãƒ‘スåãªã©ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’扱ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1394 msgid "Adding comments to files" msgstr "ファイルã¸ã®ã‚³ãƒ¡ãƒ³ãƒˆã®è¿½åŠ " #: ../../rst/user_guide/playbooks_filters.rst:1396 msgid "The ``comment`` filter lets you create comments in a file from text in a template, with a variety of comment styles. By default Ansible uses ``#`` to start a comment line and adds a blank comment line above and below your comment text. For example the following::" msgstr "``comment`` フィルターを使用ã™ã‚‹ã¨ã€ãƒ†ãƒ³ãƒ—レート内ã®ãƒ†ã‚­ã‚¹ãƒˆã‹ã‚‰ã€ã•ã¾ã–ã¾ãªã‚³ãƒ¡ãƒ³ãƒˆã‚¹ã‚¿ã‚¤ãƒ«ã§ãƒ•ァイル内ã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã®ãƒ‡ãƒ•ォルトã§ã¯ã€``#`` を使用ã—ã¦ã‚³ãƒ¡ãƒ³ãƒˆè¡Œã‚’é–‹å§‹ã—ã€ã‚³ãƒ¡ãƒ³ãƒˆãƒ†ã‚­ã‚¹ãƒˆã®ä¸Šä¸‹ã«ç©ºç™½ã®ã‚³ãƒ¡ãƒ³ãƒˆè¡Œã‚’追加ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1400 msgid "produces this output:" msgstr "次ã®å‡ºåŠ›ã‚’ç”Ÿæˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1408 msgid "Ansible offers styles for comments in C (``//...``), C block (``/*...*/``), Erlang (``%...``) and XML (````)::" msgstr "Ansibleã§ã¯ã€C (``//...``)ã€C ブロック (``/*...*/``)ã€Erlang (``%...``)ã€ãŠã‚ˆã³ XML (````) ã®ã‚³ãƒ¡ãƒ³ãƒˆç”¨ã‚¹ã‚¿ã‚¤ãƒ«ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1416 msgid "You can define a custom comment character. This filter::" msgstr "カスタムã®ã‚³ãƒ¡ãƒ³ãƒˆæ–‡å­—を定義ã§ãã¾ã™ã€‚ã“ã®ãƒ•ィルターã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1420 msgid "produces:" msgstr "生æˆ:" #: ../../rst/user_guide/playbooks_filters.rst:1428 msgid "You can fully customize the comment style::" msgstr "コメントスタイルを完全ã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1432 msgid "That creates the following output:" msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®å‡ºåŠ›ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1444 msgid "The filter can also be applied to any Ansible variable. For example to make the output of the ``ansible_managed`` variable more readable, we can change the definition in the ``ansible.cfg`` file to this:" msgstr "フィルターã¯ã€Ansible 変数ã«ã‚‚é©ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``ansible_managed`` 変数ã®å‡ºåŠ›ã‚’ã‚ˆã‚Šèª­ã¿ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€``ansible.cfg`` ファイルã®å®šç¾©ã‚’以下ã®ã‚ˆã†ã«å¤‰æ›´ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1458 msgid "and then use the variable with the `comment` filter::" msgstr "次ã«ã€`comment` フィルターã§å¤‰æ•°ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1462 msgid "which produces this output:" msgstr "ã“れã¯ã€æ¬¡ã®å‡ºåŠ›ã‚’ç”Ÿæˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1476 msgid "URLEncode Variables" msgstr "URLEncode 変数" #: ../../rst/user_guide/playbooks_filters.rst:1478 msgid "The ``urlencode`` filter quotes data for use in a URL path or query using UTF-8::" msgstr "``urlencode`` フィルターã¯ã€URL パスを使用ã€ã¾ãŸã¯ UTF-8 を使用ã—ãŸã‚¯ã‚¨ãƒªãƒ¼ã§ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’引用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1484 msgid "Splitting URLs" msgstr "URL ã®åˆ†å‰²" #: ../../rst/user_guide/playbooks_filters.rst:1488 msgid "The ``urlsplit`` filter extracts the fragment, hostname, netloc, password, path, port, query, scheme, and username from an URL. With no arguments, returns a dictionary of all the fields::" msgstr "``urlsplit`` フィルターã¯ã€URL ã‹ã‚‰ãƒ•ラグメントã€ãƒ›ã‚¹ãƒˆåã€netlocã€ãƒ‘スワードã€ãƒ‘スã€ãƒãƒ¼ãƒˆã€ã‚¯ã‚¨ãƒªãƒ¼ã€ã‚¹ã‚­ãƒ¼ãƒ ã€ãŠã‚ˆã³ãƒ¦ãƒ¼ã‚¶ãƒ¼åを抽出ã—ã¾ã™ã€‚引数ãŒãªã„å ´åˆã¯ã€ã™ã¹ã¦ã®ãƒ•ィールドã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1532 msgid "Searching strings with regular expressions" msgstr "æ­£è¦è¡¨ç¾ã‚’使用ã—ãŸæ–‡å­—åˆ—ã®æ¤œç´¢" #: ../../rst/user_guide/playbooks_filters.rst:1534 msgid "To search in a string or extract parts of a string with a regular expression, use the ``regex_search`` filter::" msgstr "æ–‡å­—åˆ—ã®æ¤œç´¢ã¾ãŸã¯æ­£è¦è¡¨ç¾ã§æ–‡å­—列ã®éƒ¨åˆ†ã‚’抽出ã™ã‚‹ã«ã¯ã€``regex_search`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1552 msgid "The ``regex_search`` filter returns an empty string if it cannot find a match::" msgstr "``regex_search`` フィルターã¯ã€ä¸€è‡´ã™ã‚‹ã‚‚ã®ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã«ç©ºã®æ–‡å­—列を返ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1557 msgid "Note that due to historic behavior and custom re-implementation of some of the Jinja internals in Ansible there is an exception to the behavior. When used in a Jinja expression (for example in conjunction with operators, other filters, and so on) the return value differs, in those situations the return value is ``none``. See the two examples below::" msgstr "Ansibleã®ä¸€éƒ¨ã®Jinja内部éŽåŽ»ã®å‹•作ã¨ã‚«ã‚¹ã‚¿ãƒ ã®å†å®Ÿè£…ã«ã‚ˆã‚Šã€å‹•作ã«ä¾‹å¤–ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。Jinjaå¼ã§ï¼ˆãŸã¨ãˆã°ã€æ¼”ç®—å­ã‚„ä»–ã®ãƒ•ィルターãªã©ã¨çµ„ã¿åˆã‚ã›ã¦ï¼‰ä½¿ç”¨ã™ã‚‹ã¨ã€æˆ»ã‚Šå€¤ã¯ç•°ãªã‚Šã¾ã™ã€‚ãã®ã‚ˆã†ãªçжæ³ã§ã¯ã€æˆ»ã‚Šå€¤ã¯ ``none`` ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚以下ã®2ã¤ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:1564 msgid "When ``jinja2_native`` setting is enabled, the ``regex_search`` filter always returns ``none`` if it cannot find a match." msgstr "``jinja2_native`` 設定を有効ã«ã™ã‚‹ã¨ã€``regex_search`` フィルターã¯ä¸€è‡´ã™ã‚‹ã‚‚ã®ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã«å¸¸ã« ``none`` ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1566 msgid "To extract all occurrences of regex matches in a string, use the ``regex_findall`` filter::" msgstr "文字列ã®ä¸­ã«ã‚ã‚‹æ­£è¦è¡¨ç¾ã®ä¸€è‡´ã®ã™ã¹ã¦ã®å‡ºç¾ç®‡æ‰€ã‚’抽出ã™ã‚‹ã«ã¯ã€``regex_findall`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1577 msgid "To replace text in a string with regex, use the ``regex_replace`` filter::" msgstr "文字列ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’æ­£è¦è¡¨ç¾ã«ç½®ãæ›ãˆã‚‹ã«ã¯ã€``regex_replace`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1600 msgid "If you want to match the whole string and you are using ``*`` make sure to always wraparound your regular expression with the start/end anchors. For example ``^(.*)$`` will always match only one result, while ``(.*)`` on some Python versions will match the whole string and an empty string at the end, which means it will make two replacements::" msgstr "文字列全体ã«ä¸€è‡´ã•ã›ãŸã„å ´åˆã« ``*`` を使用ã™ã‚‹å ´åˆã¯ã€å¿…ãšé–‹å§‹/çµ‚äº†ã‚¢ãƒ³ã‚«ãƒ¼ã§æ­£è¦è¡¨ç¾ã‚’折り返ã™ã‚ˆã†ã«ã—ã¦ãã ã•ã„。ãŸã¨ãˆã°ã€``^(.*)$`` ã¯å¸¸ã« 1 ã¤ã®çµæžœã®ã¿ã«ä¸€è‡´ã—ã¾ã™ãŒã€``(.*)`` ã¯ã„ãã¤ã‹ã® Python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ–‡å­—åˆ—å…¨ä½“ã¨æœ€å¾Œã«ç©ºã®æ–‡å­—列ã«ä¸€è‡´ã—ã¾ã™ã€‚ã¤ã¾ã‚Š 2 ã¤ã®ç½®æ›ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1621 msgid "Prior to ansible 2.0, if ``regex_replace`` filter was used with variables inside YAML arguments (as opposed to simpler 'key=value' arguments), then you needed to escape backreferences (for example, ``\\\\1``) with 4 backslashes (``\\\\\\\\``) instead of 2 (``\\\\``)." msgstr "ansible 2.0 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€(å˜ç´”ãªã€Œkey=valueã€å¼•æ•°ã§ã¯ãªã) ``regex_replace`` フィルターを YAML 引数内ã®å¤‰æ•°ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€å¾Œæ–¹å‚ç…§ (ãŸã¨ãˆã° ``\\\\1``) ã‚’ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ 2 㤠(``\\\\``) ã§ã¯ãªã 4 㤠(``\\\\\\\\``) ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1625 msgid "To escape special characters within a standard Python regex, use the ``regex_escape`` filter (using the default ``re_type='python'`` option)::" msgstr "標準㮠Python æ­£è¦è¡¨ç¾å†…ã§ç‰¹æ®Šæ–‡å­—をエスケープã™ã‚‹ã«ã¯ã€``regex_escape`` フィルターを使用ã—ã¾ã™ (デフォルト㮠``re_type='python'`` オプションを使用)。" #: ../../rst/user_guide/playbooks_filters.rst:1632 msgid "To escape special characters within a POSIX basic regex, use the ``regex_escape`` filter with the ``re_type='posix_basic'`` option::" msgstr "POSIX 基本正è¦è¡¨ç¾å†…ã§ç‰¹æ®Šæ–‡å­—をエスケープã™ã‚‹ã«ã¯ã€``regex_escape`` フィルターを ``re_type='posix_basic'`` オプションを付ã‘ã¦ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1639 msgid "Managing file names and path names" msgstr "ファイルåã¨ãƒ‘スåã®ç®¡ç†" #: ../../rst/user_guide/playbooks_filters.rst:1641 msgid "To get the last name of a file path, like 'foo.txt' out of '/etc/asdf/foo.txt'::" msgstr "「/etc/asdf/foo.txtã€ã®ã€Œfoo.txtã€ã®ã‚ˆã†ã«ã€ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹ã®æœ€å¾Œã®åå‰ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1645 msgid "To get the last name of a windows style file path (new in version 2.0)::" msgstr "ウィンドウスタイルã®ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹ã®æœ€å¾Œã®åå‰ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1649 msgid "To separate the windows drive letter from the rest of a file path (new in version 2.0)::" msgstr "Windows ãƒ‰ãƒ©ã‚¤ãƒ–ã®æ–‡å­—を残りã®ãƒ•ァイルパスã‹ã‚‰åˆ†é›¢ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1653 msgid "To get only the windows drive letter::" msgstr "Windows ãƒ‰ãƒ©ã‚¤ãƒ–ã®æ–‡å­—ã®ã¿ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1657 msgid "To get the rest of the path without the drive letter::" msgstr "ドライブ文字ãªã—ã§æ®‹ã‚Šã®ãƒ‘スをå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1661 msgid "To get the directory from a path::" msgstr "パスã‹ã‚‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1665 msgid "To get the directory from a windows path (new version 2.0)::" msgstr "Windows パスã‹ã‚‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1669 msgid "To expand a path containing a tilde (`~`) character (new in version 1.5)::" msgstr "ãƒãƒ«ãƒ‰ (`~`) 文字をå«ã‚€ãƒ‘スを拡張ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.5 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1673 msgid "To expand a path containing environment variables::" msgstr "環境変数をå«ã‚€ãƒ‘スを拡張ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1677 msgid "`expandvars` expands local variables; using it on remote paths can lead to errors." msgstr "`expandvars` ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã‚’æ‹¡å¼µã—ã¾ã™ã€‚リモートパスã§ä½¿ç”¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1681 msgid "To get the real path of a link (new in version 1.8)::" msgstr "リンクã®å®Ÿéš›ã®ãƒ‘スをå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.8 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1685 msgid "To get the relative path of a link, from a start point (new in version 1.7)::" msgstr "リンクã®ç›¸å¯¾ãƒ‘スをå–å¾—ã™ã‚‹ã«ã¯ã€é–‹å§‹ç‚¹ã‹ã‚‰ä»¥ä¸‹ã‚’行ã„ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.7 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1689 msgid "To get the root and extension of a path or file name (new in version 2.0)::" msgstr "パスã¾ãŸã¯ãƒ•ァイルåã®ãƒ«ãƒ¼ãƒˆãŠã‚ˆã³æ‹¡å¼µã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0 ã®æ–°æ©Ÿèƒ½)。" #: ../../rst/user_guide/playbooks_filters.rst:1694 msgid "The ``splitext`` filter always returns a pair of strings. The individual components can be accessed by using the ``first`` and ``last`` filters::" msgstr "``splitext`` フィルターã¯ã€å¸¸ã«æ–‡å­—列ã®ãƒšã‚¢ã‚’è¿”ã—ã¾ã™ã€‚個々ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€``first`` フィルターãŠã‚ˆã³ ``last`` フィルターを使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1702 msgid "To join one or more path components::" msgstr "1 ã¤ä»¥ä¸Šã®ãƒ‘スコンãƒãƒ¼ãƒãƒ³ãƒˆã‚’çµåˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1709 msgid "Manipulating strings" msgstr "æ–‡å­—åˆ—ã®æ“作" #: ../../rst/user_guide/playbooks_filters.rst:1711 msgid "To add quotes for shell usage::" msgstr "シェルã®ä½¿ç”¨ã«å¼•用符を追加ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1716 msgid "To concatenate a list into a string::" msgstr "リストを文字列ã«é€£çµã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1720 msgid "To split a string into a list::" msgstr "文字列をリストã«åˆ†å‰²ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1726 msgid "To work with Base64 encoded strings::" msgstr "Base64 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚ŒãŸæ–‡å­—列を使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1731 msgid "As of version 2.6, you can define the type of encoding to use, the default is ``utf-8``::" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.6 以é™ã§ã¯ã€ä½¿ç”¨ã™ã‚‹ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®ã‚¿ã‚¤ãƒ—を定義ã§ãã¾ã™ã€‚デフォルト㯠``utf-8`` ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1736 msgid "The ``string`` filter is only required for Python 2 and ensures that text to encode is a unicode string. Without that filter before b64encode the wrong value will be encoded." msgstr "``string`` フィルター㯠Python 2 ã§ã®ã¿å¿…è¦ã§ã™ã€‚エンコードã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆãŒãƒ¦ãƒ‹ã‚³ãƒ¼ãƒ‰æ–‡å­—列ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚b64encode よりå‰ã®ãƒ•ィルターを使用ã—ãªã„ã¨ã€èª¤ã£ãŸå€¤ãŒã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1741 msgid "Managing UUIDs" msgstr "UUID ã®ç®¡ç†" #: ../../rst/user_guide/playbooks_filters.rst:1743 msgid "To create a namespaced UUIDv5::" msgstr "namespace を使用ã—㟠UUIDv5 を作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1749 msgid "To create a namespaced UUIDv5 using the default Ansible namespace '361E6D51-FAEC-444A-9079-341386DA8E2E'::" msgstr "デフォルト㮠Ansible åå‰ç©ºé–“「361E6D51-FAEC-444A-9079-341386DA8E2E2Eã€ã‚’使用ã—ã¦åå‰ç©ºé–“を指定ã—㟠UUIDv5 を作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1755 msgid "To make use of one attribute from each item in a list of complex variables, use the :func:`Jinja2 map filter `::" msgstr "複雑ãªå¤‰æ•°ã®ãƒªã‚¹ãƒˆã§ã€å„é …ç›®ã‹ã‚‰ 1 ã¤ã®å±žæ€§ã‚’使用ã™ã‚‹ã«ã¯ã€:func:`Jinja2 map filter ` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1761 msgid "Handling dates and times" msgstr "æ—¥ä»˜ã¨æ™‚刻ã®å‡¦ç†" #: ../../rst/user_guide/playbooks_filters.rst:1763 msgid "To get a date object from a string use the `to_datetime` filter::" msgstr "文字列ã‹ã‚‰æ—¥ä»˜ã‚ªãƒ–ジェクトをå–å¾—ã™ã‚‹ã«ã¯ã€`to_datetime` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1775 msgid "For a full list of format codes for working with python date format strings, see https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior." msgstr "Python 日付形å¼ã®æ–‡å­—列を使用ã™ã‚‹å½¢å¼ã‚³ãƒ¼ãƒ‰ã®å…¨ä¸€è¦§ã¯ã€https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_filters.rst:1779 msgid "To format a date using a string (like with the shell date command), use the \"strftime\" filter::" msgstr "文字列 (shell date コマンドã®å ´åˆã®ã‚ˆã†ã«) を使用ã—ã¦æ—¥ä»˜ã‚’フォーマットã™ã‚‹ã«ã¯ã€ã€Œstrftimeã€ãƒ•ィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1797 msgid "To get all string possibilities, check https://docs.python.org/3/library/time.html#time.strftime" msgstr "ã™ã¹ã¦ã®æ–‡å­—列ã®å¯èƒ½æ€§ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€https://docs.python.org/3/library/time.html#time.strftime を確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1800 msgid "Getting Kubernetes resource names" msgstr "Kubernetes リソースåã®å–å¾—" #: ../../rst/user_guide/playbooks_filters.rst:1804 msgid "These filters have migrated to the `kubernetes.core `_ collection. Follow the installation instructions to install that collection." msgstr "ã“れらã®ãƒ•ィルター㯠`kubernetes.core `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚インストール手順ã«å¾“ã£ã¦ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1806 msgid "Use the \"k8s_config_resource_name\" filter to obtain the name of a Kubernetes ConfigMap or Secret, including its hash::" msgstr "「k8s_config_resource_nameã€ãƒ•ィルターを使用ã—ã¦ã€Kubernetes ConfigMap ã¾ãŸã¯ Secret ã®åå‰ã‚’ã€ãã®ãƒãƒƒã‚·ãƒ¥ã‚’å«ã‚ã¦å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1811 msgid "This can then be used to reference hashes in Pod specifications::" msgstr "ã“れã¯ã€Pod 仕様ã®ãƒãƒƒã‚·ãƒ¥ã‚’å‚ç…§ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters.rst:1837 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:725 #: ../../rst/user_guide/playbooks_loops.rst:434 #: ../../rst/user_guide/playbooks_strategies.rst:216 #: ../../rst/user_guide/playbooks_variables.rst:449 #: ../../rst/user_guide/windows_faq.rst:244 #: ../../rst/user_guide/windows_setup.rst:574 msgid ":ref:`about_playbooks`" msgstr ":ref:`about_playbooks`" #: ../../rst/user_guide/playbooks_filters.rst:1843 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:733 #: ../../rst/user_guide/playbooks_lookups.rst:32 #: ../../rst/user_guide/playbooks_reuse.rst:212 #: ../../rst/user_guide/playbooks_reuse_includes.rst:23 #: ../../rst/user_guide/playbooks_reuse_roles.rst:612 #: ../../rst/user_guide/playbooks_templating.rst:50 #: ../../rst/user_guide/playbooks_tests.rst:394 #: ../../rst/user_guide/playbooks_variables.rst:455 msgid ":ref:`playbooks_loops`" msgstr ":ref:`playbooks_loops`" #: ../../rst/user_guide/playbooks_filters.rst:1844 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:734 #: ../../rst/user_guide/playbooks_lookups.rst:33 #: ../../rst/user_guide/playbooks_templating.rst:51 #: ../../rst/user_guide/playbooks_tests.rst:395 #: ../../rst/user_guide/playbooks_variables.rst:456 msgid "Looping in playbooks" msgstr "Playbook ã§ã®ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:6 msgid "ipaddr filter" msgstr "ipaddr フィルター" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:10 msgid "``ipaddr()`` is a Jinja2 filter designed to provide an interface to the `netaddr`_ Python package from within Ansible. It can operate on strings or lists of items, test various data to check if they are valid IP addresses, and manipulate the input data to extract requested information. ``ipaddr()`` works with both IPv4 and IPv6 addresses in various forms. There are also additional functions available to manipulate IP subnets and MAC addresses." msgstr "``ipaddr()`` ã¯ã€`netaddr`_ Python パッケージã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを Ansible 内ã‹ã‚‰æä¾›ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れ㟠Jinja2 フィルターã§ã™ã€‚文字列や項目ã®ãƒªã‚¹ãƒˆã‚’æ“作ã—ãŸã‚Šã€ã•ã¾ã–ã¾ãªãƒ‡ãƒ¼ã‚¿ãŒæœ‰åŠ¹ãª IP アドレスã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’テストã—ãŸã‚Šã€å…¥åŠ›ãƒ‡ãƒ¼ã‚¿ã‚’æ“作ã—ã¦è¦æ±‚ã•ã‚ŒãŸæƒ…報を抽出ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``ipaddr()`` ã¯ã€ã•ã¾ã–ã¾ãªå½¢å¼ã® IPv4 㨠IPv6 ã®ä¸¡æ–¹ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’扱ã„ã¾ã™ã€‚ã¾ãŸã€IP サブãƒãƒƒãƒˆã‚„ MAC アドレスをæ“作ã™ã‚‹ãŸã‚ã®è¿½åŠ æ©Ÿèƒ½ã‚‚ç”¨æ„ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:19 msgid "The ``ipaddr()`` filter migrated to the `ansible.netcommon `_ collection. Follow the installation instructions to install that collection." msgstr "``ipaddr()`` フィルター㯠`ansible.netcommon `_ コレクションã«ç§»è¡Œã—ã¾ã—ãŸã€‚インストール手順ã«å¾“ã£ã¦ãã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’インストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:21 msgid "To use this filter in Ansible, you need to install the `netaddr`_ Python library on a computer on which you use Ansible (it is not required on remote hosts). It can usually be installed with either your system package manager or using ``pip``::" msgstr "ã“ã®ãƒ•ィルターを Ansible ã§ä½¿ç”¨ã™ã‚‹ã«ã¯ã€Ansible を使用ã™ã‚‹ã‚³ãƒ³ãƒ”ューター㫠`netaddr`_ Python ライブラリーをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ (リモートホストã§ã¯å¿…è¦ã‚りã¾ã›ã‚“)。通常ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‹ã€``pip`` を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:34 #: ../../rst/user_guide/playbooks_roles.rst:7 #: ../../rst/user_guide/windows_dsc.rst:5 #: ../../rst/user_guide/windows_usage.rst:9 #: ../../rst/user_guide/windows_winrm.rst:9 msgid "Topics" msgstr "トピック" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:37 msgid "Basic tests" msgstr "基本的ãªãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:39 msgid "``ipaddr()`` is designed to return the input value if a query is True, and ``False`` if a query is False. This way it can be easily used in chained filters. To use the filter, pass a string to it:" msgstr "``ipaddr()`` ã¯ã€ã‚¯ã‚¨ãƒªãƒ¼ãŒ True ã®å ´åˆã¯å…¥åŠ›å€¤ã‚’è¿”ã—ã€False ã®å ´åˆã¯``False`` ã‚’è¿”ã™ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€é€£éŽ–ã—ãŸãƒ•ィルターã§ç°¡å˜ã«ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ï¼Žã“ã®ãƒ•ィルターを使用ã™ã‚‹ã«ã¯ã€æ–‡å­—列を渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:47 msgid "You can also pass the values as variables::" msgstr "変数ã¨ã—ã¦å€¤ã‚’渡ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:51 msgid "Here are some example test results of various input strings::" msgstr "以下ã¯ã€ã•ã¾ã–ã¾ãªå…¥åŠ›æ–‡å­—åˆ—ã®ãƒ†ã‚¹ãƒˆçµæžœã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:69 msgid "Sometimes you need either IPv4 or IPv6 addresses. To filter only for a particular type, ``ipaddr()`` filter has two \"aliases\", ``ipv4()`` and ``ipv6()``." msgstr "IPv4 アドレスã¾ãŸã¯ IPv6 アドレスã®ã„ãšã‚Œã‹ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚特定ã®ã‚¿ã‚¤ãƒ—ã«å¯¾ã—ã¦ãƒ•ィルターã§çµžã‚Šè¾¼ã‚€ãŸã‚ã€``ipaddr()`` フィルターã«ã¯ ``ipv4()`` 㨠``ipv6()`` ã¨ã„ㆠ2 ã¤ã®ã€Œã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:72 msgid "Example use of an IPv4 filter::" msgstr "IPv4 フィルターã®ä½¿ç”¨ä¾‹:" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:76 msgid "A similar example of an IPv6 filter::" msgstr "åŒæ§˜ã®ã€IPv6 フィルターã®ä½¿ç”¨ä¾‹:" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:80 msgid "Here's some example test results to look for IPv4 addresses::" msgstr "以下ã¯ã€IPv4 アドレスを検索ã™ã‚‹ãƒ†ã‚¹ãƒˆçµæžœã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:88 msgid "And the same data filtered for IPv6 addresses::" msgstr "IPv6 アドレスã«ãƒ•ィルターãŒè¨­å®šã•れãŸãƒ‡ãƒ¼ã‚¿:" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:98 msgid "Filtering lists" msgstr "リストã¸ã®ãƒ•ィルター設定" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:100 msgid "You can filter entire lists - ``ipaddr()`` will return a list with values valid for a particular query::" msgstr "リスト全体ã«ãƒ•ィルターを設定ã§ãã¾ã™ã€‚``ipaddr()`` ã¯ã€ç‰¹å®šã®ã‚¯ã‚¨ãƒªãƒ¼ã«æœ‰åйãªå€¤ã‚’æŒã¤ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:117 msgid "Wrapping IPv6 addresses in [ ] brackets" msgstr "[ ] 括弧㧠IPv6 アドレスã®ãƒ©ãƒƒãƒ”ング" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:119 msgid "Some configuration files require IPv6 addresses to be \"wrapped\" in square brackets (``[ ]``). To accomplish that, you can use the ``ipwrap()`` filter. It will wrap all IPv6 addresses and leave any other strings intact::" msgstr "一部ã®è¨­å®šãƒ•ァイルã§ã¯ã€IPv6 アドレスを角括弧 (``[ ]``) ã§ã€Œå›²ã‚€ã€å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€``ipwrap()`` フィルターを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã® IPv6 アドレスを囲ã¿ã€ãã®ä»–ã®æ–‡å­—列ã¯ãã®ã¾ã¾æ®‹ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:126 msgid "As you can see, ``ipwrap()`` did not filter out non-IP address values, which is usually what you want when for example you are mixing IP addresses with hostnames. If you still want to filter out all non-IP address values, you can chain both filters together::" msgstr "ã”覧ã®ã‚ˆã†ã«ã€``ipwrap()`` ã¯ã€IP アドレス以外ã®å€¤ã«ãƒ•ィルターを設定ã—ã¦é™¤å¤–ã—ã¦ã„ã¾ã›ã‚“。ã“れã¯ã€IP アドレスã¨ãƒ›ã‚¹ãƒˆåãŒæ··åœ¨ã—ã¦ã„ã‚‹å ´åˆãªã©ã«å¿…è¦ã¨ãªã‚‹ã‚‚ã®ã§ã™ã€‚ãれã§ã‚‚ãªãŠã€IP アドレス以外ã®ã™ã¹ã¦ã®å€¤ã«ãƒ•ィルターを設定ã—ã¦é™¤å¤–ã—ãŸã„å ´åˆã¯ã€ä¸¡æ–¹ã®ãƒ•ィルターを連鎖ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:136 msgid "Basic queries" msgstr "基本クエリー" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:138 msgid "You can provide a single argument to each ``ipaddr()`` filter. The filter will then treat it as a query and return values modified by that query. Lists will contain only values that you are querying for." msgstr "``ipaddr()`` ã®å„フィルターã«ã¯ã€1 ã¤ã®å¼•数を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚フィルターã¯ãれをクエリーã¨ã—ã¦æ‰±ã„ã€ãã®ã‚¯ã‚¨ãƒªãƒ¼ã§å¤‰æ›´ã•れãŸå€¤ã‚’è¿”ã—ã¾ã™ã€‚リストã«ã¯ã€ã‚¯ã‚¨ãƒªãƒ¼ã§æŒ‡å®šã—ãŸå€¤ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:142 msgid "Types of queries include:" msgstr "クエリーã®ç¨®é¡žã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:144 msgid "query by name: ``ansible.netcommon.ipaddr('address')``, ``ansible.netcommon.ipv4('network')``;" msgstr "åå‰ã«ã‚ˆã‚‹ã‚¯ã‚¨ãƒªãƒ¼: ``ansible.netcommon.ipaddr('address')``ã€``ansible.netcommon.ipv4('network')``" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:145 msgid "query by CIDR range: ``ansible.netcommon.ipaddr('192.168.0.0/24')``, ``ansible.netcommon.ipv6('2001:db8::/32')``;" msgstr "CIDR 範囲ã«ã‚ˆã‚‹ã‚¯ã‚¨ãƒªãƒ¼: ``ansible.netcommon.ipaddr('192.168.0.0/24')``ã€``ansible.netcommon.ipv6('2001:db8::/32')``" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:146 msgid "query by index number: ``ansible.netcommon.ipaddr('1')``, ``ansible.netcommon.ipaddr('-1')``;" msgstr "インデックス番å·ã«ã‚ˆã‚‹ã‚¯ã‚¨ãƒªãƒ¼: ``ansible.netcommon.ipaddr('1')``ã€``ansible.netcommon.ipaddr('-1')``" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:148 msgid "If a query type is not recognized, Ansible will raise an error." msgstr "クエリータイプãŒèªè­˜ã•れãªã„ã¨ã€Ansible ã¯ã‚¨ãƒ©ãƒ¼ã‚’発生ã•ã›ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:152 msgid "Getting information about hosts and networks" msgstr "ホストãŠã‚ˆã³ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«é–¢ã™ã‚‹æƒ…å ±ã®å–å¾—" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:154 #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:357 msgid "Here's our test list again::" msgstr "ã“ã“ã§ã¯ã€ãƒ†ã‚¹ãƒˆãƒªã‚¹ãƒˆã‚’å†åº¦ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:159 msgid "Let's take the list above and get only those elements that are host IP addresses and not network ranges::" msgstr "上ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲ã§ã¯ãªãホスト IP アドレスã®è¦ç´ ã ã‘ã‚’å–り出ã—ã¦ã¿ã¾ã—ょã†ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:165 msgid "As you can see, even though some values had a host address with a CIDR prefix, they were dropped by the filter. If you want host IP addresses with their correct CIDR prefixes (as is common with IPv6 addressing), you can use the ``ipaddr('host')`` filter::" msgstr "ã”覧ã®ã‚ˆã†ã«ã€CIDR プレフィックスをæŒã¤ãƒ›ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’æŒã¤å€¤ãŒã‚ã£ã¦ã‚‚ã€ãƒ•ィルターã«ã‚ˆã£ã¦ç ´æ£„ã•れã¦ã„ã¾ã™ã€‚æ­£ã—ã„ CIDR プレフィックスをæŒã¤ãƒ›ã‚¹ãƒˆ IP アドレスãŒå¿…è¦ãªå ´åˆ (IPv6 アドレスã§ã¯ä¸€èˆ¬çš„) ã¯ã€``ipaddr('host')`` フィルターを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:173 msgid "Filtering by IP address type also works::" msgstr "IP アドレスタイプã«ã‚ˆã‚‹ãƒ•ィルタリングも機能ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:181 msgid "You can check if IP addresses or network ranges are accessible on a public Internet, or if they are in private networks::" msgstr "IP アドレスやãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲ãŒã€ãƒ‘ブリックãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆä¸Šã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã‹ã€ãƒ—ライベートãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã«ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:190 msgid "You can check which values are specifically network ranges::" msgstr "特定ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲ã®å€¤ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:195 msgid "You can also check how many IP addresses can be in a certain range::" msgstr "特定ã®ç¯„囲内ã«ã‚ã‚‹ IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ•°ã‚’確èªã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:200 msgid "By specifying a network range as a query, you can check if a given value is in that range::" msgstr "クエリーã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¯„囲を指定ã™ã‚‹ã“ã¨ã§ã€æŒ‡å®šã—ãŸå€¤ãŒãã®ç¯„囲内ã«ã‚ã‚‹ã‹ã©ã†ã‹ã‚’調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:206 msgid "If you specify a positive or negative integer as a query, ``ipaddr()`` will treat this as an index and will return the specific IP address from a network range, in the 'host/prefix' format::" msgstr "æ­£ã¾ãŸã¯è² ã®æ•´æ•°ã‚’クエリーã¨ã—ã¦æŒ‡å®šã™ã‚‹ã¨ã€``ipaddr()`` ã¯ã“れをインデックスã¨ã—ã¦æ‰±ã„ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ç¯„囲ã‹ã‚‰ç‰¹å®šã® IP アドレスを「host/prefixã€å½¢å¼ã§è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:222 msgid "You can also select IP addresses from a range by their index, from the start or end of the range::" msgstr "ã¾ãŸã€ç¯„囲内㮠IP アドレスをã€ç¯„å›²ã®æœ€åˆã¾ãŸã¯æœ€å¾Œã‹ã‚‰ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã§é¸æŠžã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:238 msgid "Getting information from host/prefix values" msgstr "ホスト/プレフィックスã®å€¤ã‹ã‚‰ã®æƒ…å ±ã®å–å¾—" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:240 msgid "You frequently use a combination of IP addresses and subnet prefixes (\"CIDR\"), this is even more common with IPv6. The ``ansible.netcommon.ipaddr()`` filter can extract useful data from these prefixes." msgstr "IP アドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒ—レフィックス (「CIDRã€) ã®çµ„ã¿åˆã‚ã›ãŒé »ç¹ã«ä½¿ç”¨ã•れã¾ã™ã€‚ã“れ㯠IPv6 ã§ã¯ã‚ˆã‚Šä¸€èˆ¬çš„ã§ã™ã€‚``ansible.netcommon.ipaddr()`` フィルターã¯ã€ã“れらã®ãƒ—レフィックスã‹ã‚‰æœ‰ç”¨ãªãƒ‡ãƒ¼ã‚¿ã‚’抽出ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:244 msgid "Here's an example set of two host prefixes (with some \"control\" values)::" msgstr "以下ã¯ã€ãƒ›ã‚¹ãƒˆãƒ—レフィックス (「制御ã€ã®å€¤ã‚’å«ã‚€) ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:248 msgid "First, let's make sure that we only work with correct host/prefix values, not just subnets or single IP addresses::" msgstr "ã¾ãšã€ã‚µãƒ–ãƒãƒƒãƒˆã‚„å˜ä¸€ã® IP アドレスã§ã¯ãªãã€æ­£ã—ã„ホスト/プレフィックスã®å€¤ã®ã¿ã‚’扱ã†ã“ã¨ã‚’確èªã—ã¾ã—ょã†ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:254 msgid "In Debian-based systems, the network configuration stored in the ``/etc/network/interfaces`` file uses a combination of IP address, network address, netmask and broadcast address to configure an IPv4 network interface. We can get these values from a single 'host/prefix' combination:" msgstr "Debian ベースã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã€``/etc/network/interfaces`` ファイルã«ä¿å­˜ã•れã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨­å®šã§ã¯ã€IP アドレスã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã€ãƒ–ロードキャストアドレスã®çµ„ã¿åˆã‚ã›ã‚’使用ã—ã¦ã€IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを設定ã—ã¾ã™ã€‚ã“れらã®å€¤ã¯ã€1ã¤ã®ã€Œhost/prefixã€ã®çµ„ã¿åˆã‚ã›ã‹ã‚‰å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:273 msgid "In the above example, we needed to handle the fact that values were stored in a list, which is unusual in IPv4 networks, where only a single IP address can be set on an interface. However, IPv6 networks can have multiple IP addresses set on an interface:" msgstr "上ã®ä¾‹ã§ã¯ã€å€¤ãŒãƒªã‚¹ãƒˆã«æ ¼ç´ã•れã¦ã„ã‚‹ã“ã¨ã‚’処ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã—ãŸã€‚ã“れã¯ã€1 ã¤ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース㫠1 ã¤ã® IP アドレスã—ã‹è¨­å®šã§ããªã„ IPv4 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã¯çã—ã„ã“ã¨ã§ã™ã€‚ã—ã‹ã—ã€IPv6 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã§ã¯ã€1 ã¤ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«è¤‡æ•°ã® IP アドレスを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:295 msgid "If needed, you can extract subnet and prefix information from the 'host/prefix' value:" msgstr "å¿…è¦ãªå ´åˆã¯ã€ã€Œhost/prefixã€å€¤ã‹ã‚‰ã‚µãƒ–ãƒãƒƒãƒˆãŠã‚ˆã³ãƒ—レフィックス情報を抽出ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:306 msgid "Converting subnet masks to CIDR notation" msgstr "サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã® CIDR 表記ã¸ã®å¤‰æ›" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:308 msgid "Given a subnet in the form of network address and subnet mask, the ``ipaddr()`` filter can convert it into CIDR notation. This can be useful for converting Ansible facts gathered about network configuration from subnet masks into CIDR format::" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã®å½¢å¼ã§ã‚µãƒ–ãƒãƒƒãƒˆãŒä¸Žãˆã‚‰ã‚Œã‚‹ã¨ã€``ipaddr()`` フィルターã¯ãれを CIDR 表記ã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‹ã‚‰ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æ§‹æˆã«ã¤ã„ã¦åŽé›†ã—㟠Ansible ã®ãƒ•ァクトを CIDR å½¢å¼ã«å¤‰æ›ã™ã‚‹éš›ã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:323 msgid "First concatenate the network and netmask::" msgstr "最åˆã«ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¨ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’連çµã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:328 msgid "This result can be converted to canonical form with ``ipaddr()`` to produce a subnet in CIDR format::" msgstr "ã“れã«ã‚ˆã‚Šã€``ipaddr()`` ã§æ­£å‰‡å½¢å¼ã«å¤‰æ›ã—ã¦ã€CIDR å½¢å¼ã§ã‚µãƒ–ãƒãƒƒãƒˆã‚’生æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:338 msgid "Getting information about the network in CIDR notation" msgstr "CIDR 表記ã§ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æƒ…å ±ã®å–å¾—" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:340 msgid "Given an IP address, the ``ipaddr()`` filter can produce the network address in CIDR notation. This can be useful when you want to obtain the network address from the IP address in CIDR format." msgstr "IP アドレスを指定ã™ã‚‹ã¨ã€``ipaddr()`` フィルターã¯ã€CIDR 表記ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’生æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€CIDR å½¢å¼ã® IP アドレスã‹ã‚‰ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:343 msgid "Here's an example of IP address::" msgstr "以下㯠IP アドレスã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:348 msgid "This can be used to obtain the network address in CIDR notation format::" msgstr "ã“れã¯ã€CIDR 表記形å¼ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:355 msgid "IP address conversion" msgstr "IP アドレス変æ›" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:362 msgid "You can convert IPv4 addresses into IPv6 addresses::" msgstr "IPv4 アドレスを IPv6 アドレスã«å¤‰æ›ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:367 msgid "Converting from IPv6 to IPv4 works very rarely::" msgstr "IPv6 ã‹ã‚‰ IPv4 ã¸ã®å¤‰æ›ã¯ã»ã¨ã‚“ã©æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:372 msgid "But we can make a double conversion if needed::" msgstr "ãŸã ã—ã€å¿…è¦ã«å¿œã˜ã¦äºŒé‡å¤‰æ›ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:377 msgid "You can convert IP addresses to integers, the same way that you can convert integers into IP addresses::" msgstr "æ•´æ•°ã‚’ IP アドレスã«å¤‰æ›ã™ã‚‹ã®ã¨åŒã˜æ–¹æ³•ã§ã€IP アドレスを整数ã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:383 msgid "You can convert IPv4 address to `Hexadecimal notation `_ with optional delimiter::" msgstr "ä»»æ„ã®åŒºåˆ‡ã‚Šæ–‡å­—を使用ã—ã¦ã€IPv4 アドレスを `16 進表記 `_ ã«å¤‰æ›ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:390 msgid "You can convert IP addresses to PTR records::" msgstr "IP アドレスを PTR レコードã«å¤‰æ›ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:403 msgid "Converting IPv4 address to a 6to4 address" msgstr "IPv4 アドレス㮠6to4 アドレスã¸ã®å¤‰æ›" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:405 msgid "A `6to4`_ tunnel is a way to access the IPv6 Internet from an IPv4-only network. If you have a public IPv4 address, you can automatically configure its IPv6 equivalent in the ``2002::/16`` network range. After conversion you will gain access to a ``2002:xxxx:xxxx::/48`` subnet which could be split into 65535 ``/64`` subnets if needed." msgstr "`6to4`_ トンãƒãƒ«ã¯ã€IPv4 ã®ã¿ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ IPv6 インターãƒãƒƒãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®æ‰‹æ®µã§ã™ã€‚パブリック IPv4 アドレスãŒã‚ã‚‹å ´åˆã¯ã€ãã® IPv6 相当ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ ``2002::/16`` ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲内ã«è‡ªå‹•çš„ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変æ›å¾Œã¯ã€``2002:xxxx:xxxx::/48`` サブãƒãƒƒãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒå¯èƒ½ã«ãªã‚Šã€å¿…è¦ã«å¿œã˜ã¦ 65535 ``/64`` サブãƒãƒƒãƒˆã«åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:411 msgid "To convert your IPv4 address, just send it through the ``'6to4'`` filter. It will be automatically converted to a router address (with a ``::1/48`` host address)::" msgstr "IPv4 アドレスを変æ›ã™ã‚‹ã«ã¯ã€``'6to4'`` フィルターã«é€šã™ã ã‘ã§ã™ã€‚自動的ã«ãƒ«ãƒ¼ã‚¿ãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ (ホストアドレス㯠``::1/48``) ã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:421 msgid "Finding IP addresses within a range" msgstr "範囲内㮠IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æ¤œç´¢" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:423 msgid "To find usable IP addresses within an IP range, try these ``ipaddr`` filters:" msgstr "IP 範囲内ã§ä½¿ç”¨å¯èƒ½ãª IP アドレスを見ã¤ã‘ã‚‹ã«ã¯ã€ä»¥ä¸‹ã® ``ipaddr`` フィルターを試行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:425 msgid "To find the next usable IP address in a range, use ``next_usable`` ::" msgstr "ç¯„å›²å†…ã®æ¬¡ã®ä½¿ç”¨å¯èƒ½ãª IP アドレスを見ã¤ã‘ã‚‹ã«ã¯ã€``next_usable`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:430 msgid "To find the last usable IP address from a range, use ``last_usable``::" msgstr "範囲ã‹ã‚‰æœ€å¾Œã®ä½¿ç”¨å¯èƒ½ãª IP アドレスを見ã¤ã‘ã‚‹ã«ã¯ã€``last_usable`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:435 msgid "To find the available range of IP addresses from the given network address, use ``range_usable``::" msgstr "指定ã—ãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã‚‰åˆ©ç”¨å¯èƒ½ãª IP アドレスã®ç¯„囲を検索ã™ã‚‹ã«ã¯ã€``range_usable`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:440 msgid "To find the peer IP address for a point to point link, use ``peer``::" msgstr "ãƒã‚¤ãƒ³ãƒˆãƒ„ーãƒã‚¤ãƒ³ãƒˆã®ãƒªãƒ³ã‚¯ã®ãƒ”ã‚¢ IP アドレスを検索ã™ã‚‹ã«ã¯ã€``peer`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:447 msgid "To return the nth ip from a network, use the filter ``nthhost``::" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ nth ip ã«æˆ»ã‚‹ã«ã¯ã€ãƒ•ィルター ``nthhost`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:452 msgid "``nthhost`` also supports a negative value::" msgstr "``nthhost`` ã¯ã€è² ã®å€¤ã‚‚サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:457 msgid "To find the next nth usable IP address in relation to another within a range, use ``next_nth_usable`` In the example, ``next_nth_usable`` returns the second usable IP address for the given IP range::" msgstr "範囲内ã®åˆ¥ã® IP ã¨ã®é–¢ä¿‚ã§ã€æ¬¡ã® n 番目ã«ä½¿ç”¨å¯èƒ½ãª IP アドレスを見ã¤ã‘ã‚‹ã«ã¯ã€``next_nth_usable`` を使用ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``next_nth_usable`` ãŒã€æŒ‡å®šã® IP 範囲㫠2 番目ã®ä½¿ç”¨å¯èƒ½ãª IP アドレスを返ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:463 msgid "If there is no usable address, it returns an empty string::" msgstr "使用å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãªã„å ´åˆã¯ã€ç©ºã®æ–‡å­—列を返ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:468 msgid "Just like ``next_nth_ansible``, you have ``previous_nth_usable`` to find the previous usable address::" msgstr "``next_nth_ansible`` ã¨åŒæ§˜ã« ``previous_nth_usable`` ãŒã‚りã€ä»¥å‰ã®ä½¿ç”¨å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’見ã¤ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:475 msgid "Testing if a address belong to a network range" msgstr "アドレスãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ç¯„囲ã«å±žã™ã‚‹ã‹ã©ã†ã‹ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:477 msgid "The ``network_in_usable`` filter returns whether an address passed as an argument is usable in a network. Usable addresses are addresses that can be assigned to a host. The network ID and the broadcast address are not usable addresses.::" msgstr "``network_in_usable`` フィルターã¯ã€å¼•æ•°ã¨ã—ã¦æ¸¡ã•れãŸã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§ä½¿ç”¨å¯èƒ½ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚使用å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã¯ã€ãƒ›ã‚¹ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãるアドレスã§ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ ID やブロードキャストアドレスã¯ä½¿ç”¨å¯èƒ½ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:490 msgid "The ``network_in_network`` filter returns whether an address or a network passed as argument is in a network.::" msgstr "``network_in_network`` フィルターã¯ã€å¼•æ•°ã¨ã—ã¦æ¸¡ã•れãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å†…ã«ã‚ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:505 msgid "To check whether multiple addresses belong to a network, use the ``reduce_on_network`` filter::" msgstr "複数ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«å±žã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã«ã¯ã€``reduce_on_network`` フィルターを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:512 msgid "IP Math" msgstr "IP 計算" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:516 msgid "The ``ipmath()`` filter can be used to do simple IP math/arithmetic." msgstr "``ipmath()`` フィルターã¯ã€å˜ç´”㪠IP 計算/演算をã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:518 msgid "Here are a few simple examples::" msgstr "以下ã¯ç°¡å˜ãªä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:552 msgid "Subnet manipulation" msgstr "サブãƒãƒƒãƒˆæ“作" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:554 msgid "The ``ipsubnet()`` filter can be used to manipulate network subnets in several ways." msgstr "``ipsubnet()`` フィルターã¯ã€ã•ã¾ã–ã¾ãªæ–¹æ³•ã§ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ–ãƒãƒƒãƒˆã‚’æ“作ã™ã‚‹ã®ã«ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:556 msgid "Here is an example IP address and subnet::" msgstr "IP アドレスã¨ã‚µãƒ–ãƒãƒƒãƒˆã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:561 msgid "To check if a given string is a subnet, pass it through the filter without any arguments. If the given string is an IP address, it will be converted into a subnet::" msgstr "ç‰¹å®šã®æ–‡å­—列ãŒã‚µãƒ–ãƒãƒƒãƒˆã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã«ã¯ã€å¼•æ•°ãªã—ã§ãƒ•ィルターを渡ã—ã¾ã™ã€‚æŒ‡å®šã®æ–‡å­—列㌠IP アドレスã®å ´åˆã¯ã€ã‚µãƒ–ãƒãƒƒãƒˆã«å¤‰æ›ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:571 msgid "If you specify a subnet size as the first parameter of the ``ipsubnet()`` filter, and the subnet size is **smaller than the current one**, you will get the number of subnets a given subnet can be split into::" msgstr "``ipsubnet()`` ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã®æœ€åˆã®ãƒ‘ラメーターã«ã‚µãƒ–ãƒãƒƒãƒˆã‚µã‚¤ã‚ºã‚’指定ã—ã€ãã®ã‚µãƒ–ãƒãƒƒãƒˆã‚µã‚¤ã‚ºãŒ **ç¾åœ¨ã®ã‚‚ã®ã‚ˆã‚Šå°ã•ã„å ´åˆ**ã€æŒ‡å®šã•れãŸã‚µãƒ–ãƒãƒƒãƒˆãŒåˆ†å‰²ã§ãるサブãƒãƒƒãƒˆã®æ•°ãŒå¾—られã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:578 msgid "The second argument of the ``ipsubnet()`` filter is an index number; by specifying it you can get a new subnet with the specified size::" msgstr "``ipsubnet()`` フィルターã®ç¬¬ 2 引数ã¯ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ç•ªå·ã§ã€ã“れを指定ã™ã‚‹ã“ã¨ã§ã€æŒ‡å®šã—ãŸã‚µã‚¤ã‚ºã®æ–°ã—ã„サブãƒãƒƒãƒˆã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:597 msgid "If you specify an IP address instead of a subnet, and give a subnet size as the first argument, the ``ipsubnet()`` filter will instead return the biggest subnet that contains that given IP address::" msgstr "サブãƒãƒƒãƒˆã®ä»£ã‚り㫠IP アドレスを指定ã—ã€ç¬¬ 1 引数ã«ã‚µãƒ–ãƒãƒƒãƒˆã‚µã‚¤ã‚ºã‚’指定ã—ãŸå ´åˆã€``ipsubnet()`` フィルターã¯ã€ä»£ã‚ã‚Šã«æŒ‡å®šã•れ㟠IP アドレスをå«ã‚€æœ€å¤§ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:604 msgid "By specifying an index number as a second argument, you can select smaller and smaller subnets::" msgstr "第 2 引数ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ç•ªå·ã‚’指定ã™ã‚‹ã“ã¨ã§ã€ã‚ˆã‚Šå°ã•ãªã‚µãƒ–ãƒãƒƒãƒˆã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:623 msgid "By specifying another subnet as a second argument, if the second subnet includes the first, you can determine the rank of the first subnet in the second ::" msgstr "別ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’ 2 番目ã®å¼•æ•°ã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã§ã€2 番目ã®ã‚µãƒ–ãƒãƒƒãƒˆã«æœ€åˆã®ã‚µãƒ–ãƒãƒƒãƒˆãŒå«ã¾ã‚Œã‚‹å ´åˆã¯ã€2 番目ã®ã‚µãƒ–ãƒãƒƒãƒˆã§æœ€åˆã®ã‚µãƒ–ãƒãƒƒãƒˆã®é †ä½ã‚’決定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:642 msgid "If the second subnet doesn't include the first subnet, the ``ipsubnet()`` filter raises an error." msgstr "2 ã¤ç›®ã®ã‚µãƒ–ãƒãƒƒãƒˆã« 1 ã¤ç›®ã®ã‚µãƒ–ãƒãƒƒãƒˆãŒå«ã¾ã‚Œã¦ã„ãªã„å ´åˆã€``ipsubnet()`` フィルターã¯ã‚¨ãƒ©ãƒ¼ã‚’出力ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:645 msgid "You can use the ``ipsubnet()`` filter with the ``ipaddr()`` filter to, for example, split a given ``/48`` prefix into smaller ``/64`` subnets::" msgstr "``ipsubnet()`` フィルター㨠``ipaddr()`` フィルターを併用ã™ã‚‹ã“ã¨ã§ã€ãŸã¨ãˆã°ã€``/48`` プレフィックスをよりå°ã•㪠``/64`` サブãƒãƒƒãƒˆã«åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:651 msgid "Because of the size of IPv6 subnets, iteration over all of them to find the correct one may take some time on slower computers, depending on the size difference between the subnets." msgstr "IPv6 サブãƒãƒƒãƒˆã¯ã‚µã‚¤ã‚ºãŒå¤§ãã„ãŸã‚ã€æ­£ã—ã„サブãƒãƒƒãƒˆã‚’見ã¤ã‘ã‚‹ãŸã‚ã«ã™ã¹ã¦ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’å復処ç†ã™ã‚‹ã¨ã€é…ã„コンピューターã§ã¯ã‚µãƒ–ãƒãƒƒãƒˆé–“ã®ã‚µã‚¤ã‚ºå·®ã«å¿œã˜ã¦æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:657 msgid "Subnet Merging" msgstr "サブãƒãƒƒãƒˆã®ãƒžãƒ¼ã‚¸" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:661 msgid "The ``cidr_merge()`` filter can be used to merge subnets or individual addresses into their minimal representation, collapsing overlapping subnets and merging adjacent ones wherever possible::" msgstr "``cidr_merge()`` フィルターã¯ã€ã‚µãƒ–ãƒãƒƒãƒˆã‚„個々ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’最å°ã®è¡¨ç¾ã«çµ±åˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã€é‡è¤‡ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆã‚’折りãŸãŸã¿ã€å¯èƒ½ãªé™ã‚Šéš£æŽ¥ã™ã‚‹ã‚µãƒ–ãƒãƒƒãƒˆã‚’マージã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:671 msgid "Changing the action from 'merge' to 'span' will instead return the smallest subnet which contains all of the inputs::" msgstr "アクションを「mergeã€ã‹ã‚‰ã€Œspanã€ã«å¤‰æ›´ã™ã‚‹ã¨ã€ä»£ã‚りã«å…¥åŠ›ã®ã™ã¹ã¦ã‚’å«ã‚€æœ€å°ã®ã‚µãƒ–ãƒãƒƒãƒˆã‚’è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:682 msgid "MAC address filter" msgstr "MAC アドレスフィルター" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:684 msgid "You can use the ``hwaddr()`` filter to check if a given string is a MAC address or convert it between various formats. Examples::" msgstr "``hwaddr()`` フィルターを使用ã—ã¦ã€ä¸Žãˆã‚‰ã‚ŒãŸæ–‡å­—列㌠MAC アドレスã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ãŸã‚Šã€ã•ã¾ã–ã¾ãªãƒ•ォーマット間ã§å¤‰æ›ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:702 msgid "The supported formats result in the following conversions for the ``1a:2b:3c:4d:5e:6f`` MAC address::" msgstr "サãƒãƒ¼ãƒˆã•れる形å¼ã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®å¤‰æ›ã§ã€MAC アドレス ``1a:2b:3c:4d:5e:6f`` ã«å¯¾ã—ã¦ã€ä»¥ä¸‹ã®ã‚ˆã†ãªå¤‰æ›ãŒè¡Œã‚れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:714 msgid "Generate an IPv6 address in Stateless Configuration (SLAAC)" msgstr "ステートレス設定 (SLAAC) ã§ IPv6 アドレスを生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:716 msgid "the filter ``slaac()`` generates an IPv6 address for a given network and a MAC Address in Stateless Configuration::" msgstr "フィルター ``slaac()`` ã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹è¨­å®šã®æŒ‡å®šã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŠã‚ˆã³ MAC アドレス㫠IPv6 アドレスを生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:723 msgid "`ansible.netcommon `_" msgstr "`ansible.netcommon `_" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:724 msgid "Ansible network collection for common code" msgstr "一般的ãªã‚³ãƒ¼ãƒ‰ã® Ansible ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³" #: ../../rst/user_guide/playbooks_filters_ipaddr.rst:728 msgid "Introduction to Jinja2 filters and their uses" msgstr "Jinja2 ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã®æ¦‚è¦ãŠã‚ˆã³ãã®ç”¨é€”" #: ../../rst/user_guide/playbooks_handlers.rst:4 msgid "Handlers: running operations on change" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼: 変更時ã«å®Ÿè¡Œã™ã‚‹æ“作" #: ../../rst/user_guide/playbooks_handlers.rst:6 msgid "Sometimes you want a task to run only when a change is made on a machine. For example, you may want to restart a service if a task updates the configuration of that service, but not if the configuration is unchanged. Ansible uses handlers to address this use case. Handlers are tasks that only run when notified. Each handler should have a globally unique name." msgstr "マシンã«å¤‰æ›´ãŒåŠ ãˆã‚‰ã‚ŒãŸã¨ãã«ã®ã¿ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¿ã‚¹ã‚¯ãŒã‚µãƒ¼ãƒ“スã®è¨­å®šã‚’æ›´æ–°ã—ãŸå ´åˆã¯ã‚µãƒ¼ãƒ“スをå†èµ·å‹•ã—ã€è¨­å®šãŒå¤‰æ›´ã—ã¦ã„ãªã„å ´åˆã«ã¯å†èµ·å‹•ã—ãªã„よã†ã«ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚Ansible ã§ã¯ã€ã“ã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã™ã‚‹ãŸã‚ã«ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’使用ã—ã¦ã„ã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€é€šçŸ¥ã•れãŸã¨ãã«ã®ã¿å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã§ã™ã€‚å„ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«ã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«ä¸€æ„ãªåå‰ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:12 msgid "Handler example" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ä¾‹" #: ../../rst/user_guide/playbooks_handlers.rst:14 msgid "This playbook, ``verify-apache.yml``, contains a single play with a handler::" msgstr "ã“ã® Playbook ``verify-apache.yml`` ã«ã¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’使用ã—㟠1 ã¤ã®ãƒ—レイãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:47 msgid "In this example playbook, the second task notifies the handler. A single task can notify more than one handler::" msgstr "ã“ã® Playbook ã®ä¾‹ã§ã¯ã€2 番目ã®ã‚¿ã‚¹ã‚¯ãŒãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«é€šçŸ¥ã—ã¾ã™ã€‚å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã¯è¤‡æ•°ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«é€šçŸ¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:69 msgid "Controlling when handlers run" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å®Ÿè¡Œæ™‚ã®åˆ¶å¾¡" #: ../../rst/user_guide/playbooks_handlers.rst:71 msgid "By default, handlers run after all the tasks in a particular play have been completed. This approach is efficient, because the handler only runs once, regardless of how many tasks notify it. For example, if multiple tasks update a configuration file and notify a handler to restart Apache, Ansible only bounces Apache once to avoid unnecessary restarts." msgstr "デフォルトã§ã¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€ç‰¹å®šã®ãƒ—レイã«ãŠã‘ã‚‹ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒå®Œäº†ã—ãŸå¾Œã«å®Ÿè¡Œã—ã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€ã„ãã¤ã®ã‚¿ã‚¹ã‚¯ãŒé€šçŸ¥ã—ãŸã‹ã«é–¢ã‚らãšã€ä¸€åº¦ã ã‘実行ã™ã‚‹ãŸã‚ã€ã“ã®ã‚¢ãƒ—ローãƒã¯åŠ¹çŽ‡çš„ã§ã™ã€‚ãŸã¨ãˆã°ã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ãŒè¨­å®šãƒ•ァイルを更新ã—ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã« Apache ã®å†èµ·å‹•を通知ã—ãŸå ´åˆã€Ansible 㯠Apache ã‚’ 1 回ã ã‘ãƒã‚¦ãƒ³ã‚¹ã•ã›ã€ä¸è¦ãªå†èµ·å‹•を回é¿ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:73 msgid "If you need handlers to run before the end of the play, add a task to flush them using the :ref:`meta module `, which executes Ansible actions::" msgstr "プレイã®çµ‚了å‰ã«ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€Ansible アクションを実行ã™ã‚‹ :ref:`meta module ` を使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã‚’フラッシュã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:85 msgid "The ``meta: flush_handlers`` task triggers any handlers that have been notified at that point in the play." msgstr "``meta: flush_handlers`` タスクã¯ã€ãƒ—レイã®ãã®æ™‚点ã§é€šçŸ¥ã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’発生ã•ã›ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:88 msgid "Using variables with handlers" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã§ã®å¤‰æ•°ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_handlers.rst:90 msgid "You may want your Ansible handlers to use variables. For example, if the name of a service varies slightly by distribution, you want your output to show the exact name of the restarted service for each target machine. Avoid placing variables in the name of the handler. Since handler names are templated early on, Ansible may not have a value available for a handler name like this::" msgstr "Ansible ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã§å¤‰æ•°ã‚’使用ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚µãƒ¼ãƒ“スã®åå‰ãŒãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã«ã‚ˆã£ã¦ã‚ãšã‹ã«ç•°ãªã‚‹å ´åˆã«ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã”ã¨ã«å†èµ·å‹•ã—ãŸã‚µãƒ¼ãƒ“ã‚¹ã®æ­£ç¢ºãªåå‰ã‚’出力ã™ã‚‹ã¨ã—ã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®åå‰ã«å¤‰æ•°ã‚’入れãªã„ã§ãã ã•ã„。ãƒãƒ³ãƒ‰ãƒ©ãƒ¼åã¯åˆæœŸæ®µéšŽã§ãƒ†ãƒ³ãƒ—レート化ã•れã¦ã„ã‚‹ãŸã‚ã€Ansible ã§ã¯æ¬¡ã®ã‚ˆã†ãªãƒãƒ³ãƒ‰ãƒ©ãƒ¼åã«åˆ©ç”¨ã§ãる値ãŒãªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:96 msgid "If the variable used in the handler name is not available, the entire play fails. Changing that variable mid-play **will not** result in newly created handler." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼åã§ä½¿ç”¨ã•れる変数ãŒåˆ©ç”¨ã§ããªã„å ´åˆã¯ã€ãƒ—レイ全体ãŒå¤±æ•—ã—ã¾ã™ã€‚変数 mid-play を変更ã™ã‚‹ã¨ã€æ–°ã—ã作æˆã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒ **作æˆã•れã¾ã›ã‚“**。" #: ../../rst/user_guide/playbooks_handlers.rst:98 msgid "Instead, place variables in the task parameters of your handler. You can load the values using ``include_vars`` like this:" msgstr "代ã‚りã«ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ã‚¿ã‚¹ã‚¯ãƒ‘ラメーターã«å¤‰æ•°ã‚’é…ç½®ã—ã¾ã™ã€‚以下ã®ã‚ˆã†ã« ``include_vars`` を使用ã—ã¦ã€å€¤ã‚’読ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:112 msgid "Handlers can also \"listen\" to generic topics, and tasks can notify those topics as follows::" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ä¸€èˆ¬çš„ãªãƒˆãƒ”ックを「リッスンã€ã™ã‚‹ã“ã¨ã‚‚ã§ãã€ã‚¿ã‚¹ã‚¯ã¯æ¬¡ã®ã‚ˆã†ã«ãれらã®ãƒˆãƒ”ックã«é€šçŸ¥ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:132 msgid "This use makes it much easier to trigger multiple handlers. It also decouples handlers from their names, making it easier to share handlers among playbooks and roles (especially when using 3rd party roles from a shared source like Galaxy)." msgstr "ã“れã«ã‚ˆã‚Šã€è¤‡æ•°ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’ç°¡å˜ã«ç™ºç”Ÿã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’åå‰ã‹ã‚‰åˆ‡ã‚Šé›¢ã™ã“ã¨ã§ã€Playbook やロール間ã§ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å…±æœ‰ãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ (特㫠Galaxy ã®ã‚ˆã†ãªå…±æœ‰ã‚½ãƒ¼ã‚¹ã‹ã‚‰ã‚µãƒ¼ãƒ‰ãƒ‘ーティーã®ãƒ­ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å ´åˆ)。" #: ../../rst/user_guide/playbooks_handlers.rst:137 msgid "Handlers always run in the order they are defined, not in the order listed in the notify-statement. This is also the case for handlers using `listen`." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€notify-statement ã«è¨˜è¼‰ã•れã¦ã„る順番ã§ã¯ãªãã€å¸¸ã«å®šç¾©ã•れã¦ã„る順番ã§å®Ÿè¡Œã—ã¾ã™ã€‚ã“れã¯ã€`listen` を使用ã—ã¦ã„ã‚‹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«ã‚‚当ã¦ã¯ã¾ã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:138 msgid "Handler names and `listen` topics live in a global namespace." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼å㨠`listen` トピックã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ãªåå‰ç©ºé–“ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:139 msgid "Handler names are templatable and `listen` topics are not." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼åã¯ä¸€æ™‚çš„ãªã‚‚ã®ã§ã™ãŒã€`listen` トピックã¯ä¸€æ™‚çš„ã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_handlers.rst:140 msgid "Use unique handler names. If you trigger more than one handler with the same name, the first one(s) get overwritten. Only the last one defined will run." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®åå‰ã¯ä¸€æ„ã«ã—ã¦ãã ã•ã„。åŒã˜åå‰ã§è¤‡æ•°ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’発生ã•ã›ã‚‹å ´åˆã€æœ€åˆã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ä¸Šæ›¸ãã•れã¾ã™ã€‚最後ã«å®šç¾©ã•れãŸã‚‚ã®ã ã‘ãŒå®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:141 msgid "You can notify a handler defined inside a static include." msgstr "é™çš„インクルードã®ä¸­ã§å®šç¾©ã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’通知ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:142 msgid "You cannot notify a handler defined inside a dynamic include." msgstr "å‹•çš„ãªã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰å†…ã§å®šç¾©ã•れãŸãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’通知ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_handlers.rst:143 msgid "A handler can not run import_role or include_role." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ import_role ã¾ãŸã¯ include_role を実行ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_handlers.rst:145 msgid "When using handlers within roles, note that:" msgstr "ロール内ã§ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_handlers.rst:147 msgid "handlers notified within ``pre_tasks``, ``tasks``, and ``post_tasks`` sections are automatically flushed at the end of section where they were notified." msgstr "``pre_tasks`` セクションã€``tasks`` セクションã€ãŠã‚ˆã³ ``post_tasks`` セクション内ã§é€šçŸ¥ã•れるãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€é€šçŸ¥ã•れãŸã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€å¾Œã«è‡ªå‹•çš„ã«ãƒ•ラッシュã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:148 msgid "handlers notified within ``roles`` section are automatically flushed at the end of ``tasks`` section, but before any ``tasks`` handlers." msgstr "``roles``セクション内ã§é€šçŸ¥ã•れるãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€``tasks`` ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€å¾Œã§ã¯ãªãã€``tasks`` ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å‰ã«è‡ªå‹•çš„ã«ãƒ•ラッシュã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_handlers.rst:149 msgid "handlers are play scoped and as such can be used outside of the role they are defined in." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã‚¹ã‚³ãƒ¼ãƒ—ã®ã‚るプレイã§ã‚ã‚‹ãŸã‚ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯å®šç¾©ã•れã¦ã„るロールã®å¤–ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:6 msgid "Intro to playbooks" msgstr "Playbook ã®æ¦‚è¦" #: ../../rst/user_guide/playbooks_intro.rst:8 msgid "Ansible Playbooks offer a repeatable, re-usable, simple configuration management and multi-machine deployment system, one that is well suited to deploying complex applications. If you need to execute a task with Ansible more than once, write a playbook and put it under source control. Then you can use the playbook to push out new configuration or confirm the configuration of remote systems. The playbooks in the `ansible-examples repository `_ illustrate many useful techniques. You may want to look at these in another tab as you read the documentation." msgstr "Ansible Playbook ã¯ã€ç¹°ã‚Šè¿”ã—使用å¯èƒ½ã§ã€å†åˆ©ç”¨å¯èƒ½ãªã‚·ãƒ³ãƒ—ãƒ«ãªæ§‹æˆç®¡ç†ãŠã‚ˆã³è¤‡æ•°ãƒžã‚·ãƒ³ã®ãƒ‡ãƒ—ロイメントシステムã§ã‚りã€è¤‡é›‘ãªã‚¢ãƒ—リケーションã®ãƒ‡ãƒ—ロイメントã«é©ã—ã¦ã„ã¾ã™ã€‚Ansible ã§è¤‡æ•°å›žã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€Playbook を作æˆã—ã¦ã‚½ãƒ¼ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ä¸‹ã«ç½®ãã¾ã™ã€‚ãã®å¾Œã€Playbook を使用ã—ã¦ã€æ–°ã—ã„設定をプッシュアウトã—ãŸã‚Šã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®è¨­å®šã‚’確èªã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`ansible-examples リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã® Playbook ã«ã¯ã€å¤šãã®ä¾¿åˆ©ãªãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ãŒç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚ドキュメントを読ã¿ãªãŒã‚‰ã€ã“れらを別ã®ã‚¿ãƒ–ã§è¦‹ã¦ã¿ã‚‹ã®ã‚‚ã„ã„ã‹ã‚‚ã—れã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_intro.rst:10 msgid "Playbooks can:" msgstr "Playbook ã¯ã€ä»¥ä¸‹ã®ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:12 msgid "declare configurations" msgstr "宣言設定" #: ../../rst/user_guide/playbooks_intro.rst:13 msgid "orchestrate steps of any manual ordered process, on multiple sets of machines, in a defined order" msgstr "複数ã®ãƒžã‚·ãƒ³ã‚»ãƒƒãƒˆã§ã€æ‰‹å‹•ã§é †åºä»˜ã‘ã•れãŸãƒ—ãƒ­ã‚»ã‚¹ã®æ‰‹é †ã‚’定義ã•れãŸé †åºã§ç·¨æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:14 msgid "launch tasks synchronously or :ref:`asynchronously `" msgstr "ã‚¿ã‚¹ã‚¯ã‚’åŒæœŸã¾ãŸã¯ :ref:`éžåŒæœŸ ` ã§èµ·å‹•" #: ../../rst/user_guide/playbooks_intro.rst:22 msgid "Playbook syntax" msgstr "Playbook æ§‹æ–‡" #: ../../rst/user_guide/playbooks_intro.rst:24 msgid "Playbooks are expressed in YAML format with a minimum of syntax. If you are not familiar with YAML, look at our overview of :ref:`yaml_syntax` and consider installing an add-on for your text editor (see :ref:`other_tools_and_programs`) to help you write clean YAML syntax in your playbooks." msgstr "Playbook ã¯æœ€å°é™ã®æ§‹æ–‡ã§ YAML å½¢å¼ã§è¡¨ç¾ã•れã¾ã™ã€‚YAML ã«æ…£ã‚Œã¦ã„ãªã„æ–¹ã¯ã€:ref:`yaml_syntax` ã®æ¦‚è¦ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã€Playbook ã«ãれã„㪠YAML 構文を書ããŸã‚ã«ã€ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ç”¨ã®ã‚¢ãƒ‰ã‚ªãƒ³ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’検討ã—ã¦ãã ã•ã„ (「:ref:`other_tools_and_programs`ã€ã‚’å‚ç…§)。" #: ../../rst/user_guide/playbooks_intro.rst:26 msgid "A playbook is composed of one or more 'plays' in an ordered list. The terms 'playbook' and 'play' are sports analogies. Each play executes part of the overall goal of the playbook, running one or more tasks. Each task calls an Ansible module." msgstr "Playbook ã¯ã€1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ã€Œãƒ—レイã€ã‚’順番ã«ä¸¦ã¹ãŸã‚‚ã®ã§ã™ã€‚「Playbookã€ã¨ã€Œãƒ—レイã€ã¨ã„ã†è¨€è‘‰ã¯ã€ã‚¹ãƒãƒ¼ãƒ„ã«ä¾‹ãˆã‚‰ã‚Œã¦ã„ã¾ã™ã€‚å„プレイã¯ã€Playbook ã®å…¨ä½“çš„ãªç›®æ¨™ã®ä¸€éƒ¨ã‚’実行ã—ã€1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚å„タスクã¯ã€Ansible モジュールを呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:29 msgid "Playbook execution" msgstr "Playbook 実行" #: ../../rst/user_guide/playbooks_intro.rst:31 msgid "A playbook runs in order from top to bottom. Within each play, tasks also run in order from top to bottom. Playbooks with multiple 'plays' can orchestrate multi-machine deployments, running one play on your webservers, then another play on your database servers, then a third play on your network infrastructure, and so on. At a minimum, each play defines two things:" msgstr "Playbook ã¯ã€ä¸Šã‹ã‚‰ä¸‹ã«å‘ã‹ã£ã¦é †ç•ªã«å®Ÿè¡Œã•れã¾ã™ã€‚å„プレイã®ä¸­ã§ã¯ã€ã‚¿ã‚¹ã‚¯ã‚‚上ã‹ã‚‰ä¸‹ã®é †ã«å®Ÿè¡Œã•れã¾ã™ã€‚複数ã®ã€Œãƒ—レイã€ã‚’æŒã¤ Playbook ã§ã¯ã€è¤‡æ•°ã®ãƒžã‚·ãƒ³ã®ãƒ‡ãƒ—ロイメントを編æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚るプレイを Web サーãƒãƒ¼ã§å®Ÿè¡Œã—ãŸå¾Œã€åˆ¥ã®ãƒ—レイをデータベースサーãƒãƒ¼ã§å®Ÿè¡Œã—ã€ã•ら㫠3 ã¤ç›®ã®ãƒ—レイをãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã§å®Ÿè¡Œã™ã‚‹ã¨ã„ã£ãŸå…·åˆã§ã™ã€‚最低é™ã€å„プレイ㯠2 ã¤ã®ã“ã¨ã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:33 msgid "the managed nodes to target, using a :ref:`pattern `" msgstr ":ref:`pattern ` を使用ã™ã‚‹ç®¡ç†ãƒŽãƒ¼ãƒ‰ãŒå¯¾è±¡ã§ã‚ã‚‹" #: ../../rst/user_guide/playbooks_intro.rst:34 msgid "at least one task to execute" msgstr "実行ã™ã¹ã 1 ã¤ä»¥ä¸Šã®ã‚¿ã‚¹ã‚¯" #: ../../rst/user_guide/playbooks_intro.rst:38 msgid "In Ansible 2.10 and later, we recommend you use the fully-qualified collection name in your playbooks to ensure the correct module is selected, because multiple collections can contain modules with the same name (for example, ``user``). See :ref:`collections_using_playbook`." msgstr "Ansible 2.10 以é™ã§ã¯ã€è¤‡æ•°ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«åŒã˜åå‰ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ãŒã‚ã‚‹ãŸã‚ (例: ``user``)ã€æ­£ã—ã„モジュールãŒé¸æŠžã•れるよã†ã«ã€Playbook ã§å®Œå…¨ä¿®é£¾ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³åを使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚「:ref:`collections_using_playbook`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_intro.rst:40 msgid "In this example, the first play targets the web servers; the second play targets the database servers::" msgstr "ã“ã®ä¾‹ã§ã¯ã€ç¬¬ 1 ã®ãƒ—レイ㯠Web サーãƒãƒ¼ã‚’対象ã¨ã—ã€ç¬¬ 2 ã®ãƒ—レイã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã‚’対象ã¨ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:71 msgid "Your playbook can include more than just a hosts line and tasks. For example, the playbook above sets a ``remote_user`` for each play. This is the user account for the SSH connection. You can add other :ref:`playbook_keywords` at the playbook, play, or task level to influence how Ansible behaves. Playbook keywords can control the :ref:`connection plugin `, whether to use :ref:`privilege escalation `, how to handle errors, and more. To support a variety of environments, Ansible lets you set many of these parameters as command-line flags, in your Ansible configuration, or in your inventory. Learning the :ref:`precedence rules ` for these sources of data will help you as you expand your Ansible ecosystem." msgstr "Playbook ã«ã¯ã€ãƒ›ã‚¹ãƒˆãƒ©ã‚¤ãƒ³ã¨ã‚¿ã‚¹ã‚¯ä»¥å¤–ã®æƒ…報もå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šè¨˜ã® Playbook ã§ã¯ã€å„プレイ㫠``remote_user`` を設定ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€SSH 接続用ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚Playbookã€ãƒ—レイã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ä»–ã® :ref:`playbook_keywords` を追加ã—ã¦ã€Ansible ã®å‹•作ã«å½±éŸ¿ã‚’与ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§ã¯ã€:ref:`connection プラグイン ` ã§ã€:ref:`特権昇格 ` を使用ã™ã‚‹ã‹ã©ã†ã‹ã€ã‚¨ãƒ©ãƒ¼ã‚’ã©ã®ã‚ˆã†ã«å‡¦ç†ã™ã‚‹ã‹ãªã©ã‚’制御ã§ãã¾ã™ã€‚ã•ã¾ã–ã¾ãªç’°å¢ƒã«å¯¾å¿œã™ã‚‹ãŸã‚ã€Ansible ã§ã¯ã€ã“れらã®ãƒ‘ラメーターã®å¤šãをコマンドラインフラグã€Ansible ã®æ§‹æˆã€ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ãƒ‡ãƒ¼ã‚¿ã‚½ãƒ¼ã‚¹ã® :ref:`優先順ä½ã®ãƒ«ãƒ¼ãƒ« ` ã‚’å­¦ã¶ã“ã¨ã¯ã€Ansible ã®ã‚¨ã‚³ã‚·ã‚¹ãƒ†ãƒ ã‚’æ‹¡å¼µã™ã‚‹éš›ã«å½¹ç«‹ã¡ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:76 msgid "Task execution" msgstr "タスクã®å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_intro.rst:78 msgid "By default, Ansible executes each task in order, one at a time, against all machines matched by the host pattern. Each task executes a module with specific arguments. When a task has executed on all target machines, Ansible moves on to the next task. You can use :ref:`strategies ` to change this default behavior. Within each play, Ansible applies the same task directives to all hosts. If a task fails on a host, Ansible takes that host out of the rotation for the rest of the playbook." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€ãƒ›ã‚¹ãƒˆãƒ‘ターンã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ã«å¯¾ã—ã¦ã€å„タスクを 1 ã¤ãšã¤é †ç•ªã«å®Ÿè¡Œã—ã¾ã™ã€‚å„タスクã¯ã€ç‰¹å®šã®å¼•æ•°ã‚’æŒã¤ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚タスクãŒã™ã¹ã¦ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã§å®Ÿè¡Œã™ã‚‹ã¨ã€Ansible ã¯æ¬¡ã®ã‚¿ã‚¹ã‚¯ã«ç§»ã‚Šã¾ã™ã€‚ã“ã®ãƒ‡ãƒ•ォルトã®å‹•作を変更ã™ã‚‹ã«ã¯ã€:ref:`ストラテジー ` を使用ã—ã¾ã™ã€‚å„プレイã®ä¸­ã§ã€Ansible ã¯åŒã˜ã‚¿ã‚¹ã‚¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã‚’ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã—ã¾ã™ã€‚ã‚るホストã§ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã—ãŸå ´åˆã€Ansible ã¯ãã®ãƒ›ã‚¹ãƒˆã‚’ Playbook ã®æ®‹ã‚Šã®éƒ¨åˆ†ã®ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰å¤–ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:80 msgid "When you run a playbook, Ansible returns information about connections, the ``name`` lines of all your plays and tasks, whether each task has succeeded or failed on each machine, and whether each task has made a change on each machine. At the bottom of the playbook execution, Ansible provides a summary of the nodes that were targeted and how they performed. General failures and fatal \"unreachable\" communication attempts are kept separate in the counts." msgstr "Playbook を実行ã™ã‚‹ã¨ã€Ansible ã¯æŽ¥ç¶šã«é–¢ã™ã‚‹æƒ…å ±ã€ã™ã¹ã¦ã®ãƒ—レイã¨ã‚¿ã‚¹ã‚¯ã® ``name`` 行ã€å„タスクãŒå„ãƒžã‚·ãƒ³ã§æˆåŠŸã—ãŸã‹å¤±æ•—ã—ãŸã‹ã€ãŠã‚ˆã³å„タスクãŒå„マシンã§å¤‰æ›´ã‚’行ã£ãŸã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚Playbook ã®å®Ÿè¡Œã®æœ€å¾Œã«ã€Ansible ã¯ã€å¯¾è±¡ã¨ãªã£ãŸãƒŽãƒ¼ãƒ‰ã¨ãã®ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ã®æ¦‚è¦ã‚’表示ã—ã¾ã™ã€‚一般的ãªå¤±æ•—ã¨è‡´å‘½çš„ãªã€Œåˆ°é”ä¸èƒ½ã€ã®é€šä¿¡è©¦è¡Œã¯ã€ã‚«ã‚¦ãƒ³ãƒˆã®ä¸­ã§åˆ†ã‘ã¦è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:85 msgid "Desired state and 'idempotency'" msgstr "希望ã®çŠ¶æ…‹ãŠã‚ˆã³ã€Œå†ªç­‰æ€§ã€" #: ../../rst/user_guide/playbooks_intro.rst:87 msgid "Most Ansible modules check whether the desired final state has already been achieved, and exit without performing any actions if that state has been achieved, so that repeating the task does not change the final state. Modules that behave this way are often called 'idempotent.' Whether you run a playbook once, or multiple times, the outcome should be the same. However, not all playbooks and not all modules behave this way. If you are unsure, test your playbooks in a sandbox environment before running them multiple times in production." msgstr "ã»ã¨ã‚“ã©ã® Ansible モジュールã¯ã€ç›®çš„ã®æœ€çµ‚状態ãŒã™ã§ã«é”æˆã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã€ãã®çŠ¶æ…‹ãŒé”æˆã•れã¦ã„ã‚‹å ´åˆã¯ä½•も実行ã›ãšã«çµ‚了ã™ã‚‹ãŸã‚ã€ã‚¿ã‚¹ã‚¯ã‚’繰り返ã—ã¦ã‚‚最終状態ã¯å¤‰ã‚りã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå‹•作をã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã—ã°ã—ã°ã€Œå†ªç­‰æ€§ã€ã¨å‘¼ã°ã‚Œã¾ã™ã€‚Playbook ã‚’ 1 回ã ã‘実行ã—ã¦ã‚‚ã€è¤‡æ•°å›žå®Ÿè¡Œã—ã¦ã‚‚ã€çµæžœã¯åŒã˜ã«ãªã‚‹ã¯ãšã§ã™ã€‚ã—ã‹ã—ã€ã™ã¹ã¦ã® Playbook ã‚„ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã“ã®ã‚ˆã†ã«å‹•作ã™ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ä¸å®‰ãªå ´åˆã¯ã€å®Ÿç¨¼åƒç’°å¢ƒã§ Playbook を複数回実行ã™ã‚‹å‰ã«ã€ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ç’°å¢ƒã§ Playbook をテストã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_intro.rst:92 msgid "Running playbooks" msgstr "Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_intro.rst:94 msgid "To run your playbook, use the :ref:`ansible-playbook` command::" msgstr "Playbook を実行ã™ã‚‹ã«ã¯ã€:ref:`ansible-playbook` コマンドを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:98 msgid "Use the ``--verbose`` flag when running your playbook to see detailed output from successful modules as well as unsuccessful ones." msgstr "æˆåŠŸã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨å¤±æ•—ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®è©³ç´°ãªå‡ºåŠ›ã‚’ç¢ºèªã™ã‚‹ã«ã¯ã€Playbook ã®å®Ÿè¡Œæ™‚ã« ``--verbose`` フラグを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:103 msgid "Ansible-Pull" msgstr "ansible-pull" #: ../../rst/user_guide/playbooks_intro.rst:105 msgid "Should you want to invert the architecture of Ansible, so that nodes check in to a central location, instead of pushing configuration out to them, you can." msgstr "ノードã«è¨­å®šã‚’プッシュã™ã‚‹ã®ã§ã¯ãªãã€Ansible ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãƒ¼ã‚’逆ã«ã—ã¦ã€ãƒŽãƒ¼ãƒ‰ãŒä¸­å¤®ã®å ´æ‰€ã«ãƒã‚§ãƒƒã‚¯ã‚¤ãƒ³ã™ã‚‹ã‚ˆã†ã«ã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:108 msgid "The ``ansible-pull`` is a small script that will checkout a repo of configuration instructions from git, and then run ``ansible-playbook`` against that content." msgstr "``ansible-pull`` ã¯å°ã•ãªã‚¹ã‚¯ãƒªãƒ—トã§ã€git ã‹ã‚‰è¨­å®šæ–¹æ³•ã‚’ã¾ã¨ã‚ãŸãƒªãƒã‚¸ãƒˆãƒªãƒ¼ã‚’ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã—ã€ãã®å†…容ã«å¯¾ã—㦠``ansible-playbook`` を実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:111 msgid "Assuming you load balance your checkout location, ``ansible-pull`` scales essentially infinitely." msgstr "ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã®å ´æ‰€ã‚’è² è·åˆ†æ•£ã™ã‚‹å ´åˆã€``ansible-pull`` ã¯åŸºæœ¬çš„ã«ç„¡é™ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:113 msgid "Run ``ansible-pull --help`` for details." msgstr "詳細ã¯ã€ã€Œ``ansible-pull --help``ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_intro.rst:115 msgid "There's also a `clever playbook `_ available to configure ``ansible-pull`` via a crontab from push mode." msgstr "ã¾ãŸã€ãƒ—ッシュモードã‹ã‚‰ã® crontab ã§ ``ansible-pull`` を設定ã™ã‚‹éš›ã«åˆ©ç”¨å¯èƒ½ãª `優れ㟠Playbook `_ ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:118 msgid "Verifying playbooks" msgstr "Playbook ã®æ¤œè¨¼" #: ../../rst/user_guide/playbooks_intro.rst:120 msgid "You may want to verify your playbooks to catch syntax errors and other problems before you run them. The :ref:`ansible-playbook` command offers several options for verification, including ``--check``, ``--diff``, ``--list-hosts``, ``--list-tasks``, and ``--syntax-check``. The :ref:`validate-playbook-tools` describes other tools for validating and testing playbooks." msgstr "Playbook を実行ã™ã‚‹å‰ã«ã€æ§‹æ–‡ã‚¨ãƒ©ãƒ¼ã‚„ãã®ä»–ã®å•題を検出ã™ã‚‹ãŸã‚ã«ã€Playbook を検証ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚:ref:`ansible-playbook` コマンドã«ã¯ã€``--check``ã€``--diff``ã€``--list-hosts``ã€``--list-tasks``ã€``--syntax-check`` ãªã©ã€æ¤œè¨¼ã®ãŸã‚ã®ã‚ªãƒ—ションãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚「:ref:`validate-playbook-tools`ã€ã§ã¯ã€Playbook ã®æ¤œè¨¼ã¨ãƒ†ã‚¹ãƒˆã®ãŸã‚ã®ä»–ã®ãƒ„ールã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:125 msgid "ansible-lint" msgstr "ansible-lint" #: ../../rst/user_guide/playbooks_intro.rst:127 msgid "You can use `ansible-lint `_ for detailed, Ansible-specific feedback on your playbooks before you execute them. For example, if you run ``ansible-lint`` on the playbook called ``verify-apache.yml`` near the top of this page, you should get the following results:" msgstr "`ansible-lint `_ を使用ã™ã‚‹ã¨ã€Playbook を実行ã™ã‚‹å‰ã«ã€Playbook ã«å¯¾ã™ã‚‹ Ansible 固有ã®è©³ç´°ãªãƒ•ィードãƒãƒƒã‚¯ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ãƒšãƒ¼ã‚¸ã®ä¸Šä½ã«ã‚ã‚‹ ``verify-apache.yml`` ã¨ã„ㆠPlaybook ã«å¯¾ã—㦠``ansible-lint`` を実行ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ãªçµæžœãŒå¾—られã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:136 msgid "The `ansible-lint default rules `_ page describes each error. For ``[403]``, the recommended fix is to change ``state: latest`` to ``state: present`` in the playbook." msgstr "`ansible-lint デフォルトルール `_ ページã«ã¯ã€å„エラーã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚``[403]`` ã«ã¤ã„ã¦ã¯ã€Playbook ã§ ``state: latest`` ã‚’ ``state: present`` ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_intro.rst:140 msgid "`ansible-lint `_" msgstr "`ansible-lint `_" #: ../../rst/user_guide/playbooks_intro.rst:141 msgid "Learn how to test Ansible Playbooks syntax" msgstr "Ansible Playbook æ§‹æ–‡ã®ãƒ†ã‚¹ãƒˆæ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_intro.rst:145 msgid "Tips for managing playbooks in the real world" msgstr "実際㮠Playbook ã®ç®¡ç†ã«é–¢ã™ã‚‹ã•ã¾ã–ã¾ãªãƒ’ント" #: ../../rst/user_guide/playbooks_intro.rst:149 msgid "Learn to extend Ansible by writing your own modules" msgstr "独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—㦠Ansible ã‚’æ‹¡å¼µã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_intro.rst:153 msgid "Complete end-to-end playbook examples" msgstr "完全ãªã‚¨ãƒ³ãƒ‰ãƒ„ーエンド Playbook ã®ä¾‹" #: ../../rst/user_guide/playbooks_lookups.rst:5 msgid "Lookups" msgstr "ルックアップ (lookup)" #: ../../rst/user_guide/playbooks_lookups.rst:7 msgid "Lookup plugins retrieve data from outside sources such as files, databases, key/value stores, APIs, and other services. Like all templating, lookups execute and are evaluated on the Ansible control machine. Ansible makes the data returned by a lookup plugin available using the standard templating system. Before Ansible 2.5, lookups were mostly used indirectly in ``with_`` constructs for looping. Starting with Ansible 2.5, lookups are used more explicitly as part of Jinja2 expressions fed into the ``loop`` keyword." msgstr "lookup プラグインã¯ã€ãƒ•ァイルã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ã‚­ãƒ¼/値ストアã€APIã€ãã®ä»–ã®ã‚µãƒ¼ãƒ“スãªã©ã®å¤–部ソースã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ†ãƒ³ãƒ—レート化ã¨åŒæ§˜ã«ã€lookup 㯠Ansible ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒžã‚·ãƒ³ä¸Šã§å®Ÿè¡Œã•れã€è©•価ã•れã¾ã™ã€‚Ansible ã§ã¯ã€lookup プラグインãŒè¿”ã™ãƒ‡ãƒ¼ã‚¿ã‚’ã€æ¨™æº–ã®ãƒ†ãƒ³ãƒ—レートシステムを使用ã—ã¦åˆ©ç”¨ã§ãるよã†ã«ã—ã¾ã™ã€‚Ansible 2.5 以å‰ã€lookup ã¯ã»ã¨ã‚“ã©ã®å ´åˆã€``with_`` ã®ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã®æ§‹æˆã§é–“接的ã«ä½¿ç”¨ã•れã¦ã„ã¾ã—ãŸã€‚Ansible 2.5 以é™ã€lookup 㯠Jinja2 ã®å¼ã®ä¸€éƒ¨ã¨ã—ã¦ã€ã‚ˆã‚Šæ˜Žç¤ºçš„ã«ä½¿ç”¨ã•れるよã†ã«ãªã‚Šã€``loop`` キーワードã«ä¾›çµ¦ã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_lookups.rst:12 msgid "Using lookups in variables" msgstr "変数ã§ã® lookup ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_lookups.rst:14 msgid "You can populate variables using lookups. Ansible evaluates the value each time it is executed in a task (or template)::" msgstr "lookup を使用ã—ã¦å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€ã‚¿ã‚¹ã‚¯ (ã¾ãŸã¯ãƒ†ãƒ³ãƒ—レート) ã§å®Ÿè¡Œã•れるãŸã³ã«å€¤ã‚’評価ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_lookups.rst:22 msgid "For more details and a list of lookup plugins in ansible-core, see :ref:`plugins_lookup`. You may also find lookup plugins in collections. You can review a list of lookup plugins installed on your control machine with the command ``ansible-doc -l -t lookup``." msgstr "ansible-core ã® lookup プラグインã®è©³ç´°ã¨ä¸€è¦§ã¯ã€ã€Œ:ref:`plugins_lookup`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã€lookup プラグインã¯ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚‚å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚コントロールマシンã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ lookup プラグインã®ãƒªã‚¹ãƒˆã¯ã€``ansible-doc -l -t lookup`` コマンドã§ç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:5 msgid "Loops" msgstr "ループ (loop)" #: ../../rst/user_guide/playbooks_loops.rst:7 msgid "Ansible offers the ``loop``, ``with_``, and ``until`` keywords to execute a task multiple times. Examples of commonly-used loops include changing ownership on several files and/or directories with the :ref:`file module `, creating multiple users with the :ref:`user module `, and repeating a polling step until a certain result is reached." msgstr "Ansible ã«ã¯ã€``loop``ã€``with_``ã€ãŠã‚ˆã³ ``until`` ã¨ã„ã†ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ãŒã‚りã€1 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’複数回実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚一般的ã«ä½¿ç”¨ã•れるループã®ä¾‹ã¨ã—ã¦ã¯ã€:ref:`file module ` ã§è¤‡æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚„ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®æ‰€æœ‰æ¨©ã‚’変更ã™ã‚‹ã€:ref:`user module ` ã§è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã™ã‚‹ã€ç‰¹å®šã®çµæžœãŒå¾—られるã¾ã§ãƒãƒ¼ãƒªãƒ³ã‚°ã‚¹ãƒ†ãƒƒãƒ—を繰り返ã™ãªã©ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:11 msgid "We added ``loop`` in Ansible 2.5. It is not yet a full replacement for ``with_``, but we recommend it for most use cases." msgstr "Ansible 2.5 ã§ ``loop`` を追加ã—ã¾ã—ãŸã€‚``with_`` ã¯å®Œå…¨ã«ç½®ãæ›ãˆã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§æŽ¨å¥¨ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:12 msgid "We have not deprecated the use of ``with_`` - that syntax will still be valid for the foreseeable future." msgstr "``with_`` ã®ä½¿ç”¨ã¯éžæŽ¨å¥¨ã«ãªã£ã¦ã„ã¾ã›ã‚“。ã“ã®æ§‹æ–‡ã¯ã€ä»Šå¾Œã‚‚有効ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:13 msgid "We are looking to improve ``loop`` syntax - watch this page and the `changelog `_ for updates." msgstr "``loop`` 構文を改善ã™ã‚‹å ´åˆã¯ã€ã“ã®ãƒšãƒ¼ã‚¸ã¨ `changelog `_ ã§æ›´æ–°ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:19 msgid "Comparing ``loop`` and ``with_*``" msgstr "``loop`` 㨠``with_*`` ã®æ¯”較" #: ../../rst/user_guide/playbooks_loops.rst:21 msgid "The ``with_`` keywords rely on :ref:`lookup_plugins` - even ``items`` is a lookup." msgstr "``with_`` キーワード㯠:ref:`lookup_plugins` ã«ä¾å­˜ã—ã€``items`` ã‚‚ lookup ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:22 msgid "The ``loop`` keyword is equivalent to ``with_list``, and is the best choice for simple loops." msgstr "``loop`` キーワード㯠``with_list`` ã¨åŒç­‰ã§ã‚りã€å˜ç´”ãªãƒ«ãƒ¼ãƒ—ã«æœ€é©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:23 msgid "The ``loop`` keyword will not accept a string as input, see :ref:`query_vs_lookup`." msgstr "``loop`` ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯æ–‡å­—列を入力ã¨ã—ã¦å—ã‘付ã‘ã¾ã›ã‚“。「:ref:`query_vs_lookup`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_loops.rst:24 msgid "Generally speaking, any use of ``with_*`` covered in :ref:`migrating_to_loop` can be updated to use ``loop``." msgstr "通常ã€ã€Œ:ref:`migrating_to_loop`ã€ã§å¯¾å¿œã—ã¦ã„ã‚‹ ``with_*`` を使用ã™ã‚‹ã¨ã€``loop`` を使用ã™ã‚‹ã‚ˆã†ã«æ›´æ–°ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:25 msgid "Be careful when changing ``with_items`` to ``loop``, as ``with_items`` performed implicit single-level flattening. You may need to use ``flatten(1)`` with ``loop`` to match the exact outcome. For example, to get the same output as:" msgstr "``with_items`` ã‚’ ``loop`` ã«å¤‰æ›´ã™ã‚‹éš›ã«ã¯ã€``with_items`` ãŒæš—é»™ã®å˜ä¸€ãƒ¬ãƒ™ãƒ«ã®ãƒ•ラット化を行ã†ãŸã‚注æ„ãŒå¿…è¦ã§ã™ã€‚正確ãªçµæžœã‚’å¾—ã‚‹ãŸã‚ã«ã¯ã€``flatten(1)`` 㨠``loop`` ã®ä½µç”¨ãŒå¿…è¦ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€æ¬¡ã¨åŒã˜å‡ºåŠ›ã‚’å¾—ã‚‹ã«ã¯ã€" #: ../../rst/user_guide/playbooks_loops.rst:34 msgid "you would need::" msgstr "以下ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:38 msgid "Any ``with_*`` statement that requires using ``lookup`` within a loop should not be converted to use the ``loop`` keyword. For example, instead of doing:" msgstr "ループ内㧠``lookup`` を使用ã™ã‚‹å¿…è¦ã®ã‚ã‚‹ ``with_*`` æ–‡ã¯ã€``loop`` キーワードを使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›ã—ãªã„ã§ãã ã•ã„。ãŸã¨ãˆã°ã€ä»£ã‚りã«ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:44 msgid "it's cleaner to keep::" msgstr "ä¿æŒã™ã‚‹æ–¹ãŒè¦‹ãŸç›®ãŒã™ã£ãりã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:51 msgid "Standard loops" msgstr "標準ループ" #: ../../rst/user_guide/playbooks_loops.rst:54 msgid "Iterating over a simple list" msgstr "シンプルãªãƒªã‚¹ãƒˆã§ã®å復" #: ../../rst/user_guide/playbooks_loops.rst:56 msgid "Repeated tasks can be written as standard loops over a simple list of strings. You can define the list directly in the task::" msgstr "繰り返ã•れるタスクã¯ã€æ–‡å­—列ã®å˜ç´”ãªãƒªã‚¹ãƒˆã«å¯¾ã™ã‚‹æ¨™æº–çš„ãªãƒ«ãƒ¼ãƒ—ã¨ã—ã¦è¨˜è¿°ã§ãã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã¯ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ç›´æŽ¥å®šç¾©ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:67 msgid "You can define the list in a variables file, or in the 'vars' section of your play, then refer to the name of the list in the task::" msgstr "変数ファイルã§ãƒªã‚¹ãƒˆã‚’定義ã™ã‚‹ã‹ã€ãƒ—レイã®ã€Œvarsã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã€ã‚¿ã‚¹ã‚¯å†…ã®ãƒªã‚¹ãƒˆã®åå‰ã‚’å‚ç…§ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:71 msgid "Either of these examples would be the equivalent of::" msgstr "ã“れらã®ä¾‹ã®ã„ãšã‚Œã‚‚ã€ä»¥ä¸‹ã¨åŒç­‰ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:85 msgid "You can pass a list directly to a parameter for some plugins. Most of the packaging modules, like :ref:`yum ` and :ref:`apt `, have this capability. When available, passing the list to a parameter is better than looping over the task. For example::" msgstr "ã„ãã¤ã‹ã®ãƒ—ラグインã§ã¯ã€ãƒ‘ラメーターã«ãƒªã‚¹ãƒˆã‚’直接渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚:ref:`yum ` ã‚„ :ref:`apt ` ãªã©ã€ã»ã¨ã‚“ã©ã®ãƒ‘ッケージングモジュールã«ã“ã®æ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚利用ã§ãã‚‹å ´åˆã¯ã€ãƒªã‚¹ãƒˆã‚’ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã«æ¸¡ã™æ–¹ãŒã€ã‚¿ã‚¹ã‚¯ã‚’ループã•ã›ã‚‹ã‚ˆã‚Šã‚‚良ã„ã§ã—ょã†ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:98 msgid "Check the :ref:`module documentation ` to see if you can pass a list to any particular module's parameter(s)." msgstr ":ref:`モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ ` ã§ã€ç‰¹å®šãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‘ラメーターã«ãƒªã‚¹ãƒˆã‚’渡ã™ã“ã¨ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:101 msgid "Iterating over a list of hashes" msgstr "ãƒãƒƒã‚·ãƒ¥ãƒªã‚¹ãƒˆã§ã®å復" #: ../../rst/user_guide/playbooks_loops.rst:103 msgid "If you have a list of hashes, you can reference subkeys in a loop. For example::" msgstr "ãƒãƒƒã‚·ãƒ¥ãƒªã‚¹ãƒˆãŒã‚ã‚‹å ´åˆã¯ã€ãƒ«ãƒ¼ãƒ—ã§ã‚µãƒ–キーをå‚ç…§ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:114 msgid "When combining :ref:`conditionals ` with a loop, the ``when:`` statement is processed separately for each item. See :ref:`the_when_statement` for examples." msgstr ":ref:`conditionals ` ã¨ãƒ«ãƒ¼ãƒ—を組ã¿åˆã‚ã›ã‚‹ã¨ã€``when:`` æ–‡ã¯å„é …ç›®ã«ã¤ã„ã¦å€‹åˆ¥ã«å‡¦ç†ã•れã¾ã™ã€‚例ã¯ã€Œ:ref:`the_when_statement`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_loops.rst:118 msgid "Iterating over a dictionary" msgstr "ディクショナリーã§ã®å復" #: ../../rst/user_guide/playbooks_loops.rst:120 msgid "To loop over a dict, use the :ref:`dict2items `:" msgstr "ディクショナリーã§ãƒ«ãƒ¼ãƒ—ã™ã‚‹ã«ã¯ã€:ref:`dict2items ` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:133 msgid "Here, we are iterating over `tag_data` and printing the key and the value from it." msgstr "ã“ã“ã§ã¯ã€`tag_data` を繰り返ã—処ç†ã—ã€ã‚­ãƒ¼ã¨å€¤ã‚’出力ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:136 msgid "Registering variables with a loop" msgstr "ループã«ã‚ˆã‚‹å¤‰æ•°ã®ç™»éŒ²" #: ../../rst/user_guide/playbooks_loops.rst:138 msgid "You can register the output of a loop as a variable. For example::" msgstr "ループã®å‡ºåŠ›ã‚’å¤‰æ•°ã¨ã—ã¦ç™»éŒ²ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:147 msgid "When you use ``register`` with a loop, the data structure placed in the variable will contain a ``results`` attribute that is a list of all responses from the module. This differs from the data structure returned when using ``register`` without a loop::" msgstr "``register`` をループã§ä½¿ç”¨ã™ã‚‹ã¨ã€å¤‰æ•°ã«é…ç½®ã•れるデータ構造ã«ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ã®ã™ã¹ã¦ã®å¿œç­”ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ ``results`` 属性ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€``register`` をループãªã—ã§ä½¿ç”¨ã—ãŸã¨ãã«è¿”ã•れるデータ構造ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:186 msgid "Subsequent loops over the registered variable to inspect the results may look like::" msgstr "登録済ã¿ã®å¤‰æ•°ã§å¾Œç¶šã®ãƒ«ãƒ¼ãƒ—を実行ã—ã¦çµæžœã‚’検査ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:194 msgid "During iteration, the result of the current item will be placed in the variable::" msgstr "å復時ã«ã€ç¾åœ¨ã®é …ç›®ã®çµæžœã¯å¤‰æ•°ã«é…ç½®ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:207 msgid "Complex loops" msgstr "複雑ãªãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/playbooks_loops.rst:210 msgid "Iterating over nested lists" msgstr "入れå­ã®ãƒªã‚¹ãƒˆã§ã®å復" #: ../../rst/user_guide/playbooks_loops.rst:212 msgid "You can use Jinja2 expressions to iterate over complex lists. For example, a loop can combine nested lists::" msgstr "Jinja2 ã®å¼ã‚’使用ã—ã¦ã€è¤‡é›‘ãªãƒªã‚¹ãƒˆã‚’繰り返ã—処ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ«ãƒ¼ãƒ—ã¯å…¥ã‚Œå­ã«ãªã£ãŸãƒªã‚¹ãƒˆã‚’組ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:226 msgid "Retrying a task until a condition is met" msgstr "æ¡ä»¶ãŒæº€ãŸã•れるã¾ã§ã‚¿ã‚¹ã‚¯ã®å†è©¦è¡Œ" #: ../../rst/user_guide/playbooks_loops.rst:230 msgid "You can use the ``until`` keyword to retry a task until a certain condition is met. Here's an example::" msgstr "``until`` キーワードを使用ã™ã‚‹ã¨ã€ã‚ã‚‹æ¡ä»¶ãŒæº€ãŸã•れるã¾ã§ã‚¿ã‚¹ã‚¯ã‚’å†è©¦è¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:239 msgid "This task runs up to 5 times with a delay of 10 seconds between each attempt. If the result of any attempt has \"all systems go\" in its stdout, the task succeeds. The default value for \"retries\" is 3 and \"delay\" is 5." msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã¯ã€å„試行ã®é–“ã« 10 ç§’ã®é…å»¶ã‚’ç½®ã„ã¦æœ€å¤§ 5 回実行ã•れる。試行ã®çµæžœã€æ¨™æº–出力ã«ã€Œall systems goã€ã¨è¡¨ç¤ºã•れã¦ã„れã°ã€ã‚¿ã‚¹ã‚¯ã¯æˆåŠŸã§ã™ã€‚「retries (å†è©¦è¡Œ)ã€ã®ãƒ‡ãƒ•ォルト値㯠3ã€ã€Œdelay (é…å»¶)ã€ã¯ 5 ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:241 msgid "To see the results of individual retries, run the play with ``-vv``." msgstr "個別ã®å†è©¦è¡Œã®çµæžœã‚’表示ã™ã‚‹ã«ã¯ã€``-vv`` ã§ãƒ—レイを実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:243 msgid "When you run a task with ``until`` and register the result as a variable, the registered variable will include a key called \"attempts\", which records the number of the retries for the task." msgstr "``until`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€çµæžœã‚’変数ã¨ã—ã¦ç™»éŒ²ã™ã‚‹å ´åˆã¯ã€ç™»éŒ²æ¸ˆã¿å¤‰æ•°ã«ã¯ã€Œattemptsã€ã¨å‘¼ã°ã‚Œã‚‹éµãŒå«ã¾ã‚Œã€ã‚¿ã‚¹ã‚¯ã®å†è©¦è¡Œå›žæ•°ã‚’記録ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:245 msgid "You must set the ``until`` parameter if you want a task to retry. If ``until`` is not defined, the value for the ``retries`` parameter is forced to 1." msgstr "タスクãŒå†è©¦è¡Œã™ã‚‹ã«ã¯ã€``until`` パラメーターを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``until`` ãŒå®šç¾©ã•れã¦ã„ãªã„å ´åˆã¯ã€``retries`` パラメーターã®å€¤ãŒ 1 ã«å¼·åˆ¶ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:248 msgid "Looping over inventory" msgstr "インベントリーã®ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/playbooks_loops.rst:250 msgid "To loop over your inventory, or just a subset of it, you can use a regular ``loop`` with the ``ansible_play_batch`` or ``groups`` variables::" msgstr "インベントリーやãã®ä¸€éƒ¨ã ã‘をループã•ã›ã‚‹ã«ã¯ã€é€šå¸¸ã® ``loop`` ã« ``ansible_play_batch`` 変数や ``groups`` 変数を加ãˆãŸã‚‚ã®ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:262 msgid "There is also a specific lookup plugin ``inventory_hostnames`` that can be used like this::" msgstr "ã¾ãŸã€ä»¥ä¸‹ã®ã‚ˆã†ãªç‰¹å®šã® lookup プラグイン ``inventory_hostnames`` も使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:274 msgid "More information on the patterns can be found in :ref:`intro_patterns`." msgstr "パターンã®è©³ç´°ã¯ã€ã€Œ:ref:`intro_patterns`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_loops.rst:279 msgid "Ensuring list input for ``loop``: using ``query`` rather than ``lookup``" msgstr "``loop`` ã®ãƒªã‚¹ãƒˆå…¥åŠ›ã®ç¢ºä¿: ``lookup`` ã®ä»£ã‚り㫠``query`` を使用" #: ../../rst/user_guide/playbooks_loops.rst:281 msgid "The ``loop`` keyword requires a list as input, but the ``lookup`` keyword returns a string of comma-separated values by default. Ansible 2.5 introduced a new Jinja2 function named :ref:`query ` that always returns a list, offering a simpler interface and more predictable output from lookup plugins when using the ``loop`` keyword." msgstr "``loop`` キーワードã¯å…¥åŠ›ã¨ã—ã¦ãƒªã‚¹ãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ãŒã€``lookup`` キーワードã¯ãƒ‡ãƒ•ォルトã§ã‚³ãƒ³ãƒžã§åŒºåˆ‡ã‚‰ã‚ŒãŸå€¤ã®æ–‡å­—列を返ã™ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚Ansible 2.5 ã§ã¯ã€:ref:`query ` ã¨ã„ã†åå‰ã®æ–°ã—ã„ Jinja2 関数ãŒå°Žå…¥ã•れã€å¸¸ã«ãƒªã‚¹ãƒˆã‚’è¿”ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒã‚·ãƒ³ãƒ—ルã«ãªã‚Šã€``loop`` キーワードを使用ã—ãŸå ´åˆã® lookup プラグインã®å‡ºåŠ›ãŒã‚ˆã‚Šäºˆæ¸¬ã—ã‚„ã™ããªã‚Šã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_loops.rst:283 msgid "You can force ``lookup`` to return a list to ``loop`` by using ``wantlist=True``, or you can use ``query`` instead." msgstr "``wantlist=True`` を使用ã™ã‚Œã°ã€``lookup`` ãŒãƒªã‚¹ãƒˆã‚’ ``loop`` ã«è¿”ã™ã‚ˆã†ã«å¼·åˆ¶ã—ãŸã‚Šã€ä»£ã‚り㫠``query`` を使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:285 msgid "These examples do the same thing::" msgstr "ã“れらã®ä¾‹ã§ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:295 msgid "Adding controls to loops" msgstr "ループã¸ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_loops.rst:298 msgid "The ``loop_control`` keyword lets you manage your loops in useful ways." msgstr "``loop_control`` キーワードを使用ã™ã‚‹ã¨ã€ãƒ«ãƒ¼ãƒ—ã‚’ä¾¿åˆ©ãªæ–¹æ³•ã§ç®¡ç†ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:301 msgid "Limiting loop output with ``label``" msgstr "``label`` を使用ã—ãŸãƒ«ãƒ¼ãƒ—出力ã®åˆ¶é™" #: ../../rst/user_guide/playbooks_loops.rst:304 msgid "When looping over complex data structures, the console output of your task can be enormous. To limit the displayed output, use the ``label`` directive with ``loop_control``::" msgstr "複雑ãªãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’ループã—ã¦ã„ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å‡ºåŠ›ãŒè†¨å¤§ã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚表示ã•れる出力を制é™ã™ã‚‹ã«ã¯ã€``label`` ディレクティブ㨠``loop_control`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:321 msgid "The output of this task will display just the ``name`` field for each ``item`` instead of the entire contents of the multi-line ``{{ item }}`` variable." msgstr "ã“ã®ã‚¿ã‚¹ã‚¯ã®å‡ºåŠ›ã«ã¯ã€è¤‡æ•°è¡Œã® ``{{ item }}`` 変数ã®å†…容全体ã§ã¯ãªãã€å„ ``item`` ã® ``name`` フィールドã®ã¿ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:323 msgid "This is for making console output more readable, not protecting sensitive data. If there is sensitive data in ``loop``, set ``no_log: yes`` on the task to prevent disclosure." msgstr "ã“れã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å‡ºåŠ›ã‚’èª­ã¿ã‚„ã™ãã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã‚’ä¿è­·ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。``loop`` ã«æ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚‹å ´åˆã¯ã€``no_log: yes`` をタスクã«è¨­å®šã—ã¦æ¼æ´©ã‚’防ãŽã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:326 msgid "Pausing within a loop" msgstr "ループ内ã§ã®ä¸€æ™‚åœæ­¢" #: ../../rst/user_guide/playbooks_loops.rst:329 msgid "To control the time (in seconds) between the execution of each item in a task loop, use the ``pause`` directive with ``loop_control``::" msgstr "タスクループã®å„é …ç›®ã®å®Ÿè¡Œé–“隔を (ç§’å˜ä½) ã§åˆ¶å¾¡ã™ã‚‹ã«ã¯ã€``pause`` ã§ ``loop_control`` ディレクティブを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:343 msgid "Tracking progress through a loop with ``index_var``" msgstr "``index_var`` ã®ã‚るループã§ã®é€²æ—ã®è¿½è·¡" #: ../../rst/user_guide/playbooks_loops.rst:346 msgid "To keep track of where you are in a loop, use the ``index_var`` directive with ``loop_control``. This directive specifies a variable name to contain the current loop index::" msgstr "ループ内ã®ã©ã“ã«ã„ã‚‹ã‹ã‚’把æ¡ã™ã‚‹ã«ã¯ã€``loop_control`` ã¨ã¨ã‚‚ã« ``index_var`` ディレクティブを使用ã—ã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¯ã€ç¾åœ¨ã®ãƒ«ãƒ¼ãƒ—ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’æ ¼ç´ã™ã‚‹å¤‰æ•°åを指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:358 msgid "`index_var` is 0 indexed." msgstr "`index_var` ã¯ã€0 インデックスã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:361 msgid "Defining inner and outer variable names with ``loop_var``" msgstr "``loop_var`` を使用ã—ãŸå†…部変数åãŠã‚ˆã³å¤–部変数åã®å®šç¾©" #: ../../rst/user_guide/playbooks_loops.rst:364 msgid "You can nest two looping tasks using ``include_tasks``. However, by default Ansible sets the loop variable ``item`` for each loop. This means the inner, nested loop will overwrite the value of ``item`` from the outer loop. You can specify the name of the variable for each loop using ``loop_var`` with ``loop_control``::" msgstr "``include_tasks`` を使用ã™ã‚‹ã¨ã€2 ã¤ã®ãƒ«ãƒ¼ãƒ—タスクを入れå­ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€Ansible ã®ãƒ‡ãƒ•ォルトã§ã¯ã€ãƒ«ãƒ¼ãƒ—ã”ã¨ã«ãƒ«ãƒ¼ãƒ—変数 ``item`` ãŒè¨­å®šã•れã¾ã™ã€‚ã“れã¯ã€å…¥ã‚Œå­ã«ãªã£ãŸå†…å´ã®ãƒ«ãƒ¼ãƒ—ãŒã€å¤–å´ã®ãƒ«ãƒ¼ãƒ—ã® ``item`` ã®å€¤ã‚’上書ãã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚``loop_var`` 㨠``loop_control`` を使用ã—ã¦ã€å„ループã®å¤‰æ•°åを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:385 msgid "If Ansible detects that the current loop is using a variable which has already been defined, it will raise an error to fail the task." msgstr "定義ã•れã¦ã„る変数をç¾åœ¨ã®ãƒ«ãƒ¼ãƒ—ãŒä½¿ç”¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’ Ansible ãŒæ¤œå‡ºã™ã‚‹ã¨ã€ã‚¿ã‚¹ã‚¯ãŒå¤±æ•—ã™ã‚‹ãŸã‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:388 msgid "Extended loop variables" msgstr "拡張ループ変数" #: ../../rst/user_guide/playbooks_loops.rst:391 msgid "As of Ansible 2.8 you can get extended loop information using the ``extended`` option to loop control. This option will expose the following information." msgstr "Ansible 2.8 ã§ã¯ã€ãƒ«ãƒ¼ãƒ—制御㫠``extended`` オプションを使用ã™ã‚‹ã“ã¨ã§ã€æ‹¡å¼µã•れãŸãƒ«ãƒ¼ãƒ—情報を得るã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€ä»¥ä¸‹ã®æƒ…報を公開ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:394 msgid "Variable" msgstr "変数" #: ../../rst/user_guide/playbooks_loops.rst:396 msgid "``ansible_loop.allitems``" msgstr "``ansible_loop.allitems``" #: ../../rst/user_guide/playbooks_loops.rst:396 msgid "The list of all items in the loop" msgstr "ループ内ã®ã™ã¹ã¦ã®é …ç›®ã®ãƒªã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_loops.rst:397 msgid "``ansible_loop.index``" msgstr "``ansible_loop.index``" #: ../../rst/user_guide/playbooks_loops.rst:397 msgid "The current iteration of the loop. (1 indexed)" msgstr "ループã®ç¾åœ¨ã®å復 (1 インデックス化)" #: ../../rst/user_guide/playbooks_loops.rst:398 msgid "``ansible_loop.index0``" msgstr "``ansible_loop.index0``" #: ../../rst/user_guide/playbooks_loops.rst:398 msgid "The current iteration of the loop. (0 indexed)" msgstr "ループã®ç¾åœ¨ã®å復 (0 インデックス化)" #: ../../rst/user_guide/playbooks_loops.rst:399 msgid "``ansible_loop.revindex``" msgstr "``ansible_loop.revindex``" #: ../../rst/user_guide/playbooks_loops.rst:399 msgid "The number of iterations from the end of the loop (1 indexed)" msgstr "ãƒ«ãƒ¼ãƒ—ã®æœ€å¾Œã‹ã‚‰ã®å復回数 (1 インデックス化)" #: ../../rst/user_guide/playbooks_loops.rst:400 msgid "``ansible_loop.revindex0``" msgstr "``ansible_loop.revindex0``" #: ../../rst/user_guide/playbooks_loops.rst:400 msgid "The number of iterations from the end of the loop (0 indexed)" msgstr "ãƒ«ãƒ¼ãƒ—ã®æœ€å¾Œã‹ã‚‰ã®å復回数 (0 インデックス化)" #: ../../rst/user_guide/playbooks_loops.rst:401 msgid "``ansible_loop.first``" msgstr "``ansible_loop.first``" #: ../../rst/user_guide/playbooks_loops.rst:401 msgid "``True`` if first iteration" msgstr "最åˆã®å復ã®å ´åˆã¯ ``True``" #: ../../rst/user_guide/playbooks_loops.rst:402 msgid "``ansible_loop.last``" msgstr "``ansible_loop.last``" #: ../../rst/user_guide/playbooks_loops.rst:402 msgid "``True`` if last iteration" msgstr "最後ã®å復ã®å ´åˆã¯ ``True``" #: ../../rst/user_guide/playbooks_loops.rst:403 msgid "``ansible_loop.length``" msgstr "``ansible_loop.length``" #: ../../rst/user_guide/playbooks_loops.rst:403 msgid "The number of items in the loop" msgstr "ループ内ã®é …目数" #: ../../rst/user_guide/playbooks_loops.rst:404 msgid "``ansible_loop.previtem``" msgstr "``ansible_loop.previtem``" #: ../../rst/user_guide/playbooks_loops.rst:404 msgid "The item from the previous iteration of the loop. Undefined during the first iteration." msgstr "ループã®å‰ã®å復ã®é …目。最åˆã®å復ã§ã¯æœªå®šç¾©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:405 msgid "``ansible_loop.nextitem``" msgstr "``ansible_loop.nextitem``" #: ../../rst/user_guide/playbooks_loops.rst:405 msgid "The item from the following iteration of the loop. Undefined during the last iteration." msgstr "ãƒ«ãƒ¼ãƒ—ã®æ¬¡ã®å復ã®é …目。最åˆã®å復ã§ã¯æœªå®šç¾©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:413 msgid "When using ``loop_control.extended`` more memory will be utilized on the control node. This is a result of ``ansible_loop.allitems`` containing a reference to the full loop data for every loop. When serializing the results for display in callback plugins within the main ansible process, these references may be dereferenced causing memory usage to increase." msgstr "``loop_control.extended`` を使用ã™ã‚‹ã¨ã€åˆ¶å¾¡ãƒŽãƒ¼ãƒ‰ã§ã‚ˆã‚Šå¤šãã®ãƒ¡ãƒ¢ãƒªãƒ¼ãŒä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯ã€ã™ã¹ã¦ã®ãƒ«ãƒ¼ãƒ—ã®å®Œå…¨ãªãƒ«ãƒ¼ãƒ—データã¸ã®å‚ç…§ãŒå«ã¾ã‚Œã‚‹ ``ansible_loop.allitems`` ã®çµæžœã§ã™ã€‚メインã®Ansibleプロセス内ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ—ラグインã«è¡¨ç¤ºã™ã‚‹ãŸã‚ã«çµæžœã‚’シリアル化ã™ã‚‹ã¨ã€ã“れらã®å‚ç…§ãŒé€†å‚ç…§ã•れã€ãƒ¡ãƒ¢ãƒªãƒ¼ä½¿ç”¨é‡ãŒå¢—加ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:416 msgid "Accessing the name of your loop_var" msgstr "loop_var ã®åå‰ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹" #: ../../rst/user_guide/playbooks_loops.rst:419 msgid "As of Ansible 2.8 you can get the name of the value provided to ``loop_control.loop_var`` using the ``ansible_loop_var`` variable" msgstr "Ansible 2.8 ã§ã¯ã€``ansible_loop_var`` 変数を使用ã—㦠``loop_control.loop_var`` ã«æä¾›ã•れãŸå€¤ã®åå‰ã‚’å–å¾—ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:421 msgid "For role authors, writing roles that allow loops, instead of dictating the required ``loop_var`` value, you can gather the value via::" msgstr "ロールã®ä½œæˆè€…ã¯ã€å¿…è¦ãª ``loop_var`` 値を指定ã™ã‚‹ä»£ã‚りã«ã€ãƒ«ãƒ¼ãƒ—を許å¯ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹ã“ã¨ã§ã€æ¬¡ã®æ–¹æ³•ã§å€¤ã‚’åŽé›†ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_loops.rst:428 msgid "Migrating from with_X to loop" msgstr "with_X ã‹ã‚‰ loop ã¸ã®ç§»è¡Œ" #: ../../rst/user_guide/shared_snippets/with2loop.txt:1 msgid "In most cases, loops work best with the ``loop`` keyword instead of ``with_X`` style loops. The ``loop`` syntax is usually best expressed using filters instead of more complex use of ``query`` or ``lookup``." msgstr "ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ«ãƒ¼ãƒ—ã¯ã€``with_X`` スタイルã®ãƒ«ãƒ¼ãƒ—ã§ã¯ãªãã€``loop`` ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§æœ€é©ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚``loop`` æ§‹æ–‡ã¯é€šå¸¸ã€``query`` ã‚„ ``lookup`` ã®è¤‡é›‘ãªä½¿ç”¨ã§ã¯ãªãã€ãƒ•ィルターを使用ã—ã¦è¡¨ç¾ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:3 msgid "These examples show how to convert many common ``with_`` style loops to ``loop`` and filters." msgstr "以下ã®ä¾‹ã§ã¯ã€ä¸€èˆ¬çš„㪠``with_`` スタイルã®ãƒ«ãƒ¼ãƒ—ã‚’ ``loop`` ãŠã‚ˆã³ãƒ•ィルターã«å¤‰æ›ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:6 msgid "with_list" msgstr "with_list" #: ../../rst/user_guide/shared_snippets/with2loop.txt:8 msgid "``with_list`` is directly replaced by ``loop``." msgstr "``with_list`` ã¯ã€ç›´æŽ¥ ``loop`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:27 msgid "with_items" msgstr "with_items" #: ../../rst/user_guide/shared_snippets/with2loop.txt:29 msgid "``with_items`` is replaced by ``loop`` and the ``flatten`` filter." msgstr "``with_items`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``flatten`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:44 msgid "with_indexed_items" msgstr "with_indexed_items" #: ../../rst/user_guide/shared_snippets/with2loop.txt:46 msgid "``with_indexed_items`` is replaced by ``loop``, the ``flatten`` filter and ``loop_control.index_var``." msgstr "``with_indexed_items`` ã¯ã€``loop``ã€``flatten`` フィルターã€ãŠã‚ˆã³ ``loop_control.index_var`` ã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:63 msgid "with_flattened" msgstr "with_flattened" #: ../../rst/user_guide/shared_snippets/with2loop.txt:65 msgid "``with_flattened`` is replaced by ``loop`` and the ``flatten`` filter." msgstr "``with_flattened`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``flatten`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:80 msgid "with_together" msgstr "with_together" #: ../../rst/user_guide/shared_snippets/with2loop.txt:82 msgid "``with_together`` is replaced by ``loop`` and the ``zip`` filter." msgstr "``with_together`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``zip`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:98 msgid "Another example with complex data" msgstr "複雑ãªãƒ‡ãƒ¼ã‚¿ãŒã‚る別ã®ä¾‹" #: ../../rst/user_guide/shared_snippets/with2loop.txt:113 msgid "with_dict" msgstr "with_dict" #: ../../rst/user_guide/shared_snippets/with2loop.txt:115 msgid "``with_dict`` can be substituted by ``loop`` and either the ``dictsort`` or ``dict2items`` filters." msgstr "``with_dict`` ã¯ã€``loop`` フィルターã¨ã€``dictsort`` フィルターã¾ãŸã¯ ``dict2items`` フィルターã®ã„ãšã‚Œã‹ã®ãƒ•ィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:135 msgid "with_sequence" msgstr "with_sequence" #: ../../rst/user_guide/shared_snippets/with2loop.txt:137 msgid "``with_sequence`` is replaced by ``loop`` and the ``range`` function, and potentially the ``format`` filter." msgstr "``with_sequence`` ã¯ã€``loop`` 関数㨠``range`` ã®é–¢æ•°ã€ãã—ã¦æ½œåœ¨çš„ã«ã¯ ``format`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:153 msgid "with_subelements" msgstr "with_subelements" #: ../../rst/user_guide/shared_snippets/with2loop.txt:155 msgid "``with_subelements`` is replaced by ``loop`` and the ``subelements`` filter." msgstr "``with_subelements`` ã¯ã€``loop`` フィルターãŠã‚ˆã³ ``subelements`` フィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:172 msgid "with_nested/with_cartesian" msgstr "with_nested/with_cartesian" #: ../../rst/user_guide/shared_snippets/with2loop.txt:174 msgid "``with_nested`` and ``with_cartesian`` are replaced by loop and the ``product`` filter." msgstr "``with_nested`` ã¨``with_cartesian`` ã¯ã€ãƒ«ãƒ¼ãƒ—㨠``product`` ã®ãƒ•ィルターã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚" #: ../../rst/user_guide/shared_snippets/with2loop.txt:191 msgid "with_random_choice" msgstr "with_random_choice" #: ../../rst/user_guide/shared_snippets/with2loop.txt:193 msgid "``with_random_choice`` is replaced by just use of the ``random`` filter, without need of ``loop``." msgstr "``with_random_choice`` ã¯ã€``random`` フィルターを使用ã™ã‚‹ã ã‘ã§ã€``loop`` ã‚’å¿…è¦ã¨ã›ãšã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:4 msgid "Module defaults" msgstr "モジュールã®ãƒ‡ãƒ•ォルト" #: ../../rst/user_guide/playbooks_module_defaults.rst:6 msgid "If you frequently call the same module with the same arguments, it can be useful to define default arguments for that particular module using the ``module_defaults`` keyword." msgstr "åŒã˜å¼•æ•°ã§åŒã˜ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é »ç¹ã«å‘¼ã³å‡ºã™å ´åˆã¯ã€``module_defaults`` キーワードを使用ã—ã¦ã€ãã®ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルト引数を定義ã™ã‚‹ã¨ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:8 msgid "Here is a basic example::" msgstr "以下ã«åŸºæœ¬çš„ãªä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:32 msgid "The ``module_defaults`` keyword can be used at the play, block, and task level. Any module arguments explicitly specified in a task will override any established default for that module argument::" msgstr "``module_defaults`` キーワードã¯ã€ãƒ—レイã€ãƒ–ロックã€ãŠã‚ˆã³ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚ã‚¿ã‚¹ã‚¯ã§æ˜Žç¤ºçš„ã«æŒ‡å®šã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å¼•æ•°ã«å¯¾ã—ã¦ç¢ºç«‹ã•れãŸãƒ‡ãƒ•ォルトを上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:42 msgid "You can remove any previously established defaults for a module by specifying an empty dict::" msgstr "空ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ã§ã€ãれã¾ã§ã«è¨­å®šã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトを削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:52 msgid "Any module defaults set at the play level (and block/task level when using ``include_role`` or ``import_role``) will apply to any roles used, which may cause unexpected behavior in the role." msgstr "プレイレベルã§è¨­å®šã•れるモジュールã®ãƒ‡ãƒ•ォルト (``include_role`` ã¾ãŸã¯ ``import_role`` を使用ã™ã‚‹éš›ã®ãƒ–ロックã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã®ãƒ¬ãƒ™ãƒ«) ã¯ã€ä½¿ç”¨ã•れるロールã«é©ç”¨ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ãƒ«ã§äºˆæœŸã—ãªã„動作ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:54 msgid "Here are some more realistic use cases for this feature." msgstr "ã“ã®æ©Ÿèƒ½ã®ã‚ˆã‚Šå®Ÿç”¨çš„ãªãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:56 msgid "Interacting with an API that requires auth::" msgstr "èªè¨¼ã‚’ã‚’å¿…è¦ã¨ã™ã‚‹ API ã¨ã®å¯¾è©±:" #: ../../rst/user_guide/playbooks_module_defaults.rst:77 msgid "Setting a default AWS region for specific EC2-related modules::" msgstr "特定㮠EC2 関連ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ãƒ‡ãƒ•ォルト㮠AWS リージョンを設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:93 msgid "Module defaults groups" msgstr "モジュールã®ãƒ‡ãƒ•ォルトグループ" #: ../../rst/user_guide/playbooks_module_defaults.rst:97 msgid "Ansible 2.7 adds a preview-status feature to group together modules that share common sets of parameters. This makes it easier to author playbooks making heavy use of API-based modules such as cloud modules." msgstr "Ansible 2.7 ã§ã¯ã€å…±é€šã®ãƒ‘ラメーターセットをæŒã¤ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã¾ã¨ã‚ã¦è¡¨ç¤ºã™ã‚‹ãƒ—レビューステータス機能ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ã“れã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¦ãƒ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãªã©ã® API ベースã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’多用ã™ã‚‹ Playbook ã®ä½œæˆãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:100 msgid "Group" msgstr "グループ" #: ../../rst/user_guide/playbooks_module_defaults.rst:100 msgid "Purpose" msgstr "目的" #: ../../rst/user_guide/playbooks_module_defaults.rst:100 msgid "Ansible Version" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³" #: ../../rst/user_guide/playbooks_module_defaults.rst:102 msgid "aws" msgstr "aws" #: ../../rst/user_guide/playbooks_module_defaults.rst:102 msgid "Amazon Web Services" msgstr "Amazon Web Services" #: ../../rst/user_guide/playbooks_module_defaults.rst:102 #: ../../rst/user_guide/playbooks_module_defaults.rst:104 #: ../../rst/user_guide/playbooks_module_defaults.rst:106 msgid "2.7" msgstr "2.7" #: ../../rst/user_guide/playbooks_module_defaults.rst:104 msgid "azure" msgstr "azure" #: ../../rst/user_guide/playbooks_module_defaults.rst:104 msgid "Azure" msgstr "Azure" #: ../../rst/user_guide/playbooks_module_defaults.rst:106 msgid "gcp" msgstr "gcp" #: ../../rst/user_guide/playbooks_module_defaults.rst:106 msgid "Google Cloud Platform" msgstr "Google Cloud Platform" #: ../../rst/user_guide/playbooks_module_defaults.rst:108 msgid "k8s" msgstr "k8s" #: ../../rst/user_guide/playbooks_module_defaults.rst:108 msgid "Kubernetes" msgstr "Kubernetes" #: ../../rst/user_guide/playbooks_module_defaults.rst:108 #: ../../rst/user_guide/playbooks_module_defaults.rst:110 msgid "2.8" msgstr "2.8" #: ../../rst/user_guide/playbooks_module_defaults.rst:110 msgid "os" msgstr "os" #: ../../rst/user_guide/playbooks_module_defaults.rst:110 msgid "OpenStack" msgstr "OpenStack" #: ../../rst/user_guide/playbooks_module_defaults.rst:112 msgid "acme" msgstr "acme" #: ../../rst/user_guide/playbooks_module_defaults.rst:112 msgid "ACME" msgstr "ACME" #: ../../rst/user_guide/playbooks_module_defaults.rst:112 #: ../../rst/user_guide/playbooks_module_defaults.rst:114 #: ../../rst/user_guide/playbooks_module_defaults.rst:116 #: ../../rst/user_guide/playbooks_module_defaults.rst:118 msgid "2.10" msgstr "2.10" #: ../../rst/user_guide/playbooks_module_defaults.rst:114 msgid "docker*" msgstr "docker*" #: ../../rst/user_guide/playbooks_module_defaults.rst:114 msgid "Docker" msgstr "Docker" #: ../../rst/user_guide/playbooks_module_defaults.rst:116 msgid "ovirt" msgstr "ovirt" #: ../../rst/user_guide/playbooks_module_defaults.rst:116 msgid "oVirt" msgstr "oVirt" #: ../../rst/user_guide/playbooks_module_defaults.rst:118 msgid "vmware" msgstr "vmware" #: ../../rst/user_guide/playbooks_module_defaults.rst:118 msgid "VMware" msgstr "VMware" #: ../../rst/user_guide/playbooks_module_defaults.rst:121 msgid "The `docker_stack `_ module is not included in the ``docker`` defaults group." msgstr "`docker_stack `_ モジュールã¯ã€``docker`` デフォルトグループã«ã¯å«ã¾ã‚Œã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_module_defaults.rst:123 msgid "Use the groups with ``module_defaults`` by prefixing the group name with ``group/`` - for example ``group/aws``." msgstr "グループåã®å‰ã« ``group/`` を追加ã—㦠(例: ``group/aws``)ã€``module_defaults`` ã§ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:125 msgid "In a playbook, you can set module defaults for whole groups of modules, such as setting a common AWS region." msgstr "Playbook ã§ã¯ã€ä¸€èˆ¬çš„㪠AWS リージョンã®è¨­å®šãªã©ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚°ãƒ«ãƒ¼ãƒ—全体ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトを設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:145 msgid "In ansible-core 2.12, collections can define their own groups in the ``meta/runtime.yml`` file. ``module_defaults`` does not take the ``collections`` keyword into account, so the fully qualified group name must be used for new groups in ``module_defaults``." msgstr "ansible-core 2.12 ã§ã¯ã€ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã¯ ``meta/runtime.yml`` ファイルã§ç‹¬è‡ªã®ã‚°ãƒ«ãƒ¼ãƒ—を定義ã§ãã¾ã™ã€‚``module_defaults`` 㯠``collections`` キーワードを考慮ã«å…¥ã‚Œãªã„ãŸã‚ã€å®Œå…¨ä¿®é£¾ã‚°ãƒ«ãƒ¼ãƒ—åã‚’ ``module_defaults`` ã®æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_module_defaults.rst:147 msgid "Here is an example ``runtime.yml`` file for a collection and a sample playbook using the group." msgstr "以下ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—を使用ã—ãŸã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³ã‚µãƒ³ãƒ—ル Playbook ã® ``runtime.yml`` ファイルã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:5 msgid "Interactive input: prompts" msgstr "インタラクティブãªå…¥åŠ›: prompt" #: ../../rst/user_guide/playbooks_prompts.rst:7 msgid "If you want your playbook to prompt the user for certain input, add a 'vars_prompt' section. Prompting the user for variables lets you avoid recording sensitive data like passwords. In addition to security, prompts support flexibility. For example, if you use one playbook across multiple software releases, you could prompt for the particular release version." msgstr "Playbook ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç‰¹å®šã®å…¥åŠ›ã‚’ä¿ƒã—ãŸã„å ´åˆã¯ã€ã€Œvars_promptã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’追加ã—ã¾ã™ã€‚ユーザーã«å¤‰æ•°ã®å…¥åŠ›ã‚’ä¿ƒã™ã“ã¨ã§ã€ãƒ‘スワードã®ã‚ˆã†ãªæ©Ÿå¯†ãƒ‡ãƒ¼ã‚¿ã®è¨˜éŒ²ã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚セキュリティーã®ã»ã‹ã«ã€ãƒ—ãƒ­ãƒ³ãƒ—ãƒˆã¯æŸ”軟性をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€1 ã¤ã® Playbook を複数ã®ã‚½ãƒ•トウェアリリースã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ç‰¹å®šã®ãƒªãƒªãƒ¼ã‚¹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å…¥åŠ›ã‚’ä¿ƒã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:12 msgid "Here is a most basic example::" msgstr "ä»¥ä¸‹ã¯æœ€ã‚‚基本的ãªä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:31 msgid "The user input is hidden by default but it can be made visible by setting ``private: no``." msgstr "ユーザー入力ã¯ãƒ‡ãƒ•ォルトã§ã¯è¡¨ç¤ºã•れã¾ã›ã‚“ãŒã€``private: no`` を設定ã™ã‚‹ã“ã¨ã§è¡¨ç¤ºã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:34 msgid "Prompts for individual ``vars_prompt`` variables will be skipped for any variable that is already defined through the command line ``--extra-vars`` option, or when running from a non-interactive session (such as cron or Ansible AWX). See :ref:`passing_variables_on_the_command_line`." msgstr "個別㮠``vars_prompt`` 変数ã®å…¥åŠ›ã‚’æ±‚ã‚るプロンプトã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã® ``--extra-vars`` オプションã§ã™ã§ã«å®šç¾©ã•れã¦ã„る変数やã€éžå¯¾è©±çš„ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ (cron ã‚„ Ansible AWX ãªã©) ã‹ã‚‰å®Ÿè¡Œã™ã‚‹å ´åˆã«çœç•¥ã•れã¾ã™ã€‚「:ref:`passing_variables_on_the_command_line`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_prompts.rst:36 msgid "If you have a variable that changes infrequently, you can provide a default value that can be overridden::" msgstr "ã¾ã‚Œã«å¤‰æ›´ã™ã‚‹å¤‰æ•°ãŒã‚ã‚‹å ´åˆã¯ã€ä¸Šæ›¸ãã§ãるデフォルト値を指定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:45 msgid "Encrypting values supplied by ``vars_prompt``" msgstr "``vars_prompt`` ã«ã‚ˆã‚Šæä¾›ã•ã‚Œã‚‹å€¤ã®æš—å·åŒ–" #: ../../rst/user_guide/playbooks_prompts.rst:47 msgid "You can encrypt the entered value so you can use it, for instance, with the user module to define a password::" msgstr "入力値を暗å·åŒ–ã—ã¦ã€ãŸã¨ãˆã°ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ãƒ‘スワードを定義ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:58 msgid "If you have `Passlib `_ installed, you can use any crypt scheme the library supports:" msgstr "`Passlib `_ をインストールã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ©ã‚¤ãƒ–ラリーãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ä»»æ„ã® crypt スキームを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:60 msgid "*des_crypt* - DES Crypt" msgstr "*des_crypt* - DES Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:61 msgid "*bsdi_crypt* - BSDi Crypt" msgstr "*bsdi_crypt* - BSDi Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:62 msgid "*bigcrypt* - BigCrypt" msgstr "*bigcrypt* - BigCrypt" #: ../../rst/user_guide/playbooks_prompts.rst:63 msgid "*crypt16* - Crypt16" msgstr "*crypt16* - Crypt16" #: ../../rst/user_guide/playbooks_prompts.rst:64 #: ../../rst/user_guide/playbooks_prompts.rst:87 msgid "*md5_crypt* - MD5 Crypt" msgstr "*md5_crypt* - MD5 Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:65 #: ../../rst/user_guide/playbooks_prompts.rst:86 msgid "*bcrypt* - BCrypt" msgstr "*bcrypt* - BCrypt" #: ../../rst/user_guide/playbooks_prompts.rst:66 msgid "*sha1_crypt* - SHA-1 Crypt" msgstr "*sha1_crypt* - SHA-1 Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:67 msgid "*sun_md5_crypt* - Sun MD5 Crypt" msgstr "*sun_md5_crypt* - Sun MD5 Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:68 #: ../../rst/user_guide/playbooks_prompts.rst:88 msgid "*sha256_crypt* - SHA-256 Crypt" msgstr "*sha256_crypt* - SHA-256 Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:69 #: ../../rst/user_guide/playbooks_prompts.rst:89 msgid "*sha512_crypt* - SHA-512 Crypt" msgstr "*sha512_crypt* - SHA-512 Crypt" #: ../../rst/user_guide/playbooks_prompts.rst:70 msgid "*apr_md5_crypt* - Apache's MD5-Crypt variant" msgstr "*apr_md5_crypt* - Apache's MD5-Crypt variant" #: ../../rst/user_guide/playbooks_prompts.rst:71 msgid "*phpass* - PHPass' Portable Hash" msgstr "*phpass* - PHPass' Portable Hash" #: ../../rst/user_guide/playbooks_prompts.rst:72 msgid "*pbkdf2_digest* - Generic PBKDF2 Hashes" msgstr "*pbkdf2_digest* - Generic PBKDF2 Hashes" #: ../../rst/user_guide/playbooks_prompts.rst:73 msgid "*cta_pbkdf2_sha1* - Cryptacular's PBKDF2 hash" msgstr "*cta_pbkdf2_sha1* - Cryptacular's PBKDF2 hash" #: ../../rst/user_guide/playbooks_prompts.rst:74 msgid "*dlitz_pbkdf2_sha1* - Dwayne Litzenberger's PBKDF2 hash" msgstr "*dlitz_pbkdf2_sha1* - Dwayne Litzenberger's PBKDF2 hash" #: ../../rst/user_guide/playbooks_prompts.rst:75 msgid "*scram* - SCRAM Hash" msgstr "*scram* - SCRAM Hash" #: ../../rst/user_guide/playbooks_prompts.rst:76 msgid "*bsd_nthash* - FreeBSD's MCF-compatible nthash encoding" msgstr "*bsd_nthash* - FreeBSD's MCF 互æ›ã® nthash エンコーディング" #: ../../rst/user_guide/playbooks_prompts.rst:78 msgid "The only parameters accepted are 'salt' or 'salt_size'. You can use your own salt by defining 'salt', or have one generated automatically using 'salt_size'. By default Ansible generates a salt of size 8." msgstr "使用ã§ãるパラメーターã¯ã€Œsaltã€ã¾ãŸã¯ã€Œsalt_sizeã€ã®ã¿ã§ã™ã€‚「saltã€ã‚’定義ã—ã¦ç‹¬è‡ªã®ã‚½ãƒ«ãƒˆã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã€ã€Œsalt_sizeã€ã‚’使用ã—ã¦è‡ªå‹•çš„ã«ç”Ÿæˆã•れるソルトを使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ã‚µã‚¤ã‚º 8 ã® salt を生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:84 msgid "If you do not have Passlib installed, Ansible uses the `crypt `_ library as a fallback. Ansible supports at most four crypt schemes, depending on your platform at most the following crypt schemes are supported:" msgstr "Passlib ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„å ´åˆã€Ansible ã¯ãƒ•ォールãƒãƒƒã‚¯ã¨ã—㦠`crypt `_ ライブラリーを使用ã—ã¾ã™ã€‚Ansible ã¯æœ€å¤§ã§ 4 ã¤ã®æš—å·æ–¹å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ãŒã€ãƒ—ラットフォームã«ã‚ˆã£ã¦ã¯æœ€å¤§ã§ä»¥ä¸‹ã®æš—å·æ–¹å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_prompts.rst:95 msgid "Allowing special characters in ``vars_prompt`` values" msgstr "``vars_prompt`` 値ã§ã®ç‰¹æ®Šæ–‡å­—ã®è¨±å¯" #: ../../rst/user_guide/playbooks_prompts.rst:97 msgid "Some special characters, such as ``{`` and ``%`` can create templating errors. If you need to accept special characters, use the ``unsafe`` option::" msgstr "``{`` ã‚„ ``%`` ãªã©ã®ç‰¹æ®Šæ–‡å­—ã¯ã€ãƒ†ãƒ³ãƒ—レートエラーã®ä½œæˆãŒå¯èƒ½ã§ã™ã€‚特殊文字をå—ã‘入れる必è¦ãŒã‚ã‚‹å ´åˆã¯ã€``unsafe`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_python_version.rst:5 msgid "Python3 in templates" msgstr "テンプレート内㮠Python3" #: ../../rst/user_guide/playbooks_python_version.rst:7 msgid "Ansible uses Jinja2 to take advantage of Python data types and standard functions in templates and variables. You can use these data types and standard functions to perform a rich set of operations on your data. However, if you use templates, you must be aware of differences between Python versions." msgstr "Ansible 㯠Jinja2 を使用ã—ã¦ã€ãƒ†ãƒ³ãƒ—レートや変数㫠Python ã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚„標準関数を活用ã—ã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚„標準関数を利用ã™ã‚‹ã“ã¨ã§ã€ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã—ã¦è±Šå¯Œãªæ“作を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ãƒ†ãƒ³ãƒ—レートを使用ã™ã‚‹å ´åˆã¯ã€Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ˆã‚‹é•ã„ã«æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_python_version.rst:11 msgid "These topics help you design templates that work on both Python2 and Python3. They might also help if you are upgrading from Python2 to Python3. Upgrading within Python2 or Python3 does not usually introduce changes that affect Jinja2 templates." msgstr "ã“れらã®ãƒˆãƒ”ックã¯ã€Python2 㨠Python3 ã®ä¸¡æ–¹ã§å‹•作ã™ã‚‹ãƒ†ãƒ³ãƒ—レートをデザインã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚ã¾ãŸã€Python2 ã‹ã‚‰ Python3 ã¸ã®ã‚¢ãƒƒãƒ—グレードã®éš›ã«ã‚‚役立ã¤ã§ã—ょã†ã€‚Python2 ã‚„ Python3 ã«ã‚¢ãƒƒãƒ—グレードã—ã¦ã‚‚ã€é€šå¸¸ã¯ Jinja2 ã®ãƒ†ãƒ³ãƒ—レートã«å½±éŸ¿ã‚’与ãˆã‚‹ã‚ˆã†ãªå¤‰æ›´ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_python_version.rst:16 msgid "Dictionary views" msgstr "ディクショナリービュー" #: ../../rst/user_guide/playbooks_python_version.rst:18 msgid "In Python2, the :meth:`dict.keys`, :meth:`dict.values`, and :meth:`dict.items` methods return a list. Jinja2 returns that to Ansible via a string representation that Ansible can turn back into a list." msgstr "Python2 ã§ã¯ã€:meth:`dict.keys`ã€:meth:`dict.values`ã€ãŠã‚ˆã³ :meth:`dict.items` メソッドã¯ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã€‚Jinja2 ã¯ã€Ansible ãŒãƒªã‚¹ãƒˆã«æˆ»ã£ã¦ããŸæ–‡å­—列表ç¾ã§ Ansible ã«è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_python_version.rst:22 msgid "In Python3, those methods return a :ref:`dictionary view ` object. The string representation that Jinja2 returns for dictionary views cannot be parsed back into a list by Ansible. It is, however, easy to make this portable by using the :func:`list ` filter whenever using :meth:`dict.keys`, :meth:`dict.values`, or :meth:`dict.items`::" msgstr "Python3 ã§ã¯ã€ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ :ref:`dictionary view ` オブジェクトを返ã—ã¾ã™ã€‚Jinja2 ãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ãƒ“ューã«è¿”ã™æ–‡å­—列表ç¾ã¯ã€Ansible ã§ã¯ãƒªã‚¹ãƒˆã«è§£æžã—ç›´ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。ã—ã‹ã—ã€:meth:`dict.keys`ã€:meth:`dict.values`ã€ã¾ãŸã¯ :meth:`dict.items` を使用ã™ã‚‹éš›ã«ã¯å¿…ãš :func:`list ` フィルターを使用ã™ã‚‹ã“ã¨ã§ã€ç°¡å˜ã«ç§»æ¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_python_version.rst:43 msgid "dict.iteritems()" msgstr "dict.iteritems()" #: ../../rst/user_guide/playbooks_python_version.rst:45 msgid "Python2 dictionaries have :meth:`~dict.iterkeys`, :meth:`~dict.itervalues`, and :meth:`~dict.iteritems` methods." msgstr "Python2 ディクショナリーã«ã¯ã€:meth:`~dict.iterkeys` メソッドã€:meth:`~dict.itervalues` メソッドã€ãŠã‚ˆã³ :meth:`~dict.iteritems` メソッドãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_python_version.rst:47 msgid "Python3 dictionaries do not have these methods. Use :meth:`dict.keys`, :meth:`dict.values`, and :meth:`dict.items` to make your playbooks and templates compatible with both Python2 and Python3::" msgstr "Python3 ディクショナリーã«ã¯ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚りã¾ã›ã‚“。:meth:`dict.keys`ã€:meth:`dict.values`ã€ãŠã‚ˆã³ :meth:`dict.items` を使用ã—ã¦ã€Playbook ãŠã‚ˆã³ãƒ†ãƒ³ãƒ—レートを Python2 㨠Python3 ã®ä¸¡æ–¹ã«å¯¾å¿œã•ã›ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_python_version.rst:62 msgid "The :ref:`pb-py-compat-dict-views` entry for information on why the :func:`list filter ` is necessary here." msgstr "ã“ã“ã§ :func:`list filter ` ãŒå¿…è¦ãªç†ç”±ã¯ã€:ref:`pb-py-compat-dict-views` エントリーをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse.rst:5 msgid "Re-using Ansible artifacts" msgstr "Ansible アーティファクトã®å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:7 msgid "You can write a simple playbook in one very large file, and most users learn the one-file approach first. However, breaking tasks up into different files is an excellent way to organize complex sets of tasks and reuse them. Smaller, more distributed artifacts let you re-use the same variables, tasks, and plays in multiple playbooks to address different use cases. You can use distributed artifacts across multiple parent playbooks or even multiple times within one playbook. For example, you might want to update your customer database as part of several different playbooks. If you put all the tasks related to updating your database in a tasks file, you can re-use them in many playbooks while only maintaining them in one place." msgstr "ç°¡å˜ãª Playbook ã‚’éžå¸¸ã«å¤§ã㪠1 ã¤ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã¾ãš 1 ã¤ã®ãƒ•ァイルを使用ã—ãŸæ–¹æ³•ã‚’å­¦ã³ã¾ã™ã€‚ã—ã‹ã—ã€ã‚¿ã‚¹ã‚¯ã‚’ç•°ãªã‚‹ãƒ•ァイルã«åˆ†å‰²ã™ã‚‹ã“ã¨ã¯ã€è¤‡é›‘ãªã‚¿ã‚¹ã‚¯ã®ã‚»ãƒƒãƒˆã‚’æ•´ç†ã—ã¦å†åˆ©ç”¨ã™ã‚‹ãŸã‚ã®å„ªã‚ŒãŸæ–¹æ³•ã§ã™ã€‚å°ã•ã分散ã•れãŸã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトを使用ã—ã¦ã€åŒã˜å¤‰æ•°ã€ã‚¿ã‚¹ã‚¯ã€ãƒ—レイを複数㮠Playbook ã§å†åˆ©ç”¨ã—ã€ç•°ãªã‚‹ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚分散ã•れãŸã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトã¯ã€è¤‡æ•°ã®è¦ª Playbook ã«ã¾ãŸãŒã£ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã€1 ã¤ã® Playbook 内ã§è¤‡æ•°å›žä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€è¤‡æ•°ã® Playbook ã®ä¸€éƒ¨ã¨ã—ã¦é¡§å®¢ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’æ›´æ–°ã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æ›´æ–°ã«é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’タスクファイルã«ã¾ã¨ã‚ã¦ãŠã‘ã°ã€ãれらを 1 カ所ã§ç®¡ç†ã™ã‚‹ã ã‘ã§ã€å¤šãã® Playbook ã§å†åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:13 msgid "Creating re-usable files and roles" msgstr "å†åˆ©ç”¨å¯èƒ½ãªãƒ•ァイルãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ä½œæˆ" #: ../../rst/user_guide/playbooks_reuse.rst:15 msgid "Ansible offers four distributed, re-usable artifacts: variables files, task files, playbooks, and roles." msgstr "Ansible ã¯ã€å¤‰æ•°ãƒ•ァイルã€ã‚¿ã‚¹ã‚¯ãƒ•ァイルã€Playbookã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã® 4 ã¤ã«åˆ†æ•£ã—ãŸå†åˆ©ç”¨å¯èƒ½ãªã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトをæä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:17 msgid "A variables file contains only variables." msgstr "変数ファイルã«ã¯å¤‰æ•°ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:18 msgid "A task file contains only tasks." msgstr "タスクファイルã«ã¯ã‚¿ã‚¹ã‚¯ã®ã¿ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:19 msgid "A playbook contains at least one play, and may contain variables, tasks, and other content. You can re-use tightly focused playbooks, but you can only re-use them statically, not dynamically." msgstr "Playbook ã«ã¯ã€å°‘ãªãã¨ã‚‚ 1 ã¤ã®ãƒ—レイãŒå«ã¾ã‚Œã¦ãŠã‚Šã€å¤‰æ•°ã€ã‚¿ã‚¹ã‚¯ã€ãã®ä»–ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚厳密ã«ç„¦ç‚¹ã‚’絞ã£ãŸ Playbook ã¯å†åˆ©ç”¨ã§ãã¾ã™ãŒã€å‹•çš„ã«ã§ã¯ãªãé™çš„ã«ã—ã‹å†åˆ©ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_reuse.rst:20 msgid "A role contains a set of related tasks, variables, defaults, handlers, and even modules or other plugins in a defined file-tree. Unlike variables files, task files, or playbooks, roles can be easily uploaded and shared via Ansible Galaxy. See :ref:`playbooks_reuse_roles` for details about creating and using roles." msgstr "ロールã«ã¯ã€é–¢é€£ã™ã‚‹ã‚¿ã‚¹ã‚¯ã€å¤‰æ•°ã€ãƒ‡ãƒ•ォルトã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€ã•らã«ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„ä»–ã®ãƒ—ラグインã®ã‚»ãƒƒãƒˆãŒã€å®šç¾©ã•れãŸãƒ•ã‚¡ã‚¤ãƒ«ãƒ„ãƒªãƒ¼ã«æ ¼ç´ã•れã¦ã„ã¾ã™ã€‚変数ファイルã€ã‚¿ã‚¹ã‚¯ãƒ•ァイルã€Playbook ã¨ã¯ç•°ãªã‚Šã€ãƒ­ãƒ¼ãƒ«ã¯ Ansible Galaxy ã§ç°¡å˜ã«ã‚¢ãƒƒãƒ—ロードã—ã¦å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ロールã®ä½œæˆã¨ä½¿ç”¨ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`playbooks_reuse_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse.rst:25 msgid "Re-using playbooks" msgstr "Playbook ã®å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:27 msgid "You can incorporate multiple playbooks into a main playbook. However, you can only use imports to re-use playbooks. For example:" msgstr "複数㮠Playbook をメイン㮠Playbook ã«çµ„ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ãŒã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ã¿ã‚’使用ã—㦠Playbook ã‚’å†ä½¿ç”¨ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:34 msgid "Importing incorporates playbooks in other playbooks statically. Ansible runs the plays and tasks in each imported playbook in the order they are listed, just as if they had been defined directly in the main playbook." msgstr "インãƒãƒ¼ãƒˆã§ã¯ã€ä»–ã® Playbook ã«é™çš„ã« Playbook を組ã¿è¾¼ã¿ã¾ã™ã€‚Ansible ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸå„ Playbook 内ã®ãƒ—レイやタスクをã€ãƒ¡ã‚¤ãƒ³ã® Playbook ã§ç›´æŽ¥å®šç¾©ã—ãŸå ´åˆã¨åŒæ§˜ã«ã€ãƒªã‚¹ãƒˆã«è¨˜è¼‰ã•れãŸé †ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:36 msgid "You can select which playbook you want to import at runtime by defining your imported playbook filename with a variable, then passing the variable with either ``--extra-vars`` or the ``vars`` keyword. For example:" msgstr "変数ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れ㟠Playbook ファイルを定義ã—ã€``--extra-vars`` ã¾ãŸã¯ ``vars`` キーワードã§å¤‰æ•°ã‚’渡ã™ã“ã¨ã§ã€ãƒ©ãƒ³ã‚¿ã‚¤ãƒ æ™‚ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ Playbook ã‚’é¸æŠžã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:45 msgid "If you run this playbook with ``ansible-playbook my_playbook -e import_from_extra_var=other_playbook.yml``, Ansible imports both one_playbook.yml and other_playbook.yml." msgstr "``ansible-playbook my_playbook -e import_from_extra_var=other_playbook.yml`` を使用ã—ã¦ã“ã® Playbook を実行ã™ã‚‹ã¨ã€Ansible 㯠one_playbook.yml 㨠other_playbook.yml ã®ä¸¡æ–¹ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:48 msgid "Re-using files and roles" msgstr "ファイルãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:50 msgid "Ansible offers two ways to re-use files and roles in a playbook: dynamic and static." msgstr "Ansible ã¯ã€Playbook ã§ãƒ•ァイルã¨ãƒ­ãƒ¼ãƒ«ã‚’å†åˆ©ç”¨ã™ã‚‹ 2 ã¤ã®æ–¹æ³• (å‹•çš„ãŠã‚ˆã³é™çš„) ã‚’æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:52 msgid "For dynamic re-use, add an ``include_*`` task in the tasks section of a play:" msgstr "å‹•çš„å†åˆ©ç”¨ã«ã¯ã€ãƒ—レイ㮠tasks セクション㫠``include_*`` タスクを追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:54 msgid ":ref:`include_role `" msgstr ":ref:`include_role `" #: ../../rst/user_guide/playbooks_reuse.rst:55 msgid ":ref:`include_tasks `" msgstr ":ref:`include_tasks `" #: ../../rst/user_guide/playbooks_reuse.rst:56 msgid ":ref:`include_vars `" msgstr ":ref:`include_vars `" #: ../../rst/user_guide/playbooks_reuse.rst:58 msgid "For static re-use, add an ``import_*`` task in the tasks section of a play:" msgstr "é™çš„ãªå†åˆ©ç”¨ã®å ´åˆã¯ã€ãƒ—レイ㮠tasks セクション㫠``import_*`` タスクを追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:60 msgid ":ref:`import_role `" msgstr ":ref:`import_role `" #: ../../rst/user_guide/playbooks_reuse.rst:61 msgid ":ref:`import_tasks `" msgstr ":ref:`import_tasks `" #: ../../rst/user_guide/playbooks_reuse.rst:63 msgid "Task include and import statements can be used at arbitrary depth." msgstr "タスク㮠include æ–‡ãŠã‚ˆã³ import æ–‡ã¯ä»»æ„ã®æ·±ã•ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:65 msgid "You can still use the bare :ref:`roles ` keyword at the play level to incorporate a role in a playbook statically. However, the bare :ref:`include ` keyword, once used for both task files and playbook-level includes, is now deprecated." msgstr "プレイレベルã§è£¸ã® :ref:`roles ` キーワードを使用ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã‚’é™çš„ã« Playbook ã«çµ„ã¿è¾¼ã‚€ã“ã¨ã¯å¯èƒ½ã§ã™ã€‚ã—ã‹ã—ã€ã‹ã¤ã¦ã‚¿ã‚¹ã‚¯ãƒ•ァイル㨠Playbook レベルã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã®ä¸¡æ–¹ã«ä½¿ç”¨ã•れã¦ã„ãŸè£¸ã® :ref:`include ` キーワードã¯ã€ç¾åœ¨ã§ã¯éžæŽ¨å¥¨ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:68 msgid "Includes: dynamic re-use" msgstr "インクルード: å‹•çš„å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:70 msgid "Including roles, tasks, or variables adds them to a playbook dynamically. Ansible processes included files and roles as they come up in a playbook, so included tasks can be affected by the results of earlier tasks within the top-level playbook. Included roles and tasks are similar to handlers - they may or may not run, depending on the results of other tasks in the top-level playbook." msgstr "ロールã€ã‚¿ã‚¹ã‚¯ã€ã¾ãŸã¯å¤‰æ•°ã‚’インクルードã™ã‚‹ã¨ã€Playbook ã«å‹•çš„ã«è¿½åŠ ã•れã¾ã™ã€‚Ansible ã¯ã€Playbook ã«åŒæ¢±ã•れるインクルードファイルやロールを処ç†ã™ã‚‹ãŸã‚ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚¿ã‚¹ã‚¯ã¯ã€ãƒˆãƒƒãƒ—レベル㮠Playbook 内ã®ä»¥å‰ã®ã‚¿ã‚¹ã‚¯ã®çµæžœã«ã‚ˆã£ã¦å½±éŸ¿ã‚’å—ã‘ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚インクルードã•れるロールやタスクã¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨åŒæ§˜ã€ãƒˆãƒƒãƒ—レベル㮠Playbook 内ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã®çµæžœã«å¿œã˜ã¦ã€å®Ÿè¡Œã•れãŸã‚Šã•れãªã‹ã£ãŸã‚Šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:72 msgid "The primary advantage of using ``include_*`` statements is looping. When a loop is used with an include, the included tasks or role will be executed once for each item in the loop." msgstr "``include_*`` 文を使用ã™ã‚‹ä¸»ãªåˆ©ç‚¹ã¯ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚インクルードã§ãƒ«ãƒ¼ãƒ—ãŒä½¿ç”¨ã•れるã¨ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れãŸã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ãŒãƒ«ãƒ¼ãƒ—ã®å„é …ç›®ã«å¯¾ã—㦠1 回実行ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:74 msgid "The filenames for included roles, tasks, and vars are templated before inclusion." msgstr "å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã€ã‚¿ã‚¹ã‚¯ã€ãŠã‚ˆã³å¤‰æ•°ã®ãƒ•ァイルåã¯ã€åŒ…å«å‰ã«ãƒ†ãƒ³ãƒ—レート化ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:76 msgid "You can pass variables into includes. See :ref:`ansible_variable_precedence` for more details on variable inheritance and precedence." msgstr "å¤‰æ•°ã‚’ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚変数ã®ç¶™æ‰¿ã¨å„ªå…ˆé †ä½ã®è©³ç´°ã¯ã€ã€Œ:ref:`ansible_variable_precedence`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse.rst:79 msgid "Imports: static re-use" msgstr "インãƒãƒ¼ãƒˆ: é™çš„å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:81 msgid "Importing roles, tasks, or playbooks adds them to a playbook statically. Ansible pre-processes imported files and roles before it runs any tasks in a playbook, so imported content is never affected by other tasks within the top-level playbook." msgstr "ロールã€ã‚¿ã‚¹ã‚¯ã€ã¾ãŸã¯ Playbook をインãƒãƒ¼ãƒˆã™ã‚‹ã¨ã€ãれらãŒé™çš„ã« Playbook ã«è¿½åŠ ã•れã¾ã™ã€‚Ansible ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ•ァイルやロールを Playbook 内ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å‰ã«å‰å‡¦ç†ã™ã‚‹ãŸã‚ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒãƒˆãƒƒãƒ—レベル㮠Playbook 内ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã®å½±éŸ¿ã‚’å—ã‘ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_reuse.rst:83 msgid "The filenames for imported roles and tasks support templating, but the variables must be available when Ansible is pre-processing the imports. This can be done with the ``vars`` keyword or by using ``--extra-vars``." msgstr "インãƒãƒ¼ãƒˆã—ãŸãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ã‚¿ã‚¹ã‚¯ã®ãƒ•ァイルåã¯ãƒ†ãƒ³ãƒ—レートをサãƒãƒ¼ãƒˆã—ã¾ã™ãŒã€Ansible ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã®äº‹å‰å‡¦ç†æ™‚ã«å¤‰æ•°ãŒåˆ©ç”¨ã§ãるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€``vars`` キーワードã¾ãŸã¯ ``--extra-vars`` を使用ã—ã¦å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:85 msgid "You can pass variables to imports. You must pass variables if you want to run an imported file more than once in a playbook. For example:" msgstr "インãƒãƒ¼ãƒˆã«ã¯å¤‰æ•°ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚インãƒãƒ¼ãƒˆã—ãŸãƒ•ァイルを 1 ã¤ã® Playbook ã§è¤‡æ•°å›žå®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€å¤‰æ•°ã‚’渡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:102 msgid "See :ref:`ansible_variable_precedence` for more details on variable inheritance and precedence." msgstr "変数ã®ç¶™æ‰¿ãŠã‚ˆã³å„ªå…ˆé †ä½ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`ansible_variable_precedence`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse.rst:107 msgid "Comparing includes and imports: dynamic and static re-use" msgstr "インクルードã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®æ¯”較: å‹•çš„å†åˆ©ç”¨ãŠã‚ˆã³é™çš„å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:109 msgid "Each approach to re-using distributed Ansible artifacts has advantages and limitations. You may choose dynamic re-use for some playbooks and static re-use for others. Although you can use both dynamic and static re-use in a single playbook, it is best to select one approach per playbook. Mixing static and dynamic re-use can introduce difficult-to-diagnose bugs into your playbooks. This table summarizes the main differences so you can choose the best approach for each playbook you create." msgstr "分散ã—㟠Ansible ã®ã‚¢ãƒ¼ãƒ†ã‚£ãƒ•ァクトをå†åˆ©ç”¨ã™ã‚‹æ–¹æ³•ã«ã¯ã€ãれãžã‚Œåˆ©ç‚¹ã¨åˆ¶é™ãŒã‚りã¾ã™ã€‚一部㮠Playbook ã§ã¯å‹•çš„å†åˆ©ç”¨ã‚’行ã„ã€ä»–ã® Playbook ã§ã¯é™çš„å†åˆ©ç”¨ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚1 ã¤ã® Playbook ã§å‹•çš„å†åˆ©ç”¨ã¨é™çš„å†åˆ©ç”¨ã®ä¸¡æ–¹ã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€Playbook ã”ã¨ã« 1 ã¤ã®ã‚¢ãƒ—ローãƒã‚’é¸æŠžã™ã‚‹ã®ãŒæœ€å–„ã§ã™ã€‚é™çš„å†åˆ©ç”¨ã¨å‹•çš„å†åˆ©ç”¨ã‚’混在ã•ã›ã‚‹ã¨ã€è¨ºæ–­ãŒå›°é›£ãªãƒã‚°ãŒ Playbook ã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®è¡¨ã§ä¸»ãªé•ã„ã‚’ã¾ã¨ã‚ã¦ã„ã¾ã™ã€‚作æˆã™ã‚‹ Playbook ã”ã¨ã«æœ€é©ãªæ–¹æ³•ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse.rst:115 msgid "Include_*" msgstr "Include_*" #: ../../rst/user_guide/playbooks_reuse.rst:115 msgid "Import_*" msgstr "Import_*" #: ../../rst/user_guide/playbooks_reuse.rst:117 msgid "Type of re-use" msgstr "å†åˆ©ç”¨ã®ç¨®é¡ž" #: ../../rst/user_guide/playbooks_reuse.rst:117 msgid "Dynamic" msgstr "å‹•çš„" #: ../../rst/user_guide/playbooks_reuse.rst:117 msgid "Static" msgstr "é™çš„" #: ../../rst/user_guide/playbooks_reuse.rst:119 msgid "When processed" msgstr "å‡¦ç†æ™‚" #: ../../rst/user_guide/playbooks_reuse.rst:119 msgid "At runtime, when encountered" msgstr "ランタイム時㫠(発生ã—ãŸå ´åˆ)" #: ../../rst/user_guide/playbooks_reuse.rst:119 msgid "Pre-processed during playbook parsing" msgstr "Playbook ã®è§£æžä¸­ã«äº‹å‰å‡¦ç†" #: ../../rst/user_guide/playbooks_reuse.rst:121 msgid "Task or play" msgstr "タスクã¾ãŸã¯ãƒ—レイ" #: ../../rst/user_guide/playbooks_reuse.rst:121 msgid "All includes are tasks" msgstr "インクルードã¯ã™ã¹ã¦ã‚¿ã‚¹ã‚¯" #: ../../rst/user_guide/playbooks_reuse.rst:121 msgid "``import_playbook`` cannot be a task" msgstr "``import_playbook`` タスクã«ã™ã‚‹ã“ã¨ã¯ã§ããªã„" #: ../../rst/user_guide/playbooks_reuse.rst:123 msgid "Task options" msgstr "タスクオプション" #: ../../rst/user_guide/playbooks_reuse.rst:123 msgid "Apply only to include task itself" msgstr "タスク自体をå«ã‚ã‚‹å ´åˆã«ã®ã¿é©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:123 msgid "Apply to all child tasks in import" msgstr "インãƒãƒ¼ãƒˆä¸­ã®ã™ã¹ã¦ã®å­ã‚¿ã‚¹ã‚¯ã«é©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:125 msgid "Calling from loops" msgstr "ループã‹ã‚‰ã®å‘¼ã³å‡ºã—" #: ../../rst/user_guide/playbooks_reuse.rst:125 msgid "Executed once for each loop item" msgstr "å„ループ項目ã«å¯¾ã—㦠1 回実行" #: ../../rst/user_guide/playbooks_reuse.rst:125 msgid "Cannot be used in a loop" msgstr "ループã§ã¯ä½¿ç”¨ã§ããªã„" #: ../../rst/user_guide/playbooks_reuse.rst:127 msgid "Using ``--list-tags``" msgstr "``--list-tags`` ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:127 msgid "Tags within includes not listed" msgstr "掲載ã•れã¦ã„ãªã„インクルード内ã®ã‚¿ã‚°" #: ../../rst/user_guide/playbooks_reuse.rst:127 msgid "All tags appear with ``--list-tags``" msgstr "ã™ã¹ã¦ã®ã‚¿ã‚°ãŒ ``--list-tags`` ã§è¡¨ç¤º" #: ../../rst/user_guide/playbooks_reuse.rst:129 msgid "Using ``--list-tasks``" msgstr "``--list-tasks`` ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:129 msgid "Tasks within includes not listed" msgstr "リストã«ãªã„インクルード内ã®ã‚¿ã‚¹ã‚¯" #: ../../rst/user_guide/playbooks_reuse.rst:129 msgid "All tasks appear with ``--list-tasks``" msgstr "ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒ ``--list-tasks`` ã§è¡¨ç¤º" #: ../../rst/user_guide/playbooks_reuse.rst:131 msgid "Notifying handlers" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®é€šçŸ¥" #: ../../rst/user_guide/playbooks_reuse.rst:131 msgid "Cannot trigger handlers within includes" msgstr "インクルード内ã§ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’トリガーã§ããªã„" #: ../../rst/user_guide/playbooks_reuse.rst:131 msgid "Can trigger individual imported handlers" msgstr "インãƒãƒ¼ãƒˆã—ãŸå€‹åˆ¥ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’トリガーã§ãã‚‹" #: ../../rst/user_guide/playbooks_reuse.rst:133 msgid "Using ``--start-at-task``" msgstr "``--start-at-task`` ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:133 msgid "Cannot start at tasks within includes" msgstr "インクルード内ã®ã‚¿ã‚¹ã‚¯ã§é–‹å§‹ã§ããªã„" #: ../../rst/user_guide/playbooks_reuse.rst:133 msgid "Can start at imported tasks" msgstr "インãƒãƒ¼ãƒˆã•れãŸã‚¿ã‚¹ã‚¯ã‹ã‚‰å§‹ã‚られる" #: ../../rst/user_guide/playbooks_reuse.rst:135 msgid "Using inventory variables" msgstr "インベントリー変数ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:135 msgid "Can ``include_*: {{ inventory_var }}``" msgstr "``include_*: {{ inventory_var }}`` ãŒä½¿ç”¨ã§ãã‚‹" #: ../../rst/user_guide/playbooks_reuse.rst:135 msgid "Cannot ``import_*: {{ inventory_var }}``" msgstr "``import_*: {{ inventory_var }}`` ãŒä½¿ç”¨ã§ããªã„" #: ../../rst/user_guide/playbooks_reuse.rst:137 msgid "With playbooks" msgstr "Playbook ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:137 msgid "No ``include_playbook``" msgstr "``include_playbook`` ãªã—" #: ../../rst/user_guide/playbooks_reuse.rst:137 msgid "Can import full playbooks" msgstr "完全㪠Playbook をインãƒãƒ¼ãƒˆã§ãã‚‹" #: ../../rst/user_guide/playbooks_reuse.rst:139 msgid "With variables files" msgstr "変数ファイルã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:139 msgid "Can include variables files" msgstr "変数ファイルをå«ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹" #: ../../rst/user_guide/playbooks_reuse.rst:139 msgid "Use ``vars_files:`` to import variables" msgstr "``vars_files:`` を使用ã—ã¦å¤‰æ•°ã‚’インãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/playbooks_reuse.rst:145 msgid "There are also big differences in resource consumption and performance, imports are quite lean and fast, while includes require a lot of management and accounting." msgstr "ã¾ãŸã€ãƒªã‚½ãƒ¼ã‚¹ã®æ¶ˆè²»ã‚„パフォーマンスã«å¤§ããªé•ã„ãŒã‚りã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯éžå¸¸ã«æŸ”軟ã§é«˜é€Ÿã§ã™ãŒã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã«ã¯å¤šãã®ç®¡ç†ã¨ä¼šè¨ˆãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:149 msgid "Re-using tasks as handlers" msgstr "タスクをãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨ã—ã¦å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse.rst:151 msgid "You can also use includes and imports in the :ref:`handlers` section of a playbook. For instance, if you want to define how to restart Apache, you only have to do that once for all of your playbooks. You might make a ``restarts.yml`` file that looks like:" msgstr "Playbook ã® :ref:`handlers` セクションã§ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãŠã‚ˆã³ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€Apache ã®å†èµ·å‹•方法を定義ã™ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã® Playbook ã«å¯¾ã—ã¦ä¸€åº¦ã ã‘設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``restarts.yml`` ファイルを以下ã®ã‚ˆã†ã«è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:166 msgid "You can trigger handlers from either an import or an include, but the procedure is different for each method of re-use. If you include the file, you must notify the include itself, which triggers all the tasks in ``restarts.yml``. If you import the file, you must notify the individual task(s) within ``restarts.yml``. You can mix direct tasks and handlers with included or imported tasks and handlers." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¨ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã®ã©ã¡ã‚‰ã‹ã‚‰ã§ã‚‚èµ·å‹•ã§ãã¾ã™ãŒã€ãã®æ‰‹é †ã¯å†åˆ©ç”¨ã®æ–¹æ³•ã”ã¨ã«ç•°ãªã‚Šã¾ã™ã€‚ファイルをインクルードã™ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“を通知ã™ã‚‹å¿…è¦ãŒã‚りã€ã“れã«ã‚ˆã‚Š ``restarts.yml`` ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒç™ºç”Ÿã—ã¾ã™ã€‚ファイルをインãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã¯ã€``restarts.yml`` 内ã®å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã‚’通知ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚直接的ãªã‚¿ã‚¹ã‚¯ã‚„ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚¿ã‚¹ã‚¯ã‚„ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’混在ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:169 msgid "Triggering included (dynamic) handlers" msgstr "インクルード (å‹•çš„) ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ãƒˆãƒªã‚¬ãƒ¼" #: ../../rst/user_guide/playbooks_reuse.rst:171 msgid "Includes are executed at run-time, so the name of the include exists during play execution, but the included tasks do not exist until the include itself is triggered. To use the ``Restart apache`` task with dynamic re-use, refer to the name of the include itself. This approach triggers all tasks in the included file as handlers. For example, with the task file shown above:" msgstr "インクルードã¯ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã«å®Ÿè¡Œã•れるãŸã‚ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã®åå‰ã¯ãƒ—レイã®å®Ÿè¡Œä¸­ã«å­˜åœ¨ã—ã¾ã™ãŒã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れãŸã‚¿ã‚¹ã‚¯ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ãŒãƒˆãƒªã‚¬ãƒ¼ã•れるã¾ã§å­˜åœ¨ã—ã¾ã›ã‚“。``Restart apache`` タスクを動的å†åˆ©ç”¨ã§ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã®åå‰ã‚’å‚ç…§ã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã§ã¯ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ•ァイル内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ãŒãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¨ã—ã¦ãƒˆãƒªã‚¬ãƒ¼ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šã«ç¤ºã—ãŸã‚¿ã‚¹ã‚¯ãƒ•ァイルã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:185 msgid "Triggering imported (static) handlers" msgstr "インãƒãƒ¼ãƒˆã•れ㟠(é™çš„) ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ãƒˆãƒªã‚¬ãƒ¼" #: ../../rst/user_guide/playbooks_reuse.rst:187 msgid "Imports are processed before the play begins, so the name of the import no longer exists during play execution, but the names of the individual imported tasks do exist. To use the ``Restart apache`` task with static re-use, refer to the name of each task or tasks within the imported file. For example, with the task file shown above:" msgstr "インãƒãƒ¼ãƒˆã¯å†ç”Ÿé–‹å§‹å‰ã«å‡¦ç†ã•れるãŸã‚ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®åå‰ã¯å†ç”Ÿå®Ÿè¡Œä¸­ã«ã¯å­˜åœ¨ã—ã¾ã›ã‚“ãŒã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸå„タスクã®åå‰ã¯å­˜åœ¨ã—ã¾ã™ã€‚``Restart apache`` タスクをé™çš„ã«å†åˆ©ç”¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ•ァイル内ã®å„タスクã®åå‰ã‚’å‚ç…§ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šè¿°ã®ã‚¿ã‚¹ã‚¯ãƒ•ァイルã§ã‚れã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse.rst:204 msgid ":ref:`utilities_modules`" msgstr ":ref:`utilities_modules`" #: ../../rst/user_guide/playbooks_reuse.rst:205 msgid "Documentation of the ``include*`` and ``import*`` modules discussed here." msgstr "ã“ã“ã§èª¬æ˜Žã™ã‚‹ ``include*`` モジュールãŠã‚ˆã³ ``import*`` モジュールã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ" #: ../../rst/user_guide/playbooks_reuse.rst:207 #: ../../rst/user_guide/playbooks_reuse_includes.rst:16 #: ../../rst/user_guide/playbooks_reuse_roles.rst:605 #: ../../rst/user_guide/playbooks_roles.rst:16 msgid "Review the basic Playbook language features" msgstr "基本的㪠Playbook 言語機能ã®ç¢ºèª" #: ../../rst/user_guide/playbooks_reuse.rst:209 #: ../../rst/user_guide/playbooks_reuse_includes.rst:20 msgid "All about variables in playbooks" msgstr "Playbook ã®å¤‰æ•°ã®è©³ç´°ã®ã™ã¹ã¦" #: ../../rst/user_guide/playbooks_reuse.rst:211 #: ../../rst/user_guide/playbooks_reuse_includes.rst:22 #: ../../rst/user_guide/playbooks_reuse_roles.rst:611 msgid "Conditionals in playbooks" msgstr "Playbook ã®æ¡ä»¶" #: ../../rst/user_guide/playbooks_reuse.rst:213 #: ../../rst/user_guide/playbooks_reuse_includes.rst:24 #: ../../rst/user_guide/playbooks_reuse_roles.rst:613 msgid "Loops in playbooks" msgstr "Playbook ã®ãƒ«ãƒ¼ãƒ—" #: ../../rst/user_guide/playbooks_reuse.rst:216 #: ../../rst/user_guide/playbooks_reuse_roles.rst:600 #: ../../rst/user_guide/playbooks_roles.rst:13 msgid ":ref:`ansible_galaxy`" msgstr ":ref:`ansible_galaxy`" #: ../../rst/user_guide/playbooks_reuse.rst:217 #: ../../rst/user_guide/playbooks_roles.rst:14 msgid "How to share roles on galaxy, role management" msgstr "Galaxy (ロール管ç†) ã«ãŠã‘るロールã®å…±æœ‰æ–¹æ³•" #: ../../rst/user_guide/playbooks_reuse.rst:218 #: ../../rst/user_guide/playbooks_reuse_includes.rst:29 #: ../../rst/user_guide/playbooks_reuse_roles.rst:620 msgid "`GitHub Ansible examples `_" msgstr "`GitHub Ansible ã®ä¾‹ `_" #: ../../rst/user_guide/playbooks_reuse.rst:219 #: ../../rst/user_guide/playbooks_reuse_includes.rst:30 #: ../../rst/user_guide/playbooks_reuse_roles.rst:621 msgid "Complete playbook files from the GitHub project source" msgstr "Github プロジェクトソースã®å®Œå…¨ãª Playbook ファイル" #: ../../rst/user_guide/playbooks_reuse_includes.rst:6 msgid "Including and importing" msgstr "インクルードãŠã‚ˆã³ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/playbooks_reuse_includes.rst:8 msgid "The content on this page has been moved to :ref:`playbooks_reuse`." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㯠:ref:`playbooks_reuse` ã«ç§»å‹•ã—ã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:5 msgid "Roles" msgstr "ロール" #: ../../rst/user_guide/playbooks_reuse_roles.rst:7 msgid "Roles let you automatically load related vars, files, tasks, handlers, and other Ansible artifacts based on a known file structure. After you group your content in roles, you can easily reuse them and share them with other users." msgstr "ロールを使用ã™ã‚‹ã¨ã€æ—¢çŸ¥ã®ãƒ•ァイル構造ã«åŸºã¥ã„ã¦ã€é–¢é€£ã®å¤‰æ•°ã€ãƒ•ァイルã€ã‚¿ã‚¹ã‚¯ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€ãŠã‚ˆã³ãã®ä»–ã® Ansible アーティファクトを自動的ã«èª­ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ロール内ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をグループ化ã—ãŸå¾Œã€ç°¡å˜ã«å†åˆ©ç”¨ã§ãã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨å…±æœ‰ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:13 msgid "Role directory structure" msgstr "ロールã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ " #: ../../rst/user_guide/playbooks_reuse_roles.rst:15 msgid "An Ansible role has a defined directory structure with eight main standard directories. You must include at least one of these directories in each role. You can omit any directories the role does not use. For example:" msgstr "Ansible ロールã«ã¯ã€8 ã¤ã®ä¸»è¦ãªæ¨™æº–ディレクトリーをæŒã¤å®šç¾©ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼æ§‹é€ ãŒã‚りã¾ã™ã€‚å„ロールã«ã¯ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’å°‘ãªãã¨ã‚‚ 1 ã¤å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ロールãŒä½¿ç”¨ã•れãªã„ディレクトリーã¯é™¤å¤–ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:38 msgid "By default Ansible will look in each directory within a role for a ``main.yml`` file for relevant content (also ``main.yaml`` and ``main``):" msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ­ãƒ¼ãƒ«å†…ã®å„ディレクトリーã§ã€é–¢é€£ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ (``main.yaml`` ãŠã‚ˆã³ ``main``) ã«ã¤ã„㦠``main.yml`` ファイルを検索ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:40 msgid "``tasks/main.yml`` - the main list of tasks that the role executes." msgstr "``tasks/main.yml`` - ロールãŒå®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®ä¸»ãªãƒªã‚¹ãƒˆã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:41 msgid "``handlers/main.yml`` - handlers, which may be used within or outside this role." msgstr "``handlers/main.yml`` - ã“ã®ãƒ­ãƒ¼ãƒ«å†…外ã§ä½¿ç”¨ã§ãã‚‹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:42 msgid "``library/my_module.py`` - modules, which may be used within this role (see :ref:`embedding_modules_and_plugins_in_roles` for more information)." msgstr "``library/my_module.py`` - ã“ã®ãƒ­ãƒ¼ãƒ«å†…ã§ä½¿ç”¨ã§ãるモジュール (詳細ã¯ã€Œ:ref:`embedding_modules_and_plugins_in_roles`ã€ã‚’å‚ç…§)。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:43 msgid "``defaults/main.yml`` - default variables for the role (see :ref:`playbooks_variables` for more information). These variables have the lowest priority of any variables available, and can be easily overridden by any other variable, including inventory variables." msgstr "``defaults/main.yml`` - ロールã®ãƒ‡ãƒ•ォルト変数 (詳細ã¯ã€Œ:ref:`playbooks_variables`ã€ã‚’å‚ç…§)。ã“れらã®å¤‰æ•°ã«ã¯ã€åˆ©ç”¨å¯èƒ½ãªå¤‰æ•°ã®ä¸­ã§ä¸€ç•ªä½Žã„優先順ä½ãŒã‚りã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ãªã©ã€ä»–ã®å¤‰æ•°ã§ç°¡å˜ã«ä¸Šæ›¸ãã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:44 msgid "``vars/main.yml`` - other variables for the role (see :ref:`playbooks_variables` for more information)." msgstr "``vars/main.yml`` - ロールã®ä»–ã®å¤‰æ•° (詳細㯠:ref:`playbooks_variables` ã‚’å‚ç…§)。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:45 msgid "``files/main.yml`` - files that the role deploys." msgstr "``files/main.yml`` - ロールãŒãƒ‡ãƒ—ロイã™ã‚‹ãƒ•ァイル。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:46 msgid "``templates/main.yml`` - templates that the role deploys." msgstr "``templates/main.yml`` - ロールãŒãƒ‡ãƒ—ロイã™ã‚‹ãƒ†ãƒ³ãƒ—レート。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:47 msgid "``meta/main.yml`` - metadata for the role, including role dependencies." msgstr "``meta/main.yml`` - ロールã®ä¾å­˜é–¢ä¿‚ã‚’å«ã‚€ãƒ­ãƒ¼ãƒ«ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:49 msgid "You can add other YAML files in some directories. For example, you can place platform-specific tasks in separate files and refer to them in the ``tasks/main.yml`` file:" msgstr "ä»–ã® YAML ファイルを一部ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«è¿½åŠ ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ—ラットフォーム固有ã®ã‚¿ã‚¹ã‚¯ã‚’別々ã®ãƒ•ァイルã«é…ç½®ã—ã€ãれらを ``tasks/main.yml`` ファイルã§å‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:74 msgid "Roles may also include modules and other plugin types in a directory called ``library``. For more information, please refer to :ref:`embedding_modules_and_plugins_in_roles` below." msgstr "ロールã«ã¯ã€``library`` ã¨å‘¼ã°ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãã®ä»–ã®ãƒ—ラグインタイプãŒå«ã¾ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚詳細ã¯ã€ä»¥ä¸‹ã®ã€Œ:ref:`embedding_modules_and_plugins_in_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:79 msgid "Storing and finding roles" msgstr "ロールã®ä¿å­˜ãŠã‚ˆã³æ¤œç´¢" #: ../../rst/user_guide/playbooks_reuse_roles.rst:81 msgid "By default, Ansible looks for roles in the following locations:" msgstr "デフォルトã§ã¯ã€Ansible ã¯ä»¥ä¸‹ã®å ´æ‰€ã§ãƒ­ãƒ¼ãƒ«ã‚’検索ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:83 msgid "in collections, if you are using them" msgstr "コレクションã§ãれらを使用ã—ã¦ã„ã‚‹å ´åˆ" #: ../../rst/user_guide/playbooks_reuse_roles.rst:84 msgid "in a directory called ``roles/``, relative to the playbook file" msgstr "``roles/`` ã¨ã„ã†åå‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ (Playbook ファイルã¸ã®ç›¸å¯¾ãƒ‘ス) ã§" #: ../../rst/user_guide/playbooks_reuse_roles.rst:85 msgid "in the configured :ref:`roles_path `. The default search path is ``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``." msgstr "設定ã•れ㟠:ref:`roles_path ` ã§ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ¤œç´¢ãƒ‘ス㯠``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles`` ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:86 msgid "in the directory where the playbook file is located" msgstr "Playbook ファイルãŒé…ç½®ã•れã¦ã„るディレクトリーã§" #: ../../rst/user_guide/playbooks_reuse_roles.rst:88 msgid "If you store your roles in a different location, set the :ref:`roles_path ` configuration option so Ansible can find your roles. Checking shared roles into a single location makes them easier to use in multiple playbooks. See :ref:`intro_configuration` for details about managing settings in ansible.cfg." msgstr "ロールを別ã®å ´æ‰€ã«ä¿å­˜ã™ã‚‹å ´åˆã¯ã€Ansible ãŒãƒ­ãƒ¼ãƒ«ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã€:ref:`roles_path ` 設定オプションを設定ã—ã¾ã™ã€‚共有ロールを 1 ã¤ã®å ´æ‰€ã«ãƒã‚§ãƒƒã‚¯ã‚¤ãƒ³ã™ã‚‹ã“ã¨ã§ã€è¤‡æ•°ã® Playbook ã§ç°¡å˜ã«ä½¿ç”¨ã§ãã¾ã™ã€‚ansible.cfg ã®è¨­å®šã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`intro_configuration`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:90 msgid "Alternatively, you can call a role with a fully qualified path:" msgstr "ã¾ãŸã¯ã€å®Œå…¨ä¿®é£¾ãƒ‘スã§ãƒ­ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:100 msgid "Using roles" msgstr "ロールã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:102 msgid "You can use roles in three ways:" msgstr "以下㮠3 ã¤ã®æ–¹æ³•ã§ãƒ­ãƒ¼ãƒ«ã‚’使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:104 msgid "at the play level with the ``roles`` option: This is the classic way of using roles in a play." msgstr "``roles`` オプションを使用ã—ã¦ãƒ—レイレベルã§: プレイã§ãƒ­ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å¾“æ¥ã®æ–¹å¼ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:105 msgid "at the tasks level with ``include_role``: You can reuse roles dynamically anywhere in the ``tasks`` section of a play using ``include_role``." msgstr "``include_role`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§: ``include_role`` を使用ã—ã¦ãƒ—レイ㮠``tasks`` セクションã®ã©ã“ã‹ã‚‰ã§ã‚‚ロールを動的ã«å†åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:106 msgid "at the tasks level with ``import_role``: You can reuse roles statically anywhere in the ``tasks`` section of a play using ``import_role``." msgstr "``import_role`` を使用ã—ã¦ã‚¿ã‚¹ã‚¯ãƒ¬ãƒ™ãƒ«ã§: ``import_role`` を使用ã—ã¦ãƒ—レイ㮠``tasks`` セクションã®ã©ã“ã‹ã‚‰ã§ã‚‚ロールをé™çš„ã«å†åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:111 msgid "Using roles at the play level" msgstr "プレイレベルã§ã®ãƒ­ãƒ¼ãƒ«ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:113 msgid "The classic (original) way to use roles is with the ``roles`` option for a given play:" msgstr "ロールを使用ã™ã‚‹å¾“æ¥ã® (å…ƒã®) 方法ã¯ã€ç‰¹å®šã®ãƒ—レイ㮠``roles`` オプションを使用ã—ã¦è¡Œã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:123 msgid "When you use the ``roles`` option at the play level, for each role 'x':" msgstr "プレイレベル㧠``roles`` オプションを使用ã™ã‚‹å ´åˆã¯ã€å„ロール「xã€ã«å¯¾ã—ã¦ä»¥ä¸‹ã®ã‚ˆã†ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:125 msgid "If roles/x/tasks/main.yml exists, Ansible adds the tasks in that file to the play." msgstr "roles/x/tasks/main.yml ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイルã®ã‚¿ã‚¹ã‚¯ã‚’プレイã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:126 msgid "If roles/x/handlers/main.yml exists, Ansible adds the handlers in that file to the play." msgstr "roles/x/handlers/main.yml ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイルã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’プレイã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:127 msgid "If roles/x/vars/main.yml exists, Ansible adds the variables in that file to the play." msgstr "roles/x/vars/main.yml ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイルã®å¤‰æ•°ã‚’プレイã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:128 msgid "If roles/x/defaults/main.yml exists, Ansible adds the variables in that file to the play." msgstr "roles/x/defaults/main.yml ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイルã®å¤‰æ•°ã‚’プレイã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:129 msgid "If roles/x/meta/main.yml exists, Ansible adds any role dependencies in that file to the list of roles." msgstr "roles/x/meta/main.yml ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€Ansible ã¯ãã®ãƒ•ァイル内ã®ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚をロールã®ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:130 msgid "Any copy, script, template or include tasks (in the role) can reference files in roles/x/{files,templates,tasks}/ (dir depends on task) without having to path them relatively or absolutely." msgstr "コピーã€ã‚¹ã‚¯ãƒªãƒ—トã€ãƒ†ãƒ³ãƒ—レートã€ã¾ãŸã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚¿ã‚¹ã‚¯ (ロール内) ã¯ã€ç›¸å¯¾ãƒ‘スや絶対パスを必è¦ã¨ã›ãšã« roles/x/{files,templates,tasks}/ (ディレクトリーã¯ã‚¿ã‚¹ã‚¯ã«ä¾å­˜ã—ã¾ã™) ã®ãƒ•ァイルをå‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:132 msgid "When you use the ``roles`` option at the play level, Ansible treats the roles as static imports and processes them during playbook parsing. Ansible executes your playbook in this order:" msgstr "プレイレベル㧠``roles`` オプションを使用ã™ã‚‹ã¨ã€Ansible ã¯ãƒ­ãƒ¼ãƒ«ã‚’é™çš„インãƒãƒ¼ãƒˆã¨ã—ã¦å‡¦ç†ã—ã€Playbook ã®è§£æžæ™‚ã«å‡¦ç†ã—ã¾ã™ã€‚Ansible ã¯ä»¥ä¸‹ã®é †åºã§ Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:134 msgid "Any ``pre_tasks`` defined in the play." msgstr "プレイã«å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã® ``pre_tasks``。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:135 msgid "Any handlers triggered by pre_tasks." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€pre_tasks ã«ã‚ˆã‚Šèª˜ç™ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:136 msgid "Each role listed in ``roles:``, in the order listed. Any role dependencies defined in the role's ``meta/main.yml`` run first, subject to tag filtering and conditionals. See :ref:`role_dependencies` for more details." msgstr "``roles:`` ã«ä¸€è¦§è¡¨ç¤ºã•れる順åºã§ã€å„ロールãŒãƒªã‚¹ãƒˆã•れã¾ã™ã€‚ロール㮠``meta/main.yml`` ã§å®šç¾©ã•れãŸãƒ­ãƒ¼ãƒ«ä¾å­˜é–¢ä¿‚ã¯ã€ã‚¿ã‚°ã®ãƒ•ィルタリングãŠã‚ˆã³æ¡ä»¶ã«åŸºã¥ã„ã¦æœ€åˆã«å®Ÿè¡Œã•れã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`role_dependencies`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:137 msgid "Any ``tasks`` defined in the play." msgstr "プレイã«å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã® ``tasks``。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:138 msgid "Any handlers triggered by the roles or tasks." msgstr "ロールやタスクã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•れるã™ã¹ã¦ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:139 msgid "Any ``post_tasks`` defined in the play." msgstr "プレイã«å®šç¾©ã•れã¦ã„ã‚‹ã™ã¹ã¦ã® ``post_tasks``。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:140 msgid "Any handlers triggered by post_tasks." msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€post_tasks ã«ã‚ˆã‚Šèª˜ç™ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:143 msgid "If using tags with tasks in a role, be sure to also tag your pre_tasks, post_tasks, and role dependencies and pass those along as well, especially if the pre/post tasks and role dependencies are used for monitoring outage window control or load balancing. See :ref:`tags` for details on adding and using tags." msgstr "ロール内ã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’使用ã™ã‚‹å ´åˆã¯ã€pre_tasksã€post_tasksã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚ã«ã‚‚タグを付ã‘ã¦ã€ãれらも渡ã™ã‚ˆã†ã«ã—ã¦ãã ã•ã„。特ã«ã€äº‹å‰ã¾ãŸã¯äº‹å¾Œã®ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚ãŒã€åœæ­¢æ™‚ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦åˆ¶å¾¡ã‚„è² è·åˆ†æ•£ã®ç›£è¦–ã«ä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã¯ã€ãã®ã‚ˆã†ã«ã—ã¦ãã ã•ã„。タグã®è¿½åŠ ã¨ä½¿ç”¨ã®è©³ç´°ã¯ã€ã€Œ:ref:`tags`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:145 msgid "You can pass other keywords to the ``roles`` option:" msgstr "ä»–ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’ ``roles`` ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã«æ¸¡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:164 msgid "When you add a tag to the ``role`` option, Ansible applies the tag to ALL tasks within the role." msgstr "ã‚¿ã‚°ã‚’ ``role`` オプションã«è¿½åŠ ã™ã‚‹ã¨ã€Ansible ã¯ã‚¿ã‚°ã‚’ロール内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:166 msgid "When using ``vars:`` within the ``roles:`` section of a playbook, the variables are added to the play variables, making them available to all tasks within the play before and after the role. This behavior can be changed by :ref:`DEFAULT_PRIVATE_ROLE_VARS`." msgstr "Playbook ã® ``roles:`` セクション㧠``vars:`` を使用ã™ã‚‹ã¨ã€å¤‰æ•°ãŒãƒ—レイ変数ã«è¿½åŠ ã•れã€ãƒ­ãƒ¼ãƒ«ã®å‰å¾Œã«ãƒ—レイ内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã§åˆ©ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®å‹•作㯠:ref:`DEFAULT_PRIVATE_ROLE_VARS` ã§å¤‰æ›´ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:169 msgid "Including roles: dynamic reuse" msgstr "ロールã®è¿½åŠ : å‹•çš„ãªå†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:171 msgid "You can reuse roles dynamically anywhere in the ``tasks`` section of a play using ``include_role``. While roles added in a ``roles`` section run before any other tasks in a playbook, included roles run in the order they are defined. If there are other tasks before an ``include_role`` task, the other tasks will run first." msgstr "``include_role`` を使用ã™ã‚‹ã¨ã€ãƒ—レイ㮠``tasks`` セクション内ã®ä»»æ„ã®å ´æ‰€ã§ãƒ­ãƒ¼ãƒ«ã‚’å‹•çš„ã«å†åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``roles`` セクションã§è¿½åŠ ã•れãŸãƒ­ãƒ¼ãƒ«ã¯ Playbook 内ã®ä»–ã®ã‚¿ã‚¹ã‚¯ã‚ˆã‚Šã‚‚å…ˆã«å®Ÿè¡Œã•れã¾ã™ãŒã€å«ã¾ã‚Œã‚‹ãƒ­ãƒ¼ãƒ«ã¯å®šç¾©ã•れãŸé †ã«å®Ÿè¡Œã•れã¾ã™ã€‚``include_role`` ã®ã‚¿ã‚¹ã‚¯ã®å‰ã«ä»–ã®ã‚¿ã‚¹ã‚¯ãŒã‚ã‚‹å ´åˆã¯ã€ä»–ã®ã‚¿ã‚¹ã‚¯ãŒå…ˆã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:173 msgid "To include a role:" msgstr "ロールを指定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:192 msgid "You can pass other keywords, including variables and tags, when including roles:" msgstr "ロールをå«ã‚ã‚‹éš›ã«ã¯ã€å¤‰æ•°ã‚„ã‚¿ã‚°ãªã©ã€ä»–ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:208 msgid "When you add a :ref:`tag ` to an ``include_role`` task, Ansible applies the tag `only` to the include itself. This means you can pass ``--tags`` to run only selected tasks from the role, if those tasks themselves have the same tag as the include statement. See :ref:`selective_reuse` for details." msgstr "``include_role`` タスク㫠:ref:`tag ` を追加ã™ã‚‹ã¨ã€Ansible ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã« `only` ã¨ã„ã†ã‚¿ã‚°ã‚’é©ç”¨ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€``--tags`` を渡ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã‹ã‚‰é¸æŠžã•れãŸã‚¿ã‚¹ã‚¯ã®ã¿ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€ãれらã®ã‚¿ã‚¹ã‚¯è‡ªä½“㌠include æ–‡ã¨åŒã˜ã‚¿ã‚°ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã«é™ã‚Šã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`selective_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:210 msgid "You can conditionally include a role:" msgstr "ロールをæ¡ä»¶ä»˜ãã§å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:223 msgid "Importing roles: static reuse" msgstr "ロールã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ: é™çš„å†åˆ©ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:225 msgid "You can reuse roles statically anywhere in the ``tasks`` section of a play using ``import_role``. The behavior is the same as using the ``roles`` keyword. For example:" msgstr "``import_role`` を使用ã—ã¦ãƒ—レイ㮠``tasks`` セクションã®ä»»æ„ã®å ´æ‰€ã«ã€ãƒ­ãƒ¼ãƒ«ã‚’é™çš„ã«å†åˆ©ç”¨ã§ãã¾ã™ã€‚動作ã¯ã€``roles`` キーワードã®ä½¿ç”¨ã¨åŒã˜ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:244 msgid "You can pass other keywords, including variables and tags, when importing roles:" msgstr "ロールをインãƒãƒ¼ãƒˆã™ã‚‹éš›ã«ã¯ã€å¤‰æ•°ã‚„ã‚¿ã‚°ãªã©ã€ä»–ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’渡ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:259 msgid "When you add a tag to an ``import_role`` statement, Ansible applies the tag to `all` tasks within the role. See :ref:`tag_inheritance` for details." msgstr "ã‚¿ã‚°ã‚’ ``import_role`` æ–‡ã«è¿½åŠ ã™ã‚‹ã¨ã€Ansible ã¯ã‚¿ã‚°ã‚’ロール内㮠`all` タスクã«é©ç”¨ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`tag_inheritance`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:262 msgid "Role argument validation" msgstr "ロール引数を検証ã™ã‚‹" #: ../../rst/user_guide/playbooks_reuse_roles.rst:264 msgid "Beginning with version 2.11, you may choose to enable role argument validation based on an argument specification. This specification is defined in the ``meta/argument_specs.yml`` file (or with the ``.yaml`` file extension). When this argument specification is defined, a new task is inserted at the beginning of role execution that will validate the parameters supplied for the role against the specification. If the parameters fail validation, the role will fail execution." msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.11 以é™ã§ã¯ã€å¼•æ•°ã®ä»•様ã«åŸºã¥ã„ã¦ãƒ­ãƒ¼ãƒ«ã®å¼•数検証を有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ä»•様ã¯ã€``meta/argument_specs.yml`` ファイル (ã¾ãŸã¯ ``.yaml`` ファイル拡張å­) ã§å®šç¾©ã•れã¾ã™ã€‚ã“ã®å¼•数仕様ãŒå®šç¾©ã•れるã¨ã€ãƒ­ãƒ¼ãƒ«å®Ÿè¡Œã®æœ€åˆã«æ–°ã—ã„ã‚¿ã‚¹ã‚¯ãŒæŒ¿å…¥ã•れã€ä»•様ã«å¯¾ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã«æŒ‡å®šã—ãŸãƒ‘ラメーターを検証ã—ã¾ã™ã€‚ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã®æ¤œè¨¼ã«å¤±æ•—ã—ãŸå ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®å®Ÿè¡ŒãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:272 msgid "Ansible also supports role specifications defined in the role ``meta/main.yml`` file, as well. However, any role that defines the specs within this file will not work on versions below 2.11. For this reason, we recommend using the ``meta/argument_specs.yml`` file to maintain backward compatibility." msgstr "Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã® ``meta/main.yml`` ファイルã§å®šç¾©ã•れるロールã®ä»•様もサãƒãƒ¼ãƒˆã—ã¾ã™ãŒã€ã“ã®ãƒ•ァイル内ã®ä»•様を定義ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¯ 2.11 未満ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯å‹•作ã—ã¾ã›ã‚“。ãã®ãŸã‚ã€``meta/argument_specs.yml`` ファイルを使用ã—ã¦å¾Œæ–¹äº’æ›æ€§ã‚’ç¶­æŒã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:278 msgid "When role argument validation is used on a role that has defined :ref:`dependencies `, then validation on those dependencies will run before the dependent role, even if argument validation fails for the dependent role." msgstr ":ref:`dependencies ` を定義ã—ã¦ã„るロールã«ãƒ­ãƒ¼ãƒ«ã®å¼•数検証ãŒä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã¯ã€ä¾å­˜ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã®å¼•数検証ãŒå¤±æ•—ã—ã¦ã‚‚ã€ãれらã®ä¾å­˜é–¢ä¿‚ã®æ¤œè¨¼ã¯ä¾å­˜ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã®å‰ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:283 msgid "Specification format" msgstr "仕様ã®å½¢å¼" #: ../../rst/user_guide/playbooks_reuse_roles.rst:285 msgid "The role argument specification must be defined in a top-level ``argument_specs`` block within the role ``meta/argument_specs.yml`` file. All fields are lower-case." msgstr "ãƒ­ãƒ¼ãƒ«å¼•æ•°ã®æŒ‡å®šã¯ã€ãƒ­ãƒ¼ãƒ« ``meta/argument_specs.yml`` ファイルã®ä¸Šä½ã® ``argument_specs`` ブロックã§å®šç¾©ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ•ィールドã¯å°æ–‡å­—ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "entry-point-name" msgstr "entry-point-name" #: ../../rst/user_guide/playbooks_reuse_roles.rst:290 msgid "The name of the role entry point." msgstr "ロールエントリーãƒã‚¤ãƒ³ãƒˆã®åå‰ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:291 msgid "This should be ``main`` in the case of an unspecified entry point." msgstr "ã“れã¯ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆãŒæœªæŒ‡å®šã®å ´åˆã¯ ``main`` ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:292 msgid "This will be the base name of the tasks file to execute, with no ``.yml`` or ``.yaml`` file extension." msgstr "ã“れã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«æ‹¡å¼µå­ ``.yml`` ã¾ãŸã¯ ``.yaml`` ã®ãªã„ã€å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ãƒ•ァイルã®ãƒ™ãƒ¼ã‚¹åã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "short_description" msgstr "short_description" #: ../../rst/user_guide/playbooks_reuse_roles.rst:296 msgid "A short, one-line description of the entry point." msgstr "エントリーãƒã‚¤ãƒ³ãƒˆã® 1 行ã®çŸ­ã„説明。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:297 msgid "The ``short_description`` is displayed by ``ansible-doc -t role -l``." msgstr "``short_description`` ã¯ã€``ansible-doc -t role -l`` ã«è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "description" msgstr "description" #: ../../rst/user_guide/playbooks_reuse_roles.rst:301 msgid "A longer description that may contain multiple lines." msgstr "複数ã®è¡ŒãŒå«ã¾ã‚Œã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹é•·ã„説明。" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "author" msgstr "author" #: ../../rst/user_guide/playbooks_reuse_roles.rst:305 msgid "Name of the entry point authors." msgstr "エントリーãƒã‚¤ãƒ³ãƒˆä½œæˆè€…ã®åå‰ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:306 msgid "Use a multi-line list if there is more than one author." msgstr "作æˆè€…ãŒè¤‡æ•°ã«ãªã‚‹å ´åˆã¯ã€è¤‡æ•°è¡Œã®ãƒªã‚¹ãƒˆã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "options" msgstr "options" #: ../../rst/user_guide/playbooks_reuse_roles.rst:310 msgid "Options are often called \"parameters\" or \"arguments\". This section defines those options." msgstr "オプションã¯ã€ã—ã°ã—ã°ã€Œãƒ‘ラメーターã€ã‚„「引数ã€ã¨å‘¼ã°ã‚Œã¾ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ãれらã®ã‚ªãƒ—ションを定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:311 msgid "For each role option (argument), you may include:" msgstr "å„ロールオプション (引数) ã«ä»¥ä¸‹ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "option-name" msgstr "option-name" #: ../../rst/user_guide/playbooks_reuse_roles.rst:315 msgid "The name of the option/argument." msgstr "オプション/引数ã®åå‰ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:319 msgid "Detailed explanation of what this option does. It should be written in full sentences." msgstr "ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ©Ÿèƒ½ã®è©³ç´°ãªèª¬æ˜Žã€‚ã“れã¯ã€å®Œå…¨ãªæ–‡ç« ã§è¨˜è¿°ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "type" msgstr "type" #: ../../rst/user_guide/playbooks_reuse_roles.rst:323 msgid "The data type of the option. Default is ``str``." msgstr "オプションã®ãƒ‡ãƒ¼ã‚¿ã‚¿ã‚¤ãƒ—。デフォルト㯠``str`` ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:324 msgid "If an option is of type ``list``, ``elements`` should be specified." msgstr "オプション㌠``list`` タイプã®å ´åˆã¯ã€``elements`` を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "required" msgstr "å¿…é ˆ" #: ../../rst/user_guide/playbooks_reuse_roles.rst:328 msgid "Only needed if ``true``." msgstr "``true`` ã®å ´åˆã«ã®ã¿å¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:329 msgid "If missing, the option is not required." msgstr "見ã¤ã‹ã‚‰ãªã„å ´åˆã€ãã®ã‚ªãƒ—ションã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "default" msgstr "default" #: ../../rst/user_guide/playbooks_reuse_roles.rst:333 msgid "If ``required`` is false/missing, ``default`` may be specified (assumed 'null' if missing)." msgstr "``required`` ㌠false ã‚‚ã—ãã¯æŒ‡å®šã•れã¦ã„ãªã„å ´åˆã¯ã€``default`` を指定ã§ãã¾ã™ (見ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã€Œnullã€ã¨è¦‹ãªã•れã¾ã™)。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:334 msgid "Ensure that the default value in the docs matches the default value in the code. The actual default for the role variable will always come from ``defaults/main.yml``." msgstr "ドキュメントã®ãƒ‡ãƒ•ォルト値ãŒã€ã‚³ãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ォルト値ã¨ä¸€è‡´ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚ロール変数ã®å®Ÿéš›ã®ãƒ‡ãƒ•ォルトã¯å¸¸ã« ``defaults/main.yml`` ã‹ã‚‰å–å¾—ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:336 msgid "The default field must not be listed as part of the description, unless it requires additional information or conditions." msgstr "è¿½åŠ ã®æƒ…報やæ¡ä»¶ãŒå¿…è¦ãªå ´åˆã‚’除ãã€ãƒ‡ãƒ•ォルトã®ãƒ•ィールドã¯ã€èª¬æ˜Žã®ä¸€éƒ¨ã¨ã—ã¦è¨˜è¼‰ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:337 msgid "If the option is a boolean value, you can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Choose the one that reads better in the context of the option." msgstr "オプションãŒãƒ–ール値ã®å ´åˆã¯ã€Ansible ãŒèªè­˜ã™ã‚‹ä»»æ„ã®ãƒ–ール値 (true/falseã€yes/no ãªã©) を使用ã§ãã¾ã™ã€‚オプションã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§èª­ã¿å–りãŒé©åˆ‡ã§ã‚れã°ã“ã‚Œã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "choices" msgstr "choices" #: ../../rst/user_guide/playbooks_reuse_roles.rst:342 msgid "List of option values." msgstr "オプション値ã®ãƒªã‚¹ãƒˆã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:343 msgid "Should be absent if empty." msgstr "空欄ã®å ´åˆã¯æŒ‡å®šãªã—ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst msgid "elements" msgstr "elements" #: ../../rst/user_guide/playbooks_reuse_roles.rst:347 msgid "Specifies the data type for list elements when type is ``list``." msgstr "タイプ㌠``list`` ã®å ´åˆã«ã€ãƒªã‚¹ãƒˆè¦ç´ ã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’指定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:351 msgid "If this option takes a dict or list of dicts, you can define the structure here." msgstr "ã“ã®ã‚ªãƒ—ションãŒãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¾ãŸã¯ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®ãƒªã‚¹ãƒˆã‚’å–ã‚‹å ´åˆã¯ã€ã“ã“ã§æ§‹é€ ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:354 msgid "Sample specification" msgstr "サンプル仕様" #: ../../rst/user_guide/playbooks_reuse_roles.rst:389 msgid "Running a role multiple times in one playbook" msgstr "1 ã¤ã® Playbook ã§ãƒ­ãƒ¼ãƒ«ã‚’複数回実行ã™ã‚‹" #: ../../rst/user_guide/playbooks_reuse_roles.rst:391 msgid "Ansible only executes each role once, even if you define it multiple times, unless the parameters defined on the role are different for each definition. For example, Ansible only runs the role ``foo`` once in a play like this:" msgstr "Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã«å®šç¾©ã•れã¦ã„るパラメーターãŒå®šç¾©ã”ã¨ã«ç•°ãªã‚‹å ´åˆã‚’除ãã€å„ロールを複数回定義ã—ã¦ã‚‚ 1 回ã—ã‹å®Ÿè¡Œã—ã¾ã›ã‚“。ãŸã¨ãˆã°ã€Ansible ã¯æ¬¡ã®ã‚ˆã†ãªãƒ—レイ㧠``foo`` ã¨ã„ã†ãƒ­ãƒ¼ãƒ«ã‚’ 1 回ã ã‘実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:402 msgid "You have two options to force Ansible to run a role more than once." msgstr "Ansible ãŒè¤‡æ•°ã®ãƒ­ãƒ¼ãƒ«ã‚’強制的ã«å®Ÿè¡Œã™ã‚‹ã‚ªãƒ—ション㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:405 msgid "Passing different parameters" msgstr "ç•°ãªã‚‹ãƒ‘ラメーターを渡ã™" #: ../../rst/user_guide/playbooks_reuse_roles.rst:407 msgid "If you pass different parameters in each role definition, Ansible runs the role more than once. Providing different variable values is not the same as passing different role parameters. You must use the ``roles`` keyword for this behavior, since ``import_role`` and ``include_role`` do not accept role parameters." msgstr "å„ロール定義ã§ç•°ãªã‚‹ãƒ‘ラメーターを渡ã™ã¨ã€Ansible ã¯ãã®ãƒ­ãƒ¼ãƒ«ã‚’複数回実行ã—ã¾ã™ã€‚ç•°ãªã‚‹å¤‰æ•°å€¤ã‚’æä¾›ã™ã‚‹ã“ã¨ã¯ã€ç•°ãªã‚‹ãƒ­ãƒ¼ãƒ«ãƒ‘ラメーターを渡ã™ã“ã¨ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚``import_role`` ãŠã‚ˆã³ ``include_role`` ã¯ãƒ­ãƒ¼ãƒ«ãƒ‘ラメーターをå—ã‘入れãªã„ãŸã‚ã€ã“ã®å‹•作ã«ã¯ ``roles`` キーワードを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:409 msgid "This playbook runs the ``foo`` role twice:" msgstr "ã“ã® Playbook ã§ã¯ã€``foo`` ロール㌠2 回実行ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:419 msgid "This syntax also runs the ``foo`` role twice;" msgstr "ã“ã®æ§‹æ–‡ã¯ã€``foo`` ロールを 2 回実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:431 msgid "In these examples, Ansible runs ``foo`` twice because each role definition has different parameters." msgstr "ã“れらã®ä¾‹ã§ã¯ã€å„ロール定義ã®ãƒ‘ラメーターãŒç•°ãªã‚‹ãŸã‚ã€Ansible 㯠``foo`` ã‚’ 2 回実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:434 msgid "Using ``allow_duplicates: true``" msgstr "``allow_duplicates: true`` ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:436 msgid "Add ``allow_duplicates: true`` to the ``meta/main.yml`` file for the role:" msgstr "ロール㮠``meta/main.yml`` ファイル㫠``allow_duplicates: true`` を追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:451 msgid "In this example, Ansible runs ``foo`` twice because we have explicitly enabled it to do so." msgstr "ã“ã®ä¾‹ã§ã¯ã€Ansible ㌠``foo`` ã‚’2回実行ã—ã¦ã„ã¾ã™ãŒã€ã“ã‚Œã¯æ˜Žç¤ºçš„ã«å®Ÿè¡Œã§ãるよã†ã«ã—ãŸãŸã‚ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:456 msgid "Using role dependencies" msgstr "ロールä¾å­˜é–¢ä¿‚ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_reuse_roles.rst:458 msgid "Role dependencies let you automatically pull in other roles when using a role. Ansible does not execute role dependencies when you include or import a role. You must use the ``roles`` keyword if you want Ansible to execute role dependencies." msgstr "ロールã®ä¾å­˜é–¢ä¿‚ã«ã‚ˆã‚Šã€ã‚るロールを使用ã™ã‚‹éš›ã«ä»–ã®ãƒ­ãƒ¼ãƒ«ã‚’自動的ã«å–り込むã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã‚’インクルードã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹éš›ã«ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を実行ã—ã¾ã›ã‚“。Ansible ã§ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を実行ã—ãŸã„å ´åˆã¯ã€``roles`` キーワードを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:460 msgid "Role dependencies are prerequisites, not true dependencies. The roles do not have a parent/child relationship. Ansible loads all listed roles, runs the roles listed under ``dependencies`` first, then runs the role that lists them. The play object is the parent of all roles, including roles called by a ``dependencies`` list." msgstr "ロールã®ä¾å­˜é–¢ä¿‚ã¯å‰ææ¡ä»¶ã§ã‚りã€çœŸã®ä¾å­˜é–¢ä¿‚ã§ã¯ã‚りã¾ã›ã‚“。ã¾ãŸã€ãƒ­ãƒ¼ãƒ«ã¯è¦ªå­é–¢ä¿‚ã‚’æŒã¡ã¾ã›ã‚“。Ansible ã¯ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã•れãŸã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‚’読ã¿è¾¼ã¿ã€``dependencies`` ã«ãƒªã‚¹ãƒˆã‚¢ãƒƒãƒ—ã•れãŸãƒ­ãƒ¼ãƒ«ã‚’最åˆã«å®Ÿè¡Œã—ã€æ¬¡ã«ãれらをリストアップã—ãŸãƒ­ãƒ¼ãƒ«ã‚’実行ã—ã¾ã™ã€‚play オブジェクトã¯ã€``dependencies`` ã®ãƒªã‚¹ãƒˆã§å‘¼ã³å‡ºã•れるロールをå«ã‚ã€ã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã®è¦ªã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:462 msgid "Role dependencies are stored in the ``meta/main.yml`` file within the role directory. This file should contain a list of roles and parameters to insert before the specified role. For example:" msgstr "ロールã®ä¾å­˜é–¢ä¿‚ã¯ã€ãƒ­ãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã® ``meta/main.yml`` ファイルã«ä¿å­˜ã•れã¾ã™ã€‚ã“ã®ãƒ•ァイルã«ã¯ã€æŒ‡å®šã•れãŸãƒ­ãƒ¼ãƒ«ã®å‰ã«æŒ¿å…¥ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã¨ãƒ‘ラメーターã®ä¸€è¦§ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:480 msgid "Ansible always executes roles listed in ``dependencies`` before the role that lists them. Ansible executes this pattern recursively when you use the ``roles`` keyword. For example, if you list role ``foo`` under ``roles:``, role ``foo`` lists role ``bar`` under ``dependencies`` in its meta/main.yml file, and role ``bar`` lists role ``baz`` under ``dependencies`` in its meta/main.yml, Ansible executes ``baz``, then ``bar``, then ``foo``." msgstr "Ansible ã¯ã€``dependencies`` ã«è¨˜è¼‰ã•れã¦ã„るロールをã€ãれを記載ã—ã¦ã„るロールã®å‰ã«å¸¸ã«å®Ÿè¡Œã—ã¾ã™ã€‚``roles`` キーワードを使用ã™ã‚‹ã¨ã€Ansible ã¯ã“ã®ãƒ‘ターンをå†å¸°çš„ã«å®Ÿè¡Œã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ­ãƒ¼ãƒ« ``foo`` ã‚’ ``roles:`` ã®ä¸‹ã«ãƒªã‚¹ãƒˆã—ã€ãƒ­ãƒ¼ãƒ« ``foo`` ㌠meta/main.yml ファイル㮠``dependencies`` ã®ä¸‹ã«ãƒ­ãƒ¼ãƒ« ``bar`` をリストã—ã€ãƒ­ãƒ¼ãƒ« ``bar`` ㌠meta/main.yml ã® ``dependencies`` ã®ä¸‹ã«ãƒ­ãƒ¼ãƒ« ``baz`` をリストã—ã¦ã„ã‚‹å ´åˆã€Ansible㯠``baz``ã€``bar``ã€``foo`` ã®é †ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:483 msgid "Running role dependencies multiple times in one play" msgstr "1 ã¤ã®ãƒ—レイã§ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を複数回実行ã™ã‚‹" #: ../../rst/user_guide/playbooks_reuse_roles.rst:485 msgid "Ansible treats duplicate role dependencies like duplicate roles listed under ``roles:``: Ansible only executes role dependencies once, even if defined multiple times, unless the parameters, tags, or when clause defined on the role are different for each definition. If two roles in a play both list a third role as a dependency, Ansible only runs that role dependency once, unless you pass different parameters, tags, when clause, or use ``allow_duplicates: true`` in the role you want to run multiple times. See :ref:`Galaxy role dependencies ` for more details." msgstr "Ansible ã¯ã€``roles:`` ã«è¨˜è¼‰ã•れã¦ã„ã‚‹é‡è¤‡ã—ãŸãƒ­ãƒ¼ãƒ«ã®ã‚ˆã†ã«ã€é‡è¤‡ã—ãŸãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚を扱ã„ã¾ã™ã€‚Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã«å®šç¾©ã•れãŸãƒ‘ラメーターã€ã‚¿ã‚°ã€ã¾ãŸã¯ when å¥ãŒå®šç¾©ã”ã¨ã«ç•°ãªã‚‹å ´åˆã‚’除ãã€è¤‡æ•°å›žå®šç¾©ã•れã¦ã„ã¦ã‚‚ロールã®ä¾å­˜é–¢ä¿‚ã‚’ 1 回ã®ã¿å®Ÿè¡Œã—ã¾ã™ã€‚プレイ内㮠2 ã¤ã®ãƒ­ãƒ¼ãƒ«ãŒä¸¡æ–¹ã¨ã‚‚ä¾å­˜é–¢ä¿‚ã¨ã—㦠3 番目ã®ãƒ­ãƒ¼ãƒ«ã‚’リストã—ã¦ã„ã‚‹å ´åˆã€Ansible ã¯ã€è¤‡æ•°å›žå®Ÿè¡Œã™ã‚‹ãƒ­ãƒ¼ãƒ«ã§ç•°ãªã‚‹ãƒ‘ラメーターã€ã‚¿ã‚°ã€when å¥ã‚’渡ã™ã‹ã€``allow_duplicates: true`` を使用ã—ãªã„é™ã‚Šã€ãã®ãƒ­ãƒ¼ãƒ«ã®ä¾å­˜é–¢ä¿‚ã‚’ 1 回ã®ã¿å®Ÿè¡Œã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`Galaxy role dependencies `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:489 msgid "Role deduplication does not consult the invocation signature of parent roles. Additionally, when using ``vars:`` instead of role params, there is a side effect of changing variable scoping. Using ``vars:`` results in those variables being scoped at the play level. In the below example, using ``vars:`` would cause ``n`` to be defined as ``4`` through the entire play, including roles called before it." msgstr "ロールã®é‡è¤‡æŽ’除ã¯ã€è¦ªãƒ­ãƒ¼ãƒ«ã®å‘¼ã³å‡ºã—ç½²åã‚’å‚ç…§ã—ã¾ã›ã‚“。ã•らã«ã€ãƒ­ãƒ¼ãƒ«ãƒ‘ラメーターã®ä»£ã‚り㫠``vars:`` を使用ã™ã‚‹å ´åˆã¯ã€å¤‰æ•°ã®ã‚¹ã‚³ãƒ¼ãƒ—を変更ã™ã‚‹ã¨ã„ã†å‰¯ä½œç”¨ãŒã‚りã¾ã™ã€‚``vars:`` を使用ã™ã‚‹ã¨ã€ãれらã®å¤‰æ•°ãŒãƒ—レイレベルã§å¯¾è±¡ã¨ãªã‚Šã¾ã™ã€‚以下ã®ä¾‹ã§ã¯ã€``vars:`` を使用ã™ã‚‹ã¨ã€ãれ以å‰ã«å‘¼ã³å‡ºã•れãŸãƒ­ãƒ¼ãƒ«ã‚’å«ã‚ã€ãƒ—レー全体を通ã—㦠``n`` ㌠``4`` ã¨ã—ã¦å®šç¾©ã•れるã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:491 msgid "In addition to the above, users should be aware that role de-duplication occurs before variable evaluation. This means that :term:`Lazy Evaluation` may make seemingly different role invocations equivalently the same, preventing the role from running more than once." msgstr "上記ã«åŠ ãˆã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å¤‰æ•°è©•価ã®å‰ã«ãƒ­ãƒ¼ãƒ«ã®é‡è¤‡æŽ’除ãŒè¡Œã‚れるã“ã¨ã«æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã¤ã¾ã‚Šã€:term:`Lazy Evaluation` ã¯ã€ä¸€è¦‹ç•°ãªã‚‹ãƒ­ãƒ¼ãƒ«ã®å‘¼ã³å‡ºã—を等価ã«ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ãŒè¤‡æ•°å›žå®Ÿè¡Œã•れるã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:494 msgid "For example, a role named ``car`` depends on a role named ``wheel`` as follows:" msgstr "ãŸã¨ãˆã°ã€``car`` ã¨ã„ã†åå‰ã®ãƒ­ãƒ¼ãƒ«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã« ``wheel`` ã¨ã„ã†åå‰ã®ãƒ­ãƒ¼ãƒ«ã«ä¾å­˜ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:509 msgid "And the ``wheel`` role depends on two roles: ``tire`` and ``brake``. The ``meta/main.yml`` for wheel would then contain the following:" msgstr "ãã—ã¦ã€``wheel`` ã®ãƒ­ãƒ¼ãƒ«ã¯ã€``tire`` 㨠``brake`` ã® 2 ã¤ã®ãƒ­ãƒ¼ãƒ«ã«ä¾å­˜ã—ã¾ã™ã€‚ã“ã®ãŸã‚ã€wheel 用㮠``meta/main.yml`` ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:518 msgid "And the ``meta/main.yml`` for ``tire`` and ``brake`` would contain the following:" msgstr "ãã—ã¦ã€ã€Œ``tire``ã€ãŠã‚ˆã³ã€Œ``brake``ã€ã®ã€Œ``meta/main.yml``ã€ã«ã¯ã€æ¬¡ã®ã‚ˆã†ãªå†…容ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:525 msgid "The resulting order of execution would be as follows:" msgstr "ãã®çµæžœä½œæˆã•れる実行順åºã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:538 msgid "To use ``allow_duplicates: true`` with role dependencies, you must specify it for the role listed under ``dependencies``, not for the role that lists it. In the example above, ``allow_duplicates: true`` appears in the ``meta/main.yml`` of the ``tire`` and ``brake`` roles. The ``wheel`` role does not require ``allow_duplicates: true``, because each instance defined by ``car`` uses different parameter values." msgstr "``allow_duplicates: true`` をロールä¾å­˜ã§ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ãれをリストã—ã¦ã„るロールã§ã¯ãªãã€``dependencies`` ã®ä¸‹ã«ãƒªã‚¹ãƒˆã•れã¦ã„るロールã«å¯¾ã—ã¦æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚上記ã®ä¾‹ã§ã¯ã€``allow_duplicates: true`` ã¯ã€``tire`` ロールãŠã‚ˆã³ ``brake`` ロール㮠``meta/main.yml`` ã«è¡¨ç¤ºã•れã¾ã™ã€‚``wheel`` ロールã¯ã€``car`` ã§å®šç¾©ã•れãŸå„インスタンスãŒç•°ãªã‚‹ãƒ‘ラメーター値を使用ã™ã‚‹ãŸã‚ã€``allow_duplicates: true`` ã‚’å¿…è¦ã¨ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:541 msgid "See :ref:`playbooks_variables` for details on how Ansible chooses among variable values defined in different places (variable inheritance and scope). Also deduplication happens ONLY at the play level, so multiple plays in the same playbook may rerun the roles." msgstr "Ansible ãŒã€ã•ã¾ã–ã¾ãªå ´æ‰€ï¼ˆå¤‰æ•°ç¶™æ‰¿ãŠã‚ˆã³ç¯„囲)ã§å®šç¾©ã•れる変数ã®å€¤ã‹ã‚‰é¸æŠžã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`playbooks_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã¾ãŸã€é‡è¤‡æŽ’除ã¯ãƒ—レイレベルã§ã®ã¿è¡Œã‚れるãŸã‚ã€åŒã˜ Playbook ã®è¤‡æ•°ã®ãƒ—レイãŒãƒ­ãƒ¼ãƒ«ã‚’å†å®Ÿè¡Œã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:547 msgid "Embedding modules and plugins in roles" msgstr "ロールã§ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŠã‚ˆã³ãƒ—ラグインã®åŸ‹ã‚è¾¼ã¿" #: ../../rst/user_guide/playbooks_reuse_roles.rst:549 msgid "If you write a custom module (see :ref:`developing_modules`) or a plugin (see :ref:`developing_plugins`), you might wish to distribute it as part of a role. For example, if you write a module that helps configure your company's internal software, and you want other people in your organization to use this module, but you do not want to tell everyone how to configure their Ansible library path, you can include the module in your internal_config role." msgstr "カスタムモジュール (「:ref:`developing_modules`ã€ã‚’å‚ç…§) やプラグイン (「:ref:`developing_plugins`ã€ã‚’å‚ç…§) を作æˆã—ãŸå ´åˆã¯ã€ãƒ­ãƒ¼ãƒ«ã®ä¸€éƒ¨ã¨ã—ã¦é…布ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ç¤¾å†…ã®ã‚½ãƒ•トウェアを設定ã™ã‚‹ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—ã€çµ„織内ã®ä»–ã®äººã«ã‚‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦ã»ã—ã„ã«ã‚‚é–¢ã‚らãšã€Ansible ã®ãƒ©ã‚¤ãƒ–ラリーパスを設定ã™ã‚‹æ–¹æ³•を全員ã«é–‹ç¤ºã—ãŸããªã„å ´åˆã¯ã€internal_config ロールã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:551 msgid "To add a module or a plugin to a role: Alongside the 'tasks' and 'handlers' structure of a role, add a directory named 'library' and then include the module directly inside the 'library' directory." msgstr "モジュールやプラグインをロールã«è¿½åŠ ã™ã‚‹ã«ã¯ã€ãƒ­ãƒ¼ãƒ«ã®ã€Œtasksã€ãŠã‚ˆã³ã€Œhandlersã€æ§‹é€ ã®æ¨ªã«ã€ã€Œlibraryã€ã¨ã„ã†åå‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’追加ã—ã€ãã®ã€Œlibraryã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’直接インクルードã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:554 msgid "Assuming you had this:" msgstr "以下ãŒã‚ã‚‹ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:564 msgid "The module will be usable in the role itself, as well as any roles that are called *after* this role, as follows:" msgstr "モジュールã¯ã€æ¬¡ã®ã‚ˆã†ã«ã€ãƒ­ãƒ¼ãƒ«è‡ªä½“ã€ãŠã‚ˆã³ã“ã®ãƒ­ãƒ¼ãƒ«ã® *後ã«* 呼ã³å‡ºã•れるã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:575 msgid "If necessary, you can also embed a module in a role to modify a module in Ansible's core distribution. For example, you can use the development version of a particular module before it is released in production releases by copying the module and embedding the copy in a role. Use this approach with caution, as API signatures may change in core components, and this workaround is not guaranteed to work." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€ãƒ­ãƒ¼ãƒ«ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’埋ã‚è¾¼ã¿ã€Ansible ã®ã‚³ã‚¢ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’変更ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コピーã—ã€ãã®ã‚³ãƒ”ーをロールã«åŸ‹ã‚込むã“ã¨ã§ã€ç‰¹å®šã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹ç™ºãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’実稼åƒãƒªãƒªãƒ¼ã‚¹ã®å‰ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コアコンãƒãƒ¼ãƒãƒ³ãƒˆã§ã¯ API ã‚·ã‚°ãƒãƒãƒ£ãƒ¼ãŒå¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã€ã“ã®å›žé¿ç­–ã¯å‹•作ãŒä¿è¨¼ã•れã¦ã„ãªã„ãŸã‚ã€ã“ã®æ–¹æ³•ã¯æ…Žé‡ã«ä½¿ç”¨ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:577 msgid "The same mechanism can be used to embed and distribute plugins in a role, using the same schema. For example, for a filter plugin:" msgstr "åŒã˜ã‚¹ã‚­ãƒ¼ãƒžã‚’使用ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã«ãƒ—ラグインを埋ã‚込んã ã‚Šé…布ã—ãŸã‚Šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ•ィルタープラグインã®å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:587 msgid "These filters can then be used in a Jinja template in any role called after 'my_custom_filter'." msgstr "ã“れらã®ãƒ•ィルターã¯ã€Jinja ã®ãƒ†ãƒ³ãƒ—レートã§ã€ã€Œmy_custom_filterã€ã®å¾Œã«å‘¼ã°ã‚Œã‚‹ä»»æ„ã®ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:590 msgid "Sharing roles: Ansible Galaxy" msgstr "ロールã®å…±æœ‰: Ansible Galaxy" #: ../../rst/user_guide/playbooks_reuse_roles.rst:592 msgid "`Ansible Galaxy `_ is a free site for finding, downloading, rating, and reviewing all kinds of community-developed Ansible roles and can be a great way to get a jumpstart on your automation projects." msgstr "`Ansible Galaxy `_ ã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ¼ã§é–‹ç™ºã•れãŸã‚らゆる種類㮠Ansible ロールを検索ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã€è©•価ã€ãŠã‚ˆã³ãƒ¬ãƒ“ューã™ã‚‹ç„¡æ–™ã‚µã‚¤ãƒˆã§ã€ã“ã“ã§è‡ªå‹•化プロジェクトをã™ãã«é–‹å§‹ã™ã‚‹ãŸã‚ã®å„ªã‚ŒãŸæ–¹æ³•ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:594 msgid "The client ``ansible-galaxy`` is included in Ansible. The Galaxy client allows you to download roles from Ansible Galaxy, and also provides an excellent default framework for creating your own roles." msgstr "クライアント ``ansible-galaxy`` ã¯ã€Ansible ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Galaxy クライアントを使用ã™ã‚‹ã¨ã€Ansible Galaxy ã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’ダウンロードã§ãã€ç‹¬è‡ªã®ãƒ­ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å„ªã‚ŒãŸãƒ‡ãƒ•ォルトã®ãƒ•レームワークもæä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_reuse_roles.rst:596 msgid "Read the `Ansible Galaxy documentation `_ page for more information" msgstr "詳細ã¯ã€`Ansible Galaxy ドキュメント `_ ページをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_reuse_roles.rst:601 msgid "How to create new roles, share roles on Galaxy, role management" msgstr "æ–°è¦ãƒ­ãƒ¼ãƒ«ã®ä½œæˆã€Galaxy ã§ã®ãƒ­ãƒ¼ãƒ«ã®å…±æœ‰ã€ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã®ç®¡ç†ã®æ–¹æ³•" #: ../../rst/user_guide/playbooks_reuse_roles.rst:609 msgid "Variables in playbooks" msgstr "Playbook ã®å¤‰æ•°" #: ../../rst/user_guide/playbooks_reuse_roles.rst:614 msgid ":ref:`tags`" msgstr ":ref:`tags`" #: ../../rst/user_guide/playbooks_reuse_roles.rst:615 msgid "Using tags to select or skip roles/tasks in long playbooks" msgstr "タグを使用ã—ãŸé•·ã„ Playbook ã§ãƒ­ãƒ¼ãƒ«/タスクã®é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—" #: ../../rst/user_guide/playbooks_reuse_roles.rst:619 msgid "Extending Ansible by writing your own modules" msgstr "独自ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã—㦠Ansible ã‚’æ‹¡å¼µ" #: ../../rst/user_guide/playbooks_roles.rst:4 msgid "Playbook Roles and Include Statements" msgstr "Playbook ロールãŠã‚ˆã³ Include æ–‡" #: ../../rst/user_guide/playbooks_roles.rst:9 msgid "The documentation regarding roles and includes for playbooks have moved. Their new location is here: :ref:`playbooks_reuse`. Please update any links you may have made directly to this page." msgstr "Playbook ã®ãƒ­ãƒ¼ãƒ«ãŠã‚ˆã³ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒç§»å‹•ã—ã¾ã—ãŸã€‚æ–°ã—ã„場所ã¯ã€Œ:ref:`playbooks_reuse`ã€ã§ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã«ç›´æŽ¥ä½œæˆã—ãŸãƒªãƒ³ã‚¯ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_roles.rst:17 msgid ":ref:`playbooks_reuse`" msgstr ":ref:`playbooks_reuse`" #: ../../rst/user_guide/playbooks_roles.rst:18 msgid "Creating reusable Playbooks." msgstr "å†åˆ©ç”¨å¯èƒ½ãª Playbook ã®ä½œæˆ" #: ../../rst/user_guide/playbooks_special_topics.rst:6 msgid "Advanced playbooks features" msgstr "Playbook ã®é«˜åº¦ãªæ©Ÿèƒ½" #: ../../rst/user_guide/playbooks_special_topics.rst:8 msgid "This page is obsolete. Refer to the :ref:`main User Guide index page ` for links to all playbook-related topics. Please update any links you may have made directly to this page." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ä½¿ç”¨ã•れãªããªã‚Šã¾ã—ãŸã€‚Playbook ã«é–¢é€£ã™ã‚‹ã™ã¹ã¦ã®ãƒˆãƒ”ックã¸ã®ãƒªãƒ³ã‚¯ã¯ã€:ref:`メインã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¬ã‚¤ãƒ‰ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¸ ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®ãƒšãƒ¼ã‚¸ã«ç›´æŽ¥ãƒªãƒ³ã‚¯ã‚’å¼µã£ã¦ã„ã‚‹å ´åˆã¯æ›´æ–°ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_startnstep.rst:5 msgid "Executing playbooks for troubleshooting" msgstr "トラブルシューティングã®ãŸã‚ã® Playbook ã®å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_startnstep.rst:7 msgid "When you are testing new plays or debugging playbooks, you may need to run the same play multiple times. To make this more efficient, Ansible offers two alternative ways to execute a playbook: start-at-task and step mode." msgstr "æ–°ã—ã„プレイをテストã—ãŸã‚Šã€Playbook をデãƒãƒƒã‚°ã—ãŸã‚Šã™ã‚‹éš›ã«ã€åŒã˜ãƒ—レイを複数回実行ã—ãªã„ã¨ã„ã‘ãªã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れを効率的ã«è¡Œã†ãŸã‚ã«ã€Ansible ã§ã¯ Playbook ã®å®Ÿè¡Œæ–¹æ³•ã¨ã—ã¦ã€start-at-task モード㨠step モード㮠2 種類を用æ„ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_startnstep.rst:12 msgid "start-at-task" msgstr "start-at-task" #: ../../rst/user_guide/playbooks_startnstep.rst:14 msgid "To start executing your playbook at a particular task (usually the task that failed on the previous run), use the ``--start-at-task`` option::" msgstr "特定ã®ã‚¿ã‚¹ã‚¯ (通常ã¯ç›´å‰ã®å®Ÿè¡Œã§å¤±æ•—ã—ãŸã‚¿ã‚¹ã‚¯) ã§ Playbook ã®å®Ÿè¡Œã‚’é–‹å§‹ã™ã‚‹ã«ã¯ã€``--start-at-task`` オプションを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_startnstep.rst:18 msgid "In this example, Ansible starts executing your playbook at a task named \"install packages\". This feature does not work with tasks inside dynamically re-used roles or tasks (``include_*``), see :ref:`dynamic_vs_static`." msgstr "ã“ã®ä¾‹ã§ã¯ã€Ansible ã¯ã€Œinstall packagesã€ã¨ã„ã†åå‰ã®ã‚¿ã‚¹ã‚¯ã§ Playbook ã®å®Ÿè¡Œã‚’é–‹å§‹ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯ã€å‹•çš„ã«å†åˆ©ç”¨ã•れるロールやタスク内ã®ã‚¿ã‚¹ã‚¯ (``include_*``) ã§ã¯å‹•作ã—ã¾ã›ã‚“。「:ref:`dynamic_vs_static`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_startnstep.rst:23 msgid "Step mode" msgstr "step モード" #: ../../rst/user_guide/playbooks_startnstep.rst:25 msgid "To execute a playbook interactively, use ``--step``::" msgstr "Playbook を対話的ã«å®Ÿè¡Œã™ã‚‹ã«ã¯ã€``--step`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_startnstep.rst:29 msgid "With this option, Ansible stops on each task, and asks if it should execute that task. For example, if you have a task called \"configure ssh\", the playbook run will stop and ask::" msgstr "ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã¨ã€Ansible ã¯å„タスクã§åœæ­¢ã—ã€ãã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã¹ãã‹ã©ã†ã‹ã‚’å°‹ã­ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œconfigure sshã€ã¨ã„ã†åå‰ã®ã‚¿ã‚¹ã‚¯ãŒã‚ã£ãŸå ´åˆã€Playbook ã®å®Ÿè¡Œã¯åœæ­¢ã—ã€æ¬¡ã®ã‚ˆã†ã«å°‹ã­ã¦ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_startnstep.rst:33 msgid "Answer \"y\" to execute the task, answer \"n\" to skip the task, and answer \"c\" to exit step mode, executing all remaining tasks without asking." msgstr "「yã€ã¨ç­”ãˆã¦ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ã€Œnã€ã¨ç­”ãˆã¦ã‚¿ã‚¹ã‚¯ã‚’スキップã—ã€ã€Œcã€ã¨å¿œãˆã¦ step モードを終了ã—ã€æ®‹ã‚Šã®ã‚¿ã‚¹ã‚¯ã‚’ã™ã¹ã¦å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_startnstep.rst:39 msgid ":ref:`playbook_debugger`" msgstr ":ref:`playbook_debugger`" #: ../../rst/user_guide/playbooks_startnstep.rst:40 msgid "Using the Ansible debugger" msgstr "Ansible デãƒãƒƒã‚¬ãƒ¼ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_strategies.rst:4 msgid "Controlling playbook execution: strategies and more" msgstr "Playbook ã®å®Ÿè¡Œã®åˆ¶å¾¡: strategy ãªã©" #: ../../rst/user_guide/playbooks_strategies.rst:6 msgid "By default, Ansible runs each task on all hosts affected by a play before starting the next task on any host, using 5 forks. If you want to change this default behavior, you can use a different strategy plugin, change the number of forks, or apply one of several keywords like ``serial``." msgstr "デフォルトã§ã¯ã€Ansible ã¯ãƒ—レイã®å½±éŸ¿ã‚’å—ã‘ã‚‹ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã§å„タスクを実行ã—ã¦ã‹ã‚‰ã€ä»»æ„ã®ãƒ›ã‚¹ãƒˆã§æ¬¡ã®ã‚¿ã‚¹ã‚¯ã‚’é–‹å§‹ã—ã€5 ã¤ã®ãƒ•ォークを使用ã—ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ•ォルトã®å‹•作を変更ã™ã‚‹å ´åˆã¯ã€åˆ¥ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ãƒ—ラグインを使用ã™ã‚‹ã‹ã€ãƒ•ォーク数を変更ã™ã‚‹ã‹ã€``serial`` ã®ã‚ˆã†ãªã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®ã„ãšã‚Œã‹ã‚’é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:12 msgid "Selecting a strategy" msgstr "ストラテジーã®é¸æŠž" #: ../../rst/user_guide/playbooks_strategies.rst:13 msgid "The default behavior described above is the :ref:`linear strategy`. Ansible offers other strategies, including the :ref:`debug strategy` (see also :ref:`playbook_debugger`) and the :ref:`free strategy`, which allows each host to run until the end of the play as fast as it can::" msgstr "上述ã®ãƒ‡ãƒ•ォルトã®å‹•作㯠:ref:`線形ストラテジー` ã§ã™ã€‚Ansible ã«ã¯ã€:ref:`デãƒãƒƒã‚°ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼` (:ref:`playbook_debugger` ã‚‚å‚ç…§) ã‚„ :ref:`フリーストラテジー` ãªã©ã€ä»–ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚‚用æ„ã•れã¦ã„ã¾ã™ã€‚フリーストラテジーã§ã¯ã€å„ホストãŒãƒ—レイãŒçµ‚了ã™ã‚‹ã¾ã§ã§ãã‚‹ã ã‘速ã実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:20 msgid "You can select a different strategy for each play as shown above, or set your preferred strategy globally in ``ansible.cfg``, under the ``defaults`` stanza::" msgstr "上記ã®ã‚ˆã†ã«å„プレイã«ç•°ãªã‚‹ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’é¸æŠžã™ã‚‹ã‹ã€``defaults`` stanza ã® ``ansible.cfg`` ã§å„ªå…ˆã•れるストラテジーをグローãƒãƒ«ã«è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:25 msgid "All strategies are implemented as :ref:`strategy plugins`. Please review the documentation for each strategy plugin for details on how it works." msgstr "ã™ã¹ã¦ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã¯ :ref:`strategy プラグイン` ã¨ã—ã¦å®Ÿè£…ã•れã¾ã™ã€‚ãã®ä»•組ã¿ã®è©³ç´°ã¯ã€å„ strategy プラグインã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_strategies.rst:28 msgid "Setting the number of forks" msgstr "ãƒ•ã‚©ãƒ¼ã‚¯ã®æ•°ã®è¨­å®š" #: ../../rst/user_guide/playbooks_strategies.rst:29 msgid "If you have the processing power available and want to use more forks, you can set the number in ``ansible.cfg``::" msgstr "利用å¯èƒ½ãªå‡¦ç†èƒ½åŠ›ãŒã‚りã€ã•らã«å¤šãã®ãƒ•ォークを使用ã™ã‚‹å ´åˆã¯ã€``ansible.cfg`` ã§æ•°å€¤ã‚’設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:34 msgid "or pass it on the command line: `ansible-playbook -f 30 my_playbook.yml`." msgstr "ã¾ãŸã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¸¡ã—ã¾ã™ (`ansible-playbook -f 30 my_playbook.yml`)。" #: ../../rst/user_guide/playbooks_strategies.rst:37 msgid "Using keywords to control execution" msgstr "キーワードを使用ã—ãŸå®Ÿè¡Œã®åˆ¶å¾¡" #: ../../rst/user_guide/playbooks_strategies.rst:39 msgid "In addition to strategies, several :ref:`keywords` also affect play execution. You can set a number, a percentage, or a list of numbers of hosts you want to manage at a time with ``serial``. Ansible completes the play on the specified number or percentage of hosts before starting the next batch of hosts. You can restrict the number of workers allotted to a block or task with ``throttle``. You can control how Ansible selects the next host in a group to execute against with ``order``. You can run a task on a single host with ``run_once``. These keywords are not strategies. They are directives or options applied to a play, block, or task." msgstr "ストラテジーã ã‘ã§ãªãã€ã„ãã¤ã‹ã® :ref:`キーワード` もプレイã®å®Ÿè¡Œã«å½±éŸ¿ã‚’与ãˆã¾ã™ã€‚``serial`` ã§ã¯ã€ä¸€åº¦ã«ç®¡ç†ã—ãŸã„ãƒ›ã‚¹ãƒˆã®æ•°ã€å‰²åˆã€ã¾ãŸã¯ãƒªã‚¹ãƒˆã‚’設定ã§ãã¾ã™ã€‚Ansible ã¯ã€æŒ‡å®šã—ãŸæ•°ã¾ãŸã¯å‰²åˆã®ãƒ›ã‚¹ãƒˆã§ãƒ—レイを完了ã—ã¦ã‹ã‚‰ã€æ¬¡ã®ãƒ›ã‚¹ãƒˆã®ãƒãƒƒãƒã‚’é–‹å§‹ã—ã¾ã™ã€‚``throttle`` ã§ã€ãƒ–ロックやタスクã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ãƒ¯ãƒ¼ã‚«ãƒ¼ã®æ•°ã‚’制é™ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``order`` ã§ã€Ansible ãŒã‚°ãƒ«ãƒ¼ãƒ—å†…ã®æ¬¡ã®ãƒ›ã‚¹ãƒˆã‚’é¸æŠžã—ã¦å®Ÿè¡Œã™ã‚‹æ–¹æ³•を制御ã§ãã¾ã™ã€‚``run_once`` を使用ã—ã¦ã€1 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’ 1 ã¤ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã§ã¯ãªãã€ãƒ—レイã€ãƒ–ロックã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れるディレクティブやオプションã§ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:41 msgid "Other keywords that affect play execution include ``ignore_errors``, ``ignore_unreachable``, and ``any_errors_fatal``. These options are documented in :ref:`playbooks_error_handling`." msgstr "プレイã®å®Ÿè¡Œã«å½±éŸ¿ã™ã‚‹ä»–ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«ã¯ã€``ignore_errors``ã€``ignore_unreachable``ã€ãŠã‚ˆã³ ``any_errors_fatal`` ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れらã®ã‚ªãƒ—ションã¯ã€ã€Œ:ref:`playbooks_error_handling`ã€ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:46 msgid "Setting the batch size with ``serial``" msgstr "``serial`` を使用ã—ã¦ãƒãƒƒãƒã‚µã‚¤ã‚ºã®è¨­å®š" #: ../../rst/user_guide/playbooks_strategies.rst:48 msgid "By default, Ansible runs in parallel against all the hosts in the :ref:`pattern ` you set in the ``hosts:`` field of each play. If you want to manage only a few machines at a time, for example during a rolling update, you can define how many hosts Ansible should manage at a single time using the ``serial`` keyword::" msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€å„プレイ㮠``hosts:`` フィールドã§è¨­å®šã—㟠:ref:`pattern ` ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦ä¸¦è¡Œã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚ローリングアップデート中ãªã©ã€ä¸€åº¦ã«æ•°å°ã®ãƒžã‚·ãƒ³ã®ã¿ã‚’管ç†ã™ã‚‹å ´åˆã¯ã€``serial`` キーワードを使用ã—ã¦ã€Ansible ãŒä¸€åº¦ã«ç®¡ç†ã™ã‚‹ãƒ›ã‚¹ãƒˆã®æ•°ã‚’定義ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:62 msgid "In the above example, if we had 6 hosts in the group 'webservers', Ansible would execute the play completely (both tasks) on 3 of the hosts before moving on to the next 3 hosts::" msgstr "上ã®ä¾‹ã§ã¯ã€ã€Œwebserversã€ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã« 6 å°ã®ãƒ›ã‚¹ãƒˆãŒã‚ã£ãŸå ´åˆã€Ansible ã¯ãã®ã†ã¡ã® 3 å°ã®ãƒ›ã‚¹ãƒˆã§ãƒ—レイを完全㫠(両方ã®ã‚¿ã‚¹ã‚¯ã‚’) 実行ã—ã¦ã‹ã‚‰ã€æ¬¡ã® 3 å°ã®ãƒ›ã‚¹ãƒˆã«ç§»ã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:98 msgid "You can also specify a percentage with the ``serial`` keyword. Ansible applies the percentage to the total number of hosts in a play to determine the number of hosts per pass::" msgstr "``serial`` キーワードã§ãƒ‘ーセンテージを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚Ansible ã¯ã€ãƒ—レイ内ã®ãƒ›ã‚¹ãƒˆã®åˆè¨ˆæ•°ã«ãƒ‘ーセンテージをé©ç”¨ã—ã¦ã€ãƒ‘スã”ã¨ã®ãƒ›ã‚¹ãƒˆæ•°ã‚’決定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:105 msgid "If the number of hosts does not divide equally into the number of passes, the final pass contains the remainder. In this example, if you had 20 hosts in the webservers group, the first batch would contain 6 hosts, the second batch would contain 6 hosts, the third batch would contain 6 hosts, and the last batch would contain 2 hosts." msgstr "ãƒ›ã‚¹ãƒˆã®æ•°ãŒãƒ‘ã‚¹ã®æ•°ã«ç­‰ã—ã分é…ã•れãªã„å ´åˆã¯ã€æœ€å¾Œã®ãƒ‘スã«ã¯æ®‹ã‚Šã®æ•°ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€webservers グループ㫠20 å°ã®ãƒ›ã‚¹ãƒˆãŒã‚ã‚‹å ´åˆã€æœ€åˆã®ãƒãƒƒãƒã«ã¯ 6 å°ã®ãƒ›ã‚¹ãƒˆãŒã€2 番目ã®ãƒãƒƒãƒã«ã¯ 6 å°ã®ãƒ›ã‚¹ãƒˆãŒã€3 番目ã®ãƒãƒƒãƒã«ã¯ 6 å°ã®ãƒ›ã‚¹ãƒˆãŒã€ãã—ã¦æœ€å¾Œã®ãƒãƒƒãƒã«ã¯ 2 å°ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:107 msgid "You can also specify batch sizes as a list. For example::" msgstr "ã¾ãŸã€ãƒãƒƒãƒã‚µã‚¤ã‚ºã‚’リストã¨ã—ã¦æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:117 msgid "In the above example, the first batch would contain a single host, the next would contain 5 hosts, and (if there are any hosts left), every following batch would contain either 10 hosts or all the remaining hosts, if fewer than 10 hosts remained." msgstr "上記ã®ä¾‹ã§ã¯ã€æœ€åˆã®ãƒãƒƒãƒã«ã¯ 1 å°ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã€æ¬¡ã®ãƒãƒƒãƒã«ã¯ 5 å°ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã€(ãƒ›ã‚¹ãƒˆãŒæ®‹ã£ã¦ã„れã°) ãã®å¾Œã®ã™ã¹ã¦ã®ãƒãƒƒãƒã«ã¯ 10 å°ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã‚‹ã‹ã€ã¾ãŸã¯ 10 å°æœªæº€ã®ãƒ›ã‚¹ãƒˆãŒæ®‹ã£ã¦ã„れã°ã€æ®‹ã‚Šã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆãŒå«ã¾ã‚Œã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:119 msgid "You can list multiple batch sizes as percentages::" msgstr "複数ã®ãƒãƒƒãƒã‚µã‚¤ã‚ºã‚’パーセンテージã¨ã—ã¦ä¸€è¦§è¡¨ç¤ºã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:129 msgid "You can also mix and match the values::" msgstr "値を混在ã•ã›ãŸã‚Šã€ä¸€è‡´ã•ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:140 msgid "No matter how small the percentage, the number of hosts per pass will always be 1 or greater." msgstr "パーセンテージをå°ã•ãã—ã¦ã‚‚ã€å„パスã®ãƒ›ã‚¹ãƒˆæ•°ã¯å¸¸ã« 1 以上ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:143 msgid "Restricting execution with ``throttle``" msgstr "``throttle`` ã§å®Ÿè¡Œã‚’制é™" #: ../../rst/user_guide/playbooks_strategies.rst:145 msgid "The ``throttle`` keyword limits the number of workers for a particular task. It can be set at the block and task level. Use ``throttle`` to restrict tasks that may be CPU-intensive or interact with a rate-limiting API::" msgstr "``throttle`` キーワードã¯ã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹ãƒ¯ãƒ¼ã‚«ãƒ¼ã®æ•°ã‚’制é™ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ–ロックãŠã‚ˆã³ã‚¿ã‚¹ã‚¯ã®ãƒ¬ãƒ™ãƒ«ã§è¨­å®šã§ãã¾ã™ã€‚``throttle`` を使用ã—ã¦ã€CPU ã«è² è·ãŒã‹ã‹ã‚‹å¯èƒ½æ€§ã®ã‚るタスクやã€ãƒ¬ãƒ¼ãƒˆåˆ¶é™ API ã¨ç›¸äº’作用ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’制é™ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:151 msgid "If you have already restricted the number of forks or the number of machines to execute against in parallel, you can reduce the number of workers with ``throttle``, but you cannot increase it. In other words, to have an effect, your ``throttle`` setting must be lower than your ``forks`` or ``serial`` setting if you are using them together." msgstr "ã™ã§ã«ãƒ•ã‚©ãƒ¼ã‚¯ã®æ•°ã‚„並列実行ã™ã‚‹ãƒžã‚·ãƒ³ã®æ•°ã‚’制é™ã—ã¦ã„ã‚‹å ´åˆã¯ã€``throttle`` ã§ãƒ¯ãƒ¼ã‚«ãƒ¼ã®æ•°ã‚’減らã™ã“ã¨ã¯ã§ãã¾ã™ãŒã€å¢—ã‚„ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã¤ã¾ã‚Šã€ãれをåˆã‚ã›ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã«åŠ¹æžœã‚’å¾—ã‚‹ãŸã‚ã«ã¯ã€``throttle`` ã®è¨­å®šãŒ ``forks`` ã‚„ ``serial`` ã®è¨­å®šã‚ˆã‚Šã‚‚低ããªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_strategies.rst:154 msgid "Ordering execution based on inventory" msgstr "インベントリーã«åŸºã¥ã実行ã®é †åºä»˜ã‘" #: ../../rst/user_guide/playbooks_strategies.rst:156 msgid "The ``order`` keyword controls the order in which hosts are run. Possible values for order are:" msgstr "``order`` キーワードã¯ã€ãƒ›ã‚¹ãƒˆãŒå®Ÿè¡Œã™ã‚‹é †åºã‚’制御ã—ã¾ã™ã€‚order ã«æŒ‡å®šã§ãã‚‹å€¤ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:158 msgid "inventory:" msgstr "inventory:" #: ../../rst/user_guide/playbooks_strategies.rst:159 msgid "(default) The order provided by the inventory for the selection requested (see note below)" msgstr "ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰è¦æ±‚ã•れãŸé¸æŠžã«å¯¾ã—ã¦ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ã‚ˆã£ã¦æä¾›ã•れる順åºï¼ˆä»¥ä¸‹ã®æ³¨è¨˜ã‚’å‚照)" #: ../../rst/user_guide/playbooks_strategies.rst:160 msgid "reverse_inventory:" msgstr "reverse_inventory:" #: ../../rst/user_guide/playbooks_strategies.rst:161 msgid "The same as above, but reversing the returned list" msgstr "上記ã¨åŒã˜ã§ã™ãŒã€è¿”ã•れãŸãƒªã‚¹ãƒˆã®å†æ¤œè¨¼" #: ../../rst/user_guide/playbooks_strategies.rst:162 msgid "sorted:" msgstr "sorted:" #: ../../rst/user_guide/playbooks_strategies.rst:163 msgid "Sorted alphabetically sorted by name" msgstr "åå‰ã‚’アルファベット順ã§ä¸¦ã¹æ›¿ãˆã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:164 msgid "reverse_sorted:" msgstr "reverse_sorted:" #: ../../rst/user_guide/playbooks_strategies.rst:165 msgid "Sorted by name in reverse alphabetical order" msgstr "アルファベットã®é€†é †ã§åå‰ãŒã‚½ãƒ¼ãƒˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:167 msgid "shuffle:" msgstr "shuffle:" #: ../../rst/user_guide/playbooks_strategies.rst:167 msgid "Randomly ordered on each run" msgstr "実行ã”ã¨ã«ãƒ©ãƒ³ãƒ€ãƒ ã«é †åºä»˜ã‘られã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:170 msgid "the 'inventory' order does not equate to the order in which hosts/groups are defined in the inventory source file, but the 'order in which a selection is returned from the compiled inventory'. This is a backwards compatible option and while reproducible it is not normally predictable. Due to the nature of inventory, host patterns, limits, inventory plugins and the ability to allow multiple sources it is almost impossible to return such an order. For simple cases this might happen to match the file definition order, but that is not guaranteed." msgstr "'インベントリー' ã®é †åºã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚½ãƒ¼ã‚¹ãƒ•ァイル内ã§ãƒ›ã‚¹ãƒˆ/グループãŒå®šç¾©ã™ã‚‹é †åºã¨åŒã˜ã§ã¯ã‚りã¾ã›ã‚“ãŒã€'コンパイルã•れãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰é¸æŠžãŒè¿”ã•れる順åº' ã¨åŒã˜ã§ã™ã€‚ã“れã¯ä¸‹ä½äº’æ›æ€§ã®ã‚るオプションã§ã‚りã€å†ç¾å¯èƒ½ã§ã™ãŒã€é€šå¸¸ã¯äºˆæ¸¬ã§ãã¾ã›ã‚“ã€‚ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®æ€§è³ªã€ãƒ›ã‚¹ãƒˆãƒ‘ターンã€åˆ¶é™ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ—ラグインã€ãŠã‚ˆã³è¤‡æ•°ã®ã‚½ãƒ¼ã‚¹ã‚’許å¯ã™ã‚‹æ©Ÿèƒ½ã«ã‚ˆã‚Šã€ãã®ã‚ˆã†ãªé †åºã‚’è¿”ã™ã“ã¨ã¯ã»ã¨ã‚“ã©ä¸å¯èƒ½ã§ã™ã€‚å˜ç´”ãªã‚±ãƒ¼ã‚¹ã§ã¯ã€ã“れã¯ãƒ•ァイル定義ã®é †åºã¨ä¸€è‡´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€ãれã¯ä¿è¨¼ã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_strategies.rst:175 msgid "Running on a single machine with ``run_once``" msgstr "シングルマシンã§ã€``run_once`` ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:177 msgid "If you want a task to run only on the first host in your batch of hosts, set ``run_once`` to true on that task::" msgstr "ホストã®ãƒãƒƒãƒã®æœ€åˆã®ãƒ›ã‚¹ãƒˆã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹å ´åˆã¯ã€ãã®ã‚¿ã‚¹ã‚¯ã§ ``run_once`` ã‚’ true ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:191 msgid "Ansible executes this task on the first host in the current batch and applies all results and facts to all the hosts in the same batch. This approach is similar to applying a conditional to a task such as::" msgstr "Ansible ã¯ã€ç¾åœ¨ã®ãƒãƒƒãƒã®æœ€åˆã®ãƒ›ã‚¹ãƒˆã§ã“ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ã™ã¹ã¦ã®çµæžœã¨ãƒ•ァクトをåŒã˜ãƒãƒƒãƒã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯ã€æ¬¡ã®ã‚ˆã†ãªæ¡ä»¶ã‚’タスクã«é©ç”¨ã™ã‚‹ã“ã¨ã«ä¼¼ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:196 msgid "However, with ``run_once``, the results are applied to all the hosts. To run the task on a specific host, instead of the first host in the batch, delegate the task::" msgstr "ãŸã ã—ã€``run_once`` ã§ã¯ã€çµæžœã¯ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«é©ç”¨ã•れã¾ã™ã€‚ãƒãƒƒãƒã®æœ€åˆã®ãƒ›ã‚¹ãƒˆã§ã¯ãªãã€ç‰¹å®šã®ãƒ›ã‚¹ãƒˆã§ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã«ã¯ã€ã‚¿ã‚¹ã‚¯ã‚’次ã®ã‚ˆã†ã«å§”è­²ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:202 msgid "As always with :ref:`delegation `, the action will be executed on the delegated host, but the information is still that of the original host in the task." msgstr ":ref:`委譲 ` ã®å ´åˆã¨åŒæ§˜ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å§”è­²ã•れãŸãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã•れã¾ã™ãŒã€æƒ…å ±ã¯ã‚¿ã‚¹ã‚¯ã®å…ƒã®ãƒ›ã‚¹ãƒˆã®æƒ…å ±ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:205 msgid "When used together with ``serial``, tasks marked as ``run_once`` will be run on one host in *each* serial batch. If the task must run only once regardless of ``serial`` mode, use :code:`when: inventory_hostname == ansible_play_hosts_all[0]` construct." msgstr "``serial`` ã¨ä½µç”¨ã™ã‚‹ã¨ã€``run_once`` ã¨ãƒžãƒ¼ã‚¯ã•れãŸã‚¿ã‚¹ã‚¯ã¯ã€*å„* シリアルãƒãƒƒãƒã®ä¸­ã® 1 å°ã®ãƒ›ã‚¹ãƒˆã§å®Ÿè¡Œã—ã¾ã™ã€‚タスク㌠``serial`` モードã«é–¢ä¿‚ãªã 1 回ã ã‘実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€:code:`when: inventory_hostname == ansible_play_hosts_all[0]` コンストラクトを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:209 msgid "Any conditional (in other words, `when:`) will use the variables of the 'first host' to decide if the task runs or not, no other hosts will be tested." msgstr "æ¡ä»¶ (ã¤ã¾ã‚Š `when:`) ã¯ã€ã€Œfirst hostã€ã®å¤‰æ•°ã‚’使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるã‹ã©ã†ã‹ã‚’判断ã—ã€ä»–ã®ãƒ›ã‚¹ãƒˆã¯ãƒ†ã‚¹ãƒˆã•れã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_strategies.rst:212 msgid "If you want to avoid the default behavior of setting the fact for all hosts, set ``delegate_facts: True`` for the specific task or block." msgstr "ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«ãƒ•ァクトを設定ã™ã‚‹ãƒ‡ãƒ•ォルトã®å‹•作を回é¿ã™ã‚‹å ´åˆã¯ã€ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ–ロック㫠``delegate_facts: True`` を設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_strategies.rst:218 msgid ":ref:`playbooks_delegation`" msgstr ":ref:`playbooks_delegation`" #: ../../rst/user_guide/playbooks_strategies.rst:219 msgid "Running tasks on or assigning facts to specific machines" msgstr "特定マシンã§ã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã€ã¾ãŸã¯ç‰¹å®šãƒžã‚·ãƒ³ã¸ã®ãƒ•ァクトã®å‰²ã‚Šå½“ã¦" #: ../../rst/user_guide/playbooks_tags.rst:5 msgid "Tags" msgstr "ã‚¿ã‚°" #: ../../rst/user_guide/playbooks_tags.rst:7 msgid "If you have a large playbook, it may be useful to run only specific parts of it instead of running the entire playbook. You can do this with Ansible tags. Using tags to execute or skip selected tasks is a two-step process:" msgstr "å¤§è¦æ¨¡ãª Playbook を使用ã™ã‚‹å ´åˆã¯ã€Playbook 全体を実行ã™ã‚‹ã®ã§ã¯ãªãã€ç‰¹å®šã®éƒ¨åˆ†ã ã‘を実行ã™ã‚‹ã¨ä¾¿åˆ©ãªå ´åˆãŒã‚りã¾ã™ã€‚ã“れを実ç¾ã™ã‚‹ã«ã¯ã€Ansible ã®ã‚¿ã‚°ã‚’使用ã—ã¾ã™ã€‚タグを使用ã—ã¦é¸æŠžã—ãŸã‚¿ã‚¹ã‚¯ã‚’実行ã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã«ã¯ã€2 ã¤ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:9 msgid "Add tags to your tasks, either individually or with tag inheritance from a block, play, role, or import." msgstr "タスクã«ã‚¿ã‚°ã‚’追加ã™ã‚‹ã«ã¯ã€å€‹åˆ¥ã«ã‚¿ã‚°ã‚’追加ã™ã‚‹ã‹ã€ãƒ–ロックã€ãƒ—レイã€ãƒ­ãƒ¼ãƒ«ã€ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‹ã‚‰ã‚¿ã‚°ã‚’継承ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:10 msgid "Select or skip tags when you run your playbook." msgstr "Playbook ã®å®Ÿè¡Œæ™‚ã«ã‚¿ã‚°ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:16 msgid "Adding tags with the tags keyword" msgstr "tags キーワードを使用ã—ãŸã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:18 msgid "You can add tags to a single task or include. You can also add tags to multiple tasks by defining them at the level of a block, play, role, or import. The keyword ``tags`` addresses all these use cases. The ``tags`` keyword always defines tags and adds them to tasks; it does not select or skip tasks for execution. You can only select or skip tasks based on tags at the command line when you run a playbook. See :ref:`using_tags` for more details." msgstr "ã‚¿ã‚°ã¯ã€å˜ä¸€ã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã«è¿½åŠ ã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ–ロックã€ãƒ—レイã€ãƒ­ãƒ¼ãƒ«ã€ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ãƒ¬ãƒ™ãƒ«ã§ã‚¿ã‚°ã‚’定義ã™ã‚‹ã“ã¨ã§ã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚``tags`` キーワードã¯ã€ã“れらã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚``tags`` キーワードã¯ã€å¸¸ã«ã‚¿ã‚°ã‚’定義ã—ã¦ã‚¿ã‚¹ã‚¯ã«è¿½åŠ ã—ã¾ã™ãŒã€å®Ÿè¡Œã™ã‚‹ã‚¿ã‚¹ã‚¯ã®é¸æŠžã‚„スキップã¯è¡Œã„ã¾ã›ã‚“。タグã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã§ãã‚‹ã®ã¯ã€Playbook ã®å®Ÿè¡Œæ™‚ã«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§è¡Œã†å ´åˆã®ã¿ã§ã™ã€‚詳細ã¯ã€ã€Œ:ref:`using_tags`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:21 msgid "Adding tags to individual tasks" msgstr "個別タスクã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:23 msgid "At the simplest level, you can apply one or more tags to an individual task. You can add tags to tasks in playbooks, in task files, or within a role. Here is an example that tags two tasks with different tags:" msgstr "最も簡å˜ãªãƒ¬ãƒ™ãƒ«ã§ã¯ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã« 1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ã‚¿ã‚°ã‚’é©ç”¨ã§ãã¾ã™ã€‚ã‚¿ã‚°ã¯ã€Playbook 内ã€ã‚¿ã‚¹ã‚¯ãƒ•ァイル内ã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ã«è¿½åŠ ã§ãã¾ã™ã€‚以下ã¯ã€2 ã¤ã®ã‚¿ã‚¹ã‚¯ã«ç•°ãªã‚‹ã‚¿ã‚°ã‚’付ã‘る例ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:45 msgid "You can apply the same tag to more than one individual task. This example tags several tasks with the same tag, \"ntp\":" msgstr "åŒã˜ã‚¿ã‚°ã‚’複数ã®å€‹åˆ¥ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã§ãã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€åŒã˜ã‚¿ã‚°ã€Œntpã€ã‚’使用ã—ã¦ã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:81 msgid "If you ran these four tasks in a playbook with ``--tags ntp``, Ansible would run the three tasks tagged ``ntp`` and skip the one task that does not have that tag." msgstr "``--tags ntp`` を使用ã—ã¦ã€ã“ã® 4 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’ Playbook ã§å®Ÿè¡Œã—ãŸå ´åˆã€Ansible 㯠``ntp`` ã®ã‚¿ã‚°ãŒä»˜ã„㟠3 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ã‚¿ã‚°ãŒä»˜ã„ã¦ã„ãªã„ 1 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’スキップã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:86 msgid "Adding tags to includes" msgstr "インクルードã™ã‚‹ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:88 msgid "You can apply tags to dynamic includes in a playbook. As with tags on an individual task, tags on an ``include_*`` task apply only to the include itself, not to any tasks within the included file or role. If you add ``mytag`` to a dynamic include, then run that playbook with ``--tags mytag``, Ansible runs the include itself, runs any tasks within the included file or role tagged with ``mytag``, and skips any tasks within the included file or role without that tag. See :ref:`selective_reuse` for more details." msgstr "ã‚¿ã‚°ã¯ã€Playbook 内ã®å‹•的インクルードã«ã‚¿ã‚°ã‚’é©ç”¨ã§ãã¾ã™ã€‚個々ã®ã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ã¨åŒæ§˜ã«ã€``include_*`` タスクã®ã‚¿ã‚°ã¯ã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã«ã®ã¿é©ç”¨ã•れã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れãŸãƒ•ァイルやロール内ã®ã‚¿ã‚¹ã‚¯ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。動的インクルード㫠``mytag`` を追加ã—ã€ãã® Playbook ã‚’ ``--tags mytag`` ã§å®Ÿè¡Œã™ã‚‹ã¨ã€Ansible ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“を実行ã—ã€``mytag`` ã§ã‚¿ã‚°ä»˜ã‘ã•れãŸã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ•ァイルã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ãã®ã‚¿ã‚°ã®ãªã„インクルードファイルã¾ãŸã¯ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ã‚’スキップã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`selective_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:90 msgid "You add tags to includes the same way you add tags to any other task:" msgstr "タグを追加ã—ã¦ã€ä»–ã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’追加ã™ã‚‹æ–¹æ³•ã¨åŒã˜æ–¹æ³•ã§ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:101 msgid "You can add a tag only to the dynamic include of a role. In this example, the ``foo`` tag will `not` apply to tasks inside the ``bar`` role:" msgstr "ã‚¿ã‚°ã¯ã€ãƒ­ãƒ¼ãƒ«ã®å‹•的インクルードã«ã®ã¿è¿½åŠ ã§ãã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€``foo`` タグ㯠``bar`` ロール内ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ `ã•れã¾ã›ã‚“`。" #: ../../rst/user_guide/playbooks_tags.rst:114 msgid "With plays, blocks, the ``role`` keyword, and static imports, Ansible applies tag inheritance, adding the tags you define to every task inside the play, block, role, or imported file. However, tag inheritance does *not* apply to dynamic re-use with ``include_role`` and ``include_tasks``. With dynamic re-use (includes), the tags you define apply only to the include itself. If you need tag inheritance, use a static import. If you cannot use an import because the rest of your playbook uses includes, see :ref:`apply_keyword` for ways to work around this behavior." msgstr "プレイã€ãƒ–ロックã€``role`` キーワードã€ãŠã‚ˆã³é™çš„ãªã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ã¯ã€Ansible ã¯ã‚¿ã‚°ç¶™æ‰¿ã‚’é©ç”¨ã—ã€å®šç¾©ã—ãŸã‚¿ã‚°ã‚’プレイã€ãƒ–ロックã€ãƒ­ãƒ¼ãƒ«ã€ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸãƒ•ァイル内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«è¿½åŠ ã—ã¾ã™ã€‚ã—ã‹ã—ã€``include_role`` ã‚„ ``include_tasks`` ã®ã‚ˆã†ãªå‹•çš„å†åˆ©ç”¨ã§ã¯ã€ã‚¿ã‚°ã®ç¶™æ‰¿ã¯ *é©ç”¨ã•れã¾ã›ã‚“*。動的å†åˆ©ç”¨ (インクルード) ã§ã¯ã€å®šç¾©ã—ãŸã‚¿ã‚°ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã«ã®ã¿é©ç”¨ã•れã¾ã™ã€‚ã‚¿ã‚°ã®ç¶™æ‰¿ãŒå¿…è¦ãªå ´åˆã¯ã€é™çš„インãƒãƒ¼ãƒˆã‚’使用ã—ã¦ãã ã•ã„。Playbook ã®ä»–ã®éƒ¨åˆ†ãŒã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’使用ã—ã¦ã„ã‚‹ãŸã‚ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã§ããªã„å ´åˆã¯ã€ã“ã®å‹•作を回é¿ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã€Œ:ref:`apply_keyword`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:119 msgid "Tag inheritance: adding tags to multiple tasks" msgstr "ã‚¿ã‚°ã®ç¶™æ‰¿: 複数ã®ã‚¿ã‚¹ã‚¯ã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:121 msgid "If you want to apply the same tag or tags to multiple tasks without adding a ``tags`` line to every task, you can define the tags at the level of your play or block, or when you add a role or import a file. Ansible applies the tags down the dependency chain to all child tasks. With roles and imports, Ansible appends the tags set by the ``roles`` section or import to any tags set on individual tasks or blocks within the role or imported file. This is called tag inheritance. Tag inheritance is convenient, because you do not have to tag every task. However, the tags still apply to the tasks individually." msgstr "ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã« ``tags`` 行を追加ã™ã‚‹ã“ã¨ãªãã€è¤‡æ•°ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜ã‚¿ã‚°ã‚’é©ç”¨ã—ãŸã„å ´åˆã¯ã€ãƒ—レイやブロックã®ãƒ¬ãƒ™ãƒ«ã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®è¿½åŠ ã‚„ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®éš›ã«ã‚¿ã‚°ã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€ä¾å­˜é–¢ä¿‚ã®é€£éŽ–ã®ä¸‹ã«ã‚ã‚‹ã‚¿ã‚°ã‚’ã™ã¹ã¦ã®å­ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã—ã¾ã™ã€‚ロールやインãƒãƒ¼ãƒˆã®å ´åˆã€Ansible 㯠``roles`` セクションやインãƒãƒ¼ãƒˆã§è¨­å®šã•れãŸã‚¿ã‚°ã‚’ã€ãƒ­ãƒ¼ãƒ«ã‚„インãƒãƒ¼ãƒˆã—ãŸãƒ•ァイル内ã®å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã‚„ブロックã«è¨­å®šã•れãŸã‚¿ã‚°ã«è¿½åŠ ã—ã¾ã™ã€‚ã“れを「タグã®ç¶™æ‰¿ã€ã¨å‘¼ã³ã¾ã™ã€‚ã‚¿ã‚°ã®ç¶™æ‰¿ã¯ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’付ã‘ã‚‹å¿…è¦ãŒãªã„ãŸã‚便利ã§ã™ã€‚ãŸã ã—ã€ã‚¿ã‚°ã¯ã‚¿ã‚¹ã‚¯ã«å€‹åˆ¥ã«é©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:124 msgid "Adding tags to blocks" msgstr "ブロックã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:126 msgid "If you want to apply a tag to many, but not all, of the tasks in your play, use a :ref:`block ` and define the tags at that level. For example, we could edit the NTP example shown above to use a block:" msgstr "プレイ中ã®ã‚¿ã‚¹ã‚¯ã®ã™ã¹ã¦ã§ã¯ãªãã€å¤šãã®ã‚¿ã‚¹ã‚¯ã«ã‚¿ã‚°ã‚’é©ç”¨ã—ãŸã„å ´åˆã¯ã€:ref:`ブロック ` を使用ã—ã€ãã®ãƒ¬ãƒ™ãƒ«ã§ã‚¿ã‚°ã‚’定義ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šã§ç´¹ä»‹ã—㟠NTP ã®ä¾‹ã‚’編集ã—ã¦ã€ãƒ–ロックを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:161 msgid "Adding tags to plays" msgstr "プレイã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:163 msgid "If all the tasks in a play should get the same tag, you can add the tag at the level of the play. For example, if you had a play with only the NTP tasks, you could tag the entire play:" msgstr "プレイã®ä¸­ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜ã‚¿ã‚°ã‚’付ã‘ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ—レイã®ãƒ¬ãƒ™ãƒ«ã§ã‚¿ã‚°ã‚’追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€NTP タスクã ã‘ã®ãƒ—レイãŒã‚ã£ãŸå ´åˆã¯ã€ãƒ—レイ全体ã«ã‚¿ã‚°ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:194 msgid "Adding tags to roles" msgstr "ロールã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:196 msgid "There are three ways to add tags to roles:" msgstr "ロールã«ã‚¿ã‚°ã‚’追加ã™ã‚‹ã«ã¯ã€3 ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:198 msgid "Add the same tag or tags to all tasks in the role by setting tags under ``roles``. See examples in this section." msgstr "``roles`` セクションã«ã‚¿ã‚°ã‚’設定ã—ã¦ã€ãƒ­ãƒ¼ãƒ«ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜ã‚¿ã‚°ã‚’追加ã—ã¾ã™ã€‚本セクションã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:199 msgid "Add the same tag or tags to all tasks in the role by setting tags on a static ``import_role`` in your playbook. See examples in :ref:`tags_on_imports`." msgstr "Playbook ã®é™çš„ ``import_role`` ã«ã‚¿ã‚°ã‚’設定ã—ã¦ã€ãƒ­ãƒ¼ãƒ«å†…ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«åŒã˜ã‚¿ã‚°ã‚’追加ã—ã¾ã™ã€‚「:ref:`tags_on_imports`ã€ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:200 msgid "Add a tag or tags to individual tasks or blocks within the role itself. This is the only approach that allows you to select or skip some tasks within the role. To select or skip tasks within the role, you must have tags set on individual tasks or blocks, use the dynamic ``include_role`` in your playbook, and add the same tag or tags to the include. When you use this approach, and then run your playbook with ``--tags foo``, Ansible runs the include itself plus any tasks in the role that also have the tag ``foo``. See :ref:`tags_on_includes` for details." msgstr "ロール自体ã®ä¸­ã®å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã‚„ブロックã«ã‚¿ã‚°ã‚’追加ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ãƒ«å†…ã®ä¸€éƒ¨ã®ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã‚‹å”¯ä¸€ã®æ–¹æ³•ã§ã™ã€‚ロール内ã®ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã«ã¯ã€å€‹ã€…ã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ–ロックã«ã‚¿ã‚°ã‚’設定ã—ã€Playbook ã§å‹•的㪠``include_role`` を使用ã—ã¦ã€åŒã˜ã‚¿ã‚°ã‚’インクルードã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®æ–¹æ³•ã§ ``--tags foo`` を付ã‘㦠Playbook を実行ã™ã‚‹ã¨ã€Ansible ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã«åŠ ãˆã¦ã€ã‚¿ã‚° ``foo`` ã‚’æŒã¤ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`tags_on_includes`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:202 msgid "When you incorporate a role in your playbook statically with the ``roles`` keyword, Ansible adds any tags you define to all the tasks in the role. For example:" msgstr "``roles`` キーワードを使用ã—㦠Playbook ã«ãƒ­ãƒ¼ãƒ«ã‚’é™çš„ã«çµ„ã¿è¾¼ã‚€ã¨ã€Ansible ã¯å®šç¾©ã—ãŸã‚¿ã‚°ã‚’ロール内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«è¿½åŠ ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:212 msgid "or:" msgstr "ã¾ãŸã¯" #: ../../rst/user_guide/playbooks_tags.rst:229 msgid "Adding tags to imports" msgstr "インãƒãƒ¼ãƒˆã¸ã®ã‚¿ã‚°ã®è¿½åŠ " #: ../../rst/user_guide/playbooks_tags.rst:231 msgid "You can also apply a tag or tags to all the tasks imported by the static ``import_role`` and ``import_tasks`` statements:" msgstr "ã¾ãŸã€é™çš„㪠``import_role`` 文や ``import_tasks`` æ–‡ã«ã‚ˆã‚Šã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«ã€ã‚¿ã‚°ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:252 msgid "Tag inheritance for includes: blocks and the ``apply`` keyword" msgstr "インクルードã®ã‚¿ã‚°ç¶™æ‰¿: ブロックãŠã‚ˆã³ ``apply`` キーワード" #: ../../rst/user_guide/playbooks_tags.rst:254 msgid "By default, Ansible does not apply :ref:`tag inheritance ` to dynamic re-use with ``include_role`` and ``include_tasks``. If you add tags to an include, they apply only to the include itself, not to any tasks in the included file or role. This allows you to execute selected tasks within a role or task file - see :ref:`selective_reuse` when you run your playbook." msgstr "デフォルトã§ã¯ã€Ansible 㯠:ref:`タグ継承 ` ã‚’é©ç”¨ã›ãšã€``include_role`` ãŠã‚ˆã³ ``include_tasks`` を使用ã—ãŸå‹•çš„å†åˆ©ç”¨ã‚’行ã„ã¾ã™ã€‚タグをインクルードã«è¿½åŠ ã™ã‚‹ã¨ã€ã‚¿ã‚°ã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰è‡ªä½“ã«ã®ã¿é©ç”¨ã•れã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã—ãŸãƒ•ァイルやロール内ã®ã‚¿ã‚¹ã‚¯ã«ã¯é©ç”¨ã•れã¾ã›ã‚“。ã“れã«ã‚ˆã‚Šã€ãƒ­ãƒ¼ãƒ«ã‚„タスクファイル内ã®é¸æŠžã—ãŸã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook を実行ã™ã‚‹éš›ã«ã¯ã€ã€Œ:ref:`selective_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:256 msgid "If you want tag inheritance, you probably want to use imports. However, using both includes and imports in a single playbook can lead to difficult-to-diagnose bugs. For this reason, if your playbook uses ``include_*`` to re-use roles or tasks, and you need tag inheritance on one include, Ansible offers two workarounds. You can use the ``apply`` keyword:" msgstr "ã‚¿ã‚°ã®ç¶™æ‰¿ãŒå¿…è¦ãªå ´åˆã¯ã€ãŠãらãインãƒãƒ¼ãƒˆã‚’使用ã—ãŸã„ã¨æ€ã†ã§ã—ょã†ã€‚ãŸã ã—ã€1 ã¤ã® Playbook ã§ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã¨ã‚¤ãƒ³ãƒãƒ¼ãƒˆã®ä¸¡æ–¹ã‚’使用ã™ã‚‹ã¨ã€è¨ºæ–­ãŒå›°é›£ãªãƒã‚°ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªç†ç”±ã‹ã‚‰ã€Playbook ã§ ``include_*`` を使用ã—ã¦ãƒ­ãƒ¼ãƒ«ã‚„タスクをå†åˆ©ç”¨ã—ã¦ã„ã‚‹å ´åˆã«ã€1 ã¤ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã§ã‚¿ã‚°ã®ç¶™æ‰¿ãŒå¿…è¦ãªå ´åˆã€Ansible ã«ã¯ 2 ã¤ã®å›žé¿ç­–ãŒã‚りã¾ã™ã€‚``apply`` キーワードを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:269 msgid "Or you can use a block:" msgstr "ã¾ãŸã¯ã€ä»¥ä¸‹ã®ãƒ–ロックを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:281 msgid "Special tags: always and never" msgstr "特別ãªã‚¿ã‚°: always ãŠã‚ˆã³ never" #: ../../rst/user_guide/playbooks_tags.rst:283 msgid "Ansible reserves two tag names for special behavior: always and never. If you assign the ``always`` tag to a task or play, Ansible will always run that task or play, unless you specifically skip it (``--skip-tags always``)." msgstr "Ansible ã¯ã€ç‰¹åˆ¥ãªå‹•作ã®ãŸã‚ã«ã€always 㨠never ã¨ã„ㆠ2 ã¤ã®ã‚¿ã‚°åを予約ã—ã¦ã„ã¾ã™ã€‚``always`` タグをタスクやプレイã«å‰²ã‚Šå½“ã¦ã‚‹ã¨ã€Ansible ã¯ç‰¹ã«ã‚¹ã‚­ãƒƒãƒ—ã—ãªã„é™ã‚Šã€å¸¸ã«ãã®ã‚¿ã‚¹ã‚¯ã‚„プレイを実行ã—ã¾ã™ (``--skip-tags always``)。" #: ../../rst/user_guide/playbooks_tags.rst:303 msgid "Fact gathering is tagged with 'always' by default. It is only skipped if you apply a tag and then use a different tag in ``--tags`` or the same tag in ``--skip-tags``." msgstr "ファクトåŽé›†ã«ã¯ã€ãƒ‡ãƒ•ォルトã§ã€Œalwaysã€ã¨ã„ã†ã‚¿ã‚°ãŒä»˜ã‘られã¦ã„ã¾ã™ã€‚ã‚¿ã‚°ã‚’é©ç”¨ã—ãŸå¾Œã€``--tags`` ã§åˆ¥ã®ã‚¿ã‚°ã‚’使用ã—ãŸã‚Šã€``--skip-tags`` ã§åŒã˜ã‚¿ã‚°ã‚’使用ã—ãŸå ´åˆã«é™ã‚Šã‚¹ã‚­ãƒƒãƒ—ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:308 msgid "The role argument specification validation task is tagged with 'always' by default. This validation will be skipped if you use ``--skip-tags always``." msgstr "ロールã®å¼•æ•°ã®ä»•様検証タスクã¯ã€ãƒ‡ãƒ•ォルトã§ã€Œalwaysã€ã§ã‚¿ã‚°ä»˜ã‘ã•れã¾ã™ã€‚ã“ã®æ¤œè¨¼ã¯ã€``--skip-tags always`` を使用ã™ã‚‹å ´åˆã«çœç•¥ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:313 msgid "If you assign the ``never`` tag to a task or play, Ansible will skip that task or play unless you specifically request it (``--tags never``)." msgstr "``never`` タグをタスクã¾ãŸã¯ãƒ—レイã«å‰²ã‚Šå½“ã¦ã‚‹ã¨ã€ç‰¹ã«è¦æ±‚ã—ãªã„é™ã‚Š (``--tags never``)ã€Ansible ã¯ãã®ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ãƒ—レイをスキップã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:325 msgid "The rarely-used debug task in the example above only runs when you specifically request the ``debug`` or ``never`` tags." msgstr "上記ã®ä¾‹ã§ã¯ã€ã»ã¨ã‚“ã©ä½¿ç”¨ã•れãªã„デãƒãƒƒã‚°ã‚¿ã‚¹ã‚¯ã¯ã€``debug`` ã‚¿ã‚°ã¾ãŸã¯ ``never`` タグを特別ã«è¦æ±‚ã—ãŸå ´åˆã«ã®ã¿å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:330 msgid "Selecting or skipping tags when you run a playbook" msgstr "Playbook ã®å®Ÿè¡Œæ™‚ã«ã‚¿ã‚°ã®é¸æŠžã¾ãŸã¯çœç•¥" #: ../../rst/user_guide/playbooks_tags.rst:332 msgid "Once you have added tags to your tasks, includes, blocks, plays, roles, and imports, you can selectively execute or skip tasks based on their tags when you run :ref:`ansible-playbook`. Ansible runs or skips all tasks with tags that match the tags you pass at the command line. If you have added a tag at the block or play level, with ``roles``, or with an import, that tag applies to every task within the block, play, role, or imported role or file. If you have a role with lots of tags and you want to call subsets of the role at different times, either :ref:`use it with dynamic includes `, or split the role into multiple roles." msgstr "タスクã€ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã€ãƒ–ロックã€ãƒ—レイã€ãƒ­ãƒ¼ãƒ«ã€ãŠã‚ˆã³ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«ã‚¿ã‚°ã‚’追加ã—ãŸã‚‰ã€:ref:`ansible-playbook` を実行ã™ã‚‹éš›ã«ã€ã‚¿ã‚°ã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ã‚’é¸æŠžçš„ã«å®Ÿè¡Œã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã—ãŸã‚¿ã‚°ã¨ä¸€è‡´ã™ã‚‹ã‚¿ã‚°ã‚’æŒã¤ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ã€‚ブロックやプレイã®ãƒ¬ãƒ™ãƒ«ã§ã€``roles`` ã¾ãŸã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã‚’使用ã—ã¦ã‚¿ã‚°ã‚’追加ã—ãŸå ´åˆã€ãã®ã‚¿ã‚°ã¯ãƒ–ロックã€ãƒ—レイã€ãƒ­ãƒ¼ãƒ«ã€ã‚‚ã—ãã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ­ãƒ¼ãƒ«ã¾ãŸã¯ãƒ•ァイル内ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã«é©ç”¨ã•れã¾ã™ã€‚多ãã®ã‚¿ã‚°ã‚’æŒã¤ãƒ­ãƒ¼ãƒ«ãŒã‚りã€ãƒ­ãƒ¼ãƒ«ã®ã‚µãƒ–セットを異ãªã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§å‘¼ã³å‡ºã—ãŸã„å ´åˆã¯ã€:ref:`動的インクルードã§ä½¿ç”¨ã™ã‚‹ ` ã‹ã€ãƒ­ãƒ¼ãƒ«ã‚’複数ã®ãƒ­ãƒ¼ãƒ«ã«åˆ†å‰²ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:334 msgid ":ref:`ansible-playbook` offers five tag-related command-line options:" msgstr ":ref:`ansible-playbook` ã¯ã€ã‚¿ã‚°é–¢é€£ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションを 5 ã¤æä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:336 msgid "``--tags all`` - run all tasks, ignore tags (default behavior)" msgstr "``--tags all`` - ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ã‚¿ã‚°ã‚’無視ã—ã¾ã™ (デフォルトã®å‹•作)。" #: ../../rst/user_guide/playbooks_tags.rst:337 msgid "``--tags [tag1, tag2]`` - run only tasks with either the tag ``tag1`` or the tag ``tag2``" msgstr "``--tags [tag1, tag2]`` - ``tag1`` ã‚¿ã‚°ã¾ãŸã¯ ``tag2`` ã‚¿ã‚°ã®ã„ãšã‚Œã‹ã§ã®ã¿ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:338 msgid "``--skip-tags [tag3, tag4]`` - run all tasks except those with either the tag ``tag3`` or the tag ``tag4``" msgstr "``--skip-tags [tag3, tag4]`` - ``tag3`` ã‚¿ã‚°ã¾ãŸã¯ ``tag4`` ã‚¿ã‚°ã®ã„ãšã‚Œã‹ãŒæŒ‡å®šã•れãŸã‚¿ã‚¹ã‚¯ä»¥å¤–ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:339 msgid "``--tags tagged`` - run only tasks with at least one tag" msgstr "``--tags tagged`` - 1 ã¤ä»¥ä¸Šã®ã‚¿ã‚°ã§ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:340 msgid "``--tags untagged`` - run only tasks with no tags" msgstr "``--tags untagged`` - ã‚¿ã‚°ãªã—ã§ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:342 msgid "For example, to run only tasks and blocks tagged ``configuration`` and ``packages`` in a very long playbook:" msgstr "ãŸã¨ãˆã°ã€éžå¸¸ã«é•·ã„ Playbook ã§ã€ã‚¿ã‚¹ã‚¯ã¨ã€``configuration`` ãŠã‚ˆã³ ``packages`` ã®ã‚¿ã‚°ãŒä»˜ã‘られãŸãƒ–ロックã®ã¿ã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:348 msgid "To run all tasks except those tagged ``packages``:" msgstr "``packages`` ã®ã‚¿ã‚°ãŒä»˜ã„ãŸã‚¿ã‚¹ã‚¯ä»¥å¤–ã®ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:355 msgid "Previewing the results of using tags" msgstr "ã‚¿ã‚°ã®ä½¿ç”¨çµæžœã®ãƒ—レビュー" #: ../../rst/user_guide/playbooks_tags.rst:357 msgid "When you run a role or playbook, you might not know or remember which tasks have which tags, or which tags exist at all. Ansible offers two command-line flags for :ref:`ansible-playbook` that help you manage tagged playbooks:" msgstr "ロールや Playbook を実行ã™ã‚‹éš›ã€ã©ã®ã‚¿ã‚¹ã‚¯ãŒã©ã®ã‚¿ã‚°ã‚’æŒã£ã¦ã„ã‚‹ã®ã‹ã€ã‚ã‚‹ã„ã¯ã©ã®ã‚¿ã‚°ãŒå­˜åœ¨ã™ã‚‹ã®ã‹ã‚’知らãªã„ã€ã‚ã‚‹ã„ã¯è¦šãˆã¦ã„ãªã„å ´åˆãŒã‚りã¾ã™ã€‚Ansible ã§ã¯ã€ã‚¿ã‚°ä»˜ã Playbookã®ç®¡ç†ã«å½¹ç«‹ã¤ :ref:`ansible-playbook` ã«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ•ラグを 2 ã¤æä¾›ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:359 msgid "``--list-tags`` - generate a list of available tags" msgstr "``--list-tags`` - 利用å¯èƒ½ãªã‚¿ã‚°ã®ãƒªã‚¹ãƒˆã‚’生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:360 msgid "``--list-tasks`` - when used with ``--tags tagname`` or ``--skip-tags tagname``, generate a preview of tagged tasks" msgstr "``--list-tasks`` - ``--tags tagname`` ã¾ãŸã¯ ``--skip-tags tagname`` ã¨ä½µç”¨ã™ã‚‹ã¨ã€ã‚¿ã‚°ä»˜ã‘ã•れãŸã‚¿ã‚¹ã‚¯ã®ãƒ—レビューを生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:362 msgid "For example, if you do not know whether the tag for configuration tasks is ``config`` or ``conf`` in a playbook, role, or tasks file, you can display all available tags without running any tasks:" msgstr "ãŸã¨ãˆã°ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ã¾ãŸã¯ã‚¿ã‚¹ã‚¯ãƒ•ァイルã®ä¸­ã§ã€è¨­å®šã‚¿ã‚¹ã‚¯ã®ã‚¿ã‚°ãŒ ``config`` ã‹ ``conf`` ã‹ãŒã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯ã‚’実行ã›ãšã«åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚°ã‚’ã™ã¹ã¦è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:368 msgid "If you do not know which tasks have the tags ``configuration`` and ``packages``, you can pass those tags and add ``--list-tasks``. Ansible lists the tasks but does not execute any of them." msgstr "``configuration`` 㨠``packages`` ã®ã‚¿ã‚°ã‚’æŒã¤ã‚¿ã‚¹ã‚¯ãŒã‚ã‹ã‚‰ãªã„å ´åˆã¯ã€ã“れらã®ã‚¿ã‚°ã‚’渡ã—㦠``--list-tasks`` を追加ã—ã¾ã™ã€‚Ansible ã¯ã‚¿ã‚¹ã‚¯ã‚’リストアップã—ã¾ã™ãŒã€å®Ÿè¡Œã¯ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_tags.rst:374 msgid "These command-line flags have one limitation: they cannot show tags or tasks within dynamically included files or roles. See :ref:`dynamic_vs_static` for more information on differences between static imports and dynamic includes." msgstr "ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ•ラグã«ã¯ã€å‹•的インクルードã•れãŸãƒ•ァイルやロール内ã®ã‚¿ã‚°ã‚„タスクを表示ã™ã‚‹ã“ã¨ãŒã§ããªã„ã¨ã„ã†åˆ¶é™ãŒã‚りã¾ã™ã€‚é™çš„インãƒãƒ¼ãƒˆã¨å‹•的インクルードã®é•ã„ã«ã¤ã„ã¦ã®è©³ç´°ã¯ã€ã€Œ:ref:`dynamic_vs_static`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tags.rst:379 msgid "Selectively running tagged tasks in re-usable files" msgstr "å†åˆ©ç”¨å¯èƒ½ãªãƒ•ァイルã§ã‚¿ã‚°ä»˜ã‘ã•れãŸã‚¿ã‚¹ã‚¯ã‚’é¸æŠžçš„ã«å®Ÿè¡Œ" #: ../../rst/user_guide/playbooks_tags.rst:381 msgid "If you have a role or a tasks file with tags defined at the task or block level, you can selectively run or skip those tagged tasks in a playbook if you use a dynamic include instead of a static import. You must use the same tag on the included tasks and on the include statement itself. For example you might create a file with some tagged and some untagged tasks:" msgstr "タスクやブロックã®ãƒ¬ãƒ™ãƒ«ã§ã‚¿ã‚°ãŒå®šç¾©ã•れã¦ã„るロールやタスクファイルãŒã‚ã‚‹å ´åˆã¯ã€é™çš„インãƒãƒ¼ãƒˆã®ä»£ã‚りã«å‹•的インクルードを使用ã™ã‚‹ã¨ã€Playbook 内ã®ã‚¿ã‚°ä»˜ãã‚¿ã‚¹ã‚¯ã‚’é¸æŠžçš„ã«å®Ÿè¡Œã—ãŸã‚Šã‚¹ã‚­ãƒƒãƒ—ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚インクルードã•れるタスク㨠include 文自体ã«ã¯ã€åŒã˜ã‚¿ã‚°ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¿ã‚°ä»˜ãã®ã‚¿ã‚¹ã‚¯ã¨ã‚¿ã‚°ãªã—ã®ã‚¿ã‚¹ã‚¯ã‚’å«ã‚€ãƒ•ァイルを作æˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:404 msgid "And you might include the tasks file above in a playbook:" msgstr "ã¾ãŸã€Playbook ã«ä¸Šè¨˜ã®ã‚¿ã‚¹ã‚¯ãƒ•ァイルをå«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:416 msgid "When you run the playbook with ``ansible-playbook -i hosts myplaybook.yml --tags \"mytag\"``, Ansible skips the task with no tags, runs the tagged individual task, and runs the two tasks in the block." msgstr "``ansible-playbook -i hosts myplaybook.yml --tags \"mytag\"`` を使用ã—㦠Playbook を実行ã™ã‚‹ã¨ã€Ansible ã¯ã‚¿ã‚°ã®ãªã„タスクをçœç•¥ã—ã€ã‚¿ã‚°ä»˜ã‘ã•れãŸå€‹åˆ¥ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã€ãƒ–ロック内㮠2 ã¤ã®ã‚¿ã‚¹ã‚¯ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tags.rst:419 msgid "Configuring tags globally" msgstr "ã‚¿ã‚°ã®ã‚°ãƒ­ãƒ¼ãƒãƒ«è¨­å®š" #: ../../rst/user_guide/playbooks_tags.rst:421 msgid "If you run or skip certain tags by default, you can use the :ref:`TAGS_RUN` and :ref:`TAGS_SKIP` options in Ansible configuration to set those defaults." msgstr "デフォルトã§ç‰¹å®šã®ã‚¿ã‚°ã‚’実行ã™ã‚‹ã‹ã€ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹å ´åˆã¯ã€Ansible 設定㧠:ref:`TAGS_RUN` オプションãŠã‚ˆã³ :ref:`TAGS_SKIP` オプションを使用ã—ã¦ã“れらã®ãƒ‡ãƒ•ォルトを設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:5 msgid "Templating (Jinja2)" msgstr "ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆä½œæˆ (Jinja2)" #: ../../rst/user_guide/playbooks_templating.rst:7 msgid "Ansible uses Jinja2 templating to enable dynamic expressions and access to :ref:`variables ` and :ref:`facts `. You can use templating with the :ref:`template module `. For example, you can create a template for a configuration file, then deploy that configuration file to multiple environments and supply the correct data (IP address, hostname, version) for each environment. You can also use templating in playbooks directly, by templating task names and more. You can use all the :ref:`standard filters and tests ` included in Jinja2. Ansible includes additional specialized filters for selecting and transforming data, tests for evaluating template expressions, and :ref:`lookup_plugins` for retrieving data from external sources such as files, APIs, and databases for use in templating." msgstr "Ansible 㯠Jinja2 テンプレートを使用ã—ã¦å‹•çš„ãªå¼ã‚’有効ã«ã—ã€:ref:`variables ` ãŠã‚ˆã³ :ref:`facts ` ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’有効ã«ã—ã¾ã™ã€‚:ref:`template module ` ã§ãƒ†ãƒ³ãƒ—レートを使用ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€è¨­å®šãƒ•ァイルã®ãƒ†ãƒ³ãƒ—レートを作æˆã—ã¦ã‹ã‚‰ã€ãã®è¨­å®šãƒ•ァイルを複数ã®ç’°å¢ƒã«ãƒ‡ãƒ—ロイã—ã€å„環境ã«å¯¾ã—ã¦é©åˆ‡ãªãƒ‡ãƒ¼ã‚¿ï¼ˆIP アドレスã€ãƒ›ã‚¹ãƒˆåã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼‰ã‚’指定ã§ãã¾ã™ã€‚ タスクåãªã©ã‚’テンプレート化ã™ã‚‹ã“ã¨ã§ã€Playbook ã§ãƒ†ãƒ³ãƒ—レートを直接使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚Jinja2 ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã® :ref:`standard filters and tests ` を使用ã§ãã¾ã™ã€‚Ansible ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’é¸æŠžãŠã‚ˆã³å¤‰æ›ã™ã‚‹ãŸã‚ã®è¿½åŠ ã®ç‰¹æ®Šãªãƒ•ィルターã€ãƒ†ãƒ³ãƒ—レートå¼ã®è©•価ã®ãƒ†ã‚¹ãƒˆã€ãƒ†ãƒ³ãƒ—レートã§ä½¿ç”¨ã™ã‚‹ãƒ•ァイルã€APIã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãªã©ã®å¤–部ソースã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ãŸã‚ã® :ref:`lookup_plugins` ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:9 msgid "All templating happens on the Ansible controller **before** the task is sent and executed on the target machine. This approach minimizes the package requirements on the target (jinja2 is only required on the controller). It also limits the amount of data Ansible passes to the target machine. Ansible parses templates on the controller and passes only the information needed for each task to the target machine, instead of passing all the data on the controller and parsing it on the target." msgstr "テンプレート化ã¯ã™ã¹ã¦ã€ã‚¿ã‚¹ã‚¯ãŒé€ä¿¡ã•れターゲットマシンã§å®Ÿè¡Œã™ã‚‹ **å‰** ã«ã€Ansible ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§è¡Œã‚れã¾ã™ã€‚ã“ã®ã‚¢ãƒ—ローãƒã«ã‚ˆã‚Šã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã®ãƒ‘ッケージè¦ä»¶ã‚’最å°é™ã«æŠ‘ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ (jinja2 ã¯ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã®ã¿å¿…è¦ã§ã™)。ã¾ãŸã€Ansible ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã«æ¸¡ã™ãƒ‡ãƒ¼ã‚¿ã®é‡ã‚‚制é™ã•れã¾ã™ã€‚Ansible ã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’渡ã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§è§£æžã™ã‚‹ã®ã§ã¯ãªãã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã§ãƒ†ãƒ³ãƒ—レートを解æžã—ã€å„タスクã«å¿…è¦ãªæƒ…å ±ã ã‘ã‚’ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒžã‚·ãƒ³ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:13 msgid "Files and data used by the :ref:`template module ` must be utf-8 encoded." msgstr ":ref:`template module ` ã§ä½¿ç”¨ã•れるファイルãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã¯ utf-8 エンコードã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:29 msgid "Get the current time" msgstr "ç¾åœ¨ã®æ™‚é–“ã‚’å–å¾—" #: ../../rst/user_guide/playbooks_templating.rst:33 msgid "The ``now()`` Jinja2 function retrieves a Python datetime object or a string representation for the current time." msgstr "Jinja2 関数 ``now()`` ã¯ã€Python ã® datetime オブジェクトã¾ãŸã¯ç¾åœ¨ã®æ™‚é–“ã‚’è¡¨ã™æ–‡å­—列をå–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:35 msgid "The ``now()`` function supports 2 arguments:" msgstr "``now()`` 関数ã¯ã€2 ã¤ã®å¼•数をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:38 msgid "utc" msgstr "utc" #: ../../rst/user_guide/playbooks_templating.rst:38 msgid "Specify ``True`` to get the current time in UTC. Defaults to ``False``." msgstr "UTC ã§ç¾åœ¨ã®æ™‚é–“ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€``True`` を指定ã—ã¾ã™ã€‚デフォルト㯠``False`` ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:42 msgid "fmt" msgstr "fmt" #: ../../rst/user_guide/playbooks_templating.rst:41 msgid "Accepts a `strftime `_ string that returns a formatted date time string." msgstr "`strftime `_ ã®æ–‡å­—列をå—ã‘å–りã€å½¢å¼åŒ–ã•ã‚ŒãŸæ—¥æ™‚文字列を返ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_templating.rst:56 msgid "`Jinja2 Docs `_" msgstr "`Jinja2 Docs `_" #: ../../rst/user_guide/playbooks_templating.rst:57 msgid "Jinja2 documentation, includes the syntax and semantics of the templates" msgstr "Jinja2 ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ§‹æ–‡ãŠã‚ˆã³ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã‚’å«ã‚€ï¼‰" #: ../../rst/user_guide/playbooks_tests.rst:5 msgid "Tests" msgstr "テスト" #: ../../rst/user_guide/playbooks_tests.rst:7 msgid "`Tests `_ in Jinja are a way of evaluating template expressions and returning True or False. Jinja ships with many of these. See `builtin tests`_ in the official Jinja template documentation." msgstr "Jinja ã® `Tests `_ ã¯ã€ãƒ†ãƒ³ãƒ—レートå¼ã‚’評価ã—ã¦ã€True ã¾ãŸã¯ False ã‚’è¿”ã—ã¾ã™ã€‚Jinja ã«ã¯ã“れらã®å¤šããŒåŒæ¢±ã•れã¦ã„ã¾ã™ã€‚Jinja ã®å…¬å¼ãƒ†ãƒ³ãƒ—レートドキュメントã®ã€Œ`builtin tests`_ã€ã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tests.rst:9 msgid "The main difference between tests and filters are that Jinja tests are used for comparisons, whereas filters are used for data manipulation, and have different applications in jinja. Tests can also be used in list processing filters, like ``map()`` and ``select()`` to choose items in the list." msgstr "テストã¨ãƒ•ィルターã®ä¸»ãªé•ã„ã¯ã€Jinja ã®ãƒ†ã‚¹ãƒˆã¯æ¯”較ã«ä½¿ç”¨ã•れるã®ã«å¯¾ã—ã€ãƒ•ィルターã¯ãƒ‡ãƒ¼ã‚¿æ“作ã«ä½¿ç”¨ã•れã€Jinja ã§ã¯ç”¨é€”ãŒç•°ãªã‚Šã¾ã™ã€‚テストã¯ã€``map()`` ã‚„ ``select()`` ã®ã‚ˆã†ã«ã€ãƒªã‚¹ãƒˆå†…ã®é …ç›®ã‚’é¸æŠžã™ã‚‹ãƒªã‚¹ãƒˆå‡¦ç†ãƒ•ィルターã«ã‚‚使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:11 msgid "Like all templating, tests always execute on the Ansible controller, **not** on the target of a task, as they test local data." msgstr "ã™ã¹ã¦ã®ãƒ†ãƒ³ãƒ—レートã¨åŒæ§˜ã€ãƒ†ã‚¹ãƒˆã¯å¸¸ã«ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‡ãƒ¼ã‚¿ã‚’テストã™ã‚‹éš›ã«ã‚¿ã‚¹ã‚¯ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã¯ **ãªã**ã€Ansible コントローラーã§å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:13 msgid "In addition to those Jinja2 tests, Ansible supplies a few more and users can easily create their own." msgstr "ã“ã®ã‚ˆã†ãª Jinja2 テストã«åŠ ãˆã¦ã€Ansible ã¯ã‚ˆã‚Šå¤šãã®ã‚‚ã®ã‚’æä¾›ã—ã¦ãŠã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ç‹¬è‡ªã®ãƒ†ã‚¹ãƒˆã‚’ç°¡å˜ã«ä½œæˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:21 msgid "Test syntax" msgstr "ãƒ†ã‚¹ãƒˆã®æ§‹æ–‡" #: ../../rst/user_guide/playbooks_tests.rst:23 msgid "`Test syntax `_ varies from `filter syntax `_ (``variable | filter``). Historically Ansible has registered tests as both jinja tests and jinja filters, allowing for them to be referenced using filter syntax." msgstr "`Test syntax ` ã¯ã€`filter syntax `_ (``variable | filter``) ã¨ç•°ãªã‚Šã¾ã™ã€‚ã“れã¾ã§ Ansible ã¯ã€ãƒ†ã‚¹ãƒˆã‚’ jinja テスト㨠jinja フィルターã®ä¸¡æ–¹ã«ç™»éŒ²ã—ã€filter 構文を使用ã—ã¦å‚ç…§ã§ãるよã†ã«ã—ã¦ãã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_tests.rst:25 msgid "As of Ansible 2.5, using a jinja test as a filter will generate a warning." msgstr "Ansible 2.5 ã®æ™‚点ã§ã¯ã€jinja テストをフィルターã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã¨è­¦å‘ŠãŒç”Ÿæˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:27 msgid "The syntax for using a jinja test is as follows::" msgstr "jinja テストを使用ã™ã‚‹ãŸã‚ã®æ§‹æ–‡ã¯ã€ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:31 msgid "Such as::" msgstr "例::" #: ../../rst/user_guide/playbooks_tests.rst:38 msgid "Testing strings" msgstr "文字列ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:40 msgid "To match strings against a substring or a regular expression, use the ``match``, ``search`` or ``regex`` tests::" msgstr "サブ文字列ã¾ãŸã¯æ­£è¦è¡¨ç¾ã«å¯¾ã—ã¦æ–‡å­—列ã¨ä¸€è‡´ã•ã›ã‚‹ã«ã¯ã€ã€Œ``match``ã€ã€ã€Œ``search``ã€ã€ã¾ãŸã¯ã€Œ``regex``ã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:62 msgid "``match`` succeeds if it finds the pattern at the beginning of the string, while ``search`` succeeds if it finds the pattern anywhere within string. By default, ``regex`` works like ``search``, but ``regex`` can be configured to perform other tests as well, by passing the ``match_type`` keyword argument. In particular, ``match_type`` determines the ``re`` method that gets used to perform the search. The full list can be found in the relevant Python documentation `here `_." msgstr "``match`` ã¯ã€æ–‡å­—列ã®å…ˆé ­ã§ãƒ‘ターンを見ã¤ã‘ãŸå ´åˆã«æˆåŠŸã—ã€``search`` ã¯ã€æ–‡å­—列内ã®ä»»æ„ã®å ´æ‰€ã§ãƒ‘ターンを見ã¤ã‘ãŸå ´åˆã«æˆåŠŸã—ã¾ã™ã€‚デフォルトã§ã¯ã€``regex`` 㯠``search`` ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ãŒã€``regex`` 㯠``match_type`` キーワード引数を渡ã™ã“ã¨ã§ã€ä»–ã®ãƒ†ã‚¹ãƒˆã‚‚実行ã™ã‚‹ã‚ˆã†ã«æ§‹æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚特ã«ã€``match_type`` ã¯ã€æ¤œç´¢ã‚’実行ã™ã‚‹éš›ã«ä½¿ç”¨ã•れる ``re`` メソッドを決定ã—ã¾ã™ã€‚完全ãªãƒªã‚¹ãƒˆã¯ã€`ã“ã¡ã‚‰ `_ ã«ã‚る関連 Python ドキュメントをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tests.rst:64 msgid "All of the string tests also take optional ``ignorecase`` and ``multiline`` arguments. These correspond to ``re.I`` and ``re.M`` from Python's ``re`` library, respectively." msgstr "ã™ã¹ã¦ã®æ–‡å­—列テストã¯ã€ä»»æ„ã® ``ignorecase`` 引数ãŠã‚ˆã³ ``multiline`` 引数をå–りã¾ã™ã€‚ã“れらã¯ã€Python ã® ``re`` ライブラリーã‹ã‚‰ãれãžã‚Œ ``re.I`` ãŠã‚ˆã³ ``re.M`` ã«å¯¾å¿œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:69 msgid "Vault" msgstr "Vault" #: ../../rst/user_guide/playbooks_tests.rst:73 msgid "You can test whether a variable is an inline single vault encrypted value using the ``vault_encrypted`` test." msgstr "変数ãŒã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã® 1 ã¤ã® vault ã§æš—å·åŒ–ã•れãŸå€¤ã§ã‚ã‚‹ã‹ã©ã†ã‹ã¯ã€``vault_encrypted`` テストã§ãƒ†ã‚¹ãƒˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:93 msgid "Testing truthiness" msgstr "真å½ã®æ¤œè¨¼" #: ../../rst/user_guide/playbooks_tests.rst:97 msgid "As of Ansible 2.10, you can now perform Python like truthy and falsy checks." msgstr "Ansible 2.10 以é™ã§ã¯ã€Python を真å½ãƒã‚§ãƒƒã‚¯ã®ã‚ˆã†ã«å®Ÿè¡Œã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_tests.rst:113 msgid "Additionally, the ``truthy`` and ``falsy`` tests accept an optional parameter called ``convert_bool`` that will attempt to convert boolean indicators to actual booleans." msgstr "ã¾ãŸã€``truthy`` テストãŠã‚ˆã³ ``falsy`` テストã¯ã€ãƒ–ール値インジケーターを実際ã®ãƒ–ール値ã«å¤‰æ›ã—よã†ã¨ã™ã‚‹ ``convert_bool`` ã¨å‘¼ã°ã‚Œã‚‹ä»»æ„ã®ãƒ‘ラメーターをå—ã‘入れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:133 msgid "Comparing versions" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æ¯”較" #: ../../rst/user_guide/playbooks_tests.rst:137 msgid "In 2.5 ``version_compare`` was renamed to ``version``" msgstr "2.5 ã§ã¯ã€``version_compare`` ã®åå‰ãŒ ``version`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_tests.rst:139 msgid "To compare a version number, such as checking if the ``ansible_facts['distribution_version']`` version is greater than or equal to '12.04', you can use the ``version`` test." msgstr "``ansible_facts['distribution_version']`` ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã€Œ12.04ã€ä»¥ä¸Šã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ãªã©ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’比較ã™ã‚‹ã«ã¯ã€``version`` テストを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:142 msgid "The ``version`` test can also be used to evaluate the ``ansible_facts['distribution_version']``::" msgstr "``version`` テストを使用ã—㦠``ansible_facts['distribution_version']`` を評価ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:146 msgid "If ``ansible_facts['distribution_version']`` is greater than or equal to 12.04, this test returns True, otherwise False." msgstr "``ansible_facts['distribution_version']`` ㌠12.04 以上ã®å ´åˆã¯ã€ã“ã®ãƒ†ã‚¹ãƒˆã§ True ãŒè¿”りã€ãれ以外ã®å ´åˆã¯ False ãŒè¿”りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:148 msgid "The ``version`` test accepts the following operators::" msgstr "``version`` テストã§ã¯ã€ä»¥ä¸‹ã®æ¼”ç®—å­ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:152 msgid "This test also accepts a 3rd parameter, ``strict`` which defines if strict version parsing as defined by ``distutils.version.StrictVersion`` should be used. The default is ``False`` (using ``distutils.version.LooseVersion``), ``True`` enables strict version parsing::" msgstr "ã“ã®ãƒ†ã‚¹ãƒˆã¯ã€3 番目ã®ãƒ‘ラメーター ``strict`` ã‚‚å—ã‘入れã¾ã™ã€‚ã“れã¯ã€``distutils.version.StrictVersion`` ã§å®šç¾©ã•れãŸåŽ³æ ¼ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³è§£æžæ©Ÿèƒ½ã‚’使用ã§ãã¾ã™ã€‚デフォルト㯠``False`` (``distutils.version.LooseVersion`` を使用) ã§ã€``True`` ã¯ã€åŽ³æ ¼ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³è§£æžã‚’有効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:156 msgid "As of Ansible 2.11 the ``version`` test accepts a ``version_type`` parameter which is mutually exclusive with ``strict``, and accepts the following values::" msgstr "Ansible 2.11 ã®æ™‚点ã§ã€``version`` テスト㯠``strict`` ã¨ç›¸äº’ã«æŽ’ä»–çš„ãª ``version_type`` パラメーターをå—ã‘入れã€ä»¥ä¸‹ã®å€¤ã‚’å—ã‘入れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:160 msgid "Using ``version_type`` to compare a semantic version would be achieved like the following::" msgstr "``version_type`` を使用ã—ã¦ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’比較ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å®Ÿè¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:164 msgid "When using ``version`` in a playbook or role, don't use ``{{ }}`` as described in the `FAQ `_::" msgstr "Playbook ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã§ ``version`` を使用ã™ã‚‹å ´åˆã¯ã€`FAQ `_ ã§èª¬æ˜Žã•れã¦ã„るよã†ã« ``{{ }}`` を使用ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/playbooks_tests.rst:177 msgid "Set theory tests" msgstr "セットç†è«–テスト" #: ../../rst/user_guide/playbooks_tests.rst:181 msgid "In 2.5 ``issubset`` and ``issuperset`` were renamed to ``subset`` and ``superset``" msgstr "2.5 ã§ã¯ã€``issubset`` ãŠã‚ˆã³ ``issuperset`` ã®åå‰ãŒ ``subset`` ãŠã‚ˆã³ ``superset`` ã«å¤‰æ›´ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_tests.rst:183 msgid "To see if a list includes or is included by another list, you can use 'subset' and 'superset'::" msgstr "リストã«åˆ¥ã®ãƒªã‚¹ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã€ã¾ãŸã¯ãƒªã‚¹ãƒˆãŒåˆ¥ã®ãƒªã‚¹ãƒˆã«å«ã¾ã‚Œã¦ã„ã‚‹ã‹ã‚’確èªã™ã‚‹ã«ã¯ã€ã€Œsubsetã€ãŠã‚ˆã³ã€Œsupersetã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:200 msgid "Testing if a list contains a value" msgstr "リストã«å€¤ãŒå«ã¾ã‚Œã‚‹ã‹ã©ã†ã‹ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:204 msgid "Ansible includes a ``contains`` test which operates similarly, but in reverse of the Jinja2 provided ``in`` test. The ``contains`` test is designed to work with the ``select``, ``reject``, ``selectattr``, and ``rejectattr`` filters::" msgstr "Ansible ã«ã¯ã€Jinja2 ãŒæä¾›ã™ã‚‹ ``in`` テストã¨ã¯é€†ã«ã€åŒæ§˜ã®å‹•作をã™ã‚‹ ``contains`` テストãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``contains`` テストã¯ã€ãƒ•ィルター㮠``select``ã€``reject``ã€``selectattr``ã€ãŠã‚ˆã³ ``rejectattr`` ã§å‹•作ã™ã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:236 msgid "Testing if a list value is True" msgstr "リスト値㌠True ã®å ´åˆã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:238 msgid "You can use `any` and `all` to check if any or all elements in a list are true or not::" msgstr "`any` ãŠã‚ˆã³ `all` を使用ã—ã¦ã€ãƒªã‚¹ãƒˆå†…ã®ä¸€éƒ¨ã¾ãŸã¯ã™ã¹ã¦ã®è¦ç´ ãŒ true ã‹ã©ã†ã‹ã‚’確èªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:261 msgid "Testing paths" msgstr "パスã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:263 msgid "In 2.5 the following tests were renamed to remove the ``is_`` prefix" msgstr "2.5 ã§ã¯ã€ä»¥ä¸‹ã®ãƒ†ã‚¹ãƒˆã®åå‰ãŒå¤‰æ›´ã«ãªã‚Šã€``is_`` プレフィックスãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/playbooks_tests.rst:265 msgid "The following tests can provide information about a path on the controller::" msgstr "以下ã®ãƒ†ã‚¹ãƒˆã¯ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ä¸Šã®ãƒ‘スã«é–¢ã™ã‚‹æƒ…報をæä¾›ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:296 msgid "Testing size formats" msgstr "サイズ形å¼ã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:298 msgid "The ``human_readable`` and ``human_to_bytes`` functions let you test your playbooks to make sure you are using the right size format in your tasks, and that you provide Byte format to computers and human-readable format to people." msgstr "``human_readable`` 関数ãŠã‚ˆã³ ``human_to_bytes`` 関数を使用ã™ã‚‹ã¨ã€Playbook をテストã—ã¦ã€ã‚¿ã‚¹ã‚¯ã§é©åˆ‡ãªã‚µã‚¤ã‚ºã®å½¢å¼ã‚’使用ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã€ã¾ãŸã€ã‚³ãƒ³ãƒ”ューターã«ã¯ãƒã‚¤ãƒˆå½¢å¼ã€ãŠã‚ˆã³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯äººé–“ãŒåˆ¤èª­å¯èƒ½ãªå½¢å¼ã‚’æä¾›ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:303 msgid "Human readable" msgstr "人間ãŒèª­ã¿å–りå¯èƒ½" #: ../../rst/user_guide/playbooks_tests.rst:305 msgid "Asserts whether the given string is human readable or not." msgstr "æŒ‡å®šã®æ–‡å­—列ãŒäººãŒåˆ¤èª­ã§ãã‚‹ã‹ã©ã†ã‹ã‚’アサートã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:324 msgid "Human to bytes" msgstr "人間ã‹ã‚‰ãƒã‚¤ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:326 msgid "Returns the given string in the Bytes format." msgstr "指定ã—ãŸæ–‡å­—列をãƒã‚¤ãƒˆå½¢å¼ã§è¿”ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:350 msgid "Testing task results" msgstr "ã‚¿ã‚¹ã‚¯çµæžœã®ãƒ†ã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_tests.rst:352 msgid "The following tasks are illustrative of the tests meant to check the status of tasks::" msgstr "以下ã®ã‚¿ã‚¹ã‚¯ã¯ã€ã‚¿ã‚¹ã‚¯ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹ãŸã‚ã®ãƒ†ã‚¹ãƒˆã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_tests.rst:381 msgid "From 2.1, you can also use success, failure, change, and skip so that the grammar matches, for those who need to be strict about it." msgstr "2.1 以é™ã€æ–‡æ³•を厳密ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã€successã€failureã€changeã€ãŠã‚ˆã³ skip を使用ã—ã¦ã€æ–‡æ³•ãŒä¸€è‡´ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:5 msgid "Using Variables" msgstr "変数ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_variables.rst:7 msgid "Ansible uses variables to manage differences between systems. With Ansible, you can execute tasks and playbooks on multiple different systems with a single command. To represent the variations among those different systems, you can create variables with standard YAML syntax, including lists and dictionaries. You can define these variables in your playbooks, in your :ref:`inventory `, in re-usable :ref:`files ` or :ref:`roles `, or at the command line. You can also create variables during a playbook run by registering the return value or values of a task as a new variable." msgstr "Ansible ã¯å¤‰æ•°ã‚’使用ã—ã¦ã‚·ã‚¹ãƒ†ãƒ é–“ã®é•ã„を管ç†ã—ã¾ã™ã€‚Ansible ã§ã¯ã€1 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¤‡æ•°ã®ç•°ãªã‚‹ã‚·ã‚¹ãƒ†ãƒ ä¸Šã§ã‚¿ã‚¹ã‚¯ã‚„ Playbook を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ç•°ãªã‚‹ã‚·ã‚¹ãƒ†ãƒ é–“ã®å·®ç•°ã‚’表ç¾ã™ã‚‹ãŸã‚ã«ã€ãƒªã‚¹ãƒˆã‚„ディクショナリーãªã©ã®æ¨™æº–的㪠YAML æ§‹æ–‡ã§å¤‰æ•°ã‚’作æˆã§ãã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¯ã€Playbookã€:ref:`インベントリー `ã€å†åˆ©ç”¨å¯èƒ½ãª :ref:`ファイル `ã€ã¾ãŸã¯ :ref:`ロール `ã€ã‚‚ã—ãã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§å®šç¾©ã§ãã¾ã™ã€‚ã¾ãŸã€ã‚¿ã‚¹ã‚¯ã®æˆ»ã‚Šå€¤ã‚’æ–°ã—ã„変数ã¨ã—ã¦ç™»éŒ²ã™ã‚‹ã“ã¨ã§ã€Playbook ã®å®Ÿè¡Œä¸­ã«å¤‰æ•°ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:9 msgid "After you create variables, either by defining them in a file, passing them at the command line, or registering the return value or values of a task as a new variable, you can use those variables in module arguments, in :ref:`conditional \"when\" statements `, in :ref:`templates `, and in :ref:`loops `. The `ansible-examples github repository `_ contains many examples of using variables in Ansible." msgstr "ファイルã§å®šç¾©ã—ãŸã‚Šã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¸¡ã—ãŸã‚Šã€ã‚¿ã‚¹ã‚¯ã®æˆ»ã‚Šå€¤ã‚’æ–°ã—ã„変数ã¨ã—ã¦ç™»éŒ²ã—ãŸã‚Šã—ã¦å¤‰æ•°ã‚’作æˆã—ãŸå¾Œã¯ã€ãã®å¤‰æ•°ã‚’モジュールã®å¼•æ•°ã€:ref:`æ¡ä»¶åˆ†å²ã®ã€Œwhenã€æ–‡ `ã€:ref:`テンプレート `ã€ãŠã‚ˆã³ :ref:`ループ ` ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`ansible-examples github リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã«ã¯ã€Ansible ã§ã®å¤‰æ•°ã®ä½¿ç”¨ä¾‹ãŒå¤šæ•°æŽ²è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:11 msgid "Once you understand the concepts and examples on this page, read about :ref:`Ansible facts `, which are variables you retrieve from remote systems." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®æ¦‚念ã¨ä¾‹ã‚’ç†è§£ã—ãŸã‚‰ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰å–å¾—ã™ã‚‹å¤‰æ•°ã§ã‚ã‚‹ :ref:`Ansible ファクト ` を確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:19 msgid "Creating valid variable names" msgstr "有効ãªå¤‰æ•°åã®ä½œæˆ" #: ../../rst/user_guide/playbooks_variables.rst:21 msgid "Not all strings are valid Ansible variable names. A variable name can only include letters, numbers, and underscores. `Python keywords`_ or :ref:`playbook keywords` are not valid variable names. A variable name cannot begin with a number." msgstr "ã™ã¹ã¦ã®æ–‡å­—åˆ—ãŒæœ‰åŠ¹ãª Ansible ã®å¤‰æ•°åã«ãªã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。変数åã«ã¯ã€æ–‡å­—ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã®ã¿ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`Python キーワード`_ ã¾ãŸã¯ :ref:`playbook キーワード` ã¯æœ‰åйãªå¤‰æ•°åã§ã¯ã‚りã¾ã›ã‚“。変数åã¯ã€æ•°å­—ã§å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_variables.rst:23 msgid "Variable names can begin with an underscore. In many programming languages, variables that begin with an underscore are private. This is not true in Ansible. Variables that begin with an underscore are treated exactly the same as any other variable. Do not rely on this convention for privacy or security." msgstr "変数åã¯ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã§å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚多ãã®ãƒ—ログラミング言語ã§ã¯ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã§å§‹ã¾ã‚‹å¤‰æ•°ã¯ãƒ—ライベートã§ã™ã€‚Ansible ã§ã¯ã“れã¯å½“ã¦ã¯ã¾ã‚Šã¾ã›ã‚“。アンダースコアã§å§‹ã¾ã‚‹å¤‰æ•°ã¯ã€ä»–ã®å¤‰æ•°ã¨ã¾ã£ãŸãåŒã˜ã‚ˆã†ã«æ‰±ã‚れã¾ã™ã€‚プライãƒã‚·ãƒ¼ã‚„セキュリティーã®ãŸã‚ã«ã€ã“ã®è¦ç´„ã«ä¾å­˜ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:25 msgid "This table gives examples of valid and invalid variable names:" msgstr "ã“ã®è¡¨ã¯ã€æœ‰åйã‹ã¤ç„¡åйãªå¤‰æ•°åã®ä¾‹ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:31 msgid "Valid variable names" msgstr "有効ãªå¤‰æ•°å" #: ../../rst/user_guide/playbooks_variables.rst:31 msgid "Not valid" msgstr "有効ã§ã¯ãªã„" #: ../../rst/user_guide/playbooks_variables.rst:33 msgid "``foo``" msgstr "``foo``" #: ../../rst/user_guide/playbooks_variables.rst:33 msgid "``*foo``, `Python keywords`_ such as ``async`` and ``lambda``" msgstr "``*foo``ã€`Python キーワード`_ (``async``ã€``lambda`` ãªã©)" #: ../../rst/user_guide/playbooks_variables.rst:35 msgid "``foo_env``" msgstr "``foo_env``" #: ../../rst/user_guide/playbooks_variables.rst:35 msgid ":ref:`playbook keywords` such as ``environment``" msgstr "``environment`` ãªã©ã® :ref:`playbook キーワード`" #: ../../rst/user_guide/playbooks_variables.rst:37 msgid "``foo_port``" msgstr "``foo_port``" #: ../../rst/user_guide/playbooks_variables.rst:37 msgid "``foo-port``, ``foo port``, ``foo.port``" msgstr "``foo-port``ã€``foo port``ã€``foo.port``" #: ../../rst/user_guide/playbooks_variables.rst:39 msgid "``foo5``, ``_foo``" msgstr "``foo5``ã€``_foo``" #: ../../rst/user_guide/playbooks_variables.rst:39 msgid "``5foo``, ``12``" msgstr "``5foo``ã€``12``" #: ../../rst/user_guide/playbooks_variables.rst:45 msgid "Simple variables" msgstr "å˜ç´”ãªå¤‰æ•°" #: ../../rst/user_guide/playbooks_variables.rst:47 msgid "Simple variables combine a variable name with a single value. You can use this syntax (and the syntax for lists and dictionaries shown below) in a variety of places. For details about setting variables in inventory, in playbooks, in reusable files, in roles, or at the command line, see :ref:`setting_variables`." msgstr "å˜ç´”変数ã¯ã€å¤‰æ•°å㨠1 ã¤ã®å€¤ã‚’組ã¿åˆã‚ã›ãŸã‚‚ã®ã§ã™ã€‚ã“ã®æ§‹æ–‡ (ãŠã‚ˆã³å¾Œè¿°ã®ãƒªã‚¹ãƒˆã‚„ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®æ§‹æ–‡) ã¯ã€ã•ã¾ã–ã¾ãªå ´æ‰€ã§ä½¿ç”¨ã§ãã¾ã™ã€‚インベントリーã€Playbookã€å†åˆ©ç”¨å¯èƒ½ãªãƒ•ァイルã€ãƒ­ãƒ¼ãƒ«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã®å¤‰æ•°è¨­å®šã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`setting_variables`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:50 msgid "Defining simple variables" msgstr "ç°¡å˜ãªå¤‰æ•°ã®å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:52 msgid "You can define a simple variable using standard YAML syntax. For example::" msgstr "標準㮠YAML 構文を使用ã—ã¦å˜ç´”ãªå¤‰æ•°ã‚’定義ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:57 msgid "Referencing simple variables" msgstr "å˜ç´”ãªå¤‰æ•°ã®å‚ç…§" #: ../../rst/user_guide/playbooks_variables.rst:59 msgid "After you define a variable, use Jinja2 syntax to reference it. Jinja2 variables use double curly braces. For example, the expression ``My amp goes to {{ max_amp_value }}`` demonstrates the most basic form of variable substitution. You can use Jinja2 syntax in playbooks. For example::" msgstr "変数を定義ã—ãŸå¾Œã¯ã€Jinja2 ã®æ§‹æ–‡ã‚’使用ã—ã¦å¤‰æ•°ã‚’å‚ç…§ã—ã¾ã™ã€‚Jinja2 ã®å¤‰æ•°ã«ã¯äºŒé‡ã®ä¸­æ‹¬å¼§ãŒä½¿ç”¨ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€``My amp goes to {{ max_amp_value }}`` ã¨ã„ã†å¼ã¯ã€æœ€ã‚‚基本的ãªå½¢ã®å¤‰æ•°ç½®æ›ã‚’示ã—ã¦ã„ã¾ã™ã€‚Playbook ã§ã¯ã€Jinja2 構文を使用ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:65 msgid "In this example, the variable defines the location of a file, which can vary from one system to another." msgstr "ã“ã®ä¾‹ã§ã¯ã€å¤‰æ•°ãŒãƒ•ァイルã®å ´æ‰€ã‚’定義ã—ã¦ã„ã¾ã™ãŒã€ã“れã¯ã‚·ã‚¹ãƒ†ãƒ ã”ã¨ã«ç•°ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:69 msgid "Ansible allows Jinja2 loops and conditionals in :ref:`templates ` but not in playbooks. You cannot create a loop of tasks. Ansible playbooks are pure machine-parseable YAML." msgstr "Ansible ã§ã¯ã€:ref:`テンプレート ` ã§ Jinja2 ã®ãƒ«ãƒ¼ãƒ—ã‚„æ¡ä»¶åˆ†å²ã‚’使用ã§ãã¾ã™ãŒã€Playbook ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。タスクã®ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。Ansible ã® Playbook ã¯ç´”ç²‹ã«æ©Ÿæ¢°ã§è§£æžå¯èƒ½ãª YAML ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:74 msgid "When to quote variables (a YAML gotcha)" msgstr "変数を引用ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚° (YAML ã«é–¢ã™ã‚‹æ³¨æ„点)" #: ../../rst/user_guide/playbooks_variables.rst:76 msgid "If you start a value with ``{{ foo }}``, you must quote the whole expression to create valid YAML syntax. If you do not quote the whole expression, the YAML parser cannot interpret the syntax - it might be a variable or it might be the start of a YAML dictionary. For guidance on writing YAML, see the :ref:`yaml_syntax` documentation." msgstr "値を ``{{ foo }}`` ã§å§‹ã‚ãŸå ´åˆã€æœ‰åŠ¹ãª YAML 構文を作æˆã™ã‚‹ãŸã‚ã«ã¯å¼å…¨ä½“を引用ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。å¼å…¨ä½“を引用符ã§å›²ã¾ãªã„ã¨ã€YAML パーサーã¯ãã®æ§‹æ–‡ã‚’解釈ã§ãã¾ã›ã‚“。ãれã¯å¤‰æ•°ã‹ã‚‚ã—れãªã„ã—ã€YAML ディレクトリーã®å§‹ã¾ã‚Šã‹ã‚‚ã—れã¾ã›ã‚“。YAML ã®è¨˜è¿°æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`yaml_syntax`ã€ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:78 msgid "If you use a variable without quotes like this::" msgstr "引用符ãªã—ã®å¤‰æ•°ã‚’使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:84 msgid "You will see: ``ERROR! Syntax Error while loading YAML.`` If you add quotes, Ansible works correctly::" msgstr "``ERROR! Syntax Error while loading YAML.`` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。引用符を追加ã™ã‚‹ã¨ã€Ansible ãŒæ­£å¸¸ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:93 msgid "List variables" msgstr "リスト変数" #: ../../rst/user_guide/playbooks_variables.rst:95 msgid "A list variable combines a variable name with multiple values. The multiple values can be stored as an itemized list or in square brackets ``[]``, separated with commas." msgstr "リスト変数ã¯ã€å¤‰æ•°åã¨è¤‡æ•°ã®å€¤ã‚’組ã¿åˆã‚ã›ãŸã‚‚ã®ã§ã™ã€‚複数ã®å€¤ã¯ã€é …目別ã®ãƒªã‚¹ãƒˆã¨ã—ã¦ã€ã¾ãŸã¯è§’括弧 ``[]`` ã®ä¸­ã«ã‚³ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦æ ¼ç´ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:98 msgid "Defining variables as lists" msgstr "変数をリストã¨ã—ã¦å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:100 msgid "You can define variables with multiple values using YAML lists. For example::" msgstr "YAML リストを使用ã—ã¦ã€è¤‡æ•°ã®å€¤ã§å¤‰æ•°ã‚’定義ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:108 msgid "Referencing list variables" msgstr "リスト変数ã®å‚ç…§" #: ../../rst/user_guide/playbooks_variables.rst:110 msgid "When you use variables defined as a list (also called an array), you can use individual, specific fields from that list. The first item in a list is item 0, the second item is item 1. For example::" msgstr "リスト (é…列ã¨ã‚‚呼ã°ã‚Œã‚‹) ã¨ã—ã¦å®šç¾©ã•れãŸå¤‰æ•°ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãã®ãƒªã‚¹ãƒˆã‹ã‚‰å€‹ã€…ã®ç‰¹å®šã®ãƒ•ィールドを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒªã‚¹ãƒˆã®æœ€åˆã®é …ç›®ã¯é …ç›® 0ã€2 番目ã®é …ç›®ã¯é …ç›® 1 ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:114 msgid "The value of this expression would be \"northeast\"." msgstr "ã“ã®å¼ã®å€¤ã¯ã€Œnortheastã€ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:119 msgid "Dictionary variables" msgstr "ディクショナリー変数" #: ../../rst/user_guide/playbooks_variables.rst:121 msgid "A dictionary stores the data in key-value pairs. Usually, dictionaries are used to store related data, such as the information contained in an ID or a user profile." msgstr "ディクショナリーã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’キーã¨å€¤ã®ãƒšã‚¢ã«ä¿å­˜ã—ã¾ã™ã€‚通常ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã¯ ID ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ—ロファイルã«å«ã¾ã‚Œã‚‹æƒ…å ±ãªã©ã®é–¢é€£ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:124 msgid "Defining variables as key:value dictionaries" msgstr "変数を key:value ディクショナリーã¨ã—ã¦å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:126 msgid "You can define more complex variables using YAML dictionaries. A YAML dictionary maps keys to values. For example::" msgstr "YAML ディクショナリーを使用ã—ã¦ã‚ˆã‚Šè¤‡é›‘ãªå¤‰æ•°ã‚’定義ã§ãã¾ã™ã€‚YAML ディクショナリーã¯ã‚­ãƒ¼ã‚’値ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:133 msgid "Referencing key:value dictionary variables" msgstr "key:value ディクショナリー変数ã®å‚ç…§" #: ../../rst/user_guide/playbooks_variables.rst:135 msgid "When you use variables defined as a key:value dictionary (also called a hash), you can use individual, specific fields from that dictionary using either bracket notation or dot notation::" msgstr "key:value ディクショナリー (ãƒãƒƒã‚·ãƒ¥ã¨ã‚‚呼ã°ã‚Œã¾ã™) ã¨ã—ã¦å®šç¾©ã•れãŸå¤‰æ•°ã‚’使用ã™ã‚‹å ´åˆã¯ã€æ‹¬å¼§è¡¨è¨˜ã¾ãŸã¯ãƒ‰ãƒƒãƒˆè¡¨è¨˜ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ã€ãã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã®å€‹ã€…ã®ç‰¹å®šã®ãƒ•ィールドを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:140 msgid "Both of these examples reference the same value (\"one\"). Bracket notation always works. Dot notation can cause problems because some keys collide with attributes and methods of python dictionaries. Use bracket notation if you use keys which start and end with two underscores (which are reserved for special meanings in python) or are any of the known public attributes:" msgstr "ã“れらã®ä¾‹ã§ã¯ã€ã©ã¡ã‚‰ã‚‚åŒã˜å€¤ (「oneã€) ã‚’å‚ç…§ã—ã¦ã„ã¾ã™ã€‚括弧表記ã¯å¸¸ã«æœ‰åйã§ã™ã€‚ドット表記ã§ã¯ã€ä¸€éƒ¨ã®ã‚­ãƒ¼ãŒ python ディクショナリーã®å±žæ€§ã‚„メソッドã¨è¡çªã™ã‚‹ãŸã‚ã€å•題ãŒç”Ÿã˜ã¾ã™ã€‚2 ã¤ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã§å§‹ã¾ã£ã¦çµ‚ã‚るキー (python ã§ã¯ç‰¹åˆ¥ãªæ„味をæŒã¤ã‚‚ã®ã¨ã—ã¦äºˆç´„ã•れã¦ã„ã¾ã™) ã‚„ã€æ—¢çŸ¥ã®å…¬é–‹å±žæ€§ã‚’使用ã™ã‚‹å ´åˆã¯ã€æ‹¬å¼§è¡¨è¨˜ã‚’使用ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:142 msgid "``add``, ``append``, ``as_integer_ratio``, ``bit_length``, ``capitalize``, ``center``, ``clear``, ``conjugate``, ``copy``, ``count``, ``decode``, ``denominator``, ``difference``, ``difference_update``, ``discard``, ``encode``, ``endswith``, ``expandtabs``, ``extend``, ``find``, ``format``, ``fromhex``, ``fromkeys``, ``get``, ``has_key``, ``hex``, ``imag``, ``index``, ``insert``, ``intersection``, ``intersection_update``, ``isalnum``, ``isalpha``, ``isdecimal``, ``isdigit``, ``isdisjoint``, ``is_integer``, ``islower``, ``isnumeric``, ``isspace``, ``issubset``, ``issuperset``, ``istitle``, ``isupper``, ``items``, ``iteritems``, ``iterkeys``, ``itervalues``, ``join``, ``keys``, ``ljust``, ``lower``, ``lstrip``, ``numerator``, ``partition``, ``pop``, ``popitem``, ``real``, ``remove``, ``replace``, ``reverse``, ``rfind``, ``rindex``, ``rjust``, ``rpartition``, ``rsplit``, ``rstrip``, ``setdefault``, ``sort``, ``split``, ``splitlines``, ``startswith``, ``strip``, ``swapcase``, ``symmetric_difference``, ``symmetric_difference_update``, ``title``, ``translate``, ``union``, ``update``, ``upper``, ``values``, ``viewitems``, ``viewkeys``, ``viewvalues``, ``zfill``." msgstr "``add``ã€``append``ã€``as_integer_ratio``ã€``bit_length``ã€``capitalize``ã€``center``ã€``clear``ã€``conjugate``ã€``copy``ã€``count``ã€``decode``ã€``denominator``ã€``difference``ã€``difference_update``ã€``discard``ã€``encode``ã€``endswith``ã€``expandtabs``ã€``extend``ã€``find``ã€``format``ã€``fromhex``ã€``fromkeys``ã€``get``ã€``has_key``ã€``hex``ã€``imag``ã€``index``ã€``insert``ã€``intersection``ã€``intersection_update``ã€``isalnum``ã€``isalpha``ã€``isdecimal``ã€``isdigit``ã€``isdisjoint``ã€``is_integer``ã€``islower``ã€``isnumeric``ã€``isspace``ã€``issubset``ã€``issuperset``ã€``istitle``ã€``isupper``ã€``items``ã€``iteritems``ã€``iterkeys``ã€``itervalues``ã€``join``ã€``keys``ã€``ljust``ã€``lower``ã€``lstrip``ã€``numerator``ã€``partition``ã€``pop``ã€``popitem``ã€``real``ã€``remove``ã€``replace``ã€``reverse``ã€``rfind``ã€``rindex``ã€``rjust``ã€``rpartition``ã€``rsplit``ã€``rstrip``ã€``setdefault``ã€``sort``ã€``split``ã€``splitlines``ã€``startswith``ã€``strip``ã€``swapcase``ã€``symmetric_difference``ã€``symmetric_difference_update``ã€``title``ã€``translate``ã€``union``ã€``update``ã€``upper``ã€``values``ã€``viewitems``ã€``viewkeys``ã€``viewvalues``ã€``zfill``" #: ../../rst/user_guide/playbooks_variables.rst:147 msgid "Registering variables" msgstr "変数ã®ç™»éŒ²" #: ../../rst/user_guide/playbooks_variables.rst:149 msgid "You can create variables from the output of an Ansible task with the task keyword ``register``. You can use registered variables in any later tasks in your play. For example::" msgstr "タスクキーワード ``register`` を使用ã—ã¦ã€Ansible タスクã®å‡ºåŠ›ã‹ã‚‰å¤‰æ•°ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚登録ã—ãŸå¤‰æ•°ã¯ã€ãƒ—レイ中ã®å¾Œç¶šã®ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:164 msgid "For more examples of using registered variables in conditions on later tasks, see :ref:`playbooks_conditionals`. Registered variables may be simple variables, list variables, dictionary variables, or complex nested data structures. The documentation for each module includes a ``RETURN`` section describing the return values for that module. To see the values for a particular task, run your playbook with ``-v``." msgstr "登録ã•れãŸå¤‰æ•°ã‚’後ã®ã‚¿ã‚¹ã‚¯ã®æ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ä¾‹ã¯ã€ã€Œ:ref:`playbooks_conditionals`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。登録ã—ãŸå¤‰æ•°ã«ã¯ã€å˜ç´”ãªå¤‰æ•°ã€ãƒªã‚¹ãƒˆå¤‰æ•°ã€ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å¤‰æ•°ã€è¤‡é›‘ã«ãƒã‚¹ãƒˆã—ãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ãªã©ãŒã‚りã¾ã™ã€‚å„モジュールã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æˆ»ã‚Šå€¤ã‚’説明ã—㟠``RETURN`` セクションãŒã‚りã¾ã™ã€‚特定ã®ã‚¿ã‚¹ã‚¯ã®å€¤ã‚’確èªã™ã‚‹ã«ã¯ã€``-v`` ã§ Playbook を実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:166 msgid "Registered variables are stored in memory. You cannot cache registered variables for use in future plays. Registered variables are only valid on the host for the rest of the current playbook run." msgstr "登録ã•れãŸå¤‰æ•°ã¯ãƒ¡ãƒ¢ãƒªãƒ¼ã«ä¿å­˜ã•れã¾ã™ã€‚登録ã•れãŸå¤‰æ•°ã‚’å°†æ¥ã®ãƒ—レイã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。登録ã•れãŸå¤‰æ•°ã¯ã€ç¾åœ¨ã® Playbook ã®æ®‹ã‚Šã®å®Ÿè¡Œä¸­ã€ãƒ›ã‚¹ãƒˆä¸Šã§ã®ã¿æœ‰åйã§ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:168 msgid "Registered variables are host-level variables. When you register a variable in a task with a loop, the registered variable contains a value for each item in the loop. The data structure placed in the variable during the loop will contain a ``results`` attribute, that is a list of all responses from the module. For a more in-depth example of how this works, see the :ref:`playbooks_loops` section on using register with a loop." msgstr "登録ã•れãŸå¤‰æ•°ã¯ã€ãƒ›ã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ã®å¤‰æ•°ã§ã™ã€‚ループã®ã‚るタスクã§å¤‰æ•°ã‚’登録ã™ã‚‹ã¨ã€ç™»éŒ²ã•れãŸå¤‰æ•°ã«ã¯ãƒ«ãƒ¼ãƒ—内ã®å„é …ç›®ã®å€¤ãŒå…¥ã‚Šã¾ã™ã€‚ループ中ã«å¤‰æ•°ã«ç½®ã‹ã‚ŒãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã«ã¯ã€``results`` 属性ã€ã¤ã¾ã‚Šãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‹ã‚‰ã®å…¨å¿œç­”ã®ãƒªã‚¹ãƒˆãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®å‹•作ã®è©³ç´°ãªä¾‹ã«ã¤ã„ã¦ã¯ã€ãƒ«ãƒ¼ãƒ—ã§ç™»éŒ²ã®ä½¿ç”¨ã«é–¢ã™ã‚‹ã€Œ:ref:`playbooks_loops`ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:170 msgid "If a task fails or is skipped, Ansible still registers a variable with a failure or skipped status, unless the task is skipped based on tags. See :ref:`tags` for information on adding and using tags." msgstr "タスクãŒå¤±æ•—ã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã—ã¦ã‚‚ã€ã‚¿ã‚°ã«åŸºã¥ã„ã¦ã‚¿ã‚¹ã‚¯ãŒã‚¹ã‚­ãƒƒãƒ—ã•れã¦ã„ãªã„é™ã‚Šã€Ansible ã¯å¤±æ•—ã¾ãŸã¯ã‚¹ã‚­ãƒƒãƒ—ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã§å¤‰æ•°ã‚’登録ã—ã¾ã™ã€‚ã‚¿ã‚°ã®è¿½åŠ ãŠã‚ˆã³ä½¿ç”¨ã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€ã€Œ:ref:`tags`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:175 msgid "Referencing nested variables" msgstr "ãƒã‚¹ãƒˆã•れãŸå¤‰æ•°ã®å‚ç…§" #: ../../rst/user_guide/playbooks_variables.rst:177 msgid "Many registered variables (and :ref:`facts `) are nested YAML or JSON data structures. You cannot access values from these nested data structures with the simple ``{{ foo }}`` syntax. You must use either bracket notation or dot notation. For example, to reference an IP address from your facts using the bracket notation::" msgstr "多ãã®ç™»éŒ²ã•れãŸå¤‰æ•° (ãŠã‚ˆã³ :ref:`ファクト `) ã¯ã€ãƒã‚¹ãƒˆã•れ㟠YAML ã¾ãŸã¯ JSON データ構造ã§ã™ã€‚ã“れらã®ãƒã‚¹ãƒˆã—ãŸãƒ‡ãƒ¼ã‚¿æ§‹é€ ã®å€¤ã«ã¯ã€å˜ç´”㪠``{{ foo }}`` ã®æ§‹æ–‡ã§ã¯ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。括弧表記ã¾ãŸã¯ãƒ‰ãƒƒãƒˆè¡¨è¨˜ã®ã„ãšã‚Œã‹ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€æ‹¬å¼§è¡¨è¨˜ã‚’使用ã—ã¦ãƒ•ァクトã‹ã‚‰ IP アドレスをå‚ç…§ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:181 msgid "To reference an IP address from your facts using the dot notation::" msgstr "ドット表記を使用ã—ã¦ãƒ•ァクトã‹ã‚‰ IP アドレスをå‚ç…§ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:189 msgid "Transforming variables with Jinja2 filters" msgstr "Jinja2 フィルターを使用ã—ãŸå¤‰æ•°ã®å¤‰æ›" #: ../../rst/user_guide/playbooks_variables.rst:191 msgid "Jinja2 filters let you transform the value of a variable within a template expression. For example, the ``capitalize`` filter capitalizes any value passed to it; the ``to_yaml`` and ``to_json`` filters change the format of your variable values. Jinja2 includes many `built-in filters `_ and Ansible supplies many more filters. To find more examples of filters, see :ref:`playbooks_filters`." msgstr "Jinja2 ã®ãƒ•ィルターã¯ã€ãƒ†ãƒ³ãƒ—レートå¼å†…ã®å¤‰æ•°ã®å€¤ã‚’変æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``capitalize`` フィルターã¯ã€æ¸¡ã•れãŸå€¤ã‚’ã™ã¹ã¦å¤§æ–‡å­—ã«ã—ã¾ã™ã€‚``to_yaml`` フィルターãŠã‚ˆã³ ``to_json`` フィルターã¯ã€å¤‰æ•°ã®å€¤ã®å½¢å¼ã‚’変更ã—ã¾ã™ã€‚Jinja2 ã«ã¯å¤šãã® `built-in フィルター `_ ãŒã‚りã€Ansible ã«ã¯ã•らã«å¤šãã®ãƒ•ィルターãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚フィルターã®ãã®ä»–ã®ä¾‹ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`playbooks_filters`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:196 msgid "Where to set variables" msgstr "変数を設定ã™ã‚‹å ´æ‰€" #: ../../rst/user_guide/playbooks_variables.rst:198 msgid "You can define variables in a variety of places, such as in inventory, in playbooks, in reusable files, in roles, and at the command line. Ansible loads every possible variable it finds, then chooses the variable to apply based on :ref:`variable precedence rules `." msgstr "変数ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€Playbookã€å†åˆ©ç”¨å¯èƒ½ãƒ•ァイルã€ãƒ­ãƒ¼ãƒ«ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãªã©ã€ã•ã¾ã–ã¾ãªå ´æ‰€ã§å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€æ¤œå‡ºå¯èƒ½ãªã™ã¹ã¦ã®å¤‰æ•°ã‚’読ã¿è¾¼ã¿ã€:ref:`変数ã®å„ªå…ˆé †ä½ãƒ«ãƒ¼ãƒ« ` ã«åŸºã¥ã„ã¦é©ç”¨ã™ã‚‹å¤‰æ•°ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:203 msgid "Defining variables in inventory" msgstr "インベントリーã§ã®å¤‰æ•°ã®å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:205 msgid "You can define different variables for each individual host, or set shared variables for a group of hosts in your inventory. For example, if all machines in the ``[Boston]`` group use 'boston.ntp.example.com' as an NTP server, you can set a group variable. The :ref:`intro_inventory` page has details on setting :ref:`host variables ` and :ref:`group variables ` in inventory." msgstr "個々ã®ãƒ›ã‚¹ãƒˆã”ã¨ã«ç•°ãªã‚‹å¤‰æ•°ã‚’定義ã—ãŸã‚Šã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ãƒ›ã‚¹ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ã«å…±æœ‰å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``[Boston]`` グループã®ã™ã¹ã¦ã®ãƒžã‚·ãƒ³ãŒ NTP サーãƒãƒ¼ã¨ã—ã¦ã€Œboston.ntp.example.comã€ã‚’使用ã™ã‚‹å ´åˆã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—変数を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「:ref:`intro_inventory`〠ページã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§ :ref:`host 変数 ` ãŠã‚ˆã³ :ref:`group 変数 ` を設定ã™ã‚‹ãŸã‚ã®è©³ç´°ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:210 msgid "Defining variables in a play" msgstr "プレイã§ã®å¤‰æ•°ã®å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:212 msgid "You can define variables directly in a playbook play::" msgstr "変数㯠Playbook プレイã§ç›´æŽ¥å®šç¾©ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:218 msgid "When you define variables in a play, they are only visible to tasks executed in that play." msgstr "プレイã§å¤‰æ•°ã‚’定義ã™ã‚‹ã¨ã€ãã®ãƒ—レイã§å®Ÿè¡Œã—ã¦ã„るタスクã§ã®ã¿è¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:224 msgid "Defining variables in included files and roles" msgstr "インクルードファイルãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã§ã®å¤‰æ•°ã®å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:226 msgid "You can define variables in reusable variables files and/or in reusable roles. When you define variables in reusable variable files, the sensitive variables are separated from playbooks. This separation enables you to store your playbooks in a source control software and even share the playbooks, without the risk of exposing passwords or other sensitive and personal data. For information about creating reusable files and roles, see :ref:`playbooks_reuse`." msgstr "変数ã¯ã€å†åˆ©ç”¨å¯èƒ½ãªå¤‰æ•°ãƒ•ァイルやå†åˆ©ç”¨å¯èƒ½ãªãƒ­ãƒ¼ãƒ«ã«å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å†åˆ©ç”¨å¯èƒ½ãªå¤‰æ•°ãƒ•ァイルã«å¤‰æ•°ã‚’定義ã™ã‚‹ã¨ã€æ©Ÿå¯†æ€§ã®é«˜ã„変数㌠Playbook ã‹ã‚‰åˆ†é›¢ã•れã¾ã™ã€‚ã“ã®åˆ†é›¢ã«ã‚ˆã‚Šã€ãƒ‘スワードãªã©ã®æ©Ÿå¯†æƒ…報や個人情報をæµå‡ºã•ã›ã‚‹ã“ã¨ãªãã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚½ãƒ•トウェア㫠Playbook ã‚’ä¿å­˜ã—ãŸã‚Šã€Playbook を共有ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å†åˆ©ç”¨å¯èƒ½ãªãƒ•ァイルやロールã®ä½œæˆã¯ã€ã€Œ:ref:`playbooks_reuse`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:228 msgid "This example shows how you can include variables defined in an external file::" msgstr "ã“ã®ä¾‹ã¯ã€å¤–部ファイルã§å®šç¾©ã•れãŸå¤‰æ•°ã‚’追加ã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:244 msgid "The contents of each variables file is a simple YAML dictionary. For example::" msgstr "å„変数ファイルã®å†…容ã¯ã€å˜ç´”㪠YAML ディクショナリーã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:252 msgid "You can keep per-host and per-group variables in similar files. To learn about organizing your variables, see :ref:`splitting_out_vars`." msgstr "ホスト別ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—別ã®å¤‰æ•°ã‚’åŒæ§˜ã®ãƒ•ァイルã«ç¶­æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚変数を整ç†ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:257 msgid "Defining variables at runtime" msgstr "ランタイム時ã®å¤‰æ•°ã®å®šç¾©" #: ../../rst/user_guide/playbooks_variables.rst:259 msgid "You can define variables when you run your playbook by passing variables at the command line using the ``--extra-vars`` (or ``-e``) argument. You can also request user input with a ``vars_prompt`` (see :ref:`playbooks_prompts`). When you pass variables at the command line, use a single quoted string, that contains one or more variables, in one of the formats below." msgstr "Playbook ã®å®Ÿè¡Œæ™‚ã«å¤‰æ•°ã‚’定義ã™ã‚‹ã«ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ ``--extra-vars`` (ã¾ãŸã¯ ``-e``) 引数を使用ã—ã¦å¤‰æ•°ã‚’渡ã—ã¾ã™ã€‚ã¾ãŸã€``vars_prompt`` (:ref:`playbooks_prompts` å‚ç…§) ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å…¥åŠ›ã‚’è¦æ±‚ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚コマンドラインã§å¤‰æ•°ã‚’渡ã™ã¨ãã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®å½¢å¼ã§ã€1 ã¤ã¾ãŸã¯è¤‡æ•°ã®å¤‰æ•°ã‚’å«ã‚€ä¸€é‡å¼•用符ã§å›²ã¾ã‚ŒãŸæ–‡å­—列を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:262 msgid "key=value format" msgstr "key=value å½¢å¼" #: ../../rst/user_guide/playbooks_variables.rst:264 msgid "Values passed in using the ``key=value`` syntax are interpreted as strings. Use the JSON format if you need to pass non-string values such as Booleans, integers, floats, lists, and so on." msgstr "``key=value`` 構文を使用ã—ã¦æ¸¡ã•ã‚Œã‚‹å€¤ã¯æ–‡å­—列ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚ãƒ–ãƒ¼ãƒ«å€¤ã€æ•´æ•°ã€æµ®å‹•å°æ•°ç‚¹ã€ãƒªã‚¹ãƒˆãªã©ã€æ–‡å­—列以外ã®å€¤ã‚’渡ã™å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€JSON å½¢å¼ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:271 msgid "JSON string format" msgstr "JSON 文字列ã®å½¢å¼" #: ../../rst/user_guide/playbooks_variables.rst:278 msgid "When passing variables with ``--extra-vars``, you must escape quotes and other special characters appropriately for both your markup (for example, JSON), and for your shell::" msgstr "``--extra-vars`` ã§å¤‰æ•°ã‚’渡ã™å ´åˆã«ã¯ã€ãƒžãƒ¼ã‚¯ã‚¢ãƒƒãƒ— (JSON ãªã©) ã¨ã‚·ã‚§ãƒ«ã®ä¸¡æ–¹ã§ã€å¼•用符やãã®ä»–ã®ç‰¹æ®Šæ–‡å­—ã‚’é©åˆ‡ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:284 msgid "If you have a lot of special characters, use a JSON or YAML file containing the variable definitions." msgstr "特殊文字ãŒå¤šæ•°ã‚ã‚‹å ´åˆã¯ã€å¤‰æ•°å®šç¾©ã‚’å«ã‚€ JSON ファイルã¾ãŸã¯ YAML ファイルを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:287 msgid "vars from a JSON or YAML file" msgstr "JSON ファイルã¾ãŸã¯ YAML ファイルã®å¤‰æ•°" #: ../../rst/user_guide/playbooks_variables.rst:297 msgid "Variable precedence: Where should I put a variable?" msgstr "変数ã®å„ªå…ˆé †ä½: 変数をã©ã“ã«ç½®ãã¹ãã‹" #: ../../rst/user_guide/playbooks_variables.rst:299 msgid "You can set multiple variables with the same name in many different places. When you do this, Ansible loads every possible variable it finds, then chooses the variable to apply based on variable precedence. In other words, the different variables will override each other in a certain order." msgstr "åŒã˜åå‰ã®è¤‡æ•°ã®å¤‰æ•°ã‚’ã•ã¾ã–ã¾ãªå ´æ‰€ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れを行ã†ã¨ã€Ansible ã¯æ¤œå‡ºå¯èƒ½ãªã™ã¹ã¦ã®å¤‰æ•°ã‚’読ã¿è¾¼ã¿ã€æ¬¡ã«å¤‰æ•°ã®å„ªå…ˆé †ä½ã«åŸºã¥ã„ã¦é©ç”¨ã™ã‚‹å¤‰æ•°ã‚’é¸æŠžã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ç•°ãªã‚‹å¤‰æ•°ãŒä¸€å®šã®é †åºã§äº’ã„ã«ä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:301 msgid "Teams and projects that agree on guidelines for defining variables (where to define certain types of variables) usually avoid variable precedence concerns. We suggest that you define each variable in one place: figure out where to define a variable, and keep it simple. For examples, see :ref:`variable_examples`." msgstr "変数ã®å®šç¾©ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ (特定ã®ã‚¿ã‚¤ãƒ—ã®å¤‰æ•°ã‚’ã©ã“ã§å®šç¾©ã™ã‚‹ã‹) ã«åˆæ„ã—ãŸãƒãƒ¼ãƒ ã‚„プロジェクトã¯ã€é€šå¸¸ã€å¤‰æ•°ã®å„ªå…ˆé †ä½ã«é–¢ã™ã‚‹æ‡¸å¿µã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å„変数ã¯ã€ä¸€ç®‡æ‰€ã§å®šç¾©ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã©ã“ã§å¤‰æ•°ã‚’定義ã™ã‚‹ã‹ã‚’把æ¡ã—ã€ç°¡æ½”ã•ã‚’ä¿ã£ã¦ãã ã•ã„。例ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`variable_examples`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:303 msgid "Some behavioral parameters that you can set in variables you can also set in Ansible configuration, as command-line options, and using playbook keywords. For example, you can define the user Ansible uses to connect to remote devices as a variable with ``ansible_user``, in a configuration file with ``DEFAULT_REMOTE_USER``, as a command-line option with ``-u``, and with the playbook keyword ``remote_user``. If you define the same parameter in a variable and by another method, the variable overrides the other setting. This approach allows host-specific settings to override more general settings. For examples and more details on the precedence of these various settings, see :ref:`general_precedence_rules`." msgstr "変数ã§è¨­å®šã§ãる動作パラメーターã®ä¸­ã«ã¯ã€Ansible ã®æ§‹æˆã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã€ãŠã‚ˆã³ Playbook キーワードã§è¨­å®šã§ãã‚‹ã‚‚ã®ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible ãŒãƒªãƒ¢ãƒ¼ãƒˆãƒ‡ãƒã‚¤ã‚¹ã¸ã®æŽ¥ç¶šã«ä½¿ç”¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€å¤‰æ•°ã§ã¯ ``ansible_user``ã€æ§‹æˆãƒ•ァイルã§ã¯ ``DEFAULT_REMOTE_USER``ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã§ã¯ ``-u`` ã€Playbook キーワードã§ã¯ ``remote_user`` ã§å®šç¾©ã§ãã¾ã™ã€‚変数ã¨åˆ¥ã®æ–¹æ³•ã§åŒã˜ãƒ‘ラメーターを定義ã—ãŸå ´åˆã¯ã€å¤‰æ•°ãŒåˆ¥ã®è¨­å®šã‚’上書ãã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã§ã¯ã€ãƒ›ã‚¹ãƒˆå›ºæœ‰ã®è¨­å®šãŒã‚ˆã‚Šä¸€èˆ¬çš„ãªè¨­å®šã‚’上書ãã—ã¾ã™ã€‚ã“れらã®ã•ã¾ã–ã¾ãªè¨­å®šã®å„ªå…ˆé †ä½ã®ä¾‹ã‚„詳細ã¯ã€ã€Œ:ref:`general_precedence_rules`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:306 msgid "Understanding variable precedence" msgstr "変数ã®å„ªå…ˆé †ä½ã«ã¤ã„ã¦" #: ../../rst/user_guide/playbooks_variables.rst:308 msgid "Ansible does apply variable precedence, and you might have a use for it. Here is the order of precedence from least to greatest (the last listed variables override all other variables):" msgstr "Ansible ã§ã¯å¤‰æ•°ã®å„ªå…ˆé †ä½ã‚’é©ç”¨ã—ã¦ãŠã‚Šã€ãれを利用ã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ã“ã“ã§ã¯ã€å„ªå…ˆé †ä½ã®ä½Žã„ã‚‚ã®ã‹ã‚‰é«˜ã„ã‚‚ã®ã¾ã§ã‚’紹介ã—ã¾ã™ (æœ€å¾Œã«æŒ™ã’ãŸå¤‰æ•°ãŒä»–ã®ã™ã¹ã¦ã®å¤‰æ•°ã‚’上書ãã—ã¾ã™)。" #: ../../rst/user_guide/playbooks_variables.rst:310 msgid "command line values (for example, ``-u my_user``, these are not variables)" msgstr "コマンドラインã®å€¤ (例: ``-u my_user`` (ã“れらã¯å¤‰æ•°ã§ã¯ã‚りã¾ã›ã‚“))" #: ../../rst/user_guide/playbooks_variables.rst:311 msgid "role defaults (defined in role/defaults/main.yml) [1]_" msgstr "ロールã®ãƒ‡ãƒ•ォルト(role/defaults/main.yml ã§å®šç¾©) [1]_" #: ../../rst/user_guide/playbooks_variables.rst:312 msgid "inventory file or script group vars [2]_" msgstr "インベントリーファイルã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ—トã®ã‚°ãƒ«ãƒ¼ãƒ—変数 [2]_" #: ../../rst/user_guide/playbooks_variables.rst:313 msgid "inventory group_vars/all [3]_" msgstr "インベントリー group_vars/all [3]_" #: ../../rst/user_guide/playbooks_variables.rst:314 msgid "playbook group_vars/all [3]_" msgstr "playbook group_vars/all [3]_" #: ../../rst/user_guide/playbooks_variables.rst:315 msgid "inventory group_vars/* [3]_" msgstr "インベントリー group_vars/* [3]_" #: ../../rst/user_guide/playbooks_variables.rst:316 msgid "playbook group_vars/* [3]_" msgstr "playbook group_vars/* [3]_" #: ../../rst/user_guide/playbooks_variables.rst:317 msgid "inventory file or script host vars [2]_" msgstr "インベントリーファイルã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ—トホスト変数 [2]_" #: ../../rst/user_guide/playbooks_variables.rst:318 msgid "inventory host_vars/* [3]_" msgstr "インベントリー host_vars/* [3]_" #: ../../rst/user_guide/playbooks_variables.rst:319 msgid "playbook host_vars/* [3]_" msgstr "playbook host_vars/* [3]_" #: ../../rst/user_guide/playbooks_variables.rst:320 msgid "host facts / cached set_facts [4]_" msgstr "ホストファクト / キャッシュ済㿠set_facts [4]_" #: ../../rst/user_guide/playbooks_variables.rst:321 msgid "play vars" msgstr "プレイ変数" #: ../../rst/user_guide/playbooks_variables.rst:322 msgid "play vars_prompt" msgstr "play vars_prompt" #: ../../rst/user_guide/playbooks_variables.rst:323 msgid "play vars_files" msgstr "play vars_files" #: ../../rst/user_guide/playbooks_variables.rst:324 msgid "role vars (defined in role/vars/main.yml)" msgstr "role 変数 (role/vars/main.yml ã§å®šç¾©)" #: ../../rst/user_guide/playbooks_variables.rst:325 msgid "block vars (only for tasks in block)" msgstr "ブロック変数 (ブロックã®ã‚¿ã‚¹ã‚¯ã«ã®ã¿é©ç”¨)" #: ../../rst/user_guide/playbooks_variables.rst:326 msgid "task vars (only for the task)" msgstr "タスク変数 (タスク専用)" #: ../../rst/user_guide/playbooks_variables.rst:327 #: ../../rst/user_guide/windows_faq.rst:166 msgid "include_vars" msgstr "include_vars" #: ../../rst/user_guide/playbooks_variables.rst:328 msgid "set_facts / registered vars" msgstr "set_facts / 登録変数" #: ../../rst/user_guide/playbooks_variables.rst:329 msgid "role (and include_role) params" msgstr "role (ãŠã‚ˆã³ include_role) パラメーター" #: ../../rst/user_guide/playbooks_variables.rst:330 msgid "include params" msgstr "include パラメーター" #: ../../rst/user_guide/playbooks_variables.rst:331 msgid "extra vars (for example, ``-e \"user=my_user\"``)(always win precedence)" msgstr "追加ã®å¤‰æ•° (例: ``-e \"user=my_user\"``)(常ã«å„ªå…ˆã•れã¾ã™)" #: ../../rst/user_guide/playbooks_variables.rst:333 msgid "In general, Ansible gives precedence to variables that were defined more recently, more actively, and with more explicit scope. Variables in the defaults folder inside a role are easily overridden. Anything in the vars directory of the role overrides previous versions of that variable in the namespace. Host and/or inventory variables override role defaults, but explicit includes such as the vars directory or an ``include_vars`` task override inventory variables." msgstr "一般的ã«ã€Ansible ã¯ã€ã‚ˆã‚Šæ–°ã—ãã€ã‚ˆã‚Šç©æ¥µçš„ã«ã€ã‚ˆã‚Šæ˜Žç¢ºãªã‚¹ã‚³ãƒ¼ãƒ—ã§å®šç¾©ã•れãŸå¤‰æ•°ã‚’優先ã—ã¾ã™ã€‚ロール内㮠defaults フォルダーã«ã‚る変数ã¯ç°¡å˜ã«ä¸Šæ›¸ãã•れã¾ã™ã€‚ロール㮠vars ディレクトリーã«ã‚ã‚‹ã‚‚ã®ã¯ã€åå‰ç©ºé–“内ã®ãã®å¤‰æ•°ã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’上書ãã—ã¾ã™ã€‚ホストãŠã‚ˆã³/ã¾ãŸã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã¯ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトを上書ãã—ã¾ã™ãŒã€vars ディレクトリーや ``include_vars`` タスクãªã©ã®æ˜Žç¤ºçš„ãªã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:335 msgid "Ansible merges different variables set in inventory so that more specific settings override more generic settings. For example, ``ansible_ssh_user`` specified as a group_var is overridden by ``ansible_user`` specified as a host_var. For details about the precedence of variables set in inventory, see :ref:`how_we_merge`." msgstr "Ansible ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«è¨­å®šã—ãŸç•°ãªã‚‹å¤‰æ•°ã‚’マージã—ã¦ã€ã‚ˆã‚Šç‰¹å®šã®è¨­å®šãŒã‚ˆã‚Šä¸€èˆ¬çš„ãªè¨­å®šã‚’上書ãã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€group_var ã¨ã—ã¦æŒ‡å®šã—㟠``ansible_ssh_user`` ã¯ã€host_var ã¨ã—ã¦æŒ‡å®šã—㟠``ansible_user`` ã«ã‚ˆã‚Šä¸Šæ›¸ãã•れã¾ã™ã€‚インベントリーã§è¨­å®šã•れãŸå¤‰æ•°ã®å„ªå…ˆé †ä½ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`how_we_merge`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:338 msgid "Footnotes" msgstr "注記" #: ../../rst/user_guide/playbooks_variables.rst:339 msgid "Tasks in each role see their own role's defaults. Tasks defined outside of a role see the last role's defaults." msgstr "å„ロールã®ã‚¿ã‚¹ã‚¯ã«ã¯ã€ãれãžã‚Œã®ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルト値ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ロールã®å¤–ã§å®šç¾©ã•れãŸã‚¿ã‚¹ã‚¯ã«ã¯ã€æœ€å¾Œã®ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:340 msgid "Variables defined in inventory file or provided by dynamic inventory." msgstr "インベントリーファイルã§å®šç¾©ã•れる変数ã€ã¾ãŸã¯å‹•çš„ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§æŒ‡å®šã•れる変数。" #: ../../rst/user_guide/playbooks_variables.rst:341 msgid "Includes vars added by 'vars plugins' as well as host_vars and group_vars which are added by the default vars plugin shipped with Ansible." msgstr "「vars プラグインã€ã¨ã€Ansible ã«åŒæ¢±ã•れるデフォルト㮠vars プラグインã«ã‚ˆã‚Šè¿½åŠ ã•れる host_vars ãŠã‚ˆã³ group_vars ãŒå«ã¾ã‚Œã‚‹ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰å¤‰æ•°ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:342 msgid "When created with set_facts's cacheable option, variables have the high precedence in the play, but are the same as a host facts precedence when they come from the cache." msgstr "set_facts ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥å¯èƒ½ãªã‚ªãƒ—ションを使用ã—ã¦ä½œæˆã™ã‚‹ã¨ã€å¤‰æ•°ãŒãƒ—レイã«å„ªå…ˆã•れã¾ã™ãŒã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰ã®ãƒ›ã‚¹ãƒˆã®ãƒ•ァクトã¨åŒæ§˜ã«å„ªå…ˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:345 msgid "Within any section, redefining a var overrides the previous instance. If multiple groups have the same variable, the last one loaded wins. If you define a variable twice in a play's ``vars:`` section, the second one wins." msgstr "ã©ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã‚‚ã€å¤‰æ•°ã‚’å†å®šç¾©ã™ã‚‹ã¨å‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒä¸Šæ›¸ãã•れã¾ã™ã€‚複数ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒåŒã˜å¤‰æ•°ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€æœ€å¾Œã«èª­ã¿è¾¼ã¾ã‚ŒãŸã‚‚ã®ãŒå„ªå…ˆã•れã¾ã™ã€‚プレイ中㮠``vars:`` ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§å¤‰æ•°ã‚’ 2 回定義ã—ãŸå ´åˆã¯ã€2 回目ã®å¤‰æ•°ãŒå„ªå…ˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:348 msgid "The previous describes the default config ``hash_behaviour=replace``, switch to ``merge`` to only partially overwrite." msgstr "以å‰ã¯ã€ãƒ‡ãƒ•ォルトã®è¨­å®š ``hash_behaviour=replace`` を説明ã—ã€``merge`` ã«åˆ‡ã‚Šæ›¿ãˆã¦ã‚’部分的ã«ä¸Šæ›¸ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:353 msgid "Scoping variables" msgstr "変数ã®ã‚¹ã‚³ãƒ¼ãƒ—設定" #: ../../rst/user_guide/playbooks_variables.rst:355 msgid "You can decide where to set a variable based on the scope you want that value to have. Ansible has three main scopes:" msgstr "変数をã©ã“ã«è¨­å®šã™ã‚‹ã‹ã¯ã€ãã®å€¤ãŒæŒã¤ã¹ãスコープã«åŸºã¥ã„ã¦æ±ºã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã«ã¯å¤§ãã分ã‘㦠3 ã¤ã®ã‚¹ã‚³ãƒ¼ãƒ—ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:357 msgid "Global: this is set by config, environment variables and the command line" msgstr "グローãƒãƒ«: ã“れã¯ã€è¨­å®šã€ç’°å¢ƒå¤‰æ•°ã€ãŠã‚ˆã³ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§è¨­å®šã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:358 msgid "Play: each play and contained structures, vars entries (vars; vars_files; vars_prompt), role defaults and vars." msgstr "プレイ: å„プレイãŠã‚ˆã³å«ã¾ã‚Œã‚‹æ§‹é€ ã€å¤‰æ•°ã‚¨ãƒ³ãƒˆãƒªãƒ¼ (varsã€vars_filesã€vars_prompt)ã€ãƒ­ãƒ¼ãƒ«ã®ãƒ‡ãƒ•ォルトã€ãŠã‚ˆã³å¤‰æ•°" #: ../../rst/user_guide/playbooks_variables.rst:359 msgid "Host: variables directly associated to a host, like inventory, include_vars, facts or registered task outputs" msgstr "ホスト: インベントリーã€include_varsã€ãƒ•ァクトã€ã¾ãŸã¯ç™»éŒ²ã•れãŸã‚¿ã‚¹ã‚¯ã®å‡ºåŠ›ãªã©ã®ãƒ›ã‚¹ãƒˆã«ç›´æŽ¥é–¢é€£ä»˜ã‘られる変数" #: ../../rst/user_guide/playbooks_variables.rst:361 msgid "Inside a template, you automatically have access to all variables that are in scope for a host, plus any registered variables, facts, and magic variables." msgstr "テンプレート内ã§ã¯ã€ãƒ›ã‚¹ãƒˆã®ã‚¹ã‚³ãƒ¼ãƒ—内ã«ã‚ã‚‹ã™ã¹ã¦ã®å¤‰æ•°ã¨ã€ç™»éŒ²æ¸ˆã¿ã®å¤‰æ•°ã€ãƒ•ァクトã€ãŠã‚ˆã³ãƒžã‚¸ãƒƒã‚¯å¤‰æ•°ã«è‡ªå‹•çš„ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:366 msgid "Tips on where to set variables" msgstr "変数を設定ã™ã‚‹å ´æ‰€ã«é–¢ã™ã‚‹ãƒ’ント" #: ../../rst/user_guide/playbooks_variables.rst:368 msgid "You should choose where to define a variable based on the kind of control you might want over values." msgstr "変数を定義ã™ã‚‹å ´æ‰€ã¯ã€å€¤ã‚’ã©ã®ã‚ˆã†ã«åˆ¶å¾¡ã™ã‚‹ã‹ã«ã‚ˆã£ã¦é¸æŠžã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:370 msgid "Set variables in inventory that deal with geography or behavior. Since groups are frequently the entity that maps roles onto hosts, you can often set variables on the group instead of defining them on a role. Remember: child groups override parent groups, and host variables override group variables. See :ref:`define_variables_in_inventory` for details on setting host and group variables." msgstr "地ç†ã‚„動作を扱ã†ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«å¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚グループã¯ã€ãƒ›ã‚¹ãƒˆã«ãƒ­ãƒ¼ãƒ«ã‚’マッピングã™ã‚‹ã‚¨ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã§ã‚ã‚‹ã“ã¨ãŒå¤šã„ãŸã‚ã€ãƒ­ãƒ¼ãƒ«ã«å¤‰æ•°ã‚’定義ã™ã‚‹ä»£ã‚りã«ã€ã‚°ãƒ«ãƒ¼ãƒ—ã«å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å­ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¦ªã‚°ãƒ«ãƒ¼ãƒ—を上書ãã—ã€ãƒ›ã‚¹ãƒˆå¤‰æ•°ãŒã‚°ãƒ«ãƒ¼ãƒ—変数を上書ãã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。ホスト変数ã¨ã‚°ãƒ«ãƒ¼ãƒ—変数ã®è¨­å®šã®è©³ç´°ã¯ã€ã€Œ:ref:`define_variables_in_inventory`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:372 msgid "Set common defaults in a ``group_vars/all`` file. See :ref:`splitting_out_vars` for details on how to organize host and group variables in your inventory. Group variables are generally placed alongside your inventory file, but they can also be returned by dynamic inventory (see :ref:`intro_dynamic_inventory`) or defined in AWX or on :ref:`ansible_platform` from the UI or API::" msgstr "``group_vars/all`` ファイルã§å…±é€šã®ãƒ‡ãƒ•ォルトを設定ã—ã¾ã™ã€‚インベントリーã§ãƒ›ã‚¹ãƒˆå¤‰æ•°ã¨ã‚°ãƒ«ãƒ¼ãƒ—変数を整ç†ã™ã‚‹æ–¹æ³•ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã€Œ:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。グループ変数ã¯é€šå¸¸ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルã¨ä¸€ç·’ã«ç½®ã‹ã‚Œã¾ã™ãŒã€å‹•的インベントリー (:ref:`intro_dynamic_inventory` ã‚’å‚ç…§) ã§è¿”ã•れãŸã‚Šã€AWXã€ã¾ãŸã¯ UI ã‚„ API ã‹ã‚‰ :ref:`ansible_platform` ã§å®šç¾©ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:379 msgid "Set location-specific variables in ``group_vars/my_location`` files. All groups are children of the ``all`` group, so variables set here override those set in ``group_vars/all``::" msgstr "``group_vars/my_location`` ファイルã«ãƒ­ã‚±ãƒ¼ã‚·ãƒ§ãƒ³å›ºæœ‰ã®å¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—㯠``all`` グループã®å­ã§ã‚ã‚‹ãŸã‚ã€ã“ã“ã«è¨­å®šã•れる変数㯠``group_vars/all`` ã§è¨­å®šã—ãŸå¤‰æ•°ã‚’上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:385 msgid "If one host used a different NTP server, you could set that in a host_vars file, which would override the group variable::" msgstr "1 ã¤ã®ãƒ›ã‚¹ãƒˆãŒåˆ¥ã® NTP サーãƒãƒ¼ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€host_vars ファイルã«ãã®ãƒ›ã‚¹ãƒˆã‚’設定ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚°ãƒ«ãƒ¼ãƒ—変数ãŒä¸Šæ›¸ãã•れã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:391 msgid "Set defaults in roles to avoid undefined-variable errors. If you share your roles, other users can rely on the reasonable defaults you added in the ``roles/x/defaults/main.yml`` file, or they can easily override those values in inventory or at the command line. See :ref:`playbooks_reuse_roles` for more info. For example::" msgstr "未定義ãªå¤‰æ•°ã‚¨ãƒ©ãƒ¼ã‚’防ããŸã‚ã«ã€ãƒ­ãƒ¼ãƒ«ã«ãƒ‡ãƒ•ォルト値を設定ã—ã¾ã™ã€‚ロールを共有ã—ã¦ã„ã‚‹å ´åˆã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€``roles/x/defaults/main.yml`` ファイルã§è¿½åŠ ã—ãŸå¦¥å½“ãªãƒ‡ãƒ•ォルト値を信頼ã™ã‚‹ã‹ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‚„コマンドラインã§ç°¡å˜ã«ãã®å€¤ã‚’上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`playbooks_reuse_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:398 msgid "Set variables in roles to ensure a value is used in that role, and is not overridden by inventory variables. If you are not sharing your role with others, you can define app-specific behaviors like ports this way, in ``roles/x/vars/main.yml``. If you are sharing roles with others, putting variables here makes them harder to override, although they still can by passing a parameter to the role or setting a variable with ``-e``::" msgstr "ロールã«å¤‰æ•°ã‚’設定ã™ã‚‹ã“ã¨ã§ã€å€¤ãŒãã®ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã•れã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã§ä¸Šæ›¸ãã•れãªã„よã†ã«ã—ã¾ã™ã€‚ロールを他ã®äººã¨å…±æœ‰ã—ã¦ã„ãªã„å ´åˆã¯ã€ãƒãƒ¼ãƒˆãªã©ã®ã‚¢ãƒ—リ固有ã®å‹•作をã€ã“ã®ã‚ˆã†ã« ``roles/x/vars/main.yml`` ã§å®šç¾©ã§ãã¾ã™ã€‚ä»–ã®äººã¨ãƒ­ãƒ¼ãƒ«ã‚’共有ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã“ã«å¤‰æ•°ã‚’ç½®ãã“ã¨ã§ä¸Šæ›¸ãã•れã«ãããªã‚Šã¾ã™ã€‚ãŸã ã—ã€ãƒ­ãƒ¼ãƒ«ã«ãƒ‘ラメーターを渡ã—ãŸã‚Šã€``-e`` ã§å¤‰æ•°ã‚’設定ã—ãŸã‚Šã™ã‚Œã°ã€ä¸Šæ›¸ãã•れるå¯èƒ½æ€§ã¯ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:405 msgid "Pass variables as parameters when you call roles for maximum clarity, flexibility, and visibility. This approach overrides any defaults that exist for a role. For example::" msgstr "明確ã•ã€æŸ”軟性ã€ãŠã‚ˆã³å¯è¦–性を最大化ã™ã‚‹ãŸã‚ã«ãƒ­ãƒ¼ãƒ«ã‚’呼ã³å‡ºã™å ´åˆã¯ã€ãƒ‘ラメーターã¨ã—ã¦å¤‰æ•°ã‚’渡ã—ã¾ã™ã€‚ã“ã®æ–¹æ³•ã§ã¯ã€ãƒ­ãƒ¼ãƒ«ã«å­˜åœ¨ã™ã‚‹ãƒ‡ãƒ•ォルトを上書ãã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:412 msgid "When you read this playbook it is clear that you have chosen to set a variable or override a default. You can also pass multiple values, which allows you to run the same role multiple times. See :ref:`run_role_twice` for more details. For example::" msgstr "ã“ã® Playbook を読むã¨ã€å¤‰æ•°ã®è¨­å®šã‚„デフォルトã®ä¸Šæ›¸ãã‚’é¸æŠžã—ãŸã“ã¨ãŒã‚ã‹ã‚Šã¾ã™ã€‚ã¾ãŸã€è¤‡æ•°ã®å€¤ã‚’渡ã™ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€åŒã˜ãƒ­ãƒ¼ãƒ«ã‚’複数回実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€Œ:ref:`run_role_twice`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:428 msgid "Variables set in one role are available to later roles. You can set variables in a ``roles/common_settings/vars/main.yml`` file and use them in other roles and elsewhere in your playbook::" msgstr "1 ã¤ã®ãƒ­ãƒ¼ãƒ«ã«è¨­å®šã•れãŸå¤‰æ•°ã¯ã€å¾Œã®ãƒ­ãƒ¼ãƒ«ã§ä½¿ç”¨ã§ãã¾ã™ã€‚変数ã¯ã€``roles/common_settings/vars/main.yml`` ファイルã«è¨­å®šã—ã¦ã€ä»–ã®ãƒ­ãƒ¼ãƒ«ã‚„ Playbook ã®ä»–ã®å ´æ‰€ã§ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:437 msgid "There are some protections in place to avoid the need to namespace variables. In this example, variables defined in 'common_settings' are available to 'something' and 'something_else' tasks, but tasks in 'something' have foo set at 12, even if 'common_settings' sets foo to 20." msgstr "変数ã®åå‰ç©ºé–“化ã®å¿…è¦æ€§ã‚’回é¿ã™ã‚‹ãŸã‚ã«ã€ã„ãã¤ã‹ã®ä¿è­·æ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ã€Œcommon_settingsã€ã§å®šç¾©ã•れãŸå¤‰æ•°ã¯ã€Œsomethingã€ã¨ã€Œsomething_elseã€ã®ã‚¿ã‚¹ã‚¯ã§ä½¿ç”¨ã§ãã¾ã™ãŒã€ã€Œcommon_settingsã€ã§ foo ㌠20 ã«è¨­å®šã•れã¦ã„ã¦ã‚‚ã€ã€Œsomethingã€ã®ã‚¿ã‚¹ã‚¯ã§ã¯ foo ㌠12 ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:440 msgid "Instead of worrying about variable precedence, we encourage you to think about how easily or how often you want to override a variable when deciding where to set it. If you are not sure what other variables are defined, and you need a particular value, use ``--extra-vars`` (``-e``) to override all other variables." msgstr "変数ã®å„ªå…ˆé †ä½ã‚’æ°—ã«ã™ã‚‹ã®ã§ã¯ãªãã€å¤‰æ•°ã‚’ã©ã“ã«è¨­å®šã™ã‚‹ã‹ã‚’決ã‚ã‚‹éš›ã«ã¯ã€ã©ã‚Œã ã‘ç°¡å˜ã«ã€ã‚ã‚‹ã„ã¯ã©ã‚Œã ã‘é »ç¹ã«å¤‰æ•°ã‚’上書ãã—ãŸã„ã‹ã‚’考ãˆã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ä»–ã®å¤‰æ•°ãŒã©ã®ã‚ˆã†ã«å®šç¾©ã•れã¦ã„ã‚‹ã‹ã‚ã‹ã‚‰ãšã€ç‰¹å®šã®å€¤ãŒå¿…è¦ãªå ´åˆã¯ã€``--extra-vars`` (``-e``) を使用ã—ã¦ã€ä»–ã®ã™ã¹ã¦ã®å¤‰æ•°ã‚’上書ãã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_variables.rst:443 msgid "Using advanced variable syntax" msgstr "高度ãªå¤‰æ•°æ§‹æ–‡ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_variables.rst:445 msgid "For information about advanced YAML syntax used to declare variables and have more control over the data placed in YAML files used by Ansible, see :ref:`playbooks_advanced_syntax`." msgstr "変数を宣言ã™ã‚‹ã®ã«ä½¿ç”¨ã•れる高度㪠YAML æ§‹æ–‡ã€ãŠã‚ˆã³ Ansible ã«ã‚ˆã‚Šä½¿ç”¨ã•れる YAML ファイルã«ã‚るデータã«å¯¾ã™ã‚‹åˆ¶å¾¡ã®è©³ç´°ã¯ã€ã€Œ:ref:`playbooks_advanced_syntax`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_variables.rst:454 msgid "Jinja2 filters and their uses" msgstr "Jinja2 フィルターãŠã‚ˆã³ãã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_variables.rst:461 msgid ":ref:`special_variables`" msgstr ":ref:`special_variables`" #: ../../rst/user_guide/playbooks_variables.rst:462 msgid "List of special variables" msgstr "特殊ãªå¤‰æ•°ã®ãƒªã‚¹ãƒˆ" #: ../../rst/user_guide/playbooks_vars_facts.rst:5 msgid "Discovering variables: facts and magic variables" msgstr "å¤‰æ•°ã®æ¤œå‡º: ファクトãŠã‚ˆã³ãƒžã‚¸ãƒƒã‚¯å¤‰æ•°" #: ../../rst/user_guide/playbooks_vars_facts.rst:7 msgid "With Ansible you can retrieve or discover certain variables containing information about your remote systems or about Ansible itself. Variables related to remote systems are called facts. With facts, you can use the behavior or state of one system as configuration on other systems. For example, you can use the IP address of one system as a configuration value on another system. Variables related to Ansible are called magic variables." msgstr "Ansible ã§ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã‚„ Ansible 自体ã«é–¢ã™ã‚‹æƒ…報をå«ã‚€ç‰¹å®šã®å¤‰æ•°ã‚’å–å¾—ã¾ãŸã¯æ¤œå‡ºã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚リモートシステムã«é–¢é€£ã™ã‚‹å¤‰æ•°ã‚’ファクトã¨å‘¼ã³ã¾ã™ã€‚ファクトを使用ã™ã‚‹ã¨ã€ã‚るシステムã®å‹•作や状態を他ã®ã‚·ã‚¹ãƒ†ãƒ ã®è¨­å®šå€¤ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚るシステム㮠IP アドレスをã€ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã®è¨­å®šå€¤ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã«é–¢é€£ã™ã‚‹å¤‰æ•°ã‚’マジック変数ã¨å‘¼ã³ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:13 msgid "Ansible facts" msgstr "Ansible ファクト" #: ../../rst/user_guide/playbooks_vars_facts.rst:15 msgid "Ansible facts are data related to your remote systems, including operating systems, IP addresses, attached filesystems, and more. You can access this data in the ``ansible_facts`` variable. By default, you can also access some Ansible facts as top-level variables with the ``ansible_`` prefix. You can disable this behavior using the :ref:`INJECT_FACTS_AS_VARS` setting. To see all available facts, add this task to a play::" msgstr "Ansible ã®ãƒ•ァクトã¯ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã€IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã€æ·»ä»˜ã®ãƒ•ァイルシステムãªã©ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚·ã‚¹ãƒ†ãƒ ã«é–¢é€£ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã§ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã«ã¯ã€``ansible_facts`` ã¨ã„ã†å¤‰æ•°ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚デフォルトã§ã¯ã€ä¸€éƒ¨ã® Ansible ファクトã¯ã€``ansible_`` ã¨ã„ã†ãƒ—レフィックスをæŒã¤ãƒˆãƒƒãƒ—レベルã®å¤‰æ•°ã¨ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å‹•作ã¯ã€:ref:`INJECT_FACTS_AS_VARS` ã®è¨­å®šã§ç„¡åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚利用å¯èƒ½ãªã™ã¹ã¦ã®ãƒ•ァクトを表示ã™ã‚‹ã«ã¯ã€ã“ã®ã‚¿ã‚¹ã‚¯ã‚’プレイã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:21 msgid "To see the 'raw' information as gathered, run this command at the command line::" msgstr "åŽé›†ã•れãŸã€Œç”Ÿã€ã®æƒ…報を見るã«ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:25 msgid "Facts include a large amount of variable data, which may look like this:" msgstr "ファクトã«ã¯å¤§é‡ã®å¤‰æ•°ãƒ‡ãƒ¼ã‚¿ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãã‚Œã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:486 msgid "You can reference the model of the first disk in the facts shown above in a template or playbook as::" msgstr "上記ã®ãƒ•ã‚¡ã‚¯ãƒˆã®æœ€åˆã®ãƒ‡ã‚£ã‚¹ã‚¯ã®ãƒ¢ãƒ‡ãƒ«ã‚’テンプレートã¾ãŸã¯ Playbook ã§å‚ç…§ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:490 msgid "To reference the system hostname::" msgstr "システムã®ãƒ›ã‚¹ãƒˆåã‚’å‚ç…§ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:494 msgid "You can use facts in conditionals (see :ref:`playbooks_conditionals`) and also in templates. You can also use facts to create dynamic groups of hosts that match particular criteria, see the :ref:`group_by module ` documentation for details." msgstr "ファクトã¯ã€æ¡ä»¶å¼ (:ref:`playbooks_conditionals` ã‚’å‚ç…§) やテンプレートã§ã‚‚使用ã§ãã¾ã™ã€‚ã¾ãŸã€ãƒ•ァクトを使用ã—ã¦ã€ç‰¹å®šã®æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ›ã‚¹ãƒˆã®å‹•çš„ãªã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚詳細ã¯ã€:ref:`group_by モジュール ` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_vars_facts.rst:496 #, python-format msgid "Because ``ansible_date_time`` is created and cached when Ansible gathers facts before each playbook run, it can get stale with long-running playbooks. If your playbook takes a long time to run, use the ``pipe`` filter (for example, ``lookup('pipe', 'date +%Y-%m-%d.%H:%M:%S')``) or :ref:`now() ` with a Jinja 2 template instead of ``ansible_date_time``." msgstr "``ansible_date_time`` ã¯ã€Ansible ãŒå„ Playbook ã®å®Ÿè¡Œå‰ã«ãƒ•ァクトをåŽé›†ã—ãŸã¨ãã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れるãŸã‚ã€é•·æ™‚間実行ã•れる Playbook ã§å¤ããªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚Playbook ã®å®Ÿè¡Œã«é•·ã„時間ãŒã‹ã‹ã‚‹å ´åˆã¯ã€``ansible_date_time`` ã§ã¯ãªã Jinja 2 テンプレート㧠``pipe`` フィルター(例: ``lookup('pipe', 'date +%Y-%m-%d.%H:%M:%S')``)ã¾ãŸã¯ :ref:`now() ` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:501 msgid "Package requirements for fact gathering" msgstr "ファクトåŽé›†ã®ãƒ‘ッケージè¦ä»¶" #: ../../rst/user_guide/playbooks_vars_facts.rst:503 msgid "On some distros, you may see missing fact values or facts set to default values because the packages that support gathering those facts are not installed by default. You can install the necessary packages on your remote hosts using the OS package manager. Known dependencies include:" msgstr "一部ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã§ã¯ã€ãƒ•ァクトã®åŽé›†ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ãƒ‘ッケージãŒãƒ‡ãƒ•ォルトã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ãŸã‚ã€ãƒ•ァクトã®å€¤ãŒè¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸã‚Šã€ãƒ•ァクトãŒãƒ‡ãƒ•ォルト値ã«è¨­å®šã•れãŸã‚Šã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚OS ã®ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’使用ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«å¿…è¦ãªãƒ‘ッケージをインストールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚既知ã®ä¾å­˜é–¢ä¿‚ã«ã¯ä»¥ä¸‹ã®ã‚‚ã®ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:505 msgid "Linux Network fact gathering - Depends on the ``ip`` binary, commonly included in the ``iproute2`` package." msgstr "Linux ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ•ァクトåŽé›† - 一般的㫠``iproute2`` パッケージã«å«ã¾ã‚Œã‚‹ ``ip`` ãƒã‚¤ãƒŠãƒªãƒ¼ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:510 msgid "Caching facts" msgstr "ファクトã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥" #: ../../rst/user_guide/playbooks_vars_facts.rst:512 msgid "Like registered variables, facts are stored in memory by default. However, unlike registered variables, facts can be gathered independently and cached for repeated use. With cached facts, you can refer to facts from one system when configuring a second system, even if Ansible executes the current play on the second system first. For example::" msgstr "登録ã•れãŸå¤‰æ•°ã¨åŒæ§˜ã«ã€ãƒ•ァクトã¯ãƒ‡ãƒ•ォルトã§ãƒ¡ãƒ¢ãƒªãƒ¼ã«ä¿å­˜ã•れã¾ã™ã€‚ãŸã ã—ã€ç™»éŒ²ã•れãŸå¤‰æ•°ã¨ã¯ç•°ãªã‚Šã€ãƒ•ァクトã¯ç‹¬ç«‹ã—ã¦åŽé›†ã—ã€ç¹°ã‚Šè¿”ã—使用ã™ã‚‹ãŸã‚ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚キャッシュã•れãŸãƒ•ァクトを使用ã™ã‚‹ã¨ã€Ansible ㌠2 ã¤ç›®ã®ã‚·ã‚¹ãƒ†ãƒ ã§ç¾åœ¨ã®ãƒ—レイを最åˆã«å®Ÿè¡Œã—ãŸå ´åˆã§ã‚‚ã€1 ã¤ã®ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ•ァクトをå‚ç…§ã—㦠2 ã¤ç›®ã®ã‚·ã‚¹ãƒ†ãƒ ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:516 msgid "Caching is controlled by the cache plugins. By default, Ansible uses the memory cache plugin, which stores facts in memory for the duration of the current playbook run. To retain Ansible facts for repeated use, select a different cache plugin. See :ref:`cache_plugins` for details." msgstr "キャッシュ処ç†ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインã«ã‚ˆã£ã¦åˆ¶å¾¡ã•れã¾ã™ã€‚デフォルトã§ã¯ã€Ansible ã¯ãƒ¡ãƒ¢ãƒªãƒ¼ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ラグインを使用ã—ã€ç¾åœ¨ã® Playbook ã®å®Ÿè¡ŒæœŸé–“中ã€ãƒ¡ãƒ¢ãƒªãƒ¼ã«ãƒ•ァクトをä¿å­˜ã—ã¾ã™ã€‚Ansible ã®ãƒ•ァクトを繰り返ã—使用ã™ã‚‹ãŸã‚ã«ä¿æŒã™ã‚‹ã«ã¯ã€åˆ¥ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã‚’é¸æŠžã—ã¾ã™ã€‚詳細ã¯ã€Œ:ref:`cache_plugins`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_vars_facts.rst:518 msgid "Fact caching can improve performance. If you manage thousands of hosts, you can configure fact caching to run nightly, then manage configuration on a smaller set of servers periodically throughout the day. With cached facts, you have access to variables and information about all hosts even when you are only managing a small number of servers." msgstr "ファクトキャッシュ処ç†ã¯ãƒ‘フォーマンスをå‘上ã•ã›ã¾ã™ã€‚何åƒå°ã‚‚ã®ãƒ›ã‚¹ãƒˆã‚’管ç†ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ•ァクトキャッシュ処ç†ã‚’毎晩実行ã™ã‚‹ã‚ˆã†ã«è¨­å®šã—ã€å°è¦æ¨¡ãªã‚µãƒ¼ãƒç¾¤ã®è¨­å®šã‚’ 1 日中定期的ã«ç®¡ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚キャッシュã•れãŸãƒ•ァクトãŒã‚れã°ã€å°‘æ•°ã®ã‚µãƒ¼ãƒãƒ¼ã—ã‹ç®¡ç†ã—ã¦ã„ãªãã¦ã‚‚ã€ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã«é–¢ã™ã‚‹å¤‰æ•°ãŠã‚ˆã³æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:523 msgid "Disabling facts" msgstr "ファクトã®ç„¡åŠ¹åŒ–" #: ../../rst/user_guide/playbooks_vars_facts.rst:525 msgid "By default, Ansible gathers facts at the beginning of each play. If you do not need to gather facts (for example, if you know everything about your systems centrally), you can turn off fact gathering at the play level to improve scalability. Disabling facts may particularly improve performance in push mode with very large numbers of systems, or if you are using Ansible on experimental platforms. To disable fact gathering::" msgstr "デフォルトã§ã¯ã€Ansible ã¯å„プレイã®é–‹å§‹æ™‚ã«ãƒ•ァクトをåŽé›†ã—ã¾ã™ã€‚ファクトをåŽé›†ã™ã‚‹å¿…è¦ãŒãªã„å ´åˆ (ãŸã¨ãˆã°ã€ã‚·ã‚¹ãƒ†ãƒ ã«é–¢ã™ã‚‹æƒ…報をã™ã¹ã¦ä¸€å…ƒçš„ã«æŠŠæ¡ã—ã¦ã„ã‚‹å ´åˆ) ã¯ã€ãƒ—レイレベルã§ã®ãƒ•ァクトåŽé›†ã‚’オフã«ã™ã‚‹ã“ã¨ã§ã€ã‚¹ã‚±ãƒ¼ãƒ©ãƒ“リティーをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ファクトを無効ã«ã™ã‚‹ã¨ã€éžå¸¸ã«å¤šæ•°ã®ã‚·ã‚¹ãƒ†ãƒ ã‚’使用ã™ã‚‹ãƒ—ッシュモードやã€å®Ÿé¨“çš„ãªãƒ—ラットフォーム㧠Ansible を使用ã—ã¦ã„ã‚‹å ´åˆã«ã€ç‰¹ã«ãƒ‘フォーマンスãŒå‘上ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ファクトã®åŽé›†ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:531 msgid "Adding custom facts" msgstr "カスタムファクトã®è¿½åŠ " #: ../../rst/user_guide/playbooks_vars_facts.rst:533 msgid "The setup module in Ansible automatically discovers a standard set of facts about each host. If you want to add custom values to your facts, you can write a custom facts module, set temporary facts with a ``ansible.builtin.set_fact`` task, or provide permanent custom facts using the facts.d directory." msgstr "Ansible ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—モジュールã¯ã€å„ホストã«é–¢ã™ã‚‹æ¨™æº–çš„ãªãƒ•ァクトã®ã‚»ãƒƒãƒˆã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã—ã¾ã™ã€‚ファクトã«ã‚«ã‚¹ã‚¿ãƒ å€¤ã‚’追加ã—ãŸã„å ´åˆã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトモジュールを記述ã—ãŸã‚Šã€``ansible.builtin.set_fact`` タスクã§ä¸€æ™‚çš„ãªãƒ•ァクトを設定ã—ãŸã‚Šã€facts.d ディレクトリーを使用ã—ã¦æ’ä¹…çš„ãªã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトをæä¾›ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:538 msgid "facts.d or local facts" msgstr "facts.d ã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァクト" #: ../../rst/user_guide/playbooks_vars_facts.rst:542 msgid "You can add static custom facts by adding static files to facts.d, or add dynamic facts by adding executable scripts to facts.d. For example, you can add a list of all users on a host to your facts by creating and running a script in facts.d." msgstr "é™çš„ãªã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトã¯ã€é™çš„ファイルを facts.d ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§è¿½åŠ ã§ãã€å‹•çš„ãªãƒ•ァクトã¯å®Ÿè¡Œå¯èƒ½ãªã‚¹ã‚¯ãƒªãƒ—トを facts.d ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§è¿½åŠ ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€facts.d ã§ã‚¹ã‚¯ãƒªãƒ—トを作æˆã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒ›ã‚¹ãƒˆä¸Šã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒªã‚¹ãƒˆã‚’ファクトã«è¿½åŠ ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:544 msgid "To use facts.d, create an ``/etc/ansible/facts.d`` directory on the remote host or hosts. If you prefer a different directory, create it and specify it using the ``fact_path`` play keyword. Add files to the directory to supply your custom facts. All file names must end with ``.fact``. The files can be JSON, INI, or executable files returning JSON." msgstr "facts.d を使用ã™ã‚‹ã«ã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã¾ãŸã¯ãƒ›ã‚¹ãƒˆä¸Šã« ``/etc/ansible/facts.d`` ディレクトリーを作æˆã—ã¾ã™ã€‚別ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’作æˆã—ã€ãƒ—レイキーワード ``fact_path`` を使用ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ãƒ•ァイルを追加ã—ã¦ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトをæä¾›ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒ•ァイルåã¯ã€``.fact`` ã§çµ‚ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ファイルã«ã¯ã€JSONã€INIã€ã¾ãŸã¯ JSON ã‚’è¿”ã™å®Ÿè¡Œå¯èƒ½ãƒ•ァイルを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:546 msgid "To add static facts, simply add a file with the ``.fact`` extension. For example, create ``/etc/ansible/facts.d/preferences.fact`` with this content::" msgstr "é™çš„ファクトを追加ã™ã‚‹ã«ã¯ã€``.fact`` æ‹¡å¼µå­ã‚’æŒã¤ãƒ•ァイルを追加ã™ã‚‹ã ã‘ã§ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®å†…容㧠``/etc/ansible/facts.d/preferences.fact`` を作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:552 msgid "Make sure the file is not executable as this will break the ``ansible.builtin.setup`` module." msgstr "``ansible.builtin.setup`` モジュールãŒå£Šã‚Œã‚‹ãŸã‚ã€ã“ã®ãƒ•ァイルãŒå®Ÿè¡Œãƒ•ァイルã§ã¯ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/playbooks_vars_facts.rst:554 msgid "The next time fact gathering runs, your facts will include a hash variable fact named ``general`` with ``asdf`` and ``bar`` as members. To validate this, run the following::" msgstr "次回ã€ãƒ•ァクトåŽé›†ãŒå®Ÿè¡Œã•れるã¨ã€ãƒ•ァクトã«ã¯ã€``asdf`` 㨠``bar`` をメンãƒãƒ¼ã¨ã™ã‚‹ ``general`` ã¨ã„ã†åå‰ã®ãƒãƒƒã‚·ãƒ¥å¤‰æ•°ãƒ•ァクトãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ã“れを検証ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:558 msgid "And you will see your custom fact added::" msgstr "ã“れã«ã‚ˆã‚Šã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトãŒè¿½åŠ ã•れã¦ã„ã‚‹ã®ãŒç¢ºèªã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:569 msgid "The ansible_local namespace separates custom facts created by facts.d from system facts or variables defined elsewhere in the playbook, so variables will not override each other. You can access this custom fact in a template or playbook as::" msgstr "ansible_local åå‰ç©ºé–“ã¯ã€facts.d ã§ä½œæˆã•れãŸã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトã¨ã€ã‚·ã‚¹ãƒ†ãƒ ãƒ•ァクトや Playbook 内ã®ä»–ã®å ´æ‰€ã§å®šç¾©ã•れãŸå¤‰æ•°ã‚’分離ã—ã€å¤‰æ•°ãŒäº’ã„ã«ä¸Šæ›¸ãã•れãªã„よã†ã«ã—ã¾ã™ã€‚ã“ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトã«ã¯ã€ãƒ†ãƒ³ãƒ—レートや Playbook ã§æ¬¡ã®ã‚ˆã†ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:573 msgid "The key part in the key=value pairs will be converted into lowercase inside the ansible_local variable. Using the example above, if the ini file contained ``XYZ=3`` in the ``[general]`` section, then you should expect to access it as: ``{{ ansible_local['preferences']['general']['xyz'] }}`` and not ``{{ ansible_local['preferences']['general']['XYZ'] }}``. This is because Ansible uses Python's `ConfigParser`_ which passes all option names through the `optionxform`_ method and this method's default implementation converts option names to lower case." msgstr "éµã¨å€¤ã®ãƒšã‚¢ã®éµã®éƒ¨åˆ†ã¯ã€ansible_local 変数内ã§å°æ–‡å­—ã«å¤‰æ›ã•れã¾ã™ã€‚上記ã®ä¾‹ã§ã¯ã€ini ファイル㮠``[general]`` セクション㫠``XYZ=3`` ãŒå«ã¾ã‚Œã¦ã„ãŸå ´åˆã¯ã€``{{ ansible_local['preferences']['general']['XYZ'] }}`` ã§ã¯ãªãã€``{{ ansible_local['preferences']['general']['xyz'] }}`` ã¨ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€Ansible ㌠Python ã® `ConfigParser`_ を使用ã—ã¦ã€ã™ã¹ã¦ã®ã‚ªãƒ—ションåã‚’ `optionxform`_ ãƒ¡ã‚½ãƒƒãƒ‰ã«æ¸¡ã—ã¦ãŠã‚Šã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ãƒ‡ãƒ•ォルトã®å®Ÿè£…ã§ã¯ã€ã‚ªãƒ—ションåãŒå°æ–‡å­—ã«å¤‰æ›ã•れるãŸã‚ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:578 msgid "You can also use facts.d to execute a script on the remote host, generating dynamic custom facts to the ansible_local namespace. For example, you can generate a list of all users that exist on a remote host as a fact about that host. To generate dynamic custom facts using facts.d:" msgstr "facts.d を使用ã—ã¦ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆä¸Šã§ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã€ansible_local åå‰ç©ºé–“ã«å‹•çš„ãªã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトを生æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã«å­˜åœ¨ã™ã‚‹ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒªã‚¹ãƒˆã‚’ã€ãã®ãƒ›ã‚¹ãƒˆã«é–¢ã™ã‚‹ãƒ•ァクトã¨ã—ã¦ç”Ÿæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚facts.d を使用ã—ã¦å‹•çš„ãªã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトを生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:580 msgid "Write and test a script to generate the JSON data you want." msgstr "スクリプトを作æˆã—ã¦ãƒ†ã‚¹ãƒˆã—ã¦ã€å¿…è¦ãª JSON データを生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:581 msgid "Save the script in your facts.d directory." msgstr "スクリプトを facts.d ディレクトリーã«ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:582 msgid "Make sure your script has the ``.fact`` file extension." msgstr "スクリプト㫠``.fact`` ファイル拡張å­ãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:583 msgid "Make sure your script is executable by the Ansible connection user." msgstr "スクリプト㌠Ansible 接続ユーザーã«ã‚ˆã£ã¦å®Ÿè¡Œå¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:584 msgid "Gather facts to execute the script and add the JSON output to ansible_local." msgstr "スクリプトを実行ã™ã‚‹ãƒ•ァクトをåŽé›†ã—ã€JSON 出力を ansible_local ã«è¿½åŠ ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:586 msgid "By default, fact gathering runs once at the beginning of each play. If you create a custom fact using facts.d in a playbook, it will be available in the next play that gathers facts. If you want to use it in the same play where you created it, you must explicitly re-run the setup module. For example::" msgstr "デフォルトã§ã¯ã€ãƒ•ァクトã®åŽé›†ã¯å„プレイã®é–‹å§‹æ™‚ã«ä¸€åº¦ã ã‘実行ã—ã¾ã™ã€‚Playbook ã§ facts.d を使用ã—ã¦ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトを作æˆã™ã‚‹ã¨ã€ãƒ•ァクトをåŽé›†ã™ã‚‹æ¬¡ã®ãƒ—レイã§ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚作æˆã—ãŸã®ã¨åŒã˜ãƒ—レイã§ä½¿ç”¨ã—ãŸã„å ´åˆã¯ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—モジュールを明示的ã«å†å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:606 msgid "If you use this pattern frequently, a custom facts module would be more efficient than facts.d." msgstr "ã“ã®ãƒ‘ターンを頻ç¹ã«ä½¿ç”¨ã™ã‚‹ã¨ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァクトモジュール㯠facts.d よりも効率ãŒä¸ŠãŒã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:611 msgid "Information about Ansible: magic variables" msgstr "Ansible ã«é–¢ã™ã‚‹æƒ…å ±: マジック変数" #: ../../rst/user_guide/playbooks_vars_facts.rst:613 msgid "You can access information about Ansible operations, including the python version being used, the hosts and groups in inventory, and the directories for playbooks and roles, using \"magic\" variables. Like connection variables, magic variables are :ref:`special_variables`. Magic variable names are reserved - do not set variables with these names. The variable ``environment`` is also reserved." msgstr "使用ã—ã¦ã„ã‚‹ Python ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ãƒ›ã‚¹ãƒˆã‚„グループã€Playbook やロールã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãªã©ã€Ansible ã®æ“作ã«é–¢ã™ã‚‹æƒ…å ±ã¯ã€ã€Œãƒžã‚¸ãƒƒã‚¯ã€å¤‰æ•°ã‚’使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚接続変数ã¨åŒæ§˜ã«ã€ãƒžã‚¸ãƒƒã‚¯å¤‰æ•°ã¯ :ref:`special_variables` ã§ã™ã€‚マジック変数ã®åå‰ã¯äºˆç´„済ã¿ã§ã™ã€‚ã“れらã®åå‰ã§å¤‰æ•°ã‚’設定ã—ãªã„ã§ãã ã•ã„。変数 ``environment`` も予約済ã¿ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:615 msgid "The most commonly used magic variables are ``hostvars``, ``groups``, ``group_names``, and ``inventory_hostname``. With ``hostvars``, you can access variables defined for any host in the play, at any point in a playbook. You can access Ansible facts using the ``hostvars`` variable too, but only after you have gathered (or cached) facts." msgstr "最も一般的ã«ä½¿ç”¨ã•れるマジック変数ã¯ã€``hostvars``ã€``groups``ã€``group_names``ã€ãŠã‚ˆã³ ``inventory_hostname`` ã§ã™ã€‚``hostvars`` を使用ã™ã‚‹ã¨ã€Playbook 内ã®ä»»æ„ã®æ™‚点ã§ã€ãƒ—レイ内ã®ä»»æ„ã®ãƒ›ã‚¹ãƒˆã«å¯¾ã—ã¦å®šç¾©ã•れãŸå¤‰æ•°ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚``hostvars`` 変数を使用ã—㦠Ansible ã®ãƒ•ァクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ãƒ•ァクトをåŽé›† (ã¾ãŸã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥) ã—ãŸå¾Œã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" #: ../../rst/user_guide/playbooks_vars_facts.rst:617 msgid "If you want to configure your database server using the value of a 'fact' from another node, or the value of an inventory variable assigned to another node, you can use ``hostvars`` in a template or on an action line::" msgstr "ä»–ã®ãƒŽãƒ¼ãƒ‰ã®ã€Œãƒ•ァクトã€ã®å€¤ã‚„ã€ä»–ã®ãƒŽãƒ¼ãƒ‰ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã®å€¤ã‚’使用ã—ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã‚’設定ã™ã‚‹å ´åˆã¯ã€ãƒ†ãƒ³ãƒ—レートやアクション行㧠``hostvars`` を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:621 msgid "With ``groups``, a list of all the groups (and hosts) in the inventory, you can enumerate all hosts within a group. For example:" msgstr "``groups`` ã§ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã®ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ— (ãŠã‚ˆã³ãƒ›ã‚¹ãƒˆ) ã®ãƒªã‚¹ãƒˆã§ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’列挙ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:629 msgid "You can use ``groups`` and ``hostvars`` together to find all the IP addresses in a group." msgstr "``groups`` 㨠``hostvars`` を一緒ã«ä½¿ç”¨ã—ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã®ã™ã¹ã¦ã® IP アドレスを探ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:637 msgid "You can use this approach to point a frontend proxy server to all the hosts in your app servers group, to set up the correct firewall rules between servers, and so on. You must either cache facts or gather facts for those hosts before the task that fills out the template." msgstr "ã“ã®æ–¹æ³•を使用ã—ã¦ã€ãƒ•ロントエンドプロキシーサーãƒãƒ¼ãŒã‚¢ãƒ—リサーãƒãƒ¼ã‚°ãƒ«ãƒ¼ãƒ—内ã®ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã‚’指ã™ã‚ˆã†ã«ã—ãŸã‚Šã€ã‚µãƒ¼ãƒãƒ¼é–“ã«æ­£ã—ã„ファイアウォールルールを設定ã—ãŸã‚Šã§ãã¾ã™ã€‚テンプレートã«å…¥åŠ›ã™ã‚‹ã‚¿ã‚¹ã‚¯ã®å‰ã«ã€ãƒ•ァクトをキャッシュã™ã‚‹ã‹ã€ãれらã®ãƒ›ã‚¹ãƒˆã®ãƒ•ァクトをåŽé›†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:639 msgid "With ``group_names``, a list (array) of all the groups the current host is in, you can create templated files that vary based on the group membership (or role) of the host:" msgstr "``group_names`` ã§ã¯ã€ç¾åœ¨ã®ãƒ›ã‚¹ãƒˆãŒç½®ã‹ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒªã‚¹ãƒˆ (é…列) ã¯ã€ãƒ›ã‚¹ãƒˆã®ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚·ãƒƒãƒ— (ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«) ã«åŸºã¥ã„ã¦ç•°ãªã‚‹ãƒ†ãƒ³ãƒ—レートファイルを作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:647 msgid "You can use the magic variable ``inventory_hostname``, the name of the host as configured in your inventory, as an alternative to ``ansible_hostname`` when fact-gathering is disabled. If you have a long FQDN, you can use ``inventory_hostname_short``, which contains the part up to the first period, without the rest of the domain." msgstr "ファクトåŽé›†ãŒç„¡åйã«ãªã£ã¦ã„ã‚‹ã¨ãã«ã¯ã€``ansible_hostname`` ã®ä»£ã‚りã«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§è¨­å®šã•れãŸãƒ›ã‚¹ãƒˆã®åå‰ã§ã‚るマジック変数 ``inventory_hostname`` を使用ã§ãã¾ã™ã€‚é•·ã„ FQDN ãŒã‚ã‚‹å ´åˆã«ã¯ã€æœ€åˆã®ãƒ”リオドã¾ã§ã®éƒ¨åˆ†ã‚’å«ã¿ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã®æ®‹ã‚Šã®éƒ¨åˆ†ã‚’å«ã¾ãªã„ ``inventory_hostname_short`` を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:649 msgid "Other useful magic variables refer to the current play or playbook. These vars may be useful for filling out templates with multiple hostnames or for injecting the list into the rules for a load balancer." msgstr "ãã®ä»–ã®æœ‰ç”¨ãªãƒžã‚¸ãƒƒã‚¯å¤‰æ•°ã¯ã€ç¾åœ¨ã®ãƒ—レイや Playbook ã‚’å‚ç…§ã—ã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¯ã€è¤‡æ•°ã®ãƒ›ã‚¹ãƒˆåã§ãƒ†ãƒ³ãƒ—レートを埋ã‚ã‚‹ã¨ãã‚„ã€ãƒ­ãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒ¼ã®ãƒ«ãƒ¼ãƒ«ã«ãƒªã‚¹ãƒˆã‚’注入ã™ã‚‹ã¨ãã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:651 msgid "``ansible_play_hosts`` is the list of all hosts still active in the current play." msgstr "``ansible_play_hosts`` ã¯ã€ç¾åœ¨ã®ãƒ—レイã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã¾ã¾ã«ãªã£ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ›ã‚¹ãƒˆã®å®Œå…¨ãªãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:653 msgid "``ansible_play_batch`` is a list of hostnames that are in scope for the current 'batch' of the play." msgstr "``ansible_play_batch`` ã¯ã€ç¾åœ¨ã®ãƒ—レイã®ã€Œãƒãƒƒãƒã€ã®ç¯„囲内ã«ã‚るホストåã®ãƒªã‚¹ãƒˆã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:655 msgid "The batch size is defined by ``serial``, when not set it is equivalent to the whole play (making it the same as ``ansible_play_hosts``)." msgstr "ãƒãƒƒãƒã‚µã‚¤ã‚ºã¯ ``serial`` ã§å®šç¾©ã•れã¾ã™ã€‚設定ã•れã¦ã„ãªã„å ´åˆã¯ã€ãƒ—レイ全体ã«ç›¸å½“ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ (``ansible_play_hosts`` ã¨åŒã˜ã«ãªã‚Šã¾ã™)。" #: ../../rst/user_guide/playbooks_vars_facts.rst:657 msgid "``ansible_playbook_python`` is the path to the python executable used to invoke the Ansible command line tool." msgstr "``ansible_playbook_python`` ã¯ã€Ansible コマンドラインツールを起動ã™ã‚‹ã®ã«ä½¿ç”¨ã•れる Python 実行ファイルã¸ã®ãƒ‘スã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:659 msgid "``inventory_dir`` is the pathname of the directory holding Ansible's inventory host file." msgstr "``inventory_dir`` ã¯ã€Ansible ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿æŒã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®ãƒ‘スåã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:661 msgid "``inventory_file`` is the pathname and the filename pointing to the Ansible's inventory host file." msgstr "``inventory_file`` ã¯ã€Ansible ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ›ã‚¹ãƒˆãƒ•ァイルをå‚ç…§ã™ã‚‹ãƒ‘スåã¨ãƒ•ァイルåã§ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:663 msgid "``playbook_dir`` contains the playbook base directory." msgstr "``playbook_dir`` ã«ã¯ Playbook ã®ãƒ™ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:665 msgid "``role_path`` contains the current role's pathname and only works inside a role." msgstr "``role_path`` ã«ã¯ç¾åœ¨ã®ãƒ­ãƒ¼ãƒ«ã®ãƒ‘スåãŒå«ã¾ã‚Œã€ãƒ­ãƒ¼ãƒ«å†…ã§ã®ã¿å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:667 msgid "``ansible_check_mode`` is a boolean, set to ``True`` if you run Ansible with ``--check``." msgstr "``ansible_check_mode`` ㌠``--check`` ã§ Ansible を実行ã™ã‚‹å ´åˆã¯ ``True`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vars_facts.rst:672 msgid "Ansible version" msgstr "Ansible version" #: ../../rst/user_guide/playbooks_vars_facts.rst:676 msgid "To adapt playbook behavior to different versions of Ansible, you can use the variable ``ansible_version``, which has the following structure::" msgstr "Playbook ã®å‹•作をã•ã¾ã–ã¾ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã«é©ç”¨ã™ã‚‹ã«ã¯ã€``ansible_version`` 変数を使用ã§ãã¾ã™ã€‚ã“ã®å¤‰æ•°ã«ã¯ã€ä»¥ä¸‹ã®æ§‹é€ ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/playbooks_vault.rst:4 msgid "Using vault in playbooks" msgstr "Playbook ã§ã® Vault ã®ä½¿ç”¨" #: ../../rst/user_guide/playbooks_vault.rst:6 msgid "The documentation regarding Ansible Vault has moved. The new location is here: :ref:`vault`. Please update any links you may have made directly to this page." msgstr "Ansible Vault ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒç§»å‹•ã—ã¾ã—ãŸã€‚æ–°ã—ã„場所ã¯ã€Œ:ref:`vault`ã€ã§ã™ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã«ç›´æŽ¥ä½œæˆã—ãŸå¯èƒ½æ€§ã®ã‚るリンクを更新ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/plugin_filtering_config.rst:4 msgid "Rejecting modules" msgstr "ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ‹’å¦" #: ../../rst/user_guide/plugin_filtering_config.rst:6 msgid "If you want to avoid using certain modules, you can add them to a reject list to prevent Ansible from loading them. To reject plugins, create a yaml configuration file. The default location for this file is :file:`/etc/ansible/plugin_filters.yml`. You can select a different path for the reject list using the :ref:`PLUGIN_FILTERS_CFG` setting in the ``defaults`` section of your ansible.cfg. Here is an example reject list:" msgstr "特定ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½¿ç”¨ã‚’回é¿ã—ãŸã„å ´åˆã¯ã€ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æ‹’å¦ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ã¦ã€Ansible ãŒãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’読ã¿è¾¼ã¾ãªã„よã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚プラグインを拒å¦ã™ã‚‹ã«ã¯ã€yaml 設定ファイルを作æˆã—ã¾ã™ã€‚ã“ã®ãƒ•ァイルã®ãƒ‡ãƒ•ォルトã®å ´æ‰€ã¯ :file:`/etc/ansible/plugin_filters.yml` ã§ã™ã€‚ansible.cfg ã® ``defaults`` セクションã«ã‚ã‚‹ :ref:`PLUGIN_FILTERS_CFG` ã®è¨­å®šã‚’使用ã—ã¦ã€æ‹’å¦ãƒªã‚¹ãƒˆã®åˆ¥ã®ãƒ‘ã‚¹ã‚’é¸æŠžã§ãã¾ã™ã€‚ä»¥ä¸‹ã«æ‹’å¦ãƒªã‚¹ãƒˆã®ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/plugin_filtering_config.rst:18 msgid "The file contains two fields:" msgstr "ã“ã®ãƒ•ァイルã«ã¯ã€2 ã¤ã®ãƒ•ィールドãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/plugin_filtering_config.rst:20 msgid "A file version so that you can update the format while keeping backwards compatibility in the future. The present version should be the string, ``\"1.0\"``" msgstr "å°†æ¥çš„ã«å¾Œæ–¹äº’æ›æ€§ã‚’ä¿ã¡ãªãŒã‚‰å½¢å¼ã‚’æ›´æ–°ã§ãるよã†ã«ã™ã‚‹ãƒ•ァイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ ``\"1.0\"`` 文字列ã¨ã—ã¾ã™ã€‚" #: ../../rst/user_guide/plugin_filtering_config.rst:22 msgid "A list of modules to reject. Ansible will not load any module in this list when it searches for a module to invoke for a task." msgstr "æ‹’å¦ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒªã‚¹ãƒˆã€‚Ansible ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’検索ã—ã¦ã‚¿ã‚¹ã‚¯ã‚’呼ã³å‡ºã™ã¨ãã«ã€ã“ã®ãƒªã‚¹ãƒˆã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’読ã¿è¾¼ã¿ã¾ã›ã‚“。" #: ../../rst/user_guide/plugin_filtering_config.rst:26 msgid "The ``stat`` module is required for Ansible to run. Do not add this module to your reject list." msgstr "Ansible を実行ã™ã‚‹ã«ã¯ã€``stat`` モジュールãŒå¿…è¦ã§ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æ‹’å¦ãƒªã‚¹ãƒˆã«è¿½åŠ ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/quickstart.rst:4 msgid "Ansible Quickstart Guide" msgstr "Ansible クイックスタートガイド" #: ../../rst/user_guide/quickstart.rst:6 msgid "We've recorded a short video that introduces Ansible." msgstr "Ansible を紹介ã™ã‚‹çŸ­ã„動画を作æˆã—ã¾ã—ãŸã€‚" #: ../../rst/user_guide/quickstart.rst:8 msgid "The `quickstart video `_ is about 13 minutes long and gives you a high level introduction to Ansible -- what it does and how to use it. We'll also tell you about other products in the Ansible ecosystem." msgstr "`クイックスタートã®å‹•ç”» `_ ã¯ç´„ 13 分ã§ã€Ansible ãŒä½•ã‚’ã™ã‚‹ã®ã‹ã€ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚‹ã®ã‹ãªã©ã€Ansible を高レベルã§ç´¹ä»‹ã—ã¦ã„ã¾ã™ã€‚ã¾ãŸã€Ansible ã®ã‚¨ã‚³ã‚·ã‚¹ãƒ†ãƒ ã«ãŠã‘ã‚‹ä»–ã®è£½å“ã«ã¤ã„ã¦ã‚‚ã”紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/quickstart.rst:11 msgid "Enjoy, and be sure to visit the rest of the documentation to learn more." msgstr "å‹•ç”»ã‚’ãŠæ¥½ã—ã¿ãã ã•ã„。より詳細ãªèª¬æ˜Žã¯ã€æœ¬ã‚¬ã‚¤ãƒ‰ã‚’ã”覧ãã ã•ã„。" #: ../../rst/user_guide/quickstart.rst:15 msgid "`A system administrators guide to getting started with Ansible `_" msgstr "`A system administrators guide to getting started with Ansible `_" #: ../../rst/user_guide/quickstart.rst:16 msgid "A step by step introduction to Ansible" msgstr "Ansible ã®æ¦‚è¦ (ステップãƒã‚¤ã‚¹ãƒ†ãƒƒãƒ—)" #: ../../rst/user_guide/quickstart.rst:17 msgid "`Ansible Automation for SysAdmins `_" msgstr "`Ansible Automation for SysAdmins `_" #: ../../rst/user_guide/quickstart.rst:18 msgid "A downloadable guide for getting started with Ansible" msgstr "Ansible を使ã„å§‹ã‚ã‚‹ãŸã‚ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å¯èƒ½ãªã‚¬ã‚¤ãƒ‰" #: ../../rst/user_guide/quickstart.rst:19 msgid ":ref:`network_getting_started`" msgstr ":ref:`network_getting_started`" #: ../../rst/user_guide/quickstart.rst:20 msgid "A guide for network engineers using Ansible for the first time" msgstr "ã¯ã˜ã‚㦠Ansible を使用ã™ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã®ãŸã‚ã®ã‚¬ã‚¤ãƒ‰" #: ../../rst/user_guide/sample_setup.rst:5 msgid "Sample Ansible setup" msgstr "Ansible 設定ã®ä¾‹" #: ../../rst/user_guide/sample_setup.rst:7 msgid "You have learned about playbooks, inventory, roles, and variables. This section pulls all those elements together, outlining a sample setup for automating a web service. You can find more example playbooks illustrating these patterns in our `ansible-examples repository `_. (NOTE: These may not use all of the features in the latest release, but are still an excellent reference!)." msgstr "ã“ã“ã¾ã§ã€Playbookã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€ãƒ­ãƒ¼ãƒ«ã€ãŠã‚ˆã³å¤‰æ•°ã«ã¤ã„ã¦å­¦ã‚“ã§ãã¾ã—ãŸã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ã“れらã®è¦ç´ ã‚’ã¾ã¨ã‚ã¦ã€Web サービスを自動化ã™ã‚‹ãŸã‚ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ã‚µãƒ³ãƒ—ルを紹介ã—ã¾ã™ã€‚ã“れらã®ãƒ‘ターンを示㙠Playbook ã®ä¾‹ã¯ã€`ansible-examples リãƒã‚¸ãƒˆãƒªãƒ¼ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„ (注: 最新ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã™ã¹ã¦ã®æ©Ÿèƒ½ã‚’使用ã—ã¦ã„ãªã„å ´åˆãŒã‚りã¾ã™ãŒã€ãれã§ã‚‚優れãŸå‚考資料ã¨ãªã‚Šã¾ã™)。" #: ../../rst/user_guide/sample_setup.rst:9 msgid "The sample setup organizes playbooks, roles, inventory, and variables files by function, with tags at the play and task level for greater granularity and control. This is a powerful and flexible approach, but there are other ways to organize Ansible content. Your usage of Ansible should fit your needs, not ours, so feel free to modify this approach and organize your content as you see fit." msgstr "サンプルã®è¨­å®šã§ã¯ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã€å¤‰æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ©Ÿèƒ½åˆ¥ã«æ•´ç†ã—ã€ãƒ—レイやタスクã®ãƒ¬ãƒ™ãƒ«ã§ã‚¿ã‚°ã‚’付ã‘ã¦ã€ã‚ˆã‚Šè©³ç´°ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã—ã¦ã„ã¾ã™ã€‚ã“れã¯å¼·åŠ›ã§æŸ”軟ãªã‚¢ãƒ—ローãƒã§ã™ãŒã€Ansible ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æ•´ç†ã™ã‚‹æ–¹æ³•ã¯ä»–ã«ã‚‚ã‚りã¾ã™ã€‚Ansible ã®ä½¿ç”¨æ–¹æ³•ã¯ã€ç§ãŸã¡ã®ãƒ‹ãƒ¼ã‚ºã§ã¯ãªãã€ä½¿ç”¨ã™ã‚‹äººã‚„組織ã®ãƒ‹ãƒ¼ã‚ºã«åˆã‚ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã“ã®ã‚¢ãƒ—ローãƒã‚’自由ã«å¤‰æ›´ã—ã¦ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’é©åˆ‡ã«æ•´ç†ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/sample_setup.rst:15 msgid "Sample directory layout" msgstr "ディレクトリーレイアウトã®ä¾‹" #: ../../rst/user_guide/sample_setup.rst:17 msgid "This layout organizes most tasks in roles, with a single inventory file for each environment and a few playbooks in the top-level directory::" msgstr "ã“ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã§ã¯ã€ã»ã¨ã‚“ã©ã®ã‚¿ã‚¹ã‚¯ãŒãƒ­ãƒ¼ãƒ«ã”ã¨ã«æ•´ç†ã•れã¦ãŠã‚Šã€ç’°å¢ƒã”ã¨ã« 1 ã¤ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ãƒ•ァイルを作æˆã—ã€ãƒˆãƒƒãƒ—レベルã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã„ãã¤ã‹ã® Playbook ã‚’ç½®ã„ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:64 msgid "By default, Ansible assumes your playbooks are stored in one directory with roles stored in a sub-directory called ``roles/``. As you use Ansible to automate more tasks, you may want to move your playbooks into a sub-directory called ``playbooks/``. If you do this, you must configure the path to your ``roles/`` directory using the ``roles_path`` setting in ansible.cfg." msgstr "デフォルトã§ã¯ã€Ansible ã¯ã€Playbook ㌠``roles/`` ã¨ã„ã†åå‰ã®ã‚µãƒ–ディレクトリーã«ä¿å­˜ã•れã¦ã„るロールをæŒã¤ 1 ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ä¿å­˜ã•れã¦ã„ã‚‹ã“ã¨ã‚’剿ã¨ã—ã¾ã™ã€‚Ansible を使用ã—ã¦ã‚ˆã‚Šå¤šãã®ã‚¿ã‚¹ã‚¯ã‚’自動化ã™ã‚‹å ´åˆã¯ã€Playbook ã‚’ ``playbooks/`` ã¨å‘¼ã°ã‚Œã‚‹ã‚µãƒ–ディレクトリーã«ç§»å‹•ã—ãŸã„å ´åˆãŒã‚りã¾ã™ã€‚ã“れを行ã†å ´åˆã¯ã€ansible.cfg ã® ``roles_path`` ã®è¨­å®šã‚’使用ã—ã¦ã€``roles/`` ディレクトリーã¸ã®ãƒ‘スを設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:67 msgid "Alternative directory layout" msgstr "代替ディレクトリーレイアウト" #: ../../rst/user_guide/sample_setup.rst:69 msgid "Alternatively you can put each inventory file with its ``group_vars``/``host_vars`` in a separate directory. This is particularly useful if your ``group_vars``/``host_vars`` don't have that much in common in different environments. The layout could look something like this::" msgstr "ã¾ãŸã€``group_vars``/``host_vars`` ã‚’å«ã‚€å„インベントリーファイルを別ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ç½®ãã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れã¯ã€``group_vars``/``host_vars`` ãŒç•°ãªã‚‹ç’°å¢ƒã§ã‚ã¾ã‚Šå…±é€šã—ã¦ã„ãªã„å ´åˆã«ç‰¹ã«æœ‰åйã§ã™ã€‚レイアウトã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:104 msgid "This layout gives you more flexibility for larger environments, as well as a total separation of inventory variables between different environments. However, this approach is harder to maintain, because there are more files. For more information on organizing group and host variables, see :ref:`splitting_out_vars`." msgstr "ã“ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«ã‚ˆã‚Šã€å¤§è¦æ¨¡ãªç’°å¢ƒã«ã‚‚柔軟ã«å¯¾å¿œã™ã‚‹ã“ã¨ãŒã§ãã€ç•°ãªã‚‹ç’°å¢ƒé–“ã§ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚’完全ã«åˆ†é›¢ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€ã“ã®æ–¹æ³•ã§ã¯ã€ãƒ•ァイル数ãŒå¤šããªã‚‹ãŸã‚ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒé›£ã—ããªã‚Šã¾ã™ã€‚グループ変数ã¨ãƒ›ã‚¹ãƒˆå¤‰æ•°ã®æ•´ç†ã®è©³ç´°ã¯ã€ã€Œ:ref:`splitting_out_vars`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/sample_setup.rst:109 msgid "Sample group and host variables" msgstr "グループ変数ãŠã‚ˆã³ãƒ›ã‚¹ãƒˆå¤‰æ•°ã®ä¾‹" #: ../../rst/user_guide/sample_setup.rst:111 msgid "These sample group and host variables files record the variable values that apply to each machine or group of machines. For instance, the data center in Atlanta has its own NTP servers, so when setting up ntp.conf, we should use them::" msgstr "ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—変数ã¨ãƒ›ã‚¹ãƒˆå¤‰æ•°ã®ã‚µãƒ³ãƒ—ルファイルã«ã¯ã€å„マシンやマシングループã«é©ç”¨ã•れる変数ã®å€¤ãŒè¨˜éŒ²ã•れã¦ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚¢ãƒˆãƒ©ãƒ³ã‚¿ã®ãƒ‡ãƒ¼ã‚¿ã‚»ãƒ³ã‚¿ãƒ¼ã«ã¯ç‹¬è‡ªã® NTP サーãƒãƒ¼ãŒã‚ã‚‹ãŸã‚ã€ntp.conf を設定ã™ã‚‹éš›ã«ã¯ã€ãれらを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:118 msgid "Similarly, the webservers have some configuration that does not apply to the database servers::" msgstr "åŒæ§˜ã«ã€Web サーãƒãƒ¼ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«ã¯é©ç”¨ã•れãªã„以下ã®ã‚ˆã†ãªè¨­å®šãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:125 msgid "Default values, or values that are universally true, belong in a file called group_vars/all::" msgstr "デフォルト値ã¾ãŸã¯æ±Žç”¨çš„ã« true ã§ã‚る値ãŒã‚ã‚‹å ´åˆã¯ã€ãれらを group_vars/all ã¨ã„ã†ãƒ•ァイルã«é…ç½®ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:132 msgid "If necessary, you can define specific hardware variance in systems in a host_vars file::" msgstr "å¿…è¦ã«å¿œã˜ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ã®ç‰¹å®šã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®å·®ç•°ã‚’ host_vars ファイルã«å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:139 msgid "Again, if you are using :ref:`dynamic inventory `, Ansible creates many dynamic groups automatically. So a tag like \"class:webserver\" would load in variables from the file \"group_vars/ec2_tag_class_webserver\" automatically." msgstr "繰り返ã—ã«ãªã‚Šã¾ã™ãŒã€:ref:`動的インベントリー ` を使用ã—ã¦ã„ã‚‹å ´åˆã€Ansible ã¯å¤šãã®å‹•的グループを自動的ã«ä½œæˆã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œclass:webserverã€ã®ã‚ˆã†ãªã‚¿ã‚°ã¯ã€ã€Œgroup_vars/ec2_tag_class_webserverã€ãƒ•ァイルã‹ã‚‰å¤‰æ•°ã‚’自動的ã«èª­ã¿è¾¼ã‚€ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:144 msgid "Sample playbooks organized by function" msgstr "é–¢æ•°åˆ¥ã«æ•´ç†ã•れ㟠Playbook ã®ã‚µãƒ³ãƒ—ル" #: ../../rst/user_guide/sample_setup.rst:146 msgid "With this setup, a single playbook can define all the infrastructure. The site.yml playbook imports two other playbooks, one for the webservers and one for the database servers::" msgstr "ã“ã®è¨­å®šã§ã¯ã€1 ã¤ã® Playbook ã§ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Playbook site.yml ã¯ã€Web サーãƒãƒ¼ç”¨ã¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ç”¨ã® 2 ã¤ã® Playbook をインãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:153 msgid "The webservers.yml file, also at the top level, maps the configuration of the webservers group to the roles related to the webservers group::" msgstr "åŒã˜ãトップレベルã«ã‚ã‚‹ webservers.yml ファイルã¯ã€webservers グループã®è¨­å®šã‚’ã€webservers グループã«é–¢é€£ã™ã‚‹ãƒ­ãƒ¼ãƒ«ã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:162 msgid "With this setup, you can configure your whole infrastructure by \"running\" site.yml, or run a subset by running webservers.yml. This is analogous to the Ansible \"--limit\" parameter but a little more explicit::" msgstr "ã“ã®è¨­å®šã«ã‚ˆã‚Šã€site.yml を「実行ã€ã—ã¦ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼å…¨ä½“を設定ã—ãŸã‚Šã€webservers.yml を実行ã—ã¦ã‚µãƒ–セットを設定ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€Ansible ã®ã€Œ--limitã€ãƒ‘ラメーターã«ä¼¼ã¦ã„ã¾ã™ãŒã€ã‚‚ã†å°‘ã—æ˜Žç¢ºã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:170 msgid "Sample task and handler files in a function-based role" msgstr "関数ベースã®ãƒ­ãƒ¼ãƒ«å†…ã®ã‚¿ã‚¹ã‚¯ãŠã‚ˆã³ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ã‚µãƒ³ãƒ—ルファイル" #: ../../rst/user_guide/sample_setup.rst:172 msgid "Ansible loads any file called ``main.yml`` in a role sub-directory. This sample ``tasks/main.yml`` file is simple - it sets up NTP, but it could do more if we wanted::" msgstr "Ansible ã¯ã€ãƒ­ãƒ¼ãƒ«ã®ã‚µãƒ–ディレクトリーã«ã‚ã‚‹ ``main.yml`` ファイルを読ã¿è¾¼ã¿ã¾ã™ã€‚ã“ã®ã‚µãƒ³ãƒ—ル㮠``tasks/main.yml`` ファイルã¯ã€NTP を設定ã™ã‚‹ã¨ã„ã†ã‚·ãƒ³ãƒ—ルãªã‚‚ã®ã§ã™ãŒã€å¿…è¦ã«å¿œã˜ã¦ã‚‚ã£ã¨å¤šãã®ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:198 msgid "Here is an example handlers file. As a review, handlers are only fired when certain tasks report changes, and are run at the end of each play::" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãƒ•ァイルã®ä¾‹ã‚’紹介ã—ã¾ã™ã€‚レビューã¨ã—ã¦ã€ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ç‰¹å®šã®ã‚¿ã‚¹ã‚¯ãŒå¤‰æ›´ã‚’報告ã—ãŸã¨ãã«ã®ã¿èµ·å‹•ã—ã€å„ãƒ—ãƒ¬ã‚¤ã®æœ€å¾Œã«å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:208 msgid "See :ref:`playbooks_reuse_roles` for more information." msgstr "詳細ã¯ã€ã€Œ:ref:`playbooks_reuse_roles`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/sample_setup.rst:214 msgid "What the sample setup enables" msgstr "è¨­å®šä¾‹ã®æœ‰åŠ¹åŒ–" #: ../../rst/user_guide/sample_setup.rst:216 msgid "The basic organizational structure described above enables a lot of different automation options. To reconfigure your entire infrastructure::" msgstr "上記ã®åŸºæœ¬çš„ãªçµ„織構造ã«ã‚ˆã‚Šã€å¤šãã®ç•°ãªã‚‹è‡ªå‹•化オプションãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚インフラストラクãƒãƒ£ãƒ¼å…¨ä½“ã‚’å†æ§‹æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:220 msgid "To reconfigure NTP on everything::" msgstr "å…¨é¢çš„ã« NTP ã‚’å†è¨­å®šã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:224 msgid "To reconfigure only the webservers::" msgstr "webservers ã®ã¿ã‚’å†è¨­å®šã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:228 msgid "To reconfigure only the webservers in Boston::" msgstr "Boston ã§ webservers ã®ã¿ã‚’å†è¨­å®šã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:232 msgid "To reconfigure only the first 10 webservers in Boston, and then the next 10::" msgstr "Boston ã§æœ€åˆã® 10 å°ã® webservers ã ã‘ã‚’å†è¨­å®šã—ã€æ¬¡ã® 10 å°ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:237 msgid "The sample setup also supports basic ad hoc commands::" msgstr "設定例ã§ã¯ã€åŸºæœ¬çš„ãªã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚‚サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:242 msgid "To discover what tasks would run or what hostnames would be affected by a particular Ansible command::" msgstr "実行ã™ã‚‹ã‚¿ã‚¹ã‚¯ã¾ãŸã¯ç‰¹å®šã® Ansible コマンドã®å½±éŸ¿ã‚’å—ã‘るホストåを検出ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:253 msgid "Organizing for deployment or configuration" msgstr "デプロイメントã¾ãŸã¯è¨­å®šã®æ•´ç†" #: ../../rst/user_guide/sample_setup.rst:255 msgid "The sample setup models a typical configuration topology. When doing multi-tier deployments, there are going to be some additional playbooks that hop between tiers to roll out an application. In this case, 'site.yml' may be augmented by playbooks like 'deploy_exampledotcom.yml' but the general concepts still apply. Ansible allows you to deploy and configure using the same tool, so you would likely reuse groups and keep the OS configuration in separate playbooks or roles from the app deployment." msgstr "ã“ã®ã‚µãƒ³ãƒ—ルã§ã¯ã€å…¸åž‹çš„ãªè¨­å®šãƒˆãƒãƒ­ã‚¸ãƒ¼ã‚’モデル化ã—ã¦ã„ã¾ã™ã€‚複数階層ã®ãƒ‡ãƒ—ロイメントを行ã†å ´åˆã¯ã€ã‚¢ãƒ—リケーションを展開ã™ã‚‹ãŸã‚ã«éšŽå±¤é–“ã‚’è¡Œãæ¥ã™ã‚‹ Playbook ãŒè¿½åŠ ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚ã“ã®å ´åˆã€ã€Œsite.ymlã€ã«ã¯ã€Œdeploy_exampledotcom.ymlã€ãªã©ã® Playbook ãŒè¿½åŠ ã•れã¾ã™ãŒã€ä¸€èˆ¬çš„ãªæ¦‚念ã¯å¤‰ã‚りã¾ã›ã‚“。Ansible ã§ã¯ã€ãƒ‡ãƒ—ロイã¨è¨­å®šã‚’åŒã˜ãƒ„ールã§è¡Œã†ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å†åˆ©ç”¨ã—ãŸã‚Šã€OS ã®è¨­å®šã‚’アプリã®ãƒ‡ãƒ—ロイã¨ã¯åˆ¥ã® Playbook やロールã«ã¾ã¨ã‚ãŸã‚Šã™ã‚‹ã“ã¨ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:259 msgid "Consider \"playbooks\" as a sports metaphor -- you can have one set of plays to use against all your infrastructure and situational plays that you use at different times and for different purposes." msgstr "「Playbookã€ã‚’スãƒãƒ¼ãƒ„ã«ä¾‹ãˆã¦è€ƒãˆã¦ã¿ã¾ã—ょã†ã€‚ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ•ラストラクãƒãƒ£ãƒ¼ã«å¯¾ã—ã¦ä½¿ç”¨ã™ã‚‹ 1 セットã®ãƒ—レイã¨ã€æ™‚ã¨å ´åˆã«å¿œã˜ã¦ä½¿ç”¨ã™ã‚‹çжæ³ã«å¿œã˜ãŸãƒ—レイãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/sample_setup.rst:264 msgid "Using local Ansible modules" msgstr "ローカル Ansible モジュールã®ä½¿ç”¨" #: ../../rst/user_guide/sample_setup.rst:266 msgid "If a playbook has a :file:`./library` directory relative to its YAML file, this directory can be used to add Ansible modules that will automatically be in the Ansible module path. This is a great way to keep modules that go with a playbook together. This is shown in the directory structure example at the start of this section." msgstr "Playbook ã«ã€YAML ファイルã«ç›¸å¯¾ã™ã‚‹ :file:`./library` ディレクトリーãŒã‚ã‚‹å ´åˆã¯ã€ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’使用ã—ã¦ã€è‡ªå‹•的㫠Ansible モジュールパスã«å«ã¾ã‚Œã‚‹ Ansible モジュールを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€Playbook ã«ä»˜éšã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ã¾ã¨ã‚ã¦ãŠãã®ã«æœ€é©ãªæ–¹æ³•ã§ã™ã€‚ã“れã¯ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®æœ€åˆã«ã‚るディレクトリー構造ã®ä¾‹ã§ç¤ºã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:5 ../../rst/user_guide/vault.rst:119 msgid "Encrypting content with Ansible Vault" msgstr "Ansible Vault を使用ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æš—å·åŒ–" #: ../../rst/user_guide/vault.rst:7 msgid "Ansible Vault encrypts variables and files so you can protect sensitive content such as passwords or keys rather than leaving it visible as plaintext in playbooks or roles. To use Ansible Vault you need one or more passwords to encrypt and decrypt content. If you store your vault passwords in a third-party tool such as a secret manager, you need a script to access them. Use the passwords with the :ref:`ansible-vault` command-line tool to create and view encrypted variables, create encrypted files, encrypt existing files, or edit, re-key, or decrypt files. You can then place encrypted content under source control and share it more safely." msgstr "Ansible Vault ã¯å¤‰æ•°ã‚„ファイルを暗å·åŒ–ã™ã‚‹ãŸã‚ã€ãƒ‘スワードやéµãªã©ã®æ©Ÿå¯†ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ Playbook やロールã®ä¸­ã§å¹³æ–‡ã®ã¾ã¾æ”¾ç½®ã™ã‚‹ã“ã¨ãªãä¿è­·ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible Vault を使用ã™ã‚‹ã«ã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æš—å·åŒ–ãŠã‚ˆã³å¾©å·ã‚’行ã†ãŸã‚ã« 1 ã¤ä»¥ä¸Šã®ãƒ‘スワードãŒå¿…è¦ã§ã™ã€‚シークレットマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãªã©ã®ã‚µãƒ¼ãƒ‰ãƒ‘ーティーツール㫠Vault ã®ãƒ‘スワードをä¿å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ãƒ‘スワードã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ã‚¹ã‚¯ãƒªãƒ—トãŒå¿…è¦ã§ã™ã€‚:ref:`ansible-vault` コマンドラインツールã§ãƒ‘スワードを使用ã—ã¦ã€æš—å·åŒ–ã•れãŸå¤‰æ•°ã®ä½œæˆã¨è¡¨ç¤ºã€æš—å·åŒ–ã•れãŸãƒ•ァイルã®ä½œæˆã€æ—¢å­˜ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–ã€ã¾ãŸã¯ãƒ•ァイルã®ç·¨é›†ã€éµã®å†è¨­å®šã€å¾©å·ã‚’行ã„ã¾ã™ã€‚ã¾ãŸã€æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„をソースコントロール下ã«ç½®ãã€ã‚ˆã‚Šå®‰å…¨ã«å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:10 msgid "Encryption with Ansible Vault ONLY protects 'data at rest'. Once the content is decrypted ('data in use'), play and plugin authors are responsible for avoiding any secret disclosure, see :ref:`no_log ` for details on hiding output and :ref:`vault_securing_editor` for security considerations on editors you use with Ansible Vault." msgstr "Ansible Vault ã«ã‚ˆã‚‹æš—å·åŒ–ã¯ã€ã€Œé™æ­¢çŠ¶æ…‹ã®ãƒ‡ãƒ¼ã‚¿ã€ã®ã¿ã‚’ä¿è­·ã—ã¾ã™ã€‚コンテンツãŒå¾©å·åŒ–ã•れãŸå¾Œ (「使用中ã®ãƒ‡ãƒ¼ã‚¿ã€)ã€ãƒ—レイやプラグインã®ä½œè€…ã¯ã€ç§˜å¯†ã®æ¼æ´©ã‚’回é¿ã™ã‚‹è²¬ä»»ãŒã‚りã¾ã™ã€‚出力ã®éžè¡¨ç¤ºã«é–¢ã™ã‚‹è©³ç´°ã¯ã€Œ:ref:`no_log `ã€ã‚’ã€Ansible Vault ã§ä½¿ç”¨ã™ã‚‹ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã«é–¢ã™ã‚‹è€ƒæ…®ç‚¹ã¯ã€Œ:ref:`vault_securing_editor`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:12 msgid "You can use encrypted variables and files in ad hoc commands and playbooks by supplying the passwords you used to encrypt them. You can modify your ``ansible.cfg`` file to specify the location of a password file or to always prompt for the password." msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ファイルã¯ã€æš—å·åŒ–ã«ä½¿ç”¨ã—ãŸãƒ‘スワードを入力ã™ã‚‹ã“ã¨ã§ã€ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚„ Playbook ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚``ansible.cfg`` ファイルを変更ã—ã¦ã€ãƒ‘スワードファイルã®å ´æ‰€ã‚’指定ã—ãŸã‚Šã€å¸¸ã«ãƒ‘スワードã®å…¥åŠ›ã‚’ä¿ƒã™ã‚ˆã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:18 msgid "Managing vault passwords" msgstr "Vault パスワードã®ç®¡ç†" #: ../../rst/user_guide/vault.rst:20 msgid "Managing your encrypted content is easier if you develop a strategy for managing your vault passwords. A vault password can be any string you choose. There is no special command to create a vault password. However, you need to keep track of your vault passwords. Each time you encrypt a variable or file with Ansible Vault, you must provide a password. When you use an encrypted variable or file in a command or playbook, you must provide the same password that was used to encrypt it. To develop a strategy for managing vault passwords, start with two questions:" msgstr "æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を管ç†ã™ã‚‹ã«ã¯ã€Vault ã®ãƒ‘スワードを管ç†ã™ã‚‹ãŸã‚ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’ç«‹ã¦ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚Vault パスワードã¯ä»»æ„ã®æ–‡å­—列ã§ã™ã€‚Vault パスワードを作æˆã™ã‚‹ãŸã‚ã®ç‰¹åˆ¥ãªã‚³ãƒžãƒ³ãƒ‰ã¯ã‚りã¾ã›ã‚“。ã—ã‹ã—ã€Vault パスワードを管ç†ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible Vault ã§å¤‰æ•°ã‚„ファイルを暗å·åŒ–ã™ã‚‹éš›ã¯ã€æ¯Žå›žãƒ‘スワードを入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ファイルをコマンドや Playbook ã§ä½¿ç”¨ã™ã‚‹éš›ã«ã¯ã€æš—å·åŒ–ã«ä½¿ç”¨ã—ãŸãƒ‘スワードを入力ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Vault ã®ãƒ‘スワードを管ç†ã™ã‚‹ãŸã‚ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ã‚’ç«‹ã¦ã‚‹ã«ã¯ã€æ¬¡ã® 2 ã¤ã®è³ªå•ã‹ã‚‰å§‹ã‚ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:22 msgid "Do you want to encrypt all your content with the same password, or use different passwords for different needs?" msgstr "åŒã˜ãƒ‘スワードã§ã™ã¹ã¦ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æš—å·åŒ–ã™ã‚‹å¿…è¦ãŒã‚Šã¾ã™ã‹ã€‚ã¾ãŸã¯ã€ç•°ãªã‚‹ãƒ‹ãƒ¼ã‚ºã«åˆã‚ã›ã¦ç•°ãªã‚‹ãƒ‘スワードを使用ã—ã¾ã™ã‹" #: ../../rst/user_guide/vault.rst:23 msgid "Where do you want to store your password or passwords?" msgstr "パスワードをã©ã“ã«ä¿å­˜ã—ã¾ã™ã‹ã€‚" #: ../../rst/user_guide/vault.rst:26 msgid "Choosing between a single password and multiple passwords" msgstr "1 ã¤ã®ãƒ‘スワードã¨è¤‡æ•°ã®ãƒ‘スワードã®é¸æŠž" #: ../../rst/user_guide/vault.rst:28 msgid "If you have a small team or few sensitive values, you can use a single password for everything you encrypt with Ansible Vault. Store your vault password securely in a file or a secret manager as described below." msgstr "少人数ã®ãƒãƒ¼ãƒ ã‚„機密性ã®é«˜ã„値ãŒå°‘ãªã„å ´åˆã¯ã€Ansible Vault ã§æš—å·åŒ–ã™ã‚‹ã™ã¹ã¦ã®ã‚‚ã®ã« 1 ã¤ã®ãƒ‘スワードを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Vault ã®ãƒ‘スワードã¯ã€å¾Œè¿°ã™ã‚‹ã‚ˆã†ã«ãƒ•ァイルやシークレットマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«å®‰å…¨ã«ä¿ç®¡ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:30 msgid "If you have a larger team or many sensitive values, you can use multiple passwords. For example, you can use different passwords for different users or different levels of access. Depending on your needs, you might want a different password for each encrypted file, for each directory, or for each environment. For example, you might have a playbook that includes two vars files, one for the dev environment and one for the production environment, encrypted with two different passwords. When you run the playbook, select the correct vault password for the environment you are targeting, using a vault ID." msgstr "ãƒãƒ¼ãƒ ã®è¦æ¨¡ãŒå¤§ãã‹ã£ãŸã‚Šã€æ©Ÿå¯†æ€§ã®é«˜ã„値ãŒå¤šã„å ´åˆã¯ã€è¤‡æ•°ã®ãƒ‘スワードを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚„アクセスレベルã”ã¨ã«ç•°ãªã‚‹ãƒ‘スワードを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¿…è¦ã«å¿œã˜ã¦ã€æš—å·åŒ–ã—ãŸãƒ•ァイルã”ã¨ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã”ã¨ã€ã‚ã‚‹ã„ã¯ç’°å¢ƒã”ã¨ã«ç•°ãªã‚‹ãƒ‘スワードãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€é–‹ç™ºç’°å¢ƒç”¨ã¨å®Ÿç¨¼åƒç’°å¢ƒç”¨ã® 2 ã¤ã® vars ファイルをå«ã‚€ Playbook を作æˆã—ã€2 ã¤ã®ç•°ãªã‚‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã™ã‚‹å ´åˆãªã©ã§ã™ã€‚Playbook を実行ã™ã‚‹éš›ã«ã¯ã€Vault ID を使用ã—ã¦ã€å¯¾è±¡ã¨ãªã‚‹ç’°å¢ƒã«é©ã—㟠Vault ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:35 msgid "Managing multiple passwords with vault IDs" msgstr "Vault ID を使用ã—ãŸè¤‡æ•°ãƒ‘スワードã®ç®¡ç†" #: ../../rst/user_guide/vault.rst:37 msgid "If you use multiple vault passwords, you can differentiate one password from another with vault IDs. You use the vault ID in three ways:" msgstr "複数㮠Vault パスワードを使用ã™ã‚‹å ´åˆã¯ã€Vault ID ã‹ã‚‰åˆ¥ã®ãƒ‘スワードを区別ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下㮠3 ã¤ã®æ–¹æ³•ã§ Vault ID を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:39 msgid "Pass it with :option:`--vault-id ` to the :ref:`ansible-vault` command when you create encrypted content" msgstr "æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä½œæˆæ™‚ã«ã€:option:`--vault-id ` ã‚’ :ref:`ansible-vault` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:40 msgid "Include it wherever you store the password for that vault ID (see :ref:`storing_vault_passwords`)" msgstr "ãã® Vault ID ã®ãƒ‘スワードをä¿å­˜ã™ã‚‹å ´æ‰€ã‚’追加ã—ã¾ã™ (「:ref:`storing_vault_passwords`ã€ã‚’å‚ç…§)。" #: ../../rst/user_guide/vault.rst:41 msgid "Pass it with :option:`--vault-id ` to the :ref:`ansible-playbook` command when you run a playbook that uses content you encrypted with that vault ID" msgstr "Vault ID ã§æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を使用ã™ã‚‹ Playbook を実行ã™ã‚‹éš›ã«ã€ã“れを :option:`--vault-id ` ã§ :ref:`ansible-playbook` ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:43 msgid "When you pass a vault ID as an option to the :ref:`ansible-vault` command, you add a label (a hint or nickname) to the encrypted content. This label documents which password you used to encrypt it. The encrypted variable or file includes the vault ID label in plain text in the header. The vault ID is the last element before the encrypted content. For example::" msgstr ":ref:`ansible-vault` コマンドã®ã‚ªãƒ—ションã¨ã—㦠Vault ID を渡ã™ã¨ã€æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ãƒ©ãƒ™ãƒ« (ヒントやニックãƒãƒ¼ãƒ ) ãŒè¿½åŠ ã•れã¾ã™ã€‚ã“ã®ãƒ©ãƒ™ãƒ«ã¯ã€ã©ã®ãƒ‘スワードを使用ã—ã¦æš—å·åŒ–ã—ãŸã‹ã‚’記録ã—ã¾ã™ã€‚æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ファイルã¯ã€ãƒ˜ãƒƒãƒ€ãƒ¼ã«å¹³æ–‡ã§ Vault ID ラベルをå«ã¿ã¾ã™ã€‚Vault ID ã¯æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å‰ã®æœ€å¾Œã®è¦ç´ ã§ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:53 msgid "In addition to the label, you must provide a source for the related password. The source can be a prompt, a file, or a script, depending on how you are storing your vault passwords. The pattern looks like this:" msgstr "ラベルã«åŠ ãˆã¦ã€é–¢é€£ã™ã‚‹ãƒ‘スワードã®ã‚½ãƒ¼ã‚¹ã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ソースã¯ã€Vault パスワードをã©ã®ã‚ˆã†ã«ä¿å­˜ã™ã‚‹ã‹ã«ã‚ˆã£ã¦ã€ãƒ—ロンプトã€ãƒ•ァイルã€ã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ—トã«ãªã‚Šã¾ã™ã€‚ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:59 msgid "If your playbook uses multiple encrypted variables or files that you encrypted with different passwords, you must pass the vault IDs when you run that playbook. You can use :option:`--vault-id ` by itself, with :option:`--vault-password-file `, or with :option:`--ask-vault-pass `. The pattern is the same as when you create encrypted content: include the label and the source for the matching password." msgstr "Playbook ãŒè¤‡æ•°ã®æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ã€ç•°ãªã‚‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã—ãŸãƒ•ァイルを使用ã™ã‚‹å ´åˆã¯ã€ãã® Playbook を実行ã™ã‚‹éš›ã« Vault ID を渡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚:option:`--vault-id ` ã‚’å˜ç‹¬ã§ã€ã‚‚ã—ã㯠:option:`--vault-password-file ` ã¾ãŸã¯ :option:`--ask-vault-pass ` ã¨ä¸€ç·’ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚パターンã¯ã€æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を作æˆã™ã‚‹ã¨ãã¨åŒã˜ã§ã€ä¸€è‡´ã™ã‚‹ãƒ‘スワードã®ãƒ©ãƒ™ãƒ«ã¨ã‚½ãƒ¼ã‚¹ã‚’å«ã‚ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:61 msgid "See below for examples of encrypting content with vault IDs and using content encrypted with vault IDs. The :option:`--vault-id ` option works with any Ansible command that interacts with vaults, including :ref:`ansible-vault`, :ref:`ansible-playbook`, and so on." msgstr "Vault ID ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æš—å·åŒ–ã™ã‚‹ä¾‹ã¨ã€Vault ID ã§æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を使用ã™ã‚‹ä¾‹ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。:option:`--vault-id ` オプションã¯ã€:ref:`ansible-vault`ã€:ref:`ansible-playbook` ãªã©ã€Vault ã¨ç›¸äº’作用ã™ã‚‹ã™ã¹ã¦ã® Ansible コマンドã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:64 msgid "Limitations of vault IDs" msgstr "Vault ID ã®åˆ¶é™" #: ../../rst/user_guide/vault.rst:66 msgid "Ansible does not enforce using the same password every time you use a particular vault ID label. You can encrypt different variables or files with the same vault ID label but different passwords. This usually happens when you type the password at a prompt and make a mistake. It is possible to use different passwords with the same vault ID label on purpose. For example, you could use each label as a reference to a class of passwords, rather than a single password. In this scenario, you must always know which specific password or file to use in context. However, you are more likely to encrypt two files with the same vault ID label and different passwords by mistake. If you encrypt two files with the same label but different passwords by accident, you can :ref:`rekey ` one file to fix the issue." msgstr "Ansible ã¯ã€ç‰¹å®šã® Vault ID ラベルを使用ã™ã‚‹ãŸã³ã«åŒã˜ãƒ‘スワードを使用ã™ã‚‹ã“ã¨ã‚’強制ã—ã¾ã›ã‚“。異ãªã‚‹å¤‰æ•°ã‚„ファイルをã€åŒã˜ Vault ID ラベルã§ç•°ãªã‚‹ãƒ‘スワードを使用ã—ã¦æš—å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯é€šå¸¸ã€ãƒ—ロンプトã§ãƒ‘スワードを入力ã—ã¦é–“é•ãˆãŸå ´åˆã«èµ·ã“りã¾ã™ã€‚æ„図的ã«ã€åŒã˜ Vault ID ラベルã§ç•°ãªã‚‹ãƒ‘スワードを使用ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ã€‚ãŸã¨ãˆã°ã€å„ラベルをã€å˜ä¸€ã®ãƒ‘スワードã§ã¯ãªãã€ãƒ‘スワードã®ã‚¯ãƒ©ã‚¹ã¸ã®å‚ç…§ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚·ãƒŠãƒªã‚ªã§ã¯ã€ã©ã®ç‰¹å®šã®ãƒ‘スワードã¾ãŸã¯ãƒ•ァイルを使用ã™ã‚‹ã‹ã‚’常ã«ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã§çŸ¥ã£ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚ã—ã‹ã—ã€èª¤ã£ã¦åŒã˜ Vault ID ラベルã¨ç•°ãªã‚‹ãƒ‘スワードを使用ã™ã‚‹ 2 ã¤ã®ãƒ•ァイルを暗å·åŒ–ã—ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒé«˜ããªã‚Šã¾ã™ã€‚誤ã£ã¦åŒã˜ãƒ©ãƒ™ãƒ«ã§ç•°ãªã‚‹ãƒ‘スワード㮠2 ã¤ã®ãƒ•ァイルを暗å·åŒ–ã—ã¦ã—ã¾ã£ãŸå ´åˆã¯ã€1ã¤ã®ãƒ•ァイル㧠:ref:`rekey ` を行ã£ã¦å•題を解決ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:69 msgid "Enforcing vault ID matching" msgstr "Vault ID 一致ã®å¼·åˆ¶" #: ../../rst/user_guide/vault.rst:71 msgid "By default the vault ID label is only a hint to remind you which password you used to encrypt a variable or file. Ansible does not check that the vault ID in the header of the encrypted content matches the vault ID you provide when you use the content. Ansible decrypts all files and variables called by your command or playbook that are encrypted with the password you provide. To check the encrypted content and decrypt it only when the vault ID it contains matches the one you provide with ``--vault-id``, set the config option :ref:`DEFAULT_VAULT_ID_MATCH`. When you set :ref:`DEFAULT_VAULT_ID_MATCH`, each password is only used to decrypt data that was encrypted with the same label. This is efficient, predictable, and can reduce errors when different values are encrypted with different passwords." msgstr "デフォルトã§ã¯ã€Vault ID ラベルã¯ã€å¤‰æ•°ã‚„ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–ã«ã©ã®ãƒ‘スワードを使用ã—ãŸã‹ã‚’æ€ã„出ã•ã›ã‚‹ãŸã‚ã®ãƒ’ントã«éŽãŽã¾ã›ã‚“。Ansible ã¯ã€æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«ã‚ã‚‹ Vault ID ãŒã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä½¿ç”¨æ™‚ã«æŒ‡å®šã—㟠Vault ID ã¨ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã¯ãƒã‚§ãƒƒã‚¯ã—ã¾ã›ã‚“。Ansible ã¯ã€æŒ‡å®šã—ãŸãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã•れãŸã‚³ãƒžãƒ³ãƒ‰ã¾ãŸã¯ Playbook ã«ã‚ˆã£ã¦å‘¼ã³å‡ºã•れãŸã™ã¹ã¦ã®ãƒ•ァイルãŠã‚ˆã³å¤‰æ•°ã‚’復å·ã—ã¾ã™ã€‚æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«å«ã¾ã‚Œã‚‹ Vault ID ㌠``--vault-id`` ã§æŒ‡å®šã—ãŸã‚‚ã®ã¨ä¸€è‡´ã—ãŸå ´åˆã«ã®ã¿æš—å·åŒ–を解除ã™ã‚‹ã«ã¯ã€è¨­å®šã‚ªãƒ—ション :ref:`DEFAULT_VAULT_ID_MATCH` を設定ã—ã¾ã™ã€‚:ref:`DEFAULT_VAULT_ID_MATCH` を設定ã™ã‚‹ã¨ã€å„パスワードã¯åŒã˜ãƒ©ãƒ™ãƒ«ã§æš—å·åŒ–ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’復å·ã™ã‚‹ãŸã‚ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚ã“れã¯åŠ¹çŽ‡çš„ã§äºˆæ¸¬å¯èƒ½ã§ã‚りã€ç•°ãªã‚‹å€¤ãŒç•°ãªã‚‹ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã•れãŸå ´åˆã®ã‚¨ãƒ©ãƒ¼ã‚’減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:74 msgid "Even with the :ref:`DEFAULT_VAULT_ID_MATCH` setting enabled, Ansible does not enforce using the same password every time you use a particular vault ID label." msgstr ":ref:`DEFAULT_VAULT_ID_MATCH` ã®è¨­å®šãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ç‰¹å®šã® Vault ID ラベルを使用ã™ã‚‹ãŸã³ã«ã€Ansible ã¯åŒã˜ãƒ‘スワードã®ä½¿ç”¨ã‚’強制ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/vault.rst:79 msgid "Storing and accessing vault passwords" msgstr "Vault パスワードã®ä¿å­˜ãŠã‚ˆã³ã‚¢ã‚¯ã‚»ã‚¹" #: ../../rst/user_guide/vault.rst:81 msgid "You can memorize your vault password, or manually copy vault passwords from any source and paste them at a command-line prompt, but most users store them securely and access them as needed from within Ansible. You have two options for storing vault passwords that work from within Ansible: in files, or in a third-party tool such as the system keyring or a secret manager. If you store your passwords in a third-party tool, you need a vault password client script to retrieve them from within Ansible." msgstr "Valut パスワードを記憶ã—ãŸã‚Šã€Valut パスワードを任æ„ã®ã‚½ãƒ¼ã‚¹ã‹ã‚‰æ‰‹å‹•ã§ã‚³ãƒ”ーã—ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ãƒ—ロンプトã«è²¼ã‚Šä»˜ã‘ãŸã‚Šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å®‰å…¨ã«ä¿ç®¡ã—ã€å¿…è¦ã«å¿œã˜ã¦ Ansible 内ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚Ansible å†…ã§æ©Ÿèƒ½ã™ã‚‹ Valut パスワードã®ä¿ç®¡æ–¹æ³•ã«ã¯ã€ãƒ•ァイルã«ä¿ç®¡ã™ã‚‹æ–¹æ³•ã¨ã€ã‚·ã‚¹ãƒ†ãƒ ã‚­ãƒ¼ãƒªãƒ³ã‚°ã‚„シークレットマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãªã©ã®ã‚µãƒ¼ãƒ‰ãƒ‘ーティーツールã«ä¿ç®¡ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã™ã€‚サードパーティーã®ãƒ„ールã«ãƒ‘スワードをä¿å­˜ã™ã‚‹å ´åˆã€Ansible 内ã‹ã‚‰ãƒ‘スワードをå–å¾—ã™ã‚‹ã«ã¯ã€Vault パスワードクライアントスクリプトãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:84 msgid "Storing passwords in files" msgstr "パスワードã®ãƒ•ァイルã¸ã®ä¿å­˜" #: ../../rst/user_guide/vault.rst:86 msgid "To store a vault password in a file, enter the password as a string on a single line in the file. Make sure the permissions on the file are appropriate. Do not add password files to source control." msgstr "Vault ã®ãƒ‘スワードをファイルã«ä¿å­˜ã™ã‚‹ã«ã¯ã€ãƒ•ァイル㮠1 行ã«ãƒ‘スワードを文字列ã§å…¥åŠ›ã—ã¾ã™ã€‚ファイルã®ãƒ‘ーミッションãŒé©åˆ‡ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。パスワードファイルをソースコントロールã«è¿½åŠ ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:91 msgid "Storing passwords in third-party tools with vault password client scripts" msgstr "Vault パスワードクライアントスクリプトを使用ã—ãŸã‚µãƒ¼ãƒ‰ãƒ‘ーティーツールã¸ã®ãƒ‘スワードã®ä¿å­˜" #: ../../rst/user_guide/vault.rst:93 msgid "You can store your vault passwords on the system keyring, in a database, or in a secret manager and retrieve them from within Ansible using a vault password client script. Enter the password as a string on a single line. If your password has a vault ID, store it in a way that works with your password storage tool." msgstr "Valut パスワードã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã‚­ãƒ¼ãƒªãƒ³ã‚°ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ã¾ãŸã¯ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«ä¿å­˜ã—ã€Valut パスワードクライアントスクリプトを使用ã—㦠Ansible 内ã‹ã‚‰å–り出ã™ã“ã¨ãŒã§ãã¾ã™ã€‚パスワード㯠1 è¡Œã®æ–‡å­—列ã¨ã—ã¦å…¥åŠ›ã—ã¾ã™ã€‚パスワード㫠Vault ID ãŒã‚ã‚‹å ´åˆã¯ã€ãƒ‘スワードä¿å­˜ãƒ„ールã¨é€£æºã™ã‚‹æ–¹æ³•ã§ä¿å­˜ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:95 msgid "To create a vault password client script:" msgstr "Vault パスワードクライアントスクリプトを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:97 msgid "Create a file with a name ending in either ``-client`` or ``-client.EXTENSION``" msgstr "``-client`` ã¾ãŸã¯ ``-client.EXTENSION`` ã§çµ‚ã‚ã‚‹åå‰ã§ãƒ•ァイルを作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:98 msgid "Make the file executable" msgstr "ファイルを実行å¯èƒ½ãªçŠ¶æ…‹ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:102 msgid "Within the script itself:" msgstr "スクリプト自体:" #: ../../rst/user_guide/vault.rst:100 msgid "Print the passwords to standard output" msgstr "標準出力ã«ãƒ‘スワードを出力ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:101 msgid "Accept a ``--vault-id`` option" msgstr "``--vault-id`` オプションを許å¯ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:102 msgid "If the script prompts for data (for example, a database password), send the prompts to standard error" msgstr "スクリプトãŒãƒ‡ãƒ¼ã‚¿ã‚’è¦æ±‚ã™ã‚‹å ´åˆ (例: データベースパスワード) ã«ã¯ã€ãƒ—ロンプトを標準エラーã«é€ä¿¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:104 msgid "When you run a playbook that uses vault passwords stored in a third-party tool, specify the script as the source within the ``--vault-id`` flag. For example:" msgstr "サードパーティーã®ãƒ„ールã«ä¿å­˜ã•れã¦ã„ã‚‹ Vault パスワードを使用ã™ã‚‹ Playbook を実行ã™ã‚‹å ´åˆã¯ã€``--vault-id`` フラグ内ã§ã‚¹ã‚¯ãƒªãƒ—トをソースã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚以下を例ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:110 msgid "Ansible executes the client script with a ``--vault-id`` option so the script knows which vault ID label you specified. For example a script loading passwords from a secret manager can use the vault ID label to pick either the 'dev' or 'prod' password. The example command above results in the following execution of the client script:" msgstr "Ansible ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚¹ã‚¯ãƒªãƒ—トを ``--vault-id`` オプション付ãã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã€ã‚¹ã‚¯ãƒªãƒ—ãƒˆã¯æŒ‡å®šã•れ㟠Vault ID ラベルを知るã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‹ã‚‰ãƒ‘スワードを読ã¿è¾¼ã‚€ã‚¹ã‚¯ãƒªãƒ—トã¯ã€Vault ID ラベルを使用ã—ã¦ã€ã€Œdevã€ã¾ãŸã¯ã€Œprodã€ã®ã„ãšã‚Œã‹ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’é¸æŠžã§ãã¾ã™ã€‚上記ã®ã‚³ãƒžãƒ³ãƒ‰ã®ä¾‹ã§ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œçµæžœã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:116 msgid "For an example of a client script that loads passwords from the system keyring, see the `vault-keyring-client script `_." msgstr "システムキーリングã‹ã‚‰ãƒ‘スワードを読ã¿è¾¼ã‚€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚¹ã‚¯ãƒªãƒ—トã®ä¾‹ã¯ã€:file:`vault-keyring-client script ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:121 msgid "Once you have a strategy for managing and storing vault passwords, you can start encrypting content. You can encrypt two types of content with Ansible Vault: variables and files. Encrypted content always includes the ``!vault`` tag, which tells Ansible and YAML that the content needs to be decrypted, and a ``|`` character, which allows multi-line strings. Encrypted content created with ``--vault-id`` also contains the vault ID label. For more details about the encryption process and the format of content encrypted with Ansible Vault, see :ref:`vault_format`. This table shows the main differences between encrypted variables and encrypted files:" msgstr "Vault ã®ãƒ‘スワードを管ç†ãŠã‚ˆã³ä¿ç®¡ã™ã‚‹ãŸã‚ã®ã‚¹ãƒˆãƒ©ãƒ†ã‚¸ãƒ¼ãŒã§ããŸã‚‰ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æš—å·åŒ–ã‚’é–‹å§‹ã§ãã¾ã™ã€‚Ansible Vault ã§ã¯ã€å¤‰æ•°ã¨ãƒ•ァイル㮠2 種類ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æš—å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã¯ã€å¿…ãš ``!vault`` ã‚¿ã‚°ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å¾©å·ãŒå¿…è¦ã§ã‚ã‚‹ã“ã¨ã‚’ Ansible 㨠YAML ã«ä¼ãˆã‚‹ã‚‚ã®ã§ã€è¤‡æ•°è¡Œã®æ–‡å­—列をå¯èƒ½ã«ã™ã‚‹ ``|`` 文字もå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚``--vault-id`` ã§ä½œæˆã•ã‚ŒãŸæš—å·åŒ–コンテンツã«ã¯ã€Vault ID ラベルもå«ã¾ã‚Œã¾ã™ã€‚Ansible Vault ã«ãŠã‘ã‚‹æš—å·åŒ–プロセスã¨å½¢å¼ã®è©³ç´°ã¯ã€ã€Œ:ref:`vault_format`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®è¡¨ã¯ã€æš—å·åŒ–ã•れãŸå¤‰æ•°ã¨æš—å·åŒ–ã•れãŸãƒ•ァイルã®ä¸»ãªé•ã„を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:127 msgid "Encrypted variables" msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°" #: ../../rst/user_guide/vault.rst:127 msgid "Encrypted files" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイル" #: ../../rst/user_guide/vault.rst:129 msgid "How much is encrypted?" msgstr "ã©ã®ãã‚‰ã„æš—å·åŒ–ã•れã¦ã„ã‚‹ã®ã‹" #: ../../rst/user_guide/vault.rst:129 msgid "Variables within a plaintext file" msgstr "平文ファイル内ã®å¤‰æ•°" #: ../../rst/user_guide/vault.rst:129 msgid "The entire file" msgstr "ファイル全体" #: ../../rst/user_guide/vault.rst:131 msgid "When is it decrypted?" msgstr "復å·ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°" #: ../../rst/user_guide/vault.rst:131 msgid "On demand, only when needed" msgstr "オンデマンド㧠(å¿…è¦ãªå ´åˆã«ã®ã¿)" #: ../../rst/user_guide/vault.rst:131 msgid "Whenever loaded or referenced [#f1]_" msgstr "読ã¿è¾¼ã¿ã¾ãŸã¯å‚ç…§ã™ã‚‹å ´åˆ [#f1]_" #: ../../rst/user_guide/vault.rst:133 msgid "What can be encrypted?" msgstr "æš—å·åŒ–ã§ãã‚‹ã‚‚ã®" #: ../../rst/user_guide/vault.rst:133 msgid "Only variables" msgstr "変数ã®ã¿" #: ../../rst/user_guide/vault.rst:133 msgid "Any structured data file" msgstr "構造化データファイル" #: ../../rst/user_guide/vault.rst:137 msgid "Ansible cannot know if it needs content from an encrypted file unless it decrypts the file, so it decrypts all encrypted files referenced in your playbooks and roles." msgstr "Ansible ã¯ã€ãƒ•ァイルを復å·ã—ãªã„é™ã‚Šã€æš—å·åŒ–ã•れãŸãƒ•ァイルã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å¿…è¦ã¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’èªè­˜ã§ããªã„ãŸã‚ã€Playbook ãŠã‚ˆã³ãƒ­ãƒ¼ãƒ«ã§å‚ç…§ã•れる暗å·åŒ–ã•れãŸãƒ•ァイルをã™ã¹ã¦å¾©å·ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:143 msgid "Encrypting individual variables with Ansible Vault" msgstr "Ansible Vault ã«ã‚ˆã‚‹å€‹ã€…ã®å¤‰æ•°ã®æš—å·åŒ–" #: ../../rst/user_guide/vault.rst:145 msgid "You can encrypt single values inside a YAML file using the :ref:`ansible-vault encrypt_string ` command. For one way to keep your vaulted variables safely visible, see :ref:`tip_for_variables_and_vaults`." msgstr ":ref:`ansible-vault encrypt_string ` コマンドを使用ã—ã¦ã€YAML ファイル内㧠1 ã¤ã®å€¤ã‚’æš—å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Vault を使用ã—ãŸå¤‰æ•°ã‚’安全ã«è¡¨ç¤ºã§ãる方法ã¯ã€ã€Œ:ref:`tip_for_variables_and_vaults`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:148 msgid "Advantages and disadvantages of encrypting variables" msgstr "変数を暗å·åŒ–ã™ã‚‹ã“ã¨ã®åˆ©ç‚¹ãŠã‚ˆã³æ¬ ç‚¹" #: ../../rst/user_guide/vault.rst:150 msgid "With variable-level encryption, your files are still easily legible. You can mix plaintext and encrypted variables, even inline in a play or role. However, password rotation is not as simple as with file-level encryption. You cannot :ref:`rekey ` encrypted variables. Also, variable-level encryption only works on variables. If you want to encrypt tasks or other content, you must encrypt the entire file." msgstr "å¤‰æ•°ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã§ã¯ã€ãƒ•ァイルを簡å˜ã«èª­ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚平文ã®å¤‰æ•°ã¨æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚’混在ã•ã›ã‚‹ã“ã¨ãŒã§ãã€ãƒ—レイやロールã®ä¸­ã§ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã§ã‚‚使用ã§ãã¾ã™ã€‚ã—ã‹ã—ã€ãƒ‘スワードã®ãƒ­ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã®ã‚ˆã†ã«ç°¡å˜ã§ã¯ã‚りã¾ã›ã‚“。暗å·åŒ–ã•れãŸå¤‰æ•°ã« :ref:`éµã®å†è¨­å®š ` ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。ã¾ãŸã€å¤‰æ•°ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã¯å¤‰æ•°ã«å¯¾ã—ã¦ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚タスクやãã®ä»–ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æš—å·åŒ–ã™ã‚‹å ´åˆã¯ã€ãƒ•ァイル全体を暗å·åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:155 msgid "Creating encrypted variables" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルã®ä½œæˆ" #: ../../rst/user_guide/vault.rst:157 msgid "The :ref:`ansible-vault encrypt_string ` command encrypts and formats any string you type (or copy or generate) into a format that can be included in a playbook, role, or variables file. To create a basic encrypted variable, pass three options to the :ref:`ansible-vault encrypt_string ` command:" msgstr ":ref:`ansible-vault encrypt_string ` コマンドã¯ã€å…¥åŠ› (ã‚‚ã—ãã¯ã‚³ãƒ”ーã¾ãŸã¯ç”Ÿæˆ) ã—ãŸæ–‡å­—列を暗å·åŒ–ã—ã¦ã€Playbookã€ãƒ­ãƒ¼ãƒ«ã€å¤‰æ•°ãƒ•ァイルã«å«ã‚ã‚‹ã“ã¨ãŒã§ãã‚‹å½¢å¼ã«ã—ã¾ã™ã€‚åŸºæœ¬çš„ãªæš—å·åŒ–変数を作æˆã™ã‚‹ã«ã¯ã€:ref:`ansible-vault encrypt_string ` コマンド㫠3 ã¤ã®ã‚ªãƒ—ションを渡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:159 msgid "a source for the vault password (prompt, file, or script, with or without a vault ID)" msgstr "Vault パスワードã®ã‚½ãƒ¼ã‚¹ (プロンプトã€ãƒ•ァイルã€ã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ—トã€Vault ID ã‚り/ãªã—)" #: ../../rst/user_guide/vault.rst:160 msgid "the string to encrypt" msgstr "æš—å·åŒ–ã™ã‚‹æ–‡å­—列" #: ../../rst/user_guide/vault.rst:161 msgid "the string name (the name of the variable)" msgstr "文字列å (変数ã®åå‰)" #: ../../rst/user_guide/vault.rst:163 msgid "The pattern looks like this:" msgstr "パターンã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:169 msgid "For example, to encrypt the string 'foobar' using the only password stored in 'a_password_file' and name the variable 'the_secret':" msgstr "ãŸã¨ãˆã°ã€ã€Œa_password_fileã€ã«ä¿å­˜ã•れãŸãƒ‘スワードã®ã¿ã‚’使用ã—ã¦æ–‡å­—列を「foobarã€ã‚’æš—å·åŒ–ã™ã‚‹éš›ã«ã€å¤‰æ•°ã€Œthe_secretã€ã«åå‰ã‚’付ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:175 ../../rst/user_guide/vault.rst:191 msgid "The command above creates this content::" msgstr "上記ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ãªå†…容ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:185 msgid "To encrypt the string 'foooodev', add the vault ID label 'dev' with the 'dev' vault password stored in 'a_password_file', and call the encrypted variable 'the_dev_secret':" msgstr "文字列「foooodevã€ã‚’æš—å·åŒ–ã™ã‚‹ã«ã¯ã€Vault ID ラベル「devã€ã«ã€Œa_password_fileã€ã«æ ¼ç´ã•れã¦ã„る「devã€ã® Vault パスワードを追加ã—ã€æš—å·åŒ–ã•れãŸå¤‰æ•°ã€Œthe_dev_secretã€ã‚’呼ã³å‡ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:201 msgid "To encrypt the string 'letmein' read from stdin, add the vault ID 'dev' using the 'dev' vault password stored in `a_password_file`, and name the variable 'db_password':" msgstr "標準入力ã‹ã‚‰èª­ã¿è¾¼ã‚“ã æ–‡å­—列「letmeinã€ã‚’æš—å·åŒ–ã™ã‚‹ãŸã‚ã«ã€`a_password_file` ã«ä¿å­˜ã•れã¦ã„る「devã€ã® Vault ã®ãƒ‘スワードを使用ã—㦠Vault ID「devã€ã‚’追加ã—ã€å¤‰æ•°ã«ã€Œdb_passwordã€ã¨ã„ã†åå‰ã‚’付ã‘ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:209 msgid "Typing secret content directly at the command line (without a prompt) leaves the secret string in your shell history. Do not do this outside of testing." msgstr "秘密ã®å†…容をコマンドラインã§ç›´æŽ¥å…¥åŠ›ã™ã‚‹ã¨ (プロンプトãªã—)ã€ã‚·ã‚§ãƒ«ã®å±¥æ­´ã«ç§˜å¯†ã®æ–‡å­—åˆ—ãŒæ®‹ã‚Šã¾ã™ã€‚テスト時以外ã¯ã“ã®ã‚ˆã†ãªã“ã¨ã‚’ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:211 msgid "The command above creates this output::" msgstr "上記ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ä»¥ä¸‹ãŒå‡ºåŠ›ã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:222 msgid "To be prompted for a string to encrypt, encrypt it with the 'dev' vault password from 'a_password_file', name the variable 'new_user_password' and give it the vault ID label 'dev':" msgstr "æš—å·åŒ–ã™ã‚‹æ–‡å­—列ã®å…¥åŠ›ã‚’æ±‚ã‚られるãŸã‚ã€ã€Œa_password_fileã€ã®ã€Œdevã€ã® Vault ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã§æš—å·åŒ–ã—ã€å¤‰æ•°åを「new_user_passwordã€ã¨ã—ã€Vault ID ラベル「devã€ã‚’付与ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:228 msgid "The command above triggers this prompt:" msgstr "上記ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ãƒ—ロンプトãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:234 msgid "Type the string to encrypt (for example, 'hunter2'), hit ctrl-d, and wait." msgstr "æš—å·åŒ–ã™ã‚‹æ–‡å­—列 (「hunter2ã€ãªã©) を入力ã—ã€ctrl-d を押ã—ã¦ãŠå¾…ã¡ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:238 msgid "Do not press ``Enter`` after supplying the string to encrypt. That will add a newline to the encrypted value." msgstr "æš—å·åŒ–ã™ã‚‹æ–‡å­—列を指定ã—ãŸå¾Œã« ``Enter`` を押ã•ãªã„ã§ãã ã•ã„。暗å·åŒ–ã•れãŸå€¤ã«æ”¹è¡Œã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:240 msgid "The sequence above creates this output::" msgstr "上記ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒä½œæˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:250 msgid "You can add the output from any of the examples above to any playbook, variables file, or role for future use. Encrypted variables are larger than plain-text variables, but they protect your sensitive content while leaving the rest of the playbook, variables file, or role in plain text so you can easily read it." msgstr "上記ã®ä¾‹ã®å‡ºåŠ›ã‚’å°†æ¥ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã€ä»»æ„ã® Playbookã€å¤‰æ•°ãƒ•ァイルã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚æš—å·åŒ–ã•れãŸå¤‰æ•°ã¯ã€å¹³æ–‡ã®å¤‰æ•°ã‚ˆã‚Šã‚‚サイズãŒå¤§ãããªã‚Šã¾ã™ãŒã€æ©Ÿå¯†æ€§ã®é«˜ã„コンテンツをä¿è­·ã™ã‚‹ä¸€æ–¹ã§ã€Playbookã€å¤‰æ•°ãƒ•ァイルã€ã¾ãŸã¯ãƒ­ãƒ¼ãƒ«ã®æ®‹ã‚Šã®éƒ¨åˆ†ã¯å¹³æ–‡ã®ã¾ã¾ãªã¨ãªã‚‹ãŸã‚ã€ç°¡å˜ã«èª­ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:253 msgid "Viewing encrypted variables" msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°ã®è¡¨ç¤º" #: ../../rst/user_guide/vault.rst:255 msgid "You can view the original value of an encrypted variable using the debug module. You must pass the password that was used to encrypt the variable. For example, if you stored the variable created by the last example above in a file called 'vars.yml', you could view the unencrypted value of that variable like this:" msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°ã®å…ƒã®å€¤ã¯ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ã¦è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®éš›ã«ã¯ã€å¤‰æ•°ã®æš—å·åŒ–ã«ä½¿ç”¨ã—ãŸãƒ‘スワードを渡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä¸Šè¨˜ã®æœ€å¾Œã®ä¾‹ã§ä½œæˆã—ãŸå¤‰æ•°ã‚’「vars.ymlã€ã¨ã„ã†ãƒ•ァイルã«ä¿å­˜ã—ãŸå ´åˆã«ã€ãã®å¤‰æ•°ã®æš—å·åŒ–ã•れã¦ã„ãªã„値を見るã«ã¯æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:267 msgid "Encrypting files with Ansible Vault" msgstr "Ansible Vault ã«ã‚ˆã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–" #: ../../rst/user_guide/vault.rst:269 msgid "Ansible Vault can encrypt any structured data file used by Ansible, including:" msgstr "Ansible Vault ã¯ã€Ansible ãŒä½¿ç”¨ã™ã‚‹ã‚らゆる構造化データファイルを暗å·åŒ–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:271 msgid "group variables files from inventory" msgstr "インベントリーã‹ã‚‰ã®ã‚°ãƒ«ãƒ¼ãƒ—変数ファイル" #: ../../rst/user_guide/vault.rst:272 msgid "host variables files from inventory" msgstr "インベントリーã‹ã‚‰ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ãƒ•ァイル" #: ../../rst/user_guide/vault.rst:273 msgid "variables files passed to ansible-playbook with ``-e @file.yml`` or ``-e @file.json``" msgstr "``-e @file.yml`` ã¾ãŸã¯ ``-e @file.json`` ã§ ansible-playbook ã«æ¸¡ã•れる変数ファイル" #: ../../rst/user_guide/vault.rst:274 msgid "variables files loaded by ``include_vars`` or ``vars_files``" msgstr "``include_vars`` ã¾ãŸã¯ ``vars_files`` ã«ã‚ˆã‚Šèª­ã¿è¾¼ã¾ã‚ŒãŸå¤‰æ•°ãƒ•ァイル" #: ../../rst/user_guide/vault.rst:275 msgid "variables files in roles" msgstr "ロールã®å¤‰æ•°ãƒ•ァイル" #: ../../rst/user_guide/vault.rst:276 msgid "defaults files in roles" msgstr "ロール内ã®ãƒ‡ãƒ•ォルトファイル" #: ../../rst/user_guide/vault.rst:277 msgid "tasks files" msgstr "タスクファイル" #: ../../rst/user_guide/vault.rst:278 msgid "handlers files" msgstr "ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãƒ•ァイル" #: ../../rst/user_guide/vault.rst:279 msgid "binary files or other arbitrary files" msgstr "ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ•ァイルã¾ãŸã¯ãã®ä»–ã®ä»»æ„ã®ãƒ•ァイル" #: ../../rst/user_guide/vault.rst:281 msgid "The full file is encrypted in the vault." msgstr "完全ãªãƒ•ァイル㯠Vault ã§æš—å·åŒ–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:285 msgid "Ansible Vault uses an editor to create or modify encrypted files. See :ref:`vault_securing_editor` for some guidance on securing the editor." msgstr "Ansible Vault ã¯ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã‚’使用ã—ã¦æš—å·åŒ–ã•れãŸãƒ•ァイルã®ä½œæˆã¾ãŸã¯å¤‰æ›´ã—ã¾ã™ã€‚エディターã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¿è­·ã«é–¢ã™ã‚‹ã„ãã¤ã‹ã®ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã¯ã€ã€Œ:ref:`vault_securing_editor`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:289 msgid "Advantages and disadvantages of encrypting files" msgstr "ファイルを暗å·åŒ–ã™ã‚‹ã“ã¨ã®åˆ©ç‚¹ãŠã‚ˆã³æ¬ ç‚¹" #: ../../rst/user_guide/vault.rst:291 msgid "File-level encryption is easy to use. Password rotation for encrypted files is straightforward with the :ref:`rekey ` command. Encrypting files can hide not only sensitive values, but the names of the variables you use. However, with file-level encryption the contents of files are no longer easy to access and read. This may be a problem with encrypted tasks files. When encrypting a variables file, see :ref:`tip_for_variables_and_vaults` for one way to keep references to these variables in a non-encrypted file. Ansible always decrypts the entire encrypted file when it is when loaded or referenced, because Ansible cannot know if it needs the content unless it decrypts it." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã¯ç°¡å˜ã«ä½¿ç”¨ã§ãã¾ã™ã€‚æš—å·åŒ–ã•れãŸãƒ•ァイルã®ãƒ‘スワードローテーションã¯ã€:ref:`rekey ` コマンドã§ç°¡å˜ã«è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚ファイルを暗å·åŒ–ã™ã‚‹ã¨ã€æ…Žé‡ã«æ‰±ã†ã¹ã値ã ã‘ã§ãªãã€ä½¿ç”¨ã™ã‚‹å¤‰æ•°ã®åå‰ã‚‚éš ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã§ã¯ã€ãƒ•ァイルã®å†…容ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦èª­ã‚€ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚ã“ã‚Œã¯æš—å·åŒ–ã•れãŸã‚¿ã‚¹ã‚¯ãƒ•ァイルã§ã¯å•題ã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。変数ファイルを暗å·åŒ–ã™ã‚‹å ´åˆã€ã“れらã®å¤‰æ•°ã¸ã®å‚ç…§ã‚’æš—å·åŒ–ã•れã¦ã„ãªã„ファイルã«ä¿æŒã™ã‚‹ 1 ã¤ã®æ–¹æ³•ã€ã€Œ:ref:`tip_for_variables_and_vaults`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。Ansible ã¯ã€æš—å·åŒ–ã•れãŸãƒ•ァイルを読ã¿è¾¼ã‚“ã ã‚Šå‚ç…§ã—ãŸã‚Šã™ã‚‹éš›ã«ã¯ã€å¸¸ã«æš—å·åŒ–ã•れãŸãƒ•ァイル全体を復å·ã—ã¾ã™ã€‚ã“れã¯ã€Ansible ã¯å¾©å·ã—ãªã„é™ã‚Šã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå¿…è¦ã‹ã©ã†ã‹ã‚’知るã“ã¨ãŒã§ããªã„ã‹ã‚‰ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:296 msgid "Creating encrypted files" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルã®ä½œæˆ" #: ../../rst/user_guide/vault.rst:298 msgid "To create a new encrypted data file called 'foo.yml' with the 'test' vault password from 'multi_password_file':" msgstr "「multi_password_fileã€ã® Vault パスワード「testã€ã‚’使用ã—ã¦ã€ã€Œfoo.ymlã€ã¨ã„ã†åå‰ã®æ–°ã—ã„æš—å·åŒ–データファイルを作æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:304 msgid "The tool launches an editor (whatever editor you have defined with $EDITOR, default editor is vi). Add the content. When you close the editor session, the file is saved as encrypted data. The file header reflects the vault ID used to create it:" msgstr "ã“ã®ãƒ„ールã¯ã€ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ ($EDITOR ã§å®šç¾©ã—ãŸã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ãŒãªã‚“ã§ã‚れã€ãƒ‡ãƒ•ォルト㯠vi) ã‚’èµ·å‹•ã—ã¾ã™ã€‚コンテンツを追加ã—ã¾ã™ã€‚エディターセッションを終了ã™ã‚‹ã¨ã€ãƒ•ã‚¡ã‚¤ãƒ«ã¯æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ã¨ã—ã¦ä¿å­˜ã•れã¾ã™ã€‚ファイルã®ãƒ˜ãƒƒãƒ€ãƒ¼ã«ã¯ã€ä½œæˆæ™‚ã«ä½¿ç”¨ã—㟠Vault ID ãŒå映ã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:310 msgid "To create a new encrypted data file with the vault ID 'my_new_password' assigned to it and be prompted for the password:" msgstr "Vault ID「my_new_passwordã€ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸæ–°ã—ã„æš—å·åŒ–データファイルを作æˆã—ã€ãƒ‘スワードã®å…¥åŠ›ã‚’æ±‚ã‚られるよã†ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:316 msgid "Again, add content to the file in the editor and save. Be sure to store the new password you created at the prompt, so you can find it when you want to decrypt that file." msgstr "ã“ã“ã§ã‚‚ã€ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã®ãƒ•ァイルã«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を追加ã—ã¦ä¿å­˜ã—ã¾ã™ã€‚プロンプトã§ä½œæˆã—ãŸæ–°ã—ã„パスワードを必ãšä¿å­˜ã—ã€ãã®ãƒ•ァイルを復å·ã™ã‚‹ã¨ãã«è¦‹ã¤ã‘られるよã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:321 msgid "Encrypting existing files" msgstr "æ—¢å­˜ãƒ•ã‚¡ã‚¤ãƒ«ã®æš—å·åŒ–" #: ../../rst/user_guide/vault.rst:323 msgid "To encrypt an existing file, use the :ref:`ansible-vault encrypt ` command. This command can operate on multiple files at once. For example:" msgstr "既存ファイルを暗å·åŒ–ã™ã‚‹ã«ã¯ã€:ref:`ansible-vault encrypt ` コマンドを使用ã—ã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ä¸€åº¦ã«è¤‡æ•°ã®ãƒ•ァイルã§å‹•作ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:329 msgid "To encrypt existing files with the 'project' ID and be prompted for the password:" msgstr "「プロジェクトã€IDã§æ—¢å­˜ã®ãƒ•ァイルを暗å·åŒ–ã—ã€ãƒ‘スワードã®å…¥åŠ›ã‚’æ±‚ã‚るプロンプトを表示ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:339 msgid "Viewing encrypted files" msgstr "æš—å·åŒ–ã—ãŸãƒ•ァイルã®è¡¨ç¤º" #: ../../rst/user_guide/vault.rst:341 msgid "To view the contents of an encrypted file without editing it, you can use the :ref:`ansible-vault view ` command:" msgstr "æš—å·åŒ–ã—ãŸãƒ•ァイルã®å†…容を編集ã›ãšã«è¡¨ç¤ºã™ã‚‹å ´åˆã¯ã€:ref:`ansible-vault view ` コマンドを使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:351 msgid "Editing encrypted files" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルã®ç·¨é›†" #: ../../rst/user_guide/vault.rst:353 msgid "To edit an encrypted file in place, use the :ref:`ansible-vault edit ` command. This command decrypts the file to a temporary file, allows you to edit the content, then saves and re-encrypts the content and removes the temporary file when you close the editor. For example:" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルをãã®å ´ã§ç·¨é›†ã™ã‚‹ã«ã¯ã€:ref:`ansible-vault edit ` コマンドを使用ã—ã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ãƒ•ァイルを一時的ãªãƒ•ァイルã«å¾©å·ã—ã€å†…容を編集ã§ãるよã†ã«ã—ãŸå¾Œã€å†…容をä¿å­˜ã—ã¦å†åº¦æš—å·åŒ–ã—ã€ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã‚’é–‰ã˜ã‚‹ã¨ãã«ä¸€æ™‚çš„ãªãƒ•ァイルを削除ã—ã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:359 msgid "To edit a file encrypted with the ``vault2`` password file and assigned the vault ID ``pass2``:" msgstr "「``vault2``ã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ãƒ«ã§æš—å·åŒ–ã•れã€Vault ID「``pass2``ã€ã‚’割り当ã¦ãŸãƒ•ァイルを編集ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:369 msgid "Changing the password and/or vault ID on encrypted files" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルã®ãƒ‘スワードã¾ãŸã¯ Vault ID ã®å¤‰æ›´" #: ../../rst/user_guide/vault.rst:371 msgid "To change the password on an encrypted file or files, use the :ref:`rekey ` command:" msgstr "æš—å·åŒ–ã•れ㟠1 ã¤ã¾ãŸã¯è¤‡æ•°ã®ãƒ•ァイルã®ãƒ‘スワードを変更ã™ã‚‹ã«ã¯ã€:ref:`rekey ` コマンドを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:377 msgid "This command can rekey multiple data files at once and will ask for the original password and also the new password. To set a different ID for the rekeyed files, pass the new ID to ``--new-vault-id``. For example, to rekey a list of files encrypted with the 'preprod1' vault ID from the 'ppold' file to the 'preprod2' vault ID and be prompted for the new password:" msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€è¤‡æ•°ã®ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルã®éµã‚’一度ã«å†è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã€å…ƒã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¨æ–°ã—ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã—ã¾ã™ã€‚éµã‚’一度ã«å†è¨­å®šã—ãŸãƒ•ァイルã«åˆ¥ã® ID を設定ã™ã‚‹ã«ã¯ã€æ–°ã—ã„ ID ã‚’ ``--new-vault-id`` ã«æ¸¡ã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€Œppoldã€ãƒ•ァイルã‹ã‚‰ã€Œpreprod1ã€ã® Vault ID ã§æš—å·åŒ–ã•れãŸãƒ•ァイルã®ãƒªã‚¹ãƒˆã§ Vault ID「preprod2ã€ã«éµã‚’å†è¨­å®šã—ã€æ–°ã—ã„パスワードã®å…¥åŠ›ã‚’æ±‚ã‚ã‚‹å ´åˆã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:387 msgid "Decrypting encrypted files" msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルã®å¾©å·åŒ–" #: ../../rst/user_guide/vault.rst:389 msgid "If you have an encrypted file that you no longer want to keep encrypted, you can permanently decrypt it by running the :ref:`ansible-vault decrypt ` command. This command will save the file unencrypted to the disk, so be sure you do not want to :ref:`edit ` it instead." msgstr "æš—å·åŒ–ã•れãŸãƒ•ァイルãŒã‚りã€ãã®ãƒ•ァイルを暗å·åŒ–ã—ãŸã¾ã¾ã«ã—ã¦ãŠããŸããªã„å ´åˆã¯ã€:ref:`ansible-vault decrypt ` コマンドを実行ã™ã‚‹ã“ã¨ã§æ°¸ä¹…ã«æš—å·åŒ–を解除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯æš—å·åŒ–ã•れã¦ã„ãªã„ファイルをディスクã«ä¿å­˜ã™ã‚‹ãŸã‚ã€ä»£ã‚り㫠:ref:`edit ` を使用ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:399 msgid "Steps to secure your editor" msgstr "エディターを確ä¿ã™ã‚‹ãŸã‚ã®æ‰‹é †" #: ../../rst/user_guide/vault.rst:401 msgid "Ansible Vault relies on your configured editor, which can be a source of disclosures. Most editors have ways to prevent loss of data, but these normally rely on extra plain text files that can have a clear text copy of your secrets. Consult your editor documentation to configure the editor to avoid disclosing secure data. The following sections provide some guidance on common editors but should not be taken as a complete guide to securing your editor." msgstr "Ansible Vault ã¯ã€è¨­å®šã•れãŸã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã«ä¾å­˜ã—ã¦ãŠã‚Šã€ã“ã‚ŒãŒæƒ…å ±æ¼ãˆã„ã®åŽŸå› ã¨ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ã®æå¤±ã‚’é˜²ãæ–¹æ³•ãŒã‚りã¾ã™ãŒã€é€šå¸¸ã¯ã€ç§˜å¯†ã®ã‚³ãƒ”ーãŒå¹³æ–‡ã§ä¿å­˜ã•れã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚る追加ã®å¹³æ–‡ãƒ•ァイルã«ä¾å­˜ã—ã¦ã„ã¾ã™ã€‚エディターã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ã€ã‚»ã‚­ãƒ¥ã‚¢ãªãƒ‡ãƒ¼ã‚¿ã®é–‹ç¤ºã‚’回é¿ã™ã‚‹ã‚ˆã†ã«ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã‚’設定ã—ã¦ãã ã•ã„。以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ä¸€èˆ¬çš„ãªã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã‚’æä¾›ã—ã¦ã„ã¾ã™ãŒã€ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’確ä¿ã™ã‚‹ãŸã‚ã®å®Œå…¨ãªã‚¬ã‚¤ãƒ‰ã¨è€ƒãˆã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/vault.rst:405 msgid "vim" msgstr "vim" #: ../../rst/user_guide/vault.rst:407 msgid "You can set the following ``vim`` options in command mode to avoid cases of disclosure. There may be more settings you need to modify to ensure security, especially when using plugins, so consult the ``vim`` documentation." msgstr "以下㮠``vim`` オプションをコマンドモードã§è¨­å®šã™ã‚‹ã“ã¨ã§ã€æƒ…å ±æ¼ãˆã„ã®ã‚±ãƒ¼ã‚¹ã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚特ã«ãƒ—ラグインを使用ã—ã¦ã„ã‚‹å ´åˆãªã©ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’確ä¿ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã—ãªã‘れã°ãªã‚‰ãªã„設定ãŒä»–ã«ã‚‚ã‚ã‚‹ã‹ã‚‚ã—れãªã„ãŸã‚ã€``vim`` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:410 msgid "Disable swapfiles that act like an autosave in case of crash or interruption." msgstr "クラッシュã¾ãŸã¯ä¸­æ–­ãŒç™ºç”Ÿã—ãŸå ´åˆã«è‡ªå‹•ä¿å­˜ã¨ã—ã¦æ©Ÿèƒ½ã™ã‚‹ swapfiles を無効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:416 ../../rst/user_guide/vault.rst:450 msgid "Disable creation of backup files." msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルã®ä½œæˆã‚’無効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:423 msgid "Disable the viminfo file from copying data from your current session." msgstr "viminfo ファイルを無効ã«ã—ã¦ã€ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’コピーã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:429 msgid "Disable copying to the system clipboard." msgstr "システムクリップボードã¸ã®ã‚³ãƒ”ーを無効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:436 msgid "You can optionally add these settings in ``.vimrc`` for all files, or just specific paths or extensions. See the ``vim`` manual for details." msgstr "å¿…è¦ã«å¿œã˜ã¦ã€ã™ã¹ã¦ã®ãƒ•ァイルã¾ãŸã¯ç‰¹å®šã®ãƒ‘スã¾ãŸã¯æ‹¡å¼µã® ``.vimrc`` ã«ã“れらã®è¨­å®šã‚’追加ã§ãã¾ã™ã€‚詳細ã¯ã€``vim`` マニュアルをå‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:440 msgid "Emacs" msgstr "Emacs" #: ../../rst/user_guide/vault.rst:442 msgid "You can set the following Emacs options to avoid cases of disclosure. There may be more settings you need to modify to ensure security, especially when using plugins, so consult the Emacs documentation." msgstr "以下㮠Emacs オプションを設定ã™ã‚‹ã“ã¨ã§ã€æƒ…å ±æ¼ãˆã„を回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚特ã«ãƒ—ラグインを使用ã™ã‚‹å ´åˆã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’確ä¿ã™ã‚‹ãŸã‚ã«å¤‰æ›´ã™ã‚‹å¿…è¦ãŒã‚る設定ãŒä»–ã«ã‚‚ã‚ã‚‹ã‹ã‚‚ã—れãªã„ãŸã‚ã€Emacs ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:444 msgid "Do not copy data to the system clipboard." msgstr "データをシステムクリップボードã«ã‚³ãƒ”ーã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/vault.rst:456 msgid "Disable autosave files." msgstr "自動ä¿å­˜ãƒ•ァイルを無効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:467 msgid "Using encrypted variables and files" msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°ã¨ãƒ•ァイルã®ä½¿ç”¨" #: ../../rst/user_guide/vault.rst:469 msgid "When you run a task or playbook that uses encrypted variables or files, you must provide the passwords to decrypt the variables or files. You can do this at the command line or in the playbook itself." msgstr "æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ファイルを使用ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚„ Playbook を実行ã™ã‚‹éš›ã¯ã€å¤‰æ•°ã‚„ファイルを復å·ã™ã‚‹ãŸã‚ã®ãƒ‘スワードをæä¾›ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã¾ãŸã¯ Playbook ã®ä¸­ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:472 msgid "Passing a single password" msgstr "å˜ä¸€ã®ãƒ‘スワードを渡ã™" #: ../../rst/user_guide/vault.rst:474 msgid "If all the encrypted variables and files your task or playbook needs use a single password, you can use the :option:`--ask-vault-pass ` or :option:`--vault-password-file ` cli options." msgstr "タスクや Playbook ãŒå¿…è¦ã¨ã™ã‚‹ã™ã¹ã¦ã®æš—å·åŒ–ã•れãŸå¤‰æ•°ã‚„ファイルãŒå˜ä¸€ã®ãƒ‘スワードを使用ã™ã‚‹å ´åˆã¯ã€CLI オプション :option:`--ask-vault-pass ` ã¾ãŸã¯ :option:`--vault-password-file ` を使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:476 ../../rst/user_guide/vault.rst:544 msgid "To prompt for the password:" msgstr "ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:482 msgid "To retrieve the password from the :file:`/path/to/my/vault-password-file` file:" msgstr ":file:`/path/to/my/vault-password-file` ファイルã‹ã‚‰ãƒ‘スワードをå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:488 msgid "To get the password from the vault password client script :file:`my-vault-password-client.py`:" msgstr "Vault パスワードクライアントスクリプト :file:`my-vault-password-client.py` ã‹ã‚‰ Vault パスワードをå–å¾—ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:498 msgid "Passing vault IDs" msgstr "Vault ID を渡ã™" #: ../../rst/user_guide/vault.rst:500 msgid "You can also use the :option:`--vault-id ` option to pass a single password with its vault label. This approach is clearer when multiple vaults are used within a single inventory." msgstr ":option:`--vault-id ` オプションを使用ã—ã¦ã€Vault ラベルã§å˜ä¸€ã®ãƒ‘スワードを渡ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®æ–¹æ³•ã¯ã€1 ã¤ã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å†…ã§è¤‡æ•°ã® vault を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã‚ˆã‚Šæ˜Žç¢ºã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:502 msgid "To prompt for the password for the 'dev' vault ID:" msgstr "Vault ID「devã€ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã‚’è¦æ±‚ã™ã‚‹å ´åˆã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:508 msgid "To retrieve the password for the 'dev' vault ID from the :file:`dev-password` file:" msgstr "「devã€ã® Vault ID ã®ãƒ‘スワードを :file:`dev-password` ã®ãƒ•ァイルã‹ã‚‰å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:514 msgid "To get the password for the 'dev' vault ID from the vault password client script :file:`my-vault-password-client.py`:" msgstr "Vault パスワードクライアントスクリプト :file:`my-vault-password-client.py` ã‹ã‚‰ Vault ID 「devã€ã®ãƒ‘スワードをå–å¾—ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã‚’行ã„ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:521 msgid "Passing multiple vault passwords" msgstr "複数㮠Vault パスワードを渡ã™" #: ../../rst/user_guide/vault.rst:523 msgid "If your task or playbook requires multiple encrypted variables or files that you encrypted with different vault IDs, you must use the :option:`--vault-id ` option, passing multiple ``--vault-id`` options to specify the vault IDs ('dev', 'prod', 'cloud', 'db') and sources for the passwords (prompt, file, script). . For example, to use a 'dev' password read from a file and to be prompted for the 'prod' password:" msgstr "タスクや Playbook ã§ã€ç•°ãªã‚‹ Vault ID ã§æš—å·åŒ–ã—ãŸè¤‡æ•°ã®æš—å·åŒ–変数やファイルãŒå¿…è¦ãªå ´åˆã¯ã€:option:`--vault-id ` オプションを使用ã—ã€è¤‡æ•°ã® ``--vault-id`` オプションを渡ã—㦠Vault ID (「devã€ã€ã€Œprodã€ã€ã€Œcloudã€ã€ã€Œdbã€) ã¨ãƒ‘スワードã®ã‚½ãƒ¼ã‚¹ (プロンプトã€ãƒ•ァイルã€ã‚¹ã‚¯ãƒªãƒ—ト) を指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ãƒ•ァイルã‹ã‚‰èª­ã¿è¾¼ã‚“ã ã€Œdevã€ã®ãƒ‘スワードを使用ã—ã€ã€Œprodã€ã®ãƒ‘スワードを求ã‚るプロンプトを表示ã™ã‚‹å ´åˆãªã©ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:529 msgid "By default the vault ID labels (dev, prod and so on) are only hints. Ansible attempts to decrypt vault content with each password. The password with the same label as the encrypted data will be tried first, after that each vault secret will be tried in the order they were provided on the command line." msgstr "デフォルトã§ã¯ã€Vault ID ラベル (devã€prodãªã©) ã¯ãƒ’ントã§ã—ã‹ã‚りã¾ã›ã‚“。Ansible ã¯ã€å„パスワード㧠Vault ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®å¾©å·ã‚’試ã¿ã¾ã™ã€‚æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ã¨åŒã˜ãƒ©ãƒ™ãƒ«ã®ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæœ€åˆã«è©¦è¡Œã•れã€ãã®å¾Œã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã•れãŸé †ã«å„ Vault シークレットãŒè©¦è¡Œã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:531 msgid "Where the encrypted data has no label, or the label does not match any of the provided labels, the passwords will be tried in the order they are specified. In the example above, the 'dev' password will be tried first, then the 'prod' password for cases where Ansible doesn't know which vault ID is used to encrypt something." msgstr "æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ã«ãƒ©ãƒ™ãƒ«ãŒãªã„å ´åˆã€ã¾ãŸã¯ãƒ©ãƒ™ãƒ«ãŒã€æä¾›ã•れãŸãƒ©ãƒ™ãƒ«ã®ã©ã‚Œã¨ã‚‚一致ã—ãªã„å ´åˆã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã¯æŒ‡å®šã•れãŸé †ã«è©¦è¡Œã•れã¾ã™ã€‚上ã®ä¾‹ã§ã¯ã€ã€Œdevã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæœ€åˆã«è©¦è¡Œã•ã‚Œã€æ¬¡ã«ã€Œprodã€ãƒ‘スワードãŒè©¦è¡Œã•れã¾ã™ã€‚ã“れã¯ã€Ansible ãŒã©ã® Vault ID ãŒä½•ã‹ã®æš—å·åŒ–ã«ä½¿ç”¨ã•れã¦ã„ã‚‹ã‹ã‚’知らãªã„å ´åˆã«è¡Œã‚れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:534 msgid "Using ``--vault-id`` without a vault ID" msgstr "Vault ID ãªã—ã§ ``--vault-id`` を使用" #: ../../rst/user_guide/vault.rst:536 msgid "The :option:`--vault-id ` option can also be used without specifying a vault-id. This behavior is equivalent to :option:`--ask-vault-pass ` or :option:`--vault-password-file ` so is rarely used." msgstr ":option:`--vault-id ` オプションã¯ã€vault-id を指定ã›ãšã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å‹•作㯠:option:`--ask-vault-pass ` ã¾ãŸã¯ :option:`--vault-password-file ` ã¨åŒç­‰ã§ã‚ã‚‹ãŸã‚ã€ã»ã¨ã‚“ã©ä½¿ç”¨ã•れã¾ã›ã‚“。" #: ../../rst/user_guide/vault.rst:538 msgid "For example, to use a password file :file:`dev-password`:" msgstr "ãŸã¨ãˆã°ã€ãƒ‘スワードファイル :file:`dev-password` を使用ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:550 msgid "To get the password from an executable script :file:`my-vault-password-client.py`:" msgstr "実行スクリプト :file:`my-vault-password-client.py` ã‹ã‚‰ãƒ‘スワードをå–å¾—ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:558 msgid "Configuring defaults for using encrypted content" msgstr "æš—å·åŒ–ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を使用ã™ã‚‹ãŸã‚ã®ãƒ‡ãƒ•ォルトã®è¨­å®š" #: ../../rst/user_guide/vault.rst:561 msgid "Setting a default vault ID" msgstr "デフォルト㮠Vault ID ã®è¨­å®š" #: ../../rst/user_guide/vault.rst:563 msgid "If you use one vault ID more frequently than any other, you can set the config option :ref:`DEFAULT_VAULT_IDENTITY_LIST` to specify a default vault ID and password source. Ansible will use the default vault ID and source any time you do not specify :option:`--vault-id `. You can set multiple values for this option. Setting multiple values is equivalent to passing multiple :option:`--vault-id ` cli options." msgstr "ã‚ã‚‹ Vault ID ã‚’ä»–ã® Vault IDよ りも頻ç¹ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€è¨­å®šã‚ªãƒ—ション :ref:`DEFAULT_VAULT_IDENTITY_LIST` を設定ã—ã¦ã€ãƒ‡ãƒ•ォルト㮠Vault ID ã¨ãƒ‘スワードソースを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Ansible ã¯ã€:option:`--vault-id ` を指定ã—ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ォルト㮠Vault ID ã¨ã‚½ãƒ¼ã‚¹ã‚’使用ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã«ã¯è¤‡æ•°ã®å€¤ã‚’設定ã§ãã¾ã™ã€‚複数ã®å€¤ã‚’設定ã™ã‚‹ã“ã¨ã¯ã€è¤‡æ•°ã® CLI オプション :option:`--vault-id ` を渡ã™ã“ã¨ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:566 msgid "Setting a default password source" msgstr "デフォルトã®ãƒ‘スワードソースã®è¨­å®š" #: ../../rst/user_guide/vault.rst:568 msgid "If you use one vault password file more frequently than any other, you can set the :ref:`DEFAULT_VAULT_PASSWORD_FILE` config option or the :envvar:`ANSIBLE_VAULT_PASSWORD_FILE` environment variable to specify that file. For example, if you set ``ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt``, Ansible will automatically search for the password in that file. This is useful if, for example, you use Ansible from a continuous integration system such as Jenkins." msgstr "ã‚ã‚‹ Vault パスワードファイルを他ã®ãƒ•ァイルよりも頻ç¹ã«ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€:ref:`DEFAULT_VAULT_PASSWORD_FILE` 設定オプションã¾ãŸã¯ç’°å¢ƒå¤‰æ•° :envvar:`ANSIBLE_VAULT_PASSWORD_FILE` を設定ã—ã¦ã€ãã®ãƒ•ァイルを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€``ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt`` を設定ã™ã‚‹ã¨ã€Ansible ã¯è‡ªå‹•çš„ã«ãã®ãƒ•ァイル内ã®ãƒ‘スワードを検索ã—ã¾ã™ã€‚ã“れã¯ã€ãŸã¨ãˆã°ã€Jenkins ãªã©ã®ç¶™ç¶šçš„çµ±åˆã‚·ã‚¹ãƒ†ãƒ ã‹ã‚‰ Ansible を使用ã™ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:571 msgid "When are encrypted files made visible?" msgstr "æš—å·åŒ–ファイルをã„ã¤è¡¨ç¤ºã™ã‚‹ã‹ã€‚" #: ../../rst/user_guide/vault.rst:573 msgid "In general, content you encrypt with Ansible Vault remains encrypted after execution. However, there is one exception. If you pass an encrypted file as the ``src`` argument to the :ref:`copy `, :ref:`template `, :ref:`unarchive `, :ref:`script ` or :ref:`assemble ` module, the file will not be encrypted on the target host (assuming you supply the correct vault password when you run the play). This behavior is intended and useful. You can encrypt a configuration file or template to avoid sharing the details of your configuration, but when you copy that configuration to servers in your environment, you want it to be decrypted so local users and processes can access it." msgstr "一般的ã«ã€Ansible Vault ã§æš—å·åŒ–ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€å®Ÿè¡Œå¾Œã‚‚æš—å·åŒ–ã•れãŸã¾ã¾ã§ã™ã€‚ãŸã ã—ã€1 ã¤ã ã‘例外ãŒã‚りã¾ã™ã€‚:ref:`copy ` モジュールã€:ref:`template ` モジュールã€:ref:`unarchive ` モジュールã€:ref:`script ` モジュールã€ã¾ãŸã¯ :ref:`assemble ` モジュールã¸ã® ``src`` 引数ã¨ã—ã¦æš—å·åŒ–ã•れãŸãƒ•ァイルを渡ã—ãŸå ´åˆã€ãã®ãƒ•ァイルã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ›ã‚¹ãƒˆä¸Šã§ã¯æš—å·åŒ–ã•れã¾ã›ã‚“ (プレイã®å®Ÿè¡Œæ™‚ã«æ­£ã—ã„ Vault パスワードを供給ã—ã¦ã„ã‚‹ã“ã¨ãŒå‰æã§ã™)。ã“ã®å‹•ä½œã¯æ„図ã•れãŸã‚‚ã®ã§ã‚りã€ä¾¿åˆ©ãªã‚‚ã®ã§ã™ã€‚設定ファイルやテンプレートを暗å·åŒ–ã—ã¦ã€è¨­å®šã®è©³ç´°ã‚’共有ã—ãªã„よã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ãã®è¨­å®šã‚’環境内ã®ã‚µãƒ¼ãƒãƒ¼ã«ã‚³ãƒ”ーã™ã‚‹ã¨ãã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚„プロセスãŒã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ã€æš—å·åŒ–を解除ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:578 msgid "Format of files encrypted with Ansible Vault" msgstr "Ansible Vault ã§æš—å·åŒ–ã•れãŸãƒ•ァイルã®å½¢å¼" #: ../../rst/user_guide/vault.rst:580 msgid "Ansible Vault creates UTF-8 encoded txt files. The file format includes a newline terminated header. For example::" msgstr "Ansible Vault ã¯ã€UTF-8 ã§ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•れãŸãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルを作æˆã—ã¾ã™ã€‚ファイル形å¼ã«ã¯ã€æ”¹è¡Œã§çµ‚了ã™ã‚‹ãƒ˜ãƒƒãƒ€ãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:584 msgid "or::" msgstr "ã¾ãŸã¯::" #: ../../rst/user_guide/vault.rst:588 msgid "The header contains up to four elements, separated by semi-colons (``;``)." msgstr "ヘッダーã«ã¯ã€ã‚»ãƒŸã‚³ãƒ­ãƒ³ (``;``) ã§åŒºåˆ‡ã‚‰ã‚ŒãŸæœ€å¤§ 4 ã¤ã®è¦ç´ ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:590 msgid "The format ID (``$ANSIBLE_VAULT``). Currently ``$ANSIBLE_VAULT`` is the only valid format ID. The format ID identifies content that is encrypted with Ansible Vault (via vault.is_encrypted_file())." msgstr "å½¢å¼ ID (``$ANSIBLE_VAULT``)。ç¾åœ¨ã€``$ANSIBLE_VAULT`` ã¯å”¯ä¸€ã®æœ‰åйãªå½¢å¼ ID ã§ã™ã€‚フォーマット ID ã¯ã€(vault.is_encrypted_file() を介ã—ã¦) Ansible Vault ã§æš—å·åŒ–ã•れã¦ã„るコンテンツを識別ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:592 msgid "The vault format version (``1.X``). All supported versions of Ansible will currently default to '1.1' or '1.2' if a labeled vault ID is supplied. The '1.0' format is supported for reading only (and will be converted automatically to the '1.1' format on write). The format version is currently used as an exact string compare only (version numbers are not currently 'compared')." msgstr "Vault å½¢å¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ (``1.X``) ã§ã™ã€‚ç¾åœ¨ã€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§ã¯ã€ãƒ©ãƒ™ãƒ«ä»˜ãã® Vault IDãŒæŒ‡å®šã•れãŸå ´åˆã¯ã€ãƒ‡ãƒ•ォルトã§ã€Œ1.1ã€ã¾ãŸã¯ã€Œ1.2ã€ã«ãªã‚Šã¾ã™ã€‚「1.0ã€å½¢å¼ã¯èª­ã¿è¾¼ã¿ã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ (書ãè¾¼ã¿æ™‚ã«ã¯è‡ªå‹•çš„ã«ã€Œ1.1ã€å½¢å¼ã«å¤‰æ›ã•れã¾ã™)。形å¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ç¾åœ¨ã€æ­£ç¢ºãªæ–‡å­—åˆ—ã®æ¯”較ã¨ã—ã¦ã®ã¿ä½¿ç”¨ã•れã¦ã„ã¾ã™ (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã¯ç¾åœ¨ã€Œæ¯”較ã€ã•れã¾ã›ã‚“)。" #: ../../rst/user_guide/vault.rst:594 msgid "The cipher algorithm used to encrypt the data (``AES256``). Currently ``AES256`` is the only supported cipher algorithm. Vault format 1.0 used 'AES', but current code always uses 'AES256'." msgstr "ãƒ‡ãƒ¼ã‚¿ã®æš—å·åŒ–ã«ä½¿ç”¨ã•れる暗å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  (``AES256``)。ç¾åœ¨ã€``AES256`` ãŒå”¯ä¸€ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã§ã™ã€‚Vault å½¢å¼ 1.0 ã§ã¯ã€ŒAESã€ã‚’使用ã—ã¦ã„ã¾ã—ãŸãŒã€ç¾åœ¨ã®ã‚³ãƒ¼ãƒ‰ã§ã¯å¸¸ã«ã€ŒAES256ã€ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:596 msgid "The vault ID label used to encrypt the data (optional, ``vault-id-label``) For example, if you encrypt a file with ``--vault-id dev@prompt``, the vault-id-label is ``dev``." msgstr "ãƒ‡ãƒ¼ã‚¿ã®æš—å·åŒ–ã«ä½¿ç”¨ã•れる vault ID ラベル (ä»»æ„: ``vault-id-label``)。ãŸã¨ãˆã°ã€``--vault-id dev@prompt`` ã§ãƒ•ァイルを暗å·åŒ–ã™ã‚‹å ´åˆã¯ã€vault-id-label ㌠``dev`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:598 msgid "Note: In the future, the header could change. Fields after the format ID and format version depend on the format version, and future vault format versions may add more cipher algorithm options and/or additional fields." msgstr "注: å°†æ¥çš„ã«ã¯ã€ãƒ˜ãƒƒãƒ€ãƒ¼ãŒå¤‰æ›´ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚å½¢å¼ ID ã¨å½¢å¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å¾Œã®ãƒ•ィールドã¯ã€å½¢å¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ä¾å­˜ã—ã¦ãŠã‚Šã€å°†æ¥ã® Vault å½¢å¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã®ã‚ªãƒ—ションやフィールドãŒè¿½åŠ ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:600 msgid "The rest of the content of the file is the 'vaulttext'. The vaulttext is a text armored version of the encrypted ciphertext. Each line is 80 characters wide, except for the last line which may be shorter." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã®æ®‹ã‚Šã®å†…容ã¯ã€Œvaulttextã€ã§ã™ã€‚vaulttext ã¯ã€æš—å·åŒ–ã•ã‚ŒãŸæš—å·æ–‡ã®ãƒ†ã‚­ã‚¹ãƒˆç‰ˆã§ã™ã€‚å„行ã®å¹…㯠80 文字ã§ã™ã€‚ãŸã ã—ã€æœ€çµ‚行ã¯çŸ­ããªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:604 msgid "Ansible Vault payload format 1.1 - 1.2" msgstr "Ansible Vault ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰å½¢å¼ 1.1 - 1.2" #: ../../rst/user_guide/vault.rst:606 msgid "The vaulttext is a concatenation of the ciphertext and a SHA256 digest with the result 'hexlifyied'." msgstr "vaulttext ã¯ã€æš—å·åŒ–テキスト㨠SHA256 ダイジェストを連çµã—ãŸã‚‚ã®ã§ã€çµæžœã¯ã€Œhexlifyiedã€ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:608 msgid "'hexlify' refers to the ``hexlify()`` method of the Python Standard Library's `binascii `_ module." msgstr "「hexlifyã€ã¯ã€Python 標準ライブラリー㮠`binascii `_ モジュール㮠``hexlify()`` メソッドを指ã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:610 msgid "hexlify()'ed result of:" msgstr "hexlify() ãŒè¡Œã‚れãŸçµæžœ:" #: ../../rst/user_guide/vault.rst:612 msgid "hexlify()'ed string of the salt, followed by a newline (``0x0a``)" msgstr "hexlify() ã§ç·¨é›†ã•れãŸã‚½ãƒ«ãƒˆã®æ–‡å­—列ã¨ãれã«ç¶šã改行 (``0x0a``)。" #: ../../rst/user_guide/vault.rst:613 msgid "hexlify()'ed string of the crypted HMAC, followed by a newline. The HMAC is:" msgstr "hexlify() ã§æš—å·åŒ–ã•れ㟠HMAC ã®æ–‡å­—列ã®å¾Œã«ã€æ”¹è¡Œã‚’入れã¾ã™ã€‚ãã® HMAC ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:615 msgid "a `RFC2104 `_ style HMAC" msgstr "`RFC2104 `_ スタイル㮠HMAC" #: ../../rst/user_guide/vault.rst:617 msgid "inputs are:" msgstr "å…¥åŠ›ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:619 msgid "The AES256 encrypted ciphertext" msgstr "AES256 ã§æš—å·åŒ–ã—ãŸæš—å·æ–‡" #: ../../rst/user_guide/vault.rst:620 msgid "A PBKDF2 key. This key, the cipher key, and the cipher IV are generated from:" msgstr "PBKDF2 キー。ã“ã®ã‚­ãƒ¼ã€æš—å·ã‚­ãƒ¼ã€ãŠã‚ˆã³æš—å· IV を生æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:622 msgid "the salt, in bytes" msgstr "ãƒã‚¤ãƒˆå˜ä½ã®ã‚½ãƒ«ãƒˆ" #: ../../rst/user_guide/vault.rst:623 msgid "10000 iterations" msgstr "10000 回ã®ç¹°ã‚Šè¿”ã—" #: ../../rst/user_guide/vault.rst:624 msgid "SHA256() algorithm" msgstr "SHA256() アルゴリズム" #: ../../rst/user_guide/vault.rst:625 msgid "the first 32 bytes are the cipher key" msgstr "最åˆã® 32 ãƒã‚¤ãƒˆã¯æš—å·ã‚­ãƒ¼ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:626 msgid "the second 32 bytes are the HMAC key" msgstr "2 番目㮠32 ãƒã‚¤ãƒˆã¯ HMAC キーã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:627 msgid "remaining 16 bytes are the cipher IV" msgstr "残り㮠16 ãƒã‚¤ãƒˆã¯æš—å· IV ã§ã™ã€‚" #: ../../rst/user_guide/vault.rst:629 msgid "hexlify()'ed string of the ciphertext. The ciphertext is:" msgstr "æš—å·æ–‡ã® hexlify() ãŒè¡Œã‚ã‚ŒãŸæ–‡å­—列ã§ã™ã€‚æš—å·æ–‡ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:631 msgid "AES256 encrypted data. The data is encrypted using:" msgstr "AES256 ã§æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ã§ã™ã€‚ãƒ‡ãƒ¼ã‚¿ã¯æ¬¡ã‚’使用ã—ã¦æš—å·åŒ–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/vault.rst:633 msgid "AES-CTR stream cipher" msgstr "AES-CTR ストリーム暗å·" #: ../../rst/user_guide/vault.rst:634 msgid "cipher key" msgstr "æš—å·éµ" #: ../../rst/user_guide/vault.rst:635 msgid "IV" msgstr "IV" #: ../../rst/user_guide/vault.rst:636 msgid "a 128 bit counter block seeded from an integer IV" msgstr "æ•´æ•° IV ã‹ã‚‰ã‚·ãƒ¼ãƒ‰ã•れ㟠128 ビットã®ã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ãƒ–ロック" #: ../../rst/user_guide/vault.rst:637 msgid "the plaintext" msgstr "平文" #: ../../rst/user_guide/vault.rst:639 msgid "the original plaintext" msgstr "å…ƒã®å¹³æ–‡" #: ../../rst/user_guide/vault.rst:640 msgid "padding up to the AES256 blocksize. (The data used for padding is based on `RFC5652 `_)" msgstr "AES256 ブロックサイズã¾ã§ã®ãƒ‘ディング (パディングã«ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯ `RFC5652 `_ ã«åŸºã¥ã„ã¦ã„ã¾ã™)" #: ../../rst/user_guide/windows.rst:4 msgid "Windows Guides" msgstr "Windows ガイド" #: ../../rst/user_guide/windows.rst:6 msgid "The following sections provide information on managing Windows hosts with Ansible." msgstr "以下ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€Ansible を使用ã—㟠Windows ホストã®ç®¡ç†ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows.rst:9 msgid "Because Windows is a non-POSIX-compliant operating system, there are differences between how Ansible interacts with them and the way Windows works. These guides will highlight some of the differences between Linux/Unix hosts and hosts running Windows." msgstr "Windows 㯠POSIX ã«æº–æ‹ ã—ã¦ã„ãªã„ OS ã§ã‚ã‚‹ãŸã‚ã€Ansible ã®å‹•作方法㨠Windows ã®å‹•作方法ã«ã¯é•ã„ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€Linux/Unix ホスト㨠Windows を実行ã™ã‚‹ãƒ›ã‚¹ãƒˆã®é•ã„を紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:2 msgid "Desired State Configuration" msgstr "Desired State Configuration" #: ../../rst/user_guide/windows_dsc.rst:8 msgid "What is Desired State Configuration?" msgstr "Desired State Configuration ã¨ã¯" #: ../../rst/user_guide/windows_dsc.rst:9 msgid "Desired State Configuration, or DSC, is a tool built into PowerShell that can be used to define a Windows host setup through code. The overall purpose of DSC is the same as Ansible, it is just executed in a different manner. Since Ansible 2.4, the ``win_dsc`` module has been added and can be used to take advantage of existing DSC resources when interacting with a Windows host." msgstr "Desired State Configuration (DSC) ã¯ã€PowerShell ã«çµ„ã¿è¾¼ã¾ã‚ŒãŸãƒ„ールã§ã€ã‚³ãƒ¼ãƒ‰ã«ã‚ˆã£ã¦ Windows ホストã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を定義ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚DSC ã®å…¨ä½“çš„ãªç›®çš„㯠Ansible ã¨åŒã˜ã§ã™ãŒã€å®Ÿè¡Œæ–¹æ³•ãŒç•°ãªã‚‹ã ã‘ã§ã™ã€‚Ansible 2.4 ã‹ã‚‰ã¯ã€``win_dsc`` モジュールãŒè¿½åŠ ã•れã€Windows ホストã¨ã®ã‚„りã¨ã‚Šã®éš›ã«ã€æ—¢å­˜ã® DSC リソースを活用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:15 msgid "More details on DSC can be viewed at `DSC Overview `_." msgstr "DSC ã®è©³ç´°ã¯ã€Œ`DSC Overview `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_dsc.rst:18 #: ../../rst/user_guide/windows_setup.rst:11 msgid "Host Requirements" msgstr "ホストè¦ä»¶" #: ../../rst/user_guide/windows_dsc.rst:19 msgid "To use the ``win_dsc`` module, a Windows host must have PowerShell v5.0 or newer installed. All supported hosts, except for Windows Server 2008 (non R2) can be upgraded to PowerShell v5." msgstr "``win_dsc`` モジュールを使用ã™ã‚‹ã«ã¯ã€Windows ホスト㫠PowerShell v5.0 以é™ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Windows Server 2008 (R2 以外) を除ãサãƒãƒ¼ãƒˆå¯¾è±¡ã®ãƒ›ã‚¹ãƒˆã¯ã™ã¹ã¦ã€PowerShell v5.0 ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:23 msgid "Once the PowerShell requirements have been met, using DSC is as simple as creating a task with the ``win_dsc`` module." msgstr "PowerShell ã®è¦ä»¶ã‚’満ãŸã—ã¦ã„れã°ã€DSC を使用ã™ã‚‹ã“ã¨ã¯ã€``win_dsc`` モジュールã§ã‚¿ã‚¹ã‚¯ã‚’作æˆã™ã‚‹ã®ã¨åŒã˜ãらã„ç°¡å˜ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:27 msgid "Why Use DSC?" msgstr "DSC を使用ã™ã‚‹ç†ç”±" #: ../../rst/user_guide/windows_dsc.rst:28 msgid "DSC and Ansible modules have a common goal which is to define and ensure the state of a resource. Because of this, resources like the DSC `File resource `_ and Ansible ``win_file`` can be used to achieve the same result. Deciding which to use depends on the scenario." msgstr "DSC 㨠Ansible モジュールã«ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’å®šç¾©ã—ã¦ä¿è¨¼ã™ã‚‹ã¨ã„ã†å…±é€šã®ç›®çš„ãŒã‚りã¾ã™ã€‚ã“ã®ãŸã‚ã€DSC `ファイルリソース `_ ã‚„ Ansible``win_file`` ã®ã‚ˆã†ãªãƒªã‚½ãƒ¼ã‚¹ã‚’使用ã—ã¦ã€åŒã˜çµæžœã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã©ã¡ã‚‰ã‚’使用ã™ã‚‹ã‹ã¯ã€ã‚·ãƒŠãƒªã‚ªã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:34 msgid "Reasons for using an Ansible module over a DSC resource:" msgstr "DSC リソース㧠Ansible モジュールを使用ã™ã‚‹ç†ç”±:" #: ../../rst/user_guide/windows_dsc.rst:36 msgid "The host does not support PowerShell v5.0, or it cannot easily be upgraded" msgstr "ホスト㌠PowerShell v5.0 をサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ã€ã¾ãŸã¯ç°¡å˜ã«ã‚¢ãƒƒãƒ—グレードã§ããªã„" #: ../../rst/user_guide/windows_dsc.rst:37 msgid "The DSC resource does not offer a feature present in an Ansible module. For example win_regedit can manage the ``REG_NONE`` property type, while the DSC ``Registry`` resource cannot" msgstr "DSC リソースã¯ã€Ansible モジュールã«å­˜åœ¨ã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã—ãªã„。ãŸã¨ãˆã°ã€win_regedit 㯠``REG_NONE`` ã®ãƒ—ロパティータイプを管ç†ã§ãã¾ã™ãŒã€DSC ã® ``Registry`` リソースã§ã¯ç®¡ç†ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/windows_dsc.rst:40 msgid "DSC resources have limited check mode support, while some Ansible modules have better checks" msgstr "DSC ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ãƒã‚§ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã®ã‚µãƒãƒ¼ãƒˆãŒé™ã‚‰ã‚Œã¦ã„ã‚‹ãŒã€Ansible モジュールã®ä¸­ã«ã¯ã‚ˆã‚Šå„ªã‚ŒãŸãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã‚’æŒã¤ã‚‚ã®ãŒã‚ã‚‹" #: ../../rst/user_guide/windows_dsc.rst:42 msgid "DSC resources do not support diff mode, while some Ansible modules do" msgstr "DSC リソースã§ã¯å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã•れãªã„ãŒã€ä¸€éƒ¨ã® Ansible モジュールã§ã¯ã‚µãƒãƒ¼ãƒˆã•れる" #: ../../rst/user_guide/windows_dsc.rst:43 msgid "Custom resources require further installation steps to be run on the host beforehand, while Ansible modules are built-in to Ansible" msgstr "カスタムリソースã§ã¯ã€äº‹å‰ã«ãƒ›ã‚¹ãƒˆä¸Šã§è¿½åŠ ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŒã€Ansible モジュール㯠Ansible ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹" #: ../../rst/user_guide/windows_dsc.rst:45 msgid "There are bugs in a DSC resource where an Ansible module works" msgstr "Ansible ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ©Ÿèƒ½ã™ã‚‹ DSC リソースã«ãƒã‚°ãŒã‚ã‚‹" #: ../../rst/user_guide/windows_dsc.rst:47 msgid "Reasons for using a DSC resource over an Ansible module:" msgstr "Ansible モジュール㧠DSC リソースを使用ã™ã‚‹ç†ç”±:" #: ../../rst/user_guide/windows_dsc.rst:49 msgid "The Ansible module does not support a feature present in a DSC resource" msgstr "Ansible モジュールã¯ã€DSC リソースã«å­˜åœ¨ã™ã‚‹æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„" #: ../../rst/user_guide/windows_dsc.rst:50 msgid "There is no Ansible module available" msgstr "利用å¯èƒ½ãª Ansible モジュールãŒãªã„" #: ../../rst/user_guide/windows_dsc.rst:51 msgid "There are bugs in an existing Ansible module" msgstr "既存㮠Ansible モジュールã«ãƒã‚°ãŒã‚ã‚‹" #: ../../rst/user_guide/windows_dsc.rst:53 msgid "In the end, it doesn't matter whether the task is performed with DSC or an Ansible module; what matters is that the task is performed correctly and the playbooks are still readable. If you have more experience with DSC over Ansible and it does the job, just use DSC for that task." msgstr "ã¤ã¾ã‚‹ã¨ã“ã‚ã€ã‚¿ã‚¹ã‚¯ãŒ DSC ã§å®Ÿè¡Œã•れる㋠Ansible モジュールã§å®Ÿè¡Œã•れるã‹ã¯é‡è¦ã§ã¯ã‚りã¾ã›ã‚“。é‡è¦ãªã®ã¯ã€ã‚¿ã‚¹ã‚¯ãŒæ­£ã—ã実行ã•れã€Playbook ãŒèª­ã‚ã‚‹ã“ã¨ã§ã™ã€‚Ansible よりも DSC ã®æ–¹ã‚’使用ã—ãŸçµŒé¨“ãŒã‚りã€ãれã§å¿…è¦ãªã“ã¨ãŒã§ãã‚‹ã®ã§ã‚れã°ã€ãã®ã‚¿ã‚¹ã‚¯ã«ã¯ DSC を使用ã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†ã€‚" #: ../../rst/user_guide/windows_dsc.rst:59 msgid "How to Use DSC?" msgstr "DSC ã®ä½¿ç”¨æ–¹æ³•" #: ../../rst/user_guide/windows_dsc.rst:60 msgid "The ``win_dsc`` module takes in a free-form of options so that it changes according to the resource it is managing. A list of built in resources can be found at `resources `_." msgstr "``win_dsc`` モジュールã¯ã€ç®¡ç†ã—ã¦ã„るリソースã«å¿œã˜ã¦å¤‰åŒ–ã™ã‚‹ã‚ˆã†ã«ã€ãƒ•リーフォームã®ã‚ªãƒ—ションをå–り入れã¦ã„ã¾ã™ã€‚組ã¿è¾¼ã¾ã‚Œã¦ã„るリソースã®ãƒªã‚¹ãƒˆã¯ã€Œ`リソース `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_dsc.rst:64 msgid "Using the `Registry `_ resource as an example, this is the DSC definition as documented by Microsoft:" msgstr "`Registry `_ リソースを例ã«ã¨ã‚‹ã¨ã€ã“れ㯠Microsoft ãŒæ–‡æ›¸åŒ–ã—ãŸDSCã®å®šç¾©ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:81 msgid "When defining the task, ``resource_name`` must be set to the DSC resource being used - in this case the ``resource_name`` should be set to ``Registry``. The ``module_version`` can refer to a specific version of the DSC resource installed; if left blank it will default to the latest version. The other options are parameters that are used to define the resource, such as ``Key`` and ``ValueName``. While the options in the task are not case sensitive, keeping the case as-is is recommended because it makes it easier to distinguish DSC resource options from Ansible's ``win_dsc`` options." msgstr "タスクを定義ã™ã‚‹éš›ã«ã¯ã€ä½¿ç”¨ã™ã‚‹ DSC リソースを ``resource_name`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®å ´åˆã€``resource_name`` 㯠``Registry`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚``module_version`` ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ DSC リソースã®ç‰¹å®šã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ç©ºç™½ã«ã™ã‚‹ã¨ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãªã‚Šã¾ã™ã€‚ãã®ä»–ã®ã‚ªãƒ—ション㯠``Key`` ã‚„ ``ValueName`` ã®ã‚ˆã†ã«ãƒªã‚½ãƒ¼ã‚¹ã‚’定義ã™ã‚‹ãŸã‚ã®ãƒ‘ラメーターã«ãªã‚Šã¾ã™ã€‚タスクã®ã‚ªãƒ—ションã¯å¤§æ–‡å­—å°æ–‡å­—を区別ã—ã¾ã›ã‚“ãŒã€DSC リソースã®ã‚ªãƒ—ション㨠Ansible ã®``win_dsc`` ã®ã‚ªãƒ—ションを区別ã—ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€å¤§æ–‡å­—å°æ–‡å­—ã‚’ãã®ã¾ã¾ã«ã—ã¦ãŠãã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:90 msgid "This is what the Ansible task version of the above DSC Registry resource would look like:" msgstr "上記㮠DSC レジストリーリソース㮠Ansible タスクãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:102 msgid "Starting in Ansible 2.8, the ``win_dsc`` module automatically validates the input options from Ansible with the DSC definition. This means Ansible will fail if the option name is incorrect, a mandatory option is not set, or the value is not a valid choice. When running Ansible with a verbosity level of 3 or more (``-vvv``), the return value will contain the possible invocation options based on the ``resource_name`` specified. Here is an example of the invocation output for the above ``Registry`` task:" msgstr "Ansible 2.8 よりã€``win_dsc`` モジュールã¯ã€Ansible ã‹ã‚‰ã®å…¥åŠ›ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’ DSC 定義ã§è‡ªå‹•çš„ã«æ¤œè¨¼ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚ªãƒ—ションåãŒé–“é•ã£ã¦ã„ãŸã‚Šã€å¿…須オプションãŒè¨­å®šã•れã¦ã„ãªã‹ã£ãŸã‚Šã€å€¤ãŒæœ‰åйãªé¸æŠžè‚¢ã§ãªã‹ã£ãŸã‚Šã™ã‚‹ã¨ã€Ansible ã¯å¤±æ•—ã—ã¾ã™ã€‚Ansible を冗長レベル 3 以上 (``-vvv``) ã§å®Ÿè¡Œã—ãŸå ´åˆã€æˆ»ã‚Šå€¤ã«ã¯ã€æŒ‡å®šã•れ㟠``resource_name`` ã«åŸºã¥ã„ã¦å¯èƒ½ãªå‘¼ã³å‡ºã—オプションãŒå«ã¾ã‚Œã¾ã™ã€‚以下ã¯ã€ä¸Šè¨˜ã® ``Registry`` タスクã®å‘¼ã³å‡ºã—出力ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:157 msgid "The ``invocation.module_args`` key shows the actual values that were set as well as other possible values that were not set. Unfortunately this will not show the default value for a DSC property, only what was set from the Ansible task. Any ``*_password`` option will be masked in the output for security reasons, if there are any other sensitive module options, set ``no_log: True`` on the task to stop all task output from being logged." msgstr "``invocation.module_args`` キーã¯ã€è¨­å®šã•れãŸå®Ÿéš›ã®å€¤ã¨ã€è¨­å®šã•れãªã‹ã£ãŸä»–ã®å¯èƒ½ãªå€¤ã‚’表示ã—ã¾ã™ã€‚DSC プロパティーã®ãƒ‡ãƒ•ォルト値ã¯è¡¨ç¤ºã•れãšã€Ansible タスクã§è¨­å®šã•れãŸå€¤ã®ã¿ãŒè¡¨ç¤ºã•れã¾ã™ã€‚``*_password`` オプションã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ä¸Šã®ç†ç”±ã‹ã‚‰å‡ºåŠ›ã§ã¯ãƒžã‚¹ã‚¯ã•れã¾ã™ã€‚ä»–ã«æ©Ÿå¯†æ€§ã®é«˜ã„モジュールオプションãŒã‚ã‚‹å ´åˆã¯ã€ã‚¿ã‚¹ã‚¯ã« ``no_log: True`` を設定ã—ã¦ã€ã™ã¹ã¦ã®ã‚¿ã‚¹ã‚¯å‡ºåŠ›ãŒãƒ­ã‚°ã«è¨˜éŒ²ã•れãªã„よã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_dsc.rst:166 msgid "Property Types" msgstr "プロパティータイプ" #: ../../rst/user_guide/windows_dsc.rst:167 msgid "Each DSC resource property has a type that is associated with it. Ansible will try to convert the defined options to the correct type during execution. For simple types like ``[string]`` and ``[bool]`` this is a simple operation, but complex types like ``[PSCredential]`` or arrays (like ``[string[]]``) this require certain rules." msgstr "å„ DSC リソースプロパティーã«ã¯ã€ãれã«é–¢é€£ä»˜ã‘られãŸã‚¿ã‚¤ãƒ—ãŒã‚りã¾ã™ã€‚Ansible ã¯ã€å®Ÿè¡Œæ™‚ã«å®šç¾©ã•れãŸã‚ªãƒ—ションを正ã—ã„タイプã«å¤‰æ›ã—よã†ã¨ã—ã¾ã™ã€‚``[string]`` ã‚„ ``[bool]`` ã®ã‚ˆã†ãªå˜ç´”ãªã‚¿ã‚¤ãƒ—ã§ã¯ã€ã“れã¯å˜ç´”ãªæ“作ã§ã™ãŒã€``[PSCredential]`` ã‚„é…列 (``[string[]]`` ãªã©) ã®ã‚ˆã†ãªè¤‡é›‘ãªã‚¿ã‚¤ãƒ—ã§ã¯ã€ç‰¹å®šã®ãƒ«ãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:174 msgid "PSCredential" msgstr "PSCredential" #: ../../rst/user_guide/windows_dsc.rst:175 msgid "A ``[PSCredential]`` object is used to store credentials in a secure way, but Ansible has no way to serialize this over JSON. To set a DSC PSCredential property, the definition of that parameter should have two entries that are suffixed with ``_username`` and ``_password`` for the username and password respectively. For example:" msgstr "``[PSCredential]`` オブジェクトã¯èªè¨¼æƒ…å ±ã‚’å®‰å…¨ãªæ–¹æ³•ã§ä¿å­˜ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ãŒã€Ansible ã«ã¯ã“れを JSON ã§ã‚·ãƒªã‚¢ãƒ«åŒ–ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã›ã‚“。DSC PSCredential プロパティーを設定ã™ã‚‹ã«ã¯ã€ãã®ãƒ‘ラメーターã®å®šç¾©ã«ã€ãƒ¦ãƒ¼ã‚¶åã¨ãƒ‘スワードをãれãžã‚Œ ``_username`` 㨠``_password`` をサフィックスã«ã—㟠2 ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’追加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãŸã¨ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:189 msgid "On versions of Ansible older than 2.8, you should set ``no_log: yes`` on the task definition in Ansible to ensure any credentials used are not stored in any log file or console output." msgstr "2.8 よりå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§ã¯ã€Ansible ã®ã‚¿ã‚¹ã‚¯å®šç¾©ã« ``no_log: yes`` を設定ã—ã¦ã€ä½¿ç”¨ã™ã‚‹èªè¨¼æƒ…å ±ãŒãƒ­ã‚°ãƒ•ァイルã¾ãŸã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®å‡ºåŠ›ã«ä¿å­˜ã•れãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:193 msgid "A ``[PSCredential]`` is defined with ``EmbeddedInstance(\"MSFT_Credential\")`` in a DSC resource MOF definition." msgstr "``[PSCredential]`` ã¯ã€DSC リソース㮠MOF 定義ã«ãŠã„ã¦``EmbeddedInstance(\"MSFT_Credential\")`` ã¨å…±ã«å®šç¾©ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:197 msgid "CimInstance Type" msgstr "CimInstance タイプ" #: ../../rst/user_guide/windows_dsc.rst:198 msgid "A ``[CimInstance]`` object is used by DSC to store a dictionary object based on a custom class defined by that resource. Defining a value that takes in a ``[CimInstance]`` in YAML is the same as defining a dictionary in YAML. For example, to define a ``[CimInstance]`` value in Ansible:" msgstr "``[CimInstance]`` オブジェクトã¯ã€DSC ãŒãã®ãƒªã‚½ãƒ¼ã‚¹ã§å®šç¾©ã•れãŸã‚«ã‚¹ã‚¿ãƒ ã‚¯ãƒ©ã‚¹ã«åŸºã¥ã„ã¦ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚ªãƒ–ジェクトを格ç´ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚``[CimInstance]`` ã‚’å–り込む値を YAML ã§å®šç¾©ã™ã‚‹ã“ã¨ã¯ã€YAML ã§ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼ã‚’定義ã™ã‚‹ã“ã¨ã¨åŒã˜ã§ã™ã€‚ãŸã¨ãˆã°ã€Ansible ã§``[CimInstance]`` ã®å€¤ã‚’定義ã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:212 msgid "In the above example, the CIM instance is a representation of the class `MSFT_xWebAuthenticationInformation `_. This class accepts four boolean variables, ``Anonymous``, ``Basic``, ``Digest``, and ``Windows``. The keys to use in a ``[CimInstance]`` depend on the class it represents. Please read through the documentation of the resource to determine the keys that can be used and the types of each key value. The class definition is typically located in the ``.schema.mof``." msgstr "上記ã®ä¾‹ã§ã¯ã€CIM インスタンスã¯ã€ã‚¯ãƒ©ã‚¹ `MSFT_xWebAuthenticationInformation `_ ã®è¡¨ç¾ã§ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€``Anonymous``ã€``Basic``ã€``Digest``ã€``Windows`` ã¨ã„ㆠ4 ã¤ã®ãƒ–ール変数をå—ã‘入れã¾ã™ã€‚``[CimInstance]`` ã§ä½¿ç”¨ã™ã‚‹ã‚­ãƒ¼ã¯ã€ãれãŒè¡¨ç¾ã™ã‚‹ã‚¯ãƒ©ã‚¹ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚使用ã§ãるキーã¨å„キーã®å€¤ã®ã‚¿ã‚¤ãƒ—ã«ã¤ã„ã¦ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。クラスã®å®šç¾©ã¯ã€é€šå¸¸ã€``.schema.mof`` ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:221 msgid "HashTable Type" msgstr "HashTable タイプ" #: ../../rst/user_guide/windows_dsc.rst:222 msgid "A ``[HashTable]`` object is also a dictionary but does not have a strict set of keys that can/need to be defined. Like a ``[CimInstance]``, define it like a normal dictionary value in YAML. A ``[HashTable]]`` is defined with ``EmbeddedInstance(\"MSFT_KeyValuePair\")`` in a DSC resource MOF definition." msgstr "``[HashTable]`` オブジェクトもディクショナリーã§ã™ãŒã€å®šç¾©ã§ãã‚‹/ã—ãªã‘れã°ãªã‚‰ãªã„厳密ãªéµã®ã‚»ãƒƒãƒˆãŒã‚りã¾ã›ã‚“。``[CimInstance]`` ã®ã‚ˆã†ã«ã€YAML ã§é€šå¸¸ã®ãƒ‡ã‚£ã‚¯ã‚·ãƒ§ãƒŠãƒªãƒ¼å€¤ã®ã‚ˆã†ã«å®šç¾©ã—ã¾ã™ã€‚``[HashTable]]`` ã¯ã€DSC リソース㮠MOF 定義ã«ãŠã„㦠``EmbeddedInstance(\"MSFT_KeyValuePair\")`` ã¨å…±ã«å®šç¾©ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:228 msgid "Arrays" msgstr "é…列" #: ../../rst/user_guide/windows_dsc.rst:229 msgid "Simple type arrays like ``[string[]]`` or ``[UInt32[]]`` are defined as a list or as a comma separated string which are then cast to their type. Using a list is recommended because the values are not manually parsed by the ``win_dsc`` module before being passed to the DSC engine. For example, to define a simple type array in Ansible:" msgstr "``[string[]]`` ã‚„ ``[UInt32[]]`` ã®ã‚ˆã†ãªå˜ç´”ãªã‚¿ã‚¤ãƒ—ã®é…列ã¯ã€ãƒªã‚¹ãƒˆã¾ãŸã¯ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®æ–‡å­—列ã¨ã—ã¦å®šç¾©ã•れã€ãれらãŒã‚¿ã‚¤ãƒ—ã«ã‚­ãƒ£ã‚¹ãƒˆã•れã¾ã™ã€‚リストを使用ã™ã‚‹ã¨ã€DSC ã‚¨ãƒ³ã‚¸ãƒ³ã«æ¸¡ã™å‰ã« ``win_dsc`` モジュールã§å€¤ãŒæ‰‹å‹•ã§è§£æžã•れãªã„ãŸã‚ã€æŽ¨å¥¨ã•れã¾ã™ã€‚ãŸã¨ãˆã°ã€Ansible ã§å˜ç´”ãªã‚¿ã‚¤ãƒ—ã®é…列を定義ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:250 msgid "Complex type arrays like ``[CimInstance[]]`` (array of dicts), can be defined like this example:" msgstr "``[CimInstance[]]`` (ディクショナリーã®é…列) ã®ã‚ˆã†ãªè¤‡é›‘ãªã‚¿ã‚¤ãƒ—ã®é…列ã¯ã€æ¬¡ã®ä¾‹ã®ã‚ˆã†ã«å®šç¾©ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:268 msgid "The above example, is an array with two values of the class `MSFT_xWebBindingInformation `_. When defining a ``[CimInstance[]]``, be sure to read the resource documentation to find out what keys to use in the definition." msgstr "上記ã®ä¾‹ã¯ã€`MSFT_xWebBindingInformation `_ クラス㮠2 ã¤ã®å€¤ã®ã‚ã‚‹é…列ã§ã™ã€‚``[CimInstance[]]`` を定義ã™ã‚‹ã¨ã€ãƒªã‚½ãƒ¼ã‚¹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ã€å®šç¾©ã§ä½¿ç”¨ã™ã‚‹ã‚­ãƒ¼ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_dsc.rst:273 msgid "DateTime" msgstr "日時" #: ../../rst/user_guide/windows_dsc.rst:274 msgid "A ``[DateTime]`` object is a DateTime string representing the date and time in the `ISO 8601 `_ date time format. The value for a ``[DateTime]`` field should be quoted in YAML to ensure the string is properly serialized to the Windows host. Here is an example of how to define a ``[DateTime]`` value in Ansible:" msgstr "``[DateTime]`` オブジェクトã¯ã€`ISO 8601 `_ ã®æ—¥æ™‚ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ—¥ä»˜ã¨æ™‚間を表㙠DateTime 文字列ã§ã™ã€‚``[DateTime]`` フィールドã®å€¤ã¯ã€æ–‡å­—列㌠Windows ホストã«é©åˆ‡ã«ã‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºã•れるよã†ã«ã€YAML ã§å¼•用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚以下ã¯ã€Ansible ã§``[DateTime]`` ã®å€¤ã‚’定義ã™ã‚‹æ–¹æ³•ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:291 msgid "All the values above are equal to a UTC date time of February 22nd 2019 at 1:57pm with 31 seconds and 2311892 milliseconds." msgstr "上記ã®ã™ã¹ã¦ã®å€¤ã¯ã€UTC㮠日付時刻㌠2019 å¹´ 2 月 22 æ—¥åˆå¾Œ 1 時 57 分 31 ç§’ 2311892 ミリ秒ã§ã‚ã‚‹ã“ã¨ã¨åŒã˜ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:295 msgid "Run As Another User" msgstr "別ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦å®Ÿè¡Œ" #: ../../rst/user_guide/windows_dsc.rst:296 msgid "By default, DSC runs each resource as the SYSTEM account and not the account that Ansible use to run the module. This means that resources that are dynamically loaded based on a user profile, like the ``HKEY_CURRENT_USER`` registry hive, will be loaded under the ``SYSTEM`` profile. The parameter ``PsDscRunAsCredential`` is a parameter that can be set for every DSC resource force the DSC engine to run under a different account. As ``PsDscRunAsCredential`` has a type of ``PSCredential``, it is defined with the ``_username`` and ``_password`` suffix." msgstr "デフォルトã§ã¯ã€DSC ã¯å„リソースをã€Ansible ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®å®Ÿè¡Œã«ä½¿ç”¨ã™ã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã¯ãªãã€SYSTEM アカウントã¨ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€``HKEY_CURRENT_USER`` ã®ãƒ¬ã‚¸ã‚¹ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ–ã®ã‚ˆã†ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ—ロファイルã«åŸºã¥ã„ã¦å‹•çš„ã«èª­ã¿è¾¼ã¾ã‚Œã‚‹ãƒªã‚½ãƒ¼ã‚¹ã¯ã€``SYSTEM`` ã®ãƒ—ロファイルã§èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚``PsDscRunAsCredential`` ã¯ã€DSC エンジンãŒåˆ¥ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§å®Ÿè¡Œã•れるよã†ã«ã€ã™ã¹ã¦ã® DSC リソースã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãるパラメーターã§ã™ã€‚``PsDscRunAsCredential`` ã¯ã‚¿ã‚¤ãƒ—㌠``PSCredential`` ãªã®ã§ã€ã‚µãƒ•ィックス ``_username`` ã¨``_password`` ã§å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:305 msgid "Using the Registry resource type as an example, this is how to define a task to access the ``HKEY_CURRENT_USER`` hive of the Ansible user:" msgstr "レジストリーリソースタイプを例ã¨ã—ã¦ä½¿ç”¨ã—ã€Ansible ユーザー㮠``HKEY_CURRENT_USER`` ãƒã‚¤ãƒ–ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã‚¿ã‚¹ã‚¯ã‚’定義ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:322 msgid "Custom DSC Resources" msgstr "カスタム㮠DSC リソース" #: ../../rst/user_guide/windows_dsc.rst:323 msgid "DSC resources are not limited to the built-in options from Microsoft. Custom modules can be installed to manage other resources that are not usually available." msgstr "DSC ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã€Microsoft ã®çµ„ã¿è¾¼ã¿ã‚ªãƒ—ションã«é™å®šã•れã¾ã›ã‚“。カスタムモジュールをインストールã™ã‚‹ã“ã¨ã§ã€é€šå¸¸ã§ã¯åˆ©ç”¨ã§ããªã„ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’管ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:327 msgid "Finding Custom DSC Resources" msgstr "カスタム㮠DSC リソースã®è¦‹ã¤ã‘æ–¹" #: ../../rst/user_guide/windows_dsc.rst:328 msgid "You can use the `PSGallery `_ to find custom resources, along with documentation on how to install them on a Windows host." msgstr "`PSGallery `_ を使用ã™ã‚‹ã¨ã€ã‚«ã‚¹ã‚¿ãƒ ãƒªã‚½ãƒ¼ã‚¹ã¨ã€ãれを Windows ホストã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹æ–¹æ³•ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:331 msgid "The ``Find-DscResource`` cmdlet can also be used to find custom resources. For example:" msgstr "``Find-DscResource`` コマンドレットを使用ã—ã¦ã€ã‚«ã‚¹ã‚¿ãƒ ãƒªã‚½ãƒ¼ã‚¹ã‚’検索ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:341 msgid "DSC resources developed by Microsoft that start with ``x``, means the resource is experimental and comes with no support." msgstr "Microsoft ãŒé–‹ç™ºã—㟠DSC リソースã§ã€``x`` ã§å§‹ã¾ã‚‹ã‚‚ã®ã¯ã€å®Ÿé¨“çš„ãªãƒªã‚½ãƒ¼ã‚¹ã§ã‚りã€ã‚µãƒãƒ¼ãƒˆãŒãªã„ã“ã¨ã‚’æ„味ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:345 msgid "Installing a Custom Resource" msgstr "カスタムリソースã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_dsc.rst:346 msgid "There are three ways that a DSC resource can be installed on a host:" msgstr "DSC リソースをホストã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹æ–¹æ³•㯠3 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:348 msgid "Manually with the ``Install-Module`` cmdlet" msgstr "``Install-Module`` コマンドレットを手動ã§ä½¿ç”¨" #: ../../rst/user_guide/windows_dsc.rst:349 msgid "Using the ``win_psmodule`` Ansible module" msgstr "Ansibleモジュール ``win_psmodule`` を使用" #: ../../rst/user_guide/windows_dsc.rst:350 msgid "Saving the module manually and copying it another host" msgstr "モジュールを手動ã§ä¿å­˜ã—ã¦åˆ¥ã®ãƒ›ã‚¹ãƒˆã«ã‚³ãƒ”ー" #: ../../rst/user_guide/windows_dsc.rst:352 msgid "This is an example of installing the ``xWebAdministration`` resources using ``win_psmodule``:" msgstr "ã“れã¯ã€``win_psmodule`` を使用ã—㦠``xWebAdministration`` リソースをインストールã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:362 msgid "Once installed, the win_dsc module will be able to use the resource by referencing it with the ``resource_name`` option." msgstr "インストールã™ã‚‹ã¨ã€win_dsc モジュールã¯ã€``resource_name`` オプションã§ãƒªã‚½ãƒ¼ã‚¹ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã§ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’使用ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:365 msgid "The first two methods above only work when the host has access to the internet. When a host does not have internet access, the module must first be installed using the methods above on another host with internet access and then copied across. To save a module to a local filepath, the following PowerShell cmdlet can be run::" msgstr "ä¸Šè¨˜ã®æœ€åˆã® 2 ã¤ã®æ–¹æ³•ã¯ã€ãƒ›ã‚¹ãƒˆãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚ホストãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€ã¾ãšã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãる別ã®ãƒ›ã‚¹ãƒˆä¸Šã§ä¸Šè¨˜ã®æ–¹æ³•を使用ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インストールã—ã€ãれをコピーã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モジュールをローカルã®ãƒ•ァイルパスã«ä¿å­˜ã™ã‚‹ã«ã¯ã€æ¬¡ã® PowerShell コマンドレットを実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:373 msgid "This will create a folder called ``xWebAdministration`` in ``C:\\temp`` which can be copied to any host. For PowerShell to see this offline resource, it must be copied to a directory set in the ``PSModulePath`` environment variable. In most cases the path ``C:\\Program Files\\WindowsPowerShell\\Module`` is set through this variable, but the ``win_path`` module can be used to add different paths." msgstr "ã“れã«ã‚ˆã‚Šã€``C:\\temp`` ã®ä¸­ã«``xWebAdministration`` フォルダーãŒä½œæˆã•れã€ã“ã®ãƒ•ィルダーã¯ã©ã®ãƒ›ã‚¹ãƒˆã«ã‚‚コピーã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚PowerShell ãŒã“ã®ã‚ªãƒ•ラインリソースを見るãŸã‚ã«ã¯ã€ç’°å¢ƒå¤‰æ•° ``PSModulePath`` ã§è¨­å®šã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚³ãƒ”ーã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€ã“ã®å¤‰æ•°ã‚’通ã˜ã¦ãƒ‘ス ``C:\\Program Files\\WindowsPowerShell\\Module`` ãŒè¨­å®šã•れã¾ã™ãŒã€``win_path`` モジュールを使用ã—ã¦ç•°ãªã‚‹ãƒ‘スを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_dsc.rst:381 msgid "Examples" msgstr "例" #: ../../rst/user_guide/windows_dsc.rst:383 msgid "Extract a zip file" msgstr "zip ファイルã®å±•é–‹" #: ../../rst/user_guide/windows_dsc.rst:395 msgid "Create a directory" msgstr "ディレクトリーã®ä½œæˆ" #: ../../rst/user_guide/windows_dsc.rst:418 msgid "Interact with Azure" msgstr "Azure ã®æ“作" #: ../../rst/user_guide/windows_dsc.rst:441 msgid "Setup IIS Website" msgstr "IIS Web サイトã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—" #: ../../rst/user_guide/windows_dsc.rst:500 #: ../../rst/user_guide/windows_setup.rst:578 #: ../../rst/user_guide/windows_usage.rst:508 #: ../../rst/user_guide/windows_winrm.rst:909 msgid ":ref:`List of Windows Modules `" msgstr ":ref:`List of Windows Modules `" #: ../../rst/user_guide/windows_dsc.rst:501 #: ../../rst/user_guide/windows_setup.rst:579 #: ../../rst/user_guide/windows_usage.rst:509 #: ../../rst/user_guide/windows_winrm.rst:910 msgid "Windows specific module list, all implemented in PowerShell" msgstr "Windows 固有ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒªã‚¹ãƒˆ (ã™ã¹ã¦ PowerShell ã«å®Ÿè£…)" #: ../../rst/user_guide/windows_faq.rst:4 msgid "Windows Frequently Asked Questions" msgstr "Windows ã«é–¢ã™ã‚‹ã‚ˆãã‚ã‚‹è³ªå• (FAQ)" #: ../../rst/user_guide/windows_faq.rst:6 msgid "Here are some commonly asked questions in regards to Ansible and Windows and their answers." msgstr "ã“ã“ã§ã¯ã€Ansible ãŠã‚ˆã³ Windows ã«é–¢ã™ã‚‹ã‚ˆãã‚る質å•ã¨ãã®å›žç­”を紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:9 msgid "This document covers questions about managing Microsoft Windows servers with Ansible. For questions about Ansible Core, please see the :ref:`general FAQ page `." msgstr "本ガイドã§ã¯ã€Ansible を使用ã—㟠Microsoft Windows サーãƒãƒ¼ã®ç®¡ç†ã«é–¢ã™ã‚‹è³ªå•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚Ansible Core ã«é–¢ã™ã‚‹è³ªå•ã¯ã€ã€Œ:ref:`一般的㪠FAQ ページ `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:14 msgid "Does Ansible work with Windows XP or Server 2003?" msgstr "Ansible ã¯ã€Windows XP ã¾ãŸã¯ Server 2003 ã§å‹•作ã—ã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:15 msgid "Ansible does not work with Windows XP or Server 2003 hosts. Ansible does work with these Windows operating system versions:" msgstr "Ansible ã¯ã€Windows XP ã¾ãŸã¯ Server 2003 ホストã§ã¯å‹•作ã—ã¾ã›ã‚“。Ansible ã¯ã€ä»¥ä¸‹ã® Windows オペレーティングシステムãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:17 msgid "Windows Server 2008 :sup:`1`" msgstr "Windows Server 2008 :sup:`1`" #: ../../rst/user_guide/windows_faq.rst:18 msgid "Windows Server 2008 R2 :sup:`1`" msgstr "Windows Server 2008 R2 :sup:`1`" #: ../../rst/user_guide/windows_faq.rst:19 msgid "Windows Server 2012" msgstr "Windows Server 2012" #: ../../rst/user_guide/windows_faq.rst:20 msgid "Windows Server 2012 R2" msgstr "Windows Server 2012 R2" #: ../../rst/user_guide/windows_faq.rst:21 msgid "Windows Server 2016" msgstr "Windows Server 2016" #: ../../rst/user_guide/windows_faq.rst:22 msgid "Windows Server 2019" msgstr "Windows Server 2019" #: ../../rst/user_guide/windows_faq.rst:23 msgid "Windows 7 :sup:`1`" msgstr "Windows 7 :sup:`1`" #: ../../rst/user_guide/windows_faq.rst:24 msgid "Windows 8.1" msgstr "Windows 8.1" #: ../../rst/user_guide/windows_faq.rst:25 msgid "Windows 10" msgstr "Windows 10" #: ../../rst/user_guide/windows_faq.rst:27 msgid "1 - See the :ref:`Server 2008 FAQ ` entry for more details." msgstr "1 - 詳細ã¯ã€:ref:`Server 2008 FAQ ` ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:29 msgid "Ansible also has minimum PowerShell version requirements - please see :ref:`windows_setup` for the latest information." msgstr "ã¾ãŸã€Ansible ã«ã¯ PowerShell ã®æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³è¦ä»¶ãŒã‚りã¾ã™ã€‚最新情報ã¯ã€Œ:ref:`windows_setup`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:35 msgid "Are Server 2008, 2008 R2 and Windows 7 supported?" msgstr "Server 2008ã€2008 R2ã€Windows 7 ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:36 msgid "Microsoft ended Extended Support for these versions of Windows on January 14th, 2020, and Ansible deprecated official support in the 2.10 release. No new feature development will occur targeting these operating systems, and automated testing has ceased. However, existing modules and features will likely continue to work, and simple pull requests to resolve issues with these Windows versions may be accepted." msgstr "Microsoft 㯠2020 å¹´ 1 月 14 æ—¥ã«ã“れらã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Windows ã® Extended Support を終了ã—ã€Ansible 㯠2.10 ã®ãƒªãƒªãƒ¼ã‚¹ã§å…¬å¼ã‚µãƒãƒ¼ãƒˆã‚’終了ã—ã¾ã—ãŸã€‚ã“れらã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚’対象ã¨ã—ãŸæ–°æ©Ÿèƒ½ã®é–‹ç™ºã¯ä»Šå¾Œè¡Œã‚れãšã€è‡ªå‹•テストも終了ã—ã¦ã„ã¾ã™ã€‚ã—ã‹ã—ã€æ—¢å­˜ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„機能ã¯å¼•ãç¶šã動作ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã€ã“れら㮠Windows ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«é–¢ã™ã‚‹å•題を解決ã™ã‚‹ãŸã‚ã®ç°¡å˜ãªãƒ—ãƒ«è¦æ±‚ã¯æ‰¿èªã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:39 msgid "Can I manage Windows Nano Server with Ansible?" msgstr "Ansible ã§ Windows Nano Server を管ç†ã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:40 msgid "Ansible does not currently work with Windows Nano Server, since it does not have access to the full .NET Framework that is used by the majority of the modules and internal components." msgstr "Ansible ã¯ç¾åœ¨ã€Windows Nano Server ã§ã¯å‹•作ã—ã¾ã›ã‚“。ã“れã¯ã€å¤§éƒ¨åˆ†ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚„内部コンãƒãƒ¼ãƒãƒ³ãƒˆã§ä½¿ç”¨ã•れã¦ã„る完全㪠.NET フレームワークã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„ãŸã‚ã§ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:45 msgid "Can Ansible run on Windows?" msgstr "Ansible 㯠Windows ã§å®Ÿè¡Œã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:46 msgid "No, Ansible can only manage Windows hosts. Ansible cannot run on a Windows host natively, though it can run under the Windows Subsystem for Linux (WSL)." msgstr "ã„ã„ãˆã€Ansible 㯠Windows ホストã®ã¿ã‚’管ç†ã§ãã¾ã™ã€‚Ansible 㯠Windows ホスト上ã§ã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ã«å®Ÿè¡Œã§ãã¾ã›ã‚“ãŒã€Windows Subsystem for Linux (WSL) ã®ä¸‹ã§å®Ÿè¡Œã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:49 msgid "The Windows Subsystem for Linux is not supported by Ansible and should not be used for production systems." msgstr "Windows Subsystem for Linux 㯠Ansible ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ãŸã‚ã€å®Ÿç¨¼åƒã‚·ã‚¹ãƒ†ãƒ ã«ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:52 msgid "To install Ansible on WSL, the following commands can be run in the bash terminal:" msgstr "WSL ã« Ansible をインストールã™ã‚‹ã«ã¯ã€bash ターミナルã§ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:61 msgid "To run Ansible from source instead of a release on the WSL, simply uninstall the pip installed version and then clone the git repo." msgstr "WSL ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ãªãソースã‹ã‚‰ Ansible を実行ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—㟠pip をアンインストールã—ã€git リãƒã‚¸ãƒˆãƒªãƒ¼ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’作æˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:73 msgid "If you encounter timeout errors when running Ansible on the WSL, this may be due to an issue with ``sleep`` not returning correctly. The following workaround may resolve the issue:" msgstr "WSL 上㧠Ansible を実行ã—ãŸã¨ãã«ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å ´åˆã¯ã€``sleep`` ãŒæ­£ã—ãè¿”ã•れãªã„å•題ãŒåŽŸå› ã¨ãªã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚以下ã®å›žé¿ç­–ã«ã‚ˆã‚Šã€ã“ã®å•題ãŒè§£æ±ºã•れる場åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:81 msgid "Another option is to use WSL 2 if running Windows 10 later than build 2004." msgstr "別ã®ã‚ªãƒ—ションã¨ã—ã¦ã€ãƒ“ルド 2004 よりも Windows 10 以上を実行ã—ã¦ã„ã‚‹å ´åˆã¯ WSL 2 を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:89 msgid "Can I use SSH keys to authenticate to Windows hosts?" msgstr "SSH キーを使用ã—㦠Windows ホストã¸ã®èªè¨¼ã‚’行ã†ã“ã¨ã¯ã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:90 msgid "You cannot use SSH keys with the WinRM or PSRP connection plugins. These connection plugins use X509 certificates for authentication instead of the SSH key pairs that SSH uses." msgstr "WinRM ã¾ãŸã¯ PSRP connection プラグイン㧠SSH éµã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã“れら㮠connection プラグインã¯ã€èªè¨¼ã« SSH ãŒä½¿ç”¨ã™ã‚‹ SSH キーペアを使用ã™ã‚‹ä»£ã‚りã«ã€X509 証明書を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:94 msgid "The way X509 certificates are generated and mapped to a user is different from the SSH implementation; consult the :ref:`windows_winrm` documentation for more information." msgstr "X509 証明書ãŒç”Ÿæˆã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒžãƒƒãƒ”ングã•れる方法ã¯ã€SSH ã®å®Ÿè£…ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚詳細ã¯ã€:ref:`windows_winrm` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:98 msgid "Ansible 2.8 has added an experimental option to use the SSH connection plugin, which uses SSH keys for authentication, for Windows servers. See :ref:`this question ` for more information." msgstr "Ansible 2.8 ã«ã¯ã€èªè¨¼ã« SSH éµã‚’使用ã™ã‚‹ SSH connection プラグインを Windows サーãƒãƒ¼ã§ä½¿ç”¨ã™ã‚‹å®Ÿé¨“çš„ãªã‚ªãƒ—ションãŒè¿½åŠ ã•れã¾ã—ãŸã€‚詳細ã¯ã€Œ:ref:`this question `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:105 msgid "Why can I run a command locally that does not work under Ansible?" msgstr "Ansible ã§æ©Ÿèƒ½ã—ãªã„コマンドをローカルã§å®Ÿè¡Œã§ãã‚‹ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:106 msgid "Ansible executes commands through WinRM. These processes are different from running a command locally in these ways:" msgstr "Ansible ã¯ã€WinRM を介ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚ã“れらã®ãƒ—ロセスã¯ã€ä»¥ä¸‹ã®æ–¹æ³•ã§ãƒ­ãƒ¼ã‚«ãƒ«ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã®ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:109 msgid "Unless using an authentication option like CredSSP or Kerberos with credential delegation, the WinRM process does not have the ability to delegate the user's credentials to a network resource, causing ``Access is Denied`` errors." msgstr "CredSSP ã‚„ Kerberos ã®ã‚ˆã†ãªèªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ã€èªè¨¼æƒ…å ±ã®å§”譲を行ã£ã¦ã„ãªã„é™ã‚Šã€WinRM プロセスã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®èªè¨¼æƒ…報をãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«å§”è­²ã™ã‚‹æ©Ÿèƒ½ãŒãªãã€``Access is Denied`` エラーãŒç™ºç”Ÿã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:114 msgid "All processes run under WinRM are in a non-interactive session. Applications that require an interactive session will not work." msgstr "WinRM ã§å®Ÿè¡Œã•れるã™ã¹ã¦ã®ãƒ—ロセスã¯ã€éžå¯¾è©±åž‹ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã™ã€‚対話型セッションを必è¦ã¨ã™ã‚‹ã‚¢ãƒ—ãƒªã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_faq.rst:117 msgid "When running through WinRM, Windows restricts access to internal Windows APIs like the Windows Update API and DPAPI, which some installers and programs rely on." msgstr "WinRM を介ã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã€Windows ã¯ã€ä¸€éƒ¨ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã‚„プログラムãŒä¾å­˜ã—ã¦ã„ã‚‹ Windows Update API ã‚„ DPAPI ãªã©ã® Windows 内部 API ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:121 msgid "Some ways to bypass these restrictions are to:" msgstr "ã“れらã®åˆ¶é™ã‚’回é¿ã™ã‚‹æ–¹æ³•ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:123 msgid "Use ``become``, which runs a command as it would when run locally. This will bypass most WinRM restrictions, as Windows is unaware the process is running under WinRM when ``become`` is used. See the :ref:`become` documentation for more information." msgstr "``become`` を使用ã™ã‚‹ã¨ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§å®Ÿè¡Œã™ã‚‹ã¨ãã¨åŒã˜ã‚ˆã†ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚``become`` を使用ã™ã‚‹ã¨ã€Windows ã¯ãƒ—ロセス㌠WinRM ã®ä¸‹ã§å®Ÿè¡Œã—ã¦ã„ã‚‹ã“ã¨ã«æ°—ã¥ã‹ãªã„ãŸã‚ã€ã»ã¨ã‚“ã©ã® WinRM ã®åˆ¶é™ã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã€:ref:`become` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:128 msgid "Use a scheduled task, which can be created with ``win_scheduled_task``. Like ``become``, it will bypass all WinRM restrictions, but it can only be used to run commands, not modules." msgstr "``win_scheduled_task`` ã§ä½œæˆã§ãã‚‹ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¾ã™ã€‚``become`` ã¨åŒæ§˜ã«ã€WinRM ã®åˆ¶é™ã‚’ã™ã¹ã¦å›žé¿ã§ãã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ãªãコマンドã®å®Ÿè¡Œã«ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:132 msgid "Use ``win_psexec`` to run a command on the host. PSExec does not use WinRM and so will bypass any of the restrictions." msgstr "``win_psexec`` を使用ã—ã¦ãƒ›ã‚¹ãƒˆã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚PSExec 㯠WinRM を使用ã—ãªã„ãŸã‚ã€ã‚らゆる制é™ã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:135 msgid "To access network resources without any of these workarounds, you can use CredSSP or Kerberos with credential delegation enabled." msgstr "ã“れらã®å›žé¿ç­–ã‚’å–らãšã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€èªè¨¼æƒ…å ±ã®å§”譲を有効ã«ã—㟠CredSSP ã¾ãŸã¯ Kerberos を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:138 msgid "See :ref:`become` more info on how to use become. The limitations section at :ref:`windows_winrm` has more details around WinRM limitations." msgstr "become ã®ä½¿ç”¨æ–¹æ³•ã«é–¢ã™ã‚‹è©³ç´°ã¯ã€ã€Œ:ref:`become`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。:ref:`windows_winrm` ã®åˆ¶é™ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€WinRM 制é™ã®è©³ç´°ãŒè¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:142 msgid "This program won't install on Windows with Ansible" msgstr "ã“ã®ãƒ—ログラムãŒã€Ansible ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ Windows ã«ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“" #: ../../rst/user_guide/windows_faq.rst:143 msgid "See :ref:`this question ` for more information about WinRM limitations." msgstr "WinRMã®åˆ¶é™ã®è©³ç´°ã¯ã€ã€Œ:ref:`ã“ã¡ã‚‰ã®è³ªå• `ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:146 msgid "What Windows modules are available?" msgstr "ã©ã®ã‚ˆã†ãª Windows モジュールãŒåˆ©ç”¨ã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:147 msgid "Most of the Ansible modules in Ansible Core are written for a combination of Linux/Unix machines and arbitrary web services. These modules are written in Python and most of them do not work on Windows." msgstr "Ansible Core ã® Ansible モジュールã®å¤šãã¯ã€Linux/Unix マシンã¨ä»»æ„ã® Web サービスã®çµ„ã¿åˆã‚ã›ã‚’想定ã—ã¦è¨˜è¿°ã•れã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ Python ã§è¨˜è¿°ã•れã¦ãŠã‚Šã€ãã®ã»ã¨ã‚“ã©ãŒ Windows ã§ã¯å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_faq.rst:151 msgid "Because of this, there are dedicated Windows modules that are written in PowerShell and are meant to be run on Windows hosts. A list of these modules can be found :ref:`here `." msgstr "ã“ã®ãŸã‚ã€PowerShell ã§è¨˜è¿°ã•れã¦ãŠã‚Šã€Windows ホストã§å®Ÿè¡Œã™ã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„る専用㮠Windows モジュールãŒã‚りã¾ã™ã€‚ã“れらã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä¸€è¦§ã¯ã€ã€Œ:ref:`here `ã€ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:155 msgid "In addition, the following Ansible Core modules/action-plugins work with Windows:" msgstr "次㮠Ansible Core モジュールãŠã‚ˆã³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒ—ラグインã¯ã€Windows ã§å‹•作ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:157 msgid "add_host" msgstr "add_host" #: ../../rst/user_guide/windows_faq.rst:158 msgid "assert" msgstr "assert" #: ../../rst/user_guide/windows_faq.rst:159 msgid "async_status" msgstr "async_status" #: ../../rst/user_guide/windows_faq.rst:160 msgid "debug" msgstr "debug" #: ../../rst/user_guide/windows_faq.rst:161 msgid "fail" msgstr "fail" #: ../../rst/user_guide/windows_faq.rst:162 msgid "fetch" msgstr "fetch" #: ../../rst/user_guide/windows_faq.rst:163 msgid "group_by" msgstr "group_by" #: ../../rst/user_guide/windows_faq.rst:164 msgid "include" msgstr "include" #: ../../rst/user_guide/windows_faq.rst:165 msgid "include_role" msgstr "include_role" #: ../../rst/user_guide/windows_faq.rst:167 msgid "meta" msgstr "meta" #: ../../rst/user_guide/windows_faq.rst:168 msgid "pause" msgstr "pause" #: ../../rst/user_guide/windows_faq.rst:169 msgid "raw" msgstr "raw" #: ../../rst/user_guide/windows_faq.rst:170 msgid "script" msgstr "script" #: ../../rst/user_guide/windows_faq.rst:171 msgid "set_fact" msgstr "set_fact" #: ../../rst/user_guide/windows_faq.rst:172 msgid "set_stats" msgstr "set_stats" #: ../../rst/user_guide/windows_faq.rst:173 msgid "setup" msgstr "setup" #: ../../rst/user_guide/windows_faq.rst:174 msgid "slurp" msgstr "slurp" #: ../../rst/user_guide/windows_faq.rst:175 msgid "template (also: win_template)" msgstr "template (win_template ã‚‚åŒæ§˜)" #: ../../rst/user_guide/windows_faq.rst:176 msgid "wait_for_connection" msgstr "wait_for_connection" #: ../../rst/user_guide/windows_faq.rst:179 msgid "Can I run Python modules on Windows hosts?" msgstr "Windows ホスト㧠Python モジュールを実行ã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:180 msgid "No, the WinRM connection protocol is set to use PowerShell modules, so Python modules will not work. A way to bypass this issue to use ``delegate_to: localhost`` to run a Python module on the Ansible controller. This is useful if during a playbook, an external service needs to be contacted and there is no equivalent Windows module available." msgstr "ã§ãã¾ã›ã‚“。WinRM 接続プロトコル㯠PowerShell モジュールを使用ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹ãŸã‚ã€Python モジュールã¯å‹•作ã—ã¾ã›ã‚“。ã“ã®å•題を回é¿ã™ã‚‹ã«ã¯ã€``delegate_to: localhost`` を使用ã—㦠Ansible コントローラー上㧠Python モジュールを実行ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã™ã€‚ã“れã¯ã€Playbook 中ã«å¤–éƒ¨ã‚µãƒ¼ãƒ“ã‚¹ã«æŽ¥ç¶šã™ã‚‹å¿…è¦ãŒã‚りã€åŒç­‰ã® Windows モジュールãŒãªã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:189 msgid "Can I connect to Windows hosts over SSH?" msgstr "SSH 経由㧠Windows ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ãã¾ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:190 msgid "Ansible 2.8 has added an experimental option to use the SSH connection plugin to manage Windows hosts. To connect to Windows hosts over SSH, you must install and configure the `Win32-OpenSSH `_ fork that is in development with Microsoft on the Windows host(s). While most of the basics should work with SSH, ``Win32-OpenSSH`` is rapidly changing, with new features added and bugs fixed in every release. It is highly recommend you `install `_ the latest release of ``Win32-OpenSSH`` from the GitHub Releases page when using it with Ansible on Windows hosts." msgstr "Ansible 2.8 ã«ã¯ã€SSH connection プラグインを使用ã—㦠Windows ホストを管ç†ã™ã‚‹å®Ÿé¨“çš„ãªã‚ªãƒ—ションãŒè¿½åŠ ã•れã¾ã—ãŸã€‚Windows ホスト㫠SSH 接続ã™ã‚‹ã«ã¯ã€Microsoft ã¨å…±åŒã§é–‹ç™ºä¸­ã® `Win32-OpenSSH `_ フォークを Windows ホストã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚åŸºæœ¬çš„ãªæ©Ÿèƒ½ã®ã»ã¨ã‚“ã©ã¯ SSH ã§å‹•作ã™ã‚‹ã¯ãšã§ã™ãŒã€``Win32-OpenSSH`` ã¯ãƒªãƒªãƒ¼ã‚¹ã”ã¨ã«æ–°æ©Ÿèƒ½ãŒè¿½åŠ ã•れãŸã‚Šã€ãƒã‚°ãŒä¿®æ­£ã•れãŸã‚Šã¨ã€æ€¥é€Ÿã«å¤‰åŒ–ã—ã¦ã„ã¾ã™ã€‚Windows ホスト㧠Ansible を使用ã™ã‚‹éš›ã«ã¯ã€GitHub Releases ページã‹ã‚‰ ``Win32-OpenSSH`` ã®æœ€æ–°ãƒªãƒªãƒ¼ã‚¹ã‚’ `インストール `_ ã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:199 msgid "To use SSH as the connection to a Windows host, set the following variables in the inventory::" msgstr "Windows ホストã¸ã®æŽ¥ç¶šã« SSH を使用ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«ä»¥ä¸‹ã®å¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:208 msgid "The value for ``ansible_shell_type`` should either be ``cmd`` or ``powershell``. Use ``cmd`` if the ``DefaultShell`` has not been configured on the SSH service and ``powershell`` if that has been set as the ``DefaultShell``." msgstr "``ansible_shell_type`` ã®å€¤ã¯ã€``cmd`` ã¾ãŸã¯ ``powershell`` ã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。SSH サービス㧠``DefaultShell`` ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ ``cmd`` を使用ã—ã¦ã€``DefaultShell`` ã¨ã—ã¦è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ ``powershell`` を使用ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:213 msgid "Why is connecting to a Windows host via SSH failing?" msgstr "SSH 経由㧠Windows ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã§ããªã„ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:214 msgid "Unless you are using ``Win32-OpenSSH`` as described above, you must connect to Windows hosts using :ref:`windows_winrm`. If your Ansible output indicates that SSH was used, either you did not set the connection vars properly or the host is not inheriting them correctly." msgstr "上記ã®ã‚ˆã†ã« ``Win32-OpenSSH`` を使用ã—ã¦ã„ã‚‹å ´åˆã‚’除ãã€Windows ホストã¸ã®æŽ¥ç¶šã«ã¯ :ref:`windows_winrm` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Ansible ã®å‡ºåŠ›ã§ SSH ãŒä½¿ç”¨ã•れãŸã¨è¡¨ç¤ºã•れãŸå ´åˆã¯ã€æŽ¥ç¶šãƒãƒ¼ãŒæ­£ã—ã設定ã•れã¦ã„ãªã„ã‹ã€ãƒ›ã‚¹ãƒˆã«æ­£ã—ã継承ã•れã¦ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_faq.rst:218 msgid "Make sure ``ansible_connection: winrm`` is set in the inventory for the Windows host(s)." msgstr "Windows ホストã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã« ``ansible_connection: winrm`` ãŒè¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:222 msgid "Why are my credentials being rejected?" msgstr "èªè¨¼æƒ…å ±ãŒæ‹’å¦ã•れるã®ã¯ãªãœã§ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:223 msgid "This can be due to a myriad of reasons unrelated to incorrect credentials." msgstr "ã“れã¯ã€èª¤ã£ãŸèªè¨¼æƒ…å ±ã¨ã¯ç„¡é–¢ä¿‚ã®ã€å¤šç¨®å¤šæ§˜ãªã‚‚ã®ãŒåŽŸå› ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:225 msgid "See HTTP 401/Credentials Rejected at :ref:`windows_setup` for a more detailed guide of this could mean." msgstr "ã“ã®ç¾è±¡ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€:ref:`windows_setup` ã®ã€ŒHTTP 401/èªè¨¼æƒ…å ±ã®æ‹’å¦ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:229 msgid "Why am I getting an error SSL CERTIFICATE_VERIFY_FAILED?" msgstr "SSL CERTIFICATE_VERIFY_FAILED エラーãŒç™ºç”Ÿã™ã‚‹ã®ã¯ãªãœã§ã™ã‹" #: ../../rst/user_guide/windows_faq.rst:230 msgid "When the Ansible controller is running on Python 2.7.9+ or an older version of Python that has backported SSLContext (like Python 2.7.5 on RHEL 7), the controller will attempt to validate the certificate WinRM is using for an HTTPS connection. If the certificate cannot be validated (such as in the case of a self signed cert), it will fail the verification process." msgstr "Ansible コントローラー㌠Python 2.7.9 以é™ã¾ãŸã¯ SSLContext ã‚’ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã—ãŸå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Python (RHEL 7 ã® Python 2.7.5 ãªã©) ã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¯ WinRM ㌠HTTPS 接続ã«ä½¿ç”¨ã—ã¦ã„る証明書を検証ã—よã†ã¨ã—ã¾ã™ã€‚証明書を検証ã§ããªã„å ´åˆ (自己署å証明書ã®å ´åˆãªã©) ã¯ã€æ¤œè¨¼ãƒ—ロセスã«å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_faq.rst:236 msgid "To ignore certificate validation, add ``ansible_winrm_server_cert_validation: ignore`` to inventory for the Windows host." msgstr "è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚’無視ã™ã‚‹ã«ã¯ã€Windows ホストã®ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã« ``ansible_winrm_server_cert_validation: ignore`` を追加ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_faq.rst:242 msgid ":ref:`windows`" msgstr ":ref:`windows`" #: ../../rst/user_guide/windows_faq.rst:243 msgid "The Windows documentation index" msgstr "Windows ドキュメントã®ç›®æ¬¡" #: ../../rst/user_guide/windows_performance.rst:4 msgid "Windows performance" msgstr "Windows パフォーマンス" #: ../../rst/user_guide/windows_performance.rst:5 msgid "This document offers some performance optimizations you might like to apply to your Windows hosts to speed them up specifically in the context of using Ansible with them, and generally." msgstr "本書ã§ã¯ã€ç‰¹ã« Ansible ã‚’ãã®ãƒ›ã‚¹ãƒˆã§ä½¿ç”¨ã™ã‚‹ã‚ˆã†ãªçжæ³ã€ãŠã‚ˆã³ä¸€èˆ¬çš„ã«ä½¿ç”¨ã™ã‚‹çжæ³ã§é«˜é€ŸåŒ–ã™ã‚‹ãŸã‚ã«ã€Windows ホストã«é©ç”¨ã™ã‚‹ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ã®æœ€é©åŒ–ã‚’ã„ãã¤ã‹èª¬æ˜Žã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_performance.rst:10 msgid "Optimize PowerShell performance to reduce Ansible task overhead" msgstr "Ansible タスクã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã‚’軽減ã™ã‚‹ãŸã‚ã® PowerShell ã®ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ã®æœ€é©åŒ–" #: ../../rst/user_guide/windows_performance.rst:11 msgid "To speed up the startup of PowerShell by around 10x, run the following PowerShell snippet in an Administrator session. Expect it to take tens of seconds." msgstr "PowerShell ã®èµ·å‹•ã‚’ç´„ 10 å€é«˜é€ŸåŒ–ã™ã‚‹ã«ã¯ã€Administrator セッションã§ä»¥ä¸‹ã® PowerShell スニペットを実行ã—ã¾ã™ã€‚æ•°åç§’ã‹ã‹ã‚‹ã“ã¨ãŒäºˆæƒ³ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_performance.rst:17 msgid "If native images have already been created by the ngen task or service, you will observe no difference in performance (but this snippet will at that point execute faster than otherwise)." msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–イメージ㌠ngen タスクやサービスã«ã‚ˆã£ã¦ã™ã§ã«ä½œæˆã•れã¦ã„ã‚‹å ´åˆã¯ã€ãƒ‘フォーマンスã«é•ã„ã¯ã‚りã¾ã›ã‚“ (ãŸã ã—ã€ã“ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ãã®æ™‚点ã§ä»–ã®å ´åˆã‚ˆã‚Šã‚‚高速ã«å®Ÿè¡Œã•れã¾ã™)。" #: ../../rst/user_guide/windows_performance.rst:42 msgid "PowerShell is used by every Windows Ansible module. This optimization reduces the time PowerShell takes to start up, removing that overhead from every invocation." msgstr "PowerShell ã¯ã™ã¹ã¦ã® Windows Ansible モジュールã«ã‚ˆã£ã¦ä½¿ç”¨ã•れã¾ã™ã€‚ã“ã®æœ€é©åŒ–ã«ã‚ˆã‚Šã€PowerShell ã®èµ·å‹•時間を短縮ã—ã€å‘¼ã³å‡ºã—ã”ã¨ã«ãã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã‚’å–り除ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_performance.rst:45 msgid "This snippet uses `the native image generator, ngen `_ to pre-emptively create native images for the assemblies that PowerShell relies on." msgstr "ã“ã®ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ `ãƒã‚¤ãƒ†ã‚£ãƒ–イメージジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ ngen `_ を使用ã—ã¦ã€PowerShell ãŒä¾å­˜ã—ã¦ã„るアセンブリーã®ãƒã‚¤ãƒ†ã‚£ãƒ–イメージを事å‰ã«ä½œæˆã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_performance.rst:49 msgid "Fix high-CPU-on-boot for VMs/cloud instances" msgstr "仮想マシン/クラウドインスタンスã®ã€ã‚·ã‚¹ãƒ†ãƒ èµ·å‹•時ã®é«˜ CPU を修正" #: ../../rst/user_guide/windows_performance.rst:50 msgid "If you are creating golden images to spawn instances from, you can avoid a disruptive high CPU task near startup via `processing the ngen queue `_ within your golden image creation, if you know the CPU types won't change between golden image build process and runtime." msgstr "インスタンスを生æˆã™ã‚‹ãŸã‚ã«ã‚´ãƒ¼ãƒ«ãƒ‡ãƒ³ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’作æˆã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚´ãƒ¼ãƒ«ãƒ‡ãƒ³ã‚¤ãƒ¡ãƒ¼ã‚¸ã®ãƒ“ルドプロセスã¨ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã®é–“ã§ CPU タイプãŒå¤‰ã‚らãªã„ã“ã¨ãŒã‚ã‹ã£ã¦ã„れã°ã€ã‚´ãƒ¼ãƒ«ãƒ‡ãƒ³ã‚¤ãƒ¡ãƒ¼ã‚¸ã®ä½œæˆæ™‚ã« `ngen キューã®å‡¦ç† `_ を使用ã™ã‚‹ã“ã¨ã§ã€èµ·å‹•時ã«é«˜ã„ CPU タスクãŒç™ºç”Ÿã™ã‚‹ã®ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_performance.rst:55 msgid "Place the following near the end of your playbook, bearing in mind the factors that can cause native images to be invalidated (`see MSDN `_)." msgstr "Playbook ã®æœ€å¾Œä»˜è¿‘ã«ä»¥ä¸‹ã‚’ç½®ãã€ãƒã‚¤ãƒ†ã‚£ãƒ–イメージãŒç„¡åйã«ãªã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹è¦ç´ ã«æ³¨æ„ã—ã¦ãã ã•ã„ (`MSDN `_ ã‚’å‚ç…§)。" #: ../../rst/user_guide/windows_setup.rst:4 msgid "Setting up a Windows Host" msgstr "Windows ホストã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—" #: ../../rst/user_guide/windows_setup.rst:5 msgid "This document discusses the setup that is required before Ansible can communicate with a Microsoft Windows host." msgstr "本書ã§ã¯ã€Ansible ㌠Microsoft Windows ホストã¨é€šä¿¡ã™ã‚‹å‰ã«å¿…è¦ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:12 msgid "For Ansible to communicate to a Windows host and use Windows modules, the Windows host must meet these requirements:" msgstr "Ansible ㌠Windows ホストã¨é€šä¿¡ã—ã€Windows モジュールを使用ã™ã‚‹ãŸã‚ã«ã¯ã€Windows ホストãŒä»¥ä¸‹ã®è¦ä»¶ã‚’満ãŸã™å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:15 msgid "Ansible can generally manage Windows versions under current and extended support from Microsoft. Ansible can manage desktop OSs including Windows 7, 8.1, and 10, and server OSs including Windows Server 2008, 2008 R2, 2012, 2012 R2, 2016, and 2019." msgstr "Ansible ã¯ã€Microsoft ã®ç¾è¡ŒãŠã‚ˆã³æ‹¡å¼µã‚µãƒãƒ¼ãƒˆä¸‹ã«ã‚ã‚‹ Windows ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’一般的ã«ç®¡ç†ã§ãã¾ã™ã€‚Ansible ã¯ã€Windows 7ã€8.1ã€ãŠã‚ˆã³ 10 ã‚’å«ã‚€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ— OSã€ãŠã‚ˆã³ Windows Server 2008ã€2008 R2ã€2012ã€2012 R2ã€2016ã€ãŠã‚ˆã³ 2019 ã‚’å«ã‚€ã‚µãƒ¼ãƒãƒ¼ OS を管ç†ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:20 msgid "Ansible requires PowerShell 3.0 or newer and at least .NET 4.0 to be installed on the Windows host." msgstr "Ansible を利用ã™ã‚‹ã«ã¯ã€Windows ホスト㫠PowerShell 3.0 以é™ã¨å°‘ãªãã¨ã‚‚ .NET 4.0 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:23 msgid "A WinRM listener should be created and activated. More details for this can be found below." msgstr "WinRM リスナーを作æˆã—ã€æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:26 msgid "While these are the base requirements for Ansible connectivity, some Ansible modules have additional requirements, such as a newer OS or PowerShell version. Please consult the module's documentation page to determine whether a host meets those requirements." msgstr "ã“れらã¯ã€Ansible 接続ã®åŸºæœ¬çš„ãªè¦ä»¶ã§ã™ãŒã€Ansible モジュールã®ä¸­ã«ã¯ã€æ–°ã—ã„ OS ã‚„ PowerShell ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã€è¿½åŠ ã®è¦ä»¶ãŒã‚ã‚‹ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚ホストãŒã“れらã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã¯ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:32 msgid "Upgrading PowerShell and .NET Framework" msgstr "PowerShell ãŠã‚ˆã³ .NET Framework ã®ã‚¢ãƒƒãƒ—グレード" #: ../../rst/user_guide/windows_setup.rst:33 msgid "Ansible requires PowerShell version 3.0 and .NET Framework 4.0 or newer to function on older operating systems like Server 2008 and Windows 7. The base image does not meet this requirement. You can use the `Upgrade-PowerShell.ps1 `_ script to update these." msgstr "Ansible ㌠Server 2008 ã‚„ Windows 7 ãªã©ã®å¤ã„ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã¯ã€PowerShell ã® ãƒãƒ¼ã‚¸ãƒ§ãƒ³3.0 㨠.NET Framework 4.0 以é™ãŒå¿…è¦ã§ã™ã€‚ベースイメージã¯ã€ã“ã®è¦ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。`Upgrade-PowerShell.ps1 `_ スクリプトを使用ã—ã¦ã“れらを更新ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:36 msgid "This is an example of how to run this script from PowerShell:" msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トを PowerShell ã‹ã‚‰å®Ÿè¡Œã™ã‚‹ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:52 msgid "Once completed, you will need to remove auto logon and set the execution policy back to the default (``Restricted `` for Windows clients, or ``RemoteSigned`` for Windows servers). You can do this with the following PowerShell commands:" msgstr "完了ã—ãŸã‚‰ã€è‡ªå‹•ログオンを解除ã—ã¦ã€å®Ÿè¡Œãƒãƒªã‚·ãƒ¼ã‚’デフォルト (Windows クライアントã®å ´åˆã¯ ``Restricted ``ã€Windows サーãƒãƒ¼ã®å ´åˆã¯ ``RemoteSigned``) ã«æˆ»ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã«ã¯ä»¥ä¸‹ã® PowerShell コマンドãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:66 msgid "The script works by checking to see what programs need to be installed (such as .NET Framework 4.5.2) and what PowerShell version is required. If a reboot is required and the ``username`` and ``password`` parameters are set, the script will automatically reboot and logon when it comes back up from the reboot. The script will continue until no more actions are required and the PowerShell version matches the target version. If the ``username`` and ``password`` parameters are not set, the script will prompt the user to manually reboot and logon when required. When the user is next logged in, the script will continue where it left off and the process continues until no more actions are required." msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ãªãƒ—ログラム (.NET Framework 4.5.2 ãªã©) ã‚„ã€å¿…è¦ãª PowerShell ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’確èªã—ã¦å‹•作ã—ã¾ã™ã€‚å†èµ·å‹•ãŒå¿…è¦ã§ã€``username`` パラメーター㨠``password`` パラメーターãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ã‚¹ã‚¯ãƒªãƒ—トãŒè‡ªå‹•çš„ã«å†èµ·å‹•ã—ã€å†èµ·å‹•ã‹ã‚‰å¾©å¸°ã—ãŸã¨ãã«ãƒ­ã‚°ã‚ªãƒ³ã—ã¾ã™ã€‚スクリプトã¯ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒä¸è¦ã«ãªã‚Šã€PowerShell ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ä¸€è‡´ã™ã‚‹ã¾ã§ç¶šè¡Œã•れã¾ã™ã€‚``username`` パラメーターãŠã‚ˆã³ ``password`` パラメーターãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã€ã‚¹ã‚¯ãƒªãƒ—トã¯å¿…è¦ã«å¿œã˜ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æ‰‹å‹•ã§å†èµ·å‹•ã¨ãƒ­ã‚°ã‚ªãƒ³ã‚’促ã—ã¾ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ¬¡ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ã€ã‚¹ã‚¯ãƒªãƒ—トã¯å‰å›žã®ç¶šãを実行ã—ã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒå¿…è¦ãªããªã‚‹ã¾ã§å‡¦ç†ã‚’ç¶šã‘ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:77 msgid "If running on Server 2008, then SP2 must be installed. If running on Server 2008 R2 or Windows 7, then SP1 must be installed." msgstr "Server 2008 ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€SP2 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Server 2008 R2 ã¾ãŸã¯ Windows 7 ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã¯ SP1 をインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:80 msgid "Windows Server 2008 can only install PowerShell 3.0; specifying a newer version will result in the script failing." msgstr "Windows Server 2008 ã§ã¯ PowerShell 3.0 ã—ã‹ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ããªã„ãŸã‚ã€ãれより新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’指定ã™ã‚‹ã¨ã‚¹ã‚¯ãƒªãƒ—トãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:83 msgid "The ``username`` and ``password`` parameters are stored in plain text in the registry. Make sure the cleanup commands are run after the script finishes to ensure no credentials are still stored on the host." msgstr "``username`` 㨠``password`` ã®ãƒ‘ラメーターã¯ã€ãƒ¬ã‚¸ã‚¹ãƒˆãƒªãƒ¼ã«å¹³æ–‡ã§ä¿å­˜ã•れã¾ã™ã€‚スクリプトã®çµ‚了後ã«ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—コマンドを実行ã—ã¦ã€ãƒ›ã‚¹ãƒˆä¸Šã«èªè¨¼æƒ…å ±ãŒä¿å­˜ã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:88 msgid "WinRM Memory Hotfix" msgstr "WinRM Memory Hotfix" #: ../../rst/user_guide/windows_setup.rst:89 msgid "When running on PowerShell v3.0, there is a bug with the WinRM service that limits the amount of memory available to WinRM. Without this hotfix installed, Ansible will fail to execute certain commands on the Windows host. These hotfixes should be installed as part of the system bootstrapping or imaging process. The script `Install-WMF3Hotfix.ps1 `_ can be used to install the hotfix on affected hosts." msgstr "PowerShell v3.0 ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€WinRM サービスã®ãƒã‚°ã«ã‚ˆã‚Šã€WinRM ã§ä½¿ç”¨ã§ãるメモリーé‡ãŒåˆ¶é™ã•れるã¨ã„ã†å•題ãŒã‚りã¾ã—ãŸã€‚ã“ã® Hotfix をインストールã—ãªã„ã¨ã€Windows ホスト上㧠Ansible ã«ã‚ˆã‚‹ç‰¹å®šã®ã‚³ãƒžãƒ³ãƒ‰ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã™ã€‚ã“れら㮠Hotfix ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®ãƒ–ートストラップã¾ãŸã¯ã‚¤ãƒ¡ãƒ¼ã‚¸ãƒ³ã‚°ãƒ—ロセスã®ä¸€éƒ¨ã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`Install-WMF3Hotfix.ps1 `_ ã¨ã„ã†ã‚¹ã‚¯ãƒªãƒ—トを使用ã™ã‚‹ã¨ã€å½±éŸ¿ã‚’å—ã‘るホスト㫠hotfix をインストールã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:95 msgid "The following PowerShell command will install the hotfix:" msgstr "以下㮠PowerShell コマンド㯠hotfix をインストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:106 msgid "For more details, please refer to the `Hotfix document `_ from Microsoft." msgstr "詳細ã¯ã€Microsoft 社㮠`Hotfix ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:109 msgid "WinRM Setup" msgstr "WinRM ã®è¨­å®š" #: ../../rst/user_guide/windows_setup.rst:110 msgid "Once Powershell has been upgraded to at least version 3.0, the final step is for the WinRM service to be configured so that Ansible can connect to it. There are two main components of the WinRM service that governs how Ansible can interface with the Windows host: the ``listener`` and the ``service`` configuration settings." msgstr "Powershell ã‚’ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3.0 以é™ã«ã‚¢ãƒƒãƒ—グレードã—ãŸã‚‰ã€æœ€å¾Œã®ã‚¹ãƒ†ãƒƒãƒ—ã¨ã—ã¦ã€WinRM サービスを設定ã—㦠Ansible ãŒæŽ¥ç¶šã§ãるよã†ã«ã—ã¾ã™ã€‚WinRM サービスã«ã¯ã€Ansible ㌠Windows ホストã¨ã©ã®ã‚ˆã†ã«é€£æºã™ã‚‹ã‹ã‚’決定ã™ã‚‹æ§‹æˆè¨­å®š ``listener`` ãŠã‚ˆã³ ``service`` ã® 2 ã¤ã®ä¸»è¦ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:115 msgid "Details about each component can be read below, but the script `ConfigureRemotingForAnsible.ps1 `_ can be used to set up the basics. This script sets up both HTTP and HTTPS listeners with a self-signed certificate and enables the ``Basic`` authentication option on the service." msgstr "å„コンãƒãƒ¼ãƒãƒ³ãƒˆã®è©³ç´°ã«ã¤ã„ã¦ã¯å¾Œè¿°ã—ã¾ã™ãŒã€åŸºæœ¬çš„ãªè¨­å®šã«ã¯ `ConfigureRemotingForAnsible.ps1 `_ スクリプトãŒä½¿ç”¨ã§ãã¾ã™ã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€è‡ªå·±ç½²å証明書を使用ã—㦠HTTP 㨠HTTPS ã®ä¸¡æ–¹ã®ãƒªã‚¹ãƒŠãƒ¼ã‚’設定ã—ã€ã‚µãƒ¼ãƒ“ス㧠``Basic`` èªè¨¼ã‚ªãƒ—ションを有効ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:121 msgid "To use this script, run the following in PowerShell:" msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トを使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’ PowerShell ã§å®Ÿè¡Œã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:133 msgid "There are different switches and parameters (like ``-EnableCredSSP`` and ``-ForceNewSSLCert``) that can be set alongside this script. The documentation for these options are located at the top of the script itself." msgstr "ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã«ã¯ã€ã•ã¾ã–ã¾ãªã‚¹ã‚¤ãƒƒãƒã‚„パラメーター (``-EnableCredSSP`` ã‚„ ``-ForceNewSSLCert`` ãªã©) を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ã‚ªãƒ—ションã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ã‚¹ã‚¯ãƒªãƒ—ト本体ã®ä¸Šéƒ¨ã«ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:137 msgid "The ConfigureRemotingForAnsible.ps1 script is intended for training and development purposes only and should not be used in a production environment, since it enables settings (like ``Basic`` authentication) that can be inherently insecure." msgstr "ConfigureRemotingForAnsible.ps1 スクリプトã¯ã€ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã¨é–‹ç™ºã®ã¿ã‚’目的ã¨ã—ã¦ãŠã‚Šã€å®Ÿç¨¼åƒç’°å¢ƒã§ã¯ä½¿ç”¨ã—ãªã„ã§ãã ã•ã„。ã“れã¯ã€æœ¬è³ªçš„ã«å®‰å…¨ã§ãªã„å¯èƒ½æ€§ã®ã‚る設定 (``Basic`` èªè¨¼ãªã©) ã‚’å¯èƒ½ã«ã™ã‚‹ãŸã‚ã§ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:143 msgid "WinRM Listener" msgstr "WinRM リスナー" #: ../../rst/user_guide/windows_setup.rst:144 msgid "The WinRM services listens for requests on one or more ports. Each of these ports must have a listener created and configured." msgstr "WinRM サービスã¯ã€1 ã¤ä»¥ä¸Šã®ãƒãƒ¼ãƒˆã§è¦æ±‚をリッスンã—ã¾ã™ã€‚ã“れらã®ãƒãƒ¼ãƒˆã”ã¨ã«ãƒªã‚¹ãƒŠãƒ¼ã‚’作æˆã—ã€è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:147 msgid "To view the current listeners that are running on the WinRM service, run the following command:" msgstr "WinRM サービスã§å®Ÿè¡Œã—ã¦ã„ã‚‹ç¾åœ¨ã®ãƒªã‚¹ãƒŠãƒ¼ã‚’表示ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:154 #: ../../rst/user_guide/windows_setup.rst:266 msgid "This will output something like::" msgstr "ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ã‚ˆã†ãªã‚‚ã®ãŒå‡ºåŠ›ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:178 msgid "In the example above there are two listeners activated; one is listening on port 5985 over HTTP and the other is listening on port 5986 over HTTPS. Some of the key options that are useful to understand are:" msgstr "上ã®ä¾‹ã§ã¯ã€2 ã¤ã®ãƒªã‚¹ãƒŠãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚1 ã¤ã¯ HTTP ã§ãƒãƒ¼ãƒˆ 5985 をリッスンã—ã¦ãŠã‚Šã€ã‚‚ㆠ1 ã¤ã¯ HTTPS ã§ãƒãƒ¼ãƒˆ 5986 をリッスンã—ã¦ã„ã¾ã™ã€‚ç†è§£ã—ã¦ãŠãã¨ä¾¿åˆ©ãªã‚ªãƒ—ションをã„ãã¤ã‹ç´¹ä»‹ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:182 msgid "``Transport``: Whether the listener is run over HTTP or HTTPS, it is recommended to use a listener over HTTPS as the data is encrypted without any further changes required." msgstr "``Transport``: リスナー㌠HTTP ã¾ãŸã¯ HTTPS ã®ã©ã¡ã‚‰ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ãƒ‡ãƒ¼ã‚¿ã¯ã•らãªã‚‹å¤‰æ›´ãªã—ã«æš—å·åŒ–ã•れるãŸã‚ã€HTTPS 経由ã§ãƒªã‚¹ãƒŠãƒ¼ã‚’使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:186 msgid "``Port``: The port the listener runs on, by default it is ``5985`` for HTTP and ``5986`` for HTTPS. This port can be changed to whatever is required and corresponds to the host var ``ansible_port``." msgstr "``Port``: リスナーãŒå®Ÿè¡Œã™ã‚‹ãƒãƒ¼ãƒˆã€‚デフォルトã¯ã€HTTP ã®å ´åˆã¯ ``5985``ã€HTTPS ã®å ´åˆã¯ ``5986`` ã§ã™ã€‚ã“ã®ãƒãƒ¼ãƒˆã¯ã€å¿…è¦ãªã‚‚ã®ã«ãれãžã‚Œå¤‰æ›´ã§ãã€ãƒ›ã‚¹ãƒˆå¤‰æ•° ``ansible_port`` ã«å¯¾å¿œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:190 msgid "``URLPrefix``: The URL prefix to listen on, by default it is ``wsman``. If this is changed, the host var ``ansible_winrm_path`` must be set to the same value." msgstr "``URLPrefix``: リッスンã™ã‚‹ URL プレフィックス。デフォルト㯠``wsman`` ã§ã™ã€‚ã“れãŒå¤‰æ›´ã•れãŸå ´åˆã€ãƒ›ã‚¹ãƒˆå¤‰æ•° ``ansible_winrm_path`` ã¯åŒã˜å€¤ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:194 msgid "``CertificateThumbprint``: If running over an HTTPS listener, this is the thumbprint of the certificate in the Windows Certificate Store that is used in the connection. To get the details of the certificate itself, run this command with the relevant certificate thumbprint in PowerShell::" msgstr "``CertificateThumbprint``: HTTPS リスナーを介ã—ã¦å®Ÿè¡Œã™ã‚‹å ´åˆã€ã“ã‚Œã¯æŽ¥ç¶šã«ä½¿ç”¨ã•れる Windows 証明書ストアã®è¨¼æ˜Žæ›¸ã®ã‚µãƒ ãƒ—リントã§ã™ã€‚証明書自体ã®è©³ç´°ã‚’å–å¾—ã™ã‚‹ã«ã¯ã€PowerShell ã§è©²å½“ã™ã‚‹è¨¼æ˜Žæ›¸ã®ã‚µãƒ ãƒ—リントを指定ã—ã¦æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:203 msgid "Setup WinRM Listener" msgstr "WinRM リスナーã®è¨­å®š" #: ../../rst/user_guide/windows_setup.rst:204 msgid "There are three ways to set up a WinRM listener:" msgstr "WinRM リスナーを設定ã™ã‚‹ã«ã¯ã€3 ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:206 msgid "Using ``winrm quickconfig`` for HTTP or ``winrm quickconfig -transport:https`` for HTTPS. This is the easiest option to use when running outside of a domain environment and a simple listener is required. Unlike the other options, this process also has the added benefit of opening up the Firewall for the ports required and starts the WinRM service." msgstr "HTTP ã«ã¯ ``winrm quickconfig`` ã‚’ã€HTTPS ã«ã¯ ``winrm quickconfig -transport:https`` を使用ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ç’°å¢ƒå¤–ã§å‹•作ã—ã€ã‚·ãƒ³ãƒ—ルãªãƒªã‚¹ãƒŠãƒ¼ãŒå¿…è¦ãªå ´åˆã«ã€æœ€ã‚‚ç°¡å˜ã«ä½¿ç”¨ã§ãるオプションã§ã™ã€‚ä»–ã®ã‚ªãƒ—ションã¨ã¯ç•°ãªã‚Šã€ã“ã®ãƒ—ロセスã«ã¯ã€å¿…è¦ãªãƒãƒ¼ãƒˆã®ãŸã‚ã«ãƒ•ァイアウォールを開ãã€WinRM サービスを開始ã™ã‚‹ã¨ã„ã†åˆ©ç‚¹ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:212 msgid "Using Group Policy Objects. This is the best way to create a listener when the host is a member of a domain because the configuration is done automatically without any user input. For more information on group policy objects, see the `Group Policy Objects documentation `_." msgstr "グループãƒãƒªã‚·ãƒ¼ã‚ªãƒ–ジェクトã®ä½¿ç”¨ã€‚設定ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå…¥åŠ›ã›ãšã«è‡ªå‹•çš„ã«è¡Œã‚れるãŸã‚ã€ã“ã®æ–¹æ³•ã¯ã€ãƒ›ã‚¹ãƒˆãŒãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹å ´åˆã«ãƒªã‚¹ãƒŠãƒ¼ã‚’作æˆã™ã‚‹ã®ã«æœ€é©ãªæ–¹æ³•ã§ã™ã€‚グループãƒãƒªã‚·ãƒ¼ã‚ªãƒ–ジェクトã®è©³ç´°ã¯ã€`Group Policy Objects ドキュメント `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:217 msgid "Using PowerShell to create the listener with a specific configuration. This can be done by running the following PowerShell commands:" msgstr "PowerShell を使用ã—ã¦ã€ç‰¹å®šã®è¨­å®šã§ãƒªã‚¹ãƒŠãƒ¼ã‚’作æˆã—ã¾ã™ã€‚ã“れã¯ã€ä»¥ä¸‹ã® PowerShell コマンドを実行ã™ã‚‹ã“ã¨ã§å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:232 msgid "To see the other options with this PowerShell cmdlet, see `New-WSManInstance `_." msgstr "ã“ã® PowerShell コマンドレッドを伴ã†ä»–ã®ã‚ªãƒ—ションを表示ã™ã‚‹ã«ã¯ã€ã€Œ`New-WSManInstance `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:235 msgid "When creating an HTTPS listener, an existing certificate needs to be created and stored in the ``LocalMachine\\My`` certificate store. Without a certificate being present in this store, most commands will fail." msgstr "HTTPS リスナーを作æˆã™ã‚‹éš›ã«ã¯ã€æ—¢å­˜ã®è¨¼æ˜Žæ›¸ã‚’作æˆã—ã€``LocalMachine\\My`` ã®è¨¼æ˜Žæ›¸ã‚¹ãƒˆã‚¢ã«ä¿å­˜ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚¹ãƒˆã‚¢ã«è¨¼æ˜Žæ›¸ãŒå­˜åœ¨ã—ãªã„ã¨ã€ã»ã¨ã‚“ã©ã®ã‚³ãƒžãƒ³ãƒ‰ãŒå¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:240 msgid "Delete WinRM Listener" msgstr "WinRM リスナーã®å‰Šé™¤" #: ../../rst/user_guide/windows_setup.rst:241 msgid "To remove a WinRM listener::" msgstr "WinRM リスナーを削除ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:249 msgid "The ``Keys`` object is an array of strings, so it can contain different values. By default it contains a key for ``Transport=`` and ``Address=`` which correspond to the values from winrm enumerate winrm/config/Listeners." msgstr "``Keys`` ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¯æ–‡å­—列ã®é…列ã§ã‚ã‚‹ãŸã‚ã€ç•°ãªã‚‹å€¤ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚デフォルトã§ã¯ã€winrm enumerate winrm/config/Listeners ã®å€¤ã«å¯¾å¿œã™ã‚‹ ``Transport=`` ãŠã‚ˆã³ ``Address=`` ã®ã‚­ãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:254 msgid "WinRM Service Options" msgstr "WinRM サービスオプション" #: ../../rst/user_guide/windows_setup.rst:255 msgid "There are a number of options that can be set to control the behavior of the WinRM service component, including authentication options and memory settings." msgstr "WinRM サービスコンãƒãƒ¼ãƒãƒ³ãƒˆã®å‹•作を制御ã™ã‚‹ã‚ˆã†ã«è¨­å®šã§ãã€èªè¨¼ã‚ªãƒ—ションやメモリー設定ãªã©ã€è¤‡æ•°ã®ã‚ªãƒ—ションを設定ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:258 msgid "To get an output of the current service configuration options, run the following command:" msgstr "ç¾åœ¨ã®ã‚µãƒ¼ãƒ“ス設定オプションã®å‡ºåŠ›ã‚’å¾—ã‚‹ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:302 msgid "While many of these options should rarely be changed, a few can easily impact the operations over WinRM and are useful to understand. Some of the important options are:" msgstr "ã“れらã®ã‚ªãƒ—ションã®å¤šãã¯ã»ã¨ã‚“ã©å¤‰æ›´ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€ã„ãã¤ã‹ã®ã‚ªãƒ—ション㯠WinRM ã®æ“作ã«ç°¡å˜ã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã€ç†è§£ã—ã¦ãŠãã¨ä¾¿åˆ©ã§ã™ã€‚é‡è¦ãªã‚ªãƒ—ションã®ä¸€éƒ¨ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:306 msgid "``Service\\AllowUnencrypted``: This option defines whether WinRM will allow traffic that is run over HTTP without message encryption. Message level encryption is only possible when ``ansible_winrm_transport`` is ``ntlm``, ``kerberos`` or ``credssp``. By default this is ``false`` and should only be set to ``true`` when debugging WinRM messages." msgstr "``Service\\AllowUnencrypted``: ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’æš—å·åŒ–ã›ãšã« HTTP ã§å®Ÿè¡Œã™ã‚‹ãƒˆãƒ©ãƒ•ィックを WinRM ã§è¨±å¯ã™ã‚‹ã‹ã©ã†ã‹ã‚’定義ã—ã¾ã™ã€‚ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã¯ã€``ansible_winrm_transport`` ㌠``ntlm``ã€``kerberos``ã€ã¾ãŸã¯ ``credssp`` ã®å ´åˆã«ã®ã¿å¯èƒ½ã§ã™ã€‚デフォルトã§ã¯ã€ã“れ㯠``false`` ã§ã‚りã€WinRM メッセージをデãƒãƒƒã‚°ã™ã‚‹å ´åˆã«é™ã‚Š ``true`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:312 msgid "``Service\\Auth\\*``: These flags define what authentication options are allowed with the WinRM service. By default, ``Negotiate (NTLM)`` and ``Kerberos`` are enabled." msgstr "``Service\\Auth\\*``: ã“れらã®ãƒ•ラグã¯ã€WinRM サービスã§è¨±å¯ã•れるèªè¨¼ã‚ªãƒ—ションを定義ã—ã¾ã™ã€‚デフォルトã§ã¯ã€``Negotiate (NTLM)`` ãŠã‚ˆã³ ``Kerberos`` ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:316 msgid "``Service\\Auth\\CbtHardeningLevel``: Specifies whether channel binding tokens are not verified (None), verified but not required (Relaxed), or verified and required (Strict). CBT is only used when connecting with NTLM or Kerberos over HTTPS." msgstr "``Service\\Auth\\CbtHardeningLevel``: ãƒãƒ£ãƒ³ãƒãƒ«ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒˆãƒ¼ã‚¯ãƒ³ã‚’検証ã—ãªã„ (None)ã€æ¤œè¨¼æ¸ˆã¿ã ãŒå¿…è¦ãªã„ (Relaxed)ã€æ¤œè¨¼æ¸ˆã¿ã§å¿…è¦ (Strict) ã®ã„ãšã‚Œã‹ã‚’指定ã—ã¾ã™ã€‚CBT ã¯ã€HTTPS ã® NTLM ã¾ãŸã¯ Kerberos ã§ã®æŽ¥ç¶šæ™‚ã«ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:321 msgid "``Service\\CertificateThumbprint``: This is the thumbprint of the certificate used to encrypt the TLS channel used with CredSSP authentication. By default this is empty; a self-signed certificate is generated when the WinRM service starts and is used in the TLS process." msgstr "``Service\\CertificateThumbprint``: ã“れã¯ã€CredSSP èªè¨¼ã§ä½¿ç”¨ã•れる TLS ãƒãƒ£ãƒ³ãƒãƒ«ã®æš—å·åŒ–ã«ä½¿ç”¨ã•れる証明書ã®ã‚µãƒ ãƒ—リントã§ã™ã€‚デフォルトã§ã¯ã€ã“れã¯ç©ºã§ã™ã€‚自己署å証明書ã¯ã€WinRM サービスã®èµ·å‹•時ã«ç”Ÿæˆã•れã€TLS プロセスã§ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:326 msgid "``Winrs\\MaxShellRunTime``: This is the maximum time, in milliseconds, that a remote command is allowed to execute." msgstr "``Winrs\\MaxShellRunTime``: リモートコマンドã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹æœ€å¤§æ™‚間をミリ秒å˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:329 msgid "``Winrs\\MaxMemoryPerShellMB``: This is the maximum amount of memory allocated per shell, including the shell's child processes." msgstr "``Winrs\\MaxMemoryPerShellMB``: シェルã®å­ãƒ—ロセスをå«ã‚ã€ã‚·ã‚§ãƒ«ã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ãƒ¡ãƒ¢ãƒªãƒ¼ã®æœ€å¤§é‡ã§ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:332 msgid "To modify a setting under the ``Service`` key in PowerShell::" msgstr "PowerShell ã® ``Service`` キーã§è¨­å®šã‚’変更ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:340 msgid "To modify a setting under the ``Winrs`` key in PowerShell::" msgstr "PowerShell ã® ``Winrs`` キーã§è¨­å®šã‚’変更ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:348 msgid "If running in a domain environment, some of these options are set by GPO and cannot be changed on the host itself. When a key has been configured with GPO, it contains the text ``[Source=\"GPO\"]`` next to the value." msgstr "ドメイン環境ã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã€ã“れらã®ã‚ªãƒ—ションã®ä¸€éƒ¨ã¯ GPO ã«ã‚ˆã£ã¦è¨­å®šã•れã€ãƒ›ã‚¹ãƒˆè‡ªä½“ã§ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。GPO ã§è¨­å®šã•れãŸã‚­ãƒ¼ã«ã¯ã€å€¤ã®æ¨ªã« ``[Source=\"GPO\"]`` ã¨ã„ã†ãƒ†ã‚­ã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:353 msgid "Common WinRM Issues" msgstr "一般的㪠WinRM ã®å•題" #: ../../rst/user_guide/windows_setup.rst:354 msgid "Because WinRM has a wide range of configuration options, it can be difficult to setup and configure. Because of this complexity, issues that are shown by Ansible could in fact be issues with the host setup instead." msgstr "WinRM ã«ã¯ã•ã¾ã–ã¾ãªè¨­å®šã‚ªãƒ—ションãŒã‚ã‚‹ãŸã‚ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—や設定ãŒé›£ã—ã„å ´åˆãŒã‚りã¾ã™ã€‚ãã®ãŸã‚ã€Ansible ã§è¡¨ç¤ºã•れるå•題ãŒã€å®Ÿéš›ã«ã¯ãƒ›ã‚¹ãƒˆã®è¨­å®šã®å•題ã§ã‚ã‚‹å¯èƒ½æ€§ã‚‚ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:358 msgid "One easy way to determine whether a problem is a host issue is to run the following command from another Windows host to connect to the target Windows host::" msgstr "å•題ãŒãƒ›ã‚¹ãƒˆã®å•題ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ç°¡å˜ãªæ–¹æ³•ã¨ã—ã¦ã€åˆ¥ã® Windows ホストã‹ã‚‰æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã€å¯¾è±¡ã® Windows ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:376 msgid "If this fails, the issue is probably related to the WinRM setup. If it works, the issue may not be related to the WinRM setup; please continue reading for more troubleshooting suggestions." msgstr "失敗ã—ãŸå ´åˆã¯ã€WinRM ã®è¨­å®šã«å•題ãŒã‚ã‚‹ã¨æ€ã‚れã¾ã™ã€‚æˆåŠŸã—ãŸå ´åˆã¯ã€å•題㌠WinRM ã®è¨­å®šã«é–¢é€£ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã•らã«è©³ã—ã„ãƒˆãƒ©ãƒ–ãƒ«ã‚·ãƒ¥ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã®æ–¹æ³•ã‚’ã”確èªãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:379 msgid "HTTP 401/Credentials Rejected" msgstr "HTTP 401/èªè¨¼æƒ…å ±ã®æ‹’å¦" #: ../../rst/user_guide/windows_setup.rst:380 msgid "A HTTP 401 error indicates the authentication process failed during the initial connection. Some things to check for this are:" msgstr "HTTP 401 エラーã¯ã€æœ€åˆã®æŽ¥ç¶šæ™‚ã«èªè¨¼ãƒ—ロセスãŒå¤±æ•—ã—ãŸã“ã¨ã‚’示ã—ã¾ã™ã€‚ã“れを確èªã™ã‚‹ãŸã‚ã®ã„ãã¤ã‹ã®é …ç›®ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:383 msgid "Verify that the credentials are correct and set properly in your inventory with ``ansible_user`` and ``ansible_password``" msgstr "``ansible_user`` ãŠã‚ˆã³ ``ansible_password`` を使用ã—ã¦ã€èªè¨¼æƒ…å ±ãŒæ­£ã—ãã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã«é©åˆ‡ã«è¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:386 msgid "Ensure that the user is a member of the local Administrators group or has been explicitly granted access (a connection test with the ``winrs`` command can be used to rule this out)." msgstr "ユーザーãŒãƒ­ãƒ¼ã‚«ãƒ«ã® Administrators グループã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹ã‹ã€æ˜Žç¤ºçš„ã«ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„ (``winrs`` コマンドã«ã‚ˆã‚‹æŽ¥ç¶šãƒ†ã‚¹ãƒˆã§é™¤å¤–ã§ãã¾ã™)。" #: ../../rst/user_guide/windows_setup.rst:390 msgid "Make sure that the authentication option set by ``ansible_winrm_transport`` is enabled under ``Service\\Auth\\*``" msgstr "``ansible_winrm_transport`` ã§è¨­å®šã—ãŸèªè¨¼ã‚ªãƒ—ションãŒã€``Service\\Auth\\*`` ã§æœ‰åйã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:393 msgid "If running over HTTP and not HTTPS, use ``ntlm``, ``kerberos`` or ``credssp`` with ``ansible_winrm_message_encryption: auto`` to enable message encryption. If using another authentication option or if the installed pywinrm version cannot be upgraded, the ``Service\\AllowUnencrypted`` can be set to ``true`` but this is only recommended for troubleshooting" msgstr "HTTPS ã§ã¯ãªã HTTP ã§å®Ÿè¡Œã™ã‚‹å ´åˆã¯ã€``ntlm``ã€``kerberos``ã€ã¾ãŸã¯ ``credssp`` 㨠``ansible_winrm_message_encryption: auto`` を使用ã—ã¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æš—å·åŒ–を有効ã«ã—ã¦ãã ã•ã„。他ã®èªè¨¼ã‚ªãƒ—ションを使用ã—ã¦ã„ã‚‹å ´åˆã‚„ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ pywinrm ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップグレードã§ããªã„å ´åˆã¯ã€``Service\\AllowUnencrypted`` ã‚’``true`` ã«è¨­å®šã§ãã¾ã™ãŒã€ã“れã¯ãƒˆãƒ©ãƒ–ルシューティングã®ãŸã‚ã«ã®ã¿æŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:399 msgid "Ensure the downstream packages ``pywinrm``, ``requests-ntlm``, ``requests-kerberos``, and/or ``requests-credssp`` are up to date using ``pip``." msgstr "ダウンストリームパッケージã§ã‚ã‚‹ ``pywinrm``ã€``requests-ntlm``ã€``requests-kerberos``ã€ã¾ãŸã¯ ``requests-credssp``ã€ã‚‚ã—ãã¯ãã®çµ„ã¿åˆã‚ã›ãŒ ``pip`` を使用ã—ã¦æœ€æ–°ã®çŠ¶æ…‹ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:402 msgid "If using Kerberos authentication, ensure that ``Service\\Auth\\CbtHardeningLevel`` is not set to ``Strict``." msgstr "Kerberos èªè¨¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€``Service\\Auth\\CbtHardeningLevel`` ㌠``Strict`` ã«è¨­å®šã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:405 msgid "When using Basic or Certificate authentication, make sure that the user is a local account and not a domain account. Domain accounts do not work with Basic and Certificate authentication." msgstr "Basic èªè¨¼ã‚„ Certificate èªè¨¼ã‚’使用ã™ã‚‹éš›ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ‰ãƒ¡ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã¯ãªãã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ドメインアカウントã¯ã€Basic èªè¨¼ã‚„ Certificate èªè¨¼ã§ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_setup.rst:410 msgid "HTTP 500 Error" msgstr "HTTP 500 Error" #: ../../rst/user_guide/windows_setup.rst:411 msgid "These indicate an error has occurred with the WinRM service. Some things to check for include:" msgstr "ã“れらã¯ã€WinRM サービスã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚確èªã™ã¹ã点ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:414 msgid "Verify that the number of current open shells has not exceeded either ``WinRsMaxShellsPerUser`` or any of the other Winrs quotas haven't been exceeded." msgstr "ç¾åœ¨ã®ã‚ªãƒ¼ãƒ—ãƒ³ã‚·ã‚§ãƒ«ã®æ•°ãŒ ``WinRsMaxShellsPerUser`` ã®ã©ã¡ã‚‰ã‹ã‚’è¶…ãˆã¦ã„ãªã„ã‹ã€ã¾ãŸã¯ä»–ã® Winrs ã®ã‚¯ã‚©ãƒ¼ã‚¿ã‚’è¶…ãˆã¦ã„ãªã„ã‹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:419 msgid "Timeout Errors" msgstr "タイムアウトエラー" #: ../../rst/user_guide/windows_setup.rst:420 msgid "These usually indicate an error with the network connection where Ansible is unable to reach the host. Some things to check for include:" msgstr "ã“れらã¯é€šå¸¸ã€Ansible ãŒãƒ›ã‚¹ãƒˆã«åˆ°é”ã§ããªã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã®ã‚¨ãƒ©ãƒ¼ã‚’示ã—ã¦ã„ã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯é …ç›®ã«ã¯ä»¥ä¸‹ãŒå«ã¾ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:423 msgid "Make sure the firewall is not set to block the configured WinRM listener ports" msgstr "ファイアウォールãŒã€è¨­å®šã•れ㟠WinRM リスナーãƒãƒ¼ãƒˆã‚’ブロックã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:424 msgid "Ensure that a WinRM listener is enabled on the port and path set by the host vars" msgstr "WinRM リスナーãŒã€ãƒ›ã‚¹ãƒˆå¤‰æ•°ã«ã‚ˆã£ã¦è¨­å®šã•れãŸãƒãƒ¼ãƒˆãŠã‚ˆã³ãƒ‘ã‚¹ã§æœ‰åйã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:425 msgid "Ensure that the ``winrm`` service is running on the Windows host and configured for automatic start" msgstr "Windows ホスト上㧠``winrm`` サービスãŒç¨¼å‹•ã—ã¦ãŠã‚Šã€è‡ªå‹•èµ·å‹•ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:429 msgid "Connection Refused Errors" msgstr "接続拒å¦ã‚¨ãƒ©ãƒ¼" #: ../../rst/user_guide/windows_setup.rst:430 msgid "These usually indicate an error when trying to communicate with the WinRM service on the host. Some things to check for:" msgstr "ã“れらã¯é€šå¸¸ã€ãƒ›ã‚¹ãƒˆä¸Šã® WinRM サービスã¨é€šä¿¡ã—よã†ã¨ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ã‚’示ã—ã¾ã™ã€‚ã„ãã¤ã‹ã®ãƒã‚§ãƒƒã‚¯é …ç›®ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:433 msgid "Ensure that the WinRM service is up and running on the host. Use ``(Get-Service -Name winrm).Status`` to get the status of the service." msgstr "ホスト上㧠WinRM サービスãŒç¨¼åƒã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚``(Get-Service -Name winrm).Status`` を使用ã—ã¦ã€ã‚µãƒ¼ãƒ“スã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’å–å¾—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:435 msgid "Check that the host firewall is allowing traffic over the WinRM port. By default this is ``5985`` for HTTP and ``5986`` for HTTPS." msgstr "ホストå´ã®ãƒ•ァイアウォールãŒã€WinRM ãƒãƒ¼ãƒˆã¸ã®ãƒˆãƒ©ãƒ•ィックを許å¯ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚デフォルトã§ã¯ã€HTTP ã§ã¯ ``5985``ã€HTTPS ã§ã¯ ``5986`` ã¨ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:438 msgid "Sometimes an installer may restart the WinRM or HTTP service and cause this error. The best way to deal with this is to use ``win_psexec`` from another Windows host." msgstr "インストーラー㌠WinRM ã‚„ HTTP サービスをå†èµ·å‹•ã—ã¦ã—ã¾ã„ã€ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れã«å¯¾å‡¦ã™ã‚‹æœ€è‰¯ã®æ–¹æ³•ã¯ã€åˆ¥ã® Windows ホストã‹ã‚‰ ``win_psexec`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:443 msgid "Failure to Load Builtin Modules" msgstr "組ã¿è¾¼ã¿ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—" #: ../../rst/user_guide/windows_setup.rst:444 msgid "If powershell fails with an error message similar to ``The 'Out-String' command was found in the module 'Microsoft.PowerShell.Utility', but the module could not be loaded.`` then there could be a problem trying to access all the paths specified by the ``PSModulePath`` environment variable. A common cause of this issue is that the ``PSModulePath`` environment variable contains a UNC path to a file share and because of the double hop/credential delegation issue the Ansible process cannot access these folders. The way around this problems is to either:" msgstr "``The 'Out-String' command was found in the module 'Microsoft.PowerShell.Utility', but the module could not be loaded.`` ã®ã‚ˆã†ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ powershell ãŒå¤±æ•—ã™ã‚‹å ´åˆã¯ã€``PSModulePath`` ç’°å¢ƒå¤‰æ•°ã§æŒ‡å®šã•れãŸã™ã¹ã¦ã®ãƒ‘スã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®å•題ã®ä¸€èˆ¬çš„ãªåŽŸå› ã¯ã€``PSModulePath`` 環境変数ã«ãƒ•ァイル共有ã¸ã® UNC パスãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãƒ€ãƒ–ルホップ/èªè¨¼æƒ…å ±ã®å§”è­²å•題ã®ãŸã‚ã« Ansible プロセスãŒã“れらã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„ã“ã¨ã§ã™ã€‚ã“ã®å•題を回é¿ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:450 msgid "Remove the UNC path from the ``PSModulePath`` environment variable, or" msgstr "``PSModulePath`` 環境変数ã‹ã‚‰ UNC パスを削除ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:451 msgid "Use an authentication option that supports credential delegation like ``credssp`` or ``kerberos`` with credential delegation enabled" msgstr "èªè¨¼æƒ…å ±ã®å§”譲を有効ã«ã—㟠``credssp`` ã‚„ ``kerberos`` ã®ã‚ˆã†ãªã€èªè¨¼æƒ…å ±ã®å§”譲をサãƒãƒ¼ãƒˆã™ã‚‹èªè¨¼ã‚ªãƒ—ションを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:453 msgid "See `KB4076842 `_ for more information on this problem." msgstr "ã“ã®å•題ã®è©³ç´°ã¯ã€ã€Œ`KB4076842 `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:457 msgid "Windows SSH Setup" msgstr "Windows SSH ã®è¨­å®š" #: ../../rst/user_guide/windows_setup.rst:458 msgid "Ansible 2.8 has added an experimental SSH connection for Windows managed nodes." msgstr "Ansible 2.8 ã§ã¯ã€Windows 管ç†ãƒŽãƒ¼ãƒ‰ã®å®Ÿé¨“的㪠SSH 接続ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" #: ../../rst/user_guide/windows_setup.rst:461 msgid "Use this feature at your own risk! Using SSH with Windows is experimental, the implementation may make backwards incompatible changes in feature releases. The server side components can be unreliable depending on the version that is installed." msgstr "ã“ã®æ©Ÿèƒ½ã¯ã”自身ã®è²¬ä»»ã§ãŠä½¿ã„ãã ã•ã„。Windows ã§ã® SSH ã®ä½¿ç”¨ã¯å®Ÿé¨“çš„ãªã‚‚ã®ã§ã‚りã€å®Ÿè£…ã¯æ©Ÿèƒ½ãƒªãƒªãƒ¼ã‚¹ã«ãŠã„ã¦å¾Œæ–¹äº’æ›æ€§ã®ãªã„変更を行ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã¾ãŸã€ã‚µãƒ¼ãƒãƒ¼å´ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ˆã£ã¦ã¯ä¿¡é ¼æ€§ã«æ¬ ã‘ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:467 msgid "Installing OpenSSH using Windows Settings" msgstr "Windows 設定を使用ã—㟠OpenSSH ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_setup.rst:468 msgid "OpenSSH can be used to connect Window 10 clients to Windows Server 2019. OpenSSH Client is available to install on Windows 10 build 1809 and later, while OpenSSH Server is available to install on Windows Server 2019 and later." msgstr "OpenSSH ã¯ã€WinkW 10 クライアントを Windows Server 2019 ã«æŽ¥ç¶šã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚OpenSSH クライアント㯠Windows 10 ビルド 1809 以é™ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ãŒã€OpenSSH Server 㯠Windows Server 2019 以é™ã«åˆ©ç”¨ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:471 msgid "Please refer `this guide `_." msgstr "`this guide `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:474 msgid "Installing Win32-OpenSSH" msgstr "Win32-OpenSSH ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_setup.rst:475 msgid "The first step to using SSH with Windows is to install the `Win32-OpenSSH `_ service on the Windows host. Microsoft offers a way to install ``Win32-OpenSSH`` through a Windows capability but currently the version that is installed through this process is too old to work with Ansible. To install ``Win32-OpenSSH`` for use with Ansible, select one of these installation options:" msgstr "Windows ã§ SSH を利用ã™ã‚‹ãŸã‚ã®æœ€åˆã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€Windows ホスト㫠`Win32-OpenSSH `_ サービスをインストールã™ã‚‹ã“ã¨ã§ã™ã€‚Microsoft 社ã§ã¯ã€Windows ã®æ©Ÿèƒ½ã‚’利用ã—㦠``Win32-OpenSSH`` をインストールã™ã‚‹æ–¹æ³•ã‚’æä¾›ã—ã¦ã„ã¾ã™ãŒã€ç¾åœ¨ã€ã“ã®æ–¹æ³•ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れるãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€Ansible ã§å‹•作ã•ã›ã‚‹ã«ã¯å¤ã™ãŽã¾ã™ã€‚Ansible ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã« ``Win32-OpenSSH`` をインストールã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚ªãƒ—ションã®ã„ãšã‚Œã‹ã‚’é¸æŠžã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:481 msgid "Manually install the service, following the `install instructions `_ from Microsoft." msgstr "Microsoft ç¤¾ãŒæä¾›ã™ã‚‹ `インストール手順 `_ ã«å¾“ã£ã¦ã€ã‚µãƒ¼ãƒ“スを手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_setup.rst:484 msgid "Install the `openssh `_ package using Chocolatey::" msgstr "Chocolatey を使用ã—㦠`openssh `_ パッケージをインストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:488 msgid "Use ``win_chocolatey`` to install the service::" msgstr "``win_chocolatey`` を使用ã—ã¦ã‚µãƒ¼ãƒ“スをインストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:496 msgid "Use an existing Ansible Galaxy role like `jborean93.win_openssh `_::" msgstr "`jborean93.win_openssh `_ ãªã©ã®æ—¢å­˜ã® Ansible Galaxy ロールを使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:509 msgid "``Win32-OpenSSH`` is still a beta product and is constantly being updated to include new features and bugfixes. If you are using SSH as a connection option for Windows, it is highly recommend you install the latest release from one of the 3 methods above." msgstr "``Win32-OpenSSH`` ã¯æœªã ãƒ™ãƒ¼ã‚¿ç‰ˆã®è£½å“ã§ã‚ã‚Šã€æ–°æ©Ÿèƒ½ã‚„ãƒã‚°ä¿®æ­£ã‚’å«ã‚ã¦å¸¸ã«æ›´æ–°ã•れã¦ã„ã¾ã™ã€‚Windows ã§ SSH 接続をã”åˆ©ç”¨ã®æ–¹ã¯ã€ä¸Šè¨˜ 3 ã¤ã®æ–¹æ³•ã‹ã‚‰æœ€æ–°ç‰ˆã‚’インストールã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:515 msgid "Configuring the Win32-OpenSSH shell" msgstr "Win32-OpenSSH シェルã®è¨­å®š" #: ../../rst/user_guide/windows_setup.rst:517 msgid "By default ``Win32-OpenSSH`` will use ``cmd.exe`` as a shell. To configure a different shell, use an Ansible task to define the registry setting::" msgstr "デフォルトã§ã¯ã€``Win32-OpenSSH`` 㯠``cmd.exe`` をシェルã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚別ã®ã‚·ã‚§ãƒ«ã‚’設定ã™ã‚‹ã«ã¯ã€Ansible タスクを使用ã—ã¦ã€ãƒ¬ã‚¸ã‚¹ãƒˆãƒªãƒ¼è¨­å®šã‚’定義ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:536 msgid "Win32-OpenSSH Authentication" msgstr "Win32-OpenSSH èªè¨¼" #: ../../rst/user_guide/windows_setup.rst:537 msgid "Win32-OpenSSH authentication with Windows is similar to SSH authentication on Unix/Linux hosts. You can use a plaintext password or SSH public key authentication, add public keys to an ``authorized_key`` file in the ``.ssh`` folder of the user's profile directory, and configure the service using the ``sshd_config`` file used by the SSH service as you would on a Unix/Linux host." msgstr "Windows ã§ã® Win32-OpenSSH èªè¨¼ã¯ã€Unix/Linux ホストã§ã® SSH èªè¨¼ã«ä¼¼ã¦ã„ã¾ã™ã€‚平文ã®ãƒ‘スワードã¾ãŸã¯ SSH 公開éµèªè¨¼ã‚’使用ã—ã€å…¬é–‹éµã‚’ユーザーã®ãƒ—ロファイルディレクトリー㮠``.ssh`` ディレクトリーã«ã‚ã‚‹ ``authorized_key`` ファイルã«è¿½åŠ ã—ã€Unix/Linux ホストã¨åŒæ§˜ã« SSH サービスã§ä½¿ç”¨ã•れる ``sshd_config`` ファイルを使用ã—ã¦ã‚µãƒ¼ãƒ“スを設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:544 msgid "When using SSH key authentication with Ansible, the remote session won't have access to the user's credentials and will fail when attempting to access a network resource. This is also known as the double-hop or credential delegation issue. There are two ways to work around this issue:" msgstr "Ansible ã§ SSH キーèªè¨¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã®èªè¨¼æƒ…å ±ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããšã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã—よã†ã¨ã™ã‚‹ã¨å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ãƒ€ãƒ–ルホップやèªè¨¼æƒ…å ±ã®å§”è­²ã®å•題ã¨ã—ã¦ã‚‚知られã¦ã„ã¾ã™ã€‚ã“ã®å•題を回é¿ã™ã‚‹ã«ã¯ 2 ã¤ã®æ–¹æ³•ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:549 msgid "Use plaintext password auth by setting ``ansible_password``" msgstr "``ansible_password`` を設定ã—ã¦å¹³æ–‡ãƒ†ã‚­ã‚¹ãƒˆã®ãƒ‘スワードèªè¨¼ã‚’使用ã™ã‚‹" #: ../../rst/user_guide/windows_setup.rst:550 msgid "Use ``become`` on the task with the credentials of the user that needs access to the remote resource" msgstr "リモートリソースã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®èªè¨¼æƒ…報を使用ã—ã¦ã€ã‚¿ã‚¹ã‚¯ã§ ``become`` を使用ã™ã‚‹" #: ../../rst/user_guide/windows_setup.rst:553 msgid "Configuring Ansible for SSH on Windows" msgstr "Windows ã§ SSH 用㫠Ansible ã®è¨­å®š" #: ../../rst/user_guide/windows_setup.rst:554 msgid "To configure Ansible to use SSH for Windows hosts, you must set two connection variables:" msgstr "Ansible ㌠Windows ホスト㫠SSH を使用ã™ã‚‹ã‚ˆã†ã«è¨­å®šã™ã‚‹ã«ã¯ã€æŽ¥ç¶šå¤‰æ•°ã‚’ 2 ã¤è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:556 msgid "set ``ansible_connection`` to ``ssh``" msgstr "``ansible_connection`` ã‚’ ``ssh`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:557 msgid "set ``ansible_shell_type`` to ``cmd`` or ``powershell``" msgstr "``ansible_shell_type`` ã‚’ ``cmd`` ã¾ãŸã¯ ``powershell`` ã«è¨­å®šã™ã‚‹" #: ../../rst/user_guide/windows_setup.rst:559 msgid "The ``ansible_shell_type`` variable should reflect the ``DefaultShell`` configured on the Windows host. Set to ``cmd`` for the default shell or set to ``powershell`` if the ``DefaultShell`` has been changed to PowerShell." msgstr "``ansible_shell_type`` 変数ã«ã¯ã€Windows ホストã§è¨­å®šã•れã¦ã„ã‚‹``DefaultShell`` ã‚’åæ˜ ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚デフォルトシェルã®å ´åˆã¯ ``cmd`` ã«ã€``DefaultShell`` ㌠PowerShell ã«å¤‰æ›´ã—ã¦ã„ã‚‹å ´åˆã¯ ``powershell`` ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:564 msgid "Known issues with SSH on Windows" msgstr "Windows ã§ã® SSH ã«é–¢ã™ã‚‹æ—¢çŸ¥ã®å•題" #: ../../rst/user_guide/windows_setup.rst:565 msgid "Using SSH with Windows is experimental, and we expect to uncover more issues. Here are the known ones:" msgstr "Windows ã§ã® SSH ã®ä½¿ç”¨ã¯å®Ÿé¨“çš„ãªã‚‚ã®ã§ã‚りã€ã‚ˆã‚Šå¤šãã®å•é¡ŒãŒæ˜Žã‚‰ã‹ã«ãªã‚‹ã“ã¨ã‚’期待ã—ã¦ã„ã¾ã™ã€‚ã“ã“ã§ã¯ã€æ—¢çŸ¥ã®ã‚‚ã®ã‚’紹介ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_setup.rst:568 msgid "Win32-OpenSSH versions older than ``v7.9.0.0p1-Beta`` do not work when ``powershell`` is the shell type" msgstr "``powershell`` ãŒã‚·ã‚§ãƒ«ã‚¿ã‚¤ãƒ—ã®å ´åˆã¯ã€``v7.9.0.0p1-Beta`` よりもå¤ã„ Win32-OpenSSH ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_setup.rst:569 msgid "While SCP should work, SFTP is the recommended SSH file transfer mechanism to use when copying or fetching a file" msgstr "SCP も有効ã§ã™ãŒã€SFTP ã¯ã€ãƒ•ァイルã®ã‚³ãƒ”ーã¾ãŸã¯å–得時ã«ä½¿ç”¨ã™ã‚‹ã€æŽ¨å¥¨ã•れる SSH ファイル転é€ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:2 msgid "Using Ansible and Windows" msgstr "Ansible ãŠã‚ˆã³ Windows ã®ä½¿ç”¨" #: ../../rst/user_guide/windows_usage.rst:3 msgid "When using Ansible to manage Windows, many of the syntax and rules that apply for Unix/Linux hosts also apply to Windows, but there are still some differences when it comes to components like path separators and OS-specific tasks. This document covers details specific to using Ansible for Windows." msgstr "Ansible を使用ã—㦠Windows を管ç†ã™ã‚‹å ´åˆã¯ã€Unix/Linux ホストã«é©ç”¨ã•れる構文やルールã®å¤šã㌠Windows ã«ã‚‚é©ç”¨ã•れã¾ã™ãŒã€ãƒ‘スセパレーターや OS 固有ã®ã‚¿ã‚¹ã‚¯ãªã©ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã«é–¢ã—ã¦ã¯ã€è‹¥å¹²ã®é•ã„ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯ã€Ansible ã‚’ Windows ã§ä½¿ç”¨ã™ã‚‹éš›ã®è©³ç´°æƒ…報を説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:12 msgid "Use Cases" msgstr "ユースケース" #: ../../rst/user_guide/windows_usage.rst:13 msgid "Ansible can be used to orchestrate a multitude of tasks on Windows servers. Below are some examples and info about common tasks." msgstr "Ansible ã¯ã€Windows サーãƒãƒ¼ã«ã‚る多数ã®ã‚¿ã‚¹ã‚¯ã‚’調整ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã€‚以下ã¯ã€ä¸€èˆ¬çš„ãªã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹ä¾‹ã¨æƒ…å ±ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:17 msgid "Installing Software" msgstr "ソフトウェアã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_usage.rst:18 msgid "There are three main ways that Ansible can be used to install software:" msgstr "Ansible を使用ã—ã¦ã‚½ãƒ•トウェアをインストールã§ãã‚‹ä¸»ãªæ–¹æ³•㯠3 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:20 msgid "Using the ``win_chocolatey`` module. This sources the program data from the default public `Chocolatey `_ repository. Internal repositories can be used instead by setting the ``source`` option." msgstr "``win_chocolatey`` モジュールを使用。ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒ‡ãƒ•ォルトã®ãƒ‘ブリック㪠`Chocolatey `_ リãƒã‚¸ãƒˆãƒªãƒ¼ã‹ã‚‰ãƒ—ログラムデータを調é”ã—ã¾ã™ã€‚``source`` オプションを設定ã™ã‚‹ã“ã¨ã§ã€ä»£ã‚りã«å†…部リãƒã‚¸ãƒˆãƒªãƒ¼ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:24 msgid "Using the ``win_package`` module. This installs software using an MSI or .exe installer from a local/network path or URL." msgstr "``win_package`` モジュールを使用ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«/ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‘スã¾ãŸã¯ URL ã‹ã‚‰ MSI ã¾ãŸã¯ .exe インストーラーを使用ã—ã¦ã‚½ãƒ•トウェアをインストールã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:27 msgid "Using the ``win_command`` or ``win_shell`` module to run an installer manually." msgstr "``win_command`` モジュールã¾ãŸã¯ ``win_shell`` モジュールを使用ã—ã¦æ‰‹å‹•ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:29 msgid "The ``win_chocolatey`` module is recommended since it has the most complete logic for checking to see if a package has already been installed and is up-to-date." msgstr "``win_chocolatey`` モジュールã¯ã€ãƒ‘ッケージãŒã™ã§ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¦æœ€æ–°ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ãŸã‚ã®æœ€ã‚‚完全ãªãƒ­ã‚¸ãƒƒã‚¯ã‚’å‚™ãˆã¦ã„ã‚‹ãŸã‚ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:31 msgid "Below are some examples of using all three options to install 7-Zip:" msgstr "以下ã¯ã€3 ã¤ã®ã™ã¹ã¦ã®ã‚ªãƒ—ションを使用ã—㦠7-Zip をインストールã™ã‚‹ã„ãã¤ã‹ã®ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:81 msgid "Some installers like Microsoft Office or SQL Server require credential delegation or access to components restricted by WinRM. The best method to bypass these issues is to use ``become`` with the task. With ``become``, Ansible will run the installer as if it were run interactively on the host." msgstr "Microsoft Office ã‚„ SQL Server ãªã©ã®ä¸€éƒ¨ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€èªè¨¼æƒ…å ±ã®å§”譲や WinRM ã§åˆ¶é™ã•れãŸã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚ã“れらã®å•題を回é¿ã™ã‚‹ãŸã‚ã®æœ€è‰¯ã®æ–¹æ³•ã¯ã€ã‚¿ã‚¹ã‚¯ã« ``become`` を使用ã™ã‚‹ã“ã¨ã§ã™ã€‚``become`` を使用ã™ã‚‹ã¨ã€Ansible ã¯ã‚ãŸã‹ã‚‚ホスト上ã§å¯¾è©±çš„ã«å®Ÿè¡Œã•れã¦ã„ã‚‹ã‹ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:86 msgid "Many installers do not properly pass back error information over WinRM. In these cases, if the install has been verified to work locally the recommended method is to use become." msgstr "多ãã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€WinRM を介ã—ã¦ã‚¨ãƒ©ãƒ¼æƒ…報をé©åˆ‡ã«è¿”ã—ã¾ã›ã‚“。ã“ã®ã‚ˆã†ãªå ´åˆã«ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®å‹•作ãŒç¢ºèªã•れã¦ã„ã‚‹å ´åˆã«ã¯ become を使用ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:88 msgid "Some installers restart the WinRM or HTTP services, or cause them to become temporarily unavailable, making Ansible assume the system is unreachable." msgstr "一部ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã¯ã€WinRM サービスã¾ãŸã¯ HTTP サービスをå†èµ·å‹•ã—ãŸã‚Šã€ä¸€æ™‚çš„ã«åˆ©ç”¨ã§ããªããªã£ãŸã‚Šã™ã‚‹ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ãŒåˆ°é”ä¸èƒ½ã§ã‚る㨠Ansible ã«ã‚ˆã‚Šæƒ³å®šã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:91 msgid "Installing Updates" msgstr "æ›´æ–°ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_usage.rst:92 msgid "The ``win_updates`` and ``win_hotfix`` modules can be used to install updates or hotfixes on a host. The module ``win_updates`` is used to install multiple updates by category, while ``win_hotfix`` can be used to install a single update or hotfix file that has been downloaded locally." msgstr "``win_updates`` モジュールãŠã‚ˆã³ ``win_hotfix`` モジュールを使用ã™ã‚‹ã¨ã€ãƒ›ã‚¹ãƒˆã«ã‚¢ãƒƒãƒ—デートや Hotfix をインストールã§ãã¾ã™ã€‚モジュール ``win_updates`` ã¯ã‚«ãƒ†ã‚´ãƒªãƒ¼åˆ¥ã«è¤‡æ•°ã®ã‚¢ãƒƒãƒ—デートをインストールã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã€``win_hotfix`` ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸå˜ä¸€ã®æ›´æ–°ã¾ãŸã¯ Hotfix ファイルをインストールã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:97 msgid "The ``win_hotfix`` module has a requirement that the DISM PowerShell cmdlets are present. These cmdlets were only added by default on Windows Server 2012 and newer and must be installed on older Windows hosts." msgstr "``win_hotfix`` モジュールã«ã¯ã€DISM PowerShell コマンドレットãŒå­˜åœ¨ã™ã‚‹ã¨ã„ã†è¦ä»¶ãŒã‚りã¾ã™ã€‚ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ãƒ¬ãƒƒãƒˆã¯ã€Windows Server 2012 以é™ã§ã®ã¿ãƒ‡ãƒ•ォルトã§è¿½åŠ ã•れã¦ãŠã‚Šã€ãれ以å‰ã® Windows ホストã§ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:101 msgid "The following example shows how ``win_updates`` can be used:" msgstr "次ã®ä¾‹ã¯ã€``win_updates`` ã®ä½¿ç”¨æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:117 msgid "The following example show how ``win_hotfix`` can be used to install a single update or hotfix:" msgstr "以下ã®ä¾‹ã§ã¯ã€``win_hotfix`` を使用ã—ã¦å˜ä¸€ã®ã‚¢ãƒƒãƒ—デートã¾ãŸã¯ Hotfix をインストールã™ã‚‹æ–¹æ³•を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:139 msgid "Set Up Users and Groups" msgstr "ユーザーãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã®è¨­å®š" #: ../../rst/user_guide/windows_usage.rst:140 msgid "Ansible can be used to create Windows users and groups both locally and on a domain." msgstr "Ansible を使用ã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ«ã¨ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ä¸¡æ–¹ã§ Windows ユーザーã¨ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:143 msgid "Local" msgstr "ローカル" #: ../../rst/user_guide/windows_usage.rst:144 msgid "The modules ``win_user``, ``win_group`` and ``win_group_membership`` manage Windows users, groups and group memberships locally." msgstr "``win_user`` モジュールã€``win_group`` モジュールã€ãŠã‚ˆã³ ``win_group_membership`` モジュールã¯ã€Windows ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚·ãƒƒãƒ—をローカルã«ç®¡ç†ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:147 msgid "The following is an example of creating local accounts and groups that can access a folder on the same host:" msgstr "以下ã¯ã€åŒã˜ãƒ›ã‚¹ãƒˆã«ã‚るディレクトリーã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるローカルアカウントãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹ä¾‹ã‚’示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:190 msgid "Domain" msgstr "ドメイン" #: ../../rst/user_guide/windows_usage.rst:191 msgid "The modules ``win_domain_user`` and ``win_domain_group`` manages users and groups in a domain. The below is an example of ensuring a batch of domain users are created:" msgstr "``win_domain_user`` モジュールãŠã‚ˆã³ ``win_domain_group`` モジュールã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—を管ç†ã—ã¾ã™ã€‚以下ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒãƒƒãƒã‚’確実ã«ä½œæˆã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:217 msgid "Running Commands" msgstr "コマンドã®å®Ÿè¡Œ" #: ../../rst/user_guide/windows_usage.rst:218 msgid "In cases where there is no appropriate module available for a task, a command or script can be run using the ``win_shell``, ``win_command``, ``raw``, and ``script`` modules." msgstr "タスクã«é©ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒãªã„å ´åˆã¯ã€``win_shell`` モジュールã€``win_command`` モジュールã€``raw`` モジュールã€ãŠã‚ˆã³ ``script`` モジュールを使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚„スクリプトを実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:221 msgid "The ``raw`` module simply executes a Powershell command remotely. Since ``raw`` has none of the wrappers that Ansible typically uses, ``become``, ``async`` and environment variables do not work." msgstr "``raw`` モジュールã¯ã€Powershell コマンドをリモートã§å®Ÿè¡Œã™ã‚‹ã ã‘ã§ã™ã€‚``raw`` ã¯ã€Ansible ãŒé€šå¸¸ä½¿ç”¨ã™ã‚‹ãƒ©ãƒƒãƒ‘ーを一切使用ã—ã¦ã„ãªã„ãŸã‚ã€``become``ã€``async``ã€ãŠã‚ˆã³ç’°å¢ƒå¤‰æ•°ã¯å‹•作ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_usage.rst:225 msgid "The ``script`` module executes a script from the Ansible controller on one or more Windows hosts. Like ``raw``, ``script`` currently does not support ``become``, ``async``, or environment variables." msgstr "``script`` モジュールã¯ã€Ansible コントローラーã‹ã‚‰ã®ã‚¹ã‚¯ãƒªãƒ—トを 1 ã¤ã¾ãŸã¯è¤‡æ•°ã® Windows ホスト上ã§å®Ÿè¡Œã—ã¾ã™ã€‚``raw`` ã¨åŒæ§˜ã«ã€``script`` ã¯ç¾åœ¨ã€``become``ã€``async``ã€ã¾ãŸã¯ç’°å¢ƒå¤‰æ•°ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_usage.rst:229 msgid "The ``win_command`` module is used to execute a command which is either an executable or batch file, while the ``win_shell`` module is used to execute commands within a shell." msgstr "``win_command`` モジュールã¯ã€å®Ÿè¡Œãƒ•ァイルã¾ãŸã¯ãƒãƒƒãƒãƒ•ァイルã§ã‚るコマンドを実行ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã€``win_shell`` モジュールã¯ã€ã‚·ã‚§ãƒ«å†…ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:233 msgid "Choosing Command or Shell" msgstr "コマンドã¾ãŸã¯ã‚·ã‚§ãƒ«ã®é¸æŠž" #: ../../rst/user_guide/windows_usage.rst:234 msgid "The ``win_shell`` and ``win_command`` modules can both be used to execute a command or commands. The ``win_shell`` module is run within a shell-like process like ``PowerShell`` or ``cmd``, so it has access to shell operators like ``<``, ``>``, ``|``, ``;``, ``&&``, and ``||``. Multi-lined commands can also be run in ``win_shell``." msgstr "``win_shell`` モジュールãŠã‚ˆã³ ``win_command`` モジュールã¯ã€ã©ã¡ã‚‰ã‚‚コマンドã®å®Ÿè¡Œã«ä½¿ç”¨ã§ãã¾ã™ã€‚``win_shell`` モジュール㯠``PowerShell`` ã‚„ ``cmd`` ãªã©ã®ã‚·ã‚§ãƒ«ã®ã‚ˆã†ãªãªãƒ—ロセス内ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã€``<``ã€``>``ã€``|``ã€``;``ã€``&&``ã€``||`` ãªã©ã®ã‚·ã‚§ãƒ«æ¼”ç®—å­ã‚’使用ã§ãã¾ã™ã€‚``win_shell`` ã§ã¯ã€è¤‡æ•°è¡Œã®ã‚³ãƒžãƒ³ãƒ‰ã‚‚実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:238 msgid "The ``win_command`` module simply runs a process outside of a shell. It can still run a shell command like ``mkdir`` or ``New-Item`` by passing the shell commands to a shell executable like ``cmd.exe`` or ``PowerShell.exe``." msgstr "``win_command`` モジュールã¯ã€ã‚·ã‚§ãƒ«ã®å¤–部ã§ãƒ—ロセスを実行ã™ã‚‹ã ã‘ã§ã™ã€‚``cmd.exe`` ã‚„ ``PowerShell.exe`` ãªã©ã®ã‚·ã‚§ãƒ«å®Ÿè¡Œãƒ•ァイルã«ã€``mkdir`` ã‚„ ``New-Item`` ãªã©ã®ã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’渡ã—ã¦ã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:242 msgid "Here are some examples of using ``win_command`` and ``win_shell``:" msgstr "以下ã¯ã€``win_command`` 㨠``win_shell`` を使用ã—ãŸä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:270 msgid "Some commands like ``mkdir``, ``del``, and ``copy`` only exist in the CMD shell. To run them with ``win_command`` they must be prefixed with ``cmd.exe /c``." msgstr "``mkdir``ã€``del``ã€``copy`` ãªã©ã®ä¸€éƒ¨ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€CMD シェルã«ã®ã¿å­˜åœ¨ã—ã¾ã™ã€‚``win_command`` ã§ãれらを実行ã™ã‚‹ã«ã¯ã€``cmd.exe /c`` プレフィックスを付ã‘ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:275 msgid "Argument Rules" msgstr "引数ã®ãƒ«ãƒ¼ãƒ«" #: ../../rst/user_guide/windows_usage.rst:276 msgid "When running a command through ``win_command``, the standard Windows argument rules apply:" msgstr "``win_command`` を通ã˜ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹éš›ã«ã¯ã€Windows ã®æ¨™æº–çš„ãªå¼•数ルールãŒé©ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:279 msgid "Each argument is delimited by a white space, which can either be a space or a tab." msgstr "å„引数ã¯ã€ç©ºç™½ã¾ãŸã¯ã‚¿ãƒ–ã®ã„ãšã‚Œã‹ã§ã‚る空白ã§åŒºåˆ‡ã‚‰ã‚Œã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:282 msgid "An argument can be surrounded by double quotes ``\"``. Anything inside these quotes is interpreted as a single argument even if it contains whitespace." msgstr "引数ã¯äºŒé‡å¼•用符 ``\"`` ã§å›²ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®å¼•用符ã®å†…å´ã«ã¯ã€ç©ºç™½ãŒå«ã¾ã‚Œã¦ã„ã¦ã‚‚ã€1 ã¤ã®å¼•æ•°ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:285 msgid "A double quote preceded by a backslash ``\\`` is interpreted as just a double quote ``\"`` and not as an argument delimiter." msgstr "ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ ``\\`` ãŒå‰ã«ä»˜ã„ãŸäºŒé‡å¼•用符ã¯ã€å¼•数区切り文字ã§ã¯ãªã二é‡å¼•用符 ``\"`` ã¨ã—ã¦è§£é‡ˆã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:288 msgid "Backslashes are interpreted literally unless it immediately precedes double quotes; for example ``\\`` == ``\\`` and ``\\\"`` == ``\"``" msgstr "ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã¯ã€äºŒé‡å¼•用符ã®ç›´å‰ã«ãªã„é™ã‚Šã€æ–‡å­—通りã«è§£é‡ˆã•れã¾ã™ (例: ``\\`` ==``\\`` ãŠã‚ˆã³ ``\\\"`` == ``\"``)。" #: ../../rst/user_guide/windows_usage.rst:291 msgid "If an even number of backslashes is followed by a double quote, one backslash is used in the argument for every pair, and the double quote is used as a string delimiter for the argument." msgstr "å¶æ•°å€‹ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«äºŒé‡å¼•用符ãŒç¶šãå ´åˆã¯ã€ã™ã¹ã¦ã®ãƒšã‚¢ã®å¼•æ•°ã§ 1 ã¤ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒä½¿ç”¨ã•れã€äºŒé‡å¼•用符ãŒå¼•æ•°ã®æ–‡å­—列区切り文字ã¨ã—ã¦ä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:295 msgid "If an odd number of backslashes is followed by a double quote, one backslash is used in the argument for every pair, and the double quote is escaped and made a literal double quote in the argument." msgstr "奇数個ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®å¾Œã«äºŒé‡å¼•用符ãŒç¶šãå ´åˆã€å¼•æ•°ã§ã¯ãƒšã‚¢ã”ã¨ã« 1 ã¤ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒä½¿ç”¨ã•れã€äºŒé‡å¼•用符ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã•れã¦å¼•æ•°ã®ãƒªãƒ†ãƒ©ãƒ«äºŒé‡å¼•用符ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:299 msgid "With those rules in mind, here are some examples of quoting:" msgstr "ã“れらã®ãƒ«ãƒ¼ãƒ«ã‚’念頭ã«ç½®ã„ã¦ã€å¼•用ã®ä¾‹ã‚’ã„ãã¤ã‹ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:324 msgid "For more information, see `escaping arguments `_." msgstr "詳細情報ã¯ã€ã€Œ`escaping arguments `_ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_usage.rst:327 msgid "Creating and Running a Scheduled Task" msgstr "スケジュールã•れãŸã‚¿ã‚¹ã‚¯ã®ä½œæˆãŠã‚ˆã³å®Ÿè¡Œ" #: ../../rst/user_guide/windows_usage.rst:328 msgid "WinRM has some restrictions in place that cause errors when running certain commands. One way to bypass these restrictions is to run a command through a scheduled task. A scheduled task is a Windows component that provides the ability to run an executable on a schedule and under a different account." msgstr "WinRM ã«ã¯ã€ç‰¹å®šã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ãŸã¨ãã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã‚ˆã†ãªåˆ¶é™ãŒè¨­ã‘られã¦ã„ã¾ã™ã€‚ã“れらã®åˆ¶é™ã‚’回é¿ã™ã‚‹æ–¹æ³•ã® 1 ã¤ã¨ã—ã¦ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã™ã€‚スケジュールã•れãŸã‚¿ã‚¹ã‚¯ã¨ã¯ã€å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ²¿ã£ã¦ã€åˆ¥ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§å®Ÿè¡Œã™ã‚‹æ©Ÿèƒ½ã‚’æä¾›ã™ã‚‹ Windows コンãƒãƒ¼ãƒãƒ³ãƒˆã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:333 msgid "Ansible version 2.5 added modules that make it easier to work with scheduled tasks in Windows. The following is an example of running a script as a scheduled task that deletes itself after running:" msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã§ã¯ã€Windows ã§ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚¿ã‚¹ã‚¯ã®æ“作を容易ã«ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚以下ã¯ã€å®Ÿè¡Œå¾Œã«è‡ªåˆ†è‡ªèº«ã‚’削除ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トをスケジュールタスクã¨ã—ã¦å®Ÿè¡Œã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:362 msgid "The modules used in the above example were updated/added in Ansible version 2.5." msgstr "上記ã®ä¾‹ã§ä½¿ç”¨ã•れã¦ã„るモジュールã¯ã€Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.5 ã§æ›´æ–°ã¾ãŸã¯è¿½åŠ ã•れãŸã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:366 msgid "Path Formatting for Windows" msgstr "Windows ã®ãƒ‘スã®ãƒ•ォーマット" #: ../../rst/user_guide/windows_usage.rst:367 msgid "Windows differs from a traditional POSIX operating system in many ways. One of the major changes is the shift from ``/`` as the path separator to ``\\``. This can cause major issues with how playbooks are written, since ``\\`` is often used as an escape character on POSIX systems." msgstr "Windows ã¯ã€å¾“æ¥ã® POSIX オペレーティングシステムã¨ã¯å¤šãã®ç‚¹ã§ç•°ãªã‚Šã¾ã™ã€‚主ãªå¤‰æ›´ç‚¹ã®ã²ã¨ã¤ã¯ã€ãƒ‘スã®åŒºåˆ‡ã‚Šæ–‡å­—㌠``/`` ã‹ã‚‰ ``\\`` ã«ãªã£ãŸã“ã¨ã§ã™ã€‚POSIX システムã§ã¯ã€``\\`` ãŒã—ã°ã—ã°ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—文字ã¨ã—ã¦ä½¿ç”¨ã•れるãŸã‚ã€ã“れ㯠Playbook ã®è¨˜è¿°æ–¹æ³•ã«é‡å¤§ãªå•題を引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:372 msgid "Ansible allows two different styles of syntax; each deals with path separators for Windows differently:" msgstr "Ansible ã§ã¯ã€2 ã¤ã®ç•°ãªã‚‹ã‚¹ã‚¿ã‚¤ãƒ«ã®æ§‹æ–‡ã‚’使用ã§ãã¾ã™ã€‚ãれãžã‚Œ Windows ã®ãƒ‘ã‚¹ã‚»ãƒ‘ãƒ¬ãƒ¼ã‚¿ãƒ¼ã®æ‰±ã„ãŒç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:375 msgid "YAML Style" msgstr "YAML スタイル" #: ../../rst/user_guide/windows_usage.rst:376 msgid "When using the YAML syntax for tasks, the rules are well-defined by the YAML standard:" msgstr "タスク㫠YAML 構文を使用ã™ã‚‹å ´åˆã€ãã®ãƒ«ãƒ¼ãƒ«ã¯ YAML è¦æ ¼ã«ã‚ˆã£ã¦æ˜Žç¢ºã«å®šç¾©ã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:379 msgid "When using a normal string (without quotes), YAML will not consider the backslash an escape character." msgstr "é€šå¸¸ã®æ–‡å­—列 (引用符ãªã—) を使用ã™ã‚‹å ´åˆã€YAML ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープ文字ã¨ã¯ã¿ãªã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_usage.rst:382 msgid "When using single quotes ``'``, YAML will not consider the backslash an escape character." msgstr "一é‡å¼•用符 ``'`` を使用ã™ã‚‹å ´åˆã€YAML ã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープ文字ã¨ã¯ã¿ãªã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_usage.rst:385 msgid "When using double quotes ``\"``, the backslash is considered an escape character and needs to escaped with another backslash." msgstr "二é‡å¼•用符 ``\"`` を使用ã™ã‚‹å ´åˆã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—文字ã¨è¦‹ãªã•れã€åˆ¥ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:388 msgid "You should only quote strings when it is absolutely necessary or required by YAML, and then use single quotes." msgstr "文字列を引用ã™ã‚‹ã®ã¯ã€çµ¶å¯¾ã«å¿…è¦ãªå ´åˆã‚„ YAML ã§è¦æ±‚ã•れる場åˆã®ã¿ã¨ã—ã€ãã®å ´åˆã¯ä¸€é‡å¼•用符を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:391 msgid "The YAML specification considers the following `escape sequences `_:" msgstr "YAML 仕様ã¯ã€ä»¥ä¸‹ã® `エスケープシーケンス `_ を考慮ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:393 msgid "``\\0``, ``\\\\``, ``\\\"``, ``\\_``, ``\\a``, ``\\b``, ``\\e``, ``\\f``, ``\\n``, ``\\r``, ``\\t``, ``\\v``, ``\\L``, ``\\N`` and ``\\P`` -- Single character escape" msgstr "``\\0``ã€``\\\\``ã€``\\\"``ã€``\\_``ã€``\\a``ã€``\\b``ã€``\\e``ã€``\\f``ã€``\\n" "``ã€``\\r``ã€``\\t``ã€``\\v``ã€``\\L``ã€``\\N``ã€ãŠã‚ˆã³ ``\\P`` -- 一文字ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—" #: ../../rst/user_guide/windows_usage.rst:396 msgid "````, ````, ````, ````, ```` -- Special characters" msgstr "````ã€````ã€````ã€````ã€```` -- 特殊文字" #: ../../rst/user_guide/windows_usage.rst:399 #: ../../rst/user_guide/windows_usage.rst:449 msgid "``\\x..`` -- 2-digit hex escape" msgstr "``\\x..`` -- 2 æ¡ã® 16 進エスケープ" #: ../../rst/user_guide/windows_usage.rst:401 #: ../../rst/user_guide/windows_usage.rst:451 msgid "``\\u....`` -- 4-digit hex escape" msgstr "``\\u....`` -- 4 æ¡ã® 16 進エスケープ" #: ../../rst/user_guide/windows_usage.rst:403 #: ../../rst/user_guide/windows_usage.rst:453 msgid "``\\U........`` -- 8-digit hex escape" msgstr "``\\U........`` -- 8 æ¡ã® 16 進エスケープ" #: ../../rst/user_guide/windows_usage.rst:405 msgid "Here are some examples on how to write Windows paths::" msgstr "Windows パスã®è¨˜è¿°æ–¹æ³•ã®ä¾‹ã‚’次ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:419 msgid "This is an example which will fail:" msgstr "ã“れã¯å¤±æ•—ã™ã‚‹ä¾‹ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:426 msgid "This example shows the use of single quotes when they are required::" msgstr "ã“ã®ä¾‹ã¯ã€å¿…è¦ãªå ´åˆã®ä¸€é‡å¼•用符ã®ä½¿ç”¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:435 msgid "Legacy key=value Style" msgstr "従æ¥ã® key=value スタイル" #: ../../rst/user_guide/windows_usage.rst:436 msgid "The legacy ``key=value`` syntax is used on the command line for ad hoc commands, or inside playbooks. The use of this style is discouraged within playbooks because backslash characters need to be escaped, making playbooks harder to read. The legacy syntax depends on the specific implementation in Ansible, and quoting (both single and double) does not have any effect on how it is parsed by Ansible." msgstr "従æ¥ã® ``key=value`` ã®æ§‹æ–‡ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã®ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯ãªã‚³ãƒžãƒ³ãƒ‰ã‚„ Playbook 内ã§ä½¿ç”¨ã•れã¾ã™ã€‚ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥æ–‡å­—をエスケープã™ã‚‹å¿…è¦ãŒã‚りã€Playbook ãŒèª­ã¿ã¥ã‚‰ããªã‚‹ãŸã‚ã€Playbook 内ã§ã¯ã“ã®ã‚¹ã‚¿ã‚¤ãƒ«ã®ä½¿ç”¨ã¯æŽ¨å¥¨ã•れã¾ã›ã‚“。従æ¥ã®æ§‹æ–‡ã¯ã€Ansible ã®ç‰¹å®šã®å®Ÿè£…ã«ä¾å­˜ã—ã¦ãŠã‚Šã€å¼•用符 (å˜ä¸€ãŠã‚ˆã³äºŒé‡) ã¯ã€Ansible ã§ã®è§£æžæ–¹æ³•ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_usage.rst:443 msgid "The Ansible key=value parser parse_kv() considers the following escape sequences:" msgstr "Ansible ã® key=value パーサー parse_kv() ã¯ã€ä»¥ä¸‹ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—シーケンスを考慮ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:446 msgid "``\\``, ``'``, ``\"``, ``\\a``, ``\\b``, ``\\f``, ``\\n``, ``\\r``, ``\\t`` and ``\\v`` -- Single character escape" msgstr "``\\``ã€``'``ã€``\"``ã€``\\a``ã€``\\b``ã€``\\f``ã€``\\n" "``ã€``\\r``ã€``\\t``ã€ãŠã‚ˆã³ ``\\v`` -- 一文字ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—" #: ../../rst/user_guide/windows_usage.rst:455 msgid "``\\N{...}`` -- Unicode character by name" msgstr "``\\N{...}`` -- åå‰ã«ã‚ˆã‚‹ Unicode 文字" #: ../../rst/user_guide/windows_usage.rst:457 msgid "This means that the backslash is an escape character for some sequences, and it is usually safer to escape a backslash when in this form." msgstr "ã“れã¯ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒã„ãã¤ã‹ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—文字ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’æ„味ã—ã¦ãŠã‚Šã€é€šå¸¸ã€ã“ã®å½¢å¼ã®å ´åˆã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚’エスケープã™ã‚‹æ–¹ãŒå®‰å…¨ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:460 msgid "Here are some examples of using Windows paths with the key=value style:" msgstr "key=value スタイル㧠Windows パスを使用ã™ã‚‹ä¾‹ã‚’次ã«ç¤ºã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:482 msgid "The failing examples don't fail outright but will substitute ``\\t`` with the ```` character resulting in ``tempdir`` being ``C:\\Windowsemp``." msgstr "失敗ã—ãŸä¾‹ã§ã¯ã€å®Œå…¨ã«å¤±æ•—ã™ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€``\\t`` ã‚’ ```` ã®æ–‡å­—ã§ç½®ãæ›ãˆã¦ã€``tempdir`` ã‚’ ``C:\\Windowsemp`` ã«ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:486 #: ../../rst/user_guide/windows_winrm.rst:867 msgid "Limitations" msgstr "制é™äº‹é …" #: ../../rst/user_guide/windows_usage.rst:487 msgid "Some things you cannot do with Ansible and Windows are:" msgstr "ã“ã“ã§ã¯ã€Ansible ãŠã‚ˆã³ Windows ã§ã§ããªã„ã“ã¨ã‚’説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:489 msgid "Upgrade PowerShell" msgstr "PowerShell ã®ã‚¢ãƒƒãƒ—グレード" #: ../../rst/user_guide/windows_usage.rst:491 msgid "Interact with the WinRM listeners" msgstr "WinRM リスナーã¨ã®å¯¾è©±" #: ../../rst/user_guide/windows_usage.rst:493 msgid "Because WinRM is reliant on the services being online and running during normal operations, you cannot upgrade PowerShell or interact with WinRM listeners with Ansible. Both of these actions will cause the connection to fail. This can technically be avoided by using ``async`` or a scheduled task, but those methods are fragile if the process it runs breaks the underlying connection Ansible uses, and are best left to the bootstrapping process or before an image is created." msgstr "WinRM ã¯ã€é€šå¸¸ã®é‹ç”¨æ™‚ã«ã‚µãƒ¼ãƒ“スãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ç¨¼åƒã—ã¦ã„ã‚‹ã“ã¨ã«ä¾å­˜ã—ã¦ã„ã‚‹ãŸã‚ã€PowerShell をアップグレードã—ãŸã‚Šã€Ansible ã§ WinRM リスナーã¨å¯¾è©±ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã“れらã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã„ãšã‚Œã‚‚ã€æŽ¥ç¶šã®å¤±æ•—を引ãèµ·ã“ã—ã¾ã™ã€‚ã“れã¯ã€æŠ€è¡“çš„ã«ã¯ ``async`` やスケジュールã•れãŸã‚¿ã‚¹ã‚¯ã‚’使用ã™ã‚‹ã“ã¨ã§å›žé¿ã§ãã¾ã™ãŒã€ã“ã‚Œã‚‰ã®æ–¹æ³•ã¯ã€å®Ÿè¡Œã™ã‚‹ãƒ—ロセスã«ã‚ˆã£ã¦ Ansible ãŒä½¿ç”¨ã™ã‚‹åŸºç¤Žçš„ãªæŽ¥ç¶šãŒå£Šã‚Œã‚‹ã¨è„†å¼±ã«ãªã‚‹ãŸã‚ã€ãƒ–ートストラッププロセスやイメージãŒä½œæˆã•れるå‰ã«ä»»ã›ã‚‹ã®ãŒæœ€é©ã§ã™ã€‚" #: ../../rst/user_guide/windows_usage.rst:497 msgid "Developing Windows Modules" msgstr "Windows モジュールã®é–‹ç™º" #: ../../rst/user_guide/windows_usage.rst:498 msgid "Because Ansible modules for Windows are written in PowerShell, the development guides for Windows modules differ substantially from those for standard standard modules. Please see :ref:`developing_modules_general_windows` for more information." msgstr "Windows 用㮠Ansible モジュール㯠PowerShell ã§æ›¸ã‹ã‚Œã¦ã„ã‚‹ãŸã‚ã€Windows モジュールã®é–‹ç™ºã‚¬ã‚¤ãƒ‰ã¯æ¨™æº–è¦æ ¼ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®é–‹ç™ºã‚¬ã‚¤ãƒ‰ã¨ã¯å¤§ããç•°ãªã‚Šã¾ã™ã€‚詳細ã¯ã€ã€Œ:ref:`developing_modules_general_windows`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:4 msgid "Windows Remote Management" msgstr "Windows リモート管ç†" #: ../../rst/user_guide/windows_winrm.rst:5 msgid "Unlike Linux/Unix hosts, which use SSH by default, Windows hosts are configured with WinRM. This topic covers how to configure and use WinRM with Ansible." msgstr "デフォルト㧠SSH を使用ã™ã‚‹ Linux/Unix ホストã¨ã¯ç•°ãªã‚Šã€Windows ホスト㯠WinRM ã§è¨­å®šã•れã¦ã„ã¾ã™ã€‚ã“ã®ãƒˆãƒ”ックã§ã¯ã€Ansible ã§ WinRM を設定ã—ã€ä½¿ç”¨ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:12 msgid "What is WinRM?" msgstr "WinRM ã¨ã¯" #: ../../rst/user_guide/windows_winrm.rst:13 msgid "WinRM is a management protocol used by Windows to remotely communicate with another server. It is a SOAP-based protocol that communicates over HTTP/HTTPS, and is included in all recent Windows operating systems. Since Windows Server 2012, WinRM has been enabled by default, but in most cases extra configuration is required to use WinRM with Ansible." msgstr "WinRM ã¯ã€Windows ãŒåˆ¥ã®ã‚µãƒ¼ãƒãƒ¼ã¨ãƒªãƒ¢ãƒ¼ãƒˆã§é€šä¿¡ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ç®¡ç†ãƒ—ロトコルã§ã™ã€‚WinRM ã¯ã€HTTP/HTTPS ã§é€šä¿¡ã™ã‚‹ SOAP ベースã®ãƒ—ロトコルã§ã€æœ€è¿‘ã®ã™ã¹ã¦ã® Windows OS ã«æ­è¼‰ã•れã¦ã„ã¾ã™ã€‚Windows Server 2012 以é™ã€WinRM ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã¾ã™ãŒã€ã»ã¨ã‚“ã©ã®å ´åˆã¯ã€Ansible ã§ WinRM を使用ã™ã‚‹ã«ã¯è¿½åŠ ã®è¨­å®šãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:19 msgid "Ansible uses the `pywinrm `_ package to communicate with Windows servers over WinRM. It is not installed by default with the Ansible package, but can be installed by running the following:" msgstr "Ansible 㯠`pywinrm `_ パッケージを使用ã—ã¦ã€WinRM を介ã—㦠Windows サーãƒãƒ¼ã¨é€šä¿¡ã—ã¾ã™ã€‚デフォルトã§ã¯ Ansible パッケージã¨ã¨ã‚‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã›ã‚“ãŒã€ä»¥ä¸‹ã‚’実行ã™ã‚‹ã“ã¨ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:27 msgid "on distributions with multiple python versions, use pip2 or pip2.x, where x matches the python minor version Ansible is running under." msgstr "複数㮠python ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚るディストリビューションã§ã¯ã€pip2 ã¾ãŸã¯ pip2.x を使用ã—ã¾ã™ã€‚x ã¯ã€Ansible を実行ã—ã¦ã„ã‚‹ python マイナーãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨ä¸€è‡´ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:31 msgid "Using the ``winrm`` or ``psrp`` connection plugins in Ansible on MacOS in the latest releases typically fail. This is a known problem that occurs deep within the Python stack and cannot be changed by Ansible. The only workaround today is to set the environment variable ``no_proxy=*`` and avoid using Kerberos auth." msgstr "最新リリース㮠MacOS 上㮠Ansible ã§ã€connection プラグイン ``winrm`` ã¾ãŸã¯ ``psrp`` を使用ã™ã‚‹ã¨ã€é€šå¸¸ã¯å¤±æ•—ã—ã¾ã™ã€‚ã“れã¯ã€Python スタックã®å¥¥æ·±ãã§ç™ºç”Ÿã™ã‚‹æ—¢çŸ¥ã®å•題ã§ã‚りã€Ansible ã§ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。ç¾åœ¨ã®å”¯ä¸€ã®å›žé¿ç­–ã¯ã€ç’°å¢ƒå¤‰æ•° ``no_proxy=*`` を設定ã—ã€Kerberos èªè¨¼ã‚’使用ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:39 msgid "Authentication Options" msgstr "èªè¨¼ã‚ªãƒ—ション" #: ../../rst/user_guide/windows_winrm.rst:40 msgid "When connecting to a Windows host, there are several different options that can be used when authenticating with an account. The authentication type may be set on inventory hosts or groups with the ``ansible_winrm_transport`` variable." msgstr "Windows ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã™ã‚‹éš›ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§èªè¨¼ã™ã‚‹éš›ã«ä½¿ç”¨ã§ãã‚‹ã„ãã¤ã‹ã®ç•°ãªã‚‹ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚èªè¨¼ã‚¿ã‚¤ãƒ—ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã®ãƒ›ã‚¹ãƒˆã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã« ``ansible_winrm_transport`` 変数ã§è¨­å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:44 msgid "The following matrix is a high level overview of the options:" msgstr "以下ã®ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã¯ã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æ¦‚è¦ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:47 msgid "Option" msgstr "オプション" #: ../../rst/user_guide/windows_winrm.rst:47 msgid "Local Accounts" msgstr "ローカルアカウント" #: ../../rst/user_guide/windows_winrm.rst:47 msgid "Active Directory Accounts" msgstr "Active Directory アカウント" #: ../../rst/user_guide/windows_winrm.rst:47 msgid "Credential Delegation" msgstr "èªè¨¼æƒ…å ±ã®å§”è­²" #: ../../rst/user_guide/windows_winrm.rst:47 msgid "HTTP Encryption" msgstr "HTTP æš—å·åŒ–" #: ../../rst/user_guide/windows_winrm.rst:49 #: ../../rst/user_guide/windows_winrm.rst:61 msgid "Basic" msgstr "Basic" #: ../../rst/user_guide/windows_winrm.rst:49 #: ../../rst/user_guide/windows_winrm.rst:51 #: ../../rst/user_guide/windows_winrm.rst:53 #: ../../rst/user_guide/windows_winrm.rst:55 #: ../../rst/user_guide/windows_winrm.rst:57 msgid "Yes" msgstr "å¯" #: ../../rst/user_guide/windows_winrm.rst:49 #: ../../rst/user_guide/windows_winrm.rst:51 #: ../../rst/user_guide/windows_winrm.rst:53 #: ../../rst/user_guide/windows_winrm.rst:55 msgid "No" msgstr "ä¸å¯" #: ../../rst/user_guide/windows_winrm.rst:51 #: ../../rst/user_guide/windows_winrm.rst:82 msgid "Certificate" msgstr "証明書" #: ../../rst/user_guide/windows_winrm.rst:53 #: ../../rst/user_guide/windows_winrm.rst:268 msgid "Kerberos" msgstr "Kerberos" #: ../../rst/user_guide/windows_winrm.rst:55 #: ../../rst/user_guide/windows_winrm.rst:241 msgid "NTLM" msgstr "NTLM" #: ../../rst/user_guide/windows_winrm.rst:57 #: ../../rst/user_guide/windows_winrm.rst:456 msgid "CredSSP" msgstr "CredSSP" #: ../../rst/user_guide/windows_winrm.rst:62 msgid "Basic authentication is one of the simplest authentication options to use, but is also the most insecure. This is because the username and password are simply base64 encoded, and if a secure channel is not in use (eg, HTTPS) then it can be decoded by anyone. Basic authentication can only be used for local accounts (not domain accounts)." msgstr "Basic èªè¨¼ã¯ã€æœ€ã‚‚シンプルãªèªè¨¼æ–¹æ³•ã® 1 ã¤ã§ã™ãŒã€å®‰å…¨æ€§ãŒæœ€ã‚‚低ããªã‚Šã¾ã™ã€‚ã“れã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŠã‚ˆã³ãƒ‘スワードãŒå˜ç´”ã« Base64 エンコードã•れã¦ã„ã‚‹ãŸã‚ã§ã€å®‰å…¨ãªãƒãƒ£ãƒ³ãƒãƒ« (例: HTTPS) ãŒä½¿ç”¨ã•れã¦ã„ãªã„å ´åˆã¯ã€èª°ã§ã‚‚解読ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚Basic èªè¨¼ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã®ã¿ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (ドメインアカウントã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“)。" #: ../../rst/user_guide/windows_winrm.rst:67 msgid "The following example shows host vars configured for basic authentication:" msgstr "以下ã®ä¾‹ã¯ã€åŸºæœ¬èªè¨¼ã«è¨­å®šã•れã¦ã„るホスト変数を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:76 msgid "Basic authentication is not enabled by default on a Windows host but can be enabled by running the following in PowerShell::" msgstr "Basic èªè¨¼ã¯ã€Windows ホストã§ã¯ãƒ‡ãƒ•ォルトã§ã¯æœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“ãŒã€PowerShell ã§ä»¥ä¸‹ã‚’実行ã™ã‚‹ã“ã¨ã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:83 msgid "Certificate authentication uses certificates as keys similar to SSH key pairs, but the file format and key generation process is different." msgstr "証明書èªè¨¼ã¯ã€SSH キーペアã«ä¼¼ãŸéµã¨ã—ã¦è¨¼æ˜Žæ›¸ã‚’使用ã—ã¾ã™ãŒã€ãƒ•ァイル形å¼ã¨éµã®ç”Ÿæˆãƒ—ロセスã¯ç•°ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:86 msgid "The following example shows host vars configured for certificate authentication:" msgstr "以下ã®ä¾‹ã§ã¯ã€è¨¼æ˜Žæ›¸èªè¨¼ã«è¨­å®šã•れã¦ã„るホスト変数を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:95 msgid "Certificate authentication is not enabled by default on a Windows host but can be enabled by running the following in PowerShell::" msgstr "証明書èªè¨¼ã¯ã€Windows ホストã§ã¯ãƒ‡ãƒ•ォルトã§ã¯æœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“ãŒã€PowerShell ã§ä»¥ä¸‹ã‚’実行ã™ã‚‹ã“ã¨ã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:100 msgid "Encrypted private keys cannot be used as the urllib3 library that is used by Ansible for WinRM does not support this functionality." msgstr "WinRM å‘ã‘ã« Ansible ãŒä½¿ç”¨ã™ã‚‹ urllib3 ライブラリーãŒã“ã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãŸã‚ã€æš—å·åŒ–ã•れãŸç§˜å¯†éµã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:104 msgid "Generate a Certificate" msgstr "証明書ã®ç”Ÿæˆ" #: ../../rst/user_guide/windows_winrm.rst:105 msgid "A certificate must be generated before it can be mapped to a local user. This can be done using one of the following methods:" msgstr "証明書をローカルユーザーã«ãƒžãƒƒãƒ”ングã™ã‚‹å‰ã«ã€è¨¼æ˜Žæ›¸ã‚’生æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã®æ–¹æ³•ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:108 msgid "OpenSSL" msgstr "OpenSSL" #: ../../rst/user_guide/windows_winrm.rst:109 msgid "PowerShell, using the ``New-SelfSignedCertificate`` cmdlet" msgstr "``New-SelfSignedCertificate`` コマンドレットを使用ã—㟠PowerShell" #: ../../rst/user_guide/windows_winrm.rst:110 msgid "Active Directory Certificate Services" msgstr "Active Directory 証明書サービス" #: ../../rst/user_guide/windows_winrm.rst:112 msgid "Active Directory Certificate Services is beyond of scope in this documentation but may be the best option to use when running in a domain environment. For more information, see the `Active Directory Certificate Services documentation `_." msgstr "Active Directory Certificate Services ã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯å¯¾è±¡å¤–ã«ãªã‚Šã¾ã™ãŒã€ãƒ‰ãƒ¡ã‚¤ãƒ³ç’°å¢ƒã§å®Ÿè¡Œã™ã‚‹å ´åˆã«ã¯ã€æœ€é©ãªã‚ªãƒ—ションã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。詳細ã¯ã€`Active Directory Certificate Services ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:116 msgid "Using the PowerShell cmdlet ``New-SelfSignedCertificate`` to generate a certificate for authentication only works when being generated from a Windows 10 or Windows Server 2012 R2 host or later. OpenSSL is still required to extract the private key from the PFX certificate to a PEM file for Ansible to use." msgstr "PowerShell コマンドレット (``New-SelfSignedCertificate``) を使用ã—ã¦èªè¨¼ç”¨ã®è¨¼æ˜Žæ›¸ã‚’生æˆã™ã‚‹å ´åˆã¯ã€Windows 10 ã¾ãŸã¯ Windows Server 2012 R2 ホスト以é™ã‹ã‚‰ç”Ÿæˆã•れãŸå ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚PFX 証明書ã‹ã‚‰ Ansible ãŒä½¿ç”¨ã™ã‚‹ PEM ファイルã«ç§˜å¯†éµã‚’抽出ã™ã‚‹ã«ã¯ã€OpenSSL ãŒå¼•ãç¶šãå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:122 msgid "To generate a certificate with ``OpenSSL``:" msgstr "``OpenSSL`` ã§è¨¼æ˜Žæ›¸ã‚’生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:142 msgid "To generate a certificate with ``New-SelfSignedCertificate``:" msgstr "``New-SelfSignedCertificate`` ã§è¨¼æ˜Žæ›¸ã‚’生æˆã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:170 msgid "To convert the PFX file to a private key that pywinrm can use, run the following command with OpenSSL ``openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert_key.pem -passin pass: -passout pass:``" msgstr "PFX ファイルを pywinrm ãŒä½¿ç”¨ã§ãる秘密éµã«å¤‰æ›ã™ã‚‹ã«ã¯ã€OpenSSL ã§ ``openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert_key.pem -passin pass: -passout pass:`` コマンドを実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:175 msgid "Import a Certificate to the Certificate Store" msgstr "証明書ストアã¸ã®è¨¼æ˜Žæ›¸ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/windows_winrm.rst:176 msgid "Once a certificate has been generated, the issuing certificate needs to be imported into the ``Trusted Root Certificate Authorities`` of the ``LocalMachine`` store, and the client certificate public key must be present in the ``Trusted People`` folder of the ``LocalMachine`` store. For this example, both the issuing certificate and public key are the same." msgstr "証明書ãŒç”Ÿæˆã•れãŸã‚‰ã€ç™ºè¡Œã—ãŸè¨¼æ˜Žæ›¸ã‚’ ``LocalMachine`` ストア㮠``Trusted Root Certificate Authorities`` ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè¨¼æ˜Žæ›¸ã®å…¬é–‹éµã‚’ ``LocalMachine`` ストア㮠``Trusted People`` ディレクトリーã«å­˜åœ¨ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ç™ºè¡Œã—ãŸè¨¼æ˜Žæ›¸ã¨å…¬é–‹éµã®ä¸¡æ–¹ãŒåŒã˜ã‚‚ã®ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:182 msgid "Following example shows how to import the issuing certificate:" msgstr "以下ã®ä¾‹ã§ã¯ã€ç™ºè¡Œã—ãŸè¨¼æ˜Žæ›¸ã‚’インãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•を示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:197 msgid "If using ADCS to generate the certificate, then the issuing certificate will already be imported and this step can be skipped." msgstr "ADCS を使用ã—ã¦è¨¼æ˜Žæ›¸ã‚’生æˆã™ã‚‹å ´åˆã¯ã€ç™ºè¡Œã™ã‚‹è¨¼æ˜Žæ›¸ãŒã™ã§ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ãŸã‚ã€ã“ã®æ‰‹é †ã¯çœç•¥ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:200 msgid "The code to import the client certificate public key is:" msgstr "クライアント証明書ã®å…¬é–‹éµã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã‚³ãƒ¼ãƒ‰ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:216 msgid "Mapping a Certificate to an Account" msgstr "証明書ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¸ã®ãƒžãƒƒãƒ”ング" #: ../../rst/user_guide/windows_winrm.rst:217 msgid "Once the certificate has been imported, map it to the local user account::" msgstr "証明書をインãƒãƒ¼ãƒˆã—ãŸã‚‰ã€ã“れをローカルユーザーアカウントã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:236 msgid "Once this is complete, the hostvar ``ansible_winrm_cert_pem`` should be set to the path of the public key and the ``ansible_winrm_cert_key_pem`` variable should be set to the path of the private key." msgstr "ã“れãŒå®Œäº†ã—ãŸã‚‰ã€ãƒ›ã‚¹ãƒˆå¤‰æ•° ``ansible_winrm_cert_pem`` ã«å…¬é–‹éµã®ãƒ‘スを設定ã—ã€å¤‰æ•°``ansible_winrm_cert_key_pem`` ã«ç§˜å¯†éµã®ãƒ‘スを設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:242 msgid "NTLM is an older authentication mechanism used by Microsoft that can support both local and domain accounts. NTLM is enabled by default on the WinRM service, so no setup is required before using it." msgstr "NTLM ã¯ã€Microsoft ãŒä½¿ç”¨ã—ã¦ã„ã‚‹å¤ã„èªè¨¼ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã§ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä¸¡æ–¹ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚NTLM ã¯ã€WinRM サービスã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã‚‹ãŸã‚ã€ä½¿ç”¨ã™ã‚‹å‰ã«è¨­å®šã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:246 msgid "NTLM is the easiest authentication protocol to use and is more secure than ``Basic`` authentication. If running in a domain environment, ``Kerberos`` should be used instead of NTLM." msgstr "NTLM ã¯æœ€ã‚‚ç°¡å˜ã«ä½¿ç”¨ã§ãã‚‹èªè¨¼ãƒ—ロトコルã§ã‚りã€``Basic`` èªè¨¼ã‚ˆã‚Šã‚‚安全ã§ã™ã€‚ドメイン環境ã§ç¨¼åƒã—ã¦ã„ã‚‹å ´åˆã¯ã€NTLM ã®ä»£ã‚り㫠``Kerberos`` を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:250 msgid "Kerberos has several advantages over using NTLM:" msgstr "Kerberos 㯠NTLM ã®ä½¿ç”¨ã¨æ¯”較ã—ã¦ã€ä»¥ä¸‹ã®ã‚ˆã†ãªåˆ©ç‚¹ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:252 msgid "NTLM is an older protocol and does not support newer encryption protocols." msgstr "NTLM ã¯å¤ã„プロトコルã§ã‚ã‚Šã€æ–°ã—ã„æš—å·åŒ–プロトコルをサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:254 msgid "NTLM is slower to authenticate because it requires more round trips to the host in the authentication stage." msgstr "NTLM ã¯ã€èªè¨¼ã®æ®µéšŽã§ãƒ›ã‚¹ãƒˆã¸ã®ãƒ©ã‚¦ãƒ³ãƒ‰ãƒˆãƒªãƒƒãƒ—ãŒå¤šããªã‚‹ãŸã‚ã€èªè¨¼ã«æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:256 msgid "Unlike Kerberos, NTLM does not allow credential delegation." msgstr "Kerberos ã¨ã¯ç•°ãªã‚Šã€NTLM ã¯èªè¨¼æƒ…å ±ã®å§”譲を許å¯ã—ã¦ã„ã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:258 msgid "This example shows host variables configured to use NTLM authentication:" msgstr "以下ã®ä¾‹ã§ã¯ã€NTLM èªè¨¼ã‚’使用ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„るホスト変数を示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:269 msgid "Kerberos is the recommended authentication option to use when running in a domain environment. Kerberos supports features like credential delegation and message encryption over HTTP and is one of the more secure options that is available through WinRM." msgstr "Kerberos ã¯ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ç’°å¢ƒã§å®Ÿè¡Œã™ã‚‹å ´åˆã«ä½¿ç”¨ã™ã‚‹æŽ¨å¥¨ã®èªè¨¼ã‚ªãƒ—ションã§ã™ã€‚Kerberos ã¯ã€èªè¨¼æƒ…å ±ã®å§”譲や HTTP ã§ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ãªã©ã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã—ã¦ãŠã‚Šã€WinRM ã§åˆ©ç”¨ã§ãるより安全ãªã‚ªãƒ—ション㮠1 ã¤ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:274 msgid "Kerberos requires some additional setup work on the Ansible host before it can be used properly." msgstr "Kerberos ã‚’æ­£ã—ã使用ã™ã‚‹ã«ã¯ã€Ansible ホスト上ã§ã„ãã¤ã‹ã®è¿½åŠ è¨­å®šä½œæ¥­ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:277 msgid "The following example shows host vars configured for Kerberos authentication:" msgstr "以下ã®ä¾‹ã¯ã€Kerberos èªè¨¼ã«è¨­å®šã•れãŸãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’示ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:287 msgid "As of Ansible version 2.3, the Kerberos ticket will be created based on ``ansible_user`` and ``ansible_password``. If running on an older version of Ansible or when ``ansible_winrm_kinit_mode`` is ``manual``, a Kerberos ticket must already be obtained. See below for more details." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.3 以é™ã§ã¯ã€``ansible_user`` 㨠``ansible_password`` ã«åŸºã¥ã„㦠Kerberos ãƒã‚±ãƒƒãƒˆãŒä½œæˆã•れã¾ã™ã€‚å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§å®Ÿè¡Œã—ã¦ã„ã‚‹å ´åˆã‚„ã€``ansible_winrm_kinit_mode`` ㌠``manual`` ã®å ´åˆã¯ã€ã™ã§ã« Kerberos ãƒã‚±ãƒƒãƒˆã‚’å–å¾—ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚詳細ã¯ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:292 msgid "There are some extra host variables that can be set::" msgstr "設定å¯èƒ½ãªè¿½åŠ ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:301 msgid "Installing the Kerberos Library" msgstr "Kerberos ライブラリーã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_winrm.rst:302 msgid "Some system dependencies that must be installed prior to using Kerberos. The script below lists the dependencies based on the distro:" msgstr "Kerberos を使用ã™ã‚‹å‰ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚るシステムä¾å­˜é–¢ä¿‚ãŒã‚りã¾ã™ã€‚以下ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã«åŸºã¥ãä¾å­˜é–¢ä¿‚を一覧表示ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:328 msgid "Once the dependencies have been installed, the ``python-kerberos`` wrapper can be install using ``pip``:" msgstr "ä¾å­˜é–¢ä¿‚ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚‰ã€``pip`` を使用ã—㦠``python-kerberos`` ラッパーをインストールã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:337 msgid "While Ansible has supported Kerberos auth through ``pywinrm`` for some time, optional features or more secure options may only be available in newer versions of the ``pywinrm`` and/or ``pykerberos`` libraries. It is recommended you upgrade each version to the latest available to resolve any warnings or errors. This can be done through tools like ``pip`` or a system package manager like ``dnf``, ``yum``, ``apt`` but the package names and versions available may differ between tools." msgstr "Ansible ã¯ã“れã¾ã§ã€``pywinrm`` を通ã˜ã¦ Kerberos èªè¨¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ãã¾ã—ãŸãŒã€ã‚ªãƒ—ション機能やより安全ãªã‚ªãƒ—ションã¯ã€``pywinrm`` ライブラリーã¾ãŸã¯ ``pykerberos`` ãƒ©ã‚¤ãƒ–ãƒ©ãƒªãƒ¼ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã®ã¿åˆ©ç”¨ã§ãã‚‹å ´åˆãŒã‚りã¾ã™ã€‚警告やエラーãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’最新ã®ã‚‚ã®ã«ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“ã®ä½œæ¥­ã¯ã€``pip`` ã®ã‚ˆã†ãªãƒ„ールやã€``dnf``ã€``yum``ã€``apt`` ã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ãŒã€ãƒ‘ッケージåや利用å¯èƒ½ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ãƒ„ールã«ã‚ˆã£ã¦ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:347 msgid "Configuring Host Kerberos" msgstr "ホスト Kerberos ã®è¨­å®š" #: ../../rst/user_guide/windows_winrm.rst:348 msgid "Once the dependencies have been installed, Kerberos needs to be configured so that it can communicate with a domain. This configuration is done through the ``/etc/krb5.conf`` file, which is installed with the packages in the script above." msgstr "ä¾å­˜é–¢ä¿‚ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸã‚‰ã€Kerberos ãŒãƒ‰ãƒ¡ã‚¤ãƒ³ã¨é€šä¿¡ã§ãるよã†ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€ä¸Šã®ã‚¹ã‚¯ãƒªãƒ—トã§ãƒ‘ッケージã¨ä¸€ç·’ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れ㟠``/etc/krb5.conf`` ファイルを通ã˜ã¦è¡Œã‚れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:352 msgid "To configure Kerberos, in the section that starts with:" msgstr "Kerberos を設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã§å§‹ã¾ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§è¡Œã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:358 msgid "Add the full domain name and the fully qualified domain names of the primary and secondary Active Directory domain controllers. It should look something like this:" msgstr "プライマリーãŠã‚ˆã³ã‚»ã‚«ãƒ³ãƒ€ãƒªãƒ¼ã® Active Directory ドメインコントローラーã®å®Œå…¨ãƒ‰ãƒ¡ã‚¤ãƒ³åãŠã‚ˆã³å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åを追加ã—ã¾ã™ã€‚以下ã®ã‚ˆã†ã«ãªã‚‹ã¯ãšã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:370 msgid "In the section that starts with:" msgstr "以下ã§å§‹ã¾ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã€" #: ../../rst/user_guide/windows_winrm.rst:376 msgid "Add a line like the following for each domain that Ansible needs access for:" msgstr "Ansible ãŒã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å¿…è¦ã®ã‚ã‚‹å„ドメインã«ä»¥ä¸‹ã®ã‚ˆã†ãªè¡Œã‚’追加ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:383 msgid "You can configure other settings in this file such as the default domain. See `krb5.conf `_ for more details." msgstr "ã“ã®ãƒ•ァイルã§ã¯ã€ãƒ‡ãƒ•ォルトã®ãƒ‰ãƒ¡ã‚¤ãƒ³ãªã©ã€ãã®ä»–ã®è¨­å®šã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚詳細㯠`krb5.conf `_ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:388 msgid "Automatic Kerberos Ticket Management" msgstr "Kerberos ãƒã‚±ãƒƒãƒˆã®è‡ªå‹•管ç†" #: ../../rst/user_guide/windows_winrm.rst:389 msgid "Ansible version 2.3 and later defaults to automatically managing Kerberos tickets when both ``ansible_user`` and ``ansible_password`` are specified for a host. In this process, a new ticket is created in a temporary credential cache for each host. This is done before each task executes to minimize the chance of ticket expiration. The temporary credential caches are deleted after each task completes and will not interfere with the default credential cache." msgstr "Ansible ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.3 以é™ã§ã¯ã€ãƒ›ã‚¹ãƒˆã« ``ansible_user`` ãŠã‚ˆã³ ``ansible_password`` ã®ä¸¡æ–¹ãŒæŒ‡å®šã•れãŸå ´åˆã¯ã€ãƒ‡ãƒ•ォルト㧠Kerberos ãƒã‚±ãƒƒãƒˆã‚’自動的ã«ç®¡ç†ã—ã¾ã™ã€‚ã“ã®ãƒ—ロセスã§ã¯ã€å„ホストã®ä¸€æ™‚çš„ãªèªè¨¼æƒ…å ±ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã«æ–°ã—ã„ãƒã‚±ãƒƒãƒˆãŒä½œæˆã•れã¾ã™ã€‚ã“れã¯ã€ãƒã‚±ãƒƒãƒˆãŒå¤±åйã™ã‚‹å¯èƒ½æ€§ã‚’最å°é™ã«ã™ã‚‹ãŸã‚ã«ã€å„タスクãŒå®Ÿè¡Œã•れるå‰ã«è¡Œã‚れã¾ã™ã€‚一時的ãªèªè¨¼æƒ…報キャッシュã¯ã€å„タスクãŒå®Œäº†ã™ã‚‹ã¨å‰Šé™¤ã•れã€ãƒ‡ãƒ•ォルトã®èªè¨¼æƒ…報キャッシュã«å¹²æ¸‰ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:396 msgid "To disable automatic ticket management, set ``ansible_winrm_kinit_mode=manual`` via the inventory." msgstr "ãƒã‚±ãƒƒãƒˆã®è‡ªå‹•管ç†ã‚’無効ã«ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã‹ã‚‰ ``ansible_winrm_kinit_mode=manual`` を設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:399 msgid "Automatic ticket management requires a standard ``kinit`` binary on the control host system path. To specify a different location or binary name, set the ``ansible_winrm_kinit_cmd`` hostvar to the fully qualified path to a MIT krbv5 ``kinit``-compatible binary." msgstr "自動ãƒã‚±ãƒƒãƒˆç®¡ç†ã«ã¯ã€åˆ¶å¾¡ãƒ›ã‚¹ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ãƒ‘ã‚¹ã«æ¨™æº–ã® ``kinit`` ãƒã‚¤ãƒŠãƒªãƒ¼ãŒå¿…è¦ã§ã™ã€‚別ã®å ´æ‰€ã‚„ãƒã‚¤ãƒŠãƒªãƒ¼åを指定ã™ã‚‹ã«ã¯ã€ãƒ›ã‚¹ãƒˆå¤‰æ•° ``ansible_winrm_kinit_cmd`` ã« MIT krbv5 ``kinit`` 互æ›ãƒã‚¤ãƒŠãƒªãƒ¼ã¸ã®å®Œå…¨ä¿®é£¾ãƒ‘スを設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:405 msgid "Manual Kerberos Ticket Management" msgstr "Kerberos ãƒã‚±ãƒƒãƒˆã®æ‰‹å‹•管ç†" #: ../../rst/user_guide/windows_winrm.rst:406 msgid "To manually manage Kerberos tickets, the ``kinit`` binary is used. To obtain a new ticket the following command is used:" msgstr "Kerberos ãƒã‚±ãƒƒãƒˆã‚’手動ã§ç®¡ç†ã™ã‚‹ã«ã¯ã€``kinit`` ãƒã‚¤ãƒŠãƒªãƒ¼ã‚’使用ã—ã¾ã™ã€‚æ–°ã—ã„ãƒã‚±ãƒƒãƒˆã‚’å–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:413 msgid "The domain must match the configured Kerberos realm exactly, and must be in upper case." msgstr "ドメインã¯è¨­å®šã•れ㟠Kerberos レルムã«å®Œå…¨ã«ä¸€è‡´ã—ã€å¤§æ–‡å­—ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:415 msgid "To see what tickets (if any) have been acquired, use the following command:" msgstr "å–å¾—ã—ãŸãƒã‚±ãƒƒãƒˆ (存在ã™ã‚‹å ´åˆ) を確èªã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:421 msgid "To destroy all the tickets that have been acquired, use the following command:" msgstr "å–å¾—ã—ãŸã™ã¹ã¦ã®ãƒã‚±ãƒƒãƒˆã‚’破棄ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:428 msgid "Troubleshooting Kerberos" msgstr "Kerberos ã®ãƒˆãƒ©ãƒ–ルシューティング" #: ../../rst/user_guide/windows_winrm.rst:429 msgid "Kerberos is reliant on a properly-configured environment to work. To troubleshoot Kerberos issues, ensure that:" msgstr "Kerberos ã¯ã€é©åˆ‡ã«æ§‹æˆã•れãŸç’°å¢ƒã§ãªã‘れã°å‹•作ã—ã¾ã›ã‚“。Kerberos ã®å•題をトラブルシューティングã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:432 msgid "The hostname set for the Windows host is the FQDN and not an IP address." msgstr "Windows ホストã®ãƒ›ã‚¹ãƒˆåã«ã¯ã€IP アドレスã§ã¯ãªã FQDN ã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:434 msgid "The forward and reverse DNS lookups are working properly in the domain. To test this, ping the windows host by name and then use the ip address returned with ``nslookup``. The same name should be returned when using ``nslookup`` on the IP address." msgstr "ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã§ã¯ã€DNS ã®æ­£å¼•ãã¨é€†å¼•ããŒæ­£å¸¸ã«å‹•作ã—ã¦ã„ã¾ã™ã€‚ã“れをテストã™ã‚‹ã«ã¯ã€Windows ホストã«åå‰ã§ ping を打ã¡ã€``nslookup`` ã§è¿”ã•れ㟠IP アドレスを使用ã—ã¾ã™ã€‚IP アドレス㫠``nslookup`` を使用ã™ã‚‹ã¨ã€åŒã˜åå‰ãŒè¿”ã•れるã¯ãšã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:439 msgid "The Ansible host's clock is synchronized with the domain controller. Kerberos is time sensitive, and a little clock drift can cause the ticket generation process to fail." msgstr "Ansible ãƒ›ã‚¹ãƒˆã®æ™‚計ã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¨åŒæœŸã—ã¾ã™ã€‚Kerberos ã¯æ™‚é–“ã«æ•感ã§ã€ã‚ãšã‹ãªæ™‚計ã®ãšã‚Œã«ã‚ˆã‚Šã€ãƒã‚±ãƒƒãƒˆç”Ÿæˆãƒ—ロセスãŒå¤±æ•—ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:443 msgid "Ensure that the fully qualified domain name for the domain is configured in the ``krb5.conf`` file. To check this, run::" msgstr "ドメインã®å®Œå…¨ä¿®é£¾ãƒ‰ãƒ¡ã‚¤ãƒ³åãŒã€``krb5.conf`` ファイルã«è¨­å®šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。ã“れを確èªã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:449 msgid "If the domain name returned by ``klist`` is different from the one requested, an alias is being used. The ``krb5.conf`` file needs to be updated so that the fully qualified domain name is used and not an alias." msgstr "``klist`` ã§è¿”ã•れãŸãƒ‰ãƒ¡ã‚¤ãƒ³åãŒè¦æ±‚ã•れãŸã‚‚ã®ã¨ç•°ãªã‚‹å ´åˆã¯ã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚``krb5.conf`` ファイルを更新ã—ã¦ã€ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã¯ãªã完全修飾ドメインåを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:453 msgid "If the default kerberos tooling has been replaced or modified (some IdM solutions may do this), this may cause issues when installing or upgrading the Python Kerberos library. As of the time of this writing, this library is called ``pykerberos`` and is known to work with both MIT and Heimdal Kerberos libraries. To resolve ``pykerberos`` installation issues, ensure the system dependencies for Kerberos have been met (see: `Installing the Kerberos Library`_), remove any custom Kerberos tooling paths from the PATH environment variable, and retry the installation of Python Kerberos library package." msgstr "デフォルト㮠kerberos ツールãŒç½®ãæ›ãˆã‚‰ã‚ŒãŸã‚Šå¤‰æ›´ã—ãŸã‚Šã—ãŸå ´åˆ (ã„ãã¤ã‹ã® IdM ソリューションã§ã¯ãã†ãªã£ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“)ã€Python Kerberos ライブラリーをインストールã—ãŸã‚Šã‚¢ãƒƒãƒ—グレードã—ãŸã‚Šã™ã‚‹éš›ã«å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚本ガイドã®ä½œæˆæ™‚点ã§ã€ã“ã®ãƒ©ã‚¤ãƒ–ラリー㯠``pykerberos`` ã¨å‘¼ã°ã‚Œã€MIT 㨠Heimdal Kerberos ライブラリーã®ä¸¡æ–¹ã§å‹•作ã™ã‚‹ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚``pykerberos`` ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«å•題を解決ã™ã‚‹ã«ã¯ã€Kerberos ã®ã‚·ã‚¹ãƒ†ãƒ ä¾å­˜æ€§ãŒæº€ãŸã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã— (å‚ç…§: `Installing the Kerberos Library`_)ã€PATH 環境変数ã‹ã‚‰ã‚«ã‚¹ã‚¿ãƒ ã® Kerberos ツールパスを削除ã—ã€Python Kerberos ライブラリーパッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’å†è©¦è¡Œã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:457 msgid "CredSSP authentication is a newer authentication protocol that allows credential delegation. This is achieved by encrypting the username and password after authentication has succeeded and sending that to the server using the CredSSP protocol." msgstr "CredSSP èªè¨¼ã¯ã€èªè¨¼æƒ…å ±ã®å§”譲をå¯èƒ½ã«ã™ã‚‹æ–°ã—ã„èªè¨¼ãƒ—ロトコルã«ãªã‚Šã¾ã™ã€‚ã“れã¯ã€èªè¨¼ãŒæˆåŠŸã—ãŸå¾Œã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードを暗å·åŒ–ã—ã€ãれを CredSSP プロトコルを使用ã—ã¦ã‚µãƒ¼ãƒãƒ¼ã«é€ä¿¡ã™ã‚‹ã“ã¨ã§å®Ÿç¾ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:462 msgid "Because the username and password are sent to the server to be used for double hop authentication, ensure that the hosts that the Windows host communicates with are not compromised and are trusted." msgstr "ユーザーåã¨ãƒ‘スワードをサーãƒãƒ¼ã«é€ä¿¡ã—ã¦ãƒ€ãƒ–ルホップèªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã€Windows ホストãŒé€šä¿¡ã™ã‚‹ãƒ›ã‚¹ãƒˆãŒæ¼æ´©ã—ã¦ãŠã‚‰ãšã€ä¿¡é ¼ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:466 msgid "CredSSP can be used for both local and domain accounts and also supports message encryption over HTTP." msgstr "CredSSP ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä¸¡æ–¹ã«ä½¿ç”¨ã§ãã€HTTPã§ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ã«ã‚‚対応ã—ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:469 msgid "To use CredSSP authentication, the host vars are configured like so:" msgstr "CredSSP èªè¨¼ã‚’使用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãƒ›ã‚¹ãƒˆå¤‰æ•°ã‚’設定ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:478 msgid "There are some extra host variables that can be set as shown below::" msgstr "以下ã®ã‚ˆã†ã«è¨­å®šã§ãる追加ã®ãƒ›ã‚¹ãƒˆå¤‰æ•°ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:482 msgid "CredSSP authentication is not enabled by default on a Windows host, but can be enabled by running the following in PowerShell:" msgstr "CredSSP èªè¨¼ã¯ã€Windows ホストã§ã¯ãƒ‡ãƒ•ォルトã§ã¯æœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“ãŒã€PowerShell ã§ä»¥ä¸‹ã‚’実行ã™ã‚‹ã“ã¨ã§æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:490 msgid "Installing CredSSP Library" msgstr "CredSSP ライブラリーã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" #: ../../rst/user_guide/windows_winrm.rst:492 msgid "The ``requests-credssp`` wrapper can be installed using ``pip``:" msgstr "``requests-credssp`` ラッパーã¯ã€``pip`` を使用ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:499 msgid "CredSSP and TLS 1.2" msgstr "CredSSP ãŠã‚ˆã³ TLS 1.2" #: ../../rst/user_guide/windows_winrm.rst:500 msgid "By default the ``requests-credssp`` library is configured to authenticate over the TLS 1.2 protocol. TLS 1.2 is installed and enabled by default for Windows Server 2012 and Windows 8 and more recent releases." msgstr "デフォルトã§ã¯ã€``requests-credssp`` ライブラリーã¯ã€TLS 1.2 プロトコルã§èªè¨¼ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚TLS 1.2 ã¯ã€Windows Server 2012 ãŠã‚ˆã³ Windows 8 ã¨ã€ãれ以é™ã®ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€ãƒ‡ãƒ•ォルトã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã€æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:504 msgid "There are two ways that older hosts can be used with CredSSP:" msgstr "å¤ã„ホストを CredSSP ã§ä½¿ç”¨ã§ãる方法㯠2 ã¤ã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:506 msgid "Install and enable a hotfix to enable TLS 1.2 support (recommended for Server 2008 R2 and Windows 7)." msgstr "TLS 1.2 ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹ Hotfix をインストールã—ã¦æœ‰åйã«ã—ã¦ãã ã•ã„ (Server 2008 R2 ãŠã‚ˆã³ Windows 7 ã§æŽ¨å¥¨)。" #: ../../rst/user_guide/windows_winrm.rst:509 msgid "Set ``ansible_winrm_credssp_disable_tlsv1_2=True`` in the inventory to run over TLS 1.0. This is the only option when connecting to Windows Server 2008, which has no way of supporting TLS 1.2" msgstr "インベントリー㫠``ansible_winrm_credssp_disable_tlsv1_2=True`` を設定ã—ã¦ã€TLS 1.0 ã§å®Ÿè¡Œã™ã‚‹ã‚ˆã†ã«è¨­å®šã—ã¾ã™ã€‚ã“れã¯ã€TLS 1.2 ã«å¯¾å¿œã—ã¦ã„ãªã„ Windows Server 2008 ã«æŽ¥ç¶šã™ã‚‹éš›ã®å”¯ä¸€ã®é¸æŠžè‚¢ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:513 msgid "See :ref:`winrm_tls12` for more information on how to enable TLS 1.2 on the Windows host." msgstr "Windows ホスト㧠TLS 1.2 を有効ã«ã™ã‚‹æ–¹æ³•ã¯ã€ã€Œ:ref:`winrm_tls12`ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:517 msgid "Set CredSSP Certificate" msgstr "CredSSP 証明書ã®è¨­å®š" #: ../../rst/user_guide/windows_winrm.rst:518 msgid "CredSSP works by encrypting the credentials through the TLS protocol and uses a self-signed certificate by default. The ``CertificateThumbprint`` option under the WinRM service configuration can be used to specify the thumbprint of another certificate." msgstr "CredSSP ã¯ã€TLS プロトコルã§èªè¨¼æƒ…報を暗å·åŒ–ã—ã¦å‹•作ã—ã€ãƒ‡ãƒ•ォルトã§ã¯è‡ªå·±ç½²å証明書を使用ã—ã¾ã™ã€‚WinRM サービス構æˆã® ``CertificateThumbprint`` オプションを使用ã—ã¦ã€åˆ¥ã®è¨¼æ˜Žæ›¸ã®ã‚µãƒ ãƒ—リントを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:521 msgid "This certificate configuration is independent of the WinRM listener certificate. With CredSSP, message transport still occurs over the WinRM listener, but the TLS-encrypted messages inside the channel use the service-level certificate." msgstr "ã“ã®è¨¼æ˜Žæ›¸æ§‹æˆã¯ã€WinRM リスナーã®è¨¼æ˜Žæ›¸ã¨ã¯ç‹¬ç«‹ã—ã¦ã„ã¾ã™ã€‚CredSSP ã§ã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã¯å¼•ãç¶šã WinRM リスナーを介ã—ã¦è¡Œã‚れã¾ã™ãŒã€ãƒãƒ£ãƒ³ãƒãƒ«å†…ã® TLS æš—å·åŒ–メッセージã«ã¯ã‚µãƒ¼ãƒ“スレベル証明書ãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:525 msgid "To explicitly set the certificate to use for CredSSP::" msgstr "CredSSP ã«ä½¿ç”¨ã™ã‚‹è¨¼æ˜Žæ›¸ã‚’明示的ã«è¨­å®šã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:535 msgid "Non-Administrator Accounts" msgstr "管ç†è€…以外ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ" #: ../../rst/user_guide/windows_winrm.rst:536 msgid "WinRM is configured by default to only allow connections from accounts in the local ``Administrators`` group. This can be changed by running:" msgstr "WinRM ã¯ã€ãƒ‡ãƒ•ォルトã§ã€ãƒ­ãƒ¼ã‚«ãƒ«ã® ``Administrators`` グループã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰ã®æŽ¥ç¶šã®ã¿ã‚’許å¯ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚ã“れã¯ã€ä»¥ä¸‹ã‚’実行ã—ã¦å¤‰æ›´ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:543 msgid "This will display an ACL editor, where new users or groups may be added. To run commands over WinRM, users and groups must have at least the ``Read`` and ``Execute`` permissions enabled." msgstr "ã“れã«ã‚ˆã‚Šã€ACL エディターãŒè¡¨ç¤ºã•ã‚Œã€æ–°ã—ã„ユーザーã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—を追加ã§ãã¾ã™ã€‚WinRM ã§ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—ã«å°‘ãªãã¨ã‚‚ ``Read`` ãŠã‚ˆã³ ``Execute`` ãƒ‘ãƒ¼ãƒŸãƒƒã‚·ãƒ§ãƒ³ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:547 msgid "While non-administrative accounts can be used with WinRM, most typical server administration tasks require some level of administrative access, so the utility is usually limited." msgstr "WinRM ã§ã¯ã€ç®¡ç†è€…以外ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ä¸€èˆ¬çš„ãªã‚µãƒ¼ãƒãƒ¼ç®¡ç†ä½œæ¥­ã§ã¯ã€ã‚る程度ã®ç®¡ç†è€…権é™ãŒå¿…è¦ã¨ãªã‚‹ãŸã‚ã€å®Ÿç”¨æ€§ã¯é™ã‚‰ã‚Œã¦ã—ã¾ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:551 msgid "WinRM Encryption" msgstr "WinRM æš—å·åŒ–" #: ../../rst/user_guide/windows_winrm.rst:552 msgid "By default WinRM will fail to work when running over an unencrypted channel. The WinRM protocol considers the channel to be encrypted if using TLS over HTTP (HTTPS) or using message level encryption. Using WinRM with TLS is the recommended option as it works with all authentication options, but requires a certificate to be created and used on the WinRM listener." msgstr "デフォルトã§ã¯ã€WinRM ã¯ã€æš—å·åŒ–ã•れã¦ã„ãªã„ãƒãƒ£ãƒ³ãƒãƒ«ä¸Šã§å®Ÿè¡Œã™ã‚‹ã¨ã€å‹•作ã«å¤±æ•—ã—ã¾ã™ã€‚WinRM プロトコルã¯ã€TLS over HTTP (HTTPS) を使用ã—ã¦ã„ã‚‹å ´åˆã‚„ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒãƒ£ãƒ³ãƒãƒ«ãŒæš—å·åŒ–ã•れã¦ã„ã‚‹ã¨ã¿ãªã—ã¾ã™ã€‚WinRM ã‚’ TLS ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã€ã™ã¹ã¦ã®èªè¨¼ã‚ªãƒ—ションã§å‹•作ã™ã‚‹ãŸã‚ã€æŽ¨å¥¨ã•れるオプションã§ã™ãŒã€WinRM リスナーã§è¨¼æ˜Žæ›¸ã‚’作æˆã—ã¦ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:558 msgid "The ``ConfigureRemotingForAnsible.ps1`` creates a self-signed certificate and creates the listener with that certificate. If in a domain environment, ADCS can also create a certificate for the host that is issued by the domain itself." msgstr "``ConfigureRemotingForAnsible.ps1`` ã¯ã€è‡ªå·±ç½²å証明書を作æˆã—ã€ãã®è¨¼æ˜Žæ›¸ã§ãƒªã‚¹ãƒŠãƒ¼ã‚’作æˆã—ã¾ã™ã€‚ドメイン環境ã§ã‚れã°ã€ADCS ã¯ãƒ‰ãƒ¡ã‚¤ãƒ³è‡ªä½“ãŒç™ºè¡Œã™ã‚‹ãƒ›ã‚¹ãƒˆç”¨ã®è¨¼æ˜Žæ›¸ã‚’作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:562 msgid "If using HTTPS is not an option, then HTTP can be used when the authentication option is ``NTLM``, ``Kerberos`` or ``CredSSP``. These protocols will encrypt the WinRM payload with their own encryption method before sending it to the server. The message-level encryption is not used when running over HTTPS because the encryption uses the more secure TLS protocol instead. If both transport and message encryption is required, set ``ansible_winrm_message_encryption=always`` in the host vars." msgstr "HTTPS を使用ã™ã‚‹ã“ã¨ãŒã§ããªã„å ´åˆã¯ã€èªè¨¼ã‚ªãƒ—ション㌠``NTLM``ã€``Kerberos``ã€ã¾ãŸã¯ ``CredSSP`` ã§ã‚れã°ã€HTTP を使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ãƒ—ロトコルã¯ã€WinRM ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‚’ç‹¬è‡ªã®æš—å·åŒ–æ–¹å¼ã§æš—å·åŒ–ã—ã¦ã‹ã‚‰ã‚µãƒ¼ãƒãƒ¼ã«é€ä¿¡ã—ã¾ã™ã€‚æš—å·åŒ–ã¯ã€ã‚ˆã‚Šå®‰å…¨ãª TLS プロトコルを代ã‚りã«ä½¿ç”¨ã™ã‚‹ãŸã‚ã€HTTPS ã§å®Ÿè¡Œã™ã‚‹å ´åˆã«ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒ¬ãƒ™ãƒ«ã®æš—å·åŒ–ã¯ä½¿ç”¨ã•れã¾ã›ã‚“。トランスãƒãƒ¼ãƒˆã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ä¸¡æ–¹ã®æš—å·åŒ–ãŒå¿…è¦ãªå ´åˆã¯ã€ãƒ›ã‚¹ãƒˆå¤‰æ•°ã« ``ansible_winrm_message_encryption=always`` を設定ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:570 msgid "Message encryption over HTTP requires pywinrm>=0.3.0." msgstr "HTTPã§ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ã«ã¯ 0.3.0 以上㮠pywinrm ãŒå¿…è¦ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:572 msgid "A last resort is to disable the encryption requirement on the Windows host. This should only be used for development and debugging purposes, as anything sent from Ansible can be viewed, manipulated and also the remote session can completely be taken over by anyone on the same network. To disable the encryption requirement::" msgstr "æœ€å¾Œã®æ‰‹æ®µã¨ã—ã¦ã€Windows ãƒ›ã‚¹ãƒˆã®æš—å·åŒ–è¦ä»¶ã‚’無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€Ansible ã‹ã‚‰é€ä¿¡ã•れãŸã‚‚ã®ã¯ã™ã¹ã¦é–²è¦§ã€æ“作ã§ãã€ã¾ãŸåŒã˜ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®èª°ã‚‚ãŒãƒªãƒ¢ãƒ¼ãƒˆã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’完全ã«ä¹—ã£å–ã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€é–‹ç™ºã‚„デãƒãƒƒã‚°ã®ç›®çš„ã§ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。暗å·åŒ–を無効ã«ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã«å¾“ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:580 msgid "Do not disable the encryption check unless it is absolutely required. Doing so could allow sensitive information like credentials and files to be intercepted by others on the network." msgstr "ã©ã†ã—ã¦ã‚‚å¿…è¦ãªå ´åˆã‚’除ãã€æš—å·åŒ–ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã—ãªã„ã§ãã ã•ã„。暗å·åŒ–ãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã™ã‚‹ã¨ã€èªè¨¼æƒ…報やファイルãªã©ã®æ©Ÿå¯†æƒ…å ±ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã®ä»–ã®äººã«å‚å—ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:585 msgid "Inventory Options" msgstr "インベントリーオプション" #: ../../rst/user_guide/windows_winrm.rst:586 msgid "Ansible's Windows support relies on a few standard variables to indicate the username, password, and connection type of the remote hosts. These variables are most easily set up in the inventory, but can be set on the ``host_vars``/ ``group_vars`` level." msgstr "Ansible ã® Windows サãƒãƒ¼ãƒˆã¯ã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã€ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã€æŽ¥ç¶šã‚¿ã‚¤ãƒ—ã‚’ç¤ºã™ã„ãã¤ã‹ã®æ¨™æº–変数ã«ä¾å­˜ã—ã¦ã„ã¾ã™ã€‚ã“れらã®å¤‰æ•°ã¯ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§æœ€ã‚‚ç°¡å˜ã«è¨­å®šã§ãã¾ã™ãŒã€``host_vars``/``group_vars`` レベルã§è¨­å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:591 msgid "When setting up the inventory, the following variables are required:" msgstr "インベントリーを設定ã™ã‚‹éš›ã«ã€ä»¥ä¸‹ã®å¤‰æ•°ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:606 msgid "Using the variables above, Ansible will connect to the Windows host with Basic authentication through HTTPS. If ``ansible_user`` has a UPN value like ``username@MY.DOMAIN.COM`` then the authentication option will automatically attempt to use Kerberos unless ``ansible_winrm_transport`` has been set to something other than ``kerberos``." msgstr "上記ã®å¤‰æ•°ã‚’使用ã™ã‚‹ã¨ã€Ansible 㯠HTTPS を通ã˜ã¦ Basic èªè¨¼ã§ Windows ãƒ›ã‚¹ãƒˆã«æŽ¥ç¶šã—ã¾ã™ã€‚``ansible_user`` ã« ``username@MY.DOMAIN.COM`` ã®ã‚ˆã†ãª UPN 値ãŒã‚ã‚‹å ´åˆã¯ã€``ansible_winrm_transport`` ㌠``kerberos`` 以外ã«è¨­å®šã•れã¦ã„ãªã„é™ã‚Šã€èªè¨¼ã‚ªãƒ—ションã¯è‡ªå‹•的㫠Kerberos ã®ä½¿ç”¨ã‚’試ã¿ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:612 msgid "The following custom inventory variables are also supported for additional configuration of WinRM connections:" msgstr "以下ã®ã‚«ã‚¹ã‚¿ãƒ ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼å¤‰æ•°ã‚‚ã€WinRM 接続ã®è¿½åŠ è¨­å®šã®ãŸã‚ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:615 msgid "``ansible_port``: The port WinRM will run over, HTTPS is ``5986`` which is the default while HTTP is ``5985``" msgstr "``ansible_port``: WinRM ãŒå®Ÿè¡Œã™ã‚‹ãƒãƒ¼ãƒˆã§ã™ã€‚HTTPS ã®ãƒ‡ãƒ•ォルト㯠``5986`` ã§ã€HTTP ã®ãƒ‡ãƒ•ォルト㯠``5985`` ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:618 msgid "``ansible_winrm_scheme``: Specify the connection scheme (``http`` or ``https``) to use for the WinRM connection. Ansible uses ``https`` by default unless ``ansible_port`` is ``5985``" msgstr "``ansible_winrm_scheme``: WinRM 接続ã«ä½¿ç”¨ã™ã‚‹æŽ¥ç¶šã‚¹ã‚­ãƒ¼ãƒ  (``http`` ã¾ãŸã¯ ``https``) を指定ã—ã¾ã™ã€‚Ansible ã¯ã€``ansible_port`` ㌠``5985`` ã«æŒ‡å®šã•れã¦ã„ãªã„é™ã‚Šã€ãƒ‡ãƒ•ォルト㧠``https`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:622 msgid "``ansible_winrm_path``: Specify an alternate path to the WinRM endpoint, Ansible uses ``/wsman`` by default" msgstr "``ansible_winrm_path``: WinRMエンドãƒã‚¤ãƒ³ãƒˆã¸ã®åˆ¥ã®ãƒ‘スを指定ã—ã¾ã™ã€‚Ansible ã¯ãƒ‡ãƒ•ォルト㧠``/wsman`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:625 msgid "``ansible_winrm_realm``: Specify the realm to use for Kerberos authentication. If ``ansible_user`` contains ``@``, Ansible will use the part of the username after ``@`` by default" msgstr "``ansible_winrm_realm``: Kerberos èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ¬ãƒ«ãƒ ã‚’指定ã—ã¾ã™ã€‚``ansible_user`` ã« ``@`` ãŒå«ã¾ã‚Œã‚‹å ´åˆã€Ansible ã¯ãƒ‡ãƒ•ォルト㧠``@`` ã®å¾Œã«ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ä¸€éƒ¨ã‚’使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:629 msgid "``ansible_winrm_transport``: Specify one or more authentication transport options as a comma-separated list. By default, Ansible will use ``kerberos, basic`` if the ``kerberos`` module is installed and a realm is defined, otherwise it will be ``plaintext``" msgstr "``ansible_winrm_transport``: 1 ã¤ä»¥ä¸Šã®èªè¨¼ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã‚ªãƒ—ションをコンマ区切りã®ãƒªã‚¹ãƒˆã§æŒ‡å®šã—ã¾ã™ã€‚デフォルトã§ã¯ã€``kerberos`` モジュールãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¦ãƒ¬ãƒ«ãƒ ãŒå®šç¾©ã•れã¦ã„ã‚‹å ´åˆã€Ansible 㯠``kerberos, basic`` を使用ã—ã€ãれ以外ã®å ´åˆã¯ ``plaintext`` ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:634 msgid "``ansible_winrm_server_cert_validation``: Specify the server certificate validation mode (``ignore`` or ``validate``). Ansible defaults to ``validate`` on Python 2.7.9 and higher, which will result in certificate validation errors against the Windows self-signed certificates. Unless verifiable certificates have been configured on the WinRM listeners, this should be set to ``ignore``" msgstr "``ansible_winrm_server_cert_validation``: サーãƒãƒ¼è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ãƒ¢ãƒ¼ãƒ‰ (``ignore`` ã¾ãŸã¯``validate``) を指定ã—ã¾ã™ã€‚Ansible ã®ãƒ‡ãƒ•ォルトã¯ã€Python 2.7.9 以é™ã§ã¯ ``validate`` ã§ã€ã“れ㯠Windows ã®è‡ªå·±ç½²å証明書ã«å¯¾ã—ã¦è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã™ã€‚WinRM ãƒªã‚¹ãƒŠãƒ¼ã§æ¤œè¨¼å¯èƒ½ãªè¨¼æ˜Žæ›¸ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€ã“ã®è¨­å®šã‚’ ``ignore`` ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:641 msgid "``ansible_winrm_operation_timeout_sec``: Increase the default timeout for WinRM operations, Ansible uses ``20`` by default" msgstr "``ansible_winrm_operation_timeout_sec``: WinRM æ“作ã®ãƒ‡ãƒ•ォルトタイムアウトを増やã™ã¨ã€Ansible ã¯ãƒ‡ãƒ•ォルト㧠``20`` を使用ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:644 msgid "``ansible_winrm_read_timeout_sec``: Increase the WinRM read timeout, Ansible uses ``30`` by default. Useful if there are intermittent network issues and read timeout errors keep occurring" msgstr "``ansible_winrm_read_timeout_sec``: WinRM ã®èª­ã¿å–りタイムアウトを増やã—ã¾ã™ã€‚Ansible ã¯ãƒ‡ãƒ•ォルト㧠``30`` を使用ã—ã¾ã™ã€‚ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®å•é¡ŒãŒæ–­ç¶šçš„ã«ç™ºç”Ÿã—ã€èª­ã¿å–りタイムアウトã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ç¶šã‘ã‚‹å ´åˆã«æœ‰åйã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:648 msgid "``ansible_winrm_message_encryption``: Specify the message encryption operation (``auto``, ``always``, ``never``) to use, Ansible uses ``auto`` by default. ``auto`` means message encryption is only used when ``ansible_winrm_scheme`` is ``http`` and ``ansible_winrm_transport`` supports message encryption. ``always`` means message encryption will always be used and ``never`` means message encryption will never be used" msgstr "``ansible_winrm_message_encryption``: 使用ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–æ“作 (``auto``ã€``always``ã€``never``) を指定ã—ã¾ã™ã€‚Ansible ã¯ãƒ‡ãƒ•ォルト㧠``auto`` を使用ã—ã¾ã™ã€‚``auto`` ã¯ã€``ansible_winrm_scheme`` ㌠``http`` ã§ã€``ansible_winrm_transport`` ãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å ´åˆã«é™ã‚Šã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ãŒä½¿ç”¨ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚``always`` ã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ãŒå¸¸ã«ä½¿ç”¨ã•れるã“ã¨ã‚’æ„味ã—ã€``never`` ã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æš—å·åŒ–ãŒæ±ºã—ã¦ä½¿ç”¨ã•れãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:655 msgid "``ansible_winrm_ca_trust_path``: Used to specify a different cacert container than the one used in the ``certifi`` module. See the HTTPS Certificate Validation section for more details." msgstr "``ansible_winrm_ca_trust_path``: ``certifi`` モジュールã§ä½¿ç”¨ã•れã¦ã„ã‚‹ã‚‚ã®ã¨ã¯ç•°ãªã‚‹ cacert コンテナーを指定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚詳細ã¯ã€ã€ŒHTTPS è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:659 msgid "``ansible_winrm_send_cbt``: When using ``ntlm`` or ``kerberos`` over HTTPS, the authentication library will try to send channel binding tokens to mitigate against man in the middle attacks. This flag controls whether these bindings will be sent or not (default: ``yes``)." msgstr "``ansible_winrm_send_cbt``: ``ntlm`` ã¾ãŸã¯ ``kerberos`` ã‚’ HTTPS ã§ä½¿ç”¨ã™ã‚‹å ´åˆã€èªè¨¼ãƒ©ã‚¤ãƒ–ラリーã¯ã€ä¸­é–“者攻撃を緩和ã™ã‚‹ãŸã‚ã«ãƒãƒ£ãƒ³ãƒãƒ«ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒˆãƒ¼ã‚¯ãƒ³ã®é€ä¿¡ã‚’試ã¿ã¾ã™ã€‚ã“ã®ãƒ•ラグã¯ã€ã“れらã®ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’é€ä¿¡ã™ã‚‹ã‹ã©ã†ã‹ã‚’制御ã—ã¾ã™ (デフォルト: ``yes``)。" #: ../../rst/user_guide/windows_winrm.rst:664 msgid "``ansible_winrm_*``: Any additional keyword arguments supported by ``winrm.Protocol`` may be provided in place of ``*``" msgstr "``ansible_winrm_*``: ``winrm.Protocol`` ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ä»»æ„ã®è¿½åŠ ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰å¼•æ•°ã¯ã€ä»£ã‚り㫠``*`` ã§æŒ‡å®šã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:667 msgid "In addition, there are also specific variables that need to be set for each authentication option. See the section on authentication above for more information." msgstr "ã•らã«ã€å„èªè¨¼ã‚ªãƒ—ションã§è¨­å®šã™ã‚‹å¿…è¦ãŒã‚る特定ã®å¤‰æ•°ã‚‚ã‚りã¾ã™ã€‚詳細ã¯ã€ä¸Šè¨˜ã®èªè¨¼ã«é–¢ã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:670 msgid "Ansible 2.0 has deprecated the \"ssh\" from ``ansible_ssh_user``, ``ansible_ssh_pass``, ``ansible_ssh_host``, and ``ansible_ssh_port`` to become ``ansible_user``, ``ansible_password``, ``ansible_host``, and ``ansible_port``. If using a version of Ansible prior to 2.0, the older style (``ansible_ssh_*``) should be used instead. The shorter variables are ignored, without warning, in older versions of Ansible." msgstr "Ansible 2.0 ã§ã¯ã€``ansible_ssh_user``ã€``ansible_ssh_pass``ã€``ansible_ssh_host``ã€ãŠã‚ˆã³ ``ansible_ssh_port`` ã®ã€Œsshã€ãŒéžæŽ¨å¥¨ã¨ãªã‚Šã€``ansible_user``ã€``ansible_password``ã€``ansible_host``ã€ãŠã‚ˆã³ ``ansible_port`` ã¨ãªã‚Šã¾ã—ãŸã€‚Ansible 2.0 よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»£ã‚りã«å¤ã„スタイル (``ansible_ssh_*``) を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚çŸ­ã„æ–¹ã®å¤‰æ•°ã¯ã€å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Ansible ã§ã¯è­¦å‘Šãªã—ã«ç„¡è¦–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:677 msgid "``ansible_winrm_message_encryption`` is different from transport encryption done over TLS. The WinRM payload is still encrypted with TLS when run over HTTPS, even if ``ansible_winrm_message_encryption=never``." msgstr "``ansible_winrm_message_encryption`` ã¯ã€TLS 上ã§è¡Œã‚れるトランスãƒãƒ¼ãƒˆæš—å·åŒ–ã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚WinRM ペイロードã¯ã€``ansible_winrm_message_encryption=never`` ã§ã‚ã£ã¦ã‚‚ã€HTTPS ã§å®Ÿè¡Œã•れãŸå ´åˆã§ã‚‚ TLS ã§æš—å·åŒ–ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:682 msgid "IPv6 Addresses" msgstr "IPv6 アドレス" #: ../../rst/user_guide/windows_winrm.rst:683 msgid "IPv6 addresses can be used instead of IPv4 addresses or hostnames. This option is normally set in an inventory. Ansible will attempt to parse the address using the `ipaddress `_ package and pass to pywinrm correctly." msgstr "IPv4 アドレスやホストåã®ä»£ã‚りã«ã€IPv6 アドレスを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯é€šå¸¸ã€ã‚¤ãƒ³ãƒ™ãƒ³ãƒˆãƒªãƒ¼ã§è¨­å®šã—ã¾ã™ã€‚Ansible ã¯ã€`ipaddress `_ パッケージを使用ã—ã¦ã‚¢ãƒ‰ãƒ¬ã‚¹ã®è§£æžã‚’試ã¿ã€pywinrm ã«æ­£ã—ãæ¸¡ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:688 msgid "When defining a host using an IPv6 address, just add the IPv6 address as you would an IPv4 address or hostname:" msgstr "IPv6 アドレスを使用ã—ã¦ãƒ›ã‚¹ãƒˆã‚’定義ã™ã‚‹å ´åˆã¯ã€IPv4 アドレスやホストåã¨åŒã˜ã‚ˆã†ã« IPv6 アドレスを追加ã™ã‚‹ã ã‘ã§ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:702 msgid "The ipaddress library is only included by default in Python 3.x. To use IPv6 addresses in Python 2.7, make sure to run ``pip install ipaddress`` which installs a backported package." msgstr "ipaddress ライブラリー㯠Python 3.x ã«ã®ã¿ãƒ‡ãƒ•ォルトã§å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Python 2.7 ã§ IPv6 アドレスを使用ã™ã‚‹ã«ã¯ã€ãƒãƒƒã‚¯ãƒãƒ¼ãƒˆã•れãŸãƒ‘ッケージをインストールã™ã‚‹ ``pip install ipaddress`` ã‚’å¿…ãšå®Ÿè¡Œã—ã¦ãã ã•ã„。" #: ../../rst/user_guide/windows_winrm.rst:707 msgid "HTTPS Certificate Validation" msgstr "HTTPS è¨¼æ˜Žæ›¸ã®æ¤œè¨¼" #: ../../rst/user_guide/windows_winrm.rst:708 msgid "As part of the TLS protocol, the certificate is validated to ensure the host matches the subject and the client trusts the issuer of the server certificate. When using a self-signed certificate or setting ``ansible_winrm_server_cert_validation: ignore`` these security mechanisms are bypassed. While self signed certificates will always need the ``ignore`` flag, certificates that have been issued from a certificate authority can still be validated." msgstr "TLS プロトコルã®ä¸€ç’°ã¨ã—ã¦ã€è¨¼æ˜Žæ›¸ãŒæ¤œè¨¼ã•れã€ãƒ›ã‚¹ãƒˆãŒã‚µãƒ–ジェクトã¨ä¸€è‡´ã—ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒã‚µãƒ¼ãƒãƒ¼è¨¼æ˜Žæ›¸ã®ç™ºè¡Œè€…ã‚’ä¿¡é ¼ã—ã¦ã„ã‚‹ã“ã¨ãŒç¢ºèªã•れã¾ã™ã€‚自己署å証明書を使用ã—ãŸã‚Šã€``ansible_winrm_server_cert_validation: ignore`` を設定ã—ãŸã‚Šã™ã‚‹ã¨ã€ã“れらã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒå›žé¿ã•れã¾ã™ã€‚自己署å証明書ã«ã¯å¸¸ã« ``ignore`` フラグãŒå¿…è¦ã§ã™ãŒã€èªè¨¼å±€ã‹ã‚‰ç™ºè¡Œã•れãŸè¨¼æ˜Žæ›¸ã¯æ¤œè¨¼ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:716 msgid "One of the more common ways of setting up a HTTPS listener in a domain environment is to use Active Directory Certificate Service (AD CS). AD CS is used to generate signed certificates from a Certificate Signing Request (CSR). If the WinRM HTTPS listener is using a certificate that has been signed by another authority, like AD CS, then Ansible can be set up to trust that issuer as part of the TLS handshake." msgstr "ドメイン環境㧠HTTPS リスナーをセットアップã™ã‚‹ä¸€èˆ¬çš„ãªæ–¹æ³•ã® 1 ã¤ã«ã€Active Directory Certificate Service (AD CS) を使用ã™ã‚‹æ–¹æ³•ãŒã‚りã¾ã™ã€‚AD CS ã¯ã€CSR (Certificate Signing Request) ã‹ã‚‰ç½²å付ã証明書を生æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚WinRM HTTPS リスナー㌠AD CS ã®ã‚ˆã†ãªåˆ¥ã®æ©Ÿé–¢ã«ã‚ˆã£ã¦ç½²åã•れãŸè¨¼æ˜Žæ›¸ã‚’使用ã—ã¦ã„ã‚‹å ´åˆã€Ansible 㯠TLS ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã®ä¸€éƒ¨ã¨ã—ã¦ãã®ç™ºè¡Œè€…ã‚’ä¿¡é ¼ã™ã‚‹ã‚ˆã†ã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:723 msgid "To get Ansible to trust a Certificate Authority (CA) like AD CS, the issuer certificate of the CA can be exported as a PEM encoded certificate. This certificate can then be copied locally to the Ansible controller and used as a source of certificate validation, otherwise known as a CA chain." msgstr "AD CS ã®ã‚ˆã†ãªèªè¨¼å±€ (CA) ã‚’ Ansible ã«ä¿¡é ¼ã•ã›ã‚‹ã«ã¯ã€CA ã®ç™ºè¡Œè€…証明書を PEM エンコード証明書ã¨ã—ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã“ã®è¨¼æ˜Žæ›¸ã¯ã€Ansible コントローラーã®ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚³ãƒ”ーã—ã¦ã€è¨¼æ˜Žæ›¸æ¤œè¨¼ã®ã‚½ãƒ¼ã‚¹ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (CA ãƒã‚§ãƒ¼ãƒ³ã¨ã‚‚呼ã°ã‚Œã¾ã™)。" #: ../../rst/user_guide/windows_winrm.rst:728 msgid "The CA chain can contain a single or multiple issuer certificates and each entry is contained on a new line. To then use the custom CA chain as part of the validation process, set ``ansible_winrm_ca_trust_path`` to the path of the file. If this variable is not set, the default CA chain is used instead which is located in the install path of the Python package `certifi `_." msgstr "CA ãƒã‚§ãƒ¼ãƒ³ã«ã¯ã€å˜ä¸€ã¾ãŸã¯è¤‡æ•°ã®ç™ºè¡Œè€…証明書をå«ã‚ã‚‹ã“ã¨ãŒã§ãã€å„ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯æ–°ã—ã„行ã«å«ã¾ã‚Œã¾ã™ã€‚èªè¨¼ãƒ—ロセスã®ä¸€éƒ¨ã¨ã—ã¦ã‚«ã‚¹ã‚¿ãƒ  CA ãƒã‚§ãƒ¼ãƒ³ã‚’使用ã™ã‚‹ã«ã¯ã€``ansible_winrm_ca_trust_path`` ã«ãƒ•ァイルã®ãƒ‘スを設定ã—ã¾ã™ã€‚ã“ã®å¤‰æ•°ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã¯ã€Python パッケージ `certifi `_ ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‘スã«ã‚るデフォルト㮠CAムェーンãŒä½¿ç”¨ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:735 msgid "Each HTTP call is done by the Python requests library which does not use the systems built-in certificate store as a trust authority. Certificate validation will fail if the server's certificate issuer is only added to the system's truststore." msgstr "HTTP 呼ã³å‡ºã—ã¯ãれãžã‚Œã€ã‚·ã‚¹ãƒ†ãƒ ã«çµ„ã¿è¾¼ã¾ã‚ŒãŸè¨¼æ˜Žæ›¸ã‚¹ãƒˆã‚¢ã‚’信頼機関ã¨ã—ã¦ä½¿ç”¨ã—ãªã„ Python リクエストライブラリーã«ã‚ˆã£ã¦è¡Œã‚れã¾ã™ã€‚サーãƒãƒ¼ã®è¨¼æ˜Žæ›¸ç™ºè¡Œè€…ãŒã‚·ã‚¹ãƒ†ãƒ ã®ãƒˆãƒ©ã‚¹ãƒˆã‚¹ãƒˆã‚¢ã«è¿½åŠ ã•れã¦ã„ãªã„å ´åˆã€è¨¼æ˜Žæ›¸ã®æ¤œè¨¼ã¯å¤±æ•—ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:743 msgid "TLS 1.2 Support" msgstr "TLS 1.2 ã®ã‚µãƒãƒ¼ãƒˆ" #: ../../rst/user_guide/windows_winrm.rst:744 msgid "As WinRM runs over the HTTP protocol, using HTTPS means that the TLS protocol is used to encrypt the WinRM messages. TLS will automatically attempt to negotiate the best protocol and cipher suite that is available to both the client and the server. If a match cannot be found then Ansible will error out with a message similar to::" msgstr "WinRM 㯠HTTP プロトコル上ã§å‹•作ã™ã‚‹ãŸã‚ã€HTTPS を使用ã™ã‚‹ã¨ã„ã†ã“ã¨ã¯ã€WinRM ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æš—å·åŒ–ã« TLS プロトコルãŒä½¿ç”¨ã•れるã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚TLS ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒãƒ¼ã®ä¸¡æ–¹ã§åˆ©ç”¨å¯èƒ½ãªã€æœ€é©ãªãƒ—ãƒ­ãƒˆã‚³ãƒ«ã¨æš—å·ã‚¹ã‚¤ãƒ¼ãƒˆã‚’自動的ã«å–り決ã‚よã†ã¨ã—ã¾ã™ã€‚一致ã™ã‚‹ã‚‚ã®ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€Ansible ã¯æ¬¡ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:752 msgid "Commonly this is when the Windows host has not been configured to support TLS v1.2 but it could also mean the Ansible controller has an older OpenSSL version installed." msgstr "ã“れã¯ã€Windows ホスト㌠TLS v1.2 をサãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«è¨­å®šã•れã¦ã„ãªã„å ´åˆã§ã™ãŒã€Ansible コントローラーã«å¤ã„ OpenSSL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã“ã¨ã‚‚æ„味ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:756 msgid "Windows 8 and Windows Server 2012 come with TLS v1.2 installed and enabled by default but older hosts, like Server 2008 R2 and Windows 7, have to be enabled manually." msgstr "Windows 8 ãŠã‚ˆã³ Windows Server 2012 ã«ã¯ã€ãƒ‡ãƒ•ォルト㧠TLS v1.2 ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã€æœ‰åйã«ãªã£ã¦ã„ã¾ã™ãŒã€Server 2008 R2 ã‚„ Windows 7 ãªã©ã®å¤ã„ãƒ›ã‚¹ãƒˆã¯æ‰‹å‹•ã§æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:760 msgid "There is a bug with the TLS 1.2 patch for Server 2008 which will stop Ansible from connecting to the Windows host. This means that Server 2008 cannot be configured to use TLS 1.2. Server 2008 R2 and Windows 7 are not affected by this issue and can use TLS 1.2." msgstr "Server 2008 ã® TLS 1.2 パッãƒã«ã¯ãƒã‚°ãŒã‚りã€Ansible ã® Windows ホストã¸ã®æŽ¥ç¶šãŒåœæ­¢ã—ã¦ã—ã¾ã„ã¾ã™ã€‚ã“れã¯ã€Server 2008 ㌠TLS 1.2 を使用ã™ã‚‹ã‚ˆã†ã«è¨­å®šã§ããªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚Server 2008 R2 ã¨Windows 7 ã¯ã“ã®å•題ã®å½±éŸ¿ã‚’å—ã‘ãšã€TLS 1.2 を使用ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:765 msgid "To verify what protocol the Windows host supports, you can run the following command on the Ansible controller::" msgstr "Windows ホストãŒå¯¾å¿œã—ã¦ã„るプロトコルを確èªã™ã‚‹ã«ã¯ã€Ansible コントローラーã§ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:770 msgid "The output will contain information about the TLS session and the ``Protocol`` line will display the version that was negotiated::" msgstr "出力ã«ã¯ TLS セッションã«é–¢ã™ã‚‹æƒ…å ±ãŒå«ã¾ã‚Œã€``Protocol`` 行ã«ã¯ãƒã‚´ã‚·ã‚¨ãƒ¼ãƒˆã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:806 msgid "If the host is returning ``TLSv1`` then it should be configured so that TLS v1.2 is enable. You can do this by running the following PowerShell script:" msgstr "ホスト㌠``TLSv1`` ã‚’è¿”ã™å ´åˆã¯ã€TLS v1.2 ãŒæœ‰åйã«ãªã‚‹ã‚ˆã†ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€æ¬¡ã® PowerShell スクリプトを実行ã™ã‚‹ã“ã¨ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:831 msgid "The below Ansible tasks can also be used to enable TLS v1.2:" msgstr "以下㮠Ansible タスクを使用ã—㦠TLS v1.2 を有効ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:861 msgid "There are other ways to configure the TLS protocols as well as the cipher suites that are offered by the Windows host. One tool that can give you a GUI to manage these settings is `IIS Crypto `_ from Nartac Software." msgstr "TLS プロトコルやã€Windows ãƒ›ã‚¹ãƒˆãŒæä¾›ã™ã‚‹æš—å·ã‚¹ã‚¤ãƒ¼ãƒˆã‚’設定ã™ã‚‹æ–¹æ³•ã¯ä»–ã«ã‚‚ã‚りã¾ã™ã€‚ã“れらã®è¨­å®šã‚’管ç†ã™ã‚‹ãŸã‚ã® GUI ã‚’æä¾›ã™ã‚‹ãƒ„ールã¨ã—ã¦ã€Nartac Software 社㮠`IIS Crypto `_ ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:868 msgid "Due to the design of the WinRM protocol , there are a few limitations when using WinRM that can cause issues when creating playbooks for Ansible. These include:" msgstr "WinRM プロトコルã®è¨­è¨ˆä¸Šã€WinRM を使用ã™ã‚‹éš›ã«ã¯ã„ãã¤ã‹ã®åˆ¶é™ãŒã‚りã€Ansible ã® Playbook を作æˆã™ã‚‹éš›ã«å•題ã¨ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“れã«ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:872 msgid "Credentials are not delegated for most authentication types, which causes authentication errors when accessing network resources or installing certain programs." msgstr "ã»ã¨ã‚“ã©ã®èªè¨¼ã‚¿ã‚¤ãƒ—ã§èªè¨¼æƒ…å ±ãŒå§”è­²ã•れã¦ã„ãªã„ãŸã‚ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚„特定ã®ãƒ—ログラムã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«èªè¨¼ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã—ãŸã€‚" #: ../../rst/user_guide/windows_winrm.rst:876 msgid "Many calls to the Windows Update API are blocked when running over WinRM." msgstr "WinRM 経由ã§å®Ÿè¡Œã™ã‚‹ã¨ã€Windows Update API ã¸ã®å¤šãã®å‘¼ã³å‡ºã—ãŒãƒ–ロックã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:878 msgid "Some programs fail to install with WinRM due to no credential delegation or because they access forbidden Windows API like WUA over WinRM." msgstr "èªè¨¼æƒ…å ±ã®å§”譲やã€WUA over WinRM ãªã©ã®ç¦æ­¢ã•れã¦ã„ã‚‹ Windows API ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã«ã‚ˆã‚Šã€ä¸€éƒ¨ã®ãƒ—ログラム㯠WinRM ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ããªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:881 msgid "Commands under WinRM are done under a non-interactive session, which can prevent certain commands or executables from running." msgstr "WinRM ã®ã‚³ãƒžãƒ³ãƒ‰ã¯éžå¯¾è©±åž‹ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§å®Ÿè¡Œã•れるãŸã‚ã€ç‰¹å®šã®ã‚³ãƒžãƒ³ãƒ‰ã‚„実行ファイルãŒå®Ÿè¡Œã§ããªã„å ´åˆãŒã‚りã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:884 msgid "You cannot run a process that interacts with ``DPAPI``, which is used by some installers (like Microsoft SQL Server)." msgstr "一部ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ (Microsoft SQL Server ãªã©) ãŒä½¿ç”¨ã™ã‚‹ ``DPAPI`` ã¨å¯¾è©±ã™ã‚‹ãƒ—ロセスを実行ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: ../../rst/user_guide/windows_winrm.rst:887 msgid "Some of these limitations can be mitigated by doing one of the following:" msgstr "ã“ã®åˆ¶é™ã®ä¸€éƒ¨ã¯ã€ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã‚’実行ã—ã¦è»½æ¸›ã§ãã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:889 msgid "Set ``ansible_winrm_transport`` to ``credssp`` or ``kerberos`` (with ``ansible_winrm_kerberos_delegation=true``) to bypass the double hop issue and access network resources" msgstr "ダブルホップå•題を回é¿ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã€``ansible_winrm_transport`` ã‚’ ``credssp`` ã¾ãŸã¯ ``kerberos`` (``ansible_winrm_kerberos_delegation=true`` を使用) ã«è¨­å®šã—ã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:893 msgid "Use ``become`` to bypass all WinRM restrictions and run a command as it would locally. Unlike using an authentication transport like ``credssp``, this will also remove the non-interactive restriction and API restrictions like WUA and DPAPI" msgstr "``become`` を使用ã™ã‚‹ã¨ã€ã™ã¹ã¦ã® WinRM 制é™ã‚’回é¿ã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ«ã¨åŒæ§˜ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã§ãã¾ã™ã€‚``credssp`` ã®ã‚ˆã†ãªèªè¨¼ãƒˆãƒ©ãƒ³ã‚¹ãƒãƒ¼ãƒˆã‚’使用ã™ã‚‹å ´åˆã¨ã¯ç•°ãªã‚Šã€éžå¯¾è©±åž‹ã®åˆ¶é™ã‚„ã€WUA ã‚„ DPAPI ãªã©ã® API ã®åˆ¶é™ã‚‚解除ã•れã¾ã™ã€‚" #: ../../rst/user_guide/windows_winrm.rst:898 msgid "Use a scheduled task to run a command which can be created with the ``win_scheduled_task`` module. Like ``become``, this bypasses all WinRM restrictions but can only run a command and not modules." msgstr "``win_scheduled_task`` モジュールã§ä½œæˆã•れるコマンドを実行ã™ã‚‹ãŸã‚ã«ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れãŸã‚¿ã‚¹ã‚¯ã‚’使用ã—ã¾ã™ã€‚``become`` ã¨åŒæ§˜ã«ã€WinRM ã®åˆ¶é™ã‚’ã™ã¹ã¦å›žé¿ã—ã¾ã™ãŒã€å®Ÿè¡Œã§ãã‚‹ã®ã¯ã‚³ãƒžãƒ³ãƒ‰ã®ã¿ã§ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.946559 ansible-core-2.12.0/docs/docsite/rst/network/0000755000000000000000000000000000000000000020761 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.947559 ansible-core-2.12.0/docs/docsite/rst/network/dev_guide/0000755000000000000000000000000000000000000022714 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/dev_guide/developing_plugins_network.rst0000644000000000000000000003041500000000000031117 0ustar00rootroot00000000000000 .. _developing_modules_network: .. _developing_plugins_network: ************************** Developing network plugins ************************** You can extend the existing network modules with custom plugins in your collection. .. contents:: :local: Network connection plugins ========================== Each network connection plugin has a set of its own plugins which provide a specification of the connection for a particular set of devices. The specific plugin used is selected at runtime based on the value of the ``ansible_network_os`` variable assigned to the host. This variable should be set to the same value as the name of the plugin to be loaded. Thus, ``ansible_network_os=nxos`` will try to load a plugin in a file named ``nxos.py``, so it is important to name the plugin in a way that will be sensible to users. Public methods of these plugins may be called from a module or module_utils with the connection proxy object just as other connection methods can. The following is a very simple example of using such a call in a module_utils file so it may be shared with other modules. .. code-block:: python from ansible.module_utils.connection import Connection def get_config(module): # module is your AnsibleModule instance. connection = Connection(module._socket_path) # You can now call any method (that doesn't start with '_') of the connection # plugin or its platform-specific plugin return connection.get_config() .. contents:: :local: .. _developing_plugins_httpapi: Developing httpapi plugins ========================== :ref:`httpapi plugins ` serve as adapters for various HTTP(S) APIs for use with the ``httpapi`` connection plugin. They should implement a minimal set of convenience methods tailored to the API you are attempting to use. Specifically, there are a few methods that the ``httpapi`` connection plugin expects to exist. Making requests --------------- The ``httpapi`` connection plugin has a ``send()`` method, but an httpapi plugin needs a ``send_request(self, data, **message_kwargs)`` method as a higher-level wrapper to ``send()``. This method should prepare requests by adding fixed values like common headers or URL root paths. This method may do more complex work such as turning data into formatted payloads, or determining which path or method to request. It may then also unpack responses to be more easily consumed by the caller. .. code-block:: python from ansible.module_utils.six.moves.urllib.error import HTTPError def send_request(self, data, path, method='POST'): # Fixed headers for requests headers = {'Content-Type': 'application/json'} try: response, response_content = self.connection.send(path, data, method=method, headers=headers) except HTTPError as exc: return exc.code, exc.read() # handle_response (defined separately) will take the format returned by the device # and transform it into something more suitable for use by modules. # This may be JSON text to Python dictionaries, for example. return handle_response(response_content) Authenticating -------------- By default, all requests will authenticate with HTTP Basic authentication. If a request can return some kind of token to stand in place of HTTP Basic, the ``update_auth(self, response, response_text)`` method should be implemented to inspect responses for such tokens. If the token is meant to be included with the headers of each request, it is sufficient to return a dictionary which will be merged with the computed headers for each request. The default implementation of this method does exactly this for cookies. If the token is used in another way, say in a query string, you should instead save that token to an instance variable, where the ``send_request()`` method (above) can add it to each request .. code-block:: python def update_auth(self, response, response_text): cookie = response.info().get('Set-Cookie') if cookie: return {'Cookie': cookie} return None If instead an explicit login endpoint needs to be requested to receive an authentication token, the ``login(self, username, password)`` method can be implemented to call that endpoint. If implemented, this method will be called once before requesting any other resources of the server. By default, it will also be attempted once when a HTTP 401 is returned from a request. .. code-block:: python def login(self, username, password): login_path = '/my/login/path' data = {'user': username, 'password': password} response = self.send_request(data, path=login_path) try: # This is still sent as an HTTP header, so we can set our connection's _auth # variable manually. If the token is returned to the device in another way, # you will have to keep track of it another way and make sure that it is sent # with the rest of the request from send_request() self.connection._auth = {'X-api-token': response['token']} except KeyError: raise AnsibleAuthenticationFailure(message="Failed to acquire login token.") Similarly, ``logout(self)`` can be implemented to call an endpoint to invalidate and/or release the current token, if such an endpoint exists. This will be automatically called when the connection is closed (and, by extension, when reset). .. code-block:: python def logout(self): logout_path = '/my/logout/path' self.send_request(None, path=logout_path) # Clean up tokens self.connection._auth = None Error handling -------------- The ``handle_httperror(self, exception)`` method can deal with status codes returned by the server. The return value indicates how the plugin will continue with the request: * A value of ``true`` means that the request can be retried. This my be used to indicate a transient error, or one that has been resolved. For example, the default implementation will try to call ``login()`` when presented with a 401, and return ``true`` if successful. * A value of ``false`` means that the plugin is unable to recover from this response. The status code will be raised as an exception to the calling module. * Any other value will be taken as a nonfatal response from the request. This may be useful if the server returns error messages in the body of the response. Returning the original exception is usually sufficient in this case, as HTTPError objects have the same interface as a successful response. For example httpapi plugins, see the `source code for the httpapi plugins `_ included with Ansible Core. Developing NETCONF plugins ========================== The :ref:`netconf ` connection plugin provides a connection to remote devices over the ``SSH NETCONF`` subsystem. Network devices typically use this connection plugin to send and receive ``RPC`` calls over ``NETCONF``. The ``netconf`` connection plugin uses the ``ncclient`` Python library under the hood to initiate a NETCONF session with a NETCONF-enabled remote network device. ``ncclient`` also executes NETCONF RPC requests and receives responses. You must install the ``ncclient`` on the local Ansible controller. To use the ``netconf`` connection plugin for network devices that support standard NETCONF (:RFC:`6241`) operations such as ``get``, ``get-config``, ``edit-config``, set ``ansible_network_os=default``. You can use :ref:`netconf_get `, :ref:`netconf_config ` and :ref:`netconf_rpc ` modules to talk to a NETCONF enabled remote host. As a contributor and user, you should be able to use all the methods under the ``NetconfBase`` class if your device supports standard NETCONF. You can contribute a new plugin if the device you are working with has a vendor specific NETCONF RPC. To support a vendor specific NETCONF RPC, add the implementation in the network OS specific NETCONF plugin. For Junos for example: * See the vendor-specific Junos RPC methods implemented in ``plugins/netconf/junos.py``. * Set the value of ``ansible_network_os`` to the name of the netconf plugin file, that is ``junos`` in this case. .. _developing_plugins_network_cli: Developing network_cli plugins ============================== The :ref:`network_cli ` connection type uses ``paramiko_ssh`` under the hood which creates a pseudo terminal to send commands and receive responses. ``network_cli`` loads two platform specific plugins based on the value of ``ansible_network_os``: * Terminal plugin (for example ``plugins/terminal/ios.py``) - Controls the parameters related to terminal, such as setting terminal length and width, page disabling and privilege escalation. Also defines regex to identify the command prompt and error prompts. * :ref:`cliconf_plugins` (for example, :ref:`ios cliconf `) - Provides an abstraction layer for low level send and receive operations. For example, the ``edit_config()`` method ensures that the prompt is in ``config`` mode before executing configuration commands. To contribute a new network operating system to work with the ``network_cli`` connection, implement the ``cliconf`` and ``terminal`` plugins for that network OS. The plugins can reside in: * Adjacent to playbook in folders .. code-block:: bash cliconf_plugins/ terminal_plugins/ * Roles .. code-block:: bash myrole/cliconf_plugins/ myrole/terminal_plugins/ * Collections .. code-block:: bash myorg/mycollection/plugins/terminal/ myorg/mycollection/plugins/cliconf/ The user can also set the :ref:`DEFAULT_CLICONF_PLUGIN_PATH` to configure the ``cliconf`` plugin path. After adding the ``cliconf`` and ``terminal`` plugins in the expected locations, users can: * Use the :ref:`cli_command ` to run an arbitrary command on the network device. * Use the :ref:`cli_config ` to implement configuration changes on the remote hosts without platform-specific modules. .. _develop_cli_parse_plugins: Developing cli_parser plugins in a collection =============================================== You can use ``cli_parse`` as an entry point for a cli_parser plugin in your own collection. The following sample shows the start of a custom cli_parser plugin: .. code-block:: python from ansible_collections.ansible.netcommon.plugins.module_utils.cli_parser.cli_parserbase import ( CliParserBase, ) class CliParser(CliParserBase): """ Sample cli_parser plugin """ # Use the follow extension when loading a template DEFAULT_TEMPLATE_EXTENSION = "txt" # Provide the contents of the template to the parse function PROVIDE_TEMPLATE_CONTENTS = True def myparser(text, template_contents): # parse the text using the template contents return {...} def parse(self, *_args, **kwargs): """ Standard entry point for a cli_parse parse execution :return: Errors or parsed text as structured data :rtype: dict :example: The parse function of a parser should return a dict: {"errors": [a list of errors]} or {"parsed": obj} """ template_contents = kwargs["template_contents"] text = self._task_args.get("text") try: parsed = myparser(text, template_contents) except Exception as exc: msg = "Custom parser returned an error while parsing. Error: {err}" return {"errors": [msg.format(err=to_native(exc))]} return {"parsed": parsed} The following task uses this custom cli_parser plugin: .. code-block:: yaml - name: Use a custom cli_parser ansible.netcommon.cli_parse: command: ls -l parser: name: my_organiztion.my_collection.custom_parser To develop a custom plugin: - Each cli_parser plugin requires a ``CliParser`` class. - Each cli_parser plugin requires a ``parse`` function. - Always return a dictionary with ``errors`` or ``parsed``. - Place the custom cli_parser in plugins/cli_parsers directory of the collection. - See the `current cli_parsers `_ for examples to follow. .. seealso:: * :ref:`cli_parsing` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/dev_guide/developing_resource_modules_network.rst0000644000000000000000000007705300000000000033026 0ustar00rootroot00000000000000 .. _developing_resource_modules: *********************************** Developing network resource modules *********************************** .. contents:: :local: :depth: 2 Understanding network and security resource modules =================================================== Network and security devices separate configuration into sections (such as interfaces, VLANs, and so on) that apply to a network or security service. Ansible resource modules take advantage of this to allow users to configure subsections or resources within the device configuration. Resource modules provide a consistent experience across different network and security devices. For example, a network resource module may only update the configuration for a specific portion of the network interfaces, VLANs, ACLs, and so on for a network device. The resource module: #. Fetches a piece of the configuration (fact gathering), for example, the interfaces configuration. #. Converts the returned configuration into key-value pairs. #. Places those key-value pairs into an internal independent structured data format. Now that the configuration data is normalized, the user can update and modify the data and then use the resource module to send the configuration data back to the device. This results in a full round-trip configuration update without the need for manual parsing, data manipulation, and data model management. The resource module has two top-level keys - ``config`` and ``state``: * ``config`` defines the resource configuration data model as key-value pairs. The type of the ``config`` option can be ``dict`` or ``list of dict`` based on the resource managed. That is, if the device has a single global configuration, it should be a ``dict`` (for example, a global LLDP configuration). If the device has multiple instances of configuration, it should be of type ``list`` with each element in the list of type ``dict`` (for example, interfaces configuration). * ``state`` defines the action the resource module takes on the end device. The ``state`` for a new resource module should support the following values (as applicable for the devices that support them): merged Ansible merges the on-device configuration with the provided configuration in the task. replaced Ansible replaces the on-device configuration subsection with the provided configuration subsection in the task. overridden Ansible overrides the on-device configuration for the resource with the provided configuration in the task. Use caution with this state as you could remove your access to the device (for example, by overriding the management interface configuration). deleted Ansible deletes the on-device configuration subsection and restores any default settings. gathered Ansible displays the resource details gathered from the network device and accessed with the ``gathered`` key in the result. rendered Ansible renders the provided configuration in the task in the device-native format (for example, Cisco IOS CLI). Ansible returns this rendered configuration in the ``rendered`` key in the result. Note this state does not communicate with the network device and can be used offline. parsed Ansible parses the configuration from the ``running_configuration`` option into Ansible structured data in the ``parsed`` key in the result. Note this does not gather the configuration from the network device so this state can be used offline. Modules in Ansible-maintained collections must support these state values. If you develop a module with only "present" and "absent" for state, you may submit it to a community collection. .. note:: The states ``rendered``, ``gathered``, and ``parsed`` do not perform any change on the device. .. seealso:: `Deep Dive on VLANs Resource Modules for Network Automation `_ Walkthrough of how state values are implemented for VLANs. Developing network and security resource modules ================================================= The Ansible Engineering team ensures the module design and code pattern within Ansible-maintained collections is uniform across resources and across platforms to give a vendor-independent feel and deliver good quality code. We recommend you use the `resource module builder `_ to develop a resource module. The highlevel process for developing a resource module is: #. Create and share a resource model design in the `resource module models repository `_ as a PR for review. #. Download the latest version of the `resource module builder `_. #. Run the ``resource module builder`` to create a collection scaffold from your approved resource model. #. Write the code to implement your resource module. #. Develop integration and unit tests to verify your resource module. #. Create a PR to the appropriate collection that you want to add your new resource module to. See :ref:`contributing_maintained_collections` for details on determining the correct collection for your module. Understanding the model and resource module builder ----------------------------------------------------- The resource module builder is an Ansible Playbook that helps developers scaffold and maintain an Ansible resource module. It uses a model as the single source of truth for the module. This model is a ``yaml`` file that is used for the module DOCUMENTATION section and the argument spec. The resource module builder has the following capabilities: - Uses a defined model to scaffold a resource module directory layout and initial class files. - Scaffolds either an Ansible role or a collection. - Subsequent uses of the resource module builder will only replace the module arspec and file containing the module docstring. - Allows you to store complex examples along side the model in the same directory. - Maintains the model as the source of truth for the module and use resource module builder to update the source files as needed. - Generates working sample modules for both ``_`` and ``_facts``. Accessing the resource module builder ------------------------------------- To access the resource module builder: 1. clone the github repository: .. code-block:: bash git clone https://github.com/ansible-network/resource_module_builder.git 2. Install the requirements: .. code-block:: bash pip install -r requirements.txt Creating a model ----------------- You must create a model for your new resource. The model is the single source of truth for both the argspec and docstring, keeping them in sync. Once your model is approved, you can use the resource module builder to generate three items based on the model: * The scaffold for a new module * The argspec for the new module * The docstring for the new module For any subsequent changes to the functionality, update the model first and use the resource module builder to update the module argspec and docstring. For example, the resource model builder includes the ``myos_interfaces.yml`` sample in the :file:`models` directory, as seen below: .. code-block:: yaml --- GENERATOR_VERSION: '1.0' NETWORK_OS: myos RESOURCE: interfaces COPYRIGHT: Copyright 2019 Red Hat LICENSE: gpl-3.0.txt DOCUMENTATION: | module: myos_interfaces version_added: 1.0.0 short_description: 'Manages attributes of ' description: 'Manages attributes of .' author: Ansible Network Engineer notes: - 'Tested against ' options: config: description: The provided configuration type: list elements: dict suboptions: name: type: str description: The name of the some_string: type: str description: - The some_string_01 choices: - choice_a - choice_b - choice_c default: choice_a some_bool: description: - The some_bool. type: bool some_int: description: - The some_int. type: int version_added: '1.1.0' some_dict: type: dict description: - The some_dict. suboptions: property_01: description: - The property_01 type: str state: description: - The state of the configuration after module completion. type: str choices: - merged - replaced - overridden - deleted default: merged EXAMPLES: - deleted_example_01.txt - merged_example_01.txt - overridden_example_01.txt - replaced_example_01.txt Notice that you should include examples for each of the states that the resource supports. The resource module builder also includes these in the sample model. Share this model as a PR for review at `resource module models repository `_. You can also see more model examples at that location. Creating a collection scaffold from a resource model ---------------------------------------------------- To use the resource module builder to create a collection scaffold from your approved resource model: .. code-block:: bash ansible-playbook -e rm_dest= \ -e structure=collection \ -e collection_org= \ -e collection_name= \ -e model= \ site.yml Where the parameters are as follows: - ``rm_dest``: The directory where the resource module builder places the files and directories for the resource module and facts modules. - ``structure``: The directory layout type (role or collection) - ``role``: Generate a role directory layout. - ``collection``: Generate a collection directory layout. - ``collection_org``: The organization of the collection, required when `structure=collection`. - ``collection_name``: The name of the collection, required when `structure=collection`. - ``model``: The path to the model file. To use the resource module builder to create a role scaffold: .. code-block:: bash ansible-playbook -e rm_dest= \ -e structure=role \ -e model= \ site.yml Examples ======== Collection directory layout --------------------------- This example shows the directory layout for the following: - ``network_os``: myos - ``resource``: interfaces .. code-block:: bash ansible-playbook -e rm_dest=~/github/rm_example \ -e structure=collection \ -e collection_org=cidrblock \ -e collection_name=my_collection \ -e model=models/myos/interfaces/myos_interfaces.yml \ site.yml .. code-block:: text ├── docs ├── LICENSE.txt ├── playbooks ├── plugins | ├── action | ├── filter | ├── inventory | ├── modules | | ├── __init__.py | | ├── myos_facts.py | | └── myos_interfaces.py | └── module_utils | ├── __init__.py | └── network | ├── __init__.py | └── myos | ├── argspec | | ├── facts | | | ├── facts.py | | | └── __init__.py | | ├── __init__.py | | └── interfaces | | ├── __init__.py | | └── interfaces.py | ├── config | | ├── __init__.py | | └── interfaces | | ├── __init__.py | | └── interfaces.py | ├── facts | | ├── facts.py | | ├── __init__.py | | └── interfaces | | ├── __init__.py | | └── interfaces.py | ├── __init__.py | └── utils | ├── __init__.py | └── utils.py ├── README.md └── roles Role directory layout --------------------- This example displays the role directory layout for the following: - ``network_os``: myos - ``resource``: interfaces .. code-block:: bash ansible-playbook -e rm_dest=~/github/rm_example/roles/my_role \ -e structure=role \ -e model=models/myos/interfaces/myos_interfaces.yml \ site.yml .. code-block:: text roles └── my_role ├── library │ ├── __init__.py │ ├── myos_facts.py │ └── myos_interfaces.py ├── LICENSE.txt ├── module_utils │ ├── __init__.py │ └── network │ ├── __init__.py │ └── myos │ ├── argspec │ │ ├── facts │ │ │ ├── facts.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ └── interfaces │ │ ├── __init__.py │ │ └── interfaces.py │ ├── config │ │ ├── __init__.py │ │ └── interfaces │ │ ├── __init__.py │ │ └── interfaces.py │ ├── facts │ │ ├── facts.py │ │ ├── __init__.py │ │ └── interfaces │ │ ├── __init__.py │ │ └── interfaces.py │ ├── __init__.py │ └── utils │ ├── __init__.py │ └── utils.py └── README.md Using the collection -------------------- This example shows how to use the generated collection in a playbook: .. code-block:: yaml ---- - hosts: myos101 gather_facts: False tasks: - cidrblock.my_collection.myos_interfaces: register: result - debug: var: result - cidrblock.my_collection.myos_facts: - debug: var: ansible_network_resources Using the role -------------- This example shows how to use the generated role in a playbook: .. code-block:: yaml - hosts: myos101 gather_facts: False roles: - my_role - hosts: myos101 gather_facts: False tasks: - myos_interfaces: register: result - debug: var: result - myos_facts: - debug: var: ansible_network_resources Resource module structure and workflow ====================================== The resource module structure includes the following components: Module * ``library/_.py``. * Imports the ``module_utils`` resource package and calls ``execute_module`` API: .. code-block:: text def main(): result = (module).execute_module() Module argspec * ``module_utils//argspec//``. * Argspec for the resource. Facts * ``module_utils//facts//``. * Populate facts for the resource. * Entry in ``module_utils//facts/facts.py`` for ``get_facts`` API to keep ``_facts`` module and facts gathered for the resource module in sync for every subset. * Entry of Resource subset in FACTS_RESOURCE_SUBSETS list in ``module_utils//facts/facts.py`` to make facts collection work. Module package in module_utils * ``module_utils////``. * Implement ``execute_module`` API that loads the configuration to device and generates the result with ``changed``, ``commands``, ``before`` and ``after`` keys. * Call ``get_facts`` API that returns the ```` configuration facts or return the difference if the device has onbox diff support. * Compare facts gathered and given key-values if diff is not supported. * Generate final configuration. Utils * ``module_utils//utils``. * Utilities for the ```` platform. .. _tox_resource_modules: Running ``ansible-test sanity`` and ``tox`` on resource modules ================================================================ You should run ``ansible-test sanity`` and ``tox -elinters`` from the collection root directory before pushing your PR to an Ansible-maintained collection. The CI runs both and will fail if these tests fail. See :ref:`developing_testing` for details on ``ansible-test sanity``. To install the necessary packages: #. Ensure you have a valid Ansible development environment configured. See :ref:`environment_setup` for details. #. Run ``pip install -r requirements.txt`` from the collection root directory. Running ``tox -elinters``: * Reads :file:`tox.ini` from the collection root directory and installs required dependencies (such as ``black`` and ``flake8``). * Runs these with preconfigured options (such as line-length and ignores.) * Runs ``black`` in check mode to show which files will be formatted without actually formatting them. Testing resource modules ======================== The tests rely on a role generated by the resource module builder. After changes to the resource module builder, the role should be regenerated and the tests modified and run as needed. To generate the role after changes: .. code-block:: bash rm -rf rmb_tests/roles/my_role ansible-playbook -e rm_dest=./rmb_tests/roles/my_role \ -e structure=role \ -e model=models/myos/interfaces/myos_interfaces.yml \ site.yml .. _testing_resource_modules: Resource module integration tests ---------------------------------- High-level integration test requirements for new resource modules are as follows: #. Write a test case for every state. #. Write additional test cases to test the behavior of the module when an empty ``config.yaml`` is given. #. Add a round trip test case. This involves a ``merge`` operation, followed by ``gather_facts``, a ``merge`` update with additional configuration, and then reverting back to the base configuration using the previously gathered facts with the ``state`` set to ``overridden``. #. Wherever applicable, assertions should check after and before ``dicts`` against a hard coded Source of Truth. .. _using_zuul_resource_modules: We use Zuul as the CI to run the integration test. * To view the report, click :guilabel:`Details` on the CI comment in the PR * To view a failure report, click :guilabel:`ansible/check` and select the failed test. * To view logs while the test is running, check for your PR number in the `Zuul status board `_. * To fix static test failure locally, run the :command:`tox -e black` **inside the root folder of collection**. To view The Ansible run logs and debug test failures: #. Click the failed job to get the summary, and click :guilabel:`Logs` for the log. #. Click :guilabel:`console` and scroll down to find the failed test. #. Click :guilabel:`>` next to the failed test for complete details. Integration test structure ........................... Each test case should generally follow this pattern: * setup —> test —> assert —> test again (for idempotency) —> assert —> tear down (if needed) -> done. This keeps test playbooks from becoming monolithic and difficult to troubleshoot. * Include a name for each task that is not an assertion. You can add names to assertions as well, but it is easier to identify the broken task within a failed test if you add a name for each task. * Files containing test cases must end in ``.yaml`` Implementation .............. For platforms that support ``connection: local`` *and* ``connection: network_cli`` use the following guidance: * Name the :file:`targets/` directories after the module name. * The :file:`main.yaml` file should just reference the transport. The following example walks through the integration tests for the ``vyos.vyos.vyos_l3_interfaces`` module in the `vyos.vyos `_ collection: ``test/integration/targets/vyos_l3_interfaces/tasks/main.yaml`` .. code-block:: yaml --- - import_tasks: cli.yaml tags: - cli ``test/integration/targets/vyos_l3_interfaces/tasks/cli.yaml`` .. code-block:: yaml --- - name: collect all cli test cases find: paths: "{{ role_path }}/tests/cli" patterns: "{{ testcase }}.yaml" register: test_cases delegate_to: localhost - name: set test_items set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - name: run test cases (connection=network_cli) include_tasks: file: "{{ test_case_to_run }}" vars: ansible_connection: network_cli with_items: "{{ test_items }}" loop_control: loop_var: test_case_to_run - name: run test case (connection=local) include_tasks: file: "{{ test_case_to_run }}" vars: ansible_connection: local ansible_become: no with_first_found: "{{ test_items }}" loop_control: loop_var: test_case_to_run ``test/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml`` .. code-block:: yaml --- - debug: msg: START vyos_l3_interfaces merged integration tests on connection={{ ansible_connection }} - import_tasks: _remove_config.yaml - block: - import_tasks: _populate.yaml - name: Overrides all device configuration with provided configuration register: result vyos.vyos.vyos_l3_interfaces: &id001 config: - name: eth0 ipv4: - address: dhcp - name: eth1 ipv4: - address: 192.0.2.15/24 state: overridden - name: Assert that before dicts were correctly generated assert: that: - "{{ populate | symmetric_difference(result['before']) |length == 0 }}" - name: Assert that correct commands were generated assert: that: - "{{ overridden['commands'] | symmetric_difference(result['commands'])\ \ |length == 0 }}" - name: Assert that after dicts were correctly generated assert: that: - "{{ overridden['after'] | symmetric_difference(result['after']) |length\ \ == 0 }}" - name: Overrides all device configuration with provided configurations (IDEMPOTENT) register: result vyos.vyos.vyos_l3_interfaces: *id001 - name: Assert that the previous task was idempotent assert: that: - result['changed'] == false - name: Assert that before dicts were correctly generated assert: that: - "{{ overridden['after'] | symmetric_difference(result['before']) |length\ \ == 0 }}" always: - import_tasks: _remove_config.yaml Detecting test resources at runtime ................................... Your tests should detect resources (such as interfaces) at runtime rather than hard-coding them into the test. This allows the test to run on a variety of systems. For example: .. code-block:: yaml - name: Collect interface list connection: ansible.netcommon.network_cli register: intout cisco.nxos.nxos_command: commands: - show interface brief | json - set_fact: intdataraw: "{{ intout.stdout_lines[0]['TABLE_interface']['ROW_interface'] }}" - set_fact: nxos_int1: '{{ intdataraw[1].interface }}' - set_fact: nxos_int2: '{{ intdataraw[2].interface }}' - set_fact: nxos_int3: '{{ intdataraw[3].interface }}' See the complete test example of this at https://github.com/ansible-collections/cisco.nxos/blob/master/tests/integration/targets/prepare_nxos_tests/tasks/main.yml. Running network integration tests .................................. Ansible uses Zuul to run an integration test suite on every PR, including new tests introduced by that PR. To find and fix problems in network modules, run the network integration test locally before you submit a PR. First, create an inventory file that points to your test machines. The inventory group should match the platform name (for example, ``eos``, ``ios``): .. code-block:: bash cd test/integration cp inventory.network.template inventory.networking ${EDITOR:-vi} inventory.networking # Add in machines for the platform(s) you wish to test To run these network integration tests, use ``ansible-test network-integration --inventory ``: .. code-block:: console ansible-test network-integration --inventory ~/myinventory -vvv vyos_facts ansible-test network-integration --inventory ~/myinventory -vvv vyos_.* To run all network tests for a particular platform: .. code-block:: bash ansible-test network-integration --inventory /path/to-collection-module/test/integration/inventory.networking vyos_.* This example will run against all ``vyos`` modules. Note that ``vyos_.*`` is a regex match, not a bash wildcard - include the `.` if you modify this example. To run integration tests for a specific module: .. code-block:: bash ansible-test network-integration --inventory /path/to-collection-module/test/integration/inventory.networking vyos_l3_interfaces To run a single test case on a specific module: .. code-block:: bash # Only run vyos_l3_interfaces/tests/cli/gathered.yaml ansible-test network-integration --inventory /path/to-collection-module/test/integration/inventory.networking vyos_l3_interfaces --testcase gathered To run integration tests for a specific transport: .. code-block:: bash # Only run nxapi test ansible-test network-integration --inventory /path/to-collection-module/test/integration/inventory.networking --tags="nxapi" nxos_.* # Skip any cli tests ansible-test network-integration --inventory /path/to-collection-module/test/integration/inventory.networking --skip-tags="cli" nxos_.* See `test/integration/targets/nxos_bgp/tasks/main.yaml `_ for how this is implemented in the tests. For more options: .. code-block:: bash ansible-test network-integration --help If you need additional help or feedback, reach out in the ``#ansible-network`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_). Unit test requirements ----------------------- High-level unit test requirements that new resource modules should follow: #. Write test cases for all the states with all possible combinations of config values. #. Write test cases to test the error conditions ( negative scenarios). #. Check the value of ``changed`` and ``commands`` keys in every test case. We run all unit test cases on our Zuul test suite, on the latest python version supported by our CI setup. Use the :ref:`same procedure ` as the integration tests to view Zuul unit tests reports and logs. See :ref:`unit module testing ` for general unit test details. .. end of cut n .. parsed-literal:: Example: Unit testing Ansible network resource modules ====================================================== This section walks through an example of how to develop unit tests for Ansible resource modules. See :ref:`testing_units` and :ref:`testing_units_modules` for general documentation on Ansible unit tests for modules. Please read those pages first to understand unit tests and why and when you should use them. Using mock objects to unit test Ansible network resource modules ---------------------------------------------------------------- `Mock objects `_ can be very useful in building unit tests for special or difficult cases, but they can also lead to complex and confusing coding situations. One good use for mocks would be to simulate an API. The ``mock`` Python package is bundled with Ansible (use ``import units.compat.mock``). You can mock the device connection and output from the device as follows: .. code-block:: python self.mock_get_config = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.get_config" ) self.get_config = self.mock_get_config.start() self.mock_load_config = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.load_config" ) self.load_config = self.mock_load_config.start() self.mock_get_resource_connection_config = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base.get_resource_connection" ) self.get_resource_connection_config = (self.mock_get_resource_connection_config.start()) self.mock_get_resource_connection_facts = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts.get_resource_connection" ) self.get_resource_connection_facts = (self.mock_get_resource_connection_facts.start()) self.mock_edit_config = patch( "ansible_collections.arista.eos.plugins.module_utils.network.eos.providers.providers.CliProvider.edit_config" ) self.edit_config = self.mock_edit_config.start() self.mock_execute_show_command = patch( "ansible_collections.arista.eos.plugins.module_utils.network.eos.facts.l2_interfaces.l2_interfaces.L2_interfacesFacts.get_device_data" ) self.execute_show_command = self.mock_execute_show_command.start() The facts file of the module now includes a new method, ``get_device_data``. Call ``get_device_data`` here to emulate the device output. Mocking device data ----------------------- To mock fetching results from devices or provide other complex data structures that come from external libraries, you can use ``fixtures`` to read in pre-generated data. The text files for this pre-generated data live in ``test/units/modules/network/PLATFORM/fixtures/``. See for example the `eos_l2_interfaces.cfg file `_. Load data using the ``load_fixture`` method and set this data as the return value of the ``get_device_data`` method in the facts file: .. code-block:: python def load_fixtures(self, commands=None, transport='cli'): def load_from_file(*args, **kwargs): return load_fixture('eos_l2_interfaces_config.cfg') self.execute_show_command.side_effect = load_from_file See the unit test file `test_eos_l2_interfaces `_ for a practical example. .. seealso:: :ref:`testing_units` Deep dive into developing unit tests for Ansible modules :ref:`testing_running_locally` Running tests locally including gathering and reporting coverage data :ref:`developing_modules_general` Get started developing a module ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/dev_guide/documenting_modules_network.rst0000644000000000000000000000535000000000000031266 0ustar00rootroot00000000000000 .. _documenting_modules_network: ********************************* Documenting new network platforms ********************************* .. contents:: :local: When you create network modules for a new platform, or modify the connections provided by an existing network platform (such as ``network_cli`` and ``httpapi``), you also need to update the :ref:`settings_by_platform` table and add or modify the Platform Options file for your platform. You should already have documented each module as described in :ref:`developing_modules_documenting`. Modifying the platform options table ==================================== The :ref:`settings_by_platform` table is a convenient summary of the connections options provided by each network platform that has modules in Ansible. Add a row for your platform to this table, in alphabetical order. For example: .. code-block:: text +-------------------+-------------------------+-------------+---------+---------+----------+ | My OS | ``myos`` | ✓ | ✓ | | ✓ | Ensure that the table stays formatted correctly. That is: * Each row is inserted in alphabetical order. * The cell division ``|`` markers line up with the ``+`` markers. * The check marks appear only for the connection types provided by the network modules. Adding a platform-specific options section ========================================== The platform- specific sections are individual ``.rst`` files that provide more detailed information for the users of your network platform modules. Name your new file ``platform_.rst`` (for example, ``platform_myos.rst``). The platform name should match the module prefix. See `platform_eos.rst `_ and :ref:`eos_platform_options` for an example of the details you should provide in your platform-specific options section. Your platform-specific section should include the following: * **Connections available table** - a deeper dive into each connection type, including details on credentials, indirect access, connections settings, and enable mode. * **How to use each connection type** - with working examples of each connection type. If your network platform supports SSH connections, also include the following at the bottom of your ``.rst`` file: .. code-block:: text .. include:: shared_snippets/SSH_warning.txt Adding your new file to the table of contents ============================================= As a final step, add your new file in alphabetical order in the ``platform_index.rst`` file. You should then build the documentation to verify your additions. See :ref:`community_documentation_contributions` for more details. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/dev_guide/index.rst0000644000000000000000000000301200000000000024551 0ustar00rootroot00000000000000.. _network_developer_guide: ********************************** Network Developer Guide ********************************** Welcome to the Developer Guide for Ansible Network Automation! **Who should use this guide?** If you want to extend Ansible for Network Automation by creating a module or plugin, this guide is for you. This guide is specific to networking. You should already be familiar with how to create, test, and document modules and plugins, as well as the prerequisites for getting your module or plugin accepted into the main Ansible repository. See the :ref:`developer_guide` for details. Before you proceed, please read: * How to :ref:`add a custom plugin or module locally `. * How to figure out if :ref:`developing a module is the right approach ` for my use case. * How to :ref:`set up my Python development environment `. * How to :ref:`get started writing a module `. Find the network developer task that best describes what you want to do: * I want to :ref:`develop a network resource module `. * I want to :ref:`develop a network connection plugin `. * I want to :ref:`document my set of modules for a network platform `. If you prefer to read the entire guide, here's a list of the pages in order. .. toctree:: :maxdepth: 1 developing_resource_modules_network developing_plugins_network documenting_modules_network ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.947559 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/0000755000000000000000000000000000000000000024150 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/basic_concepts.rst0000644000000000000000000000056100000000000027663 0ustar00rootroot00000000000000************** Basic Concepts ************** These concepts are common to all uses of Ansible, including network automation. You need to understand them to use Ansible for network automation. This basic introduction provides the background you need to follow the examples in this guide. .. contents:: :local: .. include:: ../../shared_snippets/basic_concepts.txt ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/first_inventory.rst0000644000000000000000000003453600000000000030161 0ustar00rootroot00000000000000*********************************************** Build Your Inventory *********************************************** Running a playbook without an inventory requires several command-line flags. Also, running a playbook against a single device is not a huge efficiency gain over making the same change manually. The next step to harnessing the full power of Ansible is to use an inventory file to organize your managed nodes into groups with information like the ``ansible_network_os`` and the SSH user. A fully-featured inventory file can serve as the source of truth for your network. Using an inventory file, a single playbook can maintain hundreds of network devices with a single command. This page shows you how to build an inventory file, step by step. .. contents:: :local: Basic inventory ================================================== First, group your inventory logically. Best practice is to group servers and network devices by their What (application, stack or microservice), Where (datacenter or region), and When (development stage): - **What**: db, web, leaf, spine - **Where**: east, west, floor_19, building_A - **When**: dev, test, staging, prod Avoid spaces, hyphens, and preceding numbers (use ``floor_19``, not ``19th_floor``) in your group names. Group names are case sensitive. This tiny example data center illustrates a basic group structure. You can group groups using the syntax ``[metagroupname:children]`` and listing groups as members of the metagroup. Here, the group ``network`` includes all leafs and all spines; the group ``datacenter`` includes all network devices plus all webservers. .. code-block:: yaml --- leafs: hosts: leaf01: ansible_host: 10.16.10.11 leaf02: ansible_host: 10.16.10.12 spines: hosts: spine01: ansible_host: 10.16.10.13 spine02: ansible_host: 10.16.10.14 network: children: leafs: spines: webservers: hosts: webserver01: ansible_host: 10.16.10.15 webserver02: ansible_host: 10.16.10.16 datacenter: children: network: webservers: You can also create this same inventory in INI format. .. code-block:: ini [leafs] leaf01 leaf02 [spines] spine01 spine02 [network:children] leafs spines [webservers] webserver01 webserver02 [datacenter:children] network webservers Add variables to the inventory ================================================================================ Next, you can set values for many of the variables you needed in your first Ansible command in the inventory, so you can skip them in the ``ansible-playbook`` command. In this example, the inventory includes each network device's IP, OS, and SSH user. If your network devices are only accessible by IP, you must add the IP to the inventory file. If you access your network devices using hostnames, the IP is not necessary. .. code-block:: yaml --- leafs: hosts: leaf01: ansible_host: 10.16.10.11 ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user leaf02: ansible_host: 10.16.10.12 ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user spines: hosts: spine01: ansible_host: 10.16.10.13 ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user spine02: ansible_host: 10.16.10.14 ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user network: children: leafs: spines: webservers: hosts: webserver01: ansible_host: 10.16.10.15 ansible_user: my_server_user webserver02: ansible_host: 10.16.10.16 ansible_user: my_server_user datacenter: children: network: webservers: Group variables within inventory ================================================================================ When devices in a group share the same variable values, such as OS or SSH user, you can reduce duplication and simplify maintenance by consolidating these into group variables: .. code-block:: yaml --- leafs: hosts: leaf01: ansible_host: 10.16.10.11 leaf02: ansible_host: 10.16.10.12 vars: ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user spines: hosts: spine01: ansible_host: 10.16.10.13 spine02: ansible_host: 10.16.10.14 vars: ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user network: children: leafs: spines: webservers: hosts: webserver01: ansible_host: 10.16.10.15 webserver02: ansible_host: 10.16.10.16 vars: ansible_user: my_server_user datacenter: children: network: webservers: Variable syntax ================================================================================ The syntax for variable values is different in inventory, in playbooks, and in the ``group_vars`` files, which are covered below. Even though playbook and ``group_vars`` files are both written in YAML, you use variables differently in each. - In an ini-style inventory file you **must** use the syntax ``key=value`` for variable values: ``ansible_network_os=vyos.vyos.vyos``. - In any file with the ``.yml`` or ``.yaml`` extension, including playbooks and ``group_vars`` files, you **must** use YAML syntax: ``key: value``. - In ``group_vars`` files, use the full ``key`` name: ``ansible_network_os: vyos.vyos.vyos``. - In playbooks, use the short-form ``key`` name, which drops the ``ansible`` prefix: ``network_os: vyos.vyos.vyos``. Group inventory by platform ================================================================================ As your inventory grows, you may want to group devices by platform. This allows you to specify platform-specific variables easily for all devices on that platform: .. code-block:: yaml --- leafs: hosts: leaf01: ansible_host: 10.16.10.11 leaf02: ansible_host: 10.16.10.12 spines: hosts: spine01: ansible_host: 10.16.10.13 spine02: ansible_host: 10.16.10.14 network: children: leafs: spines: vars: ansible_connection: ansible.netcommon.network_cli ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user webservers: hosts: webserver01: ansible_host: 10.16.10.15 webserver02: ansible_host: 10.16.10.16 vars: ansible_user: my_server_user datacenter: children: network: webservers: With this setup, you can run ``first_playbook.yml`` with only two flags: .. code-block:: console ansible-playbook -i inventory.yml -k first_playbook.yml With the ``-k`` flag, you provide the SSH password(s) at the prompt. Alternatively, you can store SSH and other secrets and passwords securely in your group_vars files with ``ansible-vault``. See :ref:`network_vault` for details. Verifying the inventory ========================= You can use the :ref:`ansible-inventory` CLI command to display the inventory as Ansible sees it. .. code-block:: console $ ansible-inventory -i test.yml --list { "_meta": { "hostvars": { "leaf01": { "ansible_connection": "ansible.netcommon.network_cli", "ansible_host": "10.16.10.11", "ansible_network_os": "vyos.vyos.vyos", "ansible_user": "my_vyos_user" }, "leaf02": { "ansible_connection": "ansible.netcommon.network_cli", "ansible_host": "10.16.10.12", "ansible_network_os": "vyos.vyos.vyos", "ansible_user": "my_vyos_user" }, "spine01": { "ansible_connection": "ansible.netcommon.network_cli", "ansible_host": "10.16.10.13", "ansible_network_os": "vyos.vyos.vyos", "ansible_user": "my_vyos_user" }, "spine02": { "ansible_connection": "ansible.netcommon.network_cli", "ansible_host": "10.16.10.14", "ansible_network_os": "vyos.vyos.vyos", "ansible_user": "my_vyos_user" }, "webserver01": { "ansible_host": "10.16.10.15", "ansible_user": "my_server_user" }, "webserver02": { "ansible_host": "10.16.10.16", "ansible_user": "my_server_user" } } }, "all": { "children": [ "datacenter", "ungrouped" ] }, "datacenter": { "children": [ "network", "webservers" ] }, "leafs": { "hosts": [ "leaf01", "leaf02" ] }, "network": { "children": [ "leafs", "spines" ] }, "spines": { "hosts": [ "spine01", "spine02" ] }, "webservers": { "hosts": [ "webserver01", "webserver02" ] } } .. _network_vault: Protecting sensitive variables with ``ansible-vault`` ================================================================================ The ``ansible-vault`` command provides encryption for files and/or individual variables like passwords. This tutorial will show you how to encrypt a single SSH password. You can use the commands below to encrypt other sensitive information, such as database passwords, privilege-escalation passwords and more. First you must create a password for ansible-vault itself. It is used as the encryption key, and with this you can encrypt dozens of different passwords across your Ansible project. You can access all those secrets (encrypted values) with a single password (the ansible-vault password) when you run your playbooks. Here's a simple example. 1. Create a file and write your password for ansible-vault to it: .. code-block:: console echo "my-ansible-vault-pw" > ~/my-ansible-vault-pw-file 2. Create the encrypted ssh password for your VyOS network devices, pulling your ansible-vault password from the file you just created: .. code-block:: console ansible-vault encrypt_string --vault-id my_user@~/my-ansible-vault-pw-file 'VyOS_SSH_password' --name 'ansible_password' If you prefer to type your ansible-vault password rather than store it in a file, you can request a prompt: .. code-block:: console ansible-vault encrypt_string --vault-id my_user@prompt 'VyOS_SSH_password' --name 'ansible_password' and type in the vault password for ``my_user``. The :option:`--vault-id ` flag allows different vault passwords for different users or different levels of access. The output includes the user name ``my_user`` from your ``ansible-vault`` command and uses the YAML syntax ``key: value``: .. code-block:: yaml ansible_password: !vault | $ANSIBLE_VAULT;1.2;AES256;my_user 66386134653765386232383236303063623663343437643766386435663632343266393064373933 3661666132363339303639353538316662616638356631650a316338316663666439383138353032 63393934343937373637306162366265383461316334383132626462656463363630613832313562 3837646266663835640a313164343535316666653031353763613037656362613535633538386539 65656439626166666363323435613131643066353762333232326232323565376635 Encryption successful This is an example using an extract from a YAML inventory, as the INI format does not support inline vaults: .. code-block:: yaml ... vyos: # this is a group in yaml inventory, but you can also do under a host vars: ansible_connection: ansible.netcommon.network_cli ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user ansible_password: !vault | $ANSIBLE_VAULT;1.2;AES256;my_user 66386134653765386232383236303063623663343437643766386435663632343266393064373933 3661666132363339303639353538316662616638356631650a316338316663666439383138353032 63393934343937373637306162366265383461316334383132626462656463363630613832313562 3837646266663835640a313164343535316666653031353763613037656362613535633538386539 65656439626166666363323435613131643066353762333232326232323565376635 ... To use an inline vaulted variables with an INI inventory you need to store it in a 'vars' file in YAML format, it can reside in host_vars/ or group_vars/ to be automatically picked up or referenced from a play via ``vars_files`` or ``include_vars``. To run a playbook with this setup, drop the ``-k`` flag and add a flag for your ``vault-id``: .. code-block:: console ansible-playbook -i inventory --vault-id my_user@~/my-ansible-vault-pw-file first_playbook.yml Or with a prompt instead of the vault password file: .. code-block:: console ansible-playbook -i inventory --vault-id my_user@prompt first_playbook.yml To see the original value, you can use the debug module. Please note if your YAML file defines the `ansible_connection` variable (as we used in our example), it will take effect when you execute the command below. To prevent this, please make a copy of the file without the ansible_connection variable. .. code-block:: console cat vyos.yml | grep -v ansible_connection >> vyos_no_connection.yml ansible localhost -m debug -a var="ansible_password" -e "@vyos_no_connection.yml" --ask-vault-pass Vault password: localhost | SUCCESS => { "ansible_password": "VyOS_SSH_password" } .. warning:: Vault content can only be decrypted with the password that was used to encrypt it. If you want to stop using one password and move to a new one, you can update and re-encrypt existing vault content with ``ansible-vault rekey myfile``, then provide the old password and the new password. Copies of vault content still encrypted with the old password can still be decrypted with old password. For more details on building inventory files, see :ref:`the introduction to inventory`; for more details on ansible-vault, see :ref:`the full Ansible Vault documentation`. Now that you understand the basics of commands, playbooks, and inventory, it's time to explore some more complex Ansible Network examples. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5015562 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/first_playbook.rst0000644000000000000000000002217500000000000027740 0ustar00rootroot00000000000000 .. _first_network_playbook: *************************************************** Run Your First Command and Playbook *************************************************** Put the concepts you learned to work with this quick tutorial. Install Ansible, execute a network configuration command manually, execute the same command with Ansible, then create a playbook so you can execute the command any time on multiple network devices. .. contents:: :local: Prerequisites ================================================== Before you work through this tutorial you need: - Ansible 2.10 (or higher) installed - One or more network devices that are compatible with Ansible - Basic Linux command line knowledge - Basic knowledge of network switch & router configuration Install Ansible ================================================== Install Ansible using your preferred method. See :ref:`installation_guide`. Then return to this tutorial. Confirm the version of Ansible (must be >= 2.10): .. code-block:: bash ansible --version Establish a manual connection to a managed node ================================================== To confirm your credentials, connect to a network device manually and retrieve its configuration. Replace the sample user and device name with your real credentials. For example, for a VyOS router: .. code-block:: bash ssh my_vyos_user@vyos.example.net show config exit This manual connection also establishes the authenticity of the network device, adding its RSA key fingerprint to your list of known hosts. (If you have connected to the device before, you have already established its authenticity.) Run your first network Ansible command ================================================== Instead of manually connecting and running a command on the network device, you can retrieve its configuration with a single, stripped-down Ansible command: .. code-block:: bash ansible all -i vyos.example.net, -c ansible.netcommon.network_cli -u my_vyos_user -k -m vyos.vyos.vyos_facts -e ansible_network_os=vyos.vyos.vyos The flags in this command set seven values: - the host group(s) to which the command should apply (in this case, all) - the inventory (-i, the device or devices to target - without the trailing comma -i points to an inventory file) - the connection method (-c, the method for connecting and executing ansible) - the user (-u, the username for the SSH connection) - the SSH connection method (-k, please prompt for the password) - the module (-m, the Ansible module to run, using the fully qualified collection name (FQCN)) - an extra variable ( -e, in this case, setting the network OS value) NOTE: If you use ``ssh-agent`` with ssh keys, Ansible loads them automatically. You can omit ``-k`` flag. .. note:: If you are running Ansible in a virtual environment, you will also need to add the variable ``ansible_python_interpreter=/path/to/venv/bin/python`` Create and run your first network Ansible Playbook ================================================== If you want to run this command every day, you can save it in a playbook and run it with ``ansible-playbook`` instead of ``ansible``. The playbook can store a lot of the parameters you provided with flags at the command line, leaving less to type at the command line. You need two files for this - a playbook and an inventory file. 1. Download :download:`first_playbook.yml `, which looks like this: .. literalinclude:: sample_files/first_playbook.yml :language: YAML The playbook sets three of the seven values from the command line above: the group (``hosts: all``), the connection method (``connection: ansible.netcommon.network_cli``) and the module (in each task). With those values set in the playbook, you can omit them on the command line. The playbook also adds a second task to show the config output. When a module runs in a playbook, the output is held in memory for use by future tasks instead of written to the console. The debug task here lets you see the results in your shell. 2. Run the playbook with the command: .. code-block:: bash ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml The playbook contains one play with two tasks, and should generate output like this: .. code-block:: bash $ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml PLAY [First Playbook] *************************************************************************************************************************** TASK [Get config for VyOS devices] *************************************************************************************************************************** ok: [vyos.example.net] TASK [Display the config] *************************************************************************************************************************** ok: [vyos.example.net] => { "msg": "The hostname is vyos and the OS is VyOS 1.1.8" } 3. Now that you can retrieve the device config, try updating it with Ansible. Download :download:`first_playbook_ext.yml `, which is an extended version of the first playbook: .. literalinclude:: sample_files/first_playbook_ext.yml :language: YAML The extended first playbook has four tasks in a single play. Run it with the same command you used above. The output shows you the change Ansible made to the config: .. code-block:: bash $ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml PLAY [First Playbook] ************************************************************************************************************************************ TASK [Get config for VyOS devices] ********************************************************************************************************************************** ok: [vyos.example.net] TASK [Display the config] ************************************************************************************************************************************* ok: [vyos.example.net] => { "msg": "The hostname is vyos and the OS is VyOS 1.1.8" } TASK [Update the hostname] ************************************************************************************************************************************* changed: [vyos.example.net] TASK [Get changed config for VyOS devices] ************************************************************************************************************************************* ok: [vyos.example.net] TASK [Display the changed config] ************************************************************************************************************************************* ok: [vyos.example.net] => { "msg": "The new hostname is vyos-changed and the OS is VyOS 1.1.8" } PLAY RECAP ************************************************************************************************************************************ vyos.example.net : ok=5 changed=1 unreachable=0 failed=0 .. _network_gather_facts: Gathering facts from network devices ==================================== The ``gather_facts`` keyword now supports gathering network device facts in standardized key/value pairs. You can feed these network facts into further tasks to manage the network device. You can also use the new ``gather_network_resources`` parameter with the network ``*_facts`` modules (such as :ref:`arista.eos.eos_facts `) to return just a subset of the device configuration, as shown below. .. code-block:: yaml - hosts: arista gather_facts: True gather_subset: interfaces module_defaults: arista.eos.eos_facts: gather_network_resources: interfaces The playbook returns the following interface facts: .. code-block:: yaml "network_resources": { "interfaces": [ { "description": "test-interface", "enabled": true, "mtu": "512", "name": "Ethernet1" }, { "enabled": true, "mtu": "3000", "name": "Ethernet2" }, { "enabled": true, "name": "Ethernet3" }, { "enabled": true, "name": "Ethernet4" }, { "enabled": true, "name": "Ethernet5" }, { "enabled": true, "name": "Ethernet6" }, ] } Note that this returns a subset of what is returned by just setting ``gather_subset: interfaces``. You can store these facts and use them directly in another task, such as with the :ref:`eos_interfaces ` resource module. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/index.rst0000644000000000000000000000354300000000000026016 0ustar00rootroot00000000000000.. _network_getting_started: ********************************** Network Getting Started ********************************** Ansible collections support a wide range of vendors, device types, and actions, so you can manage your entire network with a single automation tool. With Ansible, you can: - Automate repetitive tasks to speed routine network changes and free up your time for more strategic work - Leverage the same simple, powerful, and agentless automation tool for network tasks that operations and development use - Separate the data model (in a playbook or role) from the execution layer (via Ansible modules) to manage heterogeneous network devices - Benefit from community and vendor-generated sample playbooks and roles to help accelerate network automation projects - Communicate securely with network hardware over SSH or HTTPS **Who should use this guide?** This guide is intended for network engineers using Ansible for the first time. If you understand networks but have never used Ansible, work through the guide from start to finish. This guide is also useful for experienced Ansible users automating network tasks for the first time. You can use Ansible commands, playbooks and modules to configure hubs, switches, routers, bridges and other network devices. But network modules are different from Linux/Unix and Windows modules, and you must understand some network-specific concepts to succeed. If you understand Ansible but have never automated a network task, start with the second section. This guide introduces basic Ansible concepts and guides you through your first Ansible commands, playbooks and inventory entries. .. toctree:: :maxdepth: 2 :caption: Getting Started Guide basic_concepts network_differences first_playbook first_inventory network_roles intermediate_concepts network_connection_options network_resources ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/intermediate_concepts.rst0000644000000000000000000000330300000000000031251 0ustar00rootroot00000000000000***************** Beyond the basics ***************** This page introduces some concepts that help you manage your Ansible workflow with directory structure and source control. Like the Basic Concepts at the beginning of this guide, these intermediate concepts are common to all uses of Ansible. .. contents:: :local: A typical Ansible filetree ========================== Ansible expects to find certain files in certain places. As you expand your inventory and create and run more network playbooks, keep your files organized in your working Ansible project directory like this: .. code-block:: console . ├── backup │   ├── vyos.example.net_config.2018-02-08@11:10:15 │   ├── vyos.example.net_config.2018-02-12@08:22:41 ├── first_playbook.yml ├── inventory ├── group_vars │   ├── vyos.yml │   └── eos.yml ├── roles │   ├── static_route │   └── system ├── second_playbook.yml └── third_playbook.yml The ``backup`` directory and the files in it get created when you run modules like ``vyos_config`` with the ``backup: yes`` parameter. Tracking changes to inventory and playbooks: source control with git ==================================================================== As you expand your inventory, roles and playbooks, you should place your Ansible projects under source control. We recommend ``git`` for source control. ``git`` provides an audit trail, letting you track changes, roll back mistakes, view history and share the workload of managing, maintaining and expanding your Ansible ecosystem. There are plenty of tutorials and guides to using ``git`` available. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/network_connection_options.rst0000644000000000000000000000367400000000000032377 0ustar00rootroot00000000000000.. _network_connection_options: *************************************** Working with network connection options *************************************** Network modules can support multiple connection protocols, such as ``ansible.netcommon.network_cli``, ``ansible.netcommon.netconf``, and ``ansible.netcommon.httpapi``. These connections include some common options you can set to control how the connection to your network device behaves. Common options are: * ``become`` and ``become_method`` as described in :ref:`privilege_escalation`. * ``network_os`` - set to match your network platform you are communicating with. See the :ref:`platform-specific ` pages. * ``remote_user`` as described in :ref:`connection_set_user`. * Timeout options - ``persistent_command_timeout``, ``persistent_connect_timeout``, and ``timeout``. .. _timeout_options: Setting timeout options ======================= When communicating with a remote device, you have control over how long Ansible maintains the connection to that device, as well as how long Ansible waits for a command to complete on that device. Each of these options can be set as variables in your playbook files, environment variables, or settings in your :ref:`ansible.cfg file `. For example, the three options for controlling the connection timeout are as follows. Using vars (per task): .. code-block:: yaml - name: save running-config cisco.ios.ios_command: commands: copy running-config startup-config vars: ansible_command_timeout: 30 Using the environment variable: .. code-block:: bash $export ANSIBLE_PERSISTENT_COMMAND_TIMEOUT=30 Using the global configuration (in :file:`ansible.cfg`) .. code-block:: ini [persistent_connection ] command_timeout = 30 See :ref:`ansible_variable_precedence` for details on the relative precedence of each of these variables. See the individual connection type to understand each option. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/network_differences.rst0000644000000000000000000001260200000000000030731 0ustar00rootroot00000000000000************************************************************ How Network Automation is Different ************************************************************ Network automation uses the basic Ansible concepts, but there are important differences in how the network modules work. This introduction prepares you to understand the exercises in this guide. .. contents:: :local: Execution on the control node ================================================================================ Unlike most Ansible modules, network modules do not run on the managed nodes. From a user's point of view, network modules work like any other modules. They work with ad hoc commands, playbooks, and roles. Behind the scenes, however, network modules use a different methodology than the other (Linux/Unix and Windows) modules use. Ansible is written and executed in Python. Because the majority of network devices can not run Python, the Ansible network modules are executed on the Ansible control node, where ``ansible`` or ``ansible-playbook`` runs. Network modules also use the control node as a destination for backup files, for those modules that offer a ``backup`` option. With Linux/Unix modules, where a configuration file already exists on the managed node(s), the backup file gets written by default in the same directory as the new, changed file. Network modules do not update configuration files on the managed nodes, because network configuration is not written in files. Network modules write backup files on the control node, usually in the `backup` directory under the playbook root directory. Multiple communication protocols ================================================================================ Because network modules execute on the control node instead of on the managed nodes, they can support multiple communication protocols. The communication protocol (XML over SSH, CLI over SSH, API over HTTPS) selected for each network module depends on the platform and the purpose of the module. Some network modules support only one protocol; some offer a choice. The most common protocol is CLI over SSH. You set the communication protocol with the ``ansible_connection`` variable: .. csv-table:: :header: "Value of ansible_connection", "Protocol", "Requires", "Persistent?" :widths: 30, 10, 10, 10 "ansible.netcommon.network_cli", "CLI over SSH", "network_os setting", "yes" "ansible.netcommon.netconf", "XML over SSH", "network_os setting", "yes" "ansible.netcommon.httpapi", "API over HTTP/HTTPS", "network_os setting", "yes" "local", "depends on provider", "provider setting", "no" .. note:: ``ansible.netcommon.httpapi`` deprecates ``eos_eapi`` and ``nxos_nxapi``. See :ref:`httpapi_plugins` for details and an example. The ``ansible_connection: local`` has been deprecated. Please use one of the persistent connection types listed above instead. With persistent connections, you can define the hosts and credentials only once, rather than in every task. You also need to set the ``network_os`` variable for the specific network platform you are communicating with. For more details on using each connection type on various platforms, see the :ref:`platform-specific ` pages. Collections organized by network platform ================================================================================ A network platform is a set of network devices with a common operating system that can be managed by an Ansible collection, for example: - Arista: `arista.eos `_ - Cisco: `cisco.ios `_, `cisco.iosxr `_, `cisco.nxos `_ - Juniper: `junipernetworks.junos `_ - VyOS `vyos.vyos `_ All modules within a network platform share certain requirements. Some network platforms have specific differences - see the :ref:`platform-specific ` documentation for details. .. _privilege_escalation: Privilege Escalation: ``enable`` mode, ``become``, and ``authorize`` ================================================================================ Several network platforms support privilege escalation, where certain tasks must be done by a privileged user. On network devices this is called the ``enable`` mode (the equivalent of ``sudo`` in \*nix administration). Ansible network modules offer privilege escalation for those network devices that support it. For details of which platforms support ``enable`` mode, with examples of how to use it, see the :ref:`platform-specific ` documentation. Using ``become`` for privilege escalation ----------------------------------------- Use the top-level Ansible parameter ``become: yes`` with ``become_method: enable`` to run a task, play, or playbook with escalated privileges on any network platform that supports privilege escalation. You must use either ``connection: network_cli`` or ``connection: httpapi`` with ``become: yes`` with ``become_method: enable``. If you are using ``network_cli`` to connect Ansible to your network devices, a ``group_vars`` file would look like: .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: cisco.ios.ios ansible_become: yes ansible_become_method: enable For more information, see :ref:`Become and Networks` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/network_resources.rst0000644000000000000000000000364400000000000030474 0ustar00rootroot00000000000000 .. _network_resources: ************************ Resources and next steps ************************ .. contents:: :local: Documents ========= Read more about Ansible for Network Automation: - Network Automation on the `Ansible website `_ - Ansible Network `Blog posts `_ Events (on video and in person) =============================== All sessions at Ansible events are recorded and include many Network-related topics (use Filter by Category to view only Network topics). You can also join us for future events in your area. See: - `Recorded AnsibleFests `_ - `Recorded AnsibleAutomates `_ - `Upcoming Ansible Events `_ page. GitHub repos ============ Ansible hosts module code, examples, demonstrations, and other content on GitHub. Anyone with a GitHub account is able to create Pull Requests (PRs) or issues on these repos: - `Network-Automation `_ is an open community for all things network automation. Have an idea, some playbooks, or roles to share? Email ansible-network@redhat.com and we will add you as a contributor to the repository. - `Ansible collections `_ is the main repository for Ansible-maintained and community collections, including collections for network devices. Chat channels ============= Got questions? Chat with us on: * the ``#ansible-network`` channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) * `Ansible Network Slack `_ - Network & Security Automation Slack community. Check out the #devel channel for discussions on module and plugin development. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/network_roles.rst0000644000000000000000000002650700000000000027611 0ustar00rootroot00000000000000 .. _using_network_roles: ************************* Use Ansible network roles ************************* Roles are sets of Ansible defaults, files, tasks, templates, variables, and other Ansible components that work together. As you saw on :ref:`first_network_playbook`, moving from a command to a playbook makes it easy to run multiple tasks and repeat the same tasks in the same order. Moving from a playbook to a role makes it even easier to reuse and share your ordered tasks. You can look at :ref:`Ansible Galaxy `, which lets you share your roles and use others' roles, either directly or as inspiration. .. contents:: :local: Understanding roles =================== So what exactly is a role, and why should you care? Ansible roles are basically playbooks broken up into a known file structure. Moving to roles from a playbook makes sharing, reading, and updating your Ansible workflow easier. Users can write their own roles. So for example, you don't have to write your own DNS playbook. Instead, you specify a DNS server and a role to configure it for you. To simplify your workflow even further, the Ansible Network team has written a series of roles for common network use cases. Using these roles means you don't have to reinvent the wheel. Instead of writing and maintaining your own ``create_vlan`` playbooks or roles, you can concentrate on designing, codifying and maintaining the parser templates that describe your network topologies and inventory, and let Ansible's network roles do the work. See the `network-related roles `_ on Ansible Galaxy. A sample DNS playbook --------------------- To demonstrate the concept of what a role is, the example ``playbook.yml`` below is a single YAML file containing a two-task playbook. This Ansible Playbook configures the hostname on a Cisco IOS XE device, then it configures the DNS (domain name system) servers. .. code-block:: yaml --- - name: configure cisco routers hosts: routers connection: ansible.netcommon.network_cli gather_facts: no vars: dns: "8.8.8.8 8.8.4.4" tasks: - name: configure hostname cisco.ios.ios_config: lines: hostname {{ inventory_hostname }} - name: configure DNS cisco.ios.ios_config: lines: ip name-server {{dns}} If you run this playbook using the ``ansible-playbook`` command, you'll see the output below. This example used ``-l`` option to limit the playbook to only executing on the **rtr1** node. .. code-block:: bash [user@ansible ~]$ ansible-playbook playbook.yml -l rtr1 PLAY [configure cisco routers] ************************************************* TASK [configure hostname] ****************************************************** changed: [rtr1] TASK [configure DNS] *********************************************************** changed: [rtr1] PLAY RECAP ********************************************************************* rtr1 : ok=2 changed=2 unreachable=0 failed=0 This playbook configured the hostname and DNS servers. You can verify that configuration on the Cisco IOS XE **rtr1** router: .. code-block:: bash rtr1#sh run | i name hostname rtr1 ip name-server 8.8.8.8 8.8.4.4 Convert the playbook into a role --------------------------------- The next step is to convert this playbook into a reusable role. You can create the directory structure manually, or you can use ``ansible-galaxy init`` to create the standard framework for a role. .. code-block:: bash [user@ansible ~]$ ansible-galaxy init system-demo [user@ansible ~]$ cd system-demo/ [user@ansible system-demo]$ tree . ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml This first demonstration uses only the **tasks** and **vars** directories. The directory structure would look as follows: .. code-block:: bash [user@ansible system-demo]$ tree . ├── tasks │ └── main.yml └── vars └── main.yml Next, move the content of the ``vars`` and ``tasks`` sections from the original Ansible Playbook into the role. First, move the two tasks into the ``tasks/main.yml`` file: .. code-block:: bash [user@ansible system-demo]$ cat tasks/main.yml --- - name: configure hostname cisco.ios.ios_config: lines: hostname {{ inventory_hostname }} - name: configure DNS cisco.ios.ios_config: lines: ip name-server {{dns}} Next, move the variables into the ``vars/main.yml`` file: .. code-block:: bash [user@ansible system-demo]$ cat vars/main.yml --- dns: "8.8.8.8 8.8.4.4" Finally, modify the original Ansible Playbook to remove the ``tasks`` and ``vars`` sections and add the keyword ``roles`` with the name of the role, in this case ``system-demo``. You'll have this playbook: .. code-block:: yaml --- - name: configure cisco routers hosts: routers connection: ansible.netcommon.network_cli gather_facts: no roles: - system-demo To summarize, this demonstration now has a total of three directories and three YAML files. There is the ``system-demo`` folder, which represents the role. This ``system-demo`` contains two folders, ``tasks`` and ``vars``. There is a ``main.yml`` is each respective folder. The ``vars/main.yml`` contains the variables from ``playbook.yml``. The ``tasks/main.yml`` contains the tasks from ``playbook.yml``. The ``playbook.yml`` file has been modified to call the role rather than specifying vars and tasks directly. Here is a tree of the current working directory: .. code-block:: bash [user@ansible ~]$ tree . ├── playbook.yml └── system-demo ├── tasks │ └── main.yml └── vars └── main.yml Running the playbook results in identical behavior with slightly different output: .. code-block:: bash [user@ansible ~]$ ansible-playbook playbook.yml -l rtr1 PLAY [configure cisco routers] ************************************************* TASK [system-demo : configure hostname] **************************************** ok: [rtr1] TASK [system-demo : configure DNS] ********************************************* ok: [rtr1] PLAY RECAP ********************************************************************* rtr1 : ok=2 changed=0 unreachable=0 failed=0 As seen above each task is now prepended with the role name, in this case ``system-demo``. When running a playbook that contains several roles, this will help pinpoint where a task is being called from. This playbook returned ``ok`` instead of ``changed`` because it has identical behavior for the single file playbook we started from. As before, the playbook will generate the following configuration on a Cisco IOS-XE router: .. code-block:: bash rtr1#sh run | i name hostname rtr1 ip name-server 8.8.8.8 8.8.4.4 This is why Ansible roles can be simply thought of as deconstructed playbooks. They are simple, effective and reusable. Now another user can simply include the ``system-demo`` role instead of having to create a custom "hard coded" playbook. Variable precedence ------------------- What if you want to change the DNS servers? You aren't expected to change the ``vars/main.yml`` within the role structure. Ansible has many places where you can specify variables for a given play. See :ref:`playbooks_variables` for details on variables and precedence. There are actually 21 places to put variables. While this list can seem overwhelming at first glance, the vast majority of use cases only involve knowing the spot for variables of least precedence and how to pass variables with most precedence. See :ref:`ansible_variable_precedence` for more guidance on where you should put variables. Lowest precedence ^^^^^^^^^^^^^^^^^ The lowest precedence is the ``defaults`` directory within a role. This means all the other 20 locations you could potentially specify the variable will all take higher precedence than ``defaults``, no matter what. To immediately give the vars from the ``system-demo`` role the least precedence, rename the ``vars`` directory to ``defaults``. .. code-block:: bash [user@ansible system-demo]$ mv vars defaults [user@ansible system-demo]$ tree . ├── defaults │ └── main.yml ├── tasks │ └── main.yml Add a new ``vars`` section to the playbook to override the default behavior (where the variable ``dns`` is set to 8.8.8.8 and 8.8.4.4). For this demonstration, set ``dns`` to 1.1.1.1, so ``playbook.yml`` becomes: .. code-block:: yaml --- - name: configure cisco routers hosts: routers connection: ansible.netcommon.network_cli gather_facts: no vars: dns: 1.1.1.1 roles: - system-demo Run this updated playbook on **rtr2**: .. code-block:: bash [user@ansible ~]$ ansible-playbook playbook.yml -l rtr2 The configuration on the **rtr2** Cisco router will look as follows: .. code-block:: bash rtr2#sh run | i name-server ip name-server 1.1.1.1 The variable configured in the playbook now has precedence over the ``defaults`` directory. In fact, any other spot you configure variables would win over the values in the ``defaults`` directory. Highest precedence ^^^^^^^^^^^^^^^^^^ Specifying variables in the ``defaults`` directory within a role will always take the lowest precedence, while specifying ``vars`` as extra vars with the ``-e`` or ``--extra-vars=`` will always take the highest precedence, no matter what. Re-running the playbook with the ``-e`` option overrides both the ``defaults`` directory (8.8.4.4 and 8.8.8.8) as well as the newly created ``vars`` within the playbook that contains the 1.1.1.1 dns server. .. code-block:: bash [user@ansible ~]$ ansible-playbook playbook.yml -e "dns=192.168.1.1" -l rtr3 The result on the Cisco IOS XE router will only contain the highest precedence setting of 192.168.1.1: .. code-block:: bash rtr3#sh run | i name-server ip name-server 192.168.1.1 How is this useful? Why should you care? Extra vars are commonly used by network operators to override defaults. A powerful example of this is with the Job Template Survey feature on AWX or the :ref:`ansible_platform`. It is possible through the web UI to prompt a network operator to fill out parameters with a Web form. This can be really simple for non-technical playbook writers to execute a playbook using their Web browser. Update an installed role ------------------------ The Ansible Galaxy page for a role lists all available versions. To update a locally installed role to a new or different version, use the ``ansible-galaxy install`` command with the version and ``--force`` option. You may also need to manually update any dependent roles to support this version. See the role **Read Me** tab in Galaxy for dependent role minimum version requirements. .. code-block:: bash [user@ansible]$ ansible-galaxy install mynamespace.my_role,v2.7.1 --force .. seealso:: `Ansible Galaxy documentation `_ Ansible Galaxy user guide ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.947559 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/sample_files/0000755000000000000000000000000000000000000026613 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/sample_files/first_playbook.yml0000644000000000000000000000057300000000000032372 0ustar00rootroot00000000000000--- - name: Network Getting Started First Playbook connection: ansible.netcommon.network_cli gather_facts: false hosts: all tasks: - name: Get config for VyOS devices vyos.vyos.vyos_facts: gather_subset: all - name: Display the config debug: msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/getting_started/sample_files/first_playbook_ext.yml0000644000000000000000000000142600000000000033250 0ustar00rootroot00000000000000--- - name: Network Getting Started First Playbook Extended connection: ansible.netcommon.network_cli gather_facts: false hosts: all tasks: - name: Get config for VyOS devices vyos.vyos.vyos_facts: gather_subset: all - name: Display the config debug: msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}" - name: Update the hostname vyos.vyos.vyos_config: backup: yes lines: - set system host-name vyos-changed - name: Get changed config for VyOS devices vyos.vyos.vyos_facts: gather_subset: all - name: Display the changed config debug: msg: "The new hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.502556 ansible-core-2.12.0/docs/docsite/rst/network/index.rst0000644000000000000000000000176500000000000022633 0ustar00rootroot00000000000000:orphan: .. _network_guide: ****************************** Ansible for Network Automation ****************************** Ansible Network modules extend the benefits of simple, powerful, agentless automation to network administrators and teams. Ansible Network modules can configure your network stack, test and validate existing network state, and discover and correct network configuration drift. If you're new to Ansible, or new to using Ansible for network management, start with :ref:`network_getting_started`. If you are already familiar with network automation with Ansible, see :ref:`network_advanced`. For documentation on using a particular network module, consult the :ref:`list of all network modules`. Network modules for various hardware are supported by different teams including the hardware vendors themselves, volunteers from the Ansible community, and the Ansible Network Team. .. toctree:: :maxdepth: 3 getting_started/index user_guide/index dev_guide/index ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9505591 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/0000755000000000000000000000000000000000000023114 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/cli_parsing.rst0000644000000000000000000006652600000000000026157 0ustar00rootroot00000000000000.. _cli_parsing: ***************************************** Parsing semi-structured text with Ansible ***************************************** The :ref:`cli_parse ` module parses semi-structured data such as network configurations into structured data to allow programmatic use of the data from that device. You can pull information from a network device and update a CMDB in one playbook. Use cases include automated troubleshooting, creating dynamic documentation, updating IPAM (IP address management) tools and so on. .. contents:: :local: Understanding the CLI parser ============================= The `ansible.utils `_ collection version 1.0.0 or later includes the :ref:`cli_parse ` module that can run CLI commands and parse the semi-structured text output. You can use the ``cli_parse`` module on a device, host, or platform that only supports a command-line interface and the commands issued return semi-structured text. The ``cli_parse`` module can either run a CLI command on a device and return a parsed result or can simply parse any text document. The ``cli_parse`` module includes cli_parser plugins to interface with a variety of parsing engines. Why parse the text? -------------------- Parsing semi-structured data such as network configurations into structured data allows programmatic use of the data from that device. Use cases include automated troubleshooting, creating dynamic documentation, updating IPAM (IP address management) tools and so on. You may prefer to do this with Ansible natively to take advantage of native Ansible constructs such as: - The ``when`` clause to conditionally run other tasks or roles - The ``assert`` module to check configuration and operational state compliance - The ``template`` module to generate reports about configuration and operational state information - Templates and ``command`` or ``config`` modules to generate host, device, or platform commands or configuration - The current platform ``facts`` modules to supplement native facts information By parsing semi-structured text into Ansible native data structures, you can take full advantage of Ansible's network modules and plugins. When not to parse the text --------------------------- You should not parse semi-structured text when: - The device, host, or platform has a RESTAPI and returns JSON. - Existing Ansible facts modules already return the desired data. - Ansible network resource modules exist for configuration management of the device and resource. Parsing the CLI ========================= The ``cli_parse`` module includes the following cli_parsing plugins: ``native`` The native parsing engine built into Ansible and requires no addition python libraries ``xml`` Convert XML to an Ansible native data structure ``textfsm`` A python module which implements a template based state machine for parsing semi-formatted text ``ntc_templates`` Predefined ``textfsm`` templates packages supporting a variety of platforms and commands ``ttp`` A library for semi-structured text parsing using templates, with added capabilities to simplify the process ``pyats`` Uses the parsers included with the Cisco Test Automation & Validation Solution ``jc`` A python module that converts the output of dozens of popular Linux/UNIX/macOS/Windows commands and file types to python dictionaries or lists of dictionaries. Note: this filter plugin can be found in the ``community.general`` collection. ``json`` Converts JSON output at the CLI to an Ansible native data structure Although Ansible contains a number of plugins that can convert XML to Ansible native data structures, the ``cli_parse`` module runs the command on devices that return XML and returns the converted data in a single task. Because ``cli_parse`` uses a plugin based architecture, it can use additional parsing engines from any Ansible collection. .. note:: The ``ansible.netcommon.native`` and ``ansible.utils.json`` parsing engines are fully supported with a Red Hat Ansible Automation Platform subscription. Red Hat Ansible Automation Platform subscription support is limited to the use of the ``ntc_templates``, pyATS, ``textfsm``, ``xmltodict``, public APIs as documented. Parsing with the native parsing engine -------------------------------------- The native parsing engine is included with the ``cli_parse`` module. It uses data captured using regular expressions to populate the parsed data structure. The native parsing engine requires a YAML template file to parse the command output. Networking example ^^^^^^^^^^^^^^^^^^ This example uses the output of a network device command and applies a native template to produce an output in Ansible structured data format. The ``show interface`` command output from the network device looks as follows: .. code-block:: console Ethernet1/1 is up admin state is up, Dedicated Interface Hardware: 100/1000/10000 Ethernet, address: 5254.005a.f8bd (bia 5254.005a.f8bd) MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, medium is broadcast Port mode is access full-duplex, auto-speed Beacon is turned off Auto-Negotiation is turned on FEC mode is Auto Input flow-control is off, output flow-control is off Auto-mdix is turned off Switchport monitor is off EtherType is 0x8100 EEE (efficient-ethernet) : n/a Last link flapped 4week(s) 6day(s) Last clearing of "show interface" counters never <...> Create the native template to match this output and store it as ``templates/nxos_show_interface.yaml``: .. code-block:: yaml --- - example: Ethernet1/1 is up getval: '(?P\S+) is (?P\S+)' result: "{{ name }}": name: "{{ name }}" state: operating: "{{ oper_state }}" shared: true - example: admin state is up, Dedicated Interface getval: 'admin state is (?P\S+),' result: "{{ name }}": name: "{{ name }}" state: admin: "{{ admin_state }}" - example: " Hardware: Ethernet, address: 5254.005a.f8b5 (bia 5254.005a.f8b5)" getval: '\s+Hardware: (?P.*), address: (?P\S+)' result: "{{ name }}": hardware: "{{ hardware }}" mac_address: "{{ mac }}" This native parser template is structured as a list of parsers, each containing the following key-value pairs: - ``example`` - An example line of the text line to be parsed - ``getval`` - A regular expression using named capture groups to store the extracted data - ``result`` - A data tree, populated as a template, from the parsed data - ``shared`` - (optional) The shared key makes the parsed values available to the rest of the parser entries until matched again. The following example task uses ``cli_parse`` with the native parser and the example template above to parse the ``show interface`` command from a Cisco NXOS device: .. code-block:: yaml - name: "Run command and parse with native" ansible.utils.cli_parse: command: show interface parser: name: ansible.netcommon.native set_fact: interfaces Taking a deeper dive into this task: - The ``command`` option provides the command you want to run on the device or host. Alternately, you can provide text from a previous command with the ``text`` option instead. - The ``parser`` option provides information specific to the parser engine. - The ``name`` suboption provides the fully qualified collection name (FQCN) of the parsing engine (``ansible.netcommon.native``). - The ``cli_parse`` module, by default, looks for the template in the templates directory as ``{{ short_os }}_{{ command }}.yaml``. - The ``short_os`` in the template filename is derived from either the host ``ansible_network_os`` or ``ansible_distribution``. - Spaces in the network or host command are replace with ``_`` in the ``command`` portion of the template filename. In this example, the ``show interfaces`` network CLI command becomes ``show_interfaces`` in the filename. .. note:: ``ansible.netcommon.native`` parsing engine is fully supported with a Red Hat Ansible Automation Platform subscription. Lastly in this task, the ``set_fact`` option sets the following ``interfaces`` fact for the device based on the now-structured data returned from ``cli_parse``: .. code-block:: yaml Ethernet1/1: hardware: 100/1000/10000 Ethernet mac_address: 5254.005a.f8bd name: Ethernet1/1 state: admin: up operating: up Ethernet1/10: hardware: 100/1000/10000 Ethernet mac_address: 5254.005a.f8c6 <...> Linux example ^^^^^^^^^^^^^ You can also use the native parser to run commands and parse output from Linux hosts. The output of a sample Linux command (``ip addr show``) looks as follows: .. code-block:: bash 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s31f6: mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether x2:6a:64:9d:84:19 brd ff:ff:ff:ff:ff:ff 3: wlp2s0: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether x6:c2:44:f7:41:e0 brd ff:ff:ff:ff:ff:ff permaddr d8:f2:ca:99:5c:82 Create the native template to match this output and store it as ``templates/fedora_ip_addr_show.yaml``: .. code-block:: yaml --- - example: '1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000' getval: | (?x) # free-spacing \d+:\s # the interface index (?P\S+):\s # the name <(?P\S+)> # the properties \smtu\s(?P\d+) # the mtu .* # gunk state\s(?P\S+) # the state of the interface result: "{{ name }}": name: "{{ name }}" loopback: "{{ 'LOOPBACK' in stats.split(',') }}" up: "{{ 'UP' in properties.split(',') }}" carrier: "{{ not 'NO-CARRIER' in properties.split(',') }}" broadcast: "{{ 'BROADCAST' in properties.split(',') }}" multicast: "{{ 'MULTICAST' in properties.split(',') }}" state: "{{ state|lower() }}" mtu: "{{ mtu }}" shared: True - example: 'inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0' getval: | (?x) # free-spacing \s+inet\s(?P([0-9]{1,3}\.){3}[0-9]{1,3}) # the ip address /(?P\d{1,2}) # the mask bits result: "{{ name }}": ip_address: "{{ inet }}" mask_bits: "{{ bits }}" .. note:: The ``shared`` key in the parser template allows the interface name to be used in subsequent parser entries. The use of examples and free-spacing mode with the regular expressions makes the template easier to read. The following example task uses ``cli_parse`` with the native parser and the example template above to parse the Linux output: .. code-block:: yaml - name: Run command and parse ansible.utils.cli_parse: command: ip addr show parser: name: ansible.netcommon.native set_fact: interfaces This task assumes you previously gathered facts to determine the ``ansible_distribution`` needed to locate the template. Alternately, you could provide the path in the ``parser/template_path`` option. Lastly in this task, the ``set_fact`` option sets the following ``interfaces`` fact for the host, based on the now-structured data returned from ``cli_parse``: .. code-block:: yaml lo: broadcast: false carrier: true ip_address: 127.0.0.1 mask_bits: 8 mtu: 65536 multicast: false name: lo state: unknown up: true enp64s0u1: broadcast: true carrier: true ip_address: 192.168.86.83 mask_bits: 24 mtu: 1500 multicast: true name: enp64s0u1 state: up up: true <...> Parsing JSON ------------- Although Ansible will natively convert serialized JSON to Ansible native data when recognized, you can also use the ``cli_parse`` module for this conversion. Example task: .. code-block:: yaml - name: "Run command and parse as json" ansible.utils.cli_parse: command: show interface | json parser: name: ansible.utils.json register: interfaces Taking a deeper dive into this task: - The ``show interface | json`` command is issued on the device. - The output is set as the ``interfaces`` fact for the device. - JSON support is provided primarily for playbook consistency. .. note:: The use of ``ansible.netcommon.json`` is fully supported with a Red Hat Ansible Automation Platform subscription Parsing with ntc_templates ---------------------------- The ``ntc_templates`` python library includes pre-defined ``textfsm`` templates for parsing a variety of network device commands output. Example task: .. code-block:: yaml - name: "Run command and parse with ntc_templates" ansible.utils.cli_parse: command: show interface parser: name: ansible.netcommon.ntc_templates set_fact: interfaces Taking a deeper dive into this task: - The ``ansible_network_os`` of the device is converted to the ntc_template format ``cisco_nxos``. Alternately, you can provide the ``os`` with the ``parser/os`` option instead. - The ``cisco_nxos_show_interface.textfsm`` template, included with the ``ntc_templates`` package, parses the output. - See `the ntc_templates README `_ for additional information about the ``ntc_templates`` python library. .. note:: Red Hat Ansible Automation Platform subscription support is limited to the use of the ``ntc_templates`` public APIs as documented. This task and and the predefined template sets the following fact as the ``interfaces`` fact for the host: .. code-block:: yaml interfaces: - address: 5254.005a.f8b5 admin_state: up bandwidth: 1000000 Kbit bia: 5254.005a.f8b5 delay: 10 usec description: '' duplex: full-duplex encapsulation: ARPA hardware_type: Ethernet input_errors: '' input_packets: '' interface: mgmt0 ip_address: 192.168.101.14/24 last_link_flapped: '' link_status: up mode: '' mtu: '1500' output_errors: '' output_packets: '' speed: 1000 Mb/s - address: 5254.005a.f8bd admin_state: up bandwidth: 1000000 Kbit bia: 5254.005a.f8bd delay: 10 usec Parsing with pyATS ---------------------- ``pyATS`` is part of the Cisco Test Automation & Validation Solution. It includes many predefined parsers for a number of network platforms and commands. You can use the predefined parsers that are part of the ``pyATS`` package with the ``cli_parse`` module. Example task: .. code-block:: yaml - name: "Run command and parse with pyats" ansible.utils.cli_parse: command: show interface parser: name: ansible.netcommon.pyats set_fact: interfaces Taking a deeper dive into this task: - The ``cli_parse`` modules converts the ``ansible_network_os`` automatically (in this example, ``ansible_network_os`` set to ``cisco.nxos.nxos``, converts to ``nxos`` for pyATS. Alternately, you can set the OS with the ``parser/os`` option instead. - Using a combination of the command and OS, the pyATS selects the following parser: https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/parsers/show%2520interface. - The ``cli_parse`` module sets ``cisco.ios.ios`` to ``iosxe`` for pyATS. You can override this with the ``parser/os`` option. - ``cli_parse`` only uses the predefined parsers in pyATS. See the `pyATS documentation `_ and the full list of `pyATS included parsers `_. .. note:: Red Hat Ansible Automation Platform subscription support is limited to the use of the pyATS public APIs as documented. This task sets the following fact as the ``interfaces`` fact for the host: .. code-block:: yaml mgmt0: admin_state: up auto_mdix: 'off' auto_negotiate: true bandwidth: 1000000 counters: in_broadcast_pkts: 3 in_multicast_pkts: 1652395 in_octets: 556155103 in_pkts: 2236713 in_unicast_pkts: 584259 rate: in_rate: 320 in_rate_pkts: 0 load_interval: 1 out_rate: 48 out_rate_pkts: 0 rx: true tx: true delay: 10 duplex_mode: full enabled: true encapsulations: encapsulation: arpa ethertype: '0x0000' ipv4: 192.168.101.14/24: ip: 192.168.101.14 prefix_length: '24' link_state: up <...> Parsing with textfsm --------------------- ``textfsm`` is a Python module which implements a template-based state machine for parsing semi-formatted text. The following sample``textfsm`` template is stored as ``templates/nxos_show_interface.textfsm`` .. code-block:: text Value Required INTERFACE (\S+) Value LINK_STATUS (.+?) Value ADMIN_STATE (.+?) Value HARDWARE_TYPE (.\*) Value ADDRESS ([a-zA-Z0-9]+.[a-zA-Z0-9]+.[a-zA-Z0-9]+) Value BIA ([a-zA-Z0-9]+.[a-zA-Z0-9]+.[a-zA-Z0-9]+) Value DESCRIPTION (.\*) Value IP_ADDRESS (\d+\.\d+\.\d+\.\d+\/\d+) Value MTU (\d+) Value MODE (\S+) Value DUPLEX (.+duplex?) Value SPEED (.+?) Value INPUT_PACKETS (\d+) Value OUTPUT_PACKETS (\d+) Value INPUT_ERRORS (\d+) Value OUTPUT_ERRORS (\d+) Value BANDWIDTH (\d+\s+\w+) Value DELAY (\d+\s+\w+) Value ENCAPSULATION (\w+) Value LAST_LINK_FLAPPED (.+?) Start ^\S+\s+is.+ -> Continue.Record ^${INTERFACE}\s+is\s+${LINK_STATUS},\sline\sprotocol\sis\s${ADMIN_STATE}$$ ^${INTERFACE}\s+is\s+${LINK_STATUS}$$ ^admin\s+state\s+is\s+${ADMIN_STATE}, ^\s+Hardware(:|\s+is)\s+${HARDWARE_TYPE},\s+address(:|\s+is)\s+${ADDRESS}(.*bia\s+${BIA})* ^\s+Description:\s+${DESCRIPTION} ^\s+Internet\s+Address\s+is\s+${IP_ADDRESS} ^\s+Port\s+mode\s+is\s+${MODE} ^\s+${DUPLEX}, ${SPEED}(,|$$) ^\s+MTU\s+${MTU}.\*BW\s+${BANDWIDTH}.\*DLY\s+${DELAY} ^\s+Encapsulation\s+${ENCAPSULATION} ^\s+${INPUT_PACKETS}\s+input\s+packets\s+\d+\s+bytes\s\*$$ ^\s+${INPUT_ERRORS}\s+input\s+error\s+\d+\s+short\s+frame\s+\d+\s+overrun\s+\d+\s+underrun\s+\d+\s+ignored\s\*$$ ^\s+${OUTPUT_PACKETS}\s+output\s+packets\s+\d+\s+bytes\s\*$$ ^\s+${OUTPUT_ERRORS}\s+output\s+error\s+\d+\s+collision\s+\d+\s+deferred\s+\d+\s+late\s+collision\s\*$$ ^\s+Last\s+link\s+flapped\s+${LAST_LINK_FLAPPED}\s\*$$ The following task uses the example template for ``textfsm`` with the ``cli_parse`` module. .. code-block:: yaml - name: "Run command and parse with textfsm" ansible.utils.cli_parse: command: show interface parser: name: ansible.utils.textfsm set_fact: interfaces Taking a deeper dive into this task: - The ``ansible_network_os`` for the device (``cisco.nxos.nxos``) is converted to ``nxos``. Alternately you can provide the OS in the ``parser/os`` option instead. - The textfsm template name defaulted to ``templates/nxos_show_interface.textfsm`` using a combination of the OS and command run. Alternately you can override the generated template path with the ``parser/template_path`` option. - See the `textfsm README `_ for details. - ``textfsm`` was previously made available as a filter plugin. Ansible users should transition to the ``cli_parse`` module. .. note:: Red Hat Ansible Automation Platform subscription support is limited to the use of the ``textfsm`` public APIs as documented. This task sets the following fact as the ``interfaces`` fact for the host: .. code-block:: yaml - ADDRESS: X254.005a.f8b5 ADMIN_STATE: up BANDWIDTH: 1000000 Kbit BIA: X254.005a.f8b5 DELAY: 10 usec DESCRIPTION: '' DUPLEX: full-duplex ENCAPSULATION: ARPA HARDWARE_TYPE: Ethernet INPUT_ERRORS: '' INPUT_PACKETS: '' INTERFACE: mgmt0 IP_ADDRESS: 192.168.101.14/24 LAST_LINK_FLAPPED: '' LINK_STATUS: up MODE: '' MTU: '1500' OUTPUT_ERRORS: '' OUTPUT_PACKETS: '' SPEED: 1000 Mb/s - ADDRESS: X254.005a.f8bd ADMIN_STATE: up BANDWIDTH: 1000000 Kbit BIA: X254.005a.f8bd Parsing with TTP ----------------- TTP is a Python library for semi-structured text parsing using templates. TTP uses a jinja-like syntax to limit the need for regular expressions. Users familiar with jinja templating may find the TTP template syntax familiar. The following is an example TTP template stored as ``templates/nxos_show_interface.ttp``: .. code-block:: jinja {{ interface }} is {{ state }} admin state is {{ admin_state }}{{ ignore(".\*") }} The following task uses this template to parse the ``show interface`` command output: .. code-block:: yaml - name: "Run command and parse with ttp" ansible.utils.cli_parse: command: show interface parser: name: ansible.utils.ttp set_fact: interfaces Taking a deeper dive in this task: - The default template path ``templates/nxos_show_interface.ttp`` was generated using the ``ansible_network_os`` for the host and ``command`` provided. - TTP supports several additional variables that will be passed to the parser. These include: - ``parser/vars/ttp_init`` - Additional parameter passed when the parser is initialized. - ``parser/vars/ttp_results`` - Additional parameters used to influence the parser output. - ``parser/vars/ttp_vars`` - Additional variables made available in the template. - See the `TTP documentation `_ for details. The task sets the follow fact as the ``interfaces`` fact for the host: .. code-block:: yaml - admin_state: up, interface: mgmt0 state: up - admin_state: up, interface: Ethernet1/1 state: up - admin_state: up, interface: Ethernet1/2 state: up Parsing with JC ----------------- JC is a python library that converts the output of dozens of common Linux/UNIX/macOS/Windows command-line tools and file types to python dictionaries or lists of dictionaries for easier parsing. JC is available as a filter plugin in the ``community.general`` collection. The following is an example using JC to parse the output of the ``dig`` command: .. code-block:: yaml - name: "Run dig command and parse with jc" hosts: ubuntu tasks: - shell: dig example.com register: result - set_fact: myvar: "{{ result.stdout | community.general.jc('dig') }}" - debug: msg: "The IP is: {{ myvar[0].answer[0].data }}" - The JC project and documentation can be found `here `_. - See this `blog entry `_ for more information. Converting XML ----------------- Although Ansible contains a number of plugins that can convert XML to Ansible native data structures, the ``cli_parse`` module runs the command on devices that return XML and returns the converted data in a single task. This example task runs the ``show interface`` command and parses the output as XML: .. code-block:: yaml - name: "Run command and parse as xml" ansible.utils.cli_parse: command: show interface | xml parser: name: ansible.utils.xml set_fact: interfaces .. note:: Red Hat Ansible Automation Platform subscription support is limited to the use of the ``xmltodict`` public APIs as documented. This task sets the ``interfaces`` fact for the host based on this returned output: .. code-block:: yaml nf:rpc-reply: '@xmlns': http://www.cisco.com/nxos:1.0:if_manager '@xmlns:nf': urn:ietf:params:xml:ns:netconf:base:1.0 nf:data: show: interface: __XML__OPT_Cmd_show_interface_quick: __XML__OPT_Cmd_show_interface___readonly__: __readonly__: TABLE_interface: ROW_interface: - admin_state: up encapsulation: ARPA eth_autoneg: 'on' eth_bia_addr: x254.005a.f8b5 eth_bw: '1000000' Advanced use cases =================== The ``cli_parse`` module supports several features to support more complex uses cases. Provide a full template path ----------------------------- Use the ``template_path`` option to override the default template path in the task: .. code-block:: yaml - name: "Run command and parse with native" ansible.utils.cli_parse: command: show interface parser: name: ansible.netcommon.native template_path: /home/user/templates/filename.yaml Provide command to parser different than the command run ----------------------------------------------------------- Use the ``command`` suboption for the ``parser`` to configure the command the parser expects if it is different from the command ``cli_parse`` runs: .. code-block:: yaml - name: "Run command and parse with native" ansible.utils.cli_parse: command: sho int parser: name: ansible.netcommon.native command: show interface Provide a custom OS value -------------------------------- Use the ``os`` suboption to the parser to directly set the OS instead of using ``ansible_network_os`` or ``ansible_distribution`` to generate the template path or with the specified parser engine: .. code-block:: yaml - name: Use ios instead of iosxe for pyats ansible.utils.cli_parse: command: show something parser: name: ansible.netcommon.pyats os: ios - name: Use linux instead of fedora from ansible_distribution ansible.utils.cli_parse: command: ps -ef parser: name: ansible.netcommon.native os: linux Parse existing text -------------------- Use the ``text`` option instead of ``command`` to parse text collected earlier in the playbook. .. code-block:: yaml # using /home/user/templates/filename.yaml - name: "Parse text from previous task" ansible.utils.cli_parse: text: "{{ output['stdout'] }}" parser: name: ansible.netcommon.native template_path: /home/user/templates/filename.yaml # using /home/user/templates/filename.yaml - name: "Parse text from file" ansible.utils.cli_parse: text: "{{ lookup('file', 'path/to/file.txt') }}" parser: name: ansible.netcommon.native template_path: /home/user/templates/filename.yaml # using templates/nxos_show_version.yaml - name: "Parse text from previous task" ansible.utils.cli_parse: text: "{{ sho_version['stdout'] }}" parser: name: ansible.netcommon.native os: nxos command: show version .. seealso:: * :ref:`develop_cli_parse_plugins` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/faq.rst0000644000000000000000000001265300000000000024424 0ustar00rootroot00000000000000.. _network_faq: ******************* Ansible Network FAQ ******************* .. contents:: Topics .. _network_faq_performance: How can I improve performance for network playbooks? ==================================================== .. _network_faq_strategy_free: Consider ``strategy: free`` if you are running on multiple hosts --------------------------------------------------------------------------------- The ``strategy`` plugin tells Ansible how to order multiple tasks on multiple hosts. :ref:`Strategy` is set at the playbook level. The default strategy is ``linear``. With strategy set to ``linear``, Ansible waits until the current task has run on all hosts before starting the next task on any host. Ansible may have forks free, but will not use them until all hosts have completed the current task. If each task in your playbook must succeed on all hosts before you run the next task, use the ``linear`` strategy. Using the ``free`` strategy, Ansible uses available forks to execute tasks on each host as quickly as possible. Even if an earlier task is still running on one host, Ansible executes later tasks on other hosts. The ``free`` strategy uses available forks more efficiently. If your playbook stalls on each task, waiting for one slow host, consider using ``strategy: free`` to boost overall performance. .. _network_faq_limit_show_running: Execute ``show running`` only if you absolutely must --------------------------------------------------------------------------------- The ``show running`` command is the most resource-intensive command to execute on a network device, because of the way queries are handled by the network OS. Using the command in your Ansible playbook will slow performance significantly, especially on large devices; repeating it will multiply the performance hit. If you have a playbook that checks the running config, then executes changes, then checks the running config again, you should expect that playbook to be very slow. .. _network_faq_limit_ProxyCommand: Use ``ProxyCommand`` only if you absolutely must --------------------------------------------------------------------------------- Network modules support the use of a :ref:`proxy or jump host` with the ``ProxyCommand`` parameter. However, when you use a jump host, Ansible must open a new SSH connection for every task, even if you are using a persistent connection type (``network_cli`` or ``netconf``). To maximize the performance benefits of the persistent connection types introduced in version 2.5, avoid using jump hosts whenever possible. .. _network_faq_set_forks: Set ``--forks`` to match your needs --------------------------------------------------------------------------------- Every time Ansible runs a task, it forks its own process. The ``--forks`` parameter defines the number of concurrent tasks - if you retain the default setting, which is ``--forks=5``, and you are running a playbook on 10 hosts, five of those hosts will have to wait until a fork is available. Of course, the more forks you allow, the more memory and processing power Ansible will use. Since most network tasks are run on the control host, this means your laptop can quickly become cpu- or memory-bound. .. _network_faq_redacted_output: Why is my output sometimes replaced with ``********``? ====================================================== Ansible replaces any string marked ``no_log``, including passwords, with ``********`` in Ansible output. This is done by design, to protect your sensitive data. Most users are happy to have their passwords redacted. However, Ansible replaces every string that matches your password with ``********``. If you use a common word for your password, this can be a problem. For example, if you choose ``Admin`` as your password, Ansible will replace every instance of the word ``Admin`` with ``********`` in your output. This may make your output harder to read. To avoid this problem, select a secure password that will not occur elsewhere in your Ansible output. .. _network_faq_no_abbreviations_with_config: Why do the ``*_config`` modules always return ``changed=true`` with abbreviated commands? ========================================================================================= When you issue commands directly on a network device, you can use abbreviated commands. For example, ``int g1/0/11`` and ``interface GigabitEthernet1/0/11`` do the same thing; ``shut`` and ``shutdown`` do the same thing. Ansible Network ``*_command`` modules work with abbreviations, because they run commands through the network OS. When committing configuration, however, the network OS converts abbreviations into long-form commands. Whether you use ``shut`` or ``shutdown`` on ``GigabitEthernet1/0/11``, the result in the configuration is the same: ``shutdown``. Ansible Network ``*_config`` modules compare the text of the commands you specify in ``lines`` to the text in the configuration. If you use ``shut`` in the ``lines`` section of your task, and the configuration reads ``shutdown``, the module returns ``changed=true`` even though the configuration is already correct. Your task will update the configuration every time it runs. To avoid this problem, use long-form commands with the ``*_config`` modules: .. code-block:: yaml --- - hosts: all gather_facts: no tasks: - cisco.ios.ios_config: lines: - shutdown parents: interface GigabitEthernet1/0/11 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/index.rst0000644000000000000000000000202500000000000024754 0ustar00rootroot00000000000000.. _network_advanced: ********************************** Network Advanced Topics ********************************** Once you have mastered the basics of network automation with Ansible, as presented in :ref:`network_getting_started`, use this guide understand platform-specific details, optimization, and troubleshooting tips for Ansible for network automation. **Who should use this guide?** This guide is intended for network engineers using Ansible for automation. It covers advanced topics. If you understand networks and Ansible, this guide is for you. You may read through the entire guide if you choose, or use the links below to find the specific information you need. If you're new to Ansible, or new to using Ansible for network automation, start with the :ref:`network_getting_started`. .. toctree:: :maxdepth: 2 :caption: Advanced Topics network_resource_modules network_best_practices_2.5 cli_parsing validate network_debug_troubleshooting network_working_with_command_output faq platform_index ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/network_best_practices_2.5.rst0000644000000000000000000004562700000000000031013 0ustar00rootroot00000000000000.. _network-best-practices: ************************ Ansible Network Examples ************************ This document describes some examples of using Ansible to manage your network infrastructure. .. contents:: :local: Prerequisites ============= This example requires the following: * **Ansible 2.10** (or higher) installed. See :ref:`intro_installation_guide` for more information. * One or more network devices that are compatible with Ansible. * Basic understanding of YAML :ref:`yaml_syntax`. * Basic understanding of Jinja2 templates. See :ref:`playbooks_templating` for more information. * Basic Linux command line use. * Basic knowledge of network switch & router configurations. Groups and variables in an inventory file ========================================= An ``inventory`` file is a YAML or INI-like configuration file that defines the mapping of hosts into groups. In our example, the inventory file defines the groups ``eos``, ``ios``, ``vyos`` and a "group of groups" called ``switches``. Further details about subgroups and inventory files can be found in the :ref:`Ansible inventory Group documentation `. Because Ansible is a flexible tool, there are a number of ways to specify connection information and credentials. We recommend using the ``[my_group:vars]`` capability in your inventory file. .. code-block:: ini [all:vars] # these defaults can be overridden for any group in the [group:vars] section ansible_connection=ansible.netcommon.network_cli ansible_user=ansible [switches:children] eos ios vyos [eos] veos01 ansible_host=veos-01.example.net veos02 ansible_host=veos-02.example.net veos03 ansible_host=veos-03.example.net veos04 ansible_host=veos-04.example.net [eos:vars] ansible_become=yes ansible_become_method=enable ansible_network_os=arista.eos.eos ansible_user=my_eos_user ansible_password=my_eos_password [ios] ios01 ansible_host=ios-01.example.net ios02 ansible_host=ios-02.example.net ios03 ansible_host=ios-03.example.net [ios:vars] ansible_become=yes ansible_become_method=enable ansible_network_os=cisco.ios.ios ansible_user=my_ios_user ansible_password=my_ios_password [vyos] vyos01 ansible_host=vyos-01.example.net vyos02 ansible_host=vyos-02.example.net vyos03 ansible_host=vyos-03.example.net [vyos:vars] ansible_network_os=vyos.vyos.vyos ansible_user=my_vyos_user ansible_password=my_vyos_password If you use ssh-agent, you do not need the ``ansible_password`` lines. If you use ssh keys, but not ssh-agent, and you have multiple keys, specify the key to use for each connection in the ``[group:vars]`` section with ``ansible_ssh_private_key_file=/path/to/correct/key``. For more information on ``ansible_ssh_`` options see :ref:`behavioral_parameters`. .. FIXME FUTURE Gundalow - Link to network auth & proxy page (to be written) .. warning:: Never store passwords in plain text. Ansible vault for password encryption ------------------------------------- The "Vault" feature of Ansible allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plain text in your playbooks or roles. These vault files can then be distributed or placed in source control. See :ref:`playbooks_vault` for more information. Here's what it would look like if you specified your SSH passwords (encrypted with Ansible Vault) among your variables: .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: vyos.vyos.vyos ansible_user: my_vyos_user ansible_ssh_pass: !vault | $ANSIBLE_VAULT;1.1;AES256 39336231636137663964343966653162353431333566633762393034646462353062633264303765 6331643066663534383564343537343334633031656538370a333737656236393835383863306466 62633364653238323333633337313163616566383836643030336631333431623631396364663533 3665626431626532630a353564323566316162613432373738333064366130303637616239396438 9853 Common inventory variables -------------------------- The following variables are common for all platforms in the inventory, though they can be overwritten for a particular inventory group or host. :ansible_connection: Ansible uses the ansible-connection setting to determine how to connect to a remote device. When working with Ansible Networking, set this to an appropriate network connection option, such as``ansible.netcommon.network_cli``, so Ansible treats the remote node as a network device with a limited execution environment. Without this setting, Ansible would attempt to use ssh to connect to the remote and execute the Python script on the network device, which would fail because Python generally isn't available on network devices. :ansible_network_os: Informs Ansible which Network platform this hosts corresponds to. This is required when using the ``ansible.netcommon.*`` connection options. :ansible_user: The user to connect to the remote device (switch) as. Without this the user that is running ``ansible-playbook`` would be used. Specifies which user on the network device the connection :ansible_password: The corresponding password for ``ansible_user`` to log in as. If not specified SSH key will be used. :ansible_become: If enable mode (privilege mode) should be used, see the next section. :ansible_become_method: Which type of `become` should be used, for ``network_cli`` the only valid choice is ``enable``. Privilege escalation -------------------- Certain network platforms, such as Arista EOS and Cisco IOS, have the concept of different privilege modes. Certain network modules, such as those that modify system state including users, will only work in high privilege states. Ansible supports ``become`` when using ``connection: ansible.netcommon.network_cli``. This allows privileges to be raised for the specific tasks that need them. Adding ``become: yes`` and ``become_method: enable`` informs Ansible to go into privilege mode before executing the task, as shown here: .. code-block:: ini [eos:vars] ansible_connection=ansible.netcommon.network_cli ansible_network_os=arista.eos.eos ansible_become=yes ansible_become_method=enable For more information, see the :ref:`using become with network modules` guide. Jump hosts ---------- If the Ansible Controller does not have a direct route to the remote device and you need to use a Jump Host, please see the :ref:`Ansible Network Proxy Command ` guide for details on how to achieve this. Example 1: collecting facts and creating backup files with a playbook ===================================================================== Ansible facts modules gather system information 'facts' that are available to the rest of your playbook. Ansible Networking ships with a number of network-specific facts modules. In this example, we use the ``_facts`` modules :ref:`arista.eos.eos_facts `, :ref:`cisco.ios.ios_facts ` and :ref:`vyos.vyos.vyos_facts ` to connect to the remote networking device. As the credentials are not explicitly passed with module arguments, Ansible uses the username and password from the inventory file. Ansible's "Network Fact modules" gather information from the system and store the results in facts prefixed with ``ansible_net_``. The data collected by these modules is documented in the `Return Values` section of the module docs, in this case :ref:`arista.eos.eos_facts ` and :ref:`vyos.vyos.vyos_facts `. We can use the facts, such as ``ansible_net_version`` late on in the "Display some facts" task. To ensure we call the correct mode (``*_facts``) the task is conditionally run based on the group defined in the inventory file, for more information on the use of conditionals in Ansible Playbooks see :ref:`the_when_statement`. In this example, we will create an inventory file containing some network switches, then run a playbook to connect to the network devices and return some information about them. Step 1: Creating the inventory ------------------------------ First, create a file called ``inventory``, containing: .. code-block:: ini [switches:children] eos ios vyos [eos] eos01.example.net [ios] ios01.example.net [vyos] vyos01.example.net Step 2: Creating the playbook ----------------------------- Next, create a playbook file called ``facts-demo.yml`` containing the following: .. code-block:: yaml - name: "Demonstrate connecting to switches" hosts: switches gather_facts: no tasks: ### # Collect data # - name: Gather facts (eos) arista.eos.eos_facts: when: ansible_network_os == 'arista.eos.eos' - name: Gather facts (ios) cisco.ios.ios_facts: when: ansible_network_os == 'cisco.ios.ios' - name: Gather facts (vyos) vyos.vyos.vyos_facts: when: ansible_network_os == 'vyos.vyos.vyos' ### # Demonstrate variables # - name: Display some facts debug: msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}" - name: Facts from a specific host debug: var: hostvars['vyos01.example.net'] - name: Write facts to disk using a template copy: content: | #jinja2: lstrip_blocks: True EOS device info: {% for host in groups['eos'] %} Hostname: {{ hostvars[host].ansible_net_hostname }} Version: {{ hostvars[host].ansible_net_version }} Model: {{ hostvars[host].ansible_net_model }} Serial: {{ hostvars[host].ansible_net_serialnum }} {% endfor %} IOS device info: {% for host in groups['ios'] %} Hostname: {{ hostvars[host].ansible_net_hostname }} Version: {{ hostvars[host].ansible_net_version }} Model: {{ hostvars[host].ansible_net_model }} Serial: {{ hostvars[host].ansible_net_serialnum }} {% endfor %} VyOS device info: {% for host in groups['vyos'] %} Hostname: {{ hostvars[host].ansible_net_hostname }} Version: {{ hostvars[host].ansible_net_version }} Model: {{ hostvars[host].ansible_net_model }} Serial: {{ hostvars[host].ansible_net_serialnum }} {% endfor %} dest: /tmp/switch-facts run_once: yes ### # Get running configuration # - name: Backup switch (eos) arista.eos.eos_config: backup: yes register: backup_eos_location when: ansible_network_os == 'arista.eos.eos' - name: backup switch (vyos) vyos.vyos.vyos_config: backup: yes register: backup_vyos_location when: ansible_network_os == 'vyos.vyos.vyos' - name: Create backup dir file: path: "/tmp/backups/{{ inventory_hostname }}" state: directory recurse: yes - name: Copy backup files into /tmp/backups/ (eos) copy: src: "{{ backup_eos_location.backup_path }}" dest: "/tmp/backups/{{ inventory_hostname }}/{{ inventory_hostname }}.bck" when: ansible_network_os == 'arista.eos.eos' - name: Copy backup files into /tmp/backups/ (vyos) copy: src: "{{ backup_vyos_location.backup_path }}" dest: "/tmp/backups/{{ inventory_hostname }}/{{ inventory_hostname }}.bck" when: ansible_network_os == 'vyos.vyos.vyos' Step 3: Running the playbook ---------------------------- To run the playbook, run the following from a console prompt: .. code-block:: console ansible-playbook -i inventory facts-demo.yml This should return output similar to the following: .. code-block:: console PLAY RECAP eos01.example.net : ok=7 changed=2 unreachable=0 failed=0 ios01.example.net : ok=7 changed=2 unreachable=0 failed=0 vyos01.example.net : ok=6 changed=2 unreachable=0 failed=0 Step 4: Examining the playbook results -------------------------------------- Next, look at the contents of the file we created containing the switch facts: .. code-block:: console cat /tmp/switch-facts You can also look at the backup files: .. code-block:: console find /tmp/backups If `ansible-playbook` fails, please follow the debug steps in :ref:`network_debug_troubleshooting`. .. _network-independent-examples: Example 2: simplifying playbooks with platform-independent modules ================================================================== (This example originally appeared in the `Deep Dive on cli_command for Network Automation `_ blog post by Sean Cavanaugh -`@IPvSean `_). If you have two or more network platforms in your environment, you can use the platform-independent modules to simplify your playbooks. You can use platform-independent modules such as ``ansible.netcommon.cli_command`` or ``ansible.netcommon.cli_config`` in place of the platform-specific modules such as ``arista.eos.eos_config``, ``cisco.ios.ios_config``, and ``junipernetworks.junos.junos_config``. This reduces the number of tasks and conditionals you need in your playbooks. .. note:: Platform-independent modules require the :ref:`ansible.netcommon.network_cli ` connection plugin. Sample playbook with platform-specific modules ---------------------------------------------- This example assumes three platforms, Arista EOS, Cisco NXOS, and Juniper JunOS. Without the platform-independent modules, a sample playbook might contain the following three tasks with platform-specific commands: .. code-block:: yaml --- - name: Run Arista command arista.eos.eos_command: commands: show ip int br when: ansible_network_os == 'arista.eos.eos' - name: Run Cisco NXOS command cisco.nxos.nxos_command: commands: show ip int br when: ansible_network_os == 'cisco.nxos.nxos' - name: Run Vyos command vyos.vyos.vyos_command: commands: show interface when: ansible_network_os == 'vyos.vyos.vyos' Simplified playbook with ``cli_command`` platform-independent module -------------------------------------------------------------------- You can replace these platform-specific modules with the platform-independent ``ansible.netcommon.cli_command`` module as follows: .. code-block:: yaml --- - hosts: network gather_facts: false connection: ansible.netcommon.network_cli tasks: - name: Run cli_command on Arista and display results block: - name: Run cli_command on Arista ansible.netcommon.cli_command: command: show ip int br register: result - name: Display result to terminal window debug: var: result.stdout_lines when: ansible_network_os == 'arista.eos.eos' - name: Run cli_command on Cisco IOS and display results block: - name: Run cli_command on Cisco IOS ansible.netcommon.cli_command: command: show ip int br register: result - name: Display result to terminal window debug: var: result.stdout_lines when: ansible_network_os == 'cisco.ios.ios' - name: Run cli_command on Vyos and display results block: - name: Run cli_command on Vyos ansible.netcommon.cli_command: command: show interfaces register: result - name: Display result to terminal window debug: var: result.stdout_lines when: ansible_network_os == 'vyos.vyos.vyos' If you use groups and group_vars by platform type, this playbook can be further simplified to : .. code-block:: yaml --- - name: Run command and print to terminal window hosts: routers gather_facts: false tasks: - name: Run show command ansible.netcommon.cli_command: command: "{{show_interfaces}}" register: command_output You can see a full example of this using group_vars and also a configuration backup example at `Platform-independent examples `_. Using multiple prompts with the ``ansible.netcommon.cli_command`` ------------------------------------------------------------------- The ``ansible.netcommon.cli_command`` also supports multiple prompts. .. code-block:: yaml --- - name: Change password to default ansible.netcommon.cli_command: command: "{{ item }}" prompt: - "New password" - "Retype new password" answer: - "mypassword123" - "mypassword123" check_all: True loop: - "configure" - "rollback" - "set system root-authentication plain-text-password" - "commit" See the :ref:`ansible.netcommon.cli_command ` for full documentation on this command. Implementation Notes ==================== Demo variables -------------- Although these tasks are not needed to write data to disk, they are used in this example to demonstrate some methods of accessing facts about the given devices or a named host. Ansible ``hostvars`` allows you to access variables from a named host. Without this we would return the details for the current host, rather than the named host. For more information, see :ref:`magic_variables_and_hostvars`. Get running configuration ------------------------- The :ref:`arista.eos.eos_config ` and :ref:`vyos.vyos.vyos_config ` modules have a ``backup:`` option that when set will cause the module to create a full backup of the current ``running-config`` from the remote device before any changes are made. The backup file is written to the ``backup`` folder in the playbook root directory. If the directory does not exist, it is created. To demonstrate how we can move the backup file to a different location, we register the result and move the file to the path stored in ``backup_path``. Note that when using variables from tasks in this way we use double quotes (``"``) and double curly-brackets (``{{...}}`` to tell Ansible that this is a variable. Troubleshooting =============== If you receive an connection error please double check the inventory and playbook for typos or missing lines. If the issue still occurs follow the debug steps in :ref:`network_debug_troubleshooting`. .. seealso:: * :ref:`network_guide` * :ref:`intro_inventory` * :ref:`Keeping vaulted variables visible ` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/network_debug_troubleshooting.rst0000644000000000000000000007073500000000000032030 0ustar00rootroot00000000000000.. _network_debug_troubleshooting: *************************************** Network Debug and Troubleshooting Guide *************************************** This section discusses how to debug and troubleshoot network modules in Ansible. .. contents:: :local: How to troubleshoot =================== Ansible network automation errors generally fall into one of the following categories: :Authentication issues: * Not correctly specifying credentials * Remote device (network switch/router) not falling back to other other authentication methods * SSH key issues :Timeout issues: * Can occur when trying to pull a large amount of data * May actually be masking a authentication issue :Playbook issues: * Use of ``delegate_to``, instead of ``ProxyCommand``. See :ref:`network proxy guide ` for more information. .. warning:: ``unable to open shell`` The ``unable to open shell`` message means that the ``ansible-connection`` daemon has not been able to successfully talk to the remote network device. This generally means that there is an authentication issue. See the "Authentication and connection issues" section in this document for more information. .. _enable_network_logging: Enabling Networking logging and how to read the logfile ------------------------------------------------------- **Platforms:** Any Ansible includes logging to help diagnose and troubleshoot issues regarding Ansible Networking modules. Because logging is very verbose, it is disabled by default. It can be enabled with the :envvar:`ANSIBLE_LOG_PATH` and :envvar:`ANSIBLE_DEBUG` options on the ansible-controller, that is the machine running ``ansible-playbook``. Before running ``ansible-playbook``, run the following commands to enable logging: .. code:: shell # Specify the location for the log file export ANSIBLE_LOG_PATH=~/ansible.log # Enable Debug export ANSIBLE_DEBUG=True # Run with 4*v for connection level verbosity ansible-playbook -vvvv ... After Ansible has finished running you can inspect the log file which has been created on the ansible-controller: .. code:: less $ANSIBLE_LOG_PATH 2017-03-30 13:19:52,740 p=28990 u=fred | creating new control socket for host veos01:22 as user admin 2017-03-30 13:19:52,741 p=28990 u=fred | control socket path is /home/fred/.ansible/pc/ca5960d27a 2017-03-30 13:19:52,741 p=28990 u=fred | current working directory is /home/fred/ansible/test/integration 2017-03-30 13:19:52,741 p=28990 u=fred | using connection plugin network_cli ... 2017-03-30 13:20:14,771 paramiko.transport userauth is OK 2017-03-30 13:20:15,283 paramiko.transport Authentication (keyboard-interactive) successful! 2017-03-30 13:20:15,302 p=28990 u=fred | ssh connection done, setting terminal 2017-03-30 13:20:15,321 p=28990 u=fred | ssh connection has completed successfully 2017-03-30 13:20:15,322 p=28990 u=fred | connection established to veos01 in 0:00:22.580626 From the log notice: * ``p=28990`` Is the PID (Process ID) of the ``ansible-connection`` process * ``u=fred`` Is the user `running` ansible, not the remote-user you are attempting to connect as * ``creating new control socket for host veos01:22 as user admin`` host:port as user * ``control socket path is`` location on disk where the persistent connection socket is created * ``using connection plugin network_cli`` Informs you that persistent connection is being used * ``connection established to veos01 in 0:00:22.580626`` Time taken to obtain a shell on the remote device .. note:: Port None ``creating new control socket for host veos01:None`` If the log reports the port as ``None`` this means that the default port is being used. A future Ansible release will improve this message so that the port is always logged. Because the log files are verbose, you can use grep to look for specific information. For example, once you have identified the ``pid`` from the ``creating new control socket for host`` line you can search for other connection log entries:: grep "p=28990" $ANSIBLE_LOG_PATH Enabling Networking device interaction logging ---------------------------------------------- **Platforms:** Any Ansible includes logging of device interaction in the log file to help diagnose and troubleshoot issues regarding Ansible Networking modules. The messages are logged in the file pointed to by the ``log_path`` configuration option in the Ansible configuration file or by setting the :envvar:`ANSIBLE_LOG_PATH`. .. warning:: The device interaction messages consist of command executed on the target device and the returned response. Since this log data can contain sensitive information including passwords in plain text it is disabled by default. Additionally, in order to prevent accidental leakage of data, a warning will be shown on every task with this setting enabled, specifying which host has it enabled and where the data is being logged. Be sure to fully understand the security implications of enabling this option. The device interaction logging can be enabled either globally by setting in configuration file or by setting environment or enabled on per task basis by passing a special variable to the task. Before running ``ansible-playbook`` run the following commands to enable logging: .. code-block:: text # Specify the location for the log file export ANSIBLE_LOG_PATH=~/ansible.log Enable device interaction logging for a given task .. code-block:: yaml - name: get version information cisco.ios.ios_command: commands: - show version vars: ansible_persistent_log_messages: True To make this a global setting, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] log_messages = True or enable the environment variable `ANSIBLE_PERSISTENT_LOG_MESSAGES`: .. code-block:: text # Enable device interaction logging export ANSIBLE_PERSISTENT_LOG_MESSAGES=True If the task is failing on connection initialization itself, you should enable this option globally. If an individual task is failing intermittently this option can be enabled for that task itself to find the root cause. After Ansible has finished running you can inspect the log file which has been created on the ansible-controller .. note:: Be sure to fully understand the security implications of enabling this option as it can log sensitive information in log file thus creating security vulnerability. Isolating an error ------------------ **Platforms:** Any As with any effort to troubleshoot it's important to simplify the test case as much as possible. For Ansible this can be done by ensuring you are only running against one remote device: * Using ``ansible-playbook --limit switch1.example.net...`` * Using an ad hoc ``ansible`` command `ad hoc` refers to running Ansible to perform some quick command using ``/usr/bin/ansible``, rather than the orchestration language, which is ``/usr/bin/ansible-playbook``. In this case we can ensure connectivity by attempting to execute a single command on the remote device:: ansible -m arista.eos.eos_command -a 'commands=?' -i inventory switch1.example.net -e 'ansible_connection=ansible.netcommon.network_cli' -u admin -k In the above example, we: * connect to ``switch1.example.net`` specified in the inventory file ``inventory`` * use the module ``arista.eos.eos_command`` * run the command ``?`` * connect using the username ``admin`` * inform the ``ansible`` command to prompt for the SSH password by specifying ``-k`` If you have SSH keys configured correctly, you don't need to specify the ``-k`` parameter. If the connection still fails you can combine it with the enable_network_logging parameter. For example: .. code-block:: text # Specify the location for the log file export ANSIBLE_LOG_PATH=~/ansible.log # Enable Debug export ANSIBLE_DEBUG=True # Run with ``-vvvv`` for connection level verbosity ansible -m arista.eos.eos_command -a 'commands=?' -i inventory switch1.example.net -e 'ansible_connection=ansible.netcommon.network_cli' -u admin -k Then review the log file and find the relevant error message in the rest of this document. .. For details on other ways to authenticate, see LINKTOAUTHHOWTODOCS. .. _socket_path_issue: Troubleshooting socket path issues ================================== **Platforms:** Any The ``Socket path does not exist or cannot be found`` and ``Unable to connect to socket`` messages indicate that the socket used to communicate with the remote network device is unavailable or does not exist. For example: .. code-block:: none fatal: [spine02]: FAILED! => { "changed": false, "failed": true, "module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_TSqk5J/ansible_modlib.zip/ansible/module_utils/connection.py\", line 115, in _exec_jsonrpc\nansible.module_utils.connection.ConnectionError: Socket path XX does not exist or cannot be found. See Troubleshooting socket path issues in the Network Debug and Troubleshooting Guide\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1 } or .. code-block:: none fatal: [spine02]: FAILED! => { "changed": false, "failed": true, "module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_TSqk5J/ansible_modlib.zip/ansible/module_utils/connection.py\", line 123, in _exec_jsonrpc\nansible.module_utils.connection.ConnectionError: Unable to connect to socket XX. See Troubleshooting socket path issues in Network Debug and Troubleshooting Guide\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1 } Suggestions to resolve: #. Verify that you have write access to the socket path described in the error message. #. Follow the steps detailed in :ref:`enable network logging `. If the identified error message from the log file is: .. code-block:: yaml 2017-04-04 12:19:05,670 p=18591 u=fred | command timeout triggered, timeout value is 30 secs or .. code-block:: yaml 2017-04-04 12:19:05,670 p=18591 u=fred | persistent connection idle timeout triggered, timeout value is 30 secs Follow the steps detailed in :ref:`timeout issues ` .. _unable_to_open_shell: Category "Unable to open shell" =============================== **Platforms:** Any The ``unable to open shell`` message means that the ``ansible-connection`` daemon has not been able to successfully talk to the remote network device. This generally means that there is an authentication issue. It is a "catch all" message, meaning you need to enable :ref:`logging ` to find the underlying issues. For example: .. code-block:: none TASK [prepare_eos_tests : enable cli on remote device] ************************************************** fatal: [veos01]: FAILED! => {"changed": false, "failed": true, "msg": "unable to open shell"} or: .. code-block:: none TASK [ios_system : configure name_servers] ************************************************************* task path: fatal: [ios-csr1000v]: FAILED! => { "changed": false, "failed": true, "msg": "unable to open shell", } Suggestions to resolve: Follow the steps detailed in enable_network_logging_. Once you've identified the error message from the log file, the specific solution can be found in the rest of this document. Error: "[Errno -2] Name or service not known" --------------------------------------------- **Platforms:** Any Indicates that the remote host you are trying to connect to can not be reached For example: .. code-block:: yaml 2017-04-04 11:39:48,147 p=15299 u=fred | control socket path is /home/fred/.ansible/pc/ca5960d27a 2017-04-04 11:39:48,147 p=15299 u=fred | current working directory is /home/fred/git/ansible-inc/stable-2.3/test/integration 2017-04-04 11:39:48,147 p=15299 u=fred | using connection plugin network_cli 2017-04-04 11:39:48,340 p=15299 u=fred | connecting to host veos01 returned an error 2017-04-04 11:39:48,340 p=15299 u=fred | [Errno -2] Name or service not known Suggestions to resolve: * If you are using the ``provider:`` options ensure that its suboption ``host:`` is set correctly. * If you are not using ``provider:`` nor top-level arguments ensure your inventory file is correct. Error: "Authentication failed" ------------------------------ **Platforms:** Any Occurs if the credentials (username, passwords, or ssh keys) passed to ``ansible-connection`` (via ``ansible`` or ``ansible-playbook``) can not be used to connect to the remote device. For example: .. code-block:: yaml ESTABLISH CONNECTION FOR USER: cisco on PORT 22 TO ios01 Authentication failed. Suggestions to resolve: If you are specifying credentials via ``password:`` (either directly or via ``provider:``) or the environment variable `ANSIBLE_NET_PASSWORD` it is possible that ``paramiko`` (the Python SSH library that Ansible uses) is using ssh keys, and therefore the credentials you are specifying are being ignored. To find out if this is the case, disable "look for keys". This can be done like this: .. code-block:: yaml export ANSIBLE_PARAMIKO_LOOK_FOR_KEYS=False To make this a permanent change, add the following to your ``ansible.cfg`` file: .. code-block:: ini [paramiko_connection] look_for_keys = False Error: "connecting to host returned an error" or "Bad address" ------------------------------------------------------------------------- This may occur if the SSH fingerprint hasn't been added to Paramiko's (the Python SSH library) know hosts file. When using persistent connections with Paramiko, the connection runs in a background process. If the host doesn't already have a valid SSH key, by default Ansible will prompt to add the host key. This will cause connections running in background processes to fail. For example: .. code-block:: yaml 2017-04-04 12:06:03,486 p=17981 u=fred | using connection plugin network_cli 2017-04-04 12:06:04,680 p=17981 u=fred | connecting to host veos01 returned an error 2017-04-04 12:06:04,682 p=17981 u=fred | (14, 'Bad address') 2017-04-04 12:06:33,519 p=17981 u=fred | number of connection attempts exceeded, unable to connect to control socket 2017-04-04 12:06:33,520 p=17981 u=fred | persistent_connect_interval=1, persistent_connect_retries=30 Suggestions to resolve: Use ``ssh-keyscan`` to pre-populate the known_hosts. You need to ensure the keys are correct. .. code-block:: shell ssh-keyscan veos01 or You can tell Ansible to automatically accept the keys Environment variable method: .. code-block:: shell export ANSIBLE_PARAMIKO_HOST_KEY_AUTO_ADD=True ansible-playbook ... ``ansible.cfg`` method: ansible.cfg .. code-block:: ini [paramiko_connection] host_key_auto_add = True .. warning: Security warning Care should be taken before accepting keys. Error: "No authentication methods available" -------------------------------------------- For example: .. code-block:: yaml 2017-04-04 12:19:05,670 p=18591 u=fred | creating new control socket for host veos01:None as user admin 2017-04-04 12:19:05,670 p=18591 u=fred | control socket path is /home/fred/.ansible/pc/ca5960d27a 2017-04-04 12:19:05,670 p=18591 u=fred | current working directory is /home/fred/git/ansible-inc/ansible-workspace-2/test/integration 2017-04-04 12:19:05,670 p=18591 u=fred | using connection plugin network_cli 2017-04-04 12:19:06,606 p=18591 u=fred | connecting to host veos01 returned an error 2017-04-04 12:19:06,606 p=18591 u=fred | No authentication methods available 2017-04-04 12:19:35,708 p=18591 u=fred | connect retry timeout expired, unable to connect to control socket 2017-04-04 12:19:35,709 p=18591 u=fred | persistent_connect_retry_timeout is 15 secs Suggestions to resolve: No password or SSH key supplied Clearing Out Persistent Connections ----------------------------------- **Platforms:** Any In Ansible 2.3, persistent connection sockets are stored in ``~/.ansible/pc`` for all network devices. When an Ansible playbook runs, the persistent socket connection is displayed when verbose output is specified. `` socket_path: /home/fred/.ansible/pc/f64ddfa760`` To clear out a persistent connection before it times out (the default timeout is 30 seconds of inactivity), simple delete the socket file. .. _timeout_issues: Timeout issues ============== Persistent connection idle timeout ---------------------------------- By default, ``ANSIBLE_PERSISTENT_CONNECT_TIMEOUT`` is set to 30 (seconds). You may see the following error if this value is too low: .. code-block:: yaml 2017-04-04 12:19:05,670 p=18591 u=fred | persistent connection idle timeout triggered, timeout value is 30 secs Suggestions to resolve: Increase value of persistent connection idle timeout: .. code-block:: sh export ANSIBLE_PERSISTENT_CONNECT_TIMEOUT=60 To make this a permanent change, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] connect_timeout = 60 Command timeout --------------- By default, ``ANSIBLE_PERSISTENT_COMMAND_TIMEOUT`` is set to 30 (seconds). Prior versions of Ansible had this value set to 10 seconds by default. You may see the following error if this value is too low: .. code-block:: yaml 2017-04-04 12:19:05,670 p=18591 u=fred | command timeout triggered, timeout value is 30 secs Suggestions to resolve: * Option 1 (Global command timeout setting): Increase value of command timeout in configuration file or by setting environment variable. .. code-block:: yaml export ANSIBLE_PERSISTENT_COMMAND_TIMEOUT=60 To make this a permanent change, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] command_timeout = 60 * Option 2 (Per task command timeout setting): Increase command timeout per task basis. All network modules support a timeout value that can be set on a per task basis. The timeout value controls the amount of time in seconds before the task will fail if the command has not returned. For local connection type: .. FIXME: Detail error here Suggestions to resolve: .. code-block:: yaml - name: save running-config cisco.ios.ios_command: commands: copy running-config startup-config provider: "{{ cli }}" timeout: 30 Suggestions to resolve: .. code-block:: yaml - name: save running-config cisco.ios.ios_command: commands: copy running-config startup-config vars: ansible_command_timeout: 60 Some operations take longer than the default 30 seconds to complete. One good example is saving the current running config on IOS devices to startup config. In this case, changing the timeout value from the default 30 seconds to 60 seconds will prevent the task from failing before the command completes successfully. Persistent connection retry timeout ----------------------------------- By default, ``ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT`` is set to 15 (seconds). You may see the following error if this value is too low: .. code-block:: yaml 2017-04-04 12:19:35,708 p=18591 u=fred | connect retry timeout expired, unable to connect to control socket 2017-04-04 12:19:35,709 p=18591 u=fred | persistent_connect_retry_timeout is 15 secs Suggestions to resolve: Increase the value of the persistent connection idle timeout. Note: This value should be greater than the SSH timeout value (the timeout value under the defaults section in the configuration file) and less than the value of the persistent connection idle timeout (connect_timeout). .. code-block:: yaml export ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT=30 To make this a permanent change, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] connect_retry_timeout = 30 Timeout issue due to platform specific login menu with ``network_cli`` connection type -------------------------------------------------------------------------------------- In Ansible 2.9 and later, the network_cli connection plugin configuration options are added to handle the platform specific login menu. These options can be set as group/host or tasks variables. Example: Handle single login menu prompts with host variables .. code-block:: console $cat host_vars/.yaml --- ansible_terminal_initial_prompt: - "Connect to a host" ansible_terminal_initial_answer: - "3" Example: Handle remote host multiple login menu prompts with host variables .. code-block:: console $cat host_vars/.yaml --- ansible_terminal_initial_prompt: - "Press any key to enter main menu" - "Connect to a host" ansible_terminal_initial_answer: - "\\r" - "3" ansible_terminal_initial_prompt_checkall: True To handle multiple login menu prompts: * The values of ``ansible_terminal_initial_prompt`` and ``ansible_terminal_initial_answer`` should be a list. * The prompt sequence should match the answer sequence. * The value of ``ansible_terminal_initial_prompt_checkall`` should be set to ``True``. .. note:: If all the prompts in sequence are not received from remote host at the time connection initialization it will result in a timeout. Playbook issues =============== This section details issues are caused by issues with the Playbook itself. Error: "Unable to enter configuration mode" ------------------------------------------- **Platforms:** Arista EOS and Cisco IOS This occurs when you attempt to run a task that requires privileged mode in a user mode shell. For example: .. code-block:: console TASK [ios_system : configure name_servers] ***************************************************************************** task path: fatal: [ios-csr1000v]: FAILED! => { "changed": false, "failed": true, "msg": "unable to enter configuration mode", } Suggestions to resolve: Use ``connection: ansible.netcommon.network_cli`` and ``become: yes`` Proxy Issues ============ .. _network_delegate_to_vs_ProxyCommand: delegate_to vs ProxyCommand --------------------------- In order to use a bastion or intermediate jump host to connect to network devices over ``cli`` transport, network modules support the use of ``ProxyCommand``. To use ``ProxyCommand``, configure the proxy settings in the Ansible inventory file to specify the proxy host. .. code-block:: ini [nxos] nxos01 nxos02 [nxos:vars] ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' With the configuration above, simply build and run the playbook as normal with no additional changes necessary. The network module will now connect to the network device by first connecting to the host specified in ``ansible_ssh_common_args``, which is ``bastion01`` in the above example. You can also set the proxy target for all hosts by using environment variables. .. code-block:: sh export ANSIBLE_SSH_ARGS='-o ProxyCommand="ssh -W %h:%p -q bastion01"' Using bastion/jump host with netconf connection ----------------------------------------------- Enabling jump host setting -------------------------- Bastion/jump host with netconf connection can be enabled by: - Setting Ansible variable ``ansible_netconf_ssh_config`` either to ``True`` or custom ssh config file path - Setting environment variable ``ANSIBLE_NETCONF_SSH_CONFIG`` to ``True`` or custom ssh config file path - Setting ``ssh_config = 1`` or ``ssh_config = `` under ``netconf_connection`` section If the configuration variable is set to 1 the proxycommand and other ssh variables are read from default ssh config file (~/.ssh/config). If the configuration variable is set to file path the proxycommand and other ssh variables are read from the given custom ssh file path Example ssh config file (~/.ssh/config) --------------------------------------- .. code-block:: ini Host jumphost HostName jumphost.domain.name.com User jumphost-user IdentityFile "/path/to/ssh-key.pem" Port 22 # Note: Due to the way that Paramiko reads the SSH Config file, # you need to specify the NETCONF port that the host uses. # In other words, it does not automatically use ansible_port # As a result you need either: Host junos01 HostName junos01 ProxyCommand ssh -W %h:22 jumphost # OR Host junos01 HostName junos01 ProxyCommand ssh -W %h:830 jumphost # Depending on the netconf port used. Example Ansible inventory file .. code-block:: ini [junos] junos01 [junos:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=junipernetworks.junos.junos ansible_user=myuser ansible_password=!vault... .. note:: Using ``ProxyCommand`` with passwords via variables By design, SSH doesn't support providing passwords via environment variables. This is done to prevent secrets from leaking out, for example in ``ps`` output. We recommend using SSH Keys, and if needed an ssh-agent, rather than passwords, where ever possible. Miscellaneous Issues ==================== Intermittent failure while using ``ansible.netcommon.network_cli`` connection type ------------------------------------------------------------------------------------ If the command prompt received in response is not matched correctly within the ``ansible.netcommon.network_cli`` connection plugin the task might fail intermittently with truncated response or with the error message ``operation requires privilege escalation``. Starting in 2.7.1 a new buffer read timer is added to ensure prompts are matched properly and a complete response is send in output. The timer default value is 0.2 seconds and can be adjusted on a per task basis or can be set globally in seconds. Example Per task timer setting .. code-block:: yaml - name: gather ios facts cisco.ios.ios_facts: gather_subset: all register: result vars: ansible_buffer_read_timeout: 2 To make this a global setting, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] buffer_read_timeout = 2 This timer delay per command executed on remote host can be disabled by setting the value to zero. Task failure due to mismatched error regex within command response using ``ansible.netcommon.network_cli`` connection type ---------------------------------------------------------------------------------------------------------------------------- In Ansible 2.9 and later, the ``ansible.netcommon.network_cli`` connection plugin configuration options are added to handle the stdout and stderr regex to identify if the command execution response consist of a normal response or an error response. These options can be set group/host variables or as tasks variables. Example: For mismatched error response .. code-block:: yaml - name: fetch logs from remote host cisco.ios.ios_command: commands: - show logging Playbook run output: .. code-block:: console TASK [first fetch logs] ******************************************************** fatal: [ios01]: FAILED! => { "changed": false, "msg": "RF Name:\r\n\r\n <--nsip--> \"IPSEC-3-REPLAY_ERROR: Test log\"\r\n*Aug 1 08:36:18.483: %SYS-7-USERLOG_DEBUG: Message from tty578(user id: ansible): test\r\nan-ios-02#"} Suggestions to resolve: Modify the error regex for individual task. .. code-block:: yaml - name: fetch logs from remote host cisco.ios.ios_command: commands: - show logging vars: ansible_terminal_stderr_re: - pattern: 'connection timed out' flags: 're.I' The terminal plugin regex options ``ansible_terminal_stderr_re`` and ``ansible_terminal_stdout_re`` have ``pattern`` and ``flags`` as keys. The value of the ``flags`` key should be a value that is accepted by the ``re.compile`` python method. Intermittent failure while using ``ansible.netcommon.network_cli`` connection type due to slower network or remote target host ---------------------------------------------------------------------------------------------------------------------------------- In Ansible 2.9 and later, the ``ansible.netcommon.network_cli`` connection plugin configuration option is added to control the number of attempts to connect to a remote host. The default number of attempts is three. After every retry attempt the delay between retries is increased by power of 2 in seconds until either the maximum attempts are exhausted or either the ``persistent_command_timeout`` or ``persistent_connect_timeout`` timers are triggered. To make this a global setting, add the following to your ``ansible.cfg`` file: .. code-block:: ini [persistent_connection] network_cli_retries = 5 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.503556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/network_resource_modules.rst0000644000000000000000000002414200000000000031001 0ustar00rootroot00000000000000.. _resource_modules: ************************ Network Resource Modules ************************ Ansible network resource modules simplify and standardize how you manage different network devices. Network devices separate configuration into sections (such as interfaces and VLANs) that apply to a network service. Ansible network resource modules take advantage of this to allow you to configure subsections or *resources* within the network device configuration. Network resource modules provide a consistent experience across different network devices. .. contents:: :local: Network resource module states =============================== You use the network resource modules by assigning a state to what you want the module to do. The resource modules support the following states: merged Ansible merges the on-device configuration with the provided configuration in the task. replaced Ansible replaces the on-device configuration subsection with the provided configuration subsection in the task. overridden Ansible overrides the on-device configuration for the resource with the provided configuration in the task. Use caution with this state as you could remove your access to the device (for example, by overriding the management interface configuration). deleted Ansible deletes the on-device configuration subsection and restores any default settings. gathered Ansible displays the resource details gathered from the network device and accessed with the ``gathered`` key in the result. rendered Ansible renders the provided configuration in the task in the device-native format (for example, Cisco IOS CLI). Ansible returns this rendered configuration in the ``rendered`` key in the result. Note this state does not communicate with the network device and can be used offline. parsed Ansible parses the configuration from the ``running_config`` option into Ansible structured data in the ``parsed`` key in the result. Note this does not gather the configuration from the network device so this state can be used offline. Using network resource modules ============================== This example configures the L3 interface resource on a Cisco IOS device, based on different state settings. .. code-block:: yaml - name: configure l3 interface cisco.ios.ios_l3_interfaces: config: "{{ config }}" state: The following table shows an example of how an initial resource configuration changes with this task for different states. +-----------------------------------------+------------------------------------+-----------------------------------------+ | Resource starting configuration | task-provided configuration (YAML) | Final resource configuration on device | +=========================================+====================================+=========================================+ | .. code-block:: text | .. code-block:: yaml | *merged* | | | | .. code-block:: text | | interface loopback100 | config: | | | ip address 10.10.1.100 255.255.255.0 | - ipv6: | interface loopback100 | | ipv6 address FC00:100/64 | - address: fc00::100/64 | ip address 10.10.1.100 255.255.255.0| | | - address: fc00::101/64 | ipv6 address FC00:100/64 | | | name: loopback100 | ipv6 address FC00:101/64 | | | +-----------------------------------------+ | | | *replaced* | | | | .. code-block:: text | | | | | | | | interface loopback100 | | | | no ip address | | | | ipv6 address FC00:100/64 | | | | ipv6 address FC00:101/64 | | | +-----------------------------------------+ | | | *overridden* | | | | Incorrect use case. This would remove | | | | all interfaces from the device | | | | (including the mgmt interface) except | | | | the configured loopback100 | | | +-----------------------------------------+ | | | *deleted* | | | | .. code-block:: text | | | | | | | | interface loopback100 | | | | no ip address | +-----------------------------------------+------------------------------------+-----------------------------------------+ Network resource modules return the following details: * The *before* state - the existing resource configuration before the task was executed. * The *after* state - the new resource configuration that exists on the network device after the task was executed. * Commands - any commands configured on the device. .. code-block:: yaml ok: [nxos101] => result: after: contact: IT Support location: Room E, Building 6, Seattle, WA 98134 users: - algorithm: md5 group: network-admin localized_key: true password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' username: admin before: contact: IT Support location: Room E, Building 5, Seattle HQ users: - algorithm: md5 group: network-admin localized_key: true password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69' username: admin changed: true commands: - snmp-server location Room E, Building 6, Seattle, WA 98134 failed: false Example: Verifying the network device configuration has not changed ==================================================================== The following playbook uses the :ref:`arista.eos.eos_l3_interfaces ` module to gather a subset of the network device configuration (Layer 3 interfaces only) and verifies the information is accurate and has not changed. This playbook passes the results of :ref:`arista.eos.eos_facts ` directly to the ``arista.eos.eos_l3_interfaces`` module. .. code-block:: yaml - name: Example of facts being pushed right back to device. hosts: arista gather_facts: false tasks: - name: grab arista eos facts arista.eos.eos_facts: gather_subset: min gather_network_resources: l3_interfaces - name: Ensure that the IP address information is accurate. arista.eos.eos_l3_interfaces: config: "{{ ansible_network_resources['l3_interfaces'] }}" register: result - name: Ensure config did not change. assert: that: not result.changed Example: Acquiring and updating VLANs on a network device ========================================================== This example shows how you can use resource modules to: #. Retrieve the current configuration on a network device. #. Save that configuration locally. #. Update that configuration and apply it to the network device. This example uses the ``cisco.ios.ios_vlans`` resource module to retrieve and update the VLANs on an IOS device. 1. Retrieve the current IOS VLAN configuration: .. code-block:: yaml - name: Gather VLAN information as structured data cisco.ios.ios_facts: gather_subset: - '!all' - '!min' gather_network_resources: - 'vlans' 2. Store the VLAN configuration locally: .. code-block:: yaml - name: Store VLAN facts to host_vars copy: content: "{{ ansible_network_resources | to_nice_yaml }}" dest: "{{ playbook_dir }}/host_vars/{{ inventory_hostname }}" 3. Modify the stored file to update the VLAN configuration locally. 4. Merge the updated VLAN configuration with the existing configuration on the device: .. code-block:: yaml - name: Make VLAN config changes by updating stored facts on the controller. cisco.ios.ios_vlans: config: "{{ vlans }}" state: merged tags: update_config .. seealso:: `Network Features in Ansible 2.9 `_ A introductory blog post on network resource modules. `Deep Dive into Network Resource Modules `_ A deeper dive presentation into network resource modules. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/network_working_with_command_output.rst0000644000000000000000000001200500000000000033246 0ustar00rootroot00000000000000.. _networking_working_with_command_output: ********************************************************** Working with command output and prompts in network modules ********************************************************** .. contents:: :local: Conditionals in networking modules =================================== Ansible allows you to use conditionals to control the flow of your playbooks. Ansible networking command modules use the following unique conditional statements. * ``eq`` - Equal * ``neq`` - Not equal * ``gt`` - Greater than * ``ge`` - Greater than or equal * ``lt`` - Less than * ``le`` - Less than or equal * ``contains`` - Object contains specified item Conditional statements evaluate the results from the commands that are executed remotely on the device. Once the task executes the command set, the ``wait_for`` argument can be used to evaluate the results before returning control to the Ansible playbook. For example: .. code-block:: yaml --- - name: wait for interface to be admin enabled arista.eos.eos_command: commands: - show interface Ethernet4 | json wait_for: - "result[0].interfaces.Ethernet4.interfaceStatus eq connected" In the above example task, the command :code:`show interface Ethernet4 | json` is executed on the remote device and the results are evaluated. If the path :code:`(result[0].interfaces.Ethernet4.interfaceStatus)` is not equal to "connected", then the command is retried. This process continues until either the condition is satisfied or the number of retries has expired (by default, this is 10 retries at 1 second intervals). The commands module can also evaluate more than one set of command results in an interface. For instance: .. code-block:: yaml --- - name: wait for interfaces to be admin enabled arista.eos.eos_command: commands: - show interface Ethernet4 | json - show interface Ethernet5 | json wait_for: - "result[0].interfaces.Ethernet4.interfaceStatus eq connected" - "result[1].interfaces.Ethernet5.interfaceStatus eq connected" In the above example, two commands are executed on the remote device, and the results are evaluated. By specifying the result index value (0 or 1), the correct result output is checked against the conditional. The ``wait_for`` argument must always start with result and then the command index in ``[]``, where ``0`` is the first command in the commands list, ``1`` is the second command, ``2`` is the third and so on. Handling prompts in network modules =================================== Network devices may require that you answer a prompt before performing a change on the device. Individual network modules such as :ref:`cisco.ios.ios_command ` and :ref:`cisco.nxos.nxos_command ` can handle this with a ``prompt`` parameter. .. note:: ``prompt`` is a Python regex. If you add special characters such as ``?`` in the ``prompt`` value, the prompt won't match and you will get a timeout. To avoid this, ensure that the ``prompt`` value is a Python regex that matches the actual device prompt. Any special characters must be handled correctly in the ``prompt`` regex. You can also use the :ref:`ansible.netcommon.cli_command ` to handle multiple prompts. .. code-block:: yaml --- - name: multiple prompt, multiple answer (mandatory check for all prompts) ansible.netcommon.cli_command: command: "copy sftp sftp://user@host//user/test.img" check_all: True prompt: - "Confirm download operation" - "Password" - "Do you want to change that to the standby image" answer: - 'y' - - 'y' You must list the prompt and the answers in the same order (that is, prompt[0] is answered by answer[0]). In the above example, ``check_all: True`` ensures that the task gives the matching answer to each prompt. Without that setting, a task with multiple prompts would give the first answer to every prompt. In the following example, the second answer would be ignored and ``y`` would be the answer given to both prompts. That is, this task only works because both answers are identical. Also notice again that ``prompt`` must be a Python regex, which is why the ``?`` is escaped in the first prompt. .. code-block:: yaml --- - name: reboot ios device ansible.netcommon.cli_command: command: reload prompt: - Save\? - confirm answer: - y - y .. seealso:: `Rebooting network devices with Ansible `_ Examples using ``wait_for``, ``wait_for_connection``, and ``prompt`` for network devices. `Deep dive on cli_command `_ Detailed overview of how to use the ``cli_command``. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_ce.rst0000644000000000000000000001623300000000000026146 0ustar00rootroot00000000000000.. _ce_platform_options: *************************************** CloudEngine OS Platform Options *************************************** CloudEngine CE OS is part of the `community.network `_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== ========================= .. CLI NETCONF ==================== ========================================== ========================= Protocol SSH XML over SSH Credentials uses SSH keys / SSH-agent if present uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a bastion (jump host) Connection Settings ``ansible_connection:`` ``ansible_connection:`` ``ansible.netcommon.network_cli`` ``ansible.netcommon.netconf`` |enable_mode| not supported by ce OS not supported by ce OS Returned Data Format Refer to individual module documentation Refer to individual module documentation ==================== ========================================== ========================= .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.netconf`` or ``ansible_connection=ansible.netcommon.network_cli`` instead. Using CLI in Ansible ==================== Example CLI inventory ``[ce:vars]`` -------------------------------------- .. code-block:: yaml [ce:vars] ansible_connection=ansible.netcommon.network_cli ansible_network_os=community.network.ce ansible_user=myuser ansible_password=!vault... ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve CE OS version community.network.ce_command: commands: display version when: ansible_network_os == 'community.network.ce' Using NETCONF in Ansible ======================== Enabling NETCONF ---------------- Before you can use NETCONF to connect to a switch, you must: - install the ``ncclient`` python package on your control node(s) with ``pip install ncclient`` - enable NETCONF on the CloudEngine OS device(s) To enable NETCONF on a new switch using Ansible, use the ``community.network.ce_config`` module with the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable NETCONF connection: ansible.netcommon.network_cli community.network.ce_config: lines: - snetconf server enable when: ansible_network_os == 'community.network.ce' Once NETCONF is enabled, change your variables to use the NETCONF connection. Example NETCONF inventory ``[ce:vars]`` ------------------------------------------ .. code-block:: yaml [ce:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=community.network.ce ansible_user=myuser ansible_password=!vault | ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' Example NETCONF task -------------------- .. code-block:: yaml - name: Create a vlan, id is 50(ce) community.network.ce_vlan: vlan_id: 50 name: WEB when: ansible_network_os == 'community.network.ce' Notes ======================== Modules that work with ``ansible.netcommon.network_cli`` --------------------------------------------------------- .. code-block:: yaml community.network.ce_acl_interface community.network.ce_command community.network.ce_config community.network.ce_evpn_bgp community.network.ce_evpn_bgp_rr community.network.ce_evpn_global community.network.ce_facts community.network.ce_mlag_interface community.network.ce_mtu community.network.ce_netstream_aging community.network.ce_netstream_export community.network.ce_netstream_global community.network.ce_netstream_template community.network.ce_ntp_auth community.network.ce_rollback community.network.ce_snmp_contact community.network.ce_snmp_location community.network.ce_snmp_traps community.network.ce_startup community.network.ce_stp community.network.ce_vxlan_arp community.network.ce_vxlan_gateway community.network.ce_vxlan_global Modules that work with ``ansible.netcommon.netconf`` ----------------------------------------------------- .. code-block:: yaml community.network.ce_aaa_server community.network.ce_aaa_server_host community.network.ce_acl community.network.ce_acl_advance community.network.ce_bfd_global community.network.ce_bfd_session community.network.ce_bfd_view community.network.ce_bgp community.network.ce_bgp_af community.network.ce_bgp_neighbor community.network.ce_bgp_neighbor_af community.network.ce_dldp community.network.ce_dldp_interface community.network.ce_eth_trunk community.network.ce_evpn_bd_vni community.network.ce_file_copy community.network.ce_info_center_debug community.network.ce_info_center_global community.network.ce_info_center_log community.network.ce_info_center_trap community.network.ce_interface community.network.ce_interface_ospf community.network.ce_ip_interface community.network.ce_lacp community.network.ce_link_status community.network.ce_lldp community.network.ce_lldp_interface community.network.ce_mlag_config community.network.ce_netconf community.network.ce_ntp community.network.ce_ospf community.network.ce_ospf_vrf community.network.ce_reboot community.network.ce_sflow community.network.ce_snmp_community community.network.ce_snmp_target_host community.network.ce_snmp_user community.network.ce_static_route community.network.ce_static_route_bfd community.network.ce_switchport community.network.ce_vlan community.network.ce_vrf community.network.ce_vrf_af community.network.ce_vrf_interface community.network.ce_vrrp community.network.ce_vxlan_tunnel community.network.ce_vxlan_vap .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_cnos.rst0000644000000000000000000000550300000000000026517 0ustar00rootroot00000000000000.. _cnos_platform_options: *************************************** CNOS Platform Options *************************************** CNOS is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on CNOS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ================================================================================ Example CLI ``group_vars/cnos.yml`` -------------------------------------------------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.cnos ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve CNOS OS version community.network.cnos_command: commands: show version when: ansible_network_os == 'community.network.cnos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_dellos10.rst0000644000000000000000000000546100000000000027203 0ustar00rootroot00000000000000.. _dellos10_platform_options: *************************************** Dell OS10 Platform Options *************************************** The `dellemc.os10 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS10 in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ================================================================================ Example CLI ``group_vars/dellos10.yml`` --------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: dellemc.os10.os10 ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (dellos10) dellemc.os10.os10_config: backup: yes register: backup_dellos10_location when: ansible_network_os == 'dellemc.os10.os10' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_dellos6.rst0000644000000000000000000000544200000000000027127 0ustar00rootroot00000000000000.. _dellos6_platform_options: *************************************** Dell OS6 Platform Options *************************************** The `dellemc.os6 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS6 in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ================================================================================ Example CLI ``group_vars/dellos6.yml`` -------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: dellemc.os6.os6 ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (dellos6) dellemc.os6.os6_config: backup: yes register: backup_dellso6_location when: ansible_network_os == 'dellemc.os6.os6' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_dellos9.rst0000644000000000000000000000544300000000000027133 0ustar00rootroot00000000000000.. _dellos9_platform_options: *************************************** Dell OS9 Platform Options *************************************** The `dellemc.os9 `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on OS9 in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ================================================================================ Example CLI ``group_vars/dellos9.yml`` -------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: dellemc.os9.os9 ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (dellos9) dellemc.os9.os9_config: backup: yes register: backup_dellos9_location when: ansible_network_os == 'dellemc.os9.os9' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_enos.rst0000644000000000000000000000562200000000000026523 0ustar00rootroot00000000000000.. _enos_platform_options: *************************************** ENOS Platform Options *************************************** ENOS is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ENOS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) +---------------------------+-----------------------------------------------+ The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ================================================================================ Example CLI ``group_vars/enos.yml`` -------------------------------------------------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.enos ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve ENOS OS version community.network.enos_command: commands: show version when: ansible_network_os == 'community.network.enos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_eos.rst0000644000000000000000000001231100000000000026336 0ustar00rootroot00000000000000.. _eos_platform_options: *************************************** EOS Platform Options *************************************** The `Arista EOS `_ collection supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== =========================== .. CLI eAPI ==================== ========================================== =========================== Protocol SSH HTTP(S) Credentials uses SSH keys / SSH-agent if present uses HTTPS certificates if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a web proxy Connection Settings ``ansible_connection:`` ``ansible_connection:`` ``ansible.netcommon.network_cli`` ``ansible.netcommon.httpapi`` |enable_mode| supported: |br| supported: |br| * use ``ansible_become: yes`` * ``httpapi`` with ``ansible_become_method: enable`` uses ``ansible_become: yes`` with ``ansible_become_method: enable`` Returned Data Format ``stdout[0].`` ``stdout[0].messages[0].`` ==================== ========================================== =========================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi`` instead. Using CLI in Ansible ==================== Example CLI ``group_vars/eos.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: arista.eos.eos ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (eos) arista.eos.eos_config: backup: yes register: backup_eos_location when: ansible_network_os == 'arista.eos.eos' Using eAPI in Ansible ===================== Enabling eAPI ------------- Before you can use eAPI to connect to a switch, you must enable eAPI. To enable eAPI on a new switch with Ansible, use the ``arista.eos.eos_eapi`` module through the CLI connection. Set up ``group_vars/eos.yml`` just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable eAPI arista.eos.eos_eapi: enable_http: yes enable_https: yes become: true become_method: enable when: ansible_network_os == 'arista.eos.eos' You can find more options for enabling HTTP/HTTPS connections in the :ref:`arista.eos.eos_eapi ` module documentation. Once eAPI is enabled, change your ``group_vars/eos.yml`` to use the eAPI connection. Example eAPI ``group_vars/eos.yml`` ----------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.httpapi ansible_network_os: arista.eos.eos ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable proxy_env: http_proxy: http://proxy.example.com:8080 - If you are accessing your host directly (not through a web proxy) you can remove the ``proxy_env`` configuration. - If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``. Example eAPI task ----------------- .. code-block:: yaml - name: Backup current switch config (eos) arista.eos.eos_config: backup: yes register: backup_eos_location environment: "{{ proxy_env }}" when: ansible_network_os == 'arista.eos.eos' In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module in the task. .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_eric_eccli.rst0000644000000000000000000000512600000000000027637 0ustar00rootroot00000000000000.. _eic_eccli_platform_options: *************************************** ERIC_ECCLI Platform Options *************************************** Extreme ERIC_ECCLI is part of the `community.network `_ collection and only supports CLI connections today. This page offers details on how to use ``ansible.netcommon.network_cli`` on ERIC_ECCLI in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| not supported by ERIC_ECCLI Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) ERIC_ECCLI does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/eric_eccli.yml`` ----------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.eric_eccli ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: run show version on remote devices (eric_eccli) community.network.eric_eccli_command: commands: show version when: ansible_network_os == 'community.network.eric_eccli' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_exos.rst0000644000000000000000000000771100000000000026536 0ustar00rootroot00000000000000.. _exos_platform_options: *************************************** EXOS Platform Options *************************************** Extreme EXOS is part of the `community.network `_ collection and supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== ========================= .. CLI EXOS-API ==================== ========================================== ========================= Protocol SSH HTTP(S) Credentials uses SSH keys / SSH-agent if present uses HTTPS certificates if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a web proxy Connection Settings ``ansible_connection:`` ``ansible_connection:`` ``ansible.netcommon.network_cli`` ``ansible.netcommon.httpapi`` |enable_mode| not supported by EXOS not supported by EXOS Returned Data Format ``stdout[0].`` ``stdout[0].messages[0].`` ==================== ========================================== ========================= .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) EXOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi``. Using CLI in Ansible ==================== Example CLI ``group_vars/exos.yml`` ----------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.exos ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve EXOS OS version community.network.exos_command: commands: show version when: ansible_network_os == 'community.network.exos' Using EXOS-API in Ansible ========================= Example EXOS-API ``group_vars/exos.yml`` ---------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.httpapi ansible_network_os: community.network.exos ansible_user: myuser ansible_password: !vault... proxy_env: http_proxy: http://proxy.example.com:8080 - If you are accessing your host directly (not through a web proxy) you can remove the ``proxy_env`` configuration. - If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``. Example EXOS-API task --------------------- .. code-block:: yaml - name: Retrieve EXOS OS version community.network.exos_command: commands: show version when: ansible_network_os == 'community.network.exos' In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module used in the task. .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_frr.rst0000644000000000000000000000462200000000000026347 0ustar00rootroot00000000000000.. _frr_platform_options: *************************************** FRR Platform Options *************************************** The `FRR `_ collection supports the ``ansible.netcommon.network_cli`` connection. This section provides details on how to use this connection for Free Range Routing (FRR). .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| not supported Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) Using CLI in Ansible ==================== Example CLI ``group_vars/frr.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: frr.frr.frr ansible_user: frruser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - The ``ansible_user`` should be a part of the ``frrvty`` group and should have the default shell set to ``/bin/vtysh``. - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Gather FRR facts frr.frr.frr_facts: gather_subset: - config - hardware .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5045562 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_icx.rst0000644000000000000000000000512300000000000026336 0ustar00rootroot00000000000000.. _icx_platform_options: *************************************** ICX Platform Options *************************************** ICX is part of the `community.network `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on ICX in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) Using CLI in Ansible ==================== Example CLI ``group_vars/icx.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.icx ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (icx) community.network.icx_config: backup: yes register: backup_icx_location when: ansible_network_os == 'community.network.icx' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_index.rst0000644000000000000000000001502100000000000026660 0ustar00rootroot00000000000000.. _platform_options: **************** Platform Options **************** Some Ansible Network platforms support multiple connection types, privilege escalation (``enable`` mode), or other options. The pages in this section offer standardized guides to understanding available options on each network platform. We welcome contributions from community-maintained platforms to this section. .. toctree:: :maxdepth: 2 :caption: Platform Options platform_ce platform_cnos platform_dellos6 platform_dellos9 platform_dellos10 platform_enos platform_eos platform_eric_eccli platform_exos platform_frr platform_icx platform_ios platform_iosxr platform_ironware platform_junos platform_meraki platform_netvisor platform_nos platform_nxos platform_routeros platform_slxos platform_voss platform_vyos platform_weos4 platform_netconf_enabled .. _settings_by_platform: Settings by Platform ================================ .. raw:: html .. table:: :name: network-platform-table =============================== ================================ =========== ======= ======= =========== .. ``ansible_connection:`` settings available ----------------------------------------------------------------- ------------------------------------------ Network OS ``ansible_network_os:`` network_cli netconf httpapi local =============================== ================================ =========== ======= ======= =========== `Arista EOS`_ `[†]`_ ``arista.eos.eos`` ✓ ✓ ✓ `Ciena SAOS6`_ ``ciena.saos6.saos6`` ✓ ✓ `Cisco ASA`_ `[†]`_ ``cisco.asa.asa`` ✓ ✓ `Cisco IOS`_ `[†]`_ ``cisco.ios.ios`` ✓ ✓ `Cisco IOS XR`_ `[†]`_ ``cisco.iosxr.iosxr`` ✓ ✓ `Cisco NX-OS`_ `[†]`_ ``cisco.nxos.nxos`` ✓ ✓ ✓ `Cloudengine OS`_ ``community.network.ce`` ✓ ✓ ✓ `Dell OS6`_ ``dellemc.os6.os6`` ✓ ✓ `Dell OS9`_ ``dellemc.os9.os9`` ✓ ✓ `Dell OS10`_ ``dellemc.os10.os10`` ✓ ✓ `Ericsson ECCLI`_ ``community.network.eric_eccli`` ✓ ✓ `Extreme EXOS`_ ``community.network.exos`` ✓ ✓ `Extreme IronWare`_ ``community.network.ironware`` ✓ ✓ `Extreme NOS`_ ``community.network.nos`` ✓ `Extreme SLX-OS`_ ``community.network.slxos`` ✓ `Extreme VOSS`_ ``community.network.voss`` ✓ `F5 BIG-IP`_ ✓ `F5 BIG-IQ`_ ✓ `Junos OS`_ `[†]`_ ``junipernetworks.junos.junos`` ✓ ✓ ✓ `Lenovo CNOS`_ ``community.network.cnos`` ✓ ✓ `Lenovo ENOS`_ ``community.network.enos`` ✓ ✓ `Meraki`_ ✓ `MikroTik RouterOS`_ ``community.network.routeros`` ✓ `Nokia SR OS`_ ✓ `Pluribus Netvisor`_ ``community.network.netvisor`` ✓ `Ruckus ICX`_ ``community.network.icx`` ✓ `VyOS`_ `[†]`_ ``vyos.vyos.vyos`` ✓ ✓ `Westermo WeOS 4`_ ``community.network.weos4`` ✓ OS that supports Netconf `[†]`_ ```` ✓ ✓ =============================== ================================ =========== ======= ======= =========== .. _Arista EOS: https://galaxy.ansible.com/arista/eos .. _Ciena SAOS6: https://galaxy.ansible.com/ciena/saos6 .. _Cisco ASA: https://galaxy.ansible.com/cisco/asa .. _Cisco IOS: https://galaxy.ansible.com/cisco/ios .. _Cisco IOS XR: https://galaxy.ansible.com/cisco/iosxr .. _Cisco NX-OS: https://galaxy.ansible.com/cisco/nxos .. _Cloudengine OS: https://galaxy.ansible.com/community/network .. _Dell OS6: https://github.com/ansible-collections/dellemc.os6 .. _Dell OS9: https://github.com/ansible-collections/dellemc.os9 .. _Dell OS10: https://galaxy.ansible.com/dellemc/os10 .. _Ericsson ECCLI: https://galaxy.ansible.com/community/network .. _Extreme EXOS: https://galaxy.ansible.com/community/network .. _Extreme IronWare: https://galaxy.ansible.com/community/network .. _Extreme NOS: https://galaxy.ansible.com/community/network .. _Extreme SLX-OS: https://galaxy.ansible.com/community/network .. _Extreme VOSS: https://galaxy.ansible.com/community/network .. _F5 BIG-IP: https://galaxy.ansible.com/f5networks/f5_modules .. _F5 BIG-IQ: https://galaxy.ansible.com/f5networks/f5_modules .. _Junos OS: https://galaxy.ansible.com/junipernetworks/junos .. _Lenovo CNOS: https://galaxy.ansible.com/community/network .. _Lenovo ENOS: https://galaxy.ansible.com/community/network .. _Meraki: https://galaxy.ansible.com/cisco/meraki .. _MikroTik RouterOS: https://galaxy.ansible.com/community/network .. _Nokia SR OS: https://galaxy.ansible.com/community/network .. _Pluribus Netvisor: https://galaxy.ansible.com/community/network .. _Ruckus ICX: https://galaxy.ansible.com/community/network .. _VyOS: https://galaxy.ansible.com/vyos/vyos .. _Westermo WeOS 4: https://galaxy.ansible.com/community/network .. _`[†]`: **[†]** Maintained by Ansible Network Team ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_ios.rst0000644000000000000000000000523600000000000026352 0ustar00rootroot00000000000000.. _ios_platform_options: *************************************** IOS Platform Options *************************************** The `Cisco IOS `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IOS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ==================== Example CLI ``group_vars/ios.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: cisco.ios.ios ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (ios) cisco.ios.ios_config: backup: yes register: backup_ios_location when: ansible_network_os == 'cisco.ios.ios' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_iosxr.rst0000644000000000000000000001135100000000000026717 0ustar00rootroot00000000000000.. _iosxr_platform_options: *************************************** IOS-XR Platform Options *************************************** The `Cisco IOS-XR collection `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== ========================= .. CLI NETCONF only for modules ``iosxr_banner``, ``iosxr_interface``, ``iosxr_logging``, ``iosxr_system``, ``iosxr_user`` ==================== ========================================== ========================= Protocol SSH XML over SSH Credentials uses SSH keys / SSH-agent if present uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a bastion (jump host) Connection Settings ``ansible_connection:`` ``ansible_connection:`` ``ansible.netcommon.network_cli`` ``ansible.netcommon.netconf`` |enable_mode| not supported not supported Returned Data Format Refer to individual module documentation Refer to individual module documentation ==================== ========================================== ========================= .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.netconf`` instead. Using CLI in Ansible ==================== Example CLI inventory ``[iosxr:vars]`` -------------------------------------- .. code-block:: yaml [iosxr:vars] ansible_connection=ansible.netcommon.network_cli ansible_network_os=cisco.iosxr.iosxr ansible_user=myuser ansible_password=!vault... ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve IOS-XR version cisco.iosxr.iosxr_command: commands: show version when: ansible_network_os == 'cisco.iosxr.iosxr' Using NETCONF in Ansible ======================== Enabling NETCONF ---------------- Before you can use NETCONF to connect to a switch, you must: - install the ``ncclient`` python package on your control node(s) with ``pip install ncclient`` - enable NETCONF on the Cisco IOS-XR device(s) To enable NETCONF on a new switch via Ansible, use the ``cisco.iosxr.iosxr_netconf`` module through the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable NETCONF connection: ansible.netcommon.network_cli cisco.iosxr.iosxr_netconf: when: ansible_network_os == 'cisco.iosxr.iosxr' Once NETCONF is enabled, change your variables to use the NETCONF connection. Example NETCONF inventory ``[iosxr:vars]`` ------------------------------------------ .. code-block:: yaml [iosxr:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=cisco.iosxr.iosxr ansible_user=myuser ansible_password=!vault | ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' Example NETCONF task -------------------- .. code-block:: yaml - name: Configure hostname and domain-name cisco.iosxr.iosxr_system: hostname: iosxr01 domain_name: test.example.com domain_search: - ansible.com - redhat.com - cisco.com .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_ironware.rst0000644000000000000000000000544000000000000027403 0ustar00rootroot00000000000000.. _ironware_platform_options: *************************************** IronWare Platform Options *************************************** IronWare is part of the `community.network `_ collection and supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IronWare in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ==================== Example CLI ``group_vars/mlx.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.ironware ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (ironware) community.network.ironware_config: backup: yes register: backup_ironware_location when: ansible_network_os == 'community.network.ironware' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_junos.rst0000644000000000000000000001204200000000000026707 0ustar00rootroot00000000000000.. _junos_platform_options: *************************************** Junos OS Platform Options *************************************** The `Juniper Junos OS `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== ========================= .. CLI NETCONF ``junos_netconf`` & ``junos_command`` all modules except ``junos_netconf``, modules only which enables NETCONF ==================== ========================================== ========================= Protocol SSH XML over SSH Credentials uses SSH keys / SSH-agent if present uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a bastion (jump host) Connection Settings ``ansible_connection: ``ansible_connection: ``ansible.netcommon.network_cli`` ``ansible.netcommon.netconf`` |enable_mode| not supported by Junos OS not supported by Junos OS Returned Data Format ``stdout[0].`` * json: ``result[0]['software-information'][0]['host-name'][0]['data'] foo lo0`` * text: ``result[1].interface-information[0].physical-interface[0].name[0].data foo lo0`` * xml: ``result[1].rpc-reply.interface-information[0].physical-interface[0].name[0].data foo lo0`` ==================== ========================================== ========================= .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.netconf`` instead. Using CLI in Ansible ==================== Example CLI inventory ``[junos:vars]`` -------------------------------------- .. code-block:: yaml [junos:vars] ansible_connection=ansible.netcommon.network_cli ansible_network_os=junipernetworks.junos.junos ansible_user=myuser ansible_password=!vault... ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve Junos OS version junipernetworks.junos.junos_command: commands: show version when: ansible_network_os == 'junipernetworks.junos.junos' Using NETCONF in Ansible ======================== Enabling NETCONF ---------------- Before you can use NETCONF to connect to a switch, you must: - install the ``ncclient`` python package on your control node(s) with ``pip install ncclient`` - enable NETCONF on the Junos OS device(s) To enable NETCONF on a new switch via Ansible, use the ``junipernetworks.junos.junos_netconf`` module through the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable NETCONF connection: ansible.netcommon.network_cli junipernetworks.junos.junos_netconf: when: ansible_network_os == 'junipernetworks.junos.junos' Once NETCONF is enabled, change your variables to use the NETCONF connection. Example NETCONF inventory ``[junos:vars]`` ------------------------------------------ .. code-block:: yaml [junos:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=junipernetworks.junos.junos ansible_user=myuser ansible_password=!vault | ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' Example NETCONF task -------------------- .. code-block:: yaml - name: Backup current switch config (junos) junipernetworks.junos.junos_config: backup: yes register: backup_junos_location when: ansible_network_os == 'junipernetworks.junos.junos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_meraki.rst0000644000000000000000000000212700000000000027024 0ustar00rootroot00000000000000.. _meraki_platform_options: *************************************** Meraki Platform Options *************************************** The `cisco.meraki `_ collection only supports the ``local`` connection type at this time. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. Dashboard API ==================== ========================================== Protocol HTTP(S) Credentials uses API key from Dashboard Connection Settings ``ansible_connection: localhost`` Returned Data Format ``data.`` ==================== ========================================== Example Meraki task ------------------- .. code-block:: yaml cisco.meraki.meraki_organization: auth_key: abc12345 org_name: YourOrg state: present delegate_to: localhost .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_netconf_enabled.rst0000644000000000000000000001034400000000000030662 0ustar00rootroot00000000000000.. _netconf_enabled_platform_options: *************************************** Netconf enabled Platform Options *************************************** This page offers details on how the netconf connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. NETCONF all modules except ``junos_netconf``, which enables NETCONF ==================== ========================================== Protocol XML over SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.netconf`` ==================== ========================================== The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.netconf`` instead. Using NETCONF in Ansible ======================== Enabling NETCONF ---------------- Before you can use NETCONF to connect to a switch, you must: - install the ``ncclient`` Python package on your control node(s) with ``pip install ncclient`` - enable NETCONF on the Junos OS device(s) To enable NETCONF on a new switch via Ansible, use the platform specific module via the CLI connection or set it manually. For example set up your platform-level variables just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable NETCONF connection: ansible.netcommon.network_cli junipernetworks.junos.junos_netconf: when: ansible_network_os == 'junipernetworks.junos.junos' Once NETCONF is enabled, change your variables to use the NETCONF connection. Example NETCONF inventory ``[junos:vars]`` ------------------------------------------ .. code-block:: yaml [junos:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=junipernetworks.junos.junos ansible_user=myuser ansible_password=!vault | Example NETCONF task -------------------- .. code-block:: yaml - name: Backup current switch config junipernetworks.junos.netconf_config: backup: yes register: backup_junos_location Example NETCONF task with configurable variables ------------------------------------------------ .. code-block:: yaml - name: configure interface while providing different private key file path junipernetworks.junos.netconf_config: backup: yes register: backup_junos_location vars: ansible_private_key_file: /home/admin/.ssh/newprivatekeyfile Note: For netconf connection plugin configurable variables see :ref:`ansible.netcommon.netconf `. Bastion/Jumphost configuration ------------------------------ To use a jump host to connect to a NETCONF enabled device you must set the ``ANSIBLE_NETCONF_SSH_CONFIG`` environment variable. ``ANSIBLE_NETCONF_SSH_CONFIG`` can be set to either: - 1 or TRUE (to trigger the use of the default SSH config file ~/.ssh/config) - The absolute path to a custom SSH config file. The SSH config file should look something like: .. code-block:: ini Host * proxycommand ssh -o StrictHostKeyChecking=no -W %h:%p jumphost-username@jumphost.fqdn.com StrictHostKeyChecking no Authentication for the jump host must use key based authentication. You can either specify the private key used in the SSH config file: .. code-block:: ini IdentityFile "/absolute/path/to/private-key.pem" Or you can use an ssh-agent. ansible_network_os auto-detection --------------------------------- If ``ansible_network_os`` is not specified for a host, then Ansible will attempt to automatically detect what ``network_os`` plugin to use. ``ansible_network_os`` auto-detection can also be triggered by using ``auto`` as the ``ansible_network_os``. (Note: Previously ``default`` was used instead of ``auto``). .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_netvisor.rst0000644000000000000000000000524200000000000027426 0ustar00rootroot00000000000000.. _netvisor_platform_options: ********************************** Pluribus NETVISOR Platform Options ********************************** Pluribus NETVISOR Ansible is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on NETVISOR in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| not supported by NETVISOR Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) Pluribus NETVISOR does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/netvisor.yml`` --------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.netcommon.netvisor ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Create access list community.network.pn_access_list: pn_name: "foo" pn_scope: "local" state: "present" register: acc_list when: ansible_network_os == 'community.network.netvisor' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_nos.rst0000644000000000000000000000510000000000000026345 0ustar00rootroot00000000000000.. _nos_platform_options: *************************************** NOS Platform Options *************************************** Extreme NOS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on NOS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: community.netcommon.network_cli`` |enable_mode| not supported by NOS Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) NOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/nos.yml`` ---------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.nos ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Get version information (nos) community.network.nos_command: commands: "show version" register: show_ver when: ansible_network_os == 'community.network.nos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_nxos.rst0000644000000000000000000001447100000000000026550 0ustar00rootroot00000000000000.. _nxos_platform_options: *************************************** NXOS Platform Options *************************************** The `Cisco NXOS `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== ========================= .. CLI NX-API ==================== ========================================== ========================= Protocol SSH HTTP(S) Credentials uses SSH keys / SSH-agent if present uses HTTPS certificates if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) via a web proxy Connection Settings ``ansible_connection:`` ``ansible_connection:`` ``ansible.netcommon.network_cli`` ``ansible.netcommon.httpapi`` |enable_mode| supported: use ``ansible_become: yes`` not supported by NX-API with ``ansible_become_method: enable`` and ``ansible_become_password:`` Returned Data Format ``stdout[0].`` ``stdout[0].messages[0].`` ==================== ========================================== ========================= .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) |br| supported as of 2.5.3 The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.httpapi`` instead. Using CLI in Ansible ==================== Example CLI ``group_vars/nxos.yml`` ----------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: cisco.nxos.nxos ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (nxos) cisco.nxos.nxos_config: backup: yes register: backup_nxos_location when: ansible_network_os == 'cisco.nxos.nxos' Using NX-API in Ansible ======================= Enabling NX-API --------------- Before you can use NX-API to connect to a switch, you must enable NX-API. To enable NX-API on a new switch via Ansible, use the ``nxos_nxapi`` module via the CLI connection. Set up group_vars/nxos.yml just like in the CLI example above, then run a playbook task like this: .. code-block:: yaml - name: Enable NX-API cisco.nxos.nxos_nxapi: enable_http: yes enable_https: yes when: ansible_network_os == 'cisco.nxos.nxos' To find out more about the options for enabling HTTP/HTTPS and local http see the :ref:`nxos_nxapi ` module documentation. Once NX-API is enabled, change your ``group_vars/nxos.yml`` to use the NX-API connection. Example NX-API ``group_vars/nxos.yml`` -------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.httpapi ansible_network_os: cisco.nxos.nxos ansible_user: myuser ansible_password: !vault... proxy_env: http_proxy: http://proxy.example.com:8080 - If you are accessing your host directly (not through a web proxy) you can remove the ``proxy_env`` configuration. - If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``. Example NX-API task ------------------- .. code-block:: yaml - name: Backup current switch config (nxos) cisco.nxos.nxos_config: backup: yes register: backup_nxos_location environment: "{{ proxy_env }}" when: ansible_network_os == 'cisco.nxos.nxos' In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module used in the task. .. include:: shared_snippets/SSH_warning.txt Cisco Nexus platform support matrix =================================== The following platforms and software versions have been certified by Cisco to work with this version of Ansible. .. table:: Platform / Software Minimum Requirements :align: center =================== ===================== Supported Platforms Minimum NX-OS Version =================== ===================== Cisco Nexus N3k 7.0(3)I2(5) and later Cisco Nexus N9k 7.0(3)I2(5) and later Cisco Nexus N5k 7.3(0)N1(1) and later Cisco Nexus N6k 7.3(0)N1(1) and later Cisco Nexus N7k 7.3(0)D1(1) and later Cisco Nexus MDS 8.4(1) and later (Please see individual module documentation for compatibility) =================== ===================== .. table:: Platform Models :align: center ======== ============================================== Platform Description ======== ============================================== N3k Support includes N30xx, N31xx and N35xx models N5k Support includes all N5xxx models N6k Support includes all N6xxx models N7k Support includes all N7xxx models N9k Support includes all N9xxx models MDS Support includes all MDS 9xxx models ======== ============================================== .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.505556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_routeros.rst0000644000000000000000000000614400000000000027441 0ustar00rootroot00000000000000.. _routeros_platform_options: *************************************** RouterOS Platform Options *************************************** RouterOS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on RouterOS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.network.network_cli`` |enable_mode| not supported by RouterOS Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) RouterOS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/routeros.yml`` --------------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.routeros ansible_user: myuser ansible_password: !vault... ansible_become: yes ansible_become_method: enable ansible_become_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. - If you are getting timeout errors you may want to add ``+cet1024w`` suffix to your username which will disable console colors, enable "dumb" mode, tell RouterOS not to try detecting terminal capabilities and set terminal width to 1024 columns. See article `Console login process `_ in MikroTik wiki for more information. Example CLI task ---------------- .. code-block:: yaml - name: Display resource statistics (routeros) community.network.routeros_command: commands: /system resource print register: routeros_resources when: ansible_network_os == 'community.network.routeros' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_slxos.rst0000644000000000000000000000514000000000000026722 0ustar00rootroot00000000000000.. _slxos_platform_options: *************************************** SLX-OS Platform Options *************************************** Extreme SLX-OS is part of the `community.network `_ collection and only supports CLI connections today. ``httpapi`` modules may be added in future. This page offers details on how to use ``ansible.netcommon.network_cli`` on SLX-OS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| not supported by SLX-OS Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) SLX-OS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/slxos.yml`` ------------------------------------ .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.slxos ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Backup current switch config (slxos) community.network.slxos_config: backup: yes register: backup_slxos_location when: ansible_network_os == 'community.network.slxos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_voss.rst0000644000000000000000000000520300000000000026544 0ustar00rootroot00000000000000.. _voss_platform_options: *************************************** VOSS Platform Options *************************************** Extreme VOSS is part of the `community.network `_ collection and only supports CLI connections today. This page offers details on how to use ``ansible.netcommon.network_cli`` on VOSS in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| supported: use ``ansible_become: yes`` with ``ansible_become_method: enable`` Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) VOSS does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/voss.yml`` ----------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.voss ansible_user: myuser ansible_become: yes ansible_become_method: enable ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve VOSS info community.network.voss_command: commands: show sys-info when: ansible_network_os == 'community.network.voss' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_vyos.rst0000644000000000000000000000473400000000000026562 0ustar00rootroot00000000000000.. _vyos_platform_options: *************************************** VyOS Platform Options *************************************** The `VyOS `_ collection supports the ``ansible.netcommon.network_cli`` connection type. This page offers details on connection options to manage VyOS using Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` |enable_mode| not supported Returned Data Format Refer to individual module documentation ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. Using CLI in Ansible ==================== Example CLI ``group_vars/vyos.yml`` ----------------------------------- .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: vyos.vyos.vyos ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Retrieve VyOS version info vyos.vyos.vyos_command: commands: show version when: ansible_network_os == 'vyos.vyos.vyos' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/platform_weos4.rst0000644000000000000000000000563400000000000026623 0ustar00rootroot00000000000000.. _weos4_platform_options: *************************************** WeOS 4 Platform Options *************************************** Westermo WeOS 4 is part of the `community.network `_ collection and only supports CLI connections. This page offers details on how to use ``ansible.netcommon.network_cli`` on WeOS 4 in Ansible. .. contents:: :local: Connections available ================================================================================ .. table:: :class: documentation-table ==================== ========================================== .. CLI ==================== ========================================== Protocol SSH Credentials uses SSH keys / SSH-agent if present accepts ``-u myuser -k`` if using password Indirect Access via a bastion (jump host) Connection Settings ``ansible_connection: community.netcommon.network_cli`` |enable_mode| not supported by WeOS 4 Returned Data Format ``stdout[0].`` ==================== ========================================== .. |enable_mode| replace:: Enable Mode |br| (Privilege Escalation) WeOS 4 does not support ``ansible_connection: local``. You must use ``ansible_connection: ansible.netcommon.network_cli``. Using CLI in Ansible ==================== Example CLI ``group_vars/weos4.yml`` ------------------------------------ .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: community.network.weos4 ansible_user: myuser ansible_password: !vault... ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' - If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. - If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. - If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords via environment variables. Example CLI task ---------------- .. code-block:: yaml - name: Get version information (WeOS 4) ansible.netcommon.cli_command: commands: "show version" register: show_ver when: ansible_network_os == 'community.network.weos4' Example Configuration task -------------------------- .. code-block:: yaml - name: Replace configuration with file on ansible host (WeOS 4) ansible.netcommon.cli_config: config: "{{ lookup('file', 'westermo.conf') }}" replace: "yes" diff_match: exact diff_replace: config when: ansible_network_os == 'community.network.weos4' .. include:: shared_snippets/SSH_warning.txt .. seealso:: :ref:`timeout_options` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9505591 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/shared_snippets/0000755000000000000000000000000000000000000026307 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/shared_snippets/SSH_warning.txt0000644000000000000000000000045400000000000031235 0ustar00rootroot00000000000000.. warning:: Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with :ref:`Ansible Vault `. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/network/user_guide/validate.rst0000644000000000000000000001633200000000000025444 0ustar00rootroot00000000000000.. _validate_data: ************************************************* Validate data against set criteria with Ansible ************************************************* The :ref:`validate ` module validates data against your predefined criteria using a validation engine. You can pull this data from a device or file, validate it against your defined criteria, and use the results to identify configuration or operational state drift and optionally take remedial action. .. contents:: :local: Understanding the validate plugin ================================== The `ansible.utils `_ collection includes the :ref:`validate ` module. To validate data: #. Pull in structured data or convert your data to structured format with the :ref:`cli_parse ` module. #. Define the criteria to test that data against. #. Select a validation engine and test the data to see if it is valid based on the selected criteria and validation engine. The structure of the data and the criteria depends on the validation engine you select. The examples here use the ``jsonschema`` validation engine provided in the `ansible.utils `_ collection.Red Hat Ansible Automation Platform subscription supports limited use if jsonschema public APIs as documented. Structuring the data ===================== You can pull previously structured data from a file, or use the :ref:`cli_parse ` module to structure your data. The following example fetches the operational state of some network (Cisco NXOS) interfaces and translates that state to structured data using the ``ansible.netcommon.pyats`` parser. .. code-block:: yaml --- - hosts: nxos connection: ansible.netcommon.network_cli gather_facts: false vars: ansible_network_os: cisco.nxos.nxos ansible_user: "changeme" ansible_password: "changeme" tasks: - name: "Fetch interface state and parse with pyats" ansible.utils.cli_parse: command: show interface parser: name: ansible.netcommon.pyats register: nxos_pyats_show_interface - name: print structured interface state data ansible.builtin.debug: msg: "{{ nxos_pyats_show_interface['parsed'] }}" ---- This results in the following structured data. .. code-block:: text ok: [nxos] => { "changed": false, "parsed": { "Ethernet2/1": { "admin_state": "down", "auto_mdix": "off", "auto_negotiate": false, "bandwidth": 1000000, "beacon": "off" <--output omitted--> }, "Ethernet2/10": { "admin_state": "down", "auto_mdix": "off", "auto_negotiate": false, "bandwidth": 1000000, "beacon": "off", <--output omitted--> } } } See :ref:`cli_parsing` for details on how to parse semi-structured data into structured data. Defining the criteria to validate against ========================================= This example uses the `jsonschema `_ validation engine to parse the JSON structured data we created in the prior section. the criteria defines the state we want the data to conform to. In this instance, we can validate against a desired admin state of ``up`` for all the interfaces. The criteria for ``jsonschema`` in this example is as follows: .. code-block:: text $cat criteria/nxos_show_interface_admin_criteria.json { "type" : "object", "patternProperties": { "^.*": { "type": "object", "properties": { "admin_state": { "type": "string", "pattern": "up" } } } } } Validating the data ==================== Now that we have the structured data and the criteria, we can validate this data with the :ref:`validate ` module. The following tasks check if the current state of the interfaces match the desired state defined in the criteria file. .. code-block:: yaml - name: Validate interface admin state ansible.utils.validate: data: "{{ nxos_pyats_show_interface['parsed'] }}" criteria: - "{{ lookup('file', './criteria/nxos_show_interface_admin_criteria.json') | from_json }}" engine: ansible.utils.jsonschema ignore_errors: true register: result - name: Print the interface names that do not satisfy the desired state ansible.builtin.debug: msg: "{{ item['data_path'].split('.')[0] }}" loop: "{{ result['errors'] }}" when: "'errors' in result" In these tasks, we have: #. Set ``data`` to the structured JSON data from the :ref:`cli_parse ` module. #. Set ``criteria`` to the JSON criteria file we defined. #. Set the validate engine to ``jsonschema``. .. note:: The value of the criteria option can be a list and should be in a format that is defined by the validation engine used. You need to install the `jsonschema `_ on the control node for this example. The tasks output a list of errors indicating interfaces that do not have admin value in ``up`` state. .. code-block:: text TASK [Validate interface for admin state] *********************************************************************************************************** fatal: [nxos02]: FAILED! => {"changed": false, "errors": [{"data_path": "Ethernet2/1.admin_state", "expected": "up", "found": "down", "json_path": "$.Ethernet2/1.admin_state", "message": "'down' does not match 'up'", "relative_schema": {"pattern": "up", "type": "string"}, "schema_path": "patternProperties.^.*.properties.admin_state.pattern", "validator": "pattern"}, {"data_path": "Ethernet2/10.admin_state", "expected": "up", "found": "down", "json_path": "$.Ethernet2/10.admin_state", "message": "'down' does not match 'up'", "relative_schema": {"pattern": "up", "type": "string"}, "schema_path": "patternProperties.^.*.properties.admin_state.pattern", "validator": "pattern"}], "msg": "Validation errors were found.\nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. \nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. \nAt 'patternProperties.^.*.properties.admin_state.pattern' 'down' does not match 'up'. "} ...ignoring TASK [Print the interface names that do not satisfy the desired state] **************************************************************************** Monday 14 December 2020 11:05:38 +0530 (0:00:01.661) 0:00:28.676 ******* ok: [nxos] => { "msg": "Ethernet2/1" } ok: [nxos] => { "msg": "Ethernet2/10" } This shows Ethernet2/1 and Ethernet2/10 are not in the desired state based on the defined criteria. You can create a report or take further action to remediate this to bring the interfaces to the desired state based on the defined criteria. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.952559 ansible-core-2.12.0/docs/docsite/rst/plugins/0000755000000000000000000000000000000000000020751 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/action.rst0000644000000000000000000000346700000000000022772 0ustar00rootroot00000000000000.. _action_plugins: Action plugins ============== .. contents:: :local: :depth: 2 Action plugins act in conjunction with :ref:`modules ` to execute the actions required by playbook tasks. They usually execute automatically in the background doing prerequisite work before modules execute. The 'normal' action plugin is used for modules that do not already have an action plugin. If necessary, you can :ref:`create custom action plugins `. .. _enabling_action: Enabling action plugins ----------------------- You can enable a custom action plugin by either dropping it into the ``action_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the action plugin directory sources configured in :ref:`ansible.cfg `. .. _using_action: Using action plugins -------------------- Action plugin are executed by default when an associated module is used; no action is required. Plugin list ----------- You cannot list action plugins directly, they show up as their counterpart modules: Use ``ansible-doc -l`` to see the list of available modules. Use ``ansible-doc `` to see specific documentation and examples, this should note if the module has a corresponding action plugin. .. seealso:: :ref:`cache_plugins` Cache plugins :ref:`callback_plugins` Callback plugins :ref:`connection_plugins` Connection plugins :ref:`inventory_plugins` Inventory plugins :ref:`shell_plugins` Shell plugins :ref:`strategy_plugins` Strategy plugins :ref:`vars_plugins` Vars plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/become.rst0000644000000000000000000000410400000000000022734 0ustar00rootroot00000000000000.. _become_plugins: Become plugins ============== .. contents:: :local: :depth: 2 .. versionadded:: 2.8 Become plugins work to ensure that Ansible can use certain privilege escalation systems when running the basic commands to work with the target machine as well as the modules required to execute the tasks specified in the play. These utilities (``sudo``, ``su``, ``doas``, and so on) generally let you 'become' another user to execute a command with the permissions of that user. .. _enabling_become: Enabling Become Plugins ----------------------- The become plugins shipped with Ansible are already enabled. Custom plugins can be added by placing them into a ``become_plugins`` directory adjacent to your play, inside a role, or by placing them in one of the become plugin directory sources configured in :ref:`ansible.cfg `. .. _using_become: Using Become Plugins -------------------- In addition to the default configuration settings in :ref:`ansible_configuration_settings` or the ``--become-method`` command line option, you can use the ``become_method`` keyword in a play or, if you need to be 'host specific', the connection variable ``ansible_become_method`` to select the plugin to use. You can further control the settings for each plugin via other configuration options detailed in the plugin themselves (linked below). .. _become_plugin_list: Plugin List ----------- You can use ``ansible-doc -t become -l`` to see the list of available plugins. Use ``ansible-doc -t become `` to see specific documentation and examples. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`inventory_plugins` Inventory plugins :ref:`callback_plugins` Callback plugins :ref:`filter_plugins` Filter plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/cache.rst0000644000000000000000000001114200000000000022545 0ustar00rootroot00000000000000.. _cache_plugins: Cache plugins ============= .. contents:: :local: :depth: 2 Cache plugins allow Ansible to store gathered facts or inventory source data without the performance hit of retrieving them from source. The default cache plugin is the :ref:`memory ` plugin, which only caches the data for the current execution of Ansible. Other plugins with persistent storage are available to allow caching the data across runs. Some of these cache plugins write to files, others write to databases. You can use different cache plugins for inventory and facts. If you enable inventory caching without setting an inventory-specific cache plugin, Ansible uses the fact cache plugin for both facts and inventory. If necessary, you can :ref:`create custom cache plugins `. .. _enabling_cache: Enabling fact cache plugins --------------------------- Fact caching is always enabled. However, only one fact cache plugin can be active at a time. You can select the cache plugin to use for fact caching in the Ansible configuration, either with an environment variable: .. code-block:: shell export ANSIBLE_CACHE_PLUGIN=jsonfile or in the ``ansible.cfg`` file: .. code-block:: ini [defaults] fact_caching=redis If the cache plugin is in a collection use the fully qualified name: .. code-block:: ini [defaults] fact_caching = namespace.collection_name.cache_plugin_name To enable a custom cache plugin, save it in a ``cache_plugins`` directory adjacent to your play, inside a role, or in one of the directory sources configured in :ref:`ansible.cfg `. You also need to configure other settings specific to each plugin. Consult the individual plugin documentation or the Ansible :ref:`configuration ` for more details. Enabling inventory cache plugins -------------------------------- Inventory caching is disabled by default. To cache inventory data, you must enable inventory caching and then select the specific cache plugin you want to use. Not all inventory plugins support caching, so check the documentation for the inventory plugin(s) you want to use. You can enable inventory caching with an environment variable: .. code-block:: shell export ANSIBLE_INVENTORY_CACHE=True or in the ``ansible.cfg`` file: .. code-block:: ini [inventory] cache=True or if the inventory plugin accepts a YAML configuration source, in the configuration file: .. code-block:: yaml # dev.aws_ec2.yaml plugin: aws_ec2 cache: True Only one inventory cache plugin can be active at a time. You can set it with an environment variable: .. code-block:: shell export ANSIBLE_INVENTORY_CACHE_PLUGIN=jsonfile or in the ansible.cfg file: .. code-block:: ini [inventory] cache_plugin=jsonfile or if the inventory plugin accepts a YAML configuration source, in the configuration file: .. code-block:: yaml # dev.aws_ec2.yaml plugin: aws_ec2 cache_plugin: jsonfile To cache inventory with a custom plugin in your plugin path, follow the :ref:`developer guide on cache plugins`. To cache inventory with a cache plugin in a collection, use the FQCN: .. code-block:: ini [inventory] cache_plugin=collection_namespace.collection_name.cache_plugin If you enable caching for inventory plugins without selecting an inventory-specific cache plugin, Ansible falls back to caching inventory with the fact cache plugin you configured. Consult the individual inventory plugin documentation or the Ansible :ref:`configuration ` for more details. .. Note: In Ansible 2.7 and earlier, inventory plugins can only use file-based cache plugins, such as jsonfile, pickle, and yaml. .. _using_cache: Using cache plugins ------------------- Cache plugins are used automatically once they are enabled. .. _cache_plugin_list: Plugin list ----------- You can use ``ansible-doc -t cache -l`` to see the list of available plugins. Use ``ansible-doc -t cache `` to see specific documentation and examples. .. seealso:: :ref:`action_plugins` Action plugins :ref:`callback_plugins` Callback plugins :ref:`connection_plugins` Connection plugins :ref:`inventory_plugins` Inventory plugins :ref:`shell_plugins` Shell plugins :ref:`strategy_plugins` Strategy plugins :ref:`vars_plugins` Vars plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/callback.rst0000644000000000000000000000666500000000000023254 0ustar00rootroot00000000000000.. _callback_plugins: Callback plugins ================ .. contents:: :local: :depth: 2 Callback plugins enable adding new behaviors to Ansible when responding to events. By default, callback plugins control most of the output you see when running the command line programs, but can also be used to add additional output, integrate with other tools and marshal the events to a storage backend. If necessary, you can :ref:`create custom callback plugins `. .. _callback_examples: Example callback plugins ------------------------ The :ref:`log_plays ` callback is an example of how to record playbook events to a log file, and the :ref:`mail ` callback sends email on playbook failures. The :ref:`say ` callback responds with computer synthesized speech in relation to playbook events. .. _enabling_callbacks: Enabling callback plugins ------------------------- You can activate a custom callback by either dropping it into a ``callback_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the callback directory sources configured in :ref:`ansible.cfg `. Plugins are loaded in alphanumeric order. For example, a plugin implemented in a file named `1_first.py` would run before a plugin file named `2_second.py`. Most callbacks shipped with Ansible are disabled by default and need to be enabled in your :ref:`ansible.cfg ` file in order to function. For example: .. code-block:: ini #callbacks_enabled = timer, mail, profile_roles, collection_namespace.collection_name.custom_callback Setting a callback plugin for ``ansible-playbook`` -------------------------------------------------- You can only have one plugin be the main manager of your console output. If you want to replace the default, you should define CALLBACK_TYPE = stdout in the subclass and then configure the stdout plugin in :ref:`ansible.cfg `. For example: .. code-block:: ini stdout_callback = dense or for my custom callback: .. code-block:: ini stdout_callback = mycallback This only affects :ref:`ansible-playbook` by default. Setting a callback plugin for ad hoc commands --------------------------------------------- The :ref:`ansible` ad hoc command specifically uses a different callback plugin for stdout, so there is an extra setting in :ref:`ansible_configuration_settings` you need to add to use the stdout callback defined above: .. code-block:: ini [defaults] bin_ansible_callbacks=True You can also set this as an environment variable: .. code-block:: shell export ANSIBLE_LOAD_CALLBACK_PLUGINS=1 .. _callback_plugin_list: Plugin list ----------- You can use ``ansible-doc -t callback -l`` to see the list of available plugins. Use ``ansible-doc -t callback `` to see specific documents and examples. .. seealso:: :ref:`action_plugins` Action plugins :ref:`cache_plugins` Cache plugins :ref:`connection_plugins` Connection plugins :ref:`inventory_plugins` Inventory plugins :ref:`shell_plugins` Shell plugins :ref:`strategy_plugins` Strategy plugins :ref:`vars_plugins` Vars plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/cliconf.rst0000644000000000000000000000356500000000000023131 0ustar00rootroot00000000000000.. _cliconf_plugins: Cliconf plugins =============== .. contents:: :local: :depth: 2 Cliconf plugins are abstractions over the CLI interface to network devices. They provide a standard interface for Ansible to execute tasks on those network devices. These plugins generally correspond one-to-one to network device platforms. Ansible loads the appropriate cliconf plugin automatically based on the ``ansible_network_os`` variable. .. _enabling_cliconf: Adding cliconf plugins ------------------------- You can extend Ansible to support other network devices by dropping a custom plugin into the ``cliconf_plugins`` directory. .. _using_cliconf: Using cliconf plugins ------------------------ The cliconf plugin to use is determined automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality. Most cliconf plugins can operate without configuration. A few have additional options that can be set to affect how tasks are translated into CLI commands. Plugins are self-documenting. Each plugin should document its configuration options. .. _cliconf_plugin_list: Viewing cliconf plugins ----------------------- These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several cliconf plugins. To list all available cliconf plugins on your control node, type ``ansible-doc -t cliconf -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t cliconf``. .. seealso:: :ref:`Ansible for Network Automation` An overview of using Ansible to automate networking devices. `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-network IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.506556 ansible-core-2.12.0/docs/docsite/rst/plugins/connection.rst0000644000000000000000000000703000000000000023642 0ustar00rootroot00000000000000.. _connection_plugins: Connection plugins ================== .. contents:: :local: :depth: 2 Connection plugins allow Ansible to connect to the target hosts so it can execute tasks on them. Ansible ships with many connection plugins, but only one can be used per host at a time. By default, Ansible ships with several connection plugins. The most commonly used are the :ref:`paramiko SSH`, native ssh (just called :ref:`ssh`), and :ref:`local` connection types. All of these can be used in playbooks and with :command:`/usr/bin/ansible` to decide how you want to talk to remote machines. If necessary, you can :ref:`create custom connection plugins `. The basics of these connection types are covered in the :ref:`getting started` section. .. _ssh_plugins: ``ssh`` plugins --------------- Because ssh is the default protocol used in system administration and the protocol most used in Ansible, ssh options are included in the command line tools. See :ref:`ansible-playbook` for more details. .. _enabling_connection: Adding connection plugins ------------------------- You can extend Ansible to support other transports (such as SNMP or message bus) by dropping a custom plugin into the ``connection_plugins`` directory. .. _using_connection: Using connection plugins ------------------------ You can set the connection plugin globally via :ref:`configuration`, at the command line (``-c``, ``--connection``), as a :ref:`keyword ` in your play, or by setting a :ref:`variable`, most often in your inventory. For example, for Windows machines you might want to set the :ref:`winrm ` plugin as an inventory variable. Most connection plugins can operate with minimal configuration. By default they use the :ref:`inventory hostname` and defaults to find the target host. Plugins are self-documenting. Each plugin should document its configuration options. The following are connection variables common to most connection plugins: :ref:`ansible_host` The name of the host to connect to, if different from the :ref:`inventory ` hostname. :ref:`ansible_port` The ssh port number, for :ref:`ssh ` and :ref:`paramiko_ssh ` it defaults to 22. :ref:`ansible_user` The default user name to use for log in. Most plugins default to the 'current user running Ansible'. Each plugin might also have a specific version of a variable that overrides the general version. For example, ``ansible_ssh_host`` for the :ref:`ssh ` plugin. .. _connection_plugin_list: Plugin list ----------- You can use ``ansible-doc -t connection -l`` to see the list of available plugins. Use ``ansible-doc -t connection `` to see detailed documentation and examples. .. seealso:: :ref:`Working with Playbooks` An introduction to playbooks :ref:`callback_plugins` Callback plugins :ref:`filter_plugins` Filter plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins :ref:`vars_plugins` Vars plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/docs_fragment.rst0000644000000000000000000000204300000000000024315 0ustar00rootroot00000000000000.. _docs_fragment_plugins: Docs fragments ============== .. contents:: :local: :depth: 2 Docs fragments allow you to document common parameters of multiple plugins or modules in a single place. .. _enabling_docs_fragments: Enabling docs fragments ----------------------- You can add a custom docs fragment by dropping it into a ``doc_fragments`` directory adjacent to your collection or role, just like any other plugin. .. _using_docs_fragments: Using docs fragments -------------------- Only collection developers and maintainers use docs fragments. For more information on using docs fragments, see :ref:`module_docs_fragments` or :ref:`docfragments_collections`. .. seealso:: :ref:`developing_modules_general` An introduction to creating Ansible modules :ref:`developing_collections` An guide to creating Ansible collections `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/filter.rst0000644000000000000000000000266300000000000022777 0ustar00rootroot00000000000000.. _filter_plugins: Filter plugins ============== .. contents:: :local: :depth: 2 Filter plugins manipulate data. With the right filter you can extract a particular value, transform data types and formats, perform mathematical calculations, split and concatenate strings, insert dates and times, and do much more. Ansible uses the :ref:`standard filters ` shipped with Jinja2 and adds some specialized filter plugins. You can :ref:`create custom Ansible filters as plugins `. .. _enabling_filter: Enabling filter plugins ----------------------- You can add a custom filter plugin by dropping it into a ``filter_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the filter plugin directory sources configured in :ref:`ansible.cfg `. .. _using_filter: Using filter plugins -------------------- For information on using filter plugins, see :ref:`playbooks_filters`. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`inventory_plugins` Inventory plugins :ref:`callback_plugins` Callback plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/httpapi.rst0000644000000000000000000000513300000000000023156 0ustar00rootroot00000000000000.. _httpapi_plugins: Httpapi plugins =============== .. contents:: :local: :depth: 2 Httpapi plugins tell Ansible how to interact with a remote device's HTTP-based API and execute tasks on the device. Each plugin represents a particular dialect of API. Some are platform-specific (Arista eAPI, Cisco NXAPI), while others might be usable on a variety of platforms (RESTCONF). Ansible loads the appropriate httpapi plugin automatically based on the ``ansible_network_os`` variable. .. _enabling_httpapi: Adding httpapi plugins ------------------------- You can extend Ansible to support other APIs by dropping a custom plugin into the ``httpapi_plugins`` directory. See :ref:`developing_plugins_httpapi` for details. .. _using_httpapi: Using httpapi plugins ------------------------ The httpapi plugin to use is determined automatically from the ``ansible_network_os`` variable. Most httpapi plugins can operate without configuration. Additional options may be defined by each plugin. Plugins are self-documenting. Each plugin should document its configuration options. The following sample playbook shows the httpapi plugin for an Arista network device, assuming an inventory variable set as ``ansible_network_os=eos`` for the httpapi plugin to trigger off: .. code-block:: yaml - hosts: leaf01 connection: httpapi gather_facts: false tasks: - name: type a simple arista command eos_command: commands: - show version | json register: command_output - name: print command output to terminal window debug: var: command_output.stdout[0]["version"] See the full working example `on GitHub `_. .. _httpapi_plugin_list: Viewing httpapi plugins ----------------------- These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several httpapi plugins. To list all available httpapi plugins on your control node, type ``ansible-doc -t httpapi -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t httpapi``. .. seealso:: :ref:`Ansible for Network Automation` An overview of using Ansible to automate networking devices. :ref:`Developing network modules` How to develop network modules. `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-network IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/index.html0000644000000000000000000000033100000000000022743 0ustar00rootroot00000000000000 `` to see plugin-specific documentation and examples. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`callback_plugins` Callback plugins :ref:`connection_plugins` Connection plugins :ref:`filter_plugins` Filter plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins :ref:`vars_plugins` Vars plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/lookup.rst0000644000000000000000000001503000000000000023013 0ustar00rootroot00000000000000.. _lookup_plugins: Lookup plugins ============== .. contents:: :local: :depth: 2 Lookup plugins are an Ansible-specific extension to the Jinja2 templating language. You can use lookup plugins to access data from outside sources (files, databases, key/value stores, APIs, and other services) within your playbooks. Like all :ref:`templating `, lookups execute and are evaluated on the Ansible control machine. Ansible makes the data returned by a lookup plugin available using the standard templating system. You can use lookup plugins to load variables or templates with information from external sources. You can :ref:`create custom lookup plugins `. .. note:: - Lookups are executed with a working directory relative to the role or play, as opposed to local tasks, which are executed relative the executed script. - Pass ``wantlist=True`` to lookups to use in Jinja2 template "for" loops. - By default, lookup return values are marked as unsafe for security reasons. If you trust the outside source your lookup accesses, pass ``allow_unsafe=True`` to allow Jinja2 templates to evaluate lookup values. .. warning:: - Some lookups pass arguments to a shell. When using variables from a remote/untrusted source, use the `|quote` filter to ensure safe usage. .. _enabling_lookup: Enabling lookup plugins ----------------------- Ansible enables all lookup plugins it can find. You can activate a custom lookup by either dropping it into a ``lookup_plugins`` directory adjacent to your play, inside the ``plugins/lookup/`` directory of a collection you have installed, inside a standalone role, or in one of the lookup directory sources configured in :ref:`ansible.cfg `. .. _using_lookup: Using lookup plugins -------------------- You can use lookup plugins anywhere you can use templating in Ansible: in a play, in variables file, or in a Jinja2 template for the :ref:`template ` module. For more information on using lookup plugins, see :ref:`playbooks_lookups`. .. code-block:: YAML+Jinja vars: file_contents: "{{ lookup('file', 'path/to/file.txt') }}" Lookups are an integral part of loops. Wherever you see ``with_``, the part after the underscore is the name of a lookup. For this reason, most lookups output lists and take lists as input; for example, ``with_items`` uses the :ref:`items ` lookup:: tasks: - name: count to 3 debug: msg={{ item }} with_items: [1, 2, 3] You can combine lookups with :ref:`filters `, :ref:`tests ` and even each other to do some complex data generation and manipulation. For example:: tasks: - name: valid but useless and over complicated chained lookups and filters debug: msg="find the answer here:\n{{ lookup('url', 'https://google.com/search/?q=' + item|urlencode)|join(' ') }}" with_nested: - "{{ lookup('consul_kv', 'bcs/' + lookup('file', '/the/question') + ', host=localhost, port=2000')|shuffle }}" - "{{ lookup('sequence', 'end=42 start=2 step=2')|map('log', 4)|list) }}" - ['a', 'c', 'd', 'c'] .. versionadded:: 2.6 You can control how errors behave in all lookup plugins by setting ``errors`` to ``ignore``, ``warn``, or ``strict``. The default setting is ``strict``, which causes the task to fail if the lookup returns an error. For example: To ignore lookup errors:: - name: if this file does not exist, I do not care .. file plugin itself warns anyway ... debug: msg="{{ lookup('file', '/nosuchfile', errors='ignore') }}" .. code-block:: ansible-output [WARNING]: Unable to find '/nosuchfile' in expected paths (use -vvvvv to see paths) ok: [localhost] => { "msg": "" } To get a warning instead of a failure:: - name: if this file does not exist, let me know, but continue debug: msg="{{ lookup('file', '/nosuchfile', errors='warn') }}" .. code-block:: ansible-output [WARNING]: Unable to find '/nosuchfile' in expected paths (use -vvvvv to see paths) [WARNING]: An unhandled exception occurred while running the lookup plugin 'file'. Error was a , original message: could not locate file in lookup: /nosuchfile ok: [localhost] => { "msg": "" } To get a fatal error (the default):: - name: if this file does not exist, FAIL (this is the default) debug: msg="{{ lookup('file', '/nosuchfile', errors='strict') }}" .. code-block:: ansible-output [WARNING]: Unable to find '/nosuchfile' in expected paths (use -vvvvv to see paths) fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a , original message: could not locate file in lookup: /nosuchfile"} .. _query: Forcing lookups to return lists: ``query`` and ``wantlist=True`` ---------------------------------------------------------------- .. versionadded:: 2.5 In Ansible 2.5, a new Jinja2 function called ``query`` was added for invoking lookup plugins. The difference between ``lookup`` and ``query`` is largely that ``query`` will always return a list. The default behavior of ``lookup`` is to return a string of comma separated values. ``lookup`` can be explicitly configured to return a list using ``wantlist=True``. This feature provides an easier and more consistent interface for interacting with the new ``loop`` keyword, while maintaining backwards compatibility with other uses of ``lookup``. The following examples are equivalent: .. code-block:: jinja lookup('dict', dict_variable, wantlist=True) query('dict', dict_variable) As demonstrated above, the behavior of ``wantlist=True`` is implicit when using ``query``. Additionally, ``q`` was introduced as a shortform of ``query``: .. code-block:: jinja q('dict', dict_variable) .. _lookup_plugins_list: Plugin list ----------- You can use ``ansible-doc -t lookup -l`` to see the list of available plugins. Use ``ansible-doc -t lookup `` to see specific documents and examples. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`inventory_plugins` Ansible inventory plugins :ref:`callback_plugins` Ansible callback plugins :ref:`filter_plugins` Jinja2 filter plugins :ref:`test_plugins` Jinja2 test plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/module.rst0000644000000000000000000000261700000000000022776 0ustar00rootroot00000000000000.. _module_plugins: Modules ======= .. contents:: :local: :depth: 2 Modules are the main building blocks of Ansible playbooks. Although we do not generally speak of "module plugins", a module is a type of plugin. For a developer-focused description of the differences between modules and other plugins, see :ref:`modules_vs_plugins`. .. _enabling_modules: Enabling modules ---------------- You can enable a custom module by dropping it into one of these locations: * any directory added to the ``ANSIBLE_LIBRARY`` environment variable (``$ANSIBLE_LIBRARY`` takes a colon-separated list like ``$PATH``) * ``~/.ansible/plugins/modules/`` * ``/usr/share/ansible/plugins/modules/`` For more information on using local custom modules, see :ref:`local_modules`. .. _using_modules: Using modules ------------- For information on using modules in ad hoc tasks, see :ref:`intro_adhoc`. For information on using modules in playbooks, see :ref:`playbooks_intro`. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`developing_modules_general` An introduction to creating Ansible modules :ref:`developing_collections` An guide to creating Ansible collections `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-devel IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/module_util.rst0000644000000000000000000000177200000000000024034 0ustar00rootroot00000000000000.. _module_util_plugins: Module utilities ================ .. contents:: :local: :depth: 2 Module utilities contain shared code used by multiple plugins. You can write :ref:`custom module utilities `. .. _enabling_module_utils: Enabling module utilities ------------------------- You can add a custom module utility by dropping it into a ``module_utils`` directory adjacent to your collection or role, just like any other plugin. .. _using_module_utils: Using module utilities ---------------------- For information on using module utilities, see :ref:`developing_module_utilities`. .. seealso:: :ref:`developing_modules_general` An introduction to creating Ansible modules :ref:`developing_collections` An guide to creating Ansible collections `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-devel IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/netconf.rst0000644000000000000000000000441000000000000023136 0ustar00rootroot00000000000000.. _netconf_plugins: Netconf plugins =============== .. contents:: :local: :depth: 2 Netconf plugins are abstractions over the Netconf interface to network devices. They provide a standard interface for Ansible to execute tasks on those network devices. These plugins generally correspond one-to-one to network device platforms. Ansible loads the appropriate netconf plugin automatically based on the ``ansible_network_os`` variable. If the platform supports standard Netconf implementation as defined in the Netconf RFC specification, Ansible loads the ``default`` netconf plugin. If the platform supports propriety Netconf RPCs, Ansible loads the platform-specific netconf plugin. .. _enabling_netconf: Adding netconf plugins ------------------------- You can extend Ansible to support other network devices by dropping a custom plugin into the ``netconf_plugins`` directory. .. _using_netconf: Using netconf plugins ------------------------ The netconf plugin to use is determined automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality. Most netconf plugins can operate without configuration. A few have additional options that can be set to affect how tasks are translated into netconf commands. A ncclient device specific handler name can be set in the netconf plugin or else the value of ``default`` is used as per ncclient device handler. Plugins are self-documenting. Each plugin should document its configuration options. .. _netconf_plugin_list: Listing netconf plugins ----------------------- These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several netconf plugins. To list all available netconf plugins on your control node, type ``ansible-doc -t netconf -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t netconf``. .. seealso:: :ref:`Ansible for Network Automation` An overview of using Ansible to automate networking devices. `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-network IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/plugins.rst0000644000000000000000000000215000000000000023162 0ustar00rootroot00000000000000.. _plugins_lookup: .. _working_with_plugins: ******************** Working with plugins ******************** Plugins are pieces of code that augment Ansible's core functionality. Ansible uses a plugin architecture to enable a rich, flexible and expandable feature set. Ansible ships with a number of handy plugins, and you can easily write your own. This section covers the various types of plugins that are included with Ansible: .. toctree:: :maxdepth: 1 action become cache callback cliconf connection docs_fragment filter httpapi inventory lookup module module_util netconf shell strategy terminal test vars .. seealso:: :ref:`plugin_filtering_config` Controlling access to modules :ref:`ansible_configuration_settings` Ansible configuration documentation and settings :ref:`command_line_tools` Ansible tools, description and options `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/shell.rst0000644000000000000000000000344100000000000022614 0ustar00rootroot00000000000000.. _shell_plugins: Shell plugins ============= .. contents:: :local: :depth: 2 Shell plugins work to ensure that the basic commands Ansible runs are properly formatted to work with the target machine and allow the user to configure certain behaviors related to how Ansible executes tasks. .. _enabling_shell: Enabling shell plugins ---------------------- You can add a custom shell plugin by dropping it into a ``shell_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the shell plugin directory sources configured in :ref:`ansible.cfg `. .. warning:: You should not alter which plugin is used unless you have a setup in which the default ``/bin/sh`` is not a POSIX compatible shell or is not available for execution. .. _using_shell: Using shell plugins ------------------- In addition to the default configuration settings in :ref:`ansible_configuration_settings`, you can use the connection variable :ref:`ansible_shell_type ` to select the plugin to use. In this case, you will also want to update the :ref:`ansible_shell_executable ` to match. You can further control the settings for each plugin via other configuration options detailed in the plugin themselves (linked below). .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`inventory_plugins` Inventory plugins :ref:`callback_plugins` Callback plugins :ref:`filter_plugins` Filter plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.507556 ansible-core-2.12.0/docs/docsite/rst/plugins/strategy.rst0000644000000000000000000000432700000000000023353 0ustar00rootroot00000000000000.. _strategy_plugins: Strategy plugins ================ .. contents:: :local: :depth: 2 Strategy plugins control the flow of play execution by handling task and host scheduling. For more information on using strategy plugins and other ways to control execution order, see :ref:`playbooks_strategies`. .. _enable_strategy: Enabling strategy plugins ------------------------- All strategy plugins shipped with Ansible are enabled by default. You can enable a custom strategy plugin by putting it in one of the lookup directory sources configured in :ref:`ansible.cfg `. .. _using_strategy: Using strategy plugins ---------------------- Only one strategy plugin can be used in a play, but you can use different ones for each play in a playbook or ansible run. By default Ansible uses the :ref:`linear ` plugin. You can change this default in Ansible :ref:`configuration ` using an environment variable: .. code-block:: shell export ANSIBLE_STRATEGY=free or in the `ansible.cfg` file: .. code-block:: ini [defaults] strategy=linear You can also specify the strategy plugin in the play via the :ref:`strategy keyword ` in a play:: - hosts: all strategy: debug tasks: - copy: src=myhosts dest=/etc/hosts notify: restart_tomcat - package: name=tomcat state=present handlers: - name: restart_tomcat service: name=tomcat state=restarted .. _strategy_plugin_list: Plugin list ----------- You can use ``ansible-doc -t strategy -l`` to see the list of available plugins. Use ``ansible-doc -t strategy `` to see plugin-specific specific documentation and examples. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`inventory_plugins` Inventory plugins :ref:`callback_plugins` Callback plugins :ref:`filter_plugins` Filter plugins :ref:`test_plugins` Test plugins :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/plugins/terminal.rst0000644000000000000000000000405100000000000023316 0ustar00rootroot00000000000000.. _terminal_plugins: Terminal plugins ================ .. contents:: :local: :depth: 2 Terminal plugins contain information on how to prepare a particular network device's SSH shell is properly initialized to be used with Ansible. This typically includes disabling automatic paging, detecting errors in output, and enabling privileged mode if supported and required on the device. These plugins correspond one-to-one to network device platforms. Ansible loads the appropriate terminal plugin automatically based on the ``ansible_network_os`` variable. .. _enabling_terminal: Adding terminal plugins ------------------------- You can extend Ansible to support other network devices by dropping a custom plugin into the ``terminal_plugins`` directory. .. _using_terminal: Using terminal plugins ------------------------ Ansible determines which terminal plugin to use automatically from the ``ansible_network_os`` variable. There should be no reason to override this functionality. Terminal plugins operate without configuration. All options to control the terminal are exposed in the ``network_cli`` connection plugin. Plugins are self-documenting. Each plugin should document its configuration options. .. _terminal_plugin_list: Viewing terminal plugins ------------------------ These plugins have migrated to collections on `Ansible Galaxy `_. If you installed Ansible version 2.10 or later using ``pip``, you have access to several terminal plugins. To list all available terminal plugins on your control node, type ``ansible-doc -t terminal -l``. To view plugin-specific documentation and examples, use ``ansible-doc -t terminal``. .. seealso:: :ref:`Ansible for Network Automation` An overview of using Ansible to automate networking devices. :ref:`connection_plugins` Connection plugins `User Mailing List `_ Have a question? Stop by the google group! `irc.libera.chat `_ #ansible-network IRC chat channel ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/plugins/test.rst0000644000000000000000000000304200000000000022461 0ustar00rootroot00000000000000.. _test_plugins: Test plugins ============= .. contents:: :local: :depth: 2 Test plugins evaluate template expressions and return True or False. With test plugins you can create :ref:`conditionals ` to implement the logic of your tasks, blocks, plays, playbooks, and roles. Ansible uses the `standard tests `_ shipped as part of Jinja, and adds some specialized test plugins. You can :ref:`create custom Ansible test plugins `. .. _standard tests: https://jinja.palletsprojects.com/en/latest/templates/#builtin-tests .. _enabling_test: Enabling test plugins ---------------------- You can add a custom test plugin by dropping it into a ``test_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the test plugin directory sources configured in :ref:`ansible.cfg `. .. _using_test: Using test plugins ------------------- The User Guide offers detailed documentation on :ref:`using test plugins `. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_tests` Using tests :ref:`playbooks_conditionals` Using conditional statements :ref:`filter_plugins` Filter plugins :ref:`playbooks_filters` Using filters :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/plugins/vars.rst0000644000000000000000000000644400000000000022466 0ustar00rootroot00000000000000.. _vars_plugins: Vars plugins ============ .. contents:: :local: :depth: 2 Vars plugins inject additional variable data into Ansible runs that did not come from an inventory source, playbook, or command line. Playbook constructs like 'host_vars' and 'group_vars' work using vars plugins. For more details about variables in Ansible, see :ref:`playbooks_variables`. Vars plugins were partially implemented in Ansible 2.0 and rewritten to be fully implemented starting with Ansible 2.4. The :ref:`host_group_vars ` plugin shipped with Ansible enables reading variables from :ref:`host_variables` and :ref:`group_variables`. .. _enable_vars: Enabling vars plugins --------------------- You can activate a custom vars plugin by either dropping it into a ``vars_plugins`` directory adjacent to your play, inside a role, or by putting it in one of the directory sources configured in :ref:`ansible.cfg `. Most vars plugins are disabled by default. To enable a vars plugin, set ``vars_plugins_enabled`` in the ``defaults`` section of :ref:`ansible.cfg ` or set the ``ANSIBLE_VARS_ENABLED`` environment variable to the list of vars plugins you want to execute. By default, the :ref:`host_group_vars ` plugin shipped with Ansible is enabled. Starting in Ansible 2.10, you can use vars plugins in collections. All vars plugins in collections must be explicitly enabled and must use the fully qualified collection name in the format ``namespace.collection_name.vars_plugin_name``. .. code-block:: yaml [defaults] vars_plugins_enabled = host_group_vars,namespace.collection_name.vars_plugin_name .. _using_vars: Using vars plugins ------------------ By default, vars plugins are used on demand automatically after they are enabled. Starting in Ansible 2.10, vars plugins can be made to run at specific times. `ansible-inventory` does not use these settings, and always loads vars plugins. The global setting ``RUN_VARS_PLUGINS`` can be set in ``ansible.cfg`` using ``run_vars_plugins`` in the ``defaults`` section or by the ``ANSIBLE_RUN_VARS_PLUGINS`` environment variable. The default option, ``demand``, runs any enabled vars plugins relative to inventory sources whenever variables are demanded by tasks. You can use the option ``start`` to run any enabled vars plugins relative to inventory sources after importing that inventory source instead. You can also control vars plugin execution on a per-plugin basis for vars plugins that support the ``stage`` option. To run the :ref:`host_group_vars ` plugin after importing inventory you can add the following to :ref:`ansible.cfg `: .. code-block:: ini [vars_host_group_vars] stage = inventory .. _vars_plugin_list: Plugin list ----------- You can use ``ansible-doc -t vars -l`` to see the list of available vars plugins. Use ``ansible-doc -t vars `` to see plugin-specific documentation and examples. .. seealso:: :ref:`cache_plugins` Cache plugins :ref:`lookup_plugins` Lookup plugins `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.953559 ansible-core-2.12.0/docs/docsite/rst/porting_guides/0000755000000000000000000000000000000000000022312 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/porting_guides/core_porting_guides.rst0000644000000000000000000000114200000000000027074 0ustar00rootroot00000000000000.. _core_porting_guides: *************************** Ansible Core Porting Guides *************************** This section lists porting guides that can help you in updating playbooks, plugins and other parts of your Ansible infrastructure from one version of ``ansible-core`` to the next. Please note that this is not a complete list. If you believe any extra information would be useful in these pages, you can edit by clicking `Edit on GitHub` on the top right, or raising an issue. .. toctree:: :maxdepth: 1 :glob: porting_guide_core_2.12 porting_guide_core_2.11 porting_guide_base_2.10 ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.0.rst0000644000000000000000000003710300000000000026266 0ustar00rootroot00000000000000 .. _porting_2.0_guide: ************************* Ansible 2.0 Porting Guide ************************* This section discusses the behavioral changes between Ansible 1.x and Ansible 2.0. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.0 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== This section discusses any changes you may need to make to your playbooks. .. code-block:: yaml # Syntax in 1.9.x - debug: msg: "{{ 'test1_junk 1\\\\3' | regex_replace('(.*)_junk (.*)', '\\\\1 \\\\2') }}" # Syntax in 2.0.x - debug: msg: "{{ 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') }}" # Output: "msg": "test1 1\\3" To make an escaped string that will work on all versions you have two options:: - debug: msg="{{ 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') }}" uses key=value escaping which has not changed. The other option is to check for the ansible version:: "{{ (ansible_version|version_compare('2.0', 'ge'))|ternary( 'test1_junk 1\\3' | regex_replace('(.*)_junk (.*)', '\\1 \\2') , 'test1_junk 1\\\\3' | regex_replace('(.*)_junk (.*)', '\\\\1 \\\\2') ) }}" * trailing newline When a string with a trailing newline was specified in the playbook via yaml dict format, the trailing newline was stripped. When specified in key=value format, the trailing newlines were kept. In v2, both methods of specifying the string will keep the trailing newlines. If you relied on the trailing newline being stripped, you can change your playbook using the following as an example:: # Syntax in 1.9.x vars: message: > Testing some things tasks: - debug: msg: "{{ message }}" # Syntax in 2.0.x vars: old_message: > Testing some things message: "{{ old_message[:-1] }}" - debug: msg: "{{ message }}" # Output "msg": "Testing some things" * Behavior of templating DOS-type text files changes with Ansible v2. A bug in Ansible v1 causes DOS-type text files (using a carriage return and newline) to be templated to Unix-type text files (using only a newline). In Ansible v2 this long-standing bug was finally fixed and DOS-type text files are preserved correctly. This may be confusing when you expect your playbook to not show any differences when migrating to Ansible v2, while in fact you will see every DOS-type file being completely replaced (with what appears to be the exact same content). * When specifying complex args as a variable, the variable must use the full jinja2 variable syntax (```{{var_name}}```) - bare variable names there are no longer accepted. In fact, even specifying args with variables has been deprecated, and will not be allowed in future versions:: --- - hosts: localhost connection: local gather_facts: false vars: my_dirs: - { path: /tmp/3a, state: directory, mode: 0755 } - { path: /tmp/3b, state: directory, mode: 0700 } tasks: - file: args: "{{item}}" # <- args here uses the full variable syntax with_items: "{{my_dirs}}" * porting task includes * More dynamic. Corner-case formats that were not supposed to work now do not, as expected. * variables defined in the yaml dict format https://github.com/ansible/ansible/issues/13324 * templating (variables in playbooks and template lookups) has improved with regard to keeping the original instead of turning everything into a string. If you need the old behavior, quote the value to pass it around as a string. * Empty variables and variables set to null in yaml are no longer converted to empty strings. They will retain the value of `None`. You can override the `null_representation` setting to an empty string in your config file by setting the :envvar:`ANSIBLE_NULL_REPRESENTATION` environment variable. * Extras callbacks must be enabled in ansible.cfg. Copying is no longer necessary but you must enable them in ansible.cfg. * dnf module has been rewritten. Some minor changes in behavior may be observed. * win_updates has been rewritten and works as expected now. * from 2.0.1 onwards, the implicit setup task from gather_facts now correctly inherits everything from play, but this might cause issues for those setting `environment` at the play level and depending on `ansible_env` existing. Previously this was ignored but now might issue an 'Undefined' error. Deprecated ---------- While all items listed here will show a deprecation warning message, they still work as they did in 1.9.x. Please note that they will be removed in 2.2 (Ansible always waits two major releases to remove a deprecated feature). * Bare variables in ``with_`` loops should instead use the ``"{{ var }}"`` syntax, which helps eliminate ambiguity. * The ansible-galaxy text format requirements file. Users should use the YAML format for requirements instead. * Undefined variables within a ``with_`` loop's list currently do not interrupt the loop, but they do issue a warning; in the future, they will issue an error. * Using dictionary variables to set all task parameters is unsafe and will be removed in a future version. For example:: - hosts: localhost gather_facts: no vars: debug_params: msg: "hello there" tasks: # These are both deprecated: - debug: "{{debug_params}}" - debug: args: "{{debug_params}}" # Use this instead: - debug: msg: "{{debug_params['msg']}}" * Host patterns should use a comma (,) or colon (:) instead of a semicolon (;) to separate hosts/groups in the pattern. * Ranges specified in host patterns should use the [x:y] syntax, instead of [x-y]. * Playbooks using privilege escalation should always use "become*" options rather than the old su*/sudo* options. * The "short form" for vars_prompt is no longer supported. For example:: vars_prompt: variable_name: "Prompt string" * Specifying variables at the top level of a task include statement is no longer supported. For example:: - include_tasks: foo.yml a: 1 Should now be:: - include_tasks: foo.yml vars: a: 1 * Setting any_errors_fatal on a task is no longer supported. This should be set at the play level only. * Bare variables in the `environment` dictionary (for plays/tasks/etc.) are no longer supported. Variables specified there should use the full variable syntax: '{{foo}}'. * Tags (or any directive) should no longer be specified with other parameters in a task include. Instead, they should be specified as an option on the task. For example:: - include_tasks: foo.yml tags=a,b,c Should be:: - include_tasks: foo.yml tags: [a, b, c] * The first_available_file option on tasks has been deprecated. Users should use the with_first_found option or lookup ('first_found', …) plugin. Other caveats ------------- Here are some corner cases encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored. * Bad variable composition:: with_items: myvar_{{rest_of_name}} This worked 'by accident' as the errors were retemplated and ended up resolving the variable, it was never intended as valid syntax and now properly returns an error, use the following instead.:: hostvars[inventory_hostname]['myvar_' + rest_of_name] * Misspelled directives:: - task: dostuf becom: yes The task always ran without using privilege escalation (for that you need `become`) but was also silently ignored so the play 'ran' even though it should not, now this is a parsing error. * Duplicate directives:: - task: dostuf when: True when: False The first `when` was ignored and only the 2nd one was used as the play ran w/o warning it was ignoring one of the directives, now this produces a parsing error. * Conflating variables and directives:: - role: {name=rosy, port=435 } # in tasks/main.yml - wait_for: port={{port}} The `port` variable is reserved as a play/task directive for overriding the connection port, in previous versions this got conflated with a variable named `port` and was usable later in the play, this created issues if a host tried to reconnect or was using a non caching connection. Now it will be correctly identified as a directive and the `port` variable will appear as undefined, this now forces the use of non conflicting names and removes ambiguity when adding settings and variables to a role invocation. * Bare operations on `with_`:: with_items: var1 + var2 An issue with the 'bare variable' features, which was supposed only template a single variable without the need of braces ({{ )}}, would in some versions of Ansible template full expressions. Now you need to use proper templating and braces for all expressions everywhere except conditionals (`when`):: with_items: "{{var1 + var2}}" The bare feature itself is deprecated as an undefined variable is indistinguishable from a string which makes it difficult to display a proper error. Porting plugins =============== In ansible-1.9.x, you would generally copy an existing plugin to create a new one. Simply implementing the methods and attributes that the caller of the plugin expected made it a plugin of that type. In ansible-2.0, most plugins are implemented by subclassing a base class for each plugin type. This way the custom plugin does not need to contain methods which are not customized. Lookup plugins -------------- * lookup plugins ; import version Connection plugins ------------------ * connection plugins Action plugins -------------- * action plugins Callback plugins ---------------- Although Ansible 2.0 provides a new callback API the old one continues to work for most callback plugins. However, if your callback plugin makes use of :attr:`self.playbook`, :attr:`self.play`, or :attr:`self.task` then you will have to store the values for these yourself as ansible no longer automatically populates the callback with them. Here's a short snippet that shows you how: .. code-block:: python import os from ansible.plugins.callback import CallbackBase class CallbackModule(CallbackBase): def __init__(self): self.playbook = None self.playbook_name = None self.play = None self.task = None def v2_playbook_on_start(self, playbook): self.playbook = playbook self.playbook_name = os.path.basename(self.playbook._file_name) def v2_playbook_on_play_start(self, play): self.play = play def v2_playbook_on_task_start(self, task, is_conditional): self.task = task def v2_on_any(self, *args, **kwargs): self._display.display('%s: %s: %s' % (self.playbook_name, self.play.name, self.task)) Connection plugins ------------------ * connection plugins Hybrid plugins ============== In specific cases you may want a plugin that supports both ansible-1.9.x *and* ansible-2.0. Much like porting plugins from v1 to v2, you need to understand how plugins work in each version and support both requirements. Since the ansible-2.0 plugin system is more advanced, it is easier to adapt your plugin to provide similar pieces (subclasses, methods) for ansible-1.9.x as ansible-2.0 expects. This way your code will look a lot cleaner. You may find the following tips useful: * Check whether the ansible-2.0 class(es) are available and if they are missing (ansible-1.9.x) mimic them with the needed methods (for example, ``__init__``) * When ansible-2.0 python modules are imported, and they fail (ansible-1.9.x), catch the ``ImportError`` exception and perform the equivalent imports for ansible-1.9.x. With possible translations (for example, importing specific methods). * Use the existence of these methods as a qualifier to what version of Ansible you are running. So rather than using version checks, you can do capability checks instead. (See examples below) * Document for each if-then-else case for which specific version each block is needed. This will help others to understand how they have to adapt their plugins, but it will also help you to remove the older ansible-1.9.x support when it is deprecated. * When doing plugin development, it is very useful to have the ``warning()`` method during development, but it is also important to emit warnings for deadends (cases that you expect should never be triggered) or corner cases (for example, cases where you expect misconfigurations). * It helps to look at other plugins in ansible-1.9.x and ansible-2.0 to understand how the API works and what modules, classes and methods are available. Lookup plugins -------------- As a simple example we are going to make a hybrid ``fileglob`` lookup plugin. .. code-block:: python from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import glob try: # ansible-2.0 from ansible.plugins.lookup import LookupBase except ImportError: # ansible-1.9.x class LookupBase(object): def __init__(self, basedir=None, runner=None, **kwargs): self.runner = runner self.basedir = self.runner.basedir def get_basedir(self, variables): return self.basedir try: # ansible-1.9.x from ansible.utils import (listify_lookup_plugin_terms, path_dwim, warning) except ImportError: # ansible-2.0 from ansible.utils.display import Display warning = Display().warning class LookupModule(LookupBase): # For ansible-1.9.x, we added inject=None as valid argument def run(self, terms, inject=None, variables=None, **kwargs): # ansible-2.0, but we made this work for ansible-1.9.x too ! basedir = self.get_basedir(variables) # ansible-1.9.x if 'listify_lookup_plugin_terms' in globals(): terms = listify_lookup_plugin_terms(terms, basedir, inject) ret = [] for term in terms: term_file = os.path.basename(term) # For ansible-1.9.x, we imported path_dwim() from ansible.utils if 'path_dwim' in globals(): # ansible-1.9.x dwimmed_path = path_dwim(basedir, os.path.dirname(term)) else: # ansible-2.0 dwimmed_path = self._loader.path_dwim_relative(basedir, 'files', os.path.dirname(term)) globbed = glob.glob(os.path.join(dwimmed_path, term_file)) ret.extend(g for g in globbed if os.path.isfile(g)) return ret .. Note:: In the above example we did not use the ``warning()`` method as we had no direct use for it in the final version. However we left this code in so people can use this part during development/porting/use. Connection plugins ------------------ * connection plugins Action plugins -------------- * action plugins Callback plugins ---------------- * callback plugins Connection plugins ------------------ * connection plugins Porting custom scripts ====================== Custom scripts that used the ``ansible.runner.Runner`` API in 1.x have to be ported in 2.x. Please refer to: :ref:`developing_api` ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.10.rst0000644000000000000000000000102700000000000026343 0ustar00rootroot00000000000000:orphan: .. _porting_2.10_guide: ========================== Ansible 2.10 Porting Guide ========================== Ansible Porting Guides are maintained in the ``devel`` branch only. See `the devel Ansible 4 Porting guide `_ for up to date information. .. note:: This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.3.rst0000644000000000000000000001460300000000000026271 0ustar00rootroot00000000000000 .. _porting_2.3_guide: ************************* Ansible 2.3 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.2 and Ansible 2.3. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.3 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== Restructured async to work with action plugins ---------------------------------------------- In Ansible 2.2 (and possibly earlier) the `async:` keyword could not be used in conjunction with the action plugins such as `service`. This limitation has been removed in Ansible 2.3 **NEW** In Ansible 2.3: .. code-block:: yaml - name: Install nginx asynchronously service: name: nginx state: restarted async: 45 OpenBSD version facts --------------------- The `ansible_distribution_release` and `ansible_distribution_version` facts on OpenBSD hosts were reversed in Ansible 2.2 and earlier. This has been changed so that version has the numeric portion and release has the name of the release. **OLD** In Ansible 2.2 (and earlier) .. code-block:: bash "ansible_distribution": "OpenBSD" "ansible_distribution_release": "6.0", "ansible_distribution_version": "release", **NEW** In Ansible 2.3: .. code-block:: bash "ansible_distribution": "OpenBSD", "ansible_distribution_release": "release", "ansible_distribution_version": "6.0", Names Blocks ------------ Blocks can now have names, this allows you to avoid the ugly `# this block is for...` comments. **NEW** In Ansible 2.3: .. code-block:: yaml - name: Block test case hosts: localhost tasks: - name: Attempt to setup foo block: - debug: msg='I execute normally' - command: /bin/false - debug: msg='I never execute, cause ERROR!' rescue: - debug: msg='I caught an error' - command: /bin/false - debug: msg='I also never execute :-(' always: - debug: msg="this always executes" Use of multiple tags -------------------- Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last specified tag overriding all the other specified tags. This behaviour is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behaviour. In 2.4, the default will be to merge the tags. You can enable the old overwriting behavior via the config option. In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behaviour. Other caveats ------------- Here are some rare cases that might be encountered when updating. These are mostly caused by the more stringent parser validation and the capture of errors that were previously ignored. * Made ``any_errors_fatal`` inheritable from play to task and all other objects in between. Modules ======= No major changes in this version. Modules removed --------------- No major changes in this version. Deprecation notices ------------------- The following modules will be removed in Ansible 2.5. Please update your playbooks accordingly. * ec2_vpc * cl_bond * cl_bridge * cl_img_install * cl_interface * cl_interface_policy * cl_license * cl_ports * nxos_mtu use :ref:`nxos_system ` instead .. note:: These modules may no longer have documentation in the current release. Please see the `Ansible 2.3 module documentation `_ if you need to know how they worked for porting your playbooks. Noteworthy module changes ------------------------- AWS lambda ^^^^^^^^^^ Previously ignored changes that only affected one parameter. Existing deployments may have outstanding changes that this bug fix will apply. Mount ^^^^^ Mount: Some fixes so bind mounts are not mounted each time the playbook runs. Plugins ======= No major changes in this version. Porting custom scripts ====================== No major changes in this version. Networking ========== There have been a number of changes to number of changes to how Networking Modules operate. Playbooks should still use ``connection: local``. The following changes apply to: * dellos6 * dellos9 * dellos10 * eos * ios * iosxr * junos * sros * vyos Deprecation of top-level connection arguments --------------------------------------------- **OLD** In Ansible 2.2: .. code-block:: yaml - name: example of using top-level options for connection properties ios_command: commands: show version host: "{{ inventory_hostname }}" username: cisco password: cisco authorize: yes auth_pass: cisco Will result in: .. code-block:: bash [WARNING]: argument username has been deprecated and will be removed in a future version [WARNING]: argument host has been deprecated and will be removed in a future version [WARNING]: argument password has been deprecated and will be removed in a future version **NEW** In Ansible 2.3: .. code-block:: yaml - name: Gather facts eos_facts: gather_subset: all provider: username: myuser password: "{{ networkpassword }}" transport: cli host: "{{ ansible_host }}" delegate_to vs ProxyCommand --------------------------- The new connection framework for Network Modules in Ansible 2.3 that uses ``cli`` transport no longer supports the use of the ``delegate_to`` directive. In order to use a bastion or intermediate jump host to connect to network devices over ``cli`` transport, network modules now support the use of ``ProxyCommand``. To use ``ProxyCommand`` configure the proxy settings in the Ansible inventory file to specify the proxy host via ``ansible_ssh_common_args``. For details on how to do this see the :ref:`network proxy guide `. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5085561 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.4.rst0000644000000000000000000002720000000000000026267 0ustar00rootroot00000000000000 .. _porting_2.4_guide: ************************* Ansible 2.4 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.3 and Ansible 2.4. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.4 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Python version ============== Ansible will not support Python 2.4 or 2.5 on the target hosts anymore. Going forward, Python 2.6+ will be required on targets, as already is the case on the controller. Inventory ========= Inventory has been refactored to be implemented via plugins and now allows for multiple sources. This change is mostly transparent to users. One exception is the ``inventory_dir``, which is now a host variable; previously it could only have one value so it was set globally. This means you can no longer use it early in plays to determine ``hosts:`` or similar keywords. This also changes the behaviour of ``add_hosts`` and the implicit localhost; because they no longer automatically inherit the global value, they default to ``None``. See the module documentation for more information. The ``inventory_file`` remains mostly unchanged, as it was always host specific. Since there is no longer a single inventory, the 'implicit localhost' doesn't get either of these variables defined. A bug was fixed with the inventory path/directory, which was defaulting to the current working directory. This caused ``group_vars`` and ``host_vars`` to be picked up from the current working directory instead of just adjacent to the playbook or inventory directory when a host list (comma separated host names) was provided as inventory. Initial playbook relative group_vars and host_vars -------------------------------------------------- In Ansible versions prior to 2.4, the inventory system would maintain the context of the initial playbook that was executed. This allowed successively included playbooks from other directories to inherit group_vars and host_vars placed relative to the top level playbook file. Due to some behavioral inconsistencies, this functionality will not be included in the new inventory system starting with Ansible version 2.4. Similar functionality can still be achieved by using vars_files, include_vars, or group_vars and host_vars placed relative to the inventory file. Deprecated ========== Specifying Inventory sources ----------------------------- Use of ``--inventory-file`` on the command line is now deprecated. Use ``--inventory`` or ``-i``. The associated ini configuration key, ``hostfile``, and environment variable, ``ANSIBLE_HOSTS``, are also deprecated. Replace them with the configuration key ``inventory`` and environment variable :envvar:`ANSIBLE_INVENTORY`. Use of multiple tags -------------------- Specifying ``--tags`` (or ``--skip-tags``) multiple times on the command line currently leads to the last one overriding all the previous ones. This behavior is deprecated. In the future, if you specify --tags multiple times the tags will be merged together. From now on, using ``--tags`` multiple times on one command line will emit a deprecation warning. Setting the ``merge_multiple_cli_tags`` option to True in the ``ansible.cfg`` file will enable the new behavior. In 2.4, the default has change to merge the tags. You can enable the old overwriting behavior via the config option. In 2.5, multiple ``--tags`` options will be merged with no way to go back to the old behavior. Other caveats ------------- No major changes in this version. Modules ======= Major changes in popular modules are detailed here * The :ref:`win_shell ` and :ref:`win_command ` modules now properly preserve quoted arguments in the command-line. Tasks that attempted to work around the issue by adding extra quotes/escaping may need to be reworked to remove the superfluous escaping. See `Issue 23019 `_ for additional detail. Modules removed --------------- The following modules no longer exist: * None Deprecation notices ------------------- The following modules will be removed in Ansible 2.8. Please update your playbooks accordingly. * azure, use :ref:`azure_rm_virtualmachine `, which uses the new Resource Manager SDK. * win_msi, use :ref:`win_package ` instead Noteworthy module changes ------------------------- * The :ref:`win_get_url ` module has the dictionary ``win_get_url`` in its results deprecated, its content is now also available directly in the resulting output, like other modules. This dictionary will be removed in Ansible 2.8. * The :ref:`win_unzip ` module no longer includes the dictionary ``win_unzip`` in its results; the contents are now included directly in the resulting output, like other modules. * The :ref:`win_package ` module return values ``exit_code`` and ``restart_required`` have been deprecated in favor of ``rc`` and ``reboot_required`` respectively. The deprecated return values will be removed in Ansible 2.6. Plugins ======= A new way to configure and document plugins has been introduced. This does not require changes to existing setups but developers should start adapting to the new infrastructure now. More details will be available in the developer documentation for each plugin type. Vars plugin changes ------------------- There have been many changes to the implementation of vars plugins, but both users and developers should not need to change anything to keep current setups working. Developers should consider changing their plugins take advantage of new features. The most notable difference to users is that vars plugins now get invoked on demand instead of at inventory build time. This should make them more efficient for large inventories, especially when using a subset of the hosts. .. note:: - This also creates a difference with group/host_vars when using them adjacent to playbooks. Before, the 'first' playbook loaded determined the variables; now the 'current' playbook does. We are looking to fix this soon, since 'all playbooks' in the path should be considered for variable loading. - In 2.4.1 we added a toggle to allow you to control this behaviour, 'top' will be the pre 2.4, 'bottom' will use the current playbook hosting the task and 'all' will use them all from top to bottom. Inventory plugins ----------------- Developers should start migrating from hardcoded inventory with dynamic inventory scripts to the new Inventory Plugins. The scripts will still work via the ``script`` inventory plugin but Ansible development efforts will now concentrate on writing plugins rather than enhancing existing scripts. Both users and developers should look into the new plugins because they are intended to alleviate the need for many of the hacks and workarounds found in the dynamic inventory scripts. Callback plugins ---------------- Users: * Callbacks are now using the new configuration system. Users should not need to change anything as the old system still works, but you might see a deprecation notice if any callbacks used are not inheriting from the built in classes. Developers need to update them as stated below. Developers: * If your callback does not inherit from ``CallbackBase`` (directly or indirectly via another callback), it will still work, but issue a deprecation notice. To avoid this and ensure it works in the future change it to inherit from ``CallbackBase`` so it has the new options handling methods and properties. You can also implement the new options handling methods and properties but that won't automatically inherit changes added in the future. You can look at ``CallbackBase`` itself and/or ``AnsiblePlugin`` for details. * Any callbacks inheriting from other callbacks might need to also be updated to contain the same documented options as the parent or the options won't be available. This is noted in the developer guide. Template lookup plugin: Escaping Strings ---------------------------------------- Prior to Ansible 2.4, backslashes in strings passed to the template lookup plugin would be escaped automatically. In 2.4, users are responsible for escaping backslashes themselves. This change brings the template lookup plugin inline with the template module so that the same backslash escaping rules apply to both. If you have a template lookup like this:: - debug: msg: '{{ lookup("template", "template.j2") }}' **OLD** In Ansible 2.3 (and earlier) :file:`template.j2` would look like this: .. code-block:: jinja {{ "name surname" | regex_replace("^[^\s]+\s+(.*)", "\1") }} **NEW** In Ansible 2.4 it should be changed to look like this: .. code-block:: jinja {{ "name surname" | regex_replace("^[^\\s]+\\s+(.*)", "\\1") }} Tests ===== Tests succeeded/failed ----------------------- Prior to Ansible version 2.4, a task return code of ``rc`` would override a return code of ``failed``. In version 2.4, both ``rc`` and ``failed`` are used to calculate the state of the task. Because of this, test plugins ``succeeded``/``failed``` have also been changed. This means that overriding a task failure with ``failed_when: no`` will result in ``succeeded``/``failed`` returning ``True``/``False``. For example:: - command: /bin/false register: result failed_when: no - debug: msg: 'This is printed on 2.3' when: result|failed - debug: msg: 'This is printed on 2.4' when: result|succeeded - debug: msg: 'This is always printed' when: result.rc != 0 As we can see from the example above, in Ansible 2.3 ``succeeded``/``failed`` only checked the value of ``rc``. Networking ========== There have been a number of changes to how Networking Modules operate. Playbooks should still use ``connection: local``. Persistent Connection --------------------- The configuration variables ``connection_retries`` and ``connect_interval`` which were added in Ansible 2.3 are now deprecated. For Ansible 2.4 and later use ``connection_retry_timeout``. To control timeouts use ``command_timeout`` rather than the previous top level ``timeout`` variable under ``[default]`` See :ref:`Ansible Network debug guide ` for more information. Configuration ============= The configuration system has had some major changes. Users should be unaffected except for the following: * All relative paths defined are relative to the `ansible.cfg` file itself. Previously they varied by setting. The new behavior should be more predictable. * A new macro ``{{CWD}}`` is available for paths, which will make paths relative to the 'current working directory', this is unsafe but some users really want to rely on this behaviour. Developers that were working directly with the previous API should revisit their usage as some methods (for example, ``get_config``) were kept for backwards compatibility but will warn users that the function has been deprecated. The new configuration has been designed to minimize the need for code changes in core for new plugins. The plugins just need to document their settings and the configuration system will use the documentation to provide what they need. This is still a work in progress; currently only 'callback' and 'connection' plugins support this. More details will be added to the specific plugin developer guides. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.509556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.5.rst0000644000000000000000000004523500000000000026300 0ustar00rootroot00000000000000.. _porting_2.5_guide: ************************* Ansible 2.5 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.4 and Ansible 2.5. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.5 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== Dynamic includes and attribute inheritance ------------------------------------------ In Ansible version 2.4, the concept of dynamic includes (``include_tasks``), as opposed to static imports (``import_tasks``), was introduced to clearly define the differences in how ``include`` works between dynamic and static includes. All attributes applied to a dynamic ``include_*`` would only apply to the include itself, while attributes applied to a static ``import_*`` would be inherited by the tasks within. This separation was only partially implemented in Ansible version 2.4. As of Ansible version 2.5, this work is complete and the separation now behaves as designed; attributes applied to an ``include_*`` task will not be inherited by the tasks within. To achieve an outcome similar to how Ansible worked prior to version 2.5, playbooks should use an explicit application of the attribute on the needed tasks, or use blocks to apply the attribute to many tasks. Another option is to use a static ``import_*`` when possible instead of a dynamic task. **OLD** In Ansible 2.4: .. code-block:: yaml - include_tasks: "{{ ansible_distribution }}.yml" tags: - distro_include Included file: .. code-block:: yaml - block: - debug: msg: "In included file" - apt: name: nginx state: latest **NEW** In Ansible 2.5: Including task: .. code-block:: yaml - include_tasks: "{{ ansible_distribution }}.yml" tags: - distro_include Included file: .. code-block:: yaml - block: - debug: msg: "In included file" - apt: name: nginx state: latest tags: - distro_include The relevant change in those examples is, that in Ansible 2.5, the included file defines the tag ``distro_include`` again. The tag is not inherited automatically. Fixed handling of keywords and inline variables ----------------------------------------------- We made several fixes to how we handle keywords and 'inline variables', to avoid conflating the two. Unfortunately these changes mean you must specify whether `name` is a keyword or a variable when calling roles. If you have playbooks that look like this:: roles: - { role: myrole, name: Justin, othervar: othervalue, become: True} You will run into errors because Ansible reads name in this context as a keyword. Beginning in 2.5, if you want to use a variable name that is also a keyword, you must explicitly declare it as a variable for the role:: roles: - { role: myrole, vars: {name: Justin, othervar: othervalue}, become: True} For a full list of keywords see :ref:`playbook_keywords`. Migrating from with_X to loop ----------------------------- .. include:: ../user_guide/shared_snippets/with2loop.txt Deprecated ========== Jinja tests used as filters --------------------------- Using Ansible-provided jinja tests as filters will be removed in Ansible 2.9. Prior to Ansible 2.5, jinja tests included within Ansible were most often used as filters. The large difference in use is that filters are referenced as ``variable | filter_name`` while jinja tests are referenced as ``variable is test_name``. Jinja tests are used for comparisons, while filters are used for data manipulation and have different applications in jinja. This change is to help differentiate the concepts for a better understanding of jinja, and where each can be appropriately used. As of Ansible 2.5, using an Ansible provided jinja test with filter syntax, will display a deprecation error. **OLD** In Ansible 2.4 (and earlier) the use of an Ansible included jinja test would likely look like this: .. code-block:: yaml when: - result | failed - not result | success **NEW** In Ansible 2.5 it should be changed to look like this: .. code-block:: yaml when: - result is failed - results is not successful In addition to the deprecation warnings, many new tests have been introduced that are aliases of the old tests. These new tests make more sense grammatically with the jinja test syntax, such as the new ``successful`` test which aliases ``success``. .. code-block:: yaml when: result is successful See :ref:`playbooks_tests` for more information. Additionally, a script was created to assist in the conversion for tests using filter syntax to proper jinja test syntax. This script has been used to convert all of the Ansible integration tests to the correct format. There are a few limitations documented, and all changes made by this script should be evaluated for correctness before executing the modified playbooks. The script can be found at `https://github.com/ansible/ansible/blob/devel/hacking/fix_test_syntax.py `_. Ansible fact namespacing ------------------------ Ansible facts, which have historically been written to names like ``ansible_*`` in the main facts namespace, have been placed in their own new namespace, ``ansible_facts.*`` For example, the fact ``ansible_distribution`` is now best queried through the variable structure ``ansible_facts.distribution``. A new configuration variable, ``inject_facts_as_vars``, has been added to ansible.cfg. Its default setting, 'True', keeps the 2.4 behavior of facts variables being set in the old ``ansible_*`` locations (while also writing them to the new namespace). This variable is expected to be set to 'False' in a future release. When ``inject_facts_as_vars`` is set to False, you must refer to ansible_facts through the new ``ansible_facts.*`` namespace. Modules ======= Major changes in popular modules are detailed here. github_release -------------- In Ansible versions 2.4 and older, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module reported state as ``skipped``. In Ansible version 2.5 and later, after creating a GitHub release using the ``create_release`` state, the ``github_release`` module now reports state as ``changed``. Modules removed --------------- The following modules no longer exist: * nxos_mtu use :ref:`nxos_system `'s ``system_mtu`` option or :ref:`nxos_interface ` instead * cl_interface_policy use :ref:`nclu ` instead * cl_bridge use :ref:`nclu ` instead * cl_img_install use :ref:`nclu ` instead * cl_ports use :ref:`nclu ` instead * cl_license use :ref:`nclu ` instead * cl_interface use :ref:`nclu ` instead * cl_bond use :ref:`nclu ` instead * ec2_vpc use :ref:`ec2_vpc_net ` along with supporting modules :ref:`ec2_vpc_igw `, :ref:`ec2_vpc_route_table `, :ref:`ec2_vpc_subnet `, :ref:`ec2_vpc_dhcp_option `, :ref:`ec2_vpc_nat_gateway `, :ref:`ec2_vpc_nacl ` instead. * ec2_ami_search use :ref:`ec2_ami_facts ` instead * docker use :ref:`docker_container ` and :ref:`docker_image ` instead .. note:: These modules may no longer have documentation in the current release. Please see the `Ansible 2.4 module documentation `_ if you need to know how they worked for porting your playbooks. Deprecation notices ------------------- The following modules will be removed in Ansible 2.9. Please update your playbooks accordingly. * Apstra's ``aos_*`` modules are deprecated as they do not work with AOS 2.1 or higher. See new modules at `https://github.com/apstra `_. * nxos_ip_interface use :ref:`nxos_l3_interface ` instead. * nxos_portchannel use :ref:`nxos_linkagg ` instead. * nxos_switchport use :ref:`nxos_l2_interface ` instead. * panos_security_policy use :ref:`panos_security_rule ` instead. * panos_nat_policy use :ref:`panos_nat_rule ` instead. * vsphere_guest use :ref:`vmware_guest ` instead. Noteworthy module changes ------------------------- * The :ref:`stat ` and :ref:`win_stat ` modules have changed the default of the option ``get_md5`` from ``true`` to ``false``. This option will be removed starting with Ansible version 2.9. The options ``get_checksum: True`` and ``checksum_algorithm: md5`` can still be used if an MD5 checksum is desired. * ``osx_say`` module was renamed into :ref:`say `. * Several modules which could deal with symlinks had the default value of their ``follow`` option changed as part of a feature to `standardize the behavior of follow `_: * The :ref:`file module ` changed from ``follow=False`` to ``follow=True`` because its purpose is to modify the attributes of a file and most systems do not allow attributes to be applied to symlinks, only to real files. * The :ref:`replace module ` had its ``follow`` parameter removed because it inherently modifies the content of an existing file so it makes no sense to operate on the link itself. * The :ref:`blockinfile module ` had its ``follow`` parameter removed because it inherently modifies the content of an existing file so it makes no sense to operate on the link itself. * In Ansible-2.5.3, the :ref:`template module ` became more strict about its ``src`` file being proper utf-8. Previously, non-utf8 contents in a template module src file would result in a mangled output file (the non-utf8 characters would be replaced with a unicode replacement character). Now, on Python2, the module will error out with the message, "Template source files must be utf-8 encoded". On Python3, the module will first attempt to pass the non-utf8 characters through verbatim and fail if that does not succeed. Plugins ======= As a developer, you can now use 'doc fragments' for common configuration options on plugin types that support the new plugin configuration system. Inventory --------- Inventory plugins have been fine tuned, and we have started to add some common features: * The ability to use a cache plugin to avoid costly API/DB queries is disabled by default. If using inventory scripts, some may already support a cache, but it is outside of Ansible's knowledge and control. Moving to the internal cache will allow you to use Ansible's existing cache refresh/invalidation mechanisms. * A new 'auto' plugin, enabled by default, that can automatically detect the correct plugin to use IF that plugin is using our 'common YAML configuration format'. The previous host_list, script, yaml and ini plugins still work as they did, the auto plugin is now the last one we attempt to use. If you had customized the enabled plugins you should revise the setting to include the new auto plugin. Shell ----- Shell plugins have been migrated to the new plugin configuration framework. It is now possible to customize more settings, and settings which were previously 'global' can now also be overridden using host specific variables. For example, ``system_temps`` is a new setting that allows you to control what Ansible will consider a 'system temporary dir'. This is used when escalating privileges for a non-administrative user. Previously this was hardcoded to '/tmp', which some systems cannot use for privilege escalation. This setting now defaults to ``[ '/var/tmp', '/tmp']``. Another new setting is ``admin_users`` which allows you to specify a list of users to be considered 'administrators'. Previously this was hardcoded to ``root``. It now it defaults to ``[root, toor, admin]``. This information is used when choosing between your ``remote_temp`` and ``system_temps`` directory. For a full list, check the shell plugin you are using, the default shell plugin is ``sh``. Those that had to work around the global configuration limitations can now migrate to a per host/group settings, but also note that the new defaults might conflict with existing usage if the assumptions don't correlate to your environment. Filter ------ The lookup plugin API now throws an error if a non-iterable value is returned from a plugin. Previously, numbers or other non-iterable types returned by a plugin were accepted without error or warning. This change was made because plugins should always return a list. Please note that plugins that return strings and other non-list iterable values will not throw an error, but may cause unpredictable behavior. If you have a custom lookup plugin that does not return a list, you should modify it to wrap the return values in a list. Lookup ------- A new option was added to lookup plugins globally named ``error`` which allows you to control how errors produced by the lookup are handled, before this option they were always fatal. Valid values for this option are ``warn``, ``ignore`` and ``strict``. See the :ref:`lookup ` page for more details. Porting custom scripts ====================== No notable changes. Network ======= Expanding documentation ----------------------- We're expanding the network documentation. There's new content and a :ref:`new Ansible Network landing page`. We will continue to build the network-related documentation moving forward. Top-level connection arguments will be removed in 2.9 ----------------------------------------------------- Top-level connection arguments like ``username``, ``host``, and ``password`` are deprecated and will be removed in version 2.9. **OLD** In Ansible < 2.4 .. code-block:: yaml - name: example of using top-level options for connection properties ios_command: commands: show version host: "{{ inventory_hostname }}" username: cisco password: cisco authorize: yes auth_pass: cisco The deprecation warnings reflect this schedule. The task above, run in Ansible 2.5, will result in: .. code-block:: yaml [DEPRECATION WARNING]: Param 'username' is deprecated. See the module docs for more information. This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. [DEPRECATION WARNING]: Param 'password' is deprecated. See the module docs for more information. This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. [DEPRECATION WARNING]: Param 'host' is deprecated. See the module docs for more information. This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. We recommend using the new connection types ``network_cli`` and ``netconf`` (see below), using standard Ansible connection properties, and setting those properties in inventory by group. As you update your playbooks and inventory files, you can easily make the change to ``become`` for privilege escalation (on platforms that support it). For more information, see the :ref:`using become with network modules` guide and the :ref:`platform documentation`. Adding persistent connection types ``network_cli`` and ``netconf`` ------------------------------------------------------------------ Ansible 2.5 introduces two top-level persistent connection types, ``network_cli`` and ``netconf``. With ``connection: local``, each task passed the connection parameters, which had to be stored in your playbooks. With ``network_cli`` and ``netconf`` the playbook passes the connection parameters once, so you can pass them at the command line if you prefer. We recommend you use ``network_cli`` and ``netconf`` whenever possible. Note that eAPI and NX-API still require ``local`` connections with ``provider`` dictionaries. See the :ref:`platform documentation` for more information. Unless you need a ``local`` connection, update your playbooks to use ``network_cli`` or ``netconf`` and to specify your connection variables with standard Ansible connection variables: **OLD** In Ansible 2.4 .. code-block:: yaml --- vars: cli: host: "{{ inventory_hostname }}" username: operator password: secret transport: cli tasks: - nxos_config: src: config.j2 provider: "{{ cli }}" username: admin password: admin **NEW** In Ansible 2.5 .. code-block:: ini [nxos:vars] ansible_connection=network_cli ansible_network_os=nxos ansible_user=operator ansible_password=secret .. code-block:: yaml tasks: - nxos_config: src: config.j2 Using a provider dictionary with either ``network_cli`` or ``netconf`` will result in a warning. Developers: Shared Module Utilities Moved ----------------------------------------- Beginning with Ansible 2.5, shared module utilities for network modules moved to ``ansible.module_utils.network``. * Platform-independent utilities are found in ``ansible.module_utils.network.common`` * Platform-specific utilities are found in ``ansible.module_utils.network.{{ platform }}`` If your module uses shared module utilities, you must update all references. For example, change: **OLD** In Ansible 2.4 .. code-block:: python from ansible.module_utils.vyos import get_config, load_config **NEW** In Ansible 2.5 .. code-block:: python from ansible.module_utils.network.vyos.vyos import get_config, load_config See the module utilities developer guide see :ref:`developing_module_utilities` for more information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.509556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.6.rst0000644000000000000000000001417500000000000026300 0ustar00rootroot00000000000000.. _porting_2.6_guide: ************************* Ansible 2.6 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.5 and Ansible 2.6. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.6 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== * The deprecated task option ``always_run`` has been removed, please use ``check_mode: no`` instead. Deprecated ========== * In the :ref:`nxos_igmp_interface module`, ``oif_prefix`` and ``oif_source`` properties are deprecated. Use ``ois_ps`` parameter with a dictionary of prefix and source to values instead. Modules ======= Major changes in popular modules are detailed here: Modules removed --------------- The following modules no longer exist: Deprecation notices ------------------- The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly. * ``k8s_raw`` use :ref:`k8s ` instead. * ``openshift_raw`` use :ref:`k8s ` instead. * ``openshift_scale`` use :ref:`k8s_scale ` instead. Noteworthy module changes ------------------------- * The ``upgrade`` module option for ``win_chocolatey`` has been removed; use ``state: latest`` instead. * The ``reboot`` module option for ``win_feature`` has been removed; use the ``win_reboot`` action plugin instead. * The ``win_iis_webapppool`` module no longer accepts a string for the ``attributes`` module option; use the free form dictionary value instead. * The ``name`` module option for ``win_package`` has been removed; this is not used anywhere and should just be removed from your playbooks. * The ``win_regedit`` module no longer automatically corrects the hive path ``HCCC`` to ``HKCC``; use ``HKCC`` because this is the correct hive path. * The :ref:`file_module` now emits a deprecation warning when ``src`` is specified with a state other than ``hard`` or ``link`` as it is only supposed to be useful with those. This could have an effect on people who were depending on a buggy interaction between src and other state's to place files into a subdirectory. For instance:: $ ansible localhost -m file -a 'path=/var/lib src=/tmp/ state=directory' Would create a directory named ``/tmp/lib``. Instead of the above, simply spell out the entire destination path like this:: $ ansible localhost -m file -a 'path=/tmp/lib state=directory' * The ``k8s_raw`` and ``openshift_raw`` modules have been aliased to the new ``k8s`` module. * The ``k8s`` module supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources. * The ``k8s`` module will not accept resources where subkeys have been snake_cased. This was a workaround that was suggested with the ``k8s_raw`` and ``openshift_raw`` modules. * The ``k8s`` module may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource. * The ``k8s`` module can now process multi-document YAML files if they are passed with the ``src`` parameter. It will process each document as a separate resource. Resources provided inline with the ``resource_definition`` parameter must still be a single document. * The ``k8s`` module will not automatically change ``Project`` creation requests into ``ProjectRequest`` creation requests as the ``openshift_raw`` module did. You must now specify the ``ProjectRequest`` kind explicitly. * The ``k8s`` module will not automatically remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block. * The ``k8s_scale`` module now supports scalable OpenShift objects, such as ``DeploymentConfig``. * The ``lineinfile`` module was changed to show a warning when using an empty string as a regexp. Since an empty regexp matches every line in a file, it will replace the last line in a file rather than inserting. If this is the desired behavior, use ``'^'`` which will match every line and will not trigger the warning. * Openstack modules are no longer using ``shade`` library. Instead ``openstacksdk`` is used. Since ``openstacksdk`` should be already present as a dependency to ``shade`` no additional actions are required. Plugins ======= Deprecation notices ------------------- The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly. * ``openshift`` use ``k8s`` instead. Noteworthy plugin changes ------------------------- * The ``k8s`` lookup plugin now supports all Kubernetes resources including those from Custom Resource Definitions and aggregated API servers. This includes all OpenShift resources. * The ``k8s`` lookup plugin may not accept resources where the ``api_version`` has been changed to match the shortened version in the Kubernetes Python client. You should now specify the proper full Kubernetes ``api_version`` for a resource. * The ``k8s`` lookup plugin will no longer remove secrets from the Ansible return values (and by extension the log). In order to prevent secret values in a task from being logged, specify the ``no_log`` parameter on the task block. Porting custom scripts ====================== No notable changes. Networking ========== No notable changes. Dynamic inventory scripts ========================= * ``contrib/inventory/openstack.py`` has been renamed to ``contrib/inventory/openstack_inventory.py``. If you have used ``openstack.py`` as a name for your OpenStack dynamic inventory file, change it to ``openstack_inventory.py``. Otherwise the file name will conflict with imports from ``openstacksdk``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.509556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.7.rst0000644000000000000000000003420200000000000026272 0ustar00rootroot00000000000000.. _porting_2.7_guide: ************************* Ansible 2.7 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.6 and Ansible 2.7. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.7 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Command Line ============ If you specify ``--tags`` or ``--skip-tags`` multiple times on the command line, Ansible will merge the specified tags together. In previous versions of Ansible, you could set ``merge_multiple_cli_tags`` to ``False`` if you wanted to keep only the last-specified ``--tags``. This config option existed for backwards compatibility. The overwriting behavior was deprecated in 2.3 and the default behavior was changed in 2.4. Ansible-2.7 removes the config option; multiple ``--tags`` are now always merged. If you have a shell script that depends on setting ``merge_multiple_cli_tags`` to ``False``, please upgrade your script so it only adds the ``--tags`` you actually want before upgrading to Ansible-2.7. Python Compatibility ==================== Ansible has dropped compatibility with Python-2.6 on the controller (The host where :command:`/usr/bin/ansible` or :command:`/usr/bin/ansible-playbook` is run). Modules shipped with Ansible can still be used to manage hosts which only have Python-2.6. You just need to have a host with Python-2.7 or Python-3.5 or greater to manage those hosts from. One thing that this does affect is the ability to use :command:`/usr/bin/ansible-pull` to manage a host which has Python-2.6. ``ansible-pull`` runs on the host being managed but it is a controller script, not a module so it will need an updated Python. Actively developed Linux distros which ship with Python-2.6 have some means to install newer Python versions (For instance, you can install Python-2.7 via an SCL on RHEL-6) but you may need to also install Python bindings for many common modules to work (For RHEL-6, for instance, selinux bindings and yum would have to be installed for the updated Python install). The decision to drop Python-2.6 support on the controller was made because many dependent libraries are becoming unavailable there. In particular, python-cryptography is no longer available for Python-2.6 and the last release of pycrypto (the alternative to python-cryptography) has known security bugs which will never be fixed. Playbook ======== Role Precedence Fix during Role Loading --------------------------------------- Ansible 2.7 makes a small change to variable precedence when loading roles, resolving a bug, ensuring that role loading matches :ref:`variable precedence expectations `. Before Ansible 2.7, when loading a role, the variables defined in the role's ``vars/main.yml`` and ``defaults/main.yml`` were not available when parsing the role's ``tasks/main.yml`` file. This prevented the role from utilizing these variables when being parsed. The problem manifested when ``import_tasks`` or ``import_role`` was used with a variable defined in the role's vars or defaults. In Ansible 2.7, role ``vars`` and ``defaults`` are now parsed before ``tasks/main.yml``. This can cause a change in behavior if the same variable is defined at the play level and the role level with different values, and used in ``import_tasks`` or ``import_role`` to define the role or file to import. include_role and import_role variable exposure ---------------------------------------------- In Ansible 2.7 a new module argument named ``public`` was added to the ``include_role`` module that dictates whether or not the role's ``defaults`` and ``vars`` will be exposed outside of the role, allowing those variables to be used by later tasks. This value defaults to ``public: False``, matching current behavior. ``import_role`` does not support the ``public`` argument, and will unconditionally expose the role's ``defaults`` and ``vars`` to the rest of the playbook. This functionality brings ``import_role`` into closer alignment with roles listed within the ``roles`` header in a play. There is an important difference in the way that ``include_role`` (dynamic) will expose the role's variables, as opposed to ``import_role`` (static). ``import_role`` is a pre-processor, and the ``defaults`` and ``vars`` are evaluated at playbook parsing, making the variables available to tasks and roles listed at any point in the play. ``include_role`` is a conditional task, and the ``defaults`` and ``vars`` are evaluated at execution time, making the variables available to tasks and roles listed *after* the ``include_role`` task. include_tasks/import_tasks inline variables ------------------------------------------- As of Ansible 2.7, `include_tasks` and `import_tasks` can no longer accept inline variables. Instead of using inline variables, tasks should supply variables under the ``vars`` keyword. **OLD** In Ansible 2.6 (and earlier) the following was valid syntax for specifying variables: .. code-block:: yaml - include_tasks: include_me.yml variable=value **NEW** In Ansible 2.7 the task should be changed to use the ``vars`` keyword: .. code-block:: yaml - include_tasks: include_me.yml vars: variable: value vars_prompt with unknown algorithms ----------------------------------- vars_prompt now throws an error if the hash algorithm specified in encrypt is not supported by the controller. This increases the safety of vars_prompt as it previously returned None if the algorithm was unknown. Some modules, notably the user module, treated a password of None as a request not to set a password. If your playbook starts erroring because of this, change the hashing algorithm being used with this filter. Deprecated ========== Expedited Deprecation: Use of ``__file__`` in ``AnsibleModule`` --------------------------------------------------------------- .. note:: The use of the ``__file__`` variable is deprecated in Ansible 2.7 and **will be eliminated in Ansible 2.8**. This is much quicker than our usual 4-release deprecation cycle. We are deprecating the use of the ``__file__`` variable to refer to the file containing the currently-running code. This common Python technique for finding a filesystem path does not always work (even in vanilla Python). Sometimes a Python module can be imported from a virtual location (like inside of a zip file). When this happens, the ``__file__`` variable will reference a virtual location pointing to inside of the zip file. This can cause problems if, for instance, the code was trying to use ``__file__`` to find the directory containing the python module to write some temporary information. Before the introduction of AnsiBallZ in Ansible 2.1, using ``__file__`` worked in ``AnsibleModule`` sometimes, but any module that used it would fail when pipelining was turned on (because the module would be piped into the python interpreter's standard input, so ``__file__`` wouldn't contain a file path). AnsiBallZ unintentionally made using ``__file__`` work, by always creating a temporary file for ``AnsibleModule`` to reside in. Ansible 2.8 will no longer create a temporary file for ``AnsibleModule``; instead it will read the file out of a zip file. This change should speed up module execution, but it does mean that starting with Ansible 2.8, referencing ``__file__`` will always fail in ``AnsibleModule``. If you are the author of a third-party module which uses ``__file__`` with ``AnsibleModule``, please update your module(s) now, while the use of ``__file__`` is deprecated but still available. The most common use of ``__file__`` is to find a directory to write a temporary file. In Ansible 2.5 and above, you can use the ``tmpdir`` attribute on an ``AnsibleModule`` instance instead, as shown in this code from the :ref:`apt module `: .. code-block:: diff - tempdir = os.path.dirname(__file__) - package = os.path.join(tempdir, to_native(deb.rsplit('/', 1)[1])) + package = os.path.join(module.tmpdir, to_native(deb.rsplit('/', 1)[1])) Using a loop on a package module via squash_actions --------------------------------------------------- The use of ``squash_actions`` to invoke a package module, such as "yum", to only invoke the module once is deprecated, and will be removed in Ansible 2.11. Instead of relying on implicit squashing, tasks should instead supply the list directly to the ``name``, ``pkg`` or ``package`` parameter of the module. This functionality has been supported in most modules since Ansible 2.3. **OLD** In Ansible 2.6 (and earlier) the following task would invoke the "yum" module only 1 time to install multiple packages .. code-block:: yaml - name: Install packages yum: name: "{{ item }}" state: present with_items: "{{ packages }}" **NEW** In Ansible 2.7 it should be changed to look like this: .. code-block:: yaml - name: Install packages yum: name: "{{ packages }}" state: present Modules ======= Major changes in popular modules are detailed here * The :ref:`DEFAULT_SYSLOG_FACILITY` configuration option tells Ansible modules to use a specific `syslog facility `_ when logging information on all managed machines. Due to a bug with older Ansible versions, this setting did not affect machines using journald with the systemd Python bindings installed. On those machines, Ansible log messages were sent to ``/var/log/messages``, even if you set :ref:`DEFAULT_SYSLOG_FACILITY`. Ansible 2.7 fixes this bug, routing all Ansible log messages according to the value set for :ref:`DEFAULT_SYSLOG_FACILITY`. If you have :ref:`DEFAULT_SYSLOG_FACILITY` configured, the location of remote logs on systems which use journald may change. Modules removed --------------- The following modules no longer exist: Deprecation notices ------------------- The following modules will be removed in Ansible 2.11. Please update your playbooks accordingly. * ``na_cdot_aggregate`` use :ref:`na_ontap_aggregate ` instead. * ``na_cdot_license`` use :ref:`na_ontap_license ` instead. * ``na_cdot_lun`` use :ref:`na_ontap_lun ` instead. * ``na_cdot_qtree`` use :ref:`na_ontap_qtree ` instead. * ``na_cdot_svm`` use :ref:`na_ontap_svm ` instead. * ``na_cdot_user`` use :ref:`na_ontap_user ` instead. * ``na_cdot_user_role`` use :ref:`na_ontap_user_role ` instead. * ``na_cdot_volume`` use :ref:`na_ontap_volume ` instead. * ``sf_account_manager`` use :ref:`na_elementsw_account` instead. * ``sf_check_connections`` use :ref:`na_elementsw_check_connections` instead. * ``sf_snapshot_schedule_manager`` use :ref:`na_elementsw_snapshot_schedule` instead. * ``sf_volume_access_group_manager`` use :ref:`na_elementsw_access_group` instead. * ``sf_volume_manager`` use :ref:`na_elementsw_volume` instead. Noteworthy module changes ------------------------- * Check mode is now supported in the ``command`` and ``shell`` modules. However, only when ``creates`` or ``removes`` is specified. If either of these are specified, the module will check for existence of the file and report the correct changed status, if they are not included the module will skip like it had done previously. * The ``win_chocolatey`` module originally required the ``proxy_username`` and ``proxy_password`` to escape any double quotes in the value. This is no longer required and the escaping may cause further issues. * The ``win_uri`` module has removed the deprecated option ``use_basic_parsing``, since Ansible 2.5 this option did nothing * The ``win_scheduled_task`` module has removed the following deprecated options: * ``executable``, use ``path`` in an actions entry instead * ``argument``, use ``arguments`` in an actions entry instead * ``store_password``, set ``logon_type: password`` instead * ``days_of_week``, use ``monthlydow`` in a triggers entry instead * ``frequency``, use ``type``, in a triggers entry instead * ``time``, use ``start_boundary`` in a triggers entry instead * The ``interface_name`` module option for ``na_ontap_net_vlan`` has been removed and should be removed from your playbooks * The ``win_disk_image`` module has deprecated the return value ``mount_path``, use ``mount_paths[0]`` instead. This will be removed in Ansible 2.11. * ``include_role`` and ``include_tasks`` can now be used directly from ``ansible`` (adhoc) and ``ansible-console``:: #> ansible -m include_role -a 'name=myrole' all * The ``pip`` module has added a dependency on ``setuptools`` to support version requirements, this requirement is for the Python interpreter that executes the module and not the Python interpreter that the module is managing. * Prior to Ansible 2.7.10, the ``replace`` module did the opposite of what was intended when using the ``before`` and ``after`` options together. This now works properly but may require changes to tasks. Plugins ======= * The hash_password filter now throws an error if the hash algorithm specified is not supported by the controller. This increases the safety of the filter as it previously returned None if the algorithm was unknown. Some modules, notably the user module, treated a password of None as a request not to set a password. If your playbook starts erroring because of this, change the hashing algorithm being used with this filter. Porting custom scripts ====================== No notable changes. Networking ========== No notable changes. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.509556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.8.rst0000644000000000000000000007746200000000000026312 0ustar00rootroot00000000000000.. _porting_2.8_guide: ************************* Ansible 2.8 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.7 and Ansible 2.8. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.8 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: :local: Playbook ======== Distribution Facts ------------------ The information returned for the ``ansible_distribution_*`` group of facts may have changed slightly. Ansible 2.8 uses a new backend library for information about distributions: `nir0s/distro `_. This library runs on Python-3.8 and fixes many bugs, including correcting release and version names. The two facts used in playbooks most often, ``ansible_distribution`` and ``ansible_distribution_major_version``, should not change. If you discover a change in these facts, please file a bug so we can address the difference. However, other facts like ``ansible_distribution_release`` and ``ansible_distribution_version`` may change as erroneous information gets corrected. Imports as handlers ------------------- Beginning in version 2.8, a task cannot notify ``import_tasks`` or a static ``include`` that is specified in ``handlers``. The goal of a static import is to act as a pre-processor, where the import is replaced by the tasks defined within the imported file. When using an import, a task can notify any of the named tasks within the imported file, but not the name of the import itself. To achieve the results of notifying a single name but running multiple handlers, utilize ``include_tasks``, or ``listen`` :ref:`handlers`. Jinja Undefined values ---------------------- Beginning in version 2.8, attempting to access an attribute of an Undefined value in Jinja will return another Undefined value, rather than throwing an error immediately. This means that you can now simply use a default with a value in a nested data structure when you don't know if the intermediate values are defined. In Ansible 2.8:: {{ foo.bar.baz | default('DEFAULT') }} In Ansible 2.7 and older:: {{ ((foo | default({})).bar | default({})).baz | default('DEFAULT') }} or:: {{ foo.bar.baz if (foo is defined and foo.bar is defined and foo.bar.baz is defined) else 'DEFAULT' }} Module option conversion to string ---------------------------------- Beginning in version 2.8, Ansible will warn if a module expects a string, but a non-string value is passed and automatically converted to a string. This highlights potential problems where, for example, a ``yes`` or ``true`` (parsed as truish boolean value) would be converted to the string ``'True'``, or where a version number ``1.10`` (parsed as float value) would be converted to ``'1.1'``. Such conversions can result in unexpected behavior depending on context. This behavior can be changed to be an error or to be ignored by setting the ``ANSIBLE_STRING_CONVERSION_ACTION`` environment variable, or by setting the ``string_conversion_action`` configuration in the ``defaults`` section of ``ansible.cfg``. Command line facts ------------------ ``cmdline`` facts returned in system will be deprecated in favor of ``proc_cmdline``. This change handles special case where Kernel command line parameter contains multiple values with the same key. Bare variables in conditionals ------------------------------ In Ansible 2.7 and earlier, top-level variables sometimes treated boolean strings as if they were boolean values. This led to inconsistent behavior in conditional tests built on top-level variables defined as strings. Ansible 2.8 began changing this behavior. For example, if you set two conditions like this: .. code-block:: yaml tasks: - include_tasks: teardown.yml when: teardown - include_tasks: provision.yml when: not teardown based on a variable you define **as a string** (with quotation marks around it): * In Ansible 2.7 and earlier, the two conditions above evaluated as ``True`` and ``False`` respectively if ``teardown: 'true'`` * In Ansible 2.7 and earlier, both conditions evaluated as ``False`` if ``teardown: 'false'`` * In Ansible 2.8 and later, you have the option of disabling conditional bare variables, so ``when: teardown`` always evaluates as ``True`` and ``when: not teardown`` always evaluates as ``False`` when ``teardown`` is a non-empty string (including ``'true'`` or ``'false'``) Ultimately, ``when: 'string'`` will always evaluate as ``True`` and ``when: not 'string'`` will always evaluate as ``False``, as long as ``'string'`` is not empty, even if the value of ``'string'`` itself looks like a boolean. For users with playbooks that depend on the old behavior, we added a config setting that preserves it. You can use the ``ANSIBLE_CONDITIONAL_BARE_VARS`` environment variable or ``conditional_bare_variables`` in the ``defaults`` section of ``ansible.cfg`` to select the behavior you want on your control node. The default setting is ``true``, which preserves the old behavior. Set the config value or environment variable to ``false`` to start using the new option. .. note:: In 2.10 the default setting for ``conditional_bare_variables`` will change to ``false``. In 2.12 the old behavior will be deprecated. Updating your playbooks ^^^^^^^^^^^^^^^^^^^^^^^ To prepare your playbooks for the new behavior, you must update your conditional statements so they accept only boolean values. For variables, you can use the ``bool`` filter to evaluate the string ``'false'`` as ``False``: .. code-block:: yaml vars: teardown: 'false' tasks: - include_tasks: teardown.yml when: teardown | bool - include_tasks: provision.yml when: not teardown | bool Alternatively, you can re-define your variables as boolean values (without quotation marks) instead of strings: .. code-block:: yaml vars: teardown: false tasks: - include_tasks: teardown.yml when: teardown - include_tasks: provision.yml when: not teardown For dictionaries and lists, use the ``length`` filter to evaluate the presence of a dictionary or list as ``True``: .. code-block:: yaml+jinja - debug: when: my_list | length > 0 - debug: when: my_dictionary | length > 0 Do not use the ``bool`` filter with lists or dictionaries. If you use ``bool`` with a list or dict, Ansible will always evaluate it as ``False``. Double-interpolation ^^^^^^^^^^^^^^^^^^^^ The ``conditional_bare_variables`` setting also affects variables set based on other variables. The old behavior unexpectedly double-interpolated those variables. For example: .. code-block:: yaml vars: double_interpolated: 'bare_variable' bare_variable: false tasks: - debug: when: double_interpolated * In Ansible 2.7 and earlier, ``when: double_interpolated`` evaluated to the value of ``bare_variable``, in this case, ``False``. If the variable ``bare_variable`` is undefined, the conditional fails. * In Ansible 2.8 and later, with bare variables disabled, Ansible evaluates ``double_interpolated`` as the string ``'bare_variable'``, which is ``True``. To double-interpolate variable values, use curly braces: .. code-block:: yaml+jinja vars: double_interpolated: "{{ other_variable }}" other_variable: false Nested variables ^^^^^^^^^^^^^^^^ The ``conditional_bare_variables`` setting does not affect nested variables. Any string value assigned to a subkey is already respected and not treated as a boolean. If ``complex_variable['subkey']`` is a non-empty string, then ``when: complex_variable['subkey']`` is always ``True`` and ``when: not complex_variable['subkey']`` is always ``False``. If you want a string subkey like ``complex_variable['subkey']`` to be evaluated as a boolean, you must use the ``bool`` filter. Gathering Facts --------------- In Ansible 2.8 the implicit "Gathering Facts" task in a play was changed to obey play tags. Previous to 2.8, the "Gathering Facts" task would ignore play tags and tags supplied from the command line and always run in a task. The behavior change affects the following example play. .. code-block:: yaml - name: Configure Webservers hosts: webserver tags: - webserver tasks: - name: Install nginx package: name: nginx tags: - nginx In Ansible 2.8, if you supply ``--tags nginx``, the implicit "Gathering Facts" task will be skipped, as the task now inherits the tag of ``webserver`` instead of ``always``. If no play level tags are set, the "Gathering Facts" task will be given a tag of ``always`` and will effectively match prior behavior. You can achieve similar results to the pre-2.8 behavior, by using an explicit ``gather_facts`` task in your ``tasks`` list. .. code-block:: yaml - name: Configure Webservers hosts: webserver gather_facts: false tags: - webserver tasks: - name: Gathering Facts gather_facts: tags: - always - name: Install nginx package: name: nginx tags: - nginx Python Interpreter Discovery ============================ In Ansible 2.7 and earlier, Ansible defaulted to :command:`/usr/bin/python` as the setting for ``ansible_python_interpreter``. If you ran Ansible against a system that installed Python with a different name or a different path, your playbooks would fail with ``/usr/bin/python: bad interpreter: No such file or directory`` unless you either set ``ansible_python_interpreter`` to the correct value for that system or added a Python interpreter and any necessary dependencies at :command:`usr/bin/python`. Starting in Ansible 2.8, Ansible searches for the correct path and executable name for Python on each target system, first in a lookup table of default Python interpreters for common distros, then in an ordered fallback list of possible Python interpreter names/paths. It's risky to rely on a Python interpreter set from the fallback list, because the interpreter may change on future runs. If an interpreter from higher in the fallback list gets installed (for example, as a side-effect of installing other packages), your original interpreter and its dependencies will no longer be used. For this reason, Ansible warns you when it uses a Python interpreter discovered from the fallback list. If you see this warning, the best solution is to explicitly set ``ansible_python_interpreter`` to the path of the correct interpreter for those target systems. You can still set ``ansible_python_interpreter`` to a specific path at any variable level (as a host variable, in vars files, in playbooks, and so on). If you prefer to use the Python interpreter discovery behavior, use one of the four new values for ``ansible_python_interpreter`` introduced in Ansible 2.8: +---------------------------+---------------------------------------------+ | New value | Behavior | +===========================+=============================================+ | auto |br| | If a Python interpreter is discovered, | | (future default) | Ansible uses the discovered Python, even if | | | :command:`/usr/bin/python` is also present. | | | Warns when using the fallback list. | +---------------------------+---------------------------------------------+ | **auto_legacy** |br| | If a Python interpreter is discovered, and | | (Ansible 2.8 default) | :command:`/usr/bin/python` is absent, | | | Ansible uses the discovered Python. Warns | | | when using the fallback list. | | | | | | If a Python interpreter is discovered, and | | | :command:`/usr/bin/python` is present, | | | Ansible uses :command:`/usr/bin/python` and | | | prints a deprecation warning about future | | | default behavior. Warns when using the | | | fallback list. | +---------------------------+---------------------------------------------+ | auto_legacy_silent | Behaves like ``auto_legacy`` but suppresses | | | the deprecation and fallback-list warnings. | +---------------------------+---------------------------------------------+ | auto_silent | Behaves like ``auto`` but suppresses the | | | fallback-list warning. | +---------------------------+---------------------------------------------+ In Ansible 2.12, Ansible will switch the default from :literal:`auto_legacy` to :literal:`auto`. The difference in behaviour is that :literal:`auto_legacy` uses :command:`/usr/bin/python` if present and falls back to the discovered Python when it is not present. :literal:`auto` will always use the discovered Python, regardless of whether :command:`/usr/bin/python` exists. The :literal:`auto_legacy` setting provides compatibility with previous versions of Ansible that always defaulted to :command:`/usr/bin/python`. If you installed Python and dependencies (``boto``, and so on) to :command:`/usr/bin/python` as a workaround on distros with a different default Python interpreter (for example, Ubuntu 16.04+, RHEL8, Fedora 23+), you have two options: #. Move existing dependencies over to the default Python for each platform/distribution/version. #. Use ``auto_legacy``. This setting lets Ansible find and use the workaround Python on hosts that have it, while also finding the correct default Python on newer hosts. But remember, the default will change in 4 releases. Retry File Creation default --------------------------- In Ansible 2.8, ``retry_files_enabled`` now defaults to ``False`` instead of ``True``. The behavior can be modified to previous version by editing the default ``ansible.cfg`` file and setting the value to ``True``. Command Line ============ Become Prompting ---------------- Beginning in version 2.8, by default Ansible will use the word ``BECOME`` to prompt you for a password for elevated privileges (``sudo`` privileges on Unix systems or ``enable`` mode on network devices): By default in Ansible 2.8:: ansible-playbook --become --ask-become-pass site.yml BECOME password: If you want the prompt to display the specific ``become_method`` you're using, instead of the general value ``BECOME``, set :ref:`AGNOSTIC_BECOME_PROMPT` to ``False`` in your Ansible configuration. By default in Ansible 2.7, or with ``AGNOSTIC_BECOME_PROMPT=False`` in Ansible 2.8:: ansible-playbook --become --ask-become-pass site.yml SUDO password: Deprecated ========== * Setting the async directory using ``ANSIBLE_ASYNC_DIR`` as an task/play environment key is deprecated and will be removed in Ansible 2.12. You can achieve the same result by setting ``ansible_async_dir`` as a variable like:: - name: run task with custom async directory command: sleep 5 async: 10 vars: ansible_async_dir: /tmp/.ansible_async * Plugin writers who need a ``FactCache`` object should be aware of two deprecations: 1. The ``FactCache`` class has moved from ``ansible.plugins.cache.FactCache`` to ``ansible.vars.fact_cache.FactCache``. This is because the ``FactCache`` is not part of the cache plugin API and cache plugin authors should not be subclassing it. ``FactCache`` is still available from its old location but will issue a deprecation warning when used from there. The old location will be removed in Ansible 2.12. 2. The ``FactCache.update()`` method has been converted to follow the dict API. It now takes a dictionary as its sole argument and updates itself with the dictionary's items. The previous API where ``update()`` took a key and a value will now issue a deprecation warning and will be removed in 2.12. If you need the old behavior switch to ``FactCache.first_order_merge()`` instead. * Supporting file-backed caching via self.cache is deprecated and will be removed in Ansible 2.12. If you maintain an inventory plugin, update it to use ``self._cache`` as a dictionary. For implementation details, see the :ref:`developer guide on inventory plugins`. * Importing cache plugins directly is deprecated and will be removed in Ansible 2.12. Use the plugin_loader so direct options, environment variables, and other means of configuration can be reconciled using the config system rather than constants. .. code-block:: python from ansible.plugins.loader import cache_loader cache = cache_loader.get('redis', **kwargs) Modules ======= Major changes in popular modules are detailed here The exec wrapper that runs PowerShell modules has been changed to set ``$ErrorActionPreference = "Stop"`` globally. This may mean that custom modules can fail if they implicitly relied on this behavior. To get the old behavior back, add ``$ErrorActionPreference = "Continue"`` to the top of the module. This change was made to restore the old behavior of the EAP that was accidentally removed in a previous release and ensure that modules are more resilient to errors that may occur in execution. * Version 2.8.14 of Ansible changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the ``mode`` change has been reverted in 2.8.15, and ``mode`` will now default to ``0o666 & ~umask`` as in previous versions of Ansible. * If you changed any tasks to specify less restrictive permissions while using 2.8.14, those changes will be unnecessary (but will do no harm) in 2.8.15. * To avoid the issue raised in CVE-2020-1736, specify a ``mode`` parameter in all file-based tasks that accept it. * ``dnf`` and ``yum`` - As of version 2.8.15, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task. Modules removed --------------- The following modules no longer exist: * ec2_remote_facts * azure * cs_nic * netscaler * win_msi Deprecation notices ------------------- The following modules will be removed in Ansible 2.12. Please update your playbooks accordingly. * ``foreman`` use `foreman-ansible-modules `_ instead. * ``katello`` use `foreman-ansible-modules `_ instead. * ``github_hooks`` use :ref:`github_webhook ` and :ref:`github_webhook_facts ` instead. * ``digital_ocean`` use :ref:`digital_ocean_droplet ` instead. * ``gce`` use :ref:`gcp_compute_instance ` instead. * ``gcspanner`` use :ref:`gcp_spanner_instance ` and :ref:`gcp_spanner_database ` instead. * ``gcdns_record`` use :ref:`gcp_dns_resource_record_set ` instead. * ``gcdns_zone`` use :ref:`gcp_dns_managed_zone ` instead. * ``gcp_forwarding_rule`` use :ref:`gcp_compute_global_forwarding_rule ` or :ref:`gcp_compute_forwarding_rule ` instead. * ``gcp_healthcheck`` use :ref:`gcp_compute_health_check `, :ref:`gcp_compute_http_health_check `, or :ref:`gcp_compute_https_health_check ` instead. * ``gcp_backend_service`` use :ref:`gcp_compute_backend_service ` instead. * ``gcp_target_proxy`` use :ref:`gcp_compute_target_http_proxy ` instead. * ``gcp_url_map`` use :ref:`gcp_compute_url_map ` instead. * ``panos`` use the `Palo Alto Networks Ansible Galaxy role `_ instead. Noteworthy module changes ------------------------- * The ``foreman`` and ``katello`` modules have been deprecated in favor of a set of modules that are broken out per entity with better idempotency in mind. * The ``foreman`` and ``katello`` modules replacement is officially part of the Foreman Community and supported there. * The ``tower_credential`` module originally required the ``ssh_key_data`` to be the path to a ssh_key_file. In order to work like AWX/Tower/RHAAP, ``ssh_key_data`` now contains the content of the file. The previous behavior can be achieved with ``lookup('file', '/path/to/file')``. * The ``win_scheduled_task`` module deprecated support for specifying a trigger repetition as a list and this format will be removed in Ansible 2.12. Instead specify the repetition as a dictionary value. * The ``win_feature`` module has removed the deprecated ``restart_needed`` return value, use the standardized ``reboot_required`` value instead. * The ``win_package`` module has removed the deprecated ``restart_required`` and ``exit_code`` return value, use the standardized ``reboot_required`` and ``rc`` value instead. * The ``win_get_url`` module has removed the deprecated ``win_get_url`` return dictionary, contained values are returned directly. * The ``win_get_url`` module has removed the deprecated ``skip_certificate_validation`` option, use the standardized ``validate_certs`` option instead. * The ``vmware_local_role_facts`` module now returns a list of dicts instead of a dict of dicts for role information. * If ``docker_network`` or ``docker_volume`` were called with ``diff: yes``, ``check_mode: yes`` or ``debug: yes``, a return value called ``diff`` was returned of type ``list``. To enable proper diff output, this was changed to type ``dict``; the original ``list`` is returned as ``diff.differences``. * The ``na_ontap_cluster_peer`` module has replaced ``source_intercluster_lif`` and ``dest_intercluster_lif`` string options with ``source_intercluster_lifs`` and ``dest_intercluster_lifs`` list options * The ``modprobe`` module now detects kernel builtins. Previously, attempting to remove (with ``state: absent``) a builtin kernel module succeeded without any error message because ``modprobe`` did not detect the module as ``present``. Now, ``modprobe`` will fail if a kernel module is builtin and ``state: absent`` (with an error message from the modprobe binary like ``modprobe: ERROR: Module nfs is builtin.``), and it will succeed without reporting changed if ``state: present``. Any playbooks that are using ``changed_when: no`` to mask this quirk can safely remove that workaround. To get the previous behavior when applying ``state: absent`` to a builtin kernel module, use ``failed_when: false`` or ``ignore_errors: true`` in your playbook. * The ``digital_ocean`` module has been deprecated in favor of modules that do not require external dependencies. This allows for more flexibility and better module support. * The ``docker_container`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``container``. The returned fact will be removed in Ansible 2.12. * The ``docker_network`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``network``. The returned fact will be removed in Ansible 2.12. * The ``docker_volume`` module has deprecated the returned fact ``docker_container``. The same value is available as the returned variable ``volume``. The returned fact will be removed in Ansible 2.12. * The ``docker_service`` module was renamed to :ref:`docker_compose `. * The renamed ``docker_compose`` module used to return one fact per service, named same as the service. A dictionary of these facts is returned as the regular return value ``services``. The returned facts will be removed in Ansible 2.12. * The ``docker_swarm_service`` module no longer sets a defaults for the following options: * ``user``. Before, the default was ``root``. * ``update_delay``. Before, the default was ``10``. * ``update_parallelism``. Before, the default was ``1``. * ``vmware_vm_facts`` used to return dict of dict with virtual machine's facts. Ansible 2.8 and onwards will return list of dict with virtual machine's facts. Please see module ``vmware_vm_facts`` documentation for example. * ``vmware_guest_snapshot`` module used to return ``results``. Since Ansible 2.8 and onwards ``results`` is a reserved keyword, it is replaced by ``snapshot_results``. Please see module ``vmware_guest_snapshots`` documentation for example. * The ``panos`` modules have been deprecated in favor of using the Palo Alto Networks `Ansible Galaxy role `_. Contributions to the role can be made `here `_. * The ``ipa_user`` module originally always sent ``password`` to FreeIPA regardless of whether the password changed. Now the module only sends ``password`` if ``update_password`` is set to ``always``, which is the default. * The ``win_psexec`` has deprecated the undocumented ``extra_opts`` module option. This will be removed in Ansible 2.10. * The ``win_nssm`` module has deprecated the following options in favor of using the ``win_service`` module to configure the service after installing it with ``win_nssm``: * ``dependencies``, use ``dependencies`` of ``win_service`` instead * ``start_mode``, use ``start_mode`` of ``win_service`` instead * ``user``, use ``username`` of ``win_service`` instead * ``password``, use ``password`` of ``win_service`` instead These options will be removed in Ansible 2.12. * The ``win_nssm`` module has also deprecated the ``start``, ``stop``, and ``restart`` values of the ``status`` option. You should use the ``win_service`` module to control the running state of the service. This will be removed in Ansible 2.12. * The ``status`` module option for ``win_nssm`` has changed its default value to ``present``. Before, the default was ``start``. Consequently, the service is no longer started by default after creation with ``win_nssm``, and you should use the ``win_service`` module to start it if needed. * The ``app_parameters`` module option for ``win_nssm`` has been deprecated; use ``argument`` instead. This will be removed in Ansible 2.12. * The ``app_parameters_free_form`` module option for ``win_nssm`` has been aliased to the new ``arguments`` option. * The ``win_dsc`` module will now validate the input options for a DSC resource. In previous versions invalid options would be ignored but are now not. * The ``openssl_pkcs12`` module will now regenerate the pkcs12 file if there are differences between the file on disk and the parameters passed to the module. Plugins ======= * Ansible no longer defaults to the ``paramiko`` connection plugin when using macOS as the control node. Ansible will now use the ``ssh`` connection plugin by default on a macOS control node. Since ``ssh`` supports connection persistence between tasks and playbook runs, it performs better than ``paramiko``. If you are using password authentication, you will need to install ``sshpass`` when using the ``ssh`` connection plugin. Or you can explicitly set the connection type to ``paramiko`` to maintain the pre-2.8 behavior on macOS. * Connection plugins have been standardized to allow use of ``ansible__user`` and ``ansible__password`` variables. Variables such as ``ansible__pass`` and ``ansible__username`` are treated with lower priority than the standardized names and may be deprecated in the future. In general, the ``ansible_user`` and ``ansible_password`` vars should be used unless there is a reason to use the connection-specific variables. * The ``powershell`` shell plugin now uses ``async_dir`` to define the async path for the results file and the default has changed to ``%USERPROFILE%\.ansible_async``. To control this path now, either set the ``ansible_async_dir`` variable or the ``async_dir`` value in the ``powershell`` section of the config ini. * Order of enabled inventory plugins (:ref:`INVENTORY_ENABLED`) has been updated, :ref:`auto ` is now before :ref:`yaml ` and :ref:`ini `. * The private ``_options`` attribute has been removed from the ``CallbackBase`` class of callback plugins. If you have a third-party callback plugin which needs to access the command line arguments, use code like the following instead of trying to use ``self._options``: .. code-block:: python from ansible import context [...] tags = context.CLIARGS['tags'] ``context.CLIARGS`` is a read-only dictionary so normal dictionary retrieval methods like ``CLIARGS.get('tags')`` and ``CLIARGS['tags']`` work as expected but you won't be able to modify the cli arguments at all. * Play recap now counts ``ignored`` and ``rescued`` tasks as well as ``ok``, ``changed``, ``unreachable``, ``failed`` and ``skipped`` tasks, thanks to two additional stat counters in the ``default`` callback plugin. Tasks that fail and have ``ignore_errors: yes`` set are listed as ``ignored``. Tasks that fail and then execute a rescue section are listed as ``rescued``. Note that ``rescued`` tasks are no longer counted as ``failed`` as in Ansible 2.7 (and earlier). * ``osx_say`` callback plugin was renamed into :ref:`say `. * Inventory plugins now support caching via cache plugins. To start using a cache plugin with your inventory see the section on caching in the :ref:`inventory guide`. To port a custom cache plugin to be compatible with inventory see :ref:`developer guide on cache plugins`. Porting custom scripts ====================== Display class ------------- As of Ansible 2.8, the ``Display`` class is now a "singleton". Instead of using ``__main__.display`` each file should import and instantiate ``ansible.utils.display.Display`` on its own. **OLD** In Ansible 2.7 (and earlier) the following was used to access the ``display`` object: .. code-block:: python try: from __main__ import display except ImportError: from ansible.utils.display import Display display = Display() **NEW** In Ansible 2.8 the following should be used: .. code-block:: python from ansible.utils.display import Display display = Display() Networking ========== * The ``eos_config``, ``ios_config``, and ``nxos_config`` modules have removed the deprecated ``save`` and ``force`` parameters, use the ``save_when`` parameter to replicate their functionality. * The ``nxos_vrf_af`` module has removed the ``safi`` parameter. This parameter was deprecated in Ansible 2.4 and has had no impact on the module since then. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_2.9.rst0000644000000000000000000015721600000000000026307 0ustar00rootroot00000000000000 .. _porting_2.9_guide: ************************* Ansible 2.9 Porting Guide ************************* This section discusses the behavioral changes between Ansible 2.8 and Ansible 2.9. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for 2.9 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== Inventory --------- * ``hash_behaviour`` now affects inventory sources. If you have it set to ``merge``, the data you get from inventory might change and you will have to update playbooks accordingly. If you're using the default setting (``overwrite``), you will see no changes. Inventory was ignoring this setting. Loops ----- Ansible 2.9 handles "unsafe" data more robustly, ensuring that data marked "unsafe" is not templated. In previous versions, Ansible recursively marked all data returned by the direct use of ``lookup()`` as "unsafe", but only marked structured data returned by indirect lookups using ``with_X`` style loops as "unsafe" if the returned elements were strings. Ansible 2.9 treats these two approaches consistently. As a result, if you use ``with_dict`` to return keys with templatable values, your templates may no longer work as expected in Ansible 2.9. To allow the old behavior, switch from using ``with_X`` to using ``loop`` with a filter as described at :ref:`migrating_to_loop`. Command Line ============ * The location of the Galaxy token file has changed from ``~/.ansible_galaxy`` to ``~/.ansible/galaxy_token``. You can configure both path and file name with the :ref:`galaxy_token_path` config. Deprecated ========== No notable changes Collection loader changes ========================= The way to import a PowerShell or C# module util from a collection has changed in the Ansible 2.9 release. In Ansible 2.8 a util was imported with the following syntax: .. code-block:: powershell #AnsibleRequires -CSharpUtil AnsibleCollections.namespace_name.collection_name.util_filename #AnsibleRequires -PowerShell AnsibleCollections.namespace_name.collection_name.util_filename In Ansible 2.9 this was changed to: .. code-block:: powershell #AnsibleRequires -CSharpUtil ansible_collections.namespace_name.collection_name.plugins.module_utils.util_filename #AnsibleRequires -PowerShell ansible_collections.namespace_name.collection_name.plugins.module_utils.util_filename The change in the collection import name also requires any C# util namespaces to be updated with the newer name format. This is more verbose but is designed to make sure we avoid plugin name conflicts across separate plugin types and to standardise how imports work in PowerShell with how Python modules work. Modules ======= * The ``win_get_url`` and ``win_uri`` module now sends requests with a default ``User-Agent`` of ``ansible-httpget``. This can be changed by using the ``http_agent`` key. * The ``apt`` module now honors ``update_cache=false`` while installing its own dependency and skips the cache update. Explicitly setting ``update_cache=true`` or omitting the param ``update_cache`` will result in a cache update while installing its own dependency. * Version 2.9.12 of Ansible changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the mode change has been reverted in 2.9.13, and mode will now default to ``0o666 & ~umask`` as in previous versions of Ansible. * If you changed any tasks to specify less restrictive permissions while using 2.9.12, those changes will be unnecessary (but will do no harm) in 2.9.13. * To avoid the issue raised in CVE-2020-1736, specify a ``mode`` parameter in all file-based tasks that accept it. * ``dnf`` and ``yum`` - As of version 2.9.13, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task. Renaming from ``_facts`` to ``_info`` -------------------------------------- Ansible 2.9 renamed a lot of modules from ``_facts`` to ``_info``, because the modules do not return :ref:`Ansible facts `. Ansible facts relate to a specific host. For example, the configuration of a network interface, the operating system on a unix server, and the list of packages installed on a Windows box are all Ansible facts. The renamed modules return values that are not unique to the host. For example, account information or region data for a cloud provider. Renaming these modules should provide more clarity about the types of return values each set of modules offers. Writing modules --------------- * Module and module_utils files can now use relative imports to include other module_utils files. This is useful for shortening long import lines, especially in collections. Example of using a relative import in collections: .. code-block:: python # File: ansible_collections/my_namespace/my_collection/plugins/modules/my_module.py # Old way to use an absolute import to import module_utils from the collection: from ansible_collections.my_namespace.my_collection.plugins.module_utils import my_util # New way using a relative import: from ..module_utils import my_util Modules and module_utils shipped with Ansible can use relative imports as well but the savings are smaller: .. code-block:: python # File: ansible/modules/system/ping.py # Old way to use an absolute import to import module_utils from core: from ansible.module_utils.basic import AnsibleModule # New way using a relative import: from ...module_utils.basic import AnsibleModule Each single dot (``.``) represents one level of the tree (equivalent to ``../`` in filesystem relative links). .. seealso:: `The Python Relative Import Docs `_ go into more detail of how to write relative imports. Modules removed --------------- The following modules no longer exist: * Apstra's ``aos_*`` modules. See the new modules at `https://github.com/apstra `_. * ec2_ami_find use :ref:`ec2_ami_facts ` instead. * kubernetes use :ref:`k8s ` instead. * nxos_ip_interface use :ref:`nxos_l3_interface ` instead. * nxos_portchannel use :ref:`nxos_linkagg ` instead. * nxos_switchport use :ref:`nxos_l2_interface ` instead. * oc use :ref:`k8s ` instead. * panos_nat_policy use :ref:`panos_nat_rule ` instead. * panos_security_policy use :ref:`panos_security_rule ` instead. * vsphere_guest use :ref:`vmware_guest ` instead. Deprecation notices ------------------- The following modules will be removed in Ansible 2.13. Please update update your playbooks accordingly. * cs_instance_facts use :ref:`cs_instance_info ` instead. * cs_zone_facts use :ref:`cs_zone_info ` instead. * digital_ocean_sshkey_facts use :ref:`digital_ocean_sshkey_info ` instead. * eos_interface use :ref:`eos_interfaces ` instead. * eos_l2_interface use :ref:`eos_l2_interfaces ` instead. * eos_l3_interface use :ref:`eos_l3_interfaces ` instead. * eos_linkagg use :ref:`eos_lag_interfaces ` instead. * eos_lldp_interface use :ref:`eos_lldp_interfaces ` instead. * eos_vlan use :ref:`eos_vlans ` instead. * ios_interface use :ref:`ios_interfaces ` instead. * ios_l2_interface use :ref:`ios_l2_interfaces ` instead. * ios_l3_interface use :ref:`ios_l3_interfaces ` instead. * ios_vlan use :ref:`ios_vlans ` instead. * iosxr_interface use :ref:`iosxr_interfaces ` instead. * junos_interface use :ref:`junos_interfaces ` instead. * junos_l2_interface use :ref:`junos_l2_interfaces ` instead. * junos_l3_interface use :ref:`junos_l3_interfaces ` instead. * junos_linkagg use :ref:`junos_lag_interfaces ` instead. * junos_lldp use :ref:`junos_lldp_global ` instead. * junos_lldp_interface use :ref:`junos_lldp_interfaces ` instead. * junos_vlan use :ref:`junos_vlans ` instead. * lambda_facts use :ref:`lambda_info ` instead. * na_ontap_gather_facts use :ref:`na_ontap_info ` instead. * net_banner use the platform-specific [netos]_banner modules instead. * net_interface use the new platform-specific [netos]_interfaces modules instead. * net_l2_interface use the new platform-specific [netos]_l2_interfaces modules instead. * net_l3_interface use the new platform-specific [netos]_l3_interfaces modules instead. * net_linkagg use the new platform-specific [netos]_lag modules instead. * net_lldp use the new platform-specific [netos]_lldp_global modules instead. * net_lldp_interface use the new platform-specific [netos]_lldp_interfaces modules instead. * net_logging use the platform-specific [netos]_logging modules instead. * net_static_route use the platform-specific [netos]_static_route modules instead. * net_system use the platform-specific [netos]_system modules instead. * net_user use the platform-specific [netos]_user modules instead. * net_vlan use the new platform-specific [netos]_vlans modules instead. * net_vrf use the platform-specific [netos]_vrf modules instead. * nginx_status_facts use :ref:`nginx_status_info ` instead. * nxos_interface use :ref:`nxos_interfaces ` instead. * nxos_l2_interface use :ref:`nxos_l2_interfaces ` instead. * nxos_l3_interface use :ref:`nxos_l3_interfaces ` instead. * nxos_linkagg use :ref:`nxos_lag_interfaces ` instead. * nxos_vlan use :ref:`nxos_vlans ` instead. * online_server_facts use :ref:`online_server_info ` instead. * online_user_facts use :ref:`online_user_info ` instead. * purefa_facts use :ref:`purefa_info ` instead. * purefb_facts use :ref:`purefb_info ` instead. * scaleway_image_facts use :ref:`scaleway_image_info ` instead. * scaleway_ip_facts use :ref:`scaleway_ip_info ` instead. * scaleway_organization_facts use :ref:`scaleway_organization_info ` instead. * scaleway_security_group_facts use :ref:`scaleway_security_group_info ` instead. * scaleway_server_facts use :ref:`scaleway_server_info ` instead. * scaleway_snapshot_facts use :ref:`scaleway_snapshot_info ` instead. * scaleway_volume_facts use :ref:`scaleway_volume_info ` instead. * vcenter_extension_facts use :ref:`vcenter_extension_info ` instead. * vmware_about_facts use :ref:`vmware_about_info ` instead. * vmware_category_facts use :ref:`vmware_category_info ` instead. * vmware_drs_group_facts use :ref:`vmware_drs_group_info ` instead. * vmware_drs_rule_facts use :ref:`vmware_drs_rule_info ` instead. * vmware_dvs_portgroup_facts use :ref:`vmware_dvs_portgroup_info ` instead. * vmware_guest_boot_facts use :ref:`vmware_guest_boot_info ` instead. * vmware_guest_customization_facts use :ref:`vmware_guest_customization_info ` instead. * vmware_guest_disk_facts use :ref:`vmware_guest_disk_info ` instead. * vmware_host_capability_facts use :ref:`vmware_host_capability_info ` instead. * vmware_host_config_facts use :ref:`vmware_host_config_info ` instead. * vmware_host_dns_facts use :ref:`vmware_host_dns_info ` instead. * vmware_host_feature_facts use :ref:`vmware_host_feature_info ` instead. * vmware_host_firewall_facts use :ref:`vmware_host_firewall_info ` instead. * vmware_host_ntp_facts use :ref:`vmware_host_ntp_info ` instead. * vmware_host_package_facts use :ref:`vmware_host_package_info ` instead. * vmware_host_service_facts use :ref:`vmware_host_service_info ` instead. * vmware_host_ssl_facts use :ref:`vmware_host_ssl_info ` instead. * vmware_host_vmhba_facts use :ref:`vmware_host_vmhba_info ` instead. * vmware_host_vmnic_facts use :ref:`vmware_host_vmnic_info ` instead. * vmware_local_role_facts use :ref:`vmware_local_role_info ` instead. * vmware_local_user_facts use :ref:`vmware_local_user_info ` instead. * vmware_portgroup_facts use :ref:`vmware_portgroup_info ` instead. * vmware_resource_pool_facts use :ref:`vmware_resource_pool_info ` instead. * vmware_target_canonical_facts use :ref:`vmware_target_canonical_info ` instead. * vmware_vmkernel_facts use :ref:`vmware_vmkernel_info ` instead. * vmware_vswitch_facts use :ref:`vmware_vswitch_info ` instead. * vultr_account_facts use :ref:`vultr_account_info ` instead. * vultr_block_storage_facts use :ref:`vultr_block_storage_info ` instead. * vultr_dns_domain_facts use :ref:`vultr_dns_domain_info ` instead. * vultr_firewall_group_facts use :ref:`vultr_firewall_group_info ` instead. * vultr_network_facts use :ref:`vultr_network_info ` instead. * vultr_os_facts use :ref:`vultr_os_info ` instead. * vultr_plan_facts use :ref:`vultr_plan_info ` instead. * vultr_region_facts use :ref:`vultr_region_info ` instead. * vultr_server_facts use :ref:`vultr_server_info ` instead. * vultr_ssh_key_facts use :ref:`vultr_ssh_key_info ` instead. * vultr_startup_script_facts use :ref:`vultr_startup_script_info ` instead. * vultr_user_facts use :ref:`vultr_user_info ` instead. * vyos_interface use :ref:`vyos_interfaces ` instead. * vyos_l3_interface use :ref:`vyos_l3_interfaces ` instead. * vyos_linkagg use :ref:`vyos_lag_interfaces ` instead. * vyos_lldp use :ref:`vyos_lldp_global ` instead. * vyos_lldp_interface use :ref:`vyos_lldp_interfaces ` instead. The following functionality will be removed in Ansible 2.12. Please update update your playbooks accordingly. * ``vmware_cluster`` DRS, HA and VSAN configuration; use :ref:`vmware_cluster_drs `, :ref:`vmware_cluster_ha ` and :ref:`vmware_cluster_vsan ` instead. The following functionality will be removed in Ansible 2.13. Please update update your playbooks accordingly. * ``openssl_certificate`` deprecates the ``assertonly`` provider. Please see the :ref:`openssl_certificate ` documentation examples on how to replace the provider with the :ref:`openssl_certificate_info `, :ref:`openssl_csr_info `, :ref:`openssl_privatekey_info ` and :ref:`assert ` modules. For the following modules, the PyOpenSSL-based backend ``pyopenssl`` has been deprecated and will be removed in Ansible 2.13: * :ref:`get_certificate ` * :ref:`openssl_certificate ` * :ref:`openssl_certificate_info ` * :ref:`openssl_csr ` * :ref:`openssl_csr_info ` * :ref:`openssl_privatekey ` * :ref:`openssl_privatekey_info ` * :ref:`openssl_publickey ` Renamed modules ^^^^^^^^^^^^^^^ The following modules have been renamed. The old name is deprecated and will be removed in Ansible 2.13. Please update update your playbooks accordingly. * The ``ali_instance_facts`` module was renamed to :ref:`ali_instance_info `. * The ``aws_acm_facts`` module was renamed to :ref:`aws_acm_info `. * The ``aws_az_facts`` module was renamed to :ref:`aws_az_info `. * The ``aws_caller_facts`` module was renamed to :ref:`aws_caller_info `. * The ``aws_kms_facts`` module was renamed to :ref:`aws_kms_info `. * The ``aws_region_facts`` module was renamed to :ref:`aws_region_info `. * The ``aws_s3_bucket_facts`` module was renamed to :ref:`aws_s3_bucket_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``aws_sgw_facts`` module was renamed to :ref:`aws_sgw_info `. * The ``aws_waf_facts`` module was renamed to :ref:`aws_waf_info `. * The ``azure_rm_aks_facts`` module was renamed to :ref:`azure_rm_aks_info `. * The ``azure_rm_aksversion_facts`` module was renamed to :ref:`azure_rm_aksversion_info `. * The ``azure_rm_applicationsecuritygroup_facts`` module was renamed to :ref:`azure_rm_applicationsecuritygroup_info `. * The ``azure_rm_appserviceplan_facts`` module was renamed to :ref:`azure_rm_appserviceplan_info `. * The ``azure_rm_automationaccount_facts`` module was renamed to :ref:`azure_rm_automationaccount_info `. * The ``azure_rm_autoscale_facts`` module was renamed to :ref:`azure_rm_autoscale_info `. * The ``azure_rm_availabilityset_facts`` module was renamed to :ref:`azure_rm_availabilityset_info `. * The ``azure_rm_cdnendpoint_facts`` module was renamed to :ref:`azure_rm_cdnendpoint_info `. * The ``azure_rm_cdnprofile_facts`` module was renamed to :ref:`azure_rm_cdnprofile_info `. * The ``azure_rm_containerinstance_facts`` module was renamed to :ref:`azure_rm_containerinstance_info `. * The ``azure_rm_containerregistry_facts`` module was renamed to :ref:`azure_rm_containerregistry_info `. * The ``azure_rm_cosmosdbaccount_facts`` module was renamed to :ref:`azure_rm_cosmosdbaccount_info `. * The ``azure_rm_deployment_facts`` module was renamed to :ref:`azure_rm_deployment_info `. * The ``azure_rm_resourcegroup_facts`` module was renamed to :ref:`azure_rm_resourcegroup_info `. * The ``bigip_device_facts`` module was renamed to :ref:`bigip_device_info `. * The ``bigiq_device_facts`` module was renamed to :ref:`bigiq_device_info `. * The ``cloudformation_facts`` module was renamed to :ref:`cloudformation_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``cloudfront_facts`` module was renamed to :ref:`cloudfront_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``cloudwatchlogs_log_group_facts`` module was renamed to :ref:`cloudwatchlogs_log_group_info `. * The ``digital_ocean_account_facts`` module was renamed to :ref:`digital_ocean_account_info `. * The ``digital_ocean_certificate_facts`` module was renamed to :ref:`digital_ocean_certificate_info `. * The ``digital_ocean_domain_facts`` module was renamed to :ref:`digital_ocean_domain_info `. * The ``digital_ocean_firewall_facts`` module was renamed to :ref:`digital_ocean_firewall_info `. * The ``digital_ocean_floating_ip_facts`` module was renamed to :ref:`digital_ocean_floating_ip_info `. * The ``digital_ocean_image_facts`` module was renamed to :ref:`digital_ocean_image_info `. * The ``digital_ocean_load_balancer_facts`` module was renamed to :ref:`digital_ocean_load_balancer_info `. * The ``digital_ocean_region_facts`` module was renamed to :ref:`digital_ocean_region_info `. * The ``digital_ocean_size_facts`` module was renamed to :ref:`digital_ocean_size_info `. * The ``digital_ocean_snapshot_facts`` module was renamed to :ref:`digital_ocean_snapshot_info `. * The ``digital_ocean_tag_facts`` module was renamed to :ref:`digital_ocean_tag_info `. * The ``digital_ocean_volume_facts`` module was renamed to :ref:`digital_ocean_volume_info `. * The ``ec2_ami_facts`` module was renamed to :ref:`ec2_ami_info `. * The ``ec2_asg_facts`` module was renamed to :ref:`ec2_asg_info `. * The ``ec2_customer_gateway_facts`` module was renamed to :ref:`ec2_customer_gateway_info `. * The ``ec2_eip_facts`` module was renamed to :ref:`ec2_eip_info `. * The ``ec2_elb_facts`` module was renamed to :ref:`ec2_elb_info `. * The ``ec2_eni_facts`` module was renamed to :ref:`ec2_eni_info `. * The ``ec2_group_facts`` module was renamed to :ref:`ec2_group_info `. * The ``ec2_instance_facts`` module was renamed to :ref:`ec2_instance_info `. * The ``ec2_lc_facts`` module was renamed to :ref:`ec2_lc_info `. * The ``ec2_placement_group_facts`` module was renamed to :ref:`ec2_placement_group_info `. * The ``ec2_snapshot_facts`` module was renamed to :ref:`ec2_snapshot_info `. * The ``ec2_vol_facts`` module was renamed to :ref:`ec2_vol_info `. * The ``ec2_vpc_dhcp_option_facts`` module was renamed to :ref:`ec2_vpc_dhcp_option_info `. * The ``ec2_vpc_endpoint_facts`` module was renamed to :ref:`ec2_vpc_endpoint_info `. * The ``ec2_vpc_igw_facts`` module was renamed to :ref:`ec2_vpc_igw_info `. * The ``ec2_vpc_nacl_facts`` module was renamed to :ref:`ec2_vpc_nacl_info `. * The ``ec2_vpc_nat_gateway_facts`` module was renamed to :ref:`ec2_vpc_nat_gateway_info `. * The ``ec2_vpc_net_facts`` module was renamed to :ref:`ec2_vpc_net_info `. * The ``ec2_vpc_peering_facts`` module was renamed to :ref:`ec2_vpc_peering_info `. * The ``ec2_vpc_route_table_facts`` module was renamed to :ref:`ec2_vpc_route_table_info `. * The ``ec2_vpc_subnet_facts`` module was renamed to :ref:`ec2_vpc_subnet_info `. * The ``ec2_vpc_vgw_facts`` module was renamed to :ref:`ec2_vpc_vgw_info `. * The ``ec2_vpc_vpn_facts`` module was renamed to :ref:`ec2_vpc_vpn_info `. * The ``ecs_service_facts`` module was renamed to :ref:`ecs_service_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ecs_taskdefinition_facts`` module was renamed to :ref:`ecs_taskdefinition_info `. * The ``efs_facts`` module was renamed to :ref:`efs_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``elasticache_facts`` module was renamed to :ref:`elasticache_info `. * The ``elb_application_lb_facts`` module was renamed to :ref:`elb_application_lb_info `. * The ``elb_classic_lb_facts`` module was renamed to :ref:`elb_classic_lb_info `. * The ``elb_target_facts`` module was renamed to :ref:`elb_target_info `. * The ``elb_target_group_facts`` module was renamed to :ref:`elb_target_group_info `. * The ``gcp_bigquery_dataset_facts`` module was renamed to :ref:`gcp_bigquery_dataset_info `. * The ``gcp_bigquery_table_facts`` module was renamed to :ref:`gcp_bigquery_table_info `. * The ``gcp_cloudbuild_trigger_facts`` module was renamed to :ref:`gcp_cloudbuild_trigger_info `. * The ``gcp_compute_address_facts`` module was renamed to :ref:`gcp_compute_address_info `. * The ``gcp_compute_backend_bucket_facts`` module was renamed to :ref:`gcp_compute_backend_bucket_info `. * The ``gcp_compute_backend_service_facts`` module was renamed to :ref:`gcp_compute_backend_service_info `. * The ``gcp_compute_disk_facts`` module was renamed to :ref:`gcp_compute_disk_info `. * The ``gcp_compute_firewall_facts`` module was renamed to :ref:`gcp_compute_firewall_info `. * The ``gcp_compute_forwarding_rule_facts`` module was renamed to :ref:`gcp_compute_forwarding_rule_info `. * The ``gcp_compute_global_address_facts`` module was renamed to :ref:`gcp_compute_global_address_info `. * The ``gcp_compute_global_forwarding_rule_facts`` module was renamed to :ref:`gcp_compute_global_forwarding_rule_info `. * The ``gcp_compute_health_check_facts`` module was renamed to :ref:`gcp_compute_health_check_info `. * The ``gcp_compute_http_health_check_facts`` module was renamed to :ref:`gcp_compute_http_health_check_info `. * The ``gcp_compute_https_health_check_facts`` module was renamed to :ref:`gcp_compute_https_health_check_info `. * The ``gcp_compute_image_facts`` module was renamed to :ref:`gcp_compute_image_info `. * The ``gcp_compute_instance_facts`` module was renamed to :ref:`gcp_compute_instance_info `. * The ``gcp_compute_instance_group_facts`` module was renamed to :ref:`gcp_compute_instance_group_info `. * The ``gcp_compute_instance_group_manager_facts`` module was renamed to :ref:`gcp_compute_instance_group_manager_info `. * The ``gcp_compute_instance_template_facts`` module was renamed to :ref:`gcp_compute_instance_template_info `. * The ``gcp_compute_interconnect_attachment_facts`` module was renamed to :ref:`gcp_compute_interconnect_attachment_info `. * The ``gcp_compute_network_facts`` module was renamed to :ref:`gcp_compute_network_info `. * The ``gcp_compute_region_disk_facts`` module was renamed to :ref:`gcp_compute_region_disk_info `. * The ``gcp_compute_route_facts`` module was renamed to :ref:`gcp_compute_route_info `. * The ``gcp_compute_router_facts`` module was renamed to :ref:`gcp_compute_router_info `. * The ``gcp_compute_ssl_certificate_facts`` module was renamed to :ref:`gcp_compute_ssl_certificate_info `. * The ``gcp_compute_ssl_policy_facts`` module was renamed to :ref:`gcp_compute_ssl_policy_info `. * The ``gcp_compute_subnetwork_facts`` module was renamed to :ref:`gcp_compute_subnetwork_info `. * The ``gcp_compute_target_http_proxy_facts`` module was renamed to :ref:`gcp_compute_target_http_proxy_info `. * The ``gcp_compute_target_https_proxy_facts`` module was renamed to :ref:`gcp_compute_target_https_proxy_info `. * The ``gcp_compute_target_pool_facts`` module was renamed to :ref:`gcp_compute_target_pool_info `. * The ``gcp_compute_target_ssl_proxy_facts`` module was renamed to :ref:`gcp_compute_target_ssl_proxy_info `. * The ``gcp_compute_target_tcp_proxy_facts`` module was renamed to :ref:`gcp_compute_target_tcp_proxy_info `. * The ``gcp_compute_target_vpn_gateway_facts`` module was renamed to :ref:`gcp_compute_target_vpn_gateway_info `. * The ``gcp_compute_url_map_facts`` module was renamed to :ref:`gcp_compute_url_map_info `. * The ``gcp_compute_vpn_tunnel_facts`` module was renamed to :ref:`gcp_compute_vpn_tunnel_info `. * The ``gcp_container_cluster_facts`` module was renamed to :ref:`gcp_container_cluster_info `. * The ``gcp_container_node_pool_facts`` module was renamed to :ref:`gcp_container_node_pool_info `. * The ``gcp_dns_managed_zone_facts`` module was renamed to :ref:`gcp_dns_managed_zone_info `. * The ``gcp_dns_resource_record_set_facts`` module was renamed to :ref:`gcp_dns_resource_record_set_info `. * The ``gcp_iam_role_facts`` module was renamed to :ref:`gcp_iam_role_info `. * The ``gcp_iam_service_account_facts`` module was renamed to :ref:`gcp_iam_service_account_info `. * The ``gcp_pubsub_subscription_facts`` module was renamed to :ref:`gcp_pubsub_subscription_info `. * The ``gcp_pubsub_topic_facts`` module was renamed to :ref:`gcp_pubsub_topic_info `. * The ``gcp_redis_instance_facts`` module was renamed to :ref:`gcp_redis_instance_info `. * The ``gcp_resourcemanager_project_facts`` module was renamed to :ref:`gcp_resourcemanager_project_info `. * The ``gcp_sourcerepo_repository_facts`` module was renamed to :ref:`gcp_sourcerepo_repository_info `. * The ``gcp_spanner_database_facts`` module was renamed to :ref:`gcp_spanner_database_info `. * The ``gcp_spanner_instance_facts`` module was renamed to :ref:`gcp_spanner_instance_info `. * The ``gcp_sql_database_facts`` module was renamed to :ref:`gcp_sql_database_info `. * The ``gcp_sql_instance_facts`` module was renamed to :ref:`gcp_sql_instance_info `. * The ``gcp_sql_user_facts`` module was renamed to :ref:`gcp_sql_user_info `. * The ``gcp_tpu_node_facts`` module was renamed to :ref:`gcp_tpu_node_info `. * The ``gcpubsub_facts`` module was renamed to :ref:`gcpubsub_info `. * The ``github_webhook_facts`` module was renamed to :ref:`github_webhook_info `. * The ``gluster_heal_facts`` module was renamed to :ref:`gluster_heal_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_datacenter_facts`` module was renamed to :ref:`hcloud_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_floating_ip_facts`` module was renamed to :ref:`hcloud_floating_ip_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_image_facts`` module was renamed to :ref:`hcloud_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_location_facts`` module was renamed to :ref:`hcloud_location_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_server_facts`` module was renamed to :ref:`hcloud_server_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_server_type_facts`` module was renamed to :ref:`hcloud_server_type_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_ssh_key_facts`` module was renamed to :ref:`hcloud_ssh_key_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hcloud_volume_facts`` module was renamed to :ref:`hcloud_volume_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``hpilo_facts`` module was renamed to :ref:`hpilo_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``iam_mfa_device_facts`` module was renamed to :ref:`iam_mfa_device_info `. * The ``iam_role_facts`` module was renamed to :ref:`iam_role_info `. * The ``iam_server_certificate_facts`` module was renamed to :ref:`iam_server_certificate_info `. * The ``idrac_redfish_facts`` module was renamed to :ref:`idrac_redfish_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``intersight_facts`` module was renamed to :ref:`intersight_info `. * The ``jenkins_job_facts`` module was renamed to :ref:`jenkins_job_info `. * The ``k8s_facts`` module was renamed to :ref:`k8s_info `. * The ``memset_memstore_facts`` module was renamed to :ref:`memset_memstore_info `. * The ``memset_server_facts`` module was renamed to :ref:`memset_server_info `. * The ``one_image_facts`` module was renamed to :ref:`one_image_info `. * The ``onepassword_facts`` module was renamed to :ref:`onepassword_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_datacenter_facts`` module was renamed to :ref:`oneview_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_enclosure_facts`` module was renamed to :ref:`oneview_enclosure_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_ethernet_network_facts`` module was renamed to :ref:`oneview_ethernet_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_fc_network_facts`` module was renamed to :ref:`oneview_fc_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_fcoe_network_facts`` module was renamed to :ref:`oneview_fcoe_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_logical_interconnect_group_facts`` module was renamed to :ref:`oneview_logical_interconnect_group_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_network_set_facts`` module was renamed to :ref:`oneview_network_set_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``oneview_san_manager_facts`` module was renamed to :ref:`oneview_san_manager_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_flavor_facts`` module was renamed to :ref:`os_flavor_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_image_facts`` module was renamed to :ref:`os_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_keystone_domain_facts`` module was renamed to :ref:`os_keystone_domain_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_networks_facts`` module was renamed to :ref:`os_networks_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_port_facts`` module was renamed to :ref:`os_port_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_project_facts`` module was renamed to :ref:`os_project_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_server_facts`` module was renamed to :ref:`os_server_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_subnets_facts`` module was renamed to :ref:`os_subnets_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``os_user_facts`` module was renamed to :ref:`os_user_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_affinity_label_facts`` module was renamed to :ref:`ovirt_affinity_label_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_api_facts`` module was renamed to :ref:`ovirt_api_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_cluster_facts`` module was renamed to :ref:`ovirt_cluster_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_datacenter_facts`` module was renamed to :ref:`ovirt_datacenter_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_disk_facts`` module was renamed to :ref:`ovirt_disk_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_event_facts`` module was renamed to :ref:`ovirt_event_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_external_provider_facts`` module was renamed to :ref:`ovirt_external_provider_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_group_facts`` module was renamed to :ref:`ovirt_group_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_host_facts`` module was renamed to :ref:`ovirt_host_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_host_storage_facts`` module was renamed to :ref:`ovirt_host_storage_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_network_facts`` module was renamed to :ref:`ovirt_network_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_nic_facts`` module was renamed to :ref:`ovirt_nic_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_permission_facts`` module was renamed to :ref:`ovirt_permission_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_quota_facts`` module was renamed to :ref:`ovirt_quota_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_scheduling_policy_facts`` module was renamed to :ref:`ovirt_scheduling_policy_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_snapshot_facts`` module was renamed to :ref:`ovirt_snapshot_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_storage_domain_facts`` module was renamed to :ref:`ovirt_storage_domain_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_storage_template_facts`` module was renamed to :ref:`ovirt_storage_template_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_storage_vm_facts`` module was renamed to :ref:`ovirt_storage_vm_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_tag_facts`` module was renamed to :ref:`ovirt_tag_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_template_facts`` module was renamed to :ref:`ovirt_template_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_user_facts`` module was renamed to :ref:`ovirt_user_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_vm_facts`` module was renamed to :ref:`ovirt_vm_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``ovirt_vmpool_facts`` module was renamed to :ref:`ovirt_vmpool_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``python_requirements_facts`` module was renamed to :ref:`python_requirements_info `. * The ``rds_instance_facts`` module was renamed to :ref:`rds_instance_info `. * The ``rds_snapshot_facts`` module was renamed to :ref:`rds_snapshot_info `. * The ``redfish_facts`` module was renamed to :ref:`redfish_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``redshift_facts`` module was renamed to :ref:`redshift_info `. * The ``route53_facts`` module was renamed to :ref:`route53_info `. * The ``smartos_image_facts`` module was renamed to :ref:`smartos_image_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``vertica_facts`` module was renamed to :ref:`vertica_info `. When called with the new name, the module no longer returns ``ansible_facts``. To access return values, :ref:`register a variable `. * The ``vmware_cluster_facts`` module was renamed to :ref:`vmware_cluster_info `. * The ``vmware_datastore_facts`` module was renamed to :ref:`vmware_datastore_info `. * The ``vmware_guest_facts`` module was renamed to :ref:`vmware_guest_info `. * The ``vmware_guest_snapshot_facts`` module was renamed to :ref:`vmware_guest_snapshot_info `. * The ``vmware_tag_facts`` module was renamed to :ref:`vmware_tag_info `. * The ``vmware_vm_facts`` module was renamed to :ref:`vmware_vm_info `. * The ``xenserver_guest_facts`` module was renamed to :ref:`xenserver_guest_info `. * The ``zabbix_group_facts`` module was renamed to :ref:`zabbix_group_info `. * The ``zabbix_host_facts`` module was renamed to :ref:`zabbix_host_info `. Noteworthy module changes ------------------------- * :ref:`vmware_cluster ` was refactored for easier maintenance/bugfixes. Use the three new, specialized modules to configure clusters. Configure DRS with :ref:`vmware_cluster_drs `, HA with :ref:`vmware_cluster_ha ` and vSAN with :ref:`vmware_cluster_vsan `. * :ref:`vmware_dvswitch ` accepts ``folder`` parameter to place dvswitch in user defined folder. This option makes ``datacenter`` as an optional parameter. * :ref:`vmware_datastore_cluster ` accepts ``folder`` parameter to place datastore cluster in user defined folder. This option makes ``datacenter`` as an optional parameter. * :ref:`mysql_db ` returns new ``db_list`` parameter in addition to ``db`` parameter. This ``db_list`` parameter refers to list of database names. ``db`` parameter will be deprecated in version 2.13. * :ref:`snow_record ` and :ref:`snow_record_find ` now takes environment variables for ``instance``, ``username`` and ``password`` parameters. This change marks these parameters as optional. * The deprecated ``force`` option in ``win_firewall_rule`` has been removed. * :ref:`openssl_certificate `'s ``ownca`` provider creates authority key identifiers if not explicitly disabled with ``ownca_create_authority_key_identifier: no``. This is only the case for the ``cryptography`` backend, which is selected by default if the ``cryptography`` library is available. * :ref:`openssl_certificate `'s ``ownca`` and ``selfsigned`` providers create subject key identifiers if not explicitly disabled with ``ownca_create_subject_key_identifier: never_create`` resp. ``selfsigned_create_subject_key_identifier: never_create``. If a subject key identifier is provided by the CSR, it is taken; if not, it is created from the public key. This is only the case for the ``cryptography`` backend, which is selected by default if the ``cryptography`` library is available. * :ref:`openssh_keypair ` now applies the same file permissions and ownership to both public and private keys (both get the same ``mode``, ``owner``, ``group``, and so on). If you need to change permissions / ownership on one key, use the :ref:`file ` to modify it after it is created. Plugins ======= Removed Lookup Plugins ---------------------- * ``redis_kv`` use :ref:`redis ` instead. Porting custom scripts ====================== No notable changes Networking ========== Network resource modules ------------------------ Ansible 2.9 introduced the first batch of network resource modules. Sections of a network device's configuration can be thought of as a resource provided by that device. Network resource modules are intentionally scoped to configure a single resource and you can combine them as building blocks to configure complex network services. The older modules are deprecated in Ansible 2.9 and will be removed in Ansible 2.13. You should scan the list of deprecated modules above and replace them with the new network resource modules in your playbooks. See `Ansible Network Features in 2.9 `_ for details. Improved ``gather_facts`` support for network devices ----------------------------------------------------- In Ansible 2.9, the ``gather_facts`` keyword now supports gathering network device facts in standardized key/value pairs. You can feed these network facts into further tasks to manage the network device. You can also use the new ``gather_network_resources`` parameter with the network ``*_facts`` modules (such as :ref:`eos_facts `) to return just a subset of the device configuration. See :ref:`network_gather_facts` for an example. Top-level connection arguments removed in 2.9 --------------------------------------------- Top-level connection arguments like ``username``, ``host``, and ``password`` are removed in version 2.9. **OLD** In Ansible < 2.4 .. code-block:: yaml - name: example of using top-level options for connection properties ios_command: commands: show version host: "{{ inventory_hostname }}" username: cisco password: cisco authorize: yes auth_pass: cisco Change your playbooks to the connection types ``network_cli`` and ``netconf`` using standard Ansible connection properties, and setting those properties in inventory by group. As you update your playbooks and inventory files, you can easily make the change to ``become`` for privilege escalation (on platforms that support it). For more information, see the :ref:`using become with network modules` guide and the :ref:`platform documentation`. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_3.rst0000644000000000000000000000101100000000000026116 0ustar00rootroot00000000000000:orphan: .. _porting_3_guide: ======================= Ansible 3 Porting Guide ======================= Ansible Porting Guides are maintained in the ``devel`` branch only. See `the devel Ansible 4 Porting guide `_ for up to date information. .. note:: This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_4.rst0000644000000000000000000000101100000000000026117 0ustar00rootroot00000000000000:orphan: .. _porting_4_guide: ======================= Ansible 4 Porting Guide ======================= Ansible Porting Guides are maintained in the ``devel`` branch only. See `the devel Ansible 4 Porting guide `_ for up to date information. .. note:: This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_base_2.10.rst0000644000000000000000000001424600000000000027344 0ustar00rootroot00000000000000 .. _porting_2.10_guide_base: ******************************* Ansible-base 2.10 Porting Guide ******************************* .. warning:: In preparation for the release of 2.10, many plugins and modules have migrated to Collections on `Ansible Galaxy `_. For the current development status of Collections and FAQ see `Ansible Collections Community Guide `_. We expect the 2.10 Porting Guide to change frequently up to the 2.10 release. Follow the conversations about collections on our various :ref:`communication` channels for the latest information on the status of the ``devel`` branch. This section discusses the behavioral changes between Ansible 2.9 and Ansible-base 2.10. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible-base. We suggest you read this page along with the `Ansible-base Changelog for 2.10 `_ to understand what updates you may need to make. Ansible-base is mainly of interest for developers and users who only want to use a small, controlled subset of the available collections. Regular users should install ansible. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Playbook ======== * Fixed a bug on boolean keywords that made random strings return 'False', now they should return an error if they are not a proper boolean Example: ``diff: yes-`` was returning ``False``. * A new fact, ``ansible_processor_nproc`` reflects the number of vcpus available to processes (falls back to the number of vcpus available to the scheduler). Command Line ============ * The ``ansible-galaxy login`` command has been removed, as the underlying API it used for GitHub auth is being shut down. Publishing roles or collections to Galaxy via ``ansible-galaxy`` now requires that a Galaxy API token be passed to the CLI via a token file (default location ``~/.ansible/galaxy_token``) or (insecurely) via the ``--token`` argument to ``ansible-galaxy``. Deprecated ========== * Windows Server 2008 and 2008 R2 will no longer be supported or tested in the next Ansible release, see :ref:`windows_faq_server2008`. Modules ======= .. warning:: Links on this page may not point to the most recent versions of modules. We will update them when we can. * Version 2.10.0 of ansible-base changed the default mode of file-based tasks to ``0o600 & ~umask`` when the user did not specify a ``mode`` parameter on file-based tasks. This was in response to a CVE report which we have reconsidered. As a result, the mode change has been reverted in 2.10.1, and mode will now default to ``0o666 & ~umask`` as in previous versions of Ansible. * If you changed any tasks to specify less restrictive permissions while using 2.10.0, those changes will be unnecessary (but will do no harm) in 2.10.1. * To avoid the issue raised in CVE-2020-1736, specify a ``mode`` parameter in all file-based tasks that accept it. * ``dnf`` and ``yum`` - As of version 2.10.1, the ``dnf`` module (and ``yum`` action when it uses ``dnf``) now correctly validates GPG signatures of packages (CVE-2020-14365). If you see an error such as ``Failed to validate GPG signature for [package name]``, please ensure that you have imported the correct GPG key for the DNF repository and/or package you are using. One way to do this is with the ``rpm_key`` module. Although we discourage it, in some cases it may be necessary to disable the GPG check. This can be done by explicitly adding ``disable_gpg_check: yes`` in your ``dnf`` or ``yum`` task. Noteworthy module changes ------------------------- * Ansible modules created with ``add_file_common_args=True`` added a number of undocumented arguments which were mostly there to ease implementing certain action plugins. The undocumented arguments ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode`` are now no longer added. Modules relying on these options to be added need to specify them by themselves. * Ansible no longer looks for Python modules in the current working directory (typically the ``remote_user``'s home directory) when an Ansible module is run. This is to fix becoming an unprivileged user on OpenBSD and to mitigate any attack vector if the current working directory is writable by a malicious user. Install any Python modules needed to run the Ansible modules on the managed node in a system-wide location or in another directory which is in the ``remote_user``'s ``$PYTHONPATH`` and readable by the ``become_user``. Plugins ======= Lookup plugin names case-sensitivity ------------------------------------ * Prior to Ansible ``2.10`` lookup plugin names passed in as an argument to the ``lookup()`` function were treated as case-insensitive as opposed to lookups invoked via ``with_``. ``2.10`` brings consistency to ``lookup()`` and ``with_`` to be both case-sensitive. Noteworthy plugin changes ------------------------- * Cache plugins in collections can be used to cache data from inventory plugins. Previously, cache plugins in collections could only be used for fact caching. * Some undocumented arguments from ``FILE_COMMON_ARGUMENTS`` have been removed; plugins using these, in particular action plugins, need to be adjusted. The undocumented arguments which were removed are ``src``, ``follow``, ``force``, ``content``, ``backup``, ``remote_src``, ``regexp``, ``delimiter``, and ``directory_mode``. Action plugins which execute modules should use fully-qualified module names ---------------------------------------------------------------------------- * Action plugins that call modules should pass explicit, fully-qualified module names to ``_execute_module()`` whenever possible (eg, ``ansible.builtin.file`` rather than ``file``). This ensures that the task's collection search order is not consulted to resolve the module. Otherwise, a module from a collection earlier in the search path could be used when not intended. Porting custom scripts ====================== No notable changes ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_core_2.11.rst0000644000000000000000000002170300000000000027357 0ustar00rootroot00000000000000 .. _porting_2.11_guide_core: ******************************* Ansible-core 2.11 Porting Guide ******************************* This section discusses the behavioral changes between ``ansible-base`` 2.10 and ``ansible-core`` 2.11. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they work with this version of ``ansible-core``. We suggest you read this page along with the `ansible-core Changelog for 2.11 `_ to understand what updates you may need to make. ``ansible-core`` is mainly of interest for developers and users who only want to use a small, controlled subset of the available collections. Regular users should install Ansible. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Playbook ======== * The ``jinja2_native`` setting now does not affect the template module which implicitly returns strings. For the template lookup there is a new argument ``jinja2_native`` (off by default) to control that functionality. The rest of the Jinja2 expressions still operate based on the ``jinja2_native`` setting. Command Line ============ * The ``ansible-galaxy login`` command has been removed, as the underlying API it used for GitHub auth has been shut down. Publishing roles or collections to Galaxy with ``ansible-galaxy`` now requires that a Galaxy API token be passed to the CLI using a token file (default location ``~/.ansible/galaxy_token``) or (insecurely) with the ``--token`` argument to ``ansible-galaxy``. Deprecated ========== The constant ``ansible.module_utils.basic._CHECK_ARGUMENT_TYPES_DISPATCHER`` is deprecated. Use :const:`ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS` instead. Breaking Changes ================ Changes to ``AnsibleModule`` ---------------------------- With the move to :class:`ArgumentSpecValidator ` for performing argument spec validation, the following private methods in :class:`AnsibleModule ` have been removed: - ``_check_argument_types()`` - ``_check_argument_values()`` - ``_check_arguments()`` - ``_check_mutually_exclusive()`` --> :func:`ansible.module_utils.common.validation.check_mutually_exclusive` - ``_check_required_arguments()`` --> :func:`ansible.module_utils.common.validation.check_required_arguments` - ``_check_required_by()`` --> :func:`ansible.module_utils.common.validation.check_required_by` - ``_check_required_if()`` --> :func:`ansible.module_utils.common.validation.check_required_if` - ``_check_required_one_of()`` --> :func:`ansible.module_utils.common.validation.check_required_one_of` - ``_check_required_together()`` --> :func:`ansible.module_utils.common.validation.check_required_together` - ``_check_type_bits()`` --> :func:`ansible.module_utils.common.validation.check_type_bits` - ``_check_type_bool()`` --> :func:`ansible.module_utils.common.validation.check_type_bool` - ``_check_type_bytes()`` --> :func:`ansible.module_utils.common.validation.check_type_bytes` - ``_check_type_dict()`` --> :func:`ansible.module_utils.common.validation.check_type_dict` - ``_check_type_float()`` --> :func:`ansible.module_utils.common.validation.check_type_float` - ``_check_type_int()`` --> :func:`ansible.module_utils.common.validation.check_type_int` - ``_check_type_jsonarg()`` --> :func:`ansible.module_utils.common.validation.check_type_jsonarg` - ``_check_type_list()`` --> :func:`ansible.module_utils.common.validation.check_type_list` - ``_check_type_path()`` --> :func:`ansible.module_utils.common.validation.check_type_path` - ``_check_type_raw()`` --> :func:`ansible.module_utils.common.validation.check_type_raw` - ``_check_type_str()`` --> :func:`ansible.module_utils.common.validation.check_type_str` - ``_count_terms()`` --> :func:`ansible.module_utils.common.validation.count_terms` - ``_get_wanted_type()`` - ``_handle_aliases()`` - ``_handle_no_log_values()`` - ``_handle_options()`` - ``_set_defaults()`` - ``_set_fallbacks()`` Modules or plugins using these private methods should use the public functions in :mod:`ansible.module_utils.common.validation` or :meth:`ArgumentSpecValidator.validate() ` if no public function was listed above. Changes to :mod:`ansible.module_utils.common.parameters` -------------------------------------------------------- The following functions in :mod:`ansible.module_utils.common.parameters` are now private and should not be used directly. Use :meth:`ArgumentSpecValidator.validate() ` instead. - ``list_no_log_values`` - ``list_deprecations`` - ``handle_aliases`` Other ====== * **Upgrading**: If upgrading from ``ansible < 2.10`` or from ``ansible-base`` and using pip, you must ``pip uninstall ansible`` or ``pip uninstall ansible-base`` before installing ``ansible-core`` to avoid conflicts. * Python 3.8 on the controller node is a soft requirement for this release. ``ansible-core`` 2.11 still works with the same versions of Python that ``ansible-base`` 2.10 worked with, however 2.11 emits a warning when running on a controller node with a Python version less than 3.8. This warning can be disabled by setting ``ANSIBLE_CONTROLLER_PYTHON_WARNING=False`` in your environment. ``ansible-core`` 2.12 will require Python 3.8 or greater. * The configuration system now validates the ``choices`` field, so any settings that violate it and were ignored in 2.10 cause an error in 2.11. For example, ``ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0`` now causes an error (valid choices are ``ignore``, ``warn`` or ``error``). * The ``ansible-galaxy`` command now uses ``resolvelib`` for resolving dependencies. In most cases this should not make a user-facing difference beyond being more performant, but we note it here for posterity and completeness. * If you import Python ``module_utils`` into any modules you maintain, you may now mark the import as optional during the module payload build by wrapping the ``import`` statement in a ``try`` or ``if`` block. This allows modules to use ``module_utils`` that may not be present in all versions of Ansible or a collection, and to perform arbitrary recovery or fallback actions during module runtime. Modules ======= * The ``apt_key`` module has explicitly defined ``file`` as mutually exclusive with ``data``, ``keyserver`` and ``url``. They cannot be used together anymore. * The ``meta`` module now supports tags for user-defined tasks. Set the task's tags to 'always' to maintain the previous behavior. Internal ``meta`` tasks continue to always run. Modules removed --------------- The following modules no longer exist: * No notable changes Deprecation notices ------------------- No notable changes Noteworthy module changes ------------------------- * facts - On NetBSD, ``ansible_virtualization_type`` now tries to report a more accurate result than ``xen`` when virtualized and not running on Xen. * facts - Virtualization facts now include ``virtualization_tech_guest`` and ``virtualization_tech_host`` keys. These are lists of virtualization technologies that a guest is a part of, or that a host provides, respectively. As an example, if you set up a host to provide both KVM and VirtualBox, both values are included in ``virtualization_tech_host``. Similarly, a podman container running on a VM powered by KVM has a ``virtualization_tech_guest`` of ``["kvm", "podman", "container"]``. * The parameter ``filter`` type is changed from ``string`` to ``list`` in the :ref:`setup ` module in order to use more than one filter. Previous behavior (using a ``string``) still remains and works as a single filter. Plugins ======= * inventory plugins - ``CachePluginAdjudicator.flush()`` now calls the underlying cache plugin's ``flush()`` instead of only deleting keys that it knows about. Inventory plugins should use ``delete()`` to remove any specific keys. As a user, this means that when an inventory plugin calls its ``clear_cache()`` method, facts could also be flushed from the cache. To work around this, users can configure inventory plugins to use a cache backend that is independent of the facts cache. * callback plugins - ``meta`` task execution is now sent to ``v2_playbook_on_task_start`` like any other task. By default, only explicit meta tasks are sent there. Callback plugins can opt-in to receiving internal, implicitly created tasks to act on those as well, as noted in the plugin development documentation. * The ``choices`` are now validated, so plugins that were using incorrect or incomplete choices issue an error in 2.11 if the value provided does not match. This has a simple fix: update the entries in ``choices`` to match reality. Porting custom scripts ====================== No notable changes ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guide_core_2.12.rst0000644000000000000000000001154600000000000027364 0ustar00rootroot00000000000000 .. _porting_2.12_guide_core: ******************************* Ansible-core 2.12 Porting Guide ******************************* This section discusses the behavioral changes between ``ansible-core`` 2.11 and ``ansible-core`` 2.12. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `ansible-core Changelog for 2.12 `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== * When calling tasks and setting ``async``, setting ``ANSIBLE_ASYNC_DIR`` under ``environment:`` is no longer valid. Instead, use the shell configuration variable ``async_dir``, for example by setting ``ansible_async_dir``: .. code-block:: yaml tasks: - dnf: name: '*' state: latest async: 300 poll: 5 vars: ansible_async_dir: /path/to/my/custom/dir Python Interpreter Discovery ============================ The default value of ``INTERPRETER_PYTHON_FALLBACK`` changed to ``auto``. The list of Python interpreters in ``INTERPRETER_PYTHON_FALLBACK`` changed to prefer Python 3 over Python 2. The combination of these two changes means the new default behavior is to quietly prefer Python 3 over Python 2 on remote hosts. Previously a deprecation warning was issued in situations where interpreter discovery would have used Python 3 but the interpreter was set to ``/usr/bin/python``. ``INTERPRETER_PYTHON_FALLBACK`` can be changed from the default list of interpreters by setting the ``ansible_interpreter_python_fallback`` variable. See :ref:`interpreter discovery documentation ` for more details. Command Line ============ * Python 3.8 on the controller node is a hard requirement for this release. The command line scripts will not function with a lower Python version. * ``ansible-vault`` no longer supports ``PyCrypto`` and requires ``cryptography``. Deprecated ========== * Python 2.6 on the target node is deprecated in this release. ``ansible-core`` 2.13 will remove support for Python 2.6. * Bare variables in conditionals: ``when`` conditionals no longer automatically parse string booleans such as ``"true"`` and ``"false"`` into actual booleans. Any variable containing a non-empty string is considered true. This was previously configurable with the ``CONDITIONAL_BARE_VARS`` configuration option (and the ``ANSIBLE_CONDITIONAL_BARE_VARS`` environment variable). This setting no longer has any effect. Users can work around the issue by using the ``|bool`` filter: .. code-block:: yaml vars: teardown: 'false' tasks: - include_tasks: teardown.yml when: teardown | bool - include_tasks: provision.yml when: not teardown | bool * The ``_remote_checksum()`` method in ``ActionBase`` is deprecated. Any action plugin using this method should use ``_execute_remote_stat()`` instead. Modules ======= * ``cron`` now requires ``name`` to be specified in all cases. * ``cron`` no longer allows a ``reboot`` parameter. Use ``special_time: reboot`` instead. * ``hostname`` - On FreeBSD, the ``before`` result will no longer be ``"temporarystub"`` if permanent hostname file does not exist. It will instead be ``""`` (empty string) for consistency with other systems. * ``hostname`` - On OpenRC and Solaris based systems, the ``before`` result will no longer be ``"UNKNOWN"`` if the permanent hostname file does not exist. It will instead be ``""`` (empty string) for consistency with other systems. * ``pip`` now uses the ``pip`` Python module installed for the Ansible module's Python interpreter, if available, unless ``executable`` or ``virtualenv`` were specified. Modules removed --------------- The following modules no longer exist: * No notable changes Deprecation notices ------------------- No notable changes Noteworthy module changes ------------------------- No notable changes Plugins ======= * ``unique`` filter with Jinja2 < 2.10 is case-sensitive and now raise coherently an error if ``case_sensitive=False`` instead of when ``case_sensitive=True``. * Set theory filters (``intersect``, ``difference``, ``symmetric_difference`` and ``union``) are now case-sensitive. Explicitly use ``case_sensitive=False`` to keep previous behavior. Note: with Jinja2 < 2.10, the filters were already case-sensitive by default. * ``password_hash``` now uses ``passlib`` defaults when an option is unspecified, e.g. ``bcrypt_sha256`` now default to the "2b" format and if the "2a" format is required it must be specified. Porting custom scripts ====================== No notable changes Networking ========== No notable changes ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/porting_guides/porting_guides.rst0000644000000000000000000000045700000000000026074 0ustar00rootroot00000000000000.. _porting_guides: ********************** Ansible Porting Guides ********************** Ansible Porting Guides are maintained in the ``devel`` branch only. See `the devel Ansible Porting guides `_ for up to date information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.954559 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/0000755000000000000000000000000000000000000023421 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/.rstcheck.cfg0000644000000000000000000000006200000000000025764 0ustar00rootroot00000000000000[rstcheck] ignore_directives=autoclass,automodule ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/YAMLSyntax.rst0000644000000000000000000001730400000000000026131 0ustar00rootroot00000000000000.. _yaml_syntax: YAML Syntax =========== This page provides a basic overview of correct YAML syntax, which is how Ansible playbooks (our configuration management language) are expressed. We use YAML because it is easier for humans to read and write than other common data formats like XML or JSON. Further, there are libraries available in most programming languages for working with YAML. You may also wish to read :ref:`working_with_playbooks` at the same time to see how this is used in practice. YAML Basics ----------- For Ansible, nearly every YAML file starts with a list. Each item in the list is a list of key/value pairs, commonly called a "hash" or a "dictionary". So, we need to know how to write lists and dictionaries in YAML. There's another small quirk to YAML. All YAML files (regardless of their association with Ansible or not) can optionally begin with ``---`` and end with ``...``. This is part of the YAML format and indicates the start and end of a document. All members of a list are lines beginning at the same indentation level starting with a ``"- "`` (a dash and a space):: --- # A list of tasty fruits - Apple - Orange - Strawberry - Mango ... A dictionary is represented in a simple ``key: value`` form (the colon must be followed by a space):: # An employee record martin: name: Martin D'vloper job: Developer skill: Elite More complicated data structures are possible, such as lists of dictionaries, dictionaries whose values are lists or a mix of both:: # Employee records - martin: name: Martin D'vloper job: Developer skills: - python - perl - pascal - tabitha: name: Tabitha Bitumen job: Developer skills: - lisp - fortran - erlang Dictionaries and lists can also be represented in an abbreviated form if you really want to:: --- martin: {name: Martin D'vloper, job: Developer, skill: Elite} fruits: ['Apple', 'Orange', 'Strawberry', 'Mango'] These are called "Flow collections". .. _truthiness: Ansible doesn't really use these too much, but you can also specify a boolean value (true/false) in several forms:: create_key: yes needs_agent: no knows_oop: True likes_emacs: TRUE uses_cvs: false Use lowercase 'true' or 'false' for boolean values in dictionaries if you want to be compatible with default yamllint options. Values can span multiple lines using ``|`` or ``>``. Spanning multiple lines using a "Literal Block Scalar" ``|`` will include the newlines and any trailing spaces. Using a "Folded Block Scalar" ``>`` will fold newlines to spaces; it's used to make what would otherwise be a very long line easier to read and edit. In either case the indentation will be ignored. Examples are:: include_newlines: | exactly as you see will appear these three lines of poetry fold_newlines: > this is really a single line of text despite appearances While in the above ``>`` example all newlines are folded into spaces, there are two ways to enforce a newline to be kept:: fold_some_newlines: > a b c d e f Alternatively, it can be enforced by including newline ``\n`` characters:: fold_same_newlines: "a b\nc d\n e\nf\n" Let's combine what we learned so far in an arbitrary YAML example. This really has nothing to do with Ansible, but will give you a feel for the format:: --- # An employee record name: Martin D'vloper job: Developer skill: Elite employed: True foods: - Apple - Orange - Strawberry - Mango languages: perl: Elite python: Elite pascal: Lame education: | 4 GCSEs 3 A-Levels BSc in the Internet of Things That's all you really need to know about YAML to start writing `Ansible` playbooks. Gotchas ------- While you can put just about anything into an unquoted scalar, there are some exceptions. A colon followed by a space (or newline) ``": "`` is an indicator for a mapping. A space followed by the pound sign ``" #"`` starts a comment. Because of this, the following is going to result in a YAML syntax error:: foo: somebody said I should put a colon here: so I did windows_drive: c: ...but this will work:: windows_path: c:\windows You will want to quote hash values using colons followed by a space or the end of the line:: foo: 'somebody said I should put a colon here: so I did' windows_drive: 'c:' ...and then the colon will be preserved. Alternatively, you can use double quotes:: foo: "somebody said I should put a colon here: so I did" windows_drive: "c:" The difference between single quotes and double quotes is that in double quotes you can use escapes:: foo: "a \t TAB and a \n NEWLINE" The list of allowed escapes can be found in the YAML Specification under "Escape Sequences" (YAML 1.1) or "Escape Characters" (YAML 1.2). The following is invalid YAML: .. code-block:: text foo: "an escaped \' single quote" Further, Ansible uses "{{ var }}" for variables. If a value after a colon starts with a "{", YAML will think it is a dictionary, so you must quote it, like so:: foo: "{{ variable }}" If your value starts with a quote the entire value must be quoted, not just part of it. Here are some additional examples of how to properly quote things:: foo: "{{ variable }}/additional/string/literal" foo2: "{{ variable }}\\backslashes\\are\\also\\special\\characters" foo3: "even if it's just a string literal it must all be quoted" Not valid:: foo: "E:\\path\\"rest\\of\\path In addition to ``'`` and ``"`` there are a number of characters that are special (or reserved) and cannot be used as the first character of an unquoted scalar: ``[] {} > | * & ! % # ` @ ,``. You should also be aware of ``? : -``. In YAML, they are allowed at the beginning of a string if a non-space character follows, but YAML processor implementations differ, so it's better to use quotes. In Flow Collections, the rules are a bit more strict:: a scalar in block mapping: this } is [ all , valid flow mapping: { key: "you { should [ use , quotes here" } Boolean conversion is helpful, but this can be a problem when you want a literal `yes` or other boolean values as a string. In these cases just use quotes:: non_boolean: "yes" other_string: "False" YAML converts certain strings into floating-point values, such as the string `1.0`. If you need to specify a version number (in a requirements.yml file, for example), you will need to quote the value if it looks like a floating-point value:: version: "1.0" .. seealso:: :ref:`working_with_playbooks` Learn what playbooks can do and how to write/run them. `YAMLLint `_ YAML Lint (online) helps you debug YAML syntax if you are having problems `GitHub examples directory `_ Complete playbook files from the github project source `Wikipedia YAML syntax reference `_ A good guide to YAML syntax `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels (join #yaml for yaml-specific questions) `YAML 1.1 Specification `_ The Specification for YAML 1.1, which PyYAML and libyaml are currently implementing `YAML 1.2 Specification `_ For completeness, YAML 1.2 is the successor of 1.1 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.510556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/automationhub.rst0000644000000000000000000000171100000000000027032 0ustar00rootroot00000000000000.. _automation_hub: Ansible Automation Hub ====================== `Ansible Automation Hub `_ is the official location to discover and download supported :ref:`collections `, included as part of an Ansible Automation Platform subscription. These content collections contain modules, plugins, roles, and playbooks in a downloadable package. Ansible Automation Hub gives you direct access to trusted content collections from Red Hat and Certified Partners. You can find content by topic or Ansible Partner organizations. Ansible Automation Hub is the downstream Red Hat supported product version of Ansible Galaxy. Find out more about Ansible Automation Hub features and how to access it at `Ansible Automation Hub `_. Ansible Automation Hub is part of the Red Hat Ansible Automation Platform subscription, and comes bundled with support from Red Hat, Inc. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/common_return_values.rst0000644000000000000000000001724700000000000030434 0ustar00rootroot00000000000000.. _common_return_values: Return Values ------------- .. contents:: Topics Ansible modules normally return a data structure that can be registered into a variable, or seen directly when output by the `ansible` program. Each module can optionally document its own unique return values (visible through ansible-doc and on the :ref:`main docsite`). This document covers return values common to all modules. .. note:: Some of these keys might be set by Ansible itself once it processes the module's return information. Common ^^^^^^ backup_file ``````````` For those modules that implement `backup=no|yes` when manipulating files, a path to the backup file created. .. code-block:: console "backup_file": "./foo.txt.32729.2020-07-30@06:24:19~" changed ``````` A boolean indicating if the task had to make changes to the target or delegated host. .. code-block:: console "changed": true diff ```` Information on differences between the previous and current state. Often a dictionary with entries ``before`` and ``after``, which will then be formatted by the callback plugin to a diff view. .. code-block:: console "diff": [ { "after": "", "after_header": "foo.txt (content)", "before": "", "before_header": "foo.txt (content)" }, { "after_header": "foo.txt (file attributes)", "before_header": "foo.txt (file attributes)" } failed `````` A boolean that indicates if the task was failed or not. .. code-block:: console "failed": false invocation `````````` Information on how the module was invoked. .. code-block:: console "invocation": { "module_args": { "_original_basename": "foo.txt", "attributes": null, "backup": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "content": null, "delimiter": null, "dest": "./foo.txt", "directory_mode": null, "follow": false, "force": true, "group": null, "local_follow": null, "mode": "666", "owner": null, "regexp": null, "remote_src": null, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": "/Users/foo/.ansible/tmp/ansible-tmp-1596115458.110205-105717464505158/source", "unsafe_writes": null, "validate": null } msg ``` A string with a generic message relayed to the user. .. code-block:: console "msg": "line added" rc `` Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on), this field contains 'return code' of these utilities. .. code-block:: console "rc": 257 results ``````` If this key exists, it indicates that a loop was present for the task and that it contains a list of the normal module 'result' per item. .. code-block:: console "results": [ { "ansible_loop_var": "item", "backup": "foo.txt.83170.2020-07-30@07:03:05~", "changed": true, "diff": [ { "after": "", "after_header": "foo.txt (content)", "before": "", "before_header": "foo.txt (content)" }, { "after_header": "foo.txt (file attributes)", "before_header": "foo.txt (file attributes)" } ], "failed": false, "invocation": { "module_args": { "attributes": null, "backrefs": false, "backup": true } }, "item": "foo", "msg": "line added" }, { "ansible_loop_var": "item", "backup": "foo.txt.83187.2020-07-30@07:03:05~", "changed": true, "diff": [ { "after": "", "after_header": "foo.txt (content)", "before": "", "before_header": "foo.txt (content)" }, { "after_header": "foo.txt (file attributes)", "before_header": "foo.txt (file attributes)" } ], "failed": false, "invocation": { "module_args": { "attributes": null, "backrefs": false, "backup": true } }, "item": "bar", "msg": "line added" } ] skipped ``````` A boolean that indicates if the task was skipped or not .. code-block:: console "skipped": true stderr `````` Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on), this field contains the error output of these utilities. .. code-block:: console "stderr": "ls: foo: No such file or directory" stderr_lines ```````````` When `stderr` is returned we also always provide this field which is a list of strings, one item per line from the original. .. code-block:: console "stderr_lines": [ "ls: doesntexist: No such file or directory" ] stdout `````` Some modules execute command line utilities or are geared for executing commands directly (raw, shell, command, and so on). This field contains the normal output of these utilities. .. code-block:: console "stdout": "foo!" stdout_lines ```````````` When `stdout` is returned, Ansible always provides a list of strings, each containing one item per line from the original output. .. code-block:: console "stdout_lines": [ "foo!" ] .. _internal_return_values: Internal use ^^^^^^^^^^^^ These keys can be added by modules but will be removed from registered variables; they are 'consumed' by Ansible itself. ansible_facts ````````````` This key should contain a dictionary which will be appended to the facts assigned to the host. These will be directly accessible and don't require using a registered variable. exception ````````` This key can contain traceback information caused by an exception in a module. It will only be displayed on high verbosity (-vvv). warnings ```````` This key contains a list of strings that will be presented to the user. deprecations ```````````` This key contains a list of dictionaries that will be presented to the user. Keys of the dictionaries are `msg` and `version`, values are string, value for the `version` key can be an empty string. .. seealso:: :ref:`list_of_collections` Browse existing collections, modules, and plugins `GitHub modules directory `_ Browse source of core and extras modules `Mailing List `_ Development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/faq.rst0000644000000000000000000011026100000000000024723 0ustar00rootroot00000000000000.. _ansible_faq: Frequently Asked Questions ========================== Here are some commonly asked questions and their answers. .. _collections_transition: Where did all the modules go? +++++++++++++++++++++++++++++ In July, 2019, we announced that collections would be the `future of Ansible content delivery `_. A collection is a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. In Ansible 2.9 we added support for collections. In Ansible 2.10 we `extracted most modules from the main ansible/ansible repository `_ and placed them in :ref:`collections `. Collections may be maintained by the Ansible team, by the Ansible community, or by Ansible partners. The `ansible/ansible repository `_ now contains the code for basic features and functions, such as copying module code to managed nodes. This code is also known as ``ansible-core`` (it was briefly called ``ansible-base`` for version 2.10). * To learn more about using collections, see :ref:`collections`. * To learn more about developing collections, see :ref:`developing_collections`. * To learn more about contributing to existing collections, see the individual collection repository for guidelines, or see :ref:`contributing_maintained_collections` to contribute to one of the Ansible-maintained collections. .. _find_my_module: Where did this specific module go? ++++++++++++++++++++++++++++++++++ IF you are searching for a specific module, you can check the `runtime.yml `_ file, which lists the first destination for each module that we extracted from the main ansible/ansible repository. Some modules have moved again since then. You can also search on `Ansible Galaxy `_ or ask on one of our :ref:`chat channels `. .. _set_environment: How can I set the PATH or any other environment variable for a task or entire play? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Setting environment variables can be done with the `environment` keyword. It can be used at the task or other levels in the play. .. code-block:: yaml shell: cmd: date environment: LANG=fr_FR.UTF-8 .. code-block:: yaml hosts: servers environment: PATH: "{{ ansible_env.PATH }}:/thingy/bin" SOME: value .. note:: starting in 2.0.1 the setup task from ``gather_facts`` also inherits the environment directive from the play, you might need to use the ``|default`` filter to avoid errors if setting this at play level. .. _faq_setting_users_and_ports: How do I handle different machines needing different user accounts or ports to log in with? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Setting inventory variables in the inventory file is the easiest way. For instance, suppose these hosts have different usernames and ports: .. code-block:: ini [webservers] asdf.example.com ansible_port=5000 ansible_user=alice jkl.example.com ansible_port=5001 ansible_user=bob You can also dictate the connection type to be used, if you want: .. code-block:: ini [testcluster] localhost ansible_connection=local /path/to/chroot1 ansible_connection=chroot foo.example.com ansible_connection=paramiko You may also wish to keep these in group variables instead, or file them in a group_vars/ file. See the rest of the documentation for more information about how to organize variables. .. _use_ssh: How do I get ansible to reuse connections, enable Kerberized SSH, or have Ansible pay attention to my local SSH config file? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Switch your default connection type in the configuration file to ``ssh``, or use ``-c ssh`` to use Native OpenSSH for connections instead of the python paramiko library. In Ansible 1.2.1 and later, ``ssh`` will be used by default if OpenSSH is new enough to support ControlPersist as an option. Paramiko is great for starting out, but the OpenSSH type offers many advanced options. You will want to run Ansible from a machine new enough to support ControlPersist, if you are using this connection type. You can still manage older clients. If you are using RHEL 6, CentOS 6, SLES 10 or SLES 11 the version of OpenSSH is still a bit old, so consider managing from a Fedora or openSUSE client even though you are managing older nodes, or just use paramiko. We keep paramiko as the default as if you are first installing Ansible on these enterprise operating systems, it offers a better experience for new users. .. _use_ssh_jump_hosts: How do I configure a jump host to access servers that I have no direct access to? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ You can set a ``ProxyCommand`` in the ``ansible_ssh_common_args`` inventory variable. Any arguments specified in this variable are added to the sftp/scp/ssh command line when connecting to the relevant host(s). Consider the following inventory group: .. code-block:: ini [gatewayed] foo ansible_host=192.0.2.1 bar ansible_host=192.0.2.2 You can create `group_vars/gatewayed.yml` with the following contents:: ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q user@gateway.example.com"' Ansible will append these arguments to the command line when trying to connect to any hosts in the group ``gatewayed``. (These arguments are used in addition to any ``ssh_args`` from ``ansible.cfg``, so you do not need to repeat global ``ControlPersist`` settings in ``ansible_ssh_common_args``.) Note that ``ssh -W`` is available only with OpenSSH 5.4 or later. With older versions, it's necessary to execute ``nc %h:%p`` or some equivalent command on the bastion host. With earlier versions of Ansible, it was necessary to configure a suitable ``ProxyCommand`` for one or more hosts in ``~/.ssh/config``, or globally by setting ``ssh_args`` in ``ansible.cfg``. .. _ssh_serveraliveinterval: How do I get Ansible to notice a dead target in a timely manner? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ You can add ``-o ServerAliveInterval=NumberOfSeconds`` in ``ssh_args`` from ``ansible.cfg``. Without this option, SSH and therefore Ansible will wait until the TCP connection times out. Another solution is to add ``ServerAliveInterval`` into your global SSH configuration. A good value for ``ServerAliveInterval`` is up to you to decide; keep in mind that ``ServerAliveCountMax=3`` is the SSH default so any value you set will be tripled before terminating the SSH session. .. _cloud_provider_performance: How do I speed up run of ansible for servers from cloud providers (EC2, openstack,.. )? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Don't try to manage a fleet of machines of a cloud provider from your laptop. Rather connect to a management node inside this cloud provider first and run Ansible from there. .. _python_interpreters: How do I handle not having a Python interpreter at /usr/bin/python on a remote machine? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ While you can write Ansible modules in any language, most Ansible modules are written in Python, including the ones central to letting Ansible work. By default, Ansible assumes it can find a :command:`/usr/bin/python` on your remote system that is either Python2, version 2.6 or higher or Python3, 3.5 or higher. Setting the inventory variable ``ansible_python_interpreter`` on any host will tell Ansible to auto-replace the Python interpreter with that value instead. Thus, you can point to any Python you want on the system if :command:`/usr/bin/python` on your system does not point to a compatible Python interpreter. Some platforms may only have Python 3 installed by default. If it is not installed as :command:`/usr/bin/python`, you will need to configure the path to the interpreter via ``ansible_python_interpreter``. Although most core modules will work with Python 3, there may be some special purpose ones which do not or you may encounter a bug in an edge case. As a temporary workaround you can install Python 2 on the managed host and configure Ansible to use that Python via ``ansible_python_interpreter``. If there's no mention in the module's documentation that the module requires Python 2, you can also report a bug on our `bug tracker `_ so that the incompatibility can be fixed in a future release. Do not replace the shebang lines of your python modules. Ansible will do this for you automatically at deploy time. Also, this works for ANY interpreter, for example ruby: ``ansible_ruby_interpreter``, perl: ``ansible_perl_interpreter``, and so on, so you can use this for custom modules written in any scripting language and control the interpreter location. Keep in mind that if you put ``env`` in your module shebang line (``#!/usr/bin/env ``), this facility will be ignored so you will be at the mercy of the remote `$PATH`. .. _installation_faqs: How do I handle the package dependencies required by Ansible package dependencies during Ansible installation ? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ While installing Ansible, sometimes you may encounter errors such as `No package 'libffi' found` or `fatal error: Python.h: No such file or directory` These errors are generally caused by the missing packages, which are dependencies of the packages required by Ansible. For example, `libffi` package is dependency of `pynacl` and `paramiko` (Ansible -> paramiko -> pynacl -> libffi). In order to solve these kinds of dependency issues, you might need to install required packages using the OS native package managers, such as `yum`, `dnf`, or `apt`, or as mentioned in the package installation guide. Refer to the documentation of the respective package for such dependencies and their installation methods. Common Platform Issues ++++++++++++++++++++++ What customer platforms does Red Hat support? --------------------------------------------- A number of them! For a definitive list please see this `Knowledge Base article `_. Running in a virtualenv ----------------------- You can install Ansible into a virtualenv on the controller quite simply: .. code-block:: shell $ virtualenv ansible $ source ./ansible/bin/activate $ pip install ansible If you want to run under Python 3 instead of Python 2 you may want to change that slightly: .. code-block:: shell $ virtualenv -p python3 ansible $ source ./ansible/bin/activate $ pip install ansible If you need to use any libraries which are not available via pip (for instance, SELinux Python bindings on systems such as Red Hat Enterprise Linux or Fedora that have SELinux enabled), then you need to install them into the virtualenv. There are two methods: * When you create the virtualenv, specify ``--system-site-packages`` to make use of any libraries installed in the system's Python: .. code-block:: shell $ virtualenv ansible --system-site-packages * Copy those files in manually from the system. For instance, for SELinux bindings you might do: .. code-block:: shell $ virtualenv ansible --system-site-packages $ cp -r -v /usr/lib64/python3.*/site-packages/selinux/ ./py3-ansible/lib64/python3.*/site-packages/ $ cp -v /usr/lib64/python3.*/site-packages/*selinux*.so ./py3-ansible/lib64/python3.*/site-packages/ Running on BSD -------------- .. seealso:: :ref:`working_with_bsd` Running on Solaris ------------------ By default, Solaris 10 and earlier run a non-POSIX shell which does not correctly expand the default tmp directory Ansible uses ( :file:`~/.ansible/tmp`). If you see module failures on Solaris machines, this is likely the problem. There are several workarounds: * You can set ``remote_tmp`` to a path that will expand correctly with the shell you are using (see the plugin documentation for :ref:`C shell`, :ref:`fish shell`, and :ref:`Powershell`). For example, in the ansible config file you can set:: remote_tmp=$HOME/.ansible/tmp In Ansible 2.5 and later, you can also set it per-host in inventory like this:: solaris1 ansible_remote_tmp=$HOME/.ansible/tmp * You can set :ref:`ansible_shell_executable` to the path to a POSIX compatible shell. For instance, many Solaris hosts have a POSIX shell located at :file:`/usr/xpg4/bin/sh` so you can set this in inventory like so:: solaris1 ansible_shell_executable=/usr/xpg4/bin/sh (bash, ksh, and zsh should also be POSIX compatible if you have any of those installed). Running on z/OS --------------- There are a few common errors that one might run into when trying to execute Ansible on z/OS as a target. * Version 2.7.6 of python for z/OS will not work with Ansible because it represents strings internally as EBCDIC. To get around this limitation, download and install a later version of `python for z/OS `_ (2.7.13 or 3.6.1) that represents strings internally as ASCII. Version 2.7.13 is verified to work. * When ``pipelining = False`` in `/etc/ansible/ansible.cfg` then Ansible modules are transferred in binary mode via sftp however execution of python fails with .. error:: SyntaxError: Non-UTF-8 code starting with \'\\x83\' in file /a/user1/.ansible/tmp/ansible-tmp-1548232945.35-274513842609025/AnsiballZ_stat.py on line 1, but no encoding declared; see https://python.org/dev/peps/pep-0263/ for details To fix it set ``pipelining = True`` in `/etc/ansible/ansible.cfg`. * Python interpret cannot be found in default location ``/usr/bin/python`` on target host. .. error:: /usr/bin/python: EDC5129I No such file or directory To fix this set the path to the python installation in your inventory like so:: zos1 ansible_python_interpreter=/usr/lpp/python/python-2017-04-12-py27/python27/bin/python * Start of python fails with ``The module libpython2.7.so was not found.`` .. error:: EE3501S The module libpython2.7.so was not found. On z/OS, you must execute python from gnu bash. If gnu bash is installed at ``/usr/lpp/bash``, you can fix this in your inventory by specifying an ``ansible_shell_executable``:: zos1 ansible_shell_executable=/usr/lpp/bash/bin/bash Running under fakeroot ---------------------- Some issues arise as ``fakeroot`` does not create a full nor POSIX compliant system by default. It is known that it will not correctly expand the default tmp directory Ansible uses (:file:`~/.ansible/tmp`). If you see module failures, this is likely the problem. The simple workaround is to set ``remote_tmp`` to a path that will expand correctly (see documentation of the shell plugin you are using for specifics). For example, in the ansible config file (or via environment variable) you can set:: remote_tmp=$HOME/.ansible/tmp .. _use_roles: What is the best way to make content reusable/redistributable? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ If you have not done so already, read all about "Roles" in the playbooks documentation. This helps you make playbook content self-contained, and works well with things like git submodules for sharing content with others. If some of these plugin types look strange to you, see the API documentation for more details about ways Ansible can be extended. .. _configuration_file: Where does the configuration file live and what can I configure in it? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ See :ref:`intro_configuration`. .. _who_would_ever_want_to_disable_cowsay_but_ok_here_is_how: How do I disable cowsay? ++++++++++++++++++++++++ If cowsay is installed, Ansible takes it upon itself to make your day happier when running playbooks. If you decide that you would like to work in a professional cow-free environment, you can either uninstall cowsay, set ``nocows=1`` in ``ansible.cfg``, or set the :envvar:`ANSIBLE_NOCOWS` environment variable: .. code-block:: shell-session export ANSIBLE_NOCOWS=1 .. _browse_facts: How do I see a list of all of the ansible\_ variables? ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Ansible by default gathers "facts" about the machines under management, and these facts can be accessed in playbooks and in templates. To see a list of all of the facts that are available about a machine, you can run the ``setup`` module as an ad hoc action: .. code-block:: shell-session ansible -m setup hostname This will print out a dictionary of all of the facts that are available for that particular host. You might want to pipe the output to a pager.This does NOT include inventory variables or internal 'magic' variables. See the next question if you need more than just 'facts'. .. _browse_inventory_vars: How do I see all the inventory variables defined for my host? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ By running the following command, you can see inventory variables for a host: .. code-block:: shell-session ansible-inventory --list --yaml .. _browse_host_vars: How do I see all the variables specific to my host? +++++++++++++++++++++++++++++++++++++++++++++++++++ To see all host specific variables, which might include facts and other sources: .. code-block:: shell-session ansible -m debug -a "var=hostvars['hostname']" localhost Unless you are using a fact cache, you normally need to use a play that gathers facts first, for facts included in the task above. .. _host_loops: How do I loop over a list of hosts in a group, inside of a template? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ A pretty common pattern is to iterate over a list of hosts inside of a host group, perhaps to populate a template configuration file with a list of servers. To do this, you can just access the "$groups" dictionary in your template, like this: .. code-block:: jinja {% for host in groups['db_servers'] %} {{ host }} {% endfor %} If you need to access facts about these hosts, for instance, the IP address of each hostname, you need to make sure that the facts have been populated. For example, make sure you have a play that talks to db_servers:: - hosts: db_servers tasks: - debug: msg="doesn't matter what you do, just that they were talked to previously." Then you can use the facts inside your template, like this: .. code-block:: jinja {% for host in groups['db_servers'] %} {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} {% endfor %} .. _programatic_access_to_a_variable: How do I access a variable name programmatically? +++++++++++++++++++++++++++++++++++++++++++++++++ An example may come up where we need to get the ipv4 address of an arbitrary interface, where the interface to be used may be supplied via a role parameter or other input. Variable names can be built by adding strings together using "~", like so: .. code-block:: jinja {{ hostvars[inventory_hostname]['ansible_' ~ which_interface]['ipv4']['address'] }} The trick about going through hostvars is necessary because it's a dictionary of the entire namespace of variables. ``inventory_hostname`` is a magic variable that indicates the current host you are looping over in the host loop. In the example above, if your interface names have dashes, you must replace them with underscores: .. code-block:: jinja {{ hostvars[inventory_hostname]['ansible_' ~ which_interface | replace('_', '-') ]['ipv4']['address'] }} Also see dynamic_variables_. .. _access_group_variable: How do I access a group variable? +++++++++++++++++++++++++++++++++ Technically, you don't, Ansible does not really use groups directly. Groups are labels for host selection and a way to bulk assign variables, they are not a first class entity, Ansible only cares about Hosts and Tasks. That said, you could just access the variable by selecting a host that is part of that group, see first_host_in_a_group_ below for an example. .. _first_host_in_a_group: How do I access a variable of the first host in a group? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ What happens if we want the ip address of the first webserver in the webservers group? Well, we can do that too. Note that if we are using dynamic inventory, which host is the 'first' may not be consistent, so you wouldn't want to do this unless your inventory is static and predictable. (If you are using AWX or the :ref:`Red Hat Ansible Automation Platform `, it will use database order, so this isn't a problem even if you are using cloud based inventory scripts). Anyway, here's the trick: .. code-block:: jinja {{ hostvars[groups['webservers'][0]]['ansible_eth0']['ipv4']['address'] }} Notice how we're pulling out the hostname of the first machine of the webservers group. If you are doing this in a template, you could use the Jinja2 '#set' directive to simplify this, or in a playbook, you could also use set_fact:: - set_fact: headnode={{ groups['webservers'][0] }} - debug: msg={{ hostvars[headnode].ansible_eth0.ipv4.address }} Notice how we interchanged the bracket syntax for dots -- that can be done anywhere. .. _file_recursion: How do I copy files recursively onto a target host? +++++++++++++++++++++++++++++++++++++++++++++++++++ The ``copy`` module has a recursive parameter. However, take a look at the ``synchronize`` module if you want to do something more efficient for a large number of files. The ``synchronize`` module wraps rsync. See the module index for info on both of these modules. .. _shell_env: How do I access shell environment variables? ++++++++++++++++++++++++++++++++++++++++++++ **On controller machine :** Access existing variables from controller use the ``env`` lookup plugin. For example, to access the value of the HOME environment variable on the management machine:: --- # ... vars: local_home: "{{ lookup('env','HOME') }}" **On target machines :** Environment variables are available via facts in the ``ansible_env`` variable: .. code-block:: jinja {{ ansible_env.HOME }} If you need to set environment variables for TASK execution, see :ref:`playbooks_environment` in the :ref:`Advanced Playbooks ` section. There are several ways to set environment variables on your target machines. You can use the :ref:`template `, :ref:`replace `, or :ref:`lineinfile ` modules to introduce environment variables into files. The exact files to edit vary depending on your OS and distribution and local configuration. .. _user_passwords: How do I generate encrypted passwords for the user module? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Ansible ad hoc command is the easiest option: .. code-block:: shell-session ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}" The ``mkpasswd`` utility that is available on most Linux systems is also a great option: .. code-block:: shell-session mkpasswd --method=sha-512 If this utility is not installed on your system (for example, you are using macOS) then you can still easily generate these passwords using Python. First, ensure that the `Passlib `_ password hashing library is installed: .. code-block:: shell-session pip install passlib Once the library is ready, SHA512 password values can then be generated as follows: .. code-block:: shell-session python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))" Use the integrated :ref:`hash_filters` to generate a hashed version of a password. You shouldn't put plaintext passwords in your playbook or host_vars; instead, use :ref:`playbooks_vault` to encrypt sensitive data. In OpenBSD, a similar option is available in the base system called ``encrypt (1)`` .. _dot_or_array_notation: Ansible allows dot notation and array notation for variables. Which notation should I use? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The dot notation comes from Jinja and works fine for variables without special characters. If your variable contains dots (.), colons (:), or dashes (-), if a key begins and ends with two underscores, or if a key uses any of the known public attributes, it is safer to use the array notation. See :ref:`playbooks_variables` for a list of the known public attributes. .. code-block:: jinja item[0]['checksum:md5'] item['section']['2.1'] item['region']['Mid-Atlantic'] It is {{ temperature['Celsius']['-3'] }} outside. Also array notation allows for dynamic variable composition, see dynamic_variables_. Another problem with 'dot notation' is that some keys can cause problems because they collide with attributes and methods of python dictionaries. .. code-block:: jinja item.update # this breaks if item is a dictionary, as 'update()' is a python method for dictionaries item['update'] # this works .. _argsplat_unsafe: When is it unsafe to bulk-set task arguments from a variable? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ You can set all of a task's arguments from a dictionary-typed variable. This technique can be useful in some dynamic execution scenarios. However, it introduces a security risk. We do not recommend it, so Ansible issues a warning when you do something like this:: #... vars: usermod_args: name: testuser state: present update_password: always tasks: - user: '{{ usermod_args }}' This particular example is safe. However, constructing tasks like this is risky because the parameters and values passed to ``usermod_args`` could be overwritten by malicious values in the ``host facts`` on a compromised target machine. To mitigate this risk: * set bulk variables at a level of precedence greater than ``host facts`` in the order of precedence found in :ref:`ansible_variable_precedence` (the example above is safe because play vars take precedence over facts) * disable the :ref:`inject_facts_as_vars` configuration setting to prevent fact values from colliding with variables (this will also disable the original warning) .. _commercial_support: Can I get training on Ansible? ++++++++++++++++++++++++++++++ Yes! See our `services page `_ for information on our services and training offerings. Email `info@ansible.com `_ for further details. We also offer free web-based training classes on a regular basis. See our `webinar page `_ for more info on upcoming webinars. .. _web_interface: Is there a web interface / REST API / GUI? ++++++++++++++++++++++++++++++++++++++++++++ Yes! The open-source web interface is Ansible AWX. The supported Red Hat product that makes Ansible even more powerful and easy to use is :ref:`Red Hat Ansible Automation Platform `. .. _keep_secret_data: How do I keep secret data in my playbook? +++++++++++++++++++++++++++++++++++++++++ If you would like to keep secret data in your Ansible content and still share it publicly or keep things in source control, see :ref:`playbooks_vault`. If you have a task that you don't want to show the results or command given to it when using -v (verbose) mode, the following task or playbook attribute can be useful:: - name: secret task shell: /usr/bin/do_something --value={{ secret_value }} no_log: True This can be used to keep verbose output but hide sensitive information from others who would otherwise like to be able to see the output. The ``no_log`` attribute can also apply to an entire play:: - hosts: all no_log: True Though this will make the play somewhat difficult to debug. It's recommended that this be applied to single tasks only, once a playbook is completed. Note that the use of the ``no_log`` attribute does not prevent data from being shown when debugging Ansible itself via the :envvar:`ANSIBLE_DEBUG` environment variable. .. _when_to_use_brackets: .. _dynamic_variables: .. _interpolate_variables: When should I use {{ }}? Also, how to interpolate variables or dynamic variable names +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ A steadfast rule is 'always use ``{{ }}`` except when ``when:``'. Conditionals are always run through Jinja2 as to resolve the expression, so ``when:``, ``failed_when:`` and ``changed_when:`` are always templated and you should avoid adding ``{{ }}``. In most other cases you should always use the brackets, even if previously you could use variables without specifying (like ``loop`` or ``with_`` clauses), as this made it hard to distinguish between an undefined variable and a string. Another rule is 'moustaches don't stack'. We often see this: .. code-block:: jinja {{ somevar_{{other_var}} }} The above DOES NOT WORK as you expect, if you need to use a dynamic variable use the following as appropriate: .. code-block:: jinja {{ hostvars[inventory_hostname]['somevar_' ~ other_var] }} For 'non host vars' you can use the :ref:`vars lookup` plugin: .. code-block:: jinja {{ lookup('vars', 'somevar_' ~ other_var) }} .. _why_no_wheel: Why don't you ship ansible in wheel format (or other packaging format) ? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ In most cases it has to do with maintainability. There are many ways to ship software and we do not have the resources to release Ansible on every platform. In some cases there are technical issues. For example, our dependencies are not present on Python Wheels. .. _ansible_host_delegated: How do I get the original ansible_host when I delegate a task? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ As the documentation states, connection variables are taken from the ``delegate_to`` host so ``ansible_host`` is overwritten, but you can still access the original via ``hostvars``:: original_host: "{{ hostvars[inventory_hostname]['ansible_host'] }}" This works for all overridden connection variables, like ``ansible_user``, ``ansible_port``, and so on. .. _scp_protocol_error_filename: How do I fix 'protocol error: filename does not match request' when fetching a file? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Since release ``7.9p1`` of OpenSSH there is a `bug `_ in the SCP client that can trigger this error on the Ansible controller when using SCP as the file transfer mechanism:: failed to transfer file to /tmp/ansible/file.txt\r\nprotocol error: filename does not match request In these releases, SCP tries to validate that the path of the file to fetch matches the requested path. The validation fails if the remote filename requires quotes to escape spaces or non-ascii characters in its path. To avoid this error: * Use SFTP instead of SCP by setting ``scp_if_ssh`` to ``smart`` (which tries SFTP first) or to ``False``. You can do this in one of four ways: * Rely on the default setting, which is ``smart`` - this works if ``scp_if_ssh`` is not explicitly set anywhere * Set a :ref:`host variable ` or :ref:`group variable ` in inventory: ``ansible_scp_if_ssh: False`` * Set an environment variable on your control node: ``export ANSIBLE_SCP_IF_SSH=False`` * Pass an environment variable when you run Ansible: ``ANSIBLE_SCP_IF_SSH=smart ansible-playbook`` * Modify your ``ansible.cfg`` file: add ``scp_if_ssh=False`` to the ``[ssh_connection]`` section * If you must use SCP, set the ``-T`` arg to tell the SCP client to ignore path validation. You can do this in one of three ways: * Set a :ref:`host variable ` or :ref:`group variable `: ``ansible_scp_extra_args=-T``, * Export or pass an environment variable: ``ANSIBLE_SCP_EXTRA_ARGS=-T`` * Modify your ``ansible.cfg`` file: add ``scp_extra_args=-T`` to the ``[ssh_connection]`` section .. note:: If you see an ``invalid argument`` error when using ``-T``, then your SCP client is not performing filename validation and will not trigger this error. .. _mfa_support: Does Ansible support multiple factor authentication 2FA/MFA/biometrics/finterprint/usbkey/OTP/... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ No, Ansible is designed to execute multiple tasks against multiple targets, minimizing user interaction. As with most automation tools, it is not compatible with interactive security systems designed to handle human interaction. Most of these systems require a secondary prompt per target, which prevents scaling to thousands of targets. They also tend to have very short expiration periods so it requires frequent reauthorization, also an issue with many hosts and/or a long set of tasks. In such environments we recommend securing around Ansible's execution but still allowing it to use an 'automation user' that does not require such measures. With AWX or the :ref:`Red Hat Ansible Automation Platform `, administrators can set up RBAC access to inventory, along with managing credentials and job execution. .. _complex_configuration_validation: The 'validate' option is not enough for my needs, what do I do? +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Many Ansible modules that create or update files have a ``validate`` option that allows you to abort the update if the validation command fails. This uses the temporary file Ansible creates before doing the final update. In many cases this does not work since the validation tools for the specific application require either specific names, multiple files or some other factor that is not present in this simple feature. For these cases you have to handle the validation and restoration yourself. The following is a simple example of how to do this with block/rescue and backups, which most file based modules also support: .. code-block:: yaml - name: update config and backout if validation fails block: - name: do the actual update, works with copy, lineinfile and any action that allows for `backup`. template: src=template.j2 dest=/x/y/z backup=yes moreoptions=stuff register: updated - name: run validation, this will change a lot as needed. We assume it returns an error when not passing, use `failed_when` if otherwise. shell: run_validation_commmand become: yes become_user: requiredbyapp environment: WEIRD_REQUIREMENT: 1 rescue: - name: restore backup file to original, in the hope the previous configuration was working. copy: remote_src: yes dest: /x/y/z src: "{{ updated['backup_file'] }}" always: - name: We choose to always delete backup, but could copy or move, or only delete in rescue. file: path: "{{ updated['backup_file'] }}" state: absent .. _docs_contributions: How do I submit a change to the documentation? ++++++++++++++++++++++++++++++++++++++++++++++ Documentation for Ansible is kept in the main project git repository, and complete instructions for contributing can be found in the docs README `viewable on GitHub `_. Thanks! .. _i_dont_see_my_question: I don't see my question here ++++++++++++++++++++++++++++ If you have not found an answer to your questions, you can ask on one of our mailing lists or chat channels. For instructions on subscribing to a list or joining a chat channel, see :ref:`communication`. .. seealso:: :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/general_precedence.rst0000644000000000000000000002010300000000000027741 0ustar00rootroot00000000000000.. _general_precedence_rules: Controlling how Ansible behaves: precedence rules ================================================= To give you maximum flexibility in managing your environments, Ansible offers many ways to control how Ansible behaves: how it connects to managed nodes, how it works once it has connected. If you use Ansible to manage a large number of servers, network devices, and cloud resources, you may define Ansible behavior in several different places and pass that information to Ansible in several different ways. This flexibility is convenient, but it can backfire if you do not understand the precedence rules. These precedence rules apply to any setting that can be defined in multiple ways (by configuration settings, command-line options, playbook keywords, variables). .. contents:: :local: Precedence categories --------------------- Ansible offers four sources for controlling its behavior. In order of precedence from lowest (most easily overridden) to highest (overrides all others), the categories are: * Configuration settings * Command-line options * Playbook keywords * Variables Each category overrides any information from all lower-precedence categories. For example, a playbook keyword will override any configuration setting. Within each precedence category, specific rules apply. However, generally speaking, 'last defined' wins and overrides any previous definitions. Configuration settings ^^^^^^^^^^^^^^^^^^^^^^ :ref:`Configuration settings` include both values from the ``ansible.cfg`` file and environment variables. Within this category, values set in configuration files have lower precedence. Ansible uses the first ``ansible.cfg`` file it finds, ignoring all others. Ansible searches for ``ansible.cfg`` in these locations in order: * ``ANSIBLE_CONFIG`` (environment variable if set) * ``ansible.cfg`` (in the current directory) * ``~/.ansible.cfg`` (in the home directory) * ``/etc/ansible/ansible.cfg`` Environment variables have a higher precedence than entries in ``ansible.cfg``. If you have environment variables set on your control node, they override the settings in whichever ``ansible.cfg`` file Ansible loads. The value of any given environment variable follows normal shell precedence: the last value defined overwrites previous values. Command-line options ^^^^^^^^^^^^^^^^^^^^ Any command-line option will override any configuration setting. When you type something directly at the command line, you may feel that your hand-crafted values should override all others, but Ansible does not work that way. Command-line options have low precedence - they override configuration only. They do not override playbook keywords, variables from inventory or variables from playbooks. You can override all other settings from all other sources in all other precedence categories at the command line by :ref:`general_precedence_extra_vars`, but that is not a command-line option, it is a way of passing a :ref:`variable`. At the command line, if you pass multiple values for a parameter that accepts only a single value, the last defined value wins. For example, this :ref:`ad hoc task` will connect as ``carol``, not as ``mike``:: ansible -u mike -m ping myhost -u carol Some parameters allow multiple values. In this case, Ansible will append all values from the hosts listed in inventory files inventory1 and inventory2:: ansible -i /path/inventory1 -i /path/inventory2 -m ping all The help for each :ref:`command-line tool` lists available options for that tool. Playbook keywords ^^^^^^^^^^^^^^^^^ Any :ref:`playbook keyword` will override any command-line option and any configuration setting. Within playbook keywords, precedence flows with the playbook itself; the more specific wins against the more general: - play (most general) - blocks/includes/imports/roles (optional and can contain tasks and each other) - tasks (most specific) A simple example:: - hosts: all connection: ssh tasks: - name: This task uses ssh. ping: - name: This task uses paramiko. connection: paramiko ping: In this example, the ``connection`` keyword is set to ``ssh`` at the play level. The first task inherits that value, and connects using ``ssh``. The second task inherits that value, overrides it, and connects using ``paramiko``. The same logic applies to blocks and roles as well. All tasks, blocks, and roles within a play inherit play-level keywords; any task, block, or role can override any keyword by defining a different value for that keyword within the task, block, or role. Remember that these are KEYWORDS, not variables. Both playbooks and variable files are defined in YAML but they have different significance. Playbooks are the command or 'state description' structure for Ansible, variables are data we use to help make playbooks more dynamic. .. _general_precedence_variables: Variables ^^^^^^^^^ Any variable will override any playbook keyword, any command-line option, and any configuration setting. Variables that have equivalent playbook keywords, command-line options, and configuration settings are known as :ref:`connection_variables`. Originally designed for connection parameters, this category has expanded to include other core variables like the temporary directory and the python interpreter. Connection variables, like all variables, can be set in multiple ways and places. You can define variables for hosts and groups in :ref:`inventory`. You can define variables for tasks and plays in ``vars:`` blocks in :ref:`playbooks`. However, they are still variables - they are data, not keywords or configuration settings. Variables that override playbook keywords, command-line options, and configuration settings follow the same rules of :ref:`variable precedence ` as any other variables. When set in a playbook, variables follow the same inheritance rules as playbook keywords. You can set a value for the play, then override it in a task, block, or role:: - hosts: cloud gather_facts: false become: yes vars: ansible_become_user: admin tasks: - name: This task uses admin as the become user. dnf: name: some-service state: latest - block: - name: This task uses service-admin as the become user. # a task to configure the new service - name: This task also uses service-admin as the become user, defined in the block. # second task to configure the service vars: ansible_become_user: service-admin - name: This task (outside of the block) uses admin as the become user again. service: name: some-service state: restarted Variable scope: how long is a value available? """""""""""""""""""""""""""""""""""""""""""""" Variable values set in a playbook exist only within the playbook object that defines them. These 'playbook object scope' variables are not available to subsequent objects, including other plays. Variable values associated directly with a host or group, including variables defined in inventory, by vars plugins, or using modules like :ref:`set_fact` and :ref:`include_vars`, are available to all plays. These 'host scope' variables are also available via the ``hostvars[]`` dictionary. .. _general_precedence_extra_vars: Using ``-e`` extra variables at the command line ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To override all other settings in all other categories, you can use extra variables: ``--extra-vars`` or ``-e`` at the command line. Values passed with ``-e`` are variables, not command-line options, and they will override configuration settings, command-line options, and playbook keywords as well as variables set elsewhere. For example, this task will connect as ``brian`` not as ``carol``:: ansible -u carol -e 'ansible_user=brian' -a whoami all You must specify both the variable name and the value with ``--extra-vars``. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/glossary.rst0000644000000000000000000007530600000000000026031 0ustar00rootroot00000000000000Glossary ======== The following is a list (and re-explanation) of term definitions used elsewhere in the Ansible documentation. Consult the documentation home page for the full documentation and to see the terms in context, but this should be a good resource to check your knowledge of Ansible's components and understand how they fit together. It's something you might wish to read for review or when a term comes up on the mailing list. .. glossary:: Action An action is a part of a task that specifies which of the modules to run and which arguments to pass to that module. Each task can have only one action, but it may also have other parameters. Ad Hoc Refers to running Ansible to perform some quick command, using :command:`/usr/bin/ansible`, rather than the :term:`orchestration` language, which is :command:`/usr/bin/ansible-playbook`. An example of an ad hoc command might be rebooting 50 machines in your infrastructure. Anything you can do ad hoc can be accomplished by writing a :term:`playbook ` and playbooks can also glue lots of other operations together. Ansible (the package) A software package (Python, deb, rpm, and so on) that contains ansible-core and a select group of collections. Playbooks that worked with Ansible 2.9 should still work with the Ansible 2.10 package. See the :file:`ansible-.build` file in the release-specific directory at `ansible-build-data `_ for a list of collections included in Ansible, as well as the included ``ansible-core`` version. ansible-base Used only for 2.10. The installable package (RPM/Python/Deb package) generated from the `ansible/ansible repository `_. See ``ansible-core``. ansible-core Name used starting with 2.11. The installable package (RPM/Python/Deb package) generated from the `ansible/ansible repository `_. Contains the command-line tools and the code for basic features and functions, such as copying module code to managed nodes. The ``ansible-core`` package includes a few modules and plugins and allows you to add others by installing collections. Ansible Galaxy An `online resource `_ for finding and sharing Ansible community content. Also, the command-line utility that lets users install individual Ansible Collections, for example`` ansible-galaxy install community.crypto``. Async Refers to a task that is configured to run in the background rather than waiting for completion. If you have a long process that would run longer than the SSH timeout, it would make sense to launch that task in async mode. Async modes can poll for completion every so many seconds or can be configured to "fire and forget", in which case Ansible will not even check on the task again; it will just kick it off and proceed to future steps. Async modes work with both :command:`/usr/bin/ansible` and :command:`/usr/bin/ansible-playbook`. Callback Plugin Refers to some user-written code that can intercept results from Ansible and do something with them. Some supplied examples in the GitHub project perform custom logging, send email, or even play sound effects. Check Mode Refers to running Ansible with the ``--check`` option, which does not make any changes on the remote systems, but only outputs the changes that might occur if the command ran without this flag. This is analogous to so-called "dry run" modes in other systems, though the user should be warned that this does not take into account unexpected command failures or cascade effects (which is true of similar modes in other systems). Use this to get an idea of what might happen, but do not substitute it for a good staging environment. Collection A packaging format for bundling and distributing Ansible content, including plugins, roles, modules, and more. Collections release independent of other collections or ``ansible-core`` so features can be available sooner to users. Some collections are packaged with Ansible (version 2.10 or later). You can install other collections (or other versions of collections) with ``ansible-galaxy collection install ``. Collection name The second part of a Fully Qualified Collection Name. The collection name divides the collection namespace and usually reflects the function of the collection content. For example, the ``cisco`` namespace might contain ``cisco.ios``, ``cisco.aci``, and ``cisco.nxos``, with content for managing the different network devices maintained by Cisco. community.general (collection) A special collection managed by the Ansible Community Team containing all the modules and plugins which shipped in Ansible 2.9 that do not have their own dedicated Collection. See `community.general `_` on Galaxy. community.network (collection) Similar to ``community.general``, focusing on network content. `community.network `_` on Galaxy. Connection Plugin By default, Ansible talks to remote machines through pluggable libraries. Ansible uses native OpenSSH (:term:`SSH (Native)`) or a Python implementation called :term:`paramiko`. OpenSSH is preferred if you are using a recent version, and also enables some features like Kerberos and jump hosts. This is covered in the :ref:`getting started section `. There are also other connection types like ``accelerate`` mode, which must be bootstrapped over one of the SSH-based connection types but is very fast, and local mode, which acts on the local system. Users can also write their own connection plugins. Conditionals A conditional is an expression that evaluates to true or false that decides whether a given task is executed on a given machine or not. Ansible's conditionals are powered by the 'when' statement, which are discussed in the :ref:`working_with_playbooks`. Declarative An approach to achieving a task that uses a description of the final state rather than a description of the sequence of steps necessary to achieve that state. For a real world example, a declarative specification of a task would be: "put me in California". Depending on your current location, the sequence of steps to get you to California may vary, and if you are already in California, nothing at all needs to be done. Ansible's Resources are declarative; it figures out the steps needed to achieve the final state. It also lets you know whether or not any steps needed to be taken to get to the final state. Diff Mode A ``--diff`` flag can be passed to Ansible to show what changed on modules that support it. You can combine it with ``--check`` to get a good 'dry run'. File diffs are normally in unified diff format. Executor A core software component of Ansible that is the power behind :command:`/usr/bin/ansible` directly -- and corresponds to the invocation of each task in a :term:`playbook `. The Executor is something Ansible developers may talk about, but it's not really user land vocabulary. Facts Facts are simply things that are discovered about remote nodes. While they can be used in :term:`playbooks` and templates just like variables, facts are things that are inferred, rather than set. Facts are automatically discovered by Ansible when running plays by executing the internal :ref:`setup module ` on the remote nodes. You never have to call the setup module explicitly, it just runs, but it can be disabled to save time if it is not needed or you can tell ansible to collect only a subset of the full facts via the ``gather_subset:`` option. For the convenience of users who are switching from other configuration management systems, the fact module will also pull in facts from the :program:`ohai` and :program:`facter` tools if they are installed. These are fact libraries from Chef and Puppet, respectively. (These may also be disabled via ``gather_subset:``) Filter Plugin A filter plugin is something that most users will never need to understand. These allow for the creation of new :term:`Jinja2` filters, which are more or less only of use to people who know what Jinja2 filters are. If you need them, you can learn how to write them in the :ref:`API docs section `. Forks Ansible talks to remote nodes in parallel and the level of parallelism can be set either by passing ``--forks`` or editing the default in a configuration file. The default is a very conservative five (5) forks, though if you have a lot of RAM, you can easily set this to a value like 50 for increased parallelism. Fully Qualified Collection Name (FQCN) The full definition of a module, plugin, or role hosted within a collection, in the form . Allows a Playbook to refer to a specific module or plugin from a specific source in an unambiguous manner, for example, ``community.grafana.grafana_dashboard``. The FQCN is required when you want to specify the exact source of a plugin. For example, if multiple collections contain a module plugin called ``user``, the FQCN specifies which one to use for a given task. When you have multiple collections installed, the FQCN is always the explicit and authoritative indicator of which collection to search for the correct plugin for each task. Gather Facts (Boolean) :term:`Facts` are mentioned above. Sometimes when running a multi-play :term:`playbook `, it is desirable to have some plays that don't bother with fact computation if they aren't going to need to utilize any of these values. Setting ``gather_facts: False`` on a playbook allows this implicit fact gathering to be skipped. Globbing Globbing is a way to select lots of hosts based on wildcards, rather than the name of the host specifically, or the name of the group they are in. For instance, it is possible to select ``ww*`` to match all hosts starting with ``www``. This concept is pulled directly from :program:`Func`, one of Michael DeHaan's (an Ansible Founder) earlier projects. In addition to basic globbing, various set operations are also possible, such as 'hosts in this group and not in another group', and so on. Group A group consists of several hosts assigned to a pool that can be conveniently targeted together, as well as given variables that they share in common. Group Vars The :file:`group_vars/` files are files that live in a directory alongside an inventory file, with an optional filename named after each group. This is a convenient place to put variables that are provided to a given group, especially complex data structures, so that these variables do not have to be embedded in the :term:`inventory` file or :term:`playbook `. Handlers Handlers are just like regular tasks in an Ansible :term:`playbook ` (see :term:`Tasks`) but are only run if the Task contains a ``notify`` keyword and also indicates that it changed something. For example, if a config file is changed, then the task referencing the config file templating operation may notify a service restart handler. This means services can be bounced only if they need to be restarted. Handlers can be used for things other than service restarts, but service restarts are the most common usage. Host A host is simply a remote machine that Ansible manages. They can have individual variables assigned to them, and can also be organized in groups. All hosts have a name they can be reached at (which is either an IP address or a domain name) and, optionally, a port number, if they are not to be accessed on the default SSH port. Host Specifier Each :term:`Play ` in Ansible maps a series of :term:`tasks` (which define the role, purpose, or orders of a system) to a set of systems. This ``hosts:`` keyword in each play is often called the hosts specifier. It may select one system, many systems, one or more groups, or even some hosts that are in one group and explicitly not in another. Host Vars Just like :term:`Group Vars`, a directory alongside the inventory file named :file:`host_vars/` can contain a file named after each hostname in the inventory file, in :term:`YAML` format. This provides a convenient place to assign variables to the host without having to embed them in the :term:`inventory` file. The Host Vars file can also be used to define complex data structures that can't be represented in the inventory file. Idempotency An operation is idempotent if the result of performing it once is exactly the same as the result of performing it repeatedly without any intervening actions. Includes The idea that :term:`playbook ` files (which are nothing more than lists of :term:`plays`) can include other lists of plays, and task lists can externalize lists of :term:`tasks` in other files, and similarly with :term:`handlers`. Includes can be parameterized, which means that the loaded file can pass variables. For instance, an included play for setting up a WordPress blog may take a parameter called ``user`` and that play could be included more than once to create a blog for both ``alice`` and ``bob``. Inventory A file (by default, Ansible uses a simple INI format) that describes :term:`Hosts ` and :term:`Groups ` in Ansible. Inventory can also be provided via an :term:`Inventory Script` (sometimes called an "External Inventory Script"). Inventory Script A very simple program (or a complicated one) that looks up :term:`hosts `, :term:`group` membership for hosts, and variable information from an external resource -- whether that be a SQL database, a CMDB solution, or something like LDAP. This concept was adapted from Puppet (where it is called an "External Nodes Classifier") and works more or less exactly the same way. Jinja2 Jinja2 is the preferred templating language of Ansible's template module. It is a very simple Python template language that is generally readable and easy to write. JSON Ansible uses JSON for return data from remote modules. This allows modules to be written in any language, not just Python. Keyword The main expressions that make up Ansible, which apply to playbook objects (Play, Block, Role and Task). For example 'vars:' is a keyword that lets you define variables in the scope of the playbook object it is applied to. Lazy Evaluation In general, Ansible evaluates any variables in :term:`playbook ` content at the last possible second, which means that if you define a data structure that data structure itself can define variable values within it, and everything "just works" as you would expect. This also means variable strings can include other variables inside of those strings. Library A collection of modules made available to :command:`/usr/bin/ansible` or an Ansible :term:`playbook `. Limit Groups By passing ``--limit somegroup`` to :command:`ansible` or :command:`ansible-playbook`, the commands can be limited to a subset of :term:`hosts `. For instance, this can be used to run a :term:`playbook ` that normally targets an entire set of servers to one particular server. Local Action This keyword is an alias for ``delegate_to: localhost``. Used when you want to redirect an action from the remote to execute on the controller itself. Local Connection By using ``connection: local`` in a :term:`playbook `, or passing ``-c local`` to :command:`/usr/bin/ansible`, this indicates that we are executing a local fork instead of executing on the remote machine. You probably want ``local_action`` or ``delegate_to: localhost`` instead as this ONLY changes the connection and no other context for execution. Lookup Plugin A lookup plugin is a way to get data into Ansible from the outside world. Lookup plugins are an extension of Jinja2 and can be accessed in templates, for example, ``{{ lookup('file','/path/to/file') }}``. These are how such things as ``with_items``, are implemented. There are also lookup plugins like ``file`` which loads data from a file and ones for querying environment variables, DNS text records, or key value stores. Loops Generally, Ansible is not a programming language. It prefers to be more declarative, though various constructs like ``loop`` allow a particular task to be repeated for multiple items in a list. Certain modules, like :ref:`yum ` and :ref:`apt `, actually take lists directly, and can install all packages given in those lists within a single transaction, dramatically speeding up total time to configuration, so they can be used without loops. Modules Modules are the units of work that Ansible ships out to remote machines. Modules are kicked off by either :command:`/usr/bin/ansible` or :command:`/usr/bin/ansible-playbook` (where multiple tasks use lots of different modules in conjunction). Modules can be implemented in any language, including Perl, Bash, or Ruby -- but can take advantage of some useful communal library code if written in Python. Modules just have to return :term:`JSON`. Once modules are executed on remote machines, they are removed, so no long running daemons are used. Ansible refers to the collection of available modules as a :term:`library`. Multi-Tier The concept that IT systems are not managed one system at a time, but by interactions between multiple systems and groups of systems in well defined orders. For instance, a web server may need to be updated before a database server and pieces on the web server may need to be updated after *THAT* database server and various load balancers and monitoring servers may need to be contacted. Ansible models entire IT topologies and workflows rather than looking at configuration from a "one system at a time" perspective. Namespace The first part of a fully qualified collection name, the namespace usually reflects a functional content category. Example: in ``cisco.ios.ios_config``, ``cisco`` is the namespace. Namespaces are reserved and distributed by Red Hat at Red Hat's discretion. Many, but not all, namespaces will correspond with vendor names. See `Galaxy namespaces `_ on the Galaxy docsite for namespace requirements. Notify The act of a :term:`task ` registering a change event and informing a :term:`handler ` task that another :term:`action` needs to be run at the end of the :term:`play `. If a handler is notified by multiple tasks, it will still be run only once. Handlers are run in the order they are listed, not in the order that they are notified. Orchestration Many software automation systems use this word to mean different things. Ansible uses it as a conductor would conduct an orchestra. A datacenter or cloud architecture is full of many systems, playing many parts -- web servers, database servers, maybe load balancers, monitoring systems, continuous integration systems, and so on. In performing any process, it is necessary to touch systems in particular orders, often to simulate rolling updates or to deploy software correctly. Some system may perform some steps, then others, then previous systems already processed may need to perform more steps. Along the way, emails may need to be sent or web services contacted. Ansible orchestration is all about modeling that kind of process. paramiko By default, Ansible manages machines over SSH. The library that Ansible uses by default to do this is a Python-powered library called paramiko. The paramiko library is generally fast and easy to manage, though users who want to use Kerberos or Jump Hosts may wish to switch to a native SSH binary such as OpenSSH by specifying the connection type in their :term:`playbooks`, or using the ``-c ssh`` flag. Playbooks Playbooks are the language by which Ansible orchestrates, configures, administers, or deploys systems. They are called playbooks partially because it's a sports analogy, and it's supposed to be fun using them. They aren't workbooks :) Plays A :term:`playbook ` is a list of plays. A play is minimally a mapping between a set of :term:`hosts ` selected by a host specifier (usually chosen by :term:`groups ` but sometimes by hostname :term:`globs `) and the :term:`tasks` which run on those hosts to define the role that those systems will perform. There can be one or many plays in a playbook. Pull Mode By default, Ansible runs in :term:`push mode`, which allows it very fine-grained control over when it talks to each system. Pull mode is provided for when you would rather have nodes check in every N minutes on a particular schedule. It uses a program called :command:`ansible-pull` and can also be set up (or reconfigured) using a push-mode :term:`playbook `. Most Ansible users use push mode, but pull mode is included for variety and the sake of having choices. :command:`ansible-pull` works by checking configuration orders out of git on a crontab and then managing the machine locally, using the :term:`local connection` plugin. Push Mode Push mode is the default mode of Ansible. In fact, it's not really a mode at all -- it's just how Ansible works when you aren't thinking about it. Push mode allows Ansible to be fine-grained and conduct nodes through complex orchestration processes without waiting for them to check in. Register Variable The result of running any :term:`task ` in Ansible can be stored in a variable for use in a template or a conditional statement. The keyword used to define the variable is called ``register``, taking its name from the idea of registers in assembly programming (though Ansible will never feel like assembly programming). There are an infinite number of variable names you can use for registration. Resource Model Ansible modules work in terms of resources. For instance, the :ref:`file module ` will select a particular file and ensure that the attributes of that resource match a particular model. As an example, we might wish to change the owner of :file:`/etc/motd` to ``root`` if it is not already set to ``root``, or set its mode to ``0644`` if it is not already set to ``0644``. The resource models are :term:`idempotent ` meaning change commands are not run unless needed, and Ansible will bring the system back to a desired state regardless of the actual state -- rather than you having to tell it how to get to the state. Roles Roles are units of organization in Ansible. Assigning a role to a group of :term:`hosts ` (or a set of :term:`groups `, or :term:`host patterns `, and so on) implies that they should implement a specific behavior. A role may include applying certain variable values, certain :term:`tasks`, and certain :term:`handlers` -- or just one or more of these things. Because of the file structure associated with a role, roles become redistributable units that allow you to share behavior among :term:`playbooks` -- or even with other users. Rolling Update The act of addressing a number of nodes in a group N at a time to avoid updating them all at once and bringing the system offline. For instance, in a web topology of 500 nodes handling very large volume, it may be reasonable to update 10 or 20 machines at a time, moving on to the next 10 or 20 when done. The ``serial:`` keyword in an Ansible :term:`playbooks` control the size of the rolling update pool. The default is to address the batch size all at once, so this is something that you must opt-in to. OS configuration (such as making sure config files are correct) does not typically have to use the rolling update model, but can do so if desired. Serial .. seealso:: :term:`Rolling Update` Sudo Ansible does not require root logins, and since it's daemonless, definitely does not require root level daemons (which can be a security concern in sensitive environments). Ansible can log in and perform many operations wrapped in a sudo command, and can work with both password-less and password-based sudo. Some operations that don't normally work with sudo (like scp file transfer) can be achieved with Ansible's :ref:`copy `, :ref:`template `, and :ref:`fetch ` modules while running in sudo mode. SSH (Native) Native OpenSSH as an Ansible transport is specified with ``-c ssh`` (or a config file, or a keyword in the :term:`playbook `) and can be useful if wanting to login via Kerberized SSH or using SSH jump hosts, and so on. In 1.2.1, ``ssh`` will be used by default if the OpenSSH binary on the control machine is sufficiently new. Previously, Ansible selected ``paramiko`` as a default. Using a client that supports ``ControlMaster`` and ``ControlPersist`` is recommended for maximum performance -- if you don't have that and don't need Kerberos, jump hosts, or other features, ``paramiko`` is a good choice. Ansible will warn you if it doesn't detect ControlMaster/ControlPersist capability. Tags Ansible allows tagging resources in a :term:`playbook ` with arbitrary keywords, and then running only the parts of the playbook that correspond to those keywords. For instance, it is possible to have an entire OS configuration, and have certain steps labeled ``ntp``, and then run just the ``ntp`` steps to reconfigure the time server information on a remote host. Task :term:`Playbooks` exist to run tasks. Tasks combine an :term:`action` (a module and its arguments) with a name and optionally some other keywords (like :term:`looping keywords `). :term:`Handlers` are also tasks, but they are a special kind of task that do not run unless they are notified by name when a task reports an underlying change on a remote system. Tasks A list of :term:`Task`. Templates Ansible can easily transfer files to remote systems but often it is desirable to substitute variables in other files. Variables may come from the :term:`inventory` file, :term:`Host Vars`, :term:`Group Vars`, or :term:`Facts`. Templates use the :term:`Jinja2` template engine and can also include logical constructs like loops and if statements. Transport Ansible uses :term:``Connection Plugins`` to define types of available transports. These are simply how Ansible will reach out to managed systems. Transports included are :term:`paramiko`, :term:`ssh ` (using OpenSSH), and :term:`local `. When An optional conditional statement attached to a :term:`task ` that is used to determine if the task should run or not. If the expression following the ``when:`` keyword evaluates to false, the task will be ignored. Vars (Variables) As opposed to :term:`Facts`, variables are names of values (they can be simple scalar values -- integers, booleans, strings) or complex ones (dictionaries/hashes, lists) that can be used in templates and :term:`playbooks`. They are declared things, not things that are inferred from the remote system's current state or nature (which is what Facts are). YAML Ansible does not want to force people to write programming language code to automate infrastructure, so Ansible uses YAML to define :term:`playbook ` configuration languages and also variable files. YAML is nice because it has a minimum of syntax and is very clean and easy for people to skim. It is a good data format for configuration files and humans, but also machine readable. Ansible's usage of YAML stemmed from Michael DeHaan's first use of it inside of Cobbler around 2006. YAML is fairly popular in the dynamic language community and the format has libraries available for serialization in many languages (Python, Perl, Ruby, and so on). .. seealso:: :ref:`ansible_faq` Frequently asked questions :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/interpreter_discovery.rst0000644000000000000000000000471400000000000030613 0ustar00rootroot00000000000000.. _interpreter_discovery: Interpreter Discovery ===================== Most Ansible modules that execute under a POSIX environment require a Python interpreter on the target host. Unless configured otherwise, Ansible will attempt to discover a suitable Python interpreter on each target host the first time a Python module is executed for that host. To control the discovery behavior: * for individual hosts and groups, use the ``ansible_python_interpreter`` inventory variable * globally, use the ``interpreter_python`` key in the ``[defaults]`` section of ``ansible.cfg`` Use one of the following values: auto_legacy : Detects the target OS platform, distribution, and version, then consults a table listing the correct Python interpreter and path for each platform/distribution/version. If an entry is found, and ``/usr/bin/python`` is absent, uses the discovered interpreter (and path). If an entry is found, and ``/usr/bin/python`` is present, uses ``/usr/bin/python`` and issues a warning. This exception provides temporary compatibility with previous versions of Ansible that always defaulted to ``/usr/bin/python``, so if you have installed Python and other dependencies at ``/usr/bin/python`` on some hosts, Ansible will find and use them with this setting. If no entry is found, or the listed Python is not present on the target host, searches a list of common Python interpreter paths and uses the first one found; also issues a warning that future installation of another Python interpreter could alter the one chosen. auto : (default in 2.12) Detects the target OS platform, distribution, and version, then consults a table listing the correct Python interpreter and path for each platform/distribution/version. If an entry is found, uses the discovered interpreter. If no entry is found, or the listed Python is not present on the target host, searches a list of common Python interpreter paths and uses the first one found; also issues a warning that future installation of another Python interpreter could alter the one chosen. auto_legacy_silent Same as ``auto_legacy``, but does not issue warnings. auto_silent Same as ``auto``, but does not issue warnings. You can still set ``ansible_python_interpreter`` to a specific path at any variable level (for example, in host_vars, in vars files, in playbooks, and so on). Setting a specific path completely disables automatic interpreter discovery; Ansible always uses the path specified. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5115561 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/logging.rst0000644000000000000000000000267400000000000025612 0ustar00rootroot00000000000000********************** Logging Ansible output ********************** By default Ansible sends output about plays, tasks, and module arguments to your screen (STDOUT) on the control node. If you want to capture Ansible output in a log, you have three options: * To save Ansible output in a single log on the control node, set the ``log_path`` :ref:`configuration file setting `. You may also want to set ``display_args_to_stdout``, which helps to differentiate similar tasks by including variable values in the Ansible output. * To save Ansible output in separate logs, one on each managed node, set the ``no_target_syslog`` and ``syslog_facility`` :ref:`configuration file settings `. * To save Ansible output to a secure database, use AWX or :ref:`Red Hat Ansible Automation Platform `. You can then review history based on hosts, projects, and particular inventories over time, using graphs and/or a REST API. Protecting sensitive data with ``no_log`` ========================================= If you save Ansible output to a log, you expose any secret data in your Ansible output, such as passwords and user names. To keep sensitive values out of your logs, mark tasks that expose them with the ``no_log: True`` attribute. However, the ``no_log`` attribute does not affect debugging output, so be careful not to debug playbooks in a production environment. See :ref:`keep_secret_data` for an example. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/module_utils.rst0000644000000000000000000000336600000000000026670 0ustar00rootroot00000000000000.. _ansible.module_utils: .. _module_utils: *************************************************************** Ansible Reference: Module Utilities *************************************************************** This page documents utilities intended to be helpful when writing Ansible modules in Python. AnsibleModule -------------- To use this functionality, include ``from ansible.module_utils.basic import AnsibleModule`` in your module. .. autoclass:: ansible.module_utils.basic.AnsibleModule :members: :noindex: Basic ------ To use this functionality, include ``import ansible.module_utils.basic`` in your module. .. automodule:: ansible.module_utils.basic :members: Argument Spec --------------------- Classes and functions for validating parameters against an argument spec. ArgumentSpecValidator ===================== .. autoclass:: ansible.module_utils.common.arg_spec.ArgumentSpecValidator :members: ValidationResult ================ .. autoclass:: ansible.module_utils.common.arg_spec.ValidationResult :members: :member-order: bysource :private-members: _no_log_values # This only works in sphinx >= 3.2. Otherwise it shows all private members with doc strings. Parameters ========== .. automodule:: ansible.module_utils.common.parameters :members: .. py:data:: DEFAULT_TYPE_VALIDATORS :class:`dict` of type names, such as ``'str'``, and the default function used to check that type, :func:`~ansible.module_utils.common.validation.check_type_str` in this case. Validation ========== Standalone functions for validating various parameter types. .. automodule:: ansible.module_utils.common.validation :members: Errors ------ .. automodule:: ansible.module_utils.errors :members: :member-order: bysource ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/python_3_support.rst0000644000000000000000000000770100000000000027517 0ustar00rootroot00000000000000================ Python 3 Support ================ Ansible 2.5 and above work with Python 3. Previous to 2.5, using Python 3 was considered a tech preview. This topic discusses how to set up your controller and managed machines to use Python 3. .. note:: On the controller we support Python 3.5 or greater and Python 2.7 or greater. Module-side, we support Python 3.5 or greater and Python 2.6 or greater. On the controller side ---------------------- The easiest way to run :command:`/usr/bin/ansible` under Python 3 is to install it with the Python3 version of pip. This will make the default :command:`/usr/bin/ansible` run with Python3: .. code-block:: shell $ pip3 install ansible $ ansible --version | grep "python version" python version = 3.6.2 (default, Sep 22 2017, 08:28:09) [GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] If you are running Ansible :ref:`from_source` and want to use Python 3 with your source checkout, run your command via ``python3``. For example: .. code-block:: shell $ source ./hacking/env-setup $ python3 $(which ansible) localhost -m ping $ python3 $(which ansible-playbook) sample-playbook.yml .. note:: Individual Linux distribution packages may be packaged for Python2 or Python3. When running from distro packages you'll only be able to use Ansible with the Python version for which it was installed. Sometimes distros will provide a means of installing for several Python versions (via a separate package or via some commands that are run after install). You'll need to check with your distro to see if that applies in your case. Using Python 3 on the managed machines with commands and playbooks ------------------------------------------------------------------ * Ansible will automatically detect and use Python 3 on many platforms that ship with it. To explicitly configure a Python 3 interpreter, set the ``ansible_python_interpreter`` inventory variable at a group or host level to the location of a Python 3 interpreter, such as :command:`/usr/bin/python3`. The default interpreter path may also be set in ``ansible.cfg``. .. seealso:: :ref:`interpreter_discovery` for more information. .. code-block:: ini # Example inventory that makes an alias for localhost that uses Python3 localhost-py3 ansible_host=localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3 # Example of setting a group of hosts to use Python3 [py3-hosts] ubuntu16 fedora27 [py3-hosts:vars] ansible_python_interpreter=/usr/bin/python3 .. seealso:: :ref:`intro_inventory` for more information. * Run your command or playbook: .. code-block:: shell $ ansible localhost-py3 -m ping $ ansible-playbook sample-playbook.yml Note that you can also use the `-e` command line option to manually set the python interpreter when you run a command. This can be useful if you want to test whether a specific module or playbook has any bugs under Python 3. For example: .. code-block:: shell $ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3' $ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3' What to do if an incompatibility is found ----------------------------------------- We have spent several releases squashing bugs and adding new tests so that Ansible's core feature set runs under both Python 2 and Python 3. However, bugs may still exist in edge cases and many of the modules shipped with Ansible are maintained by the community and not all of those may be ported yet. If you find a bug running under Python 3 you can submit a bug report on `Ansible's GitHub project `_. Be sure to mention Python3 in the bug report so that the right people look at it. If you would like to fix the code and submit a pull request on github, you can refer to :ref:`developing_python_3` for information on how we fix common Python3 compatibility issues in the Ansible codebase. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/release_and_maintenance.rst0000644000000000000000000000205500000000000030761 0ustar00rootroot00000000000000.. _release_and_maintenance: ************************ Releases and maintenance ************************ .. _release_cycle: .. _release_schedule: .. _release_freezing: .. _development_and_stable_version_maintenance_workflow: .. _release_changelogs: See the `the devel release and maintenance page `_ for up to date information. .. note:: This link takes you to a different version of the Ansible documentation. Use the version selection on the left or your browser back button to return to this version of the documentation. .. seealso:: :ref:`community_committer_guidelines` Guidelines for Ansible core contributors and maintainers :ref:`testing_strategies` Testing strategies :ref:`ansible_community_guide` Community information and contributing `Development Mailing List `_ Mailing list for development topics :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/special_variables.rst0000644000000000000000000001623600000000000027633 0ustar00rootroot00000000000000.. _special_variables: Special Variables ================= Magic variables --------------- These variables cannot be set directly by the user; Ansible will always override them to reflect internal state. ansible_check_mode Boolean that indicates if we are in check mode or not ansible_config_file The full path of used Ansible configuration file ansible_dependent_role_names The names of the roles currently imported into the current play as dependencies of other plays ansible_diff_mode Boolean that indicates if we are in diff mode or not ansible_forks Integer reflecting the number of maximum forks available to this run ansible_inventory_sources List of sources used as inventory ansible_limit Contents of the ``--limit`` CLI option for the current execution of Ansible ansible_loop A dictionary/map containing extended loop information when enabled via ``loop_control.extended`` ansible_loop_var The name of the value provided to ``loop_control.loop_var``. Added in ``2.8`` ansible_index_var The name of the value provided to ``loop_control.index_var``. Added in ``2.9`` ansible_parent_role_names When the current role is being executed by means of an :ref:`include_role ` or :ref:`import_role ` action, this variable contains a list of all parent roles, with the most recent role (in other words, the role that included/imported this role) being the first item in the list. When multiple inclusions occur, this list lists the *last* role (in other words, the role that included this role) as the *first* item in the list. It is also possible that a specific role exists more than once in this list. For example: When role **A** includes role **B**, inside role B, ``ansible_parent_role_names`` will equal to ``['A']``. If role **B** then includes role **C**, the list becomes ``['B', 'A']``. ansible_parent_role_paths When the current role is being executed by means of an :ref:`include_role ` or :ref:`import_role ` action, this variable contains a list of all parent roles, with the most recent role (in other words, the role that included/imported this role) being the first item in the list. Please refer to ``ansible_parent_role_names`` for the order of items in this list. ansible_play_batch List of active hosts in the current play run limited by the serial, aka 'batch'. Failed/Unreachable hosts are not considered 'active'. ansible_play_hosts List of hosts in the current play run, not limited by the serial. Failed/Unreachable hosts are excluded from this list. ansible_play_hosts_all List of all the hosts that were targeted by the play ansible_play_role_names The names of the roles currently imported into the current play. This list does **not** contain the role names that are implicitly included via dependencies. ansible_playbook_python The path to the python interpreter being used by Ansible on the controller ansible_role_names The names of the roles currently imported into the current play, or roles referenced as dependencies of the roles imported into the current play. ansible_role_name The fully qualified collection role name, in the format of ``namespace.collection.role_name`` ansible_collection_name The name of the collection the task that is executing is a part of. In the format of ``namespace.collection`` ansible_run_tags Contents of the ``--tags`` CLI option, which specifies which tags will be included for the current run. Note that if ``--tags`` is not passed, this variable will default to ``["all"]``. ansible_search_path Current search path for action plugins and lookups, in other words, where we search for relative paths when you do ``template: src=myfile`` ansible_skip_tags Contents of the ``--skip-tags`` CLI option, which specifies which tags will be skipped for the current run. ansible_verbosity Current verbosity setting for Ansible ansible_version Dictionary/map that contains information about the current running version of ansible, it has the following keys: full, major, minor, revision and string. group_names List of groups the current host is part of groups A dictionary/map with all the groups in inventory and each group has the list of hosts that belong to it hostvars A dictionary/map with all the hosts in inventory and variables assigned to them inventory_hostname The inventory name for the 'current' host being iterated over in the play inventory_hostname_short The short version of `inventory_hostname` inventory_dir The directory of the inventory source in which the `inventory_hostname` was first defined inventory_file The file name of the inventory source in which the `inventory_hostname` was first defined omit Special variable that allows you to 'omit' an option in a task, for example ``- user: name=bob home={{ bobs_home|default(omit) }}`` play_hosts Deprecated, the same as ansible_play_batch ansible_play_name The name of the currently executed play. Added in ``2.8``. (`name` attribute of the play, not file name of the playbook.) playbook_dir The path to the directory of the playbook that was passed to the ``ansible-playbook`` command line. role_name The name of the role currently being executed. role_names Deprecated, the same as ansible_play_role_names role_path The path to the dir of the currently running role Facts ----- These are variables that contain information pertinent to the current host (`inventory_hostname`). They are only available if gathered first. See :ref:`vars_and_facts` for more information. ansible_facts Contains any facts gathered or cached for the `inventory_hostname` Facts are normally gathered by the :ref:`setup ` module automatically in a play, but any module can return facts. ansible_local Contains any 'local facts' gathered or cached for the `inventory_hostname`. The keys available depend on the custom facts created. See the :ref:`setup ` module and :ref:`local_facts` for more details. .. _connection_variables: Connection variables --------------------- Connection variables are normally used to set the specifics on how to execute actions on a target. Most of them correspond to connection plugins, but not all are specific to them; other plugins like shell, terminal and become are normally involved. Only the common ones are described as each connection/become/shell/etc plugin can define its own overrides and specific variables. See :ref:`general_precedence_rules` for how connection variables interact with :ref:`configuration settings`, :ref:`command-line options`, and :ref:`playbook keywords`. ansible_become_user The user Ansible 'becomes' after using privilege escalation. This must be available to the 'login user'. ansible_connection The connection plugin actually used for the task on the target host. ansible_host The ip/name of the target host to use instead of `inventory_hostname`. ansible_python_interpreter The path to the Python executable Ansible should use on the target host. ansible_user The user Ansible 'logs in' as. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/test_strategies.rst0000644000000000000000000002752000000000000027372 0ustar00rootroot00000000000000.. _testing_strategies: Testing Strategies ================== .. _testing_intro: Integrating Testing With Ansible Playbooks `````````````````````````````````````````` Many times, people ask, "how can I best integrate testing with Ansible playbooks?" There are many options. Ansible is actually designed to be a "fail-fast" and ordered system, therefore it makes it easy to embed testing directly in Ansible playbooks. In this chapter, we'll go into some patterns for integrating tests of infrastructure and discuss the right level of testing that may be appropriate. .. note:: This is a chapter about testing the application you are deploying, not the chapter on how to test Ansible modules during development. For that content, please hop over to the Development section. By incorporating a degree of testing into your deployment workflow, there will be fewer surprises when code hits production and, in many cases, tests can be used in production to prevent failed updates from migrating across an entire installation. Since it's push-based, it's also very easy to run the steps on the localhost or testing servers. Ansible lets you insert as many checks and balances into your upgrade workflow as you would like to have. The Right Level of Testing `````````````````````````` Ansible resources are models of desired-state. As such, it should not be necessary to test that services are started, packages are installed, or other such things. Ansible is the system that will ensure these things are declaratively true. Instead, assert these things in your playbooks. .. code-block:: yaml tasks: - ansible.builtin.service: name: foo state: started enabled: yes If you think the service may not be started, the best thing to do is request it to be started. If the service fails to start, Ansible will yell appropriately. (This should not be confused with whether the service is doing something functional, which we'll show more about how to do later). .. _check_mode_drift: Check Mode As A Drift Test `````````````````````````` In the above setup, `--check` mode in Ansible can be used as a layer of testing as well. If running a deployment playbook against an existing system, using the `--check` flag to the `ansible` command will report if Ansible thinks it would have had to have made any changes to bring the system into a desired state. This can let you know up front if there is any need to deploy onto the given system. Ordinarily, scripts and commands don't run in check mode, so if you want certain steps to execute in normal mode even when the `--check` flag is used, such as calls to the script module, disable check mode for those tasks:: roles: - webserver tasks: - ansible.builtin.script: verify.sh check_mode: no Modules That Are Useful for Testing ``````````````````````````````````` Certain playbook modules are particularly good for testing. Below is an example that ensures a port is open:: tasks: - ansible.builtin.wait_for: host: "{{ inventory_hostname }}" port: 22 delegate_to: localhost Here's an example of using the URI module to make sure a web service returns:: tasks: - action: uri url=https://www.example.com return_content=yes register: webpage - fail: msg: 'service is not happy' when: "'AWESOME' not in webpage.content" It's easy to push an arbitrary script (in any language) on a remote host and the script will automatically fail if it has a non-zero return code:: tasks: - ansible.builtin.script: test_script1 - ansible.builtin.script: test_script2 --parameter value --parameter2 value If using roles (you should be, roles are great!), scripts pushed by the script module can live in the 'files/' directory of a role. And the assert module makes it very easy to validate various kinds of truth:: tasks: - ansible.builtin.shell: /usr/bin/some-command --parameter value register: cmd_result - ansible.builtin.assert: that: - "'not ready' not in cmd_result.stderr" - "'gizmo enabled' in cmd_result.stdout" Should you feel the need to test for the existence of files that are not declaratively set by your Ansible configuration, the 'stat' module is a great choice:: tasks: - ansible.builtin.stat: path: /path/to/something register: p - ansible.builtin.assert: that: - p.stat.exists and p.stat.isdir As mentioned above, there's no need to check things like the return codes of commands. Ansible is checking them automatically. Rather than checking for a user to exist, consider using the user module to make it exist. Ansible is a fail-fast system, so when there is an error creating that user, it will stop the playbook run. You do not have to check up behind it. Testing Lifecycle ````````````````` If writing some degree of basic validation of your application into your playbooks, they will run every time you deploy. As such, deploying into a local development VM and a staging environment will both validate that things are according to plan ahead of your production deploy. Your workflow may be something like this:: - Use the same playbook all the time with embedded tests in development - Use the playbook to deploy to a staging environment (with the same playbooks) that simulates production - Run an integration test battery written by your QA team against staging - Deploy to production, with the same integrated tests. Something like an integration test battery should be written by your QA team if you are a production webservice. This would include things like Selenium tests or automated API tests and would usually not be something embedded into your Ansible playbooks. However, it does make sense to include some basic health checks into your playbooks, and in some cases it may be possible to run a subset of the QA battery against remote nodes. This is what the next section covers. Integrating Testing With Rolling Updates ```````````````````````````````````````` If you have read into :ref:`playbooks_delegation` it may quickly become apparent that the rolling update pattern can be extended, and you can use the success or failure of the playbook run to decide whether to add a machine into a load balancer or not. This is the great culmination of embedded tests:: --- - hosts: webservers serial: 5 pre_tasks: - name: take out of load balancer pool ansible.builtin.command: /usr/bin/take_out_of_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 roles: - common - webserver - apply_testing_checks post_tasks: - name: add back to load balancer pool ansible.builtin.command: /usr/bin/add_back_to_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 Of course in the above, the "take out of the pool" and "add back" steps would be replaced with a call to an Ansible load balancer module or appropriate shell command. You might also have steps that use a monitoring module to start and end an outage window for the machine. However, what you can see from the above is that tests are used as a gate -- if the "apply_testing_checks" step is not performed, the machine will not go back into the pool. Read the delegation chapter about "max_fail_percentage" and you can also control how many failing tests will stop a rolling update from proceeding. This above approach can also be modified to run a step from a testing machine remotely against a machine:: --- - hosts: webservers serial: 5 pre_tasks: - name: take out of load balancer pool ansible.builtin.command: /usr/bin/take_out_of_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 roles: - common - webserver tasks: - ansible.builtin.script: /srv/qa_team/app_testing_script.sh --server {{ inventory_hostname }} delegate_to: testing_server post_tasks: - name: add back to load balancer pool ansible.builtin.command: /usr/bin/add_back_to_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 In the above example, a script is run from the testing server against a remote node prior to bringing it back into the pool. In the event of a problem, fix the few servers that fail using Ansible's automatically generated retry file to repeat the deploy on just those servers. Achieving Continuous Deployment ``````````````````````````````` If desired, the above techniques may be extended to enable continuous deployment practices. The workflow may look like this:: - Write and use automation to deploy local development VMs - Have a CI system like Jenkins deploy to a staging environment on every code change - The deploy job calls testing scripts to pass/fail a build on every deploy - If the deploy job succeeds, it runs the same deploy playbook against production inventory Some Ansible users use the above approach to deploy a half-dozen or dozen times an hour without taking all of their infrastructure offline. A culture of automated QA is vital if you wish to get to this level. If you are still doing a large amount of manual QA, you should still make the decision on whether to deploy manually as well, but it can still help to work in the rolling update patterns of the previous section and incorporate some basic health checks using modules like 'script', 'stat', 'uri', and 'assert'. Conclusion `````````` Ansible believes you should not need another framework to validate basic things of your infrastructure is true. This is the case because Ansible is an order-based system that will fail immediately on unhandled errors for a host, and prevent further configuration of that host. This forces errors to the top and shows them in a summary at the end of the Ansible run. However, as Ansible is designed as a multi-tier orchestration system, it makes it very easy to incorporate tests into the end of a playbook run, either using loose tasks or roles. When used with rolling updates, testing steps can decide whether to put a machine back into a load balanced pool or not. Finally, because Ansible errors propagate all the way up to the return code of the Ansible program itself, and Ansible by default runs in an easy push-based mode, Ansible is a great step to put into a build environment if you wish to use it to roll out systems as part of a Continuous Integration/Continuous Delivery pipeline, as is covered in sections above. The focus should not be on infrastructure testing, but on application testing, so we strongly encourage getting together with your QA team and ask what sort of tests would make sense to run every time you deploy development VMs, and which sort of tests they would like to run against the staging environment on every deploy. Obviously at the development stage, unit tests are great too. But don't unit test your playbook. Ansible describes states of resources declaratively, so you don't have to. If there are cases where you want to be sure of something though, that's great, and things like stat/assert are great go-to modules for that purpose. In all, testing is a very organizational and site-specific thing. Everybody should be doing it, but what makes the most sense for your environment will vary with what you are deploying and who is using it -- but everyone benefits from a more robust and reliable deployment system. .. seealso:: :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_delegation` Delegation, useful for working with load balancers, clouds, and locally executed steps. `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/reference_appendices/tower.rst0000644000000000000000000000245500000000000025321 0ustar00rootroot00000000000000.. _ansible_platform: Red Hat Ansible Automation Platform =================================== `Red Hat Ansible Automation Platform `_ (RHAAP) is an integrated solution for operationalizing Ansible across your team, organization, and enterprise. The platform includes a controller with a web console and REST API, analytics, execution environments, and much more. RHAAP gives you role-based access control, including control over the use of securely stored credentials for SSH and other services. You can sync your inventory with a wide variety of cloud sources, and powerful multi-playbook workflows allow you to model complex processes. RHAAP logs all of your jobs, integrates well with LDAP, SAML, and other authentication sources, and has an amazing browsable REST API. Command line tools are available for easy integration with Jenkins as well. RHAAP incorporates the downstream Red Hat supported product version of Ansible AWX, the downstream Red Hat supported product version of Ansible Galaxy, and multiple SaaS offerings. Find out more about RHAAP features and on the `Red Hat Ansible Automation Platform webpage `_. A Red Hat Ansible Automation Platform subscription includes support from Red Hat, Inc. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.955559 ansible-core-2.12.0/docs/docsite/rst/roadmap/0000755000000000000000000000000000000000000020713 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/roadmap/COLLECTIONS_2_10.rst0000644000000000000000000000655600000000000023760 0ustar00rootroot00000000000000==================== Ansible project 2.10 ==================== This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-base `_ package as well. All dates are subject to change. See :ref:`base_roadmap_2_10` for the most recent updates on ansible-base. .. contents:: :local: Release Schedule ---------------- .. note:: Dates subject to change. .. note:: We plan to post weekly alpha releases to the `PyPI ansible project `_ for testing. .. warning:: We initially were going to have feature freeze on 2020-08-18. We tried this but decided to change course. Instead, we'll enter feature freeze when ansible-2.10.0 beta1 is released. - 2020-06-23: ansible-2.10 alpha freeze. No net new collections will be added to the ``ansible-2.10`` package after this date. - 2020-07-10: Ansible collections freeze date for content shuffling. Content should be in its final collection for the ansible-2.10 series of releases. No more content should move out of the ``community.general`` or ``community.network`` collections. - 2020-08-13: ansible-base 2.10 Release date, see :ref:`base_roadmap_2_10`. - 2020-08-14: final ansible-2.10 alpha. - 2020-09-01: ansible-2.10.0 beta1 and feature freeze. - No new modules or major features will be added after this date. In practice this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-1.1.0; ansible-2.10.0 could ship with community-crypto-1.1.1. It would not ship with community-crypto-1.2.0. - 2020-09-08: ansible-2.10.0 beta2. - 2020-09-15: ansible-2.10.0 rc1 and final freeze. - After this date only changes blocking a release are accepted. - Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at the community meeting (on 9-17) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_. ** Additional release candidates to be published as needed as blockers are fixed ** - 2020-09-22: ansible-2.10 GA release date. Ansible-2.10.x patch releases will occur roughly every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-base-2.10.x. Ansible-2.10.x patch releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed (example: Ansible-2.10 ships with community-crypto-1.1.0; ansible-2.10.1 may ship with community-crypto-1.2.0 but would not ship with community-crypto-2.0.0). .. note:: Minor releases will stop when :ref:`Ansible-3 ` is released. See the :ref:`Release and Maintenance Page ` for more information. Breaking changes may be introduced in ansible-3.0 although we encourage collection owners to use deprecation periods that will show up in at least one Ansible release before being changed incompatibly. For more information, reach out on a mailing list or a chat channel - see :ref:`communication` for more details. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.512556 ansible-core-2.12.0/docs/docsite/rst/roadmap/COLLECTIONS_3_0.rst0000644000000000000000000000652600000000000023675 0ustar00rootroot00000000000000.. _ansible_3_roadmap: =================== Ansible project 3.0 =================== This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-base `_ package as well. All dates are subject to change. Ansible 3.x.x includes ``ansible-base`` 2.10. See :ref:`base_roadmap_2_10` for the most recent updates on ``ansible-base``. .. contents:: :local: Release schedule ================= .. note:: Ansible is switching from its traditional versioning scheme to `semantic versioning `_ starting with this release. So this version is 3.0.0 instead of 2.11.0. :2020-12-16: Finalize rules for net-new collections submitted for the ansible release. :2021-01-27: Final day for new collections to be **reviewed and approved**. They MUST be submitted prior to this to give reviewers a chance to look them over and for collection owners to fix any problems. :2021-02-02: Ansible-3.0.0-beta1 -- feature freeze [1]_ :2021-02-09: Ansible-3.0.0-rc1 -- final freeze [2]_ [3]_ :2021-02-16: Release of Ansible-3.0.0 :2021-03-09: Release of Ansible-3.1.0 (bugfix + compatible features: every three weeks) .. [1] No new modules or major features accepted after this date. In practice this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-2.1.0; ansible-3.0.0 could ship with community-crypto-2.1.1. It would not ship with community-crypto-2.2.0. .. [2] After this date only changes blocking a release are accepted. Accepted changes require creating a new rc and may slip the final release date. .. [3] Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a community meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_. .. note:: Breaking changes may be introduced in Ansible 3.0.0, although we encourage collection owners to use deprecation periods that will show up in at least one Ansible release before the breaking change happens. Ansible minor releases ======================= Ansible 3.x.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-base-2.10.x. Ansible 3.x.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-3.0.0 ships with community-crypto-2.1.0; Ansible-3.1.0 may ship with community-crypto-2.2.0 but would not ship with community-crypto-3.0.0). .. note:: Minor releases will stop when :ref:`Ansible-4 ` is released. See the :ref:`Release and Maintenance Page ` for more information. For more information, reach out on a mailing list or a chat channel - see :ref:`communication` for more details. ansible-base release ==================== Ansible 3.x.x works with ``ansible-base`` 2.10. See :ref:`base_roadmap_2_10` for details. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/COLLECTIONS_4.rst0000644000000000000000000001030500000000000023445 0ustar00rootroot00000000000000.. _ansible_4_roadmap: =================== Ansible project 4.0 =================== This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-core `_ package as well. All dates are subject to change. See :ref:`base_roadmap_2_11` for the most recent updates on ``ansible-core``. .. contents:: :local: Release schedule ================= :2021-01-26: New Collections will be reviewed for inclusion in Ansible 4. Submit a request to include a new collection in this `GitHub Discussion `_. :2021-03-03: Ansible-4.0.0 alpha1 (biweekly ``ansible`` alphas. These are timed to coincide with the start of the ``ansible-core-2.11`` pre-releases). :2021-03-16: Ansible-4.0.0 alpha2 :2021-03-30: Ansible-4.0.0 alpha3 :2021-04-13: Last day for new collections to be submitted for inclusion in Ansible 4. Note that collections MUST be reviewed and approved before being included. There is no guarantee that we will review every collection. The earlier your collection is submitted, the more likely it will be that your collection will be reviewed and the necessary feedback can be addressed in time for inclusion. :2021-04-13: Ansible-4.0.0 alpha4 :2021-04-14: Community Meeting topic: list any new collection reviews which block release. List any backwards incompatible collection releases that beta1 should try to accommodate. :2021-04-21: Community Meeting topic: Decide what contingencies to activate for any blockers that do not meet the deadline. :2021-04-26: Last day for new collections to be **reviewed and approved** for inclusion in Ansible 4. :2021-04-26: Last day for collections to make backwards incompatible releases that will be accepted into Ansible 4. :2021-04-27: Ansible-4.0.0 beta1 -- feature freeze [1]_ (weekly beta releases. Collection owners and interested users should test for bugs). :2021-05-04: Ansible-4.0.0 beta2 :2021-05-11: Ansible-4.0.0 rc1 [2]_ [3]_ (weekly release candidates as needed. Test and alert us to any blocker bugs). :2021-05-18: Ansible-4.0.0 release :2021-06-08: Release of Ansible-4.1.0 (bugfix + compatible features: every three weeks) .. [1] No new modules or major features accepted after this date. In practice, this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community-crypto-2.1.0; ansible-3.0.0 could ship with community-crypto-2.1.1. It would not ship with community-crypto-2.2.0. .. [2] After this date only changes blocking a release are accepted. Accepted changes require creating a new rc and may slip the final release date. .. [3] Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a Community meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community meeting agenda `_. .. note:: Breaking changes will be introduced in Ansible 4.0.0, although we encourage the use of deprecation periods that will show up in at least one Ansible release before the breaking change happens, this is not guaranteed. Ansible minor releases ======================= Ansible 4.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-core-2.11.x. Ansible 4.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-4.0.0 ships with community-crypto-2.1.0; Ansible-4.1.0 may ship with community-crypto-2.2.0 but would not ship with community-crypto-3.0.0). .. note:: Minor releases will stop when Ansible-5 is released. See the :ref:`Release and Maintenance Page ` for more information. For more information, reach out on a mailing list or a chat channel - see :ref:`communication` for more details. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/COLLECTIONS_5.rst0000644000000000000000000001101200000000000023442 0ustar00rootroot00000000000000.. _ansible_5_roadmap: =================== Ansible project 5.0 =================== This release schedule includes dates for the `ansible `_ package, with a few dates for the `ansible-core `_ package as well. All dates are subject to change. See :ref:`core_roadmap_2_12` for the most recent updates on ``ansible-core``. .. contents:: :local: Release schedule ================= :2021-04-14: New Collections can be reviewed for inclusion in Ansible 5. Submit a request to include a new collection in this `GitHub Discussion `_. :2021-09-24: ansible-core feature freeze. :2021-09-27: Start of ansible-core 2.12 betas (weekly, as needed). :2021-10-05: Ansible-5.0.0 alpha1 (roughly biweekly ``ansible`` alphas timed to coincide with ``ansible-core-2.12`` pre-releases). :2021-10-12: Last day for new collections to be submitted for inclusion in Ansible-5. Collections MUST be reviewed and approved before being included. There is no guarantee that we will review every collection. The earlier your collection is submitted, the more likely it will be that your collection will be reviewed and the necessary feedback can be addressed in time for inclusion. :2021-10-13: Community Meeting topic: List any new collection reviews which block release. List any backwards incompatible collection releases that beta1 should try to accommodate. :2021-10-18: First ansible-core release candidate, stable-2.12 branch created. :2021-10-19: Ansible-5.0.0 alpha2. :2021-10-26: Last day for new collections to be **reviewed and approved** for inclusion in Ansible-5. :2021-10-27: Community Meeting topic: Decide what contingencies to activate for any blockers that do not meet the deadline. :2021-11-02: Ansible-5.0.0 alpha3. :2021-11-08: Ansible-core-2.12 released. :2021-11-08: Last day for collections to make backwards incompatible releases that will be accepted into Ansible-5. :2021-11-09: Create the ansible-build-data directory and files for Ansible-6. New collection approvals will target this. :2021-11-09: Ansible-5.0.0 beta1 -- feature freeze [1]_ (weekly beta releases; collection owners and interested users should test for bugs). :2021-11-16: Ansible-5.0.0 beta2. :2021-11-23: Ansible-5.0.0 rc1 [2]_ [3]_ (weekly release candidates as needed; test and alert us to any blocker bugs). Blocker bugs will slip release. :2021-11-30: Ansible-5.0.0 release. :2021-12-21: Release of Ansible-5.1.0 (bugfix + compatible features: every three weeks.) .. [1] No new modules or major features accepted after this date. In practice, this means we will freeze the semver collection versions to compatible release versions. For example, if the version of community.crypto on this date was community.crypto 2.1.0; Ansible-5.0.0 could ship with community.crypto 2.1.1. It would not ship with community.crypto 2.2.0. .. [2] After this date only changes blocking a release are accepted. Accepted changes require creating a new rc and may slip the final release date. .. [3] Collections will only be updated to a new version if a blocker is approved. Collection owners should discuss any blockers at a community IRC meeting (before this freeze) to decide whether to bump the version of the collection for a fix. See the `Community IRC meeting agenda `_. .. note:: Breaking changes will be introduced in Ansible 5.0.0, although we encourage the use of deprecation periods that will show up in at least one Ansible release before the breaking change happens, this is not guaranteed. Ansible minor releases ======================= Ansible 5.x minor releases will occur approximately every three weeks if changes to collections have been made or if it is deemed necessary to force an upgrade to a later ansible-core-2.12.x. Ansible 5.x minor releases may contain new features but not backwards incompatibilities. In practice, this means we will include new collection versions where either the patch or the minor version number has changed but not when the major number has changed. For example, if Ansible-5.0.0 ships with community.crypto 2.1.0; Ansible-5.1.0 may ship with community.crypto 2.2.0 but would not ship with community.crypto 3.0.0. .. note:: Minor releases will stop when Ansible-6 is released. See the :ref:`Release and Maintenance Page ` for more information. For more information, reach out on a mailing list or a chat channel - see :ref:`communication` for more details. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_10.rst0000644000000000000000000000300300000000000023245 0ustar00rootroot00000000000000.. _base_roadmap_2_10: ================= Ansible-base 2.10 ================= .. contents:: :local: Release Schedule ---------------- Expected ======== PRs must be raised well in advance of the dates below to have a chance of being included in this ansible-base release. .. note:: There is no Alpha phase in 2.10. .. note:: Dates subject to change. - 2020-06-16 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code - 2020-07-21 Release Candidate 1 (bumped from 2020-07-14) - 2020-07-24 Release Candidate 2 - 2020-07-25 Release Candidate 3 - 2020-07-30 Release Candidate 4 - 2020-08-13 Release Release Manager --------------- @sivel Planned work ============ - Migrate non-base plugins and modules from the ``ansible/ansible`` repository to smaller collection repositories - Add functionality to ease transition to collections, such as automatic redirects from the 2.9 names to the new FQCN of the plugin - Create new ``ansible-base`` package representing the ``ansible/ansible`` repository Additional Resources ==================== The 2.10 release of Ansible will fundamentally change the scope of plugins included in the ``ansible/ansible`` repository, by moving much of the plugins into smaller collection repositories that will be shipped through https://galaxy.ansible.com/ The following links have more information about this process: - https://groups.google.com/d/msg/ansible-devel/oKqgCeYTs-M/cHrOgMw8CAAJ - https://github.com/ansible-collections/overview/blob/main/README.rst ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_11.rst0000644000000000000000000000264700000000000023263 0ustar00rootroot00000000000000.. _base_roadmap_2_11: ================= Ansible-core 2.11 ================= .. contents:: :local: Release Schedule ---------------- Expected ======== PRs must be raised well in advance of the dates below to have a chance of being included in this ansible-core release. .. note:: There is no Alpha phase in 2.11. .. note:: Dates subject to change. - 2021-02-12 Feature Freeze No new functionality (including modules/plugins) to any code - 2021-03-02 Beta 1 - 2021-03-15 Beta 2 (if necessary) - 2021-03-29 Release Candidate 1 (and ``stable-2.11`` branching from ``devel``) - 2021-04-12 Release Candidate 2 (if necessary) - 2021-04-26 Release Release Manager --------------- Ansible Core Team Planned work ============ - Rename ``ansible-base`` to ``ansible-core``. - Improve UX of ``ansible-galaxy collection`` CLI, specifically as it relates to install and upgrade. - Add new Role Argument Spec feature that will allow a role to define an argument spec to be used in validating variables used by the role. - Bump the minimum Python version requirement for the controller to Python 3.8. There will be no breaking changes to this release, however ``ansible-core`` will only be packaged for Python 3.8+. ``ansible-core==2.12`` will include breaking changes requiring at least Python 3.8. - Introduce split-controller testing in ``ansible-test`` to separate dependencies for the controller from dependencies on the target. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_12.rst0000644000000000000000000000267000000000000023260 0ustar00rootroot00000000000000.. _core_roadmap_2_12: ================= Ansible-core 2.12 ================= .. contents:: :local: Release Schedule ---------------- Expected ======== PRs must be raised well in advance of the dates below to have a chance of being included in this ansible-core release. .. note:: There is no Alpha phase in 2.12. .. note:: Dates subject to change. - 2021-09-24 Feature Freeze (and ``stable-2.12`` branching from ``devel``) No new functionality (including modules/plugins) to any code - 2021-09-27 Beta 1 - 2021-10-04 Beta 2 (if necessary) - 2021-10-18 Release Candidate 1 - 2021-10-25 Release Candidate 2 (if necessary) - 2021-11-08 Release Release Manager --------------- Ansible Core Team Planned work ============ - Bump the minimum Python version requirement for the controller to Python 3.8. This will be a hard requirement. - Deprecate Python 2.6 support for managed/target hosts. The release of ``ansible-core==2.13`` will remove Python 2.6 support. - Introduce split-controller testing in ``ansible-test`` to separate dependencies for the controller from dependencies on the target. - Extend the functionality of ``module_defaults`` ``action_groups`` to be created and presented by collections. Delayed work ============ The following work has been delayed and retargeted for a future release - Implement object proxies, to expose restricted interfaces between parts of the code, and enable deprecations of attributes and variables. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_5.rst0000644000000000000000000001215500000000000023201 0ustar00rootroot00000000000000=========== Ansible 2.5 =========== **Core Engine Freeze and Module Freeze: 22 January 2018** **Core and Curated Module Freeze: 22 January 2018** **Community Module Freeze: 7 February 2018** **Release Candidate 1 will be 21 February, 2018** **Target: March 2018** **Service Release schedule: every 2-3 weeks** .. contents:: Topics Release Manager --------------- Matt Davis (IRC/GitHub: @nitzmahone) Engine improvements ------------------- - Assemble module improvements - assemble just skips when in check mode, it should be able to test if there is a difference and changed=true/false. - The same with diff, it should work as template modules does - Handle Password reset prompts cleaner - Tasks stats for rescues and ignores - Normalize temp dir usage across all subsystems - Add option to set playbook dir for adhoc, inventory and console to allow for 'relative path loading' Ansible-Config -------------- - Extend config to more plugin types and update plugins to support the new config Inventory --------- - ansible-inventory option to output group variable assignment and data (--export) - Create inventory plugins for: - aws Facts ----- - Namespacing fact variables (via a config option) implemented in ansible/ansible PR `#18445 `_. Proposal found in ansible/proposals issue `#17 `_. - Make fact collectors and gather_subset specs finer grained - Eliminate unneeded deps between fact collectors - Allow fact collectors to indicate if they need information from another fact collector to be gathered first. Static Loop Keyword ------------------- - A simpler alternative to ``with_``, ``loop:`` only takes a list - Remove complexity from loops, lookups are still available to users - Less confusing having a static directive vs a one that is dynamic depending on plugins loaded. Vault ----- - Vault secrets client inc new 'keyring' client Runtime Check on Modules for Disabling -------------------------------------- - Filter on things like "supported_by" in module metadata - Provide users with an option of "warning, error or allow/ignore" - Configurable via ansible.cfg and environment variable Windows ------- - Implement gather_subset on Windows facts - Fix Windows async + become to allow them to work together - Implement Windows become flags for controlling various modes **(done)** - logontype - elevation behavior - Convert win_updates to action plugin for auto reboot and extra features **(done)** - Spike out changing the connection over to PSRP instead of WSMV **(done- it's possible)** - Module updates - win_updates **(done)** - Fix win_updates to detect (or request) become - Add enable/disable features to win_updates - win_dsc further improvements **(done)** General Cloud ------------- - Make multi-cloud provisioning easier - Diff mode will output provisioning task results of ansible-playbook runs - Terraform module AWS --- - Focus on pull requests for various modules - Triage existing merges for modules - Module work - ec2_instance - ec2_vpc: Allow the addition of secondary IPv4 CIDRS to existing VPCs. - AWS Network Load Balancer support (NLB module, ASG support, and so on) - rds_instance Azure ----- - Azure CLI auth **(done)** - Fix Azure module results to have "high-level" output instead of raw REST API dictionary **(partial, more to come in 2.6)** - Deprecate Azure automatic storage accounts in azure_rm_virtualmachine **(breaks on Azure Stack, punted until AS supports managed disks)** Network Roadmap --------------- - Refactor common network shared code into package **(done)** - Convert various nxos modules to use declarative intent **(done)** - Refactor various modules to use the cliconf plugin **(done)** - Add various missing declarative modules for supported platforms and functions **(done)** - Implement a feature that handles platform differences and feature unavailability **(done)** - netconf-config.py should provide control for deployment strategy - Create netconf connection plugin **(done)** - Create netconf fact module - Turn network_cli into a usable connection type **(done)** - Implements jsonrpc message passing for ansible-connection **(done)** - Improve logging for ansible-connection **(done)** - Improve stdout output for failures whilst using persistent connection **(done)** - Create IOS-XR NetConf Plugin and refactor iosxr modules to use netconf plugin **(done)** - Refactor junos modules to use netconf plugin **(done)** - Filters: Add a filter to convert XML response from a network device to JSON object **(done)** Documentation ------------- - Extend documentation to more plugins - Document vault-password-client scripts. - Network Documentation - New landing page (to replace intro_networking) **(done)** - Platform specific guides **(done)** - Walk through: Getting Started **(done)** - Networking and ``become`` **(done)** - Best practice **(done)** Contributor Quality of Life --------------------------- - Finish PSScriptAnalyer integration with ansible-test (for enforcing Powershell style) **(done)** - Resolve issues requiring skipping of some integration tests on Python 3. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_6.rst0000644000000000000000000000361700000000000023205 0ustar00rootroot00000000000000=========== Ansible 2.6 =========== .. contents:: Topics Release Schedule ---------------- Actual ====== - 2018-05-17 Core Freeze (Engine and Core Modules/Plugins) - 2018-05-21 Alpha Release 1 - 2018-05-25 Community Freeze (Non-Core Modules/Plugins) - 2018-05-25 Branch stable-2.6 - 2018-05-30 Alpha Release 2 - 2018-06-05 Release Candidate 1 - 2018-06-08 Release Candidate 2 - 2018-06-18 Release Candidate 3 - 2018-06-25 Release Candidate 4 - 2018-06-26 Release Candidate 5 - 2018-06-28 Final Release Release Manager --------------- * 2.6.0-2.6.12 Matt Clay (IRC/GitHub: @mattclay) * 2.6.13+ Toshio Kuratomi (IRC: abadger1999; GitHub: @abadger) Engine improvements ------------------- - Version 2.6 is largely going to be a stabilization release for Core code. - Some of the items covered in this release, but are not limited to are the following: - ``ansible-inventory`` - ``import_*`` - ``include_*`` - Test coverage - Performance Testing Core Modules ------------ - Adopt-a-module Campaign - Review current status of all Core Modules - Reduce backlog of open issues against these modules Cloud Modules ------------- Network ------- Connection work ================ * New connection plugin: eAPI `proposal#102 `_ * New connection plugin: NX-API * Support for configurable options for network_cli & netconf Modules ======= * New ``net_get`` - platform independent module for pulling configuration via SCP/SFTP over network_cli * New ``net_put`` - platform independent module for pushing configuration via SCP/SFTP over network_cli * New ``netconf_get`` - Netconf module to fetch configuration and state data `proposal#104 `_ Other Features ================ * Stretch & tech preview: Configuration caching for network_cli. Opt-in feature to avoid ``show running`` performance hit Windows ------- ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_7.rst0000644000000000000000000001102300000000000023174 0ustar00rootroot00000000000000=========== Ansible 2.7 =========== .. contents:: Topics Release Schedule ---------------- Expected ======== - 2018-08-23 Core Freeze (Engine and Core Modules/Plugins) - 2018-08-23 Alpha Release 1 - 2018-08-30 Community Freeze (Non-Core Modules/Plugins) - 2018-08-30 Beta Release 1 - 2018-09-06 Release Candidate 1 (If needed) - 2018-09-13 Release Candidate 2 (If needed) - 2018-09-20 Release Candidate 3 (If needed) - 2018-09-27 Release Candidate 4 (If needed) - 2018-10-04 General Availability Release Manager --------------- Toshio Kuratomi (IRC: abadger1999; GitHub: @abadger) Cleaning Duty ------------- - Drop Py2.6 for controllers `Docs PR #42971 `_ and `issue #42972 `_ - Remove dependency on simplejson `issue #42761 `_ Engine Improvements ------------------- - Performance improvement invoking Python modules `pr #41749 `_ - Jinja native types will allow for users to render a Python native type. `pr #32738 `_ Core Modules ------------ - Include feature changes and improvements - Create new argument ``apply`` that will allow for included tasks to inherit explicitly provided attributes. `pr #39236 `_ - Create "private" functionality for allowing vars/default to be exposed outside of roles. `pr #41330 `_ - Provide a parameter for the ``template`` module to output to different encoding formats `pr #42171 `_ - ``reboot`` module for Linux hosts (@samdoran) `pr #35205 `_ Cloud Modules ------------- General ======= * Cloud auth plugin `proposal #24 `_ AWS === * Inventory plugin for RDS `pr #41919 `_ * Count support for `ec2_instance` * `aws_eks` module `pr #41183 `_ * Cloudformation stack sets support (`PR#41669 `_) * RDS instance and snapshot modules `pr #39994 `_ `pr #43789 `_ * Diff mode improvements for cloud modules `pr #44533 `_ Azure ===== * Azure inventory plugin `issue #42769 `__ Network ------- General ======= * Refactor the APIs in cliconf (`issue #39056 `_) and netconf (`issue #39160 `_) plugins so that they have a uniform signature across supported network platforms. **done** (`PR #41846 `_) (`PR #43643 `_) (`PR #43837 `_) (`PR #43203 `_) (`PR #42300 `_) (`PR #44157 `_) Modules ======= * New ``cli_config`` module `issue #39228 `_ **done** `PR #42413 `_. * New ``cli_command`` module `issue #39284 `_ * Refactor ``netconf_config`` module to add additional functionality. **done** `proposal #104 `_ (`PR #44379 `_) Windows ------- General ======= * Added new connection plugin that uses PSRP as the connection protocol `pr #41729 `__ Modules ======= * Revamp Chocolatey to fix bugs and support offline installation `pr #43013 `_. * Add Chocolatey modules that can manage the following Chocolatey features * `Sources `_ `pr #42790 `_ * `Features `_ `pr #42848 `_ * `Config `_ `pr #42915 `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_8.rst0000644000000000000000000000142700000000000023204 0ustar00rootroot00000000000000=========== Ansible 2.8 =========== .. contents:: :local: Release Schedule ---------------- Expected ======== PRs must be raised well in advance of the dates below to have a chance of being included in this Ansible release. - 2019-04-04 Alpha 1 **Core freeze** No new features to ``support:core`` code. Includes no new options to existing Core modules - 2019-04-11 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code - 2019-04-25 Release Candidate 1 - 2019-05-02 Release Candidate 2 - 2019-05-10 Release Candidate 3 - 2019-05-16 Release Release Manager --------------- Toshio Kuratomi (IRC: abadger1999; GitHub: @abadger) Planned work ============ See the `Ansible 2.8 Project Board `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ROADMAP_2_9.rst0000644000000000000000000000146700000000000023211 0ustar00rootroot00000000000000=========== Ansible 2.9 =========== .. contents:: :local: Release Schedule ---------------- Expected ======== PRs must be raised well in advance of the dates below to have a chance of being included in this Ansible release. .. note:: There is no Alpha phase in 2.9. - 2019-08-29 Beta 1 **Feature freeze** No new functionality (including modules/plugins) to any code - 2019-09-19 Release Candidate 1 - 2019-10-03 Release Candidate 2 - 2019-10-10 Release Candidate 3 - 2019-10-17 Release Candidate 4 (if needed) - 2019-10-24 Release Candidate 5 (if needed) - 2019-10-31 Release Release Manager --------------- TBD Temporarily, Matt Davis (@nitzmahone) or Matt Clay (@mattclay) on IRC or github. Planned work ============ See the `Ansible 2.9 Project Board `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ansible_core_roadmap_index.rst0000644000000000000000000000315000000000000026763 0ustar00rootroot00000000000000.. _ansible_core_roadmaps: ansible-core Roadmaps ===================== The ``ansible-core`` team develops a roadmap for each major and minor ``ansible-core`` release. The latest roadmap shows current work; older roadmaps provide a history of the project. We don't publish roadmaps for subminor versions. So 2.10 and 2.11 have roadmaps, but 2.10.1 does not. .. note:: Ansible renamed ``ansible-base`` to ``ansible-core``. We incorporate team and community feedback in each roadmap, and aim for further transparency and better inclusion of both community desires and submissions. Each roadmap offers a *best guess*, based on the ``ansible-core`` team's experience and on requests and feedback from the community, of what will be included in a given release. However, some items on the roadmap may be dropped due to time constraints, lack of community maintainers, and so on. Each roadmap is published both as an idea of what is upcoming in ``ansible-core``, and as a medium for seeking further feedback from the community. You can submit feedback on the current roadmap in multiple ways: - Edit the agenda of an `Core Team Meeting `_ (preferred) - Post on the ``#ansible-devel`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) - Email the ansible-devel list See :ref:`Ansible communication channels ` for details on how to join and use the email lists and chat channels. .. toctree:: :maxdepth: 1 :glob: :caption: ansible-core Roadmaps ROADMAP_2_12 ROADMAP_2_11 ROADMAP_2_10 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/ansible_roadmap_index.rst0000644000000000000000000000275200000000000025762 0ustar00rootroot00000000000000.. _ansible_roadmaps: Ansible Roadmap =============== The Ansible team develops a roadmap for each major and minor Ansible release. The latest roadmap shows current work; older roadmaps provide a history of the project. We don't publish roadmaps for subminor versions. So 2.10 and 2.11 have roadmaps, but 2.10.1 does not. We incorporate team and community feedback in each roadmap, and aim for further transparency and better inclusion of both community desires and submissions. Each roadmap offers a *best guess*, based on the Ansible team's experience and on requests and feedback from the community, of what will be included in a given release. However, some items on the roadmap may be dropped due to time constraints, lack of community maintainers, and so on. Each roadmap is published both as an idea of what is upcoming in Ansible, and as a medium for seeking further feedback from the community. You can submit feedback on the current roadmap in multiple ways: - Edit the agenda of an `Ansible Community Meeting `_ (preferred) - Post on the ``#ansible-community`` chat channel (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) See :ref:`Ansible communication channels ` for details on how to join and use our chat channels. .. toctree:: :maxdepth: 1 :glob: :caption: Ansible Release Roadmaps COLLECTIONS_5 COLLECTIONS_4 COLLECTIONS_3_0 COLLECTIONS_2_10 old_roadmap_index ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/index.rst0000644000000000000000000000023500000000000022554 0ustar00rootroot00000000000000.. _roadmaps: Roadmaps =============== .. toctree:: :maxdepth: 1 :glob: ansible_roadmap_index ansible_core_roadmap_index old_roadmap_index ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.513556 ansible-core-2.12.0/docs/docsite/rst/roadmap/old_roadmap_index.rst0000644000000000000000000000053300000000000025116 0ustar00rootroot00000000000000.. _old_roadmaps: Older Roadmaps =============== Older roadmaps are listed here to provide a history of the Ansible project. See :ref:`roadmaps` to find current Ansible and ``ansible-base`` roadmaps. .. toctree:: :maxdepth: 1 :glob: :caption: Older Roadmaps ROADMAP_2_9 ROADMAP_2_8 ROADMAP_2_7 ROADMAP_2_6 ROADMAP_2_5 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.957559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/0000755000000000000000000000000000000000000022433 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/cloud_guides.rst0000644000000000000000000000135100000000000025633 0ustar00rootroot00000000000000.. _cloud_guides: ************************** Legacy Public Cloud Guides ************************** The legacy guides in this section may be out of date. They cover using Ansible with a range of public cloud platforms. They explore particular use cases in greater depth and provide a more "top-down" explanation of some basic features. Guides for using public clouds are moving into collections. We are migrating these guides into collections. Please update your links for the following guides: :ref:`ansible_collections.amazon.aws.docsite.aws_intro` .. toctree:: :maxdepth: 1 guide_alicloud guide_cloudstack guide_gce guide_azure guide_online guide_oracle guide_packet guide_rax guide_scaleway guide_vultr ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_aci.rst0000644000000000000000000007201200000000000025100 0ustar00rootroot00000000000000.. _aci_guide: Cisco ACI Guide =============== .. _aci_guide_intro: What is Cisco ACI ? ------------------- Application Centric Infrastructure (ACI) ........................................ The Cisco Application Centric Infrastructure (ACI) allows application requirements to define the network. This architecture simplifies, optimizes, and accelerates the entire application deployment life cycle. Application Policy Infrastructure Controller (APIC) ................................................... The APIC manages the scalable ACI multi-tenant fabric. The APIC provides a unified point of automation and management, policy programming, application deployment, and health monitoring for the fabric. The APIC, which is implemented as a replicated synchronized clustered controller, optimizes performance, supports any application anywhere, and provides unified operation of the physical and virtual infrastructure. The APIC enables network administrators to easily define the optimal network for applications. Data center operators can clearly see how applications consume network resources, easily isolate and troubleshoot application and infrastructure problems, and monitor and profile resource usage patterns. The Cisco Application Policy Infrastructure Controller (APIC) API enables applications to directly connect with a secure, shared, high-performance resource pool that includes network, compute, and storage capabilities. ACI Fabric .......... The Cisco Application Centric Infrastructure (ACI) Fabric includes Cisco Nexus 9000 Series switches with the APIC to run in the leaf/spine ACI fabric mode. These switches form a "fat-tree" network by connecting each leaf node to each spine node; all other devices connect to the leaf nodes. The APIC manages the ACI fabric. The ACI fabric provides consistent low-latency forwarding across high-bandwidth links (40 Gbps, with a 100-Gbps future capability). Traffic with the source and destination on the same leaf switch is handled locally, and all other traffic travels from the ingress leaf to the egress leaf through a spine switch. Although this architecture appears as two hops from a physical perspective, it is actually a single Layer 3 hop because the fabric operates as a single Layer 3 switch. The ACI fabric object-oriented operating system (OS) runs on each Cisco Nexus 9000 Series node. It enables programming of objects for each configurable element of the system. The ACI fabric OS renders policies from the APIC into a concrete model that runs in the physical infrastructure. The concrete model is analogous to compiled software; it is the form of the model that the switch operating system can execute. All the switch nodes contain a complete copy of the concrete model. When an administrator creates a policy in the APIC that represents a configuration, the APIC updates the logical model. The APIC then performs the intermediate step of creating a fully elaborated policy that it pushes into all the switch nodes where the concrete model is updated. The APIC is responsible for fabric activation, switch firmware management, network policy configuration, and instantiation. While the APIC acts as the centralized policy and network management engine for the fabric, it is completely removed from the data path, including the forwarding topology. Therefore, the fabric can still forward traffic even when communication with the APIC is lost. More information ................ Various resources exist to start learning ACI, here is a list of interesting articles from the community. - `Adam Raffe: Learning ACI `_ - `Luca Relandini: ACI for dummies `_ - `Cisco DevNet Learning Labs about ACI `_ .. _aci_guide_modules: Using the ACI modules --------------------- The Ansible ACI modules provide a user-friendly interface to managing your ACI environment using Ansible playbooks. For instance ensuring that a specific tenant exists, is done using the following Ansible task using the aci_tenant module: .. code-block:: yaml - name: Ensure tenant customer-xyz exists aci_tenant: host: my-apic-1 username: admin password: my-password tenant: customer-xyz description: Customer XYZ state: present A complete list of existing ACI modules is available on the content tab of the `ACI collection on Ansible Galaxy `_. If you want to learn how to write your own ACI modules to contribute, look at the :ref:`Developing Cisco ACI modules ` section. Querying ACI configuration .......................... A module can also be used to query a specific object. .. code-block:: yaml - name: Query tenant customer-xyz aci_tenant: host: my-apic-1 username: admin password: my-password tenant: customer-xyz state: query register: my_tenant Or query all objects. .. code-block:: yaml - name: Query all tenants aci_tenant: host: my-apic-1 username: admin password: my-password state: query register: all_tenants After registering the return values of the aci_tenant task as shown above, you can access all tenant information from variable ``all_tenants``. Running on the controller locally ................................. As originally designed, Ansible modules are shipped to and run on the remote target(s), however the ACI modules (like most network-related modules) do not run on the network devices or controller (in this case the APIC), but they talk directly to the APIC's REST interface. For this very reason, the modules need to run on the local Ansible controller (or are delegated to another system that *can* connect to the APIC). Gathering facts ``````````````` Because we run the modules on the Ansible controller gathering facts will not work. That is why when using these ACI modules it is mandatory to disable facts gathering. You can do this globally in your ``ansible.cfg`` or by adding ``gather_facts: no`` to every play. .. code-block:: yaml :emphasize-lines: 3 - name: Another play in my playbook hosts: my-apic-1 gather_facts: no tasks: - name: Create a tenant aci_tenant: ... Delegating to localhost ``````````````````````` So let us assume we have our target configured in the inventory using the FQDN name as the ``ansible_host`` value, as shown below. .. code-block:: yaml :emphasize-lines: 3 apics: my-apic-1: ansible_host: apic01.fqdn.intra ansible_user: admin ansible_password: my-password One way to set this up is to add to every task the directive: ``delegate_to: localhost``. .. code-block:: yaml :emphasize-lines: 8 - name: Query all tenants aci_tenant: host: '{{ ansible_host }}' username: '{{ ansible_user }}' password: '{{ ansible_password }}' state: query delegate_to: localhost register: all_tenants If one would forget to add this directive, Ansible will attempt to connect to the APIC using SSH and attempt to copy the module and run it remotely. This will fail with a clear error, yet may be confusing to some. Using the local connection method ````````````````````````````````` Another option frequently used, is to tie the ``local`` connection method to this target so that every subsequent task for this target will use the local connection method (hence run it locally, rather than use SSH). In this case the inventory may look like this: .. code-block:: yaml :emphasize-lines: 6 apics: my-apic-1: ansible_host: apic01.fqdn.intra ansible_user: admin ansible_password: my-password ansible_connection: local But used tasks do not need anything special added. .. code-block:: yaml - name: Query all tenants aci_tenant: host: '{{ ansible_host }}' username: '{{ ansible_user }}' password: '{{ ansible_password }}' state: query register: all_tenants .. hint:: For clarity we have added ``delegate_to: localhost`` to all the examples in the module documentation. This helps to ensure first-time users can easily copy&paste parts and make them work with a minimum of effort. Common parameters ................. Every Ansible ACI module accepts the following parameters that influence the module's communication with the APIC REST API: host Hostname or IP address of the APIC. port Port to use for communication. (Defaults to ``443`` for HTTPS, and ``80`` for HTTP) username User name used to log on to the APIC. (Defaults to ``admin``) password Password for ``username`` to log on to the APIC, using password-based authentication. private_key Private key for ``username`` to log on to APIC, using signature-based authentication. This could either be the raw private key content (include header/footer) or a file that stores the key content. *New in version 2.5* certificate_name Name of the certificate in the ACI Web GUI. This defaults to either the ``username`` value or the ``private_key`` file base name). *New in version 2.5* timeout Timeout value for socket-level communication. use_proxy Use system proxy settings. (Defaults to ``yes``) use_ssl Use HTTPS or HTTP for APIC REST communication. (Defaults to ``yes``) validate_certs Validate certificate when using HTTPS communication. (Defaults to ``yes``) output_level Influence the level of detail ACI modules return to the user. (One of ``normal``, ``info`` or ``debug``) *New in version 2.5* Proxy support ............. By default, if an environment variable ``_proxy`` is set on the target host, requests will be sent through that proxy. This behaviour can be overridden by setting a variable for this task (see :ref:`playbooks_environment`), or by using the ``use_proxy`` module parameter. HTTP redirects can redirect from HTTP to HTTPS so ensure that the proxy environment for both protocols is correctly configured. If proxy support is not needed, but the system may have it configured nevertheless, use the parameter ``use_proxy: no`` to avoid accidental system proxy usage. .. hint:: Selective proxy support using the ``no_proxy`` environment variable is also supported. Return values ............. .. versionadded:: 2.5 The following values are always returned: current The resulting state of the managed object, or results of your query. The following values are returned when ``output_level: info``: previous The original state of the managed object (before any change was made). proposed The proposed config payload, based on user-supplied values. sent The sent config payload, based on user-supplied values and the existing configuration. The following values are returned when ``output_level: debug`` or ``ANSIBLE_DEBUG=1``: filter_string The filter used for specific APIC queries. method The HTTP method used for the sent payload. (Either ``GET`` for queries, ``DELETE`` or ``POST`` for changes) response The HTTP response from the APIC. status The HTTP status code for the request. url The url used for the request. .. note:: The module return values are documented in detail as part of each module's documentation. More information ................ Various resources exist to start learn more about ACI programmability, we recommend the following links: - :ref:`Developing Cisco ACI modules ` - `Jacob McGill: Automating Cisco ACI with Ansible `_ - `Cisco DevNet Learning Labs about ACI and Ansible `_ .. _aci_guide_auth: ACI authentication ------------------ Password-based authentication ............................. If you want to log on using a username and password, you can use the following parameters with your ACI modules: .. code-block:: yaml username: admin password: my-password Password-based authentication is very simple to work with, but it is not the most efficient form of authentication from ACI's point-of-view as it requires a separate login-request and an open session to work. To avoid having your session time-out and requiring another login, you can use the more efficient Signature-based authentication. .. note:: Password-based authentication also may trigger anti-DoS measures in ACI v3.1+ that causes session throttling and results in HTTP 503 errors and login failures. .. warning:: Never store passwords in plain text. The "Vault" feature of Ansible allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plain text in your playbooks or roles. These vault files can then be distributed or placed in source control. See :ref:`playbooks_vault` for more information. Signature-based authentication using certificates ................................................. .. versionadded:: 2.5 Using signature-based authentication is more efficient and more reliable than password-based authentication. Generate certificate and private key ```````````````````````````````````` Signature-based authentication requires a (self-signed) X.509 certificate with private key, and a configuration step for your AAA user in ACI. To generate a working X.509 certificate and private key, use the following procedure: .. code-block:: bash $ openssl req -new -newkey rsa:1024 -days 36500 -nodes -x509 -keyout admin.key -out admin.crt -subj '/CN=Admin/O=Your Company/C=US' Configure your local user ````````````````````````` Perform the following steps: - Add the X.509 certificate to your ACI AAA local user at :guilabel:`ADMIN` » :guilabel:`AAA` - Click :guilabel:`AAA Authentication` - Check that in the :guilabel:`Authentication` field the :guilabel:`Realm` field displays :guilabel:`Local` - Expand :guilabel:`Security Management` » :guilabel:`Local Users` - Click the name of the user you want to add a certificate to, in the :guilabel:`User Certificates` area - Click the :guilabel:`+` sign and in the :guilabel:`Create X509 Certificate` enter a certificate name in the :guilabel:`Name` field * If you use the basename of your private key here, you don't need to enter ``certificate_name`` in Ansible - Copy and paste your X.509 certificate in the :guilabel:`Data` field. You can automate this by using the following Ansible task: .. code-block:: yaml - name: Ensure we have a certificate installed aci_aaa_user_certificate: host: my-apic-1 username: admin password: my-password aaa_user: admin certificate_name: admin certificate: "{{ lookup('file', 'pki/admin.crt') }}" # This will read the certificate data from a local file .. note:: Signature-based authentication only works with local users. Use signature-based authentication with Ansible ``````````````````````````````````````````````` You need the following parameters with your ACI module(s) for it to work: .. code-block:: yaml :emphasize-lines: 2,3 username: admin private_key: pki/admin.key certificate_name: admin # This could be left out ! or you can use the private key content: .. code-block:: yaml :emphasize-lines: 2,3 username: admin private_key: | -----BEGIN PRIVATE KEY----- <> -----END PRIVATE KEY----- certificate_name: admin # This could be left out ! .. hint:: If you use a certificate name in ACI that matches the private key's basename, you can leave out the ``certificate_name`` parameter like the example above. Using Ansible Vault to encrypt the private key `````````````````````````````````````````````` .. versionadded:: 2.8 To start, encrypt the private key and give it a strong password. .. code-block:: bash ansible-vault encrypt admin.key Use a text editor to open the private-key. You should have an encrypted cert now. .. code-block:: bash $ANSIBLE_VAULT;1.1;AES256 56484318584354658465121889743213151843149454864654151618131547984132165489484654 45641818198456456489479874513215489484843614848456466655432455488484654848489498 .... Copy and paste the new encrypted cert into your playbook as a new variable. .. code-block:: yaml private_key: !vault | $ANSIBLE_VAULT;1.1;AES256 56484318584354658465121889743213151843149454864654151618131547984132165489484654 45641818198456456489479874513215489484843614848456466655432455488484654848489498 .... Use the new variable for the private_key: .. code-block:: yaml username: admin private_key: "{{ private_key }}" certificate_name: admin # This could be left out ! When running the playbook, use "--ask-vault-pass" to decrypt the private key. .. code-block:: bash ansible-playbook site.yaml --ask-vault-pass More information ```````````````` - Detailed information about Signature-based Authentication is available from `Cisco APIC Signature-Based Transactions `_. - More information on Ansible Vault can be found on the :ref:`Ansible Vault ` page. .. _aci_guide_rest: Using ACI REST with Ansible --------------------------- While already a lot of ACI modules exists in the Ansible distribution, and the most common actions can be performed with these existing modules, there's always something that may not be possible with off-the-shelf modules. The aci_rest module provides you with direct access to the APIC REST API and enables you to perform any task not already covered by the existing modules. This may seem like a complex undertaking, but you can generate the needed REST payload for any action performed in the ACI web interface effortlessly. Built-in idempotency .................... Because the APIC REST API is intrinsically idempotent and can report whether a change was made, the aci_rest module automatically inherits both capabilities and is a first-class solution for automating your ACI infrastructure. As a result, users that require more powerful low-level access to their ACI infrastructure don't have to give up on idempotency and don't have to guess whether a change was performed when using the aci_rest module. Using the aci_rest module ......................... The aci_rest module accepts the native XML and JSON payloads, but additionally accepts inline YAML payload (structured like JSON). The XML payload requires you to use a path ending with ``.xml`` whereas JSON or YAML require the path to end with ``.json``. When you're making modifications, you can use the POST or DELETE methods, whereas doing just queries require the GET method. For instance, if you would like to ensure a specific tenant exists on ACI, these below four examples are functionally identical: **XML** (Native ACI REST) .. code-block:: yaml - aci_rest: host: my-apic-1 private_key: pki/admin.key method: post path: /api/mo/uni.xml content: | **JSON** (Native ACI REST) .. code-block:: yaml - aci_rest: host: my-apic-1 private_key: pki/admin.key method: post path: /api/mo/uni.json content: { "fvTenant": { "attributes": { "name": "customer-xyz", "descr": "Customer XYZ" } } } **YAML** (Ansible-style REST) .. code-block:: yaml - aci_rest: host: my-apic-1 private_key: pki/admin.key method: post path: /api/mo/uni.json content: fvTenant: attributes: name: customer-xyz descr: Customer XYZ **Ansible task** (Dedicated module) .. code-block:: yaml - aci_tenant: host: my-apic-1 private_key: pki/admin.key tenant: customer-xyz description: Customer XYZ state: present .. hint:: The XML format is more practical when there is a need to template the REST payload (inline), but the YAML format is more convenient for maintaining your infrastructure-as-code and feels more naturally integrated with Ansible playbooks. The dedicated modules offer a more simple, abstracted, but also a more limited experience. Use what feels best for your use-case. More information ................ Plenty of resources exist to learn about ACI's APIC REST interface, we recommend the links below: - `The ACI collection on Ansible Galaxy `_ - `APIC REST API Configuration Guide `_ -- Detailed guide on how the APIC REST API is designed and used, incl. many examples - `APIC Management Information Model reference `_ -- Complete reference of the APIC object model - `Cisco DevNet Learning Labs about ACI and REST `_ .. _aci_guide_ops: Operational examples -------------------- Here is a small overview of useful operational tasks to reuse in your playbooks. Feel free to contribute more useful snippets. Waiting for all controllers to be ready ....................................... You can use the below task after you started to build your APICs and configured the cluster to wait until all the APICs have come online. It will wait until the number of controllers equals the number listed in the ``apic`` inventory group. .. code-block:: yaml - name: Waiting for all controllers to be ready aci_rest: host: my-apic-1 private_key: pki/admin.key method: get path: /api/node/class/topSystem.json?query-target-filter=eq(topSystem.role,"controller") register: topsystem until: topsystem|success and topsystem.totalCount|int >= groups['apic']|count >= 3 retries: 20 delay: 30 Waiting for cluster to be fully-fit ................................... The below example waits until the cluster is fully-fit. In this example you know the number of APICs in the cluster and you verify each APIC reports a 'fully-fit' status. .. code-block:: yaml - name: Waiting for cluster to be fully-fit aci_rest: host: my-apic-1 private_key: pki/admin.key method: get path: /api/node/class/infraWiNode.json?query-target-filter=wcard(infraWiNode.dn,"topology/pod-1/node-1/av") register: infrawinode until: > infrawinode|success and infrawinode.totalCount|int >= groups['apic']|count >= 3 and infrawinode.imdata[0].infraWiNode.attributes.health == 'fully-fit' and infrawinode.imdata[1].infraWiNode.attributes.health == 'fully-fit' and infrawinode.imdata[2].infraWiNode.attributes.health == 'fully-fit' retries: 30 delay: 30 .. _aci_guide_errors: APIC error messages ------------------- The following error messages may occur and this section can help you understand what exactly is going on and how to fix/avoid them. APIC Error 122: unknown managed object class 'polUni' In case you receive this error while you are certain your aci_rest payload and object classes are seemingly correct, the issue might be that your payload is not in fact correct JSON (for example, the sent payload is using single quotes, rather than double quotes), and as a result the APIC is not correctly parsing your object classes from the payload. One way to avoid this is by using a YAML or an XML formatted payload, which are easier to construct correctly and modify later. APIC Error 400: invalid data at line '1'. Attributes are missing, tag 'attributes' must be specified first, before any other tag Although the JSON specification allows unordered elements, the APIC REST API requires that the JSON ``attributes`` element precede the ``children`` array or other elements. So you need to ensure that your payload conforms to this requirement. Sorting your dictionary keys will do the trick just fine. If you don't have any attributes, it may be necessary to add: ``attributes: {}`` as the APIC does expect the entry to precede any ``children``. APIC Error 801: property descr of uni/tn-TENANT/ap-AP failed validation for value 'A "legacy" network' Some values in the APIC have strict format-rules to comply to, and the internal APIC validation check for the provided value failed. In the above case, the ``description`` parameter (internally known as ``descr``) only accepts values conforming to `Regex: [a-zA-Z0-9\\!#$%()*,-./:;@ _{|}~?&+]+ `_, in general it must not include quotes or square brackets. .. _aci_guide_known_issues: Known issues ------------ The aci_rest module is a wrapper around the APIC REST API. As a result any issues related to the APIC will be reflected in the use of this module. All below issues either have been reported to the vendor, and most can simply be avoided. Too many consecutive API calls may result in connection throttling Starting with ACI v3.1 the APIC will actively throttle password-based authenticated connection rates over a specific threshold. This is as part of an anti-DDOS measure but can act up when using Ansible with ACI using password-based authentication. Currently, one solution is to increase this threshold within the nginx configuration, but using signature-based authentication is recommended. **NOTE:** It is advisable to use signature-based authentication with ACI as it not only prevents connection-throttling, but also improves general performance when using the ACI modules. Specific requests may not reflect changes correctly (`#35401 `_) There is a known issue where specific requests to the APIC do not properly reflect changed in the resulting output, even when we request those changes explicitly from the APIC. In one instance using the path ``api/node/mo/uni/infra.xml`` fails, where ``api/node/mo/uni/infra/.xml`` does work correctly. **NOTE:** A workaround is to register the task return values (for example, ``register: this``) and influence when the task should report a change by adding: ``changed_when: this.imdata != []``. Specific requests are known to not be idempotent (`#35050 `_) The behaviour of the APIC is inconsistent to the use of ``status="created"`` and ``status="deleted"``. The result is that when you use ``status="created"`` in your payload the resulting tasks are not idempotent and creation will fail when the object was already created. However this is not the case with ``status="deleted"`` where such call to an non-existing object does not cause any failure whatsoever. **NOTE:** A workaround is to avoid using ``status="created"`` and instead use ``status="modified"`` when idempotency is essential to your workflow.. Setting user password is not idempotent (`#35544 `_) Due to an inconsistency in the APIC REST API, a task that sets the password of a locally-authenticated user is not idempotent. The APIC will complain with message ``Password history check: user dag should not use previous 5 passwords``. **NOTE:** There is no workaround for this issue. .. _aci_guide_community: ACI Ansible community --------------------- If you have specific issues with the ACI modules, or a feature request, or you like to contribute to the ACI project by proposing changes or documentation updates, look at the Ansible Community wiki ACI page at: https://github.com/ansible/community/wiki/Network:-ACI You will find our roadmap, an overview of open ACI issues and pull-requests, and more information about who we are. If you have an interest in using ACI with Ansible, feel free to join! We occasionally meet online (on the #ansible-network chat channel, using Matrix at ansible.im or using IRC at `irc.libera.chat `_) to track progress and prepare for new Ansible releases. .. seealso:: `ACI collection on Ansible Galaxy `_ View the content tab for a complete list of supported ACI modules. :ref:`Developing Cisco ACI modules ` A walkthrough on how to develop new Cisco ACI modules to contribute back. `ACI community `_ The Ansible ACI community wiki page, includes roadmap, ideas and development documentation. :ref:`network_guide` A detailed guide on how to use Ansible for automating network infrastructure. `Network Working Group `_ The Ansible Network community page, includes contact information and meeting information. `User Mailing List `_ Have a question? Stop by the google group! ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_alicloud.rst0000644000000000000000000001053700000000000026144 0ustar00rootroot00000000000000Alibaba Cloud Compute Services Guide ==================================== .. _alicloud_intro: Introduction ```````````` Ansible contains several modules for controlling and managing Alibaba Cloud Compute Services (Alicloud). This guide explains how to use the Alicloud Ansible modules together. All Alicloud modules require ``footmark`` - install it on your control machine with ``pip install footmark``. Cloud modules, including Alicloud modules, execute on your local machine (the control machine) with ``connection: local``, rather than on remote machines defined in your hosts. Normally, you'll use the following pattern for plays that provision Alicloud resources:: - hosts: localhost connection: local vars: - ... tasks: - ... .. _alicloud_authentication: Authentication `````````````` You can specify your Alicloud authentication credentials (access key and secret key) by passing them as environment variables or by storing them in a vars file. To pass authentication credentials as environment variables:: export ALICLOUD_ACCESS_KEY='Alicloud123' export ALICLOUD_SECRET_KEY='AlicloudSecret123' To store authentication credentials in a vars_file, encrypt them with :ref:`Ansible Vault` to keep them secure, then list them:: --- alicloud_access_key: "--REMOVED--" alicloud_secret_key: "--REMOVED--" Note that if you store your credentials in a vars_file, you need to refer to them in each Alicloud module. For example:: - ali_instance: alicloud_access_key: "{{alicloud_access_key}}" alicloud_secret_key: "{{alicloud_secret_key}}" image_id: "..." .. _alicloud_provisioning: Provisioning ```````````` Alicloud modules create Alicloud ECS instances, disks, virtual private clouds, virtual switches, security groups and other resources. You can use the ``count`` parameter to control the number of resources you create or terminate. For example, if you want exactly 5 instances tagged ``NewECS``, set the ``count`` of instances to 5 and the ``count_tag`` to ``NewECS``, as shown in the last task of the example playbook below. If there are no instances with the tag ``NewECS``, the task creates 5 new instances. If there are 2 instances with that tag, the task creates 3 more. If there are 8 instances with that tag, the task terminates 3 of those instances. If you do not specify a ``count_tag``, the task creates the number of instances you specify in ``count`` with the ``instance_name`` you provide. :: # alicloud_setup.yml - hosts: localhost connection: local tasks: - name: Create VPC ali_vpc: cidr_block: '{{ cidr_block }}' vpc_name: new_vpc register: created_vpc - name: Create VSwitch ali_vswitch: alicloud_zone: '{{ alicloud_zone }}' cidr_block: '{{ vsw_cidr }}' vswitch_name: new_vswitch vpc_id: '{{ created_vpc.vpc.id }}' register: created_vsw - name: Create security group ali_security_group: name: new_group vpc_id: '{{ created_vpc.vpc.id }}' rules: - proto: tcp port_range: 22/22 cidr_ip: 0.0.0.0/0 priority: 1 rules_egress: - proto: tcp port_range: 80/80 cidr_ip: 192.168.0.54/32 priority: 1 register: created_group - name: Create a set of instances ali_instance: security_groups: '{{ created_group.group_id }}' instance_type: ecs.n4.small image_id: "{{ ami_id }}" instance_name: "My-new-instance" instance_tags: Name: NewECS Version: 0.0.1 count: 5 count_tag: Name: NewECS allocate_public_ip: true max_bandwidth_out: 50 vswitch_id: '{{ created_vsw.vswitch.id}}' register: create_instance In the example playbook above, data about the vpc, vswitch, group, and instances created by this playbook are saved in the variables defined by the "register" keyword in each task. Each Alicloud module offers a variety of parameter options. Not all options are demonstrated in the above example. See each individual module for further details and examples. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_aws.rst0000644000000000000000000000031100000000000025127 0ustar00rootroot00000000000000:orphan: Amazon Web Services Guide ========================= The content on this page has moved. Please see the updated :ref:`ansible_collections.amazon.aws.docsite.aws_intro` in the AWS collection. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_azure.rst0000644000000000000000000004445400000000000025503 0ustar00rootroot00000000000000Microsoft Azure Guide ===================== Ansible includes a suite of modules for interacting with Azure Resource Manager, giving you the tools to easily create and orchestrate infrastructure on the Microsoft Azure Cloud. Requirements ------------ Using the Azure Resource Manager modules requires having specific Azure SDK modules installed on the host running Ansible. .. code-block:: bash $ pip install 'ansible[azure]' If you are running Ansible from source, you can install the dependencies from the root directory of the Ansible repo. .. code-block:: bash $ pip install .[azure] You can also directly run Ansible in `Azure Cloud Shell `_, where Ansible is pre-installed. Authenticating with Azure ------------------------- Using the Azure Resource Manager modules requires authenticating with the Azure API. You can choose from two authentication strategies: * Active Directory Username/Password * Service Principal Credentials Follow the directions for the strategy you wish to use, then proceed to `Providing Credentials to Azure Modules`_ for instructions on how to actually use the modules and authenticate with the Azure API. Using Service Principal ....................... There is now a detailed official tutorial describing `how to create a service principal `_. After stepping through the tutorial you will have: * Your Client ID, which is found in the "client id" box in the "Configure" page of your application in the Azure portal * Your Secret key, generated when you created the application. You cannot show the key after creation. If you lost the key, you must create a new one in the "Configure" page of your application. * And finally, a tenant ID. It's a UUID (for example, ABCDEFGH-1234-ABCD-1234-ABCDEFGHIJKL) pointing to the AD containing your application. You will find it in the URL from within the Azure portal, or in the "view endpoints" of any given URL. Using Active Directory Username/Password ........................................ To create an Active Directory username/password: * Connect to the Azure Classic Portal with your admin account * Create a user in your default AAD. You must NOT activate Multi-Factor Authentication * Go to Settings - Administrators * Click on Add and enter the email of the new user. * Check the checkbox of the subscription you want to test with this user. * Login to Azure Portal with this new user to change the temporary password to a new one. You will not be able to use the temporary password for OAuth login. Providing Credentials to Azure Modules ...................................... The modules offer several ways to provide your credentials. For a CI/CD tool such as Ansible AWX or Jenkins, you will most likely want to use environment variables. For local development you may wish to store your credentials in a file within your home directory. And of course, you can always pass credentials as parameters to a task within a playbook. The order of precedence is parameters, then environment variables, and finally a file found in your home directory. Using Environment Variables ``````````````````````````` To pass service principal credentials via the environment, define the following variables: * AZURE_CLIENT_ID * AZURE_SECRET * AZURE_SUBSCRIPTION_ID * AZURE_TENANT To pass Active Directory username/password via the environment, define the following variables: * AZURE_AD_USER * AZURE_PASSWORD * AZURE_SUBSCRIPTION_ID To pass Active Directory username/password in ADFS via the environment, define the following variables: * AZURE_AD_USER * AZURE_PASSWORD * AZURE_CLIENT_ID * AZURE_TENANT * AZURE_ADFS_AUTHORITY_URL "AZURE_ADFS_AUTHORITY_URL" is optional. It's necessary only when you have own ADFS authority like https://yourdomain.com/adfs. Storing in a File ````````````````` When working in a development environment, it may be desirable to store credentials in a file. The modules will look for credentials in ``$HOME/.azure/credentials``. This file is an ini style file. It will look as follows: .. code-block:: ini [default] subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx secret=xxxxxxxxxxxxxxxxx tenant=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx .. note:: If your secret values contain non-ASCII characters, you must `URL Encode `_ them to avoid login errors. It is possible to store multiple sets of credentials within the credentials file by creating multiple sections. Each section is considered a profile. The modules look for the [default] profile automatically. Define AZURE_PROFILE in the environment or pass a profile parameter to specify a specific profile. Passing as Parameters ````````````````````` If you wish to pass credentials as parameters to a task, use the following parameters for service principal: * client_id * secret * subscription_id * tenant Or, pass the following parameters for Active Directory username/password: * ad_user * password * subscription_id Or, pass the following parameters for ADFS username/password: * ad_user * password * client_id * tenant * adfs_authority_url "adfs_authority_url" is optional. It's necessary only when you have own ADFS authority like https://yourdomain.com/adfs. Other Cloud Environments ------------------------ To use an Azure Cloud other than the default public cloud (for example, Azure China Cloud, Azure US Government Cloud, Azure Stack), pass the "cloud_environment" argument to modules, configure it in a credential profile, or set the "AZURE_CLOUD_ENVIRONMENT" environment variable. The value is either a cloud name as defined by the Azure Python SDK (for example, "AzureChinaCloud", "AzureUSGovernment"; defaults to "AzureCloud") or an Azure metadata discovery URL (for Azure Stack). Creating Virtual Machines ------------------------- There are two ways to create a virtual machine, both involving the azure_rm_virtualmachine module. We can either create a storage account, network interface, security group and public IP address and pass the names of these objects to the module as parameters, or we can let the module do the work for us and accept the defaults it chooses. Creating Individual Components .............................. An Azure module is available to help you create a storage account, virtual network, subnet, network interface, security group and public IP. Here is a full example of creating each of these and passing the names to the ``azure.azcollection.azure_rm_virtualmachine`` module at the end: .. code-block:: yaml - name: Create storage account azure.azcollection.azure_rm_storageaccount: resource_group: Testing name: testaccount001 account_type: Standard_LRS - name: Create virtual network azure.azcollection.azure_rm_virtualnetwork: resource_group: Testing name: testvn001 address_prefixes: "10.10.0.0/16" - name: Add subnet azure.azcollection.azure_rm_subnet: resource_group: Testing name: subnet001 address_prefix: "10.10.0.0/24" virtual_network: testvn001 - name: Create public ip azure.azcollection.azure_rm_publicipaddress: resource_group: Testing allocation_method: Static name: publicip001 - name: Create security group that allows SSH azure.azcollection.azure_rm_securitygroup: resource_group: Testing name: secgroup001 rules: - name: SSH protocol: Tcp destination_port_range: 22 access: Allow priority: 101 direction: Inbound - name: Create NIC azure.azcollection.azure_rm_networkinterface: resource_group: Testing name: testnic001 virtual_network: testvn001 subnet: subnet001 public_ip_name: publicip001 security_group: secgroup001 - name: Create virtual machine azure.azcollection.azure_rm_virtualmachine: resource_group: Testing name: testvm001 vm_size: Standard_D1 storage_account: testaccount001 storage_container: testvm001 storage_blob: testvm001.vhd admin_username: admin admin_password: Password! network_interfaces: testnic001 image: offer: CentOS publisher: OpenLogic sku: '7.1' version: latest Each of the Azure modules offers a variety of parameter options. Not all options are demonstrated in the above example. See each individual module for further details and examples. Creating a Virtual Machine with Default Options ............................................... If you simply want to create a virtual machine without specifying all the details, you can do that as well. The only caveat is that you will need a virtual network with one subnet already in your resource group. Assuming you have a virtual network already with an existing subnet, you can run the following to create a VM: .. code-block:: yaml azure.azcollection.azure_rm_virtualmachine: resource_group: Testing name: testvm10 vm_size: Standard_D1 admin_username: chouseknecht ssh_password_enabled: false ssh_public_keys: "{{ ssh_keys }}" image: offer: CentOS publisher: OpenLogic sku: '7.1' version: latest Creating a Virtual Machine in Availability Zones .................................................. If you want to create a VM in an availability zone, consider the following: * Both OS disk and data disk must be a 'managed disk', not an 'unmanaged disk'. * When creating a VM with the ``azure.azcollection.azure_rm_virtualmachine`` module, you need to explicitly set the ``managed_disk_type`` parameter to change the OS disk to a managed disk. Otherwise, the OS disk becomes an unmanaged disk. * When you create a data disk with the ``azure.azcollection.azure_rm_manageddisk`` module, you need to explicitly specify the ``storage_account_type`` parameter to make it a managed disk. Otherwise, the data disk will be an unmanaged disk. * A managed disk does not require a storage account or a storage container, unlike an unmanaged disk. In particular, note that once a VM is created on an unmanaged disk, an unnecessary storage container named "vhds" is automatically created. * When you create an IP address with the ``azure.azcollection.azure_rm_publicipaddress`` module, you must set the ``sku`` parameter to ``standard``. Otherwise, the IP address cannot be used in an availability zone. Dynamic Inventory Script ------------------------ If you are not familiar with Ansible's dynamic inventory scripts, check out :ref:`Intro to Dynamic Inventory `. The Azure Resource Manager inventory script is called `azure_rm.py `_. It authenticates with the Azure API exactly the same as the Azure modules, which means you will either define the same environment variables described above in `Using Environment Variables`_, create a ``$HOME/.azure/credentials`` file (also described above in `Storing in a File`_), or pass command line parameters. To see available command line options execute the following: .. code-block:: bash $ wget https://raw.githubusercontent.com/ansible-community/contrib-scripts/main/inventory/azure_rm.py $ ./azure_rm.py --help As with all dynamic inventory scripts, the script can be executed directly, passed as a parameter to the ansible command, or passed directly to ansible-playbook using the -i option. No matter how it is executed the script produces JSON representing all of the hosts found in your Azure subscription. You can narrow this down to just hosts found in a specific set of Azure resource groups, or even down to a specific host. For a given host, the inventory script provides the following host variables: .. code-block:: JSON { "ansible_host": "XXX.XXX.XXX.XXX", "computer_name": "computer_name2", "fqdn": null, "id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Compute/virtualMachines/object-name", "image": { "offer": "CentOS", "publisher": "OpenLogic", "sku": "7.1", "version": "latest" }, "location": "westus", "mac_address": "00-00-5E-00-53-FE", "name": "object-name", "network_interface": "interface-name", "network_interface_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/networkInterfaces/object-name1", "network_security_group": null, "network_security_group_id": null, "os_disk": { "name": "object-name", "operating_system_type": "Linux" }, "plan": null, "powerstate": "running", "private_ip": "172.26.3.6", "private_ip_alloc_method": "Static", "provisioning_state": "Succeeded", "public_ip": "XXX.XXX.XXX.XXX", "public_ip_alloc_method": "Static", "public_ip_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/publicIPAddresses/object-name", "public_ip_name": "object-name", "resource_group": "galaxy-production", "security_group": "object-name", "security_group_id": "/subscriptions/subscription-id/resourceGroups/galaxy-production/providers/Microsoft.Network/networkSecurityGroups/object-name", "tags": { "db": "mysql" }, "type": "Microsoft.Compute/virtualMachines", "virtual_machine_size": "Standard_DS4" } Host Groups ........... By default hosts are grouped by: * azure (all hosts) * location name * resource group name * security group name * tag key * tag key_value * os_disk operating_system_type (Windows/Linux) You can control host groupings and host selection by either defining environment variables or creating an azure_rm.ini file in your current working directory. NOTE: An .ini file will take precedence over environment variables. NOTE: The name of the .ini file is the basename of the inventory script (in other words, 'azure_rm') with a '.ini' extension. This allows you to copy, rename and customize the inventory script and have matching .ini files all in the same directory. Control grouping using the following variables defined in the environment: * AZURE_GROUP_BY_RESOURCE_GROUP=yes * AZURE_GROUP_BY_LOCATION=yes * AZURE_GROUP_BY_SECURITY_GROUP=yes * AZURE_GROUP_BY_TAG=yes * AZURE_GROUP_BY_OS_FAMILY=yes Select hosts within specific resource groups by assigning a comma separated list to: * AZURE_RESOURCE_GROUPS=resource_group_a,resource_group_b Select hosts for specific tag key by assigning a comma separated list of tag keys to: * AZURE_TAGS=key1,key2,key3 Select hosts for specific locations by assigning a comma separated list of locations to: * AZURE_LOCATIONS=eastus,eastus2,westus Or, select hosts for specific tag key:value pairs by assigning a comma separated list key:value pairs to: * AZURE_TAGS=key1:value1,key2:value2 If you don't need the powerstate, you can improve performance by turning off powerstate fetching: * AZURE_INCLUDE_POWERSTATE=no A sample azure_rm.ini file is included along with the inventory script in `here `_. An .ini file will contain the following: .. code-block:: ini [azure] # Control which resource groups are included. By default all resources groups are included. # Set resource_groups to a comma separated list of resource groups names. #resource_groups= # Control which tags are included. Set tags to a comma separated list of keys or key:value pairs #tags= # Control which locations are included. Set locations to a comma separated list of locations. #locations= # Include powerstate. If you don't need powerstate information, turning it off improves runtime performance. # Valid values: yes, no, true, false, True, False, 0, 1. include_powerstate=yes # Control grouping with the following boolean flags. Valid values: yes, no, true, false, True, False, 0, 1. group_by_resource_group=yes group_by_location=yes group_by_security_group=yes group_by_tag=yes group_by_os_family=yes Examples ........ Here are some examples using the inventory script: .. code-block:: bash # Download inventory script $ wget https://raw.githubusercontent.com/ansible-community/contrib-scripts/main/inventory/azure_rm.py # Execute /bin/uname on all instances in the Testing resource group $ ansible -i azure_rm.py Testing -m shell -a "/bin/uname -a" # Execute win_ping on all Windows instances $ ansible -i azure_rm.py windows -m win_ping # Execute ping on all Linux instances $ ansible -i azure_rm.py linux -m ping # Use the inventory script to print instance specific information $ ./azure_rm.py --host my_instance_host_name --resource-groups=Testing --pretty # Use the inventory script with ansible-playbook $ ansible-playbook -i ./azure_rm.py test_playbook.yml Here is a simple playbook to exercise the Azure inventory script: .. code-block:: yaml - name: Test the inventory script hosts: azure connection: local gather_facts: no tasks: - debug: msg: "{{ inventory_hostname }} has powerstate {{ powerstate }}" You can execute the playbook with something like: .. code-block:: bash $ ansible-playbook -i ./azure_rm.py test_azure_inventory.yml Disabling certificate validation on Azure endpoints ................................................... When an HTTPS proxy is present, or when using Azure Stack, it may be necessary to disable certificate validation for Azure endpoints in the Azure modules. This is not a recommended security practice, but may be necessary when the system CA store cannot be altered to include the necessary CA certificate. Certificate validation can be controlled by setting the "cert_validation_mode" value in a credential profile, via the "AZURE_CERT_VALIDATION_MODE" environment variable, or by passing the "cert_validation_mode" argument to any Azure module. The default value is "validate"; setting the value to "ignore" will prevent all certificate validation. The module argument takes precedence over a credential profile value, which takes precedence over the environment value. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_cloudstack.rst0000644000000000000000000003216200000000000026502 0ustar00rootroot00000000000000CloudStack Cloud Guide ====================== .. _cloudstack_introduction: Introduction ```````````` The purpose of this section is to explain how to put Ansible modules together to use Ansible in a CloudStack context. You will find more usage examples in the details section of each module. Ansible contains a number of extra modules for interacting with CloudStack based clouds. All modules support check mode, are designed to be idempotent, have been created and tested, and are maintained by the community. .. note:: Some of the modules will require domain admin or root admin privileges. Prerequisites ````````````` Prerequisites for using the CloudStack modules are minimal. In addition to Ansible itself, all of the modules require the python library ``cs`` https://pypi.org/project/cs/ You'll need this Python module installed on the execution host, usually your workstation. .. code-block:: bash $ pip install cs Or alternatively starting with Debian 9 and Ubuntu 16.04: .. code-block:: bash $ sudo apt install python-cs .. note:: cs also includes a command line interface for ad hoc interaction with the CloudStack API, for example ``$ cs listVirtualMachines state=Running``. Limitations and Known Issues ```````````````````````````` VPC support has been improved since Ansible 2.3 but is still not yet fully implemented. The community is working on the VPC integration. Credentials File ```````````````` You can pass credentials and the endpoint of your cloud as module arguments, however in most cases it is a far less work to store your credentials in the cloudstack.ini file. The python library cs looks for the credentials file in the following order (last one wins): * A ``.cloudstack.ini`` (note the dot) file in the home directory. * A ``CLOUDSTACK_CONFIG`` environment variable pointing to an .ini file. * A ``cloudstack.ini`` (without the dot) file in the current working directory, same directory as your playbooks are located. The structure of the ini file must look like this: .. code-block:: bash $ cat $HOME/.cloudstack.ini [cloudstack] endpoint = https://cloud.example.com/client/api key = api key secret = api secret timeout = 30 .. Note:: The section ``[cloudstack]`` is the default section. ``CLOUDSTACK_REGION`` environment variable can be used to define the default section. .. versionadded:: 2.4 The ENV variables support ``CLOUDSTACK_*`` as written in the documentation of the library ``cs``, like ``CLOUDSTACK_TIMEOUT``, ``CLOUDSTACK_METHOD``, and so on. has been implemented into Ansible. It is even possible to have some incomplete config in your cloudstack.ini: .. code-block:: bash $ cat $HOME/.cloudstack.ini [cloudstack] endpoint = https://cloud.example.com/client/api timeout = 30 and fulfill the missing data by either setting ENV variables or tasks params: .. code-block:: yaml --- - name: provision our VMs hosts: cloud-vm tasks: - name: ensure VMs are created and running delegate_to: localhost cs_instance: api_key: your api key api_secret: your api secret ... Regions ``````` If you use more than one CloudStack region, you can define as many sections as you want and name them as you like, for example: .. code-block:: bash $ cat $HOME/.cloudstack.ini [exoscale] endpoint = https://api.exoscale.ch/compute key = api key secret = api secret [example_cloud_one] endpoint = https://cloud-one.example.com/client/api key = api key secret = api secret [example_cloud_two] endpoint = https://cloud-two.example.com/client/api key = api key secret = api secret .. Hint:: Sections can also be used to for login into the same region using different accounts. By passing the argument ``api_region`` with the CloudStack modules, the region wanted will be selected. .. code-block:: yaml - name: ensure my ssh public key exists on Exoscale cs_sshkeypair: name: my-ssh-key public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" api_region: exoscale delegate_to: localhost Or by looping over a regions list if you want to do the task in every region: .. code-block:: yaml - name: ensure my ssh public key exists in all CloudStack regions local_action: cs_sshkeypair name: my-ssh-key public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" api_region: "{{ item }}" loop: - exoscale - example_cloud_one - example_cloud_two Environment Variables ````````````````````` .. versionadded:: 2.3 Since Ansible 2.3 it is possible to use environment variables for domain (``CLOUDSTACK_DOMAIN``), account (``CLOUDSTACK_ACCOUNT``), project (``CLOUDSTACK_PROJECT``), VPC (``CLOUDSTACK_VPC``) and zone (``CLOUDSTACK_ZONE``). This simplifies the tasks by not repeating the arguments for every tasks. Below you see an example how it can be used in combination with Ansible's block feature: .. code-block:: yaml - hosts: cloud-vm tasks: - block: - name: ensure my ssh public key cs_sshkeypair: name: my-ssh-key public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" - name: ensure my ssh public key cs_instance: display_name: "{{ inventory_hostname_short }}" template: Linux Debian 7 64-bit 20GB Disk service_offering: "{{ cs_offering }}" ssh_key: my-ssh-key state: running delegate_to: localhost environment: CLOUDSTACK_DOMAIN: root/customers CLOUDSTACK_PROJECT: web-app CLOUDSTACK_ZONE: sf-1 .. Note:: You are still able overwrite the environment variables using the module arguments, for example ``zone: sf-2`` .. Note:: Unlike ``CLOUDSTACK_REGION`` these additional environment variables are ignored in the CLI ``cs``. Use Cases ````````` The following should give you some ideas how to use the modules to provision VMs to the cloud. As always, there isn't only one way to do it. But as always: keep it simple for the beginning is always a good start. Use Case: Provisioning in a Advanced Networking CloudStack setup ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Our CloudStack cloud has an advanced networking setup, we would like to provision web servers, which get a static NAT and open firewall ports 80 and 443. Further we provision database servers, to which we do not give any access to. For accessing the VMs by SSH we use a SSH jump host. This is how our inventory looks like: .. code-block:: none [cloud-vm:children] webserver db-server jumphost [webserver] web-01.example.com public_ip=198.51.100.20 web-02.example.com public_ip=198.51.100.21 [db-server] db-01.example.com db-02.example.com [jumphost] jump.example.com public_ip=198.51.100.22 As you can see, the public IPs for our web servers and jumphost has been assigned as variable ``public_ip`` directly in the inventory. The configure the jumphost, web servers and database servers, we use ``group_vars``. The ``group_vars`` directory contains 4 files for configuration of the groups: cloud-vm, jumphost, webserver and db-server. The cloud-vm is there for specifying the defaults of our cloud infrastructure. .. code-block:: yaml # file: group_vars/cloud-vm --- cs_offering: Small cs_firewall: [] Our database servers should get more CPU and RAM, so we define to use a ``Large`` offering for them. .. code-block:: yaml # file: group_vars/db-server --- cs_offering: Large The web servers should get a ``Small`` offering as we would scale them horizontally, which is also our default offering. We also ensure the known web ports are opened for the world. .. code-block:: yaml # file: group_vars/webserver --- cs_firewall: - { port: 80 } - { port: 443 } Further we provision a jump host which has only port 22 opened for accessing the VMs from our office IPv4 network. .. code-block:: yaml # file: group_vars/jumphost --- cs_firewall: - { port: 22, cidr: "17.17.17.0/24" } Now to the fun part. We create a playbook to create our infrastructure we call it ``infra.yml``: .. code-block:: yaml # file: infra.yaml --- - name: provision our VMs hosts: cloud-vm tasks: - name: run all enclosed tasks from localhost delegate_to: localhost block: - name: ensure VMs are created and running cs_instance: name: "{{ inventory_hostname_short }}" template: Linux Debian 7 64-bit 20GB Disk service_offering: "{{ cs_offering }}" state: running - name: ensure firewall ports opened cs_firewall: ip_address: "{{ public_ip }}" port: "{{ item.port }}" cidr: "{{ item.cidr | default('0.0.0.0/0') }}" loop: "{{ cs_firewall }}" when: public_ip is defined - name: ensure static NATs cs_staticnat: vm="{{ inventory_hostname_short }}" ip_address="{{ public_ip }}" when: public_ip is defined In the above play we defined 3 tasks and use the group ``cloud-vm`` as target to handle all VMs in the cloud but instead SSH to these VMs, we use ``delegate_to: localhost`` to execute the API calls locally from our workstation. In the first task, we ensure we have a running VM created with the Debian template. If the VM is already created but stopped, it would just start it. If you like to change the offering on an existing VM, you must add ``force: yes`` to the task, which would stop the VM, change the offering and start the VM again. In the second task we ensure the ports are opened if we give a public IP to the VM. In the third task we add static NAT to the VMs having a public IP defined. .. Note:: The public IP addresses must have been acquired in advance, also see ``cs_ip_address`` .. Note:: For some modules, for example ``cs_sshkeypair`` you usually want this to be executed only once, not for every VM. Therefore you would make a separate play for it targeting localhost. You find an example in the use cases below. Use Case: Provisioning on a Basic Networking CloudStack setup +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ A basic networking CloudStack setup is slightly different: Every VM gets a public IP directly assigned and security groups are used for access restriction policy. This is how our inventory looks like: .. code-block:: none [cloud-vm:children] webserver [webserver] web-01.example.com web-02.example.com The default for your VMs looks like this: .. code-block:: yaml # file: group_vars/cloud-vm --- cs_offering: Small cs_securitygroups: [ 'default'] Our webserver will also be in security group ``web``: .. code-block:: yaml # file: group_vars/webserver --- cs_securitygroups: [ 'default', 'web' ] The playbook looks like the following: .. code-block:: yaml # file: infra.yaml --- - name: cloud base setup hosts: localhost tasks: - name: upload ssh public key cs_sshkeypair: name: defaultkey public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" - name: ensure security groups exist cs_securitygroup: name: "{{ item }}" loop: - default - web - name: add inbound SSH to security group default cs_securitygroup_rule: security_group: default start_port: "{{ item }}" end_port: "{{ item }}" loop: - 22 - name: add inbound TCP rules to security group web cs_securitygroup_rule: security_group: web start_port: "{{ item }}" end_port: "{{ item }}" loop: - 80 - 443 - name: install VMs in the cloud hosts: cloud-vm tasks: - delegate_to: localhost block: - name: create and run VMs on CloudStack cs_instance: name: "{{ inventory_hostname_short }}" template: Linux Debian 7 64-bit 20GB Disk service_offering: "{{ cs_offering }}" security_groups: "{{ cs_securitygroups }}" ssh_key: defaultkey state: Running register: vm - name: show VM IP debug: msg="VM {{ inventory_hostname }} {{ vm.default_ip }}" - name: assign IP to the inventory set_fact: ansible_ssh_host={{ vm.default_ip }} - name: waiting for SSH to come up wait_for: port=22 host={{ vm.default_ip }} delay=5 In the first play we setup the security groups, in the second play the VMs will created be assigned to these groups. Further you see, that we assign the public IP returned from the modules to the host inventory. This is needed as we do not know the IPs we will get in advance. In a next step you would configure the DNS servers with these IPs for accessing the VMs with their DNS name. In the last task we wait for SSH to be accessible, so any later play would be able to access the VM by SSH without failure. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5145562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_docker.rst0000644000000000000000000000037000000000000025611 0ustar00rootroot00000000000000:orphan: Docker Guide ============ The content on this page has moved. Please see the updated :ref:`ansible_collections.community.docker.docsite.scenario_guide` in the `community.docker collection `_. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_gce.rst0000644000000000000000000003072700000000000025111 0ustar00rootroot00000000000000Google Cloud Platform Guide =========================== .. gce_intro: Introduction -------------------------- Ansible + Google have been working together on a set of auto-generated Ansible modules designed to consistently and comprehensively cover the entirety of the Google Cloud Platform (GCP). Ansible contains modules for managing Google Cloud Platform resources, including creating instances, controlling network access, working with persistent disks, managing load balancers, and a lot more. These new modules can be found under a new consistent name scheme "gcp_*" (Note: gcp_target_proxy and gcp_url_map are legacy modules, despite the "gcp_*" name. Please use gcp_compute_target_proxy and gcp_compute_url_map instead). Additionally, the gcp_compute inventory plugin can discover all Google Compute Engine (GCE) instances and make them automatically available in your Ansible inventory. You may see a collection of other GCP modules that do not conform to this naming convention. These are the original modules primarily developed by the Ansible community. You will find some overlapping functionality such as with the "gce" module and the new "gcp_compute_instance" module. Either can be used, but you may experience issues trying to use them together. While the community GCP modules are not going away, Google is investing effort into the new "gcp_*" modules. Google is committed to ensuring the Ansible community has a great experience with GCP and therefore recommends adopting these new modules if possible. Requisites --------------- The GCP modules require both the ``requests`` and the ``google-auth`` libraries to be installed. .. code-block:: bash $ pip install requests google-auth Alternatively for RHEL / CentOS, the ``python-requests`` package is also available to satisfy ``requests`` libraries. .. code-block:: bash $ yum install python-requests Credentials ----------- It's easy to create a GCP account with credentials for Ansible. You have multiple options to get your credentials - here are two of the most common options: * Service Accounts (Recommended): Use JSON service accounts with specific permissions. * Machine Accounts: Use the permissions associated with the GCP Instance you're using Ansible on. For the following examples, we'll be using service account credentials. To work with the GCP modules, you'll first need to get some credentials in the JSON format: 1. `Create a Service Account `_ 2. `Download JSON credentials `_ Once you have your credentials, there are two different ways to provide them to Ansible: * by specifying them directly as module parameters * by setting environment variables Providing Credentials as Module Parameters `````````````````````````````````````````` For the GCE modules you can specify the credentials as arguments: * ``auth_kind``: type of authentication being used (choices: machineaccount, serviceaccount, application) * ``service_account_email``: email associated with the project * ``service_account_file``: path to the JSON credentials file * ``project``: id of the project * ``scopes``: The specific scopes that you want the actions to use. For example, to create a new IP address using the ``gcp_compute_address`` module, you can use the following configuration: .. code-block:: yaml - name: Create IP address hosts: localhost gather_facts: no vars: service_account_file: /home/my_account.json project: my-project auth_kind: serviceaccount scopes: - https://www.googleapis.com/auth/compute tasks: - name: Allocate an IP Address gcp_compute_address: state: present name: 'test-address1' region: 'us-west1' project: "{{ project }}" auth_kind: "{{ auth_kind }}" service_account_file: "{{ service_account_file }}" scopes: "{{ scopes }}" Providing Credentials as Environment Variables `````````````````````````````````````````````` Set the following environment variables before running Ansible in order to configure your credentials: .. code-block:: bash GCP_AUTH_KIND GCP_SERVICE_ACCOUNT_EMAIL GCP_SERVICE_ACCOUNT_FILE GCP_SCOPES GCE Dynamic Inventory --------------------- The best way to interact with your hosts is to use the gcp_compute inventory plugin, which dynamically queries GCE and tells Ansible what nodes can be managed. To be able to use this GCE dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins = gcp_compute Then, create a file that ends in ``.gcp.yml`` in your root directory. The gcp_compute inventory script takes in the same authentication information as any module. Here's an example of a valid inventory file: .. code-block:: yaml plugin: gcp_compute projects: - graphite-playground auth_kind: serviceaccount service_account_file: /home/alexstephen/my_account.json Executing ``ansible-inventory --list -i .gcp.yml`` will create a list of GCP instances that are ready to be configured using Ansible. Create an instance `````````````````` The full range of GCP modules provide the ability to create a wide variety of GCP resources with the full support of the entire GCP API. The following playbook creates a GCE Instance. This instance relies on other GCP resources like Disk. By creating other resources separately, we can give as much detail as necessary about how we want to configure the other resources, for example formatting of the Disk. By registering it to a variable, we can simply insert the variable into the instance task. The gcp_compute_instance module will figure out the rest. .. code-block:: yaml - name: Create an instance hosts: localhost gather_facts: no vars: gcp_project: my-project gcp_cred_kind: serviceaccount gcp_cred_file: /home/my_account.json zone: "us-central1-a" region: "us-central1" tasks: - name: create a disk gcp_compute_disk: name: 'disk-instance' size_gb: 50 source_image: 'projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts' zone: "{{ zone }}" project: "{{ gcp_project }}" auth_kind: "{{ gcp_cred_kind }}" service_account_file: "{{ gcp_cred_file }}" scopes: - https://www.googleapis.com/auth/compute state: present register: disk - name: create a address gcp_compute_address: name: 'address-instance' region: "{{ region }}" project: "{{ gcp_project }}" auth_kind: "{{ gcp_cred_kind }}" service_account_file: "{{ gcp_cred_file }}" scopes: - https://www.googleapis.com/auth/compute state: present register: address - name: create a instance gcp_compute_instance: state: present name: test-vm machine_type: n1-standard-1 disks: - auto_delete: true boot: true source: "{{ disk }}" network_interfaces: - network: null # use default access_configs: - name: 'External NAT' nat_ip: "{{ address }}" type: 'ONE_TO_ONE_NAT' zone: "{{ zone }}" project: "{{ gcp_project }}" auth_kind: "{{ gcp_cred_kind }}" service_account_file: "{{ gcp_cred_file }}" scopes: - https://www.googleapis.com/auth/compute register: instance - name: Wait for SSH to come up wait_for: host={{ address.address }} port=22 delay=10 timeout=60 - name: Add host to groupname add_host: hostname={{ address.address }} groupname=new_instances - name: Manage new instances hosts: new_instances connection: ssh become: True roles: - base_configuration - production_server Note that use of the "add_host" module above creates a temporary, in-memory group. This means that a play in the same playbook can then manage machines in the 'new_instances' group, if so desired. Any sort of arbitrary configuration is possible at this point. For more information about Google Cloud, please visit the `Google Cloud website `_. Migration Guides ---------------- gce.py -> gcp_compute_instance.py ````````````````````````````````` As of Ansible 2.8, we're encouraging everyone to move from the ``gce`` module to the ``gcp_compute_instance`` module. The ``gcp_compute_instance`` module has better support for all of GCP's features, fewer dependencies, more flexibility, and better supports GCP's authentication systems. The ``gcp_compute_instance`` module supports all of the features of the ``gce`` module (and more!). Below is a mapping of ``gce`` fields over to ``gcp_compute_instance`` fields. ============================ ========================================== ====================== gce.py gcp_compute_instance.py Notes ============================ ========================================== ====================== state state/status State on gce has multiple values: "present", "absent", "stopped", "started", "terminated". State on gcp_compute_instance is used to describe if the instance exists (present) or does not (absent). Status is used to describe if the instance is "started", "stopped" or "terminated". image disks[].initialize_params.source_image You'll need to create a single disk using the disks[] parameter and set it to be the boot disk (disks[].boot = true) image_family disks[].initialize_params.source_image See above. external_projects disks[].initialize_params.source_image The name of the source_image will include the name of the project. instance_names Use a loop or multiple tasks. Using loops is a more Ansible-centric way of creating multiple instances and gives you the most flexibility. service_account_email service_accounts[].email This is the service_account email address that you want the instance to be associated with. It is not the service_account email address that is used for the credentials necessary to create the instance. service_account_permissions service_accounts[].scopes These are the permissions you want to grant to the instance. pem_file Not supported. We recommend using JSON service account credentials instead of PEM files. credentials_file service_account_file project_id project name name This field does not accept an array of names. Use a loop to create multiple instances. num_instances Use a loop For maximum flexibility, we're encouraging users to use Ansible features to create multiple instances, rather than letting the module do it for you. network network_interfaces[].network subnetwork network_interfaces[].subnetwork persistent_boot_disk disks[].type = 'PERSISTENT' disks disks[] ip_forward can_ip_forward external_ip network_interfaces[].access_configs.nat_ip This field takes multiple types of values. You can create an IP address with ``gcp_compute_address`` and place the name/output of the address here. You can also place the string value of the IP address's GCP name or the actual IP address. disks_auto_delete disks[].auto_delete preemptible scheduling.preemptible disk_size disks[].initialize_params.disk_size_gb ============================ ========================================== ====================== An example playbook is below: .. code:: yaml gcp_compute_instance: name: "{{ item }}" machine_type: n1-standard-1 ... # any other settings zone: us-central1-a project: "my-project" auth_kind: "service_account_file" service_account_file: "~/my_account.json" state: present loop: - instance-1 - instance-2 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_infoblox.rst0000644000000000000000000002613000000000000026164 0ustar00rootroot00000000000000.. _nios_guide: ************************ Infoblox Guide ************************ .. contents:: Topics This guide describes how to use Ansible with the Infoblox Network Identity Operating System (NIOS). With Ansible integration, you can use Ansible playbooks to automate Infoblox Core Network Services for IP address management (IPAM), DNS, and inventory tracking. You can review simple example tasks in the documentation for any of the :ref:`NIOS modules ` or look at the `Use cases with modules`_ section for more elaborate examples. See the `Infoblox `_ website for more information on the Infoblox product. .. note:: You can retrieve most of the example playbooks used in this guide from the `network-automation/infoblox_ansible `_ GitHub repository. Prerequisites ============= Before using Ansible ``nios`` modules with Infoblox, you must install the ``infoblox-client`` on your Ansible control node: .. code-block:: bash $ sudo pip install infoblox-client .. note:: You need an NIOS account with the WAPI feature enabled to use Ansible with Infoblox. .. _nios_credentials: Credentials and authenticating ============================== To use Infoblox ``nios`` modules in playbooks, you need to configure the credentials to access your Infoblox system. The examples in this guide use credentials stored in ``/group_vars/nios.yml``. Replace these values with your Infoblox credentials: .. code-block:: yaml --- nios_provider: host: 192.0.0.2 username: admin password: ansible NIOS lookup plugins =================== Ansible includes the following lookup plugins for NIOS: - :ref:`nios ` Uses the Infoblox WAPI API to fetch NIOS specified objects, for example network views, DNS views, and host records. - :ref:`nios_next_ip ` Provides the next available IP address from a network. You'll see an example of this in `Creating a host record`_. - :ref:`nios_next_network ` - Returns the next available network range for a network-container. You must run the NIOS lookup plugins locally by specifying ``connection: local``. See :ref:`lookup plugins ` for more detail. Retrieving all network views ---------------------------- To retrieve all network views and save them in a variable, use the :ref:`set_fact ` module with the :ref:`nios ` lookup plugin: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: fetch all networkview objects set_fact: networkviews: "{{ lookup('nios', 'networkview', provider=nios_provider) }}" - name: check the networkviews debug: var: networkviews Retrieving a host record ------------------------ To retrieve a set of host records, use the ``set_fact`` module with the ``nios`` lookup plugin and include a filter for the specific hosts you want to retrieve: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: fetch host leaf01 set_fact: host: "{{ lookup('nios', 'record:host', filter={'name': 'leaf01.ansible.com'}, provider=nios_provider) }}" - name: check the leaf01 return variable debug: var: host - name: debug specific variable (ipv4 address) debug: var: host.ipv4addrs[0].ipv4addr - name: fetch host leaf02 set_fact: host: "{{ lookup('nios', 'record:host', filter={'name': 'leaf02.ansible.com'}, provider=nios_provider) }}" - name: check the leaf02 return variable debug: var: host If you run this ``get_host_record.yml`` playbook, you should see results similar to the following: .. code-block:: none $ ansible-playbook get_host_record.yml PLAY [localhost] *************************************************************************************** TASK [fetch host leaf01] ****************************************************************************** ok: [localhost] TASK [check the leaf01 return variable] ************************************************************* ok: [localhost] => { < ...output shortened...> "host": { "ipv4addrs": [ { "configure_for_dhcp": false, "host": "leaf01.ansible.com", } ], "name": "leaf01.ansible.com", "view": "default" } } TASK [debug specific variable (ipv4 address)] ****************************************************** ok: [localhost] => { "host.ipv4addrs[0].ipv4addr": "192.168.1.11" } TASK [fetch host leaf02] ****************************************************************************** ok: [localhost] TASK [check the leaf02 return variable] ************************************************************* ok: [localhost] => { < ...output shortened...> "host": { "ipv4addrs": [ { "configure_for_dhcp": false, "host": "leaf02.example.com", "ipv4addr": "192.168.1.12" } ], } } PLAY RECAP ****************************************************************************************** localhost : ok=5 changed=0 unreachable=0 failed=0 The output above shows the host record for ``leaf01.ansible.com`` and ``leaf02.ansible.com`` that were retrieved by the ``nios`` lookup plugin. This playbook saves the information in variables which you can use in other playbooks. This allows you to use Infoblox as a single source of truth to gather and use information that changes dynamically. See :ref:`playbooks_variables` for more information on using Ansible variables. See the :ref:`nios ` examples for more data options that you can retrieve. You can access these playbooks at `Infoblox lookup playbooks `_. Use cases with modules ====================== You can use the ``nios`` modules in tasks to simplify common Infoblox workflows. Be sure to set up your :ref:`NIOS credentials` before following these examples. Configuring an IPv4 network --------------------------- To configure an IPv4 network, use the :ref:`nios_network ` module: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: Create a network on the default network view nios_network: network: 192.168.100.0/24 comment: sets the IPv4 network options: - name: domain-name value: ansible.com state: present provider: "{{nios_provider}}" Notice the last parameter, ``provider``, uses the variable ``nios_provider`` defined in the ``group_vars/`` directory. Creating a host record ---------------------- To create a host record named `leaf03.ansible.com` on the newly-created IPv4 network: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: configure an IPv4 host record nios_host_record: name: leaf03.ansible.com ipv4addrs: - ipv4addr: "{{ lookup('nios_next_ip', '192.168.100.0/24', provider=nios_provider)[0] }}" state: present provider: "{{nios_provider}}" Notice the IPv4 address in this example uses the :ref:`nios_next_ip ` lookup plugin to find the next available IPv4 address on the network. Creating a forward DNS zone --------------------------- To configure a forward DNS zone use, the ``nios_zone`` module: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: Create a forward DNS zone called ansible-test.com nios_zone: name: ansible-test.com comment: local DNS zone state: present provider: "{{ nios_provider }}" Creating a reverse DNS zone --------------------------- To configure a reverse DNS zone: .. code-block:: yaml --- - hosts: nios connection: local tasks: - name: configure a reverse mapping zone on the system using IPV6 zone format nios_zone: name: 100::1/128 zone_format: IPV6 state: present provider: "{{ nios_provider }}" Dynamic inventory script ======================== You can use the Infoblox dynamic inventory script to import your network node inventory with Infoblox NIOS. To gather the inventory from Infoblox, you need two files: - `infoblox.yaml `_ - A file that specifies the NIOS provider arguments and optional filters. - `infoblox.py `_ - The python script that retrieves the NIOS inventory. .. note:: Please note that the inventory script only works when Ansible 2.9, 2.10 or 3 have been installed. The inventory script will eventually be removed from `community.general `_, and will not work if `community.general` is only installed with `ansible-galaxy collection install`. Please use the inventory plugin from `infoblox.nios_modules `_ instead. To use the Infoblox dynamic inventory script: #. Download the ``infoblox.yaml`` file and save it in the ``/etc/ansible`` directory. #. Modify the ``infoblox.yaml`` file with your NIOS credentials. #. Download the ``infoblox.py`` file and save it in the ``/etc/ansible/hosts`` directory. #. Change the permissions on the ``infoblox.py`` file to make the file an executable: .. code-block:: bash $ sudo chmod +x /etc/ansible/hosts/infoblox.py You can optionally use ``./infoblox.py --list`` to test the script. After a few minutes, you should see your Infoblox inventory in JSON format. You can explicitly use the Infoblox dynamic inventory script as follows: .. code-block:: bash $ ansible -i infoblox.py all -m ping You can also implicitly use the Infoblox dynamic inventory script by including it in your inventory directory (``etc/ansible/hosts`` by default). See :ref:`dynamic_inventory` for more details. .. seealso:: `Infoblox website `_ The Infoblox website `Infoblox and Ansible Deployment Guide `_ The deployment guide for Ansible integration provided by Infoblox. `Infoblox Integration in Ansible 2.5 `_ Ansible blog post about Infoblox. :ref:`Ansible NIOS modules ` The list of supported NIOS modules, with examples. `Infoblox Ansible Examples `_ Infoblox example playbooks. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_kubernetes.rst0000644000000000000000000000065000000000000026512 0ustar00rootroot00000000000000.. _k8s_ansible: **************** Kubernetes Guide **************** Welcome to the Ansible for Kubernetes Guide! The purpose of this guide is to teach you everything you need to know about using Ansible with Kubernetes. To get started, please select one of the following topics. .. toctree:: :maxdepth: 1 kubernetes_scenarios/k8s_intro kubernetes_scenarios/k8s_inventory kubernetes_scenarios/k8s_scenarios ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_meraki.rst0000644000000000000000000001721700000000000025622 0ustar00rootroot00000000000000.. _meraki_guide: ****************** Cisco Meraki Guide ****************** .. contents:: :local: .. _meraki_guide_intro: What is Cisco Meraki? ===================== Cisco Meraki is an easy-to-use, cloud-based, network infrastructure platform for enterprise environments. While most network hardware uses command-line interfaces (CLIs) for configuration, Meraki uses an easy-to-use Dashboard hosted in the Meraki cloud. No on-premises management hardware or software is required - only the network infrastructure to run your business. MS Switches ----------- Meraki MS switches come in multiple flavors and form factors. Meraki switches support 10/100/1000/10000 ports, as well as Cisco's mGig technology for 2.5/5/10Gbps copper connectivity. 8, 24, and 48 port flavors are available with PoE (802.3af/802.3at/UPoE) available on many models. MX Firewalls ------------ Meraki's MX firewalls support full layer 3-7 deep packet inspection. MX firewalls are compatible with a variety of VPN technologies including IPSec, SSL VPN, and Meraki's easy-to-use AutoVPN. MR Wireless Access Points ------------------------- MR access points are enterprise-class, high-performance access points for the enterprise. MR access points have MIMO technology and integrated beamforming built-in for high performance applications. BLE allows for advanced location applications to be developed with no on-premises analytics platforms. Using the Meraki modules ======================== Meraki modules provide a user-friendly interface to manage your Meraki environment using Ansible. For example, details about SNMP settings for a particular organization can be discovered using the module `meraki_snmp `. .. code-block:: yaml - name: Query SNMP settings meraki_snmp: api_key: abc123 org_name: AcmeCorp state: query delegate_to: localhost Information about a particular object can be queried. For example, the `meraki_admin ` module supports .. code-block:: yaml - name: Gather information about Jane Doe meraki_admin: api_key: abc123 org_name: AcmeCorp state: query email: janedoe@email.com delegate_to: localhost Common Parameters ================= All Ansible Meraki modules support the following parameters which affect communication with the Meraki Dashboard API. Most of these should only be used by Meraki developers and not the general public. host Hostname or IP of Meraki Dashboard. use_https Specifies whether communication should be over HTTPS. (Defaults to ``yes``) use_proxy Whether to use a proxy for any communication. validate_certs Determine whether certificates should be validated or trusted. (Defaults to ``yes``) These are the common parameters which are used for most every module. org_name Name of organization to perform actions in. org_id ID of organization to perform actions in. net_name Name of network to perform actions in. net_id ID of network to perform actions in. state General specification of what action to take. ``query`` does lookups. ``present`` creates or edits. ``absent`` deletes. .. hint:: Use the ``org_id`` and ``net_id`` parameters when possible. ``org_name`` and ``net_name`` require additional behind-the-scenes API calls to learn the ID values. ``org_id`` and ``net_id`` will perform faster. Meraki Authentication ===================== All API access with the Meraki Dashboard requires an API key. An API key can be generated from the organization's settings page. Each play in a playbook requires the ``api_key`` parameter to be specified. The "Vault" feature of Ansible allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plain text in your playbooks or roles. These vault files can then be distributed or placed in source control. See :ref:`playbooks_vault` for more information. Meraki's API returns a 404 error if the API key is not correct. It does not provide any specific error saying the key is incorrect. If you receive a 404 error, check the API key first. Returned Data Structures ======================== Meraki and its related Ansible modules return most information in the form of a list. For example, this is returned information by ``meraki_admin`` querying administrators. It returns a list even though there's only one. .. code-block:: json [ { "orgAccess": "full", "name": "John Doe", "tags": [], "networks": [], "email": "john@doe.com", "id": "12345677890" } ] Handling Returned Data ====================== Since Meraki's response data uses lists instead of properly keyed dictionaries for responses, certain strategies should be used when querying data for particular information. For many situations, use the ``selectattr()`` Jinja2 function. Merging Existing and New Data ============================= Ansible's Meraki modules do not allow for manipulating data. For example, you may need to insert a rule in the middle of a firewall ruleset. Ansible and the Meraki modules lack a way to directly merge to manipulate data. However, a playlist can use a few tasks to split the list where you need to insert a rule and then merge them together again with the new rule added. The steps involved are as follows: 1. Create blank "front" and "back" lists. :: vars: - front_rules: [] - back_rules: [] 2. Get existing firewall rules from Meraki and create a new variable. :: - name: Get firewall rules meraki_mx_l3_firewall: auth_key: abc123 org_name: YourOrg net_name: YourNet state: query delegate_to: localhost register: rules - set_fact: original_ruleset: '{{rules.data}}' 3. Write the new rule. The new rule needs to be in a list so it can be merged with other lists in an upcoming step. The blank `-` puts the rule in a list so it can be merged. :: - set_fact: new_rule: - - comment: Block traffic to server src_cidr: 192.0.1.0/24 src_port: any dst_cidr: 192.0.1.2/32 dst_port: any protocol: any policy: deny 4. Split the rules into two lists. This assumes the existing ruleset is 2 rules long. :: - set_fact: front_rules: '{{front_rules + [ original_ruleset[:1] ]}}' - set_fact: back_rules: '{{back_rules + [ original_ruleset[1:] ]}}' 5. Merge rules with the new rule in the middle. :: - set_fact: new_ruleset: '{{front_rules + new_rule + back_rules}}' 6. Upload new ruleset to Meraki. :: - name: Set two firewall rules meraki_mx_l3_firewall: auth_key: abc123 org_name: YourOrg net_name: YourNet state: present rules: '{{ new_ruleset }}' delegate_to: localhost Error Handling ============== Ansible's Meraki modules will often fail if improper or incompatible parameters are specified. However, there will likely be scenarios where the module accepts the information but the Meraki API rejects the data. If this happens, the error will be returned in the ``body`` field for HTTP status of 400 return code. Meraki's API returns a 404 error if the API key is not correct. It does not provide any specific error saying the key is incorrect. If you receive a 404 error, check the API key first. 404 errors can also occur if improper object IDs (ex. ``org_id``) are specified. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_online.rst0000644000000000000000000000223300000000000025626 0ustar00rootroot00000000000000**************** Online.net Guide **************** Introduction ============ Online is a French hosting company mainly known for providing bare-metal servers named Dedibox. Check it out: `https://www.online.net/en `_ Dynamic inventory for Online resources -------------------------------------- Ansible has a dynamic inventory plugin that can list your resources. 1. Create a YAML configuration such as ``online_inventory.yml`` with this content: .. code-block:: yaml plugin: online 2. Set your ``ONLINE_TOKEN`` environment variable with your token. You need to open an account and log into it before you can get a token. You can find your token at the following page: `https://console.online.net/en/api/access `_ 3. You can test that your inventory is working by running: .. code-block:: bash $ ansible-inventory -v -i online_inventory.yml --list 4. Now you can run your playbook or any other module with this inventory: .. code-block:: console $ ansible all -i online_inventory.yml -m ping sd-96735 | SUCCESS => { "changed": false, "ping": "pong" } ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_oracle.rst0000644000000000000000000000765700000000000025626 0ustar00rootroot00000000000000=================================== Oracle Cloud Infrastructure Guide =================================== ************ Introduction ************ Oracle provides a number of Ansible modules to interact with Oracle Cloud Infrastructure (OCI). In this guide, we will explain how you can use these modules to orchestrate, provision and configure your infrastructure on OCI. ************ Requirements ************ To use the OCI Ansible modules, you must have the following prerequisites on your control node, the computer from which Ansible playbooks are executed. 1. `An Oracle Cloud Infrastructure account. `_ 2. A user created in that account, in a security group with a policy that grants the necessary permissions for working with resources in those compartments. For guidance, see `How Policies Work `_. 3. The necessary credentials and OCID information. ************ Installation ************ 1. Install the Oracle Cloud Infrastructure Python SDK (`detailed installation instructions `_): .. code-block:: bash pip install oci 2. Install the Ansible OCI Modules in one of two ways: a. From Galaxy: .. code-block:: bash ansible-galaxy install oracle.oci_ansible_modules b. From GitHub: .. code-block:: bash $ git clone https://github.com/oracle/oci-ansible-modules.git .. code-block:: bash $ cd oci-ansible-modules Run one of the following commands: - If Ansible is installed only for your user: .. code-block:: bash $ ./install.py - If Ansible is installed as root: .. code-block:: bash $ sudo ./install.py ************* Configuration ************* When creating and configuring Oracle Cloud Infrastructure resources, Ansible modules use the authentication information outlined `here `_. . ******** Examples ******** Launch a compute instance ========================= This `sample launch playbook `_ launches a public Compute instance and then accesses the instance from an Ansible module over an SSH connection. The sample illustrates how to: - Generate a temporary, host-specific SSH key pair. - Specify the public key from the key pair for connecting to the instance, and then launch the instance. - Connect to the newly launched instance using SSH. Create and manage Autonomous Data Warehouses ============================================ This `sample warehouse playbook `_ creates an Autonomous Data Warehouse and manage its lifecycle. The sample shows how to: - Set up an Autonomous Data Warehouse. - List all of the Autonomous Data Warehouse instances available in a compartment, filtered by the display name. - Get the "facts" for a specified Autonomous Data Warehouse. - Stop and start an Autonomous Data Warehouse instance. - Delete an Autonomous Data Warehouse instance. Create and manage Autonomous Transaction Processing =================================================== This `sample playbook `_ creates an Autonomous Transaction Processing database and manage its lifecycle. The sample shows how to: - Set up an Autonomous Transaction Processing database instance. - List all of the Autonomous Transaction Processing instances in a compartment, filtered by the display name. - Get the "facts" for a specified Autonomous Transaction Processing instance. - Delete an Autonomous Transaction Processing database instance. You can find more examples here: `Sample Ansible Playbooks `_. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.515556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_packet.rst0000644000000000000000000003232000000000000025611 0ustar00rootroot00000000000000********************************** Packet.net Guide ********************************** Introduction ============ `Packet.net `_ is a bare metal infrastructure host that's supported by Ansible (>=2.3) via a dynamic inventory script and two cloud modules. The two modules are: - packet_sshkey: adds a public SSH key from file or value to the Packet infrastructure. Every subsequently-created device will have this public key installed in .ssh/authorized_keys. - packet_device: manages servers on Packet. You can use this module to create, restart and delete devices. Note, this guide assumes you are familiar with Ansible and how it works. If you're not, have a look at their :ref:`docs ` before getting started. Requirements ============ The Packet modules and inventory script connect to the Packet API using the packet-python package. You can install it with pip: .. code-block:: bash $ pip install packet-python In order to check the state of devices created by Ansible on Packet, it's a good idea to install one of the `Packet CLI clients `_. Otherwise you can check them via the `Packet portal `_. To use the modules and inventory script you'll need a Packet API token. You can generate an API token via the Packet portal `here `__. The simplest way to authenticate yourself is to set the Packet API token in an environment variable: .. code-block:: bash $ export PACKET_API_TOKEN=Bfse9F24SFtfs423Gsd3ifGsd43sSdfs If you're not comfortable exporting your API token, you can pass it as a parameter to the modules. On Packet, devices and reserved IP addresses belong to `projects `_. In order to use the packet_device module, you need to specify the UUID of the project in which you want to create or manage devices. You can find a project's UUID in the Packet portal `here `_ (it's just under the project table) or via one of the available `CLIs `_. If you want to use a new SSH keypair in this tutorial, you can generate it to ``./id_rsa`` and ``./id_rsa.pub`` as: .. code-block:: bash $ ssh-keygen -t rsa -f ./id_rsa If you want to use an existing keypair, just copy the private and public key over to the playbook directory. Device Creation =============== The following code block is a simple playbook that creates one `Type 0 `_ server (the 'plan' parameter). You have to supply 'plan' and 'operating_system'. 'location' defaults to 'ewr1' (Parsippany, NJ). You can find all the possible values for the parameters via a `CLI client `_. .. code-block:: yaml # playbook_create.yml - name: create ubuntu device hosts: localhost tasks: - packet_sshkey: key_file: ./id_rsa.pub label: tutorial key - packet_device: project_id: hostnames: myserver operating_system: ubuntu_16_04 plan: baremetal_0 facility: sjc1 After running ``ansible-playbook playbook_create.yml``, you should have a server provisioned on Packet. You can verify via a CLI or in the `Packet portal `__. If you get an error with the message "failed to set machine state present, error: Error 404: Not Found", please verify your project UUID. Updating Devices ================ The two parameters used to uniquely identify Packet devices are: "device_ids" and "hostnames". Both parameters accept either a single string (later converted to a one-element list), or a list of strings. The 'device_ids' and 'hostnames' parameters are mutually exclusive. The following values are all acceptable: - device_ids: a27b7a83-fc93-435b-a128-47a5b04f2dcf - hostnames: mydev1 - device_ids: [a27b7a83-fc93-435b-a128-47a5b04f2dcf, 4887130f-0ccd-49a0-99b0-323c1ceb527b] - hostnames: [mydev1, mydev2] In addition, hostnames can contain a special '%d' formatter along with a 'count' parameter that lets you easily expand hostnames that follow a simple name and number pattern; in other words, ``hostnames: "mydev%d", count: 2`` will expand to [mydev1, mydev2]. If your playbook acts on existing Packet devices, you can only pass the 'hostname' and 'device_ids' parameters. The following playbook shows how you can reboot a specific Packet device by setting the 'hostname' parameter: .. code-block:: yaml # playbook_reboot.yml - name: reboot myserver hosts: localhost tasks: - packet_device: project_id: hostnames: myserver state: rebooted You can also identify specific Packet devices with the 'device_ids' parameter. The device's UUID can be found in the `Packet Portal `_ or by using a `CLI `_. The following playbook removes a Packet device using the 'device_ids' field: .. code-block:: yaml # playbook_remove.yml - name: remove a device hosts: localhost tasks: - packet_device: project_id: device_ids: state: absent More Complex Playbooks ====================== In this example, we'll create a CoreOS cluster with `user data `_. The CoreOS cluster will use `etcd `_ for discovery of other servers in the cluster. Before provisioning your servers, you'll need to generate a discovery token for your cluster: .. code-block:: bash $ curl -w "\n" 'https://discovery.etcd.io/new?size=3' The following playbook will create an SSH key, 3 Packet servers, and then wait until SSH is ready (or until 5 minutes passed). Make sure to substitute the discovery token URL in 'user_data', and the 'project_id' before running ``ansible-playbook``. Also, feel free to change 'plan' and 'facility'. .. code-block:: yaml # playbook_coreos.yml - name: Start 3 CoreOS nodes in Packet and wait until SSH is ready hosts: localhost tasks: - packet_sshkey: key_file: ./id_rsa.pub label: new - packet_device: hostnames: [coreos-one, coreos-two, coreos-three] operating_system: coreos_beta plan: baremetal_0 facility: ewr1 project_id: wait_for_public_IPv: 4 user_data: | #cloud-config coreos: etcd2: discovery: https://discovery.etcd.io/ advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001 initial-advertise-peer-urls: http://$private_ipv4:2380 listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 listen-peer-urls: http://$private_ipv4:2380 fleet: public-ip: $private_ipv4 units: - name: etcd2.service command: start - name: fleet.service command: start register: newhosts - name: wait for ssh wait_for: delay: 1 host: "{{ item.public_ipv4 }}" port: 22 state: started timeout: 500 loop: "{{ newhosts.results[0].devices }}" As with most Ansible modules, the default states of the Packet modules are idempotent, meaning the resources in your project will remain the same after re-runs of a playbook. Thus, we can keep the ``packet_sshkey`` module call in our playbook. If the public key is already in your Packet account, the call will have no effect. The second module call provisions 3 Packet Type 0 (specified using the 'plan' parameter) servers in the project identified via the 'project_id' parameter. The servers are all provisioned with CoreOS beta (the 'operating_system' parameter) and are customized with cloud-config user data passed to the 'user_data' parameter. The ``packet_device`` module has a ``wait_for_public_IPv`` that is used to specify the version of the IP address to wait for (valid values are ``4`` or ``6`` for IPv4 or IPv6). If specified, Ansible will wait until the GET API call for a device contains an Internet-routeable IP address of the specified version. When referring to an IP address of a created device in subsequent module calls, it's wise to use the ``wait_for_public_IPv`` parameter, or ``state: active`` in the packet_device module call. Run the playbook: .. code-block:: bash $ ansible-playbook playbook_coreos.yml Once the playbook quits, your new devices should be reachable via SSH. Try to connect to one and check if etcd has started properly: .. code-block:: bash tomk@work $ ssh -i id_rsa core@$one_of_the_servers_ip core@coreos-one ~ $ etcdctl cluster-health Once you create a couple of devices, you might appreciate the dynamic inventory script... Dynamic Inventory Script ======================== The dynamic inventory script queries the Packet API for a list of hosts, and exposes it to Ansible so you can easily identify and act on Packet devices. You can find it in Ansible Community General Collection's git repo at `scripts/inventory/packet_net.py `_. The inventory script is configurable via a `ini file `_. If you want to use the inventory script, you must first export your Packet API token to a PACKET_API_TOKEN environment variable. You can either copy the inventory and ini config out from the cloned git repo, or you can download it to your working directory like so: .. code-block:: bash $ wget https://raw.githubusercontent.com/ansible-community/contrib-scripts/main/inventory/packet_net.py $ chmod +x packet_net.py $ wget https://raw.githubusercontent.com/ansible-community/contrib-scripts/main/inventory/packet_net.ini In order to understand what the inventory script gives to Ansible you can run: .. code-block:: bash $ ./packet_net.py --list It should print a JSON document looking similar to following trimmed dictionary: .. code-block:: json { "_meta": { "hostvars": { "147.75.64.169": { "packet_billing_cycle": "hourly", "packet_created_at": "2017-02-09T17:11:26Z", "packet_facility": "ewr1", "packet_hostname": "coreos-two", "packet_href": "/devices/d0ab8972-54a8-4bff-832b-28549d1bec96", "packet_id": "d0ab8972-54a8-4bff-832b-28549d1bec96", "packet_locked": false, "packet_operating_system": "coreos_beta", "packet_plan": "baremetal_0", "packet_state": "active", "packet_updated_at": "2017-02-09T17:16:35Z", "packet_user": "core", "packet_userdata": "#cloud-config\ncoreos:\n etcd2:\n discovery: https://discovery.etcd.io/e0c8a4a9b8fe61acd51ec599e2a4f68e\n advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001\n initial-advertise-peer-urls: http://$private_ipv4:2380\n listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001\n listen-peer-urls: http://$private_ipv4:2380\n fleet:\n public-ip: $private_ipv4\n units:\n - name: etcd2.service\n command: start\n - name: fleet.service\n command: start" } } }, "baremetal_0": [ "147.75.202.255", "147.75.202.251", "147.75.202.249", "147.75.64.129", "147.75.192.51", "147.75.64.169" ], "coreos_beta": [ "147.75.202.255", "147.75.202.251", "147.75.202.249", "147.75.64.129", "147.75.192.51", "147.75.64.169" ], "ewr1": [ "147.75.64.129", "147.75.192.51", "147.75.64.169" ], "sjc1": [ "147.75.202.255", "147.75.202.251", "147.75.202.249" ], "coreos-two": [ "147.75.64.169" ], "d0ab8972-54a8-4bff-832b-28549d1bec96": [ "147.75.64.169" ] } In the ``['_meta']['hostvars']`` key, there is a list of devices (uniquely identified by their public IPv4 address) with their parameters. The other keys under ``['_meta']`` are lists of devices grouped by some parameter. Here, it is type (all devices are of type baremetal_0), operating system, and facility (ewr1 and sjc1). In addition to the parameter groups, there are also one-item groups with the UUID or hostname of the device. You can now target groups in playbooks! The following playbook will install a role that supplies resources for an Ansible target into all devices in the "coreos_beta" group: .. code-block:: yaml # playbook_bootstrap.yml - hosts: coreos_beta gather_facts: false roles: - defunctzombie.coreos-boostrap Don't forget to supply the dynamic inventory in the ``-i`` argument! .. code-block:: bash $ ansible-playbook -u core -i packet_net.py playbook_bootstrap.yml If you have any questions or comments let us know! help@packet.net ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_rax.rst0000644000000000000000000007305700000000000025150 0ustar00rootroot00000000000000Rackspace Cloud Guide ===================== .. _rax_introduction: Introduction ```````````` .. note:: Rackspace functionality in Ansible is not maintained and users should consider the `OpenStack collection `_ instead. Ansible contains a number of core modules for interacting with Rackspace Cloud. The purpose of this section is to explain how to put Ansible modules together (and use inventory scripts) to use Ansible in a Rackspace Cloud context. Prerequisites for using the rax modules are minimal. In addition to ansible itself, all of the modules require and are tested against pyrax 1.5 or higher. You'll need this Python module installed on the execution host. ``pyrax`` is not currently available in many operating system package repositories, so you will likely need to install it via pip: .. code-block:: bash $ pip install pyrax Ansible creates an implicit localhost that executes in the same context as the ``ansible-playbook`` and the other CLI tools. If for any reason you need or want to have it in your inventory you should do something like the following: .. code-block:: ini [localhost] localhost ansible_connection=local ansible_python_interpreter=/usr/local/bin/python2 For more information see :ref:`Implicit Localhost ` In playbook steps, we'll typically be using the following pattern: .. code-block:: yaml - hosts: localhost gather_facts: False tasks: .. _credentials_file: Credentials File ```````````````` The `rax.py` inventory script and all `rax` modules support a standard `pyrax` credentials file that looks like: .. code-block:: ini [rackspace_cloud] username = myraxusername api_key = d41d8cd98f00b204e9800998ecf8427e Setting the environment parameter ``RAX_CREDS_FILE`` to the path of this file will help Ansible find how to load this information. More information about this credentials file can be found at https://github.com/pycontribs/pyrax/blob/master/docs/getting_started.md#authenticating .. _virtual_environment: Running from a Python Virtual Environment (Optional) ++++++++++++++++++++++++++++++++++++++++++++++++++++ Most users will not be using virtualenv, but some users, particularly Python developers sometimes like to. There are special considerations when Ansible is installed to a Python virtualenv, rather than the default of installing at a global scope. Ansible assumes, unless otherwise instructed, that the python binary will live at /usr/bin/python. This is done via the interpreter line in modules, however when instructed by setting the inventory variable 'ansible_python_interpreter', Ansible will use this specified path instead to find Python. This can be a cause of confusion as one may assume that modules running on 'localhost', or perhaps running via 'local_action', are using the virtualenv Python interpreter. By setting this line in the inventory, the modules will execute in the virtualenv interpreter and have available the virtualenv packages, specifically pyrax. If using virtualenv, you may wish to modify your localhost inventory definition to find this location as follows: .. code-block:: ini [localhost] localhost ansible_connection=local ansible_python_interpreter=/path/to/ansible_venv/bin/python .. note:: pyrax may be installed in the global Python package scope or in a virtual environment. There are no special considerations to keep in mind when installing pyrax. .. _provisioning: Provisioning ```````````` Now for the fun parts. The 'rax' module provides the ability to provision instances within Rackspace Cloud. Typically the provisioning task will be performed from your Ansible control server (in our example, localhost) against the Rackspace cloud API. This is done for several reasons: - Avoiding installing the pyrax library on remote nodes - No need to encrypt and distribute credentials to remote nodes - Speed and simplicity .. note:: Authentication with the Rackspace-related modules is handled by either specifying your username and API key as environment variables or passing them as module arguments, or by specifying the location of a credentials file. Here is a basic example of provisioning an instance in ad hoc mode: .. code-block:: bash $ ansible localhost -m rax -a "name=awx flavor=4 image=ubuntu-1204-lts-precise-pangolin wait=yes" Here's what it would look like in a playbook, assuming the parameters were defined in variables: .. code-block:: yaml tasks: - name: Provision a set of instances rax: name: "{{ rax_name }}" flavor: "{{ rax_flavor }}" image: "{{ rax_image }}" count: "{{ rax_count }}" group: "{{ group }}" wait: yes register: rax delegate_to: localhost The rax module returns data about the nodes it creates, like IP addresses, hostnames, and login passwords. By registering the return value of the step, it is possible used this data to dynamically add the resulting hosts to inventory (temporarily, in memory). This facilitates performing configuration actions on the hosts in a follow-on task. In the following example, the servers that were successfully created using the above task are dynamically added to a group called "raxhosts", with each nodes hostname, IP address, and root password being added to the inventory. .. code-block:: yaml - name: Add the instances we created (by public IP) to the group 'raxhosts' add_host: hostname: "{{ item.name }}" ansible_host: "{{ item.rax_accessipv4 }}" ansible_password: "{{ item.rax_adminpass }}" groups: raxhosts loop: "{{ rax.success }}" when: rax.action == 'create' With the host group now created, the next play in this playbook could now configure servers belonging to the raxhosts group. .. code-block:: yaml - name: Configuration play hosts: raxhosts user: root roles: - ntp - webserver The method above ties the configuration of a host with the provisioning step. This isn't always what you want, and leads us to the next section. .. _host_inventory: Host Inventory `````````````` Once your nodes are spun up, you'll probably want to talk to them again. The best way to handle this is to use the "rax" inventory plugin, which dynamically queries Rackspace Cloud and tells Ansible what nodes you have to manage. You might want to use this even if you are spinning up cloud instances via other tools, including the Rackspace Cloud user interface. The inventory plugin can be used to group resources by metadata, region, OS, and so on. Utilizing metadata is highly recommended in "rax" and can provide an easy way to sort between host groups and roles. If you don't want to use the ``rax.py`` dynamic inventory script, you could also still choose to manually manage your INI inventory file, though this is less recommended. In Ansible it is quite possible to use multiple dynamic inventory plugins along with INI file data. Just put them in a common directory and be sure the scripts are chmod +x, and the INI-based ones are not. .. _raxpy: rax.py ++++++ To use the Rackspace dynamic inventory script, copy ``rax.py`` into your inventory directory and make it executable. You can specify a credentials file for ``rax.py`` utilizing the ``RAX_CREDS_FILE`` environment variable. .. note:: Dynamic inventory scripts (like ``rax.py``) are saved in ``/usr/share/ansible/inventory`` if Ansible has been installed globally. If installed to a virtualenv, the inventory scripts are installed to ``$VIRTUALENV/share/inventory``. .. note:: Users of :ref:`ansible_platform` will note that dynamic inventory is natively supported by the controller in the platform, and all you have to do is associate a group with your Rackspace Cloud credentials, and it will easily synchronize without going through these steps:: $ RAX_CREDS_FILE=~/.raxpub ansible all -i rax.py -m setup ``rax.py`` also accepts a ``RAX_REGION`` environment variable, which can contain an individual region, or a comma separated list of regions. When using ``rax.py``, you will not have a 'localhost' defined in the inventory. As mentioned previously, you will often be running most of these modules outside of the host loop, and will need 'localhost' defined. The recommended way to do this, would be to create an ``inventory`` directory, and place both the ``rax.py`` script and a file containing ``localhost`` in it. Executing ``ansible`` or ``ansible-playbook`` and specifying the ``inventory`` directory instead of an individual file, will cause ansible to evaluate each file in that directory for inventory. Let's test our inventory script to see if it can talk to Rackspace Cloud. .. code-block:: bash $ RAX_CREDS_FILE=~/.raxpub ansible all -i inventory/ -m setup Assuming things are properly configured, the ``rax.py`` inventory script will output information similar to the following information, which will be utilized for inventory and variables. .. code-block:: json { "ORD": [ "test" ], "_meta": { "hostvars": { "test": { "ansible_host": "198.51.100.1", "rax_accessipv4": "198.51.100.1", "rax_accessipv6": "2001:DB8::2342", "rax_addresses": { "private": [ { "addr": "192.0.2.2", "version": 4 } ], "public": [ { "addr": "198.51.100.1", "version": 4 }, { "addr": "2001:DB8::2342", "version": 6 } ] }, "rax_config_drive": "", "rax_created": "2013-11-14T20:48:22Z", "rax_flavor": { "id": "performance1-1", "links": [ { "href": "https://ord.servers.api.rackspacecloud.com/111111/flavors/performance1-1", "rel": "bookmark" } ] }, "rax_hostid": "e7b6961a9bd943ee82b13816426f1563bfda6846aad84d52af45a4904660cde0", "rax_human_id": "test", "rax_id": "099a447b-a644-471f-87b9-a7f580eb0c2a", "rax_image": { "id": "b211c7bf-b5b4-4ede-a8de-a4368750c653", "links": [ { "href": "https://ord.servers.api.rackspacecloud.com/111111/images/b211c7bf-b5b4-4ede-a8de-a4368750c653", "rel": "bookmark" } ] }, "rax_key_name": null, "rax_links": [ { "href": "https://ord.servers.api.rackspacecloud.com/v2/111111/servers/099a447b-a644-471f-87b9-a7f580eb0c2a", "rel": "self" }, { "href": "https://ord.servers.api.rackspacecloud.com/111111/servers/099a447b-a644-471f-87b9-a7f580eb0c2a", "rel": "bookmark" } ], "rax_metadata": { "foo": "bar" }, "rax_name": "test", "rax_name_attr": "name", "rax_networks": { "private": [ "192.0.2.2" ], "public": [ "198.51.100.1", "2001:DB8::2342" ] }, "rax_os-dcf_diskconfig": "AUTO", "rax_os-ext-sts_power_state": 1, "rax_os-ext-sts_task_state": null, "rax_os-ext-sts_vm_state": "active", "rax_progress": 100, "rax_status": "ACTIVE", "rax_tenant_id": "111111", "rax_updated": "2013-11-14T20:49:27Z", "rax_user_id": "22222" } } } } .. _standard_inventory: Standard Inventory ++++++++++++++++++ When utilizing a standard ini formatted inventory file (as opposed to the inventory plugin), it may still be advantageous to retrieve discoverable hostvar information from the Rackspace API. This can be achieved with the ``rax_facts`` module and an inventory file similar to the following: .. code-block:: ini [test_servers] hostname1 rax_region=ORD hostname2 rax_region=ORD .. code-block:: yaml - name: Gather info about servers hosts: test_servers gather_facts: False tasks: - name: Get facts about servers rax_facts: credentials: ~/.raxpub name: "{{ inventory_hostname }}" region: "{{ rax_region }}" delegate_to: localhost - name: Map some facts set_fact: ansible_host: "{{ rax_accessipv4 }}" While you don't need to know how it works, it may be interesting to know what kind of variables are returned. The ``rax_facts`` module provides facts as followings, which match the ``rax.py`` inventory script: .. code-block:: json { "ansible_facts": { "rax_accessipv4": "198.51.100.1", "rax_accessipv6": "2001:DB8::2342", "rax_addresses": { "private": [ { "addr": "192.0.2.2", "version": 4 } ], "public": [ { "addr": "198.51.100.1", "version": 4 }, { "addr": "2001:DB8::2342", "version": 6 } ] }, "rax_config_drive": "", "rax_created": "2013-11-14T20:48:22Z", "rax_flavor": { "id": "performance1-1", "links": [ { "href": "https://ord.servers.api.rackspacecloud.com/111111/flavors/performance1-1", "rel": "bookmark" } ] }, "rax_hostid": "e7b6961a9bd943ee82b13816426f1563bfda6846aad84d52af45a4904660cde0", "rax_human_id": "test", "rax_id": "099a447b-a644-471f-87b9-a7f580eb0c2a", "rax_image": { "id": "b211c7bf-b5b4-4ede-a8de-a4368750c653", "links": [ { "href": "https://ord.servers.api.rackspacecloud.com/111111/images/b211c7bf-b5b4-4ede-a8de-a4368750c653", "rel": "bookmark" } ] }, "rax_key_name": null, "rax_links": [ { "href": "https://ord.servers.api.rackspacecloud.com/v2/111111/servers/099a447b-a644-471f-87b9-a7f580eb0c2a", "rel": "self" }, { "href": "https://ord.servers.api.rackspacecloud.com/111111/servers/099a447b-a644-471f-87b9-a7f580eb0c2a", "rel": "bookmark" } ], "rax_metadata": { "foo": "bar" }, "rax_name": "test", "rax_name_attr": "name", "rax_networks": { "private": [ "192.0.2.2" ], "public": [ "198.51.100.1", "2001:DB8::2342" ] }, "rax_os-dcf_diskconfig": "AUTO", "rax_os-ext-sts_power_state": 1, "rax_os-ext-sts_task_state": null, "rax_os-ext-sts_vm_state": "active", "rax_progress": 100, "rax_status": "ACTIVE", "rax_tenant_id": "111111", "rax_updated": "2013-11-14T20:49:27Z", "rax_user_id": "22222" }, "changed": false } Use Cases ````````` This section covers some additional usage examples built around a specific use case. .. _network_and_server: Network and Server ++++++++++++++++++ Create an isolated cloud network and build a server .. code-block:: yaml - name: Build Servers on an Isolated Network hosts: localhost gather_facts: False tasks: - name: Network create request rax_network: credentials: ~/.raxpub label: my-net cidr: 192.168.3.0/24 region: IAD state: present delegate_to: localhost - name: Server create request rax: credentials: ~/.raxpub name: web%04d.example.org flavor: 2 image: ubuntu-1204-lts-precise-pangolin disk_config: manual networks: - public - my-net region: IAD state: present count: 5 exact_count: yes group: web wait: yes wait_timeout: 360 register: rax delegate_to: localhost .. _complete_environment: Complete Environment ++++++++++++++++++++ Build a complete webserver environment with servers, custom networks and load balancers, install nginx and create a custom index.html .. code-block:: yaml --- - name: Build environment hosts: localhost gather_facts: False tasks: - name: Load Balancer create request rax_clb: credentials: ~/.raxpub name: my-lb port: 80 protocol: HTTP algorithm: ROUND_ROBIN type: PUBLIC timeout: 30 region: IAD wait: yes state: present meta: app: my-cool-app register: clb - name: Network create request rax_network: credentials: ~/.raxpub label: my-net cidr: 192.168.3.0/24 state: present region: IAD register: network - name: Server create request rax: credentials: ~/.raxpub name: web%04d.example.org flavor: performance1-1 image: ubuntu-1204-lts-precise-pangolin disk_config: manual networks: - public - private - my-net region: IAD state: present count: 5 exact_count: yes group: web wait: yes register: rax - name: Add servers to web host group add_host: hostname: "{{ item.name }}" ansible_host: "{{ item.rax_accessipv4 }}" ansible_password: "{{ item.rax_adminpass }}" ansible_user: root groups: web loop: "{{ rax.success }}" when: rax.action == 'create' - name: Add servers to Load balancer rax_clb_nodes: credentials: ~/.raxpub load_balancer_id: "{{ clb.balancer.id }}" address: "{{ item.rax_networks.private|first }}" port: 80 condition: enabled type: primary wait: yes region: IAD loop: "{{ rax.success }}" when: rax.action == 'create' - name: Configure servers hosts: web handlers: - name: restart nginx service: name=nginx state=restarted tasks: - name: Install nginx apt: pkg=nginx state=latest update_cache=yes cache_valid_time=86400 notify: - restart nginx - name: Ensure nginx starts on boot service: name=nginx state=started enabled=yes - name: Create custom index.html copy: content="{{ inventory_hostname }}" dest=/usr/share/nginx/www/index.html owner=root group=root mode=0644 .. _rackconnect_and_manged_cloud: RackConnect and Managed Cloud +++++++++++++++++++++++++++++ When using RackConnect version 2 or Rackspace Managed Cloud there are Rackspace automation tasks that are executed on the servers you create after they are successfully built. If your automation executes before the RackConnect or Managed Cloud automation, you can cause failures and unusable servers. These examples show creating servers, and ensuring that the Rackspace automation has completed before Ansible continues onwards. For simplicity, these examples are joined, however both are only needed when using RackConnect. When only using Managed Cloud, the RackConnect portion can be ignored. The RackConnect portions only apply to RackConnect version 2. .. _using_a_control_machine: Using a Control Machine *********************** .. code-block:: yaml - name: Create an exact count of servers hosts: localhost gather_facts: False tasks: - name: Server build requests rax: credentials: ~/.raxpub name: web%03d.example.org flavor: performance1-1 image: ubuntu-1204-lts-precise-pangolin disk_config: manual region: DFW state: present count: 1 exact_count: yes group: web wait: yes register: rax - name: Add servers to in memory groups add_host: hostname: "{{ item.name }}" ansible_host: "{{ item.rax_accessipv4 }}" ansible_password: "{{ item.rax_adminpass }}" ansible_user: root rax_id: "{{ item.rax_id }}" groups: web,new_web loop: "{{ rax.success }}" when: rax.action == 'create' - name: Wait for rackconnect and managed cloud automation to complete hosts: new_web gather_facts: false tasks: - name: ensure we run all tasks from localhost delegate_to: localhost block: - name: Wait for rackconnnect automation to complete rax_facts: credentials: ~/.raxpub id: "{{ rax_id }}" region: DFW register: rax_facts until: rax_facts.ansible_facts['rax_metadata']['rackconnect_automation_status']|default('') == 'DEPLOYED' retries: 30 delay: 10 - name: Wait for managed cloud automation to complete rax_facts: credentials: ~/.raxpub id: "{{ rax_id }}" region: DFW register: rax_facts until: rax_facts.ansible_facts['rax_metadata']['rax_service_level_automation']|default('') == 'Complete' retries: 30 delay: 10 - name: Update new_web hosts with IP that RackConnect assigns hosts: new_web gather_facts: false tasks: - name: Get facts about servers rax_facts: name: "{{ inventory_hostname }}" region: DFW delegate_to: localhost - name: Map some facts set_fact: ansible_host: "{{ rax_accessipv4 }}" - name: Base Configure Servers hosts: web roles: - role: users - role: openssh opensshd_PermitRootLogin: "no" - role: ntp .. _using_ansible_pull: Using Ansible Pull ****************** .. code-block:: yaml --- - name: Ensure Rackconnect and Managed Cloud Automation is complete hosts: all tasks: - name: ensure we run all tasks from localhost delegate_to: localhost block: - name: Check for completed bootstrap stat: path: /etc/bootstrap_complete register: bootstrap - name: Get region command: xenstore-read vm-data/provider_data/region register: rax_region when: bootstrap.stat.exists != True - name: Wait for rackconnect automation to complete uri: url: "https://{{ rax_region.stdout|trim }}.api.rackconnect.rackspace.com/v1/automation_status?format=json" return_content: yes register: automation_status when: bootstrap.stat.exists != True until: automation_status['automation_status']|default('') == 'DEPLOYED' retries: 30 delay: 10 - name: Wait for managed cloud automation to complete wait_for: path: /tmp/rs_managed_cloud_automation_complete delay: 10 when: bootstrap.stat.exists != True - name: Set bootstrap completed file: path: /etc/bootstrap_complete state: touch owner: root group: root mode: 0400 - name: Base Configure Servers hosts: all roles: - role: users - role: openssh opensshd_PermitRootLogin: "no" - role: ntp .. _using_ansible_pull_with_xenstore: Using Ansible Pull with XenStore ******************************** .. code-block:: yaml --- - name: Ensure Rackconnect and Managed Cloud Automation is complete hosts: all tasks: - name: Check for completed bootstrap stat: path: /etc/bootstrap_complete register: bootstrap - name: Wait for rackconnect_automation_status xenstore key to exist command: xenstore-exists vm-data/user-metadata/rackconnect_automation_status register: rcas_exists when: bootstrap.stat.exists != True failed_when: rcas_exists.rc|int > 1 until: rcas_exists.rc|int == 0 retries: 30 delay: 10 - name: Wait for rackconnect automation to complete command: xenstore-read vm-data/user-metadata/rackconnect_automation_status register: rcas when: bootstrap.stat.exists != True until: rcas.stdout|replace('"', '') == 'DEPLOYED' retries: 30 delay: 10 - name: Wait for rax_service_level_automation xenstore key to exist command: xenstore-exists vm-data/user-metadata/rax_service_level_automation register: rsla_exists when: bootstrap.stat.exists != True failed_when: rsla_exists.rc|int > 1 until: rsla_exists.rc|int == 0 retries: 30 delay: 10 - name: Wait for managed cloud automation to complete command: xenstore-read vm-data/user-metadata/rackconnect_automation_status register: rsla when: bootstrap.stat.exists != True until: rsla.stdout|replace('"', '') == 'DEPLOYED' retries: 30 delay: 10 - name: Set bootstrap completed file: path: /etc/bootstrap_complete state: touch owner: root group: root mode: 0400 - name: Base Configure Servers hosts: all roles: - role: users - role: openssh opensshd_PermitRootLogin: "no" - role: ntp .. _advanced_usage: Advanced Usage `````````````` .. _awx_autoscale: Autoscaling with AWX or Red Hat Ansible Automation Platform +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The GUI component of :ref:`Red Hat Ansible Automation Platform ` also contains a very nice feature for auto-scaling use cases. In this mode, a simple curl script can call a defined URL and the server will "dial out" to the requester and configure an instance that is spinning up. This can be a great way to reconfigure ephemeral nodes. See `the documentation on provisioning callbacks `_ for more details. A benefit of using the callback approach over pull mode is that job results are still centrally recorded and less information has to be shared with remote hosts. .. _pending_information: Orchestration in the Rackspace Cloud ++++++++++++++++++++++++++++++++++++ Ansible is a powerful orchestration tool, and rax modules allow you the opportunity to orchestrate complex tasks, deployments, and configurations. The key here is to automate provisioning of infrastructure, like any other piece of software in an environment. Complex deployments might have previously required manual manipulation of load balancers, or manual provisioning of servers. Utilizing the rax modules included with Ansible, one can make the deployment of additional nodes contingent on the current number of running nodes, or the configuration of a clustered application dependent on the number of nodes with common metadata. One could automate the following scenarios, for example: * Servers that are removed from a Cloud Load Balancer one-by-one, updated, verified, and returned to the load balancer pool * Expansion of an already-online environment, where nodes are provisioned, bootstrapped, configured, and software installed * A procedure where app log files are uploaded to a central location, like Cloud Files, before a node is decommissioned * Servers and load balancers that have DNS records created and destroyed on creation and decommissioning, respectively ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_scaleway.rst0000644000000000000000000002331100000000000026152 0ustar00rootroot00000000000000.. _guide_scaleway: ************** Scaleway Guide ************** .. _scaleway_introduction: Introduction ============ `Scaleway `_ is a cloud provider supported by Ansible, version 2.6 or higher via a dynamic inventory plugin and modules. Those modules are: - :ref:`scaleway_sshkey_module`: adds a public SSH key from a file or value to the Packet infrastructure. Every subsequently-created device will have this public key installed in .ssh/authorized_keys. - :ref:`scaleway_compute_module`: manages servers on Scaleway. You can use this module to create, restart and delete servers. - :ref:`scaleway_volume_module`: manages volumes on Scaleway. .. note:: This guide assumes you are familiar with Ansible and how it works. If you're not, have a look at :ref:`ansible_documentation` before getting started. .. _scaleway_requirements: Requirements ============ The Scaleway modules and inventory script connect to the Scaleway API using `Scaleway REST API `_. To use the modules and inventory script you'll need a Scaleway API token. You can generate an API token via the Scaleway console `here `__. The simplest way to authenticate yourself is to set the Scaleway API token in an environment variable: .. code-block:: bash $ export SCW_TOKEN=00000000-1111-2222-3333-444444444444 If you're not comfortable exporting your API token, you can pass it as a parameter to the modules using the ``api_token`` argument. If you want to use a new SSH keypair in this tutorial, you can generate it to ``./id_rsa`` and ``./id_rsa.pub`` as: .. code-block:: bash $ ssh-keygen -t rsa -f ./id_rsa If you want to use an existing keypair, just copy the private and public key over to the playbook directory. .. _scaleway_add_sshkey: How to add an SSH key? ====================== Connection to Scaleway Compute nodes use Secure Shell. SSH keys are stored at the account level, which means that you can re-use the same SSH key in multiple nodes. The first step to configure Scaleway compute resources is to have at least one SSH key configured. :ref:`scaleway_sshkey_module` is a module that manages SSH keys on your Scaleway account. You can add an SSH key to your account by including the following task in a playbook: .. code-block:: yaml - name: "Add SSH key" scaleway_sshkey: ssh_pub_key: "ssh-rsa AAAA..." state: "present" The ``ssh_pub_key`` parameter contains your ssh public key as a string. Here is an example inside a playbook: .. code-block:: yaml - name: Test SSH key lifecycle on a Scaleway account hosts: localhost gather_facts: no environment: SCW_API_KEY: "" tasks: - scaleway_sshkey: ssh_pub_key: "ssh-rsa AAAAB...424242 developer@example.com" state: present register: result - assert: that: - result is success and result is changed .. _scaleway_create_instance: How to create a compute instance? ================================= Now that we have an SSH key configured, the next step is to spin up a server! :ref:`scaleway_compute_module` is a module that can create, update and delete Scaleway compute instances: .. code-block:: yaml - name: Create a server scaleway_compute: name: foobar state: present image: 00000000-1111-2222-3333-444444444444 organization: 00000000-1111-2222-3333-444444444444 region: ams1 commercial_type: START1-S Here are the parameter details for the example shown above: - ``name`` is the name of the instance (the one that will show up in your web console). - ``image`` is the UUID of the system image you would like to use. A list of all images is available for each availability zone. - ``organization`` represents the organization that your account is attached to. - ``region`` represents the Availability Zone which your instance is in (for this example, par1 and ams1). - ``commercial_type`` represents the name of the commercial offers. You can check out the Scaleway pricing page to find which instance is right for you. Take a look at this short playbook to see a working example using ``scaleway_compute``: .. code-block:: yaml - name: Test compute instance lifecycle on a Scaleway account hosts: localhost gather_facts: no environment: SCW_API_KEY: "" tasks: - name: Create a server register: server_creation_task scaleway_compute: name: foobar state: present image: 00000000-1111-2222-3333-444444444444 organization: 00000000-1111-2222-3333-444444444444 region: ams1 commercial_type: START1-S wait: true - debug: var=server_creation_task - assert: that: - server_creation_task is success - server_creation_task is changed - name: Run it scaleway_compute: name: foobar state: running image: 00000000-1111-2222-3333-444444444444 organization: 00000000-1111-2222-3333-444444444444 region: ams1 commercial_type: START1-S wait: true tags: - web_server register: server_run_task - debug: var=server_run_task - assert: that: - server_run_task is success - server_run_task is changed .. _scaleway_dynamic_inventory_tutorial: Dynamic Inventory Script ======================== Ansible ships with :ref:`scaleway_inventory`. You can now get a complete inventory of your Scaleway resources through this plugin and filter it on different parameters (``regions`` and ``tags`` are currently supported). Let's create an example! Suppose that we want to get all hosts that got the tag web_server. Create a file named ``scaleway_inventory.yml`` with the following content: .. code-block:: yaml plugin: scaleway regions: - ams1 - par1 tags: - web_server This inventory means that we want all hosts that got the tag ``web_server`` on the zones ``ams1`` and ``par1``. Once you have configured this file, you can get the information using the following command: .. code-block:: bash $ ansible-inventory --list -i scaleway_inventory.yml The output will be: .. code-block:: yaml { "_meta": { "hostvars": { "dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d": { "ansible_verbosity": 6, "arch": "x86_64", "commercial_type": "START1-S", "hostname": "foobar", "ipv4": "192.0.2.1", "organization": "00000000-1111-2222-3333-444444444444", "state": "running", "tags": [ "web_server" ] } } }, "all": { "children": [ "ams1", "par1", "ungrouped", "web_server" ] }, "ams1": {}, "par1": { "hosts": [ "dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d" ] }, "ungrouped": {}, "web_server": { "hosts": [ "dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d" ] } } As you can see, we get different groups of hosts. ``par1`` and ``ams1`` are groups based on location. ``web_server`` is a group based on a tag. In case a filter parameter is not defined, the plugin supposes all values possible are wanted. This means that for each tag that exists on your Scaleway compute nodes, a group based on each tag will be created. Scaleway S3 object storage ========================== `Object Storage `_ allows you to store any kind of objects (documents, images, videos, and so on). As the Scaleway API is S3 compatible, Ansible supports it natively through the modules: :ref:`s3_bucket_module`, :ref:`aws_s3_module`. You can find many examples in the `scaleway_s3 integration tests `_. .. code-block:: yaml+jinja - hosts: myserver vars: scaleway_region: nl-ams s3_url: https://s3.nl-ams.scw.cloud environment: # AWS_ACCESS_KEY matches your scaleway organization id available at https://cloud.scaleway.com/#/account AWS_ACCESS_KEY: 00000000-1111-2222-3333-444444444444 # AWS_SECRET_KEY matches a secret token that you can retrieve at https://cloud.scaleway.com/#/credentials AWS_SECRET_KEY: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee module_defaults: group/aws: s3_url: '{{ s3_url }}' region: '{{ scaleway_region }}' tasks: # use a fact instead of a variable, otherwise template is evaluate each time variable is used - set_fact: bucket_name: "{{ 99999999 | random | to_uuid }}" # "requester_pays:" is mandatory because Scaleway doesn't implement related API # another way is to use aws_s3 and "mode: create" ! - s3_bucket: name: '{{ bucket_name }}' requester_pays: - name: Another way to create the bucket aws_s3: bucket: '{{ bucket_name }}' mode: create encrypt: false register: bucket_creation_check - name: add something in the bucket aws_s3: mode: put bucket: '{{ bucket_name }}' src: /tmp/test.txt # needs to be created before object: test.txt encrypt: false # server side encryption must be disabled ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_vagrant.rst0000644000000000000000000001174300000000000026012 0ustar00rootroot00000000000000Vagrant Guide ============= .. _vagrant_intro: Introduction ```````````` `Vagrant `_ is a tool to manage virtual machine environments, and allows you to configure and use reproducible work environments on top of various virtualization and cloud platforms. It also has integration with Ansible as a provisioner for these virtual machines, and the two tools work together well. This guide will describe how to use Vagrant 1.7+ and Ansible together. If you're not familiar with Vagrant, you should visit `the documentation `_. This guide assumes that you already have Ansible installed and working. Running from a Git checkout is fine. Follow the :ref:`installation_guide` guide for more information. .. _vagrant_setup: Vagrant Setup ````````````` The first step once you've installed Vagrant is to create a ``Vagrantfile`` and customize it to suit your needs. This is covered in detail in the Vagrant documentation, but here is a quick example that includes a section to use the Ansible provisioner to manage a single machine: .. code-block:: ruby # This guide is optimized for Vagrant 1.8 and above. # Older versions of Vagrant put less info in the inventory they generate. Vagrant.require_version ">= 1.8.0" Vagrant.configure(2) do |config| config.vm.box = "ubuntu/bionic64" config.vm.provision "ansible" do |ansible| ansible.verbose = "v" ansible.playbook = "playbook.yml" end end Notice the ``config.vm.provision`` section that refers to an Ansible playbook called ``playbook.yml`` in the same directory as the ``Vagrantfile``. Vagrant runs the provisioner once the virtual machine has booted and is ready for SSH access. There are a lot of Ansible options you can configure in your ``Vagrantfile``. Visit the `Ansible Provisioner documentation `_ for more information. .. code-block:: bash $ vagrant up This will start the VM, and run the provisioning playbook (on the first VM startup). To re-run a playbook on an existing VM, just run: .. code-block:: bash $ vagrant provision This will re-run the playbook against the existing VM. Note that having the ``ansible.verbose`` option enabled will instruct Vagrant to show the full ``ansible-playbook`` command used behind the scene, as illustrated by this example: .. code-block:: bash $ PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING=false ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --connection=ssh --timeout=30 --limit="default" --inventory-file=/home/someone/coding-in-a-project/.vagrant/provisioners/ansible/inventory -v playbook.yml This information can be quite useful to debug integration issues and can also be used to manually execute Ansible from a shell, as explained in the next section. .. _running_ansible: Running Ansible Manually ```````````````````````` Sometimes you may want to run Ansible manually against the machines. This is faster than kicking ``vagrant provision`` and pretty easy to do. With our ``Vagrantfile`` example, Vagrant automatically creates an Ansible inventory file in ``.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory``. This inventory is configured according to the SSH tunnel that Vagrant automatically creates. A typical automatically-created inventory file for a single machine environment may look something like this: .. code-block:: none # Generated by Vagrant default ansible_host=127.0.0.1 ansible_port=2222 ansible_user='vagrant' ansible_ssh_private_key_file='/home/someone/coding-in-a-project/.vagrant/machines/default/virtualbox/private_key' If you want to run Ansible manually, you will want to make sure to pass ``ansible`` or ``ansible-playbook`` commands the correct arguments, at least for the *inventory*. .. code-block:: bash $ ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml Advanced Usages ``````````````` The "Tips and Tricks" chapter of the `Ansible Provisioner documentation `_ provides detailed information about more advanced Ansible features like: - how to execute a playbook in parallel within a multi-machine environment - how to integrate a local ``ansible.cfg`` configuration file .. seealso:: `Vagrant Home `_ The Vagrant homepage with downloads `Vagrant Documentation `_ Vagrant Documentation `Ansible Provisioner `_ The Vagrant documentation for the Ansible provisioner `Vagrant Issue Tracker `_ The open issues for the Ansible provisioner in the Vagrant project :ref:`working_with_playbooks` An introduction to playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_vmware.rst0000644000000000000000000000176600000000000025655 0ustar00rootroot00000000000000.. _vmware_ansible: ************ VMware Guide ************ Welcome to the Ansible for VMware Guide! The purpose of this guide is to teach you everything you need to know about using Ansible with VMware. To get started, please select one of the following topics. .. toctree:: :maxdepth: 1 vmware_scenarios/vmware_intro vmware_scenarios/vmware_concepts vmware_scenarios/vmware_requirements vmware_scenarios/vmware_inventory vmware_scenarios/vmware_inventory_vm_attributes vmware_scenarios/vmware_inventory_hostnames vmware_scenarios/vmware_inventory_filters vmware_scenarios/vmware_scenarios vmware_scenarios/vmware_troubleshooting vmware_scenarios/vmware_external_doc_links vmware_scenarios/faq .. comments look like this - start with two dots .. getting_started content not ready .. vmware_scenarios/vmware_getting_started .. module index page not ready .. vmware_scenarios/vmware_module_reference .. always exclude the template file .. vmware_scenarios/vmware_scenario_1 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_vmware_rest.rst0000644000000000000000000000127200000000000026702 0ustar00rootroot00000000000000.. _vmware_rest_scenarios: **************************** VMware REST Scenarios **************************** These scenarios teach you how to accomplish common VMware tasks using the REST API and the Ansible ``vmware.vmware_rest`` collection. To get started, please select the task you want to accomplish. .. toctree:: :maxdepth: 1 vmware_rest_scenarios/installation vmware_rest_scenarios/authentication vmware_rest_scenarios/collect_information vmware_rest_scenarios/create_vm vmware_rest_scenarios/vm_info vmware_rest_scenarios/vm_hardware_tuning vmware_rest_scenarios/run_a_vm vmware_rest_scenarios/vm_tool_information vmware_rest_scenarios/vm_tool_configuration ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guide_vultr.rst0000644000000000000000000001057100000000000025522 0ustar00rootroot00000000000000Vultr Guide =========== Ansible offers a set of modules to interact with `Vultr `_ cloud platform. This set of module forms a framework that allows one to easily manage and orchestrate one's infrastructure on Vultr cloud platform. Requirements ------------ There is actually no technical requirement; simply an already created Vultr account. Configuration ------------- Vultr modules offer a rather flexible way with regard to configuration. Configuration is read in that order: - Environment Variables (eg. ``VULTR_API_KEY``, ``VULTR_API_TIMEOUT``) - File specified by environment variable ``VULTR_API_CONFIG`` - ``vultr.ini`` file located in current working directory - ``$HOME/.vultr.ini`` Ini file are structured this way: .. code-block:: ini [default] key = MY_API_KEY timeout = 60 [personal_account] key = MY_PERSONAL_ACCOUNT_API_KEY timeout = 30 If ``VULTR_API_ACCOUNT`` environment variable or ``api_account`` module parameter is not specified, modules will look for the section named "default". Authentication -------------- Before using the Ansible modules to interact with Vultr, ones need an API key. If one doesn't own one yet, log in to `Vultr `_ go to Account, then API, enable API then the API key should show up. Ensure you allow the usage of the API key from the proper IP addresses. Refer to the Configuration section to find out where to put this information. To check that everything is working properly run the following command: .. code-block:: console #> VULTR_API_KEY=XXX ansible -m vultr_account_info localhost localhost | SUCCESS => { "changed": false, "vultr_account_info": { "balance": -8.9, "last_payment_amount": -10.0, "last_payment_date": "2018-07-21 11:34:46", "pending_charges": 6.0 }, "vultr_api": { "api_account": "default", "api_endpoint": "https://api.vultr.com", "api_retries": 5, "api_timeout": 60 } } If a similar output displays then everything is setup properly, else please ensure the proper ``VULTR_API_KEY`` has been specified and that Access Control on Vultr > Account > API page are accurate. Usage ----- Since `Vultr `_ offers a public API, the execution of the module to manage the infrastructure on their platform will happen on localhost. This translates to: .. code-block:: yaml --- - hosts: localhost tasks: - name: Create a 10G volume vultr_block_storage: name: my_disk size: 10 region: New Jersey From that point on, only your creativity is the limit. Make sure to read the documentation of the `available modules `_. Dynamic Inventory ----------------- Ansible provides a dynamic inventory plugin for `Vultr `_. The configuration process is exactly the same as the one for the modules. To be able to use it you need to enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins=vultr And provide a configuration file to be used with the plugin, the minimal configuration file looks like this: .. code-block:: yaml --- plugin: vultr To list the available hosts one can simply run: .. code-block:: console #> ansible-inventory -i vultr.yml --list For example, this allows you to take action on nodes grouped by location or OS name: .. code-block:: yaml --- - hosts: Amsterdam tasks: - name: Rebooting the machine shell: reboot become: True Integration tests ----------------- Ansible includes integration tests for all Vultr modules. These tests are meant to run against the public Vultr API and that is why they require a valid key to access the API. Prepare the test setup: .. code-block:: shell $ cd ansible # location the ansible source is $ source ./hacking/env-setup Set the Vultr API key: .. code-block:: shell $ cd test/integration $ cp cloud-config-vultr.ini.template cloud-config-vultr.ini $ vi cloud-config-vultr.ini Run all Vultr tests: .. code-block:: shell $ ansible-test integration cloud/vultr/ -v --diff --allow-unsupported To run a specific test, for example vultr_account_info: .. code-block:: shell $ ansible-test integration cloud/vultr/vultr_account_info -v --diff --allow-unsupported ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/guides.rst0000644000000000000000000000206600000000000024451 0ustar00rootroot00000000000000:orphan: .. unified index page included for backwards compatibility ****************** Scenario Guides ****************** The guides in this section are migrating into collections. Remaining guides may be out of date. These guides cover integrating Ansible with a variety of platforms, products, and technologies. They explore particular use cases in greater depth and provide a more "top-down" explanation of some basic features. We are migrating these guides into collections. Please update your links for the following guides: :ref:`ansible_collections.amazon.aws.docsite.aws_intro` .. toctree:: :maxdepth: 1 :caption: Legacy Public Cloud Guides guide_alicloud guide_cloudstack guide_gce guide_azure guide_online guide_oracle guide_packet guide_rax guide_scaleway guide_vultr .. toctree:: :maxdepth: 1 :caption: Network Technology Guides guide_aci guide_meraki guide_infoblox .. toctree:: :maxdepth: 1 :caption: Virtualization & Containerization Guides guide_kubernetes guide_vagrant guide_vmware ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.957559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/0000755000000000000000000000000000000000000026650 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/k8s_intro.rst0000644000000000000000000000417700000000000031333 0ustar00rootroot00000000000000.. _k8s_ansible_intro: ************************************** Introduction to Ansible for Kubernetes ************************************** .. contents:: :local: Introduction ============ Modules for interacting with the Kubernetes (K8s) and OpenShift API are under development, and can be used in preview mode. To use them, review the requirements, and then follow the installation and use instructions. Requirements ============ To use the modules, you'll need the following: - Run Ansible from source. For assistance, view :ref:`from_source`. - `OpenShift Rest Client `_ installed on the host that will execute the modules. Installation ============ The Kubernetes modules are part of the `Ansible Kubernetes collection `_. To install the collection, run the following: .. code-block:: bash $ ansible-galaxy collection install kubernetes.core Authenticating with the API =========================== By default the OpenShift Rest Client will look for ``~/.kube/config``, and if found, connect using the active context. You can override the location of the file using the``kubeconfig`` parameter, and the context, using the ``context`` parameter. Basic authentication is also supported using the ``username`` and ``password`` options. You can override the URL using the ``host`` parameter. Certificate authentication works through the ``ssl_ca_cert``, ``cert_file``, and ``key_file`` parameters, and for token authentication, use the ``api_key`` parameter. To disable SSL certificate verification, set ``verify_ssl`` to false. Reporting an issue ================== If you find a bug or have a suggestion regarding modules, please file issues at `Ansible Kubernetes collection `_. If you find a bug regarding OpenShift client, please file issues at `OpenShift REST Client issues `_. If you find a bug regarding Kubectl binary, please file issues at `Kubectl issue tracker `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/k8s_inventory.rst0000644000000000000000000000716500000000000032235 0ustar00rootroot00000000000000.. _k8s_ansible_inventory: ***************************************** Using Kubernetes dynamic inventory plugin ***************************************** .. contents:: :local: Kubernetes dynamic inventory plugin =================================== The best way to interact with your Pods is to use the Kubernetes dynamic inventory plugin, which dynamically queries Kubernetes APIs using ``kubectl`` command line available on controller node and tells Ansible what Pods can be managed. Requirements ------------ To use the Kubernetes dynamic inventory plugins, you must install `Kubernetes Python client `_, `kubectl `_ and `OpenShift Python client `_ on your control node (the host running Ansible). .. code-block:: bash $ pip install kubernetes openshift Please refer to Kubernetes official documentation for `installing kubectl `_ on the given operating systems. To use this Kubernetes dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins = kubernetes.core.k8s Then, create a file that ends in ``.k8s.yml`` or ``.k8s.yaml`` in your working directory. The ``kubernetes.core.k8s`` inventory plugin takes in the same authentication information as any other Kubernetes modules. Here's an example of a valid inventory file: .. code-block:: yaml plugin: kubernetes.core.k8s Executing ``ansible-inventory --list -i .k8s.yml`` will create a list of Pods that are ready to be configured using Ansible. You can also provide the namespace to gather information about specific pods from the given namespace. For example, to gather information about Pods under the ``test`` namespace you will specify the ``namespaces`` parameter: .. code-block:: yaml plugin: kubernetes.core.k8s connections: - namespaces: - test Using vaulted configuration files ================================= Since the inventory configuration file contains Kubernetes related sensitive information in plain text, a security risk, you may want to encrypt your entire inventory configuration file. You can encrypt a valid inventory configuration file as follows: .. code-block:: bash $ ansible-vault encrypt .k8s.yml New Vault password: Confirm New Vault password: Encryption successful $ echo "MySuperSecretPassw0rd!" > /path/to/vault_password_file And you can use this vaulted inventory configuration file using: .. code-block:: bash $ ansible-inventory -i .k8s.yml --list --vault-password-file=/path/to/vault_password_file .. seealso:: `Kubernetes Python client `_ The GitHub Page of Kubernetes Python client `Kubernetes Python client - Issue Tracker `_ The issue tracker for Kubernetes Python client `OpenShift Python client `_ The GitHub Page of OpenShift Dynamic API client `OpenShift Python client - Issue Tracker `_ The issue tracker for OpenShift Dynamic API client `Kubectl installation `_ Installation guide for installing Kubectl :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.516556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/k8s_scenarios.rst0000644000000000000000000000047700000000000032165 0ustar00rootroot00000000000000.. _k8s_scenarios: ******************************** Ansible for Kubernetes Scenarios ******************************** These scenarios teach you how to accomplish common Kubernetes tasks using Ansible. To get started, please select the task you want to accomplish. .. toctree:: :maxdepth: 1 scenario_k8s_object././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/scenario_k8s_object.rst0000644000000000000000000000713200000000000033323 0ustar00rootroot00000000000000.. _k8s_object_template: ******************* Creating K8S object ******************* .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to create Kubernetes objects such as Pods, Deployments, and Secrets. Scenario Requirements ===================== * Software * Ansible 2.9.10 or later must be installed * The Python modules ``openshift`` and ``kubernetes`` must be installed on the Ansible controller (or Target host if not executing against localhost) * Kubernetes Cluster * Kubectl binary installed on the Ansible controller * Access / Credentials * Kubeconfig configured with the given Kubernetes cluster Assumptions =========== - User has required level of authorization to create, delete and update resources on the given Kubernetes cluster. Caveats ======= - community.kubernetes 1.1.0 is going to migrate to `kubernetes.core `_ Example Description =================== In this use case / example, we will create a Pod in the given Kubernetes Cluster. The following Ansible playbook showcases the basic parameters that are needed for this. .. literalinclude:: task_outputs/Add_a_pod_using_k8s.yaml Since Ansible utilizes the Kubernetes API to perform actions, in this use case we will be connecting directly to the Kubernetes cluster. To begin, there are a few bits of information we will need. Here you are using Kubeconfig which is pre-configured in your machine. The Kubeconfig is generally located at ``~/.kube/config``. It is highly recommended to store sensitive information such as password, user certificates in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. Now you need to supply the information about the Pod which will be created. Using ``definition`` parameter of the ``kubernetes.core.k8s`` module, you specify `PodTemplate `_. This PodTemplate is identical to what you provide to the ``kubectl`` command. What to expect -------------- - You will see a bit of JSON output after this playbook completes. This output shows various parameters that are returned from the module and from cluster about the newly created Pod. .. literalinclude:: task_outputs/Add_a_pod_using_k8s.json - In the above example, 'changed' is ``True`` which notifies that the Pod creation started on the given cluster. This can take some time depending on your environment. Troubleshooting --------------- Things to inspect - Check if the values provided for username and password are correct - Check if the Kubeconfig is populated with correct values .. seealso:: `Kubernetes Python client `_ The GitHub Page of Kubernetes Python client `Kubernetes Python client - Issue Tracker `_ The issue tracker for Kubernetes Python client `OpenShift Python client `_ The GitHub Page of OpenShift Dynamic API client `OpenShift Python client - Issue Tracker `_ The issue tracker for OpenShift Dynamic API client `Kubectl installation `_ Installation guide for installing Kubectl :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.957559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/task_outputs/0000755000000000000000000000000000000000000031415 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000022400000000000011453 xustar0000000000000000121 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/task_outputs/Add_a_pod_using_k8s.json 27 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/task_outputs/Add_a_pod_usi0000644000000000000000000000433600000000000034060 0ustar00rootroot00000000000000{ "changed": true, "method": "create", "result": { "apiVersion": "v1", "kind": "Pod", "metadata": { "creationTimestamp": "2020-10-03T15:36:25Z", "labels": { "app": "galaxy" }, "name": "utilitypod-1", "namespace": "default", "resourceVersion": "4511073", "selfLink": "/api/v1/namespaces/default/pods/utilitypod-1", "uid": "c7dec819-09df-4efd-9d78-67cf010b4f4e" }, "spec": { "containers": [{ "image": "busybox", "imagePullPolicy": "Always", "name": "utilitypod", "resources": {}, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [{ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "name": "default-token-6j842", "readOnly": true }] }], "dnsPolicy": "ClusterFirst", "enableServiceLinks": true, "priority": 0, "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": {}, "serviceAccount": "default", "serviceAccountName": "default", "terminationGracePeriodSeconds": 30, "tolerations": [{ "effect": "NoExecute", "key": "node.kubernetes.io/not-ready", "operator": "Exists", "tolerationSeconds": 300 }, { "effect": "NoExecute", "key": "node.kubernetes.io/unreachable", "operator": "Exists", "tolerationSeconds": 300 } ], "volumes": [{ "name": "default-token-6j842", "secret": { "defaultMode": 420, "secretName": "default-token-6j842" } }] }, "status": { "phase": "Pending", "qosClass": "BestEffort" } } }././@PaxHeader0000000000000000000000000000022400000000000011453 xustar0000000000000000121 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/task_outputs/Add_a_pod_using_k8s.yaml 27 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/kubernetes_scenarios/task_outputs/Add_a_pod_usi0000644000000000000000000000061100000000000034050 0ustar00rootroot00000000000000--- - hosts: localhost collections: - kubernetes.core tasks: - name: Create a pod k8s: state: present definition: apiVersion: v1 kind: Pod metadata: name: "utilitypod-1" namespace: default labels: app: galaxy spec: containers: - name: utilitypod image: busybox ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/network_guides.rst0000644000000000000000000000076000000000000026221 0ustar00rootroot00000000000000.. _network_guides: ************************* Network Technology Guides ************************* The guides in this section cover using Ansible with specific network technologies. They explore particular use cases in greater depth and provide a more "top-down" explanation of some basic features. .. toctree:: :maxdepth: 1 guide_aci guide_meraki guide_infoblox To learn more about Network Automation with Ansible, see :ref:`network_getting_started` and :ref:`network_advanced`. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/scenario_template.rst0000644000000000000000000000255100000000000026666 0ustar00rootroot00000000000000:orphan: .. _scenario_template: ************************************* Sample scenario for Ansible platforms ************************************* *Use this ``rst`` file as a starting point to create a scenario guide for your platform. The sections below are suggestions on what should be in a scenario guide.* Introductory paragraph. .. contents:: :local: Prerequisites ============= Describe the requirements and assumptions for this scenario. This should include applicable subsections for hardware, software, and any other caveats to using the scenarios in this guide. Credentials and authenticating ============================== Describe credential requirements and how to authenticate to this platform. Using dynamic inventory ========================= If applicable, describe how to use a dynamic inventory plugin for this platform. Example description =================== Description and code here. Change the section header to something descriptive about this example, such as "Renaming a virtual machine". The goal is that this is the text someone would search for to find your example. Example output -------------- What the user should expect to see. Troubleshooting --------------- What to look for if it breaks. Conclusion and where to go next =============================== Recap of important points. For more information please see: links. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/virt_guides.rst0000644000000000000000000000100200000000000025502 0ustar00rootroot00000000000000.. _virtualization_guides: ****************************************** Virtualization and Containerization Guides ****************************************** The guides in this section cover integrating Ansible with popular tools for creating virtual machines and containers. They explore particular use cases in greater depth and provide a more "top-down" explanation of some basic features. .. toctree:: :maxdepth: 1 guide_docker guide_kubernetes guide_vagrant guide_vmware guide_vmware_rest ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.958559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/0000755000000000000000000000000000000000000027037 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/authentication.rst0000644000000000000000000000221600000000000032611 0ustar00rootroot00000000000000.. _vmware_rest_authentication: ******************************************* How to configure the vmware_rest collection ******************************************* .. contents:: :local: Introduction ============ The vcenter_rest modules need to be authenticated. There are two different Environment variables ===================== .. note:: This solution requires that you call the modules from the local machine. You need to export some environment variables in your shell before you call the modules. .. code-block:: shell $ export VMWARE_HOST=vcenter.test $ export VMWARE_USER=myvcenter-user $ export VMWARE_password=mypassword $ ansible-playbook my-playbook.yaml Module parameters ================= All the vcenter_rest modules accept the following arguments: - ``vcenter_host`` - ``vcenter_username`` - ``vcenter_password`` Ignore SSL certificate error ============================ It's common to run a test environment without a proper SSL certificate configuration. To ignore the SSL error, you can use the ``vcenter_validate_certs: no`` argument or ``export VMWARE_VALIDATE_CERTS=no`` to set the environment variable. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/collect_information.rst0000644000000000000000000000603200000000000033624 0ustar00rootroot00000000000000.. _vmware_rest_collect_info: ************************************************* How to collect information about your environment ************************************************* .. contents:: :local: Introduction ============ This section shows you how to utilize Ansible to collect information about your environment. This information is useful for the other tutorials. Scenario requirements ===================== In this scenario we've got a vCenter with an ESXi host. Our environment is pre-initialized with the following elements: - A datacenter called ``my_dc`` - A cluster called ``my_cluster`` - An ESXi host called ``esxi1`` is in the cluster - Two datastores on the ESXi: ``rw_datastore`` and ``ro_datastore`` - A dvswitch based guest network Finally, we use the environment variables to authenticate ourselves as explained in :ref:`vmware_rest_authentication`. How to collect information ========================== In these examples, we use the ``vcenter_*_info`` module to collect information about the associated resources. All these modules return a ``value`` key. Depending on the context, this ``value`` key will be either a list or a dictionary. Datacenter ---------- Here we use the ``vcenter_datacenter_info`` module to list all the datacenters: .. literalinclude:: task_outputs/collect_a_list_of_the_datacenters.task.yaml Result ______ As expected, the ``value`` key of the output is a list. .. literalinclude:: task_outputs/collect_a_list_of_the_datacenters.result.json Cluster ------- Here we do the same with ``vcenter_cluster_info``: .. literalinclude:: task_outputs/Build_a_list_of_all_the_clusters.task.yaml Result ______ .. literalinclude:: task_outputs/Build_a_list_of_all_the_clusters.result.json And we can also fetch the details about a specific cluster, with the ``cluster`` parameter: .. literalinclude:: task_outputs/Retrieve_details_about_the_first_cluster.task.yaml Result ______ And the ``value`` key of the output is this time a dictionary. .. literalinclude:: task_outputs/Retrieve_details_about_the_first_cluster.result.json Datastore --------- Here we use ``vcenter_datastore_info`` to get a list of all the datastores: .. literalinclude:: task_outputs/Retrieve_a_list_of_all_the_datastores.task.yaml Result ______ .. literalinclude:: task_outputs/Retrieve_a_list_of_all_the_datastores.result.json Folder ------ And here again, you use the ``vcenter_folder_info`` module to retrieve a list of all the folders. .. literalinclude:: task_outputs/Build_a_list_of_all_the_folders.task.yaml Result ______ .. literalinclude:: task_outputs/Build_a_list_of_all_the_folders.result.json Most of the time, you will just want one type of folder. In this case we can use filters to reduce the amount to collect. Most of the ``_info`` modules come with similar filters. .. literalinclude:: task_outputs/Build_a_list_of_all_the_folders_with_the_type_VIRTUAL_MACHINE_and_called_vm.task.yaml Result ______ .. literalinclude:: task_outputs/Build_a_list_of_all_the_folders_with_the_type_VIRTUAL_MACHINE_and_called_vm.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/create_vm.rst0000644000000000000000000000175700000000000031550 0ustar00rootroot00000000000000.. _vmware_rest_create_vm: ******************************* How to create a Virtual Machine ******************************* .. contents:: :local: Introduction ============ This section shows you how to use Ansible to create a virtual machine. Scenario requirements ===================== You've already followed :ref:`vmware_rest_collect_info` and you've got the following variables defined: - ``my_cluster_info`` - ``my_datastore`` - ``my_virtual_machine_folder`` - ``my_cluster_info`` How to create a virtual machine =============================== In this example, we will use the ``vcenter_vm`` module to create a new guest. .. literalinclude:: task_outputs/Create_a_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Create_a_VM.result.json .. note:: ``vcenter_vm`` accepts more parameters, however you may prefer to start with a simple VM and use the ``vcenter_vm_hardware`` modules to tune it up afterwards. It's easier this way to identify a potential problematical step. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/installation.rst0000644000000000000000000000145500000000000032277 0ustar00rootroot00000000000000.. _vmware_rest_installation: ***************************************** How to install the vmware_rest collection ***************************************** .. contents:: :local: Requirements ============ The collection depends on: - Ansible >=2.9.10 or greater - Python 3.6 or greater aiohttp ======= aiohttp_ is the only dependency of the collection. You can install it with ``pip`` if you use a virtualenv to run Ansible. .. code-block:: shell $ pip install aiohttp Or using an RPM. .. code-block:: shell $ sudo dnf install python3-aiohttp .. _aiohttp: https://docs.aiohttp.org/en/stable/ Installation ============ The best option to install the collection is to use the ``ansible-galaxy`` command: .. code-block:: shell $ ansible-galaxy collection install vmware.vmware_rest ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/run_a_vm.rst0000644000000000000000000000216100000000000031377 0ustar00rootroot00000000000000.. _vmware_rest_run_a_vm: **************************** How to run a virtual machine **************************** .. contents:: :local: Introduction ============ This section covers the power management of your virtual machine. Power information ================= Use ``vcenter_vm_power_info`` to know the power state of the VM. .. literalinclude:: task_outputs/Get_guest_power_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_power_information.result.json How to start a virtual machine ============================== Use the ``vcenter_vm_power`` module to start your VM: .. literalinclude:: task_outputs/Turn_the_power_of_the_VM_on.task.yaml Result ______ .. literalinclude:: task_outputs/Turn_the_power_of_the_VM_on.result.json How to wait until my virtual machine is ready ============================================= If your virtual machine runs VMware Tools, you can build a loop around the ``center_vm_tools_info`` module: .. literalinclude:: task_outputs/Wait_until_my_VM_is_ready.task.yaml Result ______ .. literalinclude:: task_outputs/Wait_until_my_VM_is_ready.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.963559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/0000755000000000000000000000000000000000000031604 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000024000000000000011451 xustar0000000000000000133 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Add_a_floppy_disk_drive.result.json 27 mtime=1636383671.517556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Add_a_floppy0000644000000000000000000000051400000000000034110 0ustar00rootroot00000000000000{ "value": { "start_connected": false, "backing": { "auto_detect": true, "type": "HOST_DEVICE", "host_device": "" }, "allow_guest_control": true, "label": "Floppy drive 1", "state": "NOT_CONNECTED" }, "id": "8000", "changed": true }././@PaxHeader0000000000000000000000000000023600000000000011456 xustar0000000000000000131 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Add_a_floppy_disk_drive.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Add_a_floppy0000644000000000000000000000025300000000000034110 0ustar00rootroot00000000000000- name: Add a floppy disk drive vmware.vmware_rest.vcenter_vm_hardware_floppy: vm: '{{ test_vm1_info.id }}' allow_guest_control: true register: my_floppy_drive././@PaxHeader0000000000000000000000000000024200000000000011453 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_a_VM_to_a_dvswitch.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_a_VM_0000644000000000000000000000131000000000000033767 0ustar00rootroot00000000000000{ "value": { "start_connected": false, "pci_slot_number": 4, "backing": { "connection_cookie": 2145337177, "distributed_switch_uuid": "50 33 88 3a 8c 6e f9 02-7a fd c2 c0 2c cf f2 ac", "distributed_port": "2", "type": "DISTRIBUTED_PORTGROUP", "network": "dvportgroup-1649" }, "mac_address": "00:50:56:b3:49:5c", "mac_type": "ASSIGNED", "allow_guest_control": false, "wake_on_lan_enabled": false, "label": "Network adapter 1", "state": "NOT_CONNECTED", "type": "VMXNET3", "upt_compatibility_enabled": false }, "id": "4000", "changed": true }././@PaxHeader0000000000000000000000000000024000000000000011451 xustar0000000000000000133 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_a_VM_to_a_dvswitch.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_a_VM_0000644000000000000000000000050600000000000033775 0ustar00rootroot00000000000000- name: Attach a VM to a dvswitch vmware.vmware_rest.vcenter_vm_hardware_ethernet: vm: '{{ test_vm1_info.id }}' pci_slot_number: 4 backing: type: DISTRIBUTED_PORTGROUP network: "{{ my_portgroup_info.dvs_portgroup_info.dvswitch1[0].key }}" start_connected: false register: vm_hardware_ethernet_1././@PaxHeader0000000000000000000000000000025200000000000011454 xustar0000000000000000143 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_an_ISO_image_to_a_guest_VM.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_an_IS0000644000000000000000000000064000000000000034004 0ustar00rootroot00000000000000{ "value": { "start_connected": true, "backing": { "iso_file": "[ro_datastore] fedora.iso", "type": "ISO_FILE" }, "allow_guest_control": false, "label": "CD/DVD drive 1", "state": "NOT_CONNECTED", "type": "SATA", "sata": { "bus": 0, "unit": 2 } }, "id": "16002", "changed": true }././@PaxHeader0000000000000000000000000000025000000000000011452 xustar0000000000000000141 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_an_ISO_image_to_a_guest_VM.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Attach_an_IS0000644000000000000000000000045200000000000034005 0ustar00rootroot00000000000000- name: Attach an ISO image to a guest VM vmware.vmware_rest.vcenter_vm_hardware_cdrom: vm: '{{ test_vm1_info.id }}' type: SATA sata: bus: 0 unit: 2 start_connected: true backing: iso_file: '[ro_datastore] fedora.iso' type: ISO_FILE register: _result././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000142 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_clusters.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000031500000000000034120 0ustar00rootroot00000000000000{ "value": [ { "drs_enabled": false, "cluster": "domain-c1636", "name": "my_cluster", "ha_enabled": false } ], "changed": false }././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000140 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_clusters.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000016000000000000034116 0ustar00rootroot00000000000000- name: Build a list of all the clusters vmware.vmware_rest.vcenter_cluster_info: register: all_the_clusters././@PaxHeader0000000000000000000000000000025000000000000011452 xustar0000000000000000141 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_folders.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000025000000000000034116 0ustar00rootroot00000000000000{ "value": [ { "folder": "group-d1", "name": "Datacenters", "type": "DATACENTER" } ], "changed": false }././@PaxHeader0000000000000000000000000000024600000000000011457 xustar0000000000000000139 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_folders.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000015000000000000034115 0ustar00rootroot00000000000000- name: Build a list of all the folders vmware.vmware_rest.vcenter_folder_info: register: my_folders././@PaxHeader0000000000000000000000000000032400000000000011454 xustar0000000000000000185 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_folders_with_the_type_VIRTUAL_MACHINE_and_called_vm.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000024700000000000034124 0ustar00rootroot00000000000000{ "value": [ { "folder": "group-v1631", "name": "vm", "type": "VIRTUAL_MACHINE" } ], "changed": false }././@PaxHeader0000000000000000000000000000032200000000000011452 xustar0000000000000000183 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list_of_all_the_folders_with_the_type_VIRTUAL_MACHINE_and_called_vm.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Build_a_list0000644000000000000000000000032200000000000034116 0ustar00rootroot00000000000000- name: Build a list of all the folders with the type VIRTUAL_MACHINE and called vm vmware.vmware_rest.vcenter_folder_info: filter_type: VIRTUAL_MACHINE filter_names: - vm register: my_folders././@PaxHeader0000000000000000000000000000026100000000000011454 xustar0000000000000000150 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-tools_upgrade_policy_to_MANUAL.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-to0000644000000000000000000000004700000000000034037 0ustar00rootroot00000000000000{ "id": null, "changed": true }././@PaxHeader0000000000000000000000000000025700000000000011461 xustar0000000000000000148 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-tools_upgrade_policy_to_MANUAL.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-to0000644000000000000000000000024700000000000034041 0ustar00rootroot00000000000000- name: Change vm-tools upgrade policy to MANUAL vmware.vmware_rest.vcenter_vm_tools: vm: '{{ test_vm1_info.id }}' upgrade_policy: MANUAL register: _result././@PaxHeader0000000000000000000000000000030100000000000011447 xustar0000000000000000166 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-tools_upgrade_policy_to_UPGRADE_AT_POWER_CYCLE.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-to0000644000000000000000000000004700000000000034037 0ustar00rootroot00000000000000{ "id": null, "changed": true }././@PaxHeader0000000000000000000000000000027700000000000011463 xustar0000000000000000164 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-tools_upgrade_policy_to_UPGRADE_AT_POWER_CYCLE.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Change_vm-to0000644000000000000000000000030700000000000034036 0ustar00rootroot00000000000000- name: Change vm-tools upgrade policy to UPGRADE_AT_POWER_CYCLE vmware.vmware_rest.vcenter_vm_tools: vm: '{{ test_vm1_info.id }}' upgrade_policy: UPGRADE_AT_POWER_CYCLE register: _result././@PaxHeader0000000000000000000000000000026000000000000011453 xustar0000000000000000149 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_information_about_a_specific_VM.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_info0000644000000000000000000000413400000000000034131 0ustar00rootroot00000000000000{ "value": { "instant_clone_frozen": false, "cdroms": [], "memory": { "size_MiB": 1024, "hot_add_enabled": true }, "disks": [ { "value": { "scsi": { "bus": 0, "unit": 0 }, "backing": { "vmdk_file": "[local] test_vm1_8/test_vm1.vmdk", "type": "VMDK_FILE" }, "label": "Hard disk 1", "type": "SCSI", "capacity": 17179869184 }, "key": "2000" } ], "parallel_ports": [], "sata_adapters": [], "cpu": { "hot_remove_enabled": false, "count": 1, "hot_add_enabled": false, "cores_per_socket": 1 }, "scsi_adapters": [ { "value": { "scsi": { "bus": 0, "unit": 7 }, "label": "SCSI controller 0", "sharing": "NONE", "type": "PVSCSI" }, "key": "1000" } ], "power_state": "POWERED_OFF", "floppies": [], "identity": { "name": "test_vm1", "instance_uuid": "5033c296-6954-64df-faca-d001de53763d", "bios_uuid": "42330d17-e603-d925-fa4b-18827dbc1409" }, "nvme_adapters": [], "name": "test_vm1", "nics": [], "boot": { "delay": 0, "retry_delay": 10000, "enter_setup_mode": false, "type": "BIOS", "retry": false }, "serial_ports": [], "boot_devices": [], "guest_OS": "DEBIAN_8_64", "hardware": { "upgrade_policy": "NEVER", "upgrade_status": "NONE", "version": "VMX_11" } }, "id": "vm-1650", "changed": false }././@PaxHeader0000000000000000000000000000025600000000000011460 xustar0000000000000000147 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_information_about_a_specific_VM.task.yaml 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_info0000644000000000000000000000023100000000000034123 0ustar00rootroot00000000000000- name: Collect information about a specific VM vmware.vmware_rest.vcenter_vm_info: vm: '{{ search_result.value[0].vm }}' register: test_vm1_info././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000142 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_the_hardware_information.result.json 27 mtime=1636383671.518556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_the_0000644000000000000000000000021700000000000034113 0ustar00rootroot00000000000000{ "value": { "upgrade_policy": "NEVER", "upgrade_status": "NONE", "version": "VMX_11" }, "changed": false }././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000140 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_the_hardware_information.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Collect_the_0000644000000000000000000000024200000000000034111 0ustar00rootroot00000000000000- name: Collect the hardware information vmware.vmware_rest.vcenter_vm_hardware_info: vm: '{{ search_result.value[0].vm }}' register: my_vm1_hardware_info././@PaxHeader0000000000000000000000000000025500000000000011457 xustar0000000000000000146 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_SATA_adapter_at_PCI_slot_34.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_SAT0000644000000000000000000000025600000000000033744 0ustar00rootroot00000000000000{ "value": { "bus": 0, "pci_slot_number": 34, "label": "SATA controller 0", "type": "AHCI" }, "id": "15000", "changed": true }././@PaxHeader0000000000000000000000000000025300000000000011455 xustar0000000000000000144 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_SATA_adapter_at_PCI_slot_34.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_SAT0000644000000000000000000000027700000000000033747 0ustar00rootroot00000000000000- name: Create a SATA adapter at PCI slot 34 vmware.vmware_rest.vcenter_vm_hardware_adapter_sata: vm: '{{ test_vm1_info.id }}' pci_slot_number: 34 register: _sata_adapter_result_1././@PaxHeader0000000000000000000000000000022400000000000011453 xustar0000000000000000121 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_VM.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_VM.0000644000000000000000000000413300000000000033713 0ustar00rootroot00000000000000{ "value": { "instant_clone_frozen": false, "cdroms": [], "memory": { "size_MiB": 1024, "hot_add_enabled": true }, "disks": [ { "value": { "scsi": { "bus": 0, "unit": 0 }, "backing": { "vmdk_file": "[local] test_vm1_8/test_vm1.vmdk", "type": "VMDK_FILE" }, "label": "Hard disk 1", "type": "SCSI", "capacity": 17179869184 }, "key": "2000" } ], "parallel_ports": [], "sata_adapters": [], "cpu": { "hot_remove_enabled": false, "count": 1, "hot_add_enabled": false, "cores_per_socket": 1 }, "scsi_adapters": [ { "value": { "scsi": { "bus": 0, "unit": 7 }, "label": "SCSI controller 0", "sharing": "NONE", "type": "PVSCSI" }, "key": "1000" } ], "power_state": "POWERED_OFF", "floppies": [], "identity": { "name": "test_vm1", "instance_uuid": "5033c296-6954-64df-faca-d001de53763d", "bios_uuid": "42330d17-e603-d925-fa4b-18827dbc1409" }, "nvme_adapters": [], "name": "test_vm1", "nics": [], "boot": { "delay": 0, "retry_delay": 10000, "enter_setup_mode": false, "type": "BIOS", "retry": false }, "serial_ports": [], "boot_devices": [], "guest_OS": "DEBIAN_8_64", "hardware": { "upgrade_policy": "NEVER", "upgrade_status": "NONE", "version": "VMX_11" } }, "id": "vm-1650", "changed": true }././@PaxHeader0000000000000000000000000000022200000000000011451 xustar0000000000000000119 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_VM.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_VM.0000644000000000000000000000066000000000000033714 0ustar00rootroot00000000000000- name: Create a VM vmware.vmware_rest.vcenter_vm: placement: cluster: "{{ my_cluster_info.id }}" datastore: "{{ my_datastore.datastore }}" folder: "{{ my_virtual_machine_folder.folder }}" resource_pool: "{{ my_cluster_info.value.resource_pool }}" name: test_vm1 guest_OS: DEBIAN_8_64 hardware_version: VMX_11 memory: hot_add_enabled: true size_MiB: 1024 register: _result././@PaxHeader0000000000000000000000000000023200000000000011452 xustar0000000000000000127 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_new_disk.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_new0000644000000000000000000000053300000000000034104 0ustar00rootroot00000000000000{ "value": { "backing": { "vmdk_file": "[local] test_vm1_8/test_vm1_1.vmdk", "type": "VMDK_FILE" }, "label": "Hard disk 2", "type": "SATA", "sata": { "bus": 0, "unit": 0 }, "capacity": 320000 }, "id": "16000", "changed": true }././@PaxHeader0000000000000000000000000000023000000000000011450 xustar0000000000000000125 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_new_disk.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Create_a_new0000644000000000000000000000026500000000000034106 0ustar00rootroot00000000000000- name: Create a new disk vmware.vmware_rest.vcenter_vm_hardware_disk: vm: '{{ test_vm1_info.id }}' type: SATA new_vmdk: capacity: 320000 register: my_new_disk././@PaxHeader0000000000000000000000000000024400000000000011455 xustar0000000000000000137 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Dedicate_one_core_to_the_VM.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Dedicate_one0000644000000000000000000000026700000000000034077 0ustar00rootroot00000000000000{ "value": { "hot_remove_enabled": false, "count": 1, "hot_add_enabled": false, "cores_per_socket": 1 }, "id": null, "changed": false }././@PaxHeader0000000000000000000000000000024200000000000011453 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Dedicate_one_core_to_the_VM.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Dedicate_one0000644000000000000000000000022300000000000034067 0ustar00rootroot00000000000000- name: Dedicate one core to the VM vmware.vmware_rest.vcenter_vm_hardware_cpu: vm: '{{ test_vm1_info.id }}' count: 1 register: _result././@PaxHeader0000000000000000000000000000023600000000000011456 xustar0000000000000000131 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_VM_storage_policy.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_VM_stora0000644000000000000000000000010200000000000034051 0ustar00rootroot00000000000000{ "value": { "disks": [] }, "changed": false }././@PaxHeader0000000000000000000000000000023400000000000011454 xustar0000000000000000129 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_VM_storage_policy.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_VM_stora0000644000000000000000000000020700000000000034057 0ustar00rootroot00000000000000- name: Get VM storage policy vmware.vmware_rest.vcenter_vm_storage_policy_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000142 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_filesystem_information.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_fi0000644000000000000000000000035700000000000034140 0ustar00rootroot00000000000000{ "value": [ { "value": { "mappings": [], "free_space": 774766592, "capacity": 2515173376 }, "key": "/" } ], "changed": false }././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000140 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_filesystem_information.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_fi0000644000000000000000000000032500000000000034133 0ustar00rootroot00000000000000- name: Get guest filesystem information vmware.vmware_rest.vcenter_vm_guest_localfilesystem_info: vm: '{{ test_vm1_info.id }}' register: _result until: - _result is not failed retries: 60 delay: 5././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000140 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_identity_information.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_id0000644000000000000000000000054500000000000034135 0ustar00rootroot00000000000000{ "value": { "full_name": { "args": [], "default_message": "Red Hat Fedora (64-bit)", "id": "vmsg.guestos.fedora64Guest.label" }, "name": "FEDORA_64", "ip_address": "192.168.122.242", "family": "LINUX", "host_name": "localhost.localdomain" }, "changed": false }././@PaxHeader0000000000000000000000000000024500000000000011456 xustar0000000000000000138 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_identity_information.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_id0000644000000000000000000000022000000000000034123 0ustar00rootroot00000000000000- name: Get guest identity information vmware.vmware_rest.vcenter_vm_guest_identity_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000026100000000000011454 xustar0000000000000000150 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_network_interfaces_information.result.json 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000115200000000000034136 0ustar00rootroot00000000000000{ "value": [ { "mac_address": "00:50:56:b3:49:5c", "ip": { "ip_addresses": [ { "ip_address": "192.168.122.242", "prefix_length": 24, "state": "PREFERRED" }, { "ip_address": "fe80::b8d0:511b:897f:65a2", "prefix_length": 64, "state": "UNKNOWN" } ] }, "nic": "4000" } ], "changed": false }././@PaxHeader0000000000000000000000000000025700000000000011461 xustar0000000000000000148 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_network_interfaces_information.task.yaml 27 mtime=1636383671.519556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000024700000000000034142 0ustar00rootroot00000000000000- name: Get guest network interfaces information vmware.vmware_rest.vcenter_vm_guest_networking_interfaces_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000025500000000000011457 xustar0000000000000000146 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_network_routes_information.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000131700000000000034141 0ustar00rootroot00000000000000{ "value": [ { "gateway_address": "192.168.122.1", "interface_index": 0, "prefix_length": 0, "network": "0.0.0.0" }, { "interface_index": 0, "prefix_length": 24, "network": "192.168.122.0" }, { "interface_index": 0, "prefix_length": 64, "network": "fe80::" }, { "interface_index": 0, "prefix_length": 128, "network": "fe80::b8d0:511b:897f:65a2" }, { "interface_index": 0, "prefix_length": 8, "network": "ff00::" } ], "changed": false }././@PaxHeader0000000000000000000000000000025300000000000011455 xustar0000000000000000144 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_network_routes_information.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000023700000000000034141 0ustar00rootroot00000000000000- name: Get guest network routes information vmware.vmware_rest.vcenter_vm_guest_networking_routes_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000142 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_networking_information.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000053300000000000034140 0ustar00rootroot00000000000000{ "value": { "dns": { "ip_addresses": [ "10.0.2.3" ], "search_domains": [ "localdomain" ] }, "dns_values": { "domain_name": "localdomain", "host_name": "localhost.localdomain" } }, "changed": false }././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000140 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_networking_information.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_ne0000644000000000000000000000022400000000000034135 0ustar00rootroot00000000000000- name: Get guest networking information vmware.vmware_rest.vcenter_vm_guest_networking_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000024400000000000011455 xustar0000000000000000137 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_power_information.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_po0000644000000000000000000000011400000000000034147 0ustar00rootroot00000000000000{ "value": { "state": "POWERED_ON" }, "changed": false }././@PaxHeader0000000000000000000000000000024200000000000011453 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_power_information.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Get_guest_po0000644000000000000000000000020400000000000034147 0ustar00rootroot00000000000000- name: Get guest power information vmware.vmware_rest.vcenter_vm_power_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000024400000000000011455 xustar0000000000000000137 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Increase_the_memory_of_a_VM.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Increase_the0000644000000000000000000000004700000000000034121 0ustar00rootroot00000000000000{ "id": null, "changed": true }././@PaxHeader0000000000000000000000000000024200000000000011453 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Increase_the_memory_of_a_VM.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Increase_the0000644000000000000000000000023400000000000034117 0ustar00rootroot00000000000000- name: Increase the memory of a VM vmware.vmware_rest.vcenter_vm_hardware_memory: vm: '{{ test_vm1_info.id }}' size_MiB: 1080 register: _result././@PaxHeader0000000000000000000000000000025400000000000011456 xustar0000000000000000145 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_SCSI_adapter_of_a_given_VM.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_SCS0000644000000000000000000000040100000000000034005 0ustar00rootroot00000000000000{ "value": [ { "scsi": { "bus": 0, "unit": 7 }, "label": "SCSI controller 0", "type": "PVSCSI", "sharing": "NONE" } ], "changed": false }././@PaxHeader0000000000000000000000000000025200000000000011454 xustar0000000000000000143 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_SCSI_adapter_of_a_given_VM.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_SCS0000644000000000000000000000023400000000000034011 0ustar00rootroot00000000000000- name: List the SCSI adapter of a given VM vmware.vmware_rest.vcenter_vm_hardware_adapter_scsi_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000025400000000000011456 xustar0000000000000000145 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_cdrom_devices_on_the_guest.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_cdr0000644000000000000000000000005100000000000034126 0ustar00rootroot00000000000000{ "value": [], "changed": false }././@PaxHeader0000000000000000000000000000025200000000000011454 xustar0000000000000000143 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_cdrom_devices_on_the_guest.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/List_the_cdr0000644000000000000000000000022500000000000034131 0ustar00rootroot00000000000000- name: List the cdrom devices on the guest vmware.vmware_rest.vcenter_vm_hardware_cdrom_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000027000000000000011454 xustar0000000000000000157 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Look_up_the_VM_called_test_vm1_in_the_inventory.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Look_up_the_0000644000000000000000000000035100000000000034135 0ustar00rootroot00000000000000{ "value": [ { "memory_size_MiB": 1024, "vm": "vm-1650", "name": "test_vm1", "power_state": "POWERED_OFF", "cpu_count": 1 } ], "changed": false }././@PaxHeader0000000000000000000000000000026600000000000011461 xustar0000000000000000155 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Look_up_the_VM_called_test_vm1_in_the_inventory.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Look_up_the_0000644000000000000000000000023000000000000034131 0ustar00rootroot00000000000000- name: Look up the VM called test_vm1 in the inventory register: search_result vmware.vmware_rest.vcenter_vm_info: filter_names: - test_vm1././@PaxHeader0000000000000000000000000000025300000000000011455 xustar0000000000000000144 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Remove_SATA_adapter_at_PCI_slot_34.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Remove_SATA_0000644000000000000000000000002700000000000033732 0ustar00rootroot00000000000000{ "changed": true }././@PaxHeader0000000000000000000000000000025600000000000011460 xustar0000000000000000147 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_a_list_of_all_the_datastores.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_a_l0000644000000000000000000000120500000000000034125 0ustar00rootroot00000000000000{ "value": [ { "datastore": "datastore-1644", "name": "local", "type": "VMFS", "free_space": 13523484672, "capacity": 15032385536 }, { "datastore": "datastore-1645", "name": "ro_datastore", "type": "NFS", "free_space": 24638349312, "capacity": 26831990784 }, { "datastore": "datastore-1646", "name": "rw_datastore", "type": "NFS", "free_space": 24638349312, "capacity": 26831990784 } ], "changed": false }././@PaxHeader0000000000000000000000000000025400000000000011456 xustar0000000000000000145 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_a_list_of_all_the_datastores.task.yaml 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_a_l0000644000000000000000000000016400000000000034130 0ustar00rootroot00000000000000- name: Retrieve a list of all the datastores vmware.vmware_rest.vcenter_datastore_info: register: my_datastores././@PaxHeader0000000000000000000000000000026100000000000011454 xustar0000000000000000150 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_details_about_the_first_cluster.result.json 27 mtime=1636383671.520556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_det0000644000000000000000000000021700000000000034150 0ustar00rootroot00000000000000{ "value": { "name": "my_cluster", "resource_pool": "resgroup-1637" }, "id": "domain-c1636", "changed": false }././@PaxHeader0000000000000000000000000000026000000000000011453 xustar0000000000000000148 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_details_about_the_first_cluster.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_det0000644000000000000000000000025600000000000034153 0ustar00rootroot00000000000000- name: Retrieve details about the first cluster vmware.vmware_rest.vcenter_cluster_info: cluster: "{{ all_the_clusters.value[0].cluster }}" register: my_cluster_info././@PaxHeader0000000000000000000000000000026300000000000011456 xustar0000000000000000151 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the_disk_information_from_the_VM.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the0000644000000000000000000000061400000000000034155 0ustar00rootroot00000000000000{ "value": [ { "scsi": { "bus": 0, "unit": 0 }, "backing": { "vmdk_file": "[local] test_vm1_8/test_vm1.vmdk", "type": "VMDK_FILE" }, "label": "Hard disk 1", "type": "SCSI", "capacity": 17179869184 } ], "changed": false }././@PaxHeader0000000000000000000000000000026100000000000011454 xustar0000000000000000149 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the_disk_information_from_the_VM.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the0000644000000000000000000000023200000000000034151 0ustar00rootroot00000000000000- name: Retrieve the disk information from the VM vmware.vmware_rest.vcenter_vm_hardware_disk_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000026500000000000011460 xustar0000000000000000153 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the_memory_information_from_the_VM.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the0000644000000000000000000000015000000000000034150 0ustar00rootroot00000000000000{ "value": { "size_MiB": 1024, "hot_add_enabled": true }, "changed": false }././@PaxHeader0000000000000000000000000000026300000000000011456 xustar0000000000000000151 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the_memory_information_from_the_VM.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Retrieve_the0000644000000000000000000000023600000000000034155 0ustar00rootroot00000000000000- name: Retrieve the memory information from the VM vmware.vmware_rest.vcenter_vm_hardware_memory_info: vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000026000000000000011453 xustar0000000000000000148 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_NIC's_start_connected_flag_on.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_NIC0000644000000000000000000000005100000000000034004 0ustar00rootroot00000000000000{ "id": "4000", "changed": true }././@PaxHeader0000000000000000000000000000025600000000000011460 xustar0000000000000000146 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_NIC's_start_connected_flag_on.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_NIC0000644000000000000000000000030700000000000034010 0ustar00rootroot00000000000000- name: Turn the NIC's start_connected flag on vmware.vmware_rest.vcenter_vm_hardware_ethernet: nic: '{{ vm_hardware_ethernet_1.id }}' start_connected: true vm: '{{ test_vm1_info.id }}'././@PaxHeader0000000000000000000000000000024500000000000011456 xustar0000000000000000137 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_power_of_the_VM_on.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_pow0000644000000000000000000000003000000000000034175 0ustar00rootroot00000000000000{ "changed": false }././@PaxHeader0000000000000000000000000000024300000000000011454 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_power_of_the_VM_on.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Turn_the_pow0000644000000000000000000000017400000000000034206 0ustar00rootroot00000000000000- name: Turn the power of the VM on vmware.vmware_rest.vcenter_vm_power: state: start vm: '{{ test_vm1_info.id }}'././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000141 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Upgrade_the_VM_hardware_version.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Upgrade_the_0000644000000000000000000000004700000000000034116 0ustar00rootroot00000000000000{ "id": null, "changed": true }././@PaxHeader0000000000000000000000000000024700000000000011460 xustar0000000000000000139 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Upgrade_the_VM_hardware_version.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Upgrade_the_0000644000000000000000000000031300000000000034112 0ustar00rootroot00000000000000- name: Upgrade the VM hardware version vmware.vmware_rest.vcenter_vm_hardware: upgrade_policy: AFTER_CLEAN_SHUTDOWN upgrade_version: VMX_13 vm: '{{ test_vm1_info.id }}' register: _result././@PaxHeader0000000000000000000000000000024300000000000011454 xustar0000000000000000135 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Wait_until_my_VM_is_ready.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Wait_until_m0000644000000000000000000000051200000000000034160 0ustar00rootroot00000000000000{ "value": { "auto_update_supported": false, "upgrade_policy": "MANUAL", "install_attempt_count": 0, "version_status": "UNMANAGED", "version_number": 10346, "run_state": "RUNNING", "version": "10346", "install_type": "OPEN_VM_TOOLS" }, "changed": false }././@PaxHeader0000000000000000000000000000024100000000000011452 xustar0000000000000000133 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Wait_until_my_VM_is_ready.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/Wait_until_m0000644000000000000000000000037100000000000034163 0ustar00rootroot00000000000000- name: Wait until my VM is ready vmware.vmware_rest.vcenter_vm_tools_info: vm: '{{ test_vm1_info.id }}' register: vm_tools_info until: - vm_tools_info is not failed - vm_tools_info.value.run_state == "RUNNING" retries: 60 delay: 5././@PaxHeader0000000000000000000000000000025300000000000011455 xustar0000000000000000143 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/collect_a_list_of_the_datacenters.result.json 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/collect_a_li0000644000000000000000000000021300000000000034134 0ustar00rootroot00000000000000{ "value": [ { "name": "my_dc", "datacenter": "datacenter-1630" } ], "changed": false }././@PaxHeader0000000000000000000000000000025100000000000011453 xustar0000000000000000141 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/collect_a_list_of_the_datacenters.task.yaml 28 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/task_outputs/collect_a_li0000644000000000000000000000016200000000000034137 0ustar00rootroot00000000000000- name: collect a list of the datacenters vmware.vmware_rest.vcenter_datacenter_info: register: my_datacenters././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5215561 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/vm_hardware_tuning.rst0000644000000000000000000000705100000000000033457 0ustar00rootroot00000000000000.. _vmware_rest_vm_hardware_tuning: ******************************* How to modify a virtual machine ******************************* .. contents:: :local: Introduction ============ This section shows you how to use Ansible to modify an existing virtual machine. Scenario requirements ===================== You've already followed :ref:`vmware_rest_create_vm` and created a VM. How to add a CDROM drive to a virtual machine ============================================= In this example, we use the ``vcenter_vm_hardware_*`` modules to add a new CDROM to an existing VM. Add a new SATA adapter ______________________ First we create a new SATA adapter. We specify the ``pci_slot_number``. This way if we run the task again it won't do anything if there is already an adapter there. .. literalinclude:: task_outputs/Create_a_SATA_adapter_at_PCI_slot_34.task.yaml Result ______ .. literalinclude:: task_outputs/Create_a_SATA_adapter_at_PCI_slot_34.result.json Add a CDROM drive _________________ Now we can create the CDROM drive: .. literalinclude:: task_outputs/Attach_an_ISO_image_to_a_guest_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Attach_an_ISO_image_to_a_guest_VM.result.json .. _vmware_rest_attach_a_network: How to attach a VM to a network =============================== Attach a new NIC ________________ Here we attach the VM to the network (through the portgroup). We specify a ``pci_slot_number`` for the same reason. The second task adjusts the NIC configuration. .. literalinclude:: task_outputs/Attach_a_VM_to_a_dvswitch.task.yaml Result ______ .. literalinclude:: task_outputs/Attach_a_VM_to_a_dvswitch.result.json Adjust the configuration of the NIC ___________________________________ .. literalinclude:: task_outputs/Turn_the_NIC's_start_connected_flag_on.task.yaml Result ______ .. literalinclude:: task_outputs/Turn_the_NIC's_start_connected_flag_on.result.json Increase the memory of the VM ============================= We can also adjust the amount of memory that we dedicate to our VM. .. literalinclude:: task_outputs/Increase_the_memory_of_a_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Increase_the_memory_of_a_VM.result.json Upgrade the hardware version of the VM ====================================== Here we use the ``vcenter_vm_hardware`` module to upgrade the version of the hardware: .. literalinclude:: task_outputs/Upgrade_the_VM_hardware_version.task.yaml Result ______ .. literalinclude:: task_outputs/Upgrade_the_VM_hardware_version.result.json Adjust the number of CPUs of the VM =================================== You can use ``vcenter_vm_hardware_cpu`` for that: .. literalinclude:: task_outputs/Dedicate_one_core_to_the_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Dedicate_one_core_to_the_VM.result.json Remove a SATA controller ======================== In this example, we remove the SATA controller of the PCI slot 34. .. literalinclude:: task_outputs/Remove_SATA_adapter_at_PCI_slot_34.result.json Result ______ .. literalinclude:: task_outputs/Remove_SATA_adapter_at_PCI_slot_34.result.json Attach a floppy drive ===================== Here we attach a floppy drive to a VM. .. literalinclude:: task_outputs/Add_a_floppy_disk_drive.task.yaml Result ______ .. literalinclude:: task_outputs/Add_a_floppy_disk_drive.result.json Attach a new disk ================= Here we attach a tiny disk to the VM. The ``capacity`` is in bytes. .. literalinclude:: task_outputs/Create_a_new_disk.task.yaml Result ______ .. literalinclude:: task_outputs/Create_a_new_disk.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/vm_info.rst0000644000000000000000000000725400000000000031236 0ustar00rootroot00000000000000.. _vmware_rest_vm_info: *************************************** Retrieve information from a specific VM *************************************** .. contents:: :local: Introduction ============ This section shows you how to use Ansible to retrieve information about a specific virtual machine. Scenario requirements ===================== You've already followed :ref:`vmware_rest_create_vm` and you've got create a new VM called ``test_vm1``. How to collect virtual machine information ========================================== List the VM ___________ In this example, we use the ``vcenter_vm_info`` module to collect information about our new VM. In this example, we start by asking for a list of VMs. We use a filter to limit the results to just the VM called ``test_vm1``. So we are in a list context, with one single entry in the ``value`` key. .. literalinclude:: task_outputs/Look_up_the_VM_called_test_vm1_in_the_inventory.task.yaml Result ______ As expected, we get a list. And thanks to our filter, we just get one entry. .. literalinclude:: task_outputs/Look_up_the_VM_called_test_vm1_in_the_inventory.result.json Collect the details about a specific VM _______________________________________ For the next steps, we pass the ID of the VM through the ``vm`` parameter. This allow us to collect more details about this specific VM. .. literalinclude:: task_outputs/Collect_information_about_a_specific_VM.task.yaml Result ______ The result is a structure with all the details about our VM. You will note this is actually the same information that we get when we created the VM. .. literalinclude:: task_outputs/Collect_information_about_a_specific_VM.result.json Get the hardware version of a specific VM _________________________________________ We can also use all the ``vcenter_vm_*_info`` modules to retrieve a smaller amount of information. Here we use ``vcenter_vm_hardware_info`` to know the hardware version of the VM. .. literalinclude:: task_outputs/Collect_the_hardware_information.task.yaml Result ______ .. literalinclude:: task_outputs/Collect_the_hardware_information.result.json List the SCSI adapter(s) of a specific VM _________________________________________ Here for instance, we list the SCSI adapter(s) of the VM: .. literalinclude:: task_outputs/List_the_SCSI_adapter_of_a_given_VM.task.yaml You can do the same for the SATA controllers with ``vcenter_vm_adapter_sata_info``. Result ______ .. literalinclude:: task_outputs/List_the_SCSI_adapter_of_a_given_VM.result.json List the CDROM drive(s) of a specific VM ________________________________________ And we list its CDROM drives. .. literalinclude:: task_outputs/List_the_cdrom_devices_on_the_guest.task.yaml Result ______ .. literalinclude:: task_outputs/List_the_cdrom_devices_on_the_guest.result.json Get the memory information of the VM ____________________________________ Here we collect the memory information of the VM: .. literalinclude:: task_outputs/Retrieve_the_memory_information_from_the_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Retrieve_the_memory_information_from_the_VM.result.json Get the storage policy of the VM -------------------------------- We use the ``vcenter_vm_storage_policy_info`` module for that: .. literalinclude:: task_outputs/Get_VM_storage_policy.task.yaml Result ______ .. literalinclude:: task_outputs/Get_VM_storage_policy.result.json Get the disk information of the VM ---------------------------------- We use the ``vcenter_vm_hardware_disk_info`` for this operation: .. literalinclude:: task_outputs/Retrieve_the_disk_information_from_the_VM.task.yaml Result ______ .. literalinclude:: task_outputs/Retrieve_the_disk_information_from_the_VM.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/vm_tool_configuration.rst0000644000000000000000000000243000000000000034176 0ustar00rootroot00000000000000.. _vmware_rest_vm_tool_configuration: ************************************************************** How to configure the VMware tools of a running virtual machine ************************************************************** .. contents:: :local: Introduction ============ This section show you how to collection information from a running virtual machine. Scenario requirements ===================== You've already followed :ref:`vmware_rest_run_a_vm` and your virtual machine runs VMware Tools. How to change the upgrade policy ================================ Change the upgrade policy to MANUAL --------------------------------------------------- You can adjust the VMware Tools upgrade policy with the ``vcenter_vm_tools`` module. .. literalinclude:: task_outputs/Change_vm-tools_upgrade_policy_to_MANUAL.task.yaml Result ______ .. literalinclude:: task_outputs/Change_vm-tools_upgrade_policy_to_MANUAL.result.json Change the upgrade policy to UPGRADE_AT_POWER_CYCLE ------------------------------------------------------------------------------------------ .. literalinclude:: task_outputs/Change_vm-tools_upgrade_policy_to_UPGRADE_AT_POWER_CYCLE.task.yaml Result ______ .. literalinclude:: task_outputs/Change_vm-tools_upgrade_policy_to_UPGRADE_AT_POWER_CYCLE.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_rest_scenarios/vm_tool_information.rst0000644000000000000000000000447400000000000033666 0ustar00rootroot00000000000000.. _vmware_rest_vm_tool_information: ***************************************************** How to get information from a running virtual machine ***************************************************** .. contents:: :local: Introduction ============ This section shows you how to collection information from a running virtual machine. Scenario requirements ===================== You've already followed :ref:`vmware_rest_run_a_vm` and your virtual machine runs VMware Tools. How to collect information ========================== In this example, we use the ``vcenter_vm_guest_*`` module to collect information about the associated resources. Filesystem ---------- Here we use ``vcenter_vm_guest_localfilesystem_info`` to retrieve the details about the filesystem of the guest. In this example we also use a ``retries`` loop. The VMware Tools may take a bit of time to start and by doing so, we give the VM a bit more time. .. literalinclude:: task_outputs/Get_guest_filesystem_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_filesystem_information.result.json Guest identity -------------- You can use ``vcenter_vm_guest_identity_info`` to get details like the OS family or the hostname of the running VM. .. literalinclude:: task_outputs/Get_guest_identity_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_identity_information.result.json Network ------- ``vcenter_vm_guest_networking_info`` will return the OS network configuration. .. literalinclude:: task_outputs/Get_guest_networking_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_networking_information.result.json Network interfaces ------------------ ``vcenter_vm_guest_networking_interfaces_info`` will return a list of NIC configurations. See also :ref:`vmware_rest_attach_a_network`. .. literalinclude:: task_outputs/Get_guest_network_interfaces_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_network_interfaces_information.result.json Network routes -------------- Use ``vcenter_vm_guest_networking_routes_info`` to explore the route table of your virtual machine. .. literalinclude:: task_outputs/Get_guest_network_routes_information.task.yaml Result ______ .. literalinclude:: task_outputs/Get_guest_network_routes_information.result.json ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.964559 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/0000755000000000000000000000000000000000000026002 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/faq.rst0000644000000000000000000000214100000000000027301 0ustar00rootroot00000000000000.. _vmware_faq: ****************** Ansible VMware FAQ ****************** vmware_guest ============ Can I deploy a virtual machine on a standalone ESXi server ? ------------------------------------------------------------ Yes. ``vmware_guest`` can deploy a virtual machine with required settings on a standalone ESXi server. However, you must have a paid license to deploy virtual machines this way. If you are using the free version, the API is read-only. Is ``/vm`` required for ``vmware_guest`` module ? ------------------------------------------------- Prior to Ansible version 2.5, ``folder`` was an optional parameter with a default value of ``/vm``. The folder parameter was used to discover information about virtual machines in the given infrastructure. Starting with Ansible version 2.5, ``folder`` is still an optional parameter with no default value. This parameter will be now used to identify a user's virtual machine, if multiple virtual machines or virtual machine templates are found with same name. VMware does not restrict the system administrator from creating virtual machines with same name. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_clone_template.rst0000644000000000000000000002607400000000000033423 0ustar00rootroot00000000000000.. _vmware_guest_from_template: **************************************** Deploy a virtual machine from a template **************************************** .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to clone a virtual machine from already existing VMware template or existing VMware guest. Scenario requirements ===================== * Software * Ansible 2.5 or later must be installed * The Python module ``Pyvmomi`` must be installed on the Ansible (or Target host if not executing against localhost) * Installing the latest ``Pyvmomi`` via ``pip`` is recommended [as the OS provided packages are usually out of date and incompatible] * Hardware * vCenter Server with at least one ESXi server * Access / Credentials * Ansible (or the target server) must have network access to the either vCenter server or the ESXi server you will be deploying to * Username and Password * Administrator user with following privileges - ``Datastore.AllocateSpace`` on the destination datastore or datastore folder - ``Network.Assign`` on the network to which the virtual machine will be assigned - ``Resource.AssignVMToPool`` on the destination host, cluster, or resource pool - ``VirtualMachine.Config.AddNewDisk`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.AddRemoveDevice`` on the datacenter or virtual machine folder - ``VirtualMachine.Interact.PowerOn`` on the datacenter or virtual machine folder - ``VirtualMachine.Inventory.CreateFromExisting`` on the datacenter or virtual machine folder - ``VirtualMachine.Provisioning.Clone`` on the virtual machine you are cloning - ``VirtualMachine.Provisioning.Customize`` on the virtual machine or virtual machine folder if you are customizing the guest operating system - ``VirtualMachine.Provisioning.DeployTemplate`` on the template you are using - ``VirtualMachine.Provisioning.ReadCustSpecs`` on the root vCenter Server if you are customizing the guest operating system Depending on your requirements, you could also need one or more of the following privileges: - ``VirtualMachine.Config.CPUCount`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.Memory`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.DiskExtend`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.Annotation`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.AdvancedConfig`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.EditDevice`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.Resource`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.Settings`` on the datacenter or virtual machine folder - ``VirtualMachine.Config.UpgradeVirtualHardware`` on the datacenter or virtual machine folder - ``VirtualMachine.Interact.SetCDMedia`` on the datacenter or virtual machine folder - ``VirtualMachine.Interact.SetFloppyMedia`` on the datacenter or virtual machine folder - ``VirtualMachine.Interact.DeviceConnection`` on the datacenter or virtual machine folder Assumptions =========== - All variable names and VMware object names are case sensitive - VMware allows creation of virtual machine and templates with same name across datacenters and within datacenters - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours Caveats ======= - Hosts in the ESXi cluster must have access to the datastore that the template resides on. - Multiple templates with the same name will cause module failures. - In order to utilize Guest Customization, VMware Tools must be installed on the template. For Linux, the ``open-vm-tools`` package is recommended, and it requires that ``Perl`` be installed. Example description =================== In this use case / example, we will be selecting a virtual machine template and cloning it into a specific folder in our Datacenter / Cluster. The following Ansible playbook showcases the basic parameters that are needed for this. .. code-block:: yaml --- - name: Create a VM from a template hosts: localhost gather_facts: no tasks: - name: Clone the template vmware_guest: hostname: "{{ vcenter_ip }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: False name: testvm_2 template: template_el7 datacenter: "{{ datacenter_name }}" folder: /DC1/vm state: poweredon cluster: "{{ cluster_name }}" wait_for_ip_address: yes Since Ansible utilizes the VMware API to perform actions, in this use case we will be connecting directly to the API from our localhost. This means that our playbooks will not be running from the vCenter or ESXi Server. We do not necessarily need to collect facts about our localhost, so the ``gather_facts`` parameter will be disabled. You can run these modules against another server that would then connect to the API if your localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server. To begin, there are a few bits of information we will need. First and foremost is the hostname of the ESXi server or vCenter server. After this, you will need the username and password for this server. For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook. Now you need to supply the information about the virtual machine which will be created. Give your virtual machine a name, one that conforms to all VMware requirements for naming conventions. Next, select the display name of the template from which you want to clone new virtual machine. This must match what's displayed in VMware Web UI exactly. Then you can specify a folder to place this new virtual machine in. This path can either be a relative path or a full path to the folder including the Datacenter. You may need to specify a state for the virtual machine. This simply tells the module which action you want to take, in this case you will be ensure that the virtual machine exists and is powered on. An optional parameter is ``wait_for_ip_address``, this will tell Ansible to wait for the virtual machine to fully boot up and VMware Tools is running before completing this task. What to expect -------------- - You will see a bit of JSON output after this playbook completes. This output shows various parameters that are returned from the module and from vCenter about the newly created VM. .. code-block:: yaml { "changed": true, "instance": { "annotation": "", "current_snapshot": null, "customvalues": {}, "guest_consolidation_needed": false, "guest_question": null, "guest_tools_status": "guestToolsNotRunning", "guest_tools_version": "0", "hw_cores_per_socket": 1, "hw_datastores": [ "ds_215" ], "hw_esxi_host": "192.0.2.44", "hw_eth0": { "addresstype": "assigned", "ipaddresses": null, "label": "Network adapter 1", "macaddress": "00:50:56:8c:19:f4", "macaddress_dash": "00-50-56-8c-19-f4", "portgroup_key": "dvportgroup-17", "portgroup_portkey": "0", "summary": "DVSwitch: 50 0c 5b 22 b6 68 ab 89-fc 0b 59 a4 08 6e 80 fa" }, "hw_files": [ "[ds_215] testvm_2/testvm_2.vmx", "[ds_215] testvm_2/testvm_2.vmsd", "[ds_215] testvm_2/testvm_2.vmdk" ], "hw_folder": "/DC1/vm", "hw_guest_full_name": null, "hw_guest_ha_state": null, "hw_guest_id": null, "hw_interfaces": [ "eth0" ], "hw_is_template": false, "hw_memtotal_mb": 512, "hw_name": "testvm_2", "hw_power_status": "poweredOff", "hw_processor_count": 2, "hw_product_uuid": "420cb25b-81e8-8d3b-dd2d-a439ee54fcc5", "hw_version": "vmx-13", "instance_uuid": "500cd53b-ed57-d74e-2da8-0dc0eddf54d5", "ipv4": null, "ipv6": null, "module_hw": true, "snapshots": [] }, "invocation": { "module_args": { "annotation": null, "cdrom": {}, "cluster": "DC1_C1", "customization": {}, "customization_spec": null, "customvalues": [], "datacenter": "DC1", "disk": [], "esxi_hostname": null, "folder": "/DC1/vm", "force": false, "guest_id": null, "hardware": {}, "hostname": "192.0.2.44", "is_template": false, "linked_clone": false, "name": "testvm_2", "name_match": "first", "networks": [], "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "port": 443, "resource_pool": null, "snapshot_src": null, "state": "present", "state_change_timeout": 0, "template": "template_el7", "username": "administrator@vsphere.local", "uuid": null, "validate_certs": false, "vapp_properties": [], "wait_for_ip_address": true } } } - State is changed to ``True`` which notifies that the virtual machine is built using given template. The module will not complete until the clone task in VMware is finished. This can take some time depending on your environment. - If you utilize the ``wait_for_ip_address`` parameter, then it will also increase the clone time as it will wait until virtual machine boots into the OS and an IP Address has been assigned to the given NIC. Troubleshooting --------------- Things to inspect - Check if the values provided for username and password are correct - Check if the datacenter you provided is available - Check if the template specified exists and you have permissions to access the datastore - Ensure the full folder path you specified already exists. It will not create folders automatically for you ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_find_vm_folder.rst0000644000000000000000000001046300000000000033400 0ustar00rootroot00000000000000.. _vmware_guest_find_folder: ****************************************************** Find folder path of an existing VMware virtual machine ****************************************************** .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to find folder path of an existing VMware virtual machine. Scenario requirements ===================== * Software * Ansible 2.5 or later must be installed. * The Python module ``Pyvmomi`` must be installed on the Ansible control node (or Target host if not executing against localhost). * We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). * Hardware * At least one standalone ESXi server or * vCenter Server with at least one ESXi server * Access / Credentials * Ansible (or the target server) must have network access to the either vCenter server or the ESXi server * Username and Password for vCenter or ESXi server Caveats ======= - All variable names and VMware object names are case sensitive. - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours. Example description =================== With the following Ansible playbook you can find the folder path of an existing virtual machine using name. .. code-block:: yaml --- - name: Find folder path of an existing virtual machine hosts: localhost gather_facts: False vars_files: - vcenter_vars.yml vars: ansible_python_interpreter: "/usr/bin/env python3" tasks: - set_fact: vm_name: "DC0_H0_VM0" - name: "Find folder for VM - {{ vm_name }}" vmware_guest_find: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: False name: "{{ vm_name }}" delegate_to: localhost register: vm_facts Since Ansible utilizes the VMware API to perform actions, in this use case it will be connecting directly to the API from localhost. This means that playbooks will not be running from the vCenter or ESXi Server. Note that this play disables the ``gather_facts`` parameter, since you don't want to collect facts about localhost. You can run these modules against another server that would then connect to the API if localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server. We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). Before you begin, make sure you have: - Hostname of the ESXi server or vCenter server - Username and password for the ESXi or vCenter server - Name of the existing Virtual Machine for which you want to collect folder path For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook. The name of existing virtual machine will be used as input for ``vmware_guest_find`` module via ``name`` parameter. What to expect -------------- Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see .. code-block:: yaml "vm_facts": { "changed": false, "failed": false, ... "folders": [ "/F0/DC0/vm/F0" ] } Troubleshooting --------------- If your playbook fails: - Check if the values provided for username and password are correct. - Check if the datacenter you provided is available. - Check if the virtual machine specified exists and you have respective permissions to access VMware object. - Ensure the full folder path you specified already exists. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_remove_vm.rst0000644000000000000000000001172000000000000032417 0ustar00rootroot00000000000000.. _vmware_guest_remove_virtual_machine: ***************************************** Remove an existing VMware virtual machine ***************************************** .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to remove an existing VMware virtual machine. Scenario requirements ===================== * Software * Ansible 2.5 or later must be installed. * The Python module ``Pyvmomi`` must be installed on the Ansible control node (or Target host if not executing against localhost). * We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). * Hardware * At least one standalone ESXi server or * vCenter Server with at least one ESXi server * Access / Credentials * Ansible (or the target server) must have network access to the either vCenter server or the ESXi server * Username and Password for vCenter or ESXi server * Hosts in the ESXi cluster must have access to the datastore that the template resides on. Caveats ======= - All variable names and VMware object names are case sensitive. - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours. - ``vmware_guest`` module tries to mimic VMware Web UI and workflow, so the virtual machine must be in powered off state in order to remove it from the VMware inventory. .. warning:: The removal VMware virtual machine using ``vmware_guest`` module is destructive operation and can not be reverted, so it is strongly recommended to take the backup of virtual machine and related files (vmx and vmdk files) before proceeding. Example description =================== In this use case / example, user will be removing a virtual machine using name. The following Ansible playbook showcases the basic parameters that are needed for this. .. code-block:: yaml --- - name: Remove virtual machine gather_facts: no vars_files: - vcenter_vars.yml vars: ansible_python_interpreter: "/usr/bin/env python3" hosts: localhost tasks: - set_fact: vm_name: "VM_0003" datacenter: "DC1" - name: Remove "{{ vm_name }}" vmware_guest: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: no cluster: "DC1_C1" name: "{{ vm_name }}" state: absent delegate_to: localhost register: facts Since Ansible utilizes the VMware API to perform actions, in this use case it will be connecting directly to the API from localhost. This means that playbooks will not be running from the vCenter or ESXi Server. Note that this play disables the ``gather_facts`` parameter, since you don't want to collect facts about localhost. You can run these modules against another server that would then connect to the API if localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server. We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). Before you begin, make sure you have: - Hostname of the ESXi server or vCenter server - Username and password for the ESXi or vCenter server - Name of the existing Virtual Machine you want to remove For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook. The name of existing virtual machine will be used as input for ``vmware_guest`` module via ``name`` parameter. What to expect -------------- - You will not see any JSON output after this playbook completes as compared to other operations performed using ``vmware_guest`` module. .. code-block:: yaml { "changed": true } - State is changed to ``True`` which notifies that the virtual machine is removed from the VMware inventory. This can take some time depending upon your environment and network connectivity. Troubleshooting --------------- If your playbook fails: - Check if the values provided for username and password are correct. - Check if the datacenter you provided is available. - Check if the virtual machine specified exists and you have permissions to access the datastore. - Ensure the full folder path you specified already exists. It will not create folders automatically for you. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_rename_vm.rst0000644000000000000000000001603100000000000032371 0ustar00rootroot00000000000000.. _vmware_guest_rename_virtual_machine: ********************************** Rename an existing virtual machine ********************************** .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to rename an existing virtual machine. Scenario requirements ===================== * Software * Ansible 2.5 or later must be installed. * The Python module ``Pyvmomi`` must be installed on the Ansible control node (or Target host if not executing against localhost). * We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). * Hardware * At least one standalone ESXi server or * vCenter Server with at least one ESXi server * Access / Credentials * Ansible (or the target server) must have network access to the either vCenter server or the ESXi server * Username and Password for vCenter or ESXi server * Hosts in the ESXi cluster must have access to the datastore that the template resides on. Caveats ======= - All variable names and VMware object names are case sensitive. - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours. Example description =================== With the following Ansible playbook you can rename an existing virtual machine by changing the UUID. .. code-block:: yaml --- - name: Rename virtual machine from old name to new name using UUID gather_facts: no vars_files: - vcenter_vars.yml vars: ansible_python_interpreter: "/usr/bin/env python3" hosts: localhost tasks: - set_fact: vm_name: "old_vm_name" new_vm_name: "new_vm_name" datacenter: "DC1" cluster_name: "DC1_C1" - name: Get VM "{{ vm_name }}" uuid vmware_guest_facts: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: False datacenter: "{{ datacenter }}" folder: "/{{datacenter}}/vm" name: "{{ vm_name }}" register: vm_facts - name: Rename "{{ vm_name }}" to "{{ new_vm_name }}" vmware_guest: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" validate_certs: False cluster: "{{ cluster_name }}" uuid: "{{ vm_facts.instance.hw_product_uuid }}" name: "{{ new_vm_name }}" Since Ansible utilizes the VMware API to perform actions, in this use case it will be connecting directly to the API from localhost. This means that playbooks will not be running from the vCenter or ESXi Server. Note that this play disables the ``gather_facts`` parameter, since you don't want to collect facts about localhost. You can run these modules against another server that would then connect to the API if localhost does not have access to vCenter. If so, the required Python modules will need to be installed on that target server. We recommend installing the latest version with pip: ``pip install Pyvmomi`` (as the OS packages are usually out of date and incompatible). Before you begin, make sure you have: - Hostname of the ESXi server or vCenter server - Username and password for the ESXi or vCenter server - The UUID of the existing Virtual Machine you want to rename For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter or ESXi server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook. Now you need to supply the information about the existing virtual machine which will be renamed. For renaming virtual machine, ``vmware_guest`` module uses VMware UUID, which is unique across vCenter environment. This value is autogenerated and can not be changed. You will use ``vmware_guest_facts`` module to find virtual machine and get information about VMware UUID of the virtual machine. This value will be used input for ``vmware_guest`` module. Specify new name to virtual machine which conforms to all VMware requirements for naming conventions as ``name`` parameter. Also, provide ``uuid`` as the value of VMware UUID. What to expect -------------- Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see .. code-block:: yaml { "changed": true, "instance": { "annotation": "", "current_snapshot": null, "customvalues": {}, "guest_consolidation_needed": false, "guest_question": null, "guest_tools_status": "guestToolsNotRunning", "guest_tools_version": "10247", "hw_cores_per_socket": 1, "hw_datastores": ["ds_204_2"], "hw_esxi_host": "10.x.x.x", "hw_eth0": { "addresstype": "assigned", "ipaddresses": [], "label": "Network adapter 1", "macaddress": "00:50:56:8c:b8:42", "macaddress_dash": "00-50-56-8c-b8-42", "portgroup_key": "dvportgroup-31", "portgroup_portkey": "15", "summary": "DVSwitch: 50 0c 3a 69 df 78 2c 7b-6e 08 0a 89 e3 a6 31 17" }, "hw_files": ["[ds_204_2] old_vm_name/old_vm_name.vmx", "[ds_204_2] old_vm_name/old_vm_name.nvram", "[ds_204_2] old_vm_name/old_vm_name.vmsd", "[ds_204_2] old_vm_name/vmware.log", "[ds_204_2] old_vm_name/old_vm_name.vmdk"], "hw_folder": "/DC1/vm", "hw_guest_full_name": null, "hw_guest_ha_state": null, "hw_guest_id": null, "hw_interfaces": ["eth0"], "hw_is_template": false, "hw_memtotal_mb": 1024, "hw_name": "new_vm_name", "hw_power_status": "poweredOff", "hw_processor_count": 1, "hw_product_uuid": "420cbebb-835b-980b-7050-8aea9b7b0a6d", "hw_version": "vmx-13", "instance_uuid": "500c60a6-b7b4-8ae5-970f-054905246a6f", "ipv4": null, "ipv6": null, "module_hw": true, "snapshots": [] } } confirming that you've renamed the virtual machine. Troubleshooting --------------- If your playbook fails: - Check if the values provided for username and password are correct. - Check if the datacenter you provided is available. - Check if the virtual machine specified exists and you have permissions to access the datastore. - Ensure the full folder path you specified already exists. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_vmware_http.rst0000644000000000000000000001376100000000000032767 0ustar00rootroot00000000000000.. _vmware_http_api_usage: *********************************** Using VMware HTTP API using Ansible *********************************** .. contents:: :local: Introduction ============ This guide will show you how to utilize Ansible to use VMware HTTP APIs to automate various tasks. Scenario requirements ===================== * Software * Ansible 2.5 or later must be installed. * We recommend installing the latest version with pip: ``pip install Pyvmomi`` on the Ansible control node (as the OS packages are usually out of date and incompatible) if you are planning to use any existing VMware modules. * Hardware * vCenter Server 6.5 and above with at least one ESXi server * Access / Credentials * Ansible (or the target server) must have network access to either the vCenter server or the ESXi server * Username and Password for vCenter Caveats ======= - All variable names and VMware object names are case sensitive. - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviours. - VMware HTTP APIs are introduced in vSphere 6.5 and above so minimum level required in 6.5. - There are very limited number of APIs exposed, so you may need to rely on XMLRPC based VMware modules. Example description =================== With the following Ansible playbook you can find the VMware ESXi host system(s) and can perform various tasks depending on the list of host systems. This is a generic example to show how Ansible can be utilized to consume VMware HTTP APIs. .. code-block:: yaml --- - name: Example showing VMware HTTP API utilization hosts: localhost gather_facts: no vars_files: - vcenter_vars.yml vars: ansible_python_interpreter: "/usr/bin/env python3" tasks: - name: Login into vCenter and get cookies uri: url: https://{{ vcenter_server }}/rest/com/vmware/cis/session force_basic_auth: yes validate_certs: no method: POST user: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" register: login - name: Get all hosts from vCenter using cookies from last task uri: url: https://{{ vcenter_server }}/rest/vcenter/host force_basic_auth: yes validate_certs: no headers: Cookie: "{{ login.set_cookie }}" register: vchosts - name: Change Log level configuration of the given hostsystem vmware_host_config_manager: hostname: "{{ vcenter_server }}" username: "{{ vcenter_user }}" password: "{{ vcenter_pass }}" esxi_hostname: "{{ item.name }}" options: 'Config.HostAgent.log.level': 'error' validate_certs: no loop: "{{ vchosts.json.value }}" register: host_config_results Since Ansible utilizes the VMware HTTP API using the ``uri`` module to perform actions, in this use case it will be connecting directly to the VMware HTTP API from localhost. This means that playbooks will not be running from the vCenter or ESXi Server. Note that this play disables the ``gather_facts`` parameter, since you don't want to collect facts about localhost. Before you begin, make sure you have: - Hostname of the vCenter server - Username and password for the vCenter server - Version of vCenter is at least 6.5 For now, you will be entering these directly, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. If your vCenter server is not setup with proper CA certificates that can be verified from the Ansible server, then it is necessary to disable validation of these certificates by using the ``validate_certs`` parameter. To do this you need to set ``validate_certs=False`` in your playbook. As you can see, we are using the ``uri`` module in first task to login into the vCenter server and storing result in the ``login`` variable using register. In the second task, using cookies from the first task we are gathering information about the ESXi host system. Using this information, we are changing the ESXi host system's advance configuration. What to expect -------------- Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see .. code-block:: yaml "results": [ { ... "invocation": { "module_args": { "cluster_name": null, "esxi_hostname": "10.76.33.226", "hostname": "10.65.223.114", "options": { "Config.HostAgent.log.level": "error" }, "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "port": 443, "username": "administrator@vsphere.local", "validate_certs": false } }, "item": { "connection_state": "CONNECTED", "host": "host-21", "name": "10.76.33.226", "power_state": "POWERED_ON" }, "msg": "Config.HostAgent.log.level changed." ... } ] Troubleshooting --------------- If your playbook fails: - Check if the values provided for username and password are correct. - Check if you are using vCenter 6.5 and onwards to use this HTTP APIs. .. seealso:: `VMware vSphere and Ansible From Zero to Useful by @arielsanchezmor `_ vBrownBag session video related to VMware HTTP APIs `Sample Playbooks for using VMware HTTP APIs `_ GitHub repo for examples of Ansible playbook to manage VMware using HTTP APIs ././@PaxHeader0000000000000000000000000000021700000000000011455 xustar0000000000000000116 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connection.rst 27 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/scenario_vmware_tools_connecti0000644000000000000000000001020400000000000034210 0ustar00rootroot00000000000000.. _vmware_tools_connection: ************************************ Using vmware_tools connection plugin ************************************ .. contents:: :local: Introduction ============ This guide will show you how to utilize VMware Connection plugin to communicate and automate various tasks on VMware guest machines. Scenario requirements ===================== * Software * Ansible 2.9 or later must be installed. * We recommend installing the latest version with pip: ``pip install Pyvmomi`` on the Ansible control node (as the OS packages are usually out of date and incompatible) if you are planning to use any existing VMware modules. * Hardware * vCenter Server 6.5 and above * Access / Credentials * Ansible (or the target server) must have network access to either the vCenter server * Username and Password for vCenter with required permissions * VMware tools or openvm-tools with required dependencies like Perl installed on the given virtual machine Caveats ======= - All variable names and VMware object names are case sensitive. - You need to use Python 2.7.9 version in order to use ``validate_certs`` option, as this version is capable of changing the SSL verification behaviors. Example description =================== User can run playbooks against VMware virtual machines using ``vmware_tools`` connection plugin. In order work with ``vmware_tools`` connection plugin, you will need to specify hostvars for the given virtual machine. For example, if you want to run a playbook on a virtual machine called ``centos_7`` located at ``/Asia-Datacenter1/prod/centos_7`` in the given vCenter, you will need to specify hostvars as follows: .. code-block:: ini [centos7] host1 [centos7:vars] # vmware_tools related variables ansible_connection=vmware_tools ansible_vmware_host=10.65.201.128 ansible_vmware_user=administrator@vsphere.local ansible_vmware_password=Esxi@123$% ansible_vmware_validate_certs=no # Location of the virtual machine ansible_vmware_guest_path=Asia-Datacenter1/vm/prod/centos_7 # Credentials ansible_vmware_tools_user=root ansible_vmware_tools_password=Secret123 Here, we are providing vCenter details and credentials for the given virtual machine to run the playbook on. If your virtual machine path is ``Asia-Datacenter1/prod/centos_7``, you specify ``ansible_vmware_guest_path`` as ``Asia-Datacenter1/vm/prod/centos_7``. Please take a note that ``/vm`` is added in the virtual machine path, since this is a logical folder structure in the VMware inventory. Let us now run following playbook, .. code-block:: yaml --- - name: Example showing VMware Connection plugin hosts: centos7 tasks: - name: Gather information about temporary directory inside VM shell: ls /tmp Since Ansible utilizes the ``vmware-tools`` or ``openvm-tools`` service capabilities running in the virtual machine to perform actions, in this use case it will be connecting directly to the guest machine. For now, you will be entering credentials in plain text, but in a more advanced playbook this can be abstracted out and stored in a more secure fashion using :ref:`ansible-vault` or using `Ansible Tower credentials `_. What to expect -------------- Running this playbook can take some time, depending on your environment and network connectivity. When the run is complete you will see: .. code-block:: yaml { "changed": true, "cmd": "ls /tmp", "delta": "0:00:00.005440", "end": "2020-10-01 07:30:56.940813", "rc": 0, "start": "2020-10-01 07:30:56.935373", "stderr": "", "stderr_lines": [], "stdout": "ansible_command_payload_JzWiL9\niso", "stdout_lines": ["ansible_command_payload_JzWiL9", "iso", "vmware-root"] } Troubleshooting --------------- If your playbook fails: - Check if the values provided for username and password are correct. - Check if the path of virtual machine is correct. Please mind that ``/vm/`` needs to be provided while specifying virtual machine location. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.522556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_concepts.rst0000644000000000000000000000465400000000000031744 0ustar00rootroot00000000000000.. _vmware_concepts: *************************** Ansible for VMware Concepts *************************** Some of these concepts are common to all uses of Ansible, including VMware automation; some are specific to VMware. You need to understand them to use Ansible for VMware automation. This introduction provides the background you need to follow the :ref:`scenarios` in this guide. .. contents:: :local: Control Node ============ Any machine with Ansible installed. You can run commands and playbooks, invoking ``/usr/bin/ansible`` or ``/usr/bin/ansible-playbook``, from any control node. You can use any computer that has Python installed on it as a control node - laptops, shared desktops, and servers can all run Ansible. However, you cannot use a Windows machine as a control node. You can have multiple control nodes. Delegation ========== Delegation allows you to select the system that executes a given task. If you do not have ``pyVmomi`` installed on your control node, use the ``delegate_to`` keyword on VMware-specific tasks to execute them on any host where you have ``pyVmomi`` installed. Modules ======= The units of code Ansible executes. Each module has a particular use, from creating virtual machines on vCenter to managing distributed virtual switches in the vCenter environment. You can invoke a single module with a task, or invoke several different modules in a playbook. For an idea of how many modules Ansible includes, take a look at the :ref:`list of cloud modules`, which includes VMware modules. Playbooks ========= Ordered lists of tasks, saved so you can run those tasks in that order repeatedly. Playbooks can include variables as well as tasks. Playbooks are written in YAML and are easy to read, write, share and understand. pyVmomi ======= Ansible VMware modules are written on top of `pyVmomi `_. ``pyVmomi`` is the official Python SDK for the VMware vSphere API that allows user to manage ESX, ESXi, and vCenter infrastructure. You need to install this Python SDK on host from where you want to invoke VMware automation. For example, if you are using control node then ``pyVmomi`` must be installed on control node. If you are using any ``delegate_to`` host which is different from your control node then you need to install ``pyVmomi`` on that ``delegate_to`` node. You can install pyVmomi using pip: .. code-block:: bash $ pip install pyvmomi ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_external_doc_links.rst0000644000000000000000000000117600000000000033771 0ustar00rootroot00000000000000.. _vmware_external_doc_links: ***************************** Other useful VMware resources ***************************** * `VMware API and SDK Documentation `_ * `VCSIM test container image `_ * `Ansible VMware community wiki page `_ * `VMware's official Guest Operating system customization matrix `_ * `VMware Compatibility Guide `_ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_getting_started.rst0000644000000000000000000000041700000000000033306 0ustar00rootroot00000000000000:orphan: .. _vmware_ansible_getting_started: *************************************** Getting Started with Ansible for VMware *************************************** This will have a basic "hello world" scenario/walkthrough that gets the user introduced to the basics. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_intro.rst0000644000000000000000000000372100000000000031253 0ustar00rootroot00000000000000.. _vmware_ansible_intro: ********************************** Introduction to Ansible for VMware ********************************** .. contents:: :local: Introduction ============ Ansible provides various modules to manage VMware infrastructure, which includes datacenter, cluster, host system and virtual machine. Requirements ============ Ansible VMware modules are written on top of `pyVmomi `_. pyVmomi is the Python SDK for the VMware vSphere API that allows user to manage ESX, ESXi, and vCenter infrastructure. You can install pyVmomi using pip (you may need to use pip3, depending on your OS/distro): .. code-block:: bash $ pip install pyvmomi Ansible VMware modules leveraging latest vSphere(6.0+) features are using `vSphere Automation Python SDK `_. The vSphere Automation Python SDK also has client libraries, documentation, and sample code for VMware Cloud on AWS Console APIs, NSX VMware Cloud on AWS integration APIs, VMware Cloud on AWS site recovery APIs, NSX-T APIs. You can install vSphere Automation Python SDK using pip: .. code-block:: bash $ pip install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git Note: Installing vSphere Automation Python SDK also installs ``pyvmomi``. A separate installation of ``pyvmomi`` is not required. vmware_guest module =================== The :ref:`vmware_guest` module manages various operations related to virtual machines in the given ESXi or vCenter server. .. seealso:: `pyVmomi `_ The GitHub Page of pyVmomi `pyVmomi Issue Tracker `_ The issue tracker for the pyVmomi project `govc `_ govc is a vSphere CLI built on top of govmomi :ref:`working_with_playbooks` An introduction to playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_inventory.rst0000644000000000000000000000630100000000000032152 0ustar00rootroot00000000000000.. _vmware_ansible_inventory: ************************************* Using VMware dynamic inventory plugin ************************************* .. contents:: :local: VMware Dynamic Inventory Plugin =============================== The best way to interact with your hosts is to use the VMware dynamic inventory plugin, which dynamically queries VMware APIs and tells Ansible what nodes can be managed. Requirements ------------ To use the VMware dynamic inventory plugins, you must install `pyVmomi `_ on your control node (the host running Ansible). To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK `_, which supports REST API features like tagging and content libraries, on your control node. You can install the ``vSphere Automation SDK`` following `these instructions `_. .. code-block:: bash $ pip install pyvmomi To use this VMware dynamic inventory plugin, you need to enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins = vmware_vm_inventory Then, create a file that ends in ``.vmware.yml`` or ``.vmware.yaml`` in your working directory. The ``vmware_vm_inventory`` script takes in the same authentication information as any VMware module. Here's an example of a valid inventory file: .. code-block:: yaml plugin: vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: True Executing ``ansible-inventory --list -i .vmware.yml`` will create a list of VMware instances that are ready to be configured using Ansible. Using vaulted configuration files ================================= Since the inventory configuration file contains vCenter password in plain text, a security risk, you may want to encrypt your entire inventory configuration file. You can encrypt a valid inventory configuration file as follows: .. code-block:: bash $ ansible-vault encrypt .vmware.yml New Vault password: Confirm New Vault password: Encryption successful And you can use this vaulted inventory configuration file using: .. code-block:: bash $ ansible-inventory -i filename.vmware.yml --list --vault-password-file=/path/to/vault_password_file .. seealso:: `pyVmomi `_ The GitHub Page of pyVmomi `pyVmomi Issue Tracker `_ The issue tracker for the pyVmomi project `vSphere Automation SDK GitHub Page `_ The GitHub Page of vSphere Automation SDK for Python `vSphere Automation SDK Issue Tracker `_ The issue tracker for vSphere Automation SDK for Python :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_inventory_filters.rst0000644000000000000000000001720200000000000033704 0ustar00rootroot00000000000000.. _vmware_ansible_inventory_using_filters: *********************************************** Using VMware dynamic inventory plugin - Filters *********************************************** .. contents:: :local: VMware dynamic inventory plugin - filtering VMware guests ========================================================= VMware inventory plugin allows you to filter VMware guests using the ``filters`` configuration parameter. This section shows how you configure ``filters`` for the given VMware guest in the inventory. Requirements ------------ To use the VMware dynamic inventory plugins, you must install `pyVmomi `_ on your control node (the host running Ansible). To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK `_, which supports REST API features such as tagging and content libraries, on your control node. You can install the ``vSphere Automation SDK`` following `these instructions `_. .. code-block:: bash $ pip install pyvmomi Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible. Alternately, to install the latest ``community.vmware`` collection: .. code-block:: bash $ ansible-galaxy collection install community.vmware To use this VMware dynamic inventory plugin: 1. Enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins = community.vmware.vmware_vm_inventory 2. Create a file that ends in ``vmware.yml`` or ``vmware.yaml`` in your working directory. The ``vmware_vm_inventory`` inventory plugin takes in the same authentication information as any other VMware modules does. Let us assume we want to list all RHEL7 VMs with the power state as "poweredOn". A valid inventory file with filters for the given VMware guest looks as follows: .. code-block:: yaml plugin: community.vmware.vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: False hostnames: - config.name filters: - config.guestId == "rhel7_64Guest" - summary.runtime.powerState == "poweredOn" Here, we have configured two filters - * ``config.guestId`` is equal to ``rhel7_64Guest`` * ``summary.runtime.powerState`` is equal to ``poweredOn`` This retrieves all the VMs which satisfy these two conditions and populates them in the inventory. Notice that the conditions are combined using an ``and`` operation. Using ``or`` conditions in filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Let us assume you want filter RHEL7 and Ubuntu VMs. You can use multiple filters using ``or`` condition in your inventory file. A valid filter in the VMware inventory file for this example is: .. code-block:: yaml plugin: community.vmware.vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: False hostnames: - config.name filters: - config.guestId == "rhel7_64Guest" or config.guestId == "ubuntu64Guest" You can check all allowed properties for filters for the given virtual machine at :ref:`vmware_inventory_vm_attributes`. If you are using the ``properties`` parameter with custom VM properties, make sure that you include all the properties used by filters as well in your VM property list. For example, if we want all RHEL7 and Ubuntu VMs that are poweredOn, you can use inventory file: .. code-block:: yaml plugin: community.vmware.vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: False hostnames: - 'config.name' properties: - 'config.name' - 'config.guestId' - 'guest.ipAddress' - 'summary.runtime.powerState' filters: - config.guestId == "rhel7_64Guest" or config.guestId == "ubuntu64Guest" - summary.runtime.powerState == "poweredOn" Here, we are using minimum VM properties, that is ``config.name``, ``config.guestId``, ``summary.runtime.powerState``, and ``guest.ipAddress``. * ``config.name`` is used by the ``hostnames`` parameter. * ``config.guestId`` and ``summary.runtime.powerState`` are used by the ``filters`` parameter. * ``guest.guestId`` is used by ``ansible_host`` internally by the inventory plugin. Using regular expression in filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Let us assume you want filter VMs with specific IP range. You can use regular expression in ``filters`` in your inventory file. For example, if we want all RHEL7 and Ubuntu VMs that are poweredOn, you can use inventory file: .. code-block:: yaml plugin: community.vmware.vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: False hostnames: - 'config.name' properties: - 'config.name' - 'config.guestId' - 'guest.ipAddress' - 'summary.runtime.powerState' filters: - guest.ipAddress is defined and guest.ipAddress is match('192.168.*') Here, we are using ``guest.ipAddress`` VM property. This property is optional and depended upon VMware tools installed on VMs. We are using ``match`` to validate the regular expression for the given IP range. Executing ``ansible-inventory --list -i .vmware.yml`` creates a list of the virtual machines that are ready to be configured using Ansible. What to expect -------------- You will notice that the inventory hosts are filtered depending on your ``filters`` section. .. code-block:: yaml { "_meta": { "hostvars": { "template_001": { "config.name": "template_001", "config.guestId": "ubuntu64Guest", ... "guest.toolsStatus": "toolsNotInstalled", "summary.runtime.powerState": "poweredOn", }, "vm_8046": { "config.name": "vm_8046", "config.guestId": "rhel7_64Guest", ... "guest.toolsStatus": "toolsNotInstalled", "summary.runtime.powerState": "poweredOn", }, ... } Troubleshooting filters ----------------------- If the custom property specified in ``filters`` fails: - Check if the values provided for username and password are correct. - Make sure it is a valid property, see :ref:`vmware_inventory_vm_attributes`. - Use ``strict: True`` to get more information about the error. - Please make sure that you are using latest version of the VMware collection. .. seealso:: `pyVmomi `_ The GitHub Page of pyVmomi `pyVmomi Issue Tracker `_ The issue tracker for the pyVmomi project `vSphere Automation SDK GitHub Page `_ The GitHub Page of vSphere Automation SDK for Python `vSphere Automation SDK Issue Tracker `_ The issue tracker for vSphere Automation SDK for Python :ref:`vmware_inventory_vm_attributes` Using Virtual machine attributes in VMware dynamic inventory plugin :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_inventory_hostnames.rst0000644000000000000000000001127000000000000034234 0ustar00rootroot00000000000000.. _vmware_ansible_inventory_using_hostnames: ************************************************* Using VMware dynamic inventory plugin - Hostnames ************************************************* .. contents:: :local: VMware dynamic inventory plugin - customizing hostnames ======================================================= VMware inventory plugin allows you to configure hostnames using the ``hostnames`` configuration parameter. In this scenario guide we will see how you configure hostnames from the given VMware guest in the inventory. Requirements ------------ To use the VMware dynamic inventory plugins, you must install `pyVmomi `_ on your control node (the host running Ansible). To include tag-related information for the virtual machines in your dynamic inventory, you also need the `vSphere Automation SDK `_, which supports REST API features such as tagging and content libraries, on your control node. You can install the ``vSphere Automation SDK`` following `these instructions `_. .. code-block:: bash $ pip install pyvmomi Starting in Ansible 2.10, the VMware dynamic inventory plugin is available in the ``community.vmware`` collection included Ansible. To install the latest ``community.vmware`` collection: .. code-block:: bash $ ansible-galaxy collection install community.vmware To use this VMware dynamic inventory plugin: 1. Enable it first by specifying the following in the ``ansible.cfg`` file: .. code-block:: ini [inventory] enable_plugins = community.vmware.vmware_vm_inventory 2. Create a file that ends in ``vmware.yml`` or ``vmware.yaml`` in your working directory. The ``vmware_vm_inventory`` inventory plugin takes in the same authentication information as any other VMware modules does. Here's an example of a valid inventory file with custom hostname for the given VMware guest: .. code-block:: yaml plugin: community.vmware.vmware_vm_inventory strict: False hostname: 10.65.223.31 username: administrator@vsphere.local password: Esxi@123$% validate_certs: False with_tags: False hostnames: - config.name Here, we have configured a custom hostname by setting the ``hostnames`` parameter to ``config.name``. This will retrieve the ``config.name`` property from the virtual machine and populate it in the inventory. You can check all allowed properties for the given virtual machine at :ref:`vmware_inventory_vm_attributes`. Executing ``ansible-inventory --list -i .vmware.yml`` creates a list of the virtual machines that are ready to be configured using Ansible. What to expect -------------- You will notice that instead of default behavior of representing the hostname as ``config.name + _ + config.uuid``, the inventory hosts show value as ``config.name``. .. code-block:: yaml { "_meta": { "hostvars": { "template_001": { "config.name": "template_001", "guest.toolsRunningStatus": "guestToolsNotRunning", ... "guest.toolsStatus": "toolsNotInstalled", "name": "template_001" }, "vm_8046": { "config.name": "vm_8046", "guest.toolsRunningStatus": "guestToolsNotRunning", ... "guest.toolsStatus": "toolsNotInstalled", "name": "vm_8046" }, ... } Troubleshooting --------------- If the custom property specified in ``hostnames`` fails: - Check if the values provided for username and password are correct. - Make sure it is a valid property, see :ref:`vmware_inventory_vm_attributes`. - Use ``strict: True`` to get more information about the error. - Please make sure that you are using latest version VMware collection. .. seealso:: `pyVmomi `_ The GitHub Page of pyVmomi `pyVmomi Issue Tracker `_ The issue tracker for the pyVmomi project `vSphere Automation SDK GitHub Page `_ The GitHub Page of vSphere Automation SDK for Python `vSphere Automation SDK Issue Tracker `_ The issue tracker for vSphere Automation SDK for Python :ref:`vmware_inventory_vm_attributes` Using Virtual machine attributes in VMware dynamic inventory plugin :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000021500000000000011453 xustar0000000000000000114 path=ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes.rst 27 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_inventory_vm_attributes0000644000000000000000000012002700000000000034315 0ustar00rootroot00000000000000.. _vmware_inventory_vm_attributes: ******************************************************************* Using Virtual machine attributes in VMware dynamic inventory plugin ******************************************************************* .. contents:: :local: Virtual machine attributes ========================== You can use virtual machine properties which can be used to populate ``hostvars`` for the given virtual machine in a VMware dynamic inventory plugin. capability ---------- This section describes settings for the runtime capabilities of the virtual machine. snapshotOperationsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports snapshot operations. multipleSnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports multiple snapshots. This value is not set when the virtual machine is unavailable, for instance, when it is being created or deleted. snapshotConfigSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports snapshot config. poweredOffSnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports snapshot operations in ``poweredOff`` state. memorySnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports memory snapshots. revertToSnapshotSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports reverting to a snapshot. quiescedSnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports quiesced snapshots. disableSnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not snapshots can be disabled. lockSnapshotsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not the snapshot tree can be locked. consolePreferencesSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether console preferences can be set for the virtual machine. cpuFeatureMaskSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether CPU feature requirements masks can be set for the virtual machine. s1AcpiManagementSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not a virtual machine supports ACPI S1 settings management. settingScreenResolutionSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not the virtual machine supports setting the screen resolution of the console window. toolsAutoUpdateSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Supports tools auto-update. vmNpivWwnSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^ Supports virtual machine NPIV WWN. npivWwnOnNonRdmVmSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Supports assigning NPIV WWN to virtual machines that do not have RDM disks. vmNpivWwnDisableSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the NPIV disabling operation is supported on the virtual machine. vmNpivWwnUpdateSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the update of NPIV WWNs are supported on the virtual machine. swapPlacementSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Flag indicating whether the virtual machine has a configurable (swapfile placement policy). toolsSyncTimeSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether asking tools to sync time with the host is supported. virtualMmuUsageSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not the use of nested page table hardware support can be explicitly set. diskSharesSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether resource settings for disks can be applied to the virtual machine. bootOptionsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether boot options can be configured for the virtual machine. bootRetryOptionsSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether automatic boot retry can be configured for the virtual machine. settingVideoRamSizeSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Flag indicating whether the video RAM size of the virtual machine can be configured. settingDisplayTopologySupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not the virtual machine supports setting the display topology of the console window. recordReplaySupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether record and replay functionality is supported on the virtual machine. changeTrackingSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates that change tracking is supported for virtual disks of the virtual machine. However, even if change tracking is supported, it might not be available for all disks of the virtual machine. For example, passthru raw disk mappings or disks backed by any Ver1BackingInfo cannot be tracked. multipleCoresPerSocketSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether multiple virtual cores per socket is supported on the virtual machine. hostBasedReplicationSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates that host based replication is supported on the virtual machine. However, even if host based replication is supported, it might not be available for all disk types. For example, passthru raw disk mappings can not be replicated. guestAutoLockSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not guest autolock is supported on the virtual machine. memoryReservationLockSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether :ref:`memory_reservation_locked_to_max` may be set to true for the virtual machine. featureRequirementSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the featureRequirement feature is supported. poweredOnMonitorTypeChangeSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a monitor type change is supported while the virtual machine is in the ``poweredOn`` state. seSparseDiskSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the virtual machine supports the Flex-SE (space-efficient, sparse) format for virtual disks. nestedHVSupported (bool) ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the virtual machine supports nested hardware-assisted virtualization. vPMCSupported (bool) ^^^^^^^^^^^^^^^^^^^^ Indicates whether the virtual machine supports virtualized CPU performance counters. config ------ This section describes the configuration settings of the virtual machine, including the name and UUID. This property is set when a virtual machine is created or when the ``reconfigVM`` method is called. The virtual machine configuration is not guaranteed to be available. For example, the configuration information would be unavailable if the server is unable to access the virtual machine files on disk, and is often also unavailable during the initial phases of virtual machine creation. changeVersion (str) ^^^^^^^^^^^^^^^^^^^ The changeVersion is a unique identifier for a given version of the configuration. Each change to the configuration updates this value. This is typically implemented as an ever increasing count or a time-stamp. However, a client should always treat this as an opaque string. modified (datetime) ^^^^^^^^^^^^^^^^^^^ Last time a virtual machine's configuration was modified. name (str) ^^^^^^^^^^ Display name of the virtual machine. Any / (slash), \ (backslash), character used in this name element is escaped. Similarly, any % (percent) character used in this name element is escaped, unless it is used to start an escape sequence. A slash is escaped as %2F or %2f. A backslash is escaped as %5C or %5c, and a percent is escaped as %25. .. _guest_full_name: guestFullName (str) ^^^^^^^^^^^^^^^^^^^ This is the full name of the guest operating system for the virtual machine. For example: Windows 2000 Professional. See :ref:`alternate_guest_name`. version (str) ^^^^^^^^^^^^^ The version string for the virtual machine. uuid (str) ^^^^^^^^^^ 128-bit SMBIOS UUID of a virtual machine represented as a hexadecimal string in "12345678-abcd-1234-cdef-123456789abc" format. instanceUuid (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ VirtualCenter-specific 128-bit UUID of a virtual machine, represented as a hexadecimal string. This identifier is used by VirtualCenter to uniquely identify all virtual machine instances, including those that may share the same SMBIOS UUID. npivNodeWorldWideName (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A 64-bit node WWN (World Wide Name). npivPortWorldWideName (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A 64-bit port WWN (World Wide Name). npivWorldWideNameType (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The source that provides/generates the assigned WWNs. npivDesiredNodeWwns (short, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The NPIV node WWNs to be extended from the original list of WWN numbers. npivDesiredPortWwns (short, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The NPIV port WWNs to be extended from the original list of WWN numbers. npivTemporaryDisabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This property is used to enable or disable the NPIV capability on a desired virtual machine on a temporary basis. npivOnNonRdmDisks (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This property is used to check whether the NPIV can be enabled on the Virtual machine with non-rdm disks in the configuration, so this is potentially not enabling npiv on vmfs disks. Also this property is used to check whether RDM is required to generate WWNs for a virtual machine. locationId (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Hash incorporating the virtual machine's config file location and the UUID of the host assigned to run the virtual machine. template (bool) ^^^^^^^^^^^^^^^ Flag indicating whether or not a virtual machine is a template. guestId (str) ^^^^^^^^^^^^^ Guest operating system configured on a virtual machine. .. _alternate_guest_name: alternateGuestName (str) ^^^^^^^^^^^^^^^^^^^^^^^^ Used as display name for the operating system if guestId isotherorother-64. See :ref:`guest_full_name`. annotation (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Description for the virtual machine. files (vim.vm.FileInfo) ^^^^^^^^^^^^^^^^^^^^^^^ Information about the files associated with a virtual machine. This information does not include files for specific virtual disks or snapshots. tools (vim.vm.ToolsConfigInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration of VMware Tools running in the guest operating system. flags (vim.vm.FlagInfo) ^^^^^^^^^^^^^^^^^^^^^^^ Additional flags for a virtual machine. consolePreferences (vim.vm.ConsolePreferences, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Legacy console viewer preferences when doing power operations. defaultPowerOps (vim.vm.DefaultPowerOpInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration of default power operations. hardware (vim.vm.VirtualHardware) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Processor, memory, and virtual devices for a virtual machine. cpuAllocation (vim.ResourceAllocationInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Resource limits for CPU. memoryAllocation (vim.ResourceAllocationInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Resource limits for memory. latencySensitivity (vim.LatencySensitivity, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The latency-sensitivity of the virtual machine. memoryHotAddEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Whether memory can be added while the virtual machine is running. cpuHotAddEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Whether virtual processors can be added while the virtual machine is running. cpuHotRemoveEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Whether virtual processors can be removed while the virtual machine is running. hotPlugMemoryLimit (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The maximum amount of memory, in MB, than can be added to a running virtual machine. hotPlugMemoryIncrementSize (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Memory, in MB that can be added to a running virtual machine. cpuAffinity (vim.vm.AffinityInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Affinity settings for CPU. memoryAffinity (vim.vm.AffinityInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Affinity settings for memory. networkShaper (vim.vm.NetworkShaperInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Resource limits for network. extraConfig (vim.option.OptionValue, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Additional configuration information for the virtual machine. cpuFeatureMask (vim.host.CpuIdInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Specifies CPU feature compatibility masks that override the defaults from the ``GuestOsDescriptor`` of the virtual machine's guest OS. datastoreUrl (vim.vm.ConfigInfo.DatastoreUrlPair, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Enumerates the set of datastores that the virtual machine is stored on, as well as the URL identification for each of these. swapPlacement (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Virtual machine swapfile placement policy. bootOptions (vim.vm.BootOptions, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration options for the boot behavior of the virtual machine. ftInfo (vim.vm.FaultToleranceConfigInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Fault tolerance settings for the virtual machine. vAppConfig (vim.vApp.VmConfigInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ vApp meta-data for the virtual machine. vAssertsEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether user-configured virtual asserts will be triggered during virtual machine replay. changeTrackingEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether changed block tracking for the virtual machine's disks is active. firmware (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^ Information about firmware type for the virtual machine. maxMksConnections (int, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates the maximum number of active remote display connections that the virtual machine will support. guestAutoLockEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the guest operating system will logout any active sessions whenever there are no remote display connections open to the virtual machine. managedBy (vim.ext.ManagedByInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Specifies that the virtual machine is managed by a VC Extension. .. _memory_reservation_locked_to_max: memoryReservationLockedToMax (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If set true, memory resource reservation for the virtual machine will always be equal to the virtual machine's memory size; increases in memory size will be rejected when a corresponding reservation increase is not possible. initialOverhead (vim.vm.ConfigInfo.OverheadInfo), optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set of values to be used only to perform admission control when determining if a host has sufficient resources for the virtual machine to power on. nestedHVEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the virtual machine is configured to use nested hardware-assisted virtualization. vPMCEnabled (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether the virtual machine have virtual CPU performance counters enabled. scheduledHardwareUpgradeInfo (vim.vm.ScheduledHardwareUpgradeInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration of scheduled hardware upgrades and result from last attempt to run scheduled hardware upgrade. vFlashCacheReservation (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Specifies the total vFlash resource reservation for the vFlash caches associated with the virtual machine's virtual disks, in bytes. layout ------ Detailed information about the files that comprise the virtual machine. configFile (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^ A list of files that makes up the configuration of the virtual machine (excluding the .vmx file, since that file is represented in the FileInfo). These are relative paths from the configuration directory. A slash is always used as a separator. This list will typically include the NVRAM file, but could also include other meta-data files. logFile (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^ A list of files stored in the virtual machine's log directory. These are relative paths from the ``logDirectory``. A slash is always used as a separator. disk (vim.vm.FileLayout.DiskLayout, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Files making up each virtual disk. snapshot (vim.vm.FileLayout.SnapshotLayout, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Files of each snapshot. swapFile (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^ The swapfile specific to the virtual machine, if any. This is a complete datastore path, not a relative path. layoutEx -------- Detailed information about the files that comprise the virtual machine. file (vim.vm.FileLayoutEx.FileInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Information about all the files that constitute the virtual machine including configuration files, disks, swap file, suspend file, log files, core files, memory file and so on. disk (vim.vm.FileLayoutEx.DiskLayout, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Layout of each virtual disk attached to the virtual machine. For a virtual machine with snapshots, this property gives only those disks that are attached to it at the current point of running. snapshot (vim.vm.FileLayoutEx.SnapshotLayout, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Layout of each snapshot of the virtual machine. timestamp (datetime) ^^^^^^^^^^^^^^^^^^^^ Time when values in this structure were last updated. storage (vim.vm.StorageInfo) ---------------------------- Storage space used by the virtual machine, split by datastore. perDatastoreUsage (vim.vm.StorageInfo.UsageOnDatastore, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Storage space used by the virtual machine on all datastores that it is located on. Total storage space committed to the virtual machine across all datastores is simply an aggregate of the property ``committed`` timestamp (datetime) ^^^^^^^^^^^^^^^^^^^^ Time when values in this structure were last updated. environmentBrowser (vim.EnvironmentBrowser) ------------------------------------------- The current virtual machine's environment browser object. This contains information on all the configurations that can be used on the virtual machine. This is identical to the environment browser on the ComputeResource to which the virtual machine belongs. datastoreBrowser (vim.host.DatastoreBrowser) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DatastoreBrowser to browse datastores that are available on this entity. resourcePool (vim.ResourcePool) ------------------------------- The current resource pool that specifies resource allocation for the virtual machine. This property is set when a virtual machine is created or associated with a different resource pool. Returns null if the virtual machine is a template or the session has no access to the resource pool. summary (vim.ResourcePool.Summary) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Basic information about a resource pool. runtime (vim.ResourcePool.RuntimeInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Runtime information about a resource pool. owner (vim.ComputeResource) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ComputeResource to which this set of one or more nested resource pools belong. resourcePool (vim.ResourcePool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The set of child resource pools. vm (vim.VirtualMachine) ^^^^^^^^^^^^^^^^^^^^^^^ The set of virtual machines associated with this resource pool. config (vim.ResourceConfigSpec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration of this resource pool. childConfiguration (vim.ResourceConfigSpec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The resource configuration of all direct children (VirtualMachine and ResourcePool) of this resource group. parentVApp (vim.ManagedEntity) ------------------------------ Reference to the parent vApp. parent (vim.ManagedEntity) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Parent of this entity. This value is null for the root object and for (VirtualMachine) objects that are part of a (VirtualApp). customValue (vim.CustomFieldsManager.Value) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Custom field values. overallStatus (vim.ManagedEntity.Status) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ General health of this managed entity. configStatus (vim.ManagedEntity.Status) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The configStatus indicates whether or not the system has detected a configuration issue involving this entity. For example, it might have detected a duplicate IP address or MAC address, or a host in a cluster might be out of ``compliance.property``. configIssue (vim.event.Event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current configuration issues that have been detected for this entity. effectiveRole (int) ^^^^^^^^^^^^^^^^^^^ Access rights the current session has to this entity. permission (vim.AuthorizationManager.Permission) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ List of permissions defined for this entity. name (str) ^^^^^^^^^^ Name of this entity, unique relative to its parent. Any / (slash), \ (backslash), character used in this name element will be escaped. Similarly, any % (percent) character used in this name element will be escaped, unless it is used to start an escape sequence. A slash is escaped as %2F or %2f. A backslash is escaped as %5C or %5c, and a percent is escaped as %25. disabledMethod (str) ^^^^^^^^^^^^^^^^^^^^ List of operations that are disabled, given the current runtime state of the entity. For example, a power-on operation always fails if a virtual machine is already powered on. recentTask (vim.Task) ^^^^^^^^^^^^^^^^^^^^^ The set of recent tasks operating on this managed entity. A task in this list could be in one of the four states: pending, running, success or error. declaredAlarmState (vim.alarm.AlarmState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A set of alarm states for alarms that apply to this managed entity. triggeredAlarmState (vim.alarm.AlarmState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A set of alarm states for alarms triggered by this entity or by its descendants. alarmActionsEnabled (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Whether alarm actions are enabled for this entity. True if enabled; false otherwise. tag (vim.Tag) ^^^^^^^^^^^^^ The set of tags associated with this managed entity. Experimental. Subject to change. resourceConfig (vim.ResourceConfigSpec) --------------------------------------- The resource configuration for a virtual machine. entity (vim.ManagedEntity, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Reference to the entity with this resource specification: either a VirtualMachine or a ResourcePool. changeVersion (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The changeVersion is a unique identifier for a given version of the configuration. Each change to the configuration will update this value. This is typically implemented as an ever increasing count or a time-stamp. lastModified (datetime, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Timestamp when the resources were last modified. This is ignored when the object is used to update a configuration. cpuAllocation (vim.ResourceAllocationInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Resource allocation for CPU. memoryAllocation (vim.ResourceAllocationInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Resource allocation for memory. runtime (vim.vm.RuntimeInfo) ---------------------------- Execution state and history for the virtual machine. device (vim.vm.DeviceRuntimeInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Per-device runtime info. This array will be empty if the host software does not provide runtime info for any of the device types currently in use by the virtual machine. host (vim.HostSystem, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The host that is responsible for running a virtual machine. This property is null if the virtual machine is not running and is not assigned to run on a particular host. connectionState (vim.VirtualMachine.ConnectionState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether or not the virtual machine is available for management. powerState (vim.VirtualMachine.PowerState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The current power state of the virtual machine. faultToleranceState (vim.VirtualMachine.FaultToleranceState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The fault tolerance state of the virtual machine. dasVmProtection (vim.vm.RuntimeInfo.DasProtectionState, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The vSphere HA protection state for a virtual machine. Property is unset if vSphere HA is not enabled. toolsInstallerMounted (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Flag to indicate whether or not the VMware Tools installer is mounted as a CD-ROM. suspendTime (datetime, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The timestamp when the virtual machine was most recently suspended. This property is updated every time the virtual machine is suspended. bootTime (datetime, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The timestamp when the virtual machine was most recently powered on. This property is updated when the virtual machine is powered on from the poweredOff state, and is cleared when the virtual machine is powered off. This property is not updated when a virtual machine is resumed from a suspended state. suspendInterval (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The total time the virtual machine has been suspended since it was initially powered on. This time excludes the current period, if the virtual machine is currently suspended. This property is updated when the virtual machine resumes, and is reset to zero when the virtual machine is powered off. question (vim.vm.QuestionInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The current question, if any, that is blocking the virtual machine's execution. memoryOverhead (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The amount of memory resource (in bytes) that will be used by the virtual machine above its guest memory requirements. This value is set if and only if the virtual machine is registered on a host that supports memory resource allocation features. For powered off VMs, this is the minimum overhead required to power on the VM on the registered host. For powered on VMs, this is the current overhead reservation, a value which is almost always larger than the minimum overhead, and which grows with time. maxCpuUsage (int, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current upper-bound on CPU usage. The upper-bound is based on the host the virtual machine is current running on, as well as limits configured on the virtual machine itself or any parent resource pool. Valid while the virtual machine is running. maxMemoryUsage (int, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current upper-bound on memory usage. The upper-bound is based on memory configuration of the virtual machine, as well as limits configured on the virtual machine itself or any parent resource pool. Valid while the virtual machine is running. numMksConnections (int) ^^^^^^^^^^^^^^^^^^^^^^^ Number of active MKS connections to the virtual machine. recordReplayState (vim.VirtualMachine.RecordReplayState) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Record / replay state of the virtual machine. cleanPowerOff (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ For a powered off virtual machine, indicates whether the virtual machine's last shutdown was an orderly power off or not. Unset if the virtual machine is running or suspended. needSecondaryReason (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If set, indicates the reason the virtual machine needs a secondary. onlineStandby (bool) ^^^^^^^^^^^^^^^^^^^^ This property indicates whether the guest has gone into one of the s1, s2 or s3 standby modes. False indicates the guest is awake. minRequiredEVCModeKey (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ For a powered-on or suspended virtual machine in a cluster with Enhanced VMotion Compatibility (EVC) enabled, this identifies the least-featured EVC mode (among those for the appropriate CPU vendor) that could admit the virtual machine. This property will be unset if the virtual machine is powered off or is not in an EVC cluster. This property may be used as a general indicator of the CPU feature baseline currently in use by the virtual machine. However, the virtual machine may be suppressing some of the features present in the CPU feature baseline of the indicated mode, either explicitly (in the virtual machine's configured ``cpuFeatureMask``) or implicitly (in the default masks for the ``GuestOsDescriptor`` appropriate for the virtual machine's configured guest OS). consolidationNeeded (bool) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Whether any disk of the virtual machine requires consolidation. This can happen for example when a snapshot is deleted but its associated disk is not committed back to the base disk. offlineFeatureRequirement (vim.vm.FeatureRequirement, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ These requirements must have equivalent host capabilities ``featureCapability`` in order to power on. featureRequirement (vim.vm.FeatureRequirement, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ These requirements must have equivalent host capabilities ``featureCapability`` in order to power on, resume, or migrate to the host. featureMask (vim.host.FeatureMask, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The masks applied to an individual virtual machine as a result of its configuration. vFlashCacheAllocation (long, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Specifies the total allocated vFlash resource for the vFlash caches associated with VM's VMDKs when VM is powered on, in bytes. guest (vim.vm.GuestInfo) ------------------------ Information about VMware Tools and about the virtual machine from the perspective of VMware Tools. Information about the guest operating system is available in VirtualCenter. Guest operating system information reflects the last known state of the virtual machine. For powered on machines, this is current information. For powered off machines, this is the last recorded state before the virtual machine was powered off. toolsStatus (vim.vm.GuestInfo.ToolsStatus, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current status of VMware Tools in the guest operating system, if known. toolsVersionStatus (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current version status of VMware Tools in the guest operating system, if known. toolsVersionStatus2 (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current version status of VMware Tools in the guest operating system, if known. toolsRunningStatus (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current running status of VMware Tools in the guest operating system, if known. toolsVersion (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current version of VMware Tools, if known. guestId (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^ Guest operating system identifier (short name), if known. guestFamily (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest operating system family, if known. guestFullName (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See :ref:`guest_full_name`. hostName (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^ Hostname of the guest operating system, if known. ipAddress (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^ Primary IP address assigned to the guest operating system, if known. net (vim.vm.GuestInfo.NicInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest information about network adapters, if known. ipStack (vim.vm.GuestInfo.StackInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest information about IP networking stack, if known. disk (vim.vm.GuestInfo.DiskInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest information about disks. You can obtain Linux guest disk information for the following file system types only: Ext2, Ext3, Ext4, ReiserFS, ZFS, NTFS, VFAT, UFS, PCFS, HFS, and MS-DOS. screen (vim.vm.GuestInfo.ScreenInfo, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest screen resolution info, if known. guestState (str) ^^^^^^^^^^^^^^^^ Operation mode of guest operating system. appHeartbeatStatus (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Application heartbeat status. appState (str, optional) ^^^^^^^^^^^^^^^^^^^^^^^^ Application state. If vSphere HA is enabled and the vm is configured for Application Monitoring and this field's value is ``appStateNeedReset`` then HA will attempt immediately reset the virtual machine. There are some system conditions which may delay the immediate reset. The immediate reset will be performed as soon as allowed by vSphere HA and ESX. If during these conditions the value is changed to ``appStateOk`` the reset will be cancelled. guestOperationsReady (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest Operations availability. If true, the virtual machine is ready to process guest operations. interactiveGuestOperationsReady (bool, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Interactive Guest Operations availability. If true, the virtual machine is ready to process guest operations as the user interacting with the guest desktop. generationInfo (vim.vm.GuestInfo.NamespaceGenerationInfo, privilege: VirtualMachine.Namespace.EventNotify, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A list of namespaces and their corresponding generation numbers. Only namespaces with non-zero ``maxSizeEventsFromGuest`` are guaranteed to be present here. summary (vim.vm.Summary) ------------------------ Basic information about the virtual machine. vm (vim.VirtualMachine, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Reference to the virtual machine managed object. runtime (vim.vm.RuntimeInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Runtime and state information of a running virtual machine. Most of this information is also available when a virtual machine is powered off. In that case, it contains information from the last run, if available. guest (vim.vm.Summary.GuestSummary, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guest operating system and VMware Tools information. config (vim.vm.Summary.ConfigSummary) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Basic configuration information about the virtual machine. This information is not available when the virtual machine is unavailable, for instance, when it is being created or deleted. storage (vim.vm.Summary.StorageSummary, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Storage information of the virtual machine. quickStats (vim.vm.Summary.QuickStats) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A set of statistics that are typically updated with near real-time regularity. overallStatus (vim.ManagedEntity.Status) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Overall alarm status on this node. customValue (vim.CustomFieldsManager.Value, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Custom field values. datastore (vim.Datastore) ------------------------- A collection of references to the subset of datastore objects in the datacenter that is used by the virtual machine. info (vim.Datastore.Info) ^^^^^^^^^^^^^^^^^^^^^^^^^ Specific information about the datastore. summary (vim.Datastore.Summary) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Global properties of the datastore. host (vim.Datastore.HostMount) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Hosts attached to this datastore. vm (vim.VirtualMachine) ^^^^^^^^^^^^^^^^^^^^^^^ Virtual machines stored on this datastore. browser (vim.host.DatastoreBrowser) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DatastoreBrowser used to browse this datastore. capability (vim.Datastore.Capability) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Capabilities of this datastore. iormConfiguration (vim.StorageResourceManager.IORMConfigInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Configuration of storage I/O resource management for the datastore. Currently VMware only support storage I/O resource management on VMFS volumes of a datastore. This configuration may not be available if the datastore is not accessible from any host, or if the datastore does not have VMFS volume. network (vim.Network) --------------------- A collection of references to the subset of network objects in the datacenter that is used by the virtual machine. name (str) ^^^^^^^^^^ Name of this network. summary (vim.Network.Summary) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Properties of a network. host (vim.HostSystem) ^^^^^^^^^^^^^^^^^^^^^ Hosts attached to this network. vm (vim.VirtualMachine) ^^^^^^^^^^^^^^^^^^^^^^^ Virtual machines using this network. snapshot (vim.vm.SnapshotInfo) ------------------------------- Current snapshot and tree. The property is valid if snapshots have been created for the virtual machine. currentSnapshot (vim.vm.Snapshot, optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Current snapshot of the virtual machine. This property is set by calling ``Snapshot.revert`` or ``VirtualMachine.createSnapshot``. This property will be empty when the working snapshot is at the root of the snapshot tree. rootSnapshotList (vim.vm.SnapshotTree) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data for the entire set of snapshots for one virtual machine. rootSnapshot (vim.vm.Snapshot) ------------------------------ The roots of all snapshot trees for the virtual machine. config (vim.vm.ConfigInfo) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Information about the configuration of the virtual machine when this snapshot was taken. The datastore paths for the virtual machine disks point to the head of the disk chain that represents the disk at this given snapshot. childSnapshot (vim.vm.Snapshot) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ All snapshots for which this snapshot is the parent. guestHeartbeatStatus (vim.ManagedEntity.Status) ----------------------------------------------- The guest heartbeat. .. seealso:: `pyVmomi `_ The GitHub Page of pyVmomi `pyVmomi Issue Tracker `_ The issue tracker for the pyVmomi project rst/scenario_guides/guide_vmware.rst The GitHub Page of vSphere Automation SDK for Python `vSphere Automation SDK Issue Tracker `_ The issue tracker for vSphere Automation SDK for Python :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_vault` Using Vault in playbooks ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_module_reference.rst0000644000000000000000000000030600000000000033417 0ustar00rootroot00000000000000:orphan: .. _vmware_ansible_module_index: *************************** Ansible VMware Module Guide *************************** This will be a listing similar to the module index in our core docs. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_requirements.rst0000644000000000000000000000713200000000000032643 0ustar00rootroot00000000000000.. _vmware_requirements: ******************** VMware Prerequisites ******************** .. contents:: :local: Installing SSL Certificates =========================== All vCenter and ESXi servers require SSL encryption on all connections to enforce secure communication. You must enable SSL encryption for Ansible by installing the server's SSL certificates on your Ansible control node or delegate node. If the SSL certificate of your vCenter or ESXi server is not correctly installed on your Ansible control node, you will see the following warning when using Ansible VMware modules: ``Unable to connect to vCenter or ESXi API at xx.xx.xx.xx on TCP/443: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)`` To install the SSL certificate for your VMware server, and run your Ansible VMware modules in encrypted mode, please follow the instructions for the server you are running with VMware. Installing vCenter SSL certificates for Ansible ----------------------------------------------- * From any web browser, go to the base URL of the vCenter Server without port number like ``https://vcenter-domain.example.com`` * Click the "Download trusted root CA certificates" link at the bottom of the grey box on the right and download the file. * Change the extension of the file to .zip. The file is a ZIP file of all root certificates and all CRLs. * Extract the contents of the zip file. The extracted directory contains a ``.certs`` directory that contains two types of files. Files with a number as the extension (.0, .1, and so on) are root certificates. * Install the certificate files are trusted certificates by the process that is appropriate for your operating system. Installing ESXi SSL certificates for Ansible -------------------------------------------- * Enable SSH Service on ESXi either by using Ansible VMware module `vmware_host_service_manager `_ or manually using vSphere Web interface. * SSH to ESXi server using administrative credentials, and navigate to directory ``/etc/vmware/ssl`` * Secure copy (SCP) ``rui.crt`` located in ``/etc/vmware/ssl`` directory to Ansible control node. * Install the certificate file by the process that is appropriate for your operating system. Using custom path for SSL certificates -------------------------------------- If you need to use a custom path for SSL certificates, you can set the ``REQUESTS_CA_BUNDLE`` environment variable in your playbook. For example, if ``/var/vmware/certs/vcenter1.crt`` is the SSL certificate for your vCenter Server, you can use the :ref:`environment ` keyword to pass it to the modules: .. code-block:: yaml - name: Gather all tags from vCenter community.vmware.vmware_tag_info: validate_certs: True hostname: '{{ vcenter_hostname }}' username: '{{ vcenter_username }}' password: '{{ vcenter_password }}' environment: REQUESTS_CA_BUNDLE: /var/vmware/certs/vcenter1.crt There is a `known issue `_ in ``requests`` library (version 2) which you may want to consider when using this environment variable. Basically, setting ``REQUESTS_CA_BUNDLE`` environment variable on managed nodes overrides the ``validate_certs`` value. This may result in unexpected behavior while running the playbook. Please see `community.vmware issue 601 `_ and `vmware issue 254 `_ for more information. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.523556 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_scenarios.rst0000644000000000000000000000067200000000000032110 0ustar00rootroot00000000000000.. _vmware_scenarios: **************************** Ansible for VMware Scenarios **************************** These scenarios teach you how to accomplish common VMware tasks using Ansible. To get started, please select the task you want to accomplish. .. toctree:: :maxdepth: 1 scenario_clone_template scenario_rename_vm scenario_remove_vm scenario_find_vm_folder scenario_vmware_http scenario_vmware_tools_connection ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/scenario_guides/vmware_scenarios/vmware_troubleshooting.rst0000644000000000000000000000700100000000000033342 0ustar00rootroot00000000000000.. _vmware_troubleshooting: ********************************** Troubleshooting Ansible for VMware ********************************** .. contents:: :local: This section lists things that can go wrong and possible ways to fix them. Debugging Ansible for VMware ============================ When debugging or creating a new issue, you will need information about your VMware infrastructure. You can get this information using `govc `_, For example: .. code-block:: bash $ export GOVC_USERNAME=ESXI_OR_VCENTER_USERNAME $ export GOVC_PASSWORD=ESXI_OR_VCENTER_PASSWORD $ export GOVC_URL=https://ESXI_OR_VCENTER_HOSTNAME:443 $ govc find / Known issues with Ansible for VMware ==================================== Network settings with vmware_guest in Ubuntu 18.04 -------------------------------------------------- Setting the network with ``vmware_guest`` in Ubuntu 18.04 is known to be broken, due to missing support for ``netplan`` in the ``open-vm-tools``. This issue is tracked via: * https://github.com/vmware/open-vm-tools/issues/240 * https://github.com/ansible/ansible/issues/41133 Potential Workarounds ^^^^^^^^^^^^^^^^^^^^^ There are several workarounds for this issue. 1) Modify the Ubuntu 18.04 images and installing ``ifupdown`` in them via ``sudo apt install ifupdown``. If so you need to remove ``netplan`` via ``sudo apt remove netplan.io`` and you need stop ``systemd-networkd`` via ``sudo systemctl disable systemctl-networkd``. 2) Generate the ``systemd-networkd`` files with a task in your VMware Ansible role: .. code-block:: yaml - name: make sure cache directory exists file: path="{{ inventory_dir }}/cache" state=directory delegate_to: localhost - name: generate network templates template: src=network.j2 dest="{{ inventory_dir }}/cache/{{ inventory_hostname }}.network" delegate_to: localhost - name: copy generated files to vm vmware_guest_file_operation: hostname: "{{ vmware_general.hostname }}" username: "{{ vmware_username }}" password: "{{ vmware_password }}" datacenter: "{{ vmware_general.datacenter }}" validate_certs: "{{ vmware_general.validate_certs }}" vm_id: "{{ inventory_hostname }}" vm_username: root vm_password: "{{ template_password }}" copy: src: "{{ inventory_dir }}/cache/{{ inventory_hostname }}.network" dest: "/etc/systemd/network/ens160.network" overwrite: False delegate_to: localhost - name: restart systemd-networkd vmware_vm_shell: hostname: "{{ vmware_general.hostname }}" username: "{{ vmware_username }}" password: "{{ vmware_password }}" datacenter: "{{ vmware_general.datacenter }}" folder: /vm vm_id: "{{ inventory_hostname}}" vm_username: root vm_password: "{{ template_password }}" vm_shell: /bin/systemctl vm_shell_args: " restart systemd-networkd" delegate_to: localhost - name: restart systemd-resolved vmware_vm_shell: hostname: "{{ vmware_general.hostname }}" username: "{{ vmware_username }}" password: "{{ vmware_password }}" datacenter: "{{ vmware_general.datacenter }}" folder: /vm vm_id: "{{ inventory_hostname}}" vm_username: root vm_password: "{{ template_password }}" vm_shell: /bin/systemctl vm_shell_args: " restart systemd-resolved" delegate_to: localhost 3) Wait for ``netplan`` support in ``open-vm-tools`` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.965559 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/0000755000000000000000000000000000000000000022463 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/basic_concepts.txt0000644000000000000000000000412700000000000026207 0ustar00rootroot00000000000000Control node ============ Any machine with Ansible installed. You can run Ansible commands and playbooks by invoking the ``ansible`` or ``ansible-playbook`` command from any control node. You can use any computer that has a Python installation as a control node - laptops, shared desktops, and servers can all run Ansible. However, you cannot use a Windows machine as a control node. You can have multiple control nodes. Managed nodes ============= The network devices (and/or servers) you manage with Ansible. Managed nodes are also sometimes called "hosts". Ansible is not installed on managed nodes. Inventory ========= A list of managed nodes. An inventory file is also sometimes called a "hostfile". Your inventory can specify information like IP address for each managed node. An inventory can also organize managed nodes, creating and nesting groups for easier scaling. To learn more about inventory, see :ref:`the Working with Inventory` section. Collections =========== Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. You can install and use collections through `Ansible Galaxy `_. To learn more about collections, see :ref:`collections`. Modules ======= The units of code Ansible executes. Each module has a particular use, from administering users on a specific type of database to managing VLAN interfaces on a specific type of network device. You can invoke a single module with a task, or invoke several different modules in a playbook. Starting in Ansible 2.10, modules are grouped in collections. For an idea of how many collections Ansible includes, take a look at the :ref:`list_of_collections`. Tasks ===== The units of action in Ansible. You can execute a single task once with an ad hoc command. Playbooks ========= Ordered lists of tasks, saved so you can run those tasks in that order repeatedly. Playbooks can include variables as well as tasks. Playbooks are written in YAML and are easy to read, write, share and understand. To learn more about playbooks, see :ref:`about_playbooks`. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/download_tarball_collections.txt0000644000000000000000000000032400000000000031131 0ustar00rootroot00000000000000 To download the collection tarball from Galaxy for offline use: #. Navigate to the collection page. #. Click on :guilabel:`Download tarball`. You may also need to manually download any dependent collections. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/galaxy_server_list.txt0000644000000000000000000001247300000000000027141 0ustar00rootroot00000000000000 By default, ``ansible-galaxy`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`). You can use either option below to configure ``ansible-galaxy collection`` to use other servers (such as Red Hat Automation Hub or a custom Galaxy server): * Set the server list in the :ref:`galaxy_server_list` configuration option in :ref:`ansible_configuration_settings_locations`. * Use the ``--server`` command line argument to limit to an individual server. To configure a Galaxy server list in ``ansible.cfg``: #. Add the ``server_list`` option under the ``[galaxy]`` section to one or more server names. #. Create a new section for each server name. #. Set the ``url`` option for each server name. #. Optionally, set the API token for each server name. Go to https://galaxy.ansible.com/me/preferences and click :guilabel:`Show API key`. .. note:: The ``url`` option for each server name must end with a forward slash ``/``. If you do not set the API token in your Galaxy server list, use the ``--api-key`` argument to pass in the token to the ``ansible-galaxy collection publish`` command. For Automation Hub, you additionally need to: #. Set the ``auth_url`` option for each server name. #. Set the API token for each server name. Go to https://cloud.redhat.com/ansible/automation-hub/token/ and click ::guilabel:`Get API token` from the version dropdown to copy your API token. The following example shows how to configure multiple servers: .. code-block:: ini [galaxy] server_list = automation_hub, my_org_hub, release_galaxy, test_galaxy, my_galaxy_ng [galaxy_server.automation_hub] url=https://cloud.redhat.com/api/automation-hub/ auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token token=my_ah_token [galaxy_server.my_org_hub] url=https://automation.my_org/ username=my_user password=my_pass [galaxy_server.release_galaxy] url=https://galaxy.ansible.com/ token=my_token [galaxy_server.test_galaxy] url=https://galaxy-dev.ansible.com/ token=my_test_token [galaxy_server.my_galaxy_ng] url=http://my_galaxy_ng:8000/api/automation-hub/ auth_url=http://my_keycloak:8080/auth/realms/myco/protocol/openid-connect/token client_id=galaxy-ng token=my_keycloak_access_token .. note:: You can use the ``--server`` command line argument to select an explicit Galaxy server in the ``server_list`` and the value of this argument should match the name of the server. To use a server not in the server list, set the value to the URL to access that server (all servers in the server list will be ignored). Also you cannot use the ``--api-key`` argument for any of the predefined servers. You can only use the ``api_key`` argument if you did not define a server list or if you specify a URL in the ``--server`` argument. **Galaxy server list configuration options** The :ref:`galaxy_server_list` option is a list of server identifiers in a prioritized order. When searching for a collection, the install process will search in that order, for example, ``automation_hub`` first, then ``my_org_hub``, ``release_galaxy``, and finally ``test_galaxy`` until the collection is found. The actual Galaxy instance is then defined under the section ``[galaxy_server.{{ id }}]`` where ``{{ id }}`` is the server identifier defined in the list. This section can then define the following keys: * ``url``: The URL of the Galaxy instance to connect to. Required. * ``token``: An API token key to use for authentication against the Galaxy instance. Mutually exclusive with ``username``. * ``username``: The username to use for basic authentication against the Galaxy instance. Mutually exclusive with ``token``. * ``password``: The password to use, in conjunction with ``username``, for basic authentication. * ``auth_url``: The URL of a Keycloak server 'token_endpoint' if using SSO authentication (for example, Automation Hub). Mutually exclusive with ``username``. Requires ``token``. * ``validate_certs``: Whether or not to verify TLS certificates for the Galaxy server. This defaults to True unless the ``--ignore-certs`` option is provided or ``GALAXY_IGNORE_CERTS`` is configured to True. * ``client_id``: The Keycloak token's client_id to use for authentication. Requires ``auth_url`` and ``token``. The default ``client_id`` is cloud-services to work with Red Hat SSO. As well as defining these server options in the ``ansible.cfg`` file, you can also define them as environment variables. The environment variable is in the form ``ANSIBLE_GALAXY_SERVER_{{ id }}_{{ key }}`` where ``{{ id }}`` is the upper case form of the server identifier and ``{{ key }}`` is the key to define. For example I can define ``token`` for ``release_galaxy`` by setting ``ANSIBLE_GALAXY_SERVER_RELEASE_GALAXY_TOKEN=secret_token``. For operations that use only one Galaxy server (for example, the ``publish``, ``info``, or ``install`` commands). the ``ansible-galaxy collection`` command uses the first entry in the ``server_list``, unless you pass in an explicit server with the ``--server`` argument. .. note:: Once a collection is found, any of its requirements are only searched within the same Galaxy instance as the parent collection. The install process will not search for a collection requirement in a different Galaxy instance. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/installing_collections.txt0000644000000000000000000000506000000000000027767 0ustar00rootroot00000000000000 By default, ``ansible-galaxy collection install`` uses https://galaxy.ansible.com as the Galaxy server (as listed in the :file:`ansible.cfg` file under :ref:`galaxy_server`). You do not need any further configuration. See :ref:`Configuring the ansible-galaxy client ` if you are using any other Galaxy server, such as Red Hat Automation Hub. To install a collection hosted in Galaxy: .. code-block:: bash ansible-galaxy collection install my_namespace.my_collection To upgrade a collection to the latest available version from the Galaxy server you can use the ``--upgrade`` option: .. code-block:: bash ansible-galaxy collection install my_namespace.my_collection --upgrade You can also directly use the tarball from your build: .. code-block:: bash ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections You can build and install a collection from a local source directory. The ``ansible-galaxy`` utility builds the collection using the ``MANIFEST.json`` or ``galaxy.yml`` metadata in the directory. .. code-block:: bash ansible-galaxy collection install /path/to/collection -p ./collections You can also install multiple collections in a namespace directory. .. code-block:: text ns/ ├── collection1/ │   ├── MANIFEST.json │   └── plugins/ └── collection2/ ├── galaxy.yml └── plugins/ .. code-block:: bash ansible-galaxy collection install /path/to/ns -p ./collections .. note:: The install command automatically appends the path ``ansible_collections`` to the one specified with the ``-p`` option unless the parent directory is already in a folder called ``ansible_collections``. When using the ``-p`` option to specify the install path, use one of the values configured in :ref:`COLLECTIONS_PATHS`, as this is where Ansible itself will expect to find collections. If you don't specify a path, ``ansible-galaxy collection install`` installs the collection to the first path defined in :ref:`COLLECTIONS_PATHS`, which by default is ``~/.ansible/collections`` You can also keep a collection adjacent to the current playbook, under a ``collections/ansible_collections/`` directory structure. .. code-block:: text ./ ├── play.yml ├── collections/ │ └── ansible_collections/ │ └── my_namespace/ │ └── my_collection/ See :ref:`collection_structure` for details on the collection directory structure. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/installing_collections_git_repo.txt0000644000000000000000000001231300000000000031656 0ustar00rootroot00000000000000You can install a collection from a git repository instead of from Galaxy or Automation Hub. As a developer, installing from a git repository lets you review your collection before you create the tarball and publish the collection. As a user, installing from a git repository lets you use collections or versions that are not in Galaxy or Automation Hub yet. The repository must contain a ``galaxy.yml`` or ``MANIFEST.json`` file. This file provides metadata such as the version number and namespace of the collection. Installing a collection from a git repository at the command line ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To install a collection from a git repository at the command line, use the URI of the repository instead of a collection name or path to a ``tar.gz`` file. Prefix the URI with ``git+`` (or with ``git@`` to use a private repository with ssh authentication). You can specify a branch, commit, or tag using the comma-separated `git commit-ish `_ syntax. For example: .. code-block:: bash # Install a collection in a repository using the latest commit on the branch 'devel' ansible-galaxy collection install git+https://github.com/organization/repo_name.git,devel # Install a collection from a private github repository ansible-galaxy collection install git@github.com:organization/repo_name.git # Install a collection from a local git repository ansible-galaxy collection install git+file:///home/user/path/to/repo_name.git .. warning:: Embedding credentials into a git URI is not secure. Use safe authentication options to prevent your credentials from being exposed in logs or elsewhere. * Use `SSH `_ authentication * Use `netrc `_ authentication * Use `http.extraHeader `_ in your git configuration * Use `url..pushInsteadOf `_ in your git configuration Specifying the collection location within the git repository ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When you install a collection from a git repository, Ansible uses the collection ``galaxy.yml`` or ``MANIFEST.json`` metadata file to build the collection. By default, Ansible searches two paths for collection ``galaxy.yml`` or ``MANIFEST.json`` metadata files: * The top level of the repository. * Each directory in the repository path (one level deep). If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in the top level of the repository, Ansible uses the collection metadata in that file to install an individual collection. .. code-block:: text ├── galaxy.yml ├── plugins/ │   ├── lookup/ │   ├── modules/ │   └── module_utils/ └─── README.md If a ``galaxy.yml`` or ``MANIFEST.json`` file exists in one or more directories in the repository path (one level deep), Ansible installs each directory with a metadata file as a collection. For example, Ansible installs both collection1 and collection2 from this repository structure by default: .. code-block:: text ├── collection1 │   ├── docs/ │   ├── galaxy.yml │   └── plugins/ │    ├── inventory/ │   └── modules/ └── collection2    ├── docs/    ├── galaxy.yml    ├── plugins/   |   ├── filter/    | └── modules/    └── roles/ If you have a different repository structure or only want to install a subset of collections, you can add a fragment to the end of your URI (before the optional comma-separated version) to indicate the location of the metadata file or files. The path should be a directory, not the metadata file itself. For example, to install only collection2 from the example repository with two collections: .. code-block:: text ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/collection2/ In some repositories, the main directory corresponds to the namespace: .. code-block:: text namespace/ ├── collectionA/ | ├── docs/ | ├── galaxy.yml | ├── plugins/ | │   ├── README.md | │   └── modules/ | ├── README.md | └── roles/ └── collectionB/ ├── docs/ ├── galaxy.yml ├── plugins/ │   ├── connection/ │   └── modules/ ├── README.md └── roles/ You can install all collections in this repository, or install one collection from a specific commit: .. code-block:: bash # Install all collections in the namespace ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/namespace/ # Install an individual collection using a specific commit ansible-galaxy collection install git+https://github.com/organization/repo_name.git#/namespace/collectionA/,7b60ddc245bc416b72d8ea6ed7b799885110f5e5 ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/installing_multiple_collections.txt0000644000000000000000000000443200000000000031704 0ustar00rootroot00000000000000 You can set up a ``requirements.yml`` file to install multiple collections in one command. This file is a YAML file in the format: .. code-block:: yaml+jinja --- collections: # With just the collection name - my_namespace.my_collection # With the collection name, version, and source options - name: my_namespace.my_other_collection version: 'version range identifiers (default: ``*``)' source: 'The Galaxy URL to pull the collection from (default: ``--api-server`` from cmdline)' You can specify four keys for each collection entry: * ``name`` * ``version`` * ``source`` * ``type`` The ``version`` key uses the same range identifier format documented in :ref:`collections_older_version`. The ``type`` key can be set to ``galaxy``, ``url``, ``file``, and ``git``. If ``type`` is omitted, the ``name`` key is used to implicitly determine the source of the collection. When you install a collection with ``type: git``, the ``version`` key can refer to a branch or to a `git commit-ish `_ object (commit or tag). For example: .. code-block:: yaml collections: - name: https://github.com/organization/repo_name.git type: git version: devel You can also add roles to a ``requirements.yml`` file, under the ``roles`` key. The values follow the same format as a requirements file used in older Ansible releases. .. code-block:: yaml --- roles: # Install a role from Ansible Galaxy. - name: geerlingguy.java version: 1.9.6 collections: # Install a collection from Ansible Galaxy. - name: geerlingguy.php_roles version: 0.9.3 source: https://galaxy.ansible.com To install both roles and collections at the same time with one command, run the following: .. code-block:: bash $ ansible-galaxy install -r requirements.yml Running ``ansible-galaxy collection install -r`` or ``ansible-galaxy role install -r`` will only install collections, or roles respectively. .. note:: Installing both roles and collections from the same requirements file will not work when specifying a custom collection or role install path. In this scenario the collections will be skipped and the command will process each like ``ansible-galaxy role install`` would. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/shared_snippets/installing_older_collection.txt0000644000000000000000000000263700000000000031000 0ustar00rootroot00000000000000 You can only have one version of a collection installed at a time. By default ``ansible-galaxy`` installs the latest available version. If you want to install a specific version, you can add a version range identifier. For example, to install the 1.0.0-beta.1 version of the collection: .. code-block:: bash ansible-galaxy collection install my_namespace.my_collection:==1.0.0-beta.1 You can specify multiple range identifiers separated by ``,``. Use single quotes so the shell passes the entire command, including ``>``, ``!``, and other operators, along. For example, to install the most recent version that is greater than or equal to 1.0.0 and less than 2.0.0: .. code-block:: bash ansible-galaxy collection install 'my_namespace.my_collection:>=1.0.0,<2.0.0' Ansible will always install the most recent version that meets the range identifiers you specify. You can use the following range identifiers: * ``*``: The most recent version. This is the default. * ``!=``: Not equal to the version specified. * ``==``: Exactly the version specified. * ``>=``: Greater than or equal to the version specified. * ``>``: Greater than the version specified. * ``<=``: Less than or equal to the version specified. * ``<``: Less than the version specified. .. note:: By default ``ansible-galaxy`` ignores pre-release versions. To install a pre-release version, you must use the ``==`` range identifier to require it explicitly. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/docsite/rst/user_guide/0000755000000000000000000000000000000000000021423 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5245562 ansible-core-2.12.0/docs/docsite/rst/user_guide/basic_concepts.rst0000644000000000000000000000055500000000000025141 0ustar00rootroot00000000000000.. _basic_concepts: **************** Ansible concepts **************** These concepts are common to all uses of Ansible. You need to understand them to use Ansible for any kind of automation. This basic introduction provides the background you need to follow the rest of the User Guide. .. contents:: :local: .. include:: /shared_snippets/basic_concepts.txt ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/become.rst0000644000000000000000000010167700000000000023423 0ustar00rootroot00000000000000.. _become: ****************************************** Understanding privilege escalation: become ****************************************** Ansible uses existing privilege escalation systems to execute tasks with root privileges or with another user's permissions. Because this feature allows you to 'become' another user, different from the user that logged into the machine (remote user), we call it ``become``. The ``become`` keyword uses existing privilege escalation tools like `sudo`, `su`, `pfexec`, `doas`, `pbrun`, `dzdo`, `ksu`, `runas`, `machinectl` and others. .. contents:: :local: Using become ============ You can control the use of ``become`` with play or task directives, connection variables, or at the command line. If you set privilege escalation properties in multiple ways, review the :ref:`general precedence rules` to understand which settings will be used. A full list of all become plugins that are included in Ansible can be found in the :ref:`become_plugin_list`. Become directives ----------------- You can set the directives that control ``become`` at the play or task level. You can override these by setting connection variables, which often differ from one host to another. These variables and directives are independent. For example, setting ``become_user`` does not set ``become``. become set to ``yes`` to activate privilege escalation. become_user set to user with desired privileges — the user you `become`, NOT the user you login as. Does NOT imply ``become: yes``, to allow it to be set at host level. Default value is ``root``. become_method (at play or task level) overrides the default method set in ansible.cfg, set to use any of the :ref:`become_plugins`. become_flags (at play or task level) permit the use of specific flags for the tasks or role. One common use is to change the user to nobody when the shell is set to nologin. Added in Ansible 2.2. For example, to manage a system service (which requires ``root`` privileges) when connected as a non-``root`` user, you can use the default value of ``become_user`` (``root``): .. code-block:: yaml - name: Ensure the httpd service is running service: name: httpd state: started become: yes To run a command as the ``apache`` user: .. code-block:: yaml - name: Run a command as the apache user command: somecommand become: yes become_user: apache To do something as the ``nobody`` user when the shell is nologin: .. code-block:: yaml - name: Run a command as nobody command: somecommand become: yes become_method: su become_user: nobody become_flags: '-s /bin/sh' To specify a password for sudo, run ``ansible-playbook`` with ``--ask-become-pass`` (``-K`` for short). If you run a playbook utilizing ``become`` and the playbook seems to hang, most likely it is stuck at the privilege escalation prompt. Stop it with `CTRL-c`, then execute the playbook with ``-K`` and the appropriate password. Become connection variables --------------------------- You can define different ``become`` options for each managed node or group. You can define these variables in inventory or use them as normal variables. ansible_become overrides the ``become`` directive, decides if privilege escalation is used or not. ansible_become_method which privilege escalation method should be used ansible_become_user set the user you become through privilege escalation; does not imply ``ansible_become: yes`` ansible_become_password set the privilege escalation password. See :ref:`playbooks_vault` for details on how to avoid having secrets in plain text ansible_common_remote_group determines if Ansible should try to ``chgrp`` its temporary files to a group if ``setfacl`` and ``chown`` both fail. See `Risks of becoming an unprivileged user`_ for more information. Added in version 2.10. For example, if you want to run all tasks as ``root`` on a server named ``webserver``, but you can only connect as the ``manager`` user, you could use an inventory entry like this: .. code-block:: text webserver ansible_user=manager ansible_become=yes .. note:: The variables defined above are generic for all become plugins but plugin specific ones can also be set instead. Please see the documentation for each plugin for a list of all options the plugin has and how they can be defined. A full list of become plugins in Ansible can be found at :ref:`become_plugins`. Become command-line options --------------------------- --ask-become-pass, -K ask for privilege escalation password; does not imply become will be used. Note that this password will be used for all hosts. --become, -b run operations with become (no password implied) --become-method=BECOME_METHOD privilege escalation method to use (default=sudo), valid choices: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ] --become-user=BECOME_USER run operations as this user (default=root), does not imply --become/-b Risks and limitations of become =============================== Although privilege escalation is mostly intuitive, there are a few limitations on how it works. Users should be aware of these to avoid surprises. Risks of becoming an unprivileged user -------------------------------------- Ansible modules are executed on the remote machine by first substituting the parameters into the module file, then copying the file to the remote machine, and finally executing it there. Everything is fine if the module file is executed without using ``become``, when the ``become_user`` is root, or when the connection to the remote machine is made as root. In these cases Ansible creates the module file with permissions that only allow reading by the user and root, or only allow reading by the unprivileged user being switched to. However, when both the connection user and the ``become_user`` are unprivileged, the module file is written as the user that Ansible connects as (the ``remote_user``), but the file needs to be readable by the user Ansible is set to ``become``. The details of how Ansible solves this can vary based on platform. However, on POSIX systems, Ansible solves this problem in the following way: First, if :command:`setfacl` is installed and available in the remote ``PATH``, and the temporary directory on the remote host is mounted with POSIX.1e filesystem ACL support, Ansible will use POSIX ACLs to share the module file with the second unprivileged user. Next, if POSIX ACLs are **not** available or :command:`setfacl` could not be run, Ansible will attempt to change ownership of the module file using :command:`chown` for systems which support doing so as an unprivileged user. New in Ansible 2.11, at this point, Ansible will try :command:`chmod +a` which is a macOS-specific way of setting ACLs on files. New in Ansible 2.10, if all of the above fails, Ansible will then check the value of the configuration setting ``ansible_common_remote_group``. Many systems will allow a given user to change the group ownership of a file to a group the user is in. As a result, if the second unprivileged user (the ``become_user``) has a UNIX group in common with the user Ansible is connected as (the ``remote_user``), and if ``ansible_common_remote_group`` is defined to be that group, Ansible can try to change the group ownership of the module file to that group by using :command:`chgrp`, thereby likely making it readable to the ``become_user``. At this point, if ``ansible_common_remote_group`` was defined and a :command:`chgrp` was attempted and returned successfully, Ansible assumes (but, importantly, does not check) that the new group ownership is enough and does not fall back further. That is, Ansible **does not check** that the ``become_user`` does in fact share a group with the ``remote_user``; so long as the command exits successfully, Ansible considers the result successful and does not proceed to check ``allow_world_readable_tmpfiles`` per below. If ``ansible_common_remote_group`` is **not** set and the chown above it failed, or if ``ansible_common_remote_group`` *is* set but the :command:`chgrp` (or following group-permissions :command:`chmod`) returned a non-successful exit code, Ansible will lastly check the value of ``allow_world_readable_tmpfiles``. If this is set, Ansible will place the module file in a world-readable temporary directory, with world-readable permissions to allow the ``become_user`` (and incidentally any other user on the system) to read the contents of the file. **If any of the parameters passed to the module are sensitive in nature, and you do not trust the remote machines, then this is a potential security risk.** Once the module is done executing, Ansible deletes the temporary file. Several ways exist to avoid the above logic flow entirely: * Use `pipelining`. When pipelining is enabled, Ansible does not save the module to a temporary file on the client. Instead it pipes the module to the remote python interpreter's stdin. Pipelining does not work for python modules involving file transfer (for example: :ref:`copy `, :ref:`fetch `, :ref:`template `), or for non-python modules. * Avoid becoming an unprivileged user. Temporary files are protected by UNIX file permissions when you ``become`` root or do not use ``become``. In Ansible 2.1 and above, UNIX file permissions are also secure if you make the connection to the managed machine as root and then use ``become`` to access an unprivileged account. .. warning:: Although the Solaris ZFS filesystem has filesystem ACLs, the ACLs are not POSIX.1e filesystem acls (they are NFSv4 ACLs instead). Ansible cannot use these ACLs to manage its temp file permissions so you may have to resort to ``allow_world_readable_tmpfiles`` if the remote machines use ZFS. .. versionchanged:: 2.1 Ansible makes it hard to unknowingly use ``become`` insecurely. Starting in Ansible 2.1, Ansible defaults to issuing an error if it cannot execute securely with ``become``. If you cannot use pipelining or POSIX ACLs, must connect as an unprivileged user, must use ``become`` to execute as a different unprivileged user, and decide that your managed nodes are secure enough for the modules you want to run there to be world readable, you can turn on ``allow_world_readable_tmpfiles`` in the :file:`ansible.cfg` file. Setting ``allow_world_readable_tmpfiles`` will change this from an error into a warning and allow the task to run as it did prior to 2.1. .. versionchanged:: 2.10 Ansible 2.10 introduces the above-mentioned ``ansible_common_remote_group`` fallback. As mentioned above, if enabled, it is used when ``remote_user`` and ``become_user`` are both unprivileged users. Refer to the text above for details on when this fallback happens. .. warning:: As mentioned above, if ``ansible_common_remote_group`` and ``allow_world_readable_tmpfiles`` are both enabled, it is unlikely that the world-readable fallback will ever trigger, and yet Ansible might still be unable to access the module file. This is because after the group ownership change is successful, Ansible does not fall back any further, and also does not do any check to ensure that the ``become_user`` is actually a member of the "common group". This is a design decision made by the fact that doing such a check would require another round-trip connection to the remote machine, which is a time-expensive operation. Ansible does, however, emit a warning in this case. Not supported by all connection plugins --------------------------------------- Privilege escalation methods must also be supported by the connection plugin used. Most connection plugins will warn if they do not support become. Some will just ignore it as they always run as root (jail, chroot, and so on). Only one method may be enabled per host --------------------------------------- Methods cannot be chained. You cannot use ``sudo /bin/su -`` to become a user, you need to have privileges to run the command as that user in sudo or be able to su directly to it (the same for pbrun, pfexec or other supported methods). Privilege escalation must be general ------------------------------------ You cannot limit privilege escalation permissions to certain commands. Ansible does not always use a specific command to do something but runs modules (code) from a temporary file name which changes every time. If you have '/sbin/service' or '/bin/chmod' as the allowed commands this will fail with ansible as those paths won't match with the temporary file that Ansible creates to run the module. If you have security rules that constrain your sudo/pbrun/doas environment to running specific command paths only, use Ansible from a special account that does not have this constraint, or use AWX or the :ref:`ansible_platform` to manage indirect access to SSH credentials. May not access environment variables populated by pamd_systemd -------------------------------------------------------------- For most Linux distributions using ``systemd`` as their init, the default methods used by ``become`` do not open a new "session", in the sense of systemd. Because the ``pam_systemd`` module will not fully initialize a new session, you might have surprises compared to a normal session opened through ssh: some environment variables set by ``pam_systemd``, most notably ``XDG_RUNTIME_DIR``, are not populated for the new user and instead inherited or just emptied. This might cause trouble when trying to invoke systemd commands that depend on ``XDG_RUNTIME_DIR`` to access the bus: .. code-block:: console $ echo $XDG_RUNTIME_DIR $ systemctl --user status Failed to connect to bus: Permission denied To force ``become`` to open a new systemd session that goes through ``pam_systemd``, you can use ``become_method: machinectl``. For more information, see `this systemd issue `_. .. _become_network: Become and network automation ============================= As of version 2.6, Ansible supports ``become`` for privilege escalation (entering ``enable`` mode or privileged EXEC mode) on all Ansible-maintained network platforms that support ``enable`` mode. Using ``become`` replaces the ``authorize`` and ``auth_pass`` options in a ``provider`` dictionary. You must set the connection type to either ``connection: ansible.netcommon.network_cli`` or ``connection: ansible.netcommon.httpapi`` to use ``become`` for privilege escalation on network devices. Check the :ref:`platform_options` documentation for details. You can use escalated privileges on only the specific tasks that need them, on an entire play, or on all plays. Adding ``become: yes`` and ``become_method: enable`` instructs Ansible to enter ``enable`` mode before executing the task, play, or playbook where those parameters are set. If you see this error message, the task that generated it requires ``enable`` mode to succeed: .. code-block:: console Invalid input (privileged mode required) To set ``enable`` mode for a specific task, add ``become`` at the task level: .. code-block:: yaml - name: Gather facts (eos) arista.eos.eos_facts: gather_subset: - "!hardware" become: yes become_method: enable To set enable mode for all tasks in a single play, add ``become`` at the play level: .. code-block:: yaml - hosts: eos-switches become: yes become_method: enable tasks: - name: Gather facts (eos) arista.eos.eos_facts: gather_subset: - "!hardware" Setting enable mode for all tasks --------------------------------- Often you wish for all tasks in all plays to run using privilege mode, that is best achieved by using ``group_vars``: **group_vars/eos.yml** .. code-block:: yaml ansible_connection: ansible.netcommon.network_cli ansible_network_os: arista.eos.eos ansible_user: myuser ansible_become: yes ansible_become_method: enable Passwords for enable mode ^^^^^^^^^^^^^^^^^^^^^^^^^ If you need a password to enter ``enable`` mode, you can specify it in one of two ways: * providing the :option:`--ask-become-pass ` command line option * setting the ``ansible_become_password`` connection variable .. warning:: As a reminder passwords should never be stored in plain text. For information on encrypting your passwords and other secrets with Ansible Vault, see :ref:`vault`. authorize and auth_pass ----------------------- Ansible still supports ``enable`` mode with ``connection: local`` for legacy network playbooks. To enter ``enable`` mode with ``connection: local``, use the module options ``authorize`` and ``auth_pass``: .. code-block:: yaml - hosts: eos-switches ansible_connection: local tasks: - name: Gather facts (eos) eos_facts: gather_subset: - "!hardware" provider: authorize: yes auth_pass: " {{ secret_auth_pass }}" We recommend updating your playbooks to use ``become`` for network-device ``enable`` mode consistently. The use of ``authorize`` and of ``provider`` dictionaries will be deprecated in future. Check the :ref:`platform_options` and :ref:`network_modules` documentation for details. .. _become_windows: Become and Windows ================== Since Ansible 2.3, ``become`` can be used on Windows hosts through the ``runas`` method. Become on Windows uses the same inventory setup and invocation arguments as ``become`` on a non-Windows host, so the setup and variable names are the same as what is defined in this document. While ``become`` can be used to assume the identity of another user, there are other uses for it with Windows hosts. One important use is to bypass some of the limitations that are imposed when running on WinRM, such as constrained network delegation or accessing forbidden system calls like the WUA API. You can use ``become`` with the same user as ``ansible_user`` to bypass these limitations and run commands that are not normally accessible in a WinRM session. Administrative rights --------------------- Many tasks in Windows require administrative privileges to complete. When using the ``runas`` become method, Ansible will attempt to run the module with the full privileges that are available to the remote user. If it fails to elevate the user token, it will continue to use the limited token during execution. A user must have the ``SeDebugPrivilege`` to run a become process with elevated privileges. This privilege is assigned to Administrators by default. If the debug privilege is not available, the become process will run with a limited set of privileges and groups. To determine the type of token that Ansible was able to get, run the following task: .. code-block:: yaml - Check my user name ansible.windows.win_whoami: become: yes The output will look something similar to the below: .. code-block:: ansible-output ok: [windows] => { "account": { "account_name": "vagrant-domain", "domain_name": "DOMAIN", "sid": "S-1-5-21-3088887838-4058132883-1884671576-1105", "type": "User" }, "authentication_package": "Kerberos", "changed": false, "dns_domain_name": "DOMAIN.LOCAL", "groups": [ { "account_name": "Administrators", "attributes": [ "Mandatory", "Enabled by default", "Enabled", "Owner" ], "domain_name": "BUILTIN", "sid": "S-1-5-32-544", "type": "Alias" }, { "account_name": "INTERACTIVE", "attributes": [ "Mandatory", "Enabled by default", "Enabled" ], "domain_name": "NT AUTHORITY", "sid": "S-1-5-4", "type": "WellKnownGroup" }, ], "impersonation_level": "SecurityAnonymous", "label": { "account_name": "High Mandatory Level", "domain_name": "Mandatory Label", "sid": "S-1-16-12288", "type": "Label" }, "login_domain": "DOMAIN", "login_time": "2018-11-18T20:35:01.9696884+00:00", "logon_id": 114196830, "logon_server": "DC01", "logon_type": "Interactive", "privileges": { "SeBackupPrivilege": "disabled", "SeChangeNotifyPrivilege": "enabled-by-default", "SeCreateGlobalPrivilege": "enabled-by-default", "SeCreatePagefilePrivilege": "disabled", "SeCreateSymbolicLinkPrivilege": "disabled", "SeDebugPrivilege": "enabled", "SeDelegateSessionUserImpersonatePrivilege": "disabled", "SeImpersonatePrivilege": "enabled-by-default", "SeIncreaseBasePriorityPrivilege": "disabled", "SeIncreaseQuotaPrivilege": "disabled", "SeIncreaseWorkingSetPrivilege": "disabled", "SeLoadDriverPrivilege": "disabled", "SeManageVolumePrivilege": "disabled", "SeProfileSingleProcessPrivilege": "disabled", "SeRemoteShutdownPrivilege": "disabled", "SeRestorePrivilege": "disabled", "SeSecurityPrivilege": "disabled", "SeShutdownPrivilege": "disabled", "SeSystemEnvironmentPrivilege": "disabled", "SeSystemProfilePrivilege": "disabled", "SeSystemtimePrivilege": "disabled", "SeTakeOwnershipPrivilege": "disabled", "SeTimeZonePrivilege": "disabled", "SeUndockPrivilege": "disabled" }, "rights": [ "SeNetworkLogonRight", "SeBatchLogonRight", "SeInteractiveLogonRight", "SeRemoteInteractiveLogonRight" ], "token_type": "TokenPrimary", "upn": "vagrant-domain@DOMAIN.LOCAL", "user_flags": [] } Under the ``label`` key, the ``account_name`` entry determines whether the user has Administrative rights. Here are the labels that can be returned and what they represent: * ``Medium``: Ansible failed to get an elevated token and ran under a limited token. Only a subset of the privileges assigned to user are available during the module execution and the user does not have administrative rights. * ``High``: An elevated token was used and all the privileges assigned to the user are available during the module execution. * ``System``: The ``NT AUTHORITY\System`` account is used and has the highest level of privileges available. The output will also show the list of privileges that have been granted to the user. When the privilege value is ``disabled``, the privilege is assigned to the logon token but has not been enabled. In most scenarios these privileges are automatically enabled when required. If running on a version of Ansible that is older than 2.5 or the normal ``runas`` escalation process fails, an elevated token can be retrieved by: * Set the ``become_user`` to ``System`` which has full control over the operating system. * Grant ``SeTcbPrivilege`` to the user Ansible connects with on WinRM. ``SeTcbPrivilege`` is a high-level privilege that grants full control over the operating system. No user is given this privilege by default, and care should be taken if you grant this privilege to a user or group. For more information on this privilege, please see `Act as part of the operating system `_. You can use the below task to set this privilege on a Windows host: .. code-block:: yaml - name: grant the ansible user the SeTcbPrivilege right ansible.windows.win_user_right: name: SeTcbPrivilege users: '{{ansible_user}}' action: add * Turn UAC off on the host and reboot before trying to become the user. UAC is a security protocol that is designed to run accounts with the ``least privilege`` principle. You can turn UAC off by running the following tasks: .. code-block:: yaml - name: turn UAC off win_regedit: path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system name: EnableLUA data: 0 type: dword state: present register: uac_result - name: reboot after disabling UAC win_reboot: when: uac_result is changed .. Note:: Granting the ``SeTcbPrivilege`` or turning UAC off can cause Windows security vulnerabilities and care should be given if these steps are taken. Local service accounts ---------------------- Prior to Ansible version 2.5, ``become`` only worked on Windows with a local or domain user account. Local service accounts like ``System`` or ``NetworkService`` could not be used as ``become_user`` in these older versions. This restriction has been lifted since the 2.5 release of Ansible. The three service accounts that can be set under ``become_user`` are: * System * NetworkService * LocalService Because local service accounts do not have passwords, the ``ansible_become_password`` parameter is not required and is ignored if specified. Become without setting a password --------------------------------- As of Ansible 2.8, ``become`` can be used to become a Windows local or domain account without requiring a password for that account. For this method to work, the following requirements must be met: * The connection user has the ``SeDebugPrivilege`` privilege assigned * The connection user is part of the ``BUILTIN\Administrators`` group * The ``become_user`` has either the ``SeBatchLogonRight`` or ``SeNetworkLogonRight`` user right Using become without a password is achieved in one of two different methods: * Duplicating an existing logon session's token if the account is already logged on * Using S4U to generate a logon token that is valid on the remote host only In the first scenario, the become process is spawned from another logon of that user account. This could be an existing RDP logon, console logon, but this is not guaranteed to occur all the time. This is similar to the ``Run only when user is logged on`` option for a Scheduled Task. In the case where another logon of the become account does not exist, S4U is used to create a new logon and run the module through that. This is similar to the ``Run whether user is logged on or not`` with the ``Do not store password`` option for a Scheduled Task. In this scenario, the become process will not be able to access any network resources like a normal WinRM process. To make a distinction between using become with no password and becoming an account that has no password make sure to keep ``ansible_become_password`` as undefined or set ``ansible_become_password:``. .. Note:: Because there are no guarantees an existing token will exist for a user when Ansible runs, there's a high change the become process will only have access to local resources. Use become with a password if the task needs to access network resources Accounts without a password --------------------------- .. Warning:: As a general security best practice, you should avoid allowing accounts without passwords. Ansible can be used to become a Windows account that does not have a password (like the ``Guest`` account). To become an account without a password, set up the variables like normal but set ``ansible_become_password: ''``. Before become can work on an account like this, the local policy `Accounts: Limit local account use of blank passwords to console logon only `_ must be disabled. This can either be done through a Group Policy Object (GPO) or with this Ansible task: .. code-block:: yaml - name: allow blank password on become ansible.windows.win_regedit: path: HKLM:\SYSTEM\CurrentControlSet\Control\Lsa name: LimitBlankPasswordUse data: 0 type: dword state: present .. Note:: This is only for accounts that do not have a password. You still need to set the account's password under ``ansible_become_password`` if the become_user has a password. Become flags for Windows ------------------------ Ansible 2.5 added the ``become_flags`` parameter to the ``runas`` become method. This parameter can be set using the ``become_flags`` task directive or set in Ansible's configuration using ``ansible_become_flags``. The two valid values that are initially supported for this parameter are ``logon_type`` and ``logon_flags``. .. Note:: These flags should only be set when becoming a normal user account, not a local service account like LocalSystem. The key ``logon_type`` sets the type of logon operation to perform. The value can be set to one of the following: * ``interactive``: The default logon type. The process will be run under a context that is the same as when running a process locally. This bypasses all WinRM restrictions and is the recommended method to use. * ``batch``: Runs the process under a batch context that is similar to a scheduled task with a password set. This should bypass most WinRM restrictions and is useful if the ``become_user`` is not allowed to log on interactively. * ``new_credentials``: Runs under the same credentials as the calling user, but outbound connections are run under the context of the ``become_user`` and ``become_password``, similar to ``runas.exe /netonly``. The ``logon_flags`` flag should also be set to ``netcredentials_only``. Use this flag if the process needs to access a network resource (like an SMB share) using a different set of credentials. * ``network``: Runs the process under a network context without any cached credentials. This results in the same type of logon session as running a normal WinRM process without credential delegation, and operates under the same restrictions. * ``network_cleartext``: Like the ``network`` logon type, but instead caches the credentials so it can access network resources. This is the same type of logon session as running a normal WinRM process with credential delegation. For more information, see `dwLogonType `_. The ``logon_flags`` key specifies how Windows will log the user on when creating the new process. The value can be set to none or multiple of the following: * ``with_profile``: The default logon flag set. The process will load the user's profile in the ``HKEY_USERS`` registry key to ``HKEY_CURRENT_USER``. * ``netcredentials_only``: The process will use the same token as the caller but will use the ``become_user`` and ``become_password`` when accessing a remote resource. This is useful in inter-domain scenarios where there is no trust relationship, and should be used with the ``new_credentials`` ``logon_type``. By default ``logon_flags=with_profile`` is set, if the profile should not be loaded set ``logon_flags=`` or if the profile should be loaded with ``netcredentials_only``, set ``logon_flags=with_profile,netcredentials_only``. For more information, see `dwLogonFlags `_. Here are some examples of how to use ``become_flags`` with Windows tasks: .. code-block:: yaml - name: copy a file from a fileshare with custom credentials ansible.windows.win_copy: src: \\server\share\data\file.txt dest: C:\temp\file.txt remote_src: yes vars: ansible_become: yes ansible_become_method: runas ansible_become_user: DOMAIN\user ansible_become_password: Password01 ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only - name: run a command under a batch logon ansible.windows.win_whoami: become: yes become_flags: logon_type=batch - name: run a command and not load the user profile ansible.windows.win_whomai: become: yes become_flags: logon_flags= Limitations of become on Windows -------------------------------- * Running a task with ``async`` and ``become`` on Windows Server 2008, 2008 R2 and Windows 7 only works when using Ansible 2.7 or newer. * By default, the become user logs on with an interactive session, so it must have the right to do so on the Windows host. If it does not inherit the ``SeAllowLogOnLocally`` privilege or inherits the ``SeDenyLogOnLocally`` privilege, the become process will fail. Either add the privilege or set the ``logon_type`` flag to change the logon type used. * Prior to Ansible version 2.3, become only worked when ``ansible_winrm_transport`` was either ``basic`` or ``credssp``. This restriction has been lifted since the 2.4 release of Ansible for all hosts except Windows Server 2008 (non R2 version). * The Secondary Logon service ``seclogon`` must be running to use ``ansible_become_method: runas`` .. seealso:: `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/collections_using.rst0000644000000000000000000003643300000000000025711 0ustar00rootroot00000000000000 .. _collections: ***************** Using collections ***************** Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. As modules move from the core Ansible repository into collections, the module documentation will move to the :ref:`collections pages `. You can install and use collections through `Ansible Galaxy `_. * For details on how to *develop* collections see :ref:`developing_collections`. * For the current development status of Collections and FAQ see `Ansible Collections Community Guide `_. .. contents:: :local: :depth: 2 .. _collections_installing: Installing collections ====================== .. note:: If you install a collection manually as described in this paragraph, the collection will not be upgraded automatically when you upgrade the ``ansible`` package or ``ansible-core``. Installing collections with ``ansible-galaxy`` ---------------------------------------------- .. include:: ../shared_snippets/installing_collections.txt .. _collections_older_version: Installing an older version of a collection ------------------------------------------- .. include:: ../shared_snippets/installing_older_collection.txt Installing a collection from a git repository --------------------------------------------- .. include:: ../shared_snippets/installing_collections_git_repo.txt .. _collection_requirements_file: Install multiple collections with a requirements file ----------------------------------------------------- .. include:: ../shared_snippets/installing_multiple_collections.txt .. _collection_offline_download: Downloading a collection for offline use ----------------------------------------- .. include:: ../shared_snippets/download_tarball_collections.txt .. _galaxy_server_config: Configuring the ``ansible-galaxy`` client ------------------------------------------ .. include:: ../shared_snippets/galaxy_server_list.txt .. _collections_downloading: Downloading collections ======================= To download a collection and its dependencies for an offline install, run ``ansible-galaxy collection download``. This downloads the collections specified and their dependencies to the specified folder and creates a ``requirements.yml`` file which can be used to install those collections on a host without access to a Galaxy server. All the collections are downloaded by default to the ``./collections`` folder. Just like the ``install`` command, the collections are sourced based on the :ref:`configured galaxy server config `. Even if a collection to download was specified by a URL or path to a tarball, the collection will be redownloaded from the configured Galaxy server. Collections can be specified as one or multiple collections or with a ``requirements.yml`` file just like ``ansible-galaxy collection install``. To download a single collection and its dependencies: .. code-block:: bash ansible-galaxy collection download my_namespace.my_collection To download a single collection at a specific version: .. code-block:: bash ansible-galaxy collection download my_namespace.my_collection:1.0.0 To download multiple collections either specify multiple collections as command line arguments as shown above or use a requirements file in the format documented with :ref:`collection_requirements_file`. .. code-block:: bash ansible-galaxy collection download -r requirements.yml You can also download a source collection directory. The collection is built with the mandatory ``galaxy.yml`` file. .. code-block:: bash ansible-galaxy collection download /path/to/collection ansible-galaxy collection download git+file:///path/to/collection/.git You can download multiple source collections from a single namespace by providing the path to the namespace. .. code-block:: text ns/ ├── collection1/ │   ├── galaxy.yml │   └── plugins/ └── collection2/ ├── galaxy.yml └── plugins/ .. code-block:: bash ansible-galaxy collection install /path/to/ns All the collections are downloaded by default to the ``./collections`` folder but you can use ``-p`` or ``--download-path`` to specify another path: .. code-block:: bash ansible-galaxy collection download my_namespace.my_collection -p ~/offline-collections Once you have downloaded the collections, the folder contains the collections specified, their dependencies, and a ``requirements.yml`` file. You can use this folder as is with ``ansible-galaxy collection install`` to install the collections on a host without access to a Galaxy or Automation Hub server. .. code-block:: bash # This must be run from the folder that contains the offline collections and requirements.yml file downloaded # by the internet-connected host cd ~/offline-collections ansible-galaxy collection install -r requirements.yml .. _collections_listing: Listing collections =================== To list installed collections, run ``ansible-galaxy collection list``. This shows all of the installed collections found in the configured collections search paths. It will also show collections under development which contain a galaxy.yml file instead of a MANIFEST.json. The path where the collections are located are displayed as well as version information. If no version information is available, a ``*`` is displayed for the version number. .. code-block:: shell # /home/astark/.ansible/collections/ansible_collections Collection Version -------------------------- ------- cisco.aci 0.0.5 cisco.mso 0.0.4 sandwiches.ham * splunk.es 0.0.5 # /usr/share/ansible/collections/ansible_collections Collection Version ----------------- ------- fortinet.fortios 1.0.6 pureport.pureport 0.0.8 sensu.sensu_go 1.3.0 Run with ``-vvv`` to display more detailed information. To list a specific collection, pass a valid fully qualified collection name (FQCN) to the command ``ansible-galaxy collection list``. All instances of the collection will be listed. .. code-block:: shell > ansible-galaxy collection list fortinet.fortios # /home/astark/.ansible/collections/ansible_collections Collection Version ---------------- ------- fortinet.fortios 1.0.1 # /usr/share/ansible/collections/ansible_collections Collection Version ---------------- ------- fortinet.fortios 1.0.6 To search other paths for collections, use the ``-p`` option. Specify multiple search paths by separating them with a ``:``. The list of paths specified on the command line will be added to the beginning of the configured collections search paths. .. code-block:: shell > ansible-galaxy collection list -p '/opt/ansible/collections:/etc/ansible/collections' # /opt/ansible/collections/ansible_collections Collection Version --------------- ------- sandwiches.club 1.7.2 # /etc/ansible/collections/ansible_collections Collection Version -------------- ------- sandwiches.pbj 1.2.0 # /home/astark/.ansible/collections/ansible_collections Collection Version -------------------------- ------- cisco.aci 0.0.5 cisco.mso 0.0.4 fortinet.fortios 1.0.1 sandwiches.ham * splunk.es 0.0.5 # /usr/share/ansible/collections/ansible_collections Collection Version ----------------- ------- fortinet.fortios 1.0.6 pureport.pureport 0.0.8 sensu.sensu_go 1.3.0 .. _using_collections: Verifying collections ===================== Verifying collections with ``ansible-galaxy`` --------------------------------------------- Once installed, you can verify that the content of the installed collection matches the content of the collection on the server. This feature expects that the collection is installed in one of the configured collection paths and that the collection exists on one of the configured galaxy servers. .. code-block:: bash ansible-galaxy collection verify my_namespace.my_collection The output of the ``ansible-galaxy collection verify`` command is quiet if it is successful. If a collection has been modified, the altered files are listed under the collection name. .. code-block:: bash ansible-galaxy collection verify my_namespace.my_collection Collection my_namespace.my_collection contains modified content in the following files: my_namespace.my_collection plugins/inventory/my_inventory.py plugins/modules/my_module.py You can use the ``-vvv`` flag to display additional information, such as the version and path of the installed collection, the URL of the remote collection used for validation, and successful verification output. .. code-block:: bash ansible-galaxy collection verify my_namespace.my_collection -vvv ... Verifying 'my_namespace.my_collection:1.0.0'. Installed collection found at '/path/to/ansible_collections/my_namespace/my_collection/' Remote collection found at 'https://galaxy.ansible.com/download/my_namespace-my_collection-1.0.0.tar.gz' Successfully verified that checksums for 'my_namespace.my_collection:1.0.0' match the remote collection If you have a pre-release or non-latest version of a collection installed you should include the specific version to verify. If the version is omitted, the installed collection is verified against the latest version available on the server. .. code-block:: bash ansible-galaxy collection verify my_namespace.my_collection:1.0.0 In addition to the ``namespace.collection_name:version`` format, you can provide the collections to verify in a ``requirements.yml`` file. Dependencies listed in ``requirements.yml`` are not included in the verify process and should be verified separately. .. code-block:: bash ansible-galaxy collection verify -r requirements.yml Verifying against ``tar.gz`` files is not supported. If your ``requirements.yml`` contains paths to tar files or URLs for installation, you can use the ``--ignore-errors`` flag to ensure that all collections using the ``namespace.name`` format in the file are processed. .. _collections_using_playbook: Using collections in a Playbook =============================== Once installed, you can reference a collection content by its fully qualified collection name (FQCN): .. code-block:: yaml - hosts: all tasks: - my_namespace.my_collection.mymodule: option1: value This works for roles or any type of plugin distributed within the collection: .. code-block:: yaml - hosts: all tasks: - import_role: name: my_namespace.my_collection.role1 - my_namespace.mycollection.mymodule: option1: value - debug: msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}' Simplifying module names with the ``collections`` keyword ========================================================= The ``collections`` keyword lets you define a list of collections that your role or playbook should search for unqualified module and action names. So you can use the ``collections`` keyword, then simply refer to modules and action plugins by their short-form names throughout that role or playbook. .. warning:: If your playbook uses both the ``collections`` keyword and one or more roles, the roles do not inherit the collections set by the playbook. This is one of the reasons we recommend you always use FQCN. See below for roles details. Using ``collections`` in roles ------------------------------ Within a role, you can control which collections Ansible searches for the tasks inside the role using the ``collections`` keyword in the role's ``meta/main.yml``. Ansible will use the collections list defined inside the role even if the playbook that calls the role defines different collections in a separate ``collections`` keyword entry. Roles defined inside a collection always implicitly search their own collection first, so you don't need to use the ``collections`` keyword to access modules, actions, or other roles contained in the same collection. .. code-block:: yaml # myrole/meta/main.yml collections: - my_namespace.first_collection - my_namespace.second_collection - other_namespace.other_collection Using ``collections`` in playbooks ---------------------------------- In a playbook, you can control the collections Ansible searches for modules and action plugins to execute. However, any roles you call in your playbook define their own collections search order; they do not inherit the calling playbook's settings. This is true even if the role does not define its own ``collections`` keyword. .. code-block:: yaml - hosts: all collections: - my_namespace.my_collection tasks: - import_role: name: role1 - mymodule: option1: value - debug: msg: '{{ lookup("my_namespace.my_collection.lookup1", "param1")| my_namespace.my_collection.filter1 }}' The ``collections`` keyword merely creates an ordered 'search path' for non-namespaced plugin and role references. It does not install content or otherwise change Ansible's behavior around the loading of plugins or roles. Note that an FQCN is still required for non-action or module plugins (for example, lookups, filters, tests). Using a playbook from a collection ================================== .. versionadded:: 2.11 You can also distribute playbooks in your collection and invoke them using the same semantics you use for plugins: .. code-block:: shell ansible-playbook my_namespace.my_collection.playbook1 -i ./myinventory From inside a playbook: .. code-block:: yaml - import_playbook: my_namespace.my_collection.playbookX A few recommendations when creating such playbooks, ``hosts:`` should be generic or at least have a variable input. .. code-block:: yaml - hosts: all # Use --limit or customized inventory to restrict hosts targeted - hosts: localhost # For things you want to restrict to the controller - hosts: '{{target|default("webservers")}}' # Assumes inventory provides a 'webservers' group, but can also use ``-e 'target=host1,host2'`` This will have an implied entry in the ``collections:`` keyword of ``my_namespace.my_collection`` just as with roles. .. note:: Playbook names, like other collection resources, have a restricted set of valid characters. Names can contain only lowercase alphanumeric characters, plus _ and must start with an alpha character. The dash ``-`` character is not valid for playbook names in collections. Playbooks whose names contain invalid characters are not addressable: this is a limitation of the Python importer that is used to load collection resources. .. seealso:: :ref:`developing_collections` Develop or modify a collection. :ref:`collections_galaxy_meta` Understand the collections metadata structure. `Mailing List `_ The development mailing list :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/command_line_tools.rst0000644000000000000000000000116300000000000026023 0ustar00rootroot00000000000000.. _command_line_tools: Working with command line tools =============================== Most users are familiar with `ansible` and `ansible-playbook`, but those are not the only utilities Ansible provides. Below is a complete list of Ansible utilities. Each page contains a description of the utility and a listing of supported parameters. .. toctree:: :maxdepth: 1 ../cli/ansible.rst ../cli/ansible-config.rst ../cli/ansible-console.rst ../cli/ansible-doc.rst ../cli/ansible-galaxy.rst ../cli/ansible-inventory.rst ../cli/ansible-playbook.rst ../cli/ansible-pull.rst ../cli/ansible-vault.rst ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/complex_data_manipulation.rst0000644000000000000000000002626100000000000027404 0ustar00rootroot00000000000000.. _complex_data_manipulation: Data manipulation ######################### In many cases, you need to do some complex operation with your variables, while Ansible is not recommended as a data processing/manipulation tool, you can use the existing Jinja2 templating in conjunction with the many added Ansible filters, lookups and tests to do some very complex transformations. Let's start with a quick definition of each type of plugin: - lookups: Mainly used to query 'external data', in Ansible these were the primary part of loops using the ``with_`` construct, but they can be used independently to return data for processing. They normally return a list due to their primary function in loops as mentioned previously. Used with the ``lookup`` or ``query`` Jinja2 operators. - filters: used to change/transform data, used with the ``|`` Jinja2 operator. - tests: used to validate data, used with the ``is`` Jinja2 operator. .. _note: * Some tests and filters are provided directly by Jinja2, so their availability depends on the Jinja2 version, not Ansible. .. _for_loops_or_list_comprehensions: Loops and list comprehensions ============================= Most programming languages have loops (``for``, ``while``, and so on) and list comprehensions to do transformations on lists including lists of objects. Jinja2 has a few filters that provide this functionality: ``map``, ``select``, ``reject``, ``selectattr``, ``rejectattr``. - map: this is a basic for loop that just allows you to change every item in a list, using the 'attribute' keyword you can do the transformation based on attributes of the list elements. - select/reject: this is a for loop with a condition, that allows you to create a subset of a list that matches (or not) based on the result of the condition. - selectattr/rejectattr: very similar to the above but it uses a specific attribute of the list elements for the conditional statement. .. _exponential_backoff: Use a loop to create exponential backoff for retries/until. .. code-block:: yaml - name: retry ping 10 times with exponential backup delay ping: retries: 10 delay: '{{item|int}}' loop: '{{ range(1, 10)|map('pow', 2) }}' .. _keys_from_dict_matching_list: Extract keys from a dictionary matching elements from a list ------------------------------------------------------------ The Python equivalent code would be: .. code-block:: python chains = [1, 2] for chain in chains: for config in chains_config[chain]['configs']: print(config['type']) There are several ways to do it in Ansible, this is just one example: .. code-block:: YAML+Jinja :emphasize-lines: 4 :caption: Way to extract matching keys from a list of dictionaries tasks: - name: Show extracted list of keys from a list of dictionaries ansible.builtin.debug: msg: "{{ chains | map('extract', chains_config) | map(attribute='configs') | flatten | map(attribute='type') | flatten }}" vars: chains: [1, 2] chains_config: 1: foo: bar configs: - type: routed version: 0.1 - type: bridged version: 0.2 2: foo: baz configs: - type: routed version: 1.0 - type: bridged version: 1.1 .. code-block:: ansible-output :caption: Results of debug task, a list with the extracted keys ok: [localhost] => { "msg": [ "routed", "bridged", "routed", "bridged" ] } .. code-block:: YAML+Jinja :caption: Get the unique list of values of a variable that vary per host vars: unique_value_list: "{{ groups['all'] | map ('extract', hostvars, 'varname') | list | unique}}" .. _find_mount_point: Find mount point ---------------- In this case, we want to find the mount point for a given path across our machines, since we already collect mount facts, we can use the following: .. code-block:: YAML+Jinja :caption: Use selectattr to filter mounts into list I can then sort and select the last from :emphasize-lines: 8 - hosts: all gather_facts: True vars: path: /var/lib/cache tasks: - name: The mount point for {{path}}, found using the Ansible mount facts, [-1] is the same as the 'last' filter ansible.builtin.debug: msg: "{{(ansible_facts.mounts | selectattr('mount', 'in', path) | list | sort(attribute='mount'))[-1]['mount']}}" .. _omit_elements_from_list: Omit elements from a list ------------------------- The special ``omit`` variable ONLY works with module options, but we can still use it in other ways as an identifier to tailor a list of elements: .. code-block:: YAML+Jinja :caption: Inline list filtering when feeding a module option :emphasize-lines: 3, 6 - name: Enable a list of Windows features, by name ansible.builtin.set_fact: win_feature_list: "{{ namestuff | reject('equalto', omit) | list }}" vars: namestuff: - "{{ (fs_installed_smb_v1 | default(False)) | ternary(omit, 'FS-SMB1') }}" - "foo" - "bar" Another way is to avoid adding elements to the list in the first place, so you can just use it directly: .. code-block:: YAML+Jinja :caption: Using set_fact in a loop to increment a list conditionally :emphasize-lines: 3, 4, 6 - name: Build unique list with some items conditionally omitted ansible.builtin.set_fact: namestuff: ' {{ (namestuff | default([])) | union([item]) }}' when: item != omit loop: - "{{ (fs_installed_smb_v1 | default(False)) | ternary(omit, 'FS-SMB1') }}" - "foo" - "bar" .. _combine_optional_values: Combine values from same list of dicts --------------------------------------- Combining positive and negative filters from examples above, you can get a 'value when it exists' and a 'fallback' when it doesn't. .. code-block:: YAML+Jinja :caption: Use selectattr and rejectattr to get the ansible_host or inventory_hostname as needed - hosts: localhost tasks: - name: Check hosts in inventory that respond to ssh port wait_for: host: "{{ item }}" port: 22 loop: '{{ has_ah + no_ah }}' vars: has_ah: '{{ hostvars|dictsort|selectattr("1.ansible_host", "defined")|map(attribute="1.ansible_host")|list }}' no_ah: '{{ hostvars|dictsort|rejectattr("1.ansible_host", "defined")|map(attribute="0")|list }}' .. _custom_fileglob_variable: Custom Fileglob Based on a Variable ----------------------------------- This example uses `Python argument list unpacking `_ to create a custom list of fileglobs based on a variable. .. code-block:: YAML+Jinja :caption: Using fileglob with a list based on a variable. - hosts: all vars: mygroups - prod - web tasks: - name: Copy a glob of files based on a list of groups copy: src: "{{ item }}" dest: "/tmp/{{ item }}" loop: '{{ q("fileglob", *globlist) }}' vars: globlist: '{{ mygroups | map("regex_replace", "^(.*)$", "files/\1/*.conf") | list }}' .. _complex_type_transformations: Complex Type transformations ============================= Jinja provides filters for simple data type transformations (``int``, ``bool``, and so on), but when you want to transform data structures things are not as easy. You can use loops and list comprehensions as shown above to help, also other filters and lookups can be chained and used to achieve more complex transformations. .. _create_dictionary_from_list: Create dictionary from list --------------------------- In most languages it is easy to create a dictionary (a.k.a. map/associative array/hash and so on) from a list of pairs, in Ansible there are a couple of ways to do it and the best one for you might depend on the source of your data. These example produces ``{"a": "b", "c": "d"}`` .. code-block:: YAML+Jinja :caption: Simple list to dict by assuming the list is [key, value , key, value, ...] vars: single_list: [ 'a', 'b', 'c', 'd' ] mydict: "{{ dict(single_list | slice(2)) }}" .. code-block:: YAML+Jinja :caption: It is simpler when we have a list of pairs: vars: list_of_pairs: [ ['a', 'b'], ['c', 'd'] ] mydict: "{{ dict(list_of_pairs) }}" Both end up being the same thing, with ``slice(2)`` transforming ``single_list`` to a ``list_of_pairs`` generator. A bit more complex, using ``set_fact`` and a ``loop`` to create/update a dictionary with key value pairs from 2 lists: .. code-block:: YAML+Jinja :caption: Using set_fact to create a dictionary from a set of lists :emphasize-lines: 3, 4 - name: Uses 'combine' to update the dictionary and 'zip' to make pairs of both lists ansible.builtin.set_fact: mydict: "{{ mydict | default({}) | combine({item[0]: item[1]}) }}" loop: "{{ (keys | zip(values)) | list }}" vars: keys: - foo - var - bar values: - a - b - c This results in ``{"foo": "a", "var": "b", "bar": "c"}``. You can even combine these simple examples with other filters and lookups to create a dictionary dynamically by matching patterns to variable names: .. code-block:: YAML+Jinja :caption: Using 'vars' to define dictionary from a set of lists without needing a task vars: myvarnames: "{{ q('varnames', '^my') }}" mydict: "{{ dict(myvarnames | zip(q('vars', *myvarnames))) }}" A quick explanation, since there is a lot to unpack from these two lines: - The ``varnames`` lookup returns a list of variables that match "begin with ``my``". - Then feeding the list from the previous step into the ``vars`` lookup to get the list of values. The ``*`` is used to 'dereference the list' (a pythonism that works in Jinja), otherwise it would take the list as a single argument. - Both lists get passed to the ``zip`` filter to pair them off into a unified list (key, value, key2, value2, ...). - The dict function then takes this 'list of pairs' to create the dictionary. An example on how to use facts to find a host's data that meets condition X: .. code-block:: YAML+Jinja vars: uptime_of_host_most_recently_rebooted: "{{ansible_play_hosts_all | map('extract', hostvars, 'ansible_uptime_seconds') | sort | first}}" Using an example from @zoradache on reddit, to show the 'uptime in days/hours/minutes' (assumes facts where gathered). https://www.reddit.com/r/ansible/comments/gj5a93/trying_to_get_uptime_from_seconds/fqj2qr3/ .. code-block:: YAML+Jinja - name: Show the uptime in a certain format ansible.builtin.debug: msg: Timedelta {{ now() - now().fromtimestamp(now(fmt='%s') | int - ansible_uptime_seconds) }} .. seealso:: :ref:`playbooks_filters` Jinja2 filters included with Ansible :ref:`playbooks_tests` Jinja2 tests included with Ansible `Jinja2 Docs `_ Jinja2 documentation, includes lists for core filters and tests ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/connection_details.rst0000644000000000000000000001065400000000000026027 0ustar00rootroot00000000000000.. _connections: ****************************** Connection methods and details ****************************** This section shows you how to expand and refine the connection methods Ansible uses for your inventory. ControlPersist and paramiko --------------------------- By default, Ansible uses native OpenSSH, because it supports ControlPersist (a performance feature), Kerberos, and options in ``~/.ssh/config`` such as Jump Host setup. If your control machine uses an older version of OpenSSH that does not support ControlPersist, Ansible will fallback to a Python implementation of OpenSSH called 'paramiko'. .. _connection_set_user: Setting a remote user --------------------- By default, Ansible connects to all remote devices with the user name you are using on the control node. If that user name does not exist on a remote device, you can set a different user name for the connection. If you just need to do some tasks as a different user, look at :ref:`become`. You can set the connection user in a playbook: .. code-block:: yaml --- - name: update webservers hosts: webservers remote_user: admin tasks: - name: thing to do first in this playbook . . . as a host variable in inventory: .. code-block:: text other1.example.com ansible_connection=ssh ansible_user=myuser other2.example.com ansible_connection=ssh ansible_user=myotheruser or as a group variable in inventory: .. code-block:: yaml cloud: hosts: cloud1: my_backup.cloud.com cloud2: my_backup2.cloud.com vars: ansible_user: admin Setting up SSH keys ------------------- By default, Ansible assumes you are using SSH keys to connect to remote machines. SSH keys are encouraged, but you can use password authentication if needed with the ``--ask-pass`` option. If you need to provide a password for :ref:`privilege escalation ` (sudo, pbrun, and so on), use ``--ask-become-pass``. .. include:: shared_snippets/SSH_password_prompt.txt To set up SSH agent to avoid retyping passwords, you can do: .. code-block:: bash $ ssh-agent bash $ ssh-add ~/.ssh/id_rsa Depending on your setup, you may wish to use Ansible's ``--private-key`` command line option to specify a pem file instead. You can also add the private key file: .. code-block:: bash $ ssh-agent bash $ ssh-add ~/.ssh/keypair.pem Another way to add private key files without using ssh-agent is using ``ansible_ssh_private_key_file`` in an inventory file as explained here: :ref:`intro_inventory`. Running against localhost ------------------------- You can run commands against the control node by using "localhost" or "127.0.0.1" for the server name: .. code-block:: bash $ ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"' You can specify localhost explicitly by adding this to your inventory file: .. code-block:: bash localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python" .. _host_key_checking_on: Managing host key checking -------------------------- Ansible enables host key checking by default. Checking host keys guards against server spoofing and man-in-the-middle attacks, but it does require some maintenance. If a host is reinstalled and has a different key in 'known_hosts', this will result in an error message until corrected. If a new host is not in 'known_hosts' your control node may prompt for confirmation of the key, which results in an interactive experience if using Ansible, from say, cron. You might not want this. If you understand the implications and wish to disable this behavior, you can do so by editing ``/etc/ansible/ansible.cfg`` or ``~/.ansible.cfg``: .. code-block:: text [defaults] host_key_checking = False Alternatively this can be set by the :envvar:`ANSIBLE_HOST_KEY_CHECKING` environment variable: .. code-block:: bash $ export ANSIBLE_HOST_KEY_CHECKING=False Also note that host key checking in paramiko mode is reasonably slow, therefore switching to 'ssh' is also recommended when using this feature. Other connection methods ------------------------ Ansible can use a variety of connection methods beyond SSH. You can select any connection plugin, including managing things locally and managing chroot, lxc, and jail containers. A mode called 'ansible-pull' can also invert the system and have systems 'phone home' via scheduled git checkouts to pull configuration directives from a central repository. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/guide_rolling_upgrade.rst0000644000000000000000000003767500000000000026531 0ustar00rootroot00000000000000********************************************************** Playbook Example: Continuous Delivery and Rolling Upgrades ********************************************************** .. contents:: :local: .. _lamp_introduction: What is continuous delivery? ============================ Continuous delivery (CD) means frequently delivering updates to your software application. The idea is that by updating more often, you do not have to wait for a specific timed period, and your organization gets better at the process of responding to change. Some Ansible users are deploying updates to their end users on an hourly or even more frequent basis -- sometimes every time there is an approved code change. To achieve this, you need tools to be able to quickly apply those updates in a zero-downtime way. This document describes in detail how to achieve this goal, using one of Ansible's most complete example playbooks as a template: lamp_haproxy. This example uses a lot of Ansible features: roles, templates, and group variables, and it also comes with an orchestration playbook that can do zero-downtime rolling upgrades of the web application stack. .. note:: `Click here for the latest playbooks for this example `_. The playbooks deploy Apache, PHP, MySQL, Nagios, and HAProxy to a CentOS-based set of servers. We're not going to cover how to run these playbooks here. Read the included README in the github project along with the example for that information. Instead, we're going to take a close look at every part of the playbook and describe what it does. .. _lamp_deployment: Site deployment =============== Let's start with ``site.yml``. This is our site-wide deployment playbook. It can be used to initially deploy the site, as well as push updates to all of the servers: .. code-block:: yaml --- # This playbook deploys the whole application stack in this site. # Apply common configuration to all hosts - hosts: all roles: - common # Configure and deploy database servers. - hosts: dbservers roles: - db # Configure and deploy the web servers. Note that we include two roles # here, the 'base-apache' role which simply sets up Apache, and 'web' # which includes our example web application. - hosts: webservers roles: - base-apache - web # Configure and deploy the load balancer(s). - hosts: lbservers roles: - haproxy # Configure and deploy the Nagios monitoring node(s). - hosts: monitoring roles: - base-apache - nagios .. note:: If you're not familiar with terms like playbooks and plays, you should review :ref:`working_with_playbooks`. In this playbook we have 5 plays. The first one targets ``all`` hosts and applies the ``common`` role to all of the hosts. This is for site-wide things like yum repository configuration, firewall configuration, and anything else that needs to apply to all of the servers. The next four plays run against specific host groups and apply specific roles to those servers. Along with the roles for Nagios monitoring, the database, and the web application, we've implemented a ``base-apache`` role that installs and configures a basic Apache setup. This is used by both the sample web application and the Nagios hosts. .. _lamp_roles: Reusable content: roles ======================= By now you should have a bit of understanding about roles and how they work in Ansible. Roles are a way to organize content: tasks, handlers, templates, and files, into reusable components. This example has six roles: ``common``, ``base-apache``, ``db``, ``haproxy``, ``nagios``, and ``web``. How you organize your roles is up to you and your application, but most sites will have one or more common roles that are applied to all systems, and then a series of application-specific roles that install and configure particular parts of the site. Roles can have variables and dependencies, and you can pass in parameters to roles to modify their behavior. You can read more about roles in the :ref:`playbooks_reuse_roles` section. .. _lamp_group_variables: Configuration: group variables ============================== Group variables are variables that are applied to groups of servers. They can be used in templates and in playbooks to customize behavior and to provide easily-changed settings and parameters. They are stored in a directory called ``group_vars`` in the same location as your inventory. Here is lamp_haproxy's ``group_vars/all`` file. As you might expect, these variables are applied to all of the machines in your inventory: .. code-block:: yaml --- httpd_port: 80 ntpserver: 192.0.2.23 This is a YAML file, and you can create lists and dictionaries for more complex variable structures. In this case, we are just setting two variables, one for the port for the web server, and one for the NTP server that our machines should use for time synchronization. Here's another group variables file. This is ``group_vars/dbservers`` which applies to the hosts in the ``dbservers`` group: .. code-block:: yaml --- mysqlservice: mysqld mysql_port: 3306 dbuser: root dbname: foodb upassword: usersecret If you look in the example, there are group variables for the ``webservers`` group and the ``lbservers`` group, similarly. These variables are used in a variety of places. You can use them in playbooks, like this, in ``roles/db/tasks/main.yml``: .. code-block:: yaml - name: Create Application Database mysql_db: name: "{{ dbname }}" state: present - name: Create Application DB User mysql_user: name: "{{ dbuser }}" password: "{{ upassword }}" priv: "*.*:ALL" host: '%' state: present You can also use these variables in templates, like this, in ``roles/common/templates/ntp.conf.j2``: .. code-block:: text driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 server {{ ntpserver }} includefile /etc/ntp/crypto/pw keys /etc/ntp/keys You can see that the variable substitution syntax of {{ and }} is the same for both templates and variables. The syntax inside the curly braces is Jinja2, and you can do all sorts of operations and apply different filters to the data inside. In templates, you can also use for loops and if statements to handle more complex situations, like this, in ``roles/common/templates/iptables.j2``: .. code-block:: jinja {% if inventory_hostname in groups['dbservers'] %} -A INPUT -p tcp --dport 3306 -j ACCEPT {% endif %} This is testing to see if the inventory name of the machine we're currently operating on (``inventory_hostname``) exists in the inventory group ``dbservers``. If so, that machine will get an iptables ACCEPT line for port 3306. Here's another example, from the same template: .. code-block:: jinja {% for host in groups['monitoring'] %} -A INPUT -p tcp -s {{ hostvars[host].ansible_default_ipv4.address }} --dport 5666 -j ACCEPT {% endfor %} This loops over all of the hosts in the group called ``monitoring``, and adds an ACCEPT line for each monitoring hosts' default IPv4 address to the current machine's iptables configuration, so that Nagios can monitor those hosts. You can learn a lot more about Jinja2 and its capabilities `here `_, and you can read more about Ansible variables in general in the :ref:`playbooks_variables` section. .. _lamp_rolling_upgrade: The rolling upgrade =================== Now you have a fully-deployed site with web servers, a load balancer, and monitoring. How do you update it? This is where Ansible's orchestration features come into play. While some applications use the term 'orchestration' to mean basic ordering or command-blasting, Ansible refers to orchestration as 'conducting machines like an orchestra', and has a pretty sophisticated engine for it. Ansible has the capability to do operations on multi-tier applications in a coordinated way, making it easy to orchestrate a sophisticated zero-downtime rolling upgrade of our web application. This is implemented in a separate playbook, called ``rolling_update.yml``. Looking at the playbook, you can see it is made up of two plays. The first play is very simple and looks like this: .. code-block:: yaml - hosts: monitoring tasks: [] What's going on here, and why are there no tasks? You might know that Ansible gathers "facts" from the servers before operating upon them. These facts are useful for all sorts of things: networking information, OS/distribution versions, and so on. In our case, we need to know something about all of the monitoring servers in our environment before we perform the update, so this simple play forces a fact-gathering step on our monitoring servers. You will see this pattern sometimes, and it's a useful trick to know. The next part is the update play. The first part looks like this: .. code-block:: yaml - hosts: webservers user: root serial: 1 This is just a normal play definition, operating on the ``webservers`` group. The ``serial`` keyword tells Ansible how many servers to operate on at once. If it's not specified, Ansible will parallelize these operations up to the default "forks" limit specified in the configuration file. But for a zero-downtime rolling upgrade, you may not want to operate on that many hosts at once. If you had just a handful of webservers, you may want to set ``serial`` to 1, for one host at a time. If you have 100, maybe you could set ``serial`` to 10, for ten at a time. Here is the next part of the update play: .. code-block:: yaml pre_tasks: - name: disable nagios alerts for this host webserver service nagios: action: disable_alerts host: "{{ inventory_hostname }}" services: webserver delegate_to: "{{ item }}" loop: "{{ groups.monitoring }}" - name: disable the server in haproxy shell: echo "disable server myapplb/{{ inventory_hostname }}" | socat stdio /var/lib/haproxy/stats delegate_to: "{{ item }}" loop: "{{ groups.lbservers }}" .. note:: - The ``serial`` keyword forces the play to be executed in 'batches'. Each batch counts as a full play with a subselection of hosts. This has some consequences on play behavior. For example, if all hosts in a batch fails, the play fails, which in turn fails the entire run. You should consider this when combining with ``max_fail_percentage``. The ``pre_tasks`` keyword just lets you list tasks to run before the roles are called. This will make more sense in a minute. If you look at the names of these tasks, you can see that we are disabling Nagios alerts and then removing the webserver that we are currently updating from the HAProxy load balancing pool. The ``delegate_to`` and ``loop`` arguments, used together, cause Ansible to loop over each monitoring server and load balancer, and perform that operation (delegate that operation) on the monitoring or load balancing server, "on behalf" of the webserver. In programming terms, the outer loop is the list of web servers, and the inner loop is the list of monitoring servers. Note that the HAProxy step looks a little complicated. We're using HAProxy in this example because it's freely available, though if you have (for instance) an F5 or Netscaler in your infrastructure (or maybe you have an AWS Elastic IP setup?), you can use Ansible modules to communicate with them instead. You might also wish to use other monitoring modules instead of nagios, but this just shows the main goal of the 'pre tasks' section -- take the server out of monitoring, and take it out of rotation. The next step simply re-applies the proper roles to the web servers. This will cause any configuration management declarations in ``web`` and ``base-apache`` roles to be applied to the web servers, including an update of the web application code itself. We don't have to do it this way--we could instead just purely update the web application, but this is a good example of how roles can be used to reuse tasks: .. code-block:: yaml roles: - common - base-apache - web Finally, in the ``post_tasks`` section, we reverse the changes to the Nagios configuration and put the web server back in the load balancing pool: .. code-block:: yaml post_tasks: - name: Enable the server in haproxy shell: echo "enable server myapplb/{{ inventory_hostname }}" | socat stdio /var/lib/haproxy/stats delegate_to: "{{ item }}" loop: "{{ groups.lbservers }}" - name: re-enable nagios alerts nagios: action: enable_alerts host: "{{ inventory_hostname }}" services: webserver delegate_to: "{{ item }}" loop: "{{ groups.monitoring }}" Again, if you were using a Netscaler or F5 or Elastic Load Balancer, you would just substitute in the appropriate modules instead. .. _lamp_end_notes: Managing other load balancers ============================= In this example, we use the simple HAProxy load balancer to front-end the web servers. It's easy to configure and easy to manage. As we have mentioned, Ansible has support for a variety of other load balancers like Citrix NetScaler, F5 BigIP, Amazon Elastic Load Balancers, and more. See the :ref:`working_with_modules` documentation for more information. For other load balancers, you may need to send shell commands to them (like we do for HAProxy above), or call an API, if your load balancer exposes one. For the load balancers for which Ansible has modules, you may want to run them as a ``local_action`` if they contact an API. You can read more about local actions in the :ref:`playbooks_delegation` section. Should you develop anything interesting for some hardware where there is not a module, it might make for a good contribution! .. _lamp_end_to_end: Continuous delivery end-to-end ============================== Now that you have an automated way to deploy updates to your application, how do you tie it all together? A lot of organizations use a continuous integration tool like `Jenkins `_ or `Atlassian Bamboo `_ to tie the development, test, release, and deploy steps together. You may also want to use a tool like `Gerrit `_ to add a code review step to commits to either the application code itself, or to your Ansible playbooks, or both. Depending on your environment, you might be deploying continuously to a test environment, running an integration test battery against that environment, and then deploying automatically into production. Or you could keep it simple and just use the rolling-update for on-demand deployment into test or production specifically. This is all up to you. For integration with Continuous Integration systems, you can easily trigger playbook runs using the ``ansible-playbook`` command line tool, or, if you're using AWX, the ``tower-cli`` command or the built-in REST API. (The tower-cli command 'joblaunch' will spawn a remote job over the REST API and is pretty slick). This should give you a good idea of how to structure a multi-tier application with Ansible, and orchestrate operations upon that app, with the eventual goal of continuous delivery to your customers. You could extend the idea of the rolling upgrade to lots of different parts of the app; maybe add front-end web servers along with application servers, for instance, or replace the SQL database with something like MongoDB or Riak. Ansible gives you the capability to easily manage complicated environments and automate common operations. .. seealso:: `lamp_haproxy example `_ The lamp_haproxy example discussed here. :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_reuse_roles` An introduction to playbook roles :ref:`playbooks_variables` An introduction to Ansible variables `Ansible.com: Continuous Delivery `_ An introduction to Continuous Delivery with Ansible ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.525556 ansible-core-2.12.0/docs/docsite/rst/user_guide/index.rst0000644000000000000000000001427400000000000023274 0ustar00rootroot00000000000000.. _user_guide_index: ########## User Guide ########## .. note:: **Making Open Source More Inclusive** Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. We ask that you open an issue or pull request if you come upon a term that we have missed. For more details, see `our CTO Chris Wright's message `_. Welcome to the Ansible User Guide! This guide covers how to work with Ansible, including using the command line, working with inventory, interacting with data, writing tasks, plays, and playbooks; executing playbooks, and reference materials. This page outlines the most common situations and questions that bring readers to this section. If you prefer a traditional table of contents, you can find one at the bottom of the page. Getting started =============== * I'd like an overview of how Ansible works. Where can I find: * a :ref:`quick video overview ` * a :ref:`text introduction ` * I'm ready to learn about Ansible. What :ref:`basic_concepts` do I need to learn? * I want to use Ansible without writing a playbook. How do I use :ref:`ad hoc commands `? Writing tasks, plays, and playbooks =================================== * I'm writing my first playbook. What should I :ref:`know before I begin `? * I have a specific use case for a task or play: * Executing tasks with elevated privileges or as a different user with :ref:`become ` * Repeating a task once for each item in a list with :ref:`loops ` * Executing tasks on a different machine with :ref:`delegation ` * Running tasks only when certain conditions apply with :ref:`conditionals ` and evaluating conditions with :ref:`tests ` * Grouping a set of tasks together with :ref:`blocks ` * Running tasks only when something has changed with :ref:`handlers ` * Changing the way Ansible :ref:`handles failures ` * Setting remote :ref:`environment values ` * I want to take advantage of the power of re-usable Ansible artifacts. How do I create re-usable :ref:`files ` and :ref:`roles `? * I need to incorporate one file or playbook inside another. What is the difference between :ref:`including and importing `? * I want to run selected parts of my playbook. How do I add and use :ref:`tags `? Working with inventory ====================== * I have a list of servers and devices I want to automate. How do I create :ref:`inventory ` to track them? * I use cloud services and constantly have servers and devices starting and stopping. How do I track them using :ref:`dynamic inventory `? * I want to automate specific sub-sets of my inventory. How do I use :ref:`patterns `? Interacting with data ===================== * I want to use a single playbook against multiple systems with different attributes. How do I use :ref:`variables ` to handle the differences? * I want to retrieve data about my systems. How do I access :ref:`Ansible facts `? * I need to access sensitive data like passwords with Ansible. How can I protect that data with :ref:`Ansible vault `? * I want to change the data I have, so I can use it in a task. How do I use :ref:`filters ` to transform my data? * I need to retrieve data from an external datastore. How do I use :ref:`lookups ` to access databases and APIs? * I want to ask playbook users to supply data. How do I get user input with :ref:`prompts `? * I use certain modules frequently. How do I streamline my inventory and playbooks by :ref:`setting default values for module parameters `? Executing playbooks =================== Once your playbook is ready to run, you may need to use these topics: * Executing "dry run" playbooks with :ref:`check mode and diff ` * Running playbooks while troubleshooting with :ref:`start and step ` * Correcting tasks during execution with the :ref:`Ansible debugger ` * Controlling how my playbook executes with :ref:`strategies and more ` * Running tasks, plays, and playbooks :ref:`asynchronously ` Advanced features and reference =============================== * Using :ref:`advanced syntax ` * Manipulating :ref:`complex data ` * Using :ref:`plugins ` * Using :ref:`playbook keywords ` * Using :ref:`command-line tools ` * Rejecting :ref:`specific modules ` * Module :ref:`maintenance ` Traditional Table of Contents ============================= If you prefer to read the entire User Guide, here's a list of the pages in order: .. toctree:: :maxdepth: 2 quickstart basic_concepts intro_getting_started intro_adhoc playbooks playbooks_intro playbooks_best_practices become playbooks_loops playbooks_delegation playbooks_conditionals playbooks_tests playbooks_blocks playbooks_handlers playbooks_error_handling playbooks_environment playbooks_reuse playbooks_reuse_roles playbooks_reuse_includes playbooks_tags intro_inventory intro_dynamic_inventory intro_patterns connection_details command_line_tools playbooks_variables playbooks_vars_facts vault playbooks_filters playbooks_lookups playbooks_prompts playbooks_module_defaults playbooks_checkmode playbooks_startnstep playbooks_debugger playbooks_strategies playbooks_async playbooks_advanced_syntax complex_data_manipulation plugin_filtering_config sample_setup modules ../plugins/plugins ../reference_appendices/playbooks_keywords intro_bsd windows collections_using ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro.rst0000644000000000000000000000116300000000000023311 0ustar00rootroot00000000000000:orphan: Introduction ============ Before we start exploring the main components of Ansible -- playbooks, configuration management, deployment, and orchestration -- we'll learn how to get Ansible installed and cover some basic concepts. We'll also go over how to execute ad hoc commands in parallel across your nodes using /usr/bin/ansible, and see what modules are available in Ansible's core (you can also write your own, which is covered later). .. toctree:: :maxdepth: 1 ../installation_guide/index ../dev_guide/overview_architecture ../installation_guide/intro_configuration intro_bsd intro_windows ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_adhoc.rst0000644000000000000000000002074000000000000024451 0ustar00rootroot00000000000000.. _intro_adhoc: ******************************* Introduction to ad hoc commands ******************************* An Ansible ad hoc command uses the `/usr/bin/ansible` command-line tool to automate a single task on one or more managed nodes. ad hoc commands are quick and easy, but they are not reusable. So why learn about ad hoc commands first? ad hoc commands demonstrate the simplicity and power of Ansible. The concepts you learn here will port over directly to the playbook language. Before reading and executing these examples, please read :ref:`intro_inventory`. .. contents:: :local: Why use ad hoc commands? ======================== ad hoc commands are great for tasks you repeat rarely. For example, if you want to power off all the machines in your lab for Christmas vacation, you could execute a quick one-liner in Ansible without writing a playbook. An ad hoc command looks like this: .. code-block:: bash $ ansible [pattern] -m [module] -a "[module options]" You can learn more about :ref:`patterns` and :ref:`modules` on other pages. Use cases for ad hoc tasks ========================== ad hoc tasks can be used to reboot servers, copy files, manage packages and users, and much more. You can use any Ansible module in an ad hoc task. ad hoc tasks, like playbooks, use a declarative model, calculating and executing the actions required to reach a specified final state. They achieve a form of idempotence by checking the current state before they begin and doing nothing unless the current state is different from the specified final state. Rebooting servers ----------------- The default module for the ``ansible`` command-line utility is the :ref:`ansible.builtin.command module`. You can use an ad hoc task to call the command module and reboot all web servers in Atlanta, 10 at a time. Before Ansible can do this, you must have all servers in Atlanta listed in a group called [atlanta] in your inventory, and you must have working SSH credentials for each machine in that group. To reboot all the servers in the [atlanta] group: .. code-block:: bash $ ansible atlanta -a "/sbin/reboot" By default Ansible uses only 5 simultaneous processes. If you have more hosts than the value set for the fork count, Ansible will talk to them, but it will take a little longer. To reboot the [atlanta] servers with 10 parallel forks: .. code-block:: bash $ ansible atlanta -a "/sbin/reboot" -f 10 /usr/bin/ansible will default to running from your user account. To connect as a different user: .. code-block:: bash $ ansible atlanta -a "/sbin/reboot" -f 10 -u username Rebooting probably requires privilege escalation. You can connect to the server as ``username`` and run the command as the ``root`` user by using the :ref:`become ` keyword: .. code-block:: bash $ ansible atlanta -a "/sbin/reboot" -f 10 -u username --become [--ask-become-pass] If you add ``--ask-become-pass`` or ``-K``, Ansible prompts you for the password to use for privilege escalation (sudo/su/pfexec/doas/etc). .. note:: The :ref:`command module ` does not support extended shell syntax like piping and redirects (although shell variables will always work). If your command requires shell-specific syntax, use the `shell` module instead. Read more about the differences on the :ref:`working_with_modules` page. So far all our examples have used the default 'command' module. To use a different module, pass ``-m`` for module name. For example, to use the :ref:`ansible.builtin.shell module `: .. code-block:: bash $ ansible raleigh -m ansible.builtin.shell -a 'echo $TERM' When running any command with the Ansible *ad hoc* CLI (as opposed to :ref:`Playbooks `), pay particular attention to shell quoting rules, so the local shell retains the variable and passes it to Ansible. For example, using double rather than single quotes in the above example would evaluate the variable on the box you were on. .. _file_transfer: Managing files -------------- An ad hoc task can harness the power of Ansible and SCP to transfer many files to multiple machines in parallel. To transfer a file directly to all servers in the [atlanta] group: .. code-block:: bash $ ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts" If you plan to repeat a task like this, use the :ref:`ansible.builtin.template` module in a playbook. The :ref:`ansible.builtin.file` module allows changing ownership and permissions on files. These same options can be passed directly to the ``copy`` module as well: .. code-block:: bash $ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600" $ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan" The ``file`` module can also create directories, similar to ``mkdir -p``: .. code-block:: bash $ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory" As well as delete directories (recursively) and delete files: .. code-block:: bash $ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c state=absent" .. _managing_packages: Managing packages ----------------- You might also use an ad hoc task to install, update, or remove packages on managed nodes using a package management module like yum. To ensure a package is installed without updating it: .. code-block:: bash $ ansible webservers -m ansible.builtin.yum -a "name=acme state=present" To ensure a specific version of a package is installed: .. code-block:: bash $ ansible webservers -m ansible.builtin.yum -a "name=acme-1.5 state=present" To ensure a package is at the latest version: .. code-block:: bash $ ansible webservers -m ansible.builtin.yum -a "name=acme state=latest" To ensure a package is not installed: .. code-block:: bash $ ansible webservers -m ansible.builtin.yum -a "name=acme state=absent" Ansible has modules for managing packages under many platforms. If there is no module for your package manager, you can install packages using the command module or create a module for your package manager. .. _users_and_groups: Managing users and groups ------------------------- You can create, manage, and remove user accounts on your managed nodes with ad hoc tasks: .. code-block:: bash $ ansible all -m ansible.builtin.user -a "name=foo password=" $ ansible all -m ansible.builtin.user -a "name=foo state=absent" See the :ref:`ansible.builtin.user ` module documentation for details on all of the available options, including how to manipulate groups and group membership. .. _managing_services: Managing services ----------------- Ensure a service is started on all webservers: .. code-block:: bash $ ansible webservers -m ansible.builtin.service -a "name=httpd state=started" Alternatively, restart a service on all webservers: .. code-block:: bash $ ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted" Ensure a service is stopped: .. code-block:: bash $ ansible webservers -m ansible.builtin.service -a "name=httpd state=stopped" .. _gathering_facts: Gathering facts --------------- Facts represent discovered variables about a system. You can use facts to implement conditional execution of tasks but also just to get ad hoc information about your systems. To see all facts: .. code-block:: bash $ ansible all -m ansible.builtin.setup You can also filter this output to display only certain facts, see the :ref:`ansible.builtin.setup ` module documentation for details. Patterns and ad-hoc commands ---------------------------- See the :ref:`patterns ` documentation for details on all of the available options, including how to limit using patterns in ad-hoc commands. Now that you understand the basic elements of Ansible execution, you are ready to learn to automate repetitive tasks using :ref:`Ansible Playbooks `. .. seealso:: :ref:`intro_configuration` All about the Ansible config file :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`working_with_playbooks` Using Ansible for configuration management & deployment `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_bsd.rst0000644000000000000000000001114000000000000024135 0ustar00rootroot00000000000000.. _working_with_bsd: Ansible and BSD =============== Managing BSD machines is different from managing other Unix-like machines. If you have managed nodes running BSD, review these topics. .. contents:: :local: Connecting to BSD nodes ----------------------- Ansible connects to managed nodes using OpenSSH by default. This works on BSD if you use SSH keys for authentication. However, if you use SSH passwords for authentication, Ansible relies on sshpass. Most versions of sshpass do not deal well with BSD login prompts, so when using SSH passwords against BSD machines, use ``paramiko`` to connect instead of OpenSSH. You can do this in ansible.cfg globally or you can set it as an inventory/group/host variable. For example: .. code-block:: text [freebsd] mybsdhost1 ansible_connection=paramiko .. _bootstrap_bsd: Bootstrapping BSD ----------------- Ansible is agentless by default, however, it requires Python on managed nodes. Only the :ref:`raw ` module will operate without Python. Although this module can be used to bootstrap Ansible and install Python on BSD variants (see below), it is very limited and the use of Python is required to make full use of Ansible's features. The following example installs Python which includes the json library required for full functionality of Ansible. On your control machine you can execute the following for most versions of FreeBSD: .. code-block:: bash ansible -m raw -a "pkg install -y python" mybsdhost1 Or for OpenBSD: .. code-block:: bash ansible -m raw -a "pkg_add python%3.8" Once this is done you can now use other Ansible modules apart from the ``raw`` module. .. note:: This example demonstrated using pkg on FreeBSD and pkg_add on OpenBSD, however you should be able to substitute the appropriate package tool for your BSD; the package name may also differ. Refer to the package list or documentation of the BSD variant you are using for the exact Python package name you intend to install. .. BSD_python_location: Setting the Python interpreter ------------------------------ To support a variety of Unix-like operating systems and distributions, Ansible cannot always rely on the existing environment or ``env`` variables to locate the correct Python binary. By default, modules point at ``/usr/bin/python`` as this is the most common location. On BSD variants, this path may differ, so it is advised to inform Ansible of the binary's location, through the ``ansible_python_interpreter`` inventory variable. For example: .. code-block:: text [freebsd:vars] ansible_python_interpreter=/usr/local/bin/python [openbsd:vars] ansible_python_interpreter=/usr/local/bin/python3.8 If you use additional plugins beyond those bundled with Ansible, you can set similar variables for ``bash``, ``perl`` or ``ruby``, depending on how the plugin is written. For example: .. code-block:: text [freebsd:vars] ansible_python_interpreter=/usr/local/bin/python ansible_perl_interpreter=/usr/bin/perl5 Which modules are available? ---------------------------- The majority of the core Ansible modules are written for a combination of Unix-like machines and other generic services, so most should function well on the BSDs with the obvious exception of those that are aimed at Linux-only technologies (such as LVG). Using BSD as the control node ----------------------------- Using BSD as the control machine is as simple as installing the Ansible package for your BSD variant or by following the ``pip`` or 'from source' instructions. .. _bsd_facts: BSD facts --------- Ansible gathers facts from the BSDs in a similar manner to Linux machines, but since the data, names and structures can vary for network, disks and other devices, one should expect the output to be slightly different yet still familiar to a BSD administrator. .. _bsd_contributions: BSD efforts and contributions ----------------------------- BSD support is important to us at Ansible. Even though the majority of our contributors use and target Linux we have an active BSD community and strive to be as BSD-friendly as possible. Please feel free to report any issues or incompatibilities you discover with BSD; pull requests with an included fix are also welcome! .. seealso:: :ref:`intro_adhoc` Examples of basic commands :ref:`working_with_playbooks` Learning ansible's configuration management language :ref:`developing_modules` How to write modules `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_dynamic_inventory.rst0000644000000000000000000002766000000000000027144 0ustar00rootroot00000000000000.. _intro_dynamic_inventory: .. _dynamic_inventory: ****************************** Working with dynamic inventory ****************************** .. contents:: :local: If your Ansible inventory fluctuates over time, with hosts spinning up and shutting down in response to business demands, the static inventory solutions described in :ref:`inventory` will not serve your needs. You may need to track hosts from multiple sources: cloud providers, LDAP, `Cobbler `_, and/or enterprise CMDB systems. Ansible integrates all of these options through a dynamic external inventory system. Ansible supports two ways to connect with external inventory: :ref:`inventory_plugins` and `inventory scripts`. Inventory plugins take advantage of the most recent updates to the Ansible core code. We recommend plugins over scripts for dynamic inventory. You can :ref:`write your own plugin ` to connect to additional dynamic inventory sources. You can still use inventory scripts if you choose. When we implemented inventory plugins, we ensured backwards compatibility through the script inventory plugin. The examples below illustrate how to use inventory scripts. If you prefer a GUI for handling dynamic inventory, the inventory database on AWX or :ref:`ansible_platform` syncs with all your dynamic inventory sources, provides web and REST access to the results, and offers a graphical inventory editor. With a database record of all of your hosts, you can correlate past event history and see which hosts have had failures on their last playbook runs. .. _cobbler_example: Inventory script example: Cobbler ================================= Ansible integrates seamlessly with `Cobbler `_, a Linux installation server originally written by Michael DeHaan and now led by James Cammarata, who works for Ansible. While primarily used to kickoff OS installations and manage DHCP and DNS, Cobbler has a generic layer that can represent data for multiple configuration management systems (even at the same time) and serve as a 'lightweight CMDB'. To tie your Ansible inventory to Cobbler, copy `this script `_ to ``/etc/ansible`` and ``chmod +x`` the file. Run ``cobblerd`` any time you use Ansible and use the ``-i`` command line option (for example, ``-i /etc/ansible/cobbler.py``) to communicate with Cobbler using Cobbler's XMLRPC API. Add a ``cobbler.ini`` file in ``/etc/ansible`` so Ansible knows where the Cobbler server is and some cache improvements can be used. For example: .. code-block:: text [cobbler] # Set Cobbler's hostname or IP address host = http://127.0.0.1/cobbler_api # API calls to Cobbler can be slow. For this reason, we cache the results of an API # call. Set this to the path you want cache files to be written to. Two files # will be written to this directory: # - ansible-cobbler.cache # - ansible-cobbler.index cache_path = /tmp # The number of seconds a cache file is considered valid. After this many # seconds, a new API call will be made, and the cache file will be updated. cache_max_age = 900 First test the script by running ``/etc/ansible/cobbler.py`` directly. You should see some JSON data output, but it may not have anything in it just yet. Let's explore what this does. In Cobbler, assume a scenario somewhat like the following: .. code-block:: bash cobbler profile add --name=webserver --distro=CentOS6-x86_64 cobbler profile edit --name=webserver --mgmt-classes="webserver" --ksmeta="a=2 b=3" cobbler system edit --name=foo --dns-name="foo.example.com" --mgmt-classes="atlanta" --ksmeta="c=4" cobbler system edit --name=bar --dns-name="bar.example.com" --mgmt-classes="atlanta" --ksmeta="c=5" In the example above, the system 'foo.example.com' is addressable by ansible directly, but is also addressable when using the group names 'webserver' or 'atlanta'. Since Ansible uses SSH, it contacts system foo over 'foo.example.com', only, never just 'foo'. Similarly, if you tried "ansible foo", it would not find the system... but "ansible 'foo*'" would do, because the system DNS name starts with 'foo'. The script provides more than host and group info. In addition, as a bonus, when the 'setup' module is run (which happens automatically when using playbooks), the variables 'a', 'b', and 'c' will all be auto-populated in the templates: .. code-block:: text # file: /srv/motd.j2 Welcome, I am templated with a value of a={{ a }}, b={{ b }}, and c={{ c }} Which could be executed just like this: .. code-block:: bash ansible webserver -m setup ansible webserver -m template -a "src=/tmp/motd.j2 dest=/etc/motd" .. note:: The name 'webserver' came from Cobbler, as did the variables for the config file. You can still pass in your own variables like normal in Ansible, but variables from the external inventory script will override any that have the same name. So, with the template above (``motd.j2``), this results in the following data being written to ``/etc/motd`` for system 'foo': .. code-block:: text Welcome, I am templated with a value of a=2, b=3, and c=4 And on system 'bar' (bar.example.com): .. code-block:: text Welcome, I am templated with a value of a=2, b=3, and c=5 And technically, though there is no major good reason to do it, this also works: .. code-block:: bash ansible webserver -m ansible.builtin.shell -a "echo {{ a }}" So, in other words, you can use those variables in arguments/actions as well. .. _openstack_example: Inventory script example: OpenStack =================================== If you use an OpenStack-based cloud, instead of manually maintaining your own inventory file, you can use the ``openstack_inventory.py`` dynamic inventory to pull information about your compute instances directly from OpenStack. You can download the latest version of the OpenStack inventory script `here `_. You can use the inventory script explicitly (by passing the `-i openstack_inventory.py` argument to Ansible) or implicitly (by placing the script at `/etc/ansible/hosts`). Explicit use of OpenStack inventory script ------------------------------------------ Download the latest version of the OpenStack dynamic inventory script and make it executable. .. code-block:: bash wget https://raw.githubusercontent.com/openstack/ansible-collections-openstack/master/scripts/inventory/openstack_inventory.py chmod +x openstack_inventory.py .. note:: Do not name it `openstack.py`. This name will conflict with imports from openstacksdk. Source an OpenStack RC file: .. code-block:: bash source openstack.rc .. note:: An OpenStack RC file contains the environment variables required by the client tools to establish a connection with the cloud provider, such as the authentication URL, user name, password and region name. For more information on how to download, create or source an OpenStack RC file, please refer to `Set environment variables using the OpenStack RC file `_. You can confirm the file has been successfully sourced by running a simple command, such as `nova list` and ensuring it returns no errors. .. note:: The OpenStack command line clients are required to run the `nova list` command. For more information on how to install them, please refer to `Install the OpenStack command-line clients `_. You can test the OpenStack dynamic inventory script manually to confirm it is working as expected: .. code-block:: bash ./openstack_inventory.py --list After a few moments you should see some JSON output with information about your compute instances. Once you confirm the dynamic inventory script is working as expected, you can tell Ansible to use the `openstack_inventory.py` script as an inventory file, as illustrated below: .. code-block:: bash ansible -i openstack_inventory.py all -m ansible.builtin.ping Implicit use of OpenStack inventory script ------------------------------------------ Download the latest version of the OpenStack dynamic inventory script, make it executable and copy it to `/etc/ansible/hosts`: .. code-block:: bash wget https://raw.githubusercontent.com/openstack/ansible-collections-openstack/master/scripts/inventory/openstack_inventory.py chmod +x openstack_inventory.py sudo cp openstack_inventory.py /etc/ansible/hosts Download the sample configuration file, modify it to suit your needs and copy it to `/etc/ansible/openstack.yml`: .. code-block:: bash wget https://raw.githubusercontent.com/openstack/ansible-collections-openstack/master/scripts/inventory/openstack.yml vi openstack.yml sudo cp openstack.yml /etc/ansible/ You can test the OpenStack dynamic inventory script manually to confirm it is working as expected: .. code-block:: bash /etc/ansible/hosts --list After a few moments you should see some JSON output with information about your compute instances. Refreshing the cache -------------------- Note that the OpenStack dynamic inventory script will cache results to avoid repeated API calls. To explicitly clear the cache, you can run the openstack_inventory.py (or hosts) script with the ``--refresh`` parameter: .. code-block:: bash ./openstack_inventory.py --refresh --list .. _other_inventory_scripts: Other inventory scripts ======================= In Ansible 2.10 and later, inventory scripts moved to their associated collections. Many are now in the `community.general scripts/inventory directory `_. We recommend you use :ref:`inventory_plugins` instead. .. _using_multiple_sources: Using inventory directories and multiple inventory sources ========================================================== If the location given to ``-i`` in Ansible is a directory (or as so configured in ``ansible.cfg``), Ansible can use multiple inventory sources at the same time. When doing so, it is possible to mix both dynamic and statically managed inventory sources in the same ansible run. Instant hybrid cloud! In an inventory directory, executable files are treated as dynamic inventory sources and most other files as static sources. Files which end with any of the following are ignored: .. code-block:: text ~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo You can replace this list with your own selection by configuring an ``inventory_ignore_extensions`` list in ``ansible.cfg``, or setting the :envvar:`ANSIBLE_INVENTORY_IGNORE` environment variable. The value in either case must be a comma-separated list of patterns, as shown above. Any ``group_vars`` and ``host_vars`` subdirectories in an inventory directory are interpreted as expected, making inventory directories a powerful way to organize different sets of configurations. See :ref:`using_multiple_inventory_sources` for more information. .. _static_groups_of_dynamic: Static groups of dynamic groups =============================== When defining groups of groups in the static inventory file, the child groups must also be defined in the static inventory file, otherwise ansible returns an error. If you want to define a static group of dynamic child groups, define the dynamic groups as empty in the static inventory file. For example: .. code-block:: text [tag_Name_staging_foo] [tag_Name_staging_bar] [staging:children] tag_Name_staging_foo tag_Name_staging_bar .. seealso:: :ref:`intro_inventory` All about static inventory files `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_getting_started.rst0000644000000000000000000002112400000000000026557 0ustar00rootroot00000000000000.. _intro_getting_started: *************** Getting Started *************** Now that you have read the :ref:`installation guide` and installed Ansible on a control node, you are ready to learn how Ansible works. A basic Ansible command or playbook: * selects machines to execute against from inventory * connects to those machines (or network devices, or other managed nodes), usually over SSH * copies one or more modules to the remote machines and starts execution there Ansible can do much more, but you should understand the most common use case before exploring all the powerful configuration, deployment, and orchestration features of Ansible. This page illustrates the basic process with a simple inventory and an ad hoc command. Once you understand how Ansible works, you can read more details about :ref:`ad hoc commands`, organize your infrastructure with :ref:`inventory`, and harness the full power of Ansible with :ref:`playbooks`. .. contents:: :local: Selecting machines from inventory ================================= Ansible reads information about which machines you want to manage from your inventory. Although you can pass an IP address to an ad hoc command, you need inventory to take advantage of the full flexibility and repeatability of Ansible. Action: create a basic inventory -------------------------------- For this basic inventory, edit (or create) ``/etc/ansible/hosts`` and add a few remote systems to it. For this example, use either IP addresses or FQDNs: .. code-block:: text 192.0.2.50 aserver.example.org bserver.example.org Beyond the basics ----------------- Your inventory can store much more than IPs and FQDNs. You can create :ref:`aliases`, set variable values for a single host with :ref:`host vars`, or set variable values for multiple hosts with :ref:`group vars`. .. _remote_connection_information: Connecting to remote nodes ========================== Ansible communicates with remote machines over the `SSH protocol `_. By default, Ansible uses native OpenSSH and connects to remote machines using your current user name, just as SSH does. Action: check your SSH connections ---------------------------------- Confirm that you can connect using SSH to all the nodes in your inventory using the same username. If necessary, add your public SSH key to the ``authorized_keys`` file on those systems. Beyond the basics ----------------- You can override the default remote user name in several ways, including: - passing the ``-u`` parameter at the command line - setting user information in your inventory file - setting user information in your configuration file - setting environment variables See :ref:`general_precedence_rules` for details on the (sometimes unintuitive) precedence of each method of passing user information. You can read more about connections in :ref:`connections`. Copying and executing modules ============================= Once it has connected, Ansible transfers the modules required by your command or playbook to the remote machine(s) for execution. Action: run your first Ansible commands --------------------------------------- Use the ping module to ping all the nodes in your inventory: .. code-block:: bash $ ansible all -m ping You should see output for each host in your inventory, similar to this: .. code-block:: ansible-output aserver.example.org | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } You can use ``-u`` as one way to specify the user to connect as, by default Ansible uses SSH, which defaults to the 'current user'. Now run a live command on all of your nodes: .. code-block:: bash $ ansible all -a "/bin/echo hello" You should see output for each host in your inventory, similar to this: .. code-block:: ansible-output aserver.example.org | CHANGED | rc=0 >> hello Action: Run your first playbook ------------------------------- Playbooks are used to pull together tasks into reusable units. Ansible does not store playbooks for you; they are simply YAML documents that you store and manage, passing them to Ansible to run as needed. In a directory of your choice you can create your first playbook in a file called mytask.yaml: .. code-block:: yaml --- - name: My playbook hosts: all tasks: - name: Leaving a mark command: "touch /tmp/ansible_was_here" You can run this command as follows: .. code-block:: bash $ ansible-playbook mytask.yaml and may see output like this: .. code-block:: ansible-output PLAY [My playbook] ********************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************** ok: [aserver.example.org] ok: [aserver.example.org] ok: [192.0.2.50] fatal: [192.0.2.50]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.0.2.50 port 22: No route to host", "unreachable": true} TASK [Leaving a mark] ******************************************************************************************************************* [WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [aserver.example.org] changed: [bserver.example.org] PLAY RECAP ****************************************************************************************************************************** aserver.example.org : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 bserver.example.org : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.0.2.50 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0 Read on to learn more about controlling which nodes your playbooks execute on, more sophisticated tasks, and the meaning of the output. Beyond the basics ----------------- By default Ansible uses SFTP to transfer files. If the machine or device you want to manage does not support SFTP, you can switch to SCP mode in :ref:`intro_configuration`. The files are placed in a temporary directory and executed from there. If you need privilege escalation (sudo and similar) to run a command, pass the ``become`` flags: .. code-block:: bash # as bruce $ ansible all -m ping -u bruce # as bruce, sudoing to root (sudo is default method) $ ansible all -m ping -u bruce --become # as bruce, sudoing to batman $ ansible all -m ping -u bruce --become --become-user batman You can read more about privilege escalation in :ref:`become`. Congratulations! You have contacted your nodes using Ansible. You used a basic inventory file and an ad hoc command to direct Ansible to connect to specific remote nodes, copy a module file there and execute it, and return output. You have a fully working infrastructure. Resources ================================= - `Product Demos `_ - `Katakoda `_ - `Workshops `_ - `Ansible Examples `_ - `Ansible Baseline `_ Next steps ========== Next you can read about more real-world cases in :ref:`intro_adhoc`, explore what you can do with different modules, or read about the Ansible :ref:`working_with_playbooks` language. Ansible is not just about running commands, it also has powerful configuration management and deployment features. .. seealso:: :ref:`intro_inventory` More information about inventory :ref:`intro_adhoc` Examples of basic commands :ref:`working_with_playbooks` Learning Ansible's configuration management language `Ansible Demos `_ Demonstrations of different Ansible usecases `RHEL Labs `_ Labs to provide further knowledge on different topics `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.526556 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_inventory.rst0000644000000000000000000007263700000000000025444 0ustar00rootroot00000000000000.. _intro_inventory: .. _inventory: *************************** How to build your inventory *************************** Ansible works against multiple managed nodes or "hosts" in your infrastructure at the same time, using a list or group of lists known as inventory. Once your inventory is defined, you use :ref:`patterns ` to select the hosts or groups you want Ansible to run against. The default location for inventory is a file called ``/etc/ansible/hosts``. You can specify a different inventory file at the command line using the ``-i `` option. You can also use multiple inventory files at the same time as described in :ref:`using_multiple_inventory_sources`, and/or pull inventory from dynamic or cloud sources or different formats (YAML, ini, and so on), as described in :ref:`intro_dynamic_inventory`. Introduced in version 2.4, Ansible has :ref:`inventory_plugins` to make this flexible and customizable. .. contents:: :local: .. _inventoryformat: Inventory basics: formats, hosts, and groups ============================================ The inventory file can be in one of many formats, depending on the inventory plugins you have. The most common formats are INI and YAML. A basic INI ``/etc/ansible/hosts`` might look like this: .. code-block:: text mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com The headings in brackets are group names, which are used in classifying hosts and deciding what hosts you are controlling at what times and for what purpose. Group names should follow the same guidelines as :ref:`valid_variable_names`. Here's that same basic inventory file in YAML format: .. code-block:: yaml all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com: .. _default_groups: Default groups -------------- There are two default groups: ``all`` and ``ungrouped``. The ``all`` group contains every host. The ``ungrouped`` group contains all hosts that don't have another group aside from ``all``. Every host will always belong to at least 2 groups (``all`` and ``ungrouped`` or ``all`` and some other group). Though ``all`` and ``ungrouped`` are always present, they can be implicit and not appear in group listings like ``group_names``. .. _host_multiple_groups: Hosts in multiple groups ------------------------ You can (and probably will) put each host in more than one group. For example a production webserver in a datacenter in Atlanta might be included in groups called [prod] and [atlanta] and [webservers]. You can create groups that track: * What - An application, stack or microservice (for example, database servers, web servers, and so on). * Where - A datacenter or region, to talk to local DNS, storage, and so on (for example, east, west). * When - The development stage, to avoid testing on production resources (for example, prod, test). Extending the previous YAML inventory to include what, when, and where would look like: .. code-block:: yaml all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com: east: hosts: foo.example.com: one.example.com: two.example.com: west: hosts: bar.example.com: three.example.com: prod: hosts: foo.example.com: one.example.com: two.example.com: test: hosts: bar.example.com: three.example.com: You can see that ``one.example.com`` exists in the ``dbservers``, ``east``, and ``prod`` groups. You can also use nested groups to simplify ``prod`` and ``test`` in this inventory, for the same result: .. code-block:: yaml all: hosts: mail.example.com: children: webservers: hosts: foo.example.com: bar.example.com: dbservers: hosts: one.example.com: two.example.com: three.example.com: east: hosts: foo.example.com: one.example.com: two.example.com: west: hosts: bar.example.com: three.example.com: prod: children: east: test: children: west: You can find more examples on how to organize your inventories and group your hosts in :ref:`inventory_setup_examples`. Adding ranges of hosts ---------------------- If you have a lot of hosts with a similar pattern, you can add them as a range rather than listing each hostname separately: In INI: .. code-block:: text [webservers] www[01:50].example.com In YAML: .. code-block:: yaml ... webservers: hosts: www[01:50].example.com: You can specify a stride (increments between sequence numbers) when defining a numeric range of hosts: In INI: .. code-block:: text [webservers] www[01:50:2].example.com In YAML: .. code-block:: yaml ... webservers: hosts: www[01:50:2].example.com: For numeric patterns, leading zeros can be included or removed, as desired. Ranges are inclusive. You can also define alphabetic ranges: .. code-block:: text [databases] db-[a:f].example.com .. _variables_in_inventory: Adding variables to inventory ============================= You can store variable values that relate to a specific host or group in inventory. To start with, you may add variables directly to the hosts and groups in your main inventory file. As you add more and more managed nodes to your Ansible inventory, however, you will likely want to store variables in separate host and group variable files. See :ref:`define_variables_in_inventory` for details. .. _host_variables: Assigning a variable to one machine: host variables =================================================== You can easily assign a variable to a single host, then use it later in playbooks. In INI: .. code-block:: text [atlanta] host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909 In YAML: .. code-block:: yaml atlanta: hosts: host1: http_port: 80 maxRequestsPerChild: 808 host2: http_port: 303 maxRequestsPerChild: 909 Unique values like non-standard SSH ports work well as host variables. You can add them to your Ansible inventory by adding the port number after the hostname with a colon: .. code-block:: text badwolf.example.com:5309 Connection variables also work well as host variables: .. code-block:: text [targets] localhost ansible_connection=local other1.example.com ansible_connection=ssh ansible_user=myuser other2.example.com ansible_connection=ssh ansible_user=myotheruser .. note:: If you list non-standard SSH ports in your SSH config file, the ``openssh`` connection will find and use them, but the ``paramiko`` connection will not. .. _inventory_aliases: Inventory aliases ----------------- You can also define aliases in your inventory: In INI: .. code-block:: text jumper ansible_port=5555 ansible_host=192.0.2.50 In YAML: .. code-block:: yaml ... hosts: jumper: ansible_port: 5555 ansible_host: 192.0.2.50 In the above example, running Ansible against the host alias "jumper" will connect to 192.0.2.50 on port 5555. See :ref:`behavioral inventory parameters ` to further customize the connection to hosts. .. note:: Values passed in the INI format using the ``key=value`` syntax are interpreted differently depending on where they are declared: * When declared inline with the host, INI values are interpreted as Python literal structures (strings, numbers, tuples, lists, dicts, booleans, None). Host lines accept multiple ``key=value`` parameters per line. Therefore they need a way to indicate that a space is part of a value rather than a separator. * When declared in a ``:vars`` section, INI values are interpreted as strings. For example ``var=FALSE`` would create a string equal to 'FALSE'. Unlike host lines, ``:vars`` sections accept only a single entry per line, so everything after the ``=`` must be the value for the entry. * If a variable value set in an INI inventory must be a certain type (for example, a string or a boolean value), always specify the type with a filter in your task. Do not rely on types set in INI inventories when consuming variables. * Consider using YAML format for inventory sources to avoid confusion on the actual type of a variable. The YAML inventory plugin processes variable values consistently and correctly. Generally speaking, this is not the best way to define variables that describe your system policy. Setting variables in the main inventory file is only a shorthand. See :ref:`splitting_out_vars` for guidelines on storing variable values in individual files in the 'host_vars' directory. .. _group_variables: Assigning a variable to many machines: group variables ====================================================== If all hosts in a group share a variable value, you can apply that variable to an entire group at once. In INI: .. code-block:: text [atlanta] host1 host2 [atlanta:vars] ntp_server=ntp.atlanta.example.com proxy=proxy.atlanta.example.com In YAML: .. code-block:: yaml atlanta: hosts: host1: host2: vars: ntp_server: ntp.atlanta.example.com proxy: proxy.atlanta.example.com Group variables are a convenient way to apply variables to multiple hosts at once. Before executing, however, Ansible always flattens variables, including inventory variables, to the host level. If a host is a member of multiple groups, Ansible reads variable values from all of those groups. If you assign different values to the same variable in different groups, Ansible chooses which value to use based on internal :ref:`rules for merging `. .. _subgroups: Inheriting variable values: group variables for groups of groups ---------------------------------------------------------------- You can make groups of groups using the ``:children`` suffix in INI or the ``children:`` entry in YAML. You can apply variables to these groups of groups using ``:vars`` or ``vars:``: In INI: .. code-block:: text [atlanta] host1 host2 [raleigh] host2 host3 [southeast:children] atlanta raleigh [southeast:vars] some_server=foo.southeast.example.com halon_system_timeout=30 self_destruct_countdown=60 escape_pods=2 [usa:children] southeast northeast southwest northwest In YAML: .. code-block:: yaml all: children: usa: children: southeast: children: atlanta: hosts: host1: host2: raleigh: hosts: host2: host3: vars: some_server: foo.southeast.example.com halon_system_timeout: 30 self_destruct_countdown: 60 escape_pods: 2 northeast: northwest: southwest: If you need to store lists or hash data, or prefer to keep host and group specific variables separate from the inventory file, see :ref:`splitting_out_vars`. Child groups have a couple of properties to note: - Any host that is member of a child group is automatically a member of the parent group. - A child group's variables will have higher precedence (override) a parent group's variables. - Groups can have multiple parents and children, but not circular relationships. - Hosts can also be in multiple groups, but there will only be **one** instance of a host, merging the data from the multiple groups. .. _splitting_out_vars: Organizing host and group variables =================================== Although you can store variables in the main inventory file, storing separate host and group variables files may help you organize your variable values more easily. Host and group variable files must use YAML syntax. Valid file extensions include '.yml', '.yaml', '.json', or no file extension. See :ref:`yaml_syntax` if you are new to YAML. Ansible loads host and group variable files by searching paths relative to the inventory file or the playbook file. If your inventory file at ``/etc/ansible/hosts`` contains a host named 'foosball' that belongs to two groups, 'raleigh' and 'webservers', that host will use variables in YAML files at the following locations: .. code-block:: bash /etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json' /etc/ansible/group_vars/webservers /etc/ansible/host_vars/foosball For example, if you group hosts in your inventory by datacenter, and each datacenter uses its own NTP server and database server, you can create a file called ``/etc/ansible/group_vars/raleigh`` to store the variables for the ``raleigh`` group: .. code-block:: yaml --- ntp_server: acme.example.org database_server: storage.example.org You can also create *directories* named after your groups or hosts. Ansible will read all the files in these directories in lexicographical order. An example with the 'raleigh' group: .. code-block:: bash /etc/ansible/group_vars/raleigh/db_settings /etc/ansible/group_vars/raleigh/cluster_settings All hosts in the 'raleigh' group will have the variables defined in these files available to them. This can be very useful to keep your variables organized when a single file gets too big, or when you want to use :ref:`Ansible Vault` on some group variables. You can also add ``group_vars/`` and ``host_vars/`` directories to your playbook directory. The ``ansible-playbook`` command looks for these directories in the current working directory by default. Other Ansible commands (for example, ``ansible``, ``ansible-console``, and so on) will only look for ``group_vars/`` and ``host_vars/`` in the inventory directory. If you want other commands to load group and host variables from a playbook directory, you must provide the ``--playbook-dir`` option on the command line. If you load inventory files from both the playbook directory and the inventory directory, variables in the playbook directory will override variables set in the inventory directory. Keeping your inventory file and variables in a git repo (or other version control) is an excellent way to track changes to your inventory and host variables. .. _how_we_merge: How variables are merged ======================== By default variables are merged/flattened to the specific host before a play is run. This keeps Ansible focused on the Host and Task, so groups don't really survive outside of inventory and host matching. By default, Ansible overwrites variables including the ones defined for a group and/or host (see :ref:`DEFAULT_HASH_BEHAVIOUR`). The order/precedence is (from lowest to highest): - all group (because it is the 'parent' of all other groups) - parent group - child group - host By default Ansible merges groups at the same parent/child level in ASCII order, and the last group loaded overwrites the previous groups. For example, an a_group will be merged with b_group and b_group vars that match will overwrite the ones in a_group. You can change this behavior by setting the group variable ``ansible_group_priority`` to change the merge order for groups of the same level (after the parent/child order is resolved). The larger the number, the later it will be merged, giving it higher priority. This variable defaults to ``1`` if not set. For example: .. code-block:: yaml a_group: vars: testvar: a ansible_group_priority: 10 b_group: vars: testvar: b In this example, if both groups have the same priority, the result would normally have been ``testvar == b``, but since we are giving the ``a_group`` a higher priority the result will be ``testvar == a``. .. note:: ``ansible_group_priority`` can only be set in the inventory source and not in group_vars/, as the variable is used in the loading of group_vars. .. _using_multiple_inventory_sources: Using multiple inventory sources ================================ You can target multiple inventory sources (directories, dynamic inventory scripts or files supported by inventory plugins) at the same time by giving multiple inventory parameters from the command line or by configuring :envvar:`ANSIBLE_INVENTORY`. This can be useful when you want to target normally separate environments, like staging and production, at the same time for a specific action. Target two sources from the command line like this: .. code-block:: bash ansible-playbook get_logs.yml -i staging -i production Keep in mind that if there are variable conflicts in the inventories, they are resolved according to the rules described in :ref:`how_we_merge` and :ref:`ansible_variable_precedence`. The merging order is controlled by the order of the inventory source parameters. If ``[all:vars]`` in staging inventory defines ``myvar = 1``, but production inventory defines ``myvar = 2``, the playbook will be run with ``myvar = 2``. The result would be reversed if the playbook was run with ``-i production -i staging``. **Aggregating inventory sources with a directory** You can also create an inventory by combining multiple inventory sources and source types under a directory. This can be useful for combining static and dynamic hosts and managing them as one inventory. The following inventory combines an inventory plugin source, a dynamic inventory script, and a file with static hosts: .. code-block:: text inventory/ openstack.yml # configure inventory plugin to get hosts from Openstack cloud dynamic-inventory.py # add additional hosts with dynamic inventory script static-inventory # add static hosts and groups group_vars/ all.yml # assign variables to all hosts You can target this inventory directory simply like this: .. code-block:: bash ansible-playbook example.yml -i inventory It can be useful to control the merging order of the inventory sources if there's variable conflicts or group of groups dependencies to the other inventory sources. The inventories are merged in ASCII order according to the filenames so the result can be controlled by adding prefixes to the files: .. code-block:: text inventory/ 01-openstack.yml # configure inventory plugin to get hosts from Openstack cloud 02-dynamic-inventory.py # add additional hosts with dynamic inventory script 03-static-inventory # add static hosts group_vars/ all.yml # assign variables to all hosts If ``01-openstack.yml`` defines ``myvar = 1`` for the group ``all``, ``02-dynamic-inventory.py`` defines ``myvar = 2``, and ``03-static-inventory`` defines ``myvar = 3``, the playbook will be run with ``myvar = 3``. For more details on inventory plugins and dynamic inventory scripts see :ref:`inventory_plugins` and :ref:`intro_dynamic_inventory`. .. _behavioral_parameters: Connecting to hosts: behavioral inventory parameters ==================================================== As described above, setting the following variables control how Ansible interacts with remote hosts. Host connection: .. include:: shared_snippets/SSH_password_prompt.txt ansible_connection Connection type to the host. This can be the name of any of ansible's connection plugins. SSH protocol types are ``smart``, ``ssh`` or ``paramiko``. The default is smart. Non-SSH based types are described in the next section. General for all connections: ansible_host The name of the host to connect to, if different from the alias you wish to give to it. ansible_port The connection port number, if not the default (22 for ssh) ansible_user The user name to use when connecting to the host ansible_password The password to use to authenticate to the host (never store this variable in plain text; always use a vault. See :ref:`tip_for_variables_and_vaults`) Specific to the SSH connection: ansible_ssh_private_key_file Private key file used by ssh. Useful if using multiple keys and you don't want to use SSH agent. ansible_ssh_common_args This setting is always appended to the default command line for :command:`sftp`, :command:`scp`, and :command:`ssh`. Useful to configure a ``ProxyCommand`` for a certain host (or group). ansible_sftp_extra_args This setting is always appended to the default :command:`sftp` command line. ansible_scp_extra_args This setting is always appended to the default :command:`scp` command line. ansible_ssh_extra_args This setting is always appended to the default :command:`ssh` command line. ansible_ssh_pipelining Determines whether or not to use SSH pipelining. This can override the ``pipelining`` setting in :file:`ansible.cfg`. ansible_ssh_executable (added in version 2.2) This setting overrides the default behavior to use the system :command:`ssh`. This can override the ``ssh_executable`` setting in :file:`ansible.cfg`. Privilege escalation (see :ref:`Ansible Privilege Escalation` for further details): ansible_become Equivalent to ``ansible_sudo`` or ``ansible_su``, allows to force privilege escalation ansible_become_method Allows to set privilege escalation method ansible_become_user Equivalent to ``ansible_sudo_user`` or ``ansible_su_user``, allows to set the user you become through privilege escalation ansible_become_password Equivalent to ``ansible_sudo_password`` or ``ansible_su_password``, allows you to set the privilege escalation password (never store this variable in plain text; always use a vault. See :ref:`tip_for_variables_and_vaults`) ansible_become_exe Equivalent to ``ansible_sudo_exe`` or ``ansible_su_exe``, allows you to set the executable for the escalation method selected ansible_become_flags Equivalent to ``ansible_sudo_flags`` or ``ansible_su_flags``, allows you to set the flags passed to the selected escalation method. This can be also set globally in :file:`ansible.cfg` in the ``sudo_flags`` option Remote host environment parameters: .. _ansible_shell_type: ansible_shell_type The shell type of the target system. You should not use this setting unless you have set the :ref:`ansible_shell_executable` to a non-Bourne (sh) compatible shell. By default commands are formatted using ``sh``-style syntax. Setting this to ``csh`` or ``fish`` will cause commands executed on target systems to follow those shell's syntax instead. .. _ansible_python_interpreter: ansible_python_interpreter The target host python path. This is useful for systems with more than one Python or not located at :command:`/usr/bin/python` such as \*BSD, or where :command:`/usr/bin/python` is not a 2.X series Python. We do not use the :command:`/usr/bin/env` mechanism as that requires the remote user's path to be set right and also assumes the :program:`python` executable is named python, where the executable might be named something like :program:`python2.6`. ansible_*_interpreter Works for anything such as ruby or perl and works just like :ref:`ansible_python_interpreter`. This replaces shebang of modules which will run on that host. .. versionadded:: 2.1 .. _ansible_shell_executable: ansible_shell_executable This sets the shell the ansible controller will use on the target machine, overrides ``executable`` in :file:`ansible.cfg` which defaults to :command:`/bin/sh`. You should really only change it if is not possible to use :command:`/bin/sh` (in other words, if :command:`/bin/sh` is not installed on the target machine or cannot be run from sudo.). Examples from an Ansible-INI host file: .. code-block:: text some_host ansible_port=2222 ansible_user=manager aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem freebsd_host ansible_python_interpreter=/usr/local/bin/python ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3 Non-SSH connection types ------------------------ As stated in the previous section, Ansible executes playbooks over SSH but it is not limited to this connection type. With the host specific parameter ``ansible_connection=``, the connection type can be changed. The following non-SSH based connectors are available: **local** This connector can be used to deploy the playbook to the control machine itself. **docker** This connector deploys the playbook directly into Docker containers using the local Docker client. The following parameters are processed by this connector: ansible_host The name of the Docker container to connect to. ansible_user The user name to operate within the container. The user must exist inside the container. ansible_become If set to ``true`` the ``become_user`` will be used to operate within the container. ansible_docker_extra_args Could be a string with any additional arguments understood by Docker, which are not command specific. This parameter is mainly used to configure a remote Docker daemon to use. Here is an example of how to instantly deploy to created containers: .. code-block:: yaml - name: Create a jenkins container community.general.docker_container: docker_host: myserver.net:4243 name: my_jenkins image: jenkins - name: Add the container to inventory ansible.builtin.add_host: name: my_jenkins ansible_connection: docker ansible_docker_extra_args: "--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243" ansible_user: jenkins changed_when: false - name: Create a directory for ssh keys delegate_to: my_jenkins ansible.builtin.file: path: "/var/jenkins_home/.ssh/jupiter" state: directory For a full list with available plugins and examples, see :ref:`connection_plugin_list`. .. note:: If you're reading the docs from the beginning, this may be the first example you've seen of an Ansible playbook. This is not an inventory file. Playbooks will be covered in great detail later in the docs. .. _inventory_setup_examples: Inventory setup examples ======================== See also :ref:`sample_setup`, which shows inventory along with playbooks and other Ansible artifacts. .. _inventory_setup-per_environment: Example: One inventory per environment -------------------------------------- If you need to manage multiple environments it's sometimes prudent to have only hosts of a single environment defined per inventory. This way, it is harder to, for instance, accidentally change the state of nodes inside the "test" environment when you actually wanted to update some "staging" servers. For the example mentioned above you could have an :file:`inventory_test` file: .. code-block:: ini [dbservers] db01.test.example.com db02.test.example.com [appservers] app01.test.example.com app02.test.example.com app03.test.example.com That file only includes hosts that are part of the "test" environment. Define the "staging" machines in another file called :file:`inventory_staging`: .. code-block:: ini [dbservers] db01.staging.example.com db02.staging.example.com [appservers] app01.staging.example.com app02.staging.example.com app03.staging.example.com To apply a playbook called :file:`site.yml` to all the app servers in the test environment, use the following command: .. code-block:: bash ansible-playbook -i inventory_test -l appservers site.yml .. _inventory_setup-per_function: Example: Group by function -------------------------- In the previous section you already saw an example for using groups in order to cluster hosts that have the same function. This allows you, for instance, to define firewall rules inside a playbook or role affecting only database servers: .. code-block:: yaml - hosts: dbservers tasks: - name: Allow access from 10.0.0.1 ansible.builtin.iptables: chain: INPUT jump: ACCEPT source: 10.0.0.1 .. _inventory_setup-per_location: Example: Group by location -------------------------- Other tasks might be focused on where a certain host is located. Let's say that ``db01.test.example.com`` and ``app01.test.example.com`` are located in DC1 while ``db02.test.example.com`` is in DC2: .. code-block:: ini [dc1] db01.test.example.com app01.test.example.com [dc2] db02.test.example.com In practice, you might even end up mixing all these setups as you might need to, on one day, update all nodes in a specific data center while, on another day, update all the application servers no matter their location. .. seealso:: :ref:`inventory_plugins` Pulling inventory from dynamic or static sources :ref:`intro_dynamic_inventory` Pulling inventory from dynamic sources, such as cloud providers :ref:`intro_adhoc` Examples of basic commands :ref:`working_with_playbooks` Learning Ansible's configuration, deployment, and orchestration language. `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_patterns.rst0000644000000000000000000001736700000000000025246 0ustar00rootroot00000000000000.. _intro_patterns: Patterns: targeting hosts and groups ==================================== When you execute Ansible through an ad hoc command or by running a playbook, you must choose which managed nodes or groups you want to execute against. Patterns let you run commands and playbooks against specific hosts and/or groups in your inventory. An Ansible pattern can refer to a single host, an IP address, an inventory group, a set of groups, or all hosts in your inventory. Patterns are highly flexible - you can exclude or require subsets of hosts, use wildcards or regular expressions, and more. Ansible executes on all inventory hosts included in the pattern. .. contents:: :local: Using patterns -------------- You use a pattern almost any time you execute an ad hoc command or a playbook. The pattern is the only element of an :ref:`ad hoc command` that has no flag. It is usually the second element: .. code-block:: bash ansible -m -a "" For example: .. code-block:: bash ansible webservers -m service -a "name=httpd state=restarted" In a playbook the pattern is the content of the ``hosts:`` line for each play: .. code-block:: yaml - name: hosts: For example: .. code-block:: yaml - name: restart webservers hosts: webservers Since you often want to run a command or playbook against multiple hosts at once, patterns often refer to inventory groups. Both the ad hoc command and the playbook above will execute against all machines in the ``webservers`` group. .. _common_patterns: Common patterns --------------- This table lists common patterns for targeting inventory hosts and groups. .. table:: :class: documentation-table ====================== ================================ =================================================== Description Pattern(s) Targets ====================== ================================ =================================================== All hosts all (or \*) One host host1 Multiple hosts host1:host2 (or host1,host2) One group webservers Multiple groups webservers:dbservers all hosts in webservers plus all hosts in dbservers Excluding groups webservers:!atlanta all hosts in webservers except those in atlanta Intersection of groups webservers:&staging any hosts in webservers that are also in staging ====================== ================================ =================================================== .. note:: You can use either a comma (``,``) or a colon (``:``) to separate a list of hosts. The comma is preferred when dealing with ranges and IPv6 addresses. Once you know the basic patterns, you can combine them. This example: .. code-block:: yaml webservers:dbservers:&staging:!phoenix targets all machines in the groups 'webservers' and 'dbservers' that are also in the group 'staging', except any machines in the group 'phoenix'. You can use wildcard patterns with FQDNs or IP addresses, as long as the hosts are named in your inventory by FQDN or IP address: .. code-block:: yaml 192.0.\* \*.example.com \*.com You can mix wildcard patterns and groups at the same time: .. code-block:: yaml one*.com:dbservers Limitations of patterns ----------------------- Patterns depend on inventory. If a host or group is not listed in your inventory, you cannot use a pattern to target it. If your pattern includes an IP address or hostname that does not appear in your inventory, you will see an error like this: .. code-block:: text [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: Could not match supplied host pattern, ignoring: *.not_in_inventory.com Your pattern must match your inventory syntax. If you define a host as an :ref:`alias`: .. code-block:: yaml atlanta: host1: http_port: 80 maxRequestsPerChild: 808 host: 127.0.0.2 you must use the alias in your pattern. In the example above, you must use ``host1`` in your pattern. If you use the IP address, you will once again get the error: .. code-block:: console [WARNING]: Could not match supplied host pattern, ignoring: 127.0.0.2 Advanced pattern options ------------------------ The common patterns described above will meet most of your needs, but Ansible offers several other ways to define the hosts and groups you want to target. Using variables in patterns ^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can use variables to enable passing group specifiers via the ``-e`` argument to ansible-playbook: .. code-block:: bash webservers:!{{ excluded }}:&{{ required }} Using group position in patterns ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can define a host or subset of hosts by its position in a group. For example, given the following group: .. code-block:: ini [webservers] cobweb webbing weber you can use subscripts to select individual hosts or ranges within the webservers group: .. code-block:: yaml webservers[0] # == cobweb webservers[-1] # == weber webservers[0:2] # == webservers[0],webservers[1] # == cobweb,webbing webservers[1:] # == webbing,weber webservers[:3] # == cobweb,webbing,weber Using regexes in patterns ^^^^^^^^^^^^^^^^^^^^^^^^^ You can specify a pattern as a regular expression by starting the pattern with ``~``: .. code-block:: yaml ~(web|db).*\.example\.com Patterns and ad-hoc commands ---------------------------- You can change the behavior of the patterns defined in ad-hoc commands using command-line options. You can also limit the hosts you target on a particular run with the ``--limit`` flag. * Limit to one host .. code-block:: bash $ ansible -m [module] -a "[module options]" --limit "host1" * Limit to multiple hosts .. code-block:: bash $ ansible -m [module] -a "[module options]" --limit "host1,host2" * Negated limit. Note that single quotes MUST be used to prevent bash interpolation. .. code-block:: bash $ ansible -m [module] -a "[module options]" --limit 'all:!host1' * Limit to host group .. code-block:: bash $ ansible -m [module] -a "[module options]" --limit 'group1' Patterns and ansible-playbook flags ----------------------------------- You can change the behavior of the patterns defined in playbooks using command-line options. For example, you can run a playbook that defines ``hosts: all`` on a single host by specifying ``-i 127.0.0.2,`` (note the trailing comma). This works even if the host you target is not defined in your inventory. You can also limit the hosts you target on a particular run with the ``--limit`` flag: .. code-block:: bash ansible-playbook site.yml --limit datacenter2 Finally, you can use ``--limit`` to read the list of hosts from a file by prefixing the file name with ``@``: .. code-block:: bash ansible-playbook site.yml --limit @retry_hosts.txt If :ref:`RETRY_FILES_ENABLED` is set to ``True``, a ``.retry`` file will be created after the ``ansible-playbook`` run containing a list of failed hosts from all plays. This file is overwritten each time ``ansible-playbook`` finishes running. ansible-playbook site.yml --limit @site.retry To apply your knowledge of patterns with Ansible commands and playbooks, read :ref:`intro_adhoc` and :ref:`playbooks_intro`. .. seealso:: :ref:`intro_adhoc` Examples of basic commands :ref:`working_with_playbooks` Learning the Ansible configuration management language `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/intro_windows.rst0000644000000000000000000000015200000000000025060 0ustar00rootroot00000000000000Windows Support =============== This page has been split up and moved to the new section :ref:`windows`. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/modules.rst0000644000000000000000000000221700000000000023627 0ustar00rootroot00000000000000.. _working_with_modules: Working With Modules ==================== .. toctree:: :maxdepth: 1 modules_intro modules_support ../reference_appendices/common_return_values Ansible ships with a number of modules (called the 'module library') that can be executed directly on remote hosts or through :ref:`Playbooks `. Users can also write their own modules. These modules can control system resources, like services, packages, or files (anything really), or handle executing system commands. .. seealso:: :ref:`intro_adhoc` Examples of using modules in /usr/bin/ansible :ref:`playbooks_intro` Introduction to using modules with /usr/bin/ansible-playbook :ref:`developing_modules_general` How to write your own modules :ref:`developing_api` Examples of using modules with the Python API :ref:`interpreter_discovery` Configuring the right Python interpreter on target hosts `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/modules_intro.rst0000644000000000000000000000464100000000000025045 0ustar00rootroot00000000000000.. _intro_modules: Introduction to modules ======================= Modules (also referred to as "task plugins" or "library plugins") are discrete units of code that can be used from the command line or in a playbook task. Ansible executes each module, usually on the remote managed node, and collects return values. In Ansible 2.10 and later, most modules are hosted in collections. You can execute modules from the command line. .. code-block:: shell-session ansible webservers -m service -a "name=httpd state=started" ansible webservers -m ping ansible webservers -m command -a "/sbin/reboot -t now" Each module supports taking arguments. Nearly all modules take ``key=value`` arguments, space delimited. Some modules take no arguments, and the command/shell modules simply take the string of the command you want to run. From playbooks, Ansible modules are executed in a very similar way. .. code-block:: yaml - name: reboot the servers command: /sbin/reboot -t now Another way to pass arguments to a module is using YAML syntax, also called 'complex args'. .. code-block:: yaml - name: restart webserver service: name: httpd state: restarted All modules return JSON format data. This means modules can be written in any programming language. Modules should be idempotent, and should avoid making any changes if they detect that the current state matches the desired final state. When used in an Ansible playbook, modules can trigger 'change events' in the form of notifying :ref:`handlers ` to run additional tasks. You can access the documentation for each module from the command line with the ansible-doc tool. .. code-block:: shell-session ansible-doc yum For a list of all available modules, see the :ref:`Collection docs `, or run the following at a command prompt. .. code-block:: shell-session ansible-doc -l .. seealso:: :ref:`intro_adhoc` Examples of using modules in /usr/bin/ansible :ref:`working_with_playbooks` Examples of using modules with /usr/bin/ansible-playbook :ref:`developing_modules` How to write your own modules :ref:`developing_api` Examples of using modules with the Python API `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/modules_support.rst0000644000000000000000000000747300000000000025434 0ustar00rootroot00000000000000.. _modules_support: **************************** Module Maintenance & Support **************************** If you are using a module and you discover a bug, you may want to know where to report that bug, who is responsible for fixing it, and how you can track changes to the module. If you are a Red Hat subscriber, you may want to know whether you can get support for the issue you are facing. Starting in Ansible 2.10, most modules live in collections. The distribution method for each collection reflects the maintenance and support for the modules in that collection. .. contents:: :local: Maintenance =========== .. table:: :class: documentation-table ============================= ========================================== ========================== Collection Code location Maintained by ============================= ========================================== ========================== ansible.builtin `ansible/ansible repo`_ on GitHub core team distributed on Galaxy various; follow ``repo`` link community or partners distributed on Automation Hub various; follow ``repo`` link content team or partners ============================= ========================================== ========================== .. _ansible/ansible repo: https://github.com/ansible/ansible/tree/devel/lib/ansible/modules Issue Reporting =============== If you find a bug that affects a plugin in the main Ansible repo, also known as ``ansible-core``: #. Confirm that you are running the latest stable version of Ansible or the devel branch. #. Look at the `issue tracker in the Ansible repo `_ to see if an issue has already been filed. #. Create an issue if one does not already exist. Include as much detail as you can about the behavior you discovered. If you find a bug that affects a plugin in a Galaxy collection: #. Find the collection on Galaxy. #. Find the issue tracker for the collection. #. Look there to see if an issue has already been filed. #. Create an issue if one does not already exist. Include as much detail as you can about the behavior you discovered. Some partner collections may be hosted in private repositories. If you are not sure whether the behavior you see is a bug, if you have questions, if you want to discuss development-oriented topics, or if you just want to get in touch, use one of our Google mailing lists or chat channels (using Matrix at ansible.im or using IRC at `irc.libera.chat `_) to :ref:`communicate with Ansiblers `. If you find a bug that affects a module in an Automation Hub collection: #. If the collection offers an Issue Tracker link on Automation Hub, click there and open an issue on the collection repository. If it does not, follow the standard process for reporting issues on the `Red Hat Customer Portal `_. You must have a subscription to the Red Hat Ansible Automation Platform to create an issue on the portal. Support ======= All plugins that remain in ``ansible-core`` and all collections hosted in Automation Hub are supported by Red Hat. No other plugins or collections are supported by Red Hat. If you have a subscription to the Red Hat Ansible Automation Platform, you can find more information and resources on the `Red Hat Customer Portal. `_ .. seealso:: :ref:`intro_adhoc` Examples of using modules in /usr/bin/ansible :ref:`working_with_playbooks` Examples of using modules with /usr/bin/ansible-playbook `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbook_pathing.rst0000644000000000000000000000616600000000000025520 0ustar00rootroot00000000000000:orphan: *********************** Search paths in Ansible *********************** You can control the paths Ansible searches to find resources on your control node (including configuration, modules, roles, ssh keys, and more) as well as resources on the remote nodes you are managing. Use absolute paths to tell Ansible where to find resources whenever you can. However, absolute paths are not always practical. This page covers how Ansible interprets relative search paths, along with ways to troubleshoot when Ansible cannot find the resource you need. .. contents:: :local: Config paths ============ By default these should be relative to the config file, some are specifically relative to the current working directory or the playbook and should have this noted in their description. Things like ssh keys are left to use the current working directory because it mirrors how the underlying tools would use it. Task paths ========== Task paths include two different scopes: task evaluation and task execution. For task evaluation, all paths are local, like in lookups. For task execution, which usually happens on the remote nodes, local paths do not usually apply. However, if a task uses an action plugin, it uses a local path. The template and copy modules are examples of modules that use action plugins, and therefore use local paths. The magic of 'local' paths -------------------------- Lookups and action plugins both use a special 'search magic' to find things, taking the current play into account, it uses from most specific to most general playbook dir in which a task is contained (this includes roles and includes). Using this magic, relative paths get attempted first with a 'files|templates|vars' appended (if not already present), depending on action being taken, 'files' is the default. (in other words, include_vars will use vars/). The paths will be searched from most specific to most general (in other words, role before play). dependent roles WILL be traversed (in other words, task is in role2, role2 is a dependency of role1, role2 will be looked at first, then role1, then play). i.e : .. code-block:: text role search path is rolename/{files|vars|templates}/, rolename/tasks/. play search path is playdir/{files|vars|templates}/, playdir/. By default, Ansible does not search the current working directory unless it happens to coincide with one of the paths above. If you `include` a task file from a role, it will NOT trigger role behavior, this only happens when running as a role, `include_role` will work. A new variable `ansible_search_path` var will have the search path used, in order (but without the appended subdirs). Using 5 "v"s (`-vvvvv`) should show the detail of the search as it happens. As for includes, they try the path of the included file first and fall back to the play/role that includes them. .. note:: The current working directory might vary depending on the connection plugin and if the action is local or remote. For the remote it is normally the directory on which the login shell puts the user. For local it is either the directory you executed ansible from or in some cases the playbook directory. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks.rst0000644000000000000000000000244700000000000024167 0ustar00rootroot00000000000000.. _working_with_playbooks: Working with playbooks ====================== Playbooks record and execute Ansible's configuration, deployment, and orchestration functions. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process. If Ansible modules are the tools in your workshop, playbooks are your instruction manuals, and your inventory of hosts are your raw material. At a basic level, playbooks can be used to manage configurations of and deployments to remote machines. At a more advanced level, they can sequence multi-tier rollouts involving rolling updates, and can delegate actions to other hosts, interacting with monitoring servers and load balancers along the way. Playbooks are designed to be human-readable and are developed in a basic text language. There are multiple ways to organize playbooks and the files they include, and we'll offer up some suggestions on that and making the most out of Ansible. You should look at `Example Playbooks `_ while reading along with the playbook documentation. These illustrate best practices as well as how to put many of the various concepts together. .. toctree:: :maxdepth: 2 playbooks_templating playbooks_special_topics guide_rolling_upgrade ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_advanced_syntax.rst0000644000000000000000000001067400000000000027423 0ustar00rootroot00000000000000.. _playbooks_advanced_syntax: *************** Advanced Syntax *************** The advanced YAML syntax examples on this page give you more control over the data placed in YAML files used by Ansible. You can find additional information about Python-specific YAML in the official `PyYAML Documentation `_. .. contents:: :local: .. _unsafe_strings: Unsafe or raw strings ===================== When handling values returned by lookup plugins, Ansible uses a data type called ``unsafe`` to block templating. Marking data as unsafe prevents malicious users from abusing Jinja2 templates to execute arbitrary code on target machines. The Ansible implementation ensures that unsafe values are never templated. It is more comprehensive than escaping Jinja2 with ``{% raw %} ... {% endraw %}`` tags. You can use the same ``unsafe`` data type in variables you define, to prevent templating errors and information disclosure. You can mark values supplied by :ref:`vars_prompts` as unsafe. You can also use ``unsafe`` in playbooks. The most common use cases include passwords that allow special characters like ``{`` or ``%``, and JSON arguments that look like templates but should not be templated. For example: .. code-block:: yaml --- mypassword: !unsafe 234%234{435lkj{{lkjsdf In a playbook: .. code-block:: yaml --- hosts: all vars: my_unsafe_variable: !unsafe 'unsafe % value' tasks: ... For complex variables such as hashes or arrays, use ``!unsafe`` on the individual elements: .. code-block:: yaml --- my_unsafe_array: - !unsafe 'unsafe element' - 'safe element' my_unsafe_hash: unsafe_key: !unsafe 'unsafe value' .. _anchors_and_aliases: YAML anchors and aliases: sharing variable values ================================================= `YAML anchors and aliases `_ help you define, maintain, and use shared variable values in a flexible way. You define an anchor with ``&``, then refer to it using an alias, denoted with ``*``. Here's an example that sets three values with an anchor, uses two of those values with an alias, and overrides the third value: .. code-block:: yaml --- ... vars: app1: jvm: &jvm_opts opts: '-Xms1G -Xmx2G' port: 1000 path: /usr/lib/app1 app2: jvm: <<: *jvm_opts path: /usr/lib/app2 ... Here, ``app1`` and ``app2`` share the values for ``opts`` and ``port`` using the anchor ``&jvm_opts`` and the alias ``*jvm_opts``. The value for ``path`` is merged by ``<<`` or `merge operator `_. Anchors and aliases also let you share complex sets of variable values, including nested variables. If you have one variable value that includes another variable value, you can define them separately: .. code-block:: yaml vars: webapp_version: 1.0 webapp_custom_name: ToDo_App-1.0 This is inefficient and, at scale, means more maintenance. To incorporate the version value in the name, you can use an anchor in ``app_version`` and an alias in ``custom_name``: .. code-block:: yaml vars: webapp: version: &my_version 1.0 custom_name: - "ToDo_App" - *my_version Now, you can re-use the value of ``app_version`` within the value of ``custom_name`` and use the output in a template: .. code-block:: yaml --- - name: Using values nested inside dictionary hosts: localhost vars: webapp: version: &my_version 1.0 custom_name: - "ToDo_App" - *my_version tasks: - name: Using Anchor value ansible.builtin.debug: msg: My app is called "{{ webapp.custom_name | join('-') }}". You've anchored the value of ``version`` with the ``&my_version`` anchor, and re-used it with the ``*my_version`` alias. Anchors and aliases let you access nested values inside dictionaries. .. seealso:: :ref:`playbooks_variables` All about variables :ref:`complex_data_manipulation` Doing complex data manipulation in Ansible `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_async.rst0000644000000000000000000001730700000000000025365 0ustar00rootroot00000000000000.. _playbooks_async: Asynchronous actions and polling ================================ By default Ansible runs tasks synchronously, holding the connection to the remote node open until the action is completed. This means within a playbook, each task blocks the next task by default, meaning subsequent tasks will not run until the current task completes. This behavior can create challenges. For example, a task may take longer to complete than the SSH session allows for, causing a timeout. Or you may want a long-running process to execute in the background while you perform other tasks concurrently. Asynchronous mode lets you control how long-running tasks execute. .. contents:: :local: Asynchronous ad hoc tasks ------------------------- You can execute long-running operations in the background with :ref:`ad hoc tasks `. For example, to execute ``long_running_operation`` asynchronously in the background, with a timeout (``-B``) of 3600 seconds, and without polling (``-P``): .. code-block:: bash $ ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff" To check on the job status later, use the ``async_status`` module, passing it the job ID that was returned when you ran the original job in the background: .. code-block:: bash $ ansible web1.example.com -m async_status -a "jid=488359678239.2844" Ansible can also check on the status of your long-running job automatically with polling. In most cases, Ansible will keep the connection to your remote node open between polls. To run for 30 minutes and poll for status every 60 seconds: .. code-block:: bash $ ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff" Poll mode is smart so all jobs will be started before polling begins on any machine. Be sure to use a high enough ``--forks`` value if you want to get all of your jobs started very quickly. After the time limit (in seconds) runs out (``-B``), the process on the remote nodes will be terminated. Asynchronous mode is best suited to long-running shell commands or software upgrades. Running the copy module asynchronously, for example, does not do a background file transfer. Asynchronous playbook tasks --------------------------- :ref:`Playbooks ` also support asynchronous mode and polling, with a simplified syntax. You can use asynchronous mode in playbooks to avoid connection timeouts or to avoid blocking subsequent tasks. The behavior of asynchronous mode in a playbook depends on the value of `poll`. Avoid connection timeouts: poll > 0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you want to set a longer timeout limit for a certain task in your playbook, use ``async`` with ``poll`` set to a positive value. Ansible will still block the next task in your playbook, waiting until the async task either completes, fails or times out. However, the task will only time out if it exceeds the timeout limit you set with the ``async`` parameter. To avoid timeouts on a task, specify its maximum runtime and how frequently you would like to poll for status: .. code-block:: yaml --- - hosts: all remote_user: root tasks: - name: Simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec ansible.builtin.command: /bin/sleep 15 async: 45 poll: 5 .. note:: The default poll value is set by the :ref:`DEFAULT_POLL_INTERVAL` setting. There is no default for the async time limit. If you leave off the 'async' keyword, the task runs synchronously, which is Ansible's default. .. note:: As of Ansible 2.3, async does not support check mode and will fail the task when run in check mode. See :ref:`check_mode_dry` on how to skip a task in check mode. .. note:: When an async task completes with polling enabled, the temporary async job cache file (by default in ~/.ansible_async/) is automatically removed. Run tasks concurrently: poll = 0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you want to run multiple tasks in a playbook concurrently, use ``async`` with ``poll`` set to 0. When you set ``poll: 0``, Ansible starts the task and immediately moves on to the next task without waiting for a result. Each async task runs until it either completes, fails or times out (runs longer than its ``async`` value). The playbook run ends without checking back on async tasks. To run a playbook task asynchronously: .. code-block:: yaml --- - hosts: all remote_user: root tasks: - name: Simulate long running op, allow to run for 45 sec, fire and forget ansible.builtin.command: /bin/sleep 15 async: 45 poll: 0 .. note:: Do not specify a poll value of 0 with operations that require exclusive locks (such as yum transactions) if you expect to run other commands later in the playbook against those same resources. .. note:: Using a higher value for ``--forks`` will result in kicking off asynchronous tasks even faster. This also increases the efficiency of polling. .. note:: When running with ``poll: 0``, Ansible will not automatically cleanup the async job cache file. You will need to manually clean this up with the :ref:`async_status ` module with ``mode: cleanup``. If you need a synchronization point with an async task, you can register it to obtain its job ID and use the :ref:`async_status ` module to observe it in a later task. For example: .. code-block:: yaml+jinja - name: Run an async task ansible.builtin.yum: name: docker-io state: present async: 1000 poll: 0 register: yum_sleeper - name: Check on an async task async_status: jid: "{{ yum_sleeper.ansible_job_id }}" register: job_result until: job_result.finished retries: 100 delay: 10 .. note:: If the value of ``async:`` is not high enough, this will cause the "check on it later" task to fail because the temporary status file that the ``async_status:`` is looking for will not have been written or no longer exist .. note:: Asynchronous playbook tasks always return changed. If the task is using a module that requires the user to annotate changes with ``changed_when``, ``creates``, and so on, then those should be added to the following ``async_status`` task. To run multiple asynchronous tasks while limiting the number of tasks running concurrently: .. code-block:: yaml+jinja ##################### # main.yml ##################### - name: Run items asynchronously in batch of two items vars: sleep_durations: - 1 - 2 - 3 - 4 - 5 durations: "{{ item }}" include_tasks: execute_batch.yml loop: "{{ sleep_durations | batch(2) | list }}" ##################### # execute_batch.yml ##################### - name: Async sleeping for batched_items ansible.builtin.command: sleep {{ async_item }} async: 45 poll: 0 loop: "{{ durations }}" loop_control: loop_var: "async_item" register: async_results - name: Check sync status async_status: jid: "{{ async_result_item.ansible_job_id }}" loop: "{{ async_results.results }}" loop_control: loop_var: "async_result_item" register: async_poll_results until: async_poll_results.finished retries: 30 .. seealso:: :ref:`playbooks_strategies` Options for controlling playbook execution :ref:`playbooks_intro` An introduction to playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5275562 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_best_practices.rst0000644000000000000000000002004200000000000027230 0ustar00rootroot00000000000000.. _playbooks_tips_and_tricks: .. _playbooks_best_practices: *************** Tips and tricks *************** These tips and tricks have helped us optimize our Ansible usage, and we offer them here as suggestions. We hope they will help you organize content, write playbooks, maintain inventory, and execute Ansible. Ultimately, though, you should use Ansible in the way that makes most sense for your organization and your goals. .. contents:: :local: General tips ============ These concepts apply to all Ansible activities and artifacts. Keep it simple -------------- Whenever you can, do things simply. Use advanced features only when necessary, and select the feature that best matches your use case. For example, you will probably not need ``vars``, ``vars_files``, ``vars_prompt`` and ``--extra-vars`` all at once, while also using an external inventory file. If something feels complicated, it probably is. Take the time to look for a simpler solution. Use version control ------------------- Keep your playbooks, roles, inventory, and variables files in git or another version control system and make commits to the repository when you make changes. Version control gives you an audit trail describing when and why you changed the rules that automate your infrastructure. Playbook tips ============= These tips help make playbooks and roles easier to read, maintain, and debug. Use whitespace -------------- Generous use of whitespace, for example, a blank line before each block or task, makes a playbook easy to scan. Always name tasks ----------------- Task names are optional, but extremely useful. In its output, Ansible shows you the name of each task it runs. Choose names that describe what each task does and why. Always mention the state ------------------------ For many modules, the 'state' parameter is optional. Different modules have different default settings for 'state', and some modules support several 'state' settings. Explicitly setting 'state=present' or 'state=absent' makes playbooks and roles clearer. Use comments ------------ Even with task names and explicit state, sometimes a part of a playbook or role (or inventory/variable file) needs more explanation. Adding a comment (any line starting with '#') helps others (and possibly yourself in future) understand what a play or task (or variable setting) does, how it does it, and why. Inventory tips ============== These tips help keep your inventory well organized. Use dynamic inventory with clouds --------------------------------- With cloud providers and other systems that maintain canonical lists of your infrastructure, use :ref:`dynamic inventory ` to retrieve those lists instead of manually updating static inventory files. With cloud resources, you can use tags to differentiate production and staging environments. Group inventory by function --------------------------- A system can be in multiple groups. See :ref:`intro_inventory` and :ref:`intro_patterns`. If you create groups named for the function of the nodes in the group, for example *webservers* or *dbservers*, your playbooks can target machines based on function. You can assign function-specific variables using the group variable system, and design Ansible roles to handle function-specific use cases. See :ref:`playbooks_reuse_roles`. Separate production and staging inventory ----------------------------------------- You can keep your production environment separate from development, test, and staging environments by using separate inventory files or directories for each environment. This way you pick with -i what you are targeting. Keeping all your environments in one file can lead to surprises! .. _tip_for_variables_and_vaults: Keep vaulted variables safely visible ------------------------------------- You should encrypt sensitive or secret variables with Ansible Vault. However, encrypting the variable names as well as the variable values makes it hard to find the source of the values. You can keep the names of your variables accessible (by ``grep``, for example) without exposing any secrets by adding a layer of indirection: #. Create a ``group_vars/`` subdirectory named after the group. #. Inside this subdirectory, create two files named ``vars`` and ``vault``. #. In the ``vars`` file, define all of the variables needed, including any sensitive ones. #. Copy all of the sensitive variables over to the ``vault`` file and prefix these variables with ``vault_``. #. Adjust the variables in the ``vars`` file to point to the matching ``vault_`` variables using jinja2 syntax: ``db_password: {{ vault_db_password }}``. #. Encrypt the ``vault`` file to protect its contents. #. Use the variable name from the ``vars`` file in your playbooks. When running a playbook, Ansible finds the variables in the unencrypted file, which pulls the sensitive variable values from the encrypted file. There is no limit to the number of variable and vault files or their names. Execution tricks ================ These tips apply to using Ansible, rather than to Ansible artifacts. Try it in staging first ----------------------- Testing changes in a staging environment before rolling them out in production is always a great idea. Your environments need not be the same size and you can use group variables to control the differences between those environments. Update in batches ----------------- Use the 'serial' keyword to control how many machines you update at once in the batch. See :ref:`playbooks_delegation`. .. _os_variance: Handling OS and distro differences ---------------------------------- Group variables files and the ``group_by`` module work together to help Ansible execute across a range of operating systems and distributions that require different settings, packages, and tools. The ``group_by`` module creates a dynamic group of hosts matching certain criteria. This group does not need to be defined in the inventory file. This approach lets you execute different tasks on different operating systems or distributions. For example:: --- - name: talk to all hosts just so we can learn about them hosts: all tasks: - name: Classify hosts depending on their OS distribution group_by: key: os_{{ ansible_facts['distribution'] }} # now just on the CentOS hosts... - hosts: os_CentOS gather_facts: False tasks: - # tasks that only happen on CentOS go in this play The first play categorizes all systems into dynamic groups based on the operating system name. Later plays can use these groups as patterns on the ``hosts`` line. You can also add group-specific settings in group vars files. All three names must match: the name created by the ``group_by`` task, the name of the pattern in subsequent plays, and the name of the group vars file. For example:: --- # file: group_vars/all asdf: 10 --- # file: group_vars/os_CentOS.yml asdf: 42 In this example, CentOS machines get the value of '42' for asdf, but other machines get '10'. This can be used not only to set variables, but also to apply certain roles to only certain systems. You can use the same setup with ``include_vars`` when you only need OS-specific variables, not tasks:: - hosts: all tasks: - name: Set OS distribution dependent variables include_vars: "os_{{ ansible_facts['distribution'] }}.yml" - debug: var: asdf This pulls in variables from the group_vars/os_CentOS.yml file. .. seealso:: :ref:`yaml_syntax` Learn about YAML syntax :ref:`working_with_playbooks` Review the basic playbook features :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_modules` Learn how to extend Ansible by writing your own modules :ref:`intro_patterns` Learn about how to select hosts `GitHub examples directory `_ Complete playbook files from the github project source `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_blocks.rst0000644000000000000000000001532400000000000025522 0ustar00rootroot00000000000000.. _playbooks_blocks: ****** Blocks ****** Blocks create logical groups of tasks. Blocks also offer ways to handle task errors, similar to exception handling in many programming languages. .. contents:: :local: Grouping tasks with blocks ========================== All tasks in a block inherit directives applied at the block level. Most of what you can apply to a single task (with the exception of loops) can be applied at the block level, so blocks make it much easier to set data or directives common to the tasks. The directive does not affect the block itself, it is only inherited by the tasks enclosed by a block. For example, a `when` statement is applied to the tasks within a block, not to the block itself. .. code-block:: YAML :emphasize-lines: 3 :caption: Block example with named tasks inside the block tasks: - name: Install, configure, and start Apache block: - name: Install httpd and memcached ansible.builtin.yum: name: - httpd - memcached state: present - name: Apply the foo config template ansible.builtin.template: src: templates/src.j2 dest: /etc/foo.conf - name: Start service bar and enable it ansible.builtin.service: name: bar state: started enabled: True when: ansible_facts['distribution'] == 'CentOS' become: true become_user: root ignore_errors: yes In the example above, the 'when' condition will be evaluated before Ansible runs each of the three tasks in the block. All three tasks also inherit the privilege escalation directives, running as the root user. Finally, ``ignore_errors: yes`` ensures that Ansible continues to execute the playbook even if some of the tasks fail. Names for blocks have been available since Ansible 2.3. We recommend using names in all tasks, within blocks or elsewhere, for better visibility into the tasks being executed when you run the playbook. .. _block_error_handling: Handling errors with blocks =========================== You can control how Ansible responds to task errors using blocks with ``rescue`` and ``always`` sections. Rescue blocks specify tasks to run when an earlier task in a block fails. This approach is similar to exception handling in many programming languages. Ansible only runs rescue blocks after a task returns a 'failed' state. Bad task definitions and unreachable hosts will not trigger the rescue block. .. _block_rescue: .. code-block:: YAML :emphasize-lines: 3,14 :caption: Block error handling example tasks: - name: Handle the error block: - name: Print a message ansible.builtin.debug: msg: 'I execute normally' - name: Force a failure ansible.builtin.command: /bin/false - name: Never print this ansible.builtin.debug: msg: 'I never execute, due to the above task failing, :-(' rescue: - name: Print when errors ansible.builtin.debug: msg: 'I caught an error, can do stuff here to fix it, :-)' You can also add an ``always`` section to a block. Tasks in the ``always`` section run no matter what the task status of the previous block is. .. _block_always: .. code-block:: YAML :emphasize-lines: 2,13 :caption: Block with always section - name: Always do X block: - name: Print a message ansible.builtin.debug: msg: 'I execute normally' - name: Force a failure ansible.builtin.command: /bin/false - name: Never print this ansible.builtin.debug: msg: 'I never execute :-(' always: - name: Always do this ansible.builtin.debug: msg: "This always executes, :-)" Together, these elements offer complex error handling. .. code-block:: YAML :emphasize-lines: 2,13,24 :caption: Block with all sections - name: Attempt and graceful roll back demo block: - name: Print a message ansible.builtin.debug: msg: 'I execute normally' - name: Force a failure ansible.builtin.command: /bin/false - name: Never print this ansible.builtin.debug: msg: 'I never execute, due to the above task failing, :-(' rescue: - name: Print when errors ansible.builtin.debug: msg: 'I caught an error' - name: Force a failure in middle of recovery! >:-) ansible.builtin.command: /bin/false - name: Never print this ansible.builtin.debug: msg: 'I also never execute :-(' always: - name: Always do this ansible.builtin.debug: msg: "This always executes" The tasks in the ``block`` execute normally. If any tasks in the block return ``failed``, the ``rescue`` section executes tasks to recover from the error. The ``always`` section runs regardless of the results of the ``block`` and ``rescue`` sections. If an error occurs in the block and the rescue task succeeds, Ansible reverts the failed status of the original task for the run and continues to run the play as if the original task had succeeded. The rescued task is considered successful, and does not trigger ``max_fail_percentage`` or ``any_errors_fatal`` configurations. However, Ansible still reports a failure in the playbook statistics. You can use blocks with ``flush_handlers`` in a rescue task to ensure that all handlers run even if an error occurs: .. code-block:: YAML :emphasize-lines: 3,12 :caption: Block run handlers in error handling tasks: - name: Attempt and graceful roll back demo block: - name: Print a message ansible.builtin.debug: msg: 'I execute normally' changed_when: yes notify: run me even after an error - name: Force a failure ansible.builtin.command: /bin/false rescue: - name: Make sure all handlers run meta: flush_handlers handlers: - name: Run me even after an error ansible.builtin.debug: msg: 'This handler runs even on error' .. versionadded:: 2.1 Ansible provides a couple of variables for tasks in the ``rescue`` portion of a block: ansible_failed_task The task that returned 'failed' and triggered the rescue. For example, to get the name use ``ansible_failed_task.name``. ansible_failed_result The captured return result of the failed task that triggered the rescue. This would equate to having used this var in the ``register`` keyword. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_checkmode.rst0000644000000000000000000001124500000000000026165 0ustar00rootroot00000000000000.. _check_mode_dry: ****************************************** Validating tasks: check mode and diff mode ****************************************** Ansible provides two modes of execution that validate tasks: check mode and diff mode. These modes can be used separately or together. They are useful when you are creating or editing a playbook or role and you want to know what it will do. In check mode, Ansible runs without making any changes on remote systems. Modules that support check mode report the changes they would have made. Modules that do not support check mode report nothing and do nothing. In diff mode, Ansible provides before-and-after comparisons. Modules that support diff mode display detailed information. You can combine check mode and diff mode for detailed validation of your playbook or role. .. contents:: :local: Using check mode ================ Check mode is just a simulation. It will not generate output for tasks that use :ref:`conditionals based on registered variables ` (results of prior tasks). However, it is great for validating configuration management playbooks that run on one node at a time. To run a playbook in check mode: .. code-block:: console ansible-playbook foo.yml --check .. _forcing_to_run_in_check_mode: Enforcing or preventing check mode on tasks ------------------------------------------- .. versionadded:: 2.2 If you want certain tasks to run in check mode always, or never, regardless of whether you run the playbook with or without ``--check``, you can add the ``check_mode`` option to those tasks: - To force a task to run in check mode, even when the playbook is called without ``--check``, set ``check_mode: yes``. - To force a task to run in normal mode and make changes to the system, even when the playbook is called with ``--check``, set ``check_mode: no``. For example: .. code-block:: yaml tasks: - name: This task will always make changes to the system ansible.builtin.command: /something/to/run --even-in-check-mode check_mode: no - name: This task will never make changes to the system ansible.builtin.lineinfile: line: "important config" dest: /path/to/myconfig.conf state: present check_mode: yes register: changes_to_important_config Running single tasks with ``check_mode: yes`` can be useful for testing Ansible modules, either to test the module itself or to test the conditions under which a module would make changes. You can register variables (see :ref:`playbooks_conditionals`) on these tasks for even more detail on the potential changes. .. note:: Prior to version 2.2 only the equivalent of ``check_mode: no`` existed. The notation for that was ``always_run: yes``. Skipping tasks or ignoring errors in check mode ----------------------------------------------- .. versionadded:: 2.1 If you want to skip a task or ignore errors on a task when you run Ansible in check mode, you can use a boolean magic variable ``ansible_check_mode``, which is set to ``True`` when Ansible runs in check mode. For example: .. code-block:: yaml tasks: - name: This task will be skipped in check mode ansible.builtin.git: repo: ssh://git@github.com/mylogin/hello.git dest: /home/mylogin/hello when: not ansible_check_mode - name: This task will ignore errors in check mode ansible.builtin.git: repo: ssh://git@github.com/mylogin/hello.git dest: /home/mylogin/hello ignore_errors: "{{ ansible_check_mode }}" .. _diff_mode: Using diff mode =============== The ``--diff`` option for ansible-playbook can be used alone or with ``--check``. When you run in diff mode, any module that supports diff mode reports the changes made or, if used with ``--check``, the changes that would have been made. Diff mode is most common in modules that manipulate files (for example, the template module) but other modules might also show 'before and after' information (for example, the user module). Diff mode produces a large amount of output, so it is best used when checking a single host at a time. For example: .. code-block:: console ansible-playbook foo.yml --check --diff --limit foo.example.com .. versionadded:: 2.4 Enforcing or preventing diff mode on tasks ------------------------------------------ Because the ``--diff`` option can reveal sensitive information, you can disable it for a task by specifying ``diff: no``. For example: .. code-block:: yaml tasks: - name: This task will not report a diff when the file changes ansible.builtin.template: src: secret.conf.j2 dest: /etc/secret.conf owner: root group: root mode: '0600' diff: no ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_conditionals.rst0000644000000000000000000005323200000000000026733 0ustar00rootroot00000000000000.. _playbooks_conditionals: ************ Conditionals ************ In a playbook, you may want to execute different tasks, or have different goals, depending on the value of a fact (data about the remote system), a variable, or the result of a previous task. You may want the value of some variables to depend on the value of other variables. Or you may want to create additional groups of hosts based on whether the hosts match other criteria. You can do all of these things with conditionals. Ansible uses Jinja2 :ref:`tests ` and :ref:`filters ` in conditionals. Ansible supports all the standard tests and filters, and adds some unique ones as well. .. note:: There are many options to control execution flow in Ansible. You can find more examples of supported conditionals at ``_. .. contents:: :local: .. _the_when_statement: Basic conditionals with ``when`` ================================ The simplest conditional statement applies to a single task. Create the task, then add a ``when`` statement that applies a test. The ``when`` clause is a raw Jinja2 expression without double curly braces (see :ref:`group_by_module`). When you run the task or playbook, Ansible evaluates the test for all hosts. On any host where the test passes (returns a value of True), Ansible runs that task. For example, if you are installing mysql on multiple machines, some of which have SELinux enabled, you might have a task to configure SELinux to allow mysql to run. You would only want that task to run on machines that have SELinux enabled: .. code-block:: yaml tasks: - name: Configure SELinux to start mysql on any port ansible.posix.seboolean: name: mysql_connect_any state: true persistent: yes when: ansible_selinux.status == "enabled" # all variables can be used directly in conditionals without double curly braces Conditionals based on ansible_facts ----------------------------------- Often you want to execute or skip a task based on facts. Facts are attributes of individual hosts, including IP address, operating system, the status of a filesystem, and many more. With conditionals based on facts: - You can install a certain package only when the operating system is a particular version. - You can skip configuring a firewall on hosts with internal IP addresses. - You can perform cleanup tasks only when a filesystem is getting full. See :ref:`commonly_used_facts` for a list of facts that frequently appear in conditional statements. Not all facts exist for all hosts. For example, the 'lsb_major_release' fact used in an example below only exists when the lsb_release package is installed on the target host. To see what facts are available on your systems, add a debug task to your playbook: .. code-block:: yaml - name: Show facts available on the system ansible.builtin.debug: var: ansible_facts Here is a sample conditional based on a fact: .. code-block:: yaml tasks: - name: Shut down Debian flavored systems ansible.builtin.command: /sbin/shutdown -t now when: ansible_facts['os_family'] == "Debian" If you have multiple conditions, you can group them with parentheses: .. code-block:: yaml tasks: - name: Shut down CentOS 6 and Debian 7 systems ansible.builtin.command: /sbin/shutdown -t now when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or (ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "7") You can use `logical operators `_ to combine conditions. When you have multiple conditions that all need to be true (that is, a logical ``and``), you can specify them as a list: .. code-block:: yaml tasks: - name: Shut down CentOS 6 systems ansible.builtin.command: /sbin/shutdown -t now when: - ansible_facts['distribution'] == "CentOS" - ansible_facts['distribution_major_version'] == "6" If a fact or variable is a string, and you need to run a mathematical comparison on it, use a filter to ensure that Ansible reads the value as an integer: .. code-block:: yaml tasks: - ansible.builtin.shell: echo "only on Red Hat 6, derivatives, and later" when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']['major_release'] | int >= 6 .. _conditionals_registered_vars: Conditions based on registered variables ---------------------------------------- Often in a playbook you want to execute or skip a task based on the outcome of an earlier task. For example, you might want to configure a service after it is upgraded by an earlier task. To create a conditional based on a registered variable: #. Register the outcome of the earlier task as a variable. #. Create a conditional test based on the registered variable. You create the name of the registered variable using the ``register`` keyword. A registered variable always contains the status of the task that created it as well as any output that task generated. You can use registered variables in templates and action lines as well as in conditional ``when`` statements. You can access the string contents of the registered variable using ``variable.stdout``. For example: .. code-block:: yaml - name: Test play hosts: all tasks: - name: Register a variable ansible.builtin.shell: cat /etc/motd register: motd_contents - name: Use the variable in conditional statement ansible.builtin.shell: echo "motd contains the word hi" when: motd_contents.stdout.find('hi') != -1 You can use registered results in the loop of a task if the variable is a list. If the variable is not a list, you can convert it into a list, with either ``stdout_lines`` or with ``variable.stdout.split()``. You can also split the lines by other fields: .. code-block:: yaml - name: Registered variable usage as a loop list hosts: all tasks: - name: Retrieve the list of home directories ansible.builtin.command: ls /home register: home_dirs - name: Add home dirs to the backup spooler ansible.builtin.file: path: /mnt/bkspool/{{ item }} src: /home/{{ item }} state: link loop: "{{ home_dirs.stdout_lines }}" # same as loop: "{{ home_dirs.stdout.split() }}" The string content of a registered variable can be empty. If you want to run another task only on hosts where the stdout of your registered variable is empty, check the registered variable's string contents for emptiness: .. code-block:: yaml - name: check registered variable for emptiness hosts: all tasks: - name: List contents of directory ansible.builtin.command: ls mydir register: contents - name: Check contents for emptiness ansible.builtin.debug: msg: "Directory is empty" when: contents.stdout == "" Ansible always registers something in a registered variable for every host, even on hosts where a task fails or Ansible skips a task because a condition is not met. To run a follow-up task on these hosts, query the registered variable for ``is skipped`` (not for "undefined" or "default"). See :ref:`registered_variables` for more information. Here are sample conditionals based on the success or failure of a task. Remember to ignore errors if you want Ansible to continue executing on a host when a failure occurs: .. code-block:: yaml tasks: - name: Register a variable, ignore errors and continue ansible.builtin.command: /bin/false register: result ignore_errors: true - name: Run only if the task that registered the "result" variable fails ansible.builtin.command: /bin/something when: result is failed - name: Run only if the task that registered the "result" variable succeeds ansible.builtin.command: /bin/something_else when: result is succeeded - name: Run only if the task that registered the "result" variable is skipped ansible.builtin.command: /bin/still/something_else when: result is skipped .. note:: Older versions of Ansible used ``success`` and ``fail``, but ``succeeded`` and ``failed`` use the correct tense. All of these options are now valid. Conditionals based on variables ------------------------------- You can also create conditionals based on variables defined in the playbooks or inventory. Because conditionals require boolean input (a test must evaluate as True to trigger the condition), you must apply the ``| bool`` filter to non boolean variables, such as string variables with content like 'yes', 'on', '1', or 'true'. You can define variables like this: .. code-block:: yaml vars: epic: true monumental: "yes" With the variables above, Ansible would run one of these tasks and skip the other: .. code-block:: yaml tasks: - name: Run the command if "epic" or "monumental" is true ansible.builtin.shell: echo "This certainly is epic!" when: epic or monumental | bool - name: Run the command if "epic" is false ansible.builtin.shell: echo "This certainly isn't epic!" when: not epic If a required variable has not been set, you can skip or fail using Jinja2's `defined` test. For example: .. code-block:: yaml tasks: - name: Run the command if "foo" is defined ansible.builtin.shell: echo "I've got '{{ foo }}' and am not afraid to use it!" when: foo is defined - name: Fail if "bar" is undefined ansible.builtin.fail: msg="Bailing out. This play requires 'bar'" when: bar is undefined This is especially useful in combination with the conditional import of vars files (see below). As the examples show, you do not need to use `{{ }}` to use variables inside conditionals, as these are already implied. .. _loops_and_conditionals: Using conditionals in loops --------------------------- If you combine a ``when`` statement with a :ref:`loop `, Ansible processes the condition separately for each item. This is by design, so you can execute the task on some items in the loop and skip it on other items. For example: .. code-block:: yaml tasks: - name: Run with items greater than 5 ansible.builtin.command: echo {{ item }} loop: [ 0, 2, 4, 6, 8, 10 ] when: item > 5 If you need to skip the whole task when the loop variable is undefined, use the `|default` filter to provide an empty iterator. For example, when looping over a list: .. code-block:: yaml - name: Skip the whole task when a loop variable is undefined ansible.builtin.command: echo {{ item }} loop: "{{ mylist|default([]) }}" when: item > 5 You can do the same thing when looping over a dict: .. code-block:: yaml - name: The same as above using a dict ansible.builtin.command: echo {{ item.key }} loop: "{{ query('dict', mydict|default({})) }}" when: item.value > 5 .. _loading_in_custom_facts: Loading custom facts -------------------- You can provide your own facts, as described in :ref:`developing_modules`. To run them, just make a call to your own custom fact gathering module at the top of your list of tasks, and variables returned there will be accessible to future tasks: .. code-block:: yaml tasks: - name: Gather site specific fact data action: site_facts - name: Use a custom fact ansible.builtin.command: /usr/bin/thingy when: my_custom_fact_just_retrieved_from_the_remote_system == '1234' .. _when_with_reuse: Conditionals with re-use ------------------------ You can use conditionals with re-usable tasks files, playbooks, or roles. Ansible executes these conditional statements differently for dynamic re-use (includes) and for static re-use (imports). See :ref:`playbooks_reuse` for more information on re-use in Ansible. .. _conditional_imports: Conditionals with imports ^^^^^^^^^^^^^^^^^^^^^^^^^ When you add a conditional to an import statement, Ansible applies the condition to all tasks within the imported file. This behavior is the equivalent of :ref:`tag_inheritance`. Ansible applies the condition to every task, and evaluates each task separately. For example, you might have a playbook called ``main.yml`` and a tasks file called ``other_tasks.yml``: .. code-block:: yaml # all tasks within an imported file inherit the condition from the import statement # main.yml - import_tasks: other_tasks.yml # note "import" when: x is not defined # other_tasks.yml - name: Set a variable ansible.builtin.set_fact: x: foo - name: Print a variable ansible.builtin.debug: var: x Ansible expands this at execution time to the equivalent of: .. code-block:: yaml - name: Set a variable if not defined ansible.builtin.set_fact: x: foo when: x is not defined # this task sets a value for x - name: Do the task if "x" is not defined ansible.builtin.debug: var: x when: x is not defined # Ansible skips this task, because x is now defined Thus if ``x`` is initially undefined, the ``debug`` task will be skipped. If this is not the behavior you want, use an ``include_*`` statement to apply a condition only to that statement itself. You can apply conditions to ``import_playbook`` as well as to the other ``import_*`` statements. When you use this approach, Ansible returns a 'skipped' message for every task on every host that does not match the criteria, creating repetitive output. In many cases the :ref:`group_by module ` can be a more streamlined way to accomplish the same objective; see :ref:`os_variance`. .. _conditional_includes: Conditionals with includes ^^^^^^^^^^^^^^^^^^^^^^^^^^ When you use a conditional on an ``include_*`` statement, the condition is applied only to the include task itself and not to any other tasks within the included file(s). To contrast with the example used for conditionals on imports above, look at the same playbook and tasks file, but using an include instead of an import: .. code-block:: yaml # Includes let you re-use a file to define a variable when it is not already defined # main.yml - include_tasks: other_tasks.yml when: x is not defined # other_tasks.yml - name: Set a variable ansible.builtin.set_fact: x: foo - name: Print a variable ansible.builtin.debug: var: x Ansible expands this at execution time to the equivalent of: .. code-block:: yaml # main.yml - include_tasks: other_tasks.yml when: x is not defined # if condition is met, Ansible includes other_tasks.yml # other_tasks.yml - name: Set a variable ansible.builtin.set_fact: x: foo # no condition applied to this task, Ansible sets the value of x to foo - name: Print a variable ansible.builtin.debug: var: x # no condition applied to this task, Ansible prints the debug statement By using ``include_tasks`` instead of ``import_tasks``, both tasks from ``other_tasks.yml`` will be executed as expected. For more information on the differences between ``include`` v ``import`` see :ref:`playbooks_reuse`. Conditionals with roles ^^^^^^^^^^^^^^^^^^^^^^^ There are three ways to apply conditions to roles: - Add the same condition or conditions to all tasks in the role by placing your ``when`` statement under the ``roles`` keyword. See the example in this section. - Add the same condition or conditions to all tasks in the role by placing your ``when`` statement on a static ``import_role`` in your playbook. - Add a condition or conditions to individual tasks or blocks within the role itself. This is the only approach that allows you to select or skip some tasks within the role based on your ``when`` statement. To select or skip tasks within the role, you must have conditions set on individual tasks or blocks, use the dynamic ``include_role`` in your playbook, and add the condition or conditions to the include. When you use this approach, Ansible applies the condition to the include itself plus any tasks in the role that also have that ``when`` statement. When you incorporate a role in your playbook statically with the ``roles`` keyword, Ansible adds the conditions you define to all the tasks in the role. For example: .. code-block:: yaml - hosts: webservers roles: - role: debian_stock_config when: ansible_facts['os_family'] == 'Debian' .. _conditional_variable_and_files: Selecting variables, files, or templates based on facts ------------------------------------------------------- Sometimes the facts about a host determine the values you want to use for certain variables or even the file or template you want to select for that host. For example, the names of packages are different on CentOS and on Debian. The configuration files for common services are also different on different OS flavors and versions. To load different variables file, templates, or other files based on a fact about the hosts: 1) name your vars files, templates, or files to match the Ansible fact that differentiates them 2) select the correct vars file, template, or file for each host with a variable based on that Ansible fact Ansible separates variables from tasks, keeping your playbooks from turning into arbitrary code with nested conditionals. This approach results in more streamlined and auditable configuration rules because there are fewer decision points to track. Selecting variables files based on facts ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can create a playbook that works on multiple platforms and OS versions with a minimum of syntax by placing your variable values in vars files and conditionally importing them. If you want to install Apache on some CentOS and some Debian servers, create variables files with YAML keys and values. For example: .. code-block:: yaml --- # for vars/RedHat.yml apache: httpd somethingelse: 42 Then import those variables files based on the facts you gather on the hosts in your playbook: .. code-block:: yaml --- - hosts: webservers remote_user: root vars_files: - "vars/common.yml" - [ "vars/{{ ansible_facts['os_family'] }}.yml", "vars/os_defaults.yml" ] tasks: - name: Make sure apache is started ansible.builtin.service: name: '{{ apache }}' state: started Ansible gathers facts on the hosts in the webservers group, then interpolates the variable "ansible_facts['os_family']" into a list of filenames. If you have hosts with Red Hat operating systems (CentOS, for example), Ansible looks for 'vars/RedHat.yml'. If that file does not exist, Ansible attempts to load 'vars/os_defaults.yml'. For Debian hosts, Ansible first looks for 'vars/Debian.yml', before falling back on 'vars/os_defaults.yml'. If no files in the list are found, Ansible raises an error. Selecting files and templates based on facts ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can use the same approach when different OS flavors or versions require different configuration files or templates. Select the appropriate file or template based on the variables assigned to each host. This approach is often much cleaner than putting a lot of conditionals into a single template to cover multiple OS or package versions. For example, you can template out a configuration file that is very different between, say, CentOS and Debian: .. code-block:: yaml - name: Template a file ansible.builtin.template: src: "{{ item }}" dest: /etc/myapp/foo.conf loop: "{{ query('first_found', { 'files': myfiles, 'paths': mypaths}) }}" vars: myfiles: - "{{ ansible_facts['distribution'] }}.conf" - default.conf mypaths: ['search_location_one/somedir/', '/opt/other_location/somedir/'] .. _commonly_used_facts: Commonly-used facts =================== The following Ansible facts are frequently used in conditionals. .. _ansible_distribution: ansible_facts['distribution'] ----------------------------- Possible values (sample, not complete list): .. code-block:: text Alpine Altlinux Amazon Archlinux ClearLinux Coreos CentOS Debian Fedora Gentoo Mandriva NA OpenWrt OracleLinux RedHat Slackware SLES SMGL SUSE Ubuntu VMwareESX .. See `OSDIST_LIST` .. _ansible_distribution_major_version: ansible_facts['distribution_major_version'] ------------------------------------------- The major version of the operating system. For example, the value is `16` for Ubuntu 16.04. .. _ansible_os_family: ansible_facts['os_family'] -------------------------- Possible values (sample, not complete list): .. code-block:: text AIX Alpine Altlinux Archlinux Darwin Debian FreeBSD Gentoo HP-UX Mandrake RedHat SGML Slackware Solaris Suse Windows .. Ansible checks `OS_FAMILY_MAP`; if there's no match, it returns the value of `platform.system()`. .. seealso:: :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`playbooks_variables` All about variables `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_debugger.rst0000644000000000000000000003227600000000000026036 0ustar00rootroot00000000000000.. _playbook_debugger: *************** Debugging tasks *************** Ansible offers a task debugger so you can fix errors during execution instead of editing your playbook and running it again to see if your change worked. You have access to all of the features of the debugger in the context of the task. You can check or set the value of variables, update module arguments, and re-run the task with the new variables and arguments. The debugger lets you resolve the cause of the failure and continue with playbook execution. .. contents:: :local: Enabling the debugger ===================== The debugger is not enabled by default. If you want to invoke the debugger during playbook execution, you must enable it first. Use one of these three methods to enable the debugger: * with the debugger keyword * in configuration or an environment variable, or * as a strategy Enabling the debugger with the ``debugger`` keyword --------------------------------------------------- .. versionadded:: 2.5 You can use the ``debugger`` keyword to enable (or disable) the debugger for a specific play, role, block, or task. This option is especially useful when developing or extending playbooks, plays, and roles. You can enable the debugger on new or updated tasks. If they fail, you can fix the errors efficiently. The ``debugger`` keyword accepts five values: .. table:: :class: documentation-table ========================= ====================================================== Value Result ========================= ====================================================== always Always invoke the debugger, regardless of the outcome never Never invoke the debugger, regardless of the outcome on_failed Only invoke the debugger if a task fails on_unreachable Only invoke the debugger if a host is unreachable on_skipped Only invoke the debugger if the task is skipped ========================= ====================================================== When you use the ``debugger`` keyword, the value you specify overrides any global configuration to enable or disable the debugger. If you define ``debugger`` at multiple levels, such as in a role and in a task, Ansible honors the most granular definition. The definition at the play or role level applies to all blocks and tasks within that play or role, unless they specify a different value. The definition at the block level overrides the definition at the play or role level, and applies to all tasks within that block, unless they specify a different value. The definition at the task level always applies to the task; it overrides the definitions at the block, play, or role level. Examples of using the ``debugger`` keyword ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Example of setting the ``debugger`` keyword on a task: .. code-block:: yaml - name: Execute a command ansible.builtin.command: "false" debugger: on_failed Example of setting the ``debugger`` keyword on a play: .. code-block:: yaml - name: My play hosts: all debugger: on_skipped tasks: - name: Execute a command ansible.builtin.command: "true" when: False Example of setting the ``debugger`` keyword at multiple levels: .. code-block:: yaml - name: Play hosts: all debugger: never tasks: - name: Execute a command ansible.builtin.command: "false" debugger: on_failed In this example, the debugger is set to ``never`` at the play level and to ``on_failed`` at the task level. If the task fails, Ansible invokes the debugger, because the definition on the task overrides the definition on its parent play. Enabling the debugger in configuration or an environment variable ----------------------------------------------------------------- .. versionadded:: 2.5 You can enable the task debugger globally with a setting in ansible.cfg or with an environment variable. The only options are ``True`` or ``False``. If you set the configuration option or environment variable to ``True``, Ansible runs the debugger on failed tasks by default. To enable the task debugger from ansible.cfg, add this setting to the defaults section: .. code-block:: yaml [defaults] enable_task_debugger = True To enable the task debugger with an environment variable, pass the variable when you run your playbook: .. code-block:: shell ANSIBLE_ENABLE_TASK_DEBUGGER=True ansible-playbook -i hosts site.yml When you enable the debugger globally, every failed task invokes the debugger, unless the role, play, block, or task explicitly disables the debugger. If you need more granular control over what conditions trigger the debugger, use the ``debugger`` keyword. Enabling the debugger as a strategy ----------------------------------- If you are running legacy playbooks or roles, you may see the debugger enabled as a :ref:`strategy `. You can do this at the play level, in ansible.cfg, or with the environment variable ``ANSIBLE_STRATEGY=debug``. For example: .. code-block:: yaml - hosts: test strategy: debug tasks: ... Or in ansible.cfg: .. code-block:: ini [defaults] strategy = debug .. note:: This backwards-compatible method, which matches Ansible versions before 2.5, may be removed in a future release. Resolving errors in the debugger ================================ After Ansible invokes the debugger, you can use the seven :ref:`debugger commands ` to resolve the error that Ansible encountered. Consider this example playbook, which defines the ``var1`` variable but uses the undefined ``wrong_var`` variable in a task by mistake. .. code-block:: yaml - hosts: test debugger: on_failed gather_facts: no vars: var1: value1 tasks: - name: Use a wrong variable ansible.builtin.ping: data={{ wrong_var }} If you run this playbook, Ansible invokes the debugger when the task fails. From the debug prompt, you can change the module arguments or the variables and run the task again. .. code-block:: ansible-output PLAY *************************************************************************** TASK [wrong variable] ********************************************************** fatal: [192.0.2.10]: FAILED! => {"failed": true, "msg": "ERROR! 'wrong_var' is undefined"} Debugger invoked [192.0.2.10] TASK: wrong variable (debug)> p result._result {'failed': True, 'msg': 'The task includes an option with an undefined variable. The error ' "was: 'wrong_var' is undefined\n" '\n' 'The error appears to have been in ' "'playbooks/debugger.yml': line 7, " 'column 7, but may\n' 'be elsewhere in the file depending on the exact syntax problem.\n' '\n' 'The offending line appears to be:\n' '\n' ' tasks:\n' ' - name: wrong variable\n' ' ^ here\n'} [192.0.2.10] TASK: wrong variable (debug)> p task.args {u'data': u'{{ wrong_var }}'} [192.0.2.10] TASK: wrong variable (debug)> task.args['data'] = '{{ var1 }}' [192.0.2.10] TASK: wrong variable (debug)> p task.args {u'data': '{{ var1 }}'} [192.0.2.10] TASK: wrong variable (debug)> redo ok: [192.0.2.10] PLAY RECAP ********************************************************************* 192.0.2.10 : ok=1 changed=0 unreachable=0 failed=0 Changing the task arguments in the debugger to use ``var1`` instead of ``wrong_var`` makes the task run successfully. .. _available_commands: Available debug commands ======================== You can use these seven commands at the debug prompt: .. table:: :class: documentation-table ========================== ============ ========================================================= Command Shortcut Action ========================== ============ ========================================================= print p Print information about the task task.args[*key*] = *value* no shortcut Update module arguments task_vars[*key*] = *value* no shortcut Update task variables (you must ``update_task`` next) update_task u Recreate a task with updated task variables redo r Run the task again continue c Continue executing, starting with the next task quit q Quit the debugger ========================== ============ ========================================================= For more details, see the individual descriptions and examples below. .. _pprint_command: Print command ------------- ``print *task/task.args/task_vars/host/result*`` prints information about the task. .. code-block:: ansible-output [192.0.2.10] TASK: install package (debug)> p task TASK: install package [192.0.2.10] TASK: install package (debug)> p task.args {u'name': u'{{ pkg_name }}'} [192.0.2.10] TASK: install package (debug)> p task_vars {u'ansible_all_ipv4_addresses': [u'192.0.2.10'], u'ansible_architecture': u'x86_64', ... } [192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] u'bash' [192.0.2.10] TASK: install package (debug)> p host 192.0.2.10 [192.0.2.10] TASK: install package (debug)> p result._result {'_ansible_no_log': False, 'changed': False, u'failed': True, ... u'msg': u"No package matching 'not_exist' is available"} .. _update_args_command: Update args command ------------------- ``task.args[*key*] = *value*`` updates a module argument. This sample playbook has an invalid package name. .. code-block:: yaml - hosts: test strategy: debug gather_facts: yes vars: pkg_name: not_exist tasks: - name: Install a package ansible.builtin.apt: name={{ pkg_name }} When you run the playbook, the invalid package name triggers an error, and Ansible invokes the debugger. You can fix the package name by viewing, then updating the module argument. .. code-block:: ansible-output [192.0.2.10] TASK: install package (debug)> p task.args {u'name': u'{{ pkg_name }}'} [192.0.2.10] TASK: install package (debug)> task.args['name'] = 'bash' [192.0.2.10] TASK: install package (debug)> p task.args {u'name': 'bash'} [192.0.2.10] TASK: install package (debug)> redo After you update the module argument, use ``redo`` to run the task again with the new args. .. _update_vars_command: Update vars command ------------------- ``task_vars[*key*] = *value*`` updates the ``task_vars``. You could fix the playbook above by viewing, then updating the task variables instead of the module args. .. code-block:: ansible-output [192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] u'not_exist' [192.0.2.10] TASK: install package (debug)> task_vars['pkg_name'] = 'bash' [192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] 'bash' [192.0.2.10] TASK: install package (debug)> update_task [192.0.2.10] TASK: install package (debug)> redo After you update the task variables, you must use ``update_task`` to load the new variables before using ``redo`` to run the task again. .. note:: In 2.5 this was updated from ``vars`` to ``task_vars`` to avoid conflicts with the ``vars()`` python function. .. _update_task_command: Update task command ------------------- .. versionadded:: 2.8 ``u`` or ``update_task`` recreates the task from the original task data structure and templates with updated task variables. See the entry :ref:`update_vars_command` for an example of use. .. _redo_command: Redo command ------------ ``r`` or ``redo`` runs the task again. .. _continue_command: Continue command ---------------- ``c`` or ``continue`` continues executing, starting with the next task. .. _quit_command: Quit command ------------ ``q`` or ``quit`` quits the debugger. The playbook execution is aborted. How the debugger interacts with the free strategy ================================================= With the default ``linear`` strategy enabled, Ansible halts execution while the debugger is active, and runs the debugged task immediately after you enter the ``redo`` command. With the ``free`` strategy enabled, however, Ansible does not wait for all hosts, and may queue later tasks on one host before a task fails on another host. With the ``free`` strategy, Ansible does not queue or execute any tasks while the debugger is active. However, all queued tasks remain in the queue and run as soon as you exit the debugger. If you use ``redo`` to reschedule a task from the debugger, other queued tasks may execute before your rescheduled task. For more information about strategies, see :ref:`playbooks_strategies`. .. seealso:: :ref:`playbooks_start_and_step` Running playbooks while debugging or testing :ref:`playbooks_intro` An introduction to playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_delegation.rst0000644000000000000000000001703100000000000026355 0ustar00rootroot00000000000000.. _playbooks_delegation: Controlling where tasks run: delegation and local actions ========================================================= By default Ansible gathers facts and executes all tasks on the machines that match the ``hosts`` line of your playbook. This page shows you how to delegate tasks to a different machine or group, delegate facts to specific machines or groups, or run an entire playbook locally. Using these approaches, you can manage inter-related environments precisely and efficiently. For example, when updating your webservers, you might need to remove them from a load-balanced pool temporarily. You cannot perform this task on the webservers themselves. By delegating the task to localhost, you keep all the tasks within the same play. .. contents:: :local: Tasks that cannot be delegated ------------------------------ Some tasks always execute on the controller. These tasks, including ``include``, ``add_host``, and ``debug``, cannot be delegated. .. _delegation: Delegating tasks ---------------- If you want to perform a task on one host with reference to other hosts, use the ``delegate_to`` keyword on a task. This is ideal for managing nodes in a load balanced pool or for controlling outage windows. You can use delegation with the :ref:`serial ` keyword to control the number of hosts executing at one time: .. code-block:: yaml --- - hosts: webservers serial: 5 tasks: - name: Take out of load balancer pool ansible.builtin.command: /usr/bin/take_out_of_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 - name: Actual steps would go here ansible.builtin.yum: name: acme-web-stack state: latest - name: Add back to load balancer pool ansible.builtin.command: /usr/bin/add_back_to_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 The first and third tasks in this play run on 127.0.0.1, which is the machine running Ansible. There is also a shorthand syntax that you can use on a per-task basis: ``local_action``. Here is the same playbook as above, but using the shorthand syntax for delegating to 127.0.0.1: .. code-block:: yaml --- # ... tasks: - name: Take out of load balancer pool local_action: ansible.builtin.command /usr/bin/take_out_of_pool {{ inventory_hostname }} # ... - name: Add back to load balancer pool local_action: ansible.builtin.command /usr/bin/add_back_to_pool {{ inventory_hostname }} You can use a local action to call 'rsync' to recursively copy files to the managed servers: .. code-block:: yaml --- # ... tasks: - name: Recursively copy files from management server to target local_action: ansible.builtin.command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/ Note that you must have passphrase-less SSH keys or an ssh-agent configured for this to work, otherwise rsync asks for a passphrase. To specify more arguments, use the following syntax: .. code-block:: yaml --- # ... tasks: - name: Send summary mail local_action: module: community.general.mail subject: "Summary Mail" to: "{{ mail_recipient }}" body: "{{ mail_body }}" run_once: True .. note:: - The `ansible_host` variable and other connection variables, if present, reflects information about the host a task is delegated to, not the inventory_hostname. .. warning:: Although you can ``delegate_to`` a host that does not exist in inventory (by adding IP address, DNS name or whatever requirement the connection plugin has), doing so does not add the host to your inventory and might cause issues. Hosts delegated to in this way do not inherit variables from the "all" group', so variables like connection user and key are missing. If you must ``delegate_to`` a non-inventory host, use the :ref:`add host module `. .. _delegate_parallel: Delegation and parallel execution --------------------------------- By default Ansible tasks are executed in parallel. Delegating a task does not change this and does not handle concurrency issues (multiple forks writing to the same file). Most commonly, users are affected by this when updating a single file on a single delegated to host for all hosts (using the ``copy``, ``template``, or ``lineinfile`` modules, for example). They will still operate in parallel forks (default 5) and overwrite each other. This can be handled in several ways: .. code-block:: yaml - name: "handle concurrency with a loop on the hosts with `run_once: true`" lineinfile: "" run_once: true loop: '{{ ansible_play_hosts_all }}' By using an intermediate play with `serial: 1` or using `throttle: 1` at task level, for more detail see :ref:`playbooks_strategies` .. _delegate_facts: Delegating facts ---------------- Delegating Ansible tasks is like delegating tasks in the real world - your groceries belong to you, even if someone else delivers them to your home. Similarly, any facts gathered by a delegated task are assigned by default to the `inventory_hostname` (the current host), not to the host which produced the facts (the delegated to host). To assign gathered facts to the delegated host instead of the current host, set ``delegate_facts`` to ``true``: .. code-block:: yaml --- - hosts: app_servers tasks: - name: Gather facts from db servers ansible.builtin.setup: delegate_to: "{{ item }}" delegate_facts: true loop: "{{ groups['dbservers'] }}" This task gathers facts for the machines in the dbservers group and assigns the facts to those machines, even though the play targets the app_servers group. This way you can lookup `hostvars['dbhost1']['ansible_default_ipv4']['address']` even though dbservers were not part of the play, or left out by using `--limit`. .. _local_playbooks: Local playbooks --------------- It may be useful to use a playbook locally on a remote host, rather than by connecting over SSH. This can be useful for assuring the configuration of a system by putting a playbook in a crontab. This may also be used to run a playbook inside an OS installer, such as an Anaconda kickstart. To run an entire playbook locally, just set the ``hosts:`` line to ``hosts: 127.0.0.1`` and then run the playbook like so: .. code-block:: shell ansible-playbook playbook.yml --connection=local Alternatively, a local connection can be used in a single playbook play, even if other plays in the playbook use the default remote connection type: .. code-block:: yaml --- - hosts: 127.0.0.1 connection: local .. note:: If you set the connection to local and there is no ansible_python_interpreter set, modules will run under /usr/bin/python and not under {{ ansible_playbook_python }}. Be sure to set ansible_python_interpreter: "{{ ansible_playbook_python }}" in host_vars/localhost.yml, for example. You can avoid this issue by using ``local_action`` or ``delegate_to: localhost`` instead. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_strategies` More ways to control how and where Ansible executes `Ansible Examples on GitHub `_ Many examples of full-stack deployments `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_environment.rst0000644000000000000000000001262600000000000026613 0ustar00rootroot00000000000000.. _playbooks_environment: Setting the remote environment ============================== .. versionadded:: 1.1 You can use the ``environment`` keyword at the play, block, or task level to set an environment variable for an action on a remote host. With this keyword, you can enable using a proxy for a task that does http requests, set the required environment variables for language-specific version managers, and more. When you set a value with ``environment:`` at the play or block level, it is available only to tasks within the play or block that are executed by the same user. The ``environment:`` keyword does not affect Ansible itself, Ansible configuration settings, the environment for other users, or the execution of other plugins like lookups and filters. Variables set with ``environment:`` do not automatically become Ansible facts, even when you set them at the play level. You must include an explicit ``gather_facts`` task in your playbook and set the ``environment`` keyword on that task to turn these values into Ansible facts. .. contents:: :local: Setting the remote environment in a task ---------------------------------------- You can set the environment directly at the task level. .. code-block:: yaml - hosts: all remote_user: root tasks: - name: Install cobbler ansible.builtin.package: name: cobbler state: present environment: http_proxy: http://proxy.example.com:8080 You can re-use environment settings by defining them as variables in your play and accessing them in a task as you would access any stored Ansible variable. .. code-block:: yaml - hosts: all remote_user: root # create a variable named "proxy_env" that is a dictionary vars: proxy_env: http_proxy: http://proxy.example.com:8080 tasks: - name: Install cobbler ansible.builtin.package: name: cobbler state: present environment: "{{ proxy_env }}" You can store environment settings for re-use in multiple playbooks by defining them in a group_vars file. .. code-block:: yaml --- # file: group_vars/boston ntp_server: ntp.bos.example.com backup: bak.bos.example.com proxy_env: http_proxy: http://proxy.bos.example.com:8080 https_proxy: http://proxy.bos.example.com:8080 You can set the remote environment at the play level. .. code-block:: yaml - hosts: testing roles: - php - nginx environment: http_proxy: http://proxy.example.com:8080 These examples show proxy settings, but you can provide any number of settings this way. Working with language-specific version managers =============================================== Some language-specific version managers (such as rbenv and nvm) require you to set environment variables while these tools are in use. When using these tools manually, you usually source some environment variables from a script or from lines added to your shell configuration file. In Ansible, you can do this with the environment keyword at the play level. .. code-block:: yaml+jinja --- ### A playbook demonstrating a common npm workflow: # - Check for package.json in the application directory # - If package.json exists: # * Run npm prune # * Run npm install - hosts: application become: false vars: node_app_dir: /var/local/my_node_app environment: NVM_DIR: /var/local/nvm PATH: /var/local/nvm/versions/node/v4.2.1/bin:{{ ansible_env.PATH }} tasks: - name: Check for package.json ansible.builtin.stat: path: '{{ node_app_dir }}/package.json' register: packagejson - name: Run npm prune ansible.builtin.command: npm prune args: chdir: '{{ node_app_dir }}' when: packagejson.stat.exists - name: Run npm install community.general.npm: path: '{{ node_app_dir }}' when: packagejson.stat.exists .. note:: The example above uses ``ansible_env`` as part of the PATH. Basing variables on ``ansible_env`` is risky. Ansible populates ``ansible_env`` values by gathering facts, so the value of the variables depends on the remote_user or become_user Ansible used when gathering those facts. If you change remote_user/become_user the values in ``ansible-env`` may not be the ones you expect. .. warning:: Environment variables are normally passed in clear text (shell plugin dependent) so they are not a recommended way of passing secrets to the module being executed. You can also specify the environment at the task level. .. code-block:: yaml+jinja --- - name: Install ruby 2.3.1 ansible.builtin.command: rbenv install {{ rbenv_ruby_version }} args: creates: '{{ rbenv_root }}/versions/{{ rbenv_ruby_version }}/bin/ruby' vars: rbenv_root: /usr/local/rbenv rbenv_ruby_version: 2.3.1 environment: CONFIGURE_OPTS: '--disable-install-doc' RBENV_ROOT: '{{ rbenv_root }}' PATH: '{{ rbenv_root }}/bin:{{ rbenv_root }}/shims:{{ rbenv_plugins }}/ruby-build/bin:{{ ansible_env.PATH }}' .. seealso:: :ref:`playbooks_intro` An introduction to playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.528556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_error_handling.rst0000644000000000000000000002621300000000000027241 0ustar00rootroot00000000000000.. _playbooks_error_handling: *************************** Error handling in playbooks *************************** When Ansible receives a non-zero return code from a command or a failure from a module, by default it stops executing on that host and continues on other hosts. However, in some circumstances you may want different behavior. Sometimes a non-zero return code indicates success. Sometimes you want a failure on one host to stop execution on all hosts. Ansible provides tools and settings to handle these situations and help you get the behavior, output, and reporting you want. .. contents:: :local: .. _ignoring_failed_commands: Ignoring failed commands ======================== By default Ansible stops executing tasks on a host when a task fails on that host. You can use ``ignore_errors`` to continue on in spite of the failure. .. code-block:: yaml - name: Do not count this as a failure ansible.builtin.command: /bin/false ignore_errors: yes The ``ignore_errors`` directive only works when the task is able to run and returns a value of 'failed'. It does not make Ansible ignore undefined variable errors, connection failures, execution issues (for example, missing packages), or syntax errors. Ignoring unreachable host errors ================================ .. versionadded:: 2.7 You can ignore a task failure due to the host instance being 'UNREACHABLE' with the ``ignore_unreachable`` keyword. Ansible ignores the task errors, but continues to execute future tasks against the unreachable host. For example, at the task level: .. code-block:: yaml - name: This executes, fails, and the failure is ignored ansible.builtin.command: /bin/true ignore_unreachable: yes - name: This executes, fails, and ends the play for this host ansible.builtin.command: /bin/true And at the playbook level: .. code-block:: yaml - hosts: all ignore_unreachable: yes tasks: - name: This executes, fails, and the failure is ignored ansible.builtin.command: /bin/true - name: This executes, fails, and ends the play for this host ansible.builtin.command: /bin/true ignore_unreachable: no .. _resetting_unreachable: Resetting unreachable hosts =========================== If Ansible cannot connect to a host, it marks that host as 'UNREACHABLE' and removes it from the list of active hosts for the run. You can use `meta: clear_host_errors` to reactivate all hosts, so subsequent tasks can try to reach them again. .. _handlers_and_failure: Handlers and failure ==================== Ansible runs :ref:`handlers ` at the end of each play. If a task notifies a handler but another task fails later in the play, by default the handler does *not* run on that host, which may leave the host in an unexpected state. For example, a task could update a configuration file and notify a handler to restart some service. If a task later in the same play fails, the configuration file might be changed but the service will not be restarted. You can change this behavior with the ``--force-handlers`` command-line option, by including ``force_handlers: True`` in a play, or by adding ``force_handlers = True`` to ansible.cfg. When handlers are forced, Ansible will run all notified handlers on all hosts, even hosts with failed tasks. (Note that certain errors could still prevent the handler from running, such as a host becoming unreachable.) .. _controlling_what_defines_failure: Defining failure ================ Ansible lets you define what "failure" means in each task using the ``failed_when`` conditional. As with all conditionals in Ansible, lists of multiple ``failed_when`` conditions are joined with an implicit ``and``, meaning the task only fails when *all* conditions are met. If you want to trigger a failure when any of the conditions is met, you must define the conditions in a string with an explicit ``or`` operator. You may check for failure by searching for a word or phrase in the output of a command .. code-block:: yaml - name: Fail task when the command error output prints FAILED ansible.builtin.command: /usr/bin/example-command -x -y -z register: command_result failed_when: "'FAILED' in command_result.stderr" or based on the return code .. code-block:: yaml - name: Fail task when both files are identical ansible.builtin.raw: diff foo/file1 bar/file2 register: diff_cmd failed_when: diff_cmd.rc == 0 or diff_cmd.rc >= 2 You can also combine multiple conditions for failure. This task will fail if both conditions are true: .. code-block:: yaml - name: Check if a file exists in temp and fail task if it does ansible.builtin.command: ls /tmp/this_should_not_be_here register: result failed_when: - result.rc == 0 - '"No such" not in result.stdout' If you want the task to fail when only one condition is satisfied, change the ``failed_when`` definition to .. code-block:: yaml failed_when: result.rc == 0 or "No such" not in result.stdout If you have too many conditions to fit neatly into one line, you can split it into a multi-line YAML value with ``>``. .. code-block:: yaml - name: example of many failed_when conditions with OR ansible.builtin.shell: "./myBinary" register: ret failed_when: > ("No such file or directory" in ret.stdout) or (ret.stderr != '') or (ret.rc == 10) .. _override_the_changed_result: Defining "changed" ================== Ansible lets you define when a particular task has "changed" a remote node using the ``changed_when`` conditional. This lets you determine, based on return codes or output, whether a change should be reported in Ansible statistics and whether a handler should be triggered or not. As with all conditionals in Ansible, lists of multiple ``changed_when`` conditions are joined with an implicit ``and``, meaning the task only reports a change when *all* conditions are met. If you want to report a change when any of the conditions is met, you must define the conditions in a string with an explicit ``or`` operator. For example: .. code-block:: yaml tasks: - name: Report 'changed' when the return code is not equal to 2 ansible.builtin.shell: /usr/bin/billybass --mode="take me to the river" register: bass_result changed_when: "bass_result.rc != 2" - name: This will never report 'changed' status ansible.builtin.shell: wall 'beep' changed_when: False You can also combine multiple conditions to override "changed" result. .. code-block:: yaml - name: Combine multiple conditions to override 'changed' result ansible.builtin.command: /bin/fake_command register: result ignore_errors: True changed_when: - '"ERROR" in result.stderr' - result.rc == 2 See :ref:`controlling_what_defines_failure` for more conditional syntax examples. Ensuring success for command and shell ====================================== The :ref:`command ` and :ref:`shell ` modules care about return codes, so if you have a command whose successful exit code is not zero, you can do this: .. code-block:: yaml tasks: - name: Run this command and ignore the result ansible.builtin.shell: /usr/bin/somecommand || /bin/true Aborting a play on all hosts ============================ Sometimes you want a failure on a single host, or failures on a certain percentage of hosts, to abort the entire play on all hosts. You can stop play execution after the first failure happens with ``any_errors_fatal``. For finer-grained control, you can use ``max_fail_percentage`` to abort the run after a given percentage of hosts has failed. Aborting on the first error: any_errors_fatal --------------------------------------------- If you set ``any_errors_fatal`` and a task returns an error, Ansible finishes the fatal task on all hosts in the current batch, then stops executing the play on all hosts. Subsequent tasks and plays are not executed. You can recover from fatal errors by adding a :ref:`rescue section ` to the block. You can set ``any_errors_fatal`` at the play or block level. .. code-block:: yaml - hosts: somehosts any_errors_fatal: true roles: - myrole - hosts: somehosts tasks: - block: - include_tasks: mytasks.yml any_errors_fatal: true You can use this feature when all tasks must be 100% successful to continue playbook execution. For example, if you run a service on machines in multiple data centers with load balancers to pass traffic from users to the service, you want all load balancers to be disabled before you stop the service for maintenance. To ensure that any failure in the task that disables the load balancers will stop all other tasks: .. code-block:: yaml --- - hosts: load_balancers_dc_a any_errors_fatal: true tasks: - name: Shut down datacenter 'A' ansible.builtin.command: /usr/bin/disable-dc - hosts: frontends_dc_a tasks: - name: Stop service ansible.builtin.command: /usr/bin/stop-software - name: Update software ansible.builtin.command: /usr/bin/upgrade-software - hosts: load_balancers_dc_a tasks: - name: Start datacenter 'A' ansible.builtin.command: /usr/bin/enable-dc In this example Ansible starts the software upgrade on the front ends only if all of the load balancers are successfully disabled. .. _maximum_failure_percentage: Setting a maximum failure percentage ------------------------------------ By default, Ansible continues to execute tasks as long as there are hosts that have not yet failed. In some situations, such as when executing a rolling update, you may want to abort the play when a certain threshold of failures has been reached. To achieve this, you can set a maximum failure percentage on a play: .. code-block:: yaml --- - hosts: webservers max_fail_percentage: 30 serial: 10 The ``max_fail_percentage`` setting applies to each batch when you use it with :ref:`serial `. In the example above, if more than 3 of the 10 servers in the first (or any) batch of servers failed, the rest of the play would be aborted. .. note:: The percentage set must be exceeded, not equaled. For example, if serial were set to 4 and you wanted the task to abort the play when 2 of the systems failed, set the max_fail_percentage at 49 rather than 50. Controlling errors in blocks ============================ You can also use blocks to define responses to task errors. This approach is similar to exception handling in many programming languages. See :ref:`block_error_handling` for details and examples. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.529556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_filters.rst0000644000000000000000000016302400000000000025716 0ustar00rootroot00000000000000.. _playbooks_filters: ******************************** Using filters to manipulate data ******************************** Filters let you transform JSON data into YAML data, split a URL to extract the hostname, get the SHA1 hash of a string, add or multiply integers, and much more. You can use the Ansible-specific filters documented here to manipulate your data, or use any of the standard filters shipped with Jinja2 - see the list of :ref:`built-in filters ` in the official Jinja2 template documentation. You can also use :ref:`Python methods ` to transform data. You can :ref:`create custom Ansible filters as plugins `, though we generally welcome new filters into the ansible-core repo so everyone can use them. Because templating happens on the Ansible controller, **not** on the target host, filters execute on the controller and transform data locally. .. contents:: :local: Handling undefined variables ============================ Filters can help you manage missing or undefined variables by providing defaults or making some variables optional. If you configure Ansible to ignore most undefined variables, you can mark some variables as requiring values with the ``mandatory`` filter. .. _defaulting_undefined_variables: Providing default values ------------------------ You can provide default values for variables directly in your templates using the Jinja2 'default' filter. This is often a better approach than failing if a variable is not defined:: {{ some_variable | default(5) }} In the above example, if the variable 'some_variable' is not defined, Ansible uses the default value 5, rather than raising an "undefined variable" error and failing. If you are working within a role, you can also add a ``defaults/main.yml`` to define the default values for variables in your role. Beginning in version 2.8, attempting to access an attribute of an Undefined value in Jinja will return another Undefined value, rather than throwing an error immediately. This means that you can now simply use a default with a value in a nested data structure (in other words, :code:`{{ foo.bar.baz | default('DEFAULT') }}`) when you do not know if the intermediate values are defined. If you want to use the default value when variables evaluate to false or an empty string you have to set the second parameter to ``true``:: {{ lookup('env', 'MY_USER') | default('admin', true) }} .. _omitting_undefined_variables: Making variables optional ------------------------- By default Ansible requires values for all variables in a templated expression. However, you can make specific variables optional. For example, you might want to use a system default for some items and control the value for others. To make a variable optional, set the default value to the special variable ``omit``:: - name: Touch files with an optional mode ansible.builtin.file: dest: "{{ item.path }}" state: touch mode: "{{ item.mode | default(omit) }}" loop: - path: /tmp/foo - path: /tmp/bar - path: /tmp/baz mode: "0444" In this example, the default mode for the files ``/tmp/foo`` and ``/tmp/bar`` is determined by the umask of the system. Ansible does not send a value for ``mode``. Only the third file, ``/tmp/baz``, receives the `mode=0444` option. .. note:: If you are "chaining" additional filters after the ``default(omit)`` filter, you should instead do something like this: ``"{{ foo | default(None) | some_filter or omit }}"``. In this example, the default ``None`` (Python null) value will cause the later filters to fail, which will trigger the ``or omit`` portion of the logic. Using ``omit`` in this manner is very specific to the later filters you are chaining though, so be prepared for some trial and error if you do this. .. _forcing_variables_to_be_defined: Defining mandatory values ------------------------- If you configure Ansible to ignore undefined variables, you may want to define some values as mandatory. By default, Ansible fails if a variable in your playbook or command is undefined. You can configure Ansible to allow undefined variables by setting :ref:`DEFAULT_UNDEFINED_VAR_BEHAVIOR` to ``false``. In that case, you may want to require some variables to be defined. You can do this with:: {{ variable | mandatory }} The variable value will be used as is, but the template evaluation will raise an error if it is undefined. A convenient way of requiring a variable to be overridden is to give it an undefined value using the ``undef`` keyword. This can be useful in a role's defaults. .. code-block:: yaml+jinja galaxy_url: "https://galaxy.ansible.com" galaxy_api_key: {{ undef(hint="You must specify your Galaxy API key") }} Defining different values for true/false/null (ternary) ======================================================= You can create a test, then define one value to use when the test returns true and another when the test returns false (new in version 1.9):: {{ (status == 'needs_restart') | ternary('restart', 'continue') }} In addition, you can define a one value to use on true, one value on false and a third value on null (new in version 2.8):: {{ enabled | ternary('no shutdown', 'shutdown', omit) }} Managing data types =================== You might need to know, change, or set the data type on a variable. For example, a registered variable might contain a dictionary when your next task needs a list, or a user :ref:`prompt ` might return a string when your playbook needs a boolean value. Use the ``type_debug``, ``dict2items``, and ``items2dict`` filters to manage data types. You can also use the data type itself to cast a value as a specific data type. Discovering the data type ------------------------- .. versionadded:: 2.3 If you are unsure of the underlying Python type of a variable, you can use the ``type_debug`` filter to display it. This is useful in debugging when you need a particular type of variable:: {{ myvar | type_debug }} .. _dict_filter: Transforming dictionaries into lists ------------------------------------ .. versionadded:: 2.6 Use the ``dict2items`` filter to transform a dictionary into a list of items suitable for :ref:`looping `:: {{ dict | dict2items }} Dictionary data (before applying the ``dict2items`` filter):: tags: Application: payment Environment: dev List data (after applying the ``dict2items`` filter):: - key: Application value: payment - key: Environment value: dev .. versionadded:: 2.8 The ``dict2items`` filter is the reverse of the ``items2dict`` filter. If you want to configure the names of the keys, the ``dict2items`` filter accepts 2 keyword arguments. Pass the ``key_name`` and ``value_name`` arguments to configure the names of the keys in the list output:: {{ files | dict2items(key_name='file', value_name='path') }} Dictionary data (before applying the ``dict2items`` filter):: files: users: /etc/passwd groups: /etc/group List data (after applying the ``dict2items`` filter):: - file: users path: /etc/passwd - file: groups path: /etc/group Transforming lists into dictionaries ------------------------------------ .. versionadded:: 2.7 Use the ``items2dict`` filter to transform a list into a dictionary, mapping the content into ``key: value`` pairs:: {{ tags | items2dict }} List data (before applying the ``items2dict`` filter):: tags: - key: Application value: payment - key: Environment value: dev Dictionary data (after applying the ``items2dict`` filter):: Application: payment Environment: dev The ``items2dict`` filter is the reverse of the ``dict2items`` filter. Not all lists use ``key`` to designate keys and ``value`` to designate values. For example:: fruits: - fruit: apple color: red - fruit: pear color: yellow - fruit: grapefruit color: yellow In this example, you must pass the ``key_name`` and ``value_name`` arguments to configure the transformation. For example:: {{ tags | items2dict(key_name='fruit', value_name='color') }} If you do not pass these arguments, or do not pass the correct values for your list, you will see ``KeyError: key`` or ``KeyError: my_typo``. Forcing the data type --------------------- You can cast values as certain types. For example, if you expect the input "True" from a :ref:`vars_prompt ` and you want Ansible to recognize it as a boolean value instead of a string:: - ansible.builtin.debug: msg: test when: some_string_value | bool If you want to perform a mathematical comparison on a fact and you want Ansible to recognize it as an integer instead of a string:: - shell: echo "only on Red Hat 6, derivatives, and later" when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']['major_release'] | int >= 6 .. versionadded:: 1.6 .. _filters_for_formatting_data: Formatting data: YAML and JSON ============================== You can switch a data structure in a template from or to JSON or YAML format, with options for formatting, indenting, and loading data. The basic filters are occasionally useful for debugging:: {{ some_variable | to_json }} {{ some_variable | to_yaml }} For human readable output, you can use:: {{ some_variable | to_nice_json }} {{ some_variable | to_nice_yaml }} You can change the indentation of either format:: {{ some_variable | to_nice_json(indent=2) }} {{ some_variable | to_nice_yaml(indent=8) }} The ``to_yaml`` and ``to_nice_yaml`` filters use the `PyYAML library`_ which has a default 80 symbol string length limit. That causes unexpected line break after 80th symbol (if there is a space after 80th symbol) To avoid such behavior and generate long lines, use the ``width`` option. You must use a hardcoded number to define the width, instead of a construction like ``float("inf")``, because the filter does not support proxying Python functions. For example:: {{ some_variable | to_yaml(indent=8, width=1337) }} {{ some_variable | to_nice_yaml(indent=8, width=1337) }} The filter does support passing through other YAML parameters. For a full list, see the `PyYAML documentation`_. If you are reading in some already formatted data:: {{ some_variable | from_json }} {{ some_variable | from_yaml }} for example:: tasks: - name: Register JSON output as a variable ansible.builtin.shell: cat /some/path/to/file.json register: result - name: Set a variable ansible.builtin.set_fact: myvar: "{{ result.stdout | from_json }}" Filter `to_json` and Unicode support ------------------------------------ By default `to_json` and `to_nice_json` will convert data received to ASCII, so:: {{ 'München'| to_json }} will return:: 'M\u00fcnchen' To keep Unicode characters, pass the parameter `ensure_ascii=False` to the filter:: {{ 'München'| to_json(ensure_ascii=False) }} 'München' .. versionadded:: 2.7 To parse multi-document YAML strings, the ``from_yaml_all`` filter is provided. The ``from_yaml_all`` filter will return a generator of parsed YAML documents. for example:: tasks: - name: Register a file content as a variable ansible.builtin.shell: cat /some/path/to/multidoc-file.yaml register: result - name: Print the transformed variable ansible.builtin.debug: msg: '{{ item }}' loop: '{{ result.stdout | from_yaml_all | list }}' Combining and selecting data ============================ You can combine data from multiple sources and types, and select values from large data structures, giving you precise control over complex data. .. _zip_filter: Combining items from multiple lists: zip and zip_longest -------------------------------------------------------- .. versionadded:: 2.3 To get a list combining the elements of other lists use ``zip``:: - name: Give me list combo of two lists ansible.builtin.debug: msg: "{{ [1,2,3,4,5,6] | zip(['a','b','c','d','e','f']) | list }}" # => [[1, "a"], [2, "b"], [3, "c"], [4, "d"], [5, "e"], [6, "f"]] - name: Give me shortest combo of two lists ansible.builtin.debug: msg: "{{ [1,2,3] | zip(['a','b','c','d','e','f']) | list }}" # => [[1, "a"], [2, "b"], [3, "c"]] To always exhaust all lists use ``zip_longest``:: - name: Give me longest combo of three lists , fill with X ansible.builtin.debug: msg: "{{ [1,2,3] | zip_longest(['a','b','c','d','e','f'], [21, 22, 23], fillvalue='X') | list }}" # => [[1, "a", 21], [2, "b", 22], [3, "c", 23], ["X", "d", "X"], ["X", "e", "X"], ["X", "f", "X"]] Similarly to the output of the ``items2dict`` filter mentioned above, these filters can be used to construct a ``dict``:: {{ dict(keys_list | zip(values_list)) }} List data (before applying the ``zip`` filter):: keys_list: - one - two values_list: - apple - orange Dictionary data (after applying the ``zip`` filter):: one: apple two: orange Combining objects and subelements --------------------------------- .. versionadded:: 2.7 The ``subelements`` filter produces a product of an object and the subelement values of that object, similar to the ``subelements`` lookup. This lets you specify individual subelements to use in a template. For example, this expression:: {{ users | subelements('groups', skip_missing=True) }} Data before applying the ``subelements`` filter:: users: - name: alice authorized: - /tmp/alice/onekey.pub - /tmp/alice/twokey.pub groups: - wheel - docker - name: bob authorized: - /tmp/bob/id_rsa.pub groups: - docker Data after applying the ``subelements`` filter:: - - name: alice groups: - wheel - docker authorized: - /tmp/alice/onekey.pub - /tmp/alice/twokey.pub - wheel - - name: alice groups: - wheel - docker authorized: - /tmp/alice/onekey.pub - /tmp/alice/twokey.pub - docker - - name: bob authorized: - /tmp/bob/id_rsa.pub groups: - docker - docker You can use the transformed data with ``loop`` to iterate over the same subelement for multiple objects:: - name: Set authorized ssh key, extracting just that data from 'users' ansible.posix.authorized_key: user: "{{ item.0.name }}" key: "{{ lookup('file', item.1) }}" loop: "{{ users | subelements('authorized') }}" .. _combine_filter: Combining hashes/dictionaries ----------------------------- .. versionadded:: 2.0 The ``combine`` filter allows hashes to be merged. For example, the following would override keys in one hash:: {{ {'a':1, 'b':2} | combine({'b':3}) }} The resulting hash would be:: {'a':1, 'b':3} The filter can also take multiple arguments to merge:: {{ a | combine(b, c, d) }} {{ [a, b, c, d] | combine }} In this case, keys in ``d`` would override those in ``c``, which would override those in ``b``, and so on. The filter also accepts two optional parameters: ``recursive`` and ``list_merge``. recursive Is a boolean, default to ``False``. Should the ``combine`` recursively merge nested hashes. Note: It does **not** depend on the value of the ``hash_behaviour`` setting in ``ansible.cfg``. list_merge Is a string, its possible values are ``replace`` (default), ``keep``, ``append``, ``prepend``, ``append_rp`` or ``prepend_rp``. It modifies the behaviour of ``combine`` when the hashes to merge contain arrays/lists. .. code-block:: yaml default: a: x: default y: default b: default c: default patch: a: y: patch z: patch b: patch If ``recursive=False`` (the default), nested hash aren't merged:: {{ default | combine(patch) }} This would result in:: a: y: patch z: patch b: patch c: default If ``recursive=True``, recurse into nested hash and merge their keys:: {{ default | combine(patch, recursive=True) }} This would result in:: a: x: default y: patch z: patch b: patch c: default If ``list_merge='replace'`` (the default), arrays from the right hash will "replace" the ones in the left hash:: default: a: - default patch: a: - patch .. code-block:: jinja {{ default | combine(patch) }} This would result in:: a: - patch If ``list_merge='keep'``, arrays from the left hash will be kept:: {{ default | combine(patch, list_merge='keep') }} This would result in:: a: - default If ``list_merge='append'``, arrays from the right hash will be appended to the ones in the left hash:: {{ default | combine(patch, list_merge='append') }} This would result in:: a: - default - patch If ``list_merge='prepend'``, arrays from the right hash will be prepended to the ones in the left hash:: {{ default | combine(patch, list_merge='prepend') }} This would result in:: a: - patch - default If ``list_merge='append_rp'``, arrays from the right hash will be appended to the ones in the left hash. Elements of arrays in the left hash that are also in the corresponding array of the right hash will be removed ("rp" stands for "remove present"). Duplicate elements that aren't in both hashes are kept:: default: a: - 1 - 1 - 2 - 3 patch: a: - 3 - 4 - 5 - 5 .. code-block:: jinja {{ default | combine(patch, list_merge='append_rp') }} This would result in:: a: - 1 - 1 - 2 - 3 - 4 - 5 - 5 If ``list_merge='prepend_rp'``, the behavior is similar to the one for ``append_rp``, but elements of arrays in the right hash are prepended:: {{ default | combine(patch, list_merge='prepend_rp') }} This would result in:: a: - 3 - 4 - 5 - 5 - 1 - 1 - 2 ``recursive`` and ``list_merge`` can be used together:: default: a: a': x: default_value y: default_value list: - default_value b: - 1 - 1 - 2 - 3 patch: a: a': y: patch_value z: patch_value list: - patch_value b: - 3 - 4 - 4 - key: value .. code-block:: jinja {{ default | combine(patch, recursive=True, list_merge='append_rp') }} This would result in:: a: a': x: default_value y: patch_value z: patch_value list: - default_value - patch_value b: - 1 - 1 - 2 - 3 - 4 - 4 - key: value .. _extract_filter: Selecting values from arrays or hashtables ------------------------------------------- .. versionadded:: 2.1 The `extract` filter is used to map from a list of indices to a list of values from a container (hash or array):: {{ [0,2] | map('extract', ['x','y','z']) | list }} {{ ['x','y'] | map('extract', {'x': 42, 'y': 31}) | list }} The results of the above expressions would be:: ['x', 'z'] [42, 31] The filter can take another argument:: {{ groups['x'] | map('extract', hostvars, 'ec2_ip_address') | list }} This takes the list of hosts in group 'x', looks them up in `hostvars`, and then looks up the `ec2_ip_address` of the result. The final result is a list of IP addresses for the hosts in group 'x'. The third argument to the filter can also be a list, for a recursive lookup inside the container:: {{ ['a'] | map('extract', b, ['x','y']) | list }} This would return a list containing the value of `b['a']['x']['y']`. Combining lists --------------- This set of filters returns a list of combined lists. permutations ^^^^^^^^^^^^ To get permutations of a list:: - name: Give me largest permutations (order matters) ansible.builtin.debug: msg: "{{ [1,2,3,4,5] | ansible.builtin.permutations | list }}" - name: Give me permutations of sets of three ansible.builtin.debug: msg: "{{ [1,2,3,4,5] | ansible.builtin.permutations(3) | list }}" combinations ^^^^^^^^^^^^ Combinations always require a set size:: - name: Give me combinations for sets of two ansible.builtin.debug: msg: "{{ [1,2,3,4,5] | ansible.builtin.combinations(2) | list }}" Also see the :ref:`zip_filter` products ^^^^^^^^ The product filter returns the `cartesian product `_ of the input iterables. This is roughly equivalent to nested for-loops in a generator expression. For example:: - name: Generate multiple hostnames ansible.builtin.debug: msg: "{{ ['foo', 'bar'] | product(['com']) | map('join', '.') | join(',') }}" This would result in:: { "msg": "foo.com,bar.com" } .. json_query_filter: Selecting JSON data: JSON queries --------------------------------- To select a single element or a data subset from a complex data structure in JSON format (for example, Ansible facts), use the ``json_query`` filter. The ``json_query`` filter lets you query a complex JSON structure and iterate over it using a loop structure. .. note:: This filter has migrated to the `community.general `_ collection. Follow the installation instructions to install that collection. .. note:: You must manually install the **jmespath** dependency on the Ansible controller before using this filter. This filter is built upon **jmespath**, and you can use the same syntax. For examples, see `jmespath examples `_. Consider this data structure:: { "domain_definition": { "domain": { "cluster": [ { "name": "cluster1" }, { "name": "cluster2" } ], "server": [ { "name": "server11", "cluster": "cluster1", "port": "8080" }, { "name": "server12", "cluster": "cluster1", "port": "8090" }, { "name": "server21", "cluster": "cluster2", "port": "9080" }, { "name": "server22", "cluster": "cluster2", "port": "9090" } ], "library": [ { "name": "lib1", "target": "cluster1" }, { "name": "lib2", "target": "cluster2" } ] } } } To extract all clusters from this structure, you can use the following query:: - name: Display all cluster names ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.cluster[*].name') }}" To extract all server names:: - name: Display all server names ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.server[*].name') }}" To extract ports from cluster1:: - name: Display all ports from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}" vars: server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port" .. note:: You can use a variable to make the query more readable. To print out the ports from cluster1 in a comma separated string:: - name: Display all ports from cluster1 as a string ansible.builtin.debug: msg: "{{ domain_definition | community.general.json_query('domain.server[?cluster==`cluster1`].port') | join(', ') }}" .. note:: In the example above, quoting literals using backticks avoids escaping quotes and maintains readability. You can use YAML `single quote escaping `_:: - name: Display all ports from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.server[?cluster==''cluster1''].port') }}" .. note:: Escaping single quotes within single quotes in YAML is done by doubling the single quote. To get a hash map with all ports and names of a cluster:: - name: Display all server ports and names from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}" vars: server_name_cluster1_query: "domain.server[?cluster=='cluster2'].{name: name, port: port}" To extract ports from all clusters with name starting with 'server1':: - name: Display all ports from cluster1 ansible.builtin.debug: msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}" vars: server_name_query: "domain.server[?starts_with(name,'server1')].port" To extract ports from all clusters with name containing 'server1':: - name: Display all ports from cluster1 ansible.builtin.debug: msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}" vars: server_name_query: "domain.server[?contains(name,'server1')].port" .. note:: while using ``starts_with`` and ``contains``, you have to use `` to_json | from_json `` filter for correct parsing of data structure. Randomizing data ================ When you need a randomly generated value, use one of these filters. .. _random_mac_filter: Random MAC addresses -------------------- .. versionadded:: 2.6 This filter can be used to generate a random MAC address from a string prefix. .. note:: This filter has migrated to the `community.general `_ collection. Follow the installation instructions to install that collection. To get a random MAC address from a string prefix starting with '52:54:00':: "{{ '52:54:00' | community.general.random_mac }}" # => '52:54:00:ef:1c:03' Note that if anything is wrong with the prefix string, the filter will issue an error. .. versionadded:: 2.9 As of Ansible version 2.9, you can also initialize the random number generator from a seed to create random-but-idempotent MAC addresses:: "{{ '52:54:00' | community.general.random_mac(seed=inventory_hostname) }}" .. _random_filter: Random items or numbers ----------------------- The ``random`` filter in Ansible is an extension of the default Jinja2 random filter, and can be used to return a random item from a sequence of items or to generate a random number based on a range. To get a random item from a list:: "{{ ['a','b','c'] | random }}" # => 'c' To get a random number between 0 (inclusive) and a specified integer (exclusive):: "{{ 60 | random }} * * * * root /script/from/cron" # => '21 * * * * root /script/from/cron' To get a random number from 0 to 100 but in steps of 10:: {{ 101 | random(step=10) }} # => 70 To get a random number from 1 to 100 but in steps of 10:: {{ 101 | random(1, 10) }} # => 31 {{ 101 | random(start=1, step=10) }} # => 51 You can initialize the random number generator from a seed to create random-but-idempotent numbers:: "{{ 60 | random(seed=inventory_hostname) }} * * * * root /script/from/cron" Shuffling a list ---------------- The ``shuffle`` filter randomizes an existing list, giving a different order every invocation. To get a random list from an existing list:: {{ ['a','b','c'] | shuffle }} # => ['c','a','b'] {{ ['a','b','c'] | shuffle }} # => ['b','c','a'] You can initialize the shuffle generator from a seed to generate a random-but-idempotent order:: {{ ['a','b','c'] | shuffle(seed=inventory_hostname) }} # => ['b','a','c'] The shuffle filter returns a list whenever possible. If you use it with a non 'listable' item, the filter does nothing. .. _list_filters: Managing list variables ======================= You can search for the minimum or maximum value in a list, or flatten a multi-level list. To get the minimum value from list of numbers:: {{ list1 | min }} .. versionadded:: 2.11 To get the minimum value in a list of objects:: {{ [{'val': 1}, {'val': 2}] | min(attribute='val') }} To get the maximum value from a list of numbers:: {{ [3, 4, 2] | max }} .. versionadded:: 2.11 To get the maximum value in a list of objects:: {{ [{'val': 1}, {'val': 2}] | max(attribute='val') }} .. versionadded:: 2.5 Flatten a list (same thing the `flatten` lookup does):: {{ [3, [4, 2] ] | flatten }} # => [3, 4, 2] Flatten only the first level of a list (akin to the `items` lookup):: {{ [3, [4, [2]] ] | flatten(levels=1) }} # => [3, 4, [2]] .. versionadded:: 2.11 Preserve nulls in a list, by default flatten removes them. :: {{ [3, None, [4, [2]] ] | flatten(levels=1, skip_nulls=False) }} # => [3, None, 4, [2]] .. _set_theory_filters: Selecting from sets or lists (set theory) ========================================= You can select or combine items from sets or lists. .. versionadded:: 1.4 To get a unique set from a list:: # list1: [1, 2, 5, 1, 3, 4, 10] {{ list1 | unique }} # => [1, 2, 5, 3, 4, 10] To get a union of two lists:: # list1: [1, 2, 5, 1, 3, 4, 10] # list2: [1, 2, 3, 4, 5, 11, 99] {{ list1 | union(list2) }} # => [1, 2, 5, 1, 3, 4, 10, 11, 99] To get the intersection of 2 lists (unique list of all items in both):: # list1: [1, 2, 5, 3, 4, 10] # list2: [1, 2, 3, 4, 5, 11, 99] {{ list1 | intersect(list2) }} # => [1, 2, 5, 3, 4] To get the difference of 2 lists (items in 1 that don't exist in 2):: # list1: [1, 2, 5, 1, 3, 4, 10] # list2: [1, 2, 3, 4, 5, 11, 99] {{ list1 | difference(list2) }} # => [10] To get the symmetric difference of 2 lists (items exclusive to each list):: # list1: [1, 2, 5, 1, 3, 4, 10] # list2: [1, 2, 3, 4, 5, 11, 99] {{ list1 | symmetric_difference(list2) }} # => [10, 11, 99] .. _math_stuff: Calculating numbers (math) ========================== .. versionadded:: 1.9 You can calculate logs, powers, and roots of numbers with Ansible filters. Jinja2 provides other mathematical functions like abs() and round(). Get the logarithm (default is e):: {{ 8 | log }} # => 2.0794415416798357 Get the base 10 logarithm:: {{ 8 | log(10) }} # => 0.9030899869919435 Give me the power of 2! (or 5):: {{ 8 | pow(5) }} # => 32768.0 Square root, or the 5th:: {{ 8 | root }} # => 2.8284271247461903 {{ 8 | root(5) }} # => 1.5157165665103982 Managing network interactions ============================= These filters help you with common network tasks. .. note:: These filters have migrated to the `ansible.netcommon `_ collection. Follow the installation instructions to install that collection. .. _ipaddr_filter: IP address filters ------------------ .. versionadded:: 1.9 To test if a string is a valid IP address:: {{ myvar | ansible.netcommon.ipaddr }} You can also require a specific IP protocol version:: {{ myvar | ansible.netcommon.ipv4 }} {{ myvar | ansible.netcommon.ipv6 }} IP address filter can also be used to extract specific information from an IP address. For example, to get the IP address itself from a CIDR, you can use:: {{ '192.0.2.1/24' | ansible.netcommon.ipaddr('address') }} # => 192.168.0.1 More information about ``ipaddr`` filter and complete usage guide can be found in :ref:`playbooks_filters_ipaddr`. .. _network_filters: Network CLI filters ------------------- .. versionadded:: 2.4 To convert the output of a network device CLI command into structured JSON output, use the ``parse_cli`` filter:: {{ output | ansible.netcommon.parse_cli('path/to/spec') }} The ``parse_cli`` filter will load the spec file and pass the command output through it, returning JSON output. The YAML spec file defines how to parse the CLI output. The spec file should be valid formatted YAML. It defines how to parse the CLI output and return JSON data. Below is an example of a valid spec file that will parse the output from the ``show vlan`` command. .. code-block:: yaml --- vars: vlan: vlan_id: "{{ item.vlan_id }}" name: "{{ item.name }}" enabled: "{{ item.state != 'act/lshut' }}" state: "{{ item.state }}" keys: vlans: value: "{{ vlan }}" items: "^(?P\\d+)\\s+(?P\\w+)\\s+(?Pactive|act/lshut|suspended)" state_static: value: present The spec file above will return a JSON data structure that is a list of hashes with the parsed VLAN information. The same command could be parsed into a hash by using the key and values directives. Here is an example of how to parse the output into a hash value using the same ``show vlan`` command. .. code-block:: yaml --- vars: vlan: key: "{{ item.vlan_id }}" values: vlan_id: "{{ item.vlan_id }}" name: "{{ item.name }}" enabled: "{{ item.state != 'act/lshut' }}" state: "{{ item.state }}" keys: vlans: value: "{{ vlan }}" items: "^(?P\\d+)\\s+(?P\\w+)\\s+(?Pactive|act/lshut|suspended)" state_static: value: present Another common use case for parsing CLI commands is to break a large command into blocks that can be parsed. This can be done using the ``start_block`` and ``end_block`` directives to break the command into blocks that can be parsed. .. code-block:: yaml --- vars: interface: name: "{{ item[0].match[0] }}" state: "{{ item[1].state }}" mode: "{{ item[2].match[0] }}" keys: interfaces: value: "{{ interface }}" start_block: "^Ethernet.*$" end_block: "^$" items: - "^(?PEthernet\\d\\/\\d*)" - "admin state is (?P.+)," - "Port mode is (.+)" The example above will parse the output of ``show interface`` into a list of hashes. The network filters also support parsing the output of a CLI command using the TextFSM library. To parse the CLI output with TextFSM use the following filter:: {{ output.stdout[0] | ansible.netcommon.parse_cli_textfsm('path/to/fsm') }} Use of the TextFSM filter requires the TextFSM library to be installed. Network XML filters ------------------- .. versionadded:: 2.5 To convert the XML output of a network device command into structured JSON output, use the ``parse_xml`` filter:: {{ output | ansible.netcommon.parse_xml('path/to/spec') }} The ``parse_xml`` filter will load the spec file and pass the command output through formatted as JSON. The spec file should be valid formatted YAML. It defines how to parse the XML output and return JSON data. Below is an example of a valid spec file that will parse the output from the ``show vlan | display xml`` command. .. code-block:: yaml --- vars: vlan: vlan_id: "{{ item.vlan_id }}" name: "{{ item.name }}" desc: "{{ item.desc }}" enabled: "{{ item.state.get('inactive') != 'inactive' }}" state: "{% if item.state.get('inactive') == 'inactive'%} inactive {% else %} active {% endif %}" keys: vlans: value: "{{ vlan }}" top: configuration/vlans/vlan items: vlan_id: vlan-id name: name desc: description state: ".[@inactive='inactive']" The spec file above will return a JSON data structure that is a list of hashes with the parsed VLAN information. The same command could be parsed into a hash by using the key and values directives. Here is an example of how to parse the output into a hash value using the same ``show vlan | display xml`` command. .. code-block:: yaml --- vars: vlan: key: "{{ item.vlan_id }}" values: vlan_id: "{{ item.vlan_id }}" name: "{{ item.name }}" desc: "{{ item.desc }}" enabled: "{{ item.state.get('inactive') != 'inactive' }}" state: "{% if item.state.get('inactive') == 'inactive'%} inactive {% else %} active {% endif %}" keys: vlans: value: "{{ vlan }}" top: configuration/vlans/vlan items: vlan_id: vlan-id name: name desc: description state: ".[@inactive='inactive']" The value of ``top`` is the XPath relative to the XML root node. In the example XML output given below, the value of ``top`` is ``configuration/vlans/vlan``, which is an XPath expression relative to the root node (). ``configuration`` in the value of ``top`` is the outer most container node, and ``vlan`` is the inner-most container node. ``items`` is a dictionary of key-value pairs that map user-defined names to XPath expressions that select elements. The Xpath expression is relative to the value of the XPath value contained in ``top``. For example, the ``vlan_id`` in the spec file is a user defined name and its value ``vlan-id`` is the relative to the value of XPath in ``top`` Attributes of XML tags can be extracted using XPath expressions. The value of ``state`` in the spec is an XPath expression used to get the attributes of the ``vlan`` tag in output XML.:: vlan-1 200 This is vlan-1 .. note:: For more information on supported XPath expressions, see `XPath Support `_. Network VLAN filters -------------------- .. versionadded:: 2.8 Use the ``vlan_parser`` filter to transform an unsorted list of VLAN integers into a sorted string list of integers according to IOS-like VLAN list rules. This list has the following properties: * Vlans are listed in ascending order. * Three or more consecutive VLANs are listed with a dash. * The first line of the list can be first_line_len characters long. * Subsequent list lines can be other_line_len characters. To sort a VLAN list:: {{ [3003, 3004, 3005, 100, 1688, 3002, 3999] | ansible.netcommon.vlan_parser }} This example renders the following sorted list:: ['100,1688,3002-3005,3999'] Another example Jinja template:: {% set parsed_vlans = vlans | ansible.netcommon.vlan_parser %} switchport trunk allowed vlan {{ parsed_vlans[0] }} {% for i in range (1, parsed_vlans | count) %} switchport trunk allowed vlan add {{ parsed_vlans[i] }} {% endfor %} This allows for dynamic generation of VLAN lists on a Cisco IOS tagged interface. You can store an exhaustive raw list of the exact VLANs required for an interface and then compare that to the parsed IOS output that would actually be generated for the configuration. .. _hash_filters: Encrypting and checksumming strings and passwords ================================================= .. versionadded:: 1.9 To get the sha1 hash of a string:: {{ 'test1' | hash('sha1') }} # => "b444ac06613fc8d63795be9ad0beaf55011936ac" To get the md5 hash of a string:: {{ 'test1' | hash('md5') }} # => "5a105e8b9d40e1329780d62ea2265d8a" Get a string checksum:: {{ 'test2' | checksum }} # => "109f4b3c50d7b0df729d299bc6f8e9ef9066971f" Other hashes (platform dependent):: {{ 'test2' | hash('blowfish') }} To get a sha512 password hash (random salt):: {{ 'passwordsaresecret' | password_hash('sha512') }} # => "$6$UIv3676O/ilZzWEE$ktEfFF19NQPF2zyxqxGkAceTnbEgpEKuGBtk6MlU4v2ZorWaVQUMyurgmHCh2Fr4wpmQ/Y.AlXMJkRnIS4RfH/" To get a sha256 password hash with a specific salt:: {{ 'secretpassword' | password_hash('sha256', 'mysecretsalt') }} # => "$5$mysecretsalt$ReKNyDYjkKNqRVwouShhsEqZ3VOE8eoVO4exihOfvG4" An idempotent method to generate unique hashes per system is to use a salt that is consistent between runs:: {{ 'secretpassword' | password_hash('sha512', 65534 | random(seed=inventory_hostname) | string) }} # => "$6$43927$lQxPKz2M2X.NWO.gK.t7phLwOKQMcSq72XxDZQ0XzYV6DlL1OD72h417aj16OnHTGxNzhftXJQBcjbunLEepM0" Hash types available depend on the control system running Ansible, 'hash' depends on `hashlib `_, password_hash depends on `passlib `_. The `crypt `_ is used as a fallback if ``passlib`` is not installed. .. versionadded:: 2.7 Some hash types allow providing a rounds parameter:: {{ 'secretpassword' | password_hash('sha256', 'mysecretsalt', rounds=10000) }} # => "$5$rounds=10000$mysecretsalt$Tkm80llAxD4YHll6AgNIztKn0vzAACsuuEfYeGP7tm7" Hash type 'blowfish' (BCrypt) provides the facility to specify the version of the BCrypt algorithm .. code-block:: jinja {{ 'secretpassword' | password_hash('blowfish', '1234567890123456789012', ident='2b') }} # => "$2b$12$123456789012345678901uuJ4qFdej6xnWjOQT.FStqfdoY8dYUPC" .. note:: The parameter is only available for `blowfish (BCrypt) `_. Other hash types will simply ignore this parameter. Valid values for this parameter are: ['2', '2a', '2y', '2b'] .. versionadded:: 2.12 You can also use the Ansible :ref:`vault ` filter to encrypt data:: # simply encrypt my key in a vault vars: myvaultedkey: "{{ keyrawdata|vault(passphrase) }}" - name: save templated vaulted data template: src=dump_template_data.j2 dest=/some/key/vault.txt vars: mysalt: '{{ 2**256|random(seed=inventory_hostname) }}' template_data: '{{ secretdata|vault(vaultsecret, salt=mysalt) }}' And then decrypt it using the unvault filter:: # simply decrypt my key from a vault vars: mykey: "{{ myvaultedkey|unvault(passphrase) }}" - name: save templated unvaulted data template: src=dump_template_data.j2 dest=/some/key/clear.txt vars: template_data: '{{ secretdata|unvault(vaultsecret) }}' .. _other_useful_filters: Manipulating text ================= Several filters work with text, including URLs, file names, and path names. .. _comment_filter: Adding comments to files ------------------------ The ``comment`` filter lets you create comments in a file from text in a template, with a variety of comment styles. By default Ansible uses ``#`` to start a comment line and adds a blank comment line above and below your comment text. For example the following:: {{ "Plain style (default)" | comment }} produces this output: .. code-block:: text # # Plain style (default) # Ansible offers styles for comments in C (``//...``), C block (``/*...*/``), Erlang (``%...``) and XML (````):: {{ "C style" | comment('c') }} {{ "C block style" | comment('cblock') }} {{ "Erlang style" | comment('erlang') }} {{ "XML style" | comment('xml') }} You can define a custom comment character. This filter:: {{ "My Special Case" | comment(decoration="! ") }} produces: .. code-block:: text ! ! My Special Case ! You can fully customize the comment style:: {{ "Custom style" | comment('plain', prefix='#######\n#', postfix='#\n#######\n ###\n #') }} That creates the following output: .. code-block:: text ####### # # Custom style # ####### ### # The filter can also be applied to any Ansible variable. For example to make the output of the ``ansible_managed`` variable more readable, we can change the definition in the ``ansible.cfg`` file to this: .. code-block:: jinja [defaults] ansible_managed = This file is managed by Ansible.%n template: {file} date: %Y-%m-%d %H:%M:%S user: {uid} host: {host} and then use the variable with the `comment` filter:: {{ ansible_managed | comment }} which produces this output: .. code-block:: sh # # This file is managed by Ansible. # # template: /home/ansible/env/dev/ansible_managed/roles/role1/templates/test.j2 # date: 2015-09-10 11:02:58 # user: ansible # host: myhost # URLEncode Variables ------------------- The ``urlencode`` filter quotes data for use in a URL path or query using UTF-8:: {{ 'Trollhättan' | urlencode }} # => 'Trollh%C3%A4ttan' Splitting URLs -------------- .. versionadded:: 2.4 The ``urlsplit`` filter extracts the fragment, hostname, netloc, password, path, port, query, scheme, and username from an URL. With no arguments, returns a dictionary of all the fields:: {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('hostname') }} # => 'www.acme.com' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('netloc') }} # => 'user:password@www.acme.com:9000' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('username') }} # => 'user' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('password') }} # => 'password' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('path') }} # => '/dir/index.html' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('port') }} # => '9000' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('scheme') }} # => 'http' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('query') }} # => 'query=term' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit('fragment') }} # => 'fragment' {{ "http://user:password@www.acme.com:9000/dir/index.html?query=term#fragment" | urlsplit }} # => # { # "fragment": "fragment", # "hostname": "www.acme.com", # "netloc": "user:password@www.acme.com:9000", # "password": "password", # "path": "/dir/index.html", # "port": 9000, # "query": "query=term", # "scheme": "http", # "username": "user" # } Searching strings with regular expressions ------------------------------------------ To search in a string or extract parts of a string with a regular expression, use the ``regex_search`` filter:: # Extracts the database name from a string {{ 'server1/database42' | regex_search('database[0-9]+') }} # => 'database42' # Example for a case insensitive search in multiline mode {{ 'foo\nBAR' | regex_search('^bar', multiline=True, ignorecase=True) }} # => 'BAR' # Extracts server and database id from a string {{ 'server1/database42' | regex_search('server([0-9]+)/database([0-9]+)', '\\1', '\\2') }} # => ['1', '42'] # Extracts dividend and divisor from a division {{ '21/42' | regex_search('(?P[0-9]+)/(?P[0-9]+)', '\\g', '\\g') }} # => ['21', '42'] The ``regex_search`` filter returns an empty string if it cannot find a match:: {{ 'ansible' | regex_search('foobar') }} # => '' Note that due to historic behavior and custom re-implementation of some of the Jinja internals in Ansible there is an exception to the behavior. When used in a Jinja expression (for example in conjunction with operators, other filters, and so on) the return value differs, in those situations the return value is ``none``. See the two examples below:: {{ 'ansible' | regex_search('foobar') == '' }} # => False {{ 'ansible' | regex_search('foobar') == none }} # => True When ``jinja2_native`` setting is enabled, the ``regex_search`` filter always returns ``none`` if it cannot find a match. To extract all occurrences of regex matches in a string, use the ``regex_findall`` filter:: # Returns a list of all IPv4 addresses in the string {{ 'Some DNS servers are 8.8.8.8 and 8.8.4.4' | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }} # => ['8.8.8.8', '8.8.4.4'] # Returns all lines that end with "ar" {{ 'CAR\ntar\nfoo\nbar\n' | regex_findall('^.ar$', multiline=True, ignorecase=True) }} # => ['CAR', 'tar', 'bar'] To replace text in a string with regex, use the ``regex_replace`` filter:: # Convert "ansible" to "able" {{ 'ansible' | regex_replace('^a.*i(.*)$', 'a\\1') }} # => 'able' # Convert "foobar" to "bar" {{ 'foobar' | regex_replace('^f.*o(.*)$', '\\1') }} # => 'bar' # Convert "localhost:80" to "localhost, 80" using named groups {{ 'localhost:80' | regex_replace('^(?P.+):(?P\\d+)$', '\\g, \\g') }} # => 'localhost, 80' # Convert "localhost:80" to "localhost" {{ 'localhost:80' | regex_replace(':80') }} # => 'localhost' # Comment all lines that end with "ar" {{ 'CAR\ntar\nfoo\nbar\n' | regex_replace('^(.ar)$', '#\\1', multiline=True, ignorecase=True) }} # => '#CAR\n#tar\nfoo\n#bar\n' .. note:: If you want to match the whole string and you are using ``*`` make sure to always wraparound your regular expression with the start/end anchors. For example ``^(.*)$`` will always match only one result, while ``(.*)`` on some Python versions will match the whole string and an empty string at the end, which means it will make two replacements:: # add "https://" prefix to each item in a list GOOD: {{ hosts | map('regex_replace', '^(.*)$', 'https://\\1') | list }} {{ hosts | map('regex_replace', '(.+)', 'https://\\1') | list }} {{ hosts | map('regex_replace', '^', 'https://') | list }} BAD: {{ hosts | map('regex_replace', '(.*)', 'https://\\1') | list }} # append ':80' to each item in a list GOOD: {{ hosts | map('regex_replace', '^(.*)$', '\\1:80') | list }} {{ hosts | map('regex_replace', '(.+)', '\\1:80') | list }} {{ hosts | map('regex_replace', '$', ':80') | list }} BAD: {{ hosts | map('regex_replace', '(.*)', '\\1:80') | list }} .. note:: Prior to ansible 2.0, if ``regex_replace`` filter was used with variables inside YAML arguments (as opposed to simpler 'key=value' arguments), then you needed to escape backreferences (for example, ``\\1``) with 4 backslashes (``\\\\``) instead of 2 (``\\``). .. versionadded:: 2.0 To escape special characters within a standard Python regex, use the ``regex_escape`` filter (using the default ``re_type='python'`` option):: # convert '^f.*o(.*)$' to '\^f\.\*o\(\.\*\)\$' {{ '^f.*o(.*)$' | regex_escape() }} .. versionadded:: 2.8 To escape special characters within a POSIX basic regex, use the ``regex_escape`` filter with the ``re_type='posix_basic'`` option:: # convert '^f.*o(.*)$' to '\^f\.\*o(\.\*)\$' {{ '^f.*o(.*)$' | regex_escape('posix_basic') }} Managing file names and path names ---------------------------------- To get the last name of a file path, like 'foo.txt' out of '/etc/asdf/foo.txt':: {{ path | basename }} To get the last name of a windows style file path (new in version 2.0):: {{ path | win_basename }} To separate the windows drive letter from the rest of a file path (new in version 2.0):: {{ path | win_splitdrive }} To get only the windows drive letter:: {{ path | win_splitdrive | first }} To get the rest of the path without the drive letter:: {{ path | win_splitdrive | last }} To get the directory from a path:: {{ path | dirname }} To get the directory from a windows path (new version 2.0):: {{ path | win_dirname }} To expand a path containing a tilde (`~`) character (new in version 1.5):: {{ path | expanduser }} To expand a path containing environment variables:: {{ path | expandvars }} .. note:: `expandvars` expands local variables; using it on remote paths can lead to errors. .. versionadded:: 2.6 To get the real path of a link (new in version 1.8):: {{ path | realpath }} To get the relative path of a link, from a start point (new in version 1.7):: {{ path | relpath('/etc') }} To get the root and extension of a path or file name (new in version 2.0):: # with path == 'nginx.conf' the return would be ('nginx', '.conf') {{ path | splitext }} The ``splitext`` filter always returns a pair of strings. The individual components can be accessed by using the ``first`` and ``last`` filters:: # with path == 'nginx.conf' the return would be 'nginx' {{ path | splitext | first }} # with path == 'nginx.conf' the return would be '.conf' {{ path | splitext | last }} To join one or more path components:: {{ ('/etc', path, 'subdir', file) | path_join }} .. versionadded:: 2.10 Manipulating strings ==================== To add quotes for shell usage:: - name: Run a shell command ansible.builtin.shell: echo {{ string_value | quote }} To concatenate a list into a string:: {{ list | join(" ") }} To split a string into a list:: {{ csv_string | split(",") }} .. versionadded:: 2.11 To work with Base64 encoded strings:: {{ encoded | b64decode }} {{ decoded | string | b64encode }} As of version 2.6, you can define the type of encoding to use, the default is ``utf-8``:: {{ encoded | b64decode(encoding='utf-16-le') }} {{ decoded | string | b64encode(encoding='utf-16-le') }} .. note:: The ``string`` filter is only required for Python 2 and ensures that text to encode is a unicode string. Without that filter before b64encode the wrong value will be encoded. .. versionadded:: 2.6 Managing UUIDs ============== To create a namespaced UUIDv5:: {{ string | to_uuid(namespace='11111111-2222-3333-4444-555555555555') }} .. versionadded:: 2.10 To create a namespaced UUIDv5 using the default Ansible namespace '361E6D51-FAEC-444A-9079-341386DA8E2E':: {{ string | to_uuid }} .. versionadded:: 1.9 To make use of one attribute from each item in a list of complex variables, use the :func:`Jinja2 map filter `:: # get a comma-separated list of the mount points (for example, "/,/mnt/stuff") on a host {{ ansible_mounts | map(attribute='mount') | join(',') }} Handling dates and times ======================== To get a date object from a string use the `to_datetime` filter:: # Get total amount of seconds between two dates. Default date format is %Y-%m-%d %H:%M:%S but you can pass your own format {{ (("2016-08-14 20:00:12" | to_datetime) - ("2015-12-25" | to_datetime('%Y-%m-%d'))).total_seconds() }} # Get remaining seconds after delta has been calculated. NOTE: This does NOT convert years, days, hours, and so on to seconds. For that, use total_seconds() {{ (("2016-08-14 20:00:12" | to_datetime) - ("2016-08-14 18:00:00" | to_datetime)).seconds }} # This expression evaluates to "12" and not "132". Delta is 2 hours, 12 seconds # get amount of days between two dates. This returns only number of days and discards remaining hours, minutes, and seconds {{ (("2016-08-14 20:00:12" | to_datetime) - ("2015-12-25" | to_datetime('%Y-%m-%d'))).days }} .. note:: For a full list of format codes for working with python date format strings, see https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior. .. versionadded:: 2.4 To format a date using a string (like with the shell date command), use the "strftime" filter:: # Display year-month-day {{ '%Y-%m-%d' | strftime }} # => "2021-03-19" # Display hour:min:sec {{ '%H:%M:%S' | strftime }} # => "21:51:04" # Use ansible_date_time.epoch fact {{ '%Y-%m-%d %H:%M:%S' | strftime(ansible_date_time.epoch) }} # => "2021-03-19 21:54:09" # Use arbitrary epoch value {{ '%Y-%m-%d' | strftime(0) }} # => 1970-01-01 {{ '%Y-%m-%d' | strftime(1441357287) }} # => 2015-09-04 .. note:: To get all string possibilities, check https://docs.python.org/3/library/time.html#time.strftime Getting Kubernetes resource names ================================= .. note:: These filters have migrated to the `kubernetes.core `_ collection. Follow the installation instructions to install that collection. Use the "k8s_config_resource_name" filter to obtain the name of a Kubernetes ConfigMap or Secret, including its hash:: {{ configmap_resource_definition | kubernetes.core.k8s_config_resource_name }} This can then be used to reference hashes in Pod specifications:: my_secret: kind: Secret metadata: name: my_secret_name deployment_resource: kind: Deployment spec: template: spec: containers: - envFrom: - secretRef: name: {{ my_secret | kubernetes.core.k8s_config_resource_name }} .. versionadded:: 2.8 .. _PyYAML library: https://pyyaml.org/ .. _PyYAML documentation: https://pyyaml.org/wiki/PyYAMLDocumentation .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables :ref:`playbooks_loops` Looping in playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.529556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_filters_ipaddr.rst0000644000000000000000000006614200000000000027244 0ustar00rootroot00000000000000:orphan: .. _playbooks_filters_ipaddr: ipaddr filter ````````````` .. versionadded:: 1.9 ``ipaddr()`` is a Jinja2 filter designed to provide an interface to the `netaddr`_ Python package from within Ansible. It can operate on strings or lists of items, test various data to check if they are valid IP addresses, and manipulate the input data to extract requested information. ``ipaddr()`` works with both IPv4 and IPv6 addresses in various forms. There are also additional functions available to manipulate IP subnets and MAC addresses. .. note:: The ``ipaddr()`` filter migrated to the `ansible.netcommon `_ collection. Follow the installation instructions to install that collection. To use this filter in Ansible, you need to install the `netaddr`_ Python library on a computer on which you use Ansible (it is not required on remote hosts). It can usually be installed with either your system package manager or using ``pip``: .. code-block:: bash pip install netaddr .. _netaddr: https://pypi.org/project/netaddr/ .. contents:: Topics :local: :depth: 2 :backlinks: top Basic tests ^^^^^^^^^^^ ``ipaddr()`` is designed to return the input value if a query is True, and ``False`` if a query is False. This way it can be easily used in chained filters. To use the filter, pass a string to it: .. code-block:: none {{ '192.0.2.0' | ansible.netcommon.ipaddr }} You can also pass the values as variables: .. code-block:: yaml+jinja {{ myvar | ansible.netcommon.ipaddr }} Here are some example test results of various input strings: .. code-block:: none # These values are valid IP addresses or network ranges '192.168.0.1' -> 192.168.0.1 '192.168.32.0/24' -> 192.168.32.0/24 'fe80::100/10' -> fe80::100/10 45443646733 -> ::a:94a7:50d '523454/24' -> 0.7.252.190/24 # Values that are not valid IP addresses or network ranges 'localhost' -> False True -> False 'space bar' -> False False -> False '' -> False ':' -> False 'fe80:/10' -> False Sometimes you need either IPv4 or IPv6 addresses. To filter only for a particular type, ``ipaddr()`` filter has two "aliases", ``ipv4()`` and ``ipv6()``. Example use of an IPv4 filter: .. code-block:: yaml+jinja {{ myvar | ansible.netcommon.ipv4 }} A similar example of an IPv6 filter: .. code-block:: yaml+jinja {{ myvar | ansible.netcommon.ipv6 }} Here's some example test results to look for IPv4 addresses: .. code-block:: none '192.168.0.1' -> 192.168.0.1 '192.168.32.0/24' -> 192.168.32.0/24 'fe80::100/10' -> False 45443646733 -> False '523454/24' -> 0.7.252.190/24 And the same data filtered for IPv6 addresses: .. code-block:: none '192.168.0.1' -> False '192.168.32.0/24' -> False 'fe80::100/10' -> fe80::100/10 45443646733 -> ::a:94a7:50d '523454/24' -> False Filtering lists ^^^^^^^^^^^^^^^ You can filter entire lists - ``ipaddr()`` will return a list with values valid for a particular query. .. code-block:: yaml+jinja # Example list of values test_list: ['192.24.2.1', 'host.fqdn', '::1', '192.168.32.0/24', 'fe80::100/10', True, '', '42540766412265424405338506004571095040/64'] # {{ test_list | ansible.netcommon.ipaddr }} ['192.24.2.1', '::1', '192.168.32.0/24', 'fe80::100/10', '2001:db8:32c:faad::/64'] # {{ test_list | ansible.netcommon.ipv4 }} ['192.24.2.1', '192.168.32.0/24'] # {{ test_list | ansible.netcommon.ipv6 }} ['::1', 'fe80::100/10', '2001:db8:32c:faad::/64'] Wrapping IPv6 addresses in [ ] brackets ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Some configuration files require IPv6 addresses to be "wrapped" in square brackets (``[ ]``). To accomplish that, you can use the ``ipwrap()`` filter. It will wrap all IPv6 addresses and leave any other strings intact. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipwrap }} ['192.24.2.1', 'host.fqdn', '[::1]', '192.168.32.0/24', '[fe80::100]/10', True, '', '[2001:db8:32c:faad::]/64'] As you can see, ``ipwrap()`` did not filter out non-IP address values, which is usually what you want when for example you are mixing IP addresses with hostnames. If you still want to filter out all non-IP address values, you can chain both filters together. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr | ansible.netcommon.ipwrap }} ['192.24.2.1', '[::1]', '192.168.32.0/24', '[fe80::100]/10', '[2001:db8:32c:faad::]/64'] Basic queries ^^^^^^^^^^^^^ You can provide a single argument to each ``ipaddr()`` filter. The filter will then treat it as a query and return values modified by that query. Lists will contain only values that you are querying for. Types of queries include: - query by name: ``ansible.netcommon.ipaddr('address')``, ``ansible.netcommon.ipv4('network')``; - query by CIDR range: ``ansible.netcommon.ipaddr('192.168.0.0/24')``, ``ansible.netcommon.ipv6('2001:db8::/32')``; - query by index number: ``ansible.netcommon.ipaddr('1')``, ``ansible.netcommon.ipaddr('-1')``; If a query type is not recognized, Ansible will raise an error. Getting information about hosts and networks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here's our test list again: .. code-block:: yaml+jinja # Example list of values test_list: ['192.24.2.1', 'host.fqdn', '::1', '192.168.32.0/24', 'fe80::100/10', True, '', '42540766412265424405338506004571095040/64'] Let's take the list above and get only those elements that are host IP addresses and not network ranges: .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('address') }} ['192.24.2.1', '::1', 'fe80::100'] As you can see, even though some values had a host address with a CIDR prefix, they were dropped by the filter. If you want host IP addresses with their correct CIDR prefixes (as is common with IPv6 addressing), you can use the ``ipaddr('host')`` filter. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('host') }} ['192.24.2.1/32', '::1/128', 'fe80::100/10'] Filtering by IP address type also works. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipv4('address') }} ['192.24.2.1'] # {{ test_list | ansible.netcommon.ipv6('address') }} ['::1', 'fe80::100'] You can check if IP addresses or network ranges are accessible on a public Internet, or if they are in private networks: .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('public') }} ['192.24.2.1', '2001:db8:32c:faad::/64'] # {{ test_list | ansible.netcommon.ipaddr('private') }} ['192.168.32.0/24', 'fe80::100/10'] You can check which values are specifically network ranges: .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('net') }} ['192.168.32.0/24', '2001:db8:32c:faad::/64'] You can also check how many IP addresses can be in a certain range. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('size') }} [256, 18446744073709551616L] By specifying a network range as a query, you can check if a given value is in that range. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('192.0.0.0/8') }} ['192.24.2.1', '192.168.32.0/24'] If you specify a positive or negative integer as a query, ``ipaddr()`` will treat this as an index and will return the specific IP address from a network range, in the 'host/prefix' format. .. code-block:: yaml+jinja # First IP address (network address) # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('0') }} ['192.168.32.0/24', '2001:db8:32c:faad::/64'] # Second IP address (usually the gateway host) # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('1') }} ['192.168.32.1/24', '2001:db8:32c:faad::1/64'] # Last IP address (the broadcast address in IPv4 networks) # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('-1') }} ['192.168.32.255/24', '2001:db8:32c:faad:ffff:ffff:ffff:ffff/64'] You can also select IP addresses from a range by their index, from the start or end of the range. .. code-block:: yaml+jinja # Returns from the start of the range # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('200') }} ['192.168.32.200/24', '2001:db8:32c:faad::c8/64'] # Returns from the end of the range # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('-200') }} ['192.168.32.56/24', '2001:db8:32c:faad:ffff:ffff:ffff:ff38/64'] # {{ test_list | ansible.netcommon.ipaddr('net') | ansible.netcommon.ipaddr('400') }} ['2001:db8:32c:faad::190/64'] Getting information from host/prefix values ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You frequently use a combination of IP addresses and subnet prefixes ("CIDR"), this is even more common with IPv6. The ``ansible.netcommon.ipaddr()`` filter can extract useful data from these prefixes. Here's an example set of two host prefixes (with some "control" values): .. code-block:: yaml+jinja host_prefix: ['2001:db8:deaf:be11::ef3/64', '192.0.2.48/24', '127.0.0.1', '192.168.0.0/16'] First, let's make sure that we only work with correct host/prefix values, not just subnets or single IP addresses. .. code-block:: yaml+jinja # {{ host_prefix | ansible.netcommon.ipaddr('host/prefix') }} ['2001:db8:deaf:be11::ef3/64', '192.0.2.48/24'] In Debian-based systems, the network configuration stored in the ``/etc/network/interfaces`` file uses a combination of IP address, network address, netmask and broadcast address to configure an IPv4 network interface. We can get these values from a single 'host/prefix' combination: .. code-block:: jinja # Jinja2 template {% set ipv4_host = host_prefix | unique | ansible.netcommon.ipv4('host/prefix') | first %} iface eth0 inet static address {{ ipv4_host | ansible.netcommon.ipaddr('address') }} network {{ ipv4_host | ansible.netcommon.ipaddr('network') }} netmask {{ ipv4_host | ansible.netcommon.ipaddr('netmask') }} broadcast {{ ipv4_host | ansible.netcommon.ipaddr('broadcast') }} # Generated configuration file iface eth0 inet static address 192.0.2.48 network 192.0.2.0 netmask 255.255.255.0 broadcast 192.0.2.255 In the above example, we needed to handle the fact that values were stored in a list, which is unusual in IPv4 networks, where only a single IP address can be set on an interface. However, IPv6 networks can have multiple IP addresses set on an interface: .. code-block:: jinja # Jinja2 template iface eth0 inet6 static {% set ipv6_list = host_prefix | unique | ansible.netcommon.ipv6('host/prefix') %} address {{ ipv6_list[0] }} {% if ipv6_list | length > 1 %} {% for subnet in ipv6_list[1:] %} up /sbin/ip address add {{ subnet }} dev eth0 down /sbin/ip address del {{ subnet }} dev eth0 {% endfor %} {% endif %} # Generated configuration file iface eth0 inet6 static address 2001:db8:deaf:be11::ef3/64 If needed, you can extract subnet and prefix information from the 'host/prefix' value: .. code-block:: jinja # {{ host_prefix | ansible.netcommon.ipaddr('host/prefix') | ansible.netcommon.ipaddr('subnet') }} ['2001:db8:deaf:be11::/64', '192.0.2.0/24'] # {{ host_prefix | ansible.netcommon.ipaddr('host/prefix') | ansible.netcommon.ipaddr('prefix') }} [64, 24] Converting subnet masks to CIDR notation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Given a subnet in the form of network address and subnet mask, the ``ipaddr()`` filter can convert it into CIDR notation. This can be useful for converting Ansible facts gathered about network configuration from subnet masks into CIDR format. .. code-block:: yaml+jinja ansible_default_ipv4: { address: "192.168.0.11", alias: "eth0", broadcast: "192.168.0.255", gateway: "192.168.0.1", interface: "eth0", macaddress: "fa:16:3e:c4:bd:89", mtu: 1500, netmask: "255.255.255.0", network: "192.168.0.0", type: "ether" } First concatenate the network and netmask: .. code-block:: yaml+jinja net_mask: "{{ ansible_default_ipv4.network }}/{{ ansible_default_ipv4.netmask }}" '192.168.0.0/255.255.255.0' This result can be converted to canonical form with ``ipaddr()`` to produce a subnet in CIDR format. .. code-block:: yaml+jinja # {{ net_mask | ansible.netcommon.ipaddr('prefix') }} '24' # {{ net_mask | ansible.netcommon.ipaddr('net') }} '192.168.0.0/24' Getting information about the network in CIDR notation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Given an IP address, the ``ipaddr()`` filter can produce the network address in CIDR notation. This can be useful when you want to obtain the network address from the IP address in CIDR format. Here's an example of IP address: .. code-block:: yaml+jinja ip_address: "{{ ansible_default_ipv4.address }}/{{ ansible_default_ipv4.netmask }}" '192.168.0.11/255.255.255.0' This can be used to obtain the network address in CIDR notation format. .. code-block:: yaml+jinja # {{ ip_address | ansible.netcommon.ipaddr('network/prefix') }} '192.168.0.0/24' IP address conversion ^^^^^^^^^^^^^^^^^^^^^ Here's our test list again: .. code-block:: yaml+jinja # Example list of values test_list: ['192.24.2.1', 'host.fqdn', '::1', '192.168.32.0/24', 'fe80::100/10', True, '', '42540766412265424405338506004571095040/64'] You can convert IPv4 addresses into IPv6 addresses. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipv4('ipv6') }} ['::ffff:192.24.2.1/128', '::ffff:192.168.32.0/120'] Converting from IPv6 to IPv4 works very rarely .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipv6('ipv4') }} ['0.0.0.1/32'] But we can make a double conversion if needed: .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('ipv6') | ansible.netcommon.ipaddr('ipv4') }} ['192.24.2.1/32', '0.0.0.1/32', '192.168.32.0/24'] You can convert IP addresses to integers, the same way that you can convert integers into IP addresses. .. code-block:: yaml+jinja # {{ test_list | ansible.netcommon.ipaddr('address') | ansible.netcommon.ipaddr('int') }} [3222798849, 1, '3232243712/24', '338288524927261089654018896841347694848/10', '42540766412265424405338506004571095040/64'] You can convert IPv4 address to `Hexadecimal notation `_ with optional delimiter: .. code-block:: yaml+jinja # {{ '192.168.1.5' | ansible.netcommon.ip4_hex }} c0a80105 # {{ '192.168.1.5' | ansible.netcommon.ip4_hex(':') }} c0:a8:01:05 You can convert IP addresses to PTR records: .. code-block:: yaml+jinja # {% for address in test_list | ansible.netcommon.ipaddr %} # {{ address | ansible.netcommon.ipaddr('revdns') }} # {% endfor %} 1.2.24.192.in-addr.arpa. 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 0.32.168.192.in-addr.arpa. 0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.a.a.f.c.2.3.0.8.b.d.0.1.0.0.2.ip6.arpa. Converting IPv4 address to a 6to4 address ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A `6to4`_ tunnel is a way to access the IPv6 Internet from an IPv4-only network. If you have a public IPv4 address, you can automatically configure its IPv6 equivalent in the ``2002::/16`` network range. After conversion you will gain access to a ``2002:xxxx:xxxx::/48`` subnet which could be split into 65535 ``/64`` subnets if needed. To convert your IPv4 address, just send it through the ``'6to4'`` filter. It will be automatically converted to a router address (with a ``::1/48`` host address). .. code-block:: yaml+jinja # {{ '193.0.2.0' | ansible.netcommon.ipaddr('6to4') }} 2002:c100:0200::1/48 .. _6to4: https://en.wikipedia.org/wiki/6to4 Finding IP addresses within a range ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To find usable IP addresses within an IP range, try these ``ipaddr`` filters: To find the next usable IP address in a range, use ``next_usable``: .. code-block:: yaml+jinja # {{ '192.168.122.1/24' | ansible.netcommon.ipaddr('next_usable') }} 192.168.122.2 To find the last usable IP address from a range, use ``last_usable``. .. code-block:: yaml+jinja # {{ '192.168.122.1/24' | ansible.netcommon.ipaddr('last_usable') }} 192.168.122.254 To find the available range of IP addresses from the given network address, use ``range_usable``. .. code-block:: yaml+jinja # {{ '192.168.122.1/24' | ansible.netcommon.ipaddr('range_usable') }} 192.168.122.1-192.168.122.254 To find the peer IP address for a point to point link, use ``peer``. .. code-block:: yaml+jinja # {{ '192.168.122.1/31' | ansible.netcommon.ipaddr('peer') }} 192.168.122.0 # {{ '192.168.122.1/30' | ansible.netcommon.ipaddr('peer') }} 192.168.122.2 To return the nth ip from a network, use the filter ``nthhost``. .. code-block:: yaml+jinja # {{ '10.0.0.0/8' | ansible.netcommon.nthhost(305) }} 10.0.1.49 ``nthhost`` also supports a negative value. .. code-block:: yaml+jinja # {{ '10.0.0.0/8' | ansible.netcommon.nthhost(-1) }} 10.255.255.255 To find the next nth usable IP address in relation to another within a range, use ``next_nth_usable`` In the example, ``next_nth_usable`` returns the second usable IP address for the given IP range: .. code-block:: yaml+jinja # {{ '192.168.122.1/24' | ansible.netcommon.next_nth_usable(2) }} 192.168.122.3 If there is no usable address, it returns an empty string. .. code-block:: yaml+jinja # {{ '192.168.122.254/24' | ansible.netcommon.next_nth_usable(2) }} "" Just like ``next_nth_ansible``, you have ``previous_nth_usable`` to find the previous usable address: .. code-block:: yaml+jinja # {{ '192.168.122.10/24' | ansible.netcommon.previous_nth_usable(2) }} 192.168.122.8 Testing if a address belong to a network range ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``network_in_usable`` filter returns whether an address passed as an argument is usable in a network. Usable addresses are addresses that can be assigned to a host. The network ID and the broadcast address are not usable addresses. .. code-block:: yaml+jinja # {{ '192.168.0.0/24' | ansible.netcommon.network_in_usable( '192.168.0.1' ) }} True # {{ '192.168.0.0/24' | ansible.netcommon.network_in_usable( '192.168.0.255' ) }} False # {{ '192.168.0.0/16' | ansible.netcommon.network_in_usable( '192.168.0.255' ) }} True The ``network_in_network`` filter returns whether an address or a network passed as argument is in a network. .. code-block:: yaml+jinja # {{ '192.168.0.0/24' | ansible.netcommon.network_in_network( '192.168.0.1' ) }} True # {{ '192.168.0.0/24' | ansible.netcommon.network_in_network( '192.168.0.0/24' ) }} True # {{ '192.168.0.0/24' | ansible.netcommon.network_in_network( '192.168.0.255' ) }} True # Check in a network is part of another network # {{ '192.168.0.0/16' | ansible.netcommon.network_in_network( '192.168.0.0/24' ) }} True To check whether multiple addresses belong to a network, use the ``reduce_on_network`` filter. .. code-block:: yaml+jinja # {{ ['192.168.0.34', '10.3.0.3', '192.168.2.34'] | ansible.netcommon.reduce_on_network( '192.168.0.0/24' ) }} ['192.168.0.34'] IP Math ^^^^^^^ .. versionadded:: 2.7 The ``ipmath()`` filter can be used to do simple IP math/arithmetic. Here are a few simple examples: .. code-block:: yaml+jinja # Get the next five addresses based on an IP address # {{ '192.168.1.5' | ansible.netcommon.ipmath(5) }} 192.168.1.10 # Get the ten previous addresses based on an IP address # {{ '192.168.0.5' | ansible.netcommon.ipmath(-10) }} 192.167.255.251 # Get the next five addresses using CIDR notation # {{ '192.168.1.1/24' | ansible.netcommon.ipmath(5) }} 192.168.1.6 # Get the previous five addresses using CIDR notation # {{ '192.168.1.6/24' | ansible.netcommon.ipmath(-5) }} 192.168.1.1 # Get the previous ten address using cidr notation # It returns a address of the previous network range # {{ '192.168.2.6/24' | ansible.netcommon.ipmath(-10) }} 192.168.1.252 # Get the next ten addresses in IPv6 # {{ '2001::1' | ansible.netcommon.ipmath(10) }} 2001::b # Get the previous ten address in IPv6 # {{ '2001::5' | ansible.netcommon.ipmath(-10) }} 2000:ffff:ffff:ffff:ffff:ffff:ffff:fffb Subnet manipulation ^^^^^^^^^^^^^^^^^^^ The ``ipsubnet()`` filter can be used to manipulate network subnets in several ways. Here is an example IP address and subnet: .. code-block:: yaml+jinja address: '192.168.144.5' subnet: '192.168.0.0/16' To check if a given string is a subnet, pass it through the filter without any arguments. If the given string is an IP address, it will be converted into a subnet. .. code-block:: yaml+jinja # {{ address | ansible.netcommon.ipsubnet }} 192.168.144.5/32 # {{ subnet | ansible.netcommon.ipsubnet }} 192.168.0.0/16 If you specify a subnet size as the first parameter of the ``ipsubnet()`` filter, and the subnet size is **smaller than the current one**, you will get the number of subnets a given subnet can be split into. .. code-block:: yaml+jinja # {{ subnet | ansible.netcommon.ipsubnet(20) }} 16 The second argument of the ``ipsubnet()`` filter is an index number; by specifying it you can get a new subnet with the specified size. .. code-block:: yaml+jinja # First subnet # {{ subnet | ansible.netcommon.ipsubnet(20, 0) }} 192.168.0.0/20 # Last subnet # {{ subnet | ansible.netcommon.ipsubnet(20, -1) }} 192.168.240.0/20 # Fifth subnet # {{ subnet | ansible.netcommon.ipsubnet(20, 5) }} 192.168.80.0/20 # Fifth to last subnet # {{ subnet | ansible.netcommon.ipsubnet(20, -5) }} 192.168.176.0/20 If you specify an IP address instead of a subnet, and give a subnet size as the first argument, the ``ipsubnet()`` filter will instead return the biggest subnet that contains that given IP address. .. code-block:: yaml+jinja # {{ address | ansible.netcommon.ipsubnet(20) }} 192.168.144.0/20 By specifying an index number as a second argument, you can select smaller and smaller subnets. .. code-block:: yaml+jinja # First subnet # {{ address | ansible.netcommon.ipsubnet(18, 0) }} 192.168.128.0/18 # Last subnet # {{ address | ansible.netcommon.ipsubnet(18, -1) }} 192.168.144.4/31 # Fifth subnet # {{ address | ansible.netcommon.ipsubnet(18, 5) }} 192.168.144.0/23 # Fifth to last subnet # {{ address | ansible.netcommon.ipsubnet(18, -5) }} 192.168.144.0/27 By specifying another subnet as a second argument, if the second subnet includes the first, you can determine the rank of the first subnet in the second. .. code-block:: yaml+jinja # The rank of the IP in the subnet (the IP is the 36870nth /32 of the subnet) # {{ address | ansible.netcommon.ipsubnet(subnet) }} 36870 # The rank in the /24 that contain the address # {{ address | ansible.netcommon.ipsubnet('192.168.144.0/24') }} 6 # An IP with the subnet in the first /30 in a /24 # {{ '192.168.144.1/30' | ansible.netcommon.ipsubnet('192.168.144.0/24') }} 1 # The fifth subnet /30 in a /24 # {{ '192.168.144.16/30' | ansible.netcommon.ipsubnet('192.168.144.0/24') }} 5 If the second subnet doesn't include the first subnet, the ``ipsubnet()`` filter raises an error. You can use the ``ipsubnet()`` filter with the ``ipaddr()`` filter to, for example, split a given ``/48`` prefix into smaller ``/64`` subnets: .. code-block:: yaml+jinja # {{ '193.0.2.0' | ansible.netcommon.ipaddr('6to4') | ipsubnet(64, 58820) | ansible.netcommon.ipaddr('1') }} 2002:c100:200:e5c4::1/64 Because of the size of IPv6 subnets, iteration over all of them to find the correct one may take some time on slower computers, depending on the size difference between the subnets. Subnet Merging ^^^^^^^^^^^^^^ .. versionadded:: 2.6 The ``cidr_merge()`` filter can be used to merge subnets or individual addresses into their minimal representation, collapsing overlapping subnets and merging adjacent ones wherever possible. .. code-block:: yaml+jinja {{ ['192.168.0.0/17', '192.168.128.0/17', '192.168.128.1' ] | cidr_merge }} # => ['192.168.0.0/16'] {{ ['192.168.0.0/24', '192.168.1.0/24', '192.168.3.0/24'] | cidr_merge }} # => ['192.168.0.0/23', '192.168.3.0/24'] Changing the action from 'merge' to 'span' will instead return the smallest subnet which contains all of the inputs. .. code-block:: yaml+jinja {{ ['192.168.0.0/24', '192.168.3.0/24'] | ansible.netcommon.cidr_merge('span') }} # => '192.168.0.0/22' {{ ['192.168.1.42', '192.168.42.1'] | ansible.netcommon.cidr_merge('span') }} # => '192.168.0.0/18' MAC address filter ^^^^^^^^^^^^^^^^^^ You can use the ``hwaddr()`` filter to check if a given string is a MAC address or convert it between various formats. Examples: .. code-block:: yaml+jinja # Example MAC address macaddress: '1a:2b:3c:4d:5e:6f' # Check if given string is a MAC address # {{ macaddress | ansible.netcommon.hwaddr }} 1a:2b:3c:4d:5e:6f # Convert MAC address to PostgreSQL format # {{ macaddress | ansible.netcommon.hwaddr('pgsql') }} 1a2b3c:4d5e6f # Convert MAC address to Cisco format # {{ macaddress | ansible.netcommon.hwaddr('cisco') }} 1a2b.3c4d.5e6f The supported formats result in the following conversions for the ``1a:2b:3c:4d:5e:6f`` MAC address: .. code-block:: yaml+jinja bare: 1A2B3C4D5E6F bool: True int: 28772997619311 cisco: 1a2b.3c4d.5e6f eui48 or win: 1A-2B-3C-4D-5E-6F linux or unix: 1a:2b:3c:4d:5e:6f: pgsql, postgresql, or psql: 1a2b3c:4d5e6f Generate an IPv6 address in Stateless Configuration (SLAAC) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the filter ``slaac()`` generates an IPv6 address for a given network and a MAC Address in Stateless Configuration. .. code-block:: yaml+jinja # {{ 'fdcf:1894:23b5:d38c:0000:0000:0000:0000' | slaac('c2:31:b3:83:bf:2b') }} fdcf:1894:23b5:d38c:c031:b3ff:fe83:bf2b .. seealso:: `ansible.netcommon `_ Ansible network collection for common code :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_filters` Introduction to Jinja2 filters and their uses :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables :ref:`playbooks_loops` Looping in playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.529556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_handlers.rst0000644000000000000000000001346300000000000026047 0ustar00rootroot00000000000000.. _handlers: Handlers: running operations on change ====================================== Sometimes you want a task to run only when a change is made on a machine. For example, you may want to restart a service if a task updates the configuration of that service, but not if the configuration is unchanged. Ansible uses handlers to address this use case. Handlers are tasks that only run when notified. Each handler should have a globally unique name. .. contents:: :local: Handler example --------------- This playbook, ``verify-apache.yml``, contains a single play with a handler. .. code-block:: yaml --- - name: Verify apache installation hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: Ensure apache is at the latest version ansible.builtin.yum: name: httpd state: latest - name: Write the apache config file ansible.builtin.template: src: /srv/httpd.j2 dest: /etc/httpd.conf notify: - Restart apache - name: Ensure apache is running ansible.builtin.service: name: httpd state: started handlers: - name: Restart apache ansible.builtin.service: name: httpd state: restarted In this example playbook, the second task notifies the handler. A single task can notify more than one handler. .. code-block:: yaml - name: Template configuration file ansible.builtin.template: src: template.j2 dest: /etc/foo.conf notify: - Restart memcached - Restart apache handlers: - name: Restart memcached ansible.builtin.service: name: memcached state: restarted - name: Restart apache ansible.builtin.service: name: apache state: restarted Controlling when handlers run ----------------------------- By default, handlers run after all the tasks in a particular play have been completed. This approach is efficient, because the handler only runs once, regardless of how many tasks notify it. For example, if multiple tasks update a configuration file and notify a handler to restart Apache, Ansible only bounces Apache once to avoid unnecessary restarts. If you need handlers to run before the end of the play, add a task to flush them using the :ref:`meta module `, which executes Ansible actions. .. code-block:: yaml tasks: - name: Some tasks go here ansible.builtin.shell: ... - name: Flush handlers meta: flush_handlers - name: Some other tasks ansible.builtin.shell: ... The ``meta: flush_handlers`` task triggers any handlers that have been notified at that point in the play. Using variables with handlers ----------------------------- You may want your Ansible handlers to use variables. For example, if the name of a service varies slightly by distribution, you want your output to show the exact name of the restarted service for each target machine. Avoid placing variables in the name of the handler. Since handler names are templated early on, Ansible may not have a value available for a handler name like this:: handlers: # This handler name may cause your play to fail! - name: Restart "{{ web_service_name }}" If the variable used in the handler name is not available, the entire play fails. Changing that variable mid-play **will not** result in newly created handler. Instead, place variables in the task parameters of your handler. You can load the values using ``include_vars`` like this: .. code-block:: yaml+jinja tasks: - name: Set host variables based on distribution include_vars: "{{ ansible_facts.distribution }}.yml" handlers: - name: Restart web service ansible.builtin.service: name: "{{ web_service_name | default('httpd') }}" state: restarted Handlers can also "listen" to generic topics, and tasks can notify those topics as follows: .. code-block:: yaml handlers: - name: Restart memcached ansible.builtin.service: name: memcached state: restarted listen: "restart web services" - name: Restart apache ansible.builtin.service: name: apache state: restarted listen: "restart web services" tasks: - name: Restart everything ansible.builtin.command: echo "this task will restart the web services" notify: "restart web services" This use makes it much easier to trigger multiple handlers. It also decouples handlers from their names, making it easier to share handlers among playbooks and roles (especially when using 3rd party roles from a shared source like Galaxy). .. note:: * Handlers always run in the order they are defined, not in the order listed in the notify-statement. This is also the case for handlers using `listen`. * Handler names and `listen` topics live in a global namespace. * Handler names are templatable and `listen` topics are not. * Use unique handler names. If you trigger more than one handler with the same name, the first one(s) get overwritten. Only the last one defined will run. * You can notify a handler defined inside a static include. * You cannot notify a handler defined inside a dynamic include. * A handler can not run import_role or include_role. When using handlers within roles, note that: * handlers notified within ``pre_tasks``, ``tasks``, and ``post_tasks`` sections are automatically flushed at the end of section where they were notified. * handlers notified within ``roles`` section are automatically flushed at the end of ``tasks`` section, but before any ``tasks`` handlers. * handlers are play scoped and as such can be used outside of the role they are defined in. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_intro.rst0000644000000000000000000002065100000000000025377 0ustar00rootroot00000000000000.. _about_playbooks: .. _playbooks_intro: ****************** Intro to playbooks ****************** Ansible Playbooks offer a repeatable, re-usable, simple configuration management and multi-machine deployment system, one that is well suited to deploying complex applications. If you need to execute a task with Ansible more than once, write a playbook and put it under source control. Then you can use the playbook to push out new configuration or confirm the configuration of remote systems. The playbooks in the `ansible-examples repository `_ illustrate many useful techniques. You may want to look at these in another tab as you read the documentation. Playbooks can: * declare configurations * orchestrate steps of any manual ordered process, on multiple sets of machines, in a defined order * launch tasks synchronously or :ref:`asynchronously ` .. contents:: :local: .. _playbook_language_example: Playbook syntax =============== Playbooks are expressed in YAML format with a minimum of syntax. If you are not familiar with YAML, look at our overview of :ref:`yaml_syntax` and consider installing an add-on for your text editor (see :ref:`other_tools_and_programs`) to help you write clean YAML syntax in your playbooks. A playbook is composed of one or more 'plays' in an ordered list. The terms 'playbook' and 'play' are sports analogies. Each play executes part of the overall goal of the playbook, running one or more tasks. Each task calls an Ansible module. Playbook execution ================== A playbook runs in order from top to bottom. Within each play, tasks also run in order from top to bottom. Playbooks with multiple 'plays' can orchestrate multi-machine deployments, running one play on your webservers, then another play on your database servers, then a third play on your network infrastructure, and so on. At a minimum, each play defines two things: * the managed nodes to target, using a :ref:`pattern ` * at least one task to execute .. note:: In Ansible 2.10 and later, we recommend you use the fully-qualified collection name in your playbooks to ensure the correct module is selected, because multiple collections can contain modules with the same name (for example, ``user``). See :ref:`collections_using_playbook`. In this example, the first play targets the web servers; the second play targets the database servers. .. code-block:: yaml --- - name: Update web servers hosts: webservers remote_user: root tasks: - name: Ensure apache is at the latest version ansible.builtin.yum: name: httpd state: latest - name: Write the apache config file ansible.builtin.template: src: /srv/httpd.j2 dest: /etc/httpd.conf - name: Update db servers hosts: databases remote_user: root tasks: - name: Ensure postgresql is at the latest version ansible.builtin.yum: name: postgresql state: latest - name: Ensure that postgresql is started ansible.builtin.service: name: postgresql state: started Your playbook can include more than just a hosts line and tasks. For example, the playbook above sets a ``remote_user`` for each play. This is the user account for the SSH connection. You can add other :ref:`playbook_keywords` at the playbook, play, or task level to influence how Ansible behaves. Playbook keywords can control the :ref:`connection plugin `, whether to use :ref:`privilege escalation `, how to handle errors, and more. To support a variety of environments, Ansible lets you set many of these parameters as command-line flags, in your Ansible configuration, or in your inventory. Learning the :ref:`precedence rules ` for these sources of data will help you as you expand your Ansible ecosystem. .. _tasks_list: Task execution -------------- By default, Ansible executes each task in order, one at a time, against all machines matched by the host pattern. Each task executes a module with specific arguments. When a task has executed on all target machines, Ansible moves on to the next task. You can use :ref:`strategies ` to change this default behavior. Within each play, Ansible applies the same task directives to all hosts. If a task fails on a host, Ansible takes that host out of the rotation for the rest of the playbook. When you run a playbook, Ansible returns information about connections, the ``name`` lines of all your plays and tasks, whether each task has succeeded or failed on each machine, and whether each task has made a change on each machine. At the bottom of the playbook execution, Ansible provides a summary of the nodes that were targeted and how they performed. General failures and fatal "unreachable" communication attempts are kept separate in the counts. .. _idempotency: Desired state and 'idempotency' ------------------------------- Most Ansible modules check whether the desired final state has already been achieved, and exit without performing any actions if that state has been achieved, so that repeating the task does not change the final state. Modules that behave this way are often called 'idempotent.' Whether you run a playbook once, or multiple times, the outcome should be the same. However, not all playbooks and not all modules behave this way. If you are unsure, test your playbooks in a sandbox environment before running them multiple times in production. .. _executing_a_playbook: Running playbooks ----------------- To run your playbook, use the :ref:`ansible-playbook` command. .. code-block:: bash ansible-playbook playbook.yml -f 10 Use the ``--verbose`` flag when running your playbook to see detailed output from successful modules as well as unsuccessful ones. .. _playbook_ansible-pull: Ansible-Pull ============ Should you want to invert the architecture of Ansible, so that nodes check in to a central location, instead of pushing configuration out to them, you can. The ``ansible-pull`` is a small script that will checkout a repo of configuration instructions from git, and then run ``ansible-playbook`` against that content. Assuming you load balance your checkout location, ``ansible-pull`` scales essentially infinitely. Run ``ansible-pull --help`` for details. There's also a `clever playbook `_ available to configure ``ansible-pull`` via a crontab from push mode. Verifying playbooks =================== You may want to verify your playbooks to catch syntax errors and other problems before you run them. The :ref:`ansible-playbook` command offers several options for verification, including ``--check``, ``--diff``, ``--list-hosts``, ``--list-tasks``, and ``--syntax-check``. The :ref:`validate-playbook-tools` describes other tools for validating and testing playbooks. .. _linting_playbooks: ansible-lint ------------ You can use `ansible-lint `_ for detailed, Ansible-specific feedback on your playbooks before you execute them. For example, if you run ``ansible-lint`` on the playbook called ``verify-apache.yml`` near the top of this page, you should get the following results: .. code-block:: bash $ ansible-lint verify-apache.yml [403] Package installs should not use latest verify-apache.yml:8 Task/Handler: ensure apache is at the latest version The `ansible-lint default rules `_ page describes each error. For ``[403]``, the recommended fix is to change ``state: latest`` to ``state: present`` in the playbook. .. seealso:: `ansible-lint `_ Learn how to test Ansible Playbooks syntax :ref:`yaml_syntax` Learn about YAML syntax :ref:`playbooks_best_practices` Tips for managing playbooks in the real world :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_modules` Learn to extend Ansible by writing your own modules :ref:`intro_patterns` Learn about how to select hosts `GitHub examples directory `_ Complete end-to-end playbook examples `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_lookups.rst0000644000000000000000000000321000000000000025730 0ustar00rootroot00000000000000.. _playbooks_lookups: ******* Lookups ******* Lookup plugins retrieve data from outside sources such as files, databases, key/value stores, APIs, and other services. Like all templating, lookups execute and are evaluated on the Ansible control machine. Ansible makes the data returned by a lookup plugin available using the standard templating system. Before Ansible 2.5, lookups were mostly used indirectly in ``with_`` constructs for looping. Starting with Ansible 2.5, lookups are used more explicitly as part of Jinja2 expressions fed into the ``loop`` keyword. .. _lookups_and_variables: Using lookups in variables ========================== You can populate variables using lookups. Ansible evaluates the value each time it is executed in a task (or template). .. code-block:: yaml+jinja vars: motd_value: "{{ lookup('file', '/etc/motd') }}" tasks: - debug: msg: "motd value is {{ motd_value }}" For more details and a list of lookup plugins in ansible-core, see :ref:`plugins_lookup`. You may also find lookup plugins in collections. You can review a list of lookup plugins installed on your control machine with the command ``ansible-doc -l -t lookup``. .. seealso:: :ref:`working_with_playbooks` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables :ref:`playbooks_loops` Looping in playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_loops.rst0000644000000000000000000004030600000000000025377 0ustar00rootroot00000000000000.. _playbooks_loops: ***** Loops ***** Ansible offers the ``loop``, ``with_``, and ``until`` keywords to execute a task multiple times. Examples of commonly-used loops include changing ownership on several files and/or directories with the :ref:`file module `, creating multiple users with the :ref:`user module `, and repeating a polling step until a certain result is reached. .. note:: * We added ``loop`` in Ansible 2.5. It is not yet a full replacement for ``with_``, but we recommend it for most use cases. * We have not deprecated the use of ``with_`` - that syntax will still be valid for the foreseeable future. * We are looking to improve ``loop`` syntax - watch this page and the `changelog `_ for updates. .. contents:: :local: Comparing ``loop`` and ``with_*`` ================================= * The ``with_`` keywords rely on :ref:`lookup_plugins` - even ``items`` is a lookup. * The ``loop`` keyword is equivalent to ``with_list``, and is the best choice for simple loops. * The ``loop`` keyword will not accept a string as input, see :ref:`query_vs_lookup`. * Generally speaking, any use of ``with_*`` covered in :ref:`migrating_to_loop` can be updated to use ``loop``. * Be careful when changing ``with_items`` to ``loop``, as ``with_items`` performed implicit single-level flattening. You may need to use ``flatten(1)`` with ``loop`` to match the exact outcome. For example, to get the same output as: .. code-block:: yaml with_items: - 1 - [2,3] - 4 you would need .. code-block:: yaml+jinja loop: "{{ [1, [2, 3], 4] | flatten(1) }}" * Any ``with_*`` statement that requires using ``lookup`` within a loop should not be converted to use the ``loop`` keyword. For example, instead of doing: .. code-block:: yaml+jinja loop: "{{ lookup('fileglob', '*.txt', wantlist=True) }}" it's cleaner to keep .. code-block:: yaml with_fileglob: '*.txt' .. _standard_loops: Standard loops ============== Iterating over a simple list ---------------------------- Repeated tasks can be written as standard loops over a simple list of strings. You can define the list directly in the task. .. code-block:: yaml+jinja - name: Add several users ansible.builtin.user: name: "{{ item }}" state: present groups: "wheel" loop: - testuser1 - testuser2 You can define the list in a variables file, or in the 'vars' section of your play, then refer to the name of the list in the task. .. code-block:: yaml+jinja loop: "{{ somelist }}" Either of these examples would be the equivalent of .. code-block:: yaml - name: Add user testuser1 ansible.builtin.user: name: "testuser1" state: present groups: "wheel" - name: Add user testuser2 ansible.builtin.user: name: "testuser2" state: present groups: "wheel" You can pass a list directly to a parameter for some plugins. Most of the packaging modules, like :ref:`yum ` and :ref:`apt `, have this capability. When available, passing the list to a parameter is better than looping over the task. For example .. code-block:: yaml+jinja - name: Optimal yum ansible.builtin.yum: name: "{{ list_of_packages }}" state: present - name: Non-optimal yum, slower and may cause issues with interdependencies ansible.builtin.yum: name: "{{ item }}" state: present loop: "{{ list_of_packages }}" Check the :ref:`module documentation ` to see if you can pass a list to any particular module's parameter(s). Iterating over a list of hashes ------------------------------- If you have a list of hashes, you can reference subkeys in a loop. For example: .. code-block:: yaml+jinja - name: Add several users ansible.builtin.user: name: "{{ item.name }}" state: present groups: "{{ item.groups }}" loop: - { name: 'testuser1', groups: 'wheel' } - { name: 'testuser2', groups: 'root' } When combining :ref:`conditionals ` with a loop, the ``when:`` statement is processed separately for each item. See :ref:`the_when_statement` for examples. Iterating over a dictionary --------------------------- To loop over a dict, use the :ref:`dict2items `: .. code-block:: yaml+jinja - name: Using dict2items ansible.builtin.debug: msg: "{{ item.key }} - {{ item.value }}" loop: "{{ tag_data | dict2items }}" vars: tag_data: Environment: dev Application: payment Here, we are iterating over `tag_data` and printing the key and the value from it. Registering variables with a loop ================================= You can register the output of a loop as a variable. For example .. code-block:: yaml+jinja - name: Register loop output as a variable ansible.builtin.shell: "echo {{ item }}" loop: - "one" - "two" register: echo When you use ``register`` with a loop, the data structure placed in the variable will contain a ``results`` attribute that is a list of all responses from the module. This differs from the data structure returned when using ``register`` without a loop. .. code-block:: json { "changed": true, "msg": "All items completed", "results": [ { "changed": true, "cmd": "echo \"one\" ", "delta": "0:00:00.003110", "end": "2013-12-19 12:00:05.187153", "invocation": { "module_args": "echo \"one\"", "module_name": "shell" }, "item": "one", "rc": 0, "start": "2013-12-19 12:00:05.184043", "stderr": "", "stdout": "one" }, { "changed": true, "cmd": "echo \"two\" ", "delta": "0:00:00.002920", "end": "2013-12-19 12:00:05.245502", "invocation": { "module_args": "echo \"two\"", "module_name": "shell" }, "item": "two", "rc": 0, "start": "2013-12-19 12:00:05.242582", "stderr": "", "stdout": "two" } ] } Subsequent loops over the registered variable to inspect the results may look like .. code-block:: yaml+jinja - name: Fail if return code is not 0 ansible.builtin.fail: msg: "The command ({{ item.cmd }}) did not have a 0 return code" when: item.rc != 0 loop: "{{ echo.results }}" During iteration, the result of the current item will be placed in the variable. .. code-block:: yaml+jinja - name: Place the result of the current item in the variable ansible.builtin.shell: echo "{{ item }}" loop: - one - two register: echo changed_when: echo.stdout != "one" .. _complex_loops: Complex loops ============= Iterating over nested lists --------------------------- You can use Jinja2 expressions to iterate over complex lists. For example, a loop can combine nested lists. .. code-block:: yaml+jinja - name: Give users access to multiple databases community.mysql.mysql_user: name: "{{ item[0] }}" priv: "{{ item[1] }}.*:ALL" append_privs: yes password: "foo" loop: "{{ ['alice', 'bob'] | product(['clientdb', 'employeedb', 'providerdb']) | list }}" .. _do_until_loops: Retrying a task until a condition is met ---------------------------------------- .. versionadded:: 1.4 You can use the ``until`` keyword to retry a task until a certain condition is met. Here's an example: .. code-block:: yaml - name: Retry a task until a certain condition is met ansible.builtin.shell: /usr/bin/foo register: result until: result.stdout.find("all systems go") != -1 retries: 5 delay: 10 This task runs up to 5 times with a delay of 10 seconds between each attempt. If the result of any attempt has "all systems go" in its stdout, the task succeeds. The default value for "retries" is 3 and "delay" is 5. To see the results of individual retries, run the play with ``-vv``. When you run a task with ``until`` and register the result as a variable, the registered variable will include a key called "attempts", which records the number of the retries for the task. .. note:: You must set the ``until`` parameter if you want a task to retry. If ``until`` is not defined, the value for the ``retries`` parameter is forced to 1. Looping over inventory ---------------------- To loop over your inventory, or just a subset of it, you can use a regular ``loop`` with the ``ansible_play_batch`` or ``groups`` variables. .. code-block:: yaml+jinja - name: Show all the hosts in the inventory ansible.builtin.debug: msg: "{{ item }}" loop: "{{ groups['all'] }}" - name: Show all the hosts in the current play ansible.builtin.debug: msg: "{{ item }}" loop: "{{ ansible_play_batch }}" There is also a specific lookup plugin ``inventory_hostnames`` that can be used like this .. code-block:: yaml+jinja - name: Show all the hosts in the inventory ansible.builtin.debug: msg: "{{ item }}" loop: "{{ query('inventory_hostnames', 'all') }}" - name: Show all the hosts matching the pattern, ie all but the group www ansible.builtin.debug: msg: "{{ item }}" loop: "{{ query('inventory_hostnames', 'all:!www') }}" More information on the patterns can be found in :ref:`intro_patterns`. .. _query_vs_lookup: Ensuring list input for ``loop``: using ``query`` rather than ``lookup`` ======================================================================== The ``loop`` keyword requires a list as input, but the ``lookup`` keyword returns a string of comma-separated values by default. Ansible 2.5 introduced a new Jinja2 function named :ref:`query ` that always returns a list, offering a simpler interface and more predictable output from lookup plugins when using the ``loop`` keyword. You can force ``lookup`` to return a list to ``loop`` by using ``wantlist=True``, or you can use ``query`` instead. The following two examples do the same thing. .. code-block:: yaml+jinja loop: "{{ query('inventory_hostnames', 'all') }}" loop: "{{ lookup('inventory_hostnames', 'all', wantlist=True) }}" .. _loop_control: Adding controls to loops ======================== .. versionadded:: 2.1 The ``loop_control`` keyword lets you manage your loops in useful ways. Limiting loop output with ``label`` ----------------------------------- .. versionadded:: 2.2 When looping over complex data structures, the console output of your task can be enormous. To limit the displayed output, use the ``label`` directive with ``loop_control``. .. code-block:: yaml+jinja - name: Create servers digital_ocean: name: "{{ item.name }}" state: present loop: - name: server1 disks: 3gb ram: 15Gb network: nic01: 100Gb nic02: 10Gb ... loop_control: label: "{{ item.name }}" The output of this task will display just the ``name`` field for each ``item`` instead of the entire contents of the multi-line ``{{ item }}`` variable. .. note:: This is for making console output more readable, not protecting sensitive data. If there is sensitive data in ``loop``, set ``no_log: yes`` on the task to prevent disclosure. Pausing within a loop --------------------- .. versionadded:: 2.2 To control the time (in seconds) between the execution of each item in a task loop, use the ``pause`` directive with ``loop_control``. .. code-block:: yaml+jinja # main.yml - name: Create servers, pause 3s before creating next community.digitalocean.digital_ocean: name: "{{ item }}" state: present loop: - server1 - server2 loop_control: pause: 3 Tracking progress through a loop with ``index_var`` --------------------------------------------------- .. versionadded:: 2.5 To keep track of where you are in a loop, use the ``index_var`` directive with ``loop_control``. This directive specifies a variable name to contain the current loop index. .. code-block:: yaml+jinja - name: Count our fruit ansible.builtin.debug: msg: "{{ item }} with index {{ my_idx }}" loop: - apple - banana - pear loop_control: index_var: my_idx .. note:: `index_var` is 0 indexed. Defining inner and outer variable names with ``loop_var`` --------------------------------------------------------- .. versionadded:: 2.1 You can nest two looping tasks using ``include_tasks``. However, by default Ansible sets the loop variable ``item`` for each loop. This means the inner, nested loop will overwrite the value of ``item`` from the outer loop. You can specify the name of the variable for each loop using ``loop_var`` with ``loop_control``. .. code-block:: yaml+jinja # main.yml - include_tasks: inner.yml loop: - 1 - 2 - 3 loop_control: loop_var: outer_item # inner.yml - name: Print outer and inner items ansible.builtin.debug: msg: "outer item={{ outer_item }} inner item={{ item }}" loop: - a - b - c .. note:: If Ansible detects that the current loop is using a variable which has already been defined, it will raise an error to fail the task. Extended loop variables ----------------------- .. versionadded:: 2.8 As of Ansible 2.8 you can get extended loop information using the ``extended`` option to loop control. This option will expose the following information. ========================== =========== Variable Description -------------------------- ----------- ``ansible_loop.allitems`` The list of all items in the loop ``ansible_loop.index`` The current iteration of the loop. (1 indexed) ``ansible_loop.index0`` The current iteration of the loop. (0 indexed) ``ansible_loop.revindex`` The number of iterations from the end of the loop (1 indexed) ``ansible_loop.revindex0`` The number of iterations from the end of the loop (0 indexed) ``ansible_loop.first`` ``True`` if first iteration ``ansible_loop.last`` ``True`` if last iteration ``ansible_loop.length`` The number of items in the loop ``ansible_loop.previtem`` The item from the previous iteration of the loop. Undefined during the first iteration. ``ansible_loop.nextitem`` The item from the following iteration of the loop. Undefined during the last iteration. ========================== =========== :: loop_control: extended: yes .. note:: When using ``loop_control.extended`` more memory will be utilized on the control node. This is a result of ``ansible_loop.allitems`` containing a reference to the full loop data for every loop. When serializing the results for display in callback plugins within the main ansible process, these references may be dereferenced causing memory usage to increase. Accessing the name of your loop_var ----------------------------------- .. versionadded:: 2.8 As of Ansible 2.8 you can get the name of the value provided to ``loop_control.loop_var`` using the ``ansible_loop_var`` variable For role authors, writing roles that allow loops, instead of dictating the required ``loop_var`` value, you can gather the value via the following .. code-block:: yaml+jinja "{{ lookup('vars', ansible_loop_var) }}" .. _migrating_to_loop: Migrating from with_X to loop ============================= .. include:: shared_snippets/with2loop.txt .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_module_defaults.rst0000644000000000000000000001305600000000000027421 0ustar00rootroot00000000000000.. _module_defaults: Module defaults =============== If you frequently call the same module with the same arguments, it can be useful to define default arguments for that particular module using the ``module_defaults`` keyword. Here is a basic example: .. code-block:: YAML - hosts: localhost module_defaults: ansible.builtin.file: owner: root group: root mode: 0755 tasks: - name: Create file1 ansible.builtin.file: state: touch path: /tmp/file1 - name: Create file2 ansible.builtin.file: state: touch path: /tmp/file2 - name: Create file3 ansible.builtin.file: state: touch path: /tmp/file3 The ``module_defaults`` keyword can be used at the play, block, and task level. Any module arguments explicitly specified in a task will override any established default for that module argument. .. code-block:: YAML - block: - name: Print a message ansible.builtin.debug: msg: "Different message" module_defaults: ansible.builtin.debug: msg: "Default message" You can remove any previously established defaults for a module by specifying an empty dict. .. code-block:: YAML - name: Create file1 ansible.builtin.file: state: touch path: /tmp/file1 module_defaults: file: {} .. note:: Any module defaults set at the play level (and block/task level when using ``include_role`` or ``import_role``) will apply to any roles used, which may cause unexpected behavior in the role. Here are some more realistic use cases for this feature. Interacting with an API that requires auth. .. code-block:: YAML - hosts: localhost module_defaults: ansible.builtin.uri: force_basic_auth: true user: some_user password: some_password tasks: - name: Interact with a web service ansible.builtin.uri: url: http://some.api.host/v1/whatever1 - name: Interact with a web service ansible.builtin.uri: url: http://some.api.host/v1/whatever2 - name: Interact with a web service ansible.builtin.uri: url: http://some.api.host/v1/whatever3 Setting a default AWS region for specific EC2-related modules. .. code-block:: YAML - hosts: localhost vars: my_region: us-west-2 module_defaults: amazon.aws.ec2: region: '{{ my_region }}' community.aws.ec2_instance_info: region: '{{ my_region }}' amazon.aws.ec2_vpc_net_info: region: '{{ my_region }}' .. _module_defaults_groups: Module defaults groups ---------------------- .. versionadded:: 2.7 Ansible 2.7 adds a preview-status feature to group together modules that share common sets of parameters. This makes it easier to author playbooks making heavy use of API-based modules such as cloud modules. +---------+---------------------------+-----------------+ | Group | Purpose | Ansible Version | +=========+===========================+=================+ | aws | Amazon Web Services | 2.7 | +---------+---------------------------+-----------------+ | azure | Azure | 2.7 | +---------+---------------------------+-----------------+ | gcp | Google Cloud Platform | 2.7 | +---------+---------------------------+-----------------+ | k8s | Kubernetes | 2.8 | +---------+---------------------------+-----------------+ | os | OpenStack | 2.8 | +---------+---------------------------+-----------------+ | acme | ACME | 2.10 | +---------+---------------------------+-----------------+ | docker* | Docker | 2.10 | +---------+---------------------------+-----------------+ | ovirt | oVirt | 2.10 | +---------+---------------------------+-----------------+ | vmware | VMware | 2.10 | +---------+---------------------------+-----------------+ * The `docker_stack `_ module is not included in the ``docker`` defaults group. Use the groups with ``module_defaults`` by prefixing the group name with ``group/`` - for example ``group/aws``. In a playbook, you can set module defaults for whole groups of modules, such as setting a common AWS region. .. code-block:: YAML # example_play.yml - hosts: localhost module_defaults: group/aws: region: us-west-2 tasks: - name: Get info aws_s3_bucket_info: # now the region is shared between both info modules - name: Get info ec2_ami_info: filters: name: 'RHEL*7.5*' In ansible-core 2.12, collections can define their own groups in the ``meta/runtime.yml`` file. ``module_defaults`` does not take the ``collections`` keyword into account, so the fully qualified group name must be used for new groups in ``module_defaults``. Here is an example ``runtime.yml`` file for a collection and a sample playbook using the group. .. code-block:: YAML # collections/ansible_collections/ns/coll/meta/runtime.yml action_groups: groupname: - module - another.collection.module .. code-block:: YAML - hosts: localhost module_defaults: group/ns.coll.groupname: option_name: option_value tasks: - ns.coll.module: - another.collection.module ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_prompts.rst0000644000000000000000000000773600000000000025761 0ustar00rootroot00000000000000.. _playbooks_prompts: ************************** Interactive input: prompts ************************** If you want your playbook to prompt the user for certain input, add a 'vars_prompt' section. Prompting the user for variables lets you avoid recording sensitive data like passwords. In addition to security, prompts support flexibility. For example, if you use one playbook across multiple software releases, you could prompt for the particular release version. .. contents:: :local: Here is a most basic example: .. code-block:: yaml --- - hosts: all vars_prompt: - name: username prompt: What is your username? private: no - name: password prompt: What is your password? tasks: - name: Print a message ansible.builtin.debug: msg: 'Logging in as {{ username }}' The user input is hidden by default but it can be made visible by setting ``private: no``. .. note:: Prompts for individual ``vars_prompt`` variables will be skipped for any variable that is already defined through the command line ``--extra-vars`` option, or when running from a non-interactive session (such as cron or Ansible AWX). See :ref:`passing_variables_on_the_command_line`. If you have a variable that changes infrequently, you can provide a default value that can be overridden. .. code-block:: yaml vars_prompt: - name: release_version prompt: Product release version default: "1.0" Encrypting values supplied by ``vars_prompt`` --------------------------------------------- You can encrypt the entered value so you can use it, for instance, with the user module to define a password: .. code-block:: yaml vars_prompt: - name: my_password2 prompt: Enter password2 private: yes encrypt: sha512_crypt confirm: yes salt_size: 7 If you have `Passlib `_ installed, you can use any crypt scheme the library supports: - *des_crypt* - DES Crypt - *bsdi_crypt* - BSDi Crypt - *bigcrypt* - BigCrypt - *crypt16* - Crypt16 - *md5_crypt* - MD5 Crypt - *bcrypt* - BCrypt - *sha1_crypt* - SHA-1 Crypt - *sun_md5_crypt* - Sun MD5 Crypt - *sha256_crypt* - SHA-256 Crypt - *sha512_crypt* - SHA-512 Crypt - *apr_md5_crypt* - Apache's MD5-Crypt variant - *phpass* - PHPass' Portable Hash - *pbkdf2_digest* - Generic PBKDF2 Hashes - *cta_pbkdf2_sha1* - Cryptacular's PBKDF2 hash - *dlitz_pbkdf2_sha1* - Dwayne Litzenberger's PBKDF2 hash - *scram* - SCRAM Hash - *bsd_nthash* - FreeBSD's MCF-compatible nthash encoding The only parameters accepted are 'salt' or 'salt_size'. You can use your own salt by defining 'salt', or have one generated automatically using 'salt_size'. By default Ansible generates a salt of size 8. .. versionadded:: 2.7 If you do not have Passlib installed, Ansible uses the `crypt `_ library as a fallback. Ansible supports at most four crypt schemes, depending on your platform at most the following crypt schemes are supported: - *bcrypt* - BCrypt - *md5_crypt* - MD5 Crypt - *sha256_crypt* - SHA-256 Crypt - *sha512_crypt* - SHA-512 Crypt .. versionadded:: 2.8 .. _unsafe_prompts: Allowing special characters in ``vars_prompt`` values ----------------------------------------------------- Some special characters, such as ``{`` and ``%`` can create templating errors. If you need to accept special characters, use the ``unsafe`` option: .. code-block:: yaml vars_prompt: - name: my_password_with_weird_chars prompt: Enter password unsafe: yes private: yes .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.530556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_python_version.rst0000644000000000000000000000465700000000000027342 0ustar00rootroot00000000000000.. _pb-py-compat: ******************** Python3 in templates ******************** Ansible uses Jinja2 to take advantage of Python data types and standard functions in templates and variables. You can use these data types and standard functions to perform a rich set of operations on your data. However, if you use templates, you must be aware of differences between Python versions. These topics help you design templates that work on both Python2 and Python3. They might also help if you are upgrading from Python2 to Python3. Upgrading within Python2 or Python3 does not usually introduce changes that affect Jinja2 templates. .. _pb-py-compat-dict-views: Dictionary views ================ In Python2, the :meth:`dict.keys`, :meth:`dict.values`, and :meth:`dict.items` methods return a list. Jinja2 returns that to Ansible via a string representation that Ansible can turn back into a list. In Python3, those methods return a :ref:`dictionary view ` object. The string representation that Jinja2 returns for dictionary views cannot be parsed back into a list by Ansible. It is, however, easy to make this portable by using the :func:`list ` filter whenever using :meth:`dict.keys`, :meth:`dict.values`, or :meth:`dict.items`. .. code-block:: yaml+jinja vars: hosts: testhost1: 127.0.0.2 testhost2: 127.0.0.3 tasks: - debug: msg: '{{ item }}' # Only works with Python 2 #loop: "{{ hosts.keys() }}" # Works with both Python 2 and Python 3 loop: "{{ hosts.keys() | list }}" .. _pb-py-compat-iteritems: dict.iteritems() ================ Python2 dictionaries have :meth:`~dict.iterkeys`, :meth:`~dict.itervalues`, and :meth:`~dict.iteritems` methods. Python3 dictionaries do not have these methods. Use :meth:`dict.keys`, :meth:`dict.values`, and :meth:`dict.items` to make your playbooks and templates compatible with both Python2 and Python3. .. code-block:: yaml+jinja vars: hosts: testhost1: 127.0.0.2 testhost2: 127.0.0.3 tasks: - debug: msg: '{{ item }}' # Only works with Python 2 #loop: "{{ hosts.iteritems() }}" # Works with both Python 2 and Python 3 loop: "{{ hosts.items() | list }}" .. seealso:: * The :ref:`pb-py-compat-dict-views` entry for information on why the :func:`list filter ` is necessary here. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_reuse.rst0000644000000000000000000002562300000000000025373 0ustar00rootroot00000000000000.. _playbooks_reuse: ************************** Re-using Ansible artifacts ************************** You can write a simple playbook in one very large file, and most users learn the one-file approach first. However, breaking tasks up into different files is an excellent way to organize complex sets of tasks and reuse them. Smaller, more distributed artifacts let you re-use the same variables, tasks, and plays in multiple playbooks to address different use cases. You can use distributed artifacts across multiple parent playbooks or even multiple times within one playbook. For example, you might want to update your customer database as part of several different playbooks. If you put all the tasks related to updating your database in a tasks file, you can re-use them in many playbooks while only maintaining them in one place. .. contents:: :local: Creating re-usable files and roles ================================== Ansible offers four distributed, re-usable artifacts: variables files, task files, playbooks, and roles. - A variables file contains only variables. - A task file contains only tasks. - A playbook contains at least one play, and may contain variables, tasks, and other content. You can re-use tightly focused playbooks, but you can only re-use them statically, not dynamically. - A role contains a set of related tasks, variables, defaults, handlers, and even modules or other plugins in a defined file-tree. Unlike variables files, task files, or playbooks, roles can be easily uploaded and shared via Ansible Galaxy. See :ref:`playbooks_reuse_roles` for details about creating and using roles. .. versionadded:: 2.4 Re-using playbooks ================== You can incorporate multiple playbooks into a main playbook. However, you can only use imports to re-use playbooks. For example: .. code-block:: yaml - import_playbook: webservers.yml - import_playbook: databases.yml Importing incorporates playbooks in other playbooks statically. Ansible runs the plays and tasks in each imported playbook in the order they are listed, just as if they had been defined directly in the main playbook. You can select which playbook you want to import at runtime by defining your imported playbook filename with a variable, then passing the variable with either ``--extra-vars`` or the ``vars`` keyword. For example: .. code-block:: yaml - import_playbook: "/path/to/{{ import_from_extra_var }}" - import_playbook: "{{ import_from_vars }}" vars: import_from_vars: /path/to/one_playbook.yml If you run this playbook with ``ansible-playbook my_playbook -e import_from_extra_var=other_playbook.yml``, Ansible imports both one_playbook.yml and other_playbook.yml. Re-using files and roles ======================== Ansible offers two ways to re-use files and roles in a playbook: dynamic and static. - For dynamic re-use, add an ``include_*`` task in the tasks section of a play: - :ref:`include_role ` - :ref:`include_tasks ` - :ref:`include_vars ` - For static re-use, add an ``import_*`` task in the tasks section of a play: - :ref:`import_role ` - :ref:`import_tasks ` Task include and import statements can be used at arbitrary depth. You can still use the bare :ref:`roles ` keyword at the play level to incorporate a role in a playbook statically. However, the bare :ref:`include ` keyword, once used for both task files and playbook-level includes, is now deprecated. Includes: dynamic re-use ------------------------ Including roles, tasks, or variables adds them to a playbook dynamically. Ansible processes included files and roles as they come up in a playbook, so included tasks can be affected by the results of earlier tasks within the top-level playbook. Included roles and tasks are similar to handlers - they may or may not run, depending on the results of other tasks in the top-level playbook. The primary advantage of using ``include_*`` statements is looping. When a loop is used with an include, the included tasks or role will be executed once for each item in the loop. The filenames for included roles, tasks, and vars are templated before inclusion. You can pass variables into includes. See :ref:`ansible_variable_precedence` for more details on variable inheritance and precedence. Imports: static re-use ---------------------- Importing roles, tasks, or playbooks adds them to a playbook statically. Ansible pre-processes imported files and roles before it runs any tasks in a playbook, so imported content is never affected by other tasks within the top-level playbook. The filenames for imported roles and tasks support templating, but the variables must be available when Ansible is pre-processing the imports. This can be done with the ``vars`` keyword or by using ``--extra-vars``. You can pass variables to imports. You must pass variables if you want to run an imported file more than once in a playbook. For example: .. code-block:: yaml tasks: - import_tasks: wordpress.yml vars: wp_user: timmy - import_tasks: wordpress.yml vars: wp_user: alice - import_tasks: wordpress.yml vars: wp_user: bob See :ref:`ansible_variable_precedence` for more details on variable inheritance and precedence. .. _dynamic_vs_static: Comparing includes and imports: dynamic and static re-use ------------------------------------------------------------ Each approach to re-using distributed Ansible artifacts has advantages and limitations. You may choose dynamic re-use for some playbooks and static re-use for others. Although you can use both dynamic and static re-use in a single playbook, it is best to select one approach per playbook. Mixing static and dynamic re-use can introduce difficult-to-diagnose bugs into your playbooks. This table summarizes the main differences so you can choose the best approach for each playbook you create. .. table:: :class: documentation-table ========================= ======================================== ======================================== .. Include_* Import_* ========================= ======================================== ======================================== Type of re-use Dynamic Static When processed At runtime, when encountered Pre-processed during playbook parsing Task or play All includes are tasks ``import_playbook`` cannot be a task Task options Apply only to include task itself Apply to all child tasks in import Calling from loops Executed once for each loop item Cannot be used in a loop Using ``--list-tags`` Tags within includes not listed All tags appear with ``--list-tags`` Using ``--list-tasks`` Tasks within includes not listed All tasks appear with ``--list-tasks`` Notifying handlers Cannot trigger handlers within includes Can trigger individual imported handlers Using ``--start-at-task`` Cannot start at tasks within includes Can start at imported tasks Using inventory variables Can ``include_*: {{ inventory_var }}`` Cannot ``import_*: {{ inventory_var }}`` With playbooks No ``include_playbook`` Can import full playbooks With variables files Can include variables files Use ``vars_files:`` to import variables ========================= ======================================== ======================================== .. note:: * There are also big differences in resource consumption and performance, imports are quite lean and fast, while includes require a lot of management and accounting. Re-using tasks as handlers ========================== You can also use includes and imports in the :ref:`handlers` section of a playbook. For instance, if you want to define how to restart Apache, you only have to do that once for all of your playbooks. You might make a ``restarts.yml`` file that looks like: .. code-block:: yaml # restarts.yml - name: Restart apache ansible.builtin.service: name: apache state: restarted - name: Restart mysql ansible.builtin.service: name: mysql state: restarted You can trigger handlers from either an import or an include, but the procedure is different for each method of re-use. If you include the file, you must notify the include itself, which triggers all the tasks in ``restarts.yml``. If you import the file, you must notify the individual task(s) within ``restarts.yml``. You can mix direct tasks and handlers with included or imported tasks and handlers. Triggering included (dynamic) handlers -------------------------------------- Includes are executed at run-time, so the name of the include exists during play execution, but the included tasks do not exist until the include itself is triggered. To use the ``Restart apache`` task with dynamic re-use, refer to the name of the include itself. This approach triggers all tasks in the included file as handlers. For example, with the task file shown above: .. code-block:: yaml - name: Trigger an included (dynamic) handler hosts: localhost handlers: - name: Restart services include_tasks: restarts.yml tasks: - command: "true" notify: Restart services Triggering imported (static) handlers ------------------------------------- Imports are processed before the play begins, so the name of the import no longer exists during play execution, but the names of the individual imported tasks do exist. To use the ``Restart apache`` task with static re-use, refer to the name of each task or tasks within the imported file. For example, with the task file shown above: .. code-block:: yaml - name: Trigger an imported (static) handler hosts: localhost handlers: - name: Restart services import_tasks: restarts.yml tasks: - command: "true" notify: Restart apache - command: "true" notify: Restart mysql .. seealso:: :ref:`utilities_modules` Documentation of the ``include*`` and ``import*`` modules discussed here. :ref:`working_with_playbooks` Review the basic Playbook language features :ref:`playbooks_variables` All about variables in playbooks :ref:`playbooks_conditionals` Conditionals in playbooks :ref:`playbooks_loops` Loops in playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`ansible_galaxy` How to share roles on galaxy, role management `GitHub Ansible examples `_ Complete playbook files from the GitHub project source `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_reuse_includes.rst0000644000000000000000000000177600000000000027264 0ustar00rootroot00000000000000:orphan: .. _playbooks_reuse_includes: Including and importing ======================= The content on this page has been moved to :ref:`playbooks_reuse`. .. seealso:: :ref:`yaml_syntax` Learn about YAML syntax :ref:`working_with_playbooks` Review the basic Playbook language features :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`playbooks_variables` All about variables in playbooks :ref:`playbooks_conditionals` Conditionals in playbooks :ref:`playbooks_loops` Loops in playbooks :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_modules` Learn how to extend Ansible by writing your own modules `GitHub Ansible examples `_ Complete playbook files from the GitHub project source `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_reuse_roles.rst0000644000000000000000000005707400000000000026604 0ustar00rootroot00000000000000.. _playbooks_reuse_roles: ***** Roles ***** Roles let you automatically load related vars, files, tasks, handlers, and other Ansible artifacts based on a known file structure. After you group your content in roles, you can easily reuse them and share them with other users. .. contents:: :local: Role directory structure ======================== An Ansible role has a defined directory structure with eight main standard directories. You must include at least one of these directories in each role. You can omit any directories the role does not use. For example: .. code-block:: text # playbooks site.yml webservers.yml fooservers.yml roles/ common/ tasks/ handlers/ library/ files/ templates/ vars/ defaults/ meta/ webservers/ tasks/ defaults/ meta/ By default Ansible will look in each directory within a role for a ``main.yml`` file for relevant content (also ``main.yaml`` and ``main``): - ``tasks/main.yml`` - the main list of tasks that the role executes. - ``handlers/main.yml`` - handlers, which may be used within or outside this role. - ``library/my_module.py`` - modules, which may be used within this role (see :ref:`embedding_modules_and_plugins_in_roles` for more information). - ``defaults/main.yml`` - default variables for the role (see :ref:`playbooks_variables` for more information). These variables have the lowest priority of any variables available, and can be easily overridden by any other variable, including inventory variables. - ``vars/main.yml`` - other variables for the role (see :ref:`playbooks_variables` for more information). - ``files/main.yml`` - files that the role deploys. - ``templates/main.yml`` - templates that the role deploys. - ``meta/main.yml`` - metadata for the role, including role dependencies. You can add other YAML files in some directories. For example, you can place platform-specific tasks in separate files and refer to them in the ``tasks/main.yml`` file: .. code-block:: yaml # roles/example/tasks/main.yml - name: Install the correct web server for RHEL import_tasks: redhat.yml when: ansible_facts['os_family']|lower == 'redhat' - name: Install the correct web server for Debian import_tasks: debian.yml when: ansible_facts['os_family']|lower == 'debian' # roles/example/tasks/redhat.yml - name: Install web server ansible.builtin.yum: name: "httpd" state: present # roles/example/tasks/debian.yml - name: Install web server ansible.builtin.apt: name: "apache2" state: present Roles may also include modules and other plugin types in a directory called ``library``. For more information, please refer to :ref:`embedding_modules_and_plugins_in_roles` below. .. _role_search_path: Storing and finding roles ========================= By default, Ansible looks for roles in the following locations: - in collections, if you are using them - in a directory called ``roles/``, relative to the playbook file - in the configured :ref:`roles_path `. The default search path is ``~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles``. - in the directory where the playbook file is located If you store your roles in a different location, set the :ref:`roles_path ` configuration option so Ansible can find your roles. Checking shared roles into a single location makes them easier to use in multiple playbooks. See :ref:`intro_configuration` for details about managing settings in ansible.cfg. Alternatively, you can call a role with a fully qualified path: .. code-block:: yaml --- - hosts: webservers roles: - role: '/path/to/my/roles/common' Using roles =========== You can use roles in three ways: - at the play level with the ``roles`` option: This is the classic way of using roles in a play. - at the tasks level with ``include_role``: You can reuse roles dynamically anywhere in the ``tasks`` section of a play using ``include_role``. - at the tasks level with ``import_role``: You can reuse roles statically anywhere in the ``tasks`` section of a play using ``import_role``. .. _roles_keyword: Using roles at the play level ----------------------------- The classic (original) way to use roles is with the ``roles`` option for a given play: .. code-block:: yaml --- - hosts: webservers roles: - common - webservers When you use the ``roles`` option at the play level, for each role 'x': - If roles/x/tasks/main.yml exists, Ansible adds the tasks in that file to the play. - If roles/x/handlers/main.yml exists, Ansible adds the handlers in that file to the play. - If roles/x/vars/main.yml exists, Ansible adds the variables in that file to the play. - If roles/x/defaults/main.yml exists, Ansible adds the variables in that file to the play. - If roles/x/meta/main.yml exists, Ansible adds any role dependencies in that file to the list of roles. - Any copy, script, template or include tasks (in the role) can reference files in roles/x/{files,templates,tasks}/ (dir depends on task) without having to path them relatively or absolutely. When you use the ``roles`` option at the play level, Ansible treats the roles as static imports and processes them during playbook parsing. Ansible executes your playbook in this order: - Any ``pre_tasks`` defined in the play. - Any handlers triggered by pre_tasks. - Each role listed in ``roles:``, in the order listed. Any role dependencies defined in the role's ``meta/main.yml`` run first, subject to tag filtering and conditionals. See :ref:`role_dependencies` for more details. - Any ``tasks`` defined in the play. - Any handlers triggered by the roles or tasks. - Any ``post_tasks`` defined in the play. - Any handlers triggered by post_tasks. .. note:: If using tags with tasks in a role, be sure to also tag your pre_tasks, post_tasks, and role dependencies and pass those along as well, especially if the pre/post tasks and role dependencies are used for monitoring outage window control or load balancing. See :ref:`tags` for details on adding and using tags. You can pass other keywords to the ``roles`` option: .. code-block:: yaml --- - hosts: webservers roles: - common - role: foo_app_instance vars: dir: '/opt/a' app_port: 5000 tags: typeA - role: foo_app_instance vars: dir: '/opt/b' app_port: 5001 tags: typeB When you add a tag to the ``role`` option, Ansible applies the tag to ALL tasks within the role. When using ``vars:`` within the ``roles:`` section of a playbook, the variables are added to the play variables, making them available to all tasks within the play before and after the role. This behavior can be changed by :ref:`DEFAULT_PRIVATE_ROLE_VARS`. Including roles: dynamic reuse ------------------------------ You can reuse roles dynamically anywhere in the ``tasks`` section of a play using ``include_role``. While roles added in a ``roles`` section run before any other tasks in a playbook, included roles run in the order they are defined. If there are other tasks before an ``include_role`` task, the other tasks will run first. To include a role: .. code-block:: yaml --- - hosts: webservers tasks: - name: Print a message ansible.builtin.debug: msg: "this task runs before the example role" - name: Include the example role include_role: name: example - name: Print a message ansible.builtin.debug: msg: "this task runs after the example role" You can pass other keywords, including variables and tags, when including roles: .. code-block:: yaml --- - hosts: webservers tasks: - name: Include the foo_app_instance role include_role: name: foo_app_instance vars: dir: '/opt/a' app_port: 5000 tags: typeA ... When you add a :ref:`tag ` to an ``include_role`` task, Ansible applies the tag `only` to the include itself. This means you can pass ``--tags`` to run only selected tasks from the role, if those tasks themselves have the same tag as the include statement. See :ref:`selective_reuse` for details. You can conditionally include a role: .. code-block:: yaml --- - hosts: webservers tasks: - name: Include the some_role role include_role: name: some_role when: "ansible_facts['os_family'] == 'RedHat'" Importing roles: static reuse ----------------------------- You can reuse roles statically anywhere in the ``tasks`` section of a play using ``import_role``. The behavior is the same as using the ``roles`` keyword. For example: .. code-block:: yaml --- - hosts: webservers tasks: - name: Print a message ansible.builtin.debug: msg: "before we run our role" - name: Import the example role import_role: name: example - name: Print a message ansible.builtin.debug: msg: "after we ran our role" You can pass other keywords, including variables and tags, when importing roles: .. code-block:: yaml --- - hosts: webservers tasks: - name: Import the foo_app_instance role import_role: name: foo_app_instance vars: dir: '/opt/a' app_port: 5000 ... When you add a tag to an ``import_role`` statement, Ansible applies the tag to `all` tasks within the role. See :ref:`tag_inheritance` for details. Role argument validation ======================== Beginning with version 2.11, you may choose to enable role argument validation based on an argument specification. This specification is defined in the ``meta/argument_specs.yml`` file (or with the ``.yaml`` file extension). When this argument specification is defined, a new task is inserted at the beginning of role execution that will validate the parameters supplied for the role against the specification. If the parameters fail validation, the role will fail execution. .. note:: Ansible also supports role specifications defined in the role ``meta/main.yml`` file, as well. However, any role that defines the specs within this file will not work on versions below 2.11. For this reason, we recommend using the ``meta/argument_specs.yml`` file to maintain backward compatibility. .. note:: When role argument validation is used on a role that has defined :ref:`dependencies `, then validation on those dependencies will run before the dependent role, even if argument validation fails for the dependent role. Specification format -------------------- The role argument specification must be defined in a top-level ``argument_specs`` block within the role ``meta/argument_specs.yml`` file. All fields are lower-case. :entry-point-name: * The name of the role entry point. * This should be ``main`` in the case of an unspecified entry point. * This will be the base name of the tasks file to execute, with no ``.yml`` or ``.yaml`` file extension. :short_description: * A short, one-line description of the entry point. * The ``short_description`` is displayed by ``ansible-doc -t role -l``. :description: * A longer description that may contain multiple lines. :author: * Name of the entry point authors. * Use a multi-line list if there is more than one author. :options: * Options are often called "parameters" or "arguments". This section defines those options. * For each role option (argument), you may include: :option-name: * The name of the option/argument. :description: * Detailed explanation of what this option does. It should be written in full sentences. :type: * The data type of the option. Default is ``str``. * If an option is of type ``list``, ``elements`` should be specified. :required: * Only needed if ``true``. * If missing, the option is not required. :default: * If ``required`` is false/missing, ``default`` may be specified (assumed 'null' if missing). * Ensure that the default value in the docs matches the default value in the code. The actual default for the role variable will always come from ``defaults/main.yml``. * The default field must not be listed as part of the description, unless it requires additional information or conditions. * If the option is a boolean value, you can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Choose the one that reads better in the context of the option. :choices: * List of option values. * Should be absent if empty. :elements: * Specifies the data type for list elements when type is ``list``. :options: * If this option takes a dict or list of dicts, you can define the structure here. Sample specification -------------------- .. code-block:: yaml # roles/myapp/meta/argument_specs.yml --- argument_specs: # roles/myapp/tasks/main.yml entry point main: short_description: The main entry point for the myapp role. options: myapp_int: type: "int" required: false default: 42 description: "The integer value, defaulting to 42." myapp_str: type: "str" required: true description: "The string value" # roles/maypp/tasks/alternate.yml entry point alternate: short_description: The alternate entry point for the myapp role. options: myapp_int: type: "int" required: false default: 1024 description: "The integer value, defaulting to 1024." .. _run_role_twice: Running a role multiple times in one playbook ============================================= Ansible only executes each role once, even if you define it multiple times, unless the parameters defined on the role are different for each definition. For example, Ansible only runs the role ``foo`` once in a play like this: .. code-block:: yaml --- - hosts: webservers roles: - foo - bar - foo You have two options to force Ansible to run a role more than once. Passing different parameters ---------------------------- If you pass different parameters in each role definition, Ansible runs the role more than once. Providing different variable values is not the same as passing different role parameters. You must use the ``roles`` keyword for this behavior, since ``import_role`` and ``include_role`` do not accept role parameters. This playbook runs the ``foo`` role twice: .. code-block:: yaml --- - hosts: webservers roles: - { role: foo, message: "first" } - { role: foo, message: "second" } This syntax also runs the ``foo`` role twice; .. code-block:: yaml --- - hosts: webservers roles: - role: foo message: "first" - role: foo message: "second" In these examples, Ansible runs ``foo`` twice because each role definition has different parameters. Using ``allow_duplicates: true`` -------------------------------- Add ``allow_duplicates: true`` to the ``meta/main.yml`` file for the role: .. code-block:: yaml # playbook.yml --- - hosts: webservers roles: - foo - foo # roles/foo/meta/main.yml --- allow_duplicates: true In this example, Ansible runs ``foo`` twice because we have explicitly enabled it to do so. .. _role_dependencies: Using role dependencies ======================= Role dependencies let you automatically pull in other roles when using a role. Ansible does not execute role dependencies when you include or import a role. You must use the ``roles`` keyword if you want Ansible to execute role dependencies. Role dependencies are prerequisites, not true dependencies. The roles do not have a parent/child relationship. Ansible loads all listed roles, runs the roles listed under ``dependencies`` first, then runs the role that lists them. The play object is the parent of all roles, including roles called by a ``dependencies`` list. Role dependencies are stored in the ``meta/main.yml`` file within the role directory. This file should contain a list of roles and parameters to insert before the specified role. For example: .. code-block:: yaml # roles/myapp/meta/main.yml --- dependencies: - role: common vars: some_parameter: 3 - role: apache vars: apache_port: 80 - role: postgres vars: dbname: blarg other_parameter: 12 Ansible always executes roles listed in ``dependencies`` before the role that lists them. Ansible executes this pattern recursively when you use the ``roles`` keyword. For example, if you list role ``foo`` under ``roles:``, role ``foo`` lists role ``bar`` under ``dependencies`` in its meta/main.yml file, and role ``bar`` lists role ``baz`` under ``dependencies`` in its meta/main.yml, Ansible executes ``baz``, then ``bar``, then ``foo``. Running role dependencies multiple times in one play ---------------------------------------------------- Ansible treats duplicate role dependencies like duplicate roles listed under ``roles:``: Ansible only executes role dependencies once, even if defined multiple times, unless the parameters, tags, or when clause defined on the role are different for each definition. If two roles in a play both list a third role as a dependency, Ansible only runs that role dependency once, unless you pass different parameters, tags, when clause, or use ``allow_duplicates: true`` in the role you want to run multiple times. See :ref:`Galaxy role dependencies ` for more details. .. note:: Role deduplication does not consult the invocation signature of parent roles. Additionally, when using ``vars:`` instead of role params, there is a side effect of changing variable scoping. Using ``vars:`` results in those variables being scoped at the play level. In the below example, using ``vars:`` would cause ``n`` to be defined as ``4`` through the entire play, including roles called before it. In addition to the above, users should be aware that role de-duplication occurs before variable evaluation. This means that :term:`Lazy Evaluation` may make seemingly different role invocations equivalently the same, preventing the role from running more than once. For example, a role named ``car`` depends on a role named ``wheel`` as follows: .. code-block:: yaml --- dependencies: - role: wheel n: 1 - role: wheel n: 2 - role: wheel n: 3 - role: wheel n: 4 And the ``wheel`` role depends on two roles: ``tire`` and ``brake``. The ``meta/main.yml`` for wheel would then contain the following: .. code-block:: yaml --- dependencies: - role: tire - role: brake And the ``meta/main.yml`` for ``tire`` and ``brake`` would contain the following: .. code-block:: yaml --- allow_duplicates: true The resulting order of execution would be as follows: .. code-block:: text tire(n=1) brake(n=1) wheel(n=1) tire(n=2) brake(n=2) wheel(n=2) ... car To use ``allow_duplicates: true`` with role dependencies, you must specify it for the role listed under ``dependencies``, not for the role that lists it. In the example above, ``allow_duplicates: true`` appears in the ``meta/main.yml`` of the ``tire`` and ``brake`` roles. The ``wheel`` role does not require ``allow_duplicates: true``, because each instance defined by ``car`` uses different parameter values. .. note:: See :ref:`playbooks_variables` for details on how Ansible chooses among variable values defined in different places (variable inheritance and scope). Also deduplication happens ONLY at the play level, so multiple plays in the same playbook may rerun the roles. .. _embedding_modules_and_plugins_in_roles: Embedding modules and plugins in roles ====================================== If you write a custom module (see :ref:`developing_modules`) or a plugin (see :ref:`developing_plugins`), you might wish to distribute it as part of a role. For example, if you write a module that helps configure your company's internal software, and you want other people in your organization to use this module, but you do not want to tell everyone how to configure their Ansible library path, you can include the module in your internal_config role. To add a module or a plugin to a role: Alongside the 'tasks' and 'handlers' structure of a role, add a directory named 'library' and then include the module directly inside the 'library' directory. Assuming you had this: .. code-block:: text roles/ my_custom_modules/ library/ module1 module2 The module will be usable in the role itself, as well as any roles that are called *after* this role, as follows: .. code-block:: yaml --- - hosts: webservers roles: - my_custom_modules - some_other_role_using_my_custom_modules - yet_another_role_using_my_custom_modules If necessary, you can also embed a module in a role to modify a module in Ansible's core distribution. For example, you can use the development version of a particular module before it is released in production releases by copying the module and embedding the copy in a role. Use this approach with caution, as API signatures may change in core components, and this workaround is not guaranteed to work. The same mechanism can be used to embed and distribute plugins in a role, using the same schema. For example, for a filter plugin: .. code-block:: text roles/ my_custom_filter/ filter_plugins filter1 filter2 These filters can then be used in a Jinja template in any role called after 'my_custom_filter'. Sharing roles: Ansible Galaxy ============================= `Ansible Galaxy `_ is a free site for finding, downloading, rating, and reviewing all kinds of community-developed Ansible roles and can be a great way to get a jumpstart on your automation projects. The client ``ansible-galaxy`` is included in Ansible. The Galaxy client allows you to download roles from Ansible Galaxy, and also provides an excellent default framework for creating your own roles. Read the `Ansible Galaxy documentation `_ page for more information .. seealso:: :ref:`ansible_galaxy` How to create new roles, share roles on Galaxy, role management :ref:`yaml_syntax` Learn about YAML syntax :ref:`working_with_playbooks` Review the basic Playbook language features :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`playbooks_variables` Variables in playbooks :ref:`playbooks_conditionals` Conditionals in playbooks :ref:`playbooks_loops` Loops in playbooks :ref:`tags` Using tags to select or skip roles/tasks in long playbooks :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_modules` Extending Ansible by writing your own modules `GitHub Ansible examples `_ Complete playbook files from the GitHub project source `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_roles.rst0000644000000000000000000000103400000000000025362 0ustar00rootroot00000000000000:orphan: Playbook Roles and Include Statements ===================================== .. contents:: Topics The documentation regarding roles and includes for playbooks have moved. Their new location is here: :ref:`playbooks_reuse`. Please update any links you may have made directly to this page. .. seealso:: :ref:`ansible_galaxy` How to share roles on galaxy, role management :ref:`working_with_playbooks` Review the basic Playbook language features :ref:`playbooks_reuse` Creating reusable Playbooks. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_special_topics.rst0000644000000000000000000000044600000000000027245 0ustar00rootroot00000000000000:orphan: .. _playbooks_special_topics: Advanced playbooks features =========================== This page is obsolete. Refer to the :ref:`main User Guide index page ` for links to all playbook-related topics. Please update any links you may have made directly to this page. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_startnstep.rst0000644000000000000000000000302400000000000026446 0ustar00rootroot00000000000000.. _playbooks_start_and_step: *************************************** Executing playbooks for troubleshooting *************************************** When you are testing new plays or debugging playbooks, you may need to run the same play multiple times. To make this more efficient, Ansible offers two alternative ways to execute a playbook: start-at-task and step mode. .. _start_at_task: start-at-task ------------- To start executing your playbook at a particular task (usually the task that failed on the previous run), use the ``--start-at-task`` option. .. code-block:: shell ansible-playbook playbook.yml --start-at-task="install packages" In this example, Ansible starts executing your playbook at a task named "install packages". This feature does not work with tasks inside dynamically re-used roles or tasks (``include_*``), see :ref:`dynamic_vs_static`. .. _step: Step mode --------- To execute a playbook interactively, use ``--step``. .. code-block:: shell ansible-playbook playbook.yml --step With this option, Ansible stops on each task, and asks if it should execute that task. For example, if you have a task called "configure ssh", the playbook run will stop and ask. .. code-block:: shell Perform task: configure ssh (y/n/c): Answer "y" to execute the task, answer "n" to skip the task, and answer "c" to exit step mode, executing all remaining tasks without asking. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbook_debugger` Using the Ansible debugger ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5315561 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_strategies.rst0000644000000000000000000002345100000000000026417 0ustar00rootroot00000000000000.. _playbooks_strategies: Controlling playbook execution: strategies and more =================================================== By default, Ansible runs each task on all hosts affected by a play before starting the next task on any host, using 5 forks. If you want to change this default behavior, you can use a different strategy plugin, change the number of forks, or apply one of several keywords like ``serial``. .. contents:: :local: Selecting a strategy -------------------- The default behavior described above is the :ref:`linear strategy`. Ansible offers other strategies, including the :ref:`debug strategy` (see also :ref:`playbook_debugger`) and the :ref:`free strategy`, which allows each host to run until the end of the play as fast as it can: .. code-block:: yaml - hosts: all strategy: free tasks: # ... You can select a different strategy for each play as shown above, or set your preferred strategy globally in ``ansible.cfg``, under the ``defaults`` stanza: .. code-block:: ini [defaults] strategy = free All strategies are implemented as :ref:`strategy plugins`. Please review the documentation for each strategy plugin for details on how it works. Setting the number of forks --------------------------- If you have the processing power available and want to use more forks, you can set the number in ``ansible.cfg``: .. code-block:: ini [defaults] forks = 30 or pass it on the command line: `ansible-playbook -f 30 my_playbook.yml`. Using keywords to control execution ----------------------------------- In addition to strategies, several :ref:`keywords` also affect play execution. You can set a number, a percentage, or a list of numbers of hosts you want to manage at a time with ``serial``. Ansible completes the play on the specified number or percentage of hosts before starting the next batch of hosts. You can restrict the number of workers allotted to a block or task with ``throttle``. You can control how Ansible selects the next host in a group to execute against with ``order``. You can run a task on a single host with ``run_once``. These keywords are not strategies. They are directives or options applied to a play, block, or task. Other keywords that affect play execution include ``ignore_errors``, ``ignore_unreachable``, and ``any_errors_fatal``. These options are documented in :ref:`playbooks_error_handling`. .. _rolling_update_batch_size: Setting the batch size with ``serial`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, Ansible runs in parallel against all the hosts in the :ref:`pattern ` you set in the ``hosts:`` field of each play. If you want to manage only a few machines at a time, for example during a rolling update, you can define how many hosts Ansible should manage at a single time using the ``serial`` keyword: .. code-block:: yaml --- - name: test play hosts: webservers serial: 3 gather_facts: False tasks: - name: first task command: hostname - name: second task command: hostname In the above example, if we had 6 hosts in the group 'webservers', Ansible would execute the play completely (both tasks) on 3 of the hosts before moving on to the next 3 hosts: .. code-block:: ansible-output PLAY [webservers] **************************************** TASK [first task] **************************************** changed: [web3] changed: [web2] changed: [web1] TASK [second task] *************************************** changed: [web1] changed: [web2] changed: [web3] PLAY [webservers] **************************************** TASK [first task] **************************************** changed: [web4] changed: [web5] changed: [web6] TASK [second task] *************************************** changed: [web4] changed: [web5] changed: [web6] PLAY RECAP *********************************************** web1 : ok=2 changed=2 unreachable=0 failed=0 web2 : ok=2 changed=2 unreachable=0 failed=0 web3 : ok=2 changed=2 unreachable=0 failed=0 web4 : ok=2 changed=2 unreachable=0 failed=0 web5 : ok=2 changed=2 unreachable=0 failed=0 web6 : ok=2 changed=2 unreachable=0 failed=0 You can also specify a percentage with the ``serial`` keyword. Ansible applies the percentage to the total number of hosts in a play to determine the number of hosts per pass: .. code-block:: yaml --- - name: test play hosts: webservers serial: "30%" If the number of hosts does not divide equally into the number of passes, the final pass contains the remainder. In this example, if you had 20 hosts in the webservers group, the first batch would contain 6 hosts, the second batch would contain 6 hosts, the third batch would contain 6 hosts, and the last batch would contain 2 hosts. You can also specify batch sizes as a list. For example: .. code-block:: yaml --- - name: test play hosts: webservers serial: - 1 - 5 - 10 In the above example, the first batch would contain a single host, the next would contain 5 hosts, and (if there are any hosts left), every following batch would contain either 10 hosts or all the remaining hosts, if fewer than 10 hosts remained. You can list multiple batch sizes as percentages: .. code-block:: yaml --- - name: test play hosts: webservers serial: - "10%" - "20%" - "100%" You can also mix and match the values: .. code-block:: yaml --- - name: test play hosts: webservers serial: - 1 - 5 - "20%" .. note:: No matter how small the percentage, the number of hosts per pass will always be 1 or greater. Restricting execution with ``throttle`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``throttle`` keyword limits the number of workers for a particular task. It can be set at the block and task level. Use ``throttle`` to restrict tasks that may be CPU-intensive or interact with a rate-limiting API: .. code-block:: yaml tasks: - command: /path/to/cpu_intensive_command throttle: 1 If you have already restricted the number of forks or the number of machines to execute against in parallel, you can reduce the number of workers with ``throttle``, but you cannot increase it. In other words, to have an effect, your ``throttle`` setting must be lower than your ``forks`` or ``serial`` setting if you are using them together. Ordering execution based on inventory ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``order`` keyword controls the order in which hosts are run. Possible values for order are: inventory: (default) The order provided by the inventory for the selection requested (see note below) reverse_inventory: The same as above, but reversing the returned list sorted: Sorted alphabetically sorted by name reverse_sorted: Sorted by name in reverse alphabetical order shuffle: Randomly ordered on each run .. note:: the 'inventory' order does not equate to the order in which hosts/groups are defined in the inventory source file, but the 'order in which a selection is returned from the compiled inventory'. This is a backwards compatible option and while reproducible it is not normally predictable. Due to the nature of inventory, host patterns, limits, inventory plugins and the ability to allow multiple sources it is almost impossible to return such an order. For simple cases this might happen to match the file definition order, but that is not guaranteed. .. _run_once: Running on a single machine with ``run_once`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you want a task to run only on the first host in your batch of hosts, set ``run_once`` to true on that task: .. code-block:: yaml --- # ... tasks: # ... - command: /opt/application/upgrade_db.py run_once: true # ... Ansible executes this task on the first host in the current batch and applies all results and facts to all the hosts in the same batch. This approach is similar to applying a conditional to a task such as: .. code-block:: yaml - command: /opt/application/upgrade_db.py when: inventory_hostname == webservers[0] However, with ``run_once``, the results are applied to all the hosts. To run the task on a specific host, instead of the first host in the batch, delegate the task: .. code-block:: yaml - command: /opt/application/upgrade_db.py run_once: true delegate_to: web01.example.org As always with :ref:`delegation `, the action will be executed on the delegated host, but the information is still that of the original host in the task. .. note:: When used together with ``serial``, tasks marked as ``run_once`` will be run on one host in *each* serial batch. If the task must run only once regardless of ``serial`` mode, use :code:`when: inventory_hostname == ansible_play_hosts_all[0]` construct. .. note:: Any conditional (in other words, `when:`) will use the variables of the 'first host' to decide if the task runs or not, no other hosts will be tested. .. note:: If you want to avoid the default behavior of setting the fact for all hosts, set ``delegate_facts: True`` for the specific task or block. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_delegation` Running tasks on or assigning facts to specific machines :ref:`playbooks_reuse_roles` Playbook organization by roles `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.532556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_tags.rst0000644000000000000000000003710300000000000025202 0ustar00rootroot00000000000000.. _tags: **** Tags **** If you have a large playbook, it may be useful to run only specific parts of it instead of running the entire playbook. You can do this with Ansible tags. Using tags to execute or skip selected tasks is a two-step process: #. Add tags to your tasks, either individually or with tag inheritance from a block, play, role, or import. #. Select or skip tags when you run your playbook. .. contents:: :local: Adding tags with the tags keyword ================================= You can add tags to a single task or include. You can also add tags to multiple tasks by defining them at the level of a block, play, role, or import. The keyword ``tags`` addresses all these use cases. The ``tags`` keyword always defines tags and adds them to tasks; it does not select or skip tasks for execution. You can only select or skip tasks based on tags at the command line when you run a playbook. See :ref:`using_tags` for more details. Adding tags to individual tasks ------------------------------- At the simplest level, you can apply one or more tags to an individual task. You can add tags to tasks in playbooks, in task files, or within a role. Here is an example that tags two tasks with different tags: .. code-block:: yaml tasks: - name: Install the servers ansible.builtin.yum: name: - httpd - memcached state: present tags: - packages - webservers - name: Configure the service ansible.builtin.template: src: templates/src.j2 dest: /etc/foo.conf tags: - configuration You can apply the same tag to more than one individual task. This example tags several tasks with the same tag, "ntp": .. code-block:: yaml --- # file: roles/common/tasks/main.yml - name: Install ntp ansible.builtin.yum: name: ntp state: present tags: ntp - name: Configure ntp ansible.builtin.template: src: ntp.conf.j2 dest: /etc/ntp.conf notify: - restart ntpd tags: ntp - name: Enable and run ntpd ansible.builtin.service: name: ntpd state: started enabled: yes tags: ntp - name: Install NFS utils ansible.builtin.yum: name: - nfs-utils - nfs-util-lib state: present tags: filesharing If you ran these four tasks in a playbook with ``--tags ntp``, Ansible would run the three tasks tagged ``ntp`` and skip the one task that does not have that tag. .. _tags_on_includes: Adding tags to includes ----------------------- You can apply tags to dynamic includes in a playbook. As with tags on an individual task, tags on an ``include_*`` task apply only to the include itself, not to any tasks within the included file or role. If you add ``mytag`` to a dynamic include, then run that playbook with ``--tags mytag``, Ansible runs the include itself, runs any tasks within the included file or role tagged with ``mytag``, and skips any tasks within the included file or role without that tag. See :ref:`selective_reuse` for more details. You add tags to includes the same way you add tags to any other task: .. code-block:: yaml --- # file: roles/common/tasks/main.yml - name: Dynamic re-use of database tasks include_tasks: db.yml tags: db You can add a tag only to the dynamic include of a role. In this example, the ``foo`` tag will `not` apply to tasks inside the ``bar`` role: .. code-block:: yaml --- - hosts: webservers tasks: - name: Include the bar role include_role: name: bar tags: - foo With plays, blocks, the ``role`` keyword, and static imports, Ansible applies tag inheritance, adding the tags you define to every task inside the play, block, role, or imported file. However, tag inheritance does *not* apply to dynamic re-use with ``include_role`` and ``include_tasks``. With dynamic re-use (includes), the tags you define apply only to the include itself. If you need tag inheritance, use a static import. If you cannot use an import because the rest of your playbook uses includes, see :ref:`apply_keyword` for ways to work around this behavior. .. _tag_inheritance: Tag inheritance: adding tags to multiple tasks ---------------------------------------------- If you want to apply the same tag or tags to multiple tasks without adding a ``tags`` line to every task, you can define the tags at the level of your play or block, or when you add a role or import a file. Ansible applies the tags down the dependency chain to all child tasks. With roles and imports, Ansible appends the tags set by the ``roles`` section or import to any tags set on individual tasks or blocks within the role or imported file. This is called tag inheritance. Tag inheritance is convenient, because you do not have to tag every task. However, the tags still apply to the tasks individually. Adding tags to blocks ^^^^^^^^^^^^^^^^^^^^^ If you want to apply a tag to many, but not all, of the tasks in your play, use a :ref:`block ` and define the tags at that level. For example, we could edit the NTP example shown above to use a block: .. code-block:: yaml # myrole/tasks/main.yml - name: ntp tasks tags: ntp block: - name: Install ntp ansible.builtin.yum: name: ntp state: present - name: Configure ntp ansible.builtin.template: src: ntp.conf.j2 dest: /etc/ntp.conf notify: - restart ntpd - name: Enable and run ntpd ansible.builtin.service: name: ntpd state: started enabled: yes - name: Install NFS utils ansible.builtin.yum: name: - nfs-utils - nfs-util-lib state: present tags: filesharing Adding tags to plays ^^^^^^^^^^^^^^^^^^^^ If all the tasks in a play should get the same tag, you can add the tag at the level of the play. For example, if you had a play with only the NTP tasks, you could tag the entire play: .. code-block:: yaml - hosts: all tags: ntp tasks: - name: Install ntp ansible.builtin.yum: name: ntp state: present - name: Configure ntp ansible.builtin.template: src: ntp.conf.j2 dest: /etc/ntp.conf notify: - restart ntpd - name: Enable and run ntpd ansible.builtin.service: name: ntpd state: started enabled: yes - hosts: fileservers tags: filesharing tasks: ... Adding tags to roles ^^^^^^^^^^^^^^^^^^^^ There are three ways to add tags to roles: #. Add the same tag or tags to all tasks in the role by setting tags under ``roles``. See examples in this section. #. Add the same tag or tags to all tasks in the role by setting tags on a static ``import_role`` in your playbook. See examples in :ref:`tags_on_imports`. #. Add a tag or tags to individual tasks or blocks within the role itself. This is the only approach that allows you to select or skip some tasks within the role. To select or skip tasks within the role, you must have tags set on individual tasks or blocks, use the dynamic ``include_role`` in your playbook, and add the same tag or tags to the include. When you use this approach, and then run your playbook with ``--tags foo``, Ansible runs the include itself plus any tasks in the role that also have the tag ``foo``. See :ref:`tags_on_includes` for details. When you incorporate a role in your playbook statically with the ``roles`` keyword, Ansible adds any tags you define to all the tasks in the role. For example: .. code-block:: yaml roles: - role: webserver vars: port: 5000 tags: [ web, foo ] or: .. code-block:: yaml --- - hosts: webservers roles: - role: foo tags: - bar - baz # using YAML shorthand, this is equivalent to: # - { role: foo, tags: ["bar", "baz"] } .. _tags_on_imports: Adding tags to imports ^^^^^^^^^^^^^^^^^^^^^^ You can also apply a tag or tags to all the tasks imported by the static ``import_role`` and ``import_tasks`` statements: .. code-block:: yaml --- - hosts: webservers tasks: - name: Import the foo role import_role: name: foo tags: - bar - baz - name: Import tasks from foo.yml import_tasks: foo.yml tags: [ web, foo ] .. _apply_keyword: Tag inheritance for includes: blocks and the ``apply`` keyword ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default, Ansible does not apply :ref:`tag inheritance ` to dynamic re-use with ``include_role`` and ``include_tasks``. If you add tags to an include, they apply only to the include itself, not to any tasks in the included file or role. This allows you to execute selected tasks within a role or task file - see :ref:`selective_reuse` when you run your playbook. If you want tag inheritance, you probably want to use imports. However, using both includes and imports in a single playbook can lead to difficult-to-diagnose bugs. For this reason, if your playbook uses ``include_*`` to re-use roles or tasks, and you need tag inheritance on one include, Ansible offers two workarounds. You can use the ``apply`` keyword: .. code-block:: yaml - name: Apply the db tag to the include and to all tasks in db.yaml include_tasks: file: db.yml # adds 'db' tag to tasks within db.yml apply: tags: db # adds 'db' tag to this 'include_tasks' itself tags: db Or you can use a block: .. code-block:: yaml - block: - name: Include tasks from db.yml include_tasks: db.yml tags: db .. _special_tags: Special tags: always and never ============================== Ansible reserves two tag names for special behavior: always and never. If you assign the ``always`` tag to a task or play, Ansible will always run that task or play, unless you specifically skip it (``--skip-tags always``). For example: .. code-block:: yaml tasks: - name: Print a message ansible.builtin.debug: msg: "Always runs" tags: - always - name: Print a message ansible.builtin.debug: msg: "runs when you use tag1" tags: - tag1 .. warning:: * Fact gathering is tagged with 'always' by default. It is only skipped if you apply a tag and then use a different tag in ``--tags`` or the same tag in ``--skip-tags``. .. warning:: * The role argument specification validation task is tagged with 'always' by default. This validation will be skipped if you use ``--skip-tags always``. .. versionadded:: 2.5 If you assign the ``never`` tag to a task or play, Ansible will skip that task or play unless you specifically request it (``--tags never``). For example: .. code-block:: yaml tasks: - name: Run the rarely-used debug task ansible.builtin.debug: msg: '{{ showmevar }}' tags: [ never, debug ] The rarely-used debug task in the example above only runs when you specifically request the ``debug`` or ``never`` tags. .. _using_tags: Selecting or skipping tags when you run a playbook ================================================== Once you have added tags to your tasks, includes, blocks, plays, roles, and imports, you can selectively execute or skip tasks based on their tags when you run :ref:`ansible-playbook`. Ansible runs or skips all tasks with tags that match the tags you pass at the command line. If you have added a tag at the block or play level, with ``roles``, or with an import, that tag applies to every task within the block, play, role, or imported role or file. If you have a role with lots of tags and you want to call subsets of the role at different times, either :ref:`use it with dynamic includes `, or split the role into multiple roles. :ref:`ansible-playbook` offers five tag-related command-line options: * ``--tags all`` - run all tasks, ignore tags (default behavior) * ``--tags [tag1, tag2]`` - run only tasks with either the tag ``tag1`` or the tag ``tag2`` * ``--skip-tags [tag3, tag4]`` - run all tasks except those with either the tag ``tag3`` or the tag ``tag4`` * ``--tags tagged`` - run only tasks with at least one tag * ``--tags untagged`` - run only tasks with no tags For example, to run only tasks and blocks tagged ``configuration`` and ``packages`` in a very long playbook: .. code-block:: bash ansible-playbook example.yml --tags "configuration,packages" To run all tasks except those tagged ``packages``: .. code-block:: bash ansible-playbook example.yml --skip-tags "packages" Previewing the results of using tags ------------------------------------ When you run a role or playbook, you might not know or remember which tasks have which tags, or which tags exist at all. Ansible offers two command-line flags for :ref:`ansible-playbook` that help you manage tagged playbooks: * ``--list-tags`` - generate a list of available tags * ``--list-tasks`` - when used with ``--tags tagname`` or ``--skip-tags tagname``, generate a preview of tagged tasks For example, if you do not know whether the tag for configuration tasks is ``config`` or ``conf`` in a playbook, role, or tasks file, you can display all available tags without running any tasks: .. code-block:: bash ansible-playbook example.yml --list-tags If you do not know which tasks have the tags ``configuration`` and ``packages``, you can pass those tags and add ``--list-tasks``. Ansible lists the tasks but does not execute any of them. .. code-block:: bash ansible-playbook example.yml --tags "configuration,packages" --list-tasks These command-line flags have one limitation: they cannot show tags or tasks within dynamically included files or roles. See :ref:`dynamic_vs_static` for more information on differences between static imports and dynamic includes. .. _selective_reuse: Selectively running tagged tasks in re-usable files --------------------------------------------------- If you have a role or a tasks file with tags defined at the task or block level, you can selectively run or skip those tagged tasks in a playbook if you use a dynamic include instead of a static import. You must use the same tag on the included tasks and on the include statement itself. For example you might create a file with some tagged and some untagged tasks: .. code-block:: yaml # mixed.yml tasks: - name: Run the task with no tags ansible.builtin.debug: msg: this task has no tags - name: Run the tagged task ansible.builtin.debug: msg: this task is tagged with mytag tags: mytag - block: - name: Run the first block task with mytag ... - name: Run the second block task with mytag ... tags: - mytag And you might include the tasks file above in a playbook: .. code-block:: yaml # myplaybook.yml - hosts: all tasks: - name: Run tasks from mixed.yml include_tasks: name: mixed.yml tags: mytag When you run the playbook with ``ansible-playbook -i hosts myplaybook.yml --tags "mytag"``, Ansible skips the task with no tags, runs the tagged individual task, and runs the two tasks in the block. Configuring tags globally ------------------------- If you run or skip certain tags by default, you can use the :ref:`TAGS_RUN` and :ref:`TAGS_SKIP` options in Ansible configuration to set those defaults. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.532556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_templating.rst0000644000000000000000000000550200000000000026406 0ustar00rootroot00000000000000.. _playbooks_templating: ******************* Templating (Jinja2) ******************* Ansible uses Jinja2 templating to enable dynamic expressions and access to :ref:`variables ` and :ref:`facts `. You can use templating with the :ref:`template module `. For example, you can create a template for a configuration file, then deploy that configuration file to multiple environments and supply the correct data (IP address, hostname, version) for each environment. You can also use templating in playbooks directly, by templating task names and more. You can use all the :ref:`standard filters and tests ` included in Jinja2. Ansible includes additional specialized filters for selecting and transforming data, tests for evaluating template expressions, and :ref:`lookup_plugins` for retrieving data from external sources such as files, APIs, and databases for use in templating. All templating happens on the Ansible controller **before** the task is sent and executed on the target machine. This approach minimizes the package requirements on the target (jinja2 is only required on the controller). It also limits the amount of data Ansible passes to the target machine. Ansible parses templates on the controller and passes only the information needed for each task to the target machine, instead of passing all the data on the controller and parsing it on the target. .. note:: Files and data used by the :ref:`template module ` must be utf-8 encoded. .. contents:: :local: .. toctree:: :maxdepth: 2 playbooks_filters playbooks_tests playbooks_lookups playbooks_python_version .. _templating_now: Get the current time ==================== .. versionadded:: 2.8 The ``now()`` Jinja2 function retrieves a Python datetime object or a string representation for the current time. The ``now()`` function supports 2 arguments: utc Specify ``True`` to get the current time in UTC. Defaults to ``False``. fmt Accepts a `strftime `_ string that returns a formatted date time string. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_loops` Looping in playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks `Jinja2 Docs `_ Jinja2 documentation, includes the syntax and semantics of the templates `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.532556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_tests.rst0000644000000000000000000003017600000000000025411 0ustar00rootroot00000000000000.. _playbooks_tests: ***** Tests ***** `Tests `_ in Jinja are a way of evaluating template expressions and returning True or False. Jinja ships with many of these. See `builtin tests`_ in the official Jinja template documentation. The main difference between tests and filters are that Jinja tests are used for comparisons, whereas filters are used for data manipulation, and have different applications in jinja. Tests can also be used in list processing filters, like ``map()`` and ``select()`` to choose items in the list. Like all templating, tests always execute on the Ansible controller, **not** on the target of a task, as they test local data. In addition to those Jinja2 tests, Ansible supplies a few more and users can easily create their own. .. contents:: :local: .. _test_syntax: Test syntax =========== `Test syntax `_ varies from `filter syntax `_ (``variable | filter``). Historically Ansible has registered tests as both jinja tests and jinja filters, allowing for them to be referenced using filter syntax. As of Ansible 2.5, using a jinja test as a filter will generate a warning. The syntax for using a jinja test is as follows .. code-block:: console variable is test_name Such as .. code-block:: console result is failed .. _testing_strings: Testing strings =============== To match strings against a substring or a regular expression, use the ``match``, ``search`` or ``regex`` tests .. code-block:: yaml vars: url: "https://example.com/users/foo/resources/bar" tasks: - debug: msg: "matched pattern 1" when: url is match("https://example.com/users/.*/resources") - debug: msg: "matched pattern 2" when: url is search("users/.*/resources/.*") - debug: msg: "matched pattern 3" when: url is search("users") - debug: msg: "matched pattern 4" when: url is regex("example\.com/\w+/foo") ``match`` succeeds if it finds the pattern at the beginning of the string, while ``search`` succeeds if it finds the pattern anywhere within string. By default, ``regex`` works like ``search``, but ``regex`` can be configured to perform other tests as well, by passing the ``match_type`` keyword argument. In particular, ``match_type`` determines the ``re`` method that gets used to perform the search. The full list can be found in the relevant Python documentation `here `_. All of the string tests also take optional ``ignorecase`` and ``multiline`` arguments. These correspond to ``re.I`` and ``re.M`` from Python's ``re`` library, respectively. .. _testing_vault: Vault ===== .. versionadded:: 2.10 You can test whether a variable is an inline single vault encrypted value using the ``vault_encrypted`` test. .. code-block:: yaml vars: variable: !vault | $ANSIBLE_VAULT;1.2;AES256;dev 61323931353866666336306139373937316366366138656131323863373866376666353364373761 3539633234313836346435323766306164626134376564330a373530313635343535343133316133 36643666306434616266376434363239346433643238336464643566386135356334303736353136 6565633133366366360a326566323363363936613664616364623437336130623133343530333739 3039 tasks: - debug: msg: '{{ (variable is vault_encrypted) | ternary("Vault encrypted", "Not vault encrypted") }}' .. _testing_truthiness: Testing truthiness ================== .. versionadded:: 2.10 As of Ansible 2.10, you can now perform Python like truthy and falsy checks. .. code-block:: yaml - debug: msg: "Truthy" when: value is truthy vars: value: "some string" - debug: msg: "Falsy" when: value is falsy vars: value: "" Additionally, the ``truthy`` and ``falsy`` tests accept an optional parameter called ``convert_bool`` that will attempt to convert boolean indicators to actual booleans. .. code-block:: yaml - debug: msg: "Truthy" when: value is truthy(convert_bool=True) vars: value: "yes" - debug: msg: "Falsy" when: value is falsy(convert_bool=True) vars: value: "off" .. _testing_versions: Comparing versions ================== .. versionadded:: 1.6 .. note:: In 2.5 ``version_compare`` was renamed to ``version`` To compare a version number, such as checking if the ``ansible_facts['distribution_version']`` version is greater than or equal to '12.04', you can use the ``version`` test. The ``version`` test can also be used to evaluate the ``ansible_facts['distribution_version']`` .. code-block:: yaml+jinja {{ ansible_facts['distribution_version'] is version('12.04', '>=') }} If ``ansible_facts['distribution_version']`` is greater than or equal to 12.04, this test returns True, otherwise False. The ``version`` test accepts the following operators .. code-block:: console <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne This test also accepts a 3rd parameter, ``strict`` which defines if strict version parsing as defined by ``distutils.version.StrictVersion`` should be used. The default is ``False`` (using ``distutils.version.LooseVersion``), ``True`` enables strict version parsing .. code-block:: yaml+jinja {{ sample_version_var is version('1.0', operator='lt', strict=True) }} As of Ansible 2.11 the ``version`` test accepts a ``version_type`` parameter which is mutually exclusive with ``strict``, and accepts the following values .. code-block:: console loose, strict, semver, semantic Using ``version_type`` to compare a semantic version would be achieved like the following .. code-block:: yaml+jinja {{ sample_semver_var is version('2.0.0-rc.1+build.123', 'lt', version_type='semver') }} When using ``version`` in a playbook or role, don't use ``{{ }}`` as described in the `FAQ `_ .. code-block:: yaml vars: my_version: 1.2.3 tasks: - debug: msg: "my_version is higher than 1.0.0" when: my_version is version('1.0.0', '>') .. _math_tests: Set theory tests ================ .. versionadded:: 2.1 .. note:: In 2.5 ``issubset`` and ``issuperset`` were renamed to ``subset`` and ``superset`` To see if a list includes or is included by another list, you can use 'subset' and 'superset' .. code-block:: yaml vars: a: [1,2,3,4,5] b: [2,3] tasks: - debug: msg: "A includes B" when: a is superset(b) - debug: msg: "B is included in A" when: b is subset(a) .. _contains_test: Testing if a list contains a value ================================== .. versionadded:: 2.8 Ansible includes a ``contains`` test which operates similarly, but in reverse of the Jinja2 provided ``in`` test. The ``contains`` test is designed to work with the ``select``, ``reject``, ``selectattr``, and ``rejectattr`` filters .. code-block:: yaml vars: lacp_groups: - master: lacp0 network: 10.65.100.0/24 gateway: 10.65.100.1 dns4: - 10.65.100.10 - 10.65.100.11 interfaces: - em1 - em2 - master: lacp1 network: 10.65.120.0/24 gateway: 10.65.120.1 dns4: - 10.65.100.10 - 10.65.100.11 interfaces: - em3 - em4 tasks: - debug: msg: "{{ (lacp_groups|selectattr('interfaces', 'contains', 'em1')|first).master }}" .. versionadded:: 2.4 Testing if a list value is True =============================== You can use `any` and `all` to check if any or all elements in a list are true or not .. code-block:: yaml vars: mylist: - 1 - "{{ 3 == 3 }}" - True myotherlist: - False - True tasks: - debug: msg: "all are true!" when: mylist is all - debug: msg: "at least one is true" when: myotherlist is any .. _path_tests: Testing paths ============= .. note:: In 2.5 the following tests were renamed to remove the ``is_`` prefix The following tests can provide information about a path on the controller .. code-block:: yaml - debug: msg: "path is a directory" when: mypath is directory - debug: msg: "path is a file" when: mypath is file - debug: msg: "path is a symlink" when: mypath is link - debug: msg: "path already exists" when: mypath is exists - debug: msg: "path is {{ (mypath is abs)|ternary('absolute','relative')}}" - debug: msg: "path is the same file as path2" when: mypath is same_file(path2) - debug: msg: "path is a mount" when: mypath is mount Testing size formats ==================== The ``human_readable`` and ``human_to_bytes`` functions let you test your playbooks to make sure you are using the right size format in your tasks, and that you provide Byte format to computers and human-readable format to people. Human readable -------------- Asserts whether the given string is human readable or not. For example .. code-block:: yaml+jinja - name: "Human Readable" assert: that: - '"1.00 Bytes" == 1|human_readable' - '"1.00 bits" == 1|human_readable(isbits=True)' - '"10.00 KB" == 10240|human_readable' - '"97.66 MB" == 102400000|human_readable' - '"0.10 GB" == 102400000|human_readable(unit="G")' - '"0.10 Gb" == 102400000|human_readable(isbits=True, unit="G")' This would result in .. code-block:: json { "changed": false, "msg": "All assertions passed" } Human to bytes -------------- Returns the given string in the Bytes format. For example .. code-block:: yaml+jinja - name: "Human to Bytes" assert: that: - "{{'0'|human_to_bytes}} == 0" - "{{'0.1'|human_to_bytes}} == 0" - "{{'0.9'|human_to_bytes}} == 1" - "{{'1'|human_to_bytes}} == 1" - "{{'10.00 KB'|human_to_bytes}} == 10240" - "{{ '11 MB'|human_to_bytes}} == 11534336" - "{{ '1.1 GB'|human_to_bytes}} == 1181116006" - "{{'10.00 Kb'|human_to_bytes(isbits=True)}} == 10240" This would result in .. code-block:: json { "changed": false, "msg": "All assertions passed" } .. _test_task_results: Testing task results ==================== The following tasks are illustrative of the tests meant to check the status of tasks .. code-block:: yaml tasks: - shell: /usr/bin/foo register: result ignore_errors: True - debug: msg: "it failed" when: result is failed # in most cases you'll want a handler, but if you want to do something right now, this is nice - debug: msg: "it changed" when: result is changed - debug: msg: "it succeeded in Ansible >= 2.1" when: result is succeeded - debug: msg: "it succeeded" when: result is success - debug: msg: "it was skipped" when: result is skipped .. note:: From 2.1, you can also use success, failure, change, and skip so that the grammar matches, for those who need to be strict about it. .. _builtin tests: https://jinja.palletsprojects.com/en/latest/templates/#builtin-tests .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_variables` All about variables :ref:`playbooks_loops` Looping in playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.532556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_variables.rst0000644000000000000000000006256300000000000026224 0ustar00rootroot00000000000000.. _playbooks_variables: *************** Using Variables *************** Ansible uses variables to manage differences between systems. With Ansible, you can execute tasks and playbooks on multiple different systems with a single command. To represent the variations among those different systems, you can create variables with standard YAML syntax, including lists and dictionaries. You can define these variables in your playbooks, in your :ref:`inventory `, in re-usable :ref:`files ` or :ref:`roles `, or at the command line. You can also create variables during a playbook run by registering the return value or values of a task as a new variable. After you create variables, either by defining them in a file, passing them at the command line, or registering the return value or values of a task as a new variable, you can use those variables in module arguments, in :ref:`conditional "when" statements `, in :ref:`templates `, and in :ref:`loops `. The `ansible-examples github repository `_ contains many examples of using variables in Ansible. Once you understand the concepts and examples on this page, read about :ref:`Ansible facts `, which are variables you retrieve from remote systems. .. contents:: :local: .. _valid_variable_names: Creating valid variable names ============================= Not all strings are valid Ansible variable names. A variable name can only include letters, numbers, and underscores. `Python keywords`_ or :ref:`playbook keywords` are not valid variable names. A variable name cannot begin with a number. Variable names can begin with an underscore. In many programming languages, variables that begin with an underscore are private. This is not true in Ansible. Variables that begin with an underscore are treated exactly the same as any other variable. Do not rely on this convention for privacy or security. This table gives examples of valid and invalid variable names: .. table:: :class: documentation-table ====================== ==================================================================== Valid variable names Not valid ====================== ==================================================================== ``foo`` ``*foo``, `Python keywords`_ such as ``async`` and ``lambda`` ``foo_env`` :ref:`playbook keywords` such as ``environment`` ``foo_port`` ``foo-port``, ``foo port``, ``foo.port`` ``foo5``, ``_foo`` ``5foo``, ``12`` ====================== ==================================================================== .. _Python keywords: https://docs.python.org/3/reference/lexical_analysis.html#keywords Simple variables ================ Simple variables combine a variable name with a single value. You can use this syntax (and the syntax for lists and dictionaries shown below) in a variety of places. For details about setting variables in inventory, in playbooks, in reusable files, in roles, or at the command line, see :ref:`setting_variables`. Defining simple variables ------------------------- You can define a simple variable using standard YAML syntax. For example: .. code-block:: text remote_install_path: /opt/my_app_config Referencing simple variables ---------------------------- After you define a variable, use Jinja2 syntax to reference it. Jinja2 variables use double curly braces. For example, the expression ``My amp goes to {{ max_amp_value }}`` demonstrates the most basic form of variable substitution. You can use Jinja2 syntax in playbooks. For example: .. code-block:: yaml+jinja ansible.builtin.template: src: foo.cfg.j2 dest: '{{ remote_install_path }}/foo.cfg' In this example, the variable defines the location of a file, which can vary from one system to another. .. note:: Ansible allows Jinja2 loops and conditionals in :ref:`templates ` but not in playbooks. You cannot create a loop of tasks. Ansible playbooks are pure machine-parseable YAML. .. _yaml_gotchas: When to quote variables (a YAML gotcha) ======================================= If you start a value with ``{{ foo }}``, you must quote the whole expression to create valid YAML syntax. If you do not quote the whole expression, the YAML parser cannot interpret the syntax - it might be a variable or it might be the start of a YAML dictionary. For guidance on writing YAML, see the :ref:`yaml_syntax` documentation. If you use a variable without quotes like this: .. code-block:: yaml+jinja - hosts: app_servers vars: app_path: {{ base_path }}/22 You will see: ``ERROR! Syntax Error while loading YAML.`` If you add quotes, Ansible works correctly: .. code-block:: yaml+jinja - hosts: app_servers vars: app_path: "{{ base_path }}/22" .. _list_variables: List variables ============== A list variable combines a variable name with multiple values. The multiple values can be stored as an itemized list or in square brackets ``[]``, separated with commas. Defining variables as lists --------------------------- You can define variables with multiple values using YAML lists. For example: .. code-block:: yaml region: - northeast - southeast - midwest Referencing list variables -------------------------- When you use variables defined as a list (also called an array), you can use individual, specific fields from that list. The first item in a list is item 0, the second item is item 1. For example: .. code-block:: yaml+jinja region: "{{ region[0] }}" The value of this expression would be "northeast". .. _dictionary_variables: Dictionary variables ==================== A dictionary stores the data in key-value pairs. Usually, dictionaries are used to store related data, such as the information contained in an ID or a user profile. Defining variables as key:value dictionaries -------------------------------------------- You can define more complex variables using YAML dictionaries. A YAML dictionary maps keys to values. For example: .. code-block:: yaml foo: field1: one field2: two Referencing key:value dictionary variables ------------------------------------------ When you use variables defined as a key:value dictionary (also called a hash), you can use individual, specific fields from that dictionary using either bracket notation or dot notation: .. code-block:: yaml foo['field1'] foo.field1 Both of these examples reference the same value ("one"). Bracket notation always works. Dot notation can cause problems because some keys collide with attributes and methods of python dictionaries. Use bracket notation if you use keys which start and end with two underscores (which are reserved for special meanings in python) or are any of the known public attributes: ``add``, ``append``, ``as_integer_ratio``, ``bit_length``, ``capitalize``, ``center``, ``clear``, ``conjugate``, ``copy``, ``count``, ``decode``, ``denominator``, ``difference``, ``difference_update``, ``discard``, ``encode``, ``endswith``, ``expandtabs``, ``extend``, ``find``, ``format``, ``fromhex``, ``fromkeys``, ``get``, ``has_key``, ``hex``, ``imag``, ``index``, ``insert``, ``intersection``, ``intersection_update``, ``isalnum``, ``isalpha``, ``isdecimal``, ``isdigit``, ``isdisjoint``, ``is_integer``, ``islower``, ``isnumeric``, ``isspace``, ``issubset``, ``issuperset``, ``istitle``, ``isupper``, ``items``, ``iteritems``, ``iterkeys``, ``itervalues``, ``join``, ``keys``, ``ljust``, ``lower``, ``lstrip``, ``numerator``, ``partition``, ``pop``, ``popitem``, ``real``, ``remove``, ``replace``, ``reverse``, ``rfind``, ``rindex``, ``rjust``, ``rpartition``, ``rsplit``, ``rstrip``, ``setdefault``, ``sort``, ``split``, ``splitlines``, ``startswith``, ``strip``, ``swapcase``, ``symmetric_difference``, ``symmetric_difference_update``, ``title``, ``translate``, ``union``, ``update``, ``upper``, ``values``, ``viewitems``, ``viewkeys``, ``viewvalues``, ``zfill``. .. _registered_variables: Registering variables ===================== You can create variables from the output of an Ansible task with the task keyword ``register``. You can use registered variables in any later tasks in your play. For example: .. code-block:: yaml - hosts: web_servers tasks: - name: Run a shell command and register its output as a variable ansible.builtin.shell: /usr/bin/foo register: foo_result ignore_errors: true - name: Run a shell command using output of the previous task ansible.builtin.shell: /usr/bin/bar when: foo_result.rc == 5 For more examples of using registered variables in conditions on later tasks, see :ref:`playbooks_conditionals`. Registered variables may be simple variables, list variables, dictionary variables, or complex nested data structures. The documentation for each module includes a ``RETURN`` section describing the return values for that module. To see the values for a particular task, run your playbook with ``-v``. Registered variables are stored in memory. You cannot cache registered variables for use in future plays. Registered variables are only valid on the host for the rest of the current playbook run. Registered variables are host-level variables. When you register a variable in a task with a loop, the registered variable contains a value for each item in the loop. The data structure placed in the variable during the loop will contain a ``results`` attribute, that is a list of all responses from the module. For a more in-depth example of how this works, see the :ref:`playbooks_loops` section on using register with a loop. .. note:: If a task fails or is skipped, Ansible still registers a variable with a failure or skipped status, unless the task is skipped based on tags. See :ref:`tags` for information on adding and using tags. .. _accessing_complex_variable_data: Referencing nested variables ============================ Many registered variables (and :ref:`facts `) are nested YAML or JSON data structures. You cannot access values from these nested data structures with the simple ``{{ foo }}`` syntax. You must use either bracket notation or dot notation. For example, to reference an IP address from your facts using the bracket notation: .. code-block:: yaml+jinja {{ ansible_facts["eth0"]["ipv4"]["address"] }} To reference an IP address from your facts using the dot notation: .. code-block:: yaml+jinja {{ ansible_facts.eth0.ipv4.address }} .. _about_jinja2: .. _jinja2_filters: Transforming variables with Jinja2 filters ========================================== Jinja2 filters let you transform the value of a variable within a template expression. For example, the ``capitalize`` filter capitalizes any value passed to it; the ``to_yaml`` and ``to_json`` filters change the format of your variable values. Jinja2 includes many `built-in filters `_ and Ansible supplies many more filters. To find more examples of filters, see :ref:`playbooks_filters`. .. _setting_variables: Where to set variables ====================== You can define variables in a variety of places, such as in inventory, in playbooks, in reusable files, in roles, and at the command line. Ansible loads every possible variable it finds, then chooses the variable to apply based on :ref:`variable precedence rules `. .. _define_variables_in_inventory: Defining variables in inventory ------------------------------- You can define different variables for each individual host, or set shared variables for a group of hosts in your inventory. For example, if all machines in the ``[Boston]`` group use 'boston.ntp.example.com' as an NTP server, you can set a group variable. The :ref:`intro_inventory` page has details on setting :ref:`host variables ` and :ref:`group variables ` in inventory. .. _playbook_variables: Defining variables in a play ---------------------------- You can define variables directly in a playbook play: .. code-block:: yaml - hosts: webservers vars: http_port: 80 When you define variables in a play, they are only visible to tasks executed in that play. .. _included_variables: .. _variable_file_separation_details: Defining variables in included files and roles ---------------------------------------------- You can define variables in reusable variables files and/or in reusable roles. When you define variables in reusable variable files, the sensitive variables are separated from playbooks. This separation enables you to store your playbooks in a source control software and even share the playbooks, without the risk of exposing passwords or other sensitive and personal data. For information about creating reusable files and roles, see :ref:`playbooks_reuse`. This example shows how you can include variables defined in an external file: .. code-block:: yaml --- - hosts: all remote_user: root vars: favcolor: blue vars_files: - /vars/external_vars.yml tasks: - name: This is just a placeholder ansible.builtin.command: /bin/echo foo The contents of each variables file is a simple YAML dictionary. For example: .. code-block:: yaml --- # in the above example, this would be vars/external_vars.yml somevar: somevalue password: magic .. note:: You can keep per-host and per-group variables in similar files. To learn about organizing your variables, see :ref:`splitting_out_vars`. .. _passing_variables_on_the_command_line: Defining variables at runtime ----------------------------- You can define variables when you run your playbook by passing variables at the command line using the ``--extra-vars`` (or ``-e``) argument. You can also request user input with a ``vars_prompt`` (see :ref:`playbooks_prompts`). When you pass variables at the command line, use a single quoted string, that contains one or more variables, in one of the formats below. key=value format ^^^^^^^^^^^^^^^^ Values passed in using the ``key=value`` syntax are interpreted as strings. Use the JSON format if you need to pass non-string values such as Booleans, integers, floats, lists, and so on. .. code-block:: text ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo" JSON string format ^^^^^^^^^^^^^^^^^^ .. code-block:: shell ansible-playbook release.yml --extra-vars '{"version":"1.23.45","other_variable":"foo"}' ansible-playbook arcade.yml --extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}' When passing variables with ``--extra-vars``, you must escape quotes and other special characters appropriately for both your markup (for example, JSON), and for your shell: .. code-block:: shell ansible-playbook arcade.yml --extra-vars "{\"name\":\"Conan O\'Brien\"}" ansible-playbook arcade.yml --extra-vars '{"name":"Conan O'\\\''Brien"}' ansible-playbook script.yml --extra-vars "{\"dialog\":\"He said \\\"I just can\'t get enough of those single and double-quotes"\!"\\\"\"}" If you have a lot of special characters, use a JSON or YAML file containing the variable definitions. vars from a JSON or YAML file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: text ansible-playbook release.yml --extra-vars "@some_file.json" .. _ansible_variable_precedence: Variable precedence: Where should I put a variable? =================================================== You can set multiple variables with the same name in many different places. When you do this, Ansible loads every possible variable it finds, then chooses the variable to apply based on variable precedence. In other words, the different variables will override each other in a certain order. Teams and projects that agree on guidelines for defining variables (where to define certain types of variables) usually avoid variable precedence concerns. We suggest that you define each variable in one place: figure out where to define a variable, and keep it simple. For examples, see :ref:`variable_examples`. Some behavioral parameters that you can set in variables you can also set in Ansible configuration, as command-line options, and using playbook keywords. For example, you can define the user Ansible uses to connect to remote devices as a variable with ``ansible_user``, in a configuration file with ``DEFAULT_REMOTE_USER``, as a command-line option with ``-u``, and with the playbook keyword ``remote_user``. If you define the same parameter in a variable and by another method, the variable overrides the other setting. This approach allows host-specific settings to override more general settings. For examples and more details on the precedence of these various settings, see :ref:`general_precedence_rules`. Understanding variable precedence --------------------------------- Ansible does apply variable precedence, and you might have a use for it. Here is the order of precedence from least to greatest (the last listed variables override all other variables): #. command line values (for example, ``-u my_user``, these are not variables) #. role defaults (defined in role/defaults/main.yml) [1]_ #. inventory file or script group vars [2]_ #. inventory group_vars/all [3]_ #. playbook group_vars/all [3]_ #. inventory group_vars/* [3]_ #. playbook group_vars/* [3]_ #. inventory file or script host vars [2]_ #. inventory host_vars/* [3]_ #. playbook host_vars/* [3]_ #. host facts / cached set_facts [4]_ #. play vars #. play vars_prompt #. play vars_files #. role vars (defined in role/vars/main.yml) #. block vars (only for tasks in block) #. task vars (only for the task) #. include_vars #. set_facts / registered vars #. role (and include_role) params #. include params #. extra vars (for example, ``-e "user=my_user"``)(always win precedence) In general, Ansible gives precedence to variables that were defined more recently, more actively, and with more explicit scope. Variables in the defaults folder inside a role are easily overridden. Anything in the vars directory of the role overrides previous versions of that variable in the namespace. Host and/or inventory variables override role defaults, but explicit includes such as the vars directory or an ``include_vars`` task override inventory variables. Ansible merges different variables set in inventory so that more specific settings override more generic settings. For example, ``ansible_ssh_user`` specified as a group_var is overridden by ``ansible_user`` specified as a host_var. For details about the precedence of variables set in inventory, see :ref:`how_we_merge`. .. rubric:: Footnotes .. [1] Tasks in each role see their own role's defaults. Tasks defined outside of a role see the last role's defaults. .. [2] Variables defined in inventory file or provided by dynamic inventory. .. [3] Includes vars added by 'vars plugins' as well as host_vars and group_vars which are added by the default vars plugin shipped with Ansible. .. [4] When created with set_facts's cacheable option, variables have the high precedence in the play, but are the same as a host facts precedence when they come from the cache. .. note:: Within any section, redefining a var overrides the previous instance. If multiple groups have the same variable, the last one loaded wins. If you define a variable twice in a play's ``vars:`` section, the second one wins. .. note:: The previous describes the default config ``hash_behaviour=replace``, switch to ``merge`` to only partially overwrite. .. _variable_scopes: Scoping variables ----------------- You can decide where to set a variable based on the scope you want that value to have. Ansible has three main scopes: * Global: this is set by config, environment variables and the command line * Play: each play and contained structures, vars entries (vars; vars_files; vars_prompt), role defaults and vars. * Host: variables directly associated to a host, like inventory, include_vars, facts or registered task outputs Inside a template, you automatically have access to all variables that are in scope for a host, plus any registered variables, facts, and magic variables. .. _variable_examples: Tips on where to set variables ------------------------------ You should choose where to define a variable based on the kind of control you might want over values. Set variables in inventory that deal with geography or behavior. Since groups are frequently the entity that maps roles onto hosts, you can often set variables on the group instead of defining them on a role. Remember: child groups override parent groups, and host variables override group variables. See :ref:`define_variables_in_inventory` for details on setting host and group variables. Set common defaults in a ``group_vars/all`` file. See :ref:`splitting_out_vars` for details on how to organize host and group variables in your inventory. Group variables are generally placed alongside your inventory file, but they can also be returned by dynamic inventory (see :ref:`intro_dynamic_inventory`) or defined in AWX or on :ref:`ansible_platform` from the UI or API: .. code-block:: yaml --- # file: /etc/ansible/group_vars/all # this is the site wide default ntp_server: default-time.example.com Set location-specific variables in ``group_vars/my_location`` files. All groups are children of the ``all`` group, so variables set here override those set in ``group_vars/all``: .. code-block:: yaml --- # file: /etc/ansible/group_vars/boston ntp_server: boston-time.example.com If one host used a different NTP server, you could set that in a host_vars file, which would override the group variable: .. code-block:: yaml --- # file: /etc/ansible/host_vars/xyz.boston.example.com ntp_server: override.example.com Set defaults in roles to avoid undefined-variable errors. If you share your roles, other users can rely on the reasonable defaults you added in the ``roles/x/defaults/main.yml`` file, or they can easily override those values in inventory or at the command line. See :ref:`playbooks_reuse_roles` for more info. For example: .. code-block:: yaml --- # file: roles/x/defaults/main.yml # if no other value is supplied in inventory or as a parameter, this value will be used http_port: 80 Set variables in roles to ensure a value is used in that role, and is not overridden by inventory variables. If you are not sharing your role with others, you can define app-specific behaviors like ports this way, in ``roles/x/vars/main.yml``. If you are sharing roles with others, putting variables here makes them harder to override, although they still can by passing a parameter to the role or setting a variable with ``-e``: .. code-block:: yaml --- # file: roles/x/vars/main.yml # this will absolutely be used in this role http_port: 80 Pass variables as parameters when you call roles for maximum clarity, flexibility, and visibility. This approach overrides any defaults that exist for a role. For example: .. code-block:: yaml roles: - role: apache vars: http_port: 8080 When you read this playbook it is clear that you have chosen to set a variable or override a default. You can also pass multiple values, which allows you to run the same role multiple times. See :ref:`run_role_twice` for more details. For example: .. code-block:: yaml roles: - role: app_user vars: myname: Ian - role: app_user vars: myname: Terry - role: app_user vars: myname: Graham - role: app_user vars: myname: John Variables set in one role are available to later roles. You can set variables in a ``roles/common_settings/vars/main.yml`` file and use them in other roles and elsewhere in your playbook: .. code-block:: yaml roles: - role: common_settings - role: something vars: foo: 12 - role: something_else .. note:: There are some protections in place to avoid the need to namespace variables. In this example, variables defined in 'common_settings' are available to 'something' and 'something_else' tasks, but tasks in 'something' have foo set at 12, even if 'common_settings' sets foo to 20. Instead of worrying about variable precedence, we encourage you to think about how easily or how often you want to override a variable when deciding where to set it. If you are not sure what other variables are defined, and you need a particular value, use ``--extra-vars`` (``-e``) to override all other variables. Using advanced variable syntax ============================== For information about advanced YAML syntax used to declare variables and have more control over the data placed in YAML files used by Ansible, see :ref:`playbooks_advanced_syntax`. .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_conditionals` Conditional statements in playbooks :ref:`playbooks_filters` Jinja2 filters and their uses :ref:`playbooks_loops` Looping in playbooks :ref:`playbooks_reuse_roles` Playbook organization by roles :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`special_variables` List of special variables `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.532556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_vars_facts.rst0000644000000000000000000006672000000000000026406 0ustar00rootroot00000000000000.. _vars_and_facts: ************************************************ Discovering variables: facts and magic variables ************************************************ With Ansible you can retrieve or discover certain variables containing information about your remote systems or about Ansible itself. Variables related to remote systems are called facts. With facts, you can use the behavior or state of one system as configuration on other systems. For example, you can use the IP address of one system as a configuration value on another system. Variables related to Ansible are called magic variables. .. contents:: :local: Ansible facts ============= Ansible facts are data related to your remote systems, including operating systems, IP addresses, attached filesystems, and more. You can access this data in the ``ansible_facts`` variable. By default, you can also access some Ansible facts as top-level variables with the ``ansible_`` prefix. You can disable this behavior using the :ref:`INJECT_FACTS_AS_VARS` setting. To see all available facts, add this task to a play: .. code-block:: yaml - name: Print all available facts ansible.builtin.debug: var: ansible_facts To see the 'raw' information as gathered, run this command at the command line: .. code-block:: shell ansible -m ansible.builtin.setup Facts include a large amount of variable data, which may look like this: .. code-block:: json { "ansible_all_ipv4_addresses": [ "REDACTED IP ADDRESS" ], "ansible_all_ipv6_addresses": [ "REDACTED IPV6 ADDRESS" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "11/28/2013", "ansible_bios_version": "4.1.5", "ansible_cmdline": { "BOOT_IMAGE": "/boot/vmlinuz-3.10.0-862.14.4.el7.x86_64", "console": "ttyS0,115200", "no_timer_check": true, "nofb": true, "nomodeset": true, "ro": true, "root": "LABEL=cloudimg-rootfs", "vga": "normal" }, "ansible_date_time": { "date": "2018-10-25", "day": "25", "epoch": "1540469324", "hour": "12", "iso8601": "2018-10-25T12:08:44Z", "iso8601_basic": "20181025T120844109754", "iso8601_basic_short": "20181025T120844", "iso8601_micro": "2018-10-25T12:08:44.109968Z", "minute": "08", "month": "10", "second": "44", "time": "12:08:44", "tz": "UTC", "tz_offset": "+0000", "weekday": "Thursday", "weekday_number": "4", "weeknumber": "43", "year": "2018" }, "ansible_default_ipv4": { "address": "REDACTED", "alias": "eth0", "broadcast": "REDACTED", "gateway": "REDACTED", "interface": "eth0", "macaddress": "REDACTED", "mtu": 1500, "netmask": "255.255.255.0", "network": "REDACTED", "type": "ether" }, "ansible_default_ipv6": {}, "ansible_device_links": { "ids": {}, "labels": { "xvda1": [ "cloudimg-rootfs" ], "xvdd": [ "config-2" ] }, "masters": {}, "uuids": { "xvda1": [ "cac81d61-d0f8-4b47-84aa-b48798239164" ], "xvdd": [ "2018-10-25-12-05-57-00" ] } }, "ansible_devices": { "xvda": { "holders": [], "host": "", "links": { "ids": [], "labels": [], "masters": [], "uuids": [] }, "model": null, "partitions": { "xvda1": { "holders": [], "links": { "ids": [], "labels": [ "cloudimg-rootfs" ], "masters": [], "uuids": [ "cac81d61-d0f8-4b47-84aa-b48798239164" ] }, "sectors": "83883999", "sectorsize": 512, "size": "40.00 GB", "start": "2048", "uuid": "cac81d61-d0f8-4b47-84aa-b48798239164" } }, "removable": "0", "rotational": "0", "sas_address": null, "sas_device_handle": null, "scheduler_mode": "deadline", "sectors": "83886080", "sectorsize": "512", "size": "40.00 GB", "support_discard": "0", "vendor": null, "virtual": 1 }, "xvdd": { "holders": [], "host": "", "links": { "ids": [], "labels": [ "config-2" ], "masters": [], "uuids": [ "2018-10-25-12-05-57-00" ] }, "model": null, "partitions": {}, "removable": "0", "rotational": "0", "sas_address": null, "sas_device_handle": null, "scheduler_mode": "deadline", "sectors": "131072", "sectorsize": "512", "size": "64.00 MB", "support_discard": "0", "vendor": null, "virtual": 1 }, "xvde": { "holders": [], "host": "", "links": { "ids": [], "labels": [], "masters": [], "uuids": [] }, "model": null, "partitions": { "xvde1": { "holders": [], "links": { "ids": [], "labels": [], "masters": [], "uuids": [] }, "sectors": "167770112", "sectorsize": 512, "size": "80.00 GB", "start": "2048", "uuid": null } }, "removable": "0", "rotational": "0", "sas_address": null, "sas_device_handle": null, "scheduler_mode": "deadline", "sectors": "167772160", "sectorsize": "512", "size": "80.00 GB", "support_discard": "0", "vendor": null, "virtual": 1 } }, "ansible_distribution": "CentOS", "ansible_distribution_file_parsed": true, "ansible_distribution_file_path": "/etc/redhat-release", "ansible_distribution_file_variety": "RedHat", "ansible_distribution_major_version": "7", "ansible_distribution_release": "Core", "ansible_distribution_version": "7.5.1804", "ansible_dns": { "nameservers": [ "127.0.0.1" ] }, "ansible_domain": "", "ansible_effective_group_id": 1000, "ansible_effective_user_id": 1000, "ansible_env": { "HOME": "/home/zuul", "LANG": "en_US.UTF-8", "LESSOPEN": "||/usr/bin/lesspipe.sh %s", "LOGNAME": "zuul", "MAIL": "/var/mail/zuul", "PATH": "/usr/local/bin:/usr/bin", "PWD": "/home/zuul", "SELINUX_LEVEL_REQUESTED": "", "SELINUX_ROLE_REQUESTED": "", "SELINUX_USE_CURRENT_RANGE": "", "SHELL": "/bin/bash", "SHLVL": "2", "SSH_CLIENT": "REDACTED 55672 22", "SSH_CONNECTION": "REDACTED 55672 REDACTED 22", "USER": "zuul", "XDG_RUNTIME_DIR": "/run/user/1000", "XDG_SESSION_ID": "1", "_": "/usr/bin/python2" }, "ansible_eth0": { "active": true, "device": "eth0", "ipv4": { "address": "REDACTED", "broadcast": "REDACTED", "netmask": "255.255.255.0", "network": "REDACTED" }, "ipv6": [ { "address": "REDACTED", "prefix": "64", "scope": "link" } ], "macaddress": "REDACTED", "module": "xen_netfront", "mtu": 1500, "pciid": "vif-0", "promisc": false, "type": "ether" }, "ansible_eth1": { "active": true, "device": "eth1", "ipv4": { "address": "REDACTED", "broadcast": "REDACTED", "netmask": "255.255.224.0", "network": "REDACTED" }, "ipv6": [ { "address": "REDACTED", "prefix": "64", "scope": "link" } ], "macaddress": "REDACTED", "module": "xen_netfront", "mtu": 1500, "pciid": "vif-1", "promisc": false, "type": "ether" }, "ansible_fips": false, "ansible_form_factor": "Other", "ansible_fqdn": "centos-7-rax-dfw-0003427354", "ansible_hostname": "centos-7-rax-dfw-0003427354", "ansible_interfaces": [ "lo", "eth1", "eth0" ], "ansible_is_chroot": false, "ansible_kernel": "3.10.0-862.14.4.el7.x86_64", "ansible_lo": { "active": true, "device": "lo", "ipv4": { "address": "127.0.0.1", "broadcast": "host", "netmask": "255.0.0.0", "network": "127.0.0.0" }, "ipv6": [ { "address": "::1", "prefix": "128", "scope": "host" } ], "mtu": 65536, "promisc": false, "type": "loopback" }, "ansible_local": {}, "ansible_lsb": { "codename": "Core", "description": "CentOS Linux release 7.5.1804 (Core)", "id": "CentOS", "major_release": "7", "release": "7.5.1804" }, "ansible_machine": "x86_64", "ansible_machine_id": "2db133253c984c82aef2fafcce6f2bed", "ansible_memfree_mb": 7709, "ansible_memory_mb": { "nocache": { "free": 7804, "used": 173 }, "real": { "free": 7709, "total": 7977, "used": 268 }, "swap": { "cached": 0, "free": 0, "total": 0, "used": 0 } }, "ansible_memtotal_mb": 7977, "ansible_mounts": [ { "block_available": 7220998, "block_size": 4096, "block_total": 9817227, "block_used": 2596229, "device": "/dev/xvda1", "fstype": "ext4", "inode_available": 10052341, "inode_total": 10419200, "inode_used": 366859, "mount": "/", "options": "rw,seclabel,relatime,data=ordered", "size_available": 29577207808, "size_total": 40211361792, "uuid": "cac81d61-d0f8-4b47-84aa-b48798239164" }, { "block_available": 0, "block_size": 2048, "block_total": 252, "block_used": 252, "device": "/dev/xvdd", "fstype": "iso9660", "inode_available": 0, "inode_total": 0, "inode_used": 0, "mount": "/mnt/config", "options": "ro,relatime,mode=0700", "size_available": 0, "size_total": 516096, "uuid": "2018-10-25-12-05-57-00" } ], "ansible_nodename": "centos-7-rax-dfw-0003427354", "ansible_os_family": "RedHat", "ansible_pkg_mgr": "yum", "ansible_processor": [ "0", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "1", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "2", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "3", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "4", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "5", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "6", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz", "7", "GenuineIntel", "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz" ], "ansible_processor_cores": 8, "ansible_processor_count": 8, "ansible_processor_nproc": 8, "ansible_processor_threads_per_core": 1, "ansible_processor_vcpus": 8, "ansible_product_name": "HVM domU", "ansible_product_serial": "REDACTED", "ansible_product_uuid": "REDACTED", "ansible_product_version": "4.1.5", "ansible_python": { "executable": "/usr/bin/python2", "has_sslcontext": true, "type": "CPython", "version": { "major": 2, "micro": 5, "minor": 7, "releaselevel": "final", "serial": 0 }, "version_info": [ 2, 7, 5, "final", 0 ] }, "ansible_python_version": "2.7.5", "ansible_real_group_id": 1000, "ansible_real_user_id": 1000, "ansible_selinux": { "config_mode": "enforcing", "mode": "enforcing", "policyvers": 31, "status": "enabled", "type": "targeted" }, "ansible_selinux_python_present": true, "ansible_service_mgr": "systemd", "ansible_ssh_host_key_ecdsa_public": "REDACTED KEY VALUE", "ansible_ssh_host_key_ed25519_public": "REDACTED KEY VALUE", "ansible_ssh_host_key_rsa_public": "REDACTED KEY VALUE", "ansible_swapfree_mb": 0, "ansible_swaptotal_mb": 0, "ansible_system": "Linux", "ansible_system_capabilities": [ "" ], "ansible_system_capabilities_enforced": "True", "ansible_system_vendor": "Xen", "ansible_uptime_seconds": 151, "ansible_user_dir": "/home/zuul", "ansible_user_gecos": "", "ansible_user_gid": 1000, "ansible_user_id": "zuul", "ansible_user_shell": "/bin/bash", "ansible_user_uid": 1000, "ansible_userspace_architecture": "x86_64", "ansible_userspace_bits": "64", "ansible_virtualization_role": "guest", "ansible_virtualization_type": "xen", "gather_subset": [ "all" ], "module_setup": true } You can reference the model of the first disk in the facts shown above in a template or playbook as: .. code-block:: jinja {{ ansible_facts['devices']['xvda']['model'] }} To reference the system hostname: .. code-block:: jinja {{ ansible_facts['nodename'] }} You can use facts in conditionals (see :ref:`playbooks_conditionals`) and also in templates. You can also use facts to create dynamic groups of hosts that match particular criteria, see the :ref:`group_by module ` documentation for details. .. note:: Because ``ansible_date_time`` is created and cached when Ansible gathers facts before each playbook run, it can get stale with long-running playbooks. If your playbook takes a long time to run, use the ``pipe`` filter (for example, ``lookup('pipe', 'date +%Y-%m-%d.%H:%M:%S')``) or :ref:`now() ` with a Jinja 2 template instead of ``ansible_date_time``. .. _fact_requirements: Package requirements for fact gathering --------------------------------------- On some distros, you may see missing fact values or facts set to default values because the packages that support gathering those facts are not installed by default. You can install the necessary packages on your remote hosts using the OS package manager. Known dependencies include: * Linux Network fact gathering - Depends on the ``ip`` binary, commonly included in the ``iproute2`` package. .. _fact_caching: Caching facts ------------- Like registered variables, facts are stored in memory by default. However, unlike registered variables, facts can be gathered independently and cached for repeated use. With cached facts, you can refer to facts from one system when configuring a second system, even if Ansible executes the current play on the second system first. For example: .. code-block:: jinja {{ hostvars['asdf.example.com']['ansible_facts']['os_family'] }} Caching is controlled by the cache plugins. By default, Ansible uses the memory cache plugin, which stores facts in memory for the duration of the current playbook run. To retain Ansible facts for repeated use, select a different cache plugin. See :ref:`cache_plugins` for details. Fact caching can improve performance. If you manage thousands of hosts, you can configure fact caching to run nightly, then manage configuration on a smaller set of servers periodically throughout the day. With cached facts, you have access to variables and information about all hosts even when you are only managing a small number of servers. .. _disabling_facts: Disabling facts --------------- By default, Ansible gathers facts at the beginning of each play. If you do not need to gather facts (for example, if you know everything about your systems centrally), you can turn off fact gathering at the play level to improve scalability. Disabling facts may particularly improve performance in push mode with very large numbers of systems, or if you are using Ansible on experimental platforms. To disable fact gathering: .. code-block:: yaml - hosts: whatever gather_facts: no Adding custom facts ------------------- The setup module in Ansible automatically discovers a standard set of facts about each host. If you want to add custom values to your facts, you can write a custom facts module, set temporary facts with a ``ansible.builtin.set_fact`` task, or provide permanent custom facts using the facts.d directory. .. _local_facts: facts.d or local facts ^^^^^^^^^^^^^^^^^^^^^^ .. versionadded:: 1.3 You can add static custom facts by adding static files to facts.d, or add dynamic facts by adding executable scripts to facts.d. For example, you can add a list of all users on a host to your facts by creating and running a script in facts.d. To use facts.d, create an ``/etc/ansible/facts.d`` directory on the remote host or hosts. If you prefer a different directory, create it and specify it using the ``fact_path`` play keyword. Add files to the directory to supply your custom facts. All file names must end with ``.fact``. The files can be JSON, INI, or executable files returning JSON. To add static facts, simply add a file with the ``.fact`` extension. For example, create ``/etc/ansible/facts.d/preferences.fact`` with this content: .. code-block:: ini [general] asdf=1 bar=2 .. note:: Make sure the file is not executable as this will break the ``ansible.builtin.setup`` module. The next time fact gathering runs, your facts will include a hash variable fact named ``general`` with ``asdf`` and ``bar`` as members. To validate this, run the following: .. code-block:: shell ansible -m ansible.builtin.setup -a "filter=ansible_local" And you will see your custom fact added: .. code-block:: json { "ansible_local": { "preferences": { "general": { "asdf" : "1", "bar" : "2" } } } } The ansible_local namespace separates custom facts created by facts.d from system facts or variables defined elsewhere in the playbook, so variables will not override each other. You can access this custom fact in a template or playbook as: .. code-block:: jinja {{ ansible_local['preferences']['general']['asdf'] }} .. note:: The key part in the key=value pairs will be converted into lowercase inside the ansible_local variable. Using the example above, if the ini file contained ``XYZ=3`` in the ``[general]`` section, then you should expect to access it as: ``{{ ansible_local['preferences']['general']['xyz'] }}`` and not ``{{ ansible_local['preferences']['general']['XYZ'] }}``. This is because Ansible uses Python's `ConfigParser`_ which passes all option names through the `optionxform`_ method and this method's default implementation converts option names to lower case. .. _ConfigParser: https://docs.python.org/3/library/configparser.html .. _optionxform: https://docs.python.org/3/library/configparser.html#ConfigParser.RawConfigParser.optionxform You can also use facts.d to execute a script on the remote host, generating dynamic custom facts to the ansible_local namespace. For example, you can generate a list of all users that exist on a remote host as a fact about that host. To generate dynamic custom facts using facts.d: #. Write and test a script to generate the JSON data you want. #. Save the script in your facts.d directory. #. Make sure your script has the ``.fact`` file extension. #. Make sure your script is executable by the Ansible connection user. #. Gather facts to execute the script and add the JSON output to ansible_local. By default, fact gathering runs once at the beginning of each play. If you create a custom fact using facts.d in a playbook, it will be available in the next play that gathers facts. If you want to use it in the same play where you created it, you must explicitly re-run the setup module. For example: .. code-block:: yaml - hosts: webservers tasks: - name: Create directory for ansible custom facts ansible.builtin.file: state: directory recurse: yes path: /etc/ansible/facts.d - name: Install custom ipmi fact ansible.builtin.copy: src: ipmi.fact dest: /etc/ansible/facts.d - name: Re-read facts after adding custom fact ansible.builtin.setup: filter: ansible_local If you use this pattern frequently, a custom facts module would be more efficient than facts.d. .. _magic_variables_and_hostvars: Information about Ansible: magic variables ========================================== You can access information about Ansible operations, including the python version being used, the hosts and groups in inventory, and the directories for playbooks and roles, using "magic" variables. Like connection variables, magic variables are :ref:`special_variables`. Magic variable names are reserved - do not set variables with these names. The variable ``environment`` is also reserved. The most commonly used magic variables are ``hostvars``, ``groups``, ``group_names``, and ``inventory_hostname``. With ``hostvars``, you can access variables defined for any host in the play, at any point in a playbook. You can access Ansible facts using the ``hostvars`` variable too, but only after you have gathered (or cached) facts. If you want to configure your database server using the value of a 'fact' from another node, or the value of an inventory variable assigned to another node, you can use ``hostvars`` in a template or on an action line: .. code-block:: jinja {{ hostvars['test.example.com']['ansible_facts']['distribution'] }} With ``groups``, a list of all the groups (and hosts) in the inventory, you can enumerate all hosts within a group. For example: .. code-block:: jinja {% for host in groups['app_servers'] %} # something that applies to all app servers. {% endfor %} You can use ``groups`` and ``hostvars`` together to find all the IP addresses in a group. .. code-block:: jinja {% for host in groups['app_servers'] %} {{ hostvars[host]['ansible_facts']['eth0']['ipv4']['address'] }} {% endfor %} You can use this approach to point a frontend proxy server to all the hosts in your app servers group, to set up the correct firewall rules between servers, and so on. You must either cache facts or gather facts for those hosts before the task that fills out the template. With ``group_names``, a list (array) of all the groups the current host is in, you can create templated files that vary based on the group membership (or role) of the host: .. code-block:: jinja {% if 'webserver' in group_names %} # some part of a configuration file that only applies to webservers {% endif %} You can use the magic variable ``inventory_hostname``, the name of the host as configured in your inventory, as an alternative to ``ansible_hostname`` when fact-gathering is disabled. If you have a long FQDN, you can use ``inventory_hostname_short``, which contains the part up to the first period, without the rest of the domain. Other useful magic variables refer to the current play or playbook. These vars may be useful for filling out templates with multiple hostnames or for injecting the list into the rules for a load balancer. ``ansible_play_hosts`` is the list of all hosts still active in the current play. ``ansible_play_batch`` is a list of hostnames that are in scope for the current 'batch' of the play. The batch size is defined by ``serial``, when not set it is equivalent to the whole play (making it the same as ``ansible_play_hosts``). ``ansible_playbook_python`` is the path to the python executable used to invoke the Ansible command line tool. ``inventory_dir`` is the pathname of the directory holding Ansible's inventory host file. ``inventory_file`` is the pathname and the filename pointing to the Ansible's inventory host file. ``playbook_dir`` contains the playbook base directory. ``role_path`` contains the current role's pathname and only works inside a role. ``ansible_check_mode`` is a boolean, set to ``True`` if you run Ansible with ``--check``. .. _ansible_version: Ansible version --------------- .. versionadded:: 1.8 To adapt playbook behavior to different versions of Ansible, you can use the variable ``ansible_version``, which has the following structure: .. code-block:: json { "ansible_version": { "full": "2.10.1", "major": 2, "minor": 10, "revision": 1, "string": "2.10.1" } } ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/playbooks_vault.rst0000644000000000000000000000033300000000000025372 0ustar00rootroot00000000000000:orphan: Using vault in playbooks ======================== The documentation regarding Ansible Vault has moved. The new location is here: :ref:`vault`. Please update any links you may have made directly to this page. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/plugin_filtering_config.rst0000644000000000000000000000212100000000000027037 0ustar00rootroot00000000000000.. _plugin_filtering_config: Rejecting modules ================= If you want to avoid using certain modules, you can add them to a reject list to prevent Ansible from loading them. To reject plugins, create a yaml configuration file. The default location for this file is :file:`/etc/ansible/plugin_filters.yml`. You can select a different path for the reject list using the :ref:`PLUGIN_FILTERS_CFG` setting in the ``defaults`` section of your ansible.cfg. Here is an example reject list: .. code-block:: YAML --- filter_version: '1.0' module_rejectlist: # Deprecated - docker # We only allow pip, not easy_install - easy_install The file contains two fields: * A file version so that you can update the format while keeping backwards compatibility in the future. The present version should be the string, ``"1.0"`` * A list of modules to reject. Ansible will not load any module in this list when it searches for a module to invoke for a task. .. note:: The ``stat`` module is required for Ansible to run. Do not add this module to your reject list. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/quickstart.rst0000644000000000000000000000165700000000000024360 0ustar00rootroot00000000000000.. _quickstart_guide: Ansible Quickstart Guide ======================== We've recorded a short video that introduces Ansible. The `quickstart video `_ is about 13 minutes long and gives you a high level introduction to Ansible -- what it does and how to use it. We'll also tell you about other products in the Ansible ecosystem. Enjoy, and be sure to visit the rest of the documentation to learn more. .. seealso:: `A system administrators guide to getting started with Ansible `_ A step by step introduction to Ansible `Ansible Automation for SysAdmins `_ A downloadable guide for getting started with Ansible :ref:`network_getting_started` A guide for network engineers using Ansible for the first time ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/sample_setup.rst0000644000000000000000000003005000000000000024654 0ustar00rootroot00000000000000.. _sample_setup: ******************** Sample Ansible setup ******************** You have learned about playbooks, inventory, roles, and variables. This section pulls all those elements together, outlining a sample setup for automating a web service. You can find more example playbooks illustrating these patterns in our `ansible-examples repository `_. (NOTE: These may not use all of the features in the latest release, but are still an excellent reference!). The sample setup organizes playbooks, roles, inventory, and variables files by function, with tags at the play and task level for greater granularity and control. This is a powerful and flexible approach, but there are other ways to organize Ansible content. Your usage of Ansible should fit your needs, not ours, so feel free to modify this approach and organize your content as you see fit. .. contents:: :local: Sample directory layout ----------------------- This layout organizes most tasks in roles, with a single inventory file for each environment and a few playbooks in the top-level directory: .. code-block:: console production # inventory file for production servers staging # inventory file for staging environment group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ hostname1.yml # here we assign variables to particular systems hostname2.yml library/ # if any custom modules, put them here (optional) module_utils/ # if any custom module_utils to support modules, put them here (optional) filter_plugins/ # if any custom filter plugins, put them here (optional) site.yml # main playbook webservers.yml # playbook for webserver tier dbservers.yml # playbook for dbserver tier tasks/ # task files included from playbooks webservers-extra.yml # <-- avoids confusing playbook with task files roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <-- files for use with the template resource ntp.conf.j2 # <------- templates end in .j2 files/ # bar.txt # <-- files for use with the copy resource foo.sh # <-- script files for use with the script resource vars/ # main.yml # <-- variables associated with this role defaults/ # main.yml # <-- default lower priority variables for this role meta/ # main.yml # <-- role dependencies library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case webtier/ # same kind of structure as "common" was above, done for the webtier role monitoring/ # "" fooapp/ # "" .. note:: By default, Ansible assumes your playbooks are stored in one directory with roles stored in a sub-directory called ``roles/``. As you use Ansible to automate more tasks, you may want to move your playbooks into a sub-directory called ``playbooks/``. If you do this, you must configure the path to your ``roles/`` directory using the ``roles_path`` setting in ansible.cfg. Alternative directory layout ---------------------------- Alternatively you can put each inventory file with its ``group_vars``/``host_vars`` in a separate directory. This is particularly useful if your ``group_vars``/``host_vars`` don't have that much in common in different environments. The layout could look something like this: .. code-block:: console inventories/ production/ hosts # inventory file for production servers group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ hostname1.yml # here we assign variables to particular systems hostname2.yml staging/ hosts # inventory file for staging environment group_vars/ group1.yml # here we assign variables to particular groups group2.yml host_vars/ stagehost1.yml # here we assign variables to particular systems stagehost2.yml library/ module_utils/ filter_plugins/ site.yml webservers.yml dbservers.yml roles/ common/ webtier/ monitoring/ fooapp/ This layout gives you more flexibility for larger environments, as well as a total separation of inventory variables between different environments. However, this approach is harder to maintain, because there are more files. For more information on organizing group and host variables, see :ref:`splitting_out_vars`. .. _groups_and_hosts: Sample group and host variables ------------------------------- These sample group and host variables files record the variable values that apply to each machine or group of machines. For instance, the data center in Atlanta has its own NTP servers, so when setting up ntp.conf, we should use them: .. code-block:: yaml --- # file: group_vars/atlanta ntp: ntp-atlanta.example.com backup: backup-atlanta.example.com Similarly, the webservers have some configuration that does not apply to the database servers: .. code-block:: yaml --- # file: group_vars/webservers apacheMaxRequestsPerChild: 3000 apacheMaxClients: 900 Default values, or values that are universally true, belong in a file called group_vars/all: .. code-block:: yaml --- # file: group_vars/all ntp: ntp-boston.example.com backup: backup-boston.example.com If necessary, you can define specific hardware variance in systems in a host_vars file: .. code-block:: yaml --- # file: host_vars/db-bos-1.example.com foo_agent_port: 86 bar_agent_port: 99 Again, if you are using :ref:`dynamic inventory `, Ansible creates many dynamic groups automatically. So a tag like "class:webserver" would load in variables from the file "group_vars/ec2_tag_class_webserver" automatically. .. _split_by_role: Sample playbooks organized by function -------------------------------------- With this setup, a single playbook can define all the infrastructure. The site.yml playbook imports two other playbooks, one for the webservers and one for the database servers: .. code-block:: yaml --- # file: site.yml - import_playbook: webservers.yml - import_playbook: dbservers.yml The webservers.yml file, also at the top level, maps the configuration of the webservers group to the roles related to the webservers group: .. code-block:: yaml --- # file: webservers.yml - hosts: webservers roles: - common - webtier With this setup, you can configure your whole infrastructure by "running" site.yml, or run a subset by running webservers.yml. This is analogous to the Ansible "--limit" parameter but a little more explicit: .. code-block:: shell ansible-playbook site.yml --limit webservers ansible-playbook webservers.yml .. _role_organization: Sample task and handler files in a function-based role ------------------------------------------------------ Ansible loads any file called ``main.yml`` in a role sub-directory. This sample ``tasks/main.yml`` file is simple - it sets up NTP, but it could do more if we wanted: .. code-block:: yaml --- # file: roles/common/tasks/main.yml - name: be sure ntp is installed yum: name: ntp state: present tags: ntp - name: be sure ntp is configured template: src: ntp.conf.j2 dest: /etc/ntp.conf notify: - restart ntpd tags: ntp - name: be sure ntpd is running and enabled service: name: ntpd state: started enabled: yes tags: ntp Here is an example handlers file. As a review, handlers are only fired when certain tasks report changes, and are run at the end of each play: .. code-block:: yaml --- # file: roles/common/handlers/main.yml - name: restart ntpd service: name: ntpd state: restarted See :ref:`playbooks_reuse_roles` for more information. .. _organization_examples: What the sample setup enables ----------------------------- The basic organizational structure described above enables a lot of different automation options. To reconfigure your entire infrastructure: .. code-block:: shell ansible-playbook -i production site.yml To reconfigure NTP on everything: .. code-block:: shell ansible-playbook -i production site.yml --tags ntp To reconfigure only the webservers: .. code-block:: shell ansible-playbook -i production webservers.yml To reconfigure only the webservers in Boston: .. code-block:: shell ansible-playbook -i production webservers.yml --limit boston To reconfigure only the first 10 webservers in Boston, and then the next 10: .. code-block:: shell ansible-playbook -i production webservers.yml --limit boston[0:9] ansible-playbook -i production webservers.yml --limit boston[10:19] The sample setup also supports basic ad hoc commands: .. code-block:: shell ansible boston -i production -m ping ansible boston -i production -m command -a '/sbin/reboot' To discover what tasks would run or what hostnames would be affected by a particular Ansible command: .. code-block:: shell # confirm what task names would be run if I ran this command and said "just ntp tasks" ansible-playbook -i production webservers.yml --tags ntp --list-tasks # confirm what hostnames might be communicated with if I said "limit to boston" ansible-playbook -i production webservers.yml --limit boston --list-hosts .. _dep_vs_config: Organizing for deployment or configuration ------------------------------------------ The sample setup models a typical configuration topology. When doing multi-tier deployments, there are going to be some additional playbooks that hop between tiers to roll out an application. In this case, 'site.yml' may be augmented by playbooks like 'deploy_exampledotcom.yml' but the general concepts still apply. Ansible allows you to deploy and configure using the same tool, so you would likely reuse groups and keep the OS configuration in separate playbooks or roles from the app deployment. Consider "playbooks" as a sports metaphor -- you can have one set of plays to use against all your infrastructure and situational plays that you use at different times and for different purposes. .. _ship_modules_with_playbooks: Using local Ansible modules --------------------------- If a playbook has a :file:`./library` directory relative to its YAML file, this directory can be used to add Ansible modules that will automatically be in the Ansible module path. This is a great way to keep modules that go with a playbook together. This is shown in the directory structure example at the start of this section. .. seealso:: :ref:`yaml_syntax` Learn about YAML syntax :ref:`working_with_playbooks` Review the basic playbook features :ref:`list_of_collections` Browse existing collections, modules, and plugins :ref:`developing_modules` Learn how to extend Ansible by writing your own modules :ref:`intro_patterns` Learn about how to select hosts `GitHub examples directory `_ Complete playbook files from the github project source `Mailing List `_ Questions? Help? Ideas? Stop by the list on Google Groups ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/docsite/rst/user_guide/shared_snippets/0000755000000000000000000000000000000000000024616 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/shared_snippets/SSH_password_prompt.txt0000644000000000000000000000041400000000000031336 0ustar00rootroot00000000000000.. note:: Ansible does not expose a channel to allow communication between the user and the ssh process to accept a password manually to decrypt an ssh key when using the ssh connection plugin (which is the default). The use of ``ssh-agent`` is highly recommended. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/shared_snippets/with2loop.txt0000644000000000000000000001217400000000000027313 0ustar00rootroot00000000000000In most cases, loops work best with the ``loop`` keyword instead of ``with_X`` style loops. The ``loop`` syntax is usually best expressed using filters instead of more complex use of ``query`` or ``lookup``. These examples show how to convert many common ``with_`` style loops to ``loop`` and filters. with_list --------- ``with_list`` is directly replaced by ``loop``. .. code-block:: yaml+jinja - name: with_list ansible.builtin.debug: msg: "{{ item }}" with_list: - one - two - name: with_list -> loop ansible.builtin.debug: msg: "{{ item }}" loop: - one - two with_items ---------- ``with_items`` is replaced by ``loop`` and the ``flatten`` filter. .. code-block:: yaml+jinja - name: with_items ansible.builtin.debug: msg: "{{ item }}" with_items: "{{ items }}" - name: with_items -> loop ansible.builtin.debug: msg: "{{ item }}" loop: "{{ items|flatten(levels=1) }}" with_indexed_items ------------------ ``with_indexed_items`` is replaced by ``loop``, the ``flatten`` filter and ``loop_control.index_var``. .. code-block:: yaml+jinja - name: with_indexed_items ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" with_indexed_items: "{{ items }}" - name: with_indexed_items -> loop ansible.builtin.debug: msg: "{{ index }} - {{ item }}" loop: "{{ items|flatten(levels=1) }}" loop_control: index_var: index with_flattened -------------- ``with_flattened`` is replaced by ``loop`` and the ``flatten`` filter. .. code-block:: yaml+jinja - name: with_flattened ansible.builtin.debug: msg: "{{ item }}" with_flattened: "{{ items }}" - name: with_flattened -> loop ansible.builtin.debug: msg: "{{ item }}" loop: "{{ items|flatten }}" with_together ------------- ``with_together`` is replaced by ``loop`` and the ``zip`` filter. .. code-block:: yaml+jinja - name: with_together ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" with_together: - "{{ list_one }}" - "{{ list_two }}" - name: with_together -> loop ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ list_one|zip(list_two)|list }}" Another example with complex data .. code-block:: yaml+jinja - name: with_together -> loop ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }} - {{ item.2 }}" loop: "{{ data[0]|zip(*data[1:])|list }}" vars: data: - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ['g', 'h', 'i'] with_dict --------- ``with_dict`` can be substituted by ``loop`` and either the ``dictsort`` or ``dict2items`` filters. .. code-block:: yaml+jinja - name: with_dict ansible.builtin.debug: msg: "{{ item.key }} - {{ item.value }}" with_dict: "{{ dictionary }}" - name: with_dict -> loop (option 1) ansible.builtin.debug: msg: "{{ item.key }} - {{ item.value }}" loop: "{{ dictionary|dict2items }}" - name: with_dict -> loop (option 2) ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ dictionary|dictsort }}" with_sequence ------------- ``with_sequence`` is replaced by ``loop`` and the ``range`` function, and potentially the ``format`` filter. .. code-block:: yaml+jinja - name: with_sequence ansible.builtin.debug: msg: "{{ item }}" with_sequence: start=0 end=4 stride=2 format=testuser%02x - name: with_sequence -> loop ansible.builtin.debug: msg: "{{ 'testuser%02x' | format(item) }}" # range is exclusive of the end point loop: "{{ range(0, 4 + 1, 2)|list }}" with_subelements ---------------- ``with_subelements`` is replaced by ``loop`` and the ``subelements`` filter. .. code-block:: yaml+jinja - name: with_subelements ansible.builtin.debug: msg: "{{ item.0.name }} - {{ item.1 }}" with_subelements: - "{{ users }}" - mysql.hosts - name: with_subelements -> loop ansible.builtin.debug: msg: "{{ item.0.name }} - {{ item.1 }}" loop: "{{ users|subelements('mysql.hosts') }}" with_nested/with_cartesian -------------------------- ``with_nested`` and ``with_cartesian`` are replaced by loop and the ``product`` filter. .. code-block:: yaml+jinja - name: with_nested ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" with_nested: - "{{ list_one }}" - "{{ list_two }}" - name: with_nested -> loop ansible.builtin.debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ list_one|product(list_two)|list }}" with_random_choice ------------------ ``with_random_choice`` is replaced by just use of the ``random`` filter, without need of ``loop``. .. code-block:: yaml+jinja - name: with_random_choice ansible.builtin.debug: msg: "{{ item }}" with_random_choice: "{{ my_list }}" - name: with_random_choice -> loop (No loop is needed here) ansible.builtin.debug: msg: "{{ my_list|random }}" tags: random ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/vault.rst0000644000000000000000000010330700000000000023314 0ustar00rootroot00000000000000.. _vault: ************************************* Encrypting content with Ansible Vault ************************************* Ansible Vault encrypts variables and files so you can protect sensitive content such as passwords or keys rather than leaving it visible as plaintext in playbooks or roles. To use Ansible Vault you need one or more passwords to encrypt and decrypt content. If you store your vault passwords in a third-party tool such as a secret manager, you need a script to access them. Use the passwords with the :ref:`ansible-vault` command-line tool to create and view encrypted variables, create encrypted files, encrypt existing files, or edit, re-key, or decrypt files. You can then place encrypted content under source control and share it more safely. .. warning:: * Encryption with Ansible Vault ONLY protects 'data at rest'. Once the content is decrypted ('data in use'), play and plugin authors are responsible for avoiding any secret disclosure, see :ref:`no_log ` for details on hiding output and :ref:`vault_securing_editor` for security considerations on editors you use with Ansible Vault. You can use encrypted variables and files in ad hoc commands and playbooks by supplying the passwords you used to encrypt them. You can modify your ``ansible.cfg`` file to specify the location of a password file or to always prompt for the password. .. contents:: :local: Managing vault passwords ======================== Managing your encrypted content is easier if you develop a strategy for managing your vault passwords. A vault password can be any string you choose. There is no special command to create a vault password. However, you need to keep track of your vault passwords. Each time you encrypt a variable or file with Ansible Vault, you must provide a password. When you use an encrypted variable or file in a command or playbook, you must provide the same password that was used to encrypt it. To develop a strategy for managing vault passwords, start with two questions: * Do you want to encrypt all your content with the same password, or use different passwords for different needs? * Where do you want to store your password or passwords? Choosing between a single password and multiple passwords --------------------------------------------------------- If you have a small team or few sensitive values, you can use a single password for everything you encrypt with Ansible Vault. Store your vault password securely in a file or a secret manager as described below. If you have a larger team or many sensitive values, you can use multiple passwords. For example, you can use different passwords for different users or different levels of access. Depending on your needs, you might want a different password for each encrypted file, for each directory, or for each environment. For example, you might have a playbook that includes two vars files, one for the dev environment and one for the production environment, encrypted with two different passwords. When you run the playbook, select the correct vault password for the environment you are targeting, using a vault ID. .. _vault_ids: Managing multiple passwords with vault IDs ------------------------------------------ If you use multiple vault passwords, you can differentiate one password from another with vault IDs. You use the vault ID in three ways: * Pass it with :option:`--vault-id ` to the :ref:`ansible-vault` command when you create encrypted content * Include it wherever you store the password for that vault ID (see :ref:`storing_vault_passwords`) * Pass it with :option:`--vault-id ` to the :ref:`ansible-playbook` command when you run a playbook that uses content you encrypted with that vault ID When you pass a vault ID as an option to the :ref:`ansible-vault` command, you add a label (a hint or nickname) to the encrypted content. This label documents which password you used to encrypt it. The encrypted variable or file includes the vault ID label in plain text in the header. The vault ID is the last element before the encrypted content. For example: .. code-block:: yaml my_encrypted_var: !vault | $ANSIBLE_VAULT;1.2;AES256;dev 30613233633461343837653833666333643061636561303338373661313838333565653635353162 3263363434623733343538653462613064333634333464660a663633623939393439316636633863 61636237636537333938306331383339353265363239643939666639386530626330633337633833 6664656334373166630a363736393262666465663432613932613036303963343263623137386239 6330 In addition to the label, you must provide a source for the related password. The source can be a prompt, a file, or a script, depending on how you are storing your vault passwords. The pattern looks like this: .. code-block:: bash --vault-id label@source If your playbook uses multiple encrypted variables or files that you encrypted with different passwords, you must pass the vault IDs when you run that playbook. You can use :option:`--vault-id ` by itself, with :option:`--vault-password-file `, or with :option:`--ask-vault-pass `. The pattern is the same as when you create encrypted content: include the label and the source for the matching password. See below for examples of encrypting content with vault IDs and using content encrypted with vault IDs. The :option:`--vault-id ` option works with any Ansible command that interacts with vaults, including :ref:`ansible-vault`, :ref:`ansible-playbook`, and so on. Limitations of vault IDs ^^^^^^^^^^^^^^^^^^^^^^^^ Ansible does not enforce using the same password every time you use a particular vault ID label. You can encrypt different variables or files with the same vault ID label but different passwords. This usually happens when you type the password at a prompt and make a mistake. It is possible to use different passwords with the same vault ID label on purpose. For example, you could use each label as a reference to a class of passwords, rather than a single password. In this scenario, you must always know which specific password or file to use in context. However, you are more likely to encrypt two files with the same vault ID label and different passwords by mistake. If you encrypt two files with the same label but different passwords by accident, you can :ref:`rekey ` one file to fix the issue. Enforcing vault ID matching ^^^^^^^^^^^^^^^^^^^^^^^^^^^ By default the vault ID label is only a hint to remind you which password you used to encrypt a variable or file. Ansible does not check that the vault ID in the header of the encrypted content matches the vault ID you provide when you use the content. Ansible decrypts all files and variables called by your command or playbook that are encrypted with the password you provide. To check the encrypted content and decrypt it only when the vault ID it contains matches the one you provide with ``--vault-id``, set the config option :ref:`DEFAULT_VAULT_ID_MATCH`. When you set :ref:`DEFAULT_VAULT_ID_MATCH`, each password is only used to decrypt data that was encrypted with the same label. This is efficient, predictable, and can reduce errors when different values are encrypted with different passwords. .. note:: Even with the :ref:`DEFAULT_VAULT_ID_MATCH` setting enabled, Ansible does not enforce using the same password every time you use a particular vault ID label. .. _storing_vault_passwords: Storing and accessing vault passwords ------------------------------------- You can memorize your vault password, or manually copy vault passwords from any source and paste them at a command-line prompt, but most users store them securely and access them as needed from within Ansible. You have two options for storing vault passwords that work from within Ansible: in files, or in a third-party tool such as the system keyring or a secret manager. If you store your passwords in a third-party tool, you need a vault password client script to retrieve them from within Ansible. Storing passwords in files ^^^^^^^^^^^^^^^^^^^^^^^^^^ To store a vault password in a file, enter the password as a string on a single line in the file. Make sure the permissions on the file are appropriate. Do not add password files to source control. .. _vault_password_client_scripts: Storing passwords in third-party tools with vault password client scripts ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can store your vault passwords on the system keyring, in a database, or in a secret manager and retrieve them from within Ansible using a vault password client script. Enter the password as a string on a single line. If your password has a vault ID, store it in a way that works with your password storage tool. To create a vault password client script: * Create a file with a name ending in either ``-client`` or ``-client.EXTENSION`` * Make the file executable * Within the script itself: * Print the passwords to standard output * Accept a ``--vault-id`` option * If the script prompts for data (for example, a database password), send the prompts to standard error When you run a playbook that uses vault passwords stored in a third-party tool, specify the script as the source within the ``--vault-id`` flag. For example: .. code-block:: bash ansible-playbook --vault-id dev@contrib/vault/vault-keyring-client.py Ansible executes the client script with a ``--vault-id`` option so the script knows which vault ID label you specified. For example a script loading passwords from a secret manager can use the vault ID label to pick either the 'dev' or 'prod' password. The example command above results in the following execution of the client script: .. code-block:: bash contrib/vault/vault-keyring-client.py --vault-id dev For an example of a client script that loads passwords from the system keyring, see the `vault-keyring-client script `_. Encrypting content with Ansible Vault ===================================== Once you have a strategy for managing and storing vault passwords, you can start encrypting content. You can encrypt two types of content with Ansible Vault: variables and files. Encrypted content always includes the ``!vault`` tag, which tells Ansible and YAML that the content needs to be decrypted, and a ``|`` character, which allows multi-line strings. Encrypted content created with ``--vault-id`` also contains the vault ID label. For more details about the encryption process and the format of content encrypted with Ansible Vault, see :ref:`vault_format`. This table shows the main differences between encrypted variables and encrypted files: .. table:: :class: documentation-table ====================== ================================= ==================================== .. Encrypted variables Encrypted files ====================== ================================= ==================================== How much is encrypted? Variables within a plaintext file The entire file When is it decrypted? On demand, only when needed Whenever loaded or referenced [#f1]_ What can be encrypted? Only variables Any structured data file ====================== ================================= ==================================== .. [#f1] Ansible cannot know if it needs content from an encrypted file unless it decrypts the file, so it decrypts all encrypted files referenced in your playbooks and roles. .. _encrypting_variables: .. _single_encrypted_variable: Encrypting individual variables with Ansible Vault -------------------------------------------------- You can encrypt single values inside a YAML file using the :ref:`ansible-vault encrypt_string ` command. For one way to keep your vaulted variables safely visible, see :ref:`tip_for_variables_and_vaults`. Advantages and disadvantages of encrypting variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ With variable-level encryption, your files are still easily legible. You can mix plaintext and encrypted variables, even inline in a play or role. However, password rotation is not as simple as with file-level encryption. You cannot :ref:`rekey ` encrypted variables. Also, variable-level encryption only works on variables. If you want to encrypt tasks or other content, you must encrypt the entire file. .. _encrypt_string_for_use_in_yaml: Creating encrypted variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The :ref:`ansible-vault encrypt_string ` command encrypts and formats any string you type (or copy or generate) into a format that can be included in a playbook, role, or variables file. To create a basic encrypted variable, pass three options to the :ref:`ansible-vault encrypt_string ` command: * a source for the vault password (prompt, file, or script, with or without a vault ID) * the string to encrypt * the string name (the name of the variable) The pattern looks like this: .. code-block:: bash ansible-vault encrypt_string '' --name '' For example, to encrypt the string 'foobar' using the only password stored in 'a_password_file' and name the variable 'the_secret': .. code-block:: bash ansible-vault encrypt_string --vault-password-file a_password_file 'foobar' --name 'the_secret' The command above creates this content: .. code-block:: yaml the_secret: !vault | $ANSIBLE_VAULT;1.1;AES256 62313365396662343061393464336163383764373764613633653634306231386433626436623361 6134333665353966363534333632666535333761666131620a663537646436643839616531643561 63396265333966386166373632626539326166353965363262633030333630313338646335303630 3438626666666137650a353638643435666633633964366338633066623234616432373231333331 6564 To encrypt the string 'foooodev', add the vault ID label 'dev' with the 'dev' vault password stored in 'a_password_file', and call the encrypted variable 'the_dev_secret': .. code-block:: bash ansible-vault encrypt_string --vault-id dev@a_password_file 'foooodev' --name 'the_dev_secret' The command above creates this content: .. code-block:: yaml the_dev_secret: !vault | $ANSIBLE_VAULT;1.2;AES256;dev 30613233633461343837653833666333643061636561303338373661313838333565653635353162 3263363434623733343538653462613064333634333464660a663633623939393439316636633863 61636237636537333938306331383339353265363239643939666639386530626330633337633833 6664656334373166630a363736393262666465663432613932613036303963343263623137386239 6330 To encrypt the string 'letmein' read from stdin, add the vault ID 'dev' using the 'dev' vault password stored in `a_password_file`, and name the variable 'db_password': .. code-block:: bash echo -n 'letmein' | ansible-vault encrypt_string --vault-id dev@a_password_file --stdin-name 'db_password' .. warning:: Typing secret content directly at the command line (without a prompt) leaves the secret string in your shell history. Do not do this outside of testing. The command above creates this output: .. code-block:: console Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line) db_password: !vault | $ANSIBLE_VAULT;1.2;AES256;dev 61323931353866666336306139373937316366366138656131323863373866376666353364373761 3539633234313836346435323766306164626134376564330a373530313635343535343133316133 36643666306434616266376434363239346433643238336464643566386135356334303736353136 6565633133366366360a326566323363363936613664616364623437336130623133343530333739 3039 To be prompted for a string to encrypt, encrypt it with the 'dev' vault password from 'a_password_file', name the variable 'new_user_password' and give it the vault ID label 'dev': .. code-block:: bash ansible-vault encrypt_string --vault-id dev@a_password_file --stdin-name 'new_user_password' The command above triggers this prompt: .. code-block:: text Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line) Type the string to encrypt (for example, 'hunter2'), hit ctrl-d, and wait. .. warning:: Do not press ``Enter`` after supplying the string to encrypt. That will add a newline to the encrypted value. The sequence above creates this output: .. code-block:: yaml new_user_password: !vault | $ANSIBLE_VAULT;1.2;AES256;dev 37636561366636643464376336303466613062633537323632306566653533383833366462366662 6565353063303065303831323539656138653863353230620a653638643639333133306331336365 62373737623337616130386137373461306535383538373162316263386165376131623631323434 3866363862363335620a376466656164383032633338306162326639643635663936623939666238 3161 You can add the output from any of the examples above to any playbook, variables file, or role for future use. Encrypted variables are larger than plain-text variables, but they protect your sensitive content while leaving the rest of the playbook, variables file, or role in plain text so you can easily read it. Viewing encrypted variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can view the original value of an encrypted variable using the debug module. You must pass the password that was used to encrypt the variable. For example, if you stored the variable created by the last example above in a file called 'vars.yml', you could view the unencrypted value of that variable like this: .. code-block:: console ansible localhost -m ansible.builtin.debug -a var="new_user_password" -e "@vars.yml" --vault-id dev@a_password_file localhost | SUCCESS => { "new_user_password": "hunter2" } Encrypting files with Ansible Vault ----------------------------------- Ansible Vault can encrypt any structured data file used by Ansible, including: * group variables files from inventory * host variables files from inventory * variables files passed to ansible-playbook with ``-e @file.yml`` or ``-e @file.json`` * variables files loaded by ``include_vars`` or ``vars_files`` * variables files in roles * defaults files in roles * tasks files * handlers files * binary files or other arbitrary files The full file is encrypted in the vault. .. note:: Ansible Vault uses an editor to create or modify encrypted files. See :ref:`vault_securing_editor` for some guidance on securing the editor. Advantages and disadvantages of encrypting files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File-level encryption is easy to use. Password rotation for encrypted files is straightforward with the :ref:`rekey ` command. Encrypting files can hide not only sensitive values, but the names of the variables you use. However, with file-level encryption the contents of files are no longer easy to access and read. This may be a problem with encrypted tasks files. When encrypting a variables file, see :ref:`tip_for_variables_and_vaults` for one way to keep references to these variables in a non-encrypted file. Ansible always decrypts the entire encrypted file when it is when loaded or referenced, because Ansible cannot know if it needs the content unless it decrypts it. .. _creating_files: Creating encrypted files ^^^^^^^^^^^^^^^^^^^^^^^^ To create a new encrypted data file called 'foo.yml' with the 'test' vault password from 'multi_password_file': .. code-block:: bash ansible-vault create --vault-id test@multi_password_file foo.yml The tool launches an editor (whatever editor you have defined with $EDITOR, default editor is vi). Add the content. When you close the editor session, the file is saved as encrypted data. The file header reflects the vault ID used to create it: .. code-block:: text ``$ANSIBLE_VAULT;1.2;AES256;test`` To create a new encrypted data file with the vault ID 'my_new_password' assigned to it and be prompted for the password: .. code-block:: bash ansible-vault create --vault-id my_new_password@prompt foo.yml Again, add content to the file in the editor and save. Be sure to store the new password you created at the prompt, so you can find it when you want to decrypt that file. .. _encrypting_files: Encrypting existing files ^^^^^^^^^^^^^^^^^^^^^^^^^ To encrypt an existing file, use the :ref:`ansible-vault encrypt ` command. This command can operate on multiple files at once. For example: .. code-block:: bash ansible-vault encrypt foo.yml bar.yml baz.yml To encrypt existing files with the 'project' ID and be prompted for the password: .. code-block:: bash ansible-vault encrypt --vault-id project@prompt foo.yml bar.yml baz.yml .. _viewing_files: Viewing encrypted files ^^^^^^^^^^^^^^^^^^^^^^^ To view the contents of an encrypted file without editing it, you can use the :ref:`ansible-vault view ` command: .. code-block:: bash ansible-vault view foo.yml bar.yml baz.yml .. _editing_encrypted_files: Editing encrypted files ^^^^^^^^^^^^^^^^^^^^^^^ To edit an encrypted file in place, use the :ref:`ansible-vault edit ` command. This command decrypts the file to a temporary file, allows you to edit the content, then saves and re-encrypts the content and removes the temporary file when you close the editor. For example: .. code-block:: bash ansible-vault edit foo.yml To edit a file encrypted with the ``vault2`` password file and assigned the vault ID ``pass2``: .. code-block:: bash ansible-vault edit --vault-id pass2@vault2 foo.yml .. _rekeying_files: Changing the password and/or vault ID on encrypted files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To change the password on an encrypted file or files, use the :ref:`rekey ` command: .. code-block:: bash ansible-vault rekey foo.yml bar.yml baz.yml This command can rekey multiple data files at once and will ask for the original password and also the new password. To set a different ID for the rekeyed files, pass the new ID to ``--new-vault-id``. For example, to rekey a list of files encrypted with the 'preprod1' vault ID from the 'ppold' file to the 'preprod2' vault ID and be prompted for the new password: .. code-block:: bash ansible-vault rekey --vault-id preprod1@ppold --new-vault-id preprod2@prompt foo.yml bar.yml baz.yml .. _decrypting_files: Decrypting encrypted files ^^^^^^^^^^^^^^^^^^^^^^^^^^ If you have an encrypted file that you no longer want to keep encrypted, you can permanently decrypt it by running the :ref:`ansible-vault decrypt ` command. This command will save the file unencrypted to the disk, so be sure you do not want to :ref:`edit ` it instead. .. code-block:: bash ansible-vault decrypt foo.yml bar.yml baz.yml .. _vault_securing_editor: Steps to secure your editor ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ansible Vault relies on your configured editor, which can be a source of disclosures. Most editors have ways to prevent loss of data, but these normally rely on extra plain text files that can have a clear text copy of your secrets. Consult your editor documentation to configure the editor to avoid disclosing secure data. The following sections provide some guidance on common editors but should not be taken as a complete guide to securing your editor. vim ... You can set the following ``vim`` options in command mode to avoid cases of disclosure. There may be more settings you need to modify to ensure security, especially when using plugins, so consult the ``vim`` documentation. 1. Disable swapfiles that act like an autosave in case of crash or interruption. .. code-block:: text set noswapfile 2. Disable creation of backup files. .. code-block:: text set nobackup set nowritebackup 3. Disable the viminfo file from copying data from your current session. .. code-block:: text set viminfo= 4. Disable copying to the system clipboard. .. code-block:: text set clipboard= You can optionally add these settings in ``.vimrc`` for all files, or just specific paths or extensions. See the ``vim`` manual for details. Emacs ...... You can set the following Emacs options to avoid cases of disclosure. There may be more settings you need to modify to ensure security, especially when using plugins, so consult the Emacs documentation. 1. Do not copy data to the system clipboard. .. code-block:: text (setq x-select-enable-clipboard nil) 2. Disable creation of backup files. .. code-block:: text (setq make-backup-files nil) 3. Disable autosave files. .. code-block:: text (setq auto-save-default nil) .. _playbooks_vault: .. _providing_vault_passwords: Using encrypted variables and files =================================== When you run a task or playbook that uses encrypted variables or files, you must provide the passwords to decrypt the variables or files. You can do this at the command line or in the playbook itself. Passing a single password ------------------------- If all the encrypted variables and files your task or playbook needs use a single password, you can use the :option:`--ask-vault-pass ` or :option:`--vault-password-file ` cli options. To prompt for the password: .. code-block:: bash ansible-playbook --ask-vault-pass site.yml To retrieve the password from the :file:`/path/to/my/vault-password-file` file: .. code-block:: bash ansible-playbook --vault-password-file /path/to/my/vault-password-file site.yml To get the password from the vault password client script :file:`my-vault-password-client.py`: .. code-block:: bash ansible-playbook --vault-password-file my-vault-password-client.py .. _specifying_vault_ids: Passing vault IDs ----------------- You can also use the :option:`--vault-id ` option to pass a single password with its vault label. This approach is clearer when multiple vaults are used within a single inventory. To prompt for the password for the 'dev' vault ID: .. code-block:: bash ansible-playbook --vault-id dev@prompt site.yml To retrieve the password for the 'dev' vault ID from the :file:`dev-password` file: .. code-block:: bash ansible-playbook --vault-id dev@dev-password site.yml To get the password for the 'dev' vault ID from the vault password client script :file:`my-vault-password-client.py`: .. code-block:: bash ansible-playbook --vault-id dev@my-vault-password-client.py Passing multiple vault passwords -------------------------------- If your task or playbook requires multiple encrypted variables or files that you encrypted with different vault IDs, you must use the :option:`--vault-id ` option, passing multiple ``--vault-id`` options to specify the vault IDs ('dev', 'prod', 'cloud', 'db') and sources for the passwords (prompt, file, script). . For example, to use a 'dev' password read from a file and to be prompted for the 'prod' password: .. code-block:: bash ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml By default the vault ID labels (dev, prod and so on) are only hints. Ansible attempts to decrypt vault content with each password. The password with the same label as the encrypted data will be tried first, after that each vault secret will be tried in the order they were provided on the command line. Where the encrypted data has no label, or the label does not match any of the provided labels, the passwords will be tried in the order they are specified. In the example above, the 'dev' password will be tried first, then the 'prod' password for cases where Ansible doesn't know which vault ID is used to encrypt something. Using ``--vault-id`` without a vault ID --------------------------------------- The :option:`--vault-id ` option can also be used without specifying a vault-id. This behavior is equivalent to :option:`--ask-vault-pass ` or :option:`--vault-password-file ` so is rarely used. For example, to use a password file :file:`dev-password`: .. code-block:: bash ansible-playbook --vault-id dev-password site.yml To prompt for the password: .. code-block:: bash ansible-playbook --vault-id @prompt site.yml To get the password from an executable script :file:`my-vault-password-client.py`: .. code-block:: bash ansible-playbook --vault-id my-vault-password-client.py Configuring defaults for using encrypted content ================================================ Setting a default vault ID -------------------------- If you use one vault ID more frequently than any other, you can set the config option :ref:`DEFAULT_VAULT_IDENTITY_LIST` to specify a default vault ID and password source. Ansible will use the default vault ID and source any time you do not specify :option:`--vault-id `. You can set multiple values for this option. Setting multiple values is equivalent to passing multiple :option:`--vault-id ` cli options. Setting a default password source --------------------------------- If you use one vault password file more frequently than any other, you can set the :ref:`DEFAULT_VAULT_PASSWORD_FILE` config option or the :envvar:`ANSIBLE_VAULT_PASSWORD_FILE` environment variable to specify that file. For example, if you set ``ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt``, Ansible will automatically search for the password in that file. This is useful if, for example, you use Ansible from a continuous integration system such as Jenkins. When are encrypted files made visible? ====================================== In general, content you encrypt with Ansible Vault remains encrypted after execution. However, there is one exception. If you pass an encrypted file as the ``src`` argument to the :ref:`copy `, :ref:`template `, :ref:`unarchive `, :ref:`script ` or :ref:`assemble ` module, the file will not be encrypted on the target host (assuming you supply the correct vault password when you run the play). This behavior is intended and useful. You can encrypt a configuration file or template to avoid sharing the details of your configuration, but when you copy that configuration to servers in your environment, you want it to be decrypted so local users and processes can access it. .. _vault_format: Format of files encrypted with Ansible Vault ============================================ Ansible Vault creates UTF-8 encoded txt files. The file format includes a newline terminated header. For example: .. code-block:: text $ANSIBLE_VAULT;1.1;AES256 or .. code-block:: text $ANSIBLE_VAULT;1.2;AES256;vault-id-label The header contains up to four elements, separated by semi-colons (``;``). 1. The format ID (``$ANSIBLE_VAULT``). Currently ``$ANSIBLE_VAULT`` is the only valid format ID. The format ID identifies content that is encrypted with Ansible Vault (via vault.is_encrypted_file()). 2. The vault format version (``1.X``). All supported versions of Ansible will currently default to '1.1' or '1.2' if a labeled vault ID is supplied. The '1.0' format is supported for reading only (and will be converted automatically to the '1.1' format on write). The format version is currently used as an exact string compare only (version numbers are not currently 'compared'). 3. The cipher algorithm used to encrypt the data (``AES256``). Currently ``AES256`` is the only supported cipher algorithm. Vault format 1.0 used 'AES', but current code always uses 'AES256'. 4. The vault ID label used to encrypt the data (optional, ``vault-id-label``) For example, if you encrypt a file with ``--vault-id dev@prompt``, the vault-id-label is ``dev``. Note: In the future, the header could change. Fields after the format ID and format version depend on the format version, and future vault format versions may add more cipher algorithm options and/or additional fields. The rest of the content of the file is the 'vaulttext'. The vaulttext is a text armored version of the encrypted ciphertext. Each line is 80 characters wide, except for the last line which may be shorter. Ansible Vault payload format 1.1 - 1.2 -------------------------------------- The vaulttext is a concatenation of the ciphertext and a SHA256 digest with the result 'hexlifyied'. 'hexlify' refers to the ``hexlify()`` method of the Python Standard Library's `binascii `_ module. hexlify()'ed result of: - hexlify()'ed string of the salt, followed by a newline (``0x0a``) - hexlify()'ed string of the crypted HMAC, followed by a newline. The HMAC is: - a `RFC2104 `_ style HMAC - inputs are: - The AES256 encrypted ciphertext - A PBKDF2 key. This key, the cipher key, and the cipher IV are generated from: - the salt, in bytes - 10000 iterations - SHA256() algorithm - the first 32 bytes are the cipher key - the second 32 bytes are the HMAC key - remaining 16 bytes are the cipher IV - hexlify()'ed string of the ciphertext. The ciphertext is: - AES256 encrypted data. The data is encrypted using: - AES-CTR stream cipher - cipher key - IV - a 128 bit counter block seeded from an integer IV - the plaintext - the original plaintext - padding up to the AES256 blocksize. (The data used for padding is based on `RFC5652 `_) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.533556 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows.rst0000644000000000000000000000100400000000000023642 0ustar00rootroot00000000000000.. _windows: Windows Guides `````````````` The following sections provide information on managing Windows hosts with Ansible. Because Windows is a non-POSIX-compliant operating system, there are differences between how Ansible interacts with them and the way Windows works. These guides will highlight some of the differences between Linux/Unix hosts and hosts running Windows. .. toctree:: :maxdepth: 2 windows_setup windows_winrm windows_usage windows_dsc windows_performance windows_faq ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5345562 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_dsc.rst0000644000000000000000000004655100000000000024513 0ustar00rootroot00000000000000Desired State Configuration =========================== .. contents:: Topics :local: What is Desired State Configuration? ```````````````````````````````````` Desired State Configuration, or DSC, is a tool built into PowerShell that can be used to define a Windows host setup through code. The overall purpose of DSC is the same as Ansible, it is just executed in a different manner. Since Ansible 2.4, the ``win_dsc`` module has been added and can be used to take advantage of existing DSC resources when interacting with a Windows host. More details on DSC can be viewed at `DSC Overview `_. Host Requirements ````````````````` To use the ``win_dsc`` module, a Windows host must have PowerShell v5.0 or newer installed. All supported hosts, except for Windows Server 2008 (non R2) can be upgraded to PowerShell v5. Once the PowerShell requirements have been met, using DSC is as simple as creating a task with the ``win_dsc`` module. Why Use DSC? ```````````` DSC and Ansible modules have a common goal which is to define and ensure the state of a resource. Because of this, resources like the DSC `File resource `_ and Ansible ``win_file`` can be used to achieve the same result. Deciding which to use depends on the scenario. Reasons for using an Ansible module over a DSC resource: * The host does not support PowerShell v5.0, or it cannot easily be upgraded * The DSC resource does not offer a feature present in an Ansible module. For example win_regedit can manage the ``REG_NONE`` property type, while the DSC ``Registry`` resource cannot * DSC resources have limited check mode support, while some Ansible modules have better checks * DSC resources do not support diff mode, while some Ansible modules do * Custom resources require further installation steps to be run on the host beforehand, while Ansible modules are built-in to Ansible * There are bugs in a DSC resource where an Ansible module works Reasons for using a DSC resource over an Ansible module: * The Ansible module does not support a feature present in a DSC resource * There is no Ansible module available * There are bugs in an existing Ansible module In the end, it doesn't matter whether the task is performed with DSC or an Ansible module; what matters is that the task is performed correctly and the playbooks are still readable. If you have more experience with DSC over Ansible and it does the job, just use DSC for that task. How to Use DSC? ``````````````` The ``win_dsc`` module takes in a free-form of options so that it changes according to the resource it is managing. A list of built in resources can be found at `resources `_. Using the `Registry `_ resource as an example, this is the DSC definition as documented by Microsoft: .. code-block:: powershell Registry [string] #ResourceName { Key = [string] ValueName = [string] [ Ensure = [string] { Enable | Disable } ] [ Force = [bool] ] [ Hex = [bool] ] [ DependsOn = [string[]] ] [ ValueData = [string[]] ] [ ValueType = [string] { Binary | Dword | ExpandString | MultiString | Qword | String } ] } When defining the task, ``resource_name`` must be set to the DSC resource being used - in this case the ``resource_name`` should be set to ``Registry``. The ``module_version`` can refer to a specific version of the DSC resource installed; if left blank it will default to the latest version. The other options are parameters that are used to define the resource, such as ``Key`` and ``ValueName``. While the options in the task are not case sensitive, keeping the case as-is is recommended because it makes it easier to distinguish DSC resource options from Ansible's ``win_dsc`` options. This is what the Ansible task version of the above DSC Registry resource would look like: .. code-block:: yaml+jinja - name: Use win_dsc module with the Registry DSC resource win_dsc: resource_name: Registry Ensure: Present Key: HKEY_LOCAL_MACHINE\SOFTWARE\ExampleKey ValueName: TestValue ValueData: TestData Starting in Ansible 2.8, the ``win_dsc`` module automatically validates the input options from Ansible with the DSC definition. This means Ansible will fail if the option name is incorrect, a mandatory option is not set, or the value is not a valid choice. When running Ansible with a verbosity level of 3 or more (``-vvv``), the return value will contain the possible invocation options based on the ``resource_name`` specified. Here is an example of the invocation output for the above ``Registry`` task: .. code-block:: ansible-output changed: [2016] => { "changed": true, "invocation": { "module_args": { "DependsOn": null, "Ensure": "Present", "Force": null, "Hex": null, "Key": "HKEY_LOCAL_MACHINE\\SOFTWARE\\ExampleKey", "PsDscRunAsCredential_password": null, "PsDscRunAsCredential_username": null, "ValueData": [ "TestData" ], "ValueName": "TestValue", "ValueType": null, "module_version": "latest", "resource_name": "Registry" } }, "module_version": "1.1", "reboot_required": false, "verbose_set": [ "Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = ResourceSet,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.", "An LCM method call arrived from computer SERVER2016 with user sid S-1-5-21-3088887838-4058132883-1884671576-1105.", "[SERVER2016]: LCM: [ Start Set ] [[Registry]DirectResourceAccess]", "[SERVER2016]: [[Registry]DirectResourceAccess] (SET) Create registry key 'HKLM:\\SOFTWARE\\ExampleKey'", "[SERVER2016]: [[Registry]DirectResourceAccess] (SET) Set registry key value 'HKLM:\\SOFTWARE\\ExampleKey\\TestValue' to 'TestData' of type 'String'", "[SERVER2016]: LCM: [ End Set ] [[Registry]DirectResourceAccess] in 0.1930 seconds.", "[SERVER2016]: LCM: [ End Set ] in 0.2720 seconds.", "Operation 'Invoke CimMethod' complete.", "Time taken for configuration job to complete is 0.402 seconds" ], "verbose_test": [ "Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = ResourceTest,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.", "An LCM method call arrived from computer SERVER2016 with user sid S-1-5-21-3088887838-4058132883-1884671576-1105.", "[SERVER2016]: LCM: [ Start Test ] [[Registry]DirectResourceAccess]", "[SERVER2016]: [[Registry]DirectResourceAccess] Registry key 'HKLM:\\SOFTWARE\\ExampleKey' does not exist", "[SERVER2016]: LCM: [ End Test ] [[Registry]DirectResourceAccess] False in 0.2510 seconds.", "[SERVER2016]: LCM: [ End Set ] in 0.3310 seconds.", "Operation 'Invoke CimMethod' complete.", "Time taken for configuration job to complete is 0.475 seconds" ] } The ``invocation.module_args`` key shows the actual values that were set as well as other possible values that were not set. Unfortunately this will not show the default value for a DSC property, only what was set from the Ansible task. Any ``*_password`` option will be masked in the output for security reasons, if there are any other sensitive module options, set ``no_log: True`` on the task to stop all task output from being logged. Property Types -------------- Each DSC resource property has a type that is associated with it. Ansible will try to convert the defined options to the correct type during execution. For simple types like ``[string]`` and ``[bool]`` this is a simple operation, but complex types like ``[PSCredential]`` or arrays (like ``[string[]]``) this require certain rules. PSCredential ++++++++++++ A ``[PSCredential]`` object is used to store credentials in a secure way, but Ansible has no way to serialize this over JSON. To set a DSC PSCredential property, the definition of that parameter should have two entries that are suffixed with ``_username`` and ``_password`` for the username and password respectively. For example: .. code-block:: yaml+jinja PsDscRunAsCredential_username: '{{ ansible_user }}' PsDscRunAsCredential_password: '{{ ansible_password }}' SourceCredential_username: AdminUser SourceCredential_password: PasswordForAdminUser .. Note:: On versions of Ansible older than 2.8, you should set ``no_log: yes`` on the task definition in Ansible to ensure any credentials used are not stored in any log file or console output. A ``[PSCredential]`` is defined with ``EmbeddedInstance("MSFT_Credential")`` in a DSC resource MOF definition. CimInstance Type ++++++++++++++++ A ``[CimInstance]`` object is used by DSC to store a dictionary object based on a custom class defined by that resource. Defining a value that takes in a ``[CimInstance]`` in YAML is the same as defining a dictionary in YAML. For example, to define a ``[CimInstance]`` value in Ansible: .. code-block:: yaml+jinja # [CimInstance]AuthenticationInfo == MSFT_xWebAuthenticationInformation AuthenticationInfo: Anonymous: no Basic: yes Digest: no Windows: yes In the above example, the CIM instance is a representation of the class `MSFT_xWebAuthenticationInformation `_. This class accepts four boolean variables, ``Anonymous``, ``Basic``, ``Digest``, and ``Windows``. The keys to use in a ``[CimInstance]`` depend on the class it represents. Please read through the documentation of the resource to determine the keys that can be used and the types of each key value. The class definition is typically located in the ``.schema.mof``. HashTable Type ++++++++++++++ A ``[HashTable]`` object is also a dictionary but does not have a strict set of keys that can/need to be defined. Like a ``[CimInstance]``, define it like a normal dictionary value in YAML. A ``[HashTable]]`` is defined with ``EmbeddedInstance("MSFT_KeyValuePair")`` in a DSC resource MOF definition. Arrays ++++++ Simple type arrays like ``[string[]]`` or ``[UInt32[]]`` are defined as a list or as a comma separated string which are then cast to their type. Using a list is recommended because the values are not manually parsed by the ``win_dsc`` module before being passed to the DSC engine. For example, to define a simple type array in Ansible: .. code-block:: yaml+jinja # [string[]] ValueData: entry1, entry2, entry3 ValueData: - entry1 - entry2 - entry3 # [UInt32[]] ReturnCode: 0,3010 ReturnCode: - 0 - 3010 Complex type arrays like ``[CimInstance[]]`` (array of dicts), can be defined like this example: .. code-block:: yaml+jinja # [CimInstance[]]BindingInfo == MSFT_xWebBindingInformation BindingInfo: - Protocol: https Port: 443 CertificateStoreName: My CertificateThumbprint: C676A89018C4D5902353545343634F35E6B3A659 HostName: DSCTest IPAddress: '*' SSLFlags: 1 - Protocol: http Port: 80 IPAddress: '*' The above example, is an array with two values of the class `MSFT_xWebBindingInformation `_. When defining a ``[CimInstance[]]``, be sure to read the resource documentation to find out what keys to use in the definition. DateTime ++++++++ A ``[DateTime]`` object is a DateTime string representing the date and time in the `ISO 8601 `_ date time format. The value for a ``[DateTime]`` field should be quoted in YAML to ensure the string is properly serialized to the Windows host. Here is an example of how to define a ``[DateTime]`` value in Ansible: .. code-block:: yaml+jinja # As UTC-0 (No timezone) DateTime: '2019-02-22T13:57:31.2311892+00:00' # As UTC+4 DateTime: '2019-02-22T17:57:31.2311892+04:00' # As UTC-4 DateTime: '2019-02-22T09:57:31.2311892-04:00' All the values above are equal to a UTC date time of February 22nd 2019 at 1:57pm with 31 seconds and 2311892 milliseconds. Run As Another User ------------------- By default, DSC runs each resource as the SYSTEM account and not the account that Ansible use to run the module. This means that resources that are dynamically loaded based on a user profile, like the ``HKEY_CURRENT_USER`` registry hive, will be loaded under the ``SYSTEM`` profile. The parameter ``PsDscRunAsCredential`` is a parameter that can be set for every DSC resource force the DSC engine to run under a different account. As ``PsDscRunAsCredential`` has a type of ``PSCredential``, it is defined with the ``_username`` and ``_password`` suffix. Using the Registry resource type as an example, this is how to define a task to access the ``HKEY_CURRENT_USER`` hive of the Ansible user: .. code-block:: yaml+jinja - name: Use win_dsc with PsDscRunAsCredential to run as a different user win_dsc: resource_name: Registry Ensure: Present Key: HKEY_CURRENT_USER\ExampleKey ValueName: TestValue ValueData: TestData PsDscRunAsCredential_username: '{{ ansible_user }}' PsDscRunAsCredential_password: '{{ ansible_password }}' no_log: yes Custom DSC Resources ```````````````````` DSC resources are not limited to the built-in options from Microsoft. Custom modules can be installed to manage other resources that are not usually available. Finding Custom DSC Resources ---------------------------- You can use the `PSGallery `_ to find custom resources, along with documentation on how to install them on a Windows host. The ``Find-DscResource`` cmdlet can also be used to find custom resources. For example: .. code-block:: powershell # Find all DSC resources in the configured repositories Find-DscResource # Find all DSC resources that relate to SQL Find-DscResource -ModuleName "*sql*" .. Note:: DSC resources developed by Microsoft that start with ``x``, means the resource is experimental and comes with no support. Installing a Custom Resource ---------------------------- There are three ways that a DSC resource can be installed on a host: * Manually with the ``Install-Module`` cmdlet * Using the ``win_psmodule`` Ansible module * Saving the module manually and copying it another host This is an example of installing the ``xWebAdministration`` resources using ``win_psmodule``: .. code-block:: yaml+jinja - name: Install xWebAdministration DSC resource win_psmodule: name: xWebAdministration state: present Once installed, the win_dsc module will be able to use the resource by referencing it with the ``resource_name`` option. The first two methods above only work when the host has access to the internet. When a host does not have internet access, the module must first be installed using the methods above on another host with internet access and then copied across. To save a module to a local filepath, the following PowerShell cmdlet can be run: .. code-block:: powershell Save-Module -Name xWebAdministration -Path C:\temp This will create a folder called ``xWebAdministration`` in ``C:\temp`` which can be copied to any host. For PowerShell to see this offline resource, it must be copied to a directory set in the ``PSModulePath`` environment variable. In most cases the path ``C:\Program Files\WindowsPowerShell\Module`` is set through this variable, but the ``win_path`` module can be used to add different paths. Examples ```````` Extract a zip file ------------------ .. code-block:: yaml+jinja - name: Extract a zip file win_dsc: resource_name: Archive Destination: C:\temp\output Path: C:\temp\zip.zip Ensure: Present Create a directory ------------------ .. code-block:: yaml+jinja - name: Create file with some text win_dsc: resource_name: File DestinationPath: C:\temp\file Contents: | Hello World Ensure: Present Type: File - name: Create directory that is hidden is set with the System attribute win_dsc: resource_name: File DestinationPath: C:\temp\hidden-directory Attributes: Hidden,System Ensure: Present Type: Directory Interact with Azure ------------------- .. code-block:: yaml+jinja - name: Install xAzure DSC resources win_psmodule: name: xAzure state: present - name: Create virtual machine in Azure win_dsc: resource_name: xAzureVM ImageName: a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201409.01-en.us-127GB.vhd Name: DSCHOST01 ServiceName: ServiceName StorageAccountName: StorageAccountName InstanceSize: Medium Windows: yes Ensure: Present Credential_username: '{{ ansible_user }}' Credential_password: '{{ ansible_password }}' Setup IIS Website ----------------- .. code-block:: yaml+jinja - name: Install xWebAdministration module win_psmodule: name: xWebAdministration state: present - name: Install IIS features that are required win_dsc: resource_name: WindowsFeature Name: '{{ item }}' Ensure: Present loop: - Web-Server - Web-Asp-Net45 - name: Setup web content win_dsc: resource_name: File DestinationPath: C:\inetpub\IISSite\index.html Type: File Contents: | IIS Site This is the body Ensure: present - name: Create new website win_dsc: resource_name: xWebsite Name: NewIISSite State: Started PhysicalPath: C:\inetpub\IISSite\index.html BindingInfo: - Protocol: https Port: 8443 CertificateStoreName: My CertificateThumbprint: C676A89018C4D5902353545343634F35E6B3A659 HostName: DSCTest IPAddress: '*' SSLFlags: 1 - Protocol: http Port: 8080 IPAddress: '*' AuthenticationInfo: Anonymous: no Basic: yes Digest: no Windows: yes .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`List of Windows Modules ` Windows specific module list, all implemented in PowerShell `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5345562 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_faq.rst0000644000000000000000000002342300000000000024502 0ustar00rootroot00000000000000.. _windows_faq: Windows Frequently Asked Questions ================================== Here are some commonly asked questions in regards to Ansible and Windows and their answers. .. note:: This document covers questions about managing Microsoft Windows servers with Ansible. For questions about Ansible Core, please see the :ref:`general FAQ page `. Does Ansible work with Windows XP or Server 2003? `````````````````````````````````````````````````` Ansible does not work with Windows XP or Server 2003 hosts. Ansible does work with these Windows operating system versions: * Windows Server 2008 :sup:`1` * Windows Server 2008 R2 :sup:`1` * Windows Server 2012 * Windows Server 2012 R2 * Windows Server 2016 * Windows Server 2019 * Windows 7 :sup:`1` * Windows 8.1 * Windows 10 1 - See the :ref:`Server 2008 FAQ ` entry for more details. Ansible also has minimum PowerShell version requirements - please see :ref:`windows_setup` for the latest information. .. _windows_faq_server2008: Are Server 2008, 2008 R2 and Windows 7 supported? ````````````````````````````````````````````````` Microsoft ended Extended Support for these versions of Windows on January 14th, 2020, and Ansible deprecated official support in the 2.10 release. No new feature development will occur targeting these operating systems, and automated testing has ceased. However, existing modules and features will likely continue to work, and simple pull requests to resolve issues with these Windows versions may be accepted. Can I manage Windows Nano Server with Ansible? `````````````````````````````````````````````` Ansible does not currently work with Windows Nano Server, since it does not have access to the full .NET Framework that is used by the majority of the modules and internal components. .. _windows_faq_ansible: Can Ansible run on Windows? ``````````````````````````` No, Ansible can only manage Windows hosts. Ansible cannot run on a Windows host natively, though it can run under the Windows Subsystem for Linux (WSL). .. note:: The Windows Subsystem for Linux is not supported by Ansible and should not be used for production systems. To install Ansible on WSL, the following commands can be run in the bash terminal: .. code-block:: shell sudo apt-get update sudo apt-get install python-pip git libffi-dev libssl-dev -y pip install --user ansible pywinrm To run Ansible from source instead of a release on the WSL, simply uninstall the pip installed version and then clone the git repo. .. code-block:: shell pip uninstall ansible -y git clone https://github.com/ansible/ansible.git source ansible/hacking/env-setup # To enable Ansible on login, run the following echo ". ~/ansible/hacking/env-setup -q' >> ~/.bashrc If you encounter timeout errors when running Ansible on the WSL, this may be due to an issue with ``sleep`` not returning correctly. The following workaround may resolve the issue: .. code-block:: shell mv /usr/bin/sleep /usr/bin/sleep.orig ln -s /bin/true /usr/bin/sleep Another option is to use WSL 2 if running Windows 10 later than build 2004. .. code-block:: shell wsl --set-default-version 2 Can I use SSH keys to authenticate to Windows hosts? ```````````````````````````````````````````````````` You cannot use SSH keys with the WinRM or PSRP connection plugins. These connection plugins use X509 certificates for authentication instead of the SSH key pairs that SSH uses. The way X509 certificates are generated and mapped to a user is different from the SSH implementation; consult the :ref:`windows_winrm` documentation for more information. Ansible 2.8 has added an experimental option to use the SSH connection plugin, which uses SSH keys for authentication, for Windows servers. See :ref:`this question ` for more information. .. _windows_faq_winrm: Why can I run a command locally that does not work under Ansible? ````````````````````````````````````````````````````````````````` Ansible executes commands through WinRM. These processes are different from running a command locally in these ways: * Unless using an authentication option like CredSSP or Kerberos with credential delegation, the WinRM process does not have the ability to delegate the user's credentials to a network resource, causing ``Access is Denied`` errors. * All processes run under WinRM are in a non-interactive session. Applications that require an interactive session will not work. * When running through WinRM, Windows restricts access to internal Windows APIs like the Windows Update API and DPAPI, which some installers and programs rely on. Some ways to bypass these restrictions are to: * Use ``become``, which runs a command as it would when run locally. This will bypass most WinRM restrictions, as Windows is unaware the process is running under WinRM when ``become`` is used. See the :ref:`become` documentation for more information. * Use a scheduled task, which can be created with ``win_scheduled_task``. Like ``become``, it will bypass all WinRM restrictions, but it can only be used to run commands, not modules. * Use ``win_psexec`` to run a command on the host. PSExec does not use WinRM and so will bypass any of the restrictions. * To access network resources without any of these workarounds, you can use CredSSP or Kerberos with credential delegation enabled. See :ref:`become` more info on how to use become. The limitations section at :ref:`windows_winrm` has more details around WinRM limitations. This program won't install on Windows with Ansible `````````````````````````````````````````````````` See :ref:`this question ` for more information about WinRM limitations. What Windows modules are available? ``````````````````````````````````` Most of the Ansible modules in Ansible Core are written for a combination of Linux/Unix machines and arbitrary web services. These modules are written in Python and most of them do not work on Windows. Because of this, there are dedicated Windows modules that are written in PowerShell and are meant to be run on Windows hosts. A list of these modules can be found :ref:`here `. In addition, the following Ansible Core modules/action-plugins work with Windows: * add_host * assert * async_status * debug * fail * fetch * group_by * include * include_role * include_vars * meta * pause * raw * script * set_fact * set_stats * setup * slurp * template (also: win_template) * wait_for_connection Can I run Python modules on Windows hosts? `````````````````````````````````````````` No, the WinRM connection protocol is set to use PowerShell modules, so Python modules will not work. A way to bypass this issue to use ``delegate_to: localhost`` to run a Python module on the Ansible controller. This is useful if during a playbook, an external service needs to be contacted and there is no equivalent Windows module available. .. _windows_faq_ssh: Can I connect to Windows hosts over SSH? ```````````````````````````````````````` Ansible 2.8 has added an experimental option to use the SSH connection plugin to manage Windows hosts. To connect to Windows hosts over SSH, you must install and configure the `Win32-OpenSSH `_ fork that is in development with Microsoft on the Windows host(s). While most of the basics should work with SSH, ``Win32-OpenSSH`` is rapidly changing, with new features added and bugs fixed in every release. It is highly recommend you `install `_ the latest release of ``Win32-OpenSSH`` from the GitHub Releases page when using it with Ansible on Windows hosts. To use SSH as the connection to a Windows host, set the following variables in the inventory: .. code-block:: shell ansible_connection=ssh # Set either cmd or powershell not both ansible_shell_type=cmd # ansible_shell_type=powershell The value for ``ansible_shell_type`` should either be ``cmd`` or ``powershell``. Use ``cmd`` if the ``DefaultShell`` has not been configured on the SSH service and ``powershell`` if that has been set as the ``DefaultShell``. Why is connecting to a Windows host via SSH failing? ```````````````````````````````````````````````````` Unless you are using ``Win32-OpenSSH`` as described above, you must connect to Windows hosts using :ref:`windows_winrm`. If your Ansible output indicates that SSH was used, either you did not set the connection vars properly or the host is not inheriting them correctly. Make sure ``ansible_connection: winrm`` is set in the inventory for the Windows host(s). Why are my credentials being rejected? `````````````````````````````````````` This can be due to a myriad of reasons unrelated to incorrect credentials. See HTTP 401/Credentials Rejected at :ref:`windows_setup` for a more detailed guide of this could mean. Why am I getting an error SSL CERTIFICATE_VERIFY_FAILED? ```````````````````````````````````````````````````````` When the Ansible controller is running on Python 2.7.9+ or an older version of Python that has backported SSLContext (like Python 2.7.5 on RHEL 7), the controller will attempt to validate the certificate WinRM is using for an HTTPS connection. If the certificate cannot be validated (such as in the case of a self signed cert), it will fail the verification process. To ignore certificate validation, add ``ansible_winrm_server_cert_validation: ignore`` to inventory for the Windows host. .. seealso:: :ref:`windows` The Windows documentation index :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5345562 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_performance.rst0000644000000000000000000000522700000000000026236 0ustar00rootroot00000000000000.. _windows_performance: Windows performance =================== This document offers some performance optimizations you might like to apply to your Windows hosts to speed them up specifically in the context of using Ansible with them, and generally. Optimize PowerShell performance to reduce Ansible task overhead --------------------------------------------------------------- To speed up the startup of PowerShell by around 10x, run the following PowerShell snippet in an Administrator session. Expect it to take tens of seconds. .. note:: If native images have already been created by the ngen task or service, you will observe no difference in performance (but this snippet will at that point execute faster than otherwise). .. code-block:: powershell function Optimize-PowershellAssemblies { # NGEN powershell assembly, improves startup time of powershell by 10x $old_path = $env:path try { $env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory() [AppDomain]::CurrentDomain.GetAssemblies() | % { if (! $_.location) {continue} $Name = Split-Path $_.location -leaf if ($Name.startswith("Microsoft.PowerShell.")) { Write-Progress -Activity "Native Image Installation" -Status "$name" ngen install $_.location | % {"`t$_"} } } } finally { $env:path = $old_path } } Optimize-PowershellAssemblies PowerShell is used by every Windows Ansible module. This optimization reduces the time PowerShell takes to start up, removing that overhead from every invocation. This snippet uses `the native image generator, ngen `_ to pre-emptively create native images for the assemblies that PowerShell relies on. Fix high-CPU-on-boot for VMs/cloud instances -------------------------------------------- If you are creating golden images to spawn instances from, you can avoid a disruptive high CPU task near startup via `processing the ngen queue `_ within your golden image creation, if you know the CPU types won't change between golden image build process and runtime. Place the following near the end of your playbook, bearing in mind the factors that can cause native images to be invalidated (`see MSDN `_). .. code-block:: yaml - name: generate native .NET images for CPU win_dotnet_ngen: ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5345562 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_setup.rst0000644000000000000000000006351500000000000025101 0ustar00rootroot00000000000000.. _windows_setup: Setting up a Windows Host ========================= This document discusses the setup that is required before Ansible can communicate with a Microsoft Windows host. .. contents:: :local: Host Requirements ````````````````` For Ansible to communicate to a Windows host and use Windows modules, the Windows host must meet these requirements: * Ansible can generally manage Windows versions under current and extended support from Microsoft. Ansible can manage desktop OSs including Windows 7, 8.1, and 10, and server OSs including Windows Server 2008, 2008 R2, 2012, 2012 R2, 2016, and 2019. * Ansible requires PowerShell 3.0 or newer and at least .NET 4.0 to be installed on the Windows host. * A WinRM listener should be created and activated. More details for this can be found below. .. Note:: While these are the base requirements for Ansible connectivity, some Ansible modules have additional requirements, such as a newer OS or PowerShell version. Please consult the module's documentation page to determine whether a host meets those requirements. Upgrading PowerShell and .NET Framework --------------------------------------- Ansible requires PowerShell version 3.0 and .NET Framework 4.0 or newer to function on older operating systems like Server 2008 and Windows 7. The base image does not meet this requirement. You can use the `Upgrade-PowerShell.ps1 `_ script to update these. This is an example of how to run this script from PowerShell: .. code-block:: powershell [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1" $file = "$env:temp\Upgrade-PowerShell.ps1" $username = "Administrator" $password = "Password" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force # Version can be 3.0, 4.0 or 5.1 &$file -Version 5.1 -Username $username -Password $password -Verbose Once completed, you will need to remove auto logon and set the execution policy back to the default (``Restricted `` for Windows clients, or ``RemoteSigned`` for Windows servers). You can do this with the following PowerShell commands: .. code-block:: powershell # This isn't needed but is a good security practice to complete Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force $reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0 Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue The script works by checking to see what programs need to be installed (such as .NET Framework 4.5.2) and what PowerShell version is required. If a reboot is required and the ``username`` and ``password`` parameters are set, the script will automatically reboot and logon when it comes back up from the reboot. The script will continue until no more actions are required and the PowerShell version matches the target version. If the ``username`` and ``password`` parameters are not set, the script will prompt the user to manually reboot and logon when required. When the user is next logged in, the script will continue where it left off and the process continues until no more actions are required. .. Note:: If running on Server 2008, then SP2 must be installed. If running on Server 2008 R2 or Windows 7, then SP1 must be installed. .. Note:: Windows Server 2008 can only install PowerShell 3.0; specifying a newer version will result in the script failing. .. Note:: The ``username`` and ``password`` parameters are stored in plain text in the registry. Make sure the cleanup commands are run after the script finishes to ensure no credentials are still stored on the host. WinRM Memory Hotfix ------------------- When running on PowerShell v3.0, there is a bug with the WinRM service that limits the amount of memory available to WinRM. Without this hotfix installed, Ansible will fail to execute certain commands on the Windows host. These hotfixes should be installed as part of the system bootstrapping or imaging process. The script `Install-WMF3Hotfix.ps1 `_ can be used to install the hotfix on affected hosts. The following PowerShell command will install the hotfix: .. code-block:: powershell [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Install-WMF3Hotfix.ps1" $file = "$env:temp\Install-WMF3Hotfix.ps1" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) powershell.exe -ExecutionPolicy ByPass -File $file -Verbose For more details, please refer to the `Hotfix document `_ from Microsoft. WinRM Setup ``````````` Once Powershell has been upgraded to at least version 3.0, the final step is for the WinRM service to be configured so that Ansible can connect to it. There are two main components of the WinRM service that governs how Ansible can interface with the Windows host: the ``listener`` and the ``service`` configuration settings. Details about each component can be read below, but the script `ConfigureRemotingForAnsible.ps1 `_ can be used to set up the basics. This script sets up both HTTP and HTTPS listeners with a self-signed certificate and enables the ``Basic`` authentication option on the service. To use this script, run the following in PowerShell: .. code-block:: powershell [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" $file = "$env:temp\ConfigureRemotingForAnsible.ps1" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) powershell.exe -ExecutionPolicy ByPass -File $file There are different switches and parameters (like ``-EnableCredSSP`` and ``-ForceNewSSLCert``) that can be set alongside this script. The documentation for these options are located at the top of the script itself. .. Note:: The ConfigureRemotingForAnsible.ps1 script is intended for training and development purposes only and should not be used in a production environment, since it enables settings (like ``Basic`` authentication) that can be inherently insecure. WinRM Listener -------------- The WinRM services listens for requests on one or more ports. Each of these ports must have a listener created and configured. To view the current listeners that are running on the WinRM service, run the following command: .. code-block:: powershell winrm enumerate winrm/config/Listener This will output something like: .. code-block:: powershell Listener Address = * Transport = HTTP Port = 5985 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.56.155, ::1, fe80::5efe:10.0.2.15%6, fe80::5efe:192.168.56.155%8, fe80:: ffff:ffff:fffe%2, fe80::203d:7d97:c2ed:ec78%3, fe80::e8ea:d765:2c69:7756%7 Listener Address = * Transport = HTTPS Port = 5986 Hostname = SERVER2016 Enabled = true URLPrefix = wsman CertificateThumbprint = E6CDAA82EEAF2ECE8546E05DB7F3E01AA47D76CE ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.56.155, ::1, fe80::5efe:10.0.2.15%6, fe80::5efe:192.168.56.155%8, fe80:: ffff:ffff:fffe%2, fe80::203d:7d97:c2ed:ec78%3, fe80::e8ea:d765:2c69:7756%7 In the example above there are two listeners activated; one is listening on port 5985 over HTTP and the other is listening on port 5986 over HTTPS. Some of the key options that are useful to understand are: * ``Transport``: Whether the listener is run over HTTP or HTTPS, it is recommended to use a listener over HTTPS as the data is encrypted without any further changes required. * ``Port``: The port the listener runs on, by default it is ``5985`` for HTTP and ``5986`` for HTTPS. This port can be changed to whatever is required and corresponds to the host var ``ansible_port``. * ``URLPrefix``: The URL prefix to listen on, by default it is ``wsman``. If this is changed, the host var ``ansible_winrm_path`` must be set to the same value. * ``CertificateThumbprint``: If running over an HTTPS listener, this is the thumbprint of the certificate in the Windows Certificate Store that is used in the connection. To get the details of the certificate itself, run this command with the relevant certificate thumbprint in PowerShell: .. code-block:: powershell $thumbprint = "E6CDAA82EEAF2ECE8546E05DB7F3E01AA47D76CE" Get-ChildItem -Path cert:\LocalMachine\My -Recurse | Where-Object { $_.Thumbprint -eq $thumbprint } | Select-Object * Setup WinRM Listener ++++++++++++++++++++ There are three ways to set up a WinRM listener: * Using ``winrm quickconfig`` for HTTP or ``winrm quickconfig -transport:https`` for HTTPS. This is the easiest option to use when running outside of a domain environment and a simple listener is required. Unlike the other options, this process also has the added benefit of opening up the Firewall for the ports required and starts the WinRM service. * Using Group Policy Objects. This is the best way to create a listener when the host is a member of a domain because the configuration is done automatically without any user input. For more information on group policy objects, see the `Group Policy Objects documentation `_. * Using PowerShell to create the listener with a specific configuration. This can be done by running the following PowerShell commands: .. code-block:: powershell $selector_set = @{ Address = "*" Transport = "HTTPS" } $value_set = @{ CertificateThumbprint = "E6CDAA82EEAF2ECE8546E05DB7F3E01AA47D76CE" } New-WSManInstance -ResourceURI "winrm/config/Listener" -SelectorSet $selector_set -ValueSet $value_set To see the other options with this PowerShell cmdlet, see `New-WSManInstance `_. .. Note:: When creating an HTTPS listener, an existing certificate needs to be created and stored in the ``LocalMachine\My`` certificate store. Without a certificate being present in this store, most commands will fail. Delete WinRM Listener +++++++++++++++++++++ To remove a WinRM listener: .. code-block:: powershell # Remove all listeners Remove-Item -Path WSMan:\localhost\Listener\* -Recurse -Force # Only remove listeners that are run over HTTPS Get-ChildItem -Path WSMan:\localhost\Listener | Where-Object { $_.Keys -contains "Transport=HTTPS" } | Remove-Item -Recurse -Force .. Note:: The ``Keys`` object is an array of strings, so it can contain different values. By default it contains a key for ``Transport=`` and ``Address=`` which correspond to the values from winrm enumerate winrm/config/Listeners. WinRM Service Options --------------------- There are a number of options that can be set to control the behavior of the WinRM service component, including authentication options and memory settings. To get an output of the current service configuration options, run the following command: .. code-block:: powershell winrm get winrm/config/Service winrm get winrm/config/Winrs This will output something like: .. code-block:: powershell Service RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) MaxConcurrentOperations = 4294967295 MaxConcurrentOperationsPerUser = 1500 EnumerationTimeoutms = 240000 MaxConnections = 300 MaxPacketRetrievalTimeSeconds = 120 AllowUnencrypted = false Auth Basic = true Kerberos = true Negotiate = true Certificate = true CredSSP = true CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true Winrs AllowRemoteShellAccess = true IdleTimeout = 7200000 MaxConcurrentUsers = 2147483647 MaxShellRunTime = 2147483647 MaxProcessesPerShell = 2147483647 MaxMemoryPerShellMB = 2147483647 MaxShellsPerUser = 2147483647 While many of these options should rarely be changed, a few can easily impact the operations over WinRM and are useful to understand. Some of the important options are: * ``Service\AllowUnencrypted``: This option defines whether WinRM will allow traffic that is run over HTTP without message encryption. Message level encryption is only possible when ``ansible_winrm_transport`` is ``ntlm``, ``kerberos`` or ``credssp``. By default this is ``false`` and should only be set to ``true`` when debugging WinRM messages. * ``Service\Auth\*``: These flags define what authentication options are allowed with the WinRM service. By default, ``Negotiate (NTLM)`` and ``Kerberos`` are enabled. * ``Service\Auth\CbtHardeningLevel``: Specifies whether channel binding tokens are not verified (None), verified but not required (Relaxed), or verified and required (Strict). CBT is only used when connecting with NTLM or Kerberos over HTTPS. * ``Service\CertificateThumbprint``: This is the thumbprint of the certificate used to encrypt the TLS channel used with CredSSP authentication. By default this is empty; a self-signed certificate is generated when the WinRM service starts and is used in the TLS process. * ``Winrs\MaxShellRunTime``: This is the maximum time, in milliseconds, that a remote command is allowed to execute. * ``Winrs\MaxMemoryPerShellMB``: This is the maximum amount of memory allocated per shell, including the shell's child processes. To modify a setting under the ``Service`` key in PowerShell: .. code-block:: powershell # substitute {path} with the path to the option after winrm/config/Service Set-Item -Path WSMan:\localhost\Service\{path} -Value "value here" # for example, to change Service\Auth\CbtHardeningLevel run Set-Item -Path WSMan:\localhost\Service\Auth\CbtHardeningLevel -Value Strict To modify a setting under the ``Winrs`` key in PowerShell: .. code-block:: powershell # Substitute {path} with the path to the option after winrm/config/Winrs Set-Item -Path WSMan:\localhost\Shell\{path} -Value "value here" # For example, to change Winrs\MaxShellRunTime run Set-Item -Path WSMan:\localhost\Shell\MaxShellRunTime -Value 2147483647 .. Note:: If running in a domain environment, some of these options are set by GPO and cannot be changed on the host itself. When a key has been configured with GPO, it contains the text ``[Source="GPO"]`` next to the value. Common WinRM Issues ------------------- Because WinRM has a wide range of configuration options, it can be difficult to setup and configure. Because of this complexity, issues that are shown by Ansible could in fact be issues with the host setup instead. One easy way to determine whether a problem is a host issue is to run the following command from another Windows host to connect to the target Windows host: .. code-block:: powershell # Test out HTTP winrs -r:http://server:5985/wsman -u:Username -p:Password ipconfig # Test out HTTPS (will fail if the cert is not verifiable) winrs -r:https://server:5986/wsman -u:Username -p:Password -ssl ipconfig # Test out HTTPS, ignoring certificate verification $username = "Username" $password = ConvertTo-SecureString -String "Password" -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password $session_option = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck Invoke-Command -ComputerName server -UseSSL -ScriptBlock { ipconfig } -Credential $cred -SessionOption $session_option If this fails, the issue is probably related to the WinRM setup. If it works, the issue may not be related to the WinRM setup; please continue reading for more troubleshooting suggestions. HTTP 401/Credentials Rejected +++++++++++++++++++++++++++++ A HTTP 401 error indicates the authentication process failed during the initial connection. Some things to check for this are: * Verify that the credentials are correct and set properly in your inventory with ``ansible_user`` and ``ansible_password`` * Ensure that the user is a member of the local Administrators group or has been explicitly granted access (a connection test with the ``winrs`` command can be used to rule this out). * Make sure that the authentication option set by ``ansible_winrm_transport`` is enabled under ``Service\Auth\*`` * If running over HTTP and not HTTPS, use ``ntlm``, ``kerberos`` or ``credssp`` with ``ansible_winrm_message_encryption: auto`` to enable message encryption. If using another authentication option or if the installed pywinrm version cannot be upgraded, the ``Service\AllowUnencrypted`` can be set to ``true`` but this is only recommended for troubleshooting * Ensure the downstream packages ``pywinrm``, ``requests-ntlm``, ``requests-kerberos``, and/or ``requests-credssp`` are up to date using ``pip``. * If using Kerberos authentication, ensure that ``Service\Auth\CbtHardeningLevel`` is not set to ``Strict``. * When using Basic or Certificate authentication, make sure that the user is a local account and not a domain account. Domain accounts do not work with Basic and Certificate authentication. HTTP 500 Error ++++++++++++++ These indicate an error has occurred with the WinRM service. Some things to check for include: * Verify that the number of current open shells has not exceeded either ``WinRsMaxShellsPerUser`` or any of the other Winrs quotas haven't been exceeded. Timeout Errors +++++++++++++++ These usually indicate an error with the network connection where Ansible is unable to reach the host. Some things to check for include: * Make sure the firewall is not set to block the configured WinRM listener ports * Ensure that a WinRM listener is enabled on the port and path set by the host vars * Ensure that the ``winrm`` service is running on the Windows host and configured for automatic start Connection Refused Errors +++++++++++++++++++++++++ These usually indicate an error when trying to communicate with the WinRM service on the host. Some things to check for: * Ensure that the WinRM service is up and running on the host. Use ``(Get-Service -Name winrm).Status`` to get the status of the service. * Check that the host firewall is allowing traffic over the WinRM port. By default this is ``5985`` for HTTP and ``5986`` for HTTPS. Sometimes an installer may restart the WinRM or HTTP service and cause this error. The best way to deal with this is to use ``win_psexec`` from another Windows host. Failure to Load Builtin Modules +++++++++++++++++++++++++++++++ If powershell fails with an error message similar to ``The 'Out-String' command was found in the module 'Microsoft.PowerShell.Utility', but the module could not be loaded.`` then there could be a problem trying to access all the paths specified by the ``PSModulePath`` environment variable. A common cause of this issue is that the ``PSModulePath`` environment variable contains a UNC path to a file share and because of the double hop/credential delegation issue the Ansible process cannot access these folders. The way around this problems is to either: * Remove the UNC path from the ``PSModulePath`` environment variable, or * Use an authentication option that supports credential delegation like ``credssp`` or ``kerberos`` with credential delegation enabled See `KB4076842 `_ for more information on this problem. Windows SSH Setup ````````````````` Ansible 2.8 has added an experimental SSH connection for Windows managed nodes. .. warning:: Use this feature at your own risk! Using SSH with Windows is experimental, the implementation may make backwards incompatible changes in feature releases. The server side components can be unreliable depending on the version that is installed. Installing OpenSSH using Windows Settings ----------------------------------------- OpenSSH can be used to connect Window 10 clients to Windows Server 2019. OpenSSH Client is available to install on Windows 10 build 1809 and later, while OpenSSH Server is available to install on Windows Server 2019 and later. Please refer `this guide `_. Installing Win32-OpenSSH ------------------------ The first step to using SSH with Windows is to install the `Win32-OpenSSH `_ service on the Windows host. Microsoft offers a way to install ``Win32-OpenSSH`` through a Windows capability but currently the version that is installed through this process is too old to work with Ansible. To install ``Win32-OpenSSH`` for use with Ansible, select one of these installation options: * Manually install the service, following the `install instructions `_ from Microsoft. * Install the `openssh `_ package using Chocolatey: .. code-block:: powershell choco install --package-parameters=/SSHServerFeature openssh * Use ``win_chocolatey`` to install the service .. code-block:: yaml - name: install the Win32-OpenSSH service win_chocolatey: name: openssh package_params: /SSHServerFeature state: present * Use an existing Ansible Galaxy role like `jborean93.win_openssh `_: .. code-block:: powershell # Make sure the role has been downloaded first ansible-galaxy install jborean93.win_openssh .. code-block:: yaml # main.yml - name: install Win32-OpenSSH service hosts: windows gather_facts: no roles: - role: jborean93.win_openssh opt_openssh_setup_service: True .. note:: ``Win32-OpenSSH`` is still a beta product and is constantly being updated to include new features and bugfixes. If you are using SSH as a connection option for Windows, it is highly recommend you install the latest release from one of the 3 methods above. Configuring the Win32-OpenSSH shell ----------------------------------- By default ``Win32-OpenSSH`` will use ``cmd.exe`` as a shell. To configure a different shell, use an Ansible task to define the registry setting: .. code-block:: yaml - name: set the default shell to PowerShell win_regedit: path: HKLM:\SOFTWARE\OpenSSH name: DefaultShell data: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe type: string state: present # Or revert the settings back to the default, cmd - name: set the default shell to cmd win_regedit: path: HKLM:\SOFTWARE\OpenSSH name: DefaultShell state: absent Win32-OpenSSH Authentication ---------------------------- Win32-OpenSSH authentication with Windows is similar to SSH authentication on Unix/Linux hosts. You can use a plaintext password or SSH public key authentication, add public keys to an ``authorized_key`` file in the ``.ssh`` folder of the user's profile directory, and configure the service using the ``sshd_config`` file used by the SSH service as you would on a Unix/Linux host. When using SSH key authentication with Ansible, the remote session won't have access to the user's credentials and will fail when attempting to access a network resource. This is also known as the double-hop or credential delegation issue. There are two ways to work around this issue: * Use plaintext password auth by setting ``ansible_password`` * Use ``become`` on the task with the credentials of the user that needs access to the remote resource Configuring Ansible for SSH on Windows -------------------------------------- To configure Ansible to use SSH for Windows hosts, you must set two connection variables: * set ``ansible_connection`` to ``ssh`` * set ``ansible_shell_type`` to ``cmd`` or ``powershell`` The ``ansible_shell_type`` variable should reflect the ``DefaultShell`` configured on the Windows host. Set to ``cmd`` for the default shell or set to ``powershell`` if the ``DefaultShell`` has been changed to PowerShell. Known issues with SSH on Windows -------------------------------- Using SSH with Windows is experimental, and we expect to uncover more issues. Here are the known ones: * Win32-OpenSSH versions older than ``v7.9.0.0p1-Beta`` do not work when ``powershell`` is the shell type * While SCP should work, SFTP is the recommended SSH file transfer mechanism to use when copying or fetching a file .. seealso:: :ref:`about_playbooks` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`List of Windows Modules ` Windows specific module list, all implemented in PowerShell `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5345562 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_usage.rst0000644000000000000000000004336400000000000025045 0ustar00rootroot00000000000000Using Ansible and Windows ========================= When using Ansible to manage Windows, many of the syntax and rules that apply for Unix/Linux hosts also apply to Windows, but there are still some differences when it comes to components like path separators and OS-specific tasks. This document covers details specific to using Ansible for Windows. .. contents:: Topics :local: Use Cases ````````` Ansible can be used to orchestrate a multitude of tasks on Windows servers. Below are some examples and info about common tasks. Installing Software ------------------- There are three main ways that Ansible can be used to install software: * Using the ``win_chocolatey`` module. This sources the program data from the default public `Chocolatey `_ repository. Internal repositories can be used instead by setting the ``source`` option. * Using the ``win_package`` module. This installs software using an MSI or .exe installer from a local/network path or URL. * Using the ``win_command`` or ``win_shell`` module to run an installer manually. The ``win_chocolatey`` module is recommended since it has the most complete logic for checking to see if a package has already been installed and is up-to-date. Below are some examples of using all three options to install 7-Zip: .. code-block:: yaml+jinja # Install/uninstall with chocolatey - name: Ensure 7-Zip is installed via Chocolatey win_chocolatey: name: 7zip state: present - name: Ensure 7-Zip is not installed via Chocolatey win_chocolatey: name: 7zip state: absent # Install/uninstall with win_package - name: Download the 7-Zip package win_get_url: url: https://www.7-zip.org/a/7z1701-x64.msi dest: C:\temp\7z.msi - name: Ensure 7-Zip is installed via win_package win_package: path: C:\temp\7z.msi state: present - name: Ensure 7-Zip is not installed via win_package win_package: path: C:\temp\7z.msi state: absent # Install/uninstall with win_command - name: Download the 7-Zip package win_get_url: url: https://www.7-zip.org/a/7z1701-x64.msi dest: C:\temp\7z.msi - name: Check if 7-Zip is already installed win_reg_stat: name: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2702-1701-000001000000} register: 7zip_installed - name: Ensure 7-Zip is installed via win_command win_command: C:\Windows\System32\msiexec.exe /i C:\temp\7z.msi /qn /norestart when: 7zip_installed.exists == false - name: Ensure 7-Zip is uninstalled via win_command win_command: C:\Windows\System32\msiexec.exe /x {23170F69-40C1-2702-1701-000001000000} /qn /norestart when: 7zip_installed.exists == true Some installers like Microsoft Office or SQL Server require credential delegation or access to components restricted by WinRM. The best method to bypass these issues is to use ``become`` with the task. With ``become``, Ansible will run the installer as if it were run interactively on the host. .. Note:: Many installers do not properly pass back error information over WinRM. In these cases, if the install has been verified to work locally the recommended method is to use become. .. Note:: Some installers restart the WinRM or HTTP services, or cause them to become temporarily unavailable, making Ansible assume the system is unreachable. Installing Updates ------------------ The ``win_updates`` and ``win_hotfix`` modules can be used to install updates or hotfixes on a host. The module ``win_updates`` is used to install multiple updates by category, while ``win_hotfix`` can be used to install a single update or hotfix file that has been downloaded locally. .. Note:: The ``win_hotfix`` module has a requirement that the DISM PowerShell cmdlets are present. These cmdlets were only added by default on Windows Server 2012 and newer and must be installed on older Windows hosts. The following example shows how ``win_updates`` can be used: .. code-block:: yaml+jinja - name: Install all critical and security updates win_updates: category_names: - CriticalUpdates - SecurityUpdates state: installed register: update_result - name: Reboot host if required win_reboot: when: update_result.reboot_required The following example show how ``win_hotfix`` can be used to install a single update or hotfix: .. code-block:: yaml+jinja - name: Download KB3172729 for Server 2012 R2 win_get_url: url: http://download.windowsupdate.com/d/msdownload/update/software/secu/2016/07/windows8.1-kb3172729-x64_e8003822a7ef4705cbb65623b72fd3cec73fe222.msu dest: C:\temp\KB3172729.msu - name: Install hotfix win_hotfix: hotfix_kb: KB3172729 source: C:\temp\KB3172729.msu state: present register: hotfix_result - name: Reboot host if required win_reboot: when: hotfix_result.reboot_required Set Up Users and Groups ----------------------- Ansible can be used to create Windows users and groups both locally and on a domain. Local +++++ The modules ``win_user``, ``win_group`` and ``win_group_membership`` manage Windows users, groups and group memberships locally. The following is an example of creating local accounts and groups that can access a folder on the same host: .. code-block:: yaml+jinja - name: Create local group to contain new users win_group: name: LocalGroup description: Allow access to C:\Development folder - name: Create local user win_user: name: '{{ item.name }}' password: '{{ item.password }}' groups: LocalGroup update_password: no password_never_expires: yes loop: - name: User1 password: Password1 - name: User2 password: Password2 - name: Create Development folder win_file: path: C:\Development state: directory - name: Set ACL of Development folder win_acl: path: C:\Development rights: FullControl state: present type: allow user: LocalGroup - name: Remove parent inheritance of Development folder win_acl_inheritance: path: C:\Development reorganize: yes state: absent Domain ++++++ The modules ``win_domain_user`` and ``win_domain_group`` manages users and groups in a domain. The below is an example of ensuring a batch of domain users are created: .. code-block:: yaml+jinja - name: Ensure each account is created win_domain_user: name: '{{ item.name }}' upn: '{{ item.name }}@MY.DOMAIN.COM' password: '{{ item.password }}' password_never_expires: no groups: - Test User - Application company: Ansible update_password: on_create loop: - name: Test User password: Password - name: Admin User password: SuperSecretPass01 - name: Dev User password: '@fvr3IbFBujSRh!3hBg%wgFucD8^x8W5' Running Commands ---------------- In cases where there is no appropriate module available for a task, a command or script can be run using the ``win_shell``, ``win_command``, ``raw``, and ``script`` modules. The ``raw`` module simply executes a Powershell command remotely. Since ``raw`` has none of the wrappers that Ansible typically uses, ``become``, ``async`` and environment variables do not work. The ``script`` module executes a script from the Ansible controller on one or more Windows hosts. Like ``raw``, ``script`` currently does not support ``become``, ``async``, or environment variables. The ``win_command`` module is used to execute a command which is either an executable or batch file, while the ``win_shell`` module is used to execute commands within a shell. Choosing Command or Shell +++++++++++++++++++++++++ The ``win_shell`` and ``win_command`` modules can both be used to execute a command or commands. The ``win_shell`` module is run within a shell-like process like ``PowerShell`` or ``cmd``, so it has access to shell operators like ``<``, ``>``, ``|``, ``;``, ``&&``, and ``||``. Multi-lined commands can also be run in ``win_shell``. The ``win_command`` module simply runs a process outside of a shell. It can still run a shell command like ``mkdir`` or ``New-Item`` by passing the shell commands to a shell executable like ``cmd.exe`` or ``PowerShell.exe``. Here are some examples of using ``win_command`` and ``win_shell``: .. code-block:: yaml+jinja - name: Run a command under PowerShell win_shell: Get-Service -Name service | Stop-Service - name: Run a command under cmd win_shell: mkdir C:\temp args: executable: cmd.exe - name: Run a multiple shell commands win_shell: | New-Item -Path C:\temp -ItemType Directory Remove-Item -Path C:\temp -Force -Recurse $path_info = Get-Item -Path C:\temp $path_info.FullName - name: Run an executable using win_command win_command: whoami.exe - name: Run a cmd command win_command: cmd.exe /c mkdir C:\temp - name: Run a vbs script win_command: cscript.exe script.vbs .. Note:: Some commands like ``mkdir``, ``del``, and ``copy`` only exist in the CMD shell. To run them with ``win_command`` they must be prefixed with ``cmd.exe /c``. Argument Rules ++++++++++++++ When running a command through ``win_command``, the standard Windows argument rules apply: * Each argument is delimited by a white space, which can either be a space or a tab. * An argument can be surrounded by double quotes ``"``. Anything inside these quotes is interpreted as a single argument even if it contains whitespace. * A double quote preceded by a backslash ``\`` is interpreted as just a double quote ``"`` and not as an argument delimiter. * Backslashes are interpreted literally unless it immediately precedes double quotes; for example ``\`` == ``\`` and ``\"`` == ``"`` * If an even number of backslashes is followed by a double quote, one backslash is used in the argument for every pair, and the double quote is used as a string delimiter for the argument. * If an odd number of backslashes is followed by a double quote, one backslash is used in the argument for every pair, and the double quote is escaped and made a literal double quote in the argument. With those rules in mind, here are some examples of quoting: .. code-block:: yaml+jinja - win_command: C:\temp\executable.exe argument1 "argument 2" "C:\path\with space" "double \"quoted\"" argv[0] = C:\temp\executable.exe argv[1] = argument1 argv[2] = argument 2 argv[3] = C:\path\with space argv[4] = double "quoted" - win_command: '"C:\Program Files\Program\program.exe" "escaped \\\" backslash" unquoted-end-backslash\' argv[0] = C:\Program Files\Program\program.exe argv[1] = escaped \" backslash argv[2] = unquoted-end-backslash\ # Due to YAML and Ansible parsing '\"' must be written as '{% raw %}\\{% endraw %}"' - win_command: C:\temp\executable.exe C:\no\space\path "arg with end \ before end quote{% raw %}\\{% endraw %}" argv[0] = C:\temp\executable.exe argv[1] = C:\no\space\path argv[2] = arg with end \ before end quote\" For more information, see `escaping arguments `_. Creating and Running a Scheduled Task ------------------------------------- WinRM has some restrictions in place that cause errors when running certain commands. One way to bypass these restrictions is to run a command through a scheduled task. A scheduled task is a Windows component that provides the ability to run an executable on a schedule and under a different account. Ansible version 2.5 added modules that make it easier to work with scheduled tasks in Windows. The following is an example of running a script as a scheduled task that deletes itself after running: .. code-block:: yaml+jinja - name: Create scheduled task to run a process win_scheduled_task: name: adhoc-task username: SYSTEM actions: - path: PowerShell.exe arguments: | Start-Sleep -Seconds 30 # This isn't required, just here as a demonstration New-Item -Path C:\temp\test -ItemType Directory # Remove this action if the task shouldn't be deleted on completion - path: cmd.exe arguments: /c schtasks.exe /Delete /TN "adhoc-task" /F triggers: - type: registration - name: Wait for the scheduled task to complete win_scheduled_task_stat: name: adhoc-task register: task_stat until: (task_stat.state is defined and task_stat.state.status != "TASK_STATE_RUNNING") or (task_stat.task_exists == False) retries: 12 delay: 10 .. Note:: The modules used in the above example were updated/added in Ansible version 2.5. Path Formatting for Windows ``````````````````````````` Windows differs from a traditional POSIX operating system in many ways. One of the major changes is the shift from ``/`` as the path separator to ``\``. This can cause major issues with how playbooks are written, since ``\`` is often used as an escape character on POSIX systems. Ansible allows two different styles of syntax; each deals with path separators for Windows differently: YAML Style ---------- When using the YAML syntax for tasks, the rules are well-defined by the YAML standard: * When using a normal string (without quotes), YAML will not consider the backslash an escape character. * When using single quotes ``'``, YAML will not consider the backslash an escape character. * When using double quotes ``"``, the backslash is considered an escape character and needs to escaped with another backslash. .. Note:: You should only quote strings when it is absolutely necessary or required by YAML, and then use single quotes. The YAML specification considers the following `escape sequences `_: * ``\0``, ``\\``, ``\"``, ``\_``, ``\a``, ``\b``, ``\e``, ``\f``, ``\n``, ``\r``, ``\t``, ``\v``, ``\L``, ``\N`` and ``\P`` -- Single character escape * ````, ````, ````, ````, ```` -- Special characters * ``\x..`` -- 2-digit hex escape * ``\u....`` -- 4-digit hex escape * ``\U........`` -- 8-digit hex escape Here are some examples on how to write Windows paths: .. code-block:: ini # GOOD tempdir: C:\Windows\Temp # WORKS tempdir: 'C:\Windows\Temp' tempdir: "C:\\Windows\\Temp" # BAD, BUT SOMETIMES WORKS tempdir: C:\\Windows\\Temp tempdir: 'C:\\Windows\\Temp' tempdir: C:/Windows/Temp This is an example which will fail: .. code-block:: text # FAILS tempdir: "C:\Windows\Temp" This example shows the use of single quotes when they are required: .. code-block:: yaml+jinja --- - name: Copy tomcat config win_copy: src: log4j.xml dest: '{{tc_home}}\lib\log4j.xml' Legacy key=value Style ---------------------- The legacy ``key=value`` syntax is used on the command line for ad hoc commands, or inside playbooks. The use of this style is discouraged within playbooks because backslash characters need to be escaped, making playbooks harder to read. The legacy syntax depends on the specific implementation in Ansible, and quoting (both single and double) does not have any effect on how it is parsed by Ansible. The Ansible key=value parser parse_kv() considers the following escape sequences: * ``\``, ``'``, ``"``, ``\a``, ``\b``, ``\f``, ``\n``, ``\r``, ``\t`` and ``\v`` -- Single character escape * ``\x..`` -- 2-digit hex escape * ``\u....`` -- 4-digit hex escape * ``\U........`` -- 8-digit hex escape * ``\N{...}`` -- Unicode character by name This means that the backslash is an escape character for some sequences, and it is usually safer to escape a backslash when in this form. Here are some examples of using Windows paths with the key=value style: .. code-block:: ini # GOOD tempdir=C:\\Windows\\Temp # WORKS tempdir='C:\\Windows\\Temp' tempdir="C:\\Windows\\Temp" # BAD, BUT SOMETIMES WORKS tempdir=C:\Windows\Temp tempdir='C:\Windows\Temp' tempdir="C:\Windows\Temp" tempdir=C:/Windows/Temp # FAILS tempdir=C:\Windows\temp tempdir='C:\Windows\temp' tempdir="C:\Windows\temp" The failing examples don't fail outright but will substitute ``\t`` with the ```` character resulting in ``tempdir`` being ``C:\Windowsemp``. Limitations ``````````` Some things you cannot do with Ansible and Windows are: * Upgrade PowerShell * Interact with the WinRM listeners Because WinRM is reliant on the services being online and running during normal operations, you cannot upgrade PowerShell or interact with WinRM listeners with Ansible. Both of these actions will cause the connection to fail. This can technically be avoided by using ``async`` or a scheduled task, but those methods are fragile if the process it runs breaks the underlying connection Ansible uses, and are best left to the bootstrapping process or before an image is created. Developing Windows Modules `````````````````````````` Because Ansible modules for Windows are written in PowerShell, the development guides for Windows modules differ substantially from those for standard standard modules. Please see :ref:`developing_modules_general_windows` for more information. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`List of Windows Modules ` Windows specific module list, all implemented in PowerShell `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/rst/user_guide/windows_winrm.rst0000644000000000000000000011253100000000000025066 0ustar00rootroot00000000000000.. _windows_winrm: Windows Remote Management ========================= Unlike Linux/Unix hosts, which use SSH by default, Windows hosts are configured with WinRM. This topic covers how to configure and use WinRM with Ansible. .. contents:: Topics :local: What is WinRM? `````````````` WinRM is a management protocol used by Windows to remotely communicate with another server. It is a SOAP-based protocol that communicates over HTTP/HTTPS, and is included in all recent Windows operating systems. Since Windows Server 2012, WinRM has been enabled by default, but in most cases extra configuration is required to use WinRM with Ansible. Ansible uses the `pywinrm `_ package to communicate with Windows servers over WinRM. It is not installed by default with the Ansible package, but can be installed by running the following: .. code-block:: shell pip install "pywinrm>=0.3.0" .. Note:: on distributions with multiple python versions, use pip2 or pip2.x, where x matches the python minor version Ansible is running under. .. Warning:: Using the ``winrm`` or ``psrp`` connection plugins in Ansible on MacOS in the latest releases typically fail. This is a known problem that occurs deep within the Python stack and cannot be changed by Ansible. The only workaround today is to set the environment variable ``no_proxy=*`` and avoid using Kerberos auth. Authentication Options `````````````````````` When connecting to a Windows host, there are several different options that can be used when authenticating with an account. The authentication type may be set on inventory hosts or groups with the ``ansible_winrm_transport`` variable. The following matrix is a high level overview of the options: +-------------+----------------+---------------------------+-----------------------+-----------------+ | Option | Local Accounts | Active Directory Accounts | Credential Delegation | HTTP Encryption | +=============+================+===========================+=======================+=================+ | Basic | Yes | No | No | No | +-------------+----------------+---------------------------+-----------------------+-----------------+ | Certificate | Yes | No | No | No | +-------------+----------------+---------------------------+-----------------------+-----------------+ | Kerberos | No | Yes | Yes | Yes | +-------------+----------------+---------------------------+-----------------------+-----------------+ | NTLM | Yes | Yes | No | Yes | +-------------+----------------+---------------------------+-----------------------+-----------------+ | CredSSP | Yes | Yes | Yes | Yes | +-------------+----------------+---------------------------+-----------------------+-----------------+ Basic ----- Basic authentication is one of the simplest authentication options to use, but is also the most insecure. This is because the username and password are simply base64 encoded, and if a secure channel is not in use (eg, HTTPS) then it can be decoded by anyone. Basic authentication can only be used for local accounts (not domain accounts). The following example shows host vars configured for basic authentication: .. code-block:: yaml+jinja ansible_user: LocalUsername ansible_password: Password ansible_connection: winrm ansible_winrm_transport: basic Basic authentication is not enabled by default on a Windows host but can be enabled by running the following in PowerShell: .. code-block:: powershell Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true Certificate ----------- Certificate authentication uses certificates as keys similar to SSH key pairs, but the file format and key generation process is different. The following example shows host vars configured for certificate authentication: .. code-block:: yaml+jinja ansible_connection: winrm ansible_winrm_cert_pem: /path/to/certificate/public/key.pem ansible_winrm_cert_key_pem: /path/to/certificate/private/key.pem ansible_winrm_transport: certificate Certificate authentication is not enabled by default on a Windows host but can be enabled by running the following in PowerShell: .. code-block:: powershell Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true .. Note:: Encrypted private keys cannot be used as the urllib3 library that is used by Ansible for WinRM does not support this functionality. Generate a Certificate ++++++++++++++++++++++ A certificate must be generated before it can be mapped to a local user. This can be done using one of the following methods: * OpenSSL * PowerShell, using the ``New-SelfSignedCertificate`` cmdlet * Active Directory Certificate Services Active Directory Certificate Services is beyond of scope in this documentation but may be the best option to use when running in a domain environment. For more information, see the `Active Directory Certificate Services documentation `_. .. Note:: Using the PowerShell cmdlet ``New-SelfSignedCertificate`` to generate a certificate for authentication only works when being generated from a Windows 10 or Windows Server 2012 R2 host or later. OpenSSL is still required to extract the private key from the PFX certificate to a PEM file for Ansible to use. To generate a certificate with ``OpenSSL``: .. code-block:: shell # Set the name of the local user that will have the key mapped to USERNAME="username" cat > openssl.conf << EOL distinguished_name = req_distinguished_name [req_distinguished_name] [v3_req_client] extendedKeyUsage = clientAuth subjectAltName = otherName:1.3.6.1.4.1.311.20.2.3;UTF8:$USERNAME@localhost EOL export OPENSSL_CONF=openssl.conf openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -out cert.pem -outform PEM -keyout cert_key.pem -subj "/CN=$USERNAME" -extensions v3_req_client rm openssl.conf To generate a certificate with ``New-SelfSignedCertificate``: .. code-block:: powershell # Set the name of the local user that will have the key mapped $username = "username" $output_path = "C:\temp" # Instead of generating a file, the cert will be added to the personal # LocalComputer folder in the certificate store $cert = New-SelfSignedCertificate -Type Custom ` -Subject "CN=$username" ` -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2","2.5.29.17={text}upn=$username@localhost") ` -KeyUsage DigitalSignature,KeyEncipherment ` -KeyAlgorithm RSA ` -KeyLength 2048 # Export the public key $pem_output = @() $pem_output += "-----BEGIN CERTIFICATE-----" $pem_output += [System.Convert]::ToBase64String($cert.RawData) -replace ".{64}", "$&`n" $pem_output += "-----END CERTIFICATE-----" [System.IO.File]::WriteAllLines("$output_path\cert.pem", $pem_output) # Export the private key in a PFX file [System.IO.File]::WriteAllBytes("$output_path\cert.pfx", $cert.Export("Pfx")) .. Note:: To convert the PFX file to a private key that pywinrm can use, run the following command with OpenSSL ``openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert_key.pem -passin pass: -passout pass:`` Import a Certificate to the Certificate Store +++++++++++++++++++++++++++++++++++++++++++++ Once a certificate has been generated, the issuing certificate needs to be imported into the ``Trusted Root Certificate Authorities`` of the ``LocalMachine`` store, and the client certificate public key must be present in the ``Trusted People`` folder of the ``LocalMachine`` store. For this example, both the issuing certificate and public key are the same. Following example shows how to import the issuing certificate: .. code-block:: powershell $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 $cert.Import("cert.pem") $store_name = [System.Security.Cryptography.X509Certificates.StoreName]::Root $store_location = [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine $store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $store_name, $store_location $store.Open("MaxAllowed") $store.Add($cert) $store.Close() .. Note:: If using ADCS to generate the certificate, then the issuing certificate will already be imported and this step can be skipped. The code to import the client certificate public key is: .. code-block:: powershell $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 $cert.Import("cert.pem") $store_name = [System.Security.Cryptography.X509Certificates.StoreName]::TrustedPeople $store_location = [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine $store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $store_name, $store_location $store.Open("MaxAllowed") $store.Add($cert) $store.Close() Mapping a Certificate to an Account +++++++++++++++++++++++++++++++++++ Once the certificate has been imported, map it to the local user account: .. code-block:: powershell $username = "username" $password = ConvertTo-SecureString -String "password" -AsPlainText -Force $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password # This is the issuer thumbprint which in the case of a self generated cert # is the public key thumbprint, additional logic may be required for other # scenarios $thumbprint = (Get-ChildItem -Path cert:\LocalMachine\root | Where-Object { $_.Subject -eq "CN=$username" }).Thumbprint New-Item -Path WSMan:\localhost\ClientCertificate ` -Subject "$username@localhost" ` -URI * ` -Issuer $thumbprint ` -Credential $credential ` -Force Once this is complete, the hostvar ``ansible_winrm_cert_pem`` should be set to the path of the public key and the ``ansible_winrm_cert_key_pem`` variable should be set to the path of the private key. NTLM ---- NTLM is an older authentication mechanism used by Microsoft that can support both local and domain accounts. NTLM is enabled by default on the WinRM service, so no setup is required before using it. NTLM is the easiest authentication protocol to use and is more secure than ``Basic`` authentication. If running in a domain environment, ``Kerberos`` should be used instead of NTLM. Kerberos has several advantages over using NTLM: * NTLM is an older protocol and does not support newer encryption protocols. * NTLM is slower to authenticate because it requires more round trips to the host in the authentication stage. * Unlike Kerberos, NTLM does not allow credential delegation. This example shows host variables configured to use NTLM authentication: .. code-block:: yaml+jinja ansible_user: LocalUsername ansible_password: Password ansible_connection: winrm ansible_winrm_transport: ntlm Kerberos -------- Kerberos is the recommended authentication option to use when running in a domain environment. Kerberos supports features like credential delegation and message encryption over HTTP and is one of the more secure options that is available through WinRM. Kerberos requires some additional setup work on the Ansible host before it can be used properly. The following example shows host vars configured for Kerberos authentication: .. code-block:: yaml+jinja ansible_user: username@MY.DOMAIN.COM ansible_password: Password ansible_connection: winrm ansible_port: 5985 ansible_winrm_transport: kerberos As of Ansible version 2.3, the Kerberos ticket will be created based on ``ansible_user`` and ``ansible_password``. If running on an older version of Ansible or when ``ansible_winrm_kinit_mode`` is ``manual``, a Kerberos ticket must already be obtained. See below for more details. There are some extra host variables that can be set: .. code-block:: yaml ansible_winrm_kinit_mode: managed/manual (manual means Ansible will not obtain a ticket) ansible_winrm_kinit_cmd: the kinit binary to use to obtain a Kerberos ticket (default to kinit) ansible_winrm_service: overrides the SPN prefix that is used, the default is ``HTTP`` and should rarely ever need changing ansible_winrm_kerberos_delegation: allows the credentials to traverse multiple hops ansible_winrm_kerberos_hostname_override: the hostname to be used for the kerberos exchange Installing the Kerberos Library +++++++++++++++++++++++++++++++ Some system dependencies that must be installed prior to using Kerberos. The script below lists the dependencies based on the distro: .. code-block:: shell # Via Yum (RHEL/Centos/Fedora) yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation # Via Apt (Ubuntu) sudo apt-get install python-dev libkrb5-dev krb5-user # Via Portage (Gentoo) emerge -av app-crypt/mit-krb5 emerge -av dev-python/setuptools # Via Pkg (FreeBSD) sudo pkg install security/krb5 # Via OpenCSW (Solaris) pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U /opt/csw/bin/pkgutil -y -i libkrb5_3 # Via Pacman (Arch Linux) pacman -S krb5 Once the dependencies have been installed, the ``python-kerberos`` wrapper can be install using ``pip``: .. code-block:: shell pip install pywinrm[kerberos] .. note:: While Ansible has supported Kerberos auth through ``pywinrm`` for some time, optional features or more secure options may only be available in newer versions of the ``pywinrm`` and/or ``pykerberos`` libraries. It is recommended you upgrade each version to the latest available to resolve any warnings or errors. This can be done through tools like ``pip`` or a system package manager like ``dnf``, ``yum``, ``apt`` but the package names and versions available may differ between tools. Configuring Host Kerberos +++++++++++++++++++++++++ Once the dependencies have been installed, Kerberos needs to be configured so that it can communicate with a domain. This configuration is done through the ``/etc/krb5.conf`` file, which is installed with the packages in the script above. To configure Kerberos, in the section that starts with: .. code-block:: ini [realms] Add the full domain name and the fully qualified domain names of the primary and secondary Active Directory domain controllers. It should look something like this: .. code-block:: ini [realms] MY.DOMAIN.COM = { kdc = domain-controller1.my.domain.com kdc = domain-controller2.my.domain.com } In the section that starts with: .. code-block:: ini [domain_realm] Add a line like the following for each domain that Ansible needs access for: .. code-block:: ini [domain_realm] .my.domain.com = MY.DOMAIN.COM You can configure other settings in this file such as the default domain. See `krb5.conf `_ for more details. Automatic Kerberos Ticket Management ++++++++++++++++++++++++++++++++++++ Ansible version 2.3 and later defaults to automatically managing Kerberos tickets when both ``ansible_user`` and ``ansible_password`` are specified for a host. In this process, a new ticket is created in a temporary credential cache for each host. This is done before each task executes to minimize the chance of ticket expiration. The temporary credential caches are deleted after each task completes and will not interfere with the default credential cache. To disable automatic ticket management, set ``ansible_winrm_kinit_mode=manual`` via the inventory. Automatic ticket management requires a standard ``kinit`` binary on the control host system path. To specify a different location or binary name, set the ``ansible_winrm_kinit_cmd`` hostvar to the fully qualified path to a MIT krbv5 ``kinit``-compatible binary. Manual Kerberos Ticket Management +++++++++++++++++++++++++++++++++ To manually manage Kerberos tickets, the ``kinit`` binary is used. To obtain a new ticket the following command is used: .. code-block:: shell kinit username@MY.DOMAIN.COM .. Note:: The domain must match the configured Kerberos realm exactly, and must be in upper case. To see what tickets (if any) have been acquired, use the following command: .. code-block:: shell klist To destroy all the tickets that have been acquired, use the following command: .. code-block:: shell kdestroy Troubleshooting Kerberos ++++++++++++++++++++++++ Kerberos is reliant on a properly-configured environment to work. To troubleshoot Kerberos issues, ensure that: * The hostname set for the Windows host is the FQDN and not an IP address. * The forward and reverse DNS lookups are working properly in the domain. To test this, ping the windows host by name and then use the ip address returned with ``nslookup``. The same name should be returned when using ``nslookup`` on the IP address. * The Ansible host's clock is synchronized with the domain controller. Kerberos is time sensitive, and a little clock drift can cause the ticket generation process to fail. * Ensure that the fully qualified domain name for the domain is configured in the ``krb5.conf`` file. To check this, run: .. code-block:: console kinit -C username@MY.DOMAIN.COM klist If the domain name returned by ``klist`` is different from the one requested, an alias is being used. The ``krb5.conf`` file needs to be updated so that the fully qualified domain name is used and not an alias. * If the default kerberos tooling has been replaced or modified (some IdM solutions may do this), this may cause issues when installing or upgrading the Python Kerberos library. As of the time of this writing, this library is called ``pykerberos`` and is known to work with both MIT and Heimdal Kerberos libraries. To resolve ``pykerberos`` installation issues, ensure the system dependencies for Kerberos have been met (see: `Installing the Kerberos Library`_), remove any custom Kerberos tooling paths from the PATH environment variable, and retry the installation of Python Kerberos library package. CredSSP ------- CredSSP authentication is a newer authentication protocol that allows credential delegation. This is achieved by encrypting the username and password after authentication has succeeded and sending that to the server using the CredSSP protocol. Because the username and password are sent to the server to be used for double hop authentication, ensure that the hosts that the Windows host communicates with are not compromised and are trusted. CredSSP can be used for both local and domain accounts and also supports message encryption over HTTP. To use CredSSP authentication, the host vars are configured like so: .. code-block:: yaml+jinja ansible_user: Username ansible_password: Password ansible_connection: winrm ansible_winrm_transport: credssp There are some extra host variables that can be set as shown below: .. code-block:: yaml ansible_winrm_credssp_disable_tlsv1_2: when true, will not use TLS 1.2 in the CredSSP auth process CredSSP authentication is not enabled by default on a Windows host, but can be enabled by running the following in PowerShell: .. code-block:: powershell Enable-WSManCredSSP -Role Server -Force Installing CredSSP Library ++++++++++++++++++++++++++ The ``requests-credssp`` wrapper can be installed using ``pip``: .. code-block:: bash pip install pywinrm[credssp] CredSSP and TLS 1.2 +++++++++++++++++++ By default the ``requests-credssp`` library is configured to authenticate over the TLS 1.2 protocol. TLS 1.2 is installed and enabled by default for Windows Server 2012 and Windows 8 and more recent releases. There are two ways that older hosts can be used with CredSSP: * Install and enable a hotfix to enable TLS 1.2 support (recommended for Server 2008 R2 and Windows 7). * Set ``ansible_winrm_credssp_disable_tlsv1_2=True`` in the inventory to run over TLS 1.0. This is the only option when connecting to Windows Server 2008, which has no way of supporting TLS 1.2 See :ref:`winrm_tls12` for more information on how to enable TLS 1.2 on the Windows host. Set CredSSP Certificate +++++++++++++++++++++++ CredSSP works by encrypting the credentials through the TLS protocol and uses a self-signed certificate by default. The ``CertificateThumbprint`` option under the WinRM service configuration can be used to specify the thumbprint of another certificate. .. Note:: This certificate configuration is independent of the WinRM listener certificate. With CredSSP, message transport still occurs over the WinRM listener, but the TLS-encrypted messages inside the channel use the service-level certificate. To explicitly set the certificate to use for CredSSP: .. code-block:: powershell # Note the value $certificate_thumbprint will be different in each # situation, this needs to be set based on the cert that is used. $certificate_thumbprint = "7C8DCBD5427AFEE6560F4AF524E325915F51172C" # Set the thumbprint value Set-Item -Path WSMan:\localhost\Service\CertificateThumbprint -Value $certificate_thumbprint Non-Administrator Accounts `````````````````````````` WinRM is configured by default to only allow connections from accounts in the local ``Administrators`` group. This can be changed by running: .. code-block:: powershell winrm configSDDL default This will display an ACL editor, where new users or groups may be added. To run commands over WinRM, users and groups must have at least the ``Read`` and ``Execute`` permissions enabled. While non-administrative accounts can be used with WinRM, most typical server administration tasks require some level of administrative access, so the utility is usually limited. WinRM Encryption ```````````````` By default WinRM will fail to work when running over an unencrypted channel. The WinRM protocol considers the channel to be encrypted if using TLS over HTTP (HTTPS) or using message level encryption. Using WinRM with TLS is the recommended option as it works with all authentication options, but requires a certificate to be created and used on the WinRM listener. The ``ConfigureRemotingForAnsible.ps1`` creates a self-signed certificate and creates the listener with that certificate. If in a domain environment, ADCS can also create a certificate for the host that is issued by the domain itself. If using HTTPS is not an option, then HTTP can be used when the authentication option is ``NTLM``, ``Kerberos`` or ``CredSSP``. These protocols will encrypt the WinRM payload with their own encryption method before sending it to the server. The message-level encryption is not used when running over HTTPS because the encryption uses the more secure TLS protocol instead. If both transport and message encryption is required, set ``ansible_winrm_message_encryption=always`` in the host vars. .. Note:: Message encryption over HTTP requires pywinrm>=0.3.0. A last resort is to disable the encryption requirement on the Windows host. This should only be used for development and debugging purposes, as anything sent from Ansible can be viewed, manipulated and also the remote session can completely be taken over by anyone on the same network. To disable the encryption requirement: .. code-block:: powershell Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $true .. Note:: Do not disable the encryption check unless it is absolutely required. Doing so could allow sensitive information like credentials and files to be intercepted by others on the network. Inventory Options ````````````````` Ansible's Windows support relies on a few standard variables to indicate the username, password, and connection type of the remote hosts. These variables are most easily set up in the inventory, but can be set on the ``host_vars``/ ``group_vars`` level. When setting up the inventory, the following variables are required: .. code-block:: yaml+jinja # It is suggested that these be encrypted with ansible-vault: # ansible-vault edit group_vars/windows.yml ansible_connection: winrm # May also be passed on the command-line via --user ansible_user: Administrator # May also be supplied at runtime with --ask-pass ansible_password: SecretPasswordGoesHere Using the variables above, Ansible will connect to the Windows host with Basic authentication through HTTPS. If ``ansible_user`` has a UPN value like ``username@MY.DOMAIN.COM`` then the authentication option will automatically attempt to use Kerberos unless ``ansible_winrm_transport`` has been set to something other than ``kerberos``. The following custom inventory variables are also supported for additional configuration of WinRM connections: * ``ansible_port``: The port WinRM will run over, HTTPS is ``5986`` which is the default while HTTP is ``5985`` * ``ansible_winrm_scheme``: Specify the connection scheme (``http`` or ``https``) to use for the WinRM connection. Ansible uses ``https`` by default unless ``ansible_port`` is ``5985`` * ``ansible_winrm_path``: Specify an alternate path to the WinRM endpoint, Ansible uses ``/wsman`` by default * ``ansible_winrm_realm``: Specify the realm to use for Kerberos authentication. If ``ansible_user`` contains ``@``, Ansible will use the part of the username after ``@`` by default * ``ansible_winrm_transport``: Specify one or more authentication transport options as a comma-separated list. By default, Ansible will use ``kerberos, basic`` if the ``kerberos`` module is installed and a realm is defined, otherwise it will be ``plaintext`` * ``ansible_winrm_server_cert_validation``: Specify the server certificate validation mode (``ignore`` or ``validate``). Ansible defaults to ``validate`` on Python 2.7.9 and higher, which will result in certificate validation errors against the Windows self-signed certificates. Unless verifiable certificates have been configured on the WinRM listeners, this should be set to ``ignore`` * ``ansible_winrm_operation_timeout_sec``: Increase the default timeout for WinRM operations, Ansible uses ``20`` by default * ``ansible_winrm_read_timeout_sec``: Increase the WinRM read timeout, Ansible uses ``30`` by default. Useful if there are intermittent network issues and read timeout errors keep occurring * ``ansible_winrm_message_encryption``: Specify the message encryption operation (``auto``, ``always``, ``never``) to use, Ansible uses ``auto`` by default. ``auto`` means message encryption is only used when ``ansible_winrm_scheme`` is ``http`` and ``ansible_winrm_transport`` supports message encryption. ``always`` means message encryption will always be used and ``never`` means message encryption will never be used * ``ansible_winrm_ca_trust_path``: Used to specify a different cacert container than the one used in the ``certifi`` module. See the HTTPS Certificate Validation section for more details. * ``ansible_winrm_send_cbt``: When using ``ntlm`` or ``kerberos`` over HTTPS, the authentication library will try to send channel binding tokens to mitigate against man in the middle attacks. This flag controls whether these bindings will be sent or not (default: ``yes``). * ``ansible_winrm_*``: Any additional keyword arguments supported by ``winrm.Protocol`` may be provided in place of ``*`` In addition, there are also specific variables that need to be set for each authentication option. See the section on authentication above for more information. .. Note:: Ansible 2.0 has deprecated the "ssh" from ``ansible_ssh_user``, ``ansible_ssh_pass``, ``ansible_ssh_host``, and ``ansible_ssh_port`` to become ``ansible_user``, ``ansible_password``, ``ansible_host``, and ``ansible_port``. If using a version of Ansible prior to 2.0, the older style (``ansible_ssh_*``) should be used instead. The shorter variables are ignored, without warning, in older versions of Ansible. .. Note:: ``ansible_winrm_message_encryption`` is different from transport encryption done over TLS. The WinRM payload is still encrypted with TLS when run over HTTPS, even if ``ansible_winrm_message_encryption=never``. IPv6 Addresses `````````````` IPv6 addresses can be used instead of IPv4 addresses or hostnames. This option is normally set in an inventory. Ansible will attempt to parse the address using the `ipaddress `_ package and pass to pywinrm correctly. When defining a host using an IPv6 address, just add the IPv6 address as you would an IPv4 address or hostname: .. code-block:: ini [windows-server] 2001:db8::1 [windows-server:vars] ansible_user=username ansible_password=password ansible_connection=winrm .. Note:: The ipaddress library is only included by default in Python 3.x. To use IPv6 addresses in Python 2.7, make sure to run ``pip install ipaddress`` which installs a backported package. HTTPS Certificate Validation ```````````````````````````` As part of the TLS protocol, the certificate is validated to ensure the host matches the subject and the client trusts the issuer of the server certificate. When using a self-signed certificate or setting ``ansible_winrm_server_cert_validation: ignore`` these security mechanisms are bypassed. While self signed certificates will always need the ``ignore`` flag, certificates that have been issued from a certificate authority can still be validated. One of the more common ways of setting up a HTTPS listener in a domain environment is to use Active Directory Certificate Service (AD CS). AD CS is used to generate signed certificates from a Certificate Signing Request (CSR). If the WinRM HTTPS listener is using a certificate that has been signed by another authority, like AD CS, then Ansible can be set up to trust that issuer as part of the TLS handshake. To get Ansible to trust a Certificate Authority (CA) like AD CS, the issuer certificate of the CA can be exported as a PEM encoded certificate. This certificate can then be copied locally to the Ansible controller and used as a source of certificate validation, otherwise known as a CA chain. The CA chain can contain a single or multiple issuer certificates and each entry is contained on a new line. To then use the custom CA chain as part of the validation process, set ``ansible_winrm_ca_trust_path`` to the path of the file. If this variable is not set, the default CA chain is used instead which is located in the install path of the Python package `certifi `_. .. Note:: Each HTTP call is done by the Python requests library which does not use the systems built-in certificate store as a trust authority. Certificate validation will fail if the server's certificate issuer is only added to the system's truststore. .. _winrm_tls12: TLS 1.2 Support ``````````````` As WinRM runs over the HTTP protocol, using HTTPS means that the TLS protocol is used to encrypt the WinRM messages. TLS will automatically attempt to negotiate the best protocol and cipher suite that is available to both the client and the server. If a match cannot be found then Ansible will error out with a message similar to: .. code-block:: ansible-output HTTPSConnectionPool(host='server', port=5986): Max retries exceeded with url: /wsman (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1056)'))) Commonly this is when the Windows host has not been configured to support TLS v1.2 but it could also mean the Ansible controller has an older OpenSSL version installed. Windows 8 and Windows Server 2012 come with TLS v1.2 installed and enabled by default but older hosts, like Server 2008 R2 and Windows 7, have to be enabled manually. .. Note:: There is a bug with the TLS 1.2 patch for Server 2008 which will stop Ansible from connecting to the Windows host. This means that Server 2008 cannot be configured to use TLS 1.2. Server 2008 R2 and Windows 7 are not affected by this issue and can use TLS 1.2. To verify what protocol the Windows host supports, you can run the following command on the Ansible controller: .. code-block:: shell openssl s_client -connect :5986 The output will contain information about the TLS session and the ``Protocol`` line will display the version that was negotiated: .. code-block:: console New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1 Cipher : ECDHE-RSA-AES256-SHA Session-ID: 962A00001C95D2A601BE1CCFA7831B85A7EEE897AECDBF3D9ECD4A3BE4F6AC9B Session-ID-ctx: Master-Key: .... Start Time: 1552976474 Timeout : 7200 (sec) Verify return code: 21 (unable to verify the first certificate) --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: AE16000050DA9FD44D03BB8839B64449805D9E43DBD670346D3D9E05D1AEEA84 Session-ID-ctx: Master-Key: .... Start Time: 1552976538 Timeout : 7200 (sec) Verify return code: 21 (unable to verify the first certificate) If the host is returning ``TLSv1`` then it should be configured so that TLS v1.2 is enable. You can do this by running the following PowerShell script: .. code-block:: powershell Function Enable-TLS12 { param( [ValidateSet("Server", "Client")] [String]$Component = "Server" ) $protocols_path = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols' New-Item -Path "$protocols_path\TLS 1.2\$Component" -Force New-ItemProperty -Path "$protocols_path\TLS 1.2\$Component" -Name Enabled -Value 1 -Type DWORD -Force New-ItemProperty -Path "$protocols_path\TLS 1.2\$Component" -Name DisabledByDefault -Value 0 -Type DWORD -Force } Enable-TLS12 -Component Server # Not required but highly recommended to enable the Client side TLS 1.2 components Enable-TLS12 -Component Client Restart-Computer The below Ansible tasks can also be used to enable TLS v1.2: .. code-block:: yaml+jinja - name: enable TLSv1.2 support win_regedit: path: HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\{{ item.type }} name: '{{ item.property }}' data: '{{ item.value }}' type: dword state: present register: enable_tls12 loop: - type: Server property: Enabled value: 1 - type: Server property: DisabledByDefault value: 0 - type: Client property: Enabled value: 1 - type: Client property: DisabledByDefault value: 0 - name: reboot if TLS config was applied win_reboot: when: enable_tls12 is changed There are other ways to configure the TLS protocols as well as the cipher suites that are offered by the Windows host. One tool that can give you a GUI to manage these settings is `IIS Crypto `_ from Nartac Software. Limitations ``````````` Due to the design of the WinRM protocol , there are a few limitations when using WinRM that can cause issues when creating playbooks for Ansible. These include: * Credentials are not delegated for most authentication types, which causes authentication errors when accessing network resources or installing certain programs. * Many calls to the Windows Update API are blocked when running over WinRM. * Some programs fail to install with WinRM due to no credential delegation or because they access forbidden Windows API like WUA over WinRM. * Commands under WinRM are done under a non-interactive session, which can prevent certain commands or executables from running. * You cannot run a process that interacts with ``DPAPI``, which is used by some installers (like Microsoft SQL Server). Some of these limitations can be mitigated by doing one of the following: * Set ``ansible_winrm_transport`` to ``credssp`` or ``kerberos`` (with ``ansible_winrm_kerberos_delegation=true``) to bypass the double hop issue and access network resources * Use ``become`` to bypass all WinRM restrictions and run a command as it would locally. Unlike using an authentication transport like ``credssp``, this will also remove the non-interactive restriction and API restrictions like WUA and DPAPI * Use a scheduled task to run a command which can be created with the ``win_scheduled_task`` module. Like ``become``, this bypasses all WinRM restrictions but can only run a command and not modules. .. seealso:: :ref:`playbooks_intro` An introduction to playbooks :ref:`playbooks_best_practices` Tips and tricks for playbooks :ref:`List of Windows Modules ` Windows specific module list, all implemented in PowerShell `User Mailing List `_ Have a question? Stop by the google group! :ref:`communication_irc` How to join Ansible chat channels ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/docsite/sphinx_conf/0000755000000000000000000000000000000000000020776 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/sphinx_conf/2.10_conf.py0000644000000000000000000002456100000000000022745 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # documentation build configuration file, created by # sphinx-quickstart on Sat Sep 27 13:23:22 2008-2009. # # This file is execfile()d with the current directory set to its # containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed # automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys import os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # sys.path.append(os.path.abspath('some/directory')) # sys.path.insert(0, os.path.join('ansible', 'lib')) # We want sphinx to document the ansible modules contained in this repository, # not those that may happen to be installed in the version # of Python used to run sphinx. When sphinx loads in order to document, # the repository version needs to be the one that is loaded: sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..', 'lib'))) VERSION = '2.10' AUTHOR = 'Ansible, Inc' # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. # They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # TEST: 'sphinxcontrib.fulltoc' extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'notfound.extension', 'sphinx_antsibull_ext', # provides CSS for the plugin/module docs generated by antsibull ] # Later on, add 'sphinx.ext.viewcode' to the list if you want to have # colorized code generated too for references. # Add any paths that contain templates here, relative to this directory. templates_path = ['../.templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. root_doc = master_doc = 'index' # Sphinx 4+ / 3- # General substitutions. project = 'Ansible' copyright = "Ansible project contributors" # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = VERSION # The full version, including alpha/beta/rc tags. release = VERSION # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. # unused_docs = [] # List of directories, relative to source directories, that shouldn't be # searched for source files. # exclude_dirs = [] # A list of glob-style patterns that should be excluded when looking # for source files. exclude_patterns = [ '2.10_index.rst', 'ansible_index.rst', 'core_index.rst', 'porting_guides/core_porting_guides', ] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'ansible' highlight_language = 'YAML+Jinja' # Substitutions, variables, entities, & shortcuts for text which do not need to link to anything. # For titles which should be a link, use the intersphinx anchors set at the index, chapter, and section levels, such as qi_start_: # |br| is useful for formatting fields inside of tables # |_| is a nonbreaking space; similarly useful inside of tables rst_epilog = """ .. |br| raw:: html
    .. |_| unicode:: 0xA0 :trim: """ # Options for HTML output # ----------------------- html_theme_path = [] html_theme = 'sphinx_ansible_theme' html_show_sphinx = False html_theme_options = { 'canonical_url': "https://docs.ansible.com/ansible/latest/", 'hubspot_id': '330046', 'satellite_tracking': True, 'show_extranav': True, 'swift_id': 'yABGvz2N8PwcwBxyfzUc', 'tag_manager_id': 'GTM-PSB293', 'vcs_pageview_mode': 'edit' } html_context = { 'display_github': 'True', 'show_sphinx': False, 'is_eol': False, 'github_user': 'ansible', 'github_repo': 'ansible', 'github_version': 'devel/docs/docsite/rst/', 'github_module_version': 'devel/lib/ansible/modules/', 'github_root_dir': 'devel/lib/ansible', 'github_cli_version': 'devel/lib/ansible/cli/', 'current_version': version, 'latest_version': '2.10', # list specifically out of order to make latest work 'available_versions': ('latest', '2.9', '2.9_ja', '2.8', 'devel'), } # Add extra CSS styles to the resulting HTML pages html_css_files = [] # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. # html_style = 'solar.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = 'Ansible Documentation' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = 'Documentation' # The name of an image file (within the static path) to place at the top of # the sidebar. # html_logo = # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = 'favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['../_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = 'https://docs.ansible.com/ansible/latest' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Poseidodoc' # Configuration for sphinx-notfound-pages # with no 'notfound_template' and no 'notfound_context' set, # the extension builds 404.rst into a location-agnostic 404 page # # default is `en` - using this for the sub-site: notfound_default_language = "ansible" # default is `latest`: # setting explicitly - docsite serves up /ansible/latest/404.html # so keep this set to `latest` even on the `devel` branch # then no maintenance is needed when we branch a new stable_x.x notfound_default_version = "latest" # makes default setting explicit: notfound_no_urls_prefix = False # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class # [howto/manual]). latex_documents = [ ('index', 'ansible.tex', 'Ansible 2.2 Documentation', AUTHOR, 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True autoclass_content = 'both' # Note: Our strategy for intersphinx mappings is to have the upstream build location as the # canonical source and then cached copies of the mapping stored locally in case someone is building # when disconnected from the internet. We then have a script to update the cached copies. # # Because of that, each entry in this mapping should have this format: # name: ('http://UPSTREAM_URL', (None, 'path/to/local/cache.inv')) # # The update script depends on this format so deviating from this (for instance, adding a third # location for the mappning to live) will confuse it. intersphinx_mapping = {'python': ('https://docs.python.org/2/', (None, '../python2.inv')), 'python3': ('https://docs.python.org/3/', (None, '../python3.inv')), 'jinja2': ('http://jinja.palletsprojects.com/', (None, '../jinja2.inv')), 'ansible_2_10': ('https://docs.ansible.com/ansible/2.10/', (None, '../ansible_2_10.inv')), 'ansible_2_9': ('https://docs.ansible.com/ansible/2.9/', (None, '../ansible_2_9.inv')), 'ansible_2_8': ('https://docs.ansible.com/ansible/2.8/', (None, '../ansible_2_8.inv')), 'ansible_2_7': ('https://docs.ansible.com/ansible/2.7/', (None, '../ansible_2_7.inv')), 'ansible_2_6': ('https://docs.ansible.com/ansible/2.6/', (None, '../ansible_2_6.inv')), 'ansible_2_5': ('https://docs.ansible.com/ansible/2.5/', (None, '../ansible_2_5.inv')), } # linckchecker settings linkcheck_ignore = [ ] linkcheck_workers = 25 # linkcheck_anchors = False ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/sphinx_conf/all_conf.py0000644000000000000000000002467200000000000023140 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # documentation build configuration file, created by # sphinx-quickstart on Sat Sep 27 13:23:22 2008-2009. # # This file is execfile()d with the current directory set to its # containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed # automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys import os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # sys.path.append(os.path.abspath('some/directory')) # sys.path.insert(0, os.path.join('ansible', 'lib')) # We want sphinx to document the ansible modules contained in this repository, # not those that may happen to be installed in the version # of Python used to run sphinx. When sphinx loads in order to document, # the repository version needs to be the one that is loaded: sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..', 'lib'))) VERSION = 'devel' AUTHOR = 'Ansible, Inc' # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. # They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # TEST: 'sphinxcontrib.fulltoc' extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'notfound.extension', 'sphinx_antsibull_ext', # provides CSS for the plugin/module docs generated by antsibull ] # Later on, add 'sphinx.ext.viewcode' to the list if you want to have # colorized code generated too for references. # Add any paths that contain templates here, relative to this directory. templates_path = ['../.templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. root_doc = master_doc = 'index' # Sphinx 4+ / 3- # General substitutions. project = 'Ansible' copyright = "Ansible project contributors" # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = VERSION # The full version, including alpha/beta/rc tags. release = VERSION # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. # unused_docs = [] # List of directories, relative to source directories, that shouldn't be # searched for source files. # exclude_dirs = [] # A list of glob-style patterns that should be excluded when looking # for source files. exclude_patterns = [ ] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'ansible' highlight_language = 'YAML+Jinja' # Substitutions, variables, entities, & shortcuts for text which do not need to link to anything. # For titles which should be a link, use the intersphinx anchors set at the index, chapter, and section levels, such as qi_start_: # |br| is useful for formatting fields inside of tables # |_| is a nonbreaking space; similarly useful inside of tables rst_epilog = """ .. |br| raw:: html
    .. |_| unicode:: 0xA0 :trim: """ # Options for HTML output # ----------------------- html_theme_path = [] html_theme = 'sphinx_ansible_theme' html_show_sphinx = False html_theme_options = { 'canonical_url': "https://docs.ansible.com/ansible/latest/", 'hubspot_id': '330046', 'satellite_tracking': True, 'show_extranav': True, 'swift_id': 'yABGvz2N8PwcwBxyfzUc', 'tag_manager_id': 'GTM-PSB293', 'vcs_pageview_mode': 'edit' } html_context = { 'display_github': 'True', 'show_sphinx': False, 'is_eol': False, 'github_user': 'ansible', 'github_repo': 'ansible', 'github_version': 'devel/docs/docsite/rst/', 'github_module_version': 'devel/lib/ansible/modules/', 'github_root_dir': 'devel/lib/ansible', 'github_cli_version': 'devel/lib/ansible/cli/', 'current_version': version, 'latest_version': 'devel', # list specifically out of order to make latest work 'available_versions': ('devel',), } # Add extra CSS styles to the resulting HTML pages html_css_files = [] # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. # html_style = 'solar.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = 'Ansible Core Documentation' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = 'Documentation' # The name of an image file (within the static path) to place at the top of # the sidebar. # html_logo = # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = 'favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['../_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = 'https://docs.ansible.com/ansible/latest' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Poseidodoc' # Configuration for sphinx-notfound-pages # with no 'notfound_template' and no 'notfound_context' set, # the extension builds 404.rst into a location-agnostic 404 page # # default is `en` - using this for the sub-site: notfound_default_language = "ansible" # default is `latest`: # setting explicitly - docsite serves up /ansible/latest/404.html # so keep this set to `latest` even on the `devel` branch # then no maintenance is needed when we branch a new stable_x.x notfound_default_version = "latest" # makes default setting explicit: notfound_no_urls_prefix = False # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class # [howto/manual]). latex_documents = [ ('index', 'ansible.tex', 'Ansible 2.2 Documentation', AUTHOR, 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True autoclass_content = 'both' # Note: Our strategy for intersphinx mappings is to have the upstream build location as the # canonical source and then cached copies of the mapping stored locally in case someone is building # when disconnected from the internet. We then have a script to update the cached copies. # # Because of that, each entry in this mapping should have this format: # name: ('http://UPSTREAM_URL', (None, 'path/to/local/cache.inv')) # # The update script depends on this format so deviating from this (for instance, adding a third # location for the mappning to live) will confuse it. intersphinx_mapping = {'python': ('https://docs.python.org/2/', (None, '../python2.inv')), 'python3': ('https://docs.python.org/3/', (None, '../python3.inv')), 'jinja2': ('http://jinja.palletsprojects.com/', (None, '../jinja2.inv')), 'ansible_4': ('https://docs.ansible.com/ansible/4/', (None, '../ansible_4.inv')), 'ansible_3': ('https://docs.ansible.com/ansible/3/', (None, '../ansible_3.inv')), 'ansible_2_10': ('https://docs.ansible.com/ansible/2.10/', (None, '../ansible_2_10.inv')), 'ansible_2_9': ('https://docs.ansible.com/ansible/2.9/', (None, '../ansible_2_9.inv')), 'ansible_2_8': ('https://docs.ansible.com/ansible/2.8/', (None, '../ansible_2_8.inv')), 'ansible_2_7': ('https://docs.ansible.com/ansible/2.7/', (None, '../ansible_2_7.inv')), 'ansible_2_6': ('https://docs.ansible.com/ansible/2.6/', (None, '../ansible_2_6.inv')), 'ansible_2_5': ('https://docs.ansible.com/ansible/2.5/', (None, '../ansible_2_5.inv')), } # linckchecker settings linkcheck_ignore = [ ] linkcheck_workers = 25 # linkcheck_anchors = False ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/sphinx_conf/ansible_conf.py0000644000000000000000000002536400000000000024004 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # documentation build configuration file, created by # sphinx-quickstart on Sat Sep 27 13:23:22 2008-2009. # # This file is execfile()d with the current directory set to its # containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed # automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys import os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # sys.path.append(os.path.abspath('some/directory')) # sys.path.insert(0, os.path.join('ansible', 'lib')) # We want sphinx to document the ansible modules contained in this repository, # not those that may happen to be installed in the version # of Python used to run sphinx. When sphinx loads in order to document, # the repository version needs to be the one that is loaded: sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..', 'lib'))) VERSION = 'devel' AUTHOR = 'Ansible, Inc' # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. # They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # TEST: 'sphinxcontrib.fulltoc' extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'notfound.extension', 'sphinx_antsibull_ext', # provides CSS for the plugin/module docs generated by antsibull ] # Later on, add 'sphinx.ext.viewcode' to the list if you want to have # colorized code generated too for references. # Add any paths that contain templates here, relative to this directory. templates_path = ['../.templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. root_doc = master_doc = 'index' # Sphinx 4+ / 3- # General substitutions. project = 'Ansible' copyright = "Ansible project contributors" # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = VERSION # The full version, including alpha/beta/rc tags. release = VERSION # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. # unused_docs = [] # List of directories, relative to source directories, that shouldn't be # searched for source files. # exclude_dirs = [] # A list of glob-style patterns that should be excluded when looking # for source files. exclude_patterns = [ '2.10_index.rst', 'ansible_index.rst', 'core_index.rst', 'porting_guides/core_porting_guides.rst', 'porting_guides/porting_guide_base_2.10.rst', 'porting_guides/porting_guide_core_*', 'roadmap/index.rst', 'roadmap/ansible_core_roadmap_index.rst', 'roadmap/ROADMAP_2_1*', ] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'ansible' highlight_language = 'YAML+Jinja' # Substitutions, variables, entities, & shortcuts for text which do not need to link to anything. # For titles which should be a link, use the intersphinx anchors set at the index, chapter, and section levels, such as qi_start_: # |br| is useful for formatting fields inside of tables # |_| is a nonbreaking space; similarly useful inside of tables rst_epilog = """ .. |br| raw:: html
    .. |_| unicode:: 0xA0 :trim: """ # Options for HTML output # ----------------------- html_theme_path = [] html_theme = 'sphinx_ansible_theme' html_show_sphinx = False html_theme_options = { 'canonical_url': "https://docs.ansible.com/ansible/latest/", 'hubspot_id': '330046', 'satellite_tracking': True, 'show_extranav': True, 'swift_id': 'yABGvz2N8PwcwBxyfzUc', 'tag_manager_id': 'GTM-PSB293', 'vcs_pageview_mode': 'edit' } html_context = { 'display_github': 'True', 'show_sphinx': False, 'is_eol': False, 'github_user': 'ansible', 'github_repo': 'ansible', 'github_version': 'devel/docs/docsite/rst/', 'github_module_version': 'devel/lib/ansible/modules/', 'github_root_dir': 'devel/lib/ansible', 'github_cli_version': 'devel/lib/ansible/cli/', 'current_version': version, 'latest_version': '4', # list specifically out of order to make latest work 'available_versions': ('latest', '2.9', 'devel'), } # Add extra CSS styles to the resulting HTML pages html_css_files = [] # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. # html_style = 'solar.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = 'Ansible Documentation' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = 'Documentation' # The name of an image file (within the static path) to place at the top of # the sidebar. # html_logo = # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = 'favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['../_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = 'https://docs.ansible.com/ansible/latest' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Poseidodoc' # Configuration for sphinx-notfound-pages # with no 'notfound_template' and no 'notfound_context' set, # the extension builds 404.rst into a location-agnostic 404 page # # default is `en` - using this for the sub-site: notfound_default_language = "ansible" # default is `latest`: # setting explicitly - docsite serves up /ansible/latest/404.html # so keep this set to `latest` even on the `devel` branch # then no maintenance is needed when we branch a new stable_x.x notfound_default_version = "latest" # makes default setting explicit: notfound_no_urls_prefix = False # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class # [howto/manual]). latex_documents = [ ('index', 'ansible.tex', 'Ansible 2.2 Documentation', AUTHOR, 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True autoclass_content = 'both' # Note: Our strategy for intersphinx mappings is to have the upstream build location as the # canonical source and then cached copies of the mapping stored locally in case someone is building # when disconnected from the internet. We then have a script to update the cached copies. # # Because of that, each entry in this mapping should have this format: # name: ('http://UPSTREAM_URL', (None, 'path/to/local/cache.inv')) # # The update script depends on this format so deviating from this (for instance, adding a third # location for the mappning to live) will confuse it. intersphinx_mapping = {'python': ('https://docs.python.org/2/', (None, '../python2.inv')), 'python3': ('https://docs.python.org/3/', (None, '../python3.inv')), 'jinja2': ('http://jinja.palletsprojects.com/', (None, '../jinja2.inv')), 'ansible_4': ('https://docs.ansible.com/ansible/4/', (None, '../ansible_4.inv')), 'ansible_3': ('https://docs.ansible.com/ansible/3/', (None, '../ansible_3.inv')), 'ansible_2_10': ('https://docs.ansible.com/ansible/2.10/', (None, '../ansible_2_10.inv')), 'ansible_2_9': ('https://docs.ansible.com/ansible/2.9/', (None, '../ansible_2_9.inv')), 'ansible_2_8': ('https://docs.ansible.com/ansible/2.8/', (None, '../ansible_2_8.inv')), 'ansible_2_7': ('https://docs.ansible.com/ansible/2.7/', (None, '../ansible_2_7.inv')), 'ansible_2_6': ('https://docs.ansible.com/ansible/2.6/', (None, '../ansible_2_6.inv')), 'ansible_2_5': ('https://docs.ansible.com/ansible/2.5/', (None, '../ansible_2_5.inv')), } # linckchecker settings linkcheck_ignore = [ ] linkcheck_workers = 25 # linkcheck_anchors = False ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/sphinx_conf/core_conf.py0000644000000000000000000002604500000000000023314 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # documentation build configuration file, created by # sphinx-quickstart on Sat Sep 27 13:23:22 2008-2009. # # This file is execfile()d with the current directory set to its # containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed # automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys import os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. # sys.path.append(os.path.abspath('some/directory')) # sys.path.insert(0, os.path.join('ansible', 'lib')) # We want sphinx to document the ansible modules contained in this repository, # not those that may happen to be installed in the version # of Python used to run sphinx. When sphinx loads in order to document, # the repository version needs to be the one that is loaded: sys.path.insert(0, os.path.abspath(os.path.join('..', '..', '..', 'lib'))) VERSION = 'devel' AUTHOR = 'Ansible, Inc' # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. # They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # TEST: 'sphinxcontrib.fulltoc' extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'notfound.extension', 'sphinx_antsibull_ext', # provides CSS for the plugin/module docs generated by antsibull ] # Later on, add 'sphinx.ext.viewcode' to the list if you want to have # colorized code generated too for references. # Add any paths that contain templates here, relative to this directory. templates_path = ['../.templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. root_doc = master_doc = 'index' # Sphinx 4+ / 3- # General substitutions. project = 'Ansible' copyright = "Ansible project contributors" # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = VERSION # The full version, including alpha/beta/rc tags. release = VERSION # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. # unused_docs = [] # List of directories, relative to source directories, that shouldn't be # searched for source files. # exclude_dirs = [] # A list of glob-style patterns that should be excluded when looking # for source files. exclude_patterns = [ '2.10_index.rst', 'ansible_index.rst', 'core_index.rst', 'galaxy', 'network', 'scenario_guides', 'porting_guides/porting_guides.rst', 'porting_guides/porting_guide_2*', 'porting_guides/porting_guide_3.rst', 'porting_guides/porting_guide_4.rst', 'roadmap/index.rst', 'roadmap/ansible_roadmap_index.rst', 'roadmap/old_roadmap_index.rst', 'roadmap/ROADMAP_2_5.rst', 'roadmap/ROADMAP_2_6.rst', 'roadmap/ROADMAP_2_7.rst', 'roadmap/ROADMAP_2_8.rst', 'roadmap/ROADMAP_2_9.rst', 'roadmap/COLLECTIONS*' ] # The reST default role (used for this markup: `text`) to use for all # documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'ansible' highlight_language = 'YAML+Jinja' # Substitutions, variables, entities, & shortcuts for text which do not need to link to anything. # For titles which should be a link, use the intersphinx anchors set at the index, chapter, and section levels, such as qi_start_: # |br| is useful for formatting fields inside of tables # |_| is a nonbreaking space; similarly useful inside of tables rst_epilog = """ .. |br| raw:: html
    .. |_| unicode:: 0xA0 :trim: """ # Options for HTML output # ----------------------- html_theme_path = [] html_theme = 'sphinx_ansible_theme' html_show_sphinx = False html_theme_options = { 'canonical_url': "https://docs.ansible.com/ansible/latest/", 'hubspot_id': '330046', 'satellite_tracking': True, 'show_extranav': True, 'swift_id': 'yABGvz2N8PwcwBxyfzUc', 'tag_manager_id': 'GTM-PSB293', 'vcs_pageview_mode': 'edit' } html_context = { 'display_github': 'True', 'show_sphinx': False, 'is_eol': False, 'github_user': 'ansible', 'github_repo': 'ansible', 'github_version': 'devel/docs/docsite/rst/', 'github_module_version': 'devel/lib/ansible/modules/', 'github_root_dir': 'devel/lib/ansible', 'github_cli_version': 'devel/lib/ansible/cli/', 'current_version': version, 'latest_version': '2.11', # list specifically out of order to make latest work 'available_versions': ('2.11', '2.10', 'devel',), } # Add extra CSS styles to the resulting HTML pages html_css_files = [ 'css/core-color-scheme.css', ] # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. # html_style = 'solar.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = 'Ansible Core Documentation' # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = 'Documentation' # The name of an image file (within the static path) to place at the top of # the sidebar. # html_logo = # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = 'favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['../_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = 'https://docs.ansible.com/ansible/latest' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Poseidodoc' # Configuration for sphinx-notfound-pages # with no 'notfound_template' and no 'notfound_context' set, # the extension builds 404.rst into a location-agnostic 404 page # # default is `en` - using this for the sub-site: notfound_default_language = "ansible" # default is `latest`: # setting explicitly - docsite serves up /ansible/latest/404.html # so keep this set to `latest` even on the `devel` branch # then no maintenance is needed when we branch a new stable_x.x notfound_default_version = "latest" # makes default setting explicit: notfound_no_urls_prefix = False # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class # [howto/manual]). latex_documents = [ ('index', 'ansible.tex', 'Ansible 2.2 Documentation', AUTHOR, 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True autoclass_content = 'both' # Note: Our strategy for intersphinx mappings is to have the upstream build location as the # canonical source and then cached copies of the mapping stored locally in case someone is building # when disconnected from the internet. We then have a script to update the cached copies. # # Because of that, each entry in this mapping should have this format: # name: ('http://UPSTREAM_URL', (None, 'path/to/local/cache.inv')) # # The update script depends on this format so deviating from this (for instance, adding a third # location for the mappning to live) will confuse it. intersphinx_mapping = {'python': ('https://docs.python.org/2/', (None, '../python2.inv')), 'python3': ('https://docs.python.org/3/', (None, '../python3.inv')), 'jinja2': ('http://jinja.palletsprojects.com/', (None, '../jinja2.inv')), 'ansible_4': ('https://docs.ansible.com/ansible/4/', (None, '../ansible_4.inv')), 'ansible_3': ('https://docs.ansible.com/ansible/3/', (None, '../ansible_3.inv')), 'ansible_2_10': ('https://docs.ansible.com/ansible/2.10/', (None, '../ansible_2_10.inv')), 'ansible_2_9': ('https://docs.ansible.com/ansible/2.9/', (None, '../ansible_2_9.inv')), 'ansible_2_8': ('https://docs.ansible.com/ansible/2.8/', (None, '../ansible_2_8.inv')), 'ansible_2_7': ('https://docs.ansible.com/ansible/2.7/', (None, '../ansible_2_7.inv')), 'ansible_2_6': ('https://docs.ansible.com/ansible/2.6/', (None, '../ansible_2_6.inv')), 'ansible_2_5': ('https://docs.ansible.com/ansible/2.5/', (None, '../ansible_2_5.inv')), } # linckchecker settings linkcheck_ignore = [ ] linkcheck_workers = 25 # linkcheck_anchors = False ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.535556 ansible-core-2.12.0/docs/docsite/variables.dot0000644000000000000000000000236200000000000021143 0ustar00rootroot00000000000000digraph G { subgraph cluster_0 { "command line variables" -> "--extra-args" } subgraph cluster_1 { "role variables" -> "roles/rolename/vars.yml" -> "parameters passed to role" -> "parameters from dependent roles" } subgraph cluster_2 { "top-level playbook variables" -> "vars: directives" -> "vars_files: directives"; } subgraph cluster_3 { "inventory variables" -> "group_vars/all" -> "group_vars/grandparent1" -> "group_vars/parent1" -> "host_vars/myhostname"; "group_vars/all" -> "group_vars/grandparent2"; "group_vars/grandparent1" -> "group_vars/parent2" "group_vars/grandparent2" -> "host_vars/myhostname"; "group_vars/parent2" -> "host_vars/myhostname" } subgraph cluster_4 { "facts" -> "gathered host facts" "facts" -> "host facts from /etc/ansible/facts.d" "facts" -> "set_fact" "facts" -> "include_vars" } subgraph cluster_5 { "role defaults" -> "roles/rolename/defaults.yml" } "command line variables" -> "role variables" -> "top-level playbook variables" -> "inventory variables" -> "role defaults" -> "facts" } ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/man/0000755000000000000000000000000000000000000015601 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/man/.gitignore0000644000000000000000000000002100000000000017562 0ustar00rootroot00000000000000*.xml *.asciidoc ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/man/man1/0000755000000000000000000000000000000000000016435 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383728.4015589 ansible-core-2.12.0/docs/man/man1/ansible-config.10000644000000000000000000001132100000000000021375 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-CONFIG 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-config \- View ansible configuration. . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .sp usage: ansible\-config [\-h] [\-\-version] [\-v] {list,dump,view,init} ... .SH DESCRIPTION .sp Config command line class .SH COMMON OPTIONS .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ACTIONS .INDENT 0.0 .TP .B \fBlist\fP list and output available configs .sp \fB\-c\fP \(aqCONFIG_FILE\(aq, \fB\-\-config\fP \(aqCONFIG_FILE\(aq .INDENT 7.0 .INDENT 3.5 path to configuration file, defaults to first file found in precedence. .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTYPE\(aq, \fB\-\-type\fP \(aqTYPE\(aq .INDENT 7.0 .INDENT 3.5 Filter down to a specific plugin type. .UNINDENT .UNINDENT .TP .B \fBdump\fP Shows the current settings, merges ansible.cfg if specified .sp \fB\-\-only\-changed\fP, \fB\-\-changed\-only\fP .INDENT 7.0 .INDENT 3.5 Only show configurations that have changed from the default .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONFIG_FILE\(aq, \fB\-\-config\fP \(aqCONFIG_FILE\(aq .INDENT 7.0 .INDENT 3.5 path to configuration file, defaults to first file found in precedence. .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTYPE\(aq, \fB\-\-type\fP \(aqTYPE\(aq .INDENT 7.0 .INDENT 3.5 Filter down to a specific plugin type. .UNINDENT .UNINDENT .TP .B \fBview\fP Displays the current config file .sp \fB\-c\fP \(aqCONFIG_FILE\(aq, \fB\-\-config\fP \(aqCONFIG_FILE\(aq .INDENT 7.0 .INDENT 3.5 path to configuration file, defaults to first file found in precedence. .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTYPE\(aq, \fB\-\-type\fP \(aqTYPE\(aq .INDENT 7.0 .INDENT 3.5 Filter down to a specific plugin type. .UNINDENT .UNINDENT .UNINDENT .sp \fBinit\fP .INDENT 0.0 .INDENT 3.5 \fB\-\-disabled\fP .INDENT 0.0 .INDENT 3.5 Prefixes all entries with a comment character to disable them .UNINDENT .UNINDENT .sp \fB\-\-format\fP \(aqFORMAT\(aq, \fB\-f\fP \(aqFORMAT\(aq .INDENT 0.0 .INDENT 3.5 Output format for init .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONFIG_FILE\(aq, \fB\-\-config\fP \(aqCONFIG_FILE\(aq .INDENT 0.0 .INDENT 3.5 path to configuration file, defaults to first file found in precedence. .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTYPE\(aq, \fB\-\-type\fP \(aqTYPE\(aq .INDENT 0.0 .INDENT 3.5 Filter down to a specific plugin type. .UNINDENT .UNINDENT .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383729.175559 ansible-core-2.12.0/docs/man/man1/ansible-console.10000644000000000000000000002266200000000000021604 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-CONSOLE 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-console \- REPL console for executing Ansible tasks. . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-console [\-h] [\-\-version] [\-v] [\-b] [\-\-become\-method BECOME_METHOD] [\-\-become\-user BECOME_USER] [\-K | \-\-become\-password\-file BECOME_PASSWORD_FILE] [\-i INVENTORY] [\-\-list\-hosts] [\-l SUBSET] [\-\-private\-key PRIVATE_KEY_FILE] [\-u REMOTE_USER] [\-c CONNECTION] [\-T TIMEOUT] [\-\-ssh\-common\-args SSH_COMMON_ARGS] [\-\-sftp\-extra\-args SFTP_EXTRA_ARGS] [\-\-scp\-extra\-args SCP_EXTRA_ARGS] [\-\-ssh\-extra\-args SSH_EXTRA_ARGS] [\-k | \-\-connection\-password\-file CONNECTION_PASSWORD_FILE] [\-C] [\-\-syntax\-check] [\-D] [\-\-vault\-id VAULT_IDS] [\-\-ask\-vault\-password | \-\-vault\-password\-file VAULT_PASSWORD_FILES] [\-f FORKS] [\-M MODULE_PATH] [\-\-playbook\-dir BASEDIR] [\-e EXTRA_VARS] [\-\-task\-timeout TASK_TIMEOUT] [\-\-step] [pattern] .UNINDENT .SH DESCRIPTION .sp A REPL that allows for running ad\-hoc tasks against a chosen inventory from a nice shell with built\-in tab completion (based on dominis\(aq ansible\-shell). .sp It supports several commands, and you can modify its configuration at runtime: .INDENT 0.0 .IP \(bu 2 \fIcd [pattern]\fP: change host/group (you can use host patterns eg.: .UNINDENT .IP "System Message: WARNING/2 (docs/man/man1/ansible-console.1.rst:, line 46)" Bullet list ends without a blank line; unexpected unindent. .sp app*.dc*:!app01*) \- \fIlist\fP: list available hosts in the current path \- \fIlist groups\fP: list groups included in the current path \- \fIbecome\fP: toggle the become flag \- \fI!\fP: forces shell module instead of the ansible module (!yum update \-y) \- \fIverbosity [num]\fP: set the verbosity level \- \fIforks [num]\fP: set the number of forks \- \fIbecome_user [user]\fP: set the become_user \- \fIremote_user [user]\fP: set the remote_user \- \fIbecome_method [method]\fP: set the privilege escalation method \- \fIcheck [bool]\fP: toggle check mode \- \fIdiff [bool]\fP: toggle diff mode \- \fItimeout [integer]\fP: set the timeout of tasks in seconds (0 to disable) \- \fIhelp [command/module]\fP: display documentation for the command or module \- \fIexit\fP: exit ansible\-console .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 host pattern .UNINDENT .UNINDENT .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-become\-method\fP \(aqBECOME_METHOD\(aq .INDENT 0.0 .INDENT 3.5 privilege escalation method to use (default=sudo), use \fIansible\-doc \-t become \-l\fP to list valid choices. .UNINDENT .UNINDENT .sp \fB\-\-become\-password\-file\fP \(aqBECOME_PASSWORD_FILE\(aq, \fB\-\-become\-pass\-file\fP \(aqBECOME_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Become password file .UNINDENT .UNINDENT .sp \fB\-\-become\-user\fP \(aqBECOME_USER\(aq .INDENT 0.0 .INDENT 3.5 run operations as this user (default=root) .UNINDENT .UNINDENT .sp \fB\-\-connection\-password\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq, \fB\-\-conn\-pass\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Connection password file .UNINDENT .UNINDENT .sp \fB\-\-list\-hosts\fP .INDENT 0.0 .INDENT 3.5 outputs a list of matching hosts; does not execute anything else .UNINDENT .UNINDENT .sp \fB\-\-playbook\-dir\fP \(aqBASEDIR\(aq .INDENT 0.0 .INDENT 3.5 Since this tool does not use playbooks, use this as a substitute playbook directory.This sets the relative path for many features including roles/ group_vars/ etc. .UNINDENT .UNINDENT .sp \fB\-\-private\-key\fP \(aqPRIVATE_KEY_FILE\(aq, \fB\-\-key\-file\fP \(aqPRIVATE_KEY_FILE\(aq .INDENT 0.0 .INDENT 3.5 use this file to authenticate the connection .UNINDENT .UNINDENT .sp \fB\-\-scp\-extra\-args\fP \(aqSCP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to scp only (e.g. \-l) .UNINDENT .UNINDENT .sp \fB\-\-sftp\-extra\-args\fP \(aqSFTP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to sftp only (e.g. \-f, \-l) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-common\-args\fP \(aqSSH_COMMON_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-extra\-args\fP \(aqSSH_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to ssh only (e.g. \-R) .UNINDENT .UNINDENT .sp \fB\-\-step\fP .INDENT 0.0 .INDENT 3.5 one\-step\-at\-a\-time: confirm each task before running .UNINDENT .UNINDENT .sp \fB\-\-syntax\-check\fP .INDENT 0.0 .INDENT 3.5 perform a syntax check on the playbook, but do not execute it .UNINDENT .UNINDENT .sp \fB\-\-task\-timeout\fP \(aqTASK_TIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 set task timeout limit in seconds, must be positive integer. .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 0.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 0.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-C\fP, \fB\-\-check\fP .INDENT 0.0 .INDENT 3.5 don\(aqt make any changes; instead, try to predict some of the changes that may occur .UNINDENT .UNINDENT .sp \fB\-D\fP, \fB\-\-diff\fP .INDENT 0.0 .INDENT 3.5 when changing (small) files and templates, show the differences in those files; works great with \-\-check .UNINDENT .UNINDENT .sp \fB\-K\fP, \fB\-\-ask\-become\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for privilege escalation password .UNINDENT .UNINDENT .sp \fB\-M\fP, \fB\-\-module\-path\fP .INDENT 0.0 .INDENT 3.5 prepend colon\-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) .UNINDENT .UNINDENT .sp \fB\-T\fP \(aqTIMEOUT\(aq, \fB\-\-timeout\fP \(aqTIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 override the connection timeout in seconds (default=10) .UNINDENT .UNINDENT .sp \fB\-b\fP, \fB\-\-become\fP .INDENT 0.0 .INDENT 3.5 run operations with become (does not imply password prompting) .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONNECTION\(aq, \fB\-\-connection\fP \(aqCONNECTION\(aq .INDENT 0.0 .INDENT 3.5 connection type to use (default=smart) .UNINDENT .UNINDENT .sp \fB\-e\fP, \fB\-\-extra\-vars\fP .INDENT 0.0 .INDENT 3.5 set additional variables as key=value or YAML/JSON, if filename prepend with @ .UNINDENT .UNINDENT .sp \fB\-f\fP \(aqFORKS\(aq, \fB\-\-forks\fP \(aqFORKS\(aq .INDENT 0.0 .INDENT 3.5 specify number of parallel processes to use (default=5) .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-i\fP, \fB\-\-inventory\fP, \fB\-\-inventory\-file\fP .INDENT 0.0 .INDENT 3.5 specify inventory host path or comma separated host list. \-\-inventory\-file is deprecated .UNINDENT .UNINDENT .sp \fB\-k\fP, \fB\-\-ask\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for connection password .UNINDENT .UNINDENT .sp \fB\-l\fP \(aqSUBSET\(aq, \fB\-\-limit\fP \(aqSUBSET\(aq .INDENT 0.0 .INDENT 3.5 further limit selected hosts to an additional pattern .UNINDENT .UNINDENT .sp \fB\-u\fP \(aqREMOTE_USER\(aq, \fB\-\-user\fP \(aqREMOTE_USER\(aq .INDENT 0.0 .INDENT 3.5 connect as this user (default=None) .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383728.8925588 ansible-core-2.12.0/docs/man/man1/ansible-doc.10000644000000000000000000001235600000000000020706 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-DOC 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-doc \- plugin documentation tool . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-doc [\-h] [\-\-version] [\-v] [\-M MODULE_PATH] [\-\-playbook\-dir BASEDIR] [\-t {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,vars,module,strategy,role,keyword}] [\-j] [\-r ROLES_PATH] [\-e ENTRY_POINT | \-s | \-F | \-l | \-\-metadata\-dump] [plugin [plugin ...]] .UNINDENT .SH DESCRIPTION .sp displays information on modules installed in Ansible libraries. It displays a terse listing of plugins and their short descriptions, provides a printout of their DOCUMENTATION strings, and it can create a short "snippet" which can be pasted into a playbook. .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 Plugin .UNINDENT .UNINDENT .sp \fB\-\-metadata\-dump\fP .INDENT 0.0 .INDENT 3.5 \fBFor internal testing only\fP Dump json metadata for all plugins. .UNINDENT .UNINDENT .sp \fB\-\-playbook\-dir\fP \(aqBASEDIR\(aq .INDENT 0.0 .INDENT 3.5 Since this tool does not use playbooks, use this as a substitute playbook directory.This sets the relative path for many features including roles/ group_vars/ etc. .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-F\fP, \fB\-\-list_files\fP .INDENT 0.0 .INDENT 3.5 Show plugin names and their source files without summaries (implies \-\-list). A supplied argument will be used for filtering, can be a namespace or full collection name. .UNINDENT .UNINDENT .sp \fB\-M\fP, \fB\-\-module\-path\fP .INDENT 0.0 .INDENT 3.5 prepend colon\-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) .UNINDENT .UNINDENT .sp \fB\-e\fP \(aqENTRY_POINT\(aq, \fB\-\-entry\-point\fP \(aqENTRY_POINT\(aq .INDENT 0.0 .INDENT 3.5 Select the entry point for role(s). .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-j\fP, \fB\-\-json\fP .INDENT 0.0 .INDENT 3.5 Change output into json format. .UNINDENT .UNINDENT .sp \fB\-l\fP, \fB\-\-list\fP .INDENT 0.0 .INDENT 3.5 List available plugins. A supplied argument will be used for filtering, can be a namespace or full collection name. .UNINDENT .UNINDENT .sp \fB\-r\fP, \fB\-\-roles\-path\fP .INDENT 0.0 .INDENT 3.5 The path to the directory containing your roles. .UNINDENT .UNINDENT .sp \fB\-s\fP, \fB\-\-snippet\fP .INDENT 0.0 .INDENT 3.5 Show playbook snippet for these plugin types: inventory, lookup, module .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTYPE\(aq, \fB\-\-type\fP \(aqTYPE\(aq .INDENT 0.0 .INDENT 3.5 Choose which plugin type (defaults to "module"). Available plugin types are : (\(aqbecome\(aq, \(aqcache\(aq, \(aqcallback\(aq, \(aqcliconf\(aq, \(aqconnection\(aq, \(aqhttpapi\(aq, \(aqinventory\(aq, \(aqlookup\(aq, \(aqnetconf\(aq, \(aqshell\(aq, \(aqvars\(aq, \(aqmodule\(aq, \(aqstrategy\(aq, \(aqrole\(aq, \(aqkeyword\(aq) .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383727.3855588 ansible-core-2.12.0/docs/man/man1/ansible-galaxy.10000644000000000000000000000626100000000000021424 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-GALAXY 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-galaxy \- Perform various Role and Collection related operations. . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .sp usage: ansible\-galaxy [\-h] [\-\-version] [\-v] TYPE ... .SH DESCRIPTION .sp command to manage Ansible roles in shared repositories, the default of which is Ansible Galaxy \fIhttps://galaxy.ansible.com\fP\&. .SH COMMON OPTIONS .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ACTIONS .INDENT 0.0 .TP .B \fBcollection\fP Perform the action on an Ansible Galaxy collection. Must be combined with a further action like init/install as listed below. .TP .B \fBrole\fP Perform the action on an Ansible Galaxy role. Must be combined with a further action like delete/install/init as listed below. .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383728.649559 ansible-core-2.12.0/docs/man/man1/ansible-inventory.10000644000000000000000000001245700000000000022200 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-INVENTORY 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-inventory \- None . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-inventory [\-h] [\-\-version] [\-v] [\-i INVENTORY] [\-\-vault\-id VAULT_IDS] [\-\-ask\-vault\-password | \-\-vault\-password\-file VAULT_PASSWORD_FILES] [\-\-playbook\-dir BASEDIR] [\-e EXTRA_VARS] [\-\-list] [\-\-host HOST] [\-\-graph] [\-y] [\-\-toml] [\-\-vars] [\-\-export] [\-\-output OUTPUT_FILE] [host|group] .UNINDENT .SH DESCRIPTION .sp used to display or dump the configured inventory as Ansible sees it .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 None .UNINDENT .UNINDENT .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-export\fP .INDENT 0.0 .INDENT 3.5 When doing an \-\-list, represent in a way that is optimized for export,not as an accurate representation of how Ansible has processed it .UNINDENT .UNINDENT .sp \fB\-\-graph\fP .INDENT 0.0 .INDENT 3.5 create inventory graph, if supplying pattern it must be a valid group name .UNINDENT .UNINDENT .sp \fB\-\-host\fP \(aqHOST\(aq .INDENT 0.0 .INDENT 3.5 Output specific host info, works as inventory script .UNINDENT .UNINDENT .sp \fB\-\-list\fP .INDENT 0.0 .INDENT 3.5 Output all hosts info, works as inventory script .UNINDENT .UNINDENT .sp \fB\-\-list\-hosts\fP .INDENT 0.0 .INDENT 3.5 ==SUPPRESS== .UNINDENT .UNINDENT .sp \fB\-\-output\fP \(aqOUTPUT_FILE\(aq .INDENT 0.0 .INDENT 3.5 When doing \-\-list, send the inventory to a file instead of to the screen .UNINDENT .UNINDENT .sp \fB\-\-playbook\-dir\fP \(aqBASEDIR\(aq .INDENT 0.0 .INDENT 3.5 Since this tool does not use playbooks, use this as a substitute playbook directory.This sets the relative path for many features including roles/ group_vars/ etc. .UNINDENT .UNINDENT .sp \fB\-\-toml\fP .INDENT 0.0 .INDENT 3.5 Use TOML format instead of default JSON, ignored for \-\-graph .UNINDENT .UNINDENT .sp \fB\-\-vars\fP .INDENT 0.0 .INDENT 3.5 Add vars to graph display, ignored unless used with \-\-graph .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 0.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 0.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-e\fP, \fB\-\-extra\-vars\fP .INDENT 0.0 .INDENT 3.5 set additional variables as key=value or YAML/JSON, if filename prepend with @ .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-i\fP, \fB\-\-inventory\fP, \fB\-\-inventory\-file\fP .INDENT 0.0 .INDENT 3.5 specify inventory host path or comma separated host list. \-\-inventory\-file is deprecated .UNINDENT .UNINDENT .sp \fB\-l\fP, \fB\-\-limit\fP .INDENT 0.0 .INDENT 3.5 ==SUPPRESS== .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .sp \fB\-y\fP, \fB\-\-yaml\fP .INDENT 0.0 .INDENT 3.5 Use YAML format instead of default JSON, ignored for \-\-graph .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383728.156559 ansible-core-2.12.0/docs/man/man1/ansible-playbook.10000644000000000000000000002162500000000000021760 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-PLAYBOOK 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-playbook \- Runs Ansible playbooks, executing the defined tasks on the targeted hosts. . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-playbook [\-h] [\-\-version] [\-v] [\-\-private\-key PRIVATE_KEY_FILE] [\-u REMOTE_USER] [\-c CONNECTION] [\-T TIMEOUT] [\-\-ssh\-common\-args SSH_COMMON_ARGS] [\-\-sftp\-extra\-args SFTP_EXTRA_ARGS] [\-\-scp\-extra\-args SCP_EXTRA_ARGS] [\-\-ssh\-extra\-args SSH_EXTRA_ARGS] [\-k | \-\-connection\-password\-file CONNECTION_PASSWORD_FILE] [\-\-force\-handlers] [\-\-flush\-cache] [\-b] [\-\-become\-method BECOME_METHOD] [\-\-become\-user BECOME_USER] [\-K | \-\-become\-password\-file BECOME_PASSWORD_FILE] [\-t TAGS] [\-\-skip\-tags SKIP_TAGS] [\-C] [\-\-syntax\-check] [\-D] [\-i INVENTORY] [\-\-list\-hosts] [\-l SUBSET] [\-e EXTRA_VARS] [\-\-vault\-id VAULT_IDS] [\-\-ask\-vault\-password | \-\-vault\-password\-file VAULT_PASSWORD_FILES] [\-f FORKS] [\-M MODULE_PATH] [\-\-list\-tasks] [\-\-list\-tags] [\-\-step] [\-\-start\-at\-task START_AT_TASK] playbook [playbook ...] .UNINDENT .SH DESCRIPTION .sp the tool to run \fIAnsible playbooks\fP, which are a configuration and multinode deployment system. See the project home page (\fI\%https://docs.ansible.com\fP) for more information. .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 Playbook(s) .UNINDENT .UNINDENT .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-become\-method\fP \(aqBECOME_METHOD\(aq .INDENT 0.0 .INDENT 3.5 privilege escalation method to use (default=sudo), use \fIansible\-doc \-t become \-l\fP to list valid choices. .UNINDENT .UNINDENT .sp \fB\-\-become\-password\-file\fP \(aqBECOME_PASSWORD_FILE\(aq, \fB\-\-become\-pass\-file\fP \(aqBECOME_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Become password file .UNINDENT .UNINDENT .sp \fB\-\-become\-user\fP \(aqBECOME_USER\(aq .INDENT 0.0 .INDENT 3.5 run operations as this user (default=root) .UNINDENT .UNINDENT .sp \fB\-\-connection\-password\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq, \fB\-\-conn\-pass\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Connection password file .UNINDENT .UNINDENT .sp \fB\-\-flush\-cache\fP .INDENT 0.0 .INDENT 3.5 clear the fact cache for every host in inventory .UNINDENT .UNINDENT .sp \fB\-\-force\-handlers\fP .INDENT 0.0 .INDENT 3.5 run handlers even if a task fails .UNINDENT .UNINDENT .sp \fB\-\-list\-hosts\fP .INDENT 0.0 .INDENT 3.5 outputs a list of matching hosts; does not execute anything else .UNINDENT .UNINDENT .sp \fB\-\-list\-tags\fP .INDENT 0.0 .INDENT 3.5 list all available tags .UNINDENT .UNINDENT .sp \fB\-\-list\-tasks\fP .INDENT 0.0 .INDENT 3.5 list all tasks that would be executed .UNINDENT .UNINDENT .sp \fB\-\-private\-key\fP \(aqPRIVATE_KEY_FILE\(aq, \fB\-\-key\-file\fP \(aqPRIVATE_KEY_FILE\(aq .INDENT 0.0 .INDENT 3.5 use this file to authenticate the connection .UNINDENT .UNINDENT .sp \fB\-\-scp\-extra\-args\fP \(aqSCP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to scp only (e.g. \-l) .UNINDENT .UNINDENT .sp \fB\-\-sftp\-extra\-args\fP \(aqSFTP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to sftp only (e.g. \-f, \-l) .UNINDENT .UNINDENT .sp \fB\-\-skip\-tags\fP .INDENT 0.0 .INDENT 3.5 only run plays and tasks whose tags do not match these values .UNINDENT .UNINDENT .sp \fB\-\-ssh\-common\-args\fP \(aqSSH_COMMON_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-extra\-args\fP \(aqSSH_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to ssh only (e.g. \-R) .UNINDENT .UNINDENT .sp \fB\-\-start\-at\-task\fP \(aqSTART_AT_TASK\(aq .INDENT 0.0 .INDENT 3.5 start the playbook at the task matching this name .UNINDENT .UNINDENT .sp \fB\-\-step\fP .INDENT 0.0 .INDENT 3.5 one\-step\-at\-a\-time: confirm each task before running .UNINDENT .UNINDENT .sp \fB\-\-syntax\-check\fP .INDENT 0.0 .INDENT 3.5 perform a syntax check on the playbook, but do not execute it .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 0.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 0.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-C\fP, \fB\-\-check\fP .INDENT 0.0 .INDENT 3.5 don\(aqt make any changes; instead, try to predict some of the changes that may occur .UNINDENT .UNINDENT .sp \fB\-D\fP, \fB\-\-diff\fP .INDENT 0.0 .INDENT 3.5 when changing (small) files and templates, show the differences in those files; works great with \-\-check .UNINDENT .UNINDENT .sp \fB\-K\fP, \fB\-\-ask\-become\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for privilege escalation password .UNINDENT .UNINDENT .sp \fB\-M\fP, \fB\-\-module\-path\fP .INDENT 0.0 .INDENT 3.5 prepend colon\-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) .UNINDENT .UNINDENT .sp \fB\-T\fP \(aqTIMEOUT\(aq, \fB\-\-timeout\fP \(aqTIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 override the connection timeout in seconds (default=10) .UNINDENT .UNINDENT .sp \fB\-b\fP, \fB\-\-become\fP .INDENT 0.0 .INDENT 3.5 run operations with become (does not imply password prompting) .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONNECTION\(aq, \fB\-\-connection\fP \(aqCONNECTION\(aq .INDENT 0.0 .INDENT 3.5 connection type to use (default=smart) .UNINDENT .UNINDENT .sp \fB\-e\fP, \fB\-\-extra\-vars\fP .INDENT 0.0 .INDENT 3.5 set additional variables as key=value or YAML/JSON, if filename prepend with @ .UNINDENT .UNINDENT .sp \fB\-f\fP \(aqFORKS\(aq, \fB\-\-forks\fP \(aqFORKS\(aq .INDENT 0.0 .INDENT 3.5 specify number of parallel processes to use (default=5) .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-i\fP, \fB\-\-inventory\fP, \fB\-\-inventory\-file\fP .INDENT 0.0 .INDENT 3.5 specify inventory host path or comma separated host list. \-\-inventory\-file is deprecated .UNINDENT .UNINDENT .sp \fB\-k\fP, \fB\-\-ask\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for connection password .UNINDENT .UNINDENT .sp \fB\-l\fP \(aqSUBSET\(aq, \fB\-\-limit\fP \(aqSUBSET\(aq .INDENT 0.0 .INDENT 3.5 further limit selected hosts to an additional pattern .UNINDENT .UNINDENT .sp \fB\-t\fP, \fB\-\-tags\fP .INDENT 0.0 .INDENT 3.5 only run plays and tasks tagged with these values .UNINDENT .UNINDENT .sp \fB\-u\fP \(aqREMOTE_USER\(aq, \fB\-\-user\fP \(aqREMOTE_USER\(aq .INDENT 0.0 .INDENT 3.5 connect as this user (default=None) .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383729.435559 ansible-core-2.12.0/docs/man/man1/ansible-pull.10000644000000000000000000002370100000000000021111 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-PULL 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-pull \- pulls playbooks from a VCS repo and executes them for the local host . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-pull [\-h] [\-\-version] [\-v] [\-\-private\-key PRIVATE_KEY_FILE] [\-u REMOTE_USER] [\-c CONNECTION] [\-T TIMEOUT] [\-\-ssh\-common\-args SSH_COMMON_ARGS] [\-\-sftp\-extra\-args SFTP_EXTRA_ARGS] [\-\-scp\-extra\-args SCP_EXTRA_ARGS] [\-\-ssh\-extra\-args SSH_EXTRA_ARGS] [\-k | \-\-connection\-password\-file CONNECTION_PASSWORD_FILE] [\-\-vault\-id VAULT_IDS] [\-\-ask\-vault\-password | \-\-vault\-password\-file VAULT_PASSWORD_FILES] [\-e EXTRA_VARS] [\-t TAGS] [\-\-skip\-tags SKIP_TAGS] [\-i INVENTORY] [\-\-list\-hosts] [\-l SUBSET] [\-M MODULE_PATH] [\-K | \-\-become\-password\-file BECOME_PASSWORD_FILE] [\-\-purge] [\-o] [\-s SLEEP] [\-f] [\-d DEST] [\-U URL] [\-\-full] [\-C CHECKOUT] [\-\-accept\-host\-key] [\-m MODULE_NAME] [\-\-verify\-commit] [\-\-clean] [\-\-track\-subs] [\-\-check] [\-\-diff] [playbook.yml [playbook.yml ...]] .UNINDENT .SH DESCRIPTION .sp Used to pull a remote copy of ansible on each managed node, each set to run via cron and update playbook source via a source repository. This inverts the default \fIpush\fP architecture of ansible into a \fIpull\fP architecture, which has near\-limitless scaling potential. .sp The setup playbook can be tuned to change the cron frequency, logging locations, and parameters to ansible\-pull. This is useful both for extreme scale\-out as well as periodic remediation. Usage of the \(aqfetch\(aq module to retrieve logs from ansible\-pull runs would be an excellent way to gather and analyze remote logs from ansible\-pull. .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 Playbook(s) .UNINDENT .UNINDENT .sp \fB\-\-accept\-host\-key\fP .INDENT 0.0 .INDENT 3.5 adds the hostkey for the repo url if not already added .UNINDENT .UNINDENT .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-become\-password\-file\fP \(aqBECOME_PASSWORD_FILE\(aq, \fB\-\-become\-pass\-file\fP \(aqBECOME_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Become password file .UNINDENT .UNINDENT .sp \fB\-\-check\fP .INDENT 0.0 .INDENT 3.5 don\(aqt make any changes; instead, try to predict some of the changes that may occur .UNINDENT .UNINDENT .sp \fB\-\-clean\fP .INDENT 0.0 .INDENT 3.5 modified files in the working repository will be discarded .UNINDENT .UNINDENT .sp \fB\-\-connection\-password\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq, \fB\-\-conn\-pass\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Connection password file .UNINDENT .UNINDENT .sp \fB\-\-diff\fP .INDENT 0.0 .INDENT 3.5 when changing (small) files and templates, show the differences in those files; works great with \-\-check .UNINDENT .UNINDENT .sp \fB\-\-full\fP .INDENT 0.0 .INDENT 3.5 Do a full clone, instead of a shallow one. .UNINDENT .UNINDENT .sp \fB\-\-list\-hosts\fP .INDENT 0.0 .INDENT 3.5 outputs a list of matching hosts; does not execute anything else .UNINDENT .UNINDENT .sp \fB\-\-private\-key\fP \(aqPRIVATE_KEY_FILE\(aq, \fB\-\-key\-file\fP \(aqPRIVATE_KEY_FILE\(aq .INDENT 0.0 .INDENT 3.5 use this file to authenticate the connection .UNINDENT .UNINDENT .sp \fB\-\-purge\fP .INDENT 0.0 .INDENT 3.5 purge checkout after playbook run .UNINDENT .UNINDENT .sp \fB\-\-scp\-extra\-args\fP \(aqSCP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to scp only (e.g. \-l) .UNINDENT .UNINDENT .sp \fB\-\-sftp\-extra\-args\fP \(aqSFTP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to sftp only (e.g. \-f, \-l) .UNINDENT .UNINDENT .sp \fB\-\-skip\-tags\fP .INDENT 0.0 .INDENT 3.5 only run plays and tasks whose tags do not match these values .UNINDENT .UNINDENT .sp \fB\-\-ssh\-common\-args\fP \(aqSSH_COMMON_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-extra\-args\fP \(aqSSH_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to ssh only (e.g. \-R) .UNINDENT .UNINDENT .sp \fB\-\-track\-subs\fP .INDENT 0.0 .INDENT 3.5 submodules will track the latest changes. This is equivalent to specifying the \-\-remote flag to git submodule update .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 0.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 0.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-\-verify\-commit\fP .INDENT 0.0 .INDENT 3.5 verify GPG signature of checked out commit, if it fails abort running the playbook. This needs the corresponding VCS module to support such an operation .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-C\fP \(aqCHECKOUT\(aq, \fB\-\-checkout\fP \(aqCHECKOUT\(aq .INDENT 0.0 .INDENT 3.5 branch/tag/commit to checkout. Defaults to behavior of repository module. .UNINDENT .UNINDENT .sp \fB\-K\fP, \fB\-\-ask\-become\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for privilege escalation password .UNINDENT .UNINDENT .sp \fB\-M\fP, \fB\-\-module\-path\fP .INDENT 0.0 .INDENT 3.5 prepend colon\-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) .UNINDENT .UNINDENT .sp \fB\-T\fP \(aqTIMEOUT\(aq, \fB\-\-timeout\fP \(aqTIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 override the connection timeout in seconds (default=10) .UNINDENT .UNINDENT .sp \fB\-U\fP \(aqURL\(aq, \fB\-\-url\fP \(aqURL\(aq .INDENT 0.0 .INDENT 3.5 URL of the playbook repository .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONNECTION\(aq, \fB\-\-connection\fP \(aqCONNECTION\(aq .INDENT 0.0 .INDENT 3.5 connection type to use (default=smart) .UNINDENT .UNINDENT .sp \fB\-d\fP \(aqDEST\(aq, \fB\-\-directory\fP \(aqDEST\(aq .INDENT 0.0 .INDENT 3.5 absolute path of repository checkout directory (relative paths are not supported) .UNINDENT .UNINDENT .sp \fB\-e\fP, \fB\-\-extra\-vars\fP .INDENT 0.0 .INDENT 3.5 set additional variables as key=value or YAML/JSON, if filename prepend with @ .UNINDENT .UNINDENT .sp \fB\-f\fP, \fB\-\-force\fP .INDENT 0.0 .INDENT 3.5 run the playbook even if the repository could not be updated .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-i\fP, \fB\-\-inventory\fP, \fB\-\-inventory\-file\fP .INDENT 0.0 .INDENT 3.5 specify inventory host path or comma separated host list. \-\-inventory\-file is deprecated .UNINDENT .UNINDENT .sp \fB\-k\fP, \fB\-\-ask\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for connection password .UNINDENT .UNINDENT .sp \fB\-l\fP \(aqSUBSET\(aq, \fB\-\-limit\fP \(aqSUBSET\(aq .INDENT 0.0 .INDENT 3.5 further limit selected hosts to an additional pattern .UNINDENT .UNINDENT .sp \fB\-m\fP \(aqMODULE_NAME\(aq, \fB\-\-module\-name\fP \(aqMODULE_NAME\(aq .INDENT 0.0 .INDENT 3.5 Repository module name, which ansible will use to check out the repo. Choices are (\(aqgit\(aq, \(aqsubversion\(aq, \(aqhg\(aq, \(aqbzr\(aq). Default is git. .UNINDENT .UNINDENT .sp \fB\-o\fP, \fB\-\-only\-if\-changed\fP .INDENT 0.0 .INDENT 3.5 only run the playbook if the repository has been updated .UNINDENT .UNINDENT .sp \fB\-s\fP \(aqSLEEP\(aq, \fB\-\-sleep\fP \(aqSLEEP\(aq .INDENT 0.0 .INDENT 3.5 sleep for random interval (between 0 and n number of seconds) before starting. This is a useful way to disperse git requests .UNINDENT .UNINDENT .sp \fB\-t\fP, \fB\-\-tags\fP .INDENT 0.0 .INDENT 3.5 only run plays and tasks tagged with these values .UNINDENT .UNINDENT .sp \fB\-u\fP \(aqREMOTE_USER\(aq, \fB\-\-user\fP \(aqREMOTE_USER\(aq .INDENT 0.0 .INDENT 3.5 connect as this user (default=None) .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383727.653559 ansible-core-2.12.0/docs/man/man1/ansible-vault.10000644000000000000000000002107600000000000021273 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE-VAULT 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible-vault \- encryption/decryption utility for Ansible data files . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible\-vault [\-h] [\-\-version] [\-v] {create,decrypt,edit,view,encrypt,encrypt_string,rekey} \&... .UNINDENT .SH DESCRIPTION .sp can encrypt any structured data file used by Ansible. This can include \fIgroup_vars/\fP or \fIhost_vars/\fP inventory variables, variables loaded by \fIinclude_vars\fP or \fIvars_files\fP, or variable files passed on the ansible\-playbook command line with \fI\-e @file.yml\fP or \fI\-e @file.json\fP\&. Role variables and defaults are also included! .sp Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault. If you\(aqd like to not expose what variables you are using, you can keep an individual task file entirely encrypted. .SH COMMON OPTIONS .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ACTIONS .INDENT 0.0 .TP .B \fBcreate\fP create and open a file in an editor that will be encrypted with the provided vault secret when closed .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-encrypt\-vault\-id\fP \(aqENCRYPT_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the vault id used to encrypt (required if more than one vault\-id is provided) .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .TP .B \fBdecrypt\fP decrypt the supplied file using the provided vault secret .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-output\fP \(aqOUTPUT_FILE\(aq .INDENT 7.0 .INDENT 3.5 output file name for encrypt or decrypt; use \- for stdout .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .TP .B \fBedit\fP open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-encrypt\-vault\-id\fP \(aqENCRYPT_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the vault id used to encrypt (required if more than one vault\-id is provided) .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .TP .B \fBview\fP open, decrypt and view an existing vaulted file using a pager using the supplied vault secret .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .TP .B \fBencrypt\fP encrypt the supplied file using the provided vault secret .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-encrypt\-vault\-id\fP \(aqENCRYPT_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the vault id used to encrypt (required if more than one vault\-id is provided) .UNINDENT .UNINDENT .sp \fB\-\-output\fP \(aqOUTPUT_FILE\(aq .INDENT 7.0 .INDENT 3.5 output file name for encrypt or decrypt; use \- for stdout .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .TP .B \fBencrypt_string\fP encrypt the supplied string using the provided vault secret .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-encrypt\-vault\-id\fP \(aqENCRYPT_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the vault id used to encrypt (required if more than one vault\-id is provided) .UNINDENT .UNINDENT .sp \fB\-\-output\fP \(aqOUTPUT_FILE\(aq .INDENT 7.0 .INDENT 3.5 output file name for encrypt or decrypt; use \- for stdout .UNINDENT .UNINDENT .sp \fB\-\-show\-input\fP .INDENT 7.0 .INDENT 3.5 Do not hide input when prompted for the string to encrypt .UNINDENT .UNINDENT .sp \fB\-\-stdin\-name\fP \(aqENCRYPT_STRING_STDIN_NAME\(aq .INDENT 7.0 .INDENT 3.5 Specify the variable name for stdin .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-n\fP, \fB\-\-name\fP .INDENT 7.0 .INDENT 3.5 Specify the variable name .UNINDENT .UNINDENT .sp \fB\-p\fP, \fB\-\-prompt\fP .INDENT 7.0 .INDENT 3.5 Prompt for the string to encrypt .UNINDENT .UNINDENT .TP .B \fBrekey\fP re\-encrypt a vaulted file with a new secret, the previous secret is required .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 7.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-encrypt\-vault\-id\fP \(aqENCRYPT_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the vault id used to encrypt (required if more than one vault\-id is provided) .UNINDENT .UNINDENT .sp \fB\-\-new\-vault\-id\fP \(aqNEW_VAULT_ID\(aq .INDENT 7.0 .INDENT 3.5 the new vault identity to use for rekey .UNINDENT .UNINDENT .sp \fB\-\-new\-vault\-password\-file\fP \(aqNEW_VAULT_PASSWORD_FILE\(aq .INDENT 7.0 .INDENT 3.5 new vault password file for rekey .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 7.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 7.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\fP (1), \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383727.904559 ansible-core-2.12.0/docs/man/man1/ansible.10000644000000000000000000002231700000000000020141 0ustar00rootroot00000000000000.\" Man page generated from reStructuredText. . .TH ANSIBLE 1 "" "Ansible 2.12.0" "System administration commands" .SH NAME ansible \- Define and run a single task 'playbook' against a set of hosts . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .INDENT 0.0 .TP .B usage: ansible [\-h] [\-\-version] [\-v] [\-b] [\-\-become\-method BECOME_METHOD] [\-\-become\-user BECOME_USER] [\-K | \-\-become\-password\-file BECOME_PASSWORD_FILE] [\-i INVENTORY] [\-\-list\-hosts] [\-l SUBSET] [\-P POLL_INTERVAL] [\-B SECONDS] [\-o] [\-t TREE] [\-\-private\-key PRIVATE_KEY_FILE] [\-u REMOTE_USER] [\-c CONNECTION] [\-T TIMEOUT] [\-\-ssh\-common\-args SSH_COMMON_ARGS] [\-\-sftp\-extra\-args SFTP_EXTRA_ARGS] [\-\-scp\-extra\-args SCP_EXTRA_ARGS] [\-\-ssh\-extra\-args SSH_EXTRA_ARGS] [\-k | \-\-connection\-password\-file CONNECTION_PASSWORD_FILE] [\-C] [\-\-syntax\-check] [\-D] [\-e EXTRA_VARS] [\-\-vault\-id VAULT_IDS] [\-\-ask\-vault\-password | \-\-vault\-password\-file VAULT_PASSWORD_FILES] [\-f FORKS] [\-M MODULE_PATH] [\-\-playbook\-dir BASEDIR] [\-\-task\-timeout TASK_TIMEOUT] [\-a MODULE_ARGS] [\-m MODULE_NAME] pattern .UNINDENT .SH DESCRIPTION .sp is an extra\-simple tool/framework/API for doing \(aqremote things\(aq. this command allows you to define and run a single task \(aqplaybook\(aq against a set of hosts .SH COMMON OPTIONS .INDENT 0.0 .INDENT 3.5 host pattern .UNINDENT .UNINDENT .sp \fB\-\-ask\-vault\-password\fP, \fB\-\-ask\-vault\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for vault password .UNINDENT .UNINDENT .sp \fB\-\-become\-method\fP \(aqBECOME_METHOD\(aq .INDENT 0.0 .INDENT 3.5 privilege escalation method to use (default=sudo), use \fIansible\-doc \-t become \-l\fP to list valid choices. .UNINDENT .UNINDENT .sp \fB\-\-become\-password\-file\fP \(aqBECOME_PASSWORD_FILE\(aq, \fB\-\-become\-pass\-file\fP \(aqBECOME_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Become password file .UNINDENT .UNINDENT .sp \fB\-\-become\-user\fP \(aqBECOME_USER\(aq .INDENT 0.0 .INDENT 3.5 run operations as this user (default=root) .UNINDENT .UNINDENT .sp \fB\-\-connection\-password\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq, \fB\-\-conn\-pass\-file\fP \(aqCONNECTION_PASSWORD_FILE\(aq .INDENT 0.0 .INDENT 3.5 Connection password file .UNINDENT .UNINDENT .sp \fB\-\-list\-hosts\fP .INDENT 0.0 .INDENT 3.5 outputs a list of matching hosts; does not execute anything else .UNINDENT .UNINDENT .sp \fB\-\-playbook\-dir\fP \(aqBASEDIR\(aq .INDENT 0.0 .INDENT 3.5 Since this tool does not use playbooks, use this as a substitute playbook directory.This sets the relative path for many features including roles/ group_vars/ etc. .UNINDENT .UNINDENT .sp \fB\-\-private\-key\fP \(aqPRIVATE_KEY_FILE\(aq, \fB\-\-key\-file\fP \(aqPRIVATE_KEY_FILE\(aq .INDENT 0.0 .INDENT 3.5 use this file to authenticate the connection .UNINDENT .UNINDENT .sp \fB\-\-scp\-extra\-args\fP \(aqSCP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to scp only (e.g. \-l) .UNINDENT .UNINDENT .sp \fB\-\-sftp\-extra\-args\fP \(aqSFTP_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to sftp only (e.g. \-f, \-l) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-common\-args\fP \(aqSSH_COMMON_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand) .UNINDENT .UNINDENT .sp \fB\-\-ssh\-extra\-args\fP \(aqSSH_EXTRA_ARGS\(aq .INDENT 0.0 .INDENT 3.5 specify extra arguments to pass to ssh only (e.g. \-R) .UNINDENT .UNINDENT .sp \fB\-\-syntax\-check\fP .INDENT 0.0 .INDENT 3.5 perform a syntax check on the playbook, but do not execute it .UNINDENT .UNINDENT .sp \fB\-\-task\-timeout\fP \(aqTASK_TIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 set task timeout limit in seconds, must be positive integer. .UNINDENT .UNINDENT .sp \fB\-\-vault\-id\fP .INDENT 0.0 .INDENT 3.5 the vault identity to use .UNINDENT .UNINDENT .sp \fB\-\-vault\-password\-file\fP, \fB\-\-vault\-pass\-file\fP .INDENT 0.0 .INDENT 3.5 vault password file .UNINDENT .UNINDENT .sp \fB\-\-version\fP .INDENT 0.0 .INDENT 3.5 show program\(aqs version number, config file location, configured module search path, module location, executable location and exit .UNINDENT .UNINDENT .sp \fB\-B\fP \(aqSECONDS\(aq, \fB\-\-background\fP \(aqSECONDS\(aq .INDENT 0.0 .INDENT 3.5 run asynchronously, failing after X seconds (default=N/A) .UNINDENT .UNINDENT .sp \fB\-C\fP, \fB\-\-check\fP .INDENT 0.0 .INDENT 3.5 don\(aqt make any changes; instead, try to predict some of the changes that may occur .UNINDENT .UNINDENT .sp \fB\-D\fP, \fB\-\-diff\fP .INDENT 0.0 .INDENT 3.5 when changing (small) files and templates, show the differences in those files; works great with \-\-check .UNINDENT .UNINDENT .sp \fB\-K\fP, \fB\-\-ask\-become\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for privilege escalation password .UNINDENT .UNINDENT .sp \fB\-M\fP, \fB\-\-module\-path\fP .INDENT 0.0 .INDENT 3.5 prepend colon\-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules) .UNINDENT .UNINDENT .sp \fB\-P\fP \(aqPOLL_INTERVAL\(aq, \fB\-\-poll\fP \(aqPOLL_INTERVAL\(aq .INDENT 0.0 .INDENT 3.5 set the poll interval if using \-B (default=15) .UNINDENT .UNINDENT .sp \fB\-T\fP \(aqTIMEOUT\(aq, \fB\-\-timeout\fP \(aqTIMEOUT\(aq .INDENT 0.0 .INDENT 3.5 override the connection timeout in seconds (default=10) .UNINDENT .UNINDENT .sp \fB\-a\fP \(aqMODULE_ARGS\(aq, \fB\-\-args\fP \(aqMODULE_ARGS\(aq .INDENT 0.0 .INDENT 3.5 The action\(aqs options in space separated k=v format: \-a \(aqopt1=val1 opt2=val2\(aq .UNINDENT .UNINDENT .sp \fB\-b\fP, \fB\-\-become\fP .INDENT 0.0 .INDENT 3.5 run operations with become (does not imply password prompting) .UNINDENT .UNINDENT .sp \fB\-c\fP \(aqCONNECTION\(aq, \fB\-\-connection\fP \(aqCONNECTION\(aq .INDENT 0.0 .INDENT 3.5 connection type to use (default=smart) .UNINDENT .UNINDENT .sp \fB\-e\fP, \fB\-\-extra\-vars\fP .INDENT 0.0 .INDENT 3.5 set additional variables as key=value or YAML/JSON, if filename prepend with @ .UNINDENT .UNINDENT .sp \fB\-f\fP \(aqFORKS\(aq, \fB\-\-forks\fP \(aqFORKS\(aq .INDENT 0.0 .INDENT 3.5 specify number of parallel processes to use (default=5) .UNINDENT .UNINDENT .sp \fB\-h\fP, \fB\-\-help\fP .INDENT 0.0 .INDENT 3.5 show this help message and exit .UNINDENT .UNINDENT .sp \fB\-i\fP, \fB\-\-inventory\fP, \fB\-\-inventory\-file\fP .INDENT 0.0 .INDENT 3.5 specify inventory host path or comma separated host list. \-\-inventory\-file is deprecated .UNINDENT .UNINDENT .sp \fB\-k\fP, \fB\-\-ask\-pass\fP .INDENT 0.0 .INDENT 3.5 ask for connection password .UNINDENT .UNINDENT .sp \fB\-l\fP \(aqSUBSET\(aq, \fB\-\-limit\fP \(aqSUBSET\(aq .INDENT 0.0 .INDENT 3.5 further limit selected hosts to an additional pattern .UNINDENT .UNINDENT .sp \fB\-m\fP \(aqMODULE_NAME\(aq, \fB\-\-module\-name\fP \(aqMODULE_NAME\(aq .INDENT 0.0 .INDENT 3.5 Name of the action to execute (default=command) .UNINDENT .UNINDENT .sp \fB\-o\fP, \fB\-\-one\-line\fP .INDENT 0.0 .INDENT 3.5 condense output .UNINDENT .UNINDENT .sp \fB\-t\fP \(aqTREE\(aq, \fB\-\-tree\fP \(aqTREE\(aq .INDENT 0.0 .INDENT 3.5 log output to this directory .UNINDENT .UNINDENT .sp \fB\-u\fP \(aqREMOTE_USER\(aq, \fB\-\-user\fP \(aqREMOTE_USER\(aq .INDENT 0.0 .INDENT 3.5 connect as this user (default=None) .UNINDENT .UNINDENT .sp \fB\-v\fP, \fB\-\-verbose\fP .INDENT 0.0 .INDENT 3.5 verbose mode (\-vvv for more, \-vvvv to enable connection debugging) .UNINDENT .UNINDENT .SH ENVIRONMENT .sp The following environment variables may be specified. .sp ANSIBLE_CONFIG \-\- Specify override location for the ansible config file .sp Many more are available for most options in ansible.cfg .sp For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command. .SH FILES .sp /etc/ansible/ansible.cfg \-\- Config file, used if present .sp ~/.ansible.cfg \-\- User config file, overrides the default config if present .sp \&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present. .sp As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. .SH AUTHOR .sp Ansible was originally written by Michael DeHaan. .SH COPYRIGHT .sp Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. .SH SEE ALSO .sp \fBansible\-config\fP (1), \fBansible\-console\fP (1), \fBansible\-doc\fP (1), \fBansible\-galaxy\fP (1), \fBansible\-inventory\fP (1), \fBansible\-playbook\fP (1), \fBansible\-pull\fP (1), \fBansible\-vault\fP (1) .sp Extensive documentation is available in the documentation site: <\fI\%https://docs.ansible.com\fP>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <\fI\%https://github.com/ansible/ansible\fP> .\" Generated by docutils manpage writer. . ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.969559 ansible-core-2.12.0/docs/man/man3/0000755000000000000000000000000000000000000016437 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/man/man3/.gitdir0000644000000000000000000000000000000000000017710 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/docs/templates/0000755000000000000000000000000000000000000017024 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/cli_rst.j20000644000000000000000000000645600000000000020733 0ustar00rootroot00000000000000:source: {{ cli }}.py {% set name = cli_name -%} {% set name_slug = cli_name -%} .. _{{name}}: {% set name_len = name|length + 0-%} {{ '=' * name_len }} {{name}} {{ '=' * name_len }} :strong:`{{short_desc|default('')}}` .. contents:: :local: :depth: {{content_depth}} .. program:: {{cli_name}} Synopsis ======== .. code-block:: bash {{ usage|replace('%prog', cli_name) }} Description =========== {{ long_desc|default('', True) }} {% if options %} Common Options ============== {% for option in options|sort(attribute='options') if option.options %} .. option:: {% for switch in option['options'] %}{{switch}}{% if option['arg'] %} <{{option['arg']}}>{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} {{ option['desc'] }} {% endfor %} {% endif %} {% if arguments %} ARGUMENTS ========= .. program:: {{cli_name}} {% for arg in arguments %} .. option:: {{ arg }} {{ (arguments[arg]|default(' '))}} {% endfor %} {% endif %} {% if actions %} Actions ======= {% for action in actions %} .. program:: {{cli_name}} {{action}} .. _{{cli_name|replace('-','_')}}_{{action}}: {{ action}} {{ '-' * action|length}} {{ (actions[action]['desc']|default(' '))}} {% if actions[action]['options'] %} {% for option in actions[action]['options']|sort(attribute='options') %} .. option:: {% for switch in option['options'] if switch in actions[action]['option_names'] %}{{switch}} {% if option['arg'] %} <{{option['arg']}}>{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} {{ (option['desc']) }} {% endfor %} {% endif %} {% for sub_action in actions[action]['actions'] %} .. program:: {{cli_name}} {{action}} {{sub_action}} .. _{{cli_name|replace('-','_')}}_{{action}}_{{sub_action}}: {{ action + " " + sub_action }} {{ '+' * (action|length + sub_action|length + 1) }} {{ (actions[action]['actions'][sub_action]['desc']|default(' '))}} {% if actions[action]['actions'][sub_action]['options'] %} {% for option in actions[action]['actions'][sub_action]['options']|sort(attribute='options') %} .. option:: {% for switch in option['options'] if switch in actions[action]['actions'][sub_action]['option_names'] %}{{switch}} {% if option['arg'] %} <{{option['arg']}}>{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} {{ (option['desc']) }} {% endfor %} {% endif %} {% endfor %} {% endfor %} .. program:: {{cli_name}} {% endif %} Environment =========== The following environment variables may be specified. {% if inventory %} :envvar:`ANSIBLE_INVENTORY` -- Override the default ansible inventory file {% endif %} {% if library %} :envvar:`ANSIBLE_LIBRARY` -- Override the default ansible module library path {% endif %} :envvar:`ANSIBLE_CONFIG` -- Override the default ansible config file Many more are available for most options in ansible.cfg Files ===== {% if inventory %} :file:`/etc/ansible/hosts` -- Default inventory file {% endif %} :file:`/etc/ansible/ansible.cfg` -- Config file, used if present :file:`~/.ansible.cfg` -- User config file, overrides the default config if present Author ====== Ansible was originally written by Michael DeHaan. See the `AUTHORS` file for a complete list of contributors. License ======= Ansible is released under the terms of the GPLv3+ License. See also ======== {% for other in cli_bin_name_list|sort %}:manpage:`{{other}}(1)`, {% endfor %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/collections_galaxy_meta.rst.j20000644000000000000000000000433000000000000024761 0ustar00rootroot00000000000000.. _collections_galaxy_meta: ************************************ Collection Galaxy metadata structure ************************************ A key component of an Ansible collection is the ``galaxy.yml`` file placed in the root directory of a collection. This file contains the metadata of the collection that is used to generate a collection artifact. Structure ========= The ``galaxy.yml`` file must contain the following keys in valid YAML: .. rst-class:: documentation-table .. list-table:: :header-rows: 1 :widths: auto * - Key - Comment {%- for entry in options %} * - .. rst-class:: value-name @{ entry.key }@ |br| .. rst-class:: value-type @{ entry.type | documented_type }@ |_| {% if entry.get('required', False) -%} .. rst-class:: value-separator / |_| .. rst-class:: value-required required {%- endif %} {% if 'version_added' in entry -%} .. rst-class:: value-added-in |br| version_added: @{ entry.version_added }@ |_| {%- endif %} - {% for desc in entry.description -%} @{ desc | trim | rst_ify }@ {% endfor -%} {%- endfor %} Examples ======== .. code-block:: yaml namespace: "namespace_name" name: "collection_name" version: "1.0.12" readme: "README.md" authors: - "Author1" - "Author2 (https://author2.example.com)" - "Author3 " dependencies: "other_namespace.collection1": ">=1.0.0" "other_namespace.collection2": ">=2.0.0,<3.0.0" "anderson55.my_collection": "*" # note: "*" selects the highest version available license: - "MIT" tags: - demo - collection repository: "https://www.github.com/my_org/my_collection" .. seealso:: :ref:`developing_collections` Develop or modify a collection. :ref:`developing_modules_general` Learn about how to write Ansible modules :ref:`collections` Learn how to install and use collections. `Mailing List `_ The development mailing list `irc.libera.chat `_ #ansible IRC chat channel ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/config.rst.j20000644000000000000000000002160500000000000021341 0ustar00rootroot00000000000000.. _ansible_configuration_settings: {% set name = 'Ansible Configuration Settings' -%} {% set name_slug = 'config' -%} {% set name_len = name|length + 0-%} {{ '=' * name_len }} {{name}} {{ '=' * name_len }} Ansible supports several sources for configuring its behavior, including an ini file named ``ansible.cfg``, environment variables, command-line options, playbook keywords, and variables. See :ref:`general_precedence_rules` for details on the relative precedence of each source. The ``ansible-config`` utility allows users to see all the configuration settings available, their defaults, how to set them and where their current value comes from. See :ref:`ansible-config` for more information. .. _ansible_configuration_settings_locations: The configuration file ====================== Changes can be made and used in a configuration file which will be searched for in the following order: * ``ANSIBLE_CONFIG`` (environment variable if set) * ``ansible.cfg`` (in the current directory) * ``~/.ansible.cfg`` (in the home directory) * ``/etc/ansible/ansible.cfg`` Ansible will process the above list and use the first file found, all others are ignored. .. note:: The configuration file is one variant of an INI format. Both the hash sign (``#``) and semicolon (``;``) are allowed as comment markers when the comment starts the line. However, if the comment is inline with regular values, only the semicolon is allowed to introduce the comment. For instance:: # some basic default values... inventory = /etc/ansible/hosts ; This points to the file that lists your hosts .. _cfg_in_world_writable_dir: Avoiding security risks with ``ansible.cfg`` in the current directory --------------------------------------------------------------------- If Ansible were to load ``ansible.cfg`` from a world-writable current working directory, it would create a serious security risk. Another user could place their own config file there, designed to make Ansible run malicious code both locally and remotely, possibly with elevated privileges. For this reason, Ansible will not automatically load a config file from the current working directory if the directory is world-writable. If you depend on using Ansible with a config file in the current working directory, the best way to avoid this problem is to restrict access to your Ansible directories to particular user(s) and/or group(s). If your Ansible directories live on a filesystem which has to emulate Unix permissions, like Vagrant or Windows Subsystem for Linux (WSL), you may, at first, not know how you can fix this as ``chmod``, ``chown``, and ``chgrp`` might not work there. In most of those cases, the correct fix is to modify the mount options of the filesystem so the files and directories are readable and writable by the users and groups running Ansible but closed to others. For more details on the correct settings, see: * for Vagrant, the `Vagrant documentation `_ covers synced folder permissions. * for WSL, the `WSL docs `_ and this `Microsoft blog post `_ cover mount options. If you absolutely depend on storing your Ansible config in a world-writable current working directory, you can explicitly specify the config file via the :envvar:`ANSIBLE_CONFIG` environment variable. Please take appropriate steps to mitigate the security concerns above before doing so. Relative paths for configuration -------------------------------- You can specify a relative path for many configuration options. In most of those cases the path used will be relative to the ``ansible.cfg`` file used for the current execution. If you need a path relative to your current working directory (CWD) you can use the ``{%raw%}{{CWD}}{%endraw%}`` macro to specify it. We do not recommend this approach, as using your CWD as the root of relative paths can be a security risk. For example: ``cd /tmp; secureinfo=./newrootpassword ansible-playbook ~/safestuff/change_root_pwd.yml``. Common Options ============== This is a copy of the options available from our release, your local install might have extra options due to additional plugins, you can use the command line utility mentioned above (`ansible-config`) to browse through those. {% if config_options %} {% for config_option in config_options|sort %} {% set config_len = config_option|length -%} {% set config = config_options[config_option] %} .. _{{config_option}}: {{config_option}} {{ '-' * config_len }} {% if config['description'] and config['description'] != [''] %} {% if config['description'] != ['TODO: write it'] %} :Description: {{' '.join(config['description'])}} {% endif %} {% endif %} {% if config['type'] %} :Type: {{config['type']}} {% endif %} {% if 'default' in config %} :Default: ``{{config['default']}}`` {% endif %} {% if config.get('choices', False) %} :Choices: {% if config['choices'] is mapping %} {% for key in config['choices'].keys() %} - :{{key}}: {{ config['choices'][key] }} {% endfor %} {% else %} {% for key in config['choices'] %} - :{{key}}: {% endfor %} {% endif %} {% endif %} {% if config['version_added'] %} :Version Added: {{config['version_added']}} {% endif %} {% if config.get('ini', False) %} :Ini: {% for ini_map in config['ini']|sort(attribute='section') %} {% if config['ini']|length > 1 %}- {% endif %}:Section: [{{ini_map['section']}}] {% if config['ini']|length > 1 %} {% endif %}:Key: {{ini_map['key']}} {% if ini_map['version_added'] %} :Version Added: {{ini_map['version_added']}} {% endif %} {% if ini_map['deprecated'] %} :Deprecated in: {{ini_map['deprecated']['version']}} :Deprecated detail: {{ini_map['deprecated']['why']}} {% if ini_map['deprecated']['alternatives'] %} :Deprecated alternatives: {{ini_map['deprecated']['alternatives']}} {% endif %} {% endif %} {% endfor %} {% endif %} {% if config.get('env', False) %} :Environment: {% for env_var_map in config['env']|sort(attribute='name') %} {% if config['env']|length > 1 %}- {% endif %}:Variable: :envvar:`{{env_var_map['name']}}` {% if env_var_map['version_added'] %} :Version Added: {{env_var_map['version_added']}} {% endif %} {% if env_var_map['deprecated'] %} :Deprecated in: {{env_var_map['deprecated']['version']}} :Deprecated detail: {{env_var_map['deprecated']['why']}} {% if env_var_map['deprecated']['alternatives'] %} :Deprecated alternatives: {{env_var_map['deprecated']['alternatives']}} {% endif %} {% endif %} {% endfor %} {% endif %} {% if config.get('vars', False) %} :Variables: {% for a_var in config['vars']|sort(attribute='name') %} {% if config['vars']|length > 1 %}- {%endif%}:name: `{{a_var['name']}}` {% if a_var['version_added'] %} :Version Added: {{a_var['version_added']}} {% endif %} {% if a_var['deprecated'] %} :Deprecated in: {{a_var['deprecated']['version']}} :Deprecated detail: {{a_Var['deprecated']['why']}} {% if a_var['deprecated']['alternatives'] %} :Deprecated alternatives: {{a_var['deprecated']['alternatives']}} {% endif %} {% endif %} {% endfor %} {% endif %} {% if config['deprecated'] %} :Deprecated in: {{config['deprecated']['version']}} :Deprecated detail: {{config['deprecated']['why']}} {% if config['deprecated']['alternatives'] %} :Deprecated alternatives: {{config['deprecated']['alternatives']}} {% endif %} {% endif %} {% endfor %} Environment Variables ===================== .. envvar:: ANSIBLE_CONFIG Override the default ansible config file {% for config_option in config_options %} {% for env_var_map in config_options[config_option]['env'] %} .. envvar:: {{env_var_map['name']}} {% if config_options[config_option]['description'] and config_options[config_option]['description'] != [''] %} {% if config_options[config_option]['description'] != ['TODO: write it'] %} {{ ''.join(config_options[config_option]['description']) }} {% endif %} {% endif %} See also :ref:`{{config_option}} <{{config_option}}>` {% if env_var_map['version_added'] %} :Version Added: {{env_var_map['version_added']}} {% endif %} {% if env_var_map['deprecated'] %} :Deprecated in: {{env_var_map['deprecated']['version']}} :Deprecated detail: {{env_var_map['deprecated']['why']}} {% if env_var_map['deprecated']['alternatives'] %} :Deprecated alternatives: {{env_var_map['deprecated']['alternatives']}} {% endif %} {% endif %} {% endfor %} {% endfor %} {% endif %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/man.j20000644000000000000000000000632100000000000020036 0ustar00rootroot00000000000000{% set name = ('ansible' if cli == 'adhoc' else 'ansible-%s' % cli) -%} {{name}} {{ '=' * ( name|length|int ) }} {{ '-' * ( short_desc|default('')|string|length|int ) }} {{short_desc|default('')}} {{ '-' * ( short_desc|default('')|string|length|int ) }} :Version: Ansible %VERSION% :Manual section: 1 :Manual group: System administration commands SYNOPSIS -------- {{ usage|replace('%prog', name) }} DESCRIPTION ----------- {{ long_desc|default('', True)|wordwrap }} {% if options %} COMMON OPTIONS -------------- {% for option in options|sort(attribute='options') %} {% for switch in option['options'] %}**{{switch}}**{% if option['arg'] %} '{{option['arg']}}'{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} {{ option['desc'] }} {% endfor %} {% endif %} {% if arguments %} ARGUMENTS --------- {% for arg in arguments %} {{ arg }} {{ (arguments[arg]|default(' '))|wordwrap }} {% endfor %} {% endif %} {% if actions %} ACTIONS ------- {% for action in actions %} **{{ action }}** {{ (actions[action]['desc']|default(' ')) |replace('\n', ' ')}} {% if actions[action]['options'] %} {% for option in actions[action]['options']|sort(attribute='options') %} {% for switch in option['options'] if switch in actions[action]['option_names'] %} **{{switch}}**{% if option['arg'] %} '{{option['arg']}}'{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} {{ (option['desc']) }} {% endfor %} {% endif %} {% endfor %} {% endif %} {% if inventory %} INVENTORY --------- Ansible stores the hosts it can potentially operate on in an inventory. This can be an YAML file, ini-like file, a script, directory, list, etc. For additional options, see the documentation on https://docs.ansible.com/. {% endif %} ENVIRONMENT ----------- The following environment variables may be specified. {% if inventory %} ANSIBLE_INVENTORY -- Override the default ansible inventory sources {% endif %} {% if library %} ANSIBLE_LIBRARY -- Override the default ansible module library path {% endif %} ANSIBLE_CONFIG -- Specify override location for the ansible config file Many more are available for most options in ansible.cfg For a full list check https://docs.ansible.com/. or use the `ansible-config` command. FILES ----- {% if inventory %} /etc/ansible/hosts -- Default inventory file {% endif %} /etc/ansible/ansible.cfg -- Config file, used if present ~/.ansible.cfg -- User config file, overrides the default config if present ./ansible.cfg -- Local config file (in current working directory) assumed to be 'project specific' and overrides the rest if present. As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. AUTHOR ------ Ansible was originally written by Michael DeHaan. COPYRIGHT --------- Copyright © 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license. SEE ALSO -------- {% for other in cli_list|sort %}{% if other != cli %}**ansible{% if other != 'adhoc' %}-{{other}}{% endif %}** (1){% if not loop.last %}, {% endif %}{% endif %}{% endfor %} Extensive documentation is available in the documentation site: . IRC and mailing list info can be found in file CONTRIBUTING.md, available in: ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/modules_by_category.rst.j20000644000000000000000000000053100000000000024126 0ustar00rootroot00000000000000.. _modules_by_category: {# avoids rST "isn't included in any toctree" errors for module index docs #} :orphan: Module Index ============ .. toctree:: :maxdepth: 1 {% for name in categories %} {# strip out empty category names as a result flattening the dir structure #} {% if name %} list_of_@{ name }@_modules {% endif %} {% endfor %} ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.536556 ansible-core-2.12.0/docs/templates/playbooks_keywords.rst.j20000644000000000000000000000166400000000000024031 0ustar00rootroot00000000000000.. _playbook_keywords: Playbook Keywords ================= These are the keywords available on common playbook objects. Keywords are one of several sources for configuring Ansible behavior. See :ref:`general_precedence_rules` for details on the relative precedence of each source. .. note:: Please note: * Aliases for the directives are not reflected here, nor are mutable one. For example, :term:`action` in task can be substituted by the name of any Ansible module. * The keywords do not have ``version_added`` information at this time * Some keywords set defaults for the objects inside of them rather than for the objects themselves .. contents:: :local: :depth: 1 {% for name in playbook_class_names %} {{ name }} {{ '-' * name|length }} {#.. glossary::#} {% for attribute in pb_keywords[name]|sort %} {{ attribute }} {{ pb_keywords[name][attribute] |indent(8) }} {% endfor %} {% endfor %} ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/examples/0000755000000000000000000000000000000000000015714 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5375562 ansible-core-2.12.0/examples/ansible.cfg0000644000000000000000000000114600000000000020014 0ustar00rootroot00000000000000# Since Ansible 2.12 (core): # To generate an example config file (a "disabled" one with all default settings, commented out): # $ ansible-config init --disabled > ansible.cfg # # Also you can now have a more complete file by including existing plugins: # ansible-config init --disabled -t all > ansible.cfg # For previous versions of Ansible you can check for examples in the 'stable' branches of each version # Note that this file was always incomplete and lagging changes to configuration settings # for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5375562 ansible-core-2.12.0/examples/hosts0000644000000000000000000000177200000000000017006 0ustar00rootroot00000000000000# This is the default ansible 'hosts' file. # # It should live in /etc/ansible/hosts # # - Comments begin with the '#' character # - Blank lines are ignored # - Groups of hosts are delimited by [header] elements # - You can enter hostnames or ip addresses # - A hostname/ip can be a member of multiple groups # Ex 1: Ungrouped hosts, specify before any group headers: ## green.example.com ## blue.example.com ## 192.168.100.1 ## 192.168.100.10 # Ex 2: A collection of hosts belonging to the 'webservers' group: ## [webservers] ## alpha.example.org ## beta.example.org ## 192.168.1.100 ## 192.168.1.110 # If you have multiple hosts following a pattern, you can specify # them like this: ## www[001:006].example.com # Ex 3: A collection of database servers in the 'dbservers' group: ## [dbservers] ## ## db01.intranet.mydomain.net ## db02.intranet.mydomain.net ## 10.25.1.56 ## 10.25.1.57 # Here's another example of host ranges, this time there are no # leading 0s: ## db-[99:101]-node.example.com ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/examples/scripts/0000755000000000000000000000000000000000000017403 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5375562 ansible-core-2.12.0/examples/scripts/ConfigureRemotingForAnsible.ps10000644000000000000000000003662600000000000025440 0ustar00rootroot00000000000000#Requires -Version 3.0 # Configure a Windows host for remote management with Ansible # ----------------------------------------------------------- # # This script checks the current WinRM (PS Remoting) configuration and makes # the necessary changes to allow Ansible to connect, authenticate and # execute PowerShell commands. # # All events are logged to the Windows EventLog, useful for unattended runs. # # Use option -Verbose in order to see the verbose output messages. # # Use option -CertValidityDays to specify how long this certificate is valid # starting from today. So you would specify -CertValidityDays 3650 to get # a 10-year valid certificate. # # Use option -ForceNewSSLCert if the system has been SysPreped and a new # SSL Certificate must be forced on the WinRM Listener when re-running this # script. This is necessary when a new SID and CN name is created. # # Use option -EnableCredSSP to enable CredSSP as an authentication option. # # Use option -DisableBasicAuth to disable basic authentication. # # Use option -SkipNetworkProfileCheck to skip the network profile check. # Without specifying this the script will only run if the device's interfaces # are in DOMAIN or PRIVATE zones. Provide this switch if you want to enable # WinRM on a device with an interface in PUBLIC zone. # # Use option -SubjectName to specify the CN name of the certificate. This # defaults to the system's hostname and generally should not be specified. # Written by Trond Hindenes # Updated by Chris Church # Updated by Michael Crilly # Updated by Anton Ouzounov # Updated by Nicolas Simond # Updated by Dag Wieërs # Updated by Jordan Borean # Updated by Erwan Quélin # Updated by David Norman # # Version 1.0 - 2014-07-06 # Version 1.1 - 2014-11-11 # Version 1.2 - 2015-05-15 # Version 1.3 - 2016-04-04 # Version 1.4 - 2017-01-05 # Version 1.5 - 2017-02-09 # Version 1.6 - 2017-04-18 # Version 1.7 - 2017-11-23 # Version 1.8 - 2018-02-23 # Version 1.9 - 2018-09-21 # Support -Verbose option [CmdletBinding()] Param ( [string]$SubjectName = $env:COMPUTERNAME, [int]$CertValidityDays = 1095, [switch]$SkipNetworkProfileCheck, $CreateSelfSignedCert = $true, [switch]$ForceNewSSLCert, [switch]$GlobalHttpFirewallAccess, [switch]$DisableBasicAuth = $false, [switch]$EnableCredSSP ) Function Write-Log { $Message = $args[0] Write-EventLog -LogName Application -Source $EventSource -EntryType Information -EventId 1 -Message $Message } Function Write-VerboseLog { $Message = $args[0] Write-Verbose $Message Write-Log $Message } Function Write-HostLog { $Message = $args[0] Write-Output $Message Write-Log $Message } Function New-LegacySelfSignedCert { Param ( [string]$SubjectName, [int]$ValidDays = 1095 ) $hostnonFQDN = $env:computerName $hostFQDN = [System.Net.Dns]::GetHostByName(($env:computerName)).Hostname $SignatureAlgorithm = "SHA256" $name = New-Object -COM "X509Enrollment.CX500DistinguishedName.1" $name.Encode("CN=$SubjectName", 0) $key = New-Object -COM "X509Enrollment.CX509PrivateKey.1" $key.ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider" $key.KeySpec = 1 $key.Length = 4096 $key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)" $key.MachineContext = 1 $key.Create() $serverauthoid = New-Object -COM "X509Enrollment.CObjectId.1" $serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1") $ekuoids = New-Object -COM "X509Enrollment.CObjectIds.1" $ekuoids.Add($serverauthoid) $ekuext = New-Object -COM "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1" $ekuext.InitializeEncode($ekuoids) $cert = New-Object -COM "X509Enrollment.CX509CertificateRequestCertificate.1" $cert.InitializeFromPrivateKey(2, $key, "") $cert.Subject = $name $cert.Issuer = $cert.Subject $cert.NotBefore = (Get-Date).AddDays(-1) $cert.NotAfter = $cert.NotBefore.AddDays($ValidDays) $SigOID = New-Object -ComObject X509Enrollment.CObjectId $SigOID.InitializeFromValue(([Security.Cryptography.Oid]$SignatureAlgorithm).Value) [string[]] $AlternativeName += $hostnonFQDN $AlternativeName += $hostFQDN $IAlternativeNames = New-Object -ComObject X509Enrollment.CAlternativeNames foreach ($AN in $AlternativeName) { $AltName = New-Object -ComObject X509Enrollment.CAlternativeName $AltName.InitializeFromString(0x3,$AN) $IAlternativeNames.Add($AltName) } $SubjectAlternativeName = New-Object -ComObject X509Enrollment.CX509ExtensionAlternativeNames $SubjectAlternativeName.InitializeEncode($IAlternativeNames) [String[]]$KeyUsage = ("DigitalSignature", "KeyEncipherment") $KeyUsageObj = New-Object -ComObject X509Enrollment.CX509ExtensionKeyUsage $KeyUsageObj.InitializeEncode([int][Security.Cryptography.X509Certificates.X509KeyUsageFlags]($KeyUsage)) $KeyUsageObj.Critical = $true $cert.X509Extensions.Add($KeyUsageObj) $cert.X509Extensions.Add($ekuext) $cert.SignatureInformation.HashAlgorithm = $SigOID $CERT.X509Extensions.Add($SubjectAlternativeName) $cert.Encode() $enrollment = New-Object -COM "X509Enrollment.CX509Enrollment.1" $enrollment.InitializeFromRequest($cert) $certdata = $enrollment.CreateRequest(0) $enrollment.InstallResponse(2, $certdata, 0, "") # extract/return the thumbprint from the generated cert $parsed_cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $parsed_cert.Import([System.Text.Encoding]::UTF8.GetBytes($certdata)) return $parsed_cert.Thumbprint } Function Enable-GlobalHttpFirewallAccess { Write-Verbose "Forcing global HTTP firewall access" # this is a fairly naive implementation; could be more sophisticated about rule matching/collapsing $fw = New-Object -ComObject HNetCfg.FWPolicy2 # try to find/enable the default rule first $add_rule = $false $matching_rules = $fw.Rules | Where-Object { $_.Name -eq "Windows Remote Management (HTTP-In)" } $rule = $null If ($matching_rules) { If ($matching_rules -isnot [Array]) { Write-Verbose "Editing existing single HTTP firewall rule" $rule = $matching_rules } Else { # try to find one with the All or Public profile first Write-Verbose "Found multiple existing HTTP firewall rules..." $rule = $matching_rules | ForEach-Object { $_.Profiles -band 4 }[0] If (-not $rule -or $rule -is [Array]) { Write-Verbose "Editing an arbitrary single HTTP firewall rule (multiple existed)" # oh well, just pick the first one $rule = $matching_rules[0] } } } If (-not $rule) { Write-Verbose "Creating a new HTTP firewall rule" $rule = New-Object -ComObject HNetCfg.FWRule $rule.Name = "Windows Remote Management (HTTP-In)" $rule.Description = "Inbound rule for Windows Remote Management via WS-Management. [TCP 5985]" $add_rule = $true } $rule.Profiles = 0x7FFFFFFF $rule.Protocol = 6 $rule.LocalPorts = 5985 $rule.RemotePorts = "*" $rule.LocalAddresses = "*" $rule.RemoteAddresses = "*" $rule.Enabled = $true $rule.Direction = 1 $rule.Action = 1 $rule.Grouping = "Windows Remote Management" If ($add_rule) { $fw.Rules.Add($rule) } Write-Verbose "HTTP firewall rule $($rule.Name) updated" } # Setup error handling. Trap { $_ Exit 1 } $ErrorActionPreference = "Stop" # Get the ID and security principal of the current user account $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent() $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID) # Get the security principal for the Administrator role $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator # Check to see if we are currently running "as Administrator" if (-Not $myWindowsPrincipal.IsInRole($adminRole)) { Write-Output "ERROR: You need elevated Administrator privileges in order to run this script." Write-Output " Start Windows PowerShell by using the Run as Administrator option." Exit 2 } $EventSource = $MyInvocation.MyCommand.Name If (-Not $EventSource) { $EventSource = "Powershell CLI" } If ([System.Diagnostics.EventLog]::Exists('Application') -eq $False -or [System.Diagnostics.EventLog]::SourceExists($EventSource) -eq $False) { New-EventLog -LogName Application -Source $EventSource } # Detect PowerShell version. If ($PSVersionTable.PSVersion.Major -lt 3) { Write-Log "PowerShell version 3 or higher is required." Throw "PowerShell version 3 or higher is required." } # Find and start the WinRM service. Write-Verbose "Verifying WinRM service." If (!(Get-Service "WinRM")) { Write-Log "Unable to find the WinRM service." Throw "Unable to find the WinRM service." } ElseIf ((Get-Service "WinRM").Status -ne "Running") { Write-Verbose "Setting WinRM service to start automatically on boot." Set-Service -Name "WinRM" -StartupType Automatic Write-Log "Set WinRM service to start automatically on boot." Write-Verbose "Starting WinRM service." Start-Service -Name "WinRM" -ErrorAction Stop Write-Log "Started WinRM service." } # WinRM should be running; check that we have a PS session config. If (!(Get-PSSessionConfiguration -Verbose:$false) -or (!(Get-ChildItem WSMan:\localhost\Listener))) { If ($SkipNetworkProfileCheck) { Write-Verbose "Enabling PS Remoting without checking Network profile." Enable-PSRemoting -SkipNetworkProfileCheck -Force -ErrorAction Stop Write-Log "Enabled PS Remoting without checking Network profile." } Else { Write-Verbose "Enabling PS Remoting." Enable-PSRemoting -Force -ErrorAction Stop Write-Log "Enabled PS Remoting." } } Else { Write-Verbose "PS Remoting is already enabled." } # Ensure LocalAccountTokenFilterPolicy is set to 1 # https://github.com/ansible/ansible/issues/42978 $token_path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" $token_prop_name = "LocalAccountTokenFilterPolicy" $token_key = Get-Item -Path $token_path $token_value = $token_key.GetValue($token_prop_name, $null) if ($token_value -ne 1) { Write-Verbose "Setting LocalAccountTOkenFilterPolicy to 1" if ($null -ne $token_value) { Remove-ItemProperty -Path $token_path -Name $token_prop_name } New-ItemProperty -Path $token_path -Name $token_prop_name -Value 1 -PropertyType DWORD > $null } # Make sure there is a SSL listener. $listeners = Get-ChildItem WSMan:\localhost\Listener If (!($listeners | Where-Object {$_.Keys -like "TRANSPORT=HTTPS"})) { # We cannot use New-SelfSignedCertificate on 2012R2 and earlier $thumbprint = New-LegacySelfSignedCert -SubjectName $SubjectName -ValidDays $CertValidityDays Write-HostLog "Self-signed SSL certificate generated; thumbprint: $thumbprint" # Create the hashtables of settings to be used. $valueset = @{ Hostname = $SubjectName CertificateThumbprint = $thumbprint } $selectorset = @{ Transport = "HTTPS" Address = "*" } Write-Verbose "Enabling SSL listener." New-WSManInstance -ResourceURI 'winrm/config/Listener' -SelectorSet $selectorset -ValueSet $valueset Write-Log "Enabled SSL listener." } Else { Write-Verbose "SSL listener is already active." # Force a new SSL cert on Listener if the $ForceNewSSLCert If ($ForceNewSSLCert) { # We cannot use New-SelfSignedCertificate on 2012R2 and earlier $thumbprint = New-LegacySelfSignedCert -SubjectName $SubjectName -ValidDays $CertValidityDays Write-HostLog "Self-signed SSL certificate generated; thumbprint: $thumbprint" $valueset = @{ CertificateThumbprint = $thumbprint Hostname = $SubjectName } # Delete the listener for SSL $selectorset = @{ Address = "*" Transport = "HTTPS" } Remove-WSManInstance -ResourceURI 'winrm/config/Listener' -SelectorSet $selectorset # Add new Listener with new SSL cert New-WSManInstance -ResourceURI 'winrm/config/Listener' -SelectorSet $selectorset -ValueSet $valueset } } # Check for basic authentication. $basicAuthSetting = Get-ChildItem WSMan:\localhost\Service\Auth | Where-Object {$_.Name -eq "Basic"} If ($DisableBasicAuth) { If (($basicAuthSetting.Value) -eq $true) { Write-Verbose "Disabling basic auth support." Set-Item -Path "WSMan:\localhost\Service\Auth\Basic" -Value $false Write-Log "Disabled basic auth support." } Else { Write-Verbose "Basic auth is already disabled." } } Else { If (($basicAuthSetting.Value) -eq $false) { Write-Verbose "Enabling basic auth support." Set-Item -Path "WSMan:\localhost\Service\Auth\Basic" -Value $true Write-Log "Enabled basic auth support." } Else { Write-Verbose "Basic auth is already enabled." } } # If EnableCredSSP if set to true If ($EnableCredSSP) { # Check for CredSSP authentication $credsspAuthSetting = Get-ChildItem WSMan:\localhost\Service\Auth | Where-Object {$_.Name -eq "CredSSP"} If (($credsspAuthSetting.Value) -eq $false) { Write-Verbose "Enabling CredSSP auth support." Enable-WSManCredSSP -role server -Force Write-Log "Enabled CredSSP auth support." } } If ($GlobalHttpFirewallAccess) { Enable-GlobalHttpFirewallAccess } # Configure firewall to allow WinRM HTTPS connections. $fwtest1 = netsh advfirewall firewall show rule name="Allow WinRM HTTPS" $fwtest2 = netsh advfirewall firewall show rule name="Allow WinRM HTTPS" profile=any If ($fwtest1.count -lt 5) { Write-Verbose "Adding firewall rule to allow WinRM HTTPS." netsh advfirewall firewall add rule profile=any name="Allow WinRM HTTPS" dir=in localport=5986 protocol=TCP action=allow Write-Log "Added firewall rule to allow WinRM HTTPS." } ElseIf (($fwtest1.count -ge 5) -and ($fwtest2.count -lt 5)) { Write-Verbose "Updating firewall rule to allow WinRM HTTPS for any profile." netsh advfirewall firewall set rule name="Allow WinRM HTTPS" new profile=any Write-Log "Updated firewall rule to allow WinRM HTTPS for any profile." } Else { Write-Verbose "Firewall rule already exists to allow WinRM HTTPS." } # Test a remoting connection to localhost, which should work. $httpResult = Invoke-Command -ComputerName "localhost" -ScriptBlock {$env:COMPUTERNAME} -ErrorVariable httpError -ErrorAction SilentlyContinue $httpsOptions = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck $httpsResult = New-PSSession -UseSSL -ComputerName "localhost" -SessionOption $httpsOptions -ErrorVariable httpsError -ErrorAction SilentlyContinue If ($httpResult -and $httpsResult) { Write-Verbose "HTTP: Enabled | HTTPS: Enabled" } ElseIf ($httpsResult -and !$httpResult) { Write-Verbose "HTTP: Disabled | HTTPS: Enabled" } ElseIf ($httpResult -and !$httpsResult) { Write-Verbose "HTTP: Enabled | HTTPS: Disabled" } Else { Write-Log "Unable to establish an HTTP or HTTPS remoting session." Throw "Unable to establish an HTTP or HTTPS remoting session." } Write-VerboseLog "PS Remoting has been successfully configured for Ansible." ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.538556 ansible-core-2.12.0/examples/scripts/upgrade_to_ps3.ps10000644000000000000000000000463500000000000022756 0ustar00rootroot00000000000000 # Powershell script to upgrade a PowerShell 2.0 system to PowerShell 3.0 # based on http://occasionalutility.blogspot.com/2013/11/everyday-powershell-part-7-powershell.html # # some Ansible modules that may use Powershell 3 features, so systems may need # to be upgraded. This may be used by a sample playbook. Refer to the windows # documentation on docs.ansible.com for details. # # - hosts: windows # tasks: # - script: upgrade_to_ps3.ps1 # Get version of OS # 6.0 is 2008 # 6.1 is 2008 R2 # 6.2 is 2012 # 6.3 is 2012 R2 if ($PSVersionTable.psversion.Major -ge 3) { Write-Output "Powershell 3 Installed already; You don't need this" Exit } $powershellpath = "C:\powershell" function download-file { param ([string]$path, [string]$local) $client = new-object system.net.WebClient $client.Headers.Add("user-agent", "PowerShell") $client.downloadfile($path, $local) } if (!(test-path $powershellpath)) { New-Item -ItemType directory -Path $powershellpath } # .NET Framework 4.0 is necessary. #if (($PSVersionTable.CLRVersion.Major) -lt 2) #{ # $DownloadUrl = "http://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_x86_x64.exe" # $FileName = $DownLoadUrl.Split('/')[-1] # download-file $downloadurl "$powershellpath\$filename" # ."$powershellpath\$filename" /quiet /norestart #} #You may need to reboot after the .NET install if so just run the script again. # If the Operating System is above 6.2, then you already have PowerShell Version > 3 if ([Environment]::OSVersion.Version.Major -gt 6) { Write-Output "OS is new; upgrade not needed." Exit } $osminor = [environment]::OSVersion.Version.Minor $architecture = $ENV:PROCESSOR_ARCHITECTURE if ($architecture -eq "AMD64") { $architecture = "x64" } else { $architecture = "x86" } if ($osminor -eq 1) { $DownloadUrl = "http://download.microsoft.com/download/E/7/6/E76850B8-DA6E-4FF5-8CCE-A24FC513FD16/Windows6.1-KB2506143-" + $architecture + ".msu" } elseif ($osminor -eq 0) { $DownloadUrl = "http://download.microsoft.com/download/E/7/6/E76850B8-DA6E-4FF5-8CCE-A24FC513FD16/Windows6.0-KB2506146-" + $architecture + ".msu" } else { # Nothing to do; In theory this point will never be reached. Exit } $FileName = $DownLoadUrl.Split('/')[-1] download-file $downloadurl "$powershellpath\$filename" Start-Process -FilePath "$powershellpath\$filename" -ArgumentList /quiet ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/hacking/0000755000000000000000000000000000000000000015502 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.539556 ansible-core-2.12.0/hacking/build-ansible.py0000755000000000000000000000553000000000000020574 0ustar00rootroot00000000000000#!/usr/bin/env python # coding: utf-8 # PYTHON_ARGCOMPLETE_OK # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import argparse import os.path import sys from straight.plugin import load try: import argcomplete except ImportError: argcomplete = None def build_lib_path(this_script=__file__): """Return path to the common build library directory.""" hacking_dir = os.path.dirname(this_script) libdir = os.path.abspath(os.path.join(hacking_dir, 'build_library')) return libdir def ansible_lib_path(this_script=__file__): """Return path to the common build library directory.""" hacking_dir = os.path.dirname(this_script) libdir = os.path.abspath(os.path.join(hacking_dir, '..', 'lib')) return libdir sys.path.insert(0, ansible_lib_path()) sys.path.insert(0, build_lib_path()) from build_ansible import commands, errors def create_arg_parser(program_name): """ Creates a command line argument parser :arg program_name: The name of the script. Used in help texts """ parser = argparse.ArgumentParser(prog=program_name, description="Implements utilities to build Ansible") return parser def main(): """ Start our run. "It all starts here" """ subcommands = load('build_ansible.command_plugins', subclasses=commands.Command) arg_parser = create_arg_parser(os.path.basename(sys.argv[0])) arg_parser.add_argument('--debug', dest='debug', required=False, default=False, action='store_true', help='Show tracebacks and other debugging information') subparsers = arg_parser.add_subparsers(title='Subcommands', dest='command', help='for help use build-ansible.py SUBCOMMANDS -h') subcommands.pipe('init_parser', subparsers.add_parser) if argcomplete: argcomplete.autocomplete(arg_parser) args = arg_parser.parse_args(sys.argv[1:]) if args.command is None: print('Please specify a subcommand to run') sys.exit(1) for subcommand in subcommands: if subcommand.name == args.command: command = subcommand break else: # Note: We should never trigger this because argparse should shield us from it print('Error: {0} was not a recognized subcommand'.format(args.command)) sys.exit(1) try: retval = command.main(args) except (errors.DependencyError, errors.MissingUserInput, errors.InvalidUserInput) as e: print(e) if args.debug: raise sys.exit(2) sys.exit(retval) if __name__ == '__main__': main() ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/hacking/build_library/0000755000000000000000000000000000000000000020325 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.539556 ansible-core-2.12.0/hacking/build_library/__init__.py0000644000000000000000000000000000000000000022424 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9705591 ansible-core-2.12.0/hacking/build_library/build_ansible/0000755000000000000000000000000000000000000023121 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.539556 ansible-core-2.12.0/hacking/build_library/build_ansible/__init__.py0000644000000000000000000000000000000000000025220 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.539556 ansible-core-2.12.0/hacking/build_library/build_ansible/announce.py0000644000000000000000000002260100000000000025302 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import asyncio import datetime import hashlib import aiohttp from jinja2 import Environment, DictLoader VERSION_FRAGMENT = """ {%- if versions | length > 1 %} {% for version in versions %} {% if loop.last %}and {{ pretty_version(version) }}{% else %} {% if versions | length == 2 %}{{ pretty_version(version) }} {% else %}{{ pretty_version(version) }}, {% endif -%} {% endif -%} {% endfor -%} {%- else %}{{ pretty_version(versions[0]) }}{% endif -%} """ LONG_TEMPLATE = """ {% set plural = False if versions | length == 1 else True %} {% set latest_ver = (versions | sort(attribute='ver_obj'))[-1] %} To: ansible-releases@redhat.com, ansible-devel@googlegroups.com, ansible-project@googlegroups.com, ansible-announce@googlegroups.com Subject: New release{% if plural %}s{% endif %}: {{ version_str }} {% filter wordwrap %} Hi all- we're happy to announce that the general release of {{ version_str }}{% if plural %} are{%- else %} is{%- endif %} now available! {% endfilter %} How to get it ------------- {% for version in versions %} $ pip install ansible{% if is_ansible_base(version) %}-base{% endif %}=={{ version }} --user {% if not loop.last %} or {% endif %} {% endfor %} The tar.gz of the release{% if plural %}s{% endif %} can be found here: {% for version in versions %} * {{ pretty_version(version) }} {% if is_ansible_base(version) %} https://pypi.python.org/packages/source/a/ansible-base/ansible-base-{{ version }}.tar.gz {% else %} https://pypi.python.org/packages/source/a/ansible/ansible-{{ version }}.tar.gz {% endif %} SHA256: {{ hashes[version] }} {% endfor %} What's new in {{ version_str }} {{ '-' * (14 + version_str | length) }} {% filter wordwrap %} {% if plural %}These releases are{% else %}This release is a{% endif %} maintenance release{% if plural %}s{% endif %} containing numerous bugfixes. The full {% if plural %} changelogs are{% else %} changelog is{% endif %} at: {% endfilter %} {% for version in versions %} * {{ version }} https://github.com/ansible/ansible/blob/stable-{{ version.split('.')[:2] | join('.') }}/changelogs/CHANGELOG-v{{ version.split('.')[:2] | join('.') }}.rst {% endfor %} What's the schedule for future maintenance releases? ---------------------------------------------------- {% filter wordwrap %} Future maintenance releases will occur approximately every 3 weeks. So expect the next one around {{ next_release.strftime('%Y-%m-%d') }}. {% endfilter %} Porting Help ------------ {% filter wordwrap %} We've published a porting guide at https://docs.ansible.com/ansible/devel/porting_guides/porting_guide_{{ latest_ver.split('.')[:2] | join('.') }}.html to help migrate your content to {{ latest_ver.split('.')[:2] | join('.') }}. {% endfilter %} {% filter wordwrap %} If you discover any errors or if any of your working playbooks break when you upgrade to {{ latest_ver }}, please use the following link to report the regression: {% endfilter %} https://github.com/ansible/ansible/issues/new/choose {% filter wordwrap %} In your issue, be sure to mention the version that works and the one that doesn't. {% endfilter %} Thanks! -{{ name }} """ # noqa for E501 (line length). # jinja2 is horrid about getting rid of extra newlines so we have to have a single per paragraph for # proper wrapping to occur SHORT_TEMPLATE = """ {% set plural = False if versions | length == 1 else True %} {% set version = (versions|sort(attribute='ver_obj'))[-1] %} @ansible {{ version_str }} {% if plural %} have {% else %} has {% endif %} been released! Get {% if plural %} them {% else %} it {% endif %} on PyPI: pip install ansible{% if is_ansible_base(version) %}-base{% endif %}=={{ version }}, the Ansible PPA on Launchpad, or GitHub. Happy automating! """ # noqa for E501 (line length). # jinja2 is horrid about getting rid of extra newlines so we have to have a single per paragraph for # proper wrapping to occur JINJA_ENV = Environment( loader=DictLoader({'long': LONG_TEMPLATE, 'short': SHORT_TEMPLATE, 'version_string': VERSION_FRAGMENT, }), extensions=['jinja2.ext.i18n'], trim_blocks=True, lstrip_blocks=True, ) async def calculate_hash_from_tarball(session, version): tar_url = f'https://pypi.python.org/packages/source/a/ansible-base/ansible-base-{version}.tar.gz' tar_task = asyncio.create_task(session.get(tar_url)) tar_response = await tar_task tar_hash = hashlib.sha256() while True: chunk = await tar_response.content.read(1024) if not chunk: break tar_hash.update(chunk) return tar_hash.hexdigest() async def parse_hash_from_file(session, version): filename = f'ansible-base-{version}.tar.gz' hash_url = f'https://releases.ansible.com/ansible-base/{filename}.sha' hash_task = asyncio.create_task(session.get(hash_url)) hash_response = await hash_task hash_content = await hash_response.read() precreated_hash, precreated_filename = hash_content.split(None, 1) if filename != precreated_filename.strip().decode('utf-8'): raise ValueError(f'Hash file contains hash for a different file: {precreated_filename}') return precreated_hash.decode('utf-8') async def get_hash(session, version): calculated_hash = await calculate_hash_from_tarball(session, version) precreated_hash = await parse_hash_from_file(session, version) if calculated_hash != precreated_hash: raise ValueError(f'Hash in file ansible-base-{version}.tar.gz.sha {precreated_hash} does not' f' match hash of tarball from pypi {calculated_hash}') return calculated_hash async def get_hashes(versions): hashes = {} requestors = {} async with aiohttp.ClientSession() as aio_session: for version in versions: requestors[version] = asyncio.create_task(get_hash(aio_session, version)) for version, request in requestors.items(): await request hashes[version] = request.result() return hashes def next_release_date(weeks=3): days_in_the_future = weeks * 7 today = datetime.datetime.now() numeric_today = today.weekday() # We release on Thursdays if numeric_today == 3: # 3 is Thursday pass elif numeric_today == 4: # If this is Friday, we can adjust back to Thursday for the next release today -= datetime.timedelta(days=1) elif numeric_today < 3: # Otherwise, slide forward to Thursday today += datetime.timedelta(days=(3 - numeric_today)) else: # slightly different formula if it's past Thursday this week. We need to go forward to # Thursday of next week today += datetime.timedelta(days=(10 - numeric_today)) next_release = today + datetime.timedelta(days=days_in_the_future) return next_release def is_ansible_base(version): ''' Determines if a version is an ansible-base version or not, by checking if it is >= 2.10.0. Stops comparing when it gets to the first non-numeric component to allow for .dev and .beta suffixes. ''' # Ignore .beta/.dev suffixes ver_split = [] for component in version.split('.'): if not component.isdigit(): if 'rc' in component: ver_split.append(int(component.split('rc')[0])) if 'b' in component: ver_split.append(int(component.split('b')[0])) continue ver_split.append(int(component)) return tuple(ver_split) >= (2, 10, 0) # Currently only use with a single element list, but left general for later # in case we need to refer to the releases collectively. def release_variants(versions): if all(is_ansible_base(v) for v in versions): return 'ansible-base' if all(not is_ansible_base(v) for v in versions): return 'Ansible' return 'Ansible and ansible-base' def pretty_version(version): return '{0} {1}'.format( release_variants([version]), version, ) def create_long_message(versions, name): hashes = asyncio.run(get_hashes(versions)) version_template = JINJA_ENV.get_template('version_string') version_str = version_template.render(versions=versions, pretty_version=pretty_version).strip() next_release = next_release_date() template = JINJA_ENV.get_template('long') message = template.render(versions=versions, version_str=version_str, name=name, hashes=hashes, next_release=next_release, is_ansible_base=is_ansible_base, pretty_version=pretty_version) return message def create_short_message(versions): version_template = JINJA_ENV.get_template('version_string') version_str = version_template.render(versions=versions, pretty_version=pretty_version).strip() template = JINJA_ENV.get_template('short') message = template.render(versions=versions, version_str=version_str, is_ansible_base=is_ansible_base, pretty_version=pretty_version) message = ' '.join(message.split()) + '\n' return message ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.539556 ansible-core-2.12.0/hacking/build_library/build_ansible/change_detection.py0000644000000000000000000000206600000000000026762 0ustar00rootroot00000000000000# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type def update_file_if_different(filename, b_data): """ Replace file content only if content is different. This preserves timestamps in case the file content has not changed. It performs multiple operations on the file so it is not atomic and may be slower than simply writing to the file. :arg filename: The filename to write to :b_data: Byte string containing the data to write to the file """ try: with open(filename, 'rb') as f: b_data_old = f.read() except IOError as e: if e.errno != 2: raise # File did not exist, set b_data_old to a sentinel value so that # b_data gets written to the filename b_data_old = None if b_data_old != b_data: with open(filename, 'wb') as f: f.write(b_data) return True return False ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.971559 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/0000755000000000000000000000000000000000000026300 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/collection_meta.py0000644000000000000000000000553600000000000032024 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import os.path import pathlib import yaml from ansible.module_utils.six import string_types from ansible.module_utils._text import to_bytes from antsibull.jinja2.environment import doc_environment # Pylint doesn't understand Python3 namespace modules. from ..change_detection import update_file_if_different # pylint: disable=relative-beyond-top-level from ..commands import Command # pylint: disable=relative-beyond-top-level DEFAULT_TEMPLATE_FILE = 'collections_galaxy_meta.rst.j2' DEFAULT_TEMPLATE_DIR = pathlib.Path(__file__).parents[4] / 'docs/templates' def normalize_options(options): """Normalize the options to make for easy templating""" for opt in options: if isinstance(opt['description'], string_types): opt['description'] = [opt['description']] class DocumentCollectionMeta(Command): name = 'collection-meta' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='Generate collection galaxy.yml documentation from shared metadata') parser.add_argument("-t", "--template-file", action="store", dest="template_file", default=DEFAULT_TEMPLATE_FILE, help="Jinja2 template to use for the config") parser.add_argument("-T", "--template-dir", action="store", dest="template_dir", default=str(DEFAULT_TEMPLATE_DIR), help="directory containing Jinja2 templates") parser.add_argument("-o", "--output-dir", action="store", dest="output_dir", default='/tmp/', help="Output directory for rst files") parser.add_argument("collection_defs", metavar="COLLECTION-OPTION-DEFINITIONS.yml", type=str, help="Source for collection metadata option docs") @staticmethod def main(args): output_dir = os.path.abspath(args.output_dir) template_file_full_path = os.path.abspath(os.path.join(args.template_dir, args.template_file)) template_file = os.path.basename(template_file_full_path) template_dir = os.path.dirname(template_file_full_path) with open(args.collection_defs) as f: options = yaml.safe_load(f) normalize_options(options) env = doc_environment(template_dir) template = env.get_template(template_file) output_name = os.path.join(output_dir, template_file.replace('.j2', '')) temp_vars = {'options': options} data = to_bytes(template.render(temp_vars)) update_file_if_different(output_name, data) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/docs_build.py0000644000000000000000000002262500000000000030770 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2020, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import absolute_import, division, print_function import glob import os import os.path import pathlib import shutil from tempfile import TemporaryDirectory import yaml from ansible.release import __version__ as ansible_base__version__ # Pylint doesn't understand Python3 namespace modules. # pylint: disable=relative-beyond-top-level from ..commands import Command from ..errors import InvalidUserInput, MissingUserInput # pylint: enable=relative-beyond-top-level __metaclass__ = type DEFAULT_TOP_DIR = pathlib.Path(__file__).parents[4] DEFAULT_OUTPUT_DIR = pathlib.Path(__file__).parents[4] / 'docs/docsite' class NoSuchFile(Exception): """An expected file was not found.""" # # Helpers # def find_latest_ansible_dir(build_data_working): """Find the most recent ansible major version.""" # imports here so that they don't cause unnecessary deps for all of the plugins from packaging.version import InvalidVersion, Version ansible_directories = glob.glob(os.path.join(build_data_working, '[0-9.]*')) # Find the latest ansible version directory latest = None latest_ver = Version('0') for directory_name in (d for d in ansible_directories if os.path.isdir(d)): try: new_version = Version(os.path.basename(directory_name)) except InvalidVersion: continue # For the devel build, we only need ansible.in, so make sure it's there if not os.path.exists(os.path.join(directory_name, 'ansible.in')): continue if new_version > latest_ver: latest_ver = new_version latest = directory_name if latest is None: raise NoSuchFile('Could not find an ansible data directory in {0}'.format(build_data_working)) return latest def find_latest_deps_file(build_data_working, ansible_version): """Find the most recent ansible deps file for the given ansible major version.""" # imports here so that they don't cause unnecessary deps for all of the plugins from packaging.version import Version data_dir = os.path.join(build_data_working, ansible_version) deps_files = glob.glob(os.path.join(data_dir, '*.deps')) if not deps_files: raise Exception('No deps files exist for version {0}'.format(ansible_version)) # Find the latest version of the deps file for this major version latest = None latest_ver = Version('0') for filename in deps_files: with open(filename, 'r') as f: deps_data = yaml.safe_load(f.read()) new_version = Version(deps_data['_ansible_version']) if new_version > latest_ver: latest_ver = new_version latest = filename if latest is None: raise NoSuchFile('Could not find an ansible deps file in {0}'.format(data_dir)) return latest # # Subcommand base # def generate_base_docs(args): """Regenerate the documentation for all plugins listed in the plugin_to_collection_file.""" # imports here so that they don't cause unnecessary deps for all of the plugins from antsibull.cli import antsibull_docs with TemporaryDirectory() as tmp_dir: # # Construct a deps file with our version of ansible_base in it # modified_deps_file = os.path.join(tmp_dir, 'ansible.deps') # The _ansible_version doesn't matter since we're only building docs for base deps_file_contents = {'_ansible_version': ansible_base__version__, '_ansible_base_version': ansible_base__version__} with open(modified_deps_file, 'w') as f: f.write(yaml.dump(deps_file_contents)) # Generate the plugin rst return antsibull_docs.run(['antsibull-docs', 'stable', '--deps-file', modified_deps_file, '--ansible-base-source', str(args.top_dir), '--dest-dir', args.output_dir]) # If we make this more than just a driver for antsibull: # Run other rst generation # Run sphinx build # # Subcommand full # def generate_full_docs(args): """Regenerate the documentation for all plugins listed in the plugin_to_collection_file.""" # imports here so that they don't cause unnecessary deps for all of the plugins import sh from antsibull.cli import antsibull_docs with TemporaryDirectory() as tmp_dir: sh.git(['clone', 'https://github.com/ansible-community/ansible-build-data'], _cwd=tmp_dir) # If we want to validate that the ansible version and ansible-base branch version match, # this would be the place to do it. build_data_working = os.path.join(tmp_dir, 'ansible-build-data') if args.ansible_build_data: build_data_working = args.ansible_build_data ansible_version = args.ansible_version if ansible_version is None: ansible_version = find_latest_ansible_dir(build_data_working) params = ['devel', '--pieces-file', os.path.join(ansible_version, 'ansible.in')] else: latest_filename = find_latest_deps_file(build_data_working, ansible_version) # Make a copy of the deps file so that we can set the ansible-base version we'll use modified_deps_file = os.path.join(tmp_dir, 'ansible.deps') shutil.copyfile(latest_filename, modified_deps_file) # Put our version of ansible-base into the deps file with open(modified_deps_file, 'r') as f: deps_data = yaml.safe_load(f.read()) deps_data['_ansible_base_version'] = ansible_base__version__ with open(modified_deps_file, 'w') as f: f.write(yaml.dump(deps_data)) params = ['stable', '--deps-file', modified_deps_file] # Generate the plugin rst return antsibull_docs.run(['antsibull-docs'] + params + ['--ansible-base-source', str(args.top_dir), '--dest-dir', args.output_dir]) # If we make this more than just a driver for antsibull: # Run other rst generation # Run sphinx build class CollectionPluginDocs(Command): name = 'docs-build' _ACTION_HELP = """Action to perform. full: Regenerate the rst for the full ansible website. base: Regenerate the rst for plugins in ansible-base and then build the website. named: Regenerate the rst for the named plugins and then build the website. """ @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='Generate documentation for plugins in collections.' ' Plugins in collections will have a stub file in the normal plugin' ' documentation location that says the module is in a collection and' ' point to generated plugin documentation under the collections/' ' hierarchy.') # I think we should make the actions a subparser but need to look in git history and see if # we tried that and changed it for some reason. parser.add_argument('action', action='store', choices=('full', 'base', 'named'), default='full', help=cls._ACTION_HELP) parser.add_argument("-o", "--output-dir", action="store", dest="output_dir", default=DEFAULT_OUTPUT_DIR, help="Output directory for generated doc files") parser.add_argument("-t", "--top-dir", action="store", dest="top_dir", default=DEFAULT_TOP_DIR, help="Toplevel directory of this ansible-base checkout or expanded" " tarball.") parser.add_argument("-l", "--limit-to-modules", '--limit-to', action="store", dest="limit_to", default=None, help="Limit building module documentation to comma-separated list of" " plugins. Specify non-existing plugin name for no plugins.") parser.add_argument('--ansible-version', action='store', dest='ansible_version', default=None, help='The version of the ansible package to make documentation for.' ' This only makes sense when used with full.') parser.add_argument('--ansible-build-data', action='store', dest='ansible_build_data', default=None, help='A checkout of the ansible-build-data repo. Useful for' ' debugging.') @staticmethod def main(args): # normalize and validate CLI args if args.ansible_version and args.action != 'full': raise InvalidUserInput('--ansible-version is only for use with "full".') if not args.output_dir: args.output_dir = os.path.abspath(str(DEFAULT_OUTPUT_DIR)) if args.action == 'full': return generate_full_docs(args) if args.action == 'base': return generate_base_docs(args) # args.action == 'named' (Invalid actions are caught by argparse) raise NotImplementedError('Building docs for specific files is not yet implemented') # return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/dump_config.py0000644000000000000000000000623100000000000031146 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import os.path import pathlib import yaml from jinja2 import Environment, FileSystemLoader from ansible.module_utils._text import to_bytes # Pylint doesn't understand Python3 namespace modules. from ..change_detection import update_file_if_different # pylint: disable=relative-beyond-top-level from ..commands import Command # pylint: disable=relative-beyond-top-level DEFAULT_TEMPLATE_FILE = 'config.rst.j2' DEFAULT_TEMPLATE_DIR = pathlib.Path(__file__).parents[4] / 'docs/templates' def fix_description(config_options): '''some descriptions are strings, some are lists. workaround it...''' for config_key in list(config_options.keys()): # drop internal entries if config_key.startswith('_'): del config_options[config_key] continue description = config_options[config_key].get('description', []) if isinstance(description, list): desc_list = description else: desc_list = [description] config_options[config_key]['description'] = desc_list return config_options class DocumentConfig(Command): name = 'document-config' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='Generate module documentation from metadata') parser.add_argument("-t", "--template-file", action="store", dest="template_file", default=DEFAULT_TEMPLATE_FILE, help="Jinja2 template to use for the config") parser.add_argument("-T", "--template-dir", action="store", dest="template_dir", default=str(DEFAULT_TEMPLATE_DIR), help="directory containing Jinja2 templates") parser.add_argument("-o", "--output-dir", action="store", dest="output_dir", default='/tmp/', help="Output directory for rst files") parser.add_argument("config_defs", metavar="CONFIG-OPTION-DEFINITIONS.yml", type=str, help="Source for config option docs") @staticmethod def main(args): output_dir = os.path.abspath(args.output_dir) template_file_full_path = os.path.abspath(os.path.join(args.template_dir, args.template_file)) template_file = os.path.basename(template_file_full_path) template_dir = os.path.dirname(template_file_full_path) with open(args.config_defs) as f: config_options = yaml.safe_load(f) config_options = fix_description(config_options) env = Environment(loader=FileSystemLoader(template_dir), trim_blocks=True,) template = env.get_template(template_file) output_name = os.path.join(output_dir, template_file.replace('.j2', '')) temp_vars = {'config_options': config_options} data = to_bytes(template.render(temp_vars)) update_file_if_different(output_name, data) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/dump_keywords.py0000644000000000000000000001173200000000000031552 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import importlib import os.path import pathlib import re from ansible.module_utils.compat.version import LooseVersion import jinja2 import yaml from jinja2 import Environment, FileSystemLoader from ansible.module_utils._text import to_bytes # Pylint doesn't understand Python3 namespace modules. from ..change_detection import update_file_if_different # pylint: disable=relative-beyond-top-level from ..commands import Command # pylint: disable=relative-beyond-top-level DEFAULT_TEMPLATE_DIR = str(pathlib.Path(__file__).resolve().parents[4] / 'docs/templates') TEMPLATE_FILE = 'playbooks_keywords.rst.j2' PLAYBOOK_CLASS_NAMES = ['Play', 'Role', 'Block', 'Task'] def load_definitions(keyword_definitions_file): docs = {} with open(keyword_definitions_file) as f: docs = yaml.safe_load(f) return docs def extract_keywords(keyword_definitions): pb_keywords = {} for pb_class_name in PLAYBOOK_CLASS_NAMES: if pb_class_name == 'Play': module_name = 'ansible.playbook' else: module_name = 'ansible.playbook.{0}'.format(pb_class_name.lower()) module = importlib.import_module(module_name) playbook_class = getattr(module, pb_class_name, None) if playbook_class is None: raise ImportError("We weren't able to import the module {0}".format(module_name)) # Maintain order of the actual class names for our output # Build up a mapping of playbook classes to the attributes that they hold pb_keywords[pb_class_name] = {k: v for (k, v) in playbook_class._valid_attrs.items() # Filter private attributes as they're not usable in playbooks if not v.private} # pick up definitions if they exist for keyword in tuple(pb_keywords[pb_class_name]): if keyword in keyword_definitions: pb_keywords[pb_class_name][keyword] = keyword_definitions[keyword] else: # check if there is an alias, otherwise undocumented alias = getattr(getattr(playbook_class, '_%s' % keyword), 'alias', None) if alias and alias in keyword_definitions: pb_keywords[pb_class_name][alias] = keyword_definitions[alias] del pb_keywords[pb_class_name][keyword] else: pb_keywords[pb_class_name][keyword] = ' UNDOCUMENTED!! ' # loop is really with_ for users if pb_class_name == 'Task': pb_keywords[pb_class_name]['with_'] = ( 'The same as ``loop`` but magically adds the output of any lookup plugin to' ' generate the item list.') # local_action is implicit with action if 'action' in pb_keywords[pb_class_name]: pb_keywords[pb_class_name]['local_action'] = ('Same as action but also implies' ' ``delegate_to: localhost``') return pb_keywords def generate_page(pb_keywords, template_dir): env = Environment(loader=FileSystemLoader(template_dir), trim_blocks=True,) template = env.get_template(TEMPLATE_FILE) tempvars = {'pb_keywords': pb_keywords, 'playbook_class_names': PLAYBOOK_CLASS_NAMES} keyword_page = template.render(tempvars) if LooseVersion(jinja2.__version__) < LooseVersion('2.10'): # jinja2 < 2.10's indent filter indents blank lines. Cleanup keyword_page = re.sub(' +\n', '\n', keyword_page) return keyword_page class DocumentKeywords(Command): name = 'document-keywords' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='Generate playbook keyword documentation from' ' code and descriptions') parser.add_argument("-T", "--template-dir", action="store", dest="template_dir", default=DEFAULT_TEMPLATE_DIR, help="directory containing Jinja2 templates") parser.add_argument("-o", "--output-dir", action="store", dest="output_dir", default='/tmp/', help="Output directory for rst files") parser.add_argument("keyword_defs", metavar="KEYWORD-DEFINITIONS.yml", type=str, help="Source for playbook keyword docs") @staticmethod def main(args): keyword_definitions = load_definitions(args.keyword_defs) pb_keywords = extract_keywords(keyword_definitions) keyword_page = generate_page(pb_keywords, args.template_dir) outputname = os.path.join(args.output_dir, TEMPLATE_FILE.replace('.j2', '')) update_file_if_different(outputname, to_bytes(keyword_page)) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/file_deprecated_issues.py0000644000000000000000000001252400000000000033350 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # (c) 2017, Matt Martz # (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import argparse import os import time from collections import defaultdict from ansible.release import __version__ as ansible_version # Pylint doesn't understand Python3 namespace modules. from ..commands import Command # pylint: disable=relative-beyond-top-level from .. import errors # pylint: disable=relative-beyond-top-level ANSIBLE_MAJOR_VERSION = '.'.join(ansible_version.split('.')[:2]) def get_token(token_file): if token_file: return token_file.read().strip() token = os.getenv('GITHUB_TOKEN').strip() if not token: raise errors.MissingUserInput( 'Please provide a file containing a github oauth token with public_repo scope' ' via the --github-token argument or set the GITHUB_TOKEN env var with your' ' github oauth token' ) return token def parse_deprecations(problems_file_handle): deprecated = defaultdict(list) deprecation_errors = problems_file_handle.read() for line in deprecation_errors.splitlines(): path = line.split(':')[0] if path.endswith('__init__.py'): component = os.path.basename(os.path.dirname(path)) else: component, dummy = os.path.splitext(os.path.basename(path).lstrip('_')) title = ( '%s contains deprecated call to be removed in %s' % (component, ANSIBLE_MAJOR_VERSION) ) deprecated[component].append( dict(title=title, path=path, line=line) ) return deprecated def find_project_todo_column(repo, project_name): project = None for project in repo.projects(): if project.name.lower() == project_name: break else: raise errors.InvalidUserInput('%s was an invalid project name' % project_name) for project_column in project.columns(): column_name = project_column.name.lower() if 'todo' in column_name or 'backlog' in column_name or 'to do' in column_name: return project_column raise Exception('Unable to determine the todo column in' ' project %s' % project_name) def create_issues(deprecated, body_tmpl, repo): issues = [] for component, items in deprecated.items(): title = items[0]['title'] path = '\n'.join(set((i['path']) for i in items)) line = '\n'.join(i['line'] for i in items) body = body_tmpl % dict(component=component, path=path, line=line, version=ANSIBLE_MAJOR_VERSION) issue = repo.create_issue(title, body=body, labels=['deprecated']) print(issue) issues.append(issue) # Sleep a little, so that the API doesn't block us time.sleep(0.5) return issues class FileDeprecationTickets(Command): name = 'file-deprecation-tickets' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='File tickets to cleanup deprecated features for' ' the next release') parser.add_argument('--template', default='deprecated_issue_template.md', type=argparse.FileType('r'), help='Path to markdown file template to be used for issue ' 'body. Default: %(default)s') parser.add_argument('--project-name', default='', type=str, help='Name of a github project to assign all issues to') parser.add_argument('--github-token', type=argparse.FileType('r'), help='Path to file containing a github token with public_repo scope.' ' This token in this file will be used to open the deprcation' ' tickets and add them to the github project. If not given,' ' the GITHUB_TOKEN environment variable will be tried') parser.add_argument('problems', type=argparse.FileType('r'), help='Path to file containing pylint output for the ' 'ansible-deprecated-version check') @staticmethod def main(args): try: from github3 import GitHub except ImportError: raise errors.DependencyError( 'This command needs the github3.py library installed to work' ) token = get_token(args.github_token) args.github_token.close() deprecated = parse_deprecations(args.problems) args.problems.close() body_tmpl = args.template.read() args.template.close() project_name = args.project_name.strip().lower() gh_conn = GitHub(token=token) repo = gh_conn.repository('abadger', 'ansible') if project_name: project_column = find_project_todo_column(repo, project_name) issues = create_issues(deprecated, body_tmpl, repo) if project_column: for issue in issues: project_column.create_card_with_issue(issue) time.sleep(0.5) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/generate_man.py0000644000000000000000000002334200000000000031303 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import argparse import os.path import pathlib import sys from jinja2 import Environment, FileSystemLoader from ansible.module_utils._text import to_bytes # Pylint doesn't understand Python3 namespace modules. from ..change_detection import update_file_if_different # pylint: disable=relative-beyond-top-level from ..commands import Command # pylint: disable=relative-beyond-top-level DEFAULT_TEMPLATE_FILE = pathlib.Path(__file__).parents[4] / 'docs/templates/man.j2' # from https://www.python.org/dev/peps/pep-0257/ def trim_docstring(docstring): if not docstring: return '' # Convert tabs to spaces (following the normal Python rules) # and split into a list of lines: lines = docstring.expandtabs().splitlines() # Determine minimum indentation (first line doesn't count): indent = sys.maxsize for line in lines[1:]: stripped = line.lstrip() if stripped: indent = min(indent, len(line) - len(stripped)) # Remove indentation (first line is special): trimmed = [lines[0].strip()] if indent < sys.maxsize: for line in lines[1:]: trimmed.append(line[indent:].rstrip()) # Strip off trailing and leading blank lines: while trimmed and not trimmed[-1]: trimmed.pop() while trimmed and not trimmed[0]: trimmed.pop(0) # Return a single string: return '\n'.join(trimmed) def get_options(optlist): ''' get actual options ''' opts = [] for opt in optlist: res = { 'desc': opt.help, 'options': opt.option_strings } if isinstance(opt, argparse._StoreAction): res['arg'] = opt.dest.upper() elif not res['options']: continue opts.append(res) return opts def dedupe_groups(parser): action_groups = [] for action_group in parser._action_groups: found = False for a in action_groups: if a._actions == action_group._actions: found = True break if not found: action_groups.append(action_group) return action_groups def get_option_groups(option_parser): groups = [] for action_group in dedupe_groups(option_parser)[1:]: group_info = {} group_info['desc'] = action_group.description group_info['options'] = action_group._actions group_info['group_obj'] = action_group groups.append(group_info) return groups def opt_doc_list(parser): ''' iterate over options lists ''' results = [] for option_group in dedupe_groups(parser)[1:]: results.extend(get_options(option_group._actions)) results.extend(get_options(parser._actions)) return results # def opts_docs(cli, name): def opts_docs(cli_class_name, cli_module_name): ''' generate doc structure from options ''' cli_name = 'ansible-%s' % cli_module_name if cli_module_name == 'adhoc': cli_name = 'ansible' # WIth no action/subcommand # shared opts set # instantiate each cli and ask its options cli_klass = getattr(__import__("ansible.cli.%s" % cli_module_name, fromlist=[cli_class_name]), cli_class_name) cli = cli_klass([cli_name]) # parse the common options try: cli.init_parser() except Exception: pass # base/common cli info docs = { 'cli': cli_module_name, 'cli_name': cli_name, 'usage': cli.parser.format_usage(), 'short_desc': cli.parser.description, 'long_desc': trim_docstring(cli.__doc__), 'actions': {}, 'content_depth': 2, } option_info = {'option_names': [], 'options': [], 'groups': []} for extras in ('ARGUMENTS'): if hasattr(cli, extras): docs[extras.lower()] = getattr(cli, extras) common_opts = opt_doc_list(cli.parser) groups_info = get_option_groups(cli.parser) shared_opt_names = [] for opt in common_opts: shared_opt_names.extend(opt.get('options', [])) option_info['options'] = common_opts option_info['option_names'] = shared_opt_names option_info['groups'].extend(groups_info) docs.update(option_info) # now for each action/subcommand # force populate parser with per action options def get_actions(parser, docs): # use class attrs not the attrs on a instance (not that it matters here...) try: subparser = parser._subparsers._group_actions[0].choices except AttributeError: subparser = {} depth = 0 for action, parser in subparser.items(): action_info = {'option_names': [], 'options': [], 'actions': {}} # docs['actions'][action] = {} # docs['actions'][action]['name'] = action action_info['name'] = action action_info['desc'] = trim_docstring(getattr(cli, 'execute_%s' % action).__doc__) # docs['actions'][action]['desc'] = getattr(cli, 'execute_%s' % action).__doc__.strip() action_doc_list = opt_doc_list(parser) uncommon_options = [] for action_doc in action_doc_list: # uncommon_options = [] option_aliases = action_doc.get('options', []) for option_alias in option_aliases: if option_alias in shared_opt_names: continue # TODO: use set if option_alias not in action_info['option_names']: action_info['option_names'].append(option_alias) if action_doc in action_info['options']: continue uncommon_options.append(action_doc) action_info['options'] = uncommon_options depth = 1 + get_actions(parser, action_info) docs['actions'][action] = action_info return depth action_depth = get_actions(cli.parser, docs) docs['content_depth'] = action_depth + 1 docs['options'] = opt_doc_list(cli.parser) return docs class GenerateMan(Command): name = 'generate-man' @classmethod def init_parser(cls, add_parser): parser = add_parser(name=cls.name, description='Generate cli documentation from cli docstrings') parser.add_argument("-t", "--template-file", action="store", dest="template_file", default=DEFAULT_TEMPLATE_FILE, help="path to jinja2 template") parser.add_argument("-o", "--output-dir", action="store", dest="output_dir", default='/tmp/', help="Output directory for rst files") parser.add_argument("-f", "--output-format", action="store", dest="output_format", default='man', help="Output format for docs (the default 'man' or 'rst')") parser.add_argument('cli_modules', help='CLI module name(s)', metavar='MODULE_NAME', nargs='*') @staticmethod def main(args): template_file = args.template_file template_path = os.path.expanduser(template_file) template_dir = os.path.abspath(os.path.dirname(template_path)) template_basename = os.path.basename(template_file) output_dir = os.path.abspath(args.output_dir) output_format = args.output_format cli_modules = args.cli_modules # various cli parsing things checks sys.argv if the 'args' that are passed in are [] # so just remove any args so the cli modules dont try to parse them resulting in warnings sys.argv = [sys.argv[0]] allvars = {} output = {} cli_list = [] cli_bin_name_list = [] # for binary in os.listdir('../../lib/ansible/cli'): for cli_module_name in cli_modules: binary = os.path.basename(os.path.expanduser(cli_module_name)) if not binary.endswith('.py'): continue elif binary == '__init__.py': continue cli_name = os.path.splitext(binary)[0] if cli_name == 'adhoc': cli_class_name = 'AdHocCLI' # myclass = 'AdHocCLI' output[cli_name] = 'ansible.1.rst.in' cli_bin_name = 'ansible' else: # myclass = "%sCLI" % libname.capitalize() cli_class_name = "%sCLI" % cli_name.capitalize() output[cli_name] = 'ansible-%s.1.rst.in' % cli_name cli_bin_name = 'ansible-%s' % cli_name # FIXME: allvars[cli_name] = opts_docs(cli_class_name, cli_name) cli_bin_name_list.append(cli_bin_name) cli_list = allvars.keys() doc_name_formats = {'man': '%s.1.rst.in', 'rst': '%s.rst'} for cli_name in cli_list: # template it! env = Environment(loader=FileSystemLoader(template_dir)) template = env.get_template(template_basename) # add rest to vars tvars = allvars[cli_name] tvars['cli_list'] = cli_list tvars['cli_bin_name_list'] = cli_bin_name_list tvars['cli'] = cli_name if '-i' in tvars['options']: print('uses inventory') manpage = template.render(tvars) filename = os.path.join(output_dir, doc_name_formats[output_format] % tvars['cli_name']) update_file_if_different(filename, to_bytes(manpage)) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/porting_guide.py0000644000000000000000000000621500000000000031515 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type from jinja2 import Environment, DictLoader # Pylint doesn't understand Python3 namespace modules. from ..commands import Command # pylint: disable=relative-beyond-top-level PORTING_GUIDE_TEMPLATE = """ .. _porting_{{ ver }}_guide: ************************** Ansible {{ ver }} Porting Guide ************************** This section discusses the behavioral changes between Ansible {{ prev_ver }} and Ansible {{ ver }}. It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible. We suggest you read this page along with `Ansible Changelog for {{ ver }} `_ to understand what updates you may need to make. This document is part of a collection on porting. The complete list of porting guides can be found at :ref:`porting guides `. .. contents:: Topics Playbook ======== No notable changes Command Line ============ No notable changes Deprecated ========== No notable changes Modules ======= No notable changes Modules removed --------------- The following modules no longer exist: * No notable changes Deprecation notices ------------------- No notable changes Noteworthy module changes ------------------------- No notable changes Plugins ======= No notable changes Porting custom scripts ====================== No notable changes Networking ========== No notable changes """ # noqa for E501 (line length). # jinja2 is horrid about getting rid of extra newlines so we have to have a single line per # paragraph for proper wrapping to occur JINJA_ENV = Environment( loader=DictLoader({'porting_guide': PORTING_GUIDE_TEMPLATE, }), extensions=['jinja2.ext.i18n'], trim_blocks=True, lstrip_blocks=True, ) def generate_porting_guide(version): template = JINJA_ENV.get_template('porting_guide') version_list = version.split('.') version_list[-1] = str(int(version_list[-1]) - 1) previous_version = '.'.join(version_list) content = template.render(ver=version, prev_ver=previous_version) return content def write_guide(version, guide_content): filename = 'porting_guide_{0}.rst'.format(version) with open(filename, 'w') as out_file: out_file.write(guide_content) class PortingGuideCommand(Command): name = 'porting-guide' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description="Generate a fresh porting guide template") parser.add_argument("--version", dest="version", type=str, required=True, action='store', help="Version of Ansible to write the porting guide for") @staticmethod def main(args): guide_content = generate_porting_guide(args.version) write_guide(args.version, guide_content) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/release_announcement.py0000644000000000000000000000555300000000000033054 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys from collections import UserString from ansible.module_utils.compat.version import LooseVersion # Pylint doesn't understand Python3 namespace modules. from ..commands import Command # pylint: disable=relative-beyond-top-level from .. import errors # pylint: disable=relative-beyond-top-level class VersionStr(UserString): def __init__(self, string): super().__init__(string.strip()) self.ver_obj = LooseVersion(string) def transform_args(args): # Make it possible to sort versions in the jinja2 templates new_versions = [] for version in args.versions: new_versions.append(VersionStr(version)) args.versions = new_versions return args def write_message(filename, message): if filename != '-': with open(filename, 'w') as out_file: out_file.write(message) else: sys.stdout.write('\n\n') sys.stdout.write(message) class ReleaseAnnouncementCommand(Command): name = 'release-announcement' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description="Generate email and twitter announcements from template") parser.add_argument("--version", dest="versions", type=str, required=True, action='append', help="Versions of Ansible to announce") parser.add_argument("--name", type=str, required=True, help="Real name to use on emails") parser.add_argument("--email-out", type=str, default="-", help="Filename to place the email announcement into") parser.add_argument("--twitter-out", type=str, default="-", help="Filename to place the twitter announcement into") @classmethod def main(cls, args): if sys.version_info < (3, 6): raise errors.DependencyError('The {0} subcommand needs Python-3.6+' ' to run'.format(cls.name)) # Import here because these functions are invalid on Python-3.5 and the command plugins and # init_parser() method need to be compatible with Python-3.4+ for now. # Pylint doesn't understand Python3 namespace modules. from .. announce import create_short_message, create_long_message # pylint: disable=relative-beyond-top-level args = transform_args(args) twitter_message = create_short_message(args.versions) email_message = create_long_message(args.versions, args.name) write_message(args.twitter_out, twitter_message) write_message(args.email_out, email_message) return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/command_plugins/update_intersphinx.py0000644000000000000000000001034100000000000032566 0ustar00rootroot00000000000000# -*- coding: utf-8 -*- # (c) 2020, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import argparse import importlib import os import pathlib import time import urllib.parse from collections import defaultdict from ansible.module_utils.common.collections import is_iterable from ansible.module_utils.urls import Request # Pylint doesn't understand Python3 namespace modules. from ..commands import Command # pylint: disable=relative-beyond-top-level from .. import errors # pylint: disable=relative-beyond-top-level EXAMPLE_CONF = """ A proper intersphinx_mapping entry should look like: intersphinx_mapping = { 'python3': ('https://docs.python.org/3', (None, 'python3.inv')) } See the intersphinx docs for more info: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#confval-intersphinx_mapping """ class UpdateIntersphinxCache(Command): name = 'update-intersphinx-cache' @classmethod def init_parser(cls, add_parser): parser = add_parser(cls.name, description='Update cached intersphinx mappings. This' ' updates the cached intersphinx mappings for docs to reference' ' documentation from other projects.') parser.add_argument('-o', '--output-dir', action='store', help='Path to directory the cached objects.inv files are stored in') parser.add_argument('-c', '--conf-file', action='store', help='Path to a sphinx config file to retrieve intersphinx config from') @staticmethod def main(args): # Retrieve the intersphinx information from the sphinx config file conf_dir = pathlib.Path(args.conf_file).parent conf_module_spec = importlib.util.spec_from_file_location('sphinxconf', args.conf_file) conf_module = importlib.util.module_from_spec(conf_module_spec) conf_module_spec.loader.exec_module(conf_module) intersphinx_mapping = conf_module.intersphinx_mapping for intersphinx_name, inventory in intersphinx_mapping.items(): if not is_iterable(inventory) or len(inventory) != 2: print('WARNING: The intersphinx entry for {0} must be' ' a two-tuple.\n{1}'.format(intersphinx_name, EXAMPLE_CONF)) continue url = cache_file = None for inv_source in inventory: if isinstance(inv_source, str) and url is None: url = inv_source elif is_iterable(inv_source) and cache_file is None: if len(inv_source) != 2: print('WARNING: The fallback entry for {0} should be a tuple of (None,' ' filename).\n{1}'.format(intersphinx_name, EXAMPLE_CONF)) continue cache_file = inv_source[1] else: print('WARNING: The configuration for {0} should be a tuple of one url and one' ' tuple for a fallback filename.\n{1}'.format(intersphinx_name, EXAMPLE_CONF)) continue if url is None or cache_file is None: print('WARNING: Could not figure out the url or fallback' ' filename for {0}.\n{1}'.format(intersphinx_name, EXAMPLE_CONF)) continue url = urllib.parse.urljoin(url, 'objects.inv') # Resolve any relative cache files to be relative to the conf file cache_file = conf_dir / cache_file # Retrieve the inventory and cache it # The jinja CDN seems to be blocking the default urllib User-Agent requestor = Request(headers={'User-Agent': 'Definitely Not Python ;-)'}) with requestor.open('GET', url) as source_file: with open(cache_file, 'wb') as f: f.write(source_file.read()) print('Download of new cache files complete. Remember to git commit -a the changes') return 0 ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.540556 ansible-core-2.12.0/hacking/build_library/build_ansible/commands.py0000644000000000000000000000305200000000000025274 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type from abc import ABCMeta, abstractmethod, abstractproperty class Command(metaclass=ABCMeta): """ Subcommands of :program:`build-ansible.py`. This defines an interface that all subcommands must conform to. :program:`build-ansible.py` will require that these things are present in order to proceed. """ @staticmethod @abstractproperty def name(): """Name of the subcommand. It's the string to invoked it via on the command line""" @staticmethod @abstractmethod def init_parser(add_parser): """ Initialize and register an argparse ArgumentParser :arg add_parser: function which creates an ArgumentParser for the main program. Implementations should first create an ArgumentParser using `add_parser` and then populate it with the command line arguments that are needed. .. seealso: `add_parser` information in the :py:meth:`ArgumentParser.add_subparsers` documentation. """ @staticmethod @abstractmethod def main(arguments): """ Run the command :arg arguments: The **parsed** command line args This is the Command's entrypoint. The command line args are already parsed but from here on, the command can do its work. """ ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5415561 ansible-core-2.12.0/hacking/build_library/build_ansible/errors.py0000644000000000000000000000101600000000000025005 0ustar00rootroot00000000000000# coding: utf-8 # Copyright: (c) 2019, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type class DependencyError(Exception): """A dependency was unmet""" class MissingUserInput(Exception): """The user failed to provide input (via cli arg or interactively""" class InvalidUserInput(Exception): """The user provided invalid input""" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.666559 ansible-core-2.12.0/lib/0000755000000000000000000000000000000000000014644 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.971559 ansible-core-2.12.0/lib/ansible/0000755000000000000000000000000000000000000016261 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5445561 ansible-core-2.12.0/lib/ansible/__init__.py0000644000000000000000000000323300000000000020373 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type # make vendored top-level modules accessible EARLY import ansible._vendor # patch Jinja2 >= 3.0 for backwards compatibility try: import sys as _sys from jinja2.filters import pass_context as _passctx, pass_environment as _passenv, pass_eval_context as _passevalctx _mod = _sys.modules['jinja2.filters'] _mod.contextfilter = _passctx _mod.environmentfilter = _passenv _mod.evalcontextfilter = _passevalctx except ImportError: _sys = None # Note: Do not add any code to this file. The ansible module may be # a namespace package when using Ansible-2.1+ Anything in this file may not be # available if one of the other packages in the namespace is loaded first. # # This is for backwards compat. Code should be ported to get these from # ansible.release instead of from here. from ansible.release import __version__, __author__ ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.971559 ansible-core-2.12.0/lib/ansible/_vendor/0000755000000000000000000000000000000000000017715 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5445561 ansible-core-2.12.0/lib/ansible/_vendor/__init__.py0000644000000000000000000000404600000000000022032 0ustar00rootroot00000000000000# (c) 2020 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import pkgutil import sys import warnings # This package exists to host vendored top-level Python packages for downstream packaging. Any Python packages # installed beneath this one will be masked from the Ansible loader, and available from the front of sys.path. # It is expected that the vendored packages will be loaded very early, so a warning will be fired on import of # the top-level ansible package if any packages beneath this are already loaded at that point. # # Python packages may be installed here during downstream packaging using something like: # pip install --upgrade -t (path to this dir) cryptography pyyaml packaging jinja2 # mask vendored content below this package from being accessed as an ansible subpackage __path__ = [] def _ensure_vendored_path_entry(): """ Ensure that any downstream-bundled content beneath this package is available at the top of sys.path """ # patch our vendored dir onto sys.path vendored_path_entry = os.path.dirname(__file__) vendored_module_names = set(m[1] for m in pkgutil.iter_modules([vendored_path_entry], '')) # m[1] == m.name if vendored_module_names: # patch us early to load vendored deps transparently if vendored_path_entry in sys.path: # handle reload case by removing the existing entry, wherever it might be sys.path.remove(vendored_path_entry) sys.path.insert(0, vendored_path_entry) already_loaded_vendored_modules = set(sys.modules.keys()).intersection(vendored_module_names) if already_loaded_vendored_modules: warnings.warn('One or more Python packages bundled by this ansible-core distribution were already ' 'loaded ({0}). This may result in undefined behavior.'.format(', '.join(sorted(already_loaded_vendored_modules)))) _ensure_vendored_path_entry() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.972559 ansible-core-2.12.0/lib/ansible/cli/0000755000000000000000000000000000000000000017030 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5445561 ansible-core-2.12.0/lib/ansible/cli/__init__.py0000644000000000000000000005440700000000000021153 0ustar00rootroot00000000000000# Copyright: (c) 2012-2014, Michael DeHaan # Copyright: (c) 2016, Toshio Kuratomi # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import getpass import os import subprocess import sys from abc import ABCMeta, abstractmethod from ansible.cli.arguments import option_helpers as opt_help from ansible import constants as C from ansible import context from ansible.errors import AnsibleError from ansible.inventory.manager import InventoryManager from ansible.module_utils.six import with_metaclass, string_types, PY3 from ansible.module_utils._text import to_bytes, to_text from ansible.parsing.dataloader import DataLoader from ansible.parsing.vault import PromptVaultSecret, get_file_vault_secret from ansible.plugins.loader import add_all_plugin_dirs from ansible.release import __version__ from ansible.utils.collection_loader import AnsibleCollectionConfig from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path from ansible.utils.display import Display from ansible.utils.path import unfrackpath from ansible.utils.unsafe_proxy import to_unsafe_text from ansible.vars.manager import VariableManager try: import argcomplete HAS_ARGCOMPLETE = True except ImportError: HAS_ARGCOMPLETE = False display = Display() class CLI(with_metaclass(ABCMeta, object)): ''' code behind bin/ansible* programs ''' PAGER = 'less' # -F (quit-if-one-screen) -R (allow raw ansi control chars) # -S (chop long lines) -X (disable termcap init and de-init) LESS_OPTS = 'FRSX' SKIP_INVENTORY_DEFAULTS = False def __init__(self, args, callback=None): """ Base init method for all command line programs """ if not args: raise ValueError('A non-empty list for args is required') self.args = args self.parser = None self.callback = callback if C.DEVEL_WARNING and __version__.endswith('dev0'): display.warning( 'You are running the development version of Ansible. You should only run Ansible from "devel" if ' 'you are modifying the Ansible engine, or trying out features under development. This is a rapidly ' 'changing source of code and can become unstable at any point.' ) @abstractmethod def run(self): """Run the ansible command Subclasses must implement this method. It does the actual work of running an Ansible command. """ self.parse() display.vv(to_text(opt_help.version(self.parser.prog))) if C.CONFIG_FILE: display.v(u"Using %s as config file" % to_text(C.CONFIG_FILE)) else: display.v(u"No config file found; using defaults") # warn about deprecated config options for deprecated in C.config.DEPRECATED: name = deprecated[0] why = deprecated[1]['why'] if 'alternatives' in deprecated[1]: alt = ', use %s instead' % deprecated[1]['alternatives'] else: alt = '' ver = deprecated[1].get('version') date = deprecated[1].get('date') collection_name = deprecated[1].get('collection_name') display.deprecated("%s option, %s%s" % (name, why, alt), version=ver, date=date, collection_name=collection_name) @staticmethod def split_vault_id(vault_id): # return (before_@, after_@) # if no @, return whole string as after_ if '@' not in vault_id: return (None, vault_id) parts = vault_id.split('@', 1) ret = tuple(parts) return ret @staticmethod def build_vault_ids(vault_ids, vault_password_files=None, ask_vault_pass=None, create_new_password=None, auto_prompt=True): vault_password_files = vault_password_files or [] vault_ids = vault_ids or [] # convert vault_password_files into vault_ids slugs for password_file in vault_password_files: id_slug = u'%s@%s' % (C.DEFAULT_VAULT_IDENTITY, password_file) # note this makes --vault-id higher precedence than --vault-password-file # if we want to intertwingle them in order probably need a cli callback to populate vault_ids # used by --vault-id and --vault-password-file vault_ids.append(id_slug) # if an action needs an encrypt password (create_new_password=True) and we dont # have other secrets setup, then automatically add a password prompt as well. # prompts cant/shouldnt work without a tty, so dont add prompt secrets if ask_vault_pass or (not vault_ids and auto_prompt): id_slug = u'%s@%s' % (C.DEFAULT_VAULT_IDENTITY, u'prompt_ask_vault_pass') vault_ids.append(id_slug) return vault_ids # TODO: remove the now unused args @staticmethod def setup_vault_secrets(loader, vault_ids, vault_password_files=None, ask_vault_pass=None, create_new_password=False, auto_prompt=True): # list of tuples vault_secrets = [] # Depending on the vault_id value (including how --ask-vault-pass / --vault-password-file create a vault_id) # we need to show different prompts. This is for compat with older Towers that expect a # certain vault password prompt format, so 'promp_ask_vault_pass' vault_id gets the old format. prompt_formats = {} # If there are configured default vault identities, they are considered 'first' # so we prepend them to vault_ids (from cli) here vault_password_files = vault_password_files or [] if C.DEFAULT_VAULT_PASSWORD_FILE: vault_password_files.append(C.DEFAULT_VAULT_PASSWORD_FILE) if create_new_password: prompt_formats['prompt'] = ['New vault password (%(vault_id)s): ', 'Confirm new vault password (%(vault_id)s): '] # 2.3 format prompts for --ask-vault-pass prompt_formats['prompt_ask_vault_pass'] = ['New Vault password: ', 'Confirm New Vault password: '] else: prompt_formats['prompt'] = ['Vault password (%(vault_id)s): '] # The format when we use just --ask-vault-pass needs to match 'Vault password:\s*?$' prompt_formats['prompt_ask_vault_pass'] = ['Vault password: '] vault_ids = CLI.build_vault_ids(vault_ids, vault_password_files, ask_vault_pass, create_new_password, auto_prompt=auto_prompt) for vault_id_slug in vault_ids: vault_id_name, vault_id_value = CLI.split_vault_id(vault_id_slug) if vault_id_value in ['prompt', 'prompt_ask_vault_pass']: # --vault-id some_name@prompt_ask_vault_pass --vault-id other_name@prompt_ask_vault_pass will be a little # confusing since it will use the old format without the vault id in the prompt built_vault_id = vault_id_name or C.DEFAULT_VAULT_IDENTITY # choose the prompt based on --vault-id=prompt or --ask-vault-pass. --ask-vault-pass # always gets the old format for Tower compatibility. # ie, we used --ask-vault-pass, so we need to use the old vault password prompt # format since Tower needs to match on that format. prompted_vault_secret = PromptVaultSecret(prompt_formats=prompt_formats[vault_id_value], vault_id=built_vault_id) # a empty or invalid password from the prompt will warn and continue to the next # without erroring globally try: prompted_vault_secret.load() except AnsibleError as exc: display.warning('Error in vault password prompt (%s): %s' % (vault_id_name, exc)) raise vault_secrets.append((built_vault_id, prompted_vault_secret)) # update loader with new secrets incrementally, so we can load a vault password # that is encrypted with a vault secret provided earlier loader.set_vault_secrets(vault_secrets) continue # assuming anything else is a password file display.vvvvv('Reading vault password file: %s' % vault_id_value) # read vault_pass from a file file_vault_secret = get_file_vault_secret(filename=vault_id_value, vault_id=vault_id_name, loader=loader) # an invalid password file will error globally try: file_vault_secret.load() except AnsibleError as exc: display.warning('Error in vault password file loading (%s): %s' % (vault_id_name, to_text(exc))) raise if vault_id_name: vault_secrets.append((vault_id_name, file_vault_secret)) else: vault_secrets.append((C.DEFAULT_VAULT_IDENTITY, file_vault_secret)) # update loader with as-yet-known vault secrets loader.set_vault_secrets(vault_secrets) return vault_secrets @staticmethod def _get_secret(prompt): secret = getpass.getpass(prompt=prompt) if secret: secret = to_unsafe_text(secret) return secret @staticmethod def ask_passwords(): ''' prompt for connection and become passwords if needed ''' op = context.CLIARGS sshpass = None becomepass = None become_prompt = '' become_prompt_method = "BECOME" if C.AGNOSTIC_BECOME_PROMPT else op['become_method'].upper() try: become_prompt = "%s password: " % become_prompt_method if op['ask_pass']: sshpass = CLI._get_secret("SSH password: ") become_prompt = "%s password[defaults to SSH password]: " % become_prompt_method elif op['connection_password_file']: sshpass = CLI.get_password_from_file(op['connection_password_file']) if op['become_ask_pass']: becomepass = CLI._get_secret(become_prompt) if op['ask_pass'] and becomepass == '': becomepass = sshpass elif op['become_password_file']: becomepass = CLI.get_password_from_file(op['become_password_file']) except EOFError: pass return (sshpass, becomepass) def validate_conflicts(self, op, runas_opts=False, fork_opts=False): ''' check for conflicting options ''' if fork_opts: if op.forks < 1: self.parser.error("The number of processes (--forks) must be >= 1") return op @abstractmethod def init_parser(self, usage="", desc=None, epilog=None): """ Create an options parser for most ansible scripts Subclasses need to implement this method. They will usually call the base class's init_parser to create a basic version and then add their own options on top of that. An implementation will look something like this:: def init_parser(self): super(MyCLI, self).init_parser(usage="My Ansible CLI", inventory_opts=True) ansible.arguments.option_helpers.add_runas_options(self.parser) self.parser.add_option('--my-option', dest='my_option', action='store') """ self.parser = opt_help.create_base_parser(os.path.basename(self.args[0]), usage=usage, desc=desc, epilog=epilog, ) @abstractmethod def post_process_args(self, options): """Process the command line args Subclasses need to implement this method. This method validates and transforms the command line arguments. It can be used to check whether conflicting values were given, whether filenames exist, etc. An implementation will look something like this:: def post_process_args(self, options): options = super(MyCLI, self).post_process_args(options) if options.addition and options.subtraction: raise AnsibleOptionsError('Only one of --addition and --subtraction can be specified') if isinstance(options.listofhosts, string_types): options.listofhosts = string_types.split(',') return options """ # process tags if hasattr(options, 'tags') and not options.tags: # optparse defaults does not do what's expected # More specifically, we want `--tags` to be additive. So we cannot # simply change C.TAGS_RUN's default to ["all"] because then passing # --tags foo would cause us to have ['all', 'foo'] options.tags = ['all'] if hasattr(options, 'tags') and options.tags: tags = set() for tag_set in options.tags: for tag in tag_set.split(u','): tags.add(tag.strip()) options.tags = list(tags) # process skip_tags if hasattr(options, 'skip_tags') and options.skip_tags: skip_tags = set() for tag_set in options.skip_tags: for tag in tag_set.split(u','): skip_tags.add(tag.strip()) options.skip_tags = list(skip_tags) # process inventory options except for CLIs that require their own processing if hasattr(options, 'inventory') and not self.SKIP_INVENTORY_DEFAULTS: if options.inventory: # should always be list if isinstance(options.inventory, string_types): options.inventory = [options.inventory] # Ensure full paths when needed options.inventory = [unfrackpath(opt, follow=False) if ',' not in opt else opt for opt in options.inventory] else: options.inventory = C.DEFAULT_HOST_LIST # Dup args set on the root parser and sub parsers results in the root parser ignoring the args. e.g. doing # 'ansible-galaxy -vvv init' has no verbosity set but 'ansible-galaxy init -vvv' sets a level of 3. To preserve # back compat with pre-argparse changes we manually scan and set verbosity based on the argv values. if self.parser.prog in ['ansible-galaxy', 'ansible-vault'] and not options.verbosity: verbosity_arg = next(iter([arg for arg in self.args if arg.startswith('-v')]), None) if verbosity_arg: display.deprecated("Setting verbosity before the arg sub command is deprecated, set the verbosity " "after the sub command", "2.13", collection_name='ansible.builtin') options.verbosity = verbosity_arg.count('v') return options def parse(self): """Parse the command line args This method parses the command line arguments. It uses the parser stored in the self.parser attribute and saves the args and options in context.CLIARGS. Subclasses need to implement two helper methods, init_parser() and post_process_args() which are called from this function before and after parsing the arguments. """ self.init_parser() if HAS_ARGCOMPLETE: argcomplete.autocomplete(self.parser) try: options = self.parser.parse_args(self.args[1:]) except SystemExit as e: if(e.code != 0): self.parser.exit(status=2, message=" \n%s" % self.parser.format_help()) raise options = self.post_process_args(options) context._init_global_context(options) @staticmethod def version_info(gitinfo=False): ''' return full ansible version info ''' if gitinfo: # expensive call, user with care ansible_version_string = opt_help.version() else: ansible_version_string = __version__ ansible_version = ansible_version_string.split()[0] ansible_versions = ansible_version.split('.') for counter in range(len(ansible_versions)): if ansible_versions[counter] == "": ansible_versions[counter] = 0 try: ansible_versions[counter] = int(ansible_versions[counter]) except Exception: pass if len(ansible_versions) < 3: for counter in range(len(ansible_versions), 3): ansible_versions.append(0) return {'string': ansible_version_string.strip(), 'full': ansible_version, 'major': ansible_versions[0], 'minor': ansible_versions[1], 'revision': ansible_versions[2]} @staticmethod def pager(text): ''' find reasonable way to display text ''' # this is a much simpler form of what is in pydoc.py if not sys.stdout.isatty(): display.display(text, screen_only=True) elif 'PAGER' in os.environ: if sys.platform == 'win32': display.display(text, screen_only=True) else: CLI.pager_pipe(text, os.environ['PAGER']) else: p = subprocess.Popen('less --version', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.communicate() if p.returncode == 0: CLI.pager_pipe(text, 'less') else: display.display(text, screen_only=True) @staticmethod def pager_pipe(text, cmd): ''' pipe text through a pager ''' if 'LESS' not in os.environ: os.environ['LESS'] = CLI.LESS_OPTS try: cmd = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=sys.stdout) cmd.communicate(input=to_bytes(text)) except IOError: pass except KeyboardInterrupt: pass @staticmethod def _play_prereqs(): options = context.CLIARGS # all needs loader loader = DataLoader() basedir = options.get('basedir', False) if basedir: loader.set_basedir(basedir) add_all_plugin_dirs(basedir) AnsibleCollectionConfig.playbook_paths = basedir default_collection = _get_collection_name_from_path(basedir) if default_collection: display.warning(u'running with default collection {0}'.format(default_collection)) AnsibleCollectionConfig.default_collection = default_collection vault_ids = list(options['vault_ids']) default_vault_ids = C.DEFAULT_VAULT_IDENTITY_LIST vault_ids = default_vault_ids + vault_ids vault_secrets = CLI.setup_vault_secrets(loader, vault_ids=vault_ids, vault_password_files=list(options['vault_password_files']), ask_vault_pass=options['ask_vault_pass'], auto_prompt=False) loader.set_vault_secrets(vault_secrets) # create the inventory, and filter it based on the subset specified (if any) inventory = InventoryManager(loader=loader, sources=options['inventory']) # create the variable manager, which will be shared throughout # the code, ensuring a consistent view of global variables variable_manager = VariableManager(loader=loader, inventory=inventory, version_info=CLI.version_info(gitinfo=False)) return loader, inventory, variable_manager @staticmethod def get_host_list(inventory, subset, pattern='all'): no_hosts = False if len(inventory.list_hosts()) == 0: # Empty inventory if C.LOCALHOST_WARNING and pattern not in C.LOCALHOST: display.warning("provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'") no_hosts = True inventory.subset(subset) hosts = inventory.list_hosts(pattern) if not hosts and no_hosts is False: raise AnsibleError("Specified hosts and/or --limit does not match any hosts") return hosts @staticmethod def get_password_from_file(pwd_file): b_pwd_file = to_bytes(pwd_file) secret = None if b_pwd_file == b'-': if PY3: # ensure its read as bytes secret = sys.stdin.buffer.read() else: secret = sys.stdin.read() elif not os.path.exists(b_pwd_file): raise AnsibleError("The password file %s was not found" % pwd_file) elif os.path.is_executable(b_pwd_file): display.vvvv(u'The password file %s is a script.' % to_text(pwd_file)) cmd = [b_pwd_file] try: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except OSError as e: raise AnsibleError("Problem occured when trying to run the password script %s (%s)." " If this is not a script, remove the executable bit from the file." % (pwd_file, e)) stdout, stderr = p.communicate() if p.returncode != 0: raise AnsibleError("The password script %s returned an error (rc=%s): %s" % (pwd_file, p.returncode, stderr)) secret = stdout else: try: f = open(b_pwd_file, "rb") secret = f.read().strip() f.close() except (OSError, IOError) as e: raise AnsibleError("Could not read password file %s: %s" % (pwd_file, e)) secret = secret.strip(b'\r\n') if not secret: raise AnsibleError('Empty password was provided from file (%s)' % pwd_file) return to_unsafe_text(secret) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.545556 ansible-core-2.12.0/lib/ansible/cli/adhoc.py0000644000000000000000000001635300000000000020470 0ustar00rootroot00000000000000# Copyright: (c) 2012, Michael DeHaan # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleError, AnsibleOptionsError from ansible.executor.task_queue_manager import TaskQueueManager from ansible.module_utils._text import to_text from ansible.parsing.splitter import parse_kv from ansible.playbook import Playbook from ansible.playbook.play import Play from ansible.utils.display import Display display = Display() class AdHocCLI(CLI): ''' is an extra-simple tool/framework/API for doing 'remote things'. this command allows you to define and run a single task 'playbook' against a set of hosts ''' def init_parser(self): ''' create an options parser for bin/ansible ''' super(AdHocCLI, self).init_parser(usage='%prog [options]', desc="Define and run a single task 'playbook' against a set of hosts", epilog="Some actions do not make sense in Ad-Hoc (include, meta, etc)") opt_help.add_runas_options(self.parser) opt_help.add_inventory_options(self.parser) opt_help.add_async_options(self.parser) opt_help.add_output_options(self.parser) opt_help.add_connect_options(self.parser) opt_help.add_check_options(self.parser) opt_help.add_runtask_options(self.parser) opt_help.add_vault_options(self.parser) opt_help.add_fork_options(self.parser) opt_help.add_module_options(self.parser) opt_help.add_basedir_options(self.parser) opt_help.add_tasknoplay_options(self.parser) # options unique to ansible ad-hoc self.parser.add_argument('-a', '--args', dest='module_args', help="The action's options in space separated k=v format: -a 'opt1=val1 opt2=val2'", default=C.DEFAULT_MODULE_ARGS) self.parser.add_argument('-m', '--module-name', dest='module_name', help="Name of the action to execute (default=%s)" % C.DEFAULT_MODULE_NAME, default=C.DEFAULT_MODULE_NAME) self.parser.add_argument('args', metavar='pattern', help='host pattern') def post_process_args(self, options): '''Post process and validate options for bin/ansible ''' options = super(AdHocCLI, self).post_process_args(options) display.verbosity = options.verbosity self.validate_conflicts(options, runas_opts=True, fork_opts=True) return options def _play_ds(self, pattern, async_val, poll): check_raw = context.CLIARGS['module_name'] in C.MODULE_REQUIRE_ARGS mytask = {'action': {'module': context.CLIARGS['module_name'], 'args': parse_kv(context.CLIARGS['module_args'], check_raw=check_raw)}, 'timeout': context.CLIARGS['task_timeout']} # avoid adding to tasks that don't support it, unless set, then give user an error if context.CLIARGS['module_name'] not in C._ACTION_ALL_INCLUDE_ROLE_TASKS and any(frozenset((async_val, poll))): mytask['async_val'] = async_val mytask['poll'] = poll return dict( name="Ansible Ad-Hoc", hosts=pattern, gather_facts='no', tasks=[mytask]) def run(self): ''' create and execute the single task playbook ''' super(AdHocCLI, self).run() # only thing left should be host pattern pattern = to_text(context.CLIARGS['args'], errors='surrogate_or_strict') # handle password prompts sshpass = None becomepass = None (sshpass, becomepass) = self.ask_passwords() passwords = {'conn_pass': sshpass, 'become_pass': becomepass} # get basic objects loader, inventory, variable_manager = self._play_prereqs() # get list of hosts to execute against try: hosts = self.get_host_list(inventory, context.CLIARGS['subset'], pattern) except AnsibleError: if context.CLIARGS['subset']: raise else: hosts = [] display.warning("No hosts matched, nothing to do") # just listing hosts? if context.CLIARGS['listhosts']: display.display(' hosts (%d):' % len(hosts)) for host in hosts: display.display(' %s' % host) return 0 # verify we have arguments if we know we need em if context.CLIARGS['module_name'] in C.MODULE_REQUIRE_ARGS and not context.CLIARGS['module_args']: err = "No argument passed to %s module" % context.CLIARGS['module_name'] if pattern.endswith(".yml"): err = err + ' (did you mean to run ansible-playbook?)' raise AnsibleOptionsError(err) # Avoid modules that don't work with ad-hoc if context.CLIARGS['module_name'] in C._ACTION_IMPORT_PLAYBOOK: raise AnsibleOptionsError("'%s' is not a valid action for ad-hoc commands" % context.CLIARGS['module_name']) # construct playbook objects to wrap task play_ds = self._play_ds(pattern, context.CLIARGS['seconds'], context.CLIARGS['poll_interval']) play = Play().load(play_ds, variable_manager=variable_manager, loader=loader) # used in start callback playbook = Playbook(loader) playbook._entries.append(play) playbook._file_name = '__adhoc_playbook__' if self.callback: cb = self.callback elif context.CLIARGS['one_line']: cb = 'oneline' # Respect custom 'stdout_callback' only with enabled 'bin_ansible_callbacks' elif C.DEFAULT_LOAD_CALLBACK_PLUGINS and C.DEFAULT_STDOUT_CALLBACK != 'default': cb = C.DEFAULT_STDOUT_CALLBACK else: cb = 'minimal' run_tree = False if context.CLIARGS['tree']: C.CALLBACKS_ENABLED.append('tree') C.TREE_DIR = context.CLIARGS['tree'] run_tree = True # now create a task queue manager to execute the play self._tqm = None try: self._tqm = TaskQueueManager( inventory=inventory, variable_manager=variable_manager, loader=loader, passwords=passwords, stdout_callback=cb, run_additional_callbacks=C.DEFAULT_LOAD_CALLBACK_PLUGINS, run_tree=run_tree, forks=context.CLIARGS['forks'], ) self._tqm.load_callbacks() self._tqm.send_callback('v2_playbook_on_start', playbook) result = self._tqm.run(play) self._tqm.send_callback('v2_playbook_on_stats', self._tqm._stats) finally: if self._tqm: self._tqm.cleanup() if loader: loader.cleanup_all_tmp_files() return result ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.972559 ansible-core-2.12.0/lib/ansible/cli/arguments/0000755000000000000000000000000000000000000021035 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.545556 ansible-core-2.12.0/lib/ansible/cli/arguments/__init__.py0000644000000000000000000000033500000000000023147 0ustar00rootroot00000000000000# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.545556 ansible-core-2.12.0/lib/ansible/cli/arguments/option_helpers.py0000644000000000000000000004311100000000000024441 0ustar00rootroot00000000000000# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import copy import operator import argparse import os import os.path import sys import time from jinja2 import __version__ as j2_version import ansible from ansible import constants as C from ansible.module_utils._text import to_native from ansible.module_utils.common.yaml import HAS_LIBYAML, yaml_load from ansible.release import __version__ from ansible.utils.path import unfrackpath # # Special purpose OptionParsers # class SortingHelpFormatter(argparse.HelpFormatter): def add_arguments(self, actions): actions = sorted(actions, key=operator.attrgetter('option_strings')) super(SortingHelpFormatter, self).add_arguments(actions) class AnsibleVersion(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): ansible_version = to_native(version(getattr(parser, 'prog'))) print(ansible_version) parser.exit() class UnrecognizedArgument(argparse.Action): def __init__(self, option_strings, dest, const=True, default=None, required=False, help=None, metavar=None, nargs=0): super(UnrecognizedArgument, self).__init__(option_strings=option_strings, dest=dest, nargs=nargs, const=const, default=default, required=required, help=help) def __call__(self, parser, namespace, values, option_string=None): parser.error('unrecognized arguments: %s' % option_string) class PrependListAction(argparse.Action): """A near clone of ``argparse._AppendAction``, but designed to prepend list values instead of appending. """ def __init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None): if nargs == 0: raise ValueError('nargs for append actions must be > 0; if arg ' 'strings are not supplying the value to append, ' 'the append const action may be more appropriate') if const is not None and nargs != argparse.OPTIONAL: raise ValueError('nargs must be %r to supply const' % argparse.OPTIONAL) super(PrependListAction, self).__init__( option_strings=option_strings, dest=dest, nargs=nargs, const=const, default=default, type=type, choices=choices, required=required, help=help, metavar=metavar ) def __call__(self, parser, namespace, values, option_string=None): items = copy.copy(ensure_value(namespace, self.dest, [])) items[0:0] = values setattr(namespace, self.dest, items) def ensure_value(namespace, name, value): if getattr(namespace, name, None) is None: setattr(namespace, name, value) return getattr(namespace, name) # # Callbacks to validate and normalize Options # def unfrack_path(pathsep=False): """Turn an Option's data into a single path in Ansible locations""" def inner(value): if pathsep: return [unfrackpath(x) for x in value.split(os.pathsep) if x] if value == '-': return value return unfrackpath(value) return inner def maybe_unfrack_path(beacon): def inner(value): if value.startswith(beacon): return beacon + unfrackpath(value[1:]) return value return inner def _git_repo_info(repo_path): """ returns a string containing git branch, commit id and commit date """ result = None if os.path.exists(repo_path): # Check if the .git is a file. If it is a file, it means that we are in a submodule structure. if os.path.isfile(repo_path): try: with open(repo_path) as f: gitdir = yaml_load(f).get('gitdir') # There is a possibility the .git file to have an absolute path. if os.path.isabs(gitdir): repo_path = gitdir else: repo_path = os.path.join(repo_path[:-4], gitdir) except (IOError, AttributeError): return '' with open(os.path.join(repo_path, "HEAD")) as f: line = f.readline().rstrip("\n") if line.startswith("ref:"): branch_path = os.path.join(repo_path, line[5:]) else: branch_path = None if branch_path and os.path.exists(branch_path): branch = '/'.join(line.split('/')[2:]) with open(branch_path) as f: commit = f.readline()[:10] else: # detached HEAD commit = line[:10] branch = 'detached HEAD' branch_path = os.path.join(repo_path, "HEAD") date = time.localtime(os.stat(branch_path).st_mtime) if time.daylight == 0: offset = time.timezone else: offset = time.altzone result = "({0} {1}) last updated {2} (GMT {3:+04d})".format(branch, commit, time.strftime("%Y/%m/%d %H:%M:%S", date), int(offset / -36)) else: result = '' return result def _gitinfo(): basedir = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..')) repo_path = os.path.join(basedir, '.git') return _git_repo_info(repo_path) def version(prog=None): """ return ansible version """ if prog: result = ["{0} [core {1}]".format(prog, __version__)] else: result = [__version__] gitinfo = _gitinfo() if gitinfo: result[0] = "{0} {1}".format(result[0], gitinfo) result.append(" config file = %s" % C.CONFIG_FILE) if C.DEFAULT_MODULE_PATH is None: cpath = "Default w/o overrides" else: cpath = C.DEFAULT_MODULE_PATH result.append(" configured module search path = %s" % cpath) result.append(" ansible python module location = %s" % ':'.join(ansible.__path__)) result.append(" ansible collection location = %s" % ':'.join(C.COLLECTIONS_PATHS)) result.append(" executable location = %s" % sys.argv[0]) result.append(" python version = %s" % ''.join(sys.version.splitlines())) result.append(" jinja version = %s" % j2_version) result.append(" libyaml = %s" % HAS_LIBYAML) return "\n".join(result) # # Functions to add pre-canned options to an OptionParser # def create_base_parser(prog, usage="", desc=None, epilog=None): """ Create an options parser for all ansible scripts """ # base opts parser = argparse.ArgumentParser( prog=prog, formatter_class=SortingHelpFormatter, epilog=epilog, description=desc, conflict_handler='resolve', ) version_help = "show program's version number, config file location, configured module search path," \ " module location, executable location and exit" parser.add_argument('--version', action=AnsibleVersion, nargs=0, help=version_help) add_verbosity_options(parser) return parser def add_verbosity_options(parser): """Add options for verbosity""" parser.add_argument('-v', '--verbose', dest='verbosity', default=C.DEFAULT_VERBOSITY, action="count", help="verbose mode (-vvv for more, -vvvv to enable connection debugging)") def add_async_options(parser): """Add options for commands which can launch async tasks""" parser.add_argument('-P', '--poll', default=C.DEFAULT_POLL_INTERVAL, type=int, dest='poll_interval', help="set the poll interval if using -B (default=%s)" % C.DEFAULT_POLL_INTERVAL) parser.add_argument('-B', '--background', dest='seconds', type=int, default=0, help='run asynchronously, failing after X seconds (default=N/A)') def add_basedir_options(parser): """Add options for commands which can set a playbook basedir""" parser.add_argument('--playbook-dir', default=C.config.get_config_value('PLAYBOOK_DIR'), dest='basedir', action='store', help="Since this tool does not use playbooks, use this as a substitute playbook directory." "This sets the relative path for many features including roles/ group_vars/ etc.", type=unfrack_path()) def add_check_options(parser): """Add options for commands which can run with diagnostic information of tasks""" parser.add_argument("-C", "--check", default=False, dest='check', action='store_true', help="don't make any changes; instead, try to predict some of the changes that may occur") parser.add_argument('--syntax-check', dest='syntax', action='store_true', help="perform a syntax check on the playbook, but do not execute it") parser.add_argument("-D", "--diff", default=C.DIFF_ALWAYS, dest='diff', action='store_true', help="when changing (small) files and templates, show the differences in those" " files; works great with --check") def add_connect_options(parser): """Add options for commands which need to connection to other hosts""" connect_group = parser.add_argument_group("Connection Options", "control as whom and how to connect to hosts") connect_group.add_argument('--private-key', '--key-file', default=C.DEFAULT_PRIVATE_KEY_FILE, dest='private_key_file', help='use this file to authenticate the connection', type=unfrack_path()) connect_group.add_argument('-u', '--user', default=C.DEFAULT_REMOTE_USER, dest='remote_user', help='connect as this user (default=%s)' % C.DEFAULT_REMOTE_USER) connect_group.add_argument('-c', '--connection', dest='connection', default=C.DEFAULT_TRANSPORT, help="connection type to use (default=%s)" % C.DEFAULT_TRANSPORT) connect_group.add_argument('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type=int, dest='timeout', help="override the connection timeout in seconds (default=%s)" % C.DEFAULT_TIMEOUT) # ssh only connect_group.add_argument('--ssh-common-args', default=None, dest='ssh_common_args', help="specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)") connect_group.add_argument('--sftp-extra-args', default=None, dest='sftp_extra_args', help="specify extra arguments to pass to sftp only (e.g. -f, -l)") connect_group.add_argument('--scp-extra-args', default=None, dest='scp_extra_args', help="specify extra arguments to pass to scp only (e.g. -l)") connect_group.add_argument('--ssh-extra-args', default=None, dest='ssh_extra_args', help="specify extra arguments to pass to ssh only (e.g. -R)") parser.add_argument_group(connect_group) connect_password_group = parser.add_mutually_exclusive_group() connect_password_group.add_argument('-k', '--ask-pass', default=C.DEFAULT_ASK_PASS, dest='ask_pass', action='store_true', help='ask for connection password') connect_password_group.add_argument('--connection-password-file', '--conn-pass-file', default=C.CONNECTION_PASSWORD_FILE, dest='connection_password_file', help="Connection password file", type=unfrack_path(), action='store') parser.add_argument_group(connect_password_group) def add_fork_options(parser): """Add options for commands that can fork worker processes""" parser.add_argument('-f', '--forks', dest='forks', default=C.DEFAULT_FORKS, type=int, help="specify number of parallel processes to use (default=%s)" % C.DEFAULT_FORKS) def add_inventory_options(parser): """Add options for commands that utilize inventory""" parser.add_argument('-i', '--inventory', '--inventory-file', dest='inventory', action="append", help="specify inventory host path or comma separated host list. --inventory-file is deprecated") parser.add_argument('--list-hosts', dest='listhosts', action='store_true', help='outputs a list of matching hosts; does not execute anything else') parser.add_argument('-l', '--limit', default=C.DEFAULT_SUBSET, dest='subset', help='further limit selected hosts to an additional pattern') def add_meta_options(parser): """Add options for commands which can launch meta tasks from the command line""" parser.add_argument('--force-handlers', default=C.DEFAULT_FORCE_HANDLERS, dest='force_handlers', action='store_true', help="run handlers even if a task fails") parser.add_argument('--flush-cache', dest='flush_cache', action='store_true', help="clear the fact cache for every host in inventory") def add_module_options(parser): """Add options for commands that load modules""" module_path = C.config.get_configuration_definition('DEFAULT_MODULE_PATH').get('default', '') parser.add_argument('-M', '--module-path', dest='module_path', default=None, help="prepend colon-separated path(s) to module library (default=%s)" % module_path, type=unfrack_path(pathsep=True), action=PrependListAction) def add_output_options(parser): """Add options for commands which can change their output""" parser.add_argument('-o', '--one-line', dest='one_line', action='store_true', help='condense output') parser.add_argument('-t', '--tree', dest='tree', default=None, help='log output to this directory') def add_runas_options(parser): """ Add options for commands which can run tasks as another user Note that this includes the options from add_runas_prompt_options(). Only one of these functions should be used. """ runas_group = parser.add_argument_group("Privilege Escalation Options", "control how and which user you become as on target hosts") # consolidated privilege escalation (become) runas_group.add_argument("-b", "--become", default=C.DEFAULT_BECOME, action="store_true", dest='become', help="run operations with become (does not imply password prompting)") runas_group.add_argument('--become-method', dest='become_method', default=C.DEFAULT_BECOME_METHOD, help='privilege escalation method to use (default=%s)' % C.DEFAULT_BECOME_METHOD + ', use `ansible-doc -t become -l` to list valid choices.') runas_group.add_argument('--become-user', default=None, dest='become_user', type=str, help='run operations as this user (default=%s)' % C.DEFAULT_BECOME_USER) parser.add_argument_group(runas_group) add_runas_prompt_options(parser) def add_runas_prompt_options(parser, runas_group=None): """ Add options for commands which need to prompt for privilege escalation credentials Note that add_runas_options() includes these options already. Only one of the two functions should be used. """ if runas_group is not None: parser.add_argument_group(runas_group) runas_pass_group = parser.add_mutually_exclusive_group() runas_pass_group.add_argument('-K', '--ask-become-pass', dest='become_ask_pass', action='store_true', default=C.DEFAULT_BECOME_ASK_PASS, help='ask for privilege escalation password') runas_pass_group.add_argument('--become-password-file', '--become-pass-file', default=C.BECOME_PASSWORD_FILE, dest='become_password_file', help="Become password file", type=unfrack_path(), action='store') parser.add_argument_group(runas_pass_group) def add_runtask_options(parser): """Add options for commands that run a task""" parser.add_argument('-e', '--extra-vars', dest="extra_vars", action="append", type=maybe_unfrack_path('@'), help="set additional variables as key=value or YAML/JSON, if filename prepend with @", default=[]) def add_tasknoplay_options(parser): """Add options for commands that run a task w/o a defined play""" parser.add_argument('--task-timeout', type=int, dest="task_timeout", action="store", default=C.TASK_TIMEOUT, help="set task timeout limit in seconds, must be positive integer.") def add_subset_options(parser): """Add options for commands which can run a subset of tasks""" parser.add_argument('-t', '--tags', dest='tags', default=C.TAGS_RUN, action='append', help="only run plays and tasks tagged with these values") parser.add_argument('--skip-tags', dest='skip_tags', default=C.TAGS_SKIP, action='append', help="only run plays and tasks whose tags do not match these values") def add_vault_options(parser): """Add options for loading vault files""" parser.add_argument('--vault-id', default=[], dest='vault_ids', action='append', type=str, help='the vault identity to use') base_group = parser.add_mutually_exclusive_group() base_group.add_argument('--ask-vault-password', '--ask-vault-pass', default=C.DEFAULT_ASK_VAULT_PASS, dest='ask_vault_pass', action='store_true', help='ask for vault password') base_group.add_argument('--vault-password-file', '--vault-pass-file', default=[], dest='vault_password_files', help="vault password file", type=unfrack_path(), action='append') ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.545556 ansible-core-2.12.0/lib/ansible/cli/config.py0000644000000000000000000004512700000000000020660 0ustar00rootroot00000000000000# Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import shlex import subprocess import yaml from ansible import context import ansible.plugins.loader as plugin_loader from ansible import constants as C from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.config.manager import ConfigManager, Setting from ansible.errors import AnsibleError, AnsibleOptionsError from ansible.module_utils._text import to_native, to_text, to_bytes from ansible.module_utils.common._collections_compat import Mapping from ansible.module_utils.six import string_types from ansible.module_utils.six.moves import shlex_quote from ansible.parsing.quoting import is_quoted from ansible.parsing.yaml.dumper import AnsibleDumper from ansible.utils.color import stringc from ansible.utils.display import Display from ansible.utils.path import unfrackpath display = Display() class ConfigCLI(CLI): """ Config command line class """ def __init__(self, args, callback=None): self.config_file = None self.config = None super(ConfigCLI, self).__init__(args, callback) def init_parser(self): super(ConfigCLI, self).init_parser( desc="View ansible configuration.", ) common = opt_help.argparse.ArgumentParser(add_help=False) opt_help.add_verbosity_options(common) common.add_argument('-c', '--config', dest='config_file', help="path to configuration file, defaults to first file found in precedence.") common.add_argument("-t", "--type", action="store", default='base', dest='type', choices=['all', 'base'] + list(C.CONFIGURABLE_PLUGINS), help="Filter down to a specific plugin type.") common.add_argument('args', help='Specific plugin to target, requires type of plugin to be set', nargs='*') subparsers = self.parser.add_subparsers(dest='action') subparsers.required = True list_parser = subparsers.add_parser('list', help='Print all config options', parents=[common]) list_parser.set_defaults(func=self.execute_list) dump_parser = subparsers.add_parser('dump', help='Dump configuration', parents=[common]) dump_parser.set_defaults(func=self.execute_dump) dump_parser.add_argument('--only-changed', '--changed-only', dest='only_changed', action='store_true', help="Only show configurations that have changed from the default") view_parser = subparsers.add_parser('view', help='View configuration file', parents=[common]) view_parser.set_defaults(func=self.execute_view) init_parser = subparsers.add_parser('init', help='Create initial configuration', parents=[common]) init_parser.set_defaults(func=self.execute_init) init_parser.add_argument('--format', '-f', dest='format', action='store', choices=['ini', 'env', 'vars'], default='ini', help='Output format for init') init_parser.add_argument('--disabled', dest='commented', action='store_true', default=False, help='Prefixes all entries with a comment character to disable them') # search_parser = subparsers.add_parser('find', help='Search configuration') # search_parser.set_defaults(func=self.execute_search) # search_parser.add_argument('args', help='Search term', metavar='') def post_process_args(self, options): options = super(ConfigCLI, self).post_process_args(options) display.verbosity = options.verbosity return options def run(self): super(ConfigCLI, self).run() if context.CLIARGS['config_file']: self.config_file = unfrackpath(context.CLIARGS['config_file'], follow=False) b_config = to_bytes(self.config_file) if os.path.exists(b_config) and os.access(b_config, os.R_OK): self.config = ConfigManager(self.config_file) else: raise AnsibleOptionsError('The provided configuration file is missing or not accessible: %s' % to_native(self.config_file)) else: self.config = C.config self.config_file = self.config._config_file if self.config_file: try: if not os.path.exists(self.config_file): raise AnsibleOptionsError("%s does not exist or is not accessible" % (self.config_file)) elif not os.path.isfile(self.config_file): raise AnsibleOptionsError("%s is not a valid file" % (self.config_file)) os.environ['ANSIBLE_CONFIG'] = to_native(self.config_file) except Exception: if context.CLIARGS['action'] in ['view']: raise elif context.CLIARGS['action'] in ['edit', 'update']: display.warning("File does not exist, used empty file: %s" % self.config_file) elif context.CLIARGS['action'] == 'view': raise AnsibleError('Invalid or no config file was supplied') # run the requested action context.CLIARGS['func']() def execute_update(self): ''' Updates a single setting in the specified ansible.cfg ''' raise AnsibleError("Option not implemented yet") # pylint: disable=unreachable if context.CLIARGS['setting'] is None: raise AnsibleOptionsError("update option requires a setting to update") (entry, value) = context.CLIARGS['setting'].split('=') if '.' in entry: (section, option) = entry.split('.') else: section = 'defaults' option = entry subprocess.call([ 'ansible', '-m', 'ini_file', 'localhost', '-c', 'local', '-a', '"dest=%s section=%s option=%s value=%s backup=yes"' % (self.config_file, section, option, value) ]) def execute_view(self): ''' Displays the current config file ''' try: with open(self.config_file, 'rb') as f: self.pager(to_text(f.read(), errors='surrogate_or_strict')) except Exception as e: raise AnsibleError("Failed to open config file: %s" % to_native(e)) def execute_edit(self): ''' Opens ansible.cfg in the default EDITOR ''' raise AnsibleError("Option not implemented yet") # pylint: disable=unreachable try: editor = shlex.split(os.environ.get('EDITOR', 'vi')) editor.append(self.config_file) subprocess.call(editor) except Exception as e: raise AnsibleError("Failed to open editor: %s" % to_native(e)) def _list_plugin_settings(self, ptype, plugins=None): entries = {} loader = getattr(plugin_loader, '%s_loader' % ptype) # build list if plugins: plugin_cs = [] for plugin in plugins: p = loader.get(plugin, class_only=True) if p is None: display.warning("Skipping %s as we could not find matching plugin" % plugin) else: plugin_cs.append(p) else: plugin_cs = loader.all(class_only=True) # iterate over class instances for plugin in plugin_cs: finalname = name = plugin._load_name if name.startswith('_'): # alias or deprecated if os.path.islink(plugin._original_path): continue else: finalname = name.replace('_', '', 1) + ' (DEPRECATED)' entries[finalname] = self.config.get_configuration_definitions(ptype, name) return entries def _list_entries_from_args(self): ''' build a dict with the list requested configs ''' config_entries = {} if context.CLIARGS['type'] in ('base', 'all'): # this dumps main/common configs config_entries = self.config.get_configuration_definitions(ignore_private=True) if context.CLIARGS['type'] != 'base': config_entries['PLUGINS'] = {} if context.CLIARGS['type'] == 'all': # now each plugin type for ptype in C.CONFIGURABLE_PLUGINS: config_entries['PLUGINS'][ptype.upper()] = self._list_plugin_settings(ptype) elif context.CLIARGS['type'] != 'base': config_entries['PLUGINS'][context.CLIARGS['type']] = self._list_plugin_settings(context.CLIARGS['type'], context.CLIARGS['args']) return config_entries def execute_list(self): ''' list and output available configs ''' config_entries = self._list_entries_from_args() self.pager(to_text(yaml.dump(config_entries, Dumper=AnsibleDumper), errors='surrogate_or_strict')) def _get_settings_vars(self, settings, subkey): data = [] if context.CLIARGS['commented']: prefix = '#' else: prefix = '' for setting in settings: if not settings[setting].get('description'): continue default = settings[setting].get('default', '') if subkey == 'env': stype = settings[setting].get('type', '') if stype == 'boolean': if default: default = '1' else: default = '0' elif default: if stype == 'list': if not isinstance(default, string_types): # python lists are not valid env ones try: default = ', '.join(default) except Exception as e: # list of other stuff default = '%s' % to_native(default) if isinstance(default, string_types) and not is_quoted(default): default = shlex_quote(default) elif default is None: default = '' if subkey in settings[setting] and settings[setting][subkey]: entry = settings[setting][subkey][-1]['name'] if isinstance(settings[setting]['description'], string_types): desc = settings[setting]['description'] else: desc = '\n#'.join(settings[setting]['description']) name = settings[setting].get('name', setting) data.append('# %s(%s): %s' % (name, settings[setting].get('type', 'string'), desc)) # TODO: might need quoting and value coercion depending on type if subkey == 'env': data.append('%s%s=%s' % (prefix, entry, default)) elif subkey == 'vars': data.append(prefix + to_text(yaml.dump({entry: default}, Dumper=AnsibleDumper, default_flow_style=False), errors='surrogate_or_strict')) data.append('') return data def _get_settings_ini(self, settings): sections = {} for o in sorted(settings.keys()): opt = settings[o] if not isinstance(opt, Mapping): # recursed into one of the few settings that is a mapping, now hitting it's strings continue if not opt.get('description'): # its a plugin new_sections = self._get_settings_ini(opt) for s in new_sections: if s in sections: sections[s].extend(new_sections[s]) else: sections[s] = new_sections[s] continue if isinstance(opt['description'], string_types): desc = '# (%s) %s' % (opt.get('type', 'string'), opt['description']) else: desc = "# (%s) " % opt.get('type', 'string') desc += "\n# ".join(opt['description']) if 'ini' in opt and opt['ini']: entry = opt['ini'][-1] if entry['section'] not in sections: sections[entry['section']] = [] default = opt.get('default', '') if opt.get('type', '') == 'list' and not isinstance(default, string_types): # python lists are not valid ini ones default = ', '.join(default) elif default is None: default = '' if context.CLIARGS['commented']: entry['key'] = ';%s' % entry['key'] key = desc + '\n%s=%s' % (entry['key'], default) sections[entry['section']].append(key) return sections def execute_init(self): data = [] config_entries = self._list_entries_from_args() plugin_types = config_entries.pop('PLUGINS', None) if context.CLIARGS['format'] == 'ini': sections = self._get_settings_ini(config_entries) if plugin_types: for ptype in plugin_types: plugin_sections = self._get_settings_ini(plugin_types[ptype]) for s in plugin_sections: if s in sections: sections[s].extend(plugin_sections[s]) else: sections[s] = plugin_sections[s] if sections: for section in sections.keys(): data.append('[%s]' % section) for key in sections[section]: data.append(key) data.append('') data.append('') elif context.CLIARGS['format'] in ('env', 'vars'): # TODO: add yaml once that config option is added data = self._get_settings_vars(config_entries, context.CLIARGS['format']) if plugin_types: for ptype in plugin_types: for plugin in plugin_types[ptype].keys(): data.extend(self._get_settings_vars(plugin_types[ptype][plugin], context.CLIARGS['format'])) self.pager(to_text('\n'.join(data), errors='surrogate_or_strict')) def _render_settings(self, config): text = [] for setting in sorted(config): if isinstance(config[setting], Setting): if config[setting].origin == 'default': color = 'green' elif config[setting].origin == 'REQUIRED': color = 'red' else: color = 'yellow' msg = "%s(%s) = %s" % (setting, config[setting].origin, config[setting].value) else: color = 'green' msg = "%s(%s) = %s" % (setting, 'default', config[setting].get('default')) if not context.CLIARGS['only_changed'] or color == 'yellow': text.append(stringc(msg, color)) return text def _get_global_configs(self): config = self.config.get_configuration_definitions(ignore_private=True).copy() for setting in self.config.data.get_settings(): if setting.name in config: config[setting.name] = setting return self._render_settings(config) def _get_plugin_configs(self, ptype, plugins): # prep loading loader = getattr(plugin_loader, '%s_loader' % ptype) # acumulators text = [] config_entries = {} # build list if plugins: plugin_cs = [] for plugin in plugins: p = loader.get(plugin, class_only=True) if p is None: display.warning("Skipping %s as we could not find matching plugin" % plugin) else: plugin_cs.append(loader.get(plugin, class_only=True)) else: plugin_cs = loader.all(class_only=True) for plugin in plugin_cs: # in case of deprecastion they diverge finalname = name = plugin._load_name if name.startswith('_'): if os.path.islink(plugin._original_path): # skip alias continue # deprecated, but use 'nice name' finalname = name.replace('_', '', 1) + ' (DEPRECATED)' # default entries per plugin config_entries[finalname] = self.config.get_configuration_definitions(ptype, name) try: # populate config entries by loading plugin dump = loader.get(name, class_only=True) except Exception as e: display.warning('Skipping "%s" %s plugin, as we cannot load plugin to check config due to : %s' % (name, ptype, to_native(e))) continue # actually get the values for setting in config_entries[finalname].keys(): try: v, o = C.config.get_config_value_and_origin(setting, plugin_type=ptype, plugin_name=name) except AnsibleError as e: if to_text(e).startswith('No setting was provided for required configuration'): v = None o = 'REQUIRED' else: raise e config_entries[finalname][setting] = Setting(setting, v, o, None) # pretty please! results = self._render_settings(config_entries[finalname]) if results: # avoid header for empty lists (only changed!) text.append('\n%s:\n%s' % (finalname, '_' * len(finalname))) text.extend(results) return text def execute_dump(self): ''' Shows the current settings, merges ansible.cfg if specified ''' if context.CLIARGS['type'] == 'base': # deal with base text = self._get_global_configs() elif context.CLIARGS['type'] == 'all': # deal with base text = self._get_global_configs() # deal with plugins for ptype in C.CONFIGURABLE_PLUGINS: text.append('\n%s:\n%s' % (ptype.upper(), '=' * len(ptype))) text.extend(self._get_plugin_configs(ptype, context.CLIARGS['args'])) else: # deal with plugins text = self._get_plugin_configs(context.CLIARGS['type'], context.CLIARGS['args']) self.pager(to_text('\n'.join(text), errors='surrogate_or_strict')) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.545556 ansible-core-2.12.0/lib/ansible/cli/console.py0000644000000000000000000004342200000000000021051 0ustar00rootroot00000000000000# Copyright: (c) 2014, Nandor Sivok # Copyright: (c) 2016, Redhat Inc # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import atexit import cmd import getpass import readline import os import sys from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.executor.task_queue_manager import TaskQueueManager from ansible.module_utils._text import to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean from ansible.parsing.splitter import parse_kv from ansible.playbook.play import Play from ansible.plugins.loader import module_loader, fragment_loader from ansible.utils import plugin_docs from ansible.utils.color import stringc from ansible.utils.display import Display display = Display() class ConsoleCLI(CLI, cmd.Cmd): ''' A REPL that allows for running ad-hoc tasks against a chosen inventory from a nice shell with built-in tab completion (based on dominis' ansible-shell). It supports several commands, and you can modify its configuration at runtime: - `cd [pattern]`: change host/group (you can use host patterns eg.: app*.dc*:!app01*) - `list`: list available hosts in the current path - `list groups`: list groups included in the current path - `become`: toggle the become flag - `!`: forces shell module instead of the ansible module (!yum update -y) - `verbosity [num]`: set the verbosity level - `forks [num]`: set the number of forks - `become_user [user]`: set the become_user - `remote_user [user]`: set the remote_user - `become_method [method]`: set the privilege escalation method - `check [bool]`: toggle check mode - `diff [bool]`: toggle diff mode - `timeout [integer]`: set the timeout of tasks in seconds (0 to disable) - `help [command/module]`: display documentation for the command or module - `exit`: exit ansible-console ''' modules = [] ARGUMENTS = {'host-pattern': 'A name of a group in the inventory, a shell-like glob ' 'selecting hosts in inventory or any combination of the two separated by commas.'} # use specific to console, but fallback to highlight for backwards compatibility NORMAL_PROMPT = C.COLOR_CONSOLE_PROMPT or C.COLOR_HIGHLIGHT def __init__(self, args): super(ConsoleCLI, self).__init__(args) self.intro = 'Welcome to the ansible console. Type help or ? to list commands.\n' self.groups = [] self.hosts = [] self.pattern = None self.variable_manager = None self.loader = None self.passwords = dict() self.modules = None self.cwd = '*' # Defaults for these are set from the CLI in run() self.remote_user = None self.become = None self.become_user = None self.become_method = None self.check_mode = None self.diff = None self.forks = None self.task_timeout = None cmd.Cmd.__init__(self) def init_parser(self): super(ConsoleCLI, self).init_parser( desc="REPL console for executing Ansible tasks.", epilog="This is not a live session/connection: each task is executed in the background and returns its results." ) opt_help.add_runas_options(self.parser) opt_help.add_inventory_options(self.parser) opt_help.add_connect_options(self.parser) opt_help.add_check_options(self.parser) opt_help.add_vault_options(self.parser) opt_help.add_fork_options(self.parser) opt_help.add_module_options(self.parser) opt_help.add_basedir_options(self.parser) opt_help.add_runtask_options(self.parser) opt_help.add_tasknoplay_options(self.parser) # options unique to shell self.parser.add_argument('pattern', help='host pattern', metavar='pattern', default='all', nargs='?') self.parser.add_argument('--step', dest='step', action='store_true', help="one-step-at-a-time: confirm each task before running") def post_process_args(self, options): options = super(ConsoleCLI, self).post_process_args(options) display.verbosity = options.verbosity self.validate_conflicts(options, runas_opts=True, fork_opts=True) return options def get_names(self): return dir(self) def cmdloop(self): try: cmd.Cmd.cmdloop(self) except KeyboardInterrupt: self.cmdloop() except EOFError: self.display("[Ansible-console was exited]") self.do_exit(self) def set_prompt(self): login_user = self.remote_user or getpass.getuser() self.selected = self.inventory.list_hosts(self.cwd) prompt = "%s@%s (%d)[f:%s]" % (login_user, self.cwd, len(self.selected), self.forks) if self.become and self.become_user in [None, 'root']: prompt += "# " color = C.COLOR_ERROR else: prompt += "$ " color = self.NORMAL_PROMPT self.prompt = stringc(prompt, color, wrap_nonvisible_chars=True) def list_modules(self): modules = set() if context.CLIARGS['module_path']: for path in context.CLIARGS['module_path']: if path: module_loader.add_directory(path) module_paths = module_loader._get_paths() for path in module_paths: if path is not None: modules.update(self._find_modules_in_path(path)) return modules def _find_modules_in_path(self, path): if os.path.isdir(path): for module in os.listdir(path): if module.startswith('.'): continue elif os.path.isdir(module): self._find_modules_in_path(module) elif module.startswith('__'): continue elif any(module.endswith(x) for x in C.REJECT_EXTS): continue elif module in C.IGNORE_FILES: continue elif module.startswith('_'): fullpath = '/'.join([path, module]) if os.path.islink(fullpath): # avoids aliases continue module = module.replace('_', '', 1) module = os.path.splitext(module)[0] # removes the extension yield module def default(self, arg, forceshell=False): """ actually runs modules """ if arg.startswith("#"): return False if not self.cwd: display.error("No host found") return False if arg.split()[0] in self.modules: module = arg.split()[0] module_args = ' '.join(arg.split()[1:]) else: module = 'shell' module_args = arg if forceshell is True: module = 'shell' module_args = arg result = None try: check_raw = module in C._ACTION_ALLOWS_RAW_ARGS task = dict(action=dict(module=module, args=parse_kv(module_args, check_raw=check_raw)), timeout=self.task_timeout) play_ds = dict( name="Ansible Shell", hosts=self.cwd, gather_facts='no', tasks=[task], remote_user=self.remote_user, become=self.become, become_user=self.become_user, become_method=self.become_method, check_mode=self.check_mode, diff=self.diff, ) play = Play().load(play_ds, variable_manager=self.variable_manager, loader=self.loader) except Exception as e: display.error(u"Unable to build command: %s" % to_text(e)) return False try: cb = 'minimal' # FIXME: make callbacks configurable # now create a task queue manager to execute the play self._tqm = None try: self._tqm = TaskQueueManager( inventory=self.inventory, variable_manager=self.variable_manager, loader=self.loader, passwords=self.passwords, stdout_callback=cb, run_additional_callbacks=C.DEFAULT_LOAD_CALLBACK_PLUGINS, run_tree=False, forks=self.forks, ) result = self._tqm.run(play) finally: if self._tqm: self._tqm.cleanup() if self.loader: self.loader.cleanup_all_tmp_files() if result is None: display.error("No hosts found") return False except KeyboardInterrupt: display.error('User interrupted execution') return False except Exception as e: display.error(to_text(e)) # FIXME: add traceback in very very verbose mode return False def emptyline(self): return def do_shell(self, arg): """ You can run shell commands through the shell module. eg.: shell ps uax | grep java | wc -l shell killall python shell halt -n You can use the ! to force the shell module. eg.: !ps aux | grep java | wc -l """ self.default(arg, True) def do_forks(self, arg): """Set the number of forks""" if not arg: display.display('Usage: forks ') return forks = int(arg) if forks <= 0: display.display('forks must be greater than or equal to 1') return self.forks = forks self.set_prompt() do_serial = do_forks def do_verbosity(self, arg): """Set verbosity level""" if not arg: display.display('Usage: verbosity ') else: try: display.verbosity = int(arg) display.v('verbosity level set to %s' % arg) except (TypeError, ValueError) as e: display.error('The verbosity must be a valid integer: %s' % to_text(e)) def do_cd(self, arg): """ Change active host/group. You can use hosts patterns as well eg.: cd webservers cd webservers:dbservers cd webservers:!phoenix cd webservers:&staging cd webservers:dbservers:&staging:!phoenix """ if not arg: self.cwd = '*' elif arg in '/*': self.cwd = 'all' elif self.inventory.get_hosts(arg): self.cwd = arg else: display.display("no host matched") self.set_prompt() def do_list(self, arg): """List the hosts in the current group""" if arg == 'groups': for group in self.groups: display.display(group) else: for host in self.selected: display.display(host.name) def do_become(self, arg): """Toggle whether plays run with become""" if arg: self.become = boolean(arg, strict=False) display.v("become changed to %s" % self.become) self.set_prompt() else: display.display("Please specify become value, e.g. `become yes`") def do_remote_user(self, arg): """Given a username, set the remote user plays are run by""" if arg: self.remote_user = arg self.set_prompt() else: display.display("Please specify a remote user, e.g. `remote_user root`") def do_become_user(self, arg): """Given a username, set the user that plays are run by when using become""" if arg: self.become_user = arg else: display.display("Please specify a user, e.g. `become_user jenkins`") display.v("Current user is %s" % self.become_user) self.set_prompt() def do_become_method(self, arg): """Given a become_method, set the privilege escalation method when using become""" if arg: self.become_method = arg display.v("become_method changed to %s" % self.become_method) else: display.display("Please specify a become_method, e.g. `become_method su`") display.v("Current become_method is %s" % self.become_method) def do_check(self, arg): """Toggle whether plays run with check mode""" if arg: self.check_mode = boolean(arg, strict=False) display.display("check mode changed to %s" % self.check_mode) else: display.display("Please specify check mode value, e.g. `check yes`") display.v("check mode is currently %s." % self.check_mode) def do_diff(self, arg): """Toggle whether plays run with diff""" if arg: self.diff = boolean(arg, strict=False) display.display("diff mode changed to %s" % self.diff) else: display.display("Please specify a diff value , e.g. `diff yes`") display.v("diff mode is currently %s" % self.diff) def do_timeout(self, arg): """Set the timeout""" if arg: try: timeout = int(arg) if timeout < 0: display.error('The timeout must be greater than or equal to 1, use 0 to disable') else: self.task_timeout = timeout except (TypeError, ValueError) as e: display.error('The timeout must be a valid positive integer, or 0 to disable: %s' % to_text(e)) else: display.display('Usage: timeout ') def do_exit(self, args): """Exits from the console""" sys.stdout.write('\nAnsible-console was exited.\n') return -1 do_EOF = do_exit def helpdefault(self, module_name): if module_name in self.modules: in_path = module_loader.find_plugin(module_name) if in_path: oc, a, _, _ = plugin_docs.get_docstring(in_path, fragment_loader) if oc: display.display(oc['short_description']) display.display('Parameters:') for opt in oc['options'].keys(): display.display(' ' + stringc(opt, self.NORMAL_PROMPT) + ' ' + oc['options'][opt]['description'][0]) else: display.error('No documentation found for %s.' % module_name) else: display.error('%s is not a valid command, use ? to list all valid commands.' % module_name) def complete_cd(self, text, line, begidx, endidx): mline = line.partition(' ')[2] offs = len(mline) - len(text) if self.cwd in ('all', '*', '\\'): completions = self.hosts + self.groups else: completions = [x.name for x in self.inventory.list_hosts(self.cwd)] return [to_native(s)[offs:] for s in completions if to_native(s).startswith(to_native(mline))] def completedefault(self, text, line, begidx, endidx): if line.split()[0] in self.modules: mline = line.split(' ')[-1] offs = len(mline) - len(text) completions = self.module_args(line.split()[0]) return [s[offs:] + '=' for s in completions if s.startswith(mline)] def module_args(self, module_name): in_path = module_loader.find_plugin(module_name) oc, a, _, _ = plugin_docs.get_docstring(in_path, fragment_loader, is_module=True) return list(oc['options'].keys()) def run(self): super(ConsoleCLI, self).run() sshpass = None becomepass = None # hosts self.pattern = context.CLIARGS['pattern'] self.cwd = self.pattern # Defaults from the command line self.remote_user = context.CLIARGS['remote_user'] self.become = context.CLIARGS['become'] self.become_user = context.CLIARGS['become_user'] self.become_method = context.CLIARGS['become_method'] self.check_mode = context.CLIARGS['check'] self.diff = context.CLIARGS['diff'] self.forks = context.CLIARGS['forks'] self.task_timeout = context.CLIARGS['task_timeout'] # dynamically add modules as commands self.modules = self.list_modules() for module in self.modules: setattr(self, 'do_' + module, lambda arg, module=module: self.default(module + ' ' + arg)) setattr(self, 'help_' + module, lambda module=module: self.helpdefault(module)) (sshpass, becomepass) = self.ask_passwords() self.passwords = {'conn_pass': sshpass, 'become_pass': becomepass} self.loader, self.inventory, self.variable_manager = self._play_prereqs() hosts = self.get_host_list(self.inventory, context.CLIARGS['subset'], self.pattern) self.groups = self.inventory.list_groups() self.hosts = [x.name for x in hosts] # This hack is to work around readline issues on a mac: # http://stackoverflow.com/a/7116997/541202 if 'libedit' in readline.__doc__: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") histfile = os.path.join(os.path.expanduser("~"), ".ansible-console_history") try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) self.set_prompt() self.cmdloop() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.546556 ansible-core-2.12.0/lib/ansible/cli/doc.py0000644000000000000000000016362200000000000020161 0ustar00rootroot00000000000000# Copyright: (c) 2014, James Tanner # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import datetime import json import pkgutil import os import os.path import re import textwrap import traceback import yaml import ansible.plugins.loader as plugin_loader from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.collections.list import list_collection_dirs from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError from ansible.module_utils._text import to_native, to_text from ansible.module_utils.common._collections_compat import Container, Sequence from ansible.module_utils.common.json import AnsibleJSONEncoder from ansible.module_utils.common.yaml import yaml_dump from ansible.module_utils.compat import importlib from ansible.module_utils.six import iteritems, string_types from ansible.parsing.plugin_docs import read_docstub from ansible.parsing.utils.yaml import from_yaml from ansible.parsing.yaml.dumper import AnsibleDumper from ansible.plugins.loader import action_loader, fragment_loader from ansible.utils.collection_loader import AnsibleCollectionConfig, AnsibleCollectionRef from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path from ansible.utils.display import Display from ansible.utils.plugin_docs import ( REJECTLIST, remove_current_collection_from_versions_and_dates, get_docstring, get_versioned_doclink, ) display = Display() TARGET_OPTIONS = C.DOCUMENTABLE_PLUGINS + ('role', 'keyword',) PB_OBJECTS = ['Play', 'Role', 'Block', 'Task'] PB_LOADED = {} SNIPPETS = ['inventory', 'lookup', 'module'] def jdump(text): try: display.display(json.dumps(text, cls=AnsibleJSONEncoder, sort_keys=True, indent=4)) except TypeError as e: display.vvv(traceback.format_exc()) raise AnsibleError('We could not convert all the documentation into JSON as there was a conversion issue: %s' % to_native(e)) def add_collection_plugins(plugin_list, plugin_type, coll_filter=None): # TODO: take into account runtime.yml once implemented b_colldirs = list_collection_dirs(coll_filter=coll_filter) for b_path in b_colldirs: path = to_text(b_path, errors='surrogate_or_strict') collname = _get_collection_name_from_path(b_path) ptype = C.COLLECTION_PTYPE_COMPAT.get(plugin_type, plugin_type) plugin_list.update(DocCLI.find_plugins(os.path.join(path, 'plugins', ptype), False, plugin_type, collection=collname)) class PluginNotFound(Exception): pass class RoleMixin(object): """A mixin containing all methods relevant to role argument specification functionality. Note: The methods for actual display of role data are not present here. """ # Potential locations of the role arg spec file in the meta subdir, with main.yml # having the lowest priority. ROLE_ARGSPEC_FILES = ['argument_specs' + e for e in C.YAML_FILENAME_EXTENSIONS] + ["main" + e for e in C.YAML_FILENAME_EXTENSIONS] def _load_argspec(self, role_name, collection_path=None, role_path=None): """Load the role argument spec data from the source file. :param str role_name: The name of the role for which we want the argspec data. :param str collection_path: Path to the collection containing the role. This will be None for standard roles. :param str role_path: Path to the standard role. This will be None for collection roles. We support two files containing the role arg spec data: either meta/main.yml or meta/argument_spec.yml. The argument_spec.yml file will take precedence over the meta/main.yml file, if it exists. Data is NOT combined between the two files. :returns: A dict of all data underneath the ``argument_specs`` top-level YAML key in the argspec data file. Empty dict is returned if there is no data. """ if collection_path: meta_path = os.path.join(collection_path, 'roles', role_name, 'meta') elif role_path: meta_path = os.path.join(role_path, 'meta') else: raise AnsibleError("A path is required to load argument specs for role '%s'" % role_name) path = None # Check all potential spec files for specfile in self.ROLE_ARGSPEC_FILES: full_path = os.path.join(meta_path, specfile) if os.path.exists(full_path): path = full_path break if path is None: return {} try: with open(path, 'r') as f: data = from_yaml(f.read(), file_name=path) if data is None: data = {} return data.get('argument_specs', {}) except (IOError, OSError) as e: raise AnsibleParserError("An error occurred while trying to read the file '%s': %s" % (path, to_native(e)), orig_exc=e) def _find_all_normal_roles(self, role_paths, name_filters=None): """Find all non-collection roles that have an argument spec file. Note that argument specs do not actually need to exist within the spec file. :param role_paths: A tuple of one or more role paths. When a role with the same name is found in multiple paths, only the first-found role is returned. :param name_filters: A tuple of one or more role names used to filter the results. :returns: A set of tuples consisting of: role name, full role path """ found = set() found_names = set() for path in role_paths: if not os.path.isdir(path): continue # Check each subdir for an argument spec file for entry in os.listdir(path): role_path = os.path.join(path, entry) # Check all potential spec files for specfile in self.ROLE_ARGSPEC_FILES: full_path = os.path.join(role_path, 'meta', specfile) if os.path.exists(full_path): if name_filters is None or entry in name_filters: if entry not in found_names: found.add((entry, role_path)) found_names.add(entry) # select first-found break return found def _find_all_collection_roles(self, name_filters=None, collection_filter=None): """Find all collection roles with an argument spec file. Note that argument specs do not actually need to exist within the spec file. :param name_filters: A tuple of one or more role names used to filter the results. These might be fully qualified with the collection name (e.g., community.general.roleA) or not (e.g., roleA). :param collection_filter: A string containing the FQCN of a collection which will be used to limit results. This filter will take precedence over the name_filters. :returns: A set of tuples consisting of: role name, collection name, collection path """ found = set() b_colldirs = list_collection_dirs(coll_filter=collection_filter) for b_path in b_colldirs: path = to_text(b_path, errors='surrogate_or_strict') collname = _get_collection_name_from_path(b_path) roles_dir = os.path.join(path, 'roles') if os.path.exists(roles_dir): for entry in os.listdir(roles_dir): # Check all potential spec files for specfile in self.ROLE_ARGSPEC_FILES: full_path = os.path.join(roles_dir, entry, 'meta', specfile) if os.path.exists(full_path): if name_filters is None: found.add((entry, collname, path)) else: # Name filters might contain a collection FQCN or not. for fqcn in name_filters: if len(fqcn.split('.')) == 3: (ns, col, role) = fqcn.split('.') if '.'.join([ns, col]) == collname and entry == role: found.add((entry, collname, path)) elif fqcn == entry: found.add((entry, collname, path)) break return found def _build_summary(self, role, collection, argspec): """Build a summary dict for a role. Returns a simplified role arg spec containing only the role entry points and their short descriptions, and the role collection name (if applicable). :param role: The simple role name. :param collection: The collection containing the role (None or empty string if N/A). :param argspec: The complete role argspec data dict. :returns: A tuple with the FQCN role name and a summary dict. """ if collection: fqcn = '.'.join([collection, role]) else: fqcn = role summary = {} summary['collection'] = collection summary['entry_points'] = {} for ep in argspec.keys(): entry_spec = argspec[ep] or {} summary['entry_points'][ep] = entry_spec.get('short_description', '') return (fqcn, summary) def _build_doc(self, role, path, collection, argspec, entry_point): if collection: fqcn = '.'.join([collection, role]) else: fqcn = role doc = {} doc['path'] = path doc['collection'] = collection doc['entry_points'] = {} for ep in argspec.keys(): if entry_point is None or ep == entry_point: entry_spec = argspec[ep] or {} doc['entry_points'][ep] = entry_spec # If we didn't add any entry points (b/c of filtering), ignore this entry. if len(doc['entry_points'].keys()) == 0: doc = None return (fqcn, doc) def _create_role_list(self, roles_path, collection_filter=None): """Return a dict describing the listing of all roles with arg specs. :param role_paths: A tuple of one or more role paths. :returns: A dict indexed by role name, with 'collection' and 'entry_points' keys per role. Example return: results = { 'roleA': { 'collection': '', 'entry_points': { 'main': 'Short description for main' } }, 'a.b.c.roleB': { 'collection': 'a.b.c', 'entry_points': { 'main': 'Short description for main', 'alternate': 'Short description for alternate entry point' } 'x.y.z.roleB': { 'collection': 'x.y.z', 'entry_points': { 'main': 'Short description for main', } }, } """ if not collection_filter: roles = self._find_all_normal_roles(roles_path) else: roles = [] collroles = self._find_all_collection_roles(collection_filter=collection_filter) result = {} for role, role_path in roles: argspec = self._load_argspec(role, role_path=role_path) fqcn, summary = self._build_summary(role, '', argspec) result[fqcn] = summary for role, collection, collection_path in collroles: argspec = self._load_argspec(role, collection_path=collection_path) fqcn, summary = self._build_summary(role, collection, argspec) result[fqcn] = summary return result def _create_role_doc(self, role_names, roles_path, entry_point=None): """ :param role_names: A tuple of one or more role names. :param role_paths: A tuple of one or more role paths. :param entry_point: A role entry point name for filtering. :returns: A dict indexed by role name, with 'collection', 'entry_points', and 'path' keys per role. """ roles = self._find_all_normal_roles(roles_path, name_filters=role_names) collroles = self._find_all_collection_roles(name_filters=role_names) result = {} for role, role_path in roles: argspec = self._load_argspec(role, role_path=role_path) fqcn, doc = self._build_doc(role, role_path, '', argspec, entry_point) if doc: result[fqcn] = doc for role, collection, collection_path in collroles: argspec = self._load_argspec(role, collection_path=collection_path) fqcn, doc = self._build_doc(role, collection_path, collection, argspec, entry_point) if doc: result[fqcn] = doc return result class DocCLI(CLI, RoleMixin): ''' displays information on modules installed in Ansible libraries. It displays a terse listing of plugins and their short descriptions, provides a printout of their DOCUMENTATION strings, and it can create a short "snippet" which can be pasted into a playbook. ''' # default ignore list for detailed views IGNORE = ('module', 'docuri', 'version_added', 'short_description', 'now_date', 'plainexamples', 'returndocs', 'collection') # Warning: If you add more elements here, you also need to add it to the docsite build (in the # ansible-community/antsibull repo) _ITALIC = re.compile(r"\bI\(([^)]+)\)") _BOLD = re.compile(r"\bB\(([^)]+)\)") _MODULE = re.compile(r"\bM\(([^)]+)\)") _LINK = re.compile(r"\bL\(([^)]+), *([^)]+)\)") _URL = re.compile(r"\bU\(([^)]+)\)") _REF = re.compile(r"\bR\(([^)]+), *([^)]+)\)") _CONST = re.compile(r"\bC\(([^)]+)\)") _RULER = re.compile(r"\bHORIZONTALLINE\b") # rst specific _RST_NOTE = re.compile(r".. note::") _RST_SEEALSO = re.compile(r".. seealso::") _RST_ROLES = re.compile(r":\w+?:`") _RST_DIRECTIVES = re.compile(r".. \w+?::") def __init__(self, args): super(DocCLI, self).__init__(args) self.plugin_list = set() @classmethod def tty_ify(cls, text): # general formatting t = cls._ITALIC.sub(r"`\1'", text) # I(word) => `word' t = cls._BOLD.sub(r"*\1*", t) # B(word) => *word* t = cls._MODULE.sub("[" + r"\1" + "]", t) # M(word) => [word] t = cls._URL.sub(r"\1", t) # U(word) => word t = cls._LINK.sub(r"\1 <\2>", t) # L(word, url) => word t = cls._REF.sub(r"\1", t) # R(word, sphinx-ref) => word t = cls._CONST.sub(r"`\1'", t) # C(word) => `word' t = cls._RULER.sub("\n{0}\n".format("-" * 13), t) # HORIZONTALLINE => ------- # remove rst t = cls._RST_SEEALSO.sub(r"See website for:", t) # seealso is special and need to break t = cls._RST_NOTE.sub(r"Note:", t) # .. note:: to note: t = cls._RST_ROLES.sub(r"website for `", t) # remove :ref: and other tags t = cls._RST_DIRECTIVES.sub(r"", t) # remove .. stuff:: in general return t def init_parser(self): coll_filter = 'A supplied argument will be used for filtering, can be a namespace or full collection name.' super(DocCLI, self).init_parser( desc="plugin documentation tool", epilog="See man pages for Ansible CLI options or website for tutorials https://docs.ansible.com" ) opt_help.add_module_options(self.parser) opt_help.add_basedir_options(self.parser) # targets self.parser.add_argument('args', nargs='*', help='Plugin', metavar='plugin') self.parser.add_argument("-t", "--type", action="store", default='module', dest='type', help='Choose which plugin type (defaults to "module"). ' 'Available plugin types are : {0}'.format(TARGET_OPTIONS), choices=TARGET_OPTIONS) # formatting self.parser.add_argument("-j", "--json", action="store_true", default=False, dest='json_format', help='Change output into json format.') # TODO: warn if not used with -t roles # role-specific options self.parser.add_argument("-r", "--roles-path", dest='roles_path', default=C.DEFAULT_ROLES_PATH, type=opt_help.unfrack_path(pathsep=True), action=opt_help.PrependListAction, help='The path to the directory containing your roles.') # modifiers exclusive = self.parser.add_mutually_exclusive_group() # TODO: warn if not used with -t roles exclusive.add_argument("-e", "--entry-point", dest="entry_point", help="Select the entry point for role(s).") # TODO: warn with --json as it is incompatible exclusive.add_argument("-s", "--snippet", action="store_true", default=False, dest='show_snippet', help='Show playbook snippet for these plugin types: %s' % ', '.join(SNIPPETS)) # TODO: warn when arg/plugin is passed exclusive.add_argument("-F", "--list_files", action="store_true", default=False, dest="list_files", help='Show plugin names and their source files without summaries (implies --list). %s' % coll_filter) exclusive.add_argument("-l", "--list", action="store_true", default=False, dest='list_dir', help='List available plugins. %s' % coll_filter) exclusive.add_argument("--metadata-dump", action="store_true", default=False, dest='dump', help='**For internal testing only** Dump json metadata for all plugins.') def post_process_args(self, options): options = super(DocCLI, self).post_process_args(options) display.verbosity = options.verbosity return options def display_plugin_list(self, results): # format for user displace = max(len(x) for x in self.plugin_list) linelimit = display.columns - displace - 5 text = [] # format display per option if context.CLIARGS['list_files']: # list plugin file names for plugin in results.keys(): filename = results[plugin] text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(filename), filename)) else: # list plugin names and short desc deprecated = [] for plugin in results.keys(): desc = DocCLI.tty_ify(results[plugin]) if len(desc) > linelimit: desc = desc[:linelimit] + '...' if plugin.startswith('_'): # Handle deprecated # TODO: add mark for deprecated collection plugins deprecated.append("%-*s %-*.*s" % (displace, plugin[1:], linelimit, len(desc), desc)) else: text.append("%-*s %-*.*s" % (displace, plugin, linelimit, len(desc), desc)) if len(deprecated) > 0: text.append("\nDEPRECATED:") text.extend(deprecated) # display results DocCLI.pager("\n".join(text)) def _display_available_roles(self, list_json): """Display all roles we can find with a valid argument specification. Output is: fqcn role name, entry point, short description """ roles = list(list_json.keys()) entry_point_names = set() for role in roles: for entry_point in list_json[role]['entry_points'].keys(): entry_point_names.add(entry_point) max_role_len = 0 max_ep_len = 0 if roles: max_role_len = max(len(x) for x in roles) if entry_point_names: max_ep_len = max(len(x) for x in entry_point_names) linelimit = display.columns - max_role_len - max_ep_len - 5 text = [] for role in sorted(roles): for entry_point, desc in iteritems(list_json[role]['entry_points']): if len(desc) > linelimit: desc = desc[:linelimit] + '...' text.append("%-*s %-*s %s" % (max_role_len, role, max_ep_len, entry_point, desc)) # display results DocCLI.pager("\n".join(text)) def _display_role_doc(self, role_json): roles = list(role_json.keys()) text = [] for role in roles: text += self.get_role_man_text(role, role_json[role]) # display results DocCLI.pager("\n".join(text)) @staticmethod def _list_keywords(): return from_yaml(pkgutil.get_data('ansible', 'keyword_desc.yml')) @staticmethod def _get_keywords_docs(keys): data = {} descs = DocCLI._list_keywords() for key in keys: if key.startswith('with_'): # simplify loops, dont want to handle every with_ combo keyword = 'loop' elif key == 'async': # cause async became reserved in python we had to rename internally keyword = 'async_val' else: keyword = key try: # if no desc, typeerror raised ends this block kdata = {'description': descs[key]} # get playbook objects for keyword and use first to get keyword attributes kdata['applies_to'] = [] for pobj in PB_OBJECTS: if pobj not in PB_LOADED: obj_class = 'ansible.playbook.%s' % pobj.lower() loaded_class = importlib.import_module(obj_class) PB_LOADED[pobj] = getattr(loaded_class, pobj, None) if keyword in PB_LOADED[pobj]._valid_attrs: kdata['applies_to'].append(pobj) # we should only need these once if 'type' not in kdata: fa = getattr(PB_LOADED[pobj], '_%s' % keyword) if getattr(fa, 'private'): kdata = {} raise KeyError kdata['type'] = getattr(fa, 'isa', 'string') if keyword.endswith('when'): kdata['template'] = 'implicit' elif getattr(fa, 'static'): kdata['template'] = 'static' else: kdata['template'] = 'explicit' # those that require no processing for visible in ('alias', 'priority'): kdata[visible] = getattr(fa, visible) # remove None keys for k in list(kdata.keys()): if kdata[k] is None: del kdata[k] data[key] = kdata except (AttributeError, KeyError) as e: display.warning("Skipping Invalid keyword '%s' specified: %s" % (key, to_text(e))) if display.verbosity >= 3: display.verbose(traceback.format_exc()) return data def _list_plugins(self, plugin_type, loader): results = {} coll_filter = None if len(context.CLIARGS['args']) == 1: coll_filter = context.CLIARGS['args'][0] if coll_filter in ('', None): paths = loader._get_paths_with_context() for path_context in paths: self.plugin_list.update(DocCLI.find_plugins(path_context.path, path_context.internal, plugin_type)) add_collection_plugins(self.plugin_list, plugin_type, coll_filter=coll_filter) # get appropriate content depending on option if context.CLIARGS['list_dir']: results = self._get_plugin_list_descriptions(loader) elif context.CLIARGS['list_files']: results = self._get_plugin_list_filenames(loader) # dump plugin desc/data as JSON elif context.CLIARGS['dump']: plugin_names = DocCLI.get_all_plugins_of_type(plugin_type) for plugin_name in plugin_names: plugin_info = DocCLI.get_plugin_metadata(plugin_type, plugin_name) if plugin_info is not None: results[plugin_name] = plugin_info return results def _get_plugins_docs(self, plugin_type, loader): search_paths = DocCLI.print_paths(loader) # display specific plugin docs if len(context.CLIARGS['args']) == 0: raise AnsibleOptionsError("Incorrect options passed") # get the docs for plugins in the command line list plugin_docs = {} for plugin in context.CLIARGS['args']: try: doc, plainexamples, returndocs, metadata = DocCLI._get_plugin_doc(plugin, plugin_type, loader, search_paths) except PluginNotFound: display.warning("%s %s not found in:\n%s\n" % (plugin_type, plugin, search_paths)) continue except Exception as e: display.vvv(traceback.format_exc()) raise AnsibleError("%s %s missing documentation (or could not parse" " documentation): %s\n" % (plugin_type, plugin, to_native(e))) if not doc: # The doc section existed but was empty continue plugin_docs[plugin] = DocCLI._combine_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata) return plugin_docs def run(self): super(DocCLI, self).run() basedir = context.CLIARGS['basedir'] plugin_type = context.CLIARGS['type'] do_json = context.CLIARGS['json_format'] or context.CLIARGS['dump'] roles_path = context.CLIARGS['roles_path'] listing = context.CLIARGS['list_files'] or context.CLIARGS['list_dir'] or context.CLIARGS['dump'] docs = {} if basedir: AnsibleCollectionConfig.playbook_paths = basedir # Add any 'roles' subdir in playbook dir to the roles search path. # And as a last resort, add the playbook dir itself. Order being: # - 'roles' subdir of playbook dir # - DEFAULT_ROLES_PATH # - playbook dir # NOTE: This matches logic in RoleDefinition._load_role_path() method. subdir = os.path.join(basedir, "roles") if os.path.isdir(subdir): roles_path = (subdir,) + roles_path roles_path = roles_path + (basedir,) if plugin_type not in TARGET_OPTIONS: raise AnsibleOptionsError("Unknown or undocumentable plugin type: %s" % plugin_type) elif plugin_type == 'keyword': if context.CLIARGS['dump']: keys = DocCLI._list_keywords() docs = DocCLI._get_keywords_docs(keys.keys()) elif listing: docs = DocCLI._list_keywords() else: docs = DocCLI._get_keywords_docs(context.CLIARGS['args']) elif plugin_type == 'role': if context.CLIARGS['list_dir']: # If an argument was given with --list, it is a collection filter coll_filter = None if len(context.CLIARGS['args']) == 1: coll_filter = context.CLIARGS['args'][0] if not AnsibleCollectionRef.is_valid_collection_name(coll_filter): raise AnsibleError('Invalid collection name (must be of the form namespace.collection): {0}'.format(coll_filter)) elif len(context.CLIARGS['args']) > 1: raise AnsibleOptionsError("Only a single collection filter is supported.") docs = self._create_role_list(roles_path, collection_filter=coll_filter) else: docs = self._create_role_doc(context.CLIARGS['args'], roles_path, context.CLIARGS['entry_point']) else: loader = getattr(plugin_loader, '%s_loader' % plugin_type) # add to plugin paths from command line basedir = context.CLIARGS['basedir'] if basedir: AnsibleCollectionConfig.playbook_paths = basedir loader.add_directory(basedir, with_subdir=True) if context.CLIARGS['module_path']: for path in context.CLIARGS['module_path']: if path: loader.add_directory(path) # save only top level paths for errors loader._paths = None # reset so we can use subdirs below if listing: docs = self._list_plugins(plugin_type, loader) else: docs = self._get_plugins_docs(plugin_type, loader) if do_json: jdump(docs) else: text = [] if plugin_type in C.DOCUMENTABLE_PLUGINS: if listing and docs: self.display_plugin_list(docs) elif context.CLIARGS['show_snippet']: if plugin_type not in SNIPPETS: raise AnsibleError('Snippets are only available for the following plugin' ' types: %s' % ', '.join(SNIPPETS)) for plugin, doc_data in docs.items(): try: textret = DocCLI.format_snippet(plugin, plugin_type, doc_data['doc']) except ValueError as e: display.warning("Unable to construct a snippet for" " '{0}': {1}".format(plugin, to_text(e))) else: text.append(textret) else: # Some changes to how plain text docs are formatted for plugin, doc_data in docs.items(): textret = DocCLI.format_plugin_doc(plugin, plugin_type, doc_data['doc'], doc_data['examples'], doc_data['return'], doc_data['metadata']) if textret: text.append(textret) else: display.warning("No valid documentation was retrieved from '%s'" % plugin) elif plugin_type == 'role': if context.CLIARGS['list_dir'] and docs: self._display_available_roles(docs) elif docs: self._display_role_doc(docs) elif docs: text = DocCLI._dump_yaml(docs, '') if text: DocCLI.pager(''.join(text)) return 0 @staticmethod def get_all_plugins_of_type(plugin_type): loader = getattr(plugin_loader, '%s_loader' % plugin_type) plugin_list = set() paths = loader._get_paths_with_context() for path_context in paths: plugins_to_add = DocCLI.find_plugins(path_context.path, path_context.internal, plugin_type) plugin_list.update(plugins_to_add) return sorted(set(plugin_list)) @staticmethod def get_plugin_metadata(plugin_type, plugin_name): # if the plugin lives in a non-python file (eg, win_X.ps1), require the corresponding python file for docs loader = getattr(plugin_loader, '%s_loader' % plugin_type) result = loader.find_plugin_with_context(plugin_name, mod_type='.py', ignore_deprecated=True, check_aliases=True) if not result.resolved: raise AnsibleError("unable to load {0} plugin named {1} ".format(plugin_type, plugin_name)) filename = result.plugin_resolved_path collection_name = result.plugin_resolved_collection try: doc, __, __, __ = get_docstring(filename, fragment_loader, verbose=(context.CLIARGS['verbosity'] > 0), collection_name=collection_name, is_module=(plugin_type == 'module')) except Exception: display.vvv(traceback.format_exc()) raise AnsibleError("%s %s at %s has a documentation formatting error or is missing documentation." % (plugin_type, plugin_name, filename)) if doc is None: # Removed plugins don't have any documentation return None return dict( name=plugin_name, namespace=DocCLI.namespace_from_plugin_filepath(filename, plugin_name, loader.package_path), description=doc.get('short_description', "UNKNOWN"), version_added=doc.get('version_added', "UNKNOWN") ) @staticmethod def namespace_from_plugin_filepath(filepath, plugin_name, basedir): if not basedir.endswith('/'): basedir += '/' rel_path = filepath.replace(basedir, '') extension_free = os.path.splitext(rel_path)[0] namespace_only = extension_free.rsplit(plugin_name, 1)[0].strip('/_') clean_ns = namespace_only.replace('/', '.') if clean_ns == '': clean_ns = None return clean_ns @staticmethod def _get_plugin_doc(plugin, plugin_type, loader, search_paths): # if the plugin lives in a non-python file (eg, win_X.ps1), require the corresponding python file for docs result = loader.find_plugin_with_context(plugin, mod_type='.py', ignore_deprecated=True, check_aliases=True) if not result.resolved: raise PluginNotFound('%s was not found in %s' % (plugin, search_paths)) filename = result.plugin_resolved_path collection_name = result.plugin_resolved_collection doc, plainexamples, returndocs, metadata = get_docstring( filename, fragment_loader, verbose=(context.CLIARGS['verbosity'] > 0), collection_name=collection_name, is_module=(plugin_type == 'module')) # If the plugin existed but did not have a DOCUMENTATION element and was not removed, it's an error if doc is None: raise ValueError('%s did not contain a DOCUMENTATION attribute' % plugin) doc['filename'] = filename doc['collection'] = collection_name return doc, plainexamples, returndocs, metadata @staticmethod def _combine_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata): # generate extra data if plugin_type == 'module': # is there corresponding action plugin? if plugin in action_loader: doc['has_action'] = True else: doc['has_action'] = False # return everything as one dictionary return {'doc': doc, 'examples': plainexamples, 'return': returndocs, 'metadata': metadata} @staticmethod def format_snippet(plugin, plugin_type, doc): ''' return heavily commented plugin use to insert into play ''' if plugin_type == 'inventory' and doc.get('options', {}).get('plugin'): # these do not take a yaml config that we can write a snippet for raise ValueError('The {0} inventory plugin does not take YAML type config source' ' that can be used with the "auto" plugin so a snippet cannot be' ' created.'.format(plugin)) text = [] if plugin_type == 'lookup': text = _do_lookup_snippet(doc) elif 'options' in doc: text = _do_yaml_snippet(doc) text.append('') return "\n".join(text) @staticmethod def format_plugin_doc(plugin, plugin_type, doc, plainexamples, returndocs, metadata): collection_name = doc['collection'] # TODO: do we really want this? # add_collection_to_versions_and_dates(doc, '(unknown)', is_module=(plugin_type == 'module')) # remove_current_collection_from_versions_and_dates(doc, collection_name, is_module=(plugin_type == 'module')) # remove_current_collection_from_versions_and_dates( # returndocs, collection_name, is_module=(plugin_type == 'module'), return_docs=True) # assign from other sections doc['plainexamples'] = plainexamples doc['returndocs'] = returndocs doc['metadata'] = metadata try: text = DocCLI.get_man_text(doc, collection_name, plugin_type) except Exception as e: display.vvv(traceback.format_exc()) raise AnsibleError("Unable to retrieve documentation from '%s' due to: %s" % (plugin, to_native(e)), orig_exc=e) return text @staticmethod def find_plugins(path, internal, ptype, collection=None): # if internal, collection could be set to `ansible.builtin` display.vvvv("Searching %s for plugins" % path) plugin_list = set() if not os.path.exists(path): display.vvvv("%s does not exist" % path) return plugin_list if not os.path.isdir(path): display.vvvv("%s is not a directory" % path) return plugin_list bkey = ptype.upper() for plugin in os.listdir(path): display.vvvv("Found %s" % plugin) full_path = '/'.join([path, plugin]) if plugin.startswith('.'): continue elif os.path.isdir(full_path): continue elif any(plugin.endswith(x) for x in C.REJECT_EXTS): continue elif plugin.startswith('__'): continue elif plugin in C.IGNORE_FILES: continue elif plugin .startswith('_'): if os.path.islink(full_path): # avoids aliases continue plugin = os.path.splitext(plugin)[0] # removes the extension plugin = plugin.lstrip('_') # remove underscore from deprecated plugins if plugin not in REJECTLIST.get(bkey, ()): if collection: plugin = '%s.%s' % (collection, plugin) plugin_list.add(plugin) display.vvvv("Added %s" % plugin) return plugin_list def _get_plugin_list_descriptions(self, loader): descs = {} plugins = self._get_plugin_list_filenames(loader) for plugin in plugins.keys(): filename = plugins[plugin] doc = None try: doc = read_docstub(filename) except Exception: display.warning("%s has a documentation formatting error" % plugin) continue if not doc or not isinstance(doc, dict): desc = 'UNDOCUMENTED' else: desc = doc.get('short_description', 'INVALID SHORT DESCRIPTION').strip() descs[plugin] = desc return descs def _get_plugin_list_filenames(self, loader): pfiles = {} for plugin in sorted(self.plugin_list): try: # if the module lives in a non-python file (eg, win_X.ps1), require the corresponding python file for docs filename = loader.find_plugin(plugin, mod_type='.py', ignore_deprecated=True, check_aliases=True) if filename is None: continue if filename.endswith(".ps1"): continue if os.path.isdir(filename): continue pfiles[plugin] = filename except Exception as e: display.vvv(traceback.format_exc()) raise AnsibleError("Failed reading docs at %s: %s" % (plugin, to_native(e)), orig_exc=e) return pfiles @staticmethod def print_paths(finder): ''' Returns a string suitable for printing of the search path ''' # Uses a list to get the order right ret = [] for i in finder._get_paths(subdirs=False): i = to_text(i, errors='surrogate_or_strict') if i not in ret: ret.append(i) return os.pathsep.join(ret) @staticmethod def _dump_yaml(struct, indent): return DocCLI.tty_ify('\n'.join([indent + line for line in yaml.dump(struct, default_flow_style=False, Dumper=AnsibleDumper).split('\n')])) @staticmethod def _format_version_added(version_added, version_added_collection=None): if version_added_collection == 'ansible.builtin': version_added_collection = 'ansible-core' # In ansible-core, version_added can be 'historical' if version_added == 'historical': return 'historical' if version_added_collection: version_added = '%s of %s' % (version_added, version_added_collection) return 'version %s' % (version_added, ) @staticmethod def add_fields(text, fields, limit, opt_indent, return_values=False, base_indent=''): for o in sorted(fields): # Create a copy so we don't modify the original (in case YAML anchors have been used) opt = dict(fields[o]) required = opt.pop('required', False) if not isinstance(required, bool): raise AnsibleError("Incorrect value for 'Required', a boolean is needed.: %s" % required) if required: opt_leadin = "=" else: opt_leadin = "-" text.append("%s%s %s" % (base_indent, opt_leadin, o)) if 'description' not in opt: raise AnsibleError("All (sub-)options and return values must have a 'description' field") if isinstance(opt['description'], list): for entry_idx, entry in enumerate(opt['description'], 1): if not isinstance(entry, string_types): raise AnsibleError("Expected string in description of %s at index %s, got %s" % (o, entry_idx, type(entry))) text.append(textwrap.fill(DocCLI.tty_ify(entry), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) else: if not isinstance(opt['description'], string_types): raise AnsibleError("Expected string in description of %s, got %s" % (o, type(opt['description']))) text.append(textwrap.fill(DocCLI.tty_ify(opt['description']), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) del opt['description'] aliases = '' if 'aliases' in opt: if len(opt['aliases']) > 0: aliases = "(Aliases: " + ", ".join(to_text(i) for i in opt['aliases']) + ")" del opt['aliases'] choices = '' if 'choices' in opt: if len(opt['choices']) > 0: choices = "(Choices: " + ", ".join(to_text(i) for i in opt['choices']) + ")" del opt['choices'] default = '' if not return_values: if 'default' in opt or not required: default = "[Default: %s" % to_text(opt.pop('default', '(null)')) + "]" text.append(textwrap.fill(DocCLI.tty_ify(aliases + choices + default), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) suboptions = [] for subkey in ('options', 'suboptions', 'contains', 'spec'): if subkey in opt: suboptions.append((subkey, opt.pop(subkey))) conf = {} for config in ('env', 'ini', 'yaml', 'vars', 'keywords'): if config in opt and opt[config]: # Create a copy so we don't modify the original (in case YAML anchors have been used) conf[config] = [dict(item) for item in opt.pop(config)] for ignore in DocCLI.IGNORE: for item in conf[config]: if ignore in item: del item[ignore] if 'cli' in opt and opt['cli']: conf['cli'] = [] for cli in opt['cli']: if 'option' not in cli: conf['cli'].append({'name': cli['name'], 'option': '--%s' % cli['name'].replace('_', '-')}) else: conf['cli'].append(cli) del opt['cli'] if conf: text.append(DocCLI._dump_yaml({'set_via': conf}, opt_indent)) version_added = opt.pop('version_added', None) version_added_collection = opt.pop('version_added_collection', None) for k in sorted(opt): if k.startswith('_'): continue if isinstance(opt[k], string_types): text.append('%s%s: %s' % (opt_indent, k, textwrap.fill(DocCLI.tty_ify(opt[k]), limit - (len(k) + 2), subsequent_indent=opt_indent))) elif isinstance(opt[k], (Sequence)) and all(isinstance(x, string_types) for x in opt[k]): text.append(DocCLI.tty_ify('%s%s: %s' % (opt_indent, k, ', '.join(opt[k])))) else: text.append(DocCLI._dump_yaml({k: opt[k]}, opt_indent)) if version_added: text.append("%sadded in: %s\n" % (opt_indent, DocCLI._format_version_added(version_added, version_added_collection))) for subkey, subdata in suboptions: text.append('') text.append("%s%s:\n" % (opt_indent, subkey.upper())) DocCLI.add_fields(text, subdata, limit, opt_indent + ' ', return_values, opt_indent) if not suboptions: text.append('') def get_role_man_text(self, role, role_json): '''Generate text for the supplied role suitable for display. This is similar to get_man_text(), but roles are different enough that we have a separate method for formatting their display. :param role: The role name. :param role_json: The JSON for the given role as returned from _create_role_doc(). :returns: A array of text suitable for displaying to screen. ''' text = [] opt_indent = " " pad = display.columns * 0.20 limit = max(display.columns - int(pad), 70) text.append("> %s (%s)\n" % (role.upper(), role_json.get('path'))) for entry_point in role_json['entry_points']: doc = role_json['entry_points'][entry_point] if doc.get('short_description'): text.append("ENTRY POINT: %s - %s\n" % (entry_point, doc.get('short_description'))) else: text.append("ENTRY POINT: %s\n" % entry_point) if doc.get('description'): if isinstance(doc['description'], list): desc = " ".join(doc['description']) else: desc = doc['description'] text.append("%s\n" % textwrap.fill(DocCLI.tty_ify(desc), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) if doc.get('options'): text.append("OPTIONS (= is mandatory):\n") DocCLI.add_fields(text, doc.pop('options'), limit, opt_indent) text.append('') if doc.get('attributes'): text.append("ATTRIBUTES:\n") text.append(DocCLI._dump_yaml(doc.pop('attributes'), opt_indent)) text.append('') # generic elements we will handle identically for k in ('author',): if k not in doc: continue if isinstance(doc[k], string_types): text.append('%s: %s' % (k.upper(), textwrap.fill(DocCLI.tty_ify(doc[k]), limit - (len(k) + 2), subsequent_indent=opt_indent))) elif isinstance(doc[k], (list, tuple)): text.append('%s: %s' % (k.upper(), ', '.join(doc[k]))) else: # use empty indent since this affects the start of the yaml doc, not it's keys text.append(DocCLI._dump_yaml({k.upper(): doc[k]}, '')) text.append('') return text @staticmethod def get_man_text(doc, collection_name='', plugin_type=''): # Create a copy so we don't modify the original doc = dict(doc) DocCLI.IGNORE = DocCLI.IGNORE + (context.CLIARGS['type'],) opt_indent = " " text = [] pad = display.columns * 0.20 limit = max(display.columns - int(pad), 70) plugin_name = doc.get(context.CLIARGS['type'], doc.get('name')) or doc.get('plugin_type') or plugin_type if collection_name: plugin_name = '%s.%s' % (collection_name, plugin_name) text.append("> %s (%s)\n" % (plugin_name.upper(), doc.pop('filename'))) if isinstance(doc['description'], list): desc = " ".join(doc.pop('description')) else: desc = doc.pop('description') text.append("%s\n" % textwrap.fill(DocCLI.tty_ify(desc), limit, initial_indent=opt_indent, subsequent_indent=opt_indent)) if 'version_added' in doc: version_added = doc.pop('version_added') version_added_collection = doc.pop('version_added_collection', None) text.append("ADDED IN: %s\n" % DocCLI._format_version_added(version_added, version_added_collection)) if doc.get('deprecated', False): text.append("DEPRECATED: \n") if isinstance(doc['deprecated'], dict): if 'removed_at_date' in doc['deprecated']: text.append( "\tReason: %(why)s\n\tWill be removed in a release after %(removed_at_date)s\n\tAlternatives: %(alternative)s" % doc.pop('deprecated') ) else: if 'version' in doc['deprecated'] and 'removed_in' not in doc['deprecated']: doc['deprecated']['removed_in'] = doc['deprecated']['version'] text.append("\tReason: %(why)s\n\tWill be removed in: Ansible %(removed_in)s\n\tAlternatives: %(alternative)s" % doc.pop('deprecated')) else: text.append("%s" % doc.pop('deprecated')) text.append("\n") if doc.pop('has_action', False): text.append(" * note: %s\n" % "This module has a corresponding action plugin.") if doc.get('options', False): text.append("OPTIONS (= is mandatory):\n") DocCLI.add_fields(text, doc.pop('options'), limit, opt_indent) text.append('') if doc.get('attributes', False): text.append("ATTRIBUTES:\n") text.append(DocCLI._dump_yaml(doc.pop('attributes'), opt_indent)) text.append('') if doc.get('notes', False): text.append("NOTES:") for note in doc['notes']: text.append(textwrap.fill(DocCLI.tty_ify(note), limit - 6, initial_indent=opt_indent[:-2] + "* ", subsequent_indent=opt_indent)) text.append('') text.append('') del doc['notes'] if doc.get('seealso', False): text.append("SEE ALSO:") for item in doc['seealso']: if 'module' in item: text.append(textwrap.fill(DocCLI.tty_ify('Module %s' % item['module']), limit - 6, initial_indent=opt_indent[:-2] + "* ", subsequent_indent=opt_indent)) description = item.get('description', 'The official documentation on the %s module.' % item['module']) text.append(textwrap.fill(DocCLI.tty_ify(description), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent + ' ')) text.append(textwrap.fill(DocCLI.tty_ify(get_versioned_doclink('modules/%s_module.html' % item['module'])), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent)) elif 'name' in item and 'link' in item and 'description' in item: text.append(textwrap.fill(DocCLI.tty_ify(item['name']), limit - 6, initial_indent=opt_indent[:-2] + "* ", subsequent_indent=opt_indent)) text.append(textwrap.fill(DocCLI.tty_ify(item['description']), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent + ' ')) text.append(textwrap.fill(DocCLI.tty_ify(item['link']), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent + ' ')) elif 'ref' in item and 'description' in item: text.append(textwrap.fill(DocCLI.tty_ify('Ansible documentation [%s]' % item['ref']), limit - 6, initial_indent=opt_indent[:-2] + "* ", subsequent_indent=opt_indent)) text.append(textwrap.fill(DocCLI.tty_ify(item['description']), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent + ' ')) text.append(textwrap.fill(DocCLI.tty_ify(get_versioned_doclink('/#stq=%s&stp=1' % item['ref'])), limit - 6, initial_indent=opt_indent + ' ', subsequent_indent=opt_indent + ' ')) text.append('') text.append('') del doc['seealso'] if doc.get('requirements', False): req = ", ".join(doc.pop('requirements')) text.append("REQUIREMENTS:%s\n" % textwrap.fill(DocCLI.tty_ify(req), limit - 16, initial_indent=" ", subsequent_indent=opt_indent)) # Generic handler for k in sorted(doc): if k in DocCLI.IGNORE or not doc[k]: continue if isinstance(doc[k], string_types): text.append('%s: %s' % (k.upper(), textwrap.fill(DocCLI.tty_ify(doc[k]), limit - (len(k) + 2), subsequent_indent=opt_indent))) elif isinstance(doc[k], (list, tuple)): text.append('%s: %s' % (k.upper(), ', '.join(doc[k]))) else: # use empty indent since this affects the start of the yaml doc, not it's keys text.append(DocCLI._dump_yaml({k.upper(): doc[k]}, '')) del doc[k] text.append('') if doc.get('plainexamples', False): text.append("EXAMPLES:") text.append('') if isinstance(doc['plainexamples'], string_types): text.append(doc.pop('plainexamples').strip()) else: text.append(yaml_dump(doc.pop('plainexamples'), indent=2, default_flow_style=False)) text.append('') text.append('') if doc.get('returndocs', False): text.append("RETURN VALUES:") DocCLI.add_fields(text, doc.pop('returndocs'), limit, opt_indent, return_values=True) return "\n".join(text) def _do_yaml_snippet(doc): text = [] mdesc = DocCLI.tty_ify(doc['short_description']) module = doc.get('module') if module: # this is actually a usable task! text.append("- name: %s" % (mdesc)) text.append(" %s:" % (module)) else: # just a comment, hopefully useful yaml file text.append("# %s:" % doc.get('plugin', doc.get('name'))) pad = 29 subdent = '# '.rjust(pad + 2) limit = display.columns - pad for o in sorted(doc['options'].keys()): opt = doc['options'][o] if isinstance(opt['description'], string_types): desc = DocCLI.tty_ify(opt['description']) else: desc = DocCLI.tty_ify(" ".join(opt['description'])) required = opt.get('required', False) if not isinstance(required, bool): raise ValueError("Incorrect value for 'Required', a boolean is needed: %s" % required) o = '%s:' % o if module: if required: desc = "(required) %s" % desc text.append(" %-20s # %s" % (o, textwrap.fill(desc, limit, subsequent_indent=subdent))) else: if required: default = '(required)' else: default = opt.get('default', 'None') text.append("%s %-9s # %s" % (o, default, textwrap.fill(desc, limit, subsequent_indent=subdent, max_lines=3))) return text def _do_lookup_snippet(doc): text = [] snippet = "lookup('%s', " % doc.get('plugin', doc.get('name')) comment = [] for o in sorted(doc['options'].keys()): opt = doc['options'][o] comment.append('# %s(%s): %s' % (o, opt.get('type', 'string'), opt.get('description', ''))) if o in ('_terms', '_raw', '_list'): # these are 'list of arguments' snippet += '< %s >' % (o) continue required = opt.get('required', False) if not isinstance(required, bool): raise ValueError("Incorrect value for 'Required', a boolean is needed: %s" % required) if required: default = '' else: default = opt.get('default', 'None') if opt.get('type') in ('string', 'str'): snippet += ", %s='%s'" % (o, default) else: snippet += ', %s=%s' % (o, default) snippet += ")" if comment: text.extend(comment) text.append('') text.append(snippet) return text ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.546556 ansible-core-2.12.0/lib/ansible/cli/galaxy.py0000644000000000000000000023543400000000000020702 0ustar00rootroot00000000000000# Copyright: (c) 2013, James Cammarata # Copyright: (c) 2018-2021, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import json import os.path import re import shutil import sys import textwrap import time from yaml.error import YAMLError import ansible.constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleError, AnsibleOptionsError from ansible.galaxy import Galaxy, get_collections_galaxy_meta_info from ansible.galaxy.api import GalaxyAPI from ansible.galaxy.collection import ( build_collection, download_collections, find_existing_collections, install_collections, publish_collection, validate_collection_name, validate_collection_path, verify_collections ) from ansible.galaxy.collection.concrete_artifact_manager import ( ConcreteArtifactsManager, ) from ansible.galaxy.dependency_resolution.dataclasses import Requirement from ansible.galaxy.role import GalaxyRole from ansible.galaxy.token import BasicAuthToken, GalaxyToken, KeycloakToken, NoTokenSentinel from ansible.module_utils.ansible_release import __version__ as ansible_version from ansible.module_utils.common.collections import is_iterable from ansible.module_utils.common.yaml import yaml_dump, yaml_load from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils import six from ansible.parsing.dataloader import DataLoader from ansible.parsing.yaml.loader import AnsibleLoader from ansible.playbook.role.requirement import RoleRequirement from ansible.template import Templar from ansible.utils.collection_loader import AnsibleCollectionConfig from ansible.utils.display import Display from ansible.utils.plugin_docs import get_versioned_doclink display = Display() urlparse = six.moves.urllib.parse.urlparse SERVER_DEF = [ ('url', True), ('username', False), ('password', False), ('token', False), ('auth_url', False), ('v3', False), ('validate_certs', False), ('client_id', False), ] def with_collection_artifacts_manager(wrapped_method): """Inject an artifacts manager if not passed explicitly. This decorator constructs a ConcreteArtifactsManager and maintains the related temporary directory auto-cleanup around the target method invocation. """ def method_wrapper(*args, **kwargs): if 'artifacts_manager' in kwargs: return wrapped_method(*args, **kwargs) with ConcreteArtifactsManager.under_tmpdir( C.DEFAULT_LOCAL_TMP, validate_certs=not context.CLIARGS['ignore_certs'], ) as concrete_artifact_cm: kwargs['artifacts_manager'] = concrete_artifact_cm return wrapped_method(*args, **kwargs) return method_wrapper def _display_header(path, h1, h2, w1=10, w2=7): display.display('\n# {0}\n{1:{cwidth}} {2:{vwidth}}\n{3} {4}\n'.format( path, h1, h2, '-' * max([len(h1), w1]), # Make sure that the number of dashes is at least the width of the header '-' * max([len(h2), w2]), cwidth=w1, vwidth=w2, )) def _display_role(gr): install_info = gr.install_info version = None if install_info: version = install_info.get("version", None) if not version: version = "(unknown version)" display.display("- %s, %s" % (gr.name, version)) def _display_collection(collection, cwidth=10, vwidth=7, min_cwidth=10, min_vwidth=7): display.display('{fqcn:{cwidth}} {version:{vwidth}}'.format( fqcn=to_text(collection.fqcn), version=collection.ver, cwidth=max(cwidth, min_cwidth), # Make sure the width isn't smaller than the header vwidth=max(vwidth, min_vwidth) )) def _get_collection_widths(collections): if not is_iterable(collections): collections = (collections, ) fqcn_set = {to_text(c.fqcn) for c in collections} version_set = {to_text(c.ver) for c in collections} fqcn_length = len(max(fqcn_set, key=len)) version_length = len(max(version_set, key=len)) return fqcn_length, version_length class GalaxyCLI(CLI): '''command to manage Ansible roles in shared repositories, the default of which is Ansible Galaxy *https://galaxy.ansible.com*.''' SKIP_INFO_KEYS = ("name", "description", "readme_html", "related", "summary_fields", "average_aw_composite", "average_aw_score", "url") def __init__(self, args): self._raw_args = args self._implicit_role = False if len(args) > 1: # Inject role into sys.argv[1] as a backwards compatibility step if args[1] not in ['-h', '--help', '--version'] and 'role' not in args and 'collection' not in args: # TODO: Should we add a warning here and eventually deprecate the implicit role subcommand choice # Remove this in Ansible 2.13 when we also remove -v as an option on the root parser for ansible-galaxy. idx = 2 if args[1].startswith('-v') else 1 args.insert(idx, 'role') self._implicit_role = True # since argparse doesn't allow hidden subparsers, handle dead login arg from raw args after "role" normalization if args[1:3] == ['role', 'login']: display.error( "The login command was removed in late 2020. An API key is now required to publish roles or collections " "to Galaxy. The key can be found at https://galaxy.ansible.com/me/preferences, and passed to the " "ansible-galaxy CLI via a file at {0} or (insecurely) via the `--token` " "command-line argument.".format(to_text(C.GALAXY_TOKEN_PATH))) sys.exit(1) self.api_servers = [] self.galaxy = None self._api = None super(GalaxyCLI, self).__init__(args) def init_parser(self): ''' create an options parser for bin/ansible ''' super(GalaxyCLI, self).init_parser( desc="Perform various Role and Collection related operations.", ) # Common arguments that apply to more than 1 action common = opt_help.argparse.ArgumentParser(add_help=False) common.add_argument('-s', '--server', dest='api_server', help='The Galaxy API server URL') common.add_argument('--token', '--api-key', dest='api_key', help='The Ansible Galaxy API key which can be found at ' 'https://galaxy.ansible.com/me/preferences.') common.add_argument('-c', '--ignore-certs', action='store_true', dest='ignore_certs', default=C.GALAXY_IGNORE_CERTS, help='Ignore SSL certificate validation errors.') opt_help.add_verbosity_options(common) force = opt_help.argparse.ArgumentParser(add_help=False) force.add_argument('-f', '--force', dest='force', action='store_true', default=False, help='Force overwriting an existing role or collection') github = opt_help.argparse.ArgumentParser(add_help=False) github.add_argument('github_user', help='GitHub username') github.add_argument('github_repo', help='GitHub repository') offline = opt_help.argparse.ArgumentParser(add_help=False) offline.add_argument('--offline', dest='offline', default=False, action='store_true', help="Don't query the galaxy API when creating roles") default_roles_path = C.config.get_configuration_definition('DEFAULT_ROLES_PATH').get('default', '') roles_path = opt_help.argparse.ArgumentParser(add_help=False) roles_path.add_argument('-p', '--roles-path', dest='roles_path', type=opt_help.unfrack_path(pathsep=True), default=C.DEFAULT_ROLES_PATH, action=opt_help.PrependListAction, help='The path to the directory containing your roles. The default is the first ' 'writable one configured via DEFAULT_ROLES_PATH: %s ' % default_roles_path) collections_path = opt_help.argparse.ArgumentParser(add_help=False) collections_path.add_argument('-p', '--collections-path', dest='collections_path', type=opt_help.unfrack_path(pathsep=True), default=AnsibleCollectionConfig.collection_paths, action=opt_help.PrependListAction, help="One or more directories to search for collections in addition " "to the default COLLECTIONS_PATHS. Separate multiple paths " "with '{0}'.".format(os.path.pathsep)) cache_options = opt_help.argparse.ArgumentParser(add_help=False) cache_options.add_argument('--clear-response-cache', dest='clear_response_cache', action='store_true', default=False, help='Clear the existing server response cache.') cache_options.add_argument('--no-cache', dest='no_cache', action='store_true', default=False, help='Do not use the server response cache.') # Add sub parser for the Galaxy role type (role or collection) type_parser = self.parser.add_subparsers(metavar='TYPE', dest='type') type_parser.required = True # Add sub parser for the Galaxy collection actions collection = type_parser.add_parser('collection', help='Manage an Ansible Galaxy collection.') collection_parser = collection.add_subparsers(metavar='COLLECTION_ACTION', dest='action') collection_parser.required = True self.add_download_options(collection_parser, parents=[common, cache_options]) self.add_init_options(collection_parser, parents=[common, force]) self.add_build_options(collection_parser, parents=[common, force]) self.add_publish_options(collection_parser, parents=[common]) self.add_install_options(collection_parser, parents=[common, force, cache_options]) self.add_list_options(collection_parser, parents=[common, collections_path]) self.add_verify_options(collection_parser, parents=[common, collections_path]) # Add sub parser for the Galaxy role actions role = type_parser.add_parser('role', help='Manage an Ansible Galaxy role.') role_parser = role.add_subparsers(metavar='ROLE_ACTION', dest='action') role_parser.required = True self.add_init_options(role_parser, parents=[common, force, offline]) self.add_remove_options(role_parser, parents=[common, roles_path]) self.add_delete_options(role_parser, parents=[common, github]) self.add_list_options(role_parser, parents=[common, roles_path]) self.add_search_options(role_parser, parents=[common]) self.add_import_options(role_parser, parents=[common, github]) self.add_setup_options(role_parser, parents=[common, roles_path]) self.add_info_options(role_parser, parents=[common, roles_path, offline]) self.add_install_options(role_parser, parents=[common, force, roles_path]) def add_download_options(self, parser, parents=None): download_parser = parser.add_parser('download', parents=parents, help='Download collections and their dependencies as a tarball for an ' 'offline install.') download_parser.set_defaults(func=self.execute_download) download_parser.add_argument('args', help='Collection(s)', metavar='collection', nargs='*') download_parser.add_argument('-n', '--no-deps', dest='no_deps', action='store_true', default=False, help="Don't download collection(s) listed as dependencies.") download_parser.add_argument('-p', '--download-path', dest='download_path', default='./collections', help='The directory to download the collections to.') download_parser.add_argument('-r', '--requirements-file', dest='requirements', help='A file containing a list of collections to be downloaded.') download_parser.add_argument('--pre', dest='allow_pre_release', action='store_true', help='Include pre-release versions. Semantic versioning pre-releases are ignored by default') def add_init_options(self, parser, parents=None): galaxy_type = 'collection' if parser.metavar == 'COLLECTION_ACTION' else 'role' init_parser = parser.add_parser('init', parents=parents, help='Initialize new {0} with the base structure of a ' '{0}.'.format(galaxy_type)) init_parser.set_defaults(func=self.execute_init) init_parser.add_argument('--init-path', dest='init_path', default='./', help='The path in which the skeleton {0} will be created. The default is the ' 'current working directory.'.format(galaxy_type)) init_parser.add_argument('--{0}-skeleton'.format(galaxy_type), dest='{0}_skeleton'.format(galaxy_type), default=C.GALAXY_ROLE_SKELETON, help='The path to a {0} skeleton that the new {0} should be based ' 'upon.'.format(galaxy_type)) obj_name_kwargs = {} if galaxy_type == 'collection': obj_name_kwargs['type'] = validate_collection_name init_parser.add_argument('{0}_name'.format(galaxy_type), help='{0} name'.format(galaxy_type.capitalize()), **obj_name_kwargs) if galaxy_type == 'role': init_parser.add_argument('--type', dest='role_type', action='store', default='default', help="Initialize using an alternate role type. Valid types include: 'container', " "'apb' and 'network'.") def add_remove_options(self, parser, parents=None): remove_parser = parser.add_parser('remove', parents=parents, help='Delete roles from roles_path.') remove_parser.set_defaults(func=self.execute_remove) remove_parser.add_argument('args', help='Role(s)', metavar='role', nargs='+') def add_delete_options(self, parser, parents=None): delete_parser = parser.add_parser('delete', parents=parents, help='Removes the role from Galaxy. It does not remove or alter the actual ' 'GitHub repository.') delete_parser.set_defaults(func=self.execute_delete) def add_list_options(self, parser, parents=None): galaxy_type = 'role' if parser.metavar == 'COLLECTION_ACTION': galaxy_type = 'collection' list_parser = parser.add_parser('list', parents=parents, help='Show the name and version of each {0} installed in the {0}s_path.'.format(galaxy_type)) list_parser.set_defaults(func=self.execute_list) list_parser.add_argument(galaxy_type, help=galaxy_type.capitalize(), nargs='?', metavar=galaxy_type) if galaxy_type == 'collection': list_parser.add_argument('--format', dest='output_format', choices=('human', 'yaml', 'json'), default='human', help="Format to display the list of collections in.") def add_search_options(self, parser, parents=None): search_parser = parser.add_parser('search', parents=parents, help='Search the Galaxy database by tags, platforms, author and multiple ' 'keywords.') search_parser.set_defaults(func=self.execute_search) search_parser.add_argument('--platforms', dest='platforms', help='list of OS platforms to filter by') search_parser.add_argument('--galaxy-tags', dest='galaxy_tags', help='list of galaxy tags to filter by') search_parser.add_argument('--author', dest='author', help='GitHub username') search_parser.add_argument('args', help='Search terms', metavar='searchterm', nargs='*') def add_import_options(self, parser, parents=None): import_parser = parser.add_parser('import', parents=parents, help='Import a role into a galaxy server') import_parser.set_defaults(func=self.execute_import) import_parser.add_argument('--no-wait', dest='wait', action='store_false', default=True, help="Don't wait for import results.") import_parser.add_argument('--branch', dest='reference', help='The name of a branch to import. Defaults to the repository\'s default branch ' '(usually master)') import_parser.add_argument('--role-name', dest='role_name', help='The name the role should have, if different than the repo name') import_parser.add_argument('--status', dest='check_status', action='store_true', default=False, help='Check the status of the most recent import request for given github_' 'user/github_repo.') def add_setup_options(self, parser, parents=None): setup_parser = parser.add_parser('setup', parents=parents, help='Manage the integration between Galaxy and the given source.') setup_parser.set_defaults(func=self.execute_setup) setup_parser.add_argument('--remove', dest='remove_id', default=None, help='Remove the integration matching the provided ID value. Use --list to see ' 'ID values.') setup_parser.add_argument('--list', dest="setup_list", action='store_true', default=False, help='List all of your integrations.') setup_parser.add_argument('source', help='Source') setup_parser.add_argument('github_user', help='GitHub username') setup_parser.add_argument('github_repo', help='GitHub repository') setup_parser.add_argument('secret', help='Secret') def add_info_options(self, parser, parents=None): info_parser = parser.add_parser('info', parents=parents, help='View more details about a specific role.') info_parser.set_defaults(func=self.execute_info) info_parser.add_argument('args', nargs='+', help='role', metavar='role_name[,version]') def add_verify_options(self, parser, parents=None): galaxy_type = 'collection' verify_parser = parser.add_parser('verify', parents=parents, help='Compare checksums with the collection(s) ' 'found on the server and the installed copy. This does not verify dependencies.') verify_parser.set_defaults(func=self.execute_verify) verify_parser.add_argument('args', metavar='{0}_name'.format(galaxy_type), nargs='*', help='The collection(s) name or ' 'path/url to a tar.gz collection artifact. This is mutually exclusive with --requirements-file.') verify_parser.add_argument('-i', '--ignore-errors', dest='ignore_errors', action='store_true', default=False, help='Ignore errors during verification and continue with the next specified collection.') verify_parser.add_argument('--offline', dest='offline', action='store_true', default=False, help='Validate collection integrity locally without contacting server for ' 'canonical manifest hash.') verify_parser.add_argument('-r', '--requirements-file', dest='requirements', help='A file containing a list of collections to be verified.') def add_install_options(self, parser, parents=None): galaxy_type = 'collection' if parser.metavar == 'COLLECTION_ACTION' else 'role' args_kwargs = {} if galaxy_type == 'collection': args_kwargs['help'] = 'The collection(s) name or path/url to a tar.gz collection artifact. This is ' \ 'mutually exclusive with --requirements-file.' ignore_errors_help = 'Ignore errors during installation and continue with the next specified ' \ 'collection. This will not ignore dependency conflict errors.' else: args_kwargs['help'] = 'Role name, URL or tar file' ignore_errors_help = 'Ignore errors and continue with the next specified role.' install_parser = parser.add_parser('install', parents=parents, help='Install {0}(s) from file(s), URL(s) or Ansible ' 'Galaxy'.format(galaxy_type)) install_parser.set_defaults(func=self.execute_install) install_parser.add_argument('args', metavar='{0}_name'.format(galaxy_type), nargs='*', **args_kwargs) install_parser.add_argument('-i', '--ignore-errors', dest='ignore_errors', action='store_true', default=False, help=ignore_errors_help) install_exclusive = install_parser.add_mutually_exclusive_group() install_exclusive.add_argument('-n', '--no-deps', dest='no_deps', action='store_true', default=False, help="Don't download {0}s listed as dependencies.".format(galaxy_type)) install_exclusive.add_argument('--force-with-deps', dest='force_with_deps', action='store_true', default=False, help="Force overwriting an existing {0} and its " "dependencies.".format(galaxy_type)) if galaxy_type == 'collection': install_parser.add_argument('-p', '--collections-path', dest='collections_path', default=self._get_default_collection_path(), help='The path to the directory containing your collections.') install_parser.add_argument('-r', '--requirements-file', dest='requirements', help='A file containing a list of collections to be installed.') install_parser.add_argument('--pre', dest='allow_pre_release', action='store_true', help='Include pre-release versions. Semantic versioning pre-releases are ignored by default') install_parser.add_argument('-U', '--upgrade', dest='upgrade', action='store_true', default=False, help='Upgrade installed collection artifacts. This will also update dependencies unless --no-deps is provided') else: install_parser.add_argument('-r', '--role-file', dest='requirements', help='A file containing a list of roles to be installed.') install_parser.add_argument('-g', '--keep-scm-meta', dest='keep_scm_meta', action='store_true', default=False, help='Use tar instead of the scm archive option when packaging the role.') def add_build_options(self, parser, parents=None): build_parser = parser.add_parser('build', parents=parents, help='Build an Ansible collection artifact that can be published to Ansible ' 'Galaxy.') build_parser.set_defaults(func=self.execute_build) build_parser.add_argument('args', metavar='collection', nargs='*', default=('.',), help='Path to the collection(s) directory to build. This should be the directory ' 'that contains the galaxy.yml file. The default is the current working ' 'directory.') build_parser.add_argument('--output-path', dest='output_path', default='./', help='The path in which the collection is built to. The default is the current ' 'working directory.') def add_publish_options(self, parser, parents=None): publish_parser = parser.add_parser('publish', parents=parents, help='Publish a collection artifact to Ansible Galaxy.') publish_parser.set_defaults(func=self.execute_publish) publish_parser.add_argument('args', metavar='collection_path', help='The path to the collection tarball to publish.') publish_parser.add_argument('--no-wait', dest='wait', action='store_false', default=True, help="Don't wait for import validation results.") publish_parser.add_argument('--import-timeout', dest='import_timeout', type=int, default=0, help="The time to wait for the collection import process to finish.") def post_process_args(self, options): options = super(GalaxyCLI, self).post_process_args(options) display.verbosity = options.verbosity return options def run(self): super(GalaxyCLI, self).run() self.galaxy = Galaxy() def server_config_def(section, key, required): return { 'description': 'The %s of the %s Galaxy server' % (key, section), 'ini': [ { 'section': 'galaxy_server.%s' % section, 'key': key, } ], 'env': [ {'name': 'ANSIBLE_GALAXY_SERVER_%s_%s' % (section.upper(), key.upper())}, ], 'required': required, } validate_certs_fallback = not context.CLIARGS['ignore_certs'] galaxy_options = {} for optional_key in ['clear_response_cache', 'no_cache']: if optional_key in context.CLIARGS: galaxy_options[optional_key] = context.CLIARGS[optional_key] config_servers = [] # Need to filter out empty strings or non truthy values as an empty server list env var is equal to ['']. server_list = [s for s in C.GALAXY_SERVER_LIST or [] if s] for server_priority, server_key in enumerate(server_list, start=1): # Config definitions are looked up dynamically based on the C.GALAXY_SERVER_LIST entry. We look up the # section [galaxy_server.] for the values url, username, password, and token. config_dict = dict((k, server_config_def(server_key, k, req)) for k, req in SERVER_DEF) defs = AnsibleLoader(yaml_dump(config_dict)).get_single_data() C.config.initialize_plugin_configuration_definitions('galaxy_server', server_key, defs) server_options = C.config.get_plugin_options('galaxy_server', server_key) # auth_url is used to create the token, but not directly by GalaxyAPI, so # it doesn't need to be passed as kwarg to GalaxyApi auth_url = server_options.pop('auth_url', None) client_id = server_options.pop('client_id', None) token_val = server_options['token'] or NoTokenSentinel username = server_options['username'] available_api_versions = None v3 = server_options.pop('v3', None) validate_certs = server_options['validate_certs'] if validate_certs is None: validate_certs = validate_certs_fallback server_options['validate_certs'] = validate_certs if v3: # This allows a user to explicitly indicate the server uses the /v3 API # This was added for testing against pulp_ansible and I'm not sure it has # a practical purpose outside of this use case. As such, this option is not # documented as of now server_options['available_api_versions'] = {'v3': '/v3'} # default case if no auth info is provided. server_options['token'] = None if username: server_options['token'] = BasicAuthToken(username, server_options['password']) else: if token_val: if auth_url: server_options['token'] = KeycloakToken(access_token=token_val, auth_url=auth_url, validate_certs=validate_certs, client_id=client_id) else: # The galaxy v1 / github / django / 'Token' server_options['token'] = GalaxyToken(token=token_val) server_options.update(galaxy_options) config_servers.append(GalaxyAPI( self.galaxy, server_key, priority=server_priority, **server_options )) cmd_server = context.CLIARGS['api_server'] cmd_token = GalaxyToken(token=context.CLIARGS['api_key']) if cmd_server: # Cmd args take precedence over the config entry but fist check if the arg was a name and use that config # entry, otherwise create a new API entry for the server specified. config_server = next((s for s in config_servers if s.name == cmd_server), None) if config_server: self.api_servers.append(config_server) else: self.api_servers.append(GalaxyAPI( self.galaxy, 'cmd_arg', cmd_server, token=cmd_token, priority=len(config_servers) + 1, **galaxy_options )) else: self.api_servers = config_servers # Default to C.GALAXY_SERVER if no servers were defined if len(self.api_servers) == 0: self.api_servers.append(GalaxyAPI( self.galaxy, 'default', C.GALAXY_SERVER, token=cmd_token, priority=0, **galaxy_options )) return context.CLIARGS['func']() @property def api(self): if self._api: return self._api for server in self.api_servers: try: if u'v1' in server.available_api_versions: self._api = server break except Exception: continue if not self._api: self._api = self.api_servers[0] return self._api def _get_default_collection_path(self): return C.COLLECTIONS_PATHS[0] def _parse_requirements_file(self, requirements_file, allow_old_format=True, artifacts_manager=None): """ Parses an Ansible requirement.yml file and returns all the roles and/or collections defined in it. There are 2 requirements file format: # v1 (roles only) - src: The source of the role, required if include is not set. Can be Galaxy role name, URL to a SCM repo or tarball. name: Downloads the role to the specified name, defaults to Galaxy name from Galaxy or name of repo if src is a URL. scm: If src is a URL, specify the SCM. Only git or hd are supported and defaults ot git. version: The version of the role to download. Can also be tag, commit, or branch name and defaults to master. include: Path to additional requirements.yml files. # v2 (roles and collections) --- roles: # Same as v1 format just under the roles key collections: - namespace.collection - name: namespace.collection version: version identifier, multiple identifiers are separated by ',' source: the URL or a predefined source name that relates to C.GALAXY_SERVER_LIST type: git|file|url|galaxy :param requirements_file: The path to the requirements file. :param allow_old_format: Will fail if a v1 requirements file is found and this is set to False. :param artifacts_manager: Artifacts manager. :return: a dict containing roles and collections to found in the requirements file. """ requirements = { 'roles': [], 'collections': [], } b_requirements_file = to_bytes(requirements_file, errors='surrogate_or_strict') if not os.path.exists(b_requirements_file): raise AnsibleError("The requirements file '%s' does not exist." % to_native(requirements_file)) display.vvv("Reading requirement file at '%s'" % requirements_file) with open(b_requirements_file, 'rb') as req_obj: try: file_requirements = yaml_load(req_obj) except YAMLError as err: raise AnsibleError( "Failed to parse the requirements yml at '%s' with the following error:\n%s" % (to_native(requirements_file), to_native(err))) if file_requirements is None: raise AnsibleError("No requirements found in file '%s'" % to_native(requirements_file)) def parse_role_req(requirement): if "include" not in requirement: role = RoleRequirement.role_yaml_parse(requirement) display.vvv("found role %s in yaml file" % to_text(role)) if "name" not in role and "src" not in role: raise AnsibleError("Must specify name or src for role") return [GalaxyRole(self.galaxy, self.api, **role)] else: b_include_path = to_bytes(requirement["include"], errors="surrogate_or_strict") if not os.path.isfile(b_include_path): raise AnsibleError("Failed to find include requirements file '%s' in '%s'" % (to_native(b_include_path), to_native(requirements_file))) with open(b_include_path, 'rb') as f_include: try: return [GalaxyRole(self.galaxy, self.api, **r) for r in (RoleRequirement.role_yaml_parse(i) for i in yaml_load(f_include))] except Exception as e: raise AnsibleError("Unable to load data from include requirements file: %s %s" % (to_native(requirements_file), to_native(e))) if isinstance(file_requirements, list): # Older format that contains only roles if not allow_old_format: raise AnsibleError("Expecting requirements file to be a dict with the key 'collections' that contains " "a list of collections to install") for role_req in file_requirements: requirements['roles'] += parse_role_req(role_req) else: # Newer format with a collections and/or roles key extra_keys = set(file_requirements.keys()).difference(set(['roles', 'collections'])) if extra_keys: raise AnsibleError("Expecting only 'roles' and/or 'collections' as base keys in the requirements " "file. Found: %s" % (to_native(", ".join(extra_keys)))) for role_req in file_requirements.get('roles') or []: requirements['roles'] += parse_role_req(role_req) requirements['collections'] = [ Requirement.from_requirement_dict( self._init_coll_req_dict(collection_req), artifacts_manager, ) for collection_req in file_requirements.get('collections') or [] ] return requirements def _init_coll_req_dict(self, coll_req): if not isinstance(coll_req, dict): # Assume it's a string: return {'name': coll_req} if ( 'name' not in coll_req or not coll_req.get('source') or coll_req.get('type', 'galaxy') != 'galaxy' ): return coll_req # Try and match up the requirement source with our list of Galaxy API # servers defined in the config, otherwise create a server with that # URL without any auth. coll_req['source'] = next( iter( srvr for srvr in self.api_servers if coll_req['source'] in {srvr.name, srvr.api_server} ), GalaxyAPI( self.galaxy, 'explicit_requirement_{name!s}'.format( name=coll_req['name'], ), coll_req['source'], validate_certs=not context.CLIARGS['ignore_certs'], ), ) return coll_req @staticmethod def exit_without_ignore(rc=1): """ Exits with the specified return code unless the option --ignore-errors was specified """ if not context.CLIARGS['ignore_errors']: raise AnsibleError('- you can use --ignore-errors to skip failed roles and finish processing the list.') @staticmethod def _display_role_info(role_info): text = [u"", u"Role: %s" % to_text(role_info['name'])] # Get the top-level 'description' first, falling back to galaxy_info['galaxy_info']['description']. galaxy_info = role_info.get('galaxy_info', {}) description = role_info.get('description', galaxy_info.get('description', '')) text.append(u"\tdescription: %s" % description) for k in sorted(role_info.keys()): if k in GalaxyCLI.SKIP_INFO_KEYS: continue if isinstance(role_info[k], dict): text.append(u"\t%s:" % (k)) for key in sorted(role_info[k].keys()): if key in GalaxyCLI.SKIP_INFO_KEYS: continue text.append(u"\t\t%s: %s" % (key, role_info[k][key])) else: text.append(u"\t%s: %s" % (k, role_info[k])) # make sure we have a trailing newline returned text.append(u"") return u'\n'.join(text) @staticmethod def _resolve_path(path): return os.path.abspath(os.path.expanduser(os.path.expandvars(path))) @staticmethod def _get_skeleton_galaxy_yml(template_path, inject_data): with open(to_bytes(template_path, errors='surrogate_or_strict'), 'rb') as template_obj: meta_template = to_text(template_obj.read(), errors='surrogate_or_strict') galaxy_meta = get_collections_galaxy_meta_info() required_config = [] optional_config = [] for meta_entry in galaxy_meta: config_list = required_config if meta_entry.get('required', False) else optional_config value = inject_data.get(meta_entry['key'], None) if not value: meta_type = meta_entry.get('type', 'str') if meta_type == 'str': value = '' elif meta_type == 'list': value = [] elif meta_type == 'dict': value = {} meta_entry['value'] = value config_list.append(meta_entry) link_pattern = re.compile(r"L\(([^)]+),\s+([^)]+)\)") const_pattern = re.compile(r"C\(([^)]+)\)") def comment_ify(v): if isinstance(v, list): v = ". ".join([l.rstrip('.') for l in v]) v = link_pattern.sub(r"\1 <\2>", v) v = const_pattern.sub(r"'\1'", v) return textwrap.fill(v, width=117, initial_indent="# ", subsequent_indent="# ", break_on_hyphens=False) loader = DataLoader() templar = Templar(loader, variables={'required_config': required_config, 'optional_config': optional_config}) templar.environment.filters['comment_ify'] = comment_ify meta_value = templar.template(meta_template) return meta_value def _require_one_of_collections_requirements( self, collections, requirements_file, artifacts_manager=None, ): if collections and requirements_file: raise AnsibleError("The positional collection_name arg and --requirements-file are mutually exclusive.") elif not collections and not requirements_file: raise AnsibleError("You must specify a collection name or a requirements file.") elif requirements_file: requirements_file = GalaxyCLI._resolve_path(requirements_file) requirements = self._parse_requirements_file( requirements_file, allow_old_format=False, artifacts_manager=artifacts_manager, ) else: requirements = { 'collections': [ Requirement.from_string(coll_input, artifacts_manager) for coll_input in collections ], 'roles': [], } return requirements ############################ # execute actions ############################ def execute_role(self): """ Perform the action on an Ansible Galaxy role. Must be combined with a further action like delete/install/init as listed below. """ # To satisfy doc build pass def execute_collection(self): """ Perform the action on an Ansible Galaxy collection. Must be combined with a further action like init/install as listed below. """ # To satisfy doc build pass def execute_build(self): """ Build an Ansible Galaxy collection artifact that can be stored in a central repository like Ansible Galaxy. By default, this command builds from the current working directory. You can optionally pass in the collection input path (where the ``galaxy.yml`` file is). """ force = context.CLIARGS['force'] output_path = GalaxyCLI._resolve_path(context.CLIARGS['output_path']) b_output_path = to_bytes(output_path, errors='surrogate_or_strict') if not os.path.exists(b_output_path): os.makedirs(b_output_path) elif os.path.isfile(b_output_path): raise AnsibleError("- the output collection directory %s is a file - aborting" % to_native(output_path)) for collection_path in context.CLIARGS['args']: collection_path = GalaxyCLI._resolve_path(collection_path) build_collection( to_text(collection_path, errors='surrogate_or_strict'), to_text(output_path, errors='surrogate_or_strict'), force, ) @with_collection_artifacts_manager def execute_download(self, artifacts_manager=None): collections = context.CLIARGS['args'] no_deps = context.CLIARGS['no_deps'] download_path = context.CLIARGS['download_path'] requirements_file = context.CLIARGS['requirements'] if requirements_file: requirements_file = GalaxyCLI._resolve_path(requirements_file) requirements = self._require_one_of_collections_requirements( collections, requirements_file, artifacts_manager=artifacts_manager, )['collections'] download_path = GalaxyCLI._resolve_path(download_path) b_download_path = to_bytes(download_path, errors='surrogate_or_strict') if not os.path.exists(b_download_path): os.makedirs(b_download_path) download_collections( requirements, download_path, self.api_servers, no_deps, context.CLIARGS['allow_pre_release'], artifacts_manager=artifacts_manager, ) return 0 def execute_init(self): """ Creates the skeleton framework of a role or collection that complies with the Galaxy metadata format. Requires a role or collection name. The collection name must be in the format ``.``. """ galaxy_type = context.CLIARGS['type'] init_path = context.CLIARGS['init_path'] force = context.CLIARGS['force'] obj_skeleton = context.CLIARGS['{0}_skeleton'.format(galaxy_type)] obj_name = context.CLIARGS['{0}_name'.format(galaxy_type)] inject_data = dict( description='your {0} description'.format(galaxy_type), ansible_plugin_list_dir=get_versioned_doclink('plugins/plugins.html'), ) if galaxy_type == 'role': inject_data.update(dict( author='your name', company='your company (optional)', license='license (GPL-2.0-or-later, MIT, etc)', role_name=obj_name, role_type=context.CLIARGS['role_type'], issue_tracker_url='http://example.com/issue/tracker', repository_url='http://example.com/repository', documentation_url='http://docs.example.com', homepage_url='http://example.com', min_ansible_version=ansible_version[:3], # x.y dependencies=[], )) obj_path = os.path.join(init_path, obj_name) elif galaxy_type == 'collection': namespace, collection_name = obj_name.split('.', 1) inject_data.update(dict( namespace=namespace, collection_name=collection_name, version='1.0.0', readme='README.md', authors=['your name '], license=['GPL-2.0-or-later'], repository='http://example.com/repository', documentation='http://docs.example.com', homepage='http://example.com', issues='http://example.com/issue/tracker', build_ignore=[], )) obj_path = os.path.join(init_path, namespace, collection_name) b_obj_path = to_bytes(obj_path, errors='surrogate_or_strict') if os.path.exists(b_obj_path): if os.path.isfile(obj_path): raise AnsibleError("- the path %s already exists, but is a file - aborting" % to_native(obj_path)) elif not force: raise AnsibleError("- the directory %s already exists. " "You can use --force to re-initialize this directory,\n" "however it will reset any main.yml files that may have\n" "been modified there already." % to_native(obj_path)) if obj_skeleton is not None: own_skeleton = False skeleton_ignore_expressions = C.GALAXY_ROLE_SKELETON_IGNORE else: own_skeleton = True obj_skeleton = self.galaxy.default_role_skeleton_path skeleton_ignore_expressions = ['^.*/.git_keep$'] obj_skeleton = os.path.expanduser(obj_skeleton) skeleton_ignore_re = [re.compile(x) for x in skeleton_ignore_expressions] if not os.path.exists(obj_skeleton): raise AnsibleError("- the skeleton path '{0}' does not exist, cannot init {1}".format( to_native(obj_skeleton), galaxy_type) ) loader = DataLoader() templar = Templar(loader, variables=inject_data) # create role directory if not os.path.exists(b_obj_path): os.makedirs(b_obj_path) for root, dirs, files in os.walk(obj_skeleton, topdown=True): rel_root = os.path.relpath(root, obj_skeleton) rel_dirs = rel_root.split(os.sep) rel_root_dir = rel_dirs[0] if galaxy_type == 'collection': # A collection can contain templates in playbooks/*/templates and roles/*/templates in_templates_dir = rel_root_dir in ['playbooks', 'roles'] and 'templates' in rel_dirs else: in_templates_dir = rel_root_dir == 'templates' # Filter out ignored directory names # Use [:] to mutate the list os.walk uses dirs[:] = [d for d in dirs if not any(r.match(d) for r in skeleton_ignore_re)] for f in files: filename, ext = os.path.splitext(f) if any(r.match(os.path.join(rel_root, f)) for r in skeleton_ignore_re): continue if galaxy_type == 'collection' and own_skeleton and rel_root == '.' and f == 'galaxy.yml.j2': # Special use case for galaxy.yml.j2 in our own default collection skeleton. We build the options # dynamically which requires special options to be set. # The templated data's keys must match the key name but the inject data contains collection_name # instead of name. We just make a copy and change the key back to name for this file. template_data = inject_data.copy() template_data['name'] = template_data.pop('collection_name') meta_value = GalaxyCLI._get_skeleton_galaxy_yml(os.path.join(root, rel_root, f), template_data) b_dest_file = to_bytes(os.path.join(obj_path, rel_root, filename), errors='surrogate_or_strict') with open(b_dest_file, 'wb') as galaxy_obj: galaxy_obj.write(to_bytes(meta_value, errors='surrogate_or_strict')) elif ext == ".j2" and not in_templates_dir: src_template = os.path.join(root, f) dest_file = os.path.join(obj_path, rel_root, filename) template_data = to_text(loader._get_file_contents(src_template)[0], errors='surrogate_or_strict') b_rendered = to_bytes(templar.template(template_data), errors='surrogate_or_strict') with open(dest_file, 'wb') as df: df.write(b_rendered) else: f_rel_path = os.path.relpath(os.path.join(root, f), obj_skeleton) shutil.copyfile(os.path.join(root, f), os.path.join(obj_path, f_rel_path)) for d in dirs: b_dir_path = to_bytes(os.path.join(obj_path, rel_root, d), errors='surrogate_or_strict') if not os.path.exists(b_dir_path): os.makedirs(b_dir_path) display.display("- %s %s was created successfully" % (galaxy_type.title(), obj_name)) def execute_info(self): """ prints out detailed information about an installed role as well as info available from the galaxy API. """ roles_path = context.CLIARGS['roles_path'] data = '' for role in context.CLIARGS['args']: role_info = {'path': roles_path} gr = GalaxyRole(self.galaxy, self.api, role) install_info = gr.install_info if install_info: if 'version' in install_info: install_info['installed_version'] = install_info['version'] del install_info['version'] role_info.update(install_info) if not context.CLIARGS['offline']: remote_data = None try: remote_data = self.api.lookup_role_by_name(role, False) except AnsibleError as e: if e.http_code == 400 and 'Bad Request' in e.message: # Role does not exist in Ansible Galaxy data = u"- the role %s was not found" % role break raise AnsibleError("Unable to find info about '%s': %s" % (role, e)) if remote_data: role_info.update(remote_data) elif context.CLIARGS['offline'] and not gr._exists: data = u"- the role %s was not found" % role break if gr.metadata: role_info.update(gr.metadata) req = RoleRequirement() role_spec = req.role_yaml_parse({'role': role}) if role_spec: role_info.update(role_spec) data += self._display_role_info(role_info) self.pager(data) @with_collection_artifacts_manager def execute_verify(self, artifacts_manager=None): collections = context.CLIARGS['args'] search_paths = context.CLIARGS['collections_path'] ignore_errors = context.CLIARGS['ignore_errors'] local_verify_only = context.CLIARGS['offline'] requirements_file = context.CLIARGS['requirements'] requirements = self._require_one_of_collections_requirements( collections, requirements_file, artifacts_manager=artifacts_manager, )['collections'] resolved_paths = [validate_collection_path(GalaxyCLI._resolve_path(path)) for path in search_paths] results = verify_collections( requirements, resolved_paths, self.api_servers, ignore_errors, local_verify_only=local_verify_only, artifacts_manager=artifacts_manager, ) if any(result for result in results if not result.success): return 1 return 0 @with_collection_artifacts_manager def execute_install(self, artifacts_manager=None): """ Install one or more roles(``ansible-galaxy role install``), or one or more collections(``ansible-galaxy collection install``). You can pass in a list (roles or collections) or use the file option listed below (these are mutually exclusive). If you pass in a list, it can be a name (which will be downloaded via the galaxy API and github), or it can be a local tar archive file. :param artifacts_manager: Artifacts manager. """ install_items = context.CLIARGS['args'] requirements_file = context.CLIARGS['requirements'] collection_path = None if requirements_file: requirements_file = GalaxyCLI._resolve_path(requirements_file) two_type_warning = "The requirements file '%s' contains {0}s which will be ignored. To install these {0}s " \ "run 'ansible-galaxy {0} install -r' or to install both at the same time run " \ "'ansible-galaxy install -r' without a custom install path." % to_text(requirements_file) # TODO: Would be nice to share the same behaviour with args and -r in collections and roles. collection_requirements = [] role_requirements = [] if context.CLIARGS['type'] == 'collection': collection_path = GalaxyCLI._resolve_path(context.CLIARGS['collections_path']) requirements = self._require_one_of_collections_requirements( install_items, requirements_file, artifacts_manager=artifacts_manager, ) collection_requirements = requirements['collections'] if requirements['roles']: display.vvv(two_type_warning.format('role')) else: if not install_items and requirements_file is None: raise AnsibleOptionsError("- you must specify a user/role name or a roles file") if requirements_file: if not (requirements_file.endswith('.yaml') or requirements_file.endswith('.yml')): raise AnsibleError("Invalid role requirements file, it must end with a .yml or .yaml extension") requirements = self._parse_requirements_file( requirements_file, artifacts_manager=artifacts_manager, ) role_requirements = requirements['roles'] # We can only install collections and roles at the same time if the type wasn't specified and the -p # argument was not used. If collections are present in the requirements then at least display a msg. galaxy_args = self._raw_args if requirements['collections'] and (not self._implicit_role or '-p' in galaxy_args or '--roles-path' in galaxy_args): # We only want to display a warning if 'ansible-galaxy install -r ... -p ...'. Other cases the user # was explicit about the type and shouldn't care that collections were skipped. display_func = display.warning if self._implicit_role else display.vvv display_func(two_type_warning.format('collection')) else: collection_path = self._get_default_collection_path() collection_requirements = requirements['collections'] else: # roles were specified directly, so we'll just go out grab them # (and their dependencies, unless the user doesn't want us to). for rname in context.CLIARGS['args']: role = RoleRequirement.role_yaml_parse(rname.strip()) role_requirements.append(GalaxyRole(self.galaxy, self.api, **role)) if not role_requirements and not collection_requirements: display.display("Skipping install, no requirements found") return if role_requirements: display.display("Starting galaxy role install process") self._execute_install_role(role_requirements) if collection_requirements: display.display("Starting galaxy collection install process") # Collections can technically be installed even when ansible-galaxy is in role mode so we need to pass in # the install path as context.CLIARGS['collections_path'] won't be set (default is calculated above). self._execute_install_collection( collection_requirements, collection_path, artifacts_manager=artifacts_manager, ) def _execute_install_collection( self, requirements, path, artifacts_manager, ): force = context.CLIARGS['force'] ignore_errors = context.CLIARGS['ignore_errors'] no_deps = context.CLIARGS['no_deps'] force_with_deps = context.CLIARGS['force_with_deps'] # If `ansible-galaxy install` is used, collection-only options aren't available to the user and won't be in context.CLIARGS allow_pre_release = context.CLIARGS.get('allow_pre_release', False) upgrade = context.CLIARGS.get('upgrade', False) collections_path = C.COLLECTIONS_PATHS if len([p for p in collections_path if p.startswith(path)]) == 0: display.warning("The specified collections path '%s' is not part of the configured Ansible " "collections paths '%s'. The installed collection won't be picked up in an Ansible " "run." % (to_text(path), to_text(":".join(collections_path)))) output_path = validate_collection_path(path) b_output_path = to_bytes(output_path, errors='surrogate_or_strict') if not os.path.exists(b_output_path): os.makedirs(b_output_path) install_collections( requirements, output_path, self.api_servers, ignore_errors, no_deps, force, force_with_deps, upgrade, allow_pre_release=allow_pre_release, artifacts_manager=artifacts_manager, ) return 0 def _execute_install_role(self, requirements): role_file = context.CLIARGS['requirements'] no_deps = context.CLIARGS['no_deps'] force_deps = context.CLIARGS['force_with_deps'] force = context.CLIARGS['force'] or force_deps for role in requirements: # only process roles in roles files when names matches if given if role_file and context.CLIARGS['args'] and role.name not in context.CLIARGS['args']: display.vvv('Skipping role %s' % role.name) continue display.vvv('Processing role %s ' % role.name) # query the galaxy API for the role data if role.install_info is not None: if role.install_info['version'] != role.version or force: if force: display.display('- changing role %s from %s to %s' % (role.name, role.install_info['version'], role.version or "unspecified")) role.remove() else: display.warning('- %s (%s) is already installed - use --force to change version to %s' % (role.name, role.install_info['version'], role.version or "unspecified")) continue else: if not force: display.display('- %s is already installed, skipping.' % str(role)) continue try: installed = role.install() except AnsibleError as e: display.warning(u"- %s was NOT installed successfully: %s " % (role.name, to_text(e))) self.exit_without_ignore() continue # install dependencies, if we want them if not no_deps and installed: if not role.metadata: display.warning("Meta file %s is empty. Skipping dependencies." % role.path) else: role_dependencies = (role.metadata.get('dependencies') or []) + role.requirements for dep in role_dependencies: display.debug('Installing dep %s' % dep) dep_req = RoleRequirement() dep_info = dep_req.role_yaml_parse(dep) dep_role = GalaxyRole(self.galaxy, self.api, **dep_info) if '.' not in dep_role.name and '.' not in dep_role.src and dep_role.scm is None: # we know we can skip this, as it's not going to # be found on galaxy.ansible.com continue if dep_role.install_info is None: if dep_role not in requirements: display.display('- adding dependency: %s' % to_text(dep_role)) requirements.append(dep_role) else: display.display('- dependency %s already pending installation.' % dep_role.name) else: if dep_role.install_info['version'] != dep_role.version: if force_deps: display.display('- changing dependent role %s from %s to %s' % (dep_role.name, dep_role.install_info['version'], dep_role.version or "unspecified")) dep_role.remove() requirements.append(dep_role) else: display.warning('- dependency %s (%s) from role %s differs from already installed version (%s), skipping' % (to_text(dep_role), dep_role.version, role.name, dep_role.install_info['version'])) else: if force_deps: requirements.append(dep_role) else: display.display('- dependency %s is already installed, skipping.' % dep_role.name) if not installed: display.warning("- %s was NOT installed successfully." % role.name) self.exit_without_ignore() return 0 def execute_remove(self): """ removes the list of roles passed as arguments from the local system. """ if not context.CLIARGS['args']: raise AnsibleOptionsError('- you must specify at least one role to remove.') for role_name in context.CLIARGS['args']: role = GalaxyRole(self.galaxy, self.api, role_name) try: if role.remove(): display.display('- successfully removed %s' % role_name) else: display.display('- %s is not installed, skipping.' % role_name) except Exception as e: raise AnsibleError("Failed to remove role %s: %s" % (role_name, to_native(e))) return 0 def execute_list(self): """ List installed collections or roles """ if context.CLIARGS['type'] == 'role': self.execute_list_role() elif context.CLIARGS['type'] == 'collection': self.execute_list_collection() def execute_list_role(self): """ List all roles installed on the local system or a specific role """ path_found = False role_found = False warnings = [] roles_search_paths = context.CLIARGS['roles_path'] role_name = context.CLIARGS['role'] for path in roles_search_paths: role_path = GalaxyCLI._resolve_path(path) if os.path.isdir(path): path_found = True else: warnings.append("- the configured path {0} does not exist.".format(path)) continue if role_name: # show the requested role, if it exists gr = GalaxyRole(self.galaxy, self.api, role_name, path=os.path.join(role_path, role_name)) if os.path.isdir(gr.path): role_found = True display.display('# %s' % os.path.dirname(gr.path)) _display_role(gr) break warnings.append("- the role %s was not found" % role_name) else: if not os.path.exists(role_path): warnings.append("- the configured path %s does not exist." % role_path) continue if not os.path.isdir(role_path): warnings.append("- the configured path %s, exists, but it is not a directory." % role_path) continue display.display('# %s' % role_path) path_files = os.listdir(role_path) for path_file in path_files: gr = GalaxyRole(self.galaxy, self.api, path_file, path=path) if gr.metadata: _display_role(gr) # Do not warn if the role was found in any of the search paths if role_found and role_name: warnings = [] for w in warnings: display.warning(w) if not path_found: raise AnsibleOptionsError("- None of the provided paths were usable. Please specify a valid path with --{0}s-path".format(context.CLIARGS['type'])) return 0 @with_collection_artifacts_manager def execute_list_collection(self, artifacts_manager=None): """ List all collections installed on the local system :param artifacts_manager: Artifacts manager. """ output_format = context.CLIARGS['output_format'] collections_search_paths = set(context.CLIARGS['collections_path']) collection_name = context.CLIARGS['collection'] default_collections_path = AnsibleCollectionConfig.collection_paths collections_in_paths = {} warnings = [] path_found = False collection_found = False for path in collections_search_paths: collection_path = GalaxyCLI._resolve_path(path) if not os.path.exists(path): if path in default_collections_path: # don't warn for missing default paths continue warnings.append("- the configured path {0} does not exist.".format(collection_path)) continue if not os.path.isdir(collection_path): warnings.append("- the configured path {0}, exists, but it is not a directory.".format(collection_path)) continue path_found = True if collection_name: # list a specific collection validate_collection_name(collection_name) namespace, collection = collection_name.split('.') collection_path = validate_collection_path(collection_path) b_collection_path = to_bytes(os.path.join(collection_path, namespace, collection), errors='surrogate_or_strict') if not os.path.exists(b_collection_path): warnings.append("- unable to find {0} in collection paths".format(collection_name)) continue if not os.path.isdir(collection_path): warnings.append("- the configured path {0}, exists, but it is not a directory.".format(collection_path)) continue collection_found = True try: collection = Requirement.from_dir_path_as_unknown( b_collection_path, artifacts_manager, ) except ValueError as val_err: six.raise_from(AnsibleError(val_err), val_err) if output_format in {'yaml', 'json'}: collections_in_paths[collection_path] = { collection.fqcn: {'version': collection.ver} } continue fqcn_width, version_width = _get_collection_widths([collection]) _display_header(collection_path, 'Collection', 'Version', fqcn_width, version_width) _display_collection(collection, fqcn_width, version_width) else: # list all collections collection_path = validate_collection_path(path) if os.path.isdir(collection_path): display.vvv("Searching {0} for collections".format(collection_path)) collections = list(find_existing_collections( collection_path, artifacts_manager, )) else: # There was no 'ansible_collections/' directory in the path, so there # or no collections here. display.vvv("No 'ansible_collections' directory found at {0}".format(collection_path)) continue if not collections: display.vvv("No collections found at {0}".format(collection_path)) continue if output_format in {'yaml', 'json'}: collections_in_paths[collection_path] = { collection.fqcn: {'version': collection.ver} for collection in collections } continue # Display header fqcn_width, version_width = _get_collection_widths(collections) _display_header(collection_path, 'Collection', 'Version', fqcn_width, version_width) # Sort collections by the namespace and name for collection in sorted(collections, key=to_text): _display_collection(collection, fqcn_width, version_width) # Do not warn if the specific collection was found in any of the search paths if collection_found and collection_name: warnings = [] for w in warnings: display.warning(w) if not path_found: raise AnsibleOptionsError("- None of the provided paths were usable. Please specify a valid path with --{0}s-path".format(context.CLIARGS['type'])) if output_format == 'json': display.display(json.dumps(collections_in_paths)) elif output_format == 'yaml': display.display(yaml_dump(collections_in_paths)) return 0 def execute_publish(self): """ Publish a collection into Ansible Galaxy. Requires the path to the collection tarball to publish. """ collection_path = GalaxyCLI._resolve_path(context.CLIARGS['args']) wait = context.CLIARGS['wait'] timeout = context.CLIARGS['import_timeout'] publish_collection(collection_path, self.api, wait, timeout) def execute_search(self): ''' searches for roles on the Ansible Galaxy server''' page_size = 1000 search = None if context.CLIARGS['args']: search = '+'.join(context.CLIARGS['args']) if not search and not context.CLIARGS['platforms'] and not context.CLIARGS['galaxy_tags'] and not context.CLIARGS['author']: raise AnsibleError("Invalid query. At least one search term, platform, galaxy tag or author must be provided.") response = self.api.search_roles(search, platforms=context.CLIARGS['platforms'], tags=context.CLIARGS['galaxy_tags'], author=context.CLIARGS['author'], page_size=page_size) if response['count'] == 0: display.display("No roles match your search.", color=C.COLOR_ERROR) return True data = [u''] if response['count'] > page_size: data.append(u"Found %d roles matching your search. Showing first %s." % (response['count'], page_size)) else: data.append(u"Found %d roles matching your search:" % response['count']) max_len = [] for role in response['results']: max_len.append(len(role['username'] + '.' + role['name'])) name_len = max(max_len) format_str = u" %%-%ds %%s" % name_len data.append(u'') data.append(format_str % (u"Name", u"Description")) data.append(format_str % (u"----", u"-----------")) for role in response['results']: data.append(format_str % (u'%s.%s' % (role['username'], role['name']), role['description'])) data = u'\n'.join(data) self.pager(data) return True def execute_import(self): """ used to import a role into Ansible Galaxy """ colors = { 'INFO': 'normal', 'WARNING': C.COLOR_WARN, 'ERROR': C.COLOR_ERROR, 'SUCCESS': C.COLOR_OK, 'FAILED': C.COLOR_ERROR, } github_user = to_text(context.CLIARGS['github_user'], errors='surrogate_or_strict') github_repo = to_text(context.CLIARGS['github_repo'], errors='surrogate_or_strict') if context.CLIARGS['check_status']: task = self.api.get_import_task(github_user=github_user, github_repo=github_repo) else: # Submit an import request task = self.api.create_import_task(github_user, github_repo, reference=context.CLIARGS['reference'], role_name=context.CLIARGS['role_name']) if len(task) > 1: # found multiple roles associated with github_user/github_repo display.display("WARNING: More than one Galaxy role associated with Github repo %s/%s." % (github_user, github_repo), color='yellow') display.display("The following Galaxy roles are being updated:" + u'\n', color=C.COLOR_CHANGED) for t in task: display.display('%s.%s' % (t['summary_fields']['role']['namespace'], t['summary_fields']['role']['name']), color=C.COLOR_CHANGED) display.display(u'\nTo properly namespace this role, remove each of the above and re-import %s/%s from scratch' % (github_user, github_repo), color=C.COLOR_CHANGED) return 0 # found a single role as expected display.display("Successfully submitted import request %d" % task[0]['id']) if not context.CLIARGS['wait']: display.display("Role name: %s" % task[0]['summary_fields']['role']['name']) display.display("Repo: %s/%s" % (task[0]['github_user'], task[0]['github_repo'])) if context.CLIARGS['check_status'] or context.CLIARGS['wait']: # Get the status of the import msg_list = [] finished = False while not finished: task = self.api.get_import_task(task_id=task[0]['id']) for msg in task[0]['summary_fields']['task_messages']: if msg['id'] not in msg_list: display.display(msg['message_text'], color=colors[msg['message_type']]) msg_list.append(msg['id']) if task[0]['state'] in ['SUCCESS', 'FAILED']: finished = True else: time.sleep(10) return 0 def execute_setup(self): """ Setup an integration from Github or Travis for Ansible Galaxy roles""" if context.CLIARGS['setup_list']: # List existing integration secrets secrets = self.api.list_secrets() if len(secrets) == 0: # None found display.display("No integrations found.") return 0 display.display(u'\n' + "ID Source Repo", color=C.COLOR_OK) display.display("---------- ---------- ----------", color=C.COLOR_OK) for secret in secrets: display.display("%-10s %-10s %s/%s" % (secret['id'], secret['source'], secret['github_user'], secret['github_repo']), color=C.COLOR_OK) return 0 if context.CLIARGS['remove_id']: # Remove a secret self.api.remove_secret(context.CLIARGS['remove_id']) display.display("Secret removed. Integrations using this secret will not longer work.", color=C.COLOR_OK) return 0 source = context.CLIARGS['source'] github_user = context.CLIARGS['github_user'] github_repo = context.CLIARGS['github_repo'] secret = context.CLIARGS['secret'] resp = self.api.add_secret(source, github_user, github_repo, secret) display.display("Added integration for %s %s/%s" % (resp['source'], resp['github_user'], resp['github_repo'])) return 0 def execute_delete(self): """ Delete a role from Ansible Galaxy. """ github_user = context.CLIARGS['github_user'] github_repo = context.CLIARGS['github_repo'] resp = self.api.delete_role(github_user, github_repo) if len(resp['deleted_roles']) > 1: display.display("Deleted the following roles:") display.display("ID User Name") display.display("------ --------------- ----------") for role in resp['deleted_roles']: display.display("%-8s %-15s %s" % (role.id, role.namespace, role.name)) display.display(resp['status']) return True ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/inventory.py0000644000000000000000000004005100000000000021437 0ustar00rootroot00000000000000# Copyright: (c) 2017, Brian Coca # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import sys import argparse from operator import attrgetter from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleError, AnsibleOptionsError from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.utils.vars import combine_vars from ansible.utils.display import Display from ansible.vars.plugins import get_vars_from_inventory_sources, get_vars_from_path display = Display() INTERNAL_VARS = frozenset(['ansible_diff_mode', 'ansible_config_file', 'ansible_facts', 'ansible_forks', 'ansible_inventory_sources', 'ansible_limit', 'ansible_playbook_python', 'ansible_run_tags', 'ansible_skip_tags', 'ansible_verbosity', 'ansible_version', 'inventory_dir', 'inventory_file', 'inventory_hostname', 'inventory_hostname_short', 'groups', 'group_names', 'omit', 'playbook_dir', ]) class InventoryCLI(CLI): ''' used to display or dump the configured inventory as Ansible sees it ''' ARGUMENTS = {'host': 'The name of a host to match in the inventory, relevant when using --list', 'group': 'The name of a group in the inventory, relevant when using --graph', } def __init__(self, args): super(InventoryCLI, self).__init__(args) self.vm = None self.loader = None self.inventory = None def init_parser(self): super(InventoryCLI, self).init_parser( usage='usage: %prog [options] [host|group]', epilog='Show Ansible inventory information, by default it uses the inventory script JSON format') opt_help.add_inventory_options(self.parser) opt_help.add_vault_options(self.parser) opt_help.add_basedir_options(self.parser) opt_help.add_runtask_options(self.parser) # remove unused default options self.parser.add_argument('-l', '--limit', help=argparse.SUPPRESS, action=opt_help.UnrecognizedArgument, nargs='?') self.parser.add_argument('--list-hosts', help=argparse.SUPPRESS, action=opt_help.UnrecognizedArgument) self.parser.add_argument('args', metavar='host|group', nargs='?') # Actions action_group = self.parser.add_argument_group("Actions", "One of following must be used on invocation, ONLY ONE!") action_group.add_argument("--list", action="store_true", default=False, dest='list', help='Output all hosts info, works as inventory script') action_group.add_argument("--host", action="store", default=None, dest='host', help='Output specific host info, works as inventory script') action_group.add_argument("--graph", action="store_true", default=False, dest='graph', help='create inventory graph, if supplying pattern it must be a valid group name') self.parser.add_argument_group(action_group) # graph self.parser.add_argument("-y", "--yaml", action="store_true", default=False, dest='yaml', help='Use YAML format instead of default JSON, ignored for --graph') self.parser.add_argument('--toml', action='store_true', default=False, dest='toml', help='Use TOML format instead of default JSON, ignored for --graph') self.parser.add_argument("--vars", action="store_true", default=False, dest='show_vars', help='Add vars to graph display, ignored unless used with --graph') # list self.parser.add_argument("--export", action="store_true", default=C.INVENTORY_EXPORT, dest='export', help="When doing an --list, represent in a way that is optimized for export," "not as an accurate representation of how Ansible has processed it") self.parser.add_argument('--output', default=None, dest='output_file', help="When doing --list, send the inventory to a file instead of to the screen") # self.parser.add_argument("--ignore-vars-plugins", action="store_true", default=False, dest='ignore_vars_plugins', # help="When doing an --list, skip vars data from vars plugins, by default, this would include group_vars/ and host_vars/") def post_process_args(self, options): options = super(InventoryCLI, self).post_process_args(options) display.verbosity = options.verbosity self.validate_conflicts(options) # there can be only one! and, at least, one! used = 0 for opt in (options.list, options.host, options.graph): if opt: used += 1 if used == 0: raise AnsibleOptionsError("No action selected, at least one of --host, --graph or --list needs to be specified.") elif used > 1: raise AnsibleOptionsError("Conflicting options used, only one of --host, --graph or --list can be used at the same time.") # set host pattern to default if not supplied if options.args: options.pattern = options.args else: options.pattern = 'all' return options def run(self): super(InventoryCLI, self).run() # Initialize needed objects self.loader, self.inventory, self.vm = self._play_prereqs() results = None if context.CLIARGS['host']: hosts = self.inventory.get_hosts(context.CLIARGS['host']) if len(hosts) != 1: raise AnsibleOptionsError("You must pass a single valid host to --host parameter") myvars = self._get_host_variables(host=hosts[0]) # FIXME: should we template first? results = self.dump(myvars) elif context.CLIARGS['graph']: results = self.inventory_graph() elif context.CLIARGS['list']: top = self._get_group('all') if context.CLIARGS['yaml']: results = self.yaml_inventory(top) elif context.CLIARGS['toml']: results = self.toml_inventory(top) else: results = self.json_inventory(top) results = self.dump(results) if results: outfile = context.CLIARGS['output_file'] if outfile is None: # FIXME: pager? display.display(results) else: try: with open(to_bytes(outfile), 'wb') as f: f.write(to_bytes(results)) except (OSError, IOError) as e: raise AnsibleError('Unable to write to destination file (%s): %s' % (to_native(outfile), to_native(e))) sys.exit(0) sys.exit(1) @staticmethod def dump(stuff): if context.CLIARGS['yaml']: import yaml from ansible.parsing.yaml.dumper import AnsibleDumper results = to_text(yaml.dump(stuff, Dumper=AnsibleDumper, default_flow_style=False, allow_unicode=True)) elif context.CLIARGS['toml']: from ansible.plugins.inventory.toml import toml_dumps, HAS_TOML if not HAS_TOML: raise AnsibleError( 'The python "toml" library is required when using the TOML output format' ) try: results = toml_dumps(stuff) except KeyError as e: raise AnsibleError( 'The source inventory contains a non-string key (%s) which cannot be represented in TOML. ' 'The specified key will need to be converted to a string. Be aware that if your playbooks ' 'expect this key to be non-string, your playbooks will need to be modified to support this ' 'change.' % e.args[0] ) else: import json from ansible.parsing.ajson import AnsibleJSONEncoder try: results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=True, indent=4, preprocess_unsafe=True, ensure_ascii=False) except TypeError as e: results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=False, indent=4, preprocess_unsafe=True, ensure_ascii=False) display.warning("Could not sort JSON output due to issues while sorting keys: %s" % to_native(e)) return results def _get_group_variables(self, group): # get info from inventory source res = group.get_vars() # Always load vars plugins res = combine_vars(res, get_vars_from_inventory_sources(self.loader, self.inventory._sources, [group], 'all')) if context.CLIARGS['basedir']: res = combine_vars(res, get_vars_from_path(self.loader, context.CLIARGS['basedir'], [group], 'all')) if group.priority != 1: res['ansible_group_priority'] = group.priority return self._remove_internal(res) def _get_host_variables(self, host): if context.CLIARGS['export']: # only get vars defined directly host hostvars = host.get_vars() # Always load vars plugins hostvars = combine_vars(hostvars, get_vars_from_inventory_sources(self.loader, self.inventory._sources, [host], 'all')) if context.CLIARGS['basedir']: hostvars = combine_vars(hostvars, get_vars_from_path(self.loader, context.CLIARGS['basedir'], [host], 'all')) else: # get all vars flattened by host, but skip magic hostvars hostvars = self.vm.get_vars(host=host, include_hostvars=False, stage='all') return self._remove_internal(hostvars) def _get_group(self, gname): group = self.inventory.groups.get(gname) return group @staticmethod def _remove_internal(dump): for internal in INTERNAL_VARS: if internal in dump: del dump[internal] return dump @staticmethod def _remove_empty(dump): # remove empty keys for x in ('hosts', 'vars', 'children'): if x in dump and not dump[x]: del dump[x] @staticmethod def _show_vars(dump, depth): result = [] for (name, val) in sorted(dump.items()): result.append(InventoryCLI._graph_name('{%s = %s}' % (name, val), depth)) return result @staticmethod def _graph_name(name, depth=0): if depth: name = " |" * (depth) + "--%s" % name return name def _graph_group(self, group, depth=0): result = [self._graph_name('@%s:' % group.name, depth)] depth = depth + 1 for kid in sorted(group.child_groups, key=attrgetter('name')): result.extend(self._graph_group(kid, depth)) if group.name != 'all': for host in sorted(group.hosts, key=attrgetter('name')): result.append(self._graph_name(host.name, depth)) if context.CLIARGS['show_vars']: result.extend(self._show_vars(self._get_host_variables(host), depth + 1)) if context.CLIARGS['show_vars']: result.extend(self._show_vars(self._get_group_variables(group), depth)) return result def inventory_graph(self): start_at = self._get_group(context.CLIARGS['pattern']) if start_at: return '\n'.join(self._graph_group(start_at)) else: raise AnsibleOptionsError("Pattern must be valid group name when using --graph") def json_inventory(self, top): seen = set() def format_group(group): results = {} results[group.name] = {} if group.name != 'all': results[group.name]['hosts'] = [h.name for h in sorted(group.hosts, key=attrgetter('name'))] results[group.name]['children'] = [] for subgroup in sorted(group.child_groups, key=attrgetter('name')): results[group.name]['children'].append(subgroup.name) if subgroup.name not in seen: results.update(format_group(subgroup)) seen.add(subgroup.name) if context.CLIARGS['export']: results[group.name]['vars'] = self._get_group_variables(group) self._remove_empty(results[group.name]) if not results[group.name]: del results[group.name] return results results = format_group(top) # populate meta results['_meta'] = {'hostvars': {}} hosts = self.inventory.get_hosts() for host in hosts: hvars = self._get_host_variables(host) if hvars: results['_meta']['hostvars'][host.name] = hvars return results def yaml_inventory(self, top): seen = [] def format_group(group): results = {} # initialize group + vars results[group.name] = {} # subgroups results[group.name]['children'] = {} for subgroup in sorted(group.child_groups, key=attrgetter('name')): if subgroup.name != 'all': results[group.name]['children'].update(format_group(subgroup)) # hosts for group results[group.name]['hosts'] = {} if group.name != 'all': for h in sorted(group.hosts, key=attrgetter('name')): myvars = {} if h.name not in seen: # avoid defining host vars more than once seen.append(h.name) myvars = self._get_host_variables(host=h) results[group.name]['hosts'][h.name] = myvars if context.CLIARGS['export']: gvars = self._get_group_variables(group) if gvars: results[group.name]['vars'] = gvars self._remove_empty(results[group.name]) return results return format_group(top) def toml_inventory(self, top): seen = set() has_ungrouped = bool(next(g.hosts for g in top.child_groups if g.name == 'ungrouped')) def format_group(group): results = {} results[group.name] = {} results[group.name]['children'] = [] for subgroup in sorted(group.child_groups, key=attrgetter('name')): if subgroup.name == 'ungrouped' and not has_ungrouped: continue if group.name != 'all': results[group.name]['children'].append(subgroup.name) results.update(format_group(subgroup)) if group.name != 'all': for host in sorted(group.hosts, key=attrgetter('name')): if host.name not in seen: seen.add(host.name) host_vars = self._get_host_variables(host=host) else: host_vars = {} try: results[group.name]['hosts'][host.name] = host_vars except KeyError: results[group.name]['hosts'] = {host.name: host_vars} if context.CLIARGS['export']: results[group.name]['vars'] = self._get_group_variables(group) self._remove_empty(results[group.name]) if not results[group.name]: del results[group.name] return results results = format_group(top) return results ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/playbook.py0000644000000000000000000002346000000000000021227 0ustar00rootroot00000000000000# (c) 2012, Michael DeHaan # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import stat from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleError from ansible.executor.playbook_executor import PlaybookExecutor from ansible.module_utils._text import to_bytes from ansible.playbook.block import Block from ansible.plugins.loader import add_all_plugin_dirs from ansible.utils.collection_loader import AnsibleCollectionConfig from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path, _get_collection_playbook_path from ansible.utils.display import Display display = Display() class PlaybookCLI(CLI): ''' the tool to run *Ansible playbooks*, which are a configuration and multinode deployment system. See the project home page (https://docs.ansible.com) for more information. ''' def init_parser(self): # create parser for CLI options super(PlaybookCLI, self).init_parser( usage="%prog [options] playbook.yml [playbook2 ...]", desc="Runs Ansible playbooks, executing the defined tasks on the targeted hosts.") opt_help.add_connect_options(self.parser) opt_help.add_meta_options(self.parser) opt_help.add_runas_options(self.parser) opt_help.add_subset_options(self.parser) opt_help.add_check_options(self.parser) opt_help.add_inventory_options(self.parser) opt_help.add_runtask_options(self.parser) opt_help.add_vault_options(self.parser) opt_help.add_fork_options(self.parser) opt_help.add_module_options(self.parser) # ansible playbook specific opts self.parser.add_argument('--list-tasks', dest='listtasks', action='store_true', help="list all tasks that would be executed") self.parser.add_argument('--list-tags', dest='listtags', action='store_true', help="list all available tags") self.parser.add_argument('--step', dest='step', action='store_true', help="one-step-at-a-time: confirm each task before running") self.parser.add_argument('--start-at-task', dest='start_at_task', help="start the playbook at the task matching this name") self.parser.add_argument('args', help='Playbook(s)', metavar='playbook', nargs='+') def post_process_args(self, options): options = super(PlaybookCLI, self).post_process_args(options) display.verbosity = options.verbosity self.validate_conflicts(options, runas_opts=True, fork_opts=True) return options def run(self): super(PlaybookCLI, self).run() # Note: slightly wrong, this is written so that implicit localhost # manages passwords sshpass = None becomepass = None passwords = {} # initial error check, to make sure all specified playbooks are accessible # before we start running anything through the playbook executor # also prep plugin paths b_playbook_dirs = [] for playbook in context.CLIARGS['args']: # resolve if it is collection playbook with FQCN notation, if not, leaves unchanged resource = _get_collection_playbook_path(playbook) if resource is not None: playbook_collection = resource[2] else: # not an FQCN so must be a file if not os.path.exists(playbook): raise AnsibleError("the playbook: %s could not be found" % playbook) if not (os.path.isfile(playbook) or stat.S_ISFIFO(os.stat(playbook).st_mode)): raise AnsibleError("the playbook: %s does not appear to be a file" % playbook) # check if playbook is from collection (path can be passed directly) playbook_collection = _get_collection_name_from_path(playbook) # don't add collection playbooks to adjacency search path if not playbook_collection: # setup dirs to enable loading plugins from all playbooks in case they add callbacks/inventory/etc b_playbook_dir = os.path.dirname(os.path.abspath(to_bytes(playbook, errors='surrogate_or_strict'))) add_all_plugin_dirs(b_playbook_dir) b_playbook_dirs.append(b_playbook_dir) if b_playbook_dirs: # allow collections adjacent to these playbooks # we use list copy to avoid opening up 'adjacency' in the previous loop AnsibleCollectionConfig.playbook_paths = b_playbook_dirs # don't deal with privilege escalation or passwords when we don't need to if not (context.CLIARGS['listhosts'] or context.CLIARGS['listtasks'] or context.CLIARGS['listtags'] or context.CLIARGS['syntax']): (sshpass, becomepass) = self.ask_passwords() passwords = {'conn_pass': sshpass, 'become_pass': becomepass} # create base objects loader, inventory, variable_manager = self._play_prereqs() # (which is not returned in list_hosts()) is taken into account for # warning if inventory is empty. But it can't be taken into account for # checking if limit doesn't match any hosts. Instead we don't worry about # limit if only implicit localhost was in inventory to start with. # # Fix this when we rewrite inventory by making localhost a real host (and thus show up in list_hosts()) CLI.get_host_list(inventory, context.CLIARGS['subset']) # flush fact cache if requested if context.CLIARGS['flush_cache']: self._flush_cache(inventory, variable_manager) # create the playbook executor, which manages running the plays via a task queue manager pbex = PlaybookExecutor(playbooks=context.CLIARGS['args'], inventory=inventory, variable_manager=variable_manager, loader=loader, passwords=passwords) results = pbex.run() if isinstance(results, list): for p in results: display.display('\nplaybook: %s' % p['playbook']) for idx, play in enumerate(p['plays']): if play._included_path is not None: loader.set_basedir(play._included_path) else: pb_dir = os.path.realpath(os.path.dirname(p['playbook'])) loader.set_basedir(pb_dir) # show host list if we were able to template into a list try: host_list = ','.join(play.hosts) except TypeError: host_list = '' msg = "\n play #%d (%s): %s" % (idx + 1, host_list, play.name) mytags = set(play.tags) msg += '\tTAGS: [%s]' % (','.join(mytags)) if context.CLIARGS['listhosts']: playhosts = set(inventory.get_hosts(play.hosts)) msg += "\n pattern: %s\n hosts (%d):" % (play.hosts, len(playhosts)) for host in playhosts: msg += "\n %s" % host display.display(msg) all_tags = set() if context.CLIARGS['listtags'] or context.CLIARGS['listtasks']: taskmsg = '' if context.CLIARGS['listtasks']: taskmsg = ' tasks:\n' def _process_block(b): taskmsg = '' for task in b.block: if isinstance(task, Block): taskmsg += _process_block(task) else: if task.action in C._ACTION_META and task.implicit: continue all_tags.update(task.tags) if context.CLIARGS['listtasks']: cur_tags = list(mytags.union(set(task.tags))) cur_tags.sort() if task.name: taskmsg += " %s" % task.get_name() else: taskmsg += " %s" % task.action taskmsg += "\tTAGS: [%s]\n" % ', '.join(cur_tags) return taskmsg all_vars = variable_manager.get_vars(play=play) for block in play.compile(): block = block.filter_tagged_tasks(all_vars) if not block.has_tasks(): continue taskmsg += _process_block(block) if context.CLIARGS['listtags']: cur_tags = list(mytags.union(all_tags)) cur_tags.sort() taskmsg += " TASK TAGS: [%s]\n" % ', '.join(cur_tags) display.display(taskmsg) return 0 else: return results @staticmethod def _flush_cache(inventory, variable_manager): for host in inventory.list_hosts(): hostname = host.get_name() variable_manager.clear_facts(hostname) ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/pull.py0000644000000000000000000004014000000000000020355 0ustar00rootroot00000000000000# Copyright: (c) 2012, Michael DeHaan # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import datetime import os import platform import random import shutil import socket import sys import time from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleOptionsError from ansible.module_utils._text import to_native, to_text from ansible.module_utils.six.moves import shlex_quote from ansible.plugins.loader import module_loader from ansible.utils.cmd_functions import run_cmd from ansible.utils.display import Display display = Display() class PullCLI(CLI): ''' Used to pull a remote copy of ansible on each managed node, each set to run via cron and update playbook source via a source repository. This inverts the default *push* architecture of ansible into a *pull* architecture, which has near-limitless scaling potential. The setup playbook can be tuned to change the cron frequency, logging locations, and parameters to ansible-pull. This is useful both for extreme scale-out as well as periodic remediation. Usage of the 'fetch' module to retrieve logs from ansible-pull runs would be an excellent way to gather and analyze remote logs from ansible-pull. ''' DEFAULT_REPO_TYPE = 'git' DEFAULT_PLAYBOOK = 'local.yml' REPO_CHOICES = ('git', 'subversion', 'hg', 'bzr') PLAYBOOK_ERRORS = { 1: 'File does not exist', 2: 'File is not readable', } ARGUMENTS = {'playbook.yml': 'The name of one the YAML format files to run as an Ansible playbook.' 'This can be a relative path within the checkout. By default, Ansible will' "look for a playbook based on the host's fully-qualified domain name," 'on the host hostname and finally a playbook named *local.yml*.', } SKIP_INVENTORY_DEFAULTS = True @staticmethod def _get_inv_cli(): inv_opts = '' if context.CLIARGS.get('inventory', False): for inv in context.CLIARGS['inventory']: if isinstance(inv, list): inv_opts += " -i '%s' " % ','.join(inv) elif ',' in inv or os.path.exists(inv): inv_opts += ' -i %s ' % inv return inv_opts def init_parser(self): ''' create an options parser for bin/ansible ''' super(PullCLI, self).init_parser( usage='%prog -U [options] []', desc="pulls playbooks from a VCS repo and executes them for the local host") # Do not add check_options as there's a conflict with --checkout/-C opt_help.add_connect_options(self.parser) opt_help.add_vault_options(self.parser) opt_help.add_runtask_options(self.parser) opt_help.add_subset_options(self.parser) opt_help.add_inventory_options(self.parser) opt_help.add_module_options(self.parser) opt_help.add_runas_prompt_options(self.parser) self.parser.add_argument('args', help='Playbook(s)', metavar='playbook.yml', nargs='*') # options unique to pull self.parser.add_argument('--purge', default=False, action='store_true', help='purge checkout after playbook run') self.parser.add_argument('-o', '--only-if-changed', dest='ifchanged', default=False, action='store_true', help='only run the playbook if the repository has been updated') self.parser.add_argument('-s', '--sleep', dest='sleep', default=None, help='sleep for random interval (between 0 and n number of seconds) before starting. ' 'This is a useful way to disperse git requests') self.parser.add_argument('-f', '--force', dest='force', default=False, action='store_true', help='run the playbook even if the repository could not be updated') self.parser.add_argument('-d', '--directory', dest='dest', default=None, help='absolute path of repository checkout directory (relative paths are not supported)') self.parser.add_argument('-U', '--url', dest='url', default=None, help='URL of the playbook repository') self.parser.add_argument('--full', dest='fullclone', action='store_true', help='Do a full clone, instead of a shallow one.') self.parser.add_argument('-C', '--checkout', dest='checkout', help='branch/tag/commit to checkout. Defaults to behavior of repository module.') self.parser.add_argument('--accept-host-key', default=False, dest='accept_host_key', action='store_true', help='adds the hostkey for the repo url if not already added') self.parser.add_argument('-m', '--module-name', dest='module_name', default=self.DEFAULT_REPO_TYPE, help='Repository module name, which ansible will use to check out the repo. Choices are %s. Default is %s.' % (self.REPO_CHOICES, self.DEFAULT_REPO_TYPE)) self.parser.add_argument('--verify-commit', dest='verify', default=False, action='store_true', help='verify GPG signature of checked out commit, if it fails abort running the playbook. ' 'This needs the corresponding VCS module to support such an operation') self.parser.add_argument('--clean', dest='clean', default=False, action='store_true', help='modified files in the working repository will be discarded') self.parser.add_argument('--track-subs', dest='tracksubs', default=False, action='store_true', help='submodules will track the latest changes. This is equivalent to specifying the --remote flag to git submodule update') # add a subset of the check_opts flag group manually, as the full set's # shortcodes conflict with above --checkout/-C self.parser.add_argument("--check", default=False, dest='check', action='store_true', help="don't make any changes; instead, try to predict some of the changes that may occur") self.parser.add_argument("--diff", default=C.DIFF_ALWAYS, dest='diff', action='store_true', help="when changing (small) files and templates, show the differences in those files; works great with --check") def post_process_args(self, options): options = super(PullCLI, self).post_process_args(options) if not options.dest: hostname = socket.getfqdn() # use a hostname dependent directory, in case of $HOME on nfs options.dest = os.path.join('~/.ansible/pull', hostname) options.dest = os.path.expandvars(os.path.expanduser(options.dest)) if os.path.exists(options.dest) and not os.path.isdir(options.dest): raise AnsibleOptionsError("%s is not a valid or accessible directory." % options.dest) if options.sleep: try: secs = random.randint(0, int(options.sleep)) options.sleep = secs except ValueError: raise AnsibleOptionsError("%s is not a number." % options.sleep) if not options.url: raise AnsibleOptionsError("URL for repository not specified, use -h for help") if options.module_name not in self.REPO_CHOICES: raise AnsibleOptionsError("Unsupported repo module %s, choices are %s" % (options.module_name, ','.join(self.REPO_CHOICES))) display.verbosity = options.verbosity self.validate_conflicts(options) return options def run(self): ''' use Runner lib to do SSH things ''' super(PullCLI, self).run() # log command line now = datetime.datetime.now() display.display(now.strftime("Starting Ansible Pull at %F %T")) display.display(' '.join(sys.argv)) # Build Checkout command # Now construct the ansible command node = platform.node() host = socket.getfqdn() limit_opts = 'localhost,%s,127.0.0.1' % ','.join(set([host, node, host.split('.')[0], node.split('.')[0]])) base_opts = '-c local ' if context.CLIARGS['verbosity'] > 0: base_opts += ' -%s' % ''.join(["v" for x in range(0, context.CLIARGS['verbosity'])]) # Attempt to use the inventory passed in as an argument # It might not yet have been downloaded so use localhost as default inv_opts = self._get_inv_cli() if not inv_opts: inv_opts = " -i localhost, " # avoid interpreter discovery since we already know which interpreter to use on localhost inv_opts += '-e %s ' % shlex_quote('ansible_python_interpreter=%s' % sys.executable) # SCM specific options if context.CLIARGS['module_name'] == 'git': repo_opts = "name=%s dest=%s" % (context.CLIARGS['url'], context.CLIARGS['dest']) if context.CLIARGS['checkout']: repo_opts += ' version=%s' % context.CLIARGS['checkout'] if context.CLIARGS['accept_host_key']: repo_opts += ' accept_hostkey=yes' if context.CLIARGS['private_key_file']: repo_opts += ' key_file=%s' % context.CLIARGS['private_key_file'] if context.CLIARGS['verify']: repo_opts += ' verify_commit=yes' if context.CLIARGS['tracksubs']: repo_opts += ' track_submodules=yes' if not context.CLIARGS['fullclone']: repo_opts += ' depth=1' elif context.CLIARGS['module_name'] == 'subversion': repo_opts = "repo=%s dest=%s" % (context.CLIARGS['url'], context.CLIARGS['dest']) if context.CLIARGS['checkout']: repo_opts += ' revision=%s' % context.CLIARGS['checkout'] if not context.CLIARGS['fullclone']: repo_opts += ' export=yes' elif context.CLIARGS['module_name'] == 'hg': repo_opts = "repo=%s dest=%s" % (context.CLIARGS['url'], context.CLIARGS['dest']) if context.CLIARGS['checkout']: repo_opts += ' revision=%s' % context.CLIARGS['checkout'] elif context.CLIARGS['module_name'] == 'bzr': repo_opts = "name=%s dest=%s" % (context.CLIARGS['url'], context.CLIARGS['dest']) if context.CLIARGS['checkout']: repo_opts += ' version=%s' % context.CLIARGS['checkout'] else: raise AnsibleOptionsError('Unsupported (%s) SCM module for pull, choices are: %s' % (context.CLIARGS['module_name'], ','.join(self.REPO_CHOICES))) # options common to all supported SCMS if context.CLIARGS['clean']: repo_opts += ' force=yes' path = module_loader.find_plugin(context.CLIARGS['module_name']) if path is None: raise AnsibleOptionsError(("module '%s' not found.\n" % context.CLIARGS['module_name'])) bin_path = os.path.dirname(os.path.abspath(sys.argv[0])) # hardcode local and inventory/host as this is just meant to fetch the repo cmd = '%s/ansible %s %s -m %s -a "%s" all -l "%s"' % (bin_path, inv_opts, base_opts, context.CLIARGS['module_name'], repo_opts, limit_opts) for ev in context.CLIARGS['extra_vars']: cmd += ' -e %s' % shlex_quote(ev) # Nap? if context.CLIARGS['sleep']: display.display("Sleeping for %d seconds..." % context.CLIARGS['sleep']) time.sleep(context.CLIARGS['sleep']) # RUN the Checkout command display.debug("running ansible with VCS module to checkout repo") display.vvvv('EXEC: %s' % cmd) rc, b_out, b_err = run_cmd(cmd, live=True) if rc != 0: if context.CLIARGS['force']: display.warning("Unable to update repository. Continuing with (forced) run of playbook.") else: return rc elif context.CLIARGS['ifchanged'] and b'"changed": true' not in b_out: display.display("Repository has not changed, quitting.") return 0 playbook = self.select_playbook(context.CLIARGS['dest']) if playbook is None: raise AnsibleOptionsError("Could not find a playbook to run.") # Build playbook command cmd = '%s/ansible-playbook %s %s' % (bin_path, base_opts, playbook) if context.CLIARGS['vault_password_files']: for vault_password_file in context.CLIARGS['vault_password_files']: cmd += " --vault-password-file=%s" % vault_password_file if context.CLIARGS['vault_ids']: for vault_id in context.CLIARGS['vault_ids']: cmd += " --vault-id=%s" % vault_id for ev in context.CLIARGS['extra_vars']: cmd += ' -e %s' % shlex_quote(ev) if context.CLIARGS['become_ask_pass']: cmd += ' --ask-become-pass' if context.CLIARGS['skip_tags']: cmd += ' --skip-tags "%s"' % to_native(u','.join(context.CLIARGS['skip_tags'])) if context.CLIARGS['tags']: cmd += ' -t "%s"' % to_native(u','.join(context.CLIARGS['tags'])) if context.CLIARGS['subset']: cmd += ' -l "%s"' % context.CLIARGS['subset'] else: cmd += ' -l "%s"' % limit_opts if context.CLIARGS['check']: cmd += ' -C' if context.CLIARGS['diff']: cmd += ' -D' os.chdir(context.CLIARGS['dest']) # redo inventory options as new files might exist now inv_opts = self._get_inv_cli() if inv_opts: cmd += inv_opts # RUN THE PLAYBOOK COMMAND display.debug("running ansible-playbook to do actual work") display.debug('EXEC: %s' % cmd) rc, b_out, b_err = run_cmd(cmd, live=True) if context.CLIARGS['purge']: os.chdir('/') try: shutil.rmtree(context.CLIARGS['dest']) except Exception as e: display.error(u"Failed to remove %s: %s" % (context.CLIARGS['dest'], to_text(e))) return rc @staticmethod def try_playbook(path): if not os.path.exists(path): return 1 if not os.access(path, os.R_OK): return 2 return 0 @staticmethod def select_playbook(path): playbook = None errors = [] if context.CLIARGS['args'] and context.CLIARGS['args'][0] is not None: playbooks = [] for book in context.CLIARGS['args']: book_path = os.path.join(path, book) rc = PullCLI.try_playbook(book_path) if rc != 0: errors.append("%s: %s" % (book_path, PullCLI.PLAYBOOK_ERRORS[rc])) continue playbooks.append(book_path) if 0 < len(errors): display.warning("\n".join(errors)) elif len(playbooks) == len(context.CLIARGS['args']): playbook = " ".join(playbooks) return playbook else: fqdn = socket.getfqdn() hostpb = os.path.join(path, fqdn + '.yml') shorthostpb = os.path.join(path, fqdn.split('.')[0] + '.yml') localpb = os.path.join(path, PullCLI.DEFAULT_PLAYBOOK) for pb in [hostpb, shorthostpb, localpb]: rc = PullCLI.try_playbook(pb) if rc == 0: playbook = pb break else: errors.append("%s: %s" % (pb, PullCLI.PLAYBOOK_ERRORS[rc])) if playbook is None: display.warning("\n".join(errors)) return playbook ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.972559 ansible-core-2.12.0/lib/ansible/cli/scripts/0000755000000000000000000000000000000000000020517 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/scripts/__init__.py0000644000000000000000000000000000000000000022616 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/scripts/ansible_cli_stub.py0000755000000000000000000001343600000000000024404 0ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # (c) 2012, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # PYTHON_ARGCOMPLETE_OK from __future__ import (absolute_import, division, print_function) __metaclass__ = type import errno import os import shutil import sys import traceback # Used for determining if the system is running a new enough python version # and should only restrict on our documented minimum versions _PY38_MIN = sys.version_info[:2] >= (3, 8) if not _PY38_MIN: raise SystemExit( 'ERROR: Ansible requires Python 3.8 or newer on the controller. ' 'Current version: %s' % ''.join(sys.version.splitlines()) ) # These lines appear after the PY38 check, to ensure the "friendly" error happens before # any invalid syntax appears in other files that may get imported from ansible import context from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError from ansible.module_utils._text import to_text from pathlib import Path class LastResort(object): # OUTPUT OF LAST RESORT def display(self, msg, log_only=None): print(msg, file=sys.stderr) def error(self, msg, wrap_text=None): print(msg, file=sys.stderr) if __name__ == '__main__': display = LastResort() try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace import ansible.constants as C from ansible.utils.display import Display, initialize_locale except AnsibleOptionsError as e: display.error(to_text(e), wrap_text=False) sys.exit(5) initialize_locale() cli = None me = Path(sys.argv[0]).name try: display = Display() display.debug("starting run") sub = None target = me.split('-') if target[-1][0].isdigit(): # Remove any version or python version info as downstreams # sometimes add that target = target[:-1] if len(target) > 1: sub = target[1] myclass = "%sCLI" % sub.capitalize() elif target[0] == 'ansible': sub = 'adhoc' myclass = 'AdHocCLI' else: raise AnsibleError("Unknown Ansible alias: %s" % me) try: mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass) except ImportError as e: # ImportError members have changed in py3 if 'msg' in dir(e): msg = e.msg else: msg = e.message if msg.endswith(' %s' % sub): raise AnsibleError("Ansible sub-program not implemented: %s" % me) else: raise ansible_dir = Path("~/.ansible").expanduser() try: ansible_dir.mkdir(mode=0o700) except OSError as exc: if exc.errno != errno.EEXIST: display.warning( "Failed to create the directory '%s': %s" % (ansible_dir, to_text(exc, errors='surrogate_or_replace')) ) else: display.debug("Created the '%s' directory" % ansible_dir) try: args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv] except UnicodeError: display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8') display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc())) exit_code = 6 else: cli = mycli(args) exit_code = cli.run() except AnsibleOptionsError as e: cli.parser.print_help() display.error(to_text(e), wrap_text=False) exit_code = 5 except AnsibleParserError as e: display.error(to_text(e), wrap_text=False) exit_code = 4 # TQM takes care of these, but leaving comment to reserve the exit codes # except AnsibleHostUnreachable as e: # display.error(str(e)) # exit_code = 3 # except AnsibleHostFailed as e: # display.error(str(e)) # exit_code = 2 except AnsibleError as e: display.error(to_text(e), wrap_text=False) exit_code = 1 except KeyboardInterrupt: display.error("User interrupted execution") exit_code = 99 except Exception as e: if C.DEFAULT_DEBUG: # Show raw stacktraces in debug mode, It also allow pdb to # enter post mortem mode. raise have_cli_options = bool(context.CLIARGS) display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False) if not have_cli_options or have_cli_options and context.CLIARGS['verbosity'] > 2: log_only = False if hasattr(e, 'orig_exc'): display.vvv('\nexception type: %s' % to_text(type(e.orig_exc))) why = to_text(e.orig_exc) if to_text(e) != why: display.vvv('\noriginal msg: %s' % why) else: display.display("to see the full traceback, use -vvv") log_only = True display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only) exit_code = 250 sys.exit(exit_code) ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5475562 ansible-core-2.12.0/lib/ansible/cli/scripts/ansible_connection_cli_stub.py0000755000000000000000000003213000000000000026613 0ustar00rootroot00000000000000#!/usr/bin/env python # Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import fcntl import hashlib import os import signal import socket import sys import time import traceback import errno import json from contextlib import contextmanager from ansible import constants as C from ansible.module_utils._text import to_bytes, to_text from ansible.module_utils.six import PY3 from ansible.module_utils.six.moves import cPickle, StringIO from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data from ansible.module_utils.service import fork_process from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder from ansible.playbook.play_context import PlayContext from ansible.plugins.loader import connection_loader from ansible.utils.path import unfrackpath, makedirs_safe from ansible.utils.display import Display from ansible.utils.jsonrpc import JsonRpcServer def read_stream(byte_stream): size = int(byte_stream.readline().strip()) data = byte_stream.read(size) if len(data) < size: raise Exception("EOF found before data was complete") data_hash = to_text(byte_stream.readline().strip()) if data_hash != hashlib.sha1(data).hexdigest(): raise Exception("Read {0} bytes, but data did not match checksum".format(size)) # restore escaped loose \r characters data = data.replace(br'\r', b'\r') return data @contextmanager def file_lock(lock_path): """ Uses contextmanager to create and release a file lock based on the given path. This allows us to create locks using `with file_lock()` to prevent deadlocks related to failure to unlock properly. """ lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT, 0o600) fcntl.lockf(lock_fd, fcntl.LOCK_EX) yield fcntl.lockf(lock_fd, fcntl.LOCK_UN) os.close(lock_fd) class ConnectionProcess(object): ''' The connection process wraps around a Connection object that manages the connection to a remote device that persists over the playbook ''' def __init__(self, fd, play_context, socket_path, original_path, task_uuid=None, ansible_playbook_pid=None): self.play_context = play_context self.socket_path = socket_path self.original_path = original_path self._task_uuid = task_uuid self.fd = fd self.exception = None self.srv = JsonRpcServer() self.sock = None self.connection = None self._ansible_playbook_pid = ansible_playbook_pid def start(self, variables): try: messages = list() result = {} messages.append(('vvvv', 'control socket path is %s' % self.socket_path)) # If this is a relative path (~ gets expanded later) then plug the # key's path on to the directory we originally came from, so we can # find it now that our cwd is / if self.play_context.private_key_file and self.play_context.private_key_file[0] not in '~/': self.play_context.private_key_file = os.path.join(self.original_path, self.play_context.private_key_file) self.connection = connection_loader.get(self.play_context.connection, self.play_context, '/dev/null', task_uuid=self._task_uuid, ansible_playbook_pid=self._ansible_playbook_pid) try: self.connection.set_options(var_options=variables) except ConnectionError as exc: messages.append(('debug', to_text(exc))) raise ConnectionError('Unable to decode JSON from response set_options. See the debug log for more information.') self.connection._socket_path = self.socket_path self.srv.register(self.connection) messages.extend([('vvvv', msg) for msg in sys.stdout.getvalue().splitlines()]) self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.sock.bind(self.socket_path) self.sock.listen(1) messages.append(('vvvv', 'local domain socket listeners started successfully')) except Exception as exc: messages.extend(self.connection.pop_messages()) result['error'] = to_text(exc) result['exception'] = traceback.format_exc() finally: result['messages'] = messages self.fd.write(json.dumps(result, cls=AnsibleJSONEncoder)) self.fd.close() def run(self): try: log_messages = self.connection.get_option('persistent_log_messages') while not self.connection._conn_closed: signal.signal(signal.SIGALRM, self.connect_timeout) signal.signal(signal.SIGTERM, self.handler) signal.alarm(self.connection.get_option('persistent_connect_timeout')) self.exception = None (s, addr) = self.sock.accept() signal.alarm(0) signal.signal(signal.SIGALRM, self.command_timeout) while True: data = recv_data(s) if not data: break if log_messages: display.display("jsonrpc request: %s" % data, log_only=True) request = json.loads(to_text(data, errors='surrogate_or_strict')) if request.get('method') == "exec_command" and not self.connection.connected: self.connection._connect() signal.alarm(self.connection.get_option('persistent_command_timeout')) resp = self.srv.handle_request(data) signal.alarm(0) if log_messages: display.display("jsonrpc response: %s" % resp, log_only=True) send_data(s, to_bytes(resp)) s.close() except Exception as e: # socket.accept() will raise EINTR if the socket.close() is called if hasattr(e, 'errno'): if e.errno != errno.EINTR: self.exception = traceback.format_exc() else: self.exception = traceback.format_exc() finally: # allow time for any exception msg send over socket to receive at other end before shutting down time.sleep(0.1) # when done, close the connection properly and cleanup the socket file so it can be recreated self.shutdown() def connect_timeout(self, signum, frame): msg = 'persistent connection idle timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and ' \ 'Troubleshooting Guide.' % self.connection.get_option('persistent_connect_timeout') display.display(msg, log_only=True) raise Exception(msg) def command_timeout(self, signum, frame): msg = 'command timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.'\ % self.connection.get_option('persistent_command_timeout') display.display(msg, log_only=True) raise Exception(msg) def handler(self, signum, frame): msg = 'signal handler called with signal %s.' % signum display.display(msg, log_only=True) raise Exception(msg) def shutdown(self): """ Shuts down the local domain socket """ lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(self.socket_path)) if os.path.exists(self.socket_path): try: if self.sock: self.sock.close() if self.connection: self.connection.close() if self.connection.get_option("persistent_log_messages"): for _level, message in self.connection.pop_messages(): display.display(message, log_only=True) except Exception: pass finally: if os.path.exists(self.socket_path): os.remove(self.socket_path) setattr(self.connection, '_socket_path', None) setattr(self.connection, '_connected', False) if os.path.exists(lock_path): os.remove(lock_path) display.display('shutdown complete', log_only=True) def main(): """ Called to initiate the connect to the remote device """ rc = 0 result = {} messages = list() socket_path = None # Need stdin as a byte stream if PY3: stdin = sys.stdin.buffer else: stdin = sys.stdin # Note: update the below log capture code after Display.display() is refactored. saved_stdout = sys.stdout sys.stdout = StringIO() try: # read the play context data via stdin, which means depickling it vars_data = read_stream(stdin) init_data = read_stream(stdin) if PY3: pc_data = cPickle.loads(init_data, encoding='bytes') variables = cPickle.loads(vars_data, encoding='bytes') else: pc_data = cPickle.loads(init_data) variables = cPickle.loads(vars_data) play_context = PlayContext() play_context.deserialize(pc_data) display.verbosity = play_context.verbosity except Exception as e: rc = 1 result.update({ 'error': to_text(e), 'exception': traceback.format_exc() }) if rc == 0: ssh = connection_loader.get('ssh', class_only=True) ansible_playbook_pid = sys.argv[1] task_uuid = sys.argv[2] cp = ssh._create_control_path(play_context.remote_addr, play_context.port, play_context.remote_user, play_context.connection, ansible_playbook_pid) # create the persistent connection dir if need be and create the paths # which we will be using later tmp_path = unfrackpath(C.PERSISTENT_CONTROL_PATH_DIR) makedirs_safe(tmp_path) socket_path = unfrackpath(cp % dict(directory=tmp_path)) lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(socket_path)) with file_lock(lock_path): if not os.path.exists(socket_path): messages.append(('vvvv', 'local domain socket does not exist, starting it')) original_path = os.getcwd() r, w = os.pipe() pid = fork_process() if pid == 0: try: os.close(r) wfd = os.fdopen(w, 'w') process = ConnectionProcess(wfd, play_context, socket_path, original_path, task_uuid, ansible_playbook_pid) process.start(variables) except Exception: messages.append(('error', traceback.format_exc())) rc = 1 if rc == 0: process.run() else: process.shutdown() sys.exit(rc) else: os.close(w) rfd = os.fdopen(r, 'r') data = json.loads(rfd.read(), cls=AnsibleJSONDecoder) messages.extend(data.pop('messages')) result.update(data) else: messages.append(('vvvv', 'found existing local domain socket, using it!')) conn = Connection(socket_path) try: conn.set_options(var_options=variables) except ConnectionError as exc: messages.append(('debug', to_text(exc))) raise ConnectionError('Unable to decode JSON from response set_options. See the debug log for more information.') pc_data = to_text(init_data) try: conn.update_play_context(pc_data) conn.set_check_prompt(task_uuid) except Exception as exc: # Only network_cli has update_play context and set_check_prompt, so missing this is # not fatal e.g. netconf if isinstance(exc, ConnectionError) and getattr(exc, 'code', None) == -32601: pass else: result.update({ 'error': to_text(exc), 'exception': traceback.format_exc() }) if os.path.exists(socket_path): messages.extend(Connection(socket_path).pop_messages()) messages.append(('vvvv', sys.stdout.getvalue())) result.update({ 'messages': messages, 'socket_path': socket_path }) sys.stdout = saved_stdout if 'exception' in result: rc = 1 sys.stderr.write(json.dumps(result, cls=AnsibleJSONEncoder)) else: rc = 0 sys.stdout.write(json.dumps(result, cls=AnsibleJSONEncoder)) sys.exit(rc) if __name__ == '__main__': display = Display() main() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/cli/vault.py0000644000000000000000000005305100000000000020541 0ustar00rootroot00000000000000# (c) 2014, James Tanner # Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os import sys from ansible import constants as C from ansible import context from ansible.cli import CLI from ansible.cli.arguments import option_helpers as opt_help from ansible.errors import AnsibleOptionsError from ansible.module_utils._text import to_text, to_bytes from ansible.parsing.dataloader import DataLoader from ansible.parsing.vault import VaultEditor, VaultLib, match_encrypt_secret from ansible.utils.display import Display display = Display() class VaultCLI(CLI): ''' can encrypt any structured data file used by Ansible. This can include *group_vars/* or *host_vars/* inventory variables, variables loaded by *include_vars* or *vars_files*, or variable files passed on the ansible-playbook command line with *-e @file.yml* or *-e @file.json*. Role variables and defaults are also included! Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault. If you'd like to not expose what variables you are using, you can keep an individual task file entirely encrypted. ''' FROM_STDIN = "stdin" FROM_ARGS = "the command line args" FROM_PROMPT = "the interactive prompt" def __init__(self, args): self.b_vault_pass = None self.b_new_vault_pass = None self.encrypt_string_read_stdin = False self.encrypt_secret = None self.encrypt_vault_id = None self.new_encrypt_secret = None self.new_encrypt_vault_id = None super(VaultCLI, self).__init__(args) def init_parser(self): super(VaultCLI, self).init_parser( desc="encryption/decryption utility for Ansible data files", epilog="\nSee '%s --help' for more information on a specific command.\n\n" % os.path.basename(sys.argv[0]) ) common = opt_help.argparse.ArgumentParser(add_help=False) opt_help.add_vault_options(common) opt_help.add_verbosity_options(common) subparsers = self.parser.add_subparsers(dest='action') subparsers.required = True output = opt_help.argparse.ArgumentParser(add_help=False) output.add_argument('--output', default=None, dest='output_file', help='output file name for encrypt or decrypt; use - for stdout', type=opt_help.unfrack_path()) # For encrypting actions, we can also specify which of multiple vault ids should be used for encrypting vault_id = opt_help.argparse.ArgumentParser(add_help=False) vault_id.add_argument('--encrypt-vault-id', default=[], dest='encrypt_vault_id', action='store', type=str, help='the vault id used to encrypt (required if more than one vault-id is provided)') create_parser = subparsers.add_parser('create', help='Create new vault encrypted file', parents=[vault_id, common]) create_parser.set_defaults(func=self.execute_create) create_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file', parents=[output, common]) decrypt_parser.set_defaults(func=self.execute_decrypt) decrypt_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') edit_parser = subparsers.add_parser('edit', help='Edit vault encrypted file', parents=[vault_id, common]) edit_parser.set_defaults(func=self.execute_edit) edit_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') view_parser = subparsers.add_parser('view', help='View vault encrypted file', parents=[common]) view_parser.set_defaults(func=self.execute_view) view_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') encrypt_parser = subparsers.add_parser('encrypt', help='Encrypt YAML file', parents=[common, output, vault_id]) encrypt_parser.set_defaults(func=self.execute_encrypt) encrypt_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') enc_str_parser = subparsers.add_parser('encrypt_string', help='Encrypt a string', parents=[common, output, vault_id]) enc_str_parser.set_defaults(func=self.execute_encrypt_string) enc_str_parser.add_argument('args', help='String to encrypt', metavar='string_to_encrypt', nargs='*') enc_str_parser.add_argument('-p', '--prompt', dest='encrypt_string_prompt', action='store_true', help="Prompt for the string to encrypt") enc_str_parser.add_argument('--show-input', dest='show_string_input', default=False, action='store_true', help='Do not hide input when prompted for the string to encrypt') enc_str_parser.add_argument('-n', '--name', dest='encrypt_string_names', action='append', help="Specify the variable name") enc_str_parser.add_argument('--stdin-name', dest='encrypt_string_stdin_name', default=None, help="Specify the variable name for stdin") rekey_parser = subparsers.add_parser('rekey', help='Re-key a vault encrypted file', parents=[common, vault_id]) rekey_parser.set_defaults(func=self.execute_rekey) rekey_new_group = rekey_parser.add_mutually_exclusive_group() rekey_new_group.add_argument('--new-vault-password-file', default=None, dest='new_vault_password_file', help="new vault password file for rekey", type=opt_help.unfrack_path()) rekey_new_group.add_argument('--new-vault-id', default=None, dest='new_vault_id', type=str, help='the new vault identity to use for rekey') rekey_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*') def post_process_args(self, options): options = super(VaultCLI, self).post_process_args(options) display.verbosity = options.verbosity if options.vault_ids: for vault_id in options.vault_ids: if u';' in vault_id: raise AnsibleOptionsError("'%s' is not a valid vault id. The character ';' is not allowed in vault ids" % vault_id) if getattr(options, 'output_file', None) and len(options.args) > 1: raise AnsibleOptionsError("At most one input file may be used with the --output option") if options.action == 'encrypt_string': if '-' in options.args or not options.args or options.encrypt_string_stdin_name: self.encrypt_string_read_stdin = True # TODO: prompting from stdin and reading from stdin seem mutually exclusive, but verify that. if options.encrypt_string_prompt and self.encrypt_string_read_stdin: raise AnsibleOptionsError('The --prompt option is not supported if also reading input from stdin') return options def run(self): super(VaultCLI, self).run() loader = DataLoader() # set default restrictive umask old_umask = os.umask(0o077) vault_ids = list(context.CLIARGS['vault_ids']) # there are 3 types of actions, those that just 'read' (decrypt, view) and only # need to ask for a password once, and those that 'write' (create, encrypt) that # ask for a new password and confirm it, and 'read/write (rekey) that asks for the # old password, then asks for a new one and confirms it. default_vault_ids = C.DEFAULT_VAULT_IDENTITY_LIST vault_ids = default_vault_ids + vault_ids action = context.CLIARGS['action'] # TODO: instead of prompting for these before, we could let VaultEditor # call a callback when it needs it. if action in ['decrypt', 'view', 'rekey', 'edit']: vault_secrets = self.setup_vault_secrets(loader, vault_ids=vault_ids, vault_password_files=list(context.CLIARGS['vault_password_files']), ask_vault_pass=context.CLIARGS['ask_vault_pass']) if not vault_secrets: raise AnsibleOptionsError("A vault password is required to use Ansible's Vault") if action in ['encrypt', 'encrypt_string', 'create']: encrypt_vault_id = None # no --encrypt-vault-id context.CLIARGS['encrypt_vault_id'] for 'edit' if action not in ['edit']: encrypt_vault_id = context.CLIARGS['encrypt_vault_id'] or C.DEFAULT_VAULT_ENCRYPT_IDENTITY vault_secrets = None vault_secrets = \ self.setup_vault_secrets(loader, vault_ids=vault_ids, vault_password_files=list(context.CLIARGS['vault_password_files']), ask_vault_pass=context.CLIARGS['ask_vault_pass'], create_new_password=True) if len(vault_secrets) > 1 and not encrypt_vault_id: raise AnsibleOptionsError("The vault-ids %s are available to encrypt. Specify the vault-id to encrypt with --encrypt-vault-id" % ','.join([x[0] for x in vault_secrets])) if not vault_secrets: raise AnsibleOptionsError("A vault password is required to use Ansible's Vault") encrypt_secret = match_encrypt_secret(vault_secrets, encrypt_vault_id=encrypt_vault_id) # only one secret for encrypt for now, use the first vault_id and use its first secret # TODO: exception if more than one? self.encrypt_vault_id = encrypt_secret[0] self.encrypt_secret = encrypt_secret[1] if action in ['rekey']: encrypt_vault_id = context.CLIARGS['encrypt_vault_id'] or C.DEFAULT_VAULT_ENCRYPT_IDENTITY # print('encrypt_vault_id: %s' % encrypt_vault_id) # print('default_encrypt_vault_id: %s' % default_encrypt_vault_id) # new_vault_ids should only ever be one item, from # load the default vault ids if we are using encrypt-vault-id new_vault_ids = [] if encrypt_vault_id: new_vault_ids = default_vault_ids if context.CLIARGS['new_vault_id']: new_vault_ids.append(context.CLIARGS['new_vault_id']) new_vault_password_files = [] if context.CLIARGS['new_vault_password_file']: new_vault_password_files.append(context.CLIARGS['new_vault_password_file']) new_vault_secrets = \ self.setup_vault_secrets(loader, vault_ids=new_vault_ids, vault_password_files=new_vault_password_files, ask_vault_pass=context.CLIARGS['ask_vault_pass'], create_new_password=True) if not new_vault_secrets: raise AnsibleOptionsError("A new vault password is required to use Ansible's Vault rekey") # There is only one new_vault_id currently and one new_vault_secret, or we # use the id specified in --encrypt-vault-id new_encrypt_secret = match_encrypt_secret(new_vault_secrets, encrypt_vault_id=encrypt_vault_id) self.new_encrypt_vault_id = new_encrypt_secret[0] self.new_encrypt_secret = new_encrypt_secret[1] loader.set_vault_secrets(vault_secrets) # FIXME: do we need to create VaultEditor here? its not reused vault = VaultLib(vault_secrets) self.editor = VaultEditor(vault) context.CLIARGS['func']() # and restore umask os.umask(old_umask) def execute_encrypt(self): ''' encrypt the supplied file using the provided vault secret ''' if not context.CLIARGS['args'] and sys.stdin.isatty(): display.display("Reading plaintext input from stdin", stderr=True) for f in context.CLIARGS['args'] or ['-']: # Fixme: use the correct vau self.editor.encrypt_file(f, self.encrypt_secret, vault_id=self.encrypt_vault_id, output_file=context.CLIARGS['output_file']) if sys.stdout.isatty(): display.display("Encryption successful", stderr=True) @staticmethod def format_ciphertext_yaml(b_ciphertext, indent=None, name=None): indent = indent or 10 block_format_var_name = "" if name: block_format_var_name = "%s: " % name block_format_header = "%s!vault |" % block_format_var_name lines = [] vault_ciphertext = to_text(b_ciphertext) lines.append(block_format_header) for line in vault_ciphertext.splitlines(): lines.append('%s%s' % (' ' * indent, line)) yaml_ciphertext = '\n'.join(lines) return yaml_ciphertext def execute_encrypt_string(self): ''' encrypt the supplied string using the provided vault secret ''' b_plaintext = None # Holds tuples (the_text, the_source_of_the_string, the variable name if its provided). b_plaintext_list = [] # remove the non-option '-' arg (used to indicate 'read from stdin') from the candidate args so # we don't add it to the plaintext list args = [x for x in context.CLIARGS['args'] if x != '-'] # We can prompt and read input, or read from stdin, but not both. if context.CLIARGS['encrypt_string_prompt']: msg = "String to encrypt: " name = None name_prompt_response = display.prompt('Variable name (enter for no name): ') # TODO: enforce var naming rules? if name_prompt_response != "": name = name_prompt_response # TODO: could prompt for which vault_id to use for each plaintext string # currently, it will just be the default hide_input = not context.CLIARGS['show_string_input'] if hide_input: msg = "String to encrypt (hidden): " else: msg = "String to encrypt:" prompt_response = display.prompt(msg, private=hide_input) if prompt_response == '': raise AnsibleOptionsError('The plaintext provided from the prompt was empty, not encrypting') b_plaintext = to_bytes(prompt_response) b_plaintext_list.append((b_plaintext, self.FROM_PROMPT, name)) # read from stdin if self.encrypt_string_read_stdin: if sys.stdout.isatty(): display.display("Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a newline)", stderr=True) stdin_text = sys.stdin.read() if stdin_text == '': raise AnsibleOptionsError('stdin was empty, not encrypting') if sys.stdout.isatty() and not stdin_text.endswith("\n"): display.display("\n") b_plaintext = to_bytes(stdin_text) # defaults to None name = context.CLIARGS['encrypt_string_stdin_name'] b_plaintext_list.append((b_plaintext, self.FROM_STDIN, name)) # use any leftover args as strings to encrypt # Try to match args up to --name options if context.CLIARGS.get('encrypt_string_names', False): name_and_text_list = list(zip(context.CLIARGS['encrypt_string_names'], args)) # Some but not enough --name's to name each var if len(args) > len(name_and_text_list): # Trying to avoid ever showing the plaintext in the output, so this warning is vague to avoid that. display.display('The number of --name options do not match the number of args.', stderr=True) display.display('The last named variable will be "%s". The rest will not have' ' names.' % context.CLIARGS['encrypt_string_names'][-1], stderr=True) # Add the rest of the args without specifying a name for extra_arg in args[len(name_and_text_list):]: name_and_text_list.append((None, extra_arg)) # if no --names are provided, just use the args without a name. else: name_and_text_list = [(None, x) for x in args] # Convert the plaintext text objects to bytestrings and collect for name_and_text in name_and_text_list: name, plaintext = name_and_text if plaintext == '': raise AnsibleOptionsError('The plaintext provided from the command line args was empty, not encrypting') b_plaintext = to_bytes(plaintext) b_plaintext_list.append((b_plaintext, self.FROM_ARGS, name)) # TODO: specify vault_id per string? # Format the encrypted strings and any corresponding stderr output outputs = self._format_output_vault_strings(b_plaintext_list, vault_id=self.encrypt_vault_id) for output in outputs: err = output.get('err', None) out = output.get('out', '') if err: sys.stderr.write(err) print(out) if sys.stdout.isatty(): display.display("Encryption successful", stderr=True) # TODO: offer block or string ala eyaml def _format_output_vault_strings(self, b_plaintext_list, vault_id=None): # If we are only showing one item in the output, we don't need to included commented # delimiters in the text show_delimiter = False if len(b_plaintext_list) > 1: show_delimiter = True # list of dicts {'out': '', 'err': ''} output = [] # Encrypt the plaintext, and format it into a yaml block that can be pasted into a playbook. # For more than one input, show some differentiating info in the stderr output so we can tell them # apart. If we have a var name, we include that in the yaml for index, b_plaintext_info in enumerate(b_plaintext_list): # (the text itself, which input it came from, its name) b_plaintext, src, name = b_plaintext_info b_ciphertext = self.editor.encrypt_bytes(b_plaintext, self.encrypt_secret, vault_id=vault_id) # block formatting yaml_text = self.format_ciphertext_yaml(b_ciphertext, name=name) err_msg = None if show_delimiter: human_index = index + 1 if name: err_msg = '# The encrypted version of variable ("%s", the string #%d from %s).\n' % (name, human_index, src) else: err_msg = '# The encrypted version of the string #%d from %s.)\n' % (human_index, src) output.append({'out': yaml_text, 'err': err_msg}) return output def execute_decrypt(self): ''' decrypt the supplied file using the provided vault secret ''' if not context.CLIARGS['args'] and sys.stdin.isatty(): display.display("Reading ciphertext input from stdin", stderr=True) for f in context.CLIARGS['args'] or ['-']: self.editor.decrypt_file(f, output_file=context.CLIARGS['output_file']) if sys.stdout.isatty(): display.display("Decryption successful", stderr=True) def execute_create(self): ''' create and open a file in an editor that will be encrypted with the provided vault secret when closed''' if len(context.CLIARGS['args']) != 1: raise AnsibleOptionsError("ansible-vault create can take only one filename argument") self.editor.create_file(context.CLIARGS['args'][0], self.encrypt_secret, vault_id=self.encrypt_vault_id) def execute_edit(self): ''' open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed''' for f in context.CLIARGS['args']: self.editor.edit_file(f) def execute_view(self): ''' open, decrypt and view an existing vaulted file using a pager using the supplied vault secret ''' for f in context.CLIARGS['args']: # Note: vault should return byte strings because it could encrypt # and decrypt binary files. We are responsible for changing it to # unicode here because we are displaying it and therefore can make # the decision that the display doesn't have to be precisely what # the input was (leave that to decrypt instead) plaintext = self.editor.plaintext(f) self.pager(to_text(plaintext)) def execute_rekey(self): ''' re-encrypt a vaulted file with a new secret, the previous secret is required ''' for f in context.CLIARGS['args']: # FIXME: plumb in vault_id, use the default new_vault_secret for now self.editor.rekey_file(f, self.new_encrypt_secret, self.new_encrypt_vault_id) display.display("Rekey successful", stderr=True) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.972559 ansible-core-2.12.0/lib/ansible/collections/0000755000000000000000000000000000000000000020577 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/collections/__init__.py0000644000000000000000000000145600000000000022716 0ustar00rootroot00000000000000# (c) 2019 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os from ansible.module_utils._text import to_bytes B_FLAG_FILES = frozenset([b'MANIFEST.json', b'galaxy.yml']) def is_collection_path(path): """ Verify that a path meets min requirements to be a collection :param path: byte-string path to evaluate for collection containment :return: boolean signifying 'collectionness' """ is_coll = False b_path = to_bytes(path) if os.path.isdir(b_path): for b_flag in B_FLAG_FILES: if os.path.exists(os.path.join(b_path, b_flag)): is_coll = True break return is_coll ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/collections/list.py0000644000000000000000000000703100000000000022125 0ustar00rootroot00000000000000# (c) 2019 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os from collections import defaultdict from ansible.errors import AnsibleError from ansible.collections import is_collection_path from ansible.module_utils._text import to_bytes from ansible.utils.collection_loader import AnsibleCollectionConfig from ansible.utils.display import Display display = Display() def list_valid_collection_paths(search_paths=None, warn=False): """ Filter out non existing or invalid search_paths for collections :param search_paths: list of text-string paths, if none load default config :param warn: display warning if search_path does not exist :return: subset of original list """ if search_paths is None: search_paths = [] search_paths.extend(AnsibleCollectionConfig.collection_paths) for path in search_paths: b_path = to_bytes(path) if not os.path.exists(b_path): # warn for missing, but not if default if warn: display.warning("The configured collection path {0} does not exist.".format(path)) continue if not os.path.isdir(b_path): if warn: display.warning("The configured collection path {0}, exists, but it is not a directory.".format(path)) continue yield path def list_collection_dirs(search_paths=None, coll_filter=None): """ Return paths for the specific collections found in passed or configured search paths :param search_paths: list of text-string paths, if none load default config :param coll_filter: limit collections to just the specific namespace or collection, if None all are returned :return: list of collection directory paths """ collection = None namespace = None if coll_filter is not None: if '.' in coll_filter: try: (namespace, collection) = coll_filter.split('.') except ValueError: raise AnsibleError("Invalid collection pattern supplied: %s" % coll_filter) else: namespace = coll_filter collections = defaultdict(dict) for path in list_valid_collection_paths(search_paths): if os.path.basename(path) != 'ansible_collections': path = os.path.join(path, 'ansible_collections') b_coll_root = to_bytes(path, errors='surrogate_or_strict') if os.path.exists(b_coll_root) and os.path.isdir(b_coll_root): if namespace is None: namespaces = os.listdir(b_coll_root) else: namespaces = [namespace] for ns in namespaces: b_namespace_dir = os.path.join(b_coll_root, to_bytes(ns)) if os.path.isdir(b_namespace_dir): if collection is None: colls = os.listdir(b_namespace_dir) else: colls = [collection] for mycoll in colls: # skip dupe collections as they will be masked in execution if mycoll not in collections[ns]: b_coll = to_bytes(mycoll) b_coll_dir = os.path.join(b_namespace_dir, b_coll) if is_collection_path(b_coll_dir): collections[ns][mycoll] = b_coll_dir yield b_coll_dir ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.972559 ansible-core-2.12.0/lib/ansible/compat/0000755000000000000000000000000000000000000017544 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/compat/__init__.py0000644000000000000000000000207700000000000021663 0ustar00rootroot00000000000000# (c) 2014, Toshio Kuratomi # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type ''' Compat library for ansible. This contains compatibility definitions for older python When we need to import a module differently depending on python version, do it here. Then in the code we can simply import from compat in order to get what we want. ''' ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9735591 ansible-core-2.12.0/lib/ansible/compat/selectors/0000755000000000000000000000000000000000000021547 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/compat/selectors/__init__.py0000644000000000000000000000234300000000000023662 0ustar00rootroot00000000000000# (c) 2014, 2017 Toshio Kuratomi # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type # NOT_BUNDLED ''' Compat selectors library. Python-3.5 has this builtin. The selectors2 package exists on pypi to backport the functionality as far as python-2.6. Implementation previously resided here - maintaining this file after the move to ansible.module_utils for code backwards compatibility. ''' import sys from ansible.module_utils.compat import selectors sys.modules['ansible.compat.selectors'] = selectors ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9735591 ansible-core-2.12.0/lib/ansible/config/0000755000000000000000000000000000000000000017526 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.548556 ansible-core-2.12.0/lib/ansible/config/__init__.py0000644000000000000000000000000000000000000021625 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383671.5505562 ansible-core-2.12.0/lib/ansible/config/ansible_builtin_runtime.yml0000644000000000000000000133612500000000000025172 0ustar00rootroot00000000000000# Copyright (c) 2020 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) plugin_routing: connection: # test entries redirected_local: redirect: ansible.builtin.local buildah: redirect: containers.podman.buildah podman: redirect: containers.podman.podman aws_ssm: redirect: community.aws.aws_ssm chroot: redirect: community.general.chroot docker: redirect: community.docker.docker funcd: redirect: community.general.funcd iocage: redirect: community.general.iocage jail: redirect: community.general.jail kubectl: redirect: kubernetes.core.kubectl libvirt_lxc: redirect: community.libvirt.libvirt_lxc lxc: redirect: community.general.lxc lxd: redirect: community.general.lxd oc: redirect: community.okd.oc qubes: redirect: community.general.qubes saltstack: redirect: community.general.saltstack zone: redirect: community.general.zone vmware_tools: redirect: community.vmware.vmware_tools httpapi: redirect: ansible.netcommon.httpapi napalm: redirect: ansible.netcommon.napalm netconf: redirect: ansible.netcommon.netconf network_cli: redirect: ansible.netcommon.network_cli persistent: redirect: ansible.netcommon.persistent modules: # test entry formerly_core_ping: redirect: testns.testcoll.ping # test entry uses_redirected_action: redirect: ansible.builtin.ping podman_container_info: redirect: containers.podman.podman_container_info podman_image_info: redirect: containers.podman.podman_image_info podman_image: redirect: containers.podman.podman_image podman_volume_info: redirect: containers.podman.podman_volume_info frr_facts: redirect: frr.frr.frr_facts frr_bgp: redirect: frr.frr.frr_bgp apt_repo: redirect: community.general.apt_repo aws_acm_facts: redirect: community.aws.aws_acm_facts aws_kms_facts: redirect: community.aws.aws_kms_facts aws_region_facts: redirect: community.aws.aws_region_facts aws_s3_bucket_facts: redirect: community.aws.aws_s3_bucket_facts aws_sgw_facts: redirect: community.aws.aws_sgw_facts aws_waf_facts: redirect: community.aws.aws_waf_facts cloudfront_facts: redirect: community.aws.cloudfront_facts cloudwatchlogs_log_group_facts: redirect: community.aws.cloudwatchlogs_log_group_facts ec2_asg_facts: redirect: community.aws.ec2_asg_facts ec2_customer_gateway_facts: redirect: community.aws.ec2_customer_gateway_facts ec2_instance_facts: redirect: community.aws.ec2_instance_facts ec2_eip_facts: redirect: community.aws.ec2_eip_facts ec2_elb_facts: redirect: community.aws.ec2_elb_facts ec2_lc_facts: redirect: community.aws.ec2_lc_facts ec2_placement_group_facts: redirect: community.aws.ec2_placement_group_facts ec2_vpc_endpoint_facts: redirect: community.aws.ec2_vpc_endpoint_facts ec2_vpc_igw_facts: redirect: community.aws.ec2_vpc_igw_facts ec2_vpc_nacl_facts: redirect: community.aws.ec2_vpc_nacl_facts ec2_vpc_nat_gateway_facts: redirect: community.aws.ec2_vpc_nat_gateway_facts ec2_vpc_peering_facts: redirect: community.aws.ec2_vpc_peering_facts ec2_vpc_route_table_facts: redirect: community.aws.ec2_vpc_route_table_facts ec2_vpc_vgw_facts: redirect: community.aws.ec2_vpc_vgw_facts ec2_vpc_vpn_facts: redirect: community.aws.ec2_vpc_vpn_facts ecs_service_facts: redirect: community.aws.ecs_service_facts ecs_taskdefinition_facts: redirect: community.aws.ecs_taskdefinition_facts efs_facts: redirect: community.aws.efs_facts elasticache_facts: redirect: community.aws.elasticache_facts elb_application_lb_facts: redirect: community.aws.elb_application_lb_facts elb_classic_lb_facts: redirect: community.aws.elb_classic_lb_facts elb_target_facts: redirect: community.aws.elb_target_facts elb_target_group_facts: redirect: community.aws.elb_target_group_facts iam_cert_facts: redirect: community.aws.iam_cert_facts iam_mfa_device_facts: redirect: community.aws.iam_mfa_device_facts iam_role_facts: redirect: community.aws.iam_role_facts iam_server_certificate_facts: redirect: community.aws.iam_server_certificate_facts lambda_facts: redirect: community.aws.lambda_facts rds_instance_facts: redirect: community.aws.rds_instance_facts rds_snapshot_facts: redirect: community.aws.rds_snapshot_facts redshift_facts: redirect: community.aws.redshift_facts route53_facts: redirect: community.aws.route53_facts aws_acm: redirect: community.aws.aws_acm aws_acm_info: redirect: community.aws.aws_acm_info aws_api_gateway: redirect: community.aws.aws_api_gateway aws_application_scaling_policy: redirect: community.aws.aws_application_scaling_policy aws_batch_compute_environment: redirect: community.aws.aws_batch_compute_environment aws_batch_job_definition: redirect: community.aws.aws_batch_job_definition aws_batch_job_queue: redirect: community.aws.aws_batch_job_queue aws_codebuild: redirect: community.aws.aws_codebuild aws_codecommit: redirect: community.aws.aws_codecommit aws_codepipeline: redirect: community.aws.aws_codepipeline aws_config_aggregation_authorization: redirect: community.aws.aws_config_aggregation_authorization aws_config_aggregator: redirect: community.aws.aws_config_aggregator aws_config_delivery_channel: redirect: community.aws.aws_config_delivery_channel aws_config_recorder: redirect: community.aws.aws_config_recorder aws_config_rule: redirect: community.aws.aws_config_rule aws_direct_connect_connection: redirect: community.aws.aws_direct_connect_connection aws_direct_connect_gateway: redirect: community.aws.aws_direct_connect_gateway aws_direct_connect_link_aggregation_group: redirect: community.aws.aws_direct_connect_link_aggregation_group aws_direct_connect_virtual_interface: redirect: community.aws.aws_direct_connect_virtual_interface aws_eks_cluster: redirect: community.aws.aws_eks_cluster aws_elasticbeanstalk_app: redirect: community.aws.aws_elasticbeanstalk_app aws_glue_connection: redirect: community.aws.aws_glue_connection aws_glue_job: redirect: community.aws.aws_glue_job aws_inspector_target: redirect: community.aws.aws_inspector_target aws_kms: redirect: community.aws.aws_kms aws_kms_info: redirect: community.aws.aws_kms_info aws_region_info: redirect: community.aws.aws_region_info aws_s3_bucket_info: redirect: community.aws.aws_s3_bucket_info aws_s3_cors: redirect: community.aws.aws_s3_cors aws_secret: redirect: community.aws.aws_secret aws_ses_identity: redirect: community.aws.aws_ses_identity aws_ses_identity_policy: redirect: community.aws.aws_ses_identity_policy aws_ses_rule_set: redirect: community.aws.aws_ses_rule_set aws_sgw_info: redirect: community.aws.aws_sgw_info aws_ssm_parameter_store: redirect: community.aws.aws_ssm_parameter_store aws_step_functions_state_machine: redirect: community.aws.aws_step_functions_state_machine aws_step_functions_state_machine_execution: redirect: community.aws.aws_step_functions_state_machine_execution aws_waf_condition: redirect: community.aws.aws_waf_condition aws_waf_info: redirect: community.aws.aws_waf_info aws_waf_rule: redirect: community.aws.aws_waf_rule aws_waf_web_acl: redirect: community.aws.aws_waf_web_acl cloudformation_stack_set: redirect: community.aws.cloudformation_stack_set cloudformation_exports_info: redirect: community.aws.cloudformation_exports_info cloudfront_distribution: redirect: community.aws.cloudfront_distribution cloudfront_info: redirect: community.aws.cloudfront_info cloudfront_invalidation: redirect: community.aws.cloudfront_invalidation cloudfront_origin_access_identity: redirect: community.aws.cloudfront_origin_access_identity cloudtrail: redirect: community.aws.cloudtrail cloudwatchevent_rule: redirect: community.aws.cloudwatchevent_rule cloudwatchlogs_log_group: redirect: community.aws.cloudwatchlogs_log_group cloudwatchlogs_log_group_info: redirect: community.aws.cloudwatchlogs_log_group_info cloudwatchlogs_log_group_metric_filter: redirect: community.aws.cloudwatchlogs_log_group_metric_filter data_pipeline: redirect: community.aws.data_pipeline dms_endpoint: redirect: community.aws.dms_endpoint dms_replication_subnet_group: redirect: community.aws.dms_replication_subnet_group dynamodb_table: redirect: community.aws.dynamodb_table dynamodb_ttl: redirect: community.aws.dynamodb_ttl ec2_ami_copy: redirect: community.aws.ec2_ami_copy ec2_asg: redirect: community.aws.ec2_asg ec2_asg_info: redirect: community.aws.ec2_asg_info ec2_asg_lifecycle_hook: redirect: community.aws.ec2_asg_lifecycle_hook ec2_customer_gateway: redirect: community.aws.ec2_customer_gateway ec2_customer_gateway_info: redirect: community.aws.ec2_customer_gateway_info ec2_eip: redirect: community.aws.ec2_eip ec2_eip_info: redirect: community.aws.ec2_eip_info ec2_elb: redirect: community.aws.ec2_elb ec2_elb_info: redirect: community.aws.ec2_elb_info ec2_instance: redirect: community.aws.ec2_instance ec2_instance_info: redirect: community.aws.ec2_instance_info ec2_launch_template: redirect: community.aws.ec2_launch_template ec2_lc: redirect: community.aws.ec2_lc ec2_lc_find: redirect: community.aws.ec2_lc_find ec2_lc_info: redirect: community.aws.ec2_lc_info ec2_metric_alarm: redirect: community.aws.ec2_metric_alarm ec2_placement_group: redirect: community.aws.ec2_placement_group ec2_placement_group_info: redirect: community.aws.ec2_placement_group_info ec2_scaling_policy: redirect: community.aws.ec2_scaling_policy ec2_snapshot_copy: redirect: community.aws.ec2_snapshot_copy ec2_transit_gateway: redirect: community.aws.ec2_transit_gateway ec2_transit_gateway_info: redirect: community.aws.ec2_transit_gateway_info ec2_vpc_egress_igw: redirect: community.aws.ec2_vpc_egress_igw ec2_vpc_endpoint: redirect: community.aws.ec2_vpc_endpoint ec2_vpc_endpoint_info: redirect: community.aws.ec2_vpc_endpoint_info ec2_vpc_igw: redirect: community.aws.ec2_vpc_igw ec2_vpc_igw_info: redirect: community.aws.ec2_vpc_igw_info ec2_vpc_nacl: redirect: community.aws.ec2_vpc_nacl ec2_vpc_nacl_info: redirect: community.aws.ec2_vpc_nacl_info ec2_vpc_nat_gateway: redirect: community.aws.ec2_vpc_nat_gateway ec2_vpc_nat_gateway_info: redirect: community.aws.ec2_vpc_nat_gateway_info ec2_vpc_peer: redirect: community.aws.ec2_vpc_peer ec2_vpc_peering_info: redirect: community.aws.ec2_vpc_peering_info ec2_vpc_route_table: redirect: community.aws.ec2_vpc_route_table ec2_vpc_route_table_info: redirect: community.aws.ec2_vpc_route_table_info ec2_vpc_vgw: redirect: community.aws.ec2_vpc_vgw ec2_vpc_vgw_info: redirect: community.aws.ec2_vpc_vgw_info ec2_vpc_vpn: redirect: community.aws.ec2_vpc_vpn ec2_vpc_vpn_info: redirect: community.aws.ec2_vpc_vpn_info ec2_win_password: redirect: community.aws.ec2_win_password ecs_attribute: redirect: community.aws.ecs_attribute ecs_cluster: redirect: community.aws.ecs_cluster ecs_ecr: redirect: community.aws.ecs_ecr ecs_service: redirect: community.aws.ecs_service ecs_service_info: redirect: community.aws.ecs_service_info ecs_tag: redirect: community.aws.ecs_tag ecs_task: redirect: community.aws.ecs_task ecs_taskdefinition: redirect: community.aws.ecs_taskdefinition ecs_taskdefinition_info: redirect: community.aws.ecs_taskdefinition_info efs: redirect: community.aws.efs efs_info: redirect: community.aws.efs_info elasticache: redirect: community.aws.elasticache elasticache_info: redirect: community.aws.elasticache_info elasticache_parameter_group: redirect: community.aws.elasticache_parameter_group elasticache_snapshot: redirect: community.aws.elasticache_snapshot elasticache_subnet_group: redirect: community.aws.elasticache_subnet_group elb_application_lb: redirect: community.aws.elb_application_lb elb_application_lb_info: redirect: community.aws.elb_application_lb_info elb_classic_lb: redirect: community.aws.elb_classic_lb elb_classic_lb_info: redirect: community.aws.elb_classic_lb_info elb_instance: redirect: community.aws.elb_instance elb_network_lb: redirect: community.aws.elb_network_lb elb_target: redirect: community.aws.elb_target elb_target_group: redirect: community.aws.elb_target_group elb_target_group_info: redirect: community.aws.elb_target_group_info elb_target_info: redirect: community.aws.elb_target_info execute_lambda: redirect: community.aws.execute_lambda iam: redirect: community.aws.iam iam_cert: redirect: community.aws.iam_cert iam_group: redirect: community.aws.iam_group iam_managed_policy: redirect: community.aws.iam_managed_policy iam_mfa_device_info: redirect: community.aws.iam_mfa_device_info iam_password_policy: redirect: community.aws.iam_password_policy iam_policy: redirect: community.aws.iam_policy iam_policy_info: redirect: community.aws.iam_policy_info iam_role: redirect: community.aws.iam_role iam_role_info: redirect: community.aws.iam_role_info iam_saml_federation: redirect: community.aws.iam_saml_federation iam_server_certificate_info: redirect: community.aws.iam_server_certificate_info iam_user: redirect: community.aws.iam_user iam_user_info: redirect: community.aws.iam_user_info kinesis_stream: redirect: community.aws.kinesis_stream lambda: redirect: community.aws.lambda lambda_alias: redirect: community.aws.lambda_alias lambda_event: redirect: community.aws.lambda_event lambda_info: redirect: community.aws.lambda_info lambda_policy: redirect: community.aws.lambda_policy lightsail: redirect: community.aws.lightsail rds: redirect: community.aws.rds rds_instance: redirect: community.aws.rds_instance rds_instance_info: redirect: community.aws.rds_instance_info rds_param_group: redirect: community.aws.rds_param_group rds_snapshot: redirect: community.aws.rds_snapshot rds_snapshot_info: redirect: community.aws.rds_snapshot_info rds_subnet_group: redirect: community.aws.rds_subnet_group redshift: redirect: community.aws.redshift redshift_cross_region_snapshots: redirect: community.aws.redshift_cross_region_snapshots redshift_info: redirect: community.aws.redshift_info redshift_subnet_group: redirect: community.aws.redshift_subnet_group route53: redirect: community.aws.route53 route53_health_check: redirect: community.aws.route53_health_check route53_info: redirect: community.aws.route53_info route53_zone: redirect: community.aws.route53_zone s3_bucket_notification: redirect: community.aws.s3_bucket_notification s3_lifecycle: redirect: community.aws.s3_lifecycle s3_logging: redirect: community.aws.s3_logging s3_sync: redirect: community.aws.s3_sync s3_website: redirect: community.aws.s3_website sns: redirect: community.aws.sns sns_topic: redirect: community.aws.sns_topic sqs_queue: redirect: community.aws.sqs_queue sts_assume_role: redirect: community.aws.sts_assume_role sts_session_token: redirect: community.aws.sts_session_token ali_instance_facts: redirect: community.general.ali_instance_facts ali_instance: redirect: community.general.ali_instance ali_instance_info: redirect: community.general.ali_instance_info atomic_container: redirect: community.general.atomic_container atomic_host: redirect: community.general.atomic_host atomic_image: redirect: community.general.atomic_image clc_aa_policy: redirect: community.general.clc_aa_policy clc_alert_policy: redirect: community.general.clc_alert_policy clc_blueprint_package: redirect: community.general.clc_blueprint_package clc_firewall_policy: redirect: community.general.clc_firewall_policy clc_group: redirect: community.general.clc_group clc_loadbalancer: redirect: community.general.clc_loadbalancer clc_modify_server: redirect: community.general.clc_modify_server clc_publicip: redirect: community.general.clc_publicip clc_server: redirect: community.general.clc_server clc_server_snapshot: redirect: community.general.clc_server_snapshot cloudscale_floating_ip: redirect: cloudscale_ch.cloud.floating_ip cloudscale_server: redirect: cloudscale_ch.cloud.server cloudscale_server_group: redirect: cloudscale_ch.cloud.server_group cloudscale_volume: redirect: cloudscale_ch.cloud.volume cs_instance_facts: redirect: ngine_io.cloudstack.cs_instance_info cs_zone_facts: redirect: ngine_io.cloudstack.cs_zone_info cs_account: redirect: ngine_io.cloudstack.cs_account cs_affinitygroup: redirect: ngine_io.cloudstack.cs_affinitygroup cs_cluster: redirect: ngine_io.cloudstack.cs_cluster cs_configuration: redirect: ngine_io.cloudstack.cs_configuration cs_disk_offering: redirect: ngine_io.cloudstack.cs_disk_offering cs_domain: redirect: ngine_io.cloudstack.cs_domain cs_facts: redirect: ngine_io.cloudstack.cs_facts cs_firewall: redirect: ngine_io.cloudstack.cs_firewall cs_host: redirect: ngine_io.cloudstack.cs_host cs_image_store: redirect: ngine_io.cloudstack.cs_image_store cs_instance: redirect: ngine_io.cloudstack.cs_instance cs_instance_info: redirect: ngine_io.cloudstack.cs_instance_info cs_instance_nic: redirect: ngine_io.cloudstack.cs_instance_nic cs_instance_nic_secondaryip: redirect: ngine_io.cloudstack.cs_instance_nic_secondaryip cs_instance_password_reset: redirect: ngine_io.cloudstack.cs_instance_password_reset cs_instancegroup: redirect: ngine_io.cloudstack.cs_instancegroup cs_ip_address: redirect: ngine_io.cloudstack.cs_ip_address cs_iso: redirect: ngine_io.cloudstack.cs_iso cs_loadbalancer_rule: redirect: ngine_io.cloudstack.cs_loadbalancer_rule cs_loadbalancer_rule_member: redirect: ngine_io.cloudstack.cs_loadbalancer_rule_member cs_network: redirect: ngine_io.cloudstack.cs_network cs_network_acl: redirect: ngine_io.cloudstack.cs_network_acl cs_network_acl_rule: redirect: ngine_io.cloudstack.cs_network_acl_rule cs_network_offering: redirect: ngine_io.cloudstack.cs_network_offering cs_physical_network: redirect: ngine_io.cloudstack.cs_physical_network cs_pod: redirect: ngine_io.cloudstack.cs_pod cs_portforward: redirect: ngine_io.cloudstack.cs_portforward cs_project: redirect: ngine_io.cloudstack.cs_project cs_region: redirect: ngine_io.cloudstack.cs_region cs_resourcelimit: redirect: ngine_io.cloudstack.cs_resourcelimit cs_role: redirect: ngine_io.cloudstack.cs_role cs_role_permission: redirect: ngine_io.cloudstack.cs_role_permission cs_router: redirect: ngine_io.cloudstack.cs_router cs_securitygroup: redirect: ngine_io.cloudstack.cs_securitygroup cs_securitygroup_rule: redirect: ngine_io.cloudstack.cs_securitygroup_rule cs_service_offering: redirect: ngine_io.cloudstack.cs_service_offering cs_snapshot_policy: redirect: ngine_io.cloudstack.cs_snapshot_policy cs_sshkeypair: redirect: ngine_io.cloudstack.cs_sshkeypair cs_staticnat: redirect: ngine_io.cloudstack.cs_staticnat cs_storage_pool: redirect: ngine_io.cloudstack.cs_storage_pool cs_template: redirect: ngine_io.cloudstack.cs_template cs_traffic_type: redirect: ngine_io.cloudstack.cs_traffic_type cs_user: redirect: ngine_io.cloudstack.cs_user cs_vlan_ip_range: redirect: ngine_io.cloudstack.cs_vlan_ip_range cs_vmsnapshot: redirect: ngine_io.cloudstack.cs_vmsnapshot cs_volume: redirect: ngine_io.cloudstack.cs_volume cs_vpc: redirect: ngine_io.cloudstack.cs_vpc cs_vpc_offering: redirect: ngine_io.cloudstack.cs_vpc_offering cs_vpn_connection: redirect: ngine_io.cloudstack.cs_vpn_connection cs_vpn_customer_gateway: redirect: ngine_io.cloudstack.cs_vpn_customer_gateway cs_vpn_gateway: redirect: ngine_io.cloudstack.cs_vpn_gateway cs_zone: redirect: ngine_io.cloudstack.cs_zone cs_zone_info: redirect: ngine_io.cloudstack.cs_zone_info digital_ocean: redirect: community.digitalocean.digital_ocean digital_ocean_account_facts: redirect: community.digitalocean.digital_ocean_account_facts digital_ocean_certificate_facts: redirect: community.digitalocean.digital_ocean_certificate_facts digital_ocean_domain_facts: redirect: community.digitalocean.digital_ocean_domain_facts digital_ocean_firewall_facts: redirect: community.digitalocean.digital_ocean_firewall_facts digital_ocean_floating_ip_facts: redirect: community.digitalocean.digital_ocean_floating_ip_facts digital_ocean_image_facts: redirect: community.digitalocean.digital_ocean_image_facts digital_ocean_load_balancer_facts: redirect: community.digitalocean.digital_ocean_load_balancer_facts digital_ocean_region_facts: redirect: community.digitalocean.digital_ocean_region_facts digital_ocean_size_facts: redirect: community.digitalocean.digital_ocean_size_facts digital_ocean_snapshot_facts: redirect: community.digitalocean.digital_ocean_snapshot_facts digital_ocean_sshkey_facts: redirect: community.digitalocean.digital_ocean_sshkey_facts digital_ocean_tag_facts: redirect: community.digitalocean.digital_ocean_tag_facts digital_ocean_volume_facts: redirect: community.digitalocean.digital_ocean_volume_facts digital_ocean_account_info: redirect: community.digitalocean.digital_ocean_account_info digital_ocean_block_storage: redirect: community.digitalocean.digital_ocean_block_storage digital_ocean_certificate: redirect: community.digitalocean.digital_ocean_certificate digital_ocean_certificate_info: redirect: community.digitalocean.digital_ocean_certificate_info digital_ocean_domain: redirect: community.digitalocean.digital_ocean_domain digital_ocean_domain_info: redirect: community.digitalocean.digital_ocean_domain_info digital_ocean_droplet: redirect: community.digitalocean.digital_ocean_droplet digital_ocean_firewall_info: redirect: community.digitalocean.digital_ocean_firewall_info digital_ocean_floating_ip: redirect: community.digitalocean.digital_ocean_floating_ip digital_ocean_floating_ip_info: redirect: community.digitalocean.digital_ocean_floating_ip_info digital_ocean_image_info: redirect: community.digitalocean.digital_ocean_image_info digital_ocean_load_balancer_info: redirect: community.digitalocean.digital_ocean_load_balancer_info digital_ocean_region_info: redirect: community.digitalocean.digital_ocean_region_info digital_ocean_size_info: redirect: community.digitalocean.digital_ocean_size_info digital_ocean_snapshot_info: redirect: community.digitalocean.digital_ocean_snapshot_info digital_ocean_sshkey: redirect: community.digitalocean.digital_ocean_sshkey digital_ocean_sshkey_info: redirect: community.digitalocean.digital_ocean_sshkey_info digital_ocean_tag: redirect: community.digitalocean.digital_ocean_tag digital_ocean_tag_info: redirect: community.digitalocean.digital_ocean_tag_info digital_ocean_volume_info: redirect: community.digitalocean.digital_ocean_volume_info dimensiondata_network: redirect: community.general.dimensiondata_network dimensiondata_vlan: redirect: community.general.dimensiondata_vlan docker_image_facts: redirect: community.general.docker_image_facts docker_service: redirect: community.general.docker_service docker_compose: redirect: community.docker.docker_compose docker_config: redirect: community.docker.docker_config docker_container: redirect: community.docker.docker_container docker_container_info: redirect: community.docker.docker_container_info docker_host_info: redirect: community.docker.docker_host_info docker_image: redirect: community.docker.docker_image docker_image_info: redirect: community.docker.docker_image_info docker_login: redirect: community.docker.docker_login docker_network: redirect: community.docker.docker_network docker_network_info: redirect: community.docker.docker_network_info docker_node: redirect: community.docker.docker_node docker_node_info: redirect: community.docker.docker_node_info docker_prune: redirect: community.docker.docker_prune docker_secret: redirect: community.docker.docker_secret docker_stack: redirect: community.docker.docker_stack docker_swarm: redirect: community.docker.docker_swarm docker_swarm_info: redirect: community.docker.docker_swarm_info docker_swarm_service: redirect: community.docker.docker_swarm_service docker_swarm_service_info: redirect: community.docker.docker_swarm_service_info docker_volume: redirect: community.docker.docker_volume docker_volume_info: redirect: community.docker.docker_volume_info gcdns_record: redirect: community.general.gcdns_record gcdns_zone: redirect: community.general.gcdns_zone gce: redirect: community.general.gce gcp_backend_service: redirect: community.general.gcp_backend_service gcp_bigquery_dataset_facts: redirect: google.cloud.gcp_bigquery_dataset_info gcp_bigquery_table_facts: redirect: google.cloud.gcp_bigquery_table_info gcp_cloudbuild_trigger_facts: redirect: google.cloud.gcp_cloudbuild_trigger_info gcp_compute_address_facts: redirect: google.cloud.gcp_compute_address_info gcp_compute_backend_bucket_facts: redirect: google.cloud.gcp_compute_backend_bucket_info gcp_compute_backend_service_facts: redirect: google.cloud.gcp_compute_backend_service_info gcp_compute_disk_facts: redirect: google.cloud.gcp_compute_disk_info gcp_compute_firewall_facts: redirect: google.cloud.gcp_compute_firewall_info gcp_compute_forwarding_rule_facts: redirect: google.cloud.gcp_compute_forwarding_rule_info gcp_compute_global_address_facts: redirect: google.cloud.gcp_compute_global_address_info gcp_compute_global_forwarding_rule_facts: redirect: google.cloud.gcp_compute_global_forwarding_rule_info gcp_compute_health_check_facts: redirect: google.cloud.gcp_compute_health_check_info gcp_compute_http_health_check_facts: redirect: google.cloud.gcp_compute_http_health_check_info gcp_compute_https_health_check_facts: redirect: google.cloud.gcp_compute_https_health_check_info gcp_compute_image_facts: redirect: google.cloud.gcp_compute_image_info gcp_compute_instance_facts: redirect: google.cloud.gcp_compute_instance_info gcp_compute_instance_group_facts: redirect: google.cloud.gcp_compute_instance_group_info gcp_compute_instance_group_manager_facts: redirect: google.cloud.gcp_compute_instance_group_manager_info gcp_compute_instance_template_facts: redirect: google.cloud.gcp_compute_instance_template_info gcp_compute_interconnect_attachment_facts: redirect: google.cloud.gcp_compute_interconnect_attachment_info gcp_compute_network_facts: redirect: google.cloud.gcp_compute_network_info gcp_compute_region_disk_facts: redirect: google.cloud.gcp_compute_region_disk_info gcp_compute_route_facts: redirect: google.cloud.gcp_compute_route_info gcp_compute_router_facts: redirect: google.cloud.gcp_compute_router_info gcp_compute_ssl_certificate_facts: redirect: google.cloud.gcp_compute_ssl_certificate_info gcp_compute_ssl_policy_facts: redirect: google.cloud.gcp_compute_ssl_policy_info gcp_compute_subnetwork_facts: redirect: google.cloud.gcp_compute_subnetwork_info gcp_compute_target_http_proxy_facts: redirect: google.cloud.gcp_compute_target_http_proxy_info gcp_compute_target_https_proxy_facts: redirect: google.cloud.gcp_compute_target_https_proxy_info gcp_compute_target_pool_facts: redirect: google.cloud.gcp_compute_target_pool_info gcp_compute_target_ssl_proxy_facts: redirect: google.cloud.gcp_compute_target_ssl_proxy_info gcp_compute_target_tcp_proxy_facts: redirect: google.cloud.gcp_compute_target_tcp_proxy_info gcp_compute_target_vpn_gateway_facts: redirect: google.cloud.gcp_compute_target_vpn_gateway_info gcp_compute_url_map_facts: redirect: google.cloud.gcp_compute_url_map_info gcp_compute_vpn_tunnel_facts: redirect: google.cloud.gcp_compute_vpn_tunnel_info gcp_container_cluster_facts: redirect: google.cloud.gcp_container_cluster_info gcp_container_node_pool_facts: redirect: google.cloud.gcp_container_node_pool_info gcp_dns_managed_zone_facts: redirect: google.cloud.gcp_dns_managed_zone_info gcp_dns_resource_record_set_facts: redirect: google.cloud.gcp_dns_resource_record_set_info gcp_forwarding_rule: redirect: community.general.gcp_forwarding_rule gcp_healthcheck: redirect: community.general.gcp_healthcheck gcp_iam_role_facts: redirect: google.cloud.gcp_iam_role_info gcp_iam_service_account_facts: redirect: google.cloud.gcp_iam_service_account_info gcp_pubsub_subscription_facts: redirect: google.cloud.gcp_pubsub_subscription_info gcp_pubsub_topic_facts: redirect: google.cloud.gcp_pubsub_topic_info gcp_redis_instance_facts: redirect: google.cloud.gcp_redis_instance_info gcp_resourcemanager_project_facts: redirect: google.cloud.gcp_resourcemanager_project_info gcp_sourcerepo_repository_facts: redirect: google.cloud.gcp_sourcerepo_repository_info gcp_spanner_database_facts: redirect: google.cloud.gcp_spanner_database_info gcp_spanner_instance_facts: redirect: google.cloud.gcp_spanner_instance_info gcp_sql_database_facts: redirect: google.cloud.gcp_sql_database_info gcp_sql_instance_facts: redirect: google.cloud.gcp_sql_instance_info gcp_sql_user_facts: redirect: google.cloud.gcp_sql_user_info gcp_target_proxy: redirect: community.general.gcp_target_proxy gcp_tpu_node_facts: redirect: google.cloud.gcp_tpu_node_info gcp_url_map: redirect: community.general.gcp_url_map gcpubsub_facts: redirect: community.general.gcpubsub_facts gcspanner: redirect: community.general.gcspanner gc_storage: redirect: community.google.gc_storage gce_eip: redirect: community.google.gce_eip gce_img: redirect: community.google.gce_img gce_instance_template: redirect: community.google.gce_instance_template gce_labels: redirect: community.google.gce_labels gce_lb: redirect: community.google.gce_lb gce_mig: redirect: community.google.gce_mig gce_net: redirect: community.google.gce_net gce_pd: redirect: community.google.gce_pd gce_snapshot: redirect: community.google.gce_snapshot gce_tag: redirect: community.google.gce_tag gcpubsub: redirect: community.google.gcpubsub gcpubsub_info: redirect: community.google.gcpubsub_info heroku_collaborator: redirect: community.general.heroku_collaborator hwc_ecs_instance: redirect: community.general.hwc_ecs_instance hwc_evs_disk: redirect: community.general.hwc_evs_disk hwc_network_vpc: redirect: community.general.hwc_network_vpc hwc_smn_topic: redirect: community.general.hwc_smn_topic hwc_vpc_eip: redirect: community.general.hwc_vpc_eip hwc_vpc_peering_connect: redirect: community.general.hwc_vpc_peering_connect hwc_vpc_port: redirect: community.general.hwc_vpc_port hwc_vpc_private_ip: redirect: community.general.hwc_vpc_private_ip hwc_vpc_route: redirect: community.general.hwc_vpc_route hwc_vpc_security_group: redirect: community.general.hwc_vpc_security_group hwc_vpc_security_group_rule: redirect: community.general.hwc_vpc_security_group_rule hwc_vpc_subnet: redirect: community.general.hwc_vpc_subnet kubevirt_cdi_upload: redirect: community.kubevirt.kubevirt_cdi_upload kubevirt_preset: redirect: community.kubevirt.kubevirt_preset kubevirt_pvc: redirect: community.kubevirt.kubevirt_pvc kubevirt_rs: redirect: community.kubevirt.kubevirt_rs kubevirt_template: redirect: community.kubevirt.kubevirt_template kubevirt_vm: redirect: community.kubevirt.kubevirt_vm linode: redirect: community.general.linode linode_v4: redirect: community.general.linode_v4 lxc_container: redirect: community.general.lxc_container lxd_container: redirect: community.general.lxd_container lxd_profile: redirect: community.general.lxd_profile memset_memstore_facts: redirect: community.general.memset_memstore_facts memset_server_facts: redirect: community.general.memset_server_facts memset_dns_reload: redirect: community.general.memset_dns_reload memset_memstore_info: redirect: community.general.memset_memstore_info memset_server_info: redirect: community.general.memset_server_info memset_zone: redirect: community.general.memset_zone memset_zone_domain: redirect: community.general.memset_zone_domain memset_zone_record: redirect: community.general.memset_zone_record cloud_init_data_facts: redirect: community.general.cloud_init_data_facts helm: redirect: community.general.helm ovirt: redirect: community.general.ovirt proxmox: redirect: community.general.proxmox proxmox_kvm: redirect: community.general.proxmox_kvm proxmox_template: redirect: community.general.proxmox_template rhevm: redirect: community.general.rhevm serverless: redirect: community.general.serverless terraform: redirect: community.general.terraform virt: redirect: community.libvirt.virt virt_net: redirect: community.libvirt.virt_net virt_pool: redirect: community.libvirt.virt_pool xenserver_facts: redirect: community.general.xenserver_facts oneandone_firewall_policy: redirect: community.general.oneandone_firewall_policy oneandone_load_balancer: redirect: community.general.oneandone_load_balancer oneandone_monitoring_policy: redirect: community.general.oneandone_monitoring_policy oneandone_private_network: redirect: community.general.oneandone_private_network oneandone_public_ip: redirect: community.general.oneandone_public_ip oneandone_server: redirect: community.general.oneandone_server online_server_facts: redirect: community.general.online_server_facts online_user_facts: redirect: community.general.online_user_facts online_server_info: redirect: community.general.online_server_info online_user_info: redirect: community.general.online_user_info one_image_facts: redirect: community.general.one_image_facts one_host: redirect: community.general.one_host one_image: redirect: community.general.one_image one_image_info: redirect: community.general.one_image_info one_service: redirect: community.general.one_service one_vm: redirect: community.general.one_vm os_flavor_facts: redirect: openstack.cloud.os_flavor_info os_image_facts: redirect: openstack.cloud.os_image_info os_keystone_domain_facts: redirect: openstack.cloud.os_keystone_domain_info os_networks_facts: redirect: openstack.cloud.os_networks_info os_port_facts: redirect: openstack.cloud.os_port_info os_project_facts: redirect: openstack.cloud.os_project_info os_server_facts: redirect: openstack.cloud.os_server_info os_subnets_facts: redirect: openstack.cloud.os_subnets_info os_user_facts: redirect: openstack.cloud.os_user_info oci_vcn: redirect: community.general.oci_vcn ovh_ip_failover: redirect: community.general.ovh_ip_failover ovh_ip_loadbalancing_backend: redirect: community.general.ovh_ip_loadbalancing_backend ovh_monthly_billing: redirect: community.general.ovh_monthly_billing ovirt_affinity_label_facts: redirect: community.general.ovirt_affinity_label_facts ovirt_api_facts: redirect: community.general.ovirt_api_facts ovirt_cluster_facts: redirect: community.general.ovirt_cluster_facts ovirt_datacenter_facts: redirect: community.general.ovirt_datacenter_facts ovirt_disk_facts: redirect: community.general.ovirt_disk_facts ovirt_event_facts: redirect: community.general.ovirt_event_facts ovirt_external_provider_facts: redirect: community.general.ovirt_external_provider_facts ovirt_group_facts: redirect: community.general.ovirt_group_facts ovirt_host_facts: redirect: community.general.ovirt_host_facts ovirt_host_storage_facts: redirect: community.general.ovirt_host_storage_facts ovirt_network_facts: redirect: community.general.ovirt_network_facts ovirt_nic_facts: redirect: community.general.ovirt_nic_facts ovirt_permission_facts: redirect: community.general.ovirt_permission_facts ovirt_quota_facts: redirect: community.general.ovirt_quota_facts ovirt_scheduling_policy_facts: redirect: community.general.ovirt_scheduling_policy_facts ovirt_snapshot_facts: redirect: community.general.ovirt_snapshot_facts ovirt_storage_domain_facts: redirect: community.general.ovirt_storage_domain_facts ovirt_storage_template_facts: redirect: community.general.ovirt_storage_template_facts ovirt_storage_vm_facts: redirect: community.general.ovirt_storage_vm_facts ovirt_tag_facts: redirect: community.general.ovirt_tag_facts ovirt_template_facts: redirect: community.general.ovirt_template_facts ovirt_user_facts: redirect: community.general.ovirt_user_facts ovirt_vm_facts: redirect: community.general.ovirt_vm_facts ovirt_vmpool_facts: redirect: community.general.ovirt_vmpool_facts packet_device: redirect: community.general.packet_device packet_ip_subnet: redirect: community.general.packet_ip_subnet packet_project: redirect: community.general.packet_project packet_sshkey: redirect: community.general.packet_sshkey packet_volume: redirect: community.general.packet_volume packet_volume_attachment: redirect: community.general.packet_volume_attachment profitbricks: redirect: community.general.profitbricks profitbricks_datacenter: redirect: community.general.profitbricks_datacenter profitbricks_nic: redirect: community.general.profitbricks_nic profitbricks_volume: redirect: community.general.profitbricks_volume profitbricks_volume_attachments: redirect: community.general.profitbricks_volume_attachments pubnub_blocks: redirect: community.general.pubnub_blocks rax: redirect: community.general.rax rax_cbs: redirect: community.general.rax_cbs rax_cbs_attachments: redirect: community.general.rax_cbs_attachments rax_cdb: redirect: community.general.rax_cdb rax_cdb_database: redirect: community.general.rax_cdb_database rax_cdb_user: redirect: community.general.rax_cdb_user rax_clb: redirect: community.general.rax_clb rax_clb_nodes: redirect: community.general.rax_clb_nodes rax_clb_ssl: redirect: community.general.rax_clb_ssl rax_dns: redirect: community.general.rax_dns rax_dns_record: redirect: community.general.rax_dns_record rax_facts: redirect: community.general.rax_facts rax_files: redirect: community.general.rax_files rax_files_objects: redirect: community.general.rax_files_objects rax_identity: redirect: community.general.rax_identity rax_keypair: redirect: community.general.rax_keypair rax_meta: redirect: community.general.rax_meta rax_mon_alarm: redirect: community.general.rax_mon_alarm rax_mon_check: redirect: community.general.rax_mon_check rax_mon_entity: redirect: community.general.rax_mon_entity rax_mon_notification: redirect: community.general.rax_mon_notification rax_mon_notification_plan: redirect: community.general.rax_mon_notification_plan rax_network: redirect: community.general.rax_network rax_queue: redirect: community.general.rax_queue rax_scaling_group: redirect: community.general.rax_scaling_group rax_scaling_policy: redirect: community.general.rax_scaling_policy scaleway_image_facts: redirect: community.general.scaleway_image_facts scaleway_ip_facts: redirect: community.general.scaleway_ip_facts scaleway_organization_facts: redirect: community.general.scaleway_organization_facts scaleway_security_group_facts: redirect: community.general.scaleway_security_group_facts scaleway_server_facts: redirect: community.general.scaleway_server_facts scaleway_snapshot_facts: redirect: community.general.scaleway_snapshot_facts scaleway_volume_facts: redirect: community.general.scaleway_volume_facts scaleway_compute: redirect: community.general.scaleway_compute scaleway_image_info: redirect: community.general.scaleway_image_info scaleway_ip: redirect: community.general.scaleway_ip scaleway_ip_info: redirect: community.general.scaleway_ip_info scaleway_lb: redirect: community.general.scaleway_lb scaleway_organization_info: redirect: community.general.scaleway_organization_info scaleway_security_group: redirect: community.general.scaleway_security_group scaleway_security_group_info: redirect: community.general.scaleway_security_group_info scaleway_security_group_rule: redirect: community.general.scaleway_security_group_rule scaleway_server_info: redirect: community.general.scaleway_server_info scaleway_snapshot_info: redirect: community.general.scaleway_snapshot_info scaleway_sshkey: redirect: community.general.scaleway_sshkey scaleway_user_data: redirect: community.general.scaleway_user_data scaleway_volume: redirect: community.general.scaleway_volume scaleway_volume_info: redirect: community.general.scaleway_volume_info smartos_image_facts: redirect: community.general.smartos_image_facts imgadm: redirect: community.general.imgadm nictagadm: redirect: community.general.nictagadm smartos_image_info: redirect: community.general.smartos_image_info vmadm: redirect: community.general.vmadm sl_vm: redirect: community.general.sl_vm spotinst_aws_elastigroup: redirect: community.general.spotinst_aws_elastigroup udm_dns_record: redirect: community.general.udm_dns_record udm_dns_zone: redirect: community.general.udm_dns_zone udm_group: redirect: community.general.udm_group udm_share: redirect: community.general.udm_share udm_user: redirect: community.general.udm_user vr_account_facts: redirect: ngine_io.vultr.vultr_account_facts vr_dns_domain: redirect: ngine_io.vultr.vultr_dns_domain vr_dns_record: redirect: ngine_io.vultr.vultr_dns_record vr_firewall_group: redirect: ngine_io.vultr.vultr_firewall_group vr_firewall_rule: redirect: ngine_io.vultr.vultr_firewall_rule vr_server: redirect: ngine_io.vultr.vultr_server vr_ssh_key: redirect: ngine_io.vultr.vultr_ssh_key vr_startup_script: redirect: ngine_io.vultr.vultr_startup_script vr_user: redirect: ngine_io.vultr.vultr_user vultr_account_facts: redirect: ngine_io.vultr.vultr_account_info vultr_block_storage_facts: redirect: ngine_io.vultr.vultr_block_storage_info vultr_dns_domain_facts: redirect: ngine_io.vultr.vultr_dns_domain_info vultr_firewall_group_facts: redirect: ngine_io.vultr.vultr_firewall_group_info vultr_network_facts: redirect: ngine_io.vultr.vultr_network_info vultr_os_facts: redirect: ngine_io.vultr.vultr_os_info vultr_plan_facts: redirect: ngine_io.vultr.vultr_plan_info vultr_region_facts: redirect: ngine_io.vultr.vultr_region_info vultr_server_facts: redirect: ngine_io.vultr.vultr_server_info vultr_ssh_key_facts: redirect: ngine_io.vultr.vultr_ssh_key_info vultr_startup_script_facts: redirect: ngine_io.vultr.vultr_startup_script_info vultr_user_facts: redirect: ngine_io.vultr.vultr_user_info vultr_account_info: redirect: ngine_io.vultr.vultr_account_info vultr_block_storage: redirect: ngine_io.vultr.vultr_block_storage vultr_block_storage_info: redirect: ngine_io.vultr.vultr_block_storage_info vultr_dns_domain: redirect: ngine_io.vultr.vultr_dns_domain vultr_dns_domain_info: redirect: ngine_io.vultr.vultr_dns_domain_info vultr_dns_record: redirect: ngine_io.vultr.vultr_dns_record vultr_firewall_group: redirect: ngine_io.vultr.vultr_firewall_group vultr_firewall_group_info: redirect: ngine_io.vultr.vultr_firewall_group_info vultr_firewall_rule: redirect: ngine_io.vultr.vultr_firewall_rule vultr_network: redirect: ngine_io.vultr.vultr_network vultr_network_info: redirect: ngine_io.vultr.vultr_network_info vultr_os_info: redirect: ngine_io.vultr.vultr_os_info vultr_plan_info: redirect: ngine_io.vultr.vultr_plan_info vultr_region_info: redirect: ngine_io.vultr.vultr_region_info vultr_server: redirect: ngine_io.vultr.vultr_server vultr_server_info: redirect: ngine_io.vultr.vultr_server_info vultr_ssh_key: redirect: ngine_io.vultr.vultr_ssh_key vultr_ssh_key_info: redirect: ngine_io.vultr.vultr_ssh_key_info vultr_startup_script: redirect: ngine_io.vultr.vultr_startup_script vultr_startup_script_info: redirect: ngine_io.vultr.vultr_startup_script_info vultr_user: redirect: ngine_io.vultr.vultr_user vultr_user_info: redirect: ngine_io.vultr.vultr_user_info webfaction_app: redirect: community.general.webfaction_app webfaction_db: redirect: community.general.webfaction_db webfaction_domain: redirect: community.general.webfaction_domain webfaction_mailbox: redirect: community.general.webfaction_mailbox webfaction_site: redirect: community.general.webfaction_site xenserver_guest_facts: redirect: community.general.xenserver_guest_facts xenserver_guest: redirect: community.general.xenserver_guest xenserver_guest_info: redirect: community.general.xenserver_guest_info xenserver_guest_powerstate: redirect: community.general.xenserver_guest_powerstate consul: redirect: community.general.consul consul_acl: redirect: community.general.consul_acl consul_kv: redirect: community.general.consul_kv consul_session: redirect: community.general.consul_session etcd3: redirect: community.general.etcd3 pacemaker_cluster: redirect: community.general.pacemaker_cluster znode: redirect: community.general.znode aerospike_migrations: redirect: community.general.aerospike_migrations influxdb_database: redirect: community.general.influxdb_database influxdb_query: redirect: community.general.influxdb_query influxdb_retention_policy: redirect: community.general.influxdb_retention_policy influxdb_user: redirect: community.general.influxdb_user influxdb_write: redirect: community.general.influxdb_write elasticsearch_plugin: redirect: community.general.elasticsearch_plugin kibana_plugin: redirect: community.general.kibana_plugin redis: redirect: community.general.redis riak: redirect: community.general.riak mssql_db: redirect: community.general.mssql_db mysql_db: redirect: community.mysql.mysql_db mysql_info: redirect: community.mysql.mysql_info mysql_query: redirect: community.mysql.mysql_query mysql_replication: redirect: community.mysql.mysql_replication mysql_user: redirect: community.mysql.mysql_user mysql_variables: redirect: community.mysql.mysql_variables postgresql_copy: redirect: community.postgresql.postgresql_copy postgresql_db: redirect: community.postgresql.postgresql_db postgresql_ext: redirect: community.postgresql.postgresql_ext postgresql_idx: redirect: community.postgresql.postgresql_idx postgresql_info: redirect: community.postgresql.postgresql_info postgresql_lang: redirect: community.postgresql.postgresql_lang postgresql_membership: redirect: community.postgresql.postgresql_membership postgresql_owner: redirect: community.postgresql.postgresql_owner postgresql_pg_hba: redirect: community.postgresql.postgresql_pg_hba postgresql_ping: redirect: community.postgresql.postgresql_ping postgresql_privs: redirect: community.postgresql.postgresql_privs postgresql_publication: redirect: community.postgresql.postgresql_publication postgresql_query: redirect: community.postgresql.postgresql_query postgresql_schema: redirect: community.postgresql.postgresql_schema postgresql_sequence: redirect: community.postgresql.postgresql_sequence postgresql_set: redirect: community.postgresql.postgresql_set postgresql_slot: redirect: community.postgresql.postgresql_slot postgresql_subscription: redirect: community.postgresql.postgresql_subscription postgresql_table: redirect: community.postgresql.postgresql_table postgresql_tablespace: redirect: community.postgresql.postgresql_tablespace postgresql_user: redirect: community.postgresql.postgresql_user postgresql_user_obj_stat_info: redirect: community.postgresql.postgresql_user_obj_stat_info proxysql_backend_servers: redirect: community.proxysql.proxysql_backend_servers proxysql_global_variables: redirect: community.proxysql.proxysql_global_variables proxysql_manage_config: redirect: community.proxysql.proxysql_manage_config proxysql_mysql_users: redirect: community.proxysql.proxysql_mysql_users proxysql_query_rules: redirect: community.proxysql.proxysql_query_rules proxysql_replication_hostgroups: redirect: community.proxysql.proxysql_replication_hostgroups proxysql_scheduler: redirect: community.proxysql.proxysql_scheduler vertica_facts: redirect: community.general.vertica_facts vertica_configuration: redirect: community.general.vertica_configuration vertica_info: redirect: community.general.vertica_info vertica_role: redirect: community.general.vertica_role vertica_schema: redirect: community.general.vertica_schema vertica_user: redirect: community.general.vertica_user archive: redirect: community.general.archive ini_file: redirect: community.general.ini_file iso_extract: redirect: community.general.iso_extract patch: redirect: ansible.posix.patch read_csv: redirect: community.general.read_csv xattr: redirect: community.general.xattr xml: redirect: community.general.xml onepassword_facts: redirect: community.general.onepassword_facts ipa_config: redirect: community.general.ipa_config ipa_dnsrecord: redirect: community.general.ipa_dnsrecord ipa_dnszone: redirect: community.general.ipa_dnszone ipa_group: redirect: community.general.ipa_group ipa_hbacrule: redirect: community.general.ipa_hbacrule ipa_host: redirect: community.general.ipa_host ipa_hostgroup: redirect: community.general.ipa_hostgroup ipa_role: redirect: community.general.ipa_role ipa_service: redirect: community.general.ipa_service ipa_subca: redirect: community.general.ipa_subca ipa_sudocmd: redirect: community.general.ipa_sudocmd ipa_sudocmdgroup: redirect: community.general.ipa_sudocmdgroup ipa_sudorule: redirect: community.general.ipa_sudorule ipa_user: redirect: community.general.ipa_user ipa_vault: redirect: community.general.ipa_vault keycloak_client: redirect: community.general.keycloak_client keycloak_clienttemplate: redirect: community.general.keycloak_clienttemplate keycloak_group: redirect: community.general.keycloak_group onepassword_info: redirect: community.general.onepassword_info opendj_backendprop: redirect: community.general.opendj_backendprop rabbitmq_binding: redirect: community.rabbitmq.rabbitmq_binding rabbitmq_exchange: redirect: community.rabbitmq.rabbitmq_exchange rabbitmq_global_parameter: redirect: community.rabbitmq.rabbitmq_global_parameter rabbitmq_parameter: redirect: community.rabbitmq.rabbitmq_parameter rabbitmq_plugin: redirect: community.rabbitmq.rabbitmq_plugin rabbitmq_policy: redirect: community.rabbitmq.rabbitmq_policy rabbitmq_queue: redirect: community.rabbitmq.rabbitmq_queue rabbitmq_user: redirect: community.rabbitmq.rabbitmq_user rabbitmq_vhost: redirect: community.rabbitmq.rabbitmq_vhost rabbitmq_vhost_limits: redirect: community.rabbitmq.rabbitmq_vhost_limits airbrake_deployment: redirect: community.general.airbrake_deployment bigpanda: redirect: community.general.bigpanda circonus_annotation: redirect: community.general.circonus_annotation datadog_event: redirect: community.general.datadog_event datadog_monitor: redirect: community.general.datadog_monitor honeybadger_deployment: redirect: community.general.honeybadger_deployment icinga2_feature: redirect: community.general.icinga2_feature icinga2_host: redirect: community.general.icinga2_host librato_annotation: redirect: community.general.librato_annotation logentries: redirect: community.general.logentries logicmonitor: redirect: community.general.logicmonitor logicmonitor_facts: redirect: community.general.logicmonitor_facts logstash_plugin: redirect: community.general.logstash_plugin monit: redirect: community.general.monit nagios: redirect: community.general.nagios newrelic_deployment: redirect: community.general.newrelic_deployment pagerduty: redirect: community.general.pagerduty pagerduty_alert: redirect: community.general.pagerduty_alert pingdom: redirect: community.general.pingdom rollbar_deployment: redirect: community.general.rollbar_deployment sensu_check: redirect: community.general.sensu_check sensu_client: redirect: community.general.sensu_client sensu_handler: redirect: community.general.sensu_handler sensu_silence: redirect: community.general.sensu_silence sensu_subscription: redirect: community.general.sensu_subscription spectrum_device: redirect: community.general.spectrum_device stackdriver: redirect: community.general.stackdriver statusio_maintenance: redirect: community.general.statusio_maintenance uptimerobot: redirect: community.general.uptimerobot zabbix_group_facts: redirect: community.zabbix.zabbix_group_facts zabbix_host_facts: redirect: community.zabbix.zabbix_host_facts zabbix_action: redirect: community.zabbix.zabbix_action zabbix_group: redirect: community.zabbix.zabbix_group zabbix_group_info: redirect: community.zabbix.zabbix_group_info zabbix_host: redirect: community.zabbix.zabbix_host zabbix_host_events_info: redirect: community.zabbix.zabbix_host_events_info zabbix_host_info: redirect: community.zabbix.zabbix_host_info zabbix_hostmacro: redirect: community.zabbix.zabbix_hostmacro zabbix_maintenance: redirect: community.zabbix.zabbix_maintenance zabbix_map: redirect: community.zabbix.zabbix_map zabbix_mediatype: redirect: community.zabbix.zabbix_mediatype zabbix_proxy: redirect: community.zabbix.zabbix_proxy zabbix_screen: redirect: community.zabbix.zabbix_screen zabbix_service: redirect: community.zabbix.zabbix_service zabbix_template: redirect: community.zabbix.zabbix_template zabbix_template_info: redirect: community.zabbix.zabbix_template_info zabbix_user: redirect: community.zabbix.zabbix_user zabbix_user_info: redirect: community.zabbix.zabbix_user_info zabbix_valuemap: redirect: community.zabbix.zabbix_valuemap cloudflare_dns: redirect: community.general.cloudflare_dns dnsimple: redirect: community.general.dnsimple dnsmadeeasy: redirect: community.general.dnsmadeeasy exo_dns_domain: redirect: ngine_io.exoscale.exo_dns_domain exo_dns_record: redirect: ngine_io.exoscale.exo_dns_record haproxy: redirect: community.general.haproxy hetzner_failover_ip: redirect: community.hrobot.failover_ip hetzner_failover_ip_info: redirect: community.hrobot.failover_ip_info hetzner_firewall: redirect: community.hrobot.firewall hetzner_firewall_info: redirect: community.hrobot.firewall_info infinity: redirect: community.general.infinity ip_netns: redirect: community.general.ip_netns ipify_facts: redirect: community.general.ipify_facts ipinfoio_facts: redirect: community.general.ipinfoio_facts ipwcli_dns: redirect: community.general.ipwcli_dns ldap_attr: redirect: community.general.ldap_attr ldap_attrs: redirect: community.general.ldap_attrs ldap_entry: redirect: community.general.ldap_entry ldap_passwd: redirect: community.general.ldap_passwd lldp: redirect: community.general.lldp netcup_dns: redirect: community.general.netcup_dns nios_a_record: redirect: community.general.nios_a_record nios_aaaa_record: redirect: community.general.nios_aaaa_record nios_cname_record: redirect: community.general.nios_cname_record nios_dns_view: redirect: community.general.nios_dns_view nios_fixed_address: redirect: community.general.nios_fixed_address nios_host_record: redirect: community.general.nios_host_record nios_member: redirect: community.general.nios_member nios_mx_record: redirect: community.general.nios_mx_record nios_naptr_record: redirect: community.general.nios_naptr_record nios_network: redirect: community.general.nios_network nios_network_view: redirect: community.general.nios_network_view nios_nsgroup: redirect: community.general.nios_nsgroup nios_ptr_record: redirect: community.general.nios_ptr_record nios_srv_record: redirect: community.general.nios_srv_record nios_txt_record: redirect: community.general.nios_txt_record nios_zone: redirect: community.general.nios_zone nmcli: redirect: community.general.nmcli nsupdate: redirect: community.general.nsupdate omapi_host: redirect: community.general.omapi_host snmp_facts: redirect: community.general.snmp_facts a10_server: redirect: community.network.a10_server a10_server_axapi3: redirect: community.network.a10_server_axapi3 a10_service_group: redirect: community.network.a10_service_group a10_virtual_server: redirect: community.network.a10_virtual_server aci_intf_policy_fc: redirect: cisco.aci.aci_interface_policy_fc aci_intf_policy_l2: redirect: cisco.aci.aci_interface_policy_l2 aci_intf_policy_lldp: redirect: cisco.aci.aci_interface_policy_lldp aci_intf_policy_mcp: redirect: cisco.aci.aci_interface_policy_mcp aci_intf_policy_port_channel: redirect: cisco.aci.aci_interface_policy_port_channel aci_intf_policy_port_security: redirect: cisco.aci.aci_interface_policy_port_security mso_schema_template_external_epg_contract: redirect: cisco.mso.mso_schema_template_external_epg_contract mso_schema_template_external_epg_subnet: redirect: cisco.mso.mso_schema_template_external_epg_subnet aireos_command: redirect: community.network.aireos_command aireos_config: redirect: community.network.aireos_config apconos_command: redirect: community.network.apconos_command aruba_command: redirect: community.network.aruba_command aruba_config: redirect: community.network.aruba_config avi_actiongroupconfig: redirect: community.network.avi_actiongroupconfig avi_alertconfig: redirect: community.network.avi_alertconfig avi_alertemailconfig: redirect: community.network.avi_alertemailconfig avi_alertscriptconfig: redirect: community.network.avi_alertscriptconfig avi_alertsyslogconfig: redirect: community.network.avi_alertsyslogconfig avi_analyticsprofile: redirect: community.network.avi_analyticsprofile avi_api_session: redirect: community.network.avi_api_session avi_api_version: redirect: community.network.avi_api_version avi_applicationpersistenceprofile: redirect: community.network.avi_applicationpersistenceprofile avi_applicationprofile: redirect: community.network.avi_applicationprofile avi_authprofile: redirect: community.network.avi_authprofile avi_autoscalelaunchconfig: redirect: community.network.avi_autoscalelaunchconfig avi_backup: redirect: community.network.avi_backup avi_backupconfiguration: redirect: community.network.avi_backupconfiguration avi_certificatemanagementprofile: redirect: community.network.avi_certificatemanagementprofile avi_cloud: redirect: community.network.avi_cloud avi_cloudconnectoruser: redirect: community.network.avi_cloudconnectoruser avi_cloudproperties: redirect: community.network.avi_cloudproperties avi_cluster: redirect: community.network.avi_cluster avi_clusterclouddetails: redirect: community.network.avi_clusterclouddetails avi_controllerproperties: redirect: community.network.avi_controllerproperties avi_customipamdnsprofile: redirect: community.network.avi_customipamdnsprofile avi_dnspolicy: redirect: community.network.avi_dnspolicy avi_errorpagebody: redirect: community.network.avi_errorpagebody avi_errorpageprofile: redirect: community.network.avi_errorpageprofile avi_gslb: redirect: community.network.avi_gslb avi_gslbgeodbprofile: redirect: community.network.avi_gslbgeodbprofile avi_gslbservice: redirect: community.network.avi_gslbservice avi_gslbservice_patch_member: redirect: community.network.avi_gslbservice_patch_member avi_hardwaresecuritymodulegroup: redirect: community.network.avi_hardwaresecuritymodulegroup avi_healthmonitor: redirect: community.network.avi_healthmonitor avi_httppolicyset: redirect: community.network.avi_httppolicyset avi_ipaddrgroup: redirect: community.network.avi_ipaddrgroup avi_ipamdnsproviderprofile: redirect: community.network.avi_ipamdnsproviderprofile avi_l4policyset: redirect: community.network.avi_l4policyset avi_microservicegroup: redirect: community.network.avi_microservicegroup avi_network: redirect: community.network.avi_network avi_networkprofile: redirect: community.network.avi_networkprofile avi_networksecuritypolicy: redirect: community.network.avi_networksecuritypolicy avi_pkiprofile: redirect: community.network.avi_pkiprofile avi_pool: redirect: community.network.avi_pool avi_poolgroup: redirect: community.network.avi_poolgroup avi_poolgroupdeploymentpolicy: redirect: community.network.avi_poolgroupdeploymentpolicy avi_prioritylabels: redirect: community.network.avi_prioritylabels avi_role: redirect: community.network.avi_role avi_scheduler: redirect: community.network.avi_scheduler avi_seproperties: redirect: community.network.avi_seproperties avi_serverautoscalepolicy: redirect: community.network.avi_serverautoscalepolicy avi_serviceengine: redirect: community.network.avi_serviceengine avi_serviceenginegroup: redirect: community.network.avi_serviceenginegroup avi_snmptrapprofile: redirect: community.network.avi_snmptrapprofile avi_sslkeyandcertificate: redirect: community.network.avi_sslkeyandcertificate avi_sslprofile: redirect: community.network.avi_sslprofile avi_stringgroup: redirect: community.network.avi_stringgroup avi_systemconfiguration: redirect: community.network.avi_systemconfiguration avi_tenant: redirect: community.network.avi_tenant avi_trafficcloneprofile: redirect: community.network.avi_trafficcloneprofile avi_user: redirect: community.network.avi_user avi_useraccount: redirect: community.network.avi_useraccount avi_useraccountprofile: redirect: community.network.avi_useraccountprofile avi_virtualservice: redirect: community.network.avi_virtualservice avi_vrfcontext: redirect: community.network.avi_vrfcontext avi_vsdatascriptset: redirect: community.network.avi_vsdatascriptset avi_vsvip: redirect: community.network.avi_vsvip avi_webhook: redirect: community.network.avi_webhook bcf_switch: redirect: community.network.bcf_switch bigmon_chain: redirect: community.network.bigmon_chain bigmon_policy: redirect: community.network.bigmon_policy checkpoint_access_layer_facts: redirect: check_point.mgmt.checkpoint_access_layer_facts checkpoint_access_rule: redirect: check_point.mgmt.checkpoint_access_rule checkpoint_access_rule_facts: redirect: check_point.mgmt.checkpoint_access_rule_facts checkpoint_host: redirect: check_point.mgmt.checkpoint_host checkpoint_host_facts: redirect: check_point.mgmt.checkpoint_host_facts checkpoint_object_facts: redirect: check_point.mgmt.checkpoint_object_facts checkpoint_run_script: redirect: check_point.mgmt.checkpoint_run_script checkpoint_session: redirect: check_point.mgmt.checkpoint_session checkpoint_task_facts: redirect: check_point.mgmt.checkpoint_task_facts cp_publish: redirect: community.network.cp_publish ce_aaa_server: redirect: community.network.ce_aaa_server ce_aaa_server_host: redirect: community.network.ce_aaa_server_host ce_acl: redirect: community.network.ce_acl ce_acl_advance: redirect: community.network.ce_acl_advance ce_acl_interface: redirect: community.network.ce_acl_interface ce_bfd_global: redirect: community.network.ce_bfd_global ce_bfd_session: redirect: community.network.ce_bfd_session ce_bfd_view: redirect: community.network.ce_bfd_view ce_bgp: redirect: community.network.ce_bgp ce_bgp_af: redirect: community.network.ce_bgp_af ce_bgp_neighbor: redirect: community.network.ce_bgp_neighbor ce_bgp_neighbor_af: redirect: community.network.ce_bgp_neighbor_af ce_command: redirect: community.network.ce_command ce_config: redirect: community.network.ce_config ce_dldp: redirect: community.network.ce_dldp ce_dldp_interface: redirect: community.network.ce_dldp_interface ce_eth_trunk: redirect: community.network.ce_eth_trunk ce_evpn_bd_vni: redirect: community.network.ce_evpn_bd_vni ce_evpn_bgp: redirect: community.network.ce_evpn_bgp ce_evpn_bgp_rr: redirect: community.network.ce_evpn_bgp_rr ce_evpn_global: redirect: community.network.ce_evpn_global ce_facts: redirect: community.network.ce_facts ce_file_copy: redirect: community.network.ce_file_copy ce_info_center_debug: redirect: community.network.ce_info_center_debug ce_info_center_global: redirect: community.network.ce_info_center_global ce_info_center_log: redirect: community.network.ce_info_center_log ce_info_center_trap: redirect: community.network.ce_info_center_trap ce_interface: redirect: community.network.ce_interface ce_interface_ospf: redirect: community.network.ce_interface_ospf ce_ip_interface: redirect: community.network.ce_ip_interface ce_is_is_instance: redirect: community.network.ce_is_is_instance ce_is_is_interface: redirect: community.network.ce_is_is_interface ce_is_is_view: redirect: community.network.ce_is_is_view ce_lacp: redirect: community.network.ce_lacp ce_link_status: redirect: community.network.ce_link_status ce_lldp: redirect: community.network.ce_lldp ce_lldp_interface: redirect: community.network.ce_lldp_interface ce_mdn_interface: redirect: community.network.ce_mdn_interface ce_mlag_config: redirect: community.network.ce_mlag_config ce_mlag_interface: redirect: community.network.ce_mlag_interface ce_mtu: redirect: community.network.ce_mtu ce_multicast_global: redirect: community.network.ce_multicast_global ce_multicast_igmp_enable: redirect: community.network.ce_multicast_igmp_enable ce_netconf: redirect: community.network.ce_netconf ce_netstream_aging: redirect: community.network.ce_netstream_aging ce_netstream_export: redirect: community.network.ce_netstream_export ce_netstream_global: redirect: community.network.ce_netstream_global ce_netstream_template: redirect: community.network.ce_netstream_template ce_ntp: redirect: community.network.ce_ntp ce_ntp_auth: redirect: community.network.ce_ntp_auth ce_ospf: redirect: community.network.ce_ospf ce_ospf_vrf: redirect: community.network.ce_ospf_vrf ce_reboot: redirect: community.network.ce_reboot ce_rollback: redirect: community.network.ce_rollback ce_sflow: redirect: community.network.ce_sflow ce_snmp_community: redirect: community.network.ce_snmp_community ce_snmp_contact: redirect: community.network.ce_snmp_contact ce_snmp_location: redirect: community.network.ce_snmp_location ce_snmp_target_host: redirect: community.network.ce_snmp_target_host ce_snmp_traps: redirect: community.network.ce_snmp_traps ce_snmp_user: redirect: community.network.ce_snmp_user ce_startup: redirect: community.network.ce_startup ce_static_route: redirect: community.network.ce_static_route ce_static_route_bfd: redirect: community.network.ce_static_route_bfd ce_stp: redirect: community.network.ce_stp ce_switchport: redirect: community.network.ce_switchport ce_vlan: redirect: community.network.ce_vlan ce_vrf: redirect: community.network.ce_vrf ce_vrf_af: redirect: community.network.ce_vrf_af ce_vrf_interface: redirect: community.network.ce_vrf_interface ce_vrrp: redirect: community.network.ce_vrrp ce_vxlan_arp: redirect: community.network.ce_vxlan_arp ce_vxlan_gateway: redirect: community.network.ce_vxlan_gateway ce_vxlan_global: redirect: community.network.ce_vxlan_global ce_vxlan_tunnel: redirect: community.network.ce_vxlan_tunnel ce_vxlan_vap: redirect: community.network.ce_vxlan_vap cv_server_provision: redirect: community.network.cv_server_provision cnos_backup: redirect: community.network.cnos_backup cnos_banner: redirect: community.network.cnos_banner cnos_bgp: redirect: community.network.cnos_bgp cnos_command: redirect: community.network.cnos_command cnos_conditional_command: redirect: community.network.cnos_conditional_command cnos_conditional_template: redirect: community.network.cnos_conditional_template cnos_config: redirect: community.network.cnos_config cnos_factory: redirect: community.network.cnos_factory cnos_facts: redirect: community.network.cnos_facts cnos_image: redirect: community.network.cnos_image cnos_interface: redirect: community.network.cnos_interface cnos_l2_interface: redirect: community.network.cnos_l2_interface cnos_l3_interface: redirect: community.network.cnos_l3_interface cnos_linkagg: redirect: community.network.cnos_linkagg cnos_lldp: redirect: community.network.cnos_lldp cnos_logging: redirect: community.network.cnos_logging cnos_reload: redirect: community.network.cnos_reload cnos_rollback: redirect: community.network.cnos_rollback cnos_save: redirect: community.network.cnos_save cnos_showrun: redirect: community.network.cnos_showrun cnos_static_route: redirect: community.network.cnos_static_route cnos_system: redirect: community.network.cnos_system cnos_template: redirect: community.network.cnos_template cnos_user: redirect: community.network.cnos_user cnos_vlag: redirect: community.network.cnos_vlag cnos_vlan: redirect: community.network.cnos_vlan cnos_vrf: redirect: community.network.cnos_vrf nclu: redirect: community.network.nclu edgeos_command: redirect: community.network.edgeos_command edgeos_config: redirect: community.network.edgeos_config edgeos_facts: redirect: community.network.edgeos_facts edgeswitch_facts: redirect: community.network.edgeswitch_facts edgeswitch_vlan: redirect: community.network.edgeswitch_vlan enos_command: redirect: community.network.enos_command enos_config: redirect: community.network.enos_config enos_facts: redirect: community.network.enos_facts eric_eccli_command: redirect: community.network.eric_eccli_command exos_command: redirect: community.network.exos_command exos_config: redirect: community.network.exos_config exos_facts: redirect: community.network.exos_facts exos_l2_interfaces: redirect: community.network.exos_l2_interfaces exos_lldp_global: redirect: community.network.exos_lldp_global exos_lldp_interfaces: redirect: community.network.exos_lldp_interfaces exos_vlans: redirect: community.network.exos_vlans bigip_asm_policy: tombstone: removal_date: 2019-11-06 warning_text: bigip_asm_policy has been removed please use bigip_asm_policy_manage instead. bigip_device_facts: redirect: f5networks.f5_modules.bigip_device_info bigip_iapplx_package: redirect: f5networks.f5_modules.bigip_lx_package bigip_security_address_list: redirect: f5networks.f5_modules.bigip_firewall_address_list bigip_security_port_list: redirect: f5networks.f5_modules.bigip_firewall_port_list bigip_traffic_group: redirect: f5networks.f5_modules.bigip_device_traffic_group bigip_facts: tombstone: removal_date: 2019-11-06 warning_text: bigip_facts has been removed please use bigip_device_info module. bigip_gtm_facts: tombstone: removal_date: 2019-11-06 warning_text: bigip_gtm_facts has been removed please use bigip_device_info module. faz_device: redirect: community.fortios.faz_device fmgr_device: redirect: community.fortios.fmgr_device fmgr_device_config: redirect: community.fortios.fmgr_device_config fmgr_device_group: redirect: community.fortios.fmgr_device_group fmgr_device_provision_template: redirect: community.fortios.fmgr_device_provision_template fmgr_fwobj_address: redirect: community.fortios.fmgr_fwobj_address fmgr_fwobj_ippool: redirect: community.fortios.fmgr_fwobj_ippool fmgr_fwobj_ippool6: redirect: community.fortios.fmgr_fwobj_ippool6 fmgr_fwobj_service: redirect: community.fortios.fmgr_fwobj_service fmgr_fwobj_vip: redirect: community.fortios.fmgr_fwobj_vip fmgr_fwpol_ipv4: redirect: community.fortios.fmgr_fwpol_ipv4 fmgr_fwpol_package: redirect: community.fortios.fmgr_fwpol_package fmgr_ha: redirect: community.fortios.fmgr_ha fmgr_provisioning: redirect: community.fortios.fmgr_provisioning fmgr_query: redirect: community.fortios.fmgr_query fmgr_script: redirect: community.fortios.fmgr_script fmgr_secprof_appctrl: redirect: community.fortios.fmgr_secprof_appctrl fmgr_secprof_av: redirect: community.fortios.fmgr_secprof_av fmgr_secprof_dns: redirect: community.fortios.fmgr_secprof_dns fmgr_secprof_ips: redirect: community.fortios.fmgr_secprof_ips fmgr_secprof_profile_group: redirect: community.fortios.fmgr_secprof_profile_group fmgr_secprof_proxy: redirect: community.fortios.fmgr_secprof_proxy fmgr_secprof_spam: redirect: community.fortios.fmgr_secprof_spam fmgr_secprof_ssl_ssh: redirect: community.fortios.fmgr_secprof_ssl_ssh fmgr_secprof_voip: redirect: community.fortios.fmgr_secprof_voip fmgr_secprof_waf: redirect: community.fortios.fmgr_secprof_waf fmgr_secprof_wanopt: redirect: community.fortios.fmgr_secprof_wanopt fmgr_secprof_web: redirect: community.fortios.fmgr_secprof_web ftd_configuration: redirect: community.network.ftd_configuration ftd_file_download: redirect: community.network.ftd_file_download ftd_file_upload: redirect: community.network.ftd_file_upload ftd_install: redirect: community.network.ftd_install icx_banner: redirect: community.network.icx_banner icx_command: redirect: community.network.icx_command icx_config: redirect: community.network.icx_config icx_copy: redirect: community.network.icx_copy icx_facts: redirect: community.network.icx_facts icx_interface: redirect: community.network.icx_interface icx_l3_interface: redirect: community.network.icx_l3_interface icx_linkagg: redirect: community.network.icx_linkagg icx_lldp: redirect: community.network.icx_lldp icx_logging: redirect: community.network.icx_logging icx_ping: redirect: community.network.icx_ping icx_static_route: redirect: community.network.icx_static_route icx_system: redirect: community.network.icx_system icx_user: redirect: community.network.icx_user icx_vlan: redirect: community.network.icx_vlan dladm_etherstub: redirect: community.network.dladm_etherstub dladm_iptun: redirect: community.network.dladm_iptun dladm_linkprop: redirect: community.network.dladm_linkprop dladm_vlan: redirect: community.network.dladm_vlan dladm_vnic: redirect: community.network.dladm_vnic flowadm: redirect: community.network.flowadm ipadm_addr: redirect: community.network.ipadm_addr ipadm_addrprop: redirect: community.network.ipadm_addrprop ipadm_if: redirect: community.network.ipadm_if ipadm_ifprop: redirect: community.network.ipadm_ifprop ipadm_prop: redirect: community.network.ipadm_prop ig_config: redirect: community.network.ig_config ig_unit_information: redirect: community.network.ig_unit_information ironware_command: redirect: community.network.ironware_command ironware_config: redirect: community.network.ironware_config ironware_facts: redirect: community.network.ironware_facts iap_start_workflow: redirect: community.network.iap_start_workflow iap_token: redirect: community.network.iap_token netact_cm_command: redirect: community.network.netact_cm_command netscaler_cs_action: redirect: community.network.netscaler_cs_action netscaler_cs_policy: redirect: community.network.netscaler_cs_policy netscaler_cs_vserver: redirect: community.network.netscaler_cs_vserver netscaler_gslb_service: redirect: community.network.netscaler_gslb_service netscaler_gslb_site: redirect: community.network.netscaler_gslb_site netscaler_gslb_vserver: redirect: community.network.netscaler_gslb_vserver netscaler_lb_monitor: redirect: community.network.netscaler_lb_monitor netscaler_lb_vserver: redirect: community.network.netscaler_lb_vserver netscaler_nitro_request: redirect: community.network.netscaler_nitro_request netscaler_save_config: redirect: community.network.netscaler_save_config netscaler_server: redirect: community.network.netscaler_server netscaler_service: redirect: community.network.netscaler_service netscaler_servicegroup: redirect: community.network.netscaler_servicegroup netscaler_ssl_certkey: redirect: community.network.netscaler_ssl_certkey pn_cluster: redirect: community.network.pn_cluster pn_ospf: redirect: community.network.pn_ospf pn_ospfarea: redirect: community.network.pn_ospfarea pn_show: redirect: community.network.pn_show pn_trunk: redirect: community.network.pn_trunk pn_vlag: redirect: community.network.pn_vlag pn_vlan: redirect: community.network.pn_vlan pn_vrouter: redirect: community.network.pn_vrouter pn_vrouterbgp: redirect: community.network.pn_vrouterbgp pn_vrouterif: redirect: community.network.pn_vrouterif pn_vrouterlbif: redirect: community.network.pn_vrouterlbif pn_access_list: redirect: community.network.pn_access_list pn_access_list_ip: redirect: community.network.pn_access_list_ip pn_admin_service: redirect: community.network.pn_admin_service pn_admin_session_timeout: redirect: community.network.pn_admin_session_timeout pn_admin_syslog: redirect: community.network.pn_admin_syslog pn_connection_stats_settings: redirect: community.network.pn_connection_stats_settings pn_cpu_class: redirect: community.network.pn_cpu_class pn_cpu_mgmt_class: redirect: community.network.pn_cpu_mgmt_class pn_dhcp_filter: redirect: community.network.pn_dhcp_filter pn_dscp_map: redirect: community.network.pn_dscp_map pn_dscp_map_pri_map: redirect: community.network.pn_dscp_map_pri_map pn_fabric_local: redirect: community.network.pn_fabric_local pn_igmp_snooping: redirect: community.network.pn_igmp_snooping pn_ipv6security_raguard: redirect: community.network.pn_ipv6security_raguard pn_ipv6security_raguard_port: redirect: community.network.pn_ipv6security_raguard_port pn_ipv6security_raguard_vlan: redirect: community.network.pn_ipv6security_raguard_vlan pn_log_audit_exception: redirect: community.network.pn_log_audit_exception pn_port_config: redirect: community.network.pn_port_config pn_port_cos_bw: redirect: community.network.pn_port_cos_bw pn_port_cos_rate_setting: redirect: community.network.pn_port_cos_rate_setting pn_prefix_list: redirect: community.network.pn_prefix_list pn_prefix_list_network: redirect: community.network.pn_prefix_list_network pn_role: redirect: community.network.pn_role pn_snmp_community: redirect: community.network.pn_snmp_community pn_snmp_trap_sink: redirect: community.network.pn_snmp_trap_sink pn_snmp_vacm: redirect: community.network.pn_snmp_vacm pn_stp: redirect: community.network.pn_stp pn_stp_port: redirect: community.network.pn_stp_port pn_switch_setup: redirect: community.network.pn_switch_setup pn_user: redirect: community.network.pn_user pn_vflow_table_profile: redirect: community.network.pn_vflow_table_profile pn_vrouter_bgp: redirect: community.network.pn_vrouter_bgp pn_vrouter_bgp_network: redirect: community.network.pn_vrouter_bgp_network pn_vrouter_interface_ip: redirect: community.network.pn_vrouter_interface_ip pn_vrouter_loopback_interface: redirect: community.network.pn_vrouter_loopback_interface pn_vrouter_ospf: redirect: community.network.pn_vrouter_ospf pn_vrouter_ospf6: redirect: community.network.pn_vrouter_ospf6 pn_vrouter_packet_relay: redirect: community.network.pn_vrouter_packet_relay pn_vrouter_pim_config: redirect: community.network.pn_vrouter_pim_config pn_vtep: redirect: community.network.pn_vtep nos_command: redirect: community.network.nos_command nos_config: redirect: community.network.nos_config nos_facts: redirect: community.network.nos_facts nso_action: redirect: cisco.nso.nso_action nso_config: redirect: cisco.nso.nso_config nso_query: redirect: cisco.nso.nso_query nso_show: redirect: cisco.nso.nso_show nso_verify: redirect: cisco.nso.nso_verify nuage_vspk: redirect: community.network.nuage_vspk onyx_aaa: redirect: mellanox.onyx.onyx_aaa onyx_bfd: redirect: mellanox.onyx.onyx_bfd onyx_bgp: redirect: mellanox.onyx.onyx_bgp onyx_buffer_pool: redirect: mellanox.onyx.onyx_buffer_pool onyx_command: redirect: mellanox.onyx.onyx_command onyx_config: redirect: mellanox.onyx.onyx_config onyx_facts: redirect: mellanox.onyx.onyx_facts onyx_igmp: redirect: mellanox.onyx.onyx_igmp onyx_igmp_interface: redirect: mellanox.onyx.onyx_igmp_interface onyx_igmp_vlan: redirect: mellanox.onyx.onyx_igmp_vlan onyx_interface: redirect: mellanox.onyx.onyx_interface onyx_l2_interface: redirect: mellanox.onyx.onyx_l2_interface onyx_l3_interface: redirect: mellanox.onyx.onyx_l3_interface onyx_linkagg: redirect: mellanox.onyx.onyx_linkagg onyx_lldp: redirect: mellanox.onyx.onyx_lldp onyx_lldp_interface: redirect: mellanox.onyx.onyx_lldp_interface onyx_magp: redirect: mellanox.onyx.onyx_magp onyx_mlag_ipl: redirect: mellanox.onyx.onyx_mlag_ipl onyx_mlag_vip: redirect: mellanox.onyx.onyx_mlag_vip onyx_ntp: redirect: mellanox.onyx.onyx_ntp onyx_ntp_servers_peers: redirect: mellanox.onyx.onyx_ntp_servers_peers onyx_ospf: redirect: mellanox.onyx.onyx_ospf onyx_pfc_interface: redirect: mellanox.onyx.onyx_pfc_interface onyx_protocol: redirect: mellanox.onyx.onyx_protocol onyx_ptp_global: redirect: mellanox.onyx.onyx_ptp_global onyx_ptp_interface: redirect: mellanox.onyx.onyx_ptp_interface onyx_qos: redirect: mellanox.onyx.onyx_qos onyx_snmp: redirect: mellanox.onyx.onyx_snmp onyx_snmp_hosts: redirect: mellanox.onyx.onyx_snmp_hosts onyx_snmp_users: redirect: mellanox.onyx.onyx_snmp_users onyx_syslog_files: redirect: mellanox.onyx.onyx_syslog_files onyx_syslog_remote: redirect: mellanox.onyx.onyx_syslog_remote onyx_traffic_class: redirect: mellanox.onyx.onyx_traffic_class onyx_username: redirect: mellanox.onyx.onyx_username onyx_vlan: redirect: mellanox.onyx.onyx_vlan onyx_vxlan: redirect: mellanox.onyx.onyx_vxlan onyx_wjh: redirect: mellanox.onyx.onyx_wjh opx_cps: redirect: community.network.opx_cps ordnance_config: redirect: community.network.ordnance_config ordnance_facts: redirect: community.network.ordnance_facts panos_admin: redirect: community.network.panos_admin panos_admpwd: redirect: community.network.panos_admpwd panos_cert_gen_ssh: redirect: community.network.panos_cert_gen_ssh panos_check: redirect: community.network.panos_check panos_commit: redirect: community.network.panos_commit panos_dag: redirect: community.network.panos_dag panos_dag_tags: redirect: community.network.panos_dag_tags panos_import: redirect: community.network.panos_import panos_interface: redirect: community.network.panos_interface panos_lic: redirect: community.network.panos_lic panos_loadcfg: redirect: community.network.panos_loadcfg panos_match_rule: redirect: community.network.panos_match_rule panos_mgtconfig: redirect: community.network.panos_mgtconfig panos_nat_rule: redirect: community.network.panos_nat_rule panos_object: redirect: community.network.panos_object panos_op: redirect: community.network.panos_op panos_pg: redirect: community.network.panos_pg panos_query_rules: redirect: community.network.panos_query_rules panos_restart: redirect: community.network.panos_restart panos_sag: redirect: community.network.panos_sag panos_security_rule: redirect: community.network.panos_security_rule panos_set: redirect: community.network.panos_set vdirect_commit: redirect: community.network.vdirect_commit vdirect_file: redirect: community.network.vdirect_file vdirect_runnable: redirect: community.network.vdirect_runnable routeros_command: redirect: community.routeros.command routeros_facts: redirect: community.routeros.facts slxos_command: redirect: community.network.slxos_command slxos_config: redirect: community.network.slxos_config slxos_facts: redirect: community.network.slxos_facts slxos_interface: redirect: community.network.slxos_interface slxos_l2_interface: redirect: community.network.slxos_l2_interface slxos_l3_interface: redirect: community.network.slxos_l3_interface slxos_linkagg: redirect: community.network.slxos_linkagg slxos_lldp: redirect: community.network.slxos_lldp slxos_vlan: redirect: community.network.slxos_vlan sros_command: redirect: community.network.sros_command sros_config: redirect: community.network.sros_config sros_rollback: redirect: community.network.sros_rollback voss_command: redirect: community.network.voss_command voss_config: redirect: community.network.voss_config voss_facts: redirect: community.network.voss_facts osx_say: redirect: community.general.say bearychat: redirect: community.general.bearychat campfire: redirect: community.general.campfire catapult: redirect: community.general.catapult cisco_spark: redirect: community.general.cisco_spark flowdock: redirect: community.general.flowdock grove: redirect: community.general.grove hipchat: redirect: community.general.hipchat irc: redirect: community.general.irc jabber: redirect: community.general.jabber logentries_msg: redirect: community.general.logentries_msg mail: redirect: community.general.mail matrix: redirect: community.general.matrix mattermost: redirect: community.general.mattermost mqtt: redirect: community.general.mqtt nexmo: redirect: community.general.nexmo office_365_connector_card: redirect: community.general.office_365_connector_card pushbullet: redirect: community.general.pushbullet pushover: redirect: community.general.pushover rabbitmq_publish: redirect: community.rabbitmq.rabbitmq_publish rocketchat: redirect: community.general.rocketchat say: redirect: community.general.say sendgrid: redirect: community.general.sendgrid slack: redirect: community.general.slack syslogger: redirect: community.general.syslogger telegram: redirect: community.general.telegram twilio: redirect: community.general.twilio typetalk: redirect: community.general.typetalk bower: redirect: community.general.bower bundler: redirect: community.general.bundler composer: redirect: community.general.composer cpanm: redirect: community.general.cpanm easy_install: redirect: community.general.easy_install gem: redirect: community.general.gem maven_artifact: redirect: community.general.maven_artifact npm: redirect: community.general.npm pear: redirect: community.general.pear pip_package_info: redirect: community.general.pip_package_info yarn: redirect: community.general.yarn apk: redirect: community.general.apk apt_rpm: redirect: community.general.apt_rpm flatpak: redirect: community.general.flatpak flatpak_remote: redirect: community.general.flatpak_remote homebrew: redirect: community.general.homebrew homebrew_cask: redirect: community.general.homebrew_cask homebrew_tap: redirect: community.general.homebrew_tap installp: redirect: community.general.installp layman: redirect: community.general.layman macports: redirect: community.general.macports mas: redirect: community.general.mas openbsd_pkg: redirect: community.general.openbsd_pkg opkg: redirect: community.general.opkg pacman: redirect: community.general.pacman pkg5: redirect: community.general.pkg5 pkg5_publisher: redirect: community.general.pkg5_publisher pkgin: redirect: community.general.pkgin pkgng: redirect: community.general.pkgng pkgutil: redirect: community.general.pkgutil portage: redirect: community.general.portage portinstall: redirect: community.general.portinstall pulp_repo: redirect: community.general.pulp_repo redhat_subscription: redirect: community.general.redhat_subscription rhn_channel: redirect: community.general.rhn_channel rhn_register: redirect: community.general.rhn_register rhsm_release: redirect: community.general.rhsm_release rhsm_repository: redirect: community.general.rhsm_repository slackpkg: redirect: community.general.slackpkg snap: redirect: community.general.snap sorcery: redirect: community.general.sorcery svr4pkg: redirect: community.general.svr4pkg swdepot: redirect: community.general.swdepot swupd: redirect: community.general.swupd urpmi: redirect: community.general.urpmi xbps: redirect: community.general.xbps zypper: redirect: community.general.zypper zypper_repository: redirect: community.general.zypper_repository cobbler_sync: redirect: community.general.cobbler_sync cobbler_system: redirect: community.general.cobbler_system idrac_firmware: redirect: dellemc.openmanage.idrac_firmware idrac_server_config_profile: redirect: dellemc.openmanage.idrac_server_config_profile ome_device_info: redirect: dellemc.openmanage.ome_device_info foreman: redirect: community.general.foreman katello: redirect: community.general.katello hpilo_facts: redirect: community.general.hpilo_facts hpilo_boot: redirect: community.general.hpilo_boot hpilo_info: redirect: community.general.hpilo_info hponcfg: redirect: community.general.hponcfg imc_rest: redirect: community.general.imc_rest ipmi_boot: redirect: community.general.ipmi_boot ipmi_power: redirect: community.general.ipmi_power lxca_cmms: redirect: community.general.lxca_cmms lxca_nodes: redirect: community.general.lxca_nodes manageiq_alert_profiles: redirect: community.general.manageiq_alert_profiles manageiq_alerts: redirect: community.general.manageiq_alerts manageiq_group: redirect: community.general.manageiq_group manageiq_policies: redirect: community.general.manageiq_policies manageiq_provider: redirect: community.general.manageiq_provider manageiq_tags: redirect: community.general.manageiq_tags manageiq_tenant: redirect: community.general.manageiq_tenant manageiq_user: redirect: community.general.manageiq_user oneview_datacenter_facts: redirect: community.general.oneview_datacenter_facts oneview_enclosure_facts: redirect: community.general.oneview_enclosure_facts oneview_ethernet_network_facts: redirect: community.general.oneview_ethernet_network_facts oneview_fc_network_facts: redirect: community.general.oneview_fc_network_facts oneview_fcoe_network_facts: redirect: community.general.oneview_fcoe_network_facts oneview_logical_interconnect_group_facts: redirect: community.general.oneview_logical_interconnect_group_facts oneview_network_set_facts: redirect: community.general.oneview_network_set_facts oneview_san_manager_facts: redirect: community.general.oneview_san_manager_facts oneview_datacenter_info: redirect: community.general.oneview_datacenter_info oneview_enclosure_info: redirect: community.general.oneview_enclosure_info oneview_ethernet_network: redirect: community.general.oneview_ethernet_network oneview_ethernet_network_info: redirect: community.general.oneview_ethernet_network_info oneview_fc_network: redirect: community.general.oneview_fc_network oneview_fc_network_info: redirect: community.general.oneview_fc_network_info oneview_fcoe_network: redirect: community.general.oneview_fcoe_network oneview_fcoe_network_info: redirect: community.general.oneview_fcoe_network_info oneview_logical_interconnect_group: redirect: community.general.oneview_logical_interconnect_group oneview_logical_interconnect_group_info: redirect: community.general.oneview_logical_interconnect_group_info oneview_network_set: redirect: community.general.oneview_network_set oneview_network_set_info: redirect: community.general.oneview_network_set_info oneview_san_manager: redirect: community.general.oneview_san_manager oneview_san_manager_info: redirect: community.general.oneview_san_manager_info idrac_redfish_facts: redirect: community.general.idrac_redfish_facts redfish_facts: redirect: community.general.redfish_facts idrac_redfish_command: redirect: community.general.idrac_redfish_command idrac_redfish_config: redirect: community.general.idrac_redfish_config idrac_redfish_info: redirect: community.general.idrac_redfish_info redfish_command: redirect: community.general.redfish_command redfish_config: redirect: community.general.redfish_config redfish_info: redirect: community.general.redfish_info stacki_host: redirect: community.general.stacki_host wakeonlan: redirect: community.general.wakeonlan bitbucket_access_key: redirect: community.general.bitbucket_access_key bitbucket_pipeline_key_pair: redirect: community.general.bitbucket_pipeline_key_pair bitbucket_pipeline_known_host: redirect: community.general.bitbucket_pipeline_known_host bitbucket_pipeline_variable: redirect: community.general.bitbucket_pipeline_variable bzr: redirect: community.general.bzr git_config: redirect: community.general.git_config github_hooks: redirect: community.general.github_hooks github_webhook_facts: redirect: community.general.github_webhook_info github_deploy_key: redirect: community.general.github_deploy_key github_issue: redirect: community.general.github_issue github_key: redirect: community.general.github_key github_release: redirect: community.general.github_release github_webhook: redirect: community.general.github_webhook github_webhook_info: redirect: community.general.github_webhook_info gitlab_hooks: redirect: community.general.gitlab_hook gitlab_deploy_key: redirect: community.general.gitlab_deploy_key gitlab_group: redirect: community.general.gitlab_group gitlab_hook: redirect: community.general.gitlab_hook gitlab_project: redirect: community.general.gitlab_project gitlab_project_variable: redirect: community.general.gitlab_project_variable gitlab_runner: redirect: community.general.gitlab_runner gitlab_user: redirect: community.general.gitlab_user hg: redirect: community.general.hg emc_vnx_sg_member: redirect: community.general.emc_vnx_sg_member gluster_heal_facts: redirect: gluster.gluster.gluster_heal_info gluster_heal_info: redirect: gluster.gluster.gluster_heal_info gluster_peer: redirect: gluster.gluster.gluster_peer gluster_volume: redirect: gluster.gluster.gluster_volume ss_3par_cpg: redirect: community.general.ss_3par_cpg ibm_sa_domain: redirect: community.general.ibm_sa_domain ibm_sa_host: redirect: community.general.ibm_sa_host ibm_sa_host_ports: redirect: community.general.ibm_sa_host_ports ibm_sa_pool: redirect: community.general.ibm_sa_pool ibm_sa_vol: redirect: community.general.ibm_sa_vol ibm_sa_vol_map: redirect: community.general.ibm_sa_vol_map infini_export: redirect: infinidat.infinibox.infini_export infini_export_client: redirect: infinidat.infinibox.infini_export_client infini_fs: redirect: infinidat.infinibox.infini_fs infini_host: redirect: infinidat.infinibox.infini_host infini_pool: redirect: infinidat.infinibox.infini_pool infini_vol: redirect: infinidat.infinibox.infini_vol na_cdot_aggregate: redirect: community.general.na_cdot_aggregate na_cdot_license: redirect: community.general.na_cdot_license na_cdot_lun: redirect: community.general.na_cdot_lun na_cdot_qtree: redirect: community.general.na_cdot_qtree na_cdot_svm: redirect: community.general.na_cdot_svm na_cdot_user: redirect: community.general.na_cdot_user na_cdot_user_role: redirect: community.general.na_cdot_user_role na_cdot_volume: redirect: community.general.na_cdot_volume na_ontap_gather_facts: redirect: community.general.na_ontap_gather_facts sf_account_manager: redirect: community.general.sf_account_manager sf_check_connections: redirect: community.general.sf_check_connections sf_snapshot_schedule_manager: redirect: community.general.sf_snapshot_schedule_manager sf_volume_access_group_manager: redirect: community.general.sf_volume_access_group_manager sf_volume_manager: redirect: community.general.sf_volume_manager netapp_e_alerts: redirect: netapp_eseries.santricity.netapp_e_alerts netapp_e_amg: redirect: netapp_eseries.santricity.netapp_e_amg netapp_e_amg_role: redirect: netapp_eseries.santricity.netapp_e_amg_role netapp_e_amg_sync: redirect: netapp_eseries.santricity.netapp_e_amg_sync netapp_e_asup: redirect: netapp_eseries.santricity.netapp_e_asup netapp_e_auditlog: redirect: netapp_eseries.santricity.netapp_e_auditlog netapp_e_auth: redirect: netapp_eseries.santricity.netapp_e_auth netapp_e_drive_firmware: redirect: netapp_eseries.santricity.netapp_e_drive_firmware netapp_e_facts: redirect: netapp_eseries.santricity.netapp_e_facts netapp_e_firmware: redirect: netapp_eseries.santricity.netapp_e_firmware netapp_e_flashcache: redirect: netapp_eseries.santricity.netapp_e_flashcache netapp_e_global: redirect: netapp_eseries.santricity.netapp_e_global netapp_e_host: redirect: netapp_eseries.santricity.netapp_e_host netapp_e_hostgroup: redirect: netapp_eseries.santricity.netapp_e_hostgroup netapp_e_iscsi_interface: redirect: netapp_eseries.santricity.netapp_e_iscsi_interface netapp_e_iscsi_target: redirect: netapp_eseries.santricity.netapp_e_iscsi_target netapp_e_ldap: redirect: netapp_eseries.santricity.netapp_e_ldap netapp_e_lun_mapping: redirect: netapp_eseries.santricity.netapp_e_lun_mapping netapp_e_mgmt_interface: redirect: netapp_eseries.santricity.netapp_e_mgmt_interface netapp_e_snapshot_group: redirect: netapp_eseries.santricity.netapp_e_snapshot_group netapp_e_snapshot_images: redirect: netapp_eseries.santricity.netapp_e_snapshot_images netapp_e_snapshot_volume: redirect: netapp_eseries.santricity.netapp_e_snapshot_volume netapp_e_storage_system: redirect: netapp_eseries.santricity.netapp_e_storage_system netapp_e_storagepool: redirect: netapp_eseries.santricity.netapp_e_storagepool netapp_e_syslog: redirect: netapp_eseries.santricity.netapp_e_syslog netapp_e_volume: redirect: netapp_eseries.santricity.netapp_e_volume netapp_e_volume_copy: redirect: netapp_eseries.santricity.netapp_e_volume_copy purefa_facts: redirect: community.general.purefa_facts purefb_facts: redirect: community.general.purefb_facts vexata_eg: redirect: community.general.vexata_eg vexata_volume: redirect: community.general.vexata_volume zfs: redirect: community.general.zfs zfs_delegate_admin: redirect: community.general.zfs_delegate_admin zfs_facts: redirect: community.general.zfs_facts zpool_facts: redirect: community.general.zpool_facts python_requirements_facts: redirect: community.general.python_requirements_facts aix_devices: redirect: community.general.aix_devices aix_filesystem: redirect: community.general.aix_filesystem aix_inittab: redirect: community.general.aix_inittab aix_lvg: redirect: community.general.aix_lvg aix_lvol: redirect: community.general.aix_lvol alternatives: redirect: community.general.alternatives awall: redirect: community.general.awall beadm: redirect: community.general.beadm capabilities: redirect: community.general.capabilities cronvar: redirect: community.general.cronvar crypttab: redirect: community.general.crypttab dconf: redirect: community.general.dconf facter: redirect: community.general.facter filesystem: redirect: community.general.filesystem firewalld: redirect: ansible.posix.firewalld gconftool2: redirect: community.general.gconftool2 interfaces_file: redirect: community.general.interfaces_file java_cert: redirect: community.general.java_cert java_keystore: redirect: community.general.java_keystore kernel_blacklist: redirect: community.general.kernel_blacklist lbu: redirect: community.general.lbu listen_ports_facts: redirect: community.general.listen_ports_facts locale_gen: redirect: community.general.locale_gen lvg: redirect: community.general.lvg lvol: redirect: community.general.lvol make: redirect: community.general.make mksysb: redirect: community.general.mksysb modprobe: redirect: community.general.modprobe nosh: redirect: community.general.nosh ohai: redirect: community.general.ohai open_iscsi: redirect: community.general.open_iscsi openwrt_init: redirect: community.general.openwrt_init osx_defaults: redirect: community.general.osx_defaults pam_limits: redirect: community.general.pam_limits pamd: redirect: community.general.pamd parted: redirect: community.general.parted pids: redirect: community.general.pids puppet: redirect: community.general.puppet python_requirements_info: redirect: community.general.python_requirements_info runit: redirect: community.general.runit sefcontext: redirect: community.general.sefcontext selinux_permissive: redirect: community.general.selinux_permissive selogin: redirect: community.general.selogin seport: redirect: community.general.seport solaris_zone: redirect: community.general.solaris_zone svc: redirect: community.general.svc syspatch: redirect: community.general.syspatch timezone: redirect: community.general.timezone ufw: redirect: community.general.ufw vdo: redirect: community.general.vdo xfconf: redirect: community.general.xfconf xfs_quota: redirect: community.general.xfs_quota jenkins_job_facts: redirect: community.general.jenkins_job_facts nginx_status_facts: redirect: community.general.nginx_status_facts apache2_mod_proxy: redirect: community.general.apache2_mod_proxy apache2_module: redirect: community.general.apache2_module deploy_helper: redirect: community.general.deploy_helper django_manage: redirect: community.general.django_manage ejabberd_user: redirect: community.general.ejabberd_user gunicorn: redirect: community.general.gunicorn htpasswd: redirect: community.general.htpasswd jboss: redirect: community.general.jboss jenkins_job: redirect: community.general.jenkins_job jenkins_job_info: redirect: community.general.jenkins_job_info jenkins_plugin: redirect: community.general.jenkins_plugin jenkins_script: redirect: community.general.jenkins_script jira: redirect: community.general.jira nginx_status_info: redirect: community.general.nginx_status_info rundeck_acl_policy: redirect: community.general.rundeck_acl_policy rundeck_project: redirect: community.general.rundeck_project utm_aaa_group: redirect: community.general.utm_aaa_group utm_aaa_group_info: redirect: community.general.utm_aaa_group_info utm_ca_host_key_cert: redirect: community.general.utm_ca_host_key_cert utm_ca_host_key_cert_info: redirect: community.general.utm_ca_host_key_cert_info utm_dns_host: redirect: community.general.utm_dns_host utm_network_interface_address: redirect: community.general.utm_network_interface_address utm_network_interface_address_info: redirect: community.general.utm_network_interface_address_info utm_proxy_auth_profile: redirect: community.general.utm_proxy_auth_profile utm_proxy_exception: redirect: community.general.utm_proxy_exception utm_proxy_frontend: redirect: community.general.utm_proxy_frontend utm_proxy_frontend_info: redirect: community.general.utm_proxy_frontend_info utm_proxy_location: redirect: community.general.utm_proxy_location utm_proxy_location_info: redirect: community.general.utm_proxy_location_info supervisorctl: redirect: community.general.supervisorctl taiga_issue: redirect: community.general.taiga_issue grafana_dashboard: redirect: community.grafana.grafana_dashboard grafana_datasource: redirect: community.grafana.grafana_datasource grafana_plugin: redirect: community.grafana.grafana_plugin k8s_facts: redirect: kubernetes.core.k8s_facts k8s_raw: redirect: kubernetes.core.k8s_raw k8s: redirect: kubernetes.core.k8s k8s_auth: redirect: kubernetes.core.k8s_auth k8s_info: redirect: kubernetes.core.k8s_info k8s_scale: redirect: kubernetes.core.k8s_scale k8s_service: redirect: kubernetes.core.k8s_service openshift_raw: redirect: kubernetes.core.openshift_raw openshift_scale: redirect: kubernetes.core.openshift_scale openssh_cert: redirect: community.crypto.openssh_cert openssl_pkcs12: redirect: community.crypto.openssl_pkcs12 openssl_csr: redirect: community.crypto.openssl_csr openssl_certificate: redirect: community.crypto.x509_certificate openssl_certificate_info: redirect: community.crypto.x509_certificate_info x509_crl: redirect: community.crypto.x509_crl openssl_privatekey_info: redirect: community.crypto.openssl_privatekey_info x509_crl_info: redirect: community.crypto.x509_crl_info get_certificate: redirect: community.crypto.get_certificate openssh_keypair: redirect: community.crypto.openssh_keypair openssl_publickey: redirect: community.crypto.openssl_publickey openssl_csr_info: redirect: community.crypto.openssl_csr_info luks_device: redirect: community.crypto.luks_device openssl_dhparam: redirect: community.crypto.openssl_dhparam openssl_privatekey: redirect: community.crypto.openssl_privatekey certificate_complete_chain: redirect: community.crypto.certificate_complete_chain acme_inspect: redirect: community.crypto.acme_inspect acme_certificate_revoke: redirect: community.crypto.acme_certificate_revoke acme_certificate: redirect: community.crypto.acme_certificate acme_account: redirect: community.crypto.acme_account acme_account_facts: redirect: community.crypto.acme_account_facts acme_challenge_cert_helper: redirect: community.crypto.acme_challenge_cert_helper acme_account_info: redirect: community.crypto.acme_account_info ecs_domain: redirect: community.crypto.ecs_domain ecs_certificate: redirect: community.crypto.ecs_certificate mongodb_parameter: redirect: community.mongodb.mongodb_parameter mongodb_info: redirect: community.mongodb.mongodb_info mongodb_replicaset: redirect: community.mongodb.mongodb_replicaset mongodb_user: redirect: community.mongodb.mongodb_user mongodb_shard: redirect: community.mongodb.mongodb_shard vmware_appliance_access_info: redirect: vmware.vmware_rest.vmware_appliance_access_info vmware_appliance_health_info: redirect: vmware.vmware_rest.vmware_appliance_health_info vmware_cis_category_info: redirect: vmware.vmware_rest.vmware_cis_category_info vmware_core_info: redirect: vmware.vmware_rest.vmware_core_info vcenter_extension_facts: redirect: community.vmware.vcenter_extension_facts vmware_about_facts: redirect: community.vmware.vmware_about_facts vmware_category_facts: redirect: community.vmware.vmware_category_facts vmware_cluster_facts: redirect: community.vmware.vmware_cluster_facts vmware_datastore_facts: redirect: community.vmware.vmware_datastore_facts vmware_dns_config: redirect: community.vmware.vmware_dns_config vmware_drs_group_facts: redirect: community.vmware.vmware_drs_group_facts vmware_drs_rule_facts: redirect: community.vmware.vmware_drs_rule_facts vmware_dvs_portgroup_facts: redirect: community.vmware.vmware_dvs_portgroup_facts vmware_guest_boot_facts: redirect: community.vmware.vmware_guest_boot_facts vmware_guest_customization_facts: redirect: community.vmware.vmware_guest_customization_facts vmware_guest_disk_facts: redirect: community.vmware.vmware_guest_disk_facts vmware_guest_facts: redirect: community.vmware.vmware_guest_facts vmware_guest_snapshot_facts: redirect: community.vmware.vmware_guest_snapshot_facts vmware_host_capability_facts: redirect: community.vmware.vmware_host_capability_facts vmware_host_config_facts: redirect: community.vmware.vmware_host_config_facts vmware_host_dns_facts: redirect: community.vmware.vmware_host_dns_facts vmware_host_feature_facts: redirect: community.vmware.vmware_host_feature_facts vmware_host_firewall_facts: redirect: community.vmware.vmware_host_firewall_facts vmware_host_ntp_facts: redirect: community.vmware.vmware_host_ntp_facts vmware_host_package_facts: redirect: community.vmware.vmware_host_package_facts vmware_host_service_facts: redirect: community.vmware.vmware_host_service_facts vmware_host_ssl_facts: redirect: community.vmware.vmware_host_ssl_facts vmware_host_vmhba_facts: redirect: community.vmware.vmware_host_vmhba_facts vmware_host_vmnic_facts: redirect: community.vmware.vmware_host_vmnic_facts vmware_local_role_facts: redirect: community.vmware.vmware_local_role_facts vmware_local_user_facts: redirect: community.vmware.vmware_local_user_facts vmware_portgroup_facts: redirect: community.vmware.vmware_portgroup_facts vmware_resource_pool_facts: redirect: community.vmware.vmware_resource_pool_facts vmware_tag_facts: redirect: community.vmware.vmware_tag_facts vmware_target_canonical_facts: redirect: community.vmware.vmware_target_canonical_facts vmware_vm_facts: redirect: community.vmware.vmware_vm_facts vmware_vmkernel_facts: redirect: community.vmware.vmware_vmkernel_facts vmware_vswitch_facts: redirect: community.vmware.vmware_vswitch_facts vca_fw: redirect: community.vmware.vca_fw vca_nat: redirect: community.vmware.vca_nat vca_vapp: redirect: community.vmware.vca_vapp vcenter_extension: redirect: community.vmware.vcenter_extension vcenter_extension_info: redirect: community.vmware.vcenter_extension_info vcenter_folder: redirect: community.vmware.vcenter_folder vcenter_license: redirect: community.vmware.vcenter_license vmware_about_info: redirect: community.vmware.vmware_about_info vmware_category: redirect: community.vmware.vmware_category vmware_category_info: redirect: community.vmware.vmware_category_info vmware_cfg_backup: redirect: community.vmware.vmware_cfg_backup vmware_cluster: redirect: community.vmware.vmware_cluster vmware_cluster_drs: redirect: community.vmware.vmware_cluster_drs vmware_cluster_ha: redirect: community.vmware.vmware_cluster_ha vmware_cluster_info: redirect: community.vmware.vmware_cluster_info vmware_cluster_vsan: redirect: community.vmware.vmware_cluster_vsan vmware_content_deploy_template: redirect: community.vmware.vmware_content_deploy_template vmware_content_library_info: redirect: community.vmware.vmware_content_library_info vmware_content_library_manager: redirect: community.vmware.vmware_content_library_manager vmware_datacenter: redirect: community.vmware.vmware_datacenter vmware_datastore_cluster: redirect: community.vmware.vmware_datastore_cluster vmware_datastore_info: redirect: community.vmware.vmware_datastore_info vmware_datastore_maintenancemode: redirect: community.vmware.vmware_datastore_maintenancemode vmware_deploy_ovf: redirect: community.vmware.vmware_deploy_ovf vmware_drs_group: redirect: community.vmware.vmware_drs_group vmware_drs_group_info: redirect: community.vmware.vmware_drs_group_info vmware_drs_rule_info: redirect: community.vmware.vmware_drs_rule_info vmware_dvs_host: redirect: community.vmware.vmware_dvs_host vmware_dvs_portgroup: redirect: community.vmware.vmware_dvs_portgroup vmware_dvs_portgroup_find: redirect: community.vmware.vmware_dvs_portgroup_find vmware_dvs_portgroup_info: redirect: community.vmware.vmware_dvs_portgroup_info vmware_dvswitch: redirect: community.vmware.vmware_dvswitch vmware_dvswitch_lacp: redirect: community.vmware.vmware_dvswitch_lacp vmware_dvswitch_nioc: redirect: community.vmware.vmware_dvswitch_nioc vmware_dvswitch_pvlans: redirect: community.vmware.vmware_dvswitch_pvlans vmware_dvswitch_uplink_pg: redirect: community.vmware.vmware_dvswitch_uplink_pg vmware_evc_mode: redirect: community.vmware.vmware_evc_mode vmware_export_ovf: redirect: community.vmware.vmware_export_ovf vmware_folder_info: redirect: community.vmware.vmware_folder_info vmware_guest: redirect: community.vmware.vmware_guest vmware_guest_boot_info: redirect: community.vmware.vmware_guest_boot_info vmware_guest_boot_manager: redirect: community.vmware.vmware_guest_boot_manager vmware_guest_controller: redirect: community.vmware.vmware_guest_controller vmware_guest_cross_vc_clone: redirect: community.vmware.vmware_guest_cross_vc_clone vmware_guest_custom_attribute_defs: redirect: community.vmware.vmware_guest_custom_attribute_defs vmware_guest_custom_attributes: redirect: community.vmware.vmware_guest_custom_attributes vmware_guest_customization_info: redirect: community.vmware.vmware_guest_customization_info vmware_guest_disk: redirect: community.vmware.vmware_guest_disk vmware_guest_disk_info: redirect: community.vmware.vmware_guest_disk_info vmware_guest_file_operation: redirect: community.vmware.vmware_guest_file_operation vmware_guest_find: redirect: community.vmware.vmware_guest_find vmware_guest_info: redirect: community.vmware.vmware_guest_info vmware_guest_move: redirect: community.vmware.vmware_guest_move vmware_guest_network: redirect: community.vmware.vmware_guest_network vmware_guest_powerstate: redirect: community.vmware.vmware_guest_powerstate vmware_guest_register_operation: redirect: community.vmware.vmware_guest_register_operation vmware_guest_screenshot: redirect: community.vmware.vmware_guest_screenshot vmware_guest_sendkey: redirect: community.vmware.vmware_guest_sendkey vmware_guest_serial_port: redirect: community.vmware.vmware_guest_serial_port vmware_guest_snapshot: redirect: community.vmware.vmware_guest_snapshot vmware_guest_snapshot_info: redirect: community.vmware.vmware_guest_snapshot_info vmware_guest_tools_info: redirect: community.vmware.vmware_guest_tools_info vmware_guest_tools_upgrade: redirect: community.vmware.vmware_guest_tools_upgrade vmware_guest_tools_wait: redirect: community.vmware.vmware_guest_tools_wait vmware_guest_video: redirect: community.vmware.vmware_guest_video vmware_guest_vnc: redirect: community.vmware.vmware_guest_vnc vmware_host: redirect: community.vmware.vmware_host vmware_host_acceptance: redirect: community.vmware.vmware_host_acceptance vmware_host_active_directory: redirect: community.vmware.vmware_host_active_directory vmware_host_auto_start: redirect: community.vmware.vmware_host_auto_start vmware_host_capability_info: redirect: community.vmware.vmware_host_capability_info vmware_host_config_info: redirect: community.vmware.vmware_host_config_info vmware_host_config_manager: redirect: community.vmware.vmware_host_config_manager vmware_host_datastore: redirect: community.vmware.vmware_host_datastore vmware_host_dns: redirect: community.vmware.vmware_host_dns vmware_host_dns_info: redirect: community.vmware.vmware_host_dns_info vmware_host_facts: redirect: community.vmware.vmware_host_facts vmware_host_feature_info: redirect: community.vmware.vmware_host_feature_info vmware_host_firewall_info: redirect: community.vmware.vmware_host_firewall_info vmware_host_firewall_manager: redirect: community.vmware.vmware_host_firewall_manager vmware_host_hyperthreading: redirect: community.vmware.vmware_host_hyperthreading vmware_host_ipv6: redirect: community.vmware.vmware_host_ipv6 vmware_host_kernel_manager: redirect: community.vmware.vmware_host_kernel_manager vmware_host_lockdown: redirect: community.vmware.vmware_host_lockdown vmware_host_ntp: redirect: community.vmware.vmware_host_ntp vmware_host_ntp_info: redirect: community.vmware.vmware_host_ntp_info vmware_host_package_info: redirect: community.vmware.vmware_host_package_info vmware_host_powermgmt_policy: redirect: community.vmware.vmware_host_powermgmt_policy vmware_host_powerstate: redirect: community.vmware.vmware_host_powerstate vmware_host_scanhba: redirect: community.vmware.vmware_host_scanhba vmware_host_service_info: redirect: community.vmware.vmware_host_service_info vmware_host_service_manager: redirect: community.vmware.vmware_host_service_manager vmware_host_snmp: redirect: community.vmware.vmware_host_snmp vmware_host_ssl_info: redirect: community.vmware.vmware_host_ssl_info vmware_host_vmhba_info: redirect: community.vmware.vmware_host_vmhba_info vmware_host_vmnic_info: redirect: community.vmware.vmware_host_vmnic_info vmware_local_role_info: redirect: community.vmware.vmware_local_role_info vmware_local_role_manager: redirect: community.vmware.vmware_local_role_manager vmware_local_user_info: redirect: community.vmware.vmware_local_user_info vmware_local_user_manager: redirect: community.vmware.vmware_local_user_manager vmware_maintenancemode: redirect: community.vmware.vmware_maintenancemode vmware_migrate_vmk: redirect: community.vmware.vmware_migrate_vmk vmware_object_role_permission: redirect: community.vmware.vmware_object_role_permission vmware_portgroup: redirect: community.vmware.vmware_portgroup vmware_portgroup_info: redirect: community.vmware.vmware_portgroup_info vmware_resource_pool: redirect: community.vmware.vmware_resource_pool vmware_resource_pool_info: redirect: community.vmware.vmware_resource_pool_info vmware_tag: redirect: community.vmware.vmware_tag vmware_tag_info: redirect: community.vmware.vmware_tag_info vmware_tag_manager: redirect: community.vmware.vmware_tag_manager vmware_target_canonical_info: redirect: community.vmware.vmware_target_canonical_info vmware_vcenter_settings: redirect: community.vmware.vmware_vcenter_settings vmware_vcenter_statistics: redirect: community.vmware.vmware_vcenter_statistics vmware_vm_host_drs_rule: redirect: community.vmware.vmware_vm_host_drs_rule vmware_vm_info: redirect: community.vmware.vmware_vm_info vmware_vm_shell: redirect: community.vmware.vmware_vm_shell vmware_vm_storage_policy_info: redirect: community.vmware.vmware_vm_storage_policy_info vmware_vm_vm_drs_rule: redirect: community.vmware.vmware_vm_vm_drs_rule vmware_vm_vss_dvs_migrate: redirect: community.vmware.vmware_vm_vss_dvs_migrate vmware_vmkernel: redirect: community.vmware.vmware_vmkernel vmware_vmkernel_info: redirect: community.vmware.vmware_vmkernel_info vmware_vmkernel_ip_config: redirect: community.vmware.vmware_vmkernel_ip_config vmware_vmotion: redirect: community.vmware.vmware_vmotion vmware_vsan_cluster: redirect: community.vmware.vmware_vsan_cluster vmware_vsan_health_info: redirect: community.vmware.vmware_vsan_health_info vmware_vspan_session: redirect: community.vmware.vmware_vspan_session vmware_vswitch: redirect: community.vmware.vmware_vswitch vmware_vswitch_info: redirect: community.vmware.vmware_vswitch_info vsphere_copy: redirect: community.vmware.vsphere_copy vsphere_file: redirect: community.vmware.vsphere_file psexec: redirect: community.windows.psexec win_audit_policy_system: redirect: community.windows.win_audit_policy_system win_audit_rule: redirect: community.windows.win_audit_rule win_chocolatey: redirect: chocolatey.chocolatey.win_chocolatey win_chocolatey_config: redirect: chocolatey.chocolatey.win_chocolatey_config win_chocolatey_facts: redirect: chocolatey.chocolatey.win_chocolatey_facts win_chocolatey_feature: redirect: chocolatey.chocolatey.win_chocolatey_feature win_chocolatey_source: redirect: chocolatey.chocolatey.win_chocolatey_source win_credential: redirect: community.windows.win_credential win_defrag: redirect: community.windows.win_defrag win_disk_facts: redirect: community.windows.win_disk_facts win_disk_image: redirect: community.windows.win_disk_image win_dns_record: redirect: community.windows.win_dns_record win_domain_computer: redirect: community.windows.win_domain_computer win_domain_group: redirect: community.windows.win_domain_group win_domain_group_membership: redirect: community.windows.win_domain_group_membership win_domain_user: redirect: community.windows.win_domain_user win_dotnet_ngen: redirect: community.windows.win_dotnet_ngen win_eventlog: redirect: community.windows.win_eventlog win_eventlog_entry: redirect: community.windows.win_eventlog_entry win_file_version: redirect: community.windows.win_file_version win_firewall: redirect: community.windows.win_firewall win_firewall_rule: redirect: community.windows.win_firewall_rule win_format: redirect: community.windows.win_format win_hosts: redirect: community.windows.win_hosts win_hotfix: redirect: community.windows.win_hotfix win_http_proxy: redirect: community.windows.win_http_proxy win_iis_virtualdirectory: redirect: community.windows.win_iis_virtualdirectory win_iis_webapplication: redirect: community.windows.win_iis_webapplication win_iis_webapppool: redirect: community.windows.win_iis_webapppool win_iis_webbinding: redirect: community.windows.win_iis_webbinding win_iis_website: redirect: community.windows.win_iis_website win_inet_proxy: redirect: community.windows.win_inet_proxy win_initialize_disk: redirect: community.windows.win_initialize_disk win_lineinfile: redirect: community.windows.win_lineinfile win_mapped_drive: redirect: community.windows.win_mapped_drive win_msg: redirect: community.windows.win_msg win_netbios: redirect: community.windows.win_netbios win_nssm: redirect: community.windows.win_nssm win_pagefile: redirect: community.windows.win_pagefile win_partition: redirect: community.windows.win_partition win_pester: redirect: community.windows.win_pester win_power_plan: redirect: community.windows.win_power_plan win_product_facts: redirect: community.windows.win_product_facts win_psexec: redirect: community.windows.win_psexec win_psmodule: redirect: community.windows.win_psmodule win_psrepository: redirect: community.windows.win_psrepository win_rabbitmq_plugin: redirect: community.windows.win_rabbitmq_plugin win_rds_cap: redirect: community.windows.win_rds_cap win_rds_rap: redirect: community.windows.win_rds_rap win_rds_settings: redirect: community.windows.win_rds_settings win_region: redirect: community.windows.win_region win_regmerge: redirect: community.windows.win_regmerge win_robocopy: redirect: community.windows.win_robocopy win_route: redirect: community.windows.win_route win_say: redirect: community.windows.win_say win_scheduled_task: redirect: community.windows.win_scheduled_task win_scheduled_task_stat: redirect: community.windows.win_scheduled_task_stat win_security_policy: redirect: community.windows.win_security_policy win_shortcut: redirect: community.windows.win_shortcut win_snmp: redirect: community.windows.win_snmp win_timezone: redirect: community.windows.win_timezone win_toast: redirect: community.windows.win_toast win_unzip: redirect: community.windows.win_unzip win_user_profile: redirect: community.windows.win_user_profile win_wait_for_process: redirect: community.windows.win_wait_for_process win_wakeonlan: redirect: community.windows.win_wakeonlan win_webpicmd: redirect: community.windows.win_webpicmd win_xml: redirect: community.windows.win_xml azure_rm_aks_facts: redirect: community.azure.azure_rm_aks_facts azure_rm_dnsrecordset_facts: redirect: community.azure.azure_rm_dnsrecordset_facts azure_rm_dnszone_facts: redirect: community.azure.azure_rm_dnszone_facts azure_rm_networkinterface_facts: redirect: community.azure.azure_rm_networkinterface_facts azure_rm_publicipaddress_facts: redirect: community.azure.azure_rm_publicipaddress_facts azure_rm_securitygroup_facts: redirect: community.azure.azure_rm_securitygroup_facts azure_rm_storageaccount_facts: redirect: community.azure.azure_rm_storageaccount_facts azure_rm_virtualmachine_facts: redirect: community.azure.azure_rm_virtualmachine_facts azure_rm_virtualnetwork_facts: redirect: community.azure.azure_rm_virtualnetwork_facts azure_rm_roledefinition_facts: redirect: community.azure.azure_rm_roledefinition_facts azure_rm_autoscale_facts: redirect: community.azure.azure_rm_autoscale_facts azure_rm_mysqldatabase_facts: redirect: community.azure.azure_rm_mysqldatabase_facts azure_rm_devtestlabschedule_facts: redirect: community.azure.azure_rm_devtestlabschedule_facts azure_rm_virtualmachinescaleset_facts: redirect: community.azure.azure_rm_virtualmachinescaleset_facts azure_rm_devtestlabcustomimage_facts: redirect: community.azure.azure_rm_devtestlabcustomimage_facts azure_rm_cosmosdbaccount_facts: redirect: community.azure.azure_rm_cosmosdbaccount_facts azure_rm_subnet_facts: redirect: community.azure.azure_rm_subnet_facts azure_rm_aksversion_facts: redirect: community.azure.azure_rm_aksversion_facts azure_rm_hdinsightcluster_facts: redirect: community.azure.azure_rm_hdinsightcluster_facts azure_rm_virtualmachinescalesetextension_facts: redirect: community.azure.azure_rm_virtualmachinescalesetextension_facts azure_rm_loadbalancer_facts: redirect: community.azure.azure_rm_loadbalancer_facts azure_rm_roleassignment_facts: redirect: community.azure.azure_rm_roleassignment_facts azure_rm_manageddisk_facts: redirect: community.azure.azure_rm_manageddisk_facts azure_rm_mysqlserver_facts: redirect: community.azure.azure_rm_mysqlserver_facts azure_rm_servicebus_facts: redirect: community.azure.azure_rm_servicebus_facts azure_rm_rediscache_facts: redirect: community.azure.azure_rm_rediscache_facts azure_rm_resource_facts: redirect: community.azure.azure_rm_resource_facts azure_rm_routetable_facts: redirect: community.azure.azure_rm_routetable_facts azure_rm_virtualmachine_extension: redirect: community.azure.azure_rm_virtualmachine_extension azure_rm_loganalyticsworkspace_facts: redirect: community.azure.azure_rm_loganalyticsworkspace_facts azure_rm_sqldatabase_facts: redirect: community.azure.azure_rm_sqldatabase_facts azure_rm_devtestlabartifactsource_facts: redirect: community.azure.azure_rm_devtestlabartifactsource_facts azure_rm_deployment_facts: redirect: community.azure.azure_rm_deployment_facts azure_rm_virtualmachineextension_facts: redirect: community.azure.azure_rm_virtualmachineextension_facts azure_rm_applicationsecuritygroup_facts: redirect: community.azure.azure_rm_applicationsecuritygroup_facts azure_rm_availabilityset_facts: redirect: community.azure.azure_rm_availabilityset_facts azure_rm_mariadbdatabase_facts: redirect: community.azure.azure_rm_mariadbdatabase_facts azure_rm_devtestlabenvironment_facts: redirect: community.azure.azure_rm_devtestlabenvironment_facts azure_rm_appserviceplan_facts: redirect: community.azure.azure_rm_appserviceplan_facts azure_rm_containerinstance_facts: redirect: community.azure.azure_rm_containerinstance_facts azure_rm_devtestlabarmtemplate_facts: redirect: community.azure.azure_rm_devtestlabarmtemplate_facts azure_rm_devtestlabartifact_facts: redirect: community.azure.azure_rm_devtestlabartifact_facts azure_rm_virtualmachinescalesetinstance_facts: redirect: community.azure.azure_rm_virtualmachinescalesetinstance_facts azure_rm_cdnendpoint_facts: redirect: community.azure.azure_rm_cdnendpoint_facts azure_rm_trafficmanagerprofile_facts: redirect: community.azure.azure_rm_trafficmanagerprofile_facts azure_rm_functionapp_facts: redirect: community.azure.azure_rm_functionapp_facts azure_rm_virtualmachineimage_facts: redirect: community.azure.azure_rm_virtualmachineimage_facts azure_rm_mariadbconfiguration_facts: redirect: community.azure.azure_rm_mariadbconfiguration_facts azure_rm_virtualnetworkpeering_facts: redirect: community.azure.azure_rm_virtualnetworkpeering_facts azure_rm_sqlserver_facts: redirect: community.azure.azure_rm_sqlserver_facts azure_rm_mariadbfirewallrule_facts: redirect: community.azure.azure_rm_mariadbfirewallrule_facts azure_rm_mysqlconfiguration_facts: redirect: community.azure.azure_rm_mysqlconfiguration_facts azure_rm_mysqlfirewallrule_facts: redirect: community.azure.azure_rm_mysqlfirewallrule_facts azure_rm_postgresqlfirewallrule_facts: redirect: community.azure.azure_rm_postgresqlfirewallrule_facts azure_rm_mariadbserver_facts: redirect: community.azure.azure_rm_mariadbserver_facts azure_rm_postgresqldatabase_facts: redirect: community.azure.azure_rm_postgresqldatabase_facts azure_rm_devtestlabvirtualnetwork_facts: redirect: community.azure.azure_rm_devtestlabvirtualnetwork_facts azure_rm_devtestlabpolicy_facts: redirect: community.azure.azure_rm_devtestlabpolicy_facts azure_rm_trafficmanagerendpoint_facts: redirect: community.azure.azure_rm_trafficmanagerendpoint_facts azure_rm_sqlfirewallrule_facts: redirect: community.azure.azure_rm_sqlfirewallrule_facts azure_rm_containerregistry_facts: redirect: community.azure.azure_rm_containerregistry_facts azure_rm_postgresqlconfiguration_facts: redirect: community.azure.azure_rm_postgresqlconfiguration_facts azure_rm_postgresqlserver_facts: redirect: community.azure.azure_rm_postgresqlserver_facts azure_rm_devtestlab_facts: redirect: community.azure.azure_rm_devtestlab_facts azure_rm_cdnprofile_facts: redirect: community.azure.azure_rm_cdnprofile_facts azure_rm_virtualmachine_scaleset: redirect: community.azure.azure_rm_virtualmachine_scaleset azure_rm_webapp_facts: redirect: community.azure.azure_rm_webapp_facts azure_rm_devtestlabvirtualmachine_facts: redirect: community.azure.azure_rm_devtestlabvirtualmachine_facts azure_rm_image_facts: redirect: community.azure.azure_rm_image_facts azure_rm_managed_disk: redirect: community.azure.azure_rm_managed_disk azure_rm_automationaccount_facts: redirect: community.azure.azure_rm_automationaccount_facts azure_rm_lock_facts: redirect: community.azure.azure_rm_lock_facts azure_rm_managed_disk_facts: redirect: community.azure.azure_rm_managed_disk_facts azure_rm_resourcegroup_facts: redirect: community.azure.azure_rm_resourcegroup_facts azure_rm_virtualmachine_scaleset_facts: redirect: community.azure.azure_rm_virtualmachine_scaleset_facts snow_record: redirect: servicenow.servicenow.snow_record snow_record_find: redirect: servicenow.servicenow.snow_record_find aws_az_facts: redirect: amazon.aws.aws_az_facts aws_caller_facts: redirect: amazon.aws.aws_caller_facts cloudformation_facts: redirect: amazon.aws.cloudformation_facts ec2_ami_facts: redirect: amazon.aws.ec2_ami_facts ec2_eni_facts: redirect: amazon.aws.ec2_eni_facts ec2_group_facts: redirect: amazon.aws.ec2_group_facts ec2_snapshot_facts: redirect: amazon.aws.ec2_snapshot_facts ec2_vol_facts: redirect: amazon.aws.ec2_vol_facts ec2_vpc_dhcp_option_facts: redirect: amazon.aws.ec2_vpc_dhcp_option_facts ec2_vpc_net_facts: redirect: amazon.aws.ec2_vpc_net_facts ec2_vpc_subnet_facts: redirect: amazon.aws.ec2_vpc_subnet_facts aws_az_info: redirect: amazon.aws.aws_az_info aws_caller_info: redirect: amazon.aws.aws_caller_info aws_s3: redirect: amazon.aws.aws_s3 cloudformation: redirect: amazon.aws.cloudformation cloudformation_info: redirect: amazon.aws.cloudformation_info ec2: redirect: amazon.aws.ec2 ec2_ami: redirect: amazon.aws.ec2_ami ec2_ami_info: redirect: amazon.aws.ec2_ami_info ec2_elb_lb: redirect: amazon.aws.ec2_elb_lb ec2_eni: redirect: amazon.aws.ec2_eni ec2_eni_info: redirect: amazon.aws.ec2_eni_info ec2_group: redirect: amazon.aws.ec2_group ec2_group_info: redirect: amazon.aws.ec2_group_info ec2_key: redirect: amazon.aws.ec2_key ec2_metadata_facts: redirect: amazon.aws.ec2_metadata_facts ec2_snapshot: redirect: amazon.aws.ec2_snapshot ec2_snapshot_info: redirect: amazon.aws.ec2_snapshot_info ec2_tag: redirect: amazon.aws.ec2_tag ec2_tag_info: redirect: amazon.aws.ec2_tag_info ec2_vol: redirect: amazon.aws.ec2_vol ec2_vol_info: redirect: amazon.aws.ec2_vol_info ec2_vpc_dhcp_option: redirect: amazon.aws.ec2_vpc_dhcp_option ec2_vpc_dhcp_option_info: redirect: amazon.aws.ec2_vpc_dhcp_option_info ec2_vpc_net: redirect: amazon.aws.ec2_vpc_net ec2_vpc_net_info: redirect: amazon.aws.ec2_vpc_net_info ec2_vpc_subnet: redirect: amazon.aws.ec2_vpc_subnet ec2_vpc_subnet_info: redirect: amazon.aws.ec2_vpc_subnet_info s3_bucket: redirect: amazon.aws.s3_bucket telnet: redirect: ansible.netcommon.telnet cli_command: redirect: ansible.netcommon.cli_command cli_config: redirect: ansible.netcommon.cli_config net_put: redirect: ansible.netcommon.net_put net_get: redirect: ansible.netcommon.net_get net_linkagg: redirect: ansible.netcommon.net_linkagg net_interface: redirect: ansible.netcommon.net_interface net_lldp_interface: redirect: ansible.netcommon.net_lldp_interface net_vlan: redirect: ansible.netcommon.net_vlan net_l2_interface: redirect: ansible.netcommon.net_l2_interface net_l3_interface: redirect: ansible.netcommon.net_l3_interface net_vrf: redirect: ansible.netcommon.net_vrf netconf_config: redirect: ansible.netcommon.netconf_config netconf_rpc: redirect: ansible.netcommon.netconf_rpc netconf_get: redirect: ansible.netcommon.netconf_get net_lldp: redirect: ansible.netcommon.net_lldp restconf_get: redirect: ansible.netcommon.restconf_get restconf_config: redirect: ansible.netcommon.restconf_config net_static_route: redirect: ansible.netcommon.net_static_route net_system: redirect: ansible.netcommon.net_system net_logging: redirect: ansible.netcommon.net_logging net_user: redirect: ansible.netcommon.net_user net_ping: redirect: ansible.netcommon.net_ping net_banner: redirect: ansible.netcommon.net_banner acl: redirect: ansible.posix.acl synchronize: redirect: ansible.posix.synchronize at: redirect: ansible.posix.at authorized_key: redirect: ansible.posix.authorized_key mount: redirect: ansible.posix.mount seboolean: redirect: ansible.posix.seboolean selinux: redirect: ansible.posix.selinux sysctl: redirect: ansible.posix.sysctl async_status.ps1: redirect: ansible.windows.async_status setup.ps1: redirect: ansible.windows.setup slurp.ps1: redirect: ansible.windows.slurp win_acl: redirect: ansible.windows.win_acl win_acl_inheritance: redirect: ansible.windows.win_acl_inheritance win_certificate_store: redirect: ansible.windows.win_certificate_store win_command: redirect: ansible.windows.win_command win_copy: redirect: ansible.windows.win_copy win_dns_client: redirect: ansible.windows.win_dns_client win_domain: redirect: ansible.windows.win_domain win_domain_controller: redirect: ansible.windows.win_domain_controller win_domain_membership: redirect: ansible.windows.win_domain_membership win_dsc: redirect: ansible.windows.win_dsc win_environment: redirect: ansible.windows.win_environment win_feature: redirect: ansible.windows.win_feature win_file: redirect: ansible.windows.win_file win_find: redirect: ansible.windows.win_find win_get_url: redirect: ansible.windows.win_get_url win_group: redirect: ansible.windows.win_group win_group_membership: redirect: ansible.windows.win_group_membership win_hostname: redirect: ansible.windows.win_hostname win_optional_feature: redirect: ansible.windows.win_optional_feature win_owner: redirect: ansible.windows.win_owner win_package: redirect: ansible.windows.win_package win_path: redirect: ansible.windows.win_path win_ping: redirect: ansible.windows.win_ping win_reboot: redirect: ansible.windows.win_reboot win_reg_stat: redirect: ansible.windows.win_reg_stat win_regedit: redirect: ansible.windows.win_regedit win_service: redirect: ansible.windows.win_service win_share: redirect: ansible.windows.win_share win_shell: redirect: ansible.windows.win_shell win_stat: redirect: ansible.windows.win_stat win_tempfile: redirect: ansible.windows.win_tempfile win_template: redirect: ansible.windows.win_template win_updates: redirect: ansible.windows.win_updates win_uri: redirect: ansible.windows.win_uri win_user: redirect: ansible.windows.win_user win_user_right: redirect: ansible.windows.win_user_right win_wait_for: redirect: ansible.windows.win_wait_for win_whoami: redirect: ansible.windows.win_whoami fortios_address: redirect: fortinet.fortios.fortios_address fortios_alertemail_setting: redirect: fortinet.fortios.fortios_alertemail_setting fortios_antivirus_heuristic: redirect: fortinet.fortios.fortios_antivirus_heuristic fortios_antivirus_profile: redirect: fortinet.fortios.fortios_antivirus_profile fortios_antivirus_quarantine: redirect: fortinet.fortios.fortios_antivirus_quarantine fortios_antivirus_settings: redirect: fortinet.fortios.fortios_antivirus_settings fortios_application_custom: redirect: fortinet.fortios.fortios_application_custom fortios_application_group: redirect: fortinet.fortios.fortios_application_group fortios_application_list: redirect: fortinet.fortios.fortios_application_list fortios_application_name: redirect: fortinet.fortios.fortios_application_name fortios_application_rule_settings: redirect: fortinet.fortios.fortios_application_rule_settings fortios_authentication_rule: redirect: fortinet.fortios.fortios_authentication_rule fortios_authentication_scheme: redirect: fortinet.fortios.fortios_authentication_scheme fortios_authentication_setting: redirect: fortinet.fortios.fortios_authentication_setting fortios_config: redirect: fortinet.fortios.fortios_config fortios_dlp_filepattern: redirect: fortinet.fortios.fortios_dlp_filepattern fortios_dlp_fp_doc_source: redirect: fortinet.fortios.fortios_dlp_fp_doc_source fortios_dlp_fp_sensitivity: redirect: fortinet.fortios.fortios_dlp_fp_sensitivity fortios_dlp_sensor: redirect: fortinet.fortios.fortios_dlp_sensor fortios_dlp_settings: redirect: fortinet.fortios.fortios_dlp_settings fortios_dnsfilter_domain_filter: redirect: fortinet.fortios.fortios_dnsfilter_domain_filter fortios_dnsfilter_profile: redirect: fortinet.fortios.fortios_dnsfilter_profile fortios_endpoint_control_client: redirect: fortinet.fortios.fortios_endpoint_control_client fortios_endpoint_control_forticlient_ems: redirect: fortinet.fortios.fortios_endpoint_control_forticlient_ems fortios_endpoint_control_forticlient_registration_sync: redirect: fortinet.fortios.fortios_endpoint_control_forticlient_registration_sync fortios_endpoint_control_profile: redirect: fortinet.fortios.fortios_endpoint_control_profile fortios_endpoint_control_settings: redirect: fortinet.fortios.fortios_endpoint_control_settings fortios_extender_controller_extender: redirect: fortinet.fortios.fortios_extender_controller_extender fortios_facts: redirect: fortinet.fortios.fortios_facts fortios_firewall_address: redirect: fortinet.fortios.fortios_firewall_address fortios_firewall_address6: redirect: fortinet.fortios.fortios_firewall_address6 fortios_firewall_address6_template: redirect: fortinet.fortios.fortios_firewall_address6_template fortios_firewall_addrgrp: redirect: fortinet.fortios.fortios_firewall_addrgrp fortios_firewall_addrgrp6: redirect: fortinet.fortios.fortios_firewall_addrgrp6 fortios_firewall_auth_portal: redirect: fortinet.fortios.fortios_firewall_auth_portal fortios_firewall_central_snat_map: redirect: fortinet.fortios.fortios_firewall_central_snat_map fortios_firewall_DoS_policy: redirect: fortinet.fortios.fortios_firewall_DoS_policy fortios_firewall_DoS_policy6: redirect: fortinet.fortios.fortios_firewall_DoS_policy6 fortios_firewall_dnstranslation: redirect: fortinet.fortios.fortios_firewall_dnstranslation fortios_firewall_identity_based_route: redirect: fortinet.fortios.fortios_firewall_identity_based_route fortios_firewall_interface_policy: redirect: fortinet.fortios.fortios_firewall_interface_policy fortios_firewall_interface_policy6: redirect: fortinet.fortios.fortios_firewall_interface_policy6 fortios_firewall_internet_service: redirect: fortinet.fortios.fortios_firewall_internet_service fortios_firewall_internet_service_custom: redirect: fortinet.fortios.fortios_firewall_internet_service_custom fortios_firewall_internet_service_group: redirect: fortinet.fortios.fortios_firewall_internet_service_group fortios_firewall_ip_translation: redirect: fortinet.fortios.fortios_firewall_ip_translation fortios_firewall_ipmacbinding_setting: redirect: fortinet.fortios.fortios_firewall_ipmacbinding_setting fortios_firewall_ipmacbinding_table: redirect: fortinet.fortios.fortios_firewall_ipmacbinding_table fortios_firewall_ippool: redirect: fortinet.fortios.fortios_firewall_ippool fortios_firewall_ippool6: redirect: fortinet.fortios.fortios_firewall_ippool6 fortios_firewall_ipv6_eh_filter: redirect: fortinet.fortios.fortios_firewall_ipv6_eh_filter fortios_firewall_ldb_monitor: redirect: fortinet.fortios.fortios_firewall_ldb_monitor fortios_firewall_local_in_policy: redirect: fortinet.fortios.fortios_firewall_local_in_policy fortios_firewall_local_in_policy6: redirect: fortinet.fortios.fortios_firewall_local_in_policy6 fortios_firewall_multicast_address: redirect: fortinet.fortios.fortios_firewall_multicast_address fortios_firewall_multicast_address6: redirect: fortinet.fortios.fortios_firewall_multicast_address6 fortios_firewall_multicast_policy: redirect: fortinet.fortios.fortios_firewall_multicast_policy fortios_firewall_multicast_policy6: redirect: fortinet.fortios.fortios_firewall_multicast_policy6 fortios_firewall_policy: redirect: fortinet.fortios.fortios_firewall_policy fortios_firewall_policy46: redirect: fortinet.fortios.fortios_firewall_policy46 fortios_firewall_policy6: redirect: fortinet.fortios.fortios_firewall_policy6 fortios_firewall_policy64: redirect: fortinet.fortios.fortios_firewall_policy64 fortios_firewall_profile_group: redirect: fortinet.fortios.fortios_firewall_profile_group fortios_firewall_profile_protocol_options: redirect: fortinet.fortios.fortios_firewall_profile_protocol_options fortios_firewall_proxy_address: redirect: fortinet.fortios.fortios_firewall_proxy_address fortios_firewall_proxy_addrgrp: redirect: fortinet.fortios.fortios_firewall_proxy_addrgrp fortios_firewall_proxy_policy: redirect: fortinet.fortios.fortios_firewall_proxy_policy fortios_firewall_schedule_group: redirect: fortinet.fortios.fortios_firewall_schedule_group fortios_firewall_schedule_onetime: redirect: fortinet.fortios.fortios_firewall_schedule_onetime fortios_firewall_schedule_recurring: redirect: fortinet.fortios.fortios_firewall_schedule_recurring fortios_firewall_service_category: redirect: fortinet.fortios.fortios_firewall_service_category fortios_firewall_service_custom: redirect: fortinet.fortios.fortios_firewall_service_custom fortios_firewall_service_group: redirect: fortinet.fortios.fortios_firewall_service_group fortios_firewall_shaper_per_ip_shaper: redirect: fortinet.fortios.fortios_firewall_shaper_per_ip_shaper fortios_firewall_shaper_traffic_shaper: redirect: fortinet.fortios.fortios_firewall_shaper_traffic_shaper fortios_firewall_shaping_policy: redirect: fortinet.fortios.fortios_firewall_shaping_policy fortios_firewall_shaping_profile: redirect: fortinet.fortios.fortios_firewall_shaping_profile fortios_firewall_sniffer: redirect: fortinet.fortios.fortios_firewall_sniffer fortios_firewall_ssh_host_key: redirect: fortinet.fortios.fortios_firewall_ssh_host_key fortios_firewall_ssh_local_ca: redirect: fortinet.fortios.fortios_firewall_ssh_local_ca fortios_firewall_ssh_local_key: redirect: fortinet.fortios.fortios_firewall_ssh_local_key fortios_firewall_ssh_setting: redirect: fortinet.fortios.fortios_firewall_ssh_setting fortios_firewall_ssl_server: redirect: fortinet.fortios.fortios_firewall_ssl_server fortios_firewall_ssl_setting: redirect: fortinet.fortios.fortios_firewall_ssl_setting fortios_firewall_ssl_ssh_profile: redirect: fortinet.fortios.fortios_firewall_ssl_ssh_profile fortios_firewall_ttl_policy: redirect: fortinet.fortios.fortios_firewall_ttl_policy fortios_firewall_vip: redirect: fortinet.fortios.fortios_firewall_vip fortios_firewall_vip46: redirect: fortinet.fortios.fortios_firewall_vip46 fortios_firewall_vip6: redirect: fortinet.fortios.fortios_firewall_vip6 fortios_firewall_vip64: redirect: fortinet.fortios.fortios_firewall_vip64 fortios_firewall_vipgrp: redirect: fortinet.fortios.fortios_firewall_vipgrp fortios_firewall_vipgrp46: redirect: fortinet.fortios.fortios_firewall_vipgrp46 fortios_firewall_vipgrp6: redirect: fortinet.fortios.fortios_firewall_vipgrp6 fortios_firewall_vipgrp64: redirect: fortinet.fortios.fortios_firewall_vipgrp64 fortios_firewall_wildcard_fqdn_custom: redirect: fortinet.fortios.fortios_firewall_wildcard_fqdn_custom fortios_firewall_wildcard_fqdn_group: redirect: fortinet.fortios.fortios_firewall_wildcard_fqdn_group fortios_ftp_proxy_explicit: redirect: fortinet.fortios.fortios_ftp_proxy_explicit fortios_icap_profile: redirect: fortinet.fortios.fortios_icap_profile fortios_icap_server: redirect: fortinet.fortios.fortios_icap_server fortios_ips_custom: redirect: fortinet.fortios.fortios_ips_custom fortios_ips_decoder: redirect: fortinet.fortios.fortios_ips_decoder fortios_ips_global: redirect: fortinet.fortios.fortios_ips_global fortios_ips_rule: redirect: fortinet.fortios.fortios_ips_rule fortios_ips_rule_settings: redirect: fortinet.fortios.fortios_ips_rule_settings fortios_ips_sensor: redirect: fortinet.fortios.fortios_ips_sensor fortios_ips_settings: redirect: fortinet.fortios.fortios_ips_settings fortios_ipv4_policy: redirect: fortinet.fortios.fortios_ipv4_policy fortios_log_custom_field: redirect: fortinet.fortios.fortios_log_custom_field fortios_log_disk_filter: redirect: fortinet.fortios.fortios_log_disk_filter fortios_log_disk_setting: redirect: fortinet.fortios.fortios_log_disk_setting fortios_log_eventfilter: redirect: fortinet.fortios.fortios_log_eventfilter fortios_log_fortianalyzer2_filter: redirect: fortinet.fortios.fortios_log_fortianalyzer2_filter fortios_log_fortianalyzer2_setting: redirect: fortinet.fortios.fortios_log_fortianalyzer2_setting fortios_log_fortianalyzer3_filter: redirect: fortinet.fortios.fortios_log_fortianalyzer3_filter fortios_log_fortianalyzer3_setting: redirect: fortinet.fortios.fortios_log_fortianalyzer3_setting fortios_log_fortianalyzer_filter: redirect: fortinet.fortios.fortios_log_fortianalyzer_filter fortios_log_fortianalyzer_override_filter: redirect: fortinet.fortios.fortios_log_fortianalyzer_override_filter fortios_log_fortianalyzer_override_setting: redirect: fortinet.fortios.fortios_log_fortianalyzer_override_setting fortios_log_fortianalyzer_setting: redirect: fortinet.fortios.fortios_log_fortianalyzer_setting fortios_log_fortiguard_filter: redirect: fortinet.fortios.fortios_log_fortiguard_filter fortios_log_fortiguard_override_filter: redirect: fortinet.fortios.fortios_log_fortiguard_override_filter fortios_log_fortiguard_override_setting: redirect: fortinet.fortios.fortios_log_fortiguard_override_setting fortios_log_fortiguard_setting: redirect: fortinet.fortios.fortios_log_fortiguard_setting fortios_log_gui_display: redirect: fortinet.fortios.fortios_log_gui_display fortios_log_memory_filter: redirect: fortinet.fortios.fortios_log_memory_filter fortios_log_memory_global_setting: redirect: fortinet.fortios.fortios_log_memory_global_setting fortios_log_memory_setting: redirect: fortinet.fortios.fortios_log_memory_setting fortios_log_null_device_filter: redirect: fortinet.fortios.fortios_log_null_device_filter fortios_log_null_device_setting: redirect: fortinet.fortios.fortios_log_null_device_setting fortios_log_setting: redirect: fortinet.fortios.fortios_log_setting fortios_log_syslogd2_filter: redirect: fortinet.fortios.fortios_log_syslogd2_filter fortios_log_syslogd2_setting: redirect: fortinet.fortios.fortios_log_syslogd2_setting fortios_log_syslogd3_filter: redirect: fortinet.fortios.fortios_log_syslogd3_filter fortios_log_syslogd3_setting: redirect: fortinet.fortios.fortios_log_syslogd3_setting fortios_log_syslogd4_filter: redirect: fortinet.fortios.fortios_log_syslogd4_filter fortios_log_syslogd4_setting: redirect: fortinet.fortios.fortios_log_syslogd4_setting fortios_log_syslogd_filter: redirect: fortinet.fortios.fortios_log_syslogd_filter fortios_log_syslogd_override_filter: redirect: fortinet.fortios.fortios_log_syslogd_override_filter fortios_log_syslogd_override_setting: redirect: fortinet.fortios.fortios_log_syslogd_override_setting fortios_log_syslogd_setting: redirect: fortinet.fortios.fortios_log_syslogd_setting fortios_log_threat_weight: redirect: fortinet.fortios.fortios_log_threat_weight fortios_log_webtrends_filter: redirect: fortinet.fortios.fortios_log_webtrends_filter fortios_log_webtrends_setting: redirect: fortinet.fortios.fortios_log_webtrends_setting fortios_report_chart: redirect: fortinet.fortios.fortios_report_chart fortios_report_dataset: redirect: fortinet.fortios.fortios_report_dataset fortios_report_layout: redirect: fortinet.fortios.fortios_report_layout fortios_report_setting: redirect: fortinet.fortios.fortios_report_setting fortios_report_style: redirect: fortinet.fortios.fortios_report_style fortios_report_theme: redirect: fortinet.fortios.fortios_report_theme fortios_router_access_list: redirect: fortinet.fortios.fortios_router_access_list fortios_router_access_list6: redirect: fortinet.fortios.fortios_router_access_list6 fortios_router_aspath_list: redirect: fortinet.fortios.fortios_router_aspath_list fortios_router_auth_path: redirect: fortinet.fortios.fortios_router_auth_path fortios_router_bfd: redirect: fortinet.fortios.fortios_router_bfd fortios_router_bfd6: redirect: fortinet.fortios.fortios_router_bfd6 fortios_router_bgp: redirect: fortinet.fortios.fortios_router_bgp fortios_router_community_list: redirect: fortinet.fortios.fortios_router_community_list fortios_router_isis: redirect: fortinet.fortios.fortios_router_isis fortios_router_key_chain: redirect: fortinet.fortios.fortios_router_key_chain fortios_router_multicast: redirect: fortinet.fortios.fortios_router_multicast fortios_router_multicast6: redirect: fortinet.fortios.fortios_router_multicast6 fortios_router_multicast_flow: redirect: fortinet.fortios.fortios_router_multicast_flow fortios_router_ospf: redirect: fortinet.fortios.fortios_router_ospf fortios_router_ospf6: redirect: fortinet.fortios.fortios_router_ospf6 fortios_router_policy: redirect: fortinet.fortios.fortios_router_policy fortios_router_policy6: redirect: fortinet.fortios.fortios_router_policy6 fortios_router_prefix_list: redirect: fortinet.fortios.fortios_router_prefix_list fortios_router_prefix_list6: redirect: fortinet.fortios.fortios_router_prefix_list6 fortios_router_rip: redirect: fortinet.fortios.fortios_router_rip fortios_router_ripng: redirect: fortinet.fortios.fortios_router_ripng fortios_router_route_map: redirect: fortinet.fortios.fortios_router_route_map fortios_router_setting: redirect: fortinet.fortios.fortios_router_setting fortios_router_static: redirect: fortinet.fortios.fortios_router_static fortios_router_static6: redirect: fortinet.fortios.fortios_router_static6 fortios_spamfilter_bwl: redirect: fortinet.fortios.fortios_spamfilter_bwl fortios_spamfilter_bword: redirect: fortinet.fortios.fortios_spamfilter_bword fortios_spamfilter_dnsbl: redirect: fortinet.fortios.fortios_spamfilter_dnsbl fortios_spamfilter_fortishield: redirect: fortinet.fortios.fortios_spamfilter_fortishield fortios_spamfilter_iptrust: redirect: fortinet.fortios.fortios_spamfilter_iptrust fortios_spamfilter_mheader: redirect: fortinet.fortios.fortios_spamfilter_mheader fortios_spamfilter_options: redirect: fortinet.fortios.fortios_spamfilter_options fortios_spamfilter_profile: redirect: fortinet.fortios.fortios_spamfilter_profile fortios_ssh_filter_profile: redirect: fortinet.fortios.fortios_ssh_filter_profile fortios_switch_controller_802_1X_settings: redirect: fortinet.fortios.fortios_switch_controller_802_1X_settings fortios_switch_controller_custom_command: redirect: fortinet.fortios.fortios_switch_controller_custom_command fortios_switch_controller_global: redirect: fortinet.fortios.fortios_switch_controller_global fortios_switch_controller_igmp_snooping: redirect: fortinet.fortios.fortios_switch_controller_igmp_snooping fortios_switch_controller_lldp_profile: redirect: fortinet.fortios.fortios_switch_controller_lldp_profile fortios_switch_controller_lldp_settings: redirect: fortinet.fortios.fortios_switch_controller_lldp_settings fortios_switch_controller_mac_sync_settings: redirect: fortinet.fortios.fortios_switch_controller_mac_sync_settings fortios_switch_controller_managed_switch: redirect: fortinet.fortios.fortios_switch_controller_managed_switch fortios_switch_controller_network_monitor_settings: redirect: fortinet.fortios.fortios_switch_controller_network_monitor_settings fortios_switch_controller_qos_dot1p_map: redirect: fortinet.fortios.fortios_switch_controller_qos_dot1p_map fortios_switch_controller_qos_ip_dscp_map: redirect: fortinet.fortios.fortios_switch_controller_qos_ip_dscp_map fortios_switch_controller_qos_qos_policy: redirect: fortinet.fortios.fortios_switch_controller_qos_qos_policy fortios_switch_controller_qos_queue_policy: redirect: fortinet.fortios.fortios_switch_controller_qos_queue_policy fortios_switch_controller_quarantine: redirect: fortinet.fortios.fortios_switch_controller_quarantine fortios_switch_controller_security_policy_802_1X: redirect: fortinet.fortios.fortios_switch_controller_security_policy_802_1X fortios_switch_controller_security_policy_captive_portal: redirect: fortinet.fortios.fortios_switch_controller_security_policy_captive_portal fortios_switch_controller_sflow: redirect: fortinet.fortios.fortios_switch_controller_sflow fortios_switch_controller_storm_control: redirect: fortinet.fortios.fortios_switch_controller_storm_control fortios_switch_controller_stp_settings: redirect: fortinet.fortios.fortios_switch_controller_stp_settings fortios_switch_controller_switch_group: redirect: fortinet.fortios.fortios_switch_controller_switch_group fortios_switch_controller_switch_interface_tag: redirect: fortinet.fortios.fortios_switch_controller_switch_interface_tag fortios_switch_controller_switch_log: redirect: fortinet.fortios.fortios_switch_controller_switch_log fortios_switch_controller_switch_profile: redirect: fortinet.fortios.fortios_switch_controller_switch_profile fortios_switch_controller_system: redirect: fortinet.fortios.fortios_switch_controller_system fortios_switch_controller_virtual_port_pool: redirect: fortinet.fortios.fortios_switch_controller_virtual_port_pool fortios_switch_controller_vlan: redirect: fortinet.fortios.fortios_switch_controller_vlan fortios_system_accprofile: redirect: fortinet.fortios.fortios_system_accprofile fortios_system_admin: redirect: fortinet.fortios.fortios_system_admin fortios_system_affinity_interrupt: redirect: fortinet.fortios.fortios_system_affinity_interrupt fortios_system_affinity_packet_redistribution: redirect: fortinet.fortios.fortios_system_affinity_packet_redistribution fortios_system_alarm: redirect: fortinet.fortios.fortios_system_alarm fortios_system_alias: redirect: fortinet.fortios.fortios_system_alias fortios_system_api_user: redirect: fortinet.fortios.fortios_system_api_user fortios_system_arp_table: redirect: fortinet.fortios.fortios_system_arp_table fortios_system_auto_install: redirect: fortinet.fortios.fortios_system_auto_install fortios_system_auto_script: redirect: fortinet.fortios.fortios_system_auto_script fortios_system_automation_action: redirect: fortinet.fortios.fortios_system_automation_action fortios_system_automation_destination: redirect: fortinet.fortios.fortios_system_automation_destination fortios_system_automation_stitch: redirect: fortinet.fortios.fortios_system_automation_stitch fortios_system_automation_trigger: redirect: fortinet.fortios.fortios_system_automation_trigger fortios_system_autoupdate_push_update: redirect: fortinet.fortios.fortios_system_autoupdate_push_update fortios_system_autoupdate_schedule: redirect: fortinet.fortios.fortios_system_autoupdate_schedule fortios_system_autoupdate_tunneling: redirect: fortinet.fortios.fortios_system_autoupdate_tunneling fortios_system_central_management: redirect: fortinet.fortios.fortios_system_central_management fortios_system_cluster_sync: redirect: fortinet.fortios.fortios_system_cluster_sync fortios_system_console: redirect: fortinet.fortios.fortios_system_console fortios_system_csf: redirect: fortinet.fortios.fortios_system_csf fortios_system_custom_language: redirect: fortinet.fortios.fortios_system_custom_language fortios_system_ddns: redirect: fortinet.fortios.fortios_system_ddns fortios_system_dedicated_mgmt: redirect: fortinet.fortios.fortios_system_dedicated_mgmt fortios_system_dhcp6_server: redirect: fortinet.fortios.fortios_system_dhcp6_server fortios_system_dhcp_server: redirect: fortinet.fortios.fortios_system_dhcp_server fortios_system_dns: redirect: fortinet.fortios.fortios_system_dns fortios_system_dns_database: redirect: fortinet.fortios.fortios_system_dns_database fortios_system_dns_server: redirect: fortinet.fortios.fortios_system_dns_server fortios_system_dscp_based_priority: redirect: fortinet.fortios.fortios_system_dscp_based_priority fortios_system_email_server: redirect: fortinet.fortios.fortios_system_email_server fortios_system_external_resource: redirect: fortinet.fortios.fortios_system_external_resource fortios_system_fips_cc: redirect: fortinet.fortios.fortios_system_fips_cc fortios_system_firmware_upgrade: redirect: fortinet.fortios.fortios_system_firmware_upgrade fortios_system_fm: redirect: fortinet.fortios.fortios_system_fm fortios_system_fortiguard: redirect: fortinet.fortios.fortios_system_fortiguard fortios_system_fortimanager: redirect: fortinet.fortios.fortios_system_fortimanager fortios_system_fortisandbox: redirect: fortinet.fortios.fortios_system_fortisandbox fortios_system_fsso_polling: redirect: fortinet.fortios.fortios_system_fsso_polling fortios_system_ftm_push: redirect: fortinet.fortios.fortios_system_ftm_push fortios_system_geoip_override: redirect: fortinet.fortios.fortios_system_geoip_override fortios_system_global: redirect: fortinet.fortios.fortios_system_global fortios_system_gre_tunnel: redirect: fortinet.fortios.fortios_system_gre_tunnel fortios_system_ha: redirect: fortinet.fortios.fortios_system_ha fortios_system_ha_monitor: redirect: fortinet.fortios.fortios_system_ha_monitor fortios_system_interface: redirect: fortinet.fortios.fortios_system_interface fortios_system_ipip_tunnel: redirect: fortinet.fortios.fortios_system_ipip_tunnel fortios_system_ips_urlfilter_dns: redirect: fortinet.fortios.fortios_system_ips_urlfilter_dns fortios_system_ips_urlfilter_dns6: redirect: fortinet.fortios.fortios_system_ips_urlfilter_dns6 fortios_system_ipv6_neighbor_cache: redirect: fortinet.fortios.fortios_system_ipv6_neighbor_cache fortios_system_ipv6_tunnel: redirect: fortinet.fortios.fortios_system_ipv6_tunnel fortios_system_link_monitor: redirect: fortinet.fortios.fortios_system_link_monitor fortios_system_mac_address_table: redirect: fortinet.fortios.fortios_system_mac_address_table fortios_system_management_tunnel: redirect: fortinet.fortios.fortios_system_management_tunnel fortios_system_mobile_tunnel: redirect: fortinet.fortios.fortios_system_mobile_tunnel fortios_system_nat64: redirect: fortinet.fortios.fortios_system_nat64 fortios_system_nd_proxy: redirect: fortinet.fortios.fortios_system_nd_proxy fortios_system_netflow: redirect: fortinet.fortios.fortios_system_netflow fortios_system_network_visibility: redirect: fortinet.fortios.fortios_system_network_visibility fortios_system_ntp: redirect: fortinet.fortios.fortios_system_ntp fortios_system_object_tagging: redirect: fortinet.fortios.fortios_system_object_tagging fortios_system_password_policy: redirect: fortinet.fortios.fortios_system_password_policy fortios_system_password_policy_guest_admin: redirect: fortinet.fortios.fortios_system_password_policy_guest_admin fortios_system_pppoe_interface: redirect: fortinet.fortios.fortios_system_pppoe_interface fortios_system_probe_response: redirect: fortinet.fortios.fortios_system_probe_response fortios_system_proxy_arp: redirect: fortinet.fortios.fortios_system_proxy_arp fortios_system_replacemsg_admin: redirect: fortinet.fortios.fortios_system_replacemsg_admin fortios_system_replacemsg_alertmail: redirect: fortinet.fortios.fortios_system_replacemsg_alertmail fortios_system_replacemsg_auth: redirect: fortinet.fortios.fortios_system_replacemsg_auth fortios_system_replacemsg_device_detection_portal: redirect: fortinet.fortios.fortios_system_replacemsg_device_detection_portal fortios_system_replacemsg_ec: redirect: fortinet.fortios.fortios_system_replacemsg_ec fortios_system_replacemsg_fortiguard_wf: redirect: fortinet.fortios.fortios_system_replacemsg_fortiguard_wf fortios_system_replacemsg_ftp: redirect: fortinet.fortios.fortios_system_replacemsg_ftp fortios_system_replacemsg_group: redirect: fortinet.fortios.fortios_system_replacemsg_group fortios_system_replacemsg_http: redirect: fortinet.fortios.fortios_system_replacemsg_http fortios_system_replacemsg_icap: redirect: fortinet.fortios.fortios_system_replacemsg_icap fortios_system_replacemsg_image: redirect: fortinet.fortios.fortios_system_replacemsg_image fortios_system_replacemsg_mail: redirect: fortinet.fortios.fortios_system_replacemsg_mail fortios_system_replacemsg_nac_quar: redirect: fortinet.fortios.fortios_system_replacemsg_nac_quar fortios_system_replacemsg_nntp: redirect: fortinet.fortios.fortios_system_replacemsg_nntp fortios_system_replacemsg_spam: redirect: fortinet.fortios.fortios_system_replacemsg_spam fortios_system_replacemsg_sslvpn: redirect: fortinet.fortios.fortios_system_replacemsg_sslvpn fortios_system_replacemsg_traffic_quota: redirect: fortinet.fortios.fortios_system_replacemsg_traffic_quota fortios_system_replacemsg_utm: redirect: fortinet.fortios.fortios_system_replacemsg_utm fortios_system_replacemsg_webproxy: redirect: fortinet.fortios.fortios_system_replacemsg_webproxy fortios_system_resource_limits: redirect: fortinet.fortios.fortios_system_resource_limits fortios_system_sdn_connector: redirect: fortinet.fortios.fortios_system_sdn_connector fortios_system_session_helper: redirect: fortinet.fortios.fortios_system_session_helper fortios_system_session_ttl: redirect: fortinet.fortios.fortios_system_session_ttl fortios_system_settings: redirect: fortinet.fortios.fortios_system_settings fortios_system_sflow: redirect: fortinet.fortios.fortios_system_sflow fortios_system_sit_tunnel: redirect: fortinet.fortios.fortios_system_sit_tunnel fortios_system_sms_server: redirect: fortinet.fortios.fortios_system_sms_server fortios_system_snmp_community: redirect: fortinet.fortios.fortios_system_snmp_community fortios_system_snmp_sysinfo: redirect: fortinet.fortios.fortios_system_snmp_sysinfo fortios_system_snmp_user: redirect: fortinet.fortios.fortios_system_snmp_user fortios_system_storage: redirect: fortinet.fortios.fortios_system_storage fortios_system_switch_interface: redirect: fortinet.fortios.fortios_system_switch_interface fortios_system_tos_based_priority: redirect: fortinet.fortios.fortios_system_tos_based_priority fortios_system_vdom: redirect: fortinet.fortios.fortios_system_vdom fortios_system_vdom_dns: redirect: fortinet.fortios.fortios_system_vdom_dns fortios_system_vdom_exception: redirect: fortinet.fortios.fortios_system_vdom_exception fortios_system_vdom_link: redirect: fortinet.fortios.fortios_system_vdom_link fortios_system_vdom_netflow: redirect: fortinet.fortios.fortios_system_vdom_netflow fortios_system_vdom_property: redirect: fortinet.fortios.fortios_system_vdom_property fortios_system_vdom_radius_server: redirect: fortinet.fortios.fortios_system_vdom_radius_server fortios_system_vdom_sflow: redirect: fortinet.fortios.fortios_system_vdom_sflow fortios_system_virtual_wan_link: redirect: fortinet.fortios.fortios_system_virtual_wan_link fortios_system_virtual_wire_pair: redirect: fortinet.fortios.fortios_system_virtual_wire_pair fortios_system_vxlan: redirect: fortinet.fortios.fortios_system_vxlan fortios_system_wccp: redirect: fortinet.fortios.fortios_system_wccp fortios_system_zone: redirect: fortinet.fortios.fortios_system_zone fortios_user_adgrp: redirect: fortinet.fortios.fortios_user_adgrp fortios_user_device: redirect: fortinet.fortios.fortios_user_device fortios_user_device_access_list: redirect: fortinet.fortios.fortios_user_device_access_list fortios_user_device_category: redirect: fortinet.fortios.fortios_user_device_category fortios_user_device_group: redirect: fortinet.fortios.fortios_user_device_group fortios_user_domain_controller: redirect: fortinet.fortios.fortios_user_domain_controller fortios_user_fortitoken: redirect: fortinet.fortios.fortios_user_fortitoken fortios_user_fsso: redirect: fortinet.fortios.fortios_user_fsso fortios_user_fsso_polling: redirect: fortinet.fortios.fortios_user_fsso_polling fortios_user_group: redirect: fortinet.fortios.fortios_user_group fortios_user_krb_keytab: redirect: fortinet.fortios.fortios_user_krb_keytab fortios_user_ldap: redirect: fortinet.fortios.fortios_user_ldap fortios_user_local: redirect: fortinet.fortios.fortios_user_local fortios_user_password_policy: redirect: fortinet.fortios.fortios_user_password_policy fortios_user_peer: redirect: fortinet.fortios.fortios_user_peer fortios_user_peergrp: redirect: fortinet.fortios.fortios_user_peergrp fortios_user_pop3: redirect: fortinet.fortios.fortios_user_pop3 fortios_user_quarantine: redirect: fortinet.fortios.fortios_user_quarantine fortios_user_radius: redirect: fortinet.fortios.fortios_user_radius fortios_user_security_exempt_list: redirect: fortinet.fortios.fortios_user_security_exempt_list fortios_user_setting: redirect: fortinet.fortios.fortios_user_setting fortios_user_tacacsplus: redirect: fortinet.fortios.fortios_user_tacacsplus fortios_voip_profile: redirect: fortinet.fortios.fortios_voip_profile fortios_vpn_certificate_ca: redirect: fortinet.fortios.fortios_vpn_certificate_ca fortios_vpn_certificate_crl: redirect: fortinet.fortios.fortios_vpn_certificate_crl fortios_vpn_certificate_local: redirect: fortinet.fortios.fortios_vpn_certificate_local fortios_vpn_certificate_ocsp_server: redirect: fortinet.fortios.fortios_vpn_certificate_ocsp_server fortios_vpn_certificate_remote: redirect: fortinet.fortios.fortios_vpn_certificate_remote fortios_vpn_certificate_setting: redirect: fortinet.fortios.fortios_vpn_certificate_setting fortios_vpn_ipsec_concentrator: redirect: fortinet.fortios.fortios_vpn_ipsec_concentrator fortios_vpn_ipsec_forticlient: redirect: fortinet.fortios.fortios_vpn_ipsec_forticlient fortios_vpn_ipsec_manualkey: redirect: fortinet.fortios.fortios_vpn_ipsec_manualkey fortios_vpn_ipsec_manualkey_interface: redirect: fortinet.fortios.fortios_vpn_ipsec_manualkey_interface fortios_vpn_ipsec_phase1: redirect: fortinet.fortios.fortios_vpn_ipsec_phase1 fortios_vpn_ipsec_phase1_interface: redirect: fortinet.fortios.fortios_vpn_ipsec_phase1_interface fortios_vpn_ipsec_phase2: redirect: fortinet.fortios.fortios_vpn_ipsec_phase2 fortios_vpn_ipsec_phase2_interface: redirect: fortinet.fortios.fortios_vpn_ipsec_phase2_interface fortios_vpn_l2tp: redirect: fortinet.fortios.fortios_vpn_l2tp fortios_vpn_pptp: redirect: fortinet.fortios.fortios_vpn_pptp fortios_vpn_ssl_settings: redirect: fortinet.fortios.fortios_vpn_ssl_settings fortios_vpn_ssl_web_host_check_software: redirect: fortinet.fortios.fortios_vpn_ssl_web_host_check_software fortios_vpn_ssl_web_portal: redirect: fortinet.fortios.fortios_vpn_ssl_web_portal fortios_vpn_ssl_web_realm: redirect: fortinet.fortios.fortios_vpn_ssl_web_realm fortios_vpn_ssl_web_user_bookmark: redirect: fortinet.fortios.fortios_vpn_ssl_web_user_bookmark fortios_vpn_ssl_web_user_group_bookmark: redirect: fortinet.fortios.fortios_vpn_ssl_web_user_group_bookmark fortios_waf_main_class: redirect: fortinet.fortios.fortios_waf_main_class fortios_waf_profile: redirect: fortinet.fortios.fortios_waf_profile fortios_waf_signature: redirect: fortinet.fortios.fortios_waf_signature fortios_waf_sub_class: redirect: fortinet.fortios.fortios_waf_sub_class fortios_wanopt_auth_group: redirect: fortinet.fortios.fortios_wanopt_auth_group fortios_wanopt_cache_service: redirect: fortinet.fortios.fortios_wanopt_cache_service fortios_wanopt_content_delivery_network_rule: redirect: fortinet.fortios.fortios_wanopt_content_delivery_network_rule fortios_wanopt_peer: redirect: fortinet.fortios.fortios_wanopt_peer fortios_wanopt_profile: redirect: fortinet.fortios.fortios_wanopt_profile fortios_wanopt_remote_storage: redirect: fortinet.fortios.fortios_wanopt_remote_storage fortios_wanopt_settings: redirect: fortinet.fortios.fortios_wanopt_settings fortios_wanopt_webcache: redirect: fortinet.fortios.fortios_wanopt_webcache fortios_web_proxy_debug_url: redirect: fortinet.fortios.fortios_web_proxy_debug_url fortios_web_proxy_explicit: redirect: fortinet.fortios.fortios_web_proxy_explicit fortios_web_proxy_forward_server: redirect: fortinet.fortios.fortios_web_proxy_forward_server fortios_web_proxy_forward_server_group: redirect: fortinet.fortios.fortios_web_proxy_forward_server_group fortios_web_proxy_global: redirect: fortinet.fortios.fortios_web_proxy_global fortios_web_proxy_profile: redirect: fortinet.fortios.fortios_web_proxy_profile fortios_web_proxy_url_match: redirect: fortinet.fortios.fortios_web_proxy_url_match fortios_web_proxy_wisp: redirect: fortinet.fortios.fortios_web_proxy_wisp fortios_webfilter: redirect: fortinet.fortios.fortios_webfilter fortios_webfilter_content: redirect: fortinet.fortios.fortios_webfilter_content fortios_webfilter_content_header: redirect: fortinet.fortios.fortios_webfilter_content_header fortios_webfilter_fortiguard: redirect: fortinet.fortios.fortios_webfilter_fortiguard fortios_webfilter_ftgd_local_cat: redirect: fortinet.fortios.fortios_webfilter_ftgd_local_cat fortios_webfilter_ftgd_local_rating: redirect: fortinet.fortios.fortios_webfilter_ftgd_local_rating fortios_webfilter_ips_urlfilter_cache_setting: redirect: fortinet.fortios.fortios_webfilter_ips_urlfilter_cache_setting fortios_webfilter_ips_urlfilter_setting: redirect: fortinet.fortios.fortios_webfilter_ips_urlfilter_setting fortios_webfilter_ips_urlfilter_setting6: redirect: fortinet.fortios.fortios_webfilter_ips_urlfilter_setting6 fortios_webfilter_override: redirect: fortinet.fortios.fortios_webfilter_override fortios_webfilter_profile: redirect: fortinet.fortios.fortios_webfilter_profile fortios_webfilter_search_engine: redirect: fortinet.fortios.fortios_webfilter_search_engine fortios_webfilter_urlfilter: redirect: fortinet.fortios.fortios_webfilter_urlfilter fortios_wireless_controller_ap_status: redirect: fortinet.fortios.fortios_wireless_controller_ap_status fortios_wireless_controller_ble_profile: redirect: fortinet.fortios.fortios_wireless_controller_ble_profile fortios_wireless_controller_bonjour_profile: redirect: fortinet.fortios.fortios_wireless_controller_bonjour_profile fortios_wireless_controller_global: redirect: fortinet.fortios.fortios_wireless_controller_global fortios_wireless_controller_hotspot20_anqp_3gpp_cellular: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_3gpp_cellular fortios_wireless_controller_hotspot20_anqp_ip_address_type: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_ip_address_type fortios_wireless_controller_hotspot20_anqp_nai_realm: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_nai_realm fortios_wireless_controller_hotspot20_anqp_network_auth_type: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_network_auth_type fortios_wireless_controller_hotspot20_anqp_roaming_consortium: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_roaming_consortium fortios_wireless_controller_hotspot20_anqp_venue_name: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_anqp_venue_name fortios_wireless_controller_hotspot20_h2qp_conn_capability: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_h2qp_conn_capability fortios_wireless_controller_hotspot20_h2qp_operator_name: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_h2qp_operator_name fortios_wireless_controller_hotspot20_h2qp_osu_provider: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_h2qp_osu_provider fortios_wireless_controller_hotspot20_h2qp_wan_metric: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_h2qp_wan_metric fortios_wireless_controller_hotspot20_hs_profile: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_hs_profile fortios_wireless_controller_hotspot20_icon: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_icon fortios_wireless_controller_hotspot20_qos_map: redirect: fortinet.fortios.fortios_wireless_controller_hotspot20_qos_map fortios_wireless_controller_inter_controller: redirect: fortinet.fortios.fortios_wireless_controller_inter_controller fortios_wireless_controller_qos_profile: redirect: fortinet.fortios.fortios_wireless_controller_qos_profile fortios_wireless_controller_setting: redirect: fortinet.fortios.fortios_wireless_controller_setting fortios_wireless_controller_timers: redirect: fortinet.fortios.fortios_wireless_controller_timers fortios_wireless_controller_utm_profile: redirect: fortinet.fortios.fortios_wireless_controller_utm_profile fortios_wireless_controller_vap: redirect: fortinet.fortios.fortios_wireless_controller_vap fortios_wireless_controller_vap_group: redirect: fortinet.fortios.fortios_wireless_controller_vap_group fortios_wireless_controller_wids_profile: redirect: fortinet.fortios.fortios_wireless_controller_wids_profile fortios_wireless_controller_wtp: redirect: fortinet.fortios.fortios_wireless_controller_wtp fortios_wireless_controller_wtp_group: redirect: fortinet.fortios.fortios_wireless_controller_wtp_group fortios_wireless_controller_wtp_profile: redirect: fortinet.fortios.fortios_wireless_controller_wtp_profile netbox_device: redirect: netbox.netbox.netbox_device netbox_ip_address: redirect: netbox.netbox.netbox_ip_address netbox_interface: redirect: netbox.netbox.netbox_interface netbox_prefix: redirect: netbox.netbox.netbox_prefix netbox_site: redirect: netbox.netbox.netbox_site aws_netapp_cvs_FileSystems: redirect: netapp.aws.aws_netapp_cvs_filesystems aws_netapp_cvs_active_directory: redirect: netapp.aws.aws_netapp_cvs_active_directory aws_netapp_cvs_pool: redirect: netapp.aws.aws_netapp_cvs_pool aws_netapp_cvs_snapshots: redirect: netapp.aws.aws_netapp_cvs_snapshots na_elementsw_access_group: redirect: netapp.elementsw.na_elementsw_access_group na_elementsw_account: redirect: netapp.elementsw.na_elementsw_account na_elementsw_admin_users: redirect: netapp.elementsw.na_elementsw_admin_users na_elementsw_backup: redirect: netapp.elementsw.na_elementsw_backup na_elementsw_check_connections: redirect: netapp.elementsw.na_elementsw_check_connections na_elementsw_cluster: redirect: netapp.elementsw.na_elementsw_cluster na_elementsw_cluster_config: redirect: netapp.elementsw.na_elementsw_cluster_config na_elementsw_cluster_pair: redirect: netapp.elementsw.na_elementsw_cluster_pair na_elementsw_cluster_snmp: redirect: netapp.elementsw.na_elementsw_cluster_snmp na_elementsw_drive: redirect: netapp.elementsw.na_elementsw_drive na_elementsw_initiators: redirect: netapp.elementsw.na_elementsw_initiators na_elementsw_ldap: redirect: netapp.elementsw.na_elementsw_ldap na_elementsw_network_interfaces: redirect: netapp.elementsw.na_elementsw_network_interfaces na_elementsw_node: redirect: netapp.elementsw.na_elementsw_node na_elementsw_snapshot: redirect: netapp.elementsw.na_elementsw_snapshot na_elementsw_snapshot_restore: redirect: netapp.elementsw.na_elementsw_snapshot_restore na_elementsw_snapshot_schedule: redirect: netapp.elementsw.na_elementsw_snapshot_schedule na_elementsw_vlan: redirect: netapp.elementsw.na_elementsw_vlan na_elementsw_volume: redirect: netapp.elementsw.na_elementsw_volume na_elementsw_volume_clone: redirect: netapp.elementsw.na_elementsw_volume_clone na_elementsw_volume_pair: redirect: netapp.elementsw.na_elementsw_volume_pair na_ontap_aggregate: redirect: netapp.ontap.na_ontap_aggregate na_ontap_autosupport: redirect: netapp.ontap.na_ontap_autosupport na_ontap_broadcast_domain: redirect: netapp.ontap.na_ontap_broadcast_domain na_ontap_broadcast_domain_ports: redirect: netapp.ontap.na_ontap_broadcast_domain_ports na_ontap_cg_snapshot: redirect: netapp.ontap.na_ontap_cg_snapshot na_ontap_cifs: redirect: netapp.ontap.na_ontap_cifs na_ontap_cifs_acl: redirect: netapp.ontap.na_ontap_cifs_acl na_ontap_cifs_server: redirect: netapp.ontap.na_ontap_cifs_server na_ontap_cluster: redirect: netapp.ontap.na_ontap_cluster na_ontap_cluster_ha: redirect: netapp.ontap.na_ontap_cluster_ha na_ontap_cluster_peer: redirect: netapp.ontap.na_ontap_cluster_peer na_ontap_command: redirect: netapp.ontap.na_ontap_command na_ontap_disks: redirect: netapp.ontap.na_ontap_disks na_ontap_dns: redirect: netapp.ontap.na_ontap_dns na_ontap_export_policy: redirect: netapp.ontap.na_ontap_export_policy na_ontap_export_policy_rule: redirect: netapp.ontap.na_ontap_export_policy_rule na_ontap_fcp: redirect: netapp.ontap.na_ontap_fcp na_ontap_firewall_policy: redirect: netapp.ontap.na_ontap_firewall_policy na_ontap_firmware_upgrade: redirect: netapp.ontap.na_ontap_firmware_upgrade na_ontap_flexcache: redirect: netapp.ontap.na_ontap_flexcache na_ontap_igroup: redirect: netapp.ontap.na_ontap_igroup na_ontap_igroup_initiator: redirect: netapp.ontap.na_ontap_igroup_initiator na_ontap_info: redirect: netapp.ontap.na_ontap_info na_ontap_interface: redirect: netapp.ontap.na_ontap_interface na_ontap_ipspace: redirect: netapp.ontap.na_ontap_ipspace na_ontap_iscsi: redirect: netapp.ontap.na_ontap_iscsi na_ontap_job_schedule: redirect: netapp.ontap.na_ontap_job_schedule na_ontap_kerberos_realm: redirect: netapp.ontap.na_ontap_kerberos_realm na_ontap_ldap: redirect: netapp.ontap.na_ontap_ldap na_ontap_ldap_client: redirect: netapp.ontap.na_ontap_ldap_client na_ontap_license: redirect: netapp.ontap.na_ontap_license na_ontap_lun: redirect: netapp.ontap.na_ontap_lun na_ontap_lun_copy: redirect: netapp.ontap.na_ontap_lun_copy na_ontap_lun_map: redirect: netapp.ontap.na_ontap_lun_map na_ontap_motd: redirect: netapp.ontap.na_ontap_motd na_ontap_ndmp: redirect: netapp.ontap.na_ontap_ndmp na_ontap_net_ifgrp: redirect: netapp.ontap.na_ontap_net_ifgrp na_ontap_net_port: redirect: netapp.ontap.na_ontap_net_port na_ontap_net_routes: redirect: netapp.ontap.na_ontap_net_routes na_ontap_net_subnet: redirect: netapp.ontap.na_ontap_net_subnet na_ontap_net_vlan: redirect: netapp.ontap.na_ontap_net_vlan na_ontap_nfs: redirect: netapp.ontap.na_ontap_nfs na_ontap_node: redirect: netapp.ontap.na_ontap_node na_ontap_ntp: redirect: netapp.ontap.na_ontap_ntp na_ontap_nvme: redirect: netapp.ontap.na_ontap_nvme na_ontap_nvme_namespace: redirect: netapp.ontap.na_ontap_nvme_namespace na_ontap_nvme_subsystem: redirect: netapp.ontap.na_ontap_nvme_subsystem na_ontap_object_store: redirect: netapp.ontap.na_ontap_object_store na_ontap_ports: redirect: netapp.ontap.na_ontap_ports na_ontap_portset: redirect: netapp.ontap.na_ontap_portset na_ontap_qos_adaptive_policy_group: redirect: netapp.ontap.na_ontap_qos_adaptive_policy_group na_ontap_qos_policy_group: redirect: netapp.ontap.na_ontap_qos_policy_group na_ontap_qtree: redirect: netapp.ontap.na_ontap_qtree na_ontap_quotas: redirect: netapp.ontap.na_ontap_quotas na_ontap_security_key_manager: redirect: netapp.ontap.na_ontap_security_key_manager na_ontap_service_processor_network: redirect: netapp.ontap.na_ontap_service_processor_network na_ontap_snapmirror: redirect: netapp.ontap.na_ontap_snapmirror na_ontap_snapshot: redirect: netapp.ontap.na_ontap_snapshot na_ontap_snapshot_policy: redirect: netapp.ontap.na_ontap_snapshot_policy na_ontap_snmp: redirect: netapp.ontap.na_ontap_snmp na_ontap_software_update: redirect: netapp.ontap.na_ontap_software_update na_ontap_svm: redirect: netapp.ontap.na_ontap_svm na_ontap_svm_options: redirect: netapp.ontap.na_ontap_svm_options na_ontap_ucadapter: redirect: netapp.ontap.na_ontap_ucadapter na_ontap_unix_group: redirect: netapp.ontap.na_ontap_unix_group na_ontap_unix_user: redirect: netapp.ontap.na_ontap_unix_user na_ontap_user: redirect: netapp.ontap.na_ontap_user na_ontap_user_role: redirect: netapp.ontap.na_ontap_user_role na_ontap_volume: redirect: netapp.ontap.na_ontap_volume na_ontap_volume_autosize: redirect: netapp.ontap.na_ontap_volume_autosize na_ontap_volume_clone: redirect: netapp.ontap.na_ontap_volume_clone na_ontap_vscan: redirect: netapp.ontap.na_ontap_vscan na_ontap_vscan_on_access_policy: redirect: netapp.ontap.na_ontap_vscan_on_access_policy na_ontap_vscan_on_demand_task: redirect: netapp.ontap.na_ontap_vscan_on_demand_task na_ontap_vscan_scanner_pool: redirect: netapp.ontap.na_ontap_vscan_scanner_pool na_ontap_vserver_cifs_security: redirect: netapp.ontap.na_ontap_vserver_cifs_security na_ontap_vserver_peer: redirect: netapp.ontap.na_ontap_vserver_peer cp_mgmt_access_layer: redirect: check_point.mgmt.cp_mgmt_access_layer cp_mgmt_access_layer_facts: redirect: check_point.mgmt.cp_mgmt_access_layer_facts cp_mgmt_access_role: redirect: check_point.mgmt.cp_mgmt_access_role cp_mgmt_access_role_facts: redirect: check_point.mgmt.cp_mgmt_access_role_facts cp_mgmt_access_rule: redirect: check_point.mgmt.cp_mgmt_access_rule cp_mgmt_access_rule_facts: redirect: check_point.mgmt.cp_mgmt_access_rule_facts cp_mgmt_address_range: redirect: check_point.mgmt.cp_mgmt_address_range cp_mgmt_address_range_facts: redirect: check_point.mgmt.cp_mgmt_address_range_facts cp_mgmt_administrator: redirect: check_point.mgmt.cp_mgmt_administrator cp_mgmt_administrator_facts: redirect: check_point.mgmt.cp_mgmt_administrator_facts cp_mgmt_application_site: redirect: check_point.mgmt.cp_mgmt_application_site cp_mgmt_application_site_category: redirect: check_point.mgmt.cp_mgmt_application_site_category cp_mgmt_application_site_category_facts: redirect: check_point.mgmt.cp_mgmt_application_site_category_facts cp_mgmt_application_site_facts: redirect: check_point.mgmt.cp_mgmt_application_site_facts cp_mgmt_application_site_group: redirect: check_point.mgmt.cp_mgmt_application_site_group cp_mgmt_application_site_group_facts: redirect: check_point.mgmt.cp_mgmt_application_site_group_facts cp_mgmt_assign_global_assignment: redirect: check_point.mgmt.cp_mgmt_assign_global_assignment cp_mgmt_discard: redirect: check_point.mgmt.cp_mgmt_discard cp_mgmt_dns_domain: redirect: check_point.mgmt.cp_mgmt_dns_domain cp_mgmt_dns_domain_facts: redirect: check_point.mgmt.cp_mgmt_dns_domain_facts cp_mgmt_dynamic_object: redirect: check_point.mgmt.cp_mgmt_dynamic_object cp_mgmt_dynamic_object_facts: redirect: check_point.mgmt.cp_mgmt_dynamic_object_facts cp_mgmt_exception_group: redirect: check_point.mgmt.cp_mgmt_exception_group cp_mgmt_exception_group_facts: redirect: check_point.mgmt.cp_mgmt_exception_group_facts cp_mgmt_global_assignment: redirect: check_point.mgmt.cp_mgmt_global_assignment cp_mgmt_global_assignment_facts: redirect: check_point.mgmt.cp_mgmt_global_assignment_facts cp_mgmt_group: redirect: check_point.mgmt.cp_mgmt_group cp_mgmt_group_facts: redirect: check_point.mgmt.cp_mgmt_group_facts cp_mgmt_group_with_exclusion: redirect: check_point.mgmt.cp_mgmt_group_with_exclusion cp_mgmt_group_with_exclusion_facts: redirect: check_point.mgmt.cp_mgmt_group_with_exclusion_facts cp_mgmt_host: redirect: check_point.mgmt.cp_mgmt_host cp_mgmt_host_facts: redirect: check_point.mgmt.cp_mgmt_host_facts cp_mgmt_install_policy: redirect: check_point.mgmt.cp_mgmt_install_policy cp_mgmt_mds_facts: redirect: check_point.mgmt.cp_mgmt_mds_facts cp_mgmt_multicast_address_range: redirect: check_point.mgmt.cp_mgmt_multicast_address_range cp_mgmt_multicast_address_range_facts: redirect: check_point.mgmt.cp_mgmt_multicast_address_range_facts cp_mgmt_network: redirect: check_point.mgmt.cp_mgmt_network cp_mgmt_network_facts: redirect: check_point.mgmt.cp_mgmt_network_facts cp_mgmt_package: redirect: check_point.mgmt.cp_mgmt_package cp_mgmt_package_facts: redirect: check_point.mgmt.cp_mgmt_package_facts cp_mgmt_publish: redirect: check_point.mgmt.cp_mgmt_publish cp_mgmt_put_file: redirect: check_point.mgmt.cp_mgmt_put_file cp_mgmt_run_ips_update: redirect: check_point.mgmt.cp_mgmt_run_ips_update cp_mgmt_run_script: redirect: check_point.mgmt.cp_mgmt_run_script cp_mgmt_security_zone: redirect: check_point.mgmt.cp_mgmt_security_zone cp_mgmt_security_zone_facts: redirect: check_point.mgmt.cp_mgmt_security_zone_facts cp_mgmt_service_dce_rpc: redirect: check_point.mgmt.cp_mgmt_service_dce_rpc cp_mgmt_service_dce_rpc_facts: redirect: check_point.mgmt.cp_mgmt_service_dce_rpc_facts cp_mgmt_service_group: redirect: check_point.mgmt.cp_mgmt_service_group cp_mgmt_service_group_facts: redirect: check_point.mgmt.cp_mgmt_service_group_facts cp_mgmt_service_icmp: redirect: check_point.mgmt.cp_mgmt_service_icmp cp_mgmt_service_icmp6: redirect: check_point.mgmt.cp_mgmt_service_icmp6 cp_mgmt_service_icmp6_facts: redirect: check_point.mgmt.cp_mgmt_service_icmp6_facts cp_mgmt_service_icmp_facts: redirect: check_point.mgmt.cp_mgmt_service_icmp_facts cp_mgmt_service_other: redirect: check_point.mgmt.cp_mgmt_service_other cp_mgmt_service_other_facts: redirect: check_point.mgmt.cp_mgmt_service_other_facts cp_mgmt_service_rpc: redirect: check_point.mgmt.cp_mgmt_service_rpc cp_mgmt_service_rpc_facts: redirect: check_point.mgmt.cp_mgmt_service_rpc_facts cp_mgmt_service_sctp: redirect: check_point.mgmt.cp_mgmt_service_sctp cp_mgmt_service_sctp_facts: redirect: check_point.mgmt.cp_mgmt_service_sctp_facts cp_mgmt_service_tcp: redirect: check_point.mgmt.cp_mgmt_service_tcp cp_mgmt_service_tcp_facts: redirect: check_point.mgmt.cp_mgmt_service_tcp_facts cp_mgmt_service_udp: redirect: check_point.mgmt.cp_mgmt_service_udp cp_mgmt_service_udp_facts: redirect: check_point.mgmt.cp_mgmt_service_udp_facts cp_mgmt_session_facts: redirect: check_point.mgmt.cp_mgmt_session_facts cp_mgmt_simple_gateway: redirect: check_point.mgmt.cp_mgmt_simple_gateway cp_mgmt_simple_gateway_facts: redirect: check_point.mgmt.cp_mgmt_simple_gateway_facts cp_mgmt_tag: redirect: check_point.mgmt.cp_mgmt_tag cp_mgmt_tag_facts: redirect: check_point.mgmt.cp_mgmt_tag_facts cp_mgmt_threat_exception: redirect: check_point.mgmt.cp_mgmt_threat_exception cp_mgmt_threat_exception_facts: redirect: check_point.mgmt.cp_mgmt_threat_exception_facts cp_mgmt_threat_indicator: redirect: check_point.mgmt.cp_mgmt_threat_indicator cp_mgmt_threat_indicator_facts: redirect: check_point.mgmt.cp_mgmt_threat_indicator_facts cp_mgmt_threat_layer: redirect: check_point.mgmt.cp_mgmt_threat_layer cp_mgmt_threat_layer_facts: redirect: check_point.mgmt.cp_mgmt_threat_layer_facts cp_mgmt_threat_profile: redirect: check_point.mgmt.cp_mgmt_threat_profile cp_mgmt_threat_profile_facts: redirect: check_point.mgmt.cp_mgmt_threat_profile_facts cp_mgmt_threat_protection_override: redirect: check_point.mgmt.cp_mgmt_threat_protection_override cp_mgmt_threat_rule: redirect: check_point.mgmt.cp_mgmt_threat_rule cp_mgmt_threat_rule_facts: redirect: check_point.mgmt.cp_mgmt_threat_rule_facts cp_mgmt_time: redirect: check_point.mgmt.cp_mgmt_time cp_mgmt_time_facts: redirect: check_point.mgmt.cp_mgmt_time_facts cp_mgmt_verify_policy: redirect: check_point.mgmt.cp_mgmt_verify_policy cp_mgmt_vpn_community_meshed: redirect: check_point.mgmt.cp_mgmt_vpn_community_meshed cp_mgmt_vpn_community_meshed_facts: redirect: check_point.mgmt.cp_mgmt_vpn_community_meshed_facts cp_mgmt_vpn_community_star: redirect: check_point.mgmt.cp_mgmt_vpn_community_star cp_mgmt_vpn_community_star_facts: redirect: check_point.mgmt.cp_mgmt_vpn_community_star_facts cp_mgmt_wildcard: redirect: check_point.mgmt.cp_mgmt_wildcard cp_mgmt_wildcard_facts: redirect: check_point.mgmt.cp_mgmt_wildcard_facts eos_ospfv2: redirect: arista.eos.eos_ospfv2 eos_static_route: redirect: arista.eos.eos_static_route eos_acls: redirect: arista.eos.eos_acls eos_interfaces: redirect: arista.eos.eos_interfaces eos_facts: redirect: arista.eos.eos_facts eos_logging: redirect: arista.eos.eos_logging eos_lag_interfaces: redirect: arista.eos.eos_lag_interfaces eos_l2_interfaces: redirect: arista.eos.eos_l2_interfaces eos_l3_interface: redirect: arista.eos.eos_l3_interface eos_lacp: redirect: arista.eos.eos_lacp eos_lldp_global: redirect: arista.eos.eos_lldp_global eos_static_routes: redirect: arista.eos.eos_static_routes eos_lacp_interfaces: redirect: arista.eos.eos_lacp_interfaces eos_system: redirect: arista.eos.eos_system eos_vlan: redirect: arista.eos.eos_vlan eos_eapi: redirect: arista.eos.eos_eapi eos_acl_interfaces: redirect: arista.eos.eos_acl_interfaces eos_l2_interface: redirect: arista.eos.eos_l2_interface eos_lldp_interfaces: redirect: arista.eos.eos_lldp_interfaces eos_command: redirect: arista.eos.eos_command eos_linkagg: redirect: arista.eos.eos_linkagg eos_l3_interfaces: redirect: arista.eos.eos_l3_interfaces eos_vlans: redirect: arista.eos.eos_vlans eos_user: redirect: arista.eos.eos_user eos_banner: redirect: arista.eos.eos_banner eos_lldp: redirect: arista.eos.eos_lldp eos_interface: redirect: arista.eos.eos_interface eos_config: redirect: arista.eos.eos_config eos_bgp: redirect: arista.eos.eos_bgp eos_vrf: redirect: arista.eos.eos_vrf aci_aaa_user: redirect: cisco.aci.aci_aaa_user aci_aaa_user_certificate: redirect: cisco.aci.aci_aaa_user_certificate aci_access_port_block_to_access_port: redirect: cisco.aci.aci_access_port_block_to_access_port aci_access_port_to_interface_policy_leaf_profile: redirect: cisco.aci.aci_access_port_to_interface_policy_leaf_profile aci_access_sub_port_block_to_access_port: redirect: cisco.aci.aci_access_sub_port_block_to_access_port aci_aep: redirect: cisco.aci.aci_aep aci_aep_to_domain: redirect: cisco.aci.aci_aep_to_domain aci_ap: redirect: cisco.aci.aci_ap aci_bd: redirect: cisco.aci.aci_bd aci_bd_subnet: redirect: cisco.aci.aci_bd_subnet aci_bd_to_l3out: redirect: cisco.aci.aci_bd_to_l3out aci_config_rollback: redirect: cisco.aci.aci_config_rollback aci_config_snapshot: redirect: cisco.aci.aci_config_snapshot aci_contract: redirect: cisco.aci.aci_contract aci_contract_subject: redirect: cisco.aci.aci_contract_subject aci_contract_subject_to_filter: redirect: cisco.aci.aci_contract_subject_to_filter aci_domain: redirect: cisco.aci.aci_domain aci_domain_to_encap_pool: redirect: cisco.aci.aci_domain_to_encap_pool aci_domain_to_vlan_pool: redirect: cisco.aci.aci_domain_to_vlan_pool aci_encap_pool: redirect: cisco.aci.aci_encap_pool aci_encap_pool_range: redirect: cisco.aci.aci_encap_pool_range aci_epg: redirect: cisco.aci.aci_epg aci_epg_monitoring_policy: redirect: cisco.aci.aci_epg_monitoring_policy aci_epg_to_contract: redirect: cisco.aci.aci_epg_to_contract aci_epg_to_domain: redirect: cisco.aci.aci_epg_to_domain aci_fabric_node: redirect: cisco.aci.aci_fabric_node aci_fabric_scheduler: redirect: cisco.aci.aci_fabric_scheduler aci_filter: redirect: cisco.aci.aci_filter aci_filter_entry: redirect: cisco.aci.aci_filter_entry aci_firmware_group: redirect: cisco.aci.aci_firmware_group aci_firmware_group_node: redirect: cisco.aci.aci_firmware_group_node aci_firmware_policy: redirect: cisco.aci.aci_firmware_policy aci_firmware_source: redirect: cisco.aci.aci_firmware_source aci_interface_policy_cdp: redirect: cisco.aci.aci_interface_policy_cdp aci_interface_policy_fc: redirect: cisco.aci.aci_interface_policy_fc aci_interface_policy_l2: redirect: cisco.aci.aci_interface_policy_l2 aci_interface_policy_leaf_policy_group: redirect: cisco.aci.aci_interface_policy_leaf_policy_group aci_interface_policy_leaf_profile: redirect: cisco.aci.aci_interface_policy_leaf_profile aci_interface_policy_lldp: redirect: cisco.aci.aci_interface_policy_lldp aci_interface_policy_mcp: redirect: cisco.aci.aci_interface_policy_mcp aci_interface_policy_ospf: redirect: cisco.aci.aci_interface_policy_ospf aci_interface_policy_port_channel: redirect: cisco.aci.aci_interface_policy_port_channel aci_interface_policy_port_security: redirect: cisco.aci.aci_interface_policy_port_security aci_interface_selector_to_switch_policy_leaf_profile: redirect: cisco.aci.aci_interface_selector_to_switch_policy_leaf_profile aci_l3out: redirect: cisco.aci.aci_l3out aci_l3out_extepg: redirect: cisco.aci.aci_l3out_extepg aci_l3out_extsubnet: redirect: cisco.aci.aci_l3out_extsubnet aci_l3out_route_tag_policy: redirect: cisco.aci.aci_l3out_route_tag_policy aci_maintenance_group: redirect: cisco.aci.aci_maintenance_group aci_maintenance_group_node: redirect: cisco.aci.aci_maintenance_group_node aci_maintenance_policy: redirect: cisco.aci.aci_maintenance_policy aci_rest: redirect: cisco.aci.aci_rest aci_static_binding_to_epg: redirect: cisco.aci.aci_static_binding_to_epg aci_switch_leaf_selector: redirect: cisco.aci.aci_switch_leaf_selector aci_switch_policy_leaf_profile: redirect: cisco.aci.aci_switch_policy_leaf_profile aci_switch_policy_vpc_protection_group: redirect: cisco.aci.aci_switch_policy_vpc_protection_group aci_taboo_contract: redirect: cisco.aci.aci_taboo_contract aci_tenant: redirect: cisco.aci.aci_tenant aci_tenant_action_rule_profile: redirect: cisco.aci.aci_tenant_action_rule_profile aci_tenant_ep_retention_policy: redirect: cisco.aci.aci_tenant_ep_retention_policy aci_tenant_span_dst_group: redirect: cisco.aci.aci_tenant_span_dst_group aci_tenant_span_src_group: redirect: cisco.aci.aci_tenant_span_src_group aci_tenant_span_src_group_to_dst_group: redirect: cisco.aci.aci_tenant_span_src_group_to_dst_group aci_vlan_pool: redirect: cisco.aci.aci_vlan_pool aci_vlan_pool_encap_block: redirect: cisco.aci.aci_vlan_pool_encap_block aci_vmm_credential: redirect: cisco.aci.aci_vmm_credential aci_vrf: redirect: cisco.aci.aci_vrf asa_acl: redirect: cisco.asa.asa_acl asa_config: redirect: cisco.asa.asa_config asa_og: redirect: cisco.asa.asa_og asa_command: redirect: cisco.asa.asa_command intersight_facts: redirect: cisco.intersight.intersight_info intersight_info: redirect: cisco.intersight.intersight_info intersight_rest_api: redirect: cisco.intersight.intersight_rest_api ios_ospfv2: redirect: cisco.ios.ios_ospfv2 ios_l3_interfaces: redirect: cisco.ios.ios_l3_interfaces ios_lldp: redirect: cisco.ios.ios_lldp ios_interface: redirect: cisco.ios.ios_interface ios_lldp_interfaces: redirect: cisco.ios.ios_lldp_interfaces ios_l3_interface: redirect: cisco.ios.ios_l3_interface ios_acl_interfaces: redirect: cisco.ios.ios_acl_interfaces ios_static_routes: redirect: cisco.ios.ios_static_routes ios_l2_interfaces: redirect: cisco.ios.ios_l2_interfaces ios_logging: redirect: cisco.ios.ios_logging ios_vlan: redirect: cisco.ios.ios_vlan ios_command: redirect: cisco.ios.ios_command ios_static_route: redirect: cisco.ios.ios_static_route ios_lldp_global: redirect: cisco.ios.ios_lldp_global ios_banner: redirect: cisco.ios.ios_banner ios_lag_interfaces: redirect: cisco.ios.ios_lag_interfaces ios_linkagg: redirect: cisco.ios.ios_linkagg ios_user: redirect: cisco.ios.ios_user ios_system: redirect: cisco.ios.ios_system ios_facts: redirect: cisco.ios.ios_facts ios_ping: redirect: cisco.ios.ios_ping ios_vlans: redirect: cisco.ios.ios_vlans ios_vrf: redirect: cisco.ios.ios_vrf ios_bgp: redirect: cisco.ios.ios_bgp ios_ntp: redirect: cisco.ios.ios_ntp ios_lacp_interfaces: redirect: cisco.ios.ios_lacp_interfaces ios_lacp: redirect: cisco.ios.ios_lacp ios_config: redirect: cisco.ios.ios_config ios_l2_interface: redirect: cisco.ios.ios_l2_interface ios_acls: redirect: cisco.ios.ios_acls ios_interfaces: redirect: cisco.ios.ios_interfaces iosxr_ospfv2: redirect: cisco.iosxr.iosxr_ospfv2 iosxr_bgp: redirect: cisco.iosxr.iosxr_bgp iosxr_lldp_interfaces: redirect: cisco.iosxr.iosxr_lldp_interfaces iosxr_l3_interfaces: redirect: cisco.iosxr.iosxr_l3_interfaces iosxr_netconf: redirect: cisco.iosxr.iosxr_netconf iosxr_static_routes: redirect: cisco.iosxr.iosxr_static_routes iosxr_lldp_global: redirect: cisco.iosxr.iosxr_lldp_global iosxr_config: redirect: cisco.iosxr.iosxr_config iosxr_lag_interfaces: redirect: cisco.iosxr.iosxr_lag_interfaces iosxr_interface: redirect: cisco.iosxr.iosxr_interface iosxr_user: redirect: cisco.iosxr.iosxr_user iosxr_facts: redirect: cisco.iosxr.iosxr_facts iosxr_interfaces: redirect: cisco.iosxr.iosxr_interfaces iosxr_acl_interfaces: redirect: cisco.iosxr.iosxr_acl_interfaces iosxr_l2_interfaces: redirect: cisco.iosxr.iosxr_l2_interfaces iosxr_logging: redirect: cisco.iosxr.iosxr_logging iosxr_lacp: redirect: cisco.iosxr.iosxr_lacp iosxr_acls: redirect: cisco.iosxr.iosxr_acls iosxr_system: redirect: cisco.iosxr.iosxr_system iosxr_command: redirect: cisco.iosxr.iosxr_command iosxr_lacp_interfaces: redirect: cisco.iosxr.iosxr_lacp_interfaces iosxr_banner: redirect: cisco.iosxr.iosxr_banner meraki_admin: redirect: cisco.meraki.meraki_admin meraki_config_template: redirect: cisco.meraki.meraki_config_template meraki_content_filtering: redirect: cisco.meraki.meraki_content_filtering meraki_device: redirect: cisco.meraki.meraki_device meraki_firewalled_services: redirect: cisco.meraki.meraki_firewalled_services meraki_malware: redirect: cisco.meraki.meraki_malware meraki_mr_l3_firewall: redirect: cisco.meraki.meraki_mr_l3_firewall meraki_mx_l3_firewall: redirect: cisco.meraki.meraki_mx_l3_firewall meraki_mx_l7_firewall: redirect: cisco.meraki.meraki_mx_l7_firewall meraki_nat: redirect: cisco.meraki.meraki_nat meraki_network: redirect: cisco.meraki.meraki_network meraki_organization: redirect: cisco.meraki.meraki_organization meraki_snmp: redirect: cisco.meraki.meraki_snmp meraki_ssid: redirect: cisco.meraki.meraki_ssid meraki_static_route: redirect: cisco.meraki.meraki_static_route meraki_switchport: redirect: cisco.meraki.meraki_switchport meraki_syslog: redirect: cisco.meraki.meraki_syslog meraki_vlan: redirect: cisco.meraki.meraki_vlan meraki_webhook: redirect: cisco.meraki.meraki_webhook mso_label: redirect: cisco.mso.mso_label mso_role: redirect: cisco.mso.mso_role mso_schema: redirect: cisco.mso.mso_schema mso_schema_site: redirect: cisco.mso.mso_schema_site mso_schema_site_anp: redirect: cisco.mso.mso_schema_site_anp mso_schema_site_anp_epg: redirect: cisco.mso.mso_schema_site_anp_epg mso_schema_site_anp_epg_domain: redirect: cisco.mso.mso_schema_site_anp_epg_domain mso_schema_site_anp_epg_staticleaf: redirect: cisco.mso.mso_schema_site_anp_epg_staticleaf mso_schema_site_anp_epg_staticport: redirect: cisco.mso.mso_schema_site_anp_epg_staticport mso_schema_site_anp_epg_subnet: redirect: cisco.mso.mso_schema_site_anp_epg_subnet mso_schema_site_bd: redirect: cisco.mso.mso_schema_site_bd mso_schema_site_bd_l3out: redirect: cisco.mso.mso_schema_site_bd_l3out mso_schema_site_bd_subnet: redirect: cisco.mso.mso_schema_site_bd_subnet mso_schema_site_vrf: redirect: cisco.mso.mso_schema_site_vrf mso_schema_site_vrf_region: redirect: cisco.mso.mso_schema_site_vrf_region mso_schema_site_vrf_region_cidr: redirect: cisco.mso.mso_schema_site_vrf_region_cidr mso_schema_site_vrf_region_cidr_subnet: redirect: cisco.mso.mso_schema_site_vrf_region_cidr_subnet mso_schema_template: redirect: cisco.mso.mso_schema_template mso_schema_template_anp: redirect: cisco.mso.mso_schema_template_anp mso_schema_template_anp_epg: redirect: cisco.mso.mso_schema_template_anp_epg mso_schema_template_anp_epg_contract: redirect: cisco.mso.mso_schema_template_anp_epg_contract mso_schema_template_anp_epg_subnet: redirect: cisco.mso.mso_schema_template_anp_epg_subnet mso_schema_template_bd: redirect: cisco.mso.mso_schema_template_bd mso_schema_template_bd_subnet: redirect: cisco.mso.mso_schema_template_bd_subnet mso_schema_template_contract_filter: redirect: cisco.mso.mso_schema_template_contract_filter mso_schema_template_deploy: redirect: cisco.mso.mso_schema_template_deploy mso_schema_template_externalepg: redirect: cisco.mso.mso_schema_template_externalepg mso_schema_template_filter_entry: redirect: cisco.mso.mso_schema_template_filter_entry mso_schema_template_l3out: redirect: cisco.mso.mso_schema_template_l3out mso_schema_template_vrf: redirect: cisco.mso.mso_schema_template_vrf mso_site: redirect: cisco.mso.mso_site mso_tenant: redirect: cisco.mso.mso_tenant mso_user: redirect: cisco.mso.mso_user nxos_telemetry: redirect: cisco.nxos.nxos_telemetry nxos_user: redirect: cisco.nxos.nxos_user nxos_bfd_interfaces: redirect: cisco.nxos.nxos_bfd_interfaces nxos_ospf: redirect: cisco.nxos.nxos_ospf nxos_ospfv2: redirect: cisco.nxos.nxos_ospfv2 nxos_system: redirect: cisco.nxos.nxos_system nxos_l3_interface: redirect: cisco.nxos.nxos_l3_interface nxos_smu: redirect: cisco.nxos.nxos_smu nxos_reboot: redirect: cisco.nxos.nxos_reboot nxos_static_routes: redirect: cisco.nxos.nxos_static_routes nxos_static_route: redirect: cisco.nxos.nxos_static_route nxos_acl_interfaces: redirect: cisco.nxos.nxos_acl_interfaces nxos_vpc: redirect: cisco.nxos.nxos_vpc nxos_linkagg: redirect: cisco.nxos.nxos_linkagg nxos_vxlan_vtep_vni: redirect: cisco.nxos.nxos_vxlan_vtep_vni nxos_vrrp: redirect: cisco.nxos.nxos_vrrp nxos_lldp: redirect: cisco.nxos.nxos_lldp nxos_interface: redirect: cisco.nxos.nxos_interface nxos_lacp_interfaces: redirect: cisco.nxos.nxos_lacp_interfaces nxos_gir_profile_management: redirect: cisco.nxos.nxos_gir_profile_management nxos_snmp_community: redirect: cisco.nxos.nxos_snmp_community nxos_lag_interfaces: redirect: cisco.nxos.nxos_lag_interfaces nxos_acl: redirect: cisco.nxos.nxos_acl nxos_hsrp_interfaces: redirect: cisco.nxos.nxos_hsrp_interfaces nxos_lldp_global: redirect: cisco.nxos.nxos_lldp_global nxos_snmp_contact: redirect: cisco.nxos.nxos_snmp_contact nxos_vrf_interface: redirect: cisco.nxos.nxos_vrf_interface nxos_rpm: redirect: cisco.nxos.nxos_rpm nxos_ntp_options: redirect: cisco.nxos.nxos_ntp_options nxos_ospf_vrf: redirect: cisco.nxos.nxos_ospf_vrf nxos_vtp_version: redirect: cisco.nxos.nxos_vtp_version nxos_igmp_interface: redirect: cisco.nxos.nxos_igmp_interface nxos_bgp_neighbor: redirect: cisco.nxos.nxos_bgp_neighbor nxos_bgp: redirect: cisco.nxos.nxos_bgp nxos_rollback: redirect: cisco.nxos.nxos_rollback nxos_aaa_server: redirect: cisco.nxos.nxos_aaa_server nxos_udld_interface: redirect: cisco.nxos.nxos_udld_interface nxos_bgp_af: redirect: cisco.nxos.nxos_bgp_af nxos_feature: redirect: cisco.nxos.nxos_feature nxos_snmp_traps: redirect: cisco.nxos.nxos_snmp_traps nxos_evpn_global: redirect: cisco.nxos.nxos_evpn_global nxos_igmp: redirect: cisco.nxos.nxos_igmp nxos_aaa_server_host: redirect: cisco.nxos.nxos_aaa_server_host nxos_vrf_af: redirect: cisco.nxos.nxos_vrf_af nxos_snapshot: redirect: cisco.nxos.nxos_snapshot nxos_gir: redirect: cisco.nxos.nxos_gir nxos_command: redirect: cisco.nxos.nxos_command nxos_vxlan_vtep: redirect: cisco.nxos.nxos_vxlan_vtep nxos_snmp_location: redirect: cisco.nxos.nxos_snmp_location nxos_evpn_vni: redirect: cisco.nxos.nxos_evpn_vni nxos_vpc_interface: redirect: cisco.nxos.nxos_vpc_interface nxos_logging: redirect: cisco.nxos.nxos_logging nxos_pim: redirect: cisco.nxos.nxos_pim nxos_ping: redirect: cisco.nxos.nxos_ping nxos_pim_rp_address: redirect: cisco.nxos.nxos_pim_rp_address nxos_pim_interface: redirect: cisco.nxos.nxos_pim_interface nxos_install_os: redirect: cisco.nxos.nxos_install_os nxos_nxapi: redirect: cisco.nxos.nxos_nxapi nxos_l2_interface: redirect: cisco.nxos.nxos_l2_interface nxos_bgp_neighbor_af: redirect: cisco.nxos.nxos_bgp_neighbor_af nxos_lacp: redirect: cisco.nxos.nxos_lacp nxos_lldp_interfaces: redirect: cisco.nxos.nxos_lldp_interfaces nxos_acl_interface: redirect: cisco.nxos.nxos_acl_interface nxos_vrf: redirect: cisco.nxos.nxos_vrf nxos_interface_ospf: redirect: cisco.nxos.nxos_interface_ospf nxos_acls: redirect: cisco.nxos.nxos_acls nxos_vtp_password: redirect: cisco.nxos.nxos_vtp_password nxos_l3_interfaces: redirect: cisco.nxos.nxos_l3_interfaces nxos_igmp_snooping: redirect: cisco.nxos.nxos_igmp_snooping nxos_banner: redirect: cisco.nxos.nxos_banner nxos_bfd_global: redirect: cisco.nxos.nxos_bfd_global nxos_udld: redirect: cisco.nxos.nxos_udld nxos_vtp_domain: redirect: cisco.nxos.nxos_vtp_domain nxos_snmp_host: redirect: cisco.nxos.nxos_snmp_host nxos_l2_interfaces: redirect: cisco.nxos.nxos_l2_interfaces nxos_hsrp: redirect: cisco.nxos.nxos_hsrp nxos_interfaces: redirect: cisco.nxos.nxos_interfaces nxos_overlay_global: redirect: cisco.nxos.nxos_overlay_global nxos_snmp_user: redirect: cisco.nxos.nxos_snmp_user nxos_vlans: redirect: cisco.nxos.nxos_vlans nxos_ntp: redirect: cisco.nxos.nxos_ntp nxos_file_copy: redirect: cisco.nxos.nxos_file_copy nxos_ntp_auth: redirect: cisco.nxos.nxos_ntp_auth nxos_config: redirect: cisco.nxos.nxos_config nxos_vlan: redirect: cisco.nxos.nxos_vlan nxos_facts: redirect: cisco.nxos.nxos_facts nxos_zone_zoneset: redirect: cisco.nxos.nxos_zone_zoneset nxos_vsan: redirect: cisco.nxos.nxos_vsan nxos_devicealias: redirect: cisco.nxos.nxos_devicealias ucs_managed_objects: redirect: cisco.ucs.ucs_managed_objects ucs_vnic_template: redirect: cisco.ucs.ucs_vnic_template ucs_query: redirect: cisco.ucs.ucs_query ucs_dns_server: redirect: cisco.ucs.ucs_dns_server ucs_lan_connectivity: redirect: cisco.ucs.ucs_lan_connectivity ucs_vhba_template: redirect: cisco.ucs.ucs_vhba_template ucs_san_connectivity: redirect: cisco.ucs.ucs_san_connectivity ucs_disk_group_policy: redirect: cisco.ucs.ucs_disk_group_policy ucs_uuid_pool: redirect: cisco.ucs.ucs_uuid_pool ucs_vlan_find: redirect: cisco.ucs.ucs_vlan_find ucs_vlans: redirect: cisco.ucs.ucs_vlans ucs_service_profile_template: redirect: cisco.ucs.ucs_service_profile_template ucs_ip_pool: redirect: cisco.ucs.ucs_ip_pool ucs_timezone: redirect: cisco.ucs.ucs_timezone ucs_ntp_server: redirect: cisco.ucs.ucs_ntp_server ucs_mac_pool: redirect: cisco.ucs.ucs_mac_pool ucs_storage_profile: redirect: cisco.ucs.ucs_storage_profile ucs_org: redirect: cisco.ucs.ucs_org ucs_vsans: redirect: cisco.ucs.ucs_vsans ucs_wwn_pool: redirect: cisco.ucs.ucs_wwn_pool bigip_apm_acl: redirect: f5networks.f5_modules.bigip_apm_acl bigip_apm_network_access: redirect: f5networks.f5_modules.bigip_apm_network_access bigip_apm_policy_fetch: redirect: f5networks.f5_modules.bigip_apm_policy_fetch bigip_apm_policy_import: redirect: f5networks.f5_modules.bigip_apm_policy_import bigip_appsvcs_extension: redirect: f5networks.f5_modules.bigip_appsvcs_extension bigip_asm_dos_application: redirect: f5networks.f5_modules.bigip_asm_dos_application bigip_asm_policy_fetch: redirect: f5networks.f5_modules.bigip_asm_policy_fetch bigip_asm_policy_import: redirect: f5networks.f5_modules.bigip_asm_policy_import bigip_asm_policy_manage: redirect: f5networks.f5_modules.bigip_asm_policy_manage bigip_asm_policy_server_technology: redirect: f5networks.f5_modules.bigip_asm_policy_server_technology bigip_asm_policy_signature_set: redirect: f5networks.f5_modules.bigip_asm_policy_signature_set bigip_cli_alias: redirect: f5networks.f5_modules.bigip_cli_alias bigip_cli_script: redirect: f5networks.f5_modules.bigip_cli_script bigip_command: redirect: f5networks.f5_modules.bigip_command bigip_config: redirect: f5networks.f5_modules.bigip_config bigip_configsync_action: redirect: f5networks.f5_modules.bigip_configsync_action bigip_data_group: redirect: f5networks.f5_modules.bigip_data_group bigip_device_auth: redirect: f5networks.f5_modules.bigip_device_auth bigip_device_auth_ldap: redirect: f5networks.f5_modules.bigip_device_auth_ldap bigip_device_certificate: redirect: f5networks.f5_modules.bigip_device_certificate bigip_device_connectivity: redirect: f5networks.f5_modules.bigip_device_connectivity bigip_device_dns: redirect: f5networks.f5_modules.bigip_device_dns bigip_device_group: redirect: f5networks.f5_modules.bigip_device_group bigip_device_group_member: redirect: f5networks.f5_modules.bigip_device_group_member bigip_device_ha_group: redirect: f5networks.f5_modules.bigip_device_ha_group bigip_device_httpd: redirect: f5networks.f5_modules.bigip_device_httpd bigip_device_info: redirect: f5networks.f5_modules.bigip_device_info bigip_device_license: redirect: f5networks.f5_modules.bigip_device_license bigip_device_ntp: redirect: f5networks.f5_modules.bigip_device_ntp bigip_device_sshd: redirect: f5networks.f5_modules.bigip_device_sshd bigip_device_syslog: redirect: f5networks.f5_modules.bigip_device_syslog bigip_device_traffic_group: redirect: f5networks.f5_modules.bigip_device_traffic_group bigip_device_trust: redirect: f5networks.f5_modules.bigip_device_trust bigip_dns_cache_resolver: redirect: f5networks.f5_modules.bigip_dns_cache_resolver bigip_dns_nameserver: redirect: f5networks.f5_modules.bigip_dns_nameserver bigip_dns_resolver: redirect: f5networks.f5_modules.bigip_dns_resolver bigip_dns_zone: redirect: f5networks.f5_modules.bigip_dns_zone bigip_file_copy: redirect: f5networks.f5_modules.bigip_file_copy bigip_firewall_address_list: redirect: f5networks.f5_modules.bigip_firewall_address_list bigip_firewall_dos_profile: redirect: f5networks.f5_modules.bigip_firewall_dos_profile bigip_firewall_dos_vector: redirect: f5networks.f5_modules.bigip_firewall_dos_vector bigip_firewall_global_rules: redirect: f5networks.f5_modules.bigip_firewall_global_rules bigip_firewall_log_profile: redirect: f5networks.f5_modules.bigip_firewall_log_profile bigip_firewall_log_profile_network: redirect: f5networks.f5_modules.bigip_firewall_log_profile_network bigip_firewall_policy: redirect: f5networks.f5_modules.bigip_firewall_policy bigip_firewall_port_list: redirect: f5networks.f5_modules.bigip_firewall_port_list bigip_firewall_rule: redirect: f5networks.f5_modules.bigip_firewall_rule bigip_firewall_rule_list: redirect: f5networks.f5_modules.bigip_firewall_rule_list bigip_firewall_schedule: redirect: f5networks.f5_modules.bigip_firewall_schedule bigip_gtm_datacenter: redirect: f5networks.f5_modules.bigip_gtm_datacenter bigip_gtm_global: redirect: f5networks.f5_modules.bigip_gtm_global bigip_gtm_monitor_bigip: redirect: f5networks.f5_modules.bigip_gtm_monitor_bigip bigip_gtm_monitor_external: redirect: f5networks.f5_modules.bigip_gtm_monitor_external bigip_gtm_monitor_firepass: redirect: f5networks.f5_modules.bigip_gtm_monitor_firepass bigip_gtm_monitor_http: redirect: f5networks.f5_modules.bigip_gtm_monitor_http bigip_gtm_monitor_https: redirect: f5networks.f5_modules.bigip_gtm_monitor_https bigip_gtm_monitor_tcp: redirect: f5networks.f5_modules.bigip_gtm_monitor_tcp bigip_gtm_monitor_tcp_half_open: redirect: f5networks.f5_modules.bigip_gtm_monitor_tcp_half_open bigip_gtm_pool: redirect: f5networks.f5_modules.bigip_gtm_pool bigip_gtm_pool_member: redirect: f5networks.f5_modules.bigip_gtm_pool_member bigip_gtm_server: redirect: f5networks.f5_modules.bigip_gtm_server bigip_gtm_topology_record: redirect: f5networks.f5_modules.bigip_gtm_topology_record bigip_gtm_topology_region: redirect: f5networks.f5_modules.bigip_gtm_topology_region bigip_gtm_virtual_server: redirect: f5networks.f5_modules.bigip_gtm_virtual_server bigip_gtm_wide_ip: redirect: f5networks.f5_modules.bigip_gtm_wide_ip bigip_hostname: redirect: f5networks.f5_modules.bigip_hostname bigip_iapp_service: redirect: f5networks.f5_modules.bigip_iapp_service bigip_iapp_template: redirect: f5networks.f5_modules.bigip_iapp_template bigip_ike_peer: redirect: f5networks.f5_modules.bigip_ike_peer bigip_imish_config: redirect: f5networks.f5_modules.bigip_imish_config bigip_ipsec_policy: redirect: f5networks.f5_modules.bigip_ipsec_policy bigip_irule: redirect: f5networks.f5_modules.bigip_irule bigip_log_destination: redirect: f5networks.f5_modules.bigip_log_destination bigip_log_publisher: redirect: f5networks.f5_modules.bigip_log_publisher bigip_lx_package: redirect: f5networks.f5_modules.bigip_lx_package bigip_management_route: redirect: f5networks.f5_modules.bigip_management_route bigip_message_routing_peer: redirect: f5networks.f5_modules.bigip_message_routing_peer bigip_message_routing_protocol: redirect: f5networks.f5_modules.bigip_message_routing_protocol bigip_message_routing_route: redirect: f5networks.f5_modules.bigip_message_routing_route bigip_message_routing_router: redirect: f5networks.f5_modules.bigip_message_routing_router bigip_message_routing_transport_config: redirect: f5networks.f5_modules.bigip_message_routing_transport_config bigip_monitor_dns: redirect: f5networks.f5_modules.bigip_monitor_dns bigip_monitor_external: redirect: f5networks.f5_modules.bigip_monitor_external bigip_monitor_gateway_icmp: redirect: f5networks.f5_modules.bigip_monitor_gateway_icmp bigip_monitor_http: redirect: f5networks.f5_modules.bigip_monitor_http bigip_monitor_https: redirect: f5networks.f5_modules.bigip_monitor_https bigip_monitor_ldap: redirect: f5networks.f5_modules.bigip_monitor_ldap bigip_monitor_snmp_dca: redirect: f5networks.f5_modules.bigip_monitor_snmp_dca bigip_monitor_tcp: redirect: f5networks.f5_modules.bigip_monitor_tcp bigip_monitor_tcp_echo: redirect: f5networks.f5_modules.bigip_monitor_tcp_echo bigip_monitor_tcp_half_open: redirect: f5networks.f5_modules.bigip_monitor_tcp_half_open bigip_monitor_udp: redirect: f5networks.f5_modules.bigip_monitor_udp bigip_node: redirect: f5networks.f5_modules.bigip_node bigip_partition: redirect: f5networks.f5_modules.bigip_partition bigip_password_policy: redirect: f5networks.f5_modules.bigip_password_policy bigip_policy: redirect: f5networks.f5_modules.bigip_policy bigip_policy_rule: redirect: f5networks.f5_modules.bigip_policy_rule bigip_pool: redirect: f5networks.f5_modules.bigip_pool bigip_pool_member: redirect: f5networks.f5_modules.bigip_pool_member bigip_profile_analytics: redirect: f5networks.f5_modules.bigip_profile_analytics bigip_profile_client_ssl: redirect: f5networks.f5_modules.bigip_profile_client_ssl bigip_profile_dns: redirect: f5networks.f5_modules.bigip_profile_dns bigip_profile_fastl4: redirect: f5networks.f5_modules.bigip_profile_fastl4 bigip_profile_http: redirect: f5networks.f5_modules.bigip_profile_http bigip_profile_http2: redirect: f5networks.f5_modules.bigip_profile_http2 bigip_profile_http_compression: redirect: f5networks.f5_modules.bigip_profile_http_compression bigip_profile_oneconnect: redirect: f5networks.f5_modules.bigip_profile_oneconnect bigip_profile_persistence_cookie: redirect: f5networks.f5_modules.bigip_profile_persistence_cookie bigip_profile_persistence_src_addr: redirect: f5networks.f5_modules.bigip_profile_persistence_src_addr bigip_profile_server_ssl: redirect: f5networks.f5_modules.bigip_profile_server_ssl bigip_profile_tcp: redirect: f5networks.f5_modules.bigip_profile_tcp bigip_profile_udp: redirect: f5networks.f5_modules.bigip_profile_udp bigip_provision: redirect: f5networks.f5_modules.bigip_provision bigip_qkview: redirect: f5networks.f5_modules.bigip_qkview bigip_remote_role: redirect: f5networks.f5_modules.bigip_remote_role bigip_remote_syslog: redirect: f5networks.f5_modules.bigip_remote_syslog bigip_remote_user: redirect: f5networks.f5_modules.bigip_remote_user bigip_routedomain: redirect: f5networks.f5_modules.bigip_routedomain bigip_selfip: redirect: f5networks.f5_modules.bigip_selfip bigip_service_policy: redirect: f5networks.f5_modules.bigip_service_policy bigip_smtp: redirect: f5networks.f5_modules.bigip_smtp bigip_snat_pool: redirect: f5networks.f5_modules.bigip_snat_pool bigip_snat_translation: redirect: f5networks.f5_modules.bigip_snat_translation bigip_snmp: redirect: f5networks.f5_modules.bigip_snmp bigip_snmp_community: redirect: f5networks.f5_modules.bigip_snmp_community bigip_snmp_trap: redirect: f5networks.f5_modules.bigip_snmp_trap bigip_software_image: redirect: f5networks.f5_modules.bigip_software_image bigip_software_install: redirect: f5networks.f5_modules.bigip_software_install bigip_software_update: redirect: f5networks.f5_modules.bigip_software_update bigip_ssl_certificate: redirect: f5networks.f5_modules.bigip_ssl_certificate bigip_ssl_key: redirect: f5networks.f5_modules.bigip_ssl_key bigip_ssl_ocsp: redirect: f5networks.f5_modules.bigip_ssl_ocsp bigip_static_route: redirect: f5networks.f5_modules.bigip_static_route bigip_sys_daemon_log_tmm: redirect: f5networks.f5_modules.bigip_sys_daemon_log_tmm bigip_sys_db: redirect: f5networks.f5_modules.bigip_sys_db bigip_sys_global: redirect: f5networks.f5_modules.bigip_sys_global bigip_timer_policy: redirect: f5networks.f5_modules.bigip_timer_policy bigip_traffic_selector: redirect: f5networks.f5_modules.bigip_traffic_selector bigip_trunk: redirect: f5networks.f5_modules.bigip_trunk bigip_tunnel: redirect: f5networks.f5_modules.bigip_tunnel bigip_ucs: redirect: f5networks.f5_modules.bigip_ucs bigip_ucs_fetch: redirect: f5networks.f5_modules.bigip_ucs_fetch bigip_user: redirect: f5networks.f5_modules.bigip_user bigip_vcmp_guest: redirect: f5networks.f5_modules.bigip_vcmp_guest bigip_virtual_address: redirect: f5networks.f5_modules.bigip_virtual_address bigip_virtual_server: redirect: f5networks.f5_modules.bigip_virtual_server bigip_vlan: redirect: f5networks.f5_modules.bigip_vlan bigip_wait: redirect: f5networks.f5_modules.bigip_wait bigiq_application_fasthttp: redirect: f5networks.f5_modules.bigiq_application_fasthttp bigiq_application_fastl4_tcp: redirect: f5networks.f5_modules.bigiq_application_fastl4_tcp bigiq_application_fastl4_udp: redirect: f5networks.f5_modules.bigiq_application_fastl4_udp bigiq_application_http: redirect: f5networks.f5_modules.bigiq_application_http bigiq_application_https_offload: redirect: f5networks.f5_modules.bigiq_application_https_offload bigiq_application_https_waf: redirect: f5networks.f5_modules.bigiq_application_https_waf bigiq_device_discovery: redirect: f5networks.f5_modules.bigiq_device_discovery bigiq_device_info: redirect: f5networks.f5_modules.bigiq_device_info bigiq_regkey_license: redirect: f5networks.f5_modules.bigiq_regkey_license bigiq_regkey_license_assignment: redirect: f5networks.f5_modules.bigiq_regkey_license_assignment bigiq_regkey_pool: redirect: f5networks.f5_modules.bigiq_regkey_pool bigiq_utility_license: redirect: f5networks.f5_modules.bigiq_utility_license bigiq_utility_license_assignment: redirect: f5networks.f5_modules.bigiq_utility_license_assignment os_auth: redirect: openstack.cloud.auth os_client_config: redirect: openstack.cloud.config os_coe_cluster: redirect: openstack.cloud.coe_cluster os_coe_cluster_template: redirect: openstack.cloud.coe_cluster_template os_flavor_info: redirect: openstack.cloud.compute_flavor_info os_floating_ip: redirect: openstack.cloud.floating_ip os_group: redirect: openstack.cloud.identity_group os_group_info: redirect: openstack.cloud.identity_group_info os_image: redirect: openstack.cloud.image os_image_info: redirect: openstack.cloud.image_info os_ironic: redirect: openstack.cloud.baremetal_node os_ironic_inspect: redirect: openstack.cloud.baremetal_inspect os_ironic_node: redirect: openstack.cloud.baremetal_node_action os_keypair: redirect: openstack.cloud.keypair os_keystone_domain: redirect: openstack.cloud.identity_domain os_keystone_domain_info: redirect: openstack.cloud.identity_domain_info os_keystone_endpoint: redirect: openstack.cloud.endpoint os_keystone_role: redirect: openstack.cloud.identity_role os_keystone_service: redirect: openstack.cloud.catalog_service os_listener: redirect: openstack.cloud.lb_listener os_loadbalancer: redirect: openstack.cloud.loadbalancer os_member: redirect: openstack.cloud.lb_member os_network: redirect: openstack.cloud.network os_networks_info: redirect: openstack.cloud.networks_info os_nova_flavor: redirect: openstack.cloud.compute_flavor os_nova_host_aggregate: redirect: openstack.cloud.host_aggregate os_object: redirect: openstack.cloud.object os_pool: redirect: openstack.cloud.lb_pool os_port: redirect: openstack.cloud.port os_port_info: redirect: openstack.cloud.port_info os_project: redirect: openstack.cloud.project os_project_access: redirect: openstack.cloud.project_access os_project_info: redirect: openstack.cloud.project_info os_quota: redirect: openstack.cloud.quota os_recordset: redirect: openstack.cloud.recordset os_router: redirect: openstack.cloud.router os_security_group: redirect: openstack.cloud.security_group os_security_group_rule: redirect: openstack.cloud.security_group_rule os_server: redirect: openstack.cloud.server os_server_action: redirect: openstack.cloud.server_action os_server_group: redirect: openstack.cloud.server_group os_server_info: redirect: openstack.cloud.server_info os_server_metadata: redirect: openstack.cloud.server_metadata os_server_volume: redirect: openstack.cloud.server_volume os_stack: redirect: openstack.cloud.stack os_subnet: redirect: openstack.cloud.subnet os_subnets_info: redirect: openstack.cloud.subnets_info os_user: redirect: openstack.cloud.identity_user os_user_group: redirect: openstack.cloud.group_assignment os_user_info: redirect: openstack.cloud.identity_user_info os_user_role: redirect: openstack.cloud.role_assignment os_volume: redirect: openstack.cloud.volume os_volume_snapshot: redirect: openstack.cloud.volume_snapshot os_zone: redirect: openstack.cloud.dns_zone junos_acls: redirect: junipernetworks.junos.junos_acls junos_acl_interfaces: redirect: junipernetworks.junos.junos_acl_interfaces junos_ospfv2: redirect: junipernetworks.junos.junos_ospfv2 junos_user: redirect: junipernetworks.junos.junos_user junos_l2_interface: redirect: junipernetworks.junos.junos_l2_interface junos_lldp: redirect: junipernetworks.junos.junos_lldp junos_rpc: redirect: junipernetworks.junos.junos_rpc junos_l2_interfaces: redirect: junipernetworks.junos.junos_l2_interfaces junos_lldp_interface: redirect: junipernetworks.junos.junos_lldp_interface junos_static_route: redirect: junipernetworks.junos.junos_static_route junos_lacp: redirect: junipernetworks.junos.junos_lacp junos_lacp_interfaces: redirect: junipernetworks.junos.junos_lacp_interfaces junos_vlans: redirect: junipernetworks.junos.junos_vlans junos_linkagg: redirect: junipernetworks.junos.junos_linkagg junos_scp: redirect: junipernetworks.junos.junos_scp junos_banner: redirect: junipernetworks.junos.junos_banner junos_l3_interface: redirect: junipernetworks.junos.junos_l3_interface junos_logging: redirect: junipernetworks.junos.junos_logging junos_package: redirect: junipernetworks.junos.junos_package junos_netconf: redirect: junipernetworks.junos.junos_netconf junos_facts: redirect: junipernetworks.junos.junos_facts junos_ping: redirect: junipernetworks.junos.junos_ping junos_interface: redirect: junipernetworks.junos.junos_interface junos_lldp_global: redirect: junipernetworks.junos.junos_lldp_global junos_config: redirect: junipernetworks.junos.junos_config junos_static_routes: redirect: junipernetworks.junos.junos_static_routes junos_command: redirect: junipernetworks.junos.junos_command junos_lag_interfaces: redirect: junipernetworks.junos.junos_lag_interfaces junos_l3_interfaces: redirect: junipernetworks.junos.junos_l3_interfaces junos_lldp_interfaces: redirect: junipernetworks.junos.junos_lldp_interfaces junos_vlan: redirect: junipernetworks.junos.junos_vlan junos_system: redirect: junipernetworks.junos.junos_system junos_interfaces: redirect: junipernetworks.junos.junos_interfaces junos_vrf: redirect: junipernetworks.junos.junos_vrf tower_credential: redirect: awx.awx.tower_credential tower_credential_type: redirect: awx.awx.tower_credential_type tower_group: redirect: awx.awx.tower_group tower_host: redirect: awx.awx.tower_host tower_inventory: redirect: awx.awx.tower_inventory tower_inventory_source: redirect: awx.awx.tower_inventory_source tower_job_cancel: redirect: awx.awx.tower_job_cancel tower_job_launch: redirect: awx.awx.tower_job_launch tower_job_list: redirect: awx.awx.tower_job_list tower_job_template: redirect: awx.awx.tower_job_template tower_job_wait: redirect: awx.awx.tower_job_wait tower_label: redirect: awx.awx.tower_label tower_notification: redirect: awx.awx.tower_notification tower_organization: redirect: awx.awx.tower_organization tower_project: redirect: awx.awx.tower_project tower_receive: redirect: awx.awx.tower_receive tower_role: redirect: awx.awx.tower_role tower_send: redirect: awx.awx.tower_send tower_settings: redirect: awx.awx.tower_settings tower_team: redirect: awx.awx.tower_team tower_user: redirect: awx.awx.tower_user tower_workflow_launch: redirect: awx.awx.tower_workflow_launch tower_workflow_template: redirect: awx.awx.tower_workflow_template ovirt_affinity_group: redirect: ovirt.ovirt.ovirt_affinity_group ovirt_affinity_label: redirect: ovirt.ovirt.ovirt_affinity_label ovirt_affinity_label_info: redirect: ovirt.ovirt.ovirt_affinity_label_info ovirt_api_info: redirect: ovirt.ovirt.ovirt_api_info ovirt_auth: redirect: ovirt.ovirt.ovirt_auth ovirt_cluster: redirect: ovirt.ovirt.ovirt_cluster ovirt_cluster_info: redirect: ovirt.ovirt.ovirt_cluster_info ovirt_datacenter: redirect: ovirt.ovirt.ovirt_datacenter ovirt_datacenter_info: redirect: ovirt.ovirt.ovirt_datacenter_info ovirt_disk: redirect: ovirt.ovirt.ovirt_disk ovirt_disk_info: redirect: ovirt.ovirt.ovirt_disk_info ovirt_event: redirect: ovirt.ovirt.ovirt_event ovirt_event_info: redirect: ovirt.ovirt.ovirt_event_info ovirt_external_provider: redirect: ovirt.ovirt.ovirt_external_provider ovirt_external_provider_info: redirect: ovirt.ovirt.ovirt_external_provider_info ovirt_group: redirect: ovirt.ovirt.ovirt_group ovirt_group_info: redirect: ovirt.ovirt.ovirt_group_info ovirt_host: redirect: ovirt.ovirt.ovirt_host ovirt_host_info: redirect: ovirt.ovirt.ovirt_host_info ovirt_host_network: redirect: ovirt.ovirt.ovirt_host_network ovirt_host_pm: redirect: ovirt.ovirt.ovirt_host_pm ovirt_host_storage_info: redirect: ovirt.ovirt.ovirt_host_storage_info ovirt_instance_type: redirect: ovirt.ovirt.ovirt_instance_type ovirt_job: redirect: ovirt.ovirt.ovirt_job ovirt_mac_pool: redirect: ovirt.ovirt.ovirt_mac_pool ovirt_network: redirect: ovirt.ovirt.ovirt_network ovirt_network_info: redirect: ovirt.ovirt.ovirt_network_info ovirt_nic: redirect: ovirt.ovirt.ovirt_nic ovirt_nic_info: redirect: ovirt.ovirt.ovirt_nic_info ovirt_permission: redirect: ovirt.ovirt.ovirt_permission ovirt_permission_info: redirect: ovirt.ovirt.ovirt_permission_info ovirt_quota: redirect: ovirt.ovirt.ovirt_quota ovirt_quota_info: redirect: ovirt.ovirt.ovirt_quota_info ovirt_role: redirect: ovirt.ovirt.ovirt_role ovirt_scheduling_policy_info: redirect: ovirt.ovirt.ovirt_scheduling_policy_info ovirt_snapshot: redirect: ovirt.ovirt.ovirt_snapshot ovirt_snapshot_info: redirect: ovirt.ovirt.ovirt_snapshot_info ovirt_storage_connection: redirect: ovirt.ovirt.ovirt_storage_connection ovirt_storage_domain: redirect: ovirt.ovirt.ovirt_storage_domain ovirt_storage_domain_info: redirect: ovirt.ovirt.ovirt_storage_domain_info ovirt_storage_template_info: redirect: ovirt.ovirt.ovirt_storage_template_info ovirt_storage_vm_info: redirect: ovirt.ovirt.ovirt_storage_vm_info ovirt_tag: redirect: ovirt.ovirt.ovirt_tag ovirt_tag_info: redirect: ovirt.ovirt.ovirt_tag_info ovirt_template: redirect: ovirt.ovirt.ovirt_template ovirt_template_info: redirect: ovirt.ovirt.ovirt_template_info ovirt_user: redirect: ovirt.ovirt.ovirt_user ovirt_user_info: redirect: ovirt.ovirt.ovirt_user_info ovirt_vm: redirect: ovirt.ovirt.ovirt_vm ovirt_vm_info: redirect: ovirt.ovirt.ovirt_vm_info ovirt_vmpool: redirect: ovirt.ovirt.ovirt_vmpool ovirt_vmpool_info: redirect: ovirt.ovirt.ovirt_vmpool_info ovirt_vnic_profile: redirect: ovirt.ovirt.ovirt_vnic_profile ovirt_vnic_profile_info: redirect: ovirt.ovirt.ovirt_vnic_profile_info dellos10_command: redirect: dellemc.os10.os10_command dellos10_facts: redirect: dellemc.os10.os10_facts dellos10_config: redirect: dellemc.os10.os10_config dellos9_facts: redirect: dellemc.os9.os9_facts dellos9_command: redirect: dellemc.os9.os9_command dellos9_config: redirect: dellemc.os9.os9_config dellos6_facts: redirect: dellemc.os6.os6_facts dellos6_config: redirect: dellemc.os6.os6_config dellos6_command: redirect: dellemc.os6.os6_command hcloud_location_facts: redirect: hetzner.hcloud.hcloud_location_facts hcloud_server_info: redirect: hetzner.hcloud.hcloud_server_info hcloud_server_network: redirect: hetzner.hcloud.hcloud_server_network hcloud_server_type_info: redirect: hetzner.hcloud.hcloud_server_type_info hcloud_route: redirect: hetzner.hcloud.hcloud_route hcloud_server: redirect: hetzner.hcloud.hcloud_server hcloud_volume_info: redirect: hetzner.hcloud.hcloud_volume_info hcloud_server_type_facts: redirect: hetzner.hcloud.hcloud_server_type_facts hcloud_ssh_key_info: redirect: hetzner.hcloud.hcloud_ssh_key_info hcloud_network_info: redirect: hetzner.hcloud.hcloud_network_info hcloud_datacenter_info: redirect: hetzner.hcloud.hcloud_datacenter_info hcloud_image_facts: redirect: hetzner.hcloud.hcloud_image_facts hcloud_volume_facts: redirect: hetzner.hcloud.hcloud_volume_facts hcloud_floating_ip_info: redirect: hetzner.hcloud.hcloud_floating_ip_info hcloud_floating_ip_facts: redirect: hetzner.hcloud.hcloud_floating_ip_facts hcloud_image_info: redirect: hetzner.hcloud.hcloud_image_info hcloud_ssh_key_facts: redirect: hetzner.hcloud.hcloud_ssh_key_facts hcloud_location_info: redirect: hetzner.hcloud.hcloud_location_info hcloud_network: redirect: hetzner.hcloud.hcloud_network hcloud_volume: redirect: hetzner.hcloud.hcloud_volume hcloud_ssh_key: redirect: hetzner.hcloud.hcloud_ssh_key hcloud_datacenter_facts: redirect: hetzner.hcloud.hcloud_datacenter_facts hcloud_rdns: redirect: hetzner.hcloud.hcloud_rdns hcloud_floating_ip: redirect: hetzner.hcloud.hcloud_floating_ip hcloud_server_facts: redirect: hetzner.hcloud.hcloud_server_facts hcloud_subnetwork: redirect: hetzner.hcloud.hcloud_subnetwork skydive_capture: redirect: community.skydive.skydive_capture skydive_edge: redirect: community.skydive.skydive_edge skydive_node: redirect: community.skydive.skydive_node cyberark_authentication: redirect: cyberark.pas.cyberark_authentication cyberark_user: redirect: cyberark.pas.cyberark_user gcp_appengine_firewall_rule: redirect: google.cloud.gcp_appengine_firewall_rule gcp_appengine_firewall_rule_info: redirect: google.cloud.gcp_appengine_firewall_rule_info gcp_bigquery_dataset: redirect: google.cloud.gcp_bigquery_dataset gcp_bigquery_dataset_info: redirect: google.cloud.gcp_bigquery_dataset_info gcp_bigquery_table: redirect: google.cloud.gcp_bigquery_table gcp_bigquery_table_info: redirect: google.cloud.gcp_bigquery_table_info gcp_cloudbuild_trigger: redirect: google.cloud.gcp_cloudbuild_trigger gcp_cloudbuild_trigger_info: redirect: google.cloud.gcp_cloudbuild_trigger_info gcp_cloudfunctions_cloud_function: redirect: google.cloud.gcp_cloudfunctions_cloud_function gcp_cloudfunctions_cloud_function_info: redirect: google.cloud.gcp_cloudfunctions_cloud_function_info gcp_cloudscheduler_job: redirect: google.cloud.gcp_cloudscheduler_job gcp_cloudscheduler_job_info: redirect: google.cloud.gcp_cloudscheduler_job_info gcp_cloudtasks_queue: redirect: google.cloud.gcp_cloudtasks_queue gcp_cloudtasks_queue_info: redirect: google.cloud.gcp_cloudtasks_queue_info gcp_compute_address: redirect: google.cloud.gcp_compute_address gcp_compute_address_info: redirect: google.cloud.gcp_compute_address_info gcp_compute_autoscaler: redirect: google.cloud.gcp_compute_autoscaler gcp_compute_autoscaler_info: redirect: google.cloud.gcp_compute_autoscaler_info gcp_compute_backend_bucket: redirect: google.cloud.gcp_compute_backend_bucket gcp_compute_backend_bucket_info: redirect: google.cloud.gcp_compute_backend_bucket_info gcp_compute_backend_service: redirect: google.cloud.gcp_compute_backend_service gcp_compute_backend_service_info: redirect: google.cloud.gcp_compute_backend_service_info gcp_compute_disk: redirect: google.cloud.gcp_compute_disk gcp_compute_disk_info: redirect: google.cloud.gcp_compute_disk_info gcp_compute_firewall: redirect: google.cloud.gcp_compute_firewall gcp_compute_firewall_info: redirect: google.cloud.gcp_compute_firewall_info gcp_compute_forwarding_rule: redirect: google.cloud.gcp_compute_forwarding_rule gcp_compute_forwarding_rule_info: redirect: google.cloud.gcp_compute_forwarding_rule_info gcp_compute_global_address: redirect: google.cloud.gcp_compute_global_address gcp_compute_global_address_info: redirect: google.cloud.gcp_compute_global_address_info gcp_compute_global_forwarding_rule: redirect: google.cloud.gcp_compute_global_forwarding_rule gcp_compute_global_forwarding_rule_info: redirect: google.cloud.gcp_compute_global_forwarding_rule_info gcp_compute_health_check: redirect: google.cloud.gcp_compute_health_check gcp_compute_health_check_info: redirect: google.cloud.gcp_compute_health_check_info gcp_compute_http_health_check: redirect: google.cloud.gcp_compute_http_health_check gcp_compute_http_health_check_info: redirect: google.cloud.gcp_compute_http_health_check_info gcp_compute_https_health_check: redirect: google.cloud.gcp_compute_https_health_check gcp_compute_https_health_check_info: redirect: google.cloud.gcp_compute_https_health_check_info gcp_compute_image: redirect: google.cloud.gcp_compute_image gcp_compute_image_info: redirect: google.cloud.gcp_compute_image_info gcp_compute_instance: redirect: google.cloud.gcp_compute_instance gcp_compute_instance_group: redirect: google.cloud.gcp_compute_instance_group gcp_compute_instance_group_info: redirect: google.cloud.gcp_compute_instance_group_info gcp_compute_instance_group_manager: redirect: google.cloud.gcp_compute_instance_group_manager gcp_compute_instance_group_manager_info: redirect: google.cloud.gcp_compute_instance_group_manager_info gcp_compute_instance_info: redirect: google.cloud.gcp_compute_instance_info gcp_compute_instance_template: redirect: google.cloud.gcp_compute_instance_template gcp_compute_instance_template_info: redirect: google.cloud.gcp_compute_instance_template_info gcp_compute_interconnect_attachment: redirect: google.cloud.gcp_compute_interconnect_attachment gcp_compute_interconnect_attachment_info: redirect: google.cloud.gcp_compute_interconnect_attachment_info gcp_compute_network: redirect: google.cloud.gcp_compute_network gcp_compute_network_endpoint_group: redirect: google.cloud.gcp_compute_network_endpoint_group gcp_compute_network_endpoint_group_info: redirect: google.cloud.gcp_compute_network_endpoint_group_info gcp_compute_network_info: redirect: google.cloud.gcp_compute_network_info gcp_compute_node_group: redirect: google.cloud.gcp_compute_node_group gcp_compute_node_group_info: redirect: google.cloud.gcp_compute_node_group_info gcp_compute_node_template: redirect: google.cloud.gcp_compute_node_template gcp_compute_node_template_info: redirect: google.cloud.gcp_compute_node_template_info gcp_compute_region_backend_service: redirect: google.cloud.gcp_compute_region_backend_service gcp_compute_region_backend_service_info: redirect: google.cloud.gcp_compute_region_backend_service_info gcp_compute_region_disk: redirect: google.cloud.gcp_compute_region_disk gcp_compute_region_disk_info: redirect: google.cloud.gcp_compute_region_disk_info gcp_compute_reservation: redirect: google.cloud.gcp_compute_reservation gcp_compute_reservation_info: redirect: google.cloud.gcp_compute_reservation_info gcp_compute_route: redirect: google.cloud.gcp_compute_route gcp_compute_route_info: redirect: google.cloud.gcp_compute_route_info gcp_compute_router: redirect: google.cloud.gcp_compute_router gcp_compute_router_info: redirect: google.cloud.gcp_compute_router_info gcp_compute_snapshot: redirect: google.cloud.gcp_compute_snapshot gcp_compute_snapshot_info: redirect: google.cloud.gcp_compute_snapshot_info gcp_compute_ssl_certificate: redirect: google.cloud.gcp_compute_ssl_certificate gcp_compute_ssl_certificate_info: redirect: google.cloud.gcp_compute_ssl_certificate_info gcp_compute_ssl_policy: redirect: google.cloud.gcp_compute_ssl_policy gcp_compute_ssl_policy_info: redirect: google.cloud.gcp_compute_ssl_policy_info gcp_compute_subnetwork: redirect: google.cloud.gcp_compute_subnetwork gcp_compute_subnetwork_info: redirect: google.cloud.gcp_compute_subnetwork_info gcp_compute_target_http_proxy: redirect: google.cloud.gcp_compute_target_http_proxy gcp_compute_target_http_proxy_info: redirect: google.cloud.gcp_compute_target_http_proxy_info gcp_compute_target_https_proxy: redirect: google.cloud.gcp_compute_target_https_proxy gcp_compute_target_https_proxy_info: redirect: google.cloud.gcp_compute_target_https_proxy_info gcp_compute_target_instance: redirect: google.cloud.gcp_compute_target_instance gcp_compute_target_instance_info: redirect: google.cloud.gcp_compute_target_instance_info gcp_compute_target_pool: redirect: google.cloud.gcp_compute_target_pool gcp_compute_target_pool_info: redirect: google.cloud.gcp_compute_target_pool_info gcp_compute_target_ssl_proxy: redirect: google.cloud.gcp_compute_target_ssl_proxy gcp_compute_target_ssl_proxy_info: redirect: google.cloud.gcp_compute_target_ssl_proxy_info gcp_compute_target_tcp_proxy: redirect: google.cloud.gcp_compute_target_tcp_proxy gcp_compute_target_tcp_proxy_info: redirect: google.cloud.gcp_compute_target_tcp_proxy_info gcp_compute_target_vpn_gateway: redirect: google.cloud.gcp_compute_target_vpn_gateway gcp_compute_target_vpn_gateway_info: redirect: google.cloud.gcp_compute_target_vpn_gateway_info gcp_compute_url_map: redirect: google.cloud.gcp_compute_url_map gcp_compute_url_map_info: redirect: google.cloud.gcp_compute_url_map_info gcp_compute_vpn_tunnel: redirect: google.cloud.gcp_compute_vpn_tunnel gcp_compute_vpn_tunnel_info: redirect: google.cloud.gcp_compute_vpn_tunnel_info gcp_container_cluster: redirect: google.cloud.gcp_container_cluster gcp_container_cluster_info: redirect: google.cloud.gcp_container_cluster_info gcp_container_node_pool: redirect: google.cloud.gcp_container_node_pool gcp_container_node_pool_info: redirect: google.cloud.gcp_container_node_pool_info gcp_dns_managed_zone: redirect: google.cloud.gcp_dns_managed_zone gcp_dns_managed_zone_info: redirect: google.cloud.gcp_dns_managed_zone_info gcp_dns_resource_record_set: redirect: google.cloud.gcp_dns_resource_record_set gcp_dns_resource_record_set_info: redirect: google.cloud.gcp_dns_resource_record_set_info gcp_filestore_instance: redirect: google.cloud.gcp_filestore_instance gcp_filestore_instance_info: redirect: google.cloud.gcp_filestore_instance_info gcp_iam_role: redirect: google.cloud.gcp_iam_role gcp_iam_role_info: redirect: google.cloud.gcp_iam_role_info gcp_iam_service_account: redirect: google.cloud.gcp_iam_service_account gcp_iam_service_account_info: redirect: google.cloud.gcp_iam_service_account_info gcp_iam_service_account_key: redirect: google.cloud.gcp_iam_service_account_key gcp_kms_crypto_key: redirect: google.cloud.gcp_kms_crypto_key gcp_kms_crypto_key_info: redirect: google.cloud.gcp_kms_crypto_key_info gcp_kms_key_ring: redirect: google.cloud.gcp_kms_key_ring gcp_kms_key_ring_info: redirect: google.cloud.gcp_kms_key_ring_info gcp_logging_metric: redirect: google.cloud.gcp_logging_metric gcp_logging_metric_info: redirect: google.cloud.gcp_logging_metric_info gcp_mlengine_model: redirect: google.cloud.gcp_mlengine_model gcp_mlengine_model_info: redirect: google.cloud.gcp_mlengine_model_info gcp_mlengine_version: redirect: google.cloud.gcp_mlengine_version gcp_mlengine_version_info: redirect: google.cloud.gcp_mlengine_version_info gcp_pubsub_subscription: redirect: google.cloud.gcp_pubsub_subscription gcp_pubsub_subscription_info: redirect: google.cloud.gcp_pubsub_subscription_info gcp_pubsub_topic: redirect: google.cloud.gcp_pubsub_topic gcp_pubsub_topic_info: redirect: google.cloud.gcp_pubsub_topic_info gcp_redis_instance: redirect: google.cloud.gcp_redis_instance gcp_redis_instance_info: redirect: google.cloud.gcp_redis_instance_info gcp_resourcemanager_project: redirect: google.cloud.gcp_resourcemanager_project gcp_resourcemanager_project_info: redirect: google.cloud.gcp_resourcemanager_project_info gcp_runtimeconfig_config: redirect: google.cloud.gcp_runtimeconfig_config gcp_runtimeconfig_config_info: redirect: google.cloud.gcp_runtimeconfig_config_info gcp_runtimeconfig_variable: redirect: google.cloud.gcp_runtimeconfig_variable gcp_runtimeconfig_variable_info: redirect: google.cloud.gcp_runtimeconfig_variable_info gcp_serviceusage_service: redirect: google.cloud.gcp_serviceusage_service gcp_serviceusage_service_info: redirect: google.cloud.gcp_serviceusage_service_info gcp_sourcerepo_repository: redirect: google.cloud.gcp_sourcerepo_repository gcp_sourcerepo_repository_info: redirect: google.cloud.gcp_sourcerepo_repository_info gcp_spanner_database: redirect: google.cloud.gcp_spanner_database gcp_spanner_database_info: redirect: google.cloud.gcp_spanner_database_info gcp_spanner_instance: redirect: google.cloud.gcp_spanner_instance gcp_spanner_instance_info: redirect: google.cloud.gcp_spanner_instance_info gcp_sql_database: redirect: google.cloud.gcp_sql_database gcp_sql_database_info: redirect: google.cloud.gcp_sql_database_info gcp_sql_instance: redirect: google.cloud.gcp_sql_instance gcp_sql_instance_info: redirect: google.cloud.gcp_sql_instance_info gcp_sql_user: redirect: google.cloud.gcp_sql_user gcp_sql_user_info: redirect: google.cloud.gcp_sql_user_info gcp_storage_bucket: redirect: google.cloud.gcp_storage_bucket gcp_storage_bucket_access_control: redirect: google.cloud.gcp_storage_bucket_access_control gcp_storage_object: redirect: google.cloud.gcp_storage_object gcp_tpu_node: redirect: google.cloud.gcp_tpu_node gcp_tpu_node_info: redirect: google.cloud.gcp_tpu_node_info purefa_alert: redirect: purestorage.flasharray.purefa_alert purefa_arrayname: redirect: purestorage.flasharray.purefa_arrayname purefa_banner: redirect: purestorage.flasharray.purefa_banner purefa_connect: redirect: purestorage.flasharray.purefa_connect purefa_dns: redirect: purestorage.flasharray.purefa_dns purefa_ds: redirect: purestorage.flasharray.purefa_ds purefa_dsrole: redirect: purestorage.flasharray.purefa_dsrole purefa_hg: redirect: purestorage.flasharray.purefa_hg purefa_host: redirect: purestorage.flasharray.purefa_host purefa_info: redirect: purestorage.flasharray.purefa_info purefa_ntp: redirect: purestorage.flasharray.purefa_ntp purefa_offload: redirect: purestorage.flasharray.purefa_offload purefa_pg: redirect: purestorage.flasharray.purefa_pg purefa_pgsnap: redirect: purestorage.flasharray.purefa_pgsnap purefa_phonehome: redirect: purestorage.flasharray.purefa_phonehome purefa_ra: redirect: purestorage.flasharray.purefa_ra purefa_smtp: redirect: purestorage.flasharray.purefa_smtp purefa_snap: redirect: purestorage.flasharray.purefa_snap purefa_snmp: redirect: purestorage.flasharray.purefa_snmp purefa_syslog: redirect: purestorage.flasharray.purefa_syslog purefa_user: redirect: purestorage.flasharray.purefa_user purefa_vg: redirect: purestorage.flasharray.purefa_vg purefa_volume: redirect: purestorage.flasharray.purefa_volume purefb_bucket: redirect: purestorage.flashblade.purefb_bucket purefb_ds: redirect: purestorage.flashblade.purefb_ds purefb_dsrole: redirect: purestorage.flashblade.purefb_dsrole purefb_fs: redirect: purestorage.flashblade.purefb_fs purefb_info: redirect: purestorage.flashblade.purefb_info purefb_network: redirect: purestorage.flashblade.purefb_network purefb_ra: redirect: purestorage.flashblade.purefb_ra purefb_s3acc: redirect: purestorage.flashblade.purefb_s3acc purefb_s3user: redirect: purestorage.flashblade.purefb_s3user purefb_smtp: redirect: purestorage.flashblade.purefb_smtp purefb_snap: redirect: purestorage.flashblade.purefb_snap purefb_subnet: redirect: purestorage.flashblade.purefb_subnet azure_rm_acs: redirect: azure.azcollection.azure_rm_acs azure_rm_virtualmachine_info: redirect: azure.azcollection.azure_rm_virtualmachine_info azure_rm_dnsrecordset_info: redirect: azure.azcollection.azure_rm_dnsrecordset_info azure_rm_dnszone_info: redirect: azure.azcollection.azure_rm_dnszone_info azure_rm_networkinterface_info: redirect: azure.azcollection.azure_rm_networkinterface_info azure_rm_publicipaddress_info: redirect: azure.azcollection.azure_rm_publicipaddress_info azure_rm_securitygroup_info: redirect: azure.azcollection.azure_rm_securitygroup_info azure_rm_storageaccount_info: redirect: azure.azcollection.azure_rm_storageaccount_info azure_rm_virtualnetwork_info: redirect: azure.azcollection.azure_rm_virtualnetwork_info azure_rm_deployment: redirect: azure.azcollection.azure_rm_deployment azure_rm_dnsrecordset: redirect: azure.azcollection.azure_rm_dnsrecordset azure_rm_dnszone: redirect: azure.azcollection.azure_rm_dnszone azure_rm_networkinterface: redirect: azure.azcollection.azure_rm_networkinterface azure_rm_publicipaddress: redirect: azure.azcollection.azure_rm_publicipaddress azure_rm_securitygroup: redirect: azure.azcollection.azure_rm_securitygroup azure_rm_storageaccount: redirect: azure.azcollection.azure_rm_storageaccount azure_rm_subnet: redirect: azure.azcollection.azure_rm_subnet azure_rm_virtualmachine: redirect: azure.azcollection.azure_rm_virtualmachine azure_rm_virtualnetwork: redirect: azure.azcollection.azure_rm_virtualnetwork azure_rm_aks: redirect: azure.azcollection.azure_rm_aks azure_rm_aks_info: redirect: azure.azcollection.azure_rm_aks_info azure_rm_aksversion_info: redirect: azure.azcollection.azure_rm_aksversion_info azure_rm_appgateway: redirect: azure.azcollection.azure_rm_appgateway azure_rm_applicationsecuritygroup: redirect: azure.azcollection.azure_rm_applicationsecuritygroup azure_rm_applicationsecuritygroup_info: redirect: azure.azcollection.azure_rm_applicationsecuritygroup_info azure_rm_appserviceplan: redirect: azure.azcollection.azure_rm_appserviceplan azure_rm_appserviceplan_info: redirect: azure.azcollection.azure_rm_appserviceplan_info azure_rm_availabilityset: redirect: azure.azcollection.azure_rm_availabilityset azure_rm_availabilityset_info: redirect: azure.azcollection.azure_rm_availabilityset_info azure_rm_containerinstance: redirect: azure.azcollection.azure_rm_containerinstance azure_rm_containerinstance_info: redirect: azure.azcollection.azure_rm_containerinstance_info azure_rm_containerregistry: redirect: azure.azcollection.azure_rm_containerregistry azure_rm_containerregistry_info: redirect: azure.azcollection.azure_rm_containerregistry_info azure_rm_deployment_info: redirect: azure.azcollection.azure_rm_deployment_info azure_rm_functionapp: redirect: azure.azcollection.azure_rm_functionapp azure_rm_functionapp_info: redirect: azure.azcollection.azure_rm_functionapp_info azure_rm_gallery: redirect: azure.azcollection.azure_rm_gallery azure_rm_gallery_info: redirect: azure.azcollection.azure_rm_gallery_info azure_rm_galleryimage: redirect: azure.azcollection.azure_rm_galleryimage azure_rm_galleryimage_info: redirect: azure.azcollection.azure_rm_galleryimage_info azure_rm_galleryimageversion: redirect: azure.azcollection.azure_rm_galleryimageversion azure_rm_galleryimageversion_info: redirect: azure.azcollection.azure_rm_galleryimageversion_info azure_rm_image: redirect: azure.azcollection.azure_rm_image azure_rm_image_info: redirect: azure.azcollection.azure_rm_image_info azure_rm_keyvault: redirect: azure.azcollection.azure_rm_keyvault azure_rm_keyvault_info: redirect: azure.azcollection.azure_rm_keyvault_info azure_rm_keyvaultkey: redirect: azure.azcollection.azure_rm_keyvaultkey azure_rm_keyvaultkey_info: redirect: azure.azcollection.azure_rm_keyvaultkey_info azure_rm_keyvaultsecret: redirect: azure.azcollection.azure_rm_keyvaultsecret azure_rm_manageddisk: redirect: azure.azcollection.azure_rm_manageddisk azure_rm_manageddisk_info: redirect: azure.azcollection.azure_rm_manageddisk_info azure_rm_resource: redirect: azure.azcollection.azure_rm_resource azure_rm_resource_info: redirect: azure.azcollection.azure_rm_resource_info azure_rm_resourcegroup: redirect: azure.azcollection.azure_rm_resourcegroup azure_rm_resourcegroup_info: redirect: azure.azcollection.azure_rm_resourcegroup_info azure_rm_snapshot: redirect: azure.azcollection.azure_rm_snapshot azure_rm_storageblob: redirect: azure.azcollection.azure_rm_storageblob azure_rm_subnet_info: redirect: azure.azcollection.azure_rm_subnet_info azure_rm_virtualmachineextension: redirect: azure.azcollection.azure_rm_virtualmachineextension azure_rm_virtualmachineextension_info: redirect: azure.azcollection.azure_rm_virtualmachineextension_info azure_rm_virtualmachineimage_info: redirect: azure.azcollection.azure_rm_virtualmachineimage_info azure_rm_virtualmachinescaleset: redirect: azure.azcollection.azure_rm_virtualmachinescaleset azure_rm_virtualmachinescaleset_info: redirect: azure.azcollection.azure_rm_virtualmachinescaleset_info azure_rm_virtualmachinescalesetextension: redirect: azure.azcollection.azure_rm_virtualmachinescalesetextension azure_rm_virtualmachinescalesetextension_info: redirect: azure.azcollection.azure_rm_virtualmachinescalesetextension_info azure_rm_virtualmachinescalesetinstance: redirect: azure.azcollection.azure_rm_virtualmachinescalesetinstance azure_rm_virtualmachinescalesetinstance_info: redirect: azure.azcollection.azure_rm_virtualmachinescalesetinstance_info azure_rm_webapp: redirect: azure.azcollection.azure_rm_webapp azure_rm_webapp_info: redirect: azure.azcollection.azure_rm_webapp_info azure_rm_webappslot: redirect: azure.azcollection.azure_rm_webappslot azure_rm_automationaccount: redirect: azure.azcollection.azure_rm_automationaccount azure_rm_automationaccount_info: redirect: azure.azcollection.azure_rm_automationaccount_info azure_rm_autoscale: redirect: azure.azcollection.azure_rm_autoscale azure_rm_autoscale_info: redirect: azure.azcollection.azure_rm_autoscale_info azure_rm_azurefirewall: redirect: azure.azcollection.azure_rm_azurefirewall azure_rm_azurefirewall_info: redirect: azure.azcollection.azure_rm_azurefirewall_info azure_rm_batchaccount: redirect: azure.azcollection.azure_rm_batchaccount azure_rm_cdnendpoint: redirect: azure.azcollection.azure_rm_cdnendpoint azure_rm_cdnendpoint_info: redirect: azure.azcollection.azure_rm_cdnendpoint_info azure_rm_cdnprofile: redirect: azure.azcollection.azure_rm_cdnprofile azure_rm_cdnprofile_info: redirect: azure.azcollection.azure_rm_cdnprofile_info azure_rm_iotdevice: redirect: azure.azcollection.azure_rm_iotdevice azure_rm_iotdevice_info: redirect: azure.azcollection.azure_rm_iotdevice_info azure_rm_iotdevicemodule: redirect: azure.azcollection.azure_rm_iotdevicemodule azure_rm_iothub: redirect: azure.azcollection.azure_rm_iothub azure_rm_iothub_info: redirect: azure.azcollection.azure_rm_iothub_info azure_rm_iothubconsumergroup: redirect: azure.azcollection.azure_rm_iothubconsumergroup azure_rm_loadbalancer: redirect: azure.azcollection.azure_rm_loadbalancer azure_rm_loadbalancer_info: redirect: azure.azcollection.azure_rm_loadbalancer_info azure_rm_lock: redirect: azure.azcollection.azure_rm_lock azure_rm_lock_info: redirect: azure.azcollection.azure_rm_lock_info azure_rm_loganalyticsworkspace: redirect: azure.azcollection.azure_rm_loganalyticsworkspace azure_rm_loganalyticsworkspace_info: redirect: azure.azcollection.azure_rm_loganalyticsworkspace_info azure_rm_monitorlogprofile: redirect: azure.azcollection.azure_rm_monitorlogprofile azure_rm_rediscache: redirect: azure.azcollection.azure_rm_rediscache azure_rm_rediscache_info: redirect: azure.azcollection.azure_rm_rediscache_info azure_rm_rediscachefirewallrule: redirect: azure.azcollection.azure_rm_rediscachefirewallrule azure_rm_roleassignment: redirect: azure.azcollection.azure_rm_roleassignment azure_rm_roleassignment_info: redirect: azure.azcollection.azure_rm_roleassignment_info azure_rm_roledefinition: redirect: azure.azcollection.azure_rm_roledefinition azure_rm_roledefinition_info: redirect: azure.azcollection.azure_rm_roledefinition_info azure_rm_route: redirect: azure.azcollection.azure_rm_route azure_rm_routetable: redirect: azure.azcollection.azure_rm_routetable azure_rm_routetable_info: redirect: azure.azcollection.azure_rm_routetable_info azure_rm_servicebus: redirect: azure.azcollection.azure_rm_servicebus azure_rm_servicebus_info: redirect: azure.azcollection.azure_rm_servicebus_info azure_rm_servicebusqueue: redirect: azure.azcollection.azure_rm_servicebusqueue azure_rm_servicebussaspolicy: redirect: azure.azcollection.azure_rm_servicebussaspolicy azure_rm_servicebustopic: redirect: azure.azcollection.azure_rm_servicebustopic azure_rm_servicebustopicsubscription: redirect: azure.azcollection.azure_rm_servicebustopicsubscription azure_rm_trafficmanagerendpoint: redirect: azure.azcollection.azure_rm_trafficmanagerendpoint azure_rm_trafficmanagerendpoint_info: redirect: azure.azcollection.azure_rm_trafficmanagerendpoint_info azure_rm_trafficmanagerprofile: redirect: azure.azcollection.azure_rm_trafficmanagerprofile azure_rm_trafficmanagerprofile_info: redirect: azure.azcollection.azure_rm_trafficmanagerprofile_info azure_rm_virtualnetworkgateway: redirect: azure.azcollection.azure_rm_virtualnetworkgateway azure_rm_virtualnetworkpeering: redirect: azure.azcollection.azure_rm_virtualnetworkpeering azure_rm_virtualnetworkpeering_info: redirect: azure.azcollection.azure_rm_virtualnetworkpeering_info azure_rm_cosmosdbaccount: redirect: azure.azcollection.azure_rm_cosmosdbaccount azure_rm_cosmosdbaccount_info: redirect: azure.azcollection.azure_rm_cosmosdbaccount_info azure_rm_devtestlab: redirect: azure.azcollection.azure_rm_devtestlab azure_rm_devtestlab_info: redirect: azure.azcollection.azure_rm_devtestlab_info azure_rm_devtestlabarmtemplate_info: redirect: azure.azcollection.azure_rm_devtestlabarmtemplate_info azure_rm_devtestlabartifact_info: redirect: azure.azcollection.azure_rm_devtestlabartifact_info azure_rm_devtestlabartifactsource: redirect: azure.azcollection.azure_rm_devtestlabartifactsource azure_rm_devtestlabartifactsource_info: redirect: azure.azcollection.azure_rm_devtestlabartifactsource_info azure_rm_devtestlabcustomimage: redirect: azure.azcollection.azure_rm_devtestlabcustomimage azure_rm_devtestlabcustomimage_info: redirect: azure.azcollection.azure_rm_devtestlabcustomimage_info azure_rm_devtestlabenvironment: redirect: azure.azcollection.azure_rm_devtestlabenvironment azure_rm_devtestlabenvironment_info: redirect: azure.azcollection.azure_rm_devtestlabenvironment_info azure_rm_devtestlabpolicy: redirect: azure.azcollection.azure_rm_devtestlabpolicy azure_rm_devtestlabpolicy_info: redirect: azure.azcollection.azure_rm_devtestlabpolicy_info azure_rm_devtestlabschedule: redirect: azure.azcollection.azure_rm_devtestlabschedule azure_rm_devtestlabschedule_info: redirect: azure.azcollection.azure_rm_devtestlabschedule_info azure_rm_devtestlabvirtualmachine: redirect: azure.azcollection.azure_rm_devtestlabvirtualmachine azure_rm_devtestlabvirtualmachine_info: redirect: azure.azcollection.azure_rm_devtestlabvirtualmachine_info azure_rm_devtestlabvirtualnetwork: redirect: azure.azcollection.azure_rm_devtestlabvirtualnetwork azure_rm_devtestlabvirtualnetwork_info: redirect: azure.azcollection.azure_rm_devtestlabvirtualnetwork_info azure_rm_hdinsightcluster: redirect: azure.azcollection.azure_rm_hdinsightcluster azure_rm_hdinsightcluster_info: redirect: azure.azcollection.azure_rm_hdinsightcluster_info azure_rm_mariadbconfiguration: redirect: azure.azcollection.azure_rm_mariadbconfiguration azure_rm_mariadbconfiguration_info: redirect: azure.azcollection.azure_rm_mariadbconfiguration_info azure_rm_mariadbdatabase: redirect: azure.azcollection.azure_rm_mariadbdatabase azure_rm_mariadbdatabase_info: redirect: azure.azcollection.azure_rm_mariadbdatabase_info azure_rm_mariadbfirewallrule: redirect: azure.azcollection.azure_rm_mariadbfirewallrule azure_rm_mariadbfirewallrule_info: redirect: azure.azcollection.azure_rm_mariadbfirewallrule_info azure_rm_mariadbserver: redirect: azure.azcollection.azure_rm_mariadbserver azure_rm_mariadbserver_info: redirect: azure.azcollection.azure_rm_mariadbserver_info azure_rm_mysqlconfiguration: redirect: azure.azcollection.azure_rm_mysqlconfiguration azure_rm_mysqlconfiguration_info: redirect: azure.azcollection.azure_rm_mysqlconfiguration_info azure_rm_mysqldatabase: redirect: azure.azcollection.azure_rm_mysqldatabase azure_rm_mysqldatabase_info: redirect: azure.azcollection.azure_rm_mysqldatabase_info azure_rm_mysqlfirewallrule: redirect: azure.azcollection.azure_rm_mysqlfirewallrule azure_rm_mysqlfirewallrule_info: redirect: azure.azcollection.azure_rm_mysqlfirewallrule_info azure_rm_mysqlserver: redirect: azure.azcollection.azure_rm_mysqlserver azure_rm_mysqlserver_info: redirect: azure.azcollection.azure_rm_mysqlserver_info azure_rm_postgresqlconfiguration: redirect: azure.azcollection.azure_rm_postgresqlconfiguration azure_rm_postgresqlconfiguration_info: redirect: azure.azcollection.azure_rm_postgresqlconfiguration_info azure_rm_postgresqldatabase: redirect: azure.azcollection.azure_rm_postgresqldatabase azure_rm_postgresqldatabase_info: redirect: azure.azcollection.azure_rm_postgresqldatabase_info azure_rm_postgresqlfirewallrule: redirect: azure.azcollection.azure_rm_postgresqlfirewallrule azure_rm_postgresqlfirewallrule_info: redirect: azure.azcollection.azure_rm_postgresqlfirewallrule_info azure_rm_postgresqlserver: redirect: azure.azcollection.azure_rm_postgresqlserver azure_rm_postgresqlserver_info: redirect: azure.azcollection.azure_rm_postgresqlserver_info azure_rm_sqldatabase: redirect: azure.azcollection.azure_rm_sqldatabase azure_rm_sqldatabase_info: redirect: azure.azcollection.azure_rm_sqldatabase_info azure_rm_sqlfirewallrule: redirect: azure.azcollection.azure_rm_sqlfirewallrule azure_rm_sqlfirewallrule_info: redirect: azure.azcollection.azure_rm_sqlfirewallrule_info azure_rm_sqlserver: redirect: azure.azcollection.azure_rm_sqlserver azure_rm_sqlserver_info: redirect: azure.azcollection.azure_rm_sqlserver_info openvswitch_port: redirect: openvswitch.openvswitch.openvswitch_port openvswitch_db: redirect: openvswitch.openvswitch.openvswitch_db openvswitch_bridge: redirect: openvswitch.openvswitch.openvswitch_bridge vyos_ospfv2: redirect: vyos.vyos.vyos_ospfv2 vyos_l3_interface: redirect: vyos.vyos.vyos_l3_interface vyos_banner: redirect: vyos.vyos.vyos_banner vyos_firewall_rules: redirect: vyos.vyos.vyos_firewall_rules vyos_static_route: redirect: vyos.vyos.vyos_static_route vyos_lldp_interface: redirect: vyos.vyos.vyos_lldp_interface vyos_vlan: redirect: vyos.vyos.vyos_vlan vyos_user: redirect: vyos.vyos.vyos_user vyos_firewall_interfaces: redirect: vyos.vyos.vyos_firewall_interfaces vyos_interface: redirect: vyos.vyos.vyos_interface vyos_firewall_global: redirect: vyos.vyos.vyos_firewall_global vyos_config: redirect: vyos.vyos.vyos_config vyos_facts: redirect: vyos.vyos.vyos_facts vyos_linkagg: redirect: vyos.vyos.vyos_linkagg vyos_ping: redirect: vyos.vyos.vyos_ping vyos_lag_interfaces: redirect: vyos.vyos.vyos_lag_interfaces vyos_lldp: redirect: vyos.vyos.vyos_lldp vyos_lldp_global: redirect: vyos.vyos.vyos_lldp_global vyos_l3_interfaces: redirect: vyos.vyos.vyos_l3_interfaces vyos_lldp_interfaces: redirect: vyos.vyos.vyos_lldp_interfaces vyos_interfaces: redirect: vyos.vyos.vyos_interfaces vyos_logging: redirect: vyos.vyos.vyos_logging vyos_static_routes: redirect: vyos.vyos.vyos_static_routes vyos_command: redirect: vyos.vyos.vyos_command vyos_system: redirect: vyos.vyos.vyos_system cpm_plugconfig: redirect: wti.remote.cpm_plugconfig cpm_plugcontrol: redirect: wti.remote.cpm_plugcontrol cpm_serial_port_config: redirect: wti.remote.cpm_serial_port_config cpm_serial_port_info: redirect: wti.remote.cpm_serial_port_info cpm_user: redirect: wti.remote.cpm_user module_utils: # test entries formerly_core: redirect: ansible_collections.testns.testcoll.plugins.module_utils.base sub1.sub2.formerly_core: redirect: ansible_collections.testns.testcoll.plugins.module_utils.base # real acme: redirect: community.crypto.acme alicloud_ecs: redirect: community.general.alicloud_ecs ansible_tower: redirect: awx.awx.ansible_tower aws.batch: redirect: amazon.aws.batch aws.cloudfront_facts: redirect: amazon.aws.cloudfront_facts aws.core: redirect: amazon.aws.core aws.direct_connect: redirect: amazon.aws.direct_connect aws.elb_utils: redirect: amazon.aws.elb_utils aws.elbv2: redirect: amazon.aws.elbv2 aws.iam: redirect: amazon.aws.iam aws.rds: redirect: amazon.aws.rds aws.s3: redirect: amazon.aws.s3 aws.urls: redirect: amazon.aws.urls aws.waf: redirect: amazon.aws.waf aws.waiters: redirect: amazon.aws.waiters azure_rm_common: redirect: azure.azcollection.azure_rm_common azure_rm_common_ext: redirect: azure.azcollection.azure_rm_common_ext azure_rm_common_rest: redirect: azure.azcollection.azure_rm_common_rest cloud: redirect: community.general.cloud cloudscale: redirect: cloudscale_ch.cloud.api cloudstack: redirect: ngine_io.cloudstack.cloudstack compat.ipaddress: redirect: ansible.netcommon.compat.ipaddress crypto: redirect: community.crypto.crypto database: redirect: community.general.database digital_ocean: redirect: community.digitalocean.digital_ocean dimensiondata: redirect: community.general.dimensiondata docker: redirect: community.docker.common docker.common: redirect: community.docker.common docker.swarm: redirect: community.docker.swarm ec2: redirect: amazon.aws.ec2 ecs: redirect: community.crypto.ecs ecs.api: redirect: community.crypto.ecs.api exoscale: redirect: ngine_io.exoscale.exoscale f5_utils: tombstone: removal_date: 2019-11-06 firewalld: redirect: ansible.posix.firewalld gcdns: redirect: community.google.gcdns gce: redirect: community.google.gce gcp: redirect: community.google.gcp gcp_utils: redirect: google.cloud.gcp_utils gitlab: redirect: community.general.gitlab hcloud: redirect: hetzner.hcloud.hcloud heroku: redirect: community.general.heroku hetzner: redirect: community.hrobot.robot hwc_utils: redirect: community.general.hwc_utils ibm_sa_utils: redirect: community.general.ibm_sa_utils identity: redirect: community.general.identity identity.keycloak: redirect: community.general.identity.keycloak identity.keycloak.keycloak: redirect: community.general.identity.keycloak.keycloak infinibox: redirect: infinidat.infinibox.infinibox influxdb: redirect: community.general.influxdb ipa: redirect: community.general.ipa ismount: redirect: ansible.posix.mount k8s.common: redirect: kubernetes.core.common k8s.raw: redirect: kubernetes.core.raw k8s.scale: redirect: kubernetes.core.scale known_hosts: redirect: community.general.known_hosts kubevirt: redirect: community.kubevirt.kubevirt ldap: redirect: community.general.ldap linode: redirect: community.general.linode lxd: redirect: community.general.lxd manageiq: redirect: community.general.manageiq memset: redirect: community.general.memset mysql: redirect: community.mysql.mysql net_tools.netbox.netbox_utils: redirect: netbox.netbox.netbox_utils net_tools.nios: redirect: community.general.net_tools.nios net_tools.nios.api: redirect: community.general.net_tools.nios.api netapp: redirect: netapp.ontap.netapp netapp_elementsw_module: redirect: netapp.ontap.netapp_elementsw_module netapp_module: redirect: netapp.ontap.netapp_module network.a10.a10: redirect: community.network.network.a10.a10 network.aci.aci: redirect: cisco.aci.aci network.aci.mso: redirect: cisco.mso.mso network.aireos.aireos: redirect: community.network.network.aireos.aireos network.aos.aos: redirect: community.network.network.aos.aos network.aruba.aruba: redirect: community.network.network.aruba.aruba network.asa.asa: redirect: cisco.asa.network.asa.asa network.avi.ansible_utils: redirect: community.network.network.avi.ansible_utils network.avi.avi: redirect: community.network.network.avi.avi network.avi.avi_api: redirect: community.network.network.avi.avi_api network.bigswitch.bigswitch: redirect: community.network.network.bigswitch.bigswitch network.checkpoint.checkpoint: redirect: check_point.mgmt.checkpoint network.cloudengine.ce: redirect: community.network.network.cloudengine.ce network.cnos.cnos: redirect: community.network.network.cnos.cnos network.cnos.cnos_devicerules: redirect: community.network.network.cnos.cnos_devicerules network.cnos.cnos_errorcodes: redirect: community.network.network.cnos.cnos_errorcodes network.common.cfg.base: redirect: ansible.netcommon.network.common.cfg.base network.common.config: redirect: ansible.netcommon.network.common.config network.common.facts.facts: redirect: ansible.netcommon.network.common.facts.facts network.common.netconf: redirect: ansible.netcommon.network.common.netconf network.common.network: redirect: ansible.netcommon.network.common.network network.common.parsing: redirect: ansible.netcommon.network.common.parsing network.common.utils: redirect: ansible.netcommon.network.common.utils network.dellos10.dellos10: redirect: dellemc.os10.network.os10 network.dellos9.dellos9: redirect: dellemc.os9.network.os9 network.dellos6.dellos6: redirect: dellemc.os6.network.os6 network.edgeos.edgeos: redirect: community.network.network.edgeos.edgeos network.edgeswitch.edgeswitch: redirect: community.network.network.edgeswitch.edgeswitch network.edgeswitch.edgeswitch_interface: redirect: community.network.network.edgeswitch.edgeswitch_interface network.enos.enos: redirect: community.network.network.enos.enos network.eos.argspec.facts: redirect: arista.eos.network.eos.argspec.facts network.eos.argspec.facts.facts: redirect: arista.eos.network.eos.argspec.facts.facts network.eos.argspec.interfaces: redirect: arista.eos.network.eos.argspec.interfaces network.eos.argspec.interfaces.interfaces: redirect: arista.eos.network.eos.argspec.interfaces.interfaces network.eos.argspec.l2_interfaces: redirect: arista.eos.network.eos.argspec.l2_interfaces network.eos.argspec.l2_interfaces.l2_interfaces: redirect: arista.eos.network.eos.argspec.l2_interfaces.l2_interfaces network.eos.argspec.l3_interfaces: redirect: arista.eos.network.eos.argspec.l3_interfaces network.eos.argspec.l3_interfaces.l3_interfaces: redirect: arista.eos.network.eos.argspec.l3_interfaces.l3_interfaces network.eos.argspec.lacp: redirect: arista.eos.network.eos.argspec.lacp network.eos.argspec.lacp.lacp: redirect: arista.eos.network.eos.argspec.lacp.lacp network.eos.argspec.lacp_interfaces: redirect: arista.eos.network.eos.argspec.lacp_interfaces network.eos.argspec.lacp_interfaces.lacp_interfaces: redirect: arista.eos.network.eos.argspec.lacp_interfaces.lacp_interfaces network.eos.argspec.lag_interfaces: redirect: arista.eos.network.eos.argspec.lag_interfaces network.eos.argspec.lag_interfaces.lag_interfaces: redirect: arista.eos.network.eos.argspec.lag_interfaces.lag_interfaces network.eos.argspec.lldp_global: redirect: arista.eos.network.eos.argspec.lldp_global network.eos.argspec.lldp_global.lldp_global: redirect: arista.eos.network.eos.argspec.lldp_global.lldp_global network.eos.argspec.lldp_interfaces: redirect: arista.eos.network.eos.argspec.lldp_interfaces network.eos.argspec.lldp_interfaces.lldp_interfaces: redirect: arista.eos.network.eos.argspec.lldp_interfaces.lldp_interfaces network.eos.argspec.vlans: redirect: arista.eos.network.eos.argspec.vlans network.eos.argspec.vlans.vlans: redirect: arista.eos.network.eos.argspec.vlans.vlans network.eos.config: redirect: arista.eos.network.eos.config network.eos.config.interfaces: redirect: arista.eos.network.eos.config.interfaces network.eos.config.interfaces.interfaces: redirect: arista.eos.network.eos.config.interfaces.interfaces network.eos.config.l2_interfaces: redirect: arista.eos.network.eos.config.l2_interfaces network.eos.config.l2_interfaces.l2_interfaces: redirect: arista.eos.network.eos.config.l2_interfaces.l2_interfaces network.eos.config.l3_interfaces: redirect: arista.eos.network.eos.config.l3_interfaces network.eos.config.l3_interfaces.l3_interfaces: redirect: arista.eos.network.eos.config.l3_interfaces.l3_interfaces network.eos.config.lacp: redirect: arista.eos.network.eos.config.lacp network.eos.config.lacp.lacp: redirect: arista.eos.network.eos.config.lacp.lacp network.eos.config.lacp_interfaces: redirect: arista.eos.network.eos.config.lacp_interfaces network.eos.config.lacp_interfaces.lacp_interfaces: redirect: arista.eos.network.eos.config.lacp_interfaces.lacp_interfaces network.eos.config.lag_interfaces: redirect: arista.eos.network.eos.config.lag_interfaces network.eos.config.lag_interfaces.lag_interfaces: redirect: arista.eos.network.eos.config.lag_interfaces.lag_interfaces network.eos.config.lldp_global: redirect: arista.eos.network.eos.config.lldp_global network.eos.config.lldp_global.lldp_global: redirect: arista.eos.network.eos.config.lldp_global.lldp_global network.eos.config.lldp_interfaces: redirect: arista.eos.network.eos.config.lldp_interfaces network.eos.config.lldp_interfaces.lldp_interfaces: redirect: arista.eos.network.eos.config.lldp_interfaces.lldp_interfaces network.eos.config.vlans: redirect: arista.eos.network.eos.config.vlans network.eos.config.vlans.vlans: redirect: arista.eos.network.eos.config.vlans.vlans network.eos.eos: redirect: arista.eos.network.eos.eos network.eos.facts: redirect: arista.eos.network.eos.facts network.eos.facts.facts: redirect: arista.eos.network.eos.facts.facts network.eos.facts.interfaces: redirect: arista.eos.network.eos.facts.interfaces network.eos.facts.interfaces.interfaces: redirect: arista.eos.network.eos.facts.interfaces.interfaces network.eos.facts.l2_interfaces: redirect: arista.eos.network.eos.facts.l2_interfaces network.eos.facts.l2_interfaces.l2_interfaces: redirect: arista.eos.network.eos.facts.l2_interfaces.l2_interfaces network.eos.facts.l3_interfaces: redirect: arista.eos.network.eos.facts.l3_interfaces network.eos.facts.l3_interfaces.l3_interfaces: redirect: arista.eos.network.eos.facts.l3_interfaces.l3_interfaces network.eos.facts.lacp: redirect: arista.eos.network.eos.facts.lacp network.eos.facts.lacp.lacp: redirect: arista.eos.network.eos.facts.lacp.lacp network.eos.facts.lacp_interfaces: redirect: arista.eos.network.eos.facts.lacp_interfaces network.eos.facts.lacp_interfaces.lacp_interfaces: redirect: arista.eos.network.eos.facts.lacp_interfaces.lacp_interfaces network.eos.facts.lag_interfaces: redirect: arista.eos.network.eos.facts.lag_interfaces network.eos.facts.lag_interfaces.lag_interfaces: redirect: arista.eos.network.eos.facts.lag_interfaces.lag_interfaces network.eos.facts.legacy: redirect: arista.eos.network.eos.facts.legacy network.eos.facts.legacy.base: redirect: arista.eos.network.eos.facts.legacy.base network.eos.facts.lldp_global: redirect: arista.eos.network.eos.facts.lldp_global network.eos.facts.lldp_global.lldp_global: redirect: arista.eos.network.eos.facts.lldp_global.lldp_global network.eos.facts.lldp_interfaces: redirect: arista.eos.network.eos.facts.lldp_interfaces network.eos.facts.lldp_interfaces.lldp_interfaces: redirect: arista.eos.network.eos.facts.lldp_interfaces.lldp_interfaces network.eos.facts.vlans: redirect: arista.eos.network.eos.facts.vlans network.eos.facts.vlans.vlans: redirect: arista.eos.network.eos.facts.vlans.vlans network.eos.providers: redirect: arista.eos.network.eos.providers network.eos.providers.cli: redirect: arista.eos.network.eos.providers.cli network.eos.providers.cli.config: redirect: arista.eos.network.eos.providers.cli.config network.eos.providers.cli.config.bgp: redirect: arista.eos.network.eos.providers.cli.config.bgp network.eos.providers.cli.config.bgp.address_family: redirect: arista.eos.network.eos.providers.cli.config.bgp.address_family network.eos.providers.cli.config.bgp.neighbors: redirect: arista.eos.network.eos.providers.cli.config.bgp.neighbors network.eos.providers.cli.config.bgp.process: redirect: arista.eos.network.eos.providers.cli.config.bgp.process network.eos.providers.module: redirect: arista.eos.network.eos.providers.module network.eos.providers.providers: redirect: arista.eos.network.eos.providers.providers network.eos.utils: redirect: arista.eos.network.eos.utils network.eos.utils.utils: redirect: arista.eos.network.eos.utils.utils network.eric_eccli.eric_eccli: redirect: community.network.network.eric_eccli.eric_eccli network.exos.argspec.facts.facts: redirect: community.network.network.exos.argspec.facts.facts network.exos.argspec.lldp_global: redirect: community.network.network.exos.argspec.lldp_global network.exos.argspec.lldp_global.lldp_global: redirect: community.network.network.exos.argspec.lldp_global.lldp_global network.exos.config.lldp_global: redirect: community.network.network.exos.config.lldp_global network.exos.config.lldp_global.lldp_global: redirect: community.network.network.exos.config.lldp_global.lldp_global network.exos.exos: redirect: community.network.network.exos.exos network.exos.facts.facts: redirect: community.network.network.exos.facts.facts network.exos.facts.legacy: redirect: community.network.network.exos.facts.legacy network.exos.facts.legacy.base: redirect: community.network.network.exos.facts.legacy.base network.exos.facts.lldp_global: redirect: community.network.network.exos.facts.lldp_global network.exos.facts.lldp_global.lldp_global: redirect: community.network.network.exos.facts.lldp_global.lldp_global network.exos.utils.utils: redirect: community.network.network.exos.utils.utils network.f5.bigip: redirect: f5networks.f5_modules.bigip network.f5.bigiq: redirect: f5networks.f5_modules.bigiq network.f5.common: redirect: f5networks.f5_modules.common network.f5.compare: redirect: f5networks.f5_modules.compare network.f5.icontrol: redirect: f5networks.f5_modules.icontrol network.f5.ipaddress: redirect: f5networks.f5_modules.ipaddress # FIXME: missing #network.f5.iworkflow: # redirect: f5networks.f5_modules.iworkflow #network.f5.legacy: # redirect: f5networks.f5_modules.legacy network.f5.urls: redirect: f5networks.f5_modules.urls network.fortianalyzer.common: redirect: community.fortios.fortianalyzer.common network.fortianalyzer.fortianalyzer: redirect: community.fortios.fortianalyzer.fortianalyzer network.fortimanager.common: redirect: fortinet.fortimanager.common network.fortimanager.fortimanager: redirect: fortinet.fortimanager.fortimanager network.fortios.argspec: redirect: fortinet.fortios.fortios.argspec network.fortios.argspec.facts: redirect: fortinet.fortios.fortios.argspec.facts network.fortios.argspec.facts.facts: redirect: fortinet.fortios.fortios.argspec.facts.facts network.fortios.argspec.system: redirect: fortinet.fortios.fortios.argspec.system network.fortios.argspec.system.system: redirect: fortinet.fortios.fortios.argspec.system.system network.fortios.facts: redirect: fortinet.fortios.fortios.facts network.fortios.facts.facts: redirect: fortinet.fortios.fortios.facts.facts network.fortios.facts.system: redirect: fortinet.fortios.fortios.facts.system network.fortios.facts.system.system: redirect: fortinet.fortios.fortios.facts.system.system network.fortios.fortios: redirect: fortinet.fortios.fortios.fortios network.frr: redirect: frr.frr.network.frr network.frr.frr: redirect: frr.frr.network.frr.frr network.frr.providers: redirect: frr.frr.network.frr.providers network.frr.providers.cli: redirect: frr.frr.network.frr.providers.cli network.frr.providers.cli.config: redirect: frr.frr.network.frr.providers.cli.config network.frr.providers.cli.config.base: redirect: frr.frr.network.frr.providers.cli.config.base network.frr.providers.cli.config.bgp: redirect: frr.frr.network.frr.providers.cli.config.bgp network.frr.providers.cli.config.bgp.address_family: redirect: frr.frr.network.frr.providers.cli.config.bgp.address_family network.frr.providers.cli.config.bgp.neighbors: redirect: frr.frr.network.frr.providers.cli.config.bgp.neighbors network.frr.providers.cli.config.bgp.process: redirect: frr.frr.network.frr.providers.cli.config.bgp.process network.frr.providers.module: redirect: frr.frr.network.frr.providers.module network.frr.providers.providers: redirect: frr.frr.network.frr.providers.providers network.ftd: redirect: community.network.network.ftd network.ftd.common: redirect: community.network.network.ftd.common network.ftd.configuration: redirect: community.network.network.ftd.configuration network.ftd.device: redirect: community.network.network.ftd.device network.ftd.fdm_swagger_client: redirect: community.network.network.ftd.fdm_swagger_client network.ftd.operation: redirect: community.network.network.ftd.operation network.icx: redirect: community.network.network.icx network.icx.icx: redirect: community.network.network.icx.icx network.ingate: redirect: community.network.network.ingate network.ingate.common: redirect: community.network.network.ingate.common network.ios: redirect: cisco.ios.network.ios network.ios.argspec: redirect: cisco.ios.network.ios.argspec network.ios.argspec.facts: redirect: cisco.ios.network.ios.argspec.facts network.ios.argspec.facts.facts: redirect: cisco.ios.network.ios.argspec.facts.facts network.ios.argspec.interfaces: redirect: cisco.ios.network.ios.argspec.interfaces network.ios.argspec.interfaces.interfaces: redirect: cisco.ios.network.ios.argspec.interfaces.interfaces network.ios.argspec.l2_interfaces: redirect: cisco.ios.network.ios.argspec.l2_interfaces network.ios.argspec.l2_interfaces.l2_interfaces: redirect: cisco.ios.network.ios.argspec.l2_interfaces.l2_interfaces network.ios.argspec.l3_interfaces: redirect: cisco.ios.network.ios.argspec.l3_interfaces network.ios.argspec.l3_interfaces.l3_interfaces: redirect: cisco.ios.network.ios.argspec.l3_interfaces.l3_interfaces network.ios.argspec.lacp: redirect: cisco.ios.network.ios.argspec.lacp network.ios.argspec.lacp.lacp: redirect: cisco.ios.network.ios.argspec.lacp.lacp network.ios.argspec.lacp_interfaces: redirect: cisco.ios.network.ios.argspec.lacp_interfaces network.ios.argspec.lacp_interfaces.lacp_interfaces: redirect: cisco.ios.network.ios.argspec.lacp_interfaces.lacp_interfaces network.ios.argspec.lag_interfaces: redirect: cisco.ios.network.ios.argspec.lag_interfaces network.ios.argspec.lag_interfaces.lag_interfaces: redirect: cisco.ios.network.ios.argspec.lag_interfaces.lag_interfaces network.ios.argspec.lldp_global: redirect: cisco.ios.network.ios.argspec.lldp_global network.ios.argspec.lldp_global.lldp_global: redirect: cisco.ios.network.ios.argspec.lldp_global.lldp_global network.ios.argspec.lldp_interfaces: redirect: cisco.ios.network.ios.argspec.lldp_interfaces network.ios.argspec.lldp_interfaces.lldp_interfaces: redirect: cisco.ios.network.ios.argspec.lldp_interfaces.lldp_interfaces network.ios.argspec.vlans: redirect: cisco.ios.network.ios.argspec.vlans network.ios.argspec.vlans.vlans: redirect: cisco.ios.network.ios.argspec.vlans.vlans network.ios.config: redirect: cisco.ios.network.ios.config network.ios.config.interfaces: redirect: cisco.ios.network.ios.config.interfaces network.ios.config.interfaces.interfaces: redirect: cisco.ios.network.ios.config.interfaces.interfaces network.ios.config.l2_interfaces: redirect: cisco.ios.network.ios.config.l2_interfaces network.ios.config.l2_interfaces.l2_interfaces: redirect: cisco.ios.network.ios.config.l2_interfaces.l2_interfaces network.ios.config.l3_interfaces: redirect: cisco.ios.network.ios.config.l3_interfaces network.ios.config.l3_interfaces.l3_interfaces: redirect: cisco.ios.network.ios.config.l3_interfaces.l3_interfaces network.ios.config.lacp: redirect: cisco.ios.network.ios.config.lacp network.ios.config.lacp.lacp: redirect: cisco.ios.network.ios.config.lacp.lacp network.ios.config.lacp_interfaces: redirect: cisco.ios.network.ios.config.lacp_interfaces network.ios.config.lacp_interfaces.lacp_interfaces: redirect: cisco.ios.network.ios.config.lacp_interfaces.lacp_interfaces network.ios.config.lag_interfaces: redirect: cisco.ios.network.ios.config.lag_interfaces network.ios.config.lag_interfaces.lag_interfaces: redirect: cisco.ios.network.ios.config.lag_interfaces.lag_interfaces network.ios.config.lldp_global: redirect: cisco.ios.network.ios.config.lldp_global network.ios.config.lldp_global.lldp_global: redirect: cisco.ios.network.ios.config.lldp_global.lldp_global network.ios.config.lldp_interfaces: redirect: cisco.ios.network.ios.config.lldp_interfaces network.ios.config.lldp_interfaces.lldp_interfaces: redirect: cisco.ios.network.ios.config.lldp_interfaces.lldp_interfaces network.ios.config.vlans: redirect: cisco.ios.network.ios.config.vlans network.ios.config.vlans.vlans: redirect: cisco.ios.network.ios.config.vlans.vlans network.ios.facts: redirect: cisco.ios.network.ios.facts network.ios.facts.facts: redirect: cisco.ios.network.ios.facts.facts network.ios.facts.interfaces: redirect: cisco.ios.network.ios.facts.interfaces network.ios.facts.interfaces.interfaces: redirect: cisco.ios.network.ios.facts.interfaces.interfaces network.ios.facts.l2_interfaces: redirect: cisco.ios.network.ios.facts.l2_interfaces network.ios.facts.l2_interfaces.l2_interfaces: redirect: cisco.ios.network.ios.facts.l2_interfaces.l2_interfaces network.ios.facts.l3_interfaces: redirect: cisco.ios.network.ios.facts.l3_interfaces network.ios.facts.l3_interfaces.l3_interfaces: redirect: cisco.ios.network.ios.facts.l3_interfaces.l3_interfaces network.ios.facts.lacp: redirect: cisco.ios.network.ios.facts.lacp network.ios.facts.lacp.lacp: redirect: cisco.ios.network.ios.facts.lacp.lacp network.ios.facts.lacp_interfaces: redirect: cisco.ios.network.ios.facts.lacp_interfaces network.ios.facts.lacp_interfaces.lacp_interfaces: redirect: cisco.ios.network.ios.facts.lacp_interfaces.lacp_interfaces network.ios.facts.lag_interfaces: redirect: cisco.ios.network.ios.facts.lag_interfaces network.ios.facts.lag_interfaces.lag_interfaces: redirect: cisco.ios.network.ios.facts.lag_interfaces.lag_interfaces network.ios.facts.legacy: redirect: cisco.ios.network.ios.facts.legacy network.ios.facts.legacy.base: redirect: cisco.ios.network.ios.facts.legacy.base network.ios.facts.lldp_global: redirect: cisco.ios.network.ios.facts.lldp_global network.ios.facts.lldp_global.lldp_global: redirect: cisco.ios.network.ios.facts.lldp_global.lldp_global network.ios.facts.lldp_interfaces: redirect: cisco.ios.network.ios.facts.lldp_interfaces network.ios.facts.lldp_interfaces.lldp_interfaces: redirect: cisco.ios.network.ios.facts.lldp_interfaces.lldp_interfaces network.ios.facts.vlans: redirect: cisco.ios.network.ios.facts.vlans network.ios.facts.vlans.vlans: redirect: cisco.ios.network.ios.facts.vlans.vlans network.ios.ios: redirect: cisco.ios.network.ios.ios network.ios.providers: redirect: cisco.ios.network.ios.providers network.ios.providers.cli: redirect: cisco.ios.network.ios.providers.cli network.ios.providers.cli.config: redirect: cisco.ios.network.ios.providers.cli.config network.ios.providers.cli.config.base: redirect: cisco.ios.network.ios.providers.cli.config.base network.ios.providers.cli.config.bgp: redirect: cisco.ios.network.ios.providers.cli.config.bgp network.ios.providers.cli.config.bgp.address_family: redirect: cisco.ios.network.ios.providers.cli.config.bgp.address_family network.ios.providers.cli.config.bgp.neighbors: redirect: cisco.ios.network.ios.providers.cli.config.bgp.neighbors network.ios.providers.cli.config.bgp.process: redirect: cisco.ios.network.ios.providers.cli.config.bgp.process network.ios.providers.module: redirect: cisco.ios.network.ios.providers.module network.ios.providers.providers: redirect: cisco.ios.network.ios.providers.providers network.ios.utils: redirect: cisco.ios.network.ios.utils network.ios.utils.utils: redirect: cisco.ios.network.ios.utils.utils network.iosxr: redirect: cisco.iosxr.network.iosxr network.iosxr.argspec: redirect: cisco.iosxr.network.iosxr.argspec network.iosxr.argspec.facts: redirect: cisco.iosxr.network.iosxr.argspec.facts network.iosxr.argspec.facts.facts: redirect: cisco.iosxr.network.iosxr.argspec.facts.facts network.iosxr.argspec.interfaces: redirect: cisco.iosxr.network.iosxr.argspec.interfaces network.iosxr.argspec.interfaces.interfaces: redirect: cisco.iosxr.network.iosxr.argspec.interfaces.interfaces network.iosxr.argspec.l2_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.l2_interfaces network.iosxr.argspec.l2_interfaces.l2_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.l2_interfaces.l2_interfaces network.iosxr.argspec.l3_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.l3_interfaces network.iosxr.argspec.l3_interfaces.l3_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.l3_interfaces.l3_interfaces network.iosxr.argspec.lacp: redirect: cisco.iosxr.network.iosxr.argspec.lacp network.iosxr.argspec.lacp.lacp: redirect: cisco.iosxr.network.iosxr.argspec.lacp.lacp network.iosxr.argspec.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lacp_interfaces network.iosxr.argspec.lacp_interfaces.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lacp_interfaces.lacp_interfaces network.iosxr.argspec.lag_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lag_interfaces network.iosxr.argspec.lag_interfaces.lag_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lag_interfaces.lag_interfaces network.iosxr.argspec.lldp_global: redirect: cisco.iosxr.network.iosxr.argspec.lldp_global network.iosxr.argspec.lldp_global.lldp_global: redirect: cisco.iosxr.network.iosxr.argspec.lldp_global.lldp_global network.iosxr.argspec.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lldp_interfaces network.iosxr.argspec.lldp_interfaces.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.argspec.lldp_interfaces.lldp_interfaces network.iosxr.config: redirect: cisco.iosxr.network.iosxr.config network.iosxr.config.interfaces: redirect: cisco.iosxr.network.iosxr.config.interfaces network.iosxr.config.interfaces.interfaces: redirect: cisco.iosxr.network.iosxr.config.interfaces.interfaces network.iosxr.config.l2_interfaces: redirect: cisco.iosxr.network.iosxr.config.l2_interfaces network.iosxr.config.l2_interfaces.l2_interfaces: redirect: cisco.iosxr.network.iosxr.config.l2_interfaces.l2_interfaces network.iosxr.config.l3_interfaces: redirect: cisco.iosxr.network.iosxr.config.l3_interfaces network.iosxr.config.l3_interfaces.l3_interfaces: redirect: cisco.iosxr.network.iosxr.config.l3_interfaces.l3_interfaces network.iosxr.config.lacp: redirect: cisco.iosxr.network.iosxr.config.lacp network.iosxr.config.lacp.lacp: redirect: cisco.iosxr.network.iosxr.config.lacp.lacp network.iosxr.config.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.config.lacp_interfaces network.iosxr.config.lacp_interfaces.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.config.lacp_interfaces.lacp_interfaces network.iosxr.config.lag_interfaces: redirect: cisco.iosxr.network.iosxr.config.lag_interfaces network.iosxr.config.lag_interfaces.lag_interfaces: redirect: cisco.iosxr.network.iosxr.config.lag_interfaces.lag_interfaces network.iosxr.config.lldp_global: redirect: cisco.iosxr.network.iosxr.config.lldp_global network.iosxr.config.lldp_global.lldp_global: redirect: cisco.iosxr.network.iosxr.config.lldp_global.lldp_global network.iosxr.config.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.config.lldp_interfaces network.iosxr.config.lldp_interfaces.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.config.lldp_interfaces.lldp_interfaces network.iosxr.facts: redirect: cisco.iosxr.network.iosxr.facts network.iosxr.facts.facts: redirect: cisco.iosxr.network.iosxr.facts.facts network.iosxr.facts.interfaces: redirect: cisco.iosxr.network.iosxr.facts.interfaces network.iosxr.facts.interfaces.interfaces: redirect: cisco.iosxr.network.iosxr.facts.interfaces.interfaces network.iosxr.facts.l2_interfaces: redirect: cisco.iosxr.network.iosxr.facts.l2_interfaces network.iosxr.facts.l2_interfaces.l2_interfaces: redirect: cisco.iosxr.network.iosxr.facts.l2_interfaces.l2_interfaces network.iosxr.facts.l3_interfaces: redirect: cisco.iosxr.network.iosxr.facts.l3_interfaces network.iosxr.facts.l3_interfaces.l3_interfaces: redirect: cisco.iosxr.network.iosxr.facts.l3_interfaces.l3_interfaces network.iosxr.facts.lacp: redirect: cisco.iosxr.network.iosxr.facts.lacp network.iosxr.facts.lacp.lacp: redirect: cisco.iosxr.network.iosxr.facts.lacp.lacp network.iosxr.facts.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lacp_interfaces network.iosxr.facts.lacp_interfaces.lacp_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lacp_interfaces.lacp_interfaces network.iosxr.facts.lag_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lag_interfaces network.iosxr.facts.lag_interfaces.lag_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lag_interfaces.lag_interfaces network.iosxr.facts.legacy: redirect: cisco.iosxr.network.iosxr.facts.legacy network.iosxr.facts.legacy.base: redirect: cisco.iosxr.network.iosxr.facts.legacy.base network.iosxr.facts.lldp_global: redirect: cisco.iosxr.network.iosxr.facts.lldp_global network.iosxr.facts.lldp_global.lldp_global: redirect: cisco.iosxr.network.iosxr.facts.lldp_global.lldp_global network.iosxr.facts.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lldp_interfaces network.iosxr.facts.lldp_interfaces.lldp_interfaces: redirect: cisco.iosxr.network.iosxr.facts.lldp_interfaces.lldp_interfaces network.iosxr.iosxr: redirect: cisco.iosxr.network.iosxr.iosxr network.iosxr.providers: redirect: cisco.iosxr.network.iosxr.providers network.iosxr.providers.cli: redirect: cisco.iosxr.network.iosxr.providers.cli network.iosxr.providers.cli.config: redirect: cisco.iosxr.network.iosxr.providers.cli.config network.iosxr.providers.cli.config.bgp: redirect: cisco.iosxr.network.iosxr.providers.cli.config.bgp network.iosxr.providers.cli.config.bgp.address_family: redirect: cisco.iosxr.network.iosxr.providers.cli.config.bgp.address_family network.iosxr.providers.cli.config.bgp.neighbors: redirect: cisco.iosxr.network.iosxr.providers.cli.config.bgp.neighbors network.iosxr.providers.cli.config.bgp.process: redirect: cisco.iosxr.network.iosxr.providers.cli.config.bgp.process network.iosxr.providers.module: redirect: cisco.iosxr.network.iosxr.providers.module network.iosxr.providers.providers: redirect: cisco.iosxr.network.iosxr.providers.providers network.iosxr.utils: redirect: cisco.iosxr.network.iosxr.utils network.iosxr.utils.utils: redirect: cisco.iosxr.network.iosxr.utils.utils network.ironware: redirect: community.network.network.ironware network.ironware.ironware: redirect: community.network.network.ironware.ironware network.junos: redirect: junipernetworks.junos.network.junos network.junos.argspec: redirect: junipernetworks.junos.network.junos.argspec network.junos.argspec.facts: redirect: junipernetworks.junos.network.junos.argspec.facts network.junos.argspec.facts.facts: redirect: junipernetworks.junos.network.junos.argspec.facts.facts network.junos.argspec.interfaces: redirect: junipernetworks.junos.network.junos.argspec.interfaces network.junos.argspec.interfaces.interfaces: redirect: junipernetworks.junos.network.junos.argspec.interfaces.interfaces network.junos.argspec.l2_interfaces: redirect: junipernetworks.junos.network.junos.argspec.l2_interfaces network.junos.argspec.l2_interfaces.l2_interfaces: redirect: junipernetworks.junos.network.junos.argspec.l2_interfaces.l2_interfaces network.junos.argspec.l3_interfaces: redirect: junipernetworks.junos.network.junos.argspec.l3_interfaces network.junos.argspec.l3_interfaces.l3_interfaces: redirect: junipernetworks.junos.network.junos.argspec.l3_interfaces.l3_interfaces network.junos.argspec.lacp: redirect: junipernetworks.junos.network.junos.argspec.lacp network.junos.argspec.lacp.lacp: redirect: junipernetworks.junos.network.junos.argspec.lacp.lacp network.junos.argspec.lacp_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lacp_interfaces network.junos.argspec.lacp_interfaces.lacp_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lacp_interfaces.lacp_interfaces network.junos.argspec.lag_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lag_interfaces network.junos.argspec.lag_interfaces.lag_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lag_interfaces.lag_interfaces network.junos.argspec.lldp_global: redirect: junipernetworks.junos.network.junos.argspec.lldp_global network.junos.argspec.lldp_global.lldp_global: redirect: junipernetworks.junos.network.junos.argspec.lldp_global.lldp_global network.junos.argspec.lldp_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lldp_interfaces network.junos.argspec.lldp_interfaces.lldp_interfaces: redirect: junipernetworks.junos.network.junos.argspec.lldp_interfaces.lldp_interfaces network.junos.argspec.vlans: redirect: junipernetworks.junos.network.junos.argspec.vlans network.junos.argspec.vlans.vlans: redirect: junipernetworks.junos.network.junos.argspec.vlans.vlans network.junos.config: redirect: junipernetworks.junos.network.junos.config network.junos.config.interfaces: redirect: junipernetworks.junos.network.junos.config.interfaces network.junos.config.interfaces.interfaces: redirect: junipernetworks.junos.network.junos.config.interfaces.interfaces network.junos.config.l2_interfaces: redirect: junipernetworks.junos.network.junos.config.l2_interfaces network.junos.config.l2_interfaces.l2_interfaces: redirect: junipernetworks.junos.network.junos.config.l2_interfaces.l2_interfaces network.junos.config.l3_interfaces: redirect: junipernetworks.junos.network.junos.config.l3_interfaces network.junos.config.l3_interfaces.l3_interfaces: redirect: junipernetworks.junos.network.junos.config.l3_interfaces.l3_interfaces network.junos.config.lacp: redirect: junipernetworks.junos.network.junos.config.lacp network.junos.config.lacp.lacp: redirect: junipernetworks.junos.network.junos.config.lacp.lacp network.junos.config.lacp_interfaces: redirect: junipernetworks.junos.network.junos.config.lacp_interfaces network.junos.config.lacp_interfaces.lacp_interfaces: redirect: junipernetworks.junos.network.junos.config.lacp_interfaces.lacp_interfaces network.junos.config.lag_interfaces: redirect: junipernetworks.junos.network.junos.config.lag_interfaces network.junos.config.lag_interfaces.lag_interfaces: redirect: junipernetworks.junos.network.junos.config.lag_interfaces.lag_interfaces network.junos.config.lldp_global: redirect: junipernetworks.junos.network.junos.config.lldp_global network.junos.config.lldp_global.lldp_global: redirect: junipernetworks.junos.network.junos.config.lldp_global.lldp_global network.junos.config.lldp_interfaces: redirect: junipernetworks.junos.network.junos.config.lldp_interfaces network.junos.config.lldp_interfaces.lldp_interfaces: redirect: junipernetworks.junos.network.junos.config.lldp_interfaces.lldp_interfaces network.junos.config.vlans: redirect: junipernetworks.junos.network.junos.config.vlans network.junos.config.vlans.vlans: redirect: junipernetworks.junos.network.junos.config.vlans.vlans network.junos.facts: redirect: junipernetworks.junos.network.junos.facts network.junos.facts.facts: redirect: junipernetworks.junos.network.junos.facts.facts network.junos.facts.interfaces: redirect: junipernetworks.junos.network.junos.facts.interfaces network.junos.facts.interfaces.interfaces: redirect: junipernetworks.junos.network.junos.facts.interfaces.interfaces network.junos.facts.l2_interfaces: redirect: junipernetworks.junos.network.junos.facts.l2_interfaces network.junos.facts.l2_interfaces.l2_interfaces: redirect: junipernetworks.junos.network.junos.facts.l2_interfaces.l2_interfaces network.junos.facts.l3_interfaces: redirect: junipernetworks.junos.network.junos.facts.l3_interfaces network.junos.facts.l3_interfaces.l3_interfaces: redirect: junipernetworks.junos.network.junos.facts.l3_interfaces.l3_interfaces network.junos.facts.lacp: redirect: junipernetworks.junos.network.junos.facts.lacp network.junos.facts.lacp.lacp: redirect: junipernetworks.junos.network.junos.facts.lacp.lacp network.junos.facts.lacp_interfaces: redirect: junipernetworks.junos.network.junos.facts.lacp_interfaces network.junos.facts.lacp_interfaces.lacp_interfaces: redirect: junipernetworks.junos.network.junos.facts.lacp_interfaces.lacp_interfaces network.junos.facts.lag_interfaces: redirect: junipernetworks.junos.network.junos.facts.lag_interfaces network.junos.facts.lag_interfaces.lag_interfaces: redirect: junipernetworks.junos.network.junos.facts.lag_interfaces.lag_interfaces network.junos.facts.legacy: redirect: junipernetworks.junos.network.junos.facts.legacy network.junos.facts.legacy.base: redirect: junipernetworks.junos.network.junos.facts.legacy.base network.junos.facts.lldp_global: redirect: junipernetworks.junos.network.junos.facts.lldp_global network.junos.facts.lldp_global.lldp_global: redirect: junipernetworks.junos.network.junos.facts.lldp_global.lldp_global network.junos.facts.lldp_interfaces: redirect: junipernetworks.junos.network.junos.facts.lldp_interfaces network.junos.facts.lldp_interfaces.lldp_interfaces: redirect: junipernetworks.junos.network.junos.facts.lldp_interfaces.lldp_interfaces network.junos.facts.vlans: redirect: junipernetworks.junos.network.junos.facts.vlans network.junos.facts.vlans.vlans: redirect: junipernetworks.junos.network.junos.facts.vlans.vlans network.junos.junos: redirect: junipernetworks.junos.network.junos.junos network.junos.utils: redirect: junipernetworks.junos.network.junos.utils network.junos.utils.utils: redirect: junipernetworks.junos.network.junos.utils.utils network.meraki: redirect: cisco.meraki.network.meraki network.meraki.meraki: redirect: cisco.meraki.network.meraki.meraki network.netconf: redirect: ansible.netcommon.network.netconf network.netconf.netconf: redirect: ansible.netcommon.network.netconf.netconf network.netscaler: redirect: community.network.network.netscaler network.netscaler.netscaler: redirect: community.network.network.netscaler.netscaler network.netvisor: redirect: community.network.network.netvisor network.netvisor.netvisor: redirect: community.network.network.netvisor.netvisor network.netvisor.pn_nvos: redirect: community.network.network.netvisor.pn_nvos network.nos: redirect: community.network.network.nos network.nos.nos: redirect: community.network.network.nos.nos network.nso: redirect: cisco.nso.nso network.nso.nso: redirect: cisco.nso.nso network.nxos: redirect: cisco.nxos.network.nxos network.nxos.argspec: redirect: cisco.nxos.network.nxos.argspec network.nxos.argspec.bfd_interfaces: redirect: cisco.nxos.network.nxos.argspec.bfd_interfaces network.nxos.argspec.bfd_interfaces.bfd_interfaces: redirect: cisco.nxos.network.nxos.argspec.bfd_interfaces.bfd_interfaces network.nxos.argspec.facts: redirect: cisco.nxos.network.nxos.argspec.facts network.nxos.argspec.facts.facts: redirect: cisco.nxos.network.nxos.argspec.facts.facts network.nxos.argspec.interfaces: redirect: cisco.nxos.network.nxos.argspec.interfaces network.nxos.argspec.interfaces.interfaces: redirect: cisco.nxos.network.nxos.argspec.interfaces.interfaces network.nxos.argspec.l2_interfaces: redirect: cisco.nxos.network.nxos.argspec.l2_interfaces network.nxos.argspec.l2_interfaces.l2_interfaces: redirect: cisco.nxos.network.nxos.argspec.l2_interfaces.l2_interfaces network.nxos.argspec.l3_interfaces: redirect: cisco.nxos.network.nxos.argspec.l3_interfaces network.nxos.argspec.l3_interfaces.l3_interfaces: redirect: cisco.nxos.network.nxos.argspec.l3_interfaces.l3_interfaces network.nxos.argspec.lacp: redirect: cisco.nxos.network.nxos.argspec.lacp network.nxos.argspec.lacp.lacp: redirect: cisco.nxos.network.nxos.argspec.lacp.lacp network.nxos.argspec.lacp_interfaces: redirect: cisco.nxos.network.nxos.argspec.lacp_interfaces network.nxos.argspec.lacp_interfaces.lacp_interfaces: redirect: cisco.nxos.network.nxos.argspec.lacp_interfaces.lacp_interfaces network.nxos.argspec.lag_interfaces: redirect: cisco.nxos.network.nxos.argspec.lag_interfaces network.nxos.argspec.lag_interfaces.lag_interfaces: redirect: cisco.nxos.network.nxos.argspec.lag_interfaces.lag_interfaces network.nxos.argspec.lldp_global: redirect: cisco.nxos.network.nxos.argspec.lldp_global network.nxos.argspec.lldp_global.lldp_global: redirect: cisco.nxos.network.nxos.argspec.lldp_global.lldp_global network.nxos.argspec.telemetry: redirect: cisco.nxos.network.nxos.argspec.telemetry network.nxos.argspec.telemetry.telemetry: redirect: cisco.nxos.network.nxos.argspec.telemetry.telemetry network.nxos.argspec.vlans: redirect: cisco.nxos.network.nxos.argspec.vlans network.nxos.argspec.vlans.vlans: redirect: cisco.nxos.network.nxos.argspec.vlans.vlans network.nxos.cmdref: redirect: cisco.nxos.network.nxos.cmdref network.nxos.cmdref.telemetry: redirect: cisco.nxos.network.nxos.cmdref.telemetry network.nxos.cmdref.telemetry.telemetry: redirect: cisco.nxos.network.nxos.cmdref.telemetry.telemetry network.nxos.config: redirect: cisco.nxos.network.nxos.config network.nxos.config.bfd_interfaces: redirect: cisco.nxos.network.nxos.config.bfd_interfaces network.nxos.config.bfd_interfaces.bfd_interfaces: redirect: cisco.nxos.network.nxos.config.bfd_interfaces.bfd_interfaces network.nxos.config.interfaces: redirect: cisco.nxos.network.nxos.config.interfaces network.nxos.config.interfaces.interfaces: redirect: cisco.nxos.network.nxos.config.interfaces.interfaces network.nxos.config.l2_interfaces: redirect: cisco.nxos.network.nxos.config.l2_interfaces network.nxos.config.l2_interfaces.l2_interfaces: redirect: cisco.nxos.network.nxos.config.l2_interfaces.l2_interfaces network.nxos.config.l3_interfaces: redirect: cisco.nxos.network.nxos.config.l3_interfaces network.nxos.config.l3_interfaces.l3_interfaces: redirect: cisco.nxos.network.nxos.config.l3_interfaces.l3_interfaces network.nxos.config.lacp: redirect: cisco.nxos.network.nxos.config.lacp network.nxos.config.lacp.lacp: redirect: cisco.nxos.network.nxos.config.lacp.lacp network.nxos.config.lacp_interfaces: redirect: cisco.nxos.network.nxos.config.lacp_interfaces network.nxos.config.lacp_interfaces.lacp_interfaces: redirect: cisco.nxos.network.nxos.config.lacp_interfaces.lacp_interfaces network.nxos.config.lag_interfaces: redirect: cisco.nxos.network.nxos.config.lag_interfaces network.nxos.config.lag_interfaces.lag_interfaces: redirect: cisco.nxos.network.nxos.config.lag_interfaces.lag_interfaces network.nxos.config.lldp_global: redirect: cisco.nxos.network.nxos.config.lldp_global network.nxos.config.lldp_global.lldp_global: redirect: cisco.nxos.network.nxos.config.lldp_global.lldp_global network.nxos.config.telemetry: redirect: cisco.nxos.network.nxos.config.telemetry network.nxos.config.telemetry.telemetry: redirect: cisco.nxos.network.nxos.config.telemetry.telemetry network.nxos.config.vlans: redirect: cisco.nxos.network.nxos.config.vlans network.nxos.config.vlans.vlans: redirect: cisco.nxos.network.nxos.config.vlans.vlans network.nxos.facts: redirect: cisco.nxos.network.nxos.facts network.nxos.facts.bfd_interfaces: redirect: cisco.nxos.network.nxos.facts.bfd_interfaces network.nxos.facts.bfd_interfaces.bfd_interfaces: redirect: cisco.nxos.network.nxos.facts.bfd_interfaces.bfd_interfaces network.nxos.facts.facts: redirect: cisco.nxos.network.nxos.facts.facts network.nxos.facts.interfaces: redirect: cisco.nxos.network.nxos.facts.interfaces network.nxos.facts.interfaces.interfaces: redirect: cisco.nxos.network.nxos.facts.interfaces.interfaces network.nxos.facts.l2_interfaces: redirect: cisco.nxos.network.nxos.facts.l2_interfaces network.nxos.facts.l2_interfaces.l2_interfaces: redirect: cisco.nxos.network.nxos.facts.l2_interfaces.l2_interfaces network.nxos.facts.l3_interfaces: redirect: cisco.nxos.network.nxos.facts.l3_interfaces network.nxos.facts.l3_interfaces.l3_interfaces: redirect: cisco.nxos.network.nxos.facts.l3_interfaces.l3_interfaces network.nxos.facts.lacp: redirect: cisco.nxos.network.nxos.facts.lacp network.nxos.facts.lacp.lacp: redirect: cisco.nxos.network.nxos.facts.lacp.lacp network.nxos.facts.lacp_interfaces: redirect: cisco.nxos.network.nxos.facts.lacp_interfaces network.nxos.facts.lacp_interfaces.lacp_interfaces: redirect: cisco.nxos.network.nxos.facts.lacp_interfaces.lacp_interfaces network.nxos.facts.lag_interfaces: redirect: cisco.nxos.network.nxos.facts.lag_interfaces network.nxos.facts.lag_interfaces.lag_interfaces: redirect: cisco.nxos.network.nxos.facts.lag_interfaces.lag_interfaces network.nxos.facts.legacy: redirect: cisco.nxos.network.nxos.facts.legacy network.nxos.facts.legacy.base: redirect: cisco.nxos.network.nxos.facts.legacy.base network.nxos.facts.lldp_global: redirect: cisco.nxos.network.nxos.facts.lldp_global network.nxos.facts.lldp_global.lldp_global: redirect: cisco.nxos.network.nxos.facts.lldp_global.lldp_global network.nxos.facts.telemetry: redirect: cisco.nxos.network.nxos.facts.telemetry network.nxos.facts.telemetry.telemetry: redirect: cisco.nxos.network.nxos.facts.telemetry.telemetry network.nxos.facts.vlans: redirect: cisco.nxos.network.nxos.facts.vlans network.nxos.facts.vlans.vlans: redirect: cisco.nxos.network.nxos.facts.vlans.vlans network.nxos.nxos: redirect: cisco.nxos.network.nxos.nxos network.nxos.utils: redirect: cisco.nxos.network.nxos.utils network.nxos.utils.telemetry: redirect: cisco.nxos.network.nxos.utils.telemetry network.nxos.utils.telemetry.telemetry: redirect: cisco.nxos.network.nxos.utils.telemetry.telemetry network.nxos.utils.utils: redirect: cisco.nxos.network.nxos.utils.utils network.onyx: redirect: mellanox.onyx.network.onyx network.onyx.onyx: redirect: mellanox.onyx.network.onyx.onyx network.ordnance: redirect: community.network.network.ordnance network.ordnance.ordnance: redirect: community.network.network.ordnance.ordnance network.panos: redirect: community.network.network.panos network.panos.panos: redirect: community.network.network.panos.panos network.restconf: redirect: ansible.netcommon.network.restconf network.restconf.restconf: redirect: ansible.netcommon.network.restconf.restconf network.routeros: redirect: community.routeros.routeros network.routeros.routeros: redirect: community.routeros.routeros network.skydive: redirect: community.skydive.network.skydive network.skydive.api: redirect: community.skydive.network.skydive.api network.slxos: redirect: community.network.network.slxos network.slxos.slxos: redirect: community.network.network.slxos.slxos network.sros: redirect: community.network.network.sros network.sros.sros: redirect: community.network.network.sros.sros network.voss: redirect: community.network.network.voss network.voss.voss: redirect: community.network.network.voss.voss network.vyos: redirect: vyos.vyos.network.vyos network.vyos.argspec: redirect: vyos.vyos.network.vyos.argspec network.vyos.argspec.facts: redirect: vyos.vyos.network.vyos.argspec.facts network.vyos.argspec.facts.facts: redirect: vyos.vyos.network.vyos.argspec.facts.facts network.vyos.argspec.interfaces: redirect: vyos.vyos.network.vyos.argspec.interfaces network.vyos.argspec.interfaces.interfaces: redirect: vyos.vyos.network.vyos.argspec.interfaces.interfaces network.vyos.argspec.l3_interfaces: redirect: vyos.vyos.network.vyos.argspec.l3_interfaces network.vyos.argspec.l3_interfaces.l3_interfaces: redirect: vyos.vyos.network.vyos.argspec.l3_interfaces.l3_interfaces network.vyos.argspec.lag_interfaces: redirect: vyos.vyos.network.vyos.argspec.lag_interfaces network.vyos.argspec.lag_interfaces.lag_interfaces: redirect: vyos.vyos.network.vyos.argspec.lag_interfaces.lag_interfaces network.vyos.argspec.lldp_global: redirect: vyos.vyos.network.vyos.argspec.lldp_global network.vyos.argspec.lldp_global.lldp_global: redirect: vyos.vyos.network.vyos.argspec.lldp_global.lldp_global network.vyos.argspec.lldp_interfaces: redirect: vyos.vyos.network.vyos.argspec.lldp_interfaces network.vyos.argspec.lldp_interfaces.lldp_interfaces: redirect: vyos.vyos.network.vyos.argspec.lldp_interfaces.lldp_interfaces network.vyos.config: redirect: vyos.vyos.network.vyos.config network.vyos.config.interfaces: redirect: vyos.vyos.network.vyos.config.interfaces network.vyos.config.interfaces.interfaces: redirect: vyos.vyos.network.vyos.config.interfaces.interfaces network.vyos.config.l3_interfaces: redirect: vyos.vyos.network.vyos.config.l3_interfaces network.vyos.config.l3_interfaces.l3_interfaces: redirect: vyos.vyos.network.vyos.config.l3_interfaces.l3_interfaces network.vyos.config.lag_interfaces: redirect: vyos.vyos.network.vyos.config.lag_interfaces network.vyos.config.lag_interfaces.lag_interfaces: redirect: vyos.vyos.network.vyos.config.lag_interfaces.lag_interfaces network.vyos.config.lldp_global: redirect: vyos.vyos.network.vyos.config.lldp_global network.vyos.config.lldp_global.lldp_global: redirect: vyos.vyos.network.vyos.config.lldp_global.lldp_global network.vyos.config.lldp_interfaces: redirect: vyos.vyos.network.vyos.config.lldp_interfaces network.vyos.config.lldp_interfaces.lldp_interfaces: redirect: vyos.vyos.network.vyos.config.lldp_interfaces.lldp_interfaces network.vyos.facts: redirect: vyos.vyos.network.vyos.facts network.vyos.facts.facts: redirect: vyos.vyos.network.vyos.facts.facts network.vyos.facts.interfaces: redirect: vyos.vyos.network.vyos.facts.interfaces network.vyos.facts.interfaces.interfaces: redirect: vyos.vyos.network.vyos.facts.interfaces.interfaces network.vyos.facts.l3_interfaces: redirect: vyos.vyos.network.vyos.facts.l3_interfaces network.vyos.facts.l3_interfaces.l3_interfaces: redirect: vyos.vyos.network.vyos.facts.l3_interfaces.l3_interfaces network.vyos.facts.lag_interfaces: redirect: vyos.vyos.network.vyos.facts.lag_interfaces network.vyos.facts.lag_interfaces.lag_interfaces: redirect: vyos.vyos.network.vyos.facts.lag_interfaces.lag_interfaces network.vyos.facts.legacy: redirect: vyos.vyos.network.vyos.facts.legacy network.vyos.facts.legacy.base: redirect: vyos.vyos.network.vyos.facts.legacy.base network.vyos.facts.lldp_global: redirect: vyos.vyos.network.vyos.facts.lldp_global network.vyos.facts.lldp_global.lldp_global: redirect: vyos.vyos.network.vyos.facts.lldp_global.lldp_global network.vyos.facts.lldp_interfaces: redirect: vyos.vyos.network.vyos.facts.lldp_interfaces network.vyos.facts.lldp_interfaces.lldp_interfaces: redirect: vyos.vyos.network.vyos.facts.lldp_interfaces.lldp_interfaces network.vyos.utils: redirect: vyos.vyos.network.vyos.utils network.vyos.utils.utils: redirect: vyos.vyos.network.vyos.utils.utils network.vyos.vyos: redirect: vyos.vyos.network.vyos.vyos oneandone: redirect: community.general.oneandone oneview: redirect: community.general.oneview online: redirect: community.general.online opennebula: redirect: community.general.opennebula openstack: redirect: openstack.cloud.openstack oracle: redirect: community.general.oracle oracle.oci_utils: redirect: community.general.oracle.oci_utils ovirt: redirect: community.general._ovirt podman: redirect: containers.podman.podman podman.common: redirect: containers.podman.podman.common postgres: redirect: community.postgresql.postgres pure: redirect: community.general.pure rabbitmq: redirect: community.rabbitmq.rabbitmq rax: redirect: community.general.rax redfish_utils: redirect: community.general.redfish_utils redhat: redirect: community.general.redhat remote_management.dellemc: redirect: dellemc.openmanage remote_management.dellemc.dellemc_idrac: redirect: dellemc.openmanage.dellemc_idrac remote_management.dellemc.ome: redirect: dellemc.openmanage.ome remote_management.intersight: redirect: cisco.intersight.intersight remote_management.lxca: redirect: community.general.remote_management.lxca remote_management.lxca.common: redirect: community.general.remote_management.lxca.common remote_management.ucs: redirect: cisco.ucs.ucs scaleway: redirect: community.general.scaleway service_now: redirect: servicenow.servicenow.service_now source_control: redirect: community.general.source_control source_control.bitbucket: redirect: community.general.source_control.bitbucket storage: redirect: community.general.storage storage.emc: redirect: community.general.storage.emc storage.emc.emc_vnx: redirect: community.general.storage.emc.emc_vnx storage.hpe3par: redirect: community.general.storage.hpe3par storage.hpe3par.hpe3par: redirect: community.general.storage.hpe3par.hpe3par univention_umc: redirect: community.general.univention_umc utm_utils: redirect: community.general.utm_utils vca: redirect: community.vmware.vca vexata: redirect: community.general.vexata vmware: redirect: community.vmware.vmware vmware_rest_client: redirect: community.vmware.vmware_rest_client vmware_spbm: redirect: community.vmware.vmware_spbm vultr: redirect: ngine_io.vultr.vultr xenserver: redirect: community.general.xenserver # end module_utils cliconf: frr: redirect: frr.frr.frr aireos: redirect: community.network.aireos apconos: redirect: community.network.apconos aruba: redirect: community.network.aruba ce: redirect: community.network.ce cnos: redirect: community.network.cnos edgeos: redirect: community.network.edgeos edgeswitch: redirect: community.network.edgeswitch enos: redirect: community.network.enos eric_eccli: redirect: community.network.eric_eccli exos: redirect: community.network.exos icx: redirect: community.network.icx ironware: redirect: community.network.ironware netvisor: redirect: community.network.netvisor nos: redirect: community.network.nos onyx: redirect: mellanox.onyx.onyx routeros: redirect: community.routeros.routeros slxos: redirect: community.network.slxos voss: redirect: community.network.voss eos: redirect: arista.eos.eos asa: redirect: cisco.asa.asa ios: redirect: cisco.ios.ios iosxr: redirect: cisco.iosxr.iosxr nxos: redirect: cisco.nxos.nxos junos: redirect: junipernetworks.junos.junos dellos10: redirect: dellemc.os10.os10 dellos9: redirect: dellemc.os9.os9 dellos6: redirect: dellemc.os6.os6 vyos: redirect: vyos.vyos.vyos terminal: frr: redirect: frr.frr.frr aireos: redirect: community.network.aireos apconos: redirect: community.network.apconos aruba: redirect: community.network.aruba ce: redirect: community.network.ce cnos: redirect: community.network.cnos edgeos: redirect: community.network.edgeos edgeswitch: redirect: community.network.edgeswitch enos: redirect: community.network.enos eric_eccli: redirect: community.network.eric_eccli exos: redirect: community.network.exos icx: redirect: community.network.icx ironware: redirect: community.network.ironware netvisor: redirect: community.network.netvisor nos: redirect: community.network.nos onyx: redirect: mellanox.onyx.onyx routeros: redirect: community.routeros.routeros slxos: redirect: community.network.slxos sros: redirect: community.network.sros voss: redirect: community.network.voss eos: redirect: arista.eos.eos asa: redirect: cisco.asa.asa ios: redirect: cisco.ios.ios iosxr: redirect: cisco.iosxr.iosxr nxos: redirect: cisco.nxos.nxos bigip: redirect: f5networks.f5_modules.bigip junos: redirect: junipernetworks.junos.junos dellos10: redirect: dellemc.os10.os10 dellos9: redirect: dellemc.os9.os9 dellos6: redirect: dellemc.os6.os6 vyos: redirect: vyos.vyos.vyos action: # test entry, overloaded with module of same name to use a different base action (ie not "normal.py") uses_redirected_action: redirect: testns.testcoll.subclassed_norm aireos: redirect: community.network.aireos aruba: redirect: community.network.aruba ce: redirect: community.network.ce ce_template: redirect: community.network.ce_template cnos: redirect: community.network.cnos edgeos_config: redirect: community.network.edgeos_config enos: redirect: community.network.enos exos: redirect: community.network.exos ironware: redirect: community.network.ironware nos_config: redirect: community.network.nos_config onyx_config: redirect: mellanox.onyx.onyx_config slxos: redirect: community.network.slxos sros: redirect: community.network.sros voss: redirect: community.network.voss aws_s3: redirect: amazon.aws.aws_s3 cli_command: redirect: ansible.netcommon.cli_command cli_config: redirect: ansible.netcommon.cli_config net_base: redirect: ansible.netcommon.net_base net_user: redirect: ansible.netcommon.net_user net_vlan: redirect: ansible.netcommon.net_vlan net_static_route: redirect: ansible.netcommon.net_static_route net_lldp: redirect: ansible.netcommon.net_lldp net_vrf: redirect: ansible.netcommon.net_vrf net_ping: redirect: ansible.netcommon.net_ping net_l3_interface: redirect: ansible.netcommon.net_l3_interface net_l2_interface: redirect: ansible.netcommon.net_l2_interface net_interface: redirect: ansible.netcommon.net_interface net_system: redirect: ansible.netcommon.net_system net_lldp_interface: redirect: ansible.netcommon.net_lldp_interface net_put: redirect: ansible.netcommon.net_put net_get: redirect: ansible.netcommon.net_get net_logging: redirect: ansible.netcommon.net_logging net_banner: redirect: ansible.netcommon.net_banner net_linkagg: redirect: ansible.netcommon.net_linkagg netconf: redirect: ansible.netcommon.netconf network: redirect: ansible.netcommon.network telnet: redirect: ansible.netcommon.telnet patch: redirect: ansible.posix.patch synchronize: redirect: ansible.posix.synchronize win_copy: redirect: ansible.windows.win_copy win_reboot: redirect: ansible.windows.win_reboot win_template: redirect: ansible.windows.win_template win_updates: redirect: ansible.windows.win_updates fortios_config: redirect: fortinet.fortios.fortios_config eos: redirect: arista.eos.eos asa: redirect: cisco.asa.asa ios: redirect: cisco.ios.ios iosxr: redirect: cisco.iosxr.iosxr nxos: redirect: cisco.nxos.nxos nxos_file_copy: redirect: cisco.nxos.nxos_file_copy bigip: redirect: f5networks.f5_modules.bigip bigiq: redirect: f5networks.f5_modules.bigiq junos: redirect: junipernetworks.junos.junos dellos10: redirect: dellemc.os10.os10 dellos9: redirect: dellemc.os9.os9 dellos6: redirect: dellemc.os6.os6 vyos: redirect: vyos.vyos.vyos become: doas: redirect: community.general.doas dzdo: redirect: community.general.dzdo ksu: redirect: community.general.ksu machinectl: redirect: community.general.machinectl pbrun: redirect: community.general.pbrun pfexec: redirect: community.general.pfexec pmrun: redirect: community.general.pmrun sesu: redirect: community.general.sesu enable: redirect: ansible.netcommon.enable cache: memcached: redirect: community.general.memcached pickle: redirect: community.general.pickle redis: redirect: community.general.redis yaml: redirect: community.general.yaml mongodb: redirect: community.mongodb.mongodb callback: actionable: redirect: community.general.actionable cgroup_memory_recap: redirect: community.general.cgroup_memory_recap context_demo: redirect: community.general.context_demo counter_enabled: redirect: community.general.counter_enabled dense: redirect: community.general.dense full_skip: redirect: community.general.full_skip hipchat: redirect: community.general.hipchat jabber: redirect: community.general.jabber log_plays: redirect: community.general.log_plays logdna: redirect: community.general.logdna logentries: redirect: community.general.logentries logstash: redirect: community.general.logstash mail: redirect: community.general.mail nrdp: redirect: community.general.nrdp 'null': redirect: community.general.null osx_say: redirect: community.general.osx_say say: redirect: community.general.say selective: redirect: community.general.selective slack: redirect: community.general.slack splunk: redirect: community.general.splunk stderr: redirect: community.general.stderr sumologic: redirect: community.general.sumologic syslog_json: redirect: community.general.syslog_json unixy: redirect: community.general.unixy yaml: redirect: community.general.yaml grafana_annotations: redirect: community.grafana.grafana_annotations aws_resource_actions: redirect: amazon.aws.aws_resource_actions cgroup_perf_recap: redirect: ansible.posix.cgroup_perf_recap debug: redirect: ansible.posix.debug json: redirect: ansible.posix.json profile_roles: redirect: ansible.posix.profile_roles profile_tasks: redirect: ansible.posix.profile_tasks skippy: redirect: ansible.posix.skippy timer: redirect: ansible.posix.timer foreman: redirect: theforeman.foreman.foreman # 'collections' integration test entries, do not remove formerly_core_callback: redirect: testns.testcoll.usercallback formerly_core_removed_callback: redirect: testns.testcoll.removedcallback formerly_core_missing_callback: redirect: bogusns.boguscoll.boguscallback doc_fragments: a10: redirect: community.network.a10 aireos: redirect: community.network.aireos alicloud: redirect: community.general.alicloud aruba: redirect: community.network.aruba auth_basic: redirect: community.general.auth_basic avi: redirect: community.network.avi ce: redirect: community.network.ce cloudscale: redirect: cloudscale_ch.cloud.api_parameters cloudstack: redirect: ngine_io.cloudstack.cloudstack cnos: redirect: community.network.cnos digital_ocean: redirect: community.digitalocean.digital_ocean dimensiondata: redirect: community.general.dimensiondata dimensiondata_wait: redirect: community.general.dimensiondata_wait docker: redirect: community.docker.docker emc: redirect: community.general.emc enos: redirect: community.network.enos exoscale: redirect: ngine_io.exoscale.exoscale gcp: redirect: google.cloud.gcp hetzner: redirect: community.hrobot.robot hpe3par: redirect: community.general.hpe3par hwc: redirect: community.general.hwc ibm_storage: redirect: community.general.ibm_storage infinibox: redirect: infinidat.infinibox.infinibox influxdb: redirect: community.general.influxdb ingate: redirect: community.network.ingate ipa: redirect: community.general.ipa ironware: redirect: community.network.ironware keycloak: redirect: community.general.keycloak kubevirt_common_options: redirect: community.kubevirt.kubevirt_common_options kubevirt_vm_options: redirect: community.kubevirt.kubevirt_vm_options ldap: redirect: community.general.ldap lxca_common: redirect: community.general.lxca_common manageiq: redirect: community.general.manageiq mysql: redirect: community.mysql.mysql netscaler: redirect: community.network.netscaler nios: redirect: community.general.nios nso: redirect: cisco.nso.nso oneview: redirect: community.general.oneview online: redirect: community.general.online onyx: redirect: mellanox.onyx.onyx opennebula: redirect: community.general.opennebula openswitch: redirect: community.general.openswitch oracle: redirect: community.general.oracle oracle_creatable_resource: redirect: community.general.oracle_creatable_resource oracle_display_name_option: redirect: community.general.oracle_display_name_option oracle_name_option: redirect: community.general.oracle_name_option oracle_tags: redirect: community.general.oracle_tags oracle_wait_options: redirect: community.general.oracle_wait_options ovirt_facts: redirect: community.general.ovirt_facts panos: redirect: community.network.panos postgres: redirect: community.postgresql.postgres proxysql: redirect: community.proxysql.proxysql purestorage: redirect: community.general.purestorage rabbitmq: redirect: community.rabbitmq.rabbitmq rackspace: redirect: community.general.rackspace scaleway: redirect: community.general.scaleway sros: redirect: community.network.sros utm: redirect: community.general.utm vexata: redirect: community.general.vexata vultr: redirect: ngine_io.vultr.vultr xenserver: redirect: community.general.xenserver zabbix: redirect: community.zabbix.zabbix k8s_auth_options: redirect: kubernetes.core.k8s_auth_options k8s_name_options: redirect: kubernetes.core.k8s_name_options k8s_resource_options: redirect: kubernetes.core.k8s_resource_options k8s_scale_options: redirect: kubernetes.core.k8s_scale_options k8s_state_options: redirect: kubernetes.core.k8s_state_options acme: redirect: community.crypto.acme ecs_credential: redirect: community.crypto.ecs_credential VmwareRestModule: redirect: vmware.vmware_rest.VmwareRestModule VmwareRestModule_filters: redirect: vmware.vmware_rest.VmwareRestModule_filters VmwareRestModule_full: redirect: vmware.vmware_rest.VmwareRestModule_full VmwareRestModule_state: redirect: vmware.vmware_rest.VmwareRestModule_state vca: redirect: community.vmware.vca vmware: redirect: community.vmware.vmware vmware_rest_client: redirect: community.vmware.vmware_rest_client service_now: redirect: servicenow.servicenow.service_now aws: redirect: amazon.aws.aws aws_credentials: redirect: amazon.aws.aws_credentials aws_region: redirect: amazon.aws.aws_region ec2: redirect: amazon.aws.ec2 netconf: redirect: ansible.netcommon.netconf network_agnostic: redirect: ansible.netcommon.network_agnostic fortios: redirect: fortinet.fortios.fortios netapp: redirect: netapp.ontap.netapp checkpoint_commands: redirect: check_point.mgmt.checkpoint_commands checkpoint_facts: redirect: check_point.mgmt.checkpoint_facts checkpoint_objects: redirect: check_point.mgmt.checkpoint_objects eos: redirect: arista.eos.eos aci: redirect: cisco.aci.aci asa: redirect: cisco.asa.asa intersight: redirect: cisco.intersight.intersight ios: redirect: cisco.ios.ios iosxr: redirect: cisco.iosxr.iosxr meraki: redirect: cisco.meraki.meraki mso: redirect: cisco.mso.modules nxos: redirect: cisco.nxos.nxos ucs: redirect: cisco.ucs.ucs f5: redirect: f5networks.f5_modules.f5 openstack: redirect: openstack.cloud.openstack junos: redirect: junipernetworks.junos.junos tower: redirect: awx.awx.auth ovirt: redirect: ovirt.ovirt.ovirt ovirt_info: redirect: ovirt.ovirt.ovirt_info dellos10: redirect: dellemc.os10.os10 dellos9: redirect: dellemc.os9.os9 dellos6: redirect: dellemc.os6.os6 hcloud: redirect: hetzner.hcloud.hcloud skydive: redirect: community.skydive.skydive azure: redirect: azure.azcollection.azure azure_tags: redirect: azure.azcollection.azure_tags vyos: redirect: vyos.vyos.vyos filter: # test entries formerly_core_filter: redirect: ansible.builtin.bool formerly_core_masked_filter: redirect: ansible.builtin.bool gcp_kms_encrypt: redirect: google.cloud.gcp_kms_encrypt gcp_kms_decrypt: redirect: google.cloud.gcp_kms_decrypt json_query: redirect: community.general.json_query random_mac: redirect: community.general.random_mac k8s_config_resource_name: redirect: kubernetes.core.k8s_config_resource_name cidr_merge: redirect: ansible.netcommon.cidr_merge ipaddr: redirect: ansible.netcommon.ipaddr ipmath: redirect: ansible.netcommon.ipmath ipwrap: redirect: ansible.netcommon.ipwrap ip4_hex: redirect: ansible.netcommon.ip4_hex ipv4: redirect: ansible.netcommon.ipv4 ipv6: redirect: ansible.netcommon.ipv6 ipsubnet: redirect: ansible.netcommon.ipsubnet next_nth_usable: redirect: ansible.netcommon.next_nth_usable network_in_network: redirect: ansible.netcommon.network_in_network network_in_usable: redirect: ansible.netcommon.network_in_usable reduce_on_network: redirect: ansible.netcommon.reduce_on_network nthhost: redirect: ansible.netcommon.nthhost previous_nth_usable: redirect: ansible.netcommon.previous_nth_usable slaac: redirect: ansible.netcommon.slaac hwaddr: redirect: ansible.netcommon.hwaddr parse_cli: redirect: ansible.netcommon.parse_cli parse_cli_textfsm: redirect: ansible.netcommon.parse_cli_textfsm parse_xml: redirect: ansible.netcommon.parse_xml type5_pw: redirect: ansible.netcommon.type5_pw hash_salt: redirect: ansible.netcommon.hash_salt comp_type5: redirect: ansible.netcommon.comp_type5 vlan_parser: redirect: ansible.netcommon.vlan_parser httpapi: exos: redirect: community.network.exos fortianalyzer: redirect: community.fortios.fortianalyzer fortimanager: redirect: fortinet.fortimanager.fortimanager ftd: redirect: community.network.ftd vmware: redirect: community.vmware.vmware restconf: redirect: ansible.netcommon.restconf fortios: redirect: fortinet.fortios.fortios checkpoint: redirect: check_point.mgmt.checkpoint eos: redirect: arista.eos.eos nxos: redirect: cisco.nxos.nxos splunk: redirect: splunk.es.splunk qradar: redirect: ibm.qradar.qradar inventory: # test entry formerly_core_inventory: redirect: testns.content_adj.statichost cloudscale: redirect: cloudscale_ch.cloud.inventory docker_machine: redirect: community.docker.docker_machine docker_swarm: redirect: community.docker.docker_swarm gitlab_runners: redirect: community.general.gitlab_runners kubevirt: redirect: community.kubevirt.kubevirt linode: redirect: community.general.linode nmap: redirect: community.general.nmap online: redirect: community.general.online scaleway: redirect: community.general.scaleway virtualbox: redirect: community.general.virtualbox vultr: redirect: ngine_io.vultr.vultr k8s: redirect: kubernetes.core.k8s openshift: redirect: kubernetes.core.openshift vmware_vm_inventory: redirect: community.vmware.vmware_vm_inventory aws_ec2: redirect: amazon.aws.aws_ec2 aws_rds: redirect: amazon.aws.aws_rds foreman: redirect: theforeman.foreman.foreman netbox: redirect: netbox.netbox.nb_inventory openstack: redirect: openstack.cloud.openstack tower: redirect: awx.awx.tower hcloud: redirect: hetzner.hcloud.hcloud gcp_compute: redirect: google.cloud.gcp_compute azure_rm: redirect: azure.azcollection.azure_rm lookup: # test entry formerly_core_lookup: redirect: testns.testcoll.mylookup avi: redirect: community.network.avi cartesian: redirect: community.general.cartesian chef_databag: redirect: community.general.chef_databag conjur_variable: redirect: cyberark.conjur.conjur_variable consul_kv: redirect: community.general.consul_kv credstash: redirect: community.general.credstash cyberarkpassword: redirect: community.general.cyberarkpassword dig: redirect: community.general.dig dnstxt: redirect: community.general.dnstxt etcd: redirect: community.general.etcd filetree: redirect: community.general.filetree flattened: redirect: community.general.flattened gcp_storage_file: redirect: community.google.gcp_storage_file hashi_vault: redirect: community.hashi_vault.hashi_vault hiera: redirect: community.general.hiera keyring: redirect: community.general.keyring lastpass: redirect: community.general.lastpass lmdb_kv: redirect: community.general.lmdb_kv manifold: redirect: community.general.manifold nios: redirect: community.general.nios nios_next_ip: redirect: community.general.nios_next_ip nios_next_network: redirect: community.general.nios_next_network onepassword: redirect: community.general.onepassword onepassword_raw: redirect: community.general.onepassword_raw passwordstore: redirect: community.general.passwordstore rabbitmq: redirect: community.rabbitmq.rabbitmq redis: redirect: community.general.redis shelvefile: redirect: community.general.shelvefile grafana_dashboard: redirect: community.grafana.grafana_dashboard openshift: redirect: kubernetes.core.openshift k8s: redirect: kubernetes.core.k8s mongodb: redirect: community.mongodb.mongodb laps_password: redirect: community.windows.laps_password aws_account_attribute: redirect: amazon.aws.aws_account_attribute aws_secret: redirect: amazon.aws.aws_secret aws_service_ip_ranges: redirect: amazon.aws.aws_service_ip_ranges aws_ssm: redirect: amazon.aws.aws_ssm skydive: redirect: community.skydive.skydive cpm_metering: redirect: wti.remote.cpm_metering cpm_status: redirect: wti.remote.cpm_status netconf: ce: redirect: community.network.ce sros: redirect: community.network.sros default: redirect: ansible.netcommon.default iosxr: redirect: cisco.iosxr.iosxr junos: redirect: junipernetworks.junos.junos shell: # test entry formerly_core_powershell: redirect: ansible.builtin.powershell csh: redirect: ansible.posix.csh fish: redirect: ansible.posix.fish test: # test entries formerly_core_test: redirect: ansible.builtin.search formerly_core_masked_test: redirect: ansible.builtin.search import_redirection: # test entry ansible.module_utils.formerly_core: redirect: ansible_collections.testns.testcoll.plugins.module_utils.base ansible.module_utils.known_hosts: redirect: ansible_collections.community.general.plugins.module_utils.known_hosts # ansible.builtin synthetic collection redirection hackery ansible_collections.ansible.builtin.plugins.modules: redirect: ansible.modules ansible_collections.ansible.builtin.plugins.module_utils: redirect: ansible.module_utils ansible_collections.ansible.builtin.plugins: redirect: ansible.plugins action_groups: testgroup: # The list items under a group should always be action/module name strings except # for a special 'metadata' dictionary. # The only valid key currently for the metadata dictionary is 'extend_group', which is a # list of other groups, the actions of which will be included in this group. # (Note: it's still possible to also have a module/action named 'metadata' in the list) - metadata: extend_group: - testns.testcoll.testgroup - testns.testcoll.anothergroup - testns.boguscoll.testgroup - ping - legacy_ping # Includes ansible.builtin.legacy_ping, not ansible.legacy.legacy_ping - formerly_core_ping testlegacy: - ansible.legacy.legacy_ping aws: - metadata: extend_group: - amazon.aws.aws - community.aws.aws acme: - metadata: extend_group: - community.crypto.acme azure: - metadata: extend_group: - azure.azcollection.azure cpm: - metadata: extend_group: - wti.remote.cpm docker: - metadata: extend_group: - community.general.docker - community.docker.docker gcp: - metadata: extend_group: - google.cloud.gcp k8s: - metadata: extend_group: - community.kubernetes.k8s - community.general.k8s - community.kubevirt.k8s - community.okd.k8s - kubernetes.core.k8s os: - metadata: extend_group: - openstack.cloud.os ovirt: - metadata: extend_group: - ovirt.ovirt.ovirt - community.general.ovirt vmware: - metadata: extend_group: - community.vmware.vmware ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.551556 ansible-core-2.12.0/lib/ansible/config/base.yml0000644000000000000000000023615200000000000021174 0ustar00rootroot00000000000000# Copyright (c) 2017 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) --- ALLOW_WORLD_READABLE_TMPFILES: name: Allow world-readable temporary files description: - This setting has been moved to the individual shell plugins as a plugin option :ref:`shell_plugins`. - The existing configuration settings are still accepted with the shell plugin adding additional options, like variables. - This message will be removed in 2.14. type: boolean default: False deprecated: # (kept for autodetection and removal, deprecation is irrelevant since w/o settings this can never show runtime msg) why: moved to shell plugins version: "2.14" alternatives: 'world_readable_tmp' ANSIBLE_CONNECTION_PATH: name: Path of ansible-connection script default: null description: - Specify where to look for the ansible-connection script. This location will be checked before searching $PATH. - If null, ansible will start with the same directory as the ansible script. type: path env: [{name: ANSIBLE_CONNECTION_PATH}] ini: - {key: ansible_connection_path, section: persistent_connection} yaml: {key: persistent_connection.ansible_connection_path} version_added: "2.8" ANSIBLE_COW_SELECTION: name: Cowsay filter selection default: default description: This allows you to chose a specific cowsay stencil for the banners or use 'random' to cycle through them. env: [{name: ANSIBLE_COW_SELECTION}] ini: - {key: cow_selection, section: defaults} ANSIBLE_COW_ACCEPTLIST: name: Cowsay filter acceptance list default: ['bud-frogs', 'bunny', 'cheese', 'daemon', 'default', 'dragon', 'elephant-in-snake', 'elephant', 'eyes', 'hellokitty', 'kitty', 'luke-koala', 'meow', 'milk', 'moofasa', 'moose', 'ren', 'sheep', 'small', 'stegosaurus', 'stimpy', 'supermilker', 'three-eyes', 'turkey', 'turtle', 'tux', 'udder', 'vader-koala', 'vader', 'www'] description: White list of cowsay templates that are 'safe' to use, set to empty list if you want to enable all installed templates. env: - name: ANSIBLE_COW_WHITELIST deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'ANSIBLE_COW_ACCEPTLIST' - name: ANSIBLE_COW_ACCEPTLIST version_added: '2.11' ini: - key: cow_whitelist section: defaults deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'cowsay_enabled_stencils' - key: cowsay_enabled_stencils section: defaults version_added: '2.11' type: list ANSIBLE_FORCE_COLOR: name: Force color output default: False description: This option forces color mode even when running without a TTY or the "nocolor" setting is True. env: [{name: ANSIBLE_FORCE_COLOR}] ini: - {key: force_color, section: defaults} type: boolean yaml: {key: display.force_color} ANSIBLE_NOCOLOR: name: Suppress color output default: False description: This setting allows suppressing colorizing output, which is used to give a better indication of failure and status information. env: - name: ANSIBLE_NOCOLOR # this is generic convention for CLI programs - name: NO_COLOR version_added: '2.11' ini: - {key: nocolor, section: defaults} type: boolean yaml: {key: display.nocolor} ANSIBLE_NOCOWS: name: Suppress cowsay output default: False description: If you have cowsay installed but want to avoid the 'cows' (why????), use this. env: [{name: ANSIBLE_NOCOWS}] ini: - {key: nocows, section: defaults} type: boolean yaml: {key: display.i_am_no_fun} ANSIBLE_COW_PATH: name: Set path to cowsay command default: null description: Specify a custom cowsay path or swap in your cowsay implementation of choice env: [{name: ANSIBLE_COW_PATH}] ini: - {key: cowpath, section: defaults} type: string yaml: {key: display.cowpath} ANSIBLE_PIPELINING: name: Connection pipelining default: False description: - Pipelining, if supported by the connection plugin, reduces the number of network operations required to execute a module on the remote server, by executing many Ansible modules without actual file transfer. - This can result in a very significant performance improvement when enabled. - "However this conflicts with privilege escalation (become). For example, when using 'sudo:' operations you must first disable 'requiretty' in /etc/sudoers on all managed hosts, which is why it is disabled by default." - This option is disabled if ``ANSIBLE_KEEP_REMOTE_FILES`` is enabled. - This is a global option, each connection plugin can override either by having more specific options or not supporting pipelining at all. env: - name: ANSIBLE_PIPELINING ini: - section: defaults key: pipelining - section: connection key: pipelining type: boolean ANY_ERRORS_FATAL: name: Make Task failures fatal default: False description: Sets the default value for the any_errors_fatal keyword, if True, Task failures will be considered fatal errors. env: - name: ANSIBLE_ANY_ERRORS_FATAL ini: - section: defaults key: any_errors_fatal type: boolean yaml: {key: errors.any_task_errors_fatal} version_added: "2.4" BECOME_ALLOW_SAME_USER: name: Allow becoming the same user default: False description: - This setting controls if become is skipped when remote user and become user are the same. I.E root sudo to root. - If executable, it will be run and the resulting stdout will be used as the password. env: [{name: ANSIBLE_BECOME_ALLOW_SAME_USER}] ini: - {key: become_allow_same_user, section: privilege_escalation} type: boolean yaml: {key: privilege_escalation.become_allow_same_user} BECOME_PASSWORD_FILE: name: Become password file default: ~ description: - 'The password file to use for the become plugin. --become-password-file.' - If executable, it will be run and the resulting stdout will be used as the password. env: [{name: ANSIBLE_BECOME_PASSWORD_FILE}] ini: - {key: become_password_file, section: defaults} type: path version_added: '2.12' AGNOSTIC_BECOME_PROMPT: name: Display an agnostic become prompt default: True type: boolean description: Display an agnostic become prompt instead of displaying a prompt containing the command line supplied become method env: [{name: ANSIBLE_AGNOSTIC_BECOME_PROMPT}] ini: - {key: agnostic_become_prompt, section: privilege_escalation} yaml: {key: privilege_escalation.agnostic_become_prompt} version_added: "2.5" CACHE_PLUGIN: name: Persistent Cache plugin default: memory description: Chooses which cache plugin to use, the default 'memory' is ephemeral. env: [{name: ANSIBLE_CACHE_PLUGIN}] ini: - {key: fact_caching, section: defaults} yaml: {key: facts.cache.plugin} CACHE_PLUGIN_CONNECTION: name: Cache Plugin URI default: ~ description: Defines connection or path information for the cache plugin env: [{name: ANSIBLE_CACHE_PLUGIN_CONNECTION}] ini: - {key: fact_caching_connection, section: defaults} yaml: {key: facts.cache.uri} CACHE_PLUGIN_PREFIX: name: Cache Plugin table prefix default: ansible_facts description: Prefix to use for cache plugin files/tables env: [{name: ANSIBLE_CACHE_PLUGIN_PREFIX}] ini: - {key: fact_caching_prefix, section: defaults} yaml: {key: facts.cache.prefix} CACHE_PLUGIN_TIMEOUT: name: Cache Plugin expiration timeout default: 86400 description: Expiration timeout for the cache plugin data env: [{name: ANSIBLE_CACHE_PLUGIN_TIMEOUT}] ini: - {key: fact_caching_timeout, section: defaults} type: integer yaml: {key: facts.cache.timeout} COLLECTIONS_SCAN_SYS_PATH: name: Scan PYTHONPATH for installed collections description: A boolean to enable or disable scanning the sys.path for installed collections default: true type: boolean env: - {name: ANSIBLE_COLLECTIONS_SCAN_SYS_PATH} ini: - {key: collections_scan_sys_path, section: defaults} COLLECTIONS_PATHS: name: ordered list of root paths for loading installed Ansible collections content description: > Colon separated paths in which Ansible will search for collections content. Collections must be in nested *subdirectories*, not directly in these directories. For example, if ``COLLECTIONS_PATHS`` includes ``~/.ansible/collections``, and you want to add ``my.collection`` to that directory, it must be saved as ``~/.ansible/collections/ansible_collections/my/collection``. default: ~/.ansible/collections:/usr/share/ansible/collections type: pathspec env: - name: ANSIBLE_COLLECTIONS_PATHS # TODO: Deprecate this and ini once PATH has been in a few releases. - name: ANSIBLE_COLLECTIONS_PATH version_added: '2.10' ini: - key: collections_paths section: defaults - key: collections_path section: defaults version_added: '2.10' COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH: name: Defines behavior when loading a collection that does not support the current Ansible version description: - When a collection is loaded that does not support the running Ansible version (via the collection metadata key `requires_ansible`), the default behavior is to issue a warning and continue anyway. Setting this value to `ignore` skips the warning entirely, while setting it to `fatal` will immediately halt Ansible execution. env: [{name: ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH}] ini: [{key: collections_on_ansible_version_mismatch, section: defaults}] choices: [error, warning, ignore] default: warning _COLOR_DEFAULTS: &color name: placeholder for color settings' defaults choices: ['black', 'bright gray', 'blue', 'white', 'green', 'bright blue', 'cyan', 'bright green', 'red', 'bright cyan', 'purple', 'bright red', 'yellow', 'bright purple', 'dark gray', 'bright yellow', 'magenta', 'bright magenta', 'normal'] COLOR_CHANGED: <<: *color name: Color for 'changed' task status default: yellow description: Defines the color to use on 'Changed' task status env: [{name: ANSIBLE_COLOR_CHANGED}] ini: - {key: changed, section: colors} COLOR_CONSOLE_PROMPT: <<: *color name: "Color for ansible-console's prompt task status" default: white description: Defines the default color to use for ansible-console env: [{name: ANSIBLE_COLOR_CONSOLE_PROMPT}] ini: - {key: console_prompt, section: colors} version_added: "2.7" COLOR_DEBUG: <<: *color name: Color for debug statements default: dark gray description: Defines the color to use when emitting debug messages env: [{name: ANSIBLE_COLOR_DEBUG}] ini: - {key: debug, section: colors} COLOR_DEPRECATE: <<: *color name: Color for deprecation messages default: purple description: Defines the color to use when emitting deprecation messages env: [{name: ANSIBLE_COLOR_DEPRECATE}] ini: - {key: deprecate, section: colors} COLOR_DIFF_ADD: <<: *color name: Color for diff added display default: green description: Defines the color to use when showing added lines in diffs env: [{name: ANSIBLE_COLOR_DIFF_ADD}] ini: - {key: diff_add, section: colors} yaml: {key: display.colors.diff.add} COLOR_DIFF_LINES: <<: *color name: Color for diff lines display default: cyan description: Defines the color to use when showing diffs env: [{name: ANSIBLE_COLOR_DIFF_LINES}] ini: - {key: diff_lines, section: colors} COLOR_DIFF_REMOVE: <<: *color name: Color for diff removed display default: red description: Defines the color to use when showing removed lines in diffs env: [{name: ANSIBLE_COLOR_DIFF_REMOVE}] ini: - {key: diff_remove, section: colors} COLOR_ERROR: <<: *color name: Color for error messages default: red description: Defines the color to use when emitting error messages env: [{name: ANSIBLE_COLOR_ERROR}] ini: - {key: error, section: colors} yaml: {key: colors.error} COLOR_HIGHLIGHT: <<: *color name: Color for highlighting default: white description: Defines the color to use for highlighting env: [{name: ANSIBLE_COLOR_HIGHLIGHT}] ini: - {key: highlight, section: colors} COLOR_OK: <<: *color name: Color for 'ok' task status default: green description: Defines the color to use when showing 'OK' task status env: [{name: ANSIBLE_COLOR_OK}] ini: - {key: ok, section: colors} COLOR_SKIP: <<: *color name: Color for 'skip' task status default: cyan description: Defines the color to use when showing 'Skipped' task status env: [{name: ANSIBLE_COLOR_SKIP}] ini: - {key: skip, section: colors} COLOR_UNREACHABLE: <<: *color name: Color for 'unreachable' host state default: bright red description: Defines the color to use on 'Unreachable' status env: [{name: ANSIBLE_COLOR_UNREACHABLE}] ini: - {key: unreachable, section: colors} COLOR_VERBOSE: <<: *color name: Color for verbose messages default: blue description: Defines the color to use when emitting verbose messages. i.e those that show with '-v's. env: [{name: ANSIBLE_COLOR_VERBOSE}] ini: - {key: verbose, section: colors} COLOR_WARN: <<: *color name: Color for warning messages default: bright purple description: Defines the color to use when emitting warning messages env: [{name: ANSIBLE_COLOR_WARN}] ini: - {key: warn, section: colors} CONNECTION_PASSWORD_FILE: name: Connection password file default: ~ description: 'The password file to use for the connection plugin. --connection-password-file.' env: [{name: ANSIBLE_CONNECTION_PASSWORD_FILE}] ini: - {key: connection_password_file, section: defaults} type: path version_added: '2.12' COVERAGE_REMOTE_OUTPUT: name: Sets the output directory and filename prefix to generate coverage run info. description: - Sets the output directory on the remote host to generate coverage reports to. - Currently only used for remote coverage on PowerShell modules. - This is for internal use only. env: - {name: _ANSIBLE_COVERAGE_REMOTE_OUTPUT} vars: - {name: _ansible_coverage_remote_output} type: str version_added: '2.9' COVERAGE_REMOTE_PATHS: name: Sets the list of paths to run coverage for. description: - A list of paths for files on the Ansible controller to run coverage for when executing on the remote host. - Only files that match the path glob will have its coverage collected. - Multiple path globs can be specified and are separated by ``:``. - Currently only used for remote coverage on PowerShell modules. - This is for internal use only. default: '*' env: - {name: _ANSIBLE_COVERAGE_REMOTE_PATH_FILTER} type: str version_added: '2.9' ACTION_WARNINGS: name: Toggle action warnings default: True description: - By default Ansible will issue a warning when received from a task action (module or action plugin) - These warnings can be silenced by adjusting this setting to False. env: [{name: ANSIBLE_ACTION_WARNINGS}] ini: - {key: action_warnings, section: defaults} type: boolean version_added: "2.5" COMMAND_WARNINGS: name: Command module warnings default: False description: - Ansible can issue a warning when the shell or command module is used and the command appears to be similar to an existing Ansible module. - These warnings can be silenced by adjusting this setting to False. You can also control this at the task level with the module option ``warn``. - As of version 2.11, this is disabled by default. env: [{name: ANSIBLE_COMMAND_WARNINGS}] ini: - {key: command_warnings, section: defaults} type: boolean version_added: "1.8" deprecated: why: the command warnings feature is being removed version: "2.14" LOCALHOST_WARNING: name: Warning when using implicit inventory with only localhost default: True description: - By default Ansible will issue a warning when there are no hosts in the inventory. - These warnings can be silenced by adjusting this setting to False. env: [{name: ANSIBLE_LOCALHOST_WARNING}] ini: - {key: localhost_warning, section: defaults} type: boolean version_added: "2.6" DOC_FRAGMENT_PLUGIN_PATH: name: documentation fragment plugins path default: ~/.ansible/plugins/doc_fragments:/usr/share/ansible/plugins/doc_fragments description: Colon separated paths in which Ansible will search for Documentation Fragments Plugins. env: [{name: ANSIBLE_DOC_FRAGMENT_PLUGINS}] ini: - {key: doc_fragment_plugins, section: defaults} type: pathspec DEFAULT_ACTION_PLUGIN_PATH: name: Action plugins path default: ~/.ansible/plugins/action:/usr/share/ansible/plugins/action description: Colon separated paths in which Ansible will search for Action Plugins. env: [{name: ANSIBLE_ACTION_PLUGINS}] ini: - {key: action_plugins, section: defaults} type: pathspec yaml: {key: plugins.action.path} DEFAULT_ALLOW_UNSAFE_LOOKUPS: name: Allow unsafe lookups default: False description: - "When enabled, this option allows lookup plugins (whether used in variables as ``{{lookup('foo')}}`` or as a loop as with_foo) to return data that is not marked 'unsafe'." - By default, such data is marked as unsafe to prevent the templating engine from evaluating any jinja2 templating language, as this could represent a security risk. This option is provided to allow for backward compatibility, however users should first consider adding allow_unsafe=True to any lookups which may be expected to contain data which may be run through the templating engine late env: [] ini: - {key: allow_unsafe_lookups, section: defaults} type: boolean version_added: "2.2.3" DEFAULT_ASK_PASS: name: Ask for the login password default: False description: - This controls whether an Ansible playbook should prompt for a login password. If using SSH keys for authentication, you probably do not needed to change this setting. env: [{name: ANSIBLE_ASK_PASS}] ini: - {key: ask_pass, section: defaults} type: boolean yaml: {key: defaults.ask_pass} DEFAULT_ASK_VAULT_PASS: name: Ask for the vault password(s) default: False description: - This controls whether an Ansible playbook should prompt for a vault password. env: [{name: ANSIBLE_ASK_VAULT_PASS}] ini: - {key: ask_vault_pass, section: defaults} type: boolean DEFAULT_BECOME: name: Enable privilege escalation (become) default: False description: Toggles the use of privilege escalation, allowing you to 'become' another user after login. env: [{name: ANSIBLE_BECOME}] ini: - {key: become, section: privilege_escalation} type: boolean DEFAULT_BECOME_ASK_PASS: name: Ask for the privilege escalation (become) password default: False description: Toggle to prompt for privilege escalation password. env: [{name: ANSIBLE_BECOME_ASK_PASS}] ini: - {key: become_ask_pass, section: privilege_escalation} type: boolean DEFAULT_BECOME_METHOD: name: Choose privilege escalation method default: 'sudo' description: Privilege escalation method to use when `become` is enabled. env: [{name: ANSIBLE_BECOME_METHOD}] ini: - {section: privilege_escalation, key: become_method} DEFAULT_BECOME_EXE: name: Choose 'become' executable default: ~ description: 'executable to use for privilege escalation, otherwise Ansible will depend on PATH' env: [{name: ANSIBLE_BECOME_EXE}] ini: - {key: become_exe, section: privilege_escalation} DEFAULT_BECOME_FLAGS: name: Set 'become' executable options default: ~ description: Flags to pass to the privilege escalation executable. env: [{name: ANSIBLE_BECOME_FLAGS}] ini: - {key: become_flags, section: privilege_escalation} BECOME_PLUGIN_PATH: name: Become plugins path default: ~/.ansible/plugins/become:/usr/share/ansible/plugins/become description: Colon separated paths in which Ansible will search for Become Plugins. env: [{name: ANSIBLE_BECOME_PLUGINS}] ini: - {key: become_plugins, section: defaults} type: pathspec version_added: "2.8" DEFAULT_BECOME_USER: # FIXME: should really be blank and make -u passing optional depending on it name: Set the user you 'become' via privilege escalation default: root description: The user your login/remote user 'becomes' when using privilege escalation, most systems will use 'root' when no user is specified. env: [{name: ANSIBLE_BECOME_USER}] ini: - {key: become_user, section: privilege_escalation} yaml: {key: become.user} DEFAULT_CACHE_PLUGIN_PATH: name: Cache Plugins Path default: ~/.ansible/plugins/cache:/usr/share/ansible/plugins/cache description: Colon separated paths in which Ansible will search for Cache Plugins. env: [{name: ANSIBLE_CACHE_PLUGINS}] ini: - {key: cache_plugins, section: defaults} type: pathspec CALLABLE_ACCEPT_LIST: name: Template 'callable' accept list default: [] description: Whitelist of callable methods to be made available to template evaluation env: - name: ANSIBLE_CALLABLE_WHITELIST deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'ANSIBLE_CALLABLE_ENABLED' - name: ANSIBLE_CALLABLE_ENABLED version_added: '2.11' ini: - key: callable_whitelist section: defaults deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'callable_enabled' - key: callable_enabled section: defaults version_added: '2.11' type: list DEFAULT_CALLBACK_PLUGIN_PATH: name: Callback Plugins Path default: ~/.ansible/plugins/callback:/usr/share/ansible/plugins/callback description: Colon separated paths in which Ansible will search for Callback Plugins. env: [{name: ANSIBLE_CALLBACK_PLUGINS}] ini: - {key: callback_plugins, section: defaults} type: pathspec yaml: {key: plugins.callback.path} CALLBACKS_ENABLED: name: Enable callback plugins that require it. default: [] description: - "List of enabled callbacks, not all callbacks need enabling, but many of those shipped with Ansible do as we don't want them activated by default." env: - name: ANSIBLE_CALLBACK_WHITELIST deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'ANSIBLE_CALLBACKS_ENABLED' - name: ANSIBLE_CALLBACKS_ENABLED version_added: '2.11' ini: - key: callback_whitelist section: defaults deprecated: why: normalizing names to new standard version: "2.15" alternatives: 'callbacks_enabled' - key: callbacks_enabled section: defaults version_added: '2.11' type: list DEFAULT_CLICONF_PLUGIN_PATH: name: Cliconf Plugins Path default: ~/.ansible/plugins/cliconf:/usr/share/ansible/plugins/cliconf description: Colon separated paths in which Ansible will search for Cliconf Plugins. env: [{name: ANSIBLE_CLICONF_PLUGINS}] ini: - {key: cliconf_plugins, section: defaults} type: pathspec DEFAULT_CONNECTION_PLUGIN_PATH: name: Connection Plugins Path default: ~/.ansible/plugins/connection:/usr/share/ansible/plugins/connection description: Colon separated paths in which Ansible will search for Connection Plugins. env: [{name: ANSIBLE_CONNECTION_PLUGINS}] ini: - {key: connection_plugins, section: defaults} type: pathspec yaml: {key: plugins.connection.path} DEFAULT_DEBUG: name: Debug mode default: False description: - "Toggles debug output in Ansible. This is *very* verbose and can hinder multiprocessing. Debug output can also include secret information despite no_log settings being enabled, which means debug mode should not be used in production." env: [{name: ANSIBLE_DEBUG}] ini: - {key: debug, section: defaults} type: boolean DEFAULT_EXECUTABLE: name: Target shell executable default: /bin/sh description: - "This indicates the command to use to spawn a shell under for Ansible's execution needs on a target. Users may need to change this in rare instances when shell usage is constrained, but in most cases it may be left as is." env: [{name: ANSIBLE_EXECUTABLE}] ini: - {key: executable, section: defaults} DEFAULT_FACT_PATH: name: local fact path default: ~ description: - "This option allows you to globally configure a custom path for 'local_facts' for the implied M(ansible.builtin.setup) task when using fact gathering." - "If not set, it will fallback to the default from the M(ansible.builtin.setup) module: ``/etc/ansible/facts.d``." - "This does **not** affect user defined tasks that use the M(ansible.builtin.setup) module." env: [{name: ANSIBLE_FACT_PATH}] ini: - {key: fact_path, section: defaults} type: string yaml: {key: facts.gathering.fact_path} DEFAULT_FILTER_PLUGIN_PATH: name: Jinja2 Filter Plugins Path default: ~/.ansible/plugins/filter:/usr/share/ansible/plugins/filter description: Colon separated paths in which Ansible will search for Jinja2 Filter Plugins. env: [{name: ANSIBLE_FILTER_PLUGINS}] ini: - {key: filter_plugins, section: defaults} type: pathspec DEFAULT_FORCE_HANDLERS: name: Force handlers to run after failure default: False description: - This option controls if notified handlers run on a host even if a failure occurs on that host. - When false, the handlers will not run if a failure has occurred on a host. - This can also be set per play or on the command line. See Handlers and Failure for more details. env: [{name: ANSIBLE_FORCE_HANDLERS}] ini: - {key: force_handlers, section: defaults} type: boolean version_added: "1.9.1" DEFAULT_FORKS: name: Number of task forks default: 5 description: Maximum number of forks Ansible will use to execute tasks on target hosts. env: [{name: ANSIBLE_FORKS}] ini: - {key: forks, section: defaults} type: integer DEFAULT_GATHERING: name: Gathering behaviour default: 'implicit' description: - This setting controls the default policy of fact gathering (facts discovered about remote systems). - "When 'implicit' (the default), the cache plugin will be ignored and facts will be gathered per play unless 'gather_facts: False' is set." - "When 'explicit' the inverse is true, facts will not be gathered unless directly requested in the play." - "The 'smart' value means each new host that has no facts discovered will be scanned, but if the same host is addressed in multiple plays it will not be contacted again in the playbook run." - "This option can be useful for those wishing to save fact gathering time. Both 'smart' and 'explicit' will use the cache plugin." env: [{name: ANSIBLE_GATHERING}] ini: - key: gathering section: defaults version_added: "1.6" choices: ['smart', 'explicit', 'implicit'] DEFAULT_GATHER_SUBSET: name: Gather facts subset default: ['all'] description: - Set the `gather_subset` option for the M(ansible.builtin.setup) task in the implicit fact gathering. See the module documentation for specifics. - "It does **not** apply to user defined M(ansible.builtin.setup) tasks." env: [{name: ANSIBLE_GATHER_SUBSET}] ini: - key: gather_subset section: defaults version_added: "2.1" type: list DEFAULT_GATHER_TIMEOUT: name: Gather facts timeout default: 10 description: - Set the timeout in seconds for the implicit fact gathering. - "It does **not** apply to user defined M(ansible.builtin.setup) tasks." env: [{name: ANSIBLE_GATHER_TIMEOUT}] ini: - {key: gather_timeout, section: defaults} type: integer yaml: {key: defaults.gather_timeout} DEFAULT_HASH_BEHAVIOUR: name: Hash merge behaviour default: replace type: string choices: replace: Any variable that is defined more than once is overwritten using the order from variable precedence rules (highest wins). merge: Any dictionary variable will be recursively merged with new definitions across the different variable definition sources. description: - This setting controls how duplicate definitions of dictionary variables (aka hash, map, associative array) are handled in Ansible. - This does not affect variables whose values are scalars (integers, strings) or arrays. - "**WARNING**, changing this setting is not recommended as this is fragile and makes your content (plays, roles, collections) non portable, leading to continual confusion and misuse. Don't change this setting unless you think you have an absolute need for it." - We recommend avoiding reusing variable names and relying on the ``combine`` filter and ``vars`` and ``varnames`` lookups to create merged versions of the individual variables. In our experience this is rarely really needed and a sign that too much complexity has been introduced into the data structures and plays. - For some uses you can also look into custom vars_plugins to merge on input, even substituting the default ``host_group_vars`` that is in charge of parsing the ``host_vars/`` and ``group_vars/`` directories. Most users of this setting are only interested in inventory scope, but the setting itself affects all sources and makes debugging even harder. - All playbooks and roles in the official examples repos assume the default for this setting. - Changing the setting to ``merge`` applies across variable sources, but many sources will internally still overwrite the variables. For example ``include_vars`` will dedupe variables internally before updating Ansible, with 'last defined' overwriting previous definitions in same file. - The Ansible project recommends you **avoid ``merge`` for new projects.** - It is the intention of the Ansible developers to eventually deprecate and remove this setting, but it is being kept as some users do heavily rely on it. New projects should **avoid 'merge'**. env: [{name: ANSIBLE_HASH_BEHAVIOUR}] ini: - {key: hash_behaviour, section: defaults} DEFAULT_HOST_LIST: name: Inventory Source default: /etc/ansible/hosts description: Comma separated list of Ansible inventory sources env: - name: ANSIBLE_INVENTORY expand_relative_paths: True ini: - key: inventory section: defaults type: pathlist yaml: {key: defaults.inventory} DEFAULT_HTTPAPI_PLUGIN_PATH: name: HttpApi Plugins Path default: ~/.ansible/plugins/httpapi:/usr/share/ansible/plugins/httpapi description: Colon separated paths in which Ansible will search for HttpApi Plugins. env: [{name: ANSIBLE_HTTPAPI_PLUGINS}] ini: - {key: httpapi_plugins, section: defaults} type: pathspec DEFAULT_INTERNAL_POLL_INTERVAL: name: Internal poll interval default: 0.001 env: [] ini: - {key: internal_poll_interval, section: defaults} type: float version_added: "2.2" description: - This sets the interval (in seconds) of Ansible internal processes polling each other. Lower values improve performance with large playbooks at the expense of extra CPU load. Higher values are more suitable for Ansible usage in automation scenarios, when UI responsiveness is not required but CPU usage might be a concern. - "The default corresponds to the value hardcoded in Ansible <= 2.1" DEFAULT_INVENTORY_PLUGIN_PATH: name: Inventory Plugins Path default: ~/.ansible/plugins/inventory:/usr/share/ansible/plugins/inventory description: Colon separated paths in which Ansible will search for Inventory Plugins. env: [{name: ANSIBLE_INVENTORY_PLUGINS}] ini: - {key: inventory_plugins, section: defaults} type: pathspec DEFAULT_JINJA2_EXTENSIONS: name: Enabled Jinja2 extensions default: [] description: - This is a developer-specific feature that allows enabling additional Jinja2 extensions. - "See the Jinja2 documentation for details. If you do not know what these do, you probably don't need to change this setting :)" env: [{name: ANSIBLE_JINJA2_EXTENSIONS}] ini: - {key: jinja2_extensions, section: defaults} DEFAULT_JINJA2_NATIVE: name: Use Jinja2's NativeEnvironment for templating default: False description: This option preserves variable types during template operations. This requires Jinja2 >= 2.10. env: [{name: ANSIBLE_JINJA2_NATIVE}] ini: - {key: jinja2_native, section: defaults} type: boolean yaml: {key: jinja2_native} version_added: 2.7 DEFAULT_KEEP_REMOTE_FILES: name: Keep remote files default: False description: - Enables/disables the cleaning up of the temporary files Ansible used to execute the tasks on the remote. - If this option is enabled it will disable ``ANSIBLE_PIPELINING``. env: [{name: ANSIBLE_KEEP_REMOTE_FILES}] ini: - {key: keep_remote_files, section: defaults} type: boolean DEFAULT_LIBVIRT_LXC_NOSECLABEL: # TODO: move to plugin name: No security label on Lxc default: False description: - "This setting causes libvirt to connect to lxc containers by passing --noseclabel to virsh. This is necessary when running on systems which do not have SELinux." env: - name: LIBVIRT_LXC_NOSECLABEL deprecated: why: environment variables without ``ANSIBLE_`` prefix are deprecated version: "2.12" alternatives: the ``ANSIBLE_LIBVIRT_LXC_NOSECLABEL`` environment variable - name: ANSIBLE_LIBVIRT_LXC_NOSECLABEL ini: - {key: libvirt_lxc_noseclabel, section: selinux} type: boolean version_added: "2.1" DEFAULT_LOAD_CALLBACK_PLUGINS: name: Load callbacks for adhoc default: False description: - Controls whether callback plugins are loaded when running /usr/bin/ansible. This may be used to log activity from the command line, send notifications, and so on. Callback plugins are always loaded for ``ansible-playbook``. env: [{name: ANSIBLE_LOAD_CALLBACK_PLUGINS}] ini: - {key: bin_ansible_callbacks, section: defaults} type: boolean version_added: "1.8" DEFAULT_LOCAL_TMP: name: Controller temporary directory default: ~/.ansible/tmp description: Temporary directory for Ansible to use on the controller. env: [{name: ANSIBLE_LOCAL_TEMP}] ini: - {key: local_tmp, section: defaults} type: tmppath DEFAULT_LOG_PATH: name: Ansible log file path default: ~ description: File to which Ansible will log on the controller. When empty logging is disabled. env: [{name: ANSIBLE_LOG_PATH}] ini: - {key: log_path, section: defaults} type: path DEFAULT_LOG_FILTER: name: Name filters for python logger default: [] description: List of logger names to filter out of the log file env: [{name: ANSIBLE_LOG_FILTER}] ini: - {key: log_filter, section: defaults} type: list DEFAULT_LOOKUP_PLUGIN_PATH: name: Lookup Plugins Path description: Colon separated paths in which Ansible will search for Lookup Plugins. default: ~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup env: [{name: ANSIBLE_LOOKUP_PLUGINS}] ini: - {key: lookup_plugins, section: defaults} type: pathspec yaml: {key: defaults.lookup_plugins} DEFAULT_MANAGED_STR: name: Ansible managed default: 'Ansible managed' description: Sets the macro for the 'ansible_managed' variable available for M(ansible.builtin.template) and M(ansible.windows.win_template) modules. This is only relevant for those two modules. env: [] ini: - {key: ansible_managed, section: defaults} yaml: {key: defaults.ansible_managed} DEFAULT_MODULE_ARGS: name: Adhoc default arguments default: ~ description: - This sets the default arguments to pass to the ``ansible`` adhoc binary if no ``-a`` is specified. env: [{name: ANSIBLE_MODULE_ARGS}] ini: - {key: module_args, section: defaults} DEFAULT_MODULE_COMPRESSION: name: Python module compression default: ZIP_DEFLATED description: Compression scheme to use when transferring Python modules to the target. env: [] ini: - {key: module_compression, section: defaults} # vars: # - name: ansible_module_compression DEFAULT_MODULE_NAME: name: Default adhoc module default: command description: "Module to use with the ``ansible`` AdHoc command, if none is specified via ``-m``." env: [] ini: - {key: module_name, section: defaults} DEFAULT_MODULE_PATH: name: Modules Path description: Colon separated paths in which Ansible will search for Modules. default: ~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules env: [{name: ANSIBLE_LIBRARY}] ini: - {key: library, section: defaults} type: pathspec DEFAULT_MODULE_UTILS_PATH: name: Module Utils Path description: Colon separated paths in which Ansible will search for Module utils files, which are shared by modules. default: ~/.ansible/plugins/module_utils:/usr/share/ansible/plugins/module_utils env: [{name: ANSIBLE_MODULE_UTILS}] ini: - {key: module_utils, section: defaults} type: pathspec DEFAULT_NETCONF_PLUGIN_PATH: name: Netconf Plugins Path default: ~/.ansible/plugins/netconf:/usr/share/ansible/plugins/netconf description: Colon separated paths in which Ansible will search for Netconf Plugins. env: [{name: ANSIBLE_NETCONF_PLUGINS}] ini: - {key: netconf_plugins, section: defaults} type: pathspec DEFAULT_NO_LOG: name: No log default: False description: "Toggle Ansible's display and logging of task details, mainly used to avoid security disclosures." env: [{name: ANSIBLE_NO_LOG}] ini: - {key: no_log, section: defaults} type: boolean DEFAULT_NO_TARGET_SYSLOG: name: No syslog on target default: False description: - Toggle Ansible logging to syslog on the target when it executes tasks. On Windows hosts this will disable a newer style PowerShell modules from writting to the event log. env: [{name: ANSIBLE_NO_TARGET_SYSLOG}] ini: - {key: no_target_syslog, section: defaults} vars: - name: ansible_no_target_syslog version_added: '2.10' type: boolean yaml: {key: defaults.no_target_syslog} DEFAULT_NULL_REPRESENTATION: name: Represent a null default: ~ description: What templating should return as a 'null' value. When not set it will let Jinja2 decide. env: [{name: ANSIBLE_NULL_REPRESENTATION}] ini: - {key: null_representation, section: defaults} type: none DEFAULT_POLL_INTERVAL: name: Async poll interval default: 15 description: - For asynchronous tasks in Ansible (covered in Asynchronous Actions and Polling), this is how often to check back on the status of those tasks when an explicit poll interval is not supplied. The default is a reasonably moderate 15 seconds which is a tradeoff between checking in frequently and providing a quick turnaround when something may have completed. env: [{name: ANSIBLE_POLL_INTERVAL}] ini: - {key: poll_interval, section: defaults} type: integer DEFAULT_PRIVATE_KEY_FILE: name: Private key file default: ~ description: - Option for connections using a certificate or key file to authenticate, rather than an agent or passwords, you can set the default value here to avoid re-specifying --private-key with every invocation. env: [{name: ANSIBLE_PRIVATE_KEY_FILE}] ini: - {key: private_key_file, section: defaults} type: path DEFAULT_PRIVATE_ROLE_VARS: name: Private role variables default: False description: - Makes role variables inaccessible from other roles. - This was introduced as a way to reset role variables to default values if a role is used more than once in a playbook. env: [{name: ANSIBLE_PRIVATE_ROLE_VARS}] ini: - {key: private_role_vars, section: defaults} type: boolean yaml: {key: defaults.private_role_vars} DEFAULT_REMOTE_PORT: name: Remote port default: ~ description: Port to use in remote connections, when blank it will use the connection plugin default. env: [{name: ANSIBLE_REMOTE_PORT}] ini: - {key: remote_port, section: defaults} type: integer yaml: {key: defaults.remote_port} DEFAULT_REMOTE_USER: name: Login/Remote User description: - Sets the login user for the target machines - "When blank it uses the connection plugin's default, normally the user currently executing Ansible." env: [{name: ANSIBLE_REMOTE_USER}] ini: - {key: remote_user, section: defaults} DEFAULT_ROLES_PATH: name: Roles path default: ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles description: Colon separated paths in which Ansible will search for Roles. env: [{name: ANSIBLE_ROLES_PATH}] expand_relative_paths: True ini: - {key: roles_path, section: defaults} type: pathspec yaml: {key: defaults.roles_path} DEFAULT_SELINUX_SPECIAL_FS: name: Problematic file systems default: fuse, nfs, vboxsf, ramfs, 9p, vfat description: - "Some filesystems do not support safe operations and/or return inconsistent errors, this setting makes Ansible 'tolerate' those in the list w/o causing fatal errors." - Data corruption may occur and writes are not always verified when a filesystem is in the list. env: - name: ANSIBLE_SELINUX_SPECIAL_FS version_added: "2.9" ini: - {key: special_context_filesystems, section: selinux} type: list DEFAULT_STDOUT_CALLBACK: name: Main display callback plugin default: default description: - "Set the main callback used to display Ansible output, you can only have one at a time." - You can have many other callbacks, but just one can be in charge of stdout. env: [{name: ANSIBLE_STDOUT_CALLBACK}] ini: - {key: stdout_callback, section: defaults} ENABLE_TASK_DEBUGGER: name: Whether to enable the task debugger default: False description: - Whether or not to enable the task debugger, this previously was done as a strategy plugin. - Now all strategy plugins can inherit this behavior. The debugger defaults to activating when - a task is failed on unreachable. Use the debugger keyword for more flexibility. type: boolean env: [{name: ANSIBLE_ENABLE_TASK_DEBUGGER}] ini: - {key: enable_task_debugger, section: defaults} version_added: "2.5" TASK_DEBUGGER_IGNORE_ERRORS: name: Whether a failed task with ignore_errors=True will still invoke the debugger default: True description: - This option defines whether the task debugger will be invoked on a failed task when ignore_errors=True is specified. - True specifies that the debugger will honor ignore_errors, False will not honor ignore_errors. type: boolean env: [{name: ANSIBLE_TASK_DEBUGGER_IGNORE_ERRORS}] ini: - {key: task_debugger_ignore_errors, section: defaults} version_added: "2.7" DEFAULT_STRATEGY: name: Implied strategy default: 'linear' description: Set the default strategy used for plays. env: [{name: ANSIBLE_STRATEGY}] ini: - {key: strategy, section: defaults} version_added: "2.3" DEFAULT_STRATEGY_PLUGIN_PATH: name: Strategy Plugins Path description: Colon separated paths in which Ansible will search for Strategy Plugins. default: ~/.ansible/plugins/strategy:/usr/share/ansible/plugins/strategy env: [{name: ANSIBLE_STRATEGY_PLUGINS}] ini: - {key: strategy_plugins, section: defaults} type: pathspec DEFAULT_SU: default: False description: 'Toggle the use of "su" for tasks.' env: [{name: ANSIBLE_SU}] ini: - {key: su, section: defaults} type: boolean yaml: {key: defaults.su} DEFAULT_SYSLOG_FACILITY: name: syslog facility default: LOG_USER description: Syslog facility to use when Ansible logs to the remote target env: [{name: ANSIBLE_SYSLOG_FACILITY}] ini: - {key: syslog_facility, section: defaults} DEFAULT_TERMINAL_PLUGIN_PATH: name: Terminal Plugins Path default: ~/.ansible/plugins/terminal:/usr/share/ansible/plugins/terminal description: Colon separated paths in which Ansible will search for Terminal Plugins. env: [{name: ANSIBLE_TERMINAL_PLUGINS}] ini: - {key: terminal_plugins, section: defaults} type: pathspec DEFAULT_TEST_PLUGIN_PATH: name: Jinja2 Test Plugins Path description: Colon separated paths in which Ansible will search for Jinja2 Test Plugins. default: ~/.ansible/plugins/test:/usr/share/ansible/plugins/test env: [{name: ANSIBLE_TEST_PLUGINS}] ini: - {key: test_plugins, section: defaults} type: pathspec DEFAULT_TIMEOUT: name: Connection timeout default: 10 description: This is the default timeout for connection plugins to use. env: [{name: ANSIBLE_TIMEOUT}] ini: - {key: timeout, section: defaults} type: integer DEFAULT_TRANSPORT: # note that ssh_utils refs this and needs to be updated if removed name: Connection plugin default: smart description: "Default connection plugin to use, the 'smart' option will toggle between 'ssh' and 'paramiko' depending on controller OS and ssh versions" env: [{name: ANSIBLE_TRANSPORT}] ini: - {key: transport, section: defaults} DEFAULT_UNDEFINED_VAR_BEHAVIOR: name: Jinja2 fail on undefined default: True version_added: "1.3" description: - When True, this causes ansible templating to fail steps that reference variable names that are likely typoed. - "Otherwise, any '{{ template_expression }}' that contains undefined variables will be rendered in a template or ansible action line exactly as written." env: [{name: ANSIBLE_ERROR_ON_UNDEFINED_VARS}] ini: - {key: error_on_undefined_vars, section: defaults} type: boolean DEFAULT_VARS_PLUGIN_PATH: name: Vars Plugins Path default: ~/.ansible/plugins/vars:/usr/share/ansible/plugins/vars description: Colon separated paths in which Ansible will search for Vars Plugins. env: [{name: ANSIBLE_VARS_PLUGINS}] ini: - {key: vars_plugins, section: defaults} type: pathspec # TODO: unused? #DEFAULT_VAR_COMPRESSION_LEVEL: # default: 0 # description: 'TODO: write it' # env: [{name: ANSIBLE_VAR_COMPRESSION_LEVEL}] # ini: # - {key: var_compression_level, section: defaults} # type: integer # yaml: {key: defaults.var_compression_level} DEFAULT_VAULT_ID_MATCH: name: Force vault id match default: False description: 'If true, decrypting vaults with a vault id will only try the password from the matching vault-id' env: [{name: ANSIBLE_VAULT_ID_MATCH}] ini: - {key: vault_id_match, section: defaults} yaml: {key: defaults.vault_id_match} DEFAULT_VAULT_IDENTITY: name: Vault id label default: default description: 'The label to use for the default vault id label in cases where a vault id label is not provided' env: [{name: ANSIBLE_VAULT_IDENTITY}] ini: - {key: vault_identity, section: defaults} yaml: {key: defaults.vault_identity} DEFAULT_VAULT_ENCRYPT_IDENTITY: name: Vault id to use for encryption description: 'The vault_id to use for encrypting by default. If multiple vault_ids are provided, this specifies which to use for encryption. The --encrypt-vault-id cli option overrides the configured value.' env: [{name: ANSIBLE_VAULT_ENCRYPT_IDENTITY}] ini: - {key: vault_encrypt_identity, section: defaults} yaml: {key: defaults.vault_encrypt_identity} DEFAULT_VAULT_IDENTITY_LIST: name: Default vault ids default: [] description: 'A list of vault-ids to use by default. Equivalent to multiple --vault-id args. Vault-ids are tried in order.' env: [{name: ANSIBLE_VAULT_IDENTITY_LIST}] ini: - {key: vault_identity_list, section: defaults} type: list yaml: {key: defaults.vault_identity_list} DEFAULT_VAULT_PASSWORD_FILE: name: Vault password file default: ~ description: - 'The vault password file to use. Equivalent to --vault-password-file or --vault-id' - If executable, it will be run and the resulting stdout will be used as the password. env: [{name: ANSIBLE_VAULT_PASSWORD_FILE}] ini: - {key: vault_password_file, section: defaults} type: path yaml: {key: defaults.vault_password_file} DEFAULT_VERBOSITY: name: Verbosity default: 0 description: Sets the default verbosity, equivalent to the number of ``-v`` passed in the command line. env: [{name: ANSIBLE_VERBOSITY}] ini: - {key: verbosity, section: defaults} type: integer DEPRECATION_WARNINGS: name: Deprecation messages default: True description: "Toggle to control the showing of deprecation warnings" env: [{name: ANSIBLE_DEPRECATION_WARNINGS}] ini: - {key: deprecation_warnings, section: defaults} type: boolean DEVEL_WARNING: name: Running devel warning default: True description: Toggle to control showing warnings related to running devel env: [{name: ANSIBLE_DEVEL_WARNING}] ini: - {key: devel_warning, section: defaults} type: boolean DIFF_ALWAYS: name: Show differences default: False description: Configuration toggle to tell modules to show differences when in 'changed' status, equivalent to ``--diff``. env: [{name: ANSIBLE_DIFF_ALWAYS}] ini: - {key: always, section: diff} type: bool DIFF_CONTEXT: name: Difference context default: 3 description: How many lines of context to show when displaying the differences between files. env: [{name: ANSIBLE_DIFF_CONTEXT}] ini: - {key: context, section: diff} type: integer DISPLAY_ARGS_TO_STDOUT: name: Show task arguments default: False description: - "Normally ``ansible-playbook`` will print a header for each task that is run. These headers will contain the name: field from the task if you specified one. If you didn't then ``ansible-playbook`` uses the task's action to help you tell which task is presently running. Sometimes you run many of the same action and so you want more information about the task to differentiate it from others of the same action. If you set this variable to True in the config then ``ansible-playbook`` will also include the task's arguments in the header." - "This setting defaults to False because there is a chance that you have sensitive values in your parameters and you do not want those to be printed." - "If you set this to True you should be sure that you have secured your environment's stdout (no one can shoulder surf your screen and you aren't saving stdout to an insecure file) or made sure that all of your playbooks explicitly added the ``no_log: True`` parameter to tasks which have sensitive values See How do I keep secret data in my playbook? for more information." env: [{name: ANSIBLE_DISPLAY_ARGS_TO_STDOUT}] ini: - {key: display_args_to_stdout, section: defaults} type: boolean version_added: "2.1" DISPLAY_SKIPPED_HOSTS: name: Show skipped results default: True description: "Toggle to control displaying skipped task/host entries in a task in the default callback" env: - name: DISPLAY_SKIPPED_HOSTS deprecated: why: environment variables without ``ANSIBLE_`` prefix are deprecated version: "2.12" alternatives: the ``ANSIBLE_DISPLAY_SKIPPED_HOSTS`` environment variable - name: ANSIBLE_DISPLAY_SKIPPED_HOSTS ini: - {key: display_skipped_hosts, section: defaults} type: boolean DOCSITE_ROOT_URL: name: Root docsite URL default: https://docs.ansible.com/ansible-core/ description: Root docsite URL used to generate docs URLs in warning/error text; must be an absolute URL with valid scheme and trailing slash. ini: - {key: docsite_root_url, section: defaults} version_added: "2.8" DUPLICATE_YAML_DICT_KEY: name: Controls ansible behaviour when finding duplicate keys in YAML. default: warn description: - By default Ansible will issue a warning when a duplicate dict key is encountered in YAML. - These warnings can be silenced by adjusting this setting to False. env: [{name: ANSIBLE_DUPLICATE_YAML_DICT_KEY}] ini: - {key: duplicate_dict_key, section: defaults} type: string choices: ['warn', 'error', 'ignore'] version_added: "2.9" ERROR_ON_MISSING_HANDLER: name: Missing handler error default: True description: "Toggle to allow missing handlers to become a warning instead of an error when notifying." env: [{name: ANSIBLE_ERROR_ON_MISSING_HANDLER}] ini: - {key: error_on_missing_handler, section: defaults} type: boolean CONNECTION_FACTS_MODULES: name: Map of connections to fact modules default: # use ansible.legacy names on unqualified facts modules to allow library/ overrides asa: ansible.legacy.asa_facts cisco.asa.asa: cisco.asa.asa_facts eos: ansible.legacy.eos_facts arista.eos.eos: arista.eos.eos_facts frr: ansible.legacy.frr_facts frr.frr.frr: frr.frr.frr_facts ios: ansible.legacy.ios_facts cisco.ios.ios: cisco.ios.ios_facts iosxr: ansible.legacy.iosxr_facts cisco.iosxr.iosxr: cisco.iosxr.iosxr_facts junos: ansible.legacy.junos_facts junipernetworks.junos.junos: junipernetworks.junos.junos_facts nxos: ansible.legacy.nxos_facts cisco.nxos.nxos: cisco.nxos.nxos_facts vyos: ansible.legacy.vyos_facts vyos.vyos.vyos: vyos.vyos.vyos_facts exos: ansible.legacy.exos_facts extreme.exos.exos: extreme.exos.exos_facts slxos: ansible.legacy.slxos_facts extreme.slxos.slxos: extreme.slxos.slxos_facts voss: ansible.legacy.voss_facts extreme.voss.voss: extreme.voss.voss_facts ironware: ansible.legacy.ironware_facts community.network.ironware: community.network.ironware_facts description: "Which modules to run during a play's fact gathering stage based on connection" type: dict FACTS_MODULES: name: Gather Facts Modules default: - smart description: "Which modules to run during a play's fact gathering stage, using the default of 'smart' will try to figure it out based on connection type." env: [{name: ANSIBLE_FACTS_MODULES}] ini: - {key: facts_modules, section: defaults} type: list vars: - name: ansible_facts_modules GALAXY_IGNORE_CERTS: name: Galaxy validate certs default: False description: - If set to yes, ansible-galaxy will not validate TLS certificates. This can be useful for testing against a server with a self-signed certificate. env: [{name: ANSIBLE_GALAXY_IGNORE}] ini: - {key: ignore_certs, section: galaxy} type: boolean GALAXY_ROLE_SKELETON: name: Galaxy role or collection skeleton directory description: Role or collection skeleton directory to use as a template for the ``init`` action in ``ansible-galaxy``, same as ``--role-skeleton``. env: [{name: ANSIBLE_GALAXY_ROLE_SKELETON}] ini: - {key: role_skeleton, section: galaxy} type: path GALAXY_ROLE_SKELETON_IGNORE: name: Galaxy skeleton ignore default: ["^.git$", "^.*/.git_keep$"] description: patterns of files to ignore inside a Galaxy role or collection skeleton directory env: [{name: ANSIBLE_GALAXY_ROLE_SKELETON_IGNORE}] ini: - {key: role_skeleton_ignore, section: galaxy} type: list # TODO: unused? #GALAXY_SCMS: # name: Galaxy SCMS # default: git, hg # description: Available galaxy source control management systems. # env: [{name: ANSIBLE_GALAXY_SCMS}] # ini: # - {key: scms, section: galaxy} # type: list GALAXY_SERVER: default: https://galaxy.ansible.com description: "URL to prepend when roles don't specify the full URI, assume they are referencing this server as the source." env: [{name: ANSIBLE_GALAXY_SERVER}] ini: - {key: server, section: galaxy} yaml: {key: galaxy.server} GALAXY_SERVER_LIST: description: - A list of Galaxy servers to use when installing a collection. - The value corresponds to the config ini header ``[galaxy_server.{{item}}]`` which defines the server details. - 'See :ref:`galaxy_server_config` for more details on how to define a Galaxy server.' - The order of servers in this list is used to as the order in which a collection is resolved. - Setting this config option will ignore the :ref:`galaxy_server` config option. env: [{name: ANSIBLE_GALAXY_SERVER_LIST}] ini: - {key: server_list, section: galaxy} type: list version_added: "2.9" GALAXY_TOKEN_PATH: default: ~/.ansible/galaxy_token description: "Local path to galaxy access token file" env: [{name: ANSIBLE_GALAXY_TOKEN_PATH}] ini: - {key: token_path, section: galaxy} type: path version_added: "2.9" GALAXY_DISPLAY_PROGRESS: default: ~ description: - Some steps in ``ansible-galaxy`` display a progress wheel which can cause issues on certain displays or when outputing the stdout to a file. - This config option controls whether the display wheel is shown or not. - The default is to show the display wheel if stdout has a tty. env: [{name: ANSIBLE_GALAXY_DISPLAY_PROGRESS}] ini: - {key: display_progress, section: galaxy} type: bool version_added: "2.10" GALAXY_CACHE_DIR: default: ~/.ansible/galaxy_cache description: - The directory that stores cached responses from a Galaxy server. - This is only used by the ``ansible-galaxy collection install`` and ``download`` commands. - Cache files inside this dir will be ignored if they are world writable. env: - name: ANSIBLE_GALAXY_CACHE_DIR ini: - section: galaxy key: cache_dir type: path version_added: '2.11' HOST_KEY_CHECKING: # note: constant not in use by ssh plugin anymore # TODO: check non ssh connection plugins for use/migration name: Check host keys default: True description: 'Set this to "False" if you want to avoid host key checking by the underlying tools Ansible uses to connect to the host' env: [{name: ANSIBLE_HOST_KEY_CHECKING}] ini: - {key: host_key_checking, section: defaults} type: boolean HOST_PATTERN_MISMATCH: name: Control host pattern mismatch behaviour default: 'warning' description: This setting changes the behaviour of mismatched host patterns, it allows you to force a fatal error, a warning or just ignore it env: [{name: ANSIBLE_HOST_PATTERN_MISMATCH}] ini: - {key: host_pattern_mismatch, section: inventory} choices: ['warning', 'error', 'ignore'] version_added: "2.8" INTERPRETER_PYTHON: name: Python interpreter path (or automatic discovery behavior) used for module execution default: auto env: [{name: ANSIBLE_PYTHON_INTERPRETER}] ini: - {key: interpreter_python, section: defaults} vars: - {name: ansible_python_interpreter} version_added: "2.8" description: - Path to the Python interpreter to be used for module execution on remote targets, or an automatic discovery mode. Supported discovery modes are ``auto`` (the default), ``auto_silent``, ``auto_legacy``, and ``auto_legacy_silent``. All discovery modes employ a lookup table to use the included system Python (on distributions known to include one), falling back to a fixed ordered list of well-known Python interpreter locations if a platform-specific default is not available. The fallback behavior will issue a warning that the interpreter should be set explicitly (since interpreters installed later may change which one is used). This warning behavior can be disabled by setting ``auto_silent`` or ``auto_legacy_silent``. The value of ``auto_legacy`` provides all the same behavior, but for backwards-compatibility with older Ansible releases that always defaulted to ``/usr/bin/python``, will use that interpreter if present. INTERPRETER_PYTHON_DISTRO_MAP: name: Mapping of known included platform pythons for various Linux distros default: centos: &rhelish '6': /usr/bin/python '8': /usr/libexec/platform-python '9': /usr/bin/python3 debian: '8': /usr/bin/python '10': /usr/bin/python3 fedora: '23': /usr/bin/python3 oracle: *rhelish redhat: *rhelish rhel: *rhelish ubuntu: '14': /usr/bin/python '16': /usr/bin/python3 version_added: "2.8" # FUTURE: add inventory override once we're sure it can't be abused by a rogue target # FUTURE: add a platform layer to the map so we could use for, eg, freebsd/macos/etc? INTERPRETER_PYTHON_FALLBACK: name: Ordered list of Python interpreters to check for in discovery default: - python3.10 - python3.9 - python3.8 - python3.7 - python3.6 - python3.5 - /usr/bin/python3 - /usr/libexec/platform-python - python2.7 - python2.6 - /usr/bin/python - python vars: - name: ansible_interpreter_python_fallback type: list version_added: "2.8" TRANSFORM_INVALID_GROUP_CHARS: name: Transform invalid characters in group names default: 'never' description: - Make ansible transform invalid characters in group names supplied by inventory sources. - If 'never' it will allow for the group name but warn about the issue. - When 'ignore', it does the same as 'never', without issuing a warning. - When 'always' it will replace any invalid characters with '_' (underscore) and warn the user - When 'silently', it does the same as 'always', without issuing a warning. env: [{name: ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS}] ini: - {key: force_valid_group_names, section: defaults} type: string choices: ['always', 'never', 'ignore', 'silently'] version_added: '2.8' INVALID_TASK_ATTRIBUTE_FAILED: name: Controls whether invalid attributes for a task result in errors instead of warnings default: True description: If 'false', invalid attributes for a task will result in warnings instead of errors type: boolean env: - name: ANSIBLE_INVALID_TASK_ATTRIBUTE_FAILED ini: - key: invalid_task_attribute_failed section: defaults version_added: "2.7" INVENTORY_ANY_UNPARSED_IS_FAILED: name: Controls whether any unparseable inventory source is a fatal error default: False description: > If 'true', it is a fatal error when any given inventory source cannot be successfully parsed by any available inventory plugin; otherwise, this situation only attracts a warning. type: boolean env: [{name: ANSIBLE_INVENTORY_ANY_UNPARSED_IS_FAILED}] ini: - {key: any_unparsed_is_failed, section: inventory} version_added: "2.7" INVENTORY_CACHE_ENABLED: name: Inventory caching enabled default: False description: - Toggle to turn on inventory caching. - This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. - The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory configuration. - This message will be removed in 2.16. env: [{name: ANSIBLE_INVENTORY_CACHE}] ini: - {key: cache, section: inventory} type: bool INVENTORY_CACHE_PLUGIN: name: Inventory cache plugin description: - The plugin for caching inventory. - This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. - The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. - This message will be removed in 2.16. env: [{name: ANSIBLE_INVENTORY_CACHE_PLUGIN}] ini: - {key: cache_plugin, section: inventory} INVENTORY_CACHE_PLUGIN_CONNECTION: name: Inventory cache plugin URI to override the defaults section description: - The inventory cache connection. - This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. - The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. - This message will be removed in 2.16. env: [{name: ANSIBLE_INVENTORY_CACHE_CONNECTION}] ini: - {key: cache_connection, section: inventory} INVENTORY_CACHE_PLUGIN_PREFIX: name: Inventory cache plugin table prefix description: - The table prefix for the cache plugin. - This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. - The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. - This message will be removed in 2.16. env: [{name: ANSIBLE_INVENTORY_CACHE_PLUGIN_PREFIX}] default: ansible_inventory_ ini: - {key: cache_prefix, section: inventory} INVENTORY_CACHE_TIMEOUT: name: Inventory cache plugin expiration timeout description: - Expiration timeout for the inventory cache plugin data. - This setting has been moved to the individual inventory plugins as a plugin option :ref:`inventory_plugins`. - The existing configuration settings are still accepted with the inventory plugin adding additional options from inventory and fact cache configuration. - This message will be removed in 2.16. default: 3600 env: [{name: ANSIBLE_INVENTORY_CACHE_TIMEOUT}] ini: - {key: cache_timeout, section: inventory} INVENTORY_ENABLED: name: Active Inventory plugins default: ['host_list', 'script', 'auto', 'yaml', 'ini', 'toml'] description: List of enabled inventory plugins, it also determines the order in which they are used. env: [{name: ANSIBLE_INVENTORY_ENABLED}] ini: - {key: enable_plugins, section: inventory} type: list INVENTORY_EXPORT: name: Set ansible-inventory into export mode default: False description: Controls if ansible-inventory will accurately reflect Ansible's view into inventory or its optimized for exporting. env: [{name: ANSIBLE_INVENTORY_EXPORT}] ini: - {key: export, section: inventory} type: bool INVENTORY_IGNORE_EXTS: name: Inventory ignore extensions default: "{{(REJECT_EXTS + ('.orig', '.ini', '.cfg', '.retry'))}}" description: List of extensions to ignore when using a directory as an inventory source env: [{name: ANSIBLE_INVENTORY_IGNORE}] ini: - {key: inventory_ignore_extensions, section: defaults} - {key: ignore_extensions, section: inventory} type: list INVENTORY_IGNORE_PATTERNS: name: Inventory ignore patterns default: [] description: List of patterns to ignore when using a directory as an inventory source env: [{name: ANSIBLE_INVENTORY_IGNORE_REGEX}] ini: - {key: inventory_ignore_patterns, section: defaults} - {key: ignore_patterns, section: inventory} type: list INVENTORY_UNPARSED_IS_FAILED: name: Unparsed Inventory failure default: False description: > If 'true' it is a fatal error if every single potential inventory source fails to parse, otherwise this situation will only attract a warning. env: [{name: ANSIBLE_INVENTORY_UNPARSED_FAILED}] ini: - {key: unparsed_is_failed, section: inventory} type: bool MAX_FILE_SIZE_FOR_DIFF: name: Diff maximum file size default: 104448 description: Maximum size of files to be considered for diff display env: [{name: ANSIBLE_MAX_DIFF_SIZE}] ini: - {key: max_diff_size, section: defaults} type: int JINJA2_NATIVE_WARNING: name: Running older than required Jinja version for jinja2_native warning default: True description: Toggle to control showing warnings related to running a Jinja version older than required for jinja2_native env: [{name: ANSIBLE_JINJA2_NATIVE_WARNING}] ini: - {key: jinja2_native_warning, section: defaults} type: boolean NETWORK_GROUP_MODULES: name: Network module families default: [eos, nxos, ios, iosxr, junos, enos, ce, vyos, sros, dellos9, dellos10, dellos6, asa, aruba, aireos, bigip, ironware, onyx, netconf, exos, voss, slxos] description: 'TODO: write it' env: - name: NETWORK_GROUP_MODULES deprecated: why: environment variables without ``ANSIBLE_`` prefix are deprecated version: "2.12" alternatives: the ``ANSIBLE_NETWORK_GROUP_MODULES`` environment variable - name: ANSIBLE_NETWORK_GROUP_MODULES ini: - {key: network_group_modules, section: defaults} type: list yaml: {key: defaults.network_group_modules} INJECT_FACTS_AS_VARS: default: True description: - Facts are available inside the `ansible_facts` variable, this setting also pushes them as their own vars in the main namespace. - Unlike inside the `ansible_facts` dictionary, these will have an `ansible_` prefix. env: [{name: ANSIBLE_INJECT_FACT_VARS}] ini: - {key: inject_facts_as_vars, section: defaults} type: boolean version_added: "2.5" MODULE_IGNORE_EXTS: name: Module ignore extensions default: "{{(REJECT_EXTS + ('.yaml', '.yml', '.ini'))}}" description: - List of extensions to ignore when looking for modules to load - This is for rejecting script and binary module fallback extensions env: [{name: ANSIBLE_MODULE_IGNORE_EXTS}] ini: - {key: module_ignore_exts, section: defaults} type: list OLD_PLUGIN_CACHE_CLEARING: description: Previously Ansible would only clear some of the plugin loading caches when loading new roles, this led to some behaviours in which a plugin loaded in prevoius plays would be unexpectedly 'sticky'. This setting allows to return to that behaviour. env: [{name: ANSIBLE_OLD_PLUGIN_CACHE_CLEAR}] ini: - {key: old_plugin_cache_clear, section: defaults} type: boolean default: False version_added: "2.8" PARAMIKO_HOST_KEY_AUTO_ADD: # TODO: move to plugin default: False description: 'TODO: write it' env: [{name: ANSIBLE_PARAMIKO_HOST_KEY_AUTO_ADD}] ini: - {key: host_key_auto_add, section: paramiko_connection} type: boolean PARAMIKO_LOOK_FOR_KEYS: name: look for keys default: True description: 'TODO: write it' env: [{name: ANSIBLE_PARAMIKO_LOOK_FOR_KEYS}] ini: - {key: look_for_keys, section: paramiko_connection} type: boolean PERSISTENT_CONTROL_PATH_DIR: name: Persistence socket path default: ~/.ansible/pc description: Path to socket to be used by the connection persistence system. env: [{name: ANSIBLE_PERSISTENT_CONTROL_PATH_DIR}] ini: - {key: control_path_dir, section: persistent_connection} type: path PERSISTENT_CONNECT_TIMEOUT: name: Persistence timeout default: 30 description: This controls how long the persistent connection will remain idle before it is destroyed. env: [{name: ANSIBLE_PERSISTENT_CONNECT_TIMEOUT}] ini: - {key: connect_timeout, section: persistent_connection} type: integer PERSISTENT_CONNECT_RETRY_TIMEOUT: name: Persistence connection retry timeout default: 15 description: This controls the retry timeout for persistent connection to connect to the local domain socket. env: [{name: ANSIBLE_PERSISTENT_CONNECT_RETRY_TIMEOUT}] ini: - {key: connect_retry_timeout, section: persistent_connection} type: integer PERSISTENT_COMMAND_TIMEOUT: name: Persistence command timeout default: 30 description: This controls the amount of time to wait for response from remote device before timing out persistent connection. env: [{name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT}] ini: - {key: command_timeout, section: persistent_connection} type: int PLAYBOOK_DIR: name: playbook dir override for non-playbook CLIs (ala --playbook-dir) version_added: "2.9" description: - A number of non-playbook CLIs have a ``--playbook-dir`` argument; this sets the default value for it. env: [{name: ANSIBLE_PLAYBOOK_DIR}] ini: [{key: playbook_dir, section: defaults}] type: path PLAYBOOK_VARS_ROOT: name: playbook vars files root default: top version_added: "2.4.1" description: - This sets which playbook dirs will be used as a root to process vars plugins, which includes finding host_vars/group_vars - The ``top`` option follows the traditional behaviour of using the top playbook in the chain to find the root directory. - The ``bottom`` option follows the 2.4.0 behaviour of using the current playbook to find the root directory. - The ``all`` option examines from the first parent to the current playbook. env: [{name: ANSIBLE_PLAYBOOK_VARS_ROOT}] ini: - {key: playbook_vars_root, section: defaults} choices: [ top, bottom, all ] PLUGIN_FILTERS_CFG: name: Config file for limiting valid plugins default: null version_added: "2.5.0" description: - "A path to configuration for filtering which plugins installed on the system are allowed to be used." - "See :ref:`plugin_filtering_config` for details of the filter file's format." - " The default is /etc/ansible/plugin_filters.yml" ini: - key: plugin_filters_cfg section: default deprecated: why: specifying "plugin_filters_cfg" under the "default" section is deprecated version: "2.12" alternatives: the "defaults" section instead - key: plugin_filters_cfg section: defaults type: path PYTHON_MODULE_RLIMIT_NOFILE: name: Adjust maximum file descriptor soft limit during Python module execution description: - Attempts to set RLIMIT_NOFILE soft limit to the specified value when executing Python modules (can speed up subprocess usage on Python 2.x. See https://bugs.python.org/issue11284). The value will be limited by the existing hard limit. Default value of 0 does not attempt to adjust existing system-defined limits. default: 0 env: - {name: ANSIBLE_PYTHON_MODULE_RLIMIT_NOFILE} ini: - {key: python_module_rlimit_nofile, section: defaults} vars: - {name: ansible_python_module_rlimit_nofile} version_added: '2.8' RETRY_FILES_ENABLED: name: Retry files default: False description: This controls whether a failed Ansible playbook should create a .retry file. env: [{name: ANSIBLE_RETRY_FILES_ENABLED}] ini: - {key: retry_files_enabled, section: defaults} type: bool RETRY_FILES_SAVE_PATH: name: Retry files path default: ~ description: - This sets the path in which Ansible will save .retry files when a playbook fails and retry files are enabled. - This file will be overwritten after each run with the list of failed hosts from all plays. env: [{name: ANSIBLE_RETRY_FILES_SAVE_PATH}] ini: - {key: retry_files_save_path, section: defaults} type: path RUN_VARS_PLUGINS: name: When should vars plugins run relative to inventory default: demand description: - This setting can be used to optimize vars_plugin usage depending on user's inventory size and play selection. - Setting to C(demand) will run vars_plugins relative to inventory sources anytime vars are 'demanded' by tasks. - Setting to C(start) will run vars_plugins relative to inventory sources after importing that inventory source. env: [{name: ANSIBLE_RUN_VARS_PLUGINS}] ini: - {key: run_vars_plugins, section: defaults} type: str choices: ['demand', 'start'] version_added: "2.10" SHOW_CUSTOM_STATS: name: Display custom stats default: False description: 'This adds the custom stats set via the set_stats plugin to the default output' env: [{name: ANSIBLE_SHOW_CUSTOM_STATS}] ini: - {key: show_custom_stats, section: defaults} type: bool STRING_TYPE_FILTERS: name: Filters to preserve strings default: [string, to_json, to_nice_json, to_yaml, to_nice_yaml, ppretty, json] description: - "This list of filters avoids 'type conversion' when templating variables" - Useful when you want to avoid conversion into lists or dictionaries for JSON strings, for example. env: [{name: ANSIBLE_STRING_TYPE_FILTERS}] ini: - {key: dont_type_filters, section: jinja2} type: list SYSTEM_WARNINGS: name: System warnings default: True description: - Allows disabling of warnings related to potential issues on the system running ansible itself (not on the managed hosts) - These may include warnings about 3rd party packages or other conditions that should be resolved if possible. env: [{name: ANSIBLE_SYSTEM_WARNINGS}] ini: - {key: system_warnings, section: defaults} type: boolean TAGS_RUN: name: Run Tags default: [] type: list description: default list of tags to run in your plays, Skip Tags has precedence. env: [{name: ANSIBLE_RUN_TAGS}] ini: - {key: run, section: tags} version_added: "2.5" TAGS_SKIP: name: Skip Tags default: [] type: list description: default list of tags to skip in your plays, has precedence over Run Tags env: [{name: ANSIBLE_SKIP_TAGS}] ini: - {key: skip, section: tags} version_added: "2.5" TASK_TIMEOUT: name: Task Timeout default: 0 description: - Set the maximum time (in seconds) that a task can run for. - If set to 0 (the default) there is no timeout. env: [{name: ANSIBLE_TASK_TIMEOUT}] ini: - {key: task_timeout, section: defaults} type: integer version_added: '2.10' WORKER_SHUTDOWN_POLL_COUNT: name: Worker Shutdown Poll Count default: 0 description: - The maximum number of times to check Task Queue Manager worker processes to verify they have exited cleanly. - After this limit is reached any worker processes still running will be terminated. - This is for internal use only. env: [{name: ANSIBLE_WORKER_SHUTDOWN_POLL_COUNT}] type: integer version_added: '2.10' WORKER_SHUTDOWN_POLL_DELAY: name: Worker Shutdown Poll Delay default: 0.1 description: - The number of seconds to sleep between polling loops when checking Task Queue Manager worker processes to verify they have exited cleanly. - This is for internal use only. env: [{name: ANSIBLE_WORKER_SHUTDOWN_POLL_DELAY}] type: float version_added: '2.10' USE_PERSISTENT_CONNECTIONS: name: Persistence default: False description: Toggles the use of persistence for connections. env: [{name: ANSIBLE_USE_PERSISTENT_CONNECTIONS}] ini: - {key: use_persistent_connections, section: defaults} type: boolean VARIABLE_PLUGINS_ENABLED: name: Vars plugin enabled list default: ['host_group_vars'] description: Whitelist for variable plugins that require it. env: [{name: ANSIBLE_VARS_ENABLED}] ini: - {key: vars_plugins_enabled, section: defaults} type: list version_added: "2.10" VARIABLE_PRECEDENCE: name: Group variable precedence default: ['all_inventory', 'groups_inventory', 'all_plugins_inventory', 'all_plugins_play', 'groups_plugins_inventory', 'groups_plugins_play'] description: Allows to change the group variable precedence merge order. env: [{name: ANSIBLE_PRECEDENCE}] ini: - {key: precedence, section: defaults} type: list version_added: "2.4" WIN_ASYNC_STARTUP_TIMEOUT: name: Windows Async Startup Timeout default: 5 description: - For asynchronous tasks in Ansible (covered in Asynchronous Actions and Polling), this is how long, in seconds, to wait for the task spawned by Ansible to connect back to the named pipe used on Windows systems. The default is 5 seconds. This can be too low on slower systems, or systems under heavy load. - This is not the total time an async command can run for, but is a separate timeout to wait for an async command to start. The task will only start to be timed against its async_timeout once it has connected to the pipe, so the overall maximum duration the task can take will be extended by the amount specified here. env: [{name: ANSIBLE_WIN_ASYNC_STARTUP_TIMEOUT}] ini: - {key: win_async_startup_timeout, section: defaults} type: integer vars: - {name: ansible_win_async_startup_timeout} version_added: '2.10' YAML_FILENAME_EXTENSIONS: name: Valid YAML extensions default: [".yml", ".yaml", ".json"] description: - "Check all of these extensions when looking for 'variable' files which should be YAML or JSON or vaulted versions of these." - 'This affects vars_files, include_vars, inventory and vars plugins among others.' env: - name: ANSIBLE_YAML_FILENAME_EXT ini: - section: defaults key: yaml_valid_extensions type: list NETCONF_SSH_CONFIG: description: This variable is used to enable bastion/jump host with netconf connection. If set to True the bastion/jump host ssh settings should be present in ~/.ssh/config file, alternatively it can be set to custom ssh configuration file path to read the bastion/jump host settings. env: [{name: ANSIBLE_NETCONF_SSH_CONFIG}] ini: - {key: ssh_config, section: netconf_connection} yaml: {key: netconf_connection.ssh_config} default: null STRING_CONVERSION_ACTION: version_added: '2.8' description: - Action to take when a module parameter value is converted to a string (this does not affect variables). For string parameters, values such as '1.00', "['a', 'b',]", and 'yes', 'y', etc. will be converted by the YAML parser unless fully quoted. - Valid options are 'error', 'warn', and 'ignore'. - Since 2.8, this option defaults to 'warn' but will change to 'error' in 2.12. default: 'warn' env: - name: ANSIBLE_STRING_CONVERSION_ACTION ini: - section: defaults key: string_conversion_action type: string VALIDATE_ACTION_GROUP_METADATA: version_added: '2.12' description: - A toggle to disable validating a collection's 'metadata' entry for a module_defaults action group. Metadata containing unexpected fields or value types will produce a warning when this is True. default: True env: [{name: ANSIBLE_VALIDATE_ACTION_GROUP_METADATA}] ini: - section: defaults key: validate_action_group_metadata type: bool VERBOSE_TO_STDERR: version_added: '2.8' description: - Force 'verbose' option to use stderr instead of stdout default: False env: - name: ANSIBLE_VERBOSE_TO_STDERR ini: - section: defaults key: verbose_to_stderr type: bool ... ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.551556 ansible-core-2.12.0/lib/ansible/config/data.py0000644000000000000000000000276600000000000021024 0ustar00rootroot00000000000000# Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type class ConfigData(object): def __init__(self): self._global_settings = {} self._plugins = {} def get_setting(self, name, plugin=None): setting = None if plugin is None: setting = self._global_settings.get(name) elif plugin.type in self._plugins and plugin.name in self._plugins[plugin.type]: setting = self._plugins[plugin.type][plugin.name].get(name) return setting def get_settings(self, plugin=None): settings = [] if plugin is None: settings = [self._global_settings[k] for k in self._global_settings] elif plugin.type in self._plugins and plugin.name in self._plugins[plugin.type]: settings = [self._plugins[plugin.type][plugin.name][k] for k in self._plugins[plugin.type][plugin.name]] return settings def update_setting(self, setting, plugin=None): if plugin is None: self._global_settings[setting.name] = setting else: if plugin.type not in self._plugins: self._plugins[plugin.type] = {} if plugin.name not in self._plugins[plugin.type]: self._plugins[plugin.type][plugin.name] = {} self._plugins[plugin.type][plugin.name][setting.name] = setting ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.551556 ansible-core-2.12.0/lib/ansible/config/manager.py0000644000000000000000000006215500000000000021523 0ustar00rootroot00000000000000# Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import atexit import io import os import os.path import sys import stat import tempfile import traceback from collections import namedtuple from ansible.config.data import ConfigData from ansible.errors import AnsibleOptionsError, AnsibleError from ansible.module_utils._text import to_text, to_bytes, to_native from ansible.module_utils.common._collections_compat import Mapping, Sequence from ansible.module_utils.common.yaml import yaml_load from ansible.module_utils.six import string_types from ansible.module_utils.six.moves import configparser from ansible.module_utils.parsing.convert_bool import boolean from ansible.parsing.quoting import unquote from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode from ansible.utils import py3compat from ansible.utils.path import cleanup_tmp_file, makedirs_safe, unfrackpath Plugin = namedtuple('Plugin', 'name type') Setting = namedtuple('Setting', 'name value origin type') INTERNAL_DEFS = {'lookup': ('_terms',)} def _get_entry(plugin_type, plugin_name, config): ''' construct entry for requested config ''' entry = '' if plugin_type: entry += 'plugin_type: %s ' % plugin_type if plugin_name: entry += 'plugin: %s ' % plugin_name entry += 'setting: %s ' % config return entry # FIXME: see if we can unify in module_utils with similar function used by argspec def ensure_type(value, value_type, origin=None): ''' return a configuration variable with casting :arg value: The value to ensure correct typing of :kwarg value_type: The type of the value. This can be any of the following strings: :boolean: sets the value to a True or False value :bool: Same as 'boolean' :integer: Sets the value to an integer or raises a ValueType error :int: Same as 'integer' :float: Sets the value to a float or raises a ValueType error :list: Treats the value as a comma separated list. Split the value and return it as a python list. :none: Sets the value to None :path: Expands any environment variables and tilde's in the value. :tmppath: Create a unique temporary directory inside of the directory specified by value and return its path. :temppath: Same as 'tmppath' :tmp: Same as 'tmppath' :pathlist: Treat the value as a typical PATH string. (On POSIX, this means colon separated strings.) Split the value and then expand each part for environment variables and tildes. :pathspec: Treat the value as a PATH string. Expands any environment variables tildes's in the value. :str: Sets the value to string types. :string: Same as 'str' ''' errmsg = '' basedir = None if origin and os.path.isabs(origin) and os.path.exists(to_bytes(origin)): basedir = origin if value_type: value_type = value_type.lower() if value is not None: if value_type in ('boolean', 'bool'): value = boolean(value, strict=False) elif value_type in ('integer', 'int'): value = int(value) elif value_type == 'float': value = float(value) elif value_type == 'list': if isinstance(value, string_types): value = [unquote(x.strip()) for x in value.split(',')] elif not isinstance(value, Sequence): errmsg = 'list' elif value_type == 'none': if value == "None": value = None if value is not None: errmsg = 'None' elif value_type == 'path': if isinstance(value, string_types): value = resolve_path(value, basedir=basedir) else: errmsg = 'path' elif value_type in ('tmp', 'temppath', 'tmppath'): if isinstance(value, string_types): value = resolve_path(value, basedir=basedir) if not os.path.exists(value): makedirs_safe(value, 0o700) prefix = 'ansible-local-%s' % os.getpid() value = tempfile.mkdtemp(prefix=prefix, dir=value) atexit.register(cleanup_tmp_file, value, warn=True) else: errmsg = 'temppath' elif value_type == 'pathspec': if isinstance(value, string_types): value = value.split(os.pathsep) if isinstance(value, Sequence): value = [resolve_path(x, basedir=basedir) for x in value] else: errmsg = 'pathspec' elif value_type == 'pathlist': if isinstance(value, string_types): value = [x.strip() for x in value.split(',')] if isinstance(value, Sequence): value = [resolve_path(x, basedir=basedir) for x in value] else: errmsg = 'pathlist' elif value_type in ('dict', 'dictionary'): if not isinstance(value, Mapping): errmsg = 'dictionary' elif value_type in ('str', 'string'): if isinstance(value, (string_types, AnsibleVaultEncryptedUnicode, bool, int, float, complex)): value = unquote(to_text(value, errors='surrogate_or_strict')) else: errmsg = 'string' # defaults to string type elif isinstance(value, (string_types, AnsibleVaultEncryptedUnicode)): value = unquote(to_text(value, errors='surrogate_or_strict')) if errmsg: raise ValueError('Invalid type provided for "%s": %s' % (errmsg, to_native(value))) return to_text(value, errors='surrogate_or_strict', nonstring='passthru') # FIXME: see if this can live in utils/path def resolve_path(path, basedir=None): ''' resolve relative or 'variable' paths ''' if '{{CWD}}' in path: # allow users to force CWD using 'magic' {{CWD}} path = path.replace('{{CWD}}', os.getcwd()) return unfrackpath(path, follow=False, basedir=basedir) # FIXME: generic file type? def get_config_type(cfile): ftype = None if cfile is not None: ext = os.path.splitext(cfile)[-1] if ext in ('.ini', '.cfg'): ftype = 'ini' elif ext in ('.yaml', '.yml'): ftype = 'yaml' else: raise AnsibleOptionsError("Unsupported configuration file extension for %s: %s" % (cfile, to_native(ext))) return ftype # FIXME: can move to module_utils for use for ini plugins also? def get_ini_config_value(p, entry): ''' returns the value of last ini entry found ''' value = None if p is not None: try: value = p.get(entry.get('section', 'defaults'), entry.get('key', ''), raw=True) except Exception: # FIXME: actually report issues here pass return value def find_ini_config_file(warnings=None): ''' Load INI Config File order(first found is used): ENV, CWD, HOME, /etc/ansible ''' # FIXME: eventually deprecate ini configs if warnings is None: # Note: In this case, warnings does nothing warnings = set() # A value that can never be a valid path so that we can tell if ANSIBLE_CONFIG was set later # We can't use None because we could set path to None. SENTINEL = object potential_paths = [] # Environment setting path_from_env = os.getenv("ANSIBLE_CONFIG", SENTINEL) if path_from_env is not SENTINEL: path_from_env = unfrackpath(path_from_env, follow=False) if os.path.isdir(to_bytes(path_from_env)): path_from_env = os.path.join(path_from_env, "ansible.cfg") potential_paths.append(path_from_env) # Current working directory warn_cmd_public = False try: cwd = os.getcwd() perms = os.stat(cwd) cwd_cfg = os.path.join(cwd, "ansible.cfg") if perms.st_mode & stat.S_IWOTH: # Working directory is world writable so we'll skip it. # Still have to look for a file here, though, so that we know if we have to warn if os.path.exists(cwd_cfg): warn_cmd_public = True else: potential_paths.append(to_text(cwd_cfg, errors='surrogate_or_strict')) except OSError: # If we can't access cwd, we'll simply skip it as a possible config source pass # Per user location potential_paths.append(unfrackpath("~/.ansible.cfg", follow=False)) # System location potential_paths.append("/etc/ansible/ansible.cfg") for path in potential_paths: b_path = to_bytes(path) if os.path.exists(b_path) and os.access(b_path, os.R_OK): break else: path = None # Emit a warning if all the following are true: # * We did not use a config from ANSIBLE_CONFIG # * There's an ansible.cfg in the current working directory that we skipped if path_from_env != path and warn_cmd_public: warnings.add(u"Ansible is being run in a world writable directory (%s)," u" ignoring it as an ansible.cfg source." u" For more information see" u" https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir" % to_text(cwd)) return path def _add_base_defs_deprecations(base_defs): '''Add deprecation source 'ansible.builtin' to deprecations in base.yml''' def process(entry): if 'deprecated' in entry: entry['deprecated']['collection_name'] = 'ansible.builtin' for dummy, data in base_defs.items(): process(data) for section in ('ini', 'env', 'vars'): if section in data: for entry in data[section]: process(entry) class ConfigManager(object): DEPRECATED = [] WARNINGS = set() def __init__(self, conf_file=None, defs_file=None): self._base_defs = {} self._plugins = {} self._parsers = {} self._config_file = conf_file self.data = ConfigData() self._base_defs = self._read_config_yaml_file(defs_file or ('%s/base.yml' % os.path.dirname(__file__))) _add_base_defs_deprecations(self._base_defs) if self._config_file is None: # set config using ini self._config_file = find_ini_config_file(self.WARNINGS) # consume configuration if self._config_file: # initialize parser and read config self._parse_config_file() # update constants self.update_config_data() def _read_config_yaml_file(self, yml_file): # TODO: handle relative paths as relative to the directory containing the current playbook instead of CWD # Currently this is only used with absolute paths to the `ansible/config` directory yml_file = to_bytes(yml_file) if os.path.exists(yml_file): with open(yml_file, 'rb') as config_def: return yaml_load(config_def) or {} raise AnsibleError( "Missing base YAML definition file (bad install?): %s" % to_native(yml_file)) def _parse_config_file(self, cfile=None): ''' return flat configuration settings from file(s) ''' # TODO: take list of files with merge/nomerge if cfile is None: cfile = self._config_file ftype = get_config_type(cfile) if cfile is not None: if ftype == 'ini': self._parsers[cfile] = configparser.ConfigParser(inline_comment_prefixes=(';',)) with open(to_bytes(cfile), 'rb') as f: try: cfg_text = to_text(f.read(), errors='surrogate_or_strict') except UnicodeError as e: raise AnsibleOptionsError("Error reading config file(%s) because the config file was not utf8 encoded: %s" % (cfile, to_native(e))) try: self._parsers[cfile].read_string(cfg_text) except configparser.Error as e: raise AnsibleOptionsError("Error reading config file (%s): %s" % (cfile, to_native(e))) # FIXME: this should eventually handle yaml config files # elif ftype == 'yaml': # with open(cfile, 'rb') as config_stream: # self._parsers[cfile] = yaml_load(config_stream) else: raise AnsibleOptionsError("Unsupported configuration file type: %s" % to_native(ftype)) def _find_yaml_config_files(self): ''' Load YAML Config Files in order, check merge flags, keep origin of settings''' pass def get_plugin_options(self, plugin_type, name, keys=None, variables=None, direct=None): options = {} defs = self.get_configuration_definitions(plugin_type, name) for option in defs: options[option] = self.get_config_value(option, plugin_type=plugin_type, plugin_name=name, keys=keys, variables=variables, direct=direct) return options def get_plugin_vars(self, plugin_type, name): pvars = [] for pdef in self.get_configuration_definitions(plugin_type, name).values(): if 'vars' in pdef and pdef['vars']: for var_entry in pdef['vars']: pvars.append(var_entry['name']) return pvars def get_configuration_definition(self, name, plugin_type=None, plugin_name=None): ret = {} if plugin_type is None: ret = self._base_defs.get(name, None) elif plugin_name is None: ret = self._plugins.get(plugin_type, {}).get(name, None) else: ret = self._plugins.get(plugin_type, {}).get(plugin_name, {}).get(name, None) return ret def get_configuration_definitions(self, plugin_type=None, name=None, ignore_private=False): ''' just list the possible settings, either base or for specific plugins or plugin ''' ret = {} if plugin_type is None: ret = self._base_defs elif name is None: ret = self._plugins.get(plugin_type, {}) else: ret = self._plugins.get(plugin_type, {}).get(name, {}) if ignore_private: for cdef in list(ret.keys()): if cdef.startswith('_'): del ret[cdef] return ret def _loop_entries(self, container, entry_list): ''' repeat code for value entry assignment ''' value = None origin = None for entry in entry_list: name = entry.get('name') try: temp_value = container.get(name, None) except UnicodeEncodeError: self.WARNINGS.add(u'value for config entry {0} contains invalid characters, ignoring...'.format(to_text(name))) continue if temp_value is not None: # only set if entry is defined in container # inline vault variables should be converted to a text string if isinstance(temp_value, AnsibleVaultEncryptedUnicode): temp_value = to_text(temp_value, errors='surrogate_or_strict') value = temp_value origin = name # deal with deprecation of setting source, if used if 'deprecated' in entry: self.DEPRECATED.append((entry['name'], entry['deprecated'])) return value, origin def get_config_value(self, config, cfile=None, plugin_type=None, plugin_name=None, keys=None, variables=None, direct=None): ''' wrapper ''' try: value, _drop = self.get_config_value_and_origin(config, cfile=cfile, plugin_type=plugin_type, plugin_name=plugin_name, keys=keys, variables=variables, direct=direct) except AnsibleError: raise except Exception as e: raise AnsibleError("Unhandled exception when retrieving %s:\n%s" % (config, to_native(e)), orig_exc=e) return value def get_config_value_and_origin(self, config, cfile=None, plugin_type=None, plugin_name=None, keys=None, variables=None, direct=None): ''' Given a config key figure out the actual value and report on the origin of the settings ''' if cfile is None: # use default config cfile = self._config_file # Note: sources that are lists listed in low to high precedence (last one wins) value = None origin = None defs = self.get_configuration_definitions(plugin_type, plugin_name) if config in defs: aliases = defs[config].get('aliases', []) # direct setting via plugin arguments, can set to None so we bypass rest of processing/defaults direct_aliases = [] if direct: direct_aliases = [direct[alias] for alias in aliases if alias in direct] if direct and config in direct: value = direct[config] origin = 'Direct' elif direct and direct_aliases: value = direct_aliases[0] origin = 'Direct' else: # Use 'variable overrides' if present, highest precedence, but only present when querying running play if variables and defs[config].get('vars'): value, origin = self._loop_entries(variables, defs[config]['vars']) origin = 'var: %s' % origin # use playbook keywords if you have em if value is None and keys: if config in keys: value = keys[config] keyword = config elif aliases: for alias in aliases: if alias in keys: value = keys[alias] keyword = alias break if value is not None: origin = 'keyword: %s' % keyword if value is None and 'cli' in defs[config]: # avoid circular import .. until valid from ansible import context value, origin = self._loop_entries(context.CLIARGS, defs[config]['cli']) origin = 'cli: %s' % origin # env vars are next precedence if value is None and defs[config].get('env'): value, origin = self._loop_entries(py3compat.environ, defs[config]['env']) origin = 'env: %s' % origin # try config file entries next, if we have one if self._parsers.get(cfile, None) is None: self._parse_config_file(cfile) if value is None and cfile is not None: ftype = get_config_type(cfile) if ftype and defs[config].get(ftype): if ftype == 'ini': # load from ini config try: # FIXME: generalize _loop_entries to allow for files also, most of this code is dupe for ini_entry in defs[config]['ini']: temp_value = get_ini_config_value(self._parsers[cfile], ini_entry) if temp_value is not None: value = temp_value origin = cfile if 'deprecated' in ini_entry: self.DEPRECATED.append(('[%s]%s' % (ini_entry['section'], ini_entry['key']), ini_entry['deprecated'])) except Exception as e: sys.stderr.write("Error while loading ini config %s: %s" % (cfile, to_native(e))) elif ftype == 'yaml': # FIXME: implement, also , break down key from defs (. notation???) origin = cfile # set default if we got here w/o a value if value is None: if defs[config].get('required', False): if not plugin_type or config not in INTERNAL_DEFS.get(plugin_type, {}): raise AnsibleError("No setting was provided for required configuration %s" % to_native(_get_entry(plugin_type, plugin_name, config))) else: value = defs[config].get('default') origin = 'default' # skip typing as this is a templated default that will be resolved later in constants, which has needed vars if plugin_type is None and isinstance(value, string_types) and (value.startswith('{{') and value.endswith('}}')): return value, origin # ensure correct type, can raise exceptions on mismatched types try: value = ensure_type(value, defs[config].get('type'), origin=origin) except ValueError as e: if origin.startswith('env:') and value == '': # this is empty env var for non string so we can set to default origin = 'default' value = ensure_type(defs[config].get('default'), defs[config].get('type'), origin=origin) else: raise AnsibleOptionsError('Invalid type for configuration option %s: %s' % (to_native(_get_entry(plugin_type, plugin_name, config)), to_native(e))) # deal with restricted values if value is not None and 'choices' in defs[config] and defs[config]['choices'] is not None: invalid_choices = True # assume the worst! if defs[config].get('type') == 'list': # for a list type, compare all values in type are allowed invalid_choices = not all(choice in defs[config]['choices'] for choice in value) else: # these should be only the simple data types (string, int, bool, float, etc) .. ignore dicts for now invalid_choices = value not in defs[config]['choices'] if invalid_choices: raise AnsibleOptionsError('Invalid value "%s" for configuration option "%s", valid values are: %s' % (value, to_native(_get_entry(plugin_type, plugin_name, config)), defs[config]['choices'])) # deal with deprecation of the setting if 'deprecated' in defs[config] and origin != 'default': self.DEPRECATED.append((config, defs[config].get('deprecated'))) else: raise AnsibleError('Requested entry (%s) was not defined in configuration.' % to_native(_get_entry(plugin_type, plugin_name, config))) return value, origin def initialize_plugin_configuration_definitions(self, plugin_type, name, defs): if plugin_type not in self._plugins: self._plugins[plugin_type] = {} self._plugins[plugin_type][name] = defs def update_config_data(self, defs=None, configfile=None): ''' really: update constants ''' if defs is None: defs = self._base_defs if configfile is None: configfile = self._config_file if not isinstance(defs, dict): raise AnsibleOptionsError("Invalid configuration definition type: %s for %s" % (type(defs), defs)) # update the constant for config file self.data.update_setting(Setting('CONFIG_FILE', configfile, '', 'string')) origin = None # env and config defs can have several entries, ordered in list from lowest to highest precedence for config in defs: if not isinstance(defs[config], dict): raise AnsibleOptionsError("Invalid configuration definition '%s': type is %s" % (to_native(config), type(defs[config]))) # get value and origin try: value, origin = self.get_config_value_and_origin(config, configfile) except Exception as e: # Printing the problem here because, in the current code: # (1) we can't reach the error handler for AnsibleError before we # hit a different error due to lack of working config. # (2) We don't have access to display yet because display depends on config # being properly loaded. # # If we start getting double errors printed from this section of code, then the # above problem #1 has been fixed. Revamp this to be more like the try: except # in get_config_value() at that time. sys.stderr.write("Unhandled error:\n %s\n\n" % traceback.format_exc()) raise AnsibleError("Invalid settings supplied for %s: %s\n" % (config, to_native(e)), orig_exc=e) # set the constant self.data.update_setting(Setting(config, value, origin, defs[config].get('type', 'string'))) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.551556 ansible-core-2.12.0/lib/ansible/constants.py0000644000000000000000000002062000000000000020647 0ustar00rootroot00000000000000# Copyright: (c) 2012-2014, Michael DeHaan # Copyright: (c) 2017, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import re from ast import literal_eval from jinja2 import Template from string import ascii_letters, digits from ansible.config.manager import ConfigManager, ensure_type from ansible.module_utils._text import to_text from ansible.module_utils.common.collections import Sequence from ansible.module_utils.parsing.convert_bool import BOOLEANS_TRUE from ansible.module_utils.six import string_types from ansible.release import __version__ from ansible.utils.fqcn import add_internal_fqcns def _warning(msg): ''' display is not guaranteed here, nor it being the full class, but try anyways, fallback to sys.stderr.write ''' try: from ansible.utils.display import Display Display().warning(msg) except Exception: import sys sys.stderr.write(' [WARNING] %s\n' % (msg)) def _deprecated(msg, version): ''' display is not guaranteed here, nor it being the full class, but try anyways, fallback to sys.stderr.write ''' try: from ansible.utils.display import Display Display().deprecated(msg, version=version) except Exception: import sys sys.stderr.write(' [DEPRECATED] %s, to be removed in %s\n' % (msg, version)) def set_constant(name, value, export=vars()): ''' sets constants and returns resolved options dict ''' export[name] = value class _DeprecatedSequenceConstant(Sequence): def __init__(self, value, msg, version): self._value = value self._msg = msg self._version = version def __len__(self): _deprecated(self._msg, self._version) return len(self._value) def __getitem__(self, y): _deprecated(self._msg, self._version) return self._value[y] # CONSTANTS ### yes, actual ones # The following are hard-coded action names _ACTION_DEBUG = add_internal_fqcns(('debug', )) _ACTION_IMPORT_PLAYBOOK = add_internal_fqcns(('import_playbook', )) _ACTION_IMPORT_ROLE = add_internal_fqcns(('import_role', )) _ACTION_IMPORT_TASKS = add_internal_fqcns(('import_tasks', )) _ACTION_INCLUDE = add_internal_fqcns(('include', )) _ACTION_INCLUDE_ROLE = add_internal_fqcns(('include_role', )) _ACTION_INCLUDE_TASKS = add_internal_fqcns(('include_tasks', )) _ACTION_INCLUDE_VARS = add_internal_fqcns(('include_vars', )) _ACTION_META = add_internal_fqcns(('meta', )) _ACTION_SET_FACT = add_internal_fqcns(('set_fact', )) _ACTION_SETUP = add_internal_fqcns(('setup', )) _ACTION_HAS_CMD = add_internal_fqcns(('command', 'shell', 'script')) _ACTION_ALLOWS_RAW_ARGS = _ACTION_HAS_CMD + add_internal_fqcns(('raw', )) _ACTION_ALL_INCLUDES = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_INCLUDE_ROLE _ACTION_ALL_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS _ACTION_ALL_PROPER_INCLUDE_IMPORT_ROLES = _ACTION_INCLUDE_ROLE + _ACTION_IMPORT_ROLE _ACTION_ALL_PROPER_INCLUDE_IMPORT_TASKS = _ACTION_INCLUDE_TASKS + _ACTION_IMPORT_TASKS _ACTION_ALL_INCLUDE_ROLE_TASKS = _ACTION_INCLUDE_ROLE + _ACTION_INCLUDE_TASKS _ACTION_ALL_INCLUDE_TASKS = _ACTION_INCLUDE + _ACTION_INCLUDE_TASKS _ACTION_FACT_GATHERING = _ACTION_SETUP + add_internal_fqcns(('gather_facts', )) _ACTION_WITH_CLEAN_FACTS = _ACTION_SET_FACT + _ACTION_INCLUDE_VARS # http://nezzen.net/2008/06/23/colored-text-in-python-using-ansi-escape-sequences/ COLOR_CODES = { 'black': u'0;30', 'bright gray': u'0;37', 'blue': u'0;34', 'white': u'1;37', 'green': u'0;32', 'bright blue': u'1;34', 'cyan': u'0;36', 'bright green': u'1;32', 'red': u'0;31', 'bright cyan': u'1;36', 'purple': u'0;35', 'bright red': u'1;31', 'yellow': u'0;33', 'bright purple': u'1;35', 'dark gray': u'1;30', 'bright yellow': u'1;33', 'magenta': u'0;35', 'bright magenta': u'1;35', 'normal': u'0', } REJECT_EXTS = ('.pyc', '.pyo', '.swp', '.bak', '~', '.rpm', '.md', '.txt', '.rst') BOOL_TRUE = BOOLEANS_TRUE COLLECTION_PTYPE_COMPAT = {'module': 'modules'} DEFAULT_BECOME_PASS = None DEFAULT_PASSWORD_CHARS = to_text(ascii_letters + digits + ".,:-_", errors='strict') # characters included in auto-generated passwords DEFAULT_REMOTE_PASS = None DEFAULT_SUBSET = None # FIXME: expand to other plugins, but never doc fragments CONFIGURABLE_PLUGINS = ('become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'netconf', 'shell', 'vars') # NOTE: always update the docs/docsite/Makefile to match DOCUMENTABLE_PLUGINS = CONFIGURABLE_PLUGINS + ('module', 'strategy') IGNORE_FILES = ("COPYING", "CONTRIBUTING", "LICENSE", "README", "VERSION", "GUIDELINES") # ignore during module search INTERNAL_RESULT_KEYS = ('add_host', 'add_group') LOCALHOST = ('127.0.0.1', 'localhost', '::1') MODULE_REQUIRE_ARGS = tuple(add_internal_fqcns(('command', 'win_command', 'ansible.windows.win_command', 'shell', 'win_shell', 'ansible.windows.win_shell', 'raw', 'script'))) MODULE_NO_JSON = tuple(add_internal_fqcns(('command', 'win_command', 'ansible.windows.win_command', 'shell', 'win_shell', 'ansible.windows.win_shell', 'raw'))) RESTRICTED_RESULT_KEYS = ('ansible_rsync_path', 'ansible_playbook_python', 'ansible_facts') TREE_DIR = None VAULT_VERSION_MIN = 1.0 VAULT_VERSION_MAX = 1.0 # This matches a string that cannot be used as a valid python variable name i.e 'not-valid', 'not!valid@either' '1_nor_This' INVALID_VARIABLE_NAMES = re.compile(r'^[\d\W]|[^\w]') # FIXME: remove once play_context mangling is removed # the magic variable mapping dictionary below is used to translate # host/inventory variables to fields in the PlayContext # object. The dictionary values are tuples, to account for aliases # in variable names. COMMON_CONNECTION_VARS = frozenset(('ansible_connection', 'ansible_host', 'ansible_user', 'ansible_shell_executable', 'ansible_port', 'ansible_pipelining', 'ansible_password', 'ansible_timeout', 'ansible_shell_type', 'ansible_module_compression', 'ansible_private_key_file')) MAGIC_VARIABLE_MAPPING = dict( # base connection=('ansible_connection', ), module_compression=('ansible_module_compression', ), shell=('ansible_shell_type', ), executable=('ansible_shell_executable', ), # connection common remote_addr=('ansible_ssh_host', 'ansible_host'), remote_user=('ansible_ssh_user', 'ansible_user'), password=('ansible_ssh_pass', 'ansible_password'), port=('ansible_ssh_port', 'ansible_port'), pipelining=('ansible_ssh_pipelining', 'ansible_pipelining'), timeout=('ansible_ssh_timeout', 'ansible_timeout'), private_key_file=('ansible_ssh_private_key_file', 'ansible_private_key_file'), # networking modules network_os=('ansible_network_os', ), connection_user=('ansible_connection_user',), # ssh TODO: remove ssh_executable=('ansible_ssh_executable', ), ssh_common_args=('ansible_ssh_common_args', ), sftp_extra_args=('ansible_sftp_extra_args', ), scp_extra_args=('ansible_scp_extra_args', ), ssh_extra_args=('ansible_ssh_extra_args', ), ssh_transfer_method=('ansible_ssh_transfer_method', ), # docker TODO: remove docker_extra_args=('ansible_docker_extra_args', ), # become become=('ansible_become', ), become_method=('ansible_become_method', ), become_user=('ansible_become_user', ), become_pass=('ansible_become_password', 'ansible_become_pass'), become_exe=('ansible_become_exe', ), become_flags=('ansible_become_flags', ), ) # POPULATE SETTINGS FROM CONFIG ### config = ConfigManager() # Generate constants from config for setting in config.data.get_settings(): value = setting.value if setting.origin == 'default' and \ isinstance(setting.value, string_types) and \ (setting.value.startswith('{{') and setting.value.endswith('}}')): try: t = Template(setting.value) value = t.render(vars()) try: value = literal_eval(value) except ValueError: pass # not a python data structure except Exception: pass # not templatable value = ensure_type(value, setting.type) set_constant(setting.name, value) for warn in config.WARNINGS: _warning(warn) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.551556 ansible-core-2.12.0/lib/ansible/context.py0000644000000000000000000000400100000000000020312 0ustar00rootroot00000000000000# Copyright: (c) 2018, Toshio Kuratomi # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type """ Context of the running Ansible. In the future we *may* create Context objects to allow running multiple Ansible plays in parallel with different contexts but that is currently out of scope as the Ansible library is just for running the ansible command line tools. These APIs are still in flux so do not use them unless you are willing to update them with every Ansible release """ from ansible.module_utils.common._collections_compat import Mapping, Set from ansible.module_utils.common.collections import is_sequence from ansible.utils.context_objects import CLIArgs, GlobalCLIArgs __all__ = ('CLIARGS',) # Note: this is not the singleton version. The Singleton is only created once the program has # actually parsed the args CLIARGS = CLIArgs({}) # This should be called immediately after cli_args are processed (parsed, validated, and any # normalization performed on them). No other code should call it def _init_global_context(cli_args): """Initialize the global context objects""" global CLIARGS CLIARGS = GlobalCLIArgs.from_options(cli_args) def cliargs_deferred_get(key, default=None, shallowcopy=False): """Closure over getting a key from CLIARGS with shallow copy functionality Primarily used in ``FieldAttribute`` where we need to defer setting the default until after the CLI arguments have been parsed This function is not directly bound to ``CliArgs`` so that it works with ``CLIARGS`` being replaced """ def inner(): value = CLIARGS.get(key, default=default) if not shallowcopy: return value elif is_sequence(value): return value[:] elif isinstance(value, (Mapping, Set)): return value.copy() return value return inner ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9735591 ansible-core-2.12.0/lib/ansible/errors/0000755000000000000000000000000000000000000017575 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/errors/__init__.py0000644000000000000000000003434400000000000021716 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import re import traceback from ansible.errors.yaml_strings import ( YAML_COMMON_DICT_ERROR, YAML_COMMON_LEADING_TAB_ERROR, YAML_COMMON_PARTIALLY_QUOTED_LINE_ERROR, YAML_COMMON_UNBALANCED_QUOTES_ERROR, YAML_COMMON_UNQUOTED_COLON_ERROR, YAML_COMMON_UNQUOTED_VARIABLE_ERROR, YAML_POSITION_DETAILS, YAML_AND_SHORTHAND_ERROR, ) from ansible.module_utils._text import to_native, to_text from ansible.module_utils.common._collections_compat import Sequence class AnsibleError(Exception): ''' This is the base class for all errors raised from Ansible code, and can be instantiated with two optional parameters beyond the error message to control whether detailed information is displayed when the error occurred while parsing a data file of some kind. Usage: raise AnsibleError('some message here', obj=obj, show_content=True) Where "obj" is some subclass of ansible.parsing.yaml.objects.AnsibleBaseYAMLObject, which should be returned by the DataLoader() class. ''' def __init__(self, message="", obj=None, show_content=True, suppress_extended_error=False, orig_exc=None): super(AnsibleError, self).__init__(message) self._show_content = show_content self._suppress_extended_error = suppress_extended_error self._message = to_native(message) self.obj = obj self.orig_exc = orig_exc @property def message(self): # we import this here to prevent an import loop problem, # since the objects code also imports ansible.errors from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject message = [self._message] if isinstance(self.obj, AnsibleBaseYAMLObject): extended_error = self._get_extended_error() if extended_error and not self._suppress_extended_error: message.append( '\n\n%s' % to_native(extended_error) ) elif self.orig_exc: message.append('. %s' % to_native(self.orig_exc)) return ''.join(message) @message.setter def message(self, val): self._message = val def __str__(self): return self.message def __repr__(self): return self.message def _get_error_lines_from_file(self, file_name, line_number): ''' Returns the line in the file which corresponds to the reported error location, as well as the line preceding it (if the error did not occur on the first line), to provide context to the error. ''' target_line = '' prev_line = '' with open(file_name, 'r') as f: lines = f.readlines() # In case of a YAML loading error, PyYAML will report the very last line # as the location of the error. Avoid an index error here in order to # return a helpful message. file_length = len(lines) if line_number >= file_length: line_number = file_length - 1 # If target_line contains only whitespace, move backwards until # actual code is found. If there are several empty lines after target_line, # the error lines would just be blank, which is not very helpful. target_line = lines[line_number] while not target_line.strip(): line_number -= 1 target_line = lines[line_number] if line_number > 0: prev_line = lines[line_number - 1] return (target_line, prev_line) def _get_extended_error(self): ''' Given an object reporting the location of the exception in a file, return detailed information regarding it including: * the line which caused the error as well as the one preceding it * causes and suggested remedies for common syntax errors If this error was created with show_content=False, the reporting of content is suppressed, as the file contents may be sensitive (ie. vault data). ''' error_message = '' try: (src_file, line_number, col_number) = self.obj.ansible_pos error_message += YAML_POSITION_DETAILS % (src_file, line_number, col_number) if src_file not in ('', '') and self._show_content: (target_line, prev_line) = self._get_error_lines_from_file(src_file, line_number - 1) target_line = to_text(target_line) prev_line = to_text(prev_line) if target_line: stripped_line = target_line.replace(" ", "") # Check for k=v syntax in addition to YAML syntax and set the appropriate error position, # arrow index if re.search(r'\w+(\s+)?=(\s+)?[\w/-]+', prev_line): error_position = prev_line.rstrip().find('=') arrow_line = (" " * error_position) + "^ here" error_message = YAML_POSITION_DETAILS % (src_file, line_number - 1, error_position + 1) error_message += "\nThe offending line appears to be:\n\n%s\n%s\n\n" % (prev_line.rstrip(), arrow_line) error_message += YAML_AND_SHORTHAND_ERROR else: arrow_line = (" " * (col_number - 1)) + "^ here" error_message += "\nThe offending line appears to be:\n\n%s\n%s\n%s\n" % (prev_line.rstrip(), target_line.rstrip(), arrow_line) # TODO: There may be cases where there is a valid tab in a line that has other errors. if '\t' in target_line: error_message += YAML_COMMON_LEADING_TAB_ERROR # common error/remediation checking here: # check for unquoted vars starting lines if ('{{' in target_line and '}}' in target_line) and ('"{{' not in target_line or "'{{" not in target_line): error_message += YAML_COMMON_UNQUOTED_VARIABLE_ERROR # check for common dictionary mistakes elif ":{{" in stripped_line and "}}" in stripped_line: error_message += YAML_COMMON_DICT_ERROR # check for common unquoted colon mistakes elif (len(target_line) and len(target_line) > 1 and len(target_line) > col_number and target_line[col_number] == ":" and target_line.count(':') > 1): error_message += YAML_COMMON_UNQUOTED_COLON_ERROR # otherwise, check for some common quoting mistakes else: # FIXME: This needs to split on the first ':' to account for modules like lineinfile # that may have lines that contain legitimate colons, e.g., line: 'i ALL= (ALL) NOPASSWD: ALL' # and throw off the quote matching logic. parts = target_line.split(":") if len(parts) > 1: middle = parts[1].strip() match = False unbalanced = False if middle.startswith("'") and not middle.endswith("'"): match = True elif middle.startswith('"') and not middle.endswith('"'): match = True if (len(middle) > 0 and middle[0] in ['"', "'"] and middle[-1] in ['"', "'"] and target_line.count("'") > 2 or target_line.count('"') > 2): unbalanced = True if match: error_message += YAML_COMMON_PARTIALLY_QUOTED_LINE_ERROR if unbalanced: error_message += YAML_COMMON_UNBALANCED_QUOTES_ERROR except (IOError, TypeError): error_message += '\n(could not open file to display line)' except IndexError: error_message += '\n(specified line no longer in file, maybe it changed?)' return error_message class AnsibleAssertionError(AnsibleError, AssertionError): '''Invalid assertion''' pass class AnsibleOptionsError(AnsibleError): ''' bad or incomplete options passed ''' pass class AnsibleParserError(AnsibleError): ''' something was detected early that is wrong about a playbook or data file ''' pass class AnsibleInternalError(AnsibleError): ''' internal safeguards tripped, something happened in the code that should never happen ''' pass class AnsibleRuntimeError(AnsibleError): ''' ansible had a problem while running a playbook ''' pass class AnsibleModuleError(AnsibleRuntimeError): ''' a module failed somehow ''' pass class AnsibleConnectionFailure(AnsibleRuntimeError): ''' the transport / connection_plugin had a fatal error ''' pass class AnsibleAuthenticationFailure(AnsibleConnectionFailure): '''invalid username/password/key''' pass class AnsibleCallbackError(AnsibleRuntimeError): ''' a callback failure ''' pass class AnsibleTemplateError(AnsibleRuntimeError): '''A template related error''' pass class AnsibleFilterError(AnsibleTemplateError): ''' a templating failure ''' pass class AnsibleLookupError(AnsibleTemplateError): ''' a lookup failure ''' pass class AnsibleUndefinedVariable(AnsibleTemplateError): ''' a templating failure ''' pass class AnsibleFileNotFound(AnsibleRuntimeError): ''' a file missing failure ''' def __init__(self, message="", obj=None, show_content=True, suppress_extended_error=False, orig_exc=None, paths=None, file_name=None): self.file_name = file_name self.paths = paths if message: message += "\n" if self.file_name: message += "Could not find or access '%s'" % to_text(self.file_name) else: message += "Could not find file" if self.paths and isinstance(self.paths, Sequence): searched = to_text('\n\t'.join(self.paths)) if message: message += "\n" message += "Searched in:\n\t%s" % searched message += " on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option" super(AnsibleFileNotFound, self).__init__(message=message, obj=obj, show_content=show_content, suppress_extended_error=suppress_extended_error, orig_exc=orig_exc) # These Exceptions are temporary, using them as flow control until we can get a better solution. # DO NOT USE as they will probably be removed soon. # We will port the action modules in our tree to use a context manager instead. class AnsibleAction(AnsibleRuntimeError): ''' Base Exception for Action plugin flow control ''' def __init__(self, message="", obj=None, show_content=True, suppress_extended_error=False, orig_exc=None, result=None): super(AnsibleAction, self).__init__(message=message, obj=obj, show_content=show_content, suppress_extended_error=suppress_extended_error, orig_exc=orig_exc) if result is None: self.result = {} else: self.result = result class AnsibleActionSkip(AnsibleAction): ''' an action runtime skip''' def __init__(self, message="", obj=None, show_content=True, suppress_extended_error=False, orig_exc=None, result=None): super(AnsibleActionSkip, self).__init__(message=message, obj=obj, show_content=show_content, suppress_extended_error=suppress_extended_error, orig_exc=orig_exc, result=result) self.result.update({'skipped': True, 'msg': message}) class AnsibleActionFail(AnsibleAction): ''' an action runtime failure''' def __init__(self, message="", obj=None, show_content=True, suppress_extended_error=False, orig_exc=None, result=None): super(AnsibleActionFail, self).__init__(message=message, obj=obj, show_content=show_content, suppress_extended_error=suppress_extended_error, orig_exc=orig_exc, result=result) self.result.update({'failed': True, 'msg': message, 'exception': traceback.format_exc()}) class _AnsibleActionDone(AnsibleAction): ''' an action runtime early exit''' pass class AnsiblePluginError(AnsibleError): ''' base class for Ansible plugin-related errors that do not need AnsibleError contextual data ''' def __init__(self, message=None, plugin_load_context=None): super(AnsiblePluginError, self).__init__(message) self.plugin_load_context = plugin_load_context class AnsiblePluginRemovedError(AnsiblePluginError): ''' a requested plugin has been removed ''' pass class AnsiblePluginCircularRedirect(AnsiblePluginError): '''a cycle was detected in plugin redirection''' pass class AnsibleCollectionUnsupportedVersionError(AnsiblePluginError): '''a collection is not supported by this version of Ansible''' pass class AnsibleFilterTypeError(AnsibleTemplateError, TypeError): ''' a Jinja filter templating failure due to bad type''' pass ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/errors/yaml_strings.py0000644000000000000000000000754600000000000022676 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type __all__ = [ 'YAML_SYNTAX_ERROR', 'YAML_POSITION_DETAILS', 'YAML_COMMON_DICT_ERROR', 'YAML_COMMON_UNQUOTED_VARIABLE_ERROR', 'YAML_COMMON_UNQUOTED_COLON_ERROR', 'YAML_COMMON_PARTIALLY_QUOTED_LINE_ERROR', 'YAML_COMMON_UNBALANCED_QUOTES_ERROR', ] YAML_SYNTAX_ERROR = """\ Syntax Error while loading YAML. %s""" YAML_POSITION_DETAILS = """\ The error appears to be in '%s': line %s, column %s, but may be elsewhere in the file depending on the exact syntax problem. """ YAML_COMMON_DICT_ERROR = """\ This one looks easy to fix. YAML thought it was looking for the start of a hash/dictionary and was confused to see a second "{". Most likely this was meant to be an ansible template evaluation instead, so we have to give the parser a small hint that we wanted a string instead. The solution here is to just quote the entire value. For instance, if the original line was: app_path: {{ base_path }}/foo It should be written as: app_path: "{{ base_path }}/foo" """ YAML_COMMON_UNQUOTED_VARIABLE_ERROR = """\ We could be wrong, but this one looks like it might be an issue with missing quotes. Always quote template expression brackets when they start a value. For instance: with_items: - {{ foo }} Should be written as: with_items: - "{{ foo }}" """ YAML_COMMON_UNQUOTED_COLON_ERROR = """\ This one looks easy to fix. There seems to be an extra unquoted colon in the line and this is confusing the parser. It was only expecting to find one free colon. The solution is just add some quotes around the colon, or quote the entire line after the first colon. For instance, if the original line was: copy: src=file.txt dest=/path/filename:with_colon.txt It can be written as: copy: src=file.txt dest='/path/filename:with_colon.txt' Or: copy: 'src=file.txt dest=/path/filename:with_colon.txt' """ YAML_COMMON_PARTIALLY_QUOTED_LINE_ERROR = """\ This one looks easy to fix. It seems that there is a value started with a quote, and the YAML parser is expecting to see the line ended with the same kind of quote. For instance: when: "ok" in result.stdout Could be written as: when: '"ok" in result.stdout' Or equivalently: when: "'ok' in result.stdout" """ YAML_COMMON_UNBALANCED_QUOTES_ERROR = """\ We could be wrong, but this one looks like it might be an issue with unbalanced quotes. If starting a value with a quote, make sure the line ends with the same set of quotes. For instance this arbitrary example: foo: "bad" "wolf" Could be written as: foo: '"bad" "wolf"' """ YAML_COMMON_LEADING_TAB_ERROR = """\ There appears to be a tab character at the start of the line. YAML does not use tabs for formatting. Tabs should be replaced with spaces. For example: - name: update tooling vars: version: 1.2.3 # ^--- there is a tab there. Should be written as: - name: update tooling vars: version: 1.2.3 # ^--- all spaces here. """ YAML_AND_SHORTHAND_ERROR = """\ There appears to be both 'k=v' shorthand syntax and YAML in this task. \ Only one syntax may be used. """ ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1636383730.9735591 ansible-core-2.12.0/lib/ansible/executor/0000755000000000000000000000000000000000000020117 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/executor/__init__.py0000644000000000000000000000150100000000000022225 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/executor/action_write_locks.py0000644000000000000000000000356700000000000024366 0ustar00rootroot00000000000000# (c) 2016 - Red Hat, Inc. # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type from multiprocessing import Lock from ansible.module_utils.facts.system.pkg_mgr import PKG_MGRS if 'action_write_locks' not in globals(): # Do not initialize this more than once because it seems to bash # the existing one. multiprocessing must be reloading the module # when it forks? action_write_locks = dict() # Below is a Lock for use when we weren't expecting a named module. It gets used when an action # plugin invokes a module whose name does not match with the action's name. Slightly less # efficient as all processes with unexpected module names will wait on this lock action_write_locks[None] = Lock() # These plugins are known to be called directly by action plugins with names differing from the # action plugin name. We precreate them here as an optimization. # If a list of service managers is created in the future we can do the same for them. mods = set(p['name'] for p in PKG_MGRS) mods.update(('copy', 'file', 'setup', 'slurp', 'stat')) for mod_name in mods: action_write_locks[mod_name] = Lock() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383730.974559 ansible-core-2.12.0/lib/ansible/executor/discovery/0000755000000000000000000000000000000000000022126 5ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/executor/discovery/__init__.py0000644000000000000000000000000000000000000024225 0ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/executor/discovery/python_target.py0000644000000000000000000000232200000000000025366 0ustar00rootroot00000000000000# Copyright: (c) 2018 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # FUTURE: this could be swapped out for our bundled version of distro to move more complete platform # logic to the targets, so long as we maintain Py2.6 compat and don't need to do any kind of script assembly from __future__ import (absolute_import, division, print_function) __metaclass__ = type import json import platform import io import os def read_utf8_file(path, encoding='utf-8'): if not os.access(path, os.R_OK): return None with io.open(path, 'r', encoding=encoding) as fd: content = fd.read() return content def get_platform_info(): result = dict(platform_dist_result=[]) if hasattr(platform, 'dist'): result['platform_dist_result'] = platform.dist() osrelease_content = read_utf8_file('/etc/os-release') # try to fall back to /usr/lib/os-release if not osrelease_content: osrelease_content = read_utf8_file('/usr/lib/os-release') result['osrelease_content'] = osrelease_content return result def main(): info = get_platform_info() print(json.dumps(info)) if __name__ == '__main__': main() ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.552556 ansible-core-2.12.0/lib/ansible/executor/interpreter_discovery.py0000644000000000000000000002270700000000000025133 0ustar00rootroot00000000000000# Copyright: (c) 2018 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import bisect import json import pkgutil import re from ansible import constants as C from ansible.module_utils._text import to_native, to_text from ansible.module_utils.distro import LinuxDistribution from ansible.utils.display import Display from ansible.utils.plugin_docs import get_versioned_doclink from ansible.module_utils.compat.version import LooseVersion from traceback import format_exc display = Display() foundre = re.compile(r'(?s)PLATFORM[\r\n]+(.*)FOUND(.*)ENDFOUND') class InterpreterDiscoveryRequiredError(Exception): def __init__(self, message, interpreter_name, discovery_mode): super(InterpreterDiscoveryRequiredError, self).__init__(message) self.interpreter_name = interpreter_name self.discovery_mode = discovery_mode def __str__(self): return self.message def __repr__(self): # TODO: proper repr impl return self.message def discover_interpreter(action, interpreter_name, discovery_mode, task_vars): # interpreter discovery is a 2-step process with the target. First, we use a simple shell-agnostic bootstrap to # get the system type from uname, and find any random Python that can get us the info we need. For supported # target OS types, we'll dispatch a Python script that calls plaform.dist() (for older platforms, where available) # and brings back /etc/os-release (if present). The proper Python path is looked up in a table of known # distros/versions with included Pythons; if nothing is found, depending on the discovery mode, either the # default fallback of /usr/bin/python is used (if we know it's there), or discovery fails. # FUTURE: add logical equivalence for "python3" in the case of py3-only modules? if interpreter_name != 'python': raise ValueError('Interpreter discovery not supported for {0}'.format(interpreter_name)) host = task_vars.get('inventory_hostname', 'unknown') res = None platform_type = 'unknown' found_interpreters = [u'/usr/bin/python'] # fallback value is_auto_legacy = discovery_mode.startswith('auto_legacy') is_silent = discovery_mode.endswith('_silent') try: platform_python_map = C.config.get_config_value('INTERPRETER_PYTHON_DISTRO_MAP', variables=task_vars) bootstrap_python_list = C.config.get_config_value('INTERPRETER_PYTHON_FALLBACK', variables=task_vars) display.vvv(msg=u"Attempting {0} interpreter discovery".format(interpreter_name), host=host) # not all command -v impls accept a list of commands, so we have to call it once per python command_list = ["command -v '%s'" % py for py in bootstrap_python_list] shell_bootstrap = "echo PLATFORM; uname; echo FOUND; {0}; echo ENDFOUND".format('; '.join(command_list)) # FUTURE: in most cases we probably don't want to use become, but maybe sometimes we do? res = action._low_level_execute_command(shell_bootstrap, sudoable=False) raw_stdout = res.get('stdout', u'') match = foundre.match(raw_stdout) if not match: display.debug(u'raw interpreter discovery output: {0}'.format(raw_stdout), host=host) raise ValueError('unexpected output from Python interpreter discovery') platform_type = match.groups()[0].lower().strip() found_interpreters = [interp.strip() for interp in match.groups()[1].splitlines() if interp.startswith('/')] display.debug(u"found interpreters: {0}".format(found_interpreters), host=host) if not found_interpreters: if not is_silent: action._discovery_warnings.append(u'No python interpreters found for ' u'host {0} (tried {1})'.format(host, bootstrap_python_list)) # this is lame, but returning None or throwing an exception is uglier return u'/usr/bin/python' if platform_type != 'linux': raise NotImplementedError('unsupported platform for extended discovery: {0}'.format(to_native(platform_type))) platform_script = pkgutil.get_data('ansible.executor.discovery', 'python_target.py') # FUTURE: respect pipelining setting instead of just if the connection supports it? if action._connection.has_pipelining: res = action._low_level_execute_command(found_interpreters[0], sudoable=False, in_data=platform_script) else: # FUTURE: implement on-disk case (via script action or ?) raise NotImplementedError('pipelining support required for extended interpreter discovery') platform_info = json.loads(res.get('stdout')) distro, version = _get_linux_distro(platform_info) if not distro or not version: raise NotImplementedError('unable to get Linux distribution/version info') version_map = platform_python_map.get(distro.lower().strip()) if not version_map: raise NotImplementedError('unsupported Linux distribution: {0}'.format(distro)) platform_interpreter = to_text(_version_fuzzy_match(version, version_map), errors='surrogate_or_strict') # provide a transition period for hosts that were using /usr/bin/python previously (but shouldn't have been) if is_auto_legacy: if platform_interpreter != u'/usr/bin/python' and u'/usr/bin/python' in found_interpreters: if not is_silent: action._discovery_warnings.append( u"Distribution {0} {1} on host {2} should use {3}, but is using " u"/usr/bin/python for backward compatibility with prior Ansible releases. " u"See {4} for more information" .format(distro, version, host, platform_interpreter, get_versioned_doclink('reference_appendices/interpreter_discovery.html'))) return u'/usr/bin/python' if platform_interpreter not in found_interpreters: if platform_interpreter not in bootstrap_python_list: # sanity check to make sure we looked for it if not is_silent: action._discovery_warnings \ .append(u"Platform interpreter {0} on host {1} is missing from bootstrap list" .format(platform_interpreter, host)) if not is_silent: action._discovery_warnings \ .append(u"Distribution {0} {1} on host {2} should use {3}, but is using {4}, since the " u"discovered platform python interpreter was not present. See {5} " u"for more information." .format(distro, version, host, platform_interpreter, found_interpreters[0], get_versioned_doclink('reference_appendices/interpreter_discovery.html'))) return found_interpreters[0] return platform_interpreter except NotImplementedError as ex: display.vvv(msg=u'Python interpreter discovery fallback ({0})'.format(to_text(ex)), host=host) except Exception as ex: if not is_silent: display.warning(msg=u'Unhandled error in Python interpreter discovery for host {0}: {1}'.format(host, to_text(ex))) display.debug(msg=u'Interpreter discovery traceback:\n{0}'.format(to_text(format_exc())), host=host) if res and res.get('stderr'): display.vvv(msg=u'Interpreter discovery remote stderr:\n{0}'.format(to_text(res.get('stderr'))), host=host) if not is_silent: action._discovery_warnings \ .append(u"Platform {0} on host {1} is using the discovered Python interpreter at {2}, but future installation of " u"another Python interpreter could change the meaning of that path. See {3} " u"for more information." .format(platform_type, host, found_interpreters[0], get_versioned_doclink('reference_appendices/interpreter_discovery.html'))) return found_interpreters[0] def _get_linux_distro(platform_info): dist_result = platform_info.get('platform_dist_result', []) if len(dist_result) == 3 and any(dist_result): return dist_result[0], dist_result[1] osrelease_content = platform_info.get('osrelease_content') if not osrelease_content: return u'', u'' osr = LinuxDistribution._parse_os_release_content(osrelease_content) return osr.get('id', u''), osr.get('version_id', u'') def _version_fuzzy_match(version, version_map): # try exact match first res = version_map.get(version) if res: return res sorted_looseversions = sorted([LooseVersion(v) for v in version_map.keys()]) find_looseversion = LooseVersion(version) # slot match; return nearest previous version we're newer than kpos = bisect.bisect(sorted_looseversions, find_looseversion) if kpos == 0: # older than everything in the list, return the oldest version # TODO: warning-worthy? return version_map.get(sorted_looseversions[0].vstring) # TODO: is "past the end of the list" warning-worthy too (at least if it's not a major version match)? # return the next-oldest entry that we're newer than... return version_map.get(sorted_looseversions[kpos - 1].vstring) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.553556 ansible-core-2.12.0/lib/ansible/executor/module_common.py0000644000000000000000000020231000000000000023324 0ustar00rootroot00000000000000# (c) 2013-2014, Michael DeHaan # (c) 2015 Toshio Kuratomi # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import ast import base64 import datetime import json import os import shlex import zipfile import re import pkgutil from ast import AST, Import, ImportFrom from io import BytesIO from ansible.release import __version__, __author__ from ansible import constants as C from ansible.errors import AnsibleError from ansible.executor.interpreter_discovery import InterpreterDiscoveryRequiredError from ansible.executor.powershell import module_manifest as ps_manifest from ansible.module_utils.common.json import AnsibleJSONEncoder from ansible.module_utils.common.text.converters import to_bytes, to_text, to_native from ansible.plugins.loader import module_utils_loader from ansible.utils.collection_loader._collection_finder import _get_collection_metadata, _nested_dict_get # Must import strategy and use write_locks from there # If we import write_locks directly then we end up binding a # variable to the object and then it never gets updated. from ansible.executor import action_write_locks from ansible.utils.display import Display from collections import namedtuple try: import importlib.util import importlib.machinery imp = None except ImportError: import imp # if we're on a Python that doesn't have FNFError, redefine it as IOError (since that's what we'll see) try: FileNotFoundError except NameError: FileNotFoundError = IOError display = Display() ModuleUtilsProcessEntry = namedtuple('ModuleUtilsInfo', ['name_parts', 'is_ambiguous', 'has_redirected_child', 'is_optional']) REPLACER = b"#<>" REPLACER_VERSION = b"\"<>\"" REPLACER_COMPLEX = b"\"<>\"" REPLACER_WINDOWS = b"# POWERSHELL_COMMON" REPLACER_JSONARGS = b"<>" REPLACER_SELINUX = b"<>" # We could end up writing out parameters with unicode characters so we need to # specify an encoding for the python source file ENCODING_STRING = u'# -*- coding: utf-8 -*-' b_ENCODING_STRING = b'# -*- coding: utf-8 -*-' # module_common is relative to module_utils, so fix the path _MODULE_UTILS_PATH = os.path.join(os.path.dirname(__file__), '..', 'module_utils') # ****************************************************************************** ANSIBALLZ_TEMPLATE = u'''%(shebang)s %(coding)s _ANSIBALLZ_WRAPPER = True # For test-module.py script to tell this is a ANSIBALLZ_WRAPPER # This code is part of Ansible, but is an independent component. # The code in this particular templatable string, and this templatable string # only, is BSD licensed. Modules which end up using this snippet, which is # dynamically combined together by Ansible still belong to the author of the # module, and they may assign their own license to the complete work. # # Copyright (c), James Cammarata, 2016 # Copyright (c), Toshio Kuratomi, 2016 # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. def _ansiballz_main(): import os import os.path # Access to the working directory is required by Python when using pipelining, as well as for the coverage module. # Some platforms, such as macOS, may not allow querying the working directory when using become to drop privileges. try: os.getcwd() except OSError: try: os.chdir(os.path.expanduser('~')) except OSError: os.chdir('/') %(rlimit)s import sys import __main__ # For some distros and python versions we pick up this script in the temporary # directory. This leads to problems when the ansible module masks a python # library that another import needs. We have not figured out what about the # specific distros and python versions causes this to behave differently. # # Tested distros: # Fedora23 with python3.4 Works # Ubuntu15.10 with python2.7 Works # Ubuntu15.10 with python3.4 Fails without this # Ubuntu16.04.1 with python3.5 Fails without this # To test on another platform: # * use the copy module (since this shadows the stdlib copy module) # * Turn off pipelining # * Make sure that the destination file does not exist # * ansible ubuntu16-test -m copy -a 'src=/etc/motd dest=/var/tmp/m' # This will traceback in shutil. Looking at the complete traceback will show # that shutil is importing copy which finds the ansible module instead of the # stdlib module scriptdir = None try: scriptdir = os.path.dirname(os.path.realpath(__main__.__file__)) except (AttributeError, OSError): # Some platforms don't set __file__ when reading from stdin # OSX raises OSError if using abspath() in a directory we don't have # permission to read (realpath calls abspath) pass # Strip cwd from sys.path to avoid potential permissions issues excludes = set(('', '.', scriptdir)) sys.path = [p for p in sys.path if p not in excludes] import base64 import runpy import shutil import tempfile import zipfile if sys.version_info < (3,): PY3 = False else: PY3 = True ZIPDATA = """%(zipdata)s""" # Note: temp_path isn't needed once we switch to zipimport def invoke_module(modlib_path, temp_path, json_params): # When installed via setuptools (including python setup.py install), # ansible may be installed with an easy-install.pth file. That file # may load the system-wide install of ansible rather than the one in # the module. sitecustomize is the only way to override that setting. z = zipfile.ZipFile(modlib_path, mode='a') # py3: modlib_path will be text, py2: it's bytes. Need bytes at the end sitecustomize = u'import sys\\nsys.path.insert(0,"%%s")\\n' %% modlib_path sitecustomize = sitecustomize.encode('utf-8') # Use a ZipInfo to work around zipfile limitation on hosts with # clocks set to a pre-1980 year (for instance, Raspberry Pi) zinfo = zipfile.ZipInfo() zinfo.filename = 'sitecustomize.py' zinfo.date_time = ( %(year)i, %(month)i, %(day)i, %(hour)i, %(minute)i, %(second)i) z.writestr(zinfo, sitecustomize) z.close() # Put the zipped up module_utils we got from the controller first in the python path so that we # can monkeypatch the right basic sys.path.insert(0, modlib_path) # Monkeypatch the parameters into basic from ansible.module_utils import basic basic._ANSIBLE_ARGS = json_params %(coverage)s # Run the module! By importing it as '__main__', it thinks it is executing as a script runpy.run_module(mod_name='%(module_fqn)s', init_globals=dict(_module_fqn='%(module_fqn)s', _modlib_path=modlib_path), run_name='__main__', alter_sys=True) # Ansible modules must exit themselves print('{"msg": "New-style module did not handle its own exit", "failed": true}') sys.exit(1) def debug(command, zipped_mod, json_params): # The code here normally doesn't run. It's only used for debugging on the # remote machine. # # The subcommands in this function make it easier to debug ansiballz # modules. Here's the basic steps: # # Run ansible with the environment variable: ANSIBLE_KEEP_REMOTE_FILES=1 and -vvv # to save the module file remotely:: # $ ANSIBLE_KEEP_REMOTE_FILES=1 ansible host1 -m ping -a 'data=october' -vvv # # Part of the verbose output will tell you where on the remote machine the # module was written to:: # [...] # SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o # PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o # ControlPath=/home/badger/.ansible/cp/ansible-ssh-%%h-%%p-%%r -tt rhel7 '/bin/sh -c '"'"'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 # LC_MESSAGES=en_US.UTF-8 /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping'"'"'' # [...] # # Login to the remote machine and run the module file via from the previous # step with the explode subcommand to extract the module payload into # source files:: # $ ssh host1 # $ /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping explode # Module expanded into: # /home/badger/.ansible/tmp/ansible-tmp-1461173408.08-279692652635227/ansible # # You can now edit the source files to instrument the code or experiment with # different parameter values. When you're ready to run the code you've modified # (instead of the code from the actual zipped module), use the execute subcommand like this:: # $ /usr/bin/python /home/badger/.ansible/tmp/ansible-tmp-1461173013.93-9076457629738/ping execute # Okay to use __file__ here because we're running from a kept file basedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'debug_dir') args_path = os.path.join(basedir, 'args') if command == 'explode': # transform the ZIPDATA into an exploded directory of code and then # print the path to the code. This is an easy way for people to look # at the code on the remote machine for debugging it in that # environment z = zipfile.ZipFile(zipped_mod) for filename in z.namelist(): if filename.startswith('/'): raise Exception('Something wrong with this module zip file: should not contain absolute paths') dest_filename = os.path.join(basedir, filename) if dest_filename.endswith(os.path.sep) and not os.path.exists(dest_filename): os.makedirs(dest_filename) else: directory = os.path.dirname(dest_filename) if not os.path.exists(directory): os.makedirs(directory) f = open(dest_filename, 'wb') f.write(z.read(filename)) f.close() # write the args file f = open(args_path, 'wb') f.write(json_params) f.close() print('Module expanded into:') print('%%s' %% basedir) exitcode = 0 elif command == 'execute': # Execute the exploded code instead of executing the module from the # embedded ZIPDATA. This allows people to easily run their modified # code on the remote machine to see how changes will affect it. # Set pythonpath to the debug dir sys.path.insert(0, basedir) # read in the args file which the user may have modified with open(args_path, 'rb') as f: json_params = f.read() # Monkeypatch the parameters into basic from ansible.module_utils import basic basic._ANSIBLE_ARGS = json_params # Run the module! By importing it as '__main__', it thinks it is executing as a script runpy.run_module(mod_name='%(module_fqn)s', init_globals=None, run_name='__main__', alter_sys=True) # Ansible modules must exit themselves print('{"msg": "New-style module did not handle its own exit", "failed": true}') sys.exit(1) else: print('WARNING: Unknown debug command. Doing nothing.') exitcode = 0 return exitcode # # See comments in the debug() method for information on debugging # ANSIBALLZ_PARAMS = %(params)s if PY3: ANSIBALLZ_PARAMS = ANSIBALLZ_PARAMS.encode('utf-8') try: # There's a race condition with the controller removing the # remote_tmpdir and this module executing under async. So we cannot # store this in remote_tmpdir (use system tempdir instead) # Only need to use [ansible_module]_payload_ in the temp_path until we move to zipimport # (this helps ansible-test produce coverage stats) temp_path = tempfile.mkdtemp(prefix='ansible_%(ansible_module)s_payload_') zipped_mod = os.path.join(temp_path, 'ansible_%(ansible_module)s_payload.zip') with open(zipped_mod, 'wb') as modlib: modlib.write(base64.b64decode(ZIPDATA)) if len(sys.argv) == 2: exitcode = debug(sys.argv[1], zipped_mod, ANSIBALLZ_PARAMS) else: # Note: temp_path isn't needed once we switch to zipimport invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS) finally: try: shutil.rmtree(temp_path) except (NameError, OSError): # tempdir creation probably failed pass sys.exit(exitcode) if __name__ == '__main__': _ansiballz_main() ''' ANSIBALLZ_COVERAGE_TEMPLATE = ''' os.environ['COVERAGE_FILE'] = '%(coverage_output)s=python-%%s=coverage' %% '.'.join(str(v) for v in sys.version_info[:2]) import atexit try: import coverage except ImportError: print('{"msg": "Could not import `coverage` module.", "failed": true}') sys.exit(1) cov = coverage.Coverage(config_file='%(coverage_config)s') def atexit_coverage(): cov.stop() cov.save() atexit.register(atexit_coverage) cov.start() ''' ANSIBALLZ_COVERAGE_CHECK_TEMPLATE = ''' try: if PY3: import importlib.util if importlib.util.find_spec('coverage') is None: raise ImportError else: import imp imp.find_module('coverage') except ImportError: print('{"msg": "Could not find `coverage` module.", "failed": true}') sys.exit(1) ''' ANSIBALLZ_RLIMIT_TEMPLATE = ''' import resource existing_soft, existing_hard = resource.getrlimit(resource.RLIMIT_NOFILE) # adjust soft limit subject to existing hard limit requested_soft = min(existing_hard, %(rlimit_nofile)d) if requested_soft != existing_soft: try: resource.setrlimit(resource.RLIMIT_NOFILE, (requested_soft, existing_hard)) except ValueError: # some platforms (eg macOS) lie about their hard limit pass ''' def _strip_comments(source): # Strip comments and blank lines from the wrapper buf = [] for line in source.splitlines(): l = line.strip() if not l or l.startswith(u'#'): continue buf.append(line) return u'\n'.join(buf) if C.DEFAULT_KEEP_REMOTE_FILES: # Keep comments when KEEP_REMOTE_FILES is set. That way users will see # the comments with some nice usage instructions ACTIVE_ANSIBALLZ_TEMPLATE = ANSIBALLZ_TEMPLATE else: # ANSIBALLZ_TEMPLATE stripped of comments for smaller over the wire size ACTIVE_ANSIBALLZ_TEMPLATE = _strip_comments(ANSIBALLZ_TEMPLATE) # dirname(dirname(dirname(site-packages/ansible/executor/module_common.py) == site-packages # Do this instead of getting site-packages from distutils.sysconfig so we work when we # haven't been installed site_packages = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) CORE_LIBRARY_PATH_RE = re.compile(r'%s/(?Pansible/modules/.*)\.(py|ps1)$' % re.escape(site_packages)) COLLECTION_PATH_RE = re.compile(r'/(?Pansible_collections/[^/]+/[^/]+/plugins/modules/.*)\.(py|ps1)$') # Detect new-style Python modules by looking for required imports: # import ansible_collections.[my_ns.my_col.plugins.module_utils.my_module_util] # from ansible_collections.[my_ns.my_col.plugins.module_utils import my_module_util] # import ansible.module_utils[.basic] # from ansible.module_utils[ import basic] # from ansible.module_utils[.basic import AnsibleModule] # from ..module_utils[ import basic] # from ..module_utils[.basic import AnsibleModule] NEW_STYLE_PYTHON_MODULE_RE = re.compile( # Relative imports br'(?:from +\.{2,} *module_utils.* +import |' # Collection absolute imports: br'from +ansible_collections\.[^.]+\.[^.]+\.plugins\.module_utils.* +import |' br'import +ansible_collections\.[^.]+\.[^.]+\.plugins\.module_utils.*|' # Core absolute imports br'from +ansible\.module_utils.* +import |' br'import +ansible\.module_utils\.)' ) class ModuleDepFinder(ast.NodeVisitor): def __init__(self, module_fqn, tree, is_pkg_init=False, *args, **kwargs): """ Walk the ast tree for the python module. :arg module_fqn: The fully qualified name to reach this module in dotted notation. example: ansible.module_utils.basic :arg is_pkg_init: Inform the finder it's looking at a package init (eg __init__.py) to allow relative import expansion to use the proper package level without having imported it locally first. Save submodule[.submoduleN][.identifier] into self.submodules when they are from ansible.module_utils or ansible_collections packages self.submodules will end up with tuples like: - ('ansible', 'module_utils', 'basic',) - ('ansible', 'module_utils', 'urls', 'fetch_url') - ('ansible', 'module_utils', 'database', 'postgres') - ('ansible', 'module_utils', 'database', 'postgres', 'quote') - ('ansible', 'module_utils', 'database', 'postgres', 'quote') - ('ansible_collections', 'my_ns', 'my_col', 'plugins', 'module_utils', 'foo') It's up to calling code to determine whether the final element of the tuple are module names or something else (function, class, or variable names) .. seealso:: :python3:class:`ast.NodeVisitor` """ super(ModuleDepFinder, self).__init__(*args, **kwargs) self._tree = tree # squirrel this away so we can compare node parents to it self.submodules = set() self.optional_imports = set() self.module_fqn = module_fqn self.is_pkg_init = is_pkg_init self._visit_map = { Import: self.visit_Import, ImportFrom: self.visit_ImportFrom, } self.visit(tree) def generic_visit(self, node): """Overridden ``generic_visit`` that makes some assumptions about our use case, and improves performance by calling visitors directly instead of calling ``visit`` to offload calling visitors. """ generic_visit = self.generic_visit visit_map = self._visit_map for field, value in ast.iter_fields(node): if isinstance(value, list): for item in value: if isinstance(item, (Import, ImportFrom)): item.parent = node visit_map[item.__class__](item) elif isinstance(item, AST): generic_visit(item) visit = generic_visit def visit_Import(self, node): """ Handle import ansible.module_utils.MODLIB[.MODLIBn] [as asname] We save these as interesting submodules when the imported library is in ansible.module_utils or ansible.collections """ for alias in node.names: if (alias.name.startswith('ansible.module_utils.') or alias.name.startswith('ansible_collections.')): py_mod = tuple(alias.name.split('.')) self.submodules.add(py_mod) # if the import's parent is the root document, it's a required import, otherwise it's optional if node.parent != self._tree: self.optional_imports.add(py_mod) self.generic_visit(node) def visit_ImportFrom(self, node): """ Handle from ansible.module_utils.MODLIB import [.MODLIBn] [as asname] Also has to handle relative imports We save these as interesting submodules when the imported library is in ansible.module_utils or ansible.collections """ # FIXME: These should all get skipped: # from ansible.executor import module_common # from ...executor import module_common # from ... import executor (Currently it gives a non-helpful error) if node.level > 0: # if we're in a package init, we have to add one to the node level (and make it none if 0 to preserve the right slicing behavior) level_slice_offset = -node.level + 1 or None if self.is_pkg_init else -node.level if self.module_fqn: parts = tuple(self.module_fqn.split('.')) if node.module: # relative import: from .module import x node_module = '.'.join(parts[:level_slice_offset] + (node.module,)) else: # relative import: from . import x node_module = '.'.join(parts[:level_slice_offset]) else: # fall back to an absolute import node_module = node.module else: # absolute import: from module import x node_module = node.module # Specialcase: six is a special case because of its # import logic py_mod = None if node.names[0].name == '_six': self.submodules.add(('_six',)) elif node_module.startswith('ansible.module_utils'): # from ansible.module_utils.MODULE1[.MODULEn] import IDENTIFIER [as asname] # from ansible.module_utils.MODULE1[.MODULEn] import MODULEn+1 [as asname] # from ansible.module_utils.MODULE1[.MODULEn] import MODULEn+1 [,IDENTIFIER] [as asname] # from ansible.module_utils import MODULE1 [,MODULEn] [as asname] py_mod = tuple(node_module.split('.')) elif node_module.startswith('ansible_collections.'): if node_module.endswith('plugins.module_utils') or '.plugins.module_utils.' in node_module: # from ansible_collections.ns.coll.plugins.module_utils import MODULE [as aname] [,MODULE2] [as aname] # from ansible_collections.ns.coll.plugins.module_utils.MODULE import IDENTIFIER [as aname] # FIXME: Unhandled cornercase (needs to be ignored): # from ansible_collections.ns.coll.plugins.[!module_utils].[FOO].plugins.module_utils import IDENTIFIER py_mod = tuple(node_module.split('.')) else: # Not from module_utils so ignore. for instance: # from ansible_collections.ns.coll.plugins.lookup import IDENTIFIER pass if py_mod: for alias in node.names: self.submodules.add(py_mod + (alias.name,)) # if the import's parent is the root document, it's a required import, otherwise it's optional if node.parent != self._tree: self.optional_imports.add(py_mod + (alias.name,)) self.generic_visit(node) def _slurp(path): if not os.path.exists(path): raise AnsibleError("imported module support code does not exist at %s" % os.path.abspath(path)) with open(path, 'rb') as fd: data = fd.read() return data def _get_shebang(interpreter, task_vars, templar, args=tuple(), remote_is_local=False): """ Note not stellar API: Returns None instead of always returning a shebang line. Doing it this way allows the caller to decide to use the shebang it read from the file rather than trust that we reformatted what they already have correctly. """ # FUTURE: add logical equivalence for python3 in the case of py3-only modules interpreter_name = os.path.basename(interpreter).strip() # name for interpreter var interpreter_config = u'ansible_%s_interpreter' % interpreter_name # key for config interpreter_config_key = "INTERPRETER_%s" % interpreter_name.upper() interpreter_out = None # looking for python, rest rely on matching vars if interpreter_name == 'python': # skip detection for network os execution, use playbook supplied one if possible if remote_is_local: interpreter_out = task_vars['ansible_playbook_python'] # a config def exists for this interpreter type; consult config for the value elif C.config.get_configuration_definition(interpreter_config_key): interpreter_from_config = C.config.get_config_value(interpreter_config_key, variables=task_vars) interpreter_out = templar.template(interpreter_from_config.strip()) # handle interpreter discovery if requested or empty interpreter was provided if not interpreter_out or interpreter_out in ['auto', 'auto_legacy', 'auto_silent', 'auto_legacy_silent']: discovered_interpreter_config = u'discovered_interpreter_%s' % interpreter_name facts_from_task_vars = task_vars.get('ansible_facts', {}) if discovered_interpreter_config not in facts_from_task_vars: # interpreter discovery is desired, but has not been run for this host raise InterpreterDiscoveryRequiredError("interpreter discovery needed", interpreter_name=interpreter_name, discovery_mode=interpreter_out) else: interpreter_out = facts_from_task_vars[discovered_interpreter_config] else: raise InterpreterDiscoveryRequiredError("interpreter discovery required", interpreter_name=interpreter_name, discovery_mode='auto_legacy') elif interpreter_config in task_vars: # for non python we consult vars for a possible direct override interpreter_out = templar.template(task_vars.get(interpreter_config).strip()) if not interpreter_out: # nothing matched(None) or in case someone configures empty string or empty intepreter interpreter_out = interpreter shebang = None elif interpreter_out == interpreter: # no change, no new shebang shebang = None else: # set shebang cause we changed interpreter shebang = u'#!' + interpreter_out if args: shebang = shebang + u' ' + u' '.join(args) return shebang, interpreter_out class ModuleUtilLocatorBase: def __init__(self, fq_name_parts, is_ambiguous=False, child_is_redirected=False, is_optional=False): self._is_ambiguous = is_ambiguous # a child package redirection could cause intermediate package levels to be missing, eg # from ansible.module_utils.x.y.z import foo; if x.y.z.foo is redirected, we may not have packages on disk for # the intermediate packages x.y.z, so we'll need to supply empty packages for those self._child_is_redirected = child_is_redirected self._is_optional = is_optional self.found = False self.redirected = False self.fq_name_parts = fq_name_parts self.source_code = '' self.output_path = '' self.is_package = False self._collection_name = None # for ambiguous imports, we should only test for things more than one level below module_utils # this lets us detect erroneous imports and redirections earlier if is_ambiguous and len(self._get_module_utils_remainder_parts(fq_name_parts)) > 1: self.candidate_names = [fq_name_parts, fq_name_parts[:-1]] else: self.candidate_names = [fq_name_parts] @property def candidate_names_joined(self): return ['.'.join(n) for n in self.candidate_names] def _handle_redirect(self, name_parts): module_utils_relative_parts = self._get_module_utils_remainder_parts(name_parts) # only allow redirects from below module_utils- if above that, bail out (eg, parent package names) if not module_utils_relative_parts: return False try: collection_metadata = _get_collection_metadata(self._collection_name) except ValueError as ve: # collection not found or some other error related to collection load if self._is_optional: return False raise AnsibleError('error processing module_util {0} loading redirected collection {1}: {2}' .format('.'.join(name_parts), self._collection_name, to_native(ve))) routing_entry = _nested_dict_get(collection_metadata, ['plugin_routing', 'module_utils', '.'.join(module_utils_relative_parts)]) if not routing_entry: return False # FIXME: add deprecation warning support dep_or_ts = routing_entry.get('tombstone') removed = dep_or_ts is not None if not removed: dep_or_ts = routing_entry.get('deprecation') if dep_or_ts: removal_date = dep_or_ts.get('removal_date') removal_version = dep_or_ts.get('removal_version') warning_text = dep_or_ts.get('warning_text') msg = 'module_util {0} has been removed'.format('.'.join(name_parts)) if warning_text: msg += ' ({0})'.format(warning_text) else: msg += '.' display.deprecated(msg, removal_version, removed, removal_date, self._collection_name) if 'redirect' in routing_entry: self.redirected = True source_pkg = '.'.join(name_parts) self.is_package = True # treat all redirects as packages redirect_target_pkg = routing_entry['redirect'] # expand FQCN redirects if not redirect_target_pkg.startswith('ansible_collections'): split_fqcn = redirect_target_pkg.split('.') if len(split_fqcn) < 3: raise Exception('invalid redirect for {0}: {1}'.format(source_pkg, redirect_target_pkg)) # assume it's an FQCN, expand it redirect_target_pkg = 'ansible_collections.{0}.{1}.plugins.module_utils.{2}'.format( split_fqcn[0], # ns split_fqcn[1], # coll '.'.join(split_fqcn[2:]) # sub-module_utils remainder ) display.vvv('redirecting module_util {0} to {1}'.format(source_pkg, redirect_target_pkg)) self.source_code = self._generate_redirect_shim_source(source_pkg, redirect_target_pkg) return True return False def _get_module_utils_remainder_parts(self, name_parts): # subclasses should override to return the name parts after module_utils return [] def _get_module_utils_remainder(self, name_parts): # return the remainder parts as a package string return '.'.join(self._get_module_utils_remainder_parts(name_parts)) def _find_module(self, name_parts): return False def _locate(self, redirect_first=True): for candidate_name_parts in self.candidate_names: if redirect_first and self._handle_redirect(candidate_name_parts): break if self._find_module(candidate_name_parts): break if not redirect_first and self._handle_redirect(candidate_name_parts): break else: # didn't find what we were looking for- last chance for packages whose parents were redirected if self._child_is_redirected: # make fake packages self.is_package = True self.source_code = '' else: # nope, just bail return if self.is_package: path_parts = candidate_name_parts + ('__init__',) else: path_parts = candidate_name_parts self.found = True self.output_path = os.path.join(*path_parts) + '.py' self.fq_name_parts = candidate_name_parts def _generate_redirect_shim_source(self, fq_source_module, fq_target_module): return """ import sys import {1} as mod sys.modules['{0}'] = mod """.format(fq_source_module, fq_target_module) # FIXME: add __repr__ impl class LegacyModuleUtilLocator(ModuleUtilLocatorBase): def __init__(self, fq_name_parts, is_ambiguous=False, mu_paths=None, child_is_redirected=False): super(LegacyModuleUtilLocator, self).__init__(fq_name_parts, is_ambiguous, child_is_redirected) if fq_name_parts[0:2] != ('ansible', 'module_utils'): raise Exception('this class can only locate from ansible.module_utils, got {0}'.format(fq_name_parts)) if fq_name_parts[2] == 'six': # FIXME: handle the ansible.module_utils.six._six case with a redirect or an internal _six attr on six itself? # six creates its submodules at runtime; convert all these to just 'ansible.module_utils.six' fq_name_parts = ('ansible', 'module_utils', 'six') self.candidate_names = [fq_name_parts] self._mu_paths = mu_paths self._collection_name = 'ansible.builtin' # legacy module utils always look in ansible.builtin for redirects self._locate(redirect_first=False) # let local stuff override redirects for legacy def _get_module_utils_remainder_parts(self, name_parts): return name_parts[2:] # eg, foo.bar for ansible.module_utils.foo.bar def _find_module(self, name_parts): rel_name_parts = self._get_module_utils_remainder_parts(name_parts) # no redirection; try to find the module if len(rel_name_parts) == 1: # direct child of module_utils, just search the top-level dirs we were given paths = self._mu_paths else: # a nested submodule of module_utils, extend the paths given with the intermediate package names paths = [os.path.join(p, *rel_name_parts[:-1]) for p in self._mu_paths] # extend the MU paths with the relative bit if imp is None: # python3 find module # find_spec needs the full module name self._info = info = importlib.machinery.PathFinder.find_spec('.'.join(name_parts), paths) if info is not None and os.path.splitext(info.origin)[1] in importlib.machinery.SOURCE_SUFFIXES: self.is_package = info.origin.endswith('/__init__.py') path = info.origin else: return False self.source_code = _slurp(path) else: # python2 find module try: # imp just wants the leaf module/package name being searched for info = imp.find_module(name_parts[-1], paths) except ImportError: return False if info[2][2] == imp.PY_SOURCE: fd = info[0] elif info[2][2] == imp.PKG_DIRECTORY: self.is_package = True fd = open(os.path.join(info[1], '__init__.py')) else: return False try: self.source_code = fd.read() finally: fd.close() return True class CollectionModuleUtilLocator(ModuleUtilLocatorBase): def __init__(self, fq_name_parts, is_ambiguous=False, child_is_redirected=False, is_optional=False): super(CollectionModuleUtilLocator, self).__init__(fq_name_parts, is_ambiguous, child_is_redirected, is_optional) if fq_name_parts[0] != 'ansible_collections': raise Exception('CollectionModuleUtilLocator can only locate from ansible_collections, got {0}'.format(fq_name_parts)) elif len(fq_name_parts) >= 6 and fq_name_parts[3:5] != ('plugins', 'module_utils'): raise Exception('CollectionModuleUtilLocator can only locate below ansible_collections.(ns).(coll).plugins.module_utils, got {0}' .format(fq_name_parts)) self._collection_name = '.'.join(fq_name_parts[1:3]) self._locate() def _find_module(self, name_parts): # synthesize empty inits for packages down through module_utils- we don't want to allow those to be shipped over, but the # package hierarchy needs to exist if len(name_parts) < 6: self.source_code = '' self.is_package = True return True # NB: we can't use pkgutil.get_data safely here, since we don't want to import/execute package/module code on # the controller while analyzing/assembling the module, so we'll have to manually import the collection's # Python package to locate it (import root collection, reassemble resource path beneath, fetch source) collection_pkg_name = '.'.join(name_parts[0:3]) resource_base_path = os.path.join(*name_parts[3:]) src = None # look for package_dir first, then module try: src = pkgutil.get_data(collection_pkg_name, to_native(os.path.join(resource_base_path, '__init__.py'))) except ImportError: pass # TODO: we might want to synthesize fake inits for py3-style packages, for now they're required beneath module_utils if src is not None: # empty string is OK self.is_package = True else: try: src = pkgutil.get_data(collection_pkg_name, to_native(resource_base_path + '.py')) except ImportError: pass if src is None: # empty string is OK return False self.source_code = src return True def _get_module_utils_remainder_parts(self, name_parts): return name_parts[5:] # eg, foo.bar for ansible_collections.ns.coll.plugins.module_utils.foo.bar def recursive_finder(name, module_fqn, module_data, zf): """ Using ModuleDepFinder, make sure we have all of the module_utils files that the module and its module_utils files needs. (no longer actually recursive) :arg name: Name of the python module we're examining :arg module_fqn: Fully qualified name of the python module we're scanning :arg module_data: string Python code of the module we're scanning :arg zf: An open :python:class:`zipfile.ZipFile` object that holds the Ansible module payload which we're assembling """ # py_module_cache maps python module names to a tuple of the code in the module # and the pathname to the module. # Here we pre-load it with modules which we create without bothering to # read from actual files (In some cases, these need to differ from what ansible # ships because they're namespace packages in the module) # FIXME: do we actually want ns pkg behavior for these? Seems like they should just be forced to emptyish pkg stubs py_module_cache = { ('ansible',): ( b'from pkgutil import extend_path\n' b'__path__=extend_path(__path__,__name__)\n' b'__version__="' + to_bytes(__version__) + b'"\n__author__="' + to_bytes(__author__) + b'"\n', 'ansible/__init__.py'), ('ansible', 'module_utils'): ( b'from pkgutil import extend_path\n' b'__path__=extend_path(__path__,__name__)\n', 'ansible/module_utils/__init__.py')} module_utils_paths = [p for p in module_utils_loader._get_paths(subdirs=False) if os.path.isdir(p)] module_utils_paths.append(_MODULE_UTILS_PATH) # Parse the module code and find the imports of ansible.module_utils try: tree = compile(module_data, '', 'exec', ast.PyCF_ONLY_AST) except (SyntaxError, IndentationError) as e: raise AnsibleError("Unable to import %s due to %s" % (name, e.msg)) finder = ModuleDepFinder(module_fqn, tree) # the format of this set is a tuple of the module name and whether or not the import is ambiguous as a module name # or an attribute of a module (eg from x.y import z <-- is z a module or an attribute of x.y?) modules_to_process = [ModuleUtilsProcessEntry(m, True, False, is_optional=m in finder.optional_imports) for m in finder.submodules] # HACK: basic is currently always required since module global init is currently tied up with AnsiballZ arg input modules_to_process.append(ModuleUtilsProcessEntry(('ansible', 'module_utils', 'basic'), False, False, is_optional=False)) # we'll be adding new modules inline as we discover them, so just keep going til we've processed them all while modules_to_process: modules_to_process.sort() # not strictly necessary, but nice to process things in predictable and repeatable order py_module_name, is_ambiguous, child_is_redirected, is_optional = modules_to_process.pop(0) if py_module_name in py_module_cache: # this is normal; we'll often see the same module imported many times, but we only need to process it once continue if py_module_name[0:2] == ('ansible', 'module_utils'): module_info = LegacyModuleUtilLocator(py_module_name, is_ambiguous=is_ambiguous, mu_paths=module_utils_paths, child_is_redirected=child_is_redirected) elif py_module_name[0] == 'ansible_collections': module_info = CollectionModuleUtilLocator(py_module_name, is_ambiguous=is_ambiguous, child_is_redirected=child_is_redirected, is_optional=is_optional) else: # FIXME: dot-joined result display.warning('ModuleDepFinder improperly found a non-module_utils import %s' % [py_module_name]) continue # Could not find the module. Construct a helpful error message. if not module_info.found: if is_optional: # this was a best-effort optional import that we couldn't find, oh well, move along... continue # FIXME: use dot-joined candidate names msg = 'Could not find imported module support code for {0}. Looked for ({1})'.format(module_fqn, module_info.candidate_names_joined) raise AnsibleError(msg) # check the cache one more time with the module we actually found, since the name could be different than the input # eg, imported name vs module if module_info.fq_name_parts in py_module_cache: continue # compile the source, process all relevant imported modules try: tree = compile(module_info.source_code, '', 'exec', ast.PyCF_ONLY_AST) except (SyntaxError, IndentationError) as e: raise AnsibleError("Unable to import %s due to %s" % (module_info.fq_name_parts, e.msg)) finder = ModuleDepFinder('.'.join(module_info.fq_name_parts), tree, module_info.is_package) modules_to_process.extend(ModuleUtilsProcessEntry(m, True, False, is_optional=m in finder.optional_imports) for m in finder.submodules if m not in py_module_cache) # we've processed this item, add it to the output list py_module_cache[module_info.fq_name_parts] = (module_info.source_code, module_info.output_path) # ensure we process all ancestor package inits accumulated_pkg_name = [] for pkg in module_info.fq_name_parts[:-1]: accumulated_pkg_name.append(pkg) # we're accumulating this across iterations normalized_name = tuple(accumulated_pkg_name) # extra machinations to get a hashable type (list is not) if normalized_name not in py_module_cache: modules_to_process.append(ModuleUtilsProcessEntry(normalized_name, False, module_info.redirected, is_optional=is_optional)) for py_module_name in py_module_cache: py_module_file_name = py_module_cache[py_module_name][1] zf.writestr(py_module_file_name, py_module_cache[py_module_name][0]) mu_file = to_text(py_module_file_name, errors='surrogate_or_strict') display.vvvvv("Including module_utils file %s" % mu_file) def _is_binary(b_module_data): textchars = bytearray(set([7, 8, 9, 10, 12, 13, 27]) | set(range(0x20, 0x100)) - set([0x7f])) start = b_module_data[:1024] return bool(start.translate(None, textchars)) def _get_ansible_module_fqn(module_path): """ Get the fully qualified name for an ansible module based on its pathname remote_module_fqn is the fully qualified name. Like ansible.modules.system.ping Or ansible_collections.Namespace.Collection_name.plugins.modules.ping .. warning:: This function is for ansible modules only. It won't work for other things (non-module plugins, etc) """ remote_module_fqn = None # Is this a core module? match = CORE_LIBRARY_PATH_RE.search(module_path) if not match: # Is this a module in a collection? match = COLLECTION_PATH_RE.search(module_path) # We can tell the FQN for core modules and collection modules if match: path = match.group('path') if '.' in path: # FQNs must be valid as python identifiers. This sanity check has failed. # we could check other things as well raise ValueError('Module name (or path) was not a valid python identifier') remote_module_fqn = '.'.join(path.split('/')) else: # Currently we do not handle modules in roles so we can end up here for that reason raise ValueError("Unable to determine module's fully qualified name") return remote_module_fqn def _add_module_to_zip(zf, remote_module_fqn, b_module_data): """Add a module from ansible or from an ansible collection into the module zip""" module_path_parts = remote_module_fqn.split('.') # Write the module module_path = '/'.join(module_path_parts) + '.py' zf.writestr(module_path, b_module_data) # Write the __init__.py's necessary to get there if module_path_parts[0] == 'ansible': # The ansible namespace is setup as part of the module_utils setup... start = 2 existing_paths = frozenset() else: # ... but ansible_collections and other toplevels are not start = 1 existing_paths = frozenset(zf.namelist()) for idx in range(start, len(module_path_parts)): package_path = '/'.join(module_path_parts[:idx]) + '/__init__.py' # If a collections module uses module_utils from a collection then most packages will have already been added by recursive_finder. if package_path in existing_paths: continue # Note: We don't want to include more than one ansible module in a payload at this time # so no need to fill the __init__.py with namespace code zf.writestr(package_path, b'') def _find_module_utils(module_name, b_module_data, module_path, module_args, task_vars, templar, module_compression, async_timeout, become, become_method, become_user, become_password, become_flags, environment, remote_is_local=False): """ Given the source of the module, convert it to a Jinja2 template to insert module code and return whether it's a new or old style module. """ module_substyle = module_style = 'old' # module_style is something important to calling code (ActionBase). It # determines how arguments are formatted (json vs k=v) and whether # a separate arguments file needs to be sent over the wire. # module_substyle is extra information that's useful internally. It tells # us what we have to look to substitute in the module files and whether # we're using module replacer or ansiballz to format the module itself. if _is_binary(b_module_data): module_substyle = module_style = 'binary' elif REPLACER in b_module_data: # Do REPLACER before from ansible.module_utils because we need make sure # we substitute "from ansible.module_utils basic" for REPLACER module_style = 'new' module_substyle = 'python' b_module_data = b_module_data.replace(REPLACER, b'from ansible.module_utils.basic import *') elif NEW_STYLE_PYTHON_MODULE_RE.search(b_module_data): module_style = 'new' module_substyle = 'python' elif REPLACER_WINDOWS in b_module_data: module_style = 'new' module_substyle = 'powershell' b_module_data = b_module_data.replace(REPLACER_WINDOWS, b'#Requires -Module Ansible.ModuleUtils.Legacy') elif re.search(b'#Requires -Module', b_module_data, re.IGNORECASE) \ or re.search(b'#Requires -Version', b_module_data, re.IGNORECASE)\ or re.search(b'#AnsibleRequires -OSVersion', b_module_data, re.IGNORECASE) \ or re.search(b'#AnsibleRequires -Powershell', b_module_data, re.IGNORECASE) \ or re.search(b'#AnsibleRequires -CSharpUtil', b_module_data, re.IGNORECASE): module_style = 'new' module_substyle = 'powershell' elif REPLACER_JSONARGS in b_module_data: module_style = 'new' module_substyle = 'jsonargs' elif b'WANT_JSON' in b_module_data: module_substyle = module_style = 'non_native_want_json' shebang = None # Neither old-style, non_native_want_json nor binary modules should be modified # except for the shebang line (Done by modify_module) if module_style in ('old', 'non_native_want_json', 'binary'): return b_module_data, module_style, shebang output = BytesIO() try: remote_module_fqn = _get_ansible_module_fqn(module_path) except ValueError: # Modules in roles currently are not found by the fqn heuristic so we # fallback to this. This means that relative imports inside a module from # a role may fail. Absolute imports should be used for future-proofness. # People should start writing collections instead of modules in roles so we # may never fix this display.debug('ANSIBALLZ: Could not determine module FQN') remote_module_fqn = 'ansible.modules.%s' % module_name if module_substyle == 'python': params = dict(ANSIBLE_MODULE_ARGS=module_args,) try: python_repred_params = repr(json.dumps(params, cls=AnsibleJSONEncoder, vault_to_text=True)) except TypeError as e: raise AnsibleError("Unable to pass options to module, they must be JSON serializable: %s" % to_native(e)) try: compression_method = getattr(zipfile, module_compression) except AttributeError: display.warning(u'Bad module compression string specified: %s. Using ZIP_STORED (no compression)' % module_compression) compression_method = zipfile.ZIP_STORED lookup_path = os.path.join(C.DEFAULT_LOCAL_TMP, 'ansiballz_cache') cached_module_filename = os.path.join(lookup_path, "%s-%s" % (module_name, module_compression)) zipdata = None # Optimization -- don't lock if the module has already been cached if os.path.exists(cached_module_filename): display.debug('ANSIBALLZ: using cached module: %s' % cached_module_filename) with open(cached_module_filename, 'rb') as module_data: zipdata = module_data.read() else: if module_name in action_write_locks.action_write_locks: display.debug('ANSIBALLZ: Using lock for %s' % module_name) lock = action_write_locks.action_write_locks[module_name] else: # If the action plugin directly invokes the module (instead of # going through a strategy) then we don't have a cross-process # Lock specifically for this module. Use the "unexpected # module" lock instead display.debug('ANSIBALLZ: Using generic lock for %s' % module_name) lock = action_write_locks.action_write_locks[None] display.debug('ANSIBALLZ: Acquiring lock') with lock: display.debug('ANSIBALLZ: Lock acquired: %s' % id(lock)) # Check that no other process has created this while we were # waiting for the lock if not os.path.exists(cached_module_filename): display.debug('ANSIBALLZ: Creating module') # Create the module zip data zipoutput = BytesIO() zf = zipfile.ZipFile(zipoutput, mode='w', compression=compression_method) # walk the module imports, looking for module_utils to send- they'll be added to the zipfile recursive_finder(module_name, remote_module_fqn, b_module_data, zf) display.debug('ANSIBALLZ: Writing module into payload') _add_module_to_zip(zf, remote_module_fqn, b_module_data) zf.close() zipdata = base64.b64encode(zipoutput.getvalue()) # Write the assembled module to a temp file (write to temp # so that no one looking for the file reads a partially # written file) # # FIXME: Once split controller/remote is merged, this can be simplified to # os.makedirs(lookup_path, exist_ok=True) if not os.path.exists(lookup_path): try: # Note -- if we have a global function to setup, that would # be a better place to run this os.makedirs(lookup_path) except OSError: # Multiple processes tried to create the directory. If it still does not # exist, raise the original exception. if not os.path.exists(lookup_path): raise display.debug('ANSIBALLZ: Writing module') with open(cached_module_filename + '-part', 'wb') as f: f.write(zipdata) # Rename the file into its final position in the cache so # future users of this module can read it off the # filesystem instead of constructing from scratch. display.debug('ANSIBALLZ: Renaming module') os.rename(cached_module_filename + '-part', cached_module_filename) display.debug('ANSIBALLZ: Done creating module') if zipdata is None: display.debug('ANSIBALLZ: Reading module after lock') # Another process wrote the file while we were waiting for # the write lock. Go ahead and read the data from disk # instead of re-creating it. try: with open(cached_module_filename, 'rb') as f: zipdata = f.read() except IOError: raise AnsibleError('A different worker process failed to create module file. ' 'Look at traceback for that process for debugging information.') zipdata = to_text(zipdata, errors='surrogate_or_strict') shebang, interpreter = _get_shebang(u'/usr/bin/python', task_vars, templar, remote_is_local=remote_is_local) if shebang is None: shebang = u'#!/usr/bin/python' # FUTURE: the module cache entry should be invalidated if we got this value from a host-dependent source rlimit_nofile = C.config.get_config_value('PYTHON_MODULE_RLIMIT_NOFILE', variables=task_vars) if not isinstance(rlimit_nofile, int): rlimit_nofile = int(templar.template(rlimit_nofile)) if rlimit_nofile: rlimit = ANSIBALLZ_RLIMIT_TEMPLATE % dict( rlimit_nofile=rlimit_nofile, ) else: rlimit = '' coverage_config = os.environ.get('_ANSIBLE_COVERAGE_CONFIG') if coverage_config: coverage_output = os.environ['_ANSIBLE_COVERAGE_OUTPUT'] if coverage_output: # Enable code coverage analysis of the module. # This feature is for internal testing and may change without notice. coverage = ANSIBALLZ_COVERAGE_TEMPLATE % dict( coverage_config=coverage_config, coverage_output=coverage_output, ) else: # Verify coverage is available without importing it. # This will detect when a module would fail with coverage enabled with minimal overhead. coverage = ANSIBALLZ_COVERAGE_CHECK_TEMPLATE else: coverage = '' now = datetime.datetime.utcnow() output.write(to_bytes(ACTIVE_ANSIBALLZ_TEMPLATE % dict( zipdata=zipdata, ansible_module=module_name, module_fqn=remote_module_fqn, params=python_repred_params, shebang=shebang, coding=ENCODING_STRING, year=now.year, month=now.month, day=now.day, hour=now.hour, minute=now.minute, second=now.second, coverage=coverage, rlimit=rlimit, ))) b_module_data = output.getvalue() elif module_substyle == 'powershell': # Powershell/winrm don't actually make use of shebang so we can # safely set this here. If we let the fallback code handle this # it can fail in the presence of the UTF8 BOM commonly added by # Windows text editors shebang = u'#!powershell' # create the common exec wrapper payload and set that as the module_data # bytes b_module_data = ps_manifest._create_powershell_wrapper( b_module_data, module_path, module_args, environment, async_timeout, become, become_method, become_user, become_password, become_flags, module_substyle, task_vars, remote_module_fqn ) elif module_substyle == 'jsonargs': module_args_json = to_bytes(json.dumps(module_args, cls=AnsibleJSONEncoder, vault_to_text=True)) # these strings could be included in a third-party module but # officially they were included in the 'basic' snippet for new-style # python modules (which has been replaced with something else in # ansiballz) If we remove them from jsonargs-style module replacer # then we can remove them everywhere. python_repred_args = to_bytes(repr(module_args_json)) b_module_data = b_module_data.replace(REPLACER_VERSION, to_bytes(repr(__version__))) b_module_data = b_module_data.replace(REPLACER_COMPLEX, python_repred_args) b_module_data = b_module_data.replace(REPLACER_SELINUX, to_bytes(','.join(C.DEFAULT_SELINUX_SPECIAL_FS))) # The main event -- substitute the JSON args string into the module b_module_data = b_module_data.replace(REPLACER_JSONARGS, module_args_json) facility = b'syslog.' + to_bytes(task_vars.get('ansible_syslog_facility', C.DEFAULT_SYSLOG_FACILITY), errors='surrogate_or_strict') b_module_data = b_module_data.replace(b'syslog.LOG_USER', facility) return (b_module_data, module_style, shebang) def modify_module(module_name, module_path, module_args, templar, task_vars=None, module_compression='ZIP_STORED', async_timeout=0, become=False, become_method=None, become_user=None, become_password=None, become_flags=None, environment=None, remote_is_local=False): """ Used to insert chunks of code into modules before transfer rather than doing regular python imports. This allows for more efficient transfer in a non-bootstrapping scenario by not moving extra files over the wire and also takes care of embedding arguments in the transferred modules. This version is done in such a way that local imports can still be used in the module code, so IDEs don't have to be aware of what is going on. Example: from ansible.module_utils.basic import * ... will result in the insertion of basic.py into the module from the module_utils/ directory in the source tree. For powershell, this code effectively no-ops, as the exec wrapper requires access to a number of properties not available here. """ task_vars = {} if task_vars is None else task_vars environment = {} if environment is None else environment with open(module_path, 'rb') as f: # read in the module source b_module_data = f.read() (b_module_data, module_style, shebang) = _find_module_utils(module_name, b_module_data, module_path, module_args, task_vars, templar, module_compression, async_timeout=async_timeout, become=become, become_method=become_method, become_user=become_user, become_password=become_password, become_flags=become_flags, environment=environment, remote_is_local=remote_is_local) if module_style == 'binary': return (b_module_data, module_style, to_text(shebang, nonstring='passthru')) elif shebang is None: b_lines = b_module_data.split(b"\n", 1) if b_lines[0].startswith(b"#!"): b_shebang = b_lines[0].strip() # shlex.split on python-2.6 needs bytes. On python-3.x it needs text args = shlex.split(to_native(b_shebang[2:], errors='surrogate_or_strict')) # _get_shebang() takes text strings args = [to_text(a, errors='surrogate_or_strict') for a in args] interpreter = args[0] b_new_shebang = to_bytes(_get_shebang(interpreter, task_vars, templar, args[1:], remote_is_local=remote_is_local)[0], errors='surrogate_or_strict', nonstring='passthru') if b_new_shebang: b_lines[0] = b_shebang = b_new_shebang if os.path.basename(interpreter).startswith(u'python'): b_lines.insert(1, b_ENCODING_STRING) shebang = to_text(b_shebang, nonstring='passthru', errors='surrogate_or_strict') else: # No shebang, assume a binary module? pass b_module_data = b"\n".join(b_lines) return (b_module_data, module_style, shebang) def get_action_args_with_defaults(action, args, defaults, templar, redirected_names=None, action_groups=None): if redirected_names: resolved_action_name = redirected_names[-1] else: resolved_action_name = action if redirected_names is not None: msg = ( "Finding module_defaults for the action %s. " "The caller passed a list of redirected action names, which is deprecated. " "The task's resolved action should be provided as the first argument instead." ) display.deprecated(msg % resolved_action_name, version='2.16') # Get the list of groups that contain this action if action_groups is None: msg = ( "Finding module_defaults for action %s. " "The caller has not passed the action_groups, so any " "that may include this action will be ignored." ) display.warning(msg=msg) group_names = [] else: group_names = action_groups.get(resolved_action_name, []) tmp_args = {} module_defaults = {} # Merge latest defaults into dict, since they are a list of dicts if isinstance(defaults, list): for default in defaults: module_defaults.update(default) # module_defaults keys are static, but the values may be templated module_defaults = templar.template(module_defaults) for default in module_defaults: if default.startswith('group/'): group_name = default.split('group/')[-1] if group_name in group_names: tmp_args.update((module_defaults.get('group/%s' % group_name) or {}).copy()) # handle specific action defaults tmp_args.update(module_defaults.get(resolved_action_name, {}).copy()) # direct args override all tmp_args.update(args) return tmp_args ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.553556 ansible-core-2.12.0/lib/ansible/executor/play_iterator.py0000644000000000000000000006357200000000000023364 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import fnmatch from ansible import constants as C from ansible.module_utils.six import iteritems from ansible.module_utils.parsing.convert_bool import boolean from ansible.playbook.block import Block from ansible.playbook.task import Task from ansible.utils.display import Display display = Display() __all__ = ['PlayIterator'] class HostState: def __init__(self, blocks): self._blocks = blocks[:] self.cur_block = 0 self.cur_regular_task = 0 self.cur_rescue_task = 0 self.cur_always_task = 0 self.run_state = PlayIterator.ITERATING_SETUP self.fail_state = PlayIterator.FAILED_NONE self.pending_setup = False self.tasks_child_state = None self.rescue_child_state = None self.always_child_state = None self.did_rescue = False self.did_start_at_task = False def __repr__(self): return "HostState(%r)" % self._blocks def __str__(self): def _run_state_to_string(n): states = ["ITERATING_SETUP", "ITERATING_TASKS", "ITERATING_RESCUE", "ITERATING_ALWAYS", "ITERATING_COMPLETE"] try: return states[n] except IndexError: return "UNKNOWN STATE" def _failed_state_to_string(n): states = {1: "FAILED_SETUP", 2: "FAILED_TASKS", 4: "FAILED_RESCUE", 8: "FAILED_ALWAYS"} if n == 0: return "FAILED_NONE" else: ret = [] for i in (1, 2, 4, 8): if n & i: ret.append(states[i]) return "|".join(ret) return ("HOST STATE: block=%d, task=%d, rescue=%d, always=%d, run_state=%s, fail_state=%s, pending_setup=%s, tasks child state? (%s), " "rescue child state? (%s), always child state? (%s), did rescue? %s, did start at task? %s" % ( self.cur_block, self.cur_regular_task, self.cur_rescue_task, self.cur_always_task, _run_state_to_string(self.run_state), _failed_state_to_string(self.fail_state), self.pending_setup, self.tasks_child_state, self.rescue_child_state, self.always_child_state, self.did_rescue, self.did_start_at_task, )) def __eq__(self, other): if not isinstance(other, HostState): return False for attr in ('_blocks', 'cur_block', 'cur_regular_task', 'cur_rescue_task', 'cur_always_task', 'run_state', 'fail_state', 'pending_setup', 'tasks_child_state', 'rescue_child_state', 'always_child_state'): if getattr(self, attr) != getattr(other, attr): return False return True def get_current_block(self): return self._blocks[self.cur_block] def copy(self): new_state = HostState(self._blocks) new_state.cur_block = self.cur_block new_state.cur_regular_task = self.cur_regular_task new_state.cur_rescue_task = self.cur_rescue_task new_state.cur_always_task = self.cur_always_task new_state.run_state = self.run_state new_state.fail_state = self.fail_state new_state.pending_setup = self.pending_setup new_state.did_rescue = self.did_rescue new_state.did_start_at_task = self.did_start_at_task if self.tasks_child_state is not None: new_state.tasks_child_state = self.tasks_child_state.copy() if self.rescue_child_state is not None: new_state.rescue_child_state = self.rescue_child_state.copy() if self.always_child_state is not None: new_state.always_child_state = self.always_child_state.copy() return new_state class PlayIterator: # the primary running states for the play iteration ITERATING_SETUP = 0 ITERATING_TASKS = 1 ITERATING_RESCUE = 2 ITERATING_ALWAYS = 3 ITERATING_COMPLETE = 4 # the failure states for the play iteration, which are powers # of 2 as they may be or'ed together in certain circumstances FAILED_NONE = 0 FAILED_SETUP = 1 FAILED_TASKS = 2 FAILED_RESCUE = 4 FAILED_ALWAYS = 8 def __init__(self, inventory, play, play_context, variable_manager, all_vars, start_at_done=False): self._play = play self._blocks = [] self._variable_manager = variable_manager # Default options to gather gather_subset = self._play.gather_subset gather_timeout = self._play.gather_timeout fact_path = self._play.fact_path setup_block = Block(play=self._play) # Gathering facts with run_once would copy the facts from one host to # the others. setup_block.run_once = False setup_task = Task(block=setup_block) setup_task.action = 'gather_facts' setup_task.name = 'Gathering Facts' setup_task.args = { 'gather_subset': gather_subset, } # Unless play is specifically tagged, gathering should 'always' run if not self._play.tags: setup_task.tags = ['always'] if gather_timeout: setup_task.args['gather_timeout'] = gather_timeout if fact_path: setup_task.args['fact_path'] = fact_path setup_task.set_loader(self._play._loader) # short circuit fact gathering if the entire playbook is conditional if self._play._included_conditional is not None: setup_task.when = self._play._included_conditional[:] setup_block.block = [setup_task] setup_block = setup_block.filter_tagged_tasks(all_vars) self._blocks.append(setup_block) for block in self._play.compile(): new_block = block.filter_tagged_tasks(all_vars) if new_block.has_tasks(): self._blocks.append(new_block) self._host_states = {} start_at_matched = False batch = inventory.get_hosts(self._play.hosts, order=self._play.order) self.batch_size = len(batch) for host in batch: self._host_states[host.name] = HostState(blocks=self._blocks) # if we're looking to start at a specific task, iterate through # the tasks for this host until we find the specified task if play_context.start_at_task is not None and not start_at_done: while True: (s, task) = self.get_next_task_for_host(host, peek=True) if s.run_state == self.ITERATING_COMPLETE: break if task.name == play_context.start_at_task or (task.name and fnmatch.fnmatch(task.name, play_context.start_at_task)) or \ task.get_name() == play_context.start_at_task or fnmatch.fnmatch(task.get_name(), play_context.start_at_task): start_at_matched = True break else: self.get_next_task_for_host(host) # finally, reset the host's state to ITERATING_SETUP if start_at_matched: self._host_states[host.name].did_start_at_task = True self._host_states[host.name].run_state = self.ITERATING_SETUP if start_at_matched: # we have our match, so clear the start_at_task field on the # play context to flag that we've started at a task (and future # plays won't try to advance) play_context.start_at_task = None self.end_play = False def get_host_state(self, host): # Since we're using the PlayIterator to carry forward failed hosts, # in the event that a previous host was not in the current inventory # we create a stub state for it now if host.name not in self._host_states: self._host_states[host.name] = HostState(blocks=[]) return self._host_states[host.name].copy() def cache_block_tasks(self, block): # now a noop, we've changed the way we do caching and finding of # original task entries, but just in case any 3rd party strategies # are using this we're leaving it here for now return def get_next_task_for_host(self, host, peek=False): display.debug("getting the next task for host %s" % host.name) s = self.get_host_state(host) task = None if s.run_state == self.ITERATING_COMPLETE: display.debug("host %s is done iterating, returning" % host.name) return (s, None) (s, task) = self._get_next_task_from_state(s, host=host) if not peek: self._host_states[host.name] = s display.debug("done getting next task for host %s" % host.name) display.debug(" ^ task is: %s" % task) display.debug(" ^ state is: %s" % s) return (s, task) def _get_next_task_from_state(self, state, host): task = None # try and find the next task, given the current state. while True: # try to get the current block from the list of blocks, and # if we run past the end of the list we know we're done with # this block try: block = state._blocks[state.cur_block] except IndexError: state.run_state = self.ITERATING_COMPLETE return (state, None) if state.run_state == self.ITERATING_SETUP: # First, we check to see if we were pending setup. If not, this is # the first trip through ITERATING_SETUP, so we set the pending_setup # flag and try to determine if we do in fact want to gather facts for # the specified host. if not state.pending_setup: state.pending_setup = True # Gather facts if the default is 'smart' and we have not yet # done it for this host; or if 'explicit' and the play sets # gather_facts to True; or if 'implicit' and the play does # NOT explicitly set gather_facts to False. gathering = C.DEFAULT_GATHERING implied = self._play.gather_facts is None or boolean(self._play.gather_facts, strict=False) if (gathering == 'implicit' and implied) or \ (gathering == 'explicit' and boolean(self._play.gather_facts, strict=False)) or \ (gathering == 'smart' and implied and not (self._variable_manager._fact_cache.get(host.name, {}).get('_ansible_facts_gathered', False))): # The setup block is always self._blocks[0], as we inject it # during the play compilation in __init__ above. setup_block = self._blocks[0] if setup_block.has_tasks() and len(setup_block.block) > 0: task = setup_block.block[0] else: # This is the second trip through ITERATING_SETUP, so we clear # the flag and move onto the next block in the list while setting # the run state to ITERATING_TASKS state.pending_setup = False state.run_state = self.ITERATING_TASKS if not state.did_start_at_task: state.cur_block += 1 state.cur_regular_task = 0 state.cur_rescue_task = 0 state.cur_always_task = 0 state.tasks_child_state = None state.rescue_child_state = None state.always_child_state = None elif state.run_state == self.ITERATING_TASKS: # clear the pending setup flag, since we're past that and it didn't fail if state.pending_setup: state.pending_setup = False # First, we check for a child task state that is not failed, and if we # have one recurse into it for the next task. If we're done with the child # state, we clear it and drop back to getting the next task from the list. if state.tasks_child_state: (state.tasks_child_state, task) = self._get_next_task_from_state(state.tasks_child_state, host=host) if self._check_failed_state(state.tasks_child_state): # failed child state, so clear it and move into the rescue portion state.tasks_child_state = None self._set_failed_state(state) else: # get the next task recursively if task is None or state.tasks_child_state.run_state == self.ITERATING_COMPLETE: # we're done with the child state, so clear it and continue # back to the top of the loop to get the next task state.tasks_child_state = None continue else: # First here, we check to see if we've failed anywhere down the chain # of states we have, and if so we move onto the rescue portion. Otherwise, # we check to see if we've moved past the end of the list of tasks. If so, # we move into the always portion of the block, otherwise we get the next # task from the list. if self._check_failed_state(state): state.run_state = self.ITERATING_RESCUE elif state.cur_regular_task >= len(block.block): state.run_state = self.ITERATING_ALWAYS else: task = block.block[state.cur_regular_task] # if the current task is actually a child block, create a child # state for us to recurse into on the next pass if isinstance(task, Block): state.tasks_child_state = HostState(blocks=[task]) state.tasks_child_state.run_state = self.ITERATING_TASKS # since we've created the child state, clear the task # so we can pick up the child state on the next pass task = None state.cur_regular_task += 1 elif state.run_state == self.ITERATING_RESCUE: # The process here is identical to ITERATING_TASKS, except instead # we move into the always portion of the block. if host.name in self._play._removed_hosts: self._play._removed_hosts.remove(host.name) if state.rescue_child_state: (state.rescue_child_state, task) = self._get_next_task_from_state(state.rescue_child_state, host=host) if self._check_failed_state(state.rescue_child_state): state.rescue_child_state = None self._set_failed_state(state) else: if task is None or state.rescue_child_state.run_state == self.ITERATING_COMPLETE: state.rescue_child_state = None continue else: if state.fail_state & self.FAILED_RESCUE == self.FAILED_RESCUE: state.run_state = self.ITERATING_ALWAYS elif state.cur_rescue_task >= len(block.rescue): if len(block.rescue) > 0: state.fail_state = self.FAILED_NONE state.run_state = self.ITERATING_ALWAYS state.did_rescue = True else: task = block.rescue[state.cur_rescue_task] if isinstance(task, Block): state.rescue_child_state = HostState(blocks=[task]) state.rescue_child_state.run_state = self.ITERATING_TASKS task = None state.cur_rescue_task += 1 elif state.run_state == self.ITERATING_ALWAYS: # And again, the process here is identical to ITERATING_TASKS, except # instead we either move onto the next block in the list, or we set the # run state to ITERATING_COMPLETE in the event of any errors, or when we # have hit the end of the list of blocks. if state.always_child_state: (state.always_child_state, task) = self._get_next_task_from_state(state.always_child_state, host=host) if self._check_failed_state(state.always_child_state): state.always_child_state = None self._set_failed_state(state) else: if task is None or state.always_child_state.run_state == self.ITERATING_COMPLETE: state.always_child_state = None continue else: if state.cur_always_task >= len(block.always): if state.fail_state != self.FAILED_NONE: state.run_state = self.ITERATING_COMPLETE else: state.cur_block += 1 state.cur_regular_task = 0 state.cur_rescue_task = 0 state.cur_always_task = 0 state.run_state = self.ITERATING_TASKS state.tasks_child_state = None state.rescue_child_state = None state.always_child_state = None state.did_rescue = False else: task = block.always[state.cur_always_task] if isinstance(task, Block): state.always_child_state = HostState(blocks=[task]) state.always_child_state.run_state = self.ITERATING_TASKS task = None state.cur_always_task += 1 elif state.run_state == self.ITERATING_COMPLETE: return (state, None) # if something above set the task, break out of the loop now if task: break return (state, task) def _set_failed_state(self, state): if state.run_state == self.ITERATING_SETUP: state.fail_state |= self.FAILED_SETUP state.run_state = self.ITERATING_COMPLETE elif state.run_state == self.ITERATING_TASKS: if state.tasks_child_state is not None: state.tasks_child_state = self._set_failed_state(state.tasks_child_state) else: state.fail_state |= self.FAILED_TASKS if state._blocks[state.cur_block].rescue: state.run_state = self.ITERATING_RESCUE elif state._blocks[state.cur_block].always: state.run_state = self.ITERATING_ALWAYS else: state.run_state = self.ITERATING_COMPLETE elif state.run_state == self.ITERATING_RESCUE: if state.rescue_child_state is not None: state.rescue_child_state = self._set_failed_state(state.rescue_child_state) else: state.fail_state |= self.FAILED_RESCUE if state._blocks[state.cur_block].always: state.run_state = self.ITERATING_ALWAYS else: state.run_state = self.ITERATING_COMPLETE elif state.run_state == self.ITERATING_ALWAYS: if state.always_child_state is not None: state.always_child_state = self._set_failed_state(state.always_child_state) else: state.fail_state |= self.FAILED_ALWAYS state.run_state = self.ITERATING_COMPLETE return state def mark_host_failed(self, host): s = self.get_host_state(host) display.debug("marking host %s failed, current state: %s" % (host, s)) s = self._set_failed_state(s) display.debug("^ failed state is now: %s" % s) self._host_states[host.name] = s self._play._removed_hosts.append(host.name) def get_failed_hosts(self): return dict((host, True) for (host, state) in iteritems(self._host_states) if self._check_failed_state(state)) def _check_failed_state(self, state): if state is None: return False elif state.run_state == self.ITERATING_RESCUE and self._check_failed_state(state.rescue_child_state): return True elif state.run_state == self.ITERATING_ALWAYS and self._check_failed_state(state.always_child_state): return True elif state.fail_state != self.FAILED_NONE: if state.run_state == self.ITERATING_RESCUE and state.fail_state & self.FAILED_RESCUE == 0: return False elif state.run_state == self.ITERATING_ALWAYS and state.fail_state & self.FAILED_ALWAYS == 0: return False else: return not (state.did_rescue and state.fail_state & self.FAILED_ALWAYS == 0) elif state.run_state == self.ITERATING_TASKS and self._check_failed_state(state.tasks_child_state): cur_block = state._blocks[state.cur_block] if len(cur_block.rescue) > 0 and state.fail_state & self.FAILED_RESCUE == 0: return False else: return True return False def is_failed(self, host): s = self.get_host_state(host) return self._check_failed_state(s) def get_active_state(self, state): ''' Finds the active state, recursively if necessary when there are child states. ''' if state.run_state == self.ITERATING_TASKS and state.tasks_child_state is not None: return self.get_active_state(state.tasks_child_state) elif state.run_state == self.ITERATING_RESCUE and state.rescue_child_state is not None: return self.get_active_state(state.rescue_child_state) elif state.run_state == self.ITERATING_ALWAYS and state.always_child_state is not None: return self.get_active_state(state.always_child_state) return state def is_any_block_rescuing(self, state): ''' Given the current HostState state, determines if the current block, or any child blocks, are in rescue mode. ''' if state.run_state == self.ITERATING_RESCUE: return True if state.tasks_child_state is not None: return self.is_any_block_rescuing(state.tasks_child_state) return False def get_original_task(self, host, task): # now a noop because we've changed the way we do caching return (None, None) def _insert_tasks_into_state(self, state, task_list): # if we've failed at all, or if the task list is empty, just return the current state if state.fail_state != self.FAILED_NONE and state.run_state not in (self.ITERATING_RESCUE, self.ITERATING_ALWAYS) or not task_list: return state if state.run_state == self.ITERATING_TASKS: if state.tasks_child_state: state.tasks_child_state = self._insert_tasks_into_state(state.tasks_child_state, task_list) else: target_block = state._blocks[state.cur_block].copy() before = target_block.block[:state.cur_regular_task] after = target_block.block[state.cur_regular_task:] target_block.block = before + task_list + after state._blocks[state.cur_block] = target_block elif state.run_state == self.ITERATING_RESCUE: if state.rescue_child_state: state.rescue_child_state = self._insert_tasks_into_state(state.rescue_child_state, task_list) else: target_block = state._blocks[state.cur_block].copy() before = target_block.rescue[:state.cur_rescue_task] after = target_block.rescue[state.cur_rescue_task:] target_block.rescue = before + task_list + after state._blocks[state.cur_block] = target_block elif state.run_state == self.ITERATING_ALWAYS: if state.always_child_state: state.always_child_state = self._insert_tasks_into_state(state.always_child_state, task_list) else: target_block = state._blocks[state.cur_block].copy() before = target_block.always[:state.cur_always_task] after = target_block.always[state.cur_always_task:] target_block.always = before + task_list + after state._blocks[state.cur_block] = target_block return state def add_tasks(self, host, task_list): self._host_states[host.name] = self._insert_tasks_into_state(self.get_host_state(host), task_list) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1636383671.553556 ansible-core-2.12.0/lib/ansible/executor/playbook_executor.py0000644000000000000000000003542500000000000024240 0ustar00rootroot00000000000000# (c) 2012-2014, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # Make coding more python3-ish from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os from ansible import constants as C from ansible import context from ansible.executor.task_queue_manager import TaskQueueManager, AnsibleEndPlay from ansible.module_utils._text import to_text from ansible.module_utils.parsing.convert_bool import boolean from ansible.plugins.loader import become_loader, connection_loader, shell_loader from ansible.playbook import Playbook from ansible.template import Templar from ansible.utils.helpers import pct_to_int from ansible.utils.collection_loader import AnsibleCollectionConfig from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path, _get_collection_playbook_path from ansible.utils.path import makedirs_safe from ansible.utils.ssh_functions import set_default_transport from ansible.utils.display import Display display = Display() class PlaybookExecutor: ''' This is the primary class for executing playbooks, and thus the basis for bin/ansible-playbook operation. ''' def __init__(self, playbooks, inventory, variable_manager, loader, passwords): self._playbooks = playbooks self._inventory = inventory self._variable_manager = variable_manager self._loader = loader self.passwords = passwords self._unreachable_hosts = dict() if context.CLIARGS.get('listhosts') or context.CLIARGS.get('listtasks') or \ context.CLIARGS.get('listtags') or context.CLIARGS.get('syntax'): self._tqm = None else: self._tqm = TaskQueueManager( inventory=inventory, variable_manager=variable_manager, loader=loader, passwords=self.passwords, forks=context.CLIARGS.get('forks'), ) # Note: We run this here to cache whether the default ansible ssh # executable supports control persist. Sometime in the future we may # need to enhance this to check that ansible_ssh_executable specified # in inventory is also cached. We can't do this caching at the point # where it is used (in task_executor) because that is post-fork and # therefore would be discarded after every task. set_default_transport() def run(self): ''' Run the given playbook, based on the settings in the play which may limit the runs to serialized groups, etc. ''' result = 0 entrylist = [] entry = {} try: # preload become/connection/shell to set config defs cached list(connection_loader.all(class_only=True)) list(shell_loader.all(class_only=True)) list(become_loader.all(class_only=True)) for playbook in self._playbooks: # deal with FQCN resource = _get_collection_playbook_path(playbook) if resource is not None: playbook_path = resource[1] playbook_collection = resource[2] else: playbook_path = playbook # not fqcn, but might still be colleciotn playbook playbook_collection = _get_collection_name_from_path(playbook) if playbook_collection: display.warning("running playbook inside collection {0}".format(playbook_collection)) AnsibleCollectionConfig.default_collection = playbook_collection else: AnsibleCollectionConfig.default_collection = None pb = Playbook.load(playbook_path, variable_manager=self._variable_manager, loader=self._loader) # FIXME: move out of inventory self._inventory.set_playbook_basedir(os.path.realpath(os.path.dirname(playbook_path))) if self._tqm is None: # we are doing a listing entry = {'playbook': playbook_path} entry['plays'] = [] else: # make sure the tqm has callbacks loaded self._tqm.load_callbacks() self._tqm.send_callback('v2_playbook_on_start', pb) i = 1 plays = pb.get_plays() display.vv(u'%d plays in %s' % (len(plays), to_text(playbook_path))) for play in plays: if play._included_path is not None: self._loader.set_basedir(play._included_path) else: self._loader.set_basedir(pb._basedir) # clear any filters which may have been applied to the inventory self._inventory.remove_restriction() # Allow variables to be used in vars_prompt fields. all_vars = self._variable_manager.get_vars(play=play) templar = Templar(loader=self._loader, variables=all_vars) setattr(play, 'vars_prompt', templar.template(play.vars_prompt)) # FIXME: this should be a play 'sub object' like loop_control if play.vars_prompt: for var in play.vars_prompt: vname = var['name'] prompt = var.get("prompt", vname) default = var.get("default", None) private = boolean(var.get("private", True)) confirm = boolean(var.get("confirm", False)) encrypt = var.get("encrypt", None) salt_size = var.get("salt_size", None) salt = var.get("salt", None) unsafe = var.get("unsafe", None) if vname not in self._variable_manager.extra_vars: if self._tqm: self._tqm.send_callback('v2_playbook_on_vars_prompt', vname, private, prompt, encrypt, confirm, salt_size, salt, default, unsafe) play.vars[vname] = display.do_var_prompt(vname, private, prompt, encrypt, confirm, salt_size, salt, default, unsafe) else: # we are either in --list-